711 Commits
Author SHA1 Message Date
tmshv 45a6d7513b vitest 5
Build Frontend and Deploy / Build Image (push) Failing after 4m17s
2026-09-25 16:07:12 +03:00
tmshv a9c811969a biome 2.5 2026-09-25 16:05:00 +03:00
tmshv 87c413863c pb039 (#300) 2026-05-29 16:49:31 +03:00
dependabot[bot] 5ca6132903 Bump next from 16.2.4 to 16.2.6 (#299)
Bumps [next](https://github.com/vercel/next.js) from 16.2.4 to 16.2.6.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.2.4...v16.2.6)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.2.6
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-13 14:14:55 +03:00
tmshv 7b33d7d0a9 tags title layout improved 2026-04-26 01:18:47 +03:00
tmshv d9cf3a1536 Merge branch 'master' of github.com:tmshv/hudozka 2026-04-26 01:18:09 +03:00
tmshv 285527f43c Tags page (#298)
* Add spec for tag pages and tags index

* button no underscore

* Add implementation plan for tag pages and tags index

* Add TagListing type

* Extract createTag factory

* Add createTagPageCards factory

* Add getAllTagSlugs API

* Add getPagesByTag API

* Add getAllTagsWithCounts API

* Parallelize tag and page fetches in getAllTagsWithCounts

* Add Pagination component

* Use cx for Pagination class composition

* Add TagsIndex component

* Add /tags/[slug] route

* Parallelize params/searchParams awaits in /tags/[slug]

* Add /tags index route

* Activate tag buttons

* Add tag URLs to sitemap

* Mark PageGrid and Overlay as client components

* Filter zero-count tags from getAllTagSlugs

* Fix tag filter operator and draft filter for nullable field
2026-04-25 17:16:46 +03:00
tmshv 55e887aeec Add implementation plan for tag pages and tags index 2026-04-25 04:13:03 +03:00
tmshv 2a485fb0c2 button no underscore 2026-04-25 04:04:57 +03:00
tmshv 99885038fd Add spec for tag pages and tags index 2026-04-25 04:03:47 +03:00
tmshv 467a218d00 move to biome (#297)
* switch to biome

* writer format

* migrate format

* packages format

* hudozka format

* writer fix

* biome config updated

* migrate fix

* packages fix

* hudozka fix

* claude updated
2026-04-25 03:25:15 +03:00
tmshv 98dcaaa237 Breadcrumbs (#296)
* add breadcrumbs

* rm space

* move breadcrumbs to ui
2026-04-25 03:15:25 +03:00
dependabot[bot] ad9695127a Bump postcss from 8.5.8 to 8.5.10 in /apps/hudozka-writer (#295)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.8 to 8.5.10.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.8...8.5.10)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.10
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-25 02:04:26 +03:00
tmshv 29dfdc4d7c fix dockerfile 2026-04-25 01:55:02 +03:00
tmshv 7a6005461b fix card hover 2026-04-25 01:49:51 +03:00
tmshv 35e1d762ad Merge branch 'master' of github.com:tmshv/hudozka 2026-04-25 01:34:14 +03:00
tmshv f874b58dd9 Migrate to npm-workspaces monorepo (#294)
* spec update

* update md files

* add plan: monorepo

* feat: add empty apps and packages directories

* Add shared tsconfig.base.json

* feat add workspaces

* feat: move hudozka-writer into apps/

* feat: move migrate-to-pocketbase into apps/

* feat: split package.json for apps/hudozka workspace

* feat: extend tsconfig.base.json in apps/hudozka

* add dockerfile path

* feat: verify Phase 3 monorepo migration of Next app

* feat: scaffold @hudozka/utils package

* feat: add utils barrel export

* feat: extract utilities into hudozka-utils package

* feat: extract hooks into hudozka-hooks package

* Extract Box/Button/Panel/Title/Overlay into @hudozka/ui

* Scope Next ESLint rules to apps/hudozka in root flat config

* Update README and CLAUDE.md for monorepo layout

* disable image optimisation
2026-04-25 01:33:06 +03:00
tmshv 168d782a26 update md files 2026-04-24 21:41:05 +03:00
tmshv 8d1c212a00 spec update 2026-04-24 21:24:46 +03:00
tmshv 0665fa7ae7 rm strapi 2026-04-24 20:55:10 +03:00
tmshv 41fbb72216 rm sync 2026-04-24 20:54:41 +03:00
tmshv 53a822f503 next-env chage 2026-04-24 20:36:15 +03:00
tmshv 8bd52cabd6 move app to src 2026-04-24 20:36:06 +03:00
tmshv ef80f5366c move contacts to const 2026-04-24 20:31:34 +03:00
tmshv 1348eab71f rm hudozka-api 2026-04-24 20:26:30 +03:00
tmshv bc4e11d538 rm .vercelignore 2026-04-24 20:25:34 +03:00
tmshv 607f19bca4 update packages 2026-04-24 20:20:45 +03:00
tmshv 481676922f bump pb 2026-04-24 19:48:33 +03:00
dependabot[bot] 78b2c734fc Bump lxml from 4.9.1 to 6.1.0 in /modules/sync (#293)
Bumps [lxml](https://github.com/lxml/lxml) from 4.9.1 to 6.1.0.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.9.1...lxml-6.1.0)

---
updated-dependencies:
- dependency-name: lxml
  dependency-version: 6.1.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 13:38:31 +03:00
tmshv 54b142d531 rm cources from menu 2026-04-18 14:46:29 +03:00
dependabot[bot] 82be0c1234 Bump vite from 6.4.1 to 7.3.2 (#288)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.4.1 to 7.3.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v7.3.2/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.3.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-15 22:20:22 +03:00
dependabot[bot] f651c8dff2 Bump minimatch (#273)
Bumps  and [minimatch](https://github.com/isaacs/minimatch). These dependencies needed to be updated together.

Updates `minimatch` from 3.1.2 to 3.1.5
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5)

Updates `minimatch` from 9.0.5 to 9.0.9
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-version: 3.1.5
  dependency-type: indirect
- dependency-name: minimatch
  dependency-version: 9.0.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-15 22:19:50 +03:00
dependabot[bot] e1c2be30ce Bump pillow from 12.1.1 to 12.2.0 in /modules/sync (#290)
Bumps [pillow](https://github.com/python-pillow/Pillow) from 12.1.1 to 12.2.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/12.1.1...12.2.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-version: 12.2.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-15 22:19:24 +03:00
dependabot[bot] 3f5099844e Bump happy-dom from 20.5.0 to 20.9.0 (#292)
Bumps [happy-dom](https://github.com/capricorn86/happy-dom) from 20.5.0 to 20.9.0.
- [Release notes](https://github.com/capricorn86/happy-dom/releases)
- [Commits](https://github.com/capricorn86/happy-dom/compare/v20.5.0...v20.9.0)

---
updated-dependencies:
- dependency-name: happy-dom
  dependency-version: 20.9.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-15 22:19:00 +03:00
dependabot[bot] c338aed553 Bump lodash from 4.17.23 to 4.18.1 in /modules/hudozka-api (#285)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.18.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-15 21:31:36 +03:00
dependabot[bot] 412dc38526 Bump follow-redirects in /modules/hudozka-strapi-api (#291)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.6 to 1.16.0.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.6...v1.16.0)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-version: 1.16.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-15 18:47:09 +03:00
tmshv 3172e9c91e menu moved to const 2026-04-13 02:14:31 +03:00
dependabot[bot] ccca4237ac Bump path-to-regexp from 0.1.12 to 0.1.13 in /modules/hudozka-api (#283)
Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) from 0.1.12 to 0.1.13.
- [Release notes](https://github.com/pillarjs/path-to-regexp/releases)
- [Changelog](https://github.com/pillarjs/path-to-regexp/blob/v.0.1.13/History.md)
- [Commits](https://github.com/pillarjs/path-to-regexp/compare/v0.1.12...v.0.1.13)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-version: 0.1.13
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-13 01:52:32 +03:00
tmshv c7fb1a7fbe change image doamin 2026-04-12 23:14:16 +03:00
tmshv f3a7eddcd8 fix page migration 2026-04-12 23:14:16 +03:00
dependabot[bot] e98cf3ad11 Bump brace-expansion in /modules/hudozka-strapi-api (#286)
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.12 to 1.1.13.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v1.1.13)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.13
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-12 22:40:34 +03:00
dependabot[bot] 213f37b3b9 Bump lodash-es from 4.17.23 to 4.18.1 in /modules/hudozka-strapi-api (#284)
Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash-es
  dependency-version: 4.18.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-12 22:40:12 +03:00
dependabot[bot] b5f73ae875 Bump ajv from 6.12.6 to 6.14.0 in /modules/hudozka-strapi-api (#271)
Bumps [ajv](https://github.com/ajv-validator/ajv) from 6.12.6 to 6.14.0.
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v6.12.6...v6.14.0)

---
updated-dependencies:
- dependency-name: ajv
  dependency-version: 6.14.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-12 22:39:47 +03:00
dependabot[bot] db605c3160 Bump pbkdf2 from 3.1.1 to 3.1.5 in /modules/hudozka-strapi-api (#269)
Bumps [pbkdf2](https://github.com/browserify/pbkdf2) from 3.1.1 to 3.1.5.
- [Changelog](https://github.com/browserify/pbkdf2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/browserify/pbkdf2/compare/v3.1.1...v3.1.5)

---
updated-dependencies:
- dependency-name: pbkdf2
  dependency-version: 3.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-12 22:39:23 +03:00
dependabot[bot] 0b4f34d5c1 Bump picomatch from 2.2.2 to 2.3.2 in /modules/hudozka-strapi-api (#281)
Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.2.2 to 2.3.2.
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.2.2...2.3.2)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-12 19:43:11 +03:00
dependabot[bot] 456f98eee0 Bump next from 16.1.7 to 16.2.3 (#289)
Bumps [next](https://github.com/vercel/next.js) from 16.1.7 to 16.2.3.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.1.7...v16.2.3)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.2.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-12 19:42:24 +03:00
tmshv 5397615322 move pocketbase to dir 2026-04-12 19:13:24 +03:00
tmshv ed3f93de53 PB + Writer (#287)
* add pb models

* api rules has updated to view public

* pb setup is completed

* add migrate script

* add pb migrations

* ignore storage

* add pocketbase SDK dependency

* change Tag.id and PageCardDto.id to string for PocketBase

* add DocV1 content block types

* add PB client singleton and PB record types

* rewrite factory for PocketBase record types

* rewrite api.ts for PocketBase SDK

* remove unused Strapi files, add PB to config

* mark Task 7 complete in plan

* feat: verify build, tests, and lint pass with PocketBase API layer

* move completed plan: 2026-04-06-pocketbase-api-layer.md

* scaffold hudozka-writer with Vite 8, React 19, TS 5.9, Tiptap

* add PocketBase client and DocV1 types to writer

* add Login component for PocketBase superuser auth

* add App shell with auth gate and page loader

* add DocV1 <-> Tiptap serialization layer

* mark Task 5 complete in writer redesign plan

* add custom Tiptap nodes for DocV1 block types

* add Tiptap editor with toolbar and save to PocketBase

* add image picker with browse and upload

* feat: verify writer build and complete integration task

* move completed plan: 2026-04-06-hudozka-writer-redesign.md

* add local env

* rm textblock from writer

* add writer editor improvements design spec

* add writer editor improvements implementation plan

* feat: use @tiptap/markdown for text block serialization

* feat: add global markdown/rendered toggle

* feat: add BlockMenu component for block type selection

* feat: add hover + button for block insertion

* feat: add slash commands for block insertion

* feat: add interactive file block editor with FilePicker

* feat: show resolved page titles in card grid block

* move completed plan: 2026-04-07-writer-editor-improvements.md

* writer ui improved

* pages migration

* spec: draft/publish workflow for hudozka-writer

* spec: rename draft_doc to draft in spec

* plan: writer draft/publish implementation

* plan has moved

* gitignores

* plans upd

* feat(writer): update PbPage type for draft/publish workflow

* feat(writer): add save/publish/discard handlers with dirty tracking

* feat(writer): add DraftBanner component

* feat(writer): add Publish button and update toolbar layout

* feat(writer): add published toggle and update duplicate for new schema

* docs: mark manual verification steps as skipped in writer draft/publish plan

* move completed plan: 20260407-writer-draft-publish.md

* feat(writer): add BlockActions component for inline block menus

* feat(writer): add draggable NodeViews for text blocks

* feat(writer): use BlockActions in custom block NodeViews

* feat(writer): replace floating BlockInsert with inline BlockActions

* fix(writer): ensure all block wrappers have position: relative for BlockActions

* chore: mark manual verification tasks as skipped in writer block actions plan

* move completed plan: 20260408-writer-block-actions.md

* writer update

* refactor(writer): simplify BlockActions to always-visible delete + drag handle

* feat(writer): add BlockInsert component for inserting blocks between nodes

* feat(writer): redesign block sidebar with always-visible actions and insert button

* move completed plan: 20260408-writer-block-actions-redesign.md

* add spec: textblock container redesign for writer editor

* feat(writer): add TextBlock container node definition

* feat(writer): replace DraggableXxx wrappers with TextBlock container

* feat(writer): update Editor extensions for TextBlock container

* feat(writer): add split button to BlockActions for text blocks

* feat(writer): update serialization for TextBlock container

* feat(writer): update BlockMenu and SlashCommands for TextBlock

* fix(writer): use Fragment.from() for replaceWith calls in BlockActions and SlashCommands

* move completed plan: 20260408-textblock-container.md

* add air
2026-04-12 19:02:03 +03:00
dependabot[bot] 907298779c Bump minimatch from 3.1.2 to 3.1.5 in /modules/hudozka-strapi-api (#272)
Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.1.2 to 3.1.5.
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-version: 3.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-06 18:53:27 +03:00
dependabot[bot] c9f9e15160 Bump markdown from 2.6.6 to 3.8.1 in /modules/sync (#276)
Bumps [markdown](https://github.com/Python-Markdown/markdown) from 2.6.6 to 3.8.1.
- [Release notes](https://github.com/Python-Markdown/markdown/releases)
- [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md)
- [Commits](https://github.com/Python-Markdown/markdown/commits/3.8.1)

---
updated-dependencies:
- dependency-name: markdown
  dependency-version: 3.8.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-06 18:52:51 +03:00
dependabot[bot] 5381e18b96 Bump picomatch (#279)
Bumps  and [picomatch](https://github.com/micromatch/picomatch). These dependencies needed to be updated together.

Updates `picomatch` from 4.0.3 to 4.0.4
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/4.0.3...4.0.4)

Updates `picomatch` from 2.3.1 to 2.3.2
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/4.0.3...4.0.4)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 4.0.4
  dependency-type: indirect
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-06 18:52:17 +03:00
tmshv dddc8fc0d0 hide instagram 2026-04-05 15:33:07 +03:00
dependabot[bot] fa0040efab Bump requests from 2.32.4 to 2.33.0 in /modules/sync (#280)
Bumps [requests](https://github.com/psf/requests) from 2.32.4 to 2.33.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.4...v2.33.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.33.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-26 20:58:01 +03:00
dependabot[bot] 0403dcd62d Bump flatted from 3.3.3 to 3.4.2 (#278)
Bumps [flatted](https://github.com/WebReflection/flatted) from 3.3.3 to 3.4.2.
- [Commits](https://github.com/WebReflection/flatted/compare/v3.3.3...v3.4.2)

---
updated-dependencies:
- dependency-name: flatted
  dependency-version: 3.4.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-22 12:44:00 +03:00
dependabot[bot] 620d23cf81 Bump next from 16.1.6 to 16.1.7 (#277)
Bumps [next](https://github.com/vercel/next.js) from 16.1.6 to 16.1.7.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.1.6...v16.1.7)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.1.7
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-18 01:15:15 +03:00
dependabot[bot] 357f723482 Bump underscore from 1.13.1 to 1.13.8 in /modules/hudozka-api (#275)
Bumps [underscore](https://github.com/jashkenas/underscore) from 1.13.1 to 1.13.8.
- [Commits](https://github.com/jashkenas/underscore/compare/1.13.1...1.13.8)

---
updated-dependencies:
- dependency-name: underscore
  dependency-version: 1.13.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 15:56:27 +07:00
dependabot[bot] 92791180f2 Bump rollup from 4.57.1 to 4.59.0 (#274)
Bumps [rollup](https://github.com/rollup/rollup) from 4.57.1 to 4.59.0.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.57.1...v4.59.0)

---
updated-dependencies:
- dependency-name: rollup
  dependency-version: 4.59.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 13:06:32 +07:00
dependabot[bot] 9a5e888e06 Bump markdown-it from 14.1.0 to 14.1.1 (#267)
Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 14.1.0 to 14.1.1.
- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markdown-it/markdown-it/compare/14.1.0...14.1.1)

---
updated-dependencies:
- dependency-name: markdown-it
  dependency-version: 14.1.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 13:05:52 +07:00
dependabot[bot] 287a19ade7 Bump qs and express in /modules/hudozka-api (#268)
Bumps [qs](https://github.com/ljharb/qs) to 6.14.2 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `qs` from 6.13.0 to 6.14.2
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.13.0...v6.14.2)

Updates `express` from 4.21.2 to 4.22.1
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/v4.22.1/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.21.2...v4.22.1)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.2
  dependency-type: indirect
- dependency-name: express
  dependency-version: 4.22.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-25 01:35:16 +07:00
dependabot[bot] eac1fc2591 Bump bn.js in /modules/hudozka-strapi-api (#270)
Bumps  and [bn.js](https://github.com/indutny/bn.js). These dependencies needed to be updated together.

Updates `bn.js` from 5.2.1 to 5.2.3
- [Release notes](https://github.com/indutny/bn.js/releases)
- [Changelog](https://github.com/indutny/bn.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/indutny/bn.js/compare/v5.2.1...v5.2.3)

Updates `bn.js` from 4.11.9 to 4.12.3
- [Release notes](https://github.com/indutny/bn.js/releases)
- [Changelog](https://github.com/indutny/bn.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/indutny/bn.js/compare/v5.2.1...v5.2.3)

---
updated-dependencies:
- dependency-name: bn.js
  dependency-version: 5.2.3
  dependency-type: indirect
- dependency-name: bn.js
  dependency-version: 4.12.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-25 00:32:52 +07:00
dependabot[bot] a613532c89 Bump pillow from 10.3.0 to 12.1.1 in /modules/sync (#266)
Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.3.0 to 12.1.1.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/10.3.0...12.1.1)

---
updated-dependencies:
- dependency-name: pillow
  dependency-version: 12.1.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 22:08:12 +07:00
tmshv 5df43844f5 use es2020 2026-02-10 00:37:21 +07:00
tmshv a1e51e78f0 Pages -> App (#265)
* pages -> app

* add meta test

* fix gosuslugi
2026-02-09 00:25:06 +07:00
tmshv 0c8d74b21d node 24 2026-02-08 23:46:31 +07:00
tmshv 699c4f9c69 Update outdated dependencies (#264)
* update packages

* update next-seo to 7.1
2026-02-08 23:43:58 +07:00
tmshv 3df47621a2 next 16; react 19; node 24 (#263)
* next 16; react 19

* fix build errors

* add typecheck to workflow

* use node 24

* claude update
2026-02-08 23:07:25 +07:00
tmshv 60fb98ddeb git upd next conf (#262) 2026-02-08 22:27:10 +07:00
tmshv 05f7d4d13d Migrate sitemap to Next.js native app/sitemap.ts (#258)
* sitemap migration to next

* robots.txt migration

* rss refactoring

* claude upd

* add test
2026-02-08 21:46:57 +07:00
tmshv 0fd75a3b9a App refactoring (#257)
* add cache

* update Panel

* next app refacoring

* app style refactoring

* years refactroing
2026-02-08 16:34:08 +07:00
tmshv 9ee9bce197 Normalize interface naming — remove I prefix convention (#255)
* update pr workflow

* interface to types

* use consistent import

* import type syntax

* test plan note
2026-02-08 15:57:11 +07:00
tmshv 7ab9147183 fix any (#254) 2026-02-08 15:22:49 +07:00
tmshv 9f5f721bd0 update (#253) 2026-02-08 15:13:03 +07:00
tmshv dd9058b798 rm two packages for hooks (#251)
* rm two packages for hooks

* fix navigation
2026-02-08 13:31:58 +07:00
tmshv f4c5132d7c Move clamp function to lib directory (#250)
* clamp refactoring

* pr template
2026-02-08 12:34:25 +07:00
tmshv 562b4f6408 solve any problem (#248) 2026-02-08 12:22:52 +07:00
tmshv 6da5a7a07b fix docker build 2026-02-08 04:34:58 +07:00
tmshv 7eab9326e5 Remove unnecessary @types packages (#247)
* update dep in claude file

* update classnames and sharp to version that has own types
2026-02-08 04:11:01 +07:00
tmshv 820c1b3a29 Standalone setup (#208)
* init docker integration

* fix rights

* add github workflows
2026-02-08 03:51:33 +07:00
tmshv 79ab798f12 UI Tests (#246)
* adds components test setup

* add some ui tests
2026-02-08 03:49:06 +07:00
dependabot[bot] 7cce0bedb7 Bump lodash from 4.17.21 to 4.17.23 in /modules/hudozka-api (#219)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-08 03:29:59 +07:00
tmshv 8c57976663 Ymetrika update (#245)
* update claude with message about components

* yandex metrika to ts

* rm env

* add .env example

* use account from env

* add tests
2026-02-08 03:29:28 +07:00
dependabot[bot] 013578b518 Bump url-parse from 1.4.7 to 1.5.10 in /modules/hudozka-strapi-api (#221)
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.4.7 to 1.5.10.
- [Commits](https://github.com/unshiftio/url-parse/compare/1.4.7...1.5.10)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-version: 1.5.10
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-08 02:59:14 +07:00
tmshv df50dfa02f date-fns 4 (#243) 2026-02-08 02:53:27 +07:00
dependabot[bot] 3bf29793c2 Bump lodash-es from 4.17.21 to 4.17.23 in /modules/hudozka-strapi-api (#218)
Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash-es
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-08 02:37:17 +07:00
tmshv e4b7998a72 update README.md 2026-02-08 02:35:55 +07:00
tmshv 08a9a4b2d2 add claude file 2026-02-08 02:33:40 +07:00
tmshvandClaude Opus 4.6 f5a95f57c8 Add Vitest and unit tests for src/lib/ (#242)
* Add Vitest and unit tests for src/lib/ utilities

Closes #241

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* update node types

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 02:32:06 +07:00
tmshv a5bd82eb3c Upgrade TypeScript 4.9 → 5.9 (#240)
* update ts

* upd ts to 5.9; upd gitignore; other
2026-02-08 02:05:51 +07:00
dependabot[bot] cdea55dfdf Bump tar-fs from 2.1.3 to 2.1.4 in /modules/hudozka-strapi-api (#214)
Bumps [tar-fs](https://github.com/mafintosh/tar-fs) from 2.1.3 to 2.1.4.
- [Commits](https://github.com/mafintosh/tar-fs/compare/v2.1.3...v2.1.4)

---
updated-dependencies:
- dependency-name: tar-fs
  dependency-version: 2.1.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-08 01:31:01 +07:00
dependabot[bot] 171631f091 Bump jws in /modules/hudozka-strapi-api (#215)
Bumps  and [jws](https://github.com/brianloveswords/node-jws). These dependencies needed to be updated together.

Updates `jws` from 3.2.2 to 3.2.3
- [Release notes](https://github.com/brianloveswords/node-jws/releases)
- [Changelog](https://github.com/auth0/node-jws/blob/master/CHANGELOG.md)
- [Commits](https://github.com/brianloveswords/node-jws/compare/v3.2.2...v3.2.3)

Updates `jws` from 4.0.0 to 4.0.1
- [Release notes](https://github.com/brianloveswords/node-jws/releases)
- [Changelog](https://github.com/auth0/node-jws/blob/master/CHANGELOG.md)
- [Commits](https://github.com/brianloveswords/node-jws/compare/v3.2.2...v3.2.3)

---
updated-dependencies:
- dependency-name: jws
  dependency-version: 3.2.3
  dependency-type: indirect
- dependency-name: jws
  dependency-version: 4.0.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-08 01:30:17 +07:00
tmshv a4b3068850 Migrate to ESLint 9 flat config (#239)
* eslint 9

* fix lint errors

* update package-lock.json
2026-02-08 01:29:39 +07:00
tmshv d9d8bbebe1 fix npm run build command 2026-02-08 01:23:20 +07:00
tmshv d645cec124 lock file updated 2026-02-08 01:14:38 +07:00
tmshv 0562bd559f Merge branch 'master' of github.com:tmshv/hudozka 2026-02-08 01:14:06 +07:00
tmshv a48577140a npm audit fix 2026-02-08 01:13:39 +07:00
dependabot[bot] 5dfe654c0e Bump js-yaml from 4.1.0 to 4.1.1 (#213)
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1.
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.1.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-07 04:30:14 +07:00
tmshv 894d688fa6 Merge pull request #199 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/sha.js-2.4.12
Bump sha.js from 2.4.11 to 2.4.12 in /modules/hudozka-strapi-api
2025-10-24 19:15:38 +03:00
tmshv ece908bd39 Merge pull request #209 from tmshv/dependabot/npm_and_yarn/multi-c30bf1d5d2
Bump tar-fs
2025-10-24 19:15:06 +03:00
tmshv b55da97848 Merge pull request #210 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/lodash-es-4.17.21
Bump lodash-es from 4.17.20 to 4.17.21 in /modules/hudozka-strapi-api
2025-10-24 19:14:32 +03:00
tmshv cf625f3e25 Merge pull request #198 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/cipher-base-1.0.6
Bump cipher-base from 1.0.4 to 1.0.6 in /modules/hudozka-strapi-api
2025-10-24 19:14:07 +03:00
tmshv 0dad1a472c Merge pull request #197 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/multi-96c788614a
Bump on-headers and compression in /modules/hudozka-strapi-api
2025-10-24 19:13:37 +03:00
tmshv e7688f22d8 Merge pull request #196 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/brace-expansion-1.1.12
Bump brace-expansion from 1.1.11 to 1.1.12 in /modules/hudozka-strapi-api
2025-10-24 19:13:05 +03:00
dependabot[bot] 864acc5f80 Bump tar-fs
Bumps  and [tar-fs](https://github.com/mafintosh/tar-fs). These dependencies needed to be updated together.

Updates `tar-fs` from 2.1.1 to 2.1.4
- [Commits](https://github.com/mafintosh/tar-fs/compare/v2.1.1...v2.1.4)

Updates `tar-fs` from 3.0.4 to 3.1.1
- [Commits](https://github.com/mafintosh/tar-fs/compare/v2.1.1...v2.1.4)

---
updated-dependencies:
- dependency-name: tar-fs
  dependency-version: 2.1.4
  dependency-type: indirect
- dependency-name: tar-fs
  dependency-version: 3.1.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-24 16:11:42 +00:00
tmshv a56f2078c5 Merge pull request #192 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/tar-fs-2.1.3
Bump tar-fs from 2.1.1 to 2.1.3 in /modules/hudozka-strapi-api
2025-10-24 19:10:21 +03:00
tmshv 95b8fbfa11 Merge pull request #212 from tmshv/issue-211
Issue 211
2025-10-24 14:54:13 +03:00
tmshv 6503405c85 fix html 2 2025-10-24 14:52:36 +03:00
tmshv 0dbf3547f1 fix html 2025-10-24 14:49:23 +03:00
tmshv f1cafcd7d7 rm qr files 2025-10-24 14:49:09 +03:00
tmshv 7c0cc6b35b rm qr files 2025-10-24 14:45:53 +03:00
tmshv d5a80377a4 qr -> link; add one more link 2025-10-24 14:44:45 +03:00
tmshv 0d68d9a6e6 Merge pull request #190 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/koa-2.16.1
Bump koa from 2.13.1 to 2.16.1 in /modules/hudozka-strapi-api
2025-10-24 14:42:16 +03:00
dependabot[bot] 9ed616290a Bump lodash-es from 4.17.20 to 4.17.21 in /modules/hudozka-strapi-api
Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.20 to 4.17.21.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.20...4.17.21)

---
updated-dependencies:
- dependency-name: lodash-es
  dependency-version: 4.17.21
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-30 04:00:28 +00:00
tmshv 2ad849ca0e Merge pull request #193 from tmshv/dependabot/pip/modules/sync/requests-2.32.4
Bump requests from 2.32.0 to 2.32.4 in /modules/sync
2025-09-15 00:21:25 +03:00
dependabot[bot] cb0e560133 Bump sha.js from 2.4.11 to 2.4.12 in /modules/hudozka-strapi-api
Bumps [sha.js](https://github.com/crypto-browserify/sha.js) from 2.4.11 to 2.4.12.
- [Changelog](https://github.com/browserify/sha.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/crypto-browserify/sha.js/compare/v2.4.11...v2.4.12)

---
updated-dependencies:
- dependency-name: sha.js
  dependency-version: 2.4.12
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-25 23:46:01 +00:00
tmshv 5bf69fc449 color text hsl to oklch 2025-08-26 02:17:01 +03:00
tmshv e4aa681400 format 2025-08-26 02:16:50 +03:00
tmshv 89716a05c6 Merge pull request #188 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/babel/runtime-7.26.10
Bump @babel/runtime from 7.15.3 to 7.26.10 in /modules/hudozka-strapi-api
2025-08-26 02:01:16 +03:00
tmshv ff6515d010 Merge pull request #186 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/babel/helpers-7.26.10
Bump @babel/helpers from 7.15.3 to 7.26.10 in /modules/hudozka-strapi-api
2025-08-26 02:00:52 +03:00
tmshv fcc12c1630 Merge pull request #205 from tmshv/issue-204
logo native dark style
2025-08-26 02:00:27 +03:00
tmshv 37e2fc9ea5 rewrit HudozkaLogo to use dark style natively 2025-08-26 01:52:03 +03:00
tmshv 73c02d34c4 format 2025-08-26 01:47:22 +03:00
tmshv 9dee686cfd Merge pull request #185 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/elliptic-6.6.1
Bump elliptic from 6.6.0 to 6.6.1 in /modules/hudozka-strapi-api
2025-08-26 00:09:42 +03:00
tmshv 9ed81634da Merge pull request #181 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/multi-6bc014718a
Bump path-to-regexp and express in /modules/hudozka-api
2025-08-26 00:09:03 +03:00
tmshv 52045044de Merge pull request #180 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/multi-e981fcb12d
Bump path-to-regexp and express in /modules/hudozka-strapi-api
2025-08-26 00:08:41 +03:00
tmshv 15bf1c195e Merge pull request #203 from tmshv/issue-202
Split Config and Menu
2025-08-26 00:08:16 +03:00
tmshv 9c50460296 rm unused imports 2025-08-25 23:59:58 +03:00
tmshv 2b09d224d1 404 fix 2025-08-25 23:57:47 +03:00
tmshv 945947aa22 rename config context to menu context; move config to state 2025-08-25 23:56:35 +03:00
tmshv 20c59affd7 add type module to package json 2025-08-25 23:53:28 +03:00
tmshv 516a4617c4 add wrap option to fix layout on mobile 2025-08-25 23:09:20 +03:00
tmshv c28e3f74ae Merge pull request #201 from tmshv/issue-200
Accessibility Panel
2025-08-25 22:04:05 +03:00
tmshv 08b87afb12 semi 2025-08-25 21:59:39 +03:00
tmshv e5023e7709 add play all button 2025-08-25 21:57:31 +03:00
tmshv e0a6ddcafc update accessibility panel 2025-08-25 21:14:00 +03:00
tmshv 85c0d8c4ab add initial accessibility panel 2025-08-25 19:05:44 +03:00
dependabot[bot] b31dffa4c5 Bump cipher-base from 1.0.4 to 1.0.6 in /modules/hudozka-strapi-api
Bumps [cipher-base](https://github.com/crypto-browserify/cipher-base) from 1.0.4 to 1.0.6.
- [Changelog](https://github.com/browserify/cipher-base/blob/master/CHANGELOG.md)
- [Commits](https://github.com/crypto-browserify/cipher-base/compare/v1.0.4...v1.0.6)

---
updated-dependencies:
- dependency-name: cipher-base
  dependency-version: 1.0.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-21 15:15:30 +00:00
tmshv 605ff872e8 move from next lint to eslint 2025-08-20 18:38:40 +03:00
tmshv 5414821f56 use node 22 2025-08-20 18:31:42 +03:00
tmshv ab6bce9a73 use next 15.5 2025-08-20 18:28:03 +03:00
tmshv d70d8a8a7a rm google analytics tracker 2025-08-20 18:27:51 +03:00
dependabot[bot] 3dc5393841 Bump on-headers and compression in /modules/hudozka-strapi-api
Bumps [on-headers](https://github.com/jshttp/on-headers) and [compression](https://github.com/expressjs/compression). These dependencies needed to be updated together.

Updates `on-headers` from 1.0.2 to 1.1.0
- [Release notes](https://github.com/jshttp/on-headers/releases)
- [Changelog](https://github.com/jshttp/on-headers/blob/master/HISTORY.md)
- [Commits](https://github.com/jshttp/on-headers/compare/v1.0.2...v1.1.0)

Updates `compression` from 1.7.4 to 1.8.1
- [Release notes](https://github.com/expressjs/compression/releases)
- [Changelog](https://github.com/expressjs/compression/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/compression/compare/1.7.4...v1.8.1)

---
updated-dependencies:
- dependency-name: on-headers
  dependency-version: 1.1.0
  dependency-type: indirect
- dependency-name: compression
  dependency-version: 1.8.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-17 21:20:11 +00:00
dependabot[bot] 8f7f2f0110 Bump brace-expansion in /modules/hudozka-strapi-api
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.11 to 1.1.12.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.12
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-03 22:00:04 +00:00
tmshv a47142944b Merge pull request #195 from tmshv/dependabot/npm_and_yarn/next-15.3.4
Bump next from 15.3.1 to 15.3.4
2025-07-04 00:59:01 +03:00
dependabot[bot] df905c193e Bump next from 15.3.1 to 15.3.4
Bumps [next](https://github.com/vercel/next.js) from 15.3.1 to 15.3.4.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v15.3.1...v15.3.4)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 15.3.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-03 21:05:00 +00:00
dependabot[bot] 27534f251c Bump requests from 2.32.0 to 2.32.4 in /modules/sync
Bumps [requests](https://github.com/psf/requests) from 2.32.0 to 2.32.4.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.0...v2.32.4)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.32.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-10 08:26:46 +00:00
dependabot[bot] df55e834b3 Bump tar-fs from 2.1.1 to 2.1.3 in /modules/hudozka-strapi-api
Bumps [tar-fs](https://github.com/mafintosh/tar-fs) from 2.1.1 to 2.1.3.
- [Commits](https://github.com/mafintosh/tar-fs/commits)

---
updated-dependencies:
- dependency-name: tar-fs
  dependency-version: 2.1.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-03 06:16:39 +00:00
tmshv 9cf61de335 Merge pull request #191 from tmshv/dependabot/npm_and_yarn/babel/runtime-7.27.0
Bump @babel/runtime from 7.23.1 to 7.27.0
2025-04-26 23:15:54 +03:00
tmshv 6449845fd6 duplicate blind button in header 2025-04-26 16:17:39 +03:00
tmshv 343a364d9b next 15.3 2025-04-26 16:17:13 +03:00
dependabot[bot] f5f3bf4e01 Bump @babel/runtime from 7.23.1 to 7.27.0
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.23.1 to 7.27.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.0/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-version: 7.27.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-24 17:56:05 +00:00
dependabot[bot] 45faccf27d Bump koa from 2.13.1 to 2.16.1 in /modules/hudozka-strapi-api
Bumps [koa](https://github.com/koajs/koa) from 2.13.1 to 2.16.1.
- [Release notes](https://github.com/koajs/koa/releases)
- [Changelog](https://github.com/koajs/koa/blob/master/History.md)
- [Commits](https://github.com/koajs/koa/compare/2.13.1...v2.16.1)

---
updated-dependencies:
- dependency-name: koa
  dependency-version: 2.16.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-09 13:29:26 +00:00
dependabot[bot] 3740e79d65 Bump @babel/runtime in /modules/hudozka-strapi-api
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.15.3 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-22 07:02:44 +00:00
dependabot[bot] acf5e451e5 Bump @babel/helpers in /modules/hudozka-strapi-api
Bumps [@babel/helpers](https://github.com/babel/babel/tree/HEAD/packages/babel-helpers) from 7.15.3 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-helpers)

---
updated-dependencies:
- dependency-name: "@babel/helpers"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-12 19:46:41 +00:00
tmshv 4e3e8775f7 Merge branch 'master' of github.com:tmshv/hudozka 2025-02-21 18:09:37 +03:00
tmshv c95a9b88b5 update next file 2025-02-21 18:09:21 +03:00
tmshv 5f287ffc9c adds two qr codes at footer 2025-02-21 18:09:02 +03:00
tmshv ef9938eac8 rm empty line 2025-02-21 18:08:36 +03:00
dependabot[bot] 0874fa4336 Bump elliptic from 6.6.0 to 6.6.1 in /modules/hudozka-strapi-api
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.6.0 to 6.6.1.
- [Commits](https://github.com/indutny/elliptic/compare/v6.6.0...v6.6.1)

---
updated-dependencies:
- dependency-name: elliptic
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-12 21:03:09 +00:00
tmshv 453a43e908 Merge pull request #182 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/nanoid-3.3.8
Bump nanoid from 3.3.4 to 3.3.8 in /modules/hudozka-strapi-api
2025-01-30 15:15:46 +03:00
dependabot[bot] d34279920f Bump nanoid from 3.3.4 to 3.3.8 in /modules/hudozka-strapi-api
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.4 to 3.3.8.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.4...3.3.8)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-11 01:08:52 +00:00
dependabot[bot] e02c2d2f23 Bump path-to-regexp and express in /modules/hudozka-api
Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) to 0.1.12 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `path-to-regexp` from 0.1.10 to 0.1.12
- [Release notes](https://github.com/pillarjs/path-to-regexp/releases)
- [Changelog](https://github.com/pillarjs/path-to-regexp/blob/master/History.md)
- [Commits](https://github.com/pillarjs/path-to-regexp/compare/v0.1.10...v0.1.12)

Updates `express` from 4.21.0 to 4.21.2
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.2/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.21.0...4.21.2)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-type: indirect
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-06 02:51:21 +00:00
dependabot[bot] 8f1d82cb44 Bump path-to-regexp and express in /modules/hudozka-strapi-api
Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together.

Updates `path-to-regexp` from 0.1.10 to 1.9.0
- [Release notes](https://github.com/pillarjs/path-to-regexp/releases)
- [Changelog](https://github.com/pillarjs/path-to-regexp/blob/master/History.md)
- [Commits](https://github.com/pillarjs/path-to-regexp/compare/v0.1.10...v1.9.0)

Updates `express` from 4.21.0 to 4.21.2
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.2/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.21.0...4.21.2)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-type: indirect
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-05 23:00:19 +00:00
tmshv 5a320d5751 Merge branch 'master' of github.com:tmshv/hudozka 2024-11-29 23:17:55 +03:00
tmshv 26685b66bb Merge pull request #179 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/multi-98a2c25ce6
Bump cross-spawn in /modules/hudozka-strapi-api
2024-11-29 23:16:29 +03:00
tmshv db6bb50ecb Merge pull request #178 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/elliptic-6.6.0
Bump elliptic from 6.5.4 to 6.6.0 in /modules/hudozka-strapi-api
2024-11-29 23:16:09 +03:00
tmshv 274b6c42f7 Merge pull request #168 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/glob-parent-5.1.2
Bump glob-parent from 5.1.1 to 5.1.2 in /modules/hudozka-strapi-api
2024-11-29 23:15:50 +03:00
tmshv 0be3d900fc Merge pull request #159 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/follow-redirects-1.15.6
Bump follow-redirects from 1.14.9 to 1.15.6 in /modules/hudozka-strapi-api
2024-11-29 23:15:27 +03:00
tmshv c8b6ba2828 Merge pull request #167 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/ws-6.2.3
Bump ws from 6.2.1 to 6.2.3 in /modules/hudozka-strapi-api
2024-11-29 23:15:02 +03:00
tmshv 03907d3b92 Merge pull request #153 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/babel/traverse-7.23.2
Bump @babel/traverse from 7.15.0 to 7.23.2 in /modules/hudozka-strapi-api
2024-11-29 23:14:36 +03:00
tmshv 938ec5e973 Merge branch 'master' of github.com:tmshv/hudozka 2024-11-29 23:13:55 +03:00
tmshv d1605cd160 Merge pull request #174 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/multi-d66d039ac5
Bump serve-static and express in /modules/hudozka-api
2024-11-29 23:12:56 +03:00
tmshv 20567d5234 Merge pull request #175 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/multi-cf87d80143
Bump send and express in /modules/hudozka-api
2024-11-29 23:12:23 +03:00
tmshv aeeef07bb1 Merge pull request #173 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/multi-9423f4c335
Bump body-parser and express in /modules/hudozka-api
2024-11-29 23:11:58 +03:00
tmshv 34279bb6f4 Merge pull request #172 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/multi-1d234c620e
Bump path-to-regexp and express in /modules/hudozka-api
2024-11-29 23:11:21 +03:00
tmshv c866ecdb1d Merge pull request #166 from tmshv/dependabot/npm_and_yarn/braces-3.0.3
Bump braces from 3.0.2 to 3.0.3
2024-11-29 23:09:21 +03:00
tmshv d7fe111d09 adds gititnore for old strapi 2024-11-29 23:07:44 +03:00
tmshv 8ee120a42d Merge pull request #165 from tmshv/dependabot/pip/modules/sync/requests-2.32.0
Bump requests from 2.31.0 to 2.32.0 in /modules/sync
2024-11-29 23:04:01 +03:00
tmshv 4ce495a1cd update to next 15: use turbo, ts next config 2024-11-29 22:58:42 +03:00
tmshv 845cd2b327 fix img warnings 2024-11-29 22:52:31 +03:00
tmshv 7ea10f3f25 update next eslint package to same version as next itself 2024-11-29 22:52:15 +03:00
tmshv f13c7fc2bb adds mise 2024-11-29 22:43:59 +03:00
tmshv bb0d7a5b5e updated to react 18.3 2024-11-26 18:56:44 +03:00
tmshv 855959b19f updated to next 14 2024-11-26 18:56:05 +03:00
tmshv 21047227b8 apiGet stability improved 2024-11-26 18:54:32 +03:00
dependabot[bot] 10fa1e63c2 Bump cross-spawn in /modules/hudozka-strapi-api
Bumps  and [cross-spawn](https://github.com/moxystudio/node-cross-spawn). These dependencies needed to be updated together.

Updates `cross-spawn` from 7.0.3 to 7.0.6
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6)

Updates `cross-spawn` from 6.0.5 to 7.0.6
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6)

---
updated-dependencies:
- dependency-name: cross-spawn
  dependency-type: indirect
- dependency-name: cross-spawn
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-20 04:18:33 +00:00
dependabot[bot] 8c43ea84e3 Bump elliptic from 6.5.4 to 6.6.0 in /modules/hudozka-strapi-api
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.4 to 6.6.0.
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.4...v6.6.0)

---
updated-dependencies:
- dependency-name: elliptic
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-30 05:49:06 +00:00
dependabot[bot] 45eb5751f8 Bump send and express in /modules/hudozka-api
Bumps [send](https://github.com/pillarjs/send) to 0.19.0 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `send` from 0.18.0 to 0.19.0
- [Release notes](https://github.com/pillarjs/send/releases)
- [Changelog](https://github.com/pillarjs/send/blob/master/HISTORY.md)
- [Commits](https://github.com/pillarjs/send/compare/0.18.0...0.19.0)

Updates `express` from 4.18.2 to 4.21.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.21.0)

---
updated-dependencies:
- dependency-name: send
  dependency-type: indirect
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-13 12:50:17 +00:00
dependabot[bot] 570434d2f4 Bump serve-static and express in /modules/hudozka-api
Bumps [serve-static](https://github.com/expressjs/serve-static) to 1.16.2 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `serve-static` from 1.15.0 to 1.16.2
- [Release notes](https://github.com/expressjs/serve-static/releases)
- [Changelog](https://github.com/expressjs/serve-static/blob/v1.16.2/HISTORY.md)
- [Commits](https://github.com/expressjs/serve-static/compare/v1.15.0...v1.16.2)

Updates `express` from 4.18.2 to 4.21.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.21.0)

---
updated-dependencies:
- dependency-name: serve-static
  dependency-type: indirect
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-13 12:50:08 +00:00
dependabot[bot] 654b804bc3 Bump body-parser and express in /modules/hudozka-api
Bumps [body-parser](https://github.com/expressjs/body-parser) to 1.20.3 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `body-parser` from 1.20.1 to 1.20.3
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.1...1.20.3)

Updates `express` from 4.18.2 to 4.21.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.21.0)

---
updated-dependencies:
- dependency-name: body-parser
  dependency-type: indirect
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-13 12:50:04 +00:00
dependabot[bot] 0762d87156 Bump path-to-regexp and express in /modules/hudozka-api
Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) to 0.1.10 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `path-to-regexp` from 0.1.7 to 0.1.10
- [Release notes](https://github.com/pillarjs/path-to-regexp/releases)
- [Changelog](https://github.com/pillarjs/path-to-regexp/blob/master/History.md)
- [Commits](https://github.com/pillarjs/path-to-regexp/compare/v0.1.7...v0.1.10)

Updates `express` from 4.18.2 to 4.21.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.21.0)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-type: indirect
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-13 12:50:04 +00:00
tmshv 460e8fc3cc Merge pull request #169 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/multi-d1b64f7343
Bump path-to-regexp and express in /modules/hudozka-strapi-api
2024-09-13 15:49:22 +03:00
dependabot[bot] 7bf3ec1d0c Bump path-to-regexp and express in /modules/hudozka-strapi-api
Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together.

Updates `path-to-regexp` from 1.8.0 to 1.9.0
- [Release notes](https://github.com/pillarjs/path-to-regexp/releases)
- [Changelog](https://github.com/pillarjs/path-to-regexp/blob/master/History.md)
- [Commits](https://github.com/pillarjs/path-to-regexp/compare/v1.8.0...v1.9.0)

Updates `express` from 4.18.2 to 4.21.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.21.0)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-type: indirect
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-12 00:38:22 +00:00
tmshv cf075048b6 Merge pull request #158 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/ip-1.1.9
Bump ip from 1.1.5 to 1.1.9 in /modules/hudozka-strapi-api
2024-07-04 17:01:01 +03:00
dependabot[bot] 82b6304c8e Bump glob-parent from 5.1.1 to 5.1.2 in /modules/hudozka-strapi-api
Bumps [glob-parent](https://github.com/gulpjs/glob-parent) from 5.1.1 to 5.1.2.
- [Release notes](https://github.com/gulpjs/glob-parent/releases)
- [Changelog](https://github.com/gulpjs/glob-parent/blob/main/CHANGELOG.md)
- [Commits](https://github.com/gulpjs/glob-parent/compare/v5.1.1...v5.1.2)

---
updated-dependencies:
- dependency-name: glob-parent
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-28 05:15:02 +00:00
dependabot[bot] 46fb58cccf Bump ws from 6.2.1 to 6.2.3 in /modules/hudozka-strapi-api
Bumps [ws](https://github.com/websockets/ws) from 6.2.1 to 6.2.3.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/6.2.1...6.2.3)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-18 08:28:27 +00:00
dependabot[bot] eb869b5140 Bump braces from 3.0.2 to 3.0.3
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-16 10:39:21 +00:00
dependabot[bot] 040ed731ba ---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-21 05:30:23 +00:00
tmshv 41c7bd10fd Merge pull request #163 from tmshv/dependabot/pip/modules/sync/pymongo-4.6.3
Bump pymongo from 3.3.0 to 4.6.3 in /modules/sync
2024-05-03 20:16:23 +03:00
dependabot[bot] 5652cd09d7 Bump pymongo from 3.3.0 to 4.6.3 in /modules/sync
Bumps [pymongo](https://github.com/mongodb/mongo-python-driver) from 3.3.0 to 4.6.3.
- [Release notes](https://github.com/mongodb/mongo-python-driver/releases)
- [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst)
- [Commits](https://github.com/mongodb/mongo-python-driver/compare/3.3.0...4.6.3)

---
updated-dependencies:
- dependency-name: pymongo
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-08 16:06:54 +00:00
tmshv 3fc64bc18f Merge pull request #162 from tmshv/dependabot/pip/modules/sync/pillow-10.3.0
Bump pillow from 10.2.0 to 10.3.0 in /modules/sync
2024-04-04 17:30:01 +03:00
dependabot[bot] 211439cbd0 Bump pillow from 10.2.0 to 10.3.0 in /modules/sync
Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.2.0 to 10.3.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/10.2.0...10.3.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-03 16:21:25 +00:00
dependabot[bot] f7231cf49b Bump follow-redirects in /modules/hudozka-strapi-api
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.9 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.9...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-15 17:17:25 +00:00
dependabot[bot] a53108bb93 Bump ip from 1.1.5 to 1.1.9 in /modules/hudozka-strapi-api
Bumps [ip](https://github.com/indutny/node-ip) from 1.1.5 to 1.1.9.
- [Commits](https://github.com/indutny/node-ip/compare/v1.1.5...v1.1.9)

---
updated-dependencies:
- dependency-name: ip
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-21 20:02:05 +00:00
tmshv 6565c6ab95 Merge pull request #157 from tmshv/dependabot/pip/modules/sync/pillow-10.2.0
Bump pillow from 10.0.1 to 10.2.0 in /modules/sync
2024-01-23 12:26:15 +03:00
dependabot[bot] 59e40aa892 Bump pillow from 10.0.1 to 10.2.0 in /modules/sync
Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.0.1 to 10.2.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/10.0.1...10.2.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 21:59:16 +00:00
tmshv 0b4d87b166 Merge pull request #149 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/debug-and-koa-ip-4.3.4
Bump debug and koa-ip in /modules/hudozka-strapi-api
2024-01-21 00:20:11 +03:00
tmshv ebbdb51f37 Merge pull request #155 from tmshv/dependabot/npm_and_yarn/sharp-0.32.6
Bump sharp from 0.31.0 to 0.32.6
2023-11-16 23:45:32 +03:00
dependabot[bot] cef0f2ba0a Bump sharp from 0.31.0 to 0.32.6
Bumps [sharp](https://github.com/lovell/sharp) from 0.31.0 to 0.32.6.
- [Release notes](https://github.com/lovell/sharp/releases)
- [Changelog](https://github.com/lovell/sharp/blob/main/docs/changelog.md)
- [Commits](https://github.com/lovell/sharp/compare/v0.31.0...v0.32.6)

---
updated-dependencies:
- dependency-name: sharp
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-16 19:01:27 +00:00
tmshv b9784c248e Merge pull request #154 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/browserify-sign-4.2.2
Bump browserify-sign from 4.2.1 to 4.2.2 in /modules/hudozka-strapi-api
2023-10-29 14:06:55 +03:00
dependabot[bot] 4d231ef090 Bump browserify-sign from 4.2.1 to 4.2.2 in /modules/hudozka-strapi-api
Bumps [browserify-sign](https://github.com/crypto-browserify/browserify-sign) from 4.2.1 to 4.2.2.
- [Changelog](https://github.com/browserify/browserify-sign/blob/main/CHANGELOG.md)
- [Commits](https://github.com/crypto-browserify/browserify-sign/compare/v4.2.1...v4.2.2)

---
updated-dependencies:
- dependency-name: browserify-sign
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-27 23:29:49 +00:00
dependabot[bot] 81d56eaab1 Bump @babel/traverse in /modules/hudozka-strapi-api
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.15.0 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-17 07:06:11 +00:00
tmshv e90e07337f Merge branch 'master' of github.com:tmshv/hudozka 2023-10-05 05:54:48 +03:00
tmshv 2e4328d55f add apple-mobile-web-app-capable 2023-10-05 05:54:33 +03:00
tmshv bd28c39f2a Merge pull request #150 from tmshv/dependabot/pip/modules/sync/pillow-10.0.1
Bump pillow from 9.3.0 to 10.0.1 in /modules/sync
2023-10-04 14:25:25 +03:00
dependabot[bot] 9005bdeb60 Bump pillow from 9.3.0 to 10.0.1 in /modules/sync
Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.3.0 to 10.0.1.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/9.3.0...10.0.1)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-04 00:53:04 +00:00
dependabot[bot] dd93a3fa19 Bump debug and koa-ip in /modules/hudozka-strapi-api
Bumps [debug](https://github.com/debug-js/debug) and [koa-ip](https://github.com/nswbmw/koa-ip). These dependencies needed to be updated together.

Updates `debug` from 4.1.1 to 4.3.4
- [Release notes](https://github.com/debug-js/debug/releases)
- [Commits](https://github.com/debug-js/debug/compare/4.1.1...4.3.4)

Updates `koa-ip` from 2.1.0 to 2.1.3
- [Changelog](https://github.com/nswbmw/koa-ip/blob/master/History.md)
- [Commits](https://github.com/nswbmw/koa-ip/commits)

---
updated-dependencies:
- dependency-name: debug
  dependency-type: indirect
- dependency-name: koa-ip
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-03 05:03:24 +00:00
tmshv 0e2796453c sexy card hover 2023-09-25 18:44:38 +03:00
tmshv ac5a656f41 fix grid on mobile 2023-09-25 18:37:30 +03:00
tmshv f9d813c57b card grid wip fix 2023-09-25 18:06:32 +03:00
tmshv d7e3bad283 next file updated 2023-09-25 18:06:08 +03:00
tmshv f0fe786dc5 card update 2023-09-25 17:43:19 +03:00
tmshv 0b48f5ac92 next 13.5 2023-09-25 15:17:58 +03:00
tmshv 320768b6db add repeat for gosuslugi 2023-08-16 20:09:08 +03:00
tmshv ac3bbb825d fix gosuslugi 2023-08-16 17:23:15 +03:00
tmshv 69b1e5a9f7 Merge pull request #148 from tmshv/dependabot/npm_and_yarn/word-wrap-1.2.4
Bump word-wrap from 1.2.3 to 1.2.4
2023-07-19 13:26:11 +03:00
dependabot[bot] 2e6aea0ee4 Bump word-wrap from 1.2.3 to 1.2.4
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-18 22:18:21 +00:00
tmshv ee56a66aaf Merge pull request #147 from tmshv/dependabot/npm_and_yarn/semver-6.3.1
Bump semver from 6.3.0 to 6.3.1
2023-07-13 15:46:07 +03:00
dependabot[bot] 6cddf00716 Bump semver from 6.3.0 to 6.3.1
Bumps [semver](https://github.com/npm/node-semver) from 6.3.0 to 6.3.1.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v6.3.1/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v6.3.0...v6.3.1)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-13 12:05:14 +00:00
tmshv 57b9b6260e Merge pull request #146 from tmshv/dependabot/pip/modules/sync/pypdf2-1.27.9
Bump pypdf2 from 1.27.5 to 1.27.9 in /modules/sync
2023-07-04 16:02:13 +03:00
dependabot[bot] c3011b8e95 Bump pypdf2 from 1.27.5 to 1.27.9 in /modules/sync
Bumps [pypdf2](https://github.com/py-pdf/PyPDF2) from 1.27.5 to 1.27.9.
- [Release notes](https://github.com/py-pdf/PyPDF2/releases)
- [Changelog](https://github.com/py-pdf/pypdf/blob/1.27.9/CHANGELOG)
- [Commits](https://github.com/py-pdf/PyPDF2/compare/1.27.5...1.27.9)

---
updated-dependencies:
- dependency-name: pypdf2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-30 22:26:09 +00:00
tmshv 1502ac4238 Merge pull request #145 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/semver-and-mongodb--removed
Bump semver and mongodb in /modules/hudozka-api
2023-06-27 23:30:49 +03:00
dependabot[bot] f9d72c57e7 Bump semver and mongodb in /modules/hudozka-api
Removes [semver](https://github.com/npm/node-semver). It's no longer used after updating ancestor dependency [mongodb](https://github.com/mongodb/node-mongodb-native). These dependencies need to be updated together.


Removes `semver`

Updates `mongodb` from 3.5.3 to 3.7.4
- [Release notes](https://github.com/mongodb/node-mongodb-native/releases)
- [Changelog](https://github.com/mongodb/node-mongodb-native/blob/main/HISTORY.md)
- [Commits](https://github.com/mongodb/node-mongodb-native/compare/v3.5.3...v3.7.4)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
- dependency-name: mongodb
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-23 20:24:04 +00:00
tmshv 42c5dd2fb3 Merge branch 'master' of github.com:tmshv/hudozka 2023-06-07 16:25:12 +03:00
tmshv 239eceb653 eslint 8.42 2023-06-07 16:25:01 +03:00
tmshv cbc39c8db6 next update 2023-06-02 20:24:10 +04:00
tmshv 02354b31b4 Merge pull request #144 from tmshv/dependabot/pip/modules/sync/requests-2.31.0
Bump requests from 2.20.0 to 2.31.0 in /modules/sync
2023-05-23 12:39:59 +03:00
dependabot[bot] c1810f9ee3 Bump requests from 2.20.0 to 2.31.0 in /modules/sync
Bumps [requests](https://github.com/psf/requests) from 2.20.0 to 2.31.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.20.0...v2.31.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-22 21:38:51 +00:00
tmshv d5466d2db7 Merge pull request #143 from tmshv/upd/next134
next 13.4
2023-05-05 03:48:04 +05:30
tmshv a1f7f16003 next 13.4 2023-05-05 03:09:56 +05:30
tmshv af85ed60b3 Merge pull request #142 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/sqlite3-5.1.5
Bump sqlite3 from 5.0.8 to 5.1.5 in /modules/hudozka-strapi-api
2023-04-10 11:53:34 +05:30
tmshv 2010f0c59f next 13.2 2023-03-14 17:31:21 +05:30
tmshv 032e7b3186 Merge branch 'master' of github.com:tmshv/hudozka 2023-03-14 17:27:13 +05:30
tmshv 526ec3f2cf update eslint to latest 2023-03-14 17:25:48 +05:30
dependabot[bot] b4987e4b70 Bump sqlite3 from 5.0.8 to 5.1.5 in /modules/hudozka-strapi-api
Bumps [sqlite3](https://github.com/TryGhost/node-sqlite3) from 5.0.8 to 5.1.5.
- [Release notes](https://github.com/TryGhost/node-sqlite3/releases)
- [Commits](https://github.com/TryGhost/node-sqlite3/compare/v5.0.8...v5.1.5)

---
updated-dependencies:
- dependency-name: sqlite3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-13 21:46:04 +00:00
tmshv b5aab63b07 Merge pull request #141 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/sequelize-and-strapi-plugin-users-permissions--removed
Bump sequelize and strapi-plugin-users-permissions in /modules/hudozka-strapi-api
2023-02-23 08:48:44 +05:30
dependabot[bot] cea30bf4f7 Bump sequelize and strapi-plugin-users-permissions
Removes [sequelize](https://github.com/sequelize/sequelize). It's no longer used after updating ancestor dependency [strapi-plugin-users-permissions](https://github.com/strapi/strapi). These dependencies need to be updated together.


Removes `sequelize`

Updates `strapi-plugin-users-permissions` from 3.6.8 to 3.6.11
- [Release notes](https://github.com/strapi/strapi/releases)
- [Commits](https://github.com/strapi/strapi/compare/v3.6.8...v3.6.11)

---
updated-dependencies:
- dependency-name: sequelize
  dependency-type: indirect
- dependency-name: strapi-plugin-users-permissions
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-23 02:50:36 +00:00
tmshv b9f8fcd14e Merge pull request #140 from tmshv/upd/next-image-updates
next/image updates
2023-02-09 20:38:05 +05:00
tmshv c1d33cf681 fix typo in FileCard component 2023-02-09 20:28:08 +05:00
tmshv c8ccda9433 rm unused image 2023-02-09 20:25:07 +05:00
tmshv 45b100ec15 move object fit out of image props 2023-02-09 20:24:57 +05:00
tmshv 5ef4e38d79 picture image style: add width/height for responsive 2023-02-09 20:18:09 +05:00
tmshv 208f75f350 rm layout from ui/Picture 2023-02-09 20:11:54 +05:00
tmshv abfe2e7d61 use image component api from next 13 2023-02-09 20:08:52 +05:00
tmshv 2e358fc609 card grid component props refactor 2023-02-09 20:08:35 +05:00
tmshv 7c8fd851b1 merge next-lib to remote/api 2023-02-09 19:55:09 +05:00
tmshv 780e9ac0e8 introduce remote/api 2023-02-09 19:49:34 +05:00
tmshv 727c0592ce use native tail and remove lodash 2023-02-09 19:32:30 +05:00
tmshv 1c0a28b25f add format command 2023-02-09 19:31:44 +05:00
tmshv c571e37cc2 tag list double quotes 2023-02-09 19:27:06 +05:00
tmshv e796e2fe84 Merge pull request #139 from tmshv/upd/maintenance-004
maintenance 4
2023-02-09 16:25:37 +05:00
tmshv 706c310458 rm a inside Link 2023-02-09 16:22:01 +05:00
tmshv 656c5884c8 add proculture tracker 2023-02-09 15:43:22 +05:00
tmshv 94f2634e56 next config js -> mjs 2023-02-09 15:33:39 +05:00
tmshv 03a388136d node types update 2023-02-09 15:28:04 +05:00
tmshv 3b9807a1de rm should 2023-02-09 15:27:06 +05:00
tmshv f14317dc0c eslint 8.33 2023-02-09 15:26:28 +05:00
tmshv 955d0cbe62 next-seo 5.15 2023-02-09 15:25:40 +05:00
tmshv d3368a4c5e bump typescript to 4.9 2023-02-09 15:24:51 +05:00
tmshv d643fb4b8a bump next to 13.1 2023-02-09 15:21:37 +05:00
tmshv 692671fba5 ingnore node modules at all levels 2023-02-09 15:01:45 +05:00
tmshv 9932ae621e move .next to dotfolders 2023-02-09 15:01:25 +05:00
tmshv a4542c57ba Merge pull request #126 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/passport-and-strapi-admin-0.6.0
Bump passport and strapi-admin in /modules/hudozka-strapi-api
2023-02-09 14:47:57 +05:00
tmshv 849bc74dd1 Merge pull request #135 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/ua-parser-js-0.7.33
Bump ua-parser-js from 0.7.23 to 0.7.33 in /modules/hudozka-strapi-api
2023-02-09 14:47:32 +05:00
tmshv 108b5dff10 Merge pull request #129 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/decode-uri-component-0.2.2
Bump decode-uri-component from 0.2.0 to 0.2.2 in /modules/hudozka-strapi-api
2023-02-09 14:47:10 +05:00
tmshv 1a7bec2fa4 Merge pull request #134 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/knex-2.4.0
Bump knex from 0.21.18 to 2.4.0 in /modules/hudozka-strapi-api
2023-02-09 14:46:48 +05:00
tmshv 15c26ccbce Merge pull request #137 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/http-cache-semantics-4.1.1
Bump http-cache-semantics from 4.1.0 to 4.1.1 in /modules/hudozka-strapi-api
2023-02-09 14:16:59 +05:00
dependabot[bot] ccc879ea9b Bump http-cache-semantics in /modules/hudozka-strapi-api
Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kornelski/http-cache-semantics/releases)
- [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-04 12:55:38 +00:00
tmshv 2cf6e1b9b8 Merge pull request #136 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/mongoose-5.13.15
Bump mongoose from 5.11.13 to 5.13.15 in /modules/hudozka-strapi-api
2023-02-01 15:49:10 +06:00
dependabot[bot] 521e399ec3 Bump mongoose from 5.11.13 to 5.13.15 in /modules/hudozka-strapi-api
Bumps [mongoose](https://github.com/Automattic/mongoose) from 5.11.13 to 5.13.15.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Automattic/mongoose/compare/5.11.13...5.13.15)

---
updated-dependencies:
- dependency-name: mongoose
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-01 03:48:06 +00:00
dependabot[bot] c4517b438f Bump ua-parser-js from 0.7.23 to 0.7.33 in /modules/hudozka-strapi-api
Bumps [ua-parser-js](https://github.com/faisalman/ua-parser-js) from 0.7.23 to 0.7.33.
- [Release notes](https://github.com/faisalman/ua-parser-js/releases)
- [Changelog](https://github.com/faisalman/ua-parser-js/blob/master/changelog.md)
- [Commits](https://github.com/faisalman/ua-parser-js/compare/0.7.23...0.7.33)

---
updated-dependencies:
- dependency-name: ua-parser-js
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-27 03:21:43 +00:00
dependabot[bot] 61e53bb5eb Bump knex from 0.21.18 to 2.4.0 in /modules/hudozka-strapi-api
Bumps [knex](https://github.com/knex/knex) from 0.21.18 to 2.4.0.
- [Release notes](https://github.com/knex/knex/releases)
- [Changelog](https://github.com/knex/knex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/knex/knex/commits/2.4.0)

---
updated-dependencies:
- dependency-name: knex
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-11 03:24:27 +00:00
tmshv 12ddde1d6d Merge pull request #133 from tmshv/dependabot/npm_and_yarn/json5-1.0.2
Bump json5 from 1.0.1 to 1.0.2
2023-01-08 13:54:49 +06:00
dependabot[bot] 1656d32d27 Bump json5 from 1.0.1 to 1.0.2
Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-08 06:48:39 +00:00
tmshv 84f7d1db1f Merge pull request #130 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/qs-6.5.3
Bump qs from 6.5.2 to 6.5.3 in /modules/hudozka-strapi-api
2023-01-01 18:16:56 +06:00
dependabot[bot] 059c6776d7 Bump qs from 6.5.2 to 6.5.3 in /modules/hudozka-strapi-api
Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-30 11:54:25 +00:00
tmshv d488f4d558 Merge pull request #132 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/express-4.18.2
Bump express from 4.17.1 to 4.18.2 in /modules/hudozka-strapi-api
2022-12-30 17:53:02 +06:00
dependabot[bot] 2b292f2e03 Bump express from 4.17.1 to 4.18.2 in /modules/hudozka-strapi-api
Bumps [express](https://github.com/expressjs/express) from 4.17.1 to 4.18.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.17.1...4.18.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-09 07:42:04 +00:00
tmshv f16c0abbef Merge pull request #131 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/qs-and-express-6.11.0
Bump qs and express in /modules/hudozka-api
2022-12-09 13:41:29 +06:00
dependabot[bot] dca4a3f01d Bump qs and express in /modules/hudozka-api
Bumps [qs](https://github.com/ljharb/qs) to 6.11.0 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together.


Updates `qs` from 6.7.0 to 6.11.0
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.7.0...v6.11.0)

Updates `express` from 4.17.1 to 4.18.2
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.17.1...4.18.2)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: indirect
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-07 08:41:20 +00:00
dependabot[bot] 41daead65e Bump decode-uri-component in /modules/hudozka-strapi-api
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-03 14:30:42 +00:00
tmshv 4f4bdad604 Merge pull request #128 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/sharp-and-strapi-plugin-upload-0.31.1
Bump sharp and strapi-plugin-upload in /modules/hudozka-strapi-api
2022-12-03 20:30:13 +06:00
dependabot[bot] 61366a0078 Bump passport and strapi-admin in /modules/hudozka-strapi-api
Bumps [passport](https://github.com/jaredhanson/passport) to 0.6.0 and updates ancestor dependency [strapi-admin](https://github.com/strapi/strapi). These dependencies need to be updated together.


Updates `passport` from 0.4.1 to 0.6.0
- [Release notes](https://github.com/jaredhanson/passport/releases)
- [Changelog](https://github.com/jaredhanson/passport/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jaredhanson/passport/compare/v0.4.1...v0.6.0)

Updates `strapi-admin` from 3.6.8 to 3.6.11
- [Release notes](https://github.com/strapi/strapi/releases)
- [Commits](https://github.com/strapi/strapi/compare/v3.6.8...v3.6.11)

---
updated-dependencies:
- dependency-name: passport
  dependency-type: indirect
- dependency-name: strapi-admin
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-23 16:12:38 +00:00
dependabot[bot] ab56af7d13 Bump sharp and strapi-plugin-upload in /modules/hudozka-strapi-api
Bumps [sharp](https://github.com/lovell/sharp) to 0.31.1 and updates ancestor dependency [strapi-plugin-upload](https://github.com/strapi/strapi/tree/HEAD/packages/strapi-plugin-upload). These dependencies need to be updated together.


Updates `sharp` from 0.28.1 to 0.31.1
- [Release notes](https://github.com/lovell/sharp/releases)
- [Changelog](https://github.com/lovell/sharp/blob/main/docs/changelog.md)
- [Commits](https://github.com/lovell/sharp/compare/v0.28.1...v0.31.1)

Updates `strapi-plugin-upload` from 3.6.8 to 3.6.11
- [Release notes](https://github.com/strapi/strapi/releases)
- [Commits](https://github.com/strapi/strapi/commits/v3.6.11/packages/strapi-plugin-upload)

---
updated-dependencies:
- dependency-name: sharp
  dependency-type: indirect
- dependency-name: strapi-plugin-upload
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-23 16:11:18 +00:00
tmshv 2ac6a2831f Merge pull request #127 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/parse-path-and-strapi-7.0.0
Bump parse-path and strapi in /modules/hudozka-strapi-api
2022-11-23 22:09:35 +06:00
dependabot[bot] 5ee90a4329 Bump parse-path and strapi in /modules/hudozka-strapi-api
Bumps [parse-path](https://github.com/IonicaBizau/parse-path) to 7.0.0 and updates ancestor dependency [strapi](https://github.com/strapi/strapi). These dependencies need to be updated together.


Updates `parse-path` from 4.0.4 to 7.0.0
- [Release notes](https://github.com/IonicaBizau/parse-path/releases)
- [Commits](https://github.com/IonicaBizau/parse-path/compare/4.0.4...7.0.0)

Updates `strapi` from 3.6.10 to 3.6.11
- [Release notes](https://github.com/strapi/strapi/releases)
- [Commits](https://github.com/strapi/strapi/compare/v3.6.10...v3.6.11)

---
updated-dependencies:
- dependency-name: parse-path
  dependency-type: indirect
- dependency-name: strapi
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-23 11:35:10 +00:00
tmshv 004eaf9803 Merge pull request #124 from tmshv/dependabot/pip/modules/sync/pillow-9.3.0
Bump pillow from 9.0.1 to 9.3.0 in /modules/sync
2022-11-23 17:34:22 +06:00
dependabot[bot] 44ee60c9c3 Bump pillow from 9.0.1 to 9.3.0 in /modules/sync
Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.0.1 to 9.3.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/9.0.1...9.3.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-22 10:30:54 +00:00
tmshv f610ed1385 Merge pull request #123 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/minimatch-3.1.2
Bump minimatch from 3.0.4 to 3.1.2 in /modules/hudozka-strapi-api
2022-11-15 12:19:30 +06:00
dependabot[bot] f92a9bf7c8 Bump minimatch from 3.0.4 to 3.1.2 in /modules/hudozka-strapi-api
Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.0.4 to 3.1.2.
- [Release notes](https://github.com/isaacs/minimatch/releases)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-13 07:15:39 +00:00
tmshv d0e926eb9c add ThemeColor component 2022-10-13 15:37:47 +06:00
tmshv 77650947fe Merge pull request #122 from tmshv/upd/maintenance-003
Maintenance 003
2022-10-13 15:21:40 +06:00
tmshv 2ea4fd8560 PageGrid blur stability improved 2022-10-13 15:17:44 +06:00
tmshv b9d6105d79 split navigation to two separate components for desktop and mobile 2022-10-13 15:17:31 +06:00
tmshv fdf6ee302f change icon set 2022-10-13 15:08:58 +06:00
tmshv 671bc94562 fix eye button 2022-10-13 14:55:31 +06:00
tmshv d66cefa75d import Signature dynamic 2022-10-13 14:53:49 +06:00
tmshv 6d4d495daf use radix-ui tooltip instead of rc-tooltip 2022-10-13 14:51:33 +06:00
tmshv 496d26481e add link to / for logo 2022-10-13 14:24:09 +06:00
tmshv 2353003a3b add important keyword 2022-10-13 14:19:08 +06:00
tmshv e75697819b add logo and other layout changes 2022-10-13 13:48:29 +06:00
tmshv 78e33e456c add HudozkaLogo component 2022-10-13 13:47:45 +06:00
tmshv da488654d6 bump date-fns to 2.29 2022-10-13 12:53:44 +06:00
tmshv e3714f8caa bumb eslint to 8.25 2022-10-13 12:52:20 +06:00
tmshv 0d23eefbb7 fix contrast theme on mobile 2022-10-13 12:50:15 +06:00
tmshv 792161b40d Merge pull request #121 from tmshv/upd/contrast
Add contrast theme
2022-10-12 16:48:05 +06:00
tmshv 1ef5b8553e store current theme in local storage 2022-10-12 16:36:33 +06:00
tmshv cb91aa22be contrast fonts fize bigger 2022-10-12 16:31:36 +06:00
tmshv 09628c8b96 add closed eye 2022-10-12 16:27:58 +06:00
tmshv 1e80a02a26 gosuslugi back + dynamic 2022-10-12 16:27:46 +06:00
tmshv 8d67524526 author comopnent fix 2022-10-12 16:27:27 +06:00
tmshv 041193034e title style update 2022-10-12 16:22:07 +06:00
tmshv 73566d3aca update 2022-10-12 15:52:27 +06:00
tmshv f899f75780 google font tag updated 2022-10-12 13:43:24 +06:00
tmshv dd2dc744a2 fix theme context initial value 2022-10-12 13:32:10 +06:00
tmshv 3fa99b28de add initial contrast theme 2022-10-12 13:30:39 +06:00
tmshv c4e13e8e1b next 12.3 2022-09-26 20:36:32 +03:00
tmshv 1f2cd2c83d Picture component improvements 2022-09-06 22:10:40 +03:00
tmshv f81bda7f46 move Picture to ui 2022-09-06 21:58:51 +03:00
tmshv 2512467bd1 hide mobile menu on navigate 2022-09-06 21:51:35 +03:00
tmshv f5a3bedfff disable overlay duraction (buggy on safari) 2022-09-06 21:51:10 +03:00
tmshv 6b348debdd Merge pull request #120 from tmshv/upd/maintenance-002
Maintenance 002
2022-09-06 21:20:23 +03:00
tmshv 458c3c35b3 404 use Box 2022-09-06 21:11:57 +03:00
tmshv aeb5a50d35 wrapper min-height moved to content part 2022-09-06 21:09:11 +03:00
tmshv 671f737d25 use Box instead of Block 2022-09-06 21:08:55 +03:00
tmshv c0694b0953 Box align 2022-09-06 21:03:42 +03:00
tmshv cced734dc4 remove unused Pager 2022-09-06 20:56:07 +03:00
tmshv 84a2d8551f Navigation component update 2022-09-06 20:54:37 +03:00
tmshv 733260f663 MenuToggle improved 2022-09-06 20:53:55 +03:00
tmshv c2146e82bb add ui Box 2022-09-06 20:53:29 +03:00
tmshv 1d1e41adea ui components updates 2022-09-06 20:37:24 +03:00
tmshv 160c66a0af Button css file rename 2022-09-06 20:03:09 +03:00
tmshv e2acd4f238 Picture placeholder fix 2022-09-06 19:05:51 +03:00
tmshv b1c37b7321 card style format 2022-09-06 19:05:38 +03:00
tmshv 94138a51ed card link fix 2022-09-06 19:05:30 +03:00
tmshv 12ed6775e8 rm items from config menu 2022-09-06 19:00:23 +03:00
tmshv c9628678d8 menu rewritten with radix-ui 2022-09-06 18:59:29 +03:00
tmshv e8a4ba054b Overlay components -> ui 2022-09-06 16:29:49 +03:00
tmshv 6c71a78fe6 Button component -> ui 2022-09-06 16:27:34 +03:00
tmshv ac8a54895f TagList eslint fix 2022-09-06 16:26:33 +03:00
tmshv 585d3ae75c Button update 2022-09-06 16:23:42 +03:00
tmshv 8ba8b0d05b eslint rules updated 2022-09-06 16:16:32 +03:00
tmshv 30c496f249 react 18 2022-09-06 16:16:14 +03:00
tmshv aa2522ba0f overlay and navigation changes 2022-09-06 16:00:28 +03:00
tmshv 5ce5f9b751 Merge pull request #119 from tmshv/upd/next-seo
next-seo
2022-09-06 15:24:02 +03:00
tmshv 1f11b40bd0 rm Meta component 2022-09-06 15:21:41 +03:00
tmshv 7581e23366 use next-seo on index page 2022-09-06 15:21:28 +03:00
tmshv d44db287de use next seo on slug page 2022-09-06 15:21:04 +03:00
tmshv a4ea8230e4 add next-seo package 2022-09-06 15:20:46 +03:00
tmshv 8470432568 _error -> 404 2022-09-06 15:09:03 +03:00
tmshv 5ca2213e02 Merge pull request #118 from tmshv/upd/maintenance-001
Maintenance 001
2022-09-06 14:56:40 +03:00
tmshv c9f9cbba48 double quotes switch to warn 2022-09-06 14:54:28 +03:00
tmshv 85bc8c4af5 double qutes eslint rule 2022-09-06 14:52:56 +03:00
tmshv 2e517cc7f7 fix eslint warnings 2022-09-06 14:46:16 +03:00
tmshv 501ce4d3d0 add eol-last rule 2022-09-06 14:42:16 +03:00
tmshv 0fec2fdbab move custom font to _document 2022-09-06 14:38:17 +03:00
tmshv 86a02a945b fix eslint errors 2022-09-06 14:34:50 +03:00
tmshv a732ec0640 rm unused createApiUrl 2022-09-06 14:28:08 +03:00
tmshv 6702eb22de now -> vercel 2022-09-06 14:23:52 +03:00
tmshv 0658fd4e9e add old eslint rules with some changes 2022-09-06 14:23:36 +03:00
tmshv ad96a7add2 Contacts update 2022-09-06 14:10:35 +03:00
tmshv d89917dcfd FileCard uses Link 2022-09-06 14:10:23 +03:00
tmshv 53bdc44065 File component use Link 2022-09-06 14:10:15 +03:00
tmshv 69904cd2dd use next/link in NotFound 2022-09-06 14:04:59 +03:00
tmshv 49e06abc79 config lint 2022-09-06 14:02:53 +03:00
tmshv 3138022619 NotFound component no jsx 2022-09-06 14:01:28 +03:00
tmshv c6786d197e fix missing displayName 2022-09-06 13:58:52 +03:00
tmshv 8064507eaf add lint script 2022-09-06 13:56:30 +03:00
tmshv b0d6cc80d9 eslint 8 2022-09-06 13:56:19 +03:00
tmshv b0a55191c7 use next lint 2022-09-06 13:55:50 +03:00
tmshv f692f74553 improve stability of encodeImageToBlurhash 2022-09-06 13:51:41 +03:00
tmshv 13c84f7520 encodeImageToBlurhash minor 2022-09-06 13:51:32 +03:00
tmshv 3794a926b5 rm requestGet 2022-09-06 13:46:56 +03:00
tmshv ecb81f756a meta to undefined in json 2022-09-06 13:46:42 +03:00
tmshv 8c3411905c sharp package updated 2022-09-06 13:40:26 +03:00
tmshv 0af4fd9ad3 use strict typescript finally 2022-09-06 13:37:18 +03:00
tmshv bc11fb8ed9 rm axios 2022-09-06 13:36:56 +03:00
tmshv 77ec77b3e1 meta typing fix 2022-09-06 13:29:44 +03:00
tmshv c3b809cc72 lib image typing fix 2022-09-06 13:29:33 +03:00
tmshv bec9bb2f03 markdown-it update 2022-09-06 13:26:52 +03:00
tmshv e973ef3969 lib/file typing fix 2022-09-06 13:08:26 +03:00
tmshv 1d31293b87 typescript 4.8 2022-09-06 13:08:00 +03:00
tmshv ccd34ec7f8 extract InsertBetweenFunction type 2022-09-06 13:06:24 +03:00
tmshv 73a9635129 rm unsed splibBy function 2022-09-06 13:06:04 +03:00
tmshv 15cdfc940f fix insertBetween typings 2022-09-06 13:05:02 +03:00
tmshv b6775d8bab Transition component typing fix 2022-09-06 12:57:53 +03:00
tmshv 89d0aa9926 MenuItem component typing fix 2022-09-06 12:54:15 +03:00
tmshv bfaeb00ae1 tsconfig format 2022-09-06 12:53:10 +03:00
tmshv 64b82db5dc next-env udpated 2022-09-06 12:51:27 +03:00
tmshv da737c56c5 next 12.2 2022-09-06 12:51:20 +03:00
tmshv 83dbf99e1d Merge pull request #117 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/moment-timezone-0.5.37
Bump moment-timezone from 0.5.32 to 0.5.37 in /modules/hudozka-strapi-api
2022-08-31 16:24:13 +03:00
dependabot[bot] 17c8d8ce34 Bump moment-timezone in /modules/hudozka-strapi-api
Bumps [moment-timezone](https://github.com/moment/moment-timezone) from 0.5.32 to 0.5.37.
- [Release notes](https://github.com/moment/moment-timezone/releases)
- [Changelog](https://github.com/moment/moment-timezone/blob/develop/changelog.md)
- [Commits](https://github.com/moment/moment-timezone/compare/0.5.32...0.5.37)

---
updated-dependencies:
- dependency-name: moment-timezone
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-31 06:40:00 +00:00
tmshv 15fe48521f Merge pull request #104 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/urijs-1.19.11
Bump urijs from 1.19.5 to 1.19.11 in /modules/hudozka-strapi-api
2022-08-26 02:05:22 +03:00
tmshv 1b3e083344 Merge pull request #116 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/nanoid-3.3.4
Bump nanoid from 3.1.25 to 3.3.4 in /modules/hudozka-strapi-api
2022-08-23 17:50:08 +03:00
dependabot[bot] b254669a9e Bump urijs from 1.19.5 to 1.19.11 in /modules/hudozka-strapi-api
Bumps [urijs](https://github.com/medialize/URI.js) from 1.19.5 to 1.19.11.
- [Release notes](https://github.com/medialize/URI.js/releases)
- [Changelog](https://github.com/medialize/URI.js/blob/gh-pages/CHANGELOG.md)
- [Commits](https://github.com/medialize/URI.js/compare/v1.19.5...v1.19.11)

---
updated-dependencies:
- dependency-name: urijs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-23 14:47:06 +00:00
dependabot[bot] ca2da86da3 Bump nanoid from 3.1.25 to 3.3.4 in /modules/hudozka-strapi-api
Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.25 to 3.3.4.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.1.25...3.3.4)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-23 14:46:27 +00:00
tmshv f0197a2552 Merge pull request #107 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/strapi-3.6.10
Bump strapi from 3.6.8 to 3.6.10 in /modules/hudozka-strapi-api
2022-08-23 17:45:13 +03:00
tmshv f4d4228f47 Merge pull request #103 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/async-2.6.4
Bump async from 2.6.3 to 2.6.4 in /modules/hudozka-strapi-api
2022-08-21 12:28:38 +03:00
tmshv 1a77d63039 Merge pull request #100 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/minimist-1.2.6
Bump minimist from 1.2.5 to 1.2.6 in /modules/hudozka-strapi-api
2022-08-21 00:12:58 +03:00
tmshv 839f7a557d Merge pull request #101 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/axios-0.21.4
Bump axios from 0.21.1 to 0.21.4 in /modules/hudozka-strapi-api
2022-08-15 21:57:56 +03:00
tmshv 9ab8af3125 Merge pull request #113 from tmshv/dependabot/pip/modules/sync/lxml-4.9.1
Bump lxml from 4.6.5 to 4.9.1 in /modules/sync
2022-08-15 20:30:29 +03:00
tmshv 2da6286878 Merge pull request #114 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/moment-2.29.4
Bump moment from 2.29.1 to 2.29.4 in /modules/hudozka-strapi-api
2022-08-01 21:17:23 +03:00
tmshv 2bf26aac56 Merge pull request #115 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/terser-4.8.1
Bump terser from 4.8.0 to 4.8.1 in /modules/hudozka-strapi-api
2022-08-01 15:37:55 +03:00
dependabot[bot] 616d5e0bac Bump terser from 4.8.0 to 4.8.1 in /modules/hudozka-strapi-api
Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 4.8.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-22 00:59:51 +00:00
dependabot[bot] ac5043485a Bump moment from 2.29.1 to 2.29.4 in /modules/hudozka-strapi-api
Bumps [moment](https://github.com/moment/moment) from 2.29.1 to 2.29.4.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.1...2.29.4)

---
updated-dependencies:
- dependency-name: moment
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-10 13:21:09 +00:00
tmshv ef32d4d9d5 Merge pull request #108 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/eventsource-1.1.1
Bump eventsource from 1.0.7 to 1.1.1 in /modules/hudozka-strapi-api
2022-07-10 16:19:46 +03:00
dependabot[bot] 9185170cd3 Bump lxml from 4.6.5 to 4.9.1 in /modules/sync
Bumps [lxml](https://github.com/lxml/lxml) from 4.6.5 to 4.9.1.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.6.5...lxml-4.9.1)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-06 20:28:47 +00:00
dependabot[bot] 6f1cca7945 Bump strapi from 3.6.8 to 3.6.10 in /modules/hudozka-strapi-api
Bumps [strapi](https://github.com/strapi/strapi) from 3.6.8 to 3.6.10.
- [Release notes](https://github.com/strapi/strapi/releases)
- [Commits](https://github.com/strapi/strapi/compare/v3.6.8...v3.6.10)

---
updated-dependencies:
- dependency-name: strapi
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-06 09:54:07 +00:00
tmshv 21226cf2a8 Merge pull request #112 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/parse-url-6.0.2
Bump parse-url from 6.0.0 to 6.0.2 in /modules/hudozka-strapi-api
2022-07-06 12:52:02 +03:00
dependabot[bot] b64925e00f Bump parse-url from 6.0.0 to 6.0.2 in /modules/hudozka-strapi-api
Bumps [parse-url](https://github.com/IonicaBizau/parse-url) from 6.0.0 to 6.0.2.
- [Release notes](https://github.com/IonicaBizau/parse-url/releases)
- [Commits](https://github.com/IonicaBizau/parse-url/commits)

---
updated-dependencies:
- dependency-name: parse-url
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-06 02:25:49 +00:00
dependabot[bot] 1885e3d58c Bump minimist from 1.2.5 to 1.2.6 in /modules/hudozka-strapi-api
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-09 19:33:40 +00:00
tmshv 1196365f45 Merge pull request #111 from tmshv/gosuslugi-works
Gosuslugi fix
2022-06-09 22:32:56 +03:00
tmshv 7ea9d2d08a Merge pull request #106 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/sqlite3-5.0.8
Bump sqlite3 from 5.0.2 to 5.0.8 in /modules/hudozka-strapi-api
2022-06-09 22:31:06 +03:00
tmshv bb1815900a Merge pull request #92 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/simple-get-3.1.1
Bump simple-get from 3.1.0 to 3.1.1 in /modules/hudozka-strapi-api
2022-06-09 22:30:45 +03:00
tmshv 7a124ff0a3 Merge pull request #109 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/cross-fetch-3.1.5
Bump cross-fetch from 3.0.6 to 3.1.5 in /modules/hudozka-strapi-api
2022-06-09 22:30:19 +03:00
tmshv 9096b21fc4 fix gosuslugi 2022-06-09 22:29:24 +03:00
tmshv 815cd1defe Merge pull request #110 from tmshv/gosuslugi
Gosuslugi
2022-06-06 17:19:05 +03:00
tmshv e6c2b6ddfe add gosuslugi component 2022-06-06 17:07:54 +03:00
tmshv 20d747eea3 ansi-regex upd 2022-06-01 18:49:51 +03:00
tmshv 2bac7ec9f5 Merge pull request #90 from tmshv/dependabot/npm_and_yarn/markdown-it-12.3.2
Bump markdown-it from 10.0.0 to 12.3.2
2022-06-01 18:49:12 +03:00
tmshv b1ffc4d723 Merge pull request #95 from tmshv/dependabot/npm_and_yarn/follow-redirects-1.14.8
Bump follow-redirects from 1.14.4 to 1.14.8
2022-06-01 18:48:44 +03:00
dependabot[bot] edeff216c5 Bump cross-fetch from 3.0.6 to 3.1.5 in /modules/hudozka-strapi-api
Bumps [cross-fetch](https://github.com/lquixada/cross-fetch) from 3.0.6 to 3.1.5.
- [Release notes](https://github.com/lquixada/cross-fetch/releases)
- [Commits](https://github.com/lquixada/cross-fetch/compare/v3.0.6...v3.1.5)

---
updated-dependencies:
- dependency-name: cross-fetch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 15:47:58 +00:00
dependabot[bot] 43131e4377 Bump eventsource from 1.0.7 to 1.1.1 in /modules/hudozka-strapi-api
Bumps [eventsource](https://github.com/EventSource/eventsource) from 1.0.7 to 1.1.1.
- [Release notes](https://github.com/EventSource/eventsource/releases)
- [Changelog](https://github.com/EventSource/eventsource/blob/master/HISTORY.md)
- [Commits](https://github.com/EventSource/eventsource/compare/v1.0.7...v1.1.1)

---
updated-dependencies:
- dependency-name: eventsource
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 15:47:54 +00:00
tmshv a291ec5796 Merge pull request #98 from tmshv/dependabot/npm_and_yarn/minimist-1.2.6
Bump minimist from 1.2.5 to 1.2.6
2022-06-01 18:47:36 +03:00
dependabot[bot] 9e2ad9072d Bump markdown-it from 10.0.0 to 12.3.2
Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 10.0.0 to 12.3.2.
- [Release notes](https://github.com/markdown-it/markdown-it/releases)
- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markdown-it/markdown-it/compare/10.0.0...12.3.2)

---
updated-dependencies:
- dependency-name: markdown-it
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 15:47:15 +00:00
tmshv 9ec055cfb9 Merge pull request #94 from tmshv/dependabot/npm_and_yarn/ajv-6.12.6
Bump ajv from 6.12.2 to 6.12.6
2022-06-01 18:47:05 +03:00
dependabot[bot] f36604a810 Bump sqlite3 from 5.0.2 to 5.0.8 in /modules/hudozka-strapi-api
Bumps [sqlite3](https://github.com/TryGhost/node-sqlite3) from 5.0.2 to 5.0.8.
- [Release notes](https://github.com/TryGhost/node-sqlite3/releases)
- [Changelog](https://github.com/TryGhost/node-sqlite3/blob/master/CHANGELOG.md)
- [Commits](https://github.com/TryGhost/node-sqlite3/compare/v5.0.2...v5.0.8)

---
updated-dependencies:
- dependency-name: sqlite3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 15:47:03 +00:00
tmshv f9383f3530 Merge pull request #105 from tmshv/upd/2022-01
UPD 2022-01
2022-06-01 18:46:01 +03:00
tmshv e119925a9b rm page document/slug 2022-06-01 18:43:15 +03:00
tmshv 8a31ac1567 next 12 2022-06-01 18:17:56 +03:00
tmshv ce1073ef25 update sharp to work under m1 2022-06-01 18:13:41 +03:00
tmshv 350bb1f09e Merge pull request #97 from tmshv/dependabot/pip/modules/sync/pillow-9.0.1
Bump pillow from 9.0.0 to 9.0.1 in /modules/sync
2022-04-24 14:25:27 +03:00
dependabot[bot] 5df8c46248 Bump pillow from 9.0.0 to 9.0.1 in /modules/sync
Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.0.0 to 9.0.1.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/9.0.0...9.0.1)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-23 14:59:33 +00:00
dependabot[bot] e721a77efa Bump async from 2.6.3 to 2.6.4 in /modules/hudozka-strapi-api
Bumps [async](https://github.com/caolan/async) from 2.6.3 to 2.6.4.
- [Release notes](https://github.com/caolan/async/releases)
- [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md)
- [Commits](https://github.com/caolan/async/compare/v2.6.3...v2.6.4)

---
updated-dependencies:
- dependency-name: async
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-23 14:59:29 +00:00
dependabot[bot] 8199bfd8af Bump axios from 0.21.1 to 0.21.4 in /modules/hudozka-strapi-api
Bumps [axios](https://github.com/axios/axios) from 0.21.1 to 0.21.4.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.21.1...v0.21.4)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-23 14:59:28 +00:00
tmshv 8aafa24a8a Merge pull request #99 from tmshv/dependabot/pip/modules/sync/pypdf2-1.27.5
Bump pypdf2 from 1.26.0 to 1.27.5 in /modules/sync
2022-04-23 17:58:45 +03:00
dependabot[bot] d02eb6ed0d Bump pypdf2 from 1.26.0 to 1.27.5 in /modules/sync
Bumps [pypdf2](https://github.com/py-pdf/PyPDF2) from 1.26.0 to 1.27.5.
- [Release notes](https://github.com/py-pdf/PyPDF2/releases)
- [Changelog](https://github.com/py-pdf/PyPDF2/blob/main/CHANGELOG)
- [Commits](https://github.com/py-pdf/PyPDF2/compare/1.26.0...1.27.5)

---
updated-dependencies:
- dependency-name: pypdf2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-22 22:06:14 +00:00
dependabot[bot] 01c17ffc1e Bump minimist from 1.2.5 to 1.2.6
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-26 04:29:11 +00:00
dependabot[bot] 6c80e0875f Bump follow-redirects from 1.14.4 to 1.14.8
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.4 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.4...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-13 06:11:44 +00:00
dependabot[bot] dcc8213b1d Bump ajv from 6.12.2 to 6.12.6
Bumps [ajv](https://github.com/ajv-validator/ajv) from 6.12.2 to 6.12.6.
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v6.12.2...v6.12.6)

---
updated-dependencies:
- dependency-name: ajv
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-13 01:27:16 +00:00
dependabot[bot] 9830883661 Bump simple-get from 3.1.0 to 3.1.1 in /modules/hudozka-strapi-api
Bumps [simple-get](https://github.com/feross/simple-get) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/feross/simple-get/releases)
- [Commits](https://github.com/feross/simple-get/compare/v3.1.0...v3.1.1)

---
updated-dependencies:
- dependency-name: simple-get
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-09 12:49:05 +00:00
tmshv 6752524589 Merge pull request #88 from tmshv/dependabot/npm_and_yarn/next-11.1.3
Bump next from 11.1.1 to 11.1.3
2022-02-09 15:48:24 +03:00
tmshv 2e70ff3521 Merge pull request #89 from tmshv/dependabot/pip/modules/sync/lxml-4.6.5
Bump lxml from 4.6.3 to 4.6.5 in /modules/sync
2022-01-16 21:36:43 +03:00
dependabot[bot] 5fcf3762de Bump lxml from 4.6.3 to 4.6.5 in /modules/sync
Bumps [lxml](https://github.com/lxml/lxml) from 4.6.3 to 4.6.5.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.6.3...lxml-4.6.5)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-14 09:56:36 +00:00
tmshv bfeb3f8145 Merge pull request #91 from tmshv/dependabot/pip/modules/sync/pillow-9.0.0
Bump pillow from 8.3.2 to 9.0.0 in /modules/sync
2022-01-14 12:55:28 +03:00
dependabot[bot] 4bbd0043b3 Bump pillow from 8.3.2 to 9.0.0 in /modules/sync
Bumps [pillow](https://github.com/python-pillow/Pillow) from 8.3.2 to 9.0.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/8.3.2...9.0.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-13 02:15:06 +00:00
dependabot[bot] 87d94a7fe4 Bump next from 11.1.1 to 11.1.3
Bumps [next](https://github.com/vercel/next.js) from 11.1.1 to 11.1.3.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v11.1.1...v11.1.3)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-09 01:24:55 +00:00
tmshv 875d41f802 enable Picture alt 2021-09-26 21:35:10 +03:00
tmshv 726fa1dd33 custom font definiton moved to src style 2021-09-26 21:34:49 +03:00
tmshv 9992c9dbb7 rc-tooltip style import moved to FileCard 2021-09-26 21:17:32 +03:00
tmshv 8b03741fb3 file card mobile layout 2021-09-22 17:04:02 +03:00
tmshv 2be00d53a4 content wide rm 2021-09-22 16:05:46 +03:00
tmshv b25f8eb0e9 Footer update 2021-09-22 15:56:40 +03:00
tmshv b6dc49beda article li line-height 2021-09-22 15:46:47 +03:00
tmshv e609422715 Wrapper fix footer floating; style to module css 2021-09-22 15:46:33 +03:00
tmshv 7559db5460 slug page fix ts errors 2021-09-22 15:30:06 +03:00
tmshv 39a1f4bb87 Merge pull request #86 from tmshv/dependabot/npm_and_yarn/axios-0.21.2
Bump axios from 0.21.1 to 0.21.2
2021-09-22 15:21:10 +03:00
tmshv b778f61e92 Merge pull request #87 from tmshv/upd/card-blur
card images blur
2021-09-22 15:20:42 +03:00
tmshv e68a55c73d factory fix 2021-09-22 15:14:48 +03:00
tmshv 3f49183997 document page menu fix 2021-09-22 15:12:57 +03:00
tmshv 794281c02c apiGet update 2021-09-22 14:05:45 +03:00
tmshv 42fdf429e2 card images blur 2021-09-22 13:33:29 +03:00
tmshv 6f3632fa15 fix factory undefined 2021-09-22 00:29:46 +03:00
tmshv 8c8a0e60f4 factory typing fix 2021-09-22 00:23:06 +03:00
dependabot[bot] 41cc5ffb68 Bump axios from 0.21.1 to 0.21.2
Bumps [axios](https://github.com/axios/axios) from 0.21.1 to 0.21.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.21.1...v0.21.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-21 21:21:57 +00:00
tmshv 8260e3cf34 blur placeholder on article images 2021-09-22 00:21:19 +03:00
tmshv df229b5e8c text component updates + performance improved 2021-09-21 21:22:15 +03:00
tmshv 968da68929 next ts upd 2021-09-21 21:20:41 +03:00
tmshv 25f36ad9d1 rm displaying picture w/h 2021-09-21 21:18:56 +03:00
tmshv 0249c5873b wide picture support back 2021-09-21 16:23:24 +03:00
tmshv a55d474336 add Picture component for displaying images in articles with h/v/s layout support 2021-09-21 16:07:30 +03:00
tmshv 1bd80aa0b2 index page revalidate 30 2021-09-20 14:33:58 +03:00
tmshv 1d5b3cf80a index page typing 2021-09-20 14:33:47 +03:00
tmshv 5fc6712fda document page fix 2021-09-18 17:37:22 +03:00
tmshv 2446b23423 Merge branch 'master' of github.com:tmshv/hudozka 2021-09-18 17:32:52 +03:00
tmshv bc2f1f78fd menu from api 2021-09-18 17:31:54 +03:00
tmshv 7e856bce18 cover stability 2021-09-18 17:31:06 +03:00
tmshv a169ff7b58 Merge pull request #84 from tmshv/dependabot/npm_and_yarn/next-11.1.1
Bump next from 11.1.0 to 11.1.1
2021-09-08 14:49:10 +03:00
tmshv 2de225396c Merge pull request #85 from tmshv/dependabot/pip/modules/sync/pillow-8.3.2
Bump pillow from 8.2.0 to 8.3.2 in /modules/sync
2021-09-08 14:45:21 +03:00
dependabot[bot] e1ef01c284 Bump pillow from 8.2.0 to 8.3.2 in /modules/sync
Bumps [pillow](https://github.com/python-pillow/Pillow) from 8.2.0 to 8.3.2.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/8.2.0...8.3.2)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-08 01:42:45 +00:00
dependabot[bot] 450af84b2d Bump next from 11.1.0 to 11.1.1
Bumps [next](https://github.com/vercel/next.js) from 11.1.0 to 11.1.1.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v11.1.0...v11.1.1)

---
updated-dependencies:
- dependency-name: next
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-01 18:43:17 +00:00
tmshv 51938fb276 strapi menu model 2021-08-30 18:22:27 +03:00
tmshv 8d9751866c strapi 3.6.8 2021-08-30 18:13:23 +03:00
tmshv 6dceff6c85 api fixes 2021-08-30 17:05:30 +03:00
tmshv 70094eab73 FileCard updatd 2021-08-30 16:43:51 +03:00
tmshv 8331af7aaa npm audit fix 2021-08-29 20:02:22 +03:00
tmshv 9fd3e13824 rm console.log 2021-08-29 20:00:05 +03:00
tmshv 4923d80545 ts 4.4 2021-08-29 19:59:53 +03:00
tmshv c37e5551ad next 11.1 2021-08-29 19:58:25 +03:00
tmshv 4ea54bc692 dev script changed to next dev 2021-08-29 19:17:57 +03:00
tmshv 1dcb565c71 Merge pull request #78 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/underscore-1.13.1
Bump underscore from 1.9.2 to 1.13.1 in /modules/hudozka-api
2021-07-06 18:46:06 +03:00
tmshv 13c617e4d5 Merge pull request #81 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/lodash-4.17.21
Bump lodash from 4.17.19 to 4.17.21 in /modules/hudozka-api
2021-07-05 18:09:12 +03:00
dependabot[bot] 4a6fae4153 Bump lodash from 4.17.19 to 4.17.21 in /modules/hudozka-api
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.19 to 4.17.21.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.19...4.17.21)

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-02 13:47:58 +00:00
tmshv 3c736c4955 Merge pull request #80 from tmshv/dependabot/npm_and_yarn/lodash-4.17.21
Bump lodash from 4.17.19 to 4.17.21
2021-07-02 16:47:10 +03:00
tmshv cce4e15d74 Merge pull request #79 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/bson-1.1.6
Bump bson from 1.1.3 to 1.1.6 in /modules/hudozka-api
2021-06-20 12:31:45 +03:00
tmshv 85279d33ca Merge pull request #82 from tmshv/dependabot/pip/modules/sync/pillow-8.2.0
Bump pillow from 8.1.1 to 8.2.0 in /modules/sync
2021-06-09 13:35:58 +03:00
dependabot[bot] 40d90d46ad Bump pillow from 8.1.1 to 8.2.0 in /modules/sync
Bumps [pillow](https://github.com/python-pillow/Pillow) from 8.1.1 to 8.2.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/8.1.1...8.2.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-08 20:58:46 +00:00
dependabot[bot] 507ece2fe1 Bump lodash from 4.17.19 to 4.17.21
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.19 to 4.17.21.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.19...4.17.21)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-11 03:19:54 +00:00
dependabot[bot] 2ff9a4fb20 Bump bson from 1.1.3 to 1.1.6 in /modules/hudozka-api
Bumps [bson](https://github.com/mongodb/js-bson) from 1.1.3 to 1.1.6.
- [Release notes](https://github.com/mongodb/js-bson/releases)
- [Changelog](https://github.com/mongodb/js-bson/blob/v1.1.6/HISTORY.md)
- [Commits](https://github.com/mongodb/js-bson/compare/v1.1.3...v1.1.6)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-09 07:16:39 +00:00
dependabot[bot] 8bdd6fe409 Bump underscore from 1.9.2 to 1.13.1 in /modules/hudozka-api
Bumps [underscore](https://github.com/jashkenas/underscore) from 1.9.2 to 1.13.1.
- [Release notes](https://github.com/jashkenas/underscore/releases)
- [Commits](https://github.com/jashkenas/underscore/compare/1.9.2...1.13.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-07 02:56:40 +00:00
tmshv 34ce05b060 move sign to static props 2021-04-05 23:33:17 +03:00
tmshv 8a88b59f70 base page getStaticProps typing improved 2021-04-05 23:33:04 +03:00
tmshv cd2800c79d Merge pull request #77 from tmshv/upd/file-sign
File signature
2021-04-05 20:25:46 +03:00
tmshv 97f484dbcd Signature on hover and click 2021-04-05 20:19:52 +03:00
tmshv eb01275b2e Sign.key -> Sign.signature 2021-04-05 20:19:41 +03:00
tmshv 3a1b4354db add file sign and some refactoring 2021-04-05 20:12:45 +03:00
tmshv 58bcd8b857 Merge pull request #76 from tmshv/upd/next-101
next 10.1
2021-04-05 17:15:30 +03:00
tmshv a3bfa59725 enable webpack 5 2021-04-05 17:09:20 +03:00
tmshv badc92d0e0 temporary disable sitemap/feed generation 2021-04-05 17:09:04 +03:00
tmshv 63ffaf6b20 next env refactoring 2021-04-05 17:08:45 +03:00
tmshv 40ecd8b39e next 10.1 2021-04-05 17:01:41 +03:00
tmshv 3e0c4304b1 package-lock v2 2021-04-05 17:00:28 +03:00
tmshv 32ce81a51d Merge pull request #75 from tmshv/dependabot/pip/modules/sync/lxml-4.6.3
Bump lxml from 4.6.2 to 4.6.3 in /modules/sync
2021-03-26 20:31:04 +03:00
dependabot[bot] bf82ece69e Bump lxml from 4.6.2 to 4.6.3 in /modules/sync
Bumps [lxml](https://github.com/lxml/lxml) from 4.6.2 to 4.6.3.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.6.2...lxml-4.6.3)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-26 17:17:05 +00:00
tmshv d4516441ad Merge pull request #74 from tmshv/dependabot/pip/modules/sync/pyyaml-5.4
Bump pyyaml from 5.1 to 5.4 in /modules/sync
2021-03-26 20:16:38 +03:00
dependabot[bot] 000b4f4b30 Bump pyyaml from 5.1 to 5.4 in /modules/sync
Bumps [pyyaml](https://github.com/yaml/pyyaml) from 5.1 to 5.4.
- [Release notes](https://github.com/yaml/pyyaml/releases)
- [Changelog](https://github.com/yaml/pyyaml/blob/master/CHANGES)
- [Commits](https://github.com/yaml/pyyaml/compare/5.1...5.4)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-25 23:27:43 +00:00
tmshv c14dc862e0 Merge pull request #73 from tmshv/dependabot/pip/modules/sync/pillow-8.1.1
Bump pillow from 7.1.0 to 8.1.1 in /modules/sync
2021-03-22 12:43:27 +03:00
dependabot[bot] dc3206894c Bump pillow from 7.1.0 to 8.1.1 in /modules/sync
Bumps [pillow](https://github.com/python-pillow/Pillow) from 7.1.0 to 8.1.1.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/7.1.0...8.1.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-19 11:10:49 +00:00
tmshv df6a1de7db some size and headers style changed 2021-02-23 14:18:16 +03:00
tmshv 05cb9c4cef PageGrid.Date uses css modules 2021-02-23 14:17:30 +03:00
tmshv c98064e6de Merge pull request #72 from tmshv/upd/strapi-350
strapi 3.5.0
2021-02-20 14:07:47 +03:00
tmshv e62bbe4f15 Merge pull request #71 from tmshv/upd/strapi-breadcrumbs-to-parent
breadcrumbs relation -> parent
2021-02-18 16:54:44 +03:00
tmshv 7ccb334375 strapi updated to 3.5.0
package-lock v2
2021-02-18 16:54:14 +03:00
tmshv 9dcfd28525 breadcrumbs relation -> parent 2021-02-18 16:51:10 +03:00
tmshv 399935a979 Merge pull request #70 from tmshv/upd/rm-data-folders
rm old data folders
2021-02-18 16:31:11 +03:00
tmshv 15cf1f09c8 rm obsolette folders from .nowignore 2021-02-18 15:05:39 +03:00
tmshv e11392c6a7 rm forestry and data folders 2021-02-18 14:53:47 +03:00
tmshv 290702dc15 Merge pull request #69 from tmshv/upd/next-fallback-revalidate
fallback/revalidate
2021-02-18 13:22:28 +03:00
tmshv 7d10ea27f0 fallback true; revalidate 30; show simple loader 2021-02-18 13:13:25 +03:00
tmshv bc07643b11 7.0.0 2021-02-17 19:53:29 +03:00
tmshv 8ef299f876 some layout updates 2021-02-17 19:52:01 +03:00
tmshv aa21c21dfb Merge pull request #67 from tmshv/upd/strapi-integration
Strapi integration
2021-02-17 19:49:00 +03:00
tmshv 1aba284498 rm share from page 2021-02-17 19:10:32 +03:00
tmshv fb4217020f dark theme text colors contrast increased 2021-02-17 19:10:21 +03:00
tmshv eb8d8b37a5 rm ImageSize and couple of functions from image lib 2021-02-17 19:10:01 +03:00
tmshv bf4377d614 page card cover alt 2021-02-17 19:09:29 +03:00
tmshv 5087b47343 rm likely and instagram scripts 2021-02-17 18:09:27 +03:00
tmshv a35cd38bd9 updated title and other layout changes 2021-02-17 17:46:22 +03:00
tmshv 9d31f30199 tokens is not optional
drop join tokens
2021-02-17 17:45:48 +03:00
tmshv b945faded0 home page no wide 2021-02-17 17:34:48 +03:00
tmshv d11981e2cc kazimir image style changed 2021-02-17 17:12:17 +03:00
tmshv f4f2487220 rm hr at the end of page 2021-02-17 16:58:08 +03:00
tmshv 0a4002dd44 secont text color contrast increased 2021-02-17 16:57:50 +03:00
tmshv c5d1780b35 page content width 75% 2021-02-17 16:57:38 +03:00
tmshv aec42b4fc5 Image improved 2021-02-17 16:57:25 +03:00
tmshv a2a0932d33 fix factory 2021-02-17 15:20:28 +03:00
tmshv a890b1bb75 no trailing slash 2021-02-17 15:17:46 +03:00
tmshv 52378d3929 ts target is es6 2021-02-17 15:17:20 +03:00
tmshv 7c47e4b0d6 card grid factory stability improved 2021-02-17 15:17:05 +03:00
tmshv b39edfc072 PageGrid margin changed 2021-02-17 15:16:47 +03:00
tmshv 7e72e41f00 CardGrid style changed a bit 2021-02-17 15:16:32 +03:00
tmshv cb237f66e4 remove PageCardData type 2021-02-17 14:11:59 +03:00
tmshv 88bb059094 strapi card grid support 2021-02-17 14:10:49 +03:00
tmshv bd70a480ed Merge pull request #68 from tmshv/upd/strapi-grid-component
Strapi CardGrid
2021-02-17 13:42:13 +03:00
tmshv 67ddf36897 strapi add CardGrid 2021-02-17 13:27:50 +03:00
tmshv 10c27f0ad5 factory imports optimisation 2021-02-17 11:25:44 +03:00
tmshv a87e2deab8 handle youtube embeds 2021-02-17 11:23:22 +03:00
tmshv 00d3f4c989 vk embed 2021-02-17 10:47:34 +03:00
tmshv 4f5f3bb9d7 tags from strapi 2021-02-17 10:41:42 +03:00
tmshv 546c4ffa0e rm debug token 2021-02-16 22:30:25 +03:00
tmshv b3c9b51ffe slug page format 2021-02-16 22:28:32 +03:00
tmshv 39a0a0e1de add missing increment 2021-02-16 22:28:23 +03:00
tmshv b6bc96e47f slug page get all pages 2021-02-16 22:17:12 +03:00
tmshv deed1b2e8d update gitignore 2021-02-16 22:00:26 +03:00
tmshv fb670391f5 rm .babelrc 2021-02-16 22:00:14 +03:00
tmshv 3961d4ae90 slug page missing key prop 2021-02-16 21:44:14 +03:00
tmshv 30e7706f79 rm collective page (will be strapi based) 2021-02-16 21:00:45 +03:00
tmshv a8a3fb1718 npm scripts updates 2021-02-16 20:53:52 +03:00
tmshv 82c9b88f77 slug page improvements 2021-02-16 20:53:28 +03:00
tmshv 5ccec9e2ba get all urls strapi integration 2021-02-16 20:07:31 +03:00
tmshv 87f4f6a1b8 home page strapi integration 2021-02-16 20:04:32 +03:00
tmshv 91982b8c99 piece of strapi integration 2021-02-13 19:01:34 +03:00
tmshv 00197d4f9a add image config to next config 2021-02-13 14:33:21 +03:00
tmshv fc9ff7f1b2 Youtube moved to component 2021-02-04 05:34:28 +03:00
tmshv 1b303d79f4 next 10.0.6 2021-02-04 05:27:58 +03:00
tmshv a774cbe57b react 17.0.1 2021-02-04 05:26:02 +03:00
tmshv a809da989e strapi change admin logo 2021-01-31 22:24:49 +03:00
tmshv 2afc6ea4c0 strapi hudozka.tag component 2021-01-31 22:23:54 +03:00
tmshv 06506e1d8a strapi page settings changes 2021-01-31 22:09:06 +03:00
tmshv 3a78ae4e07 strapi some settings changes 2021-01-31 21:35:05 +03:00
tmshv 253a24ffee add more fields to pages 2021-01-31 21:34:49 +03:00
tmshv c7b329f4df strapi tag update 2021-01-31 04:02:17 +03:00
tmshv c5a54e487c strapi hudozka.image caption field 2021-01-31 04:01:56 +03:00
tmshv d446e549a6 hudozka api file/image dto added filepath 2021-01-31 01:03:34 +03:00
tmshv dfeed175e9 rm yarn.lock 2021-01-27 03:19:36 +03:00
tmshv ebb9eb2c12 add slug to Page 2021-01-27 03:19:13 +03:00
tmshv 1af1c4e0bf Merge pull request #63 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/immer-8.0.1
Bump immer from 7.0.15 to 8.0.1 in /modules/hudozka-strapi-api
2021-01-27 03:08:15 +03:00
tmshv 34ddab073c Merge pull request #64 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/highlight.js-10.5.0
Bump highlight.js from 10.4.0 to 10.5.0 in /modules/hudozka-strapi-api
2021-01-27 03:07:50 +03:00
tmshv 739f33c34a Merge pull request #66 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/ini-1.3.8
Bump ini from 1.3.5 to 1.3.8 in /modules/hudozka-strapi-api
2021-01-27 03:07:22 +03:00
tmshv 6a0e68477f Merge pull request #65 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/axios-0.21.1
Bump axios from 0.20.0 to 0.21.1 in /modules/hudozka-strapi-api
2021-01-27 03:06:56 +03:00
tmshv 3689beba7d Merge pull request #62 from tmshv/dependabot/npm_and_yarn/modules/hudozka-strapi-api/urijs-1.19.5
Bump urijs from 1.19.2 to 1.19.5 in /modules/hudozka-strapi-api
2021-01-27 03:06:28 +03:00
tmshv 82dbe83ca5 strapi node version 12+ 2021-01-27 01:29:23 +03:00
dependabot[bot] 4732c9f37f Bump ini from 1.3.5 to 1.3.8 in /modules/hudozka-strapi-api
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-26 22:17:58 +00:00
dependabot[bot] 9bb0c1f085 Bump axios from 0.20.0 to 0.21.1 in /modules/hudozka-strapi-api
Bumps [axios](https://github.com/axios/axios) from 0.20.0 to 0.21.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.20.0...v0.21.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-26 22:17:31 +00:00
dependabot[bot] dcb01845a9 Bump highlight.js from 10.4.0 to 10.5.0 in /modules/hudozka-strapi-api
Bumps [highlight.js](https://github.com/highlightjs/highlight.js) from 10.4.0 to 10.5.0.
- [Release notes](https://github.com/highlightjs/highlight.js/releases)
- [Changelog](https://github.com/highlightjs/highlight.js/blob/master/CHANGES.md)
- [Commits](https://github.com/highlightjs/highlight.js/compare/10.4.0...10.5.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-26 22:17:29 +00:00
dependabot[bot] da28571522 Bump immer from 7.0.15 to 8.0.1 in /modules/hudozka-strapi-api
Bumps [immer](https://github.com/immerjs/immer) from 7.0.15 to 8.0.1.
- [Release notes](https://github.com/immerjs/immer/releases)
- [Commits](https://github.com/immerjs/immer/compare/v7.0.15...v8.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-26 22:17:23 +00:00
dependabot[bot] dfb33b3ed2 Bump urijs from 1.19.2 to 1.19.5 in /modules/hudozka-strapi-api
Bumps [urijs](https://github.com/medialize/URI.js) from 1.19.2 to 1.19.5.
- [Release notes](https://github.com/medialize/URI.js/releases)
- [Changelog](https://github.com/medialize/URI.js/blob/gh-pages/CHANGELOG.md)
- [Commits](https://github.com/medialize/URI.js/compare/v1.19.2...v1.19.5)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-26 22:14:34 +00:00
tmshv d0a277d100 Merge pull request #61 from tmshv/upd/strapi
Strapi Integration
2021-01-27 01:09:55 +03:00
tmshv 6c122be1c7 add home page 2021-01-27 01:03:02 +03:00
tmshv 6f7648e15d add hudozka related apis and components 2021-01-27 00:30:56 +03:00
tmshv f8ff53355e readme update 2021-01-27 00:30:14 +03:00
tmshv 4844a319df fix wrong strapi-plugin-content-manager version 2021-01-27 00:29:52 +03:00
tmshv 744b7a8b27 strapi env example changes 2021-01-27 00:21:29 +03:00
tmshv 8745af028b strapi docker conf 2021-01-26 22:04:17 +03:00
tmshv c9a1505168 setup DO uploader for media files 2021-01-26 20:59:15 +03:00
tmshv 6ba4052ecb strapi 3.4.5 2021-01-26 17:54:43 +03:00
tmshv abc6f41d0a strapi node version changed to 14 2021-01-26 17:50:18 +03:00
tmshv 557996c4c9 update strapi to 3.4.4 2021-01-26 00:26:11 +03:00
tmshv bc6fc693c0 add initial hudozka-strapi-api 2021-01-25 23:53:05 +03:00
tmshv c1083b3ab8 Merge pull request #58 from tmshv/upd/next-954
next 9.5.4
2021-01-25 23:18:56 +03:00
tmshv c1a96894e8 Merge pull request #59 from tmshv/dependabot/npm_and_yarn/axios-0.21.1
Bump axios from 0.19.2 to 0.21.1
2021-01-25 23:18:21 +03:00
tmshv 0f40f052f7 Merge pull request #57 from tmshv/dependabot/pip/modules/sync/pillow-7.1.0
Bump pillow from 6.2.0 to 7.1.0 in /modules/sync
2021-01-25 23:17:50 +03:00
tmshv ffd27d3221 Merge pull request #60 from tmshv/dependabot/pip/modules/sync/lxml-4.6.2
Bump lxml from 3.6.1 to 4.6.2 in /modules/sync
2021-01-25 23:17:13 +03:00
dependabot[bot] 45abaeff48 Bump lxml from 3.6.1 to 4.6.2 in /modules/sync
Bumps [lxml](https://github.com/lxml/lxml) from 3.6.1 to 4.6.2.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-3.6.1...lxml-4.6.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-07 23:24:29 +00:00
dependabot[bot] 1afd0d9589 Bump axios from 0.19.2 to 0.21.1
Bumps [axios](https://github.com/axios/axios) from 0.19.2 to 0.21.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.19.2...v0.21.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-05 20:48:42 +00:00
tmshv e1b206d8fb next 9.5.4 2020-11-19 20:10:22 +03:00
dependabot[bot] 88032bdbf6 Bump pillow from 6.2.0 to 7.1.0 in /modules/sync
Bumps [pillow](https://github.com/python-pillow/Pillow) from 6.2.0 to 7.1.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/6.2.0...7.1.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-19 16:36:21 +00:00
tmshv 4d28f4fa7d Merge pull request #56 from tmshv/upd/rm-opa
rm opa
2020-11-19 19:35:45 +03:00
tmshv 1ea216d63b rm khramov 2020-11-19 18:50:38 +03:00
tmshv 5d2a97d995 rm opa 2020-11-19 18:42:05 +03:00
tmshv 73aa95b6d3 tsconfig absolute import improved 2020-09-07 00:09:46 +03:00
tmshv 26a6eb3642 trailing slash option renamed 2020-09-07 00:09:01 +03:00
tmshv 5f28fa5859 next 9.5 2020-09-06 21:34:01 +03:00
tmshv f17cf945b7 typescript 4 2020-09-06 21:29:05 +03:00
tmshv 783dcc355e typescript 3.9 2020-09-06 21:17:35 +03:00
tmshv eb8512ca66 Merge pull request #54 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/bl-2.2.1
Bump bl from 2.2.0 to 2.2.1 in /modules/hudozka-api
2020-09-06 21:15:00 +03:00
dependabot[bot] 3d85f0067e Bump bl from 2.2.0 to 2.2.1 in /modules/hudozka-api
Bumps [bl](https://github.com/rvagg/bl) from 2.2.0 to 2.2.1.
- [Release notes](https://github.com/rvagg/bl/releases)
- [Commits](https://github.com/rvagg/bl/compare/v2.2.0...v2.2.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-03 19:03:23 +00:00
tmshv 81e19054a3 Merge pull request #53 from tmshv/dependabot/npm_and_yarn/elliptic-6.5.3
Bump elliptic from 6.5.2 to 6.5.3
2020-08-03 14:33:59 +03:00
dependabot[bot] dc4b778bb3 Bump elliptic from 6.5.2 to 6.5.3
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.2...v6.5.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-01 13:41:27 +00:00
tmshv be377f0e0f Merge pull request #51 from tmshv/dependabot/npm_and_yarn/modules/hudozka-api/lodash-4.17.19
Bump lodash from 4.17.15 to 4.17.19 in /modules/hudozka-api
2020-07-20 22:12:28 +03:00
tmshv 3d27a74afa Merge pull request #52 from tmshv/dependabot/npm_and_yarn/lodash-4.17.19
Bump lodash from 4.17.15 to 4.17.19
2020-07-20 22:11:59 +03:00
dependabot[bot] b45f24858b Bump lodash from 4.17.15 to 4.17.19
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-19 14:25:26 +00:00
dependabot[bot] eb292af4d6 Bump lodash from 4.17.15 to 4.17.19 in /modules/hudozka-api
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-19 14:22:10 +00:00
tmshv cfc286b706 Merge pull request #50 from tmshv/refactoring/google-fonts
google fonts import changed
2020-05-29 00:59:49 +03:00
tmshv cd9351396a upd shadow font 2020-05-29 00:34:00 +03:00
tmshv 9d72dd3bb8 shadow font preload 2020-05-29 00:07:24 +03:00
tmshv a659f32ff2 rm google link preconnect 2020-05-28 23:59:07 +03:00
tmshv a9215ac1fe google fonts import changed 2020-05-28 23:53:17 +03:00
tmshv 9d2e305eeb next 944 2020-05-28 16:16:43 +03:00
tmshv f09d1b025f use Roboto font family 2020-05-28 03:17:10 +03:00
tmshv 8cad7f2b26 online edu menu item 2020-05-28 03:16:50 +03:00
tmshv 8068d97b7e add eslint 2020-05-27 20:21:50 +03:00
tmshv 4d29225bc5 typograf updated 2020-05-27 18:53:55 +03:00
tmshv 7340843574 Merge pull request #49 from tmshv/next94
next updated to 9.4
2020-05-27 18:52:31 +03:00
tmshv bf7db5b226 fallback false 2020-05-27 18:43:11 +03:00
tmshv 6808117b9f next updated to 9.4 2020-05-27 18:35:34 +03:00
tmshv e2828affef npm update 2020-04-08 18:06:06 +03:00
tmshv 3db191bd79 v6.13 2020-03-29 02:17:27 +03:00
tmshv d1c0410d5e kke 2020-03-29 02:15:49 +03:00
tmshv 69f3144573 Page props typing improved 2020-03-29 02:15:25 +03:00
tmshv 3ddd883f39 rm test 2020-03-29 02:06:32 +03:00
tmshv 9abf6f1ca4 Merge pull request #48 from tmshv/fix/css-modules
CSS modules
2020-03-29 02:03:55 +03:00
tmshv 1d5cea146c Menu style fix 2020-03-29 01:59:53 +03:00
tmshv 83ffaa361c use builtin next css support 2020-03-29 01:42:14 +03:00
tmshv d65aba19a0 components uses css modules; other refactoring 2020-03-29 01:41:10 +03:00
tmshv 0cd61e0ed9 sync simplified 2020-03-29 01:39:06 +03:00
tmshv 207233125d sync wrong document fix 2020-03-29 01:38:35 +03:00
tmshv 8cbe9a695c next version updated to 9.3.2 2020-03-29 01:38:04 +03:00
tmshv 061f9cac67 kek error message changed 2020-03-29 01:37:43 +03:00
tmshv da7a84d7cc File component update 2020-03-28 00:19:52 +03:00
tmshv 1756d89cb4 file component and lib updated 2020-03-27 19:28:41 +03:00
tmshv b50b4b3ab3 sync file title update 2020-03-27 19:28:22 +03:00
tmshv 0ec86175b2 new persons 2020-03-25 19:56:01 +03:00
tmshv 028704b3b9 add new collective image 2020-03-25 18:24:46 +03:00
tmshv 3658e6a2b8 config link added 2020-03-21 20:51:32 +03:00
tmshv efbc29431e menu info href changed 2020-03-21 20:31:09 +03:00
tmshv 7500f9e32e shadows improved 2020-03-21 20:30:52 +03:00
tmshv f7cdd85ae7 Merge pull request #47 from tmshv/fix/render-tokens
Render tokens
2020-03-21 20:17:41 +03:00
tmshv b2ca735024 add token types 2020-03-21 20:11:04 +03:00
tmshv be836c42be youtube, intagram, html tokens support 2020-03-21 20:03:56 +03:00
tmshv a13b642979 pages Page to Index 2020-03-21 20:03:31 +03:00
tmshv c1a3af3a3e sync simplification
- drop token compilation to html
- drop artlebedev typograph
- drop other small things
2020-03-21 20:02:59 +03:00
tmshv 5f51a6e00d style.css moved to style folder 2020-03-21 18:31:54 +03:00
tmshv b78d78710c Markdown component refactoring: move core to lib/text 2020-03-19 23:12:22 +03:00
tmshv bb393becc4 render page content based on tokens; ignore rendered content field 2020-03-19 22:34:28 +03:00
tmshv 32d304b26f Merge pull request #46 from tmshv/fix/drop-sass
drop SASS
2020-03-19 15:10:30 +03:00
tmshv dbac5de6c8 drop sass 2020-03-19 15:04:30 +03:00
tmshv 50d87f218c rm style.scss 2020-03-19 15:03:22 +03:00
tmshv 4f1ac79c5f document-row refactoring 2020-03-19 15:03:06 +03:00
tmshv 1a006f5b3f document scss moved to file css 2020-03-19 15:02:38 +03:00
tmshv f7ce8ad9a7 Merge pull request #45 from tmshv/fix/npm-update
npm update
2020-03-19 14:52:44 +03:00
tmshv 9b99f6e360 Merge pull request #44 from tmshv/fix/sync-document-update
Sync document update
2020-03-19 14:49:23 +03:00
tmshv 4cac10499e npm update 2020-03-19 14:45:05 +03:00
tmshv bc56f8484d npm audit fix 2020-03-19 14:43:52 +03:00
tmshv 52fe61da05 react packages updated to 16.13.0; rm mocha, eslint 2020-03-19 14:42:11 +03:00
tmshv e2f41c8dc4 sync document updated: store raw data in document token; format on compile 2020-03-19 14:33:19 +03:00
tmshv 18645a7c94 fix sync image optimize 2020-03-11 15:39:57 +03:00
tmshv b61f1102c8 sync settings cleanup 2020-03-11 15:39:44 +03:00
tmshv 14e959ad75 error page upd 2020-03-11 14:05:16 +03:00
tmshv 93ee4ed9ca Merge pull request #43 from tmshv/fix/api-image-simplify
API image simplify
2020-03-11 13:44:16 +03:00
tmshv cc0987f7fa rm unused ImageArtifact type 2020-03-11 13:39:31 +03:00
tmshv b7f3bbbcef use cover instead of preview of coverSrc 2020-03-11 13:38:50 +03:00
tmshv a4d245007e sync image artifact generation simplified: upload only original image 2020-03-11 13:37:44 +03:00
tmshv 877c63a874 api image refactoring
- standart image definition for old preview and new cover
2020-03-11 13:36:15 +03:00
tmshv a3ffb00ed7 v6.11.0 2020-03-10 20:14:16 +03:00
tmshv 6074e201b5 sync image token fix 2020-03-10 20:13:36 +03:00
tmshv c3ed1a5b34 Merge pull request #42 from tmshv/fix/next-930
updated to next 9.3.0
2020-03-10 20:12:48 +03:00
tmshv 1e36025035 document page fallback 2020-03-10 19:19:37 +03:00
tmshv 1e22a5f437 document page update 2020-03-10 19:16:39 +03:00
tmshv 01acda1e04 updated to next 9.3.0 2020-03-10 19:13:11 +03:00
tmshv 6c6c9f91ca Merge pull request #41 from tmshv/fix/sync-update
Sync update
2020-03-10 18:34:01 +03:00
tmshv ffd8396fa0 sync building image update: compile image via proxy 2020-03-10 18:32:51 +03:00
456 changed files with 79303 additions and 22855 deletions

No files matched your search

-5
View File
@@ -1,5 +0,0 @@
{
"presets": [
"next/babel"
]
}
-26
View File
@@ -1,26 +0,0 @@
module.exports = {
"env": {
"browser": true,
"es6": true
},
"extends": "standard",
"plugins": [
"standard",
"promise",
"react",
],
"rules": {
"semi": ["error", "never"],
"space-before-function-paren": "off",
"comma-dangle": "off",
"no-tabs": "off",
"indent": ["error", "tab"],
"react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error",
},
"parserOptions": {
"ecmaFeatures": {
"jsx": true
}
}
};
@@ -1,15 +0,0 @@
---
label: Article
hide_body: false
fields:
- name: slug
type: text
config:
required: false
label: slug
- name: tags
type: tag_list
default: []
label: tags
pages:
- data/articles/article-test.md
-29
View File
@@ -1,29 +0,0 @@
---
new_page_extension: md
auto_deploy: false
admin_path: ''
webhook_url:
sections:
- type: directory
path: data/articles
label: Articles
create: documents
match: "**/*"
- type: document
path: data/settings.json
label: Settings
upload_dir: uploads
public_path: "/uploads"
front_matter_path: ''
use_front_matter_path: false
file_template: ":year:/:filename:"
build:
preview_command: gatsby build
publish_command: gatsby build
preview_output_directory: public
output_directory: public
instant_preview_command: npm run forestry:preview
install_dependencies_command: yarn install
preview_docker_image: node:10
mount_path: "/srv"
working_dir: "/srv"
+5
View File
@@ -0,0 +1,5 @@
## Summary
-
## Closes #
+53
View File
@@ -0,0 +1,53 @@
name: Build Frontend and Deploy
on:
push:
branches:
- master
jobs:
build:
name: Build Image
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.PAT }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Cache Docker layers
uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Build and push
uses: docker/build-push-action@v5
with:
context: ./
file: ./apps/hudozka/Dockerfile
push: true
platforms: linux/amd64
tags: |
ghcr.io/tmshv/hudozka-app:latest
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new
- name: Move cache
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
+31
View File
@@ -0,0 +1,31 @@
name: Build Pocketbase and Deploy
on:
push:
branches:
- master
paths:
- "pb/**"
jobs:
build:
name: Build Image
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.PAT }}
- name: Build and Push
uses: docker/build-push-action@v5
with:
push: true
context: pb
tags: |
ghcr.io/tmshv/hudozka-pb:latest
+92
View File
@@ -0,0 +1,92 @@
name: Test App
on:
pull_request:
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 24
cache: npm
- name: Install dependencies
run: npm ci
- name: Lint
run: npx biome ci
test:
name: Test
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 24
cache: npm
- name: Install dependencies
run: npm ci
- name: Test
run: npm test
typecheck:
name: Type Check
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 24
cache: npm
- name: Install dependencies
run: npm ci
- name: Type check
run: npx tsc --noEmit -p apps/hudozka/tsconfig.json
build:
name: Build
needs: [lint, test, typecheck]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 24
cache: npm
- name: Install dependencies
run: npm ci
- name: Cache Next.js build
uses: actions/cache@v4
with:
path: .next/cache
key: nextjs-${{ hashFiles('package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx', '**/*.css') }}
restore-keys: nextjs-${{ hashFiles('package-lock.json') }}-
- name: Disable Next.js telemetry
run: npx next telemetry disable
- name: Build
run: npm run build
+14 -4
View File
@@ -5,18 +5,28 @@ npm-debug.log
private*.json
/node_modules
node_modules
/bower_components
/modules/hudozka-api-v1/lib
/build
/out
dist
.next
**/env
**/venv
**/__pycache__
**/*.pyc
/coverage
**/.vscode
*.log
.now
.now
.vercel
.next
tsconfig.tsbuildinfo
.env
pb/pb_data/*.db*
pb/pb_data/storage
# ralphex progress logs
.ralphex/progress/
.superpowers/
-5
View File
@@ -1,5 +0,0 @@
.forestry
./utils
modules
data
uploads
+124
View File
@@ -0,0 +1,124 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
Website for the Art School of Shlisselburg ([art.shlisselburg.org](https://art.shlisselburg.org)). Content is in Russian. Built with Next.js using the App Router and PocketBase as the backend (migrated from Strapi — see `pb/` and `src/remote/pb.ts`). The project has migrated through Express → Angular 1 → React class components → Next.js (Pages Router) → Next.js (App Router); some legacy artifacts remain.
## Commands
From repo root (delegates to `apps/hudozka`):
- `npm run dev` — dev server with Turbo (`next dev --turbo`)
- `npm run build` — production build
- `npm run lint` — Biome lint + format check across the whole monorepo (`biome check`)
- `npm run format` — auto-fix lint and format issues (`biome check --write`)
- `npm test` — run unit tests (Vitest) across every workspace
Per-app:
- `npm run dev -w apps/hudozka-writer` — writer UI (Vite)
- `npm run migrate -w apps/migrate-to-pocketbase` — one-off migration script
Node 24 required (see `mise.toml`). Deployed on Vercel.
## Git Workflow
Feature branches are named `issue-XXX` where `XXX` is the related GitHub issue number. PR descriptions should not include a test plan section.
## CI/CD
- `apps/hudozka/Dockerfile` — multi-stage Alpine build with standalone Next.js output, pushed to GHCR. Build context is the repo root so the workspace graph is available.
- `.github/workflows/build-app.yaml` — builds and pushes Docker image on push to master (`file: ./apps/hudozka/Dockerfile`, `context: ./`).
- `.github/workflows/test-app.yml` — runs lint, tests, typecheck, and build on PRs.
## Code Style
Biome (`biome.json`) handles formatting and linting. Style: no semicolons, double quotes, 4-space indentation, always-multiline trailing commas, LF line endings, 120-column line width. Lint scope is limited to `**/src/**/*.{ts,tsx,js}` via `files.includes`. Console calls are restricted to `console.error`/`console.warn` (full `console.*` is allowed only inside `apps/migrate-to-pocketbase`). `noDangerouslySetInnerHtml` is disabled because the site renders trusted CMS HTML. Inline `biome-ignore` / `eslint-disable` comments are not used — fix the underlying issue instead.
**React components:** Use regular function declarations (not arrow functions) and `type` for props. Do not use `React.FC`.
```tsx
export type MyComponentProps = {
value: string
}
export function MyComponent({ value }: MyComponentProps) {
return <div>{value}</div>
}
```
## Dependencies
When adding or updating packages in `package.json`, do not specify the PATCH version — use `^MAJOR.MINOR.0`. The exact patch version is managed by the lockfile and `npm update`.
## Architecture
**App Router with SSG/ISR:** Pages are server components under `src/app/` with `export const revalidate = 30`. The root layout (`src/app/layout.tsx`) fetches menu data and passes it down. The catch-all route `src/app/[...slug]/page.tsx` handles all dynamic content pages with `generateStaticParams` and `generateMetadata`.
**Server/client boundary:** Layout and page components are server components that fetch data. The `App` component (`src/components/App`) is a `"use client"` component that provides the layout chrome (navigation, breadcrumbs, footer). Content is passed as `children` from server pages through the client boundary. Components using hooks (`PageGrid`, `HomeContent`, `PageContent`, `Menu`, `MobileNavigation`, `Wrapper`) are marked `"use client"`.
**Data flow:** PocketBase API → `src/remote/api.ts` fetches data via `apiGet()` generic wrapper → `src/remote/factory.ts` normalizes responses into app types (`src/types.ts`) → pages render token-based content blocks. The API layer uses a factory pattern with default-response fallbacks on failure. The legacy Strapi integration was removed (see commit "rm strapi"); `src/remote/pb.ts` is the PocketBase client.
**Metadata:** Uses the Next.js Metadata API (`generateMetadata`, `export const metadata`). The `buildMetadata()` helper in `src/lib/meta.ts` bridges the app's `Meta` type to Next.js `Metadata` format.
**Content tokens:** Pages are composed of flexible content blocks (tokens): `text`, `image`, `file`, `html`, `youtube`, `instagram`, `grid`. The `Token` discriminated union is defined in `src/types.ts`. Each token type maps to a renderer component in the `PageContent` client component.
**State management:** Valtio for reactive state (`src/store/`). Theme/accessibility preferences in `theme` store, playback state in `play` store.
## Key Directories
- `apps/hudozka/src/app/` — App Router pages, layouts, route handlers (catch-all, not-found, sitemap, robots, feed)
- `apps/hudozka/src/components/` — page-level and feature components (folder-per-component + `styles.module.css`)
- `apps/hudozka/src/ui/` — Next/store-coupled UI that stays in the app: `Picture`, `ThemeColor`
- `apps/hudozka/src/remote/` — PocketBase API client (`api.ts`, `factory.ts`, `types.ts`, `pb.ts`)
- `apps/hudozka/src/store/` — Valtio stores (theme/accessibility, playback)
- `apps/hudozka/src/hooks/` — business-coupled hooks: `useDarkTheme`, `useAccessibility`
- `apps/hudozka/src/lib/` — app-only lib (currently just `meta.ts`)
- `apps/hudozka/src/style/` — global CSS with CSS custom properties for theming
- `packages/ui/` — `@hudozka/ui` — reusable primitives (Box, Button, Panel, Title, Overlay)
- `packages/hooks/` — `@hudozka/hooks` — generic React hooks (useToggle, useLockBodyScroll, useMediaQuery, useMobile, useReducedMotion)
- `packages/utils/` — `@hudozka/utils` — pure utilities (array, string, url, math, image, file, date)
- `packages/text/` — `@hudozka/text` — markdown + typograf rendering
- `apps/hudozka-writer/` — Vite-based Tiptap editor
- `apps/migrate-to-pocketbase/` — one-off Strapi → PocketBase migration script
- `pb/` — PocketBase instance (data, migrations)
## Styling
CSS Modules (`.module.css`) for component-scoped styles. Global theme via CSS custom properties in `src/style/style.css`. No utility CSS framework. Uses `classnames` package for conditional class composition.
## TypeScript
Path alias: `@/*` → `src/*`. Strict mode enabled. Target ES2020. `moduleDetection: "force"` in tsconfig (required because Next.js auto-generates `.next/types/validator.ts` without exports, which breaks `verbatimModuleSyntax`). Use `@/` path alias for all local imports, not `src/`. Legacy `src/` imports exist in the codebase but should not be used in new or modified code. The `@/*` path alias is only configured in `apps/hudozka/tsconfig.json`; packages under `packages/*` use short relative imports.
`verbatimModuleSyntax` is enabled — use `import type` for type-only imports. When importing both values and types from the same module, use separate `import` and `import type` statements:
```ts
import { createPage } from "@/remote/factory"
import type { Page } from "@/types"
```
## Accessibility
The site has an accessibility panel with configurable font size (8-48pt), color schemes (5 presets: black-on-white, white-on-black, blue-on-blue, brown-on-yellow, green-on-brown), line height, letter spacing, image toggling, and serif/sans-serif font choice — all managed through the Valtio theme store. The theme store currently applies changes via direct DOM manipulation in a Valtio `subscribe()` callback (`src/store/theme.ts`).
## Images
Remote images from `hudozkacdn.tmshv.com` with `images.weserv.nl` as proxy. Blur hash encoding for progressive loading (uses `sharp` server-side). Image optimization configured in `next.config.ts` via `remotePatterns`.
## Testing
Vitest for unit tests. Config in `vitest.config.ts` with `@/` and `src/` path aliases. Test files are co-located with source across `src/lib/`, `src/ui/`, and `src/components/`. Covers utility functions (array, string, url, file, image, date, text, meta), UI primitives (Box, Button, Panel), and components (Breadcrumbs, YMetrika).
## Known Legacy / Technical Debt
Active modernization is tracked in GitHub issues #222–#238. Key items:
- `src/types.ts` has `I`-prefix interfaces (`IPage`, `IMenu`, etc.) from the Angular era alongside modern `type` aliases. The `tokens` field on `IPage` is `any[]` despite a proper `Token` union type existing.
- `src/store/theme.ts` manipulates DOM directly outside React lifecycle (sets CSS vars on `document.documentElement`, toggles `document.body` classes).
- Two orphaned `.scss` files in `src/style/` (`tape-viewer.scss`, `vertical-image.scss`) — not imported anywhere, no SCSS preprocessor configured.
- Some inline styles in `src/components/App/index.tsx` should be CSS modules.
- `react-use` and `use-media` dependencies are unmaintained; only `useToggle` and `useLockBodyScroll` are used from `react-use`.
+50 -24
View File
@@ -1,42 +1,68 @@
# [ART.SHLISSELBURG.ORG](https://art.shlisselburg.org)
Site of Art school of Shlisselburg
Website for the Art School of Shlisselburg. Built with Next.js and powered by PocketBase (migrated from Strapi).
Font: [«Shadow»](http://mishapanfilov.ru/font_shadow.html)
## Usage
## Repo layout
### Build
This is an npm-workspaces monorepo:
- `apps/hudozka` — main Next.js app (art.shlisselburg.org)
- `apps/hudozka-writer` — Vite-based content editor
- `apps/migrate-to-pocketbase` — one-off migration script (Strapi → PocketBase)
- `packages/ui` — `@hudozka/ui` — shared React primitives (Box, Button, Panel, Title, Overlay)
- `packages/hooks` — `@hudozka/hooks` — generic React hooks
- `packages/utils` — `@hudozka/utils` — pure utilities (array, string, url, math, image, file, date)
- `packages/text` — `@hudozka/text` — markdown + typograf rendering
- `pb/` — PocketBase instance (untouched by the monorepo migration)
Common commands (from repo root):
- `npm run dev` — run the web app dev server
- `npm run build` — production build of the web app
- `npm run lint` — lint the whole monorepo
- `npm test` — run tests across every workspace
- `npm run dev -w apps/hudozka-writer` — run the writer
- `npm run migrate -w apps/migrate-to-pocketbase` — run the migration script
## Development
### Prerequisites
- Node.js 24 (see `mise.toml`)
### Getting Started
1. Install dependencies
```bash
$ docker build -t tmshv/hudozka .
npm install
```
### How to run
#### Add .env file
```
MONGO_HUDOZKA_PASSWORD=<strong_password>
HUDOZKA_DB_URI=mongodb://hudozka:strong_password@mongo:27017/hudozka?authSource=admin
```
#### Run
2. Start development server
```bash
$ docker-compose up -d
npm run dev
```
### How to sync data base
The development server runs at [http://localhost:3000](http://localhost:3000) with Turbo mode enabled.
Local DB to remote DB
## Content Management
Content is fetched from PocketBase and rendered using flexible content tokens:
- `text` — Markdown with Russian typography (Typograf)
- `image` — Responsive images with blur hash
- `file` — Document downloads
- `html` — Raw HTML embeds
- `youtube` — Video embeds
- `instagram` — Social media embeds
- `grid` — Card grids
```bash
DB=hudozka
HOST=<ip_address>
USER=<mongo_user>
PWD=<mongo_password>
mongodump -d ${DB} --gzip --archive | mongorestore -h ${HOST} -u ${USER} -p ${PWD} -d ${DB} --gzip --archive
```
## Accessibility
The site includes an accessibility panel with configurable:
- Font size (8-48pt)
- Color schemes (5 presets: black-on-white, white-on-black, blue-on-blue, brown-on-yellow, green-on-brown)
- Line height and letter spacing
- Image toggling
- Font family (serif/sans-serif)
## Contributors
- Roman Timashev ([roman@tmshv.ru](mailto:roman@tmshv.ru))
View File
Whitespace-only changes.
+24
View File
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
+30
View File
@@ -0,0 +1,30 @@
# React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
## Expanding the ESLint configuration
If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:
- Configure the top-level `parserOptions` property like this:
```js
export default {
// other rules...
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
project: ['./tsconfig.json', './tsconfig.node.json'],
tsconfigRootDir: __dirname,
},
}
```
- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
- Optionally add `plugin:@typescript-eslint/stylistic-type-checked`
- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list
+12
View File
@@ -0,0 +1,12 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hudozka Writer</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
File diff suppressed because it is too large. Load diff
+45
View File
@@ -0,0 +1,45 @@
{
"name": "hudozka-writer",
"private": true,
"version": "0.1.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc --noEmit && vite build",
"preview": "vite preview"
},
"dependencies": {
"@tiptap/core": "^3.0.0",
"@tiptap/extension-blockquote": "^3.0.0",
"@tiptap/extension-bold": "^3.0.0",
"@tiptap/extension-bullet-list": "^3.0.0",
"@tiptap/extension-code": "^3.0.0",
"@tiptap/extension-code-block": "^3.0.0",
"@tiptap/extension-document": "^3.0.0",
"@tiptap/extension-hard-break": "^3.0.0",
"@tiptap/extension-heading": "^3.0.0",
"@tiptap/extension-horizontal-rule": "^3.0.0",
"@tiptap/extension-italic": "^3.0.0",
"@tiptap/extension-link": "^3.0.0",
"@tiptap/extension-list-item": "^3.0.0",
"@tiptap/extension-ordered-list": "^3.0.0",
"@tiptap/extension-paragraph": "^3.0.0",
"@tiptap/extension-strike": "^3.0.0",
"@tiptap/extension-text": "^3.0.0",
"@tiptap/markdown": "^3.0.0",
"@tiptap/pm": "^3.0.0",
"@tiptap/react": "^3.0.0",
"@tiptap/starter-kit": "^3.0.0",
"@tiptap/suggestion": "^3.22.2",
"pocketbase": "^0.25.0",
"react": "^19.1.0",
"react-dom": "^19.1.0"
},
"devDependencies": {
"@types/react": "^19.1.0",
"@types/react-dom": "^19.1.0",
"@vitejs/plugin-react": "^5.2.0",
"typescript": "^5.9.0",
"vite": "^8.0.0"
}
}
+68
View File
@@ -0,0 +1,68 @@
.app {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.app-header {
display: flex;
align-items: center;
gap: 12px;
padding: 12px 20px;
border-bottom: 1px solid #e0e0e0;
}
.app-title {
font-weight: 600;
}
.app-slug {
color: #888;
font-family: monospace;
}
.app-header button {
padding: 4px 12px;
border: 1px solid #ccc;
border-radius: 4px;
background: white;
cursor: pointer;
}
.app-header button:first-of-type {
margin-left: auto;
}
.app-main {
flex: 1;
padding: 20px;
max-width: 800px;
margin: 0 auto;
width: 100%;
}
.app-message {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 12px;
min-height: 100vh;
}
.app-error {
color: #c00;
}
.app-published-toggle {
display: flex;
align-items: center;
gap: 4px;
font-size: 0.9rem;
cursor: pointer;
user-select: none;
}
.app-published-toggle input {
cursor: pointer;
}
+138
View File
@@ -0,0 +1,138 @@
import { useCallback, useEffect, useState } from "react"
import { Editor } from "./components/Editor"
import { Login } from "./components/Login"
import { pb } from "./pb"
import type { PbPage } from "./types"
import "./App.css"
function getSlugFromUrl(): string | null {
const params = new URLSearchParams(window.location.search)
return params.get("page")
}
export function App() {
const [authenticated, setAuthenticated] = useState(pb.authStore.isValid)
const [page, setPage] = useState<PbPage | null>(null)
const [loading, setLoading] = useState(false)
const [error, setError] = useState("")
const slug = getSlugFromUrl()
const loadPage = useCallback(async (slug: string) => {
setLoading(true)
setError("")
try {
const record = await pb.collection("pages").getFirstListItem<PbPage>(`slug="${slug}"`)
setPage(record)
} catch {
setError(`Page "${slug}" not found`)
} finally {
setLoading(false)
}
}, [])
useEffect(() => {
if (authenticated && slug) {
loadPage(slug)
}
}, [authenticated, slug, loadPage])
function handleLogout() {
pb.authStore.clear()
setAuthenticated(false)
setPage(null)
}
async function handleDuplicate() {
if (!page) return
const newSlug = `${page.slug}-copy`
try {
const record = await pb.collection("pages").create<PbPage>({
title: `${page.title} (copy)`,
slug: newSlug,
excerpt: page.excerpt,
date: page.date,
cover: page.cover,
doc: page.doc,
tags: page.tags,
published: false,
draft: null,
})
window.location.search = `?page=${record.slug}`
} catch (err) {
console.error("Duplicate failed:", err)
alert("Duplicate failed. Check console.")
}
}
async function handleTogglePublished() {
if (!page) return
try {
const updated = await pb.collection("pages").update<PbPage>(page.id, {
published: !page.published,
})
setPage(updated)
} catch (err) {
console.error("Toggle published failed:", err)
alert("Toggle published failed. Check console.")
}
}
if (!authenticated) {
return <Login onLogin={() => setAuthenticated(true)} />
}
if (!slug) {
return (
<div className="app-message">
<p>
Add <code>?page=slug</code> to the URL to edit a page.
</p>
<button type="button" onClick={handleLogout}>
Logout
</button>
</div>
)
}
if (loading) {
return <div className="app-message">Loading...</div>
}
if (error) {
return (
<div className="app-message">
<p className="app-error">{error}</p>
<button type="button" onClick={handleLogout}>
Logout
</button>
</div>
)
}
if (!page) {
return <div className="app-message">Loading...</div>
}
return (
<div className="app">
<header className="app-header">
<span className="app-title">{page.title}</span>
<span className="app-slug">/{page.slug}</span>
<label className="app-published-toggle">
<input type="checkbox" checked={page.published} onChange={handleTogglePublished} />
Published
</label>
<button type="button" onClick={handleDuplicate}>
Duplicate
</button>
<button type="button" onClick={handleLogout}>
Logout
</button>
</header>
<main className="app-main">
<Editor page={page} />
</main>
</div>
)
}
@@ -0,0 +1,69 @@
.block-actions {
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
flex-shrink: 0;
width: 28px;
padding-top: 2px;
user-select: none;
}
.block-action-btn {
width: 24px;
height: 24px;
border-radius: 4px;
border: 1px solid transparent;
background: none;
cursor: pointer;
font-size: 16px;
line-height: 1;
color: #ccc;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.15s ease;
padding: 0;
}
.block-action-btn:hover {
border-color: #ddd;
color: #666;
background: #f5f5f5;
}
.block-action-delete:hover {
border-color: #c00;
color: #c00;
background: #fff0f0;
}
.block-action-split:hover {
border-color: #2563eb;
color: #2563eb;
background: #eff6ff;
}
.block-drag-handle {
cursor: grab;
}
.block-drag-handle:active {
cursor: grabbing;
}
[data-node-view-wrapper] {
position: relative;
}
.node-view-block {
display: flex;
flex-direction: row;
align-items: stretch;
gap: 4px;
}
.node-view-content {
flex: 1;
min-width: 0;
}
@@ -0,0 +1,149 @@
import { Fragment } from "@tiptap/pm/model"
import type { Editor } from "@tiptap/react"
import { useCallback, useEffect } from "react"
import "./BlockActions.css"
export type BlockActionsProps = {
editor: Editor
getPos: () => number | undefined
showSplit?: boolean
}
export function BlockActions({ editor, getPos, showSplit }: BlockActionsProps) {
const getWrapper = useCallback(() => {
const pos = getPos()
if (typeof pos !== "number") return null
const dom = editor.view.nodeDOM(pos)
if (!dom || !(dom instanceof HTMLElement)) return null
return dom.closest("[data-node-view-wrapper]") as HTMLElement | null
}, [editor, getPos])
useEffect(() => {
const checkActive = () => {
const wrapper = getWrapper()
if (!wrapper) return
const pos = getPos()
if (typeof pos !== "number") {
wrapper.classList.remove("active-block")
return
}
const { from } = editor.state.selection
const resolved = editor.state.doc.resolve(from)
if (resolved.depth < 1) {
wrapper.classList.remove("active-block")
return
}
const blockPos = resolved.before(1)
if (blockPos === pos) {
wrapper.classList.add("active-block")
} else {
wrapper.classList.remove("active-block")
}
}
const handleBlur = () => {
const wrapper = getWrapper()
wrapper?.classList.remove("active-block")
}
checkActive()
editor.on("selectionUpdate", checkActive)
editor.on("focus", checkActive)
editor.on("blur", handleBlur)
return () => {
editor.off("selectionUpdate", checkActive)
editor.off("focus", checkActive)
editor.off("blur", handleBlur)
const wrapper = getWrapper()
wrapper?.classList.remove("active-block")
}
}, [editor, getPos, getWrapper])
const handleDelete = (e: React.MouseEvent) => {
e.preventDefault()
const pos = getPos()
if (typeof pos !== "number") return
const node = editor.state.doc.nodeAt(pos)
if (!node) return
editor
.chain()
.focus()
.deleteRange({
from: pos,
to: pos + node.nodeSize,
})
.run()
}
const handleSplit = (e: React.MouseEvent) => {
e.preventDefault()
const pos = getPos()
if (typeof pos !== "number") return
const node = editor.state.doc.nodeAt(pos)
if (!node || node.childCount < 2) return
const { from } = editor.state.selection
let childOffset = pos + 1
let splitAfter = -1
for (let i = 0; i < node.childCount; i++) {
const child = node.child(i)
const childEnd = childOffset + child.nodeSize
if (from >= childOffset && from < childEnd) {
splitAfter = i
break
}
childOffset = childEnd
}
if (splitAfter < 0 || splitAfter >= node.childCount - 1) return
const firstChildren = []
const secondChildren = []
for (let i = 0; i < node.childCount; i++) {
if (i <= splitAfter) {
firstChildren.push(node.child(i))
} else {
secondChildren.push(node.child(i))
}
}
const { schema } = editor.state
const textBlockType = schema.nodes.textBlock
const first = textBlockType.create(null, firstChildren)
const second = textBlockType.create(null, secondChildren)
const tr = editor.state.tr
tr.replaceWith(pos, pos + node.nodeSize, Fragment.from([first, second]))
editor.view.dispatch(tr)
}
return (
<div className="block-actions" contentEditable={false}>
<button
type="button"
className="block-action-btn block-action-delete"
title="Delete block"
onClick={handleDelete}
>
&times;
</button>
{showSplit && (
<button
type="button"
className="block-action-btn block-action-split"
title="Split block"
onClick={handleSplit}
>
&#x2702;
</button>
)}
<div className="block-action-btn block-drag-handle" data-drag-handle draggable title="Drag to reorder">
&#x2807;
</div>
</div>
)
}
@@ -0,0 +1,39 @@
.block-insert {
position: relative;
display: flex;
align-items: center;
justify-content: flex-start;
padding: 8px 0 8px 28px;
}
.block-insert-btn {
position: relative;
width: 24px;
height: 24px;
border-radius: 50%;
border: 1px solid transparent;
background: none;
cursor: pointer;
font-size: 18px;
line-height: 1;
color: #ccc;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.15s ease;
padding: 0;
z-index: 10;
}
.block-insert-btn:hover {
border-color: #ddd;
color: #666;
background: #f5f5f5;
}
.block-insert-menu {
position: absolute;
top: 12px;
left: 56px;
z-index: 50;
}
@@ -0,0 +1,43 @@
import type { Editor } from "@tiptap/react"
import { useState } from "react"
import { BlockMenu } from "./BlockMenu"
import "./BlockInsert.css"
export type BlockInsertProps = {
editor: Editor
getPos: () => number | undefined
}
export function BlockInsert({ editor, getPos }: BlockInsertProps) {
const [menuOpen, setMenuOpen] = useState(false)
const insertPos = (() => {
const pos = getPos()
if (typeof pos !== "number") return 0
const node = editor.state.doc.nodeAt(pos)
return node ? pos + node.nodeSize : 0
})()
const handleToggle = (e: React.MouseEvent) => {
e.preventDefault()
e.stopPropagation()
setMenuOpen(!menuOpen)
}
const handleClose = () => {
setMenuOpen(false)
}
return (
<div className="block-insert" contentEditable={false}>
<button type="button" className="block-insert-btn" title="Add block" onClick={handleToggle}>
+
</button>
{menuOpen && (
<div className="block-insert-menu">
<BlockMenu editor={editor} position={insertPos} onClose={handleClose} />
</div>
)}
</div>
)
}
@@ -0,0 +1,24 @@
.block-menu {
background: white;
border: 1px solid #ddd;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
padding: 4px 0;
min-width: 160px;
z-index: 50;
}
.block-menu-item {
display: block;
width: 100%;
padding: 8px 12px;
border: none;
background: none;
text-align: left;
cursor: pointer;
font-size: 0.9rem;
}
.block-menu-item:hover {
background: #f0f4ff;
}
@@ -0,0 +1,69 @@
import type { Editor } from "@tiptap/react"
import { generateBlockId } from "../lib/id"
import "./BlockMenu.css"
type BlockType = {
label: string
type: string
attrs?: Record<string, unknown>
}
const BLOCK_TYPES: BlockType[] = [
{ label: "Text", type: "textBlock" },
{ label: "Image", type: "imageBlock", attrs: { id: "", imageId: "", wide: false, caption: "" } },
{ label: "File", type: "documentBlock", attrs: { id: "", fileId: "", title: "" } },
{ label: "Embed", type: "embedBlock", attrs: { id: "", src: "" } },
{ label: "Card Grid", type: "cardGridBlock", attrs: { id: "", items: "[]" } },
]
export type BlockMenuProps = {
editor: Editor
position: number
onClose: () => void
filter?: string
}
export function BlockMenu({ editor, position, onClose, filter }: BlockMenuProps) {
const filtered = filter
? BLOCK_TYPES.filter(b => b.label.toLowerCase().includes(filter.toLowerCase()))
: BLOCK_TYPES
function handleInsert(block: BlockType) {
const id = generateBlockId()
if (block.type === "textBlock") {
editor
.chain()
.focus()
.insertContentAt(position, {
type: "textBlock",
content: [{ type: "paragraph" }],
})
.run()
} else {
editor
.chain()
.focus()
.insertContentAt(position, {
type: block.type,
attrs: { ...block.attrs, id },
})
.run()
}
onClose()
}
if (filtered.length === 0) return null
return (
<div className="block-menu">
{filtered.map(block => (
<button type="button" key={block.type} className="block-menu-item" onClick={() => handleInsert(block)}>
{block.label}
</button>
))}
</div>
)
}
export type { BlockType }
export { BLOCK_TYPES }
@@ -0,0 +1,24 @@
.draft-banner {
display: flex;
align-items: center;
justify-content: space-between;
padding: 8px 12px;
background: #fff8e1;
border: 1px solid #ffe082;
border-radius: 4px;
margin-bottom: 12px;
font-size: 0.9rem;
}
.draft-banner-discard {
padding: 4px 12px;
border: 1px solid #ccc;
border-radius: 4px;
background: white;
cursor: pointer;
font-size: 0.85rem;
}
.draft-banner-discard:hover {
background: #f0f0f0;
}
@@ -0,0 +1,16 @@
import "./DraftBanner.css"
export type DraftBannerProps = {
onDiscard: () => void
}
export function DraftBanner({ onDiscard }: DraftBannerProps) {
return (
<div className="draft-banner">
<span>You have unpublished changes</span>
<button type="button" onClick={onDiscard} className="draft-banner-discard">
Discard
</button>
</div>
)
}
@@ -0,0 +1,88 @@
.editor {
width: 100%;
}
.editor-content {
position: relative;
}
.editor-content .tiptap {
outline: none;
min-height: 400px;
}
.editor-content .tiptap > * + * {
margin-top: 0.75em;
}
.editor-content .tiptap h1 {
font-size: 2rem;
}
.editor-content .tiptap h2 {
font-size: 1.5rem;
}
.editor-content .tiptap h3 {
font-size: 1.25rem;
}
.editor-content .tiptap blockquote {
border-left: 3px solid #e0e0e0;
padding-left: 1rem;
color: #666;
}
.editor-content .tiptap pre {
background: #f5f5f5;
border-radius: 4px;
padding: 12px;
font-family: monospace;
}
.editor-content .tiptap code {
background: #f0f0f0;
border-radius: 2px;
padding: 0.1em 0.3em;
font-size: 0.9em;
}
.editor-content .tiptap hr {
border: none;
border-top: 1px solid #e0e0e0;
margin: 1.5em 0;
}
.editor-content .tiptap a {
color: #2563eb;
text-decoration: underline;
}
.editor-content .tiptap ul,
.editor-content .tiptap ol {
padding-left: 1.5em;
}
.editor-markdown {
width: 100%;
min-height: 400px;
padding: 16px;
font-family: monospace;
font-size: 14px;
line-height: 1.6;
border: 1px solid #e0e0e0;
border-radius: 4px;
resize: vertical;
outline: none;
box-sizing: border-box;
}
.editor-markdown:focus {
border-color: #213547;
}
.editor-content .tiptap [data-node-view-wrapper].active-block > .node-view-content {
outline: 2px solid #d0d5dd;
outline-offset: 2px;
border-radius: 4px;
}
@@ -0,0 +1,160 @@
import Link from "@tiptap/extension-link"
import { Markdown } from "@tiptap/markdown"
import { EditorContent, useEditor } from "@tiptap/react"
import StarterKit from "@tiptap/starter-kit"
import { useCallback, useRef, useState } from "react"
import { SlashCommands } from "../extensions/SlashCommands"
import { docToTiptap, tiptapToDoc } from "../lib/serialize"
import { CardGridBlock, DocumentBlock, EmbedBlock, ImageBlock, TextBlock, WriterDocument } from "../nodes"
import { pb } from "../pb"
import { DraftBanner } from "./DraftBanner"
import { Toolbar } from "./Toolbar"
import "../nodes/nodes.css"
import "./Editor.css"
import type { DocV1, PbPage } from "../types"
function serializeDoc(doc: DocV1): string {
return JSON.stringify(doc)
}
export type EditorProps = {
page: PbPage
}
export function Editor({ page }: EditorProps) {
const [saving, setSaving] = useState(false)
const [publishing, setPublishing] = useState(false)
const [markdownMode, setMarkdownMode] = useState(false)
const [markdownText, setMarkdownText] = useState("")
const [dirty, setDirty] = useState(false)
const [hasDraft, setHasDraft] = useState(page.draft !== null)
const [publishedDoc, setPublishedDoc] = useState(page.doc)
const initialDoc = page.draft ?? page.doc
const tiptapDoc = docToTiptap(initialDoc)
const snapshotRef = useRef(serializeDoc(initialDoc))
const editor = useEditor({
extensions: [
WriterDocument,
StarterKit.configure({
document: false,
}),
TextBlock,
Markdown,
Link.configure({ openOnClick: false }),
ImageBlock,
DocumentBlock,
EmbedBlock,
CardGridBlock,
SlashCommands,
],
content: tiptapDoc,
onUpdate: ({ editor }) => {
const json = editor.getJSON()
const doc = tiptapToDoc(json.content ?? [])
const current = serializeDoc(doc)
setDirty(current !== snapshotRef.current)
},
})
const getCurrentDoc = useCallback((): DocV1 => {
if (!editor) return { version: 1, blocks: [] }
if (markdownMode) {
editor.commands.setContent(markdownText, { contentType: "markdown" })
setMarkdownMode(false)
}
const json = editor.getJSON()
return tiptapToDoc(json.content ?? [])
}, [editor, markdownMode, markdownText])
const handleToggleMarkdown = useCallback(() => {
if (!editor) return
if (!markdownMode) {
const md = editor.getMarkdown()
setMarkdownText(md)
setMarkdownMode(true)
} else {
editor.commands.setContent(markdownText, { contentType: "markdown" })
setMarkdownMode(false)
}
}, [editor, markdownMode, markdownText])
const handleSave = useCallback(async () => {
if (!editor) return
setSaving(true)
try {
const doc = getCurrentDoc()
await pb.collection("pages").update(page.id, { draft: doc })
snapshotRef.current = serializeDoc(doc)
setDirty(false)
setHasDraft(true)
} catch (err) {
console.error("Save failed:", err)
alert("Save failed. Check console.")
} finally {
setSaving(false)
}
}, [editor, page.id, getCurrentDoc])
const handlePublish = useCallback(async () => {
if (!editor) return
setPublishing(true)
try {
const doc = getCurrentDoc()
await pb.collection("pages").update(page.id, { doc, draft: null })
snapshotRef.current = serializeDoc(doc)
setDirty(false)
setHasDraft(false)
setPublishedDoc(doc)
} catch (err) {
console.error("Publish failed:", err)
alert("Publish failed. Check console.")
} finally {
setPublishing(false)
}
}, [editor, page.id, getCurrentDoc])
const handleDiscard = useCallback(async () => {
if (!editor) return
try {
await pb.collection("pages").update(page.id, { draft: null })
const tiptap = docToTiptap(publishedDoc)
editor.commands.setContent(tiptap)
snapshotRef.current = serializeDoc(publishedDoc)
setDirty(false)
setHasDraft(false)
setMarkdownMode(false)
} catch (err) {
console.error("Discard failed:", err)
alert("Discard failed. Check console.")
}
}, [editor, page.id, publishedDoc])
return (
<div className="editor">
<Toolbar
editor={editor}
onSave={handleSave}
onPublish={handlePublish}
saving={saving}
publishing={publishing}
dirty={dirty}
hasDraft={hasDraft}
markdownMode={markdownMode}
onToggleMarkdown={handleToggleMarkdown}
/>
{hasDraft && <DraftBanner onDiscard={handleDiscard} />}
{markdownMode ? (
<textarea
className="editor-markdown"
value={markdownText}
onChange={e => setMarkdownText(e.target.value)}
/>
) : (
<EditorContent editor={editor} className="editor-content" />
)}
</div>
)
}
@@ -0,0 +1,32 @@
.file-picker-list {
display: flex;
flex-direction: column;
gap: 2px;
}
.file-picker-item {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 12px;
border: none;
background: none;
cursor: pointer;
text-align: left;
border-radius: 4px;
font-size: 0.9rem;
}
.file-picker-item:hover {
background: #f0f4ff;
}
.file-picker-icon {
font-size: 1.1rem;
}
.file-picker-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@@ -0,0 +1,130 @@
import { useEffect, useRef, useState } from "react"
import { pb } from "../pb"
import type { PbFile } from "../types"
import "./FilePicker.css"
export type FilePickerProps = {
onSelect: (fileId: string) => void
onClose: () => void
}
export function FilePicker({ onSelect, onClose }: FilePickerProps) {
const [files, setFiles] = useState<PbFile[]>([])
const [page, setPage] = useState(1)
const [totalPages, setTotalPages] = useState(1)
const [loading, setLoading] = useState(false)
const [uploading, setUploading] = useState(false)
const [tab, setTab] = useState<"browse" | "upload">("browse")
const fileRef = useRef<HTMLInputElement>(null)
useEffect(() => {
let cancelled = false
setLoading(true)
pb.collection("files")
.getList<PbFile>(page, 20, { sort: "-created" })
.then(result => {
if (cancelled) return
setFiles(result.items)
setTotalPages(result.totalPages)
})
.catch(err => {
if (!cancelled) console.error("Failed to load files:", err)
})
.finally(() => {
if (!cancelled) setLoading(false)
})
return () => {
cancelled = true
}
}, [page])
async function handleUpload() {
const file = fileRef.current?.files?.[0]
if (!file) return
setUploading(true)
try {
const record = await pb.collection("files").create<PbFile>({
file,
filename: file.name,
})
onSelect(record.id)
} catch (err) {
console.error("Upload failed:", err)
alert("Upload failed. Check console.")
} finally {
setUploading(false)
}
}
return (
<div
className="picker-overlay"
onClick={onClose}
onKeyDown={e => {
if (e.key === "Escape") onClose()
}}
>
<div
className="picker"
onClick={e => e.stopPropagation()}
onKeyDown={e => {
e.stopPropagation()
}}
>
<div className="picker-header">
<button type="button" className={tab === "browse" ? "active" : ""} onClick={() => setTab("browse")}>
Browse
</button>
<button type="button" className={tab === "upload" ? "active" : ""} onClick={() => setTab("upload")}>
Upload
</button>
<button type="button" className="picker-close" onClick={onClose}>
×
</button>
</div>
{tab === "browse" && (
<div className="picker-browse">
{loading ? (
<div className="picker-loading">Loading...</div>
) : (
<div className="file-picker-list">
{files.map(f => (
<button
type="button"
key={f.id}
className="file-picker-item"
onClick={() => onSelect(f.id)}
>
<span className="file-picker-icon">📎</span>
<span className="file-picker-name">{f.filename}</span>
</button>
))}
</div>
)}
<div className="picker-pagination">
<button type="button" disabled={page <= 1} onClick={() => setPage(p => p - 1)}>
Prev
</button>
<span>
{page} / {totalPages}
</span>
<button type="button" disabled={page >= totalPages} onClick={() => setPage(p => p + 1)}>
Next
</button>
</div>
</div>
)}
{tab === "upload" && (
<div className="picker-upload">
<input type="file" ref={fileRef} />
<button type="button" onClick={handleUpload} disabled={uploading}>
{uploading ? "Uploading..." : "Upload"}
</button>
</div>
)}
</div>
</div>
)
}
@@ -0,0 +1,127 @@
.picker-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.4);
display: flex;
align-items: center;
justify-content: center;
z-index: 100;
}
.picker {
background: white;
border-radius: 8px;
width: 600px;
max-width: 90vw;
max-height: 80vh;
display: flex;
flex-direction: column;
overflow: hidden;
}
.picker-header {
display: flex;
gap: 4px;
padding: 8px;
border-bottom: 1px solid #e0e0e0;
}
.picker-header button {
padding: 4px 12px;
border: 1px solid #ddd;
border-radius: 4px;
background: white;
cursor: pointer;
}
.picker-header button.active {
background: #213547;
color: white;
border-color: #213547;
}
.picker-close {
margin-left: auto !important;
font-size: 1.2rem;
}
.picker-browse {
flex: 1;
overflow-y: auto;
padding: 8px;
}
.picker-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
gap: 8px;
}
.picker-thumb {
border: 2px solid transparent;
border-radius: 4px;
padding: 0;
background: none;
cursor: pointer;
overflow: hidden;
aspect-ratio: 1;
}
.picker-thumb:hover {
border-color: #213547;
}
.picker-thumb img {
width: 100%;
height: 100%;
object-fit: cover;
}
.picker-pagination {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
padding: 8px;
}
.picker-pagination button {
padding: 4px 12px;
border: 1px solid #ddd;
border-radius: 4px;
background: white;
cursor: pointer;
}
.picker-pagination button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.picker-loading {
text-align: center;
padding: 40px;
color: #888;
}
.picker-upload {
display: flex;
flex-direction: column;
gap: 12px;
padding: 20px;
align-items: flex-start;
}
.picker-upload button {
padding: 8px 16px;
border: none;
border-radius: 4px;
background: #213547;
color: white;
cursor: pointer;
}
.picker-upload button:disabled {
opacity: 0.6;
cursor: not-allowed;
}
@@ -0,0 +1,138 @@
import { useEffect, useRef, useState } from "react"
import { pb } from "../pb"
import type { PbImage } from "../types"
import "./ImagePicker.css"
export type ImagePickerProps = {
onSelect: (imageId: string) => void
onClose: () => void
}
export function ImagePicker({ onSelect, onClose }: ImagePickerProps) {
const [images, setImages] = useState<PbImage[]>([])
const [page, setPage] = useState(1)
const [totalPages, setTotalPages] = useState(1)
const [loading, setLoading] = useState(false)
const [uploading, setUploading] = useState(false)
const [tab, setTab] = useState<"browse" | "upload">("browse")
const fileRef = useRef<HTMLInputElement>(null)
useEffect(() => {
let cancelled = false
setLoading(true)
pb.collection("images")
.getList<PbImage>(page, 20, { sort: "-created" })
.then(result => {
if (cancelled) return
setImages(result.items)
setTotalPages(result.totalPages)
})
.catch(err => {
if (!cancelled) console.error("Failed to load images:", err)
})
.finally(() => {
if (!cancelled) setLoading(false)
})
return () => {
cancelled = true
}
}, [page])
async function handleUpload() {
const file = fileRef.current?.files?.[0]
if (!file) return
setUploading(true)
try {
const record = await pb.collection("images").create<PbImage>({
file,
filename: file.name,
width: 0,
height: 0,
alt: "",
caption: "",
blurhash: "",
})
onSelect(record.id)
} catch (err) {
console.error("Upload failed:", err)
alert("Upload failed. Check console.")
} finally {
setUploading(false)
}
}
function getThumbUrl(img: PbImage): string {
return pb.files.getURL(img, img.file, { thumb: "150x150" })
}
return (
<div
className="picker-overlay"
onClick={onClose}
onKeyDown={e => {
if (e.key === "Escape") onClose()
}}
>
<div
className="picker"
onClick={e => e.stopPropagation()}
onKeyDown={e => {
e.stopPropagation()
}}
>
<div className="picker-header">
<button type="button" className={tab === "browse" ? "active" : ""} onClick={() => setTab("browse")}>
Browse
</button>
<button type="button" className={tab === "upload" ? "active" : ""} onClick={() => setTab("upload")}>
Upload
</button>
<button type="button" className="picker-close" onClick={onClose}>
×
</button>
</div>
{tab === "browse" && (
<div className="picker-browse">
{loading ? (
<div className="picker-loading">Loading...</div>
) : (
<div className="picker-grid">
{images.map(img => (
<button
type="button"
key={img.id}
className="picker-thumb"
onClick={() => onSelect(img.id)}
>
<img src={getThumbUrl(img)} alt={img.alt || img.filename} />
</button>
))}
</div>
)}
<div className="picker-pagination">
<button type="button" disabled={page <= 1} onClick={() => setPage(p => p - 1)}>
Prev
</button>
<span>
{page} / {totalPages}
</span>
<button type="button" disabled={page >= totalPages} onClick={() => setPage(p => p + 1)}>
Next
</button>
</div>
</div>
)}
{tab === "upload" && (
<div className="picker-upload">
<input type="file" accept="image/*" ref={fileRef} />
<button type="button" onClick={handleUpload} disabled={uploading}>
{uploading ? "Uploading..." : "Upload"}
</button>
</div>
)}
</div>
</div>
)
}
@@ -0,0 +1,45 @@
.login {
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
}
.login-form {
display: flex;
flex-direction: column;
gap: 12px;
width: 320px;
}
.login-form h1 {
font-size: 1.4rem;
margin-bottom: 8px;
}
.login-form input {
padding: 8px 12px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 1rem;
}
.login-form button {
padding: 8px 12px;
border: none;
border-radius: 4px;
background: #213547;
color: white;
font-size: 1rem;
cursor: pointer;
}
.login-form button:disabled {
opacity: 0.6;
cursor: not-allowed;
}
.login-error {
color: #c00;
font-size: 0.9rem;
}
@@ -0,0 +1,55 @@
import type { FormEvent } from "react"
import { useState } from "react"
import { pb } from "../pb"
import "./Login.css"
export type LoginProps = {
onLogin: () => void
}
export function Login({ onLogin }: LoginProps) {
const [email, setEmail] = useState("")
const [password, setPassword] = useState("")
const [error, setError] = useState("")
const [loading, setLoading] = useState(false)
async function handleSubmit(e: FormEvent) {
e.preventDefault()
setError("")
setLoading(true)
try {
await pb.collection("_superusers").authWithPassword(email, password)
onLogin()
} catch {
setError("Authentication failed")
} finally {
setLoading(false)
}
}
return (
<div className="login">
<form className="login-form" onSubmit={handleSubmit}>
<h1>Hudozka Writer</h1>
{error && <p className="login-error">{error}</p>}
<input
type="email"
placeholder="Email"
value={email}
onChange={e => setEmail(e.target.value)}
required
/>
<input
type="password"
placeholder="Password"
value={password}
onChange={e => setPassword(e.target.value)}
required
/>
<button type="submit" disabled={loading}>
{loading ? "Signing in..." : "Sign in"}
</button>
</form>
</div>
)
}
@@ -0,0 +1,63 @@
.toolbar {
display: flex;
flex-wrap: wrap;
gap: 4px;
padding: 8px 0;
border-bottom: 1px solid #e0e0e0;
margin-bottom: 16px;
position: sticky;
top: 0;
background: white;
z-index: 10;
}
.toolbar-group {
display: flex;
gap: 2px;
}
.toolbar button {
padding: 4px 8px;
border: 1px solid #ddd;
border-radius: 4px;
background: white;
cursor: pointer;
font-size: 0.85rem;
min-width: 32px;
}
.toolbar button:hover {
background: #f0f0f0;
}
.toolbar button.active {
background: #213547;
color: white;
border-color: #213547;
}
.toolbar-actions {
margin-left: auto;
gap: 4px;
}
.toolbar-save-btn {
padding: 4px 16px !important;
}
.toolbar-save-btn:disabled {
opacity: 0.6;
cursor: not-allowed !important;
}
.toolbar-publish-btn {
background: #213547 !important;
color: white !important;
border-color: #213547 !important;
padding: 4px 16px !important;
}
.toolbar-publish-btn:disabled {
opacity: 0.6;
cursor: not-allowed !important;
}
@@ -0,0 +1,161 @@
import type { Editor } from "@tiptap/react"
import "./Toolbar.css"
export type ToolbarProps = {
editor: Editor | null
onSave: () => void
onPublish: () => void
saving: boolean
publishing: boolean
dirty: boolean
hasDraft: boolean
markdownMode: boolean
onToggleMarkdown: () => void
}
export function Toolbar({
editor,
onSave,
onPublish,
saving,
publishing,
dirty,
hasDraft,
markdownMode,
onToggleMarkdown,
}: ToolbarProps) {
if (!editor) return null
const canSave = dirty
const canPublish = dirty || hasDraft
return (
<div className="toolbar">
<div className="toolbar-group">
<button
type="button"
onClick={() => editor.chain().focus().toggleBold().run()}
className={editor.isActive("bold") ? "active" : ""}
title="Bold"
>
B
</button>
<button
type="button"
onClick={() => editor.chain().focus().toggleItalic().run()}
className={editor.isActive("italic") ? "active" : ""}
title="Italic"
>
I
</button>
<button
type="button"
onClick={() => editor.chain().focus().toggleStrike().run()}
className={editor.isActive("strike") ? "active" : ""}
title="Strikethrough"
>
S
</button>
<button
type="button"
onClick={() => editor.chain().focus().toggleCode().run()}
className={editor.isActive("code") ? "active" : ""}
title="Inline code"
>
&lt;/&gt;
</button>
</div>
<div className="toolbar-group">
<button
type="button"
onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}
className={editor.isActive("heading", { level: 1 }) ? "active" : ""}
>
H1
</button>
<button
type="button"
onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}
className={editor.isActive("heading", { level: 2 }) ? "active" : ""}
>
H2
</button>
<button
type="button"
onClick={() => editor.chain().focus().toggleHeading({ level: 3 }).run()}
className={editor.isActive("heading", { level: 3 }) ? "active" : ""}
>
H3
</button>
</div>
<div className="toolbar-group">
<button
type="button"
onClick={() => editor.chain().focus().toggleBulletList().run()}
className={editor.isActive("bulletList") ? "active" : ""}
title="Bullet list"
>
List
</button>
<button
type="button"
onClick={() => editor.chain().focus().toggleOrderedList().run()}
className={editor.isActive("orderedList") ? "active" : ""}
title="Numbered list"
>
1.
</button>
<button
type="button"
onClick={() => editor.chain().focus().toggleBlockquote().run()}
className={editor.isActive("blockquote") ? "active" : ""}
title="Blockquote"
>
&ldquo;
</button>
<button
type="button"
onClick={() => editor.chain().focus().toggleCodeBlock().run()}
className={editor.isActive("codeBlock") ? "active" : ""}
title="Code block"
>
Code
</button>
<button
type="button"
onClick={() => editor.chain().focus().setHorizontalRule().run()}
title="Horizontal rule"
>
---
</button>
</div>
<div className="toolbar-group">
<button
type="button"
onClick={onToggleMarkdown}
className={markdownMode ? "active" : ""}
title="Toggle markdown view"
>
MD
</button>
</div>
<div className="toolbar-group toolbar-actions">
<button type="button" onClick={onSave} disabled={!canSave || saving} className="toolbar-save-btn">
{saving ? "Saving..." : "Save"}
</button>
<button
type="button"
onClick={onPublish}
disabled={!canPublish || publishing}
className="toolbar-publish-btn"
>
{publishing ? "Publishing..." : "Publish"}
</button>
</div>
</div>
)
}
@@ -0,0 +1,28 @@
.slash-command-container {
z-index: 50;
}
.slash-menu {
background: white;
border: 1px solid #ddd;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
padding: 4px 0;
min-width: 160px;
}
.slash-menu-item {
display: block;
width: 100%;
padding: 8px 12px;
border: none;
background: none;
text-align: left;
cursor: pointer;
font-size: 0.9rem;
}
.slash-menu-item:hover,
.slash-menu-item--selected {
background: #f0f4ff;
}
@@ -0,0 +1,264 @@
import { Extension } from "@tiptap/core"
import type { Node as PmNode, ResolvedPos } from "@tiptap/pm/model"
import { Fragment } from "@tiptap/pm/model"
import { PluginKey } from "@tiptap/pm/state"
import type { Editor } from "@tiptap/react"
import type { SuggestionKeyDownProps, SuggestionOptions, SuggestionProps } from "@tiptap/suggestion"
import Suggestion from "@tiptap/suggestion"
import { createRoot } from "react-dom/client"
import { generateBlockId } from "../lib/id"
import "./SlashCommands.css"
type SlashCommandItem = {
label: string
type: string
attrs?: Record<string, unknown>
}
const ITEMS: SlashCommandItem[] = [
{ label: "Text", type: "textBlock" },
{ label: "Image", type: "imageBlock", attrs: { id: "", imageId: "", wide: false, caption: "" } },
{ label: "File", type: "documentBlock", attrs: { id: "", fileId: "", title: "" } },
{ label: "Embed", type: "embedBlock", attrs: { id: "", src: "" } },
{ label: "Card Grid", type: "cardGridBlock", attrs: { id: "", items: "[]" } },
]
const slashCommandsPluginKey = new PluginKey("slashCommands")
function findTextBlockDepth($pos: ResolvedPos): number | null {
for (let d = $pos.depth; d > 0; d--) {
if ($pos.node(d).type.name === "textBlock") {
return d
}
}
return null
}
function SlashMenu({
items,
command,
selectedIndex,
}: {
items: SlashCommandItem[]
command: (item: SlashCommandItem) => void
selectedIndex: number
}) {
if (items.length === 0) return null
return (
<div className="slash-menu">
{items.map((item, index) => (
<button
type="button"
key={item.type}
className={`slash-menu-item${index === selectedIndex ? " slash-menu-item--selected" : ""}`}
onClick={() => command(item)}
>
{item.label}
</button>
))}
</div>
)
}
export const SlashCommands = Extension.create({
name: "slashCommands",
addOptions() {
return {
suggestion: {
char: "/",
pluginKey: slashCommandsPluginKey,
startOfLine: true,
items: ({ query }: { query: string }) => {
return ITEMS.filter(item => item.label.toLowerCase().includes(query.toLowerCase()))
},
render: () => {
let container: HTMLDivElement | null = null
let root: ReturnType<typeof createRoot> | null = null
let selectedIndex = 0
let currentItems: SlashCommandItem[] = []
let currentCommand: ((item: SlashCommandItem) => void) | null = null
function renderMenu() {
if (!root || !currentCommand) return
root.render(
<SlashMenu items={currentItems} command={currentCommand} selectedIndex={selectedIndex} />,
)
}
return {
onStart: (props: SuggestionProps<SlashCommandItem, SlashCommandItem>) => {
container = document.createElement("div")
container.className = "slash-command-container"
document.body.appendChild(container)
root = createRoot(container)
const rect = props.clientRect?.()
if (rect && container) {
container.style.position = "fixed"
container.style.left = `${rect.left}px`
container.style.top = `${rect.bottom + 4}px`
container.style.zIndex = "50"
}
selectedIndex = 0
currentItems = props.items
currentCommand = props.command
renderMenu()
},
onUpdate: (props: SuggestionProps<SlashCommandItem, SlashCommandItem>) => {
if (!root || !container) return
const rect = props.clientRect?.()
if (rect && container) {
container.style.left = `${rect.left}px`
container.style.top = `${rect.bottom + 4}px`
}
currentItems = props.items
currentCommand = props.command
selectedIndex = 0
renderMenu()
},
onExit: () => {
root?.unmount()
container?.remove()
container = null
root = null
},
onKeyDown: (props: SuggestionKeyDownProps) => {
const { key } = props.event
if (key === "Escape") {
root?.unmount()
container?.remove()
container = null
root = null
return true
}
if (key === "ArrowDown") {
selectedIndex = (selectedIndex + 1) % currentItems.length
renderMenu()
return true
}
if (key === "ArrowUp") {
selectedIndex = (selectedIndex - 1 + currentItems.length) % currentItems.length
renderMenu()
return true
}
if (key === "Enter") {
if (currentItems[selectedIndex] && currentCommand) {
currentCommand(currentItems[selectedIndex])
}
return true
}
return false
},
}
},
command: ({
editor,
range,
props,
}: {
editor: Editor
range: { from: number; to: number }
props: SlashCommandItem
}) => {
// Delete the slash command text
editor.chain().focus().deleteRange(range).run()
if (props.type === "textBlock") {
// Already inside a textBlock paragraph — nothing to do
return
}
const { from } = editor.state.selection
const id = generateBlockId()
const newNode = { type: props.type, attrs: { ...props.attrs, id } }
// Check if we're inside a textBlock
const $pos = editor.state.doc.resolve(from)
const textBlockDepth = findTextBlockDepth($pos)
if (textBlockDepth === null) {
// Not inside a textBlock — insert directly
editor.chain().focus().insertContentAt(from, newNode).run()
return
}
// Inside a textBlock — split it and insert the custom block between halves
const textBlockPos = $pos.before(textBlockDepth)
const textBlockNode = editor.state.doc.nodeAt(textBlockPos)
if (!textBlockNode) return
// Find which child contains the cursor
let childOffset = textBlockPos + 1
let splitAfter = -1
for (let i = 0; i < textBlockNode.childCount; i++) {
const child = textBlockNode.child(i)
const childEnd = childOffset + child.nodeSize
if (from >= childOffset && from <= childEnd) {
// If the paragraph is empty (just deleted the slash), split before it
const curChild = textBlockNode.child(i)
if (curChild.content.size === 0 && i > 0) {
splitAfter = i - 1
} else if (curChild.content.size === 0 && i === 0) {
splitAfter = -1 // cursor in empty first child
} else {
splitAfter = i
}
break
}
childOffset = childEnd
}
const { schema } = editor.state
const textBlockType = schema.nodes.textBlock
const fragments: PmNode[] = []
// Build first textBlock (children 0..splitAfter) — skip if empty
if (splitAfter >= 0) {
const children = []
for (let i = 0; i <= splitAfter; i++) {
children.push(textBlockNode.child(i))
}
// Skip if all children are empty paragraphs
const hasContent = children.some(c => c.content.size > 0)
if (hasContent) {
fragments.push(textBlockType.create(null, children))
}
}
// Insert the custom block
fragments.push(schema.nodes[props.type].create({ ...props.attrs, id }))
// Build second textBlock (children after splitAfter) — skip empty
const remaining = []
const startIdx = splitAfter + 1
for (let i = startIdx; i < textBlockNode.childCount; i++) {
remaining.push(textBlockNode.child(i))
}
// Filter out empty paragraphs at the edges
const nonEmpty = remaining.filter(c => c.content.size > 0)
if (nonEmpty.length > 0) {
fragments.push(textBlockType.create(null, remaining))
}
const tr = editor.state.tr
tr.replaceWith(textBlockPos, textBlockPos + textBlockNode.nodeSize, Fragment.from(fragments))
editor.view.dispatch(tr)
},
} satisfies Partial<SuggestionOptions<SlashCommandItem, SlashCommandItem>>,
}
},
addProseMirrorPlugins() {
return [
Suggestion({
editor: this.editor,
...this.options.suggestion,
}),
]
},
})
+16
View File
@@ -0,0 +1,16 @@
:root {
font-family: system-ui, -apple-system, sans-serif;
line-height: 1.5;
color: #213547;
background-color: #ffffff;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
min-height: 100vh;
}
+3
View File
@@ -0,0 +1,3 @@
export function generateBlockId(): string {
return crypto.randomUUID().slice(0, 8)
}
+14
View File
@@ -0,0 +1,14 @@
import Link from "@tiptap/extension-link"
import { MarkdownManager } from "@tiptap/markdown"
import StarterKit from "@tiptap/starter-kit"
let manager: MarkdownManager | null = null
export function getMarkdownManager(): MarkdownManager {
if (!manager) {
manager = new MarkdownManager({
extensions: [StarterKit, Link],
})
}
return manager
}
+168
View File
@@ -0,0 +1,168 @@
import type { JSONContent } from "@tiptap/core"
import type {
DocV1,
DocV1Block,
DocV1BlockCardGrid,
DocV1BlockDocument,
DocV1BlockEmbed,
DocV1BlockImage,
DocV1BlockText,
} from "../types"
import { generateBlockId } from "./id"
import { getMarkdownManager } from "./markdown"
// -- DocV1 -> Tiptap JSON --
function textBlockToTiptap(block: DocV1BlockText): JSONContent {
const manager = getMarkdownManager()
const parsed = manager.parse(block.text)
return {
type: "textBlock",
content: parsed.content ?? [],
}
}
function imageBlockToTiptap(block: DocV1BlockImage): JSONContent {
return {
type: "imageBlock",
attrs: {
id: block.id,
imageId: block.image,
wide: block.wide,
caption: block.caption,
},
}
}
function documentBlockToTiptap(block: DocV1BlockDocument): JSONContent {
return {
type: "documentBlock",
attrs: {
id: block.id,
fileId: block.file,
title: block.title,
},
}
}
function embedBlockToTiptap(block: DocV1BlockEmbed): JSONContent {
return {
type: "embedBlock",
attrs: {
id: block.id,
src: block.src,
},
}
}
function cardGridBlockToTiptap(block: DocV1BlockCardGrid): JSONContent {
return {
type: "cardGridBlock",
attrs: {
id: block.id,
items: JSON.stringify(block.items),
},
}
}
export function docToTiptap(doc: DocV1): JSONContent {
const content: JSONContent[] = []
for (const block of doc.blocks) {
switch (block.type) {
case "text":
content.push(textBlockToTiptap(block))
break
case "image":
content.push(imageBlockToTiptap(block))
break
case "document":
content.push(documentBlockToTiptap(block))
break
case "embed":
content.push(embedBlockToTiptap(block))
break
case "card-grid":
content.push(cardGridBlockToTiptap(block))
break
}
}
return {
type: "doc",
content,
}
}
// -- Tiptap JSON -> DocV1 --
function textNodesToMarkdown(nodes: JSONContent[]): string {
const manager = getMarkdownManager()
const doc: JSONContent = { type: "doc", content: nodes }
return manager.serialize(doc)
}
export function tiptapToDoc(content: JSONContent[]): DocV1 {
const blocks: DocV1Block[] = []
for (const node of content) {
switch (node.type) {
case "textBlock": {
const text = textNodesToMarkdown(node.content ?? [])
if (text.trim()) {
blocks.push({
type: "text",
id: generateBlockId(),
text,
})
}
break
}
case "imageBlock": {
const attrs = node.attrs ?? {}
blocks.push({
type: "image",
id: attrs.id ?? generateBlockId(),
image: attrs.imageId ?? "",
wide: attrs.wide ?? false,
caption: attrs.caption ?? "",
})
break
}
case "documentBlock": {
const attrs = node.attrs ?? {}
blocks.push({
type: "document",
id: attrs.id ?? generateBlockId(),
file: attrs.fileId ?? "",
title: attrs.title ?? "",
})
break
}
case "embedBlock": {
const attrs = node.attrs ?? {}
blocks.push({
type: "embed",
id: attrs.id ?? generateBlockId(),
src: attrs.src ?? "",
})
break
}
case "cardGridBlock": {
const attrs = node.attrs ?? {}
blocks.push({
type: "card-grid",
id: attrs.id ?? generateBlockId(),
items: JSON.parse(attrs.items ?? "[]"),
})
break
}
}
}
return { version: 1, blocks }
}
+13
View File
@@ -0,0 +1,13 @@
import { StrictMode } from "react"
import { createRoot } from "react-dom/client"
import { App } from "./App"
import "./index.css"
const rootElement = document.getElementById("root")
if (!rootElement) throw new Error("Root element #root not found")
createRoot(rootElement).render(
<StrictMode>
<App />
</StrictMode>,
)
@@ -0,0 +1,90 @@
import { mergeAttributes, Node } from "@tiptap/core"
import type { NodeViewProps } from "@tiptap/react"
import { NodeViewWrapper, ReactNodeViewRenderer } from "@tiptap/react"
import { useEffect, useMemo, useState } from "react"
import { BlockActions } from "../components/BlockActions"
import { BlockInsert } from "../components/BlockInsert"
import { pb } from "../pb"
import type { PbPage } from "../types"
type ResolvedItem = {
page: string
title: string | null
}
function CardGridBlockView({ node, editor, getPos }: NodeViewProps) {
const items = useMemo<Array<{ page: string }>>(() => JSON.parse(node.attrs.items || "[]"), [node.attrs.items])
const [resolved, setResolved] = useState<ResolvedItem[]>([])
const [loading, setLoading] = useState(false)
useEffect(() => {
if (items.length === 0) {
setResolved([])
return
}
setLoading(true)
Promise.all(
items.map(async item => {
try {
const page = await pb.collection("pages").getOne<PbPage>(item.page)
return { page: item.page, title: page.title }
} catch {
return { page: item.page, title: null }
}
}),
).then(results => {
setResolved(results)
setLoading(false)
})
}, [items])
return (
<>
<NodeViewWrapper className="node-view-block node-readonly-block">
<BlockActions editor={editor} getPos={getPos} />
<div className="node-view-content">
<div className="node-block-label">Card Grid ({items.length})</div>
{loading ? (
<div className="node-block-info">Loading...</div>
) : (
<ul className="node-cardgrid-list">
{resolved.map(item => (
<li key={item.page} className="node-cardgrid-item">
{item.title ?? item.page}
</li>
))}
</ul>
)}
</div>
</NodeViewWrapper>
<BlockInsert editor={editor} getPos={getPos} />
</>
)
}
export const CardGridBlock = Node.create({
name: "cardGridBlock",
group: "block",
atom: true,
draggable: true,
addAttributes() {
return {
id: { default: null },
items: { default: "[]" },
}
},
parseHTML() {
return [{ tag: "div[data-card-grid-block]" }]
},
renderHTML({ HTMLAttributes }) {
return ["div", mergeAttributes(HTMLAttributes, { "data-card-grid-block": "" })]
},
addNodeView() {
return ReactNodeViewRenderer(CardGridBlockView)
},
})
@@ -0,0 +1,103 @@
import { mergeAttributes, Node } from "@tiptap/core"
import type { NodeViewProps } from "@tiptap/react"
import { NodeViewWrapper, ReactNodeViewRenderer } from "@tiptap/react"
import { useEffect, useState } from "react"
import { BlockActions } from "../components/BlockActions"
import { BlockInsert } from "../components/BlockInsert"
import { FilePicker } from "../components/FilePicker"
import { pb } from "../pb"
import type { PbFile } from "../types"
function DocumentBlockView({ node, updateAttributes, editor, getPos }: NodeViewProps) {
const { fileId, title } = node.attrs
const [filename, setFilename] = useState<string | null>(null)
const [showPicker, setShowPicker] = useState(false)
useEffect(() => {
if (!fileId) return
pb.collection("files")
.getOne<PbFile>(fileId)
.then(f => {
setFilename(f.filename)
})
.catch(() => {
setFilename(null)
})
}, [fileId])
function handleSelect(newFileId: string) {
updateAttributes({ fileId: newFileId })
setShowPicker(false)
}
return (
<>
<NodeViewWrapper className="node-view-block node-document-block">
<BlockActions editor={editor} getPos={getPos} />
<div className="node-view-content">
<div className="node-block-label">File</div>
{fileId ? (
<button
type="button"
className="node-document-file"
onClick={() => setShowPicker(true)}
style={{ cursor: "pointer" }}
>
📎 {filename ?? fileId}
</button>
) : (
<button
type="button"
className="node-document-placeholder"
onClick={() => setShowPicker(true)}
style={{ cursor: "pointer" }}
>
Click to select file
</button>
)}
<div className="node-document-controls">
<input
type="text"
placeholder="Title"
value={title || ""}
onChange={e => updateAttributes({ title: e.target.value })}
className="node-document-title"
/>
<button type="button" className="node-image-pick-btn" onClick={() => setShowPicker(true)}>
Pick
</button>
</div>
{showPicker && <FilePicker onSelect={handleSelect} onClose={() => setShowPicker(false)} />}
</div>
</NodeViewWrapper>
<BlockInsert editor={editor} getPos={getPos} />
</>
)
}
export const DocumentBlock = Node.create({
name: "documentBlock",
group: "block",
atom: true,
draggable: true,
addAttributes() {
return {
id: { default: null },
fileId: { default: "" },
title: { default: "" },
}
},
parseHTML() {
return [{ tag: "div[data-document-block]" }]
},
renderHTML({ HTMLAttributes }) {
return ["div", mergeAttributes(HTMLAttributes, { "data-document-block": "" })]
},
addNodeView() {
return ReactNodeViewRenderer(DocumentBlockView)
},
})
@@ -0,0 +1,48 @@
import { mergeAttributes, Node } from "@tiptap/core"
import type { NodeViewProps } from "@tiptap/react"
import { NodeViewWrapper, ReactNodeViewRenderer } from "@tiptap/react"
import { BlockActions } from "../components/BlockActions"
import { BlockInsert } from "../components/BlockInsert"
function EmbedBlockView({ node, editor, getPos }: NodeViewProps) {
return (
<>
<NodeViewWrapper className="node-view-block node-readonly-block">
<BlockActions editor={editor} getPos={getPos} />
<div className="node-view-content">
<div className="node-block-label">Embed</div>
<div className="node-block-info">
<code>{node.attrs.src}</code>
</div>
</div>
</NodeViewWrapper>
<BlockInsert editor={editor} getPos={getPos} />
</>
)
}
export const EmbedBlock = Node.create({
name: "embedBlock",
group: "block",
atom: true,
draggable: true,
addAttributes() {
return {
id: { default: null },
src: { default: "" },
}
},
parseHTML() {
return [{ tag: "div[data-embed-block]" }]
},
renderHTML({ HTMLAttributes }) {
return ["div", mergeAttributes(HTMLAttributes, { "data-embed-block": "" })]
},
addNodeView() {
return ReactNodeViewRenderer(EmbedBlockView)
},
})
@@ -0,0 +1,113 @@
import { mergeAttributes, Node } from "@tiptap/core"
import type { NodeViewProps } from "@tiptap/react"
import { NodeViewWrapper, ReactNodeViewRenderer } from "@tiptap/react"
import { useEffect, useState } from "react"
import { BlockActions } from "../components/BlockActions"
import { BlockInsert } from "../components/BlockInsert"
import { ImagePicker } from "../components/ImagePicker"
import { pb } from "../pb"
import type { PbImage } from "../types"
function ImageBlockView({ node, updateAttributes, editor, getPos }: NodeViewProps) {
const { imageId, wide, caption } = node.attrs
const [thumbnail, setThumbnail] = useState<string | null>(null)
const [showPicker, setShowPicker] = useState(false)
useEffect(() => {
if (!imageId) return
pb.collection("images")
.getOne<PbImage>(imageId)
.then(img => {
const url = pb.files.getURL(img, img.file, { thumb: "300x200" })
setThumbnail(url)
})
.catch(() => {
setThumbnail(null)
})
}, [imageId])
function handleSelect(newImageId: string) {
updateAttributes({ imageId: newImageId })
setShowPicker(false)
}
return (
<>
<NodeViewWrapper className="node-view-block node-image-block">
<BlockActions editor={editor} getPos={getPos} />
<div className="node-view-content">
<div className="node-block-label">Image</div>
{thumbnail ? (
<button
type="button"
className="node-image-thumb-button"
onClick={() => setShowPicker(true)}
style={{ cursor: "pointer", padding: 0, border: 0, background: "none" }}
>
<img src={thumbnail} alt={caption || "image"} className="node-image-thumb" />
</button>
) : (
<button
type="button"
className="node-image-placeholder"
onClick={() => setShowPicker(true)}
style={{ cursor: "pointer" }}
>
{imageId ? "Loading..." : "Click to select image"}
</button>
)}
<div className="node-image-controls">
<label>
<input
type="checkbox"
checked={wide}
onChange={e => updateAttributes({ wide: e.target.checked })}
/>
Wide
</label>
<input
type="text"
placeholder="Caption"
value={caption || ""}
onChange={e => updateAttributes({ caption: e.target.value })}
className="node-image-caption"
/>
<button type="button" className="node-image-pick-btn" onClick={() => setShowPicker(true)}>
Pick
</button>
</div>
{showPicker && <ImagePicker onSelect={handleSelect} onClose={() => setShowPicker(false)} />}
</div>
</NodeViewWrapper>
<BlockInsert editor={editor} getPos={getPos} />
</>
)
}
export const ImageBlock = Node.create({
name: "imageBlock",
group: "block",
atom: true,
draggable: true,
addAttributes() {
return {
id: { default: null },
imageId: { default: "" },
wide: { default: false },
caption: { default: "" },
}
},
parseHTML() {
return [{ tag: "div[data-image-block]" }]
},
renderHTML({ HTMLAttributes }) {
return ["div", mergeAttributes(HTMLAttributes, { "data-image-block": "" })]
},
addNodeView() {
return ReactNodeViewRenderer(ImageBlockView)
},
})
@@ -0,0 +1,37 @@
import { mergeAttributes, Node } from "@tiptap/core"
import type { NodeViewProps } from "@tiptap/react"
import { NodeViewContent, NodeViewWrapper, ReactNodeViewRenderer } from "@tiptap/react"
import { BlockActions } from "../components/BlockActions"
import { BlockInsert } from "../components/BlockInsert"
function TextBlockView({ editor, getPos }: NodeViewProps) {
return (
<>
<NodeViewWrapper className="node-view-block node-text-block">
<BlockActions editor={editor} getPos={getPos} />
<NodeViewContent className="node-view-content" />
</NodeViewWrapper>
<BlockInsert editor={editor} getPos={getPos} />
</>
)
}
export const TextBlock = Node.create({
name: "textBlock",
group: "block",
content: "(paragraph | heading | bulletList | orderedList | blockquote | codeBlock | horizontalRule)+",
draggable: true,
defining: true,
parseHTML() {
return [{ tag: "div[data-text-block]" }]
},
renderHTML({ HTMLAttributes }) {
return ["div", mergeAttributes(HTMLAttributes, { "data-text-block": "" }), 0]
},
addNodeView() {
return ReactNodeViewRenderer(TextBlockView)
},
})
@@ -0,0 +1,7 @@
import { Node } from "@tiptap/core"
export const WriterDocument = Node.create({
name: "doc",
topNode: true,
content: "(textBlock | imageBlock | documentBlock | embedBlock | cardGridBlock)+",
})
+6
View File
@@ -0,0 +1,6 @@
export { CardGridBlock } from "./CardGridBlock"
export { DocumentBlock } from "./DocumentBlock"
export { EmbedBlock } from "./EmbedBlock"
export { ImageBlock } from "./ImageBlock"
export { TextBlock } from "./TextBlock"
export { WriterDocument } from "./WriterDocument"
+109
View File
@@ -0,0 +1,109 @@
.node-block-label {
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.05em;
color: #888;
margin-bottom: 4px;
}
.node-image-block > .node-view-content,
.node-readonly-block > .node-view-content,
.node-document-block > .node-view-content {
border: 1px solid #e0e0e0;
border-radius: 6px;
padding: 12px;
background: #fafafa;
}
.node-image-thumb {
max-width: 100%;
max-height: 200px;
border-radius: 4px;
object-fit: cover;
}
.node-image-placeholder {
height: 100px;
display: flex;
align-items: center;
justify-content: center;
background: #f0f0f0;
border-radius: 4px;
color: #888;
}
.node-image-controls {
display: flex;
gap: 12px;
align-items: center;
margin-top: 8px;
}
.node-image-caption {
flex: 1;
padding: 4px 8px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 0.9rem;
}
.node-block-info {
display: flex;
gap: 8px;
align-items: center;
}
.node-block-info code {
font-size: 0.8rem;
color: #666;
}
.node-image-pick-btn {
padding: 2px 8px;
border: 1px solid #ddd;
border-radius: 4px;
background: white;
cursor: pointer;
font-size: 0.85rem;
}
.node-document-file {
padding: 8px;
background: #f0f0f0;
border-radius: 4px;
font-size: 0.9rem;
}
.node-document-placeholder {
padding: 8px;
background: #f0f0f0;
border-radius: 4px;
color: #888;
text-align: center;
}
.node-document-controls {
display: flex;
gap: 12px;
align-items: center;
margin-top: 8px;
}
.node-document-title {
flex: 1;
padding: 4px 8px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 0.9rem;
}
.node-cardgrid-list {
margin: 4px 0 0;
padding-left: 20px;
font-size: 0.9rem;
}
.node-cardgrid-item {
color: #444;
line-height: 1.6;
}
+7
View File
@@ -0,0 +1,7 @@
import PocketBase from "pocketbase"
// Default to same origin; override via env for dev
const url = import.meta.env.VITE_PB_URL ?? "http://127.0.0.1:8090"
export const pb = new PocketBase(url)
pb.autoCancellation(false)
+85
View File
@@ -0,0 +1,85 @@
// -- PocketBase record base --
export type PbRecord = {
id: string
collectionId: string
collectionName: string
created: string
updated: string
}
// -- PocketBase collection types --
export type PbImage = PbRecord & {
file: string
filename: string
width: number
height: number
blurhash: string
alt: string
caption: string
}
export type PbFile = PbRecord & {
file: string
filename: string
}
export type PbPage = PbRecord & {
title: string
slug: string
excerpt: string
date: string
cover: string
doc: DocV1
tags: string[]
published: boolean
draft: DocV1 | null
}
// -- DocV1 document format --
export type DocV1BlockText = {
type: "text"
id: string
text: string
}
export type DocV1BlockImage = {
type: "image"
id: string
image: string
wide: boolean
caption: string
}
export type DocV1BlockDocument = {
type: "document"
id: string
file: string
title: string
}
export type DocV1BlockEmbed = {
type: "embed"
id: string
src: string
}
export type DocV1BlockCardGridItem = {
page: string
layout: "small" | "medium" | "big"
}
export type DocV1BlockCardGrid = {
type: "card-grid"
id: string
items: DocV1BlockCardGridItem[]
}
export type DocV1Block = DocV1BlockText | DocV1BlockImage | DocV1BlockDocument | DocV1BlockEmbed | DocV1BlockCardGrid
export type DocV1 = {
version: 1
blocks: DocV1Block[]
}
+1
View File
@@ -0,0 +1 @@
/// <reference types="vite/client" />
+13
View File
@@ -0,0 +1,13 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"allowImportingTsExtensions": true,
"isolatedModules": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src", "vite.config.ts"]
}
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite"
import react from "@vitejs/plugin-react"
export default defineConfig({
plugins: [react()],
})
+5
View File
@@ -0,0 +1,5 @@
modules
.vercel
.next
.github
node_modules
+3
View File
@@ -0,0 +1,3 @@
APP_CARD_DEFAULT_IMAGE=https://art.shlisselburg.org/static/img/main.jpg
NEXT_PUBLIC_YMETRIKA_ACCOUNT=XXX
POCKETBASE_URL=http://127.0.0.1:8090
+1
View File
@@ -0,0 +1 @@
POCKETBASE_URL=http://127.0.0.1:8090
+59
View File
@@ -0,0 +1,59 @@
FROM node:24.12.0-alpine AS base
# Install dependencies only when needed
FROM base AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
# Copy workspace manifests (root + every workspace) to leverage npm ci caching.
COPY package.json package-lock.json ./
COPY apps/hudozka/package.json ./apps/hudozka/
COPY apps/hudozka-writer/package.json ./apps/hudozka-writer/
COPY apps/migrate-to-pocketbase/package.json ./apps/migrate-to-pocketbase/
COPY packages/ ./packages/
RUN npm ci
RUN npm install --os=linux --libc=musl --cpu=x64 sharp --workspace apps/hudozka
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1
RUN npm run build -w apps/hudozka
# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder --chown=nextjs:nodejs /app/apps/hudozka/public ./apps/hudozka/public
# Set the correct permission for prerender cache
RUN mkdir -p apps/hudozka/.next
RUN chown nextjs:nodejs apps/hudozka/.next
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/apps/hudozka/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/apps/hudozka/.next/static ./apps/hudozka/.next/static
USER nextjs
EXPOSE 3000
ENV PORT=3000
# server.js is created by next build from the standalone output
# https://nextjs.org/docs/pages/api-reference/next-config-js/output
ENV HOSTNAME="0.0.0.0"
WORKDIR /app/apps/hudozka
CMD ["node", "server.js"]
+6
View File
@@ -0,0 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+18
View File
@@ -0,0 +1,18 @@
import type { NextConfig } from "next"
import path from "node:path"
const config: NextConfig = {
output: "standalone",
outputFileTracingRoot: path.join(process.cwd(), "../../"),
trailingSlash: false,
images: {
unoptimized: true,
remotePatterns: [
{ hostname: "hudozka.shlisselburg.org" },
{ hostname: "images.weserv.nl" },
{ hostname: "127.0.0.1" },
],
},
}
export default config
+43
View File
@@ -0,0 +1,43 @@
{
"name": "hudozka",
"private": true,
"version": "7.0.0",
"type": "module",
"description": "",
"scripts": {
"start": "next start",
"dev": "next dev --turbo",
"build": "next build",
"lint": "biome check",
"format": "biome check --write",
"test": "vitest run"
},
"repository": {
"type": "git",
"url": "https://github.com/tmshv/hudozka"
},
"author": "Roman Timashev",
"license": "ISC",
"dependencies": {
"@hudozka/hooks": "*",
"@hudozka/text": "*",
"@hudozka/ui": "*",
"@hudozka/utils": "*",
"@radix-ui/react-navigation-menu": "^1.2.0",
"@radix-ui/react-tooltip": "^1.2.0",
"classnames": "^2.5.0",
"dangerously-set-html-content": "^1.1.0",
"next": "^16.2.6",
"pocketbase": "^0.26.0",
"react": "^19.2.0",
"react-dom": "^19.2.0",
"react-icons": "^5.5.0",
"sharp": "^0.34.0",
"valtio": "^2.3.0"
},
"overrides": {
"dangerously-set-html-content": {
"react": "$react"
}
}
}
File renamed without changes.
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 MiB

File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,3 @@
export default function Loading() {
return <div>loading...</div>
}
+71
View File
@@ -0,0 +1,71 @@
import { tail } from "@hudozka/utils"
import type { Metadata } from "next"
import { notFound } from "next/navigation"
import { App } from "@/components/App"
import { PageContent } from "@/components/PageContent"
import { buildMetadata, MetaBuilder } from "@/lib/meta"
import { getPageBySlug, getUrls } from "@/remote/api"
export const revalidate = 30
export const dynamicParams = true
export async function generateStaticParams() {
const urls = await getUrls()
return urls.map(path => ({
slug: tail(path.split("/")),
}))
}
type Props = {
params: Promise<{ slug: string[] }>
}
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { slug } = await params
const slugPath = `/${slug.join("/")}`
const page = await getPageBySlug(slugPath)
if (!page) {
return {}
}
const m = new MetaBuilder()
.setImage(page.cover)
.setTitle(page.title)
.setDescription(page.description ?? undefined)
.build()
return buildMetadata(m)
}
export default async function SlugPage({ params }: Props) {
const { slug } = await params
const slugPath = `/${slug.join("/")}`
const page = await getPageBySlug(slugPath)
if (!page) {
notFound()
}
const breadcrumbSize = page.breadcrumb?.length ?? 0
const breadcrumbs = breadcrumbSize < 2 ? [] : (page.breadcrumb ?? [])
return (
<App
contentStyle={{
marginTop: "var(--size-l)",
marginBottom: "var(--size-xl)",
}}
breadcrumbs={breadcrumbs}
>
<PageContent
tags={page.tags}
date={page.date}
tokens={page.tokens}
documentSignature={{
date: "20.01.2021г.",
person: "Тимашева Марина Геннадьевна",
position: "Директор",
signature: "0ac4ea89753a4ba9893799442325fb41",
}}
/>
</App>
)
}
+23
View File
@@ -0,0 +1,23 @@
import { NextResponse } from "next/server"
import { siteUrl } from "@/const"
import { getRecentPages } from "@/remote/api"
export async function GET() {
const pages = await getRecentPages()
const feed = {
version: "https://jsonfeed.org/version/1.1",
title: "Шлиссельбургская ДХШ",
home_page_url: siteUrl,
feed_url: `${siteUrl}/feed.json`,
items: pages.map(page => ({
id: `${siteUrl}${page.url}`,
url: `${siteUrl}${page.url}`,
title: page.title,
date_published: new Date(page.date).toISOString(),
summary: page.excerpt,
})),
}
return NextResponse.json(feed)
}
+72
View File
@@ -0,0 +1,72 @@
import "src/style/style.css"
import "src/style/content.css"
import "src/style/article.css"
import "src/style/marker/marker-table.css"
import "src/style/kazimir/video.css"
import type { Metadata, Viewport } from "next"
import { Roboto } from "next/font/google"
import Script from "next/script"
import { YMetrika } from "@/components/YMetrika"
const roboto = Roboto({
weight: ["300", "900"],
subsets: ["cyrillic", "latin"],
display: "swap",
})
export const metadata: Metadata = {
verification: {
google: ["8BxOTw-Q02DS2KAdcGcnIMwiPZ58DVB18XpOfRibCcg", "A-TEemUw4hHpULUDCd6xhxfHnyRbgKtss90JGKXnSpw"],
other: {
"yandex-verification": "643c7dac144b9dac",
"msvalidate.01": "E878301FE3E3F12D233A6B1156889601",
"proculture-verification": "79110940fd847c3cfe52392ed68f3210",
},
},
icons: {
icon: { url: "/static/graphics/favicon-32.png", type: "image/png" },
apple: [
{ url: "/static/graphics/favicon-57.png", sizes: "57x57" },
{ url: "/static/graphics/favicon-72.png", sizes: "72x72" },
{ url: "/static/graphics/favicon-114.png", sizes: "114x114" },
{ url: "/static/graphics/favicon-144.png", sizes: "144x144" },
],
},
other: {
"apple-mobile-web-app-capable": "yes",
referrer: "unsafe-url",
},
alternates: {
types: {
"application/feed+json": "/feed.json",
},
},
}
export const viewport: Viewport = {
width: "device-width",
maximumScale: 1,
themeColor: [
{ media: "(prefers-color-scheme: light)", color: "white" },
{ media: "(prefers-color-scheme: dark)", color: "hsl(240, 10%, 10%)" },
],
}
export const revalidate = 30
export default async function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="ru" className={roboto.className}>
<head>
{process.env.NEXT_PUBLIC_YMETRIKA_ACCOUNT && (
<YMetrika account={Number(process.env.NEXT_PUBLIC_YMETRIKA_ACCOUNT)} />
)}
</head>
<body>
{children}
<Script src="https://culturaltracking.ru/static/js/spxl.js?pixelId=27154" data-pixel-id="27154" />
</body>
</html>
)
}
+10
View File
@@ -0,0 +1,10 @@
import { App } from "@/components/App"
import { NotFound } from "@/components/NotFound"
export default function NotFoundPage() {
return (
<App>
<NotFound />
</App>
)
}
+23
View File
@@ -0,0 +1,23 @@
import type { Metadata } from "next"
import { App } from "@/components/App"
import { HomeContent } from "@/components/HomeContent"
import { buildMetadata, MetaBuilder } from "@/lib/meta"
import { getHomeCards } from "@/remote/api"
export const revalidate = 30
export async function generateMetadata(): Promise<Metadata> {
const title = "Шлиссельбургская ДХШ"
const m = new MetaBuilder().setTitle(title).setData({ url: "/" }).build()
return buildMetadata(m)
}
export default async function HomePage() {
const items = await getHomeCards()
return (
<App showAuthor>
<HomeContent items={items} />
</App>
)
}
+13
View File
@@ -0,0 +1,13 @@
import type { MetadataRoute } from "next"
import { siteUrl } from "@/const"
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: "*",
allow: "/",
},
host: siteUrl,
sitemap: `${siteUrl}/sitemap.xml`,
}
}
+34
View File
@@ -0,0 +1,34 @@
import type { MetadataRoute } from "next"
import { siteUrl } from "@/const"
import { getAllTagSlugs, getUrls } from "@/remote/api"
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const [urls, tagSlugs] = await Promise.all([getUrls(), getAllTagSlugs()])
const staticPages: MetadataRoute.Sitemap = [
{
url: siteUrl,
changeFrequency: "daily",
},
{
url: `${siteUrl}/collective`,
changeFrequency: "daily",
},
{
url: `${siteUrl}/tags`,
changeFrequency: "weekly",
},
]
const dynamicPages: MetadataRoute.Sitemap = urls.map(path => ({
url: `${siteUrl}${path}`,
changeFrequency: "daily",
}))
const tagPages: MetadataRoute.Sitemap = tagSlugs.map(slug => ({
url: `${siteUrl}/tags/${slug}`,
changeFrequency: "weekly",
}))
return [...staticPages, ...dynamicPages, ...tagPages]
}
+98
View File
@@ -0,0 +1,98 @@
import { Title } from "@hudozka/ui"
import type { Metadata } from "next"
import { notFound } from "next/navigation"
import { App } from "@/components/App"
import { PageGrid } from "@/components/PageGrid"
import { Pagination } from "@/components/Pagination"
import { menu } from "@/const"
import { buildMetadata, MetaBuilder } from "@/lib/meta"
import { getAllTagSlugs, getPagesByTag } from "@/remote/api"
export const revalidate = 30
export const dynamicParams = true
const PER_PAGE = 24
export async function generateStaticParams() {
const slugs = await getAllTagSlugs()
return slugs.map(slug => ({ slug }))
}
type Props = {
params: Promise<{ slug: string }>
searchParams: Promise<{ page?: string }>
}
function parsePage(value: string | undefined): number {
const n = Number.parseInt(value ?? "1", 10)
return Number.isFinite(n) && n >= 1 ? n : 1
}
export async function generateMetadata({ params, searchParams }: Props): Promise<Metadata> {
const [{ slug }, sp] = await Promise.all([params, searchParams])
const page = parsePage(sp.page)
const listing = await getPagesByTag(slug, page, PER_PAGE)
if (!listing) {
return {}
}
const titleBase = `${listing.tag.name} — метка`
const title = page > 1 ? `${titleBase}, страница ${page}` : titleBase
const meta = new MetaBuilder().setTitle(title).setDescription(`Записи с меткой «${listing.tag.name}».`).build()
const metadata = buildMetadata(meta)
if (page > 1) {
return { ...metadata, robots: { index: false, follow: true } }
}
return metadata
}
export default async function TagPage({ params, searchParams }: Props) {
const [{ slug }, sp] = await Promise.all([params, searchParams])
const page = parsePage(sp.page)
const listing = await getPagesByTag(slug, page, PER_PAGE)
if (!listing) {
notFound()
}
const totalPages = Math.max(1, Math.ceil(listing.total / listing.perPage))
if (listing.total > 0 && page > totalPages) {
notFound()
}
const breadcrumbs = [
{ name: menu[0].name, href: "/" },
{ name: "Метки", href: "/tags" },
{ name: listing.tag.name, href: listing.tag.href },
]
return (
<App
contentStyle={{
marginTop: "var(--size-l)",
marginBottom: "var(--size-xl)",
}}
breadcrumbs={breadcrumbs}
>
<Title level={1} style={{ marginBottom: "var(--size-l)" }}>
{listing.tag.name}
</Title>
{listing.items.length === 0 ? (
<p>Пока нет записей.</p>
) : (
<>
<PageGrid items={listing.items} />
<Pagination
basePath={listing.tag.href}
page={listing.page}
total={listing.total}
perPage={listing.perPage}
/>
</>
)}
</App>
)
}
+38
View File
@@ -0,0 +1,38 @@
import { Title } from "@hudozka/ui"
import type { Metadata } from "next"
import { App } from "@/components/App"
import { TagsIndex } from "@/components/TagsIndex"
import { menu } from "@/const"
import { buildMetadata, MetaBuilder } from "@/lib/meta"
import { getAllTagsWithCounts } from "@/remote/api"
export const revalidate = 30
export async function generateMetadata(): Promise<Metadata> {
const meta = new MetaBuilder().setTitle("Метки").setDescription("Список всех меток сайта.").build()
return buildMetadata(meta)
}
export default async function TagsIndexPage() {
const tags = await getAllTagsWithCounts()
const breadcrumbs = [
{ name: menu[0].name, href: "/" },
{ name: "Метки", href: "/tags" },
]
return (
<App
contentStyle={{
marginTop: "var(--size-l)",
marginBottom: "var(--size-xl)",
}}
breadcrumbs={breadcrumbs}
>
<Title level={1} style={{ marginBottom: "var(--size-l)" }}>
Метки
</Title>
<TagsIndex items={tags} />
</App>
)
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 456 files, more files were not shown because too many files have changed in this diff. Show more