714 Commits
Author SHA1 Message Date
tmshv 976170c391 Merge branch 'master' of github.com:tmshv/hudozka
Build Frontend and Deploy / Build Image (push) Failing after 12s
2026-09-25 16:08:01 +03:00
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
dependabot[bot] 978674a0d6 Bump postcss and next (#314)
Bumps [postcss](https://github.com/postcss/postcss) to 8.5.23 and updates ancestor dependency [next](https://github.com/vercel/next.js). These dependencies need to be updated together.


Updates `postcss` from 8.5.15 to 8.5.23
- [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.15...8.5.23)

Updates `next` from 16.2.6 to 16.3.0
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/compare/v16.2.6...v16.3.0)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.23
  dependency-type: indirect
- dependency-name: next
  dependency-version: 16.3.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-08-05 13:07:43 +03:00
dependabot[bot] cbebbef60a Bump vite from 8.0.10 to 8.0.16 (#302)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.10 to 8.0.16.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.0.16/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.0.16
  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-06-16 13:21:07 +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 79929 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 private*.json
/node_modules node_modules
/bower_components /bower_components
/modules/hudozka-api-v1/lib /modules/hudozka-api-v1/lib
/build /build
/out /out
dist dist
.next
**/env
**/venv **/venv
**/__pycache__ **/__pycache__
**/*.pyc **/*.pyc
/coverage /coverage
**/.vscode **/.vscode
*.log *.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) # [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) 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 ```bash
$ docker build -t tmshv/hudozka . npm install
``` ```
### How to run 2. Start development server
#### Add .env file
```
MONGO_HUDOZKA_PASSWORD=<strong_password>
HUDOZKA_DB_URI=mongodb://hudozka:strong_password@mongo:27017/hudozka?authSource=admin
```
#### Run
```bash ```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 ## Accessibility
DB=hudozka The site includes an accessibility panel with configurable:
HOST=<ip_address> - Font size (8-48pt)
USER=<mongo_user> - Color schemes (5 presets: black-on-white, white-on-black, blue-on-blue, brown-on-yellow, green-on-brown)
PWD=<mongo_password> - Line height and letter spacing
mongodump -d ${DB} --gzip --archive | mongorestore -h ${HOST} -u ${USER} -p ${PWD} -d ${DB} --gzip --archive - Image toggling
``` - Font family (serif/sans-serif)
## Contributors ## Contributors
- Roman Timashev ([roman@tmshv.ru](mailto:roman@tmshv.ru)) - 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.16"
}
}
+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.3.0",
"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.
File renamed without changes.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 3.1 MiB

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 MiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 772 KiB

After

Width:  |  Height:  |  Size: 772 KiB

File renamed without changes.
File renamed without changes.
File renamed without changes.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 113 KiB

@@ -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.

Before

Width:  |  Height:  |  Size: 312 B

After

Width:  |  Height:  |  Size: 312 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 618 B

After

Width:  |  Height:  |  Size: 618 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 611 B

After

Width:  |  Height:  |  Size: 611 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 611 B

After

Width:  |  Height:  |  Size: 611 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 618 B

After

Width:  |  Height:  |  Size: 618 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 131 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 491 B

After

Width:  |  Height:  |  Size: 491 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 470 B

After

Width:  |  Height:  |  Size: 470 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 470 B

After

Width:  |  Height:  |  Size: 470 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 491 B

After

Width:  |  Height:  |  Size: 491 B

Loaded 100 of 456 files, more files were not shown because too many files have changed in this diff. Show more