From 71d7366b4e01b2aa444267c5e150bea74f58f892 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Sun, 25 Oct 2026 14:27:47 +0100 Subject: [PATCH] docs: rebuild the Content Engine and developer docs as step-by-step paths - Turn the Content Engine docs into a beginner path, split the feature guides and complete the public frontend workflows - Rebuild the developer docs around a site-notes learning path and correct CLI, configuration, routing, fetcher, cache, i18n, AI, search, auth, SSO, passkeys, captcha, moderation, cron, notifications, websocket and updates - Replace the example plugin with the newsroom plugin and move every example-plugin guide onto it - Call the VitNode API with fetcher instead of raw fetch in docs - Stop ending pages with a Next step section - Add moderatorStaffPermission to buildRoute - Remove the debug option from the VitNode configuration - Keep every staff permission label when they load in chunks - Read forum approval notices from the server only - Register /newsroom/pages/:slug in the page cache table - Cover the body limit middleware, email tailwindConfig and the empty default of required rich text in AdminCP forms - Tidy description formatting in the route module docs - Pass timeZone to the useFormatter formatter options in the test setup Co-Authored-By: Claude Opus 5.5 --- .claude/skills/vitnode-docs/SKILL.md | 96 +- .../vitnode-docs/references/docs-site.md | 1 - AGENTS.md | 2 + .../migration.sql | 464 + .../snapshot.json | 20998 ++++++++++++++++ apps/api/package.json | 2 +- apps/api/src/vitnode.api.config.ts | 4 +- .../content-engine/admincp-article-list.webp | Bin 66278 -> 93144 bytes .../content-engine/admincp-create-dialog.webp | Bin 16500 -> 16690 bytes .../content/docs/content-engine/admincp.mdx | 37 +- .../approval-notices-rejected.webp | Bin 0 -> 76426 bytes .../docs/content-engine/approval-notices.mdx | 285 + .../content/docs/content-engine/approvals.mdx | 49 +- .../content/docs/content-engine/caching.mdx | 44 +- .../content-engine/container-frontend.mdx | 397 +- .../content-engine/container-hierarchy.mdx | 64 +- .../content-engine/container-policies-api.mdx | 4 +- .../content-engine/container-policies.mdx | 2 +- .../docs/content-engine/containers.mdx | 163 +- .../content-visibility-hidden-notice.webp | Bin 58068 -> 56204 bytes .../content-engine/content-visibility.mdx | 18 +- .../create-a-content-type-articles-list.webp | Bin 0 -> 41076 bytes ...create-a-content-type-categories-list.webp | Bin 74714 -> 0 bytes .../create-a-content-type-create-dialog.webp | Bin 13630 -> 30262 bytes ...eate-a-content-type-staff-permissions.webp | Bin 50980 -> 0 bytes .../content-engine/create-a-content-type.mdx | 214 +- .../content/docs/content-engine/database.mdx | 51 +- .../docs/content-engine/duplicate-content.mdx | 2 +- .../content-engine/editorial-history.webp | Bin 44958 -> 49174 bytes .../editorial-preview-link.webp | Bin 41222 -> 43646 bytes .../content-engine/editorial-previews.mdx | 60 + .../content-engine/editorial-schedule.webp | Bin 29974 -> 67438 bytes .../content-engine/editorial-scheduling.mdx | 46 + .../content/docs/content-engine/editorial.mdx | 110 +- .../content/docs/content-engine/events.mdx | 48 +- .../fields-article-form-basic.webp | Bin 21892 -> 22424 bytes .../fields-article-form-references.webp | Bin 29472 -> 32874 bytes .../content/docs/content-engine/fields.mdx | 31 +- .../docs/content-engine/id-strategy.mdx | 38 +- .../content-engine/index-articles-list.webp | Bin 66278 -> 0 bytes .../content-engine/index-public-form.webp | Bin 68304 -> 0 bytes .../web/content/docs/content-engine/index.mdx | 133 +- .../docs/content-engine/live-editing-api.mdx | 12 +- .../live-editing-field-lock.webp | Bin 39920 -> 40518 bytes .../docs/content-engine/live-editing.mdx | 26 +- .../localization-public-page-pl.webp | Bin 12720 -> 13196 bytes .../docs/content-engine/localization.mdx | 44 +- .../web/content/docs/content-engine/meta.json | 45 +- .../docs/content-engine/plugin-files.mdx | 62 +- .../production-search-health.webp | Bin 95288 -> 136406 bytes .../docs/content-engine/production.mdx | 17 +- .../public-api-publish-confirm.webp | Bin 14914 -> 16198 bytes .../public-api-publish-row.webp | Bin 49398 -> 49252 bytes .../docs/content-engine/public-api.mdx | 174 +- .../docs/content-engine/public-lists-api.mdx | 4 +- .../public-lists-discussions.webp | Bin 121620 -> 0 bytes .../public-lists-embed-latest.webp | Bin 28946 -> 22532 bytes .../content-engine/public-lists-embed.mdx | 237 +- .../public-lists-news-search.webp | Bin 0 -> 50358 bytes .../content-engine/public-lists-news.webp | Bin 0 -> 75632 bytes .../public-lists-no-results.webp | Bin 49266 -> 0 bytes .../docs/content-engine/public-lists.mdx | 592 +- .../content-engine/public-pages-article.webp | Bin 19366 -> 16482 bytes .../docs/content-engine/public-pages.mdx | 271 +- .../content-engine/public-permissions-api.mdx | 96 + .../public-permissions-edit-link.webp | Bin 0 -> 8834 bytes .../content-engine/public-permissions.mdx | 158 + .../public-write-admin-list.webp | Bin 196480 -> 0 bytes .../docs/content-engine/public-write-api.mdx | 104 +- .../public-write-create-form.webp | Bin 70064 -> 45990 bytes .../public-write-edit-conflict.webp | Bin 84902 -> 64152 bytes .../public-write-edit-forbidden.webp | Bin 32914 -> 0 bytes .../public-write-edit-form.webp | Bin 0 -> 36320 bytes .../public-write-edit-pending.webp | Bin 0 -> 89252 bytes .../docs/content-engine/public-write-edit.mdx | 566 +- .../content-engine/public-write-form-api.mdx | 122 + .../content-engine/public-write-frontend.mdx | 337 +- .../public-write-moderator-permission.webp | Bin 142886 -> 0 bytes .../docs/content-engine/public-write.mdx | 312 +- .../docs/content-engine/publication.mdx | 101 +- .../content/docs/content-engine/reference.mdx | 80 +- .../relations-advanced-article-page.webp | Bin 28128 -> 32874 bytes .../content-engine/relations-advanced.mdx | 224 + .../relations-articles-list.webp | Bin 0 -> 57356 bytes .../relations-category-field.webp | Bin 0 -> 11656 bytes .../relations-category-picker.webp | Bin 13418 -> 0 bytes .../relations-create-category.webp | Bin 0 -> 16594 bytes .../content/docs/content-engine/relations.mdx | 393 +- .../content-engine/reports-article-page.webp | Bin 0 -> 10050 bytes .../docs/content-engine/reports-dialog.webp | Bin 32810 -> 29446 bytes .../reports-discussion-page.webp | Bin 53778 -> 0 bytes .../content-engine/reports-modcp-queue.webp | Bin 0 -> 68572 bytes .../content-engine/reports-modcp-report.webp | Bin 0 -> 102722 bytes .../content/docs/content-engine/reports.mdx | 210 +- .../search-admincp-collection.webp | Bin 70964 -> 92484 bytes .../docs/content-engine/search-results.webp | Bin 30844 -> 56388 bytes .../content/docs/content-engine/search.mdx | 70 +- apps/web/content/docs/content-engine/seo.mdx | 74 +- .../content/docs/content-engine/services.mdx | 44 +- .../docs/content-engine/threads-comments.webp | Bin 0 -> 30878 bytes .../content-engine/threads-editing-form.webp | Bin 0 -> 43276 bytes .../docs/content-engine/threads-editing.mdx | 683 + .../content-engine/threads-frontend-tree.webp | Bin 84662 -> 55790 bytes .../docs/content-engine/threads-frontend.mdx | 702 + .../content/docs/content-engine/threads.mdx | 759 +- apps/web/content/docs/dev/advanced/auth.mdx | 75 +- .../docs/dev/advanced/queue-debug-panel.webp | Bin 0 -> 72086 bytes apps/web/content/docs/dev/advanced/queue.mdx | 341 +- .../dev/advanced/rate-limiter-debugging.mdx | 7 +- .../docs/dev/advanced/rate-limiter.mdx | 4 +- apps/web/content/docs/dev/advanced/redis.mdx | 126 +- .../content/docs/dev/ai/action-options.mdx | 322 + apps/web/content/docs/dev/ai/actions.mdx | 532 +- apps/web/content/docs/dev/ai/admin.mdx | 16 +- .../web/content/docs/dev/ai/automatic-alt.mdx | 14 +- .../content/docs/dev/ai/costs-and-limits.mdx | 6 +- apps/web/content/docs/dev/ai/custom-ui.mdx | 170 + apps/web/content/docs/dev/ai/errors.mdx | 189 + .../content/docs/dev/ai/fields-and-editor.mdx | 380 +- apps/web/content/docs/dev/ai/index.mdx | 88 +- apps/web/content/docs/dev/ai/meta.json | 13 +- apps/web/content/docs/dev/ai/quick-ask.mdx | 85 + apps/web/content/docs/dev/ai/streaming.mdx | 183 + apps/web/content/docs/dev/ai/translations.mdx | 98 + apps/web/content/docs/dev/ai/usage.mdx | 75 +- apps/web/content/docs/dev/architecture.mdx | 98 +- apps/web/content/docs/dev/cache/api.mdx | 8 +- apps/web/content/docs/dev/cache/app.mdx | 73 +- apps/web/content/docs/dev/cache/index.mdx | 6 +- .../docs/dev/cache/pages-invalidation.mdx | 2 +- .../docs/dev/cache/pages-reference.mdx | 3 +- apps/web/content/docs/dev/cache/pages.mdx | 12 +- apps/web/content/docs/dev/cache/reference.mdx | 4 +- .../content/docs/dev/captcha/cloudflare.mdx | 9 +- .../docs/dev/captcha/custom-adapter.mdx | 60 +- apps/web/content/docs/dev/captcha/index.mdx | 69 +- .../content/docs/dev/captcha/recaptcha.mdx | 23 +- apps/web/content/docs/dev/cli/build.mdx | 4 +- apps/web/content/docs/dev/cli/bundle-size.mdx | 2 +- apps/web/content/docs/dev/cli/ci.mdx | 12 +- apps/web/content/docs/dev/cli/database.mdx | 20 +- apps/web/content/docs/dev/cli/dev.mdx | 15 +- apps/web/content/docs/dev/cli/index.mdx | 23 +- apps/web/content/docs/dev/cli/plugins.mdx | 41 +- apps/web/content/docs/dev/configuration.mdx | 180 +- apps/web/content/docs/dev/contribution.mdx | 144 +- .../content/docs/dev/cron/custom-adapter.mdx | 47 +- apps/web/content/docs/dev/cron/index.mdx | 162 +- apps/web/content/docs/dev/cron/meta.json | 2 +- apps/web/content/docs/dev/cron/node-cron.mdx | 72 +- apps/web/content/docs/dev/cron/rest-api.mdx | 52 +- .../docs/dev/database/connection-pool.mdx | 68 + apps/web/content/docs/dev/database/index.mdx | 227 +- apps/web/content/docs/dev/database/meta.json | 7 +- .../content/docs/dev/database/pagination.mdx | 247 +- apps/web/content/docs/dev/database/search.mdx | 140 +- .../dev/debugging/debug-panel-overview.webp | Bin 0 -> 86904 bytes .../content/docs/dev/debugging/error-page.mdx | 2 +- apps/web/content/docs/dev/debugging/index.mdx | 91 +- .../content/docs/dev/debugging/logging.mdx | 40 +- .../docs/dev/deployments/cloud/vercel.mdx | 8 +- .../docs/dev/deployments/prerendering.mdx | 6 +- .../docs/dev/deployments/self-hosted.mdx | 61 +- .../docs/dev/email/components/button.mdx | 2 +- .../docs/dev/email/components/card.mdx | 2 +- .../content/docs/dev/email/custom-adapter.mdx | 2 +- .../dev/email/default_template_preview.png | Bin 40778 -> 0 bytes apps/web/content/docs/dev/email/index.mdx | 70 +- .../web/content/docs/dev/email/nodemailer.mdx | 4 +- apps/web/content/docs/dev/email/resend.mdx | 2 +- .../dev/email/templates-new-note-preview.webp | Bin 0 -> 26526 bytes apps/web/content/docs/dev/email/templates.mdx | 403 +- .../docs/dev/events/built-in-events.mdx | 183 +- .../docs/dev/events/custom-adapter.mdx | 162 +- apps/web/content/docs/dev/events/index.mdx | 210 +- apps/web/content/docs/dev/fetcher.mdx | 345 +- apps/web/content/docs/dev/i18n/index.mdx | 25 +- .../docs/dev/i18n/localized-urls-advanced.mdx | 355 + .../content/docs/dev/i18n/localized-urls.mdx | 416 +- apps/web/content/docs/dev/i18n/messages.mdx | 26 +- apps/web/content/docs/dev/i18n/meta.json | 3 +- apps/web/content/docs/dev/i18n/namespaces.mdx | 18 +- apps/web/content/docs/dev/i18n/pages.mdx | 83 +- apps/web/content/docs/dev/i18n/server.mdx | 18 +- apps/web/content/docs/dev/index.mdx | 111 +- apps/web/content/docs/dev/meta.json | 19 +- .../docs/dev/mobile-navigation-bar.webp | Bin 0 -> 64460 bytes .../docs/dev/mobile-navigation-menu.webp | Bin 0 -> 17284 bytes .../content/docs/dev/mobile-navigation.mdx | 30 +- .../docs/dev/moderation/approval-detail.webp | Bin 0 -> 56328 bytes .../docs/dev/moderation/approvals-queue.webp | Bin 0 -> 54554 bytes .../dev/moderation/configure-moderators.mdx | 10 +- .../docs/dev/moderation/enable-reports.mdx | 4 +- .../moderation/moderation-scope-dialog.webp | Bin 46786 -> 44470 bytes .../moderation/moderation-scope-editor.webp | Bin 77274 -> 90528 bytes .../docs/dev/moderation/process-reports.mdx | 2 +- .../content/docs/dev/moderation/reference.mdx | 6 +- .../docs/dev/moderation/review-approvals.mdx | 18 +- .../dev/moderation/scoped-permissions.mdx | 62 +- apps/web/content/docs/dev/navigation.mdx | 41 +- .../content/docs/dev/notifications/access.mdx | 10 +- .../docs/dev/notifications/admincp.mdx | 2 +- .../dev/notifications/email-and-digests.mdx | 4 +- .../dev/notifications/inbox-and-realtime.mdx | 2 +- .../content/docs/dev/notifications/index.mdx | 2 +- .../migration-and-troubleshooting.mdx | 2 +- .../dev/notifications/notification-types.mdx | 6 +- .../docs/dev/notifications/publishing.mdx | 22 +- .../dev/notifications/queue-and-scale.mdx | 4 +- .../docs/dev/notifications/reference.mdx | 9 +- .../dev/notifications/troubleshooting.mdx | 4 +- .../web/content/docs/dev/passkeys/admincp.mdx | 2 +- apps/web/content/docs/dev/passkeys/index.mdx | 9 +- apps/web/content/docs/dev/performance.mdx | 92 +- .../dev/plugins/admin/admin-notes-page.webp | Bin 0 -> 81550 bytes .../plugins/admin/dashboard-notes-widget.webp | Bin 0 -> 31484 bytes .../dev/plugins/admin/dashboard-widgets.mdx | 252 +- .../content/docs/dev/plugins/admin/index.mdx | 389 +- .../content/docs/dev/plugins/admin/meta.json | 7 +- .../content/docs/dev/plugins/api/modules.mdx | 238 +- .../content/docs/dev/plugins/api/routes.mdx | 156 +- apps/web/content/docs/dev/plugins/build.mdx | 17 +- apps/web/content/docs/dev/plugins/catalog.mdx | 80 +- .../dev/plugins/create-generated-page.webp | Bin 0 -> 19148 bytes apps/web/content/docs/dev/plugins/create.mdx | 197 +- .../docs/dev/plugins/generated-page-image.png | Bin 104284 -> 0 bytes apps/web/content/docs/dev/plugins/meta.json | 4 +- .../docs/dev/plugins/migrate-to-tsdown.mdx | 118 - .../docs/dev/plugins/page-notes-list.webp | Bin 0 -> 19454 bytes apps/web/content/docs/dev/plugins/page.mdx | 153 + .../content/docs/dev/routing/breadcrumbs.mdx | 231 +- .../content/docs/dev/routing/first-route.mdx | 209 + apps/web/content/docs/dev/routing/index.mdx | 646 +- apps/web/content/docs/dev/routing/layouts.mdx | 116 + apps/web/content/docs/dev/routing/loading.mdx | 23 +- apps/web/content/docs/dev/routing/meta.json | 5 + .../content/docs/dev/routing/navigation.mdx | 23 +- .../content/docs/dev/routing/not-found.mdx | 173 +- .../content/docs/dev/routing/preloading.mdx | 4 +- .../docs/dev/routing/protected-routes.mdx | 63 + .../content/docs/dev/routing/route-module.mdx | 112 + .../docs/dev/routing/url-parameters.mdx | 101 + .../content/docs/dev/search-elasticsearch.mdx | 58 +- apps/web/content/docs/dev/search-external.mdx | 2 +- .../docs/dev/search-suggestions-dialog.webp | Bin 28484 -> 43566 bytes .../content/docs/dev/search-suggestions.mdx | 10 +- apps/web/content/docs/dev/search.mdx | 49 +- .../web/content/docs/dev/server-functions.mdx | 28 +- apps/web/content/docs/dev/setup.mdx | 170 +- .../docs/dev/sso/connected-accounts.mdx | 5 +- .../content/docs/dev/sso/custom-adapter.mdx | 59 +- apps/web/content/docs/dev/sso/discord.mdx | 23 +- apps/web/content/docs/dev/sso/facebook.mdx | 23 +- apps/web/content/docs/dev/sso/google.mdx | 25 +- apps/web/content/docs/dev/sso/icons.mdx | 102 +- apps/web/content/docs/dev/sso/index.mdx | 60 +- apps/web/content/docs/dev/sso/meta.json | 2 +- .../docs/dev/storage/custom-adapter.mdx | 6 +- apps/web/content/docs/dev/storage/index.mdx | 336 +- apps/web/content/docs/dev/storage/local.mdx | 4 +- apps/web/content/docs/dev/storage/s3-r2.mdx | 4 +- .../web/content/docs/dev/storage/supabase.mdx | 4 +- apps/web/content/docs/dev/swagger.mdx | 164 +- apps/web/content/docs/dev/updates/admin.mdx | 4 +- apps/web/content/docs/dev/updates/alerts.mdx | 58 +- apps/web/content/docs/dev/updates/lease.mdx | 2 +- .../web/content/docs/dev/updates/manifest.mdx | 2 +- apps/web/content/docs/dev/updates/meta.json | 2 +- .../docs/dev/updates/official-releases.mdx | 4 +- .../docs/dev/updates/plugin-authors.mdx | 4 +- .../docs/dev/updates/security-updates.mdx | 4 +- apps/web/content/docs/dev/websocket/index.mdx | 209 +- apps/web/content/docs/dev/websocket/meta.json | 2 +- .../content/docs/dev/websocket/reconnects.mdx | 17 +- apps/web/content/docs/dev/websocket/rooms.mdx | 210 + apps/web/content/docs/dev/websocket/setup.mdx | 34 +- .../docs/dev/widgets/block-variants.mdx | 21 +- .../content/docs/dev/widgets/blocks-field.mdx | 117 +- .../docs/dev/widgets/content-zones.mdx | 545 +- .../docs/dev/widgets/custom-editor-host.mdx | 127 + .../docs/dev/widgets/custom-loader.mdx | 184 + .../docs/dev/widgets/defining-a-block.mdx | 88 +- .../dev/widgets/editable-pages-saved.webp | Bin 0 -> 113270 bytes .../docs/dev/widgets/editable-pages.mdx | 501 +- .../docs/dev/widgets/end-to-end-page.webp | Bin 0 -> 48622 bytes .../content/docs/dev/widgets/end-to-end.mdx | 546 +- apps/web/content/docs/dev/widgets/index.mdx | 175 +- .../content/docs/dev/widgets/layout-areas.mdx | 52 +- apps/web/content/docs/dev/widgets/meta.json | 9 +- .../content/docs/dev/widgets/rendering.mdx | 82 +- .../docs/dev/widgets/restrict-widgets.mdx | 96 + .../docs/dev/widgets/saving-layouts.mdx | 112 + .../docs/dev/widgets/several-zones.mdx | 76 + .../dev/widgets/visual-editor-edit-mode.webp | Bin 0 -> 203506 bytes .../docs/dev/widgets/visual-editor.mdx | 955 +- .../dev/working-with-users/admin-users.mdx | 83 + .../docs/dev/working-with-users/avatars.mdx | 45 + .../working-with-users/email-verification.mdx | 5 +- .../docs/dev/working-with-users/meta.json | 13 +- .../dev/working-with-users/profile-fields.mdx | 82 + .../dev/working-with-users/roles-list.webp | Bin 0 -> 41836 bytes .../docs/dev/working-with-users/roles.mdx | 89 +- .../staff-permissions-editor.webp | Bin 0 -> 64860 bytes .../working-with-users/staff-permissions.mdx | 491 +- .../docs/dev/working-with-users/users.mdx | 433 +- apps/web/content/docs/guides/blog.mdx | 10 +- apps/web/content/docs/guides/first-plugin.mdx | 156 +- apps/web/content/docs/guides/forum.mdx | 2 +- apps/web/package.json | 2 +- apps/web/src/admin-nav.gen.ts | 8 +- apps/web/src/api-registry.gen.ts | 8 +- apps/web/src/blocks.gen.ts | 4 +- apps/web/src/content-modules.gen.ts | 8 +- apps/web/src/content-registry.gen.ts | 8 +- apps/web/src/docs/docs.css | 5 + apps/web/src/locales/site/en.json | 2 +- apps/web/src/locales/site/pl.json | 2 +- apps/web/src/package-messages.gen.ts | 6 +- apps/web/src/page-cache.gen.ts | 38 +- apps/web/src/plugin-inventory.gen.ts | 30 +- apps/web/src/plugin-routes.gen.ts | 8 +- apps/web/src/routes/__root.tsx | 4 +- apps/web/src/site/plugins/plugins-page.tsx | 18 +- apps/web/src/vitnode.api.config.ts | 4 +- apps/web/src/vitnode.config.ts | 7 +- .../copy-of-vitnode-app/README.md | 8 +- .../root/src/routes/__root.tsx | 4 +- .../root/src/vitnode.config.ts | 1 - packages/vitnode/package.json | 2 - packages/vitnode/src/api/config.ts | 4 +- packages/vitnode/src/api/lib/route.ts | 53 +- .../middlewares/body-limit.middleware.test.ts | 108 + .../api/middlewares/body-limit.middleware.ts | 52 + packages/vitnode/src/api/models/email.test.ts | 53 + packages/vitnode/src/api/models/email.ts | 1 + .../vitnode/src/components/ui/calendar.tsx | 14 +- .../vitnode/src/content/admin/spec.test.ts | 34 + packages/vitnode/src/content/admin/spec.ts | 14 +- .../src/content/server/public-permissions.ts | 4 +- packages/vitnode/src/content/server/thread.ts | 62 +- .../src/framework/vite/optimize-deps.ts | 1 - .../tanstack/admin/staff/edit-route.test.ts | 43 + .../src/tanstack/admin/staff/edit-route.tsx | 6 +- .../src/tanstack/content/permissions.test.ts | 42 + .../src/tanstack/content/permissions.test.tsx | 140 + .../src/tanstack/content/permissions.ts | 139 +- .../src/tanstack/content/public-write.tsx | 38 +- packages/vitnode/src/tests/memory-db.ts | 3 + packages/vitnode/src/tests/setup.ts | 2 + .../vitnode/src/views/layouts/providers.tsx | 12 +- packages/vitnode/src/vitnode.config.ts | 2 - plugins/example/src/admin/content.tsx | 26 - plugins/example/src/admin/nav.tsx | 80 - .../src/api/modules/admin/admin.module.ts | 36 - plugins/example/src/config.api.ts | 56 - plugins/example/src/const.ts | 45 - plugins/example/src/content/category.ts | 18 - .../example/src/database/advanced-articles.ts | 41 - plugins/example/src/database/categories.ts | 9 - plugins/example/src/database/discussions.ts | 7 - plugins/example/src/database/events.ts | 24 - .../src/database/localized-articles.ts | 14 - plugins/example/src/database/tags.ts | 14 - plugins/example/src/locales/en.json | 348 - plugins/example/src/pages/board-search.ts | 15 - plugins/example/src/pages/boards-data.ts | 29 - plugins/example/src/pages/discussion-list.ts | 95 - .../example/src/pages/discussion-new-page.tsx | 141 - .../example/src/pages/discussion-search.ts | 43 - plugins/example/src/pages/example-queries.ts | 96 - plugins/example/src/plugin-metadata.gen.ts | 16 - plugins/example/src/routes.ts | 126 - plugins/forum/src/locales/en.json | 5 - plugins/forum/src/pages/forum-links.ts | 15 +- plugins/forum/src/pages/topic-edit-page.tsx | 179 +- plugins/forum/src/pages/topic-new-page.tsx | 8 +- plugins/forum/src/routes.ts | 2 - plugins/{example => newsroom}/.npmignore | 0 plugins/newsroom/README.md | 28 + plugins/{example => newsroom}/global.d.ts | 3 +- .../{example => newsroom}/oxlint.config.ts | 0 plugins/{example => newsroom}/package.json | 29 +- plugins/newsroom/src/admin/content.tsx | 1 + plugins/newsroom/src/admin/nav.tsx | 43 + .../src/api/admin-staff-permission.test.ts | 6 +- .../src/api/ai/actions.ts | 18 +- .../{example => newsroom}/src/api/builders.ts | 0 .../src/api/lib/events.ts | 4 +- .../src/api/lib/moderation.ts | 26 +- .../src/api/modules/admin/admin.module.ts | 36 + .../api/modules/hello/hello.module.test.ts | 14 + .../src/api/modules/hello/hello.module.ts | 8 + .../src/api/modules/hello/hello.route.ts | 22 + plugins/{example => newsroom}/src/blocks.tsx | 0 plugins/newsroom/src/config.api.ts | 70 + plugins/{example => newsroom}/src/config.tsx | 4 +- plugins/{example => newsroom}/src/content.ts | 18 +- plugins/newsroom/src/content/article.ts | 51 + .../src/content/bulletin.ts} | 14 +- plugins/newsroom/src/content/category.ts | 17 + plugins/newsroom/src/content/comment.ts | 46 + .../src/content/desks.ts} | 8 +- .../src/content/event.ts | 4 +- .../src/content/explainer.ts} | 20 +- .../src/content/letter.ts} | 26 +- .../src/content/page-blocks.ts | 4 +- .../{example => newsroom}/src/content/page.ts | 4 +- .../src/content/settings-page.ts | 48 +- .../src/content/story.ts} | 18 +- .../{example => newsroom}/src/content/tag.ts | 4 +- plugins/newsroom/src/database/articles.ts | 11 + plugins/newsroom/src/database/bulletins.ts | 11 + plugins/newsroom/src/database/categories.ts | 7 + plugins/newsroom/src/database/comments.ts | 11 + plugins/newsroom/src/database/events.ts | 24 + plugins/newsroom/src/database/explainers.ts | 38 + plugins/newsroom/src/database/letters.ts | 7 + .../src/database/pages.ts | 2 +- .../src/database/stories.ts} | 16 +- plugins/newsroom/src/database/tags.ts | 14 + plugins/newsroom/src/locales/en.json | 540 + .../src/locales/index.ts | 4 - .../{example => newsroom}/src/manifest.gen.ts | 16 +- .../src/pages/admin-editor-form.tsx} | 8 +- .../src/pages/admin-overview-page.tsx} | 16 +- .../newsroom/src/pages/article-edit-page.tsx | 190 + plugins/newsroom/src/pages/article-form.tsx | 63 + plugins/newsroom/src/pages/article-list.ts | 47 + .../newsroom/src/pages/article-new-page.tsx | 91 + plugins/newsroom/src/pages/article-page.tsx | 147 + .../newsroom/src/pages/article-permissions.ts | 23 + plugins/newsroom/src/pages/articles-page.tsx | 159 + .../src/pages/browse-page.tsx | 6 +- .../src/pages/browse-search.ts | 0 .../src/pages/bulletin-page.tsx} | 34 +- .../newsroom/src/pages/comment-composer.tsx | 99 + plugins/newsroom/src/pages/comment-data.ts | 104 + plugins/newsroom/src/pages/comment-editor.tsx | 93 + .../newsroom/src/pages/comment-permissions.ts | 23 + .../newsroom/src/pages/comment-section.tsx | 377 + .../src/pages/content-story.tsx} | 4 +- .../src/pages/desk-page.tsx} | 134 +- plugins/newsroom/src/pages/desk-queries.ts | 91 + plugins/newsroom/src/pages/desk-search.ts | 15 + .../src/pages/desk-tree.tsx} | 26 +- plugins/newsroom/src/pages/desks-data.ts | 28 + .../src/pages/desks-page.tsx} | 52 +- .../src/pages/editor-showcase.ts | 0 .../src/pages/embed-page.tsx | 0 .../src/pages/event-page.tsx | 8 +- .../src/pages/explainer-page.tsx} | 36 +- .../src/pages/guide-index-page.tsx | 2 +- .../src/pages/guide-layout.tsx | 4 +- .../src/pages/guide-topic-page.tsx | 2 +- plugins/newsroom/src/pages/home-page.tsx | 47 + .../newsroom/src/pages/latest-articles.tsx | 70 + .../src/pages/latest-letters.tsx} | 37 +- .../src/pages/letter-actions.tsx} | 16 +- .../src/pages/letter-edit-page.tsx} | 80 +- .../src/pages/letter-form.tsx} | 76 +- plugins/newsroom/src/pages/letter-list.ts | 95 + .../newsroom/src/pages/letter-new-page.tsx | 141 + .../src/pages/letter-page.tsx} | 76 +- plugins/newsroom/src/pages/letter-search.ts | 41 + .../src/pages/letter-shell.tsx} | 2 +- .../src/pages/letters-page.tsx} | 138 +- .../src/pages/note-page.tsx} | 14 +- plugins/newsroom/src/pages/site-page.tsx | 52 + .../src/pages/story-page.tsx} | 24 +- .../src/pages/zones-page.tsx | 30 +- .../src/pages/zones-search.ts | 0 .../{example => newsroom}/src/plugin-info.ts | 4 +- plugins/newsroom/src/routes.ts | 156 + plugins/{example => newsroom}/src/widgets.tsx | 0 .../src/widgets/callout.tsx | 0 .../src/widgets/features.tsx | 0 .../{example => newsroom}/tsconfig.build.json | 0 plugins/{example => newsroom}/tsconfig.json | 0 .../types/api-registry.gen.d.ts | 2 +- .../{example => newsroom}/vitest.config.ts | 0 pnpm-lock.yaml | 240 +- 481 files changed, 41786 insertions(+), 12770 deletions(-) create mode 100644 apps/api/migrations/20261024173113_replace_example_with_newsroom/migration.sql create mode 100644 apps/api/migrations/20261024173113_replace_example_with_newsroom/snapshot.json create mode 100644 apps/web/content/docs/content-engine/approval-notices-rejected.webp create mode 100644 apps/web/content/docs/content-engine/approval-notices.mdx create mode 100644 apps/web/content/docs/content-engine/create-a-content-type-articles-list.webp delete mode 100644 apps/web/content/docs/content-engine/create-a-content-type-categories-list.webp delete mode 100644 apps/web/content/docs/content-engine/create-a-content-type-staff-permissions.webp create mode 100644 apps/web/content/docs/content-engine/editorial-previews.mdx create mode 100644 apps/web/content/docs/content-engine/editorial-scheduling.mdx delete mode 100644 apps/web/content/docs/content-engine/index-articles-list.webp delete mode 100644 apps/web/content/docs/content-engine/index-public-form.webp delete mode 100644 apps/web/content/docs/content-engine/public-lists-discussions.webp create mode 100644 apps/web/content/docs/content-engine/public-lists-news-search.webp create mode 100644 apps/web/content/docs/content-engine/public-lists-news.webp delete mode 100644 apps/web/content/docs/content-engine/public-lists-no-results.webp create mode 100644 apps/web/content/docs/content-engine/public-permissions-api.mdx create mode 100644 apps/web/content/docs/content-engine/public-permissions-edit-link.webp create mode 100644 apps/web/content/docs/content-engine/public-permissions.mdx delete mode 100644 apps/web/content/docs/content-engine/public-write-admin-list.webp delete mode 100644 apps/web/content/docs/content-engine/public-write-edit-forbidden.webp create mode 100644 apps/web/content/docs/content-engine/public-write-edit-form.webp create mode 100644 apps/web/content/docs/content-engine/public-write-edit-pending.webp create mode 100644 apps/web/content/docs/content-engine/public-write-form-api.mdx delete mode 100644 apps/web/content/docs/content-engine/public-write-moderator-permission.webp create mode 100644 apps/web/content/docs/content-engine/relations-advanced.mdx create mode 100644 apps/web/content/docs/content-engine/relations-articles-list.webp create mode 100644 apps/web/content/docs/content-engine/relations-category-field.webp delete mode 100644 apps/web/content/docs/content-engine/relations-category-picker.webp create mode 100644 apps/web/content/docs/content-engine/relations-create-category.webp create mode 100644 apps/web/content/docs/content-engine/reports-article-page.webp delete mode 100644 apps/web/content/docs/content-engine/reports-discussion-page.webp create mode 100644 apps/web/content/docs/content-engine/reports-modcp-queue.webp create mode 100644 apps/web/content/docs/content-engine/reports-modcp-report.webp create mode 100644 apps/web/content/docs/content-engine/threads-comments.webp create mode 100644 apps/web/content/docs/content-engine/threads-editing-form.webp create mode 100644 apps/web/content/docs/content-engine/threads-editing.mdx create mode 100644 apps/web/content/docs/content-engine/threads-frontend.mdx create mode 100644 apps/web/content/docs/dev/advanced/queue-debug-panel.webp create mode 100644 apps/web/content/docs/dev/ai/action-options.mdx create mode 100644 apps/web/content/docs/dev/ai/custom-ui.mdx create mode 100644 apps/web/content/docs/dev/ai/errors.mdx create mode 100644 apps/web/content/docs/dev/ai/quick-ask.mdx create mode 100644 apps/web/content/docs/dev/ai/streaming.mdx create mode 100644 apps/web/content/docs/dev/ai/translations.mdx create mode 100644 apps/web/content/docs/dev/database/connection-pool.mdx create mode 100644 apps/web/content/docs/dev/debugging/debug-panel-overview.webp delete mode 100644 apps/web/content/docs/dev/email/default_template_preview.png create mode 100644 apps/web/content/docs/dev/email/templates-new-note-preview.webp create mode 100644 apps/web/content/docs/dev/i18n/localized-urls-advanced.mdx create mode 100644 apps/web/content/docs/dev/mobile-navigation-bar.webp create mode 100644 apps/web/content/docs/dev/mobile-navigation-menu.webp create mode 100644 apps/web/content/docs/dev/moderation/approval-detail.webp create mode 100644 apps/web/content/docs/dev/moderation/approvals-queue.webp create mode 100644 apps/web/content/docs/dev/plugins/admin/admin-notes-page.webp create mode 100644 apps/web/content/docs/dev/plugins/admin/dashboard-notes-widget.webp create mode 100644 apps/web/content/docs/dev/plugins/create-generated-page.webp delete mode 100644 apps/web/content/docs/dev/plugins/generated-page-image.png delete mode 100644 apps/web/content/docs/dev/plugins/migrate-to-tsdown.mdx create mode 100644 apps/web/content/docs/dev/plugins/page-notes-list.webp create mode 100644 apps/web/content/docs/dev/plugins/page.mdx create mode 100644 apps/web/content/docs/dev/routing/first-route.mdx create mode 100644 apps/web/content/docs/dev/routing/layouts.mdx create mode 100644 apps/web/content/docs/dev/routing/protected-routes.mdx create mode 100644 apps/web/content/docs/dev/routing/route-module.mdx create mode 100644 apps/web/content/docs/dev/routing/url-parameters.mdx create mode 100644 apps/web/content/docs/dev/websocket/rooms.mdx create mode 100644 apps/web/content/docs/dev/widgets/custom-editor-host.mdx create mode 100644 apps/web/content/docs/dev/widgets/custom-loader.mdx create mode 100644 apps/web/content/docs/dev/widgets/editable-pages-saved.webp create mode 100644 apps/web/content/docs/dev/widgets/end-to-end-page.webp create mode 100644 apps/web/content/docs/dev/widgets/restrict-widgets.mdx create mode 100644 apps/web/content/docs/dev/widgets/saving-layouts.mdx create mode 100644 apps/web/content/docs/dev/widgets/several-zones.mdx create mode 100644 apps/web/content/docs/dev/widgets/visual-editor-edit-mode.webp create mode 100644 apps/web/content/docs/dev/working-with-users/admin-users.mdx create mode 100644 apps/web/content/docs/dev/working-with-users/avatars.mdx create mode 100644 apps/web/content/docs/dev/working-with-users/profile-fields.mdx create mode 100644 apps/web/content/docs/dev/working-with-users/roles-list.webp create mode 100644 apps/web/content/docs/dev/working-with-users/staff-permissions-editor.webp create mode 100644 packages/vitnode/src/api/middlewares/body-limit.middleware.test.ts create mode 100644 packages/vitnode/src/api/middlewares/body-limit.middleware.ts create mode 100644 packages/vitnode/src/api/models/email.test.ts create mode 100644 packages/vitnode/src/tanstack/admin/staff/edit-route.test.ts create mode 100644 packages/vitnode/src/tanstack/content/permissions.test.ts create mode 100644 packages/vitnode/src/tanstack/content/permissions.test.tsx delete mode 100644 plugins/example/src/admin/content.tsx delete mode 100644 plugins/example/src/admin/nav.tsx delete mode 100644 plugins/example/src/api/modules/admin/admin.module.ts delete mode 100644 plugins/example/src/config.api.ts delete mode 100644 plugins/example/src/const.ts delete mode 100644 plugins/example/src/content/category.ts delete mode 100644 plugins/example/src/database/advanced-articles.ts delete mode 100644 plugins/example/src/database/categories.ts delete mode 100644 plugins/example/src/database/discussions.ts delete mode 100644 plugins/example/src/database/events.ts delete mode 100644 plugins/example/src/database/localized-articles.ts delete mode 100644 plugins/example/src/database/tags.ts delete mode 100644 plugins/example/src/locales/en.json delete mode 100644 plugins/example/src/pages/board-search.ts delete mode 100644 plugins/example/src/pages/boards-data.ts delete mode 100644 plugins/example/src/pages/discussion-list.ts delete mode 100644 plugins/example/src/pages/discussion-new-page.tsx delete mode 100644 plugins/example/src/pages/discussion-search.ts delete mode 100644 plugins/example/src/pages/example-queries.ts delete mode 100644 plugins/example/src/plugin-metadata.gen.ts delete mode 100644 plugins/example/src/routes.ts rename plugins/{example => newsroom}/.npmignore (100%) create mode 100644 plugins/newsroom/README.md rename plugins/{example => newsroom}/global.d.ts (62%) rename plugins/{example => newsroom}/oxlint.config.ts (100%) rename plugins/{example => newsroom}/package.json (81%) create mode 100644 plugins/newsroom/src/admin/content.tsx create mode 100644 plugins/newsroom/src/admin/nav.tsx rename plugins/{example => newsroom}/src/api/admin-staff-permission.test.ts (72%) rename plugins/{example => newsroom}/src/api/ai/actions.ts (68%) rename plugins/{example => newsroom}/src/api/builders.ts (100%) rename plugins/{example => newsroom}/src/api/lib/events.ts (70%) rename plugins/{example => newsroom}/src/api/lib/moderation.ts (51%) create mode 100644 plugins/newsroom/src/api/modules/admin/admin.module.ts create mode 100644 plugins/newsroom/src/api/modules/hello/hello.module.test.ts create mode 100644 plugins/newsroom/src/api/modules/hello/hello.module.ts create mode 100644 plugins/newsroom/src/api/modules/hello/hello.route.ts rename plugins/{example => newsroom}/src/blocks.tsx (100%) create mode 100644 plugins/newsroom/src/config.api.ts rename plugins/{example => newsroom}/src/config.tsx (76%) rename plugins/{example => newsroom}/src/content.ts (50%) create mode 100644 plugins/newsroom/src/content/article.ts rename plugins/{example/src/content/localized-article.ts => newsroom/src/content/bulletin.ts} (86%) create mode 100644 plugins/newsroom/src/content/category.ts create mode 100644 plugins/newsroom/src/content/comment.ts rename plugins/{example/src/content/boards.ts => newsroom/src/content/desks.ts} (77%) rename plugins/{example => newsroom}/src/content/event.ts (97%) rename plugins/{example/src/content/advanced-article.ts => newsroom/src/content/explainer.ts} (90%) rename plugins/{example/src/content/discussion.ts => newsroom/src/content/letter.ts} (59%) rename plugins/{example => newsroom}/src/content/page-blocks.ts (74%) rename plugins/{example => newsroom}/src/content/page.ts (92%) rename plugins/{example => newsroom}/src/content/settings-page.ts (79%) rename plugins/{example/src/content/article.ts => newsroom/src/content/story.ts} (91%) rename plugins/{example => newsroom}/src/content/tag.ts (95%) create mode 100644 plugins/newsroom/src/database/articles.ts create mode 100644 plugins/newsroom/src/database/bulletins.ts create mode 100644 plugins/newsroom/src/database/categories.ts create mode 100644 plugins/newsroom/src/database/comments.ts create mode 100644 plugins/newsroom/src/database/events.ts create mode 100644 plugins/newsroom/src/database/explainers.ts create mode 100644 plugins/newsroom/src/database/letters.ts rename plugins/{example => newsroom}/src/database/pages.ts (78%) rename plugins/{example/src/database/articles.ts => newsroom/src/database/stories.ts} (61%) create mode 100644 plugins/newsroom/src/database/tags.ts create mode 100644 plugins/newsroom/src/locales/en.json rename plugins/{example => newsroom}/src/locales/index.ts (59%) rename plugins/{example => newsroom}/src/manifest.gen.ts (65%) rename plugins/{example/src/pages/admin-example-editor-form.tsx => newsroom/src/pages/admin-editor-form.tsx} (93%) rename plugins/{example/src/pages/admin-example-page.tsx => newsroom/src/pages/admin-overview-page.tsx} (82%) create mode 100644 plugins/newsroom/src/pages/article-edit-page.tsx create mode 100644 plugins/newsroom/src/pages/article-form.tsx create mode 100644 plugins/newsroom/src/pages/article-list.ts create mode 100644 plugins/newsroom/src/pages/article-new-page.tsx create mode 100644 plugins/newsroom/src/pages/article-page.tsx create mode 100644 plugins/newsroom/src/pages/article-permissions.ts create mode 100644 plugins/newsroom/src/pages/articles-page.tsx rename plugins/{example => newsroom}/src/pages/browse-page.tsx (94%) rename plugins/{example => newsroom}/src/pages/browse-search.ts (100%) rename plugins/{example/src/pages/localized-article-page.tsx => newsroom/src/pages/bulletin-page.tsx} (58%) create mode 100644 plugins/newsroom/src/pages/comment-composer.tsx create mode 100644 plugins/newsroom/src/pages/comment-data.ts create mode 100644 plugins/newsroom/src/pages/comment-editor.tsx create mode 100644 plugins/newsroom/src/pages/comment-permissions.ts create mode 100644 plugins/newsroom/src/pages/comment-section.tsx rename plugins/{example/src/pages/content-article.tsx => newsroom/src/pages/content-story.tsx} (92%) rename plugins/{example/src/pages/board-page.tsx => newsroom/src/pages/desk-page.tsx} (65%) create mode 100644 plugins/newsroom/src/pages/desk-queries.ts create mode 100644 plugins/newsroom/src/pages/desk-search.ts rename plugins/{example/src/pages/board-tree.tsx => newsroom/src/pages/desk-tree.tsx} (71%) create mode 100644 plugins/newsroom/src/pages/desks-data.ts rename plugins/{example/src/pages/boards-page.tsx => newsroom/src/pages/desks-page.tsx} (63%) rename plugins/{example => newsroom}/src/pages/editor-showcase.ts (100%) rename plugins/{example => newsroom}/src/pages/embed-page.tsx (100%) rename plugins/{example => newsroom}/src/pages/event-page.tsx (94%) rename plugins/{example/src/pages/advanced-article-page.tsx => newsroom/src/pages/explainer-page.tsx} (74%) rename plugins/{example => newsroom}/src/pages/guide-index-page.tsx (90%) rename plugins/{example => newsroom}/src/pages/guide-layout.tsx (88%) rename plugins/{example => newsroom}/src/pages/guide-topic-page.tsx (97%) create mode 100644 plugins/newsroom/src/pages/home-page.tsx create mode 100644 plugins/newsroom/src/pages/latest-articles.tsx rename plugins/{example/src/pages/latest-discussions.tsx => newsroom/src/pages/latest-letters.tsx} (64%) rename plugins/{example/src/pages/discussion-actions.tsx => newsroom/src/pages/letter-actions.tsx} (70%) rename plugins/{example/src/pages/discussion-edit-page.tsx => newsroom/src/pages/letter-edit-page.tsx} (70%) rename plugins/{example/src/pages/discussion-form.tsx => newsroom/src/pages/letter-form.tsx} (62%) create mode 100644 plugins/newsroom/src/pages/letter-list.ts create mode 100644 plugins/newsroom/src/pages/letter-new-page.tsx rename plugins/{example/src/pages/discussion-page.tsx => newsroom/src/pages/letter-page.tsx} (65%) create mode 100644 plugins/newsroom/src/pages/letter-search.ts rename plugins/{example/src/pages/discussion-shell.tsx => newsroom/src/pages/letter-shell.tsx} (93%) rename plugins/{example/src/pages/discussions-page.tsx => newsroom/src/pages/letters-page.tsx} (65%) rename plugins/{example/src/pages/example-page.tsx => newsroom/src/pages/note-page.tsx} (82%) create mode 100644 plugins/newsroom/src/pages/site-page.tsx rename plugins/{example/src/pages/article-page.tsx => newsroom/src/pages/story-page.tsx} (71%) rename plugins/{example => newsroom}/src/pages/zones-page.tsx (90%) rename plugins/{example => newsroom}/src/pages/zones-search.ts (100%) rename plugins/{example => newsroom}/src/plugin-info.ts (71%) create mode 100644 plugins/newsroom/src/routes.ts rename plugins/{example => newsroom}/src/widgets.tsx (100%) rename plugins/{example => newsroom}/src/widgets/callout.tsx (100%) rename plugins/{example => newsroom}/src/widgets/features.tsx (100%) rename plugins/{example => newsroom}/tsconfig.build.json (100%) rename plugins/{example => newsroom}/tsconfig.json (100%) rename plugins/{example => newsroom}/types/api-registry.gen.d.ts (95%) rename plugins/{example => newsroom}/vitest.config.ts (100%) diff --git a/.claude/skills/vitnode-docs/SKILL.md b/.claude/skills/vitnode-docs/SKILL.md index 2f4c6569a9..fe2e002558 100644 --- a/.claude/skills/vitnode-docs/SKILL.md +++ b/.claude/skills/vitnode-docs/SKILL.md @@ -1,7 +1,6 @@ --- name: vitnode-docs -description: > - Write, update, and review VitNode MDX documentation whenever implementing or documenting VitNode features, APIs, plugins, or AdminCP workflows. Use for tutorials, how-to guides, reference pages, explanations, documentation cleanup, and real UI screenshots. Require concise, focused pages, splitting broad topics into linked MDX files when needed, plain language, working step-by-step examples, supported Fumadocs components, and screenshots rendered through apps/web/src/components/fumadocs/img.tsx. +description: Write, update, and review VitNode MDX documentation whenever implementing or documenting VitNode features, APIs, plugins, or AdminCP workflows. Use for beginner learning paths, navigation, tutorials, feature recipes, reference pages, documentation cleanup, and real UI screenshots. Require short task-based titles, consistent runnable examples, verified prerequisites, focused pages, plain language, SEO and AI-readable content, supported Fumadocs components, and screenshots rendered through apps/web/src/components/fumadocs/img.tsx. --- # VitNode Docs @@ -17,18 +16,29 @@ Write documentation that helps the reader complete one concrete task. Explain wh - Check available Fumadocs components and the installed version. Prefer existing project wrappers and conventions. - Verify API names, imports, paths, defaults, permissions, and supported behavior against current source code. Treat source code as authoritative when existing docs disagree. - Document implemented behavior. Label experimental behavior when supported by the project; do not present plans as available features. +- For follow-up reviews, resolve the requested branch's current commit and compare it with the last reviewed commit. State when no new changes exist. Review the actual diff and affected dependencies; do not infer completion from a commit message or invent new scope to prolong an iteration. ## 2. Choose the page type Choose one primary page type and one reader outcome. Plan the page boundaries before drafting; do not write an exhaustive page and shorten it only afterward. -| Type | Purpose | Structure | -| ----------- | ----------------------------------------- | --------------------------------------------------------- | -| Overview | Choose a guide within a broad topic | Purpose → choices → focused guides | -| Tutorial | Learn by building a small working example | Goal → prerequisites → steps → working result | -| How-to | Complete a specific task | Outcome → requirements → steps → verify | -| Reference | Look up exact behavior | Purpose → signature → options/defaults → example → errors | -| Explanation | Understand a design or tradeoff | Problem → concrete example → how it works → tradeoffs | +| Type | Purpose | Structure | +| --- | --- | --- | +| Overview | Choose a guide within a broad topic | Purpose → choices → focused guides | +| Tutorial | Learn by building a small working example | Goal → prerequisites → steps → working result | +| How-to | Complete a specific task | Outcome → requirements → steps → verify | +| Reference | Look up exact behavior | Purpose → signature → options/defaults → example → errors | +| Explanation | Understand a design or tradeoff | Problem → concrete example → how it works → tradeoffs | + +### Design the learning path and navigation + +- Keep sidebar titles short, usually one to three words, and distinguish outcomes: `Content list`, `Content page`, `Create form`, `Reports`. Put the fuller learning goal in the description and opening. Avoid overlapping destinations such as `Public frontend` and `Public pages` without a clear difference; put task-to-helper maps in an overview. +- Keep the beginner sequence uninterrupted. For Content Engine, teach first content type → drafts and publishing → public API → content list → content page. Place embedded lists and optional extensions after the complete baseline; keep API reference separate. +- Continue one minimal example across consecutive lessons. Reuse the same plugin, type, fields, paths, query keys and demo records. Prefer the existing newsroom article baseline when present; do not force this fixture into unrelated documentation. +- Build only the capability needed for the current lesson. Introduce basic list rendering before filters, and basic editing with required authorization and version handling before optional approval proposals. Separate comments, comment editing and nested replies when each is an independently useful task. +- Make feature recipes accessible from their real minimum prerequisites. Reporting needs public content and a page, not member article forms. Comments own their author and write configuration; staff-written articles do not need public writing just to receive comments. +- Explain generated backend behavior, core frontend helpers, and plugin-owned UI separately. Show the whole path to an observable outcome: for reporting, include configuration, viewer permissions, the button, submission, ModCP and opening the reported content. +- Preserve existing URLs when shortening titles. Update navigation and related links together. Do not add placeholder pages for unimplemented reactions, following or other planned capabilities. ### Use the VitNode documentation schema @@ -39,17 +49,17 @@ Follow this self-contained schema. Do not mention external documentation brands 1. **Frontmatter:** provide a short, searchable `title` and a one-sentence `description`. Follow the local schema for optional fields. Let the renderer display the title; do not duplicate it as an H1 unless the project requires that. 2. **Opening:** write one or two sentences stating the outcome and when to use it. Do not add a general essay about the topic. 3. **Main content:** use the structure for the chosen page type below. Keep headings descriptive and paragraphs short. -4. **Related link:** add up to three specific links only when they offer a useful next action. Omit a generic conclusion or recap. +4. **Related link:** add up to three specific links under `## Related` only when they offer a useful next action. Never end a page with a "Next step", "Next" or "What's next" section; the sidebar and the page footer already link the following page. Omit a generic conclusion or recap. Use these structures in the stated order. Omit conditional sections when they add no value; do not fill empty sections just to satisfy a template. -| Page type | Main content schema | -| ----------- | ---------------------------------------------------------------------------------------------------------------------- | -| Overview | Brief purpose → decision table or short list of choices → links to focused guides | -| Tutorial | Before you begin (if needed) → Build the example (ordered steps) → Check the result | -| How-to | Before you begin (if needed) → task-specific steps → Check the result | -| Reference | Signature or API shape → parameters/options table → return value → minimal usage example → relevant errors/constraints | -| Explanation | Concrete problem → how it works → practical consequences/tradeoffs → related implementation guide | +| Page type | Main content schema | +| --- | --- | +| Overview | Brief purpose → decision table or short list of choices → links to focused guides | +| Tutorial | Before you begin (if needed) → Build the example (ordered steps) → Check the result | +| How-to | Before you begin (if needed) → task-specific steps → Check the result | +| Reference | Signature or API shape → parameters/options table → return value → minimal usage example → relevant errors/constraints | +| Explanation | Concrete problem → how it works → practical consequences/tradeoffs → related implementation guide | #### Step schema @@ -65,7 +75,7 @@ Keep the final verification in “Check the result” instead of repeating verif #### Code and reference schema - Give every code block a language and, for file edits, a supported file title. -- Keep title short. +- Keep code-block titles concise while retaining enough of the file path to identify the file; state create/edit placement in the step text. - Show a complete minimal file when creating one; show a labeled excerpt when changing an existing file. State where an excerpt belongs and link to required setup. - Exclude unrelated styling, route metadata, schemas, and error handling from focused excerpts. Preserve code required to reproduce the task safely and correctly. - Explain a new concept once, next to its first use. Do not narrate obvious code line by line. @@ -88,11 +98,11 @@ Keep the final verification in “Check the result” instead of repeating verif Example split for a page covering both app and API caching (adapt names and paths to the repository): -| Page | Keep on this page | -| ------------------- | ------------------------------------------------------------------------------- | -| Cache overview | Which layer to choose; links to the guides | -| Cache app data | Query options → loader/component integration → invalidation → verify | -| Cache API data | Redis prerequisite link → remember → delete after a write → verify | +| Page | Keep on this page | +| --- | --- | +| Cache overview | Which layer to choose; links to the guides | +| Cache app data | Query options → loader/component integration → invalidation → verify | +| Cache API data | Redis prerequisite link → remember → delete after a write → verify | | Cache API reference | Method signatures, defaults, return values, serialization and fallback behavior | Keep important user-isolation and invalidation requirements beside the relevant example. Move unrelated Content Engine behavior to its existing guide rather than expanding the cache overview. @@ -111,7 +121,7 @@ Keep important user-isolation and invalidation requirements beside the relevant - Say each fact once. Do not repeat the same point in the introduction, step text, callout, table, and conclusion. - Default to one short paragraph of instruction per step and, only if needed, one short explanation after the code. Do not narrate obvious code line by line. - Remove sentences that do not help the reader choose, act, understand a non-obvious constraint, or verify the result. Link to deeper explanations instead of adding them to the main path. -- Keep prerequisites to missing requirements, not a general setup tutorial. Prefer one relevant next-step link over a generic closing section. +- Keep prerequisites to missing requirements, not a general setup tutorial. Prefer one relevant related link over a generic closing section. ### Edit for a natural technical voice @@ -135,7 +145,7 @@ Keep important user-isolation and invalidation requirements beside the relevant - Keep important explanations and constraints in selectable text. Screenshots supplement instructions; they must not be the only source of UI labels or outcomes. - Support technical claims with implementation evidence, reproducible examples, or a relevant primary-source link. Add benchmark numbers, expert quotes, author attribution, or dates only when real and useful; do not add them as citation bait. - Keep HTML and Markdown exports equivalent in meaning, including all labeled tab alternatives. Do not add hidden bot-only text, prompt instructions for agents, fabricated FAQs, unsupported superlatives, or repetitive summaries to attract citations. -- For a how-to or tutorial that ends in working code in a reader's plugin or app, consider the optional `implementation` frontmatter behind **Copy implementation prompt**. Follow "Implementation prompts" in `apps/web/content/docs/dev/contribution.mdx`; it is the only place for coding-agent instructions. +- For a how-to or tutorial that ends in working code in a reader's plugin or app, consider the optional `implementation` frontmatter behind **Copy implementation prompt**. Read "Implementation prompts" in `apps/web/content/docs/dev/contribution.mdx` and follow its current schema; keep coding-agent instructions there rather than in reader-facing prose. Ask only decisions needed for that task, and keep constraints aligned with the verified APIs and prerequisites. - Use a short question-and-answer section only for distinct recurring questions that are not already answered. Do not append a generic FAQ to every page. - For a requested SEO/AI-readiness audit or visibility review, read `references/seo-review.md`. Do not run a broad crawl, install audit tools, or require competitor research for every MDX edit. - Read `references/docs-site.md` for canonical metadata, crawlability, sitemaps, structured data, and AI discovery when site-level work is in scope. Clear content and accessible delivery improve usability; do not promise rankings, indexing, or AI citations. @@ -152,9 +162,27 @@ For tutorials and how-to guides: 6. State the observable result of the step when useful. 7. End with a command, route, or UI action that verifies the complete result. 8. Add troubleshooting only for realistic errors supported by the implementation. +9. Call the VitNode API with `fetcher` from `@vitnode/core/tanstack/fetcher` (`rawFetcher` only for generated Content Engine admin routes), never raw `fetch` or a browser-console snippet. When a check needs a request with no UI yet, give a small temporary component with a button that calls `fetcher`, say where to render it, and tell the reader to remove it afterwards. Keep the complete workflow reproducible; not every code block needs to recreate the application. For a new file, include the imports and setup required to run it. For a targeted change, show a clearly labeled excerpt with its file path and placement, and link to the existing setup or complete example. Do not hide task-critical code behind `...`, assume undefined variables without explaining their source, or reproduce unrelated schemas, route metadata, styling, and error handling just to make an excerpt look standalone. Show a full baseline once, then show only the changes. Introduce dependencies before using them. Match repository package-manager conventions; for reader-facing commands, provide equivalent pnpm/npm/bun variants when supported. Do not invent script names or package-manager equivalence. +### Verify prerequisites and example continuity + +- Treat prerequisites as a contract. Every required step and final check must work from exactly that starting state. Mark checks needing publication, a public API, containers or another extension as optional, with their additional setup. An AdminCP-only relations guide must not require a public endpoint to finish. +- Create every verification record in this guide or a named prerequisite. Do not assume a seeded record, another tutorial's member post, board or account exists without saying how to obtain it. +- Introduce every local import, helper, type, variable, dependency and translation namespace before use, or link directly to its setup. Do not describe a simplified form as runnable against a richer content type with additional required fields. +- Show required build commands before migrations that read compiled plugins. Label edits as additions or replacements and preserve earlier configuration, query warm-ups and registered types when extending an existing file. +- Use focused excerpts for instruction and, when useful, a complete file in a supported accordion or direct source link as optional assembly reference. Keep required instructions visible. Do not repeat the complete file after every step or hide essential setup in an accordion. +- Match code, request payloads, expected responses and screenshots to the same configuration and stage of the tutorial. Review downstream prerequisites when changing an earlier tutorial's example. + +### Document server state truthfully + +- Verify publication and moderation states independently. A plain draft can have `approval: null`; enabling draft creation does not itself submit content to moderators. Show the container policy and inherited relation configuration when approval depends on them. +- Check approval and publication state before choosing a success message or redirect. Only claim a create is public when it is published; send drafts and pending creates to an available author-facing destination. A pending edit leaves the earlier published values visible. +- Derive approval notices from the server's `approval.status` and `approval.kind`, and open pending edits on proposed values when supported. Never infer moderator review from a draft status or a URL flag such as `submitted`. +- Keep required correctness in the basic example: authorization, field allowlists, ownership, relevant error states, cache invalidation and form defaults. State whether concurrent writes use versions or last-write-wins; do not promise conflict protection without enabling it. +- Report a demonstrated implementation/docs mismatch concretely. For a docs-only task, label any intentionally corrected example and track the implementation issue separately; do not silently expand scope into a product feature. Reconcile both descriptions when an authorized implementation fix lands. + For reference pages, include exact types, required fields, defaults, return values, and relevant errors. Avoid forcing a step sequence onto a lookup page. Link to a tutorial instead. ## 5. Use Fumadocs components deliberately @@ -164,7 +192,7 @@ Inspect the local MDX registry and existing pages before choosing imports or syn - Use `Steps` / `Step` for ordered workflows, following local heading conventions. - Use `Tabs` / `Tab` for equivalent alternatives, such as supported package managers. Keep required steps outside tabs. - Use `Callout` only for an easily missed prerequisite, limitation, or behavior that changes the reader's next action. Keep ordinary explanations in prose. Aim for at most two callouts on a short guide; retain more only when necessary for correctness. -- Use `Cards` / `Card` for related guides or next steps when locally supported. +- Use `Cards` / `Card` for related guides when locally supported. - Use supported file-tree components when a directory structure helps the reader place files. - Use supported type tables or Markdown tables for options, types, defaults, and required fields. - Use code-fence language labels, file titles, and focused line highlighting in the syntax supported by this project. @@ -181,6 +209,7 @@ Use components to clarify content. Do not wrap every paragraph in one. - Preserve essential instructions in text and rendered HTML. Do not hide required content behind hover, animation, or an interaction that prevents direct reading or copying. - When editing docs-site infrastructure or reviewing missing copy/export capabilities, read `references/docs-site.md`. Routine MDX writing should use existing infrastructure and report missing capabilities; do not expand it into a site rebuild. + ## 6. Capture real screenshots for UI workflows Capture screenshots when documenting AdminCP, forms, settings, editors, or other visual workflows where an image helps identify controls or verify a result. Skip images that add nothing to an API or code-only page. @@ -194,9 +223,9 @@ Capture screenshots when documenting AdminCP, forms, settings, editors, or other 7. Inspect each saved image. Retake it if labels are unreadable, content is clipped, or the page shows loading/error states unrelated to the guide. 8. Avoid exposing personal data, tokens, cookies, private URLs, or real user records. Prefer preparing clean demo data before capture. 9. Save assets in the repository's existing documentation image location. Use descriptive kebab-case names and stable repository paths. Save every new or re-captured screenshot as WebP; keep text sharp and file sizes reasonable. - - Capture at a 2x device scale factor. If the tool only writes PNG, capture to PNG, then convert it to WebP and delete the intermediate PNG. Never commit PNG screenshots. - - Convert with high quality to keep UI text sharp, for example Pillow lossy `quality=90` with `method=6`. Use lossless WebP when small text blurs. Inspect the WebP after conversion. - - When replacing an existing PNG screenshot, change the MDX import from `./name.png` to `./name.webp` and delete the old PNG. Leave no reference to the removed file. + - Capture at a 2x device scale factor. If the tool only writes PNG, capture to PNG, convert to WebP and delete the intermediate PNG. Never commit PNG screenshots. + - Convert at high quality, for example Pillow lossy `quality=90` with `method=6`. Use lossless WebP when small text blurs. Inspect the converted WebP. + - When replacing an existing PNG screenshot, update its MDX import to `.webp` and delete the old PNG. Leave no reference to the removed file. 10. Place the image beside the step it illustrates. Add useful alt text and a short caption when the state needs explanation. Keep the action and result in text as well. Never generate, draw, or fabricate an application screenshot. Do not substitute a mockup or claim a screenshot was captured when it was not. If the app, credentials, or capture tools are unavailable, finish the text and report the missing capture and its precise prerequisite. Do not commit broken image references or placeholders as completed screenshots. @@ -214,20 +243,25 @@ Use `apps/web/src/components/fumadocs/img.tsx` for every documentation screensho ## 7. Verify and finish -- Walk through the guide in order using its stated prerequisites. Verify commands and code against the implementation; run examples when the environment supports them. +- Walk through the guide in order using only its stated prerequisites. For independent recipes, skip unrelated lessons deliberately, such as Content page → Reports, Content page → Comments, or First content type → Relations. Prefer a fresh plugin/database state where practical; do not let a fully configured demo conceal missing setup. +- Verify commands and code against the implementation; run examples when the environment supports them. Check applicable published, plain draft, pending create, pending edit, rejected, unauthorized and missing states. Verify reloads, saved defaults and invalidation when documenting writes. - Run the relevant existing MDX, formatting, type, link, or docs-build checks. Inspect package scripts first and avoid unrelated test suites. - Preview the changed page. Check headings, table of contents, steps, tabs, code blocks, images, and internal links. Check narrow-screen readability for changed visual content. - Verify screenshot assets exist and each referenced source resolves. Update navigation metadata and related links when adding or moving pages. - Run a brevity pass: remove repetition and unrelated boilerplate, check the page has one outcome, and split independent workflows or reference material when needed. Preserve required setup and correctness-critical detail; move useful optional detail to a linked page instead of deleting it. -- Report changed pages, captured screenshots, verification performed, and any unresolved limitation. Distinguish source inspection from checks actually executed. +- Report changed pages, captured screenshots, verification performed, and any unresolved limitation. Distinguish source inspection, inspected CI results, locally executed checks and browser walkthroughs; a green build does not prove a tutorial was followed successfully. ## Completion checklist - [ ] Explain one concrete outcome in simple language without repeated prose. - [ ] Split independent workflows/reference material into linked MDX pages when needed; preserve URLs and navigation. +- [ ] Keep short, distinct sidebar titles and one consistent beginner example; make optional recipes independently reachable. +- [ ] Complete required steps and checks from only the declared prerequisites, with every helper and demo record accounted for. +- [ ] Match server publication/approval states in messages, notices, form defaults and navigation. - [ ] Match current VitNode code, names, permissions, and UI labels. - [ ] Use a clear title/description, direct answer, descriptive links, and sections understandable on their own without keyword stuffing. - [ ] Provide complete examples with file paths and expected results. +- [ ] Call the VitNode API with `fetcher` or `rawFetcher` in every example and check, never raw `fetch`. - [ ] Use supported Fumadocs components and valid MDX syntax; check code copying and existing Markdown exports when relevant. - [ ] Capture useful real UI screenshots and render them through `img.tsx`. - [ ] Verify navigation, links, assets, and the rendered page. diff --git a/.claude/skills/vitnode-docs/references/docs-site.md b/.claude/skills/vitnode-docs/references/docs-site.md index c8a11c5ab8..65efb74818 100644 --- a/.claude/skills/vitnode-docs/references/docs-site.md +++ b/.claude/skills/vitnode-docs/references/docs-site.md @@ -40,7 +40,6 @@ Apply these checks to public documentation. Preserve access controls on private - Confirm changed pages through direct HTML/Markdown requests, metadata inspection, link checks, and the existing build. Use available crawl diagnostics when authorized. A successful check does not guarantee retrieval or citation by any service. Authoritative references for verification, not text to copy into reader-facing docs: - - https://developers.google.com/search/docs/fundamentals/seo-starter-guide - https://developers.google.com/search/docs/appearance/ai-features - https://developers.openai.com/api/docs/bots diff --git a/AGENTS.md b/AGENTS.md index cc66266b10..6a54ca0564 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -92,6 +92,8 @@ Pick one indicator per piece of pending work, by what is pending: - Document every new feature. Keep it simple, SEO-friendly, and understandable at any skill level. - Friendly and lightly funny tone - don't overdo it. - Skip big comments; code is self-documenting. +- Docs call the VitNode API with `fetcher` (`rawFetcher` for generated Content Engine admin routes), never raw `fetch` or a browser-console snippet. A check that needs a request with no UI yet uses a small temporary component with a button. +- Never end a page with a "Next step" (or "Next", "What's next") section; the sidebar and page footer link the following page. Use `## Related` for links worth following. - Developer-facing APIs in feature code (exports of `@vitnode/core` and plugins that app or plugin authors call) need concise English JSDoc on the original declaration: - Say what it is for, plus constraints, side effects, runtime (server-only, browser-only or universal) and `@throws` only when they are real and non-obvious. - Document configuration properties one by one, including non-obvious defaults and constraints. diff --git a/apps/api/migrations/20261024173113_replace_example_with_newsroom/migration.sql b/apps/api/migrations/20261024173113_replace_example_with_newsroom/migration.sql new file mode 100644 index 0000000000..7cfd6b1a97 --- /dev/null +++ b/apps/api/migrations/20261024173113_replace_example_with_newsroom/migration.sql @@ -0,0 +1,464 @@ +CREATE TABLE "newsroom_articles" ( + "id" serial PRIMARY KEY, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "version" integer DEFAULT 1 NOT NULL, + "title" varchar(200) NOT NULL, + "slug" varchar(160) NOT NULL, + "body" jsonb NOT NULL, + "author" integer, + "category" integer +); +--> statement-breakpoint +ALTER TABLE "newsroom_articles" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_bulletins" ( + "id" serial PRIMARY KEY, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "version" integer DEFAULT 1 NOT NULL, + "featured" boolean DEFAULT false NOT NULL +); +--> statement-breakpoint +ALTER TABLE "newsroom_bulletins" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_bulletins_translations" ( + "itemId" integer, + "languageId" integer, + "version" integer DEFAULT 1 NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "title" varchar(200) NOT NULL, + "slug" varchar(160) NOT NULL, + "body" text NOT NULL, + CONSTRAINT "newsroom_bulletins_translations_item_id_language_id_pk" PRIMARY KEY("itemId","languageId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_bulletins_translations" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_categories" ( + "id" serial PRIMARY KEY, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "name" varchar(80) NOT NULL, + "slug" varchar(160) NOT NULL +); +--> statement-breakpoint +ALTER TABLE "newsroom_categories" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_comments" ( + "id" serial PRIMARY KEY, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "hiddenAt" timestamp, + "hiddenBy" integer, + "slug" varchar(160) NOT NULL, + "body" jsonb NOT NULL, + "author" integer, + "article" integer NOT NULL, + "parent" integer +); +--> statement-breakpoint +ALTER TABLE "newsroom_comments" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_events" ( + "id" bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (sequence name "newsroom_events_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START WITH 1 CACHE 1), + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "version" integer DEFAULT 1 NOT NULL, + "hiddenAt" timestamp, + "hiddenBy" integer, + "primaryTag" uuid, + "category" integer +); +--> statement-breakpoint +ALTER TABLE "newsroom_events" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_events_gallery" ( + "itemId" bigint, + "relatedItemId" integer, + "position" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "newsroom_events_gallery_pk" PRIMARY KEY("itemId","relatedItemId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_events_gallery" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_events_related_events" ( + "itemId" bigint, + "relatedItemId" bigint, + "position" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "newsroom_events_related_events_pk" PRIMARY KEY("itemId","relatedItemId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_events_related_events" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_events_sessions" ( + "id" serial PRIMARY KEY, + "itemId" bigint NOT NULL, + "position" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "title" varchar(200) NOT NULL, + "startsAt" timestamp +); +--> statement-breakpoint +ALTER TABLE "newsroom_events_sessions" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_events_tags" ( + "itemId" bigint, + "relatedItemId" uuid, + "position" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "newsroom_events_tags_pk" PRIMARY KEY("itemId","relatedItemId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_events_tags" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_events_translations" ( + "itemId" bigint, + "languageId" integer, + "version" integer DEFAULT 1 NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "title" varchar(200) NOT NULL, + "slug" varchar(160) NOT NULL, + "body" jsonb, + CONSTRAINT "newsroom_events_translations_item_id_language_id_pk" PRIMARY KEY("itemId","languageId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_events_translations" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_explainers" ( + "id" serial PRIMARY KEY, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "version" integer DEFAULT 1 NOT NULL, + "syndicationIndexable" boolean DEFAULT true NOT NULL, + "syndicationNoIndex" boolean DEFAULT false NOT NULL, + "syndicationPriority" integer DEFAULT 5 NOT NULL +); +--> statement-breakpoint +ALTER TABLE "newsroom_explainers" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_explainers_categories" ( + "itemId" integer, + "relatedItemId" integer, + "position" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "newsroom_explainers_categories_pk" PRIMARY KEY("itemId","relatedItemId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_explainers_categories" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_explainers_faq" ( + "id" serial PRIMARY KEY, + "itemId" integer NOT NULL, + "position" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "question" varchar(200) NOT NULL, + "answer" text NOT NULL +); +--> statement-breakpoint +ALTER TABLE "newsroom_explainers_faq" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_explainers_related_explainers" ( + "itemId" integer, + "relatedItemId" integer, + "position" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "newsroom_explainers_related_explainers_pk" PRIMARY KEY("itemId","relatedItemId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_explainers_related_explainers" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_explainers_tags" ( + "itemId" integer, + "relatedItemId" uuid, + "position" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "newsroom_explainers_tags_pk" PRIMARY KEY("itemId","relatedItemId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_explainers_tags" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_explainers_translations" ( + "itemId" integer, + "languageId" integer, + "version" integer DEFAULT 1 NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "title" varchar(200) NOT NULL, + "slug" varchar(160) NOT NULL, + "seoTitle" varchar(200), + "seoDescription" text, + CONSTRAINT "newsroom_explainers_translations_item_id_language_id_pk" PRIMARY KEY("itemId","languageId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_explainers_translations" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_letters" ( + "id" serial PRIMARY KEY, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "version" integer DEFAULT 1 NOT NULL, + "hiddenAt" timestamp, + "hiddenBy" integer, + "title" varchar(200) NOT NULL, + "slug" varchar(160) NOT NULL, + "body" jsonb NOT NULL, + "author" integer, + "desk" integer NOT NULL +); +--> statement-breakpoint +ALTER TABLE "newsroom_letters" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_pages" ( + "id" serial PRIMARY KEY, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "title" varchar(200) NOT NULL, + "slug" varchar(160) NOT NULL, + "content" jsonb DEFAULT '[]' NOT NULL +); +--> statement-breakpoint +ALTER TABLE "newsroom_pages" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_stories" ( + "id" serial PRIMARY KEY, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "version" integer DEFAULT 1 NOT NULL, + "title" varchar(200) NOT NULL, + "slug" varchar(160) NOT NULL, + "code" varchar(100) NOT NULL, + "excerpt" text, + "views" integer DEFAULT 0 NOT NULL, + "featured" boolean DEFAULT false NOT NULL, + "noIndex" boolean, + "author" integer, + "animation" integer, + "category" integer NOT NULL +); +--> statement-breakpoint +ALTER TABLE "newsroom_stories" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_stories_gallery" ( + "itemId" integer, + "relatedItemId" integer, + "position" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "newsroom_stories_gallery_pk" PRIMARY KEY("itemId","relatedItemId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_stories_gallery" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_tags" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(), + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "version" integer DEFAULT 1 NOT NULL, + "hiddenAt" timestamp, + "hiddenBy" integer, + "category" integer +); +--> statement-breakpoint +ALTER TABLE "newsroom_tags" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_tags_related_tags" ( + "itemId" uuid, + "relatedItemId" uuid, + "position" integer NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "newsroom_tags_related_tags_pk" PRIMARY KEY("itemId","relatedItemId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_tags_related_tags" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE TABLE "newsroom_tags_translations" ( + "itemId" uuid, + "languageId" integer, + "version" integer DEFAULT 1 NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "publishedAt" timestamp, + "status" varchar(32) DEFAULT 'draft' NOT NULL, + "name" varchar(100) NOT NULL, + "slug" varchar(160) NOT NULL, + CONSTRAINT "newsroom_tags_translations_item_id_language_id_pk" PRIMARY KEY("itemId","languageId") +); +--> statement-breakpoint +ALTER TABLE "newsroom_tags_translations" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +ALTER TABLE "example_advanced_articles_categories" DROP CONSTRAINT "example_advanced_articles_categories_itemId_example_advanced_ar";--> statement-breakpoint +ALTER TABLE "example_advanced_articles_categories" DROP CONSTRAINT "example_advanced_articles_categories_relatedItemId_example_cate";--> statement-breakpoint +ALTER TABLE "example_advanced_articles_faq" DROP CONSTRAINT "example_advanced_articles_faq_itemId_example_advanced_articles_";--> statement-breakpoint +ALTER TABLE "example_advanced_articles_related_articles" DROP CONSTRAINT "example_advanced_articles_related_articles_itemId_example_advan";--> statement-breakpoint +ALTER TABLE "example_advanced_articles_related_articles" DROP CONSTRAINT "example_advanced_articles_related_articles_relatedItemId_exampl";--> statement-breakpoint +ALTER TABLE "example_advanced_articles_tags" DROP CONSTRAINT "example_advanced_articles_tags_ATchHLRtvoCM_fkey";--> statement-breakpoint +ALTER TABLE "example_advanced_articles_tags" DROP CONSTRAINT "example_advanced_articles_tags_dEsWdkDmu7nW_fkey";--> statement-breakpoint +ALTER TABLE "example_advanced_articles_translations" DROP CONSTRAINT "example_advanced_articles_translations_itemId_example_advanced_";--> statement-breakpoint +ALTER TABLE "example_articles" DROP CONSTRAINT "example_articles_category_example_categories_id_fk";--> statement-breakpoint +ALTER TABLE "example_articles_gallery" DROP CONSTRAINT "example_articles_gallery_itemId_example_articles_id_fkey";--> statement-breakpoint +ALTER TABLE "example_events" DROP CONSTRAINT "example_events_primaryTag_example_tags_id_fkey";--> statement-breakpoint +ALTER TABLE "example_events" DROP CONSTRAINT "example_events_category_example_categories_id_fkey";--> statement-breakpoint +ALTER TABLE "example_events_gallery" DROP CONSTRAINT "example_events_gallery_itemId_example_events_id_fkey";--> statement-breakpoint +ALTER TABLE "example_events_related_events" DROP CONSTRAINT "example_events_related_events_itemId_example_events_id_fkey";--> statement-breakpoint +ALTER TABLE "example_events_related_events" DROP CONSTRAINT "example_events_related_events_oaRvqnKyAS7L_fkey";--> statement-breakpoint +ALTER TABLE "example_events_sessions" DROP CONSTRAINT "example_events_sessions_itemId_example_events_id_fkey";--> statement-breakpoint +ALTER TABLE "example_events_tags" DROP CONSTRAINT "example_events_tags_itemId_example_events_id_fkey";--> statement-breakpoint +ALTER TABLE "example_events_tags" DROP CONSTRAINT "example_events_tags_relatedItemId_example_tags_id_fkey";--> statement-breakpoint +ALTER TABLE "example_events_translations" DROP CONSTRAINT "example_events_translations_itemId_example_events_id_fkey";--> statement-breakpoint +ALTER TABLE "example_localized_articles_translations" DROP CONSTRAINT "example_localized_articles_translations_itemId_example_localize";--> statement-breakpoint +ALTER TABLE "example_tags" DROP CONSTRAINT "example_tags_category_example_categories_id_fkey";--> statement-breakpoint +ALTER TABLE "example_tags_related_tags" DROP CONSTRAINT "example_tags_related_tags_itemId_example_tags_id_fkey";--> statement-breakpoint +ALTER TABLE "example_tags_related_tags" DROP CONSTRAINT "example_tags_related_tags_relatedItemId_example_tags_id_fkey";--> statement-breakpoint +ALTER TABLE "example_tags_translations" DROP CONSTRAINT "example_tags_translations_itemId_example_tags_id_fkey";--> statement-breakpoint +DROP TABLE "example_advanced_articles";--> statement-breakpoint +DROP TABLE "example_advanced_articles_categories";--> statement-breakpoint +DROP TABLE "example_advanced_articles_faq";--> statement-breakpoint +DROP TABLE "example_advanced_articles_related_articles";--> statement-breakpoint +DROP TABLE "example_advanced_articles_tags";--> statement-breakpoint +DROP TABLE "example_advanced_articles_translations";--> statement-breakpoint +DROP TABLE "example_articles";--> statement-breakpoint +DROP TABLE "example_articles_gallery";--> statement-breakpoint +DROP TABLE "example_categories";--> statement-breakpoint +DROP TABLE "example_discussions";--> statement-breakpoint +DROP TABLE "example_events";--> statement-breakpoint +DROP TABLE "example_events_gallery";--> statement-breakpoint +DROP TABLE "example_events_related_events";--> statement-breakpoint +DROP TABLE "example_events_sessions";--> statement-breakpoint +DROP TABLE "example_events_tags";--> statement-breakpoint +DROP TABLE "example_events_translations";--> statement-breakpoint +DROP TABLE "example_localized_articles";--> statement-breakpoint +DROP TABLE "example_localized_articles_translations";--> statement-breakpoint +DROP TABLE "example_pages";--> statement-breakpoint +DROP TABLE "example_tags";--> statement-breakpoint +DROP TABLE "example_tags_related_tags";--> statement-breakpoint +DROP TABLE "example_tags_translations";--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_articles_slug_key" ON "newsroom_articles" ("slug");--> statement-breakpoint +CREATE INDEX "newsroom_articles_author_idx" ON "newsroom_articles" ("author");--> statement-breakpoint +CREATE INDEX "newsroom_articles_category_idx" ON "newsroom_articles" ("category");--> statement-breakpoint +CREATE INDEX "newsroom_articles_created_at_idx" ON "newsroom_articles" ("createdAt");--> statement-breakpoint +CREATE INDEX "newsroom_articles_updated_at_idx" ON "newsroom_articles" ("updatedAt");--> statement-breakpoint +CREATE INDEX "newsroom_articles_status_published_at_idx" ON "newsroom_articles" ("status","publishedAt");--> statement-breakpoint +CREATE INDEX "newsroom_bulletins_created_at_idx" ON "newsroom_bulletins" ("createdAt");--> statement-breakpoint +CREATE INDEX "newsroom_bulletins_updated_at_idx" ON "newsroom_bulletins" ("updatedAt");--> statement-breakpoint +CREATE INDEX "newsroom_bulletins_status_published_at_idx" ON "newsroom_bulletins" ("status","publishedAt");--> statement-breakpoint +CREATE INDEX "newsroom_bulletins_translations_language_id_status_idx" ON "newsroom_bulletins_translations" ("languageId","status");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_bulletins_translations_language_id_slug_key" ON "newsroom_bulletins_translations" ("languageId","slug");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_categories_slug_key" ON "newsroom_categories" ("slug");--> statement-breakpoint +CREATE INDEX "newsroom_categories_created_at_idx" ON "newsroom_categories" ("createdAt");--> statement-breakpoint +CREATE INDEX "newsroom_categories_updated_at_idx" ON "newsroom_categories" ("updatedAt");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_comments_slug_key" ON "newsroom_comments" ("slug");--> statement-breakpoint +CREATE INDEX "newsroom_comments_author_idx" ON "newsroom_comments" ("author");--> statement-breakpoint +CREATE INDEX "newsroom_comments_article_idx" ON "newsroom_comments" ("article");--> statement-breakpoint +CREATE INDEX "newsroom_comments_parent_idx" ON "newsroom_comments" ("parent");--> statement-breakpoint +CREATE INDEX "newsroom_comments_created_at_idx" ON "newsroom_comments" ("createdAt");--> statement-breakpoint +CREATE INDEX "newsroom_comments_updated_at_idx" ON "newsroom_comments" ("updatedAt");--> statement-breakpoint +CREATE INDEX "newsroom_comments_status_published_at_idx" ON "newsroom_comments" ("status","publishedAt");--> statement-breakpoint +CREATE INDEX "newsroom_comments_hidden_by_idx" ON "newsroom_comments" ("hiddenBy");--> statement-breakpoint +CREATE INDEX "newsroom_events_primary_tag_idx" ON "newsroom_events" ("primaryTag");--> statement-breakpoint +CREATE INDEX "newsroom_events_category_idx" ON "newsroom_events" ("category");--> statement-breakpoint +CREATE INDEX "newsroom_events_created_at_idx" ON "newsroom_events" ("createdAt");--> statement-breakpoint +CREATE INDEX "newsroom_events_updated_at_idx" ON "newsroom_events" ("updatedAt");--> statement-breakpoint +CREATE INDEX "newsroom_events_status_published_at_idx" ON "newsroom_events" ("status","publishedAt");--> statement-breakpoint +CREATE INDEX "newsroom_events_hidden_by_idx" ON "newsroom_events" ("hiddenBy");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_events_gallery_position_key" ON "newsroom_events_gallery" ("itemId","position");--> statement-breakpoint +CREATE INDEX "newsroom_events_gallery_related_item_id_idx" ON "newsroom_events_gallery" ("relatedItemId");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_events_related_events_position_key" ON "newsroom_events_related_events" ("itemId","position");--> statement-breakpoint +CREATE INDEX "newsroom_events_related_events_related_item_id_idx" ON "newsroom_events_related_events" ("relatedItemId");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_events_sessions_position_key" ON "newsroom_events_sessions" ("itemId","position");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_events_tags_position_key" ON "newsroom_events_tags" ("itemId","position");--> statement-breakpoint +CREATE INDEX "newsroom_events_tags_related_item_id_idx" ON "newsroom_events_tags" ("relatedItemId");--> statement-breakpoint +CREATE INDEX "newsroom_events_translations_language_id_status_idx" ON "newsroom_events_translations" ("languageId","status");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_events_translations_language_id_slug_key" ON "newsroom_events_translations" ("languageId","slug");--> statement-breakpoint +CREATE INDEX "newsroom_explainers_syndication_priority_idx" ON "newsroom_explainers" ("syndicationPriority");--> statement-breakpoint +CREATE INDEX "newsroom_explainers_created_at_idx" ON "newsroom_explainers" ("createdAt");--> statement-breakpoint +CREATE INDEX "newsroom_explainers_updated_at_idx" ON "newsroom_explainers" ("updatedAt");--> statement-breakpoint +CREATE INDEX "newsroom_explainers_status_published_at_idx" ON "newsroom_explainers" ("status","publishedAt");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_explainers_categories_position_key" ON "newsroom_explainers_categories" ("itemId","position");--> statement-breakpoint +CREATE INDEX "newsroom_explainers_categories_related_item_id_idx" ON "newsroom_explainers_categories" ("relatedItemId");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_explainers_faq_position_key" ON "newsroom_explainers_faq" ("itemId","position");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_explainers_related_explainers_position_key" ON "newsroom_explainers_related_explainers" ("itemId","position");--> statement-breakpoint +CREATE INDEX "newsroom_explainers_related_explainers_related_item_id_idx" ON "newsroom_explainers_related_explainers" ("relatedItemId");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_explainers_tags_position_key" ON "newsroom_explainers_tags" ("itemId","position");--> statement-breakpoint +CREATE INDEX "newsroom_explainers_tags_related_item_id_idx" ON "newsroom_explainers_tags" ("relatedItemId");--> statement-breakpoint +CREATE INDEX "newsroom_explainers_translations_language_id_status_idx" ON "newsroom_explainers_translations" ("languageId","status");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_explainers_translations_language_id_slug_key" ON "newsroom_explainers_translations" ("languageId","slug");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_letters_slug_key" ON "newsroom_letters" ("slug");--> statement-breakpoint +CREATE INDEX "newsroom_letters_author_idx" ON "newsroom_letters" ("author");--> statement-breakpoint +CREATE INDEX "newsroom_letters_desk_published_at_idx" ON "newsroom_letters" ("desk","publishedAt");--> statement-breakpoint +CREATE INDEX "newsroom_letters_created_at_idx" ON "newsroom_letters" ("createdAt");--> statement-breakpoint +CREATE INDEX "newsroom_letters_updated_at_idx" ON "newsroom_letters" ("updatedAt");--> statement-breakpoint +CREATE INDEX "newsroom_letters_status_published_at_idx" ON "newsroom_letters" ("status","publishedAt");--> statement-breakpoint +CREATE INDEX "newsroom_letters_hidden_by_idx" ON "newsroom_letters" ("hiddenBy");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_pages_slug_key" ON "newsroom_pages" ("slug");--> statement-breakpoint +CREATE INDEX "newsroom_pages_created_at_idx" ON "newsroom_pages" ("createdAt");--> statement-breakpoint +CREATE INDEX "newsroom_pages_updated_at_idx" ON "newsroom_pages" ("updatedAt");--> statement-breakpoint +CREATE INDEX "newsroom_pages_status_published_at_idx" ON "newsroom_pages" ("status","publishedAt");--> statement-breakpoint +CREATE INDEX "newsroom_stories_status_created_at_idx" ON "newsroom_stories" ("status","createdAt");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_stories_slug_key" ON "newsroom_stories" ("slug");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_stories_code_key" ON "newsroom_stories" ("code");--> statement-breakpoint +CREATE INDEX "newsroom_stories_author_idx" ON "newsroom_stories" ("author");--> statement-breakpoint +CREATE INDEX "newsroom_stories_animation_idx" ON "newsroom_stories" ("animation");--> statement-breakpoint +CREATE INDEX "newsroom_stories_category_idx" ON "newsroom_stories" ("category");--> statement-breakpoint +CREATE INDEX "newsroom_stories_created_at_idx" ON "newsroom_stories" ("createdAt");--> statement-breakpoint +CREATE INDEX "newsroom_stories_updated_at_idx" ON "newsroom_stories" ("updatedAt");--> statement-breakpoint +CREATE INDEX "newsroom_stories_status_published_at_idx" ON "newsroom_stories" ("status","publishedAt");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_stories_gallery_position_key" ON "newsroom_stories_gallery" ("itemId","position");--> statement-breakpoint +CREATE INDEX "newsroom_stories_gallery_related_item_id_idx" ON "newsroom_stories_gallery" ("relatedItemId");--> statement-breakpoint +CREATE INDEX "newsroom_tags_category_idx" ON "newsroom_tags" ("category");--> statement-breakpoint +CREATE INDEX "newsroom_tags_created_at_idx" ON "newsroom_tags" ("createdAt");--> statement-breakpoint +CREATE INDEX "newsroom_tags_updated_at_idx" ON "newsroom_tags" ("updatedAt");--> statement-breakpoint +CREATE INDEX "newsroom_tags_status_published_at_idx" ON "newsroom_tags" ("status","publishedAt");--> statement-breakpoint +CREATE INDEX "newsroom_tags_hidden_by_idx" ON "newsroom_tags" ("hiddenBy");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_tags_related_tags_position_key" ON "newsroom_tags_related_tags" ("itemId","position");--> statement-breakpoint +CREATE INDEX "newsroom_tags_related_tags_related_item_id_idx" ON "newsroom_tags_related_tags" ("relatedItemId");--> statement-breakpoint +CREATE INDEX "newsroom_tags_translations_language_id_status_idx" ON "newsroom_tags_translations" ("languageId","status");--> statement-breakpoint +CREATE UNIQUE INDEX "newsroom_tags_translations_language_id_slug_key" ON "newsroom_tags_translations" ("languageId","slug");--> statement-breakpoint +ALTER TABLE "newsroom_articles" ADD CONSTRAINT "newsroom_articles_author_core_users_id_fkey" FOREIGN KEY ("author") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_articles" ADD CONSTRAINT "newsroom_articles_category_newsroom_categories_id_fkey" FOREIGN KEY ("category") REFERENCES "newsroom_categories"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_bulletins_translations" ADD CONSTRAINT "newsroom_bulletins_translations_kgMZwrpzwwU7_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_bulletins"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_bulletins_translations" ADD CONSTRAINT "newsroom_bulletins_translations_rkkiMJQiOrEo_fkey" FOREIGN KEY ("languageId") REFERENCES "core_languages"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_comments" ADD CONSTRAINT "newsroom_comments_hiddenBy_core_users_id_fkey" FOREIGN KEY ("hiddenBy") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_comments" ADD CONSTRAINT "newsroom_comments_author_core_users_id_fkey" FOREIGN KEY ("author") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_comments" ADD CONSTRAINT "newsroom_comments_article_newsroom_articles_id_fkey" FOREIGN KEY ("article") REFERENCES "newsroom_articles"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_comments" ADD CONSTRAINT "newsroom_comments_parent_newsroom_comments_id_fkey" FOREIGN KEY ("parent") REFERENCES "newsroom_comments"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events" ADD CONSTRAINT "newsroom_events_hiddenBy_core_users_id_fkey" FOREIGN KEY ("hiddenBy") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events" ADD CONSTRAINT "newsroom_events_primaryTag_newsroom_tags_id_fkey" FOREIGN KEY ("primaryTag") REFERENCES "newsroom_tags"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events" ADD CONSTRAINT "newsroom_events_category_newsroom_categories_id_fkey" FOREIGN KEY ("category") REFERENCES "newsroom_categories"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events_gallery" ADD CONSTRAINT "newsroom_events_gallery_itemId_newsroom_events_id_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events_gallery" ADD CONSTRAINT "newsroom_events_gallery_relatedItemId_core_files_id_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "core_files"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events_related_events" ADD CONSTRAINT "newsroom_events_related_events_itemId_newsroom_events_id_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events_related_events" ADD CONSTRAINT "newsroom_events_related_events_0xHNSLM3JAJj_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "newsroom_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events_sessions" ADD CONSTRAINT "newsroom_events_sessions_itemId_newsroom_events_id_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events_tags" ADD CONSTRAINT "newsroom_events_tags_itemId_newsroom_events_id_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events_tags" ADD CONSTRAINT "newsroom_events_tags_relatedItemId_newsroom_tags_id_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "newsroom_tags"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events_translations" ADD CONSTRAINT "newsroom_events_translations_itemId_newsroom_events_id_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_events_translations" ADD CONSTRAINT "newsroom_events_translations_languageId_core_languages_id_fkey" FOREIGN KEY ("languageId") REFERENCES "core_languages"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_explainers_categories" ADD CONSTRAINT "newsroom_explainers_categories_9dOmLv3k6xDX_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_explainers"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_explainers_categories" ADD CONSTRAINT "newsroom_explainers_categories_mnxKvproEUm5_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "newsroom_categories"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_explainers_faq" ADD CONSTRAINT "newsroom_explainers_faq_itemId_newsroom_explainers_id_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_explainers"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_explainers_related_explainers" ADD CONSTRAINT "newsroom_explainers_related_explainers_TFvIU3TogSGy_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_explainers"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_explainers_related_explainers" ADD CONSTRAINT "newsroom_explainers_related_explainers_74JhaXF5PsDV_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "newsroom_explainers"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_explainers_tags" ADD CONSTRAINT "newsroom_explainers_tags_itemId_newsroom_explainers_id_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_explainers"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_explainers_tags" ADD CONSTRAINT "newsroom_explainers_tags_relatedItemId_newsroom_tags_id_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "newsroom_tags"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_explainers_translations" ADD CONSTRAINT "newsroom_explainers_translations_hcPB0jdTm8MV_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_explainers"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_explainers_translations" ADD CONSTRAINT "newsroom_explainers_translations_qqggtF6jhcsZ_fkey" FOREIGN KEY ("languageId") REFERENCES "core_languages"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_letters" ADD CONSTRAINT "newsroom_letters_hiddenBy_core_users_id_fkey" FOREIGN KEY ("hiddenBy") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_letters" ADD CONSTRAINT "newsroom_letters_author_core_users_id_fkey" FOREIGN KEY ("author") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_letters" ADD CONSTRAINT "newsroom_letters_desk_core_content_containers_id_fkey" FOREIGN KEY ("desk") REFERENCES "core_content_containers"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_stories" ADD CONSTRAINT "newsroom_stories_author_core_users_id_fkey" FOREIGN KEY ("author") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_stories" ADD CONSTRAINT "newsroom_stories_animation_core_files_id_fkey" FOREIGN KEY ("animation") REFERENCES "core_files"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_stories" ADD CONSTRAINT "newsroom_stories_category_newsroom_categories_id_fkey" FOREIGN KEY ("category") REFERENCES "newsroom_categories"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_stories_gallery" ADD CONSTRAINT "newsroom_stories_gallery_itemId_newsroom_stories_id_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_stories"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_stories_gallery" ADD CONSTRAINT "newsroom_stories_gallery_relatedItemId_core_files_id_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "core_files"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_tags" ADD CONSTRAINT "newsroom_tags_hiddenBy_core_users_id_fkey" FOREIGN KEY ("hiddenBy") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_tags" ADD CONSTRAINT "newsroom_tags_category_newsroom_categories_id_fkey" FOREIGN KEY ("category") REFERENCES "newsroom_categories"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_tags_related_tags" ADD CONSTRAINT "newsroom_tags_related_tags_itemId_newsroom_tags_id_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_tags"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_tags_related_tags" ADD CONSTRAINT "newsroom_tags_related_tags_relatedItemId_newsroom_tags_id_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "newsroom_tags"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_tags_translations" ADD CONSTRAINT "newsroom_tags_translations_itemId_newsroom_tags_id_fkey" FOREIGN KEY ("itemId") REFERENCES "newsroom_tags"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint +ALTER TABLE "newsroom_tags_translations" ADD CONSTRAINT "newsroom_tags_translations_languageId_core_languages_id_fkey" FOREIGN KEY ("languageId") REFERENCES "core_languages"("id") ON DELETE RESTRICT ON UPDATE CASCADE; \ No newline at end of file diff --git a/apps/api/migrations/20261024173113_replace_example_with_newsroom/snapshot.json b/apps/api/migrations/20261024173113_replace_example_with_newsroom/snapshot.json new file mode 100644 index 0000000000..0d9bd98e56 --- /dev/null +++ b/apps/api/migrations/20261024173113_replace_example_with_newsroom/snapshot.json @@ -0,0 +1,20998 @@ +{ + "version": "8", + "dialect": "postgres", + "id": "4b66f492-fb3f-4ba0-a722-b4787d0ef9b8", + "prevIds": [ + "0c989133-91e8-46c3-86d3-f9b7ac8ec7a3" + ], + "ddl": [ + { + "isRlsEnabled": true, + "name": "core_admin_permissions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_admin_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_action_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_budget_periods", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_calls", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_cost_adjustments", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_reservations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_role_permissions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_role_policies", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_runs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_translation_sources", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_user_overrides", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_containers", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_documents", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_drafts", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_field_locks", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_submissions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_file_refs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_revisions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_schedules", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_cron", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_admin_dashboard", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_files", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_files_alt", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_files_alt_analysis", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_files_alt_state", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_languages", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_languages_words", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_logs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_moderation_report_events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_moderation_report_reasons", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_moderation_reports", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_moderators_permissions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notification_deliveries", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notification_events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notification_receipts", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notification_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notification_user_state", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notifications", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_page_layouts", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_passkey_challenges", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_passkeys", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_queue", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_search_index", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_search_popularity", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_secrets", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_sessions_known_devices", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_update_lock", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_update_results", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_update_sources", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_confirm_emails", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_forgot_password", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_secondary_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_sso", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_sso_operations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_sso_profile_sources", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_categories", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_categories_translations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_posts", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_posts_author_id", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_posts_category_id", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_posts_translations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "forum_comments", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "forum_topics", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_articles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_bulletins", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_bulletins_translations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_categories", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_comments", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_events_gallery", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_events_related_events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_events_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_events_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_events_translations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_explainers", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_explainers_categories", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_explainers_faq", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_explainers_related_explainers", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_explainers_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_explainers_translations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_letters", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_pages", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_stories", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_stories_gallery", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_tags_related_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "newsroom_tags_translations", + "entityType": "tables", + "schema": "public" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "protected", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "unrestricted", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "permissions", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "lastSeen", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "deviceId", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actionKey", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "enabled", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "modelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fallbackModelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "maxInputCharacters", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "maxOutputTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "timeoutMs", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "maxRetries", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "maxSteps", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "dailyLimit", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "instructions", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "scopeKey", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "unit", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "periodStart", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "periodEnd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "limitAmount", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'0'", + "generated": null, + "identity": null, + "name": "spentAmount", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'0'", + "generated": null, + "identity": null, + "name": "reservedAmount", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "unknownCount", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "runId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "attempt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "modelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "provider", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerModelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerRequestId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "errorCode", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "inputTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "outputTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cacheReadTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cacheWriteTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reasoningTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "images", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "costUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "costSource", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "costReason", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pricingVersion", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pricingSnapshot", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "startedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "finishedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reconciledAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "callId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "runId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "previousCostUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "previousSource", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "newCostUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "newSource", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "deltaUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reason", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "runId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "budgetPeriodId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "amount", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'active'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "settledAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "permission", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "granted", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "dailyLimit", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_policies" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "monthlyPoints", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_policies" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "unlimited", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_policies" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_policies" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actionKey", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actorType", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "idempotencyKey", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resourceType", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resourceId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "errorCode", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "promptVersion", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pointsConversionVersion", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "modelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "provider", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerModelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "inputTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "outputTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cacheReadTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cacheWriteTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reasoningTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "costUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "costSource", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "chargedUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "chargedPoints", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'0'", + "generated": null, + "identity": null, + "name": "reservedUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'0'", + "generated": null, + "identity": null, + "name": "reservedPoints", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "settlement", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "leaseExpiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "accepted", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "acceptedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sourceFingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "startedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "finishedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "settledAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "enabled", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "monthlyBudgetUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "systemMonthlyBudgetUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'0'", + "generated": null, + "identity": null, + "name": "defaultMonthlyPoints", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "pointsConversionVersion", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "10", + "generated": null, + "identity": null, + "name": "userRequestsPerMinute", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "2", + "generated": null, + "identity": null, + "name": "userConcurrency", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "2", + "generated": null, + "identity": null, + "name": "systemConcurrency", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "365", + "generated": null, + "identity": null, + "name": "historyRetentionDays", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "altEnabled", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "10", + "generated": null, + "identity": null, + "name": "altBatchSize", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "altScanCursor", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "altScanStartedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "locale", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "field", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sourceLocale", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sourceFingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "targetFingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "origin", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedById", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "monthlyPoints", + "entityType": "columns", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "unlimited", + "entityType": "columns", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "blocked", + "entityType": "columns", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "definitionId", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "parentId", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "metadata", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "policies", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "field", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "varchar(35)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "language", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "bytea", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "state", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "baseVersion", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedBy", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "language", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "values", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "baseVersion", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedBy", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "field", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "language", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "acquiredAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "containerDefinitionId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "containerId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "kind", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "values", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "baseValues", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "baseVersion", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "baseUpdatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "authorId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reviewerId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reason", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "revisionId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "decidedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "revisionId", + "entityType": "columns", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileId", + "entityType": "columns", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "operation", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "snapshot", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "changedFields", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'system'", + "generated": null, + "identity": null, + "name": "actorType", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actorUserId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "restoredFromRevisionId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "scheduledFor", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "generation", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "createdBy", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "completedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "effectsError", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "varchar(512)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "path", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "retiredAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastRun", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "module", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nextRun", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "schedule", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "widgets", + "entityType": "columns", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(512)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "key", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "folder", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "mimeType", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "size", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "metadata", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'automatic'", + "generated": null, + "identity": null, + "name": "altPolicy", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileId", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageCode", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "text", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "origin", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileFingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "runId", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedById", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileId", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileFingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "runId", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileId", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "code", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'UTC'", + "generated": null, + "identity": null, + "name": "timezone", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "protected", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "default", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "time24", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "varchar", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageCode", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginCode", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "value", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tableName", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "variable", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "type", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "content", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "varchar(45)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ipAddress", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'GET'", + "generated": null, + "identity": null, + "name": "method", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'localhost'", + "generated": null, + "identity": null, + "name": "path", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userAgent", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "500", + "generated": null, + "identity": null, + "name": "statusCode", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reportId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "type", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actorId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "data", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "code", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "requiresDetails", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "targetType", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "targetId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reporterId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reason", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "snapshot", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(500)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "targetTitle", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'new'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "assigneeId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resolution", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resolutionNote", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resolvedAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resolvedById", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "scopeFamily", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "scopeId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "openKey", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "protected", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "unrestricted", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "permissions", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "channel", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "mode", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "eventId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "idempotencyKey", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "attempts", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "5", + "generated": null, + "identity": null, + "name": "maxAttempts", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "availableAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "periodStart", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "periodEnd", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "itemCount", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerMessageId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(500)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "skipReason", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sentAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "type", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "schemaVersion", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "idempotencyKey", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actorId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "subjectType", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "subjectId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "groupKey", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "data", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "recipientIds", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "allowSelf", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "recipientCursor", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "deliveredCount", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "completedAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "eventId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "notificationId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "seq", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "emailPending", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "emailDeliveryId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "key", + "entityType": "columns", + "schema": "public", + "table": "core_notification_settings" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "value", + "entityType": "columns", + "schema": "public", + "table": "core_notification_settings" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "unreadCount", + "entityType": "columns", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "revision", + "entityType": "columns", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "preferences", + "entityType": "columns", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "type", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "category", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "groupKey", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "groupBucket", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "subjectType", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "subjectId", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "latestEventId", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "eventCount", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "activitySeq", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "readSeq", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "readAt", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "archivedAt", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "lastActivityAt", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(120)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pageId", + "entityType": "columns", + "schema": "public", + "table": "core_page_layouts" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "zones", + "entityType": "columns", + "schema": "public", + "table": "core_page_layouts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_page_layouts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_page_layouts" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tokenHash", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ceremony", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "challenge", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "webauthnUserId", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(1024)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "credentialId", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publicKey", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "counter", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "webauthnUserId", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "transports", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "deviceType", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "backedUp", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(36)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "aaguid", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastUsedAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'default'", + "generated": null, + "identity": null, + "name": "queue", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "payload", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "priority", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "attempts", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "3", + "generated": null, + "identity": null, + "name": "maxAttempts", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "availableAt", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reservedAt", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "completedAt", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "dedupeKey", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "protected", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "default", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "root", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "guest", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "color", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "prefix", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "allowUploadFiles", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "totalMaxStorage", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "maxStorageForSubmit", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "allowUploadAvatar", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "2048", + "generated": null, + "identity": null, + "name": "maxAvatarSize", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "allowUploadCover", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "5120", + "generated": null, + "identity": null, + "name": "maxCoverSize", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "allowEditPersonalInfo", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemType", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "languageCode", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "authorIds", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "content", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "tsvector", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": { + "as": "setweight(to_tsvector(CASE lower(split_part(\"core_search_index\".\"languageCode\", '-', 1)) WHEN 'da' THEN 'danish'::regconfig WHEN 'de' THEN 'german'::regconfig WHEN 'en' THEN 'english'::regconfig WHEN 'es' THEN 'spanish'::regconfig WHEN 'fi' THEN 'finnish'::regconfig WHEN 'fr' THEN 'french'::regconfig WHEN 'hu' THEN 'hungarian'::regconfig WHEN 'it' THEN 'italian'::regconfig WHEN 'nl' THEN 'dutch'::regconfig WHEN 'no' THEN 'norwegian'::regconfig WHEN 'pl' THEN 'polish'::regconfig WHEN 'pt' THEN 'portuguese'::regconfig WHEN 'ro' THEN 'romanian'::regconfig WHEN 'ru' THEN 'russian'::regconfig WHEN 'sv' THEN 'swedish'::regconfig WHEN 'tr' THEN 'turkish'::regconfig ELSE 'simple'::regconfig END, coalesce(\"core_search_index\".\"title\", '')), 'A') || setweight(to_tsvector(CASE lower(split_part(\"core_search_index\".\"languageCode\", '-', 1)) WHEN 'da' THEN 'danish'::regconfig WHEN 'de' THEN 'german'::regconfig WHEN 'en' THEN 'english'::regconfig WHEN 'es' THEN 'spanish'::regconfig WHEN 'fi' THEN 'finnish'::regconfig WHEN 'fr' THEN 'french'::regconfig WHEN 'hu' THEN 'hungarian'::regconfig WHEN 'it' THEN 'italian'::regconfig WHEN 'nl' THEN 'dutch'::regconfig WHEN 'no' THEN 'norwegian'::regconfig WHEN 'pl' THEN 'polish'::regconfig WHEN 'pt' THEN 'portuguese'::regconfig WHEN 'ro' THEN 'romanian'::regconfig WHEN 'ru' THEN 'russian'::regconfig WHEN 'sv' THEN 'swedish'::regconfig WHEN 'tr' THEN 'turkish'::regconfig ELSE 'simple'::regconfig END, coalesce(\"core_search_index\".\"content\", '')), 'B')", + "type": "stored" + }, + "identity": null, + "name": "search_vector", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "containerType", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "containerId", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "url", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "isPublic", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "isHidden", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "imageId", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "metadata", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "indexedAt", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemType", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "double precision", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "logScore", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "views", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "clicks", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "comments", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_secrets" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "value", + "entityType": "columns", + "schema": "public", + "table": "core_secrets" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_secrets" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "deviceId", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publicId", + "entityType": "columns", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "type": "varchar(40)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ipAddress", + "entityType": "columns", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userAgent", + "entityType": "columns", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "lastSeen", + "entityType": "columns", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_update_lock" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "owner", + "entityType": "columns", + "schema": "public", + "table": "core_update_lock" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_lock" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastManualAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_lock" + }, + { + "type": "varchar(214)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "componentId", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sourceUrl", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "channel", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "versions", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "hasUnknownVersion", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "varchar(256)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "coreVersion", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "result", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastAttemptAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastSuccessAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "url", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "varchar(512)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "etag", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastModified", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "document", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastAttemptAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastSuccessAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nameCode", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "email", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "firstName", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastName", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "phone", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "headline", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "showRealName", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "password", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "newsletter", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(6)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatarColor", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "emailVerified", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "birthday", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "timeZone", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(40)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ipAddress", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'en'", + "generated": null, + "identity": null, + "name": "language", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatarId", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "coverId", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "varchar(40)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ipAddress", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "varchar(40)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ipAddress", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerAccountId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerEmail", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerUsername", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "syncOnSignIn", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatarSourceUrl", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatarSha256", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatarFileId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tokenHash", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "intent", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "fields", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerAccountId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "preview", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "field", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "blog_categories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_categories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_categories" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "color", + "entityType": "columns", + "schema": "public", + "table": "blog_categories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "friendlyUrl", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "coverImage", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "friendlyUrl", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "content", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "coverImageAlt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "author", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "topic", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "parent", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "author", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "forum", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_articles" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "newsroom_articles" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "newsroom_articles" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "newsroom_articles" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "newsroom_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "author", + "entityType": "columns", + "schema": "public", + "table": "newsroom_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "category", + "entityType": "columns", + "schema": "public", + "table": "newsroom_articles" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "featured", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_categories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_categories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_categories" + }, + { + "type": "varchar(80)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "newsroom_categories" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "newsroom_categories" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "author", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "article", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "parent", + "entityType": "columns", + "schema": "public", + "table": "newsroom_comments" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": { + "type": "byDefault", + "name": "newsroom_events_id_seq", + "increment": "1", + "startWith": "1", + "minValue": "1", + "maxValue": "9223372036854775807", + "cache": 1, + "cycle": false + }, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "primaryTag", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "category", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_gallery" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_gallery" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_gallery" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_gallery" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_related_events" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_related_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_related_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_related_events" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_sessions" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_sessions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "startsAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_sessions" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_tags" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "syndicationIndexable", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "syndicationNoIndex", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "5", + "generated": null, + "identity": null, + "name": "syndicationPriority", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_categories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_categories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_categories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_categories" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_faq" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_faq" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_faq" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_faq" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_faq" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "question", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_faq" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "answer", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_faq" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_related_explainers" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_related_explainers" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_related_explainers" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_related_explainers" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "seoTitle", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "seoDescription", + "entityType": "columns", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "author", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "desk", + "entityType": "columns", + "schema": "public", + "table": "newsroom_letters" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_pages" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_pages" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_pages" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_pages" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_pages" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "newsroom_pages" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "newsroom_pages" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "content", + "entityType": "columns", + "schema": "public", + "table": "newsroom_pages" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "code", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "excerpt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "views", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "featured", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "noIndex", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "author", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "animation", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "category", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories_gallery" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories_gallery" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories_gallery" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_stories_gallery" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "category", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_related_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_related_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_related_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_related_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "roleId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_permissions_role_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_permissions_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_permissions_updated_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_sessions_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "deviceId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_sessions_device_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_sessions_expires_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "scopeKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "periodStart", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_budget_periods_scope_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "runId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_calls_run_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_calls" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "costSource", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "reconciledAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_calls_reconcile_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_calls" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "callId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_cost_adjustments_call_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "runId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "budgetPeriodId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_reservations_run_period_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_reservations_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_user_created_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_created_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actionKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_action_created_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "leaseExpiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actorType", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "idempotencyKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"idempotencyKey\" IS NOT NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_idempotency_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "locale", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "field", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_translation_sources_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "definitionId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_containers_definition_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "core_content_containers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "definitionId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "parentId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_containers_definition_parent_position_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_containers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "parentId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_containers_parent_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_containers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "field", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "language", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_documents_doc_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_documents" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_documents_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_documents" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_documents_updated_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_documents" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "language", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_drafts_key_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_drafts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_drafts_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_drafts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_drafts_updated_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_drafts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "field", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "language", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_field_locks_key_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_field_locks_expires_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_field_locks_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"status\" = 'pending'", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_submissions_pending_key", + "entityType": "indexes", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "containerId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_submissions_queue_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_submissions_item_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "authorId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_submissions_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "revisionId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "fileId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_file_refs_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "fileId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_file_refs_file_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "version", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"languageId\" IS NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_revisions_item_version_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "version", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"languageId\" IS NOT NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_revisions_translation_version_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "version", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_revisions_language_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_revisions_plugin_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actorUserId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_revisions_actor_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "status = 'pending'", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_schedules_active_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "scheduledFor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_schedules_due_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_schedules_item_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_schedules_plugin_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_schedules_created_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"languageId\" IS NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_slug_history_shared_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"languageId\" IS NOT NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_slug_history_locale_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_slug_history_item_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_slug_history_plugin_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "lastRun", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_cron_last_run_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_cron" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_dashboard_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_files_user_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_files" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_files_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_files" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "fileId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "languageCode", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_files_alt_file_language_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_files_alt" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "fileId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "fileFingerprint", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_files_alt_analysis_file_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "status <> 'completed'", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_files_alt_state_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_languages_name_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_languages" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageCode", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_languages_words_lang_code_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_languages_words" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tableName", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "pluginCode", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "variable", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_languages_words_lookup_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_languages_words" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_logs_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_logs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_logs_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_logs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "reportId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_report_events_report_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_report_reasons_position_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "targetType", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "targetId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_target_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "assigneeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_assignee_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "reporterId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_reporter_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "scopeFamily", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "scopeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_scope_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "roleId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderators_permissions_role_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderators_permissions_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderators_permissions_updated_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "availableAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "status = 'pending'", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_deliveries_claim_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_deliveries_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_deliveries_user_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "eventId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "\"eventId\" IS NOT NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_deliveries_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "idempotencyKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_events_idempotency_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_events_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_events_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "notificationId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "seq", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_receipts_notification_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_receipts_user_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "\"emailPending\" = true AND \"emailDeliveryId\" IS NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_receipts_email_pending_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "unreadCount", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_user_state_unread_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "groupKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "groupBucket", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_group_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "lastActivityAt", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "\"archivedAt\" IS NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_inbox_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "lastActivityAt", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "\"archivedAt\" IS NULL AND \"readSeq\" < \"activitySeq\"", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_unread_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "subjectType", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "subjectId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_subject_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "lastActivityAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_last_activity_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "latestEventId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_latest_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_passkey_challenges_expires_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_passkey_challenges_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_passkeys_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "webauthnUserId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_passkeys_webauthn_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "availableAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_queue_status_available_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_queue" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_queue_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_queue" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "completedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "\"completedAt\" IS NOT NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_queue_completed_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_queue" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "dedupeKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"dedupeKey\" IS NOT NULL AND status IN ('pending', 'processing')", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_queue_dedupe_active_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_queue" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_roles_updated_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "search_vector", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "gin", + "concurrently": false, + "name": "core_search_index_search_vector_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "to_tsvector('simple'::regconfig, \"title\")", + "isExpression": true, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "gin", + "concurrently": false, + "name": "core_search_index_title_vector_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "authorIds", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "gin", + "concurrently": false, + "name": "core_search_index_author_ids_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemType", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_item_type_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageCode", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_language_code_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "isPublic", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_is_public_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "imageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_image_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "containerType", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "containerId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_container_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "logScore", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_popularity_log_score_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_popularity" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_sessions_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "deviceId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_sessions_device_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_sessions_expires_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "ipAddress", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_sessions_known_devices_ip_address_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "avatarId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_avatar_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "coverId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_cover_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "roleId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_role_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "roleId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_secondary_roles_role_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_sso_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_sso" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "providerId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_sso_operations_user_provider_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_sso_operations_expires_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_categories_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_categories_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_categories_translations_language_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "friendlyUrl", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_categories_translations_language_id_friendly_url_key", + "entityType": "indexes", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_status_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "coverImage", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_cover_image_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_author_id_position_key", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_author_id_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_category_id_position_key", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_category_id_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_translations_language_id_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "friendlyUrl", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_translations_language_id_friendly_url_key", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "topic", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "parent", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_topic_parent_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "author", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "topic", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_topic_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "parent", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_parent_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "forum", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_forum_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "author", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_articles_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "author", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_articles_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "category", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_articles_category_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_articles_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_articles_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_articles_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_bulletins_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_bulletins" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_bulletins_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_bulletins" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_bulletins_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_bulletins" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_bulletins_translations_language_id_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_bulletins_translations_language_id_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_categories_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_categories_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_categories_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_comments_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "author", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_comments_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "article", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_comments_article_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "parent", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_comments_parent_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_comments_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_comments_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_comments_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_comments_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "primaryTag", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_primary_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "category", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_category_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_gallery_position_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events_gallery" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_gallery_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events_gallery" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_related_events_position_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events_related_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_related_events_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events_related_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_sessions_position_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_tags_position_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_tags_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_translations_language_id_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_events_translations_language_id_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "syndicationPriority", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_syndication_priority_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_categories_position_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_categories_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_faq_position_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers_faq" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_related_explainers_position_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers_related_explainers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_related_explainers_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers_related_explainers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_tags_position_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_tags_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_translations_language_id_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_explainers_translations_language_id_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_letters_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_letters" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "author", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_letters_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_letters" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "desk", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_letters_desk_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_letters" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_letters_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_letters" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_letters_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_letters" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_letters_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_letters" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_letters_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_letters" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_pages_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_pages" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_pages_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_pages" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_pages_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_pages" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_pages_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_pages" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_stories_status_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_stories_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "code", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_stories_code_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "author", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_stories_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "animation", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_stories_animation_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "category", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_stories_category_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_stories_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_stories_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_stories_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_stories_gallery_position_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_stories_gallery" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_stories_gallery_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_stories_gallery" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "category", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_tags_category_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_tags_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_tags_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_tags_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_tags_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_tags_related_tags_position_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_tags_related_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_tags_related_tags_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_tags_related_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_tags_translations_language_id_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "newsroom_tags_translations_language_id_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_admin_permissions_roleId_core_roles_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_admin_permissions_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_admin_sessions_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "nameExplicit": false, + "columns": [ + "deviceId" + ], + "schemaTo": "public", + "tableTo": "core_sessions_known_devices", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_admin_sessions_deviceId_core_sessions_known_devices_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "nameExplicit": false, + "columns": [ + "runId" + ], + "schemaTo": "public", + "tableTo": "core_ai_runs", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_calls_runId_core_ai_runs_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_calls" + }, + { + "nameExplicit": false, + "columns": [ + "callId" + ], + "schemaTo": "public", + "tableTo": "core_ai_calls", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_cost_adjustments_callId_core_ai_calls_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "nameExplicit": false, + "columns": [ + "runId" + ], + "schemaTo": "public", + "tableTo": "core_ai_runs", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_cost_adjustments_runId_core_ai_runs_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "nameExplicit": false, + "columns": [ + "runId" + ], + "schemaTo": "public", + "tableTo": "core_ai_runs", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_reservations_runId_core_ai_runs_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "nameExplicit": false, + "columns": [ + "budgetPeriodId" + ], + "schemaTo": "public", + "tableTo": "core_ai_budget_periods", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_reservations_FClYpPXZwvsm_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_role_permissions_roleId_core_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_role_policies_roleId_core_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_role_policies" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_ai_runs_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": false, + "columns": [ + "updatedById" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_ai_translation_sources_updatedById_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_user_overrides_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "nameExplicit": false, + "columns": [ + "parentId" + ], + "schemaTo": "public", + "tableTo": "core_content_containers", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "core_content_containers_q6QIucJ4HJ7B_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_containers" + }, + { + "nameExplicit": false, + "columns": [ + "updatedBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "core_content_documents_updatedBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_documents" + }, + { + "nameExplicit": false, + "columns": [ + "updatedBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "core_content_drafts_updatedBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_drafts" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "core_content_field_locks_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "nameExplicit": false, + "columns": [ + "authorId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_content_submissions_authorId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": false, + "columns": [ + "reviewerId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_content_submissions_reviewerId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": false, + "columns": [ + "revisionId" + ], + "schemaTo": "public", + "tableTo": "core_content_revisions", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "core_content_file_refs_5get6SfhBPHr_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "nameExplicit": false, + "columns": [ + "fileId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "core_content_file_refs_fileId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "nameExplicit": false, + "columns": [ + "actorUserId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "core_content_revisions_actorUserId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": false, + "columns": [ + "createdBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "core_content_schedules_createdBy_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_admin_dashboard_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_files_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_files" + }, + { + "nameExplicit": false, + "columns": [ + "fileId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_files_alt_fileId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt" + }, + { + "nameExplicit": false, + "columns": [ + "languageCode" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "code" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_files_alt_languageCode_core_languages_code_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt" + }, + { + "nameExplicit": false, + "columns": [ + "runId" + ], + "schemaTo": "public", + "tableTo": "core_ai_runs", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_files_alt_runId_core_ai_runs_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt" + }, + { + "nameExplicit": false, + "columns": [ + "updatedById" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_files_alt_updatedById_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt" + }, + { + "nameExplicit": false, + "columns": [ + "fileId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_files_alt_analysis_fileId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "nameExplicit": false, + "columns": [ + "runId" + ], + "schemaTo": "public", + "tableTo": "core_ai_runs", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_files_alt_analysis_runId_core_ai_runs_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "nameExplicit": false, + "columns": [ + "fileId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_files_alt_state_fileId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "nameExplicit": false, + "columns": [ + "languageCode" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "code" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_languages_words_languageCode_core_languages_code_fk", + "entityType": "fks", + "schema": "public", + "table": "core_languages_words" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "core_logs_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_logs" + }, + { + "nameExplicit": false, + "columns": [ + "reportId" + ], + "schemaTo": "public", + "tableTo": "core_moderation_reports", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_moderation_report_events_4CqHOxfheaUm_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "nameExplicit": false, + "columns": [ + "actorId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_moderation_report_events_actorId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "nameExplicit": false, + "columns": [ + "reporterId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_moderation_reports_reporterId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": false, + "columns": [ + "assigneeId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_moderation_reports_assigneeId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": false, + "columns": [ + "resolvedById" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_moderation_reports_resolvedById_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_moderators_permissions_roleId_core_roles_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_moderators_permissions_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notification_deliveries_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": false, + "columns": [ + "eventId" + ], + "schemaTo": "public", + "tableTo": "core_notification_events", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_notification_deliveries_vcf37BytIa0M_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": false, + "columns": [ + "actorId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_notification_events_actorId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_events" + }, + { + "nameExplicit": false, + "columns": [ + "eventId" + ], + "schemaTo": "public", + "tableTo": "core_notification_events", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notification_receipts_UQ7ZEs0I6ijx_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notification_receipts_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": false, + "columns": [ + "notificationId" + ], + "schemaTo": "public", + "tableTo": "core_notifications", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notification_receipts_Vxye2Cs6MgcL_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notification_user_state_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notifications_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": false, + "columns": [ + "latestEventId" + ], + "schemaTo": "public", + "tableTo": "core_notification_events", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "core_notifications_I8QoGbTal5Wt_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_passkey_challenges_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_passkeys_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "nameExplicit": false, + "columns": [ + "imageId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_search_index_imageId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_sessions_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_sessions" + }, + { + "nameExplicit": false, + "columns": [ + "deviceId" + ], + "schemaTo": "public", + "tableTo": "core_sessions_known_devices", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_sessions_deviceId_core_sessions_known_devices_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_sessions" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "core_users_roleId_core_roles_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": false, + "columns": [ + "language" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "code" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET DEFAULT", + "name": "core_users_language_core_languages_code_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": false, + "columns": [ + "avatarId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_users_avatarId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": false, + "columns": [ + "coverId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_users_coverId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_confirm_emails_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_forgot_password_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_secondary_roles_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_secondary_roles_roleId_core_roles_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_sso_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users_sso" + }, + { + "nameExplicit": false, + "columns": [ + "avatarFileId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_users_sso_avatarFileId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_sso" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_sso_operations_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_sso_profile_sources_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "nameExplicit": true, + "columns": [ + "userId", + "providerId" + ], + "schemaTo": "public", + "tableTo": "core_users_sso", + "columnsTo": [ + "userId", + "providerId" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_sso_profile_sources_connection_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "blog_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "blog_categories_translations_itemId_blog_categories_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "blog_categories_translations_languageId_core_languages_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "blog_posts_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": false, + "columns": [ + "coverImage" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "blog_posts_coverImage_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "blog_posts", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "blog_posts_author_id_itemId_blog_posts_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "blog_posts_author_id_relatedItemId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "blog_posts", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "blog_posts_category_id_itemId_blog_posts_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "blog_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "blog_posts_category_id_relatedItemId_blog_categories_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "blog_posts", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "blog_posts_translations_itemId_blog_posts_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "blog_posts_translations_languageId_core_languages_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "forum_replies_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": false, + "columns": [ + "author" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "forum_replies_author_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": false, + "columns": [ + "topic" + ], + "schemaTo": "public", + "tableTo": "forum_topics", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "forum_replies_topic_forum_topics_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": false, + "columns": [ + "parent" + ], + "schemaTo": "public", + "tableTo": "forum_comments", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "forum_replies_parent_forum_replies_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "forum_topics_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": false, + "columns": [ + "author" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "forum_topics_author_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": false, + "columns": [ + "forum" + ], + "schemaTo": "public", + "tableTo": "core_content_containers", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "forum_topics_forum_core_content_containers_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": false, + "columns": [ + "author" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_articles_author_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_articles" + }, + { + "nameExplicit": false, + "columns": [ + "category" + ], + "schemaTo": "public", + "tableTo": "newsroom_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_articles_category_newsroom_categories_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_articles" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_bulletins", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_bulletins_translations_kgMZwrpzwwU7_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_bulletins_translations_rkkiMJQiOrEo_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_comments_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": false, + "columns": [ + "author" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_comments_author_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": false, + "columns": [ + "article" + ], + "schemaTo": "public", + "tableTo": "newsroom_articles", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_comments_article_newsroom_articles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": false, + "columns": [ + "parent" + ], + "schemaTo": "public", + "tableTo": "newsroom_comments", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_comments_parent_newsroom_comments_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_comments" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_events_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events" + }, + { + "nameExplicit": false, + "columns": [ + "primaryTag" + ], + "schemaTo": "public", + "tableTo": "newsroom_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_events_primaryTag_newsroom_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events" + }, + { + "nameExplicit": false, + "columns": [ + "category" + ], + "schemaTo": "public", + "tableTo": "newsroom_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_events_category_newsroom_categories_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_events_gallery_itemId_newsroom_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events_gallery" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_events_gallery_relatedItemId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events_gallery" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_events_related_events_itemId_newsroom_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events_related_events" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_events_related_events_0xHNSLM3JAJj_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events_related_events" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_events_sessions_itemId_newsroom_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events_sessions" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_events_tags_itemId_newsroom_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events_tags" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_events_tags_relatedItemId_newsroom_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events_tags" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_events_translations_itemId_newsroom_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_events_translations_languageId_core_languages_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_explainers", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_explainers_categories_9dOmLv3k6xDX_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_explainers_categories" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_explainers_categories_mnxKvproEUm5_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_explainers_categories" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_explainers", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_explainers_faq_itemId_newsroom_explainers_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_explainers_faq" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_explainers", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_explainers_related_explainers_TFvIU3TogSGy_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_explainers_related_explainers" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_explainers", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_explainers_related_explainers_74JhaXF5PsDV_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_explainers_related_explainers" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_explainers", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_explainers_tags_itemId_newsroom_explainers_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_explainers_tags" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_explainers_tags_relatedItemId_newsroom_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_explainers_tags" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_explainers", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_explainers_translations_hcPB0jdTm8MV_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_explainers_translations_qqggtF6jhcsZ_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_letters_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_letters" + }, + { + "nameExplicit": false, + "columns": [ + "author" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_letters_author_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_letters" + }, + { + "nameExplicit": false, + "columns": [ + "desk" + ], + "schemaTo": "public", + "tableTo": "core_content_containers", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_letters_desk_core_content_containers_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_letters" + }, + { + "nameExplicit": false, + "columns": [ + "author" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_stories_author_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": false, + "columns": [ + "animation" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_stories_animation_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": false, + "columns": [ + "category" + ], + "schemaTo": "public", + "tableTo": "newsroom_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_stories_category_newsroom_categories_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_stories" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_stories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_stories_gallery_itemId_newsroom_stories_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_stories_gallery" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_stories_gallery_relatedItemId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_stories_gallery" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_tags_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_tags" + }, + { + "nameExplicit": false, + "columns": [ + "category" + ], + "schemaTo": "public", + "tableTo": "newsroom_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "newsroom_tags_category_newsroom_categories_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_tags" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_tags_related_tags_itemId_newsroom_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_tags_related_tags" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_tags_related_tags_relatedItemId_newsroom_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_tags_related_tags" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "newsroom_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "newsroom_tags_translations_itemId_newsroom_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "newsroom_tags_translations_languageId_core_languages_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "columns": [ + "roleId", + "permission" + ], + "nameExplicit": false, + "name": "core_ai_role_permissions_pkey", + "entityType": "pks", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "columns": [ + "eventId", + "userId" + ], + "nameExplicit": false, + "name": "core_notification_receipts_pkey", + "entityType": "pks", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "columns": [ + "itemType", + "itemId" + ], + "nameExplicit": false, + "name": "core_search_popularity_pkey", + "entityType": "pks", + "schema": "public", + "table": "core_search_popularity" + }, + { + "columns": [ + "userId", + "roleId" + ], + "nameExplicit": false, + "name": "core_users_secondary_roles_userId_roleId_pk", + "entityType": "pks", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "columns": [ + "userId", + "field" + ], + "nameExplicit": false, + "name": "core_users_sso_profile_sources_pkey", + "entityType": "pks", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "blog_categories_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "blog_posts_author_id_pk", + "entityType": "pks", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "blog_posts_category_id_pk", + "entityType": "pks", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "blog_posts_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "newsroom_bulletins_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_bulletins_translations" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "newsroom_events_gallery_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_events_gallery" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "newsroom_events_related_events_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_events_related_events" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "newsroom_events_tags_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_events_tags" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "newsroom_events_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_events_translations" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "newsroom_explainers_categories_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_explainers_categories" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "newsroom_explainers_related_explainers_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_explainers_related_explainers" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "newsroom_explainers_tags_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_explainers_tags" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "newsroom_explainers_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_explainers_translations" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "newsroom_stories_gallery_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_stories_gallery" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "newsroom_tags_related_tags_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_tags_related_tags" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "newsroom_tags_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "newsroom_tags_translations" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_admin_permissions_pkey", + "schema": "public", + "table": "core_admin_permissions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_admin_sessions_pkey", + "schema": "public", + "table": "core_admin_sessions", + "entityType": "pks" + }, + { + "columns": [ + "actionKey" + ], + "nameExplicit": false, + "name": "core_ai_action_settings_pkey", + "schema": "public", + "table": "core_ai_action_settings", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_budget_periods_pkey", + "schema": "public", + "table": "core_ai_budget_periods", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_calls_pkey", + "schema": "public", + "table": "core_ai_calls", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_cost_adjustments_pkey", + "schema": "public", + "table": "core_ai_cost_adjustments", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_reservations_pkey", + "schema": "public", + "table": "core_ai_reservations", + "entityType": "pks" + }, + { + "columns": [ + "roleId" + ], + "nameExplicit": false, + "name": "core_ai_role_policies_pkey", + "schema": "public", + "table": "core_ai_role_policies", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_runs_pkey", + "schema": "public", + "table": "core_ai_runs", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_settings_pkey", + "schema": "public", + "table": "core_ai_settings", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_translation_sources_pkey", + "schema": "public", + "table": "core_ai_translation_sources", + "entityType": "pks" + }, + { + "columns": [ + "userId" + ], + "nameExplicit": false, + "name": "core_ai_user_overrides_pkey", + "schema": "public", + "table": "core_ai_user_overrides", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_containers_pkey", + "schema": "public", + "table": "core_content_containers", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_documents_pkey", + "schema": "public", + "table": "core_content_documents", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_drafts_pkey", + "schema": "public", + "table": "core_content_drafts", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_field_locks_pkey", + "schema": "public", + "table": "core_content_field_locks", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_submissions_pkey", + "schema": "public", + "table": "core_content_submissions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_file_refs_pkey", + "schema": "public", + "table": "core_content_file_refs", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_revisions_pkey", + "schema": "public", + "table": "core_content_revisions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_schedules_pkey", + "schema": "public", + "table": "core_content_schedules", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_slug_history_pkey", + "schema": "public", + "table": "core_content_slug_history", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_cron_pkey", + "schema": "public", + "table": "core_cron", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_admin_dashboard_pkey", + "schema": "public", + "table": "core_admin_dashboard", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_files_pkey", + "schema": "public", + "table": "core_files", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_files_alt_pkey", + "schema": "public", + "table": "core_files_alt", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_files_alt_analysis_pkey", + "schema": "public", + "table": "core_files_alt_analysis", + "entityType": "pks" + }, + { + "columns": [ + "fileId" + ], + "nameExplicit": false, + "name": "core_files_alt_state_pkey", + "schema": "public", + "table": "core_files_alt_state", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_languages_pkey", + "schema": "public", + "table": "core_languages", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_languages_words_pkey", + "schema": "public", + "table": "core_languages_words", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_logs_pkey", + "schema": "public", + "table": "core_logs", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_moderation_report_events_pkey", + "schema": "public", + "table": "core_moderation_report_events", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_moderation_report_reasons_pkey", + "schema": "public", + "table": "core_moderation_report_reasons", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_moderation_reports_pkey", + "schema": "public", + "table": "core_moderation_reports", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_moderators_permissions_pkey", + "schema": "public", + "table": "core_moderators_permissions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_notification_deliveries_pkey", + "schema": "public", + "table": "core_notification_deliveries", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_notification_events_pkey", + "schema": "public", + "table": "core_notification_events", + "entityType": "pks" + }, + { + "columns": [ + "key" + ], + "nameExplicit": false, + "name": "core_notification_settings_pkey", + "schema": "public", + "table": "core_notification_settings", + "entityType": "pks" + }, + { + "columns": [ + "userId" + ], + "nameExplicit": false, + "name": "core_notification_user_state_pkey", + "schema": "public", + "table": "core_notification_user_state", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_notifications_pkey", + "schema": "public", + "table": "core_notifications", + "entityType": "pks" + }, + { + "columns": [ + "pageId" + ], + "nameExplicit": false, + "name": "core_page_layouts_pkey", + "schema": "public", + "table": "core_page_layouts", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_passkey_challenges_pkey", + "schema": "public", + "table": "core_users_passkey_challenges", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_passkeys_pkey", + "schema": "public", + "table": "core_users_passkeys", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_queue_pkey", + "schema": "public", + "table": "core_queue", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_roles_pkey", + "schema": "public", + "table": "core_roles", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_search_index_pkey", + "schema": "public", + "table": "core_search_index", + "entityType": "pks" + }, + { + "columns": [ + "name" + ], + "nameExplicit": false, + "name": "core_secrets_pkey", + "schema": "public", + "table": "core_secrets", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_sessions_pkey", + "schema": "public", + "table": "core_sessions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_sessions_known_devices_pkey", + "schema": "public", + "table": "core_sessions_known_devices", + "entityType": "pks" + }, + { + "columns": [ + "name" + ], + "nameExplicit": false, + "name": "core_update_lock_pkey", + "schema": "public", + "table": "core_update_lock", + "entityType": "pks" + }, + { + "columns": [ + "componentId" + ], + "nameExplicit": false, + "name": "core_update_results_pkey", + "schema": "public", + "table": "core_update_results", + "entityType": "pks" + }, + { + "columns": [ + "url" + ], + "nameExplicit": false, + "name": "core_update_sources_pkey", + "schema": "public", + "table": "core_update_sources", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_pkey", + "schema": "public", + "table": "core_users", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_confirm_emails_pkey", + "schema": "public", + "table": "core_users_confirm_emails", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_forgot_password_pkey", + "schema": "public", + "table": "core_users_forgot_password", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_sso_operations_pkey", + "schema": "public", + "table": "core_users_sso_operations", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "blog_categories_pkey", + "schema": "public", + "table": "blog_categories", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "blog_posts_pkey", + "schema": "public", + "table": "blog_posts", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "forum_replies_pkey", + "schema": "public", + "table": "forum_comments", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "forum_topics_pkey", + "schema": "public", + "table": "forum_topics", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_articles_pkey", + "schema": "public", + "table": "newsroom_articles", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_bulletins_pkey", + "schema": "public", + "table": "newsroom_bulletins", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_categories_pkey", + "schema": "public", + "table": "newsroom_categories", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_comments_pkey", + "schema": "public", + "table": "newsroom_comments", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_events_pkey", + "schema": "public", + "table": "newsroom_events", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_events_sessions_pkey", + "schema": "public", + "table": "newsroom_events_sessions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_explainers_pkey", + "schema": "public", + "table": "newsroom_explainers", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_explainers_faq_pkey", + "schema": "public", + "table": "newsroom_explainers_faq", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_letters_pkey", + "schema": "public", + "table": "newsroom_letters", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_pages_pkey", + "schema": "public", + "table": "newsroom_pages", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_stories_pkey", + "schema": "public", + "table": "newsroom_stories", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "newsroom_tags_pkey", + "schema": "public", + "table": "newsroom_tags", + "entityType": "pks" + }, + { + "nameExplicit": true, + "columns": [ + "itemType", + "itemId", + "languageCode" + ], + "nullsNotDistinct": false, + "name": "core_search_index_item_unique", + "entityType": "uniques", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + "providerId", + "providerAccountId" + ], + "nullsNotDistinct": false, + "name": "core_users_sso_provider_account_key", + "entityType": "uniques", + "schema": "public", + "table": "core_users_sso" + }, + { + "nameExplicit": true, + "columns": [ + "userId", + "providerId" + ], + "nullsNotDistinct": false, + "name": "core_users_sso_user_provider_key", + "entityType": "uniques", + "schema": "public", + "table": "core_users_sso" + }, + { + "nameExplicit": false, + "columns": [ + "token" + ], + "nullsNotDistinct": false, + "name": "core_admin_sessions_token_unique", + "schema": "public", + "table": "core_admin_sessions", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "nullsNotDistinct": false, + "name": "core_admin_dashboard_userId_unique", + "schema": "public", + "table": "core_admin_dashboard", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "key" + ], + "nullsNotDistinct": false, + "name": "core_files_key_unique", + "schema": "public", + "table": "core_files", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "code" + ], + "nullsNotDistinct": false, + "name": "core_languages_code_unique", + "schema": "public", + "table": "core_languages", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "code" + ], + "nullsNotDistinct": false, + "name": "core_moderation_report_reasons_code_key", + "schema": "public", + "table": "core_moderation_report_reasons", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "openKey" + ], + "nullsNotDistinct": false, + "name": "core_moderation_reports_openKey_key", + "schema": "public", + "table": "core_moderation_reports", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "idempotencyKey" + ], + "nullsNotDistinct": false, + "name": "core_notification_deliveries_idempotencyKey_key", + "schema": "public", + "table": "core_notification_deliveries", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "tokenHash" + ], + "nullsNotDistinct": false, + "name": "core_users_passkey_challenges_tokenHash_key", + "schema": "public", + "table": "core_users_passkey_challenges", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "credentialId" + ], + "nullsNotDistinct": false, + "name": "core_users_passkeys_credentialId_key", + "schema": "public", + "table": "core_users_passkeys", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "token" + ], + "nullsNotDistinct": false, + "name": "core_sessions_token_unique", + "schema": "public", + "table": "core_sessions", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "publicId" + ], + "nullsNotDistinct": false, + "name": "core_sessions_known_devices_publicId_unique", + "schema": "public", + "table": "core_sessions_known_devices", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "nameCode" + ], + "nullsNotDistinct": false, + "name": "core_users_nameCode_unique", + "schema": "public", + "table": "core_users", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "name" + ], + "nullsNotDistinct": false, + "name": "core_users_name_unique", + "schema": "public", + "table": "core_users", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "email" + ], + "nullsNotDistinct": false, + "name": "core_users_email_unique", + "schema": "public", + "table": "core_users", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "token" + ], + "nullsNotDistinct": false, + "name": "core_users_confirm_emails_token_unique", + "schema": "public", + "table": "core_users_confirm_emails", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "nullsNotDistinct": false, + "name": "core_users_forgot_password_userId_unique", + "schema": "public", + "table": "core_users_forgot_password", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "token" + ], + "nullsNotDistinct": false, + "name": "core_users_forgot_password_token_unique", + "schema": "public", + "table": "core_users_forgot_password", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "tokenHash" + ], + "nullsNotDistinct": false, + "name": "core_users_sso_operations_tokenHash_key", + "schema": "public", + "table": "core_users_sso_operations", + "entityType": "uniques" + }, + { + "value": "\"intent\" IN ('link', 'import', 'sync', 'preview')", + "name": "core_users_sso_operations_intent_check", + "entityType": "checks", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "value": "\"field\" IN ('avatar', 'firstName', 'lastName')", + "name": "core_users_sso_profile_sources_field_check", + "entityType": "checks", + "schema": "public", + "table": "core_users_sso_profile_sources" + } + ], + "renames": [] +} \ No newline at end of file diff --git a/apps/api/package.json b/apps/api/package.json index 7f09552ebc..af3c45e459 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -45,8 +45,8 @@ "@types/ws": "^8.18.2", "@vitnode/blog": "workspace:*", "@vitnode/config": "workspace:*", - "@vitnode/example": "workspace:*", "@vitnode/forum": "workspace:*", + "newsroom": "workspace:*", "@vitnode/nodemailer": "workspace:*", "dotenv": "^18.0.6", "oxlint": "^1.87.0", diff --git a/apps/api/src/vitnode.api.config.ts b/apps/api/src/vitnode.api.config.ts index a76a8d4fcf..a33d6bb10c 100644 --- a/apps/api/src/vitnode.api.config.ts +++ b/apps/api/src/vitnode.api.config.ts @@ -6,7 +6,6 @@ import { GoogleSSOApiPlugin } from "@vitnode/core/api/adapters/sso/google"; import { coreRelations } from "@vitnode/core/database/relations"; // import { LocalStorageAdapter } from "@vitnode/core/api/adapters/storage/local"; import { buildApiConfig } from "@vitnode/core/vitnode.config"; -import { exampleApiPlugin } from "@vitnode/example/config.api"; import { forumApiPlugin } from "@vitnode/forum/config.api"; import { NodeCronAdapter } from "@vitnode/node-cron"; import { NodemailerEmailAdapter } from "@vitnode/nodemailer"; @@ -14,6 +13,7 @@ import { NodemailerEmailAdapter } from "@vitnode/nodemailer"; import { SupabaseStorageAdapter } from "@vitnode/supabase-storage"; import { config } from "dotenv"; import { drizzle } from "drizzle-orm/postgres-js"; +import { newsroomApiPlugin } from "newsroom/config.api"; import { i18n } from "./i18n.js"; @@ -25,7 +25,7 @@ export const POSTGRES_URL = process.env.POSTGRES_URL ?? "postgresql://root:root@localhost:5432/vitnode"; export const vitNodeApiConfig = buildApiConfig({ - plugins: [blogApiPlugin(), exampleApiPlugin(), forumApiPlugin()], + plugins: [blogApiPlugin(), forumApiPlugin(), newsroomApiPlugin()], ai: { models: [ { diff --git a/apps/web/content/docs/content-engine/admincp-article-list.webp b/apps/web/content/docs/content-engine/admincp-article-list.webp index e913bb33fdbd9a6352adbe176ed52092d974bae4..c9900371b912303a977de1e5ac29205e48de29f7 100644 GIT binary patch literal 93144 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ʴ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 i+ar~19 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 diff --git a/apps/web/content/docs/content-engine/admincp-create-dialog.webp b/apps/web/content/docs/content-engine/admincp-create-dialog.webp index 83579b9588a75c558a672da3e3f684ccfa5c409b..868e0b82a38ed9145abb63084f234a4238f12bec 100644 GIT binary patch literal 16690 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

Uoxxg;y{IawTO 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

`iKWxi;GXD(7zq2_=dm8F&mPYezqt z?=U4fosWHy-}XA+9_{iNY}x0Ps7T)`Z=U1j%StFM$l-%NY`&YdP()R!0^QdTefvt} zp0rqSawIf7(xjl|#I4-wTH#l<^o@W$uc&&m$BrgdilB{9l24l#q3J0pxhz`+@3con zRP0!O)=!No(}x58CbflZzP#!R1Mgb{hBkqJ%m!W=DRqj5iamb5B*<1ZxX0Il+QZy3 zIK1PH)*U51`~;AD!Q4I}EA^O08*oPJgA&v4_Oek>{MZOR>F&P|w88VXVy29@L~dZj zL){l9=@{kYXexMDB1qWmTFR>stEC3cXXOJ8%L>P{hU2i<@r10jVLp+Wwb&Fc*YfdJ0#U?W)`CH|_f)zs=@J;~ zYqbs)I=5at(|fj|bi{SN4l+5e#VNhar@)vp_!|>f7X|T@Ws1m{tzWm#?A^y(sv_>@Pp zFVTOG_OiLR8O6g6O?UHJBx)0n z@<VLwQkEumV2Oc#=D z?%|hx44ZC*=nZ~CXS1aZhkI&FgEmMnx5mR4TO^u#+R&vBk99~6S2Wgf?<8t`F$FD| z$f5)J=E3na98E57IC=JQqdZdhhz)d;1=(DXguNQ0lGLWVwF_@uUp@2%q41T-vyZDl z&O`uXULh-{@IV1;<;1ty8MPCEg9}X{|$;=QXlH3+A)LOlWo_I+M=?fmRa_;yCFO)bRuE zUgthx=|#TIc~x<{OF3YcT4P*s8ZM5~88k$HPFm!kE4%4dV%g@HE{apnqQ-QjXifS) z$Wra*;vP)G6-Y)|w@b)M48LhhpGe|j1P!gdXNCw`QPSBGljoy(cX2<7)7R9yAU zewqEsY@BK!;M=w`rMsJuiZlxhBjiorJDv?yOr4#FL%Z9NdE`Qk;Hbbdc3keGv#~Gf zSH3AMsz$`Jg;0MLnZDBt*EjH+Xsb*Tu3C?!TrNA!5uheUd!knTv8GNFGaWn05Ef5< zpKqvi1Az4v4)ePgmX2Epe;?YO;n&;8f(U-^!_yB{VjvjVo?Orm-+iulv1v95OU{oyo#6<0$y3#KyO8S@ z!7aS>5Fa!%v8z<3#YF=+O@+w}&Y1DQ5@4l8jYbB&F}KDlQk^@HARA zQdcAr1`v4tf7y6pE8*Olc%$fu&Z@q$#lBNeYeJKAoxK8Z_Rj;{0|6lXhyZMWKVTXZ G@P7aRZtNQX diff --git a/apps/web/content/docs/content-engine/admincp.mdx b/apps/web/content/docs/content-engine/admincp.mdx index 896e60581a..93169a884f 100644 --- a/apps/web/content/docs/content-engine/admincp.mdx +++ b/apps/web/content/docs/content-engine/admincp.mdx @@ -12,15 +12,15 @@ import rowActions from "./admincp-row-actions.webp"; Every content type registered in the plugin's `src/admin/content.tsx` gets an AdminCP list and a create and edit form without any UI code. Most changes are options in the definition's `admin` block. For anything the options cannot express, you swap one cell, one field or the whole form layout for your own component. -This page uses the example plugin's `example.article`. Its screen lives at `/admin/content/example/articles`. +This page uses the newsroom plugin's `newsroom.story`. Its screen lives at `/admin/content/newsroom/stories`. ## Choose list columns, search and sorting `admin.list` drives the list: -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts" admin: { - path: "example/articles", + path: "newsroom/stories", titleField: "title", list: { columns: [ @@ -46,7 +46,7 @@ admin: { withoutBackground className="*:max-w-full" src={articleList} - alt="The Articles list in the AdminCP with Status, Title, Slug, Reference code, Category, Author, Animation, Published at and Updated columns and a search box" + alt="The newsroom Stories list in the AdminCP with Status, Title, Slug, Reference code, Category, Author, Animation, Published at and Updated columns, a search box and a Status filter" /> | Option | What it does | @@ -70,7 +70,7 @@ Every mistake here, such as an unknown field or a gallery in `columns`, throws a | `titleField` | First shared text or textarea field | Names a record in toasts, dialogs and relation pickers. `null` means the type has no title. | | `colorField` | none | A shared field with a color, shown as a swatch next to the title. The blog's categories use it. | | `navigation` | `true` | Set it to `false` to keep the screen but drop its sidebar link. | -| `permissionModule` | The id without the plugin part | Staff permission module name, for example `article` for `example.article`. | +| `permissionModule` | The id without the plugin part | Staff permission module name, for example `story` for `newsroom.story`. | ## Bulk actions @@ -111,12 +111,12 @@ By default the form shows every field except `field.blocks()`, one after another withoutBackground className="*:max-w-full" src={createDialog} - alt="The Create Article dialog with Title, Slug, Reference code, Excerpt and Views fields" + alt="The Create Story dialog with Title, Slug, Reference code, Excerpt and Views fields" /> -To pick and order fields, set `admin.form.fields`. To group them into titled cards, use `admin.form.sections` instead: +To pick and order fields, set `admin.form.fields`. To group them into titled cards, use `admin.form.sections` instead. For the newsroom's stories, that could look like this: -```ts title="plugins/example/src/content/article.ts" +```ts title="Example: story form sections" admin: { form: { sections: [ @@ -134,13 +134,13 @@ admin: { The heading and an optional description come from the plugin's locale file, at `content..form.`. Without a message, the heading is the humanized name ("Main"). -```json title="plugins/example/src/locales/en.json" +```json title="Example: section headings in en.json" { - "@vitnode/example": { + "newsroom": { "content": { - "article": { + "story": { "form": { - "main": { "title": "Article", "desc": "What readers see first." }, + "main": { "title": "Story", "desc": "What readers see first." }, "media": { "title": "Media" } } } @@ -235,7 +235,7 @@ Add `skeleton` when the component is bigger than its field kind suggests, so the For a layout the options cannot express, such as a main column with a sidebar, pass `forms.layout` to `contentTypeAdmin`. A custom layout is used only in page mode, so set `create.mode` and `edit.mode` to `"page"` first. -```tsx title="plugins/example/src/views/admin/article/form-layout.tsx" +```tsx title="Example: a story form layout" import type { ContentFormLayoutProps } from "@vitnode/core/lib/plugin"; import { @@ -252,7 +252,7 @@ import { const SIDEBAR_FIELDS = ["category", "author", "featured", "noIndex"]; -export const ArticleFormLayout = ({ mode }: ContentFormLayoutProps) => ( +export const StoryFormLayout = ({ mode }: ContentFormLayoutProps) => ( <> @@ -276,10 +276,11 @@ export const ArticleFormLayout = ({ mode }: ContentFormLayoutProps) => ( ); ``` -```tsx title="plugins/example/src/admin/content.tsx" +```tsx title="Example: register the layout in src/admin/content.tsx" contentTypeAdmin({ - ...exampleArticleNav, - forms: { layout: ArticleFormLayout }, // [!code ++] + definition: storyContentType, + icon: , + forms: { layout: StoryFormLayout }, // [!code ++] }), ``` @@ -398,6 +399,6 @@ A few things that keep it smooth: ## Check the result -Save the definition and open **AdminCP → Example → Articles**. `pnpm dev` reloads both the screens and the API, which validates sorting and form input against the same definition. +Save the definition and open **AdminCP → Newsroom → Stories**. `pnpm dev` reloads both the screens and the API, which validates sorting and form input against the same definition. Next, give the screens the permissions they need in [Production checklist](/docs/content-engine/production), or read every option in the [reference](/docs/content-engine/reference). diff --git a/apps/web/content/docs/content-engine/approval-notices-rejected.webp b/apps/web/content/docs/content-engine/approval-notices-rejected.webp new file mode 100644 index 0000000000000000000000000000000000000000..72ead32dd078808018cafe951e3e5e8a90a2bbb0 GIT binary patch literal 76426 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/content-engine/approval-notices.mdx b/apps/web/content/docs/content-engine/approval-notices.mdx new file mode 100644 index 0000000000..af60e43da7 --- /dev/null +++ b/apps/web/content/docs/content-engine/approval-notices.mdx @@ -0,0 +1,285 @@ +--- +title: Approval notices +description: Extend a VitNode Content Engine edit page so authors see pending and rejected submissions. Open the form on the proposed values, show a notice from the approval field, and pick the right message after a save that waits for a moderator. +icon: Hourglass +implementation: + objective: Show authors on an edit page whether their change waits for a moderator or was declined. + decisions: + - Which edit page? Offer edit pages of content types filed in a container whose definition has `policies`; without one, nothing ever waits and this guide does not apply. + constraints: + - Read `approval` from `GET /{id}/edit` and from every `PATCH /{id}` answer; never infer it from `status` alone. + - Open a pending edit on `approval.values`, parsed with Zod, and fall back to `values` for every field it lacks. + - Derive notices from `approval` only; never from a URL parameter or from `status` alone. + related: + - title: Approvals + href: /docs/content-engine/approvals + - title: Publishing rules + href: /docs/content-engine/container-policies + - title: Edit form + href: /docs/content-engine/public-write-edit +--- + +import { ImgDocs } from "@/components/fumadocs/img"; +import pending from "./public-write-edit-pending.webp"; +import rejected from "./approval-notices-rejected.webp"; + +When a container's [publishing rules](/docs/content-engine/container-policies) hold edits for a moderator, a successful save does not mean the change is live. This guide adds what an author needs on the edit page: the form opens on their pending proposal, a notice says what is waiting or why it was declined, and the toast after a save tells the truth. + +The example is the Forum plugin's edit page, `plugins/forum/src/pages/topic-edit-page.tsx`. The code below is excerpts from that file. + +## Before you begin + +Approval only exists for records filed in a container whose definition has `policies`. Check that your content type has all three: + +- **A container with policies.** The forum's `forumContainers` in `plugins/forum/src/content/forums.ts` sets `policies: { defaults: { ... } }`. +- **A record filed in it.** `forum.topic` has `forum: field.container({ definition: forumContainers, required: true })`. A comment can inherit its topic's forum with `field.relation({ target: () => topicContentType, container: true })`. +- **A rule that waits.** In the AdminCP, open `/admin/containers/forum/forums`, choose **Publishing** in a forum's row menu, set **Edits to published posts** to **Wait for approval** for topics and choose **Save rules**. + +You also need an edit page that loads `GET /{id}/edit` and saves with `useContentPublicWrite`, like the [Edit form](/docs/content-engine/public-write-edit), and a member who is not a moderator in that forum. The excerpts use two names from such a page: + +- **`EditableTopic`** is the record type the loader returns, `Extract["record"]`, declared like `EditableArticle` in [Load the editable values](/docs/content-engine/public-write-edit#load-the-editable-values). +- **`TopicFormValues`** is the values type of the shared form, exported from `plugins/forum/src/pages/topic-form.tsx` like `ArticleFormValues` from the article form. + +The newsroom tutorial's articles are not filed in a container, so `approval` is always `null` for them. A content type without a container keeps its drafts as plain drafts, even with `create.status: "draft"`; see [Drafts and approval](/docs/content-engine/approvals#drafts-and-approval). + +## Three kinds of values + +With approval on, an edit page handles three different things. Keep them apart, or the author will think a change is live when it is not: + +| What | Where it comes from | Readers see it | +| --- | --- | --- | +| **Live values** | `record.values` from `GET /{id}/edit` and `PATCH /{id}` | Yes | +| **Proposed values** | `record.approval.values`, when `approval.status` is `"pending"` and `approval.kind` is `"edit"` | No, until a moderator approves | +| **A save that waits** | `PATCH /{id}` answers `200` with `approval.status: "pending"`; `values` is still the live record | No | + + + + + +### Open the form on the proposal + +When the author reopens a page whose edit is pending, the form should show what they sent, not the live text. `approval.values` is untyped, so parse the fields the form knows and fall back to the live value for the rest: + +```tsx title="plugins/forum/src/pages/topic-edit-page.tsx (excerpt)" +import { zodRichTextDocument } from "@vitnode/core/content"; +import { z } from "zod"; + +import type { TopicFormValues } from "./topic-form"; + +const zodProposedValues = z + .object({ + body: zodRichTextDocument.optional(), + title: z.string().optional(), + }) + .catch({}); + +const formValuesOf = (record: EditableTopic): TopicFormValues => { + const { approval } = record; + const proposed = + approval?.status === "pending" && approval.kind === "edit" + ? zodProposedValues.parse(approval.values ?? {}) + : {}; + + return { + body: proposed.body ?? record.values.body, + title: proposed.title ?? record.values.title, + }; +}; +``` + +Use `formValuesOf(record)` wherever the basic edit form used `record.values` for its defaults. + + + + + +### Show a notice from the server's answer + +`approval` is `null` when nothing waits. Otherwise it is a pending submission, or a rejected one nothing has replaced yet. The notice reads that object and nothing else: + +```tsx title="plugins/forum/src/pages/topic-edit-page.tsx (excerpt)" +import type { ContentApprovalState } from "@vitnode/core/content"; + +import { + Alert, + AlertDescription, + AlertTitle, +} from "@vitnode/core/components/ui/alert"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { HourglassIcon, XCircleIcon } from "lucide-react"; +import { useTranslations } from "use-intl"; + +import { FORUM_PENDING_HREF } from "./forum-links"; + +/** Reads only the server's `approval`: neither the URL nor a draft status adds a notice. */ +const ApprovalNotice = ({ + approval, +}: { + /** Only what the notice reads, so the edit route's JSON answer fits as is. */ + approval: null | Pick; +}) => { + const t = useTranslations("@vitnode/forum.topics.approval"); + + if (approval?.status === "rejected") { + return ( + } variant="destructive"> + {t("rejected.title")} + + {approval.reason + ? t("rejected.reason", { reason: approval.reason }) + : t("rejected.desc")} + + + ); + } + + if (approval?.status === "pending" && approval.kind === "edit") { + return ( + } variant="info"> + {t("pending_edit.title")} + {t("pending_edit.desc")} + + ); + } + + if (approval?.status === "pending" && approval.kind === "create") { + return ( + } variant="info"> + {t("pending_create.title")} + + {t("pending_create.desc")}{" "} + + {t("pending_create.link")} + + + + ); + } + + return null; +}; +``` + +- **Rejected** shows the moderator's reason when there is one. The author can edit and save again, which opens a new submission. +- **Pending edit** needs `status: "pending"` and `kind: "edit"`, and says readers still see the published version. +- **Pending create** needs `status: "pending"` and `kind: "create"`, which means a new topic waits for its first approval. It links to the author's list of posts awaiting approval, `/forum/me/pending`. +- **Nothing else.** `approval: null` renders no notice, even for a draft. A draft is not a submission, so the notice never looks at `status`, and it never reads the URL. + +The approval state comes from the server. The route's loader awaits `GET /{id}/edit` before the page renders, and its answer carries `approval`. Every save replaces it with the one `PATCH /{id}` returns. + + + + + +### Keep the answer's state after a save + +`PATCH /{id}` answers with the record's `approval`, `slug` and `status`. Keep them in state, so the notice and the **View topic** link follow every save, and pick the toast from `approval`: + +```tsx title="plugins/forum/src/pages/topic-edit-page.tsx (excerpt)" +import { useQueryClient } from "@tanstack/react-query"; +import { useState } from "react"; +import { toast } from "sonner"; + +import { invalidateForumTopics } from "./forum-queries"; + +// Inside the form component, next to `useContentPublicWrite`: +const queryClient = useQueryClient(); +const [current, setCurrent] = useState({ + approval: record.approval, + slug: record.slug, + status: record.status, +}); +const [defaults, setDefaults] = useState(() => formValuesOf(record)); + +// In onSubmit, after `const updated = await write.submit(...)`: +if (!updated) return; + +setCurrent({ + approval: updated.approval, + slug: updated.slug, + status: updated.status, +}); +setDefaults(values); +form.reset(values); +await invalidateForumTopics(queryClient); + +if (updated.approval?.status === "pending") { + toast.info(t("edit.pending.title"), { description: t("edit.pending.desc") }); +} else { + toast.success(t("edit.success.title"), { + description: t("edit.success.desc", { title: values.title }), + }); +} +``` + +Render `` above `{write.conflict}` and the form. `invalidateForumTopics` refreshes the forum's cached topic lists; in your plugin, invalidate your own list's query key, as the [Edit form](/docs/content-engine/public-write-edit#update-the-form-and-the-cached-lists) does. The server checks a proposal against the record's `version` like any edit, so the conflict alert keeps working. + + + + + +### Add the labels + +The forum keeps the notice labels under `topics.approval` and the toast under `topics.edit` in `plugins/forum/src/locales/en.json`: + +```json title="plugins/forum/src/locales/en.json (excerpt)" +{ + "@vitnode/forum": { + "topics": { + "approval": { + "rejected": { + "title": "A moderator declined this", + "desc": "Your submission was not approved. You can edit it and send it again.", + "reason": "Reason: {reason}" + }, + "pending_edit": { + "title": "Your changes are waiting for approval", + "desc": "Readers still see the published version. You are looking at your proposed changes." + }, + "pending_create": { + "title": "Waiting for a moderator", + "desc": "Your topic goes live as soon as a moderator approves it. You can still polish it here.", + "link": "See all your posts awaiting approval." + } + }, + "edit": { + "pending": { + "title": "Sent for approval", + "desc": "A moderator will review your changes. Readers see the published version until then." + }, + "success": { "title": "Topic saved", "desc": "\"{title}\" is up to date." } + } + } + } +} +``` + + + + + +## Check the result + +Sign in as a member who wrote a published topic in the forum that waits for edits, and open `/forum/topics/{id}/edit`. + +1. Change the title and click **Save changes**. **Sent for approval** appears, the notice says your changes wait, and the form keeps your new title. The topic's public page still shows the old title. +2. Reload the edit page. The form opens on your proposal, not on the live title. + + + +3. As a moderator with `can_approve` in that forum, reject the submission with a reason in the [ModCP](/docs/dev/moderation/review-approvals). Reload the author's edit page. The notice shows the reason, and the form shows the live text again. + + + +4. Save another change and approve it instead. After a reload the notice is gone, and both the form and the public page show the new title. +5. Open a topic with nothing pending, then one that staff unpublished in the AdminCP, which is a draft with `approval: null`. Neither shows a notice, even with `?submitted=1` added to the URL. Older Forum links carried that flag, and the edit page now ignores it. diff --git a/apps/web/content/docs/content-engine/approvals.mdx b/apps/web/content/docs/content-engine/approvals.mdx index a2c0aa2c9f..226e2ddaae 100644 --- a/apps/web/content/docs/content-engine/approvals.mdx +++ b/apps/web/content/docs/content-engine/approvals.mdx @@ -25,6 +25,19 @@ The server decides from the effective policy of the record's container. The clie A proposal is validated like a normal edit before it is stored, so a moderator never reviews something that could not be saved. +## Drafts and approval + +A draft and a pending submission are different states. Check both `status` and `approval` in every write response: + +| State | `status` | `approval` | Readers see it | +| --- | --- | --- | --- | +| **Published** | `"published"` | `null` | Yes | +| **Draft, nothing submitted** | `"draft"` | `null` | No, and no moderator is asked | +| **Pending approval** | `"draft"` for a new record, `"published"` for a pending edit | `{ status: "pending", ... }` | No, until a moderator approves | +| **Rejected** | unchanged | `{ status: "rejected", reason, ... }` | Only what was already published | + +A submission only opens for a record filed in a container whose definition has `policies`, either through its own `field.container()` or a `field.relation({ container: true })` to a record that has one. In that case `publicWrite.create.status: "draft"` is the fallback for `publish: "approve"`. Without a container, `create.status: "draft"` stores a plain draft with `approval: null`. It stays private until staff publish it in the AdminCP, and nobody is told to review it. + Some people skip the queue. A moderator holding `can_approve` in the container publishes and edits their own posts immediately, and so does a root role. A moderator editing through `can_edit` always applies the edit at once, even to someone else's record. Those permissions are [scoped to containers](/docs/dev/moderation/scoped-permissions#container-scoped-permissions). AdminCP staff work outside this flow: their edits apply directly, as always. @@ -92,40 +105,10 @@ Each item has `kind`, `status`, `title`, `contentTypeId`, `itemId`, the containe Readers never see a pending record, so the author needs to hear what happened. Three places cover it, all from the `approval` object: -1. **After posting.** When `record.approval?.status === "pending"`, send the author to the record's edit page instead of its public page, which answers `404` until approval. See [Public create form](/docs/content-engine/public-write-frontend#when-a-post-waits-for-a-moderator). -2. **On the edit page.** `GET /{id}/edit` returns the pending or rejected submission. Show a notice above the form. The Forum plugin's `topic-edit-page.tsx` does it like this: - -```tsx title="plugins/forum/src/pages/topic-edit-page.tsx" -const ApprovalNotice = ({ approval, status }: { approval: ContentApprovalState | null; status: string }) => { - const t = useTranslations("@vitnode/forum.topics.approval"); - - if (approval?.status === "rejected") { - return ( - - {t("rejected.title")} - - {approval.reason ? t("rejected.reason", { reason: approval.reason }) : t("rejected.desc")} - - - ); - } - - if (approval?.status === "pending" && approval.kind === "edit") { - return {t("pending_edit.title")}; - } - - if (status === "draft" && approval?.status === "pending") { - return {t("pending_create.title")}; - } - - return null; -}; -``` - +1. **After posting.** When `record.approval?.status === "pending"`, send the author to the record's edit page instead of its public page, which answers `404` until approval. See [Create form](/docs/content-engine/public-write-frontend#write-the-page). +2. **On the edit page.** `GET /{id}/edit` returns the pending or rejected submission. Open the form on the proposal and show a notice above it. [Approval notices](/docs/content-engine/approval-notices) builds this on the Forum plugin's edit page. 3. **In a "my submissions" list.** `GET /moderation/approvals/mine`, shown above, lists everything the author sent. The forum renders it at `/forum/me/pending`. -For a pending edit, open the form on `approval.values`, the proposal, instead of the live text, so the author keeps editing what they sent. - ## What a decision does A moderator approves or rejects from the ModCP or through the [approval routes](/docs/dev/moderation/reference#approval-routes). @@ -154,7 +137,7 @@ A listener on `content.approval.rejected` is a good place to tell the author why ## Check the result -In the AdminCP, set a forum's policy to **Approve** for new topics, as in [Publishing policies](/docs/content-engine/container-policies). Sign in as a member and start a topic there. You land on the topic's edit page with the waiting notice, and the topic stays out of the forum until a moderator approves it in the [ModCP](/docs/dev/moderation/review-approvals). +In the AdminCP, set a forum's policy to **Approve** for new topics, as in [Publishing rules](/docs/content-engine/container-policies). Sign in as a member and start a topic there. You land on the topic's edit page with the waiting notice, and the topic stays out of the forum until a moderator approves it in the [ModCP](/docs/dev/moderation/review-approvals). +export const latestStoriesQuery = () => queryOptions({ - queryKey: ['@vitnode/example', 'articles', 'latest'], + queryKey: ['newsroom', 'stories', 'latest'], queryFn: async () => { const response = await fetcher({ - plugin: '@vitnode/example', + plugin: 'newsroom', method: 'get', - module: 'content/articles', + module: 'content/stories', path: '/', args: { query: { first: 5 } }, }) if (response.status !== 200) { - throw new Error(`Loading articles answered ${response.status}.`) + throw new Error(`Loading stories answered ${response.status}.`) } const { edges } = await response.json() @@ -66,7 +66,7 @@ export const latestArticlesQuery = () => export const route = defineRoute({ load: async ({ context }) => { await context.queryClient.query({ - ...latestArticlesQuery(), + ...latestStoriesQuery(), staleTime: 60_000, }) }, @@ -75,7 +75,7 @@ export const route = defineRoute({ Each server render starts with an empty query client, so a full page load is always fresh. The `staleTime` only decides how long a visitor's open tab reuses the list during client-side navigation. `staleTime: "static"` keeps it until the tab reloads. -Publishing in the AdminCP refreshes the AdminCP's own list, item and search queries. It cannot reach a visitor's browser, so pick a `staleTime` you are happy to wait out. For your own write routes, call `queryClient.invalidateQueries({ queryKey: ["@vitnode/example", "articles"] })` after the write. +Publishing in the AdminCP refreshes the AdminCP's own list, item and search queries. It cannot reach a visitor's browser, so pick a `staleTime` you are happy to wait out. For your own write routes, call `queryClient.invalidateQueries({ queryKey: ["newsroom", "stories"] })` after the write. Public routes also send an `x-vitnode-cache-tags` header naming the record they read, such as `content:blog.post:item:3`, or the content type for a list. The page cache stores a page with these tags and invalidates it after every write, hard for a hide, delete, unpublish or slug change. [How cached pages stay fresh](/docs/dev/cache/pages-invalidation#content-engine-invalidation) explains the rules. @@ -83,24 +83,24 @@ Public routes also send an `x-vitnode-cache-tags` header naming the record they When a front end caches public reads under tags, it needs to know which tags a write affects. `@vitnode/core/content` exports pure string builders for that. They read nothing and need no server: -| Builder | Example for `example.article` | -| --------------------------------------------------- | ------------------------------------------------------- | -| `contentPublicListTag(typeId, locale?)` | `content:example.article:list` | -| `contentPublicItemTag(typeId, id, locale?)` | `content:example.article:item:3` | -| `contentPublicSlugTag(typeId, slug, locale?)` | `content:example.article:slug:hello-content-engine` | -| `contentDeliveryTag(typeId, id, locale?)` | `content:example.article:delivery:3` | -| `contentDeliveryRedirectTag(typeId, slug, locale?)` | `content:example.article:redirect:hello-content-engine` | -| `contentDeliverySitemapTag(typeId, locale?)` | `content:example.article:sitemap` | +| Builder | Example for `newsroom.story` | +| --------------------------------------------------- | ------------------------------------------------------ | +| `contentPublicListTag(typeId, locale?)` | `content:newsroom.story:list` | +| `contentPublicItemTag(typeId, id, locale?)` | `content:newsroom.story:item:3` | +| `contentPublicSlugTag(typeId, slug, locale?)` | `content:newsroom.story:slug:hello-content-engine` | +| `contentDeliveryTag(typeId, id, locale?)` | `content:newsroom.story:delivery:3` | +| `contentDeliveryRedirectTag(typeId, slug, locale?)` | `content:newsroom.story:redirect:hello-content-engine` | +| `contentDeliverySitemapTag(typeId, locale?)` | `content:newsroom.story:sitemap` | -A locale goes after the kind, so a localized type's Polish list is `content:example.localized-article:list:pl`. An id goes in as text, so a [uuid or bigint](/docs/content-engine/id-strategy) record's item tag carries its exact UUID or decimal string. +A locale goes after the kind, so a localized type's Polish list is `content:newsroom.bulletin:list:pl`. An id goes in as text, so a [uuid or bigint](/docs/content-engine/id-strategy) record's item tag carries its exact UUID or decimal string. -`contentInvalidationTags` turns a description of one write into the exact tags to expire. Publishing article `3` returns all six tags above: +`contentInvalidationTags` turns a description of one write into the exact tags to expire. Publishing story `3` returns all six tags above: ```ts title="revalidate.ts" import { contentInvalidationTags } from '@vitnode/core/content' const tags = contentInvalidationTags({ - contentTypeId: 'example.article', + contentTypeId: 'newsroom.story', id: 3, slugs: ['hello-content-engine'], wasPublic: false, @@ -127,7 +127,7 @@ VitNode then sends a `POST` to `{origin}/api/vitnode/content/revalidate` in thes | Change | Notifies origins | | ------------------------------------------------------------------------------------------- | ---------------------------------------------- | -| A [scheduled](/docs/content-engine/editorial#schedule-publishing) publish or unpublish runs | Yes | +| A [scheduled](/docs/content-engine/editorial-scheduling) publish or unpublish runs | Yes | | A record is [hidden or unhidden](/docs/content-engine/content-visibility) | Yes, when that changes what the public can see | | A publish, unpublish, edit or delete from the AdminCP or the API | No | diff --git a/apps/web/content/docs/content-engine/container-frontend.mdx b/apps/web/content/docs/content-engine/container-frontend.mdx index b3aa2b97f4..a29055bac2 100644 --- a/apps/web/content/docs/content-engine/container-frontend.mdx +++ b/apps/web/content/docs/content-engine/container-frontend.mdx @@ -1,16 +1,16 @@ --- -title: Containers on the frontend -description: Read Content Engine containers with the typed fetcher, render a nested board tree, list the records of a container and its subcontainers with includeDescendants, and let members create content inside a container through publicWrite. +title: Container pages +description: Read Content Engine containers with the typed fetcher, render a nested desk tree, list the records of a container and its subcontainers with includeDescendants, and let members create content inside a container through publicWrite. icon: AppWindow --- -This guide builds the member-facing side of the example plugin's boards: a `/boards` page with the nested board tree, a `/boards/:slug` page that lists the discussions of a board and every board below it, and a board picker on the "Start a discussion" form. +This guide builds the member-facing side of the newsroom plugin's desks: a `/desks` page with the nested desk tree, a `/desks/:slug` page that lists the letters to the editor sent to a desk and every desk below it, and a desk picker on the "Write a letter" form. -The finished pages are in `plugins/example/src/pages/`, in the `board-*` and `discussion-*` files. The code below is the same, with some styling trimmed. +The finished pages are in `plugins/newsroom/src/pages/`, in the `desk-*` and `letter-*` files. The code below is the same, with some styling trimmed. ## Before you begin -You need a container collection with `publicApi`, and a content type whose `field.container()` is public, filterable and writable on create, as set up in [Containers](/docs/content-engine/containers#add-a-container-collection). The example's collection has `publicApi.path: "boards"`, so the fetcher's module is `content/boards`. +You need a container collection with `publicApi`, and a content type whose `field.container()` is public, filterable and writable on create, as set up in [Containers](/docs/content-engine/containers#add-a-container-collection). The newsroom's collection has `publicApi.path: "desks"`, so the fetcher's module is `content/desks`. The collection's public routes are read-only and need no session: @@ -27,43 +27,43 @@ Each item is `{ id, parentId, name, slug, position, depth, metadata }`, where `m ### Add the routes -Register the two board pages in `src/routes.ts`, and give the create page a `search` parser so it can read `?board=`. A `pendingComponent` is drawn while the loader runs, so import it directly rather than through `lazy()`: +Register the two desk pages in `src/routes.ts`, and give the create page a `search` parser so it can read `?desk=`. A `pendingComponent` is the fallback while a page suspends, not a navigation screen. Navigations keep the current page and show the top progress bar. It can render before the page's chunk arrives, so import it directly rather than through `lazy()`: -```ts title="plugins/example/src/routes.ts" +```ts title="plugins/newsroom/src/routes.ts" // [!code ++:4] import { FeedPendingSkeleton, RoutePendingSkeleton, } from "@vitnode/core/tanstack/pending"; -import { boardSearch } from "./pages/board-search"; // [!code ++] -import { discussionNewSearch } from "./pages/discussion-search"; // [!code ++] +import { deskSearch } from "./pages/desk-search"; // [!code ++] +import { letterNewSearch } from "./pages/letter-search"; // [!code ++] export const routes = definePluginRoutes([ // [!code ++:13] - page("/boards", { - component: lazy(() => import("./pages/boards-page")), - messages: ["@vitnode/example.boards"], + page("/desks", { + component: lazy(() => import("./pages/desks-page")), + messages: ["newsroom.desks"], pendingComponent: RoutePendingSkeleton, }), - page("/boards/:slug", { - component: lazy(() => import("./pages/board-page")), - messages: ["@vitnode/example.boards"], + page("/desks/:slug", { + component: lazy(() => import("./pages/desk-page")), + messages: ["newsroom.desks"], pendingComponent: FeedPendingSkeleton, - search: boardSearch, + search: deskSearch, }), - page("/discussions/new", { - component: lazy(() => import("./pages/discussion-new-page")), - messages: ["@vitnode/example.discussions"], + page("/letters/new", { + component: lazy(() => import("./pages/letter-new-page")), + messages: ["newsroom.letters"], requires: "authenticated", - search: discussionNewSearch, // [!code ++] + search: letterNewSearch, // [!code ++] }), ]); ``` -`boardSearch` keeps a valid `cursor` for paging through discussions, and `discussionNewSearch` keeps a positive `board` id. Both are small functions in `board-search.ts` and `discussion-search.ts`. The strings live under `@vitnode/example.boards` in `src/locales/en.json`. +`deskSearch` keeps a valid `cursor` for paging through letters, and `letterNewSearch` keeps a positive `desk` id. Both are small functions in `desk-search.ts` and `letter-search.ts`. The strings live under `newsroom.desks` in `src/locales/en.json`. @@ -71,41 +71,51 @@ export const routes = definePluginRoutes([ ### Load the tree -Create a helper that reads every board. The list comes back in tree order, flat, so one request loads the whole tree: +Create a helper that reads every desk. The list comes back in tree order, flat, so one request loads the whole tree: -```ts title="plugins/example/src/pages/boards-data.ts" +```ts title="plugins/newsroom/src/pages/desks-data.ts" import { fetcher } from "@vitnode/core/tanstack/fetcher"; import { manifest } from "@/manifest.gen"; -export const fetchBoards = async () => { +export const fetchDesks = async () => { const res = await fetcher({ plugin: manifest.id, method: "get", - module: "content/boards", + module: "content/desks", path: "/", args: { query: {} }, }); - if (res.status !== 200) throw new Error("Loading the boards failed."); + if (res.status !== 200) throw new Error("Loading the desks failed."); const { items } = await res.json(); return items; }; -export type Board = Awaited>[number]; +export type Desk = Awaited>[number]; const HEX_COLOR = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i; -export const boardColor = (board: Pick): null | string => - typeof board.metadata.color === "string" && - HEX_COLOR.test(board.metadata.color) - ? board.metadata.color +export const deskColor = (desk: Pick): null | string => + typeof desk.metadata.color === "string" && HEX_COLOR.test(desk.metadata.color) + ? desk.metadata.color : null; ``` -`Board` is inferred from the API, so `board.metadata.color` is typed as `string | null` from the definition's fields, and `board.metadata.locked` is a compile error because `locked` is not public. `boardColor` accepts only a hex value before it goes into a `style` attribute, because an admin typed it. +`Desk` is inferred from the API, so `desk.metadata.color` is typed as `string | null` from the definition's fields, and `desk.metadata.locked` is a compile error because `locked` is not public. `deskColor` accepts only a hex value before it goes into a `style` attribute, because an admin typed it. + +The pages read the list through one TanStack Query entry, so the desks page, the letter form and a desk page share it: + +```ts title="plugins/newsroom/src/pages/desk-queries.ts (excerpt)" +export const desksQueryOptions = () => ({ + meta: LOADER_DATA_QUERY_META, + queryFn: fetchDesks, + queryKey: deskQueryKeys.desks(), + staleTime: RECORD_STALE_TIME, +}); +``` @@ -115,16 +125,18 @@ export const boardColor = (board: Pick): null | string => `contentContainerTree` from `@vitnode/core/content` nests a tree-ordered list: each node gets a `children` array. Render it recursively as nested lists inside a labelled `nav`, so screen readers announce the structure: -```tsx title="plugins/example/src/pages/board-tree.tsx" +```tsx title="plugins/newsroom/src/pages/desk-tree.tsx" import type { ContentContainerTreeNode } from "@vitnode/core/content"; -import type { Board } from "./boards-data"; +import { HrefLink } from "@vitnode/core/tanstack/link"; -import { boardHref } from "./board-search"; -import { boardColor } from "./boards-data"; +import type { Desk } from "./desks-data"; -export const BoardColorDot = ({ board }: { board: Board }) => { - const color = boardColor(board); +import { deskHref } from "./desk-search"; +import { deskColor } from "./desks-data"; + +export const DeskColorDot = ({ desk }: { desk: Desk }) => { + const color = deskColor(desk); return ( { ); }; -const BoardTreeItems = ({ +const DeskTreeItems = ({ nodes, }: { - nodes: ContentContainerTreeNode[]; + nodes: ContentContainerTreeNode[]; }) => (

); -export const BoardTree = ({ +export const DeskTree = ({ label, nodes, }: { label: string; - nodes: ContentContainerTreeNode[]; + nodes: ContentContainerTreeNode[]; }) => ( ); ``` @@ -187,143 +199,176 @@ export const BoardTree = ({ -### Add the boards page +### Add the desks page -The route's `load` fetches and nests the tree, and the page shows it, or an empty state when no board exists yet: +The route's `load` reads the cached desks and nests them, and the page shows the tree, or an empty state when no desk exists yet. The same `load` also warms the latest letters list that the page shows under the tree: -```tsx title="plugins/example/src/pages/boards-page.tsx" +```tsx title="plugins/newsroom/src/pages/desks-page.tsx (excerpt)" import { contentContainerTree } from "@vitnode/core/content"; import { - definePluginRoute, - type PluginRoutePageProps, -} from "@vitnode/core/routing"; + defineRoute, + type RouteLoadContext, +} from "@vitnode/core/tanstack/plugin-routes"; import { useTranslations } from "use-intl"; -import { BoardTree } from "./board-tree"; -import { fetchBoards } from "./boards-data"; +import { desksQueryOptions } from "./desk-queries"; +import { DeskTree } from "./desk-tree"; +import { LatestLetters } from "./latest-letters"; +import { lettersQueryOptions } from "./letter-list"; -const loadBoards = async () => ({ - tree: contentContainerTree(await fetchBoards()), -}); +const loadDesks = async ( + queryClient: RouteLoadContext["queryClient"], + locale: string, +) => { + const [desks] = await Promise.all([ + queryClient.query(desksQueryOptions()), + // No `LOADER_DATA_QUERY_META`: the entry is dehydrated, so + // `LatestLetters` finds it in the browser and renders on the server. + queryClient + .query(lettersQueryOptions({ locale, search: {} })) + .catch(() => null), + ]); + + return { tree: contentContainerTree(desks) }; +}; -type BoardsPageData = Awaited>; +type DesksPageData = Awaited>; -export const route = definePluginRoute({ - load: loadBoards, +export const route = defineRoute({ + load: async ({ context }) => + await loadDesks(context.queryClient, context.locale), head: ({ t }) => ({ - description: t("@vitnode/example.boards.desc"), - title: t("@vitnode/example.boards.title"), + description: t("newsroom.desks.desc"), + title: t("newsroom.desks.title"), }), + + breadcrumb: DesksBreadcrumb, }); -const BoardsPage = ({ loaderData }: PluginRoutePageProps) => { - const t = useTranslations("@vitnode/example.boards"); +const DesksPage = ({ loaderData }: PluginRoutePageProps) => { + const t = useTranslations("newsroom.desks"); return ( -
-

- {t("title")} -

+
+ {/* The header: title, description and a "Write a letter" button */} {loaderData.tree.length === 0 ? ( -

- {t("empty.desc")} -

+ {/* "No desks yet" */} ) : ( - + )} + +
); }; -export default BoardsPage; +export default DesksPage; ``` -The example's page also has a breadcrumb, a **New discussion** button and an `Empty` state with an icon. +The full page also has the breadcrumb component, a **Write a letter** button and an `Empty` state with an icon. -### Add the board page +### Add the desk page -`/boards/:slug` makes two requests. The detail route returns the board, its ancestors for the breadcrumb and its child boards. The discussions list is filtered by the board, and `includeDescendants: "true"` widens the filter to every board below it, so **Frontend** also lists what was posted in **React**: +`/desks/:slug` makes two requests. The detail route returns the desk, its ancestors for the breadcrumb and its child desks. The letters list is filtered by the desk, and `includeDescendants: "true"` widens the filter to every desk below it, so **Politics** also lists what was sent to **Elections**: -```tsx title="plugins/example/src/pages/board-page.tsx" +```tsx title="plugins/newsroom/src/pages/desk-page.tsx (excerpt)" import { contentPageItem } from "@vitnode/core/tanstack/content"; import { fetcher } from "@vitnode/core/tanstack/fetcher"; import { z } from "zod"; import { manifest } from "@/manifest.gen"; -import type { BoardSearch } from "./board-search"; +import type { DeskSearch } from "./desk-search"; + +import { cachedDeskId, queryDesk } from "./desk-queries"; -const zodDiscussionRow = z.object({ +const PAGE_SIZE = 20; + +const zodLetterRow = z.object({ id: z.number(), publishedAt: z.string().nullable(), slug: z.string().nullable(), title: z.string(), }); -const loadBoard = async (idOrSlug: string, { cursor }: BoardSearch) => { - const detail = await fetcher({ - plugin: manifest.id, - method: "get", - module: "content/boards", - path: "/{idOrSlug}", - args: { params: { idOrSlug: encodeURIComponent(idOrSlug) } }, - }); - - if (detail.status !== 200 && detail.status !== 404) { - throw new Error("Loading the board failed."); - } - - // A 404 becomes the route's not-found page. - const { ancestors, children, container } = contentPageItem( - detail.status === 200 ? await detail.json() : null, - ); - +const fetchLetters = async (deskId: number, cursor?: string) => { const filters = { - board: String(container.id), + desk: String(deskId), includeDescendants: "true", }; const list = await fetcher({ plugin: manifest.id, method: "get", - module: "content/discussions", + module: "content/letters", path: "/", args: { - query: { ...filters, first: "20", ...(cursor ? { cursor } : {}) }, + query: { + ...filters, + first: String(PAGE_SIZE), + ...(cursor ? { cursor } : {}), + }, }, }); - if (list.status !== 200) throw new Error("Loading the discussions failed."); + if (list.status !== 200) throw new Error("Loading the letters failed."); const { edges, pageInfo } = await list.json(); + return { + letters: z.array(zodLetterRow).parse(edges), + nextCursor: pageInfo.hasNextPage ? pageInfo.endCursor : null, + }; +}; + +const loadDesk = async ( + queryClient: RouteLoadContext["queryClient"], + idOrSlug: string, + { cursor }: DeskSearch, +) => { + // The list needs the desk's id. When the desks index already cached it, + // both requests go out together instead of one after the other. + const knownId = cachedDeskId(queryClient, idOrSlug); + const [desk, early] = await Promise.all([ + queryDesk(queryClient, idOrSlug), + // A stale id (the desk was moved or deleted since) is not this page's + // error: the desk read below decides, and the list is fetched again. + knownId === null ? null : fetchLetters(knownId, cursor).catch(() => null), + ]); + const { ancestors, children, container } = contentPageItem(desk); + const page = + early && knownId === container.id + ? early + : await fetchLetters(container.id, cursor); + return { ancestors, children, container, - discussions: z.array(zodDiscussionRow).parse(edges), + ...page, isFirstPage: cursor === undefined, - nextCursor: pageInfo.hasNextPage ? pageInfo.endCursor : null, }; }; ``` -- The filter parameter is named after the field, `board`, and works only because `board` is in `publicApi.filterableFields`. Without `includeDescendants`, it matches that one board. +- `queryDesk` in `desk-queries.ts` calls `GET content/desks/{idOrSlug}` and returns `null` for a `404`. `contentPageItem(null)` turns that into the route's not-found page. +- The filter parameter is named after the field, `desk`, and works only because `desk` is in `publicApi.filterableFields`. Without `includeDescendants`, it matches that one desk. - Filter parameters are not part of the inferred query type yet, so they are spread in from a small object instead of written as literal keys. -- An unknown board id in the filter answers `404`, not an empty list, so a stale link never looks like an empty board. -- `nextCursor` goes into `?cursor=` for an **Older discussions** link. Pass it back unchanged. +- An unknown desk id in the filter answers `404`, not an empty list, so a stale link never looks like an empty desk. +- `nextCursor` goes into `?cursor=` for an **Older letters** link. Pass it back unchanged. Declare the trail as a breadcrumb group, one crumb per ancestor, and give the route a `notFound` component for the 404: -```tsx title="plugins/example/src/pages/board-page.tsx" -export const route = definePluginRoute({ - load: async ({ params, search }) => await loadBoard(params.slug, search), +```tsx title="plugins/newsroom/src/pages/desk-page.tsx (excerpt)" +export const route = defineRoute({ + load: async ({ context, params, search }) => + await loadDesk(context.queryClient, params.slug, search), head: ({ loaderData }) => ({ description: loaderData?.container.metadata.description ?? undefined, @@ -334,15 +379,17 @@ export const route = definePluginRoute({ group: ({ loaderData }) => ( <> - - + }> + {loaderData.ancestors.map(ancestor => ( - + } + > {ancestor.name} @@ -356,117 +403,127 @@ export const route = definePluginRoute({ ), }, - notFound: BoardNotFound, + notFound: DeskNotFound, }); ``` -The page renders the children with the same `BoardTree`, the discussions as a list of links, and a **New discussion** link to `/discussions/new?board={container.id}`. See the full component in `board-page.tsx`. +The page renders the children with the same `DeskTree`, the letters as a list of links, and a **Write a letter** link to `/letters/new?desk={container.id}`. See the full component in `desk-page.tsx`. -### Let members pick a board +### Let members pick a desk -Load the same tree for the create page and turn it into select options, indented by depth so the select reads like the tree: +Load the same cached desks for the create page and turn them into select options, indented by depth so the select reads like the tree: -```tsx title="plugins/example/src/pages/discussion-new-page.tsx" -const loadBoardOptions = async () => - (await fetchBoards()).map(board => ({ - label: `${"— ".repeat(board.depth - 1)}${board.name}`, - value: String(board.id), +```tsx title="plugins/newsroom/src/pages/letter-new-page.tsx (excerpt)" +const loadDeskOptions = async (queryClient: RouteLoadContext["queryClient"]) => + (await queryClient.query(desksQueryOptions())).map(desk => ({ + label: `${"— ".repeat(desk.depth - 1)}${desk.name}`, + value: String(desk.id), })); -export const route = definePluginRoute({ - load: loadBoardOptions, +export const route = defineRoute({ + load: async ({ context }) => await loadDeskOptions(context.queryClient), }); ``` -Add the board to the form schema. A select works with strings, so the ids become a `z.enum`, preselected from `?board=` when it names a real board: +Add the desk to the form schema. A select works with strings, so the ids become a `z.enum`, preselected from `?desk=` when it names a real desk: -```tsx title="plugins/example/src/pages/discussion-form.tsx" -const createDiscussionCreateFormSchema = ( +```tsx title="plugins/newsroom/src/pages/letter-form.tsx (excerpt)" +const createLetterCreateFormSchema = ( t: ( - key: "board.required" | "body.required" | "title.max" | "title.min", + key: "body.required" | "desk.required" | "title.max" | "title.min", ) => string, ids: [string, ...string[]], selected: string | undefined, ) => { - const board = z.enum(ids, { error: t("board.required") }); + const desk = z.enum(ids, { error: t("desk.required") }); - return createDiscussionFormSchema(t, { + return createLetterFormSchema(t, { body: emptyRichTextDocument(), title: "", }).extend({ - board: + desk: selected !== undefined && ids.includes(selected) - ? board.default(selected) - : board, + ? desk.default(selected) + : desk, }); }; ``` Render it with `AutoFormSelect` before the title and body fields: -```tsx title="plugins/example/src/pages/discussion-form.tsx" +```tsx title="plugins/newsroom/src/pages/letter-form.tsx (excerpt)" { - id: "board", + id: "desk", component: props => ( ), }, ``` -On submit, send the board as a number inside `values`, like every other writable field: +On submit, send the desk as a number inside `values`, like every other writable field. `LETTER_FIELDS` in `letter-form.tsx` is `["title", "body", "desk"]`: -```tsx title="plugins/example/src/pages/discussion-new-page.tsx" +```tsx title="plugins/newsroom/src/pages/letter-new-page.tsx (excerpt)" const write = useContentPublicWrite({ - fields: ["title", "body", "board"], + fields: LETTER_FIELDS, uniqueField: "title", }); -const onSubmit: AutoFormOnSubmit = async ( - { board, ...values }, +const onSubmit: AutoFormOnSubmit = async ( + { desk, ...values }, form, ) => { - const record = await write.submit(form, async () => - await fetcher({ - plugin: manifest.id, - method: "post", - module: "content/discussions", - path: "/", - args: { body: { values: { ...values, board: Number(board) } } }, - }), + const record = await write.submit( + form, + async () => + await fetcher({ + plugin: manifest.id, + method: "post", + module: "content/letters", + path: "/", + args: { body: { values: { ...values, desk: Number(desk) } } }, + }), + ); + if (!record) return; + + setIsLeaving(true); + await invalidateLetterLists(queryClient); + await navigate( + record.slug === null + ? letterEditHref(record.id) + : letterHref(record.slug, { created: true }), ); - // Redirect to the new discussion, as in Public create form. }; ``` -The server never trusts the id. It reads the board back inside the write's transaction and checks that it belongs to `example.boards`. A board that was deleted while the form was open, or one from another collection, answers `400` with an issue on the `board` field: +The server never trusts the id. It reads the desk back inside the write's transaction and checks that it belongs to `newsroom.desks`. A desk that was deleted while the form was open, or one from another collection, answers `400` with an issue on the `desk` field: ```json { "code": "CONTENT_INVALID_INPUT", - "contentTypeId": "example.discussion", + "contentTypeId": "newsroom.letter", "issues": [ { "code": "unavailable", - "field": "board", + "field": "desk", "message": "The selected container does not exist." } ] } ``` -Because `"board"` is in `fields`, [`useContentPublicWrite`](/docs/content-engine/public-write-frontend) shows that issue under the board select. +Because `"desk"` is in `fields`, [`useContentPublicWrite`](/docs/content-engine/public-write-frontend) shows that issue under the desk select. -The edit form stays as it was. A container field cannot be in `publicWrite.update.fields`, so moving a discussion to another board is a staff edit in the AdminCP. +The edit form stays as it was. A container field cannot be in `publicWrite.update.fields`, so moving a letter to another desk is a staff edit in the AdminCP. @@ -474,19 +531,19 @@ The edit form stays as it was. A container field cannot be in `publicWrite.updat ## Check the result -1. Create **Frontend** with **React** inside it in the AdminCP, then open `/boards`. Both boards show, **React** nested under **Frontend**. -2. Open **React** and click **New discussion**. The form opens with **— React** preselected. Post it. -3. Open `/boards/frontend`. The discussion is listed there too, because of `includeDescendants`, and the breadcrumb ends with **Boards** and **Frontend**. -4. Open `/boards/nope`. The not-found page shows. +1. Create **Politics** with **Elections** inside it in the AdminCP, then open `/desks`. Both desks show, **Elections** nested under **Politics**. +2. Open **Elections** and click **Write a letter**. The form opens with **— Elections** preselected. Send it. +3. Open `/desks/politics`. The letter is listed there too, because of `includeDescendants`, and the breadcrumb ends with **Desks** and **Politics**. +4. Open `/desks/nope`. The not-found page shows. ## Errors to handle -| Request | Answer | What the page does | -| ------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------ | -| `GET content/boards/{idOrSlug}` for an unknown board | `404` | `contentPageItem(null)` renders the route's `notFound` | -| `GET content/boards?parent={id}` for an unknown parent | `404` | Treat it like a missing board | -| `GET content/discussions?board={id}` for an unknown board | `404` | Treat it like a missing board | -| `POST content/discussions` with a missing, deleted or foreign board | `400`, issue on `board` | Show the message under the select | -| `POST content/discussions` with no `board` at all | `400`, issue on `board` | The form's own `required` check catches it first | +| Request | Answer | What the page does | +| --------------------------------------------------------------- | ---------------------- | ------------------------------------------------------ | +| `GET content/desks/{idOrSlug}` for an unknown desk | `404` | `contentPageItem(null)` renders the route's `notFound` | +| `GET content/desks?parent={id}` for an unknown parent | `404` | Treat it like a missing desk | +| `GET content/letters?desk={id}` for an unknown desk | `404` | Treat it like a missing desk | +| `POST content/letters` with a missing, deleted or foreign desk | `400`, issue on `desk` | Show the message under the select | +| `POST content/letters` with no `desk` at all | `400`, issue on `desk` | The form's own `required` check catches it first | The [public write status codes](/docs/content-engine/public-write-api#status-codes) cover sign-in, permission and rate-limit answers, which work the same with or without containers. diff --git a/apps/web/content/docs/content-engine/container-hierarchy.mdx b/apps/web/content/docs/content-engine/container-hierarchy.mdx index 96a42ce2bf..03224bcc4e 100644 --- a/apps/web/content/docs/content-engine/container-hierarchy.mdx +++ b/apps/web/content/docs/content-engine/container-hierarchy.mdx @@ -1,18 +1,18 @@ --- -title: Container hierarchy +title: Container tree description: How Content Engine containers nest, order, move and delete, how concurrent edits stay consistent, and how to read and change a container tree from your own API routes with createContentContainerService. icon: ListTree --- -A container collection is a tree. This page explains the rules every change to that tree follows, whether it comes from the AdminCP or from your own code, and shows how to use the container service on the server. It uses the `example.boards` collection from [Containers](/docs/content-engine/containers). +A container collection is a tree. This page explains the rules every change to that tree follows, whether it comes from the AdminCP or from your own code, and shows how to use the container service on the server. It uses the newsroom plugin's `newsroom.desks` collection from [Containers](/docs/content-engine/containers). ## Depth -`depth` is 1 for a root, 2 for its children, and so on. `hierarchy.maxDepth` caps it and counts roots, so the example's `maxDepth: 3` allows **Frontend → React → Hooks** and nothing below **Hooks**. +`depth` is 1 for a root, 2 for its children, and so on. `hierarchy.maxDepth` caps it and counts roots, so the newsroom's `maxDepth: 3` allows **Politics → Elections → Local** and nothing below **Local**. - The default is 5, the ceiling is 10. - `hierarchy: { enabled: false }` keeps every container at the root: a flat, ordered list. Any `parentId` is refused. -- A move checks the whole subtree it carries. Moving a board that has children under a deep parent is refused if the deepest child would cross the limit. +- A move checks the whole subtree it carries. Moving a desk that has children under a deep parent is refused if the deepest child would cross the limit. ## Ordering @@ -48,15 +48,15 @@ Deleting never cascades. A container is deleted only when it is empty: - `hasChildren` (409): it still has child containers. Move or delete them first. - `hasContent` (409): a record of any content type that uses this collection still points at it. Move or delete those records first. -The database enforces the same rules. Both `parentId` and every `field.container()` column are foreign keys with `ON DELETE RESTRICT`, so a delete can never orphan a board or a discussion, even if another request slips in between the check and the delete. The remaining siblings are renumbered to close the gap. +The database enforces the same rules. Both `parentId` and every `field.container()` column are foreign keys with `ON DELETE RESTRICT`, so a delete can never orphan a desk or a letter, even if another request slips in between the check and the delete. The remaining siblings are renumbered to close the gap. ## Slugs -A slug addresses one container of one collection, so `frontend` can exist once in `example.boards` and once in another collection. A slug you pass is normalized (lowercase ASCII, dashes) and must be free, or the write fails with `slugTaken`. A missing slug is derived from the name, with `-2`, `-3` and so on added until it is free. A slug that normalizes to nothing, such as `"!!!"`, fails with `slugEmpty`. +A slug addresses one container of one collection, so `politics` can exist once in `newsroom.desks` and once in another collection. A slug you pass is normalized (lowercase ASCII, dashes) and must be free, or the write fails with `slugTaken`. A missing slug is derived from the name, with `-2`, `-3` and so on added until it is free. A slug that normalizes to nothing, such as `"!!!"`, fails with `slugEmpty`. ## Concurrent edits -Two admins dragging boards at the same moment cannot corrupt the tree. Every write to a collection: +Two admins dragging desks at the same moment cannot corrupt the tree. Every write to a collection: 1. Takes a transaction-scoped Postgres advisory lock for that collection, so writes to one collection run one after another. Different collections never wait for each other. 2. Reads the whole tree inside the transaction, so it plans against what the previous write committed. @@ -66,48 +66,48 @@ A collection holds at most 5,000 containers (`limitReached`, 409). The whole tre ## Use the service on the server -`createContentContainerService` is the one way to read and change a collection. The AdminCP routes and the public routes both use it, so your code gets the same rules, cache expiry and events. Call it inside any Hono handler with the request context: +`createContentContainerService` is the one way to read and change a collection. The AdminCP routes and the public routes both use it, so your code gets the same rules, cache expiry and events. Call it inside any Hono handler with the request context. Here is a route you could add to the newsroom plugin. It files a desk under an **Archive** desk and locks it: -```ts title="plugins/example/src/api/modules/boards/archive.route.ts" +```ts title="src/api/modules/desks/archive.route.ts" import { createContentContainerService } from "@vitnode/core/content/server"; import { HTTPException } from "hono/http-exception"; import { z } from "zod"; import { buildRoute } from "@/api/builders"; -import { boardContainers } from "@/content/boards"; +import { deskContainers } from "@/content/desks"; import { manifest } from "@/manifest.gen"; -export const archiveBoardRoute = buildRoute({ - adminStaffPermission: { module: "example_boards", permission: "can_edit" }, +export const archiveDeskRoute = buildRoute({ + adminStaffPermission: { module: "newsroom_desks", permission: "can_edit" }, route: { method: "post", path: "/{id}/archive", - description: "Move a board under the Archive board and lock it", + description: "Move a desk under the Archive desk and lock it", request: { params: z.object({ id: z.coerce.number().int().positive() }) }, responses: { - 200: { description: "Board archived" }, - 404: { description: "Board or Archive not found" }, + 200: { description: "Desk archived" }, + 404: { description: "Desk or Archive not found" }, }, }, handler: async c => { const { id } = c.req.valid("param"); - const boards = createContentContainerService(c, { - definition: boardContainers, + const desks = createContentContainerService(c, { + definition: deskContainers, pluginId: manifest.id, }); - const archive = await boards.findBySlug("archive"); + const archive = await desks.findBySlug("archive"); if (!archive) { throw new HTTPException(404, { - message: "Create an Archive board first.", + message: "Create an Archive desk first.", }); } - const siblings = await boards.children(archive.id); - await boards.move(id, { parentId: archive.id, position: siblings.length }); - await boards.update(id, { metadata: { locked: true } }); + const siblings = await desks.children(archive.id); + await desks.move(id, { parentId: archive.id, position: siblings.length }); + await desks.update(id, { metadata: { locked: true } }); - return c.json({ message: "Board archived." }, 200); + return c.json({ message: "Desk archived." }, 200); }, }); ``` @@ -128,7 +128,7 @@ Refused writes throw a `ContentContainerError` with `code`, `status` (400, 404 o | `delete(id)` | `Promise` | Deletes an empty container, as described in [Safe deletion](#safe-deletion) | | `toPublic(record)` | `PublicRecord` | Drops every metadata field not in `publicApi.fields` | -A record is `{ id, parentId, name, slug, position, depth, metadata, createdAt, updatedAt }`, with `metadata` typed from the definition's fields. `ContentContainerRecord` and `ContentContainerPublicRecord` from `@vitnode/core/content` name those types. +A record is `{ id, parentId, name, slug, position, depth, metadata, createdAt, updatedAt }`, with `metadata` typed from the definition's fields. `ContentContainerRecord` and `ContentContainerPublicRecord` from `@vitnode/core/content` name those types. The tree helpers the service uses are pure and browser-safe, exported from `@vitnode/core/content`: `contentContainerTree` nests a list, `orderContentContainers` sorts rows into tree order with their depth, and `contentContainerAncestors` and `contentContainerSubtreeIds` walk it. @@ -143,21 +143,21 @@ Each successful write emits one event after its transaction commits. A write tha | `content.container.moved` | `{ definitionId, pluginId, containerId, parentId, fromParentId, position }` | | `content.container.deleted` | `{ definitionId, pluginId, containerId, parentId }` | -The names are shared by every collection, so filter on `definitionId`: +Every collection shares the same names, so filter on `definitionId`. This listener logs desk moves: -```ts title="plugins/example/src/api/lib/events.ts" +```ts title="src/api/lib/desk-listeners.ts" import { buildEventListener } from "@vitnode/core/api/lib/events"; -export const boardMovedListener = buildEventListener({ +export const deskMovedListener = buildEventListener({ event: "content.container.moved", - name: "log-board-moves", + name: "log-desk-moves", handler: async (c, payload) => { - if (payload.definitionId !== "example.boards") return; + if (payload.definitionId !== "newsroom.desks") return; await c .get("log") .debug( - `Board ${payload.containerId} moved from ${payload.fromParentId ?? "the root"} to ${payload.parentId ?? "the root"}`, + `Desk ${payload.containerId} moved from ${payload.fromParentId ?? "the root"} to ${payload.parentId ?? "the root"}`, ); }, }); @@ -165,6 +165,6 @@ export const boardMovedListener = buildEventListener({ `changedFields` names `name`, `slug` and the metadata fields whose value actually changed, or `policies` when the container's [publishing policies](/docs/content-engine/container-policies) were saved. A reorder among siblings is a `moved` event with the same `fromParentId` and `parentId`. Register listeners as described in [Events](/docs/dev/events). [Built-in events](/docs/dev/events/built-in-events#content-container-events) has the field-by-field payloads. -Every write also expires the [page cache](/docs/content-engine/caching) entries that read the collection, including pages that list content filtered by one of its containers, so a renamed board shows its new name without a manual purge. +Every write also expires the [page cache](/docs/content-engine/caching) entries that read the collection, including pages that list content filtered by one of its containers, so a renamed desk shows its new name without a manual purge. -Next, build pages on top of the tree in [Containers on the frontend](/docs/content-engine/container-frontend). +Next, build pages on top of the tree in [Container pages](/docs/content-engine/container-frontend). diff --git a/apps/web/content/docs/content-engine/container-policies-api.mdx b/apps/web/content/docs/content-engine/container-policies-api.mdx index 2ca27af3b0..ffde5b3504 100644 --- a/apps/web/content/docs/content-engine/container-policies-api.mdx +++ b/apps/web/content/docs/content-engine/container-policies-api.mdx @@ -1,10 +1,10 @@ --- -title: Publishing policies reference +title: Publishing rules API description: Reference for Content Engine container publishing policies - the defineContentContainer policies option, the five policy keys and their fallbacks, the resolution order, the GET and PUT policies routes, the policy report, errors and server helpers. icon: FileJson --- -Exact names, values and behavior of container publishing policies. For a guided setup, follow [Publishing policies](/docs/content-engine/container-policies). Examples use the Forum plugin's `forum.forums` collection. +Exact names, values and behavior of container publishing policies. For a guided setup, follow [Publishing rules](/docs/content-engine/container-policies). Examples use the Forum plugin's `forum.forums` collection. ## `policies` option diff --git a/apps/web/content/docs/content-engine/container-policies.mdx b/apps/web/content/docs/content-engine/container-policies.mdx index 4fb30ac857..1ba8fcc407 100644 --- a/apps/web/content/docs/content-engine/container-policies.mdx +++ b/apps/web/content/docs/content-engine/container-policies.mdx @@ -1,5 +1,5 @@ --- -title: Publishing policies +title: Publishing rules description: Set per-container publishing rules in the VitNode Content Engine. Decide who may post in a forum, whether new posts and edits wait for approval, and how long authors may edit, with defineContentContainer policies and the AdminCP Publishing sheet. icon: ShieldCheck implementation: diff --git a/apps/web/content/docs/content-engine/containers.mdx b/apps/web/content/docs/content-engine/containers.mdx index 8e93a4d415..4acd0e9a89 100644 --- a/apps/web/content/docs/content-engine/containers.mdx +++ b/apps/web/content/docs/content-engine/containers.mdx @@ -15,11 +15,11 @@ implementation: - Register the definition with the admin and public content modules and in the plugin's `adminNav` and `adminContent` containers, as the guide shows. - A required container on a table that already has rows needs the generated migration edited to create and assign a default before `SET NOT NULL`. related: - - title: Containers on the frontend + - title: Container pages href: /docs/content-engine/container-frontend - - title: Publishing policies + - title: Publishing rules href: /docs/content-engine/container-policies - - title: Container hierarchy + - title: Container tree href: /docs/content-engine/container-hierarchy --- @@ -27,7 +27,7 @@ import { Tab, Tabs } from "fumadocs-ui/components/tabs"; A container is a place a record lives in: one forum board, one blog section, one knowledge-base category. You declare a **collection** of containers once in code, admins build its tree in the AdminCP, and each record of a content type points at exactly one container through `field.container()`. -This guide follows the example plugin: a `example.boards` collection, and discussions (`example.discussion`) filed into it. +This guide follows the newsroom plugin, with a `newsroom.desks` collection and letters to the editor (`newsroom.letter`) filed into it. ## Containers or a content type? @@ -41,13 +41,13 @@ A category could also be a content type with a [relation](/docs/content-engine/r | Fields | A few scalars (`text`, `textarea`, `number`, `boolean`, `enum`) | Every field kind | | Drafts, revisions | No. A container exists or it does not | Optional `publication`, `editorial` and friends | | Linked from records | `field.container()`, at most one per content type | `field.relation()`, as many as you need | -| Public filter | `?board=4`, and `includeDescendants=true` for a whole subtree | `?category=4`, exact match only | +| Public filter | `?desk=4`, and `includeDescendants=true` for a whole subtree | `?category=4`, exact match only | A record belongs to one container. For anything else it points at, such as tags, keep using relations. ## Add a container collection -You need a content type to file into containers, like `example.discussion` from [Public write](/docs/content-engine/public-write#enable-public-writing). +You need a content type to file into containers, like `newsroom.letter` from [Member writing](/docs/content-engine/public-write#add-an-owner-versions-and-the-write-options). @@ -55,13 +55,13 @@ You need a content type to file into containers, like `example.discussion` from ### Define the collection -Create `src/content/boards.ts`. The definition describes the collection; each board is a row an admin creates later: +Create `src/content/desks.ts`. The definition describes the collection, and each desk is a row an admin creates later: -```ts title="plugins/example/src/content/boards.ts" +```ts title="plugins/newsroom/src/content/desks.ts" import { defineContentContainer, field } from "@vitnode/core/content"; -export const boardContainers = defineContentContainer({ - id: "example.boards", +export const deskContainers = defineContentContainer({ + id: "newsroom.desks", fields: { description: field.textarea({ maxLength: 500, nullable: true }), @@ -74,11 +74,11 @@ export const boardContainers = defineContentContainer({ ordering: { mode: "manual" }, publicApi: { - path: "boards", + path: "desks", fields: ["description", "color", "icon"], }, - admin: { path: "example/boards" }, + admin: { path: "newsroom/desks" }, }); ``` @@ -92,9 +92,9 @@ Every container already has `id`, `parentId`, `name`, `slug`, `position` and `de | `ordering` | `{ mode?: "manual" \| "alphabetical" }` | No | `{ mode: "manual" }` | How siblings are sorted. See [Hierarchy and ordering](/docs/content-engine/container-hierarchy) | | `publicApi` | `{ path: string; fields?: string[] }` | No | off | Read-only public routes at `/api/{pluginId}/content/{path}` | | `admin` | `{ path?; permissionModule?; navigation? }` | No | see below | The AdminCP screen and its staff permissions | -| `policies` | `{ defaults?; contentTypes? }` \| `false` | No | off | Per-container publishing rules. See [Publishing policies](/docs/content-engine/container-policies) | +| `policies` | `{ defaults?; contentTypes? }` \| `false` | No | off | Per-container publishing rules. See [Publishing rules](/docs/content-engine/container-policies) | -`admin.path` defaults to the id with dots turned into slashes (`example/boards`), so the screen opens at `/admin/containers/example/boards`. `admin.permissionModule` defaults to the snake-cased id (`example_boards`), and `admin.navigation: false` hides the sidebar entry. +`admin.path` defaults to the id with dots turned into slashes (`newsroom/desks`), so the screen opens at `/admin/containers/newsroom/desks`. `admin.permissionModule` defaults to the snake-cased id (`newsroom_desks`), and `admin.navigation: false` hides the sidebar entry. @@ -104,38 +104,38 @@ Every container already has `id`, `parentId`, `name`, `slug`, `position` and `de Add one `field.container()` to the content type. List it in `publicApi.fields` to return it, in `filterableFields` to filter by it, and in `publicWrite.create.fields` to let members pick it: -```ts title="plugins/example/src/content/discussion.ts" -import { boardContainers } from "@/content/boards"; // [!code ++] +```ts title="plugins/newsroom/src/content/letter.ts (excerpt)" +import { deskContainers } from "@/content/desks"; // [!code ++] -export const discussionContentType = defineContentType({ - id: "example.discussion", - tableName: "example_discussions", +export const letterContentType = defineContentType({ + id: "newsroom.letter", + tableName: "newsroom_letters", fields: { title: field.text({ required: true, minLength: 3, maxLength: 200 }), slug: field.slug({ source: "title" }), body: field.richText({ required: true }), author: field.user(), - board: field.container({ definition: boardContainers, required: true }), // [!code ++] + desk: field.container({ definition: deskContainers, required: true }), // [!code ++] }, publicApi: { - path: "discussions", - fields: ["id", "title", "slug", "body", "board", "publishedAt"], // [!code highlight] - filterableFields: ["board"], // [!code ++] + path: "letters", + fields: ["id", "title", "slug", "body", "desk", "publishedAt"], // [!code highlight] + filterableFields: ["desk"], // [!code ++] }, publicWrite: { ownership: { field: "author" }, - create: { fields: ["title", "body", "board"], status: "published" }, // [!code highlight] + create: { fields: ["title", "body", "desk"], status: "published" }, // [!code highlight] update: { fields: ["title", "body"] }, }, }); ``` -The column is an `integer` foreign key to `core_content_containers.id` with `ON DELETE RESTRICT`, plus an index on `(board, publishedAt)`. Every write checks that the id belongs to `example.boards`, not just that it exists. All options are in [Fields](/docs/content-engine/fields#container). +The column is an `integer` foreign key to `core_content_containers.id` with `ON DELETE RESTRICT`, plus an index on `(desk, publishedAt)`. Every write checks that the id belongs to `newsroom.desks`, not just that it exists. All options are in [Fields](/docs/content-engine/fields#container). -A content type can also live in the container of a record it points at, such as a reply in its topic's board, with a required `field.relation({ target, container: true })` instead of a `field.container()`. See [Threaded replies](/docs/content-engine/threads). +A content type can also live in the container of a record it points at, such as a reply in its topic's forum, with a required `field.relation({ target, container: true })` instead of a `field.container()`. See [Comments](/docs/content-engine/threads). @@ -143,21 +143,21 @@ A content type can also live in the container of a record it points at, such as ### Register the collection on the API -Pass the definition to both content modules. The admin module adds the staff routes and the `example_boards` permissions; the public module adds the read routes: +Pass the definition to both content modules. The admin module adds the staff routes and the `newsroom_desks` permissions, and the public module adds the read routes. The newsroom registers more content types than shown here: -```ts title="plugins/example/src/api/modules/admin/admin.module.ts" -import { boardContainers } from "@/content/boards"; // [!code ++] +```ts title="plugins/newsroom/src/api/modules/admin/admin.module.ts (excerpt)" +import { deskContainers } from "@/content/desks"; // [!code ++] buildContentAdminModule({ - containers: [boardContainers], // [!code ++] - contentTypes: [articleContent, discussionContent], + containers: [deskContainers], // [!code ++] + contentTypes: [storyContent, letterContent], }), ``` -```ts title="plugins/example/src/config.api.ts" +```ts title="plugins/newsroom/src/config.api.ts (excerpt)" buildContentPublicModule({ - containers: [boardContainers], // [!code ++] - contentTypes: [articleContent, discussionContent], + containers: [deskContainers], // [!code ++] + contentTypes: [storyContent, letterContent], }), ``` @@ -171,30 +171,25 @@ A content type whose `field.container()` names a collection no plugin registers Add the collection to `containers` in both AdminCP files, next to your content types. `icon` is optional and defaults to a folder icon: -```tsx title="plugins/example/src/admin/nav.tsx" -import { FolderTreeIcon } from "lucide-react"; // [!code ++] +```tsx title="plugins/newsroom/src/admin/nav.tsx (excerpt)" +import { FolderTreeIcon, MailIcon, NotebookPenIcon } from "lucide-react"; // [!code highlight] -import { boardContainers } from "@/content/boards"; // [!code ++] - -// [!code ++:4] -export const exampleBoardsNav = { - definition: boardContainers, - icon: , -}; +import { deskContainers } from "@/content/desks"; // [!code ++] export const adminNav = { pluginId: manifest.id, - containers: [exampleBoardsNav], // [!code ++] - contentTypes: [exampleArticleNav, exampleDiscussionNav], + containers: [{ definition: deskContainers, icon: }], // [!code ++] + contentTypes: [ + { definition: storyContentType, icon: }, + { definition: letterContentType, icon: }, + ], } satisfies AdminNavPluginSource; ``` -```tsx title="plugins/example/src/admin/content.tsx" -export const adminContent = { - pluginId: manifest.id, - containers: [exampleBoardsNav], // [!code ++] - contentTypes: [exampleArticleNav, exampleDiscussionNav], -} satisfies ContentFrontendPluginSource; +The newsroom's AdminCP sources hold nothing server-only, so its `admin/content.tsx` reuses the same object: + +```tsx title="plugins/newsroom/src/admin/content.tsx" +export { adminNav as adminContent } from "./nav"; ``` [Plugin files](/docs/content-engine/plugin-files) explains why the two files are separate. @@ -207,14 +202,14 @@ export const adminContent = { The AdminCP reads the collection's names from `{pluginId}.containers.{entity}`, where the entity is the id without its plugin prefix. The permission labels follow the permission module: -```json title="plugins/example/src/locales/en.json" +```json title="plugins/newsroom/src/locales/en.json (excerpt)" { - "@vitnode/example": { + "newsroom": { "containers": { - "boards": { - "label": "{count, plural, one {Board} other {Boards}}", - "title": "Boards", - "desc": "The board tree members file their discussions into.", + "desks": { + "label": "{count, plural, one {Desk} other {Desks}}", + "title": "Desks", + "desc": "The desks readers send their letters to. Drag to reorder or nest desks.", "fields": { "description": "Description", "color": "Color", @@ -224,18 +219,18 @@ The AdminCP reads the collection's names from `{pluginId}.containers.{entity}`, } }, "content": { - "discussion": { "fields": { "board": "Board" } } + "letter": { "fields": { "desk": "Desk" } } } }, - "@vitnode/example:example_boards": "Boards", - "@vitnode/example:example_boards:can_view": "View boards", - "@vitnode/example:example_boards:can_create": "Create boards", - "@vitnode/example:example_boards:can_edit": "Edit and move boards", - "@vitnode/example:example_boards:can_delete": "Delete boards" + "newsroom:newsroom_desks": "Desks", + "newsroom:newsroom_desks:can_view": "View desks", + "newsroom:newsroom_desks:can_create": "Create desks", + "newsroom:newsroom_desks:can_edit": "Edit and move desks", + "newsroom:newsroom_desks:can_delete": "Delete desks" } ``` -Without labels, the screen falls back to a name derived from the id, such as "Boards". +Without labels, the screen falls back to a name derived from the id, such as "Desks". @@ -261,13 +256,13 @@ npm run db:migrate -The collection itself needs no table: every definition shares `core_content_containers`. The migration only adds the `board` column to `example_discussions`. +The collection itself needs no table, because every definition shares `core_content_containers`. The migration only adds the `desk` column to `newsroom_letters`. A required container field becomes a `NOT NULL` column. If the table already has rows, edit the generated migration to create a container and assign it - before the `SET NOT NULL`, as the example's migration does with a "General" - board. [Database](/docs/content-engine/database) covers editing migrations. + before the `SET NOT NULL`. [Migrations](/docs/content-engine/database) covers + editing migrations. @@ -276,23 +271,23 @@ The collection itself needs no table: every definition shares `core_content_cont ## Manage containers in the AdminCP -Open **AdminCP → Example → Boards** (`/admin/containers/example/boards`). Staff need the collection's `can_view` permission to see it, and `can_create`, `can_edit` or `can_delete` for each action. +Open **AdminCP → Newsroom → Desks** (`/admin/containers/newsroom/desks`). Staff need the collection's `can_view` permission to see it, and `can_create`, `can_edit` or `can_delete` for each action. -- **The tree** shows every board with its children nested below it. Drag a board to reorder it among its siblings or to drop it inside another board. +- **The tree** shows every desk with its children nested below it. Drag a desk to reorder it among its siblings or to drop it inside another desk. - **Create and edit** open a sheet with the name, the slug and the collection's own fields. A container created without a slug gets one derived from its name. - **The move menu** on each row does the same as dragging from the keyboard: **Move up**, **Move down**, **Move to top level** and **Move inside…**. -- **Delete** works only on an empty board. A board with child boards or with discussions is refused with a message that says which one, and nothing changes. +- **Delete** works only on an empty desk. A desk with child desks or with letters is refused with a message that says which one, and nothing changes. -In a content type's generated form, a container field becomes a **picker** that lists the collection's tree, so staff can file a discussion into a board or move it to another one. +In a content type's generated form, a container field becomes a **picker** that lists the collection's tree, so staff can file a letter into a desk or move it to another one. -A drag that breaks a rule, such as nesting a board deeper than `maxDepth` or dropping it inside its own child, is refused the same way. [Hierarchy and ordering](/docs/content-engine/container-hierarchy) lists every rule. +A drag that breaks a rule, such as nesting a desk deeper than `maxDepth` or dropping it inside its own child, is refused the same way. [Hierarchy and ordering](/docs/content-engine/container-hierarchy) lists every rule. ## Check the result -Create a "Frontend" board with a "React" board inside it, then read the public tree: +Create a "Politics" desk with an "Elections" desk inside it, then read the public tree: ```bash -curl http://localhost:3000/api/@vitnode/example/content/boards +curl http://localhost:3000/api/newsroom/content/desks ``` ```json @@ -301,12 +296,12 @@ curl http://localhost:3000/api/@vitnode/example/content/boards { "id": 1, "parentId": null, - "name": "Frontend", - "slug": "frontend", + "name": "Politics", + "slug": "politics", "position": 0, "depth": 1, "metadata": { - "description": "Everything in the browser", + "description": "Parliament, parties and policy", "color": "#2563eb", "icon": null } @@ -314,8 +309,8 @@ curl http://localhost:3000/api/@vitnode/example/content/boards { "id": 2, "parentId": 1, - "name": "React", - "slug": "react", + "name": "Elections", + "slug": "elections", "position": 0, "depth": 2, "metadata": { "description": null, "color": null, "icon": null } @@ -324,7 +319,7 @@ curl http://localhost:3000/api/@vitnode/example/content/boards } ``` -Items come in tree order: each parent, then its subtree. `metadata` holds only `publicApi.fields`, and a value nobody set is `null`. [Containers on the frontend](/docs/content-engine/container-frontend) turns this into pages. +Items come in tree order: each parent, then its subtree. `metadata` holds only `publicApi.fields`, and a value nobody set is `null`. [Container pages](/docs/content-engine/container-frontend) turns this into pages. ## Definition errors @@ -344,10 +339,10 @@ Items come in tree order: each parent, then its subtree. `metadata` holds only ` | `field.container()` pointing at an unregistered collection | `Field "x" uses the container collection "y", which no plugin registers.` | | A container field in `publicWrite.update.fields` | `publicWrite.update.fields includes the container field "x".` | -## What's next +## Related - [Hierarchy and ordering](/docs/content-engine/container-hierarchy): depth, moves, safe deletion and the server-side service. -- [Containers on the frontend](/docs/content-engine/container-frontend): a board tree, a board page and a create form with a board picker. -- [Publishing policies](/docs/content-engine/container-policies): who may post in each board, whether posts wait for [approval](/docs/content-engine/approvals), and how long authors may edit. +- [Container pages](/docs/content-engine/container-frontend): a desk tree, a desk page and a create form with a desk picker. +- [Publishing rules](/docs/content-engine/container-policies): who may post in each desk, whether posts wait for [approval](/docs/content-engine/approvals), and how long authors may edit. -Read permissions per container, such as boards hidden from guests, are not available yet. Today every reader sees every container in the public tree. +Read permissions per container, such as desks hidden from guests, are not available yet. Today every reader sees every container in the public tree. diff --git a/apps/web/content/docs/content-engine/content-visibility-hidden-notice.webp b/apps/web/content/docs/content-engine/content-visibility-hidden-notice.webp index 183fb059166bffe6451dc02ae70b13317251a7c8..62ae66947559df4861fcb10564d2d3b00b7088ad 100644 GIT binary patch literal 56204 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%0AZ#PBFIgW^svjnD75@K6}L zeZs@mBTH z#lX>;e-AiI9BpT^p@;Z7DOI`iGA#$wJ>PdcKiu*i&?yHRj#pyV?!V|EvL*8A`|-VZ zQEMG3x1BP8`+ayD`cSkBG-J8R;=1$uX_}?ARin}6n>^P1EHw1|PSPt0qNN%50dG?#fl#LC@^2Dx%flfkm!d9L8?oSm)L4pkcJI4pkaj?_va zU=LXm>JwtX^BPkxv+a=VYAk2@=q{$RtJdin8K~;-?K+BLeL-FAo^-*YDYb=9lml-qG~GY zgJ^@ugKbb{3&uRMYhTMdWUIs8{L8wd0MdZFFze5M?DtAivJ23!5_IV7IuOWJ(*vZY zfRCU<5bL4LKMt86b2*iN;jR)$g95J<%4V`$h$>FEKyN^XPD%^sEc?8@5b#5b?nhDD z{nzGUiy}85-#QA5)z!+}h1mJq2&O2#aCaqwAPhm!XwNK`Xhodye%oDCo8#YXU53S_ zZ8rGyW_4zcUd%XjeY%k+4^s(9^hif7DXr*xS3hp$yU2 z6Kx{{Hdm81$77ZHuPBHTCoJ&&*#i=*a&d^jFhh*%?Ia)9H&6irs%&aUc?iww{iJ3; z`Oz~8Ga;|5I~$G@UZ3{JrgoL{qJV9W2~TzOK$&0Jc~haxdhp! zLQIMfrC0-F^6#rnc9HUcon6N^K9QhL|HIz@{0KuCe|`|- zD@%iM@nE|A3;p^*fAD%fw_JihZ6C2B459$h))NoCd~(Vz*E#JLp1NGb5akSJuy1)} zg-><7?Wx;m>+X%_OOlOT0JvsYVj`gS`?%-S!9ZN4FwvuOXV&i=4sxp5#q;yzMN0v0Nt|IlHRJEE|umxih&Bchd5 z2u*cNO33Fc)3za&mUdwEy}w<-fYwOHkcY4W4rQ8oz;O*@Vb7ox&hCk0d=bgy3}>lg zX@ov&8O=4C`uQ)HpF(}1TiJ!ec+<$owu{rurlvmHHBnMwlivOo>5dy}+UWZyiV%Tr zm`oTM!WBqNQ=pGBXT-A5-#zAj2%;C;7!zZp_yfAKmH@a2h*Ku3Mi zR>I*XblTiCF#eBc3W>VrF<(Znb^d4kmVO}iF-5a*sfjD(ODSpU0Su4ICB>zgP)u|4 zsbd2E2h))BlPWlp2o;lM&!1Jv3iNnJ<5%SzXLR`Nu;IfI`h1WOM}Y@fN&afL&saST zB3Z(0!Y#<#2q+%i;lJKKbn;hWQP~Pe8(iwS(Wx5@K3S@LsrI)&FOx8EOuuFz@@ zV07DU3#kGIAH1d?n4Xrb21b;c9P|7Iz5*(jR(( z5w^eFE-Ag~lt@f;z~THuqi7{-QSe70vdW41Y!Q3tWbQNU4X;HlJI?mo(a0Y_@@_9_ zq$Dr$Oeonaizn`>ixLgLf>ZMnBokdBuxLHy_}|FGY8}D4_FjB2$PBMAS2$Vf_)Q

qD`Wl?Vp8v7C7)HQkj&B#<7 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 literal 58068 zcmeFY1CVXonkJgIGk4myZQIsP+umv0wr$(SPTS_r%$>GYpQ?UQeXHu7)3pK zRbE0+u;w;j*t_6<_#3_fNSMuM=~v^RJ2{h&q?cN8{_EDfaYQvG44`Wk-V#EMH!jHxGz9+Iny2gR$#ecx|_YW;P;-H-j3ywkqrzIMMv0Q6_x*H}Yeg!k;D{Z-#y->{zn zpy{jY0OOV6xBiCT(VN|U-9BIukOsg3ByC+E=xgxzeRh51y%PN1ZPEYc=k#^)F7|o) z1iDG^)6X6N{6+E%`QA3paNsuzXaJagCV%a|3tVA*avb-C^QU~7fBf-YTLQa){67|Q z`~v+ze64%-+v#)ei3h|2Fy2i+R{?;DzBGUVK;ZNFIqtm;0O%(;%$w;O_45GG{4pXA z0C>-H@rwoUe7;XS-w0d^ECEtKlHP&8zJJDjwmt9O=Y0T%0e_U2ybpp8f}6ZkzgxeI zKc0Ua+G%EcW39Z&)-WmS@BxMGh-grw; zxnoFd$}1d3gVUlT&JkGp6dr@=ijeBhrn0`?nQ=UI87;-*9}y>L^^@jSDTH#d>xFB} zbV3!YJ3v!ZF7C(5r4^zlUIkKp%Lb7;Z+kt(L8^^(MFN! zv%xp~?@|a{<_oLKE48nv3j>TY-2vCCD|!0fv38Aq$K-PzJN~(jss;Trv|@suLRZ3# z6oAPYg@WwE)VZhcffIjXDq=L}5Rq5UUUSXs=Mydh%w0CKAT

06iq-q5_^aaJgxB1V_?GS)2;N0C{Em1 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

-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 YfL?RL`x~10`=;qKl%lk=@?Z4+2hJw1dH?_b diff --git a/apps/web/content/docs/content-engine/create-a-content-type-staff-permissions.webp b/apps/web/content/docs/content-engine/create-a-content-type-staff-permissions.webp deleted file mode 100644 index 4c7c710eab7dea9d5353fddef45010ee3b89127a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50980 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 AH~;_u diff --git a/apps/web/content/docs/content-engine/create-a-content-type.mdx b/apps/web/content/docs/content-engine/create-a-content-type.mdx index 01f1bd3d18..a866b852a3 100644 --- a/apps/web/content/docs/content-engine/create-a-content-type.mdx +++ b/apps/web/content/docs/content-engine/create-a-content-type.mdx @@ -1,69 +1,84 @@ --- title: First content type -description: Build the example plugin's category content type with the VitNode Content Engine. One TypeScript definition gives you a migrated table, an AdminCP screen, staff API routes and staff permissions. +description: Build your first VitNode Content Engine content type, a news article with a title, slug and body, and create and edit articles in the AdminCP. icon: FileCode --- import { Tab, Tabs } from "fumadocs-ui/components/tabs"; + import { ImgDocs } from "@/components/fumadocs/img"; import createDialog from "./create-a-content-type-create-dialog.webp"; -import categoriesList from "./create-a-content-type-categories-list.webp"; -import staffPermissions from "./create-a-content-type-staff-permissions.webp"; +import articlesList from "./create-a-content-type-articles-list.webp"; -This tutorial builds `example.category`, the content type behind **AdminCP → Example → Categories** in VitNode's example plugin. You write one definition, wire it into four small files, run one migration, and get a Postgres table, a list with a create form, staff-only API routes and four staff permissions. Categories have one field, so you spend your time on the wiring instead of naming things. +This tutorial starts a small newsroom with one **article** content type, which has a title, a slug and a body. By the end, staff create and edit articles in the AdminCP, and you have the table, the staff API and the staff permissions without writing any of them by hand. -Every snippet is copied from `plugins/example`, with unrelated content types trimmed out. Use your own plugin id wherever you see `@vitnode/example`. +The next tutorials keep building the same article: [Drafts & publishing](/docs/content-engine/publication), [Public API](/docs/content-engine/public-api), [Content list](/docs/content-engine/public-lists) and [Content page](/docs/content-engine/public-pages). ## Before you begin -You need a plugin that your app already loads, with `src/config.api.ts`, `src/config.tsx` and `src/api/builders.ts`, which binds the API and Content Engine builders to your plugin, so none of them needs a plugin id: +You need a plugin your app already loads. This tutorial uses one named `newsroom`, made with [Create a plugin](/docs/dev/plugins/create), so its plugin id is `newsroom` and its files live in `plugins/newsroom/`. Use your own plugin's name wherever you see `newsroom`. You also need a running PostgreSQL database and an AdminCP account. + + + + + +### Bind the Content Engine builders + +Edit `src/api/builders.ts`. The generated file binds the API builders. Add the Content Engine ones next to them, so no file in your plugin has to spell out its plugin id: -```ts title="plugins/example/src/api/builders.ts" +```ts title="plugins/newsroom/src/api/builders.ts" import { bindApiPlugin } from "@vitnode/core/api/lib/bind-api-plugin"; -import { bindContentPlugin } from "@vitnode/core/content/server"; +import { bindContentPlugin } from "@vitnode/core/content/server"; // [!code ++] import { manifest } from "@/manifest.gen"; export const { buildModule, buildRoute } = bindApiPlugin(manifest); +// [!code ++:2] export const { buildContentAdminModule, buildContentPublicModule } = bindContentPlugin(manifest); ``` -`src/manifest.gen.ts` is written by `vitnode build` and `vitnode dev` from your `package.json`, and `manifest.id` is the plugin id. [Create a plugin](/docs/dev/plugins/create) generates all of these. You also need a running PostgreSQL database and an AdminCP account. +`vitnode dev` and `vitnode build` write `src/manifest.gen.ts` from your `package.json`, and `manifest.id` is the plugin id. - + -### Declare the content type +### Define the article -Create `src/content/category.ts`: +Create `src/content/article.ts`. This is the complete file: -```ts title="plugins/example/src/content/category.ts" +```ts title="plugins/newsroom/src/content/article.ts" import { defineContentType, field } from "@vitnode/core/content"; -export const categoryContentType = defineContentType({ - id: "example.category", - tableName: "example_categories", +export const articleContentType = defineContentType({ + id: "newsroom.article", + tableName: "newsroom_articles", + fields: { - name: field.text({ required: true, minLength: 1, maxLength: 100 }), + title: field.text({ required: true, minLength: 3, maxLength: 200 }), + slug: field.slug({ source: "title" }), + body: field.richText({ required: true }), }, + admin: { - path: "example/categories", + path: "newsroom/articles", + titleField: "title", list: { - columns: ["name", "createdAt"], - orderableFields: ["name"], + columns: ["title", "slug", "updatedAt"], + orderableFields: ["title"], }, }, }); ``` -- `id` is `plugin.entity`, lowercase and dot separated. The part after the first dot (`category`) names the translations and the permissions. -- `tableName` is the Postgres table, in snake_case. -- `admin.path` sets the AdminCP URL, `/admin/content/example/categories`. -- `list.columns` may name your fields and the system columns `id`, `createdAt` and `updatedAt`. `orderableFields` makes the **Name** header sortable. +- `id` is `plugin.entity`. The part after the dot, `article`, names the translations and the permissions. +- `tableName` is the Postgres table. +- The engine fills `slug` from the title when you leave it empty, and keeps it when the title changes later, so links keep working. +- `body` is [rich text](/docs/content-engine/rich-text). The AdminCP shows an editor, and the database stores a JSON document. +- `admin.path` puts the screen at `/admin/content/newsroom/articles`. `list.columns` may name your fields and the system columns `id`, `createdAt` and `updatedAt`. -You get a few things without asking: the list searches its text columns, the first text field becomes the record's title, and create and edit open in a dialog. Every field helper is listed in [Fields](/docs/content-engine/fields). +[Fields](/docs/content-engine/fields) lists every field helper. @@ -71,56 +86,53 @@ You get a few things without asking: the list searches its text columns, the fir ### Create the model -Create `src/database/categories.ts`. `createContentModel` turns the definition into a Drizzle table, Zod schemas and a service: +Create `src/database/articles.ts`. `createContentModel` turns the definition into a Drizzle table, validation schemas and a service: -```ts title="plugins/example/src/database/categories.ts" +```ts title="plugins/newsroom/src/database/articles.ts" import { createContentModel } from "@vitnode/core/content/server"; -import { categoryContentType } from "@/content/category"; +import { articleContentType } from "@/content/article"; -export const categoryContent = createContentModel(categoryContentType); +export const articleContent = createContentModel(articleContentType); -export const example_categories = categoryContent.table; +export const newsroom_articles = articleContent.table; ``` -Export the table. Drizzle Kit finds tables by reading the exports of your plugin's built `dist/src/database/*.js` files, so a table nobody exports never reaches a migration. +Export the table. Migrations find tables through the exports of your plugin's built `src/database/*.js` files, so a table nobody exports never gets created. -### Add the staff API routes +### Register the staff API routes -Create an `admin` module and pass the model to `buildContentAdminModule`: +Create `src/api/modules/admin/admin.module.ts`: -```ts title="plugins/example/src/api/modules/admin/admin.module.ts" +```ts title="plugins/newsroom/src/api/modules/admin/admin.module.ts" import { buildContentAdminModule, buildModule } from "@/api/builders"; -import { categoryContent } from "@/database/categories"; +import { articleContent } from "@/database/articles"; export const adminModule = buildModule({ name: "admin", routes: [], - modules: [ - buildContentAdminModule({ - contentTypes: [categoryContent], - }), - ], + modules: [buildContentAdminModule({ contentTypes: [articleContent] })], }); ``` -Then add the module to your API plugin. This is an excerpt of `src/config.api.ts`: +Then add it to the plugin's API. This is an excerpt of `src/config.api.ts`: -```ts title="plugins/example/src/config.api.ts" -import { adminModule } from "@/api/modules/admin/admin.module"; // [!code ++] +```ts title="plugins/newsroom/src/config.api.ts" +import { adminModule } from "./api/modules/admin/admin.module"; // [!code ++] +import { helloModule } from "./api/modules/hello/hello.module"; -export const exampleApiPlugin = () => +export const newsroomApiPlugin = () => buildApiPlugin({ manifest, - modules: [adminModule], // [!code highlight] + modules: [helloModule, adminModule], // [!code highlight] }); ``` -The routes live under `/api/@vitnode/example/admin/content/category` and only answer staff signed in to the AdminCP. Keep the module named `admin`, because the API checks the AdminCP session on paths that contain `/admin/`. +The routes live under `/api/newsroom/admin/content/article` and answer only staff signed in to the AdminCP. Keep the module named `admin`, because the API checks the AdminCP session on paths that contain `/admin/`. @@ -128,63 +140,69 @@ The routes live under `/api/@vitnode/example/admin/content/category` and only an ### Add the AdminCP screen -The AdminCP needs two things from your plugin: a sidebar link and the screen behind it. They live in separate files on purpose. The sidebar loads on every AdminCP page, while the screen's forms load only when someone opens it. - Create `src/admin/nav.tsx` with the sidebar link: -```tsx title="plugins/example/src/admin/nav.tsx" -import { FolderIcon } from "lucide-react"; +```tsx title="plugins/newsroom/src/admin/nav.tsx" +import { NewspaperIcon } from "lucide-react"; -import { categoryContentType } from "@/content/category"; +import { articleContentType } from "@/content/article"; import { manifest } from "@/manifest.gen"; export const adminNav = { pluginId: manifest.id, - contentTypes: [{ definition: categoryContentType, icon: }], + contentTypes: [{ definition: articleContentType, icon: }], }; ``` Create `src/admin/content.tsx` and reuse the same list for the screen: -```tsx title="plugins/example/src/admin/content.tsx" +```tsx title="plugins/newsroom/src/admin/content.tsx" export { adminNav as adminContent } from "./nav"; ``` -That one line is enough for the generated list and forms. Later, this is the file where you swap in [custom cells, fields or form layouts](/docs/content-engine/admincp). VitNode finds both files by name, so keep the paths and the `adminNav` and `adminContent` exports. +VitNode finds both files by their names and exports. They are separate because the sidebar loads on every AdminCP page, while the screen and its forms load only when someone opens it. [AdminCP](/docs/content-engine/admincp) shows how to customize the list and the form later. -### Name everything +### Add the labels -Labels come from your plugin's `src/locales/en.json`. Content type strings live under `content.category`, and each staff permission gets a top-level key: +Edit `src/locales/en.json`. The `home` keys came with the generated plugin. Add everything else: -```json title="plugins/example/src/locales/en.json" +```json title="plugins/newsroom/src/locales/en.json" { - "@vitnode/example": { - "title": "Example", + "newsroom": { + "home": { + "api": "Your plugin's API answered:", + "desc": "This page ships inside the plugin and is served by the app that installed it.", + "title": "Hello from your plugin" + }, + "title": "Newsroom", "content": { - "category": { - "label": "{count, plural, one {Category} other {Categories}}", - "title": "Categories", - "desc": "Group articles together.", + "article": { + "label": "{count, plural, one {Article} other {Articles}}", + "title": "Articles", + "desc": "News and updates for your community.", "fields": { - "name": "Name", - "createdAt": "Created" + "title": "Title", + "slug": "Slug", + "body": "Body", + "updatedAt": "Updated" } } } }, - "@vitnode/example:category": "Categories", - "@vitnode/example:category:can_view": "View categories", - "@vitnode/example:category:can_create": "Create categories", - "@vitnode/example:category:can_edit": "Edit categories", - "@vitnode/example:category:can_delete": "Delete categories" + "newsroom:article": "Articles", + "newsroom:article:can_view": "View articles", + "newsroom:article:can_create": "Create articles", + "newsroom:article:can_edit": "Edit articles", + "newsroom:article:can_delete": "Delete articles" } ``` -`label` is an ICU plural, used in buttons and messages such as **Create Category**. `title` and `desc` head the list, and the plugin's own `title` names the sidebar group. A missing key falls back to a readable version of the field name, and a missing permission label shows its raw id. +- `title` names the sidebar group. Under `content.article`, buttons such as **Create Article** use `label`, and `title` and `desc` head the list. +- The `newsroom:article:*` keys label the four staff permissions the Content Engine generated. A missing key shows the raw permission id. @@ -192,54 +210,57 @@ Labels come from your plugin's `src/locales/en.json`. Content type strings live ### Build and migrate -Run this from the workspace root: +Run these from the workspace root. `db:migrate` reads your plugin's built files, so build first: - + ```bash tab="bun" +bun run build:plugins bun run db:migrate ``` ```bash tab="pnpm" +pnpm build:plugins pnpm db:migrate ``` ```bash tab="npm" +npm run build:plugins npm run db:migrate ``` -`db:migrate` reads the built plugin, so always build first. It writes a migration to `apps/api/migrations/` and applies it. This is the part of the example plugin's migration that creates categories: +While `pnpm dev` runs, it rebuilds the plugin on every save, so `db:migrate` alone is enough. The command writes a migration to `apps/api/migrations/` and applies it: -```sql title="apps/api/migrations/20260802212938_add_example_content/migration.sql (excerpt)" -CREATE TABLE "example_categories" ( - "id" serial PRIMARY KEY NOT NULL, +```sql title="apps/api/migrations/_/migration.sql" +CREATE TABLE "newsroom_articles" ( + "id" serial PRIMARY KEY, "createdAt" timestamp DEFAULT now() NOT NULL, "updatedAt" timestamp DEFAULT now() NOT NULL, - "name" varchar(100) NOT NULL + "title" varchar(200) NOT NULL, + "slug" varchar(160) NOT NULL, + "body" jsonb NOT NULL ); -ALTER TABLE "example_categories" ENABLE ROW LEVEL SECURITY; -CREATE INDEX "example_categories_created_at_idx" ON "example_categories" USING btree ("createdAt"); -CREATE INDEX "example_categories_updated_at_idx" ON "example_categories" USING btree ("updatedAt"); +CREATE UNIQUE INDEX "newsroom_articles_slug_key" ON "newsroom_articles" ("slug"); ``` -You declared one field. The engine added `id`, the two timestamps and their indexes. [Database](/docs/content-engine/database) lists everything it generates. +You declared three fields, and the engine added the `id` and the timestamps. Commit the migration with your code. [Migrations](/docs/content-engine/database) covers what else it generates. -### Create a few categories +### Create an article -Open **AdminCP → Example → Categories** and click **Create Category**. The dialog is generated from your fields, so it has a single **Name** input with the 1 to 100 character limit from the definition. +Start the app with `pnpm dev` and open **AdminCP → Newsroom → Articles**. Click **Create Article**, enter the title `Welcome to the newsroom`, leave **Slug** empty and write a sentence in **Body**: -Click **Create**. A toast says "Category has been created." and the list refreshes. Add a couple more so there is something to sort. +Click **Create**. A toast confirms it and the list shows the new row with the slug `welcome-to-the-newsroom`. Create a second article, `Release notes for October`. The next tutorials use both. @@ -247,24 +268,15 @@ Click **Create**. A toast says "Category has been created." and the list refresh ## Check the result -The list shows your categories with the **Name** and **Created** columns from `list.columns`. Click **Name** to sort, or type in the search box to filter by name. - -Now open **AdminCP → Staff → Administrators**, edit an administrator, choose **Restricted** and select **Example**. The **Categories** group holds the four permissions the Content Engine generated from your definition, labelled by your locale keys. Create, edit and delete each require view. Every generated route checks them, so an administrator without **Delete categories** gets a `403` from the delete route and no delete button in the list. - - - -The `advanced_article`, `localized_article` and `page` groups next to it have no labels in the example plugin. That is what a missing permission key looks like. - -## Next +- The list shows both articles with the columns from `list.columns`. Click **Title** to sort, or type in the search box. +- Click the pencil on a row, change the body and save. The edit opens the same generated form. +- In **AdminCP → Staff → Administrators**, a restricted administrator now has a **Newsroom → Articles** group with your four permission labels. Every generated route checks them. -Categories are staff-only. To publish content to visitors, add drafts and a read-only API in [Public API](/docs/content-engine/public-api). +Next, keep unfinished articles private with [Drafts & publishing](/docs/content-engine/publication). diff --git a/apps/web/content/docs/content-engine/database.mdx b/apps/web/content/docs/content-engine/database.mdx index b261df37b3..7c77b23170 100644 --- a/apps/web/content/docs/content-engine/database.mdx +++ b/apps/web/content/docs/content-engine/database.mdx @@ -1,5 +1,5 @@ --- -title: Database +title: Migrations description: The Postgres tables, columns and indexes the VitNode Content Engine generates for a content type, and how to generate, apply and evolve their migrations. icon: Database --- @@ -38,31 +38,32 @@ Commit the generated migration together with the content type. Production never Drizzle Kit finds tables by reading the exports of `node_modules//dist/src/database/*.js` for each plugin. A table without an export is left out of the migration, without a warning. A content type with relations, translations and repeatable rows has several tables: -```ts title="plugins/example/src/database/advanced-articles.ts" +```ts title="plugins/newsroom/src/database/explainers.ts" import { createContentModel } from "@vitnode/core/content/server"; -import { advancedArticleContentType } from "@/content/advanced-article"; +import { explainerContentType } from "@/content/explainer"; -import { example_categories } from "./categories"; +import { newsroom_categories } from "./categories"; +import { newsroom_tags } from "./tags"; -export const advancedArticleContent = createContentModel( - advancedArticleContentType, - { - references: { - categories: () => example_categories.id, - }, +export const explainerContent = createContentModel(explainerContentType, { + references: { + categories: () => newsroom_categories.id, + tags: () => newsroom_tags.id, }, -); - -export const example_advanced_articles = advancedArticleContent.table; -export const example_advanced_articles_translations = - advancedArticleContent.translationTable; -export const example_advanced_articles_categories = - advancedArticleContent.advancedTables.junctions.categories; -export const example_advanced_articles_related_articles = - advancedArticleContent.advancedTables.junctions.relatedArticles; -export const example_advanced_articles_faq = - advancedArticleContent.advancedTables.repeatables.faq; +}); + +export const newsroom_explainers = explainerContent.table; +export const newsroom_explainers_translations = + explainerContent.translationTable; +export const newsroom_explainers_categories = + explainerContent.advancedTables.junctions.categories; +export const newsroom_explainers_tags = + explainerContent.advancedTables.junctions.tags; +export const newsroom_explainers_related_explainers = + explainerContent.advancedTables.junctions.relatedExplainers; +export const newsroom_explainers_faq = + explainerContent.advancedTables.repeatables.faq; ``` | Model member | Exists when | @@ -107,7 +108,7 @@ The primary key is `(itemId, languageId)`, so a record has at most one translati ### Junction and child tables -Field names become snake_case in table names, so `relatedArticles` on `example_advanced_articles` becomes `example_advanced_articles_related_articles`. +Field names become snake_case in table names, so `relatedExplainers` on `newsroom_explainers` becomes `newsroom_explainers_related_explainers`. - A **to-many field** gets `{tableName}_{field}` with `itemId`, `relatedItemId`, `position` and `createdAt`. The primary key is `(itemId, relatedItemId)`, so a record links to each target once. - A **repeatable field** gets `{tableName}_{field}` with `id`, `itemId`, `position`, `createdAt`, `updatedAt` and one column per subfield. @@ -132,7 +133,7 @@ Core tables that hold records of every content type store the id as text: `core_ ALTER TABLE "core_content_revisions" ALTER COLUMN "itemId" SET DATA TYPE varchar(64) USING "itemId"::varchar(64); ``` -Custom SQL that joins these tables to a content table needs a cast, such as `"core_content_revisions"."itemId" = "example_articles"."id"::text`. +Custom SQL that joins these tables to a content table needs a cast, such as `"core_content_revisions"."itemId" = "newsroom_stories"."id"::text`. ## Generated indexes @@ -145,9 +146,9 @@ The engine creates these indexes without being asked: - On a translations table: `(languageId, status)` with `publication` or `(languageId)` without it, plus a unique `(languageId, slug)` for each localized slug. - On a junction table: `relatedItemId`, and a unique `(itemId, position)`. On a repeatable table: a unique `(itemId, position)`. -Generated names follow `{table}_{columns}_idx`, or `_key` for unique ones, such as `example_categories_created_at_idx`. Add your own with the [`indexes`](/docs/content-engine/reference) option. An index on the same columns as a generated one replaces it instead of adding a second one: +Generated names follow `{table}_{columns}_idx`, or `_key` for unique ones, such as `newsroom_categories_created_at_idx`. Add your own with the [`indexes`](/docs/content-engine/reference) option. An index on the same columns as a generated one replaces it instead of adding a second one: -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts (excerpt)" indexes: [{ on: ["status", "createdAt"] }], ``` diff --git a/apps/web/content/docs/content-engine/duplicate-content.mdx b/apps/web/content/docs/content-engine/duplicate-content.mdx index b8e9eef69f..6f5f9eba36 100644 --- a/apps/web/content/docs/content-engine/duplicate-content.mdx +++ b/apps/web/content/docs/content-engine/duplicate-content.mdx @@ -1,5 +1,5 @@ --- -title: Duplicate content +title: Duplication description: Let editors copy a VitNode Content Engine record into a new draft, with its translations, relations and repeatable rows, from the AdminCP or from your own code. icon: Copy --- diff --git a/apps/web/content/docs/content-engine/editorial-history.webp b/apps/web/content/docs/content-engine/editorial-history.webp index 3c0fe13cde3118bf31111a25597081e165976252..9afc31cb827fd71ac0ee5d6eecbae1d9b543bb03 100644 GIT binary patch literal 49174 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 diff --git a/apps/web/content/docs/content-engine/editorial-preview-link.webp b/apps/web/content/docs/content-engine/editorial-preview-link.webp index bc90b1662e63389b9a3aeb067b201046479cd784..d030d482ecf101976b6624a953dfbdfe12e8fed5 100644 GIT binary patch literal 43646 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

mh)*ZD~o?bz#F2t8BK!0WX<#0BKj$*x^l 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

B8`$Rh=L8`pkzV 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 diff --git a/apps/web/content/docs/content-engine/editorial-previews.mdx b/apps/web/content/docs/content-engine/editorial-previews.mdx new file mode 100644 index 0000000000..637650d5f4 --- /dev/null +++ b/apps/web/content/docs/content-engine/editorial-previews.mdx @@ -0,0 +1,60 @@ +--- +title: Previews +description: Share a VitNode Content Engine draft with someone who has no AdminCP account through a signed, expiring preview link, and load the draft in your page. +icon: Eye +--- + +import { ImgDocs } from "@/components/fumadocs/img"; +import previewLink from "./editorial-preview-link.webp"; + +A preview link lets a reviewer read a draft without signing in. It needs [`editorial`](/docs/content-engine/editorial) and a [public API](/docs/content-engine/public-api), and a page that knows how to load the draft. The examples use `newsroom.story` from the newsroom plugin. + +## Turn on previews + +Add `preview` to the `editorial` block. `expiresInMinutes` defaults to 15 and accepts 1 to 1440: + +```ts title="plugins/newsroom/src/content/story.ts (excerpt)" +editorial: { + revisions: { retention: 20 }, + preview: { expiresInMinutes: 30 }, // [!code ++] + scheduling: true, +}, +``` + +`preview` changes no columns. Leaving out `publicApi` is a type error, and the definition throws when it loads. + +## Create and open a link + +In the AdminCP, open **More actions** and choose **Preview**. Creating a link needs `can_view`. + + + +The link is HMAC-signed, expires after `expiresInMinutes` and cannot be revoked early, so treat it like a password. It is pinned to the last saved version, so it shows what **Save** committed, not unsaved [live editing](/docs/content-engine/live-editing) drafts. + +The link points to the first of these that exists: + +1. `preview.pathTemplate`, such as `/preview/stories/{token}`, with exactly one `{token}`. +2. The record's own page with `?preview=`, when the type has [delivery](/docs/content-engine/public-pages). +3. The public API route `GET /api/newsroom/content/stories/preview/{token}`. + +Every page still has to load the draft from that API route. A page built from [Content page](/docs/content-engine/public-pages) does not read `?preview=` on its own, so a story's preview link opens a 404 until you check for it in your loader: + +```ts title="Read a preview in a page loader" +const preview = await fetcher({ + plugin: "newsroom", + method: "get", + module: "content/stories", + path: "/preview/{token}", + args: { params: { token: encodeURIComponent(token) } }, +}); +``` + +The route returns the record's public fields, and the same `404` for a forged, expired or unknown token. It sends `Cache-Control: private, no-store` and `X-Robots-Tag: noindex, nofollow`, so the draft stays out of caches and search results. + +VitNode builds links from `VITNODE_WEB_URL` and `VITNODE_API_URL`. When either is not an absolute URL, the API logs a warning at startup and the **Preview** button answers `503`. + diff --git a/apps/web/content/docs/content-engine/editorial-schedule.webp b/apps/web/content/docs/content-engine/editorial-schedule.webp index 4c12a1d087baccff6d11adc0349cc8a706f287f4..d0c86fa9e0d206d9d68bedc37493709caad0f768 100644 GIT binary patch literal 67438 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

6`P9`3jne{{l~m|D zzL=5n)`IAk8VcWsylq<~qkeXZz&M^e=5vo!-2hnH+m*(8gD?^uL*!cR_1f}cjF%B| zEk^j~R>OuGu}h{nEV14vKXVEBsDu@@xF29guictrj722&ydh`PyGDk>c!*sEoZ2jK z^!DXljXX-Wn?A9Wsxi^x%l4mt%n2P8u0>zqb5%(fA8QK7RlZLgW2D(#PE<;)%ov@V zpxj#a*vdn{f#&5zP8cq4SeBy#A-dMK_9?^8=8mqXrEH*2iT9P+(eXC5aH+A_7ek{0 zZgTSGoG~tdA4y6+zCS&w7ZNdTRXtHvsiF*ikC2a!!h+#KXEPK8cC(-*ow7|Xk=*T6pnPjxPfR^{>c>m=Sm2vq}y0 zY@wN#4-V>)mt9jN0DR{`moag+in(fiB9A0!6=a^>L54_we$hhwg;24jVs_}8+@6HfvnQI6n+TmHYE7-cULWfp+rT9G`i7_%I~Xo%SC(F=cB+oag`pVT)qpyR&a; z%rV*c+R6P%xoP;X0bW5E^*qOMiRosJ|2SN?x1SUrdO7}lzw0{#nhk;uV3GU6xc4zp z{HtM!s&w@Ec)#>FuxwIb%AC8`PFZ@3H`cp2>2kl&BoZBm6Vt5SA0zY_v|*26xhFLC zjhjCGUdt*ZMpjv5Mh^AowRy8yjhBm;W}BflSYPsm-nCyOB1R9>apZ$4qxI5F-gqk% z(`~HceS3iXNwfbS6oa*ADP-+IIN%jc{ z*G|ZnqrlbE;1q=JJlibj54m1M3$uUh&;Te1u2yWXo^?55E-#CLskVl`z#J--KXUrJ8g{33|u z9(Jpix9#;|=a`MTbKp)hL_+-_=B!pZmH8;EM?=-UyVafpn&UtOq#Nv0bdCcjR^gc| zpS(Q0vcMiilqj4b;S>^glGBDwOrN>_ccn-pknT`Y77K>xzGI5yX4?FGKqzbPnGs`+ z$B#_}nzDWqk+uu&ol0R{k^4wI~U)Nt>|IOI=WA2Am zP4E_+)UTIw{+waL1ZTtqfRK||wTWrG!hwMOxQJCzH-u^s#Y1EPQIEo}tq5D@`1fRf zD)x&$lu3#HWV&&OM)|uzAoDd@6b1zHh$xT-@>A`g+KL5St$=rc8e58v&O&wOrF`Fz z;>6@$FeeoGnT@_H_WC}g)I&ix3)<4RN-^hP_y5NzjhU6vJwocO%-7bN7U%>~9Gmg$;@mPy}%F2^=l{Fabu zMrLzE!cLsmb(~2b(PmCx0|z1<0?J-i zJa}asA$2cBWx1smR=yW5jCeL1UDrTgufAah$G~X0HsAdOW6Du({ec#Xj)ZI7^u1mR zmmufXXxP4~~R5KD90x@7#3+_XySn$imA638iS2v$M# z4Ml+GYgA1C>xP0WL7oX4h(;HLQ|*(&Umz!=GHQ7XXa%SEUM05%$x_nuNfD-(C$%DA z@IM1GuB;p08C6U8x!MY#smd~+Gtz`laU>|W{nX1e*KM1z1L<2_w>IQ$fQ3NU$WJQ$M$!rW%O9o8H z&6}baF=9=R2OgXeq=8r7{RNZaPzlY#;(||8AT0XD(mw{~1{H)oafe~7hw%`m>h`FL zvgrX>OADm*XiKSxi5GjA13W>()?g-pk#+z85UY1(g^rj^`NJ*G0LJQPVS)4uZiLR(n$`#OU7?ndW&oCFyC!U0@ePimtO>XU#oEYTRj zKtX&n4VlV4{HAN=!wnIGMh>~@%6^T%S++Q`})Eee&a zCP+~R^*FfidW9k9mha0)SKU1CSM>bU&*`51fuyEJNS zNvoAuob;Ey4(>cak_szd-tDw zMk}^W=h5zga>@jfa20^h4;$9WH{}=Xyqlr0H(5cttA+wl>A%N5_%ASdx)YtXECn~w zpSr%>IrK9cLfgCj&U6=s_L+I_d0PV|JNGh*uSs$^Q85Zc)IRdEyy6|;g&+UyCM}Sm ztJH3+Uvwb9Yv}W0ohSctXV*AY;eqRWvU0fbd{X9wy4|_vWNwaP$n)#SlyT0xZ!?z# zU|6%OV|BBb2|(?9WR0=7djWZ@8yfZ^de9$;(>lp?D9$7fYYe}G7SvL&-ictR?6P}S z=~*4}IVr*S-^4cN876IvUvq#Apf=WBHxD6RJE<-obqet-w7-t@3q}s7NhqC5a@VNf zGG(a}tdz(gVphH&yOym!0Uf{UfGjTg`<7y8%dupD+=>zeH#2l!{pwt`sV$_W^IO=! zJ=E)MO0MC zYV{0?{Z*bhkX#}?W>Emo0M?MnKz!c zWW;%4&KFR`me&4i!vWPZ>o44uo6$J6?;pHD&vC(6{uSb zuTysqVfh@|^ElWGz)VN?qJNp_obp<#YXeBROaMnDndHbYqBTo48Uw#pQZM;84WXJY zw(;lHOzCDG>oVpSR}^LlB30c}3J%ROB~ptOIqgBwb1sP>f~-;8hg(x8l>v?VQfZB^ zT(5F6KZzEZKcqKnTqZmPr!99m8Exoy z$>xp4@_PdmK+#=kUV)7-Z3b^iVFP!4#PlAi z-?QE$h4S{J%paI<(<3m&9oSzR5E$4^xcBhW13Tz8Z|>D6+N1A6`cP521Zb-Ca#w+sj!1SpyzIh;4Y2ucaBX{BH|c%GTy5cOlY-QP$052 zb%sx%VMi%(a0p%;)k@Q4a=pmN{v=vt{*c|Q#$<9Qdk(xmtzD;P-zV!@S? zXwxLue?`uiTBR>_8}MeNUzj7~YCI*i0WA~u>0k8twd^}P3PnjQWVfdHmym~X*xr|m zpI?h%J%c@Iqq~s?b|vYAhrytZzJ5sY5QXYDIJl=JOuKewfn2!*_A}#3gkN8KcP_05 z4+4@enMWYt;eA4UQBsF8r{WA@mlRw$wts#i4;@W;TVG<~1(0To^sKyLdj>hUGJ+Lwer5q> zvHqd!;#nU}BmS@q=sL&gB@~8uC2sfvnIWn#1GT5_30(xgK?K1^ zx2$m$A#C@QDdbOSkT#H5_J@y~k`rrBr=`K3q!b~cwe+6FOZ}y11;nq4df2r&D(`^# z->n%iux{s^;5Zq6HdG6JfB@VHQhaJQ6*)yP0-=FyiFLOw&~nTg9**tb)S?$Arg$-w zLe1oKTd=gSAIkdz4`H*Wap>RWzHjm6*S!`}lhSG`m>ckPegv;z@$6)Nzcb!zu~0iK zwMSu(yHhJq+MclnUt&%(Ne%*aKSA?m#TX6^sApWsN7Y=UKqBK*1*JBJk< zavHcdB8{CrfnnHlv^k|G__!I1?Z~iThOK9+P8BbRTTOlX`M%Iy1t3~Tqq`|#ayDN# z4L2(qT?UpIOoJvHEMsf!?SQJ;ag3M^BaxQzJ=c^?jvR(;dc$Oy{_ec~(9j;FSi99| z6GmWHOt;UM!LPfL8o%C%-cKhQopm50xzH|X*S2?lE&-*#w)5Y)$aH+VW&pPh&@$R4 zpBr9qnR&dRPZ;ya<96WWy zND+C5hsGU(4bH@+IFtZ?1p^P4$eR2~okPl?@oiPnj=<`rk4{9+V-8VVr$3fK-t@ob z(6DJs|JTDxI>0m+kgOTyKAZ+f#hYi3uGbsiJD|{cM05`^!HJ^}WR+p39nwd9V5S^c zEAIyxv>$;1*~m8Cp;pjS%`^*kP*YtmGW^9BKNHPu?2ay#d==o{Z;pkl@3gGET&c=d zUsShGdwGH0x24eX2gmah+=pG8%2adwz?BIRh^HeheR(AN*M-F30QA7)V5GW@Kw?+C zR&3U1<|%ndv=5jmX^LZvmY@=!w6>rXR>^HwIv~o%g4qzWW1cLcujGg-XdisNgxr@#ER3j|`vWjZuVRelNc8ki!EH4fz|S9f>ew(t=^t?Am18L`sdl_V}*wd+Tpp@38vr`#zVx2l<1 zxR?cf*WNNyts=UYzcxzSgS`u!Jz_y5gbKsZ^q;kW|32$A$c;TfIdHv%=lcr~$x5um zgyeEhV>BuF-^`K;HjGtxeY5O03~x$*Ep}BX>BAFGRt3tLQ#ni(S_1X)Nt-E}t_w2R z?NmPK7guia3P`ZGVvU~pXl)35^1b~XW|FG zp*%=KUsBKGvKc-L(z}#ed%J_!c$1Cj>9W0ocX1!K;*s7$^91FJeF;9ZRR|LBfn#)? z<~XdCp^c}?JAN?H0{}=_#?hWuV`!g~d}N4I(8XBX4?4O9-ST$;ckyObNj%BQa;-R* ztNJ8SuGV8z{w8egyJTun)r;skr(t%?$e|q=;OP?UT`mq6I+{vns602U;^rKQ{=*`FgIWTEiO96B;7ECK7=bz%r zP6+5KD}egwHww?5$RrM~ZEY46&CWr48`0QXpqIEpbejx6Em3XQEqC8mNA4*(Ncu^g z3kG+?L1)dw`Yh<&bTX%N)r!EOUy!^UUKT~fjAm7=%$H_86Jh+@>Iy5}>Wdlg)U3gr zZb1Sm*|zv$(kUlZhvA~n*kmrV;_kqsz^sy=VWW%Yf-Lj5G0jp#Y_$tWcS>98_`8*@ zr%yeg(q>CLgJI+%=~2_H8sM8uBeKUZro=Fs?9(Ke7N5wy0{;mbZ2|vBJp~$G>+*xg zzh(eFI?LFb_Bp(Dv zX%0$spU3G&lry@t2&!JjR|=KDUufpqwf5w&sR#}EExt?FDC_QTs2-e^Nx8!oOFR90caT1Z zMy^@YcwSWWagwkEO-AOAlso5iG|7T#n55_=Hh#nHk!GJfeaiZ#AqyK6Vc2jcaN`U= zl*gV-w~gHm&lIsxLG*ealv1x%Fm*%z?^|<|KLXeT$Tb zZ##wqK3skINrrRGir07XiQGE|s)(}$@{&mwmY^50jPoc9OW^TG;Q3Yd^K&?Q5+-OP z#Bb2X6i*?&1L$zys9?a~|CyOHY^AI{b98_&$JN}RBu=q*fsmjAy9d@+5%vFrMu?V)l%65Q6G9nYue6cqzC z2EX>je6B^%+S!RLH1u+YXs3Hvd#qWqR?^aKcTn;E$TAWk#Na#1-87mnpd=P;2r5>w zk+Jonx)`=_YRk#2X1whei*skSWHUqK~?c`&)g1j|L&JEnXpgI`rVKdniZu(u)>s2QLzQXNrG93d;sB zRmD@xtcNi)YPDkAB11}_H$t@u*k-nC9Qvhu-) z0*cSz90o~(WDvfk5YU;O96GE8LA#}oONpKZ4OuUNp*rG&xnfCILC09Yz`U$zYY^l) zG)M7alWCYnODUG6>F|kKHi@~$BpV)&Xf1-Z-Uel0HNQZDCP@Khj-I?C7E2XL{i=ks zVKN6b#cS^3P=pp+1H>cFinxp#GsqX9RE3k_vmR*GtbaYWAhAG^lf(S0zh-lQwe@v= z_+WSzC$1xe-8_;~d6LY_DjR~>E5Yy=pGMIt%Ywx0b6GF^qIYAZOA{c{R`e)RSOLWB z4mJJl4R8WjY~h8AN<@`&5WvE!4={B_tTC7lscp)|o8*a&Y;W5a7QVpzQDK0uX;p>5 zDaiZ1Iobo@G{(M2JjP=OQ|IiNqU4zH6aZL35 zmLwjMbI-uD;yF=Bhf$^oJN{~ zcZd4NK@i8chLGlU597f83?Z|-JIxNG$doc+`^Gz_NeZ8$d6TLM_rPlY{URStr#mD1 zsPh$=_-eb23dqMrgwXm|Uej6{ZJ%R#B;X!i9!JzOQSt`_D{|1*fQtd7m6mjRGaGW0ZpEGE1U>}zV;E63|Bx()+1#pVX#Bg_L*h4g@fjD=8Kz26-J!h} zJr^bpTdZH1CASYng5@L`!SHMo{nx0h+X`hL6noR|BD!DS&6-#j#=ckIvpjOJO*S{+ z><+*Qbho!3O6+R}c=JyC4(o`c+z!D+V?`0e#H;)XkNKmA0!m&^nog%0oCUp74_81q zXfHob9~Sw43y3+|y?Jp=6M|{R3X)HnWT>0bgRBliAq?px%6yQAnzecpbTQ3xd7qe; z$PsZ^Xp(=IjjYCNY+pp>1#<1YnEXBOpX zdl_wxS3(j?ubC^Fg0XAkm)TMNSBdg6zOKzoD3BwvH{D|vt{d@OuHh66PluuCoCoX) zUrx@b@vmLV>f8I;P5BA_5B5G-$F~cJ!D!!^_$B1*lvPEs@K_?ps_To^MS>wZoPKU4 zpq1rFBw=H7tu~PjQMWvzV15}=s<2xUCT{4i&-Z)O`+}G>5P#^!Qe2R`yn?9ct@t`* zCFxnVAgZ{@M2><(n|D?ICAc1df6}(6qhc@=6p=wj@3r$d9sYDQJ*OJfK(?FQ_kgKt zRiIs+9176upC`Twjy}~=T`+}Qq{~*xFdwAy+}XKkYHdYTIqKPS#ADfj-R0>x32^ky z=k*!|M*8v%Z!JOVpMr%YUQ7Ne7U}$@UJaurXJN^M)QmzkeXQlE!7YpVu9dryzsvo` z;7#~CC{l2iRYDB?3c>4A2$FjRQIEl4~}72Uz@%Y5Un1pxUTrcH;E zYor`QhDKz%U(*8L^8Z26`o*R*EiOLDnhuo{YbKl@eN zAwQ+Hq{lVWNzekuqfqZTLUMoDec1E&I*~d(@PMpbv3{UVBNzXmC zF=?B}0wIK~&Xv+5qg~+ov>633DT|q>(dDcW0LQ{h#MFU$-E-s^%Q|!Ju5$cxbxcdhb`Kru!~BZKoQn$ygg-*cJED7*9H6Z3w4V;c25bcISwB9aq`M-inuJpV}Mo*TIQox*9iLxL`26$69 z3H?;)*qJ+?u@-&m{r+?IxG%8D`JPkOns=@11;{~JPmbyElVrDElFf?mxb^Xwz-B@% z`!qL!{8LW6iQ?3KTn|w}SqU0Zr|ToK#{;|Z*$d~FiXg(%Na5-Z64QQg5IOGHF}=Xu zC$C>#aZn;VyHpv^lXGVKkgXGCE zj0z*VEvfwu4q2114Ku;r%}?wN{8a#V5K`ttsKHB@)rm<8BfKRFtd(ZT`j`Wj^eV4D zq8tSxfM)w|ssC>+G99#nW<%+1ZT?Q4lu*CjjD_ePO7ml=h#*R>;iAvcHJu)-Zwwsh-jP6@aLG3P!tr|O z-do=|<6tCWJP((&NJ(X&)-4bf(Gz}wy`gf}Kdh(-d_ZQJdmZP+4=dc&lu8VP2#!BfH+h6CEeUk46iQ;rEw3 z!4&CiinRb1N!+cVZKp zLAx;E`t3sWCvn|cKrxFb$}_SSyx5QfMV@IDR&Z-G=Q&^DXR9%FNK=CBszE6-n_Pl9 z;TD%YqiZ|v48el`&r%KWjyrSu*+;rrJ0=Tu{46`5u7vHWF|S~Nz)I`DqR zi;W@!2icg?fWWyAI=T^2q%}C0*!OD4DjCZWtsDZzoOT{ETRY%A=oLvisG>6_3(l6* z8=l7H;C<+oW)psId@6$o^w1B-zo~2R^q^0U`hHG8*w4K&LNG&&j*I+5JBY_IDj(Hv z1^u9A?b|)e)ElW(A$+Z9=A3yNh8L$C*y199qY9ke>&F~>U%BdlDuzZo29==7`;?|T zpoO_Y*oPSGrm}P_B>RYchG?e`#592vIu;i3SVs(NPM73O28@U~j{H|@e0hB=MQL3v zb#FptmpY2ONm*4B;@`aTkjQzJ5SciexK?TQ%(aNEr0_rDZi3179p>rzvC<-C=CF9c z@`CV5Z)Kg7=ehSUC^?ofT@SN9DqD(~brK{1VdhOb#0230!GwLg-^c0Y8AKdiR0hY4 zOZ=5!cobx1a+yT-cOHu$VESHg7mQMs*Il|G1AGFc#L!5i9rUfp6k8*Ce?)_(3EE`Hop*t|Y)RvNR9lI5Mi&pC<7Ri1AWLc0;c%xy$1@jKrIK)kFQjp^aQJt$gKm&(O^Pi0I zC@)-%U&_Nr7zqlSZ=FjdZ@)|*_>)N$eX**LusU>WalUMKjXr1 zn%sj9Z=4DdZ!egcpPv^V{)B7XR1z)m9DRGywSGGbtj6G8f;Q&)SIwjpe=#>`Iq_*# zCaiIx5*EI-M0Ckr*P8B(9z9VS#lPl(4E4jDj&>Ps$;hSQ`+txI#gstg20F`TEwS)T zT~FS2fN!bfkua9E79vc_Pw_VX=bgGR|7b|8vk)VudwPciBlbcjlu$EA4Ex>U!?t0u zN%>dxb`>w3U5ht+{Z5lid>h|k%1pwR0Ti<#VfPQt8B;N6o$&#okcBWPR>+3qYsN9Q zycOpD>ER6vw@w2EgB`-WebvEsiLKKZHtc}>_bjlJt$Q9)-@l-s$eH{&E ziE?Hfq+|%iIr{%W_Mu8;CucurrJ@VEf8l&0&EsO}!f5u<<}TgX zj1Wxqu;#Vy-!1=cOGNwDdRWSD6ABwk)xV7g{iIKUzAB#j21n-YDGRXF_fATBt4{Va z(bb>56vedy; zc+J$NBMcCn3&7bO+$kD!*^75388t7nX=7UhZ`dJqr$E1dy2sWTdQF&1AWhQ^cmiO; z0oV@97}9>e#5Vw<2kRfiSXRYMnHgw51Q5CcNHkFGdq&6c1{!_94cgVBQ zZOR+~HHY%X&I0R7&Qh?YBPD3cAB<(NsBBZ(S6yI>N@;j|?j~i7D$yFDFaQ7m1Y}Ki zQt5cj$9zBl00rpc4W8@4WcbCt`4}Q{$%2{JD2n1x?fD5827q^XEZ~4$@Ax<9mshJn zE$NJid)N}!u3GTZMK^mIEeGa^!~G;={Xgk9R0pPF8W7u+mP%{`ln8)G?jgTzAo!C)5Plv9nF`!aO?sn$T?uQ%cemm2{`vD*}w9M)u* zd6p!HsLjz+hJz?-#NHnh#Y4#qfyjZ|zKekPz_}Xml^(s)wY*uufl= zLWCWjx=b%fvTbfmX81OA6RPH!xE{FVe)N<7Qbv~sqU$1I`jfs=)g{BDV3;0l0`>rU z%80fscP*`f37X_5ByEw=)2#H7>)NP!GsO?X9|D`B8iRfcVFIb$w&&UiQL=vkRjn@z z-qB`ntQu3Ey}M33^4)ur32HtL4kK8|4QhAu>F0sxT{#KN= zmuNX=4G=37xyaG$-GhR^6}sOy?aCCCAMk1+0AB?;4B|!dNx?f(M}n7B%j^NTXNgd} z=Ot0UEN?wdFMMuwc8wu{4!i@JfW7T)H9y~)5GmiWQJd$XFo!m6Hcn!kfQsZ}O9@Su z*+6+uM$(N|=Qw)Qtbk#dzGpvIvIaCAdE(}^eC82~FTYNqx_-0_g&dWBx>L|82!V#y z+Um!TsVMUKkgtQnWvvGa2olwC+W%zT>Vt(~?3h9+fRaUlzr*;*b8~&%!MgC#vWC^~3NFQ%ynrZ% zXU9>GVtI?U9qEVA;lt)pkLSW3G4$o{7q6r{@X+RPiXr+hHrsz;L&E}0g=fGOmV>Cirv;mv0#)93BSvG7gXD&>K-kOG?tQKmO}3_O{RqgbugRpW@oud@S! zsHb2;&)t6b{$!Z;3paQCszcB?PBZ@x;yA`G%C$i8YZd0;o>R&RA5wgvy!^9$$_J9U zf_X7C^n2B27XGB66N$zxIo?QanSDv@FIf&YIn=gz@u}MHXu|ankW@U1s_z6rJ|X0`Sw3557hr= zFj2{mnEH5d2Ji_f9#Zx1hl{FG@L?EZQJ%34y}vXRUQDk89FGb1c7m_N-L1)2kg*vC z$m)2ns}fu{cRzQh6qa`u+$!woiQ%$m_XRY7QI5k^^fV#&Gsr-Cx~sgakDzTD*ho+_ zF)-yQ+l_prF*S80fhuikPJ4ry%(a8xt~8+@JJ)AcG7p=pRZdE`l9E+<^v+&&O8Vl; z;p;JycVl9%zI~lSLyG9~AZhjY%o-ZxT zX32?m<(mskv`Rw0RB%+FXKyTq@p@xLn|8-l?UES)ub#PGfk^D3lMmi8-7-j1N1#YU zU{<>B9wjunTQ@U5^p8u5MHMoC-!OcS;iVlgoO74Aj+Ur5Oy+j~zz1rE%k;9SP%;87 zamk--Ery`LSD}d#`7NlK&5l;2sdy^V?0yEIe5)*xx8jM($|etmqt6jV+eIPP&;T32 zT#oiD&pokaFN`@?hqKubjQwAWaok19q%`E^efUt$t}ER8hw&I?uVDK|Vi9|7S6v6( zL-Ej0x$LNEfa(NpM`|Syr$#=lL^;`q(QhzMU_8 zW0sv||F_Z~!$<7F_NCY_6{6dIvX5(M#k>PrZAzQY+nEdb!~u9ATJ5 zVn5*-Rd0xRd~p)p*dzBngd1+#%%MUiDA3$~>>VQHtqgcV6tYVYK8H+PZ|cYQ-sOw@ zr-gjiZzr8iet|a3L6pbpdgiH@O(l1cCotwBA681n9IJV=UTRjenQCY@wVIJY*sSP~ z!F?ODN;LbB?gYJB2lXaqhr&1xJ<0`C_%gg}>|#vU|*(621c_#t=#;ScSm^$>JH zxoP(a4}>}y?Jx5#=5-W{_1$@hN+k?8@S`lH1W&(GJMSHthfj(#Bf$Ys`eGc6(Ol2W zkd4wPEucbUqjj|nox$34cdM3n0(v(lVr!CWIF)I_!g$IY5}Guy9Xv^;eLF8Rx%4Pt z+GuZ%WMz)wdr+2gp3xSV>tJzh#D#MVC8^H^bMlx3Ws%2y2MYQ$X(c?QK(eDgvh>J} z8~4~cHj$b802QbvPF7-z+wV@&kfTDYObe~{&$mtiQ!G6P4)CS&TpjwbUX>*C zNK2fX`lD1VRO6NjWnnY-5RAGOq9vJoZCOM)nV(Qudeo}>40V1ZARKD+On&djKi`!D zWmHmdYeSOOwfLbot7q%`4~cK-?R$o~*8CrPQS4&J%GwxOr$!qA&Z;-bJ4<)*eUkp8 zEf<3m!pM9hzzQc74s2%lt|RbaHLb%1F1A67*j~+8ZGR-!BH+EIr#0`j1tsuc6g;k| ztKclVc)aG5Jnl$quC%Mowg_TWK#rb@*ewi>U+Qtz={c|T7H@xyCwyTw13PFa3%iZ2 zNZz_+hUe`JwZ?xkX_go$oj{Rf*-^{Yy^rf3P)}^g411IGSPWcx*$%1LaBu<|n*bfV zTt!1WiRT^uLrJ2TD83LKEr7B(DfnP(kl1tvSW$6n?i}RiP(-rL?pnl8I>Mno%A3v( z+G&3Fuug#@pz9Wb2(cpXgM}ehDX>MIpUVnG&YLo=cRRsWI$vJrcFyN}*!!TM4G#b% zeLFg%#=Undt8edbH~9(v5B5G-$F~T{%QKi?F|OK){4Bg1;eJ3!TIe zuuR@xKl(aIu{=fKWm271HOwxbto^>3*c1X-SKC1qRpM;;mXDKt8l1iTAZFd`@n<^C zmNYKE8@?O)_Vuz<3WzzYb_YoYWeU1=r+>Xaj8dzBD9#C?GF-*o=`moI<2ZAS+~7NUPD zdA7@=9Vr_FM<~*>VE!Dq zi))naJs#pR^Ln$(U=|{$a4A(rE99j;hK?TJp{@9V2Q%)|ZwD7qF}Xa12xCWVJ}b6a zHjkbAsvU|Y+dcVrlt+A9eM9iY&yPe`SC>raY}LXVRG{r-^V^?rhqMST5|{Y!8%12; z?tADI?_b*?_}aw$SFW|a-ngX`he*?wG70o{^qza8^qMZC6EdQ6eY@CGzTT03o3ZPx zF0M@l@9f43-{Ww1vm*8%V+AUV3aI6t+?Fia$7wmY!C1>U%tQfRIFKxr?zL2YxJi|p zfZ!2rWO1VUO#1SN{VW@ zC0O>vmgh|vm0PQza@5D*l`1<73}aq81AH`pvW4+zq7tlVpViJDnSi!vJGGN8-c()J zmSGmIVHx87&Qv;h_Z!`}$2KQ8H=nVBQZv zZ{5@vnu%QR9+`5FJJdH0gFb09YEdMF4a*xi)MzlSsIo~!e9ti8U2qzQ7LG{4zY=^J zifhc>71m&*(H>(02He-tzaBLY1-aYuYgf zMF2J~#ssK0`~I42Hj!YC8EjJKT~5N<^y)Udn5;Fa7tJOyOqLws)&n`WzJ&Lq*e$@d zl|p%Bo_sqcAO3s*VrYcR6DQ@75TDN-U*IT{qR&C8+Y_q2uKiw(8#Q^#^Q7qez2hpF z6ao?zQCvRB?!Ddw7nJ&*88M*8v28%Ny8E-+v%~MxVYc$zf%i*K^X@k%yA%=pI=~@wPli-K)+9KttLATC#PAu6>{ry z5_oF%WNKkfx0;bj7J8!E15ix~`)4)FJN zxn+{anR~}{WNRK)8Y*-P{$%0WaIfBD$(fRm*C|9TN0P>7Q}Sv$+D_)=gWt)VPj~`- z7PBLf4k&@Z{jJtnXjihxP5|GLhxo*BMDc;08O+#;BI0q&PZ;AXfBnC18{rN>jLq>` zj6p#LlV#cGGo=HX9rT0EhwQ9%R4CHJdSGg)7JL7Ut#7{XH$8oml#(c-rhr)f*yStQ z_ER7Rf){v;$uy<&dsOSkPL|M;#p>GS4>@a+;zdwE03w)THQ}M>lY2k@#W7L@5F%MH1-PP4BGkSG82JnccE zlb32g>f`o;yhhl53j&J%!KjZz0J@L$0;nLh6mY14HCuu`0rYR;6RUkc?tx|e-A9`{+mUAE!YNty z0(`F*1_MFS>&ZbboKWhBpWsxb-epwO>+)IJzw|!-<}xrI^Rv{olW^Ivw0@#TXH|kz z6*NQl1>_%C)7z#V6tRd9O5fr2pNZbv2f}RktX4c0b~&vED-wIJ)c{_?ZZ@EU5+x$+ z*iCzqj%ZsI5GQ%GIHF#*alZqs0u13^B;ad(Q(VcJzA6s3RUQgu56F`IE})4~D%|K| z!Y>L*Lhn>aYt^k)UZI{K!FtQxUew9G>erdB0LtuK z>RS?8-Yx1A`r8cM$V~^X#keOT!-$$VD8?afj`I-)T&Zl=CX3t%nS%*FdxdeSO?+Ht- zh;Q5g%hE1wcPXfonCAxlN*{`Qv?F)0v?Csy7uE&>finjY z)gK;Zy#nZ)b}@nLHta`Nz^6KWkFY7GasxZ6iwG)dHdlp>s`N<9Vt{*@>iha#zXh_e z;POtcXXR#bpT-AY6Wa%C)V-{(pD{P#FEYuwA+(Lj$eiZBYJs|6qQEOmlXOr!OLH=4xI^gCm>MK2+JIk*jZ%q}!AJ^&`!xQO&E&BQMQely zMSi!^v)GOl#$}fVsH;0Xn4`7@4jy#)X)#q%g?2LxxiKt22#^Yj}m#uxY+=}rJEbj1xGuI-pEt18 zz^dbONvHA>R2eZY@PXk@c*;U>NL6GL^;GH!-oKBFK+o6@=><9=9>9Y|198jboIoNZ z1Nv;$0+9)D&|#k`s-+Wpzr>^mzkMyxec?A!^0lu6q60xY18KZ*jQ;IM==q{=p6tJ*^z`N^e)L>Xc(7P)|U?=x8qJ zm?w!O8l}B+hck2(duc3U`eX**1GzE8{86n_Fmd97HIhE3U*3fBK#UqBF;;w{fY?A5 z7-`7&#=EDc{4#Uh^hC~gFtW?R2N7gbDkU7w3}4*ijSeDCOCzwdY}O4Ql|kSwAK_7J zCcqIc;!BtbB2iUQh433mm$AwUfpa&52U+b0gI%DZgOC~2A`ZouG_KA~@SFW^p1MkF zElBC{DcWLTv}5cWuKYz%0000HDiscE^_9Qa{!l#G*$n>g$|lspoNV1tp%U@L1x`fUmM4Jj`WX05LW z;P@&LF3{hC=~ws!H%+2hX8a)I1fDw*7ekz~ElxPLb9h+9VAHbS)1oK}Hk3_M=HjKd zs8pHi;a~A5=FPE_kx1O#<$2m>#a~Z5lXvV&U{5hb=?)5&e%PO~+ywQI zRREm-ZU1=LC(cA*HhW{>sJ#-Aq7ruztfGraS=Y6Fs2T>}s)CqCe{YRQUy84uki(Uc zU=q)4od}*$(}nyO&}#x;Y+pjH2Sr$^EZrF)$%bM`YW_?aX&w+)9-Mv1tH|YAB205? zZhLIJI_x5h=d+QLaN}7oPUBGnJ@poJWRaEYyx!~&Jl>m z9kmVU=_93tTVX~X8Km%_;PG#X5jleUhfYj{;fBT-FD}hZE-9cBV^GneoxNFobvYBM zv7VfRDeYcx=-5eL4?xgJm&O|fow~}HJ61TgTC2csBGQ#n>Z>x^vj9Ia56*U;G4M3tA5q1&BAphCZoA?-GQgb#Ci zDOA+y4cv|``ZK7SavHc=PH?!|1;j+2q(?6nBR7R4hKVr805s*o&hes1o-6B`n2s#q z4lJ$5RC?=k+QRWsN)xN^JKC}jF9{bC=xX;KQJV(Pv1!0KbP!53_!Ej%z< zik>}(0PCwqM;re~R{`qgHY!4D3b>fj!^XvfgE5eX`T{gn(wz>>NVFEuoYJg!zDM2* zwI3km=vU1tjG>Kiw^L~Vo~=rh=o_iW&E=YbEf@VmoKgli@%aSf82_Bo);bwXrhfsN zdX)>-*V{y3(021w0BV)}0IB`s-#OGS^TY^XM8CrcGIy5$a@3IIo6ka~Bfc{VE|Rnq zw%Z8WjMMd&EG$}c?=si#6*c?~FYEEhrDRgE2y#8mrS+JQ-=``%X)W-wvQ%TvH$1ji zZ@3QG;0+=Dt2h-gA9rO)W?gMpaz7>hSSgvP%skIL;K-wVt=%)H#qOw~5w0`f#?rtM zfonYsc~PUEw?bhNQ|pPE7#&&PULbsCeev{zr$bR}JShjJ(fG(<2^EN2ptnBJagnPI z!Z%POMA@ae@&vh2#T{4UcuHNlzX8%`xuG!TOckX+e1zPNeR{Y;08ChhBMHzS7LPOE zQt~+RV|w1sbjsE*$^wrpb31+%zcy=c*kl5u5)Ov~^nc!1vNl8eVvRPnW5-wJi;LU) zC}9VaUexbs+ha9?tq+Z$sCIv-!@@UslGHrFA_ygmPMag!X^6mojqUe$icJ@Sp$ZDC z2@T(o9(ZSn@qC&%mmBL>diq-tCquZs#7`23lj>}pHSI4_KQ|6^;-KzF!qfF!sroH$M?zW{Q zSYf}iS@qnPaKS_xLM&(LCOJVmp;99hpZ{x>(4;JbD3?Fi{PkWw^?`${63ijm( zoj%KB7)#|a0#~{>)2se*w(SkFBz91jCVKznw-YfCI5Yf9BNn=wUXti9kXjs@=rXg? zxWw_9XX;htrpdTu#q@E=Wn19*oxsEA`GTIUdm5Hi?ie>@jyDag3-i^cO6!|z$V%RA z0(Oi>L6WBJY zV^!zs*pQ@XKywnQq-*S0*+hjzS1(f@F9=UJS&txtkIt$y<`!gsUSK6pM!3K*`1K{z z6cKHTZJRAfP2M6Oe+gc_AuuHigxT=@tP<$DlPNR~pM9&C6b1q51nuMrH(XhTV;Lj_ zlhpNYlog@C`;%kl7KT5Wz-Vb}I=~8LD{Y~4M{xd1)QY&JLPetp z5fd{?!B6MI!0q(%gx0h4?cv(Ct=b;f+!6jHgs%oon^kNpE|_``@PxckXUd9%e3O9P z$-xWG+beBZW?d5s=gXExqm0FGA(wl}lJ1 zDyxAF$mu7j&k-!dAcv-^c|#Wek3n)RC;U4!2=uwe(wpSq0BKo;dphrdW3Iq5J}B1d z8)nymYLNH|yV8q*s~F8@^`A!&8KjQjSwO`WSB*8Io>Y&N@?LF7D8NiODP(sLS2le5 zhrQ)H!8q*?;bxFYN&qW|NldO866&Tw+#Juy20is60$G=l*ZhX(oO+1<*f5@dLX#rQ zjLd@87d&KM#d5a#>T>u5>1Q+Lp;?|7O3iZyg*3bIp}nGc>A@w+&S>(AkAIp}oQc;K zl6zjYfXh2tVQuRlEHD)xtO5)!AZJ>xcMd9c5}Uw~4duwIMJa6QiAZdgfQziPUx9Xl z_G<+(-a7g~{eq7(;ReBmZ(~sIjNc?~j{9@n{0$Dv;OGAv#{pH_dZA#deQ#CPT(Crz z`LgFweEcIUf8$O9b3k1(7uG)Ig17_{j7}6`1A)FK3U%94{Y%hyjg9~n)M~|%sNO%> zB-V6`BbB@r*F$F6{_2+LXM)+%n_HlAJD86~5?6EP9_CCr4dsi>3W-gYpuL3Ovan`L zl}H}kav6*O000d>NLewcqgLr!jwj>in=}sIRbl}p2d9)?O2a!6qgg*vfj>5=!^!j3 z#ubP8Q(UU7&R2i*at@Xpdmg7D>b^0}3a_{17CvVGqN~}?B1JG_6n=bLVsuKMl}?V{ z@xNUn_sR8NSsdH&m+r0>O!KKr!EnD3=H&uQr2rKaC*Z6J6mbN#oC| z_DmxONanMIrkz%>mrlOr$J3ec9xpGHW+EPx8dDW#rc-$oj=&&_G)n(p8U(A*aA~qA zrs@}qkWzU5L&3Iyi%;kSJFm)d0E5}FW5t^{sVoOc$`Rol5hG_Spc7=ZfuN#2m_Psl zj{vwCaNB9u`lC^7lQRj+as83T?wPL3)>$L`>?Pm|%(kTg)F_{!tjusoyDo7yM=qeV za(v>Uw=6wGSf5f{tP>3hib%u8OD?*TO5H>WdMsoKw&!zA2KiRN_v1yN*F2acN_(KC z96wG?;_50GbRC)1mL-Olecef$qY$H`H{3bPJ4#`XTY?|8+TBh$DVM2q?JEOiFVEiu zC_=P-!A$|~+bpb}m9EO=(yPGudc zGv<&LLB_14JraL~wE2iM|gbT%-(oP>tz`ZCT9f5;g18??AKSud?ROwUVinw6; zVVLxy(t++gee0Cb_fk<`Hu8h*PZ);qyZP&us=Fu&4etf(Sbr|G`DwP6AwFLAeQp+AGLR!L%BYZyv_g&Mxp;Qit$$pfp`@Yd1QIfgNiSd)H3 zN$0)xRW)Wm_WE3Fo!%|+7y}blqL~dspTT=HdvMQBL~w7>O0O3VtRmZ)k=$#eee8c` z1VQcJwZ~4lbCep9od=w;?Bs!QQi@h+!LIKh>HXAX$}*ldiw9Or+&;c-wTj(Mdgct~ zFmqU8IfcZhHy$-Pe&gp~)u&?5=J{H1*g^t^P54VxlP9$_-A zx?VJFB?b5y|5A3^!31t3$ctwgszy$o5xQ|eCV7mwgL*0k`VIbohdvxQt+T)Cv}Diq zcnMrxk4c*0Rb&#y0s^&G0L~sw*43^SZ(xeAO;>Yj`VS)?+7!ySmT+6y>))Sobckz1 zV-}w-Z!=QFO1s`C0Ch|ML{>+fNxgF2Ma(UM-|?Yp@^2e@THO^dHn=}Cetp7}YAnbe zZ-NESO1C{=N9!7v$^Uu4bM=tYkrCTy|I@DbZ~z|PF=g7`tlloqN2TPXHYLBKQ!3TIg$~1SJrGFrIq|5ELTL2Q9h^i>sIn@#J4il&;rZFE&-?5nY)R@A z53yEo(WR5nOvYZDPw!xV3m1Ci4;}!zJWx0WPVgq7v7L{I$iY`(z@9a({*bWpLH6^y zfN|q5gbww!#qxZI@|JD7dN3KI=0D{oK(fcoOs$0e+`98+Pfkl^yvJ(vB_I-XvjT41 zozPd^qj|_f2YAS+isc+7sM?;GDsXP!#zKXhh9>l`sWO?J2=Mj8#u$P z4Izx7AF~zlQ+tEhOcd%cvQ8Er!{fXdslmIrJAhal6ZHiyZQ`A7NUKxkG=inRIO9H}S0V z?R39DqsRLC`X(%Wb`q@AL&Ve_`Bbf9*U}yZ&nD)qUH)Ohgtq&eO5bppXw}K;Cv%~; zznIi2m z%0bUqvpm3cklGxe-GXFt2jy-x>t+`cNMOn?azY9^_LlC2f9P@o6(i=bDcKB&QQj^B zC(1-7hIbe_qLm30fcjFDChp`>8^!LELT@zECkJlP*`u}}fGx_*E!fVvWm8Tej8krA zgv^!jBG58lqy(W7vWZVq;hyF9rg3Bsv55yCismy|CcFz?J?b==emDzO8`~Hq4m!zo zR5&k29l6VYvxn3Uq2E@YYzwLsp@zkGWyssW@KO;{+zcK$$u+}Z89nZ7u5VVZZ~)XH z2FH7iHxC5MwHm+K{w$fTr(*3e_u9=4z*t~$a5@eYb01{^FH3W*9n&Dg9pRaTRBs5X zj8BB?d3qwI>Xkn1{(`TfdR3#>efhnSmlJ`adWmK{wLSVE$64nSzS+x5xrCZxz#@pe z-#V`m(rT{tW>s+^a^+;*mzq3L%5Qi|4eI%KgQedv8W(8hIs`$4-@M{Ur=RQ}+MNS# zs5L0hZmgVFO=q2gHU~v?T8!Qs4Kj=V*SZ!_rsc=OK7P;f*P2%1En{;UKjY&bigvru zdFnfWmH5^K;#QcVoa@?^ifn$hBu^zq|3V;;Yu$+_JMb+d#$3M-QuhMfJlLTj$XfGx zkKrGs12g*AseQ$y>P?eS`&9fhupg*o%v#pQr9G{co|Jc)1f78|C@S|V(gI6uKRYbgPR+6miG4!BcdS<=K%VsKfCyE&3oD-J=|FUP1InZ40(My><= zf0?KRR09t#(xYZjefobHwj@V!=Cg@2@Ocot%dY1O<1A`_*})epIi~=t52b3$p3M|` zMGaNN4`Jsvh7tfOQ#Q6x`a-Oa@~sV{E#CXX((_e1a-+m~$~_euR^Z+lWEJJFyiMsQ zt*NoUUbQ6&_%;^MtcE)Z+cXFSRUDWR%5TZzIoYHe#L&M{;y1s%q!5SmJn6}NdGj!;Mdv-Q?QvWl2HlSc`)@JZ{ z9fnVCNgiKONOJP_7`?2f&j!Lh#~<`Qf@sskmhMuP5{$59K&{;0xZ=&{naMRkJL`GT z_+8i!2gwAz*mB*#%DphGcTX>o>9GP&Ii0@2lo;E7ZJ);ghpegkW7#q;5XU z0N?6_QC@&z`XhIezByZ%ip!6NSw@E&6Gw!jy2c5VK-m~&_?@)RE#=B*%@D*9yXwjP zrefYLW2x{1p4xX^i5Q6z-wop`?+UUHgH+eArS(BSj5xyX0)@vxGH9f zFR0u4zY}zYMpDvn4UK9IZ@%VscMPUWX+t<>9)0>6P0og>wQ5*q1(;Lgf4>tC7E>HzSNcUAmdw`4AUpg% zNpk8H>yyUIAhBy4f8dU9#?E>PrtL=Ez)9adH{xL6bFnk@Pas5nCSZQ?;G^)BAZtqI#JO;;I&A6aZLcrJ zxXV}*Zs-OKt}WBo|AwkF9R_>X8^vVdAg{ietAeeLMz`<*DdoU)zI$3g18pWIRq1~k zaEAes@4k+O58g95!lB-) zE4|O5_+Upp5NwrES_beEhj?wu?mnHX=Uc$Y?VjaLwy*}xln+~_Qy_l%@0BZD@%w)~ z63dSeFPr|}Pr)nt%smtalHv{>KD!sPD* z^@k6^x6oOJm+#sIBPlP|%X0;rL~JRe%rtY;Cv|T|`LY?!fQ!g+=l|`_r>3%`?HWk-nraA!__`|`r58moi{*az$_@)r(wJdcub$!RMG z%Zvnk#Mu})Jn;Vxsk?fv3CBJwMig)5D9)CWMs7!eokAt>**mPaVY=o9rb{{&OSTmyp%n~? zb@-dK6v6vvU#uG-P^AX)BfA{Vjgl)PP(0D@thm(eNpdQtiE|%JRFRrF(^d+A495)y2jO#$F)Ek>Fo*s z+623}U>8Gv*onfOhXxR<0iGvS8?BMoq*7r73qf$Dt~86LUqvtAYT!7-FDMh@S3#OE zHx;H1>&+ z+_uE4*Ur2J_;asJJ+b9iE1E!wUp+;Wr$&88;0%MwQS znqp{QwBKTzsEX*_L;#r4Ks}4iZD&gBkC`dUI6L`=%y(C%_DX7oG;$n-XI5o^NbEur ziM;m*3wCXm0e%4^gI{kv=|6sXPjZ+(h_M~s>jykQU~<(xIjyxWj7Zw#GW;95H$o9q z!Iyx<;v?Wn1*x<>#iINGf6L#Qt*YUHuo`u3ca`0X1HzOBDmG28+a-dlqd&ZtTTV_N z|FH9ICF*jt1n=h*aepuXR%}@S?N4b8!hJ=QrZ;J(qNLQ=CMtnh3DlL@HEB>xqXJa} zZJ8U!8RPtf!CL%x|5ZS&`EE#F+3=XgZtl@WoPhnOj_TnTX!a+v2}QauHObcfl1Ht# znf5w+x0AJsYwz4wM*uhrQo4e9!!^;SdF7EA4BQURwV2VE6{TE|L$T0;L5^h31^k?k zyE+1@PcRKweV1skNw-7JVQLr>iU=l*7XrrZd@fxW^p94aj}HpSX4ZDV_7ejo#NC_b z9KEAWLxlC2TvG*cEyQoslv~&*(kf5aaAjC@ftd)Qxhd6Vi<2mK|3f<&@c*!KG+90( zAXe?{*0 zE}+vdb4GB(TVHlHYZ(_haL8Z&9ki$hG0C~s7H7}8#0vq~P<~aC)(&uj9Y;|7p@w*F zAu(U6cqRoTbNlU3%?1y$;O3MYo#tR(GIl%dT=s;eSY^E_&Z2@ICrPP#>@?bSIf>Oj z;CU=7^)CdvxnQwSA6hWfSw>l9Sg6PqIXkKFYtW}e;EX_VilF$)nELTc0}NMe$gSA$ z>gh;B{KVg7kfye=M$Dcw3rmN%nq`#RaROG64tzaUOr&;~x_n6EU$K|bcnhb+xvHD$ z(O}|2DEMj0E~A7>6ftmT_&jU8>D>{HTUdJg>G zKp|jSY`E`^2SLrzpw*dU%G|QehX50?#dH~cuB8D)3G#nE(E80z#XD$hv0WXts)unm zt#+y>S}6+_EQ^*TplF$3Gv!MM+SL+FV#;P#UpYaE1ii!?SfKjO?&J}Ts;men1e5GE zb13dOw{DWWr##5f<6U{ibzq3E*V?)mMyZeUlH{Kac(Ezwta*kLvQvG&9XXBjXP6F* zm32*_!d3{QzM#PdKl&uYt<9vX!02?*J+sg_P#}M?wVY9;F|DW-u-qD}upg;fs7~uc_00dwl000I!KmY&;#8KLl&7+XMowndi zNr%O}Zj2f};1|&MtLof5pDe#?^?q>ACX`l)oSR4Ri>|pJ5m1)sk_--eosG^pYXL-* zg!gBLMw;vgNk|2aQ#m+F&simS*0d6;^XeJKVu}zrI=Q8`<C6EbEtf%T zx-j)Ri%igvy<#`OXwx4_$!+Nqs_(1btTQbBC)PAsw``q*^Zfyu4AA0YBuL%|2(##A zmj!8fo)Sc*DsfS6bX1q4YXI$_TjJ6;Ov(a9calvDRqN5 zJ^cf-yPd;Dw@UWFb}> z)UEn?{cYtdZoUkz&8y579q9Dw`iJk1(+eVdk29f+W|HqPJ5l`&qb>~_QO$iJ6)su` zfIL5e_3r}7_RI8v*HsZ|l)SBnaHsN2XQDJTQW~BQCayJsqv-M}j!w{T`m?uMY8yjz zUJG5}QJ)AjB0|Py>s(A8oYLg33@@Bck3#6JQ4Ir;j7&g#tpge=pJ`sjEg6)4zw;ib6phMJoeqiu8!!%4z@8 zRqVC08=$hi)1rfF)X;f)!%A2&ajZLpkP-+!Lg)O$wh3$ag`v>(Mk1Rex0`4CLu(o0 z8x7frIDwQOE^f_jY|dava<`l|@=;@}giN>qgKXS4JaL5tp!qKnv|KX{&380|VAs8~ zo_>l~=0j=aeh|I!zvk>|= z6nr6qIUg6_uyvK9zL3vC^`yBd)F2ruKrcFh*QAnkX zbfF$|?cr^RI6Fg%+w>PuJlShPq}l7kQL*jECaonD6+^=@?5q2Wi& zC|&`>CN2{~LtFQe;^5yb5T#qL?o}(Hk+mgw5}BVLnY^SM#cvol{Ih1}iVdNN^Mw`# z*sJ^dcT!vU2D)i_okO(11}D!*KWx*uOX@Pys~RbBDY|Xu@|gS2=(g51sTBr!Q&1!y zn9I3ab571#8Q-`K1X|v;_mBF7u!6qm@=sNDUksrvwzl|pddZIk{oWg7h=gas(tj0r zY8W*qTX)G&S@p7qG8FWfukPC?{pKg|d3!xAc!W|0w*~}$X2fC*qm_6A>i;TAXa2~E z37{Ff*@1SwCI4Q-|5skK3GMl>^ul=LK+_N#DJ@3z!llwCN-lK3KQ4ow(gx@Y2U@8Qn0g$Ho(_ z&f6K15%sV5js>hKqi_uVI#?Q&1g}`NJ+~%wRx`75t`2y6>t9$ZXw9Bmu!M)J2i1EK z|LC!*m-?62~*dH>-vu2wy-)(1`jOVG0AK!5;Ll34g~PZ=d~}Sj92BuJ`qy z#7o3|5*{vkv9k}mhsiZUA=2rc4N7nA`vTK8HX#W_w6}C_4c+!Ed6g5xovy?v^)y9e zLT{e4CZ0D@a^;u<>2d7any;ASw4WSvapp>M@58revM2E$N3NT1^WeRx!D4trVgr_p znMQf*!6|(7`?#rXPyFbBQ@|MYf6b0iW<{Grf|!K3r?#u22ZxO@C$}?9jTD5ULYY$$ z9YJY}C~lz4nFO^KpjCWJxJ5 zfOU7Zsbp_OxP6yYwLn?$-zxbmb=O2T}?}be4rGJp%^2O2fLMMJRr!jW%7G8VySO8jeTdycnCOuB+`~GJ+=D z#XyDgNmW6yWR9izX1&qWJWBAPq{7DXLWXnWnJuk71xLr=g73@?08p&~uY!EVOr)Kx5qO@9;PnGdRI6)|N9DUZc zLw@>DbDo$?*^ThH+p?np?_E}O=s`sEuUwf_Q)F2qx^eKf*Op6~23E2Ee;nPCZ&*1iRZ@pu^-U>X*MHYFmC;JRtTB(Hb5YSKsogjabco(C`mN&3;APGvg zCPrp$7N2S73h`Y5R9rjJVACR$afnwUCkWik8JHxZVxJg*00E8=0000X{Bc;sYgbHZ z?I6)FZ4;zLK^yh=DZk0Ci3~;ZTO0$&H8iRLaP2LSQSO)7(cc;=>+LBKq7Q%a!V z9yzI{7i5&2p6g$EQbI6e@AWjGll;4{WJZ3Rh*Md>!i3imhk=O?Fk`U5#H4cIHOi( zf}@0@lfNq0_-AZnEDYmwhK?Jx5$I$Lk-A?0bu{vS-0R&d^APIIK;B{s*zzvPJpt^P zhK-vPksoDc2%?=w)`8P`b4zi4BIH~EQ&RDR>f^H+v*vL@tPpdgpJ7K69<51aT?XeW z^7C8SF?>?pW4_7&@GHPhR{DrG$>|=4*`u!XHL4a|XW=u`i1u2NyPD8QYy&(2N_BMR z-XIZ-BTB7>l+qpg<_|uEu%6{PwG8JT{)KHNa4_B(=-t+&v|Mq;mx_(2D42}VbGak9D{zI{fg`WYb<5NAt% zB!#^2NO~Tb-sJnv$Yz@52EfkUdr>Qaj3{%N<@swHu;pKDP>gGN=1KypsJyi;fXaO5 z-4sy(01EI-o%#XZjJu~JipTjX`gcw@lNF}(8$Lm=>2#7F-^TVwZ=(?bZ#?u0;T~`2 zHiJ%H^1dX+V~*Y}YC*(%jH~|#uwyvb(|Zrpd~@5%3DXD;MhgOO^LX9$M`vYhzP(S= z%%`Nj@N^&I=r9=VTos#IdvAGNILh`rJEl*p# z*yn+W5=h+&-9lQ`G|NPX9d&G-5G#CCA*W9XHUK9`vQ?x&z1~#dnVLo&wmS<&iBj30 z2eG!>WiPi^xA1nBLT)%m4Gvv(zwIbwg!w}&?0b_hY;Mf*PIrXd;-H-^CA3;$rA|8> znZy7j!jpGQk^+b(GC|*(arZC)01X%K3gRFtiN<7$3|M-pQ%(DIa0Ladz|9%vl75n2 zJ1-Dv*#UoL0WC@f4qqwC2YxV>&AZZ_o$P`vuev6MoIEfc0RR9AFid5u#*@ojtHwVO z6mwX+%eHIEF|U_G9b&L{Sc0&HkQmo{1(77`BVe&E;YgX;C7yDzZnAV|gepr5U0hnf z7W^B9NnvZNi&x^`gK()VEp>5f{9EvD6(xnPt}S1SehtE;u(j32tMPBaxKx%Fy12DI zXdua+oQ}ZI000000000000000001kSvx{V|Cs5`Rb6PO?jr*d>HGnm{C02eM?~IfQ zUw3o_8s&Vm&3%6}+_n){m_<35V|J)_N7C# zsnrxZ0kV8WPVlIwNCUGNyPfGQYicfs+oQ6^jDu4aaRl*Hs?UvRx{Oy~MPb}uh8p9w z*j9XXm#0y5go@3PYxUnP{Dst|8uT9u0Y)xF@bl{HLP+mpR4r=%M$OS9OcyrD{zbI?%odCoIHNfP*6@CGQYdt@Fz zGteDZ&f(S?J4L4JC)kX-qHv!?L1aor6T$ff6|3;e)IJq$xa1h|H?cWH5uosYU-}5@ zH+v+s@3woPVrgnX=+#4?nyWVseJHJ=$wox@YR`%X`D*=6B^6X_kkLGhrt9Aqe0a`b zp3|@;q?})tY=HZz{37|rXo<%8T_%?Nv?)}Dpu}9nn0Y=NpZ_QHx0o$QXS35+Ja=GL z*i}eF809$g&&xnBlXk43s;x@f1nm$*Id9$FwnGeal?;BPFe>gM6*0-8c0p?b#qT4c zBfeD?&ZD80{BxuQq6TxWI!Vs$`65C4Tb5idB0x4A5ZyZ$c5<%Y(000DF zAOHXWV}t+z0E|h5Z3oqTjFWh9Mk$RYtZUF!D0sO$HiH5wL=zB7M)OdpsxT>qR+5z~ z&@t+%X*jNJz{ntE5HbiE1Pp=(K?5LxkU+>FWDqh483YW120;TLfsjDRAY>3S2pI$n zf(AhYAc2rV2z{knHZfUCa6R+Oin8QUoK{SIaP#`8gu=&~YHhuZj6z8Lh7Q1uW0SSZ z;of!pSWH8lm(Md|z!$lkwg`eqv!A}}C_t_Ox8fig=Y#)^qMn4?Onoc*hfq}xuJ~1& z>UP-j=IKtS|AZVPIU`Kxf{&eZqn=b7#S3`gmLl)n`8NBFIr+A`ar7G&2=he~vp0`A zx#30eF<*+N)xTy2ek7@6?nh!RO{DjVXn z)kyf8#=7rL91%_pFzRO})fcBVHFpFaC6E+t^bP?T> z{?~~hBg{9pUB0&0_eiHk>y&)|s|Kn$*LcLJ{(70r+aWJZUIrTDJlSq-E`*Z{h#KQN zOtxqxfA~+kL_e@j7QF23Ryp5_w@HTXvu3atWN-#~SlGRHqZaiqsWn^Z;PDsWllQeie^2Nr`|8= zq-j+OdMRj+ob@UyV3?7ljillBOA0*SctH`~V`#C*0(@2`7l0#-A0vzV3qNga8Ga;} z7uQa*Iv1r`pxC`1{z@M&p{W}St>}6;y~0^32FVV>!f#f^jeh&w;`UdB*PbBOjHA>Y z6cwI04@v{K!hs)mq-_x=#Lix7oa&{No3VgyqWW@1XVR)`cp^EG)GEfk1x0MPuMm)<1M2ISw;o*Q^|Mw~js2MHM~g zo35;@T%mS8JKpo88Nd2H&_M~jS|t@^0LzNQtfV@J)qwkxkh7Le?)zk)j4r5_Q2++l zVKV1E&qN*ljrBQL$|L9Gv3=(hb#NU;R~mwh+@48`?*8r=>xq&B=O;}xl%_LaTR4@5 z4D`BOoO%HjgZD~(c&NEIw^*TtO$_d z%nN5bQ_nC98g4S{@i%cFfeE{280=J+R5Xr1rjCYhig!}`Y5PlmFDg*fSw>lXobj|; zWmREb%_If%r7IAo<2K=ffe++_opThL;C!&(`-qYgcxHRz_$9IIe2*%PW7y421|-k! zJmlR-5@kO!b9dpUiCPFbSu@2G+7@mcpbEqyCNZ5lNGpWHH48AS(CaN*!5`?oe+WL2 z8z|g?Gh`qf;_HkZ_crbc^6~G99OX!=*NEZZsZ0drcXuJeaYxb$q*Ni?)Z6ts4yCiM zdJGzNOdv`UbTDByF=%5N7E(n-nQu{yJJBWQCFLGk!SctQ;!%VdUb3GPdtrUyDS+^q zl;gO{$)urz{_yyi9J-Cfri*Z4zboJc#cj+)1JR)Z-ptdSwA~BiOE11m+2 zEE`sP>Om{Ww;Z^R6$Z3B9fvd?D)ZZGED^pU{{cO{NaD`%_SZSvt|pHeew zdU%T~Ya}6P6%ArrS}N|I@87=r?0jx6mwH zuYy5WN{51J9~ua}!vaMz#0f(LhT|8mfi)0LRjXhcPC{VDYCdr7e6v^CY2=~*x)>}1 zPEKKCu2tue*kE+k`0d@gph=T?{=}d$NQ!e9*Clhk2oH+vuXxirdDEcSJ`c`&3|~D2 z8o<8b@2cR?GV!)K#+l}HJbsZfr*4%GP}83>jQRg}W2!X^gfTVHpn@s_#$x)CuABpb zLI09meVNS(+9Jm?bq?(G-&UYqZrN+bitTb2hF)|DP1Z&3L99jg04nFti!-yI1u zpnlAv4$y?yqs`tsaWm?qmT3#R{CpCS6``?xOu{hC(jDQPoF5~o(jF6H+X*sTBkt}A zX*{WL0efIDibs^Dw+aP?kUmIHK?lgfhLHHr+8IYXuB_`R(_Uf%hC;ZrX5W<-#+7Ei zU>a88y5 zfv#Ag2>4k5t#Ouzt1dMbgdz~U>X9SF3nc=Ut3h%GO}o3{-#YnvPfC%3u`r40XuHOv z>}9jwbv!HDLZGBU4kcN`Ae<(wm&TcdBty^@HiiqY66U2LV0ZSxWu|eR<#Yl;2|nOusjnUq*Bg=k@(d~<01y98f{#hpz|VpfL!<>va+<0XSjH_-sNF#CBfQVi`O7`neKa=|bf$98b{`mhGjC13 zLvcq+XDs(&^w8W<(wWOW*nKoN6m+I?&vqY84aFTO{`mRAThJ!Hnm1<19M)V+c8?vF zs9Z@r^#F+r3_t(?000000000000t;P000QUKmY&?d~AS6mGNmkH*_PJHCVs^00S-- z1DNV`qHFRfq5uE@00000Y2+FMtNa>kmEm#C!Bi0%t$R>L)O^k)(%Lwi%3us-cT;CCuRpRQm6Qh7m>&zf~I_v8CtM z5|zCjtBOjMK|-u;(zZ}T+bgBP#AC3_H>6KxXxu?l?)sl(>L{;F&vow!i3$CD^YFWJTs+L(l*K zL~iuxSGpM=)a1E(5M>AfTw1h<69V}rbL`14K3WEuU(CA~%mhhuGGp9Qn08ODGvD=l zPXiHF-J#gZt&}6Mj+KIsWlpK+re_@bESEG_^M!=@{Oyt-IZf8`Aa-|{65-_mh{#_b zZolRRFa4rQmDT7>#sY-ex6Tz%zlZseA9i(}SF|E^-e?gg>AU^&6Q1wgwq>h^6EEUg z98ZtrD-y5?&rt8%9mzLm^2+msn4b@R*gVg!$MNO-ZPcW0!ri}M}fM+^PIgOtc{Js|XuxBO`RrJ~<2 zF=iKjnqpwrD=ud~#9O-#PtF9C_1Nyy!H?;jHY8J561oL)#eV)cDr}0YW;7WeAuh*^ zYqEXuouyT+V~oHD^0e-=Fkw%d!q$5cl^+Yh*Ox*Gf{2j3XDEDOsquBsXE-FkE^c{x zwHZHnqA`HgR@-ce0L^l}fXZZYl2RelQZ3)1?pV>60UhD1Tp) zdIP2NI5|9($J2#y9?6DVKlen3c^lzoJ7xL*6`T-*E47~GFv~*CAo&Th`?S2cmLzBI zovKKL+>Yc6M5jWfuhE9Q3o!Ytk@#0RcIj5B9Fb;jVCV7UPoTXb61;P=?!n9xYZml* zlavk@fy{@cZOJ|@Yqd#FHe3Vl&%+iH@r2i)mHSG*{-*j^YBL^tWARmE9FjsulV3)x6TiTvQt zMc~XKh@~7L+IuK_+bd@2c_PIOJ}+Q`LArl_T%*wsAg z&JEFH(!q~+>?vGk$-2kI)&9f+csalcN*AnvC)mp$VbuSoUXwWo=g5hzV z>2Go0-aA{zj3AUQhnImb;eLg`^mG81jc%j*EcmRaT@8U(kfGN7wA4!=iwu69O0$YJ z=7NG#$xAWq7ABx^A#`Ui%J0@Jy8H}+h*k_)Axzj^w?y>pIjXL##MfAEy#>ONVyPx+ z^_%1y@wlE5`9O)zyfM76*etaU000px8A4sdiF;fef2@l2=qeC;_D8wm3&TekLmd3K zLW*WoiP7I<^{Q;s>9fII3^bRgTC`2FpEfoHM=Z{_DWiRV*%t)`@ZTu=RJk$mQllAm z8urUT>%6o3^J~#UOPk2e?$o|)4V1krF)G`of-)B@x!imRJP(k|pUQ)d+3S`qpN%2Q zQ9@zEt@avZ7#!&`VKGoVV!Xenu1;9ZT}`!q z_9KrM4ZECoeq@DGu#rJpZ z5BLQXT`g8?7eG>J!*7AxMy&x@YB@4jT1V@>I9-q(c`TLag3r5jEkR=O)R1Mf)GHSUj_11nUKp z_A^ttDr`@dM&EHf}Kqt9WadJ{ znpM?<2q7D7j{_$jN5_s{O(ya_P_vRABqFa;A|_+cdKWRp2<#H1)}SO5S7_a?$tOC5li4692( z!|h*e~A*JVa;e8dk>QRtaV+}oNN8Cg#1koa!_ zufcuAQ;<8b!{Un!1$$CldshzEY=`zh-?TlZJ_A%9YiOR3dWw>zI$_DDQ4p8`G6ucS z^mB6nrfncLiRQqt20NAnbLe=j?QxNvlJ|cWQ+L=TXWGEh-SxPhe&DPYLvG?!T*W_2 z-lc6uurKTg;Z|3@3YML<)3V}9Q0uL|e^f0%>j_xk2j=($L zrw5JI1sKc%RS(WUGVdK!k*4fPJ@A?XcPbapLM;Ny-YBX z;)E4}5OqVO{|-4Ty@IEGlWw0736w%SvV5h9AiU;o6mWTI6U-SWiR5klJi$@OssZq zM>WGhIL%LjKx3hy+tn*QC7GRr^bPjk&q)n15&ky;7dt6%UJiFF1t4 zL|h5g0n4}l_ycWQ@r@pg_5rGtx}5_V)vsnVc5nb&9weZ{8CKK6Dje=>NkoOu35m)H zE%;KG`Q5CXh`#!J-hb``xspoEqr zU_df*n$mJl8%Jg;2scWB-I%T`(VZZVOAbD15#!s{z^em*T}UFfh^kYjq>V);aO)Eb zLX7vO*2It4t9AB@)uAgI9(MV<6RUrGZU}HinrRZs;N8j|lV)>;&xi^RE9b8DKHO#W zJM%6F8=h`>xUxW3JgMMDKNS zXutDiKYdqy=3f~_VR9OmX$XqG=lCwa$;^~X0A|?D@(W2eKH1VXU6d@XjD0b0t>|bO zChvt+ek*u^4E8MegP|5iaEPu1&W(dxxsu7L)NndPD#x8vFr1K{FEvEV*C*|O{9;p4 zj7-wn*?&qtZ~eO@eLO@Lp|4IXHOX$U|5^p#{6Q2Aw~&a(SR(-F2YaiU;XAhz;_7@? zzSqCFf%?>=PGKO_UeE144>Im= z3q6`Z+NHE_7cL1Do^Qjne=wf=N^}nC%ap?HDg~}3Zyw&~Eu&9gDY6H8@~Thw9%>g4 zQI^=tlFPPZ1OK*|7h!~#=rjIrncxr&N9@6yh1Ri5#02%@D;gilc&^HuzdB+q?;}!D zDuC$)1ptDas6ZMTT~! zc9DkqiD4%b_$=ww#ynH|*R>G5psYdJnLf)u2$<7-*sM3C6PfW4nB}|!BtM}Vy|FTv zQ!2j)t7>?(=3&=FEgDQrAq6qQ%MH^>m?^6Vbgp+|=L!(>KG^jv=&>PE2V|slY^&_LWF} z^p}aW8$LV(v6oygy;9aa;>*mG=y4W6f0t4jgQ4HYWfbp}H%NfKZ93cl3MBc;*$Zrpt#ca6`#f ztjqmd9fwz?ojJZFzer!axDQC&2zBeyjN-UwrR63-^*|VaayPpZ}H8o z7M`5APJ44bP7|2@<`)M== zM?mZ2zkfTKQ3T+h3cnbd`9wc8M}k!802_^y#%57K^jGFxEiDyHDpLF<7jl^6;H-iv8(rwI>;z_w zFEFgdlq{=lr~zo2UWMqh7(Q_7d99~0l_B^WryL9#CRIU${-EL&g@VXZPz17kP^-@9 z>4(hAjot0RBj{x^o^Zh1phY<&_u)@eEqp;vYk6k>Iq)oJ&2J3k>i7s=jcpGY=_w}j zK)Ef;BG*TQ&6|ZGkn8A$&bBS3^nnanC@Ua81{9D*Z}W~k4uUlCd6=UBbqU6Rz2uqg zGmY&0U8`Hws%*nS=^t_IE!*v{ud2ztlSG(G(BZFDA>k8Tc$YYGC6}Ku%!-vwn5Kzf zSTt{25lf6@v52{MxDw|t#Pk37T-5o{i74Cs4qC^&Qg)i$ZX<+MJn)L!$<{)WQPJOv zv^#lkUm-TTnF)05Atmp3Zau3q&dpUX*dR!y#o8r-Q?JO(+`QSw_#u`^w382^~sd*~@3G8YHhCyq%~(r-mmwI5NJC@P2- z6_~ZlD;9=DBa9L4AuG1XkYWS0v-EjPYTFX9XOqn^8e6(hXq$~PQoS4d; z(CSi!Esi^DtgR^0-jFfm)3&9RvFfB4RZkPV-5|juVr*H>SXix0vCS>1k=NK^$0W>q^|2aJKSbMPC$XWDiX5z z3jXmmrS2Ni(qnR^el6VVpP~p5e?4d=faK6>JtfGckDpe3zJ~#Tp_@p}u#2*UDrj_0G!R1bizum~59;tv{N_)A>4gOiV!1W9 zOO%#u(-TYFOg(m6YF|_#rFE~z`nn-jp*H8v9euGD2!CTm`Q?DULcwBZ585} zQ}SLIm@+A@V=m^JPw*~ub&cbWHy7Lu6GNI-C`K_U0wdF4sU0ed?SMj2NB7$9pxB}i z9Jpj2@B$JgvU$cYbq1Jlu0%8${vZR*WP@~d{TCRft4>?+Fn$foN%7-%-w{kmPZ$LZ z&TQ%|nq+VUEl5aK!#rar*@K!of(2$Hk;a_({zNZDDe2#M%AZ?ymVRM*uq)}F!|KGr zrBDnCg(mBc)By$5*JJ{oc9On$V+up1X@?)N_MJ!Sf?7zQ{?_DX>hRhzGHuu0(GM&N zygk}9@Ic|zGvsE}+T`}Rv8>WIPaUqoFG50sXSDkT&?gihMqC#gS*~^z?{4ufKK80W z4@QE%96Psy&t7poRGHYGdy{aQ27yNI7z-c(Wm~XjV3VuDPySoYCTXBGf}L8EQ~{G6i?q-mP_{L zSAlN859v0&Nq$!>z=!ewdK z>KRBZ%9CskZV(I`+{dg{z2xdyD6eiug=ME5WN=Z15Bn9d2&OB}F3^f++4_dGaYvns zPnj=ne8i`AGIsS>1t1N-Kz`QBobg)!Ibud|tlP$M|LQ+tT2OG4VhcremtZH$L$NCp z4lzftgfH~}Q*LQPV_AN&h-cP(kg!uB*Io$(JF^spxU!-7=aAvQgEw0sq>N zlAdj4kC?u0tAyAy40eW9q>(bwvV+$O>z>oKhc6{mE0I}0Y;>Fz-BKVP&DK*K9IxridP=!`g{~JHFt6E{IkJ(gmg>I3qyz(6Ml;}@u ziY52&dn#AAWByzi`<(58DW9Qxpm@OKn{l@%I3jrsx!UD|^$tt07nYH?4ovDrm*mZD zzPFPymP4>yr2s#-;nDh*Qqa#-V&WKLw)k8~hx6aCW4Vt(J<6!&r&Zu8M&5ZGM8CZ( zDn)43bwY>s@@L)VL1i1b;>LBaI}~1tc$N>_825vw2}Yb;akd>fc9|33AP>l)p5#25W{`PCz+CHhOKb@7 zQrF64MlI`uMLDFL3ZO1mdaixJHp^(7udX$0LnGp7KvyZ;q;eQZy2llM| z7t_nef4YNA%ZG~Eo??`oMfja~|Dy>nk2%q@vhX*s%l@P}WO-$c;J9bmm+Q8gh&l5N zd-$5AcRT5Gs!by_h<#T2I=lk5=DNbn3kBa(sxoG(hFH&dXC~3ykTg#*27}yMRbw_t zlrY<1LAYbkgEcM*%5}=`#1{THg{h3}3h`0;z#YeiPtA~hl681kCmFx(K#NCxTqhO) z&mPoU!9n@Gm>vztp{21e3YSGNJW<5`NVq7LO@p8iJJTspahGiG8E-hWUlu2&o8x54 zUs}9jmm4irD(`SI5D@(&=03JdBCo1%Ci@>eww1P#_V8=uKMvKgFgBb8eq^vMD@hUIdfCT{Tjs8}zk;jO!>oX;9)$eD`oucFEUkYX?qmcBBe*neAl3w0i!L zIYqFvOpo#`7Fj;EA;Tci%X1vOf|ncH7VnQ9Ua}BAme$!>i;ErpH)>mhTSJ12-~BwN z$m_;o#GHNcw7esZNy@9Of<^c6yR#Wl)PeH}#JQ+WL$utYi5%OHCN^H~IgZ}vh7Jw( z6G!pN&5d-5;a`Wp=#>l=Ny6@N_=c}R1I;h^Uo6NQO@ou?STJt)s%=vRwx2AoIV_PC}hf%B4aV8`}_LU#(gl2t>CjI$t2rhotiOh5nt05@}2 zhg>W4J&YI<*GvM-!cc$!1Fg**egFUf0Qikj-{Zo4Oo~yUQCbhD?K72(;5;a}x{97Q zi-|{#hQ&@vc{1B)#tQJKlH$0Dw%VLrj3!4cfIxMItcBo!U6nSW_@m;9#3vu%1CP!d zQH{O$8s29JhMJB*;G_<*Zica(@&tqnc&&6JGyN5DCjCh&7jOICZdh5yUZ8J7q)+#@ zueqI5blFOpE>9T&OND7v`38Crdf1-0j@$#o2cr)abvSm~4ZpA@D;eIWI9Oho&M~FK zE5y)1*zty+!RCuGnK+H8NIFS{ImYlfOkl39VQGoK@IRU8s&(Grx z4TC4a8187q3*6j?sgXOAjU!uQHd)5y=ghz_;B;1cGf?09Ou(QEX1|U#GJ$>aiV99@ zl>A*C-GHmzVfT+%vp@5frl<1RSHfA-PAXm_#|vmOq8T@!f7QtrP(1OzgrYJuxD|I& z-;3~eV@XWnEc#<0QJgv4dN4?v97AP+b7bu%m+VtigrY9yKgX4|jU|oXB{>3>ITVVX zSKbgys9`S+v+)h!tqe;%VZX2@A8eZ~W1z<%DoynmbzHh9BLqGI$e~w;Pea(I|3$3< zmvZ)JnGaZxqB&+gh{Wrn{g;OI!y^;jUlhGDhl-kr9Aa7nH|=o373Dk9;H()L6@rN1 z`4~&snDxu-6SH#jAO%@GgtRh{Yd@N~ePb^4;M8PNme7+0jxQsN2$5Kvp*KzDHx|4l zPWjGSi^%bbq_g@=v(eBAx7X%7pMKu-;%T=sqq;tUZ059;43eVpN9kD82Rych!m#FK&6SQo7 z0%wK+RBzmvF2{F{nLdS46c81l9Xi^yeN^sbW~N7P>L|6@)DjozT0SSP?{U-?Hf#Pyn=0!MkBaF7R{v7A8&#qF<^C>W6!Rc3MUYilX+~*PvHwZf< zWj%3BqM1!9E?lJ_#OQRP%|E^YN~EsUhEN#o_-ouAd6=+3qWK(7s>yL1xuXyuq=*s3 zDzAZ3KaYmprq$fb)y5B`tZtI0az+gCDuLqoXp{!$wM$e;X0D`7a`^>s812ZySFK+-}Rlc2JtQ zG9pRpC3fmJhza*X8nD0x1N!;>^E`T2Orp7Gy@59KDaOHy$~~pCWx|PE z>(c8lf~4cP5<}Z?-MA;EVW!{uvV?G3cOB~#efD=HZ+_MT1ZR(~4s?wsr|EC`2}l;p z4V7N(&b;dP4b%R`;Fm$PD!!{MTbpWbwhOH1Ftsq->8}@oC7p9=!UTgla|V`E>l>b( zPWmJvSB?&y51t&lGk1&w7cnmOEV&n!c&xv2<5#*U+AI5<7UyB_@V9bpN#*ZX?oQFw zCwT^Fbu(O4yaA>=(*PO~a}^}iQ>N{tN*7V$uz;mSoFAN0H>LWa#L~GVgGJsek@q1J zQdgFI)MP&@c$qZbrgcQib8z&93;YD}*~?M$kF1D`c_WimzX9*$6A6I%p2q4JPT zW^gl@sx9go?n_ZuqEeVKb~=JfLgnU6b#wAhS8^2ts;U&ab}aYDMjCfb_giQAvz({_ zZ;aus_`N^!|8rp@4_WG|Q+?h=><~LCap+#`qdXymApz1P6eWZq^<0DP={sqgrr;5y zc{vX!uah3s_4MKT0;T@{F$Uo2OSM)YEtUJ&xJz~&pY55#cS9A?=Xuw@al?K$>_0Z? zWPHo6VHqu~NSB`WF8^SiRk!L$M`G`U@LGy6_oQ$^Rx4QkjwS9ystYM<&h>#N4(dRs z(&%=5_mIq-VJYhX*6)dC*U$?z0Ho29@}Hb~n3)teR^i>1Tg3O;c+&8Xbr6(^TCJ1= z%l)6a9VgfS%Em^|u|+uCJ~vEmL)ruR3gc#A1E@;L`#nP2-kfJ2$IT|2yYNP}{#_;l zXSz3q^41GYKZ?#e;fRmI>@N%iX$;e4gC00rO2cUjN$4Z~mXxuc+^X3ti9)HlOylEn z-+UAWaj<_8_4s=&8(@%$M)c z<272%u4ISWrt2YLl}wGF6#8yK{q-(4&B~-TN*ndnsYnPg0Y1PLa~BctsgDRAN2(nx-C@HhETrr6jvEao@= zs`e6Zf`bnH(ioo7y|@v8XPHT_UnP86+v@ju+zTA| zkj`Tm79Yr57yBS+F(?KFy*`xl&q5|Ia*-;%kCJr`I@WnZXhakLxU4@O2$jdd)m9Qq z=Tre`8(>C+Ngs_iR@(jskCvR_KEBBqs65oyM7_(aQ&CPqm?~_mZ=r#OgGz)};Ib&8 zfn^kvJH8(So(L4MzS&MpRA@@nZo=fbDvsh-*%*KLVQdOpd}G*xYke8}{K+aW3R!e4 z*vFBg_7`ZnYg~L(w~3!fB}PD`7q!=pVZJXt?6L;8%x3;gQH5^=oB_SFuqSo}RbudU zJZ}P@;}_jspP0a#M+kXJJn>uLu%=!qq&H2E2Fk&|x7S%K0PYqZCWREtsS}>$$M(u1 zi$~Z5qEMDMR6Ihp*k#sOwKvL&+5ulkWZt{5D*zK0Vldq^oIBxxJpco)$$15(=W8W@t=%=WHupI>B*R32)0 z=>@UTkqsMDHw-lWBn<{B&sVgqv{en!`dpM1SOAM^%0H6bAfsM7m8 z7f^LbnX@=a1kbAPJ{!;W<;8_BNVynC7Lx(Joz!jry{KS8NoRye`goa7Ji7nxqGg?N zA%jfduU-V}n7F}!M%62gzAKqygoEv#RDD=-8zwTuxAFR6!@yn}Ut&znr7&Em-n@fZKY z3t&>+LV~wh741$e9`CM|-2h?=?!o6f=SA_;O~LBmTh445wdit_>Rd7rXOz|{QkS{1XQzI3RG@H(>dixqQEA*3V<)?Abu-g5C%*T(Yo%t+%s z*x1?~&Pt4&H4;yA_~%FXMYR=or{AwCmLO^XR*wNBGWNCYYBHDdBt*jjH79DOcW9^b z1DKJd6}z?XA~rmuWBeJN{qoceWxF(eXN6hSD*LD6It`)JzM9lc{-#;oo`pcyzN&`@ zM-w+Ed4a}Kio2W}0y;nTfG>E#T|pvzhc&1pNlCzMU0cf34*<7p2cwJ38{?kJT~f+l z&}r+zdD$X*0Qo7ZU+1SI1?zL^!FyXn9CL&YbI5LZCHVIa|3^(e>6rA$3dE3ey*+@4 z9~202lJYF@f(O>qZsA(|?CD8s4Bn`Z=11NpTFLI0)d(Rxs;#6NA9?O}0hwM4J06AJz9JHKP!EL{g zMD?B1Ly>@9NLNQ{s|0p%+YM@xHZ13BDW+zNng32O0sB^~eVJ=88 zBn~-ae_v1aWnr9anm`jQ+?wgcT@0DY;Hh%|mMXdGxrs~L( z@u@CCi8%W9+z4~lEcbrxbjCs*=hH1+YfS%)1CNMHy#+X!3I^CARTX4SDFF$fwTv@8 zk;8BJZUMJ%$Ks78$^~6+@Ov?(W;NEx*t;+|pE9TXSe{m-MZMW`dV*C#NE+TUjeMNgHH(nw}8U`z#j;^^V?tiLFuVw3X*C-IwvAu@+`!< z+tQ&*G=$(XA5UXxWpY2Eo5b<2^c@q5hQDfS6|U)N<(0#8L&a|+eh@jNxO}TKC{`Ox zt6XSkImaVNQyLB>c!JYPP+lN^+8rg;Sj9gkgj0IvngyzO;bocmHiSI>mw`!I7XlD= z$9TWDu`=#>&})tMnCivZwSoxVEX(LuL4+YIaV>^pas?FIJL(cqO}%o@xO)zxIV#$v zr|E;!n2fzp8c%8&b2?!l)Vapz9S@K? zkPg)MrUVuG8lg3SWO_qxvw9X)r<+F%7Y8CpZ55+bp4agB(y)^6CqXba17WOr*K?A| zGY$JRK&SwMpYaE4PBDBCk+wQVjHvB1*DbfcY`3;8OJ+wy6MYA-d>N+A0UHfy7?5HU zYE=IHkaV$Yu?ok%Oq4!lYtQbABiV+t$ zp0XkZ2g6ru*qjiFm)H1PJ!f=gqxi-z0qt{&R&(5?Igg7&XE3aoH;xTd^HfCZRv@?Vb=2D|R&`!jBohups zZ?WEL*$jaqlhRO}^jU>U3ug4)8D6PEJEr;b2LoplOkSzC@F$0*S3e2lEiESQbJ$)K*|3e zr8)U!hAR%~1iXchMa@PF!qtxg@7%|H+Tmgv!kSb6qd-742LM*8aBm7J{g+bkWOJRY zrgJ6M8y`xL#Q}4;Q3f*7u4=2smaxkkfT@EpqurQ1ZSI z;1MQn@*{81qMH|xrFa?}(+S_qFH0`g2~NR~XLKFeINwM6FjS~-Au;EK&D zMRNo~SkNjf;3mIi|5&&ufK$f>!P7Ew3Cn}Uvp_HVO9f3#b-U~kiA4kLL7>HsO0PMW z@IO7sH$`XEA)mc{zBr4>y~g5eF%Np|SENRzxy74B@E9AY(cVWPJwI_1I1D)8wH~;T z+gxm4<+KT8X!Pm7lFbNSJ%2W8%{3^uk;xdRb+$A1?cnjMo#0QvWslns$fn+oG03Lr zHLCa6w?`dcW&Z zvJ$y>9e*S?_QqENAKbd4>H(Umk&;Xxkz+5g6Z7<0o6+y<7QKpbeVp43}$MiRY zaA3ewIPipp?r@<;!nQO;i%$DCRzMM9v6kDytXfS&)Q{NH^RN#8q%2znRZ%bQcJa1I zq*~3Aabe~(LZo%<9Lr8F1UkMk5b529QDDqOOzjTBNKsgY}OUo$J+$pAC9byW6@n&AR2@2-VxL^3M6?LUO|oDZ$p$Q3#3e(0-`7`U zh$tYcr$cgeanc+*)YREs^rAAX>Uo0Oo7-%WJP64RuodtJM_F~+;>S)0k{+%PJ}K1x z4^)OzCsS)BAUAI_(E|(M44+1X-&6!SD=d06SKt(RKL9vUUGSBkVC3G9*lk5nGagZX`r}6fHz>p2OSM{cN%cje-CTk+j8{1$3 zWHL|~##+2bfDA~-9efj`dl0s9o%luqJuYPclBjVB9^9eqL0OmW|M%@nSND%qZGwEflCRfCzA)`PHzv1(33b zssr@cN3{NzOfi`%4x)M+%ENBYZbC)jE6M4{K0PKRw~#QGUK>ep=Qw5~K?{u*a8pSsjde1Dp4<>(GYVA>d9c~1D^ud26@*&k( z)8*hUjP1O9mCrn`vtT&@d#z0;<5~}C*^({qakYyQpZ>VR15o1@ANWZAi|!vV%w~WA zM|hy7g8Je7ta^hjjD1`_6R$st-J7zEr^#8n2Bzur$ON%Sp%R?n&s)3%j6eWmosQL` z1ZlsaWB#VZm~u1WHc(Cj{smv3oOzSl01<*6yiirkNtr^$1=!89HssLkVMszL^d63i z`PaEIK%_2t*aAsG)8I)0<*) zOFW72b^!$e`u;w*{vG}rl4rK9m0oHyXfMaRrS|pytc2^p0001Ega7~l8223323es~ z4*&oF04yo{Lz09$Z<(IzngR;o+tT_lgHJu2>SrFVB?Zm=d& z03Pj@1!}0pu?*`)4j?eogFnopx6R?C({G0wrp`AETr|LBIbbtJ!(kieM5>zk-PIj) z-@WYK-5yW*5If((A@kHu)=T)_Xb+HSh)vL-HiFq)sSGDhkcuUPLz4b2$p;-N0005{ zR7!Q@Sg_^2KtrJxyFXy8T9EK{Cm8_A%HQM}J1BlO8;*W1P52TEpe&tcX=JfNd(Eyy OD$0x@sdP;r5D);DT#+&W literal 29974 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 gJwx24hZTsy9^X|^=k9;F4to4w{?9b^e~sV%A4C + +A schedule is a queued task, and the `process-queue` [cron job](/docs/dev/cron) drains the queue once a minute. If nothing triggers your cron endpoint, schedules still save but never fire. When the install has no cron adapter at all, the dialog says so with a **No scheduler is running** warning. When a schedule fires, it publishes whatever the record says at that moment, not what it said when you booked it. + +A few rules keep schedules sane: + +- The API accepts a time up to two minutes in the past. Anything older fails with `CONTENT_SCHEDULE_IN_PAST`. +- An unpublish cannot come before a pending publish (`CONTENT_SCHEDULE_ORDER`). +- Booking emits `content.newsroom.story.scheduled` and cancelling emits `schedule_cancelled`. When the time comes, the usual `published` or `unpublished` event carries the `scheduleId`. +- A scheduled publish of a [hidden](/docs/content-engine/content-visibility) record leaves it hidden, so it stays off the public site until someone unhides it. + +If a separate front end caches pages, [Notify a separate front end](/docs/content-engine/caching#notify-a-separate-front-end) tells it about the change. diff --git a/apps/web/content/docs/content-engine/editorial.mdx b/apps/web/content/docs/content-engine/editorial.mdx index 11a24e3660..fcc3efa3ea 100644 --- a/apps/web/content/docs/content-engine/editorial.mdx +++ b/apps/web/content/docs/content-engine/editorial.mdx @@ -1,41 +1,28 @@ --- -title: Editorial -description: Add revision history with restore, version checks against overwrites, signed draft preview links and scheduled publishing to a Content Engine content type. -icon: Clock +title: Revisions +description: Add revision history with restore and version checks against overwrites to a VitNode Content Engine content type with the editorial option. +icon: History --- import { Tab, Tabs } from "fumadocs-ui/components/tabs"; + import { ImgDocs } from "@/components/fumadocs/img"; import history from "./editorial-history.webp"; -import previewLink from "./editorial-preview-link.webp"; -import schedule from "./editorial-schedule.webp"; - -The `editorial` block gives a content type the tools an editorial team expects: a history of every save with restore, protection against two people overwriting each other, signed links that show a draft to someone without an AdminCP account, and publishing at a chosen time. It is also what [live editing](/docs/content-engine/live-editing) builds on, which you turn on separately with `liveEditing: true`. -This page uses `example.article` from the example plugin. It already has [drafts and publishing](/docs/content-engine/public-api) and a public API, which previews and scheduling build on. +The `editorial` block keeps a history of every save that staff can restore, and stops two people from overwriting each other. It is also what [previews](/docs/content-engine/editorial-previews), [scheduling](/docs/content-engine/editorial-scheduling) and [live editing](/docs/content-engine/live-editing) build on. The examples use `newsroom.story` from the newsroom plugin. -## Turn on editorial features +## Turn on revisions -Add `editorial` to the definition: +Add `editorial` to the definition. `true` keeps the newest 50 revisions per record. Set `revisions.retention` for another number, up to 500: -```ts title="plugins/example/src/content/article.ts" -export const articleContentType = defineContentType({ - id: "example.article", - tableName: "example_articles", - publication: true, - publicApi: { - path: "articles", - fields: ["title", "slug", "excerpt"], - }, - // [!code ++:5] +```ts title="plugins/newsroom/src/content/story.ts (excerpt)" +export const storyContentType = defineContentType({ + id: "newsroom.story", + // ... + // [!code ++:4] editorial: { revisions: { retention: 20 }, - preview: { expiresInMinutes: 30 }, - scheduling: true, - }, - fields: { - title: field.text({ required: true, minLength: 3, maxLength: 200 }), - slug: field.slug({ source: "title" }), + // ... }, }); ``` @@ -58,9 +45,7 @@ npm run db:migrate -The migration adds a `version` column to `example_articles`. Revisions, schedules, drafts and locks live in shared core tables, so nothing else lands in your schema. Editorial also adds a `can_restore` staff permission, labelled by the `@vitnode/example:article:can_restore` key in your plugin's locale file. - -`preview` needs `publicApi` and `scheduling` needs `publication`. Leaving out the partner is a type error, and the definition throws when it loads. Every option and default is in the [content type reference](/docs/content-engine/reference#editorial). +The migration adds a `version` column. Revisions, schedules, drafts and locks live in shared core tables, so nothing else lands in your schema. Editorial also adds a `can_restore` staff permission. Label it with the `newsroom:story:can_restore` key in your plugin's locale file. Every option and default is in the [content type reference](/docs/content-engine/reference#editorial). ## Revisions @@ -72,80 +57,23 @@ To see them, open the row's **More actions** menu in the AdminCP list and choose withoutBackground className="*:max-w-full" src={history} - alt="History of this Article dialog: v3 by Tom Becker expanded to show the title change from Spring menu launch to Spring menu launches Monday and Featured switched on, with Restore buttons on v2 and v1" + alt="History of this Story dialog: v3 by Test Admin expanded to show the title change from Spring menu launch to Spring menu launches Monday and Featured switched on, with Restore buttons on v2 and v1" /> -**Restore** puts that version's field values back as a new version, so nothing in between is lost. The publication status and the [hidden](/docs/content-engine/content-visibility) state stay as they are. It needs `can_restore` and emits `content.example.article.restored`. Anyone with the record open in [live editing](/docs/content-engine/live-editing) gets a notice and a reloaded form. +**Restore** puts that version's field values back as a new version, so nothing in between is lost. The publication status and the [hidden](/docs/content-engine/content-visibility) state stay as they are. It needs `can_restore` and emits `content.newsroom.story.restored`. Anyone with the record open in [live editing](/docs/content-engine/live-editing) gets a notice and a reloaded form. ## Safe concurrent edits Each editorial write raises the record's `version` by one and succeeds only when the version still matches the one the editor loaded. If someone saved in between, the second save fails instead of quietly replacing their work: -```json title="PUT /api/@vitnode/example/admin/content/article/2 → 409" +```json title="PUT /api/newsroom/admin/content/story/2 → 409" { "code": "CONTENT_VERSION_CONFLICT", - "contentTypeId": "example.article", + "contentTypeId": "newsroom.story", "itemId": 2, "expectedVersion": 2, "currentVersion": 3 } ``` -The AdminCP sends the version for you. Your own calls to the edit routes must send it too: `PUT /{id}` takes `{ "expectedVersion": 3, "values": { "title": "…" } }` and `DELETE /{id}` takes `{ "expectedVersion": 3 }`. In server code, `articleContent.editorialService` does the same check; see [Save like the AdminCP](/docs/content-engine/services#save-like-the-admincp). A translation has its own version and fails with `CONTENT_TRANSLATION_VERSION_CONFLICT`. - -## Preview links - -A preview link lets a reviewer read a draft without signing in. In the AdminCP, open **More actions** and choose **Preview**. Creating a link needs `can_view`. - - - -The link is HMAC-signed, expires after `expiresInMinutes` (15 by default, 1 to 1440) and cannot be revoked early, so treat it like a password. It is pinned to the last saved version, so it shows what **Save** committed, not unsaved [live editing](/docs/content-engine/live-editing) drafts. - -The link points to the first of these that exists: - -1. `preview.pathTemplate`, such as `/preview/articles/{token}`, with exactly one `{token}`. -2. The record's own page with `?preview=`, when the type has [delivery](/docs/content-engine/public-pages). -3. The public API route `GET /api/@vitnode/example/content/articles/preview/{token}`. - -Every page still has to load the draft from that API route. A page built from [Show content on a public page](/docs/content-engine/public-pages) does not read `?preview=` on its own, so the example's link opens a 404 until you check for it in your loader: - -```ts title="Read a preview in a page loader" -const preview = await fetcher({ - plugin: "@vitnode/example", - method: "get", - module: "content/articles", - path: "/preview/{token}", - args: { params: { token: encodeURIComponent(token) } }, -}); -``` - -The route returns the record's public fields, and the same `404` for a forged, expired or unknown token. It sends `Cache-Control: private, no-store` and `X-Robots-Tag: noindex, nofollow`, so the draft stays out of caches and search results. - -Links are built from `VITNODE_WEB_URL` and `VITNODE_API_URL`. When either is not an absolute URL, the API logs a warning at startup and the **Preview** button answers `503`. - -## Schedule publishing - -Scheduling publishes or unpublishes a record at a chosen time. Open **More actions**, choose **Schedule**, pick **Publish** or **Unpublish** and a time, then press **Schedule it**. Booking or cancelling a schedule needs `can_publish`. - - - -A schedule is a queued task, drained by the `process-queue` [cron job](/docs/dev/cron) once a minute. If nothing triggers your cron endpoint, schedules are saved but never fire. When the install has no cron adapter at all, the dialog says so with a **No scheduler is running** warning. When a schedule fires, it publishes whatever the record says at that moment, not what it said when you booked it. - -A few rules keep schedules sane: - -- A time up to two minutes in the past is accepted. Anything older fails with `CONTENT_SCHEDULE_IN_PAST`. -- An unpublish cannot come before a pending publish (`CONTENT_SCHEDULE_ORDER`). -- Booking emits `content.example.article.scheduled` and cancelling emits `schedule_cancelled`. When the time comes, the usual `published` or `unpublished` event carries the `scheduleId`. -- A scheduled publish of a [hidden](/docs/content-engine/content-visibility) record leaves it hidden, so it stays off the public site until someone unhides it. - -If a separate front end caches pages, [Notify a separate front end](/docs/content-engine/caching#notify-a-separate-front-end) tells it about the change. +The AdminCP sends the version for you. Your own calls to the edit routes must send it too: `PUT /{id}` takes `{ "expectedVersion": 3, "values": { "title": "…" } }` and `DELETE /{id}` takes `{ "expectedVersion": 3 }`. In server code, `storyContent.editorialService` does the same check, as [Save like the AdminCP](/docs/content-engine/services#save-like-the-admincp) shows. A translation has its own version and fails with `CONTENT_TRANSLATION_VERSION_CONFLICT`. diff --git a/apps/web/content/docs/content-engine/events.mdx b/apps/web/content/docs/content-engine/events.mdx index 219dbe9f5d..fc55bd3a69 100644 --- a/apps/web/content/docs/content-engine/events.mdx +++ b/apps/web/content/docs/content-engine/events.mdx @@ -4,13 +4,13 @@ description: Every event a Content Engine content type emits, its payload and th icon: Radio --- -Each content type emits events named `content..` after a change, such as `content.example.article.published`. Subscribe to them to send a newsletter, sync an external index or purge a CDN, without touching the code that made the change. +Each content type emits events named `content..` after a change, such as `content.newsroom.story.published`. Subscribe to them to send a newsletter, sync an external index or purge a CDN, without touching the code that made the change. Events come from the generated routes, scheduled publishing and [`contentEditorialEffects`](/docs/content-engine/services#save-like-the-admincp). The plain `service(c)` emits nothing. A save that changes nothing emits nothing either. ## Event reference -Which events exist depends on what the definition enables. `example.category` declares only fields and emits three; `example.article` has publication, editorial with scheduling and delivery, and emits ten. +Which events exist depends on what the definition enables. `newsroom.category` declares only fields and emits three. `newsroom.story` has publication, editorial with scheduling and delivery, and emits ten. | Action | Payload | Needs | | --------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------ | @@ -58,23 +58,23 @@ The listener also receives an envelope with the actor, the time and `pluginId`. ### Register the event types -Add the content type to the global event map once per plugin. The listener's event name and payload are then type-checked, and an event the definition does not enable, such as `content.example.category.published`, does not compile. +Add the content type to the global event map once per plugin. The listener's event name and payload are then type-checked, and an event the definition does not enable, such as `content.newsroom.category.published`, does not compile. -```ts title="plugins/example/src/api/lib/events.ts" +```ts title="plugins/newsroom/src/api/lib/events.ts" import type { ContentEventsFor } from "@vitnode/core/content"; -import type { articleContentType } from "@/content/article"; import type { categoryContentType } from "@/content/category"; +import type { storyContentType } from "@/content/story"; declare module "@vitnode/core/api/models/events" { interface VitNodeEvents extends - ContentEventsFor, + ContentEventsFor, ContentEventsFor {} } ``` -The example plugin imports this file from `config.api.ts` with `import "@/api/lib/events";`, so the declaration travels with the API build. +The newsroom plugin imports this file from `config.api.ts` with `import "@/api/lib/events";`, so the declaration travels with the API build. @@ -83,18 +83,18 @@ The example plugin imports this file from `config.api.ts` with `import "@/api/li `contentEventName(id, action)` builds the name from the definition, so a renamed content type cannot leave a stale string behind: -```ts title="plugins/example/src/api/lib/listeners.ts" +```ts title="plugins/newsroom/src/api/lib/listeners.ts" import { buildEventListener } from "@vitnode/core/api/lib/events"; import { contentEventName } from "@vitnode/core/content"; -import { articleContentType } from "@/content/article"; +import { storyContentType } from "@/content/story"; -export const announceArticleListener = buildEventListener({ - event: contentEventName(articleContentType.id, "published"), - name: "announce-published-article", - description: "Logs every article that goes live", +export const announceStoryListener = buildEventListener({ + event: contentEventName(storyContentType.id, "published"), + name: "announce-published-story", + description: "Logs every story that goes live", handler: async (c, payload) => { - await c.get("log").debug(`Article ${payload.contentId} was published`); + await c.get("log").debug(`Story ${payload.contentId} was published`); }, }); ``` @@ -106,16 +106,28 @@ export const announceArticleListener = buildEventListener({ VitNode collects listeners only from the `events` array of a module passed directly to `buildApiPlugin`. A listener on a nested module is silently ignored. -```ts title="plugins/example/src/api/modules/admin/admin.module.ts" +```ts title="plugins/newsroom/src/api/modules/admin/admin.module.ts (excerpt)" export const adminModule = buildModule({ name: "admin", routes: [], modules: [ buildContentAdminModule({ - contentTypes: [articleContent], + containers: [deskContainers], + contentTypes: [ + articleContent, + categoryContent, + commentContent, + storyContent, + explainerContent, + bulletinContent, + tagContent, + eventContent, + pageContent, + letterContent, + ], }), ], - events: [announceArticleListener], // [!code ++] + events: [announceStoryListener], // [!code ++] }); ``` @@ -126,6 +138,6 @@ The blog plugin does the same with its `blogLegacyEventListeners`, which turn `c ## Check the result -Save the file, publish an article in **AdminCP → Example → Articles** and look for the debug line in the API terminal. A failing listener does not undo the change. The write has already committed, and the engine logs the failure. +Save the file, publish a story in **AdminCP → Newsroom → Stories** and look for the debug line in the API terminal. A failing listener does not undo the change. The write has already committed, and the engine logs the failure. Events from a scheduled publish run in a queue task that retries on failure, so the same `published` event can arrive twice. Make work that must happen once idempotent, for example keyed on `scheduleId`. See [A scheduled event may arrive twice](/docs/dev/events/built-in-events#a-scheduled-event-may-arrive-twice). diff --git a/apps/web/content/docs/content-engine/fields-article-form-basic.webp b/apps/web/content/docs/content-engine/fields-article-form-basic.webp index ae0e9fd87514dab6d4b423ff6991c72a30c86068..cc9282b319c6230f1e0729e6676c5845b051d855 100644 GIT binary patch literal 22424 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

-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 E28LOkCIA2c diff --git a/apps/web/content/docs/content-engine/fields-article-form-references.webp b/apps/web/content/docs/content-engine/fields-article-form-references.webp index c7559da0d9c697c3733d2b94596ac20a8b0f2ad9..75698a951a482f3378c9874dd83fb4486648b1fd 100644 GIT binary patch literal 32874 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
@@ -146,7 +146,7 @@ export const ArticleFormLayout = () => ( ); ``` -Register it with `forms: { layout: ArticleFormLayout }` in the type's `contentTypeAdmin(...)` entry, the way the blog plugin registers `BlogArticleFormLayout`. +Register it with `forms: { layout: StoryFormLayout }` in the type's `contentTypeAdmin(...)` entry, the way the blog plugin registers `BlogArticleFormLayout`. | Export | What it gives you | | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/apps/web/content/docs/content-engine/live-editing-field-lock.webp b/apps/web/content/docs/content-engine/live-editing-field-lock.webp index 156f47e947293dc7e5d25dc980951d1fd9c3f0a2..9d34e3cd04229388346cd957f0607dca082603df 100644 GIT binary patch literal 40518 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%0AyfK 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%0A%~8g)#F^G z>!1<8-hiwKfidOP3t_j`z=-K@5dC-RIr&^{7(vh2QEmv8Ik|Om*Fn9_T-c31`e(IX zMXwa22SGf)W++34K~8;%!v82*QY1zubm;F?|Lsh#alUJeUl-o)*A{W5kGq7m+gL6b zu-y~zkHO~*9I`6@9*NKyN3$!J+s|ME`gY;FDc$n!v@TI=pNGgObxd~Lcm5K?^r~Po zqgHF2FSA=Le1+h(&52(lMOh1SN~&Y$+gU4KrIi>fLj;)aC?T_o}Cw6?Jodk zjRAHa8tl0bA6maq6^!`i0I{v}1VJHRhN1Vhm)`YOrM~ zHux{1#8~}Qk<0JH!cv1y>fm~i z-jISf)NM~Vx$BtVDDe?97YLFNQ@@NgT;`7{8KM)tmeWBG8wwPi*oGssAl>0ogp zjXM6t>8~2S1*Eh%Lyt2S>xIp?^K&uOw_6vyE58KGI%E+YDo(#@V&I`o0GpEZdHF?{ za|*$Srp)=I&IWuGfV9;_1B&q?$LP=E+ zISv`nJAQG~&BY9s4y((+>`(vzwH)Z`IPn3nQ;`9*yD2u=wV(h1MFs@8dYCB*Oq>=E z5`dUBip3XuW=B}dT4LTb@2O4#hX21<_M@dwif+nHLJpAOqanW(7cx@Ym=yxz<<|`R z29QVq&c^29Lq;<}Nybm*w`5Fw!8BVN9*Dc6W6>9MYtUy?KmMTg$6paX#sPljT006Ua030r|0RR91 literal 39920 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 C1_(R= diff --git a/apps/web/content/docs/content-engine/live-editing.mdx b/apps/web/content/docs/content-engine/live-editing.mdx index d4e98fb80c..9b71f3f48e 100644 --- a/apps/web/content/docs/content-engine/live-editing.mdx +++ b/apps/web/content/docs/content-engine/live-editing.mdx @@ -14,16 +14,18 @@ Live editing lets a team work on the same record at the same time without overwr Add `liveEditing: true` next to [`editorial`](/docs/content-engine/editorial). Live editing needs `editorial`, because field locks and the shared draft are measured against the record version it adds. Without it, `defineContentType` throws ``liveEditing needs `editorial` ``, and TypeScript flags the option first: -```ts title="plugins/example/src/content/article.ts" -export const articleContentType = defineContentType({ - id: "example.article", - tableName: "example_articles", - editorial: true, - liveEditing: true, // [!code highlight] - fields: { - title: field.text({ required: true, minLength: 3, maxLength: 200 }), - excerpt: field.textarea({ maxLength: 500, nullable: true }), +```ts title="plugins/newsroom/src/content/story.ts (excerpt)" +export const storyContentType = defineContentType({ + id: "newsroom.story", + tableName: "newsroom_stories", + // ... + editorial: { + revisions: { retention: 20 }, + preview: { expiresInMinutes: 30 }, + scheduling: true, }, + liveEditing: true, // [!code highlight] + // ... }); ``` @@ -51,7 +53,7 @@ Clicking into a plain field, such as a title, slug or category, takes a lock on withoutBackground className="*:max-w-full" src={fieldLock} - alt="Edit Article dialog as Tom Becker sees it while Anna Kowalska edits the title: a teal outline with an Anna Kowalska name tag around the dimmed Title field, and her avatar with a teal ring in the header" + alt="Edit Story dialog as a second editor sees it while Test Admin edits the title: a teal outline with a Test Admin name tag around the dimmed Title field, and the Test Admin avatar with a teal ring in the header" /> A lock lasts 60 seconds and renews every 20 seconds while the editor stays in the field. Leaving the field releases it, and so does closing the record. A lock nobody renews, say because a laptop went to sleep, expires on its own. @@ -62,11 +64,11 @@ About 1.5 seconds after you stop typing in a field you hold, the value is saved Changed your mind? **Discard** next to the autosave time throws the draft away after you confirm, and the form goes back to the last saved version. It is a team draft, so everyone editing the record goes back too, and they get a short note saying so. -There is one draft per record and language, shared by the whole team. When you open the record, you see the draft, not only what was last saved. **Save** commits it through the usual [version check](/docs/content-engine/editorial#safe-concurrent-edits) and creates one revision. Autosave itself never creates revisions, emits no events and leaves search and caches alone. [Preview links](/docs/content-engine/editorial#preview-links) also ignore the draft until someone saves. +There is one draft per record and language, shared by the whole team. When you open the record, you see the draft, not only what was last saved. **Save** commits it through the usual [version check](/docs/content-engine/editorial#safe-concurrent-edits) and creates one revision. Autosave itself never creates revisions, emits no events and leaves search and caches alone. [Preview links](/docs/content-engine/editorial-previews) also ignore the draft until someone saves. ### Rich text co-editing -Rich text fields are not locked and get no outline. Everyone in the same field and language types into one shared document and sees each other's caret with a name tag, plus a tint over the text they select. Undo only undoes your own changes. The example plugin's article has no rich text field, so this is the blog plugin's article editor: +Rich text fields are not locked and get no outline. Everyone in the same field and language types into one shared document and sees each other's caret with a name tag, plus a tint over the text they select. Undo only undoes your own changes. The newsroom plugin's story has no rich text field, so this is the blog plugin's article editor: aVI- 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 PIHAWo`k!a;{~-Pwn%EJ$ diff --git a/apps/web/content/docs/content-engine/localization.mdx b/apps/web/content/docs/content-engine/localization.mdx index 43fe78ab23..89343bf245 100644 --- a/apps/web/content/docs/content-engine/localization.mdx +++ b/apps/web/content/docs/content-engine/localization.mdx @@ -9,7 +9,7 @@ import { ImgDocs } from "@/components/fumadocs/img"; import languageSelector from "./localization-language-selector.webp"; import publicPagePl from "./localization-public-page-pl.webp"; -Localization stores chosen fields once per language, while every other field stays shared. An article's title and body get a Polish version, but whether it is featured stays one value. Translated values live in a second table, `{tableName}_translations`, with one row per record and language. This guide uses `example.localized-article` from the example plugin. +Localization stores chosen fields once per language, while every other field stays shared. A bulletin's title and body get a Polish version, but whether it is featured stays one value. Translated values live in a second table, `{tableName}_translations`, with one row per record and language. This guide uses `newsroom.bulletin` from the newsroom plugin. ## Before you begin @@ -23,16 +23,17 @@ The languages come from your app's `i18n.locales` in `vitnode.config.ts` (see [L Add a `localization` block and set `localized: true` on each field that changes per language: -```ts title="plugins/example/src/content/localized-article.ts" -export const localizedArticleContentType = defineContentType({ - id: "example.localized-article", - tableName: "example_localized_articles", +```ts title="plugins/newsroom/src/content/bulletin.ts (excerpt)" +export const bulletinContentType = defineContentType({ + id: "newsroom.bulletin", + tableName: "newsroom_bulletins", // [!code ++:4] localization: { defaultLocale: "en", fallback: "default", }, publication: true, + // ... fields: { // [!code highlight:8] title: field.text({ @@ -56,14 +57,11 @@ export const localizedArticleContentType = defineContentType({ ### Export the translations table -```ts title="plugins/example/src/database/localized-articles.ts" -export const localizedArticleContent = createContentModel( - localizedArticleContentType, -); +```ts title="plugins/newsroom/src/database/bulletins.ts (excerpt)" +export const bulletinContent = createContentModel(bulletinContentType); -export const example_localized_articles = localizedArticleContent.table; -export const example_localized_articles_translations = // [!code ++:2] - localizedArticleContent.translationTable; +export const newsroom_bulletins = bulletinContent.table; +export const newsroom_bulletins_translations = bulletinContent.translationTable; // [!code ++] ``` Drizzle Kit only sees exported tables, so without this line the migration has no translations table. @@ -90,7 +88,7 @@ npm run db:migrate -The localized columns move to `example_localized_articles_translations`, keyed by `(itemId, languageId)`. That table has its own `version`, `createdAt` and `updatedAt`, plus `status` and `publishedAt` when the type has publication. +The localized columns move to `newsroom_bulletins_translations`, keyed by `(itemId, languageId)`. That table has its own `version`, `createdAt` and `updatedAt`, plus `status` and `publishedAt` when the type has publication. The migration does not copy existing values into the translations table. If @@ -134,8 +132,8 @@ When the server refuses a value anyway, nothing is saved. The save answers `400` With publication, each language has its own status. Publishing the record publishes its languages too, and you can then unpublish one language alone. A translation is public only when both the record and that translation are published, and the record is not [hidden](/docs/content-engine/content-visibility). With `editorial`, each language also keeps its own revisions and preview links. - The example plugin registers `example.localized-article` on the API only, so - it has no AdminCP screen. Add it to the plugin's `adminContent` and `adminNav` + The newsroom plugin registers `newsroom.bulletin` on the API only, so it has + no AdminCP screen. Add it to the plugin's `adminContent` and `adminNav` content types to get the generated form shown above. @@ -148,7 +146,7 @@ The public API serves one language per request, chosen in this order: 3. Otherwise `defaultLocale`. ```bash -curl -i "http://localhost:3000/api/@vitnode/example/content/localized-articles/witaj-content-engine?locale=pl" +curl -i "http://localhost:3000/api/newsroom/content/bulletins/witaj-content-engine?locale=pl" ``` ```http @@ -160,13 +158,13 @@ content-language: pl The `locale` property says which language the body is in. When the requested translation is missing or unpublished, `fallback: "default"` serves the default language instead, so `"locale"` becomes `"en"`. With `fallback: "none"` (the default), the API returns `404`. -In a page loader, pass the route's locale through. This is the example plugin's localized article page: +In a page loader, pass the route's locale through. This is the newsroom plugin's bulletin page: -```ts title="plugins/example/src/pages/localized-article-page.tsx" +```ts title="plugins/newsroom/src/pages/bulletin-page.tsx (excerpt)" const detail = await fetcher({ plugin: manifest.id, method: "get", - module: "content/localized-articles", + module: "content/bulletins", path: "/{slug}", args: { params: { slug: encodeURIComponent(slug) }, @@ -175,16 +173,16 @@ const detail = await fetcher({ }); ``` -Opening `/pl/localized-articles/witaj-content-engine` renders the Polish translation: +Opening `/pl/bulletins/witaj-content-engine` renders the Polish translation: -Each translation can have its own slug and URL; [Public pages](/docs/content-engine/public-pages) covers localized URLs and `hreflang`. +Each translation can have its own slug and URL. [Content page](/docs/content-engine/public-pages) covers localized URLs and `hreflang`. ## Translation routes @@ -199,7 +197,7 @@ Each translation can have its own slug and URL; [Public pages](/docs/content-eng | `POST /{id}/translations/{locale}/preview` | A preview link for one language. Needs editorial preview | | `POST /localized`, `PUT /{id}/localized` | Saves shared fields and several languages in one transaction | -Each translation write emits an event such as `content.example.localized-article.translation_created` or `translation_published`; see [Events](/docs/content-engine/events). +Each translation write emits an event such as `content.newsroom.bulletin.translation_created` or `translation_published`, listed in [Events](/docs/content-engine/events). ## Options diff --git a/apps/web/content/docs/content-engine/meta.json b/apps/web/content/docs/content-engine/meta.json index b1e2ab2a45..83d8250470 100644 --- a/apps/web/content/docs/content-engine/meta.json +++ b/apps/web/content/docs/content-engine/meta.json @@ -4,46 +4,55 @@ "icon": "Boxes", "root": true, "pages": [ - "---Start here---", + "---Getting started---", "index", "create-a-content-type", - "---Publish---", + "---Public content---", "publication", "public-api", - "public-pages", "public-lists", + "public-pages", "public-lists-embed", - "seo", - "search", - "caching", - "---Members write---", + "---Member content---", "public-write", "public-write-frontend", "public-write-edit", + "public-permissions", + "---Interactions---", "reports", - "---Model content---", - "relations", "threads", - "localization", - "rich-text", - "id-strategy", - "---Organize content---", + "threads-editing", + "threads-frontend", + "---Organization---", + "relations", + "relations-advanced", "containers", "container-hierarchy", "container-frontend", - "container-policies", + "---Moderation---", "approvals", + "approval-notices", + "container-policies", + "content-visibility", + "---Content features---", + "rich-text", + "localization", + "search", + "seo", + "id-strategy", "---Editorial---", "editorial", + "editorial-previews", + "editorial-scheduling", "live-editing", - "content-visibility", "duplicate-content", - "---Customize---", + "---Customization---", "admincp", "services", "events", - "---Ship---", + "---Deployment---", "database", + "caching", "production", "---Reference---", "reference", @@ -51,6 +60,8 @@ "plugin-files", "public-lists-api", "public-write-api", + "public-write-form-api", + "public-permissions-api", "container-policies-api", "live-editing-api" ] diff --git a/apps/web/content/docs/content-engine/plugin-files.mdx b/apps/web/content/docs/content-engine/plugin-files.mdx index 1bb11be66c..5bb4d2d607 100644 --- a/apps/web/content/docs/content-engine/plugin-files.mdx +++ b/apps/web/content/docs/content-engine/plugin-files.mdx @@ -25,24 +25,38 @@ VitNode reads a plugin's content types from several small files instead of one b A content type with an AdminCP screen needs an entry in both `admin/nav` and `admin/content`. The first adds the sidebar link, the second the screen behind it. They are separate files so the sidebar stays small on every AdminCP page, while form and editor code loads only with the screen. -Without custom cells, fields or layouts, `admin/content` can re-export the nav list: +Without custom cells, fields or layouts, `admin/content` can re-export the nav list, as the newsroom plugin does: -```tsx title="src/admin/content.tsx" +```tsx title="plugins/newsroom/src/admin/content.tsx" export { adminNav as adminContent } from "./nav"; ``` -Once you customize a screen, build `adminContent` on its own and reuse the nav entries, as the example plugin does: +Once you customize a screen, build `adminContent` on its own and reuse the nav entries, as the blog plugin does: -```tsx title="plugins/example/src/admin/content.tsx" +```tsx title="plugins/blog/src/admin/content.tsx (excerpt)" import type { ContentFrontendPluginSource } from "@vitnode/core/lib/plugin"; +import { contentTypeAdmin } from "@vitnode/core/lib/plugin"; + import { manifest } from "@/manifest.gen"; +import { BlogCategoryColorCell } from "@/views/admin/category/color-cell"; +import { BlogCategoryColorField } from "@/views/admin/category/color-field"; -import { exampleArticleNav, exampleCategoryNav, examplePageNav } from "./nav"; +import { blogCategoryNav } from "./nav"; export const adminContent = { pluginId: manifest.id, - contentTypes: [exampleArticleNav, exampleCategoryNav, examplePageNav], + contentTypes: [ + contentTypeAdmin({ + ...blogCategoryNav, + fields: { + color: { component: BlogCategoryColorField }, + }, + columns: { + color: { cell: BlogCategoryColorCell }, + }, + }), + ], } satisfies ContentFrontendPluginSource; ``` @@ -62,9 +76,9 @@ This happens each time `vite dev` or `vite build` starts, and the dev server reg Resolution only works when the plugin id equals the npm package name and the package exports its `dist` folder. A generated plugin already has the right `exports`: -```json title="plugins/example/package.json" +```json title="plugins/newsroom/package.json" { - "name": "@vitnode/example", + "name": "newsroom", "exports": { "./locales/*.json": "./src/locales/*.json", "./*": { @@ -76,24 +90,24 @@ Resolution only works when the plugin id equals the npm package name and the pac } ``` -Tables are the exception. Drizzle Kit reads `node_modules//dist/src/database/*.js` directly for every plugin in the API config. Export each table from those files, or it never reaches a migration. [Database](/docs/content-engine/database#export-every-table) shows a model with several tables. +Tables are the exception. Drizzle Kit reads `node_modules//dist/src/database/*.js` directly for every plugin in the API config. Export each table from those files, or it never reaches a migration. [Migrations](/docs/content-engine/database#export-every-table) shows a model with several tables. ## Keep `config.tsx` small `config.tsx` is bundled with the document shell of every public page: -```tsx title="plugins/example/src/config.tsx" +```tsx title="plugins/newsroom/src/config.tsx" import { buildPlugin } from "@vitnode/core/lib/plugin"; import messages from "./locales"; import { manifest } from "./manifest.gen"; import { routes } from "./routes"; -export const examplePlugin = () => +export const newsroomPlugin = () => buildPlugin({ manifest, localeFiles: { - en: "@vitnode/example/locales/en.json", + en: "newsroom/locales/en.json", }, messages, routes, @@ -106,25 +120,35 @@ Do not import `admin/nav` or `admin/content` here. The app loads `admin/nav` wit ## `content.ts` and public URLs -A content type with `delivery` or `search` publishes URLs. List every such content type in `src/content.ts`. The example plugin lists all of its types, which is allowed: +A content type with `delivery` or `search` publishes URLs. List every such content type in `src/content.ts`. The newsroom plugin lists all of its types, which is allowed: -```ts title="plugins/example/src/content.ts" -import { advancedArticleContentType } from "@/content/advanced-article"; +```ts title="plugins/newsroom/src/content.ts" import { articleContentType } from "@/content/article"; +import { bulletinContentType } from "@/content/bulletin"; import { categoryContentType } from "@/content/category"; -import { localizedArticleContentType } from "@/content/localized-article"; +import { commentContentType } from "@/content/comment"; +import { eventContentType } from "@/content/event"; +import { explainerContentType } from "@/content/explainer"; +import { letterContentType } from "@/content/letter"; import { pageContentType } from "@/content/page"; +import { storyContentType } from "@/content/story"; +import { tagContentType } from "@/content/tag"; export const contentTypes = [ articleContentType, - advancedArticleContentType, - localizedArticleContentType, categoryContentType, + commentContentType, + storyContentType, + explainerContentType, + bulletinContentType, + tagContentType, + eventContentType, pageContentType, + letterContentType, ]; ``` -Keep the module browser-safe: it imports definitions only, never `src/database`. The web build checks that one of your pages serves each URL, and the API refuses to start when a plugin publishes URLs that this module does not declare. See [Content URLs need a page](/docs/dev/i18n/localized-urls#content-urls-need-a-page). +Keep the module browser-safe. It imports definitions only, never `src/database`. The web build checks that one of your pages serves each URL, and the API refuses to start when a plugin publishes URLs that this module does not declare. See [Content URLs need a page](/docs/dev/i18n/localized-urls-advanced#content-urls-need-a-page). ## Errors diff --git a/apps/web/content/docs/content-engine/production-search-health.webp b/apps/web/content/docs/content-engine/production-search-health.webp index ee9f71fc4bb71c27860b7e19ed1510439153b134..4746fdefcc8e3ab43e6f6dd98195dbe5fc1366dc 100644 GIT binary patch literal 136406 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 z
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 diff --git a/apps/web/content/docs/content-engine/public-api.mdx b/apps/web/content/docs/content-engine/public-api.mdx index 812cc1562b..39d12c14bf 100644 --- a/apps/web/content/docs/content-engine/public-api.mdx +++ b/apps/web/content/docs/content-engine/public-api.mdx @@ -7,25 +7,21 @@ implementation: decisions: - Which items become public? Offer content types from the project's plugins that have `publication` but no `publicApi`. - Which fields can readers see? Offer the type's fields; user fields are never public, and the type needs exactly one slug field. - - What can readers search, sort and filter by? Offer its text fields for search, and its other fields for sorting and filtering. constraints: - Set `publicApi` on the content type and register the model in the plugin's `buildContentPublicModule`. - Read the routes with `fetcher` and `module` set to `content/{publicApi.path}`. related: - - title: Public lists + - title: Content list href: /docs/content-engine/public-lists - - title: Public pages + - title: Content page href: /docs/content-engine/public-pages - title: publicApi reference href: /docs/content-engine/reference#publicapi --- -import { ImgDocs } from "@/components/fumadocs/img"; -import listPage from "./public-lists-discussions.webp"; +`publicApi` gives a content type read-only routes anyone can call: a list and a single record. They return only published records, and only the fields you name. Your pages read these routes; nothing about a content type is public until you add them. -`publicApi` gives a content type read-only routes that anyone can call: one for a list and one for a single record. Only published records come back, and only the fields you name. Your pages read these routes; nothing is public until you add them. - -You need [publication](/docs/content-engine/publication) first, so drafts can never leak. +This continues the article from [Drafts & publishing](/docs/content-engine/publication): one published article, `Welcome to the newsroom`, and one draft, `Release notes for October`. @@ -33,130 +29,124 @@ You need [publication](/docs/content-engine/publication) first, so drafts can ne ### Choose the public fields -Add `publicApi` with a URL `path` and the `fields` readers may see: +Edit `src/content/article.ts` and add `publicApi` after `publication`: -```ts title="plugins/example/src/content/discussion.ts" -export const discussionContentType = defineContentType({ - id: "example.discussion", - // ... +```ts title="plugins/newsroom/src/content/article.ts" publication: true, + // [!code ++:4] publicApi: { - path: "discussions", - fields: ["id", "title", "slug", "body", "board", "publishedAt"], + path: "news", + fields: ["id", "title", "slug", "body", "publishedAt"], }, -}); ``` -- `fields` has no wildcard. A field you add to the content type later stays private until you list it. -- Exactly one slug field must be in the list, because the detail route finds records by it. -- User fields never appear here. To show an author, add `people: ["author"]`, which returns a small public profile instead. - -Search, sorting, filters and lighter list rows are a few more options, covered in [Public lists](/docs/content-engine/public-lists#choose-what-the-list-can-read). +- `path` becomes part of the URL, `/api/newsroom/content/news`, and the module name your pages use, `content/news`. Pick one no other plugin in the app uses, because [content pages](/docs/content-engine/public-pages) turn it into a site-wide URL. +- `fields` has no wildcard. A field you add later stays private until you list it here. +- Exactly one slug field must be listed, because the single-record route finds records by it. -### Register the routes +### Register the public routes -Add the model to `buildContentPublicModule` in the plugin's API config: +Edit `src/config.api.ts` and add the model to `buildContentPublicModule`. This is an excerpt: -```ts title="plugins/example/src/config.api.ts" -import { discussionContent } from "@/database/discussions"; +```ts title="plugins/newsroom/src/config.api.ts" +import { buildContentPublicModule } from "@/api/builders"; // [!code ++] +import { articleContent } from "@/database/articles"; // [!code ++] +import { manifest } from "@/manifest.gen"; + +import { adminModule } from "./api/modules/admin/admin.module"; +import { helloModule } from "./api/modules/hello/hello.module"; -export const exampleApiPlugin = () => +export const newsroomApiPlugin = () => buildApiPlugin({ manifest, modules: [ - // [!code ++:3] - buildContentPublicModule({ - contentTypes: [discussionContent], - }), + helloModule, + adminModule, + buildContentPublicModule({ contentTypes: [articleContent] }), // [!code ++] ], }); ``` -`pnpm dev` serves the new routes as soon as you save. `publicApi` adds no columns, so there is nothing to migrate. - - - - - -### Read it from a page - -Call the routes with the [fetcher](/docs/dev/fetcher). The module is `content/` plus `path`, and the route, its query and the response are all typed: - -```ts title="plugins/example/src/pages/discussion-page.tsx" -import { fetcher } from "@vitnode/core/tanstack/fetcher"; - -import { manifest } from "@/manifest.gen"; - -const res = await fetcher({ - plugin: manifest.id, - method: "get", - module: "content/discussions", - path: "/{slug}", - args: { params: { slug: encodeURIComponent(slug) } }, -}); - -if (res.status === 200) { - const discussion = await res.json(); // { id, title, slug, body, board, publishedAt } -} -``` - -A field you did not list, or a module that does not exist, is a compile error. +`publicApi` adds no columns, so there is nothing to migrate. `pnpm dev` serves the routes as soon as it rebuilds. -## The routes - -All routes live under `/api/{pluginId}/content/{publicApi.path}`. - -| Route | Returns | -| ---------------------------- | --------------------------------------------------------------------------------------------- | -| `GET /` | Published records, a page at a time: `{ edges, pageInfo }` | -| `GET /{slug}` | One published record, or `404` | -| `GET /permissions?ids=1,2` | What the visitor may do with each record: `canEdit`, `canReport`. With `publicWrite` or `reports` | -| `/delivery/...` | Page URLs, SEO data and sitemap entries. With [`delivery`](/docs/content-engine/public-pages) | -| `GET /thread?root={id}` | Nested replies under a record. With [`thread`](/docs/content-engine/threads) | -| `POST /`, `PATCH /{id}` | Create and edit from the site. With [`publicWrite`](/docs/content-engine/public-write) | - -Each record comes back with exactly the listed fields. Dates are ISO strings, a relation is `{ id }`, a container field is the container's id, and a file is `{ id, name, url, mimeType, size, width, height }`. A draft, a record scheduled for later, a hidden record and a typo all answer the same `404`. A record that belongs to a parent - its thread root, or its search context relation - is only as public as that parent: once the topic is hidden or unpublished, its comments drop out of the list and their detail answers `404` too. The list adds the hidden records a signed-in author, editor or moderator may see, marked `hidden: true`. - -The list accepts `first` (up to 50), `page` or `cursor`, `search`, `orderBy`, `order` and one parameter per filterable field. [Public lists](/docs/content-engine/public-lists) turns it into a page with search, filters and pagination. - ## Check the result Call the list route while `pnpm dev` runs: ```bash -curl "http://localhost:3000/api/@vitnode/example/content/discussions?first=1" +curl "http://localhost:3000/api/newsroom/content/news" ``` -```json title="Response (trimmed)" +```json title="200" { "edges": [ { - "id": 13, - "title": "Show the author on list rows", - "slug": "show-the-author-on-list-rows", - "board": 3, - "publishedAt": "2026-10-20T16:04:32.879Z", - "author": { "id": 2, "name": "Ada Lovelace", "nameCode": "Ada-Lovelace" } + "id": 1, + "title": "Welcome to the newsroom", + "slug": "welcome-to-the-newsroom", + "body": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { "textAlign": null }, + "content": [{ "type": "text", "text": "This is our first article. Staff write and edit it in the AdminCP." }] + } + ] + }, + "publishedAt": "2026-10-23T18:57:51.156Z" } ], - "pageInfo": { "totalCount": 12, "totalPages": 12, "hasNextPage": true } + "pageInfo": { + "totalCount": 1, + "totalPages": 1, + "currentPage": null, + "pageSize": 25, + "count": 1, + "hasNextPage": false, + "hasPreviousPage": false, + "endCursor": "eyJjb2x1bW4iOiJwdWJsaXNoZWRBdCIs...", + "startCursor": "eyJjb2x1bW4iOiJwdWJsaXNoZWRBdCIs..." + } } ``` -Pages turn these responses into what readers see. The example plugin's `/discussions` page, from [Public lists](/docs/content-engine/public-lists), shows the same records: +Only the published article is in `edges`, with exactly the five listed fields. Now ask for each article by slug: + +```bash +curl -i "http://localhost:3000/api/newsroom/content/news/welcome-to-the-newsroom" +curl -i "http://localhost:3000/api/newsroom/content/news/release-notes-for-october" +``` + +The first answers `200` with the same record. The draft answers `404` with `Article not found.`, the same answer as a slug that never existed, so the API never reveals that a draft exists. + +## Read it from a page + +Pages call these routes with the [fetcher](/docs/dev/fetcher). The module is `content/` plus `path`; the route, its parameters and its response are typed from your definition: + +```ts +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +import { manifest } from "@/manifest.gen"; + +const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/news", + path: "/{slug}", + args: { params: { slug: encodeURIComponent(slug) } }, +}); +``` + +A field you did not list, or a module that does not exist, is a compile error. The list route also takes `first` (up to 50), `page` or `cursor`, `search`, `orderBy` and `order`; [List API](/docs/content-engine/public-lists-api) has every parameter, and [Search](/docs/content-engine/public-lists#add-search) shows which options turn them on. - +Next, show the articles on the site with a [Content list](/docs/content-engine/public-lists). diff --git a/apps/web/content/docs/content-engine/public-lists-api.mdx b/apps/web/content/docs/content-engine/public-lists-api.mdx index c352f1aba1..739f6e4272 100644 --- a/apps/web/content/docs/content-engine/public-lists-api.mdx +++ b/apps/web/content/docs/content-engine/public-lists-api.mdx @@ -1,10 +1,10 @@ --- -title: Public list API +title: List API description: Reference for the VitNode Content Engine public list helpers in @vitnode/core/tanstack/content - defineContentList, contentListQueryOptions, contentListPageHead, ContentListResults, ContentListPagination and useContentListSearchInput. icon: FileJson --- -Every helper on this page is exported from `@vitnode/core/tanstack/content` and is universal unless noted. For a guided setup, follow [Public lists](/docs/content-engine/public-lists). Examples use the blog plugin's `/blog` list. +Every helper on this page is exported from `@vitnode/core/tanstack/content` and is universal unless noted. For a guided setup, follow [Content list](/docs/content-engine/public-lists). Examples use the blog plugin's `/blog` list. ## `defineContentList` diff --git a/apps/web/content/docs/content-engine/public-lists-discussions.webp b/apps/web/content/docs/content-engine/public-lists-discussions.webp deleted file mode 100644 index 792887512d8d40353d50f3ff535ab8d1e96979f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121620 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%0AETIk0g1yC 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

KU`ERU{*iI~K69jLrxm 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 diff --git a/apps/web/content/docs/content-engine/public-lists-embed-latest.webp b/apps/web/content/docs/content-engine/public-lists-embed-latest.webp index b3181359522a6419025fe1a490494282f8fdc7e4..4b255084c9d377e7d0a8ea24d577b685d00dfcd2 100644 GIT binary patch literal 22532 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 literal 28946 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 Va9NzN8v$4V0000000000005CS1bF}e diff --git a/apps/web/content/docs/content-engine/public-lists-embed.mdx b/apps/web/content/docs/content-engine/public-lists-embed.mdx index fdf727bf5b..799192ed49 100644 --- a/apps/web/content/docs/content-engine/public-lists-embed.mdx +++ b/apps/web/content/docs/content-engine/public-lists-embed.mdx @@ -1,127 +1,246 @@ --- -title: Add a list to another page -description: Show a VitNode Content Engine public list inside any page or component, with your own item layout, using contentListQueryOptions and ContentListResults. +title: Embedded list +description: Show a few VitNode Content Engine records inside another page, such as a Latest articles box under each article, by reusing the list's query options with useQuery and ContentListResults, server-rendered. icon: PanelsTopLeft +implementation: + objective: Show the newest records of a content list inside another page, rendered on the server. + decisions: + - Which list feeds the box? Offer list query options built with `contentListQueryOptions`; if none exist, point to the Content list guide. + - Which page shows it, and how many items? Recommend 3 to 5 from the first page of the list. + constraints: + - Reuse the list's query options with `useQuery` and render them with `ContentListResults`; do not write a second fetch. + - Warm the same options in the host route's loader with `queryClient.query`, without `LOADER_DATA_QUERY_META`, and catch its failure. + related: + - title: Content list + href: /docs/content-engine/public-lists + - title: List API + href: /docs/content-engine/public-lists-api --- +import { Tab, Tabs } from "fumadocs-ui/components/tabs"; + import { ImgDocs } from "@/components/fumadocs/img"; import latest from "./public-lists-embed-latest.webp"; -A list does not need its own route. The same query options that feed `/discussions` can fill a "Latest discussions" box on a home page, a sidebar or another page, rendered however that page needs. This guide adds the five newest discussions to the example plugin's `/boards` page, reusing the query from [Public lists](/docs/content-engine/public-lists). - -## Before you begin +A list does not need its own route. The query options behind `/news` can also fill a small box on another page. This guide adds a **Latest articles** box under every article, with the five newest other articles, in the server-rendered HTML. -You need list query options built with `contentListQueryOptions`, such as `discussionsQueryOptions` in `plugins/example/src/pages/discussion-list.ts`. +This continues [Content page](/docs/content-engine/public-pages). It reuses `articlesQueryOptions` from `src/pages/article-list.ts`, written in [Content list](/docs/content-engine/public-lists), and changes `src/pages/article-page.tsx`. -### Render the list with your own items +### Add TanStack Query to the plugin + +The box reads the list with `useQuery`, so the plugin needs `@tanstack/react-query` as a dependency. Run this from the workspace root: + + + +```bash tab="bun" +bun add @tanstack/react-query --cwd plugins/newsroom +``` + +```bash tab="pnpm" +pnpm --filter newsroom add @tanstack/react-query +``` + +```bash tab="npm" +npm install @tanstack/react-query --workspace newsroom +``` + + -Call the query options with `useQuery` and hand the rows to `ContentListResults`. `renderItem` receives each row exactly as the query returned it: + -```tsx title="plugins/example/src/pages/latest-discussions.tsx" + + +### Write the box + +Create `src/pages/latest-articles.tsx`. This is the complete file: + +```tsx title="plugins/newsroom/src/pages/latest-articles.tsx" import { useQuery } from "@tanstack/react-query"; +import { Skeleton } from "@vitnode/core/components/ui/skeleton"; import { ContentListResults } from "@vitnode/core/tanstack/content"; import { HrefLink } from "@vitnode/core/tanstack/link"; import { useLocale, useTranslations } from "use-intl"; -import { discussionsQueryOptions } from "./discussion-list"; -import { discussionHref } from "./discussion-search"; +import { articlesQueryOptions } from "./article-list"; + +/** How many articles the box shows, out of the first page of `/news`. */ +const LATEST_COUNT = 5; -export const LatestDiscussions = () => { - const t = useTranslations("@vitnode/example.boards.latest"); +/** The newest published articles, without the one being read. */ +export const LatestArticles = ({ currentId }: { currentId?: number }) => { + const t = useTranslations("newsroom.articles.latest"); const locale = useLocale(); const { data, isError, isFetching } = useQuery( - discussionsQueryOptions({ locale, search: {} }), + articlesQueryOptions({ locale, search: {} }), ); + const items = data?.edges + .filter(article => article.id !== currentId) + .slice(0, LATEST_COUNT); return ( -

-

- {t("title")} -

+
+
+

+ {t("title")} +

+ + {t("all")} + +
+ {t("empty")}

} error={

{t("error")}

} - getKey={discussion => discussion.id} + getKey={article => article.id} isError={isError} isFetching={isFetching} isFiltered={false} itemClassName="px-4 py-3" - items={data?.edges.slice(0, 5)} + items={items} label={t("title")} - loading={

{t("loading")}

} - noResults={null} - renderItem={discussion => - discussion.slug === null ? ( - {discussion.title} - ) : ( - - {discussion.title} - - ) + loading={ +
+ + {t("loading")} + + {[0, 1, 2].map(key => ( + + ))} +
} + noResults={null} + renderItem={article => ( + + {article.title} + + )} />
); }; ``` -An empty `search` is the plain list, newest first. The box never filters, so `isFiltered` is `false` and `noResults` is never shown. The labels live under `@vitnode/example.boards.latest`, a namespace the `/boards` route already loads. +- **`articlesQueryOptions({ locale, search: {} })`** is the plain list, the first page of `/news` with the ten newest articles. The box shares that request and its cache entry with the list page. +- **Five of ten.** The box drops the article being read and keeps five, so it stays full while the list has at least six articles. +- **`ContentListResults`** picks the state: `loading` until the first answer, `error` when it failed, `empty` when nothing else is published. `isFiltered` is `false` because the box never filters, so `noResults` never shows. The skeleton is hidden from screen readers, which hear the `role="status"` label instead. -### Render it on the server too +### Render it under the article -`useQuery` does not fetch during SSR, so on its own the box starts as `loading`. To send it with the HTML, warm the same options in the host route's loader. Leave out `LOADER_DATA_QUERY_META`, so the query is dehydrated and `useQuery` finds it in the browser: +Edit `src/pages/article-page.tsx`. Import the box and render it after the `
`, in a wrapper that keeps the page's width. This is an excerpt: -```tsx title="plugins/example/src/pages/boards-page.tsx" -const loadBoards = async ( - queryClient: RouteLoadContext["queryClient"], - locale: string, -) => { - const [boards] = await Promise.all([ - queryClient.query(boardsQueryOptions()), - // [!code ++:3] - queryClient - .query(discussionsQueryOptions({ locale, search: {} })) - .catch(() => null), - ]); +```tsx title="plugins/newsroom/src/pages/article-page.tsx" +import { LatestArticles } from "./latest-articles"; // [!code ++] - return { tree: contentContainerTree(boards) }; -}; +const ArticlePage = ({ + loaderData: { item }, +}: PluginRoutePageProps) => ( +
+
+ {/* the header and RichTextContent, as before */} +
+ + {/* [!code ++] */} +
+); +``` -export const route = defineRoute({ - load: async ({ context }) => - await loadBoards(context.queryClient, context.locale), // [!code highlight] +The container classes move from `
` to the wrapper. The box sits outside `
` because it is not part of the article. + + + + + +### Warm the query on the server + +`useQuery` does not fetch during server rendering, so on its own the box arrives as a skeleton and loads in the browser. To send it with the HTML, warm the same options in the page's loader. That needs the query client, which `defineRoute` from `@vitnode/core/tanstack/plugin-routes` passes to `load`. Replace the route in `src/pages/article-page.tsx`; this is an excerpt: + +```tsx title="plugins/newsroom/src/pages/article-page.tsx" +import type { PluginRoutePageProps } from "@vitnode/core/routing"; // [!code highlight] +import { defineRoute } from "@vitnode/core/tanstack/plugin-routes"; // [!code ++] + +import { articlesQueryOptions } from "./article-list"; // [!code ++] + +export const route = defineRoute({ + load: async ({ context, params }) => { + const page = await loadArticle(params.slug); + // A failure leaves the box to retry in the browser instead of + // breaking the article. + await context.queryClient + .query(articlesQueryOptions({ locale: context.locale, search: {} })) + .catch(() => null); + + return page; + }, + + head: ({ loaderData }) => + contentDeliveryPageHead(loaderData?.metadata, { + title: loaderData?.item.title, + }), }); ``` -Then render `` anywhere in the page. Both calls build the key `["@vitnode/example", "discussions", { locale }]`, the same one the first page of `/discussions` uses, so they share one cache entry. `invalidateDiscussionLists` refreshes the box together with the list after a member posts. +`definePluginRoute` is no longer imported from `@vitnode/core/routing`; only the `PluginRoutePageProps` type is. The `/news` loader passes `LOADER_DATA_QUERY_META`, which keeps its query out of the HTML because the page reads it from loader data. This loader leaves it out on purpose. The server sends the query with the page, so `useQuery` finds it in the browser without a request. Both build the same query key, so moving from `/news` to an article reuses the cached list too. - + -## Use a different list shape +### Add the labels + +Add a `latest` group under `newsroom.articles` in `src/locales/en.json`. The article page already loads the `newsroom.articles` messages: + +```json title="plugins/newsroom/src/locales/en.json" +{ + "newsroom": { + "articles": { + "latest": { + "title": "Latest articles", + "all": "All news", + "empty": "No other articles yet.", + "error": "The latest articles could not be loaded.", + "loading": "Loading the latest articles" + } + } + } +} +``` -`/discussions` shows ten rows a page, newest first. For a box that needs a different page size, sort or filter set, declare a second list with [`defineContentList`](/docs/content-engine/public-lists-api#definecontentlist) and its own query options. Keep the same `queryKey` prefix, `[manifest.id, "discussions"]`, so one invalidation still covers both. + + + ## Check the result -Open `http://localhost:3000/boards` and view the page source. The discussion titles are in the HTML. Start a discussion from **Start a discussion**, then come back to `/boards`, and it sits at the top of the box. +Open `http://localhost:3000/news/welcome-to-the-newsroom`. Below the article, **Latest articles** lists the five newest other articles, with **All news** linking to `/news`: + +- **View the page source.** The five titles are in the HTML, so the box needs no request after the page loads. +- **Open another article.** The box leaves that article out and shows the next one instead. +- **Publish an article in the AdminCP** and reload an article page. The new article tops the box. Pages that write articles, such as the [Create form](/docs/content-engine/public-write-frontend), invalidate `[manifest.id, "articles"]`, which refreshes the box together with `/news`. + +## Use a different list shape + +Reusing the first page of `/news` keeps one request and one cache entry, but it also means the box follows that list's sort and size. For a box that needs its own page size, sort or filter, such as the three newest articles in one category, declare a second list with [`defineContentList`](/docs/content-engine/public-lists-api#definecontentlist) and its own query options. Keep the `queryKey` prefix `[manifest.id, "articles"]`, so one invalidation still refreshes both. + +Next, let members write articles too with [Member writing](/docs/content-engine/public-write). To let readers flag an article first, [Reports](/docs/content-engine/reports) works from here as well. diff --git a/apps/web/content/docs/content-engine/public-lists-news-search.webp b/apps/web/content/docs/content-engine/public-lists-news-search.webp new file mode 100644 index 0000000000000000000000000000000000000000..c80a4719d78e39cd629a270cfd15dbd19f6ec029 GIT binary patch literal 50358 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 GefvM09Fo@n literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/content-engine/public-lists-news.webp b/apps/web/content/docs/content-engine/public-lists-news.webp new file mode 100644 index 0000000000000000000000000000000000000000..832a944502db509ce57adce60ea5c63ec217664f GIT binary patch literal 75632 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 X;hq2h00000000000000000000cuiDj literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/content-engine/public-lists-no-results.webp b/apps/web/content/docs/content-engine/public-lists-no-results.webp deleted file mode 100644 index e48784c48ec4c234f217f078ce398583439cc72e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49266 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 z 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 G<-Y*QaL+OT diff --git a/apps/web/content/docs/content-engine/public-lists.mdx b/apps/web/content/docs/content-engine/public-lists.mdx index 13e6333c74..862c7e5eea 100644 --- a/apps/web/content/docs/content-engine/public-lists.mdx +++ b/apps/web/content/docs/content-engine/public-lists.mdx @@ -1,90 +1,47 @@ --- -title: Public lists -description: Build a public VitNode Content Engine list page with search, filters, sorting and pagination kept in the URL, using listFields, defineContentList and the ContentList components. +title: Content list +description: Build a public VitNode Content Engine list page with pagination using defineContentList, contentListQueryOptions, ContentListResults and ContentListPagination, then add search and sorting. icon: LayoutGrid implementation: - objective: Add a public list page with search, filters, sorting and pagination for an existing content type. + objective: Add a public list page with pagination, and optionally search and sorting, for an existing content type. decisions: - Which items does the page list? Offer content types with a public API from the plugins in the project. - Where does the list live? Recommend a URL next to the items' own pages, such as the plural of the type's name. - - What can readers search and sort by? Offer the type's text, textarea and slug fields for search, and its orderable fields plus the publish date for sorting. - - Which filters does the page offer? Offer the type's container, relation and enum fields that can be filtered. - How many items fit on a page? From 1 to 50; recommend 10 to 12. + - Should readers search or sort? Offer the type's text fields for search and its orderable fields plus the publish date for sorting. constraints: - Declare the list with `defineContentList` and fetch it with `contentListQueryOptions` and an inline `fetcher` call, as the guide shows. - - Add `searchableFields`, `orderableFields`, `filterableFields` and `listFields` to `publicApi` instead of filtering in the browser. - Render the list with `ContentListResults` and `ContentListPagination`, and build the head with `contentListPageHead`. - - Keep every label in the plugin's locale files. + - Add `searchableFields` and `orderableFields` to `publicApi` instead of filtering in the browser. related: - - title: Public list API + - title: List API href: /docs/content-engine/public-lists-api - - title: Add a list to another page + - title: Embedded list href: /docs/content-engine/public-lists-embed - - title: Public pages + - title: Content page href: /docs/content-engine/public-pages --- import { ImgDocs } from "@/components/fumadocs/img"; -import listPage from "./public-lists-discussions.webp"; -import noResults from "./public-lists-no-results.webp"; +import listPage from "./public-lists-news.webp"; +import listSearch from "./public-lists-news-search.webp"; -A public list is a page such as `/discussions` that shows published records a page at a time, with search, filters and sorting in its URL. The Content Engine provides the data and the list behavior; your plugin defines the route, the item layout and the words. This guide builds the example plugin's discussion list: search by title, a board filter, three sorts, ten discussions a page, and links to each discussion. +A content list is a page such as `/news` that shows published records a page at a time. The Content Engine provides the data, the paging and the list states; your plugin owns the route, the row layout and the words. This tutorial builds `/news` with article titles, links and page numbers, then adds search and sorting. -| The Content Engine provides | Your plugin defines | -| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------- | -| The list route `GET /content/{publicApi.path}` with paging, search, filters, locale fallback, caching and cache tags | The `page()` route and where it lives | -| Only published, already-live records. Drafts and scheduled records never appear, and hidden ones only for their authors and editors | Which sorts and filters the URL accepts | -| `defineContentList`, `contentListQueryOptions`, `contentListPageHead` | The `fetcher` call and the item layout | -| `ContentListResults`, `ContentListPagination`, `useContentListSearchInput` | The search field, the selects and every label | - -The Content Engine never creates list pages on its own, and it ships no sort or filter controls. You add a list where it belongs and draw the controls you want. - -## Before you begin - -You need a content type with a [public API](/docs/content-engine/public-api) and pages for its records, such as [public pages](/docs/content-engine/public-pages). This guide uses `example.discussion` from the example plugin, which members write through [public write](/docs/content-engine/public-write). +This continues the article from [Public API](/docs/content-engine/public-api), whose public routes live at `/api/newsroom/content/news`. Publish a few more articles in the AdminCP first, so there is more than one page; this tutorial shows 10 a page. -### Choose what the list can read - -Tell the public API which fields a list row carries and what readers may search, sort and filter by: - -```ts title="plugins/example/src/content/discussion.ts" -publicApi: { - path: "discussions", - fields: ["id", "title", "slug", "body", "board", "publishedAt"], - // [!code ++:5] - listFields: ["id", "title", "slug", "board", "publishedAt"], - filterableFields: ["board"], - searchableFields: ["title"], - orderableFields: ["title"], - people: ["author"], -}, -``` - -- `listFields` must be a subset of `fields`. The list route selects only these, so a page of ten discussions never loads ten rich text bodies. The detail route still returns every field in `fields`. -- `searchableFields` takes text, textarea and slug fields. `orderableFields` adds sorts; `publishedAt` is always orderable. -- `filterableFields` adds one query parameter per field. A [container field](/docs/content-engine/containers) such as `board` also accepts `includeDescendants=true`. -- `people: ["author"]` adds a small public profile of each discussion's author to every row. A user field never appears through `fields`. - -These options change the API, not the table, so there is nothing to migrate. Every option is in the [`publicApi` reference](/docs/content-engine/reference#publicapi). - - - - - -### Declare the list and its query +### Declare the list -Create `src/pages/discussion-list.ts`. `defineContentList` from `@vitnode/core/tanstack/content` names the sorts, the URL filters and the page size once. `contentListQueryOptions` turns one URL state into TanStack Query options. Write the `fetcher` call inline in `fetch`, so the route stays typed: +Create `src/pages/article-list.ts`. `defineContentList` names the sorts and the page size once. `contentListQueryOptions` turns one URL state into [TanStack Query](/docs/dev/cache) options; write the `fetcher` call inline in `fetch`, so the route and its response stay typed: -```ts title="plugins/example/src/pages/discussion-list.ts" -import type { QueryClient } from "@tanstack/react-query"; +```ts title="plugins/newsroom/src/pages/article-list.ts" import type { ContentListSearch } from "@vitnode/core/tanstack/content"; import { - contentListIdFilter, contentListQueryOptions, defineContentList, } from "@vitnode/core/tanstack/content"; @@ -92,73 +49,46 @@ import { fetcher } from "@vitnode/core/tanstack/fetcher"; import { manifest } from "@/manifest.gen"; -export const DISCUSSIONS_HREF = "/discussions"; - -export const discussionList = defineContentList({ +/** `/news`: published articles, newest first, 10 a page. */ +export const articleList = defineContentList({ defaultSort: "newest", - filters: { board: contentListIdFilter }, pageSize: 10, sorts: { newest: { order: "desc", orderBy: "publishedAt" }, - oldest: { order: "asc", orderBy: "publishedAt" }, - title: { order: "asc", orderBy: "title" }, }, }); -export type DiscussionListSearch = ContentListSearch< - (typeof discussionList.sorts)[number], - { board: typeof contentListIdFilter } +export type ArticleListSearch = ContentListSearch< + (typeof articleList.sorts)[number] >; -export const discussionListSearch = ( - input: Record, -): DiscussionListSearch => discussionList.parseSearch(input); - -const discussionQueryKeys = { - all: [manifest.id, "discussions"] as const, -}; - -export const discussionsQueryOptions = (request: { +export const articlesQueryOptions = (request: { locale: string; - search: DiscussionListSearch; + search: ArticleListSearch; }) => contentListQueryOptions({ ...request, - queryKey: discussionQueryKeys.all, + queryKey: [manifest.id, "articles"], fetch: async ({ search }) => { const res = await fetcher({ plugin: manifest.id, method: "get", - module: "content/discussions", + module: "content/news", path: "/", - args: { - query: { - ...discussionList.apiQuery(search), - ...(search.board === undefined - ? {} - : { board: String(search.board), includeDescendants: "true" }), - }, - }, + args: { query: articleList.apiQuery(search) }, }); if (res.status !== 200) { - throw new Error(`Loading discussions answered ${res.status}.`); + throw new Error(`Loading articles answered ${res.status}.`); } return await res.json(); }, }); - -export const invalidateDiscussionLists = async (queryClient: QueryClient) => { - await queryClient.invalidateQueries({ queryKey: discussionQueryKeys.all }); -}; ``` -- The URL keys are `q`, `sort`, `page` and one per filter, here `board`. Each `orderBy` must be in `publicApi.orderableFields` or be `publishedAt`. -- `apiQuery` turns the URL state into `first`, `page`, `order`, `orderBy` and `search`. Filters are yours to map, because a URL name and an API name can differ. -- The response is typed from the content type. Each row carries exactly `listFields` plus `author`, with dates as ISO strings. There is nothing to re-validate. -- `invalidateDiscussionLists` expires every cached page of the list. The create and edit pages call it after a save. See [Public create form](/docs/content-engine/public-write-frontend#write-the-page). - -A localized content type also passes `locale` in the query, so each language gets its own response and cache entry. Discussions are not localized, so the locale only keys the cache. +- `sorts` maps a URL value to the API's `orderBy` and `order`. `publishedAt` is always orderable. +- `ArticleListSearch` is the list's state as the URL holds it: `page`, and later `q` and `sort`. +- `apiQuery(search)` builds `first`, `page`, `orderBy` and `order` for the list route. @@ -166,260 +96,155 @@ A localized content type also passes `locale` in the query, so each language get ### Add the route -Register the page with the list's `search` validator and a skeleton for the first load: - -```ts title="plugins/example/src/routes.ts" -import { FeedPendingSkeleton } from "@vitnode/core/tanstack/pending"; +Edit `src/routes.ts` and add the page. This is an excerpt: -import { discussionListSearch } from "./pages/discussion-list"; +```ts title="plugins/newsroom/src/routes.ts" +import { articleList } from "./pages/article-list"; // [!code ++] export const routes = definePluginRoutes([ - // [!code ++:6] - page("/discussions", { - component: lazy(() => import("./pages/discussions-page")), - messages: ["@vitnode/example.discussions"], - pendingComponent: FeedPendingSkeleton, - search: discussionListSearch, + // [!code ++:5] + page("/news", { + component: lazy(() => import("./pages/articles-page")), + messages: ["newsroom.articles"], + search: articleList.parseSearch, }), ]); ``` -`messages` loads the `@vitnode/example.discussions` namespace for the page, its `head` and every component inside it. `pendingComponent` shows while the loader runs on a client-side navigation. A server render waits for the loader instead. +`search` cleans the query string before the loader sees it, so `/news?page=2` becomes `{ page: 2 }` and `/news?page=1` the same state as `/news`. `messages` loads the `newsroom.articles` translations for the page and its head. -### Load the page and build its head +### Write the page + +Create `src/pages/articles-page.tsx`. This is the complete file: -Create `src/pages/discussions-page.tsx`. The loader warms the query, so the server renders the list and the browser starts with it: +```tsx title="plugins/newsroom/src/pages/articles-page.tsx" +import type { PluginRoutePageProps } from "@vitnode/core/routing"; -```tsx title="plugins/example/src/pages/discussions-page.tsx" +import { DateFormat } from "@vitnode/core/components/date-format"; import { LOADER_DATA_QUERY_META } from "@vitnode/core/lib/query-client"; -import { contentListPageHead } from "@vitnode/core/tanstack/content"; +import { + contentListPageHead, + ContentListPagination, + ContentListResults, +} from "@vitnode/core/tanstack/content"; +import { HrefLink } from "@vitnode/core/tanstack/link"; import { defineRoute, type RouteLoadContext, } from "@vitnode/core/tanstack/plugin-routes"; +import { useTranslations } from "use-intl"; -import { - DISCUSSIONS_HREF, - type DiscussionListSearch, - discussionsQueryOptions, -} from "./discussion-list"; -import { boardsQueryOptions } from "./example-queries"; - -const loadDiscussions = async ( - queryClient: RouteLoadContext["queryClient"], - { locale, search }: { locale: string; search: DiscussionListSearch }, -) => { - // A failed list is an error state on the page, not an error page. - const [discussions, boards] = await Promise.all([ - queryClient - .query({ - ...discussionsQueryOptions({ locale, search }), - meta: LOADER_DATA_QUERY_META, - }) - .catch(() => null), - queryClient.query(boardsQueryOptions()).catch(() => []), - ]); - - return { boards, discussions }; -}; +import type { ArticleListSearch } from "./article-list"; -type DiscussionsPageData = Awaited>; +import { articleList, articlesQueryOptions } from "./article-list"; -export const route = defineRoute({ - load: async ({ context, search }) => - await loadDiscussions(context.queryClient, { - locale: context.locale, - search, - }), +const loadArticles = async ( + { locale, queryClient }: RouteLoadContext, + search: ArticleListSearch, +) => + // A failed list becomes a message on the page, not an error page. + await queryClient + .query({ + ...articlesQueryOptions({ locale, search }), + meta: LOADER_DATA_QUERY_META, + }) + .catch(() => null); + +type ArticlesPageData = Awaited>; + +export const route = defineRoute({ + load: async ({ context, search }) => await loadArticles(context, search), head: ({ search, t }) => contentListPageHead({ - description: t("@vitnode/example.discussions.list.desc"), - pathname: DISCUSSIONS_HREF, + description: t("newsroom.articles.desc"), + pathname: "/news", search, - title: t("@vitnode/example.discussions.list.title"), + title: t("newsroom.articles.title"), }), }); -``` - -- `LOADER_DATA_QUERY_META` keeps the result out of the dehydrated cache, because the loader data already carries it to the browser. -- `.catch(() => null)` turns a failed request into the list's error state instead of the app's error page. -- `contentListPageHead` gives the plain list `index, follow` and a canonical link, and every searched, filtered, sorted or paged view `noindex, follow`. -- `boardsQueryOptions` is the example's own query for the board picker. It is not part of the list. - - - - - -### Render the controls and the results - -Add the component to the same file. `ContentListResults` decides between the loading, error, empty, no-results and item states. `ContentListPagination` renders page links from `pageInfo`: -```tsx title="plugins/example/src/pages/discussions-page.tsx" -const DiscussionsPage = ({ - loaderData: { boards, discussions }, - navigate, +const ArticlesPage = ({ + loaderData: articles, search, -}: PluginRoutePageProps) => { - const t = useTranslations("@vitnode/example.discussions.list"); - const [isPending, startTransition] = React.useTransition(); - const update = (patch: Partial) => { - startTransition(async () => { - await navigate({ - resetScroll: false, - search: discussionList.withSearch(search, patch), - }); - }); - }; - const input = useContentListSearchInput({ - onCommit: q => { - update({ q }); - }, - value: search.q, - }); +}: PluginRoutePageProps) => { + const t = useTranslations("newsroom.articles"); return (

-
- { - input.setValue(event.target.value); - }} - onKeyDown={event => { - if (event.key === "Enter") input.commit(); - }} - placeholder={t("search_placeholder")} - type="search" - value={input.value} - /> - { - const board = Number(event.target.value); - update({ board: board > 0 ? board : undefined }); - }} - value={String(search.board ?? "")} - > - {t("all_boards")} - {boards.map(board => ( - - {board.name} - - ))} - - { - update({ - sort: discussionList.sorts.find( - sort => sort === event.target.value, - ), - }); - }} - value={search.sort ?? discussionList.defaultSort} - > - {discussionList.sorts.map(sort => ( - - {t(`sort.${sort}`)} - - ))} - -
+

+ {t("title")} +

} - error={} - getKey={discussion => discussion.id} - isError={discussions === null} - isFetching={isPending} - isFiltered={discussionList.isFiltered(search)} - itemClassName="flex flex-col gap-2 p-4 md:flex-row md:justify-between" - items={discussions?.edges} + empty={

{t("empty")}

} + error={

{t("error")}

} + getKey={article => article.id} + isError={articles === null} + isFiltered={articleList.isFiltered(search)} + itemClassName="flex flex-col gap-1 p-4" + items={articles?.edges} label={t("title")} loading={null} - noResults={ - {t("no_results.clear")}} - title={t("no_results.title")} - /> - } - renderItem={discussion => - discussion.slug === null ? ( - {discussion.title} - ) : ( - - {discussion.title} + noResults={

{t("empty")}

} + renderItem={article => ( + <> + + {article.title} - ) - } + {article.publishedAt ? ( + + + + ) : null} + + )} /> - {discussions ? ( + {articles ? ( - discussionList.href(DISCUSSIONS_HREF, { ...search, page }) - } + hrefFor={page => articleList.href("/news", { ...search, page })} label={t("pagination")} - pageInfo={discussions.pageInfo} + pageInfo={articles.pageInfo} /> ) : null}
); }; -export default DiscussionsPage; +export default ArticlesPage; ``` -The excerpt trims styling, the author line and the per-row actions. `ListState` is a small wrapper around the `Empty` components from `@vitnode/core/components/ui/empty`. The full file is `plugins/example/src/pages/discussions-page.tsx`. - -- `withSearch` returns the new URL state and drops `page` when anything else changes, because page 2 of the old results says nothing about the new ones. -- `useContentListSearchInput` waits 500 ms after the last keystroke before it navigates, commits at once on Enter, and follows the URL when the reader goes back or forward. -- `navigate` inside `startTransition` keeps the current rows on screen, dimmed and `aria-busy`, while the next page loads. -- `empty` shows when nothing is published and `noResults` when a search or filter matches nothing, so only the second one offers **Clear filters**. -- `loading` renders while `items` is `undefined`. This page always has data from its loader, so it passes `null`; a list that fetches in the browser shows a skeleton there. -- Link each row to its record's page with the same helper that page's route uses, here `discussionHref(slug)`. A row whose `slug` is `null` has no page to link to. - - - -To put Edit and Report buttons on each row, see [Public edit form](/docs/content-engine/public-write-edit#show-the-edit-button) and [Report content](/docs/content-engine/reports#add-it-to-every-row-of-a-list). +- **The loader** runs on the server for the first visit and in the browser on later navigations. It warms the query with `queryClient.query`, so the page is in the server-rendered HTML. `LOADER_DATA_QUERY_META` keeps the query out of the HTML's cache payload, because the router already sends the loader data. +- **A failed request** becomes `null`, and `ContentListResults` shows `error` instead of breaking the page. It also decides between `empty` (nothing published) and `noResults` (nothing matches a search). +- **`ContentListPagination`** renders real links built by `articleList.href`, so paging works before hydration and crawlers can follow it. It renders nothing when there is one page. +- **`contentListPageHead`** sets the title and description. The plain list is indexable; page 2 and later get `noindex, follow`. -### Add the messages +### Add the labels -Every label lives in the plugin's locale file, under the namespace the route loads: +Add the `articles` keys to `src/locales/en.json`, inside `newsroom`: -```json title="plugins/example/src/locales/en.json" +```json title="plugins/newsroom/src/locales/en.json" { - "@vitnode/example": { - "discussions": { - "list": { - "title": "Discussions", - "desc": "Questions, ideas and show-and-tell from the community, newest first.", - "search_label": "Search discussions", - "search_placeholder": "Search by title", - "board_label": "Board", - "all_boards": "All boards", - "sort_label": "Sort by", - "sort": { "newest": "Newest", "oldest": "Oldest", "title": "Title (A-Z)" }, - "pagination": "Discussion pages", - "empty": { "title": "No discussions yet" }, - "no_results": { "title": "No discussions match", "clear": "Clear filters" }, - "error": { "title": "Couldn't load discussions" } - } + "newsroom": { + "articles": { + "title": "News", + "desc": "The latest articles from our team.", + "empty": "No articles yet. Check back soon.", + "error": "The articles could not be loaded. Try again in a moment.", + "pagination": "Article pages" } } } @@ -429,42 +254,177 @@ Every label lives in the plugin's locale file, under the namespace the route loa -## How URL parameters, locales and pagination interact +## Check the result -- **Normalized URLs.** `parseSearch` drops unknown keys, invalid values, `page=1` and the default sort. `/discussions?sort=newest&page=1&utm_source=x` and `/discussions` are the same state, so they share a query key and a canonical link. -- **Locales.** On a [localized](/docs/content-engine/localization) content type, pass `locale` in the query. A record with no translation in that language falls back to the default language when the type uses `fallback: "default"`, and each row says which language it is in under `locale`. An unknown `?locale=` answers `404` rather than an English list. -- **Pagination.** `ContentListPagination` reads `currentPage`, `totalPages`, `hasNextPage` and `hasPreviousPage` from `pageInfo`, and every page is a real link, so it works before hydration. A `page` past the end gets the last page. The list route also accepts `cursor` for "Older" and "Newer" links; [Containers on the frontend](/docs/content-engine/container-frontend#add-the-board-page) uses it. -- **Caching.** The API caches each list read per query and locale, and every publish, edit, unpublish, hide or delete of the content type expires it. TanStack Query keeps its own copy in the browser for `RECORD_STALE_TIME`, which is why a page that writes records invalidates its list. -- **Hidden records.** With [`visibility`](/docs/content-engine/content-visibility#who-can-still-see-it), a signed-in author, editor or moderator also gets the hidden records they may see. Those rows carry `hidden: true`, so mark them, for example with `HiddenIcon` from `@vitnode/core/components/hidden-icon`. That response is `private, no-store` and skips the API cache. A route with a page `cache` serves signed-in visitors the HTML rendered for guests, so refetch the list in the browser under a key that includes the viewer, like the blog's `blogViewerPostsQueryOptions`. For your own counts or queries, combine `contentListHiddenAccess` and `contentPublicListCondition` from `@vitnode/core/content/server`. +Open `http://localhost:3000/news`: -Records reach crawlers through their own pages and the [sitemap](/docs/content-engine/seo#sitemap). The sitemap route lists records, not lists, so add the list's own URL, such as `/discussions`, where your app builds `/sitemap.xml`. + -The blog plugin builds `/blog` and `/blog/category/:slug` from the same pieces with only pages and a category, in `plugins/blog/src/pages/blog-list.ts` and `blog-queries.ts`. +1. The newest ten published articles show, newest first. `Release notes for October` is a draft, so it never appears. +2. Click **2**. The URL becomes `/news?page=2` and the remaining articles show. +3. Titles link to `/news/{slug}`. The next tutorial, [Content page](/docs/content-engine/public-pages), creates that page. -## Check the result +## Add search + +Searching narrows the list on the server. Add `searchableFields` to `publicApi` in `src/content/article.ts`: + +```ts title="plugins/newsroom/src/content/article.ts" + publicApi: { + path: "news", + fields: ["id", "title", "slug", "body", "publishedAt"], + searchableFields: ["title"], // [!code ++] + }, +``` + +Then add a search field to the page, in three places in `src/pages/articles-page.tsx`. First, the imports: + +```tsx title="plugins/newsroom/src/pages/articles-page.tsx" +import { Input } from "@vitnode/core/components/ui/input"; +import { + contentListPageHead, + ContentListPagination, + ContentListResults, + useContentListSearchInput, // [!code ++] +} from "@vitnode/core/tanstack/content"; +import { useTransition } from "react"; +``` + +Second, the search state at the top of `ArticlesPage`, which now also reads `navigate` from its props: + +```tsx title="plugins/newsroom/src/pages/articles-page.tsx" +const ArticlesPage = ({ + loaderData: articles, + navigate, // [!code ++] + search, +}: PluginRoutePageProps) => { + const t = useTranslations("newsroom.articles"); + // [!code ++:15] + const [isPending, startTransition] = useTransition(); + const update = (patch: Partial) => { + startTransition(async () => { + await navigate({ + resetScroll: false, + search: articleList.withSearch(search, patch), + }); + }); + }; + const input = useContentListSearchInput({ + onCommit: q => { + update({ q }); + }, + value: search.q, + }); +``` + +Third, the field below the `

`, and two props on `ContentListResults`: + +```tsx title="plugins/newsroom/src/pages/articles-page.tsx" +
+ { + input.setValue(event.target.value); + }} + onKeyDown={event => { + if (event.key === "Enter" && !event.nativeEvent.isComposing) { + input.commit(); + } + }} + placeholder={t("search_label")} + type="search" + value={input.value} + /> +
+ +{t("no_results")}

} // [!code highlight] + // ...the other props stay as they are +/> +``` + +- `useContentListSearchInput` waits until typing pauses, then calls `onCommit`. Enter commits at once. +- `withSearch` writes `?q=` and goes back to page 1, because page 4 of the old results says nothing about the new ones. +- `isFetching` keeps the current results on screen, dimmed and marked `aria-busy`, while the next ones load. -Open `http://localhost:3000/discussions`: +Add `"search_label": "Search articles"` and `"no_results": "No articles match your search."` to the `articles` labels. -1. Type a word from a title. After half a second the URL gets `?q=...` and the list narrows. -2. Pick a board, then **Title (A-Z)**. The URL keeps both, and the list jumps back to page 1. -3. Search for a word no title contains. **No discussions match** shows with **Clear filters**. -4. Move to page 2, refresh, then press back. Each view comes back exactly as the URL describes it. +## Add sorting -The plain list is the indexable one; every other state stays out of the index but keeps its links followable: +Add `orderableFields: ["title"]` to `publicApi`, then more sorts to `articleList`: -```bash -curl -s http://localhost:3000/discussions | grep -oE '' -curl -s "http://localhost:3000/discussions?board=1" | grep -oE '' +```ts title="plugins/newsroom/src/pages/article-list.ts" + sorts: { + newest: { order: "desc", orderBy: "publishedAt" }, + oldest: { order: "asc", orderBy: "publishedAt" }, // [!code ++] + title: { order: "asc", orderBy: "title" }, // [!code ++] + }, ``` -```html - - +Render a select next to the search field, using the same `update` function: + +```tsx title="plugins/newsroom/src/pages/articles-page.tsx" +import { + NativeSelect, + NativeSelectOption, +} from "@vitnode/core/components/ui/native-select"; + + { + update({ sort: articleList.sorts.find(sort => sort === event.target.value) }); + }} + value={search.sort ?? articleList.defaultSort} +> + {articleList.sorts.map(sort => ( + + {t(`sort.${sort}`)} + + ))} +; ``` +Label each sort under `articles.sort`, such as `"sort": { "newest": "Newest first", "oldest": "Oldest first", "title": "Title A–Z" }`, and add `"sort_label": "Sort articles"`. The list never writes the default sort to the URL, so `/news?sort=newest` and `/news` are the same page. + + +## Keep list rows light + +The list returns every field in `fields`, including each article's body. Name the fields a row needs with `listFields`; the single-record route still returns all of `fields`: + +```ts title="plugins/newsroom/src/content/article.ts" + publicApi: { + path: "news", + fields: ["id", "title", "slug", "body", "publishedAt"], + listFields: ["id", "title", "slug", "publishedAt"], // [!code ++] + }, +``` + +## Add a filter + +A filter needs a field that `publicApi.filterableFields` lists, such as a relation, an enum or a [container](/docs/content-engine/containers). Add a parser for its URL value in `defineContentList({ filters })`, and pass the value to the list route in `fetch`. The newsroom plugin's letters list filters by desk this way in `plugins/newsroom/src/pages/letter-list.ts`; [List API](/docs/content-engine/public-lists-api#definecontentlist) lists the parsers. + +## How the list URL behaves + +- **Normalized URLs.** `parseSearch` drops unknown keys, invalid values, `page=1` and the default sort. `/news?sort=newest&page=1&utm_source=x` and `/news` are the same state, so they share a query key and a canonical link. +- **Locales.** On a [localized](/docs/content-engine/localization) content type, pass `locale` in the query. A record with no translation in that language falls back to the default language when the type uses `fallback: "default"`, and each row says which language it is in under `locale`. An unknown `?locale=` answers `404` rather than an English list. +- **Pagination.** `ContentListPagination` reads `currentPage`, `totalPages`, `hasNextPage` and `hasPreviousPage` from `pageInfo`, and every page is a real link, so it works before hydration. A `page` past the end gets the last page. The list route also accepts `cursor` for "Older" and "Newer" links; [Container pages](/docs/content-engine/container-frontend#add-the-desk-page) uses it. +- **Caching.** The API caches each list read per query and locale, and every publish, edit, unpublish, hide or delete of the content type expires it. TanStack Query keeps its own copy in the browser for `RECORD_STALE_TIME`, which is why a page that writes records invalidates its list. +- **Hidden records.** With [`visibility`](/docs/content-engine/content-visibility#who-can-still-see-it), a signed-in author, editor or moderator also gets the hidden records they may see. Those rows carry `hidden: true`, so mark them, for example with `HiddenIcon` from `@vitnode/core/components/hidden-icon`. That response is `private, no-store` and skips the API cache. A route with a page `cache` serves signed-in visitors the HTML rendered for guests, so refetch the list in the browser under a key that includes the viewer, like the blog's `blogViewerPostsQueryOptions`. For your own counts or queries, combine `contentListHiddenAccess` and `contentPublicListCondition` from `@vitnode/core/content/server`. + +Records reach crawlers through their own pages and the [sitemap](/docs/content-engine/seo#sitemap). The sitemap route lists records, not lists, so add the list's own URL, such as `/news`, where your app builds `/sitemap.xml`. + +The blog plugin builds `/blog` and `/blog/category/:slug` from the same pieces with only pages and a category, in `plugins/blog/src/pages/blog-list.ts` and `blog-queries.ts`. + +Next, give every article its own page with [Content page](/docs/content-engine/public-pages). diff --git a/apps/web/content/docs/content-engine/public-pages-article.webp b/apps/web/content/docs/content-engine/public-pages-article.webp index 055e5af89e4a7908eb984b8565be9405b12a7e2d..8fcdc84c72128ff9e9b53bf812fcc353a71a9419 100644 GIT binary patch literal 16482 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
-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 Z9Gn0E00000000000000000000006c3L<9f; diff --git a/apps/web/content/docs/content-engine/public-pages.mdx b/apps/web/content/docs/content-engine/public-pages.mdx index 0b44dffaf2..40a00182f7 100644 --- a/apps/web/content/docs/content-engine/public-pages.mdx +++ b/apps/web/content/docs/content-engine/public-pages.mdx @@ -1,24 +1,21 @@ --- -title: Public pages -description: Give every published VitNode Content Engine record its own URL with delivery, a plugin page, slug redirects and localized URLs. +title: Content page +description: Give every published VitNode Content Engine record its own page and URL with delivery, a plugin route and contentDeliveryPage, with missing records and drafts answering 404. icon: Compass implementation: objective: Give each published record of an existing content type its own public page and URL. decisions: - Which items get their own page? Offer content types with a public API that have no `delivery` block yet. - What URL do the pages use? Recommend the default `/{publicApi.path}/:slug`, or a custom path with exactly one `:slug` that does not start with `/admin` or `/api`. - - Which fields fill the page title, the description and "hide from search engines"? Offer the type's public text fields, its text or rich text fields, and a yes/no field. - - Should old URLs redirect after a slug changes? This needs editorial history; if the type has none, ask whether to add it. - - Should the pages be listed in the sitemap, and how often do they change? Always, hourly, daily, weekly, monthly, yearly or never. + - Should old URLs redirect after a slug changes, and should pages be in the sitemap? Both are optional; redirects need `editorial`. constraints: - - Add the `delivery` block and claim the URL with a `page()` in the plugin's routes; the build fails while a content URL has no page. + - Add `delivery`, export the content types from the plugin's `src/content.ts`, and claim the URL with a `page()` in the plugin's routes; the build fails while a content URL has no page. - In the page loader, read the record with `fetcher` and build the page and its head with `contentDeliveryPage` and `contentDeliveryPageHead`, as the guide shows. - - Delivery adds no columns, so there is nothing to migrate. related: - title: SEO href: /docs/content-engine/seo - - title: Localized URLs - href: /docs/dev/i18n/localized-urls + - title: Rich text + href: /docs/content-engine/rich-text - title: Delivery reference href: /docs/content-engine/reference#delivery --- @@ -26,9 +23,9 @@ implementation: import { ImgDocs } from "@/components/fumadocs/img"; import articlePage from "./public-pages-article.webp"; -Delivery turns a published record into a web page at a stable URL, such as `/articles/hello-content-engine`. The Content Engine resolves the URL, answers `404` for drafts, redirects retired slugs and builds the page's SEO metadata from fields you choose. Your plugin owns the page component, so the content type, its API and its URL stay in one plugin. +Delivery gives every published record a page at a stable URL, such as `/news/welcome-to-the-newsroom`. The Content Engine resolves the URL, answers `404` for drafts and unknown slugs, and builds the page's metadata; your plugin owns the page component. -The content type needs [publication and a public API](/docs/content-engine/public-api). This guide continues with `example.article`. +This continues the article from [Content list](/docs/content-engine/public-lists), whose rows already link to `/news/{slug}`. @@ -36,29 +33,18 @@ The content type needs [publication and a public API](/docs/content-engine/publi ### Turn on delivery -Add a `delivery` block to the definition: - -```ts title="plugins/example/src/content/article.ts" -export const articleContentType = defineContentType({ - id: "example.article", - // [!code ++:10] - delivery: { - redirects: true, - seo: { - titleField: "title", - descriptionField: "excerpt", - noIndexField: "noIndex", - openGraph: { titleField: "title", descriptionField: "excerpt" }, - }, - sitemap: { changeFrequency: "weekly", priority: 0.7 }, +Edit `src/content/article.ts` and add `delivery` after `publicApi`: + +```ts title="plugins/newsroom/src/content/article.ts" + publicApi: { + path: "news", + fields: ["id", "title", "slug", "body", "publishedAt"], }, -}); + + delivery: true, // [!code ++] ``` -- Every SEO field must also be in `publicApi.fields`, because the page renders it publicly. That is why the example lists `noIndex` there. -- `noIndexField` names a boolean. When it is `true`, the page gets `noindex, nofollow` and the record leaves the sitemap. -- `redirects` needs `editorial: true`, which the example article already has. `sitemap` needs `publication`. -- The page URL defaults to `/{publicApi.path}/:slug`, so articles live at `/articles/:slug`. Set `delivery.path` to use another URL. It needs exactly one `:slug` and cannot start with `/admin` or `/api`. +`true` uses every default. The page URL is `/{publicApi.path}/:slug`, so articles live at `/news/:slug`. URLs are site-wide, which is why no other plugin's content type may use the same `publicApi.path`. Delivery adds no columns, so there is nothing to migrate. @@ -66,25 +52,15 @@ export const articleContentType = defineContentType({ ### Export the plugin's content types -Export every content type with public URLs from `src/content.ts`: +Create `src/content.ts`. It lists every content type with public URLs: -```ts title="plugins/example/src/content.ts" -import { advancedArticleContentType } from "@/content/advanced-article"; +```ts title="plugins/newsroom/src/content.ts" import { articleContentType } from "@/content/article"; -import { categoryContentType } from "@/content/category"; -import { localizedArticleContentType } from "@/content/localized-article"; -import { pageContentType } from "@/content/page"; - -export const contentTypes = [ - articleContentType, - advancedArticleContentType, - localizedArticleContentType, - categoryContentType, - pageContentType, -]; + +export const contentTypes = [articleContentType]; ``` -The build compares these URLs with your plugin's routes. A content type whose URL no page serves stops `dev` and `build` with a `content-url-without-page` error, so a broken canonical link never ships. [Plugin files](/docs/content-engine/plugin-files) explains how the build finds this module. +VitNode reads this module by its name. It compares these URLs with your plugin's routes, and `dev` and `build` stop with a `content-url-without-page` error while a content URL has no page, so a broken canonical link never ships. [Plugin files](/docs/content-engine/plugin-files) lists every file VitNode reads. @@ -92,14 +68,20 @@ The build compares these URLs with your plugin's routes. A content type whose UR ### Claim the URL -Add a page for the same path to the plugin's routes: +Edit `src/routes.ts` and add the page below the list. This is an excerpt: -```ts title="plugins/example/src/routes.ts" +```ts title="plugins/newsroom/src/routes.ts" export const routes = definePluginRoutes([ + page("/news", { + component: lazy(() => import("./pages/articles-page")), + messages: ["newsroom.articles"], + search: articleList.parseSearch, + }), + // [!code ++:4] - page("/articles/:slug", { + page("/news/:slug", { component: lazy(() => import("./pages/article-page")), - messages: ["@vitnode/example.articles"], + messages: ["newsroom.articles"], }), ]); ``` @@ -110,9 +92,12 @@ export const routes = definePluginRoutes([ ### Write the page -The loader calls two public routes in parallel. `/delivery/resolve/{slug}` says whether the URL is a record, an old slug to redirect, or nothing. `/{slug}` returns the record's public fields. +Create `src/pages/article-page.tsx`. This is the complete file: -```tsx title="plugins/example/src/pages/article-page.tsx" +```tsx title="plugins/newsroom/src/pages/article-page.tsx" +import { DateFormat } from "@vitnode/core/components/date-format"; +import { RichTextContent } from "@vitnode/core/components/rich-text"; +import { zodRichTextDocument } from "@vitnode/core/content"; import { definePluginRoute, type PluginRoutePageProps, @@ -126,11 +111,11 @@ import { z } from "zod"; import { manifest } from "@/manifest.gen"; -import { ContentArticle } from "./content-article"; - const zodArticle = z.object({ - excerpt: z.string().nullable(), + body: zodRichTextDocument, + id: z.number(), publishedAt: z.string().nullable(), + slug: z.string(), title: z.string(), }); @@ -139,14 +124,14 @@ const loadArticle = async (slug: string) => { fetcher({ plugin: manifest.id, method: "get", - module: "content/articles", + module: "content/news", path: "/delivery/resolve/{slug}", args: { params: { slug: encodeURIComponent(slug) } }, }), fetcher({ plugin: manifest.id, method: "get", - module: "content/articles", + module: "content/news", path: "/{slug}", args: { params: { slug: encodeURIComponent(slug) } }, }), @@ -178,25 +163,88 @@ export const route = definePluginRoute({ const ArticlePage = ({ loaderData: { item }, }: PluginRoutePageProps) => ( - +
+
+

+ {item.title} +

+ {item.publishedAt ? ( + + + + ) : null} +
+ + +
); export default ArticlePage; ``` -- `contentDeliveryPage` returns `{ item, metadata }`. It throws a not-found for an unknown slug or a draft, and a `308` redirect for a retired slug. -- `contentDeliveryPageHead` sets the title, the meta description (HTML stripped, cut at 160 characters), `robots` for a no-index record and `hreflang` alternates for localized content. -- `load` comes before `head`, so TypeScript can infer `loaderData`. `ContentArticle` is the plugin's own layout component. +- **The loader** asks two public routes at once. `/delivery/resolve/{slug}` says whether the URL is a record, an old slug to redirect, or nothing; `/{slug}` returns the public fields. +- **`contentDeliveryPage`** returns `{ item, metadata }`. For an unknown slug or a draft it throws the router's not-found, so the app shows its 404 page with a `404` status, and `item` is never `null` in the component. +- **`zodArticle`** checks the response and types `body` as a rich text document. `RichTextContent` renders it as React elements, on the server and in the browser. +- **`contentDeliveryPageHead`** builds the head from `metadata`. The `title` option is the fallback while no SEO field is configured. + +`load` comes before `head`, so TypeScript infers `loaderData`.
-## Render the record's fields +## Check the result + +Open `http://localhost:3000/news/welcome-to-the-newsroom`: + + + +- The page title is `Welcome to the newsroom - VitNode`. +- `/news/release-notes-for-october`, the draft, shows the not-found page with status `404`. Publish it in the AdminCP and the same URL works. +- `/news/no-such-article` answers `404` too. + +The loader's first request shows what delivery decided: + +```bash +curl http://localhost:3000/api/newsroom/content/news/delivery/resolve/welcome-to-the-newsroom +``` + +```json title="200" +{ + "type": "content", + "canonicalPath": "/news/welcome-to-the-newsroom", + "canonicalInternalPath": "/news/welcome-to-the-newsroom", + "itemId": 1, + "seo": { "description": null, "title": null }, + "openGraph": null, + "robots": null, + "alternates": [], + "hreflang": { "languages": {} }, + "isFallback": false, + "hidden": false, + "locale": null, + "requestedLocale": null +} +``` + +`seo` is empty because no SEO fields are configured yet. + +## Optional next steps + +- **Titles, descriptions and the sitemap.** Set `delivery.seo` and `delivery.sitemap`, as [SEO](/docs/content-engine/seo) shows. +- **Redirects after a slug change.** Add `editorial: true` and `delivery: { redirects: true }`. The old slug is kept in `core_content_slug_history`, and `contentDeliveryPage` turns a visit to it into a `308` redirect to the new URL. While a record is [hidden](/docs/content-engine/content-visibility), its page and old slugs answer `404`. +- **Edit and Report buttons.** [Permissions](/docs/content-engine/public-permissions) and [Reports](/docs/content-engine/reports) add them next to the title. +- **A custom URL.** Set `delivery.path`, such as `"/articles/:slug"`. It needs exactly one `:slug` and cannot start with `/admin` or `/api`. + +## Render other fields The detail route returns each field in `publicApi.fields` in a shape made for rendering. The blog's `plugins/blog/src/pages/post-page.tsx` uses all of them: @@ -209,8 +257,8 @@ The detail route returns each field in `publicApi.fields` in a shape made for re | People from `publicApi.people` | `{ id, name, fullName, nameCode, avatarColor, avatarUrl, role }`, or `null` for a deleted account | `UserFormat` from `@vitnode/core/components/user-format`, `Avatar` from `@vitnode/core/components/avatar` | | To-one relations | `{ id }` | Load the related record separately when you need more than its id | -```tsx title="plugins/example/src/pages/discussion-page.tsx" -

+```tsx title="plugins/newsroom/src/pages/letter-page.tsx (excerpt)" +

{t("posted_by")} {item.author ? ( @@ -219,49 +267,34 @@ The detail route returns each field in `publicApi.fields` in a shape made for re )}

- + ``` `RichTextContent` renders the document as React elements on the server and in the browser, without `dangerouslySetInnerHTML`. Validate an author with `zodContentPublicPerson` from `@vitnode/core/content` when your page parses the response with Zod. ## Pages without delivery -Delivery is optional. A content type without it still has `GET /{slug}`, and your page reads it directly. The example plugin's discussions do this. `contentPageItem` from `@vitnode/core/tanstack/content` throws the router's not-found for a `null` record, like `contentDeliveryPage` does: +Delivery is optional. A content type without it still has `GET /{slug}`, and your page reads it directly. The newsroom plugin's letters do this, in `plugins/newsroom/src/pages/letter-page.tsx`. `contentPageItem` from `@vitnode/core/tanstack/content` throws the router's not-found for a `null` record, like `contentDeliveryPage` does: -```ts title="plugins/example/src/pages/discussion-page.tsx" +```ts title="plugins/newsroom/src/pages/letter-page.tsx (excerpt)" const detail = await fetcher({ plugin: manifest.id, method: "get", - module: "content/discussions", + module: "content/letters", path: "/{slug}", args: { params: { slug: encodeURIComponent(slug) } }, }); const item = contentPageItem( - detail.status === 200 ? zodDiscussion.parse(await detail.json()) : null, + detail.status === 200 ? zodLetter.parse(await detail.json()) : null, ); ``` Without delivery there are no slug redirects, no canonical metadata and no sitemap entries, so write `head` yourself. The [SEO guide](/docs/content-engine/seo) covers the head helpers. -## Missing, hidden and unavailable records - -The public routes answer the same `404` for a slug that never existed, a draft, a scheduled record and a record whose translation is unpublished, so a page cannot reveal that a draft exists. Both `contentDeliveryPage` and `contentPageItem` turn that into the app's not-found page. Give the route a `notFound` component when you want a page-specific message. - -A [hidden](/docs/content-engine/content-visibility) record is the exception. Its author and moderators who may view hidden records still get it, with `Cache-Control: private, no-store` and `noindex`, and delivery sets `metadata.hidden: true`. The blog uses that flag to show a "hidden" notice and to drop the Report button. Everyone else gets `404`. - -## Add Edit and Report buttons - -Put **Edit** and **Report** next to the title. `useContentPermissions` tells you which ones this visitor gets, as `canEdit` and `canReport`. See [Public edit form](/docs/content-engine/public-write-edit#show-the-edit-button) and [Report content](/docs/content-engine/reports). - -## Keep old URLs working - -Renaming a slug breaks links people already shared. With `delivery.redirects`, the old slug is stored in `core_content_slug_history` when an editor changes it, and the resolve route answers `{ "type": "redirect", "status": 308, "location": "/articles/new-slug" }`. `contentDeliveryPage` turns that into a `308` redirect. While a record is [hidden](/docs/content-engine/content-visibility), its page and its old slugs answer `404` instead. - -## Sitemap entries - -`delivery.sitemap` lists every published URL for crawlers. [SEO](/docs/content-engine/seo#sitemap) covers the route, paging and turning the entries into XML. - ## Localized URLs Every URL delivery builds follows the app's [localized URL rules](/docs/dev/i18n/localized-urls): language prefixes, per-language domains and translated route segments. The blog plugin's posts are a working example. They are [localized](/docs/content-engine/localization) and live at `/blog/article/:slug`, and the web app translates that route for Polish: @@ -278,58 +311,4 @@ i18n: { The blog's sitemap then lists `/blog/article/english-title` for English and `/pl/wpisy/polish-title` for Polish, and only published translations become `hreflang` alternates. Every `delivery` option is in the [content type reference](/docs/content-engine/reference#delivery). -## Check the result - -Open `http://localhost:3000/articles/hello-content-engine`. Delivery adds no columns, so there is nothing to migrate. - -The page head carries the article's title and excerpt: - -```bash -curl -s http://localhost:3000/articles/hello-content-engine | grep -oE '[^<]*|' -``` - -```html -Hello Content Engine - VitNode - -``` - -The resolve route shows what the loader received. `openGraph`, `canonicalPath` and `hreflang` are there too if you want to render more tags yourself: - -```bash -curl http://localhost:3000/api/@vitnode/example/content/articles/delivery/resolve/hello-content-engine -``` - -```json -{ - "type": "content", - "canonicalPath": "/articles/hello-content-engine", - "canonicalInternalPath": "/articles/hello-content-engine", - "seo": { - "title": "Hello Content Engine", - "description": "A first article from the example plugin, served by the public API and rendered on its own page." - }, - "openGraph": { - "title": "Hello Content Engine", - "description": "A first article from the example plugin, served by the public API and rendered on its own page." - }, - "robots": { "follow": true, "index": true }, - "alternates": [], - "hreflang": { "languages": {} }, - "isFallback": false, - "itemId": null, - "locale": null, - "requestedLocale": null -} -``` - -`itemId` is `null` because `id` is not in the article's `publicApi.fields`. Unpublish the article and the same URL shows the app's not-found page. - - +Next, show the newest articles under each one with an [Embedded list](/docs/content-engine/public-lists-embed). diff --git a/apps/web/content/docs/content-engine/public-permissions-api.mdx b/apps/web/content/docs/content-engine/public-permissions-api.mdx new file mode 100644 index 0000000000..63f62a01c2 --- /dev/null +++ b/apps/web/content/docs/content-engine/public-permissions-api.mdx @@ -0,0 +1,96 @@ +--- +title: Permissions API +description: Reference for the VitNode Content Engine GET /permissions route and the useContentPermissions hook, with ids, limits, the canEdit and canReport flags, omitted records, batching, cache keys and invalidation. +icon: KeyRound +--- + +This page is the contract behind [Permissions](/docs/content-engine/public-permissions). It covers what `GET /{publicApi.path}/permissions` accepts and answers, and how `useContentPermissions` from `@vitnode/core/tanstack/content` asks it. Examples use the tutorial's articles, at `/api/newsroom/content/news`. + +## When the route exists + +The Content Engine mounts `GET /permissions` next to the [public read routes](/docs/content-engine/public-api) when the content type has [`publicWrite.update`](/docs/content-engine/public-write) or [`reports`](/docs/content-engine/reports). Without either, there is nothing to answer and the [fetcher](/docs/dev/fetcher) refuses the path at compile time. + +```http title="Request" +GET /api/newsroom/content/news/permissions?ids=1,2,15 +Cookie: vitnode_auth= +``` + +```json title="200" +{ + "items": [ + { "id": 1, "canEdit": false, "canReport": true }, + { "id": 15, "canEdit": true, "canReport": false } + ] +} +``` + +| Part | Rule | +| --- | --- | +| `ids` | Comma-separated record ids, for example `12,13,14`. Duplicates collapse, and a value that is not a valid id for the content type's [ID strategy](/docs/content-engine/id-strategy) is ignored | +| Limit | At most 50 distinct ids (`CONTENT_PUBLIC_MAX_PAGE_SIZE`). More answers `400` with `{ "error": "Ask for at most 50 ids." }` | +| `items` | One entry per record the visitor may see, in the order asked | +| Caching | `Cache-Control: private, no-store`. The answer depends on who asks, so no shared cache ever stores it | + +## What the flags mean + +| Flag | `true` when | Guests | +| --- | --- | --- | +| `canEdit` | `GET /{id}/edit` and `PATCH /{id}` would accept this visitor: a moderator with `can_edit` in the record's container, or the owner while the record is not hidden, `update.own` is on and the container's `authorEdit` policy still allows it | Always `false` | +| `canReport` | The content type has `reports`, the record is public, and the visitor did not write it | `true` on public records. The report dialog asks them to sign in | + +A record is **left out of `items`** when the visitor can neither read it publicly nor edit it: a missing id, someone else's draft, or a hidden record for anyone but a moderator with `can_edit`. The route answers the same way for all of them, so it never confirms that a draft exists. Your own draft comes back with `canEdit: true` and `canReport: false`. + +The flags answer "should this button show?", not "why not?". They carry no denial reason. When an edit is refused, the write route says why, such as `edit_window_closed`; see [Write API](/docs/content-engine/public-write-api#rejection). + + + The answer is what the server decided when the page asked. An edit window can close, or a moderator can lose `can_edit`, while the page stays open. The server authorizes every write again, so a stale `true` only means the save gets refused with a message. + + +## `useContentPermissions` + +```ts +const permissions = useContentPermissions({ fetch, ids, queryKey }); +``` + +| Name | Type | Required | Description | +| --- | --- | --- | --- | +| `ids` | `readonly (number \| string)[]` | Yes | The records on screen, any number and in any order | +| `fetch` | `(ids) => Promise<{ items }>` | Yes | Calls `GET /permissions` with `ids.join(",")`. Receives at most 50 ids per call. Throw on anything but `200` | +| `queryKey` | `QueryKey` | Yes | The content type's query prefix, such as `[manifest.id, "comments"]` | + +| Returns | Type | Behavior | +| --- | --- | --- | +| `of(id)` | `(id) => { canEdit, canReport }` | The record's flags. All `false` until known, for a record left out of `items` and for a record in a failed batch. Stable until an answer changes, so memoized rows can receive it | +| `isPending` | `boolean` | `true` while the session or any batch still waits for its first answer. `false` for an empty `ids` list | +| `isError` | `boolean` | `true` when at least one batch failed. Its records read as all `false`; the others keep their answers | + +`useContentPermissions` runs in the browser. Shared, cached HTML never contains a visitor's buttons. They appear after the session is known. + +### Batches + +The hook removes duplicate ids and sends the rest in batches of 50, the route's limit, with at most three requests in flight. Each batch is its own query, cut from `ids` in the order you pass them and sorted inside, so: + +- A thread with 120 comments on screen makes three requests instead of one refused one. +- **Load more** that appends ids keeps every full batch before it, and its cached answer, untouched. +- The same records in the same order always produce the same query keys. + +Hide a button while its record's flags are unknown, rather than showing a page-wide spinner. A failed batch hides its buttons and nothing else, so the page stays usable. + +### Cache keys and invalidation + +Every batch is stored under `[...queryKey, "permissions", { ids, userId }]`. The user id makes the answer personal. Signing in or out moves to new keys, so one visitor never sees another's buttons, even on a page served from a shared cache. + +The Content Engine's public reads are the same for everybody and can be cached on a CDN; the permissions route is per visitor and is never cached outside the tab. Keep the two in separate queries, as the hook does, and never put flags into a shared response. + +VitNode's query client does not refetch on mount or window focus, so an answer lives until it is invalidated, the network reconnects or the tab reloads. Refresh it after anything that can change it: + +```ts +await queryClient.invalidateQueries({ + queryKey: [manifest.id, "comments", "permissions"], +}); +``` + +- **After a write**, new records get their own batch automatically, because their ids are new. Invalidate when a write changes who may edit, such as a moderator hiding a record. +- **After a role or policy change** in the same tab, such as a member becoming a moderator, invalidate the prefix or reload. +- Invalidating the plain prefix, `[manifest.id, "comments"]`, refreshes the permissions together with every other query under it. + diff --git a/apps/web/content/docs/content-engine/public-permissions-edit-link.webp b/apps/web/content/docs/content-engine/public-permissions-edit-link.webp new file mode 100644 index 0000000000000000000000000000000000000000..9517f2f50a735c8715cc2ccba0b4b544b6bdb8dc GIT binary patch literal 8834 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
=;xd22c5P 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 GivI@HpsTz9 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/content-engine/public-permissions.mdx b/apps/web/content/docs/content-engine/public-permissions.mdx new file mode 100644 index 0000000000..30d273a9a6 --- /dev/null +++ b/apps/web/content/docs/content-engine/public-permissions.mdx @@ -0,0 +1,158 @@ +--- +title: Permissions +description: Show Edit and other actions only to visitors who may use them with useContentPermissions, while the VitNode Content Engine authorizes every write on the server. Explains staff, moderator and member permissions. +icon: KeyRound +implementation: + objective: Show action buttons, such as Edit, only to visitors the Content Engine allows. + decisions: + - Which items get the buttons? Offer content types with `publicWrite.update` or `reports`. + - Which pages show them? Offer the record pages and lists that render those items. + constraints: + - Ask `GET /{publicApi.path}/permissions` through `useContentPermissions`; never compare author ids or roles in the browser. + - Pass every id on screen to one hook call. + related: + - title: Permissions API + href: /docs/content-engine/public-permissions-api + - title: Reports + href: /docs/content-engine/reports + - title: Edit form + href: /docs/content-engine/public-write-edit +--- + +import { ImgDocs } from "@/components/fumadocs/img"; +import editLink from "./public-permissions-edit-link.webp"; + +A page should show **Edit** only to people who may edit. `useContentPermissions` asks the Content Engine what the current visitor may do with the records on screen, so the page never compares author ids or guesses who is a moderator. The server still checks every write itself. + +This continues the article from [Edit form](/docs/content-engine/public-write-edit). Authors can edit at `/news/:id/edit`, but nothing links there yet. + + + + + +### Ask the Content Engine + +Create `src/pages/article-permissions.ts`. It wraps `useContentPermissions` with the typed `fetcher` call for your articles: + +```ts title="plugins/newsroom/src/pages/article-permissions.ts" +import { useContentPermissions } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +import { manifest } from "@/manifest.gen"; + +/** What the visitor may do with each article on screen: `canEdit`, `canReport`. */ +export const useArticlePermissions = (ids: readonly number[]) => + useContentPermissions({ + ids, + queryKey: [manifest.id, "articles"], + fetch: async request => { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/news", + path: "/permissions", + args: { query: { ids: request.join(",") } }, + }); + if (res.status !== 200) throw new Error("Loading permissions failed."); + + return await res.json(); + }, + }); +``` + +The route, `GET /api/newsroom/content/news/permissions`, exists because the article has `publicWrite.update`. `queryKey` starts with the article list's prefix, so refreshing the list refreshes the answers too. + + + + + +### Show the Edit link + +Edit `src/pages/article-page.tsx`. Add an `ArticleActions` component above `ArticlePage`, and render it in the article's header. These are excerpts: + +```tsx title="plugins/newsroom/src/pages/article-page.tsx" +import { buttonVariants } from "@vitnode/core/components/ui/button"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { useTranslations } from "use-intl"; + +import { useArticlePermissions } from "./article-permissions"; + +/** Asked in the browser, so the cached page stays the same for everyone. */ +const ArticleActions = ({ id }: { id: number }) => { + const t = useTranslations("newsroom.articles"); + const { canEdit } = useArticlePermissions([id]).of(id); + + return ( +
+ {canEdit ? ( + + {t("edit_link")} + + ) : null} +
+ ); +}; +``` + +```tsx title="plugins/newsroom/src/pages/article-page.tsx" +
+ {/* title and date as before */} + +
+``` + +Add `"edit_link": "Edit"` under `newsroom.articles` in `src/locales/en.json`. + +`of(id)` reads all `false` until the answer arrives, so the link appears a moment after the page, and never for someone who may not use it. + +
+ +
+ +## Check the result + +1. Sign in as the member who wrote an article and open it. **Edit** shows below the date and opens the edit form. +2. Open it as another member. There is no **Edit**. +3. Open an article staff wrote in the AdminCP. Its `author` is empty, so only a moderator sees **Edit**. + + + +## The server still decides + +The answer is a hint for the interface, not a lock. Every write route checks the session, the owner and the moderator permissions again, so a stale **Edit**, for example after an edit window closed, only leads to a refusal message. The flags also carry no reason; the write route says why when it refuses. + +Keep the answer out of anything shared. Article pages are the same for every reader and can be cached; the permissions request is personal, never cached outside the tab, and keyed by the signed-in user. + +## Staff, moderators and members + +Three kinds of permission meet on a content type: + +| Who | Where they act | Granted in | Example | +| --- | --- | --- | --- | +| **Staff** | The AdminCP and its `/admin/` routes | **AdminCP → Staff → Administrators** | `newsroom:article:can_edit` edits any article in the AdminCP | +| **Moderators** | The public site, the ModCP | **AdminCP → Staff → Moderators** | The moderator `can_edit` edits any article from the site | +| **Members** | The public site | Ownership, set by the server | The author edits their own article | + +`canEdit` combines the last two. It is `true` for the owner while the rules allow it, and for a moderator with `can_edit`. An AdminCP session never adds powers on the public site. Moderators edit with the same forms as members, so one edit page serves both. + +## Lists and threads + +On a page with many records, pass every id on screen to one hook call and read each row with `of(id)`. The hook splits more than 50 ids into batches, so a long thread works too: + +```tsx +const permissions = useArticlePermissions( + articles?.edges.map(article => article.id) ?? [], +); + +permissions.of(article.id).canEdit; +``` + +[Permissions API](/docs/content-engine/public-permissions-api) has the route's contract, every option and return value of the hook, and when to invalidate it. Next, let readers flag a problem with [Reports](/docs/content-engine/reports). diff --git a/apps/web/content/docs/content-engine/public-write-admin-list.webp b/apps/web/content/docs/content-engine/public-write-admin-list.webp deleted file mode 100644 index 5fb69a656f4ec8ddd8eb14bb143859db84cc5755..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196480 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�Nr#(`1>|w;RAA`}NsAIyjF0wN+ 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

  • yRJPu#$f2za*Zi6z4VFO$8$)4UBiL3yQks=b~g9`Z16|8qRw0YdKaeES3> zGdJy3h2oNOU_Y~aIc}BrnY~wf6y%W&$Y+Hc5Chwge;B^K+)@htIu?7cCh=Sh zfngCN$JgCOC9=3?Flk3lGUM2h_}WwTq?Ro7RJYDZFn>mA^ae5=wXn1@P$xd(x0%cR z0}7@zqBzOljK5Ep)xj@Y;zDQMtm`6(y@4%Y>%7Az4E?S4n>9~K-ZeCWbizZzt)8rAHG4RQzV;6Z!J&z>otAc-Ehi1 zo|X`1J7nu8jjubs-Pn68mvVTT(a6aTaGcJhaO^)(%V8F3d05f;N~_(oKhGrY+GL~L z&WWX%KxfHMK@;;LA-@7FiIlY8cA!T%wi(bKBUEK>q_$`285ekRD-k0fRsQK^#x-;h z18{r+;~V|+)PiM27P4X7EvrJ8ar(jE2S|R48VTY_A#ElPN`xQN=3nE^xUk?WLsBru zeA9TkwUX72Lu))AoE+7O=xvWAu=P6tm(}tx^s_%X zqeHc0gk?=VvdxJLMIfs4D*$LAuSx!*Bxkl^Qax6vpx*2hiy|_H%`|u0YvNA~^gtg? z#LnnmgEu>`A#bx`$d(gdI7=>$JJQ~G?CyFE33qo=LbHXPsGt4@md93cMf{Y|eS}F% zb)qE7c2Nu-O7?=~m&KoQvSN`1a{I@3(z5G*sN0>sPNkZ#od(j@Xo!18)|dzL&u`(_ zl5j2B;qyLhP1U z-MjZM;GqGOGF;&l)NUQ6oL}82BGc2f$QaG1TY^``9?<1;=?R~}4Y z3!)V5e=}*E%k;+fqJ3qLCw^D~bU_Y&vPbp7Q~n@DcZWkmiw8E&?7O(ITLKSAyT{DD z+f|{wcMHjFKBX>DSgk6WzqK#2l+UN80x=lRXWYbMHyQx`zR|wgxd*&&XT)D@ISDFP z%_uwA1_;*`dh2Kk9I?WPQi|a454bL&=$4Jvr@UWH1&0=T@8OAvGoOi*dzfDDiJ8Gv z*MSv%;hG~l)67o5Ys0y=EUZ9Q6>SdJ?cGz7eH8R;FZH zi)4a2da`3#B7jkc$sN&RRl@*;?6hR!2PWAiLn+2F1J4vQLpDdR#P5;}j6(_Kh$et< zCVLHaB+55=>a;x~aSJg1343a`a6Yw3c7Y`+Co{Arxic@TPcV0wV>`KF?8S@|K8L{2 zFKUx^4?C;gp(8m%_v%;!al%8#p8A>=`&=wh@9^=!&rW}5u2~j>f@G({@e3A=zn<+h zrd6|N2?$6nS1nlLNj_q^ zuhf@Y@_>s2E^-N2=YHwE6vkfffPjW`Bn|ndGt>q=to&w{nhL4J)rUKFV)jicVu;1} za5>SE^{Oi*azERMFs$Ud(`v@dje9(@-F&;s4Mm61r*7dILrxWEk-tPdzcyad z)L1hKX{o4?IP*0=CD8sf0woFBG1FN%B;ZObJ48-=Ju^-^<#I#n+9(v3iMiYbqcLZL zsA&tt1+q4X@M<{BY+uU3l8YeoTzF3(>n(kCyNN(Qdu>pzXD3y;Ih#I%PDS<>0x5MF z#nJxAVEx9^sEKoz}aQPvtM%QZJKty^PPLYCK%;Ky7eX`WfWScwd zcw(}VR9?ZzqySvNCEjkgE29j5;K-2(wA~JotxYAS9%y>SvhN%5w1aVI?BUu&tujqF zI9xksw_2yv_9{D96focwc&hdX9-GS=Z}n=~az@4}Mlva>uJ&q&si0@IZWlIK76i(z zJbEk_y18?J)is-3eiGB9@HLaoq?E`x@NWzyps)>)$_LiTRFQKAVg=mO&9>Agi5Ci^ z;eqNkT@o_QaAqX3!?s@YWT;Vf;Kfl7!y!d(Y)jcH)xP%D&PK3AqL$7#t3J|SL zudiy+6N)U?>W?Mz`C+3W%rD&K7I3iepTf+y(*||vzgfRSzC%m*MpBdQs8c-*_gym| z=!!uqr=^I-;}N4X^3g>TLfzV!{G%e@MpkASLe?nCn$O}8jS&>5Mdg$?s%n$6D-~no zVgY^^`cKZdxQ-T{XJO-u@-Q~F%;|N{%9*5mTmZr?yN50|64&MkXYJ&Ap6A9hnvQ$M z{|t6CN1%f?W}~uvY|;xYk<%&s@ERuR+J;Wgq`d7fM)bn7Z+EAP%c%D<$^o9AL>>S{ z2m*H979U73w-C2B4R}f9C`UMYF}Lbpu+&4lF{#Le3MJ^?GH@>#1QeGdEpoxZxh=HS zP@Smz>P!ipFL@D`%=i%$4E&e+P`uuLYGeC`SSy#ch1YIR_2z8lp=6CL+qBjz@%rm8 zVMfNMg9N$uMDA^-IJfyU5}Baaj4?a5S=&Qy@wjWx?fBhWqgk0lo=_)oN-^7}WmqZ1 zlnAhO8Y60`ehm39LrKjW){ft~vV-B{^*a~9gUi+)9$xrA&)6C;(tT?$mnr9wow7cB zkF%I=bKUiuWXPBU01}Acz7y=rV!drCwLb1-eL>rM`4Ji+2nh`@aQx8Il2iJJGQiQe zZ~7>{1h_(lPNkiE_!g0%ge=q@f@KcvrW+X1W%qj58&-D-+o`hQuZ;V{(bBV{6t;z??A+u8LE~}o?>+m z8h-1p#^Z)_>&kE>>gg<}Wetg%q|fwT?LOCKx|2=U&ECr85*1u#C?=jynJy-e@j0Cy zN#pE$4_4`C)7?(f46!cjBKtJ)N6DyG)w21!vg}TKtCdZ!lp$N!r>Uiczpb9pEc5yl zt0#+qPC`?a+TS!3H=y*WRG~1>IqVnz~P^gB{nD3J;DP zCq%ybkJl?JK&WjFNdsdjs*ZB-XZ)ikFixw4bu;+wFPpPXl^0Sk(vjlL(lu z=^vjv6O58tX!6wu(LX&v7ZpcC@7W$~i?~Gh>v95pWXjtqw5=IUW!$b*Rg}GZcJMdY zr8~?3yX?J|ez>=_oQmL=LLY!aq8?=B2rEAh=qvXOW5Hcyl$@8&!U`ZN7r*q|Gwx|s zE8JxtD7Tz(fvKbSi@AA=pf5g#TLWT?&GG~ykmroBTbB&J#)P!Fqx%3i5ex7{8AE8}^_6N>15>Uaa&5~a@k3w*8yxnFF#v)@I~w?DW_Bi)r505BhxkCU zt_kRX%{cEI^^LZlJ7bei`z2ik?I|me342O_hKELoVp0!^!J?*iA-1t+bMts%1a`Gt zsXs|#fSce@6K5AMa`QK9r4n5RQmRqVJ91x=epEL@G4A{~z`l(iK(I80Nwd1F(Z^Q{ zZrM-efn|JUmDkb(-p?=8*pz>YC(1duib-aZ&#GIqOMz_OKgZM9;6K8^1r#~BF0)+%|ck2e+xnL z?*Xm4J*=d7OmgM(w0GLx?9R*ETG0!gK)tcvbcu}QGsx}uQVn+XVq>Tk`_!vZ#e!@} zn)M_@Al)?K0b>YWKg4+F&*oxRP}>v#RjY7qmA3cJTIw|r%hGy6%ec!mIgRjNNx>@! za+p1FoJnM#&*jPbyVvo1;SZsVyAx|{@Aq!h-+}Y`>R)9EO=+@`w(g(kKfHLFIK(PB zaZ>tg%OniIXlQ3WY`PPva8wv4tj{O_uwLuHXMyo|HjOo*P^dkJQN-RZ+eY5$i^Eg} zwn^NNusVVnSi@`CWt#Kh^x|qAP)j-E?k_=tDO@4=17ejDS+~)X5!rrDn#VK#2UW2Y zVED1Th4AYP?)cEGR~SoZcY#Etwx`+Uxp!S2#{;(+4S^jhCS4pm|EQjwyS+Hl8l0MA z3R}>R@f`J?B3sxfw8B!6giyI9c}Yo`^<8W%ZZRd{wP<)JE{YvCD<=rjLMRvrEe%X- z!DfB$>4#E>N>GN@!%6=g7A##ncfRJprYe|+*>*OAMRoN3fWx5`iYqc!3WKXZV#xEQ ztNQTNC{iQ0jfIc@m1MJ#-pF796a;IY=p#rhF`c~Q73MUZ6@Dt>`v^Mi&04VK8(B_` z5=EAur#gKo%|JwSr+1%5CB=RU$b$(&&%%G(M@adD5i_?4WBJoc2rcxH4R|eb@Ylpf z!cis1JXaN-G%ww4aZkZk(#>i6Swfjy6`O!f+^M2&4|cnL`O*L^hPrL<()_tuB4S+0 zYf3-kQMzbn;jdqGp65&EM0Y8tFvLg}uy^~@rSf8#VZ>n(apzMMmT`oM)VF zw3+IR#`^kH47F&Qq0-Xq&WLstlQJWWbbU3YS(AHm1l@CA{A5eJL^oB5eb?<~I?e{K4QpZS@rIc`}V6!wU=#!x*R5GmrC zX66@GNDB8w4ytol#WxO@1D2igwn%TrXMiYXfWPowvR;}D0|2W5vZpdib~akx0~I&e z&1_@TLeTJh)s9L~rYc9rwO zj>_MLm1=86lgWHZC0m-&EgPSkd%##%UX2=y1}k<&@VZaBrq^c5dPhS!52keXNwu`r;t~SPvTM z&j?5Wq!jzoxHbd4gN@`iBilVU=~KrPAmFgzEr*p2H0T|zj+S0!z}*>SZK<{Kob5U1 z+eyc2vFyPx+O$8CpkTmyL+t4c^7rB=cZ9puf&^!Jw&3{zf!?Qwx=3F(b;6rJDWH#M zLY4QHr{}E3CEU}nIkps*t+G|t@=_EE{Uxi1I>rE`czaNCla*m}vmdo~l|YXb?Mu#q zUC`eig89tSUELWeC=}E+wl=qStKbTwd`1^d5$EeE14SRXr{zUBpa)wJp>D74SnspJ zVc+Xmmh7*~7$!VEKVGSp7LXC7WNrHnFPb*{kwbN>l_k1%?ryOnMeZW86`*Rf_ziaH zb6;FRDH5%O9GC*X^z1D6q}eH(111+aWFAAOS_h~Ef8uKmp$9nBmxC#ySMONEP5+l1 zO~QK`>Y>RV!Wu1ESH}zhyk&}l+iL&ow&H<8C+NrRS|VQm)?jdl=lWVUE;H~-fssvS^8)rDn~(L;JB?~1)=JFnun#;hJ!Jj2BOK<-?%co0>N;yj*~O5Kf}Ioz5v?FE z6AKMtyWioRdemFPf!X~y=`22@ z-G+V`UG}F~QJ1MAlT*H0`t-N;O27f_!Ebt7iD+07tIBj-HN!aZ2#*f)B9*fc3r*v& z`JsGGt6whdpqn&njVkU_uG6}6?y;7g2k%AF`^EN9ZuQ!AKc){@TE9)*Q|5@26Q=#@816=Tj^`M%BN2>+iFCwMSKx%Fp%}lJGb|DOsF01k^M-o+vO8c) zy@f&vR~zim$2xEn@^h`VrS%*+J(zwbH{c zG8F|#_kG^vRc_K$bn$X*N<6ee1oX zdxVf{y4=(?%o#vt&aVeRGv}=$Nj|L@lTs+RSNLcWaHc~tAg19`OjJ9+&jZ%RP=K|e zaPM8Z3`@4a> zH$N70VEhZe$~%Qz8#eaJ``wY|LcLb2-_yT%E&=4hNrg$asYP1Gq98W)~8|*evhhwtb8}AtgOgFjx9QUv40tm*V*iG z@LBY9s0%nYC9ntKH$S@yJMn0jc~@j|Y#ig-CEM4=jbg;xNC<0wXG~#kvIxM%rMHo3 z$Y~=BW@7Q8FVF16ER2n+Iwv^u)UyNQ*AnE@e9ncj}cCfg3!+tqOhh#JFJ zPmac4dX*CM&G*P5FVE2f5T97h{W1^~?qr)^0i-J=)l$st#IBpR@Bk2zjCCkl&+Mbg zySJpT`Qk#J&VRYz|Fb|DGil(4~}KXeGUugExtV!0cccvSij{(An_kW_a3%xhYzpR02gP*zXr6d-U|FHDAH?LI``Vmk$x|W zyQHeI6IqrE9Ol&YH#uXH-44HGWg=QA38B^p4O0}->@(MG^XO`VC!c6LYMeA%5oD5ltoRm5Mi8JrS zm%S^cRByWG5)8hNC8bX$0K4)JKincWM~(h{FIs7oP9wY%quTy5o2`YtL2=mB6jjK_ ze#=OL|GZmFDZlqk6xD<4IXb~9Z=S-t66*f#vJ}bz=)aXPbMXo%_z5Afo zw{a;zlR@0y`W;I9jGDvk7_V}Zz=dpuOPKzg4H^S zc?T8zt%7Pz^pXsKVe~7`0>BVG!e!B>Gp+dvOaG8F|KhSx&oWi6Nc{YJ1tN?u;ks4SPjN{VK8~9JcAlw9!stGif-qo$?2&yMt=Q ziIs8^k?3Yc2PSxO@v-xF@RJP~A20OM1bF=Ky+w0Z@$eyPtC#M0Zu&3AGy?)vN5Wqr zQ1FZ1_Q5Vju|5R+D#q}ewS8$4{k(^NTlQ52f#Yiec9A-Fv41~Y#&74xA}wZ?Tdppl zSvm-qJ-QG3@!8Q9;{zt~h0Zpqh$vh}~hI{U0auPdIrd-UX@r~#_a5eiHI{)}Xtu$(JL;=ZwknVO>g43QT*qM-SBHIcM z^g--H#*TTAvOI5xK19Hd7$kR%cy+6{)w_Cj4gN;GXH%i9WrU%DTE#70u$}0}*v8@Y z7fb60*tKG$D*Y?|e2DqYFmE48DZf5KcluyYZSIaBmU_wz6<7^7Yb$3XGyOHkUM39@om~ z4A!n}b@c^HSSJKKZoI46 zk)aK}n0sL%Y2T*rNVnt9Wcq3K($`_ zVrr#*2|iegZQGaO%hvI_$03OnmKF7D8REKx*@QB*wGI6#wXvM0U;r?CKRyC`bSM>) zu2Ce$DAu<=bV4m9To^k7^3@+USt3YCFCF-(#knvo-_&6XNjEa*jt%VbwI=7bGJYbu zMRBl>iZ^qDaCl0 zgYJK|e`nHiLo|i~zd&ITE`Q{y@U{?L6At$E)dvtVTmUYqcLVDKr8Y`@x2dBoSiqZ{ zdc0?5;L0=fY_51+UJtfLiw${z+f-~V!pW3XYJG<%Gp1tJnS{FG*kS&?HD3w6yi3K1C1Vcox@auk zI~>Hn$fzMM{CS!1`UsG-CA_jSCBo-%#DRJOV9@@vELKBWQ9ndh)oE01lIUtJ`}^@- z&rC6dsADh#F-1RVpHQnNUFj7W6w#t=Usj}L71j>rLagxcF0$7{4#>$`(`s#3P4ih= zlrFiEG?ozV%j&A07Nvt?f!uG4lE$am!C<#??*+WLQ=cH>DDBqAeuuGXDSPZ+SR?&Q z_FD=6>`oN^s$f3Y8#T~zM#DP+MiBTzm95j!w|Uvp#=1vj0@%N25t=DJ>b%Y~5n~46 zO$pAu^$7uBn05?dNwZ4T8jlh17`%`1Jiq#_qg*TdFFYWRI@%ali{r#V;OS3(7OQ3_ z>>Ben0h^VJb*J3{0NB##QPOLi6$c@Y-7{SItKq{fH&56kBdvwZ?q8$8CyE(4P=J&r z+FoC!dv9W~-as`e<#%Ph;$9DTL|a8gW66nMiGVEf{~V4qX^9^H+1-h$RJyEO77`60FoMv%APj^E!yM;tu zz1XzCahE%8lGR4oD_fqSr=13L7>fjz!OwFCw8!xVrz_W!errAsDyIHajzH{QedQ8; zMEG*MkIub$tg0e51IFvK*?}{ z8lR3eo6GK`*=-V<+)g02AA+IvG}NGG*YP;*M+B!oT3iQSqNKV!{q*uxhD?odz~M8( zN=Rl52BMfvq;-o7gTvTg3)TkyJnf4nsn&G-K!Oh*|0Qfx!^mc;af`L5ARvB_pz4b1DnlGbL6 znHUG5_vx{E`(hCqeo+;oNv*qZ0ljVxoOO(+NOdkL8c^BxLs2Lj?u*3fS1dthp26`2 zjlDY?T$*En$3g!VU|HewhfUWL*BTDJ#C8Qk6# zR+JyGu^Wn?{%z@@YZF%z!Q60o=i@Q}&s?T`E-iy{h4j)!T!X_+h*7+U-Fm|U>E-x_ z2>IsDzwj>G-Z{RPuffzu_w(fHsM|Z}C;9;agta4)QKf}!BF`GInS%}pTsLPnDBp++ zSsS%87L`u~q>t}4+)mT6wBzQD0%G_%rj3xm6*%H1Q4&AX!;tYL4CPedu=-pW!7vB`FkPbg9qsW2*63 z#&-<5_q1>uuPFpdU?yG>_wga8yFP**O|)=UXxv*INKTFBQ6$-T;HIBed}!ZH@Qr~A zH-_>`1e3WQm`wWt#}-}9<+?;Ml7}^^7tv}A;di5eeK-26RG&Hp4Dm>p@V_=6{?%{2FMfM>@sYta5&I6K6BnC`>oFjrKY z%*q_$t#Q+;OhzPuZNEXdhwdhK_)ACMNFK%+Y9A7g3iShgzKCllJc1L5bnOfE`nG@A zs*Z_G9f%F(meifBi9!9)xAZT&OdElz4efa8S7O^WoW*_qQqD$&{i7lK(7zvu8wg|z zh&k}R!)e+6m^nl!<2*w;w~4aegVpto-l_m}dder@B{)m2#L8zy90$Trtg=3`@)Z>T z19p%9x{9-s7~I@Thm`qdRie=PslpV}PSzH+X5w_@{nI#MV@L1vJI#1(hp4a>_PqIb zNAK#JKRF0=1>h%Vuni4!nxtEY`NKukL?l4+71UcJ4?HRMFL(kaFO<5QpSXZ?4y!{% z`^-h@jr0;1YD6HwmMI;;8-z2b9J$&wqt5dldEq#sdw4~m?LUcban zqa3~2Pfz;9NZ)KHdy!9sziqT8cz|get(e>7l~?^aWn*v4KOtx}sq@3iM{$64w*t8{ zU11&K(GAiIqRQEQ_7qUr1)7_`XDean+aaJov;ggrx| zj-gH@nb{^St4fv-eDOOfVhAHJiqI;dB!>zZ@64!+q$JI%*7=ket$+q$1xe;9Q^gJi zYyV?jbeeD^tSw)Q#;?VeWhSHJ6!?ht7+PE0ilR5~qkMRhom_IWaMdx2+sXU9L5o(KW>wBvSE7m+uo+qr_TYdL;|;T?8k z!gs;Tgh<*yeaP0~i90V1)swvQ5~_{j4q5$!g{M<$kCSpu((!XCq9mL-izsl5yVl-M zZq1t-+1C4k47IFLtch*1T%W;4w}MVeIQ5^s`(z?Fb(wsg=v6ONfX7Ao|24e-%#WoO zCYvA7-h6zzl5ewRG7o7k z5TiN*XA}a``av;F0sftMgWKn_{PZmDmQM4lDU#e@;*XKbmmg3MBARj6sD{gu&7%s7 zb7w3tpr&abJ_)K%a$|=(A-#|B@Pk16=XmqNHTef(=OF0HqY%m_O%0GpuS%LJaag58 zDp=((T*G7IM3xn+@7zmHNE%fk7#vAb$Hh`np%f81mPW!k9NuOd#frIJv%tUJ5!R}G zLO)97uypuwdE@TLMj=~hSk;z+^3~E|olmkULFVrU@aNq)AHQ;bkljAxo>qMKi~OsR zK+p`a&%;39q2xfwz~LgCsCrJ8Ie4`dFSGCvT6;YU0Te%wTY+hkO3Ro$ioBS+!4jNP z&VouTuX2LhP-JG3OvG>F6SCz1nZ)(r^p3&d(gO>)>>wj+-{#ef@sMJ_apB*B7Cr@>P#7t|M5Z2Rt_VoW+?e$|cw)KL)H?w* z@C}J-^2ASc4TckLp30B95LT-Tq(J>Xf_>=BH=_%3HX1ICu)}IoA z`4`!ST7f)W#QHX?&#oFeGYlus^50G4RT_kjh!W>7N!qo!BkxLk(+z@gEauLv?%dQ) z0DsGo3gLOX-S%O}A?bR9CGU+*%8oC_H}-|Gv)`DI?hKX?X4k%#E?~J)l7UGQ$Cm;^ z{AR%|5fx9@lHQ?bU1-vrKrgbqB{|th8Y@JEDEgMD3(I;UWjS*sT|Gw*Xy1*~|6=oq|bo>F%{VCMIzqLUc49rO1=1-g}Uz zf=Jtfohvmx(gAMUpLWZF+5*403^78{RSIxd*)tx{N^*}Y?BCdB$Ta{NZRpAy7(^{j zr4N6&#JH_BU)8{YWJ)IeOm0KVd8NF}Ek5*l#2`4ym7HIiYJBP^kud@1s`m3y4CS13 zG+zx;AG5;AnxP|b@`shl}gn)Bxzaj8iVLel}^`*r(zMTm&Q4a-+t0MvE7nrgnxvqIalvz$cDhauC>BP ztT?wTtMg+Dvcubzn18+h=eR(wZ&p>DwiwRHrDEcrb&GIxuaFX6s#b5#IT7>qqteQP zyFQ<4wQ+i9$BzMC{GYqWS4eWX?x2c>7Oob7AhMu#N|C>1I;`}x%s454f2bC8Gx13p zJ+5&c8zsxvyK)8O1d-`p_aU%0_kjV*8daJkzt2@_Z0AGGu0@jF_JaT_g>qmg3mV)G zp}iGb~=yM-EY|V(BVZqAGeEE+UWja^_cg0|5A_zaI zOd9yw_XRJ26rj}WodUJd7fzltOpRATc~!qJ3AaU~RHuQrXbvcT{L4)ZJd&j8h~#(y z=UDLr+`?i4bPOSgc0E1JrLy?h`H6?il>P5qRB8`2)PV1485HiUj|1gv8`Uj*HppY0^8gd2e(d*19klL>Gt?$bXP9&oR)in* z<`)3z8(;M_c0uVq5)+7FB^ApG_%JD19A6uRwhV3qJFvsxW(p4Ww>$X-{zEX~=%n)L z$u#ad9;8fakk}QP)mYW7Ti44euNxn*L3fERJk-rc>a;;zsmi8! zG7-LhemF4qs!*cgY1bGCR4e;5$KPVLo%mCc)1faYwY(;B3Q7<1EGdl`NlQK|s7`eJ zft(DTQXk5}8zSK&dp{x<>Wz9pQ0HYOr8B}!&S0>T$Efh|vMCj-xO^`k6Zg3kUX$rB zV7D^PX=X{*s~?k#gAll*Id5F8KR3Wr6|X?|9SGTBd6@#<_d#cr1Lmet-nmxflYNjv z?rT$5mo7Y)Qv?g%LnEib=pp2~`Pib}b^Kmx^@)QlAX0Y8YtlLSUcO+^a|>>u+>p@~ zrB^~>+s3KJo;GRDU)IXHQCaAit^IQDq@Vp%w8MRd%6ejN!ssXVk zqjC?n8S%kIsM)M$3Wmx{Lc1SF1xM5dVnen`d`Ft?DE=ufdD$m`?Qmp>R1Zjx!)ah> zfyW-e9o_Zm=Kqb3OwN^EJAgRozsWDlTsl+3ApbLNIDUJZDTj3QA8?p<#b*c0%K>=0Op&z^p;=}0Zcw`#@rK6C`_JClYW9AMa*{I1MKt{C$P=vh1af^%q)zS#U19GF@%s)cT0P*uqFeqxOYY#vJpYtY`hgQb%H?Dc_782r+#5EvWXL33)z>(>ea z1Q&Li@WYboMcRg!Ft$l1xn~~5Hm-}bPfsSImJ;k0#6+7BQrF*#`?jpjB&Gkc^3)xN zf{iNH%*L1qoQ3_9tV^O659g&Q`>Fg}CWCeoCzDTJyd0YMjLn~lBAH456_eG5b2&a# zEg`b1dm1BooTNDh6NQ+u=xj4TMbNl_OPnoXy45;6t~*6a`tj*PvUHpb2(s>Tu>9pd zuvYJB8fRrj;0`>wzwpR?LR{X8mtelY!P~m*GTLL9U?RkD>o*W`um}~f@ebqh?3}&* z&#|tGG37@!oKMaT5SSes0B;NlbzIDf7nwo{m}F2xZZe6fE!QDOy`3raW#S=zvBITS zo3A3dblbXxE*3Ns;L*745(mU8u zVdT2P=nVp}NRzJKzt!OQ(amQt$n9FV8-RuuwPf_E@nFW^oC*b^ z5|bcQpokq5$5NAqZF5ggr?C>R;-|Y)tmN*Gw3_h;$H3b4DnVzSj7srsBQ}b3TPB8gL{5_;K(>iDF`48VfsHi|tMQ z9&rH5t>H_Jc=)S%YRFoq1A_>u?3j$LI!MF%!Qj8re?rb#4{SOqj+PO&3x;NquL zv2|1tFy=30@HwSwp{5T8-N+y6HdYwR$(lpm9a5*`rdZcZU#+shOH}&E5b#adup<@)*iiE8IomE7_jZ3vONpcXETt$v?lD9nsNaDb z%yK(vePtGcJ<8LK5wZ2#-@rZN?3%vvN`&D}>kk$;1Jb`DTaArtZiPX7x8%V=7FJ_z zuiZ!dEI5~_-m!Q^a#E=&KH^rdl!dK7pDasPTv_(u^e;;BbN~TV#-|Ffj&=AP{h?lG z?6Jb+`uB^wfe=&&j6*1MmHpdp02VkrQUf>YQk3_zmnZqli>?jjxf* zg;=4JM0o(gg}E{Y=ZU3DHhguC`I#yeR;uzElCma+%+ z_O84!-wwm}hbDk^aa;SIT+vGTjVU$Ey4Ga4m-FP+=lCy1iE|pgPEota>mR|_xjDm0 zZ2^h$od?6P!yX4r$J?nfieDh6{NHaXdd@ieYIPy^ChxUuEJ8(S3797E)tnBzTxH3E z`>LU8WOr9!_wF5Ionpl*r_{WOanp=`_g8ZB;q%o}2tCLOi{ zPL0#bCtbM)dgebK(?~@bF`6|ZdM^t~e0Y8yGYR>qn)~=WDYM$jYe(`R%z%oE<;Cs0 zLn)_Y2el5|xu%uEzHMQ`mm$=a?JBYDMnyg_ME244FtEwU8poCvnt?%FviNs-Cz1%* zpnM)=h-&-Hk3iSbFq+jd`3zu>u{U$#UNl0ya@$rPgj}luc9L_=UW-JtyJ+>JcyK$# z>mEA?ZB@7VJ!6x^(LI^6Q{{^*v zG7-QB(&1vgHL?Olw9_||@-On>LS}$fW{PjLd8!_A$}Yl0%UF-@HhG78NJ!&2BNSe9 zFoORxOH!zY0(G9N$E~RcMNu)2G)lb8!S;*P%SuGCa7#n@7m+F~X@+<2CuhkoZ*}Q- z5off1a|3R~rI;q*BOzes*LUaS;?o^}IP`{)_2t1BNqMU82Ovm19O2ZkVQclU8YqUQ zzn4H7P0M^O&FCB5d813@ZV#P473^a(@zM*r^nX>p{b0aK> z!6MnyuHJArT+nka_2ouH8kI%sN0Hc1G(_RPRnRU!n5k)|fbk*x9PH3({_NLAJ;f&p zz^vtQ(<7gMk>WX`ob07#rrpHj z->_xT>s1YDS8G8$-*J{pZ^{h)&l?I2o7McA-K%W^de41(Dsj4@{1Ni}S(CAn> zc872VF@w?DRjo+}H?%xf`3!=C+^@3QT3-91Bz~dkgy{H&3-k*Ti)b~l z6c4%NigV>Dwxv_d(imgzmSvn!uE-X_?~B`cpuSjMp(xE4F)RAwO(GTI89M}zA^1VD ze6Azz4#*^A{=~?RcY+$;KpQ;^NKiQtFctk= z*K>*(qUEmP7{4yVk6f?6G509`|D}kA`fOVZ^ihVE)6oMuI!YZYLGY;w4i~7ho^UiP zNUpn9wkg%b4#`&@)HeD|!145@P1~40^4KL)@QlB~;2qUL-K8Sih|G*7=a%)N+*yPL ziTB|;-it;!6Hzfv%l|HtIS6^qI!~6wQzF9qb3Q;7kD}N*I-ld#;~to-?$C8gfsJiD zA%uJy3WzEjGskS3UhU(kPHF4cs%8~gI-j!IIT3?M9hTTB)47w z$TsXuHG35`)$Og@;QP1`BD!?Td3%B+=51AFRuKvf9{Piy2}cdkQS4 zu+?IAC?Q*!eO%bf`px;Vy{%>e2&9U+AD6KORkiC-|F_L9ieAI876QmMNW7#D$X(QaV20!G-eNc72j)Dg*gJ-)SM2Z zfEZ}|;i4vSE^jU4PJ!FO(Pm*z`EaM{!iZ5xkd4`Rh-sEw8l+r-b1S{iy{SmugqL+0 zzqx#rM##f>chLF0@CuS*P~*BV+d5Y=j>9hbw3V2k{L(lLI#OK;Q?|8WsE@^lQ@0(- zn4eI~L@n{ET1|)fFIWS_3-^yKFu@{$IvKh#UsX_QsU zvjXrGQZ*NRIFm?NuIGfak@yW$D=R>bp2kH*luMx}@6c2Yu^_cUo8l5;?@}l+#c~X> zOhH0{`Gj5uvQ>lQz6W|?yuwGfZU^~angc5T0nNkb7to6nL@YODi~YP2)Nd}-g@$A` z9y|#EtI%L?j@&5+05(0SFqqvt!gq|u4@^02H^nk3eQ8n6R__z z@@|8G8{;zbR0{p{t$ zN?A<1+Up*=cq6N2pBm}FnAuSCs?b;VSEX3JOe4mrZ{;o_P}w)3U3LaWW-QNyo2w>@ zN&)c$dqX-h-$Np7eF(&9ymw4GFxW2wzy8>obXV1|qCAVpkkwWFP|0duR$W>rUlAYbH3Xu2}J(QJptrP~5Dc{L^Gu1YUEWRrIR;xx;e-Ml zz76j6S&FMnTOjh6B3;r#%(dK2FNNKtnmg%qNv%cs&)O->+q}xur^dnxDBHT{I1gdW zTP9pFDq1i`Ke)q>i*`>`mxIgBZdy!Kj5|wPTq%p)$o8T5+(v!F?lQl%)AL$pI-MON zw(Cd#m-hvhFw5P#ke5ZoZ_53cYKX&37G^jkFyFok68%(}2`AYpVAM{eRRjZ~9nwFQ z;9g@Fh332+a5g+!u|E3e!2{LjeVMYQf@i+u2k-!aXZxm3&#Y4$cfNzl5ML!ij>mXa zLf$v9e~l;S4x1llO99gN;gi?L^#h+)@j7K3!p3R=00mW?Mg@rFY{$pgM}gsVta2bZa<{=WjX+D%pe9v)b@~x6IhfXz~sg?qbeu!PSSHiXP<=6jb4ZvD?9=t|K9A8oLGs zo2LC{FHI&q!$oq$Ga^3x4|eob81eI0V+Fd14pZd% zBU#)&N|cs;&sc4I2wGGp&8wJ;-tNGAvHyLcH`QWY#>)qn4#iSMcu6YjE{mg#gKFUZfjd%a(e9xf68S+hz@fL2L*7^S+MdNsdJ&msYu$Dq0Ki4e(=r;OSUx7ij|g zT}dFp>L1T0yqJ=atm>1lz>Si?HK7(S4c&EUBi4g83r7RpFq#5c8rTTk+lsWq!m(X3i z+919GPpV7iX4I%MEurL0Ta}8tVon{2x1cT#p)sBK*PsMVefW`JjoP8ti)Dt~H1P!* z)?$j!J_rjS8Z$vnnk~kJK>EMSiLZwdDklMaDzr0s*5M=xWsVBzke2rxxUaAD7482x z`6+M_%8$@gT9Kt|mDcMK#i$T8kjqB%J=c6>3l9j2Sp+u<@$u+?e8Cp;BF}h#EoypZ+aZEZr4t3Si*1HQ2xe$CLp*grg%3C&5%Ad#fTA2nAgctKr2@j2fTSGQHIWvK%JqI zQ3|;E>nNNoW0diXEfY724A~-`e%bd^Pe6O7c`J>BDf@{EWQ?lO;nF_|`S6r(kx?T) zB`w}Kw%&O=^KakK<~1vsZbAI}Lp8Ha=I59gKgS9{EbgSc;>i_n%D!T{IEMLPUTZ?U z?`;6^lh{jJAQ3by{A8xAt~UL}f{nh0$xK_5RX2bi=A{fFP;aHSRJR1Hp2>l}FP}Nt za8)gA$!tcsY47n)-T?vD#NCVaeff81%}}DaeW6Kj4l#<&E4Jc$OtL`1Y*OR zYaDkh`1a)$T`KzNj_AheH-gdY8qMe^-{kkNX&|gqtUwsz$Tnxfrs}zbZYuPQe16hT zqXs?4G&$CdflRegTV8X^5GkxMQ^c9Fe+IW)9&B^RxkHJUusxIPSsHYU+uxFD%Afrx zJYNMRiIz_hnRN^{>^FsWsx-t_TSc^JS4=66W+XcS?{aGFXewcs+f+oc>^72I80?Ca z+J{XRV{GJJ1Whf@VW)R_Q#kAo`z^U{3-MB$Ehx(V>R4m4S#<)l$;7l>g)fU3>mxwS zm^5`N114+!j zf_G6>#$VK&mz>o1+knDC83ldk&Ln~8k4%((J~-MD6Ze=t6WBlV=!-3Jj~Ux0eeBNw z5&6B^b8R03Ts`+3hY6;b^%HZ#WJ%4*j0}5=Ond~?k;NzjE=EZA6H^cDII%@3lm?e24LJ%`&ae(bwh63vZot4edHy0brJ&3?FdAALA`+BP_D7<8;t|~C~zqq zAPH)F1~S3)dPS?&U^;}9^~^x#jVOxRte=dFnr1u+(JS!A*K8g6Dt11IqPA)M=8QmNC37$;A7ml>wrx6h-7Z~N}nwd+o z!5I3bDD?-IXBi#52PGV=l>t}txfM6ov7%7ohcujrc6l#iEkW!QdjDx#M101Ieh&?y zWnP6SN;*jPcSz1X=1(OL!!hSF!N8QS30|l3wsV`54ZaWcDr<-5RgKUufryU#2y zMYjC0E2u7xhK!O1^IP@4*kTvz4d+&6#kP9d;+cCNFC*!(2okCm8>85mYT8A2NP;~D z7YR61>qM346jfL(I9d-;_ODZ1m~U$KGN42#i3sHz(|(7QDr88Pvh{`tFkm0Y#562u#Od2tL7kDrG>*LeRla z{0WGXIZx5ly2auL>=cBBmeM>vK5gP`7q*NlzXhKqky6DdIk%jTeC}##Km|+bwIdG2 zX<(I%Gy8E;<>YkLzen{f@9rJt>^FyPI>CbKv~xLg`qeB@#U~DRp^0E_2rzgKK<){; zI^h#|YS}e?oGY9s_ps)ywO{$3)*ZTtjnr=L52Nq#R2@l1N7Aiy?f4JKDJjD!uCGx$ z6lFw$nUZN>RvXhz05&xwW{jGJl0k;Tb`*lUPS`K>aF zmo8DjyBbl{oTF>!n#GlIW1(~_cpOwxhW#~FC%<$mp^$3fqU^=M0=8{00`aRmCV`-$ zOPq~L3$Ev@)QIn{g^(ffsnjg^Dl^oipIz-~0Wq*zjg#^PCN-L^&?mA9m12NVS*K6? z78N8xj;ZPfSs=k(*#>$y!vY10uGP%$h%VM<+}PM@1yvO%@H`Uyf=wZWbN51px9#9n z=(1ezMI8KnM|RA8ySW|aeOo8XGR{VF2P2dG z@|9vLz7q@*Sk2K>b;~qB!Bk8>4Sg@BKMNtZVt*y-Ur{p%3Mfuz_9R(9m@mN@U!*H? z3F%`nOD$fB=>g^RHD7>h$jgwmxrD=Q?o?snG`KoT2 zqC(@<%AcAiYjR(Bfb~3kO3R8?`&r^@j|5yu#3HlgGc3hDxv=#Fbd})vC~xJyhep67 z55++@q$iF#&rzgj$hq(iP;z(q8gJ^}EXfEQdwTKa@G<9_iGs{+@x7>y6|L9kQ#5dY zg(s@7_MAF2$XNFmKq7;~jqzx~e>cir1^vwphfjDG)=ZD1J*Y$X>5%937sEWEDD$Ar z0S@S9&p%xEL|Y33!7PocktNW0qDQ%k^N3Qkl>Z1nN@?I^VV)ft7>UHv1#U$PoL4F; z(qo8p)6Qb3y@#u{?&lu`YOgdz*2I1(Qx=nDf=BwK2K`C`jESW#uyRZ}|2T{D1$NWd zcv*1POS#tN8tcnGJO^Qt($!Ah-Ydi)ty8mnPGXpEk;+gzXA95N;P1G|C-%68uyC5_tL226&wx3)FBTwI+lCc*o9-u<8|Pr5>!>64+70jw5t_s< zAXl_&*PSmP3?182GwgM#edZnAx-)<2pc?~M4OorLmp@t?TW@hR9qQcGqAfR9@NI^=Ej@* zZ)_WUN9CdmCkSFuZ8as6rF*~m+)(oCQy$G4P2*ZT&#e;zGJfvU&A>Z`X6qb- z_EQ~%spPcBzwIH1l$PB*>ofD>za~mIdu-#q>h9jL~6%zsK z%#sxAH?VfMH%D?(@DsI&%*tm}C&@KA+mQCZLZ?#bDkVq(lWDf|2o$x#Wp9a7P}_v> z4!ei`Qe$|sSvx6Tt#sXrH+EzMQ3ii1D82S_Il!T0yG3N0>L+B9g#$ZYXbh?}|2|8L z03O2~wNb2f?)9k4R+yrJR<2*iB5>NDmf)u=#%+USiJC(SG9IS^N1r=*M_ z%ixDa5te(8D#xbFbm;}kk#+JbXF4UxaJ;)=jhVX=ZXOk90u3owY(TU9ZG7_Nd*P5k zb$eJqwv|JZBhm=SBa`I3irqjmkX^?03f=J>@jXihchF=Nhg`r|_Btk0vKYqA+XT*M z)#7{K(xAxTW%zlVQ4409TK|^ehihu;wQ0m)EIVDwndX`yo0F>fSrdp;%pHj*_5p5oW5=u{S}mrIJx(KOiSa z4mmalC?LL;7{x>{g0znvN>qp8%tYsfIlTQh!VQg5@N`Eep%f#6LJVz9k-ZibL$7=x znU?U_c>X^|v7T{>NJZVDf3geXMR@&DR2(h zjQM1rN*THz_J>POaJdJBYRBS+=YG2vN1t0kZHUP_p3e~M`A{8Lv429e8)T;!K)V#x z5#Z@d5uQ+Z`Mslt?R(JKK`~sdjiV*b>rmG`I9w^NZsnX$<0~Ib@&j*_uNlow2*Lfl zX(QIzy%dCPXS(}xSV=D88t*l@t47#l;}THDyO9}5MMYH;2e>c zCy@R8jOBczBT=4&NV8M6E&+`Irqqz4I71BnV z5rXc{9KR~9Z|(*&rVl?O1UkAYC*c&OxpQ~W;nhA|se)55(MVYJPV))WVD|>+RVi8# z4R(WnEfRJ-GzP(HY+gZRbXpBKK!{waPlw0whfKuKorQa~P5^WwzrvP?@I$-e9+3{J z+Q?`)Tacf3S@c=bPE{jda@^NzYQTDmfMs>Hw;Jbk{(rKQ)rmB0q8maSCFv?E_TO(K z*3B^4Cx3svdxZ)we&-&yC}FA}#M>S+apfd%JPi*^gg2#v;N{qP|b=_-p1KD=pKkq%a5I>**viEq4she@MZPGK}`#VA!Yt z`fjkX^>|J@UebZ+zAgJ?MztW{#{?A04+!w^Chm3I6d2Z872Ha6A4yp#~Q0 zS{g1nqyI9E@*DUgPMDYrEGc@Q!!Rysf)LH@_*(?X!|KwfLJ_y^L5%%+pR`zLMr)*K zw1i++5yEfoe6DALS>V7)%9HA*%xKerxH-T+O)&1e&ExcQiZ25O{q&J62D2bq3MzV& zu$+Nis;cN>~f_@2-BzK8DCsp8E%q*IMuq$f^o1WRXi_ z4hL=Vb@?I|E%Sk$bf{_aGGpbQQYl4`4kWnk@+pE)+I^RcKZY1zp-zKeG30aK-PAG} zCpjA$MFqJ8W3qA3H795`0wtOV7}K|T5qDJ3nk#JwqBtv!KwQCfEXPq~|7>o0I;FM^ zni;ICz#M(viSMhjf#yE42|D=~?R81YvLpYgLK=8Y6&|DoS87a-(fLgv%biIWm9}Vj zPTGOf;PR z>6~{HyxG8=ReNWQ(-ObrDU~ceKp=htMOCA_<ppKT0%zxZ67{jXK3KEd55V@5D6kN{>rWR`621M;9q55dLvO=WCi_ z0Ul~8Yrb3!<)VH>rRE8$Rr$*jK_*k{@KVxuEQSVan;QGa3O4L*{({b)2*`GvZz`$S zu>@uAb$d-hxgwm(HQ#Z4j2kb>j%LrK(X7n|VedVRI>qYpGsNzuZAk=|oH-$vKuDb0 zD7l@H8?A0Xqe#@h4nl}T)ou&$x(pw)m%&+q;w*@J`q_k(un)_Ak*AU#iiIwA#S#nU zs>SW!rO!sqrr1g;SKhSJQnj7LCw(7WG7n*|JoKu5&i7n`%MaF74wz}07esqA%&I!o zuo!%|klV5bd+3lN+zMU*rJuO1(;(9rz01AIw-6ylMWC~0sDPhvhK z!x>PvvlaQjN7~FpkxSWfjb|F*U(YB8eA-fZTN)<8O=V;ZnR{Xg-D;sA2i|*o2H}*T z=i)8XF$K|PHS$oHC-eSS!tL~o&0K&RlK#$AF*DH(0nQ=bn?VB+3V!zIVDq41%@HOZ z;ogDMSDVyf?lRuJYdNo8^nKnG6tMjUJ2$>r1Hy z&Twc}l)hk&Dr?iG*OoFEKKx0z{qfEbwwqS12;33}-|A5frEs%fPiEoi!hU9Vx&cVE0Ejlapu{z4}8&Hn~y>G@w_Z+JZc z6Y*0X(IkOdD#&EVJSao;#dplDp_Mp~u;XqIM+P60wzxX{hkppGuTP98X%-~huqS$g z%rtDWlDlQLCX-_L@HAy|8kgUVh@Hms*BFi|mlx8fNN2qe2I8PwiAxUH;Gg36DH{2G z4H#!2xm2uQymy2A|h&pvWTyV+KzVAonsFvJ98&`=(we4%a+hi7LmZD)?m|$y=SM zEfWQ#g5MTI@6Dh*D*cw7QO5Ih#JvcUIg3h|6^C9O=hQztFd?n?@1w|l1n_W5YusT( z5H2!M;Lw7vaf~jnS^_N}I&wmrCIwYsFA$`Tn&4+y6=J&cvBk?z zrF8L2KNO@SmN7;8*{oz|sqb-pzj@rwZ!Ui#8U6aAU=`O>F+D>8%jKxP(G?5 z0-1{w1Kno%TanT8J>FW3tYWQ6_DEDKK}`_Mb__yX%ASM=rLT~>8{GoR&h{gbfEFt3 z`b|OH)WwIYdGW`QoY!5ItBO_RqYlCKRym{Bz!(GWpg1e`cl`}7P8i2YJhv?CixXqdc!mmJ)YnwEQ67c(1s8f<6)v*~DMwO1*oAU|acI<{|%hsvA zety6JKl8U6kQrPL8^qP)DYcbt1KqE$w)6VhUKPy@B%!#50$k)grvYfxENqEi?*zMh z&iql=sNe5c{IEuZ9FAV50`s7+6(jg_tIr63q`YOV?*2R9GCNi8jvI}C!TUTc;wQ8xp^0%9UC5np2PufCFFM5XpKZ#NNQjiJ}o|ER`Vw|WcsvW>gNmZ5{ zmg_*OuOd2Un);i-FUPvF@gNzFiK~){ zzM{@eCbTv5j5878=u;FBJxsk!NmAV{9vy~BP(SI)EwZMG-IgVJW`0F2EJFjI)?*qZUCZ5DpiMz z)PL2Zig9T=D28O*9Vr3 zb%6?33P@l-?}x<^a6rNF^7iXZ++Lfw&**io?c?E+tm~_E_Pl)O#8!R~H|_@dkQvEd zR37`fEn*`#E*_&(-SJhRk=@Ll=m>Y#5)@- z!%mU2>COnJT&yxGb{aDmUp}4iN=;t=ySjX_kfCK40DBL-hkdd5QnnD>q1aBV_Q&}< zNO%YHXTdo$4hE0p^~j2^;7+9h3uNF{YayZzu5fjON> zjC`f9qOn@km6xh~!%5Wi)T6a`IKZ19M!86L90J?74sMW+?>pXqZwpy54o$7Zi7wqB zct}?0*Lf~g`xzaku+fZ2SNw4d8r$OV>tZuhuD4Fc{BIKlh6pnU5=yF8bXJN-3Dgrml>UpX$xkMbJHBE12gxZV5c*HnRvQKR& zH?CS9;N($I{1CI&+d*h^-!FdHm&)3*8Dk!}R60b^4N+y&^;hjzyri%8L7=E`C8)|r z-EC2=BlyBizx++yKR9w0`Ys9^?o18T6U+wYgm>!E1@XPl{?1copXFh46X|SKSkH^A zNs&cS2rXD_J({*(ERC>Mo~rpDeGv|G5czxD3U z^+72o$w_+o7j<)E$xmfi!QCNgx!r)7-neS(NNwT&&~;8R!tn5y9^1BU+qP}nwr$(C zZQHhI-m%U7^51OsVzXCG+N&nNHf>MOd2sWU>TmohmU^>2gzF48fj&hQT~rp3V_y%% z0&E{CoszSPcDxY!w-R3Wy5gmW=Kf2j{xiF<%j{Uo=+N-0t@gbPZe3lv(v~g`EUC8? z5mjZy8xTHE2G%k&B};K%VV|8DEjk~Kh; zDRSmW&l4TOsJ*obsj~fy77(um--D4>q86I0a*2o^P8Uqq5R9xN>O1lNZ@;L0CDW4I zR97sWM7SVA#~519GgTR=R<{a^sWQ6Po~DEPx=DZUBoA0>gkmj5Nzm=Ec7zzxwfp$f z>f!C**LydX|7$-Ui9{liNF)-8um{m^P_`Zb0Q3hyvyaj0T^+enX^nY_F1X63GoFq- zY#&C_uRT|x=jVQQAO(iF@0`y0S-{a7pIR3@2v97YNRF6UI1IkVxw#261&&x@L@7mZ z_#<4GFl*!&`7wfN@P^8Adtl{xQV;}EO!vvhhMTUugiN!4gplPWCsNXD2x)JsGsElz zygHI=%fbp|RoU)v+tD*ENv?u37)o9UCdCh|Tggf*5l4P#wmL1-RxA_L*_$295&?`l zLhgtbs~QF%WGAHdamQ%sQkdQG1sC@zxWZ=?6H$>rG5AW;EaJ&LmZwt(b-#$m8&Xan zJDq3q-4a)pq?Nl0>KNL#@(Qc(iH-_ZN@tm}J8?wY`n5@lPg%ZWTu&^2Ly@g~P1s&) zL!TgdT_Y{fyPXHCBy%me@o*ulIS!_$h%)FIl+;Gg-yY$1jOD)lLwV7}9`;1(h3A@N<$M!k)Quvbh?KZ7{5Au_Os# z?SGQ5kwtF(qNVX{ z&G5P3E0LN4`|DiJAH`_D=w4Mnm z6@+w1sN2YSxL-tm;h{foOh1a21lf3WTk~ttv$>UvN<0>F@;bC0*^#_bf}W6l(s`bh#-8e^*V7*r*H%BkD8pLg-%5x>-j5Z%Pb6VA$#hz1lIZ`D?#h= z3M+{~xfZe`h~jG8xCcle7Zl*&BCj0uM*Pt>H3@T5;51rWC?Y8iac{fiK|?+2PZNLv zR;LrfgGS+`?0}*{mg(>OfxJ`WdcV%uaO(N^@TdAdsTLAkz|jy0z^RIUWYLS=_xr|X zHBMx-@F0U06qh~I<)SQIrK~2Kv8G4pMmqS~%j}&tjF%Us=fD+H%q1F>A|%tQp2XK8 zd;e4NbI57|SWjU3^0K`@avYJ7hGb5ATbh3up08@phGm;X&+Av>peqnl-W{&kKE5$I4WZNJkE{k=t78)p>Gi}i8!(RH5S%!ck3|%vnLQZMQJ&^<_s_^}m**R1E|_+GElWQAHj}o``&QYgc_3!_aa}$ecN~0=N}m2$8z_2wiS)AQDK{^ zwnI96xSkcRamVQs%6?f%HjSy%Ky2xBXm3Ef&>TjhlYyTYx`lRhmr4@L-S6~@n7$GY zJuMg8b^cHMpd%N(Ho`zSm!IuiR1|~54k&w+Z=V1zT>+?}nlJKq1nS3I{Gy^emnUNmX`LQM(TLCidrnpGdPt@i?B35K9SX(C2rlg*-{8H>O(io_BZ<5d6aY%L6vR& z^3Np%L|0P@;!lH3YUg#j(d-(y^2g@^06wUgRm=yE__(-M$?Iz~I?$ND@H2w^?Kzcc zzi*&sa!M@dyM||cH9-+T+-!#{>UgxfLBl#L_7NTDq$}QSR=m_95pVY>1<8*KOXGwd zCm_@U0i0rIE{x05py><4Axsj_8fD7Ibb-HWu}rgT^g@j(-#m&sO_~ildcg9>xjnmS z;Q(oG@U#vpLbEmR;!En_kO^S*f4IQimnI5V$YD9xfD-FRtXYJ^reV+@bG7_yhPh5J zme;Avq=yo+M3Mroq9nTwkY;GB^z_}*of0p-|G48quQ=OrRcN%PkLU5xBrXR>A3{Bn zni8<0N{BP>uDUbpOtQr~prdnq#q9C^{vPIVIA>MM{75{eiqKe-$?cO7dLO3yA=wne zU0zpT_1Mpo{MvsSjVasCsnsXP^6%Avoy zD%Ic(qN~o^nA_El$IdCB_y%lL!n(6>XR%4cPsMEsRcuW4fd!nD|07-VEUN|5TXVib znj21IFuC7T2H+qCl6RC@!g&?Pw|L??jRS}4;9cx7jn|#MYE%YL_>fhSh*Y zyY+~ndqdjfOt2jm7*n4ZG)3KNg?^NsFBhhJgHV$kJr+TJ$@9#4gDbSk2UiL?xvgNDP24J?8^K9zvCO-! zZ7S0|Wf~-)5~1jfR`CMnUd)YOtH*ilEoa;j=AowpV&YCR=el3pYqGV|J(+8HsVW}`Y2(< zk1CJJ;4bhZTR5bkGFT#zP+lt}J!UBI$PYTY%g{e9A~BDaB_1CX+lAI{2{}*vUT6?K zj!=maE%K8gJ14vtU}uCv;fz%Y7k4@%#@{_osm(2?`|q6#lXhj06j&?dP=vg5`@=)T z)ona;Yl@)LVEH&$=)3n+)qiA(A`%jN0zMLFa<9o+6TE(`Z;rm%&Jd6oC~#rh@dP0) z>uL%n%=a#a9L;?fV$FT#8-z^oE~=g&k-ede*ts6qm!ABsCv=I%V>%X0fUs0)IUnYD z;0?$mY%b2|m8x!B#wH&0vOLwatH*gSr6>xG5=?C$itW={JtJD@-up}&8M#$ZnO=;i zR{T4*C5gcghGNT(K8@v?(R;=dwQK5h^aBng>go3u) zO!`xF_vY%IJsCO)*)XzngnVtXzkLwrjrnz&VmoEGX2-t*R`ugwVYCF{{q&6MgUI+9 zE`WLzE&1|UuLmUnw25})jUV`x*De(!a^bdzT#6Ld5rgj6&?>PQ$@o+t;)?UjkQT1s zXR;jc*1&j(a^eo$(_QlKyx3Z$QKC2+EdDbWVbV|*#}r=5FM1usCu|{9d!0;2fs?JT zc*?B91$S&V_j}Ktk-seaA9B0)%&YpEleKz~VmGMerAMZ?&DP3;!C0!wJiYg&`zz5j zR!{hOUu)&L$rR6kK3oM2|5S=<_Q;=isd-E^x5gp=I9%^f)I3Hwsmh*QYs2dfk9Gfn z+H?(u+GDvOuHPU-A;QYrnVh~R1n-%?_1ZU`X)Up(#NM5^O}`O`_*kHoONJtV`zaVp z;5=3HGw5$gd>H{d8xZS;jl)`&TP2-x@8wM6S-7 zj6ikeh$tKB^c>TPfWFE9ML!3C3|xd{PihwC=U6w-fHL-oVI^F%dSx+j#LGLE77lya zYE?dP9Y+oj#WWZS86BF9fWJ#QV`0I7l}_y>VNf?%pH9DqD%5VyGV7Bj*kxWuS=Do0 z&tJq98nhv6*&(q#5{l*U44#3>xptEPWiL#`bT-saN;xSfWRFdO9C|QYDCCeuje*CR5oFigZ;Fy;Xc z_Wc8%Dbg2mm7&tQIO)Z&Ku)ELU z8A{63ksA!ie;hr?UFL{>J+!OytTUa$VgGQ$)2{m-X<$lrYA)bry+XiqnQ7@-bxqG& z=eJ_q{t{-h#$xG!6}${c=i}}8hVeN&46`8&l++1uwS@aBC}rKhgExr?6VoKdh2SoM zEJOQUoZ747D9EgBCrrg9;8l=_41app#B;TH`Z=?xEo zPrsv$2j(;-%fj55ROM^m{bLYuY_a9)-H+N#>QvOQU^DT0bzG~P^kuHZiP6PK3eha> z6}9js=g8v0sCYPC9~;aeEn?Cb0uSUrRTy-%!?HYsT5vC4- zI2Vp(6;hgumo|vbVDET!k$EAcVWnb%tb;@5dZ=A6NVgAV#cbC+5xiMI+t)(RC!Yn9 zR>#pzEm#@Wj=dEL8m>au9qrc_aAnC@5OlWIMtF`|*)`8({yWeUfE z$uKH9MV{`@t9ALj<0VO|ixA|xuitfmNo?e$G^vR_>!Qa<=#f4loQ?1 z#@96M#%B0oJ~(t4!pBV9z7$}R+A3^eQCp?J&Zt1EljjB1QbSTyG2{+u`#DSRT(Ff^ zS0$K2E1h-2o_h8o?&x0!+grf`O&s|@YaX}3N%>Drc$GdlQ6ixY*r#LHpnI+npxc6Q zT`Q1d48-wdkTqpF2gOO0F`^DpD41_1qiAM*N=4z~*1N!EyWKdIz4rAZnC1mN-#p&f z2D!ZLb(DOoAqel-HcNP9b%}fn;j{plrCP72q?-20-h^&k1d^V!+Nxd8^3nx+m0lM9 z2f}=QEuqVPWkUKtupzRLkC8DB|JiExHEK3inWQYC)WdymmP{4Jn zyu*b^nq9N1sP)}ehf9sGL_SB1K;b9wNJg}tm{Q}E~W~OXEul+OKkQp^>gQ^;wY~K+4 z&2O2S3U>=Q1e;J})nlWvYhMJA$(>bL&GAK@81F}0(hJQfYcSA>jzYgWbbYrdgTx{$ zG{RiDNarR?w+mCS;YuaQ0QPPVL=9ew6mrVefaZWK-l&A{zbhc`3+t+sVMfKE+|4MC zTpF6uNIU|fL@PN|?ajyO8JAa&7$-bShORr>k1yb=A^K*TRWgi}2$LNae&%=>_D zALqZb)F{84vvRwofsuI!4_^j>gSkZ4akauJE^6i`H@Ov%K7aGG{?mG)J%JfL^%$4M z_%#xYeJvOQ@VJF>^0i68Epz-aE*ITi&PAB{N2?ZMp!O)P2?+t|q%ix#OQXHMHIV5R zIB~H&P*fD?gzsxLl(TU|8m z`7-CTRp<+;l0prv={|61zSKIh-E+Z6AS+>wu-vy$e%Q6a9Vulef}h5E!vpiUFlLf# zeB7yn>&?E|{ILfJ`lKZ(>5)E<5VzZuSnKSI)v)<`Rv*LG{HuKZ>vcXC$Ky?MNaxyr zQPU8z(ose*mpC04NU~7gf*Pvmn zB+!~Y_y6AKdZpT0Ash%;QyP`zk~~1tF89@6N!qw!VzXx#$;M`rCVM~=@yq4_ZVl7f z7-kR}hK*22CdV~-c5|7x@kC{}x8;HuIraC1W|o8MYuPC_o9`w2y(`8qm$28rg9_s% zjvK?!ksoIMU|pCP(EF5W4k45SRdMNPo${B*;xc73%dxExYB(rr+1Cz^a%SZS(N0O1 zT?0e4LpZ_s744F0${O6$vff@Y(mnJ&=;}2A)LY3xQ>^)3(1Rn6;n+&QagK>o1DX9= zJwMK_ABWSy9Ijz0UL3guJ8&#LAjj?of~jd-8!5Ib-Oznc+I6+KZBDt!BfxP`RlB&( z8Aq6?<;WKUp4qq(GW(Y;3Hm7N2oWwNt<-BgRQ8dYOBROrGn)a@!VFnn#Ku1Lf_Ng& z=>40)Hq!V|Z&fai-VC>suz8zz0&L;b8#SIFd-`gmqkDqhvsAhcM~=p|lc;uy9?uV( zJcYD)Q>|+kpbWIN`7@7%zMh3RbxQx<1xX+u!VM3%evznRlbPns{BG*{y0NCF$nAn4 zy_7)V3^$319*%{_c6MMPu82HPH!-V-v4%)cvu74bTPoDMsCF= z5B?!ovu|CqY6!RO#6PBu;Z3*mhUjKDxKFt*{rWC;c8bWj#hKF;U1mLPcFv4+=P?z{ z)>pb}Q@(*F%R!@<1KG=tL)YgkV7|{n9)A4~fQU#vx}waq|GABaE(G&|8PGj@2^gJL z3cC-QGR$JSO{*sZ>N}mat1IDpsr}`6@xBh25Wq}PZ;9hh+9h&RRo?Snm!P`I7s2-p z1>nHf1fPN88j!yCbf0ox4@kmRWk-Aw2HEIBuu6+LUi6~c)RYtR|BoLco!$q${hRpU26{(DSNrBAD%l?I(2r>6qckWMxG#Q@-v+QlkCf{r6 z1+;ct3j}vISCBCmQ`Z%2DqY(tC=3Mu2(QXdgh?{MfrVxdLI9-B3aYt4dUIVJ3)#Jz^+>xo6$N}$i zyh;bGMaK6;;}3Vui{uNx#M)r%kmy^Sd|b{R1;;-<4-cT(a1rdl+TxM>=@z?XpXZr_fEtu7b%bl{>x5k}e_6@;|g z{l%alv2I&w4Rl0FNV#ctIkaSZBs0YvTa2BeGy%r=5eAY~3 z{q*khP64*=PT%|J5h#;-UN!mNv?>PT;IvYRmpR;l= zxJXsj$tI+9w}8qtX5|AVeMc!ThSE@KijKkBcrUgSC1H7B0?_&Ru3t~-DT0AvkFF~W zixS}av<%|x4aClb`HWs^T|v%_nxxB+v*jwrlMph5@|d`Egk)MaL2#^8`kh+*QRPb^ zJyH6&pcQ87@HYs;kbPoOm+N8%ZG}|DUV$9*iyX@dn-$^p@RYME^{I1Y`FHmnXCbe3ls;W~PV8#(M z$b?`?`sD)LH%z$%Vt9Uq05EY(ll#9!R|@a{GL68Y2(45Qj?K#0soL0lgCqOy+Ab2- zCq^9$Cs3(&(?2{`UeK5HEfQmU%O01$h;_V-r!a{U5RfWs;_QYOI;f92ol}Legqftj zum~g(rQ)Tk&kp5OoWK>d9&cR*X@fZ|%y8-C7Z<(}TWe)*W+k-Egiu1F7Bp)d4mpsP zA4;UX!j6;y1~pog5B4@vMgNN-xPyzN6$KY0AHl~cX$4%TmK)&SxnmsD+FE z1`IbJ1+~fRGGJTTbl^LgdU+Au%f?on!;l~|H(t_<-$wB^_&b6T$zsfcm7-p1NUaRW zqN7x4;-;M;W^+r@?5_+ldqybSOH0}c@$ooT%pKw0!v*f}q+Ds7PjlQfl*s;NS?cl* zgUbUPOJ}pSTKvqEwC`b$|3Poo)!I?oi;?NRu$a4~pJ=|8`=+vGUQo(ue6e{;@J1jElVQa_b>=%cLf22~lS9GtLeIKe_^=lqUkBRqG1UnE2Y zW8W%S=H4uYM(!ARb#zvS{YdrvvacIy9HAJB9jtcGozD?*x8hf(LI(73oHA!qx?Vb# zSUi5b^x8#gr^SQz!0~7ID<<*~qVU->p`U3usJ=}n$g1qcFFB8`^+l$1)qdhm@Hj*2 z!KvO-Tep8|7MrKAOMc6~0?neE`SfI6tlZV%764YA3VM~dYtA)^NzJV`+<29LEHD!C zIx^70d@XwO@mS0X9svSFENdh=GFL$*_1M%sG#$1WB_DK+Gf!5G2QIg2+9@a;?@Gt0 z`RWGxbf<&s06PlvR^rB5#?!oBQxH^rnXv=@>+-ySPvE7b2?OX_IL((JyI;=W=7A?*PU0YfGaSpgvAx@%6z*S6y zYkpMrLKU`c*p+<%gdNzTUAI2i0{`!DYS{wnqtt4k20E0$8_gK|Z{q#%=~_}M+QD6r z`JBbhUraQ+!lW&=c?8WEt+3A-VUvyF5F0ir66wpAk#kIu)}I5K5>X`nC6Iu;k!2U3 zRYY}`WllJyN2qE4#^8rnz=K4Bj?XY&Z$fOMR^faUh?^M+A1jhMolxF=lf@YUcLU-TgYe%u^s|L{=LVrQHGrM4rh8!H;G~tg;8uiSr32B$STUk zw}4UsR-1F94()~-Gkayr>O`>WhS1=s8x!>9I}tKm0IsO_0^7xCz@lW4!$B~Od}fmC zzUHqSTM$^P+WvR2NhnMJBvJX94dc5;yk8G&f`tFO;4p^6xQ)uniOC2`u9BuuSehFI z`=b#$aagod?eR#eIiE0jBM$&_?=)?n^MzH8qq5PVkwWGJjy~ zX&g-fR94t@OqplpHXDP7q*tR7RyBCxJ`MBn|4JsT0v^D|%sKHW#PeBB$DCRhhP)7kC%-=L$gxo=x@??sCLohq zw)%&Z^urlcoWh@jIZvOodS%yZTiwzKoYie}|2v#~y7>5gJ^PD+;NbNwSNk8`raYQt zBKRH@{V{Ws`;pijb6UneoXK`LY55~w^HYa^z>9o%o@LqY8~TdmAAfQPlVF_K(Y*Rh ze49mdEM4!Yma6O2k3Q|8%k#X4)r2Yuh!-{SDhz9ktL_|7WA5JOHu!uK99hKA2Z{ms zn|2)Qo>@ngx`=h@Af{|jF0rJAS&&Z1XaGF%Adq*}R%1@xpP**KT203FV(-R4M;Rh6 zyT$FLKJtYuRPH+lUW(s3EgK5&d#G;UtRGU_==*AutqU_@*47F^hVEDMUHp2``WpKM zaNCIH@_$*gTXgs1j))jE0uu~e<{EBDL;y$pu~%i3=j}4Y6t;x!fk2}>Bk!*dBFG5I zdA~*0CQ+U~|5Gm(40(XtRcx(1aE2R#M zF>7r-|V%B z`D^PYl_FQSE}-PH>~&7ikpEI&w6eU->W?MlnK>i*Et8HCssC;l@IT9_m`4k`;X-HZ z;YR-{^ieo|)C1odQ2$6KtZ?*+w};)B1l1hZ(caO}Mf+LubC$~>M25%fp7*;56DB^b zmaN4E5D{6#VHEmPxQ}uAD+JYg8u2E(xqdb_HclK+1R(3+l`8Y@>-&fa2@)f0Z+r^8 zH06BgPgclUY=}nHF8utpe;_PVGs0Yb>r2;=M;0C{6d`HDVnteBYJ-WP026}HKK3X5 zOGul8pOYQRwKcvq(S*%0FZ4i8TtNEHmzP{-f@*GKb{zl17mnzgC_nBn?(#Z8LK<5L z_y9UJ?RwXq7Ac{q1i9sBuLojoKg#uDZXp~}b?}YB5h0mL$20odKG%LGQaTwhe1Lru z&A19}JJ7ps?j({}dDg=6;;&7Q@r{v@G>GF&5C{$V-O+9+h|rCV3@(C1L{|>RDpkwe zl+P+O1nYg?SOc6Iv3X#1gHuhGc}KxaaNa0sEDISzf;G2^M!z1%D0K6uUiWR3i{d}C zoPv5}72xp6n^jmisjt)|K{}B<_NW1^AAe}HOR^e#$YE|Mlv7{AYtd`;K})91VgRw( z`Jf1Ms+suwyQ18tOez1=$^N#tk}Od7u*3aFtPX&pjh<)hgBXC>0w77UgE2}WZyV%F!X@_`+l^gH38Q{pw8B#%kXVpY#ve?p@O%hPl)wuk}$eT zA)BrzvcIAaKE)qBJcJ zR5i@06;{Fp*68maj3$f9L;WyQB^th57H)LsHVmhT9p4*LnEak@h_?s`LMfi##NBAC z$fYOrAG#@OV9*bD@;@o^3tAPU|8cx!Xw!d#AA~-i6iM&ZdsPxl%5iq!nJYY-DR#{5 zoOxf|@-8T*fN_2l%bHIDmSQb-9=E-_IFfl!)8HAv^dXDnrl&fu9p>BZ%V`G1pp#~s zA#;Mp>yB%G@dah{-7QUDQ-KM)D~|#)yZ(!L6;2it!taPNSjwQ1KoEMw+7kPavuodg za6vlfp=BegldV$DV2VNt*T(W6A1T61)9LKA15c`*9=!gf9ZRjVv{vWrX%Z;dJjQbT ze-!})@&+^t*|s+8RGMhkIdJ>zK2?Ev4JdM`d}_^}vX}C7fd|rKDgSU;uRtTP!tyF4 zSTI2B=h553F&F?su*nGml(YS>t+BamCh*==*sKwH6%xPlyLeqHzW7gey?C%U6~whNUH9earz;cxgy@MF%$_w`1oW1ChQKtdSkM6ofU%C3&(neFr7;UAhG;DDmE9$80+UCWV{+pn(HJ^wMgGM~jg?(z ztTEgI!w0d`q^2?1v@3MH{Z{)gml&)OvT2{;+aym4f5ZAdjzkJN8eJnUpvVLqW_Wpe z^|5peDFyKql2QG)JyPG9Py2d56)m)#Bj8MeGJwO-Rn0lpO7CMgb08@_qDvknZK3Y( zYicbwU4DVTxyGm=a1bWy9CH*>qC0A>at8UFIh@@o$Nm&fs6uCwCmtqHRzXX)p6)j! zKsp?ztT)xq!Aoe{D%&hKnZsr)i4>jZOUDcG7(qZ8feF}_aaPO8zJG05l`|U6PxTLx$$ar!2XQ=#v-tL0_c=MI^zKetbF$ptxu%`B(xXkN3$#p4>yjs zmm_sI(wan`EX{StQ#S(cbtuH(LVP6;o}y&!&PquAllQCTkw^# zOfTo?P^rQc~)XO&QX-K(STqHTG zPEgGmPv#YAYh+=Cv4|K9{9P&7Zb!9km)QVg$GlTiX^R4OB0%wjb=?m)FBUMAFhWH5Xfz@oOzL^a~~s^-5L zU9bk{<%2eBb!MqY+4Z~y<7D*Gj(+&G{etR1uCMvZ#q1SoBx>0O`T_7fCfM4%Pv|qT zKBoK*Eq>ouzTa=;6zk#(o!!KhK4#Ek-*JTwgm{&BYKNwK|A)~ubeK$T$VsXaO&oRD z4a$nS7qHAqNp|N~i2L%HatcM08{}!)v;}SksjP|BS!4eV7`sC^BIAFQ8GhbK`}f~1 zRLj&@7rlOpolDGcJy=}R6g1P=!TA{)+v*ID0V&NhEg4$D6}skEZnLeM5ahzDu3_&# zM0RAxdoOwi79a!x385{Nk;+?3Y)Bp0%pp_D_n4*qyqHI+A_r*P!*zA*Z{H{P^G0yS z4k7R?0-|L1Oh8oe1eQ+DWg!X(@WCBoYp2M0+Jod31S+^ug+uM~#BLUo@=4~>Tl5`Z zi2Z4P%W3m6Vbbf}iBAfA!J*JmY7n6X7MO6U)L#6Ik38ED}?n}+CELNs|o)SZUR zNI?1jBwi95RF6rE+t>6lu5t^Rm%OUQ$~X)7wjSBY5&+W0z;@ZYhKY*4$-gaeFcT%J zA~v8^k38npaS0WGZWJ(vI0&W)$(RDb|JuJ#bMBNJo3z<(+A+nmMi0E3vs5D5MZ#+G zwFVtPpCW99{;ixW(BC@y(=M~ZXhO&3SP1G4l8zz6M2;>jo%RM{?S$)RhhK&ii0QGs z!qN3sB>W^7>^)t1Kd(Sw?6$JZ_f4;buOJcTpA!jxJ!Y&RUiD5D&pUl_6KPf!Jeq{= zu18skB_P{T`h!5eH6cdD)8xHjo(K>t3gG0P56~`QS*z_mdPQ0mhviuLSfr~{IX1%u zwH@MKf=aek_oh{@!!^W%`Wu7ik*snDl*_))%$RswxLGfQTX>9=WhF_BS~)E^7l%?| zd?>fp*V(AkdZ<|oM+k-8dBJ3soGdSjuC91Ae|*I%L0zl*x^qe!z|)&VunlGEdMOFdN1(id#rYu@VGmv=$$pu1+aq!{Q$Ji1sEC)>P(0ckvURYbPb|JQQg z;Q8Ckf@9_s{XG-86EF$nRAswRiZVn$3u%eC7^5%;_NBQ-iQaEtw?e1<)#UckirGqP z)FMB7tc4heILAN;$6($4hhWhGes{Lj1ESV>U8DpHTf)~xXtNCoi9 zAU+K+9!yyG?E)6mWU&ML8Z?gpta?Ghe^iy!`8fn8`{RvwK=9VmnKYMdn}$<$Atq*b zu9xIIon@DE@^O{wv;)SdAhRRWXl|{&5sS(l?|nQKq$>cc2(XZ{P&1Lo@J1b&2M)bz zSB-~65jm4FG^}jHSpZD$U%-F<9&`qPSA_ps006*k07(o4!g9hqq6-w?C5o>S#W#uK z+eGnQqWDfX)c!6}e3vM`|7Ym`c2lYuKz#<3wb%p4h{%TdD#fSwx^sREK|lg9{NZ+W z>-DHSR#V#O`+54@Ig>!N0u#&f_vXQc+Tv50G3xGoKI0HNgKSHgDYEm1QuAuclW%}g zArq(WKa%G3yb&>QVB5;b|3UBi?1Lbu=1^_9@;U2c=pwYDmR9IUnF4@6A<^pPajNb6 zad;8NL6YX~vW;;HJXOa@ulSDAHMGrmAPHed@a)W%+VLLk$3C^^0!3%Bv21jWKW(>N zy;#&vsD7*%2p2_o&f}^Jw;GaS8xXnrm}XXSMuo94Zpvc@CTy$ z3!=T*XZcaKV&M>av{euE;CGBWb-K_#vCa>ybTO|=H*&cU?*?rahl^SFN}GgxU}BjM zwwx2~3*NRBkB}V)Ie8XsT)ZDpPZM;(_)FuW=LkX|NN{$?%u#s$ZICh-(3Y~*0ryE# z5yt|3Ax11G26Ju&YkW{5VBWl|TH0ycu!3R=tryE|2!28A?L05s^O|sD7uISj%4~gw z0xj9;?Pjk$7vbUyqY_SpKo9&*c|a)jU%RaP?f4n|8j4wo%C@g$9U{{6B8d8odZ&p- zjd$h4hH9~}y9eg6V0r;xVnc!W*9hjc57Cxl;6ac|K0I-MAvfO>Bm?fXzpjD7$`o7@ zx;~lxLH)?atQ5Nkui`1qv&!sIYEHI0*zRv{9^48*=meC|BS19+Y~Ld)0BQ-quL1HB z;6eeZ2VlDa@ei;RfRF~znE(f)aBM~@_q%tX+SXSMys#R*2L(69OHy1gQZx`V76Z|5lJH-LGG9 z6w!363Y!^x>m!pTk`uOx^U}6tkg@QcbuVFoy3&rJ;JC5zj&8XVp=~MW@5}JA;{SjF z{(%&=o03>t(!=Z24K2xjq}e-f#^=1l5AsWQy6T;7OTv6;iIlMh01=kovt!ek{YZ~B z^i{mil1AKM6JerpQE&I0$Z|o`?0LqKu|cO6fZU!E+(nzg{idc@sGniKQ4?-{5cq?l zeFPZzI&qZ6v&Q&8J_mZO$P?Zj=e*e3Qd6ABP4s?0aUPmIDfTCLq-z&H(y7R7OuD+~ zz7Pnizd1kXDOjJHB;%cXAUl?l*__HxTz`jvF~{n|V}6t0$p7U~$11-F%}N1)tR#+g z(8(si0N({~HaM5Tef5g>);%i=dA)w8ipL4^Ad$O7nt?@^hkn_Z)3cuiytc^L$?_yF zh;h;O^~G~`2UqM4$9bX#uU^ta&S*->1EYukH0x~A8ubR9eCIS>z5*l=2x2W8X5j02 zo_w8Ti5@$E(@V(B>7+3Hhsjh`-2MFii(1@Tb5|dcj17IcQpT!Sleqx$$Hc_X83y+T z*|fU25gRVoqk8u~Q`y){(XD1GiJ6UW;P6PcAqK_*E|cSXqx&SBioYbi%`L)1;WVb0 z`=pqdiJa6-0P6i`(^;?*-IsOX6<>~SP{-h^MVA|(C@Oh5-8atO8|-=0^WXb%yrX*b zu$vnbDcJf)j{|E| z-4i!-ew`t^m;bP-K@xDmc`A1gNBh0+-V05CIY-W=5Y>D2H>D z%b-x)jelr(OzFR^#vah1)4*UZjrBvh;%OOjm!n&rt^mK;7hTWqYd-uZO8wdEEK0m{ zZO(XUU98Zo$otR&ve#g6hZxDS0l-mX-0b0WVq8iHx;p+!jNkv3EN1Yjv$UHB0R zgPBTKAqS%v`q`&)W0gXo(ypPm(ss|95?R1@Uho9;GLQ8S%{JO=-Z)@%ru2q^CI)jS>m&K>_q7wN9_Rt6_OcVm^w)jw zhf5al;t%VGsqX6=Z4Q~!_0MM|1&#KUGu#=@sEYRUn+ZwU`V=w7gu_&h12u>${fxC4 zIqDRH&f*BZ$i|m~RFJ4_yz>`yW3;#RUe#Ab=8L*c!HjwR>mCZhGUu?MpK_c{Nu>Uk7?)v#V)Py>P@szF{LzbyZ6>ts5~GabLv*g?`!TggGNWU@!3j=Rk8=2V$_O%ornDs34jI z&=t37Hd9QMhdI3JQyE)7X=7f$od0an4Q^M7t?okN;@B46Zz%%Bvo92H;PQ!it&zV) zTTtCn5YS;-(rc!uT}Wa?cLy)Qi1Tem2R@_aMmH}DApJN07W_d&c^q5-ngt9X!l?7+ zg#>LG56&BEG^fg3cPKIcsnOB=yfkydB2dnvi ztJm_d2WGW}?1#Os11K|6zqaFBViKgTT|eYDCZi@Xen`wquMqil)#m~5V8?|0P54iy z670OV_V5|4k~)6Np-)jRyR~rYc;p8WkhyMOQUoTD&++a0>iX zmSHZH7_t*z_vTPH9jgxYf#5=vh**dFC%Td@iH;}aW zgsu@*_SkD2ACoHcdFg@vG6r=DtvX06JbF%4@#ZnS7Vh1qWW(Sgmm;q-QpTD*Y=vTv z07%1`=6+#xpkO)Bttef{Q01a{6#_Z~C73A8B>35qJeAa;`~}qd7%j9ED?FzHJ*}9v zPkHm!)VzjRf8*;KL)-6bTA;DWt*+5^`^uvHIs4$GD%1*#qyCVG%r#P@|8kL|QA7S- zBGj)LpnV-w+bz0knXAX*Huqh6@$3swaqPVFK5Y9fl*hph_$MeR62A?Ct%?1KdudQB z*w-xg-m3}R#db;Zz$xEGC>kZMSw7LVkmsQ53}tB^%IPmnDnFI)@HdBf&U zN0G{=|BTD&z`27rh1J!mWhOK95y?d)FgP5I3 z4%~g=PgwTZluIOgw|EBVCbjhb^DRU0Yb9RtAf|*^78iw$W7=vc%}R=7L^6DbN!)vpqGI9@gA_*j z{{6a<4n?y*8Suc?NFryd9+8K#HC$(0~{`N_3`clkKt(Jf0?g5wi zu8tr*0MD6WUF?BXVG3kmo3oI!kjMTz4Ys-s?euK5-Z-15iZcA>j2&4;vs}s{GHcss zdU#0Ao(IU8V29_UJ&a*{BcaGR5%F8KS6HdoGB;aeUsM^hr9h=6hnH#+l0zH}-c%Fj zP!7&OVo9VC_U(fL94N?OaUQ2f7{{!*_-T}=cp^)iGWh{RQpmu`02t-inEFL@>fJ z87uyDj-xWKw5J4&K!4!w2J7g8H|1~60b?}sHn1rRTI$mn2~r@AyQ3AYKHy6dM$%|u zG82O`R#M3MKOc3m|GW;MpEON{mpW>*37!&5&_4l|#K50+$sV$iFS+ncqDk(T}J*B04y)mvP8T#SfiaG^!7^fM1|ui3?r~wwG*+E z`aWI`Dqw+vQzKo@4W4Ydg`X$N5<-ejmsHK&aUi}7fHWe{{ajQC1Z#@#`i111d^$CR z9IAXp&0vI8vc3o;8@gYsuBxBAYeAj3Y=gQtFUL}Tc5w2f$F^;_8G%LtTbRi z6m3dp)S6EUvn3W~jHIdA30gU`jU6hu`(*Gi*)1{9w^dQ5)P5rXMA{e5f8!CpJzV}1 z(d$3dz>Z+0m?K^{$PvmtR}t_1p@N3(3{*1cSdwwrIbH{M=4MGZJRrv@6B`Uar(MFE zhf<~!$D#9duQU#Bi-RVS1saSc)oM)sfH5{|hvz{Wiv|CyQWQnb<)agCKY7EIw+4Kk zmlcFvTbJ?bUl%r#&-IS--vC!0-wE)mBLPN-s;KmDEHFtTR8txMvS zl$p&Pv!#EtYSPcSkHI7lG`Ny%7@+_ZmyUQ5K&)cFPk`o*yb%vRoj)GVCY9v} zc_oaQB9sfn-mN{kUx<)BsYX;Vgkw34wHB=G^0mbG$;Q;k+FFL(U-Yh@8}o|XdTD!* zlo7quFCJw&`fJX2vM5sx`>8y!5& z(cRhCO@fR8+6c}EgtEF+yI1$p;@{?)y(@U?OgzU>7AZ)D(-OeJ?SHl^LLY2gM@!_N zbXVVLSfXFh3OTd1gl{56e12iFb+25$N>w2090&y6dMmGjYS?!(c=t}Undxm72o}aA z=$TiGcq`v|_X|)i$)`@X4+cAJ$o?$g()u7%;egzw;h7xopt*^UtPeO3Dy~j_8-HBD zhl!+CW5$)vH~t6!eNA4i@HA?#7YEKB?DPV8qVrnPepYh+1--A?@BOA@o`6SC!ev02roo#L40L07Ff|TP-|c2GOR(JEHK*ta+C)(!h0ZxbBr8@Y zBS_4S9DF(RD!f@X1Z5OCZ-9Cu2!K6&aE2=H()Qp;jRIipFa8u(E0ZW>=%CXRAsu9g z#mBKGr}&?QE}^CfhBM_Lpay3s3DWF%jmn$d?@ch=FHey9lC3O+Af2_&VMnR&+X1E} z?b&)8!=;I(AS`)KJedE**g3_B76og%ZQHhWy8Eo~vWC1{ zDaONaN}d}W<|fL6rtekHR~U1WEOc9TG=p;It+aaeytK<0Cs-&Zh?7llLObn;%WlvU z)mRMDBiE!M3+BvIIn?CKI~<(Gmi}P^;bG8|H*rZA%hi!jaZZwgp9RM%cU?{h?XGAm z?43u-rZig%nEJ8~#dG$=el!z37j*lMgaiZgryechm8wVj<7H|j(Zhx`E(g^-aG9TK z<4YBa0I(sVeq)d`{0|MjULdL`-4@Fti-Nz;wqyF-V%nmoUhf(@)6%@hinM6vBdtl4 zjveC1WVK?Y`#2TrT|x0R$Sg)ii&nsO2<9M@kx%ER{rXt|xDf3UbK792-8m})y$Y&y38C}+Q@#F#ReO>`>IL^0Q7+gkKC<*dB|ZLb4N7UM0=8`? zE>&R-?9-~yY512Apo)#lk;|Fg=NnE_I_&3TjqT9;>{b0V#cqdJYXsP6#$HUB8B zIY^K3qvX)YHZHtxX3t9S+{OSo8@s-!*SzDZRz0MtALc}6Ta3dmEVT(TMHhJnKQVj_ z2DgGMt4=xutNcbBQi7YEG&zIaaRG?JxzLV>NZgYGS7Kl6%B#j6B@P}+5s0?r8~p<8 zIRv~mcLF};xE;>vmpJB$u)JNj&H=OHeC;vK+w^jdpDPlZNZmPtg$xdF2wL1$jR2At zIu@E!PF%<(fI|f#Plvd1o&!+~Vha5#94bfsZVdEDpJ8Xjs@V4JCwP&k(4j5LVd^Oq zI^jUc7cZfmtwuDn2H=<3ANE^hsOz@PPfT-v4{qk|Mb5YG*|{rr=m7wSuP zFBa?)u?9xj6ZA57i%0q*9S`2NIreI&tNZ7*TcPlwL zk+As@%%jF&Ij>lVFcB!A@YPg9zJ)viT^xx9Bh%*Tdj*MYbv;~c@La29~YDf7Ph(wud4QJU^`(L13uwP|&{A~dn?mUBsj4vhwwbFO24Km$B!>(}QTHIeR z)x|2r_OS@5@rRAl3D^1FRiSP(Tj?Y`2z9GX>w1n9DUnc9?yt6LLM_8&ztE~9Mo1R` znM)o@;eJ-(r|%tH$Kfo^28aF>GH=K} z#x_nteUi%Tiai*44;$iD$1{sSo|Ec=_kp6zxY1RLih?*CTpp`dfces2hh6>RHjz&2 zHK+-OvQR+nFV=m{!+}#5Mq6^&j%0RnL%amxNuK6DW#->fZ1R%@-c1IPyi%+OR-S=A zN_nmAMmKO0Y8W79(58$OA%W-h<*W%+{970;IPBOGc3x+q?s(ju-WZ1kl1-i1f!g%P zEA^e#s6qD8C&1FOn@tvvhywmgP{moZ$MFmUMp&Z~DN|!(>^f>i4_*9A|LVrDWK2QU zmAPChpB`TS)}6gbpDA25`t!z3NhUnEN7{QN1EvVO+G}t|As4N|=yx%~J>h;o_45IS zZyz7+sy`@`^Tw^@p24XNt!4zWmL>U-#;h~mi78T--AiaB)tBE~Qt{U)idSjmi+_v~ z?Io*cCm_Hu(B-# zV*ZcDdZ|;1T%4|1CB$Y2!od{wm5X-I!pXnkb3`e;U8}yK22$hC6$$DLG|-}~O_P_1 zTY@;7C5jIJFau@ckIg zg>I^sWV0qB=N_K6G#zTH6fY?D$M^3EYEOR$3A6dm6QlXoHu;OeegXL9+uEqJqKXya zN%T4i5iNp}xQ`YSV`}Q^*4DgblSV7cglW_xcKJ)W7auG3k|k{3p|4$aa)b@&v-KAl zafJU)q%czG(xLonth!92Elc}q_xDOCTcA#v5>|8PX$2)V$ia>dBUh}$TEuLEyAE>k zljrjXjVD7q;NE|AM&9x2;W+7*2EMx=6qYtMv%15ORLjA zddX8v8}y`3QJkit)mk0ZBCL2v=v1Rr9=ZUx{9Oysc?kQ9qzG0yczoL6jmJH4hQ-F` z;Z~;;Eph)=$_7bgJ6x9rT^1;*oDFZJp4hl09Eaf@<%i2Jy7X)J(;?p}b&fUmQ5mCS zA`Ng9@VJYEm(42uSvpVlM*Yy~oKM9j)owhcc<%p@1sXqtHAjPYla)UY?c`sCahz)@6U7uo9(_>1NEo?3YI$0ztQK zsrz@w!i$cyz8_qs$Nfp%_1>Qv$37Q8jGEQLd^3QL=~Luhjiv2sE%PT3zTr6;+|RHH z5w03A6%%f(8k#xs!e?(jA#U>=EFMwoCuSLYTuTL-I@ow+v=J4uydarCnfDd?sxYV=xLM!y3D{76CzP6q>t`a}{$a?)Bi}C` znA~$q=ZbhIFk24eBXLdRxbhL!oI8;L-36qx16tEio*}2Bn!qlA#X4)@k6i*zp}bWt zPt|gJlBq@H9L>41J@LNiOZu8`!Q3UI=@sk+8;L9?b^l-+ixPl9w0#n9drCf$j@$so z50Q7i3!!*wLmLT1`EMb``oO1kn*zP-O{P7OcdH96mSHi9Osszgd=W=FB*g}e;DoBo z^2S1w4<;2MX@4N{#NsxbB7YA|rv4R)1MwtF+V&XWtzIvU4N(nZ>&hKojDRz7_YN*D z%!;g$_QNg|wJfu=j@eZYR*i&aD%o4T~FvrV8(J1=WCf;JSzn(N&A z9Qsu+Z-JvaSxTiLLS+o-lU=kUI}4zE*^%qSuLHotb3IJC!p{o0`iB1K@@)egM9v8RD$g>1AA zFfIczdid@3Cd%Iy79p_(;G}f$IvAHu3qu+D(bzYm%(?ct)t;!^`H3fl3HQ|b^=aD7 zNCxU7xn1A!j~*8sVqzj!(brO(;H*t6knoIB`ZQ%O^Q>&pS?lLz9Yee?Al2mg@`m8S zhS%!YwHj?zy!Eeh_kNO=OlSl2-SjVaI&R~@Alc=Q`iRae`OhfXe}l#w#UD zO!=L`m!qDyo-7zc2~g?xhC0wjbD?O9(af@8C~Tvj%EhobO{*GlIkR*qjnwReR{WQ<7bP%6Vn|)K;tk`6maR0E|%!+x29Fe?k z57m0Rg#pGlCLcH==x|U_#(x;I=X?M*(>8RG>A*4Ta05=~>%44#VqBW6=!hiGmTRGX z;LIt+#b$DCGO`?l{;S(6Z$eRNW9Ug|iyL{xjU3g!I4)UWWIiiOQw^}yOrB;}5K^Gv09OVau`QQRoLB3MI!Xq2 zY-2BmWu6oI{P?_`hZM4+&pRD7>HGyyvsjjAO{R$Zp)~}5y)Qz8j-E~y82u5|?aa=l zGvuQ73(=-BF}wopltNvNgMkIkr9S%p7rA9un?Te9ert8C4Fhn$kjG1DX~1pbl~+bh zVRlZZ>L`=_inqZwtcuy)C#n_9*#@4oCkm*R2nQmZj`JBie!OU#`Lai~$0B&%X z)0fH0^3*Of+5R7u?*@qUJB1^)2eu1HJ_h_c71$FmRHf9C-cgQ2(Yjze?271ja$5i5 zP~u2@SK2+f-2i*UFbiZ&GW>Cur?w=1hcTk4JB}>sKo>-h23Wu5>{vQkLJfg<_-7Yd zJyP+c*(m{9$LkTfBJfdsPNxg=$kWM?3Hz$vD!B_?JARHJ>B!W|`eQUpO65Rq58HZ( ztO%(?Of+z?mDP^>g=T{Hq4vmhCDQA+V)Ruj}E2PuWI@csY6>P=#l^u7O)?^4VAV; z)9!q_yIG9n%I&*%yuFRlm_^V=ztXQD>v)pZeKR2)O?z6#)q@EgD}baORQvV35BAC+ zl$ka8lJ#&Uu*is%H9lYp@0c-H0naG~8Ifcp%ZtgjYos4G3zunJeV~j}e^jt9CKHno zB5tnCWHw=u;fw^h_w>;OHx_W!8(U8s0P|Lf=tKO}AkE!mGh|>bB;j^mpoZd7qqyPJID{>4Z2!Hr%=hjd76XIx zb03@YADv9TNiKU_8nT3D_atTFj~ssPsP|eu7#|K(r8HzK9Nnr<+yN zlt%@=mns(&A|OxiU5%Eb-!vLYGo@}bSPmK;274|%*bza#WBwK$ z%Z+K+=umgMI>p>$Y)EzkCgHsu5{HJy7j90IP*;&g@#9F<5R{@}}UvMT-detW+2I|ENfJ5is&eYO98PjSfy$>q~M-LR7 z1Z%G~M%TvwC{tu5TpOt+%2(FSTo<%ava6?ffLQ|OGqz|3UnihXCjHZmsGSl}5Rm@s zi-WaIWj{2rh2tYGS^3Dtm1J3W^lI3|x`L*Vp2i?dC-E#=b~x*3acgvD%z6Q0nr$ik>&Yd|Di4+ z!~xZXie$GBpYpaAHY<>0DVxIH@++Edi1Yd4)KjG|Fh7oNZaO9}o3wV84- z0d`EW2tjGeH(~n%`Rkz5D&0eA};0s}$DCF+R%kIMTCq)B( z7tEwfzOqu^?_y7$)Lm6gA}kF2^c_ml4XYAemG0E_mnG-mQ%ZOG{UeyWh^83dj+c%> zn-n<)fhB8I9??zo#Ok2X;noWY&Nu%{)n5WGHeP$t!d#m@KJ2yjCIoyPhVbEmO0C8} z=uAgj{e>fJ=<#QSfiJ5!P$p}GtW-$SJiH-8^z_(y7uTEeiTeQ(m1taK2_1;>TxlnQ zk#-Q9)?2JsKWJ>(&R{G=Crta%vz4Lf-oTZ$nLnpuDa$HN^iCw@oknZJOmOr-eeV!# ziL1=J9!M*AT4OcoS11wOcPdYmK(qUF5ZDzD<;^0$o=TtklIp{NHJ%jaSK_L@*BcY} zUu=Ye5|xxv(6EUoI=ycD)*#W4ikxCDyIL(;W9jsLAdfVTd`#&Nab;fi&924Of>u+B z?l+n~m9)uF5(|a*a8%gG4fR?a1VS6R3aanpIk(}L?lm* z$%o0Je-;dnMWU(hUnwu>gsV{&*3&Gqb8>a!;1>deu> z@aTJ6!E^#s5TNVisPR%|FNJ&H{hEOa5{OLgT$+q}@%v^~{vctEoBd*zc}O20FrEJ& zdLJGXATwgXAz#aLkX6z}+3gxtHrh$6RI`P73mElA@nyDG*!^N?A}6Yi#OOqbAH02A zqGa{|Qs2pxjp34j`g0-R|)<^q?WK8Hu%<3jdGSBt zAduF@)m9p2NCn8l#r+Q?TIHlevKJJD7Gxx)5*NR`+Q3}ShL({$!53y(zcUmYBHJcK zK-5^}IBPM=tdY#STN{VCb8fTIl_8*#)>zpC%hyRUv4!(oNZ!IWy{!A0X9cawG_>`2^}~hw?TY)os{rd?t#nUR^HQO z57q_fw&3@U%MS2=k;Ni?l|Vq_dV(ge*O+Gyc=@jk$fZOVpe<_wi>%2S%0Rw|ChLPz zH0=z~UlR;;vH)0A>+6HF?XC?$`(sME$}uAQPw5@6!|Tul)|JV(wD#U^EN@RQ@I>C- zL*5e*G6n;+Y$G^(NNN;FXQ;-Z_7XO%Cg2`SN(73HzSK4uHF0Fgy>ImC=?c6mCMVe# zAFzriPMHIFSLLJU%*ZMLX(-GHGg$+-aG~S>ec%Mv)Nos}$W&)QGPWlteE7@BD=BYg zOZ3C6Hz^EO#%5kj8fe>`kp*x7AA{05pHbUcKI_^+)e`;Fl$&z95XM_d=qV}i(-DSy z()jjB5ue-bW?S|BcuiNetj$lD49@X{r$9<_zmtur z4EW9_!tGMz&B{|y1<9}kgRe!1pv#)xrPJmR19>ZM%DA0#$VW07iz>;j-?TA*&7OQn zIl*82q8Ux2Vg`hbUvWcqTQN9Y?A7a=!v+u!3?kOg1Xi9--SPvRq@j(9#ufE5@+UBx z_%rLZAXfu;r6V-i1VS{dt00>n??DFXZKfC=WiC5H)Ip?T;O$ecL5u-d|LIP$z;e?N;RgO=>kU&Pid*MhPl!w^6 z1h8M`FI1SDk?+VK6e-c|sdt~)Yy!q*UxI@Vp{n)|zODzRkL7HC4o{FbG{|^y@OacC+)}I?&NHv57s1&mq=tPiTvSKE#5_)#bRf?PjsovJ?8{XF@Ya_HhUO0vcLK zeXXRg*h-^8tD1hWzn`KsC&_P1_Tt#uZ$}0V5)VQX3Iy6UD_zz^2Vp*XQj)AE>w`m* zt3O{njIuSATXeX)kxT$)FYn%_%pMVP zAzan7;Wp|W8fn-a_*NS;9~N+Hn5+B^yD|M5CyDYH->$c!{`^9vzS~G^uDm+5E6P?jlo5=RMt76VfEv3nvsiS%KiA~ zkwhFxchnU)_ju!X@^rjM=k%DkK|xm}oOJJ!G9yvfzNTqGJ(9l1+m*F##IPW%we+f@ zd+FkzHl=@YI*Z^dKZZhJ_gAbi4_)95SxIRRCefw}?`37D^m&|+uI#gooV>n{T<6Ray z<_V6t`CKDv^7UePVo3IT1{xYIBAa{$MpRrAXO@E9mluyOT1xThpoJYzo^aWXDpbEk z$t{#7JV5cBQv&Lm?G`m5K~ z253z1>gp7-KTP@Z@B?60_QTvMXX%Kl!Xr($@BWc;F9t!|vYTc@J%U+YE&8DJMmf&K zt*vf=wHQ4Lb24>#L$)}*=&HheT8y9OW-wo7!#fmZV% zZUi8$ z)W#p$(8PC&%7qK9DSTP>=vp7D*sGR&PdVSEh}2lC14Qi{XGi26CNA8RpoUtt|K+Pw zHC!0nPot}he=bkK4JgN6-A}-5@*j*lN{G+xZt{BpE#g;eNV|3B_-R z78Ds#dSFIRo9k44)0D#=;?maYU}T0gV#>5dBG^qEDvSZCdxVC!p_BKMg#HNMu2@vE zQu?dgXOaZ;xbdmIgJ8CD#?$xLHY1kJ$ubNf>e-SH)QgCEYahbBD3gcB%i2zy8EEosqvwL?v?s@xVCl|!va4@`uMW^gkjmI!)U&@r_QK=46NZ+~k=1}~DIA#MP*-VzS zW@ZRhZlnu8kcoxqsB>e#t-Ao=TyWCWFhmUAny3C8)r{Sj&x4r?j)x*2003UtYelQ= z#)N67KvlSEvt791>B2r=f4sE?`$RJ?0|Lezl@%f?w8S5bfeoNM^fa1&J9hsSqS^ey zJII)=V#diuM3=?N6+~MjnUSR?Ae$%^V}*Nb8hzR_TNqP1B|`buN0&nm5o07@k!gCw z+T6&A8JQHqxUsa-oI;HJnad3D;(z zBk<&0ftV!5MXoxOuXEP(yzlt!NQ>}=2gIR7&#dEag+8y71M290g}HC%)EIq0qdHf; zqGt2ukiixD$9nOB{rNE$De-%Sh8m-iaj*q7Wtv5EDmv%pwgV3||ALf}i0pBAOhq~9 zblLH+Nqo@3YD%Dx5vGA~{^pUPJEi{BBhdRzg*DD^ThTOES|ubDOqdmlmljW;##Hi0 zE+O!`A;+H*v)jTv7h!2{S-^ShVCg<8T5xy}4M3sEL~(z= zf_`mNY_{~@0?YoUkPwb&Iy3WJHS>*+ML^1E8}3pdhxf301IuG!ii{_u(m&eDWQcoO zq}-obxz_%oC}ncdCr9yw^SHoH`#X+}^xUUnWF*W@^*Tt7QG;ws%?@o^plsgtcVKk>K)vqGbweY|5d!~Qc%2qIGv&;(nrd?wkYCSt&d z;A?OTV#&b|cevtmZ5|F@$&bf6qENeV2PJy*X12^AD(SyYlaG? zcvo($PPQY->Owq{0Fpov(C_p_kY0(CnR#XLA7=W)t1TO6JF)0Wq|J>Y3<0&ko-lxZ z^!oGP5NTq1630qVJ;hJ;Pk?gN<`jZZIcL(gs~LHI*ZY>R;WoS0AS^$tAUDA+)YIF; z`Td7os2#uEvQl9lhcmm&F07NI;8slyys!(vD%xr4d%@lS6TAwfy z4GVCpMEkqLoKNmO{quEbW4CJmdu2rr;iVkknIR~+lCug32ProfrGLv90B|U;^&G8p z-#s!D;(sM{>h10u*{FD_GAgfqni8?vd|vxL?6|Zq!-_#t5eazR@qetVL*V=9?kil+ za&$bs7k*ER^99$Iy+Y`}YfZ^G4ta)W%NzWL)Xkd~VDLZa*P2wHI7bwcm+CEV#fTl`Tox;*>oLY zGJ1y+TeI9G7^rh@D(^M-ha=bTLc2-Qk0XU#7R>+iL5Td-0Cz*m#!4CN07vj2X9M)F z_p}d%K^20=MTKf0RcJzkC7a2B$+BwY_=!jYhD8(pIfb~+*rZQUC3fJHi{P6zZF{Gl zT<#xsvu27}=t-D;!lTs#z#1N-2~lEFGD|Q(c!Yg~JQe(VhOK_^5VDO&<^RW+VrC0r zy({Ey1fFt!rz_qPX^?qdwbsXO_a2FwifKpR9eVC3HpYk&=il`fIAV)bfr_8o@1TuJ zxY!qF&8SF-PLB?2^eSWvWW)|U=n*i?3LTc$;IyClS-kEyaG&90YAtD+qv%_;uJVv~ zTpvZvzSqQuUlzdX!Sw{Na6_^acm&qN?Cwv<(FXWHn=XE6OdTQK>_Z<;yr;m;`Furc zz=yJq!T_F@2G`*R(b4H;bGT)0wb?1aeDsn}O|CCWT{e z`ta7r${zVq>&MFkU+@s~8TLNI{Wrq2alCB2=NEl;0}F8W36cgQptMMD$m!y|T;9s; z8UUr(iHhnfIxQOwJ*lq$B+W1=`E3_t` zTnItnsNW6eg+8MQRB87cC!piM@Y8HmDIfhBhGm2y94c%7c=$BXqmB>GgT73u7QI0* z1s``J=mh}+#+Tm@Jwo~A>u~t%d@+4UH-}N;=t-^)(imafsPCSA>{wEh83#Z}mH z)c@pMGYFfSckaZNiCCQ;kI{(LcQ9tt17|FL%Kv=h-XJFY^DzOjcW{nSJgZUMNCiW* z_xDyP#yzjJIew&i!Wf=%9Q;m!SB3afpL+5u!*nsiesvoH7DqctxfM}Q(q(c(oPG!U zi6Iq@x2gT%Mb{Ey_Co#4S8vSkk;@E9>8GGCpF1>m#v&|MH2K=?j)_{gyY6JF2~W{{ zrNg(0J+vIxqGd<`p?>5HM+Qn0ee3@w92n+kfQ%989U@1L%5!UJyQBc@)&iqm#m=v2 zTZxo4VH9_Xthfl%C;f#UXfKLNgne|~d`2f6lm3nx;O)gJ_dcTt7`TpPx={=&&}${X#{}3yMBS0Wa#t}#@Z6KG#&y-Z-LKA z*R@s@oT7PhgYbL>=s`GqA=BaXV~E(pCb! zuz7ZRyu%B{CFYNkjM(QOQ$+Sh9I3;>-vM(D_7dEy&e+1*(x{XA5_{AVA0?mBBc}2X6b?u-Dl_ul=wnBs{fx6Fo*u zrm>FdR`&Zhzs^B)tJEFl=83YZy;knuuQe`XQSd?18P8v@$k4rAXHITHgF$0S3K0YEDl z*%;*OSXV+R+jxQ))mUQkAy3?ee9{h>;jABPLt%mfwq4Q+C1iVHhWPn%D1OZ=fQD|N z**g0}5ZFFH*vMK%h5k?{#0la0cvCWZ^H9k3qq~*F{9?OMEnbt26rI|m;kVb_Fv@O& zY~RgDw}#_ahk2fhc+f;P3KhdhUcIOQ34&W=HMlph7A%? z6f}_&$9eCQ*`zC4u<@c*lXA46or?F*^9vD+>gVrpBCWj<^AW3foJQ_1 zOeSH4<*TjSn`c*#DS~ZA(Bi$jB|J0@{`M1qg0-(Ue}4npt!G+2luQq{tO1-Wl5aU2 z5FZ0&w9?<_xhqrlm;R!yu-()dM~qWj-8T|T0yv(6?#jZu)8HOchd=pthoGB`PRRp# zI(po;rTsT&Y6;2=SGa<}atYFBHOO?y+w;KetM7|Wyn+ZP4{~*sj_;!;%&{%+#PEd9 z;k`82NS%l2CF6MP&s!-M+)*-%;=?sci ztphE+Dg0gbEQmBEvpYoUkQ$~Ke%I+kYjPW0TQIsxHXSb92B$?uLN;OSB5R84S9T#= zB6BlOKvU9nf(Is}8_`}2aAh72!EAz@_wwe!&`gh=^mz~_hR4K>ZK!0eshn@VCpx6H z^ocTvg5BPoRRv1WKxg$HI*;5^jC>u*&F=};TE6NT6%my{B}~HWGI9(9LR+3*NNDFc z?eUwpP9$&EFkcRiL8n1~7P8UZmGT83mU_2iK`we;67JSNCX2r!tLrmj#~P>|m_i(A z^j{rT8X`C%DSZPN0fz+=5_egY03L^tJ|F6iGno6kd~!I(_z+ssyCMOg$x^|c&c zu;5vn2)ptJT_2^{UAE&DJEUUooMH|KhB`oJd4TV+zDgoswyddP4tkZTml~`AnwUOp zr<@jOSH>C#GJ8>c%lW^)wMsFAP1xm^DuK70BB%Jytv#kV`%}hhILq*8Kaq}%i4y&< zm|&z8L=jGIBqrV9#IYoEy<=2GqUxg>+cm;&&_3s!%sBAn^K`S&a9!cWOPZ)2-V-cF zAc#FfAira_T|*KU=`1&S=gdYl3|p+*LJh5K(K>m7JU=5dlIvm;OE+Vx^MyypyY1%5?6kOi8#d`4++(zju0TLb24w?^y>{5<)1f zJTWG6n@CzO@RE(&nrQ|MP}?n4%@J+qJR>eqw{(OW>MY3`W*VWbH3UBr4@v1s^YgH* zvHH1A801M%I?QIzkE#o_deNRU^m{=G6ujqAK{MtJ7O+%!W={t{gg zquC1LYo7mpb+G13P5@LV#Oy9RXPs(>IWw#jprEW`10ONE1T|wNG$)vkXmY z#L%iRE*eSBKqq0SvrxpOw!>;`jid9TCV{V+9g(DD9DOF0=U1JqJt4SdFWf%{kbyY) zM50dl{k|%u#@q~vuV?ob^0nFtQ=Q{Tou2b~foA_u*LZc!Dn|hE-^Wdh?hJ&c-Mnw` zQQq`ZML?e73z@Pt1doIO(AD;89BZ9bY&S#rBF1Z=PvNW$Nfb<=6u;6O;_62H5olcz zuwdfae^^)Ya~T!JXJReZs0-({IEKpO>gEH4xZ`6I?pH$@CCPnZ5nTS6k}q!wtqLL> zEUhT(L#>ZuJH@@-Ljfh=UJ`CmZA^3H+^AtUiYtUUlJRimMhMs;aZJ`R`9FP{=_44h65oGpGL6COj`gfISRM#c>F)`JZ$6>OtLc%t zx_Lb{LvR^9oxg-3VCT;9w>e&%%CX(iQNc8xwMiW?k)3ph@`^oLT+*i30-4){5k+1YB=-k9Pn$jnLTsY>hlEr+(y5 zvA=Mb4ebB>u}WvV)we+ZGIUO0o#9C72O5Cy$@A=Tr#7<{`<7gNFRee|mm#s3w1h(D zU^ajVIo8fv;~qt|2HWoF=o(n}5Jd$S%(5U$1FpsB(gePR%YmKm(Kh0e=U^%9mSQmP z3ZoL|nN6jnGJLu*@0pC^P9xlFELG&`0H-|NTe!Ij-^!V{T)-{TW#bhFu3*<21)_m2 za7sR?$ksL!-cmvWt)!x|=YlIy4|L#ziDv9!O2;quD{=@YmhER7)j6l1Kn6*!G=!d4tjnwxX#WfRq)$t410{pKr!^@ z&axTHo02#gsON!Oi(Wvt@zYEY9ir*sBp;|geE}Tkr=8zzS8nGcl%jO@c%=b1Tx*o< zA2=9X%AdE7IMs_U)*S;9DK^K@rek~44Lj4TcJ=ql`^Lh9;q2eSK@pl_JJm|CbU$)A zviG&plUa;CoiuIVHmv|fHRf0P)B3$8TT+;&j-J~{1nd)9gqwO_oz#zX*9NpaM5?X13il z#&wRjy{joAm3^6nQgY$0lR<;`IS0ne&m)Q z=5uwd{f2^GMlfvWxf}R?2Qgk<=I4*$89y^Y0!G{cOF3V8#E3N+sZyq!%B^`y1p@lj z6z@!Lo~CZ(a4(>}1eWD}OWZLxg^4lmg&{uP>LH(&qY9}Q9v`-(#Rom)IW&ePPf{`^ zS2ULc*v2Ss7Qj&eJOV4STv9vOGHtN0c%4-H-Ht#!7HnC?Hi{l2aB|Eynj{(+f!3`z z5Q1AXs#``LbfURdXWNxtHv@3TJzFM6Hjzs0dq9z`RWFl(& z-HZ7iOIHB+X1Ls89Q8?Z{Dx}z7`1luRi!e2$oR>fzfE7Kn@IZ7(eN%gIm(bcG*+(T zrj|1{nC!fCW5P=6R*CLLaR!I+`)^g`u@s+H>-_1ypgvZR!O?5SudiInN zS|5Q)tQ9!$jmChMgg>I`QuNGcshJ=HE9HmmH|Ph%}&sia1X^_?Ry+Xe|HFb5Qz;t;%r zvlp~dxbt?RA=CXju28*@7|MT_o2}T{K5RAx%%<+o$hGB^anT&Z&&tK%wYRUMsHJed z_RuhGcYv%d@HIY8h8H-)h66T6Tstp zjsVK-3mW#BJcdd)dg=&+6{l&Ggn$v zb%f3|2abSU?I{|DYw8r|l{sW;l!-_Hdw(l#Y&%&zcmDaI|7|g=MfkEvG6&mU@P|kp%^+0&Lm;~D)X(Q}<@9m!Hr4u4^Hm+Tv+`HLmvZKBU zcFTdmSg1%pz73}PDN;97P5XM?Y39007tMp-Uj_~3C`L88=Pfx`KO~x2VV8X$tPLe< z93dQ6X3MO$Bmo+_QVF|L`YpbKCp#!Q_f@72vz8QvY4(CVdV!J`MT+o!&qe|bNT>9x-$fDu^VI{n&qtWS5y({QJY zLt`x)O~Xpy`br>M>V7)ZQko?P$AsOw;$70MV%rH=WG`gEx8wx0XtvdG&OV29bHFku zE)EeN6?rz2C^kv*|8?l5_8}Dbou6qyBWjI z;XIw^?1;`1?4una@mvn{=RPfV&dXG46hBAqwfq@`S&CxUq><`sPLpOuoZNc=ZRX4; z`I;9^(zq2UE7i0ZqXjfs@s?h40GnWgEzZo4HT=B3J-z;3 zo$SfCZSq3C#wHRhYg62+*Cf%%CeIH$vRN z!p}x5B|QJpK&$)yQMgUbbgaZ;O7VX-NOQx$EsL#-7}O09%47}%cT(Sw9j4h$>oDD% z_@)U5{?6Y2S50hx(%xNLxfRjZ8qKOm{J5asC0c3{oKq{NXNvZ=$_tjaLsg3HN{!ou^A@|A5(==+meS7_bjU-}f~-D!nt8H^GMi8QoZfR2^Q_h;VnQJ!xmxM@jD^cJ4UE() zc<3Ss9Lzboma_#;VL>A&xzRNri)Xj7YrO%Kqz_Q++xO(@NASGu=ejAXIKA4(y@j{B zzMr435#J~$UYMZsCSs_@(YGXfibcEwf_HL>>Qg!0k$k# z<}KT{ZM*80ZQHhO+qP}nwryK|U-y@pn3#$A4;hh}`|PvU0iZ>6@#9`(ANzV|hoN&H za&E{2t}Ud7q#v8LJI)pYQ`?a{rV-a=u3Y*wU~ErXaeQRT{k}3P?4w^{TLBH(G)U1h zUy5gtiC63?*+n}W#Nc1zARQjgla^0;cL+o1l5pUNGyP3pM@04mR|T%_l(#(m<_n%c zQr@5;kk4sxhUgK0y`+ATMhy={sK&oSJ${h7BOsR_QxS`iX;+qJwzp7?;vBbs_F|L( zAWd{-^KE_B{nz#Nc3&g3BSZVFjz-)heIJaWKq7Jcgz=wEvvb&^n|CqI z+%ZjxAJd4D|Ac15uo|B%x;lj=tRTE^R!<%S^8geH_d{Ow)B4pN4@`!R(Y_W*8ihW4 zFZgM;T~7HES^$VcDY@`OR`HF%oYan%^|p`q5U;f~4)h&xz;kEX;!0Y%Zd6F*!E9n2 zSiZ5T#9yv6gLJ7grZB)E$l|{r>IjaG?=VzC{UnB*p?ELB)t?k7-9CY`koUeAhV{Cp zfPF~!Z@l>>o?M`uj?e)UePt2YxX!MU`*W77S3}+-znGN)%gaEX1LrMjlp6NtA>S1N zg(Lm7*0lwv_1KI}e{F^S)Rgxt_%lbwRjGf{ylR&VT@SF`-nYt}V$2y_beEC2W zK_YT?X)~CCT>0*jSXa}8{!_jU4rH2UFqw@v_b_`+r73pytRvm;tasE*0dZ{1 zKBLcfDMU2-=UNGc7nk{N-n9<9PK|Kza6geo-ot78OqE+-7Y}0}tZ>>wn#gK9x@*Z& z_9@=`ZPr-h(kY<95liq({Qv(udfaHcdx53MI?{wqQg*5=&!bEF1)JnFHpD2tY-eEVkK!3m(Pi`oc(CU2q z#~E}O$A5>y16E~l>*l>?d|a06JLwk;VB(t-*;+eSt1>sQ) z%NEU;Np($`Ay$~!(pJ(oX5mp1QqudPNWB6F`kn)vtBV8Qa*Io9F0Vyx-_4PSDx$Ik znrkOB-Z(Pz#~rIZj40H_wo?UIawN5P%FTY+&py~*+a!MhSpUM5fpD}P=t*2Y{y=1X^Z3YyWXEc6ls0Kz2`OZuIk7_8d@g3zj-H1VTJk{$j(B_AYN|T25J6 zZuQHl&`p*e>Cp-u-=87{v&cdE>yR{lzws&1b$o-)mfm7IDd-3?UC}pZ{^K7FTHlCU z$GP$MBs_0H90H0s0Eo=!nN+qM>Ebunrl#~;(?81wvO21;qhTPQ*mpoEssG~mjSexH z&+`@3B@xI$j(k7VSu7Df-_TJBH@#$8k9Dr5(3uj&vb)Pi)=iLeo5@@8EKeBthH-Ax zmt7fuMC9)4=^6$8OP%fxA=I8)E8mrq1os)SPtAM}9f2-bIN^sHc$Jcr5Xw0L!%rj7 z?|AY0n7T*j{J}eF21psnD-NeXBNjuRtZX0shgkP76u|`m=Ae> zF1DJTBo^SwY?>a_8(e4H^NsAm-Q24EQIeK8YRYL+Nbn4Fh>M82{gqCL*gWYlhMb8t zl`_$eGLg2*HPT$oKzIaVVBVQ;Y4^K0UafXkX_2TLvdxSBZh(R(?(Z7BHy7%B0g2nz zLo=)43uf4>Cq{g6kMeS2$UlDid6>|PD@9%-TRp`)ogX1fJ8owM6_!!LF`ZLb2n|i=NUNnKC^-&@uVL@(ge|y{U?l| zVe+v*H3~RZPE@)<%fXXybF_rfmAM}1nQ$}Er?Q`6Ihz}GHzQpWUd|2ul*d}HkY;sg z;V$ooKH0$B^`qT533_#^uig}(wF{>edDRIWO%H_ZXI!0i5aPoEe)Vl&NpfJMjDpa|V5_tE-bj2N3U4 zVtpot7JMwM*@SSE7g1e2SXJa7gM++5JoQPej%hTnkiWIlR(OuN{v=&EcOQpmR$<^} zihc`8fw{GsDBC%=<46Yk`_Ea-0(a4Se?2+NMXE>?b~S#m6v;aNv@|l)t|f`xt&34^ zpFqG%|NSZxFX^dEub8bqbFcfW+JNQ@qh_L*?e!CqQyr66zxcAEXT=T5-QlV5zG)3G zRByrKSQF6fY_1s=s0i6~9%@BP$zxCxpH!*GQM!MIpQC~mcUf5@l-w29S4tbPXV=hDNqdyxQDoYV%L#{8co{#T}dKqGHU~UZ$`GHm)5#BNX zykg*)5N1gKXzVK{&~y(20G@@YG$eWTqvD{LEz0UwDa{@*Ap?xU9s}iz;m|< z!}DpI@Jd6adbw1RPGgwfSj|nA<%u-^9PBugCR8TWsCi{PSY=&sV8lQ8FKAb4)$S~c zHGOcAk@bbLMZKLO8dOArdk2}Md9sWAo<(*>=z%e6mA6DdIB~<{EwhVaZ8>Bx!;5!` zwx@`9(WTcQdo8L74EhxgPl+T($!{I{_P~|!=!_!$*9%GSK8;I)f_`h=IIOf`_+rH! zy#D2tx=6Yl&Gx^ay)eLRGYv)$hz`T)MK~|}D_#+|l>Y<@Qx)T;{ua}K7_vQWdEAJ4WyhD*Z)Rc89)?E1_YzIQOA-IX2+ zpU~T}LIA#wE&G~BmSKesB5hiT3G1VC>^?98HAp=DnrN&_h9;`&DUOa4MV+or_A#;6 zyHnk&ZvX~>%#&&cod+?(g!k#pRM$rAE{~LZXHLDqsu5&fpcVKCsubBZHK%&U|CST3 z{no%~{pMI;^-nYvXasK`h3l&-iAb>bAPl`cjkGA1gsG6#H65hfyG5WuAs^B1JH@BK zxCO1FXc$X+N_uQJ@}pz4lHqvZk8LhhEF0{V(Dco7R~h5Wt&ULnA|sM5ZDmF7$LTdX zo(>?*ZX0GKy(8@qn~C3u%w#2_0m~edG=zM^UXZqt1R7Ob#(zIa#hp^0*hb+~ojwC8 z<|}gy!Wa1Tl0-tDz8r}5oUC?9n;s8GO{Zs@5I8V4$fjfZ5gXKYIPP19SV)twV&Od- z{ynNGz|FIh2!!N49|`^>;FT&0O!N+R?L|ck&S``urk>(dV&&#G-_Daz4MMfK@f`2P zwFmY2Mq=a8NN2!Y0kj55xa@$waif_60l%<8Kp7l4HzoMIw_RYP0-w=f;j%F~@A$w; zD55)CEvAfJ;#g;U1z6{UEG!=0nj?@KS>%tMtC?}@su}&{!FL{U$uhf^LS;5QBp{@q zRoSb#OyhGSBf{E9vVjjpX_T6l#}JWVdpY^#1`8y8^pe!D<97&Ix~1iCcqPe5XnY2p zv|j-p)=(&^Vr9Y1B|qM@7>93VS`NR+``uc*Ev9-H`=!YP!@Xr{C2`yR^Yl`8VyQ$m zzX50ust*cDJ}2WQ)7W~+@v-L7agOG{%aCNZ(~w)@z8z&%^r=w|R!n@TG+i2i$MmoC z{yr1ad(;FV7<7)7uXM+MN$U`KUu(yq`ICfDEjI2YYr7tHP)s?gS$C~Vs*7vQj^s_xnvOfd3ZAK0U*@D1 zSp6TLVsB6=i1+SBAvB7Oo4u4PA7aM5JLbPwETdL9fyMv7Wu6&)roBc;w%MgVkh$*t zPbc_m7=SDpf-kXkA<`qDYSiKOVm;HAuV!~I!cQGJz7<7|FZMj9d!0ikSFh5H!e+uB z>G!DQN_{)c>J?;%m|rsG8H>!xZ=PV;KoPI;{aRS$8>}M{9dhsmY&1{Wp`NvYT$HJY zoOh-B9cx?x`aUdG&SlvO`VHVSUSJsfi26Kqx$17Xv)y6_pQPvTU&AEP%%t#fmRv?^ zy(a9#&<(A)=>%kB0o-6Zl4h$8gj^V?=bql>BQ(&Q!fy70bS#WsN}R~S%aj%xv-8Gv z2r^U{Yt5jIw@>7zMFD})oDYcTqu_aQuGAntrNP&C-C9q7H)S43RLSTq<|Oe=SMwZF z8yx4t;E``Zxj@GBIsa%QTc&42r&TEa1<0@5y~;>BP9uj9vmXjJ+jcwh>mq>W0Tygn z9_QB^$j}KJxm>C9LcZt^X6{CaUg7;iQG6CJcAApv?#zVzD%W9_~8GcKL@@Y~L zMTX`mjs4hiZL0U6Qz;4&l@1P0z0p-=R8p@H_^ATUH>fkIRz>Z!GjY!_o$9g0NM&;7 zuA5n~J`x4P6nBphn%ETnXoi^Kl=U)06-bc%23OwVfKYOkfuw^IDJMW9#}uF79nmDR zz%;+qS!Z%sUOU&c=^+U43gjgeu65{w=(Ml6rcF3#_Ll`Mxl#z&bjOC0DgnicymdOK zq6=1=2^=FU7YjEF6%US#GhUD_IF;0YAFN%o>fY{6zP?Ra|0^#FnRODC+eF0fy$B?+ z8H!7p)rTDC29swAoF!z%-n}n^0!%~IX;$$Z-NL)aef>?VBZ+}g1wCzzKd5uA6$}G$ z#`6p7ZVNbAupiH0R%^=#u4r_`ORn&}BF0z0eL%r|reu0my}*&$*X1|M5s~0*D#<`+ zLTY#)9idn9w1w#h-GIw4EN_~mEy)6m)_Xsx=hZ?G2LzEy^RL3w>Ji8ly+I^(nM(cc z{1n_EoiClQ<(?YHlk$~H9@H;!qO^Ob>y*|CUbg0=dgwJ=kVDNj(PfH;unHH`$)7a5 z^%l?c6#i}q4|Y>kG^da5y7>)#lH^PZ7HGs?^+D5Agzk@vd_Oc2Ty6u$B_S6p7f$Wf z@U~IAY8l70O|_;X)L*^B5gT`E#uq8*UlT46%HOeeRdbxuJaD)U`c?LTFuY}&k#pnSjVZfc<2$FEbH^mRf)JjI zYssIa!xp7L(Rc=434ONC+3^Osnl1oiO>SDXohmW)28AE|wXmIjJ(Wd7DvQrogxVpO zfkPq(&tW?3tXc)Z#w7fZ_f@?`vNTEL8ZoI>n{dv|OLOBp)R7kOGEuwM`M#aM5hSK@ z+e$rAq(PnD`1}ZPZIMD==Fd~jIwkW~x5bk!dM|&ieri1+dv@{U4SoV(V%g`h2celx z1k6{6mVecfI~&SCzf%mo`=f)7S*{$}gZfMB_%X5GD2OtDLfk2Gm`hCYaW5PZ@V7u< zMWAf$@GKDKKe5vqBKBb+F&wz-AHH18rnp;-vB%GV8|F@>R6!eFsawFN zuqzbvdMKkPrNC_YuB9;0q)<-z4R)(I*7dK>?cKzaC8%na;c}5nWC0h~Y_G(wMJ#eh zan~27P?KgEhEC{0JH-=KgGix9z!l57OzFTw5cLPxSB3-L*Nni#-g8*oq`cnCMLm$7 za_f~A-`vMA@f?;@PsG#hrHA8T3`9}$@ed!Loazt6j-)1SZgvx+$F1|E)#e|p;uEwV z!7!O>^@?ioRpV{elG{)sj%Y?=5YIUp&7^vgH!%k9vK6oAI;XFc0T;=u((_81rokL@ zgh-KRMr5JmG~8T-+anL%05GeR_m}Akv#BzH!%| zH2!cM6gq-ZW~TFh*UIcLL+QV{FJdve9A#0@b0GPxL`%i?#bcL3k3OGz%?MCqD&Rb} z?2J19lmD@zBX~daMNHIz-{*s9+JoX*Fw{`e^dLV$C1~|5=Zc|ObXH;N%ksfqIF%HM zaC{{#0A;d|n#l(?cgWYjTx%_6^0u+$4#6O{FJa=H&zBpGsMt51zS+$uNsyq8F$48Y z>L?+z!heOmg{QFN0fzAND;M;zi(I|Rg2;fH67Kd7Jm`b*f!DcgzEW{90xvXRgWsIk zLL@so*8bX~{OTHd#3W^z}4{5llPRfa(TknFXA(C!v-eSzqEyABC06m)ysIGtQxzz)g7@NS~ z94d-dG@D)3)jCztH}gZP^}NL>0q0AOoz+>0(p$+5Dfg%1a!5MohvTE%HelAPCsjr_ zp>2qQOLO=Jb~wanJP2Mnj{Z7x%ke#jKXc;2U@}64>G-%Q_m3oY!_;6#50Fqc3h!Nu zxS2m0?ob{>WKtclm&9AXSO zcMzl``*(aY=QwOWc$c`2kN0_kSt-0;g5Pr}M*l)9`Tb_czft*_noJ>?7$Al?a*P6= z!oAFC&cPuO@Al4ysr-364WDIdZ`t9j_ADJFM==rhjb9)M*ND2}2F(`sd(cL>63o!z z5>2v6Q4bH6*G5-B0->9=`&!*SO}hy=li1qu-c+b4%pT}pk2*YLR8l#`ZFdhFd08x@ z8yo!8vel1vwvspw+NwZB1SjzhEcH*6fRH@L9NiDi9WjpugSTYGL;zUXTvs4bWN0wX zTsorf)r6TLJjauhZhLiZ58ZLNYR!Me}o%hvYCI`sPt;gm*_Y z06KZ-sRz?G))B;&hgoyL5^Zo34)mb5*?7(zbw#sZCt;`3qL;*rG>Tn%vnxt@gM!%%!0FzB-+ zNy)SL_Nda5K6)W#;lnWw@uW81YY!(;dqZqSrMlP~NlE1|hLTqWs;Ir5yNF$Nvc2vb zDXIPl@!WD;Lz7282j-9R;{^q(T4uC}(g=JOtZ(rc=`BiiR*GhF5D#oEhs?-Hg^*I8 zpzXa65(V|1I`2=@H7Bmac0ef%_y?KwEvBr1=l8vtZF1nsbb)cKj$+(^k>lYn}?z* zBYkegq)*5akXhdMMAuLPH7-_K>;zNSQ49_hQ3Ws*0+85KxBLZa!s9Ic2)2sP8mF8u zt7akr$eWchUY(Xv>Nt)&6XJ>+O~eLyewvPj#v8p9XQ;$ar+iC!ivIR-a;h7Mjzxq& z&!O0)#C?MMvG1^U-9VunxLvId7VG#~uN4Q~SW=A6=^@&|Cron%p7Wu$JH=aAV`{dp z<^mH>7%diYP3S!oBmNr1`rbZbn-rhq=z(1`GEbt%P^o9X8#>3Sd0;#pb8oZ39{dRZ z1k8{cju2Q`K8!ya)c?!p`M()J|JR+#3H?36K-W!npbEPf+q0{mT>Kya1pWUxKFIh$ zP5e(vls+X5iD@+dOya`M=W(17o}_DYV_5MkXcHrqKhPr9A^0*95WG z{R399*hFE4a&dOcwN6V%Mx)z7S3}qQa0yM;m%M&~3znJp;FMBnFI;#a4H=#G%Owg) zytgQejctT@>>uC+?JFF`A{{RRpiEH~N?y>rT2l3xUC&S^?gg<`oDO@KbNx2){ue_| zCCHHv$uhqS&e`e;st#+gJJm=x)~;^;AojmCk>_q{v59{`a%;S)7OOYdY~&mR|McQx zlS}SiB&1 zGQL2qcOc_ia|#RKTm5--0E}5)Rk{8L{7iGBMQ*S%HzWduSfeKZ-HP)W2pZbi}I0*VI=&d&fudOVheEnC7t-C%B!4=oyDmYUY%y zZyf+h90a-)DIXP`el@-SIfGYW(MGeiPzA~qxnAx_g8^Pv*;b-jj*Jo@l7+9#rn^0Y zsEqn!6_Jx}8*25%KBDM;lM&SeqQCIGe>j7(0ItnU+k=WlyNZDw5RVw|&=v+5S8!O0 z?cdHAFZ*v`I1vdyEWUhjH7hUU zr-vU$2Of??0@;9yCNyZQRL~@j;P-CV+TnA)o11s<*Jw$`ii~OnmM-va0$umLz|LLV z&xU)oEA`ybu5n=j0L>|B6F^84QfrxRvmJA|h5Lj?PIx1M&M@fkil|{XM~s@RcGLu- zH5W(KXae0CpTh@-{bRPD{TNJ(d0)HT6H4TADHJ43<4rPz%@5gC7BDBUzvi>#RVdL)i7x_bf<3=)RbSXplSRMw4&pRMSq- zk$|&x>H0iN^a>ln4e?&F$SDKj={x8gRiDMNSoh@Woa+U$DI$Uk64tShvl%Rt!WV=g zB|VC6xa@GtIH3%e!PIh((^Ippn<0u9G19s`cI4Om0|TICwz(_4h6~_j*U@Pm zXlogw#Rr%U_g0T4Q;I$#*%ne2wabGf1e;Ra{%u4^4nN$lkdpjE)#e3rDS1kloixnx z<<)YE3kUL8Y4SCflD{|YfA*Ts{nF65f>3+qogBrSs(z7|H$4Vy_=PC+F|=b$*s8dx zETyb8RnYdg{*wwg;#CeMzZ>$6T18F`LR0WT8!^eI`<(bk*O+X7KSXDe;=YhmHnAtv zl{a#|VWb!I+xk&rg76(ydLRFWWjEvmYqac35r4morXP`6W(BnuXz$aqE&^f>%phkiBjXyQi8SqXFMN{n>xQkimjK&PRO5-7qg)wt~X8LuVTHB zVN^>UB@0FT>TZbH%nB|qTr<8w_;ALhbP2ud@`qk=ps;a@($vWY1=vbYedCTUv$6b^FuxMO)LK)1@bzGWSl5Y6J> zg`43)Jy8L;AP>E)v?AkfY~$o=C^?lVwuPBT>M+|qeZvav83#!;i8Jfi-V-NCk8en? z5w`K`k9pN6&jkI%v*okVb%e9)iVC*x3Nb>wIR;dY-UK@=ikB@#TbfmR<@3(1ij!b! z>KGoihA@|O#M9x1Ma^^zw*Hjrmm?QQD5d)#ljWLPe52Z#*Ep_WYS)wtPt%=RzTa|{yZet1|(-Xs`s#1ltfjfX!a<78WP0V83IMy6E7^5zq zpL``)KT8IEkk-7X3q{I0XR&lydsp08Nd01o?Oz*tE%-FOGNkL)KmMaj_Ixl>QX)2* z*ukrfpe98;R+$iYmJ0XzN9^Q%&>uIkb`IsQY0}_fDjq$&u2?_jZ~Gwas^P{}G)h03QR6LAqkv-)46k zdy^B)bt6uMMMo)a-QpmWrMdTUIC(Zpgv?KJdj)9c8^R->gm=p2 zy7v*>6OT`xqbPX8;f}q>%#B}meGq_FvoHSV`UmXKWelfZp`H(V6Xyr)_fqh0yx-y7nAvwa0Vn*gg+*~aOUq$ zsxg!tE8Unt&pI3&>XHM+ICt&$_wHV-QQjCzU}r%Ec}(*)ovnOV$m3SC-n=|b^0<_N zLc3p7sB$jV80`F}#*MPa)?W6Fr3p;MVT{RzW?z9H&$=2nKTa|aDFO|{>E#Up)rU!0 z2wFAdKOV>P>od0c(Qw3i3S|`xFwC>}cdHcuDhA`KC$1bZl z*eWewdMD@%_;8_?CH@pPt{a$QCtu5YRspik#n4Xf?t|N)G6*e975yZ2-VXm^c-wtU zE?ubRhIAK&eYbBG>(ITbuKdy1bE9lp^T(9b{2q% z(jNd~?R8J2)6A>4AzZs+_xZ2|jYqI2 z)h+H@?3LG17>t#%5+s|Tg7kC){PV4*X{a;*;j7T$B&{?4P%4EVvEWagDeoADcuB&# znIgv8rv}0n&pm$pTZDzF@C?21u;V)Bteto`O3PkXvB%BW@0RJz%Hl7Q>Y-$19P_pd(Y z5Yxesen1ri35B(#E(YNyq-I1umfM$2x=`mfAA)Qtfu=dK)~7Zft~Z`_WAkDAXp7gq zqc6Rih;S~dca=#pt4~Xb1%%MmB8oO~WXB5@m72tCGjhAGlVraW7jtrc8Vu!yVGvNV zGBd}A(GI&XqP`#hmeL8FNsWp2Hm1fFc>j`2!`qv~czp%WC7Ul$JVgj*PXn7@UklRT z7JEV(T$Q#`P2&A1#%Ui4*ix;?4&B&eH6Wc6%1VjD+F3Wp0W8VrTV(_=y$lHowK zPqmTFvg;a+b{5*9aMmisQc(O@K=Q2_5*41zQ&7{77x3H?JCKtHpMaOfAmH2#0iLxYypW9|s>D{N0k}vNCiAE{{>35#_&bjpt3N7{Twa#j+0TVA-i#v#=GQ3_LW={T=zK zD}3yw*<@rrFggqaWU6};?~7P*7MZ>N`r|NDDR@p99L6-*vlQ(YO+@ubogkJ2SkQtI z>80GUWYmoD83M3&vXErJ@BCewDUP`J@EaddF+QocItBh_H5sC&_6iDSd9S}i~usu%m>e{l(EmVM{daJMS zdgWeAmO$-77^&i~xCne5$MHSp3&lOhT@0({vR--ZW(g+R$IgOI7`91=L5%~#!Wm9s zTbMH=zPMENJse>cCIiI$_S1W}x~m7ExYqgO8O-@c3Z*TLP3dZv#2{{k0EDneZmc4y zt_J!(+uaAtyYg%SaG zIr_>?b$kd;*h^eW<9!O#Z&*9;MTvQMG9^eBEHp;mhL}Q2 zf6BRcaMIj(prKqeuh19Uw=1YM^%Wq@=JW4UKPimIk@yp#M52M?cp>r(v+1Z(IHynR%-zN{DB{^JwiNzUxK`Dq^^U{qPCN>4 z?)`gv3Hsd*HujsE`sT7W`9WgvGV`rC{rfj3a+NpQ?G8UE&Cqz|08Ln>qFHZ_55CCC zXPK_H$3?ZXF8v?MGczg$+0-YZyyWf>(cKfRlb~3DaRWlF&%<$;0PR|lLKK=?^@@`f zQFWm)%Hb05voLqFO+~oPg#||l6OtIkSDwvd{(H0M=vs|bhWX2~v;XAH4DiDQs8coI zNXcZ@{vmutu&Y4>wUD?7hz!)649xtbqEjIFJW}u^TegOhV&N3Mxq=Vc6Pt z?{e1+O`&3^;)3(~Kf&!UL>g%*%XDek7v?#LiARu_Ut3&ZeSQL|vMO1sClWY}Lh4C0 zc2e4gJh7%ZovV@>O%>AgJ+1wzGUrWc<$_b|knW7}GV-13hx%>R8Iuq$%#;0v>kR(% zA=BtgujnW5^!>f>)(>Bgw2Qg2$W)t&BlMtb&LI6+%(_6O?r1d!cGeH>1a|v){V$mu zW^Iz2V&9I-)Nn0oSpq_&o7@H9^T%{rGH_R9@^~hQ*fgUmeMG^LPsh0~#;Sq@fG19x zl@df+9eGlC2)PTboJmME_4%aCbf$%=+LnZcwVHD3+0EXbq2yIa4Z+*EzNbH!$ z#PpgfSfu-7q!nQ~3?n+>?bP%yW~jhZB|a^UCa>U@=Manz~= z#%^~jV0^{mRwh}a#>e+BJ#;mdh{{NO`jc5(ikksiok$rtf>f?`<>31>rGV2om2Gm^ zH{*F5Nf?y~Osa)mLjceBQCu(oh+{F_B8<;AsZ`Du;+!XR*cs+e=j&9|(Y|@vw7M`q?cTM<&qK47nbPYST|jsXKfg@S z?Bn{DyQ&xzPu*a>-X;Gg=0jg23!HUNrxBNqht(RE_u4Y>eFBC;uj_xcax2=dOI%to zXtV#pRN@urftq~|-jPv?T39PB8BMLKv~=P*@=w+39E-=%FXZ;^A~kfPW80Tuf*?yq z5imah{ViL#q971YOt87sM69+w-^7Q5HyAM<1Z7JqlmZA7xR}jqMQ^Lm65~VAARi_Z z`T$@NGf2Y3lWi5$#_krgd}R|9j;%2!p(U?X((w(oBxS_|bNaB?cfa%Y`oBu*i%}bd zh(Ju5aWtD6#i^f0#ZMK~U#*`Q)0pCke1h#+VZnn@#;;GHBBE`3O!?yoU-2CE@21&= z2v_u(iip%QK#YjNJgepxE_%Cbth`;qMCP9p7hM89@~dgkz&0l}zv8i`OjxO=+!Fvl*rF&JM+iPjhWa*-kuCtzQ%&=jfjpQpop zf<5m}RH}*F9USXQzN(-Jo+YFFG?_pltF7u6vlrl{KSMro1_0(a>@GW=) zc%K05UW&$VsNw+Xz;+J=nbeQz%f7%3EuzjJ#&8<~BPGWC$V!GlHaz*)#%%ptmE@*i zbDCQr>cE%5{r{E?yZs7Jw>9kn@>Ci(RvL z!26Ln+C}{Fqhx|j&<3utPZ)SV0%UdpYPJ=`0kaD-9Z+P`92AtWxfbowM0)K}djK(U8&D3)W9g**Q*yw4-)4jLP_)eu6=v_@NN84fMY0-kOhF@R3XmY5i#L|RT_+YDLzYxH`f7=LBitG3Ew zZovp7YynSoX)j~0mNM|f>dK4&iw?->=4acJxi!U-x`QN>Hd{OVn%HAEEezGKdy0?eFCi$$P1POxY7!V7IK!G}^xQO`~+z6>&# z7wA?AaorzW(lD?5O=KxDI92N_T5;4@aULP0y4{U-)l2Zrp9#JN^(wLs^AopsEM25u zVyAUTAJkC;?;>!?x1~2xa$*o`R81P5NeI zNoHB{BF}5w&i$?CSw^3w+vdJ^OOT%=C=Uxijhe z?Qu3m{(cC-DZFeAP@*T50x_90Pzi8x;j!X~vBLoVd$rD7;&5nBx)9sSc1uB=x7*G_ z87pkoxw#ke;4)zoc)X@xebfJot>BQk7UcC{l^<9;U(3o~V#dD*62y!6- zg@A&$ZLjPiK8ca`1thN(ITc*141$)9P;}*N5T3`i?+FN<5a*xu9sU{XEO@YUm9_h4 z!hR|gB4tj#KcXb_MLBW%&mE@SFs*QCky(4@oNc-0nHd{~j6_%?0*@aJoWaZTB1hP(pu)f=u@l$H=wVCQroLG>Z zB9fbqXAZ?A;u6xJ4jCh1-_3%#kT`wWo5dos3Xsam14o5|LI*~_?`0#p3g-F@u#X@U zNFjeihqSe9CL$>)bT4!Ebl5J#=BgVu+paVsl`ixb;uS1+@%~kjYWQM1Uwxk|8H2d~ zC2}65sCxH|(&Lr$lO1#^e*ZF)(NY|lq~xyG;gA6sjn5qE7RN#9qe2U5hHKh%K-a+9 z#eI=w6(}!Sb))w!Ip(*(_*T4ZD$M9)6&MyunNrc59(iT2FRBlds*G~4Ug~+LRE^#v z0P-mPvZgXa8QOE4ZkDkqtm-?qYwCcmY?O&C2vASyGjD`4&atQabdqd5%4pw*o)%za z*YD`*8D9BE$uRV?$B0=)r~*SV1(4cD`#`gJ>A$8d&k^859WJN|?T3s6d=3<)kjx=X z{xV1JB1i-B*=8x*N^>%5D$ze;kPgx~FL&piurpM!kL#>N#Zx1ngP&BrA|+XAs~uufo_Fk9G=5u4SI^Q?Xmz4KF0hvTUftvi zqJ9@ZidIPnFJwa0tqeBw{;<;ilD89#+Q{97i=Hw<{M(mkaq4gm-?FNUqZqpZ!;V!{ z#MHBDMTXk+?sXRKNtEFlpz6~sz!C(hF$$L{RhORI)6-%k)i=s z*X3pp2B00CN+Cu-e9s`!S!k9=ivZIg#~&-!in@ZvwR;pX`J^GNeti_ zg(*Q|lM`z?E1d&@SKNkkgg#htr_rhLCO*3T_?Uwi>1UBTo+|OZmJY~LIFK%g{w?bg zK8rCnl+BUpl4qzl^Q<*C{gij5S+NL3@qoe$j$k4Rz;x|c<)t_Z63e(4Amle-?ou0ZDC%33_AP&!4Yf@)sWHok$Y#4x2L22os& z?5`CVuixoene-P0kk$0@3;Uq`pF%AY#Dr%Go3*`&2>rZxEceBE*5!q&G4jLC-wZj* zBbzUIIwjw-(453p1xo#S37U|ZgMAsJ3qHNOa-=q*0L&y5SD~gl8N+o9zb4dxX?f7u z>@#ZCCd++&(i%Kzf7Qaz$8LS=DN0_WWDFR%+(6F_UZ2pc<()2ORL+`|Y%&EASr*nWgb+GZUv+<*$t83$EouSf?+VTZ1%(B=I zeTtHl@|QNcv;0GuCXUmk!H!u~8bxcKBS~SDYWn64B-im<4bqp8je-AS?VMsX0orxj zwr$(CJ#E|ev~AnAZBD!UYfam>ZF|rD_epk6axPC&NnO@WB~^LzJZp`s$byWYJHc!U z;E}VzSQ0Qpkq~l>@aCp)lqNr-8N!%t;a&;b*-B%bKPDJ=YS*Ssf!7U`np{KV$2?L+ z9HaWX*a1gG{06OA2m_3@ zNe5!^;7s)4R7KBYq3#A2f{)d%zsO~;BPNdQT!E}FxcsJRLYGUA;q-z2CNyFeevTPw zS}gtmv2iZRL#7xp-b_D-a{hyn?U?yo`NuGc_zr(+Y*tFgKapYEQf-cW-O<#;7tc3CmGZ&6ewURch z%S9Gse3e$j$-B%``Ru+*FTd$QnX5hRf(DxA=uIX}u8nxX$MX2>3@$OXCoktIm2Q}> zr=B*wYm*|Jy;!r7PyNyq&!i)bwdOzxbYQ{uHbkN#cd&l$n5N9drR@T)8HliBKLvw- z+3(>&h}r9H&m8>ADb#>N0L}%O5lUu_IH2sIuWO8s03>FkS5P-qtb4VVlX@XrY_f`= z)JZ&~MH7mAcF$1EHCm%|sMG4Bb^J6jOk7BSy)HFt@Z=3NMgI0vWH6gpef77PT0P)u z7u$hej|^IDiOZx}T)FypvW=chj)J?9=2-8bdZ@E8tQDEv@2%8M%AgZDpz(G0VLX>U z{lYt4cfoe2XLXE*)Tz|7Z^(P?4aaFu7A^Gr_H5M3k7%(SDXWRMeU#2Pm(Ek%hx1ag zgkP8-(r3tp-KY@O%C3Uyae=VP0eGo~xR|p_pM)V&^Q~}EZPzn3gFDvH7$dP_0fZ4? zLy`=;@a5~g$%}g!Lo&NMi};?lV?`DZ#POhnaz})5N2db6CwZFwq?rLvN*(a-QFy^^ z1qh$7`LqwM5y8hx%_wp?usV{G{-Wcp`E=OIk;gY>Vv-_?SZvOg{B|#BSf8s84asWS zdl=v;!3W`vUak5Lc@#sS>Xi?kc{tKH7SZR~S-PZZZm)f;C8xKuRpi1RqmgOjicwTx zlvO~3OGAdQu>Bip!a8W8%^T)|E|WyXJ6Khu!e0FfMK>E!%{5o_Y5%=JYh;;48c=12 zOs|vs{w0dI6Zsr!tDaRv2sXQxMy^SC=@v=a46_tsTt&Z`{n$p?FIyfe_3(syF;=3`@rd?q{oas`ax(U7>k8Cn^(>OW%T`9-=LfE-! zzg{yQ88-zcXAub(2;jfGN!Ddn*sQQnbU?W%a`MmysBEv6vr`)dbmji}X$nJ*b-%CB zL;C{6#XeZyviFpqRLjTpW(gquaJUKU3U<0LU4fUn2q3|hWTxgA8!6|x^* z9S2L)cD@xv@e8f;W6Ds32)X2?CFp3|TYi4yZ4It76MZA8jY?V>SWbSWL}0$2*}EhU zO`!xr$k6lM)L(u5LSRC6?|d#lRxr>2yc`N(_Ar*GH831`H9ELRVMv&ykvmM`Pyw6t zGACXIS`#7@b<9M$SEcLY`*KzSbRl(HyEtalno;6Zb7!e1O}ws$jMgCqk*Au90TkDN zEC8g0{PcRKmsZ1R%d-w*yuWAsv6d7A-ROH8q$2|)L(vojH-23wdos&=m~hSY z5F~l{bLx0Lkk@^sb0-bzDI-Ak91?Vcxl?;ua^!!{nN|R{OA7TAE;3f{vG5Lm2vx2` zjP)jMwpAcD_%Q|;Sg%=AZYD(YS&TSqqsQxC0s_kWI6=>tqo134YI7y0Tb136To$9> zRB>s{564nMqo5BI2=cSsyp{&(C(3%F;w20z$SD3e4QI2i*=I&VXUQWC_#tt-wk|nYe zrv7gMTBnueL1I!WgAr#%imNj7t@!(H=NDem07BZ1typKpfOeS7%v{064@0&47i(oB z3=H8Gf zNZWcv8t=wiA0gIP8&$&eRUjZxpuJnQzR!9r6T;#}aIvbh(j&Yg^3R?AB+qBYNnr5A zVO3m^Zk)(QlX{tn4oIAGa;P(YOUtFK5(@(juM{2mCtN>XJ zKa3mL*?3&U6W69Bl?;mApy75O%OA{JXUl2Ezl|V_+on#Gvd3c8gB{=mhCcn){mYz?hOa)m`MM&i4pxn<<(uP&@Lt*=lmlP5X1>)~CKvXQTXA zBCA0-7X4ko9*e(5pVbmEynjAMgsOw0+?UrpYs4OwoUhmAlhjv_c*VB50Q*OBo_V

    Z=QHViY4ZJvSHPaH6pnmWzZV4sFw6!+cS2n((F+~N`eJ1GZJCi)&%c(W&<9$kyAsLL@N~o^;SB!qlz-g^+^s&8K=b??+SNXvW^$bF6gp44M%>ISEpI|z99_7Sdvr@5&{j1^+E0G z-eTiu>Kr>G2ftn3mWxLp9PN`$`I&qwl>`)bNJ9@R1DtURalQ!?8<`-h^#n8&(QhB( zV07Jdb^_TfX{lt65Y4-zD5vo@bO!`FZzOPV>i$U`CF%zcz2%9wh|vS^&{A@>;$mA- zVG8JO;}d&Fw#$x6*yEw97w3WSj5Ka`N2$+mTo<+Kp#k#IOE**#L@;IH{Kc-<^TnWVSyR~`L{H>QIKEdjhNJ3X zxQ|DpWs2GW$X+$?rG!8|$(vOE=PTke&WKXWYL(B}^cC(%wToXB5eCsoy z;cputJWGL2$I~IF-M`_!BXeK1y!a{=Y(}CGSf~)*5@%eXuTTLG#cshY4?JI*M#!RUUGY9pO!9r*kWc;B0yF3VN0 zjS8hm2jkO2H_$zd1H=gTbSA_+@S|CSO^%AuH6p)D#nmkCY8pEZ`TZT0ZtAHYP~+rX zXlNpe*u)+_lGriIlhdHn^v!<)Ig^ZxIYJ;xYl3veRh%o5Zo2xlmQ!0=1-1{*6Z!*G z<6!Rr_Bsl!iH_>*IyUYZ6|~9jx6j9&J9-SDm!-Jn$#omjYQ^=XSdW)nq9l<+-tS#E zg+SD!1jKS;TlgmwRytU6jiV`uv(+ovILqP3Dz4eS15HOLg4XGyXqf?mij@%@8I)DF zED_B~zZZ9a3?*BMsEXeIp>}F8Uf4!V*%Xsk?7Uwiij0Qxu-B?=NqTCleaf<6yUEp^ z-q3MFj_I|#Lt=FGdccsuw~8&_Fi*wmHbPwgL5ujc57{f+pWFfWFz|(B7z-p zfIOMNvq&X8Zvg_eSA%WkOf7Kc=1oJ`EbC;nD|B-Hq$iHinFw{tsXZ3Rv`(E3_ie=o z`lUb(n^=m~mxM6rf>4p-g7VQ(Gm~=XvR71drg|aqHjV3m zY~OpAKjLmAX{06Ej)!C99xR<=pG?tD-Z`|2x zNO97>{&B+@S=O8ar+ZOtE=~NM+NyDBZz(L@$owTR!~45!*=YAuh|Fv?p!TFm+-4ar z=Z9*>Rz9HW!NGV1Vs#M7#|YOQpJUKZYa4ctx(u%1CBVKQ*&SV!kyczmSO-#*4dS$m zBk@=*1Iv*hq8)6itNY5-U??N%<7aBxga{eVC)m^1$5yfB^qV~%nC={(s$l%@n>UItFaPSLiXLugT5$Fbjgo z90^`DI(TBKMd_vJvaqLiI~EDCIL+QvxO8Sd0CzD02A*r#B_P$e_tln>VR6lald>T;Z0qY@`@>-@hQ9uT# z$tu$_%p#d(Rf=g9jj8=@ucR^xI*^s^M&pUeEj&lk@kQx+4iU7B?x=lw3k&bn#>8<> zr90IR6IgPN0B*SE(Au&PQbLsUHD`5z811Ao>2V+do^X064d_9?FAg$}Fsx(;1y)F8 z`SR7n`f|N{m;6YDagFRdZk=88isL9Z~&XsDrP{Hx}Dw*Z_)d%ySa`U|8G>su}@`7Qd{o4X!GziCxQLpv|*1AoiI1sQ` zQh0vKkf535=%?M_4d&Zkl?N!F&?Q`TDt}|=9P%Aw?i+l<$d2Z5=3DKoonJjV@M4zC z<1OCSH7xvYKV(Ka_8#<|+TjITEL;gwf$}AD5N-oP)e31cBL+8N{zU5^UG@_Tm~mE@ z&pn=ae&$^24}qn4y}!6ZT{@pv z@&<0;UUKd>bu>@_JKC~J+!zrnau)8^Q7tP<=5xScf0;{<^ur{}(!kd<3B>6X9!(pk zll$xLUF>j!)nw^0iVA)?DzS!Co@=m)Hcb$-(Wou3jAcFD^jq)~o#c6%09V9;J1MyL4v z)p~kA-n9+c$$G91)Rp7q^5Ab(k9i7&QG8<3(wiInrjxRVi zRI26;pr#aZ6xBLX-6WBpvnTMens=S71_aO&r?HZ#1NaHt9RL?Zv4jMTyxXwTJRt$z9;c^|SlE4Uf)ewDL z8rr3?*sG^uscPN~T(RQVsPjzkVmTpLy-La$pb4nVpU?q{Je*H$)%w&IylG1JzstAX zNUqEu(q}(ft;Z;R4HgH@LDV-kvaz9fidFUzaL(62{&$TiX5Hv&B5Rk{Sk&l2>aIBx z=qkYXVr}3F>ua@F_vz+Rq|r7IVMCytmQt(8Ga=60m<eXZ+Ben{E|tNP3Gf}fJ~F`cp0nB!}^qP{t3yX1YMt{TD3 z$8BYuQ4=;g%NiE=QANgJ^L>2UHTqO*D-mjUc5mdWc3W3YP?78+4whzSYLTTaYP~@9 z^@uf1d|0^h{<%*#6S9IIQxP<5nn{y zUFM)`uaT*|=W$_PmLScU7Vl39O0>T&)4%U(i2&zZ1z*nXZFNHwofR#vV2^5CoqZP{ zEW|iJIJhAL>0$+|b@H9j%^m$)t||Rn+__m zh`ZwpVi$sRr@lsn2vX8Ni=8!e$yQ>_WfoH+m*-ir!{dz4EEVs677bz38NEwf;YxKQ z)juo>sFl*e-+G{TKr54*?eQM{cz$6fsZc$1H(EwL<3G3t*o}qgXJfQLLWF-dX1-81 zJ;7^>@iZH7^o^ej(C?fzMU?9#%aU)fKzv7M7oz@?|1cPo#2PX1n`E&iR{7fua94Y^SB=vc-VK=D`NMGZucP(N zf|D;US~v?ATUnyCldh|nj&{SPNam*hT!&z$EPfUu(V1mkBivt@g!Q_Igyo*eLH!+J zrdf0D@t$Ao7xmIKFqXOHq&(94PC)UDo9L01ZfZI-q?Lp5(zEO>k0S+Yuv;Ob5)rpj zAAJ^!oIh9dem|fT66KVb<>^yuM)}eTZ3xzBti1nyGhRNBQ`dH6!JAi3RaIi)OB4G8 zGV4fk3{3ug`3*5JL_d%}nfvHyHXynuk2nnMC|ijmsyV=$*P{6hDpvk0ZqYFv0j56i z_B35NLx!D(LoC= zA5~uox1q3G6WH{iSJ+FLWL0upb}N42fat@O=%@i%So(;V!Fj3bt&HXJGhXG@fhJ&T z6wxSHf?g8L;oL)m_9;`HkxCO~naujwf&|+^ejS17Qr;_tedUk!i?z<)H@CDqm<(rt z{aFwwNQ>Njc$+cuc=U;?^0QeCFD&(ZTw{du@?(e%GJhpgyYaG=6x?nM<{|)Nou zfZX_maeL(MI2ll@i)W_f9|x|f#&@qXT@tlV7-nx}NuKvq!7{OQ+BJD^^@Yx1eH2GN!pZ~u6G5wtMT9%QWjMP;!!mMfa}CIs4J{m z7l!^CR-TN0IDyxX>3;CWDHBZCoc4~gz)Bes*LxP(jr#;N_2O*(j%U5Oo(c1bJn%A+ zy~|bs0CU|}S)-ABFqPg#^BJRVt^*Uk`tLp6aSyHIrkaw5dnDAK7UogaRi1g}hu1>B+z$gULv#;+F?w2|kj+O68Jeb~k*#_~-Z*fQQUS#L3K9VaX z=mX7EKPKjH!zP+b@rKKfR8UQ_z10p$?B45_KU@DVQ3H?>=jdb@dlO*dW!i`3+=B&T zR-CF0u)eahPvFCDMZ;@v)f}30=bcf^`Uru$n6(=mTf#lYEXB3AVdG4y>{3e2WF`tk zb|3I`RA#ky1Gg_e#igP?CKK=M95eG#iAKsqm=sGIIlI+h1XkUgCp38-a^{KZeuY@tVzjf87vV5aoQOs<-kL>epIMz($;< zm=ogn#Gqg{{;K|a6;#VKJNH+uakF3?IwI}#SuZ{Fji3r9N<3lfpq*;GFeuBu7u+}{ z5^=%ErW{-qB!aiDO2Ne62qTJFB|SyNClk$AghX;UckU>ICBZ2lv7U$%s@UkM3b;=M z*qVCNKnYAP>LCM?SHa)yi^k2pn(!LTho2uUY`TSc@bg5t^ZSfEv)BKcTmP`dKm642 zJ+wwXK?-&meW$?4+xfk21d}MIun4+ze|&;&yu`|+{57_yz`NqQ|DsS7z%U^*JMf~% ze3_HteYy6v+fo^>>#|aRYi&^Xaq#|9>b8G$nZl9^P4J$YBV9$*LS?FGhX=NVJ@dp^ z>;x9s@frkJVG4GLcso7P_jh=>Do;_oi_!W+n!7!N6!kVwlBd?8hC;7-73{<+K`iwA zQzr}JD{7UUy{ z^+B8xO?aq(9UVPWZ0uA0)uww8W}C&2I9k)Tvlct#uD5A^%s?LL^EMQAVGQE(Zv@-~ zJ@{72!y#ZjnO=dQoO%%n0lqK&F*+SfP(g@S!*`n6Mq6L2ZD8{>Ol|^a34T2!QQy2d zBtyL<#unqrW))0>C0B8jacp(oSaeUFN|Yql!wr?!c4a{CK%F|6osU%INX|gm)NzgB zMI2LT6Mc#VP`%#qa}rlP<@3ymFBgo35qGstB&{nI-*87-FaTU<@Xha>bUL zkeFVD^kDPo=UXF3*?o=gnIYK_djKW+qt%+2cQD)u>pi0FrWY!hF=i5u3J_7oF25G#k}0|xWpfVhmC%xGOd z_&UVp(t)g_EZBEeY%xiEM6>+J!nRKp5ecxRk4(&;mHY2bVii>8I8>^>t2I$i30W9s z0RlOWgPEg}``uOiLS1_DZ<|M?#))B-8_?1vHk=B94(?EtmpS@yye9Hy8>zX1=^#mx z#~#z9{$&CTxv*K?<sfY4@RZ3UEbl#Z z+;m{Cutcsg417WIVte82r#o@pjowd{X$++=1k7W@t&qgQQ^PBykbXro{x2`T&iWFO zUpUm39SbfZ|5h7z2P(JIe8B*oW!<940RUi_nkf|;C_8W~J7qCic{iv8v#6jdNl#B| z6t~h{qD?M=6x#}t^B-r2-I1bG93Io8dxcaXjbx$EKt@yI*E1hqe3a0l@->&sq?XFr z^KS|zqOuE+&Ii@aRF!uIVF%vP%eK-Xix&x_;Rj6}bAx z5A)n*-=N-@x+EmJtem?ZfZfF3&pn`c5Sv`A26j)S`l`}`^q5DNni>r_m*JhPJ=|R5 zhoaAI!gkok!tDr&V5&^}u{wmiS^j*l%+O=307TJ}iMYk>7`)T9p@`>w*;d8zxv_n; z`1e&aaqBFb=KRmV^wLz=oY(0u{1G8Z`Qezn6+sWvjn7H$N`Dr1G*jJ=b6r~L!0PwW zPgN&kl2_Wyc=AJ6R6>DHuC>D&103%z)+$Y1^sHGGz;kKrvsGfE)UNwWVW9xr=+N>$$AXO%{otQ1@80lb!#N&Uf#Q(+%$eYvCw2n*s>MSwO6N(@S zu~tsHTd*IR%QA#{1^WfH!EZ?X_0vK|=|$jKK?IN=|Cy?T5D&ew$hWbZ5 z0~L~DzcPhjgt_60sSq3k`}y zbFxwN{-c%BYoS#iGvJ9($Z3jtP4V|vdj3X3Zg+pL}a*MJr4o3Leaj&_mH$rE08aLH&js8}OC4dXZ9*H2@3hxBmMkyUnk5F^60YiK-%~J2@_uQzpb$a?A>pr;;hQh9OJpilA?c=g*ez3yN;< z@XX405Ifgh z!n&|%?v}FQ)OD-%umHdB8#QtXJq6($BctESVG*3S2K%tT2hh$1dQp=^SLVUzXWFwy zjd{06?p%cc8c}B>WK5UO!}@RvIIf{>4!*4OprYSDBe5`~R~6L(F9Wx7wK&EtX|-7omG2YIsVIeT$+{$3-M1<=UJT0BoFOy%50~3xS-viM zb1M#5;gYemX-%OIofumqo&5Z+?L<(Lt(CAgS&^>5*fUU^ASt z08c+t4aism=Q#H`w0OtyvtCZ79M0;^dWB;{v2rgSGKgC$uQ++yZK7|rjrd>FQjC&R z=(*ZmkpxFM1*K9xB3MuJ{q-sMpD7kbjVa_34$fFB9uR~fMQKfyYVJ>i@nOca^uM7+ zD5NY>WPM(VacCoD@ius+Wyg;fH(;<)Fa^+xMnTFnvcjgJkYy?Nq8X6Rvz_Uv zwMzcXAQ|OlYFC4cDiPe6u&}j{cQ!fn1A%-oBQeb}{q3RudInC@WIdi7pEW>XmkXef zcB=4;6iPPlouF^&;QySa%13zF6 z*Gp1it&Ti7KMHT(8&S2w?e@#66F|%{`Mh1~rea0RI%?n&?W$IM?L3ce>#&Pn_vl*1 z+e7EM3ejDI&70#mRhYkV9a20!U+SigIwO%Wsl9IiFfxhT8eltFoCsFBMTCb4X~G~P zIXEM{W@w5Gp5~hy&41&DQ~~BPRBDM#`bof?$I{FqIgWEG#%Z~ImZ}E>#;~ofLRRkP zna}A*CQTCc+Y-%Kzk$Ve4h5T>zzxk#5)CNEB;z4^?@SumPhEpWd~6B0?*pdZD%qJc z3#>j_85G&Yf7|YL7!K0`wd$v6j-*}X7l9a2oQBCP%6esJLoX^t!89RMbl931{U(Y2 zfxs=MpW%U6HT1Hku7vV?+YBE`J{4^lR|+89vgcaTlrSEjQ?J^5orr>IGl09{$7|@% zfl&JQ5c<|6Xn+NLRe&*!XIKfh8z(WsXR1WhkqQN8orIE%m32wn2K6Uo0>1c19>;j3lSZvJd`j9KE;n5v;I{-Rbp1Ck0P)Gcu@t#&Q6phqe8 z)>;F4JSd4eMhh~WrC7Y941lXQ_@}O;QOB%KUv`*-1aJm2U!Ir#OMlAv+PvDy=AE*v zPtJCQuoW(0ssLmDb#wh@d9MIZUAKg@)!LB}&T@}Lr~hO(%9M9~+Wi_?yjg5hR_u*G zoy9d4=M}IY5hE)@5VxViGaSqAg}_idLlN5WXt{2n3#>C*|7nS6qd{(@S$T@;lu)h> zq@a!7r&jc^ikiFPVA{ilPZTQvox7G`|1mM{BV{2xyKQsgM>4_Hfk0t4P(V%7>5tQL z?qJ*xt>*8H8m<|940doA`kUm1DqQFCSA=+w*gJx$Znb+WGL`{@;~&Jnr?&YZhYQVy z|67~aS*S^6pR~TNFz>G^QC`PT3C@9~&>W+Xo*tJOi4pFdXGkud9vpKRqXAwuE0J>EQeH(YaV) zZ6G=0f|FtJKZ+w)>Xt<|wdsC>I#j=pc%%V(0ZfgZckjQc3*oB=P@Wa4?MN`5q>DbU z5uQTRF9dtpfsi>Ex{k{fd4AGDKk?Ye4o5n4KR1V|&ow2pvsQPRBQWD~{BS3|nnu^X z_MB?qj`zZBi35M>2Dn;%#jYuAlAuL*G6Q<{Ayz9VPQ>O)r0-~}nqdO+pM#w$1Qx0O z`oZ#Ep&#KVSo?HTK6@aD?{-%~vMzXj6uf z4>7epRvEZGM&_L)UQ>x4-u7Xoy-;Q{5#5f6lM1jIBj?SaHMp-y8U<8~LKsp9Xav0H zMu7=b$Qa~|x9(I_N5m2?d#|`%lZ>;M&|f^QVkw^Gg(+pHcRoW*mooe#IoL?Da2W~9 z)vt&nz~{IW{p=Osy(a!RgLWFb)vpa@E-=$ zQvaH83|yW@!RkIr>sVJDLvHW2Tls~6`H8X0USe)gRFS{LQsqVliLd;c9~;c*r(yh( zDr8!`uFd#Obe^KFxEeR{8gJb{R#>ZXwFJzJ+jQV>3#k$I{S~S$0F<~lrozwP$w#2yFq(JK z=d$H8(L9(Q!Bq}-d}e8ABmY0d|AjenG5BFo*oL6L+u?F2JZ#)gqv}6L8`K9aWL!;R zJ)?H3Po|A(o#J2?;VgE8$+~{32(NPE3X9o>bRFh7^&DWJ|J34NwDMOJ-_dmN1_He} zm_RqvPY;$u&wzaZpwEPwR#JxYsq)q}b2$J12mq3D4BN~o)2Iz1Nt#XFn9_&u>lWZD zfUZ7e8pu57ui~jY5K@l zpWG`Kfpg&I_Ei$>ffltMbDkYqhZQWg~|2BI~`jZlr zp?ybIWAR$}!WIh*fp^gGx^SS=*#ae2BsYp1ChX=tOt-iqA8HYO3WDHrNGI)M4UF7n zP+AY$NN_Ve5443lYaA9R>`NBky=z+)%*PVW4rhP%bYd46(nE58ySMiBi=Fw`z{I`D zL4Tie@*>8&s*m16V_ctK!+Juk&B?fNZOi>m+o z!IJHd#U~nv{ubWERyUvcU|M#0f5y(IlCjosa&bL_mnPB89`Nj$!Q4J2iiLu|TpXh+ zZaxk2oSkAzJ|ljOiN)Lu%yMtq(}&QFaHubDpC>;%+@j`6gLb2DDg=4)d6~8K&>s^# zm)c02R4nbEkv5|lzlcp$+S1JG;rie)P&QVrqA3Co}ko z-{vGbCl--9qG>{LvjTLR&tb{8v*&$*tSxfDpiHEKQmWZ!GD0nfa6*{%5@%*P>AISi$*Xf%H^W74lD z$|KjxQ*75#9VS8;XRpnkGCTL4C2aVJmXGAYA_$5NVEtE5gz&=$O~{qFkPr!3GANU0 z^-wtd&N|Q1Ey5XjQ2pd&L|e>M)U*>zx4GpDcZG-jvDiV)MZwL*4aU9)dmj^m5$V#3PQqu zV-BW6p3}B?`-vLc9&zn4noF9U^%PB4d2}gUsdA;9{OHF!T9tCch~h0MV{PIj7do&iiTO_2 zOr*i~XuPbB=J*l!BVmAatl_u_@pT8Sug?N-~uHnWkaMIJU_7-b71-iZxccF zsAB;xp~P}<$G}Z8fBCY`kWt@|)ohlkv+v&kvzIF1I{|Ly4ab}|l!BTCH;v~FdwJab z(CF9PxifdGAQ0Szx!u+qgd*V880|j)YkZ#Mp12SkI7Fpncg%BS?IPsRrj321iu7!W zp-Uh#G}@gDQcOJSIcVC5QRmg;!+!yB>US0YKEag{*|+}ss^e}r2U3AtwEM_5Ckf}a zM}V32cW+!G@_cpwFND@%pY-c^Ep;YR?cb%L7mc15&WtUpua9h_8)!we^tT5a^GJ|J zA(zNTGRkQ_yPs--HR=b;$zMaGs*e9)d2Y0K_sRLjjHMI=pS%F5KU(ix@6*;!2y?ql z+I!i{B1&oV9RRc#KA?+YP-F9};x(4LD|~_C@6KCLTP`r_BJ6bEd6=WF*XEK=VjF|sUGgRP2{{-cMEl?)1Rt7$VN=9> z^h0=SWOGi%lUC&lo|UOhELO{}&szEWM!Pe4@VsxvbB>nzx5GUatSVp5)}Y`ln^&}s zqayZ~b)BwDW`Sc%i;L@LkJH30)!xtAG2&XQGKK|-Y&>RysR;&FU%%PH&f^!$Tolxs zE_ogD6h^8ll6Xiz0d%fgN2GI~sxhX6oxjicdhw*sjhIR_QQAqIOW_oq{<%lieZ9yl zHI5=Oylte;3HMnnJo2U$Y4W)&R7B8vRK3KTt6~B!8}eMA>In2WUq5wqmHK|ygdQJS zXe^Lmsegc9(OU8}aGtvA&8xveKavnpL4xX;)lcwDL0TSOxHESiBJ#S$DusEMxG%PO z7ZT*hG2tVPEo&T0*UP756?&_1wJpfh7+?C>A-HXGEEQIMrOsZ;5Jphn_{%t)63~&d znhi__T^Q`+Uw{?yVpSmCXZHvr?$~TF2;lCX^KXQerv;TgHVa)uZXKe>n=@P<6d6wv zJwaM1*1FF;g?#Rif==rb15cEV4U-G(%My=LusnAttrd)@Iv)QUkj#Ml-`c%O<@8IN z6rOYxV{YePaVAURI$3cB4sRAd81uDQT7&YIucd&ZfCcV4HqGeUO-!s99Hw?*7ZicPk*uQ%0QszpR0iO(V2A0uKr*7Be0R{Uo;+ZFA^1vHEtQ%=5M)uJ2HQ9C=S6}wj!H;|HII0G%2c7+WcvB&=ge}TZRsqrsm;^GQe zxnW}+I|~!~&FJ4{_h-lqm{z6{2pu-?z%$&Va;(_kA4-X%c5Kp!2Il*llml_q^DbaW zz2areX*_3>>@S&Xk6gLl2*%BOUpse0ioZp;3G+PIZ-mKu1@F%?_Q&yK!mz*GQbfWFjo zEfjdh{fs>z2mv;hhVs97=Oz9gr&e0>2Tb- z@MSE${!=C;g{g&aR5L;JUoC03Z68K~Nh&2F?t5?^=S1GgL0?_l9b_X|17%1>zZBg5XNI{NLm5s37F$u>6)4Yj zm)hT+epOM7;V%skl7?wkEWxUn2ZRhVz0ywzCa-#-B%XsHZX8BDg@gm?r~rKn80gJR zKAK%*$?Y#B@-!gCUL>zt#_PKi<}6C;D`j~u|7tG`n1^jU9`jWcXvp_mGe$n#6yMyR*=*sTsRp?@R+^s0IjpA{lC(}SeQ?8ycV^>{EYLF+Ky+pvW!)A#z4>azoLo0_n{b@ z@}*^ZVf>-7a>b2)*VC1-Tfrhu(4lnDfEal{mbMDbR#Im&a)nU!2KJ!#hTtUUc6fsx zQ%x9=mJe;MUFqS!8UMYi=}+QQ^61MQCmU^#18pXS5PTae>ge|`m9@#>;Ns|Fw5H_r z|Nfeis9(Dfyf5ae!fGB?>=jGMj-Vn4bBI%E_mX3q@m2jgGKsn9tJ#)ethczdw=(Ul z%8LNF;wJU|S7+xGTnVtQ(b&$!Hg;@Ioa{_&JDJ$FZQHhOPHbc1WMW$aO*DOZvNZ83V>r<=7(8Xi>Vtt!nCt<0mjJy04OGzMNyz0 zzZE61lI|!9rp|zZ)k4T6pBru@+pgr&8jBWCse~h->xFoGy6`QGc@zGt_dYglP`05s8#F&za93fd9^RI`SH>!%EFooU4GEaqbBf7Rsl@^fMv}x9TbFAzl zFG_M+yZ#%2{GA-f5zpG=-7=6SDmyO$jB&&P2U%O$6n2CHMyFY^OU3^ox&nn|xo1dIt~bH%RP`21nN$MX_Gfil z!zSFC@}`}*&a+ayt^%JrT1oxc>U>OFOT-#vIwK~Sa^fmp5SdU>@{+v7Ep@}6Z%RPQ zT2RhWs`v&m<7=WuPsWuJHw=WEs}EX#?Xk(NUYHbWb};cNGaez1QT?9hKK}C=1`A5+mjk2LexYVpwo3Pz^4y;N!#c^U|RThdDNU1QYmGo|8 z#!!JByx{wqB)nKkUbvJCR5oiobBiUg9;2`^eW&@C#vYY_=no`h-M13m_a6zE)L<;B z`t6158k+gu8i|P<8)?zV6Z`S)Fb>REl_Ksxni$CP10Kg4+7Cz036n2-xLBLXwB$+5 z4*gzk8d~)g940dlK-*AdrHf`6RX6h2$3JskN8)uv5fNF6ERr-EVRyy8?)y_Y-yXm@ zJ7X2QybX2~RW+bp?7$LTM-k>B>iR=hmeM-yYx9`E?E%?n&<_*K3n zAhmmS_Wk9}jqG!K3YH=gghqHB?$_X*KcG`Tux?J(xE@?|Yiz&=Ow6AVxQGtD!n?g; zj>@~o6=l#E6ZD9W9tG(u;(B%vdHyG0lBqL3lfyNfw-V8U`M&Q5QCaazRH$iPWTRy0 z_>Nha%N1qSc#RV)4ntVFVn1&`x8AzK^An`N1xCx*DH>BArFhXjncO2ynP<3b{K~{~ zFCC}1K&Fo*;y5;H057qXeGym|c!6T|`j}S!Is6!G2VMCgl{Fjk8!R!fB$=DT_^X4A zc#fI%i*mjFwfRh&9{mL(_e?7Nhpae!vagd8+C@2|IL1Xc+zrslTL`Z=`~uZP^u5zt z)dEtS(yYXVM^bzlzrG7csVO3!cFsEbxk@1S3`Xg=aS(=B7I$DdqAROnW|7BQyEh-p zOh5*{-!ib{*2hP$X}6$EH$J#TkY~}h@g>%#%Kz z4Z8%#^(cPLBV?^^le3#h?9szTe`$6{lmuNxg>sTFBB7)+X?GoQ!d?ttiuLrlmq^gx z@vhzG^ZDJ15SHBlJ3;q!>YZj)4$<-EwzkTTbn$p36t$fG9LIkE?=L4Wn?Qd0Soex@ zxZCJ?+ph4j1Hm0&8%!sz5J|z-nkp-X@q$=r?2D3{Jc=(Ou6LVWt;?t!Tq8j5RtBdTJn`moW0G*Xhwf7nzzB^jo|)-9ddI6S+Iy* z9jOkvy&wDMDNE#Ii|`OvRIvST1(nZHqIH_RN?XJ&bG#$1Q(ssyGDml!pqo38qqs)xNFbBJ z4n4R;f(W9M(G+56<6@Roi6^^P7~P>RQw>=R*}zv8A)^KLYWtmz9zg$bw5K5*1KS;LYkCV_g1xQC zn}2`1KnrX^el9{WaNG*t;dowkCKICe5#w8cjTX%jt2F%^m7M_|5~9HQkh`0K;i^v*7<=Zuou|^W!dSPDfOd&7XlLk zn@4*2AmmDp=tM_T_yN>M_CFWxA1?`4;@W%40K{CM(&ho8luFJ<6*+rNu#ueojn#1l@2dQ8tDv0Jmh#m}5h<6go*S z^!IZ@>iC@K{DwtkuS_>{;D{MH67ReQDzwMjVvf1_^C{5Y(+q*f)C7d&S)1DG4yK%t>=kdzw0`^RKfmL<4rD+Y?9p2q zH;usbH^40S4zrOFfWd|!G_Z6!P(flVO?tiL{|-Wc7{bl`X6d>RBE9=ZWMrZO_*2zYlaA4&TH3Znv~drHCYDqzuwxPOwabgLZM zi=73>QxG({ypC3vJS?ukCCFzOY+^rSW6nQG`Clr`&Ff8Nim;KGY5mIFeRa&@NGE&7 zk$nySUZ7KK4gW@pKDPJr=Bc`mFY_FRxHiMzm4ZYw5sS!*Y{OB67O#^vNtngV5ft!> zx`bVz{(qJxu6YH4uInf7!lUDD>K(!U{0dViXi~hB4s6g{zTQJD+=~O7aSrX7+%NXI z(^P^4hYiInMQ zK$GC|kPsm}oAkLSO*8tWXfxd}-kK-HR$jm80|nXxm`!;2y&ikRcN;=90gr6!kewLD zw(b2zhB2q=4lLviVk*v3N0+Tf*k25%Y_g~_AY8SxOdlF#2Sx?Vz1mO6Dx&Z*p{t*!}*kaH|9y*@YI5N;Bv) zkep+lytUt)xB-smLD0ZN@sgF!_is-p!U zu_&VK*gUi~tBIJo;Q4~TD9?{B_@-`l-A@Bx)WS3-k<@=+gO*Si*%#l&dqY%PEcnJI zxagUXon~{TZx>~={Szc0)n{ZdYzP1kfPX9`gjGvs&Jq0>`AKs!0x&)Bm|;v#DO`9l z&0WUQqqPh(T14N~Nwb=tY^czIYH1AMha4i)gY3>O=S?bhcZLgvs>k)HX@pHAKxE%s zby_Ju`2C3llUj7zq5{%&=r1}d_)i{fyl)g48I&LKgEgxVt;!Ub6RcqaWjL?&moOHd z>B1mXfX{EDV$CCBmz2Nk`Rq!4JYREPbV2H>0qTVB$ofX_-C9_{5ldh8)CjYDFi?kO zpKnbR2UeILVOxWT&pCw7Sh9z<+s5Mu*_z%|hX-tH>blaB24TL&MG#zb$TMjCaos;# z7GuUH$)A7T7Qh{z|4g;YZcBzXN(s<;Uza%v%Arb-uTuulvkIRf`|_QRIjC&v3RS(| zBV73>$WWlB)Afs`l?rHEn28_+X8yf4RiITwOdgr_W=Gmvn4K(abGq-^fip#!K`3gS zb?fp#{Zyvx;hrafBIuKfS1}Bw;JU;QuE+d`nG1?g?tc^3Jp!H8-x4=GMxiSkIF9^| zJ@@|fDuFR`!)Z$4R($7FpJg=#Z@Y+!!ZrG*eX|)IN^1}7#9>Er6pK_pp|tYL?Sk*- zamQrBJU$$vmX$N{6pB*xbxJd76?={7)~(rk$@wyaK)#^LmB-S%F1l)GIVQo!i}|la z6GrMxI9b729r~=NOSpmnPTq-YO~QvIOLRWw3OC?OM4>3b3tCHGR)2md+=-tFw93y* zxOrOPTTw9988WNMmx>;-4Ehq;4%31+yafR?3FpuK-LJ{_HSK-+)C2sL1k3JT{?Z=5 z#&?orj8Or%J3t=I$>3y&!ggQ^#kjAU&gZv5am5Lcpx&X&%`cI;JQIiJEgaHmX#P_c zq8iF(eJ-|UL;ogpoWcvY;%kPly^nl_V)8cmvx1a+GSEb1Y;Khs)$8&15)jtSFbf6l z^p-3W>Yn~j4tO0>qt(y^w^(N?h?J>30V8C5qhx>ta@49h(}cfyvi+BRyhzy&$^={P z`JX6&@cTa`5I^FON-p)sehM-p`Xhg>szln=`0d=FZSlM_)xi|ir7{NA99Njo6IU6( z1F7<;#E7G(OLK_E;BKg=el`?lDk{+9aIXg?+cfL#5BmlV5(D)kZ#TAA*e4K}Yw?2X z2W}b(@8QOaj{v?_YnX1)th0ag0^i0oM!>{3)ZW|9QOREvDjlwc$zyA(J>m~t(}Mjh zG-jU#Zt5FCg~!_JDV=rz*sQNlEI?rM75 zwBI35YEdhYdO9>kT%uHkP6QVs9he2tlfiRUCCrCw$`rdKW&}zKK)s2$j1kx}u$z-b z!dLloO^iFSyV|N=Mr;IgVxbDSu-m+*m0U|5v&syyNiTbdaDG&yd^hJJ;A>|VAYY}g z(gj96B0lDUUxUb6-MNsb#GJJ?Z1ojY3LGW{8JMXAdwm-STTpfQ;hjA1dWfleh_nEq zA7mTVX&P}PDbop@5m?J>(>=pYXRGG;sR3nm%GM{>`d)H^*w7{jmJ-V;K_+N@ ze{@aa+I;`=@UL<+La-(_X4T@N-zv6pT=Q#ZLzx3jhq}hU_Dp$A#DFC|q-oLtA^4*f|yXbM;0 zFs@OAH7762tw=QAD6wbQiS!T#$za@47~RDwTf|GKY!f8=OBjf&2f)G7ApE zSxleubv0R-d^1I&c0vd2-p$KlgpSffBmYbks)v8a*H3TqYxAKb*@<``beS}zH3|y1h-nso_-BVSgx>#32mOM?>kKe@$1j3eIW0wuqaZ$ zCD$l3>ZPj0I71-(%T^E4tn{08MiFGGxD!?5Hv|&Vl++e24d*;dmP_4dhEoNX>P$;Pbi0+jZ0W(pB~1>aH;blR(IpUHP$er>iN7| zc0we6AUV;o&ei%Oz?bUG1_lJ-Sd4?9*wu(E~vvRB2R&gB_d%=H)KFw zd_#=boAhvdZC|@OD1Z0PVI?f3HMoJfU=ezsWvPyh zH}|-N3ozuuM{EWo=Z#QR(>Gb@)ze#ew-8Czxp|zPdI)t zA5kMR+QA}{&VuL?97s)94bxTHoNR%L=KY<`4=O>Uj^s0QL%+AH`uCInX7sU6`T!s) zfQ&UHU89sZf%S;l-N8}szSbFS=8#;zKj)~wm2vPB5wWR(^ZHGp#t)aBf&43R996z< z=qMFo}Lutgd_o0}!u{T93I_SV| zZ<9G#OvO@-6tk`qJ&Du|UV&c^HdOt5z=ypA`&@SO;~SZN#j5CRh*k|&EEF@~iLc?> zhZ%_y1Km(={S|_ELKRL84Ot7N5=w4>a5}d8KFk2v?V#jCS%G+E6LjLE4KZUk3t`Oz>-yZ;ZL+8 zNMgtDYlAqByeY^OdEkZV@aPGubB>z$=Iyw%LA`kj;TGmn%&=!+*a7+6z8cwXuazx4 zwKDbwDR&ee0V$l(Zg5|(Gpa_2ByZR(S_90sHGKx!A&cu7No0$KuB~1S9;kyKfVsP- zn^q<$x@9|IpW2(Na5xs#ws#_P zH~TBvVGcnkz>S~xD-0G94P#eBii!?#?z4u9jGZ%a1M!{V)PydWT`4zr6M{ZQvdT{6 z&&J!oF*1eQ^(_9ofYK%)~9gbqA55x~^CKvm`Ampm~bDDhU^>p6a?v7?4P;q#g z6qZKS)y~8U=HmpE^|}ELqQ-oCNJN;fp06*`eCbrp;sXHaf>Lhdt(mGw)*@;CO~e!r zCkyhLAS0*MvT}8e3W96Cr<43y*tOF);3?3p8c8)PK_;2%bUyR*P2ShE5H36A=r*vs zWT)qTQ`C%xY0b9odeMhan!F{#c4L3?%Q>}woPiH67*8%5L+=*QXM)J3b)JUc%gKkt zLxaO;9ed&)yy}blPhO87nK_Z4`V}Y=`Zy`a3i87uPfodIRmfnFeE#U;bU%6ptly#d z?kNB7qF`v!6j{<#_1@|mB`dr^x&QdBiOh>yHwEPa>gOz`LcGUT1dj`qJ}Zo*$MZgT zCsN($QvT*tu^sYyr#Kvs+CjM$+WFf(Lg|oGm92irr1Lp=t()l;wLG5!Fnp3B@$v=; zT@WhBfdhS$ICT5=ZT^V_Fffv|~)EhcpGfp=F>`k^mHpgu!=#rwaNIRt|(@nNJr*%r|uc75; zZKBII=>7!nCaepiRG|u~IQVGVP=nw4I3hOzlwMDGUz1*;`Xlkb=`u+j&F3eg%Q}zG zbGW?6+?xl7&1v)k^4lUDEQt#sNYeJI-pZk(pD_7r%QOxXy_h?238`#;vxszhnAWSF znn)=-98n+WzuI;Q&LbytqXY&@g$>x0ZqRiQQFe*nMhwk{y+QY=sPO43Jpc{+DI)S@ zuI)*i02Oj;j;f4VPZii=W!TP%aE-vxBO^O5vU#H3(yOqA{qZ1eItZ(~z%**u4 z!0Q4;-2Tg|^KL()h*ufbE*&`^68HS%m>}C)QKQQc{X{JhsjFh`%aJKg|pyj4KZXRcL>GnmU-j89`d8^Apmlu}7ZkOBs(M}W8 z{{=qAj5vTj-DJ_+QWFb^YM%+pQt#cK_|0+GuGoG8~sT7lhhtaz+HFa<$gVA zap`u<@o9A1mK!QH`8ZL+-}YadF-F%qpWiGNZVFEXMjz7~Z16)9w~b;_6(Ji?XMUz+ zf3o2_X)p4U%PtlK+OdUa-DfF%E%QC=EGlNhet-{T21IbE&l?f2%%&RxwjIl}SFb}X zNHUR)an~&9EP8t|jB8j5*HAako{#BCWt#uJ)4t^X9L~OQn`Djh6~y(3xo8yYMvh;u z@dex6Nw8tEnLAEo8#2TllTMo+ALrCpExGRzSOM2EMWtm4v98Ylsr=#P3vS!pkNJ_t zQ>V9J+LB_-XSNTYQP19eC1U`5mY@PVsMjhH5i0^Y6wRX-If8$LUFaV@51i!Fj=iLEPLVSLsWHL6ja8$iT_jwbzuUV6yCyrQ9uo^CXfj8!~7S)U`|qI7>GPEM8c zQu(ke5qc7ER^~jGpG9}>7_SMr=;eB^sCbm{DWKsn@he@vfn^K-?(0jfwOeih#pm^j ztCQGAyg1t^k@uQgHjp$26>A1v{PlzeH>@BK{7p+h)X{BL<@qNYFpVp#3v}ow#?&K3 zSGlT{kE{_?B%Ls2NzK&HPy1+`2*`hqhoxvCVg$Vv9VC+c)oZ6)GjQ)7AR6%j?pB(B zlSXpeT#AYGIKh-i2Eukr7weo#WBO;$CtPSMW@!gbbh0$cZEwyly`hcXfa;_~Sq9@d z0ifa!x@VcrMu-Xfy0|RRJr4e>Ex^9bGNVrs2vWd7OciN4su;k_o8~z3IE}2S+1-d) zjc`9&VdhnDn>q8N5j3qlxpf(N^}d&?~7tIZ7Ik}m1n;ZV_(i| zw=`m;szmj09>(mICi1OR_TRaaB-kNUc3fa(6^YC=*v^h;Yw$%}S#krx>LH+;BV0rS z;jdjd=6VyBC?JAY)=d?gMqEHz3TlFC)U%VIH zL^xDBcA^BksZl@+0(jLhT48EJ2bObggRAwsKiC~NXdLQ-(v)Mx0`2BP*_G3qx#wm8 z3XybuA$1mB34uK06tA>}AZI%v3(%5nyrzBptm480EM`fy@Dh^+4Rc{(^O!t%H~)G*oPpQ?A(xE Y8&T0F(mK*BCVC|s1~`gj6b#6J0HTTrLI3~& diff --git a/apps/web/content/docs/content-engine/public-write-api.mdx b/apps/web/content/docs/content-engine/public-write-api.mdx index 6e2343ea5f..d38f0d311f 100644 --- a/apps/web/content/docs/content-engine/public-write-api.mdx +++ b/apps/web/content/docs/content-engine/public-write-api.mdx @@ -1,19 +1,19 @@ --- -title: Public write API +title: Write API description: Reference for Content Engine publicWrite, with options and defaults, writable fields, generated create and edit routes, request and response bodies, status and error codes, createContentPublicWriteService and definition errors. icon: FileJson --- -This page lists everything `publicWrite` accepts and everything its routes answer. For a guided setup, follow [Public write](/docs/content-engine/public-write). Examples use `example.discussion` from the example plugin, whose write routes live at `/api/@vitnode/example/content/discussions`. +This page lists everything `publicWrite` accepts and everything its routes answer. For a guided setup, follow [Member writing](/docs/content-engine/public-write). Examples use `newsroom.letter` from the newsroom plugin, whose write routes live at `/api/newsroom/content/letters`. ## `publicWrite` options `publicWrite` is a block of `defineContentType` from `@vitnode/core/content`. Leave it out, or set it to `false`, to keep public writing off. -```ts title="plugins/example/src/content/discussion.ts" +```ts title="plugins/newsroom/src/content/letter.ts" publicWrite: { ownership: { field: "author" }, - create: { fields: ["title", "body"], status: "published" }, + create: { fields: ["title", "body", "desk"], status: "published" }, update: { fields: ["title", "body"] }, }, ``` @@ -57,17 +57,17 @@ They never accept: A `relation` is writable only when its target content type has a `publicApi`. On each request, every referenced record must also be published and not hidden. -A `container` is writable in `create.fields` only. A member picks the container once, when they create the record; moving it later is a staff edit, so an author cannot drop their record into a container they could not post in. On each create, the server reads the container back inside the write's transaction and checks that it belongs to the field's collection. A missing or foreign container answers `400` with an `unavailable` issue on that field. See [Containers on the frontend](/docs/content-engine/container-frontend#let-members-pick-a-board). +A `container` is writable in `create.fields` only. A member picks the container once, when they create the record; moving it later is a staff edit, so an author cannot drop their record into a container they could not post in. On each create, the server reads the container back inside the write's transaction and checks that it belongs to the field's collection. A missing or foreign container answers `400` with an `unavailable` issue on that field. See [Container pages](/docs/content-engine/container-frontend#let-members-pick-a-desk). ### Moderator permission -A content type with `update` adds `can_edit` to its plugin's moderator permissions, under the content type's permission module, such as `discussion`. It shares the `@vitnode/example:discussion:can_edit` label with the admin permission. If the plugin declares that module under `permissionStaff.moderator` itself, the declared list wins. +A content type with `update` adds `can_edit` to its plugin's moderator permissions, under the content type's permission module, such as `letter`. It shares the `newsroom:letter:can_edit` label with the admin permission. If the plugin declares that module under `permissionStaff.moderator` itself, the declared list wins. When the content type lives in a container collection with [publishing policies](/docs/content-engine/container-policies), `can_edit` is scoped by that collection and `can_approve` is added next to it. See [Container-scoped permissions](/docs/dev/moderation/scoped-permissions#container-scoped-permissions). ## Generated routes -The routes live in the public module, under `/api/{pluginId}/content/{publicApi.path}`, next to the [public read routes](/docs/content-engine/public-api#the-routes). Only the ones `publicWrite` enables are mounted, and the [fetcher](/docs/dev/fetcher) types them the same way: a `post` to a content type without `create` is a compile error. +The routes live in the public module, under `/api/{pluginId}/content/{publicApi.path}`, next to the [public read routes](/docs/content-engine/public-api). The Content Engine mounts only the ones `publicWrite` enables, and the [fetcher](/docs/dev/fetcher) types them the same way: a `post` to a content type without `create` is a compile error. | Method and path | Enabled by | Body | Success | | ---------------- | ---------- | ----------------------------- | -------------------------------------------------------------------------- | @@ -78,7 +78,7 @@ The routes live in the public module, under `/api/{pluginId}/content/{publicApi. `GET /{id}/edit` and `PATCH /{id}` answer only for the owner and for moderators. There is no public delete, publish or hide route. -`GET /permissions` takes up to 50 comma-separated ids and answers for guests too. `canEdit` follows the same rules as `PATCH`; `canReport` is `true` for a public record, with `reports` on, that the visitor did not write. A record the visitor can neither read nor edit is left out of `items`, so the route never confirms a draft exists. +`GET /permissions` takes up to 50 comma-separated ids and answers for guests too. `canEdit` follows the same rules as `PATCH`; `canReport` is `true` for a public record, with `reports` on, that the visitor did not write. A record the visitor can neither read nor edit is left out of `items`, so the route never confirms a draft exists. [Permissions](/docs/content-engine/public-permissions) has the full contract. A request passes these checks in order: the rate limit, the captcha (create only), the session, the body, then for an edit the owner or moderator check and the relation targets, all before anything is written. @@ -95,7 +95,7 @@ Both bodies are strict JSON objects. A key outside the allowlist is refused, nev Each value uses the field's own validation, the same as in the AdminCP. A rich text field takes a ProseMirror document, and a relation takes an id, or an array of ids for `multiple: true`. ```http title="PATCH request" -PATCH /api/@vitnode/example/content/discussions/1 +PATCH /api/newsroom/content/letters/1 Content-Type: application/json Cookie: vitnode_auth= @@ -110,10 +110,10 @@ Every successful response is the same record shape: | ------------- | -------------------------- | -------------------------------------------------------------------------------------- | | `id` | `number` or `string` | A string for the `uuid` and `bigint` [ID strategies](/docs/content-engine/id-strategy) | | `slug` | `string` \| `null` | The value of the `publicApi` slug field, the key of `GET /{slug}` | -| `status` | `"draft"` \| `"published"` | | +| `status` | `"draft"` \| `"published"` | Only `"published"` is public. A draft may or may not wait for a moderator; check `approval` | | `publishedAt` | ISO date string \| `null` | | -| `version` | `number` | Editorial content types only. Send it back as `expectedVersion` | -| `approval` | object \| `null` | The record's pending submission, or a rejection nothing replaced yet. See [Approvals](/docs/content-engine/approvals#what-the-author-sees) | +| `version` | `number` | Editorial content types only. Send it back as `expectedVersion`; without `editorial`, `expectedVersion` is refused with `400` | +| `approval` | object \| `null` | The record's pending submission, or a rejection nothing replaced yet. Always `null` outside a container with policies, even for drafts. See [Drafts and approval](/docs/content-engine/approvals#drafts-and-approval) | | `values` | object | Every field in `create.fields` or `update.fields`, `null` when empty. Nothing else | ```json title="200" @@ -180,7 +180,7 @@ A title that is too short and an owner the client tried to set: ```json title="400" { "code": "CONTENT_INVALID_INPUT", - "contentTypeId": "example.discussion", + "contentTypeId": "newsroom.letter", "issues": [ { "code": "too_small", @@ -201,7 +201,7 @@ A body that is not JSON: ```json title="400" { "code": "CONTENT_INVALID_INPUT", - "contentTypeId": "example.discussion", + "contentTypeId": "newsroom.letter", "issues": [ { "code": "invalid_json", @@ -212,12 +212,12 @@ A body that is not JSON: } ``` -If discussions had a `category` relation, a draft, hidden or missing category would all get the same answer: +If letters had a `category` relation, a draft, hidden or missing category would all get the same answer: ```json title="400" { "code": "CONTENT_INVALID_INPUT", - "contentTypeId": "example.discussion", + "contentTypeId": "newsroom.letter", "issues": [ { "code": "unavailable", @@ -228,12 +228,12 @@ If discussions had a `category` relation, a draft, hidden or missing category wo } ``` -A member editing somebody else's published discussion: +A member editing somebody else's published letter: ```json title="403" { "code": "CONTENT_FORBIDDEN", - "contentTypeId": "example.discussion", + "contentTypeId": "newsroom.letter", "issues": [] } ``` @@ -247,7 +247,7 @@ The same member editing somebody else's draft gets `404` with `"code": "CONTENT_ ```json title="409 version conflict" { "code": "CONTENT_VERSION_CONFLICT", - "contentTypeId": "example.discussion", + "contentTypeId": "newsroom.letter", "currentVersion": 4, "expectedVersion": 3, "itemId": 1 @@ -257,12 +257,12 @@ The same member editing somebody else's draft gets `404` with `"code": "CONTENT_ ```json title="409 unique conflict" { "code": "CONTENT_UNIQUE_CONFLICT", - "contentTypeId": "example.discussion", + "contentTypeId": "newsroom.letter", "itemId": null } ``` -`itemId` is `null` for a unique conflict on create. On `example.discussion`, a unique conflict means the slug derived from the title is taken. +`itemId` is `null` for a unique conflict on create. On `newsroom.letter`, a unique conflict means the slug derived from the title is taken. ### Rate limit @@ -304,42 +304,14 @@ const rejection = parseContentPublicWriteRejection( ## Frontend helpers -From `@vitnode/core/tanstack/content`, for pages in the browser. +From `@vitnode/core/tanstack/content`, for pages in the browser: -### `useContentPermissions` - -```ts -const permissions = useContentPermissions({ fetch, ids, queryKey }); -permissions.of(id); // { canEdit, canReport } -``` - -| Option | Type | Description | -| ---------- | ------------------------------------------------------- | --------------------------------------------------------------------------- | -| `ids` | `readonly (number \| string)[]` | The records on screen, at most 50 | -| `fetch` | `(ids) => Promise<{ items }>` | Calls `GET /permissions` through `fetcher` with `ids.join(",")` | -| `queryKey` | `QueryKey` | The content type's query prefix; invalidating it refreshes the answer | - -`of(id)` returns all `false` until the answer arrives and for a record left out. The hook waits for the session and asks again when somebody signs in or out. - -### `useContentPublicWrite` - -```ts -const write = useContentPublicWrite({ fields, latestVersion, uniqueField, version }); -const record = await write.submit(form, async expectedVersion => await fetcher(/* ... */)); -``` - -| Option | Type | Description | -| --------------- | --------------------------------- | ------------------------------------------------------------------------------------ | -| `fields` | `readonly string[]` | The form's fields. Server issues on them show under the field; others are a toast | -| `uniqueField` | `string` | Where "already taken" shows on `409 CONTENT_UNIQUE_CONFLICT`. Without it, a toast | -| `version` | `number` | The version the edit form opened with. Leave it out for a create | -| `latestVersion` | `() => Promise` | Reads the current version for **Keep my version**. Without it, only a reload is offered | - -`submit` returns the record on a `2xx` and `null` otherwise, after showing the reason. It passes the current `expectedVersion` to `request` and stores the new one after each save. `write.conflict` is the version-conflict alert, or `null`; render it above the form. Messages come from `core.global.content_write` and follow the reader's language. +- [`useContentPublicWrite`](/docs/content-engine/public-write-form-api) sends a create or edit from an `AutoForm` and shows field errors, refusals and version conflicts. +- [`useContentPermissions`](/docs/content-engine/public-permissions-api#usecontentpermissions) reads `GET /permissions` for any number of records, in batches of 50. ## Server API -Use these from `@vitnode/core/content/server` when a plugin needs its own write route, such as "start a discussion from a question", with the same ownership, authorization and effects as the generated routes. +Use these from `@vitnode/core/content/server` when a plugin needs its own write route, such as "write a letter from a question", with the same ownership, authorization and effects as the generated routes. ### `createContentPublicWriteService` @@ -347,7 +319,7 @@ Use these from `@vitnode/core/content/server` when a plugin needs its own write createContentPublicWriteService({ c, model, pluginId }); ``` -`c` is the Hono context, `model` is the content model, such as `discussionContent`, and `pluginId` is the plugin that owns the content type. The service acts as the user session of `c`, never as an AdminCP session. +`c` is the Hono context, `model` is the content model, such as `letterContent`, and `pluginId` is the plugin that owns the content type. The service acts as the user session of `c`, never as an AdminCP session. | Method | Returns | Behavior | | ------------------ | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -365,9 +337,9 @@ The methods throw instead of answering: | `ContentVersionConflict` | `expectedVersion` is out of date (editorial content types) | | Postgres unique violation | A unique value is taken | -A route that starts a discussion from a single question. `withHttpErrors` turns a unique conflict into the structured `409`, and the `catch` maps a refusal to its status: +A route that starts a letter from a single question on a chosen desk. `withHttpErrors` turns a unique conflict into the structured `409`, and the `catch` maps a refusal to its status: -```ts title="plugins/example/src/api/modules/discussions/ask.route.ts" +```ts title="Example: a letter from a question" import { ContentPublicWriteDenied } from "@vitnode/core/content"; import { createContentPublicWriteService, @@ -377,21 +349,24 @@ import { HTTPException } from "hono/http-exception"; import { z } from "zod"; import { buildRoute } from "@/api/builders"; -import { discussionContent } from "@/database/discussions"; +import { letterContent } from "@/database/letters"; import { manifest } from "@/manifest.gen"; export const askRoute = buildRoute({ route: { method: "post", path: "/ask", - description: "Start a discussion from a question", + description: "Start a letter from a question", withCaptcha: true, request: { body: { required: true, content: { "application/json": { - schema: z.object({ question: z.string().trim().min(3).max(200) }), + schema: z.object({ + question: z.string().trim().min(3).max(200), + desk: z.number().int().positive(), + }), }, }, }, @@ -403,17 +378,17 @@ export const askRoute = buildRoute({ schema: z.object({ id: z.number(), slug: z.string().nullable() }), }, }, - description: "Discussion started", + description: "Letter started", }, 401: { description: "Not signed in" }, - 409: { description: "A discussion with this title exists" }, + 409: { description: "A letter with this title exists" }, }, }, handler: async c => { - const { question } = c.req.valid("json"); + const { question, desk } = c.req.valid("json"); const service = createContentPublicWriteService({ c, - model: discussionContent, + model: letterContent, pluginId: manifest.id, }); @@ -423,6 +398,7 @@ export const askRoute = buildRoute({ async () => await service.create({ title: question, + desk, body: { type: "doc", content: [ @@ -433,7 +409,7 @@ export const askRoute = buildRoute({ ], }, }), - { contentTypeId: discussionContent.definition.id, structured: true }, + { contentTypeId: letterContent.definition.id, structured: true }, ); return c.json({ id: record.id, slug: record.slug }, 201); diff --git a/apps/web/content/docs/content-engine/public-write-create-form.webp b/apps/web/content/docs/content-engine/public-write-create-form.webp index 76ea6fbac88302cee700db2348b98e781344f1e6..359ea6c2a9ee9312d66b40103b059ec1b513695c 100644 GIT binary patch literal 45990 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 E7aVa+$N&HU diff --git a/apps/web/content/docs/content-engine/public-write-edit-conflict.webp b/apps/web/content/docs/content-engine/public-write-edit-conflict.webp index a6cfbebf3347dfe24cafab042c770f9c79d55d83..7ea9a127e3fa7bc5d0c2448894d54c3c14c08145 100644 GIT binary patch literal 64152 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 Wuk|Xl2OfPzUioQG|5@e#yZsj(yDFRj diff --git a/apps/web/content/docs/content-engine/public-write-edit-forbidden.webp b/apps/web/content/docs/content-engine/public-write-edit-forbidden.webp deleted file mode 100644 index 6122ad5b1a36fffe0a895fdab46d1b07785c7236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32914 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 TR(eKV1d468U<3gF*Ps6b{Fu(; diff --git a/apps/web/content/docs/content-engine/public-write-edit-form.webp b/apps/web/content/docs/content-engine/public-write-edit-form.webp new file mode 100644 index 0000000000000000000000000000000000000000..d85a54fe9dcc6a86af72ff3208d944b626fc131c GIT binary patch literal 36320 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/content-engine/public-write-edit-pending.webp b/apps/web/content/docs/content-engine/public-write-edit-pending.webp new file mode 100644 index 0000000000000000000000000000000000000000..4a36dcac944b8e997393b9d48c1774dc992144e7 GIT binary patch literal 89252 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/content-engine/public-write-edit.mdx b/apps/web/content/docs/content-engine/public-write-edit.mdx index 567b5790da..7490826029 100644 --- a/apps/web/content/docs/content-engine/public-write-edit.mdx +++ b/apps/web/content/docs/content-engine/public-write-edit.mdx @@ -1,102 +1,199 @@ --- -title: Public edit form -description: Let authors and moderators edit Content Engine records from the site with an Edit button from canEdit, a form loaded from GET /{id}/edit, and useContentPublicWrite for versions, conflicts and errors. +title: Edit form +description: Build a VitNode Content Engine edit page for authors and moderators that loads the editable record, handles sign-in and refusals, saves with the expected version through useContentPublicWrite and keeps the member's input on a version conflict. icon: FilePen implementation: objective: Let authors and moderators edit existing records from the public site. decisions: - - Which items can be edited? Offer content types from the project's plugins that have `publicWrite.update`; if none has it, point to the Public write guide. - - Where do the Edit button and the edit page go? Offer the pages that show the chosen items; recommend `/{items}/:id/edit` for the form. + - Which items can be edited? Offer content types from the project's plugins that have `publicWrite.update`; if none has it, point to the Member writing guide. + - Where does the edit page go? Offer the pages that show the chosen items; recommend `/{items}/:id/edit`. constraints: - - Show Edit only when `useContentPermissions` answers `canEdit`; never decide it from the author or the session. - - Load the form with `GET /{id}/edit` and save with `PATCH /{id}` inside `useContentPublicWrite().submit`, passing `version` so conflicts are caught. - - Show pending proposals from `approval` instead of claiming the edit is live. + - Load the form with `GET /{id}/edit`, keep 401, 403, 404 and unexpected failures apart, and save with `PATCH /{id}` inside `useContentPublicWrite().submit`, passing `version`. + - After a save, move the form's defaults to the saved values, reset it and invalidate the cached lists. + - When the content type is filed in a container with publishing rules, also follow the Approval notices guide. related: - - title: Public create form - href: /docs/content-engine/public-write-frontend - - title: Report content - href: /docs/content-engine/reports - - title: Approvals - href: /docs/content-engine/approvals + - title: Form helpers + href: /docs/content-engine/public-write-form-api + - title: Permissions + href: /docs/content-engine/public-permissions + - title: Approval notices + href: /docs/content-engine/approval-notices --- +import { Accordion, Accordions } from "fumadocs-ui/components/accordion"; + import { ImgDocs } from "@/components/fumadocs/img"; import conflict from "./public-write-edit-conflict.webp"; -import forbidden from "./public-write-edit-forbidden.webp"; +import editForm from "./public-write-edit-form.webp"; -This guide adds an **Edit** button to each discussion and the page behind it. The Content Engine decides who may edit; your page asks it and shows the button. Saving catches the case where someone else saved first, without losing what the member typed. +This page builds `/news/:id/edit`, where an article's author, or a moderator, changes it. The page loads what may be edited, saves with the version it opened, and keeps the member's text when someone else saved first. -You need [public write](/docs/content-engine/public-write) with `update`, and the create form from [Public create form](/docs/content-engine/public-write-frontend). +This continues the [Create form](/docs/content-engine/public-write-frontend). It reuses `ArticleForm` from `src/pages/article-form.tsx`, and needs `editorial: true` from [Member writing](/docs/content-engine/public-write), which gives every article a `version`. All the code goes into one new file, `src/pages/article-edit-page.tsx`; the steps build it in order, and [the complete file](#the-complete-file) is at the end. -### Show the Edit button - -`useContentPermissions` answers `canEdit` for every record on screen in one request. It is `true` for the owner while the rules allow it and for moderators with the edit permission; you never compare user ids yourself: +### Register the edit route -```tsx title="plugins/example/src/pages/discussion-page.tsx" -const { canEdit } = useDiscussionPermissions([item.id]).of(item.id); +Edit `src/routes.ts` and add the page. This is an excerpt: -{canEdit ? ( - - {t("edit")} - -) : null} +```ts title="plugins/newsroom/src/routes.ts" + // [!code ++:4] + page("/news/:id/edit", { + component: lazy(() => import("./pages/article-edit-page")), + messages: ["newsroom.articles"], + }), ``` -`useDiscussionPermissions` is a five-line wrapper with the typed `fetcher` call, shown in [Report content](/docs/content-engine/reports#ask-who-may-report-what). On a list, pass every row's id at once. +There is no `requires: "authenticated"`. The page shows its own sign-in prompt, because it must tell "not signed in" apart from "not yours". During a navigation the current page stays on screen with the top progress bar until the loader finishes. -### Load the record +### Load the editable values -`GET /{id}/edit` answers for the people who may edit, drafts included. Turn every other answer into a page state: +Create `src/pages/article-edit-page.tsx` and start it with the loader. `GET /{id}/edit` answers only for the author and moderators, drafts included: -```tsx title="plugins/example/src/pages/discussion-edit-page.tsx" -const fetchEditable = async (id: number) => +```tsx title="plugins/newsroom/src/pages/article-edit-page.tsx (excerpt)" +// Answers only for the author and moderators, drafts included. +const fetchEditableArticle = async (id: number) => await fetcher({ plugin: manifest.id, method: "get", - module: "content/discussions", + module: "content/news", path: "/{id}/edit", args: { params: { id } }, }); +const loadEditableArticle = async (param: string) => { + const id = Number(param); + if (!Number.isSafeInteger(id) || id < 1) + return { state: "notFound" as const }; + + const res = await fetchEditableArticle(id); + if (res.status === 200) { + return { record: await res.json(), state: "ready" as const }; + } + if (res.status === 401) return { id, state: "unauthenticated" as const }; + if (res.status === 403) return { state: "forbidden" as const }; + if (res.status === 404) return { state: "notFound" as const }; + + // A server failure is not "not found": let the app's error page show it. + throw new Error(`Loading article ${id} for editing failed.`); +}; + +type ArticleEditData = Awaited>; + +type EditableArticle = Extract["record"]; + export const route = definePluginRoute({ - load: async ({ params }) => { - const res = await fetchEditable(Number(params.id)); - if (res.status === 200) return { record: await res.json(), state: "ready" as const }; - if (res.status === 401) return { state: "signIn" as const }; - if (res.status === 403) return { state: "forbidden" as const }; + load: async ({ params }) => await loadEditableArticle(params.id), - return { state: "notFound" as const }; - }, + head: ({ t }) => ({ + robots: "noindex, nofollow", + title: t("newsroom.articles.edit.title"), + }), }); ``` -- `401`: the visitor is signed out. Show a sign-in link. -- `403`: they can read the record but not edit it. -- `404`: it does not exist, or it is a draft or hidden record that is not theirs. The page never confirms it exists. +The record has `values` (the editable fields), `version`, `status` and `slug`. TypeScript infers its type from the route, so `EditableArticle` needs no hand-written interface. + + + + + +### Handle each answer + +At the end of the file, the page component turns each loader state into a screen: + +```tsx title="plugins/newsroom/src/pages/article-edit-page.tsx (excerpt)" +const ArticleEditPage = ({ + loaderData, + params, +}: PluginRoutePageProps) => { + const t = useTranslations("newsroom.articles"); + + if (loaderData.state === "unauthenticated") { + return ( +

    +

    + {t("state.unauthenticated.title")} +

    + + {t("state.unauthenticated.action")} + +
    + ); + } + + if (loaderData.state !== "ready") { + const key = loaderData.state === "forbidden" ? "forbidden" : "not_found"; + + return ( +
    +

    + {t(`state.${key}.title`)} +

    +

    + {t(`state.${key}.desc`)} +

    +
    + ); + } + + return ( +
    +

    + {t("edit.title")} +

    + +
    + ); +}; + +export default ArticleEditPage; +``` + +| Answer | Screen | +| --- | --- | +| `401` | The visitor is signed out. The page shows a sign-in link that comes back here | +| `403` | They can read the article but may not edit it | +| `404` | It does not exist, or it is a draft or hidden article that is not theirs. The page never confirms that it exists | +| Anything else | The loader throws, so a server failure shows the app's error page instead of "not found" | + +`key={params.id}` remounts the form for another article, because the form reads `version` once. -### Save with the version +### Render the shared form -Pass the record's `version` to `useContentPublicWrite`. It sends the right `expectedVersion` with every save and keeps it current afterwards: +Between the loader and the page component goes `ArticleEditForm`. It fills `ArticleForm` with the saved values and sets up `useContentPublicWrite` with the article's `version`. Its `onSubmit` comes in the next step: -```tsx title="plugins/example/src/pages/discussion-edit-page.tsx" -const DiscussionEditForm = ({ record }: { record: EditableDiscussion }) => { - const t = useTranslations("@vitnode/example.discussions"); +```tsx title="plugins/newsroom/src/pages/article-edit-page.tsx (excerpt)" +const ArticleEditForm = ({ record }: { record: EditableArticle }) => { + const t = useTranslations("newsroom.articles.edit"); + const queryClient = useQueryClient(); + const [current, setCurrent] = useState({ + slug: record.slug, + status: record.status, + }); + // AutoForm resets an untouched form to the defaults it renders with, so the + // defaults follow every save. + const [defaults, setDefaults] = useState({ + body: record.values.body, + title: record.values.title, + }); const write = useContentPublicWrite({ - fields: ["title", "body"], + fields: ARTICLE_FORM_FIELDS, latestVersion: async () => { - const res = await fetchEditable(record.id); + const res = await fetchEditableArticle(record.id); return res.status === 200 ? (await res.json()).version : null; }, @@ -104,72 +201,369 @@ const DiscussionEditForm = ({ record }: { record: EditableDiscussion }) => { version: record.version, }); - const onSubmit: AutoFormOnSubmit = async (values, form) => { - const updated = await write.submit(form, async expectedVersion => - await fetcher({ - plugin: manifest.id, - method: "patch", - module: "content/discussions", - path: "/{id}", - args: { params: { id: record.id }, body: { values, expectedVersion } }, - }), - ); - if (!updated) return; - - form.reset(values); - toast.success(t("edit.success.title")); - }; + // onSubmit, from the next step return ( <> {write.conflict} - + + {current.status === "published" && current.slug !== null ? ( + + {t("view")} + + ) : null} ); }; ``` -- `record.values` holds exactly the editable fields, so it fills the form as is. -- `PATCH` changes only the fields you send. -- **When someone else saved first**, nothing is written and `write.conflict` shows an alert above the form. The member's text stays. **Keep my version** uses `latestVersion` so the next save replaces the other change; **Load latest version** reloads the page. -- Field errors, an expired session and a refusal show the same way as on the create form. +**View article** links to the public page only while the article is published, because a draft's page answers `404`. + + + + + +### Save with the expected version + +Add `onSubmit` inside `ArticleEditForm`, where the comment says. `write.submit` sends `PATCH /{id}` with the version the form holds: + +```tsx title="plugins/newsroom/src/pages/article-edit-page.tsx (excerpt)" + const onSubmit: AutoFormOnSubmit = async ( + values, + form, + ) => { + const updated = await write.submit( + form, + async expectedVersion => + await fetcher({ + plugin: manifest.id, + method: "patch", + module: "content/news", + path: "/{id}", + args: { + params: { id: record.id }, + body: { values, expectedVersion }, + }, + }), + ); + if (!updated) return; + + // the next step continues here + }; +``` + +- **`expectedVersion`** is the `version` the form opened with. After a successful save, `useContentPublicWrite` stores the new version itself, so the next save sends that one. +- **`write.submit`** returns the record, or `null` after showing the reason: a field error under its field, a taken title under **Title**, or a toast for the rest, such as an expired session. + + + + + +### Update the form and the cached lists + +Replace the comment at the end of `onSubmit` with what happens after a successful save: + +```tsx title="plugins/newsroom/src/pages/article-edit-page.tsx (excerpt)" + setCurrent({ slug: updated.slug, status: updated.status }); + setDefaults(values); + form.reset(values); + await queryClient.invalidateQueries({ + queryKey: [manifest.id, "articles"], + }); + + toast.success(t("success.title"), { + description: t("success.desc", { title: values.title }), + }); +``` + +- **`setDefaults(values)` and `form.reset(values)`** make the saved text the form's new starting point, so the form is no longer dirty. `defaults` lives in state because `AutoForm` resets an untouched form to the `defaultValues` it renders with; without `setDefaults`, the old text would come back after a successful save. +- **`setCurrent`** keeps `slug` and `status` from the answer, so **View article** follows the latest state. +- **`invalidateQueries`** expires the cached [article list](/docs/content-engine/public-lists), whose query key starts with `[manifest.id, "articles"]`, so `/news` shows the new title. + + + + + +### Handle version conflicts + +There is nothing extra to write. `write.conflict`, rendered above the form, is the conflict alert. When someone else saved after the form opened, `PATCH /{id}` answers `409 CONTENT_VERSION_CONFLICT`, writes nothing, and the alert appears while the form keeps every character the member typed: + +- **Keep my version** reads the current version with `latestVersion`. The next **Save changes** replaces the other change. +- **Load latest version** reloads the page and drops the unsaved text. + + + + + +### Add the labels + +Add these keys under `newsroom.articles` in `src/locales/en.json`: + +```json title="plugins/newsroom/src/locales/en.json" +{ + "newsroom": { + "articles": { + "edit": { + "title": "Edit article", + "submit": "Save changes", + "view": "View article", + "success": { "title": "Article saved", "desc": "\"{title}\" is up to date." } + }, + "state": { + "unauthenticated": { "title": "Sign in to edit", "action": "Sign in" }, + "forbidden": { + "title": "You can't edit this article", + "desc": "Only its author and moderators can edit it." + }, + "not_found": { + "title": "Article not found", + "desc": "It does not exist, or you cannot see it." + } + } + } + } +} +``` -## Edits that wait for a moderator +## The complete file + + + + +```tsx title="plugins/newsroom/src/pages/article-edit-page.tsx" +import type { AutoFormOnSubmit } from "@vitnode/core/components/form/auto-form"; + +import { useQueryClient } from "@tanstack/react-query"; +import { buttonVariants } from "@vitnode/core/components/ui/button"; +import { + definePluginRoute, + type PluginRoutePageProps, +} from "@vitnode/core/routing"; +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { useState } from "react"; +import { toast } from "sonner"; +import { useTranslations } from "use-intl"; + +import { manifest } from "@/manifest.gen"; + +import { + ARTICLE_FORM_FIELDS, + ArticleForm, + type ArticleFormSchema, +} from "./article-form"; + +// Answers only for the author and moderators, drafts included. +const fetchEditableArticle = async (id: number) => + await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/news", + path: "/{id}/edit", + args: { params: { id } }, + }); + +const loadEditableArticle = async (param: string) => { + const id = Number(param); + if (!Number.isSafeInteger(id) || id < 1) + return { state: "notFound" as const }; + + const res = await fetchEditableArticle(id); + if (res.status === 200) { + return { record: await res.json(), state: "ready" as const }; + } + if (res.status === 401) return { id, state: "unauthenticated" as const }; + if (res.status === 403) return { state: "forbidden" as const }; + if (res.status === 404) return { state: "notFound" as const }; + + // A server failure is not "not found": let the app's error page show it. + throw new Error(`Loading article ${id} for editing failed.`); +}; + +type ArticleEditData = Awaited>; + +type EditableArticle = Extract["record"]; + +export const route = definePluginRoute({ + load: async ({ params }) => await loadEditableArticle(params.id), + + head: ({ t }) => ({ + robots: "noindex, nofollow", + title: t("newsroom.articles.edit.title"), + }), +}); + +const ArticleEditForm = ({ record }: { record: EditableArticle }) => { + const t = useTranslations("newsroom.articles.edit"); + const queryClient = useQueryClient(); + const [current, setCurrent] = useState({ + slug: record.slug, + status: record.status, + }); + // AutoForm resets an untouched form to the defaults it renders with, so the + // defaults follow every save. + const [defaults, setDefaults] = useState({ + body: record.values.body, + title: record.values.title, + }); + const write = useContentPublicWrite({ + fields: ARTICLE_FORM_FIELDS, + latestVersion: async () => { + const res = await fetchEditableArticle(record.id); + + return res.status === 200 ? (await res.json()).version : null; + }, + uniqueField: "title", + version: record.version, + }); + + const onSubmit: AutoFormOnSubmit = async ( + values, + form, + ) => { + const updated = await write.submit( + form, + async expectedVersion => + await fetcher({ + plugin: manifest.id, + method: "patch", + module: "content/news", + path: "/{id}", + args: { + params: { id: record.id }, + body: { values, expectedVersion }, + }, + }), + ); + if (!updated) return; + + setCurrent({ slug: updated.slug, status: updated.status }); + setDefaults(values); + form.reset(values); + await queryClient.invalidateQueries({ + queryKey: [manifest.id, "articles"], + }); + + toast.success(t("success.title"), { + description: t("success.desc", { title: values.title }), + }); + }; + + return ( + <> + {write.conflict} + + {current.status === "published" && current.slug !== null ? ( + + {t("view")} + + ) : null} + + ); +}; -In a container whose [publishing policy](/docs/content-engine/container-policies) says `edits: "approve"`, an author's save of a published record succeeds, but readers still see the old text. `updated.approval?.status` is `"pending"` and `updated.values` is the live record. Say so instead of "Changes saved", and open the form on the proposal next time: +const ArticleEditPage = ({ + loaderData, + params, +}: PluginRoutePageProps) => { + const t = useTranslations("newsroom.articles"); + + if (loaderData.state === "unauthenticated") { + return ( +
    +

    + {t("state.unauthenticated.title")} +

    + + {t("state.unauthenticated.action")} + +
    + ); + } + + if (loaderData.state !== "ready") { + const key = loaderData.state === "forbidden" ? "forbidden" : "not_found"; + + return ( +
    +

    + {t(`state.${key}.title`)} +

    +

    + {t(`state.${key}.desc`)} +

    +
    + ); + } -```ts -const proposed = - record.approval?.status === "pending" && record.approval.kind === "edit" - ? record.approval.values - : null; + return ( +
    +

    + {t("edit.title")} +

    + +
    + ); +}; + +export default ArticleEditPage; ``` -[Approvals](/docs/content-engine/approvals#show-it-on-your-pages) shows the notice the forum renders. +
    +
    ## Check the result -Sign in as the author of a discussion: - -1. Its page shows **Edit**. Other members see **Report** instead. -2. Change the title and click **Save changes**. A **Changes saved** toast appears. -3. Save the same discussion in a second tab, then save in the first. **Someone else saved in the meantime** appears and your text stays. Click **Keep my version**, then save again. -4. Open the edit URL as another member. The page says they can't edit it. +Sign in as the member who wrote an article in the [Create form](/docs/content-engine/public-write-frontend), and open `/news/{id}/edit` with its id. [Permissions](/docs/content-engine/public-permissions) adds an **Edit** link to the article page next. +1. Change the title and click **Save changes**. **Article saved** appears and the form keeps the new title. The slug stays the same, so links keep working, and `/news` shows the new title. +2. Open the same edit page in a second tab and save a change there. Then save in the first tab. **Someone else saved in the meantime** appears and your text stays. Click **Keep my version**, then **Save changes**. +3. Open the edit URL as another member, and you get **You can't edit this article**. Signed out, you get **Sign in to edit**, even for an id that does not exist, because the server checks the session first. Signed in, an id that does not exist shows **Article not found**. + + +## When edits wait for a moderator + +Newsroom articles are not filed in a container, so a `200` from `PATCH /{id}` always means the change is live. A content type filed in a container whose [publishing rules](/docs/content-engine/container-policies) hold edits for approval answers `200` with `approval.status: "pending"` instead, and the live record stays as it was. [Approval notices](/docs/content-engine/approval-notices) adds the pieces such a page needs. + +Next, show the **Edit** link only to the people who may use it with [Permissions](/docs/content-engine/public-permissions). diff --git a/apps/web/content/docs/content-engine/public-write-form-api.mdx b/apps/web/content/docs/content-engine/public-write-form-api.mdx new file mode 100644 index 0000000000..73a19f6e26 --- /dev/null +++ b/apps/web/content/docs/content-engine/public-write-form-api.mdx @@ -0,0 +1,122 @@ +--- +title: Form helpers +description: Reference for useContentPublicWrite, the VitNode hook that sends a public Content Engine create or edit from an AutoForm and shows field errors, refusals and version conflicts. +icon: SquareFunction +--- + +`useContentPublicWrite` from `@vitnode/core/tanstack/content` sends one public create or edit and handles every answer that is not a success. Your `onSubmit` only deals with the record it gets back. For a guided setup, follow [Create form](/docs/content-engine/public-write-frontend) or [Edit form](/docs/content-engine/public-write-edit). + +## Signature + +```tsx +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; + +const write = useContentPublicWrite({ fields, latestVersion, uniqueField, version }); + +const record = await write.submit(form, async expectedVersion => await fetcher(/* ... */)); + +<>{write.conflict}; +``` + +## Options + +| Name | Type | Required | Default | Description | +| --- | --- | --- | --- | --- | +| `fields` | `readonly string[]` | Yes | | The form's field names. A server issue on one of them shows under that field; an issue on any other field becomes a toast | +| `uniqueField` | `string` | No | | Where "This is already taken" shows on `409 CONTENT_UNIQUE_CONFLICT`, such as `title` when the slug is derived from it. Without it, the message is a toast | +| `version` | `number` | No | | The record's `version` when the edit form opened. Leave it out for a create. Read once, on the first render | +| `latestVersion` | `() => Promise` | No | | Reads the record's current `version`, usually from `GET /{id}/edit`. Enables **Keep my version** on a conflict. Return `null` when it cannot be read | + +## Return value + +| Name | Type | Behavior | +| --- | --- | --- | +| `submit(form, request)` | `Promise` | Calls `request`, then returns the parsed record on a `2xx` and `null` on anything else, after showing the reason | +| `conflict` | `ReactNode` | The version-conflict alert while a conflict is open, otherwise `null`. Render it above the form | + +### `submit` + +- **`form`** is the form API `AutoForm` passes as the second argument of `onSubmit`. The hook uses it to set field errors. +- **`request`** receives `expectedVersion` and returns the typed `fetcher` response. For an edit, put `expectedVersion` in the body; for a create, ignore the argument. +- The returned record is typed from the response, so `record.slug`, `record.values` and `record.approval` need no annotation. + +After a successful write, the hook stores the record's new `version`, so the next save sends it without reloading the page, and clears an open conflict. + +## How answers are handled + +| Answer | What the member sees | `submit` returns | +| --- | --- | --- | +| `200` or `201` | Nothing; showing success is up to you | The record | +| `400` with issues on fields in `fields` | Each message under its field | `null` | +| `400` with any other issue, or none | One toast with the first message | `null` | +| `401`, `403`, `404`, `429` | One toast: session ended, "You can't change this.", "This no longer exists.", "You're doing that too often." | `null` | +| `403` with `edit_window_closed` or `moderators_only` | One toast naming that reason | `null` | +| `409 CONTENT_UNIQUE_CONFLICT` | "This is already taken" under `uniqueField`, or a toast | `null` | +| `409 CONTENT_VERSION_CONFLICT` | The `conflict` alert; the form keeps every value | `null` | +| A network error or any other status | "Something went wrong on our side." | `null` | + +Each issue code maps to a message. `not_writable`, `unavailable`, `edit_window_closed` and `moderators_only` have their own, and every other code, such as Zod's `too_small`, shows "Check this value." [Write API](/docs/content-engine/public-write-api#codes) lists the codes. + +## The conflict alert + +`409 CONTENT_VERSION_CONFLICT` means someone saved the record after the form opened. Nothing was written, and the form keeps what the member typed. The alert offers: + +- **Keep my version**, shown only with `latestVersion`. It reads the current version, stores it and closes the alert with a toast. The member's next save replaces the other change. If `latestVersion` returns `null` or throws, a toast says so and the alert stays. +- **Load latest version** reloads the page. Anything not saved is lost, and the alert says so. + +## What stays your job + +The hook never decides what a success means. After `submit` returns a record: + +- **Say what happened.** Show a success toast, or a "waiting for approval" message when `record.approval?.status === "pending"`, because then readers still see the old content. See [Approvals](/docs/content-engine/approvals#what-the-author-sees). +- **Keep the form in step.** Call `form.reset(values)` so the form is no longer dirty, and pass the saved values as the form's defaults on the next render, or `AutoForm` puts the old defaults back. For a pending edit, `record.values` is still the live record and the proposal is in `record.approval.values`. +- **Invalidate** the queries that show the record, such as its list or thread. +- **Navigate** if the page should change, for example to the new record after a create. + +The hook does not stop double submits. `AutoForm` does that by disabling its submit button while `onSubmit` runs. + +## Requirements and limits + +- **Browser-only.** It uses `use-intl`, `sonner` toasts and `window.location`. VitNode's root providers mount all three. +- **Messages** come from `core.global.content_write`, which the root route always loads, so they follow the reader's language and the plugin needs no labels for errors. +- **One record per hook.** `version` is read on the first render. When the same component switches to another record, remount it with a `key`, such as the record id. +- **One field error per issue.** Messages are generic ("Check this value."). To show your own text for a field rule, validate it in the form schema first, so the request never leaves the browser. + +## Example + +```tsx title="Excerpt: an edit form" +import type { AutoFormOnSubmit } from "@vitnode/core/components/form/auto-form"; + +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +const write = useContentPublicWrite({ + fields: ["title", "body"], + latestVersion: async () => { + const res = await fetchEditableTopic(record.id); + + return res.status === 200 ? (await res.json()).version : null; + }, + uniqueField: "title", + version: record.version, +}); + +const onSubmit: AutoFormOnSubmit = async (values, form) => { + const updated = await write.submit( + form, + async expectedVersion => + await fetcher({ + plugin: manifest.id, + method: "patch", + module: "content/topics", + path: "/{id}", + args: { params: { id: record.id }, body: { values, expectedVersion } }, + }), + ); + if (!updated) return; + + form.reset(values); +}; +``` + +The complete page, with loading, approvals and invalidation, is in [Edit form](/docs/content-engine/public-write-edit). diff --git a/apps/web/content/docs/content-engine/public-write-frontend.mdx b/apps/web/content/docs/content-engine/public-write-frontend.mdx index f64b87335e..7a4635bfd0 100644 --- a/apps/web/content/docs/content-engine/public-write-frontend.mdx +++ b/apps/web/content/docs/content-engine/public-write-frontend.mdx @@ -1,57 +1,67 @@ --- -title: Public create form -description: Build a page where members create Content Engine records with one AutoForm, one fetcher call and useContentPublicWrite, which shows server errors for you. +title: Create form +description: Build a page where members write VitNode Content Engine records with AutoForm and useContentPublicWrite, which shows server errors in the form, and send new records to the right page. icon: TextCursorInput implementation: objective: Add a public page where signed-in members create records of an existing content type. decisions: - - Which items do members create? Offer content types from the project's plugins that have `publicWrite.create`; if none has it, point to the Public write guide. + - Which items do members create? Offer content types from the project's plugins that have `publicWrite.create`; if none has it, point to the Member writing guide. - Where does the form live? Recommend a `/new` URL next to the items' own pages. - - Where does the member land after posting? The new record's page, or its edit page while it waits for approval. constraints: - Send `POST /` of `content/{publicApi.path}` through `fetcher` inside `useContentPublicWrite().submit`, with only the fields in `publicWrite.create.fields`. - Build the form with `AutoForm` and keep labels in the plugin's locale files. - - Treat `approval.status === "pending"` as waiting for a moderator, not as published. + - Check `approval.status` and `status` before opening the record's public page, which answers 404 until the record is published, and say "draft" and "waiting for approval" with different messages. related: - - title: Public edit form + - title: Edit form href: /docs/content-engine/public-write-edit - - title: Public write - href: /docs/content-engine/public-write - - title: Public write API + - title: Form helpers + href: /docs/content-engine/public-write-form-api + - title: Write API href: /docs/content-engine/public-write-api --- +import { Tab, Tabs } from "fumadocs-ui/components/tabs"; + import { ImgDocs } from "@/components/fumadocs/img"; -import createForm from "./public-write-create-form.webp"; +import createTaken from "./public-write-create-form.webp"; -This guide builds `/discussions/new`, where members start a discussion. It takes one form and one request. When the server says no, `useContentPublicWrite` from core deals with it: field errors land under their fields, and the rest become translated toasts. +This page builds `/news/new`, where signed-in members write an article. It takes one form and one request. `useContentPublicWrite` from core sends the request and shows every refusal, so the page only decides what happens after a successful save. -You need a content type with [public write](/docs/content-engine/public-write) turned on. +This continues the article from [Member writing](/docs/content-engine/public-write), which turned on `publicWrite` with `title` and `body` in `create.fields`. -### Add the route +### Add TanStack Query to the plugin + +The page refreshes cached lists with `useQueryClient`, so the plugin needs `@tanstack/react-query` as a dependency. Run this from the workspace root: + + -```ts title="plugins/example/src/routes.ts" -page("/discussions/new", { - component: lazy(() => import("./pages/discussion-new-page")), - messages: ["@vitnode/example.discussions"], - requires: "authenticated", -}), +```bash tab="bun" +bun add @tanstack/react-query --cwd plugins/newsroom ``` -`requires: "authenticated"` sends guests to the sign-in page and brings them back afterwards. `messages` loads the labels below. +```bash tab="pnpm" +pnpm --filter newsroom add @tanstack/react-query +``` + +```bash tab="npm" +npm install @tanstack/react-query --workspace newsroom +``` + + -### Write the page +### Write the form -```tsx title="src/pages/discussion-new-page.tsx" -import { useQueryClient } from "@tanstack/react-query"; +Create `src/pages/article-form.tsx`. The [edit form](/docs/content-engine/public-write-edit) reuses it: + +```tsx title="plugins/newsroom/src/pages/article-form.tsx" import { AutoForm, type AutoFormOnSubmit, @@ -59,86 +69,201 @@ import { import { AutoFormEditor } from "@vitnode/core/components/form/fields/editor"; import { AutoFormInput } from "@vitnode/core/components/form/fields/input"; import { - emptyRichTextDocument, isRichTextEmpty, + type RichTextDocument, zodRichTextDocument, } from "@vitnode/core/content"; -import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; -import { fetcher } from "@vitnode/core/tanstack/fetcher"; -import { useHrefNavigate } from "@vitnode/core/tanstack/link"; import { useTranslations } from "use-intl"; import { z } from "zod"; -import { manifest } from "@/manifest.gen"; - -import { invalidateDiscussionLists } from "./discussion-list"; +/** The fields the form renders, so server errors on them show in place. */ +export const ARTICLE_FORM_FIELDS = ["title", "body"] as const; -const formSchema = z.object({ - title: z.string().trim().min(3).max(200).default(""), - body: zodRichTextDocument - .refine(doc => !isRichTextEmpty(doc)) - .default(emptyRichTextDocument()), -}); +export interface ArticleFormValues { + body: RichTextDocument; + title: string; +} -const DiscussionNewPage = () => { - const t = useTranslations("@vitnode/example.discussions"); - const navigate = useHrefNavigate(); - const queryClient = useQueryClient(); - const write = useContentPublicWrite({ - fields: ["title", "body"], - uniqueField: "title", +const createArticleFormSchema = (defaults: ArticleFormValues) => + z.object({ + title: z.string().trim().min(3).max(200).default(defaults.title), + body: zodRichTextDocument + .refine(doc => !isRichTextEmpty(doc)) + .default(defaults.body), }); - const onSubmit: AutoFormOnSubmit = async (values, form) => { - const record = await write.submit(form, async () => - await fetcher({ - plugin: manifest.id, - method: "post", - module: "content/discussions", - path: "/", - args: { body: { values } }, - }), - ); - if (!record) return; +export type ArticleFormSchema = ReturnType; - await invalidateDiscussionLists(queryClient); - await navigate(`/discussions/${record.slug}?created=true`); - }; +export const ArticleForm = ({ + defaultValues, + onSubmit, + submitLabel, +}: { + defaultValues: ArticleFormValues; + onSubmit: AutoFormOnSubmit; + submitLabel: string; +}) => { + const t = useTranslations("newsroom.articles.form"); return ( , + component: props => , }, { id: "body", component: props => ( - + ), }, ]} - formSchema={formSchema} + formSchema={createArticleFormSchema(defaultValues)} onSubmit={onSubmit} - submitButtonProps={{ children: t("new.submit") }} + submitButtonProps={{ children: submitLabel, className: "self-start" }} /> ); }; +``` + +The schema checks the values in the browser first, with the same limits as the definition, so members see mistakes before anything is sent. `format="json"` makes the editor produce the document a [rich text field](/docs/content-engine/rich-text) stores. `AutoForm` disables the submit button while `onSubmit` runs, so a double click never posts twice. + + + + + +### Write the page + +Create `src/pages/article-new-page.tsx`: + +```tsx title="plugins/newsroom/src/pages/article-new-page.tsx" +import type { AutoFormOnSubmit } from "@vitnode/core/components/form/auto-form"; + +import { useQueryClient } from "@tanstack/react-query"; +import { emptyRichTextDocument } from "@vitnode/core/content"; +import { definePluginRoute } from "@vitnode/core/routing"; +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { useHrefNavigate } from "@vitnode/core/tanstack/link"; +import { toast } from "sonner"; +import { useTranslations } from "use-intl"; + +import { manifest } from "@/manifest.gen"; -export default DiscussionNewPage; +import { + ARTICLE_FORM_FIELDS, + ArticleForm, + type ArticleFormSchema, +} from "./article-form"; + +export const route = definePluginRoute({ + head: ({ t }) => ({ + robots: "noindex, nofollow", + title: t("newsroom.articles.new.title"), + }), +}); + +const ArticleNewPage = () => { + const t = useTranslations("newsroom.articles.new"); + const navigate = useHrefNavigate(); + const queryClient = useQueryClient(); + const write = useContentPublicWrite({ + fields: ARTICLE_FORM_FIELDS, + uniqueField: "title", + }); + + const onSubmit: AutoFormOnSubmit = async ( + values, + form, + ) => { + const record = await write.submit( + form, + async () => + await fetcher({ + plugin: manifest.id, + method: "post", + module: "content/news", + path: "/", + args: { body: { values } }, + }), + ); + if (!record) return; + + await queryClient.invalidateQueries({ + queryKey: [manifest.id, "articles"], + }); + + // Waits for a moderator. Its public page answers 404 until approval. + if (record.approval?.status === "pending") { + toast.info(t("pending.title"), { description: t("pending.desc") }); + await navigate(`/news/${record.id}/edit`); + + return; + } + + // A draft nobody has to review. It stays private, so open its edit page. + if (record.status !== "published") { + toast.info(t("draft.title"), { description: t("draft.desc") }); + await navigate(`/news/${record.id}/edit`); + + return; + } + + toast.success(t("success.title"), { description: t("success.desc") }); + await navigate(`/news/${record.slug}`); + }; + + return ( +
    +

    + {t("title")} +

    + +
    + ); +}; + +export default ArticleNewPage; ``` -That is the whole page. Here is what each part does: +- **`write.submit`** sends the request and returns the new record, or `null` after showing why the server said no: an issue on a field appears under it, a taken title appears under **Title** (`uniqueField`), and anything else, such as an expired session, is a toast. The [Form helpers](/docs/content-engine/public-write-form-api#how-answers-are-handled) reference lists every case. +- **The owner** comes from the server; `values` never includes `author`. +- **`invalidateQueries`** expires the cached [article list](/docs/content-engine/public-lists), whose query key starts with `[manifest.id, "articles"]`, so the new article shows there at once. +- **Before navigating**, the page reads two fields of the answer, because a new article can end in three states. Only a published one has a public page; the other two answer `404` there, so the author goes to the edit page with a message that says what happened: + + | `status` | `approval` | What the author hears | + | --- | --- | --- | + | `"published"` | `null` | **Article published**, on the article's page | + | `"draft"` | `null` | **Draft saved**. It is private and nobody was asked to review it | + | `"draft"` | `{ status: "pending" }` | **Sent for approval**. A moderator reviews it first | + + Newsroom articles use `create.status: "published"` and have no container, so members always get the first row. `create.status: "draft"` gives the second. The third only happens for a content type filed in a container whose [publishing rules](/docs/content-engine/container-policies) hold new posts for approval; see [Drafts and approval](/docs/content-engine/approvals#drafts-and-approval). + +
    + + + +### Add the route -- **`formSchema`** checks the values in the browser first. Copy the server's limits, such as `minLength: 3`, so members see mistakes before they submit. -- **`write.submit`** sends the request and returns the new record, or `null` when the server said no. It already showed the reason: a server issue on `title` appears under the title, a taken title too (`uniqueField`), and anything else, such as an expired session, is a toast. You write no error handling. -- **The owner** is set by the server. `values` never includes the author. -- **Double posts** cannot happen, because `AutoForm` disables the button while `onSubmit` runs. -- **`invalidateDiscussionLists`** refreshes the cached [discussion list](/docs/content-engine/public-lists), so the new discussion shows up there at once. -- **`format="json"`** makes the editor produce the document a [rich text field](/docs/content-engine/rich-text) stores. +Edit `src/routes.ts` and add the page before `/news/:slug`. This is an excerpt: + +```ts title="plugins/newsroom/src/routes.ts" + // [!code ++:5] + page("/news/new", { + component: lazy(() => import("./pages/article-new-page")), + messages: ["newsroom.articles"], + requires: "authenticated", + }), + + page("/news/:slug", { +``` -This page fits the discussion type from [Public write](/docs/content-engine/public-write#define-the-content-type). The example plugin's own discussions also live in boards, so its page in `plugins/example/src/pages/` adds a board select and sends `board` in `values`; any [container field](/docs/content-engine/containers) in `create.fields` works the same way. +`requires: "authenticated"` sends guests to the sign-in page and brings them back afterwards. The static `/news/new` wins over `/news/:slug`, so an article whose slug is `new` would be hidden behind the form; pick another URL, such as `/news/write/article`, if that can happen in your app. @@ -146,14 +271,25 @@ This page fits the discussion type from [Public write](/docs/content-engine/publ ### Add the labels -```json title="plugins/example/src/locales/en.json" +Add these keys under `newsroom.articles` in `src/locales/en.json`: + +```json title="plugins/newsroom/src/locales/en.json" { - "@vitnode/example": { - "discussions": { - "new": { "submit": "Post discussion" }, - "form": { - "title": { "label": "Title" }, - "body": { "label": "Message" } + "newsroom": { + "articles": { + "form": { "title": "Title", "body": "Article" }, + "new": { + "title": "Write an article", + "submit": "Publish article", + "success": { "title": "Article published", "desc": "Readers can see it now." }, + "draft": { + "title": "Draft saved", + "desc": "It is not public yet, so only you and the site's staff can see it." + }, + "pending": { + "title": "Sent for approval", + "desc": "A moderator reviews it before readers can see it." + } } } } @@ -166,33 +302,36 @@ Error messages come from core and follow the reader's language, so the plugin ne
    -## When a post waits for a moderator - -In a container with [publishing policies](/docs/content-engine/container-policies) that ask for approval, a create still succeeds but the record is not public yet. `record.approval?.status` is `"pending"` and its page answers `404`. Send the author somewhere that says so: +## Check the result -```ts -if (record.approval?.status === "pending") { - await navigate(`/discussions/${record.id}/edit`); +Sign in as a member and open `http://localhost:3000/news/new`: - return; -} -``` +1. Click **Publish article** with an empty form. Both fields show an error, and nothing is sent. +2. Enter the title `Welcome to the newsroom`, which an article already has, and a message. **This is already taken. Try something else.** appears under **Title**, and your text stays. +3. Change the title and click **Publish article**. **Article published** appears, you land on `/news/{slug}`, and the article tops `/news`. +4. Open `/news/new` signed out. The app sends you to the sign-in page. +5. Optional: set `create.status` to `"draft"` in `src/content/article.ts` and post again. **Draft saved** appears, you land on the edit page, and the article is missing from `/news` until staff publish it. Set it back to `"published"` afterwards. -The edit page shows the waiting notice, as [Approvals](/docs/content-engine/approvals#show-it-on-your-pages) explains. + ## Captcha -With `create.captcha: true`, pass the captcha config to the form and forward the token it hands to `onSubmit`: +With `create.captcha: true` in `publicWrite`, every create needs a [captcha](/docs/dev/captcha) token. Give `ArticleForm` a `captcha` prop that it passes on to `AutoForm`, then forward the token `AutoForm` hands to `onSubmit`: ```tsx const { data: config } = useMiddlewareConfigQuery(); // from @vitnode/core/tanstack/auth -const onSubmit: AutoFormOnSubmit = async (values, form, { captchaToken }) => { +const onSubmit: AutoFormOnSubmit = async (values, form, { captchaToken }) => { const record = await write.submit(form, async () => await fetcher({ plugin: manifest.id, method: "post", - module: "content/discussions", + module: "content/news", path: "/", captchaToken, args: { body: { values } }, @@ -200,20 +339,8 @@ const onSubmit: AutoFormOnSubmit = async (values, form, { cap ); }; -; +// In ArticleForm: +; ``` -## Check the result - -Sign in as a member and open `/discussions/new`: - -1. Leave the message empty and submit. The form says so without sending anything. -2. Use the title of an existing discussion. **This is already taken** appears under the title. -3. Write a new title and a message, then click **Post discussion**. You land on the new discussion, and it tops `/discussions`. - - +Next, let authors fix their articles with an [Edit form](/docs/content-engine/public-write-edit). diff --git a/apps/web/content/docs/content-engine/public-write-moderator-permission.webp b/apps/web/content/docs/content-engine/public-write-moderator-permission.webp deleted file mode 100644 index 88a677a4a3d70fba302beff69126771f7f21cb2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142886 zcmbq*Wk6MJvo=VV0@B?nAl(wuAtfLo-O}CN(v5U?H-dC`NlFUR-L=0h7C!pC=RN21 zm)o^n>t1uuJ#)=9*KAo)At5~42Ox@q{L%{2Yy`-_zn4CRO#-C?fgOf=Mvw7UfQT>+ zF~Hk^01Ujc#+4MF=X`gOPPU2s`q2$w7@3zk5a8Im7xriozn7gLI5_fcwY z9@+*h6`vR1^NMHxikGgL%bkmt2ay|*0nH+~4`6!|3VTy=3D|Kv-J31WcNM)7KF2=* z%m9o($N<`IyDmVxy>59@g@bQRZW*sacj+#g0Dzkh8*cFcj|=U?lw-T=M|&wCJedm% zJmqdNfRtNo;Ps*Wg_nQ@z?xg^jp#Y(_0W~u&7<9v27Kz2xuyYt%Ng^{o9n$Bx2Z>A zkG?d0benTEzg`C9o?-%+0q6igE&dVRuG@aoGgno>6kr!11rP=RM(nn0Zs`u2w%h=M+YG1Qn5A8PH-b&q4 zp15tf%>p_BF}JH%;%De*JUdM@Zi8+q0P@Sd9jR479l-te;8yWQ{ru64S*dzQQwTug zw(nN_I`(t{z_a*)AO>J_ z({u**888iK0l3~&0Vn}Sx2z+8IDip=^p^OB{Kjpc2LJ$Z3j(kKU~c-Z^{?IbfV;4D zvv8|;i+)M>X-{~e1&{%FbNl8nWgF_k?nLU$ZQgAFa0Va+0RJre?epvbI@~e zpF;!PqJi%mdnJb+V3el~zoTzDvEW{~{=iFT(mo8Uynle0}P@7F2}L$101$B)mQ9ZY>A z=vSD&-MRk@FVBOV3rdFTDjaCbJyFrv)!fDBv5sOAO*Fy}aNdu~>RuSJA+F9xMAG%i zH2cvWN5#7;hk&!&WoGsrj++zqHIkC4$7Fase7*7SHz7HK-?_b@cCDZ%#$y!4ICv-0 z6*S8Ih$6dfrO*2NO1{3M;l0a3TzdDG*+tSU5ZzU)34qPbW52<6L?6`O@Ebl6`#)A;bJp=l%Qt`@`eT z(NNmzZ~NK#$fOIgBFYo21Y2jrXik>68nc7vwl*MB+wIpLcIZJ{OmzCqVB~G$q&$WR zJg(2ot@b@CE!gw_@W3U}`CPh_o=@?zWy@4UlSZY8@0MorRfVD1TfJBggjIsgk zF;isfDp*eBHFDvM3WOH=SEJ~kSa-WZi7q+k*F)*|tjsr0qxM$QPe0E0Io6x6x)1TR zigRD#X;~9jPGvkMqpW`~q`hbq^%A_M(yFBxUbdIMItmi5H&}{j|Cti5pX}^@?M0Yi zUqi6)-XyXeN!f0u#j`oAaCX2UtYnVp85%LQk6bIv*9&fn8W^mP&3|xyl{XjCv!?-fgKLRuMUC&D>xGL8gyImI1re$iRfR zh&k+uj-a6CG`f4E+%_cyne>RQHKpg?B&0}({HCU$euPbkMso$<5>YB9Cj}qe*@Mkw z8*F@J-1)OTyAw!vin+@`3gS-~()&p@y|I(bNbluvdxGHn5?^UJfpFMqgkUTAy$J_- z#w9psR6Q7-^o}od{8_a9W~Q-FR<-xo6&do9{CfvlV?Y09NZ&86+s|WHTN79$#z+f~Sw)1K&^>f%^M)TWXg@u&ar9PHf zP1s$SKt@_sGGD=pk@?kk!%UK*)FCNw)ja><XPOIh(Q<*$UR>6RiUXUhx`><$Y~M+?_xo{{C$&wjlZT~h+oWZ0qX z2%nD;<>!z5{XMrmYl*t^uXK@LJ+07Vk`jQeeb6Z~vRzHREIryTb3G|(iqzEh`PI!J zp;gD&8G`ze6Rxp}Pg{Y>bMUJ`SWQD0-Th1>_Z0X(SwTf}$uGz`FTyz#G6~AQTCql$ zSc>aE9LsyhCS0fI1KM_FVYoIH z<;1_g{aaKsBqp%F3vd5=^zS{xOPXbbpYI8=yfx+42TC%HUttH^bM0l0K?uQZ2#E#d z{U8AhljDcethzFTX#)o~#(mtEsY~bz{S^!O50U;a9}!bN{`3FABL08f@z-j)Ju>@% zHvi>2yzAd0?EmbX(R)JcXoq8;he6gpK{$ssOF`C@sW;Mw_v&Fr=xC`Om7Dg;Qb6W%} z_f%Y_Rx;`cJoI!Z^ie3yoWrD$MOQ6l#AYr#h+kFh#KR@f#T?X_*k4DZ1G!$LLvJBB zh_qwKm5g_*hL<;7fbB$T!ngUWi;&VMR4mgaQq^W`=PCvu>eZvOZg4sI^6P4wLKMsh2F3`CLmZQ zZcCVF^-Qa;7C057`pv|gIr;FFW#7}xIlBRJ*-ygODqpNXIL3ACtKfzuqH<=(5 z#z>?In|v|eVOWT#z$5B+a2V>v^8TorRy@JrccY}St>Bf^PoQa_Lf8)ZP|v0exaVKb z?7yVM%DnhdFz{ael#ZUDlE;*}egWpTqDx>-emsN=aQ>_vL^xoIG}?rpblo zY;#7bcj)cBk9rz6ocVc=DFoJ2)#t1GvCOiE$Sh2-uR=pc$!l3%rJ*JVOOQMf1%f% z9QQG(3T90cDahk7jlq3ZwwDszwUKhy5iSk$jZ5sPKj~m z9}zl<%TiJtCV=xgbZCL5e?|y?5BRw6K<$s^{q*PWKEs%x=R!;*^Bt%flGu-aLcore ztWJt#(`x1B#mHuSa-GD>PeId6+|uy=5rv|HJ_0BnJ(@(`0X2#?Re&Jc^fdS_O50AA z(s)o(09k2&@`_&1{xzOgeW3$CSGDMRrVWy{CZ$3IXa3+GIi4s=Yp~(6dLump9^Pv! zzYGF_pV{O;81?I_$F8SPH|`Uh@F+3z7O;(1eW?XBT(VquM$1Z zlG|g$Zj}9_Xp1#7H4bw@;$QbcQ>$q(@3<};mJd>`2WN8wM4lQ+GFR|I=bKqNct#S} z@2+kqq^%JWm$jwyRZ2k5ysYbL@pv5_`tD&CJiNXTjtKtir6aE7Af$41zF{WEw5bWU zB5daEKFPWb49Bzmlj$I`y&sjr&t?DBE6A))Qg=1cgoWw360#KrbFsd}l`p=$NKkAe z-VekQ_NLND8%yxCn(5qrlWrY%O!Gc!3iqtU@bxJjkMEs-O?ut}d@v=M2E=s?zW}iT zah8tz+oroTNCOi^)H&VbzycM9O z%qF8{+{_H4KoQn$n>CR9;LSrAU_98~eQ`l=mKNm$*Oi~&VP`tm5?PT;2gH}%e+#%>$BAHl*n{v}l3OUwWA9DSbe z0PWiyF6=u0kGG0*nB>~NT`w1A2G|+)%xef3JOh_}B>6bbbt(QJxK)oN(wrDd@%r!+ z0xtx{_X+qh1la*4w}Lw5&9jzR%yvOJ$6m9 z>)-a5N1G2FE51kyhfSXyxwKheEGK-a;>h#j{hF-+)mt;+jY;RhZXX$w^&5`aew;Up zuqclGUCn+uA`UYbubXZspNGM(q**x&SR?-Q^{*BV4G%+FLKw+6I+gx_o44>1hiG#; z#_5Ewm9{8ezvmzvZs%y^6AvqI0Tx%{guXwdoT;y?L zxW(5zfomUh4j^mOgj^*!^3I2u3>tmzU)RI-8?O0Tyl@uZu3^Rdw-m5blm8VlhpHh_ zz;gmIffXc$I}dpX;Ds+hp5zUSeW_bI@yd;!)?FN2qlg|AV(d|0SejBx^XX45$B2k0 z{KWM*W))U)U31wdpXbSG)?mjcM|12~p34sgLs(uNPLDVDq9x`_y--5mqQ0MoqGlXSZ!ZVpd14HS0jE)DG_n2mAd zBapNnHBK-**nD0Xc%zX}Y$kdZi(7Lp6a9Hap8+Fztqn z6uS1i`*_<&BL5Bx^6(4a#-s_1 z5Hj%*C*4Fb9zQbG9FL$(Xn}Q!SNsr1{)ja2v(i3GLAvvXw(|zhcXY5D)w`*k1)J;i@jYW}aL_@g*fTfRp7kBbmDwAq zk;p)W4to5ecFC`#6Ga$ZcJ`?|>EK6-f;-O7`9oS4IG4kHAnhPe`5IX<$# z?hUdpZpsoTGGaS=6|>jPSBNK^uA^h=v~fN_qA1gVy*^x?;CAj1?r%thfSfw_W*8z6 zO1foPyr2NI+~HNc-Ltgw{vIXC*R<$UM0iqt*2FV$;WEwywA#loO`8oC-I4&ybS)v? zX-f=gWZ#BI>)x6jE@F##&)y-u3kZs+6l6d_RP$mVaAv>2&Dn3W_K*RfmrSs*DT|Ay zZ{Vw&SEO<+gvf=q@{&~VDxTne-sR0w;oSqjg8N!@fRnN%MNtcJ88>Bl!;Qz6zC|LW zE$t*qB^-otJ(KduCW4^w>D+L5k@32OH8Os?r`_v0YwWK2%AVGTAp)od@ZD5%vf~Zj zaeW*nW2iMp|8;xpPszNY#|nD0MQHiHWJC!NFV@k@;@HZMnjAjlpe6*i5GQHIuou`U=ONP;B00@`WPvGF?)o)r9k1aDyx??5oPd)ti{Q- zVWkNAm!Zun=5;v}jFy9&Y_vwys;w_7`WJTm+m+^?K2MLas+?Ot#F)8qMi2T3_tNkk zIDo@I$MTbjQDl`T&4_R*}^c_i@OIy&0oyL$EHH|H|uCWQ|gAk@%h zHw{I5(K%ieKlLFQ%1rK@-lENl?iV%YK-Zvpnum_k+Vko)34N9vEi4_X53fcdLN7x^ zvCtPxs)?`$z(|MFxk^QoL!CdPGS(W+xGPn{GBsSfWd(J}_+$gfj!B2X(5rXBA0O`> z$K13`@PKn-801Hh9+~+#o9gSBJMLQ8CHV9L_;ssolllB@<=%?N<)YR@-@;07;rYIB zJuHMcIFGOzt#p5)Im~81Ab)PefHNOK%PZPGBtE!U&CA30cvG`W@+d#T{`q`dg65FfgB$Er93EMn}Sd1{7(b$qyJ|nHs8g!~!sjJL*Zo+9#X96WgdQwHJ}9v{*eb z-U*c>r#J>kNR)w4yTFBrdT!wy3mAPgD9$!9Sa&szMB7K{Imj9tr;cDiwufXJR2dlp ziA3k9C1%%Xw6p`An_hk`%*=#1M`OjxTqgNxr`l%9LZDuX>ec01k1l@Eg`G^jZFx~! z$k2-9c(fuQ`;EfUbLPq_Sz-Z5P)?FbbXEu%U&K9j6DKGJcz1}~6{;W~p`HtcCnnHP z0;yF3pqQo~_jBd3sunMaYzR8?Xf>tmKWxPs#|XsepLYw&qL{&Zwr26mZ4*mxM?v_T z+SC%;%4{q62y>Kb!_vKD_IS75;qo8`Bpbv>dJzd@ZJ3>f3%*)?K-?2P<^99Tc1U`$ zag`{T3nt&Jg_xCxJ+}Hq?+ngujrKlo2tI`Us0Qz$gt3qHDj5v^rSQ%~ zE%63P5J+dstV=ywh7E`&7^q#$y1_#Awkr^3#1HK)U^XO+xb|v3J69ptb6#u)xa?8!0`xGQTq+Iv^-bJr{b2_vnou6v8sMy0tB^ zdaNzkEMy~v8Vks7y`jc5-M~#noT*L{w784D`V2k>UBL<962iJQ*HTi|ZK5EKz2cg> zU6S$Bt|P0;fUfIMev zVn-rE@Tdxsc)R;xp!xw~>1)`<#Nc8&Q=*clss{yfq&LArii~Np!%;9yap(`cj)KP? zMiP_QKXyWEpULGnejM14UwSG{X7}^Zb#js^IwStQ-jsmr^f^|6^~GDjQ%Sp* z6~9*6z?F_PIp|Q7g01w$v4wSb7Odu?Jb1eD9`u|R)F4x(%!^v61;kopmp1@txH>F{ z72Ffclj2XYf90PTKF64i(OO#13Ta=%T7Rn<|AG8tsb!XK%GCFPY~s-)PD#9o<6o^L zD++}m``(VgTAg{5U-aW2-01cYAc);RK9teC`hB2H%l`ld_u{7!^JyCKb6y{D5}^v# zWE^jOxWjIytB!L@h*Pa^wSj3c#2e)Pt|s^W#eM#(3TaNU`@>c3BahuLtDJFFqefM5 zdf+@~9O5equZoE1MkhvF?GKMZAtYlGgSWU|VO>KL@=?Y=3$QA-n(HN))dLM2Bk1Ahl$zP(*Q)*@$#L z-6Sm5Cq2&%*;XhTB&Q$jvsiuAYHRxXm$H|=Q^18}xYj6l+vA4XWPeTT2|P25I~RT2 zfA6VH@0SZDJfXY-m-ylM|5{Cotn&gn*q@YF{C1tGuUD=a)>Cp-g6(LnBp$?Za_g>} zI`|*X(|Mp(I#CjKy*lyjTf7lokpF(Tv!z6~my7Dfxj0 zA+%ic<1j{>5O8c1*(I7*wlDSz2fr6) zs|NnJ)7gg~MKD9<*-ZHb(1b;v1x;7G0?tHc@0gAh4Bit(ig3dX`QFN_z(;>Fww_Z3qhKrW(Cq1k~TSE1w=@D@!IM=?qBEz)OBtA6u??$4V zkejT~+FlJj-}Kw46iM)7EYosURYxm-yTz@IJF)@-%dsO>;-*RecFh*X**Ra; zo3P#~>Z#+(B`yg7`jvj-!MFV+gb=DTUnp5t;U#ON8eXn|uMNuCdK@FRGN2hJ8oNUMGHq$ZsD+HG0A!-8u>Szx0SasK z;T1`8%pUYRL=tBcFOXW+#v)#E-?mzLcBGhfW(jGW_`DCYl<$G<-4L%Zm384DFHL7K z(sf@FoPly=VHp0X&vBIR)*(U)Bbh8%J-mY82fRLQ;wEkok9fuDMIRm;FQug6AwHzT+Axg5^+TOg)jEfvJl7Y<1Jv1SiZ?wr zIWSx*fD8A5K8++Xtbs2sKD>={++Bio5qZfM4*@wmNauFW+MTl7yql}#Dq24KJ1@?g zA6;(8ZxX=#_ z=h)=q!)fSKz2K(-MK5jWicj>S!}zTdWv}TbMzhX~G+Gr)zgW#UJ&gBnhgZYP#UvR2 zsDmO#(`UK63OL8TMHPwn1!-}$dJdmu39|kpSKkk|MjYSr)-!P4IqWq@@I5s*Nlyft z7XoA+$8EbW37oU}hYO`UL*NUp13;aOEc42;yWNB|(XcOWP&HYI@Pars0YY z5n|^VNBGF(q93OCJIg_H{t9EiQrM5sA@SvB=oq)Ic`g+TwDgZ_|6`E6Pi#B*rQFZj z-@1|&WCTyGepZTiex9M#HOJ^zkQwj!zf?g~whSO8Fh+#~kpu%|-)|hkSAHa17hc59 zY~rNp@^iD^753Xh7m@w8xUx8yu~erzR3VgmCFIP)$$+ZD@5}nhhJC{tLlOh;_}0pR zEgjzJ-=ahbM$2hTas*~d^X|j8C zchDGQU@>k2Y=ZU@2a^Px(_6@XynOuNwJoNtn zco=n(Ma8{OJz53o@tBidr1}=O1geW)zh0rOdILBvqCuLeL3$CpO@6;e_x)g?>2pP? zjY3L#ja!uxq<^M*e{A{@>?3>FB&9HwI+|60f`R6F$<#^w6g>+=MZd4}yOer(Q-7rf z147~gCNL={S|4^!oY%k5jr02zJVpjhEWCU@BrSYxPk~2+pw_g6(*v9n?bL`&??{Ku zr_LCczLZ>PKSQX9_f2{%>zq?pR#nRJM5x-FSlC~d@WDXaisa9L8p-}?aPHm27+Yi_ z1IZzWmmId|tI${kk)lM6Tz*ZBV#V$8`6O`Dp#WsYh(DW7Z*7a1Ak-7pGsaYF4$@xo zSlPJ23ned-yFXL1c(D7Xf_#)@1yZu}ZRkmo{Ndz$2uD|v8NV+apF5Wh^bb+ev)91T zpK%z-Ldm)We}fbAgso-qD|-EgM4#9!9E-j1`}eLQ@M~JBy=AvOU6()t@i)@<4xs+S zrALK0FQL8O0oEi(C0hQM+9aiuOB?o~WfcQpXkbM>=!|)Jop`%WRKhoBlZf05dIE9w zeWNhJGX8Jj!+rqR0rAdrY!$K^fQ>K+nLml8&oqysd?D%?U+n&BvxgrqlR5*tla*gM zntsPbO)5le)7D=}eo+b;T|t@*cDpd;J1uWb1vFqsiLe~6X@xc^Uj27o@Geegr1{Y` zk+4?F$}93Gzh92fgZZzuS@a95Qz(dpIL{oIfDw{0rOaq&nU7Lc%iFIFL96RilBbA) z{Sw;a#P6E3@D*`urZ6%`PL#rdF+{8ZFScbxH`TRzC(IhJQ_gt25gslN(D=WbOm z>Rn#x75deE|8}y&KSu&e$D9X0FRGoR8!w#X#No{g76Y5hszk5#E)X_{Px(s04|)o- zGfQEBp>w3;-cx~H?XUDKSGC~M#@j0QPP(A_aXJy`(CCDQR}r}m+s9xcBWmnHP;!j| zVfJ$oIMC${wOz|9*Y(HG>wcaZ(Ae=no+Vpf|K+T)6-Y*+XMqE~pIiJF+3AX#;YwOb zGogy|S>i@xH(0LUgtk>7m^(ddaeD00errZaZ_Slbg1Q5VY^ar%Q$45W{ixiFS??e{ zY#J}|K|LwN6}GFzK-Rsu{k`w@zD5URof*@!vD^?LCb21|OF}1_N{t1i=VRO$;ACI8&VPZ(&xHABP%w%1rR^vwX(Nk4|ns*ZI7*54Sx>rb1nd+v|PH5|Jrm z*QHsloCYL(UdwV&7*YPbgjo#}rOEMv1;Hke5_%e_er=)i`bH8_9l! z*4@#ul!c#fhbr|ZFZhNxSC;WicOu$r%F6Hffz+C)s!ONdaW*wlCWO<)go?yz^g*fQ zbJhs$AhJSS>34wLJJn#tm?t`kklYlt@B)k411`$Q&eRRL0 z@~=hoF~8Zu6h~309d_pkj zRBaOTEoEnPP<};SlCt=CWBrl7CuT2^>{-1_v?8mZ@=j|92+b~DStV{jig6fq8WBN|Q zkv;aLLHmOp5aeg|H3FnK*AGqKNP9O$z z9Fd>J5pzZ!*PUz-`lx#<%nwI%bul!|8X74CvXT)@L1CmHZVZO2xQgTx%84}lLriky z2op+E9$#@3J7K+@{c%D9&;yM6nN*V+{@e6rV3SC*J4ZOcU=A*jaNy-h(-&f&ign{r zX$L-ccSF@U^W7O^V-V@JE5$D&r|Qh6Wz<6b15=gpjPMeYOkmh5Ds{N&$1-o78qMg9 zZ1U=kHPw4{3&(SF|6&P|t~-|=Yzh5|uYqyTR4CcLOQX-SIdY;-{?P+ic!sB=jSy>q zVH{cojZYo0=l%{{fwbTb+ZkIFGa~3@0lDH_r)``n1mw3=^9Y#JbTZB5&36JYc9abo zqdn=Q%loFjkH^3E)qqjp@Dq+=*OGdCRUQeu0u8~cRv2B1&;!JmiWn+(b}4E<(u^n` zQ_XW>!r;c29~d!VNy7#gD>Tn#)rGd;?LX4vq`Q2Gv*ghqfrT6E%=auv>+GODa0B-> zwGLH}OjXU?OOS+5d&$nSql=uO>AUga+vdmnvEV)T$-?~6ocu?x^0$vuS0*_T->?#T zE!Ei5WFNh;Rca*&t*k&pJu}=Cib4rP>H`S&2j6og>sMK2kv2?bT7LN_eOmMcZl3ki zhg;juQu;O;ZvkOKvLFg7PpFe3o|Q=0sVewhti%oi23E~LAq7*2%~&7bG_^h1~S zaOO<+Kb=b;{|7X(FzTP7AP?!ru7Qb}3kKF&Lb~VpN2#t#GUZ@+bo4IY2Hcf>SUgG- zc`6v9u0O7P%WmfEJqcWRL8g4A6jSUqf)vgCi^Gn32i!R^bWZFm`4w3)pNM2by}&zl z(O>GXuk_!Mg!^|2<__WAsfCE^nc(yK|4JYJv-J!5M({=6+|EEjp?;=az)M(@hYn>1 zJE?G=&b5xh){G*NX#t6F58XzrFgf6%wDA`{u*yJ6mlKKe;4pvWx?R)bI6afF_0_A* z+PE(T`UO+NSX5T}?C@+D&DKkKVr`=!o${V#8RE$HD^kwDqSquhU#e2MTVPKTC=Ko0 zFmwzC6sb$+V6Gs44;XivqCfe;M^ zdw%l@Jl>n_6+!$}?%Zp`9V8BiN1CoUNcCpUEs@qY*?_OSDli#+Gi3i6;X7gaT{^~m zdeDC1VQJBTlKN2ow{IYrQ6+b|m~RUnAG^gI>sR=oA8+%I2y<{5dnjT&6zLIVw7LelZpuk0}FN$8;-Cbi%e7bsmq0eX7WLY6=G;+FBzAz z=pX{=LNhjn%P+6!#jwL}j$L2MHCxnQhO9|i5O7J(W3l8~hr~jcWMU?2$6d}g_ZgN+ zz(+TunnG)_xi^pJz4^E?@uXuq6OO6Ckr3f7cK;)2`@B4W=K80qjJ;a-J(P&%O6KFH0P@=` zt~}*iUVofwbY3l`f;xVKf=Ot`j+BzOeqK&t-NoIk%?ZzO-#Jeg4Pz)G-`G^U=R&N76Rrg~lysh?z)O6R1=Ll)7W`cVj5_nP!=1Xa;gJP|Ue6=bs3-$G^K!pBmzO zPLy3@{^{~jFKF^p$(ggJqRpJrw%uK^GXPZ`RIljg6P*6rlYT9F0mkd;XS||=0pU!u zKl=_O)&x*p@3haWBHiPcku~@7a+eWy+2EyJlGMIUV0_i0ilTl(2~j;qCP5gEaC;J& z2Pzsk|CS|HuBENKgDuydC*r`8c3_B9`nFDQFLpo_5mBjR`F1Mu!~w^LDo>6ZdSC&i zH`Cx99K_aG#1w|w=O3lvoLHkj<&%@iqm8v!AA@0ucS+5*aA4XKGcwsDe4{$Ih_>;V zG@r+(lI~vCYH!dsHjgL0lQUSNu0NPc8H=rk|LpcACt(kaR-N(bX!?@fxg2@{W&9w?$TbwJ*tp)^RHOu_+ zDv-^(*Fty%q@ zi{<94o_KKUlSHL~7@Wu`28U1-%@;Jjy4ec3`Q~y!Z4OYq2h0=}Uz7`7(9nry*Ey-| zu>-r4_)#8>B0HDZ5etWwfPj-58^@HAJuZV7DA^sO4<;g^g&#a8oIeCb^Iwr%4>uAe zYM~)}IqIzbBm+!_6IJ9}Ccfi?LWItwKW8M{pXnf_^y^-9goTg^Wq#US908oUOK$Nd zkEh5eaj_7!|6r2hdt%WOs$d)sHpv8QpCEwgR+heJ$9O7lVDq)#@sD=YH=vXHr4t4p zQmJ!|_VDTDsg|@OIDsAfXDY};^TdJrtOyIuC(0DOBcNJ$Ir?8pD!R@Fn3+V6+VUd~Q0d@6n9wU!c*C=496^Wfi zAh`CH_Y{4`LG!j!!sbp)MuMZ-1}lG||8{JfE*Qp#E%}g3nHQ1zCDcn-^_p@DR0F@M zn31J<&PUb(CF8u;Lmma)H2&zPA<(P{jQ_>4V(N>S;gH- z=1JCLiQ+;r)+QID5#Y-jFSegbv#@Tt(Bp-`cFSMHN2Rol;~nX^PajSuU_Qa*`4LS1 zPR9V5MVE&+Mk1Q*pLiMTFOJA)JMC-6;P7zsk9+f1Xo|1Rb;zs~uU*5mWZI zQ~NY(=>A;BMxyp%Og{92kZm(5@1tBe5H!mCQEn{15q|{NVa`#xoKB_}q{|srZCcvK zf*DnXLuYZ?rM3S~Xd@+=s<9Tm28*%F|&pK}%S_d)tClKOx+nB_WDGz6;K;fLDu zd@yg!4vCQ|9k%EI;bEMbLo;UzrYAJa;J@g_SxIRMpBY$c&XDhC`yLTY49#%0=QaY~uiO^4fB zToj!R#@4aLNopbDj@}+VW5g<8(`P@zLca|4A7%?01vXkC)KaH~&@E>D!zyBp)ul(8 zveZhl+SdbyJjhOC@p2R6*&O%#XokX7iUzvd*Iw7A?Ltjl8!4(SK6X$;*ga#NCMqhz zPIpUnNLPx@lr~Yb-Zze6NwYJ0tH&S4g*8x_mH$QOi5bHThzhAt(^k7n<97XW(KCge z_?Y*YZ=PmhcGMj?5u$AK5g1^EO<_U36oN8uMO5?D_2@t(6YNa>2khY$rm@bTsEBdt!jFHls0BFVosw*QFktf*H=nlF^b9`XsL0TaO! z+*Nz0`$WjM=nWiO_$q4CQPaHTVRLX$xPEUv2Dr$p3zK+H68-@Sk8u$n2~mmZ(KX$8 z^lF5Z*FzG=@6$YY_1hmrG4OsW(>GbBiekc-kakbl9$XVIEx*!f%dJWbC^oOoI5<9s z8k*3Lh@wZNnGvu*UGvX$NbO=arEu4z(N;s3ya2S zi1KQ+TPag1e-xbGhi<>u^Z{9;<9ia2@0TIgWci@x>X@!I#K1z0vmVnM=rxee5`-6e z&pnLW_e*W6y*|HB2>$^j5}OXRQq5^Ak$ZRjueUKvT_kqk;speHGwAA{*OT*iL2{@! z$v)WbBL`s6NI#zle|%V}^d>Sb(@_kuWV_Z&O(&y^BAuPo!}TiAWP5Drl9&P%$`K?w zfk{17#hJ#Wtl8%iUzX0x#$hjVTT$+JptMi`wOFAn_J*`A$9;UYnSaE-yGmg9D{Ju6 z(f#~-X%ZcA zHR$xEU2aHW*4p~GC4oBFyX8fz(!+oDF^5dBnNPokOAVmg8%`o!Y6%o5r-$_*gq!qd zndl~ZX#UA9`4?Ro$^KuvFp?acxE#0y-J8Wl5Jx_FwB&{;TV*@0f_f~R@tVvBc@jFu z)1pTYKZ7G_>uk5@ z>7I_$J|$|>njg2PIB7tD#h^cWgl?nN2XbQW()>{#48dQtTjE!eDb(YUuE)+MO8F!r zu8Wc1`@{X0;h?B&x!?6E|C0E>X3#s#91U}yr}{Z2@KszN!ST=}u{O5F0z9ix5S!6L zqpN;cSPK=t!4u9Kj){{#+IsbA&MMmB83Lv$ns6>Q_0E~`fKJ3|i3K3sPu$wUr*ZKS z8Qlhs;luXbd35@x8IRA^3eq3;rU?VP5#6|dLNZ`eEC(&U_P-j}_d0Ou)q?-pJvzm5 z9wxf_=(bFxoY++FZu-D$Xi2rGd9US%;$*Ss&4c2?zG0x@{8{9fz|ub@PJLsK#h|t z&sjr=t|Bfl7n~37EHYCshF@@B9B>f~X&@%1K)V&wL)aSo^G7J#w(5aLLM$Is7qYSx zKS<}t7!ccdkY_5WJ!BE=qu#SP|CdztBXpMFO_~bi4O@*DKpVtk^*i~Cmnu9&5*klE z6XTMNDGoyt@T=cjI&=^~51^xfL={C}xc7$EDNl5-rgB%nxxC&e&TlUnXc^#^|K z)7N(D_cFw_^)Z$J0~p-L45=q`Wx@w6;dC@}F|6vyriS%nXERrhT?~_iL>w@bb#MRrpx-|xGnBF-V9*x7Jg|ZJ{x`= z*ZO_Aqe3=RKkAO3(;a`UN@Bi>+5Sc#{RH?jLo?>E(&7$@clv?HzaV|3BoHdcN zl;-k$N!GRJw0q>*F+Y>$TlGFzbJydFvaGP5t6GZ<@2z4O+bLysTu=^w4idzWvwJ^eb@a%U z@wTQkQcy^E3>1!9cedA|k#s%)=m>ZNe~|CIc3x`Fhv^HJ~SvCw`m=z2fj>s0+-&41>2b~aIO7{Y7#q0 zZ1ra+Sa?f3774=O*}6VHTVFyk0}NABPaup;9F;o(YKYgDFSj zijP?0?Sp!}X`jQK(E3F}%MY)2Uv;ABytC z8dhgz{(+nsq&%U$#(zYdUl9MR^!Z2K`r||z5`#1`6dI{?@c;2@_urrzQSF4A4yg4J z<_GyfR(F_I_DdAF36`pN)c^WdX0Ro(#*=YL5%2WX_aAdN-}i?HzGJ^&`JdaU z6HrheXK?j!f$fz+lK{>!w7VYgx10UFQm-&+T$nS*Nt|_YBN&syBGU_vP>?e<`Op+* zm=pY%QMiYivW8_ry_>0dOXTA1g$nSeQW9rT+-7eGnWy$akP-M$4ZBt_7%Cmp%A&=O zDYJ~Z=2IvTeroUUnbB=lc8jVOs|gmaT#kOjIe8|76NG1)B+gLHXFjze)d8l`8Jd zaThaZ2X)L&8u@3;gD%XBkpQBf^K3tOxBdmrc{ps(=Q2x=SEi=6LZt zoYIVZ7#?HIV=2-L5~)(k4En1U@1HLg$-XG4eYg+X)$|HW!O&NyvOQYrH1Un$Zmo!R za>Y2N&P`Q{e~93RUgxLa>V4QfhVXBKil=0sYkr%6|Bb*y+DTVpp4G|wI3XIcy<>*#U}%zekyW_oNUEJ`MUBtQBc^wk$PsPtoJk^?4lz)DUhzEo`%rO~kMzv*D-1UWPesi1es|AXwTmyGBVWA?>Po-!XjEfPl3H9X`eB7>MthJkN!0P*XX*pT8 zFa2_v(JV(0QV)RhFB~#7q3?1uUMpLxlst7ZJRGiKc-TXxZu$MUBK}rX{ADd1e9nBI zzBDka>{8#G&m}jeeA!Y5YUC^eEQGs~OdDKaQPov565MA<57q?I%*x}c2sX*dp7THo zsOA~+;8dE|OqFeDZGtPg1kZ{lNZ!;v&$LE=bCM(LTl#pNmFBfpfWs=1zl*OSas@PG z(H|J{FAMvD-ppG?*x!l}$objiu19fTo;!LUe>Ro&#ce51NerYRrf)LtK&#Yfi!YVY z8;bN!`h*EoT+KO*JJDT0>t5UH8|LG0fU|fFM)HGoSk-T14qCrkXJK@Men)W-u*+~0 z5J4t2hjQM4wZ4uRM5(~D-jgI^+&CDZ~-DT;qt@>ws`ei^Vh7 zs34qY{Y2S(4GSpVFKG#LH;kb-y7SEG{R~Bye6gR>yiV99xBcJ@&Iw~9DtL8AKAHA2 z=dt_!>cct4@U82C-&%mj`Os=`oKGGfG}c#7Bsj)jKRV<^>fu<6C#<3JId(ekw0U1BHDR;0U#<~xMAizIhwZoupKKfC#&~~!p$rn#6^ZBaC zpA=f0xZhn3fM1=gW{yFAS{8EVYHNt|fnT zRX^x}Z+G`&wOZRO9l#ki224H26G-39;ybsN9Ix9sM z`Mv;T^)}k&^)B&SxUBT+NC?eOZJkJFJwEY{u+#HCKEcb{r<{U^e$Fb-%Yn0RI2^ka zRj2#*8E!Ff-`;`0z7T|3xK*hV+uGm?xV+s1w+wez8(A*)b%k7~_2!OPo>KI41G^Lr zzQU}XIeQVjhW`eF`aB1tJu)O$!x&^WrP-CR>TIP3c>pIo)o5Dd>RK0}eCntQ#KL~% z&6Ip12}JZN&5Dry>B87i(&4~~AJzMl^>llWCxhO^CdB641W)P}C*kPG19Eu)oOV*o zs@DeO`^E9|k5jYaxRpD?fWC!lLbE}wuvubDANnHn`PHMc{ve`ec#V03d98315R|AL z#yyQo^-nO=A+hG5c`8fIBvM{JRT+3J^c;%}W)j;}GrlfTd6fHY@GYQ`Y>Mp$fQ21f zEMxb#RQnu=RtV$|a7y>G+7WK#wzu};i8nrNd!8q~Bp3^VmmpW@&8vv-h+a?J*<)Qe zB_e>_W2@0ikm3tpN%>@_kXp|ZoBV@t82Wi7WL3zzVsHSg)I3Q+wkqNl@@p8(Z4Rc1lb= zYZ9iR>FStrEm(M76~|{;wkmoRtEXUyHx9C^XbM=s)alC6*z;7X?$RfnI}T{J_z0U4@hZX|8v<@lJ3 zT=cR#0=C-1g3w?#)&k;7?zUuoWo#~j)Y`#VB2ShlXjl}}oX}AQG?YgTh(W3N96Mmp zgMIyB>10AzpmGx;GzWuWj)PGYh;-qsGTVG1QoNErT%~+A#K8Ijq=^0*l3m6e>&V5N zJdhmVI$nzw3n1u8tWJX%989_Ou<3==wM2*OS(*oM3bL9B<8S~XIa%BAFo~?B#icrM-E|?8 z{5X_tl~>QKHT5mHRti1}{d2y7#tp3_B)aO&NRF`;qF4=$3cU{*YB?}3j-X3&56sMX zKTAM}3{n@Sxjv`?S+TH&#b5pZQdB2d)bu7!FTS|!0q!Q z&;sl=484Jf{Xe^_R@Y%y4xczX<1r=ggyuZ9F>O62lh#c@-acN|;vtzj*)i&X-bJWP zJ1rR14R?9qo{NAov%%&PHz4f;h3CcR_cvkezQl0u+-~ftU((@lNcj?_x#uw`*;o-W zfu@R{3!Rvfh5!XElU;5?G_NY|;x0Ib7 zp=rJey)pnbGduLn4r@)vlSc0`Hd{h+Fod3-XFqoS1+xo3H+uvichv5z?$n~Ivzo0Cq+40R}H^Cjp7LUKTW0r?-Z&P^MbfOB3pTHij1)pHuHW(~O zofdv5=fk&~iKKTD1I7m-9aZYASE$lHkn38v^p&91o@UF4rWm}mO!@X+YCceXi-}q( zqH-MslshfjqCP7v)0niDLOwrw+-w4FlJ91-$zcFXfTI?)`(TqGH@*#)z`%Zr&ewNP ztZU5qFf=TA+@vKWtx-<{UDb`UpC~@OLnEa|EXdV!@RPtKA?%h2u~9-ZGPyDVYJ=p% zm45edufHb?{`!LpBa|9JYShtP+|k|gvgb_$rVHc~NgwrO5sLfkZoX7JY-ZBBNc>fz zFRc+ydB5y+2)t`(U6qDQQvfH^V72_ zH?IP6WW(!aZegke^wmwe>asu|W<>f*LsKyArd6}gOplg(cESf}9}v=}MUimup%XBd zHd(U+DP@LqMvI@gVqS#p4-@bnQ}|yf7gu@6gS?p&-ZYn}%T%NpGy~8?t-fX#WjUVZ z<^~+>-Rc%u)*?kbBxi@WGaPjuclV9qdg*z{5m&?%C!Byu@#Hs57!g*9zu-V6exEg6 zM<$S|!ud1t6xWQB1d6e(SZ9n8ku+$?S+WUF`Ru7DrGta9n%wiZ_01VoS74NN;Poxa z`{jIEprRjB!L~^V2VnJ#&!^pfrnmN@y1aVOd$&3mXv$xP?)JsiB@ti@jb-(`a*yFB ztvEA4L{kPNM93Wv#RaX5YhL-+s zpKB2maju7$MtkGpStxwYbfhdV&(7a|gP5Hr?Ki=*=4oNHQjbCipjilt_}#r#Oyk87 z8-~QAjs447Q$+bXqECO?1lc_jeje#GY4Kcw4oFPJHJ1V>2pvA~{|H))Ra zq3|>6!e#yBh;xWi#w&~Rj8vr|snBfNh}e(v69hq+4B}(GTQdem2ZWT9K@V#MyoiHd z4Bwmp01kpWb2a-@Rm~-?KKp_SX|JghN5l=XN zyC{j@P(OhYuW(sIHj?A%A-;7D(u9(M2FS8@K+x4-<@BWj5w6qVKL?fTN~!3kN%s$cj|`AP^HMdfoY)rh9$ z%-%`SX@mcT>bC=!_ye4jUCFl4*)vTbdyRJmvQexcm}DRDMH_+a=lAWio2# z$zm>4DGhg69DtCUhvb4+3xyrE^i-gcjZ2i`xG|~I`jw`?`2)kb=gCTX!dt&ZMn&ZS zC_Bg6JK42+5d{D*We=50QG1x+8mdzL@AR^j)tX};Sj(qaAlOaq$Hy(v{ME%UBUC(% zzb4pwiorKaQ2Q#{u0HrP#HA_O{Tfkw;(Eq1T~W081Yt&|+9OTVk1x*^03|CbtkRe1|9922)D;1{L6HYk|YYay7hYx6J|idh4Y#Fp%9&3K4FyafsN30qil2QmVQ?BJFh4{%|@G%;ffY9W0omrX^XsKmJqeE{> zxTB;$rDa9hm@9E#RZJ)6@5n6!|EyvNeOqdxg>~{I&Gr+wm*+E4(r`&Ij+xPI|np zjiM)cNZ4q*cZ7^aY+SDU-V2Z%%Rv*8ZioS6B6tUa0#_lPprH2_GLaFqNR?ke{U57F z>?h`TD{tKn1){DIomL9$!It1>+~3*T-wpo13pk&I4DQwG)BgBCJ?VUcKj4g=s{)=A zO-FJXVDb>=`^HE*w=_Kxe!gBE?Kt-lxB516ZlEQ?NVOwetm5aay zEZbN@8GmuOXR?~6mhY@Ib%88o0QO}{2ykBf;#8$zxAx7cJM4n9pv@N24g)dX#dmkc z_*k|BMeP;6ID@|d@&6F;sAT=-rETnfiSHX&%+qRJ4o9Vh>`zk)&`oU)iAzKq(`ux zu{J&4L}rtfAW{N-nOQSihUGN|UBJLO-=whEMUfp1urEAa)alR+;(jb4(=`iQ_C3gq ze)x}vs`lt_al-1UrZ+Zpo|%o7VLiNUx4b}*!k~FZHLz6_=zTcQYL5dtX_Zfq4bczg z!>-OsT#Nlhhunh&EsEHF9tX?^dUZB4IBd1+-Nr^4@27U89T+BxtdUn$+5+%(*3>C? zag4}mpBMjNdOuJ%K7XzaEUldb9IEnOX4K)j8?A_i&+G;4d(rm$h{h4IEx6QB91f4Hp36A|dS3hTW{JTg7y=tA;0AY&T>d$r)50i6P#*fElctcMMG`YI%OeMyP}gZ+>eFEnOr<#(Mbx;98!m`(G4 z{30GyX&eipyZBDM!ys(UK^Nc`SBay!k9FXiH-)zKY&4WGy@8M&=458S?iTVN_4I`6 zYa6@u9X@$pa2>P9H!s0{yx#eN8{}6FPUre(>EffE4vD$E_6H{AA}p=-)2@pa!5fXI z1l8Lt?#D9)5#|#%CNz(@_?`Ff){z8C!lbpL{wwMB-jzg=;Zd!VPk)(_AdC$i(o)h$ zOE%8BejF~Er!+C#Njr>2i6eFl7+a*7R$A=V9mF(uh8x2{sRyQU$x>-}AC99<{*xB3 zbSvOcmwQ8JIK!lIbPLITce?sb3fFf7U2>6jfzXYUE#pyPLgSBG@~r`EzEdx2e{LTi zIq<00p-!a%BiTf1^Z}NQfA!lYe}o>tUiVibkNr?!_8Bm9DzDDz=rs?pP_Z00Fbq5tQqD;&K`I-9|5VPS7vo(C z1%JtCoA!KpWYMo!FEu!z{O54q>HsRpwM?}&-a+_QPn$pr3)s0#*65bDxqu1a zI3|^sl88)-Qmyq0(GeaD=Bdbaa`fjnV+byn4`U%g+pnMQ{2%B|KFWNf2YO7ETe|m1 zZQUDXA`e^*TmGIVZEdevg95n%hCohj zD{?_yp<~^px>ct_&W&#K4WQjWnL8g|k+%<3cS}GDnqA6WP6wcTq$V8ho144gRslo( zPTg^!1W3whaa+@1UEAgAy^WLRnVn13Fd2WOG`4Zxcwnmx2_{AL*u8!$R4WM#L+&7R{;1f) zO;Iq_&tzWw-jX}*V=ZyRhpnZBX8xjW?-dov%0S2z*{*mBIUX_S*AOtAkaMR@F{(oo&{3xLp%(-3THJJ z6X%v?r9Uw@Y!nT%jj6<9<466g*3P|QT*t=+->t+ub~^_@vD zH3O-cLhr@>$=EOy2tE!M^1*Q1zbP{r@0`mR%re4$u9kaSPka)R;`!XmOBo#Hl?YTT zrZ4B3{gHSMR4L%7iPNFPu#g*wdA%{yqAZp07vd!6>R!Z1UCqBoXYoPQd|tH`W)sgu zfo(|u00A-)l(;#~;4p~_aA{rE-`+#w*IxQyre*;{@Q~mQ@xFwA_MLEUm_Br0s+ju<}b%y2>SOT#AJdjC0hcY=T5x`?$GpEnF))UcNw*4Whbb#%Ml?V8+kWW+_ z6TM=y^i!fD-iXUp^_e*E^G05C58&28A6B^|;e^SF0!YN>A3J(48dss>$s!UHek^Uq z7^!sARhpP@BYzZgN=hojb|K0Rzvr9?A9pJr_uBm6M*cvnfJG3D&?gSdOr$V1;x(_0 z7N>06){!Nzw;q|!{Zk>Sz`R?EvIJoVQVkt6SwepAyT_>P0lyMV^@`c$f`c$e>}Y8c z>rRhpw}v9x0FNvPm%a+CyLq+z_4nYTwG)mI8^DM62C*f)|bbwj98aQ{8kV8vsh#0Z(Y+fdpv8N9m91#cU}23 z%76APo2TkEg-Aau;4|9i-oEN5G_cTC9J>X6QdMx=_6iB7m+;pU2O5Wwha?JAnOnHb zj*I7I9(QzbBs+oc9SKR<3(5Vmu*0lst~BV$po#CR>Uy!XDY7#q`k@e-eFkYG6|ta` z>(?IJj&t`MmH*2(?_%W5Jp%SnS+o&lpea_eYX>t^miO3H&@tyiRi&eBRnRlOoH`Z z?+lZo@V8`~dTAZQgi5N~SR%aIA zoOt@b^31ecNX>whI%Y-6lZ-wC8pvBY(K|>`(xl#JS^#@fHz{bF6A798UI)cUnjw3n zbBR(6%N@8T~TNMR0U{)IQB)=r9rW>HWbs!)8+XnW3egA#`-ma^=}h1I^j-slvN1(hCgG5{+dT0XXH|}>5jEd<^)^6*(?qY!Jn$Cj<4r9f zN>N>n08(0FFs~mHSeagsoOun#V`K&@FaQ7m00WKOpq^o64AfU=7wqN*SR9kubO)2_ zbXJm9y)HfCE3)yj_}P4HzBXSQFO8SNY2)4^x~4=g^gh1dEZWh+q*w#gNe~@8-DJ!c zy2+R?b(1h&>n32l$!20O5@-Mb00000000``1_t+#000000000000001IL77;G;~7@ zzqDXcv(-&HwtH)W6lPRsJ5~}ybBb?|gpZBdA2N2s4z<1wJK?J-3H&^635wJ;dh1IF zu{KK5uZi7~eQMJ;H^E`C>_qSD&|nT@Vxn;s#VWFi#bv{jGZzB{t!K|SnYQ0>DoAz= zV9x~;8wPu;-v*e2S5R_y!n{WL1VJMVsnV?5=c9~rB5AYz= zORJ)$)_&v13t1DEOXsMrdGIH2I^s}J7lj*vR_#aVM?5Tq?Xwng;mFG#ngf0zGveY1 zq>-}Lf*+?CO?FeJtA}N63MlTV_pBo*xNY0dB4F#z|G>^PEBD2P2eS1&fL$x@9OgTJ zi{i$y+G;^#JM$U>A$H0!#fZAt(D0QWk* zyli5qhlLzcp-D0U>qD5I^DiNJD4Em?3kwQm*WAYntBx87y z8Rx#nACH9nZ{F#^?R0?Bc`$@@s^ZJDXNn4Qua<+VIi@&3%!@J<87HW&oT_B4M`DKX zL@mxGTVk=C#Sq)6NyeoR;ct;X_)|N27tCr@*`ty^Qnlj7EmV9H9T%yOPmWXp2$6c9 z;lDlA)Q4jYU>Y|P`GDA0&DmI|xd|ITaB46J;8fYmu_r-_l#Hi4yo={~z54|za2`xY zn2&=e9Y7D5WJ+3U&!iw!CB(niMC7n0l!H&cgR`P=G@~Z{Nge1z3jVC(BCtcwjy|4D za>F9Drv923x84M+G;IC3W}fCWB*Lz`F?D8$LgV=QC4Ng-qU(W#3II(c^hnq63v(iz zLw@2*=rlUw+d%U(%MW$L?u@r(Cbf&PNZGC8$%-J;$wu57S*9)_-ylQAE>~5XuPP&A zD6#cIDd2!YUD7Ap3|s`%ATOnIBainbQdI*|Mv<2Vh)YK<1mg97QKn-%F zRf%oA|8(L9&x!Bbf~=cep6{+51vJz3Xko4g^|mt)@LAPri$34E&kT7! z@0&-`T&)+%FF1#1lJ5KDK+um%8kUAYf3}W>=#j4Wo7AP;+Mj?89K7;-50q3@TQp%f z^9SFDP7IAPE&r0O3ivk}CqF5h)YF9T7L#g%g&mUS&}Gd7sA~VSJA~Mm*mz9X8s|}` zb;CvFMdvKnCu3jPk=jN-J$?J45sJ*8>g?!SZy3LRK=l?>gG*Q%fE%awumLYb_Li|5 zs?4q|96;cb&_(UJPoXVVA zAJe4i;s1v>d3uL{D0h*$GsorY(DV28v3YdOcy;G>dT>{iHA~P%M3H;I{biy_L zsweNM#U5)Z5ZduU!YeeP^Y}P6=tCp(w!X7r;AL5i7T!?K9?a~P*Z|onP(w0Evx^hK zIc8d-nt4$iHf?L==GkeQr26Qrdu=tLl4`%ht!-czvztkQ#<0tK#iIk3{+uHw8SQW& z$ySHwa7;jg^tDE>#g6Ku1!;sh7kDWwCa|U7#DI^hr&dachZ4-4Q6C@E3et;fFTUc0 zRI7@_N4cRAxWD?x*aQWgJLf)p7e7o5lbW(a6A*iac6lcoZ8ov{fLGL!n@JV-_1U#} zf2L_ABQ)YpZZ6+mWE{B{%Bm&w>-~eEXje1AYn{6OgYtS*tq$n&42El*t%%o$x$sC>?Zw-?@32z-Mq_Caf(#4kF^s^SPw>C-p!^7 z)&6t@EF9b#;d3xSeMrO!K+?*m1EH}LPr!90CKbw2lNL9503+-WFoN7T!6m^9iYUz= zkh2v;@5@+{% zk30}7DHErG;26;ipe0LoMZejaRdk4g-L+b@j!itBn@c+fzO+O98hmr zR4KNo$Su$x31ld8eg&g~md?0*i%zfB`ZD#7T9C3`kV&730y+|4)WH)fRV?_1mb`)`9LGrzI3+~j z-L%Z}T9PdAOT-P&(>@cE7(D{q(AhNvVLe`&(gOqKQaZw0vBrQ#diklti>%~{L$dVK z=$h6)L>ynRAj%4hKsbEQn0;8J(bJK<6Y@DUcG}e)R!wpz7(Y}j8U_~N000$nBNhHa zl z2yGQ#a@qb9vdRxTqSYXTgiGS(`I8*&$miissZAC_xxB>%ENL>l@l^jACOY|!Yhzy4 z``?G0t4@1$IGd%&(sY>-DyYODfYjG{=cI z+W-z(am6w}NjOhCeC;U&S3NikT{2S>zz(sdlCT1Psf1iSnCEAi#fa+|txQ4!s;PG4 z2`@^%XLLb>R8CsgAX>@ssq;NZgb0Yn<#v(S_P0|1HbxFK#B+-l8|@eaq=DS|S?l8= zry_wba+1qK!4@)l#m~4UMU8AICdk`|*Xa7U;WsMik9Ld#Fz=$r4ovakl=?L3s2b`8 z{aAutEShxTJ@?%}MjFdGSu~@Q#axH;-tBUC5y05>W0pf*rjbhqRKG7H2R136&b($g z7p!rD`6DW~6zrlI!wQB}xYE^Ix3NyR@ME3)pHU#MQbLO(+s--r+bL#+zIPI-$Eq3a zF(~SPt?|&_K^*y!)1zH{wpkL}Gff$nObPa|DIEJTRMJyb}{ZuAFw*bmr`9!$KD?A#q zCHUYV@p|CO;DmQF`8^27##}|Lli5=#RUYjpPRI@G7fWpxkz!I|zYhr*I8LZc2-M7k2kUEWEB00Rx}PpjwSr zs`v?Bl{v}G>9?L0IM{R6?JorG{<*=q*_8lYBqQZLTLgo3qB_73I;JD!C9Cf|!)Ys-{ z*bdIf$J%5g($-iBqhSe4wS5B-T_SN%5ZQ0)Z z0QU;QY;l7O>3_}aQ zcWWPw4rP-4o&B>GkkV1fm$lx$a=s_Y{Xl#4y8rPEr2oREH`^HLQTydk2?+D2cCLlB zE;kryI&wTz>G@57i%`WIIwRD=&+igRaLMopCIgE-D3rYtQ9I%TMi$D{8hD+ZA%7>K zp7WD-wZ0m)py>NBP=E`{oAXPtijU91XLDPw@OHH3XdnOpOlK=r$M$>&pYd=vhn|k$ z#*4c_OqbLjLXw|YQ|pC%V)28Ow@@Zj+ZA7PfzgTrI{*vJ(|=i|)If)?2^P0^7=2LG z2iSKDZ2WhQa+qyr&F<(I0L66l2 zd*Ilg^)jBcs5y`46Xul_)cc!wZ8;rk@LLjhX5MZsT0p>SRw8BmDxgSiDv*+M*`C#g zcu!k5f+)LF*D+gJEpq39b&Uvmoc%~pff~DtlMAbDl_oGIpB~uapH?)dG~NCO);b7N zwH*IAQuNpLvSyNmrma`;VZD1TgI^m}&wIPUGO~dRd#@el7^P8hxYRFQ%r9i=+pZ0Z zrT^QUh1^1J;?Q8vCk&g>e`&UH+qZzYprQWktC@i6fz|4=0)!xBhD+nO{OxW9h|%m| zW~)GEi8Nsz7)-a(iAT(?&2S5wq_oFy?L+Za3%FiC_y}-=Nm_2&+8sdOTAAt$vueu> zguzdDhW^*kIoAX`u%cdB%MYqYkYuJZts>E3@Z_Q4JE=LIGrMb6e=>kA{40xzXzN}# zt+>C*kv-*;Dc{=ZZXSKF10*))|c8UTzd!L?r6XD9aank*z znPJMx>DO*;Q7 zdHIzL8MGPDKnTQoDk?c(zP0RRYXZmqnW{5~$tTxR2Slx-1JKwVwi({94eFx9q+C|f z$go$Pq7%O0rS=k}q6Z&YQ&VO4A16L5#E@wWegVpQXtW58U!gwE3O4tW{IfNbpy+)l zH@$@y$g5=~800@E#{ejAsXshLc(cTLNytUpYcYY-Nu!AOiAu`?nM5+Sf@x{b0|IWG z+u-!_hN|K-z8rUo2{t%Qgq$(K1p97g&BE}U{i?B#13;Nsy&?4+G(mTTsTX)SfRv-n zM^p$3H+AaKfT8|I3~Tl^*$@9-bHqD`ch_bYyN@?_l7(AL#)jmV7VikRPC^xqSXqS& z6%~|4;ezQtb61CyR8^_aE0rOD@N8<^ZS|hjGxGa7}p5uno=(d1?Csr6|=8b z!UG0ox4Fk}+kS-2U~9s`S72W`j8FPF+N{ObRwRt&1Q!UGEMHh~9CIM+J^Tr~;-|Ca zj@|rroP;YJu(JvlDk~_BjtilT>Ia0s-3cGmyoZ5ci>olIkbHWEy#MgMm_};4Ahig2 zu~kXynxr`|wS1FD*>;E4jCl{*Yj+j-UT7`${>WTs zo?IoIbUeF#-gV5R_{XO9z87Ejd*MmzHohAody!>d%roUTVpJUf#5-k&{+Z~YQ; z7KcWjUnKU=pPKI2-$Sc*u>fWrb|GR;I@;``3?nY{{*hrl(}EreYsK2ozrJp~|7mdi zoh2Zhd-OQ6BS$&J09EEKfA#_4k0xjzcm2)}Yg803FC3sum@#V@aZ0SJn)gD`OHh`f z5z@?)n-p{b8-#?tobP;*S8wQ`|~|Mm+)XO_{{lwJC`f=s^(uGx#V- z3(lIT##X?j^o}xNrsnSZ%($dI()0bXQD+q}Nue!^qD(F=P(7a&LKa3xdb^U1VaoU+ zJFhG`&U+-nw;jObi;aqvV^=%qxvShjWy zI6TGzOQhG+ZdSR{YwCFb(pxF8PV7`Kgvy}Qc-D|A%%|-YsD z2PO2kefH_`YHxA`%5G#H^AjZ|Iq+C^DQY1en}%S!&;UL(O5I{&<#XxS=!#~P7y}M@ z=q(_lg7&<7{#vw@`YQ9lk!o1+J<7;$r8l+ct8oFsMaYaWz!>7w^~L%>0v%WW>`tIx z^R=+bK*C~|0PuMxwAugh2%lu-0LX!4(t~#(mdJzt-#_$mH&mRk@c+gX9E`C)xJSBpdoLZyb-+ZX{l4}ClT;?_K(K@2o1<{T%;+m0 zHlSeE;`{-9E(s#${$KYN*)!9s+w80X31eNGz2HM4>A(qtnYI9%N3ViFgLZo?9pqxN z+-nu{w1geGX@05rg$9a<@po^rYQ2xD^lmmef=RSA)~smUhY<2;WRaD%r=tqafoN4Z ztJe2h7S+C#IKo$yu-eH|W_zQb`EUMe+SSf`*RMq~edkN^To@ z_o<=;ZhYqA`HGpD*8(KB{>!U<%ZwR97`*#1_dHOS54c^-Rg$6>@SBKZk78JyfXY#? z$BTAI>3GO!GR6c`;H0?C7Wruy?YiX$A3h!}5C!R1=2BlS!c{^Xj9q3q(pngo%m*yq zqR7n9$5~x2^76u5t`?BtaLm8yf9xS|0Rv#Is^?nnH}MRYr&;x_;yR5!-o4zKNPMEk zK7hp)#ctHQ%C>KSYhVf%q`V@cAtaj2rlRAn6 zO%6TY`Roz~{3J1oFsSg)ybK!9g+$2leVM=_35;b3W>O#b$)MB`?*B23y{XE^(kt{5 z@)P_m%w}_Xx>pI&A{BxF00000&VUQsi}X`E^k57N>HoHsGnnLuJ>w1z*GNOEe|;>X zQYQDiM(E#KA{|iF%ot9%zEBTZy8!-vTL6PPr-__Y;6_g}~0HrJ)GHtT*7z(kPMyRCyH zZ{x3`3dbiRV?D$F*X6)KxMj6z51CUv^YgCq?9cov9pu-alG;?z&Y!o#D|vLVvZDF# z-@1p?CM%+Ehy#Q4B4;!0r&D+Di+F-`K8GnlqtkcG6<5*;DiVf440a z+8aX&O`X;&(jq(*XUBf`0viUVen4OAbhr_iknDpYJ~_>P=ua=W77=xTByMc!rB#sI zcv+shV67Y|1BAGdtd70r+PCc?=R`_tO4rNq>u4LOlE=Sax(LIj?sqGSm2bYD=Uj%s zc%Y6i<+-2qn1C6kNs|{zF-XwyuE89Thz1vY8}^YTKvy-0)dYKp?z{(8>I|#kEdYH_ zh%l!Mhi%U>i+S(4%O@Gm8(Y`isw#)%c7xFuJ8~1 zc|5{^DQOma+=inHxbe|nPBFNntNbEyY#CAm=UzqOg?SHho7zfTHKQ=IU-u`PxqqNR;mndGDlyONhlz2 zI^YKD>?U*srhNXSI)A#OrqO>Y6E{qd|Bk`L7JYQvuItxq7zmKiuZ2tG{|#VcHVfQ- zS4vz8{6eFabv^@zWY=u32n2E1ja$+4&BT?~YleQ5$dx(0?77F|k1f7tI}|Mm;KM#A zFN$IlIqWy-=7B8x9Tm7xXqDr3bWQXAyo0Vf#u45NS=|KfQT&3fnLmnTnopI#drNhm z)bYI!g^n?9p-~EC_gthGWkcf2b(9xd98aCxt$*+bnW482#ai3p@%rax%@Z$Zr@_^a z9_}xr7tVrdit;E^DO3|u*P!(q%_0{>T*`-#x84bj&t$k#UKWlPNh=@K!H|6atQ{-W zVHGW){xp<-vBK%TKP#gaW7y#aa?R*`A-TiY*5TosfBi`g_lG49Oy;Yfw7-qAw;Onk zih7VRL+h)~700R%a+}o*AlGerF*YBA+3JDtD=lgSI`}mHhis}PSXo_xYvcc(SlwPu?bdAp>+e!BHr7I2<%P1P1gFDK{ z*pf7-(=CS-K?gs6LMh`|6#^7)o29>Ub4L!hVFu`wlfmYw>X?84005By8f!&SskRYr zoFT{nz(srrT|+s#;$Vx#))jS7N!PBHGvEsg0+tAmwiznAbyq%9mgV7Bt`M0>M zgp({U4iw+>Nj&TDm)C_Ff5WVL7M#x>UUfPbg?F>$-w*Tr3H*gYYNX&dV;h+~dBPVQK77U1vt+Hj}iseLE1D^i7GPkQr z%Vy#sMp$}6f3v-(FR4GuW+=TrrBCn2CfI{u>Le<>32MsE=2?JP>r?hsWWm^P-|Ae{a^eK)4ZaW^gni%fE^?4=GyE@QpYPV6C{L z0S~r{v8x=f#IkyG%+4+pT5i3aBMKIF9JXI?g(s8+o9EE};yU=eUpMM#q=AHR zI?AzX;JFd%wQ}h|nI}=P4h_m=p7JFX&_|Vb)4PPO5G}(zbe)9N>*e`R`lil8&zSu7 z7+k(&Slfn_!!C<#-BP4u!w$f;9t3FM&QjxS00000)p+NLBm2?cdW))SM2T_;5R0K& z_L3s%u};=X87Hj_+D|DLxc69;a(C$NG8$4-8{C=`b#ZDw0ze7n=r<6EyjH^$-V~m~pX}QEq;W=-a}1YTFd=~B@=rIyk=js&@~sah zjRW+(2!!mcD48+=`UY#?aqSZPZPE-Tv3Kzja(qTrAgr#kfz%eSg+EoMl0}gf(=R^*5zg^h zlU|P`%|uGkKY~{~V?ye6-IpvYmdg zPYsh~HtZsr8SMuWre;3Tb_z)rNHxp7)XVZfzL#2Xj5TQ*?zR3rQ+#G$g!E&-G)(_l z3q=XF+GlgR6Vm$lH2j^w$wk#EJ(T)_%`U4}ZYzMy5#oB*Rw7K`EI>bmem)Hc>tKa& z&l*ESV{EID>4#y(|H`5mKGGK*)cceOhy2NoxEGD@0Jmi!R%iEloBjn{>aO66;HAOp zrnB&)WJwY4v;BwPG;E0Aacul0Nuqo&2NN+5yhYkf5X5|u zq9r*6%=kY~S*d`4@L5GvZLd3*RcIPW&I|f>%$%~iy>r)k1J7BqO8q&vE*5|(B;vch zPE=f{&)5R}c%4se3Krp2tm3kGBJYRo>IzgJrC$uw5sxa!NIxLLSqv2dJ-XzS51p!^+GG%brRlei2x^Vf>p8XPCzL&52&8) z&3Cg|W7a zsAd!RQxY>w9}g#%lRL9Q;-^=X*NP|wCPG~)oduF7EN7tmflHKc*JIW>24|#!&Sp{!@|zE{)V;A4*}hB zurAn&XJ;Wl8FWw!TTrPfPjZOG}jdde7f$IRe?8MUhz3A za@1g)Wyz}alSQJ2CK+{qdRp2lDzpG>hiofurJPVpEaF2JWaTJp^U{vOQOyoJ9j;W6 zN`+M*+mp@oj{-kcH?)*4RH?__Id@)hwi3_zfOxHYDVVxJKjW`21!FI!F4DukGAb<) zKL+l*oo7vikwEpW~1U4_7qJ~^q zFl;E(bF3T3fp>rib5dh?Ws0MDumrMQg?B{-9izT@=uNy6Nmza4g*HxwC;ao{{@)Hc zV}D9&tj0w!<}iq!8b-CH*x}*HyR>qzgq2RFw4eCWJS-DLDUA>! zVlUtlX5PX~a;;A)S1O4{Nyafz5E(4m#(GihZ%ImhKNvWkyF=mIr zl;&89JJb;XkQ7&+om4Ywf5M1Gx-+JZpE-fXa~!Wy3Gm$j0014TEAW!4Oi~NC;yOmR z;{%CwPCEQj$Wi$hy?1IaCC*$&Rq|0_FMsqtqAVoK^yGIft?wy!XQQUU;?m8T9Ro5e z^fCogIzT{K4zcLM&pPUEJy7@DP90lKZ=|gPf8>1SqRJU!+#-0ozBk@80*s|Fx1yON z#Yl?BGrKl(I>T6i!9~F_yS%t*S}3LFIiFA^`hXw!W-#gP{D5?Gi}UwUmCeo@fn<#U|N8~%=_m}R_C`}&`Y^nV79>eZ2^ z)76`AsF#2c2ly$@mQs!JA!_+qpH}{;0nWu@m*?!<%nOlh03a)e_`W|uR3{Y+5%Slp zQ_c&8_b$8}2+yTeBw||NCDN`lv@nK*5uiLfyL7j#GY(SI0nbZ!_tW_;=#c=83IX7cz)g*%WL^YmV_}lqnL^%mM zDD^Qvu`1r`RC`a2$To}9Kf!iVqb`exI7$w$g7WBPw;22~%Q>#hCD&K}T4hT=?(XB+ zfrQYIZ#*o`9ggQb?*x3RPh0jaFHUh>GNhL1H;f`={en!SUYY~n5t7AwyeCi|r^|+{ zR{bZEJW8@8EwDTZZQz}Rb6UcyNw9JgLRh6AWsjzt9#NAEO0vV{J;r#pRd*_l_x}p_ zKfzR#`{OdQ>akaS_l=nvT1TFSTgqJn9}z0bUiz3Q)OK4MY~Mp6wl(3|1n?E&3@)m2 z5ILX+T}*FPbI-qqooQ!JP@8!P2{^b^!2)KHtMtBQ#W0Y0GhTV~c7`;y&Ykp{7=UI%0y~0`}#yPrVMDd1y5WH+R(U83x%4ALtj1t@rL-z0+;nY+XkAA zlyh|$?JmkFG~D3xZ%TxN2xj|+A5XmwClBVv6j(&*O>$!{_A>wxn4mrLs?QAIoKy<8D+5S- zdFV})n8@BGIXBTDNOpbJ6|sjZ{^Vbxr0osWDy2!@`_^D$(+5&fJ=$pc zlUZib-R3`wa7eAj&i?`;D0E(Q61e3HNvSWX1$S0R%k#!1b)ab}^Gm27{P+LKcyf?BwG?x!YDge+l;}J9{zU(>bGfY|umnX@744Hu z|0r#4NCz@0m4Y2|(5>OiK{3sBYN(RfZkqxau_SmCVb+V-f#zHJPjPni1H4y1taD_+qh4@aA|FS zub?-hd+#Au{X3t;+Wcd6_kDOw0}c+0;PN%=EWgsrihT}+@8>d#1zZ+f}GQvhU}qa!3`s$)IEtPwrkxHa!=@sEajM$L*SiWK;2ZNH>9ZKeWvL|c&v3_B2_rryIc-lb# zbx;fm-9+rr)y@)(?wGci{xqXwQ0jO=Wt+qeuseSYYbdJeu8OIs-a1Y_2yXt~?fVl9(Ox zDvELT1%o?+XZWX*VeHjTB$a^&dWYXy_2L=nac>j*9oOZm6$U#AVfgP~X`URPsY{w6wyabYHAgO>$N@3u77p000f0 z7MlYl(KS8jar%I3PV&^V9-B`fUy4~v!x4MecB1nHoYpRV!~L@WN(7CyjokDtx5gvt zsV+^*+iyq59QdD6*yapsGx)ThJ&U2`@Jme08ee$Ca;-eX= zay%0^Tm6=v(snYa(rF~x?*F}M9LToRsu44X#1Z*?B8b$X?*98aRTHPL+PScp%Bgv& zDRP0gF}%w_vIGmgt#k%E`1IW5jQh?!!q!|a^bzo&N@?%Xf}5o7Jr7FPZNBI-MA|09 zJ6x+^x_AD}A|eV1EKN83fsC5>^S~h=s8`82QV6H{eLrYvePNO)rx4>Bp4zzZ{G0Y5 z*7xUgGvkK~l)73LMHDX;WUHGLG1^LW>&SE$Ix@X78|mcSHyxdV1biy8*E?dJoqhg>m*R9THsn4`p&3k5pjl95Mau04-(!4M-jRKT^VQn(tfULX4;(B7bN-Y2BjF)K2o2>+S0O%gh*ZzvXlC-o3zJy5= z$#OsNOC$}R1sMq}z?l}WR9Y(;pxnI+buYLAruzZ^X4Kilh(py;8t&B)N?17hV$ax& zxwe4Tq%A9hw1!^Ru5;%>!)E(96L>;FcDBgI;L`z_!n)YDk@Y#mK2zaX0Pj%sY0d_y znc%sBN=6BAmcL$K`OlooVKKE`_+L+TX$U1YRT!#y>JP=GSAWFq$*ZY-S%ja-qQjkR z#^L;--*6`}y0ltpaW%N4wy1i~<|?pr8g!NWZbOI%6b}_eWQI{oXKkkyI|Y>SUbY5W zX}q4n7&!K~@dV+ev669#ZE!HT)y|-XKbIH8j!s7GF`y84L-JKTEtA-O!>s(J zyZ|rseuAzbEHfmRJjxv;_V|zmG)vCMAEtW7mkt>J?l9$Z45Fni#m@Uqs>lO6f>k7l zgEbL=(jidM(mSoZoW=i{nuM(}&`eYOk+sk(L@rn!8>z=`-~*?sbh8i7l_(cBtDw16 zzk2`x004`y_^8@4438DSx`trCQ2q5__3g|Y-h|Z*)05^N_6#ll8uMfBS8PS_Wk;-p zEl__xBP-BP!Kpe3;Wnf%%=LxXrEBAne9ZD1yXP&h_zuDddHd^A4H(83cjC0LF$9jI zxiWKXYXaxI?zzs{QJSvIxS zns@^T2<|H<4TgscXv#YjN-TZKsCP30a=u>fvOm@l-91Mf+jsiS=4uXwOzmhXZ~E(q z5F3Xrq{l*5$^@!fA(lXs#SMwSXS=jtlUg@=YSLqv7fD;9n96tqfZWMu5fs=!dG;qb z^1CLH9_3nG*bS$0S{jp8(W~XAZ49ov1vo@OXozrQRf@MY)!St|(&8 zE4^vvHg}xvlvm9$5%C!ut$1T`@_-_d>j2)^g%{35gDVyTL)*xgf72IhqTg!Oa$$N( zkx;fUKhaiUD6t{FlLiwZuhT&S_bDEWNvXmJWT8oKdhG&QI1C?*?o~=cc6aKrF70DWO0)X>}vHlAu+CGW4tUr zZ-1^_ffx>9IavfDZ9%~ZU%Q^F)GBk?Y|n{H>=?=Ka{lA80A7yjdcZQk;FQFlM{Ers zpb!j|g5p1HD^E>l8xd2`r(+)^Fr>>tda}EA?N3G>#r+SyYltIbeZc%bSeuhRklkxY zbVPrP&mjI;i|WC5f()xHk*-+)i6qj{CQXrPbMh<9Q62P$?w7S2Z|X3q=owI2gR@nn zg_QQJnamNo5~@RE&8E4FGgxibZ^D9XQ}N6*PI}UNbILq)XmK8lxZc;FHf^7F4I}ui z_8Xsm&@k|c%Ia?9bIrk`qt|C4Z`i#4q~`GB5RyLcG@LGg4$+f5r2d)H* z7=pbhiZa4i;hwM>@f(lBRp)le+OCnt5qSk07f7H000000KEVb zaTzH7KB(HhLRZ0n0ZCp$#2s8WHZQdu;1evXKBln;f}mh`>BG`A|3mJrpl?jan$Yn@ zTH#XTY;G>K6xc$CHbZqk=ZG(&k>%y(<>lq&<>lq&<>lq&<>lq&<>lpX*0IS`_S|te zMSCRI40_;}WLaG+B4X5f8j-kYG}LRqaODvPlc07*RpVMg`d260n4ux4&%K(MY*K`? zSvf{#MLz}qo)QyV!RlbD0Ts;29#gMt9|y(ETmC;is_mv=2d3V?4?>f_IUUFTVQPl+ zln=ET#n~U61~kE{rm|GnS0W@rs5~C`yDJ=`8;F+#N=5^x_;n5%FrNTC8#-$!Isqx`xmacpUL*h6Qr?abuE;05hF>r6J)Q$#O1s8LPg@1&qNU z9Y$QAro5>k2i#p*TlkJq1`PiF>{EbJ{{^N)jXtEi5KMh(kY?$~Gu>2#Puof}Sgk*0dp=wOX*pmUu5nZ%JdxufJ23vFJ&Mio z`kQiHrIQ9U;0U>Emqg9S@SW><(_p1=Rwl_TTwI-}000ll(KfaatZColkH`4n+QmIV zayLK8*CG8>VZ$&v@~OTT@l!r2X*RsfOuNN(1W%nrK3!BJ)Vq{LBcv)!!=TMC%^`RMm+M+4Fr~% zhuJJ5fL46uOm*TQrFP}FXtJ)PyM`a9OdZ(Pav<8O?9N<6!@WnB^2wfPKoLm{BK^YI zp#&$)%aI*I-wW>7Uh3K&??nJhC$W?TJ#R0jN#(}CbGml-9*sru)(w7T5y!PThukdw znb>H7C8)GaChK+D7PzEr{aZK)5NYhGXV5sOXT!C*{Bu|Krmf@6iGs6ffGMHoAE#VL z6%!3T^2IoF+dUn(NfH4}uQf}uKOz%EDgK}x(uMx=3>PwE=#0KAsHNUdaMAG*!NEqp zs`y>cYaI`XXJlc)zEGg96Rv7yzO#-VArf|jY%fPL=IFe{1BBsz&k$v7bCP&}6)a~g zmFM=@ZLF(zmY(9d0>4T#SL$D7&CrDl z%k9Z0E>|wQ9zj6OfeZ3f*HA~vssXX=?eCu%cX5))JhkBLCo6##9>K4X=vJZW6F0MG_vQ%uzh9Kj-A(|55Gkw#>j%do`` z5GY@dPbvv3~6308Ts4n6BT?@I$?cP{h5TJ}}vpeYYzc=iSIu0tFkGJsY;(Ur=scudg zo^dEO%>s88H*IhKgd4CE`?_>(fsshRin7;od`xYh=a}zkyIXXJAQ60Sc5w(v1&pp& zq@Ri3Rb**6b-@$*`!pj);OiPjwDW)fGWD6uJEYE`*(Ba>NNC?5F-p;XtmqL7hQ~6= z`88Ky*ofR`MP52dC>fLO*xqYTuhtx@C;*P&84a#d&}*@fu1HyCRmPKcU*aI|C(i#v z9xp$Hih*ONDQY6&7t+fqcFU9h=r(e62iOLO8ligQVlWeyKIU0X54odVs$cH*z}Kyf zV_aSvwR^_-7sF&%MvI?=v6Oki_KW;nsO9Xh3bc+r=Y_K+~vBD@x~Ab zAKe%+y=umhwCF$;A@ZIY<}EF9>B8;PHP|+N>A8LVp@B(K-A{xTYwJ1|%%FIRw&XBv zCT^AX;<<5;pfi_HaM$b=d8BrmqRgp^G2y1EX2K*p_XhQ%gr3`_EZaIZ66I z-Av{ugdiW>KNC06IJEyN{~`)vg#RE7GoG##mD$S5vwPIwWKDi5{+>D(j2dYU>9W^5 zM~;7h^dU1hyroGI6G;v;)?n*>jffkXRa3lH1*XlQC>-m$dOLtV)%}Go8}O5gtY;z? zNZFghhaY=lZyRek%7+{KuoZ}RiPmz)8Jz+@Y-aLiSjlP#X9dUy-Y9(4MSO8G0pzNz zCN)Qc_6x(rH<)pv+n%ypgfzl?-V*6OaO)vX4e$fZ;UaJx^RnvkS<0Q6CxA41i@|ZpOt!g9h0dy*n=$quh$oX9;Mt1R>hF zb}Bdiu5r`+4UBh6E+gbhQJS_4eGxj@_i0oAK7M&>UnQ&+JwE5W$zKrT#f(2K*1)`M z`R9~TdXg`|G`I6gDy2t5iKq6c%6z#S(SSov!kRK@CB`1$wsSgJ9;Sv39jHGg8O(oT zBx4+tr-B(e3xmRd4pW|l63V`jNXtOSoMQSi<{xS?rt@&!1ghG_z>v|sCYH3drL3I{^Bd^wa3!{rCrrA_(V&H+ zKQaXEls8-rYsd=*Eu34U<(y})_inCFZ`=;Zdn-qS2hlV0Awn?75*JX@X_qvJ5Y?qY ztwlSrj;jvbwEs9OJuH5_e>KR9-q6t@6B{4`txhaO%5m-4fDWNl*w?_28~5lAmGSiZ zzCp!Vs$>x2TkkXJ%0-|Z@G$D-RFQyb9UN*Kam33o(OIEent%!)KxOd~ttHQ)Aglr< z_r;|2M<#lqB|o-_UX6GTZoS7bbf=eL?~Egcav7V)j`G`)_TG$lmS6Pfm&Vmbn&+6Hm^C&f zmC^$?#>lqx;JJ+=j)}Ia85qD|LY@2CR2qnZ&$(z>ATc5ZC7cAYM%HxQOSk|AOG~!! z`XT7w4QsjwVDwr5j4fJ}$vR?~QO`WRwh`Z{?Rd;Q>%$}GUvj;BynkA#xkO`4sq zazKH+e=J7AWa_26mVBzEH=&NAgK2l*Dd?B`ZtTCF&QI(fMD~UNHd^NpJI^H%V-BZ# zKRVe>mS)4OPKEi3cgc)^d~&Kf2)zQXm!IF&xTg}^QG%!&F~P5RTcIP2TFfgt;+E#q zexe-qSTqG9E-)d$Du!#@{2?d$}laev}ep5PT>fe4~cR8 z242&RQ>Lv_Plr+9A89F%0~o6Y+dZ&~Xs^Rya)470^ z))|EiiIZtQuQK07BQ{%{!=vBURxeI4|4vBQ;(owSl1k3cZ6U+BPayAtL*$G&5vuA1 zIc3Y1Rc{Q1g@CVnLv~&cMwxF2LaQi~lUoQ>WT5Y*qJ8sqrz#`u9QjAk zrl0RahSU+7D2bABfh^mxAZ|}Yc(U(WDX~WIU#^Fl(L=iUAD-}o=u-vpx<7WQoTX@Z zv&9L1wVFxJ*@-0G&5l0E%3880000016`d~=gXFAshmTQMmZ^^lkV(JkF@bn=AJY<# zXX`R`zPv0}bZza2I^7d`H&8qTOnnUAG@>%nbemVGesXUH%-8${P_-W&A0u8~xutT* z{$4;ktR1na7S=@V&YtQuLq5K{1c&I(o-C)MY#KM6V%B@~W({QL8H^k#)Yz4&1nWOQ z$OYlaeAjM$<0Wps*>d=&!esFA`fQ{VvWmbVtkuV0T&wT|hF*mler@*?aeA24l4QQrBZ-0|~RoRRqWG zEjqUZe-XO;>lgYon%{kB9}|%-XlQ8cu8g;al2@P;p=bL%425}@L3~Z&5wT+t7nrn8 z-SRLR^Vtqp;WQc6Z6=}(cVS(VclVO(A-G>6r1tTsj^u|6c@iIRYof!Io)=f1zall6 z@nQ`2Dsf4evxV}u>O?1qWC^>7U8z>{xeAQg zTlkF*jBqb&Bk+F_p=?4<0GVc1p`dn#4*c%W?Hm!k?}s3-a52zVm*>LLzNpw!=OARV z!68#f5O35Wu)GTW)FG!8gf2ds9!5DJlt9MpBmD?^*}uJN*y|umiBGHeA|DQgD~hq% z;tU|Vadv;r;-p>sYT!A`L(RhS3s9Ax6AnZB;0vvj%VdbSRY8Oihj_)D&?iOAR2-u8 zAqLp+2ATlm{sW&afX;$VQxK*=HT!w6kt@uXkq+U?&dHE_&BS*iMV#7QyM_rYh()xL zy;X#;ahdGr8CUoFuJ#$9DD;mO=|o45y4Mh5|}2 z^pWIJ0Ukhmc9#&;i+&zDH{{@w?P_YmUCeG$pOkGWPkaAe!p^hl-EXkO zW2?v&rg4ra_U>0+ZsCtv6MY`M%Uk%GvTAe+uoD~l>~Rc|z4@?46g?oDuN?_oOKiU_ zArqDX&b~eOQTlrCq&w{hGQ?&LqQpT^k8MDrKvoKFHn z>H#c6We-i4iW@}0wX6EuC5Z9gy_F;G&p9K3V(`Av&-PhkDO3^|lQZTtw4P6BE3#5W z$9);EFUv>rVqk!ASh&NiB6`?4-ipqtl;CB7iQ+VzBny4KeTW6A-e=Sb#)d9e|QD>0cTu126 zw^HG^K)n0Bf)QbYaWl`#f}ujlD)wvC*H_Vdpbw13Oi}AiGzr=fJM{Irf3&N-v%{y< zLO;@E5WhVW=pa=W2F?Hq|Bk*9nAWG8HUwo_(N$@D^G_J>d>6xZ5HU-7P}X4>lWGf2 zW&q0`^O0X=+FUZ-RMVnP&r^T~MuhCnu|o!r{&o=eG)a_J26Yu+={TS_1=+E1^nIg? z;ls=Q`Mg~mf_=; zg!{tDVea6p?jIdfMJ}@6G1N~)lQZ}!<)F=TYOLE%@Vspj?*m?e`?7_s?}L@1#M|4y z>8ZlTJeJa19qThMXF6%CASR@`d{l#t&f&r33ZpQYJF$o2M^pcLLywXMki>;_qx z@Q5SY`s*6`=80ou!)caJ4|8y)`O(^Y^G`3`Y;DpA-l%pyc8Qdh8=q_ z!{UDjK$|*pLNaHII7p3GG;Bht*#yx7W|xs$4_-Db=V7d^~1h2yf>|*Y|16DC(OJQ_J2)_?EpQ^5b)s@MBoXe+Y%whV;Mf-kLcHG>OV7qxN6*Y zKR5ak`{ifRl=>39ffBe=%Ou+UwY8J(b8mkBA@jQ}oDq_@lJt{_BZ-kFYE7&IDpIK? z=bx?3teG|Z9+K-sIn)r*h4<}Lp*5^ajIUWxwo)%$U$peV_KDlkey>if-DBBP`Bg?e z#$V&wnWyI95(3~hrZPa;#^o-SvK|;AkfUg^?Y8BT=EK3=Y$NTbm+#09Rm_|mldfGL zf!jSl46rlV5oUhk)cWK=RV=bTlx?MFro(BO1~;$i+n~@(S7Mv3RRty`mz>U+HIpmB z1LnX%O{jGl!5|Aj**H-~uKxuw8y}V6v%Dp4%com%mhf1+ChlLCbfEr<<}pz4ZFSWRYRy(t+v zPC&pWgYnvp5#CzOYF^qM+lgul-pCiBR`fDshnm_vdzU1ok&wy{H z#cbyv4S{bi{euVrOG`!M^@s1UIMA)g_~GaVvU}q|00Xnld@T1qgxWL_AQ>XmwLXe4fjLVDr6u zg|q7P@_^YR8^uVI$RrfR%JzS1D~^<5m>)JGAf4X1%iVOw9&u8iW;YTedg2Er48D~p zXuiftT1(|EO=dP$ne<9E(2=zDp>sHxve|F4Lm82M7R~Qf% ztV<;y&qeM^6;23cjldr#;Gy44 zD+!aw_4JQ?oFuy#*Z@W~asqg&hf35@k%;)%)dd)gbHJy{BqL!v5wRp6?@jxTQ@H`E z(y;?W2o_vB{&hXYQ=}zu>H8JBPJKYP<$%I#t*4|h@H`_@MY~Q?EV6bPUb4kx$0>BTY&E*_rkT1QBL89HRoV<(J01bCQ?l> z%#BOB-u(=&HEcxmDN~Cc9~F6}scUT0tvz`q{32H73ujdU=bl7Z&nPXU+#8vNZ>#kP%ywDeiLqj^3CLb z5IX`nWS5ud4wUo;$Zm zo3@E!$!r(7J*-5W-lXg=PSWQ3U>zqh33?J{*J;-|D5K6!k;$G{x)Wr-jTcJuCPC(K z>=*h5)r{vpfvHE6Y{BGF_lUH&X*s(y@=t>=8K__~kc58iK znLgfYi06M;fN*X}vX-t!r6I1?La8}qzjw1)}SFz z-Ha@AeF)bt^Q482t6?~AZ>GA;!XBs;G)dP|9T9kD97$5?4{FKn96Et`A;w%VXcsI+ z$)SE4ckaV9HghX2s-RfWD0>Ry53TaG$0)4@A5lxh?68Ztt={M$2;IA+G#DyLa zqvnh~?w);i{KlNT3@{(K*{*4sm^)Nu8KsuRnRJ-UEj|_NxRgjDdFx_=Z}asPFxKyt zaQV7pDI0|Gy{d7o&NU^>A~p1F5?y;_ey&lszoc_CDAs9hJH(oD*WS&UyDu zs9izzsHJ?j9GlPkFxMM%as4p5#6pvWgnu_pgp`-l&cFE3iwcALFStuC4$mGI`zND* zphZ5vRu>5WPw@aH^Q!GC!IQw^I!6;6YP%f-1$=H|)9)PRq=FmWaZuN_k2!^9>dOR> zrC>BN;PCGZa}CjoW)=wcgHz*3emi7+LhshHgH^`;{)E=Obor&9AoXj z1`exyvf>T*TB;_U37hISfIy@l7SiNQXt6^+FU&sNFyK7XuGFpd<4po2@CyRc# zCk@=@^$pQs%BS3BV2%3mGN_!Fv21L zTtGVYlA>x2Weclui0ujQ7F1|`E&9TmWXmURW&S`WwRzkX)=9=5F717nWC1^?2~6mA zlIPX;Eo*_{dXh<&d}H+$(CVGM7Ot*>aR>M5G)>1;{V|9jMH*9Cz5w&ZfM?R4Yabo2 zYiDP~GF8b<>GOy^3sE$E&>n~#r7fMerPY#=C_!dAn8&>cVm+^*@icFotTp{yFhfG8 z`|}3+`l)ntrF0~Dn*^YRMx;|<)9qI{d~&q3)t<+aDlMhKddERC$IefwM)p^<0m0Am zvaE8>%n`HsBHkE9g?pmXeGg*BJJvnC?M;CNus$ ze7`GeDIr!WU+UjZD3>{VCki40GDSBqfqR^CNmV8t?|Lq#v=@8yqCAL9aT0}4UE0Ax zdhRsL>S!BA^YTp!RQF$|oe zRoTTubIzdHHfsu^uhM%q9?2Us`qVA!Sj}R+MKL2eq*0>(jCb-St+RAfG$ zId0IJa{vTA?dh44+du(kWK98wCzm^H(sBBhjtsWB? zJLRv?uD*{LfQs6VOKO@$U6XrSHrWL?9^@Y;eF3t5gyB!+n5WL{NZet{KdnURtUZM+ zxbZ|xbq65BCISF=eaAUM=G!F#jJ*044;()B z#6<*SZAHRZ4=S&t$pO)Q$l?3DhlP3d#5osHVA^)j!^`T6B(ogvwz$nVxoj${s&L#V zCb_@2UsU-Z$k%vU;h^>e#PpMoLTq~44%qP0ty|bemT%lHTK6NtC;;=&;~Zt~hNA4) zow#%|m$h^q6QrtFiG`V#-29f#kExo4Ps5wSMTphQ&Ob?caE$P`4V6* zE_w2mFx7G1b8oxU8i7s7qdG-P{QJKmzk7cPYOkXp&r9?tOAx0)tr+LUQgqLV&&qLf zCuOM_@#f{(_2J;4GYmt_L94S+>Y}@mDun(WmtXPG@M8%la>>pWkJz)R>tz*#KSCtR-Y42TGxQ|pEPDGC=!_5oQT$&YG8FGBoFAv zkA>`SduPN*Q^9kK1ib@xMmS%YxC4Qfb+o!^uXo9hA^$m<*Vl zIfta29@3!O*Ix#3+vZa1FREPu{57Q#SLg8JGtw{8(yEUBFZLSwNw4xLu68J_4sLy^ z=hawM>0s3RzW<-fpn-Q%Ne4uF!c}t$k^&jE{BHzK02C$h5h<0t`m~OpDj>MYM2Su)EfXO!nc*pdp7xyC3oET?^y5w=f{>Rl1rlWBE)-wb8du zw9XxN0ubddld<2kFZ2=Lo@pLvu5Y-x9E!1d$yCBJQ!ui(B-beyj(+#zZwE=c4vuVz z;AV_&K+SZjN@Z=z3;YZcI?95}KBdvb__JX~b4bXZWML7VuY-^z2N|!D#r-W8UnmoC z1~S2?F5h~JK5@+X%Sk<9=})3x0sb888Y zRYuaw&Wev~rY;>Xf6eKB&MQd7fGzX^P-shf&kTL;JkFF|V0X;jinYv>VgVC0>jI0l zb__R;M2G|7f=SHsxpt(R!U=+k3z=$8EmYvi#6zLAYm#ikt==`pLj*s%ok9|zu!LNV!TOwI)>gTAhpYM{<9$iNEng7mD4qRku*`R zI}=}cuI$|MLr?M=%>+|ny4}+$XcrW@Z7tN8x8RLej?6qsFP+eyWWY;x8|Ye<4P?K$ z3vtn>NBa>ws4kStOsO!C$h_#DkJEP}n-^5VmauvTT)0Ig_)Bo0xs7!+6dT?rM(tBE zFbk^zpyz2$zi+`ft~HfuTAIa;RBvMV`y{e?=)KmhQ|8m83X_o`b2c4ko#+8wwwY8{ zt7JAu8O@`7(mgS2j=qLx zvz&igw=zIl;VeJgnkA>_psmt%qPoKfcK*7lgOV6XdZef3vP!Eb;C-_vP%x+yhHeV- zW}U3hI10@}E^(+(%l4iu7y4v5Kuk`UTY_<~CVfau=5k(-b3L0LL zhSbCA_)~fWgu2hmEZ;0`DqQY-z&)Q%o2WGeDNvD*F?q5WPT(ygB{g@7MGxfhN}Fd4nr++Pwdtm9;4F zUYKpwm_dI}2=qA6dsTNPEI%B!WlZ;PaSvdimWDYPwKRk=K)2v0b3GpYjftv0Ron3- z(~W>3(I^YCpR+QZ{zxTw`YS(c6!Qs19^e*;Ed^vl&U`wQZfkbS6;Z^koVk&BqKZad zYGrm&vkIU2yEEX)xF^fG*)-H;`gd(vsK`)@N97t9!Tr;kyMD0P87&lkRCFd_2(j-6 z^uMe5Xc_2i4@#T5a|}l;)ftbV^@eUJfZia*X1^3XKD>?HpOm(A$4N}r)l8LCRBM3w zAPCQ~UGlerCwnhR7oDuP0|9v1>}(U2Uy~y6QKfk#PB5ph8r+<=T8viT5+i40asB zk$_Iapp1Jsk{7vfO@W%BXr7S#k{&v}Jt3A;tkUdm zDsB=;m~~m6j??w(uYC&O8R*Kpz|K;v*evHGI_xKh$K?wDGR!&JvyK#)IR>Z>K*e29rv zdegyBh>dEzRL7K3Z|6FIuDKjmlzk29l({CKD);us%pWNXwS(Ck=I>U*Sk@*WG~Rli0VqIP6=$Whiyi=(HT zW_}=xLyqR$X^~LP50!!*zB2)}Z^ahGT-;Ks^DehbxOivSn8XCL*KW1_bH#=)Nwp1L z$oM5ER?+JKZ;#QQU0V&8Ck6ZGV324`C$h*QLjpe9#=K{
      Br0$ADM}JNPsrAuai?jM=EbJ~< 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/content-engine/relations-category-picker.webp b/apps/web/content/docs/content-engine/relations-category-picker.webp deleted file mode 100644 index 3649bb91a32e2e2df4946526552640796770799e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13418 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 diff --git a/apps/web/content/docs/content-engine/relations-create-category.webp b/apps/web/content/docs/content-engine/relations-create-category.webp new file mode 100644 index 0000000000000000000000000000000000000000..9ae18f2f6691c012174381f6456724bc2c056bf3 GIT binary patch literal 16594 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/content-engine/relations.mdx b/apps/web/content/docs/content-engine/relations.mdx index 8954c9dbd8..14a8675cfd 100644 --- a/apps/web/content/docs/content-engine/relations.mdx +++ b/apps/web/content/docs/content-engine/relations.mdx @@ -1,137 +1,218 @@ --- title: Relations -description: Link Content Engine records with field.relation, group related fields with field.group and store repeatable rows with field.repeatable, all in real Postgres tables. +description: Link one VitNode Content Engine record to another with field.relation and the references map. File each newsroom article under a category, migrate, and pick the category in the AdminCP. icon: Network +implementation: + objective: Link the records of an existing content type to records of another content type with a single relation. + decisions: + - Which items get the link, and what do they point at? Offer the project's content types, and create the target type when it does not exist. + - Must every record have a target? Recommend nullable when the table already has rows. + - What happens when a target is deleted? Offer `set null`, `restrict` and `cascade`. + constraints: + - 'Declare the link with `field.relation({ target: () => otherContentType })` and map it in `createContentModel(..., { references })`.' + - Export every table from `src/database/*.ts`, register a new type in the plugin's admin module, then build and migrate. + related: + - title: Advanced fields + href: /docs/content-engine/relations-advanced + - title: Containers + href: /docs/content-engine/containers + - title: relation reference + href: /docs/content-engine/fields#relation --- import { Tab, Tabs } from "fumadocs-ui/components/tabs"; + import { ImgDocs } from "@/components/fumadocs/img"; -import categoryPicker from "./relations-category-picker.webp"; -import manyPicker from "./relations-many-picker.webp"; -import advancedPage from "./relations-advanced-article-page.webp"; +import articlesList from "./relations-articles-list.webp"; +import categoryField from "./relations-category-field.webp"; +import createCategory from "./relations-create-category.webp"; -Relations connect one record to others, and two related helpers shape a record's own data. Everything lands in real tables, not a JSON blob: a relation is a foreign key, a to-many relation is a junction table, a group is a set of columns and a repeatable field is a child table. This guide walks through `example.advanced-article` from the example plugin, which uses all four. +A relation stores another record's id in a real foreign key column. This guide adds a `newsroom.category` content type and files each article under one category, which staff pick in the AdminCP. ## Before you begin -You need a working content type to link to, such as `example.category` from [Create a content type](/docs/content-engine/create-a-content-type). +You need the `newsroom.article` type from [First content type](/docs/content-engine/create-a-content-type), with its plugin in `plugins/newsroom/`, and an AdminCP account. Nothing else is required. The steps and the check below work in the AdminCP alone. If you followed later guides, keep their additions. This guide only adds files, one field and one list column. -### Link to one record +### Define the category type + +Create `src/content/category.ts`. This is the complete file: + +```ts title="plugins/newsroom/src/content/category.ts" +import { defineContentType, field } from "@vitnode/core/content"; -Point an article at a category with `field.relation`. `target` is a function, so two content types can refer to each other without an import cycle: +export const categoryContentType = defineContentType({ + id: "newsroom.category", + tableName: "newsroom_categories", -```ts title="plugins/example/src/content/article.ts" -import { categoryContentType } from "./category"; + fields: { + name: field.text({ required: true, minLength: 2, maxLength: 80 }), + slug: field.slug({ source: "name" }), + }, -fields: { - category: field.relation({ // [!code ++:5] - required: true, - onDelete: "restrict", - target: () => categoryContentType, - }), -}, + admin: { + path: "newsroom/categories", + titleField: "name", + list: { columns: ["name", "slug", "updatedAt"] }, + }, +}); ``` -Then tell `createContentModel` which column the foreign key references: +A category is a small content type of its own, managed in the AdminCP. `titleField: "name"` is also what the article's category picker shows. -```ts title="plugins/example/src/database/articles.ts" -import { example_categories } from "./categories"; + -export const articleContent = createContentModel(articleContentType, { - references: { category: () => example_categories.id }, // [!code ++] -}); + + +### Create its model and export the table + +Create `src/database/categories.ts`. This is the complete file: + +```ts title="plugins/newsroom/src/database/categories.ts" +import { createContentModel } from "@vitnode/core/content/server"; + +import { categoryContentType } from "@/content/category"; + +export const categoryContent = createContentModel(categoryContentType); + +export const newsroom_categories = categoryContent.table; ``` -`references` needs one entry per relation field. A missing or extra key is a type error. `field.user()`, `field.file()` and `self: true` relations find their table on their own and need no entry. +The export matters, because migrations find tables through the exports of the plugin's `src/database/*.ts` files. -### Link to many records - -Add `multiple: true`. The advanced article has two to-many relations: a set of categories and an ordered "read next" list that points back at articles: - -```ts title="plugins/example/src/content/advanced-article.ts" -fields: { - categories: field.relation({ - multiple: true, - onDelete: "restrict", - target: () => categoryContentType, - }), - relatedArticles: field.relation({ - multiple: true, - onDelete: "cascade", - ordered: true, - self: true, - }), -}, +### Register the category type + +Add `categoryContent` to the staff API in `src/api/modules/admin/admin.module.ts`. This is an excerpt: + +```ts title="plugins/newsroom/src/api/modules/admin/admin.module.ts" +import { articleContent } from "@/database/articles"; +import { categoryContent } from "@/database/categories"; // [!code ++] + + modules: [ + buildContentAdminModule({ + contentTypes: [articleContent, categoryContent], // [!code highlight] + }), + ], ``` -`ordered: true` keeps the order editors arrange. Without it, the set is stored in ascending id order. `onDelete: "cascade"` on a to-many relation drops the link when the target is deleted, and `"restrict"` refuses the delete. A to-many relation cannot be `required` or `nullable`; use `min: 1` to demand at least one target. +Then add its link to `contentTypes` in `src/admin/nav.tsx`. This is an excerpt. `src/admin/content.tsx` re-exports the same list, so the screen needs no change: -Each to-many field gets a junction table with `itemId`, `relatedItemId`, `position` and `createdAt`. Give `categories` its reference and export both junction tables, or Drizzle Kit leaves them out of the migration: +```tsx title="plugins/newsroom/src/admin/nav.tsx" +import { FolderIcon, NewspaperIcon } from "lucide-react"; // [!code highlight] -```ts title="plugins/example/src/database/advanced-articles.ts" -export const advancedArticleContent = createContentModel( - advancedArticleContentType, - { references: { categories: () => example_categories.id } }, -); +import { categoryContentType } from "@/content/category"; // [!code ++] -export const example_advanced_articles = advancedArticleContent.table; -export const example_advanced_articles_categories = // [!code ++:4] - advancedArticleContent.advancedTables.junctions.categories; -export const example_advanced_articles_related_articles = - advancedArticleContent.advancedTables.junctions.relatedArticles; + contentTypes: [ + { definition: articleContentType, icon: }, + { definition: categoryContentType, icon: }, // [!code ++] + ], ``` +If you followed later guides, keep the comment type in both lists too. + -### Group related fields +### Add the relation to the article -`field.group` keeps fields that belong together under one key: +Edit `src/content/article.ts`. Import the category type and add a `category` field. This is an excerpt: + +```ts title="plugins/newsroom/src/content/article.ts" +import { defineContentType, field } from "@vitnode/core/content"; + +import { categoryContentType } from "@/content/category"; // [!code ++] -```ts title="plugins/example/src/content/advanced-article.ts" -syndication: field.group({ fields: { - indexable: field.boolean({ defaultValue: true }), - noIndex: field.boolean({ defaultValue: false }), - priority: field.number({ integer: true, min: 0, max: 10, defaultValue: 5 }), + title: field.text({ required: true, minLength: 3, maxLength: 200 }), + slug: field.slug({ source: "title" }), + body: field.richText({ required: true }), + // [!code ++:5] + category: field.relation({ + target: () => categoryContentType, + nullable: true, + onDelete: "set null", + }), }, -}), ``` -A group adds one column per leaf to the main table: `syndicationIndexable`, `syndicationNoIndex` and `syndicationPriority`. The API reads and writes it as `{ syndication: { indexable, noIndex, priority } }`, and other options refer to a leaf by path, such as `indexes: [{ on: ["syndication.priority"] }]`. Leaves can be `text`, `textarea`, `number`, `boolean`, `enum` or `dateTime` fields. An optional group needs leaves that are nullable or have a default. +- **`target`** is a function, so two content types can point at each other without an import cycle. +- **`nullable: true`** lets the column start empty. Your articles already exist and have no category, so you could not add a `required` relation to the table. +- **`onDelete: "set null"`** clears the link when a category is deleted. `"restrict"` refuses to delete a category that still has articles, and `"cascade"` deletes them with it. + +Then show the category in the AdminCP list by adding `"category"` to `admin.list.columns` in the same file. This is an excerpt, so keep any other columns you added, such as `"status"`: + +```ts title="plugins/newsroom/src/content/article.ts" + admin: { + path: "newsroom/articles", + titleField: "title", + list: { + columns: ["title", "slug", "category", "updatedAt"], // [!code highlight] + orderableFields: ["title"], + }, + }, +``` -### Add repeatable rows +### Map the reference -`field.repeatable` stores an ordered list of small rows, such as FAQ entries: +Edit `src/database/articles.ts`. This is the complete file: -```ts title="plugins/example/src/content/advanced-article.ts" -faq: field.repeatable({ - max: 20, - fields: { - question: field.text({ required: true, minLength: 3, maxLength: 200 }), - answer: field.textarea({ required: true }), - }, -}), +```ts title="plugins/newsroom/src/database/articles.ts" +import { createContentModel } from "@vitnode/core/content/server"; + +import { articleContentType } from "@/content/article"; + +import { newsroom_categories } from "./categories"; + +export const articleContent = createContentModel(articleContentType, { + references: { category: () => newsroom_categories.id }, +}); + +export const newsroom_articles = articleContent.table; ``` -The rows go to a child table, `example_advanced_articles_faq`, with `id`, `itemId`, `position`, `createdAt`, `updatedAt` and one column per leaf. Deleting the article deletes its rows. Export the child table too: +The definition names the content type a relation points at, and `references` names the column its foreign key uses. It needs exactly one entry per relation field, so a missing or extra key is a type error. `field.user()`, `field.file()` and `self: true` relations find their table on their own and need no entry. + + + + + +### Label the new fields + +Add the category's labels and permissions to `src/locales/en.json`, and a `category` label to the article's fields. This excerpt shows only the new keys, in their place: -```ts title="plugins/example/src/database/advanced-articles.ts" -export const example_advanced_articles_faq = - advancedArticleContent.advancedTables.repeatables.faq; +```json title="plugins/newsroom/src/locales/en.json" +{ + "newsroom": { + "content": { + "article": { + "fields": { "category": "Category" } + }, + "category": { + "label": "{count, plural, one {Category} other {Categories}}", + "title": "Categories", + "desc": "Sections that group the articles.", + "fields": { "name": "Name", "slug": "Slug", "updatedAt": "Updated" } + } + } + }, + "newsroom:category": "Categories", + "newsroom:category:can_view": "View categories", + "newsroom:category:can_create": "Create categories", + "newsroom:category:can_edit": "Edit categories", + "newsroom:category:can_delete": "Delete categories" +} ``` @@ -140,145 +221,107 @@ export const example_advanced_articles_faq = ### Build and migrate - +Run these from the workspace root. While `pnpm dev` runs, `db:migrate` alone is enough: + + ```bash tab="bun" +bun run build:plugins bun run db:migrate ``` ```bash tab="pnpm" +pnpm build:plugins pnpm db:migrate ``` ```bash tab="npm" +npm run build:plugins npm run db:migrate ``` -The generated migration creates one table per junction and repeatable field. +The migration creates the categories table and gives articles a nullable `category` column with a foreign key and an index: - - - - -## Relations across id strategies - -A relation can point at a content type with a different [`idStrategy`](/docs/content-engine/id-strategy). The foreign key always takes the type of the key it references. The example plugin's `example.event` uses `bigint` and links to `uuid` tags and `serial` categories: - -```ts title="plugins/example/src/content/event.ts" -import type { ContentRelationTarget } from "@vitnode/core/content"; - -import { categoryContentType } from "./category"; -import { tagContentType } from "./tag"; - -fields: { - primaryTag: field.relation({ - nullable: true, - onDelete: "set null", - target: (): ContentRelationTarget<"uuid"> => tagContentType, - }), - category: field.relation({ - nullable: true, - onDelete: "set null", - target: () => categoryContentType, - }), - tags: field.relation({ multiple: true, ordered: true, target: () => tagContentType }), - relatedEvents: field.relation({ multiple: true, onDelete: "cascade", self: true }), -}, +```sql title="apps/api/migrations/_/migration.sql (excerpt)" +CREATE TABLE "newsroom_categories" ( + "id" serial PRIMARY KEY, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL, + "name" varchar(80) NOT NULL, + "slug" varchar(160) NOT NULL +); +ALTER TABLE "newsroom_articles" ADD COLUMN "category" integer; +CREATE INDEX "newsroom_articles_category_idx" ON "newsroom_articles" ("category"); +ALTER TABLE "newsroom_articles" ADD CONSTRAINT "newsroom_articles_category_newsroom_categories_id_fkey" FOREIGN KEY ("category") REFERENCES "newsroom_categories"("id") ON DELETE SET NULL ON UPDATE CASCADE; ``` -| Field | Column or junction table | -| --------------- | ------------------------------------------------------------------- | -| `primaryTag` | `uuid` column referencing `example_tags.id` | -| `category` | `integer` column referencing `example_categories.id` | -| `tags` | `example_events_tags` with `itemId bigint` and `relatedItemId uuid` | -| `relatedEvents` | `example_events_related_events` with both columns `bigint` | - -`field.relation()` reads the target's strategy from `target`, so the API takes and returns tag ids as strings and category ids as numbers. When two content type modules import each other, TypeScript cannot infer a type through the cycle and falls back to serial. Annotate the thunk with `ContentRelationTarget<"uuid">` or `ContentRelationTarget<"bigint">`, as `primaryTag` does. At runtime, a `references` entry whose column type disagrees with the target's strategy throws and names the field. - -## Write related values + -A relation takes ids. A to-many relation and a repeatable take the whole list, which replaces what the record had: + -```json -{ - "categories": [2, 4], - "syndication": { "priority": 7 }, - "faq": [ - { - "id": 1, - "question": "Can I freeze the batter?", - "answer": "Yes, for up to a month." - }, - { "question": "Do I need buttermilk?", "answer": "No, regular milk works." } - ] -} -``` +## Check the result -A repeatable row with an `id` updates that row, a row without one is created, and rows you leave out are deleted. The API refuses an `id` that belongs to another record with `CONTENT_REPEATABLE_UNKNOWN_CHILD`. To change one link or one row without sending the list, use the [content service](/docs/content-engine/services): `relations.categories.add()`, `.remove()`, `.set()`, `.reorder()` and `.get()`, or `repeatable.faq.create()`, `.update()`, `.delete()`, `.reorder()`, `.set()` and `.list()`. +Open **AdminCP → Newsroom → Categories**, click **Create Category**, enter `Announcements` and click **Create**: -## Check the result + -In the AdminCP form, a single relation is a search picker. This is the article's **Category** field: +Open **Newsroom → Articles** and click the pencil on `Welcome to the newsroom`. The dialog now ends with a **Category** picker. Choose **Announcements** and click **Save changes**: -A to-many relation shows each target as a chip you can remove. Here is the blog plugin's **Categories** field, a `field.relation({ multiple: true })`: +The list shows the category's name in the new column, and the other articles show a dash: -A group renders as a fieldset with its leaf controls, and a repeatable as a list of rows with move up, move down and remove buttons plus an **Add** button. The example plugin gives the advanced article API routes but no AdminCP screen, so test it through the API. Its public API returns the related values like this: +Now delete the category. In **Newsroom → Categories**, click the trash button in the `Announcements` row and confirm with **Yes, delete it**. Back in **Newsroom → Articles**, `Welcome to the newsroom` shows a dash again. The article stays, and only its `category` became `null`, because the relation says `onDelete: "set null"`. + +## Read the category through the public API + +This optional part needs the article's public API from [Public API](/docs/content-engine/public-api), which builds on [Drafts & publishing](/docs/content-engine/publication), and a published article with a category. Assign a category again if you deleted it above. + +Add `"category"` to `publicApi.fields` in `src/content/article.ts`. Change only that list, and keep every other option you configured, such as `listFields`, `searchableFields` and `orderableFields`: + +```ts title="plugins/newsroom/src/content/article.ts" + publicApi: { + path: "news", + fields: ["id", "title", "slug", "body", "category", "publishedAt"], // [!code highlight] + // listFields, searchableFields, orderableFields and the rest stay as they are + }, +``` + +`listFields` decides what the list route returns. Add `"category"` there too only if list rows need it. Then request the article: ```bash -curl "http://localhost:3000/api/@vitnode/example/content/advanced-articles/weekend-pancakes?locale=en" +curl "http://localhost:3000/api/newsroom/content/news/welcome-to-the-newsroom" ``` -```json +```json title="200 (excerpt)" { "id": 1, - "title": "Weekend pancakes", - "slug": "weekend-pancakes", - "categories": [2, 4], - "seo": { - "title": "Fluffy weekend pancakes", - "description": "Ready in 20 minutes." - }, - "syndication": { "priority": 7, "noIndex": false }, - "faq": [ - { - "id": 1, - "question": "Can I freeze the batter?", - "answer": "Yes, for up to a month." - }, - { - "id": 2, - "question": "Do I need buttermilk?", - "answer": "No, regular milk works." - } - ], - "publishedAt": "2026-10-10T10:57:42.767Z", - "locale": "en" + "title": "Welcome to the newsroom", + "slug": "welcome-to-the-newsroom", + "category": { "id": 1 }, + "publishedAt": "2026-10-23T18:57:51.156Z" } ``` -A to-many relation comes back as a list of ids, and a single relation as `{ "id": 2 }`. Only the leaves listed in `publicApi.fields`, such as `"faq.question"`, are public. The example plugin's page at `/advanced-articles/weekend-pancakes` renders the FAQ rows: +A relation exposes only the related record's id, here the category's. The category's name is not part of the article's public answer. The AdminCP can show it because its staff list route adds a `labels` object with the names, and staff routes are not public. - +## Go further -Every option of these helpers is in the [Fields](/docs/content-engine/fields#relation) reference. +- **Show the category name to readers.** Give the category type `publication: true` and its own [public API](/docs/content-engine/public-api), then read the category by id or list categories next to the articles. Or model categories as [containers](/docs/content-engine/containers), which bring their own pages and filters. +- **Let members choose a category.** Add `category` to `publicWrite.create.fields`. Members may only link to records readers can see, so the category type then needs `publication: true` and its own `publicApi`. Without them, the write route stops with an error that names the field. +- **Many categories, grouped fields, repeatable rows and mixed id types.** See [Advanced fields](/docs/content-engine/relations-advanced). diff --git a/apps/web/content/docs/content-engine/reports-article-page.webp b/apps/web/content/docs/content-engine/reports-article-page.webp new file mode 100644 index 0000000000000000000000000000000000000000..b20ae07a06e5f4ad87199c5e05f3d856dff0a903 GIT binary patch literal 10050 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 TQ{KEO>wP|kNeMhdMgRZ+8@U-H literal 32810 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 diff --git a/apps/web/content/docs/content-engine/reports-discussion-page.webp b/apps/web/content/docs/content-engine/reports-discussion-page.webp deleted file mode 100644 index 05d669f4e69fa8116d0f0e50a5e08c2b47493e04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53778 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 Chjrxu diff --git a/apps/web/content/docs/content-engine/reports-modcp-queue.webp b/apps/web/content/docs/content-engine/reports-modcp-queue.webp new file mode 100644 index 0000000000000000000000000000000000000000..85882291eef41db79c33e8be9eb76419f3a6489e GIT binary patch literal 68572 zcmd42b9A2D7B?C-Z0yEKlSU01+qP{swryLDZ5xek+qN3}wwrDD-sjure0SV&^Vgea z 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/content-engine/reports-modcp-report.webp b/apps/web/content/docs/content-engine/reports-modcp-report.webp new file mode 100644 index 0000000000000000000000000000000000000000..cba4bbe031f3d8967536f074bc67396b013486dc GIT binary patch literal 102722 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%0D&?lqL8;kW9+f-CA#d)z#+Lyi*=MvJb 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 @@ -36,39 +38,43 @@ You need a [public API](/docs/content-engine/public-api), because a reader can o ### Turn on reports -```ts title="plugins/example/src/content/discussion.ts" -export const discussionContentType = defineContentType({ - id: "example.discussion", - // ... +Edit `src/content/article.ts` and add `reports` after `publicApi`. This is an excerpt: + +```ts title="plugins/newsroom/src/content/article.ts" + publicApi: { + path: "news", + fields: ["id", "title", "slug", "body", "publishedAt"], + }, + reports: true, // [!code ++] -}); ``` -Reports live in core tables, so there is nothing to migrate. The content type gets moderator permissions such as `can_view_reports` and `can_manage_reports`; give them to someone in **AdminCP → Staff → Moderators** before you test. See [Configure moderators](/docs/dev/moderation/configure-moderators). +Reports live in core tables, so there is nothing to migrate. The article type gets the moderator permissions `can_view_reports` and `can_manage_reports`, and a new public route, `GET /api/newsroom/content/news/permissions`, starts answering `canReport`. -### Ask who may report what +### Ask whether the visitor may report -`useContentPermissions` asks the Content Engine what the visitor may do with the records on screen, in one request. `canReport` is `true` for a public record the visitor did not write, guests included; their dialog asks them to sign in. +The button should only show where a report would be accepted, and that depends on who is looking. Create `src/pages/article-permissions.ts`. This is the complete file: -```ts title="plugins/example/src/pages/discussion-list.ts" +```ts title="plugins/newsroom/src/pages/article-permissions.ts" import { useContentPermissions } from "@vitnode/core/tanstack/content"; import { fetcher } from "@vitnode/core/tanstack/fetcher"; import { manifest } from "@/manifest.gen"; -export const useDiscussionPermissions = (ids: readonly number[]) => +/** What the visitor may do with each article on screen: `canEdit`, `canReport`. */ +export const useArticlePermissions = (ids: readonly number[]) => useContentPermissions({ ids, - queryKey: [manifest.id, "discussions"], + queryKey: [manifest.id, "articles"], fetch: async request => { const res = await fetcher({ plugin: manifest.id, method: "get", - module: "content/discussions", + module: "content/news", path: "/permissions", args: { query: { ids: request.join(",") } }, }); @@ -79,106 +85,150 @@ export const useDiscussionPermissions = (ids: readonly number[]) => }); ``` -The same hook answers `canEdit`, used by the [edit form](/docs/content-engine/public-write-edit#show-the-edit-button). +If you followed [Permissions](/docs/content-engine/public-permissions), this file already exists, so reuse it. The same route answers both `canEdit` and `canReport`. + +`canReport` is `true` for a public article the visitor did not write, guests included. The dialog asks a guest to sign in. An article staff wrote in the AdminCP has no author, so every reader may report it. -### Add the button to the page +### Add the Report button -```tsx title="plugins/example/src/pages/discussion-page.tsx" -import { contentTarget } from "@vitnode/core/content"; -import { ReportButton } from "@vitnode/core/tanstack/moderation"; +Edit `src/pages/article-page.tsx`. Add `contentTarget` to the existing `@vitnode/core/content` import, the other imports, and an `ArticleActions` component above `ArticlePage`. These are excerpts: -import { discussionContentType } from "@/content/discussion"; -import { manifest } from "@/manifest.gen"; +```tsx title="plugins/newsroom/src/pages/article-page.tsx" +import { contentTarget, zodRichTextDocument } from "@vitnode/core/content"; // [!code highlight] +import { ReportButton } from "@vitnode/core/tanstack/moderation"; +import { useTranslations } from "use-intl"; + +import { articleContentType } from "@/content/article"; + +import { useArticlePermissions } from "./article-permissions"; + +/** Asked in the browser, so the cached page stays the same for everyone. */ +const ArticleActions = ({ id, title }: { id: number; title: string }) => { + const t = useTranslations("newsroom.articles"); + const { canReport } = useArticlePermissions([id]).of(id); + + return ( +
      + {canReport ? ( + + ) : null} +
      + ); +}; +``` -const { canReport } = useDiscussionPermissions([item.id]).of(item.id); +Then render it at the end of the article's `
      @@ -49,9 +49,9 @@ export const BlogHeader = ({ count, name }: { count: number; name: string }) => --- -## ICU Syntax Reference +## ICU syntax -### 1. Variables & Numbers +### Variables and numbers ```json { @@ -60,7 +60,7 @@ export const BlogHeader = ({ count, name }: { count: number; name: string }) => } ``` -### 2. Cardinal Pluralization +### Plurals ```json { @@ -68,7 +68,7 @@ export const BlogHeader = ({ count, name }: { count: number; name: string }) => } ``` -### 3. Select / Enums +### Select ```json { @@ -78,18 +78,18 @@ export const BlogHeader = ({ count, name }: { count: number; name: string }) => --- -## Where Message Files Live +## Where message files live | Folder | Audience | Purpose | | :--- | :--- | :--- | | `src/locales/{locale}.json` | **Frontend** | Browser UI, page text, and AdminCP navigation | -| `src/locales/api/{locale}.json` | **API Server** | Transactional emails and backend validation errors | +| `src/locales/api/{locale}.json` | **API Server** | Emails and other output with no UI. API responses return i18n keys, which the frontend translates | -## Learn More +## Related diff --git a/apps/web/content/docs/dev/i18n/meta.json b/apps/web/content/docs/dev/i18n/meta.json index a929e83729..c1e6625c58 100644 --- a/apps/web/content/docs/dev/i18n/meta.json +++ b/apps/web/content/docs/dev/i18n/meta.json @@ -1,5 +1,5 @@ { - "title": "Internationalization (I18n)", + "title": "i18n", "description": "Learn how to make your VitNode plugins multilingual with our I18n guide.", "icon": "Globe", "pages": [ @@ -7,6 +7,7 @@ "messages", "pages", "localized-urls", + "localized-urls-advanced", "namespaces", "server", "..." diff --git a/apps/web/content/docs/dev/i18n/namespaces.mdx b/apps/web/content/docs/dev/i18n/namespaces.mdx index f7902fdbfb..50597a9f3a 100644 --- a/apps/web/content/docs/dev/i18n/namespaces.mdx +++ b/apps/web/content/docs/dev/i18n/namespaces.mdx @@ -49,9 +49,10 @@ asked for. ## The per-plugin prefix rule -**Every top-level key a plugin ships is the plugin's own id.** A key outside it -collides with core and with every other plugin, so VitNode ignores it rather than -letting two packages fight over one path. +**Keep everything a plugin ships under the plugin's own id.** VitNode merges +every package's locale file into one tree and does not filter keys, so a +top-level key outside your id shares one path with core and every other plugin, +and whichever package loads last wins. ```json title="plugins/my-plugin/src/locales/en.json" { @@ -66,7 +67,14 @@ Scoped ids work exactly the same way - `@vitnode/blog` is one path segment even though it contains a slash, so `@vitnode/blog.admin` is a legal two-segment namespace. - +Two kinds of top-level keys are expected outside your id, because core looks +them up by a fixed name: + +- **AI action labels** live under `ai_actions..*`, for example + `ai_actions.@vitnode/core.alt_generate.title`. +- **Staff permission labels**, described below. + + A staff permission's label is a **flat top-level key**, not a branch: `@vitnode/blog:posts:can_view`. There is nothing to slice a namespace out of, so the AdminCP asks for those keys as if they were namespaces and has to chunk @@ -171,7 +179,7 @@ import { MAX_NAMESPACES } from '@vitnode/core/tanstack/i18n' `, which only exists once the provider has. -## Next +## Related import('./pages/about-page')), - messages: ['@vitnode/blog.about'], // [!code ++] - }), -]) +```ts title="plugins/site-notes/src/routes.ts" +page('/site-notes/notes', { + component: lazy(() => import('./pages/notes-page')), + messages: ['site-notes.notes'], // [!code ++] +}), ``` -Read strings directly with `useTranslations`: +## Read the strings + +Read them with `useTranslations` from `use-intl`, scoped to the same namespace: -```tsx title="plugins/blog/src/pages/about-page.tsx" +```tsx title="plugins/site-notes/src/pages/notes-page.tsx" import { useTranslations } from 'use-intl' -const AboutPage = () => { - const t = useTranslations('@vitnode/blog.about') +const NotesPage = () => { + const t = useTranslations('site-notes.notes') return

      {t('title')}

      } -export default AboutPage +export default NotesPage ``` -And define the messages in `plugins/blog/src/locales/en.json`: +## Define the strings -```json title="plugins/blog/src/locales/en.json" +Put them under the plugin's id in `src/locales/en.json`: + +```json title="plugins/site-notes/src/locales/en.json" { - "@vitnode/blog": { - "about": { - "title": "About Our Blog" + "site-notes": { + "notes": { + "title": "Site notes", + "empty": "No notes yet." } } } ``` +If a key renders as its own name, such as `site-notes.notes.title`, the route does not declare the namespace that holds it. + Host messages are for the site shell. A product page should declare its plugin namespace as the route's `messages` and keep its locale JSON beside the route. -## Placeholders and Pluralization - -VitNode supports ICU message syntax out of the box: - -```json title="plugins/blog/src/locales/en.json" -{ - "cart": { - "greeting": "Hello, {name}!", - "items": "{count, plural, =0 {No items} one {1 item} other {# items}}" - } -} -``` - -In your React component: - -```tsx -const t = useTranslations('cart') - -return ( -
      -

      {t('greeting', { name: 'Alex' })}

      -

      {t('items', { count: 3 })}

      -
      -) -``` +For placeholders, plurals and rich text in your strings, see [Messages](/docs/dev/i18n/messages). For a page's ``, translate in `head` with `t`; see [Route module](/docs/dev/routing/route-module#translated-metadata). <Callout type="info" title="Global namespaces"> `core.global` is provided by the root shell to every route, supplying shared strings for dialogs, toasts, and buttons. </Callout> -## Learn More +## Related <Cards> <Card @@ -102,7 +77,7 @@ return ( /> <Card title="API i18n" - description="Translate emails and API error responses" + description="Translate emails and other output with no UI" href="/docs/dev/i18n/server" /> </Cards> diff --git a/apps/web/content/docs/dev/i18n/server.mdx b/apps/web/content/docs/dev/i18n/server.mdx index b63720197e..30f177c84b 100644 --- a/apps/web/content/docs/dev/i18n/server.mdx +++ b/apps/web/content/docs/dev/i18n/server.mdx @@ -1,21 +1,23 @@ --- -title: API i18n +title: API translations description: Translate emails and API responses with VitNode's request-scoped API translator. icon: Server --- -The API gets the same message tree the frontend does, reachable in any route as `c.get("i18n")`. +The API has its own translator, reachable in any route as `c.get("i18n")`. Use it for output that has no UI to translate it, such as an email. Anything the web app shows, return as an i18n key and let the frontend translate it, so the text follows the visitor's language and a cached response works in every language. ```ts const t = await c.get('i18n').getTranslator() -return c.json({ message: t('core.global.save') }) +const subject = t('welcome.email.subject') ``` -<Callout title="Nothing is copied" type="info"> - The API reads locale files straight out of `node_modules`. There is no build - step to remember and no `src/locales/` folder to keep in sync - install a - plugin and its translations are available on the server immediately. +<Callout title="Package strings come from the packages" type="info"> + The API reads each installed package's server strings straight from the + package, so a plugin's translations are available as soon as it is + installed. Your app's own rewordings and extra languages are the one part you + register yourself, as `i18n.messages` in `vitnode.api.config.ts`; see + [Overriding strings](/docs/dev/i18n#overriding-strings). </Callout> The server loads a different, smaller set of strings than the frontend. Packages ship two trees - the frontend's UI copy in `src/locales/`, and the server's strings (emails) in `src/locales/api/` - and the API only ever loads the second. An API-only app never pulls in the admin UI's messages. @@ -159,7 +161,7 @@ export const yourPlugin = () => manifest, localeFiles: { // [!code ++:2] - en: '@acme/your-plugin/locales/en.json', + en: 'your-plugin/locales/en.json', }, messages, }) diff --git a/apps/web/content/docs/dev/index.mdx b/apps/web/content/docs/dev/index.mdx index 7c9e658a73..7fec0aa67c 100644 --- a/apps/web/content/docs/dev/index.mdx +++ b/apps/web/content/docs/dev/index.mdx @@ -1,105 +1,60 @@ --- title: Introduction -description: Build a TanStack Start and Hono application with VitNode plugins, then deploy and operate it confidently. +description: Learn VitNode development step by step. Set up an app, build the site-notes plugin with an API, a page, a database table, a permission and an AdminCP screen, then explore the framework. icon: Power --- -import { - BookOpenIcon, - PackagePlusIcon, - RocketIcon, - ServerIcon, -} from 'lucide-react' -import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { BookOpenIcon, LayersIcon, ServerIcon } from "lucide-react"; -VitNode is a **TanStack Start** front end, a **Hono** API, Postgres, and an -AdminCP. Its important rule is pleasantly simple: product features live in -**plugins**. A plugin owns its pages, APIs, data, translations, and AdminCP -extensions, so your host app does not become a drawer full of mystery cables. - -{/* Image prompt: Clean dark-theme architecture diagram. A TanStack Start application and Hono API sit in the center, Postgres below, and three colorful plugin packages connect to routes, API modules, data, and AdminCP. Keep labels large and legible, 1600x900. */} +VitNode is a **TanStack Start** front end, a **Hono** API, PostgreSQL and an AdminCP. Product features live in **plugins**. A plugin owns its pages, API, tables, translations and AdminCP screens, so the app itself stays small. <Callout type="info" title="Canary documentation"> These pages follow VitNode 2.0 on the `canary` branch. It moves quickly; when code and prose disagree, trust the code and send the prose a friendly PR. </Callout> -## Start with a running app - -<Cards> - <Card - icon={<RocketIcon />} - title="Get an app running" - description="Scaffold VitNode, migrate Postgres, and enter AdminCP." - href="/docs/dev/setup" - /> - <Card - icon={<PackagePlusIcon />} - title="Create a plugin" - description="Make the package that will own your first feature." - href="/docs/dev/plugins/create" - /> - <Card - icon={<ServerIcon />} - title="Deploy VitNode" - description="Build, migrate, and run your app on a server or container." - href="/docs/dev/deployments/self-hosted" - /> -</Cards> - -## Create an app +## Learn by building one plugin -<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Create a VitNode app"> +The **Learn** lessons build one small plugin, `site-notes`, which publishes short notes on your site. Each lesson starts from the previous one and says which files change and how to check the result. -```bash tab="bun" -bun create vitnode-app@canary -``` +| # | Lesson | What `site-notes` can do afterwards | +| --- | --- | --- | +| 1 | [Setup](/docs/dev/setup) | A VitNode app runs locally, with you as its administrator. | +| 2 | [Create plugin](/docs/dev/plugins/create) | The generated plugin shows a page at `/site-notes`. | +| 3 | [API modules](/docs/dev/plugins/api/modules) | `GET /api/site-notes/notes` returns sample notes. | +| 4 | [API routes](/docs/dev/plugins/api/routes) | `GET /api/site-notes/notes/{id}` validates its parameter and answers `404` for a missing note. | +| 5 | [Plugin page](/docs/dev/plugins/page) | `/site-notes/notes` lists the notes, loaded before the page renders. | +| 6 | [Database](/docs/dev/database) | Notes live in a `site_notes` PostgreSQL table. | +| 7 | [Permissions](/docs/dev/working-with-users/staff-permissions) | Only administrators with **Create notes** can add a note. | +| 8 | [AdminCP page](/docs/dev/plugins/admin) | Staff create notes from a **Notes** screen in the AdminCP. | -```bash tab="pnpm" -pnpm create vitnode-app@canary -``` +The same plugin then continues in [Events](/docs/dev/events), [Queue](/docs/dev/advanced/queue), [Email templates](/docs/dev/email/templates) and [Storage](/docs/dev/storage). -```bash tab="npm" -npm create vitnode-app@canary -``` - -</Tabs> - -Choose **Single App** for one TanStack Start app with Hono at `/api`, or a -monorepo when web and API deploy separately. If you plan to create plugins, -enable **Turborepo** during setup: the generator needs a workspace root. - -## The five-minute path - -1. Start Postgres (Docker is the low-drama local choice). -2. Run `db:migrate` to create core tables and your first administrator. -3. Run `dev`, then visit `http://localhost:3000/admin`. -4. Create a plugin for your first product page, API endpoint, content type, or - dashboard widget. - -Every command above is expanded in [Getting started](/docs/dev/setup). From -there, [Build your first plugin](/docs/guides/first-plugin) gives you a real -route to visit—not just a philosophical plugin. +<Callout title="Want tables, APIs and AdminCP screens generated for you?"> + The [Content Engine](/docs/content-engine) builds all of them from one + content type definition. Choose it for editorial content such as articles or + events; choose the lessons above to learn how a plugin works by hand. +</Callout> ## Find the right reference <Cards> <Card - icon={<PackagePlusIcon />} - title="Plugin routes" - description="Claim public or AdminCP URLs without adding host route files." - href="/docs/dev/routing" + icon={<LayersIcon />} + title="Architecture" + description="How the app, the API and plugins fit together." + href="/docs/dev/architecture" /> <Card - icon={<ServerIcon />} - title="Admin Control Panel" - description="Add plugin-owned screens, navigation, permissions, and widgets." - href="/docs/dev/plugins/admin" + icon={<BookOpenIcon />} + title="Routing" + description="Public and AdminCP pages owned by a plugin." + href="/docs/dev/routing" /> <Card - icon={<BookOpenIcon />} - title="Content Engine" - description="Define content once and receive data, API, and AdminCP tools." - href="/docs/content-engine" + icon={<ServerIcon />} + title="Deploy" + description="Build, migrate and run VitNode on your own server." + href="/docs/dev/deployments/self-hosted" /> </Cards> diff --git a/apps/web/content/docs/dev/meta.json b/apps/web/content/docs/dev/meta.json index 6858a8fe2c..99c9de4aef 100644 --- a/apps/web/content/docs/dev/meta.json +++ b/apps/web/content/docs/dev/meta.json @@ -4,16 +4,19 @@ "icon": "Braces", "root": true, "pages": [ - "---Start here---", + "---Learn---", "index", "setup", - "cli", - "deployments", + "plugins/create", + "plugins/api/modules", + "plugins/api/routes", + "plugins/page", + "database/index", + "working-with-users/staff-permissions", + "plugins/admin/index", + "---Framework---", "architecture", "configuration", - "navigation", - "mobile-navigation", - "---Framework---", "plugins", "routing", "fetcher", @@ -21,6 +24,8 @@ "server-functions", "database", "i18n", + "navigation", + "mobile-navigation", "performance", "---Extend VitNode---", "widgets", @@ -43,6 +48,8 @@ "websocket", "advanced", "---Operate---", + "cli", + "deployments", "updates", "debugging", "swagger", diff --git a/apps/web/content/docs/dev/mobile-navigation-bar.webp b/apps/web/content/docs/dev/mobile-navigation-bar.webp new file mode 100644 index 0000000000000000000000000000000000000000..f481c37a0e26f6f89cd27f157f6e11ee68862fda GIT binary patch literal 64460 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/mobile-navigation-menu.webp b/apps/web/content/docs/dev/mobile-navigation-menu.webp new file mode 100644 index 0000000000000000000000000000000000000000..4eec3bc66c5511881bfb4e4eb22eacd3d850c747 GIT binary patch literal 17284 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/mobile-navigation.mdx b/apps/web/content/docs/dev/mobile-navigation.mdx index ea6c949554..c1d812890f 100644 --- a/apps/web/content/docs/dev/mobile-navigation.mdx +++ b/apps/web/content/docs/dev/mobile-navigation.mdx @@ -1,9 +1,13 @@ --- -title: Mobile Navigation +title: Mobile navigation description: How VitNode's menus behave on phones - a floating bottom bar of up to three links from vitnode.config.ts plus a Menu tab for the rest, and a side drawer behind the user button for the account. icon: Smartphone --- +import { ImgDocs } from "@/components/fumadocs/img"; +import mobileBar from "./mobile-navigation-bar.webp"; +import mobileMenu from "./mobile-navigation-menu.webp"; + On a phone, the desktop header's navigation has nowhere to go. So below the `sm` breakpoint (640px) VitNode splits it in two: your most-used links move to a **floating bottom bar** pinned to the bottom of the screen - the kind your thumb @@ -11,9 +15,14 @@ already knows from native apps - and everything else lives in a **side drawer** behind the user button at the top. Both menus come from the `navigation` option in `src/vitnode.config.ts`. See -[Main Navigation](/docs/dev/navigation) for the item options. +[Main navigation](/docs/dev/navigation) for the item options. -{/* Image prompt: A phone-sized light-mode screenshot of a community site. At the bottom floats a white, fully rounded bar with a soft shadow and four equal tabs - "Home", "Discover", "Search" and a hamburger "Menu" tab, with icons above small labels, the active "Search" tab tinted blue on a light gray pill. Top right in the header sits a small round user avatar. Neutral grays, blue accent, 390x844. */} +<ImgDocs + withoutBackground + className="*:max-w-sm" + src={mobileBar} + alt="A VitNode Discover page on a phone, with the bottom bar showing Forum, Discover (active, in blue), Search and Menu tabs" +/> ## Two menus, one config @@ -26,7 +35,7 @@ A page can sit in both menus at once - Search in the header _and_ in the bottom bar is a perfectly normal choice. ```ts title="src/vitnode.config.ts" -import { CompassIcon, MessagesSquareIcon, SearchIcon } from 'lucide-react' +import { CompassIcon, HouseIcon, SearchIcon } from 'lucide-react' export const vitNodeConfig = buildConfig({ // ... @@ -36,7 +45,7 @@ export const vitNodeConfig = buildConfig({ ], // [!code ++:5] mobileBottomBar: [ - { href: '/forum', icon: MessagesSquareIcon, title: 'app.menu.forum' }, + { href: '/', icon: HouseIcon, title: 'app.menu.home' }, { href: '/discover', icon: CompassIcon, title: 'app.menu.discover' }, { href: '/search', icon: SearchIcon, title: 'app.menu.search' }, ], @@ -44,6 +53,10 @@ export const vitNodeConfig = buildConfig({ }) ``` +The `discover` and `search` labels come with a new app. Add `"home": "Home"` +next to them under `app.menu` in `src/locales/app/en.json`, and in every other +language's file. + A fourth link stops the app at startup with a `[VitNode navigation]` error, so the bar never silently drops one. @@ -63,6 +76,13 @@ An empty bottom bar is not drawn at all. That is the default when `navigation.mobileBottomBar` is missing, so phones start with just the header and its side drawer until you add a link. +<ImgDocs + withoutBackground + className="*:max-w-sm" + src={mobileMenu} + alt="The Menu tab's drawer open from the bottom over a dimmed page, listing Docs, Plugins, Blog and Community with Discover highlighted under it" +/> + <Callout type="info" title="Give every link an icon and a short label"> At 320px each of the four tabs gets about 72px, which fits one word like "Discover" or "Settings" - longer labels are cut off with an ellipsis. A link diff --git a/apps/web/content/docs/dev/moderation/approval-detail.webp b/apps/web/content/docs/dev/moderation/approval-detail.webp new file mode 100644 index 0000000000000000000000000000000000000000..1e03e55c8e5fa899ccaf9b3da2f1fb1c767ca826 GIT binary patch literal 56328 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�X&+BkNbj3RF1 zMk>+>2yZ9o)~oz_IO{@AS~9pQ{)v1^kW8+FsW=I7HrdV{fZ2T^V)#wISn{EI$8oEU zx;%dLPSB%xw3rMYP2iYe@osFU$Dj9;>8%@6B8N#w5!bh}eh{lUE1X9e4b*{g?9+oP zkhc|WGDi9xFqE89+P5|4DfI$mPp+NzcR~etI@zHjVmBtY2i~@1Kp50frK}ig!vvyz z28}EHra<f*^wr(tG=#+1?k^7gS0H-<3XcXtudb`#J?x(<VVzzRpR&Up1NTB|pN?N1 zamfxF+X)=$*+>#)<Ai+_^s3B)S|;C<iL(?-zS3K$u)j{vXWy2Mx8OQeT4ijw;l`VB zta*gQno(;oV?=>!ha(z<6aohvxIX7F7gEIbqE#26E<%_Yfa&sxCYO3Kv4d_Oz6{zn z28Kmd>l&x?A;<Ae*rHq6>NC81X47PnBwsK$z>hcdgOgv?A#RIp(LQ8Oy<-|b#wAND zP!WMfJtShlUN?~v_&_I2nV9Enr}hD6BOo#R9$KljX_mXp)<{F|xCpyTqu|sNanevK zqKYb8y7cJ+8WQTZ!?(JYDiHGHRDz5{!f}YmM$hyq05ZS)v~vAU8t9D2N_mAguEq_Y z!OhP{|ML*TYUHcCn|Y)GvEP?6%_44Z@}8pG-8C5%k`A8Nyd8Wbx>=4YdAY(34N^C@ z$%#k^)(+}j?vvnGpU0)Eq4$%^SrC@M;NwlF_>o`1JWO4sB73;23(ZCh$mx)@g$lhC zWUh_w-?k=ERe-Qm)TNI(;pIorBx<OqHAy3NwO!6hG^ih)o`-ZDu#+cwp&zM;i(cxZ z;Purzj4<k6`nnLRmZ&FvJ5^VU6Hd(@_n4MA#`lv*jgPegp$#7Vt8tT|S9yGaO3t8{ zqzQuuT`bT(UY#l7;(jv#_0tfR%~}o7OMa-Bn{r{ra@qBh8_3e~@n|t_O+z|qmTL9^ zakn1H+8eu8KO{Zmp7=l%ot%&skc;lnUN1&LQ-vG}am^_lp4^ePkwcjU6-bw-xR^I4 zE1x|&tae9qUWL30DQMPj4+^WL@3!17AxpX&8wJU*%ehg<w1hlIPEcb%C|LC2$G=73 zQ!781(*j8p@I+<Q0npnHYzGy1O26V!Sm+&;!U{qo&h@Pi6c?3$EDsml9B;4X4CxpH z0s_h6h~2}f`Tsb3hag>)Xl?T=+qSJ;-eudiZQHhO+qP|Mmu=hsxqZ6_J?rSnnq)*y zG9#DX^<>6(MPmmjqta60_-s3-b>c__8bcMHoh=v^C1RopRtAH&26LuQi%KB$VV^D> z?TSx|E(6gJmZQ*=hW01FyP0oie<b$cOd`iMu6|p3B0U;<mda?;odb0rAjp|Fr3Oux z5#TBb|K~WH+|97sey}&BDFySPngjmouE-qRaV>gLFiXqzdz+zX{~?nCaJkWh#q8r7 zw(R)Wk*sdCWSSx(4gX3$xKO2;Ur0EbdsDpPGbS`YM$+{t3p8z(Obu-^j42&OP%$8_ zkRFqfOPv>GQVlCEM%=-8O3QyngdAyGtBzH*5J-#6XSUBO(KJ3<-)ilZNNJ{n`a_$g zY>5p0FdjY<#&KcH%i1CK{V=~NV!wzV=Q`o1r>$M#x1UKlar>BMIy!KRY$_r2F=O(f z2hj;?o*uSI?T|(vktItg;vIr86^ySlx)|*Dcue*DHuq4vUHAkW=TK>MDDG?DbYPpH zLYr5?F6rjH={5jkJ^|BLWgd3}@>TJY69`X`5=OCcF1d^c<)Tzt{bSaOiI3I~AvrR| zuhD8)RsC->{>{UJ&z*bB$~o_f$A^rmYCCbx1ALENgJQO>eQ8eiXnETHamUi#;zj5W zPvOvGcx;Se`V{zk^^po6we`0(?(ga+-b$WBhNo>52?Glt#Inq-3f*~4Asgc=h29K^ zj;ge+aWhE%;N$df;$E|xLKUigZ_RGhG%u15&uGn56T;y4-%u(6L#1Hf^o3PSd>N0~ zR-hWeS>iP#+Z~^-=NCbct!<a?A`<r%-j1!Gn0Ded--{y>(I|*NKLf;8#SqfM%%&2R z349Z)iK$f~AtHXZ-AJmO`OL0}6n)Z^?t?Z0ARdROB&Y8TGNIJ(D!&vLeuirA4C(HO z>r`A3cOGe?ibVfuDijnbd1%o68Du#FW!dO^PEm<gnj;<>pk+ccT8I)2B!V8Z;2t>x zFHXkPnngrZSH|ihU=M{SuJ5dL*_NtY>hQ&^qUE69-m5<s$VcRQiq$2T8|L*J*-CXC zsP%`7Y8DHcK1NV+tlQa&Td2SVVA&E3lzDVe5&WnPUB5g27|q2TD1eTY2yj@A>Y&LV zG%sL;@NfuLA3YK{r>UJH>tg8zz*yc31?XB}H1zT3g_f^egb4|dn6eCYpDeHGon#)* zd}Nl0{at95|95gTi-tHD{vrYxJ3hE4nnQ~fR}fUjv1WUPpGArspBk-Olc}WobwDsl zPL{e~k=5W2OAD^dd+}#uIb?k#g3u0nY2s)S_Kv$OA8!<_2@3>zW3&W2-Gwv9xDlqg z)a%5)E(4ru{z9;kptD99<^(s+{NC0&2cTwHp$slE2Zm>!|21w{Syho44}g#H;~T&1 zXW~CFqa_Y_#Q@$EnyFj&$Ov?MePclSAmwQ%AYeeD%P;h1o7uR<SNJC?x0Y}if~lj! zb72vaLM`He7{fbEp;6=UKFt`}QBoJh51NtH5bbJDvBQ!FCHyYF4Vf)E+diRM?q&$| zpq&j~W7qu2l_{c_z{EgmU7dS=+q59;(Aj6D7FGCV3VrA%C~Q^<-*C8^H!{PJ;7Nd) zt52{UdWePMD#jzXD>5k{_Tji|UYW?HGarVMfiH7CO$duGTkP*`KKPmU3xRe&?iR*N zh=xPoI}wq_wydFtDfxQRBpV2FdvQ)EgKxo{6v19~6;o3t__5zbvsI|4@32iHy{0#3 z8Wlbkh40aOd86EY<?wH+rvcUkzn84j@*rxT$XAI{@e+ub0+D_>Y0U0RH)5i?TGBTl z<khEdl(MYWY8Ld|XI8|dd3f?j$&_JD*JiYp6`y_6UcDgkUwgn}wT-U(53k|U8L=>Y zKNgaPDyc{sc}Jg_;5YfK*dzQd6T;Ny?!h-I@#RTyM*o+GsF+0h?1Qrj%-hP3C3b$; zUJYODEb9k!M=GqHr?4Y14#Z|2$}eMc&GUcL9X>_>mSQGNKAt^q)>hg&(aCuFG{D3M z{+ePx7oeR{Mz1T|)WKoAIA95tjznNrhb=#rFQa_nnWq`|?53Ha5%u=a?_mQg5AA!S z!y!cDPc>pvu~S@8Hu`?Auz`MFcaPoF4;ENa4Ue5Ry=`&cQJ#!0;GBCsjc!4th{&D& z)2`7vhA;fg4N`wy)rJ$MX2XJem5FZAR#bd2_v!ToE2}(f;pC#;9Ldo-EKrH4A?jf@ zhn>INnTy_MOtzNKeLecyf6jjLXRsee<30Hc#DSc&16Y4-dvQyTiWF*ctoG0p-@DR1 z^9LT&v%&-N#y~EC9)bZ%7&#y^BFMba5NF!(rMt(5z-XAn^IZK8M<(I|<^!2ncyrza ze3)vtP+v4B$dLP&{$CgHF^c|lkajLVvjD?)ZDoOj*&UH*=R9#k6gRXi>bnwv^5rQ_ z5?o}wll-<e<HF50FUyckq8WxG+(&5II3#18_S*t`cX67j!lT$9?~kpkA@19JX<}Wu z+m_%q^=WpEJ#`WB1JmRX;u6wmr89MShpL;`E0mMKlpE!YS9PTK6urp+XXc8Xo{5hr z{wx=(KqgB1HF;n;aoIX)9Nb;p&On8W?AEvQUJe~s)H)i<b8&|dW!&~fmVZ@mPGwk? zx*~bb(k#qda3=E$<5UG;XFy_3)l>7Df?rc<h~R?C?S&SnEt0ESj)D!iG|A49QJM>? ziSy!ON%_NLE@dWUCkjbXUPo;bkMIRnx=ttm#r9~!@9cV(!v5_0yP9eU_V(qzu0ESw zN)J1Br9SUWN<aGWX)eiERx4~>#PSrpnA{eMZj#j|P9I540Ah%BQz`}(wDgV38Yt1y z&NW4dm`nBkY6biXwHA_pyl&a|Fi@7`N6O30I#PY?awG`5sQITa4CZXDr67t@@jOUr zBt1xT3fbjxTCFrzR*UXSDqY^4G5q-r%9{BpWHE|soO(9s#9EhrOZfb`#45zyR=2?w zosCQ0gR&_ts$}V%#dYaGO~@js4*d+zOAvnj(egO7(C*jWhg^j#6B3o1a2^oo2o#-K zg}I4=pdeG*MIHF-(#m&Ozr^fmMeHTr@-L2M?dbmucyvcyIB5mtCw#CJi)nmpi+%=L zoU+YB%^>LA0>^=qD}w{zV&n(2BG69@Y?pt7P;h&5T%%!<@Edb%%M>G7Bk<-D;sIqe zM1PFj_q_H8rxiR05D{hchZT&1-6AWk8e53v{(eRWr<xSsX-55~RbZ8c8VZ=KU!6x; zDL~F%GPVbGjE-eRz=cA*Dp=k=2M?B@B*VNujj(JGnX*j=Rw8{F9fansW(N}r9ok%( zXPiBE7$ywA1gkT_AUsZHH%k3;-W8)F<o9r{nK7E<#|>!*Z)Rrj;?HK*G=)QXZzw=` zd$J41ke_fUAdiKpV;dS^m;*j#xcuZk)GtkKmk$3RH>gYlO(dGvnzQUH*TvuOy(DOX zLeVg%hz-m^2~~YB4(+S-UGPdt&F))Cx$ZJg8=U)V`cNbkBL2nCX^XZ>dzv&c>^cHM z^ZSyOc4K#~U?kDIEpx{B(|bs8#t__SGd1{Re*ngOnMCvr0)x$qE`d1&-1@>w9pU~H zQh<iX4<CDRre=q;{~J&^n&qc!oNl{uXQ&46=P#+q>Ok#S;%K`NzWk$MPam#^n`zRP zfl?S4<E=_q%`l>rl6^;>oz&2}2-(o<z<aBbVFPt2fFoa0BRTsY_mJ*Evg^c@<m+C6 zBiU@NfC4pbZFwi0Ay(xCZ-PQ9f`H4Xm&Liboz<BF$c#nUubV$BVfA}|1gLc&d=UCo z8yz~O3G6xfbI`H6lMR4YMhuZK=ksF&+ZwEI6ZJ{t1XGt9OYj7@PN=v_?OeNyVjR}; z6+O<&FE%4}zOx_d?T|p?o}}O9#O1@=EFgIZGYW31^v!dku*Hl^Gw<Qa%tYbj{_Z4` zDXMIw!Qle(9zvg%@0y4a5S~*1o~L4GL2j(xJpMNwJZL6R<W|Al8kTdfvGP7abmr5s z?b(o!B+kY8!4Xo9#QqY&6mu)k*+7;n{7nY03O`MF&#f}P!BjLZ7;|H~&^;;lFFmDD zJ`m_jysf7rvDD{Oxj%)5R$xDfPUtV**hOAY;GQL82S*kfe;Tb=v6ZCVB;Gp6-gRwh z&QOAOn7wk{w}nqpe+q?XlA(*XpdQLW1C2ef*gK<!Yo~eCu@3~8ihw|7>k7P3=4AA5 zRe~bVMLm%^^elwY^{>&Ov?(^UNz(Mkl1M@8els;bN$5W;P{~%M-jYQgMyC%cC8n5( z*z82eR6F3-jL6X4%ukQrwTLIuk8wd|?98(+t9*r)-GrjivSWu6!BHMviL~5FryYjc z01mAeexDl(1}(gR(_&$4O>Y9*+)f3az-I)4Kk)XUR*bR;pl9(Z&ysVo7U`7ns~?xZ zNL6)WBf^upa?R$aB~P{&VJ1-2?X6tC0DuH*9KblzBHk(L4#4iz2KY-k(iO|+l<-HM z!EjgWmf+uD<wF&zwuK$r;k?URMx=xzV$9_i{B#(7U8t5F)`tuK1&LMPjuq1@FZZpQ ziYS)6xD-#o-wv=mOyG_&82Cas1iW_UJ3sX>i@J!&=4fYUD$8G1RZ-@+*4Kdp#&C#V z`mH!Mi|eW*%M1)?#(atN>UlJWf@d#I>qT)8l^y6GF0(&qV!jv==k}`58hRi)gis_f zB4y$|RaEtoNSqQlEUb6&#&$}n60?Zf>tMS*hlB0JSsw9gKDKPea1V^B*uNHh22ERd z9UkskKJzpLHu8#<YpCpk@Df;LU<Z%y^8ZFEwPBBVO(dH32e%VUx^np!FXYcBnBIa! zL(SdUCkt;yo7YiNp@g#t*3AT=HM&8e^djh;R58yfTprPEP_<gU)p$6_m&)@9bU?xf zJQtr|M#}h~Qxl%5xWk^Vq=az}nd#Po>&ayGsw=zwDdL2wyd>GTa=w#{6^pJ7e2(y6 z1ME4enxgJ*#$|Qtr#&2X5r?|iH>kJceq}*+MzsNO8prBdmp)-!Mx7Lm)&vMroR_{} zxr&i<jw&2Wu7+Ng4@&Abj0#9*beUDy?hgSYHw#pMIX?2PApIuXC`3iQ>Mc6=?~AQT zdi0b1ui_C#72Iz%+T26sP7TZBg3AV`!nWli;_+?oj!LLd9DQZ6yqLLW-ucAD8?E<- z6E<U5rIKxKI}M0@PwjZ*o~F3DI2#%83fET3QhJf!yt2(%agqM;JnB2IoK1eQYY`$a zH3^=e+u>nWW?i?y5RJ;FGm`-3R7+pV!`Cat7bK?oed^clCZ!r!0kr}Pj=eHu_&b+t z2J*e)1Dt~;jHEf977}XTSp+~H%@l%YOAJ%?w0yx=O7H2b)1gK0K&L-H2G(_GTG6nn zdV=}9Kt)tH82|_EN8}~{|6~rZ^+D>wgk$&-^L-DMGX*3FNlx+2;Di7G-&rmwMQS%{ z@bp+2h7#c{#;98L{V$|OiJ#R=fD76GDkO5zJU1-by)3YQvb2&V%&O14tHY}jAcUAU z)sO8i=iQ@Qb^@01Byf$zutz_wpS!fFQuV+W2TsRo?`Zynphetm$s76dvfFXrgdGn; z{aGbiX^a5=1o0PO0FJv!5NS)39-7-x!aG<=p&d#uS%W`qX>XTvt=@DVTq7fNH-Gc+ zlDj*AG+PXZu9cW@)dYixp9_bxyYVq<U$B88>sXzz8)gvK&~~TK4`0vs;B@(3^z&mj zl6!05VLvAUj{v$sFoS^+nKaO<i`+k4qIf9zR?SM0v)_pN5KWQ-d!}}KtMOu^!w;3! zRTj$NUfAysL|JSmPm#R9%m0BkuU0oFjN7(2Rwy>nc0<3b!+=ut)^qJBz*)2x>Ru{s zrjgjY<XA1+xl{3HnzX&^_Kesw;0&nhU&8tqkte$X__3M&DgWVm0;cXBS1guIM+PQf zMnu?N%Abp?e)lKadfaS;YA-Fq<q9_s+8B{YOEpG7#YKE0Evy2A1_Lx#ltvWl_H9Wb z7Z6CZpj`*ER!zyCOw4yk&nL;K{(}+$q#Z^)48vQ7tVFznYz$=b3a@~&;Ey1*vxRiu ztNTP|BRj|H%~!dRP4Jj$Ksw-OkM~T)3>Wnt?D_yX{xojqfbIP}Jd<dqu?&Y5?#ku) zl8Odq0m{a7m(6AH+570hSaU>|X2sra{e9rJpunnm{sbwaaTIJK`w#2N0fkJ*dh@qX ze1w0^P^ct)4N^WxbCEHmiK3K*Ezu#=O0*lj&ONU$ZcO0d6cjE38#|%n85ulB6s6># z-wOV2xbfs#XLR(3C<?yrc4A8-*qo#;jqA2jQupMf9i1?(gSURuO+R}nL{eirHdZ~n zx{(FtHdZ9mfJ<7lQhP#ks`UTQ4F#F}aNW@eV6LfZOg_$q2%W`C96gmwR*oAO#G(@? zXQOWGePNZ)vTzJ|W5lB#F17_%==^uK+w2B)G)BB;=JmC4Dg{k^A05o(_@e{r+#SS> z4GSgTs0V0kqu;#;)wqt)-Zk40(7slw7I;ravczM@$H+B%`>SM2G^)!6@i22P)C&|< zvy`ZdZy}%_DM~-cJ^$3{$c_Y|RmJxqS|bkown{GT#@RcYV~TT<+aq}iuxiDjexZ>h z#Rkpvj~rse3HIMyXmCq&EWvmpE%O;<tC2c6mp5HRzMGI@@z!nJQaze8YLTqfjU@b4 zFt$&GWKFFAaD4On5>jImaUG6wJiJa;x9JCI;bb_;f7u^$nsGf%^*BZ?d2tKVb!Nyv z>jyEr3|Dke>sKZdvp7vLSQ)GwQDFt+iwFdaDoWbqgMw1wg6o+1Y<zC_AD+!?yzdqL ztzhsACTya%KcbzNHfzp>qEXgQqVd^8mr4=cZ?~0-8K3MJM;yFJ6ht(bjL|ZK%<H0c zU~RZ}3E3H4@jw%XL&z|nUqgE$+JW_{m{Rz|E$t|}fw&li-zpYVm}jcc=+NdAHQK%} zXI_?!X8fyz6|)s41~vmUOWTGKc7~S>ewRbsHc`qevR6kyLnVSKp{__nv!;+BPGF^W z@vCWN&mmnWDbwk&;bk&%Tq2Gd(iUV1JLWB_*La#QaU<nZ9lcb(i2$wo+>UaujRm(m zY3}WZyK0NwH0l5*J8=F=KwBI|RE~CJYZxwfo4-|f_uwihZYv$m_-nZ!OmVrOoe2Xy z{WQrhn-H;}c`aGgv=I|%aHofnH7Esg*Kf+uS^a^8lAfEA+3idKJLD7%Y`BIBnDto3 zj$T5-x>BHE(rmn?d_l>0&`zuiqRWq&t2!js&19wKicm1z-`DFoE%%y^;(xVIj#T^K zXZHVX5e!16xH{poau>j)p-4taoxF`qh}q}efs|YAn2XF?%|sWhXJZOCa&SbNIN731 zoo&#k&;HS6EHrEV|6h(Ywc)09#!{=17+oN}rC@{BBCwO<fIco|IK^FYBzVU0tNO*c zW0}gXv7=G^I$a>SPE!Hk(tD98EZyzC1EIhto`_bG4k|=p4+UhjX(Qc;XJwMGT?X<@ zpg0MeZrh7>5ZjtZZ`MM-lFG~=Ww{LCA4PN>XM3Y$dR>h}x`ydL@#dgwJ&D#W@OZ zEnxlc7U{RvYm069SLK+!f^OVWv;@-+n3ru1R7;!XSQir_rnHF9=s3T+HI&f)q`?fK z88g)=QB|N`jjCJ2?T8mkB1infez$%9x8e_I(7o#}*{1!E4W5TQaXNs{2%(5G$);1a z;Xc#5cSS@jvd$v`eYBY*bcVl-&*^ce->+VAv}ML(0O3W1!b!^4?9I67(*J)BOG0Tl zc-+dvV8egM2`5pbs+9T&vW}I--~u!Dur?N1D?%0)>xkp(Dol<<zO-D2qi`8y>QK2E zz_z#v!oL~}d9+0BX$|E3-`tn7{LBFoJbcjP_sq2wweuqAD(rfOf_pVUaGK$ml@HOs zO*`}zta~p7w&YWd9`egH9MLY$&Z*h|3Lj&%u8I^2c0essPt^LVN5ZF<p4G$4=5Wl< zsqq;JGM>nYEgH#7&}ykYQ-?b3XYW6ojux<-=*H6geLj_0D@d)EaxQj*gR%D4U%*XQ z$e9Qae-yBhq?*!X?y7^n-oVC@c_oHhR+tN?M?Nvf*z<b~`KWwbRP(p)!K1p@BE&N( zwCkVJPY0)80(iaRmc4HgAFeb3dWAM0)c)dc)8q(31i4tnn*?t|yXVLsh+SgKzZpGm zZZ#<S6meJupTdu55LT(Xy&&;5?@jWxnB(;j%vBNUgKxI=f@v$<C4YL$&*h6i$>XL+ zbYs$_o|Ebhp!6ZD#;f+7a%+P;B}iS<FT%yoB>woCC_f?mEEKwEE?MB&a8@1$!%r$P z5ER?S%IkLhhvP;^jAt7*U&TKk%2lbjIOY;(sKXpv3EH5+Zgsk;gIGSe$?Nzq1^E$F zf=XE4f*fT-eRb_j^#z7Wi$eITp3r_eIw36L<PcjxMzRNxKkOltQfX>C-1d!u3bwO_ z$u(Euz|CSV%loTYc-DuTq8U1FYm<LTao?>d%d^ANQ~4xX(KcNh!XK18%ieq?HErii zbeR2R5L-Iagupy_{VfgF+w9`F5{Gj2X%!Xwxp6eMgo~q$7KZgULY{A%wo4SV5unLm z1UXRBO_J)%Ul6y1gjRTm(bjfxd1JQr=qq_wx3;Fedm7SmlHm18ng+WhF<A&<FN&3< zeyje?J4SLCF<@}h77o90WLQGLr^4=-S!G*Z*uqid&*GbPvpXokS%v%Vr!bNFC+%FG zs<gmj41ujlk)bd5g@u9)#VUpff_GoPehKQclMF*d1_khI8Q3Oo2Yak~B`S(iaM%jx zY=Jm8^fDxi&2JT&5OmBi0`HS!wAiCIn<gQuZ!-z+cPUH-M%#Uhrc}v6qgPvOtwYzX z_MwhAEuTOc$gxEleDy_xlJ`o(#_Cg-%2zB#cCw4-iG<X{BW$Evc#pmO1~{*}9S$x( z(#Y@Ohh-df5(ej1m#OZd0_NqaglnnV$BRaDpJq-SoLds306qNhfd-FLVwUNU{yX@a z5Fh?zO`QIjnq<T7{8PPP8)GU-0cpeV^7BrvZvJL7@UpBWVim;?R-G#JvS-*6PXCzN zB1Z&i8x9fJjIFS>!%^4GWu^JBvaS6+mgjdPFFJV^7&MFnCK-3J!Q4EHzu(j6^TB;6 zt0&`ZCaqxjpfU3I8cD)BeqZ8`iSg==SMy<Bgr)hXJAk=NdvipF{gx`w1Y+W)+K0&> z*xisM5&!^?)r)UW1Bbouz?+TRl2G@r%nM>@wRNKYeB8&@gwztLJL@FEB5>LeGrwSp zpQ0HH7`Ep~5EqWqJPKp%4Sf>!R#`3>J4D5p>JYbw7Sa-&5qz5O0^&%j2j0pZnyx#W z!Kb6~T?F^b=S&mCqb=tvIX5HZkAOFP1vra8Juw*^gbQXp6Ao;J!LfAGy#nnx;fDbu z6>Bu6&ac}WMm-NxrAfT1dT#{dp@iLqU}~xUO-D8-5pRju+}YyWN~KzfJBZ&#VR4M{ z*dPeKhY+B8!yscrv$Iz=9Zd!uwzk25kL&6>C)T2PQ5;xb4zcz>blZsvw_A3T0GHSv z2)RSrUp}O353=OPK0|ZVnf?(Pf>-o!4wh@{pd<qK)$X)@q>B6a)w4}*^FME{s8{2E z#$VsL_%rzSbBi+u%puL{<4ciKj(xxvWtoM)3igX3mSUe{?dEB8g`x=$K$)Q=OQfZr zjr?_WV+<)JUWCGzi1be<p#U3#gp%DYDb`RvAwleWO*QLNvSzr*VB7lVfyL>|+++5# zl};cVw7%UnQNnk3_a7}e^t_`zch5o=E&VIj@*_h&wZD04{?GF&3<62xjAZrC?+gL~ zL7o_EIA!IWjesnk;}mm<Eaf>%#*M<Kbi?7?%AWbBlcnGagH-O2|G9`eNoD$EL}lN0 z?4<NRpfA@9*ewTKxf4Qj;1s8L;l@@u{H$q8=%UW&c`jE&6OhQC5u|2)Uq&}?*ezTr z4qOgnSP*;eA7bdk_`%V*8-r;iGwf5nnD?(PnU5B3J$m*hD7cU{;?8*3f*h<UxvfNm zlWGRtoB<2RalHC{HMq`8oJMi>WQ7ng3-G|FifYQ>Itx6s6TDKH{N>DT_{b@z5E(Aw zTZpQQt`w}a?pAAcC(*P3vJ~uo0>*F_7lz+>1IcLRGZK~8U|sIRJ^_nkYqgh3$W~X3 zG|)C_K|i}K%UvI~gqX;+!>q_WHxQh10T=W{vj^{qH3JPA8@rV@6bF5zy?-O+vqQL@ z@3Z~uHf>P6_;r%%E=tqZL~C{-0uimmvTi6;OM__xUO~f6aE?wh```*HX)h(jqAPa5 zR?>%Qll)04kVpQQm66=XblC;9?q^94k=ltvvivJpNt-mdb*&zGJClEPTa(EKE?^IL z&oNyM*PkrYZ_V^9hV9VLIYH1`dcVACK!YmS^l=}1Ty1Jsv~VzCLx8Hh1jncnVO{kj zPCu`Xcp*CE!au^vn~3}HV{|p?_{RuiU5bT=9Rvb<(ELA~ekf?WZs*$h7)jNL9v#t? zC%_2AH?%3;Zj0@CDOyD_SRbcu6F8Lntlui+Ib`Y$ZP@~}jgR*Qp$J6l-o&$N9v==Y z4CF>iO&_>V{@US&#-a3HeVZfaNc8Y+m^~4-httW1z%}4<X^Fhe8m*X0ek9e+LT=o4 zs`qFOppQzeJY_$pyg3Pf!c4Gz;kU`2HQv)|A55}VgC_=h$rxtHri!Q8#;sX8i3bva zw8cU~ogq)xws*n957U%59ymhYR4iqD3ktReKJZblP?y=JW-hayM04$>Wd@8*0?8oy zW50DZ9k^kPSw=djlEl31vwO^5%B(<WT^g|;b26DfXGV@NzI#^czYWvV1(+Da9L<v= z>ZF^Z48W9A{FT<cnD>qF7?`JdvJ_ILM+Jd3Y+4Z=78?W_P;H^|Qez0vS=D_*1o^d- z=DofQ8`9<;Cj?RpRKBuDUuu~-FcfrRcc~)aV?`T<S%8PX2Aw$*kGM|}8R&XLMXVjs z1v9s>$TG_-2b*8sYqTgNRIM!i=QVI@N%Ii(Abym97H8bP>FxL__uN~`(w$M(Y7K4S zLjFhvBQSzol-fYDm6gYGnt$#QFUkCcbUo1QUN}jvUuo06PjnWiP~oo(w{>XCe~65c zXcBf|dq=w_rI7I{yLeOLmg6&q`H3Ed!xUqUj)`pC1yf<0!gRAQ#iJ?Z$f-cp%V5>= zNc+zD2y|S}E)LV3ihhJhubA2N!<d<B3o6n|x^Cl9tMcya+^Jt<nAo>g@7ZwAt(rYb zJ6qk(Xxb472Lm4I1AO|n6*))y+#45#gAI`b7w}SdvDSNZ4E^VReM&1`3MN5-VG!8( z^IxU_(tD&u;eLbNl6ZX77_cAdD&FzH%4~e=0_7CpzeMUCGeK}^E-#Kpt&ks-4z|}a zk<^_w<a}{;xoy%y$qlN!K1WeP4s^r|(Za$ehBca92{i=IbTe~r3heitt4g7O!E~-0 z_oE42!*g|&i?v1JzdsJknXy===_XRRRNzT?$-Hl#@jOxU>>+oLdV%vU{PeO=#83-K zTM^Ao)qSx`TO091SV5b_X>S5q;g^QEfyr96R9NmS`{7!A4~<}#G)=bqb>g`h{`>jm zYoAS}-%mykSSk{o)NogvqrxX6QL}gxWVmvD%0pS!Q(K+W5Sk??&dm3cZn(P7mR_)` zmVY)F^}cnUoAypzw%lqq!eaT^gg69<sH4t+^@SQI{3R=Kj6u+G<!OvHgKUU?Q5mU6 z8_4nqUOO$1*J5@mu%E!SBSjR8b*_N1uwcez=n)OXu)#ak>ddTw*snceXsH6uSMDJJ z<4Ds+dNdHpBM&~0?=Kn7SA%j%uYPc`h5dZ^R*gqP2G;gd1LHY{d^Mb}{fW9)JZ2LK z007#i{wnaXjthwha2X%_1Z{yLYJZm)kE1wU`wi+_{mo&5K`*y^lCo-7rV7@FJ|#{< ztwzi=`ipG8;_2H+1>w1e7IcX}-GyB8fAH`FnX$0GN8k~s=`IOG51#rk?f`yr9gulT z(VA{;PuVM)G(%n`1tv{#7%3mNi3&sBsQ4}v&K`%qkRJjoL=>m*&1^An5WY*`z_gf9 zCaT|;*rON}PMIRv?M<ys>$3X9;iFbwi=%)fFw2TuYKBQ8Y+~KGG@xismHZEz3qKIQ zI<=T~IF|KNbG^bGf7Zo%-`dG%;E}Xb7a%s5-e<~=w*Rm^s9@WPjL&!WdzCd_WUd<s ztLmBYtN--IhCf6yuxuASlzB^GngAmP2WEpP-6WK3?$>SqDPWKTp4oTZS(2ck`z_b{ zzci5_Q_nUZ*}HVJo*Dr%S)wHyC>&JKe7xm<{5+c|=upat|0C94^TAf4d?sPI1kwP) zv+yfGK+IcHY%{Q)3%vSE1GJJD*-8Xr-9@jyf&dH;_4XJUgpr4}y#5YR%vy5Jxlt2- zO!czgqC0gO4h3>xU*grXMf7F~$37A=9#CSC#(64@jQF2KH)u4noRYyast8aC!SSSp zifHwl9iwIlNAjuD-P#iJgO^FTN7^E8?Jsox$r0-<X^=@RdG0}VNGetQJ$v6^R~v%^ zF)=1{YO)seSbSO=Z)g)6C}FO(;{9~vm&aMdm&R^MmKAT{M%nmKtLA9YDpD}~t(E6> z+1wxJ-;i+YYS(ah<NIo|3xF~{a@1;}Sxb>yy$~^`m;-j0q7WT^z^?fb(?evQkrWfv zf^|GY3VqPQ4)1aQu-<{jUHwVQWISFELo<6%sQWhTQItA^hM?C&R?f&0VLViq5d-D* zd5GBC)|C;6IK#xG;E1jYh-eTx<>j+d@^|EEx_fe>wQVUJXqbdkydhakCwZ{20=0S> zs^~0Z-5FP0ZJk-rJMmkK$f<VG)1fowLFJ#m{`t$z<x)vFw;~=zr>3kjES5!UK};53 zahhU8P~w{5XvCRGix^bnSy_&m+|lM`>M0wDm&!4N6l$_A%<qIcnC?aqUS+0;s-AZ_ z`hpiP0*8P1T~Z(-K8?Usu|tOxfBQgfmK#4<70*jjbqx?`)}iDXzlIzc6Ha+WuT>#b zj;^u}Yr=N6cV>U(|0ioVoq}JvLonb6Alq3mw|cF2c_jnRJT&E;Z=8taw707^sm5lU zq#F>buiU2!&pPR&{vU%008uxPhnH)r5Y3x|u6&6n1iLZ>0{{`0ewqJ%l*cD3DXr$> zLdOK>dOf}*MadWZ=ILgXe@m6~sPd!1ZnS`xe~VjJ|7)zo9HFZrYalVfd3xVXia2?| zNg3L3ZE!JN6!~%L?dKb1-?pchQgg$%5s$@9umIJs+)Oa3K1fkg49hYx@M<1kYO+N| zn9SP9X{r&ySPek<9r%xkM%fmm4)3XRBdKbA_B7qOZM}@}Rn^Ae5pLBa-rGNm8e*Tl z6SP1U#`HC}8v-u~vgm@wwMq*%yFdN>vQ10$U_)7qyKQ;jtlkpdeOqF5K4Hde>Pgi$ z#_B%^LYA;`(ndW_$IpuJVAaF2X&;-~wPfBVS3U?$upZP<YT^)`e427^ALe8Mg}+Ko z1YJ`-)Vir#f;Sj*?AO9OhLQ{o**BA4SGE@l{P7YKfuE!pQKf}T=Wa7^o|Y^ML^7Qv z%Hqed;<<mVgXiYysN|!0illju{aN%$EsJ*|T`BY5_f?*M9!w_gXH3t`fFPuQnv{k? zdl?+{X*4W+)eKGb#W`V3&l^N7wn$i9=vSJ>{q0)H+GlScTo&iF_-n-3a_1HKs_=a^ zQ98u~`l?SBR|GdFSKubNW@qtqbXsQbjt0qV%g^=?N`Q`;0us;CaKN}J6m%WL3>8u) zo1b=Gy@U1JEA+ub+|^%PL9DFrT>KoffKvUnFq_$7mW-gny6L-+X>sH=L<Hdc0RZ%0 zRCn-Z!~2K>7p7HO-XTwww#Sz5Pq|1p0#iR$C5{d-&+d=NfAwco3cu6Bh>A9Ot$`4t zpv+ZnK-{UO6^HcpXsr*zlbW&|AwNL_)+Z)Vv_O0%gWkyy`$R_)orP(CaTG@}6~7tT z(KA~U8-anzg#?5TUlAWVcY^OH+si<TfFq4;5?Xdq1%13d)0va6LfK_ln#d+7DIeGf z2BnA<-EI#yBowyr{Hnwhb|z&NXmg|cq(<|}DnK9fr4@8e30(XhhE3|vrEWfcTi2Vz zJfR2~HA@Ua>!~v;LIDAaVv3<d<T|2@rQ3^fC*xi4_>X((d8EzBNvOm-HNyT&VSNcC zGo>KZnc9{M)IV!9Ds&OValWg;q|ZV^vT)M7E47N!t1&k7>n!I>h`BZdE?^k2Gk=ot z#}-k=?J<-P?|oEm1Xnh3<$0mOu+<tWF#bG6Xvs`NkGWtd|A|~UUE?wg(hv*#Re1ck z@#`JbRujM0D5eQ9?mKULu*x`)$_HDu$8v7((v1Jwi!v9*mj`@js*Sg}5s;@Zlgb?X z&k_1*L}lr1)sGK`CUf>aL(RhK8_Ku=jZn0sGE#N=p|6_ndy_mTMj6$hHBiLY7I_?5 zdRhW~;I=SY9NceGZ^&S#I*J51QIl@0V)B$keLbj3x`GsnPEVsm$Z%g>2#>4iz&2+T zj~!kJoT#jhYvA1L%a5cRNn&95cdLv;L(iuT(+)RVuR#}EAC9dM?!2;($bnsE=#nbe z8KiOIU+!#*EEeb$S6e8^jtv#0-zYOBJbMO`$gI_m|4_HT_SA&_Y`Xtxa@VBtLVhVc z`CDk2o;DOho9)lbvrIRKJbFdZM8AQ}4;<5%NtV&(vANL46L9>JE1`m3Mea;>eS-^} z3Qw$JkL_Wq=t`SrMy(a9y>6L{610fZvF67-*hpI;aK+Y5K6mZ=j5vjmSrf?Io_O_i z)Ok;36-#NFQ^x`_HT%6a>Hg2PsYBhIFPg$-oo}p@GZMrzj~|G}>KY4hDph&c>#SB@ ziao_GoS|WCUTKc(n8ljDCN^MqM^<W4%n;Cl-@%j?g5wHNPvxdPvdy&TcW+k?)3vJ_ zJPfVA#(9{E&j|jf20t8ZqI~a{APY1KG#yREUTq)JSgGVgWElJA^ct9y*cMAzn=y4X zRqL5nOMy7j^hfw9$FD$?&X4E9Nv~H7gp4015JWkG&Gh8Tj-P%L8zWbNfb(!VpWu;s zpsMcBzlcJN!{d}eu%i~cDQtF9fRcr!g`Iey3pWukha3}Y01H9S@m)>Lq5bgWN@16M z6KbP-u!s>S)XC4nPlYlC(tvadVL4?xi7h0Q5NUmb<1E<{D3~=}o*5f`?rc8&roGb- z*oUDO)zfiH7{~%ZH%Br{S>()&5<%SPaPK0|XT>GBIm^UnPVQ&S%18;#D@l$OKP=kV zvj=fapJ&>YD-Hr(JB~B%3QfWLqc4P`0zm!uY_OWhZ0bRtK;f41FR`2dFE2&TQ}tg8 z*8I(NN3#n4#;lhv#hrR+mX!B~7#kpVKMnBWWRpuWp%(GAv;WTz0_msStW+K>jn0F# zqdv2ahfkPwhot8O;-HF%x6K+K3G*<))kK*{VdS=nou`S&{7pvFEi8+U{f!IF6gwis zRY(K|PfB>7*7m1RgT0r%JRP&!a{?n4ln`k$nlhHwHNp(g33Coqx78J~7RE`s&>B+G z**Ze#ZfG1=6t?P)ZceByx%`R}AL)A`2QRU#9h#nAfUlU**ViDG#V-2Byz4oHf_)11 z?qwyQUzoy#TV{Ch#d618S(}>Bga~RJ6_+?_zX~x!xa;~M9tLmvvm$>=8<f=P4<aY} zmH!TQxX|ESH|{P_SGiVe0+9MdUqLw%P}c^kN+3QDcn1_TV&kX?h(uK7fY`nGMw!KK z*s8_23423O?fXV^d%60{ki@xiHdq%t4bR@Wd*?DFbvSpm_u(|tD}{xM;^_;lrK03k z{m~eaOT_I9OJ(1FDhalP?LRqA9*%M<7MbUY!edl)w!E=r!jBxVrZs&?BzEuuQxBy_ zFAF|MaUW)|8ZADvFdYWj<Hvz52}Qxy^<?kW!SLVLrdD&NRJeqw$~=DS{W`-%QT&mY z<!J*rz_(ESs%HM`k}4V813mrtO<~s1eaX3cD+=HSBZ&}7NvIOJUlhSOAuu#H`V3*v z9C%6<416N^<ftCOGo2Vuw|+PN^ZlO6uFg$iXlrDk*yx#ux{;^Vy6zj>CFR>3m3KNZ z?$_T>o&uvncE2zQj~Xeq=hldo4?$Gr)&~I_5f|Fl3E*+jeSRlq6OdF!#<*zo5=-cD z^^E-83HNwl!I50R5mLDoY2&OKLVC+O$~5piq<`{XdMY9#AsA9We%yB6#VE3DNmu<Z ztk$BU$zpkG$?d|1msPXqf(Xpt+65n&{RNVdN~$3bVzs=}ZKwT6+E@F#L%?!wdf=MD z)H4H#-952UQ8w1SX5{VYC@IZ-NTYH}jGn)e%c6l(^)btxK;MIK^Q#6jBh@}qvsz{w zD1Jz@&Iju3<YSaKyBCmRi03IcY^I;>Swud~!hIe=KFHbfW$m4?)d{g;F6+(e_-RA% z){a8KqeC@e&wId$j;|!S%nc?nTkY*DJNg}d9(FT8<7?Jd1&huiiv5~UhHc}|N$@J0 z*jbE}Y&N9E$e{tt8z#GHKT}U`9;D)-8maGRKXCKkucD65%3K0JOGij+4}VvJ1{4>Y zHSMtk%xSspKle1TK$dC$>6j~UkLJ*hyI7h4Pc4~fS$rVm47@b(bJP3lknml2L8o(i z@8Ynl<kNV7fGKVAZ{xCQPLJMp2qx?rWRqDG!DQekkX2>-f~br}u+uQpFivZ1ez#-m zU<~dbi|((RhEHNt+Kt$E5su_+@v-AA4eO78QZvq|Nn=MB-FnHP8<^WV40nG9h)odQ zFAujsRwq8QEkxH2WT)m<-`YvinWqCVN5{+gf^Wf=C;<<GJK3?~?PaN!UJ?fY?s_^& z2frl#w8+C%)hgA;O~z)5%0|>0Wmsq&b)CkC+Hi9@jmMdWF9^I&@ZzMG=YH%UBp*zL zzrmQi`qW0x^iCq|HaGuV^kQ}q9!R{H&3t#DSpEQHM<i)jQ%z9QC_@$Jwoh2lOJi{o zIDF$~4VN8LGQqm(f&Hlc-N2P5JQ0Z19M5(L26`py_rO{hy#$Yq$x!KKFxvXy9JtG) z^?aR`NWK~%8HHYAAp1RV8O>RefPhjFMG$oNLCr;5`Mwv*+(q70O1<%Eg3^Vu0BtQ= zwE99zcC|0n4ot=h<jDdZu!|_RmYO2De*X~`0sAYOLGCxg0e)M>W9-1YZ&N~+-Q`Yt z!3ZsqNtE{5pe10jRU8A6Ce?}hz~-z!8SJ8KxY=HjlDS;f$G*|7vAPK~^S=s*(vdG* zj^wM5ww<NffogwofOf-As`iW)i@+))bQ}ewcBW{6rG*3(zs;lSwNzqb)Ln}c2Co^* z)gSfFMUSD1Cd~f|@wHF0r2IgO-*uZE+qd5zS<y)g<muo(U6G=H*U37JTU|R7WTdDp zL#i5M|Ma^-vzd!!Kk0p2)@ti9RK<fMQMD|$o`^jH8HFH&NOpD$c9m{=`2W#de5q1@ zQ0Q4995z<GHPrm-c2-F_W;Ep}zCP6zS2C1;^j5=XwqAbsL__XEgGSnBkl`$|=7T~3 zs8@y_8!k=`7nLcTUSrsmQ?3gA>(<T&YB)sRXQgh6+pX(Na0$B6tw_vID$oT=-%9eQ zo2fH^yc^0vYL1oVspN?gUNSHSxte)?st)+CpEqElO~-4-N{VKuRpcRTPf}oT%u*xN zubgJErcolpOjD5aG8gWby#KmWou9xF+jv`W7R~qCoUF_17dKGMA>7SwMk=*5{a<^B zZ@KArQYk2q$S=6G0br{;+qcs#vCjveD9_2l>v_iIz=pLLL!_!`cAzr*&$0&9)#y@o z;4&r!GTVM{r~%3_nS<3W6+uu58ZaB{^EF>DW^)s`Dk9PC);$FXq~TS=2z-?Y?Rt{x zdZal%V9<Y$%6C}GF~v46XJS!jBdofxrg5;aB25Qm!ugfTEVPVK;2$KG#a?pg72)IN z5M`aPZ<d3d2A-l+NUhME{pPv(tD+|BPBvPDkF_PeFjq;4J0LDb*6W=O^(qTWl2;yr zn+lJh5MhE5*SoI`oR0p1(!)D|BxqNxJuK`Aa#ZO!*8#(;y%C7=cq;k+rV(h=T&4;| zF&j6p_(DQPNR&MzfA_F;{-!WZ_>%#>J@q?F{ij91>~Qc!knf}DZZSJC^*FPLM)tCv zxA0E{Zzva<T6RV9{5V%m4Qe1m8Z1xi1W0xRB$CK^Jc<W_5#bCPKBhKrML0h_Ix`JD zTOI*B6lPzsiZo$t=r>CHhk+IpsLocYOac$E6&t#jn5udFlywrStp-1wZWYiSE7lS! zrDu-X=sGn4PSvDONV@EpUd8Nw(-y3E9uW9#HNKf}Ew|2~ksMc)hdlfcmFr<-I8v;l zm8cnAxg3))73H++#!SMu;OfFbxW@(>0qk9<a|-~|YqXGet(NbJukmVd$J?7oa6&cs zi6YRA#wvta*s7yhZZ$_IGe}q!J80!g?ZfI`mh3WW1Digc-g4poZ`U)DA-m*^XEj9s zveX)XVkr5O8-w5$nL-FFe*BFNt-4fwle@&@CExK0LVd!Zz|;r548x}dhSFkd!8KV% zCl4RAbkvquurY3NaOo=IG0-RcTUevb9rGrX^Yb=cz-*`-n_fJ6HDM#7?x>H`P78gx z#wu)30!^#K)ms=q<2f**W;G#icf6SjDdrhi;?H%`Kb4XMFKgDJC8;SWZg_~zuo3w| zi#U}w!Ib8SB@wF)`jf3yJBvQUho+^jII-{zwAyVM+Wh|}tC~ad=B%F=qgImgn!}dZ zr;wn`e9U>><4D5;l;A?cgwm1?*ZHPRefhzd&`4G&hZE8AZd;?pj{|b`97ar%yRn+l zgfU|1n$+0R^0kIc&e$0Tp*pFy03QM1(g%K!=(0-e`Lvf(F;GvxKk>#^z(zsVgw*=- zz9pV6oKba7Un+H|M{5~wr$Y4x=*wga@Y`cgpX$Uq%NRh}!(EQ-)>Q0Us=if)cnQPQ zb3o|4iMJZAzc@#Z4%a~#;?@1|u(06Y6Lo(j1H|y?_)C-6NDW<n<^}a|*_+J24V8}! zasyOio)?ZWBf4@SPQb$0j`L)bKm*ot2e1;3dA7qZE+9g}p@BTH6TP&pRmUmu>6tL$ zL;t^PW>BXWx^$6kBFu1vle)73g#9q#!*CX9%=!4o%(21XzBm0R52fyD?F{;i_8qN& zkwTSl@?ao@X8T0(uH=JP#+r?dst|^CK!mSB5|5Jk%g|3j7!oF5Tt;F`)&w*Ap=_}@ z5NB}0%2`WN=Py$!1yUUQ^!oF~%0K!lXZ-zdRKLUEIhW%$wr{L~3|$7e1LXZ=g`lRB zx)5@)TbeEDQywRYm*B7J?dvNK(?PHNhmNmK<+^)d?=|7%9)|=fE0=Q8UCv|H<<%rz z?_A0B525&D5|!N#w~*vfrAsE3K&!>Uy)W~k3o;-N$Z~|Vr+vNw7uW&X;E{)6Q*bUt z19&@d!wl|_jM^0RX85~eT!JB;S;S)cyjPO0JzB@riZ?6{&>q$ltf_zwy3^&#H@HrZ za7orl$}pF?5e+3ML&3sWa|$9#8W$7;k%Qt}H`<3LQ88JyU3}zLFGMHLi#UzfKR?yr zzi`xY9JD!OzHm>RM^p~PkxYqLEb6}zR`e=}9vl=gAze3ri$;+@KS1Wh@F`=^vC||I zqkb|S$iw)(Hn$_mS+5U>-@MM=d+!VDHjhM9GM&dmKeK@`Sb)NXd1;N5+?oY%y_sLV zS(X1fzVMZ?Xspcc@UmIewCQ^*7YEzd_=xpGelj*kO=o7D@f{K`EpJ15V)P~&x^sPE zBmkRrguJaPn0ZdvjNP02CTma{H@qQEtX;B>R^5jNHad6h)?I5ne=q|V3L*vNXi`0V zA?%rDY&)S^^BvAtH%bXsi*8F>({-YJFtKn=z{#i_#B||IvI<(fWrLt+Kn~|6uEW}M zP=%3W*0MN$AcJ|`z_XdyzQPUa7i1YA_x=}pj7Bceh{F`y+uT|=(Cq_&JP9~Y4;Xvb zW0zgV^15+6Z})9+O!Gj3Dh2)#Z6|8aKzzHf47kIXh;HWxiPRqcc=5PPOC>Yok>Je< z5|zT(N!jS6zENLYW}kYSi|G&EFow`>iKg`{L$m|=dwue9sOaXKKW%&V^=#%U64xE0 zK{{69%bR3+YOqeNs5%da*w!K&3mB|&PLV)g$!=g$rJneoQ^(Q)v1W17fW@rO(=Z#3 z(TJn}^NaA>QsNfMV)hu}UsRdL`>nrqw{i16_yvj+Za$ytm}B=ks`t|tDs6X1m}+lV z8KT2?t>G?eJ>JX7FVF{OUcIih$U?Mnl<rfucsyoQs2jl1H`$n+ta?yLTL%fyjip?I z1Rgr^6iF{SB8~`E9ltS@Sg*svS-sGoHsu&%fQ)0KJNKV-pO0k)ZlN<2Zr@pM-<%gD zV&=l;-Uch{+{DjkXUBBpelNl+epei4S@_^?xo(w&qFZkzu9iJP_E_icqFf7{p2n_s zTLYpd8TF|HTUY|#3E$`*!FtYsW-}`YSvvfvEe?u`JLq<7rkE8GHo#YTKhod4p!h=g zukh6ODo47y_)qM?iP(30W|<jZlL6Kp={Jai_v@cbSOwQxOsNd0d!`J|M_c;hBF&>O z@{pLVR-tg}4&MEm6LoL&t5@?%2)telN2d+e%Dh*Pk6`;~2EU4_GE%|C2~ax-K>9o3 zE);lT+AaZ>xW2^Bc<WO|3mhFYtl#e`zN{Sy$f5FSi@=}NyQ$4V?~eb2haS@^6rr4V zDfZA36C@YMzpix|c5YIMv{b=ibyFMQREN3lB~jjHekUSN-Oyiim2E2pFR5$Uyg}rg zRs&T1P}Sf#2vU;&4q3z1;&r#Pc3xo=>kMXM8E<<?yJ}*a)_0NC_QBrdwoevbKc52t zv4LP$ne%3e-~;NUgK>~`1|Sm(Rmor^03rSMe*I5net>;SN1uNiGm{lT7l1w+zz=}` zKo7wQLsCWER?``9hV4T2dw``<h%}3fG1i2t_XoWqnsOyq`KK~G%0RN&k__ir>iAX< zI!okw;HiZ@U{Y6!gnzB`Lx_>OoJB)7COVi~2|+K#C|dH@7#rPzJ<o^%C&%V)R>NMO zKEaJ~rJSk%K-3^UC;}j3CCp6`jn1=4+ObTC(3i84IM&O|vT2Izps%-#S)oL9qYqgL zCnA73H9M$b%Up(P_Nj$Nx}XL1kv$tZ?vQr_bZU+W^yxRqUKNw0Dnzhhfwlp0BGq*L zZ*lg0>Ka)VmP+q?G!MT@p0G$UG^4@!5#?800yAK9rx|~b5KBX@J72kFFScr8JgP59 zAImV_4;lbGBHgfC=+nFUd(tpNN4MDM(I`JKH-mVzTPd1fnUZSWK(>vkQGMj#)G-0M z$aBe0$iwV@^18=-wYgE4%9Ft5<(>9tI7;mXYw$q@%S3lH9&`6l>>Iy;z%r^~3}Rvn z41nmyM!HVINMOQB4nMn6bQ*6eWeE)qrFyo7Rq=VFesnnDc5NRTT)Ws~6s^Qo%#avJ z<(ulX?4|~T5vMZtR&AZ<NIr8;%=U0p=OuBa{oizVzzj*chF>Md>$nz=hjNU<m3{pL zQZ`|A-F(_(9K?x1HDf9Y1nc=Pu{qn@qehC(kJqz~)Mf%lv>*F$%B-{FTQc-LEs@hZ zU!WppBBteZ7WZ}C{VctwN<yLN?rDSRZqr4as!L(=jDL#tR%`Rc)#Sd!{{ebHg}+B^ z`dwn%5*(M9+dt01?E{AWs!+IU_|9znV6Je}iQqzn_*}wr1X{@OoO&pzBQSa0XEP#z z<_IZ2`Q_~{IrYm+y)Wsd2SCM=3(k2<R8ZC{p%u5!r*v_@FN|<I&i;ep!v_b?4RvD2 z)Hny{)I)k0U|{|0)BLlc)6ks3q$wf;FgfF&t^7LpF&2ngUB|zi#&<5hE@RBUE^V@? z65BO3lw5MnG7_G{DiB@=twn#fpjwSKj2)dAl<8EtDKF89Mxu;ithh1fm3~guEozry zN#8V40fY#F2kKPf1S2qtCHmRHlZrc`{x~Y|*&6mOE49vjy>_>YQ=8WPADUB{K9a#v z{yl+b5!w4C6dOQ&-*XyLk#PrU=_8n9k3G+ka0V7&01Al23IGB@C5%9z2$4X+bRL)k ztbv`Q7LoZ@stYrM_Ggfl(MQzG{iby(jTqaJTHaEQxVQU~HWZ<44ojzTX6IF**+sDn zVyWl=K1=z;N|}?3wXAarD%9SAm5#ysHJ?ao!`43I6r#qt1-q(P4pa>bK(N$DK_OgW z@SbQR13#H~Kwy6o5Z{QF0Cgtq@Q}PGplrO|PI^=?(QU@l76mgJ3N_ipQxvmCQt#w< zn@^PnSu+gqD$|)&Srr774Mhcju}D!O(05l&<``%>C5E7z`uza<n@}K4(HFif@XWbE zJUGN#M5}k`M5NX$0cY7}GHkw>1VPHE_ji3GDA#R^60ucbiHI1g7;_p?H1}zOL$2IT zjHyLj{+I2FdTanm$>;q0nsTpI0hB7@8$XI6SGBob<B#2uoNpjyb5iJ&+hj4&jcXh# z`jj9WvkD~Dnas`o-Zb;-TsT@NWVqNP?VHRFpd8SVz$=iX4AXG~Bj!ZVy;$Qo&|rXI zRoG^zolh4K9sf>GjowjhyA;upc1ideZD5j1WOtr*h8{aGV-DE@)7_>|m&gC(pWsym zIOSDnC>y_w(5tl-uuwJutY{TFC7%{@;}nOUcfAiLc+Yc-sZu__QRTSj#mMgq>g2*< ztUuLXr%WVfSNNYT$Ih?)S~YV*(Xc?m0H_EfFVilK2rsu>U4oHqoAywZ5BsMiV%Lme z0|@{h_#tr96nG+DOWqW`R!cS)%z>Q4Y+WnZ0AsoZ005mX%CEYg)a=O(w?Yc+m-hw* z4wHvisW--fP0{=b>*RD!GqM<T#A552!^p8UXr#+Vq*1{YMnA<p#zQ{SUgN8~aY8zf zL@nhGr7_~>qJB)p80!?~%#AL2hFBPe$BTc=4SoVjY|}=G{A6NqI1-BrnNVC%gt`zH zKA@I~8bQA&FVM*{d9`Q01}3$^H-*s3t*m(5#pLAQDHhw9?~4NkRO+hhU~a+y$1*7* z-^R^OBh7Duk!{{T6$Sy=9v#k-hS)4gG}InI6G_pn2Q!A_lm1Ru`VJaq&qRmztZ$Gh zn+dSv7(w@r!*B+P(j_5NAYg-S%@u$&i?82HKFYMK-uSB!%PZE)rg?-qNocg&^bpGE z8^kmFnig-AX1+T@o3cU#qthHEJQTT+uzT)nUYdhm9ao&rNych2snsnve>O7%Ubxpk zqi5(Pzlec%Baek_!%|JcmoXrx-L~wX8*I$>C&-A~iNTucr@d6I3C=?jHM~ev;6e16 z;mjim{5PkuX>lQGs~eMjE%87BGV&LPA)e-H2*N7>vn;wUi=ybdE{me*x-N^Nx`E<p zy8M1IzyU89fj|IACt`pAHr)j8pB2fkUdXWFq0P=psJ^z{7#Ia4-v@9gi=e^j#QF`Q zKbz_M6ND(MIvr_CS)pu|xbJ1%n4u`z;HOKAsFT;X#8Jz;zSwX3LFIjaZvUjspm>rK z$4yNf(brk0XC*E*fk@dNE3!VIu7dbczCTs{xEg6tR+f8Uwxrg~-s}ju*UCib1G_|8 z5@$kNF<*!n?u{|npobLFwH%DFCGg3t&lh!|?faX)FDp8zAJH;*k1)r_g@xl3(c_w- z%iU++3u3C|4PF2&cht}qZ>Uv&UVTBYuBco}pZI4*Z8r89%ka@kz#}BilOI(B;A%F< zFXBr?)}!HvC;NZ@@@iz4JqWwUN=76x_rif2*Z6HUd19mvXfUa^2)*6)9U1J?B#Gx; z?S;m)*=wgeIBmuT-Yw1~92$}hZm-MBKqcv~km7$2L@>wH04og6GQ#pt%-|Qv;wN6V zVje4^xP>#os^R$i1d>F4g+8?$6J9gJ(rY}6Oo*%l?%t};TT}m%WisdQTsaELP?Zkf zw`by$MmTkrPWldLfAlbe^H@tG;cYs?sEotVZk}i;9EY5u_oW;*l~xjGQ@UBaX!RHG zcB|eOI&QCb3*#r(X$1f-M_Xp9tvTr8379fNASZLvIr_NLqxj1{CrMW%Dxh|T`}ho> z3jTwhbQl?wls>y;+h{LnSGBS$ecamHnvrGFY;n0+v)b<19;WAnG*4WR?xqqOAuE^3 zYh_mn7uBskViC=#3_@N9;s5$5g*62!<qJZQnoRq{d<t5hh-aLNtx4<tX)-Vmj==yj zjRVc5`ost`sP!BP+f8<*v{cy1wtK+P<3d|V<@wPdQ1~N53$hh&iJp_6=9MvS`y?~G zN|<Glo#V)=-)@6)O01*FY9tAiewXvr!#+jP2wTOO9))H?-4-vynx#Yd7Y`6d^U7a( zhn+S8-SuOYv7oM^640;O4fSv13*(qw6waEs9A6Wy(Gjt-U#c71txD0uLAQc7`Ndfy zbRX0UkTAL^|ENLG5eDf;IF#;NZ&ShUDk8M(aOpy&1Svumg|0x0?ld&iIgqjT^OjH{ zU_w2zL61VNOTQ*=u3>U^0bEQiW4>l}g&8F|T5zYwDB_1e`&5t!b$+CvAtWP$Q$2I4 zaTeqs+lgbey&;Z@lfpKx;B@Fq*l%4}tYQ~f*<pQHXup8<R0wx>AzfSlxeq~g-!|dh zG$O*?I{52(@%KQae$g3}?Zd|Dk!Y-ABDt;f_RFnyd!swI`(*o?R4KTftB1#A11U8Q zH0Q1DE~gxc-fgrf{X1@Sup+SlPMm`LL5Wm@uXl=1#vcD`ex@Y#!Y(RVtx{bnOg&9i z($Sc??OO1W>ipIdVcMeDcD`R?f_CpSAHK^wLV#C8K;!6b-0%K62BaAk$CDm3rG15G z|0+Pz!Of(DR%E2Iv+(Lnvb+XoBe(JLCRQ56i)8RO#wQj4re7Dq2!BL%{!k601xyqE zjk*iiA|A@8q%sp4vJT_+nTA{7+CxA3ycMY!X#OD&OwVp0$1F?)^&4I+%WGQQqsX2U zJBUr!jqj|tA)wpFy%)zm$KfHcESxuhPE1<%u4wbdWMxbBso9u&f~)Y55BOKgQBJL1 zYQ-+vC8Yyu7ZM{+wcyjJh6Nw?mjhJ8@J{2ga7d~-x`8<mEk^B|6S-=6V&ho?5X`13 z?3XPH7L_{bvT9oSEo`dcBg|)X3ENe9H73i$eR>PPWP!D6NEaRQt+dmLY)xDq1uajl zbDe-M0duwq*KqC~h;W4>K=Wz7?XZ6R&+W!1w}(l_np8x%m-wfum$;Df9Ir8liJt5i z-W%Wy*xrUPYG2f_zvYt&d2b_yd_Po5!7=T+2V(6(WYsW(L3T~d8m_(DMM7W1V3=os zr7GK50JQ#GvF$_kbFnRoYqv5Tpmrc7^xZ#&uO?^aSFoCRS|MsnF<c+D(Ule-5zUow z5K2a+2Ukmc!z)NhpB|1KPQ?IIPW1Q0!hc&(IB5+u@2#>VI2%l{qS+Z_8RO>u95A9E z;3jABqN6aLSO1W4mw=>IQr;K|D|bNj2ZE<y?#IrzenS5R!|}c{R>tWW`<i&Fn=}?} zhSx>t={7jr*Neoqh6a0Dg%t*FF{3KC#|`Fq0BVaP%fP?4w2j3O+x_N5lVARI{39!E za{Aw@v`aoPNOc57i=(Fd$|a3s`)im_&p&ZDB96|`3$kLaubf0F3A9o+!3N{eey!qR z5($fQ{0Q~set7&H$Y+x1K66LXD1iJGTPq)pR*ai0Ml78>Rl^uD2?jKgnq*fQ4A#A$ zlULm4{4#@DBGWsQ@#szE9Y*<W{(K>|WpXb&?_~Hh&1lU3P4sts&?_;@d9KVj`)0u^ zV5x`)UTHGHw--}cO+C*i26iD;!sc|zM~VEr+Os5q3@;XRQ;anto>zb&BF@D9gXI8i zFMbRX!p>=xIA)Lgq}Ng82*3GdROK-V{wB*%_7IdH%-p!(wPM^b&?e9Dbx#pHgpja( z5)g#+W!ssq0ZI1#5OSKo>FI>E;!5-6vy7bJdlw@kxYFJBZfQ<_4e<q5TzRd6WD%-I zbL_Yea*UOr`^3rQkPhCSR9C2zHATF_S+lgGK$PzGrSFC}H{i~02B-Tq3q#b{jotHM z&y0>p&fhiRul|`r3gpQ}DFE7AC}xT6z*DdL))yENMgi2bDxpum5WFqqF25$J=kh4G z*Yr~0mkSH?oFM3scd-go4Bi6RYu|x$uE>VTqEuv}f-qxyA33C!LDFh1wu)D?Mg!M% zAe-|!l3nJzp%H+a!k}0bT&I>IR~138i<e1+Uqh%wB-TY!r^bMa+}ZS3@nvb=)L?SW z29$HiBQ3{mun~sGd=Cppabc24TA2dK9ylpo;<_@#z>QVXk%}UkOuYSIx$*IC=EZ0F zr8xv<5t|Dr{r}TulIgpq0Yk-Hi)7Z*G%XXdTzWu^ujzHvmwmWz$~hNm@)k}H=7mk& z>i65pnyS)j5FF0Tn>LzCfOzV1cXB0AjW(jx$x#<_zxWo?b(x2uqi>@yy(8LGg`6<w zy_Xd&WB@Al5G+#-jqOFr{63`qMA8dGL9gmZ73O1F$j41KuD31tC|23vcG%Q!=#Acc zNP`EecU$HPyBm7q5$`3%TFh2SQyodOQSrR=%%dTXv<7Y2UD8mlv4hfe9`O3`f#0K^ z|B$whvIq6O^6)ftSyX(j6uf%lS40K?sm}PcmeM`0U*3Ehf9Fw0dkx2qN^&_7El7Jb z%Br@<mWlxK?)B&0$%~QlESW?W)izH<M0j|uxP8D(NZE3>0ZpAjzzWsz%emB3)I(8Z zj=RIl^KLkfUh~}d+4$#Yo)(E-p^HB@*&QJyf*Kr$xm1(+MI|&ruiq-cs<WWm_S|6< z(7#3u+ip1yY7vgF4bOSvQIiFGKsB{gC7y>k85gv2=NQm`E`oex1t563MI_T07ZV|4 zRbQ$TFIkoSEAGLp&uA{mz0KS3Z`yN%z@j}VhCzd3u%iOrzlG`GRcl#6T48%%DCxs9 z(%h}*d}}9&PE(i6utXrg7}5e~_^cW%{!bj`t&EO;uaPq*D2^37(({Rqm>FWg4Y4V$ zFl1gs;wrPX`0N?lQ-fghwvP1XC>6St-{aj+%%)f*I;9}F8E8LkjJ^4&&iFI|prD5C zdC2P70&pz~c)a;u@eq)-=+uS33PL>)ePZ_iXn1K&&eZfa^#i-$SW1EOiBvH*)&Qs) zhDkU+kR*r3x$hT^{NqVk{Kd=98&1t3VVE(ISDHMPEJA!`8~d~XFUJqWeuNam%byqK zLl{_}{GuLaizJQ&RWoBZh2HzZx#{0MGmE#>ZMiv2GF*<AG9D}!#&SFM(}39_nk+*F z)7b2XP+d$^$qD4+I!so&?;&huSX{CBG)J_U5Q1qKXWfRx;kU^dE0<TJ0%+4HJvv{k zEgN!SA5wJi#xzse*GvuAFUzU`hHgN>xx{1f-7k@+bTQa{Sg*8R%tB5N`_@@BgPNaM zH{1M*D*EoFAIu&6W^-H|UCk{-C#yc7WRjH6gO=*e8Zw5;GKZWlg?U!&M3&}(91TI< zQF6}=#tyYuxF`GiH?0lue^^wn*(rhoml$3HR$mK7Q43=cpHu51L!zD_eME4?bnDxU zY8J7eW=PIl-*oytTf?wY{%rtaLlY5iUJh+d->(&)Fd~z>;V8Tv;l4;A-){TL0JQdN z4a18`$$z@bs6Ae8z|X>|USI5>*+>j|Ga?rxvt1j8dMKkkXzuYvKO$Jz#yVRbc4#Gl z^E$1+-~^EJ!l(lm-pl8`$Fgg{sgm(MRo@0Buy*60MmnOWF4;Q4&D5SqlwHja#Cgz# z@32P$2SeXNI;)B9j#_U!=tL6=k)*@lp75yxT^?Lo4O)n2B!TD9>x9F0DzQiE5+(R^ zdCJGPDT(DUua?*Mij3F_KC|ZxB)EMH^I&0-c?cFAr@nm?SY~{$Vy67D>Ub{`O@_KP z>!wFKF-mL^()FlM47Jf802nq0hz*yKuFnc6>!8dFc;QxQAE>1E_4ew2^@V9a;M#gn zs1R;SvJ3a>u$z<`(RPx=VQ$U^g~PLa_5byqV4;|Ul_bw}xf27KTTTb%&}Vsi!V_KT zBzIpY<Yb6!25ROE+5}H@0^M~?xDi|tFIoQ&hs_fE3UCU^zdqQ;7;dSPrX0>BTw2>$ z<qd#i9{(}M4+&%eY=ix6{aYfYd9WLrydH;Aic^SWXp!m#86H|8JO%Kefs8=8J6Lt* z<sD`tWnSJ2t;@xVtLu_yQP*tebGl^fxsP!WW1ziAv&Id&`7#T<gXfN96a)Ln-yoCc zrQL7GbN)#(pX2WBM4p0()n|Y<XH*9l@kGsRVq3^b>ki+8lMblqo|{f(@&r3Ji2lHc z3?8RXva{EyHB$Voi4Ds1o|hY>{S+e-G#%Rvj89Vg(TOzo+_*(tOCNE=?K6Kx*65(g zKHe@#TG{O@J!yI^XSayZ?C#^5BN>JDqO>L)Ya*k_Jtbiat%uIgN7pWcR~eK6$+Wu1 zQLOBvU8J7x^z$Pf?uI8|Ky-ass=YYUC~CYOE4IudvfvGaWq4>Rf(;Ug&NwRg&=x+5 z1EKfI1Jt}QcO{j3;aMf%Z^s6fM`lyLC;b9|xTUj)v`SYhVC+_DG4_=|wetJt^$Zk& zkY{kAWbY0DiHjrR(X-71h$1D6?m4sBqsNRJb@F5vctVKprX1X5_D`r57SG5V`5O_S z*~WPg=NglL{RS79cA%;meC&YvdS2u1Kk6$%^W$wBdd{2%n#CIs!EVfd0lc2FLSB5Z zEf$@>wDg1?TITcy#O;%al?MJbia6p)I=*kSrXG_OcJ23E$82A}1k>y?p!$<z7f7#+ z;xo_f8Kh7g#dPZgF5iZoZo&)*2XY=)`v<{AZIwi0m^285(}(?U-cX8t%UTCw#yF_f z11k4`SMNmOt4yrPbz>*EzOQ0%u>Be9NfvvI*52L0#yYnYyf;nKD$jlbi&Nu6n6P^% zgjnZ^*v`7KG(sdMUx_84vZIJWs5qZA#ci|OtF!s&Vt_#%GupNKB;I=e?t3rp=?a*? zh{1wwD6hf`iG#Y5%c7b4xuqy-1mtGC3D4At$BVqX^BEag|I{RCWD!l-j!@L}E`3bJ zh;h11d$%jj{g!(A9AD_$(E32Cc4=~_m3+`fE>i+`+v-)(bz9-_xfCBbDcLe&hc@83 zmGbF{W-QbqCqdA~NigsW;=>W5G}*}t93DNPe7C8}QALDfx*je&6KF$(IrL1AJ;f4O z%kaib$7h2A5C9no+PCENOa3I!b~D2m7}>aAqy*T%c}oEU{CdTkAE4I8BN=9iQ9L|( z8~Ng(7rCmALWj8_|CHE7Zau_ggS%qge%mpz-b9tAd}Xtp6advdT<o@&)Fv+lAg%aG zI^8E>3ns~%A2j-$2vlOs4V#<4W5Vx%@X6jw+sFyqF#vg1RbEYr;Bd#SlqZR?DFD&@ zcLz!;lrHMF?T;-Y{J>Hi5$#IFY?XTvQT?BrXM1gvds1}EuEYSiJnSVYCrZiRbp+ZS z2#oBbCN9*ygp@7s*{2m63A&ce`xcS4c6O|o;*n+mH3A}XepHO^phZ3=2jviOG*FdI zzZW5f5@~0lIut5!C{sl~x5=GP@OX`_Y-xrYgOQd<VE=S9jjIni4=sdA+)eRg$Ox^= zA&9rNg*+*h_`Czv&D>g4M5=oRWD-|Uo{k@QL#Huw3)!VLbFO;Lr3{iC){d(E2Ee<x z_A@BQ;r#$<YOPYc)^3TPpEjH2%5s_|{i9PxlTy5i>Oi?)$IUrf-`6*)-=tF5u`njF ztw<-hjo|_I^MzK4EE>Wf>;WuuAM~%KQ{mPbBd$Blq(>?^R3X6C!|wl~ALaIxd&Pgs zzDV`p|Kv9P=BpBeXfgv|1OfYFF?154X2epygg^a>y`=6A0fm&$fh?f*+4msb(~j+L zW-Q!bs1e8f)wuYTH9ED+_=qFfz88{c?}={&^d9vDAs|pDXk;Wj=)1)&b9Q2SvzB&^ zOzxCf#-Ds>+3#iV%Jzg)o8t66N!%>Yv`ASep6)-vDUuUSS(iYNZeq-NbKmWEO1SQG z08CrZRU!3lyKL7#1b%3@GDecKRmb+^NfiqbW|Let46IA8wl_nR*jC40TpJP1-1T|J zO=!l-uM@!{RuFF+Zx({41v!`QACWG}HskHfoq<8>UU&x&&sn3C56N4R{*vKBW-W|E zr&|7D534uf?}r!>9{L#P&|tgFR;06SlNW4>zR%dsZ)W@e=$FMCG;@B*kEJDw!~Nw5 z`{r(<Ag4&7&8Ts}o-u*8z7lzcK`Z;l!4c=Yi)&3s!6Ac;ca@MPjf|W&J~QDykNkmH zh85Ns50;ZoeRcruhj89O;`Px6PkS}};uHVbrr@}-V{Nxe_xlF{H<@1w+-=WYf1m{f zOzTXMS!Rpe({TRxfletE$?zne<(^PB846`dTgyhaR=Cwk>eUH`L-J(bqF5&6>9c-L ztmEipdH;J7s9IsYkm%KjJiLo16yfd81&=%si{9v>F4_-MJ69O`lRHy$E$wO)<&$*Q zi6JQnRjp!GzGfU0Q+|;Pvsa@XbU!w=hFXDh-HThr=OadGZ)OVkAxQkHgY*;-iq0pY z=F}t0ciVsfp>zrW01tWCZ&9crSw4~N>dk!=DS@pi62KswoCP<GF{<C=p~Wk~7YZlV z%*{FDE@k0&F`|0e)PR~Lh6^dP9X}ESTy)6GLGOu~_U;gf<qW;*)A40vs-$0HpCHGx zn>vI<n*SP^d%;p~l2m+oH~=$+0000IqJjo70)POJPQ?HKmvkpavVp42g)<Kt<Y=&4 z5gtUL+mPub@of5}XA$KvW?_st%tlSsgNZ=&$^(hF6Uv%lTVtOI1&1UqxrQ<18InU@ zrYunTAFtL`vMg}~J9-l*WQCSlS~va$NNB(cXY|waqmWnVKfV*Teg=%?i<(T`)pcA% ziLZsfFN9+&g%MY~v^8gUV2$vV7J?_t<b^Ni6*%Xjm*F>JY>(xLRwV;qzBlVFN(zS~ z=B#KZk&cnRtHTMs&6nqI95w>JW|p}K8G6eP9~&bo(&&{+$k2~wBNvWEOslO`eTezl zyR>yAhjE2wN!UpZ9dWU3G?ib@)>RXy1kG7O@UH<qE$vf@It7#~Ti<yAu}&!ZHM!-M z4qAsYc=jCSCV4HiOV%pO6OLV>*`(3L9!jPz*gR8vVi!^I!gEsoLU=9Dd$GSewenI1 z4Bg4ErBK3&fS}SqX09{CKS|q=63S?RnyRT#2=Gz954dC{2oOKV5)-iKkhNbyXP1om zxNqw=LOd(WcpaBP3;rOzt3_$O%CkD?oS+q?%DT;Kq!wBcADcFDd5N7f+>7h=_^Kpq zg={yEYMux?GGjV-!Q1+Q81G@R;mpO)umD|02R|JL*;E9(yUw~;>h9cXPjw@u&>~eB zVxSPm)+6lO7iolC&9j(OMa|bD4XdHgng+?*yb=y9zx=)0U6tk?4Cvd1b#!DzsoHmw zx^Zl!MCIO-DN1|}&rR{!*?hg~AGPfgwiFk`8qunnNO=cgAs->w2!>`yB&+;SE^ma~ zmAmYd1kl*J+{DI`7968OS1<_}gnF`?=W77CYzo4QoBh5!@{;Dy6iB92lEaER?S^i{ zS?C%Sw|A1sNEP)l^Ib3onMon)zQq0pZ-7)%W)IO~CAdmbUoFxssO;nJ`ck!NZ}76N zT!V0?7p^k!FPZP(g=C$oswu+^nRNZ9Pu^uy_>b}%&o=JLs?_)9UA=_fwL%-bhxj<< zzE_66C=5&0+gmP=u}CIpBUTO3zQ+i{E92_?JlkSE@38|iS^%=j@i)DjE`7gw%kM0T zx%o@mCs9}1x5`+Phg-X&0$cec|JfRJRQKl9#~sZOq{5t>_z$YGIwYhuSz`1rH2%zm zuvD&`ebgM1YjY2M4|v!~7}o@O7yPDi`dvAC8%zi`NF0oaHAOnf73+fL3;K+egq^q> z`7rgPq5^uJ$UIjrfVdnZQ`bkZbkdKYS49J{y4|+MFO-+?fT(8(Ml$3Wu7c_yD$)&i z`fzMFBvd;l;8s5ya5EBxQQTnC+^w;~WTwd0o<~F5vr(pzGT3uV(oFAv-gynHBuL$0 z=0OCL`A(Fa07WJ<e3K-Ior>A}-IanBiZU<icp?>_Td-)|)9nmOoA~;9V_fFl>~eg4 z#P}Q07ad1X{BTJ`3JIi?Ze8`Ihcxa0%*AJOM#E`UEXaOp?L<~<s*lO9hFcIa5uOkx z*)?gnKvpQozpOEg$g8B?$m0oaQ&QpOUugWkJy}LuvzpfFMq&T}2P9s1<;^mcf-TBF zAG{$Z?6c9s&q=doTouEa5oY2hqrC5*11ztNE2RaiDQTi^2)|d~08CV*h_*7)$_o=A z-b}ho4y8)tbU3pTneuBwdn0i|TFv?APL6(H&Gs+U-WKcn<~@MwAOajHtU-yZoWHg; zJ#I^le-t%Km*zI0#>C2x*dR;AA?|cWQ&NYN=P#HH89Vu%_S}DK8z6%<eY{&dK+@4x z7fNkVD}^s|P!Tbmf^S#Sm&+iQCIV|2iX*=hi_P7i-Qv)o<S$`Fqq-R<3xWEkB1T|v z$m8|1Hd!|<p9GozUp<E!Ut{jI*hCx)slaQ5@g45#exp{pTss^>^$1>JT?MXx;2i)+ z=ZJW7`&rj3OJ0X53Jz_@kxer7cQc<E<H5DNKYsyZ4$$NHE?qiN+ea}=B!PFr=3=5f z=|Hdu)tjuhh)Gh*6(2pj-`Egks(L%D;O&+YkxO>hUNQG{6J4~z!>drlCNw2kPQq(B z@^>}xnn|GWRXXxyS}Z@yyrk&&7Mu5*@QtvHeh6mYC`i$kgNU_*SnZc}K_=H>Nkf=k z&ej|{)>-t**4Y3T0)hrH0)POJPQ?HKTRIXUjdISsD+-T|h3&cSkaN@UuBV9fWBxRs zjIo}rU(+GImu4VQ<Pk5Y4Hf`?Dpirq%QOH00005}m$#64T$xip%ji3fDzhYrUQkf% z=q9xxH;bGVIRJj=9rE)37ytkU9xVs?X^;v={0XF+6iD6hF5;B^r8+h(wrmTf3NewN zdklM@rW%P3y|~NFg3=9>%9t9>7;Uepc4%T__hyz;xKKdGAW#4j3EGdDvgzvOgm=?y zsKQd7l+Y;P_1feh?&wiXz!ng=Weg1!=zKzB`;Usq_ek0;SHD6q57d3;<c6S-4x)sS zijlk8rr2v|k;}be@XHyIgFv^z)RE-psOuJ%{+YuugL9V3!B|7ic+C9Fga~V3RCX`Z zE4bL|9?*GF0q%c-{Z~rE)i%>q*#!VLSr2KEjOsTQWDFNnXcQ9)`of)PwV#;7(JMQ+ zI<0y8<xn2C7=V5nNqEkQ%2ITO%;3V`NNerZ;-S5vXY`{kZ@ineTP`JLkq!nSeJf2E zcUrIE6=6^ao7%YOJGe}R>Qx1Dp+>D1%0x5R<*lMQort!3cTq6!V(M4#Rho~l;nn$@ zE}gJ4I+(JmxnuvP1@|b=&m(S}i;fv&D^xSVFY`|;>*vlc8F0?DLiW|!(3?Bjrr2v| zm5IEmgEDe=Wq@EfWoXC3OJCU{H8D-|Qf){8?*Y&E{h`T0&Tq8fAY8N9c`^oxksWDC zvq<QnP^<EWi>(c0@)GIG+{)#+RMv*`+u8W-ZC2~DT|QkAVYjxmI!k(02cKqG1W*`^ z09t5r2+$J63maddRv&ZH?^)B#S^Nt4&yO6*h&_P=9`*FEB_V@E3+v^M3Rm{JpXks+ z9-ymTYg>@QX~evFt&tNm2^OoLlAkE?<c8T<q>$zCb}dNF`GC14P!wJJsph2O==Jp{ ziCZKKQ=&#|7cBa=QpRSqRB_{byE+R^7C&6~WZ$AOL?-}u@Th*hSEV5M(?Yz_Q4ap* z7RCuaZPp;)4){a7xKA8-zw``UhaOSc1VS@B(K2Sqk}jUK{e7eGh?X%z$!Su@ggQA$ z)~EAHAu<eBS_5Gu0=PF-xkv<f>~gdz7T-DA?VeEKRZ+}9<*eX%oU@~ahQo7cshwte zMmSKq3G7EzLy0_WZ=wqsA5Rmm9#Dlmzyl=Xfx}{+D(hL)hF|Yo{xN<<keo_#`jFDN zPw+><Q`}2F_eiNfBReP(>TPg}WKeF`;(Z8q+CHzeM8&TaQG4I`NHfCU$}>X<Z}^|& z3bVzG&>rel7hzCVIRL<z9{u}xW`uBmH4>FJZ$B)&=ZI{M$sLd>4&eggZ_s)2Kf(a7 z8cWcZjl4$Ho%s)RSBi9FGLeWGrWr1hdSpdEa)OQZ$5cWeNI-QB7W8I$oy3dVzgHFR zq}?lAD*|8-<u9mCBWM9<-77V5EGC!2cKrW#7Hr*o(DF;X<L@jNm^?QuH9n44hl*cF zWaj!G<<9#+t>7G`blY0wY$+Pu?EA~1DNSC5oN?l`9{bdfWlr6R{0|g5=Z?O^tpzj} z;`eHw7ZRin7L9&A2<B#Lg0uKOZzEUwuhv!7k2CmiMg0Xiir2hq8*DS23dGHop+^aA zwHmk~JsM??2boJmOKK>)3{_Z*DDpplg`E0g!(41n89=nMD{e-}*Z?D40)PNw%``$= z_6Z`1!hVi7v;nt4mAI{K3(x>eqz>(U50ODZi^lQ?%MJOIC)H`?(zs!g`NbG;(1n;0 zR&HM5G5JQ=_&4atr}fX5AwsHQhV<5F?x!q8JkYXwqxjG-cJH|#1omrKb1>YbcFKtJ z#)E|_kelyvk=Emn*djve)c&>4d5tSXN0^yg1%$7#RIt403q^PE6D$;Vgiw8Xa9?VO zQv^Y~Q>X&^z|50o`m`7s51+i<iO?sy?xDAplW3SPCW}OI01z=hn_r7UAH@H-MuH2h z9{juwTuNjrwk|?I)B=sRyLp3!lNJ19oTb2hssMABa|lEQKoIl>kqLgBi5Dz#4jl#M zG-X%-MK}ge;#DrFKDXuAAD}`RW_cR+!(18kA6{>v8eh(-G9>fS10{%8y1YU34Pw3- zzl8x2O|jXLQhR143V^$_{E4q2|4F29jZ4x4I>wp=?=|!i6mu&o+C~?Scj63k8xl-% zZ@iR5kAt`A`cta|c|x#Fp8^EZbcn~HZ0;>WH|rFHQ&8_>$I#fUN(&$_|4y=a|5X!k zhZ_6I>;MAbPyhe|=ukk$AW#4j3D}?j67GWg4&UKfia;+FB&DlpCteecN||3Kg!PWG z|5`?p(!uBJO>IQ)50t-E-kgY|%_(H<q#J{~-R`k~uhYP+Zx;L(M0C3wS=klpteI9z z{^}eh;~2{g)`8W5oEPFap=u!jL{%!>f1cSmq}>LeR7wOoAamMFfpjzUdQHqY6yL^s zE9Ob#v;H$z9WiqT2?e^4g5cYxKPX);iy}=O4YP@J=ZjF(0I~*swt2}lqT-dlK;g7- zH)Fh8b&y>^4{sVl4!jY!s>8y~2kkWFff;|teI>;rhqH?S0q`sB`+WeK@>bB9PIcEF zm2@kb=byxHVUzF(((Hc&5&RSY6b#c*U&WhS#q4kSg9qv)C_iDxl89|hJx4;tD%Pro zHE(!XkGyIh$BPdqSB$D~X1PLxu(2ziCJ0w0_eJ36r!+GAq5;u1)8E^g(LjfCogNWd zUhdh2;7#!s|I()#8lj-%4RQlTdI8bfV9dT{U%cnwC0U+@{~iyi6E+fDcI54=jac2} zDt$b2lc)d?N91}N-JwPG#>0!kZ~NMdXDrCI24yXe2PzFf0MWt>|HyswW`C-u_G~lD zG2HpbXa^pFMJzQF*@G@^>;@xYsCoSQGX4W=dz{U+ZE|ehMq0f$o?M>t1Zigonpw^& zb*X_An<FhoD|<|qA%|id&f7?L4@jsQ>&13FTK2+eJHUZWw3%27^9`7x*TE3nJ3(v2 zb_gp^<=qNzq>R-Bs)3DTjUDyGb3zOvY!t~;OOgHCv+8R8Umc@_c(BsDh_}#pLDsI* zC+LXsG%RwHL2UJXsa1{{)vhx!B4}0NS`HnnK@|$OnqYfV3eWD50ChH{ApC(VXscTt z>9N$aa)4?^mp2(==P$2@lw+(C^Su{)Zt%89iI=h+jE~Uha54=o3h#{bj|=<C*dU3U zvD@-qzt`C4L2*8w7A0zD#=YGJ<8O#20DE-efD#tkb1I=-K4%r#eZFgwKtb{HR?3>_ zYWc-)|AM>x!L+m%7~jsOgC|k9?rNVFzHLrngyz<?q>ZcE0Vi#y@Jn5k<ntA;xr~7c zgkiK90Qila_>xx)4C==g@ZqICZJULps3d-)1MF=Fei_db^o~h+RDo8Q6O9_6n42rb z6nFM%%0dJqin3syBjUra6#6+^R*i4Q1_eULAxiDRuuRV&6ftrvjDKk2lZYc-jZMz; zHBFkoSm<D_rTI|>;<oc#TBu!iMmAplcu^ddWqN^Q{_mn848H_Rxkh>g{h}0M>k$9| zES~AKneF(;88Zj{79dkeHV<~k^ZqIgQFyM2n7%7@*L`On51RO9K`c{Qe>2H~t3^p- z&^DPL?z2>pn32{=Lb~d+?$@rB5^S1jj(fYX;j=Hk2rIHB3XG_rhKOm(JHwi{3cyoL zRxb=cSc=6x&g5X0a64dNpc$G#55a>au=BTCQNEqEq=u5hv)nocs0Zz}K8*iG=X8k* zag`2Iw(Ibw#1QJ107)4pEo$=Lei#So-D_tuim5G2+{q6HGj>`H#EI^R%EqG6Y}+qV zVsd%g*kH%1tDAv&(+X5F?K20$=tbG|AIDWI5UpjJ&Uy<Rk_NjneX}1J4AQ3rRZK)u zzLQOwkBqwr-V@}08OQd9PuwZTBi2a(+<jIM*Qo127Qd3R8&iw@9KinJSlbsTL*c4# zC@a!JZBzTx>sY)25|iOVP)0vRms4Z$zi%9GPY1Zj0@h02dGT-x8Li==ZI`Wl5Gz@! zFRV*S1L2qrHOJm)2Dzx{SuR3pv#SriQ@_}jQWjhaX$1b^WKZQbzR5665Bf`sCgmd? z;V~JtY*mM;Kj*!<tsBsj**i&z4{x2%gwHZDIB1`CmzEye^sQxeiU8ttiy^2?OPthm z**5g+1S351oY%@|jT~^2bHQZiXGhOK4lM+y$yOZcGA8=^)PU7dZVsp^PFVk@4`@@4 z<#gj5$3SNqk#c6C&&gi;9qr^*o%0Ai`#A}QUg>*Y{Nl+7yhQTqUO?SX74i`CmYBFu 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 S0Nx^vfpvKR000000000BsttSq literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/moderation/approvals-queue.webp b/apps/web/content/docs/dev/moderation/approvals-queue.webp new file mode 100644 index 0000000000000000000000000000000000000000..42ad3acb793bba98bb910e4cfcfc7542d21ae459 GIT binary patch literal 54554 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℘qLh*R6cpqZ{au7T-dr<32i_T6PQ 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 E<F*nTs&aWfAAvZ~oey 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%0Amdoq1t1YezTSx?*ssb`*}Ik8s$p3n;dvC6Vq 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 M1X)Z#tJA>%0AQ0q0{{R3 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/moderation/configure-moderators.mdx b/apps/web/content/docs/dev/moderation/configure-moderators.mdx index 5f6bbc8c41..a829fa2ff9 100644 --- a/apps/web/content/docs/dev/moderation/configure-moderators.mdx +++ b/apps/web/content/docs/dev/moderation/configure-moderators.mdx @@ -8,7 +8,7 @@ import { ImgDocs } from "@/components/fumadocs/img"; import scopeEditor from "./moderation-scope-editor.webp"; import scopeDialog from "./moderation-scope-dialog.webp"; -You set up moderators on the same AdminCP screen as every other staff permission. This guide makes a user a moderator who handles blog reports everywhere and example article reports only in some categories. +You set up moderators on the same AdminCP screen as every other staff permission. This guide makes a user a moderator who handles blog reports everywhere and newsroom story reports only in some categories. ## Before you begin @@ -38,20 +38,20 @@ A permission that depends on another one stays locked until its dependency is ti ### Choose where a scoped permission applies -A scoped permission shows its scope under the checkbox: **All resources**, or the number of selected resources. Here the example plugin's **View reports** covers two categories and the management permission covers one: +A scoped permission shows its scope under the checkbox: **All resources**, or the number of selected resources. Here the newsroom plugin's **View reports** covers two categories and the management permission covers one: <ImgDocs withoutBackground className="*:max-w-full" src={scopeEditor} - alt="Edit permissions for SectionMod with the example plugin selected and the Articles module open. View reports shows 2 selected and Claim, assign, annotate and resolve reports shows 1 selected, each with a Change button" + alt="Edit permissions for Grace Hopper with the Newsroom plugin selected and its Stories module open. View reports shows 2 selected and Claim, assign, annotate and resolve reports shows 1 selected, each with a Change button" /> Choose **Change** to open the picker. **All resources** includes resources created later. **Selected resources** lists the family's resources with a search box, loading more on demand: <ImgDocs src={scopeDialog} - alt="Where can they View reports dialog with Selected resources chosen, Announcements and Help desk selected, a Search Categories box, and Cancel and Apply buttons" + alt="Where can they View reports dialog with Selected resources chosen, Local news and Culture selected, a Search Categories box, and Cancel and Apply buttons" /> Tick **Apply to every scoped permission in this module** to copy the same scope to the module's other scoped permissions. Each permission still saves its own scope, so you can narrow one afterwards. @@ -70,7 +70,7 @@ Choose **Save changes**. The moderator's permissions apply on their next request ## Check the result -Sign in as the moderator. The user menu now has a **Moderator CP** link to `/modcp/reports`, and the reports board shows blog reports plus example article reports from the two selected categories only. See [Process reports](/docs/dev/moderation/process-reports). +Sign in as the moderator. The user menu now has a **Moderator CP** link to `/modcp/reports`, and the reports board shows blog reports plus newsroom story reports from the two selected categories only. See [Process reports](/docs/dev/moderation/process-reports). ## When saving is refused diff --git a/apps/web/content/docs/dev/moderation/enable-reports.mdx b/apps/web/content/docs/dev/moderation/enable-reports.mdx index fbcfbbd30d..30988b015d 100644 --- a/apps/web/content/docs/dev/moderation/enable-reports.mdx +++ b/apps/web/content/docs/dev/moderation/enable-reports.mdx @@ -8,9 +8,11 @@ Readers report content with a **Report** button, and every report lands in the m | What readers report | Guide | | ------------------------------------------- | --------------------------------------------------------------------------------------- | -| Records of a Content Engine content type | [Report content](/docs/content-engine/reports): the `reports` option and `ReportButton` | +| Records of a Content Engine content type | [Reports](/docs/content-engine/reports): the `reports` option and `ReportButton` | | Anything else your plugin stores | [Custom report targets](/docs/dev/moderation/reference#custom-report-targets) with `defineReportTarget` | +For a content type, the switch is one line, `reports: true` on its definition. The Reports guide then adds the button and follows a report to the ModCP. Turning reports on grants nothing by itself, so nobody sees a report until a moderator holds `can_view_reports`. + Then set up the people who handle the reports: 1. [Manage report reasons](/docs/dev/moderation/manage-report-reasons) to choose what readers can pick. diff --git a/apps/web/content/docs/dev/moderation/moderation-scope-dialog.webp b/apps/web/content/docs/dev/moderation/moderation-scope-dialog.webp index 586b90efaa639e9a2cdc6219f52234b8566f5a20..3da33a72c0fcab4b02b3ee8c7b11d1286047a9bf 100644 GIT binary patch literal 44470 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 Mum9c=$Dv>V0L&lvNdN!< literal 46786 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%0DikT7EuZ$bK90OP=S@0Di8PO26Qq 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 AfB*mh diff --git a/apps/web/content/docs/dev/moderation/moderation-scope-editor.webp b/apps/web/content/docs/dev/moderation/moderation-scope-editor.webp index e3a0aaf48f04a5eb7016758ff4a2a7082a27ce35..f442dc25cf88cc004d7b43ef566b834c1eae2cfc 100644 GIT binary patch literal 90528 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Ǖhinx0lAD@Pz8OGvDyau1hD8&R(9iO<rO6gxG9| z<zdrYLkDaC002B+GReH1n@e1|GS9LB(I0<*#b9BZ%J$-TD?W|&BtbC900IWQDE>^G zR>DZ!QO<X3)74xu0T#~Q^{vew+z!#f!{H2pDmKKM<{<ncmj}xDqUstG+OB3W4j~-w z)(V0P|H`tlAv4{64%`sHuMzWewuorp$3w&(@4P#H-O^cZIj^84aNFf5+Z((n->ZBl zWzXZFF+pi&aEA10=(awOfB*mjv=CNmfAKSBh?ZKOpWqW2j6;RPm2kh929k%cEQkNd zn4n_zznL3ni6xhA@-T?$ma_xmOZ^Yu^gf8G#w=D*+u+Me8Pl)oLN%ynYV`xAO>9FC zRLB*Tgmk+@Gk7XCa4|8JT%uwZ3Cot1GpfK+2TE1{y<YAk#S(mw4uy_z`8m5!hm=Io k9u*SRjm9O8H}2HRy9!VM0000K#<~j#13NqUD?k7M022v<^Z)<= literal 77274 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 diff --git a/apps/web/content/docs/dev/moderation/process-reports.mdx b/apps/web/content/docs/dev/moderation/process-reports.mdx index 100af5ec6c..44a3d501c1 100644 --- a/apps/web/content/docs/dev/moderation/process-reports.mdx +++ b/apps/web/content/docs/dev/moderation/process-reports.mdx @@ -12,7 +12,7 @@ The **Moderator CP** at `/modcp/reports` is where moderators work through report ## Before you begin -You need a moderator entry with `can_view_reports` for the content type, and `can_manage_reports` to change anything. Hiding needs `can_hide`. See [Configure moderators](/docs/dev/moderation/configure-moderators). +You need a moderator entry with `can_view_reports` for the content type, and `can_manage_reports` to change anything. Hiding and restoring content needs `can_hide` (which depends on `can_view_hidden`) plus `can_manage_reports`, because the action is recorded in the report. See [Configure moderators](/docs/dev/moderation/configure-moderators). <Steps> diff --git a/apps/web/content/docs/dev/moderation/reference.mdx b/apps/web/content/docs/dev/moderation/reference.mdx index cda1f937a6..c31ff51a26 100644 --- a/apps/web/content/docs/dev/moderation/reference.mdx +++ b/apps/web/content/docs/dev/moderation/reference.mdx @@ -34,15 +34,15 @@ Added to the content type's `permissionModule` in the **moderator** catalog, unl Content actions also need `can_manage_reports`, because they are recorded in the report. -[Public write](/docs/content-engine/public-write-api#moderator-permission) adds `can_edit` to the same module. In a container collection with [publishing policies](/docs/content-engine/container-policies), `can_edit` and `can_approve` are scoped by the collection's family, whose id is the container definition id and whose resources are container ids and `"{id}:tree"` subtrees. See [Container-scoped permissions](/docs/dev/moderation/scoped-permissions#container-scoped-permissions). Generated entries merge with the report permissions; only a module the plugin declares itself in `permissionStaff.moderator` is left as declared. +[Write API](/docs/content-engine/public-write-api#moderator-permission) adds `can_edit` to the same module. In a container collection with [publishing policies](/docs/content-engine/container-policies), `can_edit` and `can_approve` are scoped by the collection's family, whose id is the container definition id and whose resources are container ids and `"{id}:tree"` subtrees. See [Container-scoped permissions](/docs/dev/moderation/scoped-permissions#container-scoped-permissions). Generated entries merge with the report permissions; only a module the plugin declares itself in `permissionStaff.moderator` is left as declared. ## Scoped grants A stored grant is `{ plugin, module, permission, scope? }`. `scope` is one of: ```ts -{ family: "example.category", mode: "all" } -{ family: "example.category", mode: "selected", ids: ["1", "2"] } +{ family: "newsroom.category", mode: "all" } +{ family: "newsroom.category", mode: "selected", ids: ["1", "2"] } ``` Declare a scoped permission with `{ permission, dependsOn?, scope: "family.id" }` in `permissionStaff.moderator`. Admin permissions cannot be scoped. Resource ids match `/^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$/`. diff --git a/apps/web/content/docs/dev/moderation/review-approvals.mdx b/apps/web/content/docs/dev/moderation/review-approvals.mdx index 603890ec62..fbb356b036 100644 --- a/apps/web/content/docs/dev/moderation/review-approvals.mdx +++ b/apps/web/content/docs/dev/moderation/review-approvals.mdx @@ -4,6 +4,10 @@ description: Approve or reject new content and edits waiting in the VitNode Mode icon: ClipboardCheck --- +import { ImgDocs } from "@/components/fumadocs/img"; +import approvalsQueue from "./approvals-queue.webp"; +import approvalDetail from "./approval-detail.webp"; + When a container's [publishing policy](/docs/content-engine/container-policies) asks for approval, new content and edits from members do not go live straight away. They wait in the **Approvals** queue of the Moderator CP at `/modcp/approvals` until a moderator says yes or no. [Approvals](/docs/content-engine/approvals) explains what is stored meanwhile and what authors see. ## Before you begin @@ -18,7 +22,12 @@ You need a moderator entry with `can_approve` for the content type, in a scope t Choose **Moderator CP** in the user menu, then **Approvals**. The number next to it counts what is still pending. -{/* Image prompt: Moderator CP approvals queue with status tabs (Pending, Approved, Rejected, Replaced, Cancelled), Type and Location filters, and a list of submissions showing the author avatar, a New or Edit badge, the content type, the title, the location and the date */} +<ImgDocs + withoutBackground + className="*:max-w-full" + src={approvalsQueue} + alt="The Moderator CP Approvals queue with Pending, Approved, Rejected, Replaced and Cancelled tabs, Type and Location filters, and two pending new topics by Ada Lovelace in General" +/> Each row shows who sent it, whether it is **New** content or an **Edit** of something already live, the content type (a topic or a comment, for example), where it lives and when it arrived. @@ -37,6 +46,13 @@ Open a row. For **New** content you see every proposed field. For an **Edit** yo **History** lists earlier submissions for the same content, with their outcomes and reasons. **View live** opens published content in a new tab when its content type has a page address (`search.pathTemplate`). +<ImgDocs + withoutBackground + className="*:max-w-full" + src={approvalDetail} + alt="A pending submission in the Moderator CP: the proposed title and message, its history, Approve and Reject buttons, and details with the author, type, location, kind and status" +/> + </Step> <Step> diff --git a/apps/web/content/docs/dev/moderation/scoped-permissions.mdx b/apps/web/content/docs/dev/moderation/scoped-permissions.mdx index f2f0ec9fd0..f73faad5ea 100644 --- a/apps/web/content/docs/dev/moderation/scoped-permissions.mdx +++ b/apps/web/content/docs/dev/moderation/scoped-permissions.mdx @@ -4,7 +4,7 @@ description: Limit VitNode moderator permissions to selected resources, such as icon: ListChecks --- -A scoped moderator permission applies to every resource of a **scope family**, or only to the resources an administrator picks. "View reports in every section" and "hide topics only in section B" are two grants of scoped permissions. This guide uses the example plugin, whose article reports are scoped by category. +A scoped moderator permission applies to every resource of a **scope family**, or only to the resources an administrator picks. "View reports in every section" and "hide topics only in section B" are two grants of scoped permissions. This guide uses the newsroom plugin, whose story reports are scoped by category. ## Before you begin @@ -18,29 +18,30 @@ Scopes build on [staff permissions](/docs/dev/working-with-users/staff-permissio A scope family tells the AdminCP which resources exist. Create it on the server with `defineModerationScope`: -```ts title="plugins/example/src/api/lib/moderation.ts" +```ts title="plugins/newsroom/src/api/lib/moderation.ts" import { defineModerationScope } from "@vitnode/core/api/moderation"; import { and, asc, gt, ilike, inArray } from "drizzle-orm"; -import { example_categories } from "@/database/categories"; +import { newsroom_categories } from "@/database/categories"; -export const exampleCategoryScope = defineModerationScope({ - id: "example.category", - label: "@vitnode/example.moderation.category.label", - description: "@vitnode/example.moderation.category.desc", +export const categoryModerationScope = defineModerationScope({ + id: "newsroom.category", + label: "newsroom.moderation.category.label", + description: "newsroom.moderation.category.desc", list: async (c, { cursor, limit, search }) => { const rows = await c .get("db") - .select({ id: example_categories.id, name: example_categories.name }) - .from(example_categories) + .select({ id: newsroom_categories.id, name: newsroom_categories.name }) + .from(newsroom_categories) .where( and( - cursor ? gt(example_categories.id, Number(cursor)) : undefined, - search ? ilike(example_categories.name, `%${search}%`) : undefined, + cursor ? gt(newsroom_categories.id, Number(cursor)) : undefined, + search ? ilike(newsroom_categories.name, `%${search}%`) : undefined, ), ) - .orderBy(asc(example_categories.id)) + .orderBy(asc(newsroom_categories.id)) .limit(limit + 1); + const page = rows.slice(0, limit); return { @@ -54,9 +55,9 @@ export const exampleCategoryScope = defineModerationScope({ const rows = await c .get("db") - .select({ id: example_categories.id, name: example_categories.name }) - .from(example_categories) - .where(inArray(example_categories.id, numeric)); + .select({ id: newsroom_categories.id, name: newsroom_categories.name }) + .from(newsroom_categories) + .where(inArray(newsroom_categories.id, numeric)); return rows.map(row => ({ id: String(row.id), label: row.name })); }, @@ -73,21 +74,21 @@ export const exampleCategoryScope = defineModerationScope({ Pass the family to `buildApiPlugin`, and translate its label: -```ts title="plugins/example/src/config.api.ts" +```ts title="plugins/newsroom/src/config.api.ts" buildApiPlugin({ manifest, - moderation: { scopes: [exampleCategoryScope] }, // [!code ++] + moderation: { scopes: [categoryModerationScope] }, // [!code ++] modules: [/* ... */], }); ``` -```json title="plugins/example/src/locales/en.json" +```json title="plugins/newsroom/src/locales/en.json" { - "@vitnode/example": { + "newsroom": { "moderation": { "category": { "label": "Categories", - "desc": "Limit this permission to articles in some categories." + "desc": "Limit this permission to stories in some categories." } } } @@ -104,14 +105,14 @@ Family ids are global. Two plugins registering the same id, or a permission nami On the server-side model, name the base-table column that holds the resource id: -```ts title="plugins/example/src/database/articles.ts" -export const articleContent = createContentModel(articleContentType, { - references: { category: () => example_categories.id }, - moderationScope: { column: "category", family: "example.category" }, // [!code ++] +```ts title="plugins/newsroom/src/database/stories.ts (excerpt)" +export const storyContent = createContentModel(storyContentType, { + references: { category: () => newsroom_categories.id }, + moderationScope: { column: "category", family: "newsroom.category" }, // [!code ++] }); ``` -The report permissions of `example.article` are now scoped by `example.category`. The server reads the column itself, so a client can never claim a record is in another category. The definition in `content/article.ts` stays browser-safe, without callbacks. +The report permissions of `newsroom.story` are now scoped by `newsroom.category`. The server reads the column itself, so a client can never claim a record is in another category. The definition in `content/story.ts` stays browser-safe, without callbacks. </Step> @@ -119,7 +120,7 @@ The report permissions of `example.article` are now scoped by `example.category` ## Check the result -Save the file while `pnpm dev` runs. Open **AdminCP → Staff → Moderators**, edit a moderator and select the example plugin. **View reports** and **Claim, assign, annotate and resolve reports** now show a scope under the checkbox, and **Change** opens the category picker. See [Configure moderators](/docs/dev/moderation/configure-moderators). +Save the file while `pnpm dev` runs. Open **AdminCP → Staff → Moderators**, edit a moderator and select the **Newsroom** plugin. **View reports** and **Claim, assign, annotate and resolve reports** now show a scope under the checkbox, and **Change** opens the category picker. See [Configure moderators](/docs/dev/moderation/configure-moderators). ## Container-scoped permissions @@ -178,12 +179,15 @@ When a plugin later makes an existing permission scoped, grants saved before tha Pass the resource when you check a scoped permission: ```ts +import { checkStaffPermission } from "@vitnode/core/api/lib/check-staff-permission"; + +// inside a route handler, where `c` is the Hono context const allowed = await checkStaffPermission(c, { type: "moderator", - plugin: "@vitnode/example", - module: "article", + plugin: "newsroom", + module: "story", permission: "can_view_reports", - resource: { family: "example.category", id: "2" }, + resource: { family: "newsroom.category", id: "2" }, }); ``` diff --git a/apps/web/content/docs/dev/navigation.mdx b/apps/web/content/docs/dev/navigation.mdx index 33f61f29be..230ff1a23b 100644 --- a/apps/web/content/docs/dev/navigation.mdx +++ b/apps/web/content/docs/dev/navigation.mdx @@ -1,5 +1,5 @@ --- -title: Main Navigation +title: Main navigation description: Define the header menu, its dropdowns and the phone bottom bar in vitnode.config.ts, with translated labels and a lucide icon per link. icon: PanelTop --- @@ -16,23 +16,28 @@ table, no API call and no AdminCP screen behind them, so the menu renders with the page, even on a [prerendered](/docs/dev/deployments/prerendering) one. To change it, edit the file and deploy. +A new app already ships two header links, **Discover** and **Search**, with +their labels in `src/locales/app/en.json`. The steps below group them under a +**Community** dropdown. + <Steps> <Step> ### Add the labels to your messages Menu labels are message keys, so they follow the visitor's language like the -rest of the UI. Put them in your app's locale file, under one namespace such as -`app.menu`. +rest of the UI. They live in your app's locale file, under one namespace such +as `app.menu`. Add a label for the dropdown and a description for one of its +links: ```json title="src/locales/app/en.json" { "app": { - // [!code ++:6] + // ... "menu": { - "community": "Community", + "community": "Community", // [!code ++] "discover": "Discover", - "discover_description": "Fresh posts from every corner of the site.", + "discover_description": "Fresh posts from every corner of the site.", // [!code ++] "search": "Search" } } @@ -45,18 +50,17 @@ Add the same keys to every other language's file. For Polish, that is </Step> <Step> -### Add header links +### Check the header links -Add a `navigation.header` array to the config. Each item needs an `href` and a -`title`, which is the full message key. +The header menu is the `navigation.header` array in the config. Each item needs +an `href` and a `title`, which is the full message key. A new app has these two: ```ts title="src/vitnode.config.ts" import { buildConfig } from '@vitnode/core/vitnode.config' -import { CompassIcon, SearchIcon } from 'lucide-react' // [!code ++] +import { CompassIcon, SearchIcon } from 'lucide-react' export const vitNodeConfig = buildConfig({ // ... - // [!code ++:6] navigation: { header: [ { href: '/discover', icon: CompassIcon, title: 'app.menu.discover' }, @@ -76,7 +80,8 @@ the ones that do not fit move into a **More** dropdown at the end. Give a header item an `items` array to turn it into a dropdown. The parent opens the dropdown on hover and still follows its own `href` when clicked. Each -child can carry a `description` key, shown under its label. +child can carry a `description` key, shown under its label. Replace the two +links with one **Community** item that holds them: ```ts title="src/vitnode.config.ts" import { CompassIcon, MessagesSquareIcon, SearchIcon } from 'lucide-react' @@ -84,7 +89,7 @@ import { CompassIcon, MessagesSquareIcon, SearchIcon } from 'lucide-react' navigation: { header: [ { - href: '/forum', + href: '/discover', icon: MessagesSquareIcon, title: 'app.menu.community', items: [ @@ -107,6 +112,10 @@ navigation: { withoutBackground /> +The screenshot is the vitnode.com header, whose dropdown holds a **Browse** link +from another plugin. Yours shows **Discover** with its description and +**Search** below it. + Dropdowns are one level deep. A child has no `items` of its own, and TypeScript says so. @@ -117,7 +126,7 @@ TypeScript says so. | Name | Type | Required | Default | Description | | :--------------- | :------------------------------ | :------- | :------ | :------------------------------------------------------------ | -| `href` | `string` | Yes | - | A path on this site (`/forum`) or an `https://` address | +| `href` | `string` | Yes | - | A path on this site (`/discover`) or an `https://` address | | `title` | `string` | Yes | - | Message key of the link label, such as `app.menu.discover` | | `description` | `string` | No | - | Message key of the text under the label inside a dropdown | | `icon` | `ComponentType<{ className? }>` | No | - | Drawn before the label, for example a `lucide-react` icon | @@ -182,7 +191,9 @@ Earlier versions stored the menu in the `core_navigation` table and edited it in **AdminCP → System → Navigation**. That screen, its API routes, the `navigation` staff permission and the `navigation.*` events are gone, and a migration drops the table. Copy your items into `vitnode.config.ts` before you -run `vitnode migrate`. +apply the new migrations. The next `dev` applies them in development, and +[`vitnode db migrate`](/docs/dev/cli/database#apply-migrations) does it in +production. Plugins no longer declare menu presets: remove the `navigation` array from `buildApiPlugin()` and the `navigation` keys from the plugin's locale files. diff --git a/apps/web/content/docs/dev/notifications/access.mdx b/apps/web/content/docs/dev/notifications/access.mdx index 58f2a89101..f5513afc1c 100644 --- a/apps/web/content/docs/dev/notifications/access.mdx +++ b/apps/web/content/docs/dev/notifications/access.mdx @@ -1,5 +1,5 @@ --- -title: Limit who sees a notification +title: Limit access description: Hide VitNode notifications from members who cannot see the content, with a batched access check on the notification type and remove() when content is deleted. icon: ShieldCheck --- @@ -14,9 +14,9 @@ This guide continues the `forum.topic_reply` type from [Publish notifications](/ ### Add the access check -Add `access` to the type. It receives a batch of candidate user ids and returns the ones that may see the notification: +Add `access` to the type. It receives a batch of candidate user ids and returns the ones that may see the notification. `forum_topic_members` stands for your plugin's own membership table, with a `topicId` and a `userId` column: -```ts title="plugins/forum/src/api/lib/notifications.ts" +```ts title="plugins/acme-forum/src/api/lib/notifications.ts" import { buildNotificationType } from '@vitnode/core/api/lib/notifications/registry' import { and, eq, inArray } from 'drizzle-orm' import { z } from 'zod' @@ -54,7 +54,7 @@ Answer the whole batch with one query. A batch holds up to 500 ids by default, s When a topic is deleted, take its notifications out of every inbox. Call `remove()` in the route that deletes the topic: -```ts title="plugins/forum/src/api/modules/topics/routes/delete.route.ts" +```ts title="plugins/acme-forum/src/api/modules/topics/routes/delete.route.ts" await c.get('notifications').remove({ subject: { type: 'forum.topic', id: topic.id }, }) @@ -62,7 +62,7 @@ await c.get('notifications').remove({ `remove()` matches the `subject` you passed to `publish()`, lowers the unread counts in the same transaction and returns how many items it deleted. To remove only some members, for example after kicking them from a private topic, add `type` and `userIds`: -```ts title="plugins/forum/src/api/modules/topics/routes/kick.route.ts" +```ts title="plugins/acme-forum/src/api/modules/topics/routes/kick.route.ts" await c.get('notifications').remove({ subject: { type: 'forum.topic', id: topic.id }, type: 'forum.topic_reply', diff --git a/apps/web/content/docs/dev/notifications/admincp.mdx b/apps/web/content/docs/dev/notifications/admincp.mdx index 4f8fb1847c..53e58280c8 100644 --- a/apps/web/content/docs/dev/notifications/admincp.mdx +++ b/apps/web/content/docs/dev/notifications/admincp.mdx @@ -1,5 +1,5 @@ --- -title: Notifications in the AdminCP +title: AdminCP tools description: Manage VitNode notifications in the AdminCP. Check activity, set what members get by default per type, send a test email, and pause, cancel, mark read or delete notifications for everyone. icon: LayoutDashboard --- diff --git a/apps/web/content/docs/dev/notifications/email-and-digests.mdx b/apps/web/content/docs/dev/notifications/email-and-digests.mdx index fb293970b0..d26ff588f1 100644 --- a/apps/web/content/docs/dev/notifications/email-and-digests.mdx +++ b/apps/web/content/docs/dev/notifications/email-and-digests.mdx @@ -18,7 +18,7 @@ Configure an [email adapter](/docs/dev/email). Without one, no type offers email Add `email: true` and pick the default mode for members who never change it: -```ts title="plugins/forum/src/api/lib/notifications.ts" +```ts title="plugins/acme-forum/src/api/lib/notifications.ts" export const topicReplyNotification = buildNotificationType({ id: 'forum.topic_reply', // other options unchanged @@ -37,7 +37,7 @@ export const topicReplyNotification = buildNotificationType({ Pass a function instead of `true` when the email needs its own subject or button label: -```ts title="plugins/forum/src/api/lib/notifications.ts" +```ts title="plugins/acme-forum/src/api/lib/notifications.ts" email: ({ data, t }) => ({ subject: t('@acme/forum.notifications.topic_reply.email_subject', { title: data.topicTitle, diff --git a/apps/web/content/docs/dev/notifications/inbox-and-realtime.mdx b/apps/web/content/docs/dev/notifications/inbox-and-realtime.mdx index 363baaf71a..02f8599183 100644 --- a/apps/web/content/docs/dev/notifications/inbox-and-realtime.mdx +++ b/apps/web/content/docs/dev/notifications/inbox-and-realtime.mdx @@ -44,7 +44,7 @@ The browser receives the same `{ unread, revision }` pair from three places: `unread` is always the absolute count. `revision` increases with every change, and the browser keeps the state with the highest revision, so a slow response never undoes a newer realtime update. Messages are sent only after commit, so a rolled-back change never reaches the browser. -WebSocket messages missed while a tab was offline are not replayed. Instead, the server sends the current count as the first message on every new connection, so a reconnect catches up without an extra request. While the socket is open, the browser never calls `/state`. Without a socket, for example when the API runs inside the web app on the same origin or the connection is down, it reads `/state` every 60 seconds while the tab is visible, and right away when a tab returns after more than 30 seconds in the background. +WebSocket messages missed while a tab was offline are not replayed. Instead, the server sends the current count as the first message on every new connection, so a reconnect catches up without an extra request. While the socket is open, the browser never calls `/state`. Without a socket, for example in a single app without `webSocket: true` or while the connection is down, it reads `/state` every 60 seconds while the tab is visible, and right away when a tab returns after more than 30 seconds in the background. When the count changes, open notification lists refresh once per burst: 1 second after the last change and at most 5 seconds after the first. diff --git a/apps/web/content/docs/dev/notifications/index.mdx b/apps/web/content/docs/dev/notifications/index.mdx index 0f6b253709..dfd76c2b98 100644 --- a/apps/web/content/docs/dev/notifications/index.mdx +++ b/apps/web/content/docs/dev/notifications/index.mdx @@ -23,7 +23,7 @@ Your plugin decides who might care about something. Core decides who actually re | Declares a notification type with `buildNotificationType` | Lists the type on every member's preferences page | | Passes candidate user ids as `recipients` | Drops the actor, deleted users and members who turned the type off | | Answers "who may see this?" in `access` | Calls `access` in batches, again before email and when the inbox loads | -| Returns plain text from `present` | Strips markup, drops unsafe links and translates per recipient | +| Returns plain text from `present` | Shows it as plain text (markup is never rendered), drops unsafe links and translates per recipient | | Sends one `idempotencyKey` per real-world event | Ignores repeats, retries failed work and never delivers twice | ## Notification or toast? diff --git a/apps/web/content/docs/dev/notifications/migration-and-troubleshooting.mdx b/apps/web/content/docs/dev/notifications/migration-and-troubleshooting.mdx index 5b4f73cea4..f6cca1559c 100644 --- a/apps/web/content/docs/dev/notifications/migration-and-troubleshooting.mdx +++ b/apps/web/content/docs/dev/notifications/migration-and-troubleshooting.mdx @@ -1,5 +1,5 @@ --- -title: Move from toasts to notifications +title: From toasts description: Upgrade a VitNode install to stored notifications and replace a plugin's realtime toasts with c.get("notifications").publish(), so members see them after a reload or when they come back. icon: ArrowRightLeft --- diff --git a/apps/web/content/docs/dev/notifications/notification-types.mdx b/apps/web/content/docs/dev/notifications/notification-types.mdx index ae8c94a772..0b886c1bdf 100644 --- a/apps/web/content/docs/dev/notifications/notification-types.mdx +++ b/apps/web/content/docs/dev/notifications/notification-types.mdx @@ -162,7 +162,7 @@ Core calls `access` once per delivery batch, again before each email or digest, ## `grouping` -```ts title="plugins/forum/src/api/lib/notifications.ts" +```ts title="plugins/acme-forum/src/api/lib/notifications.ts" grouping: { windowMinutes: 60, key: ({ data }) => `topic:${data.topicId}`, @@ -171,7 +171,7 @@ grouping: { Notifications with the same type and key, for the same member, in the same window join one inbox item, such as "Alex and 4 others replied to Shipping day". Windows are fixed UTC slots: with 60 minutes, 14:00 to 14:59 is one window. The key defaults to the subject. A notification without a subject, or a `key` that returns `null`, is never grouped. Use `actors`, `actorCount` and `eventCount` in `present` to word a grouped item: -```json title="plugins/forum/src/locales/api/en.json" +```json title="plugins/acme-forum/src/locales/api/en.json" "title": "{others, plural, =0 {{name} replied} one {{name} and # other replied} other {{name} and # others replied}} to {title}" ``` @@ -179,7 +179,7 @@ Notifications with the same type and key, for the same member, in the same windo Stored notifications outlive your code. When `schema` changes shape, increase `version` and make `migrate` upgrade the old data. Here version 1 stored `title`, and version 2 renames it to `topicTitle`: -```ts title="plugins/forum/src/api/lib/notifications.ts" +```ts title="plugins/acme-forum/src/api/lib/notifications.ts" export const topicReplyNotification = buildNotificationType({ id: 'forum.topic_reply', version: 2, diff --git a/apps/web/content/docs/dev/notifications/publishing.mdx b/apps/web/content/docs/dev/notifications/publishing.mdx index 5ec6d91767..7f974249d2 100644 --- a/apps/web/content/docs/dev/notifications/publishing.mdx +++ b/apps/web/content/docs/dev/notifications/publishing.mdx @@ -23,11 +23,13 @@ implementation: href: /docs/dev/notifications/email-and-digests --- -This guide notifies a topic's author when someone replies to their topic. You declare a notification type once, register it on your API plugin, and publish it from the route that saves the reply. The examples use a forum plugin with the id `@acme/forum`. +This guide notifies a topic's author when someone replies to their topic. You declare a notification type once, register it on your API plugin, and publish it from the route that saves the reply. The examples use a fictional forum plugin with the id `@acme/forum` in `plugins/acme-forum`, not the `@vitnode/forum` plugin that ships with VitNode. ## Before you begin -You need a plugin with an API part (`src/config.api.ts`) and a route that writes to the database. See [Create a plugin](/docs/dev/plugins/create) if you do not have one yet. +- A plugin with an API part (`src/config.api.ts`). See [Create a plugin](/docs/dev/plugins/create) if you do not have one yet. +- A route that writes to the database. Here it is a reply route that inserts into the plugin's own `forum_replies` table and has already loaded the `topic` (with its `authorId` and `title`). Swap in your own table and route. +- Two user accounts, so one can act and the other can receive the notification. <Steps> @@ -37,7 +39,7 @@ You need a plugin with an API part (`src/config.api.ts`) and a route that writes Create a file for your plugin's notification types: -```ts title="plugins/forum/src/api/lib/notifications.ts" +```ts title="plugins/acme-forum/src/api/lib/notifications.ts" import { buildNotificationType } from '@vitnode/core/api/lib/notifications/registry' import { z } from 'zod' @@ -67,7 +69,7 @@ export const topicReplyNotification = buildNotificationType({ The API renders notification text, so the strings belong in your plugin's API messages: -```json title="plugins/forum/src/locales/api/en.json" +```json title="plugins/acme-forum/src/locales/api/en.json" { "@acme/forum": { "notifications": { @@ -90,7 +92,7 @@ The API renders notification text, so the strings belong in your plugin's API me Pass the type and the API messages to `buildApiPlugin()`: -```ts title="plugins/forum/src/config.api.ts" +```ts title="plugins/acme-forum/src/config.api.ts" import { buildApiPlugin } from '@vitnode/core/api/lib/plugin' import { topicReplyNotification } from '@/api/lib/notifications' // [!code ++] @@ -117,7 +119,11 @@ Core collects the types of every installed plugin when the API starts, so restar In the handler that saves the reply, publish inside the same transaction: -```ts title="plugins/forum/src/api/modules/topics/routes/reply.route.ts" +```ts title="plugins/acme-forum/src/api/modules/topics/routes/reply.route.ts (excerpt)" +import { topicReplyNotification } from '@/api/lib/notifications' // [!code ++] +import { forum_replies } from '@/database/replies' + +// inside the route handler await c.get('db').transaction(async (tx) => { const [reply] = await tx .insert(forum_replies) @@ -136,7 +142,7 @@ await c.get('db').transaction(async (tx) => { }) ``` -`topic`, `user` and `content` come from your existing route. Because of `tx`, the notification is saved together with the reply: a rolled-back reply notifies nobody, and a saved reply always notifies, even if the server stops right after the commit. `subject` names what the notification is about. Core uses it to group notifications and to [remove them later](/docs/dev/notifications/access#remove-notifications-when-content-goes-away). +`forum_replies` is your plugin's replies table, and `topic`, `user` and `content` come from your existing route. Because of `tx`, the notification is saved together with the reply: a rolled-back reply notifies nobody, and a saved reply always notifies, even if the server stops right after the commit. `subject` names what the notification is about. Core uses it to group notifications and to [remove them later](/docs/dev/notifications/access#remove-notifications-when-content-goes-away). </Step> @@ -169,7 +175,7 @@ Use a random key only when every call really is a new message, such as an admini To notify the actor about their own work, set `allowSelf: true`: -```ts title="plugins/forum/src/api/modules/exports/routes/finish.route.ts" +```ts title="plugins/acme-forum/src/api/modules/exports/routes/finish.route.ts" await c.get('notifications').publish({ type: exportReadyNotification, recipients: [user.id], diff --git a/apps/web/content/docs/dev/notifications/queue-and-scale.mdx b/apps/web/content/docs/dev/notifications/queue-and-scale.mdx index f5ac359463..d917492158 100644 --- a/apps/web/content/docs/dev/notifications/queue-and-scale.mdx +++ b/apps/web/content/docs/dev/notifications/queue-and-scale.mdx @@ -29,13 +29,11 @@ The fan-out task walks the recipients in batches of `fanoutBatchSize`, 500 by de - **Large audiences do not block the queue.** One task stops after 20 seconds and queues a new task for the rest. - **No deadlocks between writers.** Every inbox write locks the affected members in user id order, so concurrent writers wait for each other instead. -The integration test `fanout.load.integration.test.ts` delivers one notification to 1,000 members with batches of 200, with two workers racing on the same event. It checks that every member gets exactly one item, that `access` runs about once per batch and that the number of queries stays below the number of recipients. - ## Recovery | Stuck work | Recovered by | | ---------------------------------------------- | --------------------------------------------------------------------------- | -| Queue task left processing by a stopped worker | The queue worker, after 15 minutes | +| Queue task left processing by a stopped worker | The queue worker, after 10 minutes (the task's lease, 600 s by default) | | Notification unfinished with no task left | `notifications-schedule`, after 10 minutes, by queuing a new task | | Email left in `sending` | `notifications-schedule`, after 15 minutes, by setting it back to `pending` | | Two workers on one notification | A row lock. The second waits, then continues from the saved progress | diff --git a/apps/web/content/docs/dev/notifications/reference.mdx b/apps/web/content/docs/dev/notifications/reference.mdx index cd60b24a08..87e993bca7 100644 --- a/apps/web/content/docs/dev/notifications/reference.mdx +++ b/apps/web/content/docs/dev/notifications/reference.mdx @@ -1,5 +1,5 @@ --- -title: Notifications API reference +title: API reference description: Reference for c.get("notifications") in VitNode (publish, remove and state), its errors, the member and AdminCP REST endpoints, and the realtime channel. icon: BookOpen --- @@ -91,7 +91,7 @@ Without `type` and `userIds`, `remove()` deletes every item about the subject fo ### `state` -```ts title="plugins/forum/src/api/modules/topics/routes/summary.route.ts" +```ts title="plugins/acme-forum/src/api/modules/topics/routes/summary.route.ts" const { unread, revision } = await c.get('notifications').state(user.id) ``` @@ -166,10 +166,13 @@ The body of `PUT /types/{type}` accepts any of these keys: "allowPush": true, "allowEmail": true, "email": "daily", - "memberCanEdit": false + "memberCanEdit": false, + "enabled": true } ``` +`enabled: false` turns the type off for everyone, unless it is mandatory. + `POST /reconcile` only reports by default: `dryRun` is `true` unless you send `false`. It returns `{ mismatched, corrected }`. ## Realtime channel diff --git a/apps/web/content/docs/dev/notifications/troubleshooting.mdx b/apps/web/content/docs/dev/notifications/troubleshooting.mdx index ae7200a61c..0c093d3a2d 100644 --- a/apps/web/content/docs/dev/notifications/troubleshooting.mdx +++ b/apps/web/content/docs/dev/notifications/troubleshooting.mdx @@ -1,5 +1,5 @@ --- -title: Troubleshooting notifications +title: Troubleshooting description: Fix common VitNode notification problems. A bell that does not update live, notifications that arrive late or never, missing emails, a wrong unread count and items that are no longer available. icon: Wrench --- @@ -15,7 +15,7 @@ Each section below starts from a symptom and lists the checks in the order that A publishing request starts delivery right after its response. Everything else is delivered by the queue worker, which your cron adapter runs every minute. -1. **The cron adapter is not calling the queue worker.** In development there is no `CRON_SECRET`, so queued tasks wait until you run them. See [Cron](/docs/dev/cron). +1. **Nothing runs the queue worker.** No cron adapter or external scheduler is configured, or every tick is refused. In production an unset or placeholder `CRON_SECRET` gets `403`, and the server console shows `[VitNode] Cron tick failed: 403 ...`. **Debug Panel → Cron & queue** (`/admin/core/debug/cron`) shows a red **Scheduler stopped** card once jobs are 15 minutes overdue. See [Cron](/docs/dev/cron#choose-what-ticks-the-clock). 2. **Notifications are paused.** The AdminCP notifications screen shows a **Notifications are paused** banner. See [Use the Settings sheet](/docs/dev/notifications/admincp#use-the-settings-sheet). 3. **The delivery task failed.** **Debug Panel → Queue** in the AdminCP (`/admin/core/debug/queue`) lists failed `notifications-fanout` tasks with their last error. Filter by the **Failed** status to find them. 4. **The member never gets it.** The actor is skipped unless you pass `allowSelf: true`, and members who turned the type off or fail your `access` check get nothing. See [Choose the recipients](/docs/dev/notifications/publishing#choose-the-recipients). diff --git a/apps/web/content/docs/dev/passkeys/admincp.mdx b/apps/web/content/docs/dev/passkeys/admincp.mdx index 13f1c63570..43e544ecbd 100644 --- a/apps/web/content/docs/dev/passkeys/admincp.mdx +++ b/apps/web/content/docs/dev/passkeys/admincp.mdx @@ -1,5 +1,5 @@ --- -title: AdminCP passkey sign-in +title: AdminCP sign-in description: Let staff sign in to the VitNode AdminCP with a user-verified passkey. How enrollment, sign-in and recovery work, why user verification is required, and how AdminCP sessions stay separate from public ones. icon: ShieldCheck --- diff --git a/apps/web/content/docs/dev/passkeys/index.mdx b/apps/web/content/docs/dev/passkeys/index.mdx index 547d133c37..74f9aae1bc 100644 --- a/apps/web/content/docs/dev/passkeys/index.mdx +++ b/apps/web/content/docs/dev/passkeys/index.mdx @@ -1,5 +1,5 @@ --- -title: Passkeys (WebAuthn) +title: Passkeys description: Let members sign in with Face ID, Touch ID, Windows Hello or a security key. Configure the RP ID and origins, run the migration, and learn how the WebAuthn ceremonies work in VitNode. icon: FingerprintPattern --- @@ -137,17 +137,16 @@ Every ceremony is two requests: **options** (the server issues a challenge) and | `PATCH` | `/{id}` | the passkey's owner | Renames it | | `DELETE` | `/{id}` | the passkey's owner | Removes it - refused with `409 last_recovery_method` if it's the account's last way in | -From the frontend, call them with the typed fetcher - `module: "users/passkeys"` - like any other core route: +From the frontend, call them with the universal [fetcher](/docs/dev/fetcher) and `module: "users/passkeys"`, like any other core route: ```ts -import { fetcherClient } from "@vitnode/core/lib/fetcher-client" +import { fetcher } from "@vitnode/core/tanstack/fetcher" -const res = await fetcherClient({ +const res = await fetcher({ plugin: "@vitnode/core", method: "get", module: "users/passkeys", path: "/", - options: { credentials: "include" }, }) ``` diff --git a/apps/web/content/docs/dev/performance.mdx b/apps/web/content/docs/dev/performance.mdx index 36751ff8a7..9da2904dfe 100644 --- a/apps/web/content/docs/dev/performance.mdx +++ b/apps/web/content/docs/dev/performance.mdx @@ -6,11 +6,11 @@ icon: Gauge import { Tab, Tabs } from 'fumadocs-ui/components/tabs' -TanStack Start splits components into separate lazy chunks by default, keeping the initial entry bundle light. Follow these key practices to maintain instant page loads. +This page collects the practices that keep a VitNode app's JavaScript and CSS small and its first paint early: what lands in the initial bundle, what to lazy-load, and how to measure the result. -## Performance Checklist +## Checklist -1. **Keep `head` metadata isolated**: Never import UI components into route `head`. +1. **Keep `head` metadata isolated**: in the app's file routes, never import UI components into `head`. 2. **Lazy-load heavy dialogs**: Use `React.lazy` + `Suspense` for complex editors and dialogs. 3. **Dynamic imports inside loaders**: Lazy-load heavy server/client utilities with `await import(...)`. 4. **Optimize images**: Use `loading="lazy"`, responsive widths, and explicit dimensions. @@ -18,9 +18,9 @@ TanStack Start splits components into separate lazy chunks by default, keeping t --- -## What Lands in the Client Entry Bundle +## What lands in the client entry bundle -TanStack Router automatically extracts route `component`, `errorComponent`, and `notFoundComponent` into lazy chunks: +This table is about your app's own file routes (`createFileRoute` in `src/routes`). TanStack Router splits a route's `component`, `errorComponent` and `notFoundComponent` into lazy chunks, and keeps the rest in the entry bundle: | Route Option | Read When | In Initial Bundle? | Optimization | | :----------------- | :-------------------- | :------------------ | :---------------------------------------------------------------------- | @@ -30,38 +30,38 @@ TanStack Router automatically extracts route `component`, `errorComponent`, and | `pendingComponent` | Route loading | **Yes** | Plain skeleton markup only - never a layout component from a UI library | | `component` | Render | **No (Lazy Chunk)** | Automatically code-split | +A plugin route is lighter by design. `routes.ts` holds only the declaration, and `load`, `head`, `breadcrumb` and the component all live in the page module that `lazy()` loads on demand. Only a plugin route's `pendingComponent` is in the entry bundle. See [Routing](/docs/dev/routing#how-a-plugin-route-works). + --- -## Best Practices +## Practices -### 1. Isolate Metadata from Components +### 1. Isolate metadata in file routes -Because `head` is evaluated in the main route bundle, importing strings from component files accidentally pulls entire component trees into the initial download: +An app file route's `head` is part of the entry bundle, so whatever its file imports at the top level ships to every visitor. Import the strings `head` needs from a small leaf module, not from the component file: -```tsx title="plugins/home/src/pages/home-page.tsx" -import { definePluginRoute } from '@vitnode/core/routing' +```tsx title="apps/web/src/routes/_main/pricing.tsx" +import { createFileRoute } from '@tanstack/react-router' +import { pageHead } from '@vitnode/core/tanstack/metadata' -// BAD: Pulls HomeRouteContent and all its heavy icons/charts into main entry -import { HOME_TITLE, HomeRouteContent } from '../views/home-content' // [!code --] +// BAD: pulls PricingPage and everything it imports into the entry bundle +import { PRICING_TITLE, PricingPage } from '@/site/pricing/pricing-page' // [!code --] -// GOOD: Metadata strings live in a lightweight leaf file -import { HomeRouteContent } from '../views/home-content' // [!code ++] -import { HOME_DESCRIPTION, HOME_TITLE } from '../views/metadata' // [!code ++] +// GOOD: the strings live in a leaf module with no UI imports +import { PricingPage } from '@/site/pricing/pricing-page' // [!code ++] +import { PRICING_DESCRIPTION, PRICING_TITLE } from '@/site/pricing/metadata' // [!code ++] -export const route = definePluginRoute({ - head: () => - pageHead({ - title: HOME_TITLE, - description: HOME_DESCRIPTION, - }), +export const Route = createFileRoute('/_main/pricing')({ + head: () => pageHead({ title: PRICING_TITLE, description: PRICING_DESCRIPTION }), + component: PricingPage, }) - -export default HomeRouteContent ``` -### 2. Lazy Dialogs and Heavy Form Editors +A plugin route needs none of this. Its `head` lives in the lazy page module and returns plain fields, `{ title, description, robots, alternates }`. See [Route module](/docs/dev/routing/route-module#head-arguments-and-result). + +### 2. Lazy dialogs and heavy form editors -Heavy editors (like Tiptap) or complex modals should be lazy-loaded with `React.lazy` and `Suspense`: +Lazy-load heavy editors (like Tiptap) and complex modals with `React.lazy` and `Suspense`. This example lazy-loads the AutoForm editor field, so a form downloads the editor only when it renders: ```tsx title="plugins/blog/src/views/admin/article-editor.tsx" import React, { Suspense } from 'react' @@ -74,21 +74,21 @@ const RichEditor = React.lazy(async () => })), ) -export const ArticleEditor = (props) => ( +export const ArticleEditor = (props: React.ComponentProps<typeof RichEditor>) => ( <Suspense fallback={<Spinner size="xl" />}> <RichEditor {...props} /> </Suspense> ) ``` -### 3. Dynamic Imports Inside Loaders +### 3. Dynamic imports inside loaders When a route loader requires a heavy calculation or parsing library, import it dynamically: ```tsx title="plugins/stats/src/pages/stats-page.tsx" -import { definePluginRoute } from '@vitnode/core/routing' +import { defineRoute } from '@vitnode/core/tanstack/plugin-routes' -export const route = definePluginRoute({ +export const route = defineRoute({ load: async () => { // Only downloaded when visitor navigates to /stats const { calculateStats } = await import('../features/stats/calculator') // [!code ++] @@ -97,7 +97,7 @@ export const route = definePluginRoute({ }) ``` -### 4. Lazy Images Below the Fold +### 4. Lazy images below the fold Always specify explicit aspect ratios and `loading="lazy"` on images outside the initial viewport, and ship WebP with a `srcSet` so a phone never downloads the desktop rendition: @@ -117,7 +117,7 @@ Always specify explicit aspect ratios and `loading="lazy"` on images outside the The one image that is the page's largest element on arrival - a hero screenshot - is the exception: give it `loading="eager"` and `fetchPriority="high"` so the browser asks for it first. -### 5. Skip Rendering Work for Offscreen Sections +### 5. Skip rendering work for offscreen sections A long marketing page can carry a hundred CSS animations, most of them below the fold. Give each section `content-visibility: auto` with a `contain-intrinsic-size` estimate and the browser skips style, layout and animation work for everything not near the viewport: @@ -131,11 +131,11 @@ A long marketing page can carry a hundred CSS animations, most of them below the The home page went from 133 running animations to 42 on arrival with this one rule, and the pages still scroll and deep-link normally. -### 6. Keep the Plugin Factory Light +### 6. Keep the plugin factory light -`vitnode.config.ts` is bundled with the document shell, so everything a plugin factory imports ships to every visitor. A factory that spreads `admin/content` or `admin/nav` drags the AdminCP editing stack - AutoForm, schemas, dialogs - into the public bundle. Keep it to `pluginId`, `messages` and `routes`; see [Plugin frontend modules](/docs/content-engine/plugin-files). +`vitnode.config.ts` is bundled with the document shell, so everything a plugin factory imports ships to every visitor. A factory that spreads `admin/content` or `admin/nav` drags the whole AdminCP editing stack into the public bundle, AutoForm, schemas and dialogs included. Keep it to `manifest`, `localeFiles`, `messages` and `routes`; see [Plugin frontend modules](/docs/content-engine/plugin-files). -### 7. Route-Scoped Stylesheets +### 7. Route-scoped stylesheets Tailwind emits one utility per class it finds in the sources you list. A documentation UI kit scanned globally pays its CSS on the home page too. Give it a stylesheet of its own and load it from the layout route that renders it: @@ -174,7 +174,7 @@ export const Route = createFileRoute('/_main')({ }) ``` -### 8. Group Shared Vendor Modules +### 8. Group shared vendor modules Rolldown splits every module shared by two routes into its own file, which for an icon library means dozens of 300-byte requests per page. Group the libraries that are shared by design into one chunk each: @@ -194,7 +194,7 @@ build: { Group only libraries whose shared surface is small. A UI primitive library shared by every AdminCP screen turns into a single 280 KB chunk that public pages then download for a tooltip. -### 9. Load JavaScript After the First Paint +### 9. Load JavaScript after the first paint TanStack's `HeadContent` puts a `modulepreload` link for every chunk the page needs into `<head>`, ahead of the stylesheet. On a slow phone those downloads compete with the CSS the browser has to wait for, so the first paint arrives late. Render the document with `DocumentHead` and `DocumentScripts` from `@vitnode/core/tanstack/layout` instead: @@ -222,15 +222,15 @@ import { </html> ``` -In a production build the HTML and CSS load first, and a small inline script adds the preloads and the app entry right after the browser paints. In a hidden tab it adds them immediately. Hydration starts a frame or two later than before. During `vite dev` both components render the stock `HeadContent` and `Scripts`. New apps from `create-vitnode-app` already use them. +In a production build the HTML and CSS load first, and a small inline script adds the preloads and the app entry right after the browser paints. In a hidden tab it adds them immediately. Hydration starts a frame or two later than before. During `vitnode dev` both components render the stock `HeadContent` and `Scripts`. New apps from `create-vitnode-app` already use them. --- -## Measuring Bundle Size +## Measure the bundle -Analyze your client bundle with Vite: +Build the app. `vitnode build` prints a bundle size report with every client file, its gzip size, warnings for oversized chunks and a comparison with your previous build: -<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Build and analyze"> +<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Build the app"> ```bash tab="bun" bun run build @@ -246,19 +246,19 @@ npm run build </Tabs> -Inspect the output chunk sizes in `apps/web/.output/public/assets/`, then load a page in the browser's network panel and check what the document shell actually requests - a chunk the manifest never preloads can still arrive through a static import. Keep any single lazy chunk below **150 KB** for optimal mobile performance. +[Bundle size report](/docs/dev/cli/bundle-size) explains each part of the report, its size thresholds and `--analyze`. Then load a page with the browser's network panel open and check what the document shell actually requests, since a chunk the manifest never preloads can still arrive through a static import. -## Learn More +## Related <Cards> <Card - title="Data Fetching" - description="Warming TanStack Query and cache management" + title="Fetcher" + description="Call API routes and warm TanStack Query in loaders" href="/docs/dev/fetcher" /> <Card - title="Loading States" - description="Pre-built skeletons and instant navigation UI" + title="Loading states" + description="Skeletons, the progress bar and button spinners" href="/docs/dev/routing/loading" /> </Cards> diff --git a/apps/web/content/docs/dev/plugins/admin/admin-notes-page.webp b/apps/web/content/docs/dev/plugins/admin/admin-notes-page.webp new file mode 100644 index 0000000000000000000000000000000000000000..ba25e8260d13a7fa15366b9dbfe5b18bdf4e0149 GIT binary patch literal 81550 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 K$^ZZWBDes~0)#{W literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/plugins/admin/dashboard-notes-widget.webp b/apps/web/content/docs/dev/plugins/admin/dashboard-notes-widget.webp new file mode 100644 index 0000000000000000000000000000000000000000..eb25e3ce813e17bdb6ba23170fd6e1a3a4e00d7d GIT binary patch literal 31484 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/plugins/admin/dashboard-widgets.mdx b/apps/web/content/docs/dev/plugins/admin/dashboard-widgets.mdx index 68d5946f94..1ae7a03099 100644 --- a/apps/web/content/docs/dev/plugins/admin/dashboard-widgets.mdx +++ b/apps/web/content/docs/dev/plugins/admin/dashboard-widgets.mdx @@ -1,92 +1,195 @@ --- -title: Dashboard Widgets -description: Add a configurable AdminCP dashboard widget from a VitNode plugin with sizing, permissions, and optional settings. +title: Dashboard widgets +description: Add a configurable AdminCP dashboard widget to a VitNode plugin, with real data, a settings form, translated strings, sizing and an optional staff permission. icon: LayoutDashboard --- -import { BarChart3Icon, Settings2Icon } from 'lucide-react' +import { ImgDocs } from "@/components/fumadocs/img"; +import notesWidget from "./dashboard-notes-widget.webp"; -Dashboard widgets are **AdminCP plugin extensions**. Define the component and -list it on the plugin's `adminNav` export, next to its sidebar entries; the -AdminCP dashboard then discovers it automatically. +import { KeyRoundIcon, Settings2Icon } from 'lucide-react' -{/* Image prompt: VitNode AdminCP dashboard with a “Site notes” statistics widget in a draggable grid. Show the widget panel, the corner resize bracket on each card, and the settings gear. Dark theme, 1600x900. */} +A dashboard widget is a card a plugin adds to the AdminCP dashboard. Each +administrator decides which widgets to show, where, and how big. In this guide +the `site-notes` plugin gets a **Notes** widget that shows how many notes exist +and the newest one, with a setting to hide the newest note. + + +## Before you begin + +- The `site-notes` AdminCP page from [AdminCP page](/docs/dev/plugins/admin). This guide reuses its `src/pages/notes-query.ts`, its `@tanstack/react-query` dependency and its `src/admin/nav.tsx`. <Steps> <Step> ### Build the widget component -```tsx title="plugins/site-notes/src/views/admin/widgets/stats-widget.tsx" +Create `src/admin/notes-widget.tsx`. It reads the same notes query as the +AdminCP page, so the count is real and refreshes with the list: + +```tsx title="plugins/site-notes/src/admin/notes-widget.tsx" import type { AdminDashboardWidgetProps } from '@vitnode/core/lib/plugin' -export const StatsWidget = ({ settings }: AdminDashboardWidgetProps) => ( - <div className="flex flex-col gap-1 p-2"> - <span className="text-muted-foreground text-sm">Published notes</span> - <strong className="text-3xl tabular-nums"> - {String(settings.total ?? 42)} - </strong> - </div> -) +import { useQuery } from '@tanstack/react-query' +import { Skeleton } from '@vitnode/core/components/ui/skeleton' +import { useTranslations } from 'use-intl' + +import { notesQueryOptions } from '@/pages/notes-query' + +export const NotesWidget = ({ settings }: AdminDashboardWidgetProps) => { + const t = useTranslations('site-notes.admin.dashboard.widgets.notes') + const { data: notes, isError, isPending } = useQuery(notesQueryOptions()) + const showLatest = settings.showLatest !== false + + if (isPending) return <Skeleton className="m-2 h-9 w-24" /> + if (isError) return <p className="text-destructive p-2 text-sm">{t('load_error')}</p> + + return ( + <div className="flex flex-col gap-1 p-2"> + <strong className="text-3xl tabular-nums"> + {t('count', { count: notes.length })} + </strong> + {showLatest && notes[0] ? ( + <p className="text-muted-foreground text-sm leading-relaxed text-pretty"> + {t('latest', { title: notes[0].title })} + </p> + ) : null} + </div> + ) +} +``` + +`settings` holds what an administrator saved for this copy of the widget, and +is `{}` until they save anything, so the widget treats a missing `showLatest` +as on. + + </Step> + <Step> + +### Add a settings form + +Create `src/admin/notes-widget-settings.tsx`. The dashboard renders it in the +widget's panel while an administrator edits the layout. +`useWidgetSettingsDialog()` gives it `save`, which stores the settings, shows a +toast and refreshes the widget: + +```tsx title="plugins/site-notes/src/admin/notes-widget-settings.tsx" +import type { AdminDashboardWidgetProps } from '@vitnode/core/lib/plugin' + +import { AutoForm } from '@vitnode/core/components/form/auto-form' +import { AutoFormSwitch } from '@vitnode/core/components/form/fields/switch' +import { useWidgetSettingsDialog } from '@vitnode/core/views/admin/views/core/dashboard/grid/widget-settings-context' +import { useTranslations } from 'use-intl' +import { z } from 'zod' + +export const NotesWidgetSettings = ({ settings }: AdminDashboardWidgetProps) => { + const t = useTranslations('site-notes.admin.dashboard.widgets.notes') + const { save } = useWidgetSettingsDialog() + + const formSchema = z.object({ + showLatest: z.boolean().default(settings.showLatest !== false), + }) + + return ( + <AutoForm + fields={[ + { + id: 'showLatest', + component: props => ( + <AutoFormSwitch {...props} label={t('settings.show_latest')} /> + ), + }, + ]} + formSchema={formSchema} + onSubmit={async values => { + await save(values) + }} + submitButtonProps={{ children: t('settings.save') }} + /> + ) +} ``` +Skip this step, and `settingsComponent` in the next one, if your widget has +nothing to configure. + </Step> <Step> ### Register it on the plugin's `adminNav` -Add it to the `adminNav` your plugin exports from its `admin/nav` module (the -same object that holds its [sidebar entries](/docs/dev/plugins/admin)). VitNode -collects every plugin's `adminNav` into the app's generated `admin-nav.gen.ts`, -and the AdminCP shell hands the widgets to the dashboard. +Add a `dashboard.widgets` list to the `adminNav` in `src/admin/nav.tsx`, next to +the sidebar `nav` from the previous lesson. VitNode collects every plugin's +`adminNav` into the app's generated `admin-nav.gen.ts`, and the AdminCP shell +hands the widgets to the dashboard. ```tsx title="plugins/site-notes/src/admin/nav.tsx" import type { AdminNavPluginSource } from '@vitnode/core/lib/plugin' -import { BarChart3Icon } from 'lucide-react' +import { StickyNoteIcon } from 'lucide-react' +import { NotesWidget } from '@/admin/notes-widget' // [!code ++] +import { NotesWidgetSettings } from '@/admin/notes-widget-settings' // [!code ++] import { manifest } from '@/manifest.gen' -import { StatsWidget } from '@/views/admin/widgets/stats-widget' export const adminNav = { pluginId: manifest.id, admin: { + // [!code ++:13] dashboard: { widgets: [ - // [!code ++:8] { - component: StatsWidget, + id: 'notes', + component: NotesWidget, + settingsComponent: NotesWidgetSettings, + icon: <StickyNoteIcon />, defaultEnabled: true, - defaultRows: 1, defaultSpan: 1, - icon: <BarChart3Icon />, - id: 'stats', + defaultRows: 1, }, ], }, + nav: [ + // ...the Notes link from the previous lesson + ], }, } satisfies AdminNavPluginSource ``` -The full widget id is namespaced by the plugin, so `stats` will not collide with -another plugin’s idea of a stats card. A good thing—statistics are dramatic -enough already. +The board namespaces the id as `site-notes:notes`, so `notes` never collides +with another plugin's idea of a notes card. With `defaultEnabled`, the dashboard +puts the widget at the end of the board for every administrator who has not +seen it yet. Anyone who removes it keeps it removed. </Step> <Step> -### Name it +### Add the strings -The widget's title comes from your plugin's frontend messages, under -`admin.dashboard.widgets.{id}`. A `desc` is optional and shows in the widget panel. +The dashboard loads the `site-notes.admin.dashboard.widgets` namespace. The +widget's title is `notes.title` and its optional `desc` shows in the widget +panel; the other keys are the ones the two components use. Add them under +`site-notes.admin` in `src/locales/en.json`, next to `nav` and `notes`: ```json title="plugins/site-notes/src/locales/en.json" { - "@acme/site-notes": { + "site-notes": { "admin": { + // ...nav and notes from the previous lesson + // [!code ++:14] "dashboard": { "widgets": { - "stats": { "title": "Note stats", "desc": "How many notes are live." } + "notes": { + "title": "Notes", + "desc": "How many notes exist, and the newest one.", + "count": "{count, plural, one {# note} other {# notes}}", + "latest": "Latest: {title}", + "load_error": "The notes could not be loaded.", + "settings": { + "show_latest": "Show the newest note", + "save": "Save settings" + } + } } } } @@ -95,37 +198,68 @@ The widget's title comes from your plugin's frontend messages, under ``` </Step> - <Step> +</Steps> -### Add a permission or settings UI when needed +## Check the result -Add `permission` to hide a widget from staff who should not see it. Add -`settingsComponent` when administrators need to save preferences; both stay in -the plugin alongside the widget. +Let the plugin rebuild (or run its `build:plugins` script), then reload the +AdminCP dashboard at `/admin/core`. + +1. A **Notes** card sits at the end of the board, showing the number of notes + and "Latest:" with the newest title. With no notes yet it reads `0 notes`. + +<ImgDocs + withoutBackground + className="*:max-w-full" + src={notesWidget} + alt="The site-notes Notes widget at the end of the AdminCP dashboard, reading 6 notes and Latest: Lift maintenance, next to core's Send a notification widget" +/> + +2. Press **Edit layout**, click the card, switch off **Show the newest note** and + choose **Save settings**. A toast confirms the save and the card shows only + the count. +3. Create a note on the plugin's AdminCP page, then come back. The count has + gone up by one. + +## Show a widget only to some staff + +`permission` hides a widget from administrators without that staff permission: ```tsx title="plugins/site-notes/src/admin/nav.tsx" { - component: StatsWidget, - // [!code ++:4] - permission: { module: 'site_notes', permission: 'can_view_stats' }, - settingsComponent: StatsSettings, - id: 'stats', + id: 'notes', + component: NotesWidget, + permission: { module: 'notes', permission: 'can_create' }, // [!code ++] + // ... } ``` - </Step> -</Steps> +- **It only hides the card.** The data still comes from the API, so a widget + that shows private data must read it from a route guarded with + `adminStaffPermission`, as the create endpoint in + [Permissions](/docs/dev/working-with-users/staff-permissions) is. The notes + list is public, so the Notes widget needs no guard. +- **Declare the permission** in `buildApiPlugin({ permissionStaff })`, as + `site-notes` already does for `notes.can_create`. An undeclared permission + cannot be granted in the staff editor, so only root administrators would see + the widget. `vitnode plugin validate` checks this for sidebar links, not for + widgets. ## Widget options -| Option | What it controls | -| ----------------------------- | ------------------------------------------------- | -| `defaultSpan` / `defaultRows` | Initial grid size from 1 to 3 columns or rows. | -| `minSpan` | Narrowest allowed width. | -| `defaultEnabled` | Whether a new dashboard receives the widget. | -| `allowMultiple` | Whether an admin may place more than one copy. | -| `permission` | Staff permission required to see the widget. | -| `settingsComponent` | Plugin form shown in the widget's panel while the dashboard is being edited. | +| Name | Type | Required | Default | Description | +| :------------------ | :-------------------------------------------------- | :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------- | +| `id` | `string` | Yes | - | Unique within the plugin; the board uses `{pluginId}:{id}`. Also names the strings under `admin.dashboard.widgets.{id}` | +| `component` | `ComponentType<AdminDashboardWidgetProps>` | Yes | - | Renders the widget's body. Gets `settings` and `widgetId` (the id of this copy on the board) | +| `icon` | `ReactNode` | No | - | Shown in the widget panel | +| `defaultSpan` | `1 \| 2 \| 3` | No | `minSpan` | Width in grid columns when first placed | +| `defaultRows` | `1 \| 2 \| 3` | No | `1` | Height in grid rows when first placed | +| `minSpan` | `1 \| 2 \| 3` | No | `1` | The narrowest an administrator can resize it to | +| `defaultEnabled` | `boolean` | No | `false` | Placed automatically for administrators who have never seen it | +| `allowMultiple` | `boolean` | No | `false` | Lets an administrator place more than one copy, each with its own settings | +| `category` | `string` | No | the plugin | Groups the widget in the panel, titled by `admin.dashboard.widgets.categories.{category}` (the raw value when that key is missing) | +| `permission` | `{ module, permission }` | No | - | Hides the widget from administrators without this staff permission of the declaring plugin | +| `settingsComponent` | `ComponentType<AdminDashboardWidgetProps>` | No | - | A form for this copy's `settings`, shown while an administrator edits the dashboard. Saves with `useWidgetSettingsDialog().save` | ## How admins arrange them @@ -145,15 +279,17 @@ New widgets fade in and scroll into view, and screen readers hear where a widget The drop gap uses `defaultSpan` and `defaultRows`, so pick them to match what the widget looks like the moment it is added. +## Related + <Cards> <Card icon={<Settings2Icon />} - title="AdminCP pages" - description="Add plugin-owned routes and browser-safe sidebar navigation." + title="AdminCP page" + description="Add a plugin-owned AdminCP screen and its sidebar link." href="/docs/dev/plugins/admin" /> <Card - icon={<BarChart3Icon />} + icon={<KeyRoundIcon />} title="Staff permissions" description="Define permissions before exposing staff-only capabilities." href="/docs/dev/working-with-users/staff-permissions" diff --git a/apps/web/content/docs/dev/plugins/admin/index.mdx b/apps/web/content/docs/dev/plugins/admin/index.mdx index 19cea48428..fa060b0a6f 100644 --- a/apps/web/content/docs/dev/plugins/admin/index.mdx +++ b/apps/web/content/docs/dev/plugins/admin/index.mdx @@ -1,131 +1,342 @@ --- -title: AdminCP Pages -description: Add plugin-owned AdminCP pages, navigation, permissions, and dashboard extensions to the VitNode admin panel. -icon: PanelsTopLeft +title: AdminCP page +description: Add an AdminCP page to the site-notes VitNode plugin that lists notes, creates them through a permission-guarded endpoint, refreshes the list and shows a toast, with a sidebar link only permitted staff see. +icon: LayoutDashboard --- -import { LayoutDashboardIcon, RouteIcon, ShieldCheckIcon } from 'lucide-react' -import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Tab, Tabs } from "fumadocs-ui/components/tabs"; -AdminCP is a plugin surface. Give the plugin an `area: 'admin'` route and a -browser-safe navigation declaration. The host supplies the panel shell; your -plugin supplies the useful bit. +import { ImgDocs } from "@/components/fumadocs/img"; +import adminPage from "./admin-notes-page.webp"; + +A plugin can add its own screens to the AdminCP, inside its sidebar, breadcrumb and session guard. In this lesson you give staff a **Notes** page that lists the notes and creates new ones through the guarded endpoint from the previous lesson. + +## Before you begin + +- The `POST /api/site-notes/admin/notes` endpoint and the **Create notes** permission from [Permissions](/docs/dev/working-with-users/staff-permissions), plus the restricted second administrator you created there. <Steps> - <Step> -### Claim an AdminCP route +<Step> -```ts title="plugins/site-notes/src/routes.ts" -import { definePluginRoutes, lazy, page } from '@vitnode/core/routing' +### Add TanStack Query -export const routes = definePluginRoutes([ - // [!code ++:4] - page('/admin/site-notes/settings', { - area: 'admin', - component: lazy(() => import('./pages/admin-settings-page')), - }), -]) +The page reads the list with `useQuery` and refreshes it after a create. Add the dependency to the plugin from the workspace root: + +<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Add TanStack Query"> + +```bash tab="bun" +bun add @tanstack/react-query --cwd plugins/site-notes +``` + +```bash tab="pnpm" +pnpm --filter site-notes add @tanstack/react-query +``` + +```bash tab="npm" +npm install @tanstack/react-query --workspace site-notes +``` + +</Tabs> + +</Step> + +<Step> + +### Share the list query + +Create `src/pages/notes-query.ts`. Every list of notes uses this query key, so one invalidation refreshes them all: + +```ts title="plugins/site-notes/src/pages/notes-query.ts" +import { queryOptions } from "@tanstack/react-query"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +import { manifest } from "@/manifest.gen"; + +export const NOTES_QUERY_KEY = [manifest.id, "notes"] as const; + +export const notesQueryOptions = () => + queryOptions({ + queryKey: NOTES_QUERY_KEY, + queryFn: async () => { + const response = await fetcher({ + plugin: manifest.id, + method: "get", + module: "notes", + path: "/", + }); + if (!response.ok) throw new Error("Could not load notes."); + + return await response.json(); + }, + }); +``` + +</Step> + +<Step> + +### Create the page + +Create `src/pages/admin-notes-page.tsx`. The form posts to the guarded endpoint; the list reads the public one: + +```tsx title="plugins/site-notes/src/pages/admin-notes-page.tsx" +import { useQuery, useQueryClient } from "@tanstack/react-query"; +import { AutoForm } from "@vitnode/core/components/form/auto-form"; +import { AutoFormInput } from "@vitnode/core/components/form/fields/input"; +import { AutoFormTextarea } from "@vitnode/core/components/form/fields/textarea"; +import { definePluginRoute } from "@vitnode/core/routing"; +import { useAdminPermission } from "@vitnode/core/tanstack/admin"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { toast } from "sonner"; +import { useTranslations } from "use-intl"; +import { z } from "zod"; + +import { manifest } from "@/manifest.gen"; + +import { NOTES_QUERY_KEY, notesQueryOptions } from "./notes-query"; + +const formSchema = z.object({ + title: z.string().trim().min(3).max(200), + body: z.string().trim().min(1).max(2000), +}); + +const CreateNoteForm = () => { + const t = useTranslations("site-notes.admin.notes"); + const queryClient = useQueryClient(); + + return ( + <AutoForm + fields={[ + { + id: "title", + component: props => <AutoFormInput {...props} label={t("form.title")} />, + }, + { + id: "body", + component: props => <AutoFormTextarea {...props} label={t("form.body")} />, + }, + ]} + formSchema={formSchema} + onSubmit={async (values, form) => { + const response = await fetcher({ + plugin: manifest.id, + method: "post", + module: "admin/notes", + path: "/", + args: { body: values }, + }); + + if (!response.ok) { + toast.error(t("error.title"), { description: t("error.desc") }); + + return; + } + + const note = await response.json(); + form.reset(); + await queryClient.invalidateQueries({ queryKey: NOTES_QUERY_KEY }); + toast.success(t("created.title"), { + description: t("created.desc", { title: note.title }), + }); + }} + submitButtonProps={{ children: t("form.submit") }} + /> + ); +}; + +const AdminNotesPage = () => { + const t = useTranslations("site-notes.admin.notes"); + const canCreate = useAdminPermission({ + plugin: manifest.id, + module: "notes", + permission: "can_create", + }); + const { data: notes, isPending, isError } = useQuery(notesQueryOptions()); + + return ( + <div className="flex flex-col gap-6 p-4"> + <header className="flex flex-col gap-2"> + <h1 className="text-2xl font-semibold tracking-tight text-balance"> + {t("title")} + </h1> + <p className="text-muted-foreground leading-relaxed text-pretty"> + {t("desc")} + </p> + </header> + + {canCreate ? ( + <section className="flex max-w-xl flex-col gap-4"> + <h2 className="text-lg font-semibold">{t("form.heading")}</h2> + <CreateNoteForm /> + </section> + ) : ( + <p className="text-muted-foreground leading-relaxed">{t("no_permission")}</p> + )} + + <section aria-busy={isPending} className="flex flex-col gap-3"> + <h2 className="text-lg font-semibold">{t("list")}</h2> + {isPending ? ( + <p className="text-muted-foreground" role="status"> + {t("loading")} + </p> + ) : isError ? ( + <p className="text-destructive">{t("load_error")}</p> + ) : ( + <ul className="flex flex-col divide-y rounded-lg border"> + {notes.map(note => ( + <li className="flex flex-col gap-1 p-3" key={note.id}> + <span className="font-medium">{note.title}</span> + <span className="text-muted-foreground text-sm">{note.body}</span> + </li> + ))} + </ul> + )} + </section> + </div> + ); +}; + +const AdminNotesBreadcrumb = () => { + const t = useTranslations("site-notes.admin.notes"); + + return <span>{t("title")}</span>; +}; + +export const route = definePluginRoute({ + breadcrumb: AdminNotesBreadcrumb, + head: () => ({ robots: "noindex, nofollow" }), +}); + +export default AdminNotesPage; ``` - </Step> - <Step> +- **`AutoForm`** validates with the same limits as the endpoint and shows the submit button's loading state, so a note cannot be sent twice. +- **After a successful create**, the form resets, `invalidateQueries` refetches the list and a toast names the new note. A refused request (`403`, `400`) shows an error toast instead. +- **`useAdminPermission`** only decides whether the form is shown. The endpoint's `adminStaffPermission` is what actually refuses a create. + +</Step> -### Render the plugin page +<Step> -```tsx title="plugins/site-notes/src/pages/admin-settings-page.tsx" -const AdminSettingsPage = () => ( - <div className="flex flex-col gap-2 p-4"> - <h2 className="text-2xl font-semibold">Site notes settings</h2> - <p className="text-muted-foreground">Manage the notes plugin.</p> - </div> -) +### Declare the route + +Add the page to `src/routes.ts` with `area: "admin"`, which renders it inside the AdminCP shell behind the AdminCP session: + +```ts title="plugins/site-notes/src/routes.ts" + page("/site-notes/notes", { + component: lazy(() => import("./pages/notes-page")), + messages: ["site-notes.notes"], + }), -export default AdminSettingsPage + // [!code ++:5] + page("/admin/site-notes", { + area: "admin", + component: lazy(() => import("./pages/admin-notes-page")), + messages: ["site-notes.admin.notes"], + }), +]); ``` - </Step> - <Step> +An admin route cannot declare a staff permission. Any AdminCP user can open the URL; the page above adapts its content, and the API decides what they can change. + +</Step> + +<Step> -### Add a sidebar entry +### Link it from the sidebar -Export `adminNav` from the plugin. Its small browser-safe shape is what the -generated AdminCP registry imports—do not edit `admin-nav.gen.ts` yourself. +Create `src/admin/nav.tsx`. VitNode finds the file by name and adds a **Site Notes** group to the sidebar: ```tsx title="plugins/site-notes/src/admin/nav.tsx" -import type { AdminNavPluginSource } from '@vitnode/core/lib/plugin' -import { SettingsIcon } from 'lucide-react' +import type { AdminNavPluginSource } from "@vitnode/core/lib/plugin"; + +import { StickyNoteIcon } from "lucide-react"; + +import { manifest } from "@/manifest.gen"; export const adminNav = { - pluginId: '@acme/site-notes', + pluginId: manifest.id, admin: { nav: [ - // [!code ++:6] { - href: '/admin/site-notes/settings', - icon: <SettingsIcon />, - id: 'settings', - permission: { module: 'site_notes', permission: 'can_manage_settings' }, + id: "notes", + href: "/admin/site-notes", + icon: <StickyNoteIcon />, + permission: { module: "notes", permission: "can_create" }, }, ], }, -} satisfies AdminNavPluginSource +} satisfies AdminNavPluginSource; ``` -The generator’s `./*` package export already exposes `admin/nav`; no manual -`package.json` export is required, and nothing changes in `config.tsx`. The -generated `admin-nav.gen.ts` imports `admin/nav` directly, and keeping the -factory to plain data is what keeps the sidebar registration out of every -public page's bundle. +`permission` hides the link from administrators without it. It must be a permission the plugin declares in `permissionStaff`, or `vitnode plugin validate` fails. - </Step> - <Step> +</Step> -### Verify the screen +<Step> -<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Run the AdminCP extension"> +### Add the strings -```bash tab="bun" -bun dev -``` +Add an `admin` group under `site-notes` in `src/locales/en.json`. `admin.nav.notes` is the sidebar label; the rest belongs to the page. Keep `home` and `notes`, and the permission labels at the root: -```bash tab="pnpm" -pnpm dev +```json title="plugins/site-notes/src/locales/en.json" +{ + "site-notes": { + "admin": { + "nav": { "notes": "Notes" }, + "notes": { + "title": "Notes", + "desc": "Write the notes shown at /site-notes/notes.", + "list": "All notes", + "loading": "Loading notes…", + "load_error": "The notes could not be loaded.", + "no_permission": "You can read the notes, but creating them needs the Create notes permission.", + "form": { + "heading": "New note", + "title": "Title", + "body": "Note", + "submit": "Create note" + }, + "created": { + "title": "Note created", + "desc": "\"{title}\" is live on the notes page." + }, + "error": { + "title": "Note not created", + "desc": "Check the fields and your permissions, then try again." + } + } + } + } +} ``` -```bash tab="npm" -npm run dev -``` +</Step> -</Tabs> +</Steps> -Visit `http://localhost:3000/admin/site-notes/settings` as a staff account with -the declared permission. +## Check the result -{/* Image prompt: VitNode AdminCP settings page contributed by a plugin. Show the existing admin sidebar with “Site notes” selected, a compact settings screen, breadcrumb, and staff-permission badge. Dark theme, 1440x900. */} +1. Sign in to the AdminCP as the first account. The sidebar has **Site Notes → Notes**. Open it, enter `Fire drill on Wednesday` and `The alarm goes off at 11:00. Meet in the car park.`, and choose **Create note**. A **Note created** toast appears, the form clears and the note tops **All notes**. It is also on `/site-notes/notes`. - </Step> -</Steps> +<ImgDocs + withoutBackground + className="*:max-w-full" + src={adminPage} + alt="The Site Notes Notes page in the AdminCP with the New note form, a Note created toast for Fire drill on Wednesday, and All notes listing it first" +/> + +2. Sign in as the restricted administrator without **Create notes**. The sidebar has no **Site Notes** group. Opening `/admin/site-notes` directly shows the list and the line "creating them needs the Create notes permission" instead of the form. +3. Grant **Create notes** to that account, as in the previous lesson. After a reload, the link and the form appear, and creating a note works. + +Run `pnpm vitnode plugin validate site-notes` in `apps/web` once more. It lists **AdminCP navigation** among the passing checks. + +## What you built + +`site-notes` now has a public page backed by PostgreSQL, a validated API, a staff permission enforced on the server and an AdminCP screen. Where to go from here: -## Extend the panel - -<Cards> - <Card - icon={<LayoutDashboardIcon />} - title="Dashboard widgets" - description="Add a plugin widget to the admin dashboard’s configurable grid." - href="/docs/dev/plugins/admin/dashboard-widgets" - /> - <Card - icon={<ShieldCheckIcon />} - title="Staff permissions" - description="Define the permissions that gate staff actions and navigation." - href="/docs/dev/working-with-users/staff-permissions" - /> - <Card - icon={<RouteIcon />} - title="Plugin routes" - description="Configure route areas, namespaces, guards, and parameters." - href="/docs/dev/routing" - /> -</Cards> +- [Dashboard widgets](/docs/dev/plugins/admin/dashboard-widgets): put a summary on the AdminCP dashboard. +- [Events](/docs/dev/events): announce `site-notes` changes to other plugins. +- [Queue](/docs/dev/advanced/queue): move slow work out of the request. +- [Content Engine](/docs/content-engine): generate tables, APIs and AdminCP screens from one definition instead of writing them. diff --git a/apps/web/content/docs/dev/plugins/admin/meta.json b/apps/web/content/docs/dev/plugins/admin/meta.json index d7696b1da6..c6a5292783 100644 --- a/apps/web/content/docs/dev/plugins/admin/meta.json +++ b/apps/web/content/docs/dev/plugins/admin/meta.json @@ -1,6 +1,9 @@ { - "title": "Admin Control Panel", + "title": "AdminCP", "description": "Add plugin-owned AdminCP pages, navigation, permissions and dashboard widgets", "icon": "LayoutDashboard", - "pages": ["index", "dashboard-widgets"] + "pages": [ + "index", + "dashboard-widgets" + ] } diff --git a/apps/web/content/docs/dev/plugins/api/modules.mdx b/apps/web/content/docs/dev/plugins/api/modules.mdx index 254dd44ed6..4bba4b7452 100644 --- a/apps/web/content/docs/dev/plugins/api/modules.mdx +++ b/apps/web/content/docs/dev/plugins/api/modules.mdx @@ -1,209 +1,141 @@ --- -title: API Modules -description: Add a typed Hono API module to a VitNode plugin, register it once, and keep endpoint ownership with the feature. +title: API modules +description: Add a notes module to the site-notes VitNode plugin, register it in config.api.ts, and call its typed endpoint through the host API. icon: Box --- -import { NetworkIcon, RouteIcon, ShieldCheckIcon } from 'lucide-react' +An API module groups a plugin's Hono routes under one URL segment. In this lesson you add a `notes` module to `site-notes` whose endpoint returns two sample notes. A later lesson swaps the sample data for a database table. -Start with [a plugin](/docs/dev/plugins/create), not a host endpoint. A module -groups the plugin's Hono routes under one URL prefix and gives OpenAPI a tidy -place to describe them. +## Before you begin -<Callout type="info" title="A generated plugin already has one"> - `create-vitnode-app --plugin` writes a `hello` module, its `config.api.ts` and - a page that calls it. Read on for what each piece does—then rename them, or add - a second module beside them. -</Callout> - -{/* Image prompt: Dark-theme API ownership diagram. A Site notes plugin contains a Hono route, notes module, and config.api file; the app API configuration composes the plugin once. Show resulting GET endpoint, 1600x900. */} +- The `site-notes` plugin from [Create plugin](/docs/dev/plugins/create), with `pnpm dev` running at the workspace root. `dev` rebuilds the plugin every time you save. <Steps> - <Step> -### Define one plugin endpoint +<Step> -Route and module files import their builders from the plugin's own -`src/api/builders.ts`, which binds them to the generated `manifest`. That is -where the plugin id comes from, so no route or module spells it: +### Describe a note -```ts title="plugins/site-notes/src/api/builders.ts" -import { bindApiPlugin } from '@vitnode/core/api/lib/bind-api-plugin' +Create `src/api/modules/notes/notes.schema.ts`. The schema is the response shape, and OpenAPI documents it too: -import { manifest } from '@/manifest.gen' +```ts title="plugins/site-notes/src/api/modules/notes/notes.schema.ts" +import { z } from "@hono/zod-openapi"; -export const { buildModule, buildRoute } = bindApiPlugin(manifest) +export const zodNote = z.object({ + id: z.number(), + title: z.string(), + body: z.string(), +}); ``` +Then create the sample data the endpoint returns for now: + +```ts title="plugins/site-notes/src/api/modules/notes/sample-notes.ts" +/** Placeholder notes until the Database lesson stores real ones. */ +export const sampleNotes = [ + { id: 1, title: "Welcome to site notes", body: "Short updates for everyone on the site." }, + { id: 2, title: "Office closed on Friday", body: "We are back on Monday at 9:00." }, +]; +``` + +</Step> + +<Step> + +### Create the list route + +Create `src/api/modules/notes/list.route.ts`. `buildRoute` comes from the plugin's own `src/api/builders.ts`, which the generator wrote, so the route is tied to `site-notes` without naming it: + ```ts title="plugins/site-notes/src/api/modules/notes/list.route.ts" -import { z } from '@hono/zod-openapi' +import { z } from "@hono/zod-openapi"; + +import { buildRoute } from "@/api/builders"; -import { buildRoute } from '@/api/builders' +import { zodNote } from "./notes.schema"; +import { sampleNotes } from "./sample-notes"; export const listNotesRoute = buildRoute({ route: { - method: 'get', - path: '/', + method: "get", + path: "/", responses: { - // [!code ++:7] 200: { - content: { - 'application/json': { - schema: z.object({ notes: z.array(z.string()) }), - }, - }, - description: 'Published site notes.', + content: { "application/json": { schema: z.array(zodNote) } }, + description: "Every note, newest first.", }, }, }, - handler: (c) => c.json({ notes: ['Hello plugin'] }), -}) + handler: c => c.json(sampleNotes, 200), +}); ``` - </Step> - <Step> +The `responses` schema is a contract. `c.json()` only accepts a body and status that match it. -### Group it and export the plugin API +</Step> -```ts title="plugins/site-notes/src/api/modules/notes/notes.module.ts" -import { buildModule } from '@/api/builders' +<Step> -import { listNotesRoute } from './list.route' +### Group it in a module -export const notesModule = buildModule({ - name: 'notes', - routes: [listNotesRoute], // [!code ++] -}) -``` +Create `src/api/modules/notes/notes.module.ts`. The module's `name` is the URL segment: -```ts title="plugins/site-notes/src/config.api.ts" -import { buildApiPlugin } from '@vitnode/core/api/lib/plugin' +```ts title="plugins/site-notes/src/api/modules/notes/notes.module.ts" +import { buildModule } from "@/api/builders"; -import { notesModule } from './api/modules/notes/notes.module' -import { manifest } from './manifest.gen' +import { listNotesRoute } from "./list.route"; -export const siteNotesApiPlugin = () => - buildApiPlugin({ - manifest, - modules: [notesModule], // [!code ++] - }) +export const notesModule = buildModule({ + name: "notes", + routes: [listNotesRoute], +}); ``` -This file, and not `config.tsx`: the API config reaches your handlers, database -and secrets, while `config.tsx` is read by the browser build. A module -registered in the wrong one is shipped to every visitor. - -`buildApiPlugin` keeps everything it was given as a literal type - the plugin -id, the tuple of modules, and every module nested inside them. That type is -what the [fetcher](/docs/dev/fetcher) infers routes from, so a route you add -here is callable, and checked, the moment you save. +</Step> - </Step> - <Step> +<Step> -### Export the type an application registers +### Register the module -Your pages call the endpoint through the universal fetcher, and the fetcher -looks the plugin up in the API plugin registry. Export one reduced type beside -your factory - `create-vitnode-app --plugin` writes this for you: +Open `src/config.api.ts` and add `notesModule` next to the generated `helloModule`. This is an excerpt; keep the rest of the file, including the `VitNodeApiPlugin` type at the bottom: ```ts title="plugins/site-notes/src/config.api.ts" -import type { ApiPluginContract } from '@vitnode/core/api/lib/plugin' - -import { buildApiPlugin } from '@vitnode/core/api/lib/plugin' +import { helloModule } from "./api/modules/hello/hello.module"; +import { notesModule } from "./api/modules/notes/notes.module"; // [!code ++] export const siteNotesApiPlugin = () => - buildApiPlugin({ manifest, modules: [notesModule] }) - -// [!code ++:3] -export type VitNodeApiPlugin = ApiPluginContract< - ReturnType<typeof siteNotesApiPlugin> -> + buildApiPlugin({ + manifest, + modules: [helloModule], // [!code --] + modules: [helloModule, notesModule], // [!code ++] + }); ``` -`ApiPluginContract` keeps the four things a call needs - the literal plugin id, -every module path you serve, your module tree and your route definitions - and -drops everything else. Your Hono application, content models, event listeners, -queue tasks, WebSockets, search indexers and messages are runtime concerns, so -an app that installs your plugin never resolves them to type-check a call. - -`import type` is the whole point: the factory is never executed here, so none of -the Hono, database or secret code behind it is ever reached by a browser build. - -<Callout type="warn" title="A plugin never registers itself"> - Your package augments nothing. The app that installs you writes the entry into - its own generated `src/api-registry.gen.ts`, from the plugins it configured. A - package that registered itself would put its routes into the registry of every - project that merely installed it. - - To type-check your own pages before any app has installed the plugin, the - scaffold writes `test-fixtures/api-registry.d.ts` - the same entry an app - generates, kept outside `src` and out of the published package. -</Callout> +The generator already added a `siteNotesApiPlugin()` call to the app's `vitnode.api.config.ts`. Every module you list here is served under `/api/site-notes/`, so nothing changes in the app. - </Step> - <Step> +</Step> -### Compose it in the app API config - -The app decides which installed plugins are active. Add the factory to the Hono -config that serves your app (`apps/web` for a single app, or `apps/api` when it -is separate): +</Steps> -```ts title="apps/web/src/vitnode.api.config.ts" -import { siteNotesApiPlugin } from '@acme/site-notes/config.api' // [!code ++] +## Check the result -export const vitNodeApiConfig = buildApiConfig({ - plugins: [siteNotesApiPlugin()], // [!code ++] -}) +```bash +curl http://localhost:3000/api/site-notes/notes ``` -The endpoint is now `GET /api/@acme/site-notes/notes`. OpenAPI picks it up too; -one less hand-written map to maintain. This is the one place `siteNotesApiPlugin()` -is ever called - everywhere else it is a type. - - </Step> - <Step> - -### Call it - -```ts title="plugins/site-notes/src/features/notes/notes-query.ts" -import { fetcher } from '@vitnode/core/tanstack/fetcher' +```json +[ + { "id": 1, "title": "Welcome to site notes", "body": "Short updates for everyone on the site." }, + { "id": 2, "title": "Office closed on Friday", "body": "We are back on Monday at 9:00." } +] +``` -const response = await fetcher({ - plugin: '@acme/site-notes', // [!code ++] - method: 'get', - module: 'notes', - path: '/', -}) +The endpoint also appears in the app's API reference; see [Swagger](/docs/dev/swagger). -const { notes } = await response.json() -``` +## How the fetcher knows your routes -Nothing but the plugin id crosses into the browser bundle. `module`, `path`, -`method` and the response are inferred from the module tree registered above, -and a typo in any of them is a compile error. +Pages call plugin APIs through the [fetcher](/docs/dev/fetcher), which infers `module`, `path`, the arguments and the response from a registry of plugin types. You never edit that registry by hand: - </Step> -</Steps> +- **In the plugin**, every `vitnode build` and `vitnode dev` (both run by `pnpm dev`) writes `types/api-registry.gen.d.ts`. It registers only this plugin, as a type import of `VitNodeApiPlugin` from `src/config.api.ts`, so the plugin's own pages type-check before any app installs it. The plugin's `tsconfig.json` includes `types/`, `.npmignore` keeps the folder out of the published package, and you commit it like `src/manifest.gen.ts`. +- **In the app**, `vitnode dev` and `vitnode build` write `src/api-registry.gen.ts` from the plugins the app configured. That file, not the plugin's, decides what the app's pages can call. -<Cards> - <Card - icon={<RouteIcon />} - title="Validate inputs" - description="Use Zod schemas for params, queries, request bodies, and typed responses." - href="/docs/dev/plugins/api/routes" - /> - <Card - icon={<ShieldCheckIcon />} - title="Protect staff APIs" - description="Require a staff permission before an AdminCP action reaches its handler." - href="/docs/dev/working-with-users/staff-permissions" - /> - <Card - icon={<NetworkIcon />} - title="Call the API" - description="Use VitNode's typed fetcher from a plugin-owned page or component." - href="/docs/dev/fetcher" - /> -</Cards> +The `VitNodeApiPlugin` type at the bottom of `config.api.ts` is the link between the two. It keeps the plugin id, module paths and route definitions and drops the Hono app, database and listener code, so a type-only import never pulls server code into a browser build. The generator writes it; keep it when you edit the file. diff --git a/apps/web/content/docs/dev/plugins/api/routes.mdx b/apps/web/content/docs/dev/plugins/api/routes.mdx index 4bc9f2d20b..cc2b171177 100644 --- a/apps/web/content/docs/dev/plugins/api/routes.mdx +++ b/apps/web/content/docs/dev/plugins/api/routes.mdx @@ -1,116 +1,102 @@ --- -title: API Routes -description: Validate plugin-owned Hono route inputs and responses with Zod, then protect staff actions with a clear permission. -icon: Network +title: API routes +description: Add a route with a validated path parameter to the site-notes VitNode plugin, answer 404 for a missing note, and see how invalid input is refused. +icon: Route --- -import { BoxIcon, ShieldCheckIcon, ZapIcon } from 'lucide-react' +Each route declares its inputs and outputs with Zod, and VitNode validates the request before your handler runs. In this lesson you add `GET /api/site-notes/notes/{id}`, which returns one note, refuses an id that is not a positive number, and answers `404` when no note has that id. -Create [the plugin](/docs/dev/plugins/create) and its [API module](/docs/dev/plugins/api/modules) -first. Then put the endpoint in that module so its validation, permission, and -OpenAPI record travel together. +## Before you begin + +- The `notes` module from [API modules](/docs/dev/plugins/api/modules), still returning the sample notes in `sample-notes.ts`. <Steps> - <Step> -### Validate input and response +<Step> + +### Create the route + +Create `src/api/modules/notes/show.route.ts`: -```ts title="plugins/site-notes/src/api/modules/notes/get.route.ts" -import { z } from '@hono/zod-openapi' +```ts title="plugins/site-notes/src/api/modules/notes/show.route.ts" +import { z } from "@hono/zod-openapi"; -import { buildRoute } from '@/api/builders' +import { buildRoute } from "@/api/builders"; -export const getNoteRoute = buildRoute({ +import { zodNote } from "./notes.schema"; +import { sampleNotes } from "./sample-notes"; + +export const showNoteRoute = buildRoute({ route: { - method: 'get', - path: '/{id}', + method: "get", + path: "/{id}", request: { params: z.object({ id: z.coerce.number().int().positive() }), }, responses: { - // [!code ++:7] 200: { - content: { - 'application/json': { - schema: z.object({ id: z.number(), title: z.string() }), - }, - }, - description: 'One site note.', + content: { "application/json": { schema: zodNote } }, + description: "The note.", }, + 404: { description: "No note has this id." }, }, }, - handler: (c) => { - const { id } = c.req.valid('param') - return c.json({ id, title: 'Plugin-owned note' }) + handler: c => { + const { id } = c.req.valid("param"); + const note = sampleNotes.find(item => item.id === id); + if (!note) return c.body(null, 404); + + return c.json(note, 200); }, -}) +}); ``` - </Step> - <Step> +- **`path: "/{id}"`** uses OpenAPI's parameter syntax. It is also the `path` a page passes to the fetcher. +- **`request.params`** validates the URL segment. Path parameters arrive as strings, so `z.coerce.number()` turns `"2"` into `2`, and `.int().positive()` refuses everything else. +- **`c.req.valid("param")`** returns the parsed, typed value. Read inputs through `c.req.valid()`, never from the raw request. +- **List every status the handler returns in `responses`.** That is what lets the fetcher type both outcomes for the caller. -### Gate an AdminCP action +Body and query parameters work the same way, through `request.body` and `request.query`; the [Permissions](/docs/dev/working-with-users/staff-permissions) lesson adds a validated body. -Add `adminStaffPermission` to an action that only staff should call. The API -still authorizes server-side; a hidden button is merely good manners. +</Step> -```ts title="plugins/site-notes/src/api/modules/notes/publish.route.ts" -import { z } from '@hono/zod-openapi' +<Step> -import { buildRoute } from '@/api/builders' +### Add it to the module -export const publishNoteRoute = buildRoute({ - // [!code ++:4] - adminStaffPermission: { - module: 'site_notes', - permission: 'can_publish', - }, - route: { - method: 'post', - path: '/{id}/publish', - responses: { - 200: { - content: { - 'application/json': { - schema: z.object({ published: z.literal(true) }), - }, - }, - description: 'The note was published.', - }, - }, - }, - handler: async (c) => c.json({ published: true }), -}) +Open `src/api/modules/notes/notes.module.ts` and add the route after the list route. Keep `listNotesRoute`: + +```ts title="plugins/site-notes/src/api/modules/notes/notes.module.ts" +import { buildModule } from "@/api/builders"; + +import { listNotesRoute } from "./list.route"; +import { showNoteRoute } from "./show.route"; // [!code ++] + +export const notesModule = buildModule({ + name: "notes", + routes: [listNotesRoute], // [!code --] + routes: [listNotesRoute, showNoteRoute], // [!code ++] +}); ``` - </Step> +</Step> + </Steps> -{/* Image prompt: Dark-theme API documentation screenshot. Show an OpenAPI endpoint for a plugin route with path parameter validation, a successful JSON response, and a staff-permission lock badge. 1440x900. */} - -<Callout type="idea" title="One route, one plugin owner"> - Keep handlers with the feature that owns the data. The host API config only - composes plugins; it should not become a surprise sequel to your business - logic. -</Callout> - -<Cards> - <Card - icon={<BoxIcon />} - title="API modules" - description="Register a module and its plugin API factory with the Hono application." - href="/docs/dev/plugins/api/modules" - /> - <Card - icon={<ShieldCheckIcon />} - title="Staff permissions" - description="Define the permission catalog that gates AdminCP actions." - href="/docs/dev/working-with-users/staff-permissions" - /> - <Card - icon={<ZapIcon />} - title="Typed fetcher" - description="Call validated plugin endpoints from the TanStack Start UI." - href="/docs/dev/fetcher" - /> -</Cards> +## Check the result + +Ask for an existing note, a missing one and an invalid id: + +```bash +curl -i http://localhost:3000/api/site-notes/notes/2 +curl -i http://localhost:3000/api/site-notes/notes/9 +curl -i http://localhost:3000/api/site-notes/notes/abc +``` + +| Request | Status | Body | +| --- | --- | --- | +| `/notes/2` | `200` | `{ "id": 2, "title": "Office closed on Friday", ... }` | +| `/notes/9` | `404` | empty | +| `/notes/abc` | `400` | `{ "success": false, "error": { "name": "ZodError", ... } }` | + +The `400` comes from validation, so your handler never ran. diff --git a/apps/web/content/docs/dev/plugins/build.mdx b/apps/web/content/docs/dev/plugins/build.mdx index 1bc1c65026..e4cd3a6281 100644 --- a/apps/web/content/docs/dev/plugins/build.mdx +++ b/apps/web/content/docs/dev/plugins/build.mdx @@ -1,5 +1,5 @@ --- -title: Build and watch a plugin +title: Build and watch description: How vitnode build compiles a plugin package with tsdown, how vitnode dev watches it, and what ends up in dist. icon: Hammer --- @@ -8,6 +8,8 @@ import { File, Files, Folder } from 'fumadocs-ui/components/files' `vitnode build` turns a plugin's `src` folder into `dist/src`: one JavaScript file, one declaration file (`.d.ts`) and one declaration map per module. `vitnode dev` does the same in watch mode, so an app using the plugin reloads as you save. There is no build config to write. VitNode owns it, and every plugin and adapter package is built the same way. +A generated plugin calls both commands from its `package.json` scripts: `build:plugins` runs `vitnode build` and `dev` runs `vitnode dev`. At the workspace root, `pnpm build:plugins` builds every plugin through Turborepo, and the root `dev` builds them before it starts the apps. + ## What tsdown does [tsdown](https://tsdown.dev) is the compiler behind both commands. It runs in **unbundle mode**: every module is compiled on its own instead of being merged into one bundle, so `src/pages/home-page.tsx` becomes `dist/src/pages/home-page.js`. @@ -72,7 +74,9 @@ Two TypeScript jobs run side by side, and both must pass: | tsdown | Writes the `.d.ts` files and their maps with the TypeScript compiler | | `tsc --noEmit` | Type checks the whole package with `tsconfig.build.json` and fails on an error | -Declarations are written from every file `tsconfig.build.json` includes. That matters for files nothing imports, such as `global.d.ts` and the generated `types/api-registry.gen.d.ts`: they are what lets `fetcher({ plugin: "@acme/site-notes", ... })` infer its response, and that inferred type lands in your `.d.ts` files. +tsdown writes declarations for every file `tsconfig.build.json` includes. That matters for files nothing imports, such as `global.d.ts` and the generated `types/api-registry.gen.d.ts`. They are what lets `fetcher({ plugin: "site-notes", ... })` infer its response, and that inferred type lands in your `.d.ts` files. + +`types/api-registry.gen.d.ts` registers the plugin's own API with the fetcher. `vitnode build` and `vitnode dev` write it before compiling, but only when the plugin has a `src/config.api.ts`. The template `.npmignore` keeps `/types` out of the published package; commit it like `src/manifest.gen.ts` so the plugin type-checks right after a checkout. You don't need `isolatedDeclarations` or explicit return types. Inferred types come out the same as `tsc` would write them. @@ -116,7 +120,7 @@ VitNode uses different builds for different things. This page is about the first | Build | Who runs it | Tool | | -------------- | ---------------------------------- | ----------------------------------------------------------- | -| Plugin package | `vitnode build` in a plugin | tsdown in unbundle mode, plus `tsc --noEmit` | +| Plugin package | `vitnode build` in a plugin (its `build:plugins` script) | tsdown in unbundle mode, plus `tsc --noEmit` | | VitNode CLI | `pnpm build:scripts` in `@vitnode/core` | tsdown with `packages/vitnode/tsdown.config.ts`, into `dist/scripts` | | App | `vitnode build` in an app | Vite and TanStack Start, unchanged | @@ -129,14 +133,9 @@ VitNode uses different builds for different things. This page is about the first - Each JavaScript rebuild renders every module of the package again and writes only the changed ones. That takes under 100 ms for a typical plugin and about 2 seconds for the roughly 1,600 modules of `@vitnode/core`. - A re-export-only `index.ts` may get no `.d.ts.map`, so "Go to definition" stops at its `.d.ts` first. -## Next steps +## Related <Cards> - <Card - title="Migrate a plugin from SWC" - description="Move an existing plugin from SWC and tsc-alias to tsdown" - href="/docs/dev/plugins/migrate-to-tsdown" - /> <Card title="Plugin CLI" description="List and validate plugins" diff --git a/apps/web/content/docs/dev/plugins/catalog.mdx b/apps/web/content/docs/dev/plugins/catalog.mdx index 9848e9fb33..70a99a6dc5 100644 --- a/apps/web/content/docs/dev/plugins/catalog.mdx +++ b/apps/web/content/docs/dev/plugins/catalog.mdx @@ -1,9 +1,11 @@ --- -title: Show a plugin in the AdminCP catalog +title: Catalog listing description: Give your plugin a title and a Lucide icon so AdminCP → System → Plugins lists it with the version that is actually installed. icon: Puzzle --- +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' + import { ImgDocs } from '@/components/fumadocs/img' import catalog from './admin-plugins-catalog.webp' @@ -20,90 +22,108 @@ The catalog reports what is installed. It also shows available updates and secur ## Add your plugin to the catalog +The steps use the `site-notes` plugin from [Create a plugin](/docs/dev/plugins/create). A generated plugin is already listed with the puzzle icon and the placeholder description "A VitNode plugin." These steps make the entry its own. + <Steps> <Step> ### Describe the plugin in package.json -Make sure your `package.json` has a `description` next to its `name` and `version`: +The generator writes `"description": "A VitNode plugin."`. Replace it with a sentence about your plugin, next to its `name` and `version`: ```json title="plugins/site-notes/package.json" { - "name": "@acme/site-notes", - "version": "1.2.0", - "description": "Pin short notes to any page of your community." + "name": "site-notes", + "version": "0.1.0", + "description": "Pin short notes to any page of your community." // [!code highlight] } ``` +The `name` is the plugin id. Keep it as the generator wrote it, because the id also names the API path, the translation namespace and the imports in your app's config files. + </Step> <Step> ### Set the title and icon -Create `src/plugin-info.ts` with the title and a [Lucide icon](https://lucide.dev/icons) name: +Plugins created with the generator already have `src/plugin-info.ts`, with the `puzzle` icon. Change the icon to any [Lucide icon](https://lucide.dev/icons) name, and the title if you like: -```ts title="src/plugin-info.ts" +```ts title="plugins/site-notes/src/plugin-info.ts" import type { PluginInfo } from '@vitnode/core/lib/plugin-manifest' export const pluginInfo: PluginInfo = { title: 'Site Notes', - icon: 'sticky-note', + icon: 'sticky-note', // [!code highlight] } ``` -Plugins created with the generator already have this file, with the `puzzle` icon. - </Step> <Step> -### Register the generated manifest +### Check that the manifest is registered -`vitnode build` writes `src/manifest.gen.ts`. It holds the `name`, `version`, `description`, `author` and `license` from `package.json` and imports the title and icon from `src/plugin-info.ts`. It is also the single source of the plugin id (`manifest.id`), so nothing else spells the id by hand. Pass it to both registrations: +`vitnode build` writes `src/manifest.gen.ts`. It holds the `name`, `version`, `description`, `author` and `license` from `package.json` and imports the title and icon from `src/plugin-info.ts`. It is also the single source of the plugin id (`manifest.id`), so nothing else spells the id by hand. -```tsx title="src/config.tsx" -import { buildPlugin } from '@vitnode/core/lib/plugin' - -import { manifest } from './manifest.gen' -import { routes } from './routes' +A generated plugin already passes `manifest` to both factories, so there is nothing to change. In `src/config.tsx` it sits next to the plugin's routes and translations: +```tsx title="plugins/site-notes/src/config.tsx" export const siteNotesPlugin = () => buildPlugin({ - manifest, + manifest, // [!code highlight] + localeFiles: { + en: 'site-notes/locales/en.json', + }, + messages, routes, }) ``` -```ts title="src/config.api.ts" -import { buildApiPlugin } from '@vitnode/core/api/lib/plugin' - -import { manifest } from '@/manifest.gen' +And in `src/config.api.ts`: +```ts title="plugins/site-notes/src/config.api.ts" export const siteNotesApiPlugin = () => buildApiPlugin({ - manifest, - modules: [], + manifest, // [!code highlight] + modules: [helloModule], }) ``` +If you rewrite either factory, keep `localeFiles` and `messages`. Without them the plugin loses its translations. + </Step> <Step> ### Build the plugin -Run the build in the plugin's folder, or keep `vitnode dev` running: +If `pnpm dev` is running at the workspace root, the plugin rebuilds when you save. Otherwise build it from the plugin's folder with its `build:plugins` script (which runs `vitnode build`): -```bash -vitnode build +<Tabs groupId='package-manager' persist items={['bun', 'pnpm', 'npm']} label='Build the plugin'> + +```bash tab="bun" +cd plugins/site-notes +bun run build:plugins +``` + +```bash tab="pnpm" +cd plugins/site-notes +pnpm build:plugins ``` -Both commands generate the file before TypeScript and tsdown run. Commit it, like `types/api-registry.gen.d.ts`. +```bash tab="npm" +cd plugins/site-notes +npm run build:plugins +``` + +</Tabs> + +The build regenerates `src/manifest.gen.ts` before TypeScript and tsdown run. Commit it, like `types/api-registry.gen.d.ts`. </Step> </Steps> ### Check the result -Restart your app, sign in to the AdminCP and open **System → Plugins**. Your plugin shows its icon, title, `@acme/site-notes`, the description and `1.2.0`. Search matches the title, the package ID and the description. +Restart your app, sign in to the AdminCP and open **System → Plugins**. Your plugin shows the sticky note icon, **Site Notes**, `site-notes`, your description and `0.1.0`. Search matches the title, the package ID and the description. ## Where each value comes from @@ -151,7 +171,7 @@ A side that reports no version is unknown, not a mismatch. ## Older plugins -`buildPlugin()` and `buildApiPlugin()` take the plugin id from `manifest`, so an older plugin that still passes `pluginId` needs `src/manifest.gen.ts` first: run `vitnode build` or `vitnode dev` once, then pass `manifest` instead. A plugin without `src/plugin-info.ts` gets its ID as the title and the default icon. Add it when convenient. +`buildPlugin()` and `buildApiPlugin()` take the plugin id from `manifest`, so an older plugin that still passes `pluginId` needs `src/manifest.gen.ts` first. Run its `build:plugins` or `dev` script once, then pass `manifest` instead. A plugin without `src/plugin-info.ts` gets its ID as the title and the default icon. Add it when convenient. A frontend inventory entry carrying the manifest of another package throws at startup: the API checks that `manifest.id` equals the entry's `id`. diff --git a/apps/web/content/docs/dev/plugins/create-generated-page.webp b/apps/web/content/docs/dev/plugins/create-generated-page.webp new file mode 100644 index 0000000000000000000000000000000000000000..21c8d5b7e2d3ba109cf38bcbd9857318cad0ac75 GIT binary patch literal 19148 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/plugins/create.mdx b/apps/web/content/docs/dev/plugins/create.mdx index 2157d9e5d8..bb8a6ccb33 100644 --- a/apps/web/content/docs/dev/plugins/create.mdx +++ b/apps/web/content/docs/dev/plugins/create.mdx @@ -1,161 +1,126 @@ --- -title: Create a Plugin -description: Scaffold a VitNode plugin, register its package in your host app, and serve its first TanStack Start page. +title: Create plugin +description: Generate the site-notes VitNode plugin with create-vitnode-app, see where it was registered, and open its first page and API endpoint. icon: PackagePlus --- -import { - BoxIcon, - DatabaseIcon, - LayoutDashboardIcon, - RouteIcon, -} from 'lucide-react' -import { File, Files, Folder } from 'fumadocs-ui/components/files' -import { Tab, Tabs } from 'fumadocs-ui/components/tabs' - -A plugin is the starting point for a VitNode feature. It keeps routes, API -modules, data, translations, and AdminCP extensions together in one installable -package. Nice boundaries; fewer archaeological digs later. - -<Callout type="warn" title="Plugins need a workspace"> - Run the generator from a repository with `turbo.json`. When creating an app, - turn on Turborepo first; a plain single-folder app has nowhere for - `plugins/*`. -</Callout> +import { File, Files, Folder } from "fumadocs-ui/components/files"; +import { Tab, Tabs } from "fumadocs-ui/components/tabs"; -<Steps> - <Step> - -### Generate the package +import { ImgDocs } from "@/components/fumadocs/img"; +import generatedPage from "./create-generated-page.webp"; -Run this at the workspace root and enter a package name such as -`@acme/site-notes` when prompted: +A plugin is where a VitNode feature lives. Its pages, API, database tables, translations and AdminCP screens ship together as one package. In this lesson you generate `site-notes`, a small plugin for short announcements, and open the page and endpoint it starts with. The rest of the beginner path grows this same plugin. -<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Create a VitNode plugin"> +## Before you begin -```bash tab="bun" -bun create vitnode-app@canary --plugin -``` +- A running app from [Setup](/docs/dev/setup), created **with Turborepo** (or as a Monorepo App). The plugin generator refuses to run without a `turbo.json` at the workspace root. -```bash tab="pnpm" -pnpm create vitnode-app@canary --plugin -``` - -```bash tab="npm" -npm create vitnode-app@canary -- --plugin -``` +<Steps> -</Tabs> +<Step> - </Step> - <Step> +### Generate the plugin -### Run/Restart it and visit the route +From the workspace root, run the generator with `--plugin` and the name `site-notes`: -<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Start the plugin in development"> +<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Create a VitNode plugin"> ```bash tab="bun" -bun dev +bun create vitnode-app@canary site-notes --plugin ``` ```bash tab="pnpm" -pnpm dev +pnpm create vitnode-app@canary site-notes --plugin ``` ```bash tab="npm" -npm run dev +npm create vitnode-app@canary site-notes -- --plugin ``` </Tabs> - </Step> - <Step> +Answer **Yes** to "Install dependencies?". The generator then installs and builds the plugin and reloads a running `dev` server. If you answered **No**, run `pnpm install` (or your manager's install), then restart `pnpm dev`. -### Check the generated page +The name becomes the package name, the **plugin id**, the first page's URL and the root key of its translations. Use a plain name. The generator drops a scope such as `@acme/site-notes` and refuses names core already serves, such as `admin`, `api` or `users`. -Visit the route printed in the console, such as `http://localhost:3000/site-notes`. You should see a page with a title and a link to the plugin's README. +</Step> -import { ImgDocs } from '@/components/fumadocs/img' -import generatedPageImage from './generated-page-image.png' +<Step> -<ImgDocs - src={generatedPageImage} - alt="Generated plugin page with title and link to README" -/> +### See what the generator changed - </Step> -</Steps> +The generator printed one line per file it registered the plugin in: + +```txt + + Registered in apps/web/src/vitnode.api.config.ts + + Registered in apps/web/src/vitnode.config.ts +``` -## What gets generated +`siteNotesPlugin()` is now in the `plugins` array of `vitnode.config.ts` (pages, translations, AdminCP navigation) and `siteNotesApiPlugin()` in `vitnode.api.config.ts` (API routes, permissions, background work). The app's `package.json` gained `"site-notes": "workspace:*"`. A Monorepo App gets the same lines for `apps/api`. + +The new package, with the files the next lessons change: <Files> - <Folder name="plugins" defaultOpen> - <Folder name="site-notes" defaultOpen> - <Folder name="src" defaultOpen> - <Folder name="api"> - <Folder name="modules/hello"> - <File name="hello.module.ts" /> - <File name="hello.module.test.ts" /> - <File name="hello.route.ts" /> - </Folder> - <File name="builders.ts" /> - </Folder> - <Folder name="locales"> - <File name="en.json" /> - <File name="index.ts" /> - </Folder> - <Folder name="pages"> - <File name="home-page.tsx" /> + <Folder name="plugins/site-notes" defaultOpen> + <Folder name="src" defaultOpen> + <Folder name="api" defaultOpen> + <File name="builders.ts" /> + <Folder name="modules/hello" defaultOpen> + <File name="hello.module.ts" /> + <File name="hello.route.ts" /> + <File name="hello.module.test.ts" /> </Folder> - <File name="config.api.ts" /> - <File name="config.tsx" /> - <File name="plugin-info.ts" /> - <File name="routes.ts" /> </Folder> - <File name="package.json" /> - <File name="README.md" /> - <File name="vitest.config.ts" /> + <Folder name="locales" defaultOpen> + <File name="en.json" /> + </Folder> + <Folder name="pages" defaultOpen> + <File name="home-page.tsx" /> + </Folder> + <File name="config.api.ts" /> + <File name="config.tsx" /> + <File name="routes.ts" /> + <File name="manifest.gen.ts" /> </Folder> + <Folder name="types"> + <File name="api-registry.gen.d.ts" /> + </Folder> + <File name="package.json" /> </Folder> </Files> -One page at `/site-notes` whose loader calls the plugin's own `hello` endpoint, its strings, and a Vitest test for the endpoint (`pnpm test` in the plugin). `src/plugin-info.ts` sets the plugin's title and Lucide icon for [the AdminCP plugin catalog](/docs/dev/plugins/catalog), and `src/api/builders.ts` binds `buildModule` and `buildRoute` to the plugin's generated `manifest`, so API files never spell the plugin id. The generator also registers the plugin in your apps' `vitnode.config.ts` and `vitnode.api.config.ts`, installs it and builds it. +- `src/config.api.ts` declares the API half; `src/config.tsx` and `src/routes.ts` the front-end half. +- `src/api/builders.ts` binds `buildModule` and `buildRoute` to the plugin, so API files never spell its id. +- Every build writes `src/manifest.gen.ts` and `types/api-registry.gen.d.ts`. Commit them; the second one is what types the plugin's own API calls (see [API modules](/docs/dev/plugins/api/modules#how-the-fetcher-knows-your-routes)). + +</Step> + +</Steps> -The plugin name must be a valid npm name and must not be one of core's routes: `admin`, `api`, `core`, `discover`, `files`, `login`, `notifications`, `register`, `search`, `users` or `vitnode`. +## Check the result -Check the result the way your app will load it: +Open `http://localhost:3000/site-notes`. The page says **Hello from your plugin**, and its card reads **Your plugin's API answered: Hello from site-notes!**. That text came from the plugin's API, which you can also call directly: ```bash -vitnode plugin validate site-notes +curl http://localhost:3000/api/site-notes/hello +``` + +```json +{ "message": "Hello from site-notes!" } +``` + +<ImgDocs + withoutBackground + className="*:max-w-full" + src={generatedPage} + alt="The generated Hello from your plugin page at /site-notes, with a card reading Your plugin's API answered: Hello from site-notes!" +/> + +To check the plugin the way the app loads it, run the validator from the app folder: + +```bash title="apps/web" +pnpm vitnode plugin validate site-notes ``` -See [Plugin CLI](/docs/dev/cli/plugins) for what validation checks. - -## Add the next capability - -<Cards> - <Card - icon={<RouteIcon />} - title="Plugin routes" - description="Add nested layouts, dynamic URLs, loaders, metadata, and guards." - href="/docs/dev/routing" - /> - <Card - icon={<BoxIcon />} - title="API modules" - description="Add another endpoint beside the generated one, with Zod-validated inputs." - href="/docs/dev/plugins/api/modules" - /> - <Card - icon={<DatabaseIcon />} - title="Database models" - description="Put Drizzle models and migrations beside the feature that owns them." - href="/docs/dev/database" - /> - <Card - icon={<LayoutDashboardIcon />} - title="Admin Control Panel" - description="Ship staff screens, navigation, permissions, and dashboard widgets." - href="/docs/dev/plugins/admin" - /> -</Cards> +It ends with `1 plugin valid`. See [Plugin commands](/docs/dev/cli/plugins) for everything it checks. diff --git a/apps/web/content/docs/dev/plugins/generated-page-image.png b/apps/web/content/docs/dev/plugins/generated-page-image.png deleted file mode 100644 index b9c7d213c27b925a03e0be48369e369f4ae1166a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104284 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 W=@+8TNf(IaMCH@!r&3PB@BRbfea@Kx diff --git a/apps/web/content/docs/dev/plugins/meta.json b/apps/web/content/docs/dev/plugins/meta.json index 2a3ee7b99f..2ddd434d72 100644 --- a/apps/web/content/docs/dev/plugins/meta.json +++ b/apps/web/content/docs/dev/plugins/meta.json @@ -4,12 +4,10 @@ "icon": "Plug", "defaultOpen": true, "pages": [ - "create", "build", "catalog", - "api", "admin", - "migrate-to-tsdown", + "!api", "..." ] } diff --git a/apps/web/content/docs/dev/plugins/migrate-to-tsdown.mdx b/apps/web/content/docs/dev/plugins/migrate-to-tsdown.mdx deleted file mode 100644 index 9d2154b164..0000000000 --- a/apps/web/content/docs/dev/plugins/migrate-to-tsdown.mdx +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Migrate a plugin from SWC to tsdown -description: Move an existing VitNode plugin or adapter package from SWC and tsc-alias to the tsdown build vitnode build now uses. -icon: ArrowRightLeft ---- - -import { Tab, Tabs } from 'fumadocs-ui/components/tabs' - -Plugins generated before the switch to tsdown compiled with `tsc`, SWC and `tsc-alias`. `vitnode build` and `vitnode dev` no longer run those tools, so an older plugin needs `tsdown` instead. Your sources, exports and import paths stay the same, and the migration takes about five minutes. - -<Steps> - <Step> - -### Swap the build dependencies - -In the plugin's folder, remove SWC and `tsc-alias`, then add tsdown: - -<Tabs groupId='package-manager' persist items={['bun', 'pnpm', 'npm']} label='Replace SWC with tsdown'> - -```bash tab="bun" -bun remove @swc/cli @swc/core tsc-alias -bun add -D tsdown -``` - -```bash tab="pnpm" -pnpm remove @swc/cli @swc/core tsc-alias -pnpm add -D tsdown -``` - -```bash tab="npm" -npm uninstall @swc/cli @swc/core tsc-alias -npm i -D tsdown -``` - -</Tabs> - -Keep `typescript`: the build still uses it for declarations and type checking. If a standalone API app in your workspace builds with `tsc-alias`, keep it there. Only plugin packages switched. - - </Step> - <Step> - -### Delete `.swcrc` - -Delete `.swcrc` from the plugin, and the `/.swcrc` line from its `.npmignore`. VitNode owns the build configuration, so there is nothing to replace it with. - - </Step> - <Step> - -### Check `package.json` - -The scripts should call the CLI, and `exports` should point into `./dist/src/`, which is how the CLI recognizes a plugin package now that `.swcrc` is gone: - -```json title="package.json" -{ - "type": "module", - "scripts": { - "build:plugins": "vitnode build", - "dev": "vitnode dev" - }, - "exports": { - "./locales/*.json": "./src/locales/*.json", - "./*": { - "import": "./dist/src/*.js", - "types": "./dist/src/*.d.ts", - "default": "./dist/src/*.js" - } - } -} -``` - -If your scripts still run `tsc`, `swc` and `tsc-alias` directly, replace them with these two. - - </Step> - <Step> - -### Build the plugin - -<Tabs groupId='package-manager' persist items={['bun', 'pnpm', 'npm']} label='Build the plugin'> - -```bash tab="bun" -bun run build:plugins -``` - -```bash tab="pnpm" -pnpm build:plugins -``` - -```bash tab="npm" -npm run build:plugins -``` - -</Tabs> - -The first build removes leftovers from the old build that no source produces anymore, such as a stray `dist/vitest.config.d.ts`. Files outside `dist/src` are not touched. - - </Step> -</Steps> - -## Check the result - -Validate the plugin from the app that uses it, through the same loaders the app runs: - -```bash -vitnode plugin validate <plugin-name> -``` - -`dist/src` holds one `.js`, `.d.ts` and `.d.ts.map` per module, plus copies of your JSON and CSS. Then start `vitnode dev` in the plugin and save a file: the app reloads with the change. - -## Troubleshooting - -| Message | Fix | -| ---------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| `... is not a VitNode app, API or plugin package.` | Add `tsconfig.build.json`, or point `exports` into `./dist/src/` | -| `Could not find "tsdown" from ...` | Install `tsdown` in the plugin as shown in the first step | -| `Build failed: tsc exited with code 2` | A type error. The build prints it; the old build failed on it too | -| A file you put in `dist/src` by hand disappears | Move it to `src`. Non-code files there are copied to `dist/src` on every build | - -[Build and watch a plugin](/docs/dev/plugins/build) explains what the new build does with each file. diff --git a/apps/web/content/docs/dev/plugins/page-notes-list.webp b/apps/web/content/docs/dev/plugins/page-notes-list.webp new file mode 100644 index 0000000000000000000000000000000000000000..d40d7343efdebd25ab8b58d798c08ffe49d85b99 GIT binary patch literal 19454 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 U#oPbXZJ=2O*e{}gHvBLD0Zae{Q~&?~ literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/plugins/page.mdx b/apps/web/content/docs/dev/plugins/page.mdx new file mode 100644 index 0000000000..4df97fee9b --- /dev/null +++ b/apps/web/content/docs/dev/plugins/page.mdx @@ -0,0 +1,153 @@ +--- +title: Plugin page +description: Add a page to the site-notes VitNode plugin that loads notes from the plugin API with the typed fetcher, renders them server-side, and handles an empty list. +icon: PanelsTopLeft +--- + +import { ImgDocs } from "@/components/fumadocs/img"; +import notesPage from "./page-notes-list.webp"; + +A plugin declares its pages in `src/routes.ts`, and the app serves them without route files of its own. In this lesson you add `/site-notes/notes`, whose loader fetches the notes from the endpoint you built and renders them on the server. + +## Before you begin + +- The `notes` module from [API routes](/docs/dev/plugins/api/routes), with `pnpm dev` running. + +<Steps> + +<Step> + +### Create the page + +Create `src/pages/notes-page.tsx`: + +```tsx title="plugins/site-notes/src/pages/notes-page.tsx" +import type { PluginRoutePageProps } from "@vitnode/core/routing"; + +import { definePluginRoute } from "@vitnode/core/routing"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { useTranslations } from "use-intl"; + +import { manifest } from "@/manifest.gen"; + +const loadNotes = async () => { + const response = await fetcher({ + plugin: manifest.id, + method: "get", + module: "notes", + path: "/", + }); + if (!response.ok) throw new Error("Could not load notes."); + + return await response.json(); +}; + +type NotesPageData = Awaited<ReturnType<typeof loadNotes>>; + +export const route = definePluginRoute<NotesPageData>({ + load: loadNotes, +}); + +const NotesPage = ({ loaderData: notes }: PluginRoutePageProps<NotesPageData>) => { + const t = useTranslations("site-notes.notes"); + + return ( + <main className="container mx-auto flex max-w-2xl flex-col gap-6 p-4"> + <h1 className="text-2xl font-semibold tracking-tight text-balance"> + {t("title")} + </h1> + + {notes.length === 0 ? ( + <p className="text-muted-foreground leading-relaxed">{t("empty")}</p> + ) : ( + <ul className="flex flex-col gap-3"> + {notes.map(note => ( + <li className="bg-card rounded-lg border p-4" key={note.id}> + <h2 className="font-medium text-balance">{note.title}</h2> + <p className="text-muted-foreground leading-relaxed text-pretty"> + {note.body} + </p> + </li> + ))} + </ul> + )} + </main> + ); +}; + +export default NotesPage; +``` + +A page file has two exports, and VitNode reads each one by name: + +| Export | What it is | Required | +| --- | --- | --- | +| `export default` | The component that renders the page. | Yes. Without it, the app stops with _does not export a component as its default export_. | +| `export const route` | How the page behaves: `load`, `head`, `breadcrumb`, `notFound`, `parseSearch`. | No. A page with no data or title of its own skips it. | + +They live in the same file so that `lazy()` in the next step loads the loader and the component in one chunk, and `routes.ts` stays a short list of paths. `definePluginRoute` only adds types. `NotesPageData` tells `load` what to return and the component what `loaderData` holds. [Route module](/docs/dev/routing/route-module) lists everything `route` accepts. + +- **`fetcher`** runs on the server during the first render and in the browser on client navigations, with the same call. It infers `module`, `path` and the response type from your routes, so a typo is a compile error. +- **`load`** runs before the page renders, and its result arrives as `loaderData`. The HTML already contains the notes. +- **A failed request throws**, and the app shows its error page instead of an empty list. An empty array is a real answer, so the page says "No notes yet." for it. + +</Step> + +<Step> + +### Declare the route + +Open `src/routes.ts` and add the page after the generated one: + +```ts title="plugins/site-notes/src/routes.ts" +export const routes = definePluginRoutes([ + page("/site-notes", { + component: lazy(() => import("./pages/home-page")), + messages: [`${manifest.id}.home`], + }), + + // [!code ++:4] + page("/site-notes/notes", { + component: lazy(() => import("./pages/notes-page")), + messages: ["site-notes.notes"], + }), +]); +``` + +`lazy()` keeps the page in its own chunk. `messages` names the translation namespace the page renders, so its strings load with the code. + +</Step> + +<Step> + +### Add the strings + +Add a `notes` group under the plugin's root key in `src/locales/en.json`. This excerpt shows only the new keys; keep `home`: + +```json title="plugins/site-notes/src/locales/en.json" +{ + "site-notes": { + "notes": { + "title": "Site notes", + "empty": "No notes yet." + } + } +} +``` + +</Step> + +</Steps> + +## Check the result + +Open `http://localhost:3000/site-notes/notes`. **Site notes** lists **Welcome to site notes** and **Office closed on Friday**. View the page source. Both titles are in the HTML, because the loader ran on the server. + +<ImgDocs + withoutBackground + className="*:max-w-full" + src={notesPage} + alt="The Site notes page at /site-notes/notes listing the notes Welcome to site notes and Office closed on Friday, each in a bordered card" +/> + +Lists that refetch on the client, search parameters and caching build on this page; see [Fetching](/docs/dev/fetcher) and [Routing](/docs/dev/routing). diff --git a/apps/web/content/docs/dev/routing/breadcrumbs.mdx b/apps/web/content/docs/dev/routing/breadcrumbs.mdx index 6368b74da2..1155f20613 100644 --- a/apps/web/content/docs/dev/routing/breadcrumbs.mdx +++ b/apps/web/content/docs/dev/routing/breadcrumbs.mdx @@ -1,173 +1,152 @@ --- title: Breadcrumbs -description: Contribute one localized crumb per plugin route and let VitNode assemble the trail for public pages and AdminCP screens. +description: Add localized crumbs to the VitNode breadcrumb trail from plugin routes, layouts, AdminCP pages and the app's own file routes. icon: Milestone --- -import { DatabaseIcon, LayoutDashboardIcon, MapIcon } from 'lucide-react' -import { Tab, Tabs } from 'fumadocs-ui/components/tabs' - -VitNode renders breadcrumb trails automatically in both the public site header and the AdminCP shell. **A route joins the trail by declaring a crumb**, and the trail reads parent to child: +VitNode renders the breadcrumb trail in the public header and in the AdminCP shell. Each route that declares a crumb adds one entry, and the trail reads from parent to child: ```text -Home / Notes / Getting Started +Site notes / Office closed on Friday ``` -A route declares only what its own crumb should display. VitNode manages the rest: accessible `<nav>` markup, separators, locale-aware links, and `aria-current="page"` semantics. No manual link construction, no duplicated trails, and zero drama. +A route declares only the label of its own crumb. The shell renders the `<nav>` landmark, the separators, the locale-aware links and `aria-current="page"` on the last crumb. -## Static crumb +## Add a crumb to a plugin route -Declare a breadcrumb function directly inside `definePluginRoute`. Because it renders within the route's declared namespaces, `useTranslations` works out of the box: +Set `breadcrumb` in the page module's `route` to a component that returns the label. It renders inside the route's declared `messages`, so `useTranslations` works: -```tsx title="plugins/site-notes/src/pages/notes-layout.tsx" -import { definePluginRoute } from '@vitnode/core/routing' +```tsx title="plugins/site-notes/src/pages/notes-page.tsx" +import { defineRoute } from '@vitnode/core/tanstack/plugin-routes' import { useTranslations } from 'use-intl' -// [!code ++:7] -export const route = definePluginRoute({ - breadcrumb: () => { - const t = useTranslations('@acme/site-notes.home') - - return t('title') - }, -}) +const NotesCrumb = () => { + const t = useTranslations('site-notes.notes') -const NotesLayout = ({ children }: { children: React.ReactNode }) => { - return ( - <div className="container mx-auto flex max-w-4xl flex-col gap-6 p-4"> - <header className="border-b pb-4"> - <h1 className="text-2xl font-bold tracking-tight text-balance"> - Notes - </h1> - </header> - <main>{children}</main> - </div> - ) + return t('title') } -export default NotesLayout +export const route = defineRoute({ + breadcrumb: NotesCrumb, // [!code ++] +}) ``` -{/* Image prompt: Modern web header showing breadcrumb trail Home / Notes with Notes highlighted in dark theme, 1440x900. */} +{/* Image prompt: The public header of a VitNode app at /site-notes/notes showing the breadcrumb trail with the single crumb Site notes as the current page. Dark theme, 1440x900. */} -## Dynamic crumb from loader +## Use loader data in a crumb -When a route is dynamic (such as `/notes/:slug`), its breadcrumb can read directly from the route's `loaderData`. This ensures the trail shows human-readable titles instead of raw IDs, without firing a second network request: +A crumb receives `{ loaderData, params, search }`, the same values the page gets. On a dynamic page, show the record's name instead of its id, without a second request. This extends the note page from [Add a route](/docs/dev/routing/first-route), where `loadNote` and `NotePageData` are defined: -```tsx title="plugins/site-notes/src/pages/note-page-slug.tsx" -import { - definePluginRoute, - type PluginRoutePageProps, -} from '@vitnode/core/routing' -import { useTranslations } from 'use-intl' +```tsx title="plugins/site-notes/src/pages/note-page.tsx" +export const route = defineRoute({ + load: async ({ context, params }) => + await loadNote(context.queryClient, params.id), + head: ({ loaderData }) => ({ + title: loaderData?.title, + description: loaderData?.body, + }), + breadcrumb: ({ loaderData }) => loaderData.title, // [!code ++] +}) +``` -interface Note { - content: string - title: string -} +Declare `breadcrumb` after `load`, so TypeScript types `loaderData` from the loader. A crumb sits under every crumb of the routes above it. When the list and the note page are siblings rather than a [layout](/docs/dev/routing/layouts) and its child, the trail shows only the note. Put both under a `layout()` with its own crumb to get `Site notes / Office closed on Friday`. -export const route = definePluginRoute({ - load: async ({ params }): Promise<Note> => { - return { - content: 'Loaded securely from your plugin loader.', - title: `Note: ${params.slug}`, - } - }, - head: ({ loaderData, params }) => ({ - title: loaderData?.title ?? params.slug, - }), - // [!code ++:5] - breadcrumb: ({ loaderData }) => { - const t = useTranslations('@acme/site-notes.home') +## Leave a route out - return `${t('note')}: ${loaderData.title}` - }, -}) +A route without `breadcrumb` adds nothing, and the crumbs above it stay. Write `breadcrumb: false` (or `null`) to make that explicit, for example on an `index()` page whose layout already names the screen. The trail then ends at the deepest route that declares a crumb, and that crumb gets `aria-current="page"`. -const NotePage = ({ loaderData }: PluginRoutePageProps<Note>) => { - return ( - <article className="container mx-auto flex max-w-3xl flex-col gap-4 p-4"> - <h2 className="text-3xl font-semibold tracking-tight text-balance"> - {loaderData.title} - </h2> - <p className="text-muted-foreground leading-relaxed text-pretty"> - {loaderData.content} - </p> - </article> - ) -} +## Several crumbs from one route -export default NotePage +Some pages know more of the trail than their own label. A forum topic, for example, can list every parent forum from its loader data. Declare a **group** with `routeBreadcrumbGroup` from `@vitnode/core/tanstack/plugin-routes`, and render the items yourself with the breadcrumb components: + +```tsx title="plugins/site-notes/src/pages/note-page.tsx" +import { + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbPage, + BreadcrumbSeparator, +} from '@vitnode/core/components/ui/breadcrumb' +import { HrefLink } from '@vitnode/core/tanstack/link' +import { defineRoute, routeBreadcrumbGroup } from '@vitnode/core/tanstack/plugin-routes' + +export const route = defineRoute({ + load: async ({ context, params }) => + await loadNote(context.queryClient, params.id), + breadcrumb: routeBreadcrumbGroup<NotePageData>(({ loaderData }) => ( + <> + <BreadcrumbItem> + <BreadcrumbLink render={<HrefLink href="/site-notes/notes" />}> + Site notes + </BreadcrumbLink> + </BreadcrumbItem> + <BreadcrumbSeparator /> + <BreadcrumbItem> + <BreadcrumbPage>{loaderData.title}</BreadcrumbPage> + </BreadcrumbItem> + </> + )), +}) ``` -The inline `breadcrumb` receives `{ loaderData, params, search }`—the exact same typed context passed to `head` and the page component. +The shell adds the separator before the group. Inside it, you add the separators between your own items and mark the last one with `BreadcrumbPage`. Translate the labels with `useTranslations` in a small component, as in the first example. -{/* Image prompt: Header breadcrumb trail showing Home / Notes / Note: getting-started with the final crumb active, 1440x900. */} +<Callout type="warn" title="A single crumb returns only its label"> + A plain `breadcrumb` component returns text or an inline element, such as an + icon with text. Never render `<nav>`, links or separators in it, because the + shell already does. Only a group renders `BreadcrumbItem` and friends. +</Callout> -## Omitting a route +## AdminCP crumbs -Silence is the default: a route that declares no `breadcrumb` adds none, and the crumbs above it stay intact. Set `breadcrumb: false` when you want that silence to be deliberate—an `index()` page whose parent layout already names the screen, say: +An AdminCP route declares a crumb the same way. To label the crumbs from the AdminCP navigation, so they match the sidebar, use `adminBreadcrumb` from `@vitnode/core/tanstack/admin`. `segments` is the path below `/admin`: -```tsx title="plugins/site-notes/src/pages/notes-index-page.tsx" +```tsx title="plugins/site-notes/src/pages/admin-notes-page.tsx" import { definePluginRoute } from '@vitnode/core/routing' +import { adminBreadcrumb } from '@vitnode/core/tanstack/admin' -// [!code ++:3] export const route = definePluginRoute({ - breadcrumb: false, + breadcrumb: adminBreadcrumb({ segments: ['site-notes'] }), // [!code ++] }) +``` + +Each segment gets the title of the navigation entry whose link matches it, and a segment with no entry gets a readable version of its name. Pass `overrideLastLabel` when the page knows a better name for the last crumb, such as a record's title. The AdminCP does not look labels up on its own, so a route without `breadcrumb` adds no crumb there either. + +## Crumbs on the app's own routes + +A file route in your app declares its crumb as `staticData.breadcrumb`. App routes do not get plugin `messages`, so a crumb that renders strings wraps itself in `RouteMessages` from `@vitnode/core/tanstack/i18n`: -const NotesIndexPage = () => { - return ( - <div> - <p className="text-muted-foreground leading-relaxed text-pretty"> - Welcome to Site Notes. - </p> - </div> - ) +```tsx title="apps/web/src/site/pricing/breadcrumb.tsx" +import { RouteMessages } from '@vitnode/core/tanstack/i18n' +import { useTranslations } from 'use-intl' + +const PricingLabel = () => { + const t = useTranslations('site.pricing') + + return t('title') } -export default NotesIndexPage +export const PricingBreadcrumb = () => ( + <RouteMessages namespaces={['site.pricing']}> + <PricingLabel /> + </RouteMessages> +) ``` -Both spellings do the same thing. The trail simply ends at the deepest route that does declare a crumb, and that crumb is the one marked `aria-current="page"`. +```tsx title="apps/web/src/routes/_main/pricing.tsx" +import { createFileRoute } from '@tanstack/react-router' -## Trail behavior +import { PricingBreadcrumb } from '@/site/pricing/breadcrumb' +import { PricingPage } from '@/site/pricing/pricing-page' -| Declaration | Behavior in breadcrumb trail | -| :---------------------- | :-------------------------------------------------------------------------- | -| `breadcrumb: Component` | Contributes one crumb with access to `loaderData`, `params`, and `search` | -| `breadcrumb: false` | Omitted from trail; parent crumbs remain visible | -| Omitted / `undefined` | The default: omitted from trail | -| Intermediate crumbs | Automatically rendered as locale-aware links to their respective route URLs | -| Leaf crumb (last item) | Rendered as text without a link and marked with `aria-current="page"` | +export const Route = createFileRoute('/_main/pricing')({ + staticData: { breadcrumb: <PricingBreadcrumb /> }, // [!code ++] + component: PricingPage, +}) +``` -<Callout type="warn" title="Return text or inline elements, not a trail"> - A breadcrumb component should return text or an inline element (like an icon with text). Never render `<Breadcrumb>`, `<nav>`, links, or separators—the shell creates the landmark and manages links and separators for you. -</Callout> +`site.pricing` is a namespace from your app's own locale files; see [Your app's own strings](/docs/dev/i18n#your-apps-own-strings). -<Callout type="info" title="AdminCP labels"> - In the AdminCP, breadcrumbs seamlessly coordinate with the admin navigation - declared in `admin/nav.tsx`. When a route matches a sidebar item, its - translated label is resolved automatically. -</Callout> +## Related -<Cards> - <Card - icon={<MapIcon />} - title="Plugin Routes" - description="Declare the route tree where layouts, pages, and dynamic segments define crumbs." - href="/docs/dev/routing" - /> - <Card - icon={<DatabaseIcon />} - title="Data Fetching" - description="Fetch data in loaders so crumbs and pages receive typed loaderData." - href="/docs/dev/fetcher" - /> - <Card - icon={<LayoutDashboardIcon />} - title="AdminCP Pages" - description="Mount plugin screens, navigation links, and permissions in the AdminCP." - href="/docs/dev/plugins/admin" - /> -</Cards> +- [Layouts](/docs/dev/routing/layouts): one crumb for a layout and all its pages. +- [AdminCP pages](/docs/dev/plugins/admin): a complete AdminCP screen. diff --git a/apps/web/content/docs/dev/routing/first-route.mdx b/apps/web/content/docs/dev/routing/first-route.mdx new file mode 100644 index 0000000000..937f20cad6 --- /dev/null +++ b/apps/web/content/docs/dev/routing/first-route.mdx @@ -0,0 +1,209 @@ +--- +title: Add a route +description: Add a dynamic /site-notes/notes/:id page to a VitNode plugin, with a loader that fetches one note, sets the page title, and answers 404 for a missing note. +icon: FilePlus +--- + +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' + +A plugin page with a URL parameter needs three things: a declaration in `routes.ts`, a loader that reads the parameter, and an answer for a record that does not exist. In this guide you add `/site-notes/notes/:id`, which shows one note, uses its title as the page title, and answers `404` for an unknown id. + +## Before you begin + +- The `/site-notes/notes` page from [Plugin page](/docs/dev/plugins/page). +- The `GET /api/site-notes/notes/{id}` route from [API routes](/docs/dev/plugins/api/routes), with `pnpm dev` running. + +<Steps> + +<Step> + +### Add the TanStack packages + +The page loads the note through TanStack Query (`queryOptions`, `QueryClient`) and throws `notFound()` from TanStack Router. A generated plugin depends on neither, so add both. Run this in the plugin's folder, `plugins/site-notes`: + +<Tabs groupId="package-manager" persist items={['bun', 'pnpm', 'npm']} label="Install the TanStack packages"> + +```bash tab="bun" +bun add @tanstack/react-query @tanstack/react-router +``` + +```bash tab="pnpm" +pnpm add @tanstack/react-query @tanstack/react-router +``` + +```bash tab="npm" +npm install @tanstack/react-query @tanstack/react-router +``` + +</Tabs> + +Both now appear under `dependencies` in `plugins/site-notes/package.json`. + +</Step> + +<Step> + +### Create the page module + +Create `src/pages/note-page.tsx`: + +```tsx title="plugins/site-notes/src/pages/note-page.tsx" +import type { QueryClient } from "@tanstack/react-query"; +import type { PluginRoutePageProps } from "@vitnode/core/routing"; + +import { queryOptions } from "@tanstack/react-query"; +import { notFound } from "@tanstack/react-router"; +import { LOADER_DATA_QUERY_META } from "@vitnode/core/lib/query-client"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { defineRoute } from "@vitnode/core/tanstack/plugin-routes"; +import { useTranslations } from "use-intl"; + +import { manifest } from "@/manifest.gen"; + +const noteQueryOptions = (id: number) => + queryOptions({ + queryKey: [manifest.id, "notes", id], + queryFn: async () => { + const response = await fetcher({ + plugin: manifest.id, + method: "get", + module: "notes", + path: "/{id}", + args: { params: { id } }, + }); + if (response.status === 404) return null; + if (!response.ok) throw new Error("Could not load the note."); + + return await response.json(); + }, + }); + +const loadNote = async (queryClient: QueryClient, idParam: string) => { + const id = Number(idParam); + if (!Number.isInteger(id) || id < 1) throw notFound(); + + const note = await queryClient.query({ + ...noteQueryOptions(id), + meta: LOADER_DATA_QUERY_META, + staleTime: "static", + }); + if (!note) throw notFound(); + + return note; +}; + +type NotePageData = Awaited<ReturnType<typeof loadNote>>; + +export const route = defineRoute({ + load: async ({ context, params }) => + await loadNote(context.queryClient, params.id), + head: ({ loaderData }) => ({ + title: loaderData?.title, + description: loaderData?.body, + }), +}); + +const NotePage = ({ loaderData: note }: PluginRoutePageProps<NotePageData>) => { + const t = useTranslations("site-notes.notes"); + + return ( + <main className="container mx-auto flex max-w-2xl flex-col gap-4 p-4"> + <HrefLink className="text-muted-foreground text-sm" href="/site-notes/notes"> + {t("back")} + </HrefLink> + <h1 className="text-2xl font-semibold tracking-tight text-balance"> + {note.title} + </h1> + <p className="leading-relaxed text-pretty">{note.body}</p> + </main> + ); +}; + +export default NotePage; +``` + +- **`params.id`** is the `:id` segment of the URL, always a string. The API expects a positive number, so the loader converts it and answers `notFound()` for anything else instead of sending a request that would fail validation. +- **`defineRoute`** gives `load` a `context.queryClient`. Loading through the query cache with `staleTime: "static"` means a hover preload and the click that follows share one request. `LOADER_DATA_QUERY_META` tells the cache not to send the note to the browser a second time, because the loader's result already travels with the HTML. See [Preloading](/docs/dev/routing/preloading). +- **`throw notFound()`** stops the loader and renders the app's 404 page with a real `404` status. A `404` from the API becomes `null`, so it takes the same path. +- **`head`** runs after `load`, so it can use the note for the `<title>` and description. Declare `load` above `head`, or TypeScript cannot type `loaderData`. + +</Step> + +<Step> + +### Declare the route + +Open `src/routes.ts` and add the page after `/site-notes/notes`: + +```ts title="plugins/site-notes/src/routes.ts" + page("/site-notes/notes", { + component: lazy(() => import("./pages/notes-page")), + messages: ["site-notes.notes"], + }), + + // [!code ++:4] + page("/site-notes/notes/:id", { + component: lazy(() => import("./pages/note-page")), + messages: ["site-notes.notes"], + }), +``` + +`:id` marks a dynamic segment. The page reuses the `site-notes.notes` namespace, because its only string sits next to the list's strings. + +</Step> + +<Step> + +### Add the string + +Add `back` to the `notes` group in `src/locales/en.json`. Keep the keys you already have: + +```json title="plugins/site-notes/src/locales/en.json" +{ + "site-notes": { + "notes": { + "title": "Site notes", + "empty": "No notes yet.", + "back": "All notes" // [!code ++] + } + } +} +``` + +</Step> + +<Step> + +### Link the list to the page + +In `src/pages/notes-page.tsx`, import `HrefLink` and wrap each note's title in a link: + +```tsx title="plugins/site-notes/src/pages/notes-page.tsx" +import { HrefLink } from "@vitnode/core/tanstack/link"; // [!code ++] + +// inside notes.map(...) +<h2 className="font-medium text-balance"> + {/* [!code ++:3] */} + <HrefLink className="hover:underline" href={`/site-notes/notes/${note.id}`}> + {note.title} + </HrefLink> +</h2> +``` + +A plugin page cannot use the router's typed `<Link to>`, because the app's route tree does not know plugin URLs at compile time. [Navigation](/docs/dev/routing/navigation#link-from-a-plugin-page) explains `HrefLink`. + +</Step> + +</Steps> + +## Check the result + +1. Open `http://localhost:3000/site-notes/notes` and click a note's title. The note opens at `/site-notes/notes/<id>`, and the browser tab shows the note's title. +2. Click **All notes** to go back to the list. +3. Open `http://localhost:3000/site-notes/notes/999999` and `http://localhost:3000/site-notes/notes/abc`. Both show the app's not-found page inside the normal header. + +## Related + +- [Breadcrumbs](/docs/dev/routing/breadcrumbs): show the note's title in the breadcrumb trail. +- [Route module](/docs/dev/routing/route-module): every option a page module accepts. diff --git a/apps/web/content/docs/dev/routing/index.mdx b/apps/web/content/docs/dev/routing/index.mdx index ed371b4d7d..abf5bbea23 100644 --- a/apps/web/content/docs/dev/routing/index.mdx +++ b/apps/web/content/docs/dev/routing/index.mdx @@ -1,641 +1,79 @@ --- title: Routing -description: Declare plugin-owned URLs as a nested route tree with lazy pages, loaders, metadata, messages, and breadcrumbs. +description: In a VitNode plugin, routes.ts declares the URLs and lazy page modules render them. This page explains how, and maps every routing task to the guide that covers it. icon: Route --- -import { - DatabaseIcon, - LanguagesIcon, - LayoutDashboardIcon, - LoaderCircleIcon, - MilestoneIcon, - TriangleAlertIcon, -} from 'lucide-react' -import { Tab, Tabs } from 'fumadocs-ui/components/tabs' import { ImgDocs } from '@/components/fumadocs/img' import generatedPageImage from './generated-page-image.png' -Start by [creating a plugin](/docs/dev/plugins/create). A plugin's `src/routes.ts` -is its promise to the app: which URLs it owns, and which module renders each one. -The host turns that promise into lazy TanStack Start routes—no copied page files, -no drama. +A plugin declares its pages in `src/routes.ts`, and the app that installs it serves them. The host turns each declaration into a lazy TanStack Start route, so a plugin never copies page files into the app and an app never imports a plugin's pages by hand. -## Simple route +## How a plugin route works -You can declare a single page with a path and a lazy component: +A route has two halves. + +**The declaration** lives in `src/routes.ts`. It names the URL, the page module and the translation namespaces the page renders. This is the routes file the plugin generator writes for `site-notes`: ```ts title="plugins/site-notes/src/routes.ts" import { definePluginRoutes, lazy, page } from '@vitnode/core/routing' +import { manifest } from './manifest.gen' + export const routes = definePluginRoutes([ - page('/notes', { - component: lazy(() => import('./pages/note-page')), - messages: ['@acme/site-notes.home'], + page('/site-notes', { + component: lazy(() => import('./pages/home-page')), + messages: [`${manifest.id}.home`], }), ]) ``` -```tsx title="plugins/site-notes/src/pages/note-page.tsx" -import { useTranslations } from 'use-intl' - -const NotePage = () => { - const t = useTranslations('@acme/site-notes.home') - - return ( - <div className="container mx-auto max-w-2xl p-4"> - <h1 className="text-2xl font-semibold tracking-tight text-balance"> - {t('title')} - </h1> - </div> - ) -} - -export default NotePage -``` - -The `messages` array specifies which translation namespaces this page requires. A namespace must always be a **dotted path** into your plugin's message tree (such as `@acme/site-notes.home` rather than the bare plugin ID), allowing VitNode to only download the strings that this screen renders. For more details on message structure and limits, see the [Namespaces](/docs/dev/i18n/namespaces) and [Translating Pages](/docs/dev/i18n/pages) guides. +Open `http://localhost:3000/site-notes` and the generated page renders inside the app's layout: <ImgDocs src={generatedPageImage} - alt="Generated plugin page with title and link to README" + alt="The generated site-notes page at /site-notes, with the heading Hello from your plugin and a card showing the plugin API's answer, Hello from site-notes!" /> -### Render without the main layout - -Every route picks a shell with `area`. The default is `'main'`, which frames the -page in the host's public layout—header, breadcrumbs, navigation, footer. - -Set `area: 'blank'` for a page that should stand on its own: an embed, a kiosk -screen, a print view, a checkout step with nothing to wander off to. - -```ts title="plugins/site-notes/src/routes.ts" -import { definePluginRoutes, lazy, page } from '@vitnode/core/routing' - -export const routes = definePluginRoutes([ - // [!code ++:4] - page('/notes/embed', { - area: 'blank', - component: lazy(() => import('./pages/notes-embed-page')), - }), -]) -``` - -A blank page is mounted at the root of the host's route tree, so it still gets -the document, the theme, the providers, and translations. It simply has no -chrome around it—which also means no breadcrumb trail, so give the page its own -way back. - -| `area` | Renders inside | -| :-------- | :--------------------------------------------------------- | -| `'main'` | The public layout: header, breadcrumbs, footer (default) | -| `'blank'` | Nothing but the app root—no chrome at all | -| `'admin'` | The [AdminCP shell](#admincp-routes): sidebar, staff guard | - -Only a top-level route chooses an area. Every route nested in a `layout()` -renders in the shell its layout renders in, so it may not declare one of its -own. - -## Dynamic route - -Use `:slug` for dynamic segments. VitNode converts it to TanStack Start's -internal `$slug` spelling while keeping your plugin portable. - -```ts title="plugins/site-notes/src/routes.ts" -import { definePluginRoutes, lazy, page } from '@vitnode/core/routing' - -export const routes = definePluginRoutes([ - page('/notes/:slug', { - component: lazy(() => import('./pages/note-page-slug')), - }), -]) -``` - -```tsx title="plugins/site-notes/src/pages/note-page-slug.tsx" -import type { PluginRoutePageProps } from '@vitnode/core/routing' - -const NotePage = ({ params }: PluginRoutePageProps) => { - return ( - <article className="container mx-auto max-w-3xl p-4"> - <h2 className="text-3xl font-semibold tracking-tight text-balance"> - {params.slug} - </h2> - </article> - ) -} - -export default NotePage -``` - -{/* Image prompt: Browser showing /notes/getting-started with a clean modern page heading 'getting-started' in dark theme, max-w-3xl container, 1440x900. */} - -## Metadata (Head) - -The `head` function returns the page's `<title>` and `<meta>` tags. It runs -after the loader, so it can use the data to make a unique title, description, and other SEO tags. - -```tsx title="plugins/site-notes/src/pages/note-page-slug.tsx" -import { - // [!code ++:1] - definePluginRoute, - type PluginRoutePageProps, -} from '@vitnode/core/routing' - -// [!code ++:6] -export const route = definePluginRoute({ - head: ({ params }) => ({ - description: 'A note delivered by the Site notes plugin.', - title: params.slug, - }), -}) - -const NotePage = ({ params }: PluginRoutePageProps) => { - return ( - <article className="container mx-auto max-w-3xl p-4"> - <h2 className="text-3xl font-semibold tracking-tight text-balance"> - {params.slug} - </h2> - </article> - ) -} - -export default NotePage -``` - -### Localizing metadata - -`head` runs outside the React component tree—during SSR and on every -navigation—so hooks like `useTranslations` cannot reach it. Instead, `head` -receives `t`, a translator over the namespaces the route declared in `messages`: - -```ts title="plugins/site-notes/src/routes.ts" -page('/notes/:slug', { - component: lazy(() => import('./pages/note-page-slug')), - // [!code ++:1] - messages: ['@acme/site-notes.home'], -}) -``` - -```tsx title="plugins/site-notes/src/pages/note-page-slug.tsx" -import { definePluginRoute } from '@vitnode/core/routing' - -export const route = definePluginRoute({ - // [!code ++:4] - head: ({ params, t }) => ({ - description: t('@acme/site-notes.home.desc'), - title: `${t('@acme/site-notes.home.note')}: ${params.slug}`, - }), -}) -``` - -Keys are **full dotted paths**, namespace included. A component scopes itself -once with `useTranslations('@acme/site-notes.home')` and then asks for -`t('title')`; in `head` there is no component to scope, so the whole key is -spelled out. +**The page module** is the file `lazy()` points at. Its default export is the page component. An optional `route` export adds a loader, metadata, a breadcrumb and a not-found screen. The smallest useful one looks like this: -Values interpolate the same way they do in a component: +```tsx title="plugins/site-notes/src/pages/about-page.tsx" +import { defineRoute } from '@vitnode/core/tanstack/plugin-routes' -```tsx -head: ({ t }) => ({ - title: t('@acme/site-notes.home.greeting', { name: 'Ada' }), +export const route = defineRoute({ + head: () => ({ title: 'About site notes' }), }) -``` - -<Callout type="info" title="No extra request"> - The route's namespaces are already fetched before `head` runs—the loader warms - them, and `head` runs after the loader—so translating metadata costs a cache - read, not a round trip. -</Callout> - -`load` receives the same `t`, for a title that depends on data you are already -fetching: -```tsx title="plugins/site-notes/src/pages/note-page-slug.tsx" -export const route = definePluginRoute({ - load: async ({ params, t }) => { - const note = await findNote(params.slug) +const AboutPage = () => <h1>About site notes</h1> - return { heading: `${t('@acme/site-notes.home.note')}: ${note.title}` } - }, - head: ({ loaderData }) => ({ title: loaderData?.heading }), -}) +export default AboutPage ``` -<Callout type="warn" title="Declare the namespace first"> - Calling `t` on a route that declares no `messages` throws, naming the - namespace to add. Echoing the key back instead would ship - `@acme/site-notes.home.title` into a `<title>`, where nothing would surface it - until it showed up in a search result. -</Callout> - -## Loaders - -Fetch data in `load`. It runs on the server during SSR and on the client for subsequent navigations. Data returned from `load` is automatically passed to both `head` (for dynamic metadata) and the page component as `loaderData`. - -<Callout type="info" title="Declare load above head"> - Always declare `load` **above** `head` in `definePluginRoute`. TypeScript - infers the type of `loaderData` in `head` directly from the return type of - `load`. -</Callout> - -```tsx title="plugins/site-notes/src/pages/note-page-slug.tsx" -import { - definePluginRoute, - type PluginRoutePageProps, -} from '@vitnode/core/routing' - -interface Note { - content: string - title: string -} - -export const route = definePluginRoute({ - // [!code ++:6] - load: async ({ params }): Promise<Note> => { - return { - content: 'Loaded securely from your plugin loader.', - title: `Note: ${params.slug}`, - } - }, - head: ({ loaderData, params }) => ({ - description: loaderData?.content, - title: loaderData?.title ?? params.slug, - }), -}) - -const NotePage = ({ loaderData }: PluginRoutePageProps<Note>) => { - return ( - <article className="container mx-auto flex max-w-3xl flex-col gap-4 p-4"> - <h1 className="text-3xl font-semibold tracking-tight text-balance"> - {loaderData.title} - </h1> - <p className="text-muted-foreground leading-relaxed text-pretty"> - {loaderData.content} - </p> - </article> - ) -} - -export default NotePage -``` +The split matters for bundle size. `routes.ts` is part of the app's initial bundle, because the router needs every path before any page loads. Everything in the page module downloads only when a visitor opens or preloads that page. So the declaration holds what the router must know up front, and the page module holds the rest: -{/* Image prompt: Browser preview showing the rendered note page with title and content in container, 1440x900. */} +| In `routes.ts` (read before the page loads) | In the page module's `route` (loaded with the page) | +| :--------------------------------------------------------------------------- | :-------------------------------------------------- | +| `component`, `messages`, `area`, `requires`, `search`, `cache`, `preload`, `pendingComponent` | `load`, `head`, `breadcrumb`, `notFound`, `parseSearch` | -## Breadcrumbs +`messages` lists dotted paths into your plugin's message tree, such as `site-notes.notes`. Use the narrowest branch the page renders, so the page downloads only the strings it shows. [Namespaces](/docs/dev/i18n/namespaces) explains the limits. -Declare a crumb directly in `definePluginRoute` to contribute to the public header or AdminCP breadcrumb trail. +Paths use `:param` for a dynamic segment and a trailing `*` for a catch-all. VitNode converts them to TanStack Start's `$param` spelling for you, which keeps a plugin portable between hosts. -Because `breadcrumb` renders as a React component within the route's declared namespaces, `useTranslations` from `use-intl` works out of the box: - -```tsx title="plugins/site-notes/src/pages/notes-layout.tsx" -import { definePluginRoute } from '@vitnode/core/routing' -import { useTranslations } from 'use-intl' - -// [!code ++:7] -export const route = definePluginRoute({ - breadcrumb: () => { - const t = useTranslations('@acme/site-notes.home') - - return t('title') - }, -}) -``` - -For dynamic routes, the crumb receives `{ loaderData }` and can combine dynamic records with localized copy: - -```tsx title="plugins/site-notes/src/pages/note-page-slug.tsx" -import { definePluginRoute } from '@vitnode/core/routing' -import { useTranslations } from 'use-intl' - -export const route = definePluginRoute({ - load: async ({ params }): Promise<Note> => { - return { - content: 'Loaded securely from your plugin loader.', - title: params.slug, - } - }, - head: ({ loaderData, params }) => ({ - title: loaderData?.title ?? params.slug, - }), - // [!code ++:5] - breadcrumb: ({ loaderData }) => { - const t = useTranslations('@acme/site-notes.home') - - return `${t('note')}: ${loaderData.title}` - }, -}) -``` - -For nested trails, deferred crumbs, and AdminCP trails, see the [Breadcrumbs guide](/docs/dev/routing/breadcrumbs). - -## Loading states - -A route's `pendingComponent` is the skeleton shown while its page suspends, for example on a client-only route or a query the loader does not await. Client navigations keep the current page on screen with a top progress bar instead. - -```ts title="plugins/site-notes/src/routes.ts" -import { definePluginRoutes, lazy, page } from '@vitnode/core/routing' -// [!code ++:1] -import { TablePendingSkeleton } from '@vitnode/core/tanstack/pending' - -export const routes = definePluginRoutes([ - page('/notes', { - component: lazy(() => import('./pages/notes-page')), - // [!code ++:1] - pendingComponent: TablePendingSkeleton, - }), -]) -``` +## Find your task -<Callout type="warn" title="A pending component is not code-split"> - A router draws it *before* the page's own chunk has arrived, so there is - nothing to wait for it—TanStack Router never splits a `pendingComponent`, and - neither does VitNode. It is imported outright into the initial bundle. Keep it - to a skeleton. -</Callout> - -VitNode ships pre-built skeleton shapes from `@vitnode/core/tanstack/pending`: `TablePendingSkeleton`, `FeedPendingSkeleton`, `FormPendingSkeleton`, `CardsPendingSkeleton`, `ProfilePendingSkeleton`, `AuthPendingSkeleton`, and `RoutePendingSpinner`. - -To customize skeleton props (such as `rows` or `className`), rename the file to `routes.tsx` and return a JSX element: - -```tsx title="plugins/site-notes/src/routes.tsx" -page('/notes', { - component: lazy(() => import('./pages/notes-page')), - // [!code ++:1] - pendingComponent: () => <FeedPendingSkeleton rows={4} />, -}) -``` - -If `pendingComponent` is omitted, the route falls back to the application's global `defaultPendingComponent`. Learn more in the [Loading States guide](/docs/dev/routing/loading). - -## Missing pages - -When a loader cannot find what the URL requested, throw `notFound()` from `@tanstack/react-router` to activate the route's `notFound` component: - -```tsx title="plugins/site-notes/src/pages/note-page-slug.tsx" -import { notFound } from '@tanstack/react-router' -import { definePluginRoute } from '@vitnode/core/routing' - -export const route = definePluginRoute({ - load: async ({ params }) => { - const note = await findNote(params.slug) - - // [!code ++:3] - if (!note) { - throw notFound() - } - - return note - }, - - // [!code ++:5] - notFound: () => ( - <div className="container mx-auto p-4"> - <p className="text-muted-foreground leading-relaxed">No such note.</p> - </div> - ), -}) -``` - -Unlike `pendingComponent`, `notFound` is part of the lazy page chunk and costs unvisited routes nothing. If omitted, the route falls through to the application's global `defaultNotFoundComponent`, preserving the application layout and navigation shell. Learn more in the [Errors & Not Found guide](/docs/dev/routing/not-found). - -## Catch-all routes - -A `*` segment matches every remaining segment of the URL, allowing a single route to own an entire subtree. It must be the final segment of a path and is only permitted on `page()` declarations (a layout ending in `*` would match before its child routes): - -```ts title="plugins/site-notes/src/routes.ts" -import { definePluginRoutes, lazy, page } from '@vitnode/core/routing' - -export const routes = definePluginRoutes([ - // [!code ++:3] - page('/notes/*', { - component: lazy(() => import('./pages/notes-catch-all')), - }), -]) -``` - -The page reads the matched trailing path from `params._splat`: - -```tsx title="plugins/site-notes/src/pages/notes-catch-all.tsx" -import type { PluginRoutePageProps } from '@vitnode/core/routing' - -const NotesCatchAll = ({ params }: PluginRoutePageProps) => { - const segments = (params._splat ?? '').split('/').filter(Boolean) - - return ( - <div className="container mx-auto max-w-3xl p-4"> - <p className="text-muted-foreground leading-relaxed"> - {segments.join(' / ')} - </p> - </div> - ) -} - -export default NotesCatchAll -``` - -## Route protection (requires) - -Protect pages or entire layouts by declaring `requires`. VitNode checks the visitor's authentication state before the route chunk downloads: - -```ts title="plugins/site-notes/src/routes.ts" -import { definePluginRoutes, lazy, page } from '@vitnode/core/routing' - -export const routes = definePluginRoutes([ - page('/notes/new', { - component: lazy(() => import('./pages/new-note-page')), - // [!code ++:1] - requires: 'authenticated', - }), -]) -``` - -| `requires` | Behavior when not satisfied | Typical use cases | -| :---------------- | :------------------------------------------------------------------------- | :---------------------------------------- | -| `'authenticated'` | Redirects guests to `/login` with `returnTo` set to the target path | Dashboards, note editors, user settings | -| `'guest'` | Redirects authenticated users away (to `/` or their post-auth destination) | Sign-in, account creation, password reset | -| `'admin-guest'` | Redirects staff with active admin sessions into the AdminCP | AdminCP sign-in screen (`/admin`) | - -<Callout type="info" title="AdminCP routes are pre-guarded"> - Routes with `area: 'admin'` are automatically placed behind the AdminCP staff - session guard and cannot declare `requires`. To restrict access to specific - staff roles or permissions, gate content inside the route component or loader. -</Callout> - -## Cache public pages - -A page that looks the same for every visitor can declare `cache`, and VitNode reuses its server-rendered HTML for the given number of seconds: - -```ts title="plugins/blog/src/routes.ts" -page('/blog/article/:slug', { - cache: { maxAge: 300, staleWhileRevalidate: 60 }, // [!code ++] - component: lazy(() => import('./pages/post-page')), -}) -``` - -Routes are uncached by default, and a route with `requires` cannot be cached. [Cache server-rendered pages](/docs/dev/cache/pages) covers the setup and how the host app overrides a policy. - -## Control preloading - -Hovering a link runs the destination's loader early. Set `preload: false` on a page or layout whose loader is too costly to run on a hover: - -```ts title="plugins/site-notes/src/routes.ts" -page('/notes/:slug/history', { - component: lazy(() => import('./pages/note-history-page')), - preload: false, // [!code ++] -}) -``` - -Children of a `layout()` inherit its setting. [Preloading](/docs/dev/routing/preloading) explains what a preload runs and how to keep it to one request. - -## Nested routes and layouts - -A `layout()` wraps child routes in a shared UI frame without claiming a URL segment of its own. Use `index()` to render a page at the layout's root path. - -Every path nested inside a layout is **relative** to its parent: - -```ts title="plugins/site-notes/src/routes.ts" -import { - definePluginRoutes, - index, - layout, - lazy, - page, -} from '@vitnode/core/routing' - -export const routes = definePluginRoutes([ - layout('/notes', { - component: lazy(() => import('./pages/notes-layout')), - messages: ['@acme/site-notes.home'], - children: [ - index({ - component: lazy(() => import('./pages/notes-index-page')), - }), - page(':slug', { - component: lazy(() => import('./pages/note-page-slug')), - }), - ], - }), -]) -``` - -A layout component renders `{children}`: - -```tsx title="plugins/site-notes/src/pages/notes-layout.tsx" -import { useTranslations } from 'use-intl' - -const NotesLayout = ({ children }: { children: React.ReactNode }) => { - const t = useTranslations('@acme/site-notes.home') - - return ( - <div className="container mx-auto flex max-w-4xl flex-col gap-6 p-4"> - <header className="border-b pb-4"> - <h1 className="text-2xl font-bold tracking-tight text-balance"> - {t('title')} - </h1> - </header> - <main>{children}</main> - </div> - ) -} - -export default NotesLayout -``` - -| Route helper | URL resolved | Purpose | -| :---------------------- | :------------- | :---------------------------------------------------- | -| `layout('/notes', ...)` | — | Wraps nested child routes with a persistent UI shell | -| `index(...)` | `/notes` | Renders at the exact URL of the parent layout | -| `page(':slug', ...)` | `/notes/:slug` | Relative leaf route rendered inside the parent layout | - -## AdminCP routes - -Mount a screen in the staff-only Admin Control Panel by adding `area: 'admin'`. It automatically inherits the AdminCP shell, sidebar, and staff authentication guard: - -```ts title="plugins/site-notes/src/routes.ts" -page('/admin/notes', { - // [!code ++:1] - area: 'admin', - component: lazy(() => import('./pages/admin-notes-page')), - messages: ['@acme/site-notes.admin'], -}) -``` - -## Search parameters - -Type and validate query strings (like pagination or filters). Declare `search` on the route for eager URL-level validation before code chunks load: - -```ts title="plugins/site-notes/src/routes.ts" -page('/notes', { - component: lazy(() => import('./pages/notes-page')), - // [!code ++:3] - search: (input: Record<string, unknown>) => ({ - page: Number(input.page) || 1, - }), -}) -``` - -The component receives typed `search` values and a `navigate` helper: - -```tsx title="plugins/site-notes/src/pages/notes-page.tsx" -import type { PluginRoutePageProps } from '@vitnode/core/routing' - -interface NotesSearch { - page: number -} - -const NotesPage = ({ - navigate, - search, -}: PluginRoutePageProps<undefined, NotesSearch>) => ( - <div className="container mx-auto p-4"> - <button - className="inline-flex items-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90" - onClick={() => void navigate({ search: { page: search.page + 1 } })} - type="button" - > - Next Page ({search.page}) - </button> - </div> -) - -export default NotesPage -``` +| You want to | Guide | +| :---------------------------------------------------------------- | :------------------------------------------------------------ | +| Add a page with a URL parameter, a loader and a title | [Add a route](/docs/dev/routing/first-route) | +| Choose `defineRoute`, `definePluginRoute` and friends, or look up `head` | [Route module](/docs/dev/routing/route-module) | +| Share a frame between pages, render without chrome, or add an AdminCP page | [Layouts](/docs/dev/routing/layouts) | +| Read `:params`, catch-all paths and the query string | [URL parameters](/docs/dev/routing/url-parameters) | +| Limit a page to signed-in visitors or guests | [Protected routes](/docs/dev/routing/protected-routes) | +| Link between pages, from an app or a plugin | [Navigation](/docs/dev/routing/navigation) | +| Stop a hover from running an expensive loader | [Preloading](/docs/dev/routing/preloading) | +| Add the page to the breadcrumb trail | [Breadcrumbs](/docs/dev/routing/breadcrumbs) | +| Show a skeleton or a spinner while something loads | [Loading states](/docs/dev/routing/loading) | +| Answer 404 for a missing record, or customize the error pages | [Errors and 404](/docs/dev/routing/not-found) | +| Reuse a public page's HTML for every visitor | [Cache pages](/docs/dev/cache/pages) | +| Translate the strings on a page | [Translate pages](/docs/dev/i18n/pages) | -<Cards> - <Card - icon={<DatabaseIcon />} - title="Data Fetching" - description="Learn universal fetchers, cache invalidation, and background mutations." - href="/docs/dev/fetcher" - /> - <Card - icon={<MilestoneIcon />} - title="Breadcrumbs" - description="Customize static and dynamic breadcrumbs across public and admin pages." - href="/docs/dev/routing/breadcrumbs" - /> - <Card - icon={<LoaderCircleIcon />} - title="Loading States" - description="Display debounced spinners and tailored skeleton fallbacks while pages stream." - href="/docs/dev/routing/loading" - /> - <Card - icon={<TriangleAlertIcon />} - title="Errors & Not Found" - description="Render localized 404 and 500 boundaries while keeping application layouts intact." - href="/docs/dev/routing/not-found" - /> - <Card - icon={<LanguagesIcon />} - title="Translations" - description="Stream localized message namespaces in parallel with route chunks using use-intl." - href="/docs/dev/i18n/pages" - /> - <Card - icon={<LayoutDashboardIcon />} - title="AdminCP Pages" - description="Mount plugin screens, navigation links, and permissions in the AdminCP." - href="/docs/dev/plugins/admin" - /> -</Cards> +New to plugins? Start with [Create a plugin](/docs/dev/plugins/create) and [Plugin page](/docs/dev/plugins/page), then come back for [Add a route](/docs/dev/routing/first-route). diff --git a/apps/web/content/docs/dev/routing/layouts.mdx b/apps/web/content/docs/dev/routing/layouts.mdx new file mode 100644 index 0000000000..dac743cc72 --- /dev/null +++ b/apps/web/content/docs/dev/routing/layouts.mdx @@ -0,0 +1,116 @@ +--- +title: Layouts +description: Wrap several VitNode plugin pages in a shared layout with layout() and index(), choose the main, blank or admin area, and mount a page in the AdminCP. +icon: LayoutTemplate +--- + +A layout wraps a group of pages in a shared frame, such as a heading or a side menu that stays on screen while the visitor moves between them. An area picks the app shell a top-level route renders in: the public layout, nothing at all, or the AdminCP. + +## Share a frame with `layout()` + +`layout()` takes a path, a component and `children`. Every child path is relative to the layout, and `index()` is the page at the layout's own URL. This tree puts the notes list and the note page from [Add a route](/docs/dev/routing/first-route) under one frame: + +```ts title="plugins/site-notes/src/routes.ts" +import { + definePluginRoutes, + index, + layout, + lazy, + page, +} from '@vitnode/core/routing' + +export const routes = definePluginRoutes([ + layout('/site-notes/notes', { + component: lazy(() => import('./pages/notes-layout')), + messages: ['site-notes.notes'], + children: [ + index({ + component: lazy(() => import('./pages/notes-page')), + }), + page(':id', { + component: lazy(() => import('./pages/note-page')), + }), + ], + }), +]) +``` + +| Declaration | URL | Renders | +| :---------------------------------- | :------------------------ | :---------------------------------------- | +| `layout('/site-notes/notes', ...)` | none of its own | The frame around its children | +| `index(...)` | `/site-notes/notes` | The page at the layout's URL | +| `page(':id', ...)` | `/site-notes/notes/:id` | A child page inside the frame | + +The layout component renders its page through `children`: + +```tsx title="plugins/site-notes/src/pages/notes-layout.tsx" +import { useTranslations } from 'use-intl' + +const NotesLayout = ({ children }: { children: React.ReactNode }) => { + const t = useTranslations('site-notes.notes') + + return ( + <div className="container mx-auto flex max-w-2xl flex-col gap-6 p-4"> + <p className="text-muted-foreground text-sm">{t('title')}</p> + {children} + </div> + ) +} + +export default NotesLayout +``` + +A child inherits the layout's `messages`, `requires` and `preload`, so declare them once on the layout. A layout module can export a `route` too, for example a breadcrumb that every child page shares. + +### Rules the build checks + +The build stops with a message that names the route when a tree breaks one of these: + +- A child path is relative: `':id'`, not `'/site-notes/notes/:id'`. A top-level path starts with `/`. +- `index()` only appears inside a layout's `children`. +- A layout needs at least one child, because it claims no URL of its own. +- A layout cannot declare `cache` or `search`. Put them on the page that has the URL. +- A layout path cannot end in `*`, because nothing inside a catch-all could be reached. Use a `page()` for that. +- Only a top-level route declares `area`. Children render in their layout's area. + +## Pick an area + +`area` chooses the shell a top-level page or layout renders in: + +| `area` | Renders inside | +| :----------------- | :---------------------------------------------------------------- | +| `'main'` (default) | The public layout: header, breadcrumbs, navigation, footer | +| `'blank'` | Only the app root: document, theme, providers and translations | +| `'admin'` | The AdminCP shell: sidebar, AdminCP breadcrumbs, staff session | + +Use `'blank'` for a page that stands on its own, such as an embed, a print view or a kiosk screen: + +```ts title="plugins/site-notes/src/routes.ts" +page('/site-notes/embed', { + area: 'blank', // [!code ++] + component: lazy(() => import('./pages/notes-embed-page')), +}), +``` + +A blank page has no header and no breadcrumb trail, so give it its own way back if a visitor can reach it from the site. + +## Add an AdminCP page + +`area: 'admin'` mounts the page in the AdminCP, behind the staff session guard. Use a path under `/admin`: + +```ts title="plugins/site-notes/src/routes.ts" +page('/admin/site-notes', { + area: 'admin', // [!code ++] + component: lazy(() => import('./pages/admin-notes-page')), + messages: ['site-notes.admin.notes'], +}), +``` + +An AdminCP route cannot declare `requires`. The AdminCP has its own session, and the build rejects the field. To limit the page to staff with a permission, check the permission inside the page. Write the page module with `defineAdminRoute` when its loader needs `context.adminAccess`, the resolved AdminCP session. + +[AdminCP pages](/docs/dev/plugins/admin) builds a complete AdminCP screen with a sidebar link, a permission check and a form. + +## Related + +- [Route module](/docs/dev/routing/route-module): what a layout or page module can export. +- [Breadcrumbs](/docs/dev/routing/breadcrumbs): a crumb for a layout and its pages. diff --git a/apps/web/content/docs/dev/routing/loading.mdx b/apps/web/content/docs/dev/routing/loading.mdx index da295e6f17..a435f063d2 100644 --- a/apps/web/content/docs/dev/routing/loading.mdx +++ b/apps/web/content/docs/dev/routing/loading.mdx @@ -1,5 +1,5 @@ --- -title: Loading States +title: Loading states description: Show a top progress bar for route navigation, section skeletons for loading content, and button spinners for actions in VitNode. icon: LoaderCircle --- @@ -85,16 +85,22 @@ Import pre-built skeletons directly from `@vitnode/core/tanstack/pending`: | `CardsPendingSkeleton` | Responsive 1/2/3 column card grid | Dashboard widgets, product catalogs | | `FormPendingSkeleton` | Stacked input placeholders and action buttons | Settings forms, modal dialogs | | `AuthPendingSkeleton` | Centered authentication card with form inputs | Sign-in, sign-up, password reset | +| `ProfilePendingSkeleton` | Cover, avatar, name and side cards | Member profiles | +| `DiscoverPendingSkeleton` | Heading and a timeline of results | Discover-style activity pages | +| `SearchPendingSkeleton` | Search box, filter column and results | Search pages | +| `BreadcrumbPendingSkeleton` | Two short crumb placeholders | A breadcrumb that is still loading | +| `RoutePendingSkeleton` | Heading and text blocks | A page with no closer shape | | `RoutePendingSpinner` | Centered accessible spinner | Suspense fallback with no known shape | ## Customizing skeleton props -All skeleton shapes accept props from `RoutePendingSkeletonProps` to adapt to your layout: +The table, feed, cards, form, auth and route skeletons accept every prop of `RoutePendingSkeletonProps`. The profile, discover, search and breadcrumb skeletons accept only `className` and `label`. ```tsx title="plugins/site-notes/src/pages/notes-admin-page.tsx" import { TablePendingSkeleton } from '@vitnode/core/tanstack/pending' import { Suspense } from 'react' +// `AdminNotesTable` is your table, which suspends while its query loads. const AdminNotesPage = () => { return ( <Suspense @@ -117,10 +123,10 @@ export default AdminNotesPage | Prop | Type | Default | Description | | :---------------- | :-------- | :---------- | :------------------------------------------------------------ | -| `rows` | `number` | `3` to `6` | Number of skeleton items, rows, or cards to display | +| `rows` | `number` | per shape (`2` to `6`) | Number of skeleton items, rows, or cards to display | | `withDescription` | `boolean` | `true` | Whether to display a skeleton subtitle under the heading | | `className` | `string` | `undefined` | Additional Tailwind utility classes merged onto the container | -| `label` | `string` | `'Loading'` | Accessible screen-reader label (`aria-label`) | +| `label` | `string` | `'Loading'` | Screen-reader status text, rendered as a visually hidden `role="status"` element. Pass a translated string | ## Keep data on screen during refetches @@ -131,6 +137,7 @@ import { keepPreviousData, useQuery } from '@tanstack/react-query' import { FeedPendingSkeleton } from '@vitnode/core/tanstack/pending' import { cn } from 'cn' +// `notesQueryOptions` is your own query helper, keyed on the search term. const NotesSearch = ({ search }: { search: string }) => { const query = useQuery({ ...notesQueryOptions({ search }), @@ -158,6 +165,8 @@ Submissions and mutations show their progress on the control that started them. import { Button } from '@vitnode/core/components/ui/button' import { useMutation } from '@tanstack/react-query' +// `deleteNote` is your own API call. In a real handler, also invalidate the +// notes query and show a toast in `onSuccess`. const DeleteNoteButton = ({ id }: { id: number }) => { const mutation = useMutation({ mutationFn: deleteNote }) @@ -178,19 +187,19 @@ While the action runs, also disable any other control that would conflict with i <Cards> <Card icon={<DatabaseIcon />} - title="Data Fetching" + title="Fetcher" description="Learn universal fetchers, cache invalidation, and background mutations." href="/docs/dev/fetcher" /> <Card icon={<MapIcon />} - title="Plugin Routes" + title="Routing" description="Declare routes, lazy page components, metadata, and breadcrumbs." href="/docs/dev/routing" /> <Card icon={<TriangleAlertIcon />} - title="Errors & Not Found" + title="Errors and 404" description="Handle 404, 500, and error boundaries in routes." href="/docs/dev/routing/not-found" /> diff --git a/apps/web/content/docs/dev/routing/meta.json b/apps/web/content/docs/dev/routing/meta.json index f17f02937e..97e89ea686 100644 --- a/apps/web/content/docs/dev/routing/meta.json +++ b/apps/web/content/docs/dev/routing/meta.json @@ -4,6 +4,11 @@ "icon": "Route", "pages": [ "index", + "first-route", + "route-module", + "layouts", + "url-parameters", + "protected-routes", "navigation", "preloading", "breadcrumbs", diff --git a/apps/web/content/docs/dev/routing/navigation.mdx b/apps/web/content/docs/dev/routing/navigation.mdx index 78c1b96c4f..dfe85fa8df 100644 --- a/apps/web/content/docs/dev/routing/navigation.mdx +++ b/apps/web/content/docs/dev/routing/navigation.mdx @@ -128,14 +128,25 @@ when the href matches the current URL exactly, query and hash included. To navigate from code after a form is saved, use `useHrefNavigate`: ```tsx title="plugins/catalog/src/pages/catalog-new-page.tsx" +import { Button } from '@vitnode/core/components/ui/button' import { useHrefNavigate } from '@vitnode/core/tanstack/link' -const navigate = useHrefNavigate() - -// after a successful save: -await navigate(`/catalog/${encodeURIComponent(item.slug)}`) +export const OpenItemButton = ({ slug }: { slug: string }) => { + const navigate = useHrefNavigate() + + return ( + <Button + onClick={() => void navigate(`/catalog/${encodeURIComponent(slug)}`)} + type="button" + > + Open item + </Button> + ) +} ``` +Call the returned `navigate` from an event handler, such as a form's `onSubmit` after a successful save. Pass `{ replace: true }` to replace the current history entry instead of adding one. + Invalidate the queries the save changed before you navigate, so the next page's loader reads fresh data. For filters, sorting and pagination on the page already being viewed, use the page's own `navigate` prop shown above. @@ -145,12 +156,12 @@ being viewed, use the page's own `navigate` prop shown above. work with any host, which saves future hosts from router spaghetti. </Callout> -## Next +## Related <Cards> <Card title="Routing" - description="How a URL gets claimed, by your app or by a plugin" + description="How a plugin claims a URL, and which guide covers each routing task" href="/docs/dev/routing" /> <Card diff --git a/apps/web/content/docs/dev/routing/not-found.mdx b/apps/web/content/docs/dev/routing/not-found.mdx index fd19950066..c728427b0f 100644 --- a/apps/web/content/docs/dev/routing/not-found.mdx +++ b/apps/web/content/docs/dev/routing/not-found.mdx @@ -1,146 +1,115 @@ --- -title: Errors & Not Found -description: Handle 404 Not Found, 500 Server Errors, and route exceptions with localized layouts, action buttons, and loader boundaries. +title: Errors and 404 +description: Answer 404 from a VitNode route loader with notFound(), and configure the app's localized 404 and 500 pages, their action buttons and the development error overlay. icon: TriangleAlert --- -import { DatabaseIcon, LoaderCircleIcon, MapIcon } from 'lucide-react' -import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +VitNode ships localized error screens that render inside your app's layout, so a visitor who hits a missing page or a crash keeps the header, the navigation and the theme. Plugins signal the problem from their loaders; the app decides how it looks. -In TanStack Start, error handling and missing routes are configured through route boundaries rather than static files. VitNode provides built-in, localized error layouts (`NotFound`, `Error500Page`, and `ErrorActions`) mounted directly inside your application shell—keeping navigation, headers, and themes intact when errors occur. +## Answer 404 from a loader -## 404 Not Found +When the record a URL asks for does not exist, throw `notFound()` from `@tanstack/react-router` in `load`: -### Throwing 404 in loaders - -When a requested resource (such as a note slug or user ID) is not found in the database, throw `notFound()` from `@tanstack/react-router` inside `load`: - -```tsx title="plugins/site-notes/src/pages/note-page-slug.tsx" +```tsx title="plugins/site-notes/src/pages/note-page.tsx" import { notFound } from '@tanstack/react-router' -import { definePluginRoute } from '@vitnode/core/routing' -export const route = definePluginRoute({ - load: async ({ params }) => { - const note = await fetchNote(params.slug) - - // [!code ++:3] - if (!note) { - throw notFound() - } +const loadNote = async (queryClient: QueryClient, idParam: string) => { + // ... read the note through the query cache, as in Add a route + if (!note) throw notFound() // [!code ++] - return note - }, -}) + return note +} ``` -When thrown, TanStack Router catches the signal and halts page execution, rendering the nearest `notFoundComponent`. - -### Unmatched URLs keep the main shell +The loader stops, the page renders the not-found screen, and the server answers with a `404` status, so search engines drop the URL. [Add a route](/docs/dev/routing/first-route) builds this page in full. -When a visitor navigates to a non-existent URL, the main shell (`_main.tsx`) is -still matched, so the route is caught **inside** it. +To show something other than the app's 404 page for one route, give its page module a `notFound` component: -This ensures visitors never hit a blank, unstyled screen: they retain the main site header, navigation bar, and theme switcher, while search crawlers receive a real HTTP `404` status code: - -```tsx title="apps/web/src/router.tsx" -const routeTree = withVitNodeRoutes( - fileRouteTree, - pluginRouteSpecs(pluginRouteSources), - { - mountUnder: { - admin: adminShellRoute, - blank: fileRouteTree, - main: mainShellRoute, - }, - }, +```tsx title="plugins/site-notes/src/pages/note-page.tsx" +const NoteNotFound = () => ( + <p className="container mx-auto p-4 leading-relaxed">This note does not exist.</p> ) + +export const route = defineRoute({ + load: async ({ context, params }) => + await loadNote(context.queryClient, params.id), + notFound: NoteNotFound, // [!code ++] +}) ``` -{/* Image prompt: VitNode 404 error page displayed inside the main site layout with header, 404 heading, localized description, and "Go back" / "Back to home" action buttons in dark theme, 1440x900. */} +`notFound` loads with the page module, so it costs unvisited routes nothing. Without one, the route falls back to the router's `defaultNotFoundComponent`. + +A URL that matches no route at all gets the same default 404 page. It still renders inside the main layout, because the main shell route matches every public URL. -## 500 Server & runtime errors +{/* Image prompt: The VitNode 404 page inside the main site layout, with the header, a 404 heading, a localized description and the Go back and Back to home buttons. Dark theme, 1440x900. */} -When an unhandled exception or database failure occurs during SSR or client navigation, the router activates its `errorComponent`. +## Configure the app's error pages -VitNode configures the global error boundary in `apps/web/src/router.tsx` using `Error500Page`: +The app sets both screens once, in `getRouter` in `src/router.tsx`. A new app already contains this: ```tsx title="apps/web/src/router.tsx" import { createRouter as createTanStackRouter } from '@tanstack/react-router' import { - Error500Page, ErrorActions, NotFound, + RouteErrorPage, } from '@vitnode/core/tanstack/layout' export function getRouter() { - return createTanStackRouter({ - routeTree, - // [!code ++:2] + const router = createTanStackRouter({ + // ... defaultNotFoundComponent: () => <NotFound actions={<ErrorActions />} />, - defaultErrorComponent: () => <Error500Page actions={<ErrorActions />} />, + defaultErrorComponent: ({ error }) => ( + <RouteErrorPage actions={<ErrorActions />} error={error} /> + ), }) + + return router } ``` -`Error500Page` automatically renders localized strings from `core.global.errors.500`, keeping the error message friendly and clear while preserving layout structure. +| Component | Import | Shows | +| :--------------- | :------------------------------ | :------------------------------------------------------------------------------------------ | +| `NotFound` | `@vitnode/core/tanstack/layout` | The localized 404 page | +| `RouteErrorPage` | `@vitnode/core/tanstack/layout` | `Error500Page`, plus an overlay with the error's details in development only | +| `Error500Page` | `@vitnode/core/tanstack/layout` | The localized 500 page alone, with the strings from `core.global.errors.500` | +| `ErrorActions` | `@vitnode/core/tanstack/layout` | A **Go back** button and a **Back to home** link | -{/* Image prompt: VitNode 500 internal server error page with large 500 status code, friendly error title, description, and recovery buttons in dark theme, 1440x900. */} +Keep `RouteErrorPage` as the error component. Passing `Error500Page` directly works too, but you lose the development overlay that shows what went wrong. -## Error action buttons +{/* Image prompt: The VitNode 500 page with the status code, a friendly title and description, and the recovery buttons. Dark theme, 1440x900. */} -The `<ErrorActions />` component renders two primary recovery buttons: +## Change the action buttons -1. **Go Back** (`router.history.back()`) — Takes the user to their previously viewed screen. -2. **Back to Home** (`/`) — Returns to the application homepage using locale-aware navigation. +`actions` takes any elements. To add a link next to the default buttons, render both: -You can also pass custom action elements into the `actions` prop of `NotFound` or `Error500Page`: - -```tsx title="apps/web/src/routes/__root.tsx" +```tsx title="apps/web/src/router.tsx" +import { buttonVariants } from '@vitnode/core/components/ui/button' import { ErrorActions, NotFound } from '@vitnode/core/tanstack/layout' - -export const Route = createRootRouteWithContext<RootRouterContext>()({ - // [!code ++:1] - notFoundComponent: () => <NotFound actions={<ErrorActions />} />, - component: RootComponent, -}) +import { HrefLink } from '@vitnode/core/tanstack/link' + +// in createTanStackRouter({ ... }) +defaultNotFoundComponent: () => ( + <NotFound + actions={ + <> + <ErrorActions /> + {/* [!code ++:3] */} + <HrefLink className={buttonVariants({ size: 'lg', variant: 'outline' })} href="/site-notes/notes"> + Browse notes + </HrefLink> + </> + } + /> +), ``` -## Standard error codes - -VitNode provides `ErrorContent` to render standardized error presentations across public and administrative pages: - -| Status code | Name | Common cause | Handled by | -| :---------- | :-------------------- | :------------------------------------------------------- | :---------------------- | -| `400` | Bad Request | Malformed request parameters or invalid form payloads | `ErrorContent` | -| `403` | Forbidden | Insufficient permissions or unauthorized staff action | Staff auth guards | -| `404` | Not Found | Route does not exist or loader threw `notFound()` | `NotFound` | -| `409` | Conflict | Resource already exists or version mismatch | API mutation handlers | -| `429` | Too Many Requests | Rate limits exceeded on public or API endpoints | Rate limiter middleware | -| `500` | Internal Server Error | Uncaught server exception or database connectivity issue | `Error500Page` | - -<Callout type="info" title="Centralized error boundaries"> - Keep root error fallbacks in your host application (`apps/web`). Individual - plugins should throw `notFound()` or errors from their loaders and let the - centralized, localized layouts handle presentation. +<Callout type="info" title="Keep error pages in the app"> + Plugins throw `notFound()` or let errors surface from their loaders. The app + owns the screens, so every plugin's errors look the same. </Callout> -<Cards> - <Card - icon={<LoaderCircleIcon />} - title="Loading States" - description="Render instant skeletons and spinners during route transitions." - href="/docs/dev/routing/loading" - /> - <Card - icon={<MapIcon />} - title="Plugin Routes" - description="Declare URLs, lazy page components, metadata, and breadcrumbs." - href="/docs/dev/routing" - /> - <Card - icon={<DatabaseIcon />} - title="Data Fetching" - description="Server and client data loading with universal fetchers." - href="/docs/dev/fetcher" - /> -</Cards> +## Related + +- [Loading states](/docs/dev/routing/loading): what the visitor sees while a page loads. +- [Route module](/docs/dev/routing/route-module): `load`, `notFound` and the other module options. diff --git a/apps/web/content/docs/dev/routing/preloading.mdx b/apps/web/content/docs/dev/routing/preloading.mdx index 723bee6af7..780ebca80c 100644 --- a/apps/web/content/docs/dev/routing/preloading.mdx +++ b/apps/web/content/docs/dev/routing/preloading.mdx @@ -51,7 +51,7 @@ import { fetchNote } from '../features/notes/fetch-note' const noteQuery = (slug: string) => queryOptions({ - queryKey: ['@acme/site-notes', 'note', { slug }], + queryKey: ['site-notes', 'note', { slug }], queryFn: async () => await fetchNote(slug), staleTime: 60_000, // [!code ++] meta: LOADER_DATA_QUERY_META, // [!code ++] @@ -123,7 +123,7 @@ const ExportLink = () => ( Keep it on for ordinary reading pages. One cached preload makes the click feel instant and costs nothing on the second hover. -## Next +## Related <Cards> <Card diff --git a/apps/web/content/docs/dev/routing/protected-routes.mdx b/apps/web/content/docs/dev/routing/protected-routes.mdx new file mode 100644 index 0000000000..97cf270b47 --- /dev/null +++ b/apps/web/content/docs/dev/routing/protected-routes.mdx @@ -0,0 +1,63 @@ +--- +title: Protected routes +description: Limit a VitNode plugin page to signed-in visitors or to guests with requires, and read the signed-in user in the loader with defineAuthenticatedRoute. +icon: Lock +--- + +Some pages only make sense for one kind of visitor: a note editor needs a signed-in member, a sign-in screen needs a guest. Declare `requires` on the route, and VitNode checks the session before the page chunk downloads and redirects everyone else. + +## Declare who may open the page + +Add `requires` to the route in `routes.ts`: + +```ts title="plugins/site-notes/src/routes.ts" +page('/site-notes/my-notes', { + component: lazy(() => import('./pages/my-notes-page')), + requires: 'authenticated', // [!code ++] +}), +``` + +| `requires` | Who may open the page | Everyone else | +| :---------------- | :----------------------------- | :------------------------------------------------------------------------------ | +| `'authenticated'` | Signed-in visitors | Guests go to `/login`, with `returnTo` set so they come back after signing in | +| `'guest'` | Visitors who are not signed in | Signed-in visitors go to their `returnTo` destination, or the home page | +| `'admin-guest'` | Visitors without an AdminCP session | Staff with an AdminCP session go into the AdminCP. Meant for an AdminCP sign-in screen | + +Declared on a `layout()`, `requires` covers every page inside it. A child that declares a different requirement than its layout fails the build, because no visitor could ever reach it. + +## Read the user in the loader + +Write the page module with `defineAuthenticatedRoute` from `@vitnode/core/tanstack/plugin-routes`. Its loader context has `auth`, the session the guard already checked, so `auth.user` is never `null`: + +```tsx title="plugins/site-notes/src/pages/my-notes-page.tsx" +import type { PluginRoutePageProps } from '@vitnode/core/routing' + +import { defineAuthenticatedRoute } from '@vitnode/core/tanstack/plugin-routes' + +export const route = defineAuthenticatedRoute({ + load: ({ context }) => ({ userId: context.auth.user.id }), +}) + +const MyNotesPage = ({ loaderData }: PluginRoutePageProps<{ userId: number }>) => ( + <p className="leading-relaxed">Notes for user {loaderData.userId}</p> +) + +export default MyNotesPage +``` + +Use `defineAuthenticatedRoute` only on a route that declares `requires: 'authenticated'`, directly or through its layout. The `'guest'` and `'admin-guest'` guards hand the loader no session. + +<Callout type="warn" title="The guard is not your API's permission check"> + `requires` decides which page a visitor sees. Every API route the page calls + still checks the session and permissions itself, because anyone can call an + API route without opening the page. +</Callout> + +## Limits + +- A route with `requires` cannot declare `cache`. Its HTML depends on who asks, so VitNode never reuses it for another visitor. See [Cache pages](/docs/dev/cache/pages). +- An AdminCP route (`area: 'admin'`) cannot declare `requires`. The AdminCP has its own staff session guard; see [Layouts](/docs/dev/routing/layouts#add-an-admincp-page). + +## Check the result + +Sign out and open the protected page. You land on `/login` with `returnTo` in the URL. Sign in, and you come back to the page. diff --git a/apps/web/content/docs/dev/routing/route-module.mdx b/apps/web/content/docs/dev/routing/route-module.mdx new file mode 100644 index 0000000000..9785b0e988 --- /dev/null +++ b/apps/web/content/docs/dev/routing/route-module.mdx @@ -0,0 +1,112 @@ +--- +title: Route module +description: "Reference for a VitNode plugin page module: defineRoute, defineAuthenticatedRoute, defineAdminRoute and definePluginRoute, the load and head arguments, translated metadata, and the page props." +icon: FileCode +--- + +A page module is the file a route's `lazy(() => import(...))` points at. It default-exports the page component and may export a `route` object with the page's loader, metadata, breadcrumb and not-found screen. This page lists what that object accepts. For a walkthrough, see [Add a route](/docs/dev/routing/first-route). + +```tsx title="plugins/site-notes/src/pages/note-page.tsx" +import type { PluginRoutePageProps } from '@vitnode/core/routing' + +import { defineRoute } from '@vitnode/core/tanstack/plugin-routes' + +export const route = defineRoute({ + load: async ({ params }) => ({ id: params.id }), + head: ({ loaderData }) => ({ title: `Note ${loaderData?.id ?? ''}` }), +}) + +const NotePage = ({ loaderData }: PluginRoutePageProps<{ id: string }>) => ( + <h1>Note {loaderData.id}</h1> +) + +export default NotePage +``` + +## Pick a helper + +All four helpers return the object unchanged. They exist to type `load`'s `context` by what the route earned in `routes.ts`. + +| Helper | Import | `load` context | Use it for | +| :------------------------- | :-------------------------------------- | :----------------------------------------- | :------------------------------------------- | +| `defineRoute` | `@vitnode/core/tanstack/plugin-routes` | `locale`, `queryClient` | Most pages | +| `defineAuthenticatedRoute` | `@vitnode/core/tanstack/plugin-routes` | `locale`, `queryClient`, `auth` | A route declared with `requires` | +| `defineAdminRoute` | `@vitnode/core/tanstack/plugin-routes` | `locale`, `queryClient`, `adminAccess` | A route with `area: 'admin'` | +| `definePluginRoute` | `@vitnode/core/routing` | `locale` | Code that must not depend on TanStack | + +- **`queryClient`** is the app's TanStack Query client. Warm the page's data with `context.queryClient.query({ ...options, staleTime: 'static' })`, so a preload and the click that follows share one request. See [Cache app data](/docs/dev/cache/app). +- **`auth`** is the signed-in visitor's session, already checked by the `requires` guard, so `context.auth.user` is never `null`. See [Protected routes](/docs/dev/routing/protected-routes). +- **`adminAccess`** is the AdminCP session state resolved by the AdminCP shell. + +A route that did not declare `requires` or `area: 'admin'` cannot ask for `auth` or `adminAccess`. The field is a type error rather than `undefined` at runtime. + +`definePluginRoute` works too, but a loader without `queryClient` fetches directly, and the router runs it again on every hover preload. Prefer `defineRoute` in a VitNode app. + +## Options + +| Name | Type | Description | +| :------------ | :------------------------------------------------------ | :----------------------------------------------------------------------------------------------------------- | +| `load` | `(args) => TData \| Promise<TData>` | Runs before the page renders, on the server for the first visit and in the browser after. Its result is `loaderData`. | +| `head` | `(args) => PluginRouteHead` | Builds the page's `<title>` and meta tags. Runs after `load`. | +| `breadcrumb` | component, `{ group }`, `false` or `null` | The page's crumb in the breadcrumb trail. See [Breadcrumbs](/docs/dev/routing/breadcrumbs). | +| `notFound` | `React.ComponentType` | Rendered when `load` throws `notFound()`. Omit it to use the app's 404 page. | +| `parseSearch` | `(input: unknown) => TSearch` | Parses the query string inside the loader, when `routes.ts` declares no `search`. See [URL parameters](/docs/dev/routing/url-parameters#search-parameters). | + +<Callout type="warn" title="Declare load above head"> + TypeScript infers `loaderData` in `head` and `breadcrumb` from `load`'s return + type, and it reads the object's members in order. With `head` written first, + `loaderData` is not typed. +</Callout> + +### `load` arguments + +| Name | Type | Description | +| :-------- | :--------------------------------- | :----------------------------------------------------------------------- | +| `params` | `Readonly<Record<string, string>>` | The route's dynamic segments, e.g. `{ id: '2' }`. Always strings. | +| `search` | `TSearch` | The parsed query string, or `{}` when the route parses none. | +| `context` | depends on the helper | See [Pick a helper](#pick-a-helper). | +| `t` | `(key, values?) => string` | Translates a key from the route's `messages`. See [Translated metadata](#translated-metadata). | + +Throw `notFound()` or `redirect()` from `@tanstack/react-router` to answer with a 404 or a redirect instead of the page. + +### `head` arguments and result + +`head` receives `loaderData` (possibly `undefined`), `params`, `search` and `t`, and returns: + +| Name | Type | Description | +| :------------ | :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | +| `title` | `string` | The page's own title, already translated. VitNode suffixes it with the site name from `buildConfig({ metadata })`. | +| `description` | `string` | The `<meta name="description">`. | +| `robots` | `'index, follow' \| 'noindex, follow' \| 'noindex, nofollow'` | What a crawler may do. `noindex, follow` keeps a filtered list out of the index while its links still count. | +| `alternates` | `Record<string, string>` | Internal paths of the page in each language, for canonical and `hreflang` links. See [Advanced localized URLs](/docs/dev/i18n/localized-urls-advanced#hreflang-and-canonical-links). | + +Return only these fields. VitNode turns them into the full set of tags with the app's site metadata. + +## Translated metadata + +`head` and `load` run outside the React tree, so `useTranslations` cannot reach them. Both receive `t` instead, a translator over the namespaces the route declared in `messages`. Keys are full dotted paths, namespace included: + +```tsx title="plugins/site-notes/src/pages/notes-page.tsx" +export const route = defineRoute({ + head: ({ t }) => ({ + title: t('site-notes.notes.title'), + }), +}) +``` + +A component scopes itself once with `useTranslations('site-notes.notes')` and then calls `t('title')`. In `head` there is no component to scope, so you spell out the whole key. Placeholders work as they do in a component. Pass the values as the second argument, `t(key, { name: 'Ada' })`. + +The namespaces have already loaded by the time `head` runs, so translating metadata costs no extra request. Calling `t` on a route that declares no `messages` throws and names the namespace to add, so a raw key never ends up in a `<title>`. + +## Page props + +The default export receives `PluginRoutePageProps<TData, TSearch>`: + +| Prop | Type | Description | +| :----------- | :--------------------------------------------------------- | :---------------------------------------------------------------- | +| `loaderData` | `TData` | What `load` returned; `undefined` without a loader. | +| `params` | `Readonly<Record<string, string>>` | The route's dynamic segments. | +| `search` | `TSearch` | The parsed query string. | +| `navigate` | `(options: { search: TSearch; resetScroll?: boolean }) => Promise<void>` | Navigates to the same page with new search parameters. | + +A layout's default export receives the same props plus `children`. See [Layouts](/docs/dev/routing/layouts). diff --git a/apps/web/content/docs/dev/routing/url-parameters.mdx b/apps/web/content/docs/dev/routing/url-parameters.mdx new file mode 100644 index 0000000000..984518b604 --- /dev/null +++ b/apps/web/content/docs/dev/routing/url-parameters.mdx @@ -0,0 +1,101 @@ +--- +title: URL parameters +description: Read dynamic segments, catch-all paths and typed search parameters in VitNode plugin routes, and update the query string with the page's navigate prop. +icon: Brackets +--- + +A plugin route reads three parts of the URL: dynamic segments such as `:id`, a catch-all tail with `*`, and the query string. All three reach the loader and the page as props, typed where you declare a type. + +## Dynamic segments + +Write `:name` for a segment that varies. The value arrives as a string in `params`, in `load`, `head`, `breadcrumb` and the page: + +```ts title="plugins/site-notes/src/routes.ts" +page('/site-notes/notes/:id', { + component: lazy(() => import('./pages/note-page')), +}), +``` + +```tsx title="plugins/site-notes/src/pages/note-page.tsx" +import type { PluginRoutePageProps } from '@vitnode/core/routing' + +const NotePage = ({ params }: PluginRoutePageProps) => <h1>Note {params.id}</h1> + +export default NotePage +``` + +`params.id` is always a string. Convert and validate it before you use it, and throw `notFound()` from `@tanstack/react-router` for a value that cannot match a record. [Add a route](/docs/dev/routing/first-route) shows the full loader. + +## Catch-all paths + +A trailing `*` matches every remaining segment, so one page can own a whole subtree. It must be the last segment, and only a `page()` may end in one: + +```ts title="plugins/site-notes/src/routes.ts" +page('/site-notes/files/*', { + component: lazy(() => import('./pages/files-page')), +}), +``` + +The matched tail arrives as `params._splat`. For `/site-notes/files/2026/october`, it is `2026/october`: + +```tsx title="plugins/site-notes/src/pages/files-page.tsx" +import type { PluginRoutePageProps } from '@vitnode/core/routing' + +const FilesPage = ({ params }: PluginRoutePageProps) => { + const segments = (params._splat ?? '').split('/').filter(Boolean) + + return <p className="leading-relaxed">{segments.join(' / ')}</p> +} + +export default FilesPage +``` + +## Search parameters + +Declare `search` on the route in `routes.ts` to parse the query string. The router runs it while it matches the URL, before the page chunk loads, and its return type becomes the page's `search` prop: + +```ts title="plugins/site-notes/src/routes.ts" +page('/site-notes/notes', { + component: lazy(() => import('./pages/notes-page')), + // [!code ++:3] + search: (input: Record<string, unknown>) => ({ + page: Number(input.page) || 1, + }), +}), +``` + +The page reads `search` and changes it with `navigate`, which stays on the same path: + +```tsx title="plugins/site-notes/src/pages/notes-page.tsx" +import type { PluginRoutePageProps } from '@vitnode/core/routing' + +import { Button } from '@vitnode/core/components/ui/button' + +interface NotesSearch { + page: number +} + +const NotesPage = ({ navigate, search }: PluginRoutePageProps<undefined, NotesSearch>) => ( + <Button + onClick={() => void navigate({ search: { page: search.page + 1 } })} + type="button" + > + Page {search.page + 1} + </Button> +) + +export default NotesPage +``` + +Pass `resetScroll: false` to `navigate` to keep the scroll position, for example when a filter changes. The loader also receives `search`, so it can fetch the right page. Key the query on the search values and use `placeholderData: keepPreviousData` so the current page stays on screen while the next loads; see [Loading states](/docs/dev/routing/loading#keep-data-on-screen-during-refetches). + +A layout cannot declare `search`, because it has no URL of its own. + +### `parseSearch` in the page module + +A page module's `route` can declare `parseSearch` instead. It runs inside the loader, after the page chunk has loaded, and only when `routes.ts` declares no `search`. Prefer `search` in `routes.ts`, which parses the URL before the page chunk downloads. + +## Related + +- [Navigation](/docs/dev/routing/navigation): link to a page with parameters and a query string. +- [Route module](/docs/dev/routing/route-module): every argument `load` and `head` receive. diff --git a/apps/web/content/docs/dev/search-elasticsearch.mdx b/apps/web/content/docs/dev/search-elasticsearch.mdx index c2f500ca6e..55ecabdbb7 100644 --- a/apps/web/content/docs/dev/search-elasticsearch.mdx +++ b/apps/web/content/docs/dev/search-elasticsearch.mdx @@ -10,6 +10,21 @@ Use Elasticsearch when your site-wide search needs fuzzy matching, custom ranking, or a search cluster separate from Postgres. VitNode keeps Postgres as the canonical index; this adapter mirrors it, so switching is pleasantly boring. +## Before you begin + +- **An Elasticsearch or OpenSearch cluster.** For a local try, start a single-node Elasticsearch in Docker. It has security switched off, so keep it on your machine: + + ```bash + docker run -d --name vitnode-elasticsearch -p 9200:9200 \ + -e discovery.type=single-node -e xpack.security.enabled=false \ + docker.elastic.co/elasticsearch/elasticsearch:9.1.0 + ``` + + `curl http://localhost:9200` answers with the cluster name and version once it is up. +- **An AdminCP account with `system:can_manage_search`** (root roles have it) to run the first rebuild. + +## Switch to Elasticsearch + <Steps> <Step> @@ -79,21 +94,6 @@ collection) needs the **Rebuild and clear the search index** permission </Step> </Steps> -<Callout type="info" title="Upgrading an existing index"> - Documents now carry `authorIds` (a list) instead of `authorId`, plus drafts as - private documents. If your index was created before that, delete it in - Elasticsearch and run **Rebuild index**. VitNode recreates it with the new - mapping. -</Callout> - -<Callout type="info" title="Indexes created before uuid and bigint ids"> - Documents now carry an `itemKey` keyword with the record id as text, so [uuid - and bigint](/docs/content-engine/id-strategy) records can be found. VitNode - adds the field to an existing index the first time it uses it. Older documents - get a value on the next **Rebuild index**; until then, results fall back to - the numeric `itemId`, which works for serial ids only. -</Callout> - <Callout type="info" title="Totals stop at 10,000"> Elasticsearch counts matches up to 10,000, the same depth you can page to. Past that, `totalCount` reads 10,000 and means "at least this many" - nobody @@ -105,17 +105,39 @@ collection) needs the **Rebuild and clear the search index** permission lets you switch providers without losing your map back home. </Callout> -## Next +## Check the result + +- **Debug Panel → Search** names `elasticsearch` on the **Engine** card, and the collection counts match what you indexed. +- A search from the public API returns hits from the cluster: + + ```bash + curl "http://localhost:3000/api/@vitnode/core/search?search=hello" + ``` + +## Upgrading an index from an earlier version + +Documents now carry `authorIds` (a list) instead of `authorId`, plus drafts as +private documents. If your index was created before that, delete it in +Elasticsearch and run **Rebuild index**. VitNode recreates it with the new +mapping. + +Documents now carry an `itemKey` keyword with the record id as text, so search +can find [uuid and bigint](/docs/content-engine/id-strategy) records. VitNode +adds the field to an existing index the first time it uses it. Older documents +get a value on the next **Rebuild index**; until then, results fall back to +the numeric `itemId`, which works for serial ids only. + +## Related <Cards> <Card - title="Search & Discovery" + title="Search" description="Index plugin records and register rebuild indexers." href="/docs/dev/search" /> <Card title="Content Engine" description="Make a content type searchable without hand-writing an indexer." - href="/docs/content-engine/public-pages" + href="/docs/content-engine/search" /> </Cards> diff --git a/apps/web/content/docs/dev/search-external.mdx b/apps/web/content/docs/dev/search-external.mdx index 540836dc1f..5d80f5a395 100644 --- a/apps/web/content/docs/dev/search-external.mdx +++ b/apps/web/content/docs/dev/search-external.mdx @@ -136,7 +136,7 @@ import { RootProvider } from "fumadocs-ui/provider/tanstack"; `variant="bar"` turns the floating header card into a flat, full-width bar that sits flush on the docs layout, and `--fd-banner-height` tells Fumadocs how tall it is, so its sidebar and page fit underneath. Need a button before the logo, like a sidebar toggle? Pass it as `leading`. Load the header's data in the docs route too, with `loadMainShell(context)` in its `loader`. -Got a layout with its own search button? `SearchDialog` from `@vitnode/core/tanstack/search` is the header dialog without its trigger. Give it `open`, `onOpenChange` and the same `firstSourceId`. +Got a layout without the VitNode header? Render `HeaderSearch` from `@vitnode/core/tanstack/search` on its own. It is the header's search button together with its dialog and <kbd>⌘</kbd> <kbd>K</kbd> shortcut. Pass `firstSourceId={docsSearchSource.id}` to put your source's group first. Core exports no dialog without its trigger. ## Check the result diff --git a/apps/web/content/docs/dev/search-suggestions-dialog.webp b/apps/web/content/docs/dev/search-suggestions-dialog.webp index e384432bd7814d8e4926c2578336f2c49ced03fd..bb2f44b47bdd543f8420914f52ada33db1d4ebb2 100644 GIT binary patch literal 43566 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 XlarZga?YhtXGISx>myqL00000Z0RjB literal 28484 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 C6j)dQ diff --git a/apps/web/content/docs/dev/search-suggestions.mdx b/apps/web/content/docs/dev/search-suggestions.mdx index eb3bffe752..f9876e5870 100644 --- a/apps/web/content/docs/dev/search-suggestions.mdx +++ b/apps/web/content/docs/dev/search-suggestions.mdx @@ -1,5 +1,5 @@ --- -title: Suggestions +title: Search suggestions description: Show as-you-type search suggestions and popular content in the header search dialog, and count views, clicks and comments towards popularity. icon: TextSearch --- @@ -13,7 +13,7 @@ Before you type, it shows what's popular. After two characters, it shows matchin <ImgDocs src={searchDialog} - alt="Search bar open over the page with an empty Search field and a Popular right now list: a forum topic with its forum name and excerpt, followed by articles and comments, each with a thumbnail or type icon and its date on the right, and keyboard hints at the bottom" + alt="Search bar open over the page with an empty Search field and a Popular right now list: a forum topic with its forum name and excerpt, followed by four newsroom stories and explainers, each with a type icon and its date on the right, and keyboard hints at the bottom" /> ## How the dialog works @@ -91,13 +91,13 @@ curl "http://localhost:3000/api/@vitnode/core/search/suggest?search=hel&lang=en" "items": [ { "id": 105, - "itemType": "example.article", + "itemType": "newsroom.story", "itemId": "3", "title": "Hello Content Engine", - "url": "/articles/hello-content-engine", + "url": "/stories/hello-content-engine", "context": null, "createdAt": "2026-10-10T10:55:34.335Z", - "excerpt": "Hello Content Engine A first article from the example plugin, served by the public API and rendered on its own page.", + "excerpt": "Hello Content Engine A first story from the newsroom plugin, served by the public API and rendered on its own page.", "image": null } ] diff --git a/apps/web/content/docs/dev/search.mdx b/apps/web/content/docs/dev/search.mdx index 194702e585..531888439a 100644 --- a/apps/web/content/docs/dev/search.mdx +++ b/apps/web/content/docs/dev/search.mdx @@ -1,5 +1,5 @@ --- -title: Search & Discovery +title: Search description: Enable site-wide full-text search across plugin content with Postgres or Elasticsearch ranking engines. icon: Search --- @@ -20,7 +20,7 @@ VitNode includes a unified site-wide search and discovery engine. Searchable rec ### Index when a record changes -Index or update an item from any Hono route handler via `c.get("search")`: +Call `c.get("search").index()` in the route handler that writes the record, right after the database write succeeds, so the index never points at a row that was rolled back. Calling it again for the same `itemType` and `itemId` updates the document: ```ts // [!code ++:10] @@ -36,6 +36,8 @@ await c.get('search').index({ }) ``` +`article` is the row your handler just saved. Inside a plugin route the document belongs to that plugin automatically. From a cron job or queue task, which run in Core's request, pass `pluginId: manifest.id` so your plugin owns the document. + </Step> <Step> @@ -107,7 +109,7 @@ export const recipesApiPlugin = () => </Step> </Steps> -## Pluggable Search Engines +## Search engines VitNode supports two search engines: @@ -217,7 +219,7 @@ Once `domains` is configured, every result URL is absolute, so a click always op The rules: - It starts with `/` and holds exactly one `{slug}`. No other placeholder, empty segment, `..` or whitespace. -- A page route has to serve it (`{slug}` read as `:slug`). If a plugin exports its content types from `src/content.ts` and none does, `dev` and `build` stop with `content-url-without-page`. See [Content URLs need a page](/docs/dev/i18n/localized-urls#content-urls-need-a-page). +- A page route has to serve it (`{slug}` read as `:slug`). If a plugin exports its content types from `src/content.ts` and none does, `dev` and `build` stop with `content-url-without-page`. See [Content URLs need a page](/docs/dev/i18n/localized-urls-advanced#content-urls-need-a-page). - `{locale}` is no longer needed. A legacy leading `/{locale}/` (like `/{locale}/blog/article/{slug}`) is still accepted and stripped. - `{locale}` anywhere else fails with: `search.pathTemplate "..." places "{locale}" somewhere other than the start of the path. The language is no longer part of the template: i18n.localePrefix, i18n.domains and i18n.routePaths now place it. Remove "{locale}" (recommended), or keep it only as the first segment ("/{locale}/...").` - A content type that isn't localized can't use `{locale}` at all. @@ -249,7 +251,7 @@ A rebuild is a queued job, so it only runs once [cron](/docs/dev/cron) is runnin --- -## Search Document Reference +## Search document reference <TypeTable type={{ @@ -259,6 +261,11 @@ A rebuild is a queued job, so it only runs once [cron](/docs/dev/cron) is runnin required: true, type: 'string', }, + createdAt: { + description: 'When the record was created. Sorts timelines and powers the date filter.', + required: true, + type: 'Date', + }, itemId: { description: 'Primary key of the indexed record. A number for serial ids, a string for Content Engine types with a uuid or bigint idStrategy. Stored as text in core_search_index.', @@ -302,10 +309,38 @@ A rebuild is a queued job, so it only runs once [cron](/docs/dev/cron) is runnin type: 'boolean', default: 'false', }, + languageCode: { + description: + 'The language of this document. Multi-language content indexes one document per language; with `itemType` and `itemId` it identifies the document.', + type: 'string', + default: "''", + }, + containerType: { + description: + 'The kind of container holding the item, such as a forum. Used with `containerId` to group items.', + type: 'string', + }, + containerId: { + description: 'The id of the container holding the item.', + type: 'number', + }, + metadata: { + description: 'Extra data returned with the hit.', + type: 'Record<string, unknown>', + }, + pluginId: { + description: + "The plugin that owns the document. Defaults to the current request's plugin; set it from cron jobs and queue tasks. A rebuild indexer fills it in for you.", + type: 'string', + }, + updatedAt: { + description: 'When the record last changed.', + type: 'Date', + }, }} /> -## Learn More +## Learn more <Cards> <Card @@ -314,7 +349,7 @@ A rebuild is a queued job, so it only runs once [cron](/docs/dev/cron) is runnin href="/docs/dev/database/search" /> <Card - title="Suggestions" + title="Search suggestions" description="Header search dialog, popular content and popularity signals" href="/docs/dev/search-suggestions" /> diff --git a/apps/web/content/docs/dev/server-functions.mdx b/apps/web/content/docs/dev/server-functions.mdx index 05ce4dccbb..55f8ceeb51 100644 --- a/apps/web/content/docs/dev/server-functions.mdx +++ b/apps/web/content/docs/dev/server-functions.mdx @@ -1,5 +1,5 @@ --- -title: Server Functions & Isomorphic Fetching +title: Server functions description: When to reach for the universal fetcher, the server fetcher, or a TanStack Start server function in VitNode. icon: ServerCog --- @@ -8,7 +8,7 @@ VitNode keeps backend business logic in Hono API routes. The frontend's only job is to call them - and for that, one universal fetcher covers SSR and browser navigation at once. -## Decision Matrix +## Pick the tool | Goal | Recommended tool | Rationale | | :----------------------------- | :---------------------------------------------- | :-------------------------------------------------------------------------------------------- | @@ -56,13 +56,23 @@ export const fetchDevices = async () => { ``` ```tsx title="plugins/devices/src/pages/devices-page.tsx" -import { definePluginRoute } from '@vitnode/core/routing' - -export const route = definePluginRoute({ - load: async () => await fetchDevices(), // [!code ++] +import { defineRoute } from '@vitnode/core/tanstack/plugin-routes' + +import { fetchDevices } from '../lib/fetch-devices' + +export const route = defineRoute({ + // [!code ++:5] + load: async ({ context }) => + await context.queryClient.query({ + queryKey: ['devices', 'list'], + queryFn: fetchDevices, + staleTime: 'static', + }), }) ``` +Loading through `context.queryClient` lets a hover preload and the click share one request; see [Preloading](/docs/dev/routing/preloading). + The initial render forwards the visitor's cookie, user-agent and IP through the request-aware transport; later navigations are a direct same-origin `fetch` to Hono. See [Fetcher](/docs/dev/fetcher) for the full contract. @@ -120,7 +130,7 @@ Keep code that imports `@vitnode/core/tanstack/fetcher/server` in a rejects these three options at compile time, so a call that needs one cannot end up in a shared module by accident. -## Learn More +## Related <Cards> <Card @@ -129,8 +139,8 @@ end up in a shared module by accident. href="/docs/dev/fetcher" /> <Card - title="Plugin Routes" - description="Declare routes, lazy components, and loaders" + title="Routing" + description="Declare plugin pages and their loaders" href="/docs/dev/routing" /> </Cards> diff --git a/apps/web/content/docs/dev/setup.mdx b/apps/web/content/docs/dev/setup.mdx index 213328cf81..e284961d9a 100644 --- a/apps/web/content/docs/dev/setup.mdx +++ b/apps/web/content/docs/dev/setup.mdx @@ -1,28 +1,28 @@ --- -title: Getting Started -description: Create a VitNode app, prepare Postgres, start TanStack Start, and sign in to AdminCP in five small steps. +title: Setup +description: Create a VitNode app with create-vitnode-app, start PostgreSQL, run the development server and sign in to the AdminCP as the first administrator. icon: Rocket --- -import { - BookOpenIcon, - PackagePlusIcon, - ServerIcon, - SettingsIcon, -} from 'lucide-react' -import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Tab, Tabs } from "fumadocs-ui/components/tabs"; -You need Node.js 22.18+ (or 24.11+, or 26+), Postgres (or Docker), and your -favorite package manager. -Choose a workspace with Turborepo if you will create plugins; plugins are the -home for product work, not an optional side quest. +This page takes you from an empty folder to a running VitNode app, with you signed in to the AdminCP as its administrator. It is the first lesson of the beginner path; the next one creates a plugin inside this app. + +## Before you begin + +- **Node.js** `22.18` or newer in the 22 line, `24.11` or newer in the 24 line, or `26` and later. The generator and every generated package refuse older versions. +- **A package manager:** pnpm, bun or npm. +- **PostgreSQL.** The easiest local option is Docker, which the generator can configure for you. Your own PostgreSQL server works too. <Steps> - <Step> + +<Step> ### Scaffold the app -<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Create VitNode app"> +Run the generator from the folder that should contain your project: + +<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Create a VitNode app"> ```bash tab="bun" bun create vitnode-app@canary @@ -38,16 +38,74 @@ npm create vitnode-app@canary </Tabs> -Pick **Single App** for TanStack Start plus Hono at `/api`. Turn on -**Turborepo** if you intend to use `--plugin`; it gives the generator a -workspace root and a place for `plugins/*`. +It asks for a project name (default `my-vitnode`), then these questions. The recommended answers set you up for the rest of the beginner path: + +| Question | Recommended | Why | +| --------------------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| Package manager | the one you use | The generator offers only the managers you have installed. | +| App type | **Single App** | One TanStack Start app with the Hono API mounted at `/api`. **Monorepo App** splits web and API into two apps; **Only API** has no front end. | +| Use Turborepo? | **Yes** | Required to create plugins. A Monorepo App always gets it, so the generator skips the question. | +| Oxlint & Oxfmt? | your choice | Adds lint and format scripts. | +| Docker container? | **Yes**, unless you run PostgreSQL yourself | Adds `docker-compose.yml` with PostgreSQL 17 and Redis on `127.0.0.1`. | +| Git repository? | your choice | | +| Install dependencies? | **Yes** | Installs packages and generates the first migrations. | + +With Turborepo, the app lives in `apps/web` (plus `apps/api` for a Monorepo App) and your plugins will go in `plugins/`. Without it, the app sits at the project root and you cannot create plugins later. + +</Step> + +<Step> + +### Open the project + +<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Open the project"> + +```bash tab="bun" +cd my-vitnode +``` + +```bash tab="pnpm" +cd my-vitnode +``` + +```bash tab="npm" +cd my-vitnode +``` + +</Tabs> + +Run every command in this lesson, and in the lessons after it, from this folder. If you answered **No** to "Install dependencies?", install them now with `bun install`, `pnpm install` or `npm install`. + +</Step> - </Step> - <Step> +<Step> -### Start the database +### Configure the environment -If you selected Docker, start Postgres and Redis locally: +The app reads its settings from `.env`. A Monorepo App already has `apps/web/.env`; a Single App ships only `.env.example`. Copy it next to itself: + +```bash title="Single App with Turborepo" +cp apps/web/.env.example apps/web/.env +``` + +For a Monorepo App / Single API: + +```bash title="Monorepo App / Single API" +cp apps/api/.env.example apps/api/.env +``` + +The defaults match the Docker services: + +- PostgreSQL at `postgresql://root:root@localhost:5432/vitnode`. Using your own PostgreSQL? Change `POSTGRES_URL` to its connection string. +- Redis at `redis://localhost:6379` with the password `root`. Redis is optional. Delete `REDIS_URL` to run without it, and VitNode falls back to an in-process cache. + +</Step> + +<Step> + +### Start PostgreSQL + +With Docker, start the database and Redis in the background: <Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Start local services"> @@ -65,16 +123,18 @@ npm run docker:dev </Tabs> - </Step> - - <Step> +Without Docker, make sure the server in `POSTGRES_URL` is running and the database exists. + +</Step> -### Start VitNode +<Step> + +### Start the development server <Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Start the development server"> ```bash tab="bun" -bun dev +bun run dev ``` ```bash tab="pnpm" @@ -87,36 +147,32 @@ npm run dev </Tabs> -Open `http://localhost:3000`. +Before the server starts, `dev` builds your plugins, generates any pending migrations, applies them and seeds the default roles. You never run migrations by hand on this path. When it is ready, it prints the addresses: + +```txt + Web http://localhost:3000 + AdminCP http://localhost:3000/admin + API http://localhost:3000/api +``` + +</Step> + +<Step> + +### Create the administrator account + +VitNode has no installer. The **first account that registers becomes the administrator**. It gets the root Administrator role and a verified email. Every later account is a regular member. + +Open `http://localhost:3000/register` and create your account. Then open `http://localhost:3000/admin` and sign in with the same email and password. The AdminCP has its own sign-in, separate from the site's. + +</Step> - </Step> </Steps> -## Keep going - -<Cards> - <Card - icon={<SettingsIcon />} - title="Configuration" - description="Locales, plugins, request middleware, and what a browser may hold." - href="/docs/dev/configuration" - /> - <Card - icon={<PackagePlusIcon />} - title="Create a plugin" - description="Scaffold, register, and visit an installable feature package." - href="/docs/dev/plugins/create" - /> - <Card - icon={<ServerIcon />} - title="Deployments" - description="Move your TanStack Start and Hono app to production." - href="/docs/dev/deployments/self-hosted" - /> - <Card - icon={<BookOpenIcon />} - title="First plugin tutorial" - description="Follow a compact example that adds a real plugin page." - href="/docs/guides/first-plugin" - /> -</Cards> +## Check the result + +- `http://localhost:3000` shows the public site, and the header has your avatar. +- `http://localhost:3000/admin` shows the AdminCP dashboard after you sign in. +- **Staff → Administrators** in the AdminCP lists the **Administrator** role as unrestricted. + +If `dev` stops with a database error, PostgreSQL is not reachable at `POSTGRES_URL`. Check that the containers are up (`docker ps`) or that your own server accepts the connection. diff --git a/apps/web/content/docs/dev/sso/connected-accounts.mdx b/apps/web/content/docs/dev/sso/connected-accounts.mdx index 81806f3658..ace0d2e7c4 100644 --- a/apps/web/content/docs/dev/sso/connected-accounts.mdx +++ b/apps/web/content/docs/dev/sso/connected-accounts.mdx @@ -1,5 +1,5 @@ --- -title: Connected Accounts +title: Connected accounts description: Let members connect Google, Discord, Facebook or custom SSO accounts from Settings, import their avatar and name, and keep them in sync on sign-in. icon: Link --- @@ -8,7 +8,7 @@ import { TypeTable } from "fumadocs-ui/components/type-table" **Settings → Connected accounts** (`/settings/sso`) is where a signed-in member manages their SSO accounts. It shows up in the settings menu as soon as at least one [SSO adapter](/docs/dev/sso) is configured - no extra setup, no extra redirect URIs. -// Image prompt: A settings page titled "Connected accounts" with three grouped lists - "Sign-in accounts" (Google with an email and "Connected Mar 14", Discord, Facebook with a Connect button), "Profile" (Avatar, First name, Last name rows, each with its current value and a "From Google" / "Manual" dropdown) and "Sync" (Google · First name, an "On sign-in" switch and a "Sync now" button), light theme, blue accents. +{/* Image prompt: A settings page titled "Connected accounts" with three grouped lists - "Sign-in accounts" (Google with an email and "Connected Mar 14", Discord, Facebook with a Connect button), "Profile" (Avatar, First name, Last name rows, each with its current value and a "From Google" / "Manual" dropdown) and "Sync" (Google · First name, an "On sign-in" switch and a "Sync now" button), light theme, blue accents. */} The page uses the same grouped rows as the rest of Settings, in three groups: @@ -118,6 +118,7 @@ Mutations take JSON bodies, which the browser can't send cross-site without a CO - [`user.sso.linked`](/docs/dev/events/built-in-events) - a provider was connected. - [`user.sso.unlinked`](/docs/dev/events/built-in-events) - a provider was disconnected. - [`user.sso.profile_synced`](/docs/dev/events/built-in-events) - profile fields changed because of a provider. +- [`user.sso.preferences_updated`](/docs/dev/events/built-in-events) - profile-field sources or sync-on-sign-in settings were saved, by the member or by staff. ## Adapter support diff --git a/apps/web/content/docs/dev/sso/custom-adapter.mdx b/apps/web/content/docs/dev/sso/custom-adapter.mdx index 629c3508e0..a22b418bc0 100644 --- a/apps/web/content/docs/dev/sso/custom-adapter.mdx +++ b/apps/web/content/docs/dev/sso/custom-adapter.mdx @@ -1,22 +1,27 @@ --- -title: Custom SSO Adapter -description: Build a custom OAuth2 Single Sign-On adapter for any provider with the SSOApiPlugin interface. +title: Custom adapter +description: Build a custom OAuth2 single sign-on adapter for VitNode with the SSOApiPlugin interface, using GitHub as the example. icon: Puzzle --- import { TypeTable } from "fumadocs-ui/components/type-table" -VitNode includes built-in SSO adapters for Google, Discord, and Facebook. You can connect any other OAuth2 provider (e.g. GitHub, Apple, Slack) by implementing the `SSOApiPlugin` interface. State cookie generation, user session linking, and login buttons are handled automatically. +VitNode ships SSO adapters for Google, Discord and Facebook. To connect any other OAuth2 provider, such as GitHub, write an object that implements `SSOApiPlugin`. VitNode handles the state cookie, account linking, sessions and the login button; your adapter only talks to the provider. -## Quick start: GitHub SSO Adapter +## Before you begin -Implement the 5 interface methods and register the adapter in `vitnode.api.config.ts`: +- An OAuth app at the provider. For GitHub, create one under **Settings → Developer settings → OAuth Apps** with the callback URL `http://localhost:3000/login/sso/github` (your `VITNODE_WEB_URL` plus `login/sso/github`), and put its client ID and secret in the API's `.env` as `GITHUB_CLIENT_ID` and `GITHUB_CLIENT_SECRET`. -### 1. Build the Adapter +## Build a GitHub adapter + +An adapter has three functions: `getUrl`, `fetchToken` and `fetchUser`. + +### 1. Write the adapter ```ts title="apps/api/src/utils/sso/github.ts" import type { SSOApiPlugin } from "@vitnode/core/api/models/sso" import { getRedirectUri } from "@vitnode/core/api/models/sso" +import { HTTPException } from "hono/http-exception" export const GitHubSSOApiPlugin = ({ clientId, @@ -32,11 +37,11 @@ export const GitHubSSOApiPlugin = ({ id, name: "GitHub", profileFields: ["avatar"], - // 1. Build Authorization URL + // 1. Send the browser to the provider getUrl: ({ state }) => `https://github.com/login/oauth/authorize?client_id=${clientId}&redirect_uri=${encodeURIComponent(redirectUri)}&scope=read:user,user:email&state=${state}`, - // 2. Exchange Authorization Code for Token + // 2. Exchange the authorization code for a token fetchToken: async (code) => { const response = await fetch("https://github.com/login/oauth/access_token", { method: "POST", @@ -52,10 +57,15 @@ export const GitHubSSOApiPlugin = ({ }), }) - return await response.json() + const data = await response.json() + if (!data.access_token) { + throw new HTTPException(400, { message: "GitHub refused the code" }) + } + + return { access_token: data.access_token, token_type: data.token_type } }, - // 3. Retrieve User Profile & Email + // 3. Read the provider account fetchUser: async ({ access_token, token_type }) => { const headers = { Authorization: `${token_type} ${access_token}` } @@ -68,11 +78,14 @@ export const GitHubSSOApiPlugin = ({ const emails: Array<{ email: string; primary: boolean; verified: boolean }> = await emailRes.json() const primaryEmail = emails.find((e) => e.primary && e.verified)?.email - if (!primaryEmail) throw new Error("GitHub account has no verified email") + if (!primaryEmail) { + throw new HTTPException(400, { message: "Email not verified" }) + } return { id: String(user.id), email: primaryEmail, + emailVerified: true, // only a verified primary address gets this far username: user.login, avatarUrl: user.avatar_url, } @@ -81,9 +94,9 @@ export const GitHubSSOApiPlugin = ({ } ``` ---- +`getRedirectUri(id)` returns `{VITNODE_WEB_URL}login/sso/{id}`; send the same value from `getUrl` and `fetchToken`. Throw an `HTTPException` to fail a sign-in with a clear status; a plain `Error` becomes a `500`. -### 2. Register in API Configuration +### 2. Register it in the API config ```ts title="apps/api/src/vitnode.api.config.ts" import { buildApiConfig } from "@vitnode/core/vitnode.config" @@ -102,11 +115,11 @@ export const vitNodeApiConfig = buildApiConfig({ }) ``` -A **GitHub** login button automatically renders on `/login` and `/register`, and `/login/sso/github` routes incoming authentication requests. It is a neutral, text-only button until you give the adapter an [icon and a brand color](/docs/dev/sso/icons). +## Check the result ---- +Restart the API and open `/login`. A **Continue with GitHub** button appears on `/login` and `/register`; pressing it sends you to GitHub and back to `/login/sso/github`, signed in. It is a neutral, text-only button until you give the adapter an [icon and a brand color](/docs/dev/sso/icons). -## `SSOApiPlugin` Interface Reference +## `SSOApiPlugin` reference <TypeTable type={{ @@ -121,12 +134,12 @@ A **GitHub** login button automatically renders on `/login` and `/register`, and type: "string", }, icon: { - description: "Brand mark for the login button: inline SVG markup or an image URL. See Provider Icons and Colors.", + description: "Brand mark for the login button: inline SVG markup or an image URL. See Provider icons.", required: false, type: "string", }, brandColor: { - description: "Hex color (#RGB or #RRGGBB) that fills the login button. The label turns white or near-black, whichever reads better. See Provider Icons and Colors.", + description: "Hex color (#RGB or #RRGGBB) that fills the login button. The label turns white or near-black, whichever reads better. See Provider icons.", required: false, type: "string", }, @@ -153,7 +166,7 @@ A **GitHub** login button automatically renders on `/login` and `/register`, and }} /> -See [Provider Icons and Colors](/docs/dev/sso/icons) for the accepted `icon` and `brandColor` formats, and for registering a React component instead. +See [Provider icons](/docs/dev/sso/icons) for the accepted `icon` and `brandColor` formats, and for registering a React component instead. ## Profile data @@ -182,21 +195,21 @@ All three are optional, so adapters written before this still work - they just h - `avatarUrl` must be `https`. VitNode downloads and re-stores it itself, with SSRF protection and size and type checks, so you don't have to. - Don't add scopes just for profile data. If a field needs extra permission, leave it out of `profileFields`. -## Built-in SSO Adapters +## Built-in adapters <Cards> <Card - title="Google SSO" + title="Google" description="Configure Google OAuth credentials" href="/docs/dev/sso/google" /> <Card - title="Discord SSO" + title="Discord" description="Configure Discord OAuth credentials" href="/docs/dev/sso/discord" /> <Card - title="Facebook SSO" + title="Facebook" description="Configure Facebook OAuth credentials" href="/docs/dev/sso/facebook" /> diff --git a/apps/web/content/docs/dev/sso/discord.mdx b/apps/web/content/docs/dev/sso/discord.mdx index 54e8816859..53f3416c91 100644 --- a/apps/web/content/docs/dev/sso/discord.mdx +++ b/apps/web/content/docs/dev/sso/discord.mdx @@ -170,10 +170,15 @@ Ask the API what it thinks it supports: ```bash curl http://localhost:3000/api/@vitnode/core/middleware -# {"isEmail":false,"sso":[{"id":"discord","name":"Discord"}]} ``` -Then open `/login` and press **Discord**. You should see Discord's "connect to" +The `sso` array in the response now lists the provider. Here it is abridged, with the SVG icon cut short: + +```json +{ "sso": [{ "id": "discord", "name": "Discord", "icon": "<svg ...>", "brandColor": "#5865F2" }] } +``` + +Then open `/login` and press the **Discord** button under **Continue with**. You should see Discord's "connect to" authorization prompt listing your username and email, get bounced back to `/login/sso/discord?code=...&state=...`, and land on the front page signed in. @@ -195,7 +200,7 @@ permissions. | Profile URL | `https://discord.com/api/users/@me` | | Scopes | `identify email` | | Provider id | `discord` | -| Fields read | `id`, `email`, `username`, `avatar` | +| Fields read | `id`, `email`, `verified`, `username`, `avatar` | Both scopes are required: `identify` for the id and username, `email` for the address the account is created with. @@ -216,11 +221,11 @@ avatar is offered. generic error screen. </Callout> -<Callout type="warn" title="Discord's email verification flag is not checked"> - Unlike the Google adapter, which rejects an unverified address, this one takes - Discord's `email` at face value and never reads Discord's `verified` field. If - you need that guarantee, copy the adapter into your own project and add the - check - see [Custom adapter](/docs/dev/sso/custom-adapter). +<Callout type="warn" title="Unverified Discord emails are rejected"> + The adapter reads Discord's `verified` field and answers `400 Email not + verified` when it is `false`, so a Discord account with an unconfirmed address + cannot sign in until its owner confirms it in Discord. The visitor sees the + generic error screen. </Callout> <Callout type="warn" title="A missing key fails on click, not on boot"> @@ -230,7 +235,7 @@ avatar is offered. toast is an environment problem, not a portal problem. </Callout> -## Next +## Related <Cards> <Card diff --git a/apps/web/content/docs/dev/sso/facebook.mdx b/apps/web/content/docs/dev/sso/facebook.mdx index de4baa9269..0988423b4c 100644 --- a/apps/web/content/docs/dev/sso/facebook.mdx +++ b/apps/web/content/docs/dev/sso/facebook.mdx @@ -204,10 +204,15 @@ Ask the API what it thinks it supports: ```bash curl http://localhost:3000/api/@vitnode/core/middleware -# {"isEmail":false,"sso":[{"id":"facebook","name":"Facebook"}]} ``` -Then open `/login` and press **Facebook**. You should get Meta's "Continue as +The `sso` array in the response now lists the provider. Here it is abridged, with the SVG icon cut short: + +```json +{ "sso": [{ "id": "facebook", "name": "Facebook", "icon": "<svg ...>", "brandColor": "#0866FF" }] } +``` + +Then open `/login` and press the **Facebook** button under **Continue with**. You should get Meta's "Continue as ..." dialog, be bounced back to `/login/sso/facebook?code=...&state=...`, and land on the front page signed in. Your account now has a row in `core_users_sso` with `providerId` `facebook`. @@ -282,17 +287,13 @@ counts as no avatar. toast is an environment problem, not a dashboard problem. </Callout> -<Callout - type="warn" - title="An email that already has a password account is a dead end" -> - If someone registered with the same address using the password form, the - callback answers `409` and offers them the login page instead. There is no - link-an-existing-account screen yet - see [how the callback handles - accounts](/docs/dev/sso#what-the-callback-does-with-the-account). +<Callout type="info" title="An email that already has an account"> + If someone already registered with the same address, Facebook sign-in asks for + that account's password once and then links the two. See [Linking an existing + account](/docs/dev/sso#how-accounts-link). </Callout> -## Next +## Related <Cards> <Card diff --git a/apps/web/content/docs/dev/sso/google.mdx b/apps/web/content/docs/dev/sso/google.mdx index d3ca1a0a74..e3addc82e0 100644 --- a/apps/web/content/docs/dev/sso/google.mdx +++ b/apps/web/content/docs/dev/sso/google.mdx @@ -206,15 +206,20 @@ Ask the API what it thinks it supports: ```bash curl http://localhost:3000/api/@vitnode/core/middleware -# {"isEmail":false,"sso":[{"id":"google","name":"Google"}]} ``` -Then open `/login` and press **Google**. You should be sent to Google's consent +The `sso` array in the response now lists the provider. Here it is abridged, with the SVG icon cut short: + +```json +{ "sso": [{ "id": "google", "name": "Google", "icon": "<svg ...>" }] } +``` + +Then open `/login` and press the **Google** button under **Continue with**. You should be sent to Google's consent screen, bounced back to `/login/sso/google?code=...&state=...`, and land on the front page signed in. Your account now has a row in `core_users_sso` with `providerId` `google`. -{/* Image prompt: The VitNode /login page with the email and password fields above a divider reading "Or continue With" and an outline button labelled Google beneath it, light theme, 900x850. */} +{/* Image prompt: The VitNode /login page split in two columns - left a "Continue with" heading over a neutral "Google" button with the four-colour G, right the email and password form, a vertical "or" divider between them, light theme, 900x600. */} </Step> @@ -271,17 +276,13 @@ account without one simply has nothing to import for that field. console. </Callout> -<Callout - type="warn" - title="An email that already has a password account is a dead end" -> - If someone registered with the same address using the password form, the - callback answers `409` and offers them the login page instead. There is no - link-an-existing-account screen yet - see [how the callback handles - accounts](/docs/dev/sso#what-the-callback-does-with-the-account). +<Callout type="info" title="An email that already has an account"> + If someone already registered with the same address, Google sign-in asks for + that account's password once and then links the two. See [Linking an existing + account](/docs/dev/sso#how-accounts-link). </Callout> -## Next +## Related <Cards> <Card diff --git a/apps/web/content/docs/dev/sso/icons.mdx b/apps/web/content/docs/dev/sso/icons.mdx index 454ec62ce9..8769f1462b 100644 --- a/apps/web/content/docs/dev/sso/icons.mdx +++ b/apps/web/content/docs/dev/sso/icons.mdx @@ -1,5 +1,5 @@ --- -title: Provider Icons and Colors +title: Provider icons description: Put a brand mark and a brand color on your SSO login buttons - an inline SVG or image URL and a hex color from the adapter, or a React component registered in the browser. icon: Image --- @@ -24,18 +24,20 @@ give it a mark and a color. ## From the adapter (SVG or image) -Add an `icon` to whatever your adapter returns. It travels to the browser with +Add an `icon` to the object your adapter returns. It travels to the browser with the rest of the provider list, so it has to be a string: inline SVG markup, or a URL the browser can load as an image. +This excerpt adds it to the object the GitHub adapter from [Custom adapter](/docs/dev/sso/custom-adapter) returns: + ```ts title="apps/api/src/utils/sso/github.ts" -export const GitHubSSOApiPlugin = (): SSOApiPlugin => ({ - id: 'github', - name: 'GitHub', - // [!code ++] - icon: '<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" /></svg>', - // ... getUrl, fetchToken, fetchUser -}) + return { + id, + name: "GitHub", + // [!code ++] + icon: '<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" /></svg>', + // ... profileFields, getUrl, fetchToken, fetchUser + } ``` Use `fill="currentColor"` and leave the width and height off: the mark then @@ -44,12 +46,12 @@ takes the button's text color in both light and dark mode - white on a multicolor mark, such as Google's four-color G, keeps its own fills; give its adapter no brand color so it sits on the neutral button it was designed for. -An image works the same way: +An image works the same way. Use any one of these: ```ts -icon: 'https://cdn.example.com/brands/slack.svg' // remote file -icon: '/icons/slack.png' // something in your app's public folder -icon: 'data:image/png;base64,iVBORw0KGgo...' // inlined bytes +icon: "https://cdn.example.com/brands/github.svg", // remote file +icon: "/icons/github.png", // something in your app's public folder +icon: "data:image/png;base64,iVBORw0KGgo...", // inlined bytes ``` <Callout type="warn" title="What the login page will accept"> @@ -74,27 +76,57 @@ mystery. ### Importing an .svg file -You do not have to paste the markup. Where the adapter is bundled by Vite - -`apps/web`, or any generated VitNode app - import the file itself: +You do not have to paste the markup. Give the adapter factory an `icon` option +and pass the file in from the config. In the factory from [Custom +adapter](/docs/dev/sso/custom-adapter): + +```ts title="apps/web/src/utils/sso/github.ts" +export const GitHubSSOApiPlugin = ({ + clientId, + clientSecret, + icon, // [!code ++] +}: { + clientId: string + clientSecret: string + icon?: string // [!code ++] +}): SSOApiPlugin => { + // ... + return { + id, + name: "GitHub", + icon, // [!code ++] + // ... profileFields, getUrl, fetchToken, fetchUser + } +} +``` + +Where the config is bundled by Vite (`apps/web`, or any generated single-app +VitNode project), import the file itself: ```ts title="apps/web/src/vitnode.api.config.ts" -import githubIcon from './icons/github.svg?raw' // the file's markup -import slackIcon from './icons/slack.svg' // the file's URL +import { buildApiConfig } from "@vitnode/core/vitnode.config" + +import githubIcon from "./icons/github.svg?raw" // the file's markup +import { GitHubSSOApiPlugin } from "./utils/sso/github" export const vitNodeApiConfig = buildApiConfig({ authorization: { ssoAdapters: [ - GitHubSSOApiPlugin({ icon: githubIcon }), - SlackSSOApiPlugin({ icon: slackIcon }), + GitHubSSOApiPlugin({ + clientId: process.env.GITHUB_CLIENT_ID!, + clientSecret: process.env.GITHUB_CLIENT_SECRET!, + icon: githubIcon, + }), ], }, // ... }) ``` -Both work: `?raw` hands you the file's contents - prolog, `DOCTYPE`, generator -comment and all - and a plain import hands you a URL (`/assets/slack-a1b2c3.svg` -after a build, or an inlined `data:image/svg+xml,...` for a small file). Prefer +`?raw` hands you the file's whole contents, including the prolog, `DOCTYPE` and +generator comment. A plain `import githubLogo from "./icons/github.svg"` hands you a URL instead +(`/assets/github-a1b2c3.svg` after a build, or an inlined +`data:image/svg+xml,...` for a small file), and that works as an `icon` too. Prefer `?raw` when you want the mark to follow the button's text colour, since a file loaded through `<img>` cannot see `currentColor`. @@ -123,14 +155,14 @@ Add a `brandColor` to fill the button with the provider's color, the way the built-in Discord (`#5865F2`) and Facebook (`#0866FF`) adapters do: ```ts title="apps/api/src/utils/sso/github.ts" -export const GitHubSSOApiPlugin = (): SSOApiPlugin => ({ - id: 'github', - name: 'GitHub', - icon: githubIcon, - // [!code ++] - brandColor: '#24292F', - // ... getUrl, fetchToken, fetchUser -}) + return { + id, + name: "GitHub", + icon: githubIcon, + // [!code ++] + brandColor: "#24292F", + // ... profileFields, getUrl, fetchToken, fetchUser + } ``` The value has to be a hex color - `#RGB` or `#RRGGBB`. The button picks its @@ -152,11 +184,11 @@ id. A registered icon wins over whatever the adapter sent. ```tsx title="apps/web/src/router.tsx" import { configureSSOIcons } from '@vitnode/core/tanstack/auth' -import { GitHubIcon } from './components/icons/github' +import { GitLabIcon } from './components/icons/gitlab' // your own component configureSSOIcons({ - github: GitHubIcon, // a component: rendered with `className="size-4"` - slack: <img alt="" className="size-4" src="/icons/slack.png" />, // or JSX + gitlab: GitLabIcon, // a component: rendered with `className="size-4"` + github: <img alt="" className="size-4" src="/icons/github.png" />, // or JSX }) ``` @@ -195,12 +227,12 @@ needs a wrapper element. <Cards> <Card - title="Custom SSO Adapter" + title="Custom adapter" description="Build an adapter for any OAuth2 provider" href="/docs/dev/sso/custom-adapter" /> <Card - title="Single Sign-On" + title="SSO" description="Register adapters and link accounts" href="/docs/dev/sso" /> diff --git a/apps/web/content/docs/dev/sso/index.mdx b/apps/web/content/docs/dev/sso/index.mdx index a6af4571ef..7a65e35257 100644 --- a/apps/web/content/docs/dev/sso/index.mdx +++ b/apps/web/content/docs/dev/sso/index.mdx @@ -1,10 +1,10 @@ --- -title: Single Sign-On (SSO) -description: Enable social authentication with Google, Discord, Facebook, or custom OAuth2 providers in VitNode. +title: SSO +description: Add single sign-on to VitNode with Google, Discord, Facebook or a custom OAuth2 adapter, and learn how SSO sign-ins find, link or create accounts. icon: KeyRound --- -VitNode provides built-in OAuth2 single sign-on. Register an adapter in your API configuration, and authentication buttons automatically appear on `/login` and `/register`. +VitNode has built-in OAuth2 single sign-on (SSO). Register an adapter in your API configuration, and a sign-in button for that provider appears on `/login` and `/register`. This page covers registering an adapter, the callback URL to give the provider, and how an SSO sign-in finds, links or creates an account. ## Quick start @@ -19,8 +19,8 @@ export const vitNodeApiConfig = buildApiConfig({ authorization: { ssoAdapters: [ GoogleSSOApiPlugin({ - clientId: process.env.GOOGLE_CLIENT_ID!, - clientSecret: process.env.GOOGLE_CLIENT_SECRET!, + clientId: process.env.GOOGLE_CLIENT_ID, + clientSecret: process.env.GOOGLE_CLIENT_SECRET, }), ], }, @@ -28,8 +28,9 @@ export const vitNodeApiConfig = buildApiConfig({ ``` A **Google** button automatically renders on your login and registration forms, -four-color G included. The built-in adapters ship their own marks and colors - -Discord and Facebook buttons are filled with their brand color - and a custom +four-color G included. [Google](/docs/dev/sso/google) shows where the client ID +and secret come from. The built-in adapters ship their own marks and colors, and +the Discord and Facebook buttons are filled with their brand color. A custom adapter can [add its own](/docs/dev/sso/icons). ## On the login page @@ -51,7 +52,7 @@ providers first, then the form. --- -## Supported Providers +## Supported providers <Cards> <Card @@ -70,12 +71,12 @@ providers first, then the form. href="/docs/dev/sso/facebook" /> <Card - title="Custom OAuth2 Adapter" + title="Custom adapter" description="Connect GitHub, Apple, or any OAuth2 provider" href="/docs/dev/sso/custom-adapter" /> <Card - title="Provider Icons and Colors" + title="Provider icons" description="Put a brand mark and color on the login buttons" href="/docs/dev/sso/icons" /> @@ -91,18 +92,35 @@ When configuring OAuth2 applications in provider developer consoles, use the fol https://your-domain.com/login/sso/{provider_id} ``` -For example: `https://your-domain.com/login/sso/google`. +For example: `https://your-domain.com/login/sso/google`. The domain is your +`VITNODE_WEB_URL`. + +## The round trip + +1. The sign-in button asks the API for the provider's authorization URL. The API + creates a random `state` value, stores a salted hash of it in the + `vitnode_auth--state-sso` cookie (named after `authorization.cookieName`), + and sends the browser to the provider with the plain value. +2. The provider redirects back to `/login/sso/{provider_id}` with a `code` and + the `state`. +3. The API checks `state` against the cookie and deletes the cookie. A missing + or different value answers `400 Invalid state`, so a callback link someone + else started cannot sign you in. +4. The adapter exchanges the `code` for a token, reads the provider account, and + VitNode signs in, links or creates the account as described below. + +The state cookie has no expiry date, so it never outlives the browser session. --- -## How Accounts Link +## How accounts link When a user signs in via SSO: -1. **Known Identity**: The provider account was linked before, so the user is signed straight into it. -2. **Existing Email Match**: An account already uses that address. The visitor is asked for that account's password; once it checks out, the provider identity is linked to the account and they are signed in. From then on that provider signs them straight in (case 1). A social login can never take over an account on its own - the password is what proves ownership. -3. **New Visitor**: A new user is created with their social display name and email. Avatar and real name stay empty until the member imports them from [Connected accounts](/docs/dev/sso/connected-accounts). +1. **Known identity.** The provider account was linked before, so the user is signed straight into it. +2. **Existing email match.** An account already uses that address. The visitor is asked for that account's password; once it checks out, the provider identity is linked to the account and they are signed in. From then on that provider signs them straight in (case 1). A social login can never take over an account on its own, because the password is what proves ownership. +3. **New visitor.** A new user is created with their social display name and email. Avatar and real name stay empty until the member imports them from [Connected accounts](/docs/dev/sso/connected-accounts). -Signed-in members can also connect more providers, import their avatar and name, and disconnect accounts in **Settings → Connected accounts** - see [Connected Accounts](/docs/dev/sso/connected-accounts). +Signed-in members can also connect more providers, import their avatar and name, and disconnect accounts in **Settings → Connected accounts**. See [Connected accounts](/docs/dev/sso/connected-accounts). ### SSO confirms the email @@ -134,18 +152,18 @@ points back to the login page. Every successful link emits [`user.sso.linked`](/docs/dev/events/built-in-events). -The address the provider returns is matched in its canonical form, so a Google account that reports `jan.kowalski@gmail.com` finds the member who registered as `jankowalski@gmail.com` instead of quietly becoming a second account. See [One Mailbox, One Account](/docs/dev/advanced/auth#one-mailbox-one-account). +The address the provider returns is matched in its canonical form, so a Google account that reports `jan.kowalski@gmail.com` finds the member who registered as `jankowalski@gmail.com` instead of quietly becoming a second account. See [One mailbox, one account](/docs/dev/advanced/auth#one-mailbox-one-account). -## Learn More +## Related <Cards> <Card - title="Users" - description="Session cookies and user model structure" + title="Current user" + description="Read the signed-in user and the user record" href="/docs/dev/working-with-users/users" /> <Card - title="Custom SSO Adapter" + title="Custom adapter" description="Implement SSOApiPlugin for other providers" href="/docs/dev/sso/custom-adapter" /> diff --git a/apps/web/content/docs/dev/sso/meta.json b/apps/web/content/docs/dev/sso/meta.json index fbdfb43945..57771ebbf1 100644 --- a/apps/web/content/docs/dev/sso/meta.json +++ b/apps/web/content/docs/dev/sso/meta.json @@ -1,5 +1,5 @@ { - "title": "Single Sign-On (SSO)", + "title": "SSO", "description": "OAuth2 sign-in with Google, Discord, Facebook or your own adapter", "icon": "KeyRound", "pages": [ diff --git a/apps/web/content/docs/dev/storage/custom-adapter.mdx b/apps/web/content/docs/dev/storage/custom-adapter.mdx index 1388a159f9..2501a08c40 100644 --- a/apps/web/content/docs/dev/storage/custom-adapter.mdx +++ b/apps/web/content/docs/dev/storage/custom-adapter.mdx @@ -25,7 +25,7 @@ export interface StorageApiPlugin { Return an object of that shape from a factory, set it as `storage.adapter` in your API config, and VitNode stores files through it. The -[working skeleton](#write-one) below is about 60 lines. +[working skeleton](#write-one) below is short enough to read in one go. ## The three methods @@ -247,12 +247,12 @@ starting template: - [`@vitnode/s3`](https://github.com/aXenDeveloper/vitnode/tree/canary/packages/s3) - a lazily created SDK client, a URL built from three rules - [`@vitnode/supabase-storage`](https://github.com/aXenDeveloper/vitnode/tree/canary/packages/supabase-storage) - - the shortest possible adapter, at under 60 lines + the shortest real adapter Keep `@vitnode/core` a dev dependency (you only import types from it) and ship your provider's SDK as a real dependency, the way both of those do. -## Next +## Related <Cards> <Card diff --git a/apps/web/content/docs/dev/storage/index.mdx b/apps/web/content/docs/dev/storage/index.mdx index 0fca1a9831..110639c0d0 100644 --- a/apps/web/content/docs/dev/storage/index.mdx +++ b/apps/web/content/docs/dev/storage/index.mdx @@ -1,160 +1,292 @@ --- title: Storage -description: Upload, serve, and delete files in VitNode with pluggable storage adapters - local disk, AWS S3, Cloudflare R2, or Supabase Storage. +description: Upload images in a VitNode plugin route with c.get("storage"). Validate the file, read its public URL and dimensions, and delete it again, on local disk, S3, R2 or Supabase. icon: HardDrive --- -import { Tab, Tabs } from "fumadocs-ui/components/tabs" +`c.get("storage")` stores uploaded files through the adapter you configure, records each one in the `core_files` table and gives you back its public URL. In this guide the `site-notes` plugin gets an admin endpoint that uploads an image for a note, and another that deletes it. -VitNode provides an integrated storage layer accessible via `c.get("storage")`. It handles file validation, automatic WebP image optimization, database indexing in `core_files`, and persistent storage across multiple backends. +## Before you begin -## Quick start +- **A storage adapter.** Set `storage.adapter` in your `vitnode.api.config.ts`: [Local disk](/docs/dev/storage/local) for development, or [S3 / R2](/docs/dev/storage/s3-r2) or [Supabase](/docs/dev/storage/supabase) in production. Without one, uploads fail with `500`. +- The `site-notes` plugin with the **Create notes** permission, from the beginner path up to [Permissions](/docs/dev/working-with-users/staff-permissions). Any plugin with an admin route works the same way. -### 1. Register a Storage Adapter +<Steps> -In `apps/api/src/vitnode.api.config.ts`, configure the local disk adapter: +<Step> -```ts title="apps/api/src/vitnode.api.config.ts" -import { LocalStorageAdapter } from "@vitnode/core/api/adapters/storage/local" -import { buildApiConfig } from "@vitnode/core/vitnode.config" +### Create the upload route -export const vitNodeApiConfig = buildApiConfig({ - storage: { - adapter: LocalStorageAdapter(), // [!code ++] - }, -}) -``` - -### 2. Upload Files in an API Route +Create `src/api/modules/admin/notes/upload-image.route.ts`: -Handle uploads in a Hono route using `c.get("storage").upload()`: +```ts title="plugins/site-notes/src/api/modules/admin/notes/upload-image.route.ts" +import { z } from "@hono/zod-openapi"; -```ts title="plugins/blog/src/api/modules/posts/routes/upload-cover.route.ts" -import { z } from "@hono/zod-openapi" +import { buildRoute } from "@/api/builders"; -import { buildRoute } from "@/api/builders" - -export const uploadCoverRoute = buildRoute({ +export const uploadNoteImageRoute = buildRoute({ + adminStaffPermission: { module: "notes", permission: "can_create" }, route: { method: "post", - path: "/cover", + path: "/images", request: { body: { + required: true, content: { "multipart/form-data": { schema: z.object({ - file: z.instanceof(File), + file: z.instanceof(File).openapi({ type: "string", format: "binary" }), + }), + }, + }, + }, + }, + responses: { + 201: { + content: { + "application/json": { + schema: z.object({ + id: z.number(), + url: z.string(), + width: z.number().nullable(), + height: z.number().nullable(), }), }, }, + description: "The stored image.", }, }, }, - handler: async (c) => { - const { file } = await c.req.parseBody() - - // [!code ++:7] - const uploaded = await c.get("storage").upload({ - file: file as File, - folder: "covers", - maxBytes: 5 * 1024 * 1024, // 5 MB + handler: async c => { + const { file } = c.req.valid("form"); + const image = await c.get("storage").upload({ + file, + folder: "site-notes", + maxBytes: 2 * 1024 * 1024, allowedMimeTypes: ["image/jpeg", "image/png", "image/webp"], - }) - - return c.json(uploaded) + }); + + return c.json( + { + id: image.id, + url: image.url, + width: image.dimensions?.width ?? null, + height: image.dimensions?.height ?? null, + }, + 201, + ); }, -}) +}); ``` -`upload()` saves the file, creates a record in `core_files`, and returns `{ id, url, width, height, size }`. +- **`adminStaffPermission`** keeps uploads to administrators with **Create notes**. An upload route without a guard lets any visitor fill your bucket. +- **`c.req.valid("form")`** reads the file the route's schema validated. A request without a file never reaches the handler. +- **`maxBytes` and `allowedMimeTypes`** refuse a file that is too large or of another type with `400`. VitNode also reads the first bytes of every image, so an HTML page renamed `cat.png` is refused too. +- **`folder`** groups the plugin's uploads in the bucket. See [Storage keys](#storage-keys). ---- +</Step> -## Supported Storage Adapters +<Step> -<Cards> - <Card - title="Local Disk" - description="Stores files in public/uploads for local development" - href="/docs/dev/storage/local" - /> - <Card - title="AWS S3 / Cloudflare R2" - description="Scalable object storage via @vitnode/s3" - href="/docs/dev/storage/s3-r2" - /> - <Card - title="Supabase Storage" - description="Native Supabase bucket storage" - href="/docs/dev/storage/supabase" - /> - <Card - title="Custom Storage Adapter" - description="Implement your own storage backend" - href="/docs/dev/storage/custom-adapter" - /> -</Cards> +### Create the delete route ---- +Create `src/api/modules/admin/notes/delete-image.route.ts`. It deletes by the file's **id**, the number `upload()` returned: -## Image Optimization +```ts title="plugins/site-notes/src/api/modules/admin/notes/delete-image.route.ts" +import { z } from "@hono/zod-openapi"; -Turn on `storage.image` and VitNode re-encodes JPEG, PNG, AVIF, TIFF and WebP uploads with [sharp](https://sharp.pixelplumbing.com/), converts them to WebP, and records their pixel dimensions: +import { buildRoute } from "@/api/builders"; -```ts title="apps/api/src/vitnode.api.config.ts" -export const vitNodeApiConfig = buildApiConfig({ - storage: { - adapter: LocalStorageAdapter(), - // [!code ++:5] - image: { - quality: 85, // 1-100, defaults to 85 - webp: true, // set to false to keep the original format - maxPixels: 40_000_000, // width x height, defaults to 40 million +export const deleteNoteImageRoute = buildRoute({ + adminStaffPermission: { module: "notes", permission: "can_create" }, + route: { + method: "delete", + path: "/images/{id}", + request: { + params: z.object({ id: z.coerce.number().int().positive() }), + }, + responses: { + 204: { description: "The image and its file record are gone." }, + 404: { description: "No file has this id." }, + 409: { description: "Content still uses the file." }, }, }, -}) + handler: async c => { + const { id } = c.req.valid("param"); + await c.get("storage").deleteFile(id); + + return c.body(null, 204); + }, +}); ``` -`maxPixels` is your guard against image bombs - a tiny PNG that claims to be 16383x16383 pixels and unpacks into gigabytes of memory. Anything over the limit is refused with a `400` before a single pixel is decoded. The default fits an 8K photo with room to spare, so most installs never need to touch it. +Add both routes to the `routes` of `adminNotesModule` in `src/api/modules/admin/notes/notes.module.ts`. + +</Step> + +</Steps> + +## Check the result + +Add a temporary component that uploads a picked image with `fetcher`, shows it, and deletes it again. Create `src/pages/check-note-image.tsx`: + +```tsx title="plugins/site-notes/src/pages/check-note-image.tsx" +import { Button } from "@vitnode/core/components/ui/button"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { useState } from "react"; + +import { manifest } from "@/manifest.gen"; + +export const CheckNoteImage = () => { + const [image, setImage] = useState<{ id: number; url: string }>(); + const [status, setStatus] = useState<number>(); + const [isPending, setIsPending] = useState(false); + + const upload = async (file: File) => { + const formData = new FormData(); + formData.append("file", file); + + setIsPending(true); + try { + const response = await fetcher({ + plugin: manifest.id, + method: "post", + module: "admin/notes", + path: "/images", + formData, + }); + setStatus(response.status); + if (response.status === 201) setImage(await response.json()); + } finally { + setIsPending(false); + } + }; + + const remove = async (id: number) => { + setIsPending(true); + try { + const response = await fetcher({ + plugin: manifest.id, + method: "delete", + module: "admin/notes", + path: "/images/{id}", + args: { params: { id } }, + }); + setStatus(response.status); + } finally { + setIsPending(false); + } + }; + + return ( + <div className="flex flex-col gap-3"> + <input + accept="image/*" + aria-label="Image to upload" + disabled={isPending} + onChange={event => { + const file = event.target.files?.[0]; + if (file) void upload(file); + }} + type="file" + /> + {status ? <output>{status}</output> : null} + {image ? ( + <> + <img alt="Uploaded test" className="max-w-xs rounded-md" src={image.url} /> + <Button isLoading={isPending} onClick={() => remove(image.id)} variant="destructive"> + Delete it + </Button> + </> + ) : null} + </div> + ); +}; +``` -### What gets checked on every upload +`formData` replaces `args` for a multipart route. `fetcher` sends it as the body and lets the browser set the boundary. -Whether or not `storage.image` is set, an upload declared as JPEG, PNG, WebP, GIF, AVIF or TIFF must actually _be_ that format. The type a client sends is just a claim (a browser guesses it from the file name), so VitNode reads the file's first bytes and refuses a mismatch - say, an HTML page named `cat.gif` - with a `400`. SVG and non-image files have no fixed signature and are not affected; limit them with `allowedMimeTypes`. +Render `<CheckNoteImage />` in `src/pages/notes-page.tsx`, sign in to the AdminCP in the same browser and open `/site-notes/notes`: ---- +1. Pick a PNG. The status reads `201` and the image appears, served from a URL such as `http://localhost:3000/api/uploads/2026/10/site-notes/cf8e….webp`. +2. Press **Delete it**. The status reads `204`, and reloading the image URL now answers `404`. +3. Sign out of the AdminCP and pick the image again. The status reads `403`. A PDF answers `400`. + +The upload's `width` and `height` are only filled in when [image processing](#image-processing) is on; otherwise they are `null`. The `.webp` extension comes from the same setting. Remove `CheckNoteImage` when you are done. + +## What `upload()` returns + +| Field | What it is | +| --- | --- | +| `id` | The `core_files` row. Store this in your own tables, and pass it to `deleteFile()`. | +| `key` | Where the adapter stored the bytes, such as `2026/10/site-notes/cf8e….webp`. | +| `url` | The public URL of those bytes, for `<img src>`. | +| `name` | The file name, changed to `.webp` when the image was converted. | +| `mimeType` | The stored type, after any conversion. | +| `size` | Bytes stored, after any processing. | +| `dimensions` | `{ width, height }`, or `null` when image processing did not read the file. | + +Save the `id`, not the URL. The adapter builds the URL from the key, so it changes if you move to another bucket or domain. + +## Deleting files + +| Call | What it removes | +| --- | --- | +| `deleteFile(id)` | The `core_files` row and the stored bytes. Use this for anything `upload()` created. | +| `delete(key)` | Only the bytes in the bucket. The row stays, pointing at nothing. Meant for adapter-level cleanup. | -## Deleting Files +`deleteFile()` protects files that are still in use: -Remove files and clean up storage using `delete()`: +- **Unused** files, such as the one above, are deleted. +- Files **referenced by content**, such as a Content Engine file field, are refused with `409` and `{ code: "FILE_IN_USE", content: true }`. Remove the file from that content first. +- Files **pinned only by old content revisions** are refused with `409`, `content: false` and the number of `revisions`. `deleteFile(id, { force: true })` releases those pins and deletes the file. +- A member's avatar or cover that uses the file is cleared. +- An id that does not exist returns `404`. Pass `ownerId` to delete only if that user uploaded the file. + +VitNode never deletes unused uploads by itself. When your plugin stops needing a file, for example because a note was deleted, call `deleteFile()`. + +## Storage keys + +Every upload is stored under a key built from the date, your `folder` and a random name: -```ts -await c.get("storage").delete({ fileId: 42 }) +``` +{year}/{month}/{folder}/{uuid}{extension} +2026/10/site-notes/cf8e90c3-49a4-4e21-abb5-27990e6459a3.webp ``` -This removes the file from the configured storage bucket and deletes its row from `core_files`. +- `folder` may be nested, such as `site-notes/covers`. Each segment starts with a letter or digit and holds only letters, digits, `-` and `_`. Anything else, including `..`, throws. +- The extension follows the stored type, not the uploaded name, so a converted image ends in `.webp`. +- The adapter turns the key into the public URL. With the local adapter that is `{baseUrl}/api/uploads/{key}`. ---- +## Image processing + +With `storage.image` set, VitNode re-encodes JPEG, PNG, AVIF, TIFF and WebP uploads with [sharp](https://sharp.pixelplumbing.com/), converts them to WebP and records their dimensions: + +```ts title="vitnode.api.config.ts" +storage: { + adapter: LocalStorageAdapter(), + // [!code ++:5] + image: { + quality: 85, // 1-100, defaults to 85 + webp: true, // false keeps the original format + maxPixels: 40_000_000, // width x height, defaults to 40 million + }, +}, +``` + +Without `image`, files are stored exactly as uploaded and `dimensions` is `null`. GIF and SVG are never converted, to keep animation and vectors, and an image wider or taller than 16,383 px keeps its format because WebP cannot hold it. -## Verifying in AdminCP +`maxPixels` guards against image bombs, tiny files that claim huge dimensions and would unpack into gigabytes of memory. VitNode refuses such a file with `400` before decoding it. The type check from the upload route runs whether or not `image` is set. -{/* Image prompt: VitNode AdminCP System -> Integrations screen at /admin/core/system/integrations. Storage integration card shows "Active" with a "Test file storage" button and modal demonstrating test file upload. Dark theme, 1440x900. */} +## Test your adapter -Test your storage adapter anytime in the AdminCP: -1. Navigate to **System → Integrations** (`/admin/core/system/integrations`). -2. On the **Storage** card, click **Test Storage** to verify bucket credentials and upload capabilities. -3. Inspect uploaded files anytime under **System → Files** (`/admin/core/system/files`). +In the AdminCP, open **System → Integrations** (`/admin/core/system/integrations`), choose **Test storage** on the **Storage** card and upload an image. It is stored under the `admin-storage-test` folder and shown back to you, which proves both the upload and the public URL work. Every uploaded file is listed under **System → Files** (`/admin/core/system/files`). -## Learn More +## Adapters <Cards> - <Card - title="Content Engine Fields" - description="Use field.file() in Content Engine models" - href="/docs/content-engine/fields" - /> - <Card - title="Self-Hosted Deployment" - description="Configure production storage mounts and S3 buckets" - href="/docs/dev/deployments/self-hosted" - /> + <Card title="Local disk" description="Files in public/uploads, for development and single servers" href="/docs/dev/storage/local" /> + <Card title="S3 and R2" description="AWS S3, Cloudflare R2 and other S3-compatible buckets" href="/docs/dev/storage/s3-r2" /> + <Card title="Supabase" description="Supabase Storage buckets" href="/docs/dev/storage/supabase" /> + <Card title="Custom adapter" description="Store files anywhere else" href="/docs/dev/storage/custom-adapter" /> </Cards> diff --git a/apps/web/content/docs/dev/storage/local.mdx b/apps/web/content/docs/dev/storage/local.mdx index 26d0d93072..5de237e774 100644 --- a/apps/web/content/docs/dev/storage/local.mdx +++ b/apps/web/content/docs/dev/storage/local.mdx @@ -1,5 +1,5 @@ --- -title: Local (disk) +title: Local disk description: The zero-config VitNode storage adapter - writes uploads to public/uploads on the API server and serves them back as static files. icon: FolderOpen --- @@ -268,7 +268,7 @@ outside the API's own base path strips nothing and every file answers `404`. volume, or move to a cloud adapter. </Callout> -## Next +## Related <Cards> <Card diff --git a/apps/web/content/docs/dev/storage/s3-r2.mdx b/apps/web/content/docs/dev/storage/s3-r2.mdx index f03fade557..4f48392954 100644 --- a/apps/web/content/docs/dev/storage/s3-r2.mdx +++ b/apps/web/content/docs/dev/storage/s3-r2.mdx @@ -1,5 +1,5 @@ --- -title: AWS S3 / Cloudflare R2 +title: S3 and R2 description: Store VitNode uploads in an S3-compatible bucket with @vitnode/s3 - one adapter for AWS S3, Cloudflare R2 and anything that speaks the S3 API. icon: Cloud --- @@ -273,7 +273,7 @@ hostname in `publicUrl`. rules are how old versions actually go away. </Callout> -## Next +## Related <Cards> <Card diff --git a/apps/web/content/docs/dev/storage/supabase.mdx b/apps/web/content/docs/dev/storage/supabase.mdx index 410931b955..42d3c94bae 100644 --- a/apps/web/content/docs/dev/storage/supabase.mdx +++ b/apps/web/content/docs/dev/storage/supabase.mdx @@ -1,5 +1,5 @@ --- -title: Supabase Storage +title: Supabase description: Store VitNode uploads in a Supabase Storage bucket with @vitnode/supabase-storage - a secret key, a bucket name and one adapter call. icon: CloudUpload --- @@ -226,7 +226,7 @@ public matters more here than it looks. risk - it is what makes a retried upload idempotent rather than a duplicate. </Callout> -## Next +## Related <Cards> <Card diff --git a/apps/web/content/docs/dev/swagger.mdx b/apps/web/content/docs/dev/swagger.mdx index 327205aded..c6b3974a41 100644 --- a/apps/web/content/docs/dev/swagger.mdx +++ b/apps/web/content/docs/dev/swagger.mdx @@ -9,6 +9,9 @@ so the Zod schemas a route declares are its documentation. Nothing is written twice and nothing can drift: if the schema changes, the spec changes, and the request that no longer matches it is rejected. +Swagger is on in development and **off in production** unless you turn it on +(see [Swagger in production](#swagger-in-production)). + ## Quick start Start the dev server and open Swagger UI in a browser: @@ -24,124 +27,109 @@ same Hono app. The raw document is one path deeper, at `/api/swagger/doc` - OpenAPI 3.0.0, titled `VitNode API`, versioned with the `@vitnode/core` release you have installed. Point any OpenAPI tool at that URL. -{/* Image prompt: A screenshot of Swagger UI at http://localhost:3000/api/swagger for the VitNode API - the "VitNode API" title bar at the top, and below it collapsed tag groups reading "(Core) - Users", "(Core) - Admin / Users", "(Core) - Admin / Debug" and "(Example) - Content / Articles", with the first group expanded to show a GET and a POST operation. Light theme, 1440x900. */} +{/* Image prompt: A screenshot of Swagger UI at http://localhost:3000/api/swagger for the VitNode API - the "VitNode API" title bar at the top, and below it collapsed tag groups reading "(Core) - Users", "(Core) - Admin / Users", "(Core) - Admin / Debug" and "(Newsroom) - Content / Stories", with the first group expanded to show a GET and a POST operation. Light theme, 1440x900. */} Every path reads `/api/{pluginId}/{module}/{route}`, which is why core's session endpoint is `/api/@vitnode/core/users/session`. That is not a Swagger convention - it is how the app is mounted, and [Architecture](/docs/dev/architecture) walks the whole request path. -## Where the spec comes from +## Put a plugin route in the spec -You never register anything with Swagger. Four steps in the API's own build -produce the document as a side effect: +There is no extra work. The route, module and plugin files that make a route +reachable also make it documented. What you control is how good the +documentation is. The steps below improve the `GET /api/site-notes/notes/{id}` +route of the `site-notes` plugin. -| Step | What it contributes | -| ---------------- | ---------------------------------------------------------------------------------- | -| `buildRoute` | The operation: method, path, `request` and `responses` schemas, `description`. | -| `buildModule` | Registers it on the module's Hono app, and names the group it lands in. | -| `buildApiPlugin` | Mounts each module under its name and collects the group list for the document. | -| `VitNodeAPI` | Mounts each plugin under its `pluginId` and serves `/swagger` plus `/swagger/doc`. | - -## Put a plugin route in the spec +### Before you begin -There is no extra work - the same three files that make a route reachable make -it documented. What you control is how good the documentation is. +- The `site-notes` plugin with its `notes` module, from [API modules](/docs/dev/plugins/api/modules) and [Database](/docs/dev/database). <Steps> <Step> -### Describe the route as you build it +### Describe the route -`description` becomes the operation's summary line, and every schema field can -carry an `example`. This is the whole difference between a spec people use and a -spec people ignore: +In `src/api/modules/notes/show.route.ts`, add a `description` and an `example` +for the parameter. `description` becomes the operation's summary line, and every +schema field can carry an `example`. This is the whole difference between a +spec people use and a spec people ignore: -```ts title="src/api/modules/orders/routes/show.route.ts" -import { z } from '@hono/zod-openapi' - -import { buildRoute } from '@/api/builders' - -export const showOrderRoute = buildRoute({ +```ts title="plugins/site-notes/src/api/modules/notes/show.route.ts" +export const showNoteRoute = buildRoute({ route: { method: 'get', path: '/{id}', - description: 'Get one order by id', // [!code ++] + description: 'Get one note by id', // [!code ++] request: { params: z.object({ - id: z.string().openapi({ example: '1' }), // [!code ++] + id: z.coerce.number().int().positive().openapi({ example: 1 }), // [!code ++] }), }, - responses: { - 200: { - content: { - 'application/json': { - schema: z.object({ id: z.string(), total: z.number() }), - }, - }, - description: 'The order', - }, - }, - }, - handler: async (c) => c.json({ id: '1', total: 42 }), -}) + // ...responses and handler stay as they are ``` +`.openapi()` comes from the `z` that `@hono/zod-openapi` exports, which the +route file already imports. + </Step> <Step> -### Register it in a module - -```ts title="src/api/modules/orders/orders.module.ts" -import { buildModule } from '@/api/builders' +### Check the module and the plugin -import { showOrderRoute } from './routes/show.route' +Nothing to add here, but this is where the group in Swagger UI gets its name. +The route sits in the `notes` module, and the module sits in the plugin: -export const ordersModule = buildModule({ - name: 'orders', // [!code ++] - routes: [showOrderRoute], // [!code ++] +```ts title="plugins/site-notes/src/api/modules/notes/notes.module.ts" +export const notesModule = buildModule({ + name: 'notes', + routes: [listNotesRoute, showNoteRoute], + // ... }) ``` -The `name` is the second half of the group heading, so pick the word you want to -read in the sidebar. - -</Step> -<Step> - -### Mount the module in the plugin - -```ts title="src/config.api.ts" -import { buildApiPlugin } from '@vitnode/core/api/lib/plugin' - -import { ordersModule } from '@/api/modules/orders/orders.module' -import { manifest } from '@/manifest.gen' - -export const shopApiPlugin = () => +```ts title="plugins/site-notes/src/config.api.ts" +export const siteNotesApiPlugin = () => buildApiPlugin({ manifest, - modules: [ordersModule], // [!code ++] + modules: [helloModule, notesModule], + // ... }) ``` +The module `name` is the second half of the group heading, so pick the word you +want to read in the sidebar. + </Step> -<Step> +</Steps> -### Reload the UI +### Check the result -Restart the dev server and refresh `/api/swagger`. A new group is at the bottom -of the list - **(Shop) - Orders** - with `GET /api/@acme/shop/orders/{id}` in -it, and "Try it out" sends a real request with your cookies attached. +Let the plugin rebuild, restart the dev server and refresh `/api/swagger`. The +restart matters, because the API builds the document on its first request and +serves that copy from then on. The **(Site Notes) - Notes** group lists +`GET /api/site-notes/notes/{id}` with the summary "Get one note by id" and `1` +filled in as the example id. "Try it out" sends a real request with your cookies +attached. -</Step> -</Steps> +## Where the spec comes from + +You never register anything with Swagger. Four steps in the API's own build +produce the document as a side effect: + +| Step | What it contributes | +| ---------------- | ---------------------------------------------------------------------------------- | +| `buildRoute` | The operation: method, path, `request` and `responses` schemas, `description`. | +| `buildModule` | Registers it on the module's Hono app, and names the group it lands in. | +| `buildApiPlugin` | Mounts each module under its name and collects the group list for the document. | +| `VitNodeAPI` | Mounts each plugin under its `pluginId` and serves `/swagger` plus `/swagger/doc`. | ## Grouping Swagger has exactly one grouping mechanism - the tag - so the tag carries both halves of "where does this endpoint live". The plugin comes from `pluginId` with -its scope dropped and title-cased, the module from the `name` you gave -`buildModule`: +its scope dropped and title-cased (`@vitnode/core` reads `Core`, `site-notes` +reads `Site Notes`), the module from the `name` you gave `buildModule`: ```ts buildModule({ @@ -175,18 +163,26 @@ Groups appear in the order the plugins declared their modules, with core first. the same operation can also show up under a tag you name yourself. </Callout> -## Gotchas +## Swagger in production -<Callout - type="warn" - title="Swagger has no login, and it is mounted in production" -> - `/api/swagger` and `/api/swagger/doc` are registered unconditionally, before - the session middleware, and neither checks anything. Anyone who can reach your - API can read every route it serves, including the admin ones. Deny both paths - at your reverse proxy if that is not what you want - see - [Self-hosted](/docs/dev/deployments/self-hosted). -</Callout> +VitNode serves `/api/swagger` and `/api/swagger/doc` when `NODE_ENV` is +`development` and switches them off otherwise. The document names every route, +parameter and response shape of the install, the admin tree included, and +neither path checks a session. To publish it in production anyway, turn it on +in the API config: + +```ts title="src/vitnode.api.config.ts" +export const vitNodeApiConfig = buildApiConfig({ + // ... + docs: { enabled: true }, // [!code ++] +}) +``` + +`docs: { enabled: false }` turns it off in development too. If you enable it on +a public install, put something in front of both paths, such as an allowlist at +your reverse proxy. See [Self-hosted](/docs/dev/deployments/self-hosted). + +## Gotchas <Callout type="warn" title="A response with no content widens res.json() to unknown"> The [fetcher](/docs/dev/fetcher) infers its return type from the same @@ -204,7 +200,7 @@ Groups appear in the order the plugins declared their modules, with core first. rather than a catalogue of what VitNode can do. </Callout> -## Next +## Related <Cards> <Card diff --git a/apps/web/content/docs/dev/updates/admin.mdx b/apps/web/content/docs/dev/updates/admin.mdx index a5bc3095b1..b295787455 100644 --- a/apps/web/content/docs/dev/updates/admin.mdx +++ b/apps/web/content/docs/dev/updates/admin.mdx @@ -1,5 +1,5 @@ --- -title: Check for updates in the AdminCP +title: AdminCP checks description: Where VitNode shows available updates and security updates, how the daily check and the Check for updates button work, and what each status means. icon: ShieldCheck --- @@ -36,7 +36,7 @@ Staff with **Plugins → Check for plugin and core updates now** (`plugins.can_c - A long check keeps its lease by renewing it every minute. If an API instance crashes mid-check, its lease runs out within five minutes and the next check takes over. - If the server running a check can no longer confirm it holds the lease, the check stops and says _The check stopped before it finished_. Results stored before that are kept; press the button again a moment later. - A manual check can run once every two minutes. A click inside that window says how many seconds to wait. -- The endpoint is `POST /api/@vitnode/core/admin/plugins/updates/check`. It answers `409` while a check runs (`"status": "running"`) or when the check was interrupted (`"status": "interrupted"`), and `429` during the cooldown. +- The endpoint is `POST /api/@vitnode/core/admin/plugins/updates/check`. It answers `409` while a check runs (`"status": "running"`), when the check was interrupted (`"status": "interrupted"`) or when update checks are turned off (`"status": "disabled"`), and `429` during the cooldown. Viewing the results only needs **Plugins → View installed plugins and their versions** (`plugins.can_view`). The same permission shows the [update count, security alert and System updates widget](/docs/dev/updates/alerts) everywhere else in the AdminCP. How the lease keeps checks exclusive is explained in [How update checks share one lease](/docs/dev/updates/lease). diff --git a/apps/web/content/docs/dev/updates/alerts.mdx b/apps/web/content/docs/dev/updates/alerts.mdx index e5f9a18af0..2c2965659c 100644 --- a/apps/web/content/docs/dev/updates/alerts.mdx +++ b/apps/web/content/docs/dev/updates/alerts.mdx @@ -1,5 +1,5 @@ --- -title: Update alerts in the AdminCP +title: Update alerts description: The update count next to System → Plugins, the security alert in the AdminCP header and the System updates dashboard widget - what each number means, how fresh it is and who sees it. icon: BellRing --- @@ -49,41 +49,43 @@ A publisher that cannot be reached never clears a warning. VitNode keeps the las ## The System updates widget -The **System updates** widget is on the dashboard by default for staff who can view plugins. You can remove it or add it back from **Edit layout**, like any other widget. It reads like a small ledger, one row per fact: +The **System updates** widget is on the dashboard by default for staff who can view plugins. You can remove it or add it back from **Edit layout**, like any other widget. It opens with a one-line status and a short explanation, then lists one row per fact, and ends with a **View plugins** link and the time of the last check. | Row | Meaning | | -------------- | --------------------------------------------------------------------------------------------------------- | -| Status | The one-line verdict - see below. | | VitNode | The core version you run and, after the arrow, the newer core release on your channel when one is known. | -| Plugin updates | Plugins with a newer release on their channel. Core is not included here. | -| Security | How many packages, core included, a security update affects - or _None_. | -| Last checked | How fresh the numbers are. | +| Plugin updates | Plugins with a newer release on their channel, as _N available_ or _None_. Core is not included here. | +| Security fixes | How many packages, core included, a security update affects (_Needed for N packages_), or _None found_. | +| No update info | How many packages, out of all, publish no update info. The row appears only when some do. | -Before anything was checked, the numbers show a dash and _Unknown_ instead of `0`. +Before anything was checked, the rows show _Unknown_ instead of a number. ### Status -| Status | What it means | -| ------------------------ | ------------------------------------------------------------------------------------------------- | -| Security fix needed | At least one package you run is affected by a security update. | -| Updates available | A newer release exists for core or a plugin, and nothing is affected by a security update. | -| Up to date | Every installed package was checked and none has an update or a security warning. | -| 2 packages not confirmed | Nothing is outdated, but some packages could not be confirmed, for example they declare no update source. The Plugins page says why. | -| Checking... | A check is running. The widget, the count and the pill refresh every 15 seconds until it finishes. | -| Not checked yet | No check has run. The daily check runs overnight, or press **Check for updates** on the Plugins page. | -| No update sources | No installed package declares where its updates are published. | -| Checks turned off | The API config sets `updates.enabled` to `false`. | - -### Last checked - -| Value | What it means | -| -------------- | ----------------------------------------------------------------------------------------------------------------------- | -| 3 hours ago | The oldest stored result is that recent, so every package was checked at least that recently. | -| Failed 5 minutes ago | The latest check could not read a source. The numbers include the last known results for it. | -| Out of date | You redeployed, upgraded core or changed channel. Results are recomputed from the stored manifests until the next check. | -| Never | Nothing has been checked yet. | - -The time is the **oldest** successful result, not the newest. One package checked a minute ago does not prove the others were. +| Status | What it means | +| ----------------------- | ----------------------------------------------------------------------------------------------------- | +| Security fix needed | At least one package you run is affected by a security update. | +| Updates available | A newer release exists for core or a plugin, and nothing is affected by a security update. | +| Everything is up to date | Every installed package was checked and none has an update or a security warning. | +| No updates found | Nothing is outdated, but some packages publish no update info, so VitNode cannot check them. The explanation says how many were confirmed. | +| Checking for updates... | A check is running. The widget, the count and the pill refresh every 15 seconds until it finishes. | +| Not checked yet | No check has run. The daily check runs overnight, or press **Check for updates** on the Plugins page. | +| Can't check for updates | No installed package publishes update info. | +| Update checks are off | The API config sets `updates.enabled` to `false`. | + +### Last check + +The line at the bottom right says how fresh the numbers are: + +| Text | What it means | +| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | +| Checked _date_ | The oldest stored result is from that date, so every package was checked at least that recently. | +| Last check failed _date_ | The latest check could not read a source. The numbers include the last known results for it. | +| Checked _date_, needs a recheck | You redeployed, upgraded core or changed channel. Results are recomputed from the stored manifests until the next check. | +| Checking now... | A check is running. | +| Never checked | Nothing has been checked yet. | + +The date is the **oldest** successful result, not the newest. One package checked a minute ago does not prove the others were. ## When update checks are turned off diff --git a/apps/web/content/docs/dev/updates/lease.mdx b/apps/web/content/docs/dev/updates/lease.mdx index 13a41e7ac0..8e92997e99 100644 --- a/apps/web/content/docs/dev/updates/lease.mdx +++ b/apps/web/content/docs/dev/updates/lease.mdx @@ -1,5 +1,5 @@ --- -title: How update checks share one lease +title: Check lease description: How VitNode keeps the daily and manual update checks exclusive across API instances with a renewable database lease, cancels a check that loses it, and fences every write so a stale owner cannot overwrite newer results. icon: Lock --- diff --git a/apps/web/content/docs/dev/updates/manifest.mdx b/apps/web/content/docs/dev/updates/manifest.mdx index 23e0d9b7ef..c63538ba21 100644 --- a/apps/web/content/docs/dev/updates/manifest.mdx +++ b/apps/web/content/docs/dev/updates/manifest.mdx @@ -1,5 +1,5 @@ --- -title: Update manifest reference +title: Manifest reference description: Every field of the VitNode update manifest JSON - packages, channels, releases and security updates - with validation rules and how versions are compared. icon: FileCode --- diff --git a/apps/web/content/docs/dev/updates/meta.json b/apps/web/content/docs/dev/updates/meta.json index 7273704c96..6b08e2cc83 100644 --- a/apps/web/content/docs/dev/updates/meta.json +++ b/apps/web/content/docs/dev/updates/meta.json @@ -1,5 +1,5 @@ { - "title": "Updates & Security", + "title": "Updates", "description": "Daily update checks and security updates for VitNode core and plugins, read from public JSON manifests", "icon": "RefreshCw", "pages": [ diff --git a/apps/web/content/docs/dev/updates/official-releases.mdx b/apps/web/content/docs/dev/updates/official-releases.mdx index 8563f07e78..cc6ff48c6d 100644 --- a/apps/web/content/docs/dev/updates/official-releases.mdx +++ b/apps/web/content/docs/dev/updates/official-releases.mdx @@ -1,6 +1,6 @@ --- -title: Official release feed -description: How VitNode's release workflow publishes the official update manifest after npm publication, where publishedAt comes from, and how reruns and security updates are handled. +title: Official releases +description: A guide for VitNode maintainers on how the release workflow publishes the official update manifest after npm publication, where publishedAt comes from, and how it handles reruns and security updates. icon: Workflow --- diff --git a/apps/web/content/docs/dev/updates/plugin-authors.mdx b/apps/web/content/docs/dev/updates/plugin-authors.mdx index 08cf4ccde0..fe534b2b84 100644 --- a/apps/web/content/docs/dev/updates/plugin-authors.mdx +++ b/apps/web/content/docs/dev/updates/plugin-authors.mdx @@ -1,5 +1,5 @@ --- -title: Publish updates for your plugin +title: Plugin updates description: Declare an update source in your plugin's src/plugin-info.ts and host a small JSON manifest so VitNode installations see your new releases and security updates. icon: Upload --- @@ -66,7 +66,7 @@ The package key must equal the `name` in `package.json`. `publishedAt`, `require ## Check the result -Install the plugin in an app, open **System → Plugins** and press **Check for updates**. With the plugin at `1.1.0` the row says _Update available: 1.2.0_; at `1.2.0` it says _Up to date_. +Install the plugin in an app, open **System → Plugins** and press **Check for updates**. With the plugin at `1.1.0` the row shows an **Update available** badge and _Update to 1.2.0_; at `1.2.0` it shows **Up to date** and _Newest release on the stable channel._ ## Several packages, one manifest diff --git a/apps/web/content/docs/dev/updates/security-updates.mdx b/apps/web/content/docs/dev/updates/security-updates.mdx index cd28e6a833..f966b021c1 100644 --- a/apps/web/content/docs/dev/updates/security-updates.mdx +++ b/apps/web/content/docs/dev/updates/security-updates.mdx @@ -1,5 +1,5 @@ --- -title: Publish a security update +title: Security updates description: Add a security update to an update manifest so VitNode installations running an affected version see a red warning in the AdminCP, with or without a fixed version. icon: ShieldAlert --- @@ -45,4 +45,4 @@ If the fix already landed in `2.1.3-canary.2`, say so in the range: `">=2.0.0 <2 A warning means the publisher listed that version. No warning is not proof that a version is secure, and VitNode does not scan your plugins' own dependencies. A patch release without a security update is not shown as a security release. -For VitNode's own packages, security updates are maintained in `security/security-updates.json` in the VitNode repository; see [Official release feed](/docs/dev/updates/official-releases#add-an-security update-to-the-official-feed). +VitNode keeps the security updates for its own packages in `security/security-updates.json` in the VitNode repository. See [Official release feed](/docs/dev/updates/official-releases#add-a-security-update-to-the-official-feed). diff --git a/apps/web/content/docs/dev/websocket/index.mdx b/apps/web/content/docs/dev/websocket/index.mdx index fe9ecb3bd2..7e445552f1 100644 --- a/apps/web/content/docs/dev/websocket/index.mdx +++ b/apps/web/content/docs/dev/websocket/index.mdx @@ -4,20 +4,20 @@ description: Push real-time updates and notifications from Hono routes to the br icon: Radio --- -import { Tab, Tabs } from "fumadocs-ui/components/tabs" +VitNode provides one shared WebSocket connection at `/api/ws`. Browsers share a single connection across tabs, authenticated by session cookies, and every feature multiplexes its messages over it. Use it to push live updates from Hono routes: a toast for one user, a counter for everyone, or a message for one [room](/docs/dev/websocket/rooms). -VitNode provides a unified, multiplexed WebSocket connection at `/api/ws`. Browsers share a single connection across tabs via a Web Lock leader election, authenticated by session cookies. A single app serves it from the same deployment as the site and the API, Vercel included - see [Set up the endpoint](/docs/dev/websocket/setup). +## Before you begin -## Quick start +- The `/api/ws` endpoint. A single app turns it on with `webSocket: true`, Vercel included; a standalone API mounts it next to its HTTP server. See [Set up the endpoint](/docs/dev/websocket/setup). +- `REDIS_URL`, only if you run more than one API instance. Without it, pushes reach clients connected to the same instance. -### 1. Send a Toast to a User +## Send a toast to a user Push a transient toast to any signed-in user from any Hono route or service: ```ts import { notificationsChannel } from "@vitnode/core/ws/notifications" -// [!code ++:6] c.get("realtime").sendToUser(userId, notificationsChannel, { title: "New Comment", description: "Alex commented on your post.", @@ -27,7 +27,7 @@ c.get("realtime").sendToUser(userId, notificationsChannel, { The user receives an immediate `sonner` toast in all open tabs across devices. -<Callout type="info" title="Need it to stick around? Use the Notifications Center"> +<Callout type="info" title="Need it to stick around? Use notifications"> `notificationsChannel` is for transient toasts: they reach open tabs only and are gone on reload. For anything users should find later - with an inbox, unread count, email and preferences - publish a persistent notification with @@ -36,25 +36,11 @@ The user receives an immediate `sonner` toast in all open tabs across devices. this same connection on `notificationsStateChannel`. </Callout> ---- - -### 2. Broadcast to Everyone - -Broadcast live updates to all connected visitors: - -```ts -c.get("realtime").broadcast(myChannel, { - count: 142, -}) -``` +## Define a channel ---- +A channel is a typed id that the server and the browser both import. Create your plugin's channels in one file: -## Define a Custom Channel - -Create typed channels in your plugin: - -```ts title="plugins/chat/src/ws/chat.channel.ts" +```ts title="plugins/acme-chat/src/ws/chat.channel.ts" import { createWebSocketChannel } from "@vitnode/core/ws/types" export interface MessagePayload { @@ -63,162 +49,89 @@ export interface MessagePayload { senderId: number } -// [!code ++:5] export const chatChannel = createWebSocketChannel<never, MessagePayload>({ pluginId: "@acme/chat", module: "rooms", id: "messages", }) -``` - -The first type parameter is what the client sends, the second what it receives. -The channel id becomes `{pluginId}_{module}_{id}`. - ---- - -## Client-Side Consumption - -Listen for incoming channel messages with `useVitNodeWebSocket`: - -```tsx title="plugins/chat/src/views/chat-room.tsx" -import { useVitNodeWebSocket } from "@vitnode/core/ws/use-websocket" -import { chatChannel } from "../ws/chat.channel" - -export const ChatRoom = ({ roomId }: { roomId: string }) => { - const [messages, setMessages] = React.useState<string[]>([]) - - // [!code ++:7] - useVitNodeWebSocket(chatChannel, { - onMessage: (payload) => { - if (payload.roomId === roomId) { - setMessages((prev) => [...prev, payload.message]) - } - }, - }) - - return ( - <div> - {messages.map((msg, i) => ( - <p key={i}>{msg}</p> - ))} - </div> - ) -} -``` - ---- - -## Rooms - -A room is a named group of browser tabs, such as everyone looking at one chat thread or editing one record. Send a message to a room and only its members get it, on every API instance. A room is any string your feature picks, for example `chat:42`. -### Join and leave per tab - -All tabs of a browser share one socket, so a socket joins a room on behalf of a tab. Let each tab send its own random `clientId` with every message, and join or leave with it: - -```ts title="plugins/chat/src/api/modules/rooms/rooms.socket.ts" -import { buildWebSocket } from "@vitnode/core/api/lib/websocket" -import { wsRegistry } from "@vitnode/core/ws/registry" - -interface RoomMessage { - clientId: string - roomId: string - type: "join" | "leave" -} - -export const roomsSocket = buildWebSocket<RoomMessage>({ - id: "presence", - onMessage: ({ data, ws }) => { - const room = `chat:${data.roomId}` - - // [!code ++:5] - if (data.type === "join") { - wsRegistry.join(ws, room, data.clientId) - } else { - wsRegistry.leave(ws, room, data.clientId) - } - }, +export const visitorsChannel = createWebSocketChannel<never, { count: number }>({ + pluginId: "@acme/chat", + module: "rooms", + id: "visitors", }) ``` -Register the socket on its module with `webSockets: [roomsSocket]`. The socket stays in the room until its last tab leaves, so a closed tab never cuts off the others. Check who may join (the session on `c`, a permission) before calling `join`: a room is only as private as that check. +The first type parameter is what the browser sends, the second what it receives. `never` means the browser only listens. The channel id becomes `{pluginId}_{module}_{id}`. -`join` and `leave` return `true` when they changed something. `wsRegistry.membersOf(room)` lists the members on this instance and `wsRegistry.roomsOf(ws)` lists the rooms of one socket. +## Push to everyone -### Send to a room +Broadcast a live update to every connected visitor, signed in or not: ```ts -// [!code ++:4] -c.get("realtime").toRoom(`chat:${roomId}`, chatChannel, { - roomId, - message: "Hello!", - senderId: user.id, -}) -``` - -Each socket in the room receives the payload once, however many of its tabs joined. Put the room or record in the payload so every tab can ignore what is not its own. - -### Join again after a reconnect - -A new connection starts with no rooms on the server. `useVitNodeWebSocket` returns a `connectionId` that changes every time the shared connection opens, in every tab, so join from an effect that depends on it. `roomsChannel` is `createWebSocketChannel<RoomMessage>({ pluginId: "@acme/chat", module: "rooms", id: "presence" })`, the channel of `roomsSocket` above: - -```tsx title="plugins/chat/src/views/chat-room.tsx" -const [clientId] = React.useState(() => crypto.randomUUID()) -const { connectionId, send } = useVitNodeWebSocket(roomsChannel) +import { visitorsChannel } from "@/ws/chat.channel" -// [!code ++:4] -React.useEffect(() => { - if (!connectionId) return - send({ clientId, roomId, type: "join" }) -}, [clientId, connectionId, roomId, send]) +c.get("realtime").broadcast(visitorsChannel, { count: 142 }) ``` -[Reconnects and missed messages](/docs/dev/websocket/reconnects) covers reloading what the tab missed while it was away. +## Listen in the browser -### Clean up when a socket closes +Receive a channel's messages with `useVitNodeWebSocket`: -A socket that closes leaves all of its rooms. Use `onConnectionClose` to update your own state, such as an "online now" list: +```tsx title="plugins/acme-chat/src/views/visitors-badge.tsx" +import { useVitNodeWebSocket } from "@vitnode/core/ws/use-websocket" +import { useState } from "react" -```ts title="plugins/chat/src/api/modules/rooms/presence.ts" -import { wsRegistry } from "@vitnode/core/ws/registry" +import { visitorsChannel } from "../ws/chat.channel" -// [!code ++:5] -wsRegistry.onConnectionClose((ws, left) => { - for (const { memberId, room } of left) { - markOffline(room, memberId) - } -}) -``` +export const VisitorsBadge = () => { + const [count, setCount] = useState<number | null>(null) -`left` holds every `{ memberId, room }` the socket was in. Register the listener once, at module load. + useVitNodeWebSocket(visitorsChannel, { + onMessage: payload => { + setCount(payload.count) + }, + }) -### Rooms on several instances + if (count === null) return null -With `REDIS_URL` set, `toRoom` also publishes the message over Redis, and every other instance delivers it to its own members. Room membership itself stays local to each instance. + return <p>{count} people online</p> +} +``` -When an instance keeps per-room state in memory, it can follow the other instances: +The hook also returns `{ connectionId, readyState, send }`. `send` talks to a server socket built with `buildWebSocket`, and `connectionId` changes on every reconnect. [Rooms](/docs/dev/websocket/rooms) uses both. -- `onRemoteRoomMessage((room, id, data) => ...)` sees room messages from other instances before they reach local sockets. A collaborative document uses it to apply the same edit to its own copy. -- `publishToInstances(topic, data)` and `onInstanceMessage(({ topic, data, origin }) => ...)` exchange data between instances that never reaches a socket, such as each instance's list of members. Republish it periodically and let entries from a silent instance expire, so a crashed instance leaves no ghosts. +## `c.get("realtime")` methods -Without Redis, all of this works on a single instance with no extra setup: `toRoom` delivers locally and instance messages go nowhere. +| Method | Behavior | +| --- | --- | +| `sendToUser(userId, channel, data)` | Every open connection of one user, on all their devices | +| `sendToUsers(channel, messages)` | A different payload per user, from `{ userId, data }` items | +| `broadcast(channel, data)` | Every open connection, guests included | +| `toRoom(room, channel, data)` | The connections that joined `room`, see [Rooms](/docs/dev/websocket/rooms) | +| `closeUserConnections(userId, deviceId?)` | Closes a user's sockets, or only one device's | ---- +Every method returns nothing and does not wait. A client that is not connected misses the message. -## Architectural Highlights +## How the connection behaves -- **Single Connection**: Only one `/api/ws` socket is opened per client. All features share it via message multiplexing. -- **Tab Leader Election**: When a user opens multiple tabs, a Web Lock elects one leader tab to hold the socket, distributing messages across tabs via `BroadcastChannel`. -- **Automatic Reconnect**: A dropped connection retries after about a second, then backs off (with a little jitter) up to 30 seconds, so a restarted server is not stampeded by every open tab. +- **One connection**: Only one `/api/ws` socket is opened per client. All features share it via message multiplexing. +- **Tab leader election**: When a user opens multiple tabs, a Web Lock elects one leader tab to hold the socket, and it passes messages to the other tabs over `BroadcastChannel`. +- **Automatic reconnect**: A dropped connection retries after about a second, then backs off (with a little jitter) up to 30 seconds, so a restarted server is not stampeded by every open tab. - **Offline aware**: When the browser goes offline, the socket closes and stops retrying. It reconnects the moment the network comes back, or when a tab becomes visible again after sleep, without waiting for the backoff. - **Heartbeat, both ways**: The server pings every socket every 30 seconds and closes the ones that stopped answering, so vanished clients do not linger (the standalone API's `ws` server and Nitro's crossws both do). The browser sends its own ping every 25 seconds and reconnects when no reply arrives within 10 seconds, so a half-dead connection after a Wi-Fi drop never pretends to be online. - **No replay**: Messages sent while a socket is down are not queued. A feature that must not miss updates reloads its state when the socket opens again - see [Reconnects and missed messages](/docs/dev/websocket/reconnects). - **Closed on revoke**: A socket is tied to the session and device that opened it. Revoking sessions (signing out a device, changing or resetting a password, an admin revoke) closes those sockets on every instance through `closeUserConnections`, so a revoked device stops receiving the user's pushes. -- **Multiple Instances**: With `REDIS_URL` set, `sendToUser`, `broadcast` and `toRoom` are relayed to every API instance over Redis pub/sub. Without Redis they only reach clients connected to the same instance. +- **Multiple instances**: With `REDIS_URL` set, `sendToUser`, `broadcast` and `toRoom` are relayed to every API instance over Redis pub/sub. Without Redis they only reach clients connected to the same instance. -## Learn More +## Related <Cards> + <Card + title="Rooms" + description="Send messages only to the tabs that joined a room" + href="/docs/dev/websocket/rooms" + /> <Card title="Set up the endpoint" description="Serve /api/ws from a single app, Vercel included, or a standalone API" @@ -234,14 +147,4 @@ Without Redis, all of this works on a single instance with no extra setup: `toRo description="Persistent inbox, unread count, email and digests" href="/docs/dev/notifications" /> - <Card - title="Events" - description="In-process domain events across plugins" - href="/docs/dev/events" - /> - <Card - title="Queue Tasks" - description="Background jobs and asynchronous processing" - href="/docs/dev/advanced/queue" - /> </Cards> diff --git a/apps/web/content/docs/dev/websocket/meta.json b/apps/web/content/docs/dev/websocket/meta.json index e622357ace..dfa7122ace 100644 --- a/apps/web/content/docs/dev/websocket/meta.json +++ b/apps/web/content/docs/dev/websocket/meta.json @@ -2,5 +2,5 @@ "title": "WebSocket", "description": "Push realtime updates over one shared, cookie-authenticated connection", "icon": "Radio", - "pages": ["index", "setup", "reconnects"] + "pages": ["index", "setup", "rooms", "reconnects"] } diff --git a/apps/web/content/docs/dev/websocket/reconnects.mdx b/apps/web/content/docs/dev/websocket/reconnects.mdx index 9e76f352da..4b5fd1808a 100644 --- a/apps/web/content/docs/dev/websocket/reconnects.mdx +++ b/apps/web/content/docs/dev/websocket/reconnects.mdx @@ -1,5 +1,5 @@ --- -title: Reconnects and missed messages +title: Reconnects description: How VitNode's WebSocket reconnects, why realtime delivery is best effort with no replay, and how to restore rooms and reload state in every tab after a reconnect. icon: RefreshCw --- @@ -20,14 +20,15 @@ Treat every realtime message as a hint that something changed, and the database ## Restore state when the connection opens -`useVitNodeWebSocket` returns `connectionId`, which changes every time the shared connection opens and is `null` while it is down. All tabs share one socket, held by a leader tab, and every tab - leader or follower - gets the new `connectionId`. Depend on it to rejoin and reload: +`useVitNodeWebSocket` returns `connectionId`, which changes every time the shared connection opens and is `null` while it is down. All tabs share one socket, held by a leader tab, and every tab, leader or follower, gets the new `connectionId`. Depend on it to rejoin and reload. This extends the `ChatRoom` component from [Rooms](/docs/dev/websocket/rooms), and assumes the room's messages are loaded with TanStack Query under the key `["chat", roomId]`: -```tsx title="plugins/chat/src/views/chat-room.tsx" -const { connectionId, send } = useVitNodeWebSocket(roomsChannel, { - onMessage: (message) => appendMessage(message), -}) +```tsx title="plugins/acme-chat/src/views/chat-room.tsx (excerpt)" +import { useQueryClient } from "@tanstack/react-query" -React.useEffect(() => { +const queryClient = useQueryClient() +const { connectionId, send } = useVitNodeWebSocket(roomsChannel) + +useEffect(() => { if (!connectionId) return send({ clientId, roomId, type: "join" }) // the server forgot the room @@ -35,6 +36,8 @@ React.useEffect(() => { }, [clientId, connectionId, queryClient, roomId, send]) ``` +New messages keep arriving on `chatChannel` as before; this effect only rejoins and reloads. + Messages sent before the socket is open are queued and sent once it opens, so the join is never lost. Do not resend writes from that effect: a mutation that went over HTTP already happened, and sending it again would do it twice. VitNode's own features follow the same rule: diff --git a/apps/web/content/docs/dev/websocket/rooms.mdx b/apps/web/content/docs/dev/websocket/rooms.mdx new file mode 100644 index 0000000000..e562b18dbf --- /dev/null +++ b/apps/web/content/docs/dev/websocket/rooms.mdx @@ -0,0 +1,210 @@ +--- +title: Rooms +description: Send VitNode WebSocket messages only to the browser tabs that joined a room, such as one chat thread, with wsRegistry.join and c.get("realtime").toRoom(). +icon: Users +--- + +A room is a named group of browser tabs, such as everyone looking at one chat thread or editing one record. Send a message to a room and only its members get it, on every API instance. A room is any string your feature picks, for example `chat:42`. This guide adds rooms to the fictional `@acme/chat` plugin from [WebSocket](/docs/dev/websocket). + +## Before you begin + +- The `/api/ws` endpoint, from [Set up the endpoint](/docs/dev/websocket/setup). +- The `chatChannel` from [Define a channel](/docs/dev/websocket#define-a-channel), which carries the chat messages to the browser. +- A top-level API module for the server socket. Here it is `rooms`, built with `buildModule` from your plugin's `@/api/builders`. + +<Steps> +<Step> + +### Handle join and leave on the server + +All tabs of a browser share one socket, so a socket joins a room on behalf of a tab. Each tab sends its own random `clientId` with every message, and the server joins or leaves with it. Create a server socket with `buildWebSocket`: + +```ts title="plugins/acme-chat/src/api/modules/rooms/rooms.socket.ts" +import { buildWebSocket } from "@vitnode/core/api/lib/websocket" +import { wsRegistry } from "@vitnode/core/ws/registry" + +export interface RoomMessage { + clientId: string + roomId: string + type: "join" | "leave" +} + +export const roomsSocket = buildWebSocket<RoomMessage>({ + id: "presence", + onMessage: ({ data, ws }) => { + const room = `chat:${data.roomId}` + + if (data.type === "join") { + wsRegistry.join(ws, room, data.clientId) + } else { + wsRegistry.leave(ws, room, data.clientId) + } + }, +}) +``` + +Check who may join (the session on `c`, a permission) before calling `join`, because a room is only as private as that check. The socket stays in the room until its last tab leaves, so a closed tab never cuts off the others. + +</Step> +<Step> + +### Register the socket on its module + +```ts title="plugins/acme-chat/src/api/modules/rooms/rooms.module.ts" +import { buildModule } from "@/api/builders" + +import { roomsSocket } from "./rooms.socket" + +export const roomsModule = buildModule({ + name: "rooms", + webSockets: [roomsSocket], +}) +``` + +Pass `roomsModule` to `buildApiPlugin({ modules })`. Only top-level modules are read. The socket's public id is `{pluginId}_{module}_{id}`, here `@acme/chat_rooms_presence`. + +</Step> +<Step> + +### Share the channel with the browser + +Next to `chatChannel`, add a channel with the same plugin, module and id as the socket. Its first type parameter is what the browser sends: + +```ts title="plugins/acme-chat/src/ws/chat.channel.ts" +import { createWebSocketChannel } from "@vitnode/core/ws/types" + +import type { RoomMessage } from "../api/modules/rooms/rooms.socket" + +export const roomsChannel = createWebSocketChannel<RoomMessage>({ + pluginId: "@acme/chat", + module: "rooms", + id: "presence", +}) +``` + +A type-only import keeps the server file out of the browser bundle. + +</Step> +<Step> + +### Join from the tab, again after every reconnect + +A new connection starts with no rooms on the server. `useVitNodeWebSocket` returns a `connectionId` that changes every time the shared connection opens, in every tab, so join from an effect that depends on it: + +```tsx title="plugins/acme-chat/src/views/chat-room.tsx" +import { useVitNodeWebSocket } from "@vitnode/core/ws/use-websocket" +import { useEffect, useState } from "react" + +import { chatChannel, roomsChannel } from "../ws/chat.channel" + +export const ChatRoom = ({ roomId }: { roomId: string }) => { + const [clientId] = useState(() => crypto.randomUUID()) + const [messages, setMessages] = useState<string[]>([]) + const { connectionId, send } = useVitNodeWebSocket(roomsChannel) + + useVitNodeWebSocket(chatChannel, { + onMessage: payload => { + if (payload.roomId === roomId) { + setMessages(prev => [...prev, payload.message]) + } + }, + }) + + useEffect(() => { + if (!connectionId) return + send({ clientId, roomId, type: "join" }) + + return () => { + send({ clientId, roomId, type: "leave" }) + } + }, [clientId, connectionId, roomId, send]) + + return ( + <ul> + {messages.map((message, i) => ( + <li key={i}>{message}</li> + ))} + </ul> + ) +} +``` + +[Reconnects and missed messages](/docs/dev/websocket/reconnects) covers reloading what the tab missed while it was away. + +</Step> +<Step> + +### Send to the room + +From any API handler, for example the route that saves a chat message: + +```ts +c.get("realtime").toRoom(`chat:${roomId}`, chatChannel, { + roomId, + message: "Hello!", + senderId: user.id, +}) +``` + +Each socket in the room receives the payload once, however many of its tabs joined. Put the room or record in the payload so every tab can ignore what is not its own. + +</Step> +</Steps> + +## Check the result + +Open the chat room page for room `42` in two browsers, and room `7` in a third. Send a message to room `42`. The first two show it right away, and the third shows nothing. Close one tab of a browser that has two tabs on room `42`, send again, and its other tab still gets the message. + +## Clean up when a socket closes + +A socket that closes leaves all of its rooms. Use `wsRegistry.onConnectionClose` to update your own state, such as an "online now" list. Register the listener once, at module load: + +```ts title="plugins/acme-chat/src/api/modules/rooms/presence.ts" +import { wsRegistry } from "@vitnode/core/ws/registry" + +const online = new Map<string, Set<string>>() + +wsRegistry.onConnectionClose((ws, left) => { + for (const { memberId, room } of left) { + online.get(room)?.delete(memberId) + } +}) +``` + +`left` holds every `{ memberId, room }` the socket was in. + +## Inspect rooms + +| Method | Returns | Behavior | +| --- | --- | --- | +| `wsRegistry.join(ws, room, memberId)` | `boolean` | Adds the member on this socket; `true` when it was not there yet | +| `wsRegistry.leave(ws, room, memberId)` | `boolean` | Removes the member; `true` when it was there | +| `wsRegistry.membersOf(room)` | `{ memberId, ws }[]` | The room's members on this instance | +| `wsRegistry.roomsOf(ws)` | `string[]` | The rooms of one socket | +| `wsRegistry.onConnectionClose(listener)` | unsubscribe function | Calls `listener(ws, left)` when a socket closes | + +All `wsRegistry` methods act on the current instance only. + +## Rooms on several instances + +With `REDIS_URL` set, `toRoom` also publishes the message over Redis, and every other instance delivers it to its own members. Room membership itself stays local to each instance. + +When an instance keeps per-room state in memory, it can follow the other instances with helpers from `@vitnode/core/ws/registry`: + +```ts +import { + onInstanceMessage, + onRemoteRoomMessage, + publishToInstances, +} from "@vitnode/core/ws/registry" +``` + +- `onRemoteRoomMessage((room, id, data) => ...)` sees room messages from other instances before they reach local sockets. A collaborative document uses it to apply the same edit to its own copy. +- `publishToInstances(topic, data)` and `onInstanceMessage(({ topic, data, origin }) => ...)` exchange data between instances that never reaches a socket, such as each instance's list of members. Republish it periodically and let entries from a silent instance expire, so a crashed instance leaves no ghosts. + +Both listeners return a function that removes them. Without Redis, all of this works on a single instance with no extra setup. `toRoom` delivers locally, and instance messages go nowhere. + +## Related + +- [Reconnects and missed messages](/docs/dev/websocket/reconnects) +- [WebSocket](/docs/dev/websocket) diff --git a/apps/web/content/docs/dev/websocket/setup.mdx b/apps/web/content/docs/dev/websocket/setup.mdx index 161bbc6b15..f132bdf157 100644 --- a/apps/web/content/docs/dev/websocket/setup.mdx +++ b/apps/web/content/docs/dev/websocket/setup.mdx @@ -1,5 +1,5 @@ --- -title: Set up the WebSocket endpoint +title: Setup description: Serve VitNode's /api/ws WebSocket from a single TanStack Start app with Nitro, Vercel included, or from a standalone Node API server. icon: Plug --- @@ -74,11 +74,33 @@ const createVitNodeApi = () => { A separate API server runs on `@hono/node-server` and upgrades with its own helper and a `ws` server. Mount the route after `VitNodeAPI`, and pass the web app's origin when it is not `VITNODE_WEB_URL`: -```ts title="apps/api/src/index.ts" +```ts title="apps/api/src/index.ts (excerpt)" import { serve, upgradeWebSocket } from "@hono/node-server" import { websocketOriginMiddleware } from "@vitnode/core/api/middlewares/websocket-origin.middleware" import { handleVitNodeWebSocket } from "@vitnode/core/ws/handle" -import { WebSocketServer } from "ws" +import { type WebSocket, WebSocketServer } from "ws" + +// `app` is your OpenAPIHono app, already passed to VitNodeAPI({ app, ... }) +const webOrigin = process.env.VITNODE_WEB_URL ?? "http://localhost:3000" +const wss = new WebSocketServer({ noServer: true }) + +// Ping every 30 s and drop sockets that did not answer the previous ping. +const awaitingPong = new WeakSet<WebSocket>() +wss.on("connection", ws => { + ws.on("pong", () => awaitingPong.delete(ws)) +}) +const heartbeat = setInterval(() => { + for (const ws of wss.clients) { + if (awaitingPong.has(ws)) { + ws.terminate() + continue + } + awaitingPong.add(ws) + ws.ping() + } +}, 30_000) +heartbeat.unref() +wss.on("close", () => clearInterval(heartbeat)) app.get( "/ws", @@ -89,10 +111,12 @@ app.get( serve({ fetch: app.fetch, port: Number(process.env.PORT ?? 8000), - websocket: { server: new WebSocketServer({ noServer: true }) }, + websocket: { server: wss }, }) ``` +The `ws` server does not ping on its own. Without the heartbeat, a client that vanished without a close frame (a sleeping laptop, dropped Wi-Fi) stays in the registry forever. The full file is `apps/api/src/index.ts` in the VitNode repository. + A web app pointed at that API with `VITNODE_API_URL` connects to it on its own; it needs no `webSocket` option and no Nitro route. ## Who may connect @@ -103,7 +127,7 @@ Both setups apply the same rules before a socket opens: - **Session**: the session cookie decides the user. Guests connect too, as `null`; a handler that needs a user checks `c.get("user")` itself, and live editing checks the AdminCP session on every message. - **Redis**: with `REDIS_URL` set, the instance answers `503` until it is subscribed to the realtime channel, so it never accepts a socket that other instances cannot reach. The client retries. -A rejected handshake registers nothing. Identity is fixed for the life of a socket: after sign-in or sign-out the client reconnects on its own, but a session revoked from another device keeps its open socket until that socket closes. +A rejected handshake registers nothing. Identity is fixed for the life of a socket. After sign-in or sign-out the client reconnects on its own. Revoking a session (signing out a device, changing a password, an admin revoke) closes that device's sockets on every instance. ## Check the result diff --git a/apps/web/content/docs/dev/widgets/block-variants.mdx b/apps/web/content/docs/dev/widgets/block-variants.mdx index 7a1e0580e9..78b87625fb 100644 --- a/apps/web/content/docs/dev/widgets/block-variants.mdx +++ b/apps/web/content/docs/dev/widgets/block-variants.mdx @@ -1,5 +1,5 @@ --- -title: Widget Variants +title: Variants description: A variant is how one widget instance looks, stored beside its data instead of inside it - declare a few with defineWidget and the editor grows a picker for free. icon: Shapes --- @@ -22,17 +22,24 @@ Keep those three apart and every screen that touches a widget stays honest. Mix Two optional keys on `defineWidget`: -```tsx title="plugins/example/src/widgets/features.tsx" +```tsx title="plugins/newsroom/src/widgets/features.tsx (excerpt)" export const featuresWidget = defineWidget({ component: Features, defaultVariant: 'grid', + description: + 'Up to three features, told the same way in three different shapes.', fields: featuresFields, + icon: SparklesIcon, id: 'features', name: 'Features', variants: [ - { id: 'grid', label: 'Grid', description: 'Cards side by side.' }, - { id: 'list', label: 'List', description: 'One per row.' }, - { id: 'compact', label: 'Compact', description: 'A dense summary.' }, + { description: 'Cards side by side.', id: 'grid', label: 'Grid' }, + { + description: 'One per row, with room to explain.', + id: 'list', + label: 'List', + }, + { description: 'A dense summary.', id: 'compact', label: 'Compact' }, ], }) ``` @@ -68,7 +75,7 @@ A variant is one more key on the instance, beside `data` and never in it: ```json { "id": "01JC4Z8N9WQKX7R2M5T6V3B8HD", - "type": "example:features", + "type": "newsroom:features", "variant": "list", "data": { "heading": "One block, three shapes", @@ -80,7 +87,7 @@ A variant is one more key on the instance, beside `data` and never in it: That placement is the whole feature. Because `variant` is a sibling of `data`: - switching it never touches, re-validates or re-saves the content, -- the block's schema stays the schema of its **content**, so a search indexer reading `data` never trips over a styling token, +- the widget's fields describe only its **content**, never a styling token, - and a block that drops a variant later does not need a data migration to get rid of it. ## How a variant resolves diff --git a/apps/web/content/docs/dev/widgets/blocks-field.mdx b/apps/web/content/docs/dev/widgets/blocks-field.mdx index c642cdd66c..9b8f132013 100644 --- a/apps/web/content/docs/dev/widgets/blocks-field.mdx +++ b/apps/web/content/docs/dev/widgets/blocks-field.mdx @@ -1,59 +1,64 @@ --- -title: The blocks() Field +title: Blocks field description: An ordered list of widget instances stored in one JSONB column, validated against the registry on every write. icon: LayoutList --- +`field.blocks()` stores an ordered list of widgets on a Content Engine record, in one JSONB column, and validates it on every write. Use it when the widgets belong to a record, such as a landing page or an article. For widgets that belong to a page of your app rather than to a record, use an [editable page](/docs/dev/widgets/editable-pages) instead. + ## Adding a zone to a content type -```ts title="plugins/example/src/content/page.ts" +```ts title="plugins/newsroom/src/content/page.ts (excerpt)" import { defineContentType, field } from '@vitnode/core/content' +import { PAGE_BLOCKS_ALLOWED } from './page-blocks' + export const pageContentType = defineContentType({ - id: 'example.page', - tableName: 'example_pages', + id: 'newsroom.page', + tableName: 'newsroom_pages', fields: { title: field.text({ required: true, minLength: 3, maxLength: 200 }), slug: field.slug({ source: 'title' }), + // [!code ++:4] content: field.blocks({ - allowed: ['core:*', 'example:callout'], + allowed: PAGE_BLOCKS_ALLOWED, max: 50, }), }, publication: true, + // … }) ``` -| Option | Default | What it does | -| :---------- | :------ | :-------------------------------------------- | -| `allowed` | `"*"` | Which blocks may be placed here. | -| `max` | `200` | Most block instances one record may hold. | -| `min` | none | Fewest block instances. | -| `localized` | `false` | Give every language its own blocks and order. | +`PAGE_BLOCKS_ALLOWED` is `['core:*', 'newsroom:callout', 'newsroom:features']`, kept in `content/page-blocks.ts` so the page that renders the field can [share it](/docs/dev/widgets/restrict-widgets#share-one-list). `field.widgets()` is an alias of `field.blocks()`. + +| Option | Default | What it does | +| :---------- | :------ | :--------------------------------------------- | +| `allowed` | `"*"` | Which widgets may be placed here. | +| `max` | `200` | Most widgets one record may hold. | +| `min` | none | Fewest widgets. | +| `localized` | `false` | Give every language its own widgets and order. | -`min` and `max` count **block instances**, wherever they sit. A block inside a +`min` and `max` count **widget instances**, wherever they sit. A widget inside a [layout area](/docs/dev/widgets/layout-areas) counts towards the limit; the area -holding it does not, so an empty area counts as nothing. Two blocks are two -blocks whether they sit side by side in an area or one under the other. +holding it does not, so an empty area counts as nothing. -A `blocks()` field is never `required` and never `nullable` - the empty list is what "no blocks" is, so a create that says nothing about the zone gets `[]`. That empty list is still checked against `min`, so a zone that declares `min: 1` refuses a create that leaves it out. +A `blocks()` field is never `required` and never `nullable`. The empty list means "no widgets", so a create that says nothing about the zone gets `[]`. That empty list is still checked against `min`, so a zone that declares `min: 1` refuses a create that leaves it out. ## Restricting what may go in `allowed` takes three shapes, and they mix freely: ```ts -field.blocks({ allowed: '*' }) // every registered block +field.blocks({ allowed: '*' }) // every registered widget field.blocks({ allowed: ['core:*', 'blog:*'] }) // two whole plugins field.blocks({ allowed: ['core:hero', 'core:text'] }) // exactly these two ``` -A namespace wildcard is the useful middle: installing another plugin does not silently widen what a page may contain, while adding a block to a plugin you already trust does. - -The shape is a string union on purpose, so a later `{ categories: [...] }` or `{ excluding: [...] }` object can join the array without any existing definition changing. +A namespace wildcard is the useful middle. Installing another plugin does not silently widen what a page may contain, while adding a widget to a plugin you already trust does. The same list format works on zones and editable pages; see [Restrict widgets](/docs/dev/widgets/restrict-widgets). ## The stored shape @@ -74,45 +79,45 @@ holding an ordered list of instances: }, { "id": "01JC4Z8N9X3R7T2M5Q6K8V4B9F", - "type": "example:callout", + "type": "newsroom:callout", "data": { "title": "Heads up", "body": "...", "tone": "info" } } ] ``` -| Key | Rule | -| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | -| `id` | Stable and unique **within the zone**. Never the array index - a reorder must not change what a block is. | -| `type` | The globally unique block id. | -| `data` | Validated against that block's own field schema. | -| `variant` | Optional. The look this instance picked, from the ones its block [declares](/docs/dev/widgets/block-variants). Absent means "the block's default". | +| Key | Rule | +| :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | Stable and unique **within the zone**. Never the array index, since a reorder must not change what a widget is. | +| `type` | The globally unique widget id, such as `core:hero`. | +| `data` | Validated against that widget's own fields. | +| `variant` | Optional. The look this instance picked, from the ones its widget [declares](/docs/dev/widgets/block-variants). Absent means "the widget's default". | Array order **is** the rendered order. Nothing sorts it. ### Areas in the same list -A zone holds **content nodes**, and a node is either a block instance or an [Area](/docs/dev/widgets/layout-areas) - a small layout container with its own id, a `layout` of four tokens, and `children` that are blocks: +A zone holds **content nodes**, and a node is either a widget instance or an [Area](/docs/dev/widgets/layout-areas), a small layout container with its own id, a `layout` and `children` that are widgets: ```json { "id": "01JC4Z8N9X3R7T2M5Q6K8V4B9F", "kind": "area", - "layout": { "columns": 2, "gap": "md" }, + "layout": { "columns": 2, "gap": 16 }, "children": [ - { "id": "01JC…", "type": "core:text", "data": { "heading": "Left" } } + { + "id": "01JC4Z8N9X3R7T2M5Q6K8V4B9G", + "type": "core:text", + "data": { "heading": "Left", "body": "Two widgets, side by side." } + } ] } ``` -An Area is told apart by `kind: "area"`, needs no entry in `allowed` - its children are checked against the same list the zone's own blocks are - and cannot contain another Area. A zone stored before Areas existed is a list of blocks, which is a list of nodes that never nests, so nothing was migrated. - -### Why one column - -A block instance is a document: an id, a type, and whatever that type declares. Splitting it across tables would buy a join per zone, a migration per new block, and an ordering Postgres would have to rebuild on every read. One `UPDATE` re-orders a whole page, and a revision snapshot of it is a value rather than a graph - which is what makes drafts, revisions and reusable blocks tractable later. +An Area is told apart by `kind: "area"` and cannot contain another Area. It needs no entry in `allowed`, because the API checks its children against the same list as the zone's own widgets. ### Instance ids -`createBlockInstanceId()` produces a 26-character Crockford base32 identifier - 10 characters of millisecond timestamp, then 16 of randomness. It sorts by creation time, which is what lets a later merge of two edits order instances it has never seen. +`createBlockInstanceId()` produces a 26-character identifier that sorts by creation time. ```ts import { createBlockInstance } from '@vitnode/core/widgets' @@ -121,22 +126,22 @@ const hero = createBlockInstance('core:hero', { title: 'Build your community' }) // { id: "01JC4Z8N9W…", type: "core:hero", data: { title: "…" } } ``` -Storage accepts any stable id of 1-64 URL-safe characters, so an imported document or a reusable block can keep the identity it arrived with. +Storage accepts any stable id of 1-64 letters, digits, `-` and `_`, so an imported document can keep the ids it arrived with. ## What the API checks on a write -Every create and update runs the zone through the registry, once, before anything is stored - so a row that exists has already been validated. Nothing re-checks it on read, and [the renderer never repeats that schema parse](/docs/dev/widgets/rendering#validation) - it only compares the stored shape against the block's current fields, so a definition that moved on since the write cannot reach a component. +Every create and update runs the zone through the registry, once, before anything is stored. Nothing re-checks it on read; the renderer only [compares the stored shape](/docs/dev/widgets/rendering#validation) with the widget's current fields. -The whole request is refused if any instance fails: +If any instance fails, the API refuses the whole request with `400` and stores nothing: -| Refused | Message | -| :------------------------------- | :------------------------------------------------------------------------------------ | -| A block the field does not allow | `Block "core:cta" is not allowed in this field.` | -| A block no plugin registers | `Block "shop:cart" is not registered. Install or enable the plugin that provides it.` | -| Data the block's fields reject | `Block "core:hero" data is invalid - title: Too big…` | -| Two instances sharing an id | `Block instance id "01…" appears more than once.` | +| Refused | Message | +| :-------------------------------- | :------------------------------------------------------------------------------------ | +| A widget the field does not allow | `Block "core:cta" is not allowed in this field.` | +| A widget no plugin registers | `Block "shop:cart" is not registered. Install or enable the plugin that provides it.` | +| Data the widget's fields reject | `Block "core:hero" data is invalid - title: Too big…` | +| Two instances sharing an id | `Block instance id "01…" appears more than once.` | -Errors are keyed by the instance's index, so a client can point at the block that is wrong. +Each message names the instance's position, so a client can point at the widget that is wrong. ## Localization @@ -146,22 +151,20 @@ content: field.blocks({ localized: true }) The column moves to the generated translation table, exactly as a localized `text` field does, and keeps the translation lifecycle, revisions and preview it already had - no new concepts. -What this localizes is the **whole block document**, not the text inside each block. Each language owns its own list: which blocks are in it, what is in them, and what order they come in. The two need not correspond at all. +What this localizes is the **whole list**, not the text inside each widget. Each language owns its own list: which widgets are in it, what is in them, and in what order. The two need not correspond at all: ```text en: core:hero → core:text → core:cta pl: core:hero → core:cta → blog:gallery ``` -That is deliberate. A translated landing page is rarely the same page with different words - a market may need a different call to action, or no gallery - and treating a zone as one translatable document is what makes that expressible. It is also the only model that reuses VitNode's existing localization: a per-field locale map inside JSON would be a second localization system that the translation table, the revision history and the public locale resolution all know nothing about. - -The cost is the other side of the same coin: adding a block to one language does not add it to the others, and there is no "this paragraph is the translation of that paragraph" link between two locales. A field inside a block is therefore never `localized: true`; see [Defining a block](/docs/dev/widgets/defining-a-block#localization). +A translated landing page is rarely the same page with different words, so a market can get a different call to action, or none. The flip side is that adding a widget to one language does not add it to the others. A field inside a widget is never `localized: true`; see [Define a widget](/docs/dev/widgets/defining-a-block#localization). ## Editing one -A `blocks()` field is the storage half, and the [Visual Editor](/docs/dev/widgets/visual-editor) is how somebody arranges what goes in it. The two are joined by whatever your page hands the editor and whatever your API does with the payload that comes back - the field's own `allowed`, `min` and `max` are re-checked on the way in either way. +The AdminCP form leaves a `blocks()` field out, and core ships no editor for a record's field. You fill it through the API, or host the [visual editor](/docs/dev/widgets/visual-editor) on it yourself with a save route of your own. See [Custom editor host](/docs/dev/widgets/custom-editor-host). The field's `allowed`, `min` and `max` are checked on that write like any other. -For a zone that is not a column on a record at all - a settings screen, a forum index, anything a page simply _has_ - the storage half is core's, and you declare the zone rather than a field. See [Editable Pages](/docs/dev/widgets/editable-pages). +For widgets that belong to a page rather than to a record, such as a settings screen or a forum index, core stores and saves the layout for you. See [Editable pages](/docs/dev/widgets/editable-pages). ## Exposing the zone publicly @@ -178,9 +181,9 @@ The public read returns the instances in stored order, each one's `data` already ## What a zone is not -| | | -| :------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Not indexable** | A btree index over a JSONB document orders pages by their serialised bytes. `indexes` refuses it. | -| **Not filterable or orderable** | For the same reason. | -| **Not searchable** | Indexing block prose into search is its own stage. | -| **Not an AdminCP form field** | The generated form and the DataTable both leave it out - a zone is arranged on the page by the [Visual Editor](/docs/dev/widgets/visual-editor), not typed into a control. | +| | | +| :------------------------------ | :------------------------------------------------------------------------------------------------ | +| **Not indexable** | A btree index over a JSONB document orders pages by their serialised bytes. `indexes` refuses it. | +| **Not filterable or orderable** | For the same reason. | +| **Not searchable** | Widget text is not indexed for search. | +| **Not an AdminCP form field** | The generated form and the DataTable both leave it out. | diff --git a/apps/web/content/docs/dev/widgets/content-zones.mdx b/apps/web/content/docs/dev/widgets/content-zones.mdx index f250e83f74..0229e63f69 100644 --- a/apps/web/content/docs/dev/widgets/content-zones.mdx +++ b/apps/web/content/docs/dev/widgets/content-zones.mdx @@ -1,545 +1,118 @@ --- -title: Content Zones -description: A named place on a page where widgets may appear. It renders what you hand it, adds no element of its own, and makes no request. +title: Content zones +description: A content zone is a named place on a VitNode page where widgets render. Render one with ContentZone, name it, choose its wrapper and see what an empty zone does. icon: LayoutTemplate --- -A **Content Zone** is a place on a page where widgets may appear, named by the developer who put it there. +A **content zone** is a named place on a page where widgets render. `ContentZone` takes a list of widgets and renders them through [`ContentRenderer`](/docs/dev/widgets/rendering). What it adds is the **name**, which the [visual editor](/docs/dev/widgets/visual-editor) and [editable pages](/docs/dev/widgets/editable-pages) use to place and save widgets in the right spot. -```tsx title="src/routes/_main/pages.$slug.tsx" -import { ContentZone } from '@vitnode/core/widgets/zone' - -import { blocksRegistry } from '@/blocks.gen' +## Before you begin -;<ContentZone id="main" blocks={page.content} registry={blocksRegistry} /> -``` +- **Widgets to render**, read by your route's loader: a record with a [`blocks()` field](/docs/dev/widgets/blocks-field), or an [editable page](/docs/dev/widgets/editable-pages), which hands its zones their widgets for you. +- **A widget registry**: `blocksRegistry` from the app's generated `src/blocks.gen.ts`, or one a plugin page builds with `createBlockRegistry`. See [Where the registry comes from](/docs/dev/widgets/rendering#where-the-registry-comes-from). -That is the whole idea. A zone takes a list of block instances and renders them through [`ContentRenderer`](/docs/dev/widgets/rendering). What it adds on top is a **name** - and a name is what the [Visual Editor](/docs/dev/widgets/visual-editor) and [Editable Pages](/docs/dev/widgets/editable-pages) use to place, rearrange, and save widgets on the page. +## Render a zone -```text -Public page - ↓ -ContentZone - ↓ -ContentRenderer - ↓ -Blocks -``` +The newsroom plugin's page route renders a record's `content` field in a zone named `content`: -## A zone id is not a block id +```tsx title="plugins/newsroom/src/pages/site-page.tsx (excerpt)" +import { ContentZone } from '@vitnode/core/widgets/zone' -These two identifiers are easy to confuse and never interchangeable. +<ContentZone + allowedBlocks={PAGE_BLOCKS_ALLOWED} + blocks={page.content} + id="content" + registry={blocksRegistry} +/> +``` -| | Says | Looks like | Written by | -| :-------------------- | :--------------------------- | :-------------------------------- | :------------------------------ | -| **Zone id** | _where_ content is rendered | `main`, `settings:before-profile` | you, in the page's source | -| **Block instance id** | _which block_ sits inside it | `01JC4Z8N9WQKX7R2M5T6V3B8HD` | `createBlockInstanceId()`, once | +`page` is the record the route's loader returned and `blocksRegistry` the registry built in the same file; [First widget](/docs/dev/widgets/end-to-end#render-it-on-a-page) shows the whole page. `allowedBlocks` is optional; see [Restrict widgets](/docs/dev/widgets/restrict-widgets). -A page has a handful of zones and they do not change when content does. A zone holds any number of block instances, and which ones it holds changes every time somebody edits the page. +A zone never fetches. It renders the list it is handed, so every zone on a page shares the loader's one request. A widget that needs its own data, such as "the six newest articles", fetches it inside its own component. -### Rules for a zone id +## Name the zone -One or more `:`-separated segments of lowercase letters, digits and single hyphens, up to 64 characters. +A zone id is one or more `:`-separated segments of lowercase letters, digits and single hyphens, up to 64 characters: ```tsx <ContentZone id="main" /> -<ContentZone id="sidebar" /> <ContentZone id="before-profile" /> <ContentZone id="homepage:hero" /> -<ContentZone id="settings:before-profile" /> ``` -The optional prefix is yours to use however you like - a screen, a plugin, a section. `settings:before-profile` and `profile:before-profile` are two different zones, which is the point. - -A zone id is never generated and never an array index. Saved editor state will address zones by these strings, so an id that changes is a zone that loses its content. `ContentZone` refuses anything it could not address later: +Write the id by hand and never change it. A saved layout addresses zones by these strings, so a renamed zone is a zone that lost its content. An id that `ContentZone` could not address later throws the first time the page renders: ```tsx <ContentZone id="Before Profile" blocks={content} /> // BlockError: Content zone id "Before Profile" is not usable. … ``` -That throws the first time the page renders, in development or in a test, because a zone id is a literal you wrote - never something a visitor can influence. +A zone id says _where_ widgets render. It is unrelated to the id of each widget instance inside it, which says _which_ widget it is and is created once with `createBlockInstanceId()`. -### One id, one place on the page +## Add a wrapper -A zone id names a **location**, so two zones on one page may not share one. Render the same id twice and view mode simply renders both lists, but edit mode refuses: - -```tsx -<ContentZone id="main" /> -<ProfileForm /> -<ContentZone id="main" /> -// BlockError: Two `<ContentZone id="main" />` outlets are on the page at the same time… -``` - -The editor stores, moves and saves blocks by zone id. With two of them it cannot tell which place a block belongs to, and a save would write one over the other - so it says so the moment both are on the page, rather than picking one and being wrong quietly. Moving a zone to a different element, re-rendering it under another branch of the page, and React's double-invoked effects in development are all fine: the refusal is only for two elements that are genuinely on the page at once. - -Need the same content in two places? Two ids - `main` and `main-aside` - and the page decides what goes in each. - -## Zones around locked application UI - -This is the case Content Zones exist for. Not every page is a CMS page: most of an application is code, and the useful thing is to be able to put content _around_ it. - -```tsx title="src/routes/_main/settings.tsx" -<UserSettingsLayout> - <ContentZone - id="settings:before-profile" - blocks={layoutContent.beforeProfile} - /> - - <ProfileForm /> - - <ContentZone - id="settings:after-profile" - blocks={layoutContent.afterProfile} - /> -</UserSettingsLayout> -``` - -`ProfileForm` is application code. It has validation, permissions and tests, and nobody is going to drag a block into the middle of it. The two zones around it are content widgets - an authorized moderator clicks **Edit widgets** in the user menu to rearrange them without touching the form. - -```text -editable zone - ↓ -locked system UI - ↓ -editable zone -``` - -<Callout title="See it running"> - `/example/zones` in the example plugin is exactly this page: four zones around - a profile form that stays application code. -</Callout> - -## Several zones on one page - -Nothing assumes one zone per page. Each one has its own id, its own list and its own rules. - -```tsx -<> - <ContentZone id="hero" blocks={page.hero} /> - - <ArticleContent /> - - <ContentZone id="after-content" blocks={page.afterContent} /> -</> -``` - -## What a zone renders - -By default: **nothing but the blocks**. No wrapper, no element, no class. - -That is deliberate. A zone often lives inside a flex or grid container, and an uninvited `<div>` there is a broken `gap` and a column that stopped being a column. - -Ask for a wrapper when you want one: +By default a zone renders **nothing but the widgets**, with no wrapper element or class around them. A zone often sits inside a flex or grid container, and an uninvited `<div>` there would break its `gap`. Ask for a wrapper when you want one: ```tsx <ContentZone as="aside" className="flex w-full flex-col gap-4 md:w-64" - id="settings:sidebar" - blocks={content} + id="sidebar" + blocks={sidebar} + registry={blocksRegistry} /> ``` -| Props | Renders | -| :--------------------------------- | :---------------------------------- | -| neither `as` nor `className` | the blocks, and nothing around them | -| `className` only | a `<div>` with that class | -| `as` (with or without `className`) | that element | +| Props | Renders | +| :--------------------------------- | :----------------------------------- | +| neither `as` nor `className` | the widgets, and nothing around them | +| `className` only | a `<div>` with that class | +| `as` (with or without `className`) | that element | -`as` takes an **HTML element name** - `"section"`, `"aside"`, `"header"`, `"ul"` - and not a component. The wrapper's job is to carry the zone's identity into the DOM, and a component is free to drop the `data-*` props it is handed, which would lose that identity silently and only in the case nobody tests. If you want the zone inside a component of yours, compose instead of substituting: +`as` takes an HTML element name, such as `"section"`, `"aside"` or `"ul"`, not a component. The wrapper carries the zone's identity in `data-*` attributes, and a component could drop them. To put a zone inside your own component, nest it instead: ```tsx <Card> - <ContentZone id="settings:sidebar" blocks={content} /> + <ContentZone id="sidebar" blocks={sidebar} registry={blocksRegistry} /> </Card> ``` -That reads better anyway, and the zone stays exactly as heavy as it was. - -## Empty zones - -An empty zone renders **nothing at all** - wrapper included. - -```tsx -<ContentZone id="sidebar" blocks={[]} /> -``` - -There is no empty container, no stray border and no gap in a flex column. `null`, `undefined` and `[]` behave identically, so a page whose zones are all empty is byte-for-byte a page without zones. The registry is not even consulted. - -This is a deliberate performance and layout decision, not an oversight. Most zones in an application are empty most of the time - a page with eight placement points and two filled ones should cost exactly two. Emitting a marker element for the other six would put six nodes in every visitor's document, participate in every flex and grid calculation, and exist for the benefit of a person who is not there. - -An editor will need to _see_ an empty zone in order to drop something into it. That is edit mode's job, and edit mode can render whatever placeholder it likes, because by then somebody has asked for it. - -## Restricting what may go in a zone - -`allowedBlocks` takes the same shape - and means the same thing - as `allowed` on a [`blocks()` field](/docs/dev/widgets/blocks-field#restricting-what-may-go-in): - -```tsx -<ContentZone - id="main" - blocks={page.content} - allowedBlocks={['core:*', 'blog:*']} -/> -``` - -There is one allowlist format in VitNode, one function that evaluates it, and this is it. - -### Two allowlists, two jobs - -The same value means two different things in two places, and the difference matters. - -| | `field.blocks({ allowed })` | `<ContentZone allowedBlocks>` | -| :------------- | :-------------------------- | :------------------------------------------ | -| **Is** | a write boundary | a description of the location | -| **Runs** | on every create and update | not at all in production | -| **On refusal** | the whole request is a 422 | the block is skipped in development | -| **Answers** | "may this be stored?" | "what belongs here?" | -| **For** | the API | the future editor, and you reading the page | - -The field is the thing that _enforces_. A stored instance has already crossed it, so a page re-checking the same list on every render would be paying twice for one answer. The zone's copy exists to say what a location is for - which is what a block picker will need, and what a reader of the JSX needs. - -Public rendering is therefore **not** a second _schema_ validation boundary - it re-parses nothing, though it does always check that a stored block still structurally matches its block's fields. What the zone does with its allowlist follows the same `validate` modes the [renderer](/docs/dev/widgets/rendering#validation) already uses, and it _skips_, never rejects: - -| `validate` | A block the zone does not allow | -| :-------------------------- | :----------------------------------------------- | -| `"never"` | renders | -| `"development"` _(default)_ | is skipped in development, renders in production | -| `"always"` | is skipped everywhere | - -In development the block is skipped, a dashed notice names it, and one `console.warn` is logged per block type - a development aid for content that drifted, not a gate. In production the write boundary is trusted and nothing is checked at all. - -`validate="always"` is the exception, for a page rendering blocks the API never saw - a live import, a third-party feed. Even then it costs one `Map` lookup and a list scan per block, not a schema parse. - -### Declaring the allowlist once - -The zone's allowlist and the field's `allowed` are usually the same value, and writing it twice is a typo waiting to happen. - -If the page is an [editable page](/docs/dev/widgets/editable-pages), do not write it on the page at all. `defineEditablePage` declares each zone's allowlist once, and `<EditablePage>` hands every zone under it both the allowlist and the blocks: - -```tsx title="plugins/example/src/pages/zones-page.tsx" -<EditablePage layout={layout} page={settingsPage}> - <ContentZone id="before-profile" registry={blocksRegistry} /> -</EditablePage> -``` - -An `id` is the whole zone. There is no second copy to drift, and asking for a zone the page does not declare throws rather than rendering one no save will ever reach. - -You may still pass props on a declared zone, with one rule: the page declaration is the ceiling. - -| | | -| :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `blocks` | Overrides where the content comes from - the array you pass is what renders. | -| `allowedBlocks` | **Narrows only.** It is intersected with the page's allowlist, so `"*"` here cannot re-open a zone the page restricted, and an intersection of nothing is a developer error rather than a zone nobody can fill. | -| `min` / `max` | **Tighten only.** The higher `min` and the lower `max` win, and a `min` that ends up above the `max` throws where you wrote it. | - -That is only true for a zone an [editable page](/docs/dev/widgets/editable-pages#what-a-call-site-may-still-say) declares, because that declaration is what the save route checks against. A standalone `<ContentZone>` has nothing to be intersected with, so its own props are simply its own. - -For a zone outside an editable page, put the array in a module of its own and import it from both ends: - -```ts title="plugins/example/src/content/page-blocks.ts" -export const PAGE_BLOCKS_ALLOWED = ['core:*', 'example:callout'] as const -``` - -```ts title="plugins/example/src/content/page.ts" -content: field.blocks({ allowed: PAGE_BLOCKS_ALLOWED, max: 50 }) -``` - -```tsx -<ContentZone - id="settings:before-profile" - allowedBlocks={PAGE_BLOCKS_ALLOWED} - blocks={content} -/> -``` - -One declaration, two readers, and the page imports an array rather than a content type. - -<Callout title="Why the zone does not take the field itself" type="warn"> - An earlier draft of this API accepted `field={pageContentType.fields.content}` so the allowlist could be read straight off the descriptor. It was measured and removed. - -A content type is authored by _calling_ `defineContentType` at module scope, so importing one retains everything that call reaches - the field factories, the schema builders, Zod, the admin labels. On `/example/zones` the difference was **8 chunks and 23.5 kB** against **15 chunks and 181.8 kB**, to read one array of strings. - -A boundary test keeps that honest: `blocks/zone.tsx` reaches `react` and nothing else, `content/define.ts` reaches Zod, and `content/fields.ts` reaches nothing - the descriptors are cheap, the content _type_ is not. - -</Callout> - -### Where the registry comes in - -Pass it, from the route that renders blocks: - -```tsx -import { blocksRegistry } from '@/blocks.gen' -``` - -`blocks.gen.ts` statically imports every configured plugin's block components, so importing it from a root module - `router.tsx`, a root layout - would put every block in the application on every page, including the ones that render none. Import it in the route that needs it and it stays in that route's chunk. A test asserts the application's root router cannot reach it. - -A plugin cannot see the host's generated file at all, so a plugin-owned page builds the registry it needs from the blocks it knows about: - -```tsx title="plugins/example/src/pages/zones-page.tsx" -import { createBlockRegistry } from '@vitnode/core/widgets' -import { blocks as coreBlocks } from '@vitnode/core/widgets/built-in' - -import { blocks as exampleBlocks } from '@/blocks' - -const blocksRegistry = createBlockRegistry([coreBlocks, exampleBlocks]) -``` - -Either way the registry is a value the page owns, and nothing global had to be set up first. - -## A zone never fetches - -`ContentZone` is rendering infrastructure. It takes block data as a prop and never goes looking for it. - -```text -route loader - ↓ -one request for the page - ↓ -zones render what it returned -``` - -The alternative writes itself, and it is the thing to avoid: - -```text -page - ├ zone A → request - ├ zone B → request - └ zone C → request -``` - -Five zones on a settings page would be five round trips for data that came from one row. A block that genuinely needs its own data - "the six newest articles" - fetches it inside its own component, where it can be cached and suspended on its own terms. - -## Performance - -A zone costs a function call. - -- **No request.** It renders the list it was given. -- **No hydration.** It holds no state, subscribes to nothing, and server-renders like any other component. A page full of zones ships the same JavaScript as a page without them. -- **No editor.** `@vitnode/core/widgets/zone` reaches React and `ContentRenderer`, and that is the entire list. A boundary test asserts the reachable module graph, so drag-and-drop, forms, query and AdminCP code cannot drift into it later. -- **No DOM.** Unless you ask for a wrapper, a zone is not in the markup at all. - -## What the editor will find - -When a zone renders a wrapper, the wrapper carries its identity: +A wrapper carries the zone's id and allowlist: ```html -<aside - class="…" - data-vitnode-zone="settings:sidebar" - data-vitnode-zone-allowed="core:*,example:callout" -></aside> +<aside data-vitnode-zone="sidebar" data-vitnode-zone-allowed="core:text">…</aside> ``` -Two attributes, both short strings. That is the whole metadata story for now, and it is free: they ride on an element you asked for anyway. There is no zone registry, no context and no module-level state holding a list of zones - a public page has nobody to tell. - -The format stays small and predictable on purpose. An id, and a comma-separated allowlist. Nothing here will ever grow into a serialised JSON blob in an attribute: anything bigger than a couple of identifiers belongs in edit mode, where it can be a JavaScript value instead of a string somebody has to parse back out of the document. - -<Callout title="A zone without a wrapper has no marker - by design" type="warn"> - Most zones render no element, so most zones leave no trace in view-mode HTML. That is the [empty-zone and no-wrapper behaviour](#what-a-zone-renders) working as intended, and it means **the set of zones on a page is not discoverable by scanning public DOM**. - -Edit mode does not try. It knows its zones because it rendered them - each `ContentZone` registers itself while edit mode is on - rather than walking the document looking for attributes that were never promised to be there. That registration is also what notices [two zones claiming one id](#one-id-one-place-on-the-page): the list the editor keeps is the truth, not the DOM. +A zone without a wrapper leaves no trace in the HTML, so do not look for zones by scanning the DOM. The editor doesn't either. Each `ContentZone` registers itself while edit mode is on. -</Callout> - -If you need those values yourself, `@vitnode/core/widgets` exports the pieces without any React: +## Empty zones -```ts -import { - assertContentZoneId, - contentZoneAttributes, - isContentZoneId, - parseContentZoneId, -} from '@vitnode/core/widgets' +An empty zone renders **nothing at all**, wrapper included. `null`, `undefined` and `[]` behave the same, so a page whose zones are all empty is the same markup as a page without zones. Most zones are empty most of the time, and visitors should not pay for placeholders nobody is looking at. -parseContentZoneId('settings:before-profile') -// { name: "before-profile", scope: "settings" } -``` +In edit mode the same zone shows **Drag and drop widgets here** and an **Add widget** button, so a moderator can fill it. See [Visual editor](/docs/dev/widgets/visual-editor#open-the-editor). ## Props -| Prop | Default | | -| :-------------- | :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `id` | — | The zone's stable name. Required. | -| `blocks` | — | The instances to render. `null`, `undefined` and `[]` all render nothing. | -| `registry` | the process default | The registry to resolve blocks against. | -| `allowedBlocks` | none | What may be placed here. Same shape as a `blocks()` field's `allowed`. Under an editable page it may only narrow what the page allows. | -| `min` / `max` | `0` / `200` | How many blocks belong here. Under an editable page they may only tighten the page's own bounds, and with no `max` written anywhere storage still applies its usual ceiling of `200`. | -| `as` | none | An HTML element name to wrap in. Components are not accepted. | -| `className` | none | A class for that wrapper. Implies `as="div"`. | -| `validate` | `"development"` | Passed through to the renderer, and gates the allowlist check. | -| `fallback` | a development-only notice | What to render for a block that is skipped. | - -Everything but `id` and `blocks` is optional and named, so later additions - a label, a maximum, a permission - are additions rather than a new signature. - -## Verifying it yourself - -`/example/zones` in the example plugin is the manual test page for everything above. It renders four zones around a locked profile form, and its own copy lists what each one should look like. - -### In development - -<Steps> -<Step> - -Start the development environment from the repository root: - -```bash -pnpm dev -``` - -</Step> -<Step> +| Prop | Default | | +| :-------------- | :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | - | The zone's stable name. Required. | +| `blocks` | - | The widgets to render. `null`, `undefined` and `[]` all render nothing. Leave it out on an editable page, which supplies them. | +| `registry` | the process default | The registry to resolve widgets against. | +| `allowedBlocks` | none | What may be placed here, in the [allowlist format](/docs/dev/widgets/restrict-widgets). On an editable page it may only narrow the page's list. | +| `min` / `max` | none | How many widgets the editor lets the zone hold. On an editable page they may only tighten the page's own bounds. | +| `as` | none | An HTML element name to wrap in. Components are not accepted. | +| `className` | none | A class for that wrapper. Implies `as="div"`. | +| `validate` | `"development"` | Passed to the renderer; decides when `allowedBlocks` is checked. See [Validation](/docs/dev/widgets/rendering#validation). | +| `fallback` | a development-only notice | What to render for a widget that is skipped. | -Open [http://localhost:3000/example/zones](http://localhost:3000/example/zones) and check the page itself: - -| | Expected | -| :----------- | :--------------------------------------------------------------------- | -| Order | Blocks appear in the order the loader lists them - callout, then text. | -| Locked UI | The profile form renders untouched between the two zones. | -| Empty zone | `settings:before-footer` leaves no gap below the layout. | -| Independence | Each zone renders its own blocks; none affects another. | - -</Step> -<Step> - -Open DevTools → Elements and check the DOM: - -| Zone | Expected | -| :------------------------ | :----------------------------------------------------------------------------------- | -| `settings:sidebar` | `<aside data-vitnode-zone="settings:sidebar" data-vitnode-zone-allowed="core:text">` | -| `settings:before-profile` | its two blocks, with **no** element wrapping them | -| `settings:after-profile` | its block, with **no** element wrapping it | -| `settings:before-footer` | nothing - no element, no comment, no whitespace node | - -</Step> -<Step> - -Open DevTools → Network, filter to Fetch/XHR, and reload. `ContentZone` issues **no request of its own**: the blocks arrived with the route's loader data. - -</Step> -<Step> - -Break a zone id on purpose, to confirm it fails loudly rather than silently: - -```tsx -<ContentZone id="Settings Sidebar" blocks={loaderData.sidebar} /> -``` +`ContentZone` comes from `@vitnode/core/widgets/zone`, which pulls in React and the renderer and nothing else, so no editor code reaches a page that only shows zones. For code without React, `@vitnode/core/widgets` exports `isContentZoneId`, `assertContentZoneId`, `parseContentZoneId` and `contentZoneAttributes`. -The page should throw a `BlockError` naming the id and the rule. Put it back. +## Check the result -</Step> -<Step> - -Open an unrelated route - `/`, or `/docs` - with the Network panel open, and confirm **no block module loads**. A page that renders no blocks should never request one. This is the property the root router must not break; the [import-graph test](#performance) is the standing guard, and this is how you see it. - -</Step> -</Steps> - -### A block whose plugin is gone - -Content outlives plugins, so the interesting case is a page referencing a block nothing registers. Simulate it **temporarily** - do not commit the change. - -<Steps> -<Step> - -In `plugins/example/src/blocks.tsx`, comment the callout out of the registered list: - -```ts -export const blocks = { - pluginId: manifest.id, - blocks: [], // was [calloutBlock] -} satisfies BlockPluginSource -``` - -The loader in `zones-page.tsx` still places an `example:callout`, which is exactly the situation: stored content naming a block that is no longer installed. - -</Step> -<Step> - -**In development**, reload `/example/zones`. Expect a dashed notice reading _Block "example:callout" is not registered_, one `console.warn` in the terminal and browser console, and **every other block still rendering** - the text block, the profile form, the CTA, the sidebar. - -</Step> -<Step> - -**In production**, run the production flow below with the same edit in place. Expect the callout to be silently absent, no notice, no error, and a 200 response. A visitor sees a page with one section missing, not a stack trace. - -</Step> -<Step> - -Revert `blocks.tsx`. - -</Step> -</Steps> - -### Against a production build - -Dev-mode checks miss bundling, minification and real SSR, so repeat the important ones against a build: - -<Steps> -<Step> - -Build and start: - -```bash -pnpm build -pnpm start -``` - -`pnpm build` runs `vite build` for the web app; `pnpm start` serves `.output/server/index.mjs`. To do just the web app, use `pnpm --filter web build` and `pnpm --filter web start`. - -</Step> -<Step> - -Read the **server-rendered markup**, not the hydrated DOM - `view-source:`, or: - -```bash -curl -s http://localhost:3000/example/zones | grep -o 'data-vitnode-zone[^>]*' -``` - -Exactly one match, for the sidebar. The unwrapped zones contribute no attribute, and the empty one contributes nothing. - -</Step> -<Step> - -Confirm the block content is in the HTML the server sent, not painted in afterwards - search the source for a block's text. If it is there, the zone server-rendered and needs no hydration to be readable. - -</Step> -<Step> - -Confirm no editor code reached the page: - -```bash -curl -s http://localhost:3000/example/zones | grep -cE 'dnd-kit|tiptap|cmdk' -``` - -`0`. The [import-graph tests](#performance) are the standing guarantee; this is the spot check that the guarantee survived bundling. - -</Step> -<Step> - -Load an unrelated route and confirm its chunks hold no block components - search the modules it preloads for a block id such as `core:hero`: - -```bash -curl -s http://localhost:3000/ | grep -o '/assets/[^"]*\.js' | sort -u -``` - -Fetch those and grep for `core:hero`. Nothing should match: a page that renders no blocks must not carry any. - -</Step> -</Steps> - -## The same zone, in edit mode - -A zone renders blocks. It is also the surface an authorized editor arranges them on - see [Visual Edit Mode](/docs/dev/widgets/visual-editor). - -```text -ContentZone in view mode: -render blocks - -ContentZone in edit mode: -render blocks + the editing surface -``` +Open the page and view its source. The zone's widgets are in the server-rendered HTML, in stored order, with no element around them unless you asked for a wrapper. On `/newsroom/zones` from the newsroom plugin, only the sidebar zone, rendered `as="aside"`, carries `data-vitnode-zone="sidebar" data-vitnode-zone-allowed="core:text"`; its three unwrapped zones add no element. -The part worth saying is what did **not** change. Zones are still addressed by the ids you wrote, block instances by the ids already stored, and the allowlist by the format both the field and the zone already speak. Edit mode is a change inside `ContentZone`, not a change to the pages that use it - so there is no `EditableContentZone` to migrate to, and nothing stored before it existed needed rewriting. +## Related -The editor is not in the bundle of a page nobody is editing. It arrives on the first click of **Edit widgets**, through a dynamic import that a [boundary test](/docs/dev/widgets/visual-editor#the-lazy-loading-guarantee) keeps honest. +- [Several zones](/docs/dev/widgets/several-zones): zones around a form, unique ids and per-zone saving. +- [Restrict widgets](/docs/dev/widgets/restrict-widgets): limit what a zone accepts. +- [Editable pages](/docs/dev/widgets/editable-pages): let moderators arrange the zones in the browser. diff --git a/apps/web/content/docs/dev/widgets/custom-editor-host.mdx b/apps/web/content/docs/dev/widgets/custom-editor-host.mdx new file mode 100644 index 0000000000..a8ec3c0655 --- /dev/null +++ b/apps/web/content/docs/dev/widgets/custom-editor-host.mdx @@ -0,0 +1,127 @@ +--- +title: Custom editor host +description: Open the VitNode visual editor on widgets that live in your own storage, such as a record's blocks() field, with ContentEditorRuntime and a save adapter you write. +icon: Plug +--- + +[Editable pages](/docs/dev/widgets/editable-pages) cover most needs. Core stores the layout, checks permissions and saves. When the widgets live somewhere else, such as a content record's [`blocks()` field](/docs/dev/widgets/blocks-field), you host the editor yourself. You decide when it is open, and you write the adapter that saves. + +| Core provides | You provide | +| --- | --- | +| The editor, loaded on first use | When editing is allowed, and the button that opens it | +| The sidebar, drag and drop and properties panel | Loading the widgets in your route | +| The save payload, with each zone's baseline | A save route that checks permissions and conflicts | +| Error, conflict and unsaved-changes handling | Updating your page with what was stored | + +## Before you begin + +- A page that renders its widgets in [content zones](/docs/dev/widgets/content-zones). +- A route that stores those widgets and checks the editor's permission. The adapter only calls it; the route is what refuses a save. + +## Wrap the zones in ContentEditorRuntime + +```tsx +import { ContentEditorRuntime } from "@vitnode/core/widgets/edit"; +import { ContentZone } from "@vitnode/core/widgets/zone"; +import { useState } from "react"; + +const [editing, setEditing] = useState(false); + +<> + {canEdit ? <button onClick={() => setEditing(true)}>Edit widgets</button> : null} + + <ContentEditorRuntime adapter={adapter} enabled={editing} onExit={() => setEditing(false)}> + <ContentZone id="content" blocks={zones.content} registry={blocksRegistry} /> + </ContentEditorRuntime> +</>; +``` + +| Prop | | | +| --- | --- | --- | +| `enabled` | required | `false` renders the children only. `true` loads and opens the editor. | +| `children` | required | The page. Every `ContentZone` inside becomes editable. | +| `adapter` | optional | Where **Save** sends its payload. Without one, Save says there is nowhere to save. | +| `onExit` | optional | Called by **Finish editing**, after the unsaved-changes prompt. | + +The user menu's **Edit widgets** entry exists only for editable pages, so a custom host draws its own button. Hiding the button is only a courtesy. Your save route must check the permission again. + +## Write the adapter + +The editor never makes a request. **Save** calls your adapter with: + +```ts +import type { + VisualEditorAdapter, + VisualEditorSaveInput, + VisualEditorSaveResult, +} from "@vitnode/core/editor/adapter"; +``` + +| `VisualEditorSaveInput` | | +| --- | --- | +| `zones` | Every zone on the page, keyed by id, emptied ones included. | +| `changedZoneIds` | The zones that differ from what loaded. Write only these. | +| `expectedZones` | For each changed zone, the widgets it started from. Compare with what is stored to refuse a save that would overwrite somebody else's. | + +Resolve and the editor marks itself saved. Throw and it keeps every change and shows an error. Throw `{ refusal: "message" }` to show your own message, or `{ refusal, conflict: true }` for the editor's _Somebody else saved this page first_. + +An adapter that saves a page record's `content` zone through a route of your own: + +```tsx +import type { VisualEditorAdapter } from "@vitnode/core/editor/adapter"; + +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +import { manifest } from "@/manifest.gen"; + +const adapter: VisualEditorAdapter = { + save: async ({ changedZoneIds, expectedZones, zones }) => { + if (!changedZoneIds.includes("content")) return; + + // Your route: checks the permission, compares `expected` with what is + // stored (409 when it differs) and stores `content`. + const response = await fetcher({ + plugin: manifest.id, + method: "put", + module: "admin/pages", + path: "/{id}/content", + args: { + params: { id: page.id }, + body: { content: zones.content, expected: expectedZones.content }, + }, + }); + + if (!response.ok) { + throw { + conflict: response.status === 409, + refusal: `Saving answered ${response.status}. Nothing was stored.`, + }; + } + + const stored = await response.json(); + setZones(current => ({ ...current, content: stored.content })); + + return { zones: { content: stored.content } }; + }, +}; +``` + +- **Return what you stored.** The API may normalise what it was sent. Returning it lets the editor rebase onto the real stored version, so the next save does not send a stale copy. +- **Update your page's state** with it, so **Finish editing** shows the saved page without a reload. +- **Never fill in missing zones with defaults.** Write only `changedZoneIds`; a zone that is not in the payload stays as stored. + +## Rules for the host + +- **Load before you edit.** If reading the widgets fails, show an error and do not open the editor. An empty zone handed to the editor after a failed read is what the next **Save** writes over the real content. +- **Changes from outside.** When your page re-renders with new widgets, a zone without unsaved changes adopts them; a zone with unsaved changes keeps them until **Save** or **Discard**. +- **Context.** In edit mode, widgets render inside the editor's React tree. Context from your app root reaches them; a provider between your page and a `ContentZone` does not. +- **Widget state restarts.** Entering edit mode re-creates each widget's component, so a playing video or an open accordion inside a widget resets. The rest of the page keeps its state. + +## How it stays out of the way + +`@vitnode/core/widgets/edit` imports React and nothing else. The editor arrives with a dynamic `import()` the first time `enabled` turns `true`, and a test in `@vitnode/core` fails the build if the editor ever reaches the public bundle. The runtime mounts the editor beside your page, not around it, so opening it never remounts the page. + +## Related + +- [Visual editor](/docs/dev/widgets/visual-editor): what editors see and can do. +- [Editable pages](/docs/dev/widgets/editable-pages): `createContentEditorAdapter`, which builds this adapter for core's page layouts. diff --git a/apps/web/content/docs/dev/widgets/custom-loader.mdx b/apps/web/content/docs/dev/widgets/custom-loader.mdx new file mode 100644 index 0000000000..0f4ba04aae --- /dev/null +++ b/apps/web/content/docs/dev/widgets/custom-loader.mdx @@ -0,0 +1,184 @@ +--- +title: Custom loader +description: Load a VitNode editable page's layout in your own route loader and save it with EditablePage and createContentEditorAdapter, when PageWidgets does not fit your page. +icon: CodeXml +--- + +[`PageWidgets`](/docs/dev/widgets/editable-pages) does the loading, the permission check and the saving for you. Write them yourself when the page needs the layout in its own loader data: a route declared with `definePluginRoute`, whose loader has no query client, or a page that shows the layout's `updatedAt` ("Last rearranged…"). The newsroom plugin's `/newsroom/zones` page is built this way; the snippets below follow `plugins/newsroom/src/pages/zones-page.tsx`, trimmed. + +## Before you begin + +- A page declared with `defineEditablePage` and registered in `buildApiPlugin` with its moderator permission, as in steps 1 and 2 of [Editable pages](/docs/dev/widgets/editable-pages). Here it is `settingsPage` from `plugins/newsroom/src/content/settings-page.ts`. +- A widget registry for the zones; see [Where the registry comes from](/docs/dev/widgets/rendering#where-the-registry-comes-from). + +<Steps> + +<Step> + +### Load the layout and the permissions + +Read the page's layout and the viewer's moderator permissions in one round trip. Both routes are core's and public: + +```tsx title="plugins/newsroom/src/pages/zones-page.tsx (excerpt)" +import type { EditablePageLayoutPayload } from "@vitnode/core/content/editor"; + +import { definePluginRoute } from "@vitnode/core/routing"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { holdsPagePermission } from "@vitnode/core/tanstack/widgets"; +import { zodContentNode } from "@vitnode/core/widgets"; +import { z } from "zod"; + +import { settingsPage } from "@/content/settings-page"; +import { manifest } from "@/manifest.gen"; + +const zodLayout = z.object({ + pageId: z.string(), + updatedAt: z.string().nullable(), + zones: z.record(z.string(), z.array(zodContentNode)), +}); + +interface ZonesPageData { + canEdit: boolean; + layout: EditablePageLayoutPayload; +} + +export const route = definePluginRoute<ZonesPageData>({ + load: async () => { + const [stored, staff] = await Promise.all([ + fetcher({ + plugin: "@vitnode/core", + method: "get", + module: "pages", + path: "/layout", + args: { query: { pageId: settingsPage.id } }, + }), + fetcher({ + plugin: "@vitnode/core", + method: "get", + module: "users", + path: "/permissions", + }), + ]); + + if (!stored.ok) { + throw new Error(`Reading this page's layout answered ${stored.status}.`); + } + + return { + canEdit: staff.ok + ? holdsPagePermission(await staff.json(), { + ...settingsPage.permission, + plugin: manifest.id, + }) + : false, + layout: zodLayout.parse(await stored.json()), + }; + }, +}); +``` + +The `throw` is the important line. "Nothing is stored yet" is a `200` full of the zones' defaults with `updatedAt: null`; "the layout could not be read" must never look like that, or the next **Save** writes defaults over the real layout. `holdsPagePermission` counts a root role as yes. (The newsroom page uses a helper of its own, `mayEditSettingsPage`, for the same check.) + +</Step> + +<Step> + +### Build the save adapter + +`createContentEditorAdapter` turns the editor's **Save** into a payload holding only the changed zones and what each held before. You send it to `PUT /pages/layout` and hand back what was stored. This goes in the page component, where `loadedLayout` is the loader's `layout`: + +```tsx title="plugins/newsroom/src/pages/zones-page.tsx (excerpt)" +import { + createContentEditorAdapter, + EditablePageSaveRefused, +} from "@vitnode/core/content/editor"; +import { useMemo, useState } from "react"; + +const [layout, setLayout] = useState(loadedLayout); + +const adapter = useMemo( + () => + createContentEditorAdapter({ + page: settingsPage, + save: async payload => { + const response = await fetcher({ + plugin: "@vitnode/core", + method: "put", + module: "pages", + path: "/layout", + args: { body: payload }, + }); + + if (!response.ok) { + throw new EditablePageSaveRefused(`Saving answered ${response.status}.`, { + conflict: response.status === 409, + pageId: settingsPage.id, + }); + } + + const stored = zodLayout.parse(await response.json()); + + setLayout(current => ({ + ...stored, + zones: { ...current.zones, ...stored.zones }, + })); + + return stored; + }, + }), + [], +); +``` + +- **Throw `EditablePageSaveRefused`**, not a plain `Error`. The editor shows its message, and with `conflict: true` shows **Somebody else saved this page first** instead. Every change stays in the editor either way. (The newsroom page passes the API's own error message; `savePageLayout` from `@vitnode/core/tanstack/widgets` does the same request and refusal for you.) +- **Merge the answer.** `PUT` answers with the saved zones only, so carry the others over. The new `updatedAt` comes with it. +- **Return what was stored**, so the editor rebases onto the server's copy. + +</Step> + +<Step> + +### Wrap the zones in EditablePage + +Render `EditablePage` around the zones, with the layout from state: + +```tsx title="plugins/newsroom/src/pages/zones-page.tsx (excerpt)" +import { EditablePage } from "@vitnode/core/widgets/page"; +import { ContentZone } from "@vitnode/core/widgets/zone"; + +<EditablePage + adapter={adapter} + canEdit={canEdit} + layout={layout} + openEditing={openEditing} + page={settingsPage} +> + <ContentZone id="before-profile" registry={blocksRegistry} /> + <ProfileForm /> + <ContentZone as="aside" id="sidebar" registry={blocksRegistry} /> +</EditablePage> +``` + +| Prop | Required | Description | +| :------------ | :------- | :--------------------------------------------------------------------------------------------------------------------------- | +| `page` | yes | The definition. It resolves each zone's widgets, allowlist and limits. | +| `layout` | no | What the loader read. `null` renders every zone's declared default. | +| `canEdit` | no | `true` mounts the editor runtime and offers **Edit widgets** in the user menu. This is UI only; the save route checks again. | +| `openEditing` | no | Open in edit mode on arrival, for an `?edit=true` link. Ignored unless `canEdit`. | +| `adapter` | no | Where **Save** goes. | +| `onExit` | no | Called by **Finish editing**, after the unsaved-changes prompt. | + +Each `ContentZone` takes its widgets and allowlist from the page, so it needs only an `id`. A layout that belongs to another page id throws, so one page's widgets can never be saved onto another. + +</Step> + +</Steps> + +## Check the result + +Open `/newsroom/zones` signed in as an administrator, choose **Edit widgets**, move a widget in one zone and **Save**. In DevTools, the one `PUT /api/@vitnode/core/pages/layout` request carries only that zone in `zones` and `expectedZones`, and the "Last rearranged" line under the title updates without a reload. + +## Related + +- [Saving layouts](/docs/dev/widgets/saving-layouts): what the two routes accept, refuse and store. +- [Custom editor host](/docs/dev/widgets/custom-editor-host): widgets stored somewhere other than core's page layouts. diff --git a/apps/web/content/docs/dev/widgets/defining-a-block.mdx b/apps/web/content/docs/dev/widgets/defining-a-block.mdx index fc4935275e..937ef7ca92 100644 --- a/apps/web/content/docs/dev/widgets/defining-a-block.mdx +++ b/apps/web/content/docs/dev/widgets/defining-a-block.mdx @@ -1,21 +1,25 @@ --- -title: Defining a Widget +title: Define a widget description: defineWidget takes an id, Content Engine fields and one React component, and infers the widget's data type from the fields. icon: SquarePen --- +A widget is one `defineWidget` call: a bare id, the fields an editor fills in and the React component that renders them. This page covers each part, the fields a widget may hold and how ids are namespaced. For the whole path to a rendered page, follow [First widget](/docs/dev/widgets/end-to-end). + +`defineWidget` and `defineBlock` are the same function, exported from `@vitnode/core/widgets` under both names; the types have both names too (`WidgetData` is `BlockData`). + ## One call -```tsx title="plugins/example/src/widgets/callout.tsx" +```tsx title="plugins/newsroom/src/widgets/callout.tsx (excerpt)" import type { WidgetComponentProps, WidgetData } from '@vitnode/core/widgets' +import { field } from '@vitnode/core/content/fields' import { defineWidget } from '@vitnode/core/widgets' -import { field } from '@vitnode/core/content' import { InfoIcon } from 'lucide-react' const calloutFields = { - body: field.textarea({ required: true, minLength: 1, maxLength: 600 }), - title: field.text({ required: true, minLength: 1, maxLength: 120 }), + body: field.textarea({ maxLength: 600, minLength: 1, required: true }), + title: field.text({ maxLength: 120, minLength: 1, required: true }), tone: field.enum({ defaultValue: 'info', values: ['info', 'success', 'warning'], @@ -24,10 +28,22 @@ const calloutFields = { type CalloutData = WidgetData<typeof calloutFields> +const tones: Record<string, string> = { + info: 'border-primary/40 bg-primary/5', + success: 'border-success/40 bg-success/5', + warning: 'border-destructive/40 bg-destructive/5', +} + const Callout = ({ data }: WidgetComponentProps<CalloutData>) => ( - <aside> - <h2>{data.title}</h2> - <p>{data.body}</p> + <aside + className={`flex flex-col gap-2 rounded-lg border p-4 md:p-6 ${tones[data.tone ?? 'info']}`} + > + <h2 className="text-base font-semibold text-balance md:text-lg"> + {data.title} + </h2> + <p className="text-sm leading-relaxed text-pretty md:text-base"> + {data.body} + </p> </aside> ) @@ -43,6 +59,27 @@ export const calloutWidget = defineWidget({ `WidgetData<typeof calloutFields>` is the inferred data type: `title` and `body` are `string`, `tone` is `"info" | "success" | "warning" | undefined` because it has a default. Nothing is written twice. +## Register it + +A definition does nothing until the plugin exports it. List it in `src/widgets.tsx`, export that object as **`blocks`** (the name VitNode's Vite plugin imports), and pass the same object to `buildApiPlugin({ blocks })` so the API can validate writes: + +```tsx title="plugins/newsroom/src/widgets.tsx" +import type { WidgetPluginSource } from '@vitnode/core/widgets' + +import { manifest } from '@/manifest.gen' + +import { calloutWidget } from './widgets/callout' + +export const widgets = { + pluginId: manifest.id, + blocks: [calloutWidget], +} satisfies WidgetPluginSource + +export const blocks = widgets +``` + +[First widget](/docs/dev/widgets/end-to-end#give-the-api-the-same-list) shows the `buildApiPlugin` side. A widget missing from either place does not render in the app, or is refused on every write. + ## Give it an icon `icon` is the picture people see next to the widget's name in the [Visual Editor](/docs/dev/widgets/visual-editor): on its card in the catalogue, on the card that follows the pointer while it is dragged, and at the top of its properties panel. Pass the icon **component**, not an element - `icon: InfoIcon`, not `icon: <InfoIcon />` - so the editor can size and colour it to match everything around it. @@ -95,23 +132,23 @@ export const featuresWidget = defineWidget({ }) ``` -The chosen variant is stored **beside** the instance's data, never inside it, and the editor grows a picker for it with no further work. See [Block Variants](/docs/dev/widgets/block-variants) for the resolution rules and what happens to a stored variant a block stops offering. +The chosen variant is stored **beside** the instance's data, never inside it, and the editor grows a picker for it with no further work. See [Variants](/docs/dev/widgets/block-variants) for the resolution rules and what happens to a stored variant a widget stops offering. ## Ids are namespaced for you Write `id: "callout"`. The registry prefixes the namespace of the plugin that registered it, derived from the **last segment** of the package name: -| Plugin | Block id | Stored as | +| Plugin | Widget id | Stored as | | :------------------- | :------------- | :--------------------- | | `@vitnode/core` | `hero` | `core:hero` | | `@vitnode/blog` | `latest-posts` | `blog:latest-posts` | | `@acme/page-builder` | `pricing` | `page-builder:pricing` | -Writing the namespace yourself is an error - a block would otherwise be addressable under two names, and content written under the wrong one would be unrenderable. +Writing the namespace yourself is an error. A widget would otherwise be addressable under two names, and content written under the wrong one would be unrenderable. -Two packages whose names end in the same segment (`@vitnode/blog` and `@acme/blog`) collide. The registry refuses to build and names both; set `namespace` on one of their `blocks` modules to settle it. +Two packages whose names end in the same segment (`@vitnode/blog` and `@acme/blog`) collide. The registry refuses to build and names both; set `namespace` on one plugin's widgets object (`{ pluginId, namespace: 'acme-blog', blocks: [...] }`) to settle it. -## Which fields a block may hold +## Which fields a widget may hold | Kind | Supported | Why | | :------------------------------------------------- | :-------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -121,16 +158,17 @@ Two packages whose names end in the same segment (`@vitnode/blog` and `@acme/blo | `field.group()` | ✅ | Nested objects are ordinary JSON. | | `field.file()`, `field.relation()`, `field.user()` | Not yet | A reference is a row identifier the owning record has to pin against deletion, and a value inside a JSON document has nowhere to put a foreign key. | | `field.repeatable()` | Not yet | Its rows are rows on a generated child table, identified by a database id a JSON document does not have. | -| `field.slug()` | No | A slug is a record's address, and a block is not addressable on its own. | -| `field.blocks()` | Not yet | Nested blocks need depth limits, their own allowlist and cycle detection first. | +| `field.richText()` | Not yet | Not one of the supported kinds yet. | +| `field.slug()` | No | A slug is a record's address, and a widget is not addressable on its own. | +| `field.container()` | No | A container is where a whole record is filed. A widget is part of a record. | +| `field.blocks()` | Not yet | Nested widgets need depth limits, their own allowlist and cycle detection first. | -Every one of those rules lives in one table, `blockFieldKindRefusal`, and the error a refused field produces quotes the reason from it. - -<Callout title="Media and relations are a limitation of today, not of the model"> - The serialized shape - `{ id, type, data }`, with `data` holding this field map's values - does not change when these land: a `file` field would store a `core_files.id` exactly as a file *column* does. What is missing is the lifecycle around it. A content column pins its file with `ON DELETE RESTRICT`, which is what makes the Files screen answer 409 instead of leaving a published page pointing at bytes that are gone; a value inside JSONB has no foreign key to carry that. - -The intended solution is to extract a widget's references out of its data on write - the field map already says which leaves are references - and pin them in a reference table the same way, so deletion, cleanup and `onDelete` keep working. Until that exists, storing a bare id in JSON would be a foreign key with none of the guarantees of one, which is worse than not supporting it. Put the image on the record for now and let the widget choose how to present it. +`defineWidget` throws for a refused field, quoting the reason from `blockFieldKindRefusal`. A widget also needs at least one field. +<Callout title="Need an image in a widget?"> + Put the image on the record for now and let the widget choose how to present + it. A file id inside widget JSON would have no foreign key protecting it from + deletion, which is why `file`, `relation` and `user` fields wait. </Callout> ## Localization @@ -140,9 +178,11 @@ A widget's **fields** are never `localized: true`. There is no translation row f The **zone** is what translates: ```ts -content: field.widgets({ localized: true }) +content: field.blocks({ localized: true }) ``` +`field.widgets()` is an alias of `field.blocks()`; both build the same field. + This is document-level localization, not translated field values: each language gets its own widgets, in its own order, and the two need not correspond at all. ```text @@ -150,9 +190,7 @@ en: Hero → Text → CTA pl: Hero → CTA → Gallery ``` -See [The blocks() field](/docs/dev/widgets/blocks-field#localization). - -Editing a widget's text in the [properties panel](/docs/dev/widgets/visual-editor#the-properties-panel) changes nothing about this. What somebody types goes into the `data` of the snapshot the page mounted for the locale it is showing, and it is saved by whoever already owned that locale's zone. +See [Blocks field](/docs/dev/widgets/blocks-field#localization). Text typed in the [visual editor](/docs/dev/widgets/visual-editor#edit-a-widget) goes into the zone of the language the page is showing. ## Validating data by hand diff --git a/apps/web/content/docs/dev/widgets/editable-pages-saved.webp b/apps/web/content/docs/dev/widgets/editable-pages-saved.webp new file mode 100644 index 0000000000000000000000000000000000000000..ca6e07f6e70730c06caa9cbdad39079e0d0e129b GIT binary patch literal 113270 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⪻rPE}d5RFr7<pW?jJ? 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 BtbPCh literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/widgets/editable-pages.mdx b/apps/web/content/docs/dev/widgets/editable-pages.mdx index 23a6f17264..110a582115 100644 --- a/apps/web/content/docs/dev/widgets/editable-pages.mdx +++ b/apps/web/content/docs/dev/widgets/editable-pages.mdx @@ -1,6 +1,6 @@ --- -title: Editable Pages -description: Declare a page's zones once, and the people who run the site rearrange them on the page itself - Edit widgets from the user menu, drag, Save, done. No admin screen, no zone-to-column mapping, no hand-written save route. +title: Editable pages +description: Make a VitNode page editable in the browser. Declare its widget zones once with defineEditablePage, register it with a moderator permission, and render it with PageWidgets so moderators get Edit widgets in the user menu. icon: PanelsTopLeft implementation: objective: Let moderators place and arrange widgets on an existing public page. @@ -11,443 +11,206 @@ implementation: - Who may arrange the page? Offer existing moderator permissions in the plugin, or a new one. - Should an area show default widgets before anyone edits it? constraints: - - Declare the page with `defineEditablePage` using a stable, hand-written id, and register it in `editablePages` of `buildApiPlugin()` together with its moderator permission. - - Render `EditablePage` around one `ContentZone` per area, and save through `createContentEditorAdapter`. Write no save route of your own. - - If reading the saved layout fails, the loader throws instead of rendering the defaults. + - Declare the page with `defineEditablePage` using a stable, hand-written id, and set `permission.plugin` to the plugin's manifest id. + - Add `editablePages` and `permissionStaff.moderator` to the existing `buildApiPlugin()` call, keeping its modules and any existing `permissionStaff` keys, with labels in the plugin's `src/locales/en.json`. + - Warm the layout with `loadPageWidgets(context.queryClient, page)` in a `defineRoute` loader, and wrap the zones in `PageWidgets`. Write no save route, adapter or permission check of your own. + - If a zone allows the plugin's own widgets, render it as `ContentZone` with a registry from `createBlockRegistry` instead of `PageWidgetsZone`. related: - - title: Content Zones + - title: Content zones href: /docs/dev/widgets/content-zones - - title: Defining a widget - href: /docs/dev/widgets/defining-a-block - - title: Visual edit mode + - title: Restrict widgets + href: /docs/dev/widgets/restrict-widgets + - title: Visual editor href: /docs/dev/widgets/visual-editor --- -A settings page is edited on the settings page. A forum index is edited on the forum index. Nobody opens an admin screen to arrange a page they cannot see. +import { ImgDocs } from "@/components/fumadocs/img"; +import savedLayout from "./editable-pages-saved.webp"; -```text -the real page - ↓ Edit widgets ← in the user menu, only if you hold the page's permission -the same page, editable - ↓ Save - ↓ Finish editing -the real page again -``` - -That is the whole feature. What you write to get it is one page declaration, one line of registration, and `<EditablePage>` around the zones you already had. **The button is not yours to draw** - it lives in the user menu in the site header, on every page, and appears there by itself the moment an editable page somebody may edit is on screen. - -{/* Image prompt: A clean left-to-right technical diagram on a dark background. Three labelled boxes joined by arrows. First: "defineEditablePage" showing a small list of zone names (before-profile, sidebar, after-profile) each with a tiny allowlist pill beside it. Second: a miniature browser window titled "/example/zones" with two dashed zone outlines around a solid form, and a small outlined button in the corner reading "Edit widgets". Third: a database icon labelled "core_page_layouts" with one row shape beside it, split into a "pageId" cell and a wider "zones JSONB" cell holding two small zone chips. A thin annotation under the middle box reads "one declaration, three readers". Blue accent on the arrows, neutral grey boxes, 1600x600. */} - -## The whole thing, in three files - -### 1. Declare the page - -```ts title="plugins/example/src/content/settings-page.ts" -import { defineEditablePage } from '@vitnode/core/content/editor' - -import { PAGE_BLOCKS_ALLOWED, PAGE_SIDEBAR_BLOCKS_ALLOWED } from './page-blocks' - -export const settingsPage = defineEditablePage({ - id: 'example:settings', - - permission: { module: 'widgets', permission: 'can_edit' }, - - zones: { - 'before-profile': { - allowed: PAGE_BLOCKS_ALLOWED, - max: 20, - default: [ - { - id: '01JEXAMPLEZONESBEFORE00001', - type: 'example:callout', - data: {/* … */}, - }, - ], - }, - 'after-profile': { allowed: PAGE_BLOCKS_ALLOWED, max: 20 }, - sidebar: { allowed: PAGE_SIDEBAR_BLOCKS_ALLOWED, max: 20 }, - 'before-footer': { allowed: PAGE_BLOCKS_ALLOWED, max: 20 }, - }, -}) -``` +An editable page is an ordinary page whose [content zones](/docs/dev/widgets/content-zones) moderators arrange on the page itself: **Edit widgets** in the user menu, drag, **Save**. You declare the zones once; core stores the layout, checks the permission on every save and draws the menu entry. This guide makes the `site-notes` plugin's notes page editable, with a zone above and below the list of notes. -| | | | -| :----------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------- | -| `id` | required | The page's stable identity, `plugin:page`. The stored layout is keyed by it, so it is written once by hand and never generated. | -| `permission` | required | The **moderator** permission somebody needs before the editor will offer to open. `plugin` defaults to whoever registered the page. | -| `zones` | required | One entry per place on the page blocks may go. At least one. | +| Core provides | You write | +| :-------------------------------------------------------------------- | :---------------------------------------------- | +| The editor, loaded on the first click, and the **Edit widgets** entry | The page declaration: id, zones, permission | +| `GET` and `PUT /pages/layout`, and the `core_page_layouts` table | Two lines of registration in `buildApiPlugin` | +| The permission check on every save, and conflict detection | One line in the route loader, and `PageWidgets` | -And per zone: +## Before you begin -| | | -| :------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `allowed` | The block allowlist, or `"*"`. Declared **here**, so the page never repeats it. | -| `max` / `min` | How many **blocks** the zone accepts. An area counts nothing itself; the blocks inside it each count one. Leaving `max` out is not "unlimited" - see below. | -| `default` | The layout the zone ships with, as real stored nodes. | +- A plugin page to make editable. This guide uses `/site-notes/notes` from [Plugin page](/docs/dev/plugins/page). +- An account with full access, such as the first account, to try the editor. Anyone else needs the moderator permission this guide adds. -#### Three limits, and they count different things +<Steps> -Leave `max` out and the zone still has one: **200**, the `CONTENT_BLOCKS_DEFAULT_MAX` a [`blocks()` field](/docs/dev/widgets/blocks-field) already defaults to, because a zone and a field are stored and validated by the same code. Omitted means "the usual ceiling", never "as many as you like". +<Step> -| Limit | Value | Counts | -| :---------------------------- | :--------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| A zone's `max` / `min` | `200` when `max` is omitted, `0` when `min` is | **Block instances.** A block inside an [area](/docs/dev/widgets/layout-areas) counts one; the area holding it counts nothing, so an empty area counts as nothing at all. | -| `CONTENT_BLOCKS_ABSOLUTE_MAX` | `1000` | **Nodes in the zone's root list** - blocks and areas alike, children not included. It is the ceiling the stored column can be read back through, so a zone's own `max` may lower it and nothing may raise it. | -| `AREA_CHILDREN_DEFAULT_MAX` | `50` | **One area's children.** A third limit, checked per area, unrelated to the two above. | +### Declare the page -All three are exported from `@vitnode/core/widgets`, and a zone that declares a `min` above its effective `max` is refused where it is declared rather than the first time somebody saves. +Create `src/editable-pages/notes-page.ts`. It names the page, its zones and who may arrange them: -Zone ids are **page-local**: `"sidebar"`, not `"settings:sidebar"`. The page id already namespaces them - it is what the stored layout is keyed by, and the zone ids are the keys inside it. +```ts title="plugins/site-notes/src/editable-pages/notes-page.ts" +import { defineEditablePage } from "@vitnode/core/content/editor"; -<Callout title="The defaults are content, not a placeholder"> - A zone nobody has customised renders its `default`, and the read that serves - it says so with `updatedAt: null`. That is the layout you shipped - it is what - a visitor sees before anybody has touched the page, and what a future *reset* - will restore to. So it lives in code rather than being seeded into the - database, and the first **Save** is entitled to write over it. -</Callout> +import { manifest } from "@/manifest.gen"; -The definition module is a plain value with **no third-party import anywhere in its graph**, which is what lets the API and a public page import the same file. Ask for a zone it does not declare - on the page, in a save, anywhere - and it throws with the zone ids it does declare. +export const notesPage = defineEditablePage({ + id: "site-notes:notes", -### 2. Register it - -```ts title="plugins/example/src/config.api.ts" -buildApiPlugin({ - manifest, - // [!code ++:4] - editablePages: [settingsPage], - permissionStaff: { - moderator: { widgets: ['can_edit'] }, + permission: { + plugin: manifest.id, + module: "widgets", + permission: "can_edit", }, - modules: [adminModule /* … */], -}) -``` -Two lines, and both are needed for different reasons. `editablePages` is what makes the page id resolvable on the server: without it, a read is a `404` and a save is a `400`. `permissionStaff.moderator` is what puts **Widgets → can edit** in front of somebody granting it - a permission nobody can grant is a permission nobody holds. - -Registering one page id twice, or two plugins claiming the same id, is a startup error rather than a race about which loaded last. So is declaring a page whose permission is missing from that plugin's `permissionStaff.moderator` catalogue: the server would boot, the page would read fine, and nobody outside a root role could ever edit it - which is a thing you want to hear at boot rather than from somebody who cannot find the button. - -### 3. Render it - -```tsx title="plugins/example/src/pages/zones-page.tsx" -// [!code ++:4] -<EditablePage - adapter={adapter} - canEdit={canEdit} - layout={layout} - openEditing={search.edit === true} - page={settingsPage} -> - <ContentZone id="before-profile" registry={blocksRegistry} /> - <ProfileForm /> - <ContentZone - as="aside" - className="w-full lg:w-64" - id="sidebar" - registry={blocksRegistry} - /> -</EditablePage> + zones: { + "before-notes": { allowed: ["core:*"], max: 10 }, + "after-notes": { allowed: ["core:*"], max: 10 }, + }, +}); ``` -`<ContentZone id="sidebar" />`. That is the entire zone. No `blocks`, because the provider holds the layout. No `allowedBlocks`, because the provider holds the allowlist. On a page that declared its zones there is nothing left to pass. - -#### What a call site may still say - -You can pass those props anyway, and they still do something - just not _anything_. The page declaration is what the server checks a save against, so a zone on that page can be narrowed at the call site and never widened. - -| At the call site | | -| :--------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `blocks` | **Overrides the source.** For a zone whose content genuinely comes from somewhere else, the array you pass is what renders. | -| `allowedBlocks` | **Only narrows.** It is intersected with the page's allowlist, so `"*"` here cannot open a zone the page restricted, and asking for blocks the page does not allow is a developer error rather than a quietly wider zone. | -| `min` / `max` | **Only tighten.** The higher `min` and the lower `max` win. Ask for a combination no list of blocks could satisfy - a `min` above the `max` - and it throws where you wrote it. | +| Option | Required | Description | +| :----------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | yes | The page's permanent identity, `plugin:page`. The stored layout is keyed by it, so write it by hand and never change it. | +| `permission` | yes | The **moderator** permission that unlocks editing. Set `plugin`. The server falls back to the registering plugin, but the browser cannot, and `PageWidgets` never offers editing without it. | +| `zones` | yes | One entry per zone, keyed by a page-local zone id. At least one. | -The page stays the ceiling and the floor. That is what makes "the zone as declared" the one thing both the editor and the save route have to agree on, and it is why an intersection is refused rather than silently emptied: a zone allowing nothing at all is a page nobody could edit. +Each zone takes `allowed` (the [allowlist](/docs/dev/widgets/restrict-widgets), default `"*"`), `max` (default `200`, counting widgets, not areas), `min`, and `default`, the widgets the zone shows until somebody saves it, written as real stored nodes like `{ id, type, data }`. Without `default`, a zone starts empty and renders nothing. -A **standalone** `<ContentZone>` - one no editable page declares - is unaffected. There is nothing to intersect with, so its own `allowedBlocks`, `min` and `max` are simply its own. +The file imports nothing heavy, so the API and the page can both import it. -| Prop | | | -| :------------ | :------- | :--------------------------------------------------------------------------------------------------- | -| `page` | required | The definition. It is what resolves each zone's blocks and allowlist. | -| `layout` | optional | What the loader read. `null` renders every zone's shipped default. | -| `canEdit` | optional | `true` mounts the editor runtime and offers **Edit widgets** in the user menu. `false` does neither. | -| `openEditing` | optional | Open in edit mode on arrival - what `?edit=true` asks for. Ignored unless `canEdit`. | -| `adapter` | optional | Where **Save** goes. `createContentEditorAdapter` builds one. | -| `onExit` | optional | Called by **Finish editing**, after the unsaved-changes prompt. Edit mode ends either way. | +</Step> -Edit mode itself is **not a prop**. The page that is editable and the action that opens it are in two different parts of the document - one in `<main>`, the other in the header - so neither may own the state between them. `<EditablePage>` publishes what it is and whether this visitor may edit it; the site shell holds "is somebody editing", answers the user menu with it, and reserves the sidebar's room from the whole page while it is true. Walk away from the page and the offer leaves with it, so the entry is never there for a page that has no zones. +<Step> -`EditablePage` also adopts the canonical **zones** a save comes back with, so the editor rebases onto what the server actually stored. View mode shows the stored result the moment you press **Finish editing**, with no reload and no second request. The metadata around those zones - `updatedAt` and friends - belongs to the page that owns the layout, not to the editor: hold the payload the save answered with in your own state, and a "Last rearranged 2 minutes ago" line moves with it instead of sitting on the timestamp the loader happened to read. Hand `EditablePage` a layout belonging to a different page id and it throws, because rendering one page's blocks under another page's zones is how a save writes them onto the wrong page. +### Register it -## Loading it +In `src/config.api.ts`, add two keys to the existing `buildApiPlugin` call: the page in `editablePages`, and its permission under `permissionStaff.moderator`. After [Plugin page](/docs/dev/plugins/page) the call looks like this; keep your `modules` as they are: -```ts title="plugins/example/src/pages/zones-page.tsx" -const [stored, staff] = await Promise.all([ - fetcher({ - plugin: '@vitnode/core', - method: 'get', - module: 'pages', - path: '/layout', - args: { query: { pageId: settingsPage.id } }, - }), - fetcher({ - plugin: '@vitnode/core', - method: 'get', - module: 'users', - path: '/permissions', - }), -]) +```ts title="plugins/site-notes/src/config.api.ts (excerpt)" +import { notesPage } from "./editable-pages/notes-page"; // [!code ++] -if (!stored.ok) { - throw new Error(`Reading this page's layout answered ${stored.status}…`) -} -``` - -Two public reads, one round trip. The first is the layout; the second is who is looking. - -The `if` is the important line. "Nothing is stored" and "I could not read what is stored" are two different answers and must never look alike: the first is a `200` full of shipped defaults, the second is a throw. Render something plausible in place of a failed read and the next **Save** writes it over whatever the page really held. - -## Saving it - -```tsx -const adapter = useMemo( - () => - createContentEditorAdapter({ - page: settingsPage, - save: async (payload) => { - const response = await fetcher({ - plugin: '@vitnode/core', - method: 'put', - module: 'pages', - path: '/layout', - args: { body: payload }, - }) - - if (!response.ok) throw new Error(`Saving answered ${response.status}.`) - - return zodLayout.parse(await response.json()) - }, - }), - [], -) -``` - -The adapter turns the editor's snapshot into a payload carrying **only the zones that changed**, refuses up front to send a zone the page does not declare, and hands the server's canonical answer back so the editor rebases onto what was _stored_ rather than onto what it sent. - -```ts -interface EditablePageSavePayload { - pageId: string - zones: Record<string, ContentNode[]> // what you want stored - expectedZones: Record<string, ContentNode[]> // what you were editing -} +export const siteNotesApiPlugin = () => + buildApiPlugin({ + manifest, + modules: [helloModule, notesModule], + editablePages: [notesPage], // [!code ++] + // [!code ++:3] + permissionStaff: { + moderator: { widgets: ["can_edit"] }, + }, + }); ``` -`expectedZones` is the second half of every save: for each zone being written, the value the editor started from. The server compares it with what is actually stored before touching anything, which is what turns "last save wins" into "the save that knew what it was replacing wins". The adapter fills it in from the editor's own baseline - you do not assemble it. - -<Callout title="Two files, and neither of them the editor"> - `createContentEditorAdapter` produces a `VisualEditorAdapter`, but it needs - nothing from the editor to do it. So it ships beside the page definition, its - whole graph is two modules with no third-party package in it, and a plain - `import` keeps the example plugin's boundary test green: nothing under core's - `src/editor/` is in the page's eager graph. The `@vitnode/core/editor/adapter` - barrel, by contrast, is thirty-three modules and Zod. -</Callout> +If your call already has `permissionStaff`, for example `admin: { notes: ["can_create"] }` from the [Permissions](/docs/dev/working-with-users/staff-permissions) lesson, add the `moderator` key inside it instead of writing a second `permissionStaff`. -## The two routes +Then label the permission in `src/locales/en.json`. Add the two permission keys at the root, next to the `site-notes` object, and a `title` inside that object if it has none yet; the AdminCP shows it as the plugin's name. Keep the keys you already have: -They are core's, not your plugin's, and they are addressed by page id. - -```http -GET /api/vitnode/core/pages/layout?pageId=example:settings public -PUT /api/vitnode/core/pages/layout that page's permission -``` - -```ts -interface EditablePageLayoutPayload { - pageId: string - updatedAt: string | null // null: nothing stored, these are the defaults - zones: Record<string, ContentNode[]> +```json title="plugins/site-notes/src/locales/en.json (excerpt)" +{ + "site-notes": { + "title": "Site Notes" + }, + "site-notes:widgets": "Widgets", + "site-notes:widgets:can_edit": "Edit page widgets" } ``` -`GET` is public, because a visitor renders the page from it. It answers with the **effective** layout - the shipped defaults with whatever has been customised laid over them - so the page renders what it is handed and resolves nothing itself. The defaults it sends have been through the same block schemas a saved zone goes through, so a zone still on its default arrives in the same shape as one somebody has edited, fields the block fills in and all. Hand `EditablePage` the layout from this route and it never has to guess: the `default` you declared is a fallback for a zone the server did not send, and it has not been through those schemas. A page id nobody registered is a `404`; a registered page nobody has rearranged is a `200` holding the declared defaults and `updatedAt: null`. - -`PUT` takes `{ pageId, zones, expectedZones }` with only the zones that changed, and answers with the canonical stored value of **those zones only** - the same `EditablePageLayoutPayload`, `updatedAt` and all, which is what the page adopts so its own layout metadata stays current. The mapping from a zone id to somewhere to store it comes from the registered page, never from the body, so there is no shape of request that reaches a zone the page did not declare. A body that writes a zone without a baseline for it is a `400`: without one the server cannot tell an edit from an overwrite. - -After validation the write is one read, one comparison, one merge and one upsert, whatever number of zones the save named. The block validator is the engine's own; the event - `core.page-layout.updated`, carrying the page id and the zones that changed - is emitted after the commit rather than inside it; and a save that changed nothing stores nothing, bumps no `updatedAt` and emits nothing, while still answering canonically. - -### Two moderators, one page - -The comparison is **per zone**, inside the same transaction that writes, which is what lets an ordinary afternoon work out: - -| | | -| :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Two people, **different zones** | Both saves land. One writes the sidebar, the other the footer, and each leaves the other's zone exactly as it found it. Zones merge because a save only ever writes what it names. | -| Two people, **the same zone** | The second one gets a `409` and **nothing is written**. The zone moved after their editor read it, so storing their copy would delete a change they never saw. | - -A `409` is not a lost afternoon: the refusal says which zones moved, nothing that was arranged is thrown away, and reloading the page picks up what is really there to redo the change on top of it. Nothing polls and nothing locks - the baseline travels with the save, so the only thing that can ever be overwritten is a zone whose stored value is still the one being edited. - -## "Can I edit this?" - -The page asks the existing public route: +Without `editablePages`, reading the layout answers `404`. A page whose permission is missing from `permissionStaff.moderator`, or a page id registered twice, stops the API at startup with a message naming the fix. -```http -GET /api/vitnode/core/users/permissions → { root, permissions[] } -``` - -`root` is a role that holds everything and lists nothing, so it counts as yes on its own. Otherwise the page looks for its own `{ plugin, module, permission }` in the list. +</Step> -<Callout title="Why a moderator permission and not an admin one" type="warn"> - An admin-type check reads `c.get("admin")`, and only `globalAdminMiddleware` - populates it. On a public page that middleware never ran, so - `checkStaffPermission(c, { type: "admin", … })` does not merely answer *no* - it - answers no **structurally**, for everybody, including the person who genuinely - administers the site. A moderator permission reads `c.get("user")`, which a public - request does have. That is why `permission` on a page definition is a - `permissionStaff.moderator` entry, and why `PUT /pages/layout` asserts it as one. -</Callout> +<Step> -`?edit=true` may **request** edit mode - it is what a link hands you, and what `openEditing` passes on - and it never authorizes it. The page only opens in edit mode when the permission agrees, the **Edit widgets** entry is absent from the user menu otherwise, and the save asserts the permission again server-side whatever the URL said. +### Load the layout in the route -## Where a layout is stored +The loader warms the page's layout and the viewer's permissions, so the zones render on the server. `loadPageWidgets` needs the query client, which `defineRoute` from `@vitnode/core/tanstack/plugin-routes` hands the loader. In `src/pages/notes-page.tsx`, replace `definePluginRoute`: -In core, in one ordinary table: +```tsx title="plugins/site-notes/src/pages/notes-page.tsx (excerpt)" +import { defineRoute } from "@vitnode/core/tanstack/plugin-routes"; // [!code ++] +import { loadPageWidgets } from "@vitnode/core/tanstack/widgets"; // [!code ++] -```ts -core_page_layouts - pageId varchar primary key - zones jsonb not null default '{}' - createdAt timestamp - updatedAt timestamp -``` +import { notesPage } from "@/editable-pages/notes-page"; // [!code ++] -**One row per page, holding overrides only.** `zones` is a `Record<zoneId, ContentNode[]>` carrying just the zones somebody has actually rearranged. What the page renders is the two halves put together: +export const route = defineRoute<NotesPageData>({ + load: async ({ context }) => { + const [notes] = await Promise.all([ + loadNotes(), + loadPageWidgets(context.queryClient, notesPage), // [!code ++] + ]); -```ts -effective[zoneId] = Object.hasOwn(stored.zones, zoneId) - ? stored.zones[zoneId] - : zone.default + return notes; + }, +}); ``` -Defaults live in code; the database stores the custom ones. A page nobody has touched has **no row at all** - which is exactly what `updatedAt: null` means. Save a zone back to precisely what it ships with and its key is dropped again; empty the object and the row goes with it. A reset is therefore a delete rather than a re-seed, and the shipped layout is written down in exactly one place. - -A stored zone the page no longer declares is **ignored for rendering but not deleted**. Only declared zones are read, so nothing renders it, and no ordinary save touches it: take a zone off a page for one release, put it back in the next, and what was stored for it is still there. - -None of this is a Content Engine content type. No publication, no search indexing, no generated CRUD, no AdminCP screens. Layout persistence is **internal infrastructure** - you do not browse it, any more than you browse the sessions table. - -<Callout title="There is no AdminCP → Layouts screen in V1, on purpose"> - Central layout administration - listing the pages somebody has customised, - resetting one to its shipped defaults, exporting a layout as JSON, copying one - page's layout onto another - is deliberately left to a possible **V2**. Each - of them is a query on one table keyed by `pageId`: list is `select "pageId"`, - reset is a `delete`, export is a single row. The shape makes them easy later; - none of them is built now, and none of them is needed to arrange a page. -</Callout> +`loadPageWidgets` never throws. If the layout cannot be read, the page still renders, without its zones and without **Edit widgets**, so nobody can save empty zones over the real ones. -Every submitted zone is re-validated against that zone's own `allowed`, `min` and `max`, read off the **registered page** rather than off the request, before anything is stored. +</Step> -## When a save is refused +<Step> -Every refusal is named, and none of them falls back to a default or silently drops content. +### Wrap the zones in PageWidgets -| | | -| :--------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | -| A page id nobody registered | `400`, saying there is nothing this save could be writing. | -| A zone the page does not declare | `400`, listing the zones it does. | -| No zones at all | `400`. A save names what it changed, and this one named none. | -| A zone written without a baseline | `400`. Every zone in `zones` needs its counterpart in `expectedZones`. | -| A zone somebody else changed first | `409`, naming the zones that moved. Nothing is written - not even the zones that would have been fine. | -| A block the zone does not allow | `400`, from the zone's own `allowed` - nested inside an area too. | -| Too many or too few blocks | `400`, from the zone's own `max` and `min`, counting an area's children. | -| The permission is not held | `403`. | -| The stored layout cannot be read | `500`. A read that fails is never answered with defaults: the next **Save** would write them over whatever is really there. | +In the same file, wrap the page in `PageWidgets` and put a `PageWidgetsZone` wherever a declared zone goes: -The client has its own guard before any of this: a zone holding a value the editor cannot read keeps **Save** disabled until somebody removes it deliberately. See [unreadable content](/docs/dev/widgets/visual-editor#content-the-editor-cannot-read). +```tsx title="plugins/site-notes/src/pages/notes-page.tsx (excerpt)" +import { PageWidgets, PageWidgetsZone } from "@vitnode/core/tanstack/widgets"; // [!code ++] -## What this costs a public page +const NotesPage = ({ loaderData: notes }: PluginRoutePageProps<NotesPageData>) => { + const t = useTranslations("site-notes.notes"); -The page definition is a module a public page imports, so it was measured rather than asserted. Every number is the import graph of a real file in this repository. + return ( + <PageWidgets page={notesPage}> + <main className="container mx-auto flex max-w-2xl flex-col gap-6 p-4"> + <h1 className="text-2xl font-semibold tracking-tight text-balance">{t("title")}</h1> -| Entry | Source files | Third-party | -| :-------------------------------------------- | -----------: | :---------- | -| `@vitnode/core/content/editor` | 12 | none | -| `createContentEditorAdapter` alone | 2 | none | -| `EditablePage` (`blocks/page.tsx`), eagerly | 15 | `react` | -| `ContentZone` (`blocks/zone.tsx`) | 19 | `react` | -| **The example's page definition, end to end** | **15** | **none** | -| `@vitnode/core/content/define` | 34 | `zod` | -| `@vitnode/core/content` (the barrel) | 54 | `zod` | -| `@vitnode/core/editor/adapter` (the barrel) | 33 | `zod` | + <PageWidgetsZone id="before-notes" /> -A module whose whole graph has no external specifier cannot add a package to anything that imports it. That is the entire argument for keeping the declaration off the content type: a page gets its zone ids, allowlists and defaults without the schema builder that turns field descriptors into Zod. + {/* the list of notes, unchanged */} -The same rule applies to blocks. `plugins/example/src/blocks/callout.tsx` used to import `field` from `@vitnode/core/content`; switching two import paths to `@vitnode/core/content/fields` took the playground's eager graph from **132 modules to 107**, and the Content Engine modules it reaches from **41 to 16**. The rendered page was byte-for-byte identical. - -```ts -import { field } from '@vitnode/core/content' // [!code --] -import { field } from '@vitnode/core/content/fields' // [!code ++] + <PageWidgetsZone id="after-notes" /> + </main> + </PageWidgets> + ); +}; ``` -Two boundary tests keep it that way. Core's own names every module `@vitnode/core/content/editor` reaches and asserts it reaches no third-party one; the example plugin's walks the **real page** and asserts nothing under core's `src/editor/` - and no drag-and-drop, command palette or database package - is in its eager graph, while following its dynamic imports does reach `@dnd-kit/core`, so the guarantee is not vacuous. - -## `<PageWidgets>`: the loading, the saving and the permission, once +`PageWidgets` reads the layout and the permissions the loader warmed, builds the save adapter and keeps the cache up to date after each save. Pass `openEditing` to honour an `?edit=true` link; it only opens the editor for somebody who already may edit. -Everything above is the contract. You rarely write it, because core owns the two routes a layout is read and written through - so core also owns talking to them. +`PageWidgetsZone` renders a [`ContentZone`](/docs/dev/widgets/content-zones) with a `flex flex-col gap-6` wrapper and the default widget registry, which always holds core's widgets. If a zone allows your plugin's own widgets, render `<ContentZone id="before-notes" registry={blocksRegistry} />` inside `PageWidgets` instead, with a registry from [`createBlockRegistry`](/docs/dev/widgets/rendering#where-the-registry-comes-from), so the server and the browser render the same widgets. -```tsx title="Any page that declares its zones" -import { loadPageWidgets, PageWidgets, PageWidgetsZone } from '@vitnode/core/tanstack/widgets' +</Step> -export const route = defineRoute({ - load: async ({ context }) => await loadPageWidgets(context.queryClient, settingsPage), -}) - -const Page = () => ( - <PageWidgets page={settingsPage}> - <PageWidgetsZone id="header" /> - <ProfileForm /> - <PageWidgetsZone id="footer" /> - </PageWidgets> -) -``` +<Step> -That is the whole integration. No `fetcher` call, no `createContentEditorAdapter`, no permission comparison and no registry plumbing: `PageWidgets` reads the layout and the viewer's moderator permissions, builds the adapter, folds each save's canonical answer back into the cache, and hands every `PageWidgetsZone` the right blocks and the application's block registry. It takes the page definition and nothing else - which is why the definition names its permission's `plugin` rather than leaning on the server-side default, so the browser can answer "may I edit this?" without knowing who registered the page. +### Grant the permission -`loadPageWidgets` is the one line a **route** writes. A zone never fetches and a loader is where this framework reads, so the warm belongs there - and neither query rejects, so a widget area that cannot be read costs the page it decorates nothing. +Members with full access hold every permission already. For anyone else, open **Staff → Moderators** in the AdminCP (`/admin/core/staff/moderators`), choose **Add Moderator**, pick a role or a user and choose **Add member**. Then edit that moderator's permissions, choose **Site Notes** and tick **Edit page widgets** under **Widgets**. -<Callout title="When to reach past it"> - Write the loader and adapter by hand when the page is not read from core's own - layout route - zones stored on your own record, a different API, a preview of - something unsaved. The sections above are that contract, and `<EditablePage>` - is still what you wrap them in. -</Callout> +</Step> -## Core ships one: the account settings page +</Steps> -`/settings` - the account settings screen every member of every VitNode install visits - declares two zones of its own, and is the reference for the three lines above: +## Check the result -| Zone | Where it sits | -| :------- | :-------------------------------------------------- | -| `header` | Under the "Settings" heading, above the two panels. | -| `footer` | Below the panels, above the site footer. | - -Both take **every installed block**, so a plugin's own block can go there too, and both cap at ten. They ship empty: an install nobody has touched renders no extra markup at all, and the zones are invisible until somebody puts something in them. - -```text -Settings ← the page heading - header zone ← "Two-factor sign-in becomes required on 1 October." - nav | panel ← application UI, not editable - footer zone ← "Need a hand? Contact support" -``` +Sign in with an account that may edit and open `http://localhost:3000/site-notes/notes`. Nothing looks different yet, because both zones are empty and render nothing. Open the user menu and choose **Edit widgets**. The **Widgets** sidebar slides in and each zone shows **Drag and drop widgets here** with an **Add widget** button. Add a **Text** widget, fill in its body and choose **Save**; a **Page saved** toast confirms it. **Finish editing**, reload, and the text is still there. -Rearranging them is gated on the moderator permission `@vitnode/core` → **Widgets** → `can_edit`, grantable from **Staff → Moderators** in the AdminCP. Hold it (or a root role) and **Edit widgets** appears in the user menu while you are on `/settings`, exactly as it does on a page your own plugin declared. +<ImgDocs + withoutBackground + className="*:max-w-full" + src={savedLayout} + alt="The site-notes notes page in edit mode right after saving: a Text widget in the Before notes zone above the two sample notes, the empty After notes zone with Drag and drop widgets here, the widget's body in the editor sidebar, a Page saved toast and Saved in the sidebar footer" +/> -<Callout> - A zone renders from the block registry your application generated, so every plugin you configured is offered. In an install that has never rendered a block anywhere else, core's own `core:text`, `core:cta` and `core:hero` are offered instead of nothing. -</Callout> +Signed out, the page shows the saved widgets and no menu entry, and no editor code is downloaded. [Visual editor](/docs/dev/widgets/visual-editor) covers everything a moderator can do from here. -A read failure is not fatal. If the layout route cannot be reached, the page still renders in full - just without its widget areas, and with **Edit widgets** withheld, because an editor that opened on empty zones would offer to save over whatever is really stored. +## Core does this too -## The playground +Core's account settings page, `/settings`, is an editable page with two zones, `header` and `footer`, that ship empty and accept every installed widget, up to ten each. It is built exactly like this guide, with `loadPageWidgets` in its loader and `PageWidgetsZone` for both zones, and is edited with the moderator permission **Rearrange widgets on core's pages**. -`/example/zones` is the reference integration and the manual test page: four zones around a locked profile form, blocks from two plugins, a block stored with a variant, an area holding two blocks, and a second area left empty. The page itself draws no button at all: **Edit widgets** appears in the user menu for somebody holding `example.widgets/can_edit`, and nowhere else. +## Related -Visit it signed out and it is an ordinary page - shipped defaults, no entry in any menu, no editor chunk. Two checklists on the page say exactly what to look for in DevTools, including the two that matter here: that a save carries one zone rather than the whole page, and that nothing under `src/editor/` is requested until somebody clicks **Edit widgets**. +- [Custom loader](/docs/dev/widgets/custom-loader): load and save the layout yourself, with `EditablePage`, when `PageWidgets` does not fit. +- [Saving layouts](/docs/dev/widgets/saving-layouts): the two routes, storage, limits, refusals and what happens when two moderators save. +- [Restrict widgets](/docs/dev/widgets/restrict-widgets): what each zone accepts, and narrowing it at the call site. diff --git a/apps/web/content/docs/dev/widgets/end-to-end-page.webp b/apps/web/content/docs/dev/widgets/end-to-end-page.webp new file mode 100644 index 0000000000000000000000000000000000000000..168838444c0efd822ab806720b30b697dc06f80f GIT binary patch literal 48622 zcmeFYV~{0Xw=P<?(Pi82vTav&**3du+qP}nwrzCT*69x$pZ0#wxp9BobN5^;A~V*? zoH>V{`HV3l6~skEjyeGVRD}iPROHz3*M6TPM1y1kQl>!cf$(tSMhX)W<RZ8<XyOA8 zG&H-VvT^R+e#9=OdT7$v36+3+Mw;Yq-<qsh0DY|Ahz>_zH7~n*yr3O#pMCXuiFn+9 zzMRhAU)6x0>b%Qdc{TGCcH49Fc{P1)e=%Gxe;T}JKV>`WEP79VwLbxTx_>m!ovkW9 z0j~hRTs_IYW;NrzeyzUac`bh~c|d=5d>y`jy#RcDodPaI&u#zmUi0qyviv;$!dtjH z>Yo2<@{af-`SAZDORY}-to_)3<b9j|^nTPq!<+vKy)`<?9`hc)7kn;Wif;U}{$lvd zezUm*--ch~ZS%JJ$oc~Qa{st$;7#{B{<L^!y;Ob5j?o$Pj`g<xoc;v<pnH~G{i@YT z{jz%r-*qbes`@Jbv{*q~!z=iT{Q~_|{kVF{-n=sTI_2&Be0a-!rF){g-`?u(_Uila z`6BrY|I~S#evy6k-u3?ax_evy$bQ|v(%IyFd=>u0`Y3+4xzS0|(d8ZYuJCUE-2TM- z%6^gk`aRITBERB4$=<g=zaF~3zCJt@->=@DKHzV@PIxW6`n(grRKBb}uHKhFW$$>u zzCJzoy<eY@-$K9oH;y0CzEm%ce@_CaThs?;w!~V8T(I@f>wao)BU9TMlS%qi1--2p z@8%SF9&p0iX{-I3kv?BxV@M|6dFJ=DaIlqW;7-6HeWi)kRZMz+hP4VgXX6l9mW=`z zh&gv>yhI!Cz6^R*I@-xG^eEt%zSTnKDI<OIzx$Xj9j01aDC0}pbH7sU;7ed*A86K| z=|zB{cY-ZVB?<FnWgc?&8c!C<-w(!K;Yll8lnsNk#FJJyP3k$>R%~H?5&FB89@e#r z1LVhwVS&#pwVA4Q?$Ltae+X@{Prp&Q+)TL>w@;D6xe_=a5m()7DZO}g^nU5sp?0RD zNDLq5ki0Z9xT$7y?@jT=3AIG0Kp%u);6s1m)QDTO-H^{`dXCIg)+>bR6uWIiwD>IA zg+)#IZ5P|u9e@uVET|edYAN*vZlBse-<wDPFlrU5C+D8<((`Eub*>i>nM(OUFMcI* z`R6Cu+5!Gaq*R#(3pifNv~eS4On8^>bgC@TM8fA5pTCG1yne56GS}<q$qd>clzp2m zneM(MnEV;tac_&wA`WnPW7gmxG|wUa^HQl#an?!k@b%W$sfk{}G$bbhU!N)$R7DgM zgh+Q=rmx*DCFA;+5I^q&m{f7iE1HV6s$&N*Z^Cdt>M$2*=7Oim>We!tjIt7E=MR{{ z9-PW=-k3TQw&pzT>#F%*#2(o?hKXr_oH9M}8%UidGp%f@HOD+j7$}GEIMzQ9$Gb(< z%`1#S_DkA)@Aj`cBn)zx?%LqiTh)T$^ugnK7f~|P@0t3H=S8S3WOfxMV$Jss`9mfU zts@?~U0_3ID#CFw;9SlcmA>C{)CoJcRtYVIZJ;fm?33ff|Bicw;_r!%$+A|ES<CO< z-9@ENihKTf6&!KT75>R@3o`N5IkX2bU|!#(G6UNE*qrM8ZB3;iz!AqCKKxyme)&xn zYFqWQu5u@C$!sO<+vsBv!{-wf(0U^Nn=d7h9?`IoUy1sTCK(#bcudX{0#-7!Q>w43 z_B4>P_vpEtFI`tuL9T|S-K18~siW(J-zk-Wpc|c!fNgx05%<Hb&)9YzWvGKAW7r`z zPDK+*ET>REEVUVa1ZGwu6BrghVeJUz0A()H%%@xah~pE7&fGOG9!&YPGWGSe)-{0W zK}iHe3dvt!L_j{`-oQ77Iz(=0Z5gVRe9x7k`k_I>fZZM-7|dAYE{SfT*UIMRra^CD zmEAbtK$V+@rsl77>!HW#Ezf#=86{E?axoJa0k?u(O6v&>h<Gc^wu=dhqLUsX-7A;9 zmm$L;vFF5K75`oPsiTp->%qjDJ%&<7je*+>L(RK8Zxk+&?@wA;5Y6@Ej(BG=ZIcP} z_5M!t1iHl!u-<n+AgOJL`j<Gwph^(dF>^jD5UDz$046x^(LqL8p}*|$X*JVI)cY0+ zd5VLrSYT^FES#~~CVO5&=myf?jcKuy{Jy`qkmg(C5xHgcxi7lMnC+8=q-<gX1LC3F z_b1Z^)cT*4X(>JD9QEEW(w2G1Iq1Hc>qqjji?eZ>L|4514b(7!2k_eA6{}5+P$nyL zgNnl!T><cmhdJNuXMEZ>hnqS_*M5NCQQvc6J5Y*N@zrq2I#X%+B?py@{{hTeRf7II zXtd7yD>QE5jfy89B5zcn!rZrtx#sQsUTjk+mL+z1ESz#Kg~61{FulP7l9LsrB(8lE zCP!01VKlo2ERKeN!f-}qP*mlgujv=v7h;MFgKlxwiA0!^AgA43^<oxeCoP{em-um) zSTnoWig1u;I-GUPP``|C#PZwk)Bgl%r8oSO|3pdu8Yqhg!N0@*C2;<KJOR+Ty0Emd z6A=JUT0y<T+e^Z~ZzTU4`auDzTBo>xx$)s@)b%l+GT_LN?(kgrJZ`iZZ*l-hn7AFW zi1*9)ipSUMdovEgNQ=`!Ymhdan>;xqG?Z(8auk@T%4gyV9Q7uj<Wv(92%p&!B82RP zv7x?iAvN=qYZ`iL_K>s;%_J`s6bH+fpR&E22LMu4pxlb61d8uIr;fZ8M5FAN+;Jfm zQV>0ij8Xo#5czMcU(iT}pDh4-9Er~H-IrQc&`yy!iE~nQ!QZbU5^O7<hkt^?at~;0 z*d@{j@ZF_7i@zr*9;(F?h?y!K_QucV`@=W(BJd37&e)^9sftoFf$9#<H8&qC6=iPr z2aqbu{!DpSUu~`gH{%yNH;u#Bk};Ft49eYH1q>J8xivToeX!{`f2HWtwn7Q>!8d<) zD-(v<*{CA!m9#h$^Hv>FEEq&*+V+wp;G`vm1S#-X<t`Y%t@0;IT&cFFAM6AIuQ{{q zI<Ip)FyDgWmFq~LcEXTCMjy++F@gWifTi@%ucSY1!=L?FM8zz@=&;s!nGrx)rX1t= zYZ<qts)7B?>!`zH<L=iiKEgvNId#0pkO(_I&q1>_5-Qa22Ruki;$Ev=ai`To<%`5~ zeZFYqC3qCcFE;Id%ARBwWvtoPMy!*@9dEEqgzSG{pi&L-KU||P$u@$6bn0wsy*nS{ zuS;tXz5)cg>c&?3Xr5`_4XBc6Nik_)?iOH4&6M<~y!K$2Z-!)zbasRihP_rCG*V9H z0HcY5DzmZul@9!s_54d&`$ATLw~rEi1_2fyV*C2pS;yx4>F2pAN<!prGE6&z&yyu* zf1xY(43IAr&PO!AL!~@vrfWaK+;|u~v(Gj8&_4&_LR#fnB4I&TwkU|TjBo&sdcW`* zIq0Vt8xz|j=nVY}9`?^x6qt??veJ9MTrl@A_7}d1z+NZwpUB%kyXk*G?SFv%|BIVj z9?j_SZ<dnusB7Br@0=xBI`Ua#<`@s#_m6HgGcu51#}F3`NM@tWV#F1;Cy((G%5zjk zOh6UL4r;w0dU~ZJQd&X#l{>pi6A%qQ0>$A`rZBUN_a_X=58x4-Pyi`F>fVBI5<rFa z{a~J^VqLk;(Ju;<Ay3*ddB$XuZ~(A_&H|B&PrVUW{}3UFr;XQ0m5=5D;~<LA!Xek3 z^={o7g#FYn(knzi=p1=N%rMeEUX(9}AVYD12p~<?K}jt@7}EQu5XPPP*}<Sb%+imm zeYGE;yCNYC%Y(4LdTy`5lT9dcC(f#qP-%BHkxMU$tn`fK=1{qt3vn_-h9JC-|KiD$ zF5Hh;c2E&VeWHw_$@!=?fMl(y3nu>Evff%A*J5yU`ngT<YCtgigTISse}J@HG4|B$ z2t-kGG#MoA8UT4Y)fZ->i(YTcl=w(#gz&vQ>OoA-#W8dE>mL8ugd;&S_>Zum-@<Ft z)~M^}w?*908sdOz@+@?EgKFxXQ-OvSnU!ZOKPAL!P8cKFZPF|}&nEDk+Hj}Bg<*9B z^r6;GI(g~Ileyf8s!GuZRz3p6zCWk5VY~(_n@w2gwlOss1~^L>7cgdAIKOi)i-bpA z5E5A;PcdN64zI{p5FqO#!nLu1P0wh}$$aUY)FGY71=3m=j5v$;D@c()`sB*}k@f2; zYco4@jPu0999MXhl$uk=joREG2k54nlb5t)RtEsHumbE+E11t67^G#-<;xaQ;YcV@ z$A$XMA@HoY`gw0=KT>F6;Ywl}<_Z7`n&!e3pBJ!HpxWH1`%N;j%aA9|y!|3EHRtNU zE@k$O-w}Yy=}4`8Qt}hB<zKPWI7M2y62DuUIX~3+Nu!EKNH1O$-lE2smz#i*8=mhY z@c6306E{b~!(%Jghiat>2tExtB~iW|MrKJgsIGG=+O;T7K$!MNz@P<cl!zK#a{TIY z!39+!izM<r)v-Bh#z$KA$p%S8gBXFagIXVp7C|q^-5-tQEJm!3s-S}na)QNVh8SA* z*#eR8{JW&@Vs;qy?!j{K!>`ANo;GR*I~Z1rnsw7w#O0E%8(4RR6*kF1AUV#~<x%MC z--U`l<)HsHmF7mY4a>|Lig!<!Q?6}JdsCe-P(`N&4>_kI08~Q?1s;GYD)TU`a{12% zjeor-N~d$7#{+V$fs$y-AyUREvsUNs#w1<Ueu_<9;zxZn$+~adBCUD`vAo^vlmMY{ z2`pYX&YSoECm-hBc#ULLj#e;*48CAna?$prA0~r8{zq!{-|)twQpdG^w+Cpm!7Rlq zDOA}_97FW;(=ooOc`RE9WZI_D^rDy@5RAI`cW&obn9y1_me84dA|7I;1!q`jmXkwe zxrCAyV~=Nm97%4AsF407k>@r&{T(QlpI4Y}qh#6QV!j}4*%A{uD$*9v*NdEb73%ja z{BNJFauc1*eYQUel9g+uh6aDoopn~`)P|2q*Uf(|dD>!3_u_z)3E-a7A5NNnm;)%B z{%hU+O(yv}O~hHNNqKBylfq)^+baL)j=xcP^Rt3BO<RXaz(+`j4<q->W6hRV#KOXa z06d4xcnK^z54Vq-0h_2q9;G-A?Gc+=gs;)eS~hjPv?nLLt9Qi1(~qlp1X_+qXYWu! z2PIoze!$`*{)V&neG_&n^3s!K^ezhOKgw4B-AdEze6`c|fXIrVu&HYFvP^0va0m`h zVdKGqTYG_E-4?2tW%z|@roJyf(Gu&bdzIZne<u?;vw&{cuDJC--8&InQfM=W(ZYg# z08~9&Do6t<FLi3G2j1x?tPUHa?P=^+F}+ojU?>rnIwP(}v%5w4ROh4~=fat-Iu6~2 z0iDNwjbxdcf*#I;6I}xa`Qr&^-1DAaz5vw8qa<TgGaSke^IAwzjBp63|E>Q9?fjLd zpK$!xJx0yVS;W*)T7vQ{Vy;(D8JTC*w;C<ka}@?VudBGBS2{<d^392MkandE8)W>3 zd|)KP9(i0$)R2Y{y^GL41blz>X!dL2l;rt_V^$FAqH-j_rD=m*-zlekJ!0|P-T^7y zH$pVP|C3aDNcA_Z{f|xlUlu3-&dSYATty%xXkoWdg}p<iR0TS?+C(xNIA9I)>NPn> z<@omk&%(L}pJ#yOP=6_I{@wk5oAl2B0_?z+X_EkK&9r|8Zf?(Ms1G#UaiZm1%&Fv2 zr4Y`THcJ8{6s=v&G<>01an?gGim7^fSI{n#wSbl2d@FfgRT*9TY5MtEz#V$jl=r2( z3i-kyJ}$J*qIA||2$yNVJ_5}XPWMEH#~CNO4)2L@!Oml3-k@RpB;dVOurvpA@9WFG z?WV`An1+rYuo;!u%8_zH#Ax(rtWHGOHTe1DzoD`Jy!tDMbb5SY))qMW&K1m%EE~Bx zJV%a`u4b#uFj#yRdCAjG`JUVWMfM8+YS}GT09kGbYt}%38BX}j&mU)hU%2&4PnDA& zN>yhLACq<?u^mp;)F~t)!or+{mX3qWzSAUV<>wlkQ3qv30=l)n1)(kv?QGx!2>GMs zx$YBUTwtkYf1W)6PtWUrQAGZ;o(sxWCA%KTe6B;ftG57f-506J@pY{0F0}~1jy4ie z<bdEdMx8A0vE4V8DLEP$`nq9a6m~B9f`Cb8_k5r9-DN^);+J9;a*}m?U~pa0yn6?* z>eY8N98BQKz+b*8XjHuE&4EkVr~T^sA_Cb&sT~_QLq8or=Y(kijRgbtI_!L-CZHrG z+Z7<P`M!YPg#t<W@a?DkhZE*iw1FZS^WjaqrgPK<kZV&NRU4P4mM-fuy<gicW^$c5 zGQxeQS~;oQKruMLp5F>u{oc8J<VoD{n#Xfa%vwape6*nLYC81?hIVQ8&w&dWpf3(! zL`B>4i9tajOiw<Pz0ar4UKaGD94@IJXmHK<$5q(ghv9Ng@P^|~z;d?Qf|*lr_<w|M z{M$a#_PbE^Q`>kJQLI`B&Jil;|0G!c*4h6LqV0bs_@6T2e@)N+RZr=^gxx=TBH`*> zzl(E6-+8XCa)SLp;=1BlU7)Xu{5X=Tm2B16H&8WEYH_Vbo_6vds7BbeB+d)3{|_!5 z>mN6xX;+>3Qx*K*LhP@dFc#nlA&pAr=bRV8wuszK5xL8J@}KevoF!v83r29KjKNMA zfA_}{O{#V|&eRBo^xxIjlch(<_<onr|BzOAL9zY*QkMUl8y4$b6aTSC_fPd%pp5d5 z5$g7X4rTZ0C+Nv*oPAv&q*I!dsKRuLbTwsjY%7fC``GW6$$y!&lG-}@{DY3tpt)gA z4?J_Dc(68n2FSUB74?c@C9jjUDJ<H21fi2@uRO6medq>@0n6+s^ejImw*{_p@J1?^ zg0<jcm|@&`MW~8JH~zr0I|Bcag4)eoEISO1l|Jq|ox}D#eR7V}5Lg25;oG{d`JOgZ zsaEm*Hxu6i=Ka%YuPB?Vptt@&Lx7P0M(!V)DM?>8jDH}3`I9d=hROZsHq2k_?crnn z>nA??8izT;6e1wpAa01&1LAf8--S4`W=V8D>TtDo&-7$g8wlneWr?{}R%zT61ba`t zwrm`SLE&aS-jx`r;v~6QjXdIaqg94hzWb;)+a%cmh|HhPnSc{7n^_!U_@<w{8H>n1 zMH->$re~yG24=$Ivk|q>*RvNBhVBP9l4SsSWwD%vqBUankDG&PpipR2EnNmDsL~D? z+hT)C17>*0XsFA_5JpfBpz^@f{-VvlFeKv&OzM%o^Q5(r|8hV|eY~@jg>;AcCnh-2 z{TJ38X$M*zZxE{JAu#*-64q~aR9-TWe2u;v4R)SC3!YQj#cqVsv^uT82bZa6$_Trf z7ZAFlCDjP8g}~h0i_v)m1Pqwff;-#m@r3LWM-D)#3|`TNP39K_k(s0Cb{GecTh$Gf zcLC-fr7`%N%(_+mLVt(U2b33h%QPW+zB~wo@l(HGc*^d$r)TJw&<F(>UhT>E()W5` z+WVM>vW_F?xWpeIx*_%?DCAq99D(bA1rs=52_t(IW-btbNK%DYx?Sp$a!5Xy=N270 zv<kNc8L{&30MEMU?C2w2xIPU*D8T=SGHKAPss8{M%71dK9Qb*n^=JOyT>8&phvX2p zaqy?4_Rk%=zk!Ao9zNEn#DAFl&xp|-fX(;kZvOA^R{c{S?VoaMXq4Q4Y<WE|<QXP> zwbJ}OnEi7Y6KAn9%dh(<d6@Q%P0-+;Kg`yb?EhOR{`Y%BGYXDNEU^JmYwrNqKS&&o zxvQK5zn>oR*&2#e&WAV5iumDxM55xu8)Z%OdPFQy3E+*rA^I>OmZ%Q!$=(uumJ&<Z z0Ql};2mOCVlaL$$;PdN;eZOx0fF{82fn6$8;YGHkM$M5bn5(}>UC1~H!3a!Rmh2h^ zj}sQzpFM#NA%xUEjzle1OE?hzf7_w=yqHcI1F(}C%7J|`?B1kg^Ru)gprwH_&uBIJ zeI3BP(gY*+TkFHacu>F@iYQIX7%pH2aEA`Ai}2$Hrpb|n`60;qsd~4g!}PfJTMW!j z4GGhFF7@s8N(A+F(Q*$kHB37@3s{{fx{glb8otLHS84Arzti4{x?MnKsK!9gG}CTB z;5U}os}|WwN;MgUq+jkby=p;M8acc_0lMTV^w~Lan&Z+~flZl0bV(%H@sH`<GdSMY z?~@+89rd?*u%hpRBZR}UO!)p}%|8z)rb($1n4Mts8yF7~jT>-`Q2x-^y(3`nb-S-R zxoVDIiN#*=qjF@Iad0!C0aAo|$Pg()eWZvC72D{{79{g?R+&o^icNt5+3D8GgFpZP z{ute_S2enQB_bltm)qM1uiPze?{S;zXn0B&D7KDcrhu$l)EnmRJva@b!=DdrVO49w zCl}AJVVf{_eUO0O`Yo{-lk2x83f9BwulhTgk@1DIG}MiND@BmCYdbpgcY-SPkAMC= z@J+W4^dfK2fLSP()}P;+lK4pap<_X5qhyb1UP}3iLOfFfOK9#2HI92p;sO|x3JD_3 zk*G@av}$)*bNUOF%{(v|?J=#yN&kxOBLTw&|B|1JKqpz7tn=kgN{?6TU%(A4%(1L^ zqLn4(%r%^LAox|gW#nUXN%nx~YB0-I<n;MT-jBXAb8AWWg2#FRXBy$Q>RqgNO2u*l z@WG$OVUeheHe35*e`0ysa6Yr-2}_7Uf@n?OgEXx16C3~m4$cL~<Q2H`2fd+g2EC7l zlE4#m6#4d+lP)*#y77ktgG2y<hVh<KfA09ry)K8c_@;H3{d3vf8?2dtBGWMr0NUZZ zNcpenZCC=+cqRpU(R)ydo10pH%3EA;kZq^l<XOpmu>)nn{a>eeC4H*tQ?ElbZB_MJ zCFJWf(O}k*rE@q|&-YD0i7L1WH62fHV6vzSFWN71HPgnhmUqi)>kLsK@I>)c<25k7 zMb-uP9I!Ex+nDqI32KehIWXKid-s;ofQ-+-dLISPFf)qyL*72@z1aB^>%MheT@q?J zK{xKHhixu+OGznHqfF0YX}<~B2r{rUrrZkDcB&l6IJ|gJnhfC%*dEosK(j<3UGPXl z^K=BJw1*Y(e5^iAi6G!8Wv!{HdQ!Fz*feEh(u`QwIrnml#Bt+=)fJI$BWxCq-6m}N zA4B&tCP(q;8&kq8!^KZ9t?XqxNLNfR^O&lS@hR0U2VhONcwK+iNMJT%>Q<a>ijb&J zFdNvUlqwirxT-4$trbiFZWs6#?U~5SAWw*}*k&6t*Sa^9RIf!@uHQoOaBYrU1dYk0 z#Rv&}ktoHczdeY!C&QY4wqiYE>tm8N^Vy2IydHLVe|^fpaaEeM`Kv1KJ_#9Tt(Zfk zH*_y>JOq}@<xwgHg&i_aCH%V1Ga5M{I4Wbth=m|8yR=_x%@#*KE+G%0(w0@US|kL1 zsz(-)qC;Pd5rS4HW&-A;kX@V1TjfDJxwV#N2O*b+m&V{^6(FA-Is;}d;P!dx5Yw6` zj_2VM2{^xo-zZI1LQVI5urhlOd}lxhfQ3|-V-+))G;8Epg1bb07;X>6jDBQATlRc< zm`QOV%e5^)^dC=0%_E5*<zsOVLv4sy#F!PiCC3;YQvGp-8Mwf^6nC*{#T+u66OUJ% z%TwY8dY3|IihM108sE^5&)%Cl9jF(1Lp!!vh<AoH2z-ym`wX(6Y31{XH9RaXZMg$P zJrQ^J1jq9V%x$&-FkW9i$6|xeOO{BHWf^7slfC|VZ#=$SCFaaNS`on4E<FbtRhJIp zWZFb($vc8Mic=_B+)-E$9mPhtH(w|?IaiWws$CJa80x@h+Mtj1(2bB{&BuY!P5x~c z(Y7L4fAV(nBewUsBU`U3V{{nG$9d`(+I05hd@H!dH^QQ8mQkC*Jk!W~5kvJnBru-s zwxbzRVhdUZm=;#yHvS(-zU;1C#BM5OX=Chs7IROP=d@!7kDiQ!(U{w18aDKLjkmWe zgN~jsk2mNybPO`!KEk01auv7{uV>bpG||QoyTK#;Ye~7}?l8t|rLg<H{_aMS&$9kD z05b}*PJ=XcTv6}ccb?U8DvPR=>Z7lU%~+W%iz6e$q+b}Y9%nUtI^Hg%BR3K}(}fiJ zoqf~}a2BGk8O13kwPG^rR?ES=WQ45M3>46X5;G8kX_~15?;&KUK<oPGm3HCwjH$kW z1{T=_(Xvi{;Ew(s->=0Vre(3OLVPl*=u^Ww&$?+1&y8Y+0b_vjL$Qgt@&=#-U)fH) zOvcQkHfTe*y0oDtin*8H@u4rfZB-sq>BoK6dr6;3TIz>$rO-);KQ6&-O#7MLog&4W z&>#%a$@l}m^)4+Jkg;B%)E#9+#uEGg0M4;PuluFHdE^73D+mxP2RLjtr?+LM+0vy$ z0sXV!68KYpG6uu7nnXh?85?(@LYE?fSpTPeIeXrIL9-h9=#;+Y;O&ng7orV^SO%?d z=nmf9x!|1Zr5$CVhhHQU1;<e+fC-fz7nSJMI#S3A#Rh=P_e*=-?i4wx5m|;qtK9LH z-{#G)H;qg-ViW>`&iCNfbdn909AtH|KTi2cueB}p^wa4+qLl`$%#H4;zqza$+okM4 zT|RL&r7l(IqkSFWbc2QCIDRDKc0az)T2Aj(CpzraK2041CW-jBMipxEw~0x&uUyzt zol>LqkctyXN#aJrb}8Jx+@|j|6;&3(2Z%YQvTMsh?jJXfO4PmU9`$!s5D&7xR7GcU zUFoJr0Xg)m^CdfD0<AZ5JhACj3()R`@n9ao2tLL_7bC;p;T<vh8DEn=UWJY8pW8NB zC?^;vsppM?=cs5jKrIb}NPV?O@!B6uB6Ld@asHys<BiC2jAS9ray#uj3huHmI`jre ziG!ouoQ%~)+CwTkFkoY>IEw)z$an^vNCz@pY19-DA41tWGj_<}Vj~TwsySwkT(#3A zw|p+?)G}9k*wHRFY4{d1X>i{4)Z#36$klH&LJc<m>636$(qP|;m3%nM|DeEIpsRKI zw1mt+qKocnibPcTZMQUtVO8WTU+zf?#Y}TOe|AUp2Eo0!_H<NE5+gsLtmYx(iQ_}| z)hVIFa<$hk+pH8+Y0(?OcNIl5QelkQE!oq6x_ptK@f*J2D5XG=+Zb9tNhZ12>ag-* z5?OmaE*1S(ma`1-Np)f6_Dd*Vfwrtf-J5o3Cphwci+E7}RJCkBrIs>#f^fBxZhT@@ z?{xH44~Z(iUP&`1!Pp~&V!vbh?wfRlQ$fcB!gME-XXNMGPOKH?l>*1;HceyN=9-`< zr@)sXYz3v2*~zgMT+51*#?Vi(K>Qqt=VrI6?emFkyy+i=^TPmu4oH5F6NkS06^a2; z?{Si4FfbMFSg79vwyK|;X1h_sI)>L&;TEh2Eyh=7$>}VoirS;UlR#?L_a-ljM64?u z85TC$U98-;K5?h%XQMAEJcrr7Uf$7TY@sz%IL8*mhlwMSsH~!QRSL(u?;Iu7jF5uT z<jltFTVZ{FZ<!`FVm1NVo6F&-5f8VIEHRF=E98^gh|Js)-`tPCbKV~!i|>^}l2Ju< zuz+GLZR&v-g8r%aNmP0vI?i~8{f14*i^}HS4C2mPGNCyKs05&@v`z&hh^d&gp^~ZK zY}A2UakP~nQI?g2LA&8MD0a8w?W(LLsj?r>$7w*<XV~)8BN`)t3~j7iPL*q>+grf; zYfO=<+P?oIJFyC~S%s8yVL|EIajgh&(djDM$Xk7vQ3fat0+Z{ixBg%|3-K&Hf%;q* zO;LMF#ACD}!Y!N|KK}IL{p-hAKP#J#dZ09+hYiXG2jsPt2Do68iJswS8$Du2@e3UF zlr9OxsS%2^3*jonMj~9!53q^dN;<XS2Hq>4dM(1G)n0DAA&#>{lM>QA*l;L{e0p;D z5$_x1pO$`OhU6oKx%=_8iMfVHV=smufQwB1PgGUZB7>;Z@zpF1wvr_ZRnpW0V6!@Q zQF$}zdN-b2we2jA==7rE<gP^!M_j%^$G$GZkGF)}?fnnGy3ggKl7yw)VO&Fi>7?i0 zDbxgAWPu!=ieS6>u(cT>G(L9O1*Ec89~T#02u;O8ge;Ax?!p+5$u~cUaypfVvw;R3 zA5{X|2-*@SLGW*(>jS;X$oA~Uzh^~zGJBZ$Wow<yp-Jf#TaKb5UAlmL3k<sr4PeJH zQlPwxL!?fCU$U(k1mG*FpuRT;hh~scOAr%3p}juAjm=dn5^zHaH-m@P7CNsBt4f&3 zI4L&hor9%o^KCQQ4yk<EJbO}Z^+266;cBUC_a$PvOmuWZh7y5d4IL`#CvpetH07g$ z;%ensJjOBbtjqKWfyRTMwCyP6th2*zF$IloW_GMIr2KJcvduES)z;IyjKh8x(7Ae| zmz8lro<g?%N=-R&@F5badEuBZS9O|Hx2UdF`dFwsGt#%11_Fy78F1QF`BkG_lj+UP zorCD?oodzo5z0MSkv;$!R?M?0VM=FfcYCgZK`F}N&EJyG?CyIs&d)eQiIHCk?)^Q; z+>s>OEc2i$?OC^er!O|Ym9kNG$*mL*bYC=8r3~T_F8M~CBk(vulM(Lfg`XKNh4ttV zG4}ny$?G)1rztT3{RUjAk(Z6XpKw%|wLAzV&a;ElkSJW4-1q{UyrQ|1pOtxIN$>na zeV2|5el}5=h2&cFbkWn3NAbR?#PJ;x&*H2qnb=}<D|k`V_N{~oxNLJe0Ns?J`obcF zQb&!#e&A$RsIT$^$Mj=rzL=V0fR8`kGNg<(+3Qt9*0bb=*m7=?Ge%lIJ9z@GlzY_f zX%0$y+*%FPNnojg0HXa82FaKHu@&syy_EHnH*@us_Db*}zxtjc0IG)i8p({KCy#p> z7U@GcW?8JTx$hG3!ku>J1=LF*VoN^@{!Ea@MtU55$oNoW3<PTBU^;(r)>^rM>97<Q zw=Mj!Wk4ucnHXX|4N$WrbB91!62v{ln1Kc>DVlDcPeWf*ThdY|WgwDBYbSUl$jEM$ z-YBSa$H+K7{*h$HoKRw?ViahN!?WT|+e!y={-G7B9TSx|B;C0p0Cxh;m#;#;iuvIa zUuHcG4mz%YmC2wD$}<Uh;;#RzIrD7z?H#}fIA--Jc|BSRhahH8ca8$e$1LfjNa&(K zz5XVlMO#4V+mOaLZU9ll*mV%S)01X<3lF)Qi@lqES`6bopZP>czQ}yw*>{$<30F<G zVk-~+9qBL5Nx(zzaeyjVl*>|c&*+>TYrT%BL5uwp#A9e0Wj<F3c^IbjX*wEDnw3df zcg&ZLU!kqb0gUJlJU?Wg7oo^9R^d?_f@qCtaIiNIaY;0Z6E!|?c#vcG2JPsbDTZ+$ zP*9b-DZoyeQtqXq=q<X5&)Sy5;L3wakEBi!;onksk=)Ed<}cwEdhunzY?{<OG%#ii zGma<>6;W1z3roPPtRyZA4A6ra!ancO$pONt>N&`LjkUGXS?ABLwMakS!5d|{w|CUw zCO7H9$NTDKI)OGieJ6KsWQJa)apm=h7AqOHdif+GY^|G5^QLBR7~Z8+OOisN<XOu$ zm5Xj5jmj&JNR))Xi;>Nq<}vd~pb2usqVqC-h_1=GHg$HaUqyZsLSr|{P!T-=^B~ft z-byBhkz}wUl#}NGuJs@n_UyH#lVl1u?FZbI(s?bkyRfZi?!hgvcRgd<-80JRJg9%4 zk4dISD7SXty6JThd5vfn->h6D-d#J3ChOU@7;2BSXrL-ADns<<(od<l(to%1-b#Ou z00=G>-zJ8PM9mT~7=2AAG%L!8d`q0G%Y^U;G*7b(xVw!?Gn&KhKc?|5G|XA(7!FX# z4Y#UI@H5NRtcwS%xy2=gozyfM!v^OzM(E5j71HU>!)_!sJmy7Zyu|y$hFZW8wjDv} zVor>v0q4g+Imq#!&Omy;Gc)ZugfZADd0@aqFnQ;70)=+)wYb8rlF@eOvM4}>XSvnr z((<8O;YRL}i|<GdkvET&!5R%0*9DU+5xa7aO($i>H(#?qLXx;xb%r<6e%gR$1idpO zjnd0JbP?DxpYWi{?|Dr<?UpR&9f6y;+A+#Oe&YoAIp=D^j$6p!{ji+2KEtQa`J>|9 zkH69inTeQq{f-QY(lN-e)~2}%>EPiN(O89C!};8l79oBw{b#!Gwd@Zd|J((<dt^Wq zZ#Dc8iQH-N0~6@2Gz%4}^nI_3c?D6lH^rWY=jJ*=wT>nh;({C}Yk;`J>4t<Z5=NVL zzrxWCsv}mEETd0)&Y}wAS0UT-vYdg_Np89N5lYSUHfu4TE+7?mYomaV&`Mh5NoUz^ zL<+#f%6LU@0=^Y6^wgAgbU{DwDT3Efez4hVqcmmPz?81-cV5|!`<h1;ZV|-cebNH0 zIYnc!Z95@9ML_Rf*J?3HPtGTr%sVYkRv1MnYv&2Ty_toJHa5b@l3}Sfr1^uT4-j>c z0w>A*Muv%niMLzA;06PKuFtu(g#4Z7+oxc1ntd4aV8gtS<|Aigo0NiGarXo~g$Cn3 zM9@&2yWX9E(w|h)<+GulBJ$0Med!Sh$8bN8_of7H7(n+4xsSF5O=93Oi8_IwEtmOO zLa>gwM&j$d1<Wsa(t~xab5+zzUj<%<;4qh7qH%oIH(kL<c#rgTiG83=G8ehj&<hib z=0r*Gk)GSfqG-}^r@+4{Z-Gh*6P!x8nv*6Im-SF@$4RVQz@vZ2d_gwH-$}o<8iA~~ ziOk3y@^v~HmGF)?t$AbWVV1RT6?TcG*gTPH#YV)}$(?_bh45SXL3GMC#h7Pc8XQ-| zD&(?IHrKiRWANkGTLkT?Gl^Wj!MmuDI!8zpDCNNBT`X9#VSx_-h&WPx@((X$$I--Z zev3g3oZ|eBU=pqck5?fdqT!?yP8N%I;<HcRJpy`)4C!4rC%Y-gpr*drj-9w^3w{jK z%r{A=oGuq`I-){B!x1T&Ll0L~sf9DQQaeXW#E1xM9aUznNQUMzTmyOEVU83Ql1>4X z3!L4})*ZfRa#Z08tSB#myYRmK0DH*gJMcYGVVpxr|26z}>o9iMJs*pnc+I9azyF>; z=9H_5c6e=8Vyop9=+(RI-;DW|xAeG~caqbs-;cVKBEmWz`r<`&@uO*UtOW<08bv3P z=fH@jUs}cBTNG#>g6`f1fURTyTL&#cibG1_>bKmCHKU{aWxDbW+zZSXPoWgAq3+i> zzVCe1Lss1^bF+h^12sxndY_W0r+8Z}E{1o=bO0!uZ+Cuc-<c4U>R4|Pw)cYjj|1I5 zb!`rC*3#Z_KrYZ>ZB02%GLO`}ODrgC0<m;5!mM69kzct70$5Ct(#Hnbl)ct4ak7Uw zco0D#o*+mGmDs;?Ty9sPDeefgz3S2w?22M94R)nIk?($I#|{&e{AtpAMXUD)HXrBo z+F^!Fg8aqb2@iI1kEO?=9Pio$d1F8Vh)2=Wn_f`zq(5(@cte1E$6c7SVRmflcI>Ld z+fNWR61NwJqm<x2kV}{|$|`)KIoS?J2m1+yRgGzWQ0_k<%{Bcy<6Fv;y518^vhK_H zxMt$_fCi&q_G=B+m;Sz^sSc1u$8I{c<}#`T9`}4YwC@+Id=|ohC_`8{f;869dBtB# zB0$C|vg1)KrWoaM8dDehj*<P=G`s@g6*09&-*YA`uBoTeRe^WMxjO>yVh7a-L<uRH z-1N>AAk$>LJZ%`Opqn1&#FM0Pi-XEbrN<LN6pErt%D_&)icaSTEUcQ6jiS>au<AGF zk&&m8DSvM(Rl3tFfsL5h%9DDC8IQ$ZpJ?BhpZ^P>QGqDxg@n2TxnKImq^yx9kWK`u z6_XL_CKuUUDbE&xA!EbSW)oKa2u9hTbRUnudz+bWgR#(Os0069${Th_{wa`)YdJJz z0c9T4{B!o0dP1%*;jwW46>%Qb`RX;O1;DGl72g=~v3iOitWK8kW507$mrsY~`d~ih z*XJ7Qg>03qtW2DL1AEjU@9cM`JXKo+592Y*X0Hpjm*B7nkiJiYudO52@NXG0=)DEL z&WoX^HW=iaoAH8tm|4(tACYIus^M2jmBrG07GA(%h@FQtUO5amG(YS3i>^GvZS_LB z*8G+<_;<Xh;P5GR=UAbrk@+=9%`KaomKz@X1g;qiv95r1vT0Jvk`q18BE7)(lt z*QYU4+3ePx_G|@mB`fU%|FTa|^)t|xgKu_mm=&1{*w7v9gi1vX3RyPf<Cq8O2UHTI z_x#2{6s!V_=jdj_OS^Bq(8VsIf)TUK7Q6^6grAW&hS~^7o^uk&#OtsoP#}3ct6CC{ zdVyTRTqJxh;&zj)n^j#n9?sz98#d5M=)G!xJQ?sl8`3|MEmOXi?~JiS*tb12vu+Cs z5=J6~J?EW6{8^`eZDl4=XhJ$;Eqezx4q$F}&d@e3aW;2^;)d{Z!7E3L1hzkl%4LY9 z+rKspNXs$#I=4eTlFn^-yha@WA~^HK-8|jxEB(Ew=m+5I_hZ8c6}Mj(NXn54xyE9` zhFaWdMovUQp+*L5yE0@MZe{PI^O?I2aC*WOnjD#YZ^qWmEv#d1GZTEcKktrVKGLu= zO)ilNeO55oCUt&-3ozAn70`(3hGY;r5D-H*4dTKw-QrhblR2vDCUk7%ENi?sw&%R~ z3=9{k_ZHC39qye^vdgqKk1F$EZ@2=?o{?%I8lv!+zTg99x1T~#+7hjIrS9g?Ww4^K zR%DHYZ{0b1OqJ!C87JdyPi*?Pv`Fqn9@3ZV#;sK*&@e@i`H|t;)@k{=A7DN02=DJ> z$_LCEu;bz!`<-fInpAlp5uKSEsvETGSVj06kv8{6+`7O@kQ@4RZCcnZjUnVO=|V@_ z{s>!h=ZnGEy+{A-jvV0PMuh2pp>20}<~QY71!qW5MQB7o7>wmB*L~C3Ym02)LQcTZ zRA>oA&J!nSe;)AfohVhX<xtxPeJxzV8}?MR#-Mp4A5oiF*$xa~mnb9$Mv&3Vso1Vr zQ~!(_kac3!GNL%aRpHrXRorYB3d$y;0{p&|Te9T^T%JH$2IrhHs%U_O&^U~Zm3bI& zSH5PtVV>$ZhRH+)v6dcdE!VN~Oum4E&RoF)^X*1&zYOo?q{6&ZLe)RL^v4O&^rguA zm_n!7*lX>X#d<d+74i0aGXu6SmYRyq?ZAoko~Z>}nNfgJgZa+n)kdbcB<F>mve@*7 zjQFYB6njB63NC!6jo6zd4+sPwiQ0|W<iTTVPRo8?J^D|}{UlFl=g+DgLO(PVk2-H9 ze#9eU<rO6yQat)^W{~$LE~wa!{Fv#SMy=Y^x<lf-ssX;R1s37IUvEP>m|0vANQAr4 zUr0!@NOJVtFLPX8vHPH)I|R4U;{uF0?=s~S5)(GA{0_fqbx9Lg9!h|60^NtdOuXB( z+v2#<eLJF)x65$$)H#&Z*8%oe`8{oKhR!>V1{xKP<tAiT2V6awFp=UWI4?(uTm>z8 zpo^w=EjEr)8Dy##=F>4JyFoo!W>`0f(r;~_%uf$Gb1#1NEy(^<RI$WiFz0Mmw6cxK z8FwQkg$cc0%ItyCGKMX$U1D+ZJ&@9BS2r9Ikk~sfDZ>eJ3QkhW{z&9Q5Drb!(I8=@ zV5&YlRKCEtYkS(>tTN-Oz#Ot2c;g+Nov8kF{F1-d0gF$7!r7Q($3%+Q5Y-e3mKZ3W z#~yn2^t{<QU*<w&kyD1sc<@pt$kRo0@GS!Q=dxEd>aL0Twm9=jPFlcSTboCrvXu|i z_ZQrU{(+lv*_%g$Pqz#<;Lj{Ie_APfdWB4MRNThH=UkN)k0O>9W$mym;3jzlUe*es z4ZCWu#a$u&xY0}Y2nmx2yuRDb*9&+6Bkd8QwOZ)xO37Gy?e~Y4YVPIy0ceD2bO})^ zu-gk({LhzRIgtE~<qV%PGs3saz;~sv(T@pdR!AOPbLsP;+?CD1$mm>W4D<RlSjvvW z@tg*R)SfR()1zrF+YG5%o02z%!;x<wIhdsH!tD9KC?N){5`~31m3~(3IRh?YB1nRw zrLJYG4i1!W@kUun+*wy|0A!>_a%C9dfXRp>h>}c=;6Ly!2mqo2=4p8#0Y2jTc1$~e zCeqgw=p42|fR$4ou_G?}^S^%Il*-R{*FQUJLhejb4-RshVCdhyp-m~(1(HB)lnn%F ziw4=iEFkbrV+fN=#MSG+{k0N6&(7Ux{xFdFE7mg~yopVW84Ln^ii@`s_6VXGDsR1k zn?Z;!+58gmJ2@FO)Kf7J;5Lg+JR9Kx@U}khPw{p}_RfKN?&yX%=B4#Q{(039X1Zz& zI(Rq#m!YB*S5JQpa2M1eUzMqaR(y8&xSV1*h8=D~HbfU>!(g;w^p6MTcc27G$H)={ z@EK}XceQt&7I{oWbXDF&8<Ct#6-+J3s+49MLQDFu$l6~z`rr+y2UCNR3iL)8M!t7w z;+9=}?>~pMdu4i+ZBA{(ti-_!7sqjJ>-`;Cl!NIpy()dMW9jWp#WIvA=+SI@sDFLv z7bj+{%Bg|zTW11Q7PyzgY+#>k?I3X*GkDWzP~u*tqin0IwJfsA#$S6>S8IM(5TktR z_0bOw>EfZcy&Q5Irz<3Mz3ves0vbE_R^B@;y-#|0(*z;R6cH{4{|1P=jnjG{-08&E z!CdnIb|ZBYLq=&KwLb6-K9<qlWL-tHFaI{uZ2>AjLv!{*rFOz6wsy`U7MC_wlcnR% z?ki)a4X|!np*SH!*s20%hi+sJzv@c$w6gi&5=;{QM`EfbN|v|@-t16{1Ty5$6^tt$ zS(i!z9{|8#;GIWKSgwppWTjHHK6~372*WXW6H+{$Je6SM-gV||!Ts|p{g7vo7}vTY z{aZMNi<YPdQgd((e28~i*B$6cP>Bb)pV|E?U2dC9kMSu^3Sdq|)o-6#*$47B{<`0B z2~T0Hg91gj*dDoS#lm)n`BKONVbrt?E>!z|W9(=|(+0Xx(^a%~Uw7`Dozc#W+UTtd zV9tfFs>zXp`>Wfg+_8&?`d|jX@Q|($EW+l9PzVd~OMmxfeXbpyVY96QB%;hv-8Zut zXga!$THBdPoXt7jqahGjimG)u7(RV8`&=ATTIJ}h)QPi;)LjXv;n{&$iO+KBkQsV; zf8bsdUYSC7=IE~3AEwnLGknev!T`&OnW$0?JFQ=gdX-Z2!}T45nQ1jX!->Z8n|Hl< z#!lR+Be2l>?$}<@_iR}r=&*#FZ-MUg6u#6Qze+MY#kk!Ai^G-K8<n2Eua!NGuAAj+ zYcyC=@!P(q-Dc$f66p9cQ3`$XgcL1=Q@I_{d%-d7<hD)WXE81jOnol)Bv=4x6<|Pd zcguAGXV|`nA20f;%YG|FHT5FAd7_E%jK}6}RX98!m&l?|jmNoV@D7O9z4YpVQgPa2 zc^U99f9E+*GPoo9(WUynD7qKkrNQGTHj8RSQZh(H)+0>Gb>b=3#cACaB*k$pK3`2a zb{=1m^<#r$s~Ja=-G6tf>Z!sIc<AgsE=-x)8mW~a13`?%mdn#))arvZmSrYVgu}}5 zQkV20YqUW2lRaH`LQmp6%8~Y$DC=p*Y}x7*+1g1wx)vgsKkJPk;8OzH7WO2~x=0TI zPzwYAAgxtKZ@l*r+1_=pRTJ$TJD`6QHht^eRRRW!`Gs@4YSX&aU%%S`WU$QC=`cPK zRIJbtKdy1lEP`m%D$(Q`5a5)_FGGRg&qlu`H%@7IZb`IdFvdF%D(81SLG4jQ2CI1B z9DJ^d?E$;vP49QKHhJl;=eMJwMYL+vq@5XkAM_FRfD@7orFX6ozyOMbWF+Zqr}lqV ze;H@3lY)U?k;2h?QDIVc9ECi?DtiWfO+vQUG38Q%UKk_63BG$J9B`v>#I~C|J;{cL znsdIDMlpee{krUA0uwRIb2-dV?LXp;tuQDVt6O9gy|$$FN(LoVNk`!32PK>M04*wU zIa3c~h!N2%aEb!q{4K5Kf5`mr!vFipJV+@tfgyEZOx-umZENGd{623}ec3eHlbHLy zwnXcs)xM?h6T7$gQZ_dFiHb{<m}vugN4-~#ioyrrF9WtNc;&CBe}6y>w{o&*z>az5 zF7tBEjksyuZ%k^HcV9O41yM+}I<_13o%(R@Ape$TwyMAoScn1=F&NYxf)+UfnB<K+ zfuof9rwOsJffe|lf2^UVJ+FrmI@ZUbOtlB#1Sb6Co3NY#<BDnPZlpPVC7~(DXbv#J zqNjUNL?7W#=kgKg)z&ibP+tDg#Zq25TVEp3RVZal@|tOy5}K^(&;bTW9asqgUPaBa zT6AHtDSf5Ur5l{$<KGbf(&$eC;71r(lM##UTo+L7KaBvDg_@Kk?0K>Q*4@6#)H>$% z8D6-KG#6eTGDHzqmfx`DEB;B2utXDJt24q`>Z4FLdM_xEC3-0mgQ;Lu`TMODcLE%6 z#?ZD$z~wqepXFZBGZwL4X)9XE=rpVl_@KEx__>XrR&zH<7hmq8G4AR09yP(yW652P zM!nYMoaJ#0p+fT&03}0LEFAzc17UzYb?q$9cUu@_tln4Rx!xu*5cj&ab?vFoMT7qC z-$34z41IJ0W`oYW*!vUPM+;uFR%FbYe17bK^VQv^Qi%XpWcmQHl@;y)R_k#;ZQsVZ z^?mSN>STS@kvn#lB2R~4$^p6FX`?Z$T6F7iQaJ8u+G}`n<>Hu8pYGBWINfp|Z^`=* zg_UUoU_L}w1|<ukBQ0|^h4M9ni{0D}QG(G4X3h$GdII}X2$~Y^R|wCxBrS?c7b#~E zMF3r=^!x&_kZv(24H91~MNH~Z`WanMKr*7fJvzMaomeTz2ztU4y-h%gQ*%l~pzzEa zR}z=C^g4>)CJNkr>XZa7oGAvQ&wQ!d)1DK74u(Ccn9&xN8XTWjya=~=iS^8XQ7#vc z<9{+CN<*92{mlSi#D;L}lQ+9xCnH`S<@)f%^*TujX?sPzD<xu-IG3^;c1$E5<<TWy z5R=abkc?s4T-n=(CP?ae#HuTuJ#h%Ydw#7+@eqxUM_9+i%!!S^%@8xCc+;$Iw^ar~ z_!EVG4+{X^n%ec=G90L`%|z9@mDD2e7V&m$NtkMk!h8@UO~?0wdy1jg;Xy2fq{3wu z!%<EJ9Xth?EvPg7T@V@Y-GF1Nwpv;u@i5zuWVBtc!dIbc?3Nydt_-cz&h4vO@karq ztR@<5V8uWg<>MGmbp-X{#%XIrMIR3;fa!)_k{;gD6($m&20I8;QTirHhPAb%bK4M? z(7EO|Y@|Eg{9rq4$4%YUj^)0I>pq6))VE!ADjU`2q9WIzt2<<GHFO-)BB_UK@Vzm@ z^Ey9m+P7)dJ9!gG-m*i0EW-1hH)Q(Ukz<#r8Z3sHGZptj7oL|#zT}E<^912K@AJ}c zZC}yn(s&QjJ^(f+H>#CGnh@bV+G+W%lSTc`Nbf@|%GWiUWg|kA?X0gq3rOr8fW~PG zK5%Ityj`JZ^A7#n#>5Og?RZAxY?S0N7GK_2f*Xw5{lGR)Hm<puZFbjB)A)#Q(i_T= zah^7hz~0)~C>$CvJZ6b-;FVF2r#fuJQ{(MZw=t|$(gI5-RFj(-kgM#Bdzm8(zsp9- zD!(u=?_&lw*FoB%{2+tXc>z=4=Wyl%UAh?W0<wA?j6iUsACQ@9vozifq}{oaH2%TP zPnNM8E^LLpj0S2o5Z2chm+4(#X1N%m5({XS4b;4#s4TY0c8lxw99(^r?iNtW1K|&k z>PcLQn}{eCU-XS!A9uFlo#g|*E#_9z03%J7Y-GftpVRPCt3;~m%ym>30N`6e(Iz)h zjIdMd_=6_j20mGOq-+mSr^py;QSh;|9AysPd=8J8)53*>+zQ&Gk|iuJ<18EZ$YXe2 zvC#r*(ub5gf88v}E~DFb@?JoXonB%bum~1<QPjJh879)3(Bcnj7T@IdctN=uk=WT3 zSc+NK<0-zVxAz^(2i3Kgz$c<rliEZPuu|h^=^fvyra|5`CVxqPT<s_7*AF@@5Q=JO z4a0sk41IfUqkQ?tcDOc!D~{VY&Nk5*`6nuQJz%<VsS+w#yK<Ux3P{nJ2Yi`{)K*7_ z?;U8(y_&%+fh`c5@Wl6zbu;F1zFs2T;6F^P7t}p8njBt$p4a<*CtEDau}5htNhExM zgIP2B;&(9))XKl?pqeYCC0Ny1rUv!O3mV>-qno@<7h>U!$Y=Q9YQK#C7iZtNor%_T z8{4*RqhoYz+qP}HlRU9)+qP}nHoyIzOE`4}YphW}X4OQ!g_5QtzQ6=_5Z7Da33da) z<H^}Tg20D%LK^7CybEY$IXXj7{6+56Ddc*Q37Fz~+0)$=E-gs%3Fvqc{I<DxBZ{hc z5w~_{sh`Vj36Zqmk2X@<;4*pKg3BDNM=0s{A3`QHcvDcj-&9doR%niVqkWZ(RpydU zo`cUqg;>5&>5=p|a}R<#u+I%vxV{a(Fv<xyhOyScy#e5qIONji1w{k5jQ0;ekL(C$ zjS|o-Qk{8lEyY)f4ClB@F8imgU0pP=<kRB+wb&06k-p1_&QIUx%YO{!$YvM)v?gBO zm|B=QCxTFYBb{JBAwk#3OPd7yT<)A~+m@$Ox41ajKF8TKR`H=v#VWQGf{pDquEc{7 zy;lw46RC-SZ(vWdrRwImv5A}@iAn=?JD`48(12V3?9r*Ex*25bWoExqgo=z0NYb)t z{k|Rz?+J)p2oq|!ZRrE@!-ZwZHa>s3n_B8{f=x%z=3Xjey^=Am#e2HDpOO!NU@*WD z7UeE{tc*v}ueT@6xgn+7rvi{D4x+H&S9DCf^=9UQ6$95)F(#p+)2oj=<q!Xy=Gp}W zWn0v8)c&h7I7`_NWw~+Ye~hWR(5%_Vq5<^nZ5G<mkzb6UuB|5cnFwOiI76v`gS>qG z<;{9vE*cP3jG|81>vA&>{IEZ*=OcP6iV7N{X`L$oRHJw`%?ed+|A%~cntQ_SqZWmy zsv}t!1<#AgXv<PfVvDLd60tt;M}L6zZ#5SW@u={XN05fHHW}Ew8VbVEwkMiunnM+I zPj6C`Xy{)9Ob)5h>T@+?8Mh5t+2md03|{duefVTA4k`^`WYA<U_3jWD>u_(Shd5<e zDZF&h;@AeWEAnZ{FtSC$%nQR(NNHa#k*zp4?0xYx!)tvbG{Irn8@Q~UQ;U5XPC~Ak zdv!8`lZ@ytrQ2MzVYr*eDbsG`F9unG(YDG~E|mnDTZlU1O_W<>@XXSjn*_KhdoNw* z@N#`3=}<dbIdJ9;1d3Iu9;do{0=d@`gG{JJ{y7_<%8rXx)`0I{yX9(_AY;g7-88q5 zcCwx7JFYgA5X4{jI)LekzTYJ^Up<>Plr7R)`3EaFXr*&?GZ{#W-*A=5OruNL_@h~c zOV$kk<@fZYt%N$}c&YzsHQ6FqN`XQuMyl9(+;{ePdct9}3Ikygo!h1>HV*i*vnTkm z4XjbrQsZ=W5b(_syv9?{Vx=okwM8Rpv)E%Wuaf5Nind-*+m)q~!yxSd0eEKhO|Vr? z!LC4ME4EVim{0NrU=>l1o-H{H*4Enq$zZvT21p!iq7kGMuP8VvoSyTRpEcr|5VLif z=pRxgJP5+-rS$Yp5{mh$YO6CTT*0X-I7cZGI0kYw7EUwYv<^RXZIZ0d=(?)@odhGx zQ40j=KnqdUi0+L$iUOtg{8XUfQ`P!NQK_|Hm`~l0KN>f8b$~WSO2(1v`1_DBP3f3q zK^yTGg!gXbR#5(tMMt#j8k)mcJX=D^H5eL^P1DItMH&veZeA>~%bm~|@z-hT@XIe1 zVg_x*?~lWuD!jG)K9?W*%3jwGW|LPy80x?=2nF{){{;e6h?vM}SjftcO~W)X4UL=O zuEZEF?g?=Ujz!A8<;?dK<Y9(FE|x|{C00~NM2DP2L58{8H@)ME{{79!(SLq0O?YTT z@l15wcOd0J#&o;9Yhek>KMx2B+Fh@Ui{;{}r&Q*xG*qSwep8+yUshz<PL;ZTjhM8+ zZt>HDY8xC_BHVrdNtU^noS{d(qRz3J&!vGH(mIQ++=v>xQI+rwCxJ_GfTIT0f|1gv z1%w)jJ0Uh~<W~6w=Nw{RPt73wVi)1|eoj91Fu>%?>Loh)rFSwp#wkN-S3H!6^bC`& z)J6sc=_Z+6WoZpl#n=KK-Dn4#>}fvcQ1>%dz{QtwA$C5BlFV^jU$>OxDc}&fAN>;w zJY!5XwUa__dYul{W8^{6<F;rBpvCGEzxO&{epL^=4ZP^~cIO&01CgJtd|HJpBl30s z!~U>d*!=1S@&SwAf9d~8WO>vzK;-Kou~lksyCM8qq#WuhTS?CRi`p3n5ZH#0`EpA$ zTp1okD<B(%)MpmuT-^(J(w_Ak-h;lk!%c&lN?N*Ksma7f4^n3J)>9Q4miTL=!*R(| zOlQs{yhPzg@tY1%rP-Si+<xz1J(V%ZGm+zEzSrAK+peywAKuZ8&h0+iMF#g~$KA2P z#cPq6Kb5z)vjkf%?q8lY{o)^DBN?oZ{*oLqN#nuRfWq6*@)v)NQ32^F873m07fbe% ziyo&K0_OqI{Veay(QKK8%m&p>Hp9*L1ZILKkGsSau$6sIA#f2QCH`Hbf8M4T6#~4S z>##f9s8MHadJn`)Lj|x`xT`{-|5=ZveimV%OFs9lO*#*g*duxTF6Z?s(p(4infWSU zm6SKNae5P{wV*rhzis8=zS4R}RhZ=T$o!T|SD)P0QLkU8gK5gC8ahGpF(Rca@{ho! z$|x;*YV@Rfus#MWsKR7whG92}bo{!JCjvUq&<C3N9<{<VE3uy2aEqP~JSkS?9zzR( ziKoWuQe_z=77`Q}v5{y}t?0_~2j;#*AKqsHdb!&Vg74evt8Rx+2+G`UP3MQ!e)lE& zn-Ms!r{~5K53TCGdvlFI+2k*?gaKw)gpq)1I05?6uVpb^aEPz&|EogUq2+NHx9>=D z1q8}zvCzv#K)n3(!_F89c$!I0r%JoxSy=FTebS1?Vk6wr)i{ME(ibhk%@I=Bz}<b1 zc?a>e_LLxk_KDBp69gJNWKHeOiE0c(w#`8EtH%)*G14(msO-+=u&UPTPQrYq<QNpt zfVt`At`NLzG#Dl5KnScQ0e4Wq0(JnA6Oe{u4BJ~n<41ZnbHh>rx8WcUr*^;)EM0mX zKt8){7)=n0j1!nHSM_qE7;m;<5+t{oQAk<7YR$48*n!^91Yn>C{`#K`PPzXKEXq?b z+?Mf-4RAhP^oL{?m)@X;V>9%%iYI)sIWHSl2l#rzhVM(Jrc+BX>?MWooC2mIApAKg z{6#5&&c|?RS+cEy4^6E$+ywgw`8EH%m$AljO4%yZ<VkJq=R+QPlv{NGS(FSXt}L&S zK+~8=3BOi+>a=yHDKaua=dlAx*9=YCQ2h*%nLPEgq8sWRJOu0eVkHCNS+`2988-W_ zAR{9|vg@0nFa1=l7@lna3%&WB@(CPBYv|rFnAob><9G^Nw4<P@*=k*;DYGrCc5e98 zmBhalc`HV_xG|S}@Vz^FM2+weqt_Nf>Ct`D!<dBx-g|y2cC6+DP#3sX#ng<;?#lBd zD{&?JRq&_H9ww5YB((77p?N&1;vttI6KZPwgK7kX^bUQ0|0Vr`g8M~2-otae%@||` zYxcL?IJNzVUA5$Zq%MDlEc2;Gj6;TJ6o$eQ2L1+vnBCcA<3p6dxMfCkLtwZ<X-hid z>odGnn}u@;5}r4sZ8`y#NXv4WGqAjCb_k2%Cv?*O>Jq+M5aFg5VdKYjZ6-b1=MM54 z0cs8o(Ee(E=K>GlpLI_+n`Tyzuxsz&M1&=oie5IHs6wt#?;Y`u@{97Ox$xrRJVJlG zHWaGbz}JU*9~N$>bv}S(K{E^V0Ob7>wikciyD7AQ7q1D7kuKWCMnO?doAKGW5jI$C zr49gK<SICIXIn}TU#<v+mCTWnG6unEO$oS2)~sT5EL^Wn7}?l;(qS%QRI7#YI68me z(;ZAA2@29UikrhEW<?>)ITP@-_m=(TAc=u1K{%`h?4zwn(f;8ZBJjJhom%M#-z0MS z7`5T$`ZX|@Go&VQxJ%^ICy12s{a~IlZ8z-5M>2zTTMZ~Tfwu99x5hEeev`9H{AX2C z6uVs;qQra7?b=0ebb@6jdQXCra-Y!c9l^5p_|q?m%o!(!c~h+6hmNr9&r5;92v2H7 zn(E*)a+ySePFH>hUew8OZwy?Gp^pCI+AD{aJ)V-zeKM25HR^s|4zuytcXrwUxhx_y zl_=(j8@Z-&+EawyqoZOaAxH_GB0{}V!UST0;1hFc8T}AaNT;u6ItbB!=M~EBMlbEL zULgKS{=^Lg1pGb~7<*Byuji~Ej@RizG#Ks2ttx?CxLbX}83AJ*WWT<%?y2u**&yB< znp5wrzB{k<Hzs6@5OUpQm~|u8^uLUb6g<%R5K{jkCUdeSRFs8@gyIW=py~JbPi{H? zH22xVP4;!7sSL-X&3Eo9W!$(Xg11CQ+oPiZ^~Asysg{GsEEbLF8Tpoy#5u~v@f8Rx zVZ{hP=F@>XoH6RJy=GRpRSuD<uV_}-R7@8PPaE(3^Ia5Fm?2Ng%0-VxKuik88p1yv zQXca)5*Q6fxMy(?T+Mw6k48Gbm<>8HL<x79I|d^X4WeSXW7x+W&NvJcb?UG(i=Ck! z1PjROuvNpJy~B7A+js^!5_-0^u1#IHmp-Zfzs#$JHM5(bkZHA1l#U%Xi!Ki=0Cs|6 ziUHm199}m&p`fkn0j~+%{U~u@d1jeTRqcA#-nf@ap6U>W$=itN$r&JXE;6PNEpZ&v z8f_LCka6h0(h1779|z=A@ppaTF2XWG8~}fp)Jx%igTSJ?CO>@!tHAae_nI{mb9I<c zK=1)z!~P{d;WH2D1T0K%YvpQc)(5L+<wpeUkXmf#620@MVUnzL-(F&*>Gg3XcZlGm zOEVwOGz<dRz7!g<zEa8m;QE+KMhkFpA~$~AtS^ClPk#h{^!GYv6GYw>gQ&H>Y}@Et zzqVc*WZ?UfsW=_bw<|%i-FZsINeaj>Ffh;fipowN?~uapfEiWj4xaglSSJYFx=TXc z3S<2*I1(p)=k$3lvl{Ol0)VZdR6;sHLDpd|6+pY2`YWv^=fcL2bVUB?bv{~h#Yo{+ zK!D=1M$OxSAQw`z3z)IiIZ1A=*JPQQF{#T|RMU#JyfL(47J8CXMTWyKD90#@{%>jd z|5--I$03+g9jZRV5N@TQbw2>7t{duo{n6Lo&v$oSLt?b7+b>m>BQEhkUI)e{hDbaT zT;44M-GW~E)QJ;>*d>FA2xD-4|HF1SL)y$KogvaL2V@2zkgpQZ{~q+-Fj7+3g*de+ zWP5D(5T!&CvJXmU6!4C+_+|A)v82!m+2bdRr0?#)|H$00{+{!#O<yp82^RvyQH+VR zfZT};0q@=c@WOP?-HrNPtfz<FH}Z9{$44kgpNMFd#~?5$-j&DagZrx!s^8#pt_?N^ zzQ6Ars1y?`P<{6;x%BEmzNY%tQ#vv@fKKzEOxdzVyM*e!Q%dJkED<=~S9Ll0^0~(m z88;%Y#YTn?2V-Di#@j8I0C;sdv|)1iV8lUlxSX0Cd1GX!l3O94!Ie(-NXD{IPI!8A z#pJJ=vFREojPi2LB2h*XQs_8*K(m8y9}5qo%@TB!jj&%m3X=eaBWc!gqdj6iBu!W> z^k`qk-o9Cr`90mK$=}*ope{D2q51gZJKZADNVF=azJhS^jeH9(^geLuQh^)z8@lw) zBBh#OjK|HD#(e*gdx%nhigz^0wYr<cuCh9OKs?9lqT%R1T1iJ`g&T`6h~nteHgO?& z4|y$%b>M^X^;`3RS_^b-sl1VX)#(esX@Ag77Gs+UHURZGG$xM&t+;;^PevXyp+W*^ zOKj`M{>{;G%tSH5Y2$y=+PPZGjrWijtvJQA4Ar1C^4h_%VYZZ4Wr;cZn?F+0`xwlL zcAeHdhL_N`M5C@VQ*&cFNout;`qP>RqC48CJn%)?21o0FZP-Yb;>xSJ54ZUV?y`}` zoFBX&H{`85_14ojwU)nB;ca{A>O2#!FVS#I22_4fW&T+q*|ITKrpFuYy~&X`q!~q` z=IH&j&st<AmMFMxYIAH4f)W2Meo@a(3^`8v3mtI^?gTQ<+3A7Weml9$`lEAZ@-7c< z>ScqKxOhu47Ma3oFFblIB$?-MtAW91eY1gkA(fyGiz~Jo;Nt}@Vr4h$Ud2+{sc($Y zJ0==NK&j@SsN8D;CJs3u`q6kE)(R!~#2%9D<u&R}-5dc7)BYu(4zUG1KI>e>LWWUp zA7tU!nK*;#C5oPI%P;II12Ts0Z}+$dFMyxCzO}pSL^o9izQ8~^?cb9}_;g7&qdfG0 zbNV_G|DO-a+p`lA!S~rB*)6AM=G=s{G3G-|5w-xJJ3d)dIm?_k#fEkS1cVjmQrmiA zgkGW2em8Fege74VUib`aP|hx(i5&ZmI;B+G&S4-NEUEIJ6>L2S+)b?tH<!eD9a?%g zl2Hs{Gqu+3Pe@Y^`f8x%LsfM4rCXKON%a>6G@lzWrH~8ujVX}Vr;szvnUN}(7-3~? zcH2!YQnh(@S+wSjfpL9WUmb=)e5leCWbOeRc2M_cincZ=FgPuhEful>tS@%a{X|9D zUgv*a)Fj_h)URKEFTTDQK@{mM-G|3u#_YULt087lmC6TPDn|jU7fKLbei$WBN#tI8 zXx`^RV|z81Fmm*EzDvu}0{sH$dYDSF8U9M?ULP#7;$i4*Ea+XBBbRM_O`%7p#cikf zQY#LXNB^J0#&Xea$KgRK)b5h&Nfa*q#y)R%a9&irH1%Hhx(0ogP(CgT$wb!lr!&4d z-&4ds*5&C?7dHnP+WnqyZIu4$oSuanKM2Dn<2j9f5f~4-reKHXQ(04ZA~wjoBK6V% z#-|z#<$8dK`e%%*gvOn(jFSr4;AHl&YG1^W#>mK<g?Fl`R*|g^&s9+6#z!04ad&<r zpOkD4eaIZoszA0&1t=CuWcDt;1BdKLqU-_R1U?eFno!k579~t<QRhF{NuF#HAdufz zd*}Aq#a3KCddmD9ZUbeR@Tc5S0Yay-_U7e$qmm)Nf7Ne~155Nn&z#tepocA>TMe&Z zCgxz-4HXZbi70CB(($@Z=F?iE$teix3o516lSG!cmUi0lxH;;1Fa>9UjlQbo74;<s z1ybGya>BK&pTjW%*W!FAex#RvZHN|m-3~Zh^@D%BK1Gbplq{LrQ)8U@3BLXLQM&z@ z<pl#OD$m#aiCW&}>qJ>V$=@(LI1a!mC&PK&jEvp3lRyRa1(u#x2>v#YH<yWiu2XZl z>IQ;TQ72C$%p7BL=_#EQtblBvj-44Lv6sUyS2u;fitx*Jl*jwM97AM?Kk(oVV?Zdn zfFC4!WDK}|bJ@ozAEMZg6{ilbqMV9W#3S4oQun_jK#MG8MVU}vdrI$8C?~u2%vyA- znKj|YDTn+~)hq#kYp4J|@Hja^cD5n`dc1pSqUD8SY;S@R!F>W>Ftz+s?oaIzlCrp# zuQ)mE5MJ;%JP3SaD8%Av2!Tvf3ulNS>$(z3)2diRXG8JXU13s^+I@+wB+9OU1+`Iv z=>@+0;yp-fGKjRgu@(buTW<W`70RF^bOEVrsZ{U__VSaWeIj8+VwIDG_Gok^kZ_3D zBD)bMAIQewl7q3cj4^=JS9rah+`-nKpGz5+^CF6~B<t^uCPgD{YwCK7d<DfMtzR<V z7n_FIZp4q6(0@b1fUqgG$bo?Gy!Aoex=2m*dl>wlH>$FnuON3liGOLx-qGR9rulM) zW}S~h_b+zbyP)dFL{sS;Lw&FFLAnq2ja^ov2df7j6gXFE^Co<@OZ%RUqNIRHP>CW6 zlcM2ORDuX66V^n!M|<L{N!c#_?THEHM8-8)$qWLZq=YX|NzmF6@3113C_7$(19LP> zD;#I1lW=3RQ_!Oc(^1|*NsZ(^=nZ^V-ZZF1<o(+?^i{eDtT!XKXERdk?c{kP>uXm= zv5>hqQS#ZsE-x(1v4EDBRH2342w7%e0Q*2nQ+$zT?L-cDMC2%{@U~0U|5vPJVZV^` z{NA3k``bnea=xbJuU3w?M}`kg^vMzU=9@<mwR>8oOGCMUEa6uokeCC;GVO@@Y7gM; z^sCfZBHl6Z3n?(P5Ib~7>y$P{l;wQ52NWA2W`GnfYG$$#Xk{eGU%4pBX3Mc|Z%s`g z!)=mqU&*r}lg)cR@gxx^WI8ZGJ*L)7a<k#|l$+c!98P}A@3i6@@kiwmve3!d1%y_D z`-UpBhmFuh*W5#%`9ao+-l7$+>tdpp9Zzn|oI+-UmT3lQi4oseFh2jF%|a60I?-cq zXgE)6T^3prjkw+8%|kd1cF|dR5xw|JeKSdO=PCUZ|C=YxA6A}1u{!bD2yOUvJRs(w zJqcb)bxPg9k=_PS|2c6_5FC;#fAiq|NE=G8qbp{C9#!w)_Q<>kKLJ9q7}J-P@u8f{ zu~m5|@AXX)t}wM&*Ci`qF^#SiHl*#(;Zm}b0SUO0<kSre!8HAdu(Cs-(>?*mP7~=D zF~|u|fjWB1a_>trW&vCB;Fa=<wG|gAzn0(~bd){i7t-;v)l_qp3O4;aJr!zce>-M$ zssk?E?2oX<<7?=Jdct{(`11<p|3}~VNgWclURB(`wuYip4O4H8ui$kfyVDG*O}KwQ zBBCNIy-}#U!O>Jxlz#5&G7$jfk+vOjtjmmm(C@=v8AV44LDYTzXXH%(5B>Mgnd9My zspT}00z&gXOrA28@n5$F0Hkhn0vgX#rQ$jG<i3hi7h`;B?M!T*1Zv=w*-@a4K3k}B zmMt~ci~CquSaYOt9!n0!<6x-B<8^7z9~~3a_jeoyDP7<$ARq|1J;BsOV6CM)sxZet z5Pn&!d7g+drrn}6QDKlzB09rj7PBR`PzotPc%jGGq)40nPE{ReEyso~pVty?IN`qR z)bh}6#`s##oRjj$N~aqAU3??pbM}pgkIQc^vzIl-C4$1}?)=vkQ#d<=MGhPg|0O&# zw=Ud{2MxT+Ex6y~Eeaz;#l@Dz3VvU*z_-rn#nQmQJyMy1c#5*^)aGzXemSqU>ub(? z=DAgLD?<xx`#ylFLI|&XqJVo}Xhn$i&OP{CTjf{N(T)cdh|V3c%pjz`E%wb<`N{r* zI@}?Dt=dv=Y}|#^#yh?i5qv1O!+W6|eYS*|v9ODsQU=X-wamuNdv(}o-Uk;hB`w;n z?+LZp3EP4NZu^I-&8K#ysQoc)A_yJu#ae8f7|?+At?=u5LMkw|M2~cFNPx68K&EYu zxP|IMN_Dq5!~@ZYF0uuR*b>|%O=-<h9(nV#P?a_$XqW5L=-LEXXeOAOaot~qU+m_g z9jqOC5;q{FwvYHRTvWyKMVhesJqP)nipuLF!?QRTL5@C{$m@uW!h3`!;j=-U1)F=+ zl&S%8G>guRQ?ZhSe|jeJTBlwH{NulT_Z1Y3XOJx9%xd!jF^);l@0=ygL_wCC<cT=| z;)3gj?VjKFIb6_Dj;bdK{}?NgUhurW!CqZJOCT5re|>N}$<x-NF<%EvMw)XF30XDC z@)yDhz_tNI#h$Oi-9Z1|J~Q5zuvH8NmxTsM{Or5WrLHwOxV{$ig&t(YbYF*}VEiS1 z`=Hm*jBrkB_XO>Nz}}`d-H9aj_K?$hI)dTzu0QLcZ5y${{;Fbs%tk!tV?9?jpa}uS zzpnESLrLZs-c!NfsaJXd84#5>sz19oEhuBQ7R+SkhT?XJab-HhTC>6L|N2U__?BX& zQQ_&*#}^!Lu*<1pz3o~zisX7TR_`XB5$Vhj(_%%Y{v)s`)r$gb`@X2Hr~Kv+2l$n{ zf1R7rGLi<>Dj0ja$^Gp<B4W!fsp_6Ye?+2|QjDr?ib3zd?tvSMF|rTP&z|qwXvcOg z$yL~g%B#HRM!B8^VhnSW2o_Qi)Tl8Gqkf)eQPp0we7iMDj7X9s@j6k>C;L!kVIF2Q zgvLh~gi&tg_N(X$E@b1<e9)#+`aG&YxZN$#`Zy{i6a8|gQlD}C+<wn@;C1ul*Zdq! z<T&6JcmmKJXxJsPny)|MQm{G6UD9!P2bTrPSEuzChX+&yx(FoFp_RItLIY1)5JXT) z2$NN6r$(mA5U?HtiaR*(NOmlIXdq@sDQN?h4AW+~7X@cK3#WjKh;s@q^@yLS*Hw{8 zc?hoDwnStckAjBm2^<Ek<`e2*JxbNquIz2t)a3dQrp218ORDL#v9CVOx<<j+QX{$2 zlf6R>&*RyKz2AM^(?CsLMf80{KOuL>_pX09h%16Ht29|LOP}Z;fU8HacM;1<cC$xZ z42ZS1_st*ZjzdH0ZRK!fuGB??r0TN~N7K_s*wyI2uLl_K>43PwHE!!$H8)-+KTsJM zQ2o&B?Bzk2gFG!#|C^7YqcT!pwQf|;I8^p@<#@4}zD~2obyO_6F?NlxTTHe?++b!% zk|w{Ypt2l3|M<i0{=u-{bD<xz<j9w0&kZ{kIc*+N=e6oxi>Zm!?@^Y31=w&ZwDGZN zSc$ctZo4jVTSM6nj&PXS1_?>ktz03sNl7umhUd5P9p<vyP6uR;RwUGL<6-?g3xx{O zpca1<NSnD}!Fjy=>ct3E!%W@(`p=2?=^~ymqPlTxzGv`7gF4D!?`yo7`OpQCZmoY@ zfot8yf&GMpT5Mdya@~VrPiw&-Y!;>}J<+dzqQkB%tFpQ=i!A=RZG;5caYxFn73+Oy zJ#^UsTzK`j7FlSt(Qsn5><+@sJJYF{s&&pmsujy$1aZH+8(Kf~g}nW!5wPB<Em9Ru zE4m|~uX$1!avl39N6V8{?Dp?dM^2WREhp&&6nQ{9T!)}$uYibTemP-0JmSIBh^Z=( zTxz%_<y>7vWUxBi<3u(6K}24Dnu)FpZF0rwZG%~<r9wUxVb0U62@sLmnbOww`g>0Y zsf{X_X%Kpz|EvSG_3@lX;<7(ZqAnLIRlDXFe|xNJG|FK{Br0DOUisQfebSk?+NSJ0 z7(fM}G`qmF*BC)aHCM&d;fWE#P>^AqMdLCHnlqMz6Mt-VN!mxCR$@Sg#JAamv}puv z^__l7Lv|F)>MLO5MaUd5EJj~vt3X-3s(kn;i8uKd*wUW~#h71khPmfl%JJSJez1tk zhqmp0<oj?jvZ5Ep3tUA6RLRseQfkz@U)SINb(92Kd6y#*Vh}5*$DeK_B+rP1=Dbnp zWU7YzO;Ms#gZ=Mb6~4*Od92?jCAy|tI*7p)T#x6Eue8nxWY_E7?zhlpt#NAL>jJ~T z=>ZQTG$Xn_mfmvNyq5(1s<&ePXz``DXC24>2*=v2T2a}#DdT^N5rx`gR%N#6fP?6* z&Y%;BXB<7k0A4=6ezVna3ZP>z=||TdHzx-3zmT^DIAib$FaK7wIL|a(HJnbQZBw<` zq1oObJ_&y1{<vF8AR26>8LF_2j{StF`cN_46X`*W@{Bapy5!(TuA!*!ZJjVk&?Urt zY3yno?J6LYc@{OJfkbmh6}-SLi3|5K?uEwi=Nt>0w0kcUL+FFAxz<9_>L(D9Ued}e z>RI}-+TY}5w>~*{V@G;E=wZ7D#5-jNtK6W8eNa=<M3j)daoTBPSLNM+nCq#snQ<NZ zjU_LtyPWnPS(z%yM@Kh1IlMn4_t_8(ip1rw+g<vGL(EG~H&ViZ=IZUoHx)8jd4~Tn z^I_RG{x-zpbKRzM+^g_hXnDHj%Te-c5|nH=#E}<`-C?NrZBdNE<)FShzXNi|*;z9= zQu6WK7J4fxs&yaP^v5K9kheWY@?ok9$TyR|y{i+uOt`A?^C8yJ8+b?yQZ9*ZQ*6_> z`#8d(V>Qj&Qs4mp&Vrs>K_&>eeAlsjE_5p+`?^eN6r*@7#(AM{SUY}$+%so0e{YWk zC&|SJkeSxQcld@~IEGoJ*3kQ$e>-RKC<==?D-BeBpHk|T<%j%@NlvsQ+coT~H*<~t zCu$#FN3@{$2aaGU1;_sYGP}J7BIj2;Ipu<r&jTeV`$!X?C&;S35QtjS1^}vOT;1Te zb(v-2tdXbX6mOa81KVd9odgFNw6kQP9|P!nwO4U_gwU1y`xmS`@xookJ`VPqraXis zB?7Kt=cv}hd$||7N)}F}IdL1C;1q$YEpjgagn%VIj<U8nPgKT?-X+y?mFRU_7zAB# zKTWE*;f=8<ETUKwvb|;sXa)^FO(hBICnRwi+4e9YzS}8l6Ytp{L)<~rvJx{pGvcj9 z1XC**RwvY+147{{-uTyEIpi11>ncEkOtY$2VkT&h(W#Jwz@Y|{CEJDvRz5FVJ!zJ~ zr6`R=`-FO&wASBJFTdUFpS3;S+;KY_>Ir|TWsN0#LX`k=8U(twbhyHkjO^T+_?A;y z2lO=%5F`NMW`!t`5S7d{H=jYPWaDN++1w%CA@1Isi+j5pwqgjbvTryoKe#XD%UiiW zDFrv>3zK0~x6w0)-gu<5YLOrBW)3Cc6>SX;kcld!0}BSq0gZSXh^awS&S{ui{c|u4 z+%pTY2d%Uj9lQ@r%6iqPg46A#t}F!%uk>+avMFtZR1{(y4-TfjCTDW&a7`m>W@9=U zohT!FEN6S8>Q`zMm0(U~&buBC@Vi~1!$?ahU?2@pNG<EtNhx1*@<@&)piLN|XTbEJ zz9V!TX`@jEat(p`LlXyh(ApVE1Bz^Xxp$oVZ!s@Y@vg+$<F0N~bSZS}k4pKy*QO=5 zA(d07R_uU;U8^vLkE`A^jwGA23D(_iMc19j>>{0S3w%d?{rRZ5+TDP3`+FBnjT$~@ z%_{KeYNh+j$hYTb>itb9jAdjLhTT!eArH=J`Kz=o-;*0iI5?9D^kU1%V?yc6LVz7= z^by0ESTwir9m(GK#HwRj$2K<P34<LSkOQC*PY2v>lXicio}sd|)!JnlP^{k3BL=GQ zEX9jg0zTM(wPx7w3m-nlU`lyh9Ws2aSS%b_8!M+n2o1RSY6Oc(w)M5>t^0GuibV(+ z%UO6f^04e7T;bzurF|7}C^WnX5f<=@QnrGx+ZA6Y@i4FrT@H&n)7I#@YVfXTpKuUP zS0FfCNdkqz1+Razz|tjJz6d0qzrX6N{ap6Ko9)#JH?1RIQA<4#BA3Zmv_l!E(COUY zfTve7Sz$V1@rBik1Q;EV{_YI7@BKN29s%hrZi0MTdu=M+&XCee-Pl%;dv%j1am7JF zodJYX4?P~iZx8I`hef>0{>cLR#n<+;$ncc1EZ3(#*1(G;ijhZ<d%lOYKfumO)e*^S z1}RZYXW#eFYrLI)?}!REj{MfmfBX-RAoc%_DUmffZ=HoUas|DR5y~I2F@JCYxE}fl z-SCDJ-blfjV%I_n%{XCDkzCZKH(=}d;3h}fgXk3xaszWFF~?Xp3NdUG-sBImaAXZM zP&|?B;ho<d`*bE64($hw;RhU8FW02U3H-W!1nJOB0@~2y)YvJZ47$+0O>=ah{>Nc( z$ce-xbd~_8*%fNDVj=ybwPiY3Gj^y>Y$RrPTz6Bg39;SM)s@cT?rjVKX}h%zlUC?} zurAXk3w-pfB;x23K}!0E#BjD#4ONFNyX$*<Qe?*u*{pu*cBh;E(jo>+*@`7G9|-?O zAq^*Z!m$>!%6AsFk$XZSiH0Ul_}Ccn+z#hw97Z2cEXvkA8!4F7Dm;pmWB@_(s4ERb zC9FOf!4=FoYnhTQ7cw6=_o<}#O&=Zp4%_Y#3?tZLxVJmIK{*?`_TL#(6Opiz<#dcD zD<A15qH$J-r5WJNodB!1Dv=L4i_b=3S94_)gR?g4e25o@*y3G*{wv6j%C@n9<2$7R zWZj5L6-FCTTESU>v|{aPI_8tUFYP;1f*M}<*+}gsn$xviDMCq{9sf4(y(k_#bNjWO zLIuH2YBPt-LHf>Y-mxj@n<yQZwePjBaFLGfjL;U9<bxRaIijcc-emF83m2nAEs_C* zkQWNLe;@2kq<buna)z1xs@rj<1|>vNHH9}%D?RA1Z0*Y}tlyV;-e(kvZE2d%<_3(m z@%Zw*Sr#HfZ%T$`W2)%G<P5L$JcLXZc57!ltSHX?r`0Mk7@PuZWo6DyJJTlr`jNe@ ztFF$@Rz37E<}r;zP`0I$9DBCbGvPz&H2uUM5eBepXT4*fewr3rz9Z$4fvD`O-)rkX zRPs7=S|cn}R5s<gRQnFnj3tWKqbU>ZZRe(Q_-RIrb|!(ETLHF8knPMVRlkrCH<T6< z)035mYh1!7&<E(LioFS~6xCjTuy&jS)^)H;CjX4;i5f3ev+LydKr2V72Zu3)Dl5%~ zh330Y;u}~@rk@%K=;g2d`QSVO0{G+s0l`Zn2AxoATKe+-{7>1q8;Trr`MzFL{-Q+X z!?KCe@wZ~>-m0tFI)%?F)3DpCM_f95)bmt5qs{ZbQ<RCPLBmlAr!|4-O9)At4P)^Z ztI4ef?S$SqDtIK67(W5LNHjtX;`1EPD6+Bjm_fjiiVe-dm|ys`kP;f)=!mTI!6j<m z@Unw;{<Fjzi>{TNICRxKpD;)f5U9Z6z%T8P<)$QOH-$jc@qKT}fPTDtv-&_Ml=2<c z$!?Yxwsub-t&+jQtsoDjvTKM@-EFXt!k$xTS3+n-QVr{i{&6LNno7CX`9Swysf#9{ zYnGwr{^okF(aGw)kiLIo8CvVH=)J=WJT<robANH#`uJdo5anu1*QLGnJgATJ@*I5q zumTA>YC>C*Qe&2bQ9gUJMd?VSPe1<CrbT*~pwS0qAYqk<NOz^|Ib-Y^P`Noa@?R0@ zW@3Nrv<_;KW3<<_gJtmVp%ZFhtW9Xh)4D86o~01K@nvo+gJm5ln*gQte}J^d)uGw@ z)2zUxuV;9l{UD9cNo-gZzt|7ZO!||=pC7{$N$mM4O_466Sh!9{J9nx+2TE5w+2%S2 z@#_sb<?1@qL}>6=>GksE))puxrn&ukZw^wmhL2&3*_}%rErE@AOCt!6y#3a;QEwT^ zc=TBG2$K^ge>4V8$+B}^u6ESOZw0Lx_(80s&P}sk(vCWT&vbsKhIAIxZ-y2M(9DlF zhI+6vlH`w{diRNj%_e$Rnm4^t3ttO-Fdg7n<C{HHeQuwUv}0Mw8}doT-+~Lfkg;&s z>;*)BsLuj@E-xQ+dG7Pck)?r%qWc~3_H&i+CY5aVaaHT|1|chs&Ms`Z&^8{-KZaVL z8dgIoo^q-Gd(Na7u<m16ZAf`aBIyp4VRnUSJ&W8<#aEAA-A$P&ky}^Lp^2G7{LeHF z<p^9Vzg)n>>0o$^Ugf^O}jZ(P0%u^9n&KZwU2xM+7kN<NKRQ=fbqD<<{w042N7Z z1j*x)W^3THPj34}D$KNfN*q6|Z5$vvt*c&zsbXK&k7Z`SwxATu$F!-E)AtqfyM+8~ z3?1Zb;nfn@AQ1$-Z|noQ1&j0cX@i~yj(pdXrS}<jO3I4NBaW7^nfCHD8MUDI8jiE} zrB!j?iu(?YXOXJ90A5zWsq9TaX`K&e+LBwO>(t*q6a3HEPZyz|ll0msXrl#d1X{Mw zepds%6onZmrc76_LG2$??E?`ztD+I*u1;spt9{kod*CEv!sljt6#|0(R*=B<#E=?v zs(>^*{Z!L%Z7{FxbCUcCO_%NQ$f8vPGj-19FJWd^^+#>1pBVGGxsUcDnAv8G{G2<* z)vyv{tipS?(TCyF_N!<+nhDSI)xUXM$tvnraSm6H_g&=L?+Jp6fw187*GMi@D?Q1Z z_72Po!W%Zb-t@4fBs$iOAB!|kESz#RszV#jGTU;tLazK8p_C}&gvlV8(}9(T28lVr z>b|6xihv7@CwP5(pnELxfY@KwdFfQf|H5qTVip`<*SvAov-npm#Ru(nm#-+RyFcV; zB1VtW^0ts23g-?(<t=B{`8D$h!ry3d-+9)Lj1ic_LAsl~R3f59;2kO1N)`D`Ne}-P z)t?cT0f;)*UJ3C!-meRhz2xxy%W`@rkYzArvfv_74{?JMNghCc@NKkcpu)~r0B}8# zW;I9Y;~1I2MtGh(tbB_mE|Ffo14temntNOO?Hu54_=C0&41Q07HLjAD=z%JH=IFQT zPttYK`$YZ|YM-{lV>c;S8hF8%N+fvDjMye(upnLQ{hOKXxy7X1%<6A{wDNjy$^U(S zKD2SOZ#}Hz&5V~`25UCGr}N{Y3*1$qhs4Dbg_XNxVO||1m>%>BjR5OY%U-$-Lbi26 zS0<zhkHO-(-<(3%F=>*g$up_axayJlMF0VT^7#jsRZc<Jj_o3iMBWN{k>^rlVC}9s zYTa-C)4z!CA@uX8*{nrEms>LQ$4vlSQh(y1d^(l=?DGnFSv{^yoR^-3-jchu{4EEi zDAl%dRrsQO*fuFT1SDmaxZ@Vaej{K;RVd94pJEBo#o_u=>o_GNCX9iAQHBZ$d^@?- z%bh907Mpyg(2gp4xqIV+jHjl($vhjwe`6&DA+L!Be+wbEYM}eJk}_L?eH<_AJ^^bK zd1d^jw^<t|TG2myK&?_XrktK|23yWaU9hGdumBW^<c;Fu85Ei2l%s$S<X80aekBK> z1l1x9m__M)5PTw>kyu}tS^)x>ot*;Q#~~8rPz-+^3YE7&j(yhV+uPu&C<0LgpYWso zfd4^(wOw}`bFljU_Z^Y%*@)%O`f;3f#Oq)p?S0r1A?`M9v&AgAVkrxges)Y#|I*_* zO#nobyAu+caMNI~S<FI~PZ3Ln<&$VQT|;)mjD?tOHGd|ol8$<k`^?3mPurvL9EZ^P zF!>&V>Cbg9)0!kTis_X*Oj}#2co|{ulH(l&^#t7)8xp3)1y(?#AvqK72n*V-IsNC_ zH3bZ6Gq>VmCSx!U6wyjKHN1L07@U#Jw%gWNfJ9_uOz$#gz!^r)L%xZde;u!$A2P<} zi}2Q0<3{EAsOi;A{RV5mPz;yH=J?&8Pip;rOW5$IPkh70U!9qwGl`zFkkT-k^H18) zkjn21lSvN@G}3i>2c-gWVkZQNrHE8qEd4%`t**<s{>2e)jn_tq;Uh6nX7#XUL8;Ch zF7UTI<JMA|nFnluhXK{_xx#8b6-1aL^T^1Y97|8fkt5gN>@=4>nNQ!yY`Uh(Je%F} zLg30cT6-vagDv&nW>7M`3V$wgE&^dr35dQZH&!)UiCRAX(u3j9Ayd!RCqdFs1OG`w z0cez7qhjgGeoo0!gC%#m=GAC1Ka^1@=D>))Ag=nSlfS1aKjk9@7C^%AVlWe2JCT!2 z->>ciRu|c&YM{Xf_#Hywvtj_1Igp=0D&K_(uEW|)Hh_hxgi$YsKdxM3b^lQyZS&lY zzX7T_hW_mlibHy&*_`i2ISvDjM`h-tjfV{H$VMI=%INbn)ay*5h~JqNG<zK1XBk`C z;AD7TMn+nz-d=^Qgb|?fP5YSlP7o7xOzBR%d76#MdK+-haDKePHGUCzRLA(L>zWFl zOS(|xF_HL*cOMM-y`zI*8z0}WP<6wx28UM2TA>;0yu%>kruN<cF&gAH4M;Um0WFZn zdDP`FA5x6(+HH8!6E7SURv?XLf$zt@`oD{~piK;>2_>N?okP?Zygz3TgcSZ8VabnQ zrJIx0xxmv;D9dNieJ(^Go3#Lk+$6i#7Vv=tmG!9O>s?091{-yQ{0r4-Sp=G4Z2X3d zL-*TgQWT)96ltf{#%JW-V|Pj5km-Z@xdFvogkoyqHxL==@We!4Co|T7PrP*qrVqi) zF@oZ4^`NMEP{vKBO6(owd5gwdFXq|9BS_Su@>PqNp{5q~rN-w=&vx%Wxh2mq5$n=< zH@iN|KU#CyqG`!Xtd8c54BtnFpnnSEL+Q2Zz5o?^O9e!Nw>&85JRvK=J1WwC<V7M* zZ_gqvA~d_GTVg%He1$1|z*<o6eSH@lFrHKgj{esLP*^A8Ssz=>Rup7?qmp_|YuHfv zOmvK3Fy7DGok>P<T;0utgI1f3&(?}A$fG_cJ1#;a%*LDl&aB(XF>YU~2=KwUtCPOx z@EEwQJFn|-?bx>S&*DS{*`aYkD@vqm!k|yPZA}fe3x(A%7(o6rb|Zc_fl+7RPJWIL zbo0T;)B!ZDas+dw%!W;Luhtt$|D>2dE$QD}Ymz)Wcv7SkHcMKTsOk%0j105q-`Wi{ z;N7#k$}l{7L7sEs{u7;ml~|Yo_wEwp$X{+UT3zw&vBF-6OUR<v2g!=&l%exG&^54! zmAwx5hphMsZLRY22l0fZ+=P1>)`RMs@XHM9QsvtyWLao(36H2!|MEgDHQ*%^`!x9H zqIvNzA|#FBe+qdxJ3V2u`$p!-eoIFfD_0E0hnsO<{cY4lo=dIibny>ihHi-Y5*uk8 zSFEV<6(Epka|=7qO!7?MWw0B_7GzPe`sov^Y;<>%pIrzUPo)>62R4l_Z@Gg;H`t>G ztoCL<&D6cvs_mr^x&#a+xB6swGBB(-Z{6{Z(MlE){X?vL+&zFb?vFWMyxt49y*V6` z{K<iHwsf+DeB+c_BjYYYOiPR)LY0>-8r@H9?Qf<MrX-0q;kjA1u53fVgxF}|6KGAP zqpbsNb|suZ&m8XppHHS)MTUm@5w{_P-WzT~w=I=}5tG$Nq}SnBt#|*h{tZbf-k>I) zK{FmoZIgaI#T{{j$|?vo7*@f-)kUX(wg+ST3sdtN(#}fG#tN-UxQRAO%XgbnR6V$m zC#uD+@wS*{bBxocFBI+%I9u(=U(Fin$ihyVBFG=ln#v_cQ#zNV!jl)&my>9n%hCq^ z1%u8m`%&~1*);Lc>m&a6@#rIJY<eOdwN;A$=68+jg=(}~yyzw^l6m6$Y6V4_FLRNy z5OJ68X}i4-5kHzV*#`sSqkk=yZs!`qA78`0z3icHnB&O%^WPd5S<M*>bI)cN|4v-4 zdbLo09%(MOv^DmpZfoB&7y|o7hZiz8V_4j|fZn5t4zn5(5oxe7V%boD$JmUq^J=Mw z0S6(U0{lv!dW=m}G7zxvDMO8zncg#y`b|_ORv_SAg*-Shq!5J9O8>N@z|UTf=g0y3 zRD{3lFu7py&T-}T9;~Nh9*g`>uDFXbY+&0dZ$?Pl)Kf0rWA&vzff7#IL9<L$^99-| zmSWF!4(l<zm{JOg#=ucFr&V!aa|(0^@{dmQfX5J3FAuHDm8458{uuHsCXs+AlO=N2 zyR0dA7zHoRCX?kcbrZyjuz##N@LH=N>p*jn>^CWtr*R;fz1l6(IC~4QcWxKcdkAQ! zzvmrRnmihRu81K!lPt;E|E5EfNgf?hB=g49ZZ)+>_UaN45;<f>hhwUW1%tKDA9+d} zrBX*=9jl*nKr5XGrSta{CeW*C)F75V*S`?K3NRRoyIGemX`S{$%MU9gPAF`D&E^o| znr(-AF14Gt4<^$CfEt7qm5x-rU?Y<Hf>Xf}Od`}Pms%`?SR<R2IaPx{e|uNmMk0c% zFBMk!DO3y8%0MGOL=5Q!m4f6vze>JFVuwEK1`2;#4%R){8{o1<-Ejt{Drr%`;#oz7 z7BZkvYE#7FRVIRW4;xAk{Zdz-BPw9tKd)G3C|wgH3~K#ug6lBHBM!zjcn!@9!4TME z6u)RrA!Z@MVr$XJ+~Uo3BMMF~sV0&QjE^D{d{R-UL-YR(dz<z`<49%^!gm}*2GPNP z$(lNI3HJ=_bsKVdR%3|rE6#|IFa!#EN|1qj?=nCKv(GWNvq*=`A&!T(_!r=U9JBaQ zM)kMGHwz4!GX2-Z(#^Z^5?7%j0<8O<Lc&8uNAmokVMXQr@HQDb20gwVx3XJGJ*k!A z`sDFIq3LNWJ?}LZJLJ57M!jRWoyk_{#PiR({j>zHW>!vK87<~qcxqry{A0{E+VTbO z@OJf}iZ?Yv#GTs$>N@Q6af&Q6Iqx`5LCLLSX)}RHw?WcUM?P$GbmU@M?;6zF-PkTC zk&(;)TS@%C0znpqUE74I2}ohI`=$2ZSA0DV5PzV%_a?!>f0wzcEh&rV#8Uf&m2?#^ zE^zL62{LD!c#6<o?syTdZV8xJf)CS`%XDEDih!bdi)9A8r+hct`&($&T-1~{WZe@E zpv?Eaq8=3eH#Gu-h*MM;T%{gitxu;1N4uUTw|QhN`sZEOiu+Kp|Jn3a#jDDH!CKO5 zA`HH!Q)KM;fVzTJOM+h^Qh0FE4{kZOYh0^8TH?p|E(8N9M_PQCx(htm=fzr^b>@sx z6?&pO5l?&_igU5ktv}6OM4@@B=DGPvRv}7lYkc~%-{MN$a*(VfLjCqFd<^zOq8MVU zDffo=ztD|>J^G2+?t0Ei=jAcP`L9Bjpl3`|{Iqno1ahz8GVQm~N!5kpOOLToc<By~ z+pc8!u(kh?k|KM}g=tZ(NP5q4XLJ4${i%0rr@FRDBT=c)_<n#G{#jB`yKf#ReQYP) z>~?XWqh3R;N<JeDT;D#S0*zNC@T@{1UnC<=6-t!y;K>L2`V77Pe~Ms6<5^*~Ss|&N z`Aok?pYz(9zhiefn$E+FLpJcI1rK-5bF~#MksVzdS8gVxh;U%PzW(iZr;2YBlfno$ zuu<0|FNAK!atv&^dre<F<BrNrg7!Yn4^^rw;l_9R$FGrx)lP~YmH1l_GZug|I|9XI z5|-f(2eAOeA!=+%V!+;~Id%zHZxP6=<n5d$edwnaJKbaN9fsf54lO68BTAakJEP9h zr!3q``|u`lg6+MjHdxiqh$hIAiD}eoxx$Vl#4uT51J`n~EzGnfJn$%@0%OMEkeUqq zo74&oj@%V{tRmfS{s;p#6ANG<P9STEuBb&snGrONSbMLQG&+}Q$uPQv@GoY?=d$tA zH)1D077mH){g442j^Jmtx?S-wcF2AxG%+>n7hTOGBY9vZmVXoXB86v<5IoASh{qHH zzFxRb^haUQ(<C>xJC`po4?*RNnc`;on>k!}EQ@FW7SVQtR+4~Y^n3*3Ehg7qd<I`Q z?MaV+9uI#g+Nybe=cD71gj95q6Dj?tVHuvKqN(E$A}Aa4R^Fz>>IUn60MYOI)}I0q zErfFpUfSOKt!q=RPL&D;953JA!!!F7OU%19ZDVY*wPp^-$N18EZ-*#RoA_a4->o08 zX2d;lq@@Kbi^K>>DjUDyR-wdwpwV=P*+SXRYC49`(azVu<z*J+S7`~tI|IZeaS+Nw z=w(3DdWtmEXK`CcZs%#wsY)~1Vkpc$<=&p7l}W5kYLC}iBK1$~l+?#JUL=F=zV^W* z!#sv%ISp~s2*a1_Xu_<{TL8wx6AZKU-!V|H$v&qUz-Vzy%ZZq1{B77}iG^bJ+blGp zWjix0OH)ExL?O`Nwk@YFSIa*+<uZ8C*;MRY@?ys;L@Shj-o!#p{%zKXE3nehfmcOc z*Lr+Bd^-UBmE8IR8GHl}7G5Hfz49#3uLJJlc2uJKUSbj@9w4Y_0GYM9FR4M|O7*C0 z&je4^x3DjXn2kQQJ(>O*ZCsyxhS!?i1~d6;wr)pgtJ#WI!$RBYqI*rEq50Kzil>=7 zude$A5xyAz-zRH+3j$?GjId8dtQnJ$V^0Ss>X~+c=DcR71f~RUv(;|Yq4D%f=~9?C z;G_ok`$=p%)@U3AiLn19+(XIwN@?0(ZdKC@hLT%6U|vDI{ol=U5c-nO-{K+x-GfGO zR~w(bD2@PYwDi@UVgrT?7~<MwO9o031IG+`rE7<u+7^$nA<Fo|PrXm-;HiC;+X|Fx z%apE!FV=f6$cSRG$kV^kSRR(0b#1)sef(+-@#Z3>^R%C3<>W{L`9=j^Wmy2Vz17M| zx8~k*3IO8FSf5|6;VMl5Qf$@$LSMWEnWPM)=9c54qHf6ov6x;{Wl>q(nw;%WXxvJ* zt4MzF&z?{m12cIs=3}(%GZ)8jkh5-xJJ~U^X@#u%IW|*o%Au&+wM|G|Ee#Oj6J>Fk z>HE#;^AvP}LPf@@xqr_8b@mR?xo}aF@Dtm%ZQHhO-PpF18{4*R+s2K3qZ>PU!hXMh z{lo4-_nGX$8J@Lv?Om%*)yFLZx;;BpdiJ)T9#3vo0TuIhSfL3i3@CjsgVAT_R8{$E zSiUAK_N}TYX4RqjsxrOhO>Sk=9`}%nH7#UTelGFwgD17VZn{0IR%*5K58_&#Mb9cF ze!f2VE(Y3vxJNSAWN#`E_-kGi)Y;QYW|U-|e<I-mBWbsBRRYqKCa~v9!Ti{QRV`E% z@_M$#9^R}uxtOSTb+x~^vPIe0Z3(F3W9X#pDsV~qpN&D1Wr(455Pm|T13ChH8uwmN zau7a5l~QppV4l^R*a(h0A#+N4C;@YF;JOM0$ZE>=N+YI{LXaJ@hu6slhHd?!0g;oy z{^{B7;ZzPcrZPhPFPyn^gicbPXJeJi;n-s!z3E|eatb3fu@Q50Va*`C#fo%ri!I=v zId7FTy?-yF3VTmO${$ziwexDyQ=aiT=LLkZDij-H?}I5N7hY)jPrLtu9Ox|&WqdTx zKcH%=ry8`)XP)yZ^p1;nSE;CU79ZX8$PN4Zv#@aB5TWpC9Lau7N-(owc;MrCW|VU! zs{&sRtz2b+Ny2(Ppmq14mkvn#SJ?HgqTKj`Q47l$$28<{M}oeWs0&`Ydu7om5B`1V zeYnN3iER#C*MqyUT|nRc9266uQ70b-iD^GCGC+4B6k@(;&Q`Jvx)1|D6_?*$NUQxB z6M4V0Xwr?e|FPnpx3YPY5&W+vp4;^=L7zAA2E(eG6P}p71l&pe)7)d+`A2moW0veu zB14$}G+Vu7Pg?K_DnwN7D;45&{UzcR3+_kOq_P}E6sK2Xg42fYqyl*?=J^lbtk-EW ziCU~E)st#&__*#5Rwq_ZyWWLf3Iu}@0cY$OWWmfg%rh9Udx@5rWjmw|0{j($^}X+p zJ9E7yOb!A8ZOZ?}gfPNI`t4l&3>ZjQN%7ei)86zzmR(okEhG(V6S9@pJY4!4CeYM8 z!~+_-B%d~jD%Ut4gYVB)MGm~4ep%Ufw2{7>=%U8z!E_BB8UvRHw=&_)W0X72Nrn{) zfy!8hJb?QtiJ`>wQNx|^Z@lAkg?MARyh34IsySA__6Q9dvh5I@IMulB`7XMuapIu; zsuUENMGNTdtTR9w%2Ti#qL70HW_wP>4<>`R2rQhO6cOE_hO4uBEhx}j&lFltOUn%z z&eAkfN`jL&R%E!hjvA%qdaI@>oj4gvl?pwsM}k6NXtrt1`zK@`2+tFx|8u=A`?qum z<VZ5PfPp6Dpd@h2&J|Sunx6J6uDuV|NMxbAZ&Heh>j@LA45Teb9q0{~E8i_QX@tI# z`9`{0{2gx3lL8h;mS;sUMFNU9xHQ)M;D>>Q&*W=aW+|r2<Ev(|8m7HcOk$o2ZDFMN zGOh|&)S#vK*sd9#nCYwFS9t<Her_gV`*{9)VA(3Y=nc;tUysc16)Ac4fPOMcZ$siZ zt~KABu<Ir>Db(#(0`)_kONu@O(h)W9)W1-(ZRmLaqcO+GP0;Yg4@z?%AKF9f#x9YA z=tsx|qa<wi{vb`)dgPw>+_a1J;&(BnA-^WrVn6O*Rs`i_0KxVVB&y%8Y~bZk-YHk( zw5-3jgw1<|w}=Y@!ZB91MTG7ue($XZT)8uLen+kV_D<}yKzfykPsgMDhQIoyWz`87 zpf=xo+#Fl@oe>@cS*!UYj_};(I)Ilc5e0cp=pLArhnn7EWhBej>I;jcB%cNU#Unj5 zlyGH|#0>Ac&iDoj_h2HHR9KJ`>np@V<WAt}5NB9V??=U!e)8e1M-Md3LJ3RIjv`yp zi#E_REpn$p>CCSd-HMv;Y(ujZMwnnv7H{l1Qy^WTVK^-tYjZm&&R+a}4ZxgX|8BV| zs1>|!Ah-{-uA4sZthy0;Mk0dSCKTC?^jqXF>07DI!RZNc&^llsXE1s9$lfHq@b1oo zx)TbN4OlUs6FR7S=wIyK2wx-QRxT*ihNoIVxmnOK-?*+U#V>a7g|aE@&L?}gUts;P znph~Kt+{_qP{oNUn_lhQl~hE9$2rlIp%D{vbHD<lIpysTXCV{{Qd@QaJ)cx^Gj9cJ zf&6rULQWnFC+!<GhN>7S=q=0&s#NCnN-L9-Wa|$Hr55-RggkSy7$3c8p}CLHI)_#h zW3Efc>~fldlirYks$;pM8bhyO4XT|d^JsRH8J4B#>?8Jq`2*u;=e-EIT3O4_tCztK z%~sNe0%h>zH;ZZp<dyie*Lx$KNU6z2L5m>k;JReyoJN&)xb56ARzM9GUV3o_vVJ*U z$KoXCzQ)t?h0KHif;eCwO27C_q_EO$xMq@b4GLCFZnVfif8Hl>6!%wfn!k(Qe+8-i z&1ydt<d4r;+udBU$2_;J4~O?r2RrxV6SN6^nsR(I@;Z{x%}A|e2JbkRggQ|Wc)Tsm z_)WGbr$SIbJWSquSY$fX%}OzkEm0#-$)|0YpT`;i@4lh$Z5Df};FmI9GPa*v=0%54 zQx58WgrWa;P%k%da!Wu9sMohDWSsIUOzTA?LqT!;(j&9{560}1>`!mt!;5Yx_1T#3 zBeO>-%<SEJ1YCdZ@C$#4*F>kG=3F_`+*8*k)L-X_T+P?i?zAoPE|At0Vdp29($s@{ zxS#g-gGGiS1w%>R=h<CwUJnK=gt5Q4KJnLBQI8h18um`V$D+`<RH9UgoATOeC=-<G z9du=~r5dLB7B<PF&vfUoHb+YB9awT73%-auVu%&O3McqAB}YfS1_1z65*!-2?Nd1V zG&?1KbQh}~mtu*p3=VpSAx@I(G|BL8{~0;#+i%+$<bp^=C-97sjpe~&8A$CR|EG}; ztikOaM^G4j`NE5!6)c}mTck_D+PH)Ci+#nIJX}<XEOC%S82Y^nJbpt=w+KG%B+0lk zZl)u+ivu(w<8E?r9=4Y7ibr{0fIB->57$HV$eqoZw>wB5_ebU~X_z%x-$`s2El|7` zeu+MPq>p4$6*yS|vQ7blbWsMV0{6uKX}o|q{nM&0S8<tIE-Awh|J>4=E&!gM;dphK zMg6R1GI}}d+*@eHDXVV6ol40bJp!F`>l&cX2dkUnv447#9g<lYf<*{!%c9b$Y;`ik zH2ROwS=k5AMu|f#FxTS0EhaYc{q^8A<j}uJ3dZw~F#&Am@E(70kjU{9&<R{>_zoLU zK!Vj0<hmxq`o)TQzYQ<z(%^QB0j@I+tf3x7!mv53(0<;s)pmyAC$O2dhI`Y8X(zrQ zmvgpx9huW#D{<JrhETEW@`l&Ju6M}QqH`LZuBT@CVhkc8MAr8k>Lk%EWG#u{qR@PW zU#R!o?>uL7o$+;_Ar}=avyTZbqa5Nnz9(;PK-)MM{tJUF)5$jKQAGV5t*NBCEfZe- zV=J7jg-@LR3(E;EL5wF_%-a(K0tvHz14wL`MUA00mtC=CERL_aDh+Fe$bx+?g0dK- zGzj4A6}6Tk5(3oDoq%%bI3Z`CY!{`CBu>iQ^W#os>^ZA1Ax1msc|%4`oK9aP4tH@0 z>w$zP7gI3*llSxI{fo=zsl2~iQdb-Cl^RN{oH^5Ga^>TWG&)d?_g#zT>~y?&yr=;1 z1+{A{CyY^i=T?2$hpfT#<iV|Kk)V7J^zHuXvmn_PB$jl{l`5W#c{aDIvM+bUkW19k zQxB<ce&Qj(l85wc1*FrW<z)LG&Ssk7Y`yFkuOb(Q9c$pxw7ezG^n&_nI2^6Txc zZU;~5@_QyUi6y?$(+YB+6ZI|xzh2ogT<U!+Z3=8ER;kT*IS)rNytt9C#nXZFAKgoi zg;%Baf^E<_d(koheKH8^!^hu7w}ZL@*gsW2I;xvIUhD>ycgt6@SHTQse#%ci<R8Xj zc%(&1AI?JZ8j^c0xAB|B@X)q0$o|#kkkKPzYJ#Qu(hjUkKlit8$WJ9@=2l7C5v0#w z6#jkj#fMfxJ#3j}REJg6YNu&M#sYmW!Wv=LQMn@080l&Mwc~pl2ugS9_<M@$B&W+1 ziXMK5-7Z3(A0z`&nr?aA1@n_cw_APb_+;|B*P+CIrp$O%O9xH_J?_2N&v_TaF6+^d z@CbZ^8N*64hP9ME5+lW4j01mn+cT+Lw2~Oq=Pv_;U@FRcuQcI`uSRuOTrANp=&xpd zA2(D4uK31aC|5%=q@Tn{bvM79y%UmBC9D4=#^c}T)$n&~_+}O|aExLBqOCN$mZ6_x z>Fh;DJZo@`RkPX%LOCQ8SmYd)?t~<wSyJMg5h~orA*5oEtt^@T%tMB3)s?BJGAaCs zJq5=hKR=tgXX06Djef!P+3e)|EV@RI|A9oX&8CJ+9Jva%A;vcxWMB^KLvg>w0b3jk zUjIo|h#@@}d$1~e3y<P_x^d|-^F%=DGJ$33FZdV2mtj*Urp|A=>H~TI9&x<+Aq-(d zxsF%{0+5p&cz3Tmf)X?aY$zlctI;Qr3tw7?zAvPKso63%p)*Ay!vE6vyi;e&R0+n2 zPxG$to4C=52vc|&l%>6f!>@xD5bAQR`(Pn4vW5^HfHRc9=r;r2KOD<NszO4>4r*u2 zlZk<TVG;q8NHxXk$yXSG^pvCvt-`LzTYc39i;JRVu?BRio5Gn_DC(D&>Cv4A%=-F) z<p*kHL~UVNtITreu%%a*`3o*jKqMLBMR>b^&0>s)7OagQJmB1lF9eE6lFg&8L70c7 zzyFnd8>pT9Y5k$>8gGY{!3c+LVTQ$)3V!vozyY@H!_|Ek!u*Lpj{LG~uyo)2)Omy( z=dx2SQWsaQBdz^jA^OFGJhiIm*XEJu*ik<3H6h=j^0F?^7;AR#k)&nfDOcRjYX924 zlP3uKP?p9fJ&w^aujhA>o%wYMf6;~R$OtkLfCrgwew7Bcg?-wFq3Ls-1#yYdVwq-G zMSv!EpZ$jjJXSg>%R>hT4I$ns6Wqu(*>95s&TQRFddH#M?Ix!&AHfsZsa;F91(Rza zqUzX=u*^E!?ncujc=Mac>o9~aY@EvfU4OAz*BHy}J&`g<(J3SCanb~5q?UgB4l$+c zQ_*ZFN{gG-;8wxtm1avcM0ti>;NE0rz~}>M)ADw1vpzg}37KRk8d?xrbWFoy^w*A& zeAp>UN(nH6OgB`kvu;8d69$|afAC%j&ZE{K<w=_DQTcZT^7ovX6TWSCxc<{5r20fp zxGk}V(ik9zz3X5v5F34|EU7R)B|634W~YSptjr#h8<y_wrMhSQA3w@ghuv2V+Mi`H zUtW*^3(f%e^Zm0`a?>&H5wxI8`r+zISj)R#(hL-K$H^RMhZnsz-$b9~DmHE7c7^Ey zzScgxFj0nQ$#$YOf_{Z!n2O3FN_0duzFaQ@pDp6XD`A$ZiN->LCAa^sMQCSYBN(}N zd5-Aa*yyUwu${hYxsi-KF7>dB*t0qQ!$H!Mxq2hnNwbiA?$Df%vR^c;?))~0K_E>F zq*F|ulqTDQN@|DF&}h}M49qu<Gm-HkA`z1cqoO&%xt0@BXvn0Ve-izM6u9dDe`5Im zrBITb88Hex68)IyxSKOrQPVfs0xlrxF{d~E!{)Renn|EYv||`FHG1!Y1*xVU9eJ1p zxnslr(-#Kpi9TDfKv;sFhB?83`jS$c&#Mio9!tPy)vqtPTK($RU(nv*@nnTq_upsA zYbZWlob&6-Z)$Y8F^8-F=r`gsl9(&X2D%EE8K3M-Vi~;p^?UTk<cM)RocfFp&2%L) z_S^vduKlq%BWzD*pW{L^T!{@lcOQUT?~L~F>oZxGcu<U|!riw$Cy#AU`dc^+8Ek8u zh<awY`$re>p@v2r3t|U*)wHz^tg1M)`QkW24J@KezjnofiIgk-YMI$=vudqPJBRPU zZ}4mxg*Qrj9FkHP|Iv}53FA%{)V*D8s_9Ic;D4xek!RC<I-2g6Fj?Yskk#LFXc@1- z7k=o&_@3J{j#SEM{qL-ZbJHRb9s9g6M+pAGb&M3@8S=346U%d!qyv%YBK9mn<(60u zXG-?Tz<%ZSW0&50JIHxL<)H>aX^QV`57V}W<P!q`pu)L<_(SN8Uz*bCU?%_bxL~;> zzoMRGUV;dK;g3Z1+Kvi+$RB^GrS;&-yq$a^#>ImNqI?%Kxc2wpqVAZ%Q=FGa_uFJN zv-D{G>bRAHmXAHRk9^H#|Bxerxr4Q-g-<hDs|kLBYCIu4X!@i8iB-Gk%68>(831cm zj!{KqBUr?^i@(zUTHj*XpDv62s>bM<BTt&}e^tToUnH8(O#O=s01zbvjUf>089cf= zV<+l`E5|lb!Vgnd#m4pBF?H8FNSD<M1%Z2(pNjL;;xPfLOJ->5g>bcv8N_#`-9Tja zSWSqr%bP+1T)Et{$P`qRO|h)NGkY?i%y(V3RXzVYCqJVt0Y}Vho67TaFhfsqrfbx( zh-~TS!Vp4b*^TYb@06-e2{uN=xV89Bs=3?&09#fWhXY}flb<z#a2=R?z;4sIXh&M8 zV|%cUI79?4H>}iu4$eJ&e#mar(L?XKivz<1P93wtG<3^1gNNljq23pByzHy5D{nXG zgsxX6oWkCS58_Ai)(Ww?i<6>6zL7lNd{G(8atzP~oqjkhnk>FqF%!#qs^Z=fcTje} zXZj_+i)sI!(~Yz5d5C9Q5)Gp3u5<6C>x%604K+}}#%)o6!z@LcA{DqdZFp_&VP@Jh zn@DOW(PCyMC;c%jM+RqT=cjG6eqHwQ2%;$bSZp>6`hg-zD6seW#S~axmDBnMz%X)~ zHJrWjw$YdS!>9)VqqnYT4na5@!)Yby2H*(pg37(*dk@%SV)a*8&o<lSHYmhi8W))G zFOplS_{i2CEg@W8f(N4zAgOT9IGl?BMIRq693bw|RGoNv$y9gCrr)*orla{NSl$zm z1bWhmLG&Y_({q^W@j%l>m_e%df^xT3^k*G`dSw<O>}ytpJ9=}AK-{=n3^0V`QQAS; zHMQR2L2q!I1(Obr8=SdO(B<yQI?u#qDIQgZJ2|g3%209e_D+3Q@f&aRg2)iW6CJbX zrEsZ}Mp{vh2XX5}*2jT@tERwCAyAa^f<lUj;CMhLj~hC@&BTxjFYoTLGp0!w61B*Z zp86@=T<xY(4rDH@OEjGw-7<Dfd#H*5Q;5(3g04<Y!M93Q`G^r|Y3MzuFOeuS1Oa~` zo_)Q%=3YV~u)|+(w@)lPf<q%otg9{^ruCv&vxYFxHt4yoi}P8Z@SIo*!H&p=vx9)V zKdtYP>MN|=b}$l+W2%dNh17|Gy%lpAh@wmP3X&gqVZn=^YvyiLE}S{sH#}c^Hx>W( z!-||r=0sw^WFHNZ<r*`dAD)!N9xp*%I5Pe%vm?)COexx2XgCyxAu0F&+vt1S6MPr$ z29t0;1~bW1@Z3tfJ(o8@4!uA`WH_O_+DoAm7S>!1Ke<k(IG*>doL}<t7J^7<QprY> z0S*aeO-v$?Od!64Ff$bjML30tckfWd&!xk{xrt0)lEQTy4O{_u-hu#NGO$t^gAo4f zpNd9@>posW>Pg^;K3Qx)f@Mv2-*ss?Plo4tzCj7_gf{-wJ<Q?$LLtPFHzf7=;#)+% zF{@c!b?>N^vr4G&#hAb9B4T~yV4N+uiA3~_q_iNNS)^fk2W#hHF7vmurIeS(b48e5 zD}+k2@@Rz`wt+}u-wcW5xY&lWVFN9iz<5Zdt|&Os8NF!MvZe&jVO11pY-8Y~sHb(} zzT$07z0iJR+Tb+8Eh?;eF!4>GBZ5m8lqW4K@r)`+kE)3X<?n3TdyX}UCNB@!Zn%wg z{fvJ?zTuy3ghm(2p6P%j4H~nI^nEk)g#p?1^|KU>%i|SXwbrK{N|Vn5?}J@0rXSQp zSO5rRkeHot(0^@JhY+wT@LvUFO49-gg#}GQy<`4vXuX_%Bcr4-7h;AZo#EfN$u1tT z1wJ2I)XIK1JnPUdUm!lMS32woJkbuTywZ%y;_KP#-6EWHrhhh&J-OJ_%OfJmApJaJ z_a9{c?f}=V86qms7sp6rVpm&QLV{@0oZyaCf8y7-D#uBdg~{312?I_&(BHQ9Tyu*Y zh_p<-Mf0Ue%gf%AhA=xCq0sm@&lrmz`}n>|6AS2?r9DY<uWRu<52G9J6#q*7rkT`; zkzxmp7neO+=X#4ZJd}hgn4VX}>h{U=gM_fD(NR33#R$s?)MiR`Fw_ZzkGSNVCgM5N z$Gqmx386*#CEur)v*a*GEPYcIFhMJnj*%NARjc)0gFYMx3~9wx4%9>R?B{3L?un9x z!$6hH+OF1GHP7_>YfEK;b5$t4L6Q8DvN#MEylv!>bS(18$oa<_S2Z(S`F9D#$pRzX z8WDZ0=^f$r_0i>c?p3iLBN<dd1vksm^r{XHd;6iv_*Gv@TXmU><=`2%3_;>FWP3l* zT`^`HDmIJZ)&17R`cYYG7wVY`a*su_?5kou>L))|wOXfmeHNWA+PDXJmij|~uG>;I z?#~=)$esmPnPwZQWTW*@uef=p3ny-;5`gAGafXfPh(HwiiYj~sHD-{m!hKF*AK)a| zjrw-N5}EXsQlBHza#IlH$ZWK6Q{ZL6#Hbx}vcYR0VCq^0O_mg7fZ2@*H^<`l7)u-I z%eYbNtllkTv3TgGnDn`XL$ap5NhFpEhemv3zme^7x*zGbJ#o<%c_$ZOmd#`JEQ5pv zOb2Cb)z1q*wkszzFIT*N)+(oJRu%h}NM0iW*sj_dss~yf^JwmiZNr3~gB8gE${;e7 z&6r?C!ktGM;3Iy<7Jf0C?>^2G<3WV;{5%X*T}5z0d9CAqN@}GeiSfymxjk?KCo5T1 zo<_9lr&x6`h1}TIRN9kb9odq18)|&=6;B(|eYep6`PzpnCF5hNAzuf^?*>mLXBop~ z$ay7PCi5UVaR#I^kirzVsD4}fW+6G^3mBiGbcVp)<3u8?RU5ml-!7hY*L1TpmXKKD zf#VzCak>{83jef`YQG4>zC~U1fcdgbgd5NK6m>)uz^8OJD;uzP9{tX~egw5ItSk{n zE!}{1HCLe?3sgN0*jqq4bciJf%}ohVjz|MR#NHsKYitd)hteztCGU1aUulT1I*}F< zLSrezHG%wn{jmXSp>O?@20w*9f&7~EOhbnKw{#)J>N!=}waCL3;oD;WpW!j&uFkn8 zR{uJJ@hx+yt0+f;)pJ1bj3n{#i7}<`wd(0=p&E03?Cg8&8CX*2IYY04QL?!EDGqK9 z)9$Wy$YzqEsrDOMRDyS)a#ZEROF@@<*$LhJkW;KCJ2MxA2Vg)*sMC*=v6RH;(r`pZ zbyKNU%NaK@1{&cx3DDTiEJq<osl6sUzVB^n3dOOjIt6A%j+SdFR*z;QI+5(a*5(yR zK?69)gc#EN7y51RTBO(1**vQI4+1`sQXOc8td<m#k|Sr~4~s)>Yv|yfj6v=OfqwU# zvZhs;fLbQLUt@sts0A0%H+MVwj_{kh*7uOUG55T`rBkE5RleUJk1mrF_m6+t6@4ji zLjRTu^i`zAp_`*6x1cpM#Y-SFmM9PT-D08GS_iI?cl=%x<5b2(4ttz+_v*B1u$6%X z|Ji8!E%FbaN)PMTrTj9GSfkVBthHo*7ydhWZSurfA(~i}KH|A{2cp9G30?g!XHyst zC`lC)>mz%^u>yJs%==Z$qI2P-1IzLxjzT%SY1ioiACjE_+!nuRGRZ#gdw{X^ZNkW) z!yk#^)IGp$g;J@24bZEKrh_*m%xGet1RFl~^|vmfy|m)+O2ndnna%1Q_JMZ=7Ne^L ztZ4Qfr03vXd>kb!ZH>x)g1(4-TtDm{`MF@IdEKdngdX1m1UGwc8<srBs|c77us5)A z-9%Kr!(MrS8Fw(HZF+w4cMElJUQ>wYSv2gJU-*^K@TVNAELE*2e}54|uy%`Fa87Hr z2M+tC7EX;;{N&;1G0{}qaXZ2oDto5C(-4~_rJ`T9dM9>p3>|+(=TsDy?HM}wsNC6l zg_@*_cm;-wI5M0tBcQ4O8jcd3+XIdI>|O)z)OVuoUa6W#0F;kUes0L0k`SWScJCd5 zc<GM;PVbXKw0i0msw_G6PcKJKQ=(}MU|w}j0jcZZqO>*^n3b@B8et2Qb<cGkoG}&> zE?+-jo4_S3#nB@LnGE>Phe@F;;;-+YbNkmPZ$2}JCmT%Enequuo{UYI^~fS88&y7M zgvO}3gQF|#c3S^Vk*yHKAH~#*cdb!M!TNX&s?5J5if%51JnoTCMk?AYy)>o?;_(u~ zVY3D$=<!2Cm>&POK0iz_Xw|;jOX|KPKjO8Uzj+|&PaWDS)#KSK$ExHpL?q8wf3GZI z+O>rtzqSqGv!x0mH>bKI(qC8JtufF94!IO4NxjB3C!(xpdru{>%gwB>G!5aM9+x!m zQJWzL#(<jvx5oAQN?v#;Jym-ZQ*>@8YKFWKllpzPHt*kp2#GfQMa|<TCt7R{DN(YJ zVup#Luj4p4F9OM3GSi&V3Oc**X>>xtCmB>_Mr$7Sd>n}-QewNdJ%(}psY^p%u5fsM z;G@iAgc{;nD7WSBIk#|YlN1AvBdA?1!RE*PhDU0lLsYF73d{=_g~|kq<=Ui+09ukH zvl{7Rvj)G&)UNn$(BJgM?V;)`eG9&O#R+f^RKt|HNGbjP`2B}??tt9k(_qJq_#rE} zfOY&;(|l1``#(S$t*n`_3(0fK#2%LVSL3rq=n>5GMYUGAvizuqGTjzpLY*v3#dVa% zZV^$1%N6tUjo3R*v}vJiFR?%&6VY^j3xlBFcMyK-qPMX&i(kE?ATj=3WI1N^6IJ`( z2r=09F0ythX8al-OZDah#+3nQyS4gMkfZ7wFU}qY2mb`twFOCK7Au`e)tze)W&0A} z&n(#&oPTukhHw1(xujE!u}IjI`e2I-h`g#1+%{`@ALj1^7$Fsx)>}Sh;!NfNU!75e zNc!H4*YpT}T$ZL8<jYS5nY{29(MktT9F5T`Rp<8VGtT53UkBM^D{EH}#F-S8oo=yv z?QHZ1n!jBZmYCkWJ%c2~Nf{Zk(#9yd`=+%b&Nx{wPR~%1DO!)oP8XYK{?<AVElE_K zz9Wv`#98wc#b6=rL7iT}H?5$JHpIz~`VmE1wFF)ptQmvFfhq9Neu0U`(Q7dE@|Tpt z%ha(5j>`~pI0EveA$AM?;u04{CVrpqQ&6eZ%9{lG%KGW@L{cpNVL`FhmpfmGsCBn9 zn-bo|D+<cxNOswgu1eV2&<f~P<SfHjyzGYl*-i8Ccw!T|4F<?$@E3^!?DrR`$}M@i z>kTF1{nf*DM}=bu#S`Hlz{v4Y6$)phWxwJd>feUcLKx#`T^eQ{2!w{ZK~ir1n1lb5 zd}Y*cH6U3fq>r{|O)G_yl@j@&wUqPZFUg)oNP^<R{8XjjC`{^9k*+v62QiW#3;m}? zChb_P0`{g1%W3$*KWz+|u7iuz>i_tdb1>L#gz5uU=4W`<-?8Xp;{n`>Z5YBo_T+Sf z@c2}jc+1~ZdUZ9=UREYrGb%l32)$o04xZx7#2-%&6g-$d^(Q`hGA>9q?)qINC_0J5 zVxHKvKfN`=AMPAj>JIuqWiF+-iK5`SNwW<|f}ObN{^nEduJc?VEfW6GNUIY_dg?dV z2boB;(~nZoa&wjBWsLhVp@jD~v*+g736?I|ZAld~sKRSXx#CJH+7aRAtQ(v~$R6<| z*UlH(vFI>}hsGo5n--m={qWUF+D0WxuHquF*WB7mHzs6*tHTx)V<hg(dpg_l$g_Du zNo1e;dlo~P5}Ys@po=>&Xs`|U>(+&$$p%s(a1Lfqg1EajE?3?bg`Y(Gemw<zIDG0` z7%sj(gkb`a+W283r;Wp{-*4b}9hu23!=n=zkmT1u#p61YkuW+jZc6#RVM$$j+Sg$o zC|LOKOoUqOMujeAcs67ib}Bcp`P=b#_#3So%?9mRj++Xu6l4;6l~p(HF2ll#>9)25 zOYFBbos<mH`~i1jtD<EG`Ti8*775&WVtB>k$jp~`Kh6m~-{e`jI3BGlAN1cF1hD{X z<wfz)RTBArFAj@cer$fe+m@d3laO_{zbc;7L0T$0-B=~cN6?aq>NBF7Rgfm8633eM zuIi=L*_f5a73huPimO4rh&re9BCIyN&b1BQ&p7fma^}}xiWxOIFJ|`&MVWiqlr?Sk zZy6gdmqw)d*+D_@1$Uasy|qZU)m*<5lc-~4W{C*WHk_ip_kLz>vZ8N0MV6ymiJd!$ zD(ulp&ye(?JqzckZf|Vo;n=XhuH>{;CKo+ILhMB17GHwwvWDCnSU4pJ;Fj2-1{jm1 zV${5Qc-8uoEMAt<HVCBB?v_A@HS<<1X@7s%MN3THmv}L=lL<rQRRq=os0#uGtCisr z7+JcxS$q*1TZ%szH&nI-$87xg)lC*@&T!bsh4ahMpI*dOx9)J<>cdVH6zCT4Quwy& z7Fe5H5{9MlqYdOQ0kqfaPx4ReN`w!IlH&=PGw_`P;<zq+S)lnN3UTdrIQMZezpU@l zrV*Qheo)K6_#C5jRZRY(RCKn%d&9s+5K_+_rD=wYjv{$dYp*Da0Lt?2`#=`kJyE;w zAM)n*M2edrn)e<0n0oSts>t9VE@sCww*o7ifk}r>DNtN8Uy#ik1ar7<8z6cajPs+N z<FG3d>tC0rZEmzYi5)yvt-58<1rRTp@IYzF90@;-=g3JzRgxSv$L;Yq5wovrt2qR# zh0YRQ62Ak0lXXUw7kcj4``TwQQa;jZKq%LX!wt`@dAXKqX_So8>t30VdjiLkAbKGv zorU?Rxtx-txWMyS4q=#!b6wAsCF*Wvo`9{U6+*u0o3&Jf)|+PH#oT%WIXCUl<U#Y2 z35{Y2L)O?ga`+8&0Z93Bi{R|&NzgKuBeRy&0;Zx9nW__3kHI0ek%w~OD~Ky)a6vc7 z#BG+o$AukT&d@Ahc4bWO#VVJKM`T(YY>Q@3c|o*!kZhfB3LrnY!#uu@yu#B`8l~$- z>Y69>&c<S3lkH)K1=>DiP^)U3!@edVtEyz1aW(?dzK*HInnkdm+I1Y2=xexcTIQ58 z$_oFWdvx;Wh$SaCm|f2QOp$E;u6H4`C0!AO-7Ze2sWPAqhflRe=BiLw+!_*`=f^(m zU)PbifkCo<QhClaTUNMIUo7b-1;$ig%)3)3D7hZTX^fIm+`T%@7As5(?-sa`KZF7t zF3~4S`+r}~XU~>x@LLiK!Fd;l(v2MDdHi@}6WJ&0f2wKjPb`qy(mjd4`Vl|{*`%h( z11P2~74$K;4ZtwwZ5aC^K?YQ7YPJt4l-eVA=H?9S-NLF@zE0LL@4o^O3wYxA11Ar8 z?T0=IvuJ}U{`2E@%4u{Y8;9aG*KP1w>5F(8|1EYMM%JnUc+N`2AFw$x#n1#&6hxpE zGo}@+=~d#K1<h!yJGnTjx?zQlyQ72B%pMYBjD0BZ!K@*BnR3`(@^_F_(DSQFyV<@U z&B&_w3|vyd$J3YW23bijOW#Q>Ad-C%V<5tvFf%l2v{Jb@A-+9iQRRk`RB_M|Rg6ta z>nV+_klhh2wJZ2)GXNIoVt>xEPSS=9n5`AUeMQ!wS0p!Tg?lbYq?Yz6qvz<`|Dm;G zL3u-FOK#R7f|eF@+N_btI8ehnRJiiT>GofH0kA&4JB-4Yo)X#x1>hgZEaFY{8(Y_~ zu5u^UvN&xeY`r(%Q}2&b%aGQNMxI6Fd!qk9R{B35F0x%_rxLMX244u(&)y_CJWajy zH-RP4HkT(6qSJbg;=i+YtH^;?G^4oALYz7LmJCntsm4YW+d#h^YZ5GEh)XrKXo>eW z$o~5q<qr{ckik1`i6c1Y2EFY<e<ICV!&o^Eik(HHuhI|rqEtd&9ucYQNDovBuT%K( zhu|1n+E7UFwIOwE+1jztUK5Un51#-fHxxe4H!R;+iB>ZXaz6+1ai8-wvcZr##d0Sb zr{b^&wNbFbm4PQM#Yjv<P;7YsA$;_ay-ie83xx($*xTmzq*3#Y*ekk|-@1b?LS`mi z7ZTe3+qo-*T_}qUDsyM$jB#0$xxl@WFX6(K{6^sC02HQPk~zhyJ)zw4ZK5hzTt`G@ zlRHg!Gb`(cf~eF&PbFF6kXGiC%smW^9Vf~*;`B1$@tgm4`u!&86zcGt&TJyhds`Z3 z$vp@ow|%A9@s;S7+(TmNUGb&Iz7D~(TSNWB;wn5kixbrjja8?NaV5tnun!uXk0B$q z=W?1(L^;SA8$Pumu${nSC*S#Osk*r4g$$6X0b!lYD5E!lPLMgyK~Q)5+(g0!qMG8} z=G+wXx`d1#Z7o*Q*1Pk?utkT|teyy2nzU}Lx5qv;Gl}o>SkDo={0-Df*vIPfV)3#} z>`0=R8YvDrNhfGSfyK6qulyhkfBPMl$a4>cLpFvf41+>_jto({x`x7;8c(va;?iX- zFT-SM;$#y2{2cyjX7byt#{_pXb1-H)0jSS;E0|Lv<lbx?&2zz2cM~0IbI1Hk-OH?N zn!6*F82%}rzFql+khd+>emt=KbjLM|AghK4WXE=Fz=+4G?;2clv6`>W;T=g5`Rae5 zFV_E`H$e=(gd!P5o%B;nHUaN4yS%kM3lf!WaM@m3dWB2pY@906p<0iR`oH-e%T<W- zxW1*(SS`i0b&YBp;{Nw~0h2<sJHrxHdn6B|QRk|B8@y`FD>{!l{Ejk}WE0+JjV;`# zd_5O&sy1ZZd!c?`J;`j{15fCl9TrH@p<uwk(IjN#8)$^e+eSNH3&kDo`Jif;<n$VV z81dZP3mMRb0^*-Kshu^<=3}ToH%J!*>0<>p{;gbA)3mO>PR3g>wg`~^|7OzvC`u)A z41h8*YZPJa#cBJ-NBCkS<Bz_*+B>-y_$3%4et<1H5CrxjnE-b5A{I{}WasY8sYw_B z-k3=PK_#C#e4Q2o^K^kk(TIsBFT9pr&=VqO;vNf%6-Z9saf5DU^;oDX1OoslntUi5 z+Xf$ZR%q-6#!Rd)@#8hQ6Z0o!CUHPZxJsO_qWnOuN%Rd`ooSG=wUY$vPPq&tQEk<! zG|H!1#aR5!noY6=p0P?qn@8rV_pxrg2CKsc*vk3OSvz*sF}!k=^`EwO?5w4KWH0Z# z>gwJ6UtJN20XwHBduyONH9wo{;2!+>%t{xCoV2x|o*{si2{WAj@qk85SO4gPXH_Nf r&(BM!xxG?<0S>i~ZTu&3C~gK>`5b1#-1yYgBLh0&|KWZA&*y&uH#<rJ literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/widgets/end-to-end.mdx b/apps/web/content/docs/dev/widgets/end-to-end.mdx index d07ce68c73..515fe5f863 100644 --- a/apps/web/content/docs/dev/widgets/end-to-end.mdx +++ b/apps/web/content/docs/dev/widgets/end-to-end.mdx @@ -1,18 +1,19 @@ --- -title: End-to-end Example -description: Define a block, register it with a plugin, add a blocks() field, write a record, and render it - the whole path in seven steps. +title: First widget +description: Build a VitNode widget end to end. Define it, register it for the browser and the API, store it in a blocks() field, publish a record and render it on a public page. icon: Route implementation: objective: Add a custom widget and let editors place it on a content type's public page. decisions: - - Which plugin defines the widget? Offer plugins in the project, preferring one that already exports a `blocks` module. + - Which plugin defines the widget? Offer plugins in the project, preferring one that already exports a `widgets` module. - What does the widget show, and what does an editor fill in? Settle the content in user terms, such as a title, a short text and a tone. Widget fields can be text, numbers, yes/no switches, choices, dates or groups of these; images, files, relations, users and repeatable lists are not supported yet. - Which items hold widgets? Offer content types from the chosen plugin that could gain a `blocks()` field, or a new content type such as pages if none fits. - Where do the widgets render? Offer the public pages that show the chosen items, and which other widgets the area may accept (only this plugin's, core widgets too, or all). constraints: - - Define the widget with `defineWidget` (`defineBlock` is the same function) and register the same `blocks` module in the browser plugin export and in `buildApiPlugin()`. Write the bare id; the registry adds the namespace. + - Define the widget with `defineWidget` and export it from the plugin's `src/widgets.tsx` as a named `blocks` export. Pass the same object to `buildApiPlugin({ blocks })`. Write the bare id; the registry adds the namespace. - Store widgets in a `blocks()` field with an explicit `allowed` list, then build and migrate with the project's scripts. - - Render with `ContentRenderer` or a named `ContentZone` using the generated `blocksRegistry`. Do not fetch or validate widget data separately. + - "Records of a content type with `publication: true` start as drafts. Publish them before reading them from the public API." + - Render with `ContentZone` or `ContentRenderer`. In an app, pass the generated `blocksRegistry` from `src/blocks.gen.ts`; in a plugin page, build one with `createBlockRegistry`. Do not fetch or validate widget data separately. related: - title: Defining a widget href: /docs/dev/widgets/defining-a-block @@ -22,130 +23,153 @@ implementation: href: /docs/dev/widgets/content-zones --- -import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Tab, Tabs } from "fumadocs-ui/components/tabs"; -Everything below is the `@vitnode/example` plugin as it ships, so you can read the finished version in the repository. +import { ImgDocs } from "@/components/fumadocs/img"; +import sitePage from "./end-to-end-page.webp"; + +A widget is a small, configurable piece of a page: a callout, a hero, a list of features. Editors place widgets in an ordered list stored on a record, and your page renders that list. This tutorial follows one callout widget through the whole path in the `newsroom` plugin from the Content Engine lessons. The `newsroom` plugin in the VitNode repository holds a finished version, plus a second widget you do not need here. ```text -define block → register in plugin → blocks() field → create content → ContentRenderer +widget → widgets module → API → blocks() field → table → record → publish → public API → page ``` +## Before you begin + +- The `newsroom` plugin from [Create a content type](/docs/content-engine/create-a-content-type) and [Public API](/docs/content-engine/public-api): its `@/api/builders`, an admin content module and a public content module registering `articleContent`, and an `admin/nav.tsx`. Any plugin with the same setup works. +- `pnpm dev` running, and an AdminCP account with permission to create and publish the content type. The first account has both. + <Steps> + <Step> -## Define the block +### Define the widget + +A widget is a React component plus the fields an editor fills in. Create `src/widgets/callout.tsx`: + +```tsx title="plugins/newsroom/src/widgets/callout.tsx" +import type { WidgetComponentProps, WidgetData } from "@vitnode/core/widgets"; -```tsx title="plugins/example/src/blocks/callout.tsx" -import type { BlockComponentProps, BlockData } from '@vitnode/core/widgets' +import { field } from "@vitnode/core/content/fields"; +import { defineWidget } from "@vitnode/core/widgets"; +import { InfoIcon } from "lucide-react"; -import { defineBlock } from '@vitnode/core/widgets' -import { field } from '@vitnode/core/content' const calloutFields = { - body: field.textarea({ required: true, minLength: 1, maxLength: 600 }), - title: field.text({ required: true, minLength: 1, maxLength: 120 }), + body: field.textarea({ maxLength: 600, minLength: 1, required: true }), + title: field.text({ maxLength: 120, minLength: 1, required: true }), tone: field.enum({ - defaultValue: 'info', - values: ['info', 'success', 'warning'], + defaultValue: "info", + values: ["info", "success", "warning"], }), -} +}; -type CalloutData = BlockData<typeof calloutFields> +type CalloutData = WidgetData<typeof calloutFields>; const tones: Record<string, string> = { - info: 'border-primary/40 bg-primary/5', - success: 'border-success/40 bg-success/5', - warning: 'border-destructive/40 bg-destructive/5', -} + info: "border-primary/40 bg-primary/5", + success: "border-success/40 bg-success/5", + warning: "border-destructive/40 bg-destructive/5", +}; -const Callout = ({ data }: BlockComponentProps<CalloutData>) => ( +const Callout = ({ data }: WidgetComponentProps<CalloutData>) => ( <aside - className={`flex flex-col gap-2 rounded-lg border p-4 md:p-6 ${tones[data.tone ?? 'info']}`} + className={`flex flex-col gap-2 rounded-lg border p-4 md:p-6 ${tones[data.tone ?? "info"]}`} > - <h2 className="text-base font-semibold text-balance md:text-lg"> - {data.title} - </h2> - <p className="text-sm leading-relaxed text-pretty md:text-base"> - {data.body} - </p> + <h2 className="text-base font-semibold text-balance md:text-lg">{data.title}</h2> + <p className="text-sm leading-relaxed text-pretty md:text-base">{data.body}</p> </aside> -) +); -export const calloutBlock = defineBlock({ +export const calloutWidget = defineWidget({ component: Callout, - description: 'A short highlighted note in one of three tones.', + description: "A short highlighted note in one of three tones.", fields: calloutFields, - id: 'callout', - name: 'Callout', -}) + icon: InfoIcon, + id: "callout", + name: "Callout", +}); ``` +- **`fields`** use the same `field.*` builders as content types. They validate what is stored and describe the editor's form. +- **`WidgetData<typeof calloutFields>`** is the type of `data` the component receives. +- **`id`** is bare. The registry adds the plugin's namespace, so this widget is stored as `newsroom:callout`. +- The component only renders `data`. It runs in the browser and during SSR, so keep server-only code, such as database access, out of it. + </Step> + <Step> -## Export the plugin's `blocks` module +### Export the plugin's widgets -The subpath is the registration. Name the file `src/blocks.tsx` so it resolves as `@vitnode/example/blocks`. +Create `src/widgets.tsx`, exporting the plugin's widget list as `blocks`: -```tsx title="plugins/example/src/blocks.tsx" -import type { BlockPluginSource } from '@vitnode/core/widgets' +```tsx title="plugins/newsroom/src/widgets.tsx" +import type { WidgetPluginSource } from "@vitnode/core/widgets"; -import { manifest } from '@/manifest.gen' +import { manifest } from "@/manifest.gen"; -import { calloutBlock } from './blocks/callout' +import { calloutWidget } from "./widgets/callout"; -export const blocks = { +export const widgets = { pluginId: manifest.id, - blocks: [calloutBlock], -} satisfies BlockPluginSource -``` + blocks: [calloutWidget], +} satisfies WidgetPluginSource; -That is the whole registration for the browser. VitNode's Vite plugin finds the module, writes `src/blocks.gen.ts` in every application that configures the plugin, and the block is available as `example:callout`. +export const blocks = widgets; +``` -Add `namespace: "acme"` here if the derived one - the last segment of the package name - is not the id you want. +The file name and the `blocks` export are the registration. VitNode's Vite plugin looks for each configured plugin's `widgets` module (`src/blocks.tsx` in older plugins), imports `blocks` from it and writes `src/blocks.gen.ts` in the app. That file exports `blocksRegistry`, the registry of core's and every plugin's widgets. Add later widgets to the same `blocks` array. </Step> -<Step> - -## Give the API the same list -The API validates writes, so it needs the definitions too. Pass the **same object**: +<Step> -```ts title="plugins/example/src/config.api.ts" -import { buildApiPlugin } from '@vitnode/core/api/lib/plugin' +### Give the API the same list -import { manifest } from '@/manifest.gen' +The API validates every write, so it needs the same definitions. Pass the **same object** to `buildApiPlugin` in `src/config.api.ts`: -// [!code ++:2] -import { blocks } from './blocks' +```ts title="plugins/newsroom/src/config.api.ts (excerpt)" +import { widgets } from "./widgets"; // [!code ++] -export const exampleApiPlugin = () => +export const newsroomApiPlugin = () => buildApiPlugin({ manifest, - // [!code ++:2] - blocks, - modules: [adminModule], - }) + blocks: widgets, // [!code ++] + // ... + }); ``` -Passing a different plugin's module is an error - the API and the browser must namespace a block identically or a stored `type` would resolve to two different things. +Passing another plugin's object is an error, because the API and the browser must namespace a widget the same way. </Step> + <Step> -## Add a `blocks()` field to a content type +### Add a blocks() field to a content type -```ts title="plugins/example/src/content/page.ts" -import { defineContentType, field } from '@vitnode/core/content' +Share the list of widgets a page may hold in `src/content/page-blocks.ts`, so the field and the page that renders it agree: + +```ts title="plugins/newsroom/src/content/page-blocks.ts" +export const PAGE_BLOCKS_ALLOWED = ["core:*", "newsroom:callout"] as const; +``` + +Then add a `blocks()` field to the content type, here a new `newsroom.page`: + +```ts title="plugins/newsroom/src/content/page.ts" +import { defineContentType, field } from "@vitnode/core/content"; + +import { PAGE_BLOCKS_ALLOWED } from "./page-blocks"; export const pageContentType = defineContentType({ - id: 'example.page', - tableName: 'example_pages', + id: "newsroom.page", + tableName: "newsroom_pages", fields: { title: field.text({ required: true, minLength: 3, maxLength: 200 }), - slug: field.slug({ source: 'title' }), + slug: field.slug({ source: "title" }), + content: field.blocks({ - allowed: ['core:*', 'example:callout'], + allowed: PAGE_BLOCKS_ALLOWED, max: 50, }), }, @@ -153,49 +177,158 @@ export const pageContentType = defineContentType({ publication: true, publicApi: { - path: 'pages', - fields: ['title', 'slug', 'content', 'publishedAt'], + path: "pages", + fields: ["title", "slug", "content", "publishedAt"], }, -}) + + admin: { + titleField: "title", + list: { + orderableFields: ["title"], + searchableFields: ["title"], + }, + }, +}); +``` + +- **`allowed`** is enforced on every write. `core:*` admits core's built-in widgets, such as the `core:hero` this tutorial places above the callout, and `newsroom:callout` admits yours. +- **`publication: true`** gives records a draft and a published state. New records are drafts. +- **`publicApi.path`** makes the public route `content/pages`, returning the listed fields. + +</Step> + +<Step> + +### Create the model + +Create `src/database/pages.ts`. The model is what the API modules and the migration generator read: + +```ts title="plugins/newsroom/src/database/pages.ts" +import { createContentModel } from "@vitnode/core/content/server"; + +import { pageContentType } from "@/content/page"; + +export const pageContent = createContentModel(pageContentType); + +export const newsroom_pages = pageContent.table; +``` + +The `newsroom_pages` export must stay, since tables reach the migration only as named exports of files in `src/database/`. + +</Step> + +<Step> + +### Register the admin and public modules + +Add `pageContent` to the plugin's admin content module, which creates the AdminCP routes (create, update, publish...). Keep the content types you already registered, such as `articleContent`: + +```ts title="plugins/newsroom/src/api/modules/admin/admin.module.ts (excerpt)" +import { pageContent } from "@/database/pages"; // [!code ++] + +export const adminModule = buildModule({ + name: "admin", + routes: [], + modules: [ + buildContentAdminModule({ + contentTypes: [ + articleContent, + pageContent, // [!code ++] + ], + }), + ], +}); +``` + +And add it next to `articleContent` in the public content module in `src/config.api.ts`, which creates `GET /api/newsroom/content/pages/{slug}`: + +```ts title="plugins/newsroom/src/config.api.ts (excerpt)" + modules: [ + adminModule, + buildContentPublicModule({ + contentTypes: [ + articleContent, + pageContent, // [!code ++] + ], + }), + ], ``` -```ts title="plugins/example/src/database/pages.ts" -import { createContentModel } from '@vitnode/core/content/server' +</Step> + +<Step> + +### Add the AdminCP screen -import { pageContentType } from '@/content/page' +Add the content type to `src/admin/nav.tsx`, after the articles entry, and add `LayoutTemplateIcon` to the existing `lucide-react` import, so staff get a **Pages** screen to find, publish and delete records: -export const pageContent = createContentModel(pageContentType) +```tsx title="plugins/newsroom/src/admin/nav.tsx (excerpt)" +import { LayoutTemplateIcon, NewspaperIcon } from "lucide-react"; -export const example_pages = pageContent.table +import { pageContentType } from "@/content/page"; // [!code ++] + +export const adminNav = { + pluginId: manifest.id, + contentTypes: [ + { definition: articleContentType, icon: <NewspaperIcon /> }, + { definition: pageContentType, icon: <LayoutTemplateIcon /> }, // [!code ++] + ], +}; +``` + +Then name the content type in `src/locales/en.json`: a `page` entry next to `content.article`, and its permission labels at the root, next to the article ones. Keep the keys you already have: + +```json title="plugins/newsroom/src/locales/en.json (excerpt)" +{ + "newsroom": { + "content": { + "page": { + "label": "{count, plural, one {Page} other {Pages}}", + "title": "Pages", + "desc": "Pages built from widgets.", + "fields": { "title": "Title", "slug": "Slug", "content": "Content" } + } + } + }, + "newsroom:page": "Pages", + "newsroom:page:can_view": "View pages", + "newsroom:page:can_create": "Create pages", + "newsroom:page:can_edit": "Edit pages", + "newsroom:page:can_delete": "Delete pages", + "newsroom:page:can_publish": "Publish and unpublish pages" +} ``` -Register `pageContent` in the plugin's admin module and its public module, exactly like any other content type. +The generated form edits `title` and `slug` only. You fill a `blocks()` field through the API, as in the next steps, or through a [visual editor](/docs/dev/widgets/visual-editor) you build for it. </Step> + <Step> -## Build and migrate +### Build and migrate + +The migration generator reads the plugin's build output, so build the plugin first, then migrate from the workspace root: <Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Build and migrate"> ```bash tab="bun" -bun run db:migrate +bun run build:plugins && bun run db:migrate ``` ```bash tab="pnpm" -pnpm db:migrate +pnpm build:plugins && pnpm db:migrate ``` ```bash tab="npm" -npm run db:migrate +npm run build:plugins && npm run db:migrate ``` </Tabs> -The generated migration is one table with one JSONB column for the zone: +The new table stores the widget list in one JSONB column: ```sql -CREATE TABLE "example_pages" ( +CREATE TABLE "newsroom_pages" ( "id" serial PRIMARY KEY, "createdAt" timestamp DEFAULT now() NOT NULL, "updatedAt" timestamp DEFAULT now() NOT NULL, @@ -208,91 +341,208 @@ CREATE TABLE "example_pages" ( ``` </Step> + <Step> -## Create a record with blocks +### Create a record with widgets + +The content type's admin routes are generated, so there is no route type for `fetcher` to infer. Call them with `rawFetcher`, the untyped twin with the same transport. Add a temporary component that creates a page with two widgets and publishes it. Create `src/pages/check-create-page.tsx`: + +```tsx title="plugins/newsroom/src/pages/check-create-page.tsx" +import { Button } from "@vitnode/core/components/ui/button"; +import { rawFetcher } from "@vitnode/core/tanstack/fetcher"; +import { useState } from "react"; + +import { manifest } from "@/manifest.gen"; + +export const CheckCreatePage = () => { + const [result, setResult] = useState(""); + const [isPending, setIsPending] = useState(false); + + const onClick = async () => { + setIsPending(true); + try { + const created = await rawFetcher({ + pluginId: manifest.id, + method: "post", + module: "admin/content/page", + path: "/", + body: { + title: "About the newsroom", + content: [ + { + id: crypto.randomUUID(), + type: "core:hero", + data: { + title: "Local news, written by neighbours", + description: "Stories, events and letters from the people who live here.", + }, + }, + { + id: crypto.randomUUID(), + type: "newsroom:callout", + data: { + title: "Heads up", + body: "Widgets are validated before they are stored.", + tone: "info", + }, + }, + ], + }, + }); + if (!created.ok) { + setResult(`Create answered ${created.status}: ${await created.text()}`); + + return; + } + const page: { id: number; slug: string } = await created.json(); + + const published = await rawFetcher({ + pluginId: manifest.id, + method: "post", + module: "admin/content/page", + path: "/{id}/publish", + params: { id: page.id }, + }); + setResult(`Page ${page.id} (${page.slug}): publish answered ${published.status}`); + } finally { + setIsPending(false); + } + }; + + return ( + <div className="flex flex-col gap-3"> + <Button isLoading={isPending} onClick={onClick}> + Create a test page + </Button> + {result ? <output>{result}</output> : null} + </div> + ); +}; +``` -The generated admin route takes the zone as part of the payload. Give every instance its own stable id. +Render `<CheckCreatePage />` on any newsroom page, sign in to the AdminCP in the same browser (the routes need an AdminCP session and the content type's create and publish permissions) and press the button. It shows `Page 2 (about-the-newsroom): publish answered 200`. Remove the component when you are done. -The generated admin module has no static type to infer from, so it is reached with `rawFetcher` - the same call the AdminCP itself makes. +Each widget instance is `{ id, type, data }`. The `id` is any unique string of letters, digits, `-` and `_`, and stays with the widget when it is moved. In server code, `createBlockInstance("newsroom:callout", data)` from `@vitnode/core/widgets` builds one with a fresh id. -```ts -import { createBlockInstance } from '@vitnode/core/widgets' -import { rawFetcher } from '@vitnode/core/tanstack/fetcher' - -await rawFetcher({ - method: 'post', - module: 'content/page', - path: '/', - pluginId: '@vitnode/example', - prefixPath: '/admin', - body: { - title: 'Build your community', - content: [ - createBlockInstance('core:hero', { - title: 'Build your community', - description: 'Everything you need, in one place.', - }), - createBlockInstance('example:callout', { - title: 'Heads up', - body: 'Blocks are validated before they are stored.', - tone: 'info', - }), - ], - }, -}) -``` - -`content/page` is the content type's `permissionModule`, derived from the entity half of its id. +The write is all or nothing. A widget the field does not allow, data that breaks a widget's fields or two instances with the same id return `400`, with a message naming the widget's position, and nothing is stored. -Anything the registry refuses - an unregistered block, one the field does not allow, data that breaks a field, two instances sharing an id - is a 422 naming the index of the block at fault. Nothing half-valid is stored. +The record starts as a draft, and the public API does not serve drafts, which is why the component publishes it. You can also publish it from **Newsroom → Pages** in the AdminCP. </Step> + <Step> -## Render it +### Fetch it from the public API -```tsx title="src/site/pages/page-screen.tsx" -import { ContentRenderer } from '@vitnode/core/widgets/renderer' +The public route is typed from the content type, so `fetcher` infers the response, `content` included: -import { blocksRegistry } from '@/blocks.gen' +```ts +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +const response = await fetcher({ + plugin: "newsroom", + method: "get", + module: "content/pages", + path: "/{slug}", + args: { params: { slug: "about-the-newsroom" } }, +}); +``` -export const PageScreen = ({ page }: { page: PageContent }) => ( - <main className="mx-auto flex w-full max-w-3xl flex-col gap-8 px-4 py-10"> - <h1 className="text-3xl font-semibold text-balance">{page.title}</h1> +`module` is `content/` plus the `publicApi.path`. A draft, or a slug that does not exist, answers `404`. The widgets come back as stored, in order; nothing re-validates them. - <ContentRenderer blocks={page.content} registry={blocksRegistry} /> - </main> -) -``` +</Step> -Read the record with the generated public route - the zone comes back whole, in stored order: +<Step> -```ts -import { fetcher } from '@vitnode/core/tanstack/fetcher' - -const page = await fetcher({ - plugin: '@vitnode/example', - method: 'get', - module: 'content/pages', - path: '/{slug}', - args: { param: { slug } }, -}).then(async (res) => await res.json()) +### Render it on a page + +Create `src/pages/site-page.tsx`. It loads the record by slug and renders its widgets in a `ContentZone`: + +```tsx title="plugins/newsroom/src/pages/site-page.tsx" +import { definePluginRoute, type PluginRoutePageProps } from "@vitnode/core/routing"; +import { contentPageItem } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { createBlockRegistry } from "@vitnode/core/widgets"; +import { blocks as coreBlocks } from "@vitnode/core/widgets/built-in"; +import { ContentZone } from "@vitnode/core/widgets/zone"; + +import { PAGE_BLOCKS_ALLOWED } from "@/content/page-blocks"; +import { manifest } from "@/manifest.gen"; +import { widgets } from "@/widgets"; + +const blocksRegistry = createBlockRegistry([coreBlocks, widgets]); + +const loadSitePage = async (slug: string) => { + const response = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/pages", + path: "/{slug}", + args: { params: { slug: encodeURIComponent(slug) } }, + }); + + return contentPageItem(response.ok ? await response.json() : null); +}; + +type SitePageData = Awaited<ReturnType<typeof loadSitePage>>; + +export const route = definePluginRoute({ + load: async ({ params }) => await loadSitePage(params.slug), + + head: ({ loaderData }) => ({ title: loaderData?.title }), +}); + +const SitePage = ({ loaderData: page }: PluginRoutePageProps<SitePageData>) => ( + <article className="container mx-auto flex max-w-3xl flex-col gap-8 px-4 py-8 md:py-12"> + <h1 className="text-foreground text-3xl font-semibold tracking-tight text-balance md:text-4xl"> + {page.title} + </h1> + + <ContentZone + allowedBlocks={PAGE_BLOCKS_ALLOWED} + blocks={page.content} + id="content" + registry={blocksRegistry} + /> + </article> +); + +export default SitePage; ``` -That one is fully typed: `pages` is the content type's `publicApi.path`, and the response shape - `content` included - is inferred from the definition. +Register it in `src/routes.ts`: -No extra request is made for the blocks themselves: the definitions came from the plugin configuration when the application started, and nothing re-validates data the write in step 6 already checked. +```ts title="plugins/newsroom/src/routes.ts" + page("/newsroom/pages/:slug", { + component: lazy(() => import("./pages/site-page")), + }), +``` + +- **`contentPageItem`** turns a missing record into the app's 404 page. +- **The registry.** A plugin page cannot import the app's `src/blocks.gen.ts`, so it builds a registry from core's widgets and its own with `createBlockRegistry`. A page that lives in the app passes the generated `blocksRegistry` instead. +- **`ContentZone`** renders the widgets and names the place, so a [visual editor](/docs/dev/widgets/visual-editor) can find it later. `ContentRenderer` from `@vitnode/core/widgets/renderer` renders the same list without a name. </Step> + </Steps> -## Where this goes next +## Check the result -[Content Zones](/docs/dev/widgets/content-zones) put a name on the place those blocks are rendered, so the step above becomes: +Open `http://localhost:3000/newsroom/pages/about-the-newsroom`. The page shows the title, the core hero and the callout: -```tsx -<ContentZone id="main" blocks={page.content} registry={blocksRegistry} /> -``` +<ImgDocs + withoutBackground + className="*:max-w-full" + src={sitePage} + alt="The About the newsroom page: the page title, a core hero widget reading Local news, written by neighbours, and a newsroom callout titled Heads up" +/> + +`/newsroom/pages/does-not-exist` returns the 404 page, and so does a page you unpublish in **Newsroom → Pages**. + +## Related -The [Visual Editor](/docs/dev/widgets/visual-editor) and [Editable Pages](/docs/dev/widgets/editable-pages) sit on top of exactly this. Clicking **Edit widgets** turns an interactive editing surface on for an authorized moderator: the block catalogue lists what the zone's allowlist resolves to, drag and drop re-orders widgets in place, and the properties panel edits each widget's fields. +- [Variants](/docs/dev/widgets/block-variants) (optional): give the callout several looks, or add a second widget to the same `blocks` array. +- [Content zones](/docs/dev/widgets/content-zones): several named zones on one page, and what they render when empty. +- [Editable pages](/docs/dev/widgets/editable-pages): let moderators place widgets on a page in the browser, with storage and saving handled by core. +- [Custom editor host](/docs/dev/widgets/custom-editor-host): edit a record's own `blocks()` field, like this page's `content`, in the visual editor. That isn't built in, so you write the adapter and save route. diff --git a/apps/web/content/docs/dev/widgets/index.mdx b/apps/web/content/docs/dev/widgets/index.mdx index 8c763533e0..7959611816 100644 --- a/apps/web/content/docs/dev/widgets/index.mdx +++ b/apps/web/content/docs/dev/widgets/index.mdx @@ -1,97 +1,43 @@ --- -title: Widgets Overview -description: Plugins define widgets, VitNode collects them into a registry, and content types or editable page zones store an ordered list of widgets that moderators can visually edit in place. +title: Widgets +description: Widgets are configurable page sections that VitNode plugins define and moderators place on pages. See how they are defined, stored, rendered and edited, and find every widget guide. icon: Blocks --- -A **widget** is a page section somebody can place, in an order they choose: a hero, a paragraph of prose, a call to action, "the six newest articles". A plugin defines it once - the fields it holds and the React component that renders it - and every content type or editable page in the installation can offer it. +A **widget** is a page section somebody can place, in an order they choose: a hero, a paragraph of prose, a call to action, a list of features. A plugin defines it once, with the fields it holds and one React component that renders them, and any content type or editable page in the installation can offer it. + +<Callout title="Widget or block?"> + "Widget" is the name people see in the UI. In code the same thing is a + **block**: `defineBlock`, `field.blocks()`, `blocksRegistry`. Most APIs export + both names (`defineWidget` is `defineBlock`), so use whichever reads better. +</Callout> + +## How the pieces fit ```text -Plugin - ↓ defines widgets (defineWidget) -Widget Registry - ↓ allowed by a blocks() field or defineEditablePage() -Content record / Page layout +defineWidget() a widget: fields + one component, in a plugin ↓ -ContentZone +src/widgets.tsx exported as `blocks`, and passed to buildApiPlugin({ blocks }) ↓ -ContentRenderer / Visual Editor (Edit widgets) -``` - -## What a widget is made of - -| Part | What it is | -| :------------ | :-------------------------------------------------------------------------------------------------------------------------------------------- | -| **Id** | `hero`, written without a namespace. The registry prefixes the plugin's own, so it is stored as `core:hero`. | -| **Fields** | Content Engine field descriptors - the same `field.text()`, `field.enum()` and friends a content type uses. There is no second schema system. | -| **Component** | One public React component. It receives the data the record stores for that instance. | -| **Schema** | Derived from `fields` at the write boundary. You never write it, and a public render never builds it. | - -## What a widget is not - -A widget is **not** a content type. It has no table, no id of its own in the database, no permissions and no API routes. It is a value that lives inside a record or a page layout - which is exactly why re-ordering a page is one `UPDATE` and not a migration. - -## Visual editing - -Widgets power in-place visual editing. Wrap your page's content zones in `<EditablePage>`: - -```tsx title="plugins/example/src/pages/settings-page.tsx" -// [!code ++:4] -<EditablePage - adapter={adapter} - canEdit={canEdit} - layout={layout} - page={settingsPage} -> - <ContentZone id="before-profile" /> - <ProfileForm /> - <ContentZone id="sidebar" /> -</EditablePage> -``` - -There is no button to write. **Edit widgets** appears in the user menu in the site header whenever a page like this one is on screen and `canEdit` says yes. When an authorized moderator clicks it: - -- **Drag and drop**: Rearrange widgets or drag new widgets into allowed zones. -- **Properties panel**: Configure widget settings, variants, and [Layout Areas](/docs/dev/widgets/layout-areas). -- **Zero visitor footprint**: The editor chunk is lazily loaded on click and never ships to ordinary visitors. -- **Layout persistence**: Overrides save directly to `core_page_layouts`—see [Editable Pages](/docs/dev/widgets/editable-pages). -- **Room, not overlap**: The whole site slides over for the sidebar, so nothing you are arranging ends up underneath it. - -## How widgets reach an application - -Nothing is scanned and nothing is queried. A plugin exports a `widgets` module; VitNode's Vite plugin sees it and writes `src/widgets.gen.ts`, which builds the registry and registers it. - -```ts title="src/widgets.gen.ts (generated)" -import { - createWidgetRegistry, - setDefaultWidgetRegistry, -} from '@vitnode/core/widgets' - -import { widgets as widgets0 } from '@vitnode/core/widgets/built-in' -import { widgets as widgets1 } from '@vitnode/example/widgets' - -export const pluginWidgets = [widgets0, widgets1] - -export const widgetsRegistry = createWidgetRegistry(pluginWidgets) - -setDefaultWidgetRegistry(widgetsRegistry) +stored in a blocks() field on a content record + or an editable page's layout (core stores it) + ↓ +<ContentZone> a named place on a page that renders them + ↓ +visual editor Edit widgets in the user menu, for moderators ``` -Installing a plugin is the whole registration step. Removing it takes its widgets with it, and a page that still references one keeps rendering everything else - see [Rendering](/docs/dev/widgets/rendering). +Registration is two lines in the plugin: the `blocks` export, which VitNode's Vite plugin collects into the app's generated `src/blocks.gen.ts`, and `buildApiPlugin({ blocks })`, which lets the API validate every write. [First widget](/docs/dev/widgets/end-to-end#export-the-plugins-widgets) shows both. -A registry is a plain value, not a service: `createWidgetRegistry` returns an isolated one, and every consumer takes it as an argument. The last line installs it as the process default, which is a convenience for a renderer used without a `registry` prop. Two applications in one process each create their own and pass it explicitly. +## What a widget is made of -Import `src/blocks.gen.ts` **only from a route that renders widgets** - it statically imports every plugin's widget components, so a root module that touches it makes every visitor pay for all of them. The API never needs it: it builds its own registry from the same plugins when it boots, which is what validates every write. +| Part | What it is | +| :------------ | :------------------------------------------------------------------------------------------------------------------ | +| **Id** | `hero`, written without a namespace. The registry adds the plugin's own, so it is stored as `core:hero`. | +| **Fields** | Content Engine field builders, the same `field.text()`, `field.enum()` and friends a content type uses. | +| **Component** | One React component. It receives the data stored for that instance and renders during SSR like any other component. | -## Where validation happens - -```text -write (untrusted) → full schema check, defaults applied → JSONB -read → nothing -render → structural check, every mode -``` - -Widget data is checked in full once, where it arrives: every create and update runs each instance through its widget's own schema before a row is written, and `ContentRenderer` never repeats that parse. What it does repeat, in every mode, is a cheap structural comparison of the stored object against the widget's current fields - because the write was validated against the definition the widget had _then_, and a plugin can rename a field afterwards. A widget whose stored shape no longer matches is skipped rather than handed to a component that would reach for a key that is gone. [Rendering](/docs/dev/widgets/rendering#validation) has the detail. +A widget is **not** a content type. It has no table, no permissions and no API routes of its own. It is a value inside a record or a page layout, so re-ordering a page is one `UPDATE`, not a migration. The API validates data once, when it is written; the renderer only checks that it still fits the widget's fields (see [Validation](/docs/dev/widgets/rendering#validation)). ## Widgets that ship with core @@ -101,52 +47,21 @@ Widget data is checked in full once, where it arrives: every create and update r | `core:text` | Plain paragraphs of prose. Blank lines separate paragraphs; nothing is parsed as markup. | | `core:cta` | A short call to action with one link. | -## Guides - -<Cards> - <Card - title="Defining a Widget" - description="defineWidget, fields, namespacing and typed component props" - href="/docs/dev/widgets/defining-a-block" - /> - <Card - title="The blocks() Field" - description="Storing an ordered zone on a content type, and restricting what may go in it" - href="/docs/dev/widgets/blocks-field" - /> - <Card - title="Widget Variants" - description="One widget, several looks - stored beside the data instead of inside it" - href="/docs/dev/widgets/block-variants" - /> - <Card - title="Layout Areas" - description="Widgets side by side in up to four columns, without a columns container" - href="/docs/dev/widgets/layout-areas" - /> - <Card - title="Rendering" - description="ContentRenderer, missing widgets, and why a widget costs no extra request" - href="/docs/dev/widgets/rendering" - /> - <Card - title="Content Zones" - description="Naming a place on a page where widgets may appear, including around locked application UI" - href="/docs/dev/widgets/content-zones" - /> - <Card - title="Editable Pages" - description="Declaring a page's zones once, so the people who run the site rearrange them on the page itself" - href="/docs/dev/widgets/editable-pages" - /> - <Card - title="Visual Editor" - description="Turn a public page into an interactive editing surface with drag and drop and a widget sidebar" - href="/docs/dev/widgets/visual-editor" - /> - <Card - title="End-to-end Example" - description="From an empty plugin to a rendered page, in seven steps" - href="/docs/dev/widgets/end-to-end" - /> -</Cards> +## Find your guide + +| I want to | Guide | +| :------------------------------------------------------------- | :--------------------------------------------------------- | +| Build a widget from definition to a public page | [First widget](/docs/dev/widgets/end-to-end) | +| Define a widget's fields, icon and component | [Define a widget](/docs/dev/widgets/defining-a-block) | +| Store widgets on a content type | [Blocks field](/docs/dev/widgets/blocks-field) | +| Render a stored list of widgets | [Render widgets](/docs/dev/widgets/rendering) | +| Give widgets a named place on a page | [Content zones](/docs/dev/widgets/content-zones) | +| Put several zones on one page, around application UI | [Several zones](/docs/dev/widgets/several-zones) | +| Limit which widgets a place accepts | [Restrict widgets](/docs/dev/widgets/restrict-widgets) | +| Let moderators arrange a page in the browser | [Editable pages](/docs/dev/widgets/editable-pages) | +| Load and save an editable page yourself | [Custom loader](/docs/dev/widgets/custom-loader) | +| Understand how layouts are saved, checked and conflict-proofed | [Saving layouts](/docs/dev/widgets/saving-layouts) | +| Give one widget several looks | [Variants](/docs/dev/widgets/block-variants) | +| Put widgets side by side in columns | [Layout areas](/docs/dev/widgets/layout-areas) | +| Arrange widgets as a moderator | [Visual editor](/docs/dev/widgets/visual-editor) | +| Edit widgets stored in your own table | [Custom editor host](/docs/dev/widgets/custom-editor-host) | diff --git a/apps/web/content/docs/dev/widgets/layout-areas.mdx b/apps/web/content/docs/dev/widgets/layout-areas.mdx index 2eb8e974f5..25b6ac7f50 100644 --- a/apps/web/content/docs/dev/widgets/layout-areas.mdx +++ b/apps/web/content/docs/dev/widgets/layout-areas.mdx @@ -1,5 +1,5 @@ --- -title: Layout Areas +title: Layout areas description: An Area is a small layout container stored inside a zone - it holds widgets in up to four columns, it is not a widget itself, and it cannot hold another Area. icon: Columns3 --- @@ -17,7 +17,7 @@ zone └─ block a closing note ``` -{/* Image prompt: A wireframe of one content zone, top to bottom: a full-width block, then a rounded container labelled "Area · 2 columns" holding two blocks side by side, then another full-width block. A small sidebar on the right shows an "Area" panel with a 1-2-3-4 Columns switch, Alignment and Distribution selects under "LAYOUT", and Gap sliders under "SPACING". Dark UI, blue accents, 1600x900. */} +{/* Image prompt: A screenshot of the newsroom /newsroom/zones page in edit mode with the two-column area in the after-profile zone selected, showing the Area properties panel: a 1-2-3-4 Columns switch, Alignment and Distribution selects under Layout, and Gap, Space above & below and Space left & right sliders under Spacing. */} ## The three-way split @@ -27,7 +27,7 @@ This is the idea the whole feature is built on, and it is worth stating plainly: | :------------------------------------------------ | :-------------------------------- | :----------------------------------- | | **`data`** | One block | "Ships on Friday", a heading, a link | | **[`variant`](/docs/dev/widgets/block-variants)** | One block instance | `grid`, `list`, `compact` | -| **`Area.layout`** | The relationship _between_ blocks | two columns, medium gap, top-aligned | +| **`Area.layout`** | The relationship _between_ blocks | two columns, a 16px gap, top-aligned | A block never describes the block next to it. That is why columns are not a field, and why `Area` exists at all. @@ -41,10 +41,18 @@ An Area sits in the zone's array, beside the blocks, and is told apart by its `k { "id": "01JC…KP", "kind": "area", - "layout": { "columns": 2, "gap": "md", "align": "stretch" }, + "layout": { "columns": 2, "gap": 16, "align": "stretch" }, "children": [ - { "id": "01JC…R2", "type": "core:text", "data": { "heading": "Left" } }, - { "id": "01JC…T7", "type": "core:cta", "data": { "title": "Right" } } + { + "id": "01JC…R2", + "type": "core:text", + "data": { "heading": "Left column", "body": "Two widgets, side by side." } + }, + { + "id": "01JC…T7", + "type": "core:cta", + "data": { "title": "Right column", "label": "Read more", "href": "/docs" } + } ] } ] @@ -54,22 +62,26 @@ An Area sits in the zone's array, beside the blocks, and is told apart by its `k | :--------- | :------------------------------------------------------------------------------------------------------------------------ | | `kind` | Always `"area"`. It is the only thing that distinguishes an Area from a block, which is why a block may never declare it. | | `id` | The same kind of id a block instance has - stable, unique within the zone, and kept through every move and re-order. | -| `layout` | The tokens below. `columns` is required; the rest have defaults. | +| `layout` | The settings below. `columns` is required; the rest have defaults. | | `children` | Blocks, in rendered order. **Blocks only.** | Array order is rendered order, inside an Area exactly as outside one. -## The layout tokens +## The layout settings -Four closed sets. Not CSS, not class names - tokens VitNode renders, so a stored layout cannot turn into arbitrary styling smuggled through a content column. +Closed values and whole pixel numbers, never CSS or class names, so a stored layout cannot smuggle arbitrary styling through a content column. The interface is `BlockAreaLayout` from `@vitnode/core/widgets`: -| Token | Values | Default | What it does | +| Setting | Values | Default | What it does | | :-------- | :------------------------- | :-------- | :--------------------------------------------------------------------------- | | `columns` | `1` `2` `3` `4` | `2` | How many columns on a wide screen. Always one column on a phone - see below. | -| `gap` | `none` `sm` `md` `lg` | `md` | The space between children, in both directions. | +| `gap` | whole pixels, `0`-`100` | `16` | The space between children, in both directions. | +| `marginY` | whole pixels, `0`-`100` | `0` | Space above and below the area. | +| `marginX` | whole pixels, `0`-`100` | `0` | Space to the left and right of the area. | | `align` | `start` `center` `stretch` | `stretch` | How children line up across a row. `stretch` gives equal-height columns. | | `justify` | `start` `center` `stretch` | `stretch` | How each child sits across its own column. `stretch` fills it. | +Layouts stored before spacing was measured in pixels used names; `none`, `sm`, `md` and `lg` still read as `0`, `8`, `16` and `32`, and the next save writes the number. + Areas are **mobile-first**: below the `md` breakpoint every Area is one column, whatever `columns` says. Two columns on a 360px screen is not a layout, it is a dare. ## An Area is not a block @@ -78,7 +90,7 @@ This is the part worth reading twice, because it is what keeps Areas cheap: - There is **no `core:area` block**. Nothing registers it, nothing can be installed to provide it, and `registry.get("core:area")` is `undefined` - on purpose. - It needs **no entry in `allowedBlocks`**. A zone that allows `["core:text"]` still accepts an Area holding `core:text`. The allowlist governs blocks, and the children inside an Area are checked against the very same list as blocks at the zone's root. -- It has **no `data`, no fields and no component of its own**. There is nothing for a properties form to build, which is why the editor shows four selects instead. +- It has **no `data`, no fields and no component of its own**. There are no widget fields to edit; the editor shows the layout settings instead. In the editor's block catalogue it therefore lives in its own **Layout** section above the plugin groups, rather than pretending to be somebody's block. @@ -94,16 +106,11 @@ That zone accepts: `core:text` at the root, an Area, and `core:text` inside the ## Areas cannot contain Areas -**In Stage 4, an Area's children are blocks. Never another Area.** +**An Area's children are widgets. Never another Area.** That is enforced everywhere it can be: the drag-and-drop resolver refuses the drop and says so out loud, the catalogue hides the Layout section while an Area is the insertion target, and the API refuses a nested Area on write. A stored document that somehow contains one is shown as unreadable rather than rendered. -<Callout title="Why one level, when the shape would obviously recurse?"> - Because every extra level costs more than it looks. Nesting needs depth limits, cycle detection, an answer for what an allowlist means three levels down, a keyboard drag model that can climb out of a container, and a properties panel that can say *which* area you are editing. One level covers "put these two things side by side", which is what people actually ask for, at a fraction of the surface area. - -The shape is ready for it - `children` is a list of nodes, and a nested area would be one more node kind in it - so the door is closed, not locked. - -</Callout> +One level covers "put these two things side by side", which is what people ask for; nesting would need depth limits and a much harder drag model. ## In the editor @@ -130,12 +137,7 @@ contentNodeBlocks(nodes) // every block in the zone, areas flattened away `contentNodeBlocks` is what you want for anything that cares about blocks and not about arrangement: counting them, indexing their text, checking an allowlist. Rendering is already handled - `ContentRenderer` walks nodes and lays an Area out for you. -<Callout title="A migration you do not have to run"> - A zone stored before Areas existed is a list of blocks, and a list of blocks - is a list of nodes that never nests. Nothing was rewritten, no column changed, - and a page that never uses an Area keeps exactly the markup it had - the Area - only exists in the DOM when one is stored. -</Callout> +A page that never uses an Area keeps exactly the markup it had, because an Area only exists in the DOM when one is stored. ## When an Area is the wrong answer diff --git a/apps/web/content/docs/dev/widgets/meta.json b/apps/web/content/docs/dev/widgets/meta.json index e24d2f688d..0d4efa73a3 100644 --- a/apps/web/content/docs/dev/widgets/meta.json +++ b/apps/web/content/docs/dev/widgets/meta.json @@ -4,14 +4,19 @@ "icon": "Blocks", "pages": [ "index", + "end-to-end", "defining-a-block", "blocks-field", "rendering", "content-zones", - "visual-editor", + "several-zones", + "restrict-widgets", "editable-pages", + "custom-loader", + "saving-layouts", + "visual-editor", "block-variants", "layout-areas", - "end-to-end" + "custom-editor-host" ] } diff --git a/apps/web/content/docs/dev/widgets/rendering.mdx b/apps/web/content/docs/dev/widgets/rendering.mdx index 253e8d1e8f..55d6822c02 100644 --- a/apps/web/content/docs/dev/widgets/rendering.mdx +++ b/apps/web/content/docs/dev/widgets/rendering.mdx @@ -1,17 +1,25 @@ --- -title: Rendering Widgets +title: Render widgets description: ContentRenderer walks the stored instances, resolves each one in the registry, and renders it on the server like any other component. icon: MonitorPlay --- +`ContentRenderer` turns a stored list of widgets into React elements. It looks each one up in a widget registry and renders its component, on the server like anything else. Use it, or a [content zone](/docs/dev/widgets/content-zones) built on it, wherever a page shows stored widgets. + ## The renderer -```tsx title="src/routes/_main/pages.$slug.tsx" +A screen component in the app, handed a record the route loader read: + +```tsx title="src/views/page-screen.tsx" import { ContentRenderer } from '@vitnode/core/widgets/renderer' import { blocksRegistry } from '@/blocks.gen' -export const PageScreen = ({ page }: { page: PageContent }) => ( +interface PageScreenProps { + page: { content: readonly unknown[]; title: string } +} + +export const PageScreen = ({ page }: PageScreenProps) => ( <main className="mx-auto flex w-full max-w-3xl flex-col gap-8 px-4 py-10"> <h1 className="text-3xl font-semibold text-balance">{page.title}</h1> @@ -20,19 +28,43 @@ export const PageScreen = ({ page }: { page: PageContent }) => ( ) ``` -For each stored instance it resolves the definition in the registry and renders the component with the instance's own id as the React key - so re-ordering a page moves DOM nodes instead of re-mounting them. +`blocks` takes the stored list as it came from the API, typed `readonly unknown[]`, because the renderer checks each entry itself. For each instance it resolves the definition in the registry and renders the component with the instance's own id as the React key, so re-ordering a page moves DOM nodes instead of re-mounting them. [First widget](/docs/dev/widgets/end-to-end#render-it-on-a-page) shows the same thing in a plugin page, with its loader. -| Prop | Default | | -| :--------- | :------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `blocks` | — | The stored list. `null`, `undefined` and `[]` all render nothing. | -| `registry` | the process default | The registry to resolve against. Passing it is the normal way. | -| `validate` | `"development"` | `"never"`, `"development"` or `"always"`. It governs the allowlist and the developer warnings, never the structural check - see below. | -| `fallback` | a development-only notice | What to render for a block that cannot be resolved or fails a check. | -| `allowed` | none | An allowlist to hold the instances to, under the same `validate` gate. [Content Zones](/docs/dev/widgets/content-zones#restricting-what-may-go-in-a-zone) pass theirs here. | +| Prop | Default | | +| :--------- | :------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------- | +| `blocks` | — | The stored list. `null`, `undefined` and `[]` all render nothing. | +| `registry` | the process default | The registry to resolve against. Passing it is the normal way. | +| `validate` | `"development"` | `"never"`, `"development"` or `"always"`. It governs the allowlist and the developer warnings, never the structural check - see below. | +| `fallback` | a development-only notice | What to render for a block that cannot be resolved or fails a check. | +| `allowed` | none | An allowlist to hold the instances to, under the same `validate` gate. [Zones](/docs/dev/widgets/restrict-widgets#on-a-zone) pass theirs here. | ## Where the registry comes from -Pass it. `blocksRegistry` is exported from the generated `src/blocks.gen.ts`, and handing it to the renderer is explicit, testable, and works when one process serves more than one application. +Pass it. In an app, `blocksRegistry` comes from `src/blocks.gen.ts`, which VitNode writes on every `vite dev` and `vite build` from core and every configured plugin that exports a `blocks` object from its widgets module: + +```ts title="src/blocks.gen.ts (generated, excerpt)" +import { createBlockRegistry, setDefaultBlockRegistry } from '@vitnode/core/widgets' + +import { blocks as blocks0 } from '@vitnode/core/widgets/built-in' +import { blocks as blocks1 } from 'newsroom/widgets' + +export const pluginBlocks = [blocks0, blocks1] + +export const blocksRegistry = createBlockRegistry(pluginBlocks) + +setDefaultBlockRegistry(blocksRegistry) +``` + +A plugin cannot import the app's generated file, so a plugin page builds its own registry from the widgets it knows: + +```ts +import { createBlockRegistry } from '@vitnode/core/widgets' +import { blocks as coreBlocks } from '@vitnode/core/widgets/built-in' + +import { widgets } from '@/widgets' + +const blocksRegistry = createBlockRegistry([coreBlocks, widgets]) +``` <Callout title="Import blocks.gen only where you render blocks" type="warn"> That file statically imports every configured plugin's block components, so @@ -42,9 +74,9 @@ Pass it. `blocksRegistry` is exported from the generated `src/blocks.gen.ts`, an router cannot reach it. </Callout> -Evaluating `src/blocks.gen.ts` also installs that registry as the process default, so a renderer with no `registry` prop finds one. Treat that as a convenience for a renderer deep inside a tree that cannot be handed one, not as setup: it only works if something already imported the file on that route. +Evaluating `src/blocks.gen.ts` also installs that registry as the process default, so a renderer with no `registry` prop finds one. Treat that as a convenience, not as setup. It only works if something already imported the file in that environment. -The API does not rely on it. It builds its own registry when it boots, from the same plugins' `blocks`, so write-time validation is never waiting on a front end to evaluate a module. With no registry at all, `ContentRenderer` throws a `BlockRegistryMissingError` naming both ways out. +The API does not rely on it. It builds its own registry when it boots, from the `blocks` each plugin passes to `buildApiPlugin`. With no registry at all, `ContentRenderer` throws a `BlockRegistryMissingError` naming both ways out. `setDefaultBlockRegistry` returns the function that undoes it, so a test - or a second application - can install one without leaking it: @@ -112,31 +144,35 @@ Pass `fallback` to decide for yourself: ```tsx <ContentRenderer blocks={page.content} + registry={blocksRegistry} fallback={({ instance, reason }) => reason === 'unknown-type' ? ( - <PluginMissingNotice type={instance.type} /> + <p className="text-muted-foreground text-sm"> + This section needs the plugin that provides {instance.type}. + </p> ) : null } /> ``` +`reason` is one of `unknown-type`, `not-allowed`, `invalid-data` or `unknown-variant`. + ## Performance A block is a normal React component and the renderer is a loop. -- **No request.** Definitions come from the configured plugins, not from the database. A page of hero + text + image + CTA is exactly as many requests as a page without blocks. -- **No client state.** `ContentRenderer` holds none, subscribes to nothing, and renders on the server like anything else. -- **No validation library.** `defineBlock` and `ContentRenderer` do not reach Zod; the schema machinery lives in the write path. Bundling core's three blocks plus a plugin's, the registry and the renderer comes to about 25 kB of JavaScript with no third-party dependency in it at all. -- **No editor.** `@vitnode/core/widgets` is free of React entirely - it is the metadata surface the API validates with - and `@vitnode/core/widgets/renderer` reaches no drag-and-drop, AdminCP, form or query code. Tests assert the reachable module graph of each entry point, so future editor code cannot drift into the public bundle. +- **No request.** Definitions come from the configured plugins, not from the database. A page of widgets makes exactly as many requests as a page without them. +- **No client state.** `ContentRenderer` holds none and subscribes to nothing. +- **No editor.** `@vitnode/core/widgets/renderer` reaches no drag-and-drop, AdminCP, form or query code, and a boundary test in `@vitnode/core` keeps it that way. -Keep your own block components in that spirit: a block that needs a chart library should `lazy()` it inside its own module, so a page that never places it never pays for it. +Keep your own widget components in that spirit. A widget that needs a chart library should `lazy()` it inside its own module, so a page that never places it never pays for it. -## Content Zones +## Content zones -`ContentRenderer` is the loop. A [Content Zone](/docs/dev/widgets/content-zones) is that loop with a name on it: +`ContentRenderer` is the loop. A [content zone](/docs/dev/widgets/content-zones) is that loop with a name on it, which is what the visual editor needs to place widgets on a page: ```tsx <ContentZone id="main" blocks={page.content} registry={blocksRegistry} /> ``` -The name is what lets an editor put something in a particular place later, and what lets blocks sit around application UI that stays locked. A zone renders through this renderer, so everything on this page applies to it unchanged. +A zone renders through this renderer, so everything on this page applies to it unchanged. diff --git a/apps/web/content/docs/dev/widgets/restrict-widgets.mdx b/apps/web/content/docs/dev/widgets/restrict-widgets.mdx new file mode 100644 index 0000000000..4fdd8bb3e8 --- /dev/null +++ b/apps/web/content/docs/dev/widgets/restrict-widgets.mdx @@ -0,0 +1,96 @@ +--- +title: Restrict widgets +description: Limit which widgets a VitNode blocks() field, content zone or editable page zone accepts with one allowlist format, share the list between them, and know which check runs on save. +icon: ListFilter +--- + +Every place widgets go takes the same allowlist. Write it on a [`blocks()` field](/docs/dev/widgets/blocks-field), on an [editable page](/docs/dev/widgets/editable-pages) zone or on a [content zone](/docs/dev/widgets/content-zones), and the editor only offers what fits. Where you write it decides whether the API enforces it. + +## The list format + +An allowlist is `"*"` or an array mixing exact ids and plugin wildcards: + +```ts +'*' // every installed widget +['core:*', 'newsroom:*'] // every widget of two plugins +['core:hero', 'newsroom:callout'] // exactly these two +``` + +A plugin wildcard is the useful middle. Installing another plugin does not silently widen what a page may contain, while a new widget in a plugin you already trust appears automatically. An [Area](/docs/dev/widgets/layout-areas) needs no entry; the widgets inside it are checked against the same list. + +## Where it is enforced + +| Written on | As | Checked | On refusal | +| :------------------------- | :-------------------------------- | :----------------------------------------------- | :------------------------------------------------ | +| A `blocks()` field | `field.blocks({ allowed })` | By the API, on every create and update | `400`, nothing stored | +| An editable page zone | `allowed` in `defineEditablePage` | By the API, on every save to `PUT /pages/layout` | `400`, nothing stored | +| A standalone `ContentZone` | `allowedBlocks` | Only while rendering, per its `validate` mode | The widget is skipped (by default in development) | + +In the visual editor, all three behave the same. **Add widget** on a zone lists only what the zone accepts, and a zone turns red and refuses a widget dragged onto it that it does not accept. Only the first two are also checked on the server. A [custom editor host](/docs/dev/widgets/custom-editor-host) that saves a standalone zone must check the list in its own save route. + +## On a blocks() field + +```ts title="plugins/newsroom/src/content/page.ts (excerpt)" +content: field.blocks({ + allowed: PAGE_BLOCKS_ALLOWED, + max: 50, +}), +``` + +The default is `"*"`. A write holding a widget the field does not allow answers `400` with `Block "core:cta" is not allowed in this field.`, and nothing is stored. + +## On an editable page + +Each zone declares its list once, in `defineEditablePage`, and every `ContentZone` with that id inherits it: + +```ts title="plugins/newsroom/src/content/settings-page.ts (excerpt)" +zones: { + 'before-profile': { allowed: PAGE_BLOCKS_ALLOWED, max: 20 }, + sidebar: { allowed: PAGE_SIDEBAR_BLOCKS_ALLOWED, max: 20 }, +}, +``` + +The server reads the list from the registered page, never from the request, so no request can sneak a widget into a zone that refuses it. Props on the page's `ContentZone` can narrow the declaration but never widen it: + +| At the call site | Effect | +| :--------------- | :--------------------------------------------------------------------------------------------------------------------------------- | +| `allowedBlocks` | **Only narrows.** It is intersected with the page's list, so `"*"` cannot re-open a restricted zone. An empty intersection throws. | +| `min` / `max` | **Only tighten.** The higher `min` and the lower `max` win. A `min` above the `max` throws where you wrote it. | +| `blocks` | **Overrides the source.** The array you pass is what renders, for a zone whose widgets come from somewhere else. | + +## On a zone + +A standalone `ContentZone` describes what belongs in a place; it does not guard storage. While rendering, its `validate` mode decides what happens to a stored widget the list does not allow: + +| `validate` | A widget the zone does not allow | +| :-------------------------- | :-------------------------------------------------------------------- | +| `"never"` | renders | +| `"development"` _(default)_ | is skipped with a dashed notice in development, renders in production | +| `"always"` | is skipped everywhere | + +Use `"always"` on a page that renders widgets the API never checked, such as a live import. See [Validation](/docs/dev/widgets/rendering#validation) for the rest of what the renderer checks. + +## Share one list + +When a field and the page that renders it should accept the same widgets, put the list in a module of its own and import it from both. The newsroom plugin keeps its lists in `src/content/page-blocks.ts`: + +```ts title="plugins/newsroom/src/content/page-blocks.ts" +export const PAGE_BLOCKS_ALLOWED = [ + 'core:*', + 'newsroom:callout', + 'newsroom:features', +] as const + +export const PAGE_SIDEBAR_BLOCKS_ALLOWED = ['core:text'] as const +``` + +`page.ts` passes `PAGE_BLOCKS_ALLOWED` to the field, and `pages/site-page.tsx` passes the same constant to its zone as `allowedBlocks`. Import the array, not the content type. A page that imports a content type definition pulls the whole schema builder into its bundle to read one list. + +## Check the result + +Sign in as an administrator, open `/newsroom/zones` and choose **Edit widgets** from the user menu. **Add widget** on the sidebar zone lists only **Text**, because the sidebar allows `core:text` alone; drag the callout from another zone onto the sidebar and the sidebar turns red and refuses it. + +## Related + +- [Editable pages](/docs/dev/widgets/editable-pages): declare a page's zones and their lists. +- [Saving layouts](/docs/dev/widgets/saving-layouts#when-a-save-is-refused): every refusal a layout save can answer. diff --git a/apps/web/content/docs/dev/widgets/saving-layouts.mdx b/apps/web/content/docs/dev/widgets/saving-layouts.mdx new file mode 100644 index 0000000000..3d068d9dde --- /dev/null +++ b/apps/web/content/docs/dev/widgets/saving-layouts.mdx @@ -0,0 +1,112 @@ +--- +title: Saving layouts +description: How VitNode reads, permission-checks, validates and stores an editable page's widget layout, covering the GET and PUT /pages/layout routes, the core_page_layouts table, limits, refusals and per-zone conflict detection. +icon: Database +--- + +Core owns the storage of every [editable page](/docs/dev/widgets/editable-pages): two routes, one table and the checks around them. `PageWidgets` and `createContentEditorAdapter` call them for you; this page is the reference for what they accept, store and refuse, for debugging or for a [custom loader](/docs/dev/widgets/custom-loader). + +## The two routes + +Both are addressed by page id, never by your plugin: + +```http +GET /api/@vitnode/core/pages/layout?pageId=newsroom:settings public +PUT /api/@vitnode/core/pages/layout the page's moderator permission +``` + +With `fetcher`, that is `plugin: "@vitnode/core", module: "pages", path: "/layout"`. + +```ts +interface EditablePageLayoutPayload { + pageId: string + updatedAt: string | null // null: nothing saved yet, these are the defaults + zones: Record<string, ContentNode[]> +} + +interface EditablePageSavePayload { + pageId: string + zones: Record<string, ContentNode[]> // only the zones that changed + expectedZones: Record<string, ContentNode[]> // what each of them held when editing began +} +``` + +Both types are exported from `@vitnode/core/content/editor`. + +**`GET`** answers with the **effective** layout. For each declared zone, that is the saved widgets if somebody saved it, otherwise the zone's `default`. A page nobody has saved answers `200` with the defaults and `updatedAt: null`. A page id nobody registered answers `404`. + +**`PUT`** takes `{ pageId, zones, expectedZones }` and answers with the same payload shape, holding the saved zones only. Which zones exist and what each accepts comes from the registered page, never from the request body. + +## Who may save + +`PUT` checks the page's `permission` as a **moderator** permission, on every request, whatever the browser showed. A moderator permission is used because it is read from the signed-in member, which a public page has; an AdminCP permission only exists inside the AdminCP. A root role passes. + +`?edit=true` in a URL only asks for edit mode. The editor opens only when the permission agrees, and the save checks the permission again. + +The page asks "may I edit?" through `GET /api/@vitnode/core/users/permissions`, which answers `{ root, permissions }` for the signed-in member and `{ "root": false, "permissions": [] }` for a visitor. + +## How a layout is stored + +In core's `core_page_layouts` table, one row per page: + +```text +core_page_layouts + pageId varchar primary key + zones jsonb not null default '{}' + createdAt timestamp + updatedAt timestamp +``` + +The row holds **overrides only**, just the zones somebody saved. Defaults live in code, in `defineEditablePage`. + +- A page nobody has saved has no row, which is what `updatedAt: null` means. +- Saving a zone back to exactly its default drops its override; when no overrides are left, the row is deleted. +- A saved zone the page no longer declares is ignored, not deleted. Put the zone back and its widgets return. + +Nothing here is a content type: no publishing, revisions, search or AdminCP screen. + +## Limits + +| Limit | Value | Counts | +| :---------------------------- | :----------------------------------- | :------------------------------------------------------------------------------------------------ | +| A zone's `max` / `min` | `200` if `max` is left out; no `min` | **Widgets.** A widget inside an [area](/docs/dev/widgets/layout-areas) counts; the area does not. | +| `CONTENT_BLOCKS_ABSOLUTE_MAX` | `1000` | **Entries at the zone's top level**, widgets and areas alike. Nothing can raise it. | +| `AREA_CHILDREN_DEFAULT_MAX` | `50` | **Widgets in one area.** | + +All three constants are exported from `@vitnode/core/widgets`. `defineEditablePage` itself refuses a zone whose `min` is above its `max`. + +## Two moderators, one page + +`expectedZones` turns "last save wins" into "the save that knew what it was replacing wins". Before writing, the server compares each submitted zone's `expectedZones` entry with what that zone holds now, inside the same transaction as the write: + +| Situation | Result | +| :------------------------------ | :---------------------------------------------------------------------------------------------- | +| Two people, **different zones** | Both saves land. Each save writes only the zones it names and leaves the rest as it found them. | +| Two people, **the same zone** | The second save answers `409`, naming the zones that moved, and **nothing** is written. | + +The editor shows **Somebody else saved this page first** and keeps every change, so the moderator can reload and redo it on top of the new layout. Nothing locks and nothing polls. + +## When a save is refused + +| Refused | Status | +| :--------------------------------- | :------------------------------------------------------------------------------- | +| A page id nobody registered | `400` | +| The permission is not held | `403` | +| No zones at all | `400` | +| A zone without its `expectedZones` | `400`, since without a baseline the server cannot tell an edit from an overwrite | +| A zone the page does not declare | `400`, listing the zones it does | +| A widget the zone does not allow | `400`, also inside an area | +| Too many or too few widgets | `400`, from the zone's `max` and `min` | +| A zone somebody else changed first | `409`, naming the zones. Nothing is written, not even the other zones | +| The stored layout cannot be read | `500`. A failed read is never answered with defaults | + +Every refusal names its reason in `message`. In the browser, the editor adds its own guard. A zone holding content it cannot read keeps **Save** disabled until somebody removes it; see [Visual editor](/docs/dev/widgets/visual-editor#when-the-editor-refuses-to-save). + +## The event + +A save that changed something emits [`core.page-layout.updated`](/docs/dev/events/built-in-events#page-layout-events) with `{ pageId, changedZones }`, after the write. A save that changed nothing stores nothing, keeps `updatedAt` and emits nothing, but still answers `200`. + +## Related + +- [Editable pages](/docs/dev/widgets/editable-pages): declare and render a page. +- [Restrict widgets](/docs/dev/widgets/restrict-widgets): the allowlist each zone checks. diff --git a/apps/web/content/docs/dev/widgets/several-zones.mdx b/apps/web/content/docs/dev/widgets/several-zones.mdx new file mode 100644 index 0000000000..3c1340f87a --- /dev/null +++ b/apps/web/content/docs/dev/widgets/several-zones.mdx @@ -0,0 +1,76 @@ +--- +title: Several zones +description: Put several content zones on one VitNode page, around application UI such as a form, with unique zone ids, page-local names on editable pages and per-zone saving. +icon: Rows3 +--- + +A page can hold any number of [content zones](/docs/dev/widgets/content-zones). Each has its own id, its own widgets and its own rules, and the editor saves each one separately. The usual reason for several is application UI in the middle: a notice above a form, a sidebar beside it, nothing inside it. + +## Before you begin + +- A page that renders [one content zone](/docs/dev/widgets/content-zones#render-a-zone). + +## Put zones around application UI + +Place a zone wherever widgets may go, and keep your own components between them. Here `zones` is what your loader returned, one list of widgets per zone: + +```tsx +<div className="flex flex-col gap-6 lg:flex-row lg:items-start"> + <div className="flex flex-1 flex-col gap-6"> + <ContentZone id="before-profile" blocks={zones.beforeProfile} registry={blocksRegistry} /> + + <ProfileForm /> + + <ContentZone id="after-profile" blocks={zones.afterProfile} registry={blocksRegistry} /> + </div> + + <ContentZone + as="aside" + className="border-border w-full rounded-lg border p-4 lg:w-64" + id="sidebar" + blocks={zones.sidebar} + registry={blocksRegistry} + /> +</div> +``` + +`ProfileForm` is application code, with its own validation and tests. Nobody can drag a widget into it, and in edit mode it gets no overlay, so its inputs keep working and keep their state. + +On an [editable page](/docs/dev/widgets/editable-pages), leave `blocks` out. The page hands every zone its widgets, its allowlist and its limits. + +## Give every zone its own id + +A zone id names one place, so two zones on one page cannot share it. View mode renders both lists, but edit mode refuses as soon as both are on the page: + +```tsx +<ContentZone id="main" /> +<ProfileForm /> +<ContentZone id="main" /> +// BlockError: Two `<ContentZone id="main" />` outlets are on the page at the same time… +``` + +The editor stores and saves widgets by zone id, so with two it could not tell which place a widget belongs to. Moving a zone to another element, or re-rendering it under another branch, is fine. Need the same widgets in two places? Use two ids, such as `main` and `main-aside`, and decide what goes in each. + +## Choose the ids + +| Zone | Id | +| :---------------------------------- | :---------------------------------------------------------------------------------------- | +| A standalone zone | Any valid id. A `scope:` prefix, such as `homepage:hero`, keeps screens apart. | +| A zone declared by an editable page | Page-local, such as `sidebar`. The page id (`newsroom:settings`) already namespaces them. | + +Either way, the id is permanent, because a saved layout addresses the zone by it. + +## How the editor treats several zones + +- **Each zone saves on its own.** A save carries only the zones that changed, so two moderators who edit different zones of one page both succeed. See [Saving layouts](/docs/dev/widgets/saving-layouts#two-moderators-one-page). +- **Each zone keeps its own allowlist.** A widget dragged onto a zone that does not accept it is refused there. See [Restrict widgets](/docs/dev/widgets/restrict-widgets). +- **A zone that leaves the page leaves the editor.** A zone hidden behind a tab while somebody edits drops out of the editor; what is stored for it stays stored. + +## Check the result + +Open `/newsroom/zones` from the newsroom plugin. Four zones sit around a profile form: `before-profile` with three widgets and no wrapper, `after-profile` with two layout areas and a call to action, `sidebar` in an `<aside>`, and `before-footer`, which is empty and renders nothing. In the page source, only the sidebar carries a `data-vitnode-zone` attribute. + +## Related + +- [Editable pages](/docs/dev/widgets/editable-pages): declare these zones once and let moderators arrange them. +- [Layout areas](/docs/dev/widgets/layout-areas): widgets side by side inside one zone. diff --git a/apps/web/content/docs/dev/widgets/visual-editor-edit-mode.webp b/apps/web/content/docs/dev/widgets/visual-editor-edit-mode.webp new file mode 100644 index 0000000000000000000000000000000000000000..d0152bc21c9525f447d969c83abd5d72b60adc9a GIT binary patch literal 203506 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 |_c5BlxUOA*m=}|8LZQU>v=Y zenXp8Ea@!)6+EF^pL8O_qo*#)LDOj+3oVnkA{C$+JHk3sH_+zv>bFPbgboxpwVWaG zb_QzO1*n0w5;u=hZZK11aef1xRUUu4lZ4N82(3!TzlGFBfC*4OHey4uo~L{6WJL0= zM3ODeL+@FAE-YH<To;XJa}if~t1bfK!fwcL8dg^1Tu1(V;F=nwM|_4aV%GWNRlc4F z5_tVx7c2&>*^HiBotJdzTGiM=P^hGzcLyO%f>2c4vsR5(bK23cDCPO!Qpgew_wkk% zreGdGlBxee!8&&HQKT-Dwb)`}8xADAcmn#+jZ|rbXc9db+W8e$%J_<fIi$=%*faB_ zIn0ke!J;FsUu@7s%hRC8aQFp2GEjqCSBdy2ww^`s^Xv<HTlJGE?0PLt`M~FUt9j`5 zxipHQ&!aUAb`V~X>D)MkrS;+Jq8C;XFYl^zXc{VGM6tD#gtDnAe1>%m&f0qJ7{$~x zI3KVoyC4~F{zM>Nh4XXdM9MP=h7g#!9ga*=j&=E)s0*A$P$fDgp!BV{scaA4yu`O& z%4P)hM-Tp~xQ#)4DSl)T$Yz^np*#u$F332AF`p}W!`Z^u%UF{L1Ve_WMLKQ>IQP=| z%dpeT0T$1^%~29pBW`~Y{Nm~bIg1{pgsx6U?FIBZA$%qi4=+db5Bsa-GtFx@o^0*t zUlFE6te)+A_-+mdSNLwBx@AwK5vlGLq`KiBNIIL((7tk!21EzXS!wg5BY|s_5^71( zVMG4C_KICV<mCVG^W*`+K(dJ<Zxb!mkA|<$(-}UQKD@k_*``xQ@)BeS)cOuO1g3t6 zEuAE7WNw|1N!QBM21+BYS$7VVO$J$&YN6kUzeFBiA#5@O5eQQ*R{dXswJW|AbPPLB zx(|qdIZA9zc9~t*&0Bg5qCJvqDr2ktTkLORBTHeAZ)AO*Z*rJ^TMO4NPallN<ygqr zeMcqb4f1~TXyoZp8-$k~EcVJ{gA$oWNZ3Q~Cmci0f+;~$Sz)dwAm^LDoyFK)a4BRp zf(`pse#gFi-4d%aKyqEH>_Ko#=m8$<4-{qL{!?BpOCXw6WD4{4oPo9tS!?dqGG8gJ z>zLM0mZg=`a;MxIg$~uTy07W#>+MEKY{o)r^}dT#Dq#SHk2v1^G^M){XykhZ`ch8# zZ$N~IGzhV%Ma$~<CbCxj(Brx%JE7TkKdVtm58jZ^^S&vR-*DVLcQ_<Q^S;&-LW5Ec ztZeBJ%q3riMv*vhgUD{*ui1yY=4UQ%xBg8NWbU--c`xfT8>utHvCSg9F~4Cvb@Ma< zRe<&r75MOjPuQ0#bc(x_zwtPAq&ix^S<f&mOeT7A-4e0X@SvkYMCqzq$sjLVOB*4o zZZkRR)_l>{r9Mgnzb|u`6{wZIic8oMHV}JGGHx|o_J-~p3?00h!6#vtA*8ABTkFOM zTy{}i=lW_%L@M%Fsq4O&i;EOra8*Z?6WJu_TSh_e9nP!S>QqQ});QuP;Mj4Zs&QCd z93kyO->UTu<5Ff+r(DI7qqwIR2?)e*__gv(yQ5y*wu_b@SZN@?WmyZq9@A@#KnCpD z#=g{R*V`W+s<svCZ*9ZT>!8f`1_ow<EN?4`@|8bg%bc#kMyhrEk^JS+C-y^yw!TOm zS?RFbl1BRsE+fmc-kdm601PELWRQjDLE6e^f5=x7N$2v_dGBoP&A^sdv@)w;k#Jw4 z0o^$i7QwehGA{KxPS^a5B4^UY-65oJJIHVw?3D_7fW|oFSBh)^5U66Ln1sKCD<Gx; zaBd+^SU=hq8=l%t%L{3n^LC?WXbi`?{%iM7z8Z;<k^VI@)R^uMH<BcREV5>@LZpa< zJnydg6|#}{Zd8!X1Lu$m46)rxl+QdFG=f85UN9Qwb3yTXna9Oj;KSEG`k{EfK=@6L zk~-;x6<GIzlVE^;0<+S-ToqbN=G$3nxWAv#7V}&S3EyN!tKQbt9jhZ8tn)iLkh!Ga ztI!n^gV3F98S=>2<>|A)FEo_Pu5Qe)@R^vp1U?mVCGw)Rr3m$o*21euSfoQQsvbl} z0`su0FCT>Xb}%<u&fPNrHdFGxa_XM0hP-H}(zRG)wC^^_qYca(L=_KI2lfH0J%u}v zNoHVbnSQpVzc&D87&Wu6NeQ+6Hh!vgtj9*}Wcn$&YpBmF(G5zo&`L|g!-vD_0tuvN zwGE}nt7QCAKfDd^LLvTDb^(K=V+4;j|1=}T*w}5@J##SQMhIGI{^B!hv1n^B?B@|n zSmEusouEIz^m|PkZt98tf`YTG%h77$M+r2lbTTDl>}QY#SZBP_yjiF9a5wSAJMIeg zhj0Cv)QIeAF#`lpTW<2ylC}_rKxHDoU+a1yw;=JsOI(>daSk8F6};qY!7?=a$Pjb8 zC+{8+v=%4So`ozOVy+prK;**W3O~5C<{|zK?Ms|v(>hrLg>mp*4HQL(vdY!UU01Y? zmeV(|8iz6wY!n>*on%$SeS?bi_{d*ghzANvftCnAj2i7nUkm>KlC2H4@^a)J2dzAK zve=2ZS-Yzu^(2X!HF^ds#l!+16vG!RHsm)u!v4xjJjIs3yKP3B6<$3#jcA*txOAm# zf9Yo0id+_cU7tUXx_1c1h@X7VM|D>yWJ*fa8#bt&zLHta*GlIFOF<9_YvjZ}7pk}N zSA<AIW=&XA8h-=r=W{eGl*cae1ezHks$45LEC>hgY)z<tsvQry+IWp(?>^cX=?C#) ziLw|xpGaN$fw>O<1MnOKqTm6Iyx|f!om_c%1Rwli&MGNM`p7la&D(*D>wJpHF9}-} zFER-A>&+RJZF7f)7&>$cZ#sPDS|DZ|hU14=$Mndy7>pF02%!VsM?OSCb_0r6X}$PS z=6>jODfr@5ojlwWd)8<z@4j`<CXl}fx5Y;)>rSTce?da>nQ*andW|Nr2_$Lb0kE5h z-fP27Aeie#BVfJMXZP7!m$!9oB57Dpx^3}GxwjK2^=0}=H2jOuH|%cu*jvd$R-ck7 z5pC48S!3FLlFCnNSqm@2|1?kWxrMT#Kr_u%s@6c&+ogmO=KJ05Zi^%Q@vj=~Flc@R zk#=e3Q#d)5K7P)B_o>HOAHZ0_ckrifBh=JGRAMh@CWLlS0HlL=qT@G3WJQN6ndmLP zK!if|dLAlV*tcw_1M8ewSqh}vlDyOyR)W0gC#q9$P8W@9N0H1?SBsxx(=8q(P^59G zGTPR_%rLE=4=x=GDh;wV&D+Vmc?5SOvf4>MEFa?MuK(O<;UP24$jc)MVVkUB0k$Co z!KQQ%{|@L@vZ6&g8pkmm`539z1G{2JSlx^m3zObLS8PH?t-w(;Cl)xm)pYhl4O3R~ zy+>rTVGx~w;F`u#m`AC^mvN)hAU(cSe)uBmJ5kPhfy?lw<0PK3*LAP$<VU-c<kqG^ z&Kn3u9J#t`uu^Opb)u8R7IGf<&@`7V+Y~1?%BK^(XrU8lEWr@VYQqnxme|qD=*||r zbQ+CvG7Y-Et645n`Y1;{;jU){ezOFR9~+n;(-e~&bN#b(OJfK}K&`-)h8fpkxR8PX zYB?x#4jhjhNwgPkuOPE;(`paZAH<kINi(Jy0zNa2VH7zClQkM~atB=C1>OzAnhq|N z=EmApJQX)*8@v+y>)k(0E0SM%n4U2Tw%nTW2apZ1)-|zIAvop9Nxxx3`mm8b+loFP zv6tx|stW}kcuh5n4+YgN^I&|8`1dN!iH%I{WC{)$ktEr%k7rPeFP4ex*@Vt~3sPl; zM`cPGlpd$6aU-bpI``cC!y5m<+F@yJJ=siT)Sf6PVT*CX^kSN7{nag=!7EPwlydLW zOIDpuxBU@80mE*pv(3+-P^T-AR?(uJ#4v%#hcDL<n|8jZ5!^ogfOjNuR-Td7s@wJT zBMtmAM?hE=8?7k1z6xf4+P$^*3C+rRi(VvxlhFPolT9PU=0uUVtRIS|eG{qPH@QUV zt+2vT;jPi?8);lR-0d(}epIW|{TN%(FI{gI{H1I-hi|nf{O#PdJ&u1w(}j(uyu(0I zuGqn}W?wLrrV3<9uKB)c!l>o0%EQ|KvPp1ieJxR(IEE|rFDSXl0_~oEUtOI@p<70N zhq(T-eGo)sWQUefJ<m|fnLS5H;U;_5wk8eV>i)@(B!hF+G2SCagjw1|mcZ0E!Fd6_ z+ST)C|3y^=DwXj$dII-yoKVcO3V7*eSsEmu1N^J30hg79Fy2QwQ!!aFT7SQGfwj9S zUL8c(_i?W8)6~-BIM($S3*e+Y6f@TsFy0U@-vAx8#)c>;-UJ1&#K^bI2XjExX_v~C z$?$3Fy6{{vzIAze-kU5!N0k;F{rH|$oEVd$0m3bUGH3;A3|mmVt0B3fVF5)3p){OX zwB!diw(RS(e{)StJZc!j5yXlD6o1>D3{vb%g5v{C(p!x<ed6d&*SYxY3P&yPDH#o{ z2pAkxMnm4*>Lt3|A388d7j4xH>~GO7wg?))*ulG&1|xXeWn;!{Hl>G%BTf^`siDt5 z@`pJT6VPY9*>;cv<cI*|mN<?xVJ~Yzh;yYK6#KcRG4+HN#z8XWjYFQqGysWd?JsMk zD9<!o1CJS3l(S_EU*i9)S8Puct@|nru5pU(-<|B<48%(8LWTm{;IjS92$~sb5=XKD z<@GLWv`=vG66rNsKV|T=mBVlHV5ow{T8OQO_Wn`gU5Z)nnukA%Ug&J{lg|1mA-JBN z3;I0n??{@2#4aQpG7e1|_Eb{JeVQpXL-pk(U+zFFMxVGk0H}-OV67+SBJta{g7$HF za0;ENOt^6e0!P+hgpUg*PD}IODN3vRCjMG7G}N+b>TBz&w@%)1rmrccjouS-wtvgr z3hHt>Om`Tpf$LpYVy%xUoK)bk&?D0kBv-&SVq_5A9RQ2XwP^vYd{2ktPhw-<aKDba z@|dq`OMSjd_#)fjtR0ke6CcOUf?G87hE?KDAfY|bZcgN7hnjdxZBiQ&M~ocFRg`6! z;P8$slTQ+xi0PJ&%_Jw>*Ul?U@Gx&y6#s_7K<faY)U<dPdt+7|GOGwa*)jZ3*^xP+ z5DjM8#z%nqlk<1&bZf0(+C`*=DDWFd>4M<~INquLj>@j_X971m%hkEt69B7{&Ohmi zRwz<c`m#5S56-ZzQm1}y#Fdq&=1GiBk4kep^QilkV8g_7%vHLV2(Ul@*;lAKv}R+% zCF#$+4sYy-fvk>6wxWF#q>eKwvn%m%zJDR)hx34)m57R@`!L7nj;UTB90DQgY1`vX z!&5~7t1e}^;6PdknL>1d$Idw3B>?s6Viq^Os-oaln~vIKEPzyF`p@b4Q4y2-b6MCH zkD67kD{)=4NNoR1Ix2qU02NprM%f`19h{xn#tNL+KfQ``E6ut?L$#`b1!0<=tv+46 zMwHcL$;m-2&NS<Z97(js%t9i!7p`AueBkoFn$Ns~?6xulr5pujZ;Ut5x6J~i{>u&l zelKfOD)P=!rY(I_rR?f2KydD6g4+?wg8pUB^F4*po6t}<as0ZUODQpTR_%-v*BVUF z6s2(Se_%`M&<DxDJV{DbAY0=fU`uOt2B@zTpTr7UXOOxlBv`ue6&PR4`jnzFX`i4( zX<JL*7#>~pckc~5+HD;5-yW#6p+&NI1jJbg{aO99;*$<)<YVCSKkPTUJqtUqBG z+?iJ^8?;458mbv<OO~;`elw-+fIu}=yt-1blj)v#i&>5TVR(ZqCcvj*DPQGG{7@Jl zRVh__J=mG3tg^&C`{6eW)I@otXZ)uuhZ^|gLt;fqG~B^{Wia@pD*{`b<E0RU)_lIO zpr5%|k3q3V*3TbMOHBn9E_Zya`l<5vgm8M-BU8f+C!O#&gqsH=l{gF-p6fzX^r<BD zAz`MDOsBRVWS)|8iNqM3v0p@zr0Y`#GjQ9-EGDedvKa?Zc^FLPW~M#<wCw+xsNM|T zGTS)ZvPNzNcjxs9;^OA0L*`)`&v6ub=8xa|Z_Y*cl2hf?&N%Jx{?8-*s*99V{k3!v zZwk%4W=Ubofb_q44aC-JIZ&N{xKpmAE1+COIM=At1tYxWNP{-KlcOWihE3lRksqEG zl&IrmdL32tm|Z4ZHa^R9sn8EfwbEx0q2OW;3Bg3XZTZ!suhu&82pYzi3T1(gqD7Nu zi0d_VS*^*ZbWaC2*LGcOnCl3F#VaDtn-k;og8@?};F9`s@(Q)Urk?S^cq*c<c2Rry zcP9b0M)8ClJzB$so6~?7BTjM~1i#fVNw!A7i+~k6#2cm@kEBioZj1`aqi?DQ_2zaQ zHOp~5@5f0|GT@u9)QG90%3Fvo_zj@L?z!+`6U5gMoTKhN6k|jyS9D?O|3fi9E~jjR z7K;H-Nf}byyL^45mtuk9@b0-P4Hd~Au@?pzeA+-G3xgg0*|v6e_HTcqUdT4aYD?r4 zbr;)370!BfcusYzLr_pLW*>ZDO%TOUv+bV~u8&<?0#J>+e&aH*R?-zP83evpPwcmq zJJqtTpVci|)pT+#ir<-TGs|SvBuY!BuT1*?wy{Zv=IHBcFv1S!Q9^5(8r$aHPN{j$ z3kDs`<Yc#D)Q4AJieeU8q~W2-t>z#_1<#;$6=#X>*07B!G?rVP3BQ-~tLZ&R2TFYV z@9$d!vbAAhGDYV3f;eK)#HG(^HCSVj>VOCH=_)MnMrDRm=QkoJ@0pi2#ixkGf&jR| z1JSHQ^J?}W;c#ILOW2%xZWjCOhaob&l$(&KDE~g!1*~~7UtOQ<qO8{`IGSPu3kA2^ zUILE8N7R7<2QpA9-TR-7tI!$Zx7lm?+?uy8P*x+La;$Aj#PKNBLiH=d>5VJWoyXBY zF%?$poNF(CErLj;`@sqUt$fsio<Ik^Z^)Z!eV|45B{Da|-5H#pMS408cSQ&*XzPn8 z7Bk$fE<T-$v-(XWrhVttSZuy)#fmg2{~i&Z3T7VO`5zvT4K~*`!rI*viw|&+mO{`j zF$`s*E08W?5{sGa@qelpkKgE{=@yM#4SLbw3GedzNK9^94MgGyc-8*Sc|iLv^4r5m zq~J&_q{RD+_IZO3SXe=?seFK^PmstGZBxd2(&!w(BCj?g{#t%UGwa!f0lugQvfd|I z;!YMU6?8`+VTACP;p8J~Ys=eA&uwYV4Ew*|a52=Hl0tk%n+cAKZeuBF&>B|Zvg4DM zI$)}bx)h*5?}X^q)YdWzmFZBuh>4K(bEVLg-DGC@JJ*WM^TLBA)kzPs-FpeGruPOY zD<`6strtg=uAcZaHfDS$;$2=f6az_#%>)+Gq?OqU$>672&9cVmR~Gf{&>L{Xz~V$= z@8}^tfs?rmE%N`?LzU!;Q1@*+B<Dmc`Qv=HQK1bm^yf$cPIgY;YYCoW`ruAqyrX;t z7zVC?5XE9~Fa(z7yWUsoAcC)!aZLY)3WqY9Xy3Gwl>phmck__I!Do+AXIRn5zCU;h z8be<Z!`5{KrsvNe5+JVz1o0M-R!Dlx^Y%YTA%}bX08V5E|LjJ2r=p<byJKzB4@kAQ z!zcJ>v&H_XUOWaWP;YP&s!KTZpv4X=krH)-ybc7=-^R*z#dZ$P43}6duUmgYEFJ1$ z;3^*Vp>YHJflMH>ZlIOZ`0-PKAsdoM#K@#S&X&ILpTE&aPEPn+K@iJXdMWphO#ufN zn2mp|Mo)C#e|R$hMi(o3(0-<chwy-bY%=k*+-}<np|zcyGZ6AW!U&=(Nf42Bf|lGX z*VGo+36>#D{^0_vB>TMCjR?K*6lS0$d>s0F9xNCVBD~=@R=|`n!gtC7&Vo=258ly~ z0YbCTbaSaQf@Bg7p%JGh22On7fx@#kcITaS0{@X#crT%32Y>1fIKEzd7sms~e>I=U z8tL)zBrrqtL{R7)MUlVu-YldMQ`S+QqI!oT@dQ$BIL+C@$CgnLR|SNBWR@oWpV9Nl zLm*(7FaSiPqX0b8&;#;|T(E|0Su?_Cp#?mx?Nxikgd0Djz)A6fY_a7`8#TECj|0#= z&_;~atbJGeU<ieaxz;Kjdr#EJ<bD{qM}<k;GbgO=5bU;JVN?FOt8^8mi*|120#Ty1 z{=yM(6oRe{ghHEa<UV`b^8|5<o2Sva=SEVaAO^Fiog??*6CMt?CZ}UAlQG5<S)V;B zbxg#UDF@XA8~~dL%C?NqUGz3tPT)Zdizu0ZZncR3p=-1QH?QX8a<h({@nxw9jIRlf z)W)daz{5(oNfFw<OusJ;H=tDa+eC6!o7=K_h6#+X$+5yadn1!ezdjZ677;e#&=uQs zlVf@8WkDw0#d%^L&zg!5EylFk!Vkq<k3A%+d$by--=Q%)AfByRL2!IMhjO7wt%Vj+ zn#=><&8a<CP#16T>Me5jRA5P8<IK(W7Ewn%pckozl_f~H$ssPaP)qifZN^L-Y)2+< z;MNqDLSBE@;2gx7SC+fI-S>ScZAk>VY!T^qcK@5pnbb=0dvW+=Yvi4XaujXSO=H@( z2jnFpHe)al3_pm`Z$m^CPr>+Ym66nowtbK5Fv;te1!*btFfTE-VYMP0KIiNPLWZ1E zjyv+2O$=zap&<d@t2qlI$7uQ&u|o4}$f{^rIGJ#q;OKyH?)w<%T)eKOAT-YLM42sr zNIBl*MYma$J;yy$JkUCDgry>|ZR5JYS%Qa%SR@z@Ha@hkLtkCT2pQ)S@s!#qIuX3F zkFn`pahXNvpd;fbUcJ;E<Qo{D2S_*6qrU=Yc36o-;0>^+Mq`K~lr3Ho;!cwBT!HH| zgWiZSqWUlsOOvSei>;`uqa{R`mmSC{X0H;>E+PQ>&Y-mA!X#*N?)3j%mdRQ(q4ro1 z0A3bf{V@<m_Dg=FyXvZ4&L)wVb$VjwjfhQ7so;GVJRNl+&y?|nuq>nB5LkC~fbv&R z%Pl*;9X+tYpay|r2CqPLJqpX?SNSea80MczU2<#efc|GGipq_#vZ!xDtqDTGO8tAy z1M}8IUA(XDNV3QKN}~!A7hjW2ubcf3JfwCU1+2tzhp>C>gw3ehgliQo#4NHzjZ|z# z75h&1Dq4be#;VKb_~B}HJYzPOS$C98#>;1fO)q1K{C>PF2Mo}KEw+!?WL|bWc2IiY z#YCQ?wSGeySMy=~*nVjwe6%f#OPn+!#tZPvmo+)k$Tu!qi#%++imev2UKoggSV4{x z{Y#xETImU574g}siS)x;-pIb1Mc&d7(X@(_<6XW&P26ZT^>J|RaBDrq0^4qCRV+xM zE)H|qdI^r_P*ohI?&nXdl|w2g<x{x<)qiI%i1Yf7Tx9YzY}1z=r(CJHG6+zuirC6M zVBQQ6@~hXM23m3s@d|Y(X+K%Dp|S;m9q;b)0(IK>!`TLRHZ-!}ShFq!iHy(I*SS!! z0}`871+q;j$V&bToO-iw0&}mQCGLf<-0fw-<qdlA-;-NIVMb3fWCa1Rgj!($Ev3C6 zZ(oMKs*Rq4(m8gB$Xao?dHyt0lCxKE_0XQRSY6}DFwP0?OhQIfDSiVLu<)$Z2D|*j z{gNZ|u{*mK+rC@Hvi^}1UCPqC!1nL&{G-jhw$JB@yxv5tyMj+NMcrqcBli+>3%JPd z%)gGo5#TTIhocMJQLm^bgG#NeehmFo?P-~U=Anzjt{$vmbI`k1kE>|Te?(IU+FWyk zbpZ6P?FC_}czwY_p+CEJjD8TD%++dS-04eJeBiE)E>1}NYI!rm?K<kd?yby*@2&MQ z#y6X{_VjN&jW2`6_m13@BJ?FRIoQ?IPNcE?oqic<#w)X)){TLbHN4jYMB?y?$t0h6 znD(r$-bhW7cm@|jezPhC{^TCD&X0;-wq4zmED?`B=B;MYEBuU(LuuVTXy(YQHcZzP z%eic$YSnutzMNfVxExt-nU+RcawrvHLjnT}-MOg!ZuO+kknf)D+BdmkE4(Zm_hFa| zi5N$}zF>MpqWH~=9-XNge^+l4)z7{OAZJZuB5Vk4jsGf$zzld!u0arkjWM=J*K~u$ zD2}u3_bqC^H{{kbe7h<|Gs;Q%Tfh6vgI`)ae_S|P6X5SlT}L+X`SLyr<Gi!*?I&t= zwCzGKs$NDG9>m%rgmvj&NMImWJeaKjf58hM@Yzvv;3whY#@}g9;}fc8#JxoBM?Co3 z`4#IEJ&5y%#7m5T3cM7M{U%9ql#R+>DuH!)Hd*JUcoe%BG=9}c!$PrNMJli9F(P<W z{fLU`o>pgahq)x6mIZ9p%Sqm`b_>LihJe%7xCmE`cw`?@VWrwz69^3)z9=W;rtEZv za>5d8LJFJL28X<IcE(y6a-5n}wFX1R@M%>3N9Ask;Y#TZDV2sXcY`Ts&R}mqV}=1; z8z~$)Bg;I{m$J*?^w2!~16ENT@1Rnd(Co|%N=ZJ@k2%=>#OwzZ_y--;=~`}J$H=j< z#=i3rS{0W3QS0y6<ceSCe40R;S36TWr1SbEQbuaNlL5+0?CEoE=)HVF+8cC&)_-AG zA9#^0{ylI~$54{-i~TP)R>Ep)HAODVyL%`{T!J9*hLSV=H}YTonc`wALw04SGwc!? zF54&g@;`@xqK`=tbN<%(kwi~?8K}cdUJPj#uIMGaZ@Q-Vz)0#EH~0Q}POGoYHr=5y zHwxJPoAs{!g1pU1irWC!fBGIDXnIJO*6*KA=g+(RaBL*gpAVqd9b4mU*IGG4hGNZQ z+GtvPWku<}NN3cIqS2%glGik7sK(x&KMUt`c>(TOJ6NZbb0%@?1|rd(%AydzjH)I* zE)Vx}n$2(<4LkQ?tMz;t8E>jcV0`sSjdvy|I#&#{h7cnVN51?{=Aap4&`M_E=Lma> ztmmK}u84z`7SVlPEbe*M3mp03-SNMs=F*90c+ii0gt4N(LQ>(w85G(Njas|MS3ui$ zvxqr?jpmPDP<N3oQQ+-F4))5BDRu$&*M}5tq2j}Zc0lOu0Dow;JFlC1TexkPW#y1m zSaddYx#NHpSJQK?cD2+kXBb2CLQOnRwGtNc^tht?uOMEs`3s{yIo-B=W3<x1TmytY z1xuamoMj=nq-PT-fWs)~@K2#9AE`()Z*eheB7Xz^j-&`m)KN)3II6;Kw&WOMvacL3 zDJq`pj+N2l-iHyI?hfHu>jvZ}mbyKyFdL850#+8YJa4?~#ij+B$pdA4l=Wa#rBi11 z3nl#&{#O2=4Om5v?^71_V)_FEhUOh2SpA8&Z<a*?Z`N1q-h~-PWO!N>r?T`TE-K1# zIFQRfhFve+I7a3h4LHjk3pNK#{oK`*jG#J;nkRwvFMG+*JR5Uj3B07aPb3Uf^6qOm zIxwzZkI;;w%<GiM8Uk8-7`1f>G(xz|QJ*FU)e^tTpM5P!Sm@*Avlw%CWK4PSrK1}{ z6D3%-v1J(Y3@rOltTaIJODBVCO4Da{jXt6j1gUvy*j|Pr+N*$Y=J&-VLRS52WOb4e zu2lW9GFf%sEg|06rmFiM2_;kXw|`0pkI*ASTo+Zamsa=fL`EpAG%(c#{*wmA()2#m zok~QFdbDl30%h=Lba*W=c{xuCC9uQE^c^NhLW*$L=IlK=BSlG%1Zs|)PJUE99tS>9 zE!H3c8Vnr$(@}NY-6eTw#dZraqSFo+<$t<AQqqElRgkLyC?f%MEtsaCzz?=V<v0_? z_>}6-)`#vn`G(j0F&BcurqBJ+yggQ`xM5AUlldzr1bs9+GgiAe>sP1{C@=y}ap^5c zeBr0Bq~EZ33AOHJTkg%kbdh%SKV!IN(k2v9nzCqwBq@6Sa`QL2xNMID%!%6>$slqS z5>RLC?)OqN-8t8$a4;{~!n)oq-RO#Mi|cZYwwoqnKFkB`!-&$zEUx?XN9o-}KxXFL zP72Gu)l6R3WGWc3bZHe|dhk}bx4LcP_CTYI9(8CPmP09O+^o<jz*Etlr#*fLs8>+k z{VlqDq^fq1d+Cw2UXCNP(N2-iH&4(Bbh!T}PH>E+Cd~K6!J#B;)6%yEL>Pta=np-n zaisIyiY=^fWPb2$96!b{md}IT{wfbdG4M-3U9~b0WEEVp2DFWgmM?aJOjA*P_W99( z$-*L&n=5Oc;+qeB`_0xkd-$VqR`j2L3N5K0k7=m}5jp#kCLyD3HO`_osiCtY+v&uB z&uEmSK!_3V9{%?fg7}cLy<E_dkAc+16bz-UJKGs66$8(MNKr$w=K^7n;z_0+8aHZ2 zr1-?KIli%(ScLqkt{^pwZ5+3iDdsd2dX(aMk6RdObE9{V6ow_Wh}D1OLo&+goe40d z{kN=O0CUcOHoFEi7+JO3zY#~uZ^VYWlc=P<u-)HnAZhm??sB*ueVq+9cVHGt1|j7( zjGlYv&l!*(^uRpjS}l0Z;;eWH;#w-4PqFeC<6(ls%VsXjXgn;7AqSk3WjWi)*k+2` z=ykLe(}HIwxhkVTtJ6~;nN<hizU!oTxB)<CDING$&qRnq1P4%E56uPD=P;ji27fsq zV09<}C{v@Ugwv@aDUzGNhwjMc!tif35gCt*^Lo4l9yQ)FuysMPbNz_g)?o@@(HNDV zb>G6}-BH_YUf@4QFVG@_kU?THQ9h~=3d3mlt{iH-jC?I4<03Z)a%`m_-*Ps4havB- zhGkMawvC^xF0CoD=Lb6SBkpt*oDhB&xla{=Oea0|q*!-!?$U54>ZFEu>#UIIx_%n& zNXQ>XM5c|}_wN_QTKwkrwOipRv~HB$dss)$8pr0y!$_IT4n8e>;}-Z8|3<VXIdhmE zOLDYwhB`<};MO<A1mh8`C2YLo+Ht{^z<d$}V3<H5-1T?pU_TOtAi6_PY0lc4{-ji$ zCqTCC+BxB-6N~X3ZynnA+E{giM1r3mMFWS)<D`C{X@Uv>z+N^sjr3O)BdLuzUS2Ha zJG&q-KVekd@Z0%sZyaPg2LYFB*giQo7A2Sn+u9Ha8XnKrik<~5NEtTT7bEY!1~PQY zcvBc1(J#b;B#XL+k!=H?)a50;9kkgbH2U{HjI{_11*$mV0BE!2iN${7t-+>;U`^;J z_o7WIjB@0OS;8{iKTa(U6f^@Ca5SZRyf@4c%B!(9JG^nVPD*%eq;}QWM*jTcN7GdP zR!`Yd<;`ZJVS9On$XdjAxqqSg>W`VDUl~o+^JN$OYa62eV9xy)?)4Rz^I6;DBjMhp z7wrCpDshhmDTxHGul$b5@jh|66z{F^+3pfX#oQ!H98=ME#9LQJ{y9Y4#*&|(snz;% zZtpC~sA+Jk`fc*l<wELMWY!9J27DhAI}A0^m`9j-y7v)9=S0+vI>D%QfUNa~Rv=Ry zM7Kyh2T$O%g31E8Ett%(^hB>Z;<o^G5k#=2Bpfe(se_|a5Uew_aj6zE_4Yh0_XW*U zC9OIic+&P|VR-KTr@EiVKc>pi+J1?DjSZ{@PF>rX!S_DUb!9}lBxAYy-m)aN%#sO1 z0?fx!+VQEgLaqR{E6Gi&v>(jSKb&r2y}ryaM4|rv2)jM3jvK{QX#xMAZaPqof7G^p zIPYd^ZodCZHmBu`L9O8J-HjzIV7O#x1VZB5@F1=R?9~XMe$6#jpV1?pu#tieF)Qf& znpysU=Jh=+Lln;Dpv)oRK234bV8y@1&8ONxz$Um5XLo7EI2Ie_+9ZPn*`!d35uKky zxOOB|rsMgfFC@22r&Mgs(*v&sc$d}g<{?8A<D3^U=Z&qk1KW5QW3xpM5B-GHJa~9V zIi$PKZHml!%6><>NH}7$WVY#F+S%B?^7V@%j$=cd)Wqkt#yBrQ&CvKWzo}l>A#<wo z8K`TMUt7Mj;I&o4!#c3T%lM@_b#Vk42Jo3}<VzgpMWi(oK%y1LxC>8)cQne1{i#_X zmV=8QZ&KslTFxH*!P9U(NEe_bP==HVr_Y+ECZnN=>ROip^jj=>)>xee{{wlT@oih6 zdVbLKDF4h2F6ZJzm24<J7>vzQl2HSB0@ht5%on9d0O!+>Cle{DA!`DB^He98vG?Fb zGn^*BGPJK5p{VhnnOIbJ)zcp!t|&BU1?1+Vnl0ghn#TJO{?T>byu6?wHJ75D@0K*7 zu10R8A^C+Kg2gW#<<%`Zi&C#5Ba$H#g$I4-74cB0#ZjG{*1(t^6$gp_EUx+$B9*88 zcP$8aMMtVbNKmg>YH&T_ni|k_Ee7r(lJtN=S!?x_Q2Z7g7Q}i0gFt-0aQ8~WuT&&R z$=Ihszpm@h?b?228y5~brc3$LGx~#sN<o@OClL}m6e|qWgU-3y_Wi$`RTffH5kTh< zjqVnt#WklKFr9#}{rx74<*&*>EWg+aI%AnZ`=rvt{sJD9SKjnL$`yr<oL%Tl2v2<H z8oPs?b#xxUrO?9*rfd|VVlaMU>se6r`m~gM=s%N#*s)JKqB}!KN=8=Z+zJTcd1|dq zrn9AMm!Z_wsX<81zqGCyT4RCkY;-8y6E{R)wICnVL$VI6Mg}rFpcHH6mMc26Z^}G1 z=&Fbwg7Zn5z(!t^#S0<uaUq(g;ny}mhrQ2~f1+pH3I<D2aIHk(6uOXCpt<n}lg!45 zn~Cu{sLfI1K!*(#LhElM%+V^L<d$H1e=qHV`4VQ(jqVntx&rLlS5;$tAgniu9}iBZ zD`+m|Y*wt%R7Lj~wRU365Dgm><9#akJWIw&6CMHm>nkm3v(0X7%7P;nxe$_a7^BdE zEUhim6Mv(?xPkmw5*AzjzB)RLroP<c1tr1ysgK<;Bn)r1HKNF7<L8x|GoIHJN}sKt z_-&jm?kZkbAnhy+oh1@>zg5B;W^iy1rN#Gn>`SqbQ;k;lDFoj;c%Tu=be%+0+J}~d zKVV3Lkg;AMNNGk_`|PuMEO#E_hTnB4H>j$rkDHdCf&PIHJ^v^tD^@ig*29t3*3QzK zg*n^!!`Vb-sH<R~s5VthOkI{$YdVZ@7oaO7FVxH=Y+&jf$cpZlsder{uc>;BtW~-B z?TVK9Bed4SjK)6pa>pMD);f~an7VuI#`ZmJ0&;(#JNP43Xf9z&6(Ctbh{b-ZBN7-U z#-u;KIHC9r_^#IAjzEf~jjD*Sny5ASo&A!wj7OOz_9kX}IwH!*XuN{2*u(D@9h$1& zf=$_P(qk~5?zQS%b~h|=pyah4>%#J5)Q(D9y+a=hIsq<j<d+gzR7-7GT10ong2dns z4f0|nRqhLS+1}aM3qKu|yy;*S$s(L=xGmUhwU|05$nIA+r%cDZmHv7A#KYfbx}4-S z1DZi;5rGbCPFj&J!r|<uy<k31rz~osEBwN;C1e0;P5}VFi*sh9&byJNCCtJ^dnu4y z&2T9MO7xe{F73mwu($Z#)fFIF4acuJRW3Z9d9ir<Wm@<0@~sa2fzJqck5alcw<;Xq zsZidYX&@vUL;I9qhw<Oy(XM6p;%`Btt${9y@3ViFz<|-vgtiw|8OBe4IH!0p-EobS zO$%171gONH2lM5fDQpRZhAf*&;#sR;4LKJU(xDYnYDejQ`uvBj?xSoant953?d|h^ zU8g+Fn~~ZaanG3Zn;&^amp%ar|5k5Vh05)k&8eRtkR}V#_9g+a`e3x&85zi;{3ioD zR8SnR$tExRMxSPH>e!e|w$MV>&)_wXNYZI1PeZ?lbikY%-iAnX3wme63;LquQ>@l+ z_Z~?PV#TOD<P}Pg0mKV7>O64;vQW|(fBmrI2*{Q0r8=%l9WMd`l4R-DF#y03u1_5H z7SDe~w{Odc`2jFY?JW<RkUO0!UG1-14^~7xo2qaqHecY7oxjDJ!OL)v-5a3T#tRcD z&2&2(0yYAPdSv5Gdfonzx%@XZy-px|IM!FlO|d<@HVzGk0-_WA0saoL!mIm)HvJE+ zz7mSm=@9ocf5~4}yV`+=>-&7X^UUsDPNq{rIKq~v-FuNti^CoOp3LGoOw@ki_@t$c zB^<6x9!Zf}&o7`Z@37}AGDbJhs3oi1#FK!FAm(znyQA&Nor&FiSDj$Z16t}KDIWGG zME5vpltpcSa4DE*GsxLn@o;Hoh%cU9%|T%Y_@K4f2OP2GD>&ieI<*;%3{45p2dk)} zT4YpBYdUmGa_2MgXZa_Jwk&!ELD?aE8my1-)0InpBn%`Sc3|VWB8{?#dBC+dY{WI$ zkgo{JY+q_{GX&K5djA12HGV26I_Y_YHZwkJ0IhJvf{W!9`_=ltCQRx^<+4gMuecOn ziAZ->6TLwkH&kVNm!R$Yy6t{E_!iaZoKfzko@5N^jiSvJ)vSwVRJ3m7sr4Bf*yy&H zE?*y8*i*NOZ4gXLq*rdx&k>rjr?Yc+t$=6iTuJ0z%6;UzDQ(~!3;K{h%Tt0+(UL}~ zozJ&xs&>g#hyD<kD|A3B<bkUqdU_vy=X*O;M*}p*GVYuHg5;rSzC4+NE~O%Pa&-@1 zAvyckTe}TvqL-l~&2D;O3h&speLaT`ND4?Ggp@-oED#Hryqwn`7uhY_JS%!r?4Oc~ zC8QA@2A%03bIOTr3^}8f^_hRXwiF~|mxK;`54tRaelC*Y-H97%Daq=XvG^jvnNf(@ zdsCjL@3PXXmxGja^7!L9a1p<PC@R->_IU^zmK!VHetvR=kya>yl$RV015@ZoDMK^Q zHLWo{$+z~5HeLE~80e9uuS}DA{dodAI&svB*Mnd=ayN*Wy)nvJ>~->=$FuXsI=zf) zYubRtMC%wh$1S(VZK&|3H`SN7zIVfUR;ox)SjBqqT@8!WL4j8(uKTEddGO?P&)WNl z?h_ZJmRRc3G8u9+rCDt~M@LggK|;C%_huAj<MCJ609MiC&$l!$zt!l;wQ(D2+y*u- zpz-{r!(4S3P(U1eo*uk<erfDJ`swsc=t=xIOYNRxA9}CQ^l1Lw<?h{2KXi`9<IpUV zPn5hH<BPUC79G}8<Z-L0iQSm5{$H}oHgV25*shptLrsO(oP-N4aNqsdCMfpi|GM6| zdXvz`-{?Pp53kaAm;K5<vJ%1{-En=-3CZ+fhoTu{Ar`+4ux9;bjwwQ1(gk?4OF*8k zEb4|IB^KC8WH3pZN5xiH`7a8KDI#M-v_W?f!sw?LwK=juUZCbyq}^ItBd#=5w0Ka= znN7va5~Kb1ou?6Ha?f^{vf#Ut)E6z=Xvj>!NAXPHQU~tbWY7qCnXgGX>c-_uA-oEi z<PG|_)81{OjkHY^;kmqO;<%__bDE>V2%i{qi#}16eF60O@Z*hL(62~WTt=qbzRu{0 zNcN)u)%!U<VTfGn(^BIiqHS#r&{1SETtgS$WUXKB2ltc`b#P@miDhf}caK141#0f4 zQ&KH9nE~=XC~b5!pc*Ss@j;H{v0cWJZD+4J3jcMS3mSw$dytzGJzZcrT5GdIS)_dw zZ5z*{(Ttgnwndw;H+gHX{<m8_!6%sw1`x>oj~5KBw`RQ_Gh#mY2SSgaV5XpdzVEfs z17Kg@(fgI$hom@!0`ktG&W-^Zs<sPK!9u_wsRUZ8o<>Md*(v-ZtM<2J+o8~)ctlP? zNh+(Xs@)vaP#g0uikVTq0WSxOz$)4zvIuaa(Gz9`fjJCSKTuT23AF?^<?;4#dA@;R z_Zw-rd`M0hzp2GG*JD57q$*1`U-A|0ZI+@Jpr<4(zcDVQDKSv?IOU0D1F{S!ABGlR zLirv219uf`hWK1KGp5yr)EPot0$z9MQLGJpJW|jOpy*0o(6&+hX6B=><g{CJA>gAV zID#B*i5N7DnZ$6O=qen^IOouUAWY|OAIc@rJi<Jdgl=Y7UZsY=PK7)GU;K0Kq%_7C zb($S4?e7Ge1~Gb%LRUA0*{`@LO&hqP!|H8+Yd)m9usG+!TmTSW8IBSYI;ruPw(buc zIANsL`GSNLEb^Ifv4o+n#Av>tWRQJ<w~1E-gAg=8@$BY=tVlyJDxQm=XdN;204mrr z$g4cUUqJ!q0IGuByex4}u(ol5CQBWZ<exB$0cn8Q=`P;gMX^O&L24sMP6~6-1;)K6 zv$K9p+|!4@b*gy|V2(;Oep7YqjKacff~<gtO7UWn5~DWRx3JUOrpT1MO-3F}Kdnda zL|WO5J9k^;@VvatofC-ng8|CGpZ*inGH8uyjIj{lL9zngMWfzXo|0~jnXO+)(i;O= zo~;)%>s}9yQcfk9?J9r$r~R72Wj3RNmh*$H9ws>;c2WUUDuQP=eF)LT#zRZ?Z?V6; zZ&Ov@BE|iDDd;UE@t+lvysCY{SiCPf8N+UO4R9tR3`6bvNNcA<Wo(jq2j~!FUI}Wj zFNhRlOK=p#1?Lejo@#I+4)6&30)338$9giZEAfxT2|scfKq65fx)v^RU_x(krg+{- z*AZf2C1<KzNp8V{CR9n~yH4Cge542>nK9xKy?~<r9Vx%aCjlWyO6}8y2?e$&&qWuP zT<GBj-0YOBp%3r_-Ugr(Cy4KWdckguC_vxyZAsV&ej+JrcNokH=z7Cb>cUM2aVKE1 zmkZHzO*~r3MB%&r&_Q5~luZ%bphvQ(XzlL)ReU#M2FG|!EsPUUECcpw(~1fCVGTM{ zLl5rd?r3EwlE;N$E_&FqM|*jz%%V)esV6IsJomIR>X;?1UTDF8L;GRcb<^Dr01nwa z_pvd%GZ^uykofr(CKSpz4!}Y*3^azIpreYdETL1!aeJW=4rI(ECdK%e4X!Na{#mZG zR!K#zhy!edTU-Kq{ie$K@LMB5IKPMkHF)Q6oNzQcMcZp;-?JkJA?bR9je(ZOg24pj z{12c7$B=xUVH-HxXA1$(D5Lonh-|O=Y-7g~R3(JeOCy?6ho8)pZI&a4u>beoE>Tfv zyh%GAg5}Ua`joC%a?0t=7{#UwT-?9(0sovAw;@!aZzyJDwZyG|V_&xdV1Z^Y72F&k z%kg+6<vz|N?uv(sjeFnI0~Rwev`O#Jhzh71)>Q2*7fDKR5T$6Ap2C@fL02`<FooUQ z;hv~pHWTu$n;I}tDb*tW)weXnlt8MtPe)l9LI3~&80TRH+~rf*nDMp$yn!$H@X6H= zD}TNbb!av1Nr@b<I0s@{EFpg1JXE8o*v9-1D_=$5)PS}xG!HhP`{jeW@|V_?tN+;k z|J@vPU@&+!d&in*B(W&xVp=R2l&h*Suig#riA#-4L>c^b?gVJ`C#|y*D=cZzPnyjE zM|CVR1q-|nZ^wM@v`fsr;d%uVj4auIuyG=amP}^z@wQd5cx!$DxxGq^yQ4aiTY5kO zV(0HhbUl<-!{=*p{?1|c;l^wJt!|dK4Vtr0GyoT!KZ$SXZX7I|JGx#b13S;JU!&U+ zZtliyHpl1Yi4Mn$zBZCkekm<9Je^*|hFTR_$2bE?SGE^q(u{#7zjyM+(n>GIC8meG z!Pd8up19Y6)J_~6)CgRY(gv{?SeHunkoPk|VFKum3r6;UHdD0WE(2h`w6=>Ukr`IU zxJ)8PX{{sFA)`?2pyFUYvlg){N;mz(5Aq+uQ>mhxi=0u97<58pouA&hDymI&+Kw=u z_UYI}e}HvpI@+jOag*c*vWG5{honfZ2Loc7S&LkO`h})s)|R!*VoL{K=vZhzm?Dz` zCaJ;r=OPyFhSZu29h>D^3-Kl;>>0zh;09LWNfzMsS0sW2nvGp2;v-<lYUF~WQ={C@ zw*?(u$GEV*GpX8C4>l|3iKy`Vy1cEy2qBem9muk@y!QVOp4`F}Rwr~dzB<No`PR7U zZLh@1J5?(#?cHvOn>ly;prj$)KDXMRGZDXuJJZyXgKq#f68_T`H{hh4svU<ew~5Ie z;6$Exi=Ni)cn5fY)iLG`9Xulqc=sFDaN2@>Y=x%NMf{`+QvHk4O}R%w?8D&8@N*-f zUO?Fs1`jM0$BlqsqR<o>TwN&r!<km*W{Yi1Xj<wuP}lz2;qm?zk@-`B<Q2mZ*?f^D zkEgOR-=*j=>6R6Y&gfL;dFQN;-Khc_vs@%!DtHa`rFmo$bz4=s@sI80@guC=?W`m0 zc}OuFwz4P|FFW`7?<<tkB_b(B|25Aggv37*GGjB;8#KG7b^W-f(k441taiYzY__T5 zDrm~^pP}VjIH$wOtC-g)Z92;zK2E@cIl+yYxO-ZN(%xMu>3+f&V1L-pBcrRJoOTZ5 zA1Te%{|lVGp!Xu<rIduhynID#e({3wp%wH*KAy~Ca4~`@x+vT+-_v{^lDqOA;8?hT z(iGQt6<Lzm+-;i0qR2(MpMObn8*MzvbhdD6bnoI8Se}Xy&>NKZbdyL|nYM!dW{(3g z^F=j~reYN6oZjhJbVFWvLxAU2Qj)`i$-b%fSQV1~X7eeEwkpy(g;Ll19p>iW;y1d@ z9)Dxoy3ozq&iP=vpaJ@;i<zWJ=aGCYvVk;OpTdZr+Vx~?M3L0nTIO1Zj~*??sA>9N zbzp(ScM7+@Ay>k{g8enWY-$FrRAL`mY7_02Skxq6>q+|_)TYE{)H6p2#_NFCj@Nqh zpBKOtQ8w4Xx(NQfmj05wlK<+{aJCzPIx^cGkcz&|K*&_OAidLyOM1}wK&NuYU)zyU zadRz*>Ul?Ua%6Gn9+eI`^+8T_57#Rf!-oSP(ToN0>^+vsPAD)){pHO8!pO!J{?5uR z>_XpzNG&M(l9pRbsTfQ>qb7j@ZrflfGZbNCSq}A<qbR4p8%>ID(kWSJE8_pWkvX=v z`<!&tYIRmVI>FK89EVbFQXh9q?R0Cb0V7qz%)Mc4*|?NjPQ2lSHRFQRql*--c)%+r zu-A_bCu&-uY=MsRX6LGQc}T&nD02#w;$HBiHEj&fidht$Um5FVYF3XvY^VhqlPRQJ zU_hxkTxpzk$;}Hpw~v0t*t*OFJGUVmm<0BeE^GAMBFC;KH7#*Y$xsHAwyx82T?uTg z4hK=z{so_Lp=Ir&ILiuxv4*FBe?Hl*J8JmNst`;Sps}drZYoaV1vZM7lFw7CK-Vvw z4oSas-TdftZ6)QK^gXD?3ir*o#%x!mx-Q$zxY1tUH$2PW!X|D#Y;}99jTr<PLc&#T z{?^fd-G4}CQY4J6dyS|{n#V(hiQE~0!fzW!zaQB<P&5!<2WPM>{fl<YMoTOs<>)WE zSm(#L!LetH@EV0BTl+(ip9C!6lJmwBL$!YEg<ZkjMoSdT)t!ydct$ZlF95#Czs2y} zbhTMK#p+0$b|sV|`%>tBr}=L3+OtPEkq7J!hz*Ce{_)3u{kmn<<?6R2sw~k$M{n&t zezvwOS^fJ(VBXXFFyQ%gD%_0a7r61rvJ?u1d|#rvl@JHSa8Rz}kRNdxs(w4IQun#a zZp)7fS!G6kU9^|cccOiDnMzH-xLdL`>kuJX`+o%5X+`@%Ji%Ss+7qmWGlUTtXwtv^ zaF+_JJi{Lt5qhl_=p`iK2H-NCR88>v7m47Q;eFf-&Sz60v8WeL-a7g^rntzDYe9Qz zF5XDWYCxD-uF4CH=kqonJ&EJZ&01~8n&FSVGUBO03uQ0EbobitX3VECRr}@2B$(!` zpd7+%MK>(?{h>L|FOAH@92HFHB&TcKD=zmz4QXyQj8bZ;q^D1)OtUu<LAef$bKkbC zLHLglVJbnLp`>(Pz#DC3qlXm4BvV0nAM71VLf5$g_8hth=L~9008zCi8zmyxwPt@2 z<wqr7)UF2`W-$bai~B5SfGaR*e2O%-ZK)o1N$dUR8UH@SLB7Jp9NB@PCj5T^$AlZa z{Ea)1%H2))jpa`<$y%CJH~hz@JqGkh9ICeAZ3&p>eCv2X$yVY5+w9kfAMyR>l5sl! znu7;NUsaobU{b}K@F9&{0IrF}q-Wvqn{KvH#c3_4y%(U%YQ#sOI*!4xreU$#NZFsD zfsq??_7j_US@~Hn0w4~f5r#$~4CimUT}K^{DmQPo)#)T!ogUTfDz|~MQ=|(lCz0gK zC@u)Fq|;@i_DfzItV#B4!nHaV4>4wF;b~!`h@I?vsr0gwD`c{Acl}7vuM*i}B?Amb z7%yH12!x{pyP+H2ZvL}iF5<(Z>2;|Z)m5uzwwUKCgTc4_oS2|q*Ex2Mt-uJ$rqFZs zD8`bA#5=1mNt&c$LgvOr5|qB+^~0G?a#8l$^eB)&2WIT1!dl-ct~?ff1&=&=;`gaG zoR-bp*Txor6@h(Q=tmIl??^lax9dx7N74x)7M4&%(mxe%TB($-o%>RT3Oh{qZ?t)e zV`dQbD!spQ;UeWO`HbHhNsHYfR2z}vN;1swdjk~@r(Jfza(;+Pv~a;lX>ymL6{EM3 z(XD-ch=WW3LTO~iwzXP}{QU=l$UaIw5zf8IIV<HDkkh;oUSL<Ooms62b}C`Jc39Xa zq2|3QFOObjns|FphhGzK9pM%%H+MRWp>%+|a)ug{=^t?T$5KHPD;^jIHI#+sLx%3^ z%8)Iu9$<_S^TX9Fk=NZgmrEZanZh$LQjhMzJ7ztzYzp0TP`HZWvTsb?Ci>Uu_JR%r z9u!t5=RNnCl=%7RpqrS;dKUDL3_Bk#WO}-oAEB|7r}cLA7Skt>p=bj0*d`q{c>me# zHTB~?6(ZS)!3DJNfP=HX1)aFXZ|g03qnwCQQXYXBOjd%h(sDS#Yc&vtl`ipa-~Z#z zbq~p#LgUd2=1HJ~%2wMYH<b|P(~@E?b1w%fPZEgO2SFd`t^AJzLJ@I7ac#*R>)QNc zLVd}rCW@ezsx7VP)&4{b&Ju>d>1QXfziP&2{B>5epbe-ljBG<9yRY>fmAs|`yD?7a z5YbS;7K6Nj_i~`L>ai@#WI3j`j%>@kW!P2?jUwA<5~=dLs$VI0WP5<TY_wKz3Il%D zXw_UeXvIO0?M0}ot~}m62SFYvwLo%xvUhd8%I8YRBIV-L#tfl+tKXZ6DBvMkKYp*T z^Qvl{bf%El==SSs-R88DyW7c&2}j~OQiymG^Gw?)!kX7U^t!2~#ES?2TZ$6}Qkb;N zuAxzW7pWHrnf2A=Z3oX&dVvr60vcL>!lHQ0jUmZFJh&?L!>CYDbfZfoX6WW@iO<6B zYs4wL^dKX_F}2|<TRAk=K}+f|iBdJeV@71aMc3z*OPjE`C4>HmQTjQi*Vcbg6E9M4 zbphx=;nvFC*$gH&*L#hK?N+EQ-2KRVI#9-f?_n9YF}8iqcO05?mt7Q(@M3)NHeIYl zw^SmgSJfU%gYbi3ZQHZGE3yh(8>2)TvdtC~yCh*h>d*m-e=3|cdd5Idr3U{75sYV9 z<o}iN-;4g>xdc(EnMR@(sh%Q<Tf3%nUFVg#$o)jpGMH1+z@|pwI#!>51Ck8ED3K+$ z>|H}1P8vCHDpSm8CiN-XFnoOly=RBeB(~@u?48&ln3{y+ONHOJ#PKhy-PYhPbCE~u zwk8jU7iJ(|dY_0PDTvZ4v5~}<d<;!<TpLUN8xJHjceZ54aG2@mD6;?iXW}Y{gm27e z5XJd_vIgU@S0~w&g7T68q(hwhG^~+^kkSV=edJK|DI%b@3$t@fNPv8@LV{3f3G8z( z7dOFf$D46_Dwikp%p(0ff`*e;J95|%dG%5q5&kq=S6b9Nmr2?Kw4cPBO>s+dc1`5W z@oISZWU#KkzwxIt5tTS6l`aA6P~|hRk(e&)npewQo1QwAOtS61yK*jLwVK2Rp$hDg zMmq58&q<ME)R%wN;DYsH0;EG??)N-zCTPLD8VgeiezT}O@GBU$tbRnoN8_izao?DP z>iUzcf)H@I;T_JIRUlI?@bC1Fq&nq#-(V>$3A$<?xK>TFojopP7^GbtHzkJiEz_pT z+lqL#GwLEG>5G)D)lLXH*oQGOF#G&KfBEoa$xH?}fC<#+Oyz_}g$Jj6u{?FoMV`jt zfjBzqOBm}$0_mhTDcSKXU^vhvo(*s?y{^eMO#-R`iSPw=66}8?&=>uVJj_SO@Ik}P zj=;^42(?(rG%MyC6{L)`S^{#ve!i#)@r*sh@>BJM4Gs4e+>M<9N-Lk!#Zekj^`Lm` z1?T2?-T=Iq8ju_M`JhD`2dH%5@lNaB-gBJv68y_{D*xnn_G8@(!Sz!f-SSsXuz5PF zr?zC|^n#C)+`DhceAc@EI}5dxtP!_hy}SjYkVP=iH?lka<zBaK)yA|@Hkl}}BQza0 zCwr{v#>|Kx)=s~8Y`Uy8KcZc^x*0j8QkS)fVBD*@B&3wUnrBb3@@vSOm<)`dQeS(@ z;7*1c(hBxxg1|;v`?)0gnxM4KO23aA4<Ba-YiC(diKY=8geEgzmJ5la;;}a2kaj2; zo4lmKTxOG+Zi-YcCML)K2^$cM!y@+3KO1q*5B|yL<tZ+nXcaE*7V&dY8>&$PuJd|+ zb7>n4{Bl0m4V{>6*tSwOEv{<tf@F3*<TQBSESPYYM&36y{=Y>qc@2G4huni^-T0)M z0=?~)u=QnmZ{V?t)G)lOhtA7u9AoqygNm1#UI#^iGlqecUUmn>aQ_~BA%EEzF8y%L zhP>?2`kxXs$T6U+f06lr%`tR7r~921H(wCVDS}Rl>NW=}0S%H*ECVPL@}Fu1$1uHi zk(oF2ROuzEvn(G(xTnTK87hlO01bYAqh@tWCBg{Dq$_(uON7~gX9z|-VRm?b#?;o8 z{M>FP?~d{8mugAkB(F%?wVHr?lf7^j@jv@jT57x0@Y}3KqPw40QBU&l%kdotD|R+E zd|m$7H2z&pN2a9lE?o35u^wn~^4t6&E>`G(R-&%`m7#*vOy?6w99QG%-T|~sdxlXP z^OtX7?g-#Uf8Dm|R5~dS(GN<s$se9C&b+@F&B(s#CI`!t;YAh!Kd%?HYp97U@EheS zS5P1aQyom8gSQ&Fi&cUjrEKQf!A^jio;zSTHMtrKx>@P4FCY9Rz*sD)?*5uRynZ^s zx%~H=OEFd2uVq0VfrInndSKwSJADkiV4IK28@uyjm4Gv%wQU&TOPeZQyR9vPiLu|z zc9aHbTWgtnFfy*KHJ2K)fTy#q+YG$IVpr&7Ja4{$%k;Mr0Q^vBb;JYEn?YJKmNS$m zgqL;#6Z(O|jAMO5DwdpFNous9T68x(g!|B7@=xD2Wh}E96|c_`9?|EWRQ1JWtRf__ zF$5>S5#xLyl0eSzdpK*GA~YXau2%v)$H&N0eSI1p-UUVo;lN0owd!ea1|;{4wj`(C zNi&aSDL13xCf|E_c;Ac+Je44Nc4+qYs<Nyeqo0SLH;td`Fw7S8tdJyKiOhAp9_ZWC zWrpe~IUE=q6ztE%wK(C45Z-MJBqAcUOMGUsaJKIxx^75xr~z?d2HgyAaR)?(EZ%ed z3iQ8CE56?7Q9Je^b$pARyMjUXP#jk|-318+ZZD}dy%ap_xID&*+dD1)ZZhE~Lv_F@ z7>ie1wfPBPk4^V3Q=)ioIjUnWTEr)yYr~z_<EU6>g457x_MFkRwB8Q>9+=J2MH_jS zSUGG~2&(451KfDv)a`C?*ZM+>UP@}m8xBVpS|Obuh~E6$9VWN0v)?Px8tbFNuuOGm zxS5;N-%T@hLxwA*e=7d%`O@zuX|B<=;Nqt{dvZ3{=&^xXbzyC05R@?ZvcS9-2|c~m zrgEK37**_7yr#6QU-2WBb*bQ9d%crigZT}BN2T^pn@zi`a!Ci3q!-U`5mJadA>)&k zHSr~1VDaryPUA^{A<HIOU`e>J<eRA6nJPPIqYT>ok#H@m_e#>U7-?=eNFA!*j1I0< z`k!1BdJac3ZkURKvk!u~I!`@&!`p!S2<Q66`^BLqK~BsA+t1V2N$t1rz@&uNj=Q3w ztd?K*Dr&7$eKa2((k}HTK^^nJn$MyrNLW>lG_ttr20M?-Sl8W??H!@(D8Sh^y7~;N z6oM#XTX!sO0oB=znH^KzLgnbvyOOe8Y_Q`)s#*Hi+#2kaDxbRPK7=xOL|=Bn>r2zP zIk1>ly^UjJt~uWcO&_@~CImQ(($oh))P`?Bl3b4B0Lj@B@8nh1!-$xuuG_jfon;P1 zSVfF8>P>+G&(bJyKAnpo@`1~}hUj54gtKraXGK>XJjO+Y3uyfZyHuDV#qYiQrh6d# zOH{5~`gd;O1AyV}SMV7El?ieN&Eq1w)@Mfye_kyC)guMTp3L^_7P5z|VtYcZe*w{e ztr{lw-)`Cz0TwWFoctd<JFT`=<}pi<V+kOZIAE~P5F@5m8*71;G`u{XLT`XSG0YqF zD#i?BA+G#VB2RB|gOEiYx|bT?)m*XiMhA^goqZtu_JC0^vecfgUIAPVRw8uubMf`$ zGy*dMPgU4qZq7$I<{@AtaX1SF&RguU8;H~?2w!vShO1kGJ#NokXwbLvd;E_!>%5Rl zC^)vQ#iJ&%2^yf2<kQhxavM?DJe#Af9egxlBzHB)lxeI}v7WVL?qv!=3rn3uuv0%6 z9d7OaEtfv(6Sx6vuU-fP-eiMg+jc%Ng4g5v!|V1h2o3*H`(VT~gu|83C=57xXU>2s zT@O$#qgeFbzwT<RY7C~cPSC?Uk%1%>`+>1)?Jl`(WKv=QyWtK%GM`g7r87z!FeU1= zW4$OqHAG_AH(BgA`hiD*zpDSMhc-jDLRw`$aVftw`g<#iU)V73LD<ENrb2`!rQVoI zgiG}<eg$8gIR}-QC}vu2AMQh8KKhlO7Pni38(N3lBQ;An%o!Gs-kfiVagK`($ex+K z-^M`1R<9vo1XW~TI*|9IVf9#csQMXMu=10?c_SbTMOA2BlF0nxwU#+b{2g~V#Z#<r z`=TL%I}MmW=~+PMxGWs79xLtMH<ms4-eQd@<LNLWY+t-u5@ZzYz&*VEJ#?Pie+&vp zO?d0NDk{l3cn1VJpv)gA>%lv8RtdMh$&9>R)0nruHu^TRrGq5kx;1Oro?UtgOI1|G zS#+*{CeaWz2y1tEwsl!NQ}9~^Y0Hd}5MrK(FQS8z+XrRd8m&tNqIXHM4D4wQ-5_OR ziBlmwr+R=~)E$`@q^__RGx9TNP>aXdk8==)?2%XaU8uPWEUtxlL43x)GjveZwMPBy z*#wRCdC0@R4AUb7Wk0_ZY52Np1%Ke6bt+pC11*H*T`zy?O;;KR?$;1L-Vx&7n3;Vv zO&B`Bq3iKBsn#%1C{=lEx^vzuM)HNjj`E~)ErjJ=FMsMx`|Mk(<a`z72no$`LnA-D zBgMTjG=10#gPd|~9KM;`4>d<r(`W?&uq{MtVRO1B)<Mp%-#Aq6cd(gTwtGYX#i*bu z5x<jRb^;$dRQBAyj>=PSW?yBi;IHBUEGmo_hq@Fy(zlG&(EzWK2CRwc=zaN#N>R0x zW27?69(I5n=Q<e-u|5kwhh0*e8P4LAmOqf?8&t?e7xBiZx#TkwJA(yjR{_@<=H10e zO-)n$@GIrZgL|gbJjO*utYg#4T}aKy9R=oED!#T*pW=VkQRX^+>JSzA(5d@C)5z?y zA-4WZQ~F|KkJX_CB(kmu_(DwAERpxVM5RoxV%7@4(@Jj*!Mi9XF}>FZcSY3;>v~lo z`%<Cl4mjS<lNz@5((U(V;5taVdzFp)GpKTOUM@Cf$}3TKE;B_trD>BjS;M*Yq^M$N z`|*V2a;%E0&)2>Da|=d1+&Zr_@S`QHdS<6lr8zY#6aX0d+nf*tw^>g)`o_<!0mff; zvP?>J5Fu?xV7!wcFB~vKFth5E2$ood)CZ%LgZC2{l-u=ssp*s*8Z@bsP9?I$Fl0DE zoJn{$G2!oi9PR>dcDJyD$OoPBA!hBwRj~|W$E)7f1LcoONKDU8nU5J{){b^|1M#sc z2XAP{Yyq>g0yQehMbNfsC3hK&Cpxrs{4A(=(?8Pxw(n6d;-V#)BNOYlNrWLEaxVqL z?2to{n)NZ1^7Gfsp4)G5;qR^JU!8LkX7XI|g<@-?yC?(O2SI`|Q0YGD6avg|z6-wg zDw+3YKDba?JF}(kt065T5%(@>b75ZS5o3{Y$jLgjx0{_cUNWU9BoaQ(p-8k_CPbd+ z5F1}3WE~CY$E7;W7-5nvq!bHj$#|BZU<i77I^oUcR>V*64YDW2t;1!53Dh$ste+6L z2#-^=!Ce~U0&ezAZL9E3WM^GN0|Jef#*;kG>g8k571*tLaLM8Htqiu6Wx&#;mdEBA z7HH4z%C8TUbN#AK=!KZ0S}JX?o>VzSv%H?X`~W<V;dUWP%4UUJQ<vg`@8p6ga5@=_ zx-k51iQ?O)_XO*Ydye%GV)UCCTITaD$U-*Y5Q*94iv5&W+MFwA=4M@~EsqI@%bx~2 z7PFS~BpV*tg`=HnRum@9(V`^jM*a{+5n~;rE{(eiQH2-vpDASKqjSQ6Uei4k)f3pH zKVw=kvlXEW-tj-jQFB;(b)&oU4pR063*Y1AH%AieV**$${6k@d@kewX;(vaEiw^-* zUFljV5|g}!rTML75TA-_S+u|Sz@j>7MVd);F>TA{d?49u^}AmOfdGD>Q7=rKzYBfM zb9&(f8X2e|K{nhZYJ_ugC4E<M@7px$ATGaH(y_F)7o~X^VPXK0Vfdz9Nl{{kv{i?| ze&EI0lSnM{U@^OfhoAwG-eHtKXl2*H1+Lkgq`XM6lr!u`Io7g<z3#w_r^32Jy_L~O zRHYth1zen!$Lm9T8u}+%0dY{`qx(wKB2(uY;0vwJn14FCI-M}%bXaL5_bwMUAUzHi zX?xy9UsL<A+a{<EVEj)z=4nH`cUJ<W=M@t$g*NvQFjVHCV<SBo(e-3gA7@KQg}Bhs z6-2lv1S)+U#hC&2W)PwB*dTd9SxOA%^Sh^5_KuW*St_k}&)^jYZ;KL)8`Un|QD{pq zKY~=MY$2^j+zx~n;u3chZ;RgSK`jp3O4MuH!FmcA?yyQ#B<BC=E(caeV4ayk*2Y?v zq{K3fJ6N9Td9kHj00Uq|DfG-ikW^|LiVfw0VOPxOw4uXX35T;#;=9CDhQLub6RHjS zi?Mlc5g>3n+)yG?nVL|J0Lh0BP87mZC9#$36hTOz33rA*l;fTVpgsrCim-rKVcJhQ z8-{Qnr22VI!H8)}a~4bpV-MPz6q_kcVw1zArLY!SNaBI?^T5I2{X<!f{!ckb&_vyE z=;6}vW#tj=qnMjt#h;{rU0n<6o&cGg#8AytnRo47&N1>gDb@@z956!^p%seW%ev>D zth-;GxTl}ogzA{owDIpASqFq<;u5)qaG1o1FalV}9$|CK2g|keGfY*Z3YpTX>zAPb z-wvxkWgA2lj5LcWla+d!WoLEi01C4D3&-<}Jlf<T*}5GlkcHRF_$}8>$Acsk>oXqO zc|_jd4OYevMy5J@hwsGqW7;G>RRsh9YZ>lKQV$J1E{|<IgjBH`+l2v{mCW8Zg0=%H zakGL%JI}6Pg7x&kipIGX0he-)q#43Momu5)pgV#cMh0locg!%-ja-Im<qRL%PM{GU zi}Tp;Q#({p>IrEa)Lb^~y}!t^iI@fioY_1>rxHP{9pw9g$2V*@X7?F*e8gntc<tQW zUr(&~K>KDW%6_VzXO=q7;|~ar3oQt-8^LoJ94U;Mo&6!M2wD?{yTUq>5{;jgEzht{ zMYjG3#}rd`&lg!u5c&1`9Z8H9@=KVDE~0FA#}mPLpd9|lR)DnzmUYYyfsH;X1uyVE zoz{k!{W54)(8#V=I!U95S--RZ<5h&cwnUtxhwy{1RhuUpoCbxulaFMb)NLDi!9lhS zNzk~f;#|-QwWU`hQlLXlkgAbSzLPl?YEfrF$b&`p#sQqns}Bz=oVVr6fL|o_{3i<< zJ2_eV-i^ihWQ?X$lPS?=;4%g!$i%y)aT+ab$qj(<9f3X!&nLsA+YaWoM!0Y~Be5zN zi2^-?FW~6>hOJ-uW11M&#P_y3-G8qsrjEcrA*J(lfJGQBg8o4Vb-x~wyyi%ZIi)tJ zqs9u-_xy?w(65UxC5CK)nHI%_nto+X#qQsPd11A^G^w6in{mEu=5XWmtKuqw!-k^X zzFvTHngvJO*WMxy0AC~LlSn4GYeh`;dWcy3%rG4(g@O!Dj+8;WhP?Nr0|QGpLjL=Y z<t)5_i*AU)iEa5W^*s9K71e5du)AU@dYAg)$AO25zK#X@Y^3a%6|UI3v*S^A+;BRy zI))@8V1q_iwAv(LBF36l)BArySHL<K6NQKxV$#|gE;8qb*ONNQ?Og0=ID(1ED%p27 zC$7$)#@B~zE3HT5^-4rqtM<>SlO$K7<cCi1KJ2gHZ*b#P#j$(_-R816d9j=ce>ZP{ zW{m6n`M)f{C6%+I#wwZ40@{|FJeVd$1qZ!1x{|v@$9@$XDmv*lpZT1Fi{5DTEo$4B z&jZ!45yNI>iP3T2tx?=$e_ts<dk3@r(Y|^H_hQhG6$EE$#tN3k^T0J*DA0S^x2u>h zwAD|7+KtKCN2LRR?gb25t1W{mx!9d27My|fJLz_Hwpt3o#~M$r^K2CC9CcPJSHLoG zCg=IygQ==#c1lb~U%j9wt3)``U(-bGw{(@^+WK2WVK)5E$K)?;E3HT5^-4rqtM<>S zlO$K7<cCi1KJ2iOuiQA*aco~J0JegWLSo7M^rnF}_FSiPC&ee$5yUyd(=Wi)YpYqV zzD;!u5BE*=u#b`74&vgz<h7Yg)Q`N3*J1%j%`|}4?Pt=#|H3r<0+UU&Y69E?EiH3l z89E12IbsUVeiu&csI+34(=E$u;gbUUj#>~TLK!f>-&!R(LhBk~iK`D=>USCi^NUa{ z3>ukg1052E<$C!z;J!f{%K+z5QZ}npv#CARf(Q$$+tootL;|VaGrB|Cs!+FIuUYJ3 z!|+NINzh3tdB)mU>ms-kIMO8u8})2m#QY=o38<Flh|tY#utDtH?|hPmJZ@phsBT+S zq5FMDMYou8tWKx1TggM<7|v7yEC_a!|1BkEHLjzTOk5TgidV$C2I*i<#uK3ZgX%>% zaxqdlm?iz-Ape*csSNz)r=LKW()$6)1cZhlTGPO3Y6=QQ!N^!)h8B|!VrXlf&LqZU z1%W>W1Wj+ihucn25rW`yMJrV_!X8NYAIe{-m*L7f3#fCUKuS}<LnR)YAj%21fK2OZ zgNi0vBSj2w7<4H#`;|Ab%}@$1i+PrnIG^HX>towkYXKs^<3j`+yC`MVFx^Xf7^~%1 ztIq{5&iRST0Lp$Bz1g(k^r7(rVTJp}Zx*02(KW_6MDJG0Eucs#ARW4nh@}ZK)>x(B z&sm22I>n|ehDQXb<KY~)Of8;TQj6pDuoV2GVmoXh!(waB*?}l?n}thZwiW?*0AyH~ zBHHRRMS&);kW6TKSG~yMXtN~TQpx^A;Q8tyA6?~B6n@wax4V;IBmzHrM~Qd1xau)Q z2PNu<eqSkJ?o|PR=$#HK@~E$-c*XzP0Jx>Y0Yk`Pq7%|B3@`?g=`KcN43As+Rb<s# zDrtiku}eD_QyU<s*N$ahRk(4$Y)qw4Av5(%3-wTM(*zY7iv{#9F&2a3j2pw?2)8;v zBwENT$9dJupHTTe_Me*kHssq!!d%CKkGT0w00JHi43JeQUd=upep(nIBt(@7Ntqgc z8jz;JQ2g0iOt(e?RuB69w_sNMNu6JjBA6w{q$AwLR;zl^``j2I4)-qPPsj|@zQuzl z#6<c$stNzUo;nfcUu%n7D_w0&4xm-xR~^-GiJKRc6flQ1hwaQ)GTQ)}8*w=b_dBL6 z#54+n{KL|l+K#9drOlQ~*3tA&;vSK<?MX}338R_+uSleQ2mqHs(ZqIOTI3Fr*r~E~ zM$&OSn!~74*-(x*!<}vuNtno_rYRIekV9zoI;pH*ou!v%3aA5L0S>5Cslj#8`G`P9 zYJ;;RGfJ%e!^ZKDeV&P)3{mD2Q7i&?-{R>kMEu*D`#tITq9ze*453EoWV>CM4Cxr) zk2`9N^9-}bC6Lh~uwKPidd>*qIj%f^8;u2FuS%w^hw+HPg$#nZL~j?hYzY80*IpOt zt0OE(6u=F?N|em{!FQ4&rwMDZfU3-TFmV^G4xKH-@_`6))*`#bz?b!*Qu=?#`XYOb z{&Q&uFC~x7V%i+>%|)BxErmNcKtG~mnA?^RL%w7^$5YrEzeXa9uwzOPc!zQE!FgvN zZ2oJ|O8N{*&HLB}p@xDsO7ir@=nKIN?2C^6vt8Si514Klw!zfM7@%SOuPa}}rYmI& z_kA$n0DGm}^YtpM6gbrlOO|W`e-M1o8t2^eutq9$=^IL<_`eZT09zbOg%B+v-UI%e z5YEZ6x<q1H#2Ar*IU@Z27WIHmw$slrN`nsBv(HE<7sr{5Rb(^-WXWC$ChE4D$sfT$ zq+DA(4RrhD%*os1u|zpT@W4Qg-M|R<;BMTZ1Fh`Y*>%KhBBnx`Hqu+i8cbmC%TEz? zY&EVW%UO0A=!GwCcL8J7+$uKZ0HQ9OxnCu#?TbehyBPSA`%f9X$b<{`I!4ui7w1=Q z5-f_d#=8{1*#l~*CJ#Wp6sG-*e;uzB(eTY6EqC>x(++aSF^wjK0Q2t6nnQl|Z6N(b zg{G$Mz@{R~k}3i0N-Kdb2&TpDBvV#lKTgBaqI(o7u-6vR5mHBi2oL@#;rvR9aF@Xh zras`wo8$$H)1$w6$Tk0VI>%^!eo-J^wg?N-^Gq*aO>mPS_?DZ~r=7EOLy-+Ol)SZ& zRH=o(e^aDY%EU{b4`(h{SEN&bU!1~0w#ew^YN%H~6KtE2rL$Peigx(1InY)&u?jMf zqq^9Z4P+yeBahXn2^jzH{@)fSIts@1pmia1xmC6VO|PRBv5ugdh{33bTcfl8pu>{^ zNJy=Xp?riWf9z6s6oY1nmewhhc)H9A>vfB#a0OIlj;X8$3)lLS3xwy*ufir=Cvcb~ z3hot+XDEw<IK}}*RSV$YpXZ8F6ylEuU}N#i{nrFCXj{;75Q;*bvW;NB<nb<60$GJk zxrJ&)4IQ=KH9^9>;~1Xv689w7#yS=+?CBb9%qv(rmC=%J2DA3_2LFtxO!l_&1^E4& zYyU-PJ3M8MWW<+=A_v!j)NfeF3`ZdZ5p4rGRK{0ev-D?1*S0uybsxpCE&+yc;TVx~ z>+w|QooyNk?^4iZg@uAQ{h7u901kA7$yiD(^i9E7MH=jc!0S8wZ$k?Oh^=4qA;;iw zm^A0A6@dGE%pupY8YdWngK@f&zP_x2yC-COR9Y*$n887aHUOC)IFi{RDi&b~;^h+& zoUGFE3AE|K3d+V&P!#VysF>qT_NB~dr7vw&VX2iwBfwUT3xK)Kd&t3u49f1LMI4yr z;<vo5HCIv0SGtkT7`p$pPp*r5Oxd*-#=~r9Wb>modR1jgiYWCioD03_B~Ic1K;~9A zXauz<x3jSr6BH0dg4QQ8P!+)EPS2V(gPVj~v)mM(pygwr=)#2615`&kSY!pTIPT;x zK%pXGX2$M*^6u-{PbCw}_YhF%H4c1bi>Br2?jek>hhI+anklH;CPsDkT_UlnzgYWe zs>64Q^$i%A(sOtZ8K#NV`scn_U5>)6)YU$f9GV6BloKRtMnVCil+siNGdO%=&s1Qm zmF&o7P#o^kG=s`Sce4RZdhovP^*SI-YmjhOFVjM<Vmp0@?U4Cm!kX)?w#s?E7k^R! zjcaqgEKy#oB=|qh+xi%dgY^VYhUj1iYj&8&ZU~U!u)GO-DNU6WWWuEEfiy?HIY7>4 zAMF$M?|`eGYwPj|b4J#9LZV(Jl1p^>>9XXFu1H(Greb@)_4Ni!zwrs|sP~zd|H@e} z@Q-@&r8zSs{NnqQI7K4JYd|<m?&;K@h$r=G@r4gyRoo(}+_E$%^VlbXJa;I4tvE*& zND(ZmCW_O;9Z}HBWiBArNj2Ky;8e<^r3izNwbQQ3bOJiL5vv<B`iRn^iRybH!FR*Q zE+`74_hUL)0Cv0?{9e}8>{71AD}LCC!uialQcFXzQZ?j0(>wIuGn~hm|8}#f%sApG zLnFKF-JZCjkrehGqN{)4Xe}K<p4p#+T|1T1<e<oFu#xg?n<XVEkJO09TLI<5duw%G z19QYz?JO%dl!f@|wz?xAGqw;-gC!JfI;RhU?sM6-lAnYCtyFQW5Wwf3Zl4RzsJB&5 zo<cs88l**w(KH4uuq@{%%Q_5EAdtlykSig{qLDhAjq436XI$P5-bc5Lv)a_;%a|CS z*-?S66~Sd_q}MA)H`XJ!RF?i{9>nJXG{*rH7BBzZN7UUNRSB_GwvK95FEHNN31iL7 z+mBOP=+--i&h^U){5$(Tr3J_obVVSh=y}^*m)nR<a;+)bmL#91_DyfuK&ZFkFT&P$ zY0Jy{Vn@liMePuST~I=WhseF3sZ%XX1?Ar&BR^RX5J1;q^9=?W$w>eGIkWVBAUT8y zC(ZxZwZK0%sSP%YrMznh6qW`4E|R+iF_N&VI&#pApnO{A4RJ5w|7>-Tz{9kW0K*Ho zKN;%+PWe9)<eWmxRm1iVQdJYGDfx_OsF69TnwXV*cLCjKpEwcJGi81pwlOlZj67H& z(^ng$GE%THlQG6~bQSvh%G*Z%o1#M;hFa%j<WVCfPx+#lN7rpMz7_+Z4?&bN;JDuu zmK$|)S`U}IjNi3+m#e$f7RnAOg7^p3kH$ykRc@CcaU#o$I8=J`f|z^Fd=H6D^&lKo zUw>Mr{ngIH)|u-yGW>iBnM$ZMjAh|n{pxmP6<K4MYY;c%HcRYBI22s4i`P3>hK5wZ zN-O7A)76Z8W1y2Zm^rd#WWdyUs+u*3Q27BefKBfyYPFVhU_nrOHS9*)X2mQUAKR%a z*&o_20e3^4*kg1C$=_{c@FIJmyxAYy=oBR%0sRcVU@>i9qs6Jll=x-)$qozBJH2~h z@+~8gwDzS7lKK`Cb&n|nSf>T}&5Yx41@Dpk(vB~FlQDaDdpCp4p`-P3kca!MZEx95 z+McBK<XNQ+fh4%e!{X%EZwMmU-~PKHL~Hg&8LtKI#6;oHonc_sNi-K^wtdq5<0&E6 z&p4iJkmjm%V?2Wq%(JO1mw>Zyi)8UHjiYYEuNbvTw9YC5*VMCX?)=EsU?zK)oK!F~ zSO-QT$^w+@`iN6%j+l{H7CGv=43oz6{TA#Lusb(?y)92PhNH{EqM!|kK|WnK^9A?h zcR)h_Eo{Mv-tUIPw@t8}X3KyfeyF->ec&k5Ql%7G;0>h5f(B2iK#A`i+@1R?_zTaS zuEHQBhTq-0gHKLR!J{eeQ*4C=ig*}_|FYA-aZ50APJYN`6f6sm@O{ZNf&a3fdoYHD zat$T@7ABSF*ARHKAX%kP)g05-r>!ja{v4Rs<DnKU28V`AL{EITP)bM-DvHZWpC_Uk z1SbL#$WB2_VGLbK#tDKC6Q(c|_SqiLLaz>Y^39+MfPY|{SQf38MSOKnl`$~@cFS)c z?=py@EQI^2R^Pz-C-#}`(u+xgo7GJ|)<JmH?(#QXtPsxGxtz!Y;<z)}_>Xzg6h&G= z(V9xaosXFq!lDIZqurA?xynTtuUEcP?m{bhrUKeYz@i5cRPoD%&X-`y{<ts}XQ4}v zJA`aOtw3G<4-b>l+h17?iD{uIua}rl+y(9rL-3#bzDAh)BXhJQKGwO4jU|xe8xfo@ zjVlWZqEFtFq&bMX4A^70t=^#4>S{XtK9jcbb75K0wnIG!_o@BhczJc|*WQJ(Fa+^; zsp*U70Pl<Io<BusC9d`KWa4wP&Oswy%UvN<TZQq%WaH(pb)Yo+583Znl>K`ioKpSz z0V^AWu0&a0?pO-u=8X@;UFX-Rr)!{LQly7g8UUnOGDT;q?1AY&UKxLBi#qtrdYq&l zklyFRz|Px*>DkxOcHbUH6!gW&gM_S%>haZp-T|7dN+DqnM|?cImxtJ1CtDL5N`e@L z4m{t|6-x(R0D`<gjMKxoBl7AVuDl^Wy47^-<q0A6x?}GJnwC-BAEnqEMmNp90K&st z45D$sxclFLM{-4^HVI0I$c}Bn!myV6@9&7E`l3lFzQ=-bfJLW5xJ(e3Pz`M`q~klX z=8j)3?T8K``0Nps{h%fC7k6ummo<P~eN&+5Jkag7ZQJ%f+qP}nwr$(CZQHibwr$<> z{rBOb4}D46Op<mc?PRT`ArusYpid+m1$43Q8W?rt|M2e#FduxffFfayYIb#r4!D*9 z3~@5a!~b3?aktmQWjZi75As2E!04<#^OZcLCT5b)Lo5(DpRI&yHe7tn>U+_qNqF@8 zD^{!B@q0gEyEnYn=!^sC`KFp=c;~R0+iI^;6B`2#;L_7g?fS(L<b>{4XO_t*1atJa zkRwP>YEz{vHf=HX=Q$4@Xtm#7eH#<7CHR-K)-V21wufT2x^sHdB`?1}8fk3!-p#1Y zFJasQCh8XOHXa?Fswp)2H<S?SXrNC_(}zdH_>Gfl@(?R%Bh}qA18KT<Vbsq_E~1r4 z33c~j?H{>tRBydv@|~v;>?-xDGoC-yU77N+BFJ=IGj#150od#uK5qkgA-I0Z0cM+; zl{brBe}$K}fKdrUdJxem2ijRISjAK>H2PLEIGxYV@G5=tJ!7i0A3V8<^vUZ_&f__~ zf4!WVFrn%NKu$5uuh2js<Zu8Ad#{m&R7&%YUmv%T`fjQ*L|mhO{ACvJB~jl-+U|%c ze`m#ftEKu-mp)!&Hlypke6FcC$)+N7VL-S<VFD~IA)mkc_u5zxV*$&SZ_@axNA3$Z z(`xu1`=P7B$+!i7RB+Uljg+DRn_J3TXi;j!I>wD^fr`CdslfnIL!=9_h&mp$!$K|O z*2e^JB-hnh^QyP4@DP>EE2WR-J?DIKcoCnViVXh<RVT6$DmXR0PD@l3LCO5OM-0{X zF;iBK)m!CF0JtY^iMusd8mgZ>Y*+vEE_>vktX<qZ@3tq>x#EzsZMUb76=I=1AF*9f z^Wxm`#o;GvS<0~>aY&03%~={|0gDwo>w~;mh<D1>IC%=lN`Q!d|L~7OQy>Rt#etx& z5EC0+^8Lb15A>nAdfIclRZ%l($x)`C@XCLXmh-8f2x=Dp;wkOl+aPZOs<#myX0cIP z*KeR;qmgHG?`RWEo{Feb>>Hnmy;)h5a>gXGUb#WMXU7Srn)mlPV!_u&*d!fBA<%1} z*YOH`%YL`XFnci$c<Em3d0OipF@z7yNVu;NjaN+2eU{1Kvo?NfN>|YAqgj=)H|yrZ zVvqCg?*=nVEe($gyYu`$=7m@Jz0@MT3B1_;!pha+a_N?}c`YMk1(nH~_Q{{l%%LeF z`!mf>6LTlGr6v%Qx#LW40Rx9IEsE5L26k@RUqijs?s8;+OsH=pX=*?@WgEeYz``hj z78hNpWv83PJsxASG6)qOvSZw+Ryg}6>dPq+M~N#C`O$jcZDfx0P<Dd6Z%vJSVsK_^ z9fGIhm;ij<i|X%_7?V|YoX-zg`yr|Ur@<JVGTtWE*_;?rLkM&?;NfY;P-TkM-2{2i z49boPoNmC~-RW=bJ<!a;3ikCaUMo}#Jhv}FI@2w;EH-pztsemcN1t{yd^1VPm(#E7 zl9@q%Cs%hJ-{*VY%}uI5rI$?lbbx<B+vCx@E3*UFU=pAx;YP~!oIwtsXKBxYd7vOS z&pf1(snj2NoCz)1Khq$=P?|v&tET-t()!H5@DLVHaKO_EM5VU5P^7XPL>%`)z;2i& z7{OY_yB?qJHH!ye;;e_%jeOm`6H~moWrJ@#a4S9e*mavts9jTN?!XbCp>mp2)06wp zt0Sy6kQZw}(wwi661>3~rOL3BEX<=f$ylr$9`yz#Vtj?Ikp9rmA%)KPF`y%l*GlLz z@e68<bsLdR@y{zpA_B>WED661hUMJuUr67^zREY2?BED^RT^9Uv{fQ<4M$^yEM&xr zJZ-YrK|w(J1nDy}&`rWQvHFt=b&6r$E)%?CM8@y!e6|iu6c)Z>GCT$`n?-@NvsDOA z&~~TuQfZM?{#6Yo7oH($*->wT{Y&-8Sq%x*zR$Z7>qAM`3Li(x+vSF{NEmTbAJTr( z-J#O^kftCiL$khlC0Qc?*XBGvVq7yGTjtUk@CDzaK??JSCm+qR2j-^P?fI2_Lu~LS zG=N;%vC?H79MgurJfyxAwH{(wT{VcG;JaQi%RnTXnn9#u$INT+sAbGR=qI{td?yPl z+tHTD#sAYb7t8|#qHxe0uhbfBX1#nyO=&-YyI|5+rUf<?+9`OK4$*X~o=VsK1w3Zb zDeq6sY}fvJ!XX1fAB`@Je^P94i>F+_jp0<D>apt^HZ(~VXxKe^V7d)Q!YFh@8@~G7 zsM|P^2Q_z+J1~H3dKbiX{r{+xW-8aX8@1HJbp;xIq8DjVDZ_ZFGVv7bwlN0zMFRRa zQ$*jDA5Cw(&|Q&>fsYeuud5UczN&G^IFp{GxW9KcEOQ2MJhmUHlt4vP(HYV^<=wqi zCxMtjagDx^@Zs<oV)_Yjq07(F!ww4o8w7!KWqK~95!1qKz?SH95{UWFBWeE=8VnC+ z<%H6^oM=jf|HFn*+^n;X6)%J}id4i1AZUJ#5gHI(_FaMulZJP_##UKDG!P>f9y5D` z|LTtM>h*9X63#_1@OO*i(F$BL%gu;^s%oNohRbo~2)*fjz1ar<8ixL@1|lMn$3p%> zsb<4LV?JmhqclAthMkA#M8TyQ&MHWGa{Wpo0wVDN3~h^tg*$`;(`z?Er?4J`Q5kfb zztTTqLW&dk1N@vT7RXvrQYVxAXMz-xxgOVbEB*mYPmY$1^Y0sk@aVeev)F0*ZE(Z^ zv?btD28U+;P}#MHarN3ELd?gq!b4<0$h1$4{%Nb(p^cN~+5SJUR2<J;6f_TdhS8AF zjnj0e|J%J*Q%+n%Y^e7@sdy3;$qzD#wuAFYOmKVU&yQYW!JT;Dise^_@xd)j%y}Ip z`D-g6<;s#nobm1zp1Ca>w?2*OSbUVi4RVbP;w~j;phz^Ap=5PEMOBO%@A(@4zz`6) z{y$ZBn245vUErES*X0xYv-v_Y)PThbM^JZ>L4&^vwijZq{-yT!`T_X__#b^o6ythd z=yop``W5P@lMpC-u@>HE2pi-9g(3F3uvrNcTuQ7IEX0@0E3-zqgn8SRYz(e2omYS` zrCOK8)*z3RmE-&nyu<1_x=4ewYWD?FmxHVfMFVYP9Cc`{Fte;i`d|b>GmYb|%Vn_j znl%+UNh%+dw+-=oFFL+PJt>Hq-F>wmXyp|liYHZZ1K*3*e#d?5E26G=4d30L;LN%% zR>2yhC6uRM=we=g)bLI0a%a$OkhNawr%pc1ITnI_8*eAjde<HZuw4&u4@Q-ixyec% z7tX|#0+72;iv5dGX~FcE&XAf%k+u^AS`_k#+4jJgYwQDh1*NB_rCSq|v^XjPnU{H2 z&M|Oc@UR|46zPgVn(mYID)*azQA`z?Ay~9Ui`F+ON_&}+TBsr$Ln2=)nJPViTHsZI zdkMboQV?5X<=G~#JbK_I%Wf(7(COF2xI)*TcVfy-;MqUuH_j$fpOc>QL0L38Bb~+> zSn0uPKY%p{6!s9r1bGD~nBa$Aag%Ir6FBPZu1rd5z-W#Marf;haS>P_Ug9V6zkjUr zO!nr2uSKN@%S-0T%1$Lr<O|aJ9qWF$ja;g`VhoXyaEr6$6UL#|mk&+{Fa^s&kE#&? zUQ>}5ehD<vK5b?h7+hf~Q^!(?;*GKi&T@QmK`%GnhSHLRbdnM1QM{}XOClWBsfOy# zT+Oq?*v*Wb#V?OxR(N;ecv6+xl`BOt6_xtolO~=TuQ3sg^IQl5U-T^eGz7I@{?J8t zS%4}Q^9)bq7lO$F<3-YgsEJx0gn9@bNpACDL4ABzLuPTf0Gd)SjNP|&{@XB_Rt=6B z*ZTL@E%+)0QVm4Qah$u_PaY3uAtIo_LFh777-w<)VBFfmH&Bc^;>AGEw924`np=|C z7Lw~8rOSN!Ug_F*g;Q6U2XPi=F;={RIAyTu?eJ$}dhwx!8WAV83IVhTFdP8YRjn9M zDEy?^v8$=sr-3+FkKGlLm6*l9FX5C!uas5pd1uzHB}98NEmk|cSFWQ6=wy(!nnWW! z4m)cU0GBw>H3T^{nD9gceqqBrNdou6O3?M=4oSjnpa=qNfU4H0K7eA6$-6WqN25y8 z`yct&;h3;^y^l6@rqiae{Z@kcqy?t~Ep=G-?@eTSAmwr<N<^-=#Cif33dK@8`^1gC zIbp-Dy6V&ycc!Y5=;)T(LZw>^zr7S(;={muSMgQYmzc9K`WiS640YcMh3*fCD94BB z4$IOn22#3sV~0S}un}&%Y!iDilPd&XK7kd<%xBy(NuUb8<sGK)C2t_k4H)<4t@#;p zM&^`zu`#g&y@Z?$Mew|OaNpgja{r#?3sRlIFRaxRUAJdUfOEw{Olb8!LO3b?)i?kE zFd@1N9{QS#EIfv6Wv=W#FtmEiMK(79Iy2Gn5z0=pR*6C?$dyCO2ViT*?@r(j%Ys{F z{+WeO&skUzbuX;+t7gkX-^c}#JDTVEKA|tv!FD~fGI9LaQofnHFlQ?QAEmxY5_b<G z6r(&vOA1}qYNx_9*0IwC*)--4><q-IhtpTUJqQ)UO<~%Y^7Wfgu+k`MX>J%$YCN{3 z-V9%1dZ~;^et$hi3`7if!<vZ4SFK_%QqcyGN8PG!7+vykqh^%eW=y!S?Bh?E-fKsB z88&R@?w;%7;GdX{Ce(?A(E3@5DjSWDU(9B8?r2;F1B{EKxOP>esj()_38}x6zjk)W z3uBVU37aV+z^j1Uj~u<mDJIs#w&E%5cAR!yf=io**e#jtr<Aq$h;I7@Rcr91P$B_~ zTY-Q0H`8wwH8ndsQ*K)=G5`ks)qUR*;A(Y&uZ>U{huM(3GE+DDizn3kHR`v6J=hF$ z`a6ShL8?G%H9IfpWuP;<Woho@^)L0@;+zPIb5@4UzTyrzd)splgRXa5eSc^WQ2~rj z<_3W<np%;dMXYLN!vgo$qDUq}K0fU@*Dc|BgAuZ281DEP#r%jD^dW>ZY>Lx!Eom96 zVv>c@f@h}6tF2zRz`|a!_g)oklFUX(cfir1iuK(s60k-2By6WRd0xYQw2ap9C2_Jb zN`ehu+o`WrIW2}w#V_?{MJA;?&$GV*m5rz0ek9?$8<!jN6nJdQi_^L3C1C>}I%7Om z^Smd6k`yw$d8^|cP_9Sg;=Lqs$PhdtL1Xs+WQ53QxdCgBLB(7HS7|BCX$Eli^hO@A zs7oUELtW~q`~{r$n9I1W^a~?yuh<R^WbnkRBeS#(noIy#H5}Byv!$dr$PLRxOY;>_ z`Hb)4O$EP|n3%ziK_QG<0?8WE?q|aN<3iI+md9Q`6K2xo*N?he-zSmCj&;{xdOVQr zP|P9vKu{5xwgoJ~$9YBau+sODPho(m3=56ZK82`?^45h32C+@dKC#=aDsn94Vt+?_ zRieT(s^S;u<d1P9(hpjWI5eLe*!_575FiB=u<ps#>N0cmik&Jd-e&j)vc3XuTx15U z|0ids<CkI-Ka>XCf-uK&@jZ2xg~U15++rbF%xHP!3C?}UbMBDxUqqa(oKU8|%5_is zsTXl=``JUqXr`S8b3<p^duPqPlSX}57Xl<yLpIEQ1o6H->G>AVR_vAyU8s<69Uh52 zboxD56t<BQ=^HYsUAMV~K0G{oLLXJg&75~^%-h0JdPh2#+0iAcUjvgARYRXQ(a#p@ zpVzPS86Cy`f_1r&&XQF4#z7<Q<nB@}?&{|sAJF*oo~D+Cs9$%7>L&Bijjucx2x~?z zk?fUK!iH8^?}s9s(;Bj<&bmtOT?K!cw3JJm?9#dQS4$u1-!CV#<7=sg2$V*DO7t>U z#sF|s(@L%)iCTba4JS6D$N9L1at760M?*~T&L;}_59cDB`#)A1jNeo6Uj_+1*ZW`P zmutj+2(mjUafku-1gJoVQdRM$P6O~b{s(R~EEvP`R^K{S=-YM75U8}cI@aJm0>;CW zD#Pz+D_5Gg(R8Bz(~@#Tih|pw@eqUin{MirJY=#AbV^41J!Pm{Om~kctC4#Z+J)jH z<GIxETKayV2FO732pwxmTU#nWllH9y9MFQuo0T&qL6@9~2XoI2aYHEYFg2|utE7-e za2CT&R{ld@XlT~plbpodeTY<Lx4nB8{sBMS{imu<G0XEcsAPJ^Ta4vZ<9?5QH*v4^ z5dnbmY{J+;)$N6O7Y#hF(@tN*@Am#UVH8<aTW7V%0yISWjvAKdMSDmNYjOc5WkNII z_z@r?rqFoXfDLODk{CYov?IJ`H#pfx0R>meTm~R%E#sHIxnKTEOEL5#2Y>JIn0c?I zE^yNIf=#YJ$PY+3g%hPtp%l`5n?C={o+{oyv*Xf$oAmJzGonp*RdanK*-J4hu8Yb$ z1|+Ol$aI0GsczfHrD64va-nQ>d@JxDr+2&+AYt;n#c@Ef?4vXgWealwHla6DeJ_*M zKvK5pH(m(ZdEhVl%LsUR@zw~i(U3ya`Zz!3B!Eg#+v4iehIaO;!jx~sLV+K}fM7Mo zgPic2g-)W?p`(deKc6AGhU*jtpA-wn6y5lED`gu%*)gg?(Dz_$Ew%#sKojz4rSB|3 z1`5ZXtZcA*iupm!WB}n_l8LQ92lsOD#xBdv)4N&9Mc^(;OBQJRtkPs7qsRB~Y-F@X zYXlm+VnO=j-1)a@e>BaXNS~SD%@CTa!l9IR&thLb?O6h3UvdwlLrYI9j*N7)`9<;a zCId!rIB=3_g$y`Wm^`0%i9-Nfo_s(KzQV5gVB*$Pi8V9`^GcR_IS<&yyzY*$tXl%n zmw{$gPjj~1lW2SN0|0=a4Olx9YP8-LzNIAkY+QAKgbf3Siu<l%dnv=m-2)6337fT> zt892?K#rITvK9OhRHseAvft(ZM>_-0Wza{H>9N!CrfN4bX`1fKL2IyBlTX2K2A`@* z>QqsF^<+WiDZbtBs~k_T*V2~!qV>og5pV#Qood-ZnE(Cde<~3bwwp^Lp+idBgcqBt zR~U8wq>n`s)Z&Gwhzu+z&lS~GzBy_YqP?7e^4+UC{x>db{2C&KUVd?a6yTxoX`IFW zLPK=4YFc}Uv+<b?-YH3-oM3v_z|m0{uyh2%#rUqAemf<Z4)Pv|PD`&M>X$!i)a-Mj zvX3UTz)Uzb6TBi`o*i!bs2z0k=I@lIc9&$ocp~HHB{KdZ06?n`9{ti&H)X_c>R*{G zkP)_Jq6Iz9@8yYAxE(h*u~$13zi;FX#aVK%X09~iU8eiMC6(lTpp9bIFRkI1bqfnq z<rgjBXYb|Hbqum5{hVkhd#fo*$vSCFPM;W}w&Ayb->_p1^<1NBiAWhKM(R>`j**b( zWMzek24~2T9F(@+oiC*I^OslaRk^oD2Nz}SV)W=*%F*;s%&DNS*vdg61XyYA&hXB9 zcfeNWexaXLH?uycR)lOzfIK6_+d9&BkJI)tUHOE-cZ7%i861X~W&z;q;|L=#2!&=# z<?(#%t=4jT^@NmTeG@P23!Q3xWuC!8h~*Pk%5t(B&Zia&=}`i9MOp9?SM(!^3K@`v zVUKNEs!h3}@KJY+)S5m427=x~W%~7y0lW!=IS%{5>~+ZnXzzrAJp>!lWuufNhlz73 zAh<^@Q9QvGCo-jexj!csp1=gIFH`NJn#>@ZoAcTaH(CoWPNfvfohBe=vR^mfHy86~ z-BsFik!hu}GP0XVnQV;q0NK3C($rYJucCdzELG2TQ8%);ZYow_)HKiV{H>Y$^#7!h z$dO15&^JfAoL^;DQp05niy%hD8joF2t1_8Bc+22Wa8*fgv#oKh(K3kMlZ+NevXrZc z>hxu$3B*pi(q1^9MQAw-mPQo^8t7Jeto3v5bMSJnnF8bg*m=6-u<eY00)tb(ze7Vb z{p8#8SVTOsK}o22WgNN#i6U=TcnMc~T-?t0`;w>Z<KIIYIVHhxz>E;v`8B;xo5d}_ zgn2t&+oP6PwQjKkAF&J*op-uX;kvF0){{s8x4545{k3N1*UF-?D7uPYANoK6RD!$S zWP1>lWJa5J%WB)cYgi9&BVnO1n)PwaEY!v<>ArVvon~Lc%HQVxlYvLe%RPbAD$lrd z87_cv$#B(N^!Jnd%aQDk<_!P<^m}g<QfvlCwXu%mOtG^Sdbm_OesQik2lMA^WNf;) zY1(7MBVVM=G_7nEgZ|M<Xo%4;N@i_CT-eSBxJtAMt6FQ<%zOSuiPMN^tko&^1+6dl z<_;ulkqhinKpkb6!L7K~<0oCE()WY`J8aEA@r}FHNPA!hB|%d}dgcN%z9zn$;Drx9 zF)&JuI%V3%hNh}+7F_43C_fcjfocO)als*nOOmtt4SEZ{JQ0@*PgEEHKr63T@N~2o zFI%Vs`H__nY=%`S?&vHWC2gzJ18}h=3F_7`*1+l&JBDdl^$=pntLGsN3d2nbmEoJm z|DRv_-^bvW^j{E|X1Pv{CD1&NP&g%Z_+LSgbT{H3P>uV4xtM>oxY~px=mLbsBK4@v zQL?M)Q#Xe6897gEx{-++t+4q;fb2kA*-|tuqtoFEfd0E{Hwqp}_wL^dZ758@FU$bC zZ?L3xVf~A6qLX;lZf3?|x+m2MkxmrRNcXx#{sL@iV5<0El(Q}D+Fg|s>p|H*A~Wz3 zcgS!*sd}k)>Ge*QGZfqfE7nM88JKVupOcl<u0tmEe3Rk>pV~?ts;9=*r9QL4m{JWQ ztEOj%kzvsj0(u_y8xq-B0-~Yz=sOEPATl?xV}BcTnK;e}57<)RUyWaQXb$9$$mg#) z){E!6aGutK7P`!3zMT`A`Xbzhx=AyG5Z<g{i{xY`iWV0iI5kYBBUFai*dU^q0G$Ti zCuLh?W!;*9q;0Aq&#JwD5H{GY5{%)vln8e%_*I=%F68P_26rm8NP+1Ex7MhqZjkH| zbh1?4jI`DmiKHLMjgjrIN9&HhE_10(U#7PgyeSiM6#VaaHw|io*wOs_C3*#JHLqnT z$-m=^LWsoNgU#5wVDB|TCDjd6JPlklewF!6bJ?!f?xtS~Y5Cy!`(dD9{r&{~n9Ske zb+{BQo$5{2{<#kOLm=pU!8A$U=+lsSNYq47(y7Kk^-nQmJw%%CKQ&OI(SoE<DuVTY zOG*}sr**)J5ng-I1HUg|ORqPtCV}cHwEcJ$&0eoSL_K0t4M*Q2^cD<wm7|wJd{8R; ziif90O4EdjZwC|h?ESC?58v3$jXWW|V<3%ay3O8@UO+bPDn1cWm$*BaYvuM(gp>7m zs0@jNUvU4>Q$vvPn4d3MzUO*)`yxOwVVYg+5=L`DH2F&;Xv3-zv0|~doxDC8NEqEi z;fc86(2dGj&%SfV0yE`>H1WGmLvm)!9R_Az6Hnzwi?cfBRk0oNUU5|2fmlwZ%BXA% zTq_gW48udFJxO;PmyPY!Mw}`k)9O%VpLItb;{13@(rx(YqYIjxnvfswngzQz7p}rO zWaLzO=$MXH^<mfpPe-NMh76(qX^iVFH9y6Z7=F5*W}I7)rwyAhbW%7zQX$WZ5VaUP z4LfVdjBX(;_=cE(j%m9iOZCbb^w@=k;+FW-cPET6r-iNAT8r?hJYGGMZ|#v6HVQRe zF$gpb?}y{FrNU_@ppuC)W(^n)G+sXb=zFiiv7II{#i3>lJ9WaY_g#HHHn`}d<XRaY z<I+J?G|YjhuI=@{!<qCckSTlB3UXvE-PM#K_}k1k(TicieId!;Hp)97fPwlI6S|xu zjk||7a>?}Y-T&jhH)w<yvc0aeIVK({@h9HA>CWuevX=R}A#r5u;N;z^x5Q6_LWK2B zR#VS$NBveCO*t@+h{yAT>+xw2FMotu4SDpriH9aL%|65I{x2P8VFq$YC5E2k9Trwp z(SWE;Rl|FruWX4#K@#$ISUbT&t6)-C0Xn+1_fot_P!$iteG8A1C=UlXKTn5R6x5$e z<TO95rLH<y(ka&wrh-!%#|csr|LY$u9QQ6mspRr@Dk=2~rCQO7B^#i=&HX2~Gm&Y| z9a>@elTk-PP@~4=4HcET)e&*Dx3P5!VxYd{f#TaRgkI5%*Z9>>R-Fk8SW{@6u5#m! zAK?nbj264NDJoN@r%hdkHhfN@z6Ez}RXU?%-kvfbF77+)^W{1kn`4`CdBntzFVM_w zWI!j&ibK(n|J)d$x(fc7B`VhKYmTfV!Act|uo)nL<bcX<np=$Vw?3g$8c^vx+m*8M z-dah!rw_FUPUrEGZWoFL<f7qajBteKS5xNAw9Y;PkUbp=e>aR+gnaM)F6gkt=_!%c zlC06P6XGd}YCy-Z5Zrmxg~Ae^Yi5PhR6_Eo?m!5UnWcOHuFo7l3ck%B@PE=bTsO-2 zRep}g9JDe_W+o<T<<fr6r1o<`vP~rN06yhjEek4Pn#cgZ>RTD;WZ3qkKNOXQd$mAD zE_R8A6P4Jna``<^)R8nk!O|3+=h`6a(X6erqYPGuO+N4hB;JZI6Ra3}rP9wDv|+Jl zux(S~OGVnG_aW&k)7d<{hh*1>?UsBe;kydr{sV>^vKoB%z#(5hxdA$3fm4TGKq$Wy z8?eo=1N!B)p^L1BrUFgmZ=d5Fl!}y^ZisYuKM%AbPB-7&F8Q@4s*D?Tt&^-RG?PXK z%ZNp9ENgiT_!BO~P|A$w4OA7N!7hC&yOS21qDo@X(kXc55lL0l5HK=42N*~BgpO-p z8pOe=EMITEOXW=;Tlm*a=|J6$W!vDQYEbP`3_>5(VUYTaNHE{bgwrPvmHhl_qyZVl z!C&grvI0FUssv_e-KjWm`yYbDP{G&=R&umGQQPGa2#9=G0XK~2`K~<ObDJx(n8%Z+ zBn@|e>zbB%hY5T6E^yL9XIMTBVp0)^JmOT$Ec<KfZ|sgfTf{H$3t)`g!Jq@eH1P0` zme%374VM1_WH{2!u^=iViKoU(rVdKUF@~i~BC&Oj>gp*>jA@a{cY37#*}N6Rjwz3~ z2)7>SynvtciLTE#ufM&R<VwTL1ngSd2O2dc_^ga~l;M<44#Ps>!ky(Yf&cN=#oDFs zx_i@H#$UfccsqC2awWTS1ury-Kj<NN;qfbh&Dio6EfarHFI->;V|AZN)pq-ajP?&Z zitDeVOxa-zB$j@GLraCxpvYDOe2oER##V9J39Fy6Q`$2?hK8}DZbcNarh}b~&M&k1 z`8Wjn|Mw!~hGEA&8U@F~^&*eAU!H-#rZJd<9Ok2UF<)Y~`HRb2QHTF}0LVOR)aZk~ zYGU6L6@$Uc7(~PZhL#$0iOkw6+&1gOxFRqlw?vobaq3&lP+&^608_f=o6s%8lxzkh zcgZuQS%N8E^H1uO|Nlh_+Hf>-LC;=VGkW-CHX(ZzGQZxX_3b(T>|&4`V{7fF(n8{~ z`9s9O4cyNS=mG?U^WPZ&V1X<hYC$x-wca10h5)O^6&(a;+Xt$|U84V{B^X^C8B~ix zO)zpGcd%-bJe8H63OLxguDH}rfQ=S*LJ24i5rV*Ux>T`^k3))@IIh}YtBz3>_*IV& zsGMB9rwU8^y2HQ#H-Ah+XYW$;&7aXr^J*WaS-mz1yq8X|-Aq^v%U|}1&j5UOE{&_z zzER{{+vIJ<pW@<q7~Aav|Ekq~9W7`0QdoDyc`&$N%pCho#Amk^zRE;D3CK8=Igy;R z!SSzd;&d1ih0@h0gHmlt&HI=+V~sI8_3orLxTKu~bvMbN7w_D(RL3JQ5!yO;b3gdx z7B*Bige^+TkgkKNK~CdNCh;=qNG2L;yI0TiQl}X96|>3M#7cRNPZQ-yG(mR~dJb?g zGac7WjM<W!8{IJ?Dcs}49BZfFhrdG!fWbuId#yBjZy{o|0<U9aWwOyN7P5|HgM7+M zr+bqq*-vOL29zhAe)f3+FOFCoEvbe)#j*d&w4qA@!H818;9&NXvpw-~H+dxA+g~rx z;<Q_eAxQR3BCC#bG2vvtsZpc3g}=GuPH$troXT0AX5cm)hS7)fe2|gWAaS-;2}ed7 zLK39`GOa*em;SmsYP~?$zHTl}_Zj63hIf|Xg!ou~gGT<1h-=8=vQq>Yw|M~{Tt|-l z^k`PE?q}FSzrRT2r?2>#X|pg?I;`O|I7E(*Sm<6ep0-qWgA=UT1$%!zl}5)7PuvqD z+0Ad+!v^elp2YY#CS~A+7gl^zFZjM;U<pBn{USAyOWV18eiE1OEA4HgRG*WQkwEtO z*X}@laA%f8I30JSfS0Dle&DQK0#|F-VtgHGc{z%q=@;CayY^Y4-(M(N1{21tO&fQq z+0?SIDtFuwI;o6QKag2i^dEaxK9!~aE*>?%Glv;%Tbe-1wspG!FyWH$nw_(i+dOkp z+JK4;P3=Ei-d*W_9FM7t@Ceq8i`M_G%LZbu_D{3UI{g0FhTvgGzdY_7m=)j@BC)5M zEueF8bDqn~ZV)<DBm?ngOZ{V53{_l%(@$ocgW=859-!c-RtTo9<p7;D!#V5G`heg& zJm!rulBLrtgEsokVikt&tP6pRWB_QjNAA)@ZbcA!NE7hUy!e?EVlC=_EG_7YJw@t- zp0@qk=*m>ZM;5vI#gx}KjNXxhCwwh|mDD9~@Co1(_|ozeNfr?-wphV#qM*3cZ^-^n zou)<#kf;0;#U%nL$K3Q<5PAze$_p`rY|O9y*Jh|Goi0?`1KJcBD<~Iukcq#QjFh8- zN*82LWZz;5zKfdTa+_k0&=OsHAwK)i2);MlPpV5+mH#n&%etb4VgwZr8mZ3zp5^ZV zh#YPuwACPuWP4sn>eNo1vT17vlY!6Cng*k_xK-mmJ=XBzWW}n@@fNpe50@uxqr?u@ zc=yqHAW;#{hZ(!JUx!Kj^|;b1!FTV4pVSiOs7$sDbT{?Z<KiG`ROO|;+N-rg7Mi`Q z^UN*OLVG`xM>lf?)%B`|T_ea!fALt7r<RrPcMK<#G&p^u{7jaAA^0e3y|Dg7f|)a8 zcc3?xPkL?Mm>swvzRD!x7{MZp#FYTW9yE%+YF5{;9?-(n%4a13N@|wQndGP%68eaL zaD!C=-Q6&`?u%P#lQI{O?b~$}Rq~8$B>5T{LoxmRy(_F7`oG*;|95caP3W_an`C}$ zR%S=ze8AYMx#KM%SnHL%{Sm3~fNh-3A&<_x)M(YLu%`q;`@^QzO&N^6S{fNEJ6iAl zG=*nZs7(|joLJ}%;soV#&mPh8>-aCgi}W33M!Y`am&aleQvh4L_*XT}p%!aTQb`Iu zMWh8Z!WecO%r5WOoe1wIv!QN(JiQ7xpO1@?hk&%lrdj`?LKeBxkB@X#aGa!{rFfBy zr4Z6BFv$4<%6yn7&7LHbt4>~TM}LvQ4xonSyZF5VpUlgAQ#Ef8iuusm!XNifH!mW} z?RW0}B;K3mi#%9B_QAxOQS{p3V?^31@H%x>Q#x%)D?n`wGf%Tq<sXCBJLZ;d>107p zsui0L{dLNSCpzZTwV`+quDUVJ56-fPHjzvPYulzT!W#;+GdVellKo}qILG>v9zw&o z4<pA^6_@GflS|T4A`)n}cNo9?ePD2$DyH_5ZT#F}4SqW?Dy;?>vu_$(RcVORnY?`& zmGVEa^AT1#Zzd@S$DW{bcE)^%*PobEeU+VbeNCm!_Qlhc?X@rCpD63Z=5W>4MhE!C z2Y``M;z3ae*E_?=Kd;UDfniiSZhd1OAsOCXam*^Jw?cUWttJ<>t;Ef<`2^9WBPDW# zc<|mf!@uqZe9t_dKxm_4>b*mhUk2JEY&W*^908=D(=+Vu+P&ktAm1Wnlwg-ssc^79 zPf5gY{pmkx8jg$pPJCwH!#9kJoJPUq<pfG3wy`2C7*lR3uJCvRg$jMFthG7p5&s2! zpgM~#IL*A4dv~@ZmjLvZWGsX|r=Ty`W&C;v5XmeYE&Kk)((glyi6OSnJFwrQ{E#i8 zb#))*qd&xGbCno6t(ha#spC9+`Ex2}Ep4Pimaod%W$K5MTyD*#Tf7q%M96G1bG86f zSAXDPM{Pox&+Zp8Kn+rcj>{X{kp^z$gz16`T>z4efNbzNd|UOQVq-eR1H_fDUB?1} z-0i?4%4nP=xH}eJP@RO^U&lXG;K?QeCIVdaIHT*3<&Y{x+XG2@U_%8Uh%;;4R}{Yp zS({(;ke;mN!V+B}V<VLV!TxbeM={(+W&IVFk<=zMj+U?7iswjPla4ua^<NEe<O>2a zKp@?nP<666+?Q^m7aBV;t3@o1sPT45`<b#Rm!e>bVoeWAp3zRCg>$n00P)|8pMaf) zj7SWf<l{LI6^Ye=l(fiH_}h%WTEufR-UTvW^=~EVRVN~m4d@0F6X{Z`5FMt_dOp)O z96CbAVhk&icDjYCL9V5LIw;S>t-PG39Ds!0|Gp~9Wl;=T=mD{#<nGq=^RxQ$Xn^6C zJ`=(|!VPv(GHFEWkcN0~eMs^QcHsBH+?+_z8~a%8#<Z5jSc#9FZg6)>-NKhZwV@so zgbGwmH2L{EQAPOP1zKdUXKfYuedVdvmi7?s05Gps$26a%5Ir49Y7VnZsGNP5zNk1w zLTsx7`4@hPpv=-U>YOGh=HTqNBcwm0!<zcn-~AJ3XR{4{Ywb>^3#3OTN{{+EhkNOf zVe*spfQWT+H%4@Pq3xGX(H8AR=|CaGv1Xu+yv^dUJp<vkfL*PBdb9y;s;mb6wLf=` z4YosjwXFS2*qNg~#aEH!2Pf74%j#(*lf>hh8>EaM-<J)E9v~ZFt4>A%ZbifI4%tS3 zp74!))1w;X)_j!VE=pn`=xLvA|6iz!-3eRt{I#}h>Ji~aAWpAWeW*9LGzJwydRY-6 zN>Jt<rkJA=Sxg3rQwo*6lO<ZVL+t;+-4NL@FXVrAtbzGDJ%gc<6{q3{N%_JcJJ=u( zRGQjRdz;^a4vMGiP#Vk2cuB8UU_%8@#GbVbcHanymmpYmfJaUssPJE~58QP0cB)lb zsemDt*jJ7?Zx8@6M|9U0WX716uG(_C&`hUIJ5No24;lc|*qo26>Pf@@CSG5mfPNP6 zpi0(}Dx9$xoCT-wB?FF)AdA5HQAsAHcd_6kfy^IR62xNJ%m$1%O1Fi*?|w;Y@H_$c zi6B1B)kQQBdZ4bVD>IqZJJ1LnKn~)0FZsfaEQFjaIJ^egE(zNnsjE(9e3kjz4?k^B z`DDXK$n$b`oL&KM8VWkReOUSt$=dD%M5|bO+&&AJ`@{6RdZ>OqMZS^KIoy4%Dc9@q zaU~mJ-=`CWVCYNUSOlDSO~Z_@HY3>8tqbdVtYd5;1>bDr0cHrB(?F(I5w=tCB)Q9G z^Gu}E{cqQr#Vk~0@Zm@gA<B##tbbF^Y>JZFyVrfu>Q<jd;Wqr|+(LW=&a=qsyI1#i zp~J=IK8Bo3=!hIIvxcko;T4ghYL%9y>u>Y~%>M9J;v7e4z0pa`;|!HoE--WC+LQJ9 z{w)LW<7P&-N}U5E|E5=w9pUeRz_``qw}^>QBcj+|0xFa(bRwn|)}8P@eddo!J95js zvVXa5$IoPTimE8TakW-HND5ky%JGKQdMn2pQ9kb9Cw(E4+lx16+#V(yAnW;J|3XMH zJ*S$<x(18niX4a+Lw@`7Gga3kR{>@zYq4I#8rnK{>{XL<{mo{Jn=O>VC9K&MxuxQP zyRYzn&J+Mcv8@bZj?~G-AE0$D*|>3?oz?#wYu$x9SB^Z1<xZh7#`Mfp)0_748+@+! zN>JX%p|eF_C}Gt4pDP9)BWyz9K;~8mb=vN$&*V^C@Y>{zvq4BjX0<5mn4iSkfM&$( zY(eM;AZUjijU+9>Dc5wicy&92_a$gPNA}~qJyH2*0s)qz5{cMsxH>EB2QM5CtT?Xc zhg6Dfz#O#5QT}if0%DfTz!r9=8*KR`6^zfa_bRQRBHYVB&#~DSvnNSaZwkdB9%?!} zgvsC9+D!!4GYx!IypM$%S$DMOMhgSshPL{hiDvCbY;S!vjxBkZ%}ZoOo!0{?2`$u4 z=9qoaNl(FQp}nN5U|UG*^~{~&gWf~67vrN2b}al@TyRN_YEOr-dOe<WjG0@6NDU&; z9v}jx-7}xTEf57MQ7c1UUB~accQWl|q#(uNv|!iJSi>7+sqJ5koVprK=-8(MlmZXs zUm6h(EoL7;K)~zsB+7TWjY(_OACqg1J@RK#dOJ~W9Y)R`%42Dd<#6O5)r=OIf_l(w zSWq&w(3d~lpCQM{%2}`$kAG@7I@nyCL;_QJK>*x4B_2?3E<;;n1Sz9RZIhYol>6Tf zyhI~_0ESWRvK!5K9VfEir^uX6X)@-`Dx&UsHJC0h9}fW{SI<uvrIBin2mj3=07Aje zqWnZ%4QISh%7VHpuXF?S7S=>Q0HCeS_7-0%CCi;AQTJ3b`ZwxnINn08iaxvIs5=~k zSd+u+YzNVM?sBAOuiq#-M02@Q5Aj~dCdnAKeg>~E%#wHDmLe{H?dwdew_|YHMXK-Q zo=(lWsOyaP?=<7iwKVXXnM!|?O;T3XD2U501Yx2I1+k<l<Sp1@(v2}BQS4BH$UJoo zFf~71qMz##BePt!?}BPo_H=>W67X@CI(`1z#M%#WgcdkkLGUB7ZujwLTBf~^NsPcV zJ6v-T+c_GLruJ!ZM&xxd4^3m9`*hr?)O^KBXax7j8$n!;%R-gZ%fm$#IX7ZCv4Pl* zmk~+n%sfTjN1jNIds2m2N!YMR0%Uu9z(;GQq-}w!oIE0f@8az&fvhElN@+4Wtt&<z zvsU9Zm5-6jP#{ZLWezJN>HK8_5egb&1R+lr8;S|hJWw_*3ymM)2p1tFeU>2l`!D4< zdM87Pe#q8^u27TAV^|_dZA)hZS7C}nuhup!tJP0BzZWW~b3IX3UW14B7$JMjGR?YW ze-$0A7_~d|i+yB!E0IV?xD)y{I_96tRpL-#d*ivix51Wn$rrVPH?0ct#au}lzge~N z{PtyCmMHG#4LCd>z1HUHXFbeebk>>3L^rM=hY+(E=xzuY17msRYk35c#0X+3IoQXe z`9y~ATpd166iKvCl{7)LppZ2PqMxj?423>S^izkGE^M6ujxjA~4Z;A9Nf7%LW3r+C z;iG!@6+<A5?BpwBt!=p5#@MCsT(BT_p#fI)P1hq)8a0)fN@*it(+1>;G*%t3t0B$= zDOE=vfcl*Hi2U!VMIp^?K?Kkcl6xm5+J!BwhEtoKnZEB)<29v)e#)-QrX=1AS?-u8 zy34>&l*n}|e@YJ3SsHpSRW1I&XPQ>xejv)*H-;ZdHNi0li7_KRL1?s}<Y77@=-+r6 zA~3L`F!QpGIfAp?f>CPPZWMJE!#6d-Vb6SKY*u}kcuW<MpjcWzu9gDPmT5eR-D#au zA*4SK194^~Ef#nQVT1Hju3#N=h|fV|R>Z%1eVN+Edy+NPPS9U6QFlV?z;7)cB2aWR z_s!T-6MLxIEDv_Y0a2j6!#wBZ*iA?(jHn7WS)&Eg1k%C{Xb9e;?uOu8$7gZ!p(06e zZ!}0o##K+tct_yaAcvmej?h#=S09_{?9|NXc1(SO8Azt1n~Y2TxmwU?x}JD<$^!M< z{<(M|)!@aji7D4TF6ZMnY_d4oNoQ*F-A_FG<v|A3$ztEr3f%|1k!aZm0od!@^t~3| zsG{KA{O+HWCD7ujFl`P}ZIdm3sLfdCXZ0(;Il*FGs%5!}va+7m%^G>>&~38`zUfLq zRA;RUvIpcB6~|rhyz2(U@rrn!VuWpS23W#sJESyR?&5t<<gaLv|Mg+8DB@F>L+le9 zEDFVMdjxwH`K-WVNy{d{PwxsEq`r272Wh=4k40=-0X&<mz6`l`yzqxr76ME4AftVN z8WjM<KxXE{nicF~#!exi{9Y;wwJ8hT04L;FCAi{ip<3N@o+ClN+HG*dO9TTe4yE~F z<Nt1bI0qnhy|d_zHrl*Fft|;GM(O=fz~(IZAi;doK?gBmi{pVH+fD%+nRY@L&pvZ7 zTWL=pFyh-M=;SXIi?8`A8|?v%l9O*1tf1pTw%9i|FO|e+?mlM8C|3w%6r|F7k@|Yu zq>uaYKNK<7_xAG;tK130sE#)Yen+yhipBE9Tm7cn|CC=@W6>zf%xN<#|G3X<d6NDy z)?~|86E=38^$sV;UKZ^^uO@>3BV!;-d0P)K{L?#dM}PSppr1<O(Yo^g3_wH!hTzso zcch*y)S&W@`6}zN$(K<jU!X=8sYw|)KGZWxbmyBmpA&^ETErI`q@h@T0V8-^oA)X< zqwqfiS%R&Es5u&3Vb}5h8~+C4dHM99qD0uayTbpPmub;W|8XzSAFy{w7tT--`Eaa^ zw6$AY9c-Q(jBidIKk|kgDgeJRvKyaLIor@Gj_Nmm#$5b_@!YNXD`o7+BSOrs<87G@ zn}KRj^av->Si-v&i}WFU0`^eHaT#iUkN+9?&v=*dDp>q<N0}7Lmu~yCMKZ@DAvwru z%9fcCYw`ukK@$!>9EwLo)|a^ycJ^~C15LAI0!=AnyYY|8l$n|)<&*L<R=)ppIXMf% z>wxZYYZYBDLSdF1!v%qUJt*(+i+Fh_jwKqg01hH3ghyte@g5ASokVB1DNvp3Rr^zE zdi@w+Gw)Kz5YEJte3J&7aIB^^QM^?s753!+?s1ZFO1zmLkBN1Ma_`my(~5^Gw#JJN zTglI0`STg^V(Hz$ThMgpuS($&Q8`5Hg34+PX~NGcs#qOQpJw1nHLzUg!c(Aq--mFU zL~B?5NSq!qr=CG9uqh#t8rMInGUj{6XXGYQkD<{8*=!@E;x@k0pQzQfjitK1_55@f zhB&8#uGfr}EwHh#D<+n*+2i>S8zq6o^7mnk7cb$aQ8kLs-ha^<0Ki9c;EuH0<<bvX zPot;@$2<Q=KG$6EJ4X-o85;0N4Un1$KkmF86aH^?kT1Pg))Zj=>Z(%}9PlmtG)R+? zZ4#$n7sXK)SyArHrMY_Tcl|4UOw*AjJfPd30F`t7ugqz&xs#XWgw|YOm0K_arKb-I z8=OlqDzbb~-@oXNlsYI<E`IAdBG$du+bJo4Lo7Rbrf!p5y)IW?JzXLj%WBl_V$0%@ zMGqmU>!HAiOK0Jmx7F%7_XPqC(dBL_zc?$@SoqFG`nErrBbJmr=v2>ovaLVO*!ZfJ z#T_D?*X(!S1Xgsl>0bOcUbKVL52nm1i1$@(w4n%DD%#jh7kfi9m8%*ojwj%`^3Y|S zO}kzq*xMS}6NW5*R!IMJKzQy5M9$GR2q%t-nS>+CxnvA|=xgg|U+}A@pXk?dGG6i| za@fDJ96@*#Ww5>R6o}}a4%>_EMU~h7IgX;wMaF!E;7}{ARk2%{OPdVjfacw^pwHz* zW?<W!@LJ^(=x4l{<1yESuG8yR@}~z*Mb0muM2x;vkR>dXk$jI7mNXVd;zH&nkJ|m% zIVW3YHbeiD@MUMdgC|S!<4HMZG3j$siW;`SF=(Du7$Nf=QCvGwKjo<doKRD>0Q;N5 zCt)ZVMo(^EMSf%O{&3P^qv4&Z;c+^hpRAj)$_}L*rp@*%cH8mHoYEzUwSv#WHS1oN z$qO;Zi2nlQkpL(sm<qo@7I70#t?Dk)(3n}5C{;9MXxt7kCHf;l_||nZ@dr@}%AHGs z>tW!FYy3Q(_>#<rBzGs#pvkER%btnr$a2ZwCj<+uFHCNkQx#f2(b-SPpUOQMph82& z3n@}gdu|caV=)?30lp_a3(-3zSO~cnZR`4&pI2Z~j?>8Dc&A+#Ya{MPx7Jtoynw7A ztmL#F$}kXOrW2z;tE||gcCw{+YcEwwSbk-Q=@>vV{(#(4_lQ?_u~RLBMv*yqY>Sef zuVpd9P-HtxrJA02!;FcOf2w~9JDxUd@&~i)tgf>9iIQYLzy8J|9bQNVshUISjM>$j z7T{&7aw1`jBl|O3Il_Jua3;N{inyn5QSDtmqUcWcOv0D<_ooJTS-qQ)zU28~d%gy4 zw=jhoADP8)n3Bbzb=^xK!~yaIW&ir8){ui`t^6M>T;k~TeyYvnzQH*{4yaeYl+c*q ziJGV6Z2AO1KqPrs@?P!Jd&s<2CphlnuU~KRU$bjbOIo0jeSp#_7{fFT!p-gaRIexd z!JmJ`cVo&t4Fi2j5CHH=%%3#bDj!!tmu?>$cpd#<o!kCx-Mudwa-T_ffQQ8<W-``# z=rVp_?8M4YkwyDJ?gfK(Y?tCk0I*~2)jvJm0Be1<?LXr{(P@qOF%41A583?FtSRjg zY2(d?<`y#G$3Y5r%L8zZeRzGhuPf%r5cayP_)qk6@f`&H)7U+Mpim$jGlH>-Ss52+ zyV@_)bcT;KYo?Tzm_+6P(9DVEXBJsEN%w_y<G|^?LST}@1$f5U14<-Yvm4|L$`fpl ztrDw(eTKdF@krte1Q1B$;;jP*E;*-{4;8*(!`vAA+RILo6K@Qq1-ZrPi~U!332mWQ zwu=v-+c(?np@Bp?ck{v$-r<w^W;<SYWcAcYy1*_a66*ZG`8|v~3tf^;HXCPkYJnN+ zdvgRQ$*>xOwxn@qdHeRqHaoXj5S*$8Jenf4tH=9|sD(u=<b%j9t#j88p!nysm8;lE z@!~8yU!FiW7-b6#{c`<MH9r~ea%__s4}CPx=NDsM;%+BKf(auZBCJ+hS%rcy8Xqv0 z&#ukETjj7-9?={EeEGqS``IJao{FSRJQ9>2b7JD_t<je}r&>nnvD1_0&f2&cl2!9v z!EvJji2m8T{VDrD_CE_&>64?G!>q4f<wdgF$^Q2QOtkKpQlN##`05Z}(O<+dLS#4o zCCbI|<Z~}9*@{rd)jvhb<M~rsePlwR?B<y-K6g3xUVQ#%Xlr<s@N23(#JmGAtuXdR z`o%ImPiWRbCYi+7+xo>s@KdP~$(694%Ne(gv)k<?SRVSyu^%O%o8_-WNT=-B_#Y4F zCsFtbxk;yWF|gAhv7ww`YG6mmsTFPxNd>QaO{N01j(zpoSUm^s?UD(zO`T%`KOlNh zLA!l}N78WZV{z$+W3uDRPwQ@}^{t>TD&<F%ad(<j5HbKp%$g!oF<~1|rnJ#hYJ)dP z`1DVq>6CAKnnom=N=6#~lbabm8`q@%_eRwsv(+|c4K!u}Ojeyr1f7yC=GYN36SN1O zdn6;AvNrJNhn?LO^k6at=BoAvwQ0hoNAT6*8})E-gHigW#IjXKBgf{O=-)r)BE1WP zZ+d#c&p6SFTKlN7^P?Cx@ULN`UKdX!PT3%vXxXW6pi0e*=FN8}_8sxy57Sma029YJ zqeH6r)tec{n;0%id}P#()5P*J$>^}aIj@(Kwo1+gEbP29UG{o_7;f`Cs9{xZIC(?- zitf}S|B|IN{>pAowo?Hd;fnm`Ra9bKcAleY&;+Qs-`K@kkbhnhLeOpQQeq~bh|hcV zrKN%!FhWS#1vdvj)#^;QKqM~~x>=0HD`fB~JCV7&Hl(Dvabzs&FGa+92(+F?r0lR$ zHvBS~^7qT*B;+Dpd6k^WGCfzsM>7Jg^V>B8b+PZ3k~0hNCm%G&obv*DNM~ah4G;YB ztXaKxWRit~U9RkI!u~v#ImET6Q@jHr=FLVSw6xtQG0@28xGc~2()Tx_K5kLQ!#{~` z@Ft71)*;G^gt`^G*qSMsCsDK8RoLTv%igL%HhCIw!FQcgfb?-MKjVr(r|}Ej6jxY0 z<!?mNU&}K>jHu<KJ~RlONG6tz$dF$D$fvUf@fW-Xzg{@|Ll*%ZP&kW@#p&o7xmk>* z-KID5n!^^CS<e6fEq+d!=RzkVf~+2by@iix=rMj6kHp!kA*WZ+HS0htyYRKmLP9!O zM$7z29^G0YVvF-26nr!7S~uY}rVOU;%c<N~!~QP-T0o`0)2X-OXIUHIlRYnwzv$EZ zQfS7c*b->HO$6=>oHTW6cqQY~zXebt!Ow{;4Q?O{1gMowm$z75fh(~?&vC%-`E+cv zC;aC1KZ4qo_nhW+7LbC*%9Q7kfAJ>_&Wu1YuFX<v1;eDZIUkpxtO1|b>I*ULD&|@O zE%achsq2|HZUiB0L^Bq>obwY}U2e(DN24-z-2=ioU0>}_4VTJPryXT$^MbDZeWyBO z^8o*U2tLR+_6Q{;*Iv^9xsm<Vure6-fQKo^qOieF0mRU3NPa3kDX<2uC=w|7K=wK* zStW_n*mpds6y0Sd6aWUTVwhEYc!UnR70>~M(3;8{k<0qi@iLrTJNN^wvgprME{)-$ zJZ6h^6(0KP!|CuscW22CKlDzJJu2icb!HH&uVFA)>mXT(B(WBk@R*QbC0%Vje;Ng> z$tNMj!|LA?W>-^q_uiehH_6{na(IrWB`@+@1Q!oLDo_dSz;B9<_C#=h>+B<RLhV;c z(GH<8Jt0h%5@gc2L{OI>CA$urrS-zbpraF3>j^r&=<k3ExEfOuH?xlxQgHR~3LZ`; zBl)WMs8u)+q;3Z-n|J3utWzV@MqmR;>4ID-NYPTzBVt`PF^nLIQoHxZNEoTNA53St z1#KeKNaH(|V#Mi~J}i2qB(9J;pbzWp09(L4+}R;16<`)cwZVM1W*nrj#ZY!2opWw} zP}H_DEf%vVd!VNhX1@H}kb}Sm^x(eXE9?F0sF}U6$Cscf+R4V!oFsT~@M;YVX;>YT zuu$Ponq)#H2CH_u3>-B8fFDZ5{#{PlS*OID^aM*cv^GFx1m0?mH=OBo5{_XWnmWAS zl*^i|)679wmm>$`;ndZBSIf!>n8_gEP6CB5jVrYz1~3*MauqR2x8Tf=dzgc7bm)~E zF;Kg!qHc|+1Ne;f9qr1?@+8sZzX8k8a9m`oq<I99(`iHnpiA8t7cSYrRz|kox{DZT zeEko3619%W-cYv=$0H8@C|tcrgR`5}jNK6&K^}$IfuY(2%rFY2L}$<D=t*2H0jXM* zZ5Q;;4EA(%W=oL)?TmIp8`Chyll{AY#zEVJJ|UXu8RKD~AEF9MpY6c?=r{HWVG;BR z3|p0wSY=BV!eR$?<ztn7q#^(%d}Wk6BV)&|ud%zd<IB~~pgH5YPpR5H(if}8SWH8& z({YCol&Pwt+A6jXCSrsPDT4F<FB2taY6kcJ)}>8ZKvcC!9F`5rL%F*tVI8OJ+5x$| zJ;09%@bEP4t8x<0<{W!XUQ%G$P{fKYi%>sj#$h{&$jFaC;=6ecm&Y7qs&3_PGzmuI zVyuV0r-R&^LOiZ#AOwRNTmH}GTO=7qq+sU>gpmMaIOWY&5RJ|+B`7fnhqwXUGhOK? z26u5!M8$}a+VRS9wi5GeRHsB3zMwj66MvAl5!PH68GZ@aW5a}3nE@5A#~^#uXqH(H z&+7kjf{=__E0YHBB+0)BE04YFdV1_kt^CVF3{D*00t%}meZ88C6*nx+21(I7vAnx_ zRI0_q+vqCrNaH3G^uHl$PoaLx61RXaA^j=j!laWv8|0S=>-@tk9qp$Rm3WUn{4u0T z5x9ic4@2DbG&A!2^Ygt^I)+Z(+Z|Q?Fld2W{_+?0rq|RS*$iwzBbtE#KS)+9qnS!m zMzOB?n$Smo=g?yEKcts30J_m7Mmd@Y^4LG7r5WF#;97wQP6-T4U$JboI7q?E@{Fa~ z791oj%LO69S(eL1gT02yDI5qFYE~qr3-ZrE2BIe@%Hc8-7ULiJo)O&QgqrtITqQX! zirafiO+dj2k-oZ2Qx$2)OaMGfZIc^mBI{j4Isj+klk#XkEE<o7rU-MD`6C>dVnd=f zJbLQ;8@o<C^x(f5kQo8AH-oKUrmB9{-gh{Yt8kdxdkHJ_l*A*2lxlvuL~IuaC0PyS z1WEXkaPF5es^<$7DS+RxVN{*|_Z2%c#SM8tcIOe*#guP6|GQ#L^*-k`N>a9`(%eLn zvQ0Gl&h~Jm%5+KE=zsF+)*lQLP@-1y_WkDNW89$XvTW?o!G-dTKUyI)yqmr5em-f` zlL+%3j3O*`3B-RBbcdEh3$@8|qZt8B6x}7^J2$oebk%`%8=)tX_w)&+kDVWV_|Oa$ zP~vtsLd{xB>UFa=RJGmPBrFN0?e9UQfA{+qr$dedF58-xH1mp<>75E1V6;I`;o@ai z2Loi-)?ba3m~)A?dE^8>_zXin-uV_SZ6i2c-c&TqP8<jer^GIrLr|Dj(|j$(h&rVd zJc{v;nByK2J#!oQmN!|e|Bu}n(@Nn&p%3ItwmB^I$mcp33ceK{W;BiR>K#zHv{#`Z zYO9Hnm3`ET{nVUio{iYX%ayj67dAYDo12D;{=TN37iA-AIUM}fQ(a#SY5bK$xS}6b zCX}?e9d-I0nRxjU8kbc4Ny8u-YN#9Fn_p|YNWKg>Ii~;N;vZGXi6BhCz*ta#J=MI( zUrljb`4V^2X)fa>+^$`6qJY5$p9dQz%%hftx5+BjpapL>qp4GFGsq-W<ePs>SAc-A z4S58BUwb6u0=v-0n}@G|{?>p5USZ1I!wo<ttLO$OVfxzyT^c~-*vE?q$826>W#TZO zz^=|DI3KG#tLV~Sus@HTJUzlcX+=;B|IuVv@MYGFcYT0fkydR9Y&AJwlP&JkZC##v zhPYDoXd!M<g=#^rH(rhQnkTvH)?SW9478R|NYF=ful3H$zGk=+$2Irr&8lhwdhj4a z3t+o+1UhTtrTRwQ%M$*r!U*5CUkQ7A+{)f7mlS14tFl{%sV3lNCwe<eQ}h?)2%an! znbOk*rahi2Stm(RuV5u<c99+%8ue%}Rb6AQ)`#YrIm%30C!ZOUG6kSZ3Axw&69TF_ zhF$MB&puvCqe^|9Rje3HhsW0V8C-Yg!(`XcfJE2GeGu_nI!~@$#tPZr40Op!qjWPH zrVwTyc)mA5t;?rzr<BsfLEb;_<DC{>1Q+s>7|`q-bibwvWJ%2-q+aYgZh*ZCA(_`` z*%bO*a^@5eqFZ~E>^@=9K$R^KC{TnX0T%R3Wtz2D!)FwNx6ob<!p+@THm_q|QEBM- zNO5e6g)-0xwfsybUr}_K|EN4A9AWsvKkq58&(wiaeV}MkH|td-`+}Zh0bZh>3*%IY zJp0OE<U2ORR_OuwS|;CWM2_M7)-?KiuR$nNa%2#sr3xYKw6yPpv2(%ObK4@_vWj4H zNe<1FaT2_`WewT~nUM|`7N|MSrip{`AX^ipd#FjbFu6M~vyv>n<(d0lT?g+qZ}@Sj zdRTwyEwz8sMbc`g0-PN~00c~#<jRct>zV&-Z_obKttVB$5UOx0iRN*_`lR<vR^Tr| zx1L8$_$xF2?JCVlG*~=2%xf}it1<|%IxE3p0GCDJ)L{!2Md$B!ZI;ZGeSQ}^Fc*dB z#z-Sq$9IamdWAcCRj&fQ?Fs0;7gtO_CbYcGWTFL0)@>sHUOrR558$0`xjh7ucTjUK zZVhfs`i8D#0=8vC4;d}QR>7H5M^2xNgBn@wZBv8w7PL(Ak8fC6Y&42NifZzR1MLj0 zXKRH+WT(v|#(bN{8v~@<3}kJqh&S&bWN0eld33d$moqo#gXtlEa-RlP!*2ZmY!Yo* z$|db#2`CbMP6|TYyc9pQplxSNtw8OVn{^+((xdB%rD`N`%5<Fh#fss33>aVD!=}`} zU;qNXiUPbz%m|6{j`uxya4T-FR9C=n`Omr<8g7N<W8e<;7cbk$<Z7alq@5pnz&-!h z+YUx7U!mb9nTi$J_opJaE~hmd{I~El4e16BAMurZ$2NS2VeA)WITYBZc9!&J#|kEo zGrVE}$)_RSCPXk^(FGcx3=1JJHCz6Yn|YEjN+9MAN_wz!l3!<bUv<J#F>2X+P1Ay` z2#f&6!H|p^6C@g;9+_TR;4UH*_yBA9GObS7TSK<kbttxX2?m4Y11b*r45jFGO_7=h zA|9~x&pgd#8h}h*&pJnVn&mB<YMTL6F@VD5W9Gmsmd94qOp3h0LW-G|$<fEZC!V!Q zfvMA_#!v$w%sL=|=6S%9+q@`R^f8l-o=^zriptI;Drw|zZ4X;9Ud~jXfZG{&scK}F zD0-t&CAf`<lo^cUi^BA3Se4`)oRa5aW(;0R2C|P+B3EX)+6@s%>Ou7WqyR3EpN3^k zCi#Sk(##}@^eWL_yhT5(m8S;mG{aVs2if=FdGNFEplt7*wpuNK1IQD)kMVP#HyIq4 zL;%e5jO#u%Lr|Rbl?X7>&HUeY&_b}MVDK%!OxR+d7$5KNp-6%hq<%Jd$H8EcECwUJ zX`#G1ngDyE`$$9pO8CntbVkRR#EgG!U5}PtFV2-^i#=hd6ER%_Ci)4*C?5Qp*;?x5 zAU8B8*();XW6}iUXQ?Zh-)l*fFm#<t@3d5;VZ{e+Y6dQ^0SAy#$t|%B6<j+L;B9G$ z0T-)bct7<jj1dej;sypAZ{LcL5U<-@?>;}C?g5=K4HVny5l9j`eURNuiPd&P^efBR zd<YP=pETYwJvp@6$-)3Q+o4TG=>B1KDp=HRZ4Z8lgaAJ-*(0AhQj0PTmS!&1Yhr5K zRB8YeEbfxdgEkdlOKSf|tDRx?6wvsKtWUp{>PRm0(fsxVZY+gOZ?@@CEXY)Ep{l2s znVcgK5cnVrG|=~ExTv&xFUHt@pro7hfPoFEyuKUKvQ&7++Bfcr8E5?>XiAZoOp%j~ z;C2<>S_4foX9bgt*5@XR+V9bGeRNTIZs^A83t)R2dVgLU^pgBAn8)sG8f>i7u=*_1 z)$(z*)p=(hQ~|=ULt<DopY4W$bV<)8qaVJNzTo^0opT|9O&PUl6%}tMDB!Bq3uA%k z7}H1p%k;lx-QuJ6)U8-oAl`2O?&?a_?Z)`P+$RpVevMwE7^XyIDR-pY@ZokSjJw_n zLhw!EL~0+KL_2LTKs9xg-3kAXX3v!vo5*5dh)DxJSHJxOOERX+-vhZV{#1aOi+fGo zmeOPsdd)U-oJ6x%@>y7op63NDJptL1I!}rZrWn{mdz$TzJjE1SpL*tQcphR8<SIQN z*I85a9;c-Q5Z#q=Z2d5<Zr$36-cpNBOl;0x0-1f6Ym=r_%ANts<B#yT+fkFaR2DtJ z3&9@rvMyImFiLW1hs({-i$qM`tQC1Dw4a*dY7Td>j{kZ9F8eeQkeFIZ+`3GiZ(*=B z<pKF~KLen8c$+Lpx_`bdvFCC6Y0QR&mw?$1RQv@iqP!o;)&-asYBH$ShB*EH&*SSb z{ddegmlw(Fw=UE?c^gN}2fr#MSa2)@7|$E+3hP@8q|NZ!K+0s1G1olkS)HSyRvvvF zrxQl8^26R|RT4_%Tr5&W&wR#J6){0G0yJOmz^f%Tnb(!PsxOvxAHDE5!5o##wF1z! z9pG5}p*cFD(nJ|(*eAljPBtZU0<0|o0Tfis4&vU+wz>FJLV`5%xrS;HoepNc!U}q1 zW!!;>@QTcRL7Xx?`p2JC2jJ2A_)WbSuwkd_NpI=T&@f%9mHW3e{8j_0!D)iCQv+G3 zS^-)NayfDpiGy6(Kpmf$ami3C;@sQhwY5Af4Wl{o$Iz{Fb*dAMFs2xK7^E2{Qxw?_ zenAA~9pZrf0JHvR2-m&M$^#)!_;S!9M0-nT*hT>BWB2}cBLXa1FV73L{N(~`6Q{O| z)X290FwRTn;~)S40ZkN_n?GS5U%q0{`JgtDI9F@!PGeI#Xb=f*>PjfH_&wC-%xU|* zS~{dTZb(?n%8U)yd<h`B1+k=1zDp0tSt7tD3;zB<I4G1bP`*l8v6TpX$w}FXu5+Wy z4wFmSbqfcW3`agS;AB9`hRK6lTKRokvdKp;vKvZ+E__IqISLRTIKC$DIFtM*V|S>x zfff)5u`A*Xuk8BSAtXDC?AjOgB5gfHGSwc=W9R_h2%qI`j0MEM#ro~Ct4u{|?+E&< zRFj%eAM@u1H?C?O4z&4`yR;eyQ3a8FwX$|M=@D#b5>u6QXWC6gvsLRVPmCI<wrpq- zL?#y=I)5L-6B7{u!E%$BX9J?SBm1ulA5Y^`?iw0Eq`i_wZVv?Pmd6eKDl~R$$9)dh z*n$B*8*2;7gmRaN1?}tf(FZ7{^UOvZ4C+JKzKR8R3xs4o5vsEK$l@@(R}r=6XQ0Yv z;{d{em2X<^$nW_90fJ`GynU39BJkOhQ;d@);^e%LzU4FNP069YO&Mgi7Y5V3(URAu zc`RW{Y0+K*%^m#wS!f`=4JLJlE%Ro4<vE=*GA0M5=aM>;SOPo6%y09rVN4Y_)fu6e zVv4Zzc=B?3H@0B-E~IM)1F)w8UW#3Y!9G*=Y}-b!G46}nUDBl`UVNyiKxJ@S%S0^d z-sP2+QwD2w93?i=TOmYQGK}fnH|I^!o^$*bUZ@~l=}6XmK6q1zu2M2!*mX*)CiQCd zgCN|vw^MkO_1WSznaU1$P^|8jg0Q9b!9ZOv+b7eyvbqPeHMt0=6te_7>iM!1XrFOv zbek1e++v@|!rn-K`CX5X;X>1Oq4>3yadRuU-oeLx?#M@SbJqcDi*t5MZ8qvB9zU1A zt<i{s1lZb+{4n@6pCI|ysj}`(4KbdXIHw$a9}7eEfe|qRO|7VyX~*6|diz_|jG6Js zs4DIq2r)vd2MvoDSVBEyOE-AJLe;z+)rEv0G3-ED67mimD3uADavQPj#Ei#d<dz;) ztuUBRo`g|+Y7qu4`Fn1h+)cH@X2NxhZipBMV4o)0`E7uq1@~ls{=aMuI@zr>hm@8C z?u+kbQUt+Ob9>MefmO3Nw(U+AhBpKlaS=|!u{@+KZcsfN6D|-?*Cf|bnQy5>q}nFx zuG{KgW=5F8$K$vcJmU^8hV@2ick|38!y=W@uvOCfvX-iJ=nO$*3D)SKo1zbn?+V3% zA<Dhf)N%PTva#|cdSm&;Cp<{f1gNnv(0FMPv|~9VpM*o~*w*Y}WiypA61L%jS^B~u z%PW3EXvgRtfg0+2vXCsopj?hOiZ|~B#kBXo%=?wwwsgVJ07Ki}dcwwyj3H5ujreN$ zwSWKuaZj^`*<5M?qD`~z+>|o*<NtjylYwbOg#ZVQL0s$T5g;F`Hz4ArU^grE&w~~w zU*moQ)|Ez8owkq7VW>a>*qZ$ScY#{f?;9-}o;c`A9OJi9l%v+M@JqS5o?Tq%XBTU5 zdGB<Yp~z@<5Uo_#Vu71Bm^}byGcC5EwF<={<Scw`ud$ga3P7nhI)JQ@Ix@(Y5z6_V zv7LFTS@H(Z_d^Cpxj=!_KidW-UzywkiC@9?7yyjha-oPS`fb=XH9y$-w8frJgLG78 zIEu0kh(h4mk#1jP!yG1#@Gs1Ps<F>8^}pS2`$|`s%t8$?JM?=hh<GaoygIQ2q)A8R zyHr@1;UezVQ0G<yek;!!^2BtFKpc~QJpq~5mgE%+$SCx&0-y6gJvLF)y%;4@N0!7> z6l|o-6~Zk*k*GkFLy~znd<uc#9p8KB+qz@YrSOYTIrWjz_F>r%IM8GOFE%SmT%B90 zrg}4M?}vxiY8q8jB@UQhP8+np+u>hZfC)NdvgK4t(0iuIk^6UEXHjyRKh*=XBg&^> z=!0yXf*r{t{Gp*XCHu_DMwA+oErPXK(>Kh_xZLu<mVDHeU#2b9(91^UmNm>=fYT|B z<apQhq0qKse<H*LCvv%n3hw}*u#dpdwX)vubZ+~r7Xp79H>s={A>;cRx+;te@{<Q$ zNiOeBuQYN!?g2lJ;+BZtsey)dXX*!rMuQ{<B7F58Nx1#6d?#{MupIKo)4u8FUUGL) z-AbjBIyHO|pb7i3?*Tw)9%lm`Sg35Np!^FP3#|ES*SdrrA?+G@tDt_^6Z%M0cka<{ zPl+jGRFuMgAGF$0F}bb`k{!X7*9)+)RVIFa0Hn&YhOK2HYDqE`@PgFtmF%Z-*v>G! zT?W%$VPnrPtxVuOH3(RPTZi}M)A@&dU0w?;B?|xHiMO%u0)BgOcYF7#G8TBY-(mB( zN--7&@Bc1p!HE`rq8WsBCbUpuGUa}xzEott$ZSP4m{>`j@CR@SY6ZYP(=pZ)QtgvM zKhHzx3~e5%k_=Ko!_5F{fh=o^35LelFqo}Ed?$zSgHtnC!8p-j#6m);vis1;omqKD z633B>PNvZCHeI{0YJ_(;TG-GcEsHr>xRGGg;nSbH(afKkCE`o2D*(B1KDTsQ4mzHi z@DIi@Dat;Fi*IR3s4M}XTmS$9Af?vY;M;a^dFkL49ZB6Un3K*&E-J^(9tyM-nx#E_ zE!$r$#@iEy$GySjCmphpu-5;Npu2D4bse9w`xDwKojD%rvqUD?E!dHM=c?a<O8YBv zm(^Q+;>>2N_V(9MOH`&;ix}g1C;l*|TiI^Kco?SpbBak~PCPa`&T^n>z9+DfrcJ2K zYDksvfFTXiW)YD~ea5pHsyZ^oSO#aD8NSs;Cc)?iJp)PEhmE90L4Xmg|Kj{)K|x<u zZpp>Ct&U8|8~1XRafm>W*FzF{GgubmNEpmN!y;MF9`TaQqD*doKDJPBvlBRid~8W^ zhQ`@BdC?3)i-__LdA;JbEr>^klxK;Nu6+*Uq%C~tDW)+oEhLt#Kc9mHgwHtL=xQw- z|4*}V?0O^sIz4$@bWQ7G&MI5=g6|@-x~s+3fW_i&DBHjF59oB=Lq0oFAKEJ7b%*?L zT1QaSqIz2fROxtu!{HYA^|M2MXb}hZWa8Xb$0lTr`?*TE!*AD+SU`AhPI{fw7~M`b zmUPX!HPssaP066DKd*Sv_Y(Occo;4eT}5_$3wkLU&0V<wg4=~!*F98~J;H^nnBY%= zOnbORR&5Impi%oRa+V#D{M;#%;<}4PP`xs%*$;<rBwn*L@mkK`&aLM6tY7~Hxrf{% zXILa$!HdS-QQ^$43{ZIF^Pr{~-?@Ki{!$x7h)8`KJZu@~d|FjP3)!{p+fKDsO4wd@ z&Ssu-(0v!hn9W{g2m<;Hg?ymu-|57ns@YYcxGgd;7)gP88r<dKS9Uqgt!TKtq6nbW zI|ys=RkcFYea&Vo>R%NQ4GkX@SZhqx{)G1i%4a2ujVoy!LQ63&YkuF<w+u4P2Cl6I z<>f@ST1oZ&B7&XcT1Jo*$#v6bChrU=o?4wRk)J`!X3;U;$hEO`OMq(-<;w8H11I|{ zWcc~JQ^jk<!J6Sk1zEEqs!XxK>s5MXl<xh)AI2<qi0_pjrF=FzUJ4IX@Tycp@vLg( zHQHL_gZcTMx6>xv+4ex_(l8{J7G<|Z%H&oCvzd9|rQi+Q)Ncf4NI5EIC;Wu@BxYMl zXr+S(tjBE2ru?(BaOM&i{U<LX1wakF0+afj9jN=?Z6(g=LBmT5^!+oX?R|@{ahDG` zVIq?S@s?E0@E$m?1n$2n^OiLcmYkPn5}}~T$EZK#U;g%&Mw9kc{_dG=Cz0f2Ne5Q` zqYhn~@>kigjOkY<@_uUGM$^K&coPCVzKLN0Jfb8y&?=d0pS$xHy4bJODsKzKaz0Yd z;udi=)X`GyuW#<J4w@jq`x}Zezc1PJsSZzpJ=OO1!DX`?&)8nJ+Q}g8gUbgu>GXq% zY}n&7_;yD=&3=}Ft~Tw&s#aau{g9<Amptv|`2yd2>Q`nDjX{hN0?$#A?u2}4{|TZ6 z-4AmVjIXA#@iCxQokQT|#sLI8RtK9~@Z0ww9S{ob70uHn(>R{pq`zN1+%2b5&P1S1 zA=I(vNTyLIrBA;rfp}-<B`gbDANuT@i*6G#HCJcZ+U*?PBD1`K`=|5pZ213r<!ef3 zGWI252BHfEX!E|Ol^<UtS+_I@tqaVwbx7{AcmZ0kfu{HWb5zP*esB)_)27iHt73KE z+hZ2BFW=HVN9q-FHiS55l#@QZ`E0JDT+ZaF4;eaHGTiVuV_1zKOuhI`9m)(489>Nl zpDTDOig?+8Le4?w`3D<We^pc}2xjc&8q1K@YGAwf9kAM4JkEH>>zM4g{!HghSB){< z)@F{z*c_^g2}@ATtRskRF|3%9XufN*^?xzOAd|r#AHR_+glj&{&B3m^J}-PO#Qnw# zj62FadzwQ@C<vQ%5wU9(LfI?7<H)azEjp8z3(Z?ASzJo98&<oTek1v=q}qQTK4~pi zyc$o5M`^`J54yuY%=OrS^|}JE-*2Y{C`lk*cDPw|{Y+ytEur{j<6|8``jFYZMAZ*B z=$*^7qmdOc{i%LRgdrUpmpd_V?QL;wO@LQ%@*79#2Z!*hyQ%Zd66p*gJp;S`(_&ov z63>?8^5|={j<$3gOPSJ1?#tf&_gP=>_KP`663;&iv=8%5n)vegmQg(W*_ThYhv>%Q zh_OTQns<1@?Ep)lO$V>c3^M*v^RRF`o{~5{5>OMs`P#xDO*-;xH|UpE>Hsw#pE*Pz zB7Fu%*YVEF;YEu~PxGUeG+G1p8E-e)1Vj=9Gf$igT8d+P@EX8ywBt#F`P2t>@yR_c z1sivi`oRSV%U`aJ&fV<Ugken#6-ToCWs|g+p9n35!`D_M{bT5l*sb4~unQ{K@lH%w zSMA8ho4_ao>c}7+t1Xunvx=Q&(924Da9>FOORlfp*rymARs3<UXHdP`>eIcXcEq}@ z4fzIU59Py$#BP9e4$lV3cRJ@PFx((DFU=OZlqJF*{b8ZFZeipxk_>7dX?Evo89LCg z7)yxJl{+Jeiz=A)6Z{NjC~~ebDat;Fi*IR3s2BhM6gi=#G#{1?N5fMDIm-Nzj!ZEj z(HkB;b$yN9ryk1^Y^8hnrO|{!s3NVCAq?#DtXo7+76q3G1hMAvb^x3NXBcLG-ePSw z$$9~L0L$@SE0EQ*iacP@&L0Jv^%^c?zv8kS3u2&I=OSr>_KW0SuDRWQPP?H*>O)qS zy$gZpjA6cnIX8fnqN@wfvB8@94W30Fe?=(ow^9jMg(vbe9FMmHlvf)a0YK!;VeXfs zS!!xBsMZA0etH`;n;|7sf!Zm&7DrVo_*x{KNp}TYjb~LAs&(6$)Ta;<RIb-aTh-Hm zNha<hcnLMLkJaQ%GfgDPr?3VRrKdT!*&9|z<g~fF{i7OX)plSRx8IRO)f5r3)-)d~ zW$!dxIy4qyZqGis7<tsuUKbsFs4$gIxyySDO*#5N-#g%A3Q#WK**i{t&bnY{Ki&PN zU3ywicRX^bRY~(52Vu-?7S?Briflxe^u@gsQC@81($Pr2nFM{6SYn!XBpU?qqfqPe z&}{h$zhjYkzVChMd*1h6$XpuK?)WiP{8f1w0fZToF4Tbc1(?}eOw~x2a7#b8ldBEC zwo?ev$7XKaGfNEG`9HUxZ#&g?XaiMSqBn({RyN;uI(gTtj5COi(-Ei=RlO7bvFyP} zhUD2YK$-McEp>XG4uqdQNJ}ZQ#h_NZ2cp_*ypsf^00MbW1)4?i1{@Mq?TcorZmNlJ zx0+a4@RRm=*oG6h4WS#2RfKF1U$(}(ge;~jOu}hjh?1k14Z3+q5(-JixME^J0-JRp zW>Ev_cDg{>PpoF15Ht!N8IfQ2*XW}Tj6-H?`{^z7LQ$v)Xb60Iw!a0r+{U9Fe&zQ5 zECAusO|H)z(eZl2@orfpStOU<L+={WZdeDI+mw|i`@noD4Mw2S*;T>PD{Qe_K`|&G zD-L|oDaM%crr`MaxGDi5AB2ooW`lfgTi&1ZgOqQhwJ3Re&P{*^J!ZPFhuuc+n5{r@ zy+)ZwdJ45I74299xK~#qhqc&pN@#*39U|YRO=!5sDC_<sz|We(PFLQz7=GXA3GDJW z9X115y%1yQt?uuL^gX&OA7T&_4(tk6t)i?esHS!$Reui^6`lsUtU+*HW@Nsd1m>Xx zW6p$3`Kw%$Y8uW6$EyW+laHg;5X24GA$jefzEd1b8Mem(P3O3Xpe`#|-E1aIz;!}z zRBs_h>wqWDtIQS<Mt`347^X6l$kF#IH~)ID$j$fbtu0RIH_~64I>SKPr3l3p?w4I` zjm-Jvi%VuRAc@nzODVg|`!3>kfCE7WRd!gmJK#$l{3XUI0Jf)|O!+9Q>!^E2!JCln zahiBXfpmmWKto?`&zXPHxs!@f+AE|#F>zc<X`+u960_m3WPfoIW@QFVzm0;mRj=r1 zIp^MspmD4@U?ARs;b|G;{Ta@7yHU1}m=~~~e+Hh($}INsrkaPo;IO!Zo72c0QHVeg zab=8!6DO6%<_=_>tkug9;8{-@q|f-;;vIt5={Ar<MXZZHqhxn3`T+3Lwu|ivv-L+Q zvTTMXu$DKXRLy)6ton2<1OMueSIe)bCn)VLjKuJx+C3;1Kl8)UlGvMGiUyu}RtBb3 zUJ|s$0aNLImxYZhoBbg!nHlP*wgfF^?zaY9n_Su+Yqihc-z@QoG94%NfOjHmN*9Rn zNUPt{AY;_f7YLR^U?bh&<&Xn-<;iY4Mn(xFl_*=~!_zN<r-CLLQ4^<L_@T<%Fe0-X z&0XcPTZm$3e{JgPZZB@0!pQXs3WxR<;o)V!is;1WInkt{M7mE)x~zr>$y>pNI9g~s z?}!c8{ChfwOiXC2<2tQ09|qt=IPM%|)aCH|s!MuGI7nkmZF7!BD@mFvcK*ybXwijb z_TRib4?QAQC86BX>(*kl;<f~T3v(9a$!oMn=NJjfGhEy_AY~55%pab;t~^Huj$eOd zC|%K6x0ESpzfxwZ$jbIyH7M8|Kg8EH>!mfya%YjkIYy0@Gij%c6R$?aQ_ppDRKj1h z8^RePHRm*x*xenZ$|xRpy?~De6U1N&D(-lH7{#SBFb1_x;mOKFT2VD4hX20Kz>!3r zIG-R*dq7(w)_2aL$(mjWqouvtZy8=<(BB|$LGCz*nP1qvp(qTb>1*w5r~t3(Rq_<y zYxIq2+k8*GfEpYQ)sJnB54l8FR;25u8#C>6&Fv<c&?_6QOmtv(xm_(UUOUo&K!$iB zj?<BMTp12VtTUSg?A0*m{MZ;<!iUJQj@Z%`lSUx@HY7$SOIQVlKB~)^P9(v)f9YC# z+7!5#`iUc~wV1}L;9*K`pTgjp_cZYbN|M}*9aGmyG;K0KhQ}C+J!}mJ$pzGoyVYqj z(8weD9H!~1a{QO;rd)tKFJy*vn)3*${)YO)rOSSV=(9L$gN3W|e$_j%exIlLt^3s6 z|AqU+C%<**q9P#G*E8L_Y~oB0ydch|)NJTp0QvKo>XH8@$W+T`6NRDu0UNlq&B0SV z)r=z#5SDU@W5c^M4)9{O8tkv)7B@<b9e0llYG(`w*=gbV@F9JaW+Zl{VzHN5;REyJ zhNA=p2ui-2yf|?YZJ9eZB!|Evp&Uc$n!zlC3@1FD;*oLpSdGN}NShjqW1bAqfw=$D z{E4tO&g*nE#(_$?#Bvw$;f)=q|J$HEyJ7%y2!icv;nwij$``d9hy$l4N-&uXcq)a$ zjCss|-0VP#5va9#mIyhtqSoToI@Ojl04}g_#Lp+?5H|!^E&OXqpn;-M2JM>TDp3-X zDN&IQKL_!Snb$ZL@vjm3yBwWBd1u4zV#pl?Ciy+1=UQksGEox&eWOgXwwoS##}5Ow z88O;j1y;5~;>g!ppt(l8aOQ}7Q7mO+e5s=TdwN}3VN1k(amjEaKLfRsZu3h{RzJFt zQR8MpYpVVG-{8i@S+f*Z*7itSZ@?w`;|xVLAKzsFo?T*UZo?;J|BP00;VY%j{5_uC z!jU;>yK|oFb*bu_Si(J7!9|9+?f2+Ad0CK&tGQC+**wWDKU6WCvkFI=4cIf=leRa6 zC&?|TkzR1yH$Kfk5X6>Ti(#ns2>&HqE<fqG7hef*#(wGd71GY19&ZnZGB^Dl670@E z3H8oU*)wz&(0eHVbiFgpfF*Z{^0;uj4J>?k6G&Nb+;+r;j8?;KA^Z&_L-z5l3=1cQ zyeTNGRjf9|(#w2gQGLBs6g0j`4hP%vH(^OQOvdJU#XcsB;-tfa_NVN~G>u88{z$vW zv-Vmw-izc?jya?TV!t2kkK2+8VpSb$e^jz2nx}G8zQVUOG&+JOhG_rWQTUI8v=$JL z2E||+ng30}suVg};EeESSxk;H`!q{C_8A3^;t~>VTbDl|&Ui!Re%b{2QDI6RwJq%O z2~{vD_6QnR8AL5eHyd?y#n5B7Xzvv&ed~yZF8~bezbaJK?VW13#^@6f(mpHIiVwCa zjub+0`&s(o9c|ls_|o-1P)nDYVz4R-k9R!Z0<lmUoX7>ETup87X<$~#81af%=FoJx zBgb}-C}5mQSw0FEB)WtHsJ?N;e*?F0u9c$DVye8zh$zqL3n{nP{*MQ;f9`Nd0?-z6 z&4auzH|<LYPo9jcu4s)YsnvaIDR>QHd<}yKw`n}sB2$s4@wsZUUmYPKlo?)ia+_Wn z)orpG|MORVc*0(-Jpp4+{GSd>!QCpK=m+scs6q`47*QWYJyX$iKSX{Z8^!%qKmJKa z%egwZNA0l<tA$z)^<*_3=+m{}N?Zaqaz4NK;LQl4Oj?=wMc;ddvda#7**rZiy(s|K z-noc_=DG8_30rsUztm|O0U1Usf)$B{+HsqTNpB3iyAzpgnh1t%XibFNOCJR4Tqh8x zbY!CV`#X7o^$PO}CtET`h+fEVvJm@PD_2L;>@mu(mPBqX+8G58{XKCUer>%H!PLc7 z|0MlShNB3>O)u_On$s^R0X$#Bvjd0KvMo^V;UP=2?y7)UMGNngL+OxV17?vgaK*qQ zB~fmif-4=9mBx5#o*-Rdg^3N5&D*|5<=FbASfqoAXBR=+=`|syZ*C<OGm;ZLX#%Q{ z`3V6TauXlmjP?e~S{AgW&-H^bw)|Y`afdl4qpJ=j+PO-a3T-e6hmN*2kKon*TAyc} z;P1M)u;+S?yTuNXa&LjL|5+jyTX$6(ejS;e(&YmZ8b9wG=<p<Y$*l8SNi0lD;feTM z9*F+ZoAOZt4v~RpmP772LX27l%9p>sXrxZ9Gjbcep1w)O#MrY$VQ*iHdb2F~Tg*UK z!ftTnYsbM47K*I<eRM>A%UDqmwwQ8Bf39TI`>IqFH#gU_C6e>UZubau@TinAO~jCT zO-RC%DOf}>VwDQNkm-GS0q*QS{DQ3V!e-ahInN*_&_%idVGgv`ldjFRPZ|H{w?r{n zQ_PSCHyf2TZwTx%z?qrux{4bg84wZP^&k|B=l?hqW|^PZ$^@HBm7hpMT)YsfSsv#^ zx&bq*s+|bmcx?l^bVKCja4zKZmaFwSoi(XfNlCA{9z<x7Oz~TOKl}7}L7BaI7od8@ zJJBxD@49i%G3=r}Z(y9E{)bqqy8dtE4)^~KG)scK@_5FG;r<RMv0CnkWvz!>;N6ZM ze5qMqb4guvXjdUmrkFrkGDav6f(lOkJtbbdZk3L1JtG_ri})N)z)D2EEVSxQTrV|j ztz~Y+9_-!_Z$>uSY^9YZp1v7NG!Vd~4Fc=C>Q~?Jxt5@xm;eATp8O~5Xg0{wQtNGS zZM!%;^zaIfr0$k5`c}pc4O%^*2rx~2lr-EYIOvZy;h7P*>05zq#`_koe=4}jv$x-a z`?8F2m0^2&a%!G`f<&8m-~<+frDyLFZ#1Gs#S_9iw`ivMF@d(x#d6YmnYz()I70={ zaGYW*hI<9y>$6uls|vNi!d1LFuh1lM3Qi%hA8t`+8^ln&;!bf<(4!ZirDO<+O9}BE zUU9;K(h+Z?yo3+>9zACq>I?`&Q^458Z$5$hxuEX^mNO|CB`r%Jp31}q-yR!UCFBE3 zp#22o$-yxn>JA6PPAZT<)-hTDJf}1Yza*F<RWuNd#0|~sP=e?*a<}%+h?XSanwZGi z<(eT3rxn*KVxouPa0S_$-r<{gY+53kIUO<Jk@T{pBWr?hW>qKbo!|vwyva0=A19oj zk7yl<4a>4LD=q{A%hny^hYct{TY?TjB`NgpGFcE%3RZp^T!Jsqm7t(tW9}Ssp?e#Y zwn(aVb^Hb<|5KeE$}2k34<9s^i%nO#tz_B`7tfX(mS{GBm@w`($`7tATy}6_;gzMb zi-qc~upt>fB{*!Pt1I~Fs!_T0k&*PYw{p|hbmBt3u&GLi)7+dYRLVSEW(BDrx88cu zRk^OaBCnXI2OeeAvM;oTPIr4|g>GL6W$LFsrxuj=E$}EecQltnxS5xXq9ehyW$PTN zgsKfTl?x-_k+QT@u!q}gVQAl+aa0d7{Co<TO0(eS$PE@axK0ZY?_(;WX+1jad^NAR z`;<_e?n8O(wE;4c!{v0zpWR-HqWEq^#?+!l|Epbpa7Fw{W?na!LcFL=m_kBJ0000j zCEbinu?$6<w13zRErEq%uM;88SLB-#D}#AM8=86AZ5mT!smRFX;5uRU3gJ@(`mZvs z>Mz!QO=c&of?5U8&<?}42w1rEzTN?La%lO1D(r%-M^}`vWM*qK*^<V;f9$KvO-0#y z;8l3JIw-&e?1yX~uXCx`P3;IRoqSkRtg%VcOol!G-Hm_FdafPH?i{%sg!dXWZF12< zWrDK8pM9CJFHsMu(6{&)MlU&{iJ_BAzZLX{O4}08c|RUeoR#eNNRRwab&ph9ac#kT zBsp$KSz{@Z2%)T1QPt@HVNH$7TGaZ1^Ac7j|5KeE$}2k2(*{4|O=-0u2qeny1<f&9 z$g^2C_x_8pIcDajf*|Gs@Pxlw{wkZaOz(l<{|A{f*#%=k|2<VWOTuyXJDu~Ptkg$n zsNnh<;LrvkThWe4m@Yz|%YQ1tmq%`Yl9oQA?<*syo8NxLx;3wS@wwI3$P2X3<YPI( z6|=;nV|WFvc#TgdGAXIit8X&58BUV@nqXTNKhz64l8RS!Tz$x~!jPi<hz;6rT5D#` z&htifnqv{Z7-VtbQmYZvJ}z5i#Kcm`V)!?sy;;sgLyxn#ullRdrftoKqG>70@=k5t z3G#3Rl#=g05iHt95&O8Voefwu9G}!++#q{4PB12?83i{E=mF*t*Oee9fx37U?5U!q z_)R(oh)jh!Mm78#7owSb)78(c_8g>b0j#u)V*^`lSg=NfT#n~bU)VG6^|GiDxgRZX zxzypDNDsIDZ*p&m^KXV6^G%fId;&D(d{%GceB-(o0JzGM>LlGoV~Um-B7Zp|+;U~8 zk-ilB!DkTc=cu<(ils<{(|mHS1<u49VE9XrU6(wkDkc+CUP2lqpPF&cFcNSrPJJCa z2lvEXh&GmMPyhf9$ESc)btiPbVoy07xT_ypU?IHU`TAhRM_8+@!8$u@^^Z+nOakbJ zjUofMo%_lcm#*=(p1=mf>e@vljWv-7qkUGek#F9>dJZ{95R*|i>un@|FA-<-3JS*O zE<q!PiNk|I_QeL`d=#Aq1>D@^82PC+*jhjZ7RoH&F>%W>)F>^R)r$LsDR?Pa4)ty( zl-1`1_YD|Z+z=hJPT9i!M{;xROA`fU##MPJK&{n%cCVD(&-FKIN0%H_<k9&Xy=~|A z{Gvb_n&sIkys}3YLtz9*E@kJ#1f^f4vFWle;qHHvWbYFV@h;1@;~%lphG(~t&nQE0 z=Iyi6)cv%-x%Xju8}1eSDfTh0`m^!nTfsc7yF^>uI|<8YID^i(UyM3Y{Rqa-0i464 zuM$|0s=UP<x8*W@>-SZqb1juxxhJbiaYemj@^5q|9f;s7DnUjvOS!0QtY0FO=ug(p zY)rp3*KhOI<YuNVh2zGM+{RhRcIKgFJuZPkBwpfUJMS_bJmK~VbCqkcDvDqx><DQ_ zM{{$9W}p;pMRI-|ZAuw!b2s4AYwWjVbPFv0{;{b3J;CG3W-&xV8Lq0AJ4V3)<J};v zuWv510h6b9?Mk=@`SabO7Q4iW@h^#nKxMu<*$mgPLPrJIN$d56r{K&zv=LEp{Y}zD ztbmF+lfNMsB)8J#NdJipE~^)X;&W<Ur{pk`ZuVXM08&;$We(1S;TfeH?d38Eg~qpT z@R>@Dom8MYv1C353cRVm<eHko{Zy$Z@#cS~|DFu>ri1I=PUHvs#TYhm6ND|w^=0at zm4`Kq^A-thY_CXcR!V~+nfYWx6E%R(ZeWht@Jr1~xpPR5Pc2UOQQ|?iZi^e`F=p{H zPoh6I7lfab?U12hzfz?lb-PC^sa20+0I=*X0Lzq|Gsj!#O|gamscJ!j{-<u$q7p(w z))Sd#800o;I(XXA<zdwlA-m71Z+@YK)eEz|w9b~zOMJ7wgKjx(c(!f1CkSV67yHp9 z$C7jCli}mPmzv1=F&aAr+OUi!4DxFgK^A|LkS2^bhbdCFBD8Eq<GaqD*6llf*wg^3 z1y**V9I+gw8m0&O^T)-gsy@S2tV|~yt%D*A>4ArWG2H}yG7O$d$pt&P4;7gTO62h0 z)Y|g*&g%M>Jjnz37_UwI=Czn%K;Jb?5yyJGyJGuOyR5dcZrGZ#D?}(XFkwV<*~g-) z3p_Bop(*VkA2N-_8{lfYBVEpqEvIk;UkZ!ttxMaiGL>3{BuWl>HrC}o?_?DQRMbG2 zBPpJM6Q7j9{nch+>ao&9ZVs+KeqUcTPKAn~?%uu5?4XE?8qZdW11fmZ)<3Q5`aL@g z7Zi7gUa(+84<)+mGy%Cq+2Cz{ApCs=N_<$NW)2Zb=-eJ3?;qF}+pa7P4_8$@YOU6x z(sl{x!g|i!cw?NAQ!ZOEyC<0abKcG^;?1$b)GlO7OteE>_Q!Fv$*;tkM?<n7(0zm> z%R+io6}1<p6Q5giTiwVNVFKe=gDSU`6>?IPW8^6m9yO9#N!%*X>;WQP75_Go(Z66& zE2;);Z?N$_wV7&sz)zObpd`XDpucJ{BXH`;83MEeN66oZao`oP-A_G)>@hNrVyVlC z%3!oo{FOL5r&9_MPTqQ47kZz#3ZR$mP_gXbnjJnN*COBqhNbR-iU`dZ@++?W3ja@W zBn*45twmoGZ8-kFpnV#+Jfcry6r2-v&5E9Hq}y*;{{-N{$}!G51qT(Jy7+dk;f+7a zWJu^v-(rp$2#=T3j*TPc-AOb?q{ZWc@l49AI97)J9im0nVSIzmS!zr2xnZ_BCfl!b z&K~~_*Nq8XL30?Klw!7<CgibbnkbR4D;6Q049{HCMwHK;6IeHizR<2)@?|^AU*MIy z+iMy?ls6~x{OKl6^3I<jqB>1|fB>rt$77{noY$^=>ab`i<Y7<<=@f@KcRbO9=AE9F z@Rdbv=uat^;9{HY&M75{IPlo(Im&^i_@2T_nKq*_sUlas&MU4+Mf~6Hj>_Vf-t|^& zOd_d0RDi?T)Cwfuc1{XFb<*qv%F(7fy4n_#oClr}F~}*9gcdRX;@_|imR&_A&bW2h zzm@L_WQdYEmw-If-M%G}{P*pB8&!<O_b_!(loa@?hX+{QEDe~&Zkeqva%53ntf*yn z`}JYh01i%g2b4VPNwk*d)&r}EI5Gil#ff|LXstcaq{Yi$yPoIVQuo)9AxB!CT+p=o z#ICgYVOYC?iM`r72LhfAIGyipaMUm$n;dxfU@~Of*`EYgO#&;)J341w9hQp}1+gyd z76_8Q;q+q$WTXB=P8p#DuhqIK?^GAa2n4i6R=@r=G(*|>>nGbhmZ*ec_BJ8>2s~7X zQXOTbn2tca?KZfaZI{egmT>Ux2mQAI^R*a?y_D@|?I-XFS`8@Dh)Ie6^I(r+nB@sq zqokdT-?MMJcW_ZWhB&N4S;+H#>`lE&E3g981Zt2dT1%%3mJ_^_#j=^Rd<$pmE?WG* zyK633c-WlwNC%3f<G608`O_!cx>kW2C<w^1P7;UF>z|!#Z0pJ6?=r9%qf&cH)2{J< zx;*yH0bmeQ*PMVisNpUT(o1{Hj>s&FUfR44Gt-Oru74K(TW0pOvMm=juQUUY9EwcC z`;Uz@WmIJT#i9RHEQywHeY@pN>#*t6?43SS_u2KmT2fye-oI1U>-RJyTH_*W`eT_L z_7=+cv!E{6YIXDU#U}b@UfNUUByB|~cV8p84XKbQg4hE|OL8e>Hq2**pgL7bx{cX9 z+V`_p;GN?SRd~DJ+!3j?F=(AGJh0V&L21UIl0$9h%=)T{ki&^{u<0-|P*%##c^n*5 z^kN>Cvb3OU9azLBIv1mh!(9H1JcbcxQq>oq1j;22GZDZo5<GnnX1}@Rv>kJ|V78nk z)*SYo9!G=8nnkUN$Q3uN#4t>jdO|5oxZ{}`G*LW=r75qK!rf7bZOd6bYdMU-WQW$& z7%YZS1lF?$R%xhkiZx5=oqGrzF_nTP7E-h7<nK2&YD4_sFcxJ9AU2Jd&o!kqnTU5h zHG^8V^~G)^?{<X5;gYkRT}rQ{<}e#4^;~IDoP&G&HLLJp_pPlj&mt@}Q8r@yM6>;? zS<nT7g<wCz#6P6Wvy(9iQ_vS;)fOZQ@@)wA`kK_*D_ZHX7m3PyPmL1Ak{QdtT4?y& zL$)1_PGH?G<qgcs-lSIr<$2}h(yH0h&{y8Cq~O!NQ96u8@kR@NIkS9IhqDQzE>gBO zA~E7Lfup0iIDDib&ACv@gqRSJ+bSwXVg4=AcpYQ4+PLW%bT0~hul$O!A<o)ibrK%{ zNiHe#&Ng{jHz%=i-ZAwR1PNrrH<Kw|wODFR!?05EEgW+-_4%aTl6q1U%*PQ<jxGHd zy}Ch9P!=sHlilX9;~(z=BhAA`R9uxumOCX)N>UWLm0boqNaRe9_KO55o71px`#ilV zwsHlaMaBm6a3;@Hf7KS~51PBkVXvKi?+xS;YWxu%MON>L#UW2?UsI{i62$|kBe95c zz!f~pU`pvX8NbJOTf|*$<$BJLX2NJ>$0LU9!1o-Z3@F#iElEOjw+BJha&|mqDxm6e zs2(72lEC$CSio7EK17vS6<26G@fU%IDf*b4&C!{%Pxj@`I9Ca?>+q3^nG=9PQ%ps~ zKxiUotf+{}sBNHB6&iq^AMX8uf9lc=$jT(?sGXq!8{r-7)uE{<s2FP&*g)4#;_L?w z4=Pl_pC*Y@ki_F|TEVCDt=rr705mIw_G&uB?d>Jx)F2^x55Y<2$;_%JnCPUyweoYU zT!_c69WR$VdR=0qqUGKG_3%vvN1Of|DTz)_58Mid;!hUHDy-cS{2T%RC!V=*RNG`| z?ur3ww<EyV{>_iDXqjPZEIZ=sHjDC;1=<!|ii=Kiu=ziZun(@?g!O2|_$ZlsdQ(^q z<`G9X6r9%J?R!mk*at$olgbWOc|inViBrTOd9<a0a(mWVF~wfqGwM{jf<)t>rZHc# z==~p`s7I}UEPx<XZ{$yO=Uz2*uutAY2(QJ&wL9tp7?%V4R#bZUlY_FXv}tAb$<gnM zt<OAWobD2u1=YglB*??XMx)ZE#0H(`CgAz}pZ`>PzR{=(x_C+qy^~QXfH?`vhpvyO zA4b{R5ok45J%<SG$zAU4Y(BKJR(?oha5>_FN#!s4vVr~zhGZt#UTs9CvM9l~BK=^A zze6aA`=rTwb@p2ccijg-ivcERwz+P}Y0=a^8WbsmFRf_?a`~s#Ni2u#dCM?Dd}aLP z6%Z-%X0tYscFEp&_Ou6o@S8<%d}aF6UAo}*yYdc#caURe14qUlzeCSGlxqTL7}0JI zSK1rhr6kDmcBgl#&6eKSDd$zf_&$={rbkE&2bDnVS{U`EnIxo(QOpoUC32)1CKFRi zTrx{YN))#YB(H;Ca>j_}1J|X7uOeZd6k~*)Q;aTMz@^`|&C|AR+qP}nHc#8OZQHiZ z)3*74GdGh=GMVeTt5mX6d#&|67h=^~Ac6CLl_Qa)(Cci&KA-xJ#|uCPU0(hEx^5zC z01tZ6t)@$N`!E_2i6yRh4-~&8yJf35e6|ey>>6JL#e~+C6$@PoZ+_<R1WTW7Zqg>( zw2jXlQUmKtp7_5CVZw;^qf)Ml4Vu*xby|`a!ua392E2>U{HT_z179o4c3Rd`Z2HL@ z!LhmpNS1%l_ICY;op^sCNBPUvWn0W)Ve(J3kr8{Kn1<MyII|EK%PP6@dmw`aNTr$j z3Vm`Z?`K$hx#ZNzzVReESepzX2b(lGOrT4~eP4%0+i>2O9>CSX*%DtwDZsENHOzd5 z1aX9(pP3$ddT_3#K)Eu>uzjC3yR)3{+3>9mJmnIyNSyJjQA>ayqjgp1cV1z{Bvjig zL}de#>QtWw{9YA<3vl=tCGQ^D?-HQn{f|Wo)G#@#MdDt-2AZ*z^_a(jrhtikG*w0> zyFz%6g+&JK(<lyxYyNLSSHQ%FX=yE!`FD)24Cy~_+p!MmcgKgonA{uZ+gndP06^7) zDzRm<=io;-PKI;mGtVN~>bsQ~W`LPEdkdUJt9>PU4{Fx&9YK%LtAi0@xPXoIM&#`8 z@M#YxB#A?d2<!zgmXA1x-yat8mM|!prtLk3l$qy&9!`D8v!B_4eSPa(UY4t*T5Rja zw5A8$f|F^ztm(Q1_(Gb{MticN0ZwVmB9KzJ5$NRh`V&4P-4ojIr6{eef#R1Ud?I8M zy#1S;tC5ovv6|SZ_3)ZTtmpS7iQas4f$uoy>ItBJs?=yVbDZjc*1^~N>i(2X9r;7X zw2!j~AP@;3MO(my6POU8leeNR5iEUexv-$Sg%x!c037WdHa$jYy>%ZJmDGl%p7s3L z_gOh#fvZx4)YTWkk-}y6fy)s*M`bn;j2VCHwsh5E^VUi%x5eDC#M9#sm3BzCZ?x;s z?{j5Z^STa_ROW@)DNh~-O)<(L6m`#^E)&IcmkiA)pUG>c(fqu=G}$jPLu24h?Yy0( zho9phs?2I_5j?_*@ktj%Bx1Iz+#mH9M3~_O3T;e&6vyJBIX%30k75Ool#?{wGj#Q~ zL9x%648wS($0LAgOw7+-$1*Kv_ZKVi|4W_^p?tTDXPJH$-Q_jXDlj-&<c5*-UP=r) z1wxc^FqWenlUlK}?c=&CulTgMb_oTi{RtF~#syg**|v%_as)~G!X*iJI7e1vdZ}9` z1|V!#IJc11-~arOM~AK0p&EScN@_|6YjBuA)&2hI<3B?k&`0yR(Ej0eLhh*z|K-SY zsS3>1S)r<f+*KKFmWc2g$BoQ|F;d|Xi1Nsm9lb9J)-qV7GsyL;VIFMOs&9MYjoRRu z?w<3gCM{&QKk%uQk9!<hNh6m4sKJu_HY#vtLB45~63WY-)Sg*=hMMQOO;i{mb+COR zG;j>C=9jH<bknf^PD5Fp-xT#h?2ktJPfid7n1LnP3~>m@rSh6A@e$oHLN-0NAOlWb zoVp=|PZGkC*$QQd%1E|H>zhF4|K{SZ5-S+Q8CdwtH5c;S^wpMC_l~hG_}W0^Wej43 zu=(JKMyl%Co@V6W!d_<q<8|r(yHPOVOU}cBi%3SY3*!R2g;tuTR9$4`%_|h8i`kH< zP8A&(3leKA@Z+dTjzeu3K2W7oNz)jpM^!%+oWmy$<{TOl<`R%F>>X3|wyQ3~FI2r9 zHYhXH3kq^S7`i=ukeXUeYN7ov&^;0p-mfb<(nHWraR-N-w+-XPpoLHmm`T?OH`+<f zWT;?*D|f@{(AyN){so7Fu!-#LXk>I$&rp%G47AxBrW9{SM{tM)5;R~MNuybG{8L&v zJLu&^Rwdkp-u9-;mXse+WQ}^}bSAf@?Vk9IhNmkk>ywd{xHR3cX-9Buq$-@)78*B* zFkAYZMCKd1%v>kkz^kJF0GMH4^03%C#;uA-TtKps&DrCEF1tV>HsAFCzK^gMOgoaL zi{MZ<N`xHAz@H(2SkP-Uiaoul#t8vxM?ND%R`h3*Y*xlZubu5C_!~;|*N#F@Z9bFw zMzU9{$o-(4ZA@v4f?H~Bx1rY_2n+}4*I=4{P9B7OL;yG<n8nOPk9Ifi-Pr<O`&MG4 zA+6X~e=$+Ck`xvCt>@>PC@{?>@gM|!V-tXAwC-Zm#`=SRH0p+wqW2vn>mw_+M8XFt z<rZ6p+r|)Blbb*v2VrFY%((za@3o_WtVRCW{w6Rk^TGLV^0kK2ge^rJ@qfi1>A7sl zyUL<Tn-)}WBhQVMzjv+j70xt_rSt^QCT;ToY^=v_zn3z}9e2LV&da@CEM|;1`ASn| z1#u*!*bLy+fbzv@KDU8;P}A8^)K8vxa%~u%OArA75UBjK!5%V+Py6WSQY^d0BWOg) zgTIZA<VN>?;J@k(865aG<2IZR0c9s5aXUzo9|bJ$K`l4_wFu&5Y;_|tnR~Qgn32w3 z{&Rogw3Q1o|AE?daQJ7l0{~O>5mqWVjQ8TZK+b)cyq$o&bw2FhBX?&r;;5(|f>`va z0lV;cXO2T7Eu4c#nYY!>>H8#Ro(&_l3Ls)=%=*u20J(?Vl^75HoE>bppb|iEHwTZ2 zysBESyo-mj&P)YBaWuo(n8Dk5-<?n~h}oR;!$P&Y%Dsw3!6SPNTWsTK1kIQ#B2WB7 zFnzZFV0u>V^C5fSm(_@#b6x7vGN8@ZAVweePvZ4uPdG2m@#k)GnDdku?unEjJ64@$ zt7Y?H3&a5)En{YGUO8kI;7Y%d4u+%Ba>tHGCD++`*>a1qj$zo;!e+(MZAgwx0UecU zUswqBOvuJEP+xNkssHm}Y1`MA#R32#j!R(}a|Lkd`d_a!aUmG1KRF(SO3n*TU4ioS zOk{d)7;zm}US{G<h#mH?UntrXB1U1G%h36y^95-ZiBuAkLlhIEHH|#O3^&bmvgCZY z-?~*MGK(}xzLj&Fgo%5ty3I1apb5f9N^&b*pR6W$6;=DmXN#g5jxgb7I=Z;BanJjM z==A`;`q}#~L!&a}jfof>DzdPZ6r(>8i&kYA<bQ@QK<ix_;jp&$p{>btsG&EnjbpvK z)nP+HlvP_{LQ=BOpuzc7_J+`4DyAJRKMj^_DTa+e|J6a|c`Qt*(P9h2B~V+QHZsfN z;}LQ=1bJe+sXuiu#omh;IVe<Wc_U`)L-Stkcf7Dqw-p-T*1fF`^m7o7IrBkZFV?|4 zF}ct{$ON=^zJHvV7C$BVkCBzq=h%J|=Msz+hmTdv77o@gdlN25>@5p{#ge4`LhEqS z?wYdfQurw!HRKHb<MZs9bT-Vxv@@@QxPTY2gQ&>^J8vP2Pn0$3uf)6PCI>ni<{<N- z0CmA5M(s2V=<bpJ_8r_6{g=r4cq5RQvu^%%R_u`<mu;Gho!T5;&Mc%tsC;fk_QQL= zHvPNqYMSUV3nq|hhT}yRJeXakR64n2(nzs=N+p6uGH1DV&}c>~-1{l}f(Q9WWFzKX zk!#2}4G0l<vLr4S-as=uIJmffG4mzAXl`0rtI!2T)YeNt)?ctL1ApL_$Gh&O#k>1< zo6kYfD4v@-Mn7Irpv^~ZSY5Xg%RD|p@8>1rmz#Rv{DR%xP6GxeM=7Ams$hn@^?Y+0 zZ@vOM1qqui1Y-ZlZyDrD>D?2Iq<tw0H+7qh3cs<e%otWcN?rb`Fff&XR4rb~)^Bm8 zHL=V^ImE5kje*+l?vj6pbKOyDpU79sFHzvan@qN&D^W7O!SRs@YqbPNmoW+wddVs> z8b5yBI#;?ITY*SlP27z*{MdNFCf;S`rQzHQIJ+<MP$Af3jx_??n5(H;-*7CG8_vL$ z842vY<)5ogoL0xX%GJsp=qMpLYlO-Yf;bQspJy19fQ#-kzr9c1>9hy4mPsFGjMS=0 zQ?h48&%#L&JPmg&z9o7&Dq75}PEhjyjt<KwaX4E_{=gYSs>B~HMAfasg*Ug*4e8cR zu*B4u`Zj$3c6MhX{Rc)s%t_0)%|H8Dw7Ah~D?%OU$@zw+<zNzOzi!+_%1j{(d{FeR zO<$Kf^wUW}6(e?URVQWR=j&+6@iICMVn02rdio6eeivL`JhAX?ca1(qan!ld9RUfd zywmt?&^r%F!Rs6<p~p&_!O*}!a@FwIPfS9ID`3nX%22L5@|DOk&oR3{o*$;==kCvN zm=lGnwY9N!vr))c>|TIhAcmymi4k3In3SZ__Kl_w0RH#%&mlu(+Ky2xMw`THmH6nt zAeRZXE)po{z4+M<YNV&cNx>aIfW)19vd~wbNZv-;^XQ6>7t@GbN7())%1n&7bpX5f z@Cc{rcZ5|sp4O&`MdI0jxGCj0;1>d<`KG?&&Ul)4#V<Oo_e0S#p+v;(FN252ucc&z z>YhES5&n9~NLf{z#jx_wJoQKkf4`4Kjn7FE1^bNx-(5ok3Xr6s1BL&8|GS0^K~@xe zMJ_3IFzIn{CJ15MHkl0*c}P*q#l07WXWv-*Ic_Dswh>^#ehFYdS#>h5?6_n`@zHak zPPU!@WKPS0c10?#>*mGBZc}2KVj?+(|Iob~tSz8<uXGi|)uvN4%L*#6axk@_6E_Lk zx=kiWCk18XUIOXPW?vpoEy|PZ4uY0g#h3~smDYwymcIJm9haRCvd<tC<L(I*BQdu> zl#YRRMj$$%9I2ckOoh*o%H8iwcI-P4`pqLRG%t|90YfTo&An$;f{-xqLYMNyeXg*s z>smy)!PeY;Y1p=Q8ZOVkQ7<c<1NZ&?`^mX|(YFWsrxtHXvN$@}@;FVf04W=@>)Vj` zNmJDAk)iW#Nzt`#7^(%{`lRck?W=Qmc_*;?4G4aO`I6{aS?RN+pOmH-uxbBq{HR8W zpgM_nLSTP)A6tHwDaJGjLI5c8+=9JT9PckJ!sBT<>9&#R9}OW6l<@A-^+Rm@Je|$i z0nq^I{%vcJ>Rj|w;NxwtMo$$~QbOf2!J-)?ifEf>0i3(BU3Q|T`R~6z4aa>^#vt=i z|CHoyN1Y;(g%fm`Qj+d5J-AMarK2%C|Ew?#-Vf~J%s7}<hOCfu*?hK4zTsLOr+oa0 zQ+*9<fvttTWjGEjW^3Em<mVul_<gZ)bsXolmWvnx$)g_a_^Ng>ww%igf7OgJqt@Zq z$MAT}jUu4aMAeP69a15#ya-Rng~6mX>xr46<#%pYk1nFjdZJY9uuFn$Iw>|VkzkRe zV3+!6`8qGSA>>^Ey=kuZCB`Org@~!LNeYCmu<&ZGOkZsr@Q6*OQ<vb+!21GIZ@bk! zi7HFBcVnTFugz+9ky0FoC>Of-s@iO??}$7DXQq$vl-fVB4$k3#px*+^AegO?t9l@B z<NVv}2Mj^@j|o&o=AvXiE~U<ii5tO0pa{>y#0bf0v!JUH-L!z=4=wH<{n6?Dzr{Sj z%lw;(PU#T$Y|oTe!vK}y9}AF4WF4}V1xMAldN00^xzFxc5<}@S+BF@E^6X8ux!8GZ z0yaNy8zcp6*zNGrOYJj!$>~?*h1AdGgQ@eK<YLlr820)z>gwuLrpHzDYTf#n0k_PE zH^)l~%_9a-koj#|_O<sLw}AI|Bm*@F!32WP!jqK9a^&@ztdJJI4ZN}4l<7DZCh}!F zo<l6IhR}Zx?Vm)aMT~riFsab9hc|+X3N4^Y6X-G<lLU!;Suc+~YVporsIC(Mxj_r* zBsR$ACoIDSo49Sa9RAV<C9jTTp<#dla|hKMY-4oEPnd-M&ts?0Gnxx+zr456mj*7S zIlnM5?<@OQiywzXMTnbS%C~UfzlEAAlURgl-Tb(|bq3!M4vn(;6Jvgtb^E_H9i{<8 zETu-@si}s)=&Ur~PY&Mo#H!fzkk0j31Ev~|(MpC6IqmyR=bh;!@jO{;scd%5gdN2R zLM>njH@b*G;cV4AMJimHW>cYn86thOBt)Md8Q_TAoHHpse&_>6GWrZ>9#^yUFg@p# zdtUxZs4bPu#>JoT2Y%c@x*DfSs#X?Uv!77G#ppY-P<_>|Q7Y14-=~&ZTW?Iq`sC-W zF(ZsOQnFgcg81&D7TOg3tcE7@qGhn;)C}&m%aNaD<WtRwbA>IC#<@D5n4|z<Q#^zs zj4o=W0U-W8k-J#o(3t3AclqaIiWIvj4m+|^Q@qm6e5A_uq|Nlz28%|}nJa#L0dRnH zrFp~)2@0o+uBQqR!AC>DYojgjB?lCRD=5`ozX8xj&2;v5h{Xe5S<-q*dax|a=Nchn zoSxB7&p~l94+M=SzdrmGt-Xj=G2$s+CYGF;*_0b&);}wR8h=GFSRJ@Gp{%emI&Yo& z7y}%%+DWtVEtc{i7fM@y;ApH-8WVwfPdRWV=xY~v9UXowM{I$B)Bo<;o8qFkuW5i| zik1Isw8+}PtOTGP)W~QUF!~gi(dg;O$Q%1LO-ckpD=gnf`_d1cBu;tEpV;<~#0jWI zhKo%eqvJ#q8QbPw^L1^LgYwjtIpK#g60{e-N$b(?o^Vof1IrwA3&Va23M`N4Ut(0d zFA81MLr%MF+;?$kEj{7r056Ae(~C^;Z>ETc2^3sBg)*j^MpgffJ?<2@GO?=B<Wwe? zqK_?Ha8I5+xVdT@bQ4Bl=lloS98RPvD`J?*&pHkil_K=`XCiIKVYJyYg?Zu6?gj$; z1;K)_J7vZjLbqXes=R6*OTJy^*Zb(e4jfA%3oO?FCH{flJZ*nPExy*+i$*ru!{VPQ zGZo4qDew9IMr`YS;{k<7XLIGj=q4^*xNW{OjKG$mu3yaUw|6yIvan!Fu_h-0ZbWRZ zrRKt6??zdY$WAs7F#e8~=jTR{5gdGUi1nblN9WSlgjtu_LVi;e;mZ%AR9?F<_0>Va z`sq;O*dKFI7%cMI{Db<;bxHFK<w_HsSt`l1kv;WHBB(4Wwpn+!#fY%yeDaOB6;PGg z-#8?Vk*vFS9xyWfkgHmIiF;{1@TTOJQzy{+XTi>vU~;gXcpX>8G6cQGgKO#d9mD$9 zhs?}tP2<w+tnbg%XWxRnioM@DkkW3WcbvBL6i$9uejheebT#l0$0>HsQ!V-odMN$V zH2UBv723@1t4wh0H;W49{`WmA>e!sFq9hWVO`MR@L-C31nE*%77D?LwCY!d9nwgKn z_lIBe@4FHdRvLk_to5-10(&v=U*^A61laMgg7-9v00bWCr19_rI!XHZ5@q<h7w93h za&*<9n%Ig#mjvd3ZT3#~D1=DsLk-jotHoXTKrIX=q_@;EJV*RAda9xm0qI4Vw~eU! z*7LaM%Zg(?RbBhu@H~k{!lDWOHsJhRM0#F|l0OdzB;?}QeWzgjMpbR>WiK*;gMyow z@YgU^)e!b@LE2L50|QkGv2!(`#1_i>J$YON9lI}XCbIWSGNG`vDN`shc4pR-{S7Pb zIiIV>thG@&Eb))Za~!bd=MP_b#`i!oRB>l&WQ03w7relf=|7P_TL-$%IHr~al2fq2 z@GOgQ(lIOQu-odFgaY0F;H>*gPxT$KPxI>uiSzWV8#jbUH9XR7I}Pa7r8xao+6Ezy z`Ftj>tzJ(?Y2G4BWGQ3^CyiA{j~YnPvE>OjlCg52+@_7PNgL1Q;O!~ko~vL4;WTbn zB`&}<ku>C3PkC(EAyzZo^pf^jqijKUTl#tbngT91iSUb1b*hA`2mJjt3H_fHqub8$ z%4=`!BOLq5rX6h7L`Ea!=~W~NJXCka<^QdjxcQ3iM9607`R%hI!_6@yDAIE%064{) z{2A?(=tJZAp`UKHY6e!V6pftTo=t_5E}Sev!IG(nN+J<LfA~<sr&`-u>hDa#RYydr z8BglKU7I*?qS{kI2!R>_##h+ON4QLBY6Q%JOjYWPXLBjcxPcwGp(`~JE*@6dooy~& zNX8!j?QQ-@jcEmO0lFqeG3|*hv#XiDm#0M$VU(F=<VN~{5Cbhk4%zVGh-Pqu@`ALy z0)hpNocZ9S{(I5lwi4l>IPxd4-;Jgq$_!z;1A)eYvLOsBcmAlCT>1%=Y&t-Of(CqG z(6^KaSTT#~w;~#QOpMU#A*R5rSTZ2qM+?&DM$XlWo6t%}<2wg;2q>qxJs*j#bw02) zu`r{lx2}j&51?v7g_8STJ9J;fC|np=SgXKM4HJnJ+agq<nfpFlv+a6S)U<M@HR9P7 zE~sZ$Gz==-BI8*@bmZR4%6R6(kyxWalmI${vp`s1Na)6Qx4-U1#7=)n+}KBTc!2)4 zL!+<^JN*gU3OdM8+46~|ls=7z%r$MQ{rMbJcuyr-EAUoO$7Hb+0GjP%0h>FAJ8e$` zIDOR&JN5`6LL=9&lQvX_lAHRQcXKvg(Dl9A(%h)sJjk_^pBW^io;d&-b<vV13JcVN zzJx-R1soH&p<z!b-~}WuSp3K@LsJ)Dh(d6|GpND;tB{DJJ52IHX5gV%x0A?MQV=QL z3D;#g#r4yQuoSRYg&9!iP-fw`<`qohYdj#ezte(Ll~_mRv0<WJ-y^rt-VE-UZ*J42 zD{*T$<lgbk-RM|xpK$)niP#Li=Wy%XyYt_BEcW!r><1?Jnl7<<gU^TyZikuT1Jj4B z=t+uN%$dsniq>iCY1lvxjZa*tp@Vr@KDtk_bd{kGrWgT@Cr$ce(`J=U;b6<=yz~G0 zSI5S;aorLi*n}7e6W1n<{;aq+rld!q#!X9THe|>$VljJz_)#(Duq1VC;+{{BJBZ$* z<Wc?hMyiQ5;iXlwo)jBQ-3v=$71UGSBY;*&UKUXB(sdhmK}Q;ea;TgIaxe0So(J}w zu(D!TeKoq5L0GxD0NrZJk(GK<z`{vXheP+LSa7(ZWJwMN5I;^Xs9+&^D_m}%)VR)6 zkxvl~CZ#9c+SVn3gjEvRr|L*6@rpOEYFWF^Mt*lw*vy6r|9ysWSy|8Dw}9p>M#$)= zXiA0}p*%kDsDl2+j~$2g(7eP%;T$&xaaf}j*pym@eq2QpGB*F(za(<ueKNqwVDax3 z)MVtYf=aW7ehcDSXzdc5Kh!Dq64N3r5EftCRRvWgwUH?Vuqa*3qjIBYD+XI?6VoIW zK`xZKc1Mv*FsYgUmxy$-dY#1p^Ne!qbf)sZc?Nwr{fZp{Qmfc!e1rJ!X3@wc9DVU# zwIgz7CUzRCL0G$v0NJ)!N);W*5dR0KNt3iBU7}k$;fVo(X*(oVNAQgAUW%c;or0+Q zIEMYB7TGj1KaJU@v`O}Q(ufvp1WpZt+_S)M)f<6Y+d{+M4~PWYx|MTCbF01auWFOP zo7^3WpKe=D9@>`9SLYH96mQERA4HwH?My#Hn#2blZBGeVem!`g>&`O?001t;97-7- zb+5Yy3A*1W^g_XTH)N4PBoqLUi4ZL%&eB(usq535{C`DqmmfNbbVC$k1||r3uFwh> zFu2DtDF5Q^Vuvyg=b~G3A@ur4&7eZO&x0sI#F&o(FQbd^W!jMT*L0R(KFyhNsB7rN zImLmN*FhBg=~V0ga<$lQn1WWn5{o$Pwldp#F$1e5Rc(0PNf{Iv5|a{K>oTb7>tffr zjuDUvq-(l@Lr~}yBUNk688w6ahq<htwKu!c!+mHNcq0euTt4tBp;|V^GL+8}uemRx z8cF=8r09#^u_Mvt!8-DF9=X4BaZ@;VP>uz5Ub*k>2ou?t|AWjqYPh;)8{ue<yp2yR z7FKpD+I{lAkQq7;<ZidkTXa-&`o>F^?>T;*@6wtWyvOXpN>WB^x2pGV>%?(kt2h&D zJQ4F$&v+m$ml<YptS=|f_Ptznzw_G_e!oEa&J|K6C&MIf#9@GG!%%k4aOJD`g0j(j zQi!@));s=_R%mu1rm@aZVH3C~6HK_jBf;_O^QDsZ!O(TIH4RY$%c$G#=F-1R{xSDT z^Mwc)9LUC8ApcUl+7D^r9HS)I&TA6b>J_7v$q#QJ042r<H~ZjMrm>7__)+TG%Rsbv zFQQauH?R!KZN#bX5r*HK4Jf0Ps%gP+`-E)Zk>aT8bV05#Fr-r1EZ@n?)+O^REOkQ< z2eW&5yk2!??36A_lCF8_Vm>VwSp<U-jPpzwX&Z8axlOUbpWne3%1uNjT7Z+EDq0oP zBW_SD-wKdiq3qJf*W6hSO18DED$ed5_*EgVdd5s$_AiaRY?Bp*A4SW@0w2N{tBK$J z8~Gbep1(#GyaC>)9+M!tgAD5#B8ozQBJu;Ti&4$!lKwdT-{4e|NY%oLg0qgTY4woo zCR7B7TJPvKu63~;@m2ba-kB7b&QpyW8{q-N{B%{{#%v`eZIoh|LfOlI+asGvdO^q2 zH&^;_MVn?fhHu0N`$&p>>byH0iKjZe%R?R5t%LA-Ni+)!ywOxVdKzVTJQs8b*%rxD ztIfmE2@)AKuZ(EvinplW&i6fFYYGBNW89kMvd^AjoyAfWS~wH#;gVfURF4+QTO{EF zws7A~&OWHO@z3zre>VF<#K6XcV&b^*%&ancQ+2!3TmN(I5Qr`Ry^eR=XThRRd)nFP z3Z=j8|DegJEcaC33M!`Eu)3=Fg`pC1bh$GRMuviO8mqI8`r%$Aj|9Z+3VE}7)ZqWz z7D?SK_v|=<N>42%1Z@1(4)6VYh>_}1wg@BhoHg(AkS(w5?awd{W4lpUh*A-R&YlY~ zSTL<Y6?sJ?=NK2ivb0SLH{K<Uv!mvtG-H(NagETQ=<1TOGRH9nCn|Hn4R|byEbi1X zE7ED?wl1pc#V@U!R{BV-2Pz?h?toOvZscaAEBrG(u<C!=lFNfnnL1k=WK~q#KL-ZY z#P8B1yvsnOv=JJQBaNP^JUk!a&?2$D%M)UeSMb`&o0#V`-L-p&WnSNNWBdNRRfOL> z6m}>G-;R#!Pzt&Aps4*QKIT`V^z+;EbJh9L!*fmq5-3f73Z$FHP=)cPsT6e_R_Ro? z*1;*)Boo~{zV99^xLWG*xACaB7UwJ|=;NgbcT_Ryk)Ap-JF26I(b$BEsai|o{8;!z z>`<)jn*izbiXr5T)=5J~5SW0GALL?!ERC22rhvQ^4vMoU)gc(I4H22h{7sic6Q`<c zslO~Z12ZCB#F|rp)`FVDz$>74t8t9U-%bU7v$b@LAqzx=1+gx*y;j(cT}vIJSNrpF zJ7<M!)jhjC#KFRpW7BqzN2U=TV_p6enoup0vRKJ_@bx>!%JpA-=hp6>p@jooKI!v~ zpE3QN9GuiQ>Asucv4Aa5bBnt_3+DRGnJ&-Sy#ya`s4&*~b;E)-29JOl%8V%5a_LJ0 z3XA_810pF*Eo3o8U|<dKM6{HI4FnPO7Ir0p(`7CiDPO*gu=Qg9z@c&+mfE+WYk?OJ zV`y+R8Y;DOlc$ln*HBNgO7c4O(WF<}81rRg`W||vOug(tv5~y1H12<`aPEK9esRN# zDJ3h-aY>v%emFl}5wJq68#=H$+&O9L*&6~^6rpnpq=`oC8jkz!YVWNoA%6gi4wPIJ zPlhmMIUcrim#unbt&Q;(9?;m^!3o$I=cj*;h3r>7MbgW^?FM~?f6dC(?#j|dB<t>v z)8GY8>?{ynUO*Cwj%D<+23n0qbO|&oTSs32HslvngpRpi6PS~0Y}AD;Oa`Cg5t*#3 zP@a=Muvq<$T9KkJZLR%BnToUK<>lJn=Me67w$E+P1d?=~a+s*HAqBTJROAtkgo#nH zP~<jRc$7edGv}8lo#p_<M==vQh!qrl$({nK<+{kKgQ|8x>a*VY{beT2(zh|e0hJkc zWs;|B0>`JZ*Z#hwUYGU&;rpZ^^=GQ?T`|U^IQUy201;m~rPA%h?j>zdt~dyj-H2+@ zBVn0|FnTh>Fz3uLoxBZp_vZQS<x<PtXi~lYp?5o7wWX>T-iDage}+nC<F7v2P%#{P zp_wIl)vK?yaW#*Fc60M!5Y4V;+ZoIhi;+GM7F8Sm^;X3|tZJGfZy0GrhhP!Rd|-r` zg3nK66!Mt?$pw;S3k~S<5tW#p@iB`3bM89;0FW83oqDbk*ArdBc+#7B+$xZvBq%W$ z`vTY+H8cLf!;U#2rs{nLN%|;?%@YVg$T>w7W46--*5<|1M+56w-*PT)pZ;)PaY*+c zPEn)%vJ2KMsB9w|lCFd>P{%icf%*->Y@hdc`bWmaD|K6eAvQ}8kh6<O;>gI_u~GI5 zz6AxwD{{0F<9`c+TRk18|Eru}nazubf3ym-i)`54$HX{)(Lddy27?C6<%Mw}yKDA3 zL`^|JGmTEea!7=U(F}wY{SYzyC)*ZiUGDp*3&j%psf40A7EDWoAq^?@Uv0yEj*EOT z(tEPU;3gaZJRJi+S7QQ>dNI&m@Vk@isB%7~^(A}{e1HOv?((0D#b@rb1zYg@yzn1h zPG>C(>fk4OGu39WOzMN9BU;)v6b6)Bg@dy=b$JpXF$fxAnl9443CA(+`wRbk^mpl_ ztPc+JUQU*vT4^`l4kz3e)CQ&&flp#i2G}0l?i&5TiREKEmetS?nuk0%CR_3OP#4=X zEc?r_TCIxQi{pi46%kf>tEYzw&Yi<6#I&PZ@Ghk0{DaOLAMgA>kGe@&dX+u&B$fdu zv!mn+aD5{*&l2mclS^ok!lYDFx|bVuypP;I^RrIBn*WYY>Oayfu@;ei92f1h7m)*l zeX9u7=pqvzk~QI-nnfaJx++jZ?|3vLG%IXy0YS&aV2JP(X8)_#YfUGfAdoN`g4dWe z7SFHMc1stU&V9{<9=<?w1+oGK|JgaU5x(Q%l5&Q27<W2>0|KU$(@g`AKXBt}*Wz)Y zW{d=W$*#Gun6BdSM2$wsoJ?y})OPF-p%Gdw6YDEdZkqfA?o%jci1CRN{&s%xj7z=n zhyZ}&Uq^!XuX@ci5nJX1niyhJTj8uCv)KloN7`c9n$=H6<Y0YB;aFZY>@47!6*%qC zRMAty02biiy8Rm!5arysjFqf~8!QE~kSMA;U8d5j4dJ^x@SToC>yD5pv!T138;uIp zx4uy8jQs^TI{;|j&|k72XrJ4`WoP!NSi#x{-4&?DCjXsOo0R!=VNb*O`9WQmiIF8= zSFWF0T<!0(N)RLtW++oW{e!w=x&r5OVy~9g7uo_9Tq6k5X0^f=f{yGCiUo89c^ME^ zY?+cE0wEW64lTO=+FWU<raw^lIqT~<>D_8oz<5Bh!8Z(~&)1u-$k~VQAoq8*Cd3yT ztn5iQB)WDMk8VX35ZG{8B=#=@qj<(cI_YUkiJ(0dv)hnsVhcfkh-{T<D{0IsY4q|g zkUL4%^(8g`Mg=H}Cm+VSo8~)gC%;$z2gMRns0duxtsJ>7f9h-FGXMbW<3?+FcpASN zrub0sLQ}Jubk@BYW+Su9)SrA6@r9EVLM8v<Jog%K5))!4bDdAE*=tn!jl)j&>7q=W zP<*UyO}%DftCTj>C}vx^@VSm$&ok_AlIT{XmMQ}0K_jImO6OGk%{_C3Hfae!1|LwO z{Ry2vMc0T(;u1l(z4&VIiTRXJew2MidZ-J=*yg|u_`wc+>y_1BIwXS-gHKHPtN<G@ zDFJqx6{k)#N>8{6m@pt8rw`y_`U9qE$TN#@0nuU_^2otoj<=GEGQIzk@2#dG&m8;_ zc>Vu<EYhL58;7Fl`e^>EBQTvpq+74FAqJ^T+59lsU^NNS*0;BJsBA-PsFoE%uQ^C4 z1zM{iQwUcov#@c=nzV}x3HKWDY}8%f_{z8lR7)6r3Ms{=`2d^TvC|W{H?)b4uC{`4 z-axaZQAi9f9b7%u=1xzn+CC*B)=bYPh|L23pg+;$w=5VIMTAqA;MYX}(<^&6F%CXG zZ}4Sh*&{)G#s=K%%d{qNGBR{uhSV}PQYvZyg})|RS9E#G#*%;xPl%d|7tn1vMj`)~ z=_SZkzCVZlHZ_{mrP;2?hb9&4lIEBZnP-L;rb{6KsMh<%3z@Mg!#Q@e=Pv5Cq<`_B zLVq9|#R!Ib`EBH@Pu<V#R84S^-MTuLx%0``SRoo0?>hu5_8!Z$w4lh5&)(EF<dG6s z!PmREu`UPMWoJTz^Qsz-&X2Y!kvRmHp%-9MSOWTs*`Be>hXXih(%?Z%#EW%%!<z)Q z?}Ie?d@sYcFZQZi$%NY6k;ALf0NF4?OThJ_4Fj=EaW_ga90Qc;+TrfU#?^Tr=R=`R zk42<PT<PmbFs6x_F`ZNU29-F4$2r%7PrRkxqgDj~PNG^k4q?nw71UuJYK?!pM_Usr z|5Yz(m#S}=k&l31t>JkVzdwpC3)!q5wooVq8QIKp*S!n>3y(b*Lp_C^2+G;1d~d&` zVa^xJej|zW`!K(*G+XJ$pR`%7ne0zadQO$<cN7jR0pa^IUWcnsS))8=Tn#kWf}1Ss zpj#3&iu_r1bcrmc<@8T15iJ$b=q_e-u=Ad}K_0J0u#}_1q<IC>xnGBQOtWKPrvf1E z{Igp|(McCh9laK9sQ*ox-hS5U`Hs<*1ZPc^iDT<b)O9{CXL;Z=b6PE<5qHCk<BH|3 z*>W>@kup}XzGTBH<ZD<shI!ieLWxZy;`SLQ!yI}}&qzD$4g!vWve1c@OwQ)<>VD8| z()=3DViIS-US#%M-QtFz+-sOQfZ)i2g-UO|U*XT*k;mzLJ&Lv*f-YeGPrb4UvBK32 z$%E$ACYp@R@JLsz&<F{}=Q7!{S4iwc74)k5j@Qvc()X%km7M(7J80%S4#Kn5botju ziqP5HG^zEM`l~aLyJhEj1!UOFS#Hth9pTwK3gKFFLZ>zy@heiJcPE*<!pJ*{GesM> zzlPdaQp%9mSUP4B(1vgl8o7LQB>yJkuwr2~;+~Cjp5V|mo0+ZCX4O9W-_1UPX!tB0 z>U@OU8ZVa~F#%O4J34g&0W%UGbDmSFTOeV&;hkwM;g?+qSP~qQKqkoG-SMs=(-^7f zy;6s`rrP!cB5E6fk+zHd{)cfM2ZT$&9d#+xuZW^}0UBy?s@tQ8_sgGav&lA4+AnMe z9>zap^ZVR<xy=SCw!fPi(bq5ojfy)L?W@SkG-!i&A$+}blE<~DWH#D7`=Vnpqy1^G z@{ffKw0s?R!`R$cQAY%iu^x!OzS8kV+o`_63O69-QH(au-j`~T;Zovww?8zdggK+t zHt%az;IxEW(B<XK@8Rz<q+0mA&|kdq)`V|qNY%Amcl<g1uV*72fZOM|8b%3hTDR;g z-V7a70n6>WJ8(}!K*gwU=E#nybsXF+y2O>PpdIfIeT%gpJ>_YD(?t5I93e&Mt_pif zZw^Pg%yto>{@uH?CEpXlS7*gcyl*RW&1J8PX>y14v+4craNbUPw*SG2*ne^#Tn7DT zGbB!s`so%`YHi#@CP^a~HZq0XO7qJS?D@)tV%MT7B1gW^3Bsg4xs=qd78rlit7&tp z-5~hh<E4r9gPdg!VFJ_7OsltuV6)sHzV2sY-&Dua9izAB#y=5wE-8MI-2M<X#x-k# zu83qS_e?sciWQaKJ=Cs5jGF^dgF6zPb52xvF2!}Ie}O#;?W^9xCo_2cUrb<fKTm{m z5V6~3g-7J7yRtO<=p!4t31TGcO0ud5kCh%OU*LSE``HY8*u#p(Z_C}GAYeBg1-P*s z;#3VUuY=ccBS~G_AL<q_GuPY7P~;ITR9(Hf&n|`BagZrN9cMEtyjlehMWR%}<k8p< zhH-|n9BwLBlT2%ehdL|yqEB>vI*J1w`5Xhw#;*~A?Po3wXjgAkwt!$bcH^P>i`^ym z;Qh42>giSH3d}7}R*P^JszxgY@mcvtBh(P*DiP86J01uhv~dQv4a-S|7`Xk_K502J z9^!*1#Ei$xA_qT@oA3LxVJ@S*q&$iIX3StPdq9A4h!}zNCK23-Z#7G)op;WLMkI{j z-zBx#l~aia_aDg{KDj6gb#lR_`%1Aj6Ng5@ikt@2@ncslHt3IkeWPogBFuG-Nv_Pn znuNxXjde%T3YGIHpkg3EsIV!1Vv)wJ<mo~^W2mb2Hsk)wBlYd<R^jj3Qu$|X)L|-9 zJFIOGxpwae0JiT1Pc(Q{x6V9$MS=($Sp4$l?A4gwFk2=uxY8#`NFXe{<-~H3j@uTz ztC?V^UX6+Fne)rMdlhq;#sh=RxMBy8b8s6OY-B$>g08=2%r7w#%Jr4J49*B+U!Utz zmA7@33f{VcqXpgI7OWRPN&vi(>wT#DFDG#<RE>KNu#?884mgNO>jWk_zA&=6MM$`* zeDR%?1Y!RKC1Noukeeu0mQ62itqZc)R@t+|hbO-rnb&mdY1q%;mOf%CunTl<;nQS) zF#R{CMM8&y&d?nu8ut&rX1fiG67gP=m!}Tzsa=qmBQ|7b1B&AJ=w)d*1;T+cx=45& zs~BrWh!|ZE^NDqI0an}x!IfUJlfT_SeqYO$WN77;oM;mPkIF0y?QE8y+s`!joH9?B z;TfA9lnMlaV@IS1HsEL)VZxLOVY5+%0^YWPeXE-(cZJbSdrfydNYNvaDp0F2KnHNA zhB52@bgdw=Hn_fcw2{{-WaZ-JcKyu~Q|J2=l%ECy<pUVJJL(;RnT2!R0Bw@%qd~sj zyDm;HnxTHsJ1%w+aaH!p?a1=UotKXbRSQq+Bop#1rzopU<cs)c%ZrXm8KLzlHJ+t6 zXbyt>^6VGdXzpkUp)*q*)IL%-wf5UlGAMeD!K3ze&_I839ZST$1JkI7VQE!6oy6ZN zc)@%JzP6{m`mp;*IXEyda%aZh^6=f=okMjN$3L&6e?|mspZ9KiaZ-;O)xxCM_?+Dn zi{A2uYGVR)C75heA&8WykXo~SA0d7zyv>Q9f&o5VIj*urA+7H7Rf&ly2|Qw3_uk#E z!~um4IaXUtvzuo{<%0I!N-d(-Lboq|N$6FkixJ8?vk8c?-xvmGehh1%gnRl{q=vV9 zDBHtaJ7gkFL(C2s==$9AhgeQEqSk8^kA3&^#0MvqO8-qy$AV#foqBifP*ZG|y+x5S zf=$=3esu#M?rOJoSDdIzUea?Q+k+B2H}Q?c%^)ybI}2Y@6R$CfGq5AG<)o-y?Lh%o zhnoG|7mcFNd9AMfY7~AQJ8BxMkyuZZ>fTqp_d6dF$E9n`-oOG$QTTs{i?U)ivyMjK z?MH7EKH25y8%G$vo}@)VQY%#ksiRYBhNoQJp-B&KF=XvMQ9`yIIz|q`ydpW!-Kcm_ zct_Bo$Fv`FA}Wbbr{zaC3qBHuf>~+#&W~gp_2UPEw_q3KvkW(<)g~2p3u`bY7}%oB zq&-}cBX^N7wZKHVn{A{SuRK{f82JF@TPo-rUgE>z4dl<Q(-AiU&XRW@?GH8TD}T_? z$ntP(-fhQUDBpmO?tj?_C6m`VC8FuCn>Nc8!lW;f_H*T%)JNH>ba*ryX|X%?bWy(C zpCU*lo|y<1SU$GIeAZ><NF!}t5bX6!{PuqnYN3>{KBz;)-ahsE9U^6~tAkSJ(($n2 z)8sMNY@hOc2X&t$<vwC(c|lfRBV+0$<0ALC&a3P7dm`uy1KXn2qtaPOV?17<?ty$F zoPeC@F5{&CV}FdMsPqGX5LfD@7aTVvimH*@){;}DCq@a&0U)|Sm1|rXdvioJOu~tA zkKYFMxMEmemcw@ci(G>gBGRFn1@42;IKVEO<u*$PSQ%{Umg3I8N%H6f03c$C@9gD4 z&0rG7ijsg>iDK)e_Vkn#wCEdK=<OP)bNty!d@Lf7+F=m1`cgmnh--)#N41?;GcXbT zZkix19~=!^AVC4wtp9zjX%z;SwD!Ht2jEIy8&d0*RK!4xjX{VTx-Y6Dy~h(?Jvwf~ z%knTR^cgZ$fN?>u7g|ge#TwP5oF@LrB13}h=sA)T%h@80C-6+exk|$;?%S3p(hl;i zlBV<Wp@qB^;JseB(BIN0QVqChs?vTg!r9UL&*2yZOv&_2TK$N>e4z2M0?x%Fs?<qw zF7k)WSL()%rG^<S<1R$uMz~8gq*wI?9derS5$mQTO`aENzdT0GO3`6oznDj0C?`O0 z-&<Cfy-H0sJ9Ij#6nTN5ZK*-L_gQqV1Ke_4=-m<V%J~PQAC*P8;#7Ry+LaB~EdSxE zl`nBp*T8}ek`U|11fVz{m}(VWQ5!-ojbT2^(OQp0F!#i?!LJ9bWA6Szxi7B|_oXYS zkGt$h){>lL<a)|T#m3BLVc$L+rUhyOc_ZkCPbwJ2&J|IcBYzngDU|O4L$M$>BT=58 zWr^I~f+vMcn52YU4uFe$ohaKqtBs_as_5o3MkGGQt6=N#u0n7P>lT~Q1Eb?$pN}x^ zd+3IPyO+8z-?H7>0gVFASs7Is!FNSdH%{MpaN*S;J}DdD?7mC^(HE=x2;waqsnaFq zFCUW#?37c>9Bt15n+ZJ@zi6uq<%}JHEIYV`U$OhL13|*(o8i912U}>J*U8M_c$Kt8 zUmoh*DOJ51P&6U4yBS&;Y=B#2qfvI3_F|ccGa{6}m!vSRV!r-~q+{eRi)A^oL#++l zALFbOs6MsB#|2fTrWbU*%RlDk0%!xs79zcn39K`+;xYNt<m`?=f<jAjS6nj=WFNT< zkDnR~Wl)B49~d)jnGnx8)_0iboJ6X`p!rP;w+w}>eKiFEC)rXLQ(09xY>d@!?>FaJ z3ECwr$>o4sA`gfi0BM7qZByZ7Q#V=SGIc&|G;7-NH$gu(W+>3XhfIA|y~macgEKc% znyRj4alVZQmTH+QohB6z`F2Ho$%ZhLXvR6x^fRc+T>1A4p|%<1T{U07d}z$5Tuclc zw|E|cioVYLT^BEZ3AeEqh0-1zkSFxzF3v>U>jOv*8P!;LVQ}O6{V4tCMgYlTCE@F~ zmfj#fB4q!RxvoOs4yT)PD(jxoMf5%h0xIcq(L~;6^ff6|aK;nK<Jfo6&B*sgf1`|4 z7EutJFW8G?nSZJU3Qb>UaF}Vk(}RU|6P?qwZjA&cfqYlOW~4Va?&aV%A)NrwQ4!#T zUM_5RaSO0I#smHB+eSqg8oh8Lqj=gYgDN0f1@9b^k?me)h)2wFg!o?P@yChZ-!?@k zOq+jq<FQ~(>c+_G%)NyLfl}!;O9AYPM?lvfH1;B0|H=yo!bBR%#%?cilxm-?<s$a! zeeM=AHAjQzHv>%WJ<J-Ex6*BuibDuY;RTWV$}FP$_+xkvtW1^Ul`$JS;r4bNNI<GA zTaV*tUew-_q7HWCDaKB0xU>}}{SC^L_2Oz>>d0elIKMlPa`6*M0eWy|AimrxUD)7f z94kX1j3or!yBsnxHgqMC6}@Ti&6l{!nJbI*QGM5+oA=^5M`Q_j#tJE$`EC>*bkTzc z+anQZ3hZOLr9o!~{#$!N#G`dTQjhid2I#c1I^10kkG9(k%vW65f0PTpmR>9n0ZeLc zbTx~Q$+%V)J<iao$0tHh^9q}fUh9w}5edsqMoq=Rid=jkPyP>QKDH^fj$@Cxg2AeP z9Yl}L0c?Ke*w<qRgBTQ)P4P%nK~K&L3lv@@fl?rM1@$^&%1F+i=k0eXk)vx0v$e1? zVrN0OmU0iyr>HRUu%j^CjZ96Sh;^C<MN-bPYwO!?p+zUAcCQ;zLPJEyK5>>@$QBEG zMQ=99Z&rxx4@5ei5Bs*~%h<T#>)5Re+5{rX>+5OO%v#edX@wi~8C6LE#wOwm@);nH z2L09P)OmY{H}Vz1fHAZQ-KyZHqVKK{Y-XDNkp(_ScI97_+`+--`@4DF{@^PF1qL82 z4$su^4kjeR+H=x-C=wH9*_R?@hM(Q*X%To{O5cM?*~M|agrwIIdFKS#-aRHxK!y)! z9daZ*;byNZudYD9dPdDb1CPz-4GOpB@=hIpiw$r+7Dms2U?9+yBg{JT?4qnP5j|%W zYv{BJTyVfz;rNGwjunYD>5G~R4_rx$k-KH?KtTNJP%^q9nj2Xn7*Qk}<;t?EhuH${ zC?@fZW|Mx(Ptd}bff?NB>0AuK!)PW50p+rJPD`*A_hQ}RMqt=OX4>x9eFmI>hM!Zh z^LGRQe)$<^U7WwKZMb=mN$0m=wr2&a~;k%=Fpa_uZ1n_wg=Ob{0tE^iM=NH6Gg zv3!PyGv9f+_)2QZSB|b*D`ibm3<mrt;JTb?`OdiWpelljMIR&i4EtvjaipT9Yu`f@ z1~~*A0hTItUy-o=qKia|(fWdSNWY*#k96WF;?CGtD6u3Pm{B!fCX_vvjH+Xr?H{uH z-@VV*ItWc^G)Zetb}p1d^mr3K0dqiXk39~CrVia2C^4`gqs2$u!g&sWg$!Oj=45`% zL_#+nli>#yaLtde^-OAoccs-+g|U9f%X|{g_s_WMY4aPqHLTcXGku&}{d7RgYba-x z-*Xk@P)WusEA{)P_TOeMFZ!({U)W!;f7Nll!2$aKz12=I$<F+3-u@%{w=e-e(g^84 z1UNDqxZf#Y(%=wXdTC73wknodGlMf{`!IRQI{!Jcgv3VMXfg-#pAY#h*7|rZvKj1j zgN+rY|L*)w9ELf?!Y5UUyb0C%uY_Zl+81og@z=V$#5$?om7AR<r{~WYmGWD}qVCYr zoJY@4*;xttr#M#P#L49T#}Ku)sxi}=;~LNyPZ+mi006KcX|DU|Q|al*$Q$}wv>4b2 z+5H>LP`+Z4_m+e8XK=yZrKnVaPLdc%ZifRtM(%bLY-7NWwkKbxp)b<tcpNm#)8YlF z$fP(yL>c68Wu0#e-mX__g0F9{&KcyM$>rfQpqbd$cG1RDet0|ab#{VN1!D>CwMy}T zkA%*~Mr$roMVErZp})a~9F%2punL{NgYmXzR_I98ODa0}n?q>wR#VARgI1{!B_)`y z<DT-1Ai@HKS)NBecoD7gRR6HH62{X=jmvi<MA(UqYOtyn{c31M1;)zuWrW5!hc9F5 zfa>Vq1rDWPUA9(J#Ke~`3az^0-^jS+IpWQlqy|tdgt|xJAR+0je#*=gh>d;?Icn4P zX(#wL_P<lD4UYU-7-&?0CYdpHf4{g667m<+_Ohk`mhI30CGo6ix?SRS=Dj^s!4jZH zu1zfei;TvM*it^3)$~v)Nz^1H;WNuPj3>vkl3onRR+ZD@tyjGa2{#L@R0(9r8|v1& zD{LyN(hPtOkAFT<6C0&Cm9Pcp$K7uz;ftIm{!_9t7SJ2#I^1Cno0Af7w@5tFsh(iK z5?h42`tjO>@;v^ehDEmE;XF)hF->CZD7<W#k{g;-Q*s(AMi#$wO!aKYrmG^Cs4zD~ zjU<Dr1wH~hJQX9p9R$uofPFyFRV<6YSPl~>jg>uThyP}E3F)f2VUyqn1NDK9lE>@H z-R}wKUs=~$8uEnUR*qzNCltbD36eiub#C;`<Qj(x2joR^=(G}(Lb${QvLN$){xH~( z3)V$Bm_3I^`2l_*YDfk1b);O29RwJ*2-0M9$oo<rg9z3^$0pkdU=;Sp8x6N2{S^TQ zMgF&CbAL}jV~wWEdHy9rd?KlSexf(5;Y#(x+PxYwpMfQqqA!ygZCg|><5~p=Usp~m z=56mtkW{hkZ(rU=J}BLx!SEIt1~2(^d@ez$J3pppnc!!T+$Xc;YKpckvLj_judb*% zE!FbdSK})LdqE=`A!sP-@m~XRoM{`dV=W3RqxWr{9APWl9I~`h+qsCCZQp3|?F1!> zYbf9%;l+V@iUgZRQmwwzNY3x<eh3_Z2~?(At@9Z5t{~vb1h6tQ`0F*Ap?6+sE=qyq zPec-<LJlTbcIu_HT8;(rba?&kQRT6dU9n=E$g&YbmAYf`+~!4QHYIPpDtPJHIZcfa zj67EAvT`N!Ip>h)T2R9JKLC<IZNDm+=jA-~FG|R%(cH?%dY^MXH7QY|6&m*}jh6dH z3jx*;Y@&1WLmyus0Cwq_6WKSU`P=S6zX&ij?jwBrTD+Qtx)T@S&|=cy@Gr!I$g?i& z-|I`oDY7D3)qN{Zis%&z#DjU<qz*%5#VPr6irWyuwtVL=g~g%LA3Y$BHY>GRDc1N` zs8XTc-JXVnqvk)cc?-|fOWn3OoD4Lwwm;PP&HWIbRq4jUi28G|?SG<oJquij!uCoe zIJkANz;#+zre#Hxat)UqGH!-Wi!S4N26nTe1X_%WUz+x-QlSJtLy_;Z%0cw;Z@o=Y zkVZnx*C&fW@qYajR*~M^_LVR%dxC@g6j0N|cwfX#*J2jqts8a;TjCYbnZGRGbC~r$ z^(~dBok9Hg!*LR*9Ao&ZC%Y+oUaGSTR=NAt2g?mp!hm=9d8%p4?P9D7q4#;O?E>&g zW7YSa-z$nLOtQn<QGBOZ1PgOhS=!ovcnO7h$!ngrww1@ShpW-+J#nrYRPru0Uf;ac zU4CzczCi}6U<SGre>J2RA*WiL&zh3lSGz@g<+L98W~9E!rkG{e+9js2E*`QeVO^pR zo25rUSxF0~+^MBJ_nWkU?SW)iWaEgI{$1rxXV~sfJC&=^=q2UkcH%lz74tmL@aG~e z*G!Q@!t%;nbNJ5T2w4@SE=E!7rX5c-UQTQY;*bpKyxvJavj%7IIa<K5kw@(>Fp$2E zNOol?ECyPz!x2J%DFrC1bkROuzjIim5JKTc;;%_IZV$3_MgG8<KMAw0%Ad95-16<I z1Z<*&Spcdy6p_vGr(-6qZ2xq4-t;0;L0tSTal|W|v5IW09VMnSJ|~@GAD?y<kc8~6 z%$#kn)1&$RYHIRt_9?!xRzm${5DNwoZH{F6fZI97O`!d|^W-p@F>}FAF;ud8g0?}B zzRMvYtpHb>3lmrL@Nrtap3_@>&Ed|FWjpWug<g#g$j@h8@@u2xR)n^(QITCr3Bx1u zLuJB%(J8Lc=$q7rZ!?(FASMcwAhFWp?Q(!x->y2n63w(_HyyUSo1NkWm5AfnK9U-o zFZJXyb<T6DXw7M9h!u^#K7p8P6=#hDN<WYa$g)>FE`>B%X=&_4Li<t1kF{5(LHP+~ z$^t{R?v{#7X11<keH48_V(0AUa6t(={a`IKIYjYwux(ojmZCB>P`FPsp*EGS@lT3Q z%f?D~-g5=r$8a7@ye()8JFtTk@~sgG#f$!^P6{#ax$s^w$qTZmx_2*ZP_9fQ&Q=|) z{@<OsM_*_PQ(n&obFRL3*G;5}Q=rGP*7Q6s0E(`v&idt?$qX29j4xd8&)0AA5>r{e zfy;}B<4z-W@XA@BiYQG_gX%TmA<N?1jg;KSK4ZesM#0}9ZJQ?xo<SJ*ZV7faq?i9n z1$j|hLt)ziYgU~dqL8UC#O3^o=^|uajMwK-Qxm<qJE%uB%xr%dl3%jS&t~QDK!VkQ zh_t>W^OP#j-i)M?B8`<U`wcD>$9}O|HW+#4-cv4LAHf#dUEAN~@t%I=)2{>B7ngjw zY0BZe;^Qo)S3SJNbGb$pq)R#98-W{==wj-XdW+~~+1m?OyoO$ss0i#<g?zTGN`3dG zBkd|I12kY|rTElND<DCPHs~0&-*I=F-vBHSILLk->)Nex5KRoWcq??SyviPw7WfEq zH|J7%tHfaBf~WKP?E%`!-+!*G5(GYPKOU4zmZE3`5UGNP>PHgk&9_HKQB6j-g7liD z?G!FQWqnMWeev9?rG%H|e~HsA2h4H7-tlD1teF?tfZ=FnFxvR8ShsCv5|R4m_?}h< zH&j*!=tVfojO1x6%L8!=l(bC>=;ez{m8@ShV;ZX^UlDXPEP9-IXb|nm2zL5<;J)s0 zJQ*OkoljrExx00WZ~qT}p@MhkWT#{0(e^42<ae(`yRgDHa1pPWg)`b5722wx%!0Rv zoshT4%QweymU2o6;Po$;1y68((+1g1OdL1pocduYf|_OmnnPDHVKb+?$I{*mpj{_( z_01bsd#VwhA?$uW;z!8Q!dHj?0lc<FOX*&j4MC@tl>OS=onrk<7S^R!B+#H5x{=?= z^fde<!xoS{J`3nFVm)C)XkL#Idx&jX21bB+q;&+f^-guPk!WwBgSDVT&0$@WS&HLc ztA~O%ehXm9YXZfM{Ctyo?Ae<lbZw7cRxe-*L!S_yK(4ew3WvpolkIu#ZkQ#^-a-N8 zILyVKsk|TD)yufeY^9OS`{w8(5<hD-l0hhOW9ssQ3BrQ2akM{Y%ygJ6@-|>VP0T1d z!1INm1&vp$em>JNJuPztBkId1Usc^({LC+>)&QF(viJ!KFFNsj)DXd&=GibH-%}$Q z=Z+DCn(WdQJ@jU6Rkk!^;N_NENimn6<t(;=8Np%ns0=*yq&ow?%#CX>uCVF`)6U-_ z6$T3AhB5gTQ!9#OC$X@YU=dX7jIrVhQTtsd$SY4cGWJ&HpO}I8HEot=xZczn^o68T zVE`__eXzHl$5*U&u-S_`AFgxVa9wtjaiX9};Pg^v^S(>Qyvs*nRY&8v^Syk<T+-sb z2>BU19Zd6O&ZE8ZxFBpmytqzyF$qxbt~puYGd#>#ue#jLy}MlkP3Cnzb;*0Hs4}3} zOuwS3;m1S?!k2$wGI8weP7x{tq*(r&79by*b8t93(IP2!c*X9HE2NEsDJh+8F3!M0 zBo5YURkzX;N!7E8?R1RI#w^NlsGPP-S)x|OcGhCz0_Ombge8>Hm`zoL{O9#TH9-&i zMR7xDpdqql2{qlkNPsP&gHetS@6Ww?8R|7cJ(Lc1X1v2?RF^vArd*_hj`{w&THLS8 zn`TE*W~_m5m7dui9FiJ_9?`FR4n7V8>~wgG@l4d|X0|i;BOIgXa{vGXfKW41r5OQ? zH1^fQs>jYO_TLEH_uT*mo?ryTe{u^93niLjfrPl(qbC;3fk{{7ou-27^)AYgX?XUE zMvCZLwCq9&tq5bnqqMVzX(lCPrKVV>_+)=iF3K`0ShmBlX}!BGEi+hHK;D}*sUpG> z0GLLWJiHaKLcBu>$W<&m`8koePh5~|=K746-QLnGT}Q$9KjHg2@ed~YwK$Zdvjb(w zQbVF?D?ZiDmqTZ{0l}B%rr&u|B)r!_;nPGe6!-1W?FIV}5Fin{m%d1lx&4@4UJE*i zag7ADv}#|oIes$+#K>f)Is^gg)TK+Tg?>8-oZ|Z2KfTst05tcvb)A}Pt~sVK%4gW! zm9uHHfLx;3oU;4MJ>juvUcaBw0uO`T8i!;A39Zn<uh3eNu<rT-Ytlm~W%`t|SoLCP z()&9&FJ<}85kFN$mBH|dW?xm!DlS@=;<HSw(BA~1f`o8b(=UneF`rbRv3Zg05vjBm z=t@oM)<R7#c4B$DYaiH%B*F}LL)ss)gTwK$tubSZlM);9&UD-nL}wIo_D2Wn#caa? zVPmHe1`X48KPeGOSzauMer!U$iLlp{|MCaKHl*Zi*dn2$3;UJa0AA=vTBSwxP`5(s zzuR;%J+0TBy0AlC6gWXDI5}%Q`~GAbO3iz%K8lT7?JmrGZ?PS`DQq*8?rmJxE|RNZ zJ#3AhUqlK7{}FO@SQl8WvkK*N+0GbqCDWSKmB_sjBM;0zsq(en^!mMp{*C5I`=+oP zN#9^u$PbC`bEemBFn3sel+}Zwo{`FA$;tlGGy*eiwORd22H#IE-zVUFDyz@62@y>n zx_Rl-wCyYRb`8P_5a5(BiU@gel!E{3@=*18g=?{KkQTXdbeuFN^fE`ztbwn7=pbsd zKjoe)NW>+`#2b;+=9*_qXju&aOPIkG&Z0kNnrppu)j<~v%lXov`T*x}ApfyOM2Dz{ z<qf_8=9%7yTlLm7XSx#^TkUFVx_4<>l`-{pO2^NQ#cyQkEF0hA3S*VX({!kZ+Ww>= zQY1*Mcl(D*TGH|V-5Z`0MjwJlAhEvbhiX`2D^+DMO?skYituI?Q*tJ2Gp^DnOjg#s zhmTuEUFwz*KVCJ!m<K?m8_k{ir!?u?#v_&e{#PbaEfv&}*=U8=XHkCtB=pU<X||AZ z)QIL9V8r(V7d?K(hMsf~o^j290q#<a6yV|J5jWee@*WWO2efcEXu$tup()Igsvkpb zTfHNb;$L@7^`)ub)UUZdt80^`9FtM<aUx&!LmL#oajbCZ7;5}mbVAWc)<X|#ok&%N zKq%Z>%FTYhzf^WN&$`^*X<#G?6tY(%&Lh99aP+v8-jmjP;i;{TplA*CQTr`#M@DIH z@Bd$VGUNOf|1GwCK_Qr)<nmGDvtyQ-l@3q{PaVx}xOpME(&wm)7r+uD;R}mda3}i9 z=NIOzQ<41e;~vli(SB`%asHGJhs<`oaH8ksSI?DYIbwGIOtc9@XkgZ(2`<FdPBCyQ z^*90;W-g{uw~~$msB}p|WJdZSQ6cLAmdcf~Y*=g+Johq%*fk@xNtXi#Q%_UlkGm`E zfbaJn%+jAXnlBZW7POX8VWl<Nm^4vqS2aqK6Qp>%Ch68BmPeFS3@3K<kQc^;Y`s!| zMWBiR9M)B@Q4L4K&;1=Ib=)NH8eK-_7-IgAGWNpIS17FONIZPfTMfm6hP>0-eaxP> zN^CP{W<Lz5j-UVlGiSU!O5a{mT?vJy;--F)PjxJ#AN7Vze_UTS`t2K$3~3s)3uN}! zm4oc5Ii*TTvuvdX#<+1<rZi4{=t(&!|3B6X0n}n*u!rf-y54=a-PXbOmpc8*3F#vx zO;nUp!^UmSkoFe28#9s00|T`f3Pl>}us(3kEW5WqYBZTDYP){j`GKXrhgmwr9#v%@ z@eUWI$%l<PEFTYV4vd%7$Z7pPCPPTcfNf&YQ4j5>2<jm};;TRAoszGg?55bgf&#*T z7Soy}J(|U#Nqpbhac-)8*8&jTq96{81a7#yrXw9%NPAfQ`Te{!W&DKa4(ewiJQe2X zVk0{hJarH?k!3z7wp2m{$2^D>K-(-G7va4A5q9^2DboLi5Q3l;lUxyo%X8dXF~}rJ zLZ1T(wZ<je%`P05X=^<VJE{H>bZ=zSG1!|t#FdP8+8x$!_;{C;8K8x-@ngi{{SV-W zs}{1!r_GfFf2JA(SgWh3)JQj^pF>t3q$9S}OqcXJmUTpgj@E8Ru2`VuTe(xaF5LRl z89OJ+7o?xNJ4!4)pzKnh`uO?)_jbBPJD2a|ZU$BqP51r0WsHr-GuapO!jtbT8~9sV zd8CwZCu6#9CO4$I;-Fk`4XCkY@&2?KTfz6~m`X@YCwIcG;`rrsYP>PKK%b1CXPnq# z&9G4#D+gERCx`wK+zX;8)AaIx$aj1>uyJo?Ux-+m$*?~QA<V`eZAkn`G+1Gc^zX#& zV|Y!^TgO}&G!Lu%zR3*mx^#pi+r`8=d9}sxWK;3KbTL_2VI0c=gUCOR2J+yJ{H!e; z5PlftaY|DD{<46;xxK@=+}jm3E+xqN08F*m*}tIwokT@;qePHk&{oOTj;DT+uQ9X| zZu#|D;LosldC=kC%>nL%H|q_xgEqP>VLh!=P2@w)J7_tRm$^y*S4x9;8&;g4OZPf^ z{&t0f<ESH@y;14DNGDQfxWS9YPG^!~&Z{qGRy|egD0wBq>AH*Ey`1^eEn9_^x$0-1 z_6!crP!TQm$QV%D|K`ho&Ab=-A50f7N)eoB>G^R#T5k#d2-3NgqJs+ZqxhEXg_6$n zhC?Fglpuf4Hq7#^cKR4^Os!Xikc)*wUJ9B0PrU<45J;xBTQT#GEG!KPLc-x<l7kJr z0&U+J)*jrv@Hkqxvei;EwGDsv1NK(>Un>^;>?S#0_jGcxsX+o-T<jwYD0@>qX2F9% zhL-N5xJ6GjGj%Iq000{Y_YieR9mRKCAQOW9))w4CxLm*hJU~f*O1dkz`3WhtNGVdk z)(ZjDVaYi3B=ezAOEeLLM7dR)28JMb(}RMJ!G2SJJ5xF9R@iqpAzSLPXV>4np+<0o z&K==GbD~*{Sgpo%>CVuL=_y8urG}k5`I&WBp4Hnc&z7W1NVj|SZVkT6{-+3F&Ajm% z(#86a+09asbO~Ap-+LY>>OE$193*^9DyNPz@iRA}^?Wb=oF_CHj63^&-zGzh!LB$b z(x?|j9YQYC-4=FEBA`!kS`IHNVWpb2l*))=xLCP3JXh=>VnOcx4l~bV%Pz-)OWV=; zZk@)iPisznhgI-rA8YQ;_F&I#s;E~K?%oS%6Pg7u)J^L|_`uPqej2BsXTdgw;WIG! z-g-MAWSl}Y5xx)^1H1bx)q}FER`qUP0_@W3M1BQP5{~=<vMF<hR#oxRuV|pVr`2}| z@!NQosucQt_^7ukMYKE4&TVv|foENT+wo3pr4Q)c<%ThAtw4a{>IfXx7lZp?Qau{U zojzlc1%I;R5OR^&F8YkcR2H9eHr15i_AR7?LkjD#EHu4;aZ&GB3p&hoWP6TsbD#t< z`GFE&d~!m#M(BfC{hACJhg63Wm%<=ec3G=C>^t%8U9=IGUo(;A8j6cLm<8^dDXXg8 zj7PcYtPb3EsRNVh84@@&AqZ|QyeMQG0$VQ&<_GTjmmoh+*PdO`Cldyk&&n^>$PYe< zUJC69-_p~7;P9vWvKpgT_d+#1sm&2$RQ-QvGxQD{eM!&v4O3d?y-N7sJg#^N!b~%1 zY<-H_+28Wx@auqYQ!2e7Xs~tt!aX!<Xv|=DWS6hQ1PXS~%NQOpUt?SEpnf+<St0d3 z9OX0N1c9{TMYU=JGEz2_Wv!ldrn?-r1f7E14hVec{Dr}u=3)aFc-&g*{lskysX=cH zP-VM6nQ?)X0eBV7bcxapQyt8|cNdkiqGVzAcblDvvvQto8?EW5w}adC*W4Q;bSjAH z56H<+*a%>-G^)vmZ{5ix1A?M77dAq;^%UNxFTs!Cd5YlCM4E7s{dSU}Khf;uW+2Sz zi#33u+n2>1hBN{Llc=raJMer$5Ju+c_FXjQfbOIP9bhmT41>O_W5~+@0k%reFs5xQ z*251><`};RNwe9>%-tRm6rCfipc!^C!RTMj@Kx1>{u>uoKBY##x0NpkeCFrmnRj_% zg1VXUyPj8PRy&&PJOo>$TMAq22*xon7^dyf@2OuQCBBas<sz{;-v+{_^k__3(`g{n zc(5xyS8mxoI>n@>*F-2az8EFO=YrMZ)IhIfLxF{+&@qQ|-2*&K%0W@E#pKAhuSK1? z1rKd~)7}*q4TdYDyi({FZu1?g+}$^H)@J)bwNltdKv+#l%k6NVohSaq!7f#lUN6%J z$Gy1AsPTR@p6(Qt*8pmwn6g5n!tKG?_T(*-%IqBv$iu6&XM9XD=|1HxjVC&r`b#l= zg)G00d1)1!h=Te->nVrI#)oM)ncgZ_<=&HA5o?wyqfSiFLS(PIv^wsfOoM=Qefl}* z!~6s!lxZ2}hLnE{g|>VzV3EVzNcHO$|Bl~TiG2u5LWb7Y6_QSZKD_lKeU@?KlGt%2 zQCn&bPIkdmj860d1l0!yR@I-zrkp>xu;dH_8S4(=S5u|q-S;M*PS%KEVZqah$U^6< z%4&pNRxgiRA<JEbx&EkdQ9e9RY4Odh;C{bXd2ff17q!M!hQ|Ag!1J%zW}WlRdcmw9 zOftG|H*KjoaC2Z8@iJ6KJ;uz&U04}-uWX`k?QbnVm9vLC3Gg5oK4<B+3QMDrrP5-i z??Ek2p6Kl=Zgi_b?#?#67n;BDB_4JF2d>Q+l0ciFD{2smw*F2D_uh}exJlkQfo1NM zobh02z5PpiDrp_Ec6?(%PRbH!I^rpqNc2^?_mArhRl&(uOH|Hqv`AP^^|tVcr11EA z9PP)~aG1Ig^N+I=<+LBgTDoQ2H+>ezR-<!I*;)Imrvj12Gqv~$N#Aay-(qKf2QU4e zHZ6^*V&)o5g?2viKoLX%F{c`5Ii%R~vh&`Rkor?^z&|Ro;GTQE2TY!#y_I~u_`~hR zUpS;{&f-TJj1up7disEfU@7*s@hRFMQdawjf_<NxzQg4wJBVkwna)MA5j}px6B~JZ z-?{s=lcW{1All@KA;afNE8GEVjyWYP33;e9%dF-5L_&dr#N&%qCRirm(lIBxrH=PM z$)8<uw{momjsS6(DvT&Sn}4_Fb_Ygl*V}t&%ZcwouAtBwQagslD@Gq-B!mUigbX5_ ze*B63B)_jXxf&i0ArdTF2f~wtDIh%1Pg`#zs`ByK5K}kegTuUc6jj5bPY({-0009! zDIBxmG3Z%o!zIm!$O_xFgS;)}j#m9yyk=&@KJgiG2CANL4kDvRN(2q6FTektK+J8+ zJ`%Rk%iXPW>MF}wA3-BTv{8;?z0{gcttUDIm9-iH@fvHEV)o$<xHsUFD|E>tK4=y= zXSCZ?4a_Y6=nr~LNE@Za7<lmr0uyBlLiM9!6;83-f_H|=Z<mV+Mp)yiS?2vBdc8<x z@_{>)UIOk3E4+mk<>t)`Z5SOJUpBECGDbRq{lK5KKXF1p3CjkPei1_m#&<VM$h`!o zG~d|~O5E!aHiaBCE$zK&LvBxzon1`R%A*L6rjE<qq66Wn41!_e)hu;h{(0nF=@tc^ zshVVM^egFj($<*~2Zh%otf~azCLpn%;L;4b4}?8?3I`>U)-Jyjsv4!KCy}`3R>WfJ zv!vpsyXMG(hdOye?j6YCpPhYuB!Cv+?$*|pYIuOjnO&#SKQH}EdZ|g$nSotS>uje% zHhD$iM4X;IESxP=TLWk&r908*8D*`IJNnRlNN7b#(?qF|)Q^86W*sYM2oJ^+Lec|l z(_!Po9w<XEf>8ijY9HTByuDK<rvdMuJ^W@B<O9UP2}+X%LZa7G*CsDgo!C8kJ#oI9 zFzojs<^E_t_g`5M<PP@Fvr(ABItB5!-P=G$k6n1E*h+k72PQMG@e{5yz;RFxb6ik{ zGMFtE1$-^0Lfh0*QTaM7xbI->#5_zynFYB}3(TU?G;^#@EuXDwyb^hqddBTV0Ymc2 zpOLE+I=vCmnHk~g91X4Y2*66FIs5^?^EkGU(_Ryv0a#-Uc;~Zhu}u66XK=<3dQ?UO z!5Sfe4}gN~xiMa4sfnxo4@|v%3xW2v@i5(C{P&2!l=fz-Kvab8=$UXSPHHw)Y-@wu zX0ML>93yWIji(#9Vi;R}DJh!etPh}?-{6=B^u^t(0{w`UJNrE;GqYhw#qW`qlLBLx zRw>Z%$oy^iQ`#>2CCQ6!t`ItL`0aN0h=M6X)$lX0#8>L83ByY>A>TE2zX(_wusy#Y z*v4@7%Yo@}<k47bX5_o&!ETpCISaL86W(J&Q8nTfBFO+$tcHVKlvcxC-<xx9Z|2Hh zQ|kJbG94NbB8XEjjTZLy@@@qjn0M^ao<wIERf=`?H4fZsy-<5>$7rAoD7jy^VQ?|5 zetun!gbfvl%pmZhDrD6HFJK9aXJH&jwh+}SA5f9p?y_|~x#w)54QW&rtf&`4uHJA* z)*y2Z90P_|<328FxQIM$BGQyj*GR9@wuw<X>Y-WWngSlH4pXmF09x~jkFSm?-WuTw zrD@y6(s;9%=@k%esy;ZqFJ62*)yTf`Sg;1#ROkHQ+=~`zZ>eGZtq8{$ihx7JX_b!4 z))=#o_mlU)f5{Ae^$Xz-uidNP0`MU1uqEbN;N)od@Xcsi=ZbV~5(1I#fJb7}N}rHP z2M(5hKy3Y~Z1V=+XDz#(+--TO6_2wJAzItnglDeqPd4IKWBRZs#@pK2W<!)92=|jg zbQo1Dh(Yizz)?+*-5;1Y=5eFy=kC={$kmD+=%xZqR){$ySqRRO6p^maDMqu33<5kX zi3d=y(G2)3p4UOSyF@E*<zheqc*JO&_3&32`++t-*E|?!<Z6BKGKUEr5dGadMC<c? z0)C{`=PA|qiK6_d{H0(+XtT-t2hR?FSqNsdr!sh%KuuRIdaSkgy8&8uZpkD-vUD^+ z;7HUwTE4j|cFcVrU;QM<CM8D`2r5Q(bS0?6Qn~fDV(H@m>a1j#)B1<hY!u$p14PkX zD_)<1qSB(LQn%;WZc2B@)lQr04C%qQCug9w!jPpno2^E1piUDW-1l8NX9TyRVaKi3 zc@CXbIWKjvB7t6V479gV?c3WR3eZBo>g2}QtO9kg8Rm`N;7$VodtMntad|B+KyjYw zfcF{x%pEk)C;K@UCev}NedRyF;#giFB{m6^+T=B5D{vJ;H6e9qRf(y?^;Cd}2F*O2 zfj!LoewP@E!FWEu0gN%Hx2Y8ZW<qQ7DXj?Du#)q0l<<Tt+Oa`d8b&vo8MtY<z0qiP zhh)=YMUn8Q!@d{&x1-wjfK~q0Q%$1j^cC0RF1rT)tl>mDh5?H=udEqLc6Ug!K!?fr zmn7l?>#>K%7^)CH*d%Flan;ggIfb;yTY8GhwXC`5uQ2pX?e3<^wZJ5blhn9=RySw_ zwJJP7{Z<Iyp*r=bx=WWc0Kw3+1B##78I8g4nd!j^9G=1R!b-}6dWeS1STXm>3fAj( z5XV%28Lh;(BHg)(o^wH5%>xNs({&AT@E-53R|Z^!)qXqS-f!M)g=nmp*<Q(VEaSKB zUliSYGkB>-NXU3W<%~+$uHdA2@Wa_~{{t0F|2uM&ijj1qeRAj33@QLpC4iKD5R1&D z|7Q%VWMj|msDk^vMCftvLZ1M2jN^Ip>YiUDQ^AHk@4idiN3?-ajjQ1jnb?H(5LX>} z*TGpOg;V^BWI1K>44x_X8-a<^c!Q5>R-v(>y{tK^`JL_zaZZerWTkZ>XOj-`1*Dp& zC9>($>&HWaaiO$SeA0nTrUqL#**HJnUm7=)Z5Jjkl(fz+*@C=7!qOCn))r<CFO>_l z;Sn{kqKf4_kk~OVvCs$s`6yMJ1UFQ@$*bnFxCqMD;CR!^&4PP~dItHAtj`z0W%f;7 zy+Gd&IP7IQ1<K*65HKFy^DUq?1SAy3!ryixjL4|!3CO)4%z_0*1v-64EW;Msd!(^S zMfiLtbU&9_3h>qV0lg;!L?Y$1SRC2oxc*zu4J24oye1d$x2ZGx58szRUwYxSQmSoP z1pcdg)+K0gdSK-N_Fz-B;}%S*kxWs9kt03!)-$p{{i|5i!>OVbW7f{%E80io+iXq6 z)$6X%yaw;=r*-3hL9+%aaV9qaSQz(}mYE~K-Qa%t9H<0`m6UIFe5(G6r7feq$*4ro z)s;>r8d7-&e2p`LF5i-D0!1o}lA-UIm10Egb#p4R$xBcG0NmgW5wgl1)ia^rF1O-5 zu1GU?--nr;tF@6Ns7$AOBl7}V<`<fzu$bHpg-aepWXIJbDutiU%=Z**AdlU<*(YfR z0_1C0)rvT>&3w{-elJOkl1Hb2mOTZGIKpndWS{XMMSt8MC7w@dQn|pQfeH-!bsH4I z7iKYJ^K)_ShUHU7h-yAlRhH_nux9zs56O9(Oz%8_$bWxdze7Vl{n^YL4+MF}uodmA z@YSq9FzJO<mk9qUM()#~aY$R`C?hJGhsc@_n*qyFLo%*r=35u>fe@!eMReTZIhdVc z9PEAUz5joauGL;^E?3ZRZ~>)#zYG0LK?troPs`Y?S=1id&98}m>2>65xVL*lwPWQ8 zLe%}%d_0&!cf;k)I$T}#QF18MJ8`b{LD^_H+yBG$jxcr}um|0(D<^S3G&_In0Bs{V zvDj%EX9I4N3sBbph$dnVislCUw6H>vbs=Rt)<_3)dywZz8LwX*WM2sNw@LErhN7rR z!A0Rp;oS;TStcR)8?>^AO$khPY79;c)|eDK{0J+2b^7q%AzSrFCN>AJb7cg}m~?#b zYbcml!f|`_nTxBEQ%rOIF1@|WAUAfr2JmqJIwzWj6<%T9wv<cNvXKoJ@Z+dtcksxi zF8I<DH`Huk6xwGXPc*^Vx#%q_BVTJQWI9p64U~LtSc+-Cj!EglX8T%O5pgP-ooC3K ziZHEorY(5H{^e7-?RkfI2@3oSS9{5<vg@PwWfDKNP8+_Nyrpk|P((^1;k)j}u_wAf zI}m%4I_NS42``xJ(>2?$y8vV;t#4m9Ojbe4#P{=UFU%wc1}P+{Oj<e^qDg)jUL{!O zCjTLIpL<3*K#sDDu{`+PPMLSAfbAP1y@5?<uXJ`Mil@7SSDWMjeC9b<|B*6hPSL{2 zFmJstYCSY-(Ax0Y^1>h>;gedyF}%2&HKmQ2L`$RE0df8I*=5&o<b2akWH1+P!1zI^ zIo5yxyJV(#3?B2_r)Z35VnwF60JQ!+eu^<47}_{w@-p(<qP$hSIi*y`#h~>7+PSqt zN#$wvWKI>z_m9?OO1QVa63h!scq(G0G!SH-XL-s8_Tiz02g1rha!1@zhFr5KZ(Z+( zaN44so9vt)@2`y;$+nA=7fM=ZBY_hG)5Mx4i_L$=lk0cSc%m9EDOx*{j5nyQm`?pu zRFDgUq6LU%?6c!zoYfo-aK+)?eSIIk*AYrXgfqGEfY5(kjpbMy5;lNqT$to3D{CN5 zq;8w^QRN*3YCpgNoHy_-;$fnCSnD{FQ!tnm^?cI;U3B#xd>l75(q4YOxlaxC>^xg@ zt`|5<6MWvV+PR8}&Osx#5!<XS4$?MM&0#6gy`rn$Ks<;f(!ppj5-t7<t*cpRVN+0i zdFbXbfB}xABF7v2O0^~!TDPbG`JV<TmUT&I303rL`eKR2U^7gHD()J5uBJExIUB8F z#&iGqWo)?>>M#}cxCkk%(16U)W=7(|G2FgFMXOY?_)Q!_QU?3y5xQ|mq3CcVJ3!?I z8ejn-hZye;kxf3xD6~M&f0rQ7qmf=SXZb*!G571u)4P>M%ON6?7skC2H=`G_)}*)w zDn9en#O<b>@fv7CzzMo_ABI#%WV_*AIe0pC>T>`91{tf56jO#?l1;|FjhSh~CC!J( z3fr}Vye-txwf8N?Az+z==l;>Fy{(?Ut>AN<2|>EXy{@55RxkuHu$+Egc=xf*t&aUh zPxv(KUVzuBOG@xE=tq|2^G@#i;K*oSL5jDhgdo;t=P|tZnF`q~cp>Y9R&mhSVvd5N zu3*IfD#?*+OQcKaB;3ifDeTuWjHeaN^t;)-Rqg8hBj0TG=n-~^U802U6^FhMhCH?b zxRU^LY~>X(1<51uLUNLtqZJW|qCW;SXu@)}OOh7F(nuqZ_U9hlsjn4(fqRFEOeO_~ zpFholt)K$<j>FKma7eLb@4xu03#;r=l&S=$ZV-%<5pS{xn&B{SgJ~^_g9(WPH6}V= zJDML0B2CP4#<N2{wVv?n4JlB0VZ1}BDX*-W{SgBq=v!rhrQ7W>BKHg2D1>xj6O;RP zEhFSQc~roWQv27Ohv&;Tc&R#K(zef#MA^OIj&CoYxolGzpqZj#N#{Us|NNQ_46R09 zZNfz4^I>4lyd6)Ny3v0%jO3|r9e>rK@Q?+35?Bd9_>p1uF|*bI*w_<dlbfI{@Q6+v z7J=nzEg0>|V9o$`i_#qUuk(!kl{HL~GlE7`w)lWwOm=xqRyN=imf5)dP#v5-iR%Y% z&c$4JHxM(%0G`>q2TBVe`Xgdwm31x=VAK57R@VXb5{u^>l-=lwP|xuzi7LN?*fHHT z#u1SG-n^KVao{TzHBh)q0(q^OE=E+Nc3ectI6%Um8zcbdntG*;+WM!9*HQ~|7DJ3f zL+)U(9$%460+9>=7V<HQzqW*1@^ztp{WryTwC>-rkyvtb!F6&oIzP|`vSJjr60MN* zlQj%#%kUFtdr*<)1d#uy9Uj1HY*=bv`s7@K5x35EP9L6s+x#@{@gdL8pXPOBkCwAX zumv4^>-FPcsQIJ@Z6CnLb>zYNFnjf{@LyCPYpETKmgMb<tCe_Raar%wuF4L8M>Lhw zbHcKRCOlpiEYT1*RhKTiC_|!RVDDRM<}6(x1pOgZ#FS1$TZS-D<N?tEB3JB*4g2V` zDKL~V$ebSzoJ3Al3xrV)t?c#}qG`Fx_Hu;nR4mpTAR$AuZiEw}E3!O~OQm*%vAal` zDneM6RS;P5!|<|L^f1V%b|!*R^MkjloTXW&Qkq0b){P0|b>_w~)k7_6GjU4OMHlz% zSz2@9n5!lSTvtJ@D|=r2orOvFevGEmBhZG~<V%gsBVI~*RuDFi4(!!Vl&;;SC(_0d z(}{kqm2wcgL9)tUdlD5zL7vc~$3Je?>qrz>>Mlv)4C*<{`AZI5W@sDK7ECtzXJ#yg z6z}vlgiA!crENtIhDKLpL>+Bg;cbk8Gt6Akdkr}v#i2}sYGe*S4jX5(;V_aq4853! z&j*PV2PkndlSF!!=gzArMAn_3^Bx;UFti}8+hwM|7;-}$T$~tSzMb;HiuBQb^V}vd zgj#(NS_%gkR~Gly2WSUM*>o?nCQA0l?+J*-Aqa|LcA$gtfd3t5rw#d8>jf)EBRcP^ zSX=3WyUf@S7kb75qQAq2&skP^M*LaA@@Dt)4tC)ag6(V<SYbJbD|o^9z2_#RMIQ=P z|Gdf|17Lr%><R3hU_&VGNbUBBI~r~LooHK+U;_;gp#+z;$m@QcK8JkhI;rMBAYN;e z@;p#&Hp*_x94ahwm!<?GMjAV;t8Rb4XOSdTZB96#ZjBM`Nlct%Je2&0XvP+m6CeQd z&pBElPdCLQxddGRJz~&_i|MF$Px?S^={i_-8#lh`h<KNMFey0ThR<P8gdTm0;T1NV z^n97K>FyXQJjMHS<Z>&8&LIl#Tp`yia?ajYLF;G9^>@`a<07m$(*)n6tld311^qlN zl|azRg}|KWw!0n)CJa>ESzUD|JxcKy77As-s?5J(BXq20SU+wszuKHTqa9ZRcy?PC zogz8oR#wtL9yCRdL6i>zLHZKJ$a^Hd`$rY!x1)QGt_L?$|M}lHKC<WS5BgsN9!a_5 zI%zbQFaRd4yAl3IlkNAa{=MR5`61ed^T9+bMl-{mrYSDjH*hMGhJ=)1Rmo5GW(!|; zH6W9dA9~3Me*`4L;f`!xmujkz0!Lerst!AQ#F?PnU0IR8rZQzd6%8<?+>#@0{>#_e zkm(MVN{^`uC!7BHmK0_XLRTCPTBO&MEkKG<Qs;rJ{n4KDhI#Wu@yYadqJCMMhY00; zTY^D5kn7gk%d5iL|9QUPH`Ejo;V(iXj~KeB`9eP?ZsecpALLU%I^G5q^`pwRh&NH& znRXscPC`beL`AMVQO{bNw*clL2HKZ;tFTFp<x;jXF(`~+qZTi<qjlt}EP$2BpGBea z02i9NNP_txKufwo0ab!gnTJ1C@R|&wj6b(3FSdI02)jfs(C`6qO=3e7z}v`L@JlAO zNKJ@4%UuKzUB4?`Z-X5MR8hR1LKd>6)kLPSA-~8jas*(WBkW&2oGMd-$E#*Zj@Smi zmzGS#GNi*yq*U65ltj1N@TJiAE+U8|13cFWzhwXhXF*o>fIJbL8ippz`5$#EickdQ zp%810|J51`RB)*Skdkjr(kl&7!l*|!ZTHWzOI*YnP0b|SvGS4WqdF1kzfyTicBTEt zH9!H_#4ATS-|H?B*(HX)IT7mDJjhc{H?${m7fXYGKHC_ep48h4d{FX6U`OoB8AD#q zwTt<Dpq`$9QtySxoV50hdRg4Kt2uVVR;6a_y)w3n^Q6FgRHVlX3Hoxc&rL_bsplq@ z?`G#(r%0u06-UA4y!O^@N1eNpXxvTt%K+%9+KWFlcm1{<gfZfctNQmSWJRaDEZHhY z9k|IjiSC8p2HFVWR{k<d85fB2AGIkjR_*X_+jce01cZ#=!V#6;s?p0zB%eFDhj%Ea z&p{;OIPoFFDNS_jeOX&myeV4YDy-F7uOL%5gnOMfGDVHaewrl6LUHjuy%X(^h5eGp zc;8;AN|Qde893ujlCi^eSN3`4y$;S1#M;Yl;Pc6ky`w<AG;W)VOP>w1N&POt2yRla z{YrA|PS$lCRJY*;Gkz#K0004FYr#YAiW1)?%5F96Y|Bm=E^I!I;9WjaY)FKV#fML0 zzXt~sd=E0iJzt$*2k?kXist-FS2l+<oyNv(ts|~edpe*}lrsVMFc?>!QiDwn)y(FJ zf`!VIXdjMJAfaMEmA9FrMViwa`DW7;f<|#0YNJOlCeFaY=bDmr>E2**Cvq>=RslDg z?6+eUrm<bs`mYZ@?gCDvMlDz{v_p7Bxyi{Ps>-H7NdvCfwh-ag2b^DOT$rI}Hon%< zO+<t<4>|W+(p7-*$bn$;oD5_Y+TRR*)TFaFZE-;B^E;NL2@Z}&WjxB-a-ldi0lVtL zUcQME^}UR4whsO>$t{FfaXM37LFkg)U$bZVKq2!hGBnVJz$phu;A{Ru^%x^*?#pD3 zJFo=mZjb8&6TcSL-}sN3Vw|xtIX`Dmtxm-o6Ub?h01VY@s>s{oKCKZu*=uB3Z5(Cl zW?X8q7;QY6?Xp`ooLL6!>?ev(Gr3|U-A=YpPH_$WN+weZ5xd<%KW}mg-Dw~;=-;`e za;T^H26dj%sErsIkV$7kzB*A)s12Jdwc@cGTv(n>dn?jNp<9NvA=ZZ1)Ua_?#%-g_ zMX9uVtfoyBt^!PaV@~)~y1Cc}l9SM{&^aJIDh=usy}_HZVCW&0;mlcHfT-%XEj)3( zCK0sSc}ID+J2zf1{s)+o>Q#i$c?Fmc3^T>mrX|c^PA(#s{Bnnd-Lfr%=Me!N{Pt-_ zO;-uIQ5@5ypww5yG62}rgAR#(j1+o1<yy_GRW_~_!&h>?7tjl$M!;-^fU0>RcU`+! zjOs_o;v-Zyekt&zureR%WC6kiMlQ%(0+XgvU;uQTKzuqSYj-0uBW)Lm2NELAU9Zl& z$pPB9iB~26jS@9h_YB-jOECm`yC9jo{U{!z9cmbCSy9zYD~~L8qCQS(4EF5PR$o~% zUoL#lV&N&^k(JSd@ae667Dl!{RFwq)8EHyed%Nf_Y;kNnu}*%@mu6*L{_M;I7|lwD z4I0rlNa|rSWc$ljdJD(~yZ(4S5EFSa#8Y(kWXi5yCk2F)`Pn336qHCly<`?@Zwl|h ztA8YnNu~<%^2QnZxNz10R=Urr{#JcNa*z%S(;vNf+wc4+%!wy_kIcDHz+p@%8`j{n zpQno-$?Rf%P_`}iL3GFPsC(}OPqDS_&BfS+9xAIJSGe69scX2kqCkOjWaSd1_YY7J z=eXPE+wMZ|vY%E9^L&#P$}Thd@BV5>{kb5rdnI9)?M5QsgtY2(nsf{c-QJ35y*92J z3<7at3C5%BZ6KJ?aQhvsAVs#V9hp5t+|F4~sTlR>^e;^Rhz|K@x3ZqSAfhJlHT)&q zQ|L^`SnauD00gTTJP$eIa(lxVPM%0S&gN&?E+@<_18{ANUh)mHKX(pqd6PpibA(mM z#yUddfiLLEw7kx7ssYPez#piTQ2?&hdr-;`D%77a6FR|yjvQf$s^29&rtB*}u0(Vr zhr2d8+3hIiJ<anlmGW1*LlX4C(GKCF<&~mK3Cw;r>hD0(v(VGhl}9YRCVU5aw^-Oj zmrttVdtMF!Lu8v5SU7Kc@Y3e&No|ce6H^~>H>X{ea2-&d28Z%4f+1Vfc<6==8TX7t z5vE(bcsx?po=EkI7e%R-HgF=wNL9{k=n^&RO<mNC4!B;bk4%Rv+G59DZrl>eeMtPV z&Cr$Y@bF>n8MV)FLnu^!f1~j<rD>@?6PEDJ_9G7W>yCCzJnMO7|9uOwF6MHFj@NLK z_v<xul{V7qSC(`gwxlV+aPw=52Va@owIE5dng(-I4ke1T<Xvv$&Q2J9o&FhJ?UYl& zy94D?J>O4*rMD2@C|q=KM<;@k24oRL!O?hv2$+z0Cge2`yr^a?9&LIDR|wc~4y7ur z>#VX+GeJh`3Ib%?+9d(@huGXOKkt|0d_i_W!Ox0C!|8A80#QV}xbU+;CEVU_iJU*1 zxNAkzdHT#GpSXf;V3%z(2CUe&Xn>@Bm;t2Ou9|=wm$&&nWz*!|X1Le_l`p=*S29F2 zm-<*|Qk`s}cW^=R?jBc+6AOcSQnfSMGVWD0y$Py*Ni+k%3|RZnAV&+xfdu*xuvv(q z!R=z5mjzORsx&w`v26twBXv;F|M+sSblo+UC~s2e!5-yp8pMuffUG^=J`!ZO%m`9% zeH4@O97$3$2RnjK!B{@5c@(dOj+q`^R%UZfg3>t6lyv@Mx!>+!a)iPlb<=+R=*~$` z-ERwT_gfDm3NBf;Jg;xYA-M8~S>k*)IC~CX63lw}r<ie_Shcn846C5M8MQHs{0ux2 zsA5>)nSHaFqgmY1`4#Zz3{`Z|XPAna^RmY_4c%6Y1<Nc=JC2vpeZ*NQXMBR&?W$uE zzdd|qgaY;0t~?U-aTu&Y*Uui~KOd;@vF!QpvBPyz?;L%tb|rxmlth(I=oSaHQ>RWu z#cscgHUPoW*n0DaUzgTWbmHID*Fz@mN}eFI&pE-I)Wec$VZTxIVvtBk-tK~cdMqkp z)wqllK>f{ba1)absV^J(zlx4=3cr)fx}!>cU<B|Hd77cqf(8_SOlZnTO1uA<B~N$R zyQyM&O@{yYeX4`><yCh>3v9k$i|LvPNbmrAgZKMAH250l3;fiMLF@jqhGQ&163$|= z_y4)yRz0T}C+uV3xTz{BO(fp-+z$c`d?$41$C0f*>7;Ie$W6s=ieUDWQ0@f^UL2ne zhw_X4;I@aD%m<X{I~R#A+&nI>UZ>I*g5>UvZmM_^tv?-To%fr`wU#DhCQ7{rMIGIH z%gc<HZMWk37Yzp~lHO0g{3XE$`|_VTpc3GCGb>*z|7&nxmrsREcHt(dRwVuTfp)Y7 ze>&9-^C5Pye_4HGh;Fc(-Q511nC$E3z!hMHOOLir{v@+Zn}uv;__)u@sHtzl1ONaA z@0MXd$k|kF(~^%md@su!v*9u4qnGXlJKaZ$3q|nP?WsMe%e8m3TLEkTc7~ZkM#or+ zQ}>w=cniCu%;v8Nm=EL$KWhW`oam}-{-k98Ld6t*NJtcu{ZuFhzZBgWo@;ZL>-<HN zB976Mkl981$}Npa2aLc6mX5JHrQwlEEvTjzEA2{+<9~8pqXZ?5pm|ysEIE|fq9d;1 zajbaiCpde3kIo4UH!ySdO{rVYAUm7WpX+MN$zdHy{B5mqpAS5?qZZ(i{Ko&FwRZ=h z#z^<S5g6#GMt_axJ5~#iJ)^5}yvwP-0#r2@ZFS4k1}@(I0w;`Ak<1{ec6~nNVPx`^ zC>xYJIbJr;kz7Z}(cuBA@UWNEhXpBwicEcQN{Xk%RlN6jAHFC};ozHUhRwFs59*tt zvB)B|EWOidE1<qSe$x;Be%wVp`;ZwgGvziXj&=`ureMMAqCoL56#+1R4Ql0JTP?@< zWrBh)aEE))=J?J9rvXmG2nfqS3(%V07o)^ygvUa^qswW&Hx}IF*P-Q*W~vRu0PN>@ zF%y1|e*F>5O%B^*W;VBxNMW`;9h7$h{7S{qCDjGU(1pR@gEdV&hl9QsmrhN=d(8J+ znXrlZ0v;sed!tg5gdDSc^u{6eOkXQTiYZL*uyxj=<C4jpl<7JHW<`2smLgCo9JL%r z#Sw7CYwgUobNL+Hz7)eSTzGDtyQUE4Z)Ctm!$3_@A9ss+1(mF591jdB)EAFl6r3o% z5eliff5~Vez6T9rGq)y&GRAi##>ZEsn(5g16o^PAlpD#x7ke9Pqm7>uH)}s>TkoEW zVd(x<5J7)GQ<xL1@2@Ex|EnN2_qDsxfgINU(NYKxw1Ms3ys3e#r1^R1RjZM_rX{Ot ztx&FF`Rk<Gr9UCKX4l3OpL0+Q>|5k>_;uq*$j8vyRZ;jlt%M$z^t0?}-zTN$6Np&z zpU>)}$5(0jycRJ^ZkaT*_#zifq5Vrr>rNS2Rei<50of)!N4~xF_IHq?c#89ezzAik z=b115`=}0F)|;mD#PR>rVbF_J=Ik<4If0fxJx;D|OX2csi9Lf|ZP(D<yQ*0kOfu>2 z6<DY{tgtNSl%R>G8|D9TL%zgagDdUT-Yv)=8KL??Fdd+27ICWU@v)0RxpSY^B;gri z$%U50513d#n<Q>A2qp4|fYDnl6Nui5Yp+lkyLf{A)}U-O3{>(+dzneD(xc~^+*_ro zF#QJ!yci)j3@t4T9As=ZBiYSY9QrJm=oYRgNRr+owHp1T5*GfX*9&tkjEDIa5Sy^U zaXi04Va72E>Ma6jt-$Ta1ACz4BA0_*M4$i+4lm6NI8$Opk?^O(zQFgwYBO=Mgv6r^ zjTo&qZUdfq;9M?LsjKs<a4foP)owVKv6=AyVK-TSq9brU3Qi)2?sBfV&Uagnm}vn@ z%qGuHf6#41Hemuj-kL`{PA6!6={-v2x2ytLfL1qX1hpr(wN0;6#P8|C22tttpTzBA zNgQ9g59RTv5HJJM^tS90VUblTCrn0y;34zCbQ+fZUbLie36E^fhWRbTyCmwIdpq&8 zI(_oPTg*p^N@_ihL&w?5)Nez&Jh&?TSwY4i4t>}~2`4HkD!fxEx|3mS&HckID_%gL z)Y#Zo!u&O=Z)&CwQ*&cZ7pU;TqwfHZGklYZ1*pm!3$=0%D&(1!|6&M)Fc;md7%aNj z!+2E&tuxeI;I(%i9V+J?Ch?-EOvto0!n7bwH#BU82b2nYq`C5UMkeR4{O_6v?7e{_ zCqb_=OmkfN#^Sz6NFhVq|5dGsB>fp(MO~@wrs^;iII>c6QS05@IW7<6kuJ)U>+*87 z6fry$V^{xVJfC>%5kPGKn|$1Ni$W0$@g6|suAyp-p#=}NGigo37#sI*pVX~@r5wCa zG~}}|CUaNp&CKqkrPq}ytJyYZ_?Ad!NJ@;CuP=})n+My~KUE3{B`6Sxn#|ZCq;vZl z3sB7sRwi>DUP&Z1$g*!${cb*cU-YCC-{xeedY;8;r>nI*ng>4+mDSpKzR1;wqV4$C ztT-iKDa1%b7*|qshJp0;ir}q){B@KH!O1Cq4&*+6v^F1}Y$hwV`oT}_J-2#qdsGO} z9l{wu$uxuOcD^r8Eq}h#(#D?hbhMPOs;#d2Cwp<LwC)5PID3Q<%)_m<5XNc2l+4C- z5Wc#b<p;4ENg6HU8<Or9vJ(GdIJyD8RXLx9ONxy$IL~o%3gNk#bzVHG@Zps4K#qTM zXTFlc52G~<b`V)`ZGE$iJjns--Np%ak;Or}inr8mnAJnOLz-%jA@5f#mpb2{obog; zzO1O4>53RHXVWARny=9gvsJbksO0)9|130z&k2x-1(s;)agY(zv~V(^0N@a#@xC*_ zZgkVTJ=$K};rWHT1IZKjG#kmsz(5a1`rPsFgrurEbcQkT$=hyiIT$g{NF=E%S%(nQ zbp&meu6x7MxzTz-x-{@1Z<{imwLMX_3Z<u2!o))GB%N%RTgTQR9D372IFSmSqIkk$ zq3F?C(!KZp&lS)ni6PjDkWHDo0GIaG_Eg-d$abmx7;@0Tf2)q7W84XwIA@VD0=|sF zP|OrN8B{Rn^~9&vJFaskQ_Ukp+B6VMbMKkz@^-F8$*Ac<X;d-j(G#_CnbT;;_+3+S z{L3bU6D*{&?q(a3Z2{ttMbjakXbI>Q%Ej5T>!s8{+s;zV%i-m_^#Ab?b~UF-QFI7g zJ}K|(dd4ebC9e3BvSiwUQA)1f8@vXTy1J9LALD2*?mZY<v<AVk|He8ajs2yofzRUM z@VD@2G>xy?0Dm|M6q16-D8O)5`HH<OLzF@({knk0iMNcQ<E4*e%<5KE^;=5mx*cY= z3r4C5Q4*{^;OMd)2I@7}RJ~J}C{dfFTefZ6wr$(CZQHJ0wr$(Cc5#<&bE^N-J#+eg z-Q<&4xxR>a1B?w`dqhfsxBgWc;c1|eBsOfKi=Ss>#ebl;N#Y@np|IMICb_~u0~^Gb zqd%l6JZGKm6im~-mS9tvn9f$<QF`ms(PYX+y+${^tafZOTsP=!f8ahQ#(GcCE#4iv zm~dPOF^gG{Ud~>xPBfAehN^N~>nfM|g}s@ePM(UtkNYx4TLe(bX<;k9gC;!l{nET0 zg(gbw$RTJ&rYKN{!+JblQn;b)18UisB140NiiB}KIz`M4`m~^^CxW#1Sm&N8x_^s& zk7qu$v38$dd0@-7@gQ}$3|OHePXGlZzZ)7!n;t$BZ2Oua^XshB#$NvlnWwlXMy7q@ z86BO~3mZE*hOW1iBwhDW0}=7s{{imHf+e6d8N>!cm<7+^&xAII=-(j2dOQ%Q4s`Ym z6$K5?ewRvW%UUs<8r?-*{5+>K;2oM?Lsg_kg|THr$Q*$RQu}M{%>5E&I_6S3z6B5r z)uA;YZNVZwW2_OqUJo?T#~o<Pp2p;a36sn|Z>ow%ic90n#^KB!Ud+my4J237OjTqq zi=;2-aNvd6G?9zk0VH5QItMitCRmAzS;<@FKf_CJX9TPW5D=sYfSh}NxR2f=^_|Wx zn#M9HGo%Zl$n$6*^XysEun*$ptf!Y7x+|ZYLYF5POJ53cHQ3CHlOl)`L7O=^tdY#1 zknP&sYX?DJ{V;)nj0zbs9_$u4rctVp^i0bpt6ip(-_<}Yc-E|y+q)%*RHd?K^$FO| zdY2<i-J~IAa%;?fhzzYf3G5w)=y?X|?RP=$d~c$Y#j~CHo3KSz69Z}Oam}ekG#F&) z(uZjoa_uupF-^#tuX`Dy)NZ4nSXg9j*2bvvp^Sy3#K-nNG131a@{v(P_+@|8oJ<L4 zL-z2<ewT4^$5+-#hKC5$UpA?^ue%@o?Y#Z*fo1`2syFzT^zv#dqrJuc)8+$8ssj?( zp4{U|=m959il4sKI?d0`KRLVQlv3f?`!TUl4t(T>=OsBw4=%|+MF3m=A%|EI)&@nD zYr;jD<1gE)vSCsitc+Xb3=k-uaH(6>nOMVn2{2`E6^!I!zHBe^MW(ML<LZpUiWVA6 z#7T9xMjzKq6UJ#KML{6AL!@>pDLU38QE?Je;967|uuZT8gE}RH^@T8Ti`X1S7-nvy z%07+%SzybdtB6WeizdH@Nu)<&Hfsj|_58ILcllSsMjW-+3o16NXvN4)0F7#)<&x_p zKtx~I{xZL~i~T~z*vH6gjB8ShEKPy#o${^45T8!K@Z(1WrK2+0$Z1$G0=^2J)N<G> zJNv@nc^A6D{v8O&Mqm3B0E=vu9e%Mu&^og+N=}0x{bJp6zIt<e$^EQ3Z--d&E3{ju z0Qpc8{y{c8uaqu7Y!LQlK^Mz;YYpN;EojQeohi|oJt1Pp45Nz+zACmwhv*kf+2lIk z(uXpksAd1h%^Us4s{C8>4T*Z14oGE~lkm2V0i4t!@%zurUO&pUPW&&~^i$-YU-h2h z+V$PlSN<l$-Jj@uxz$FhCFE;VFNYSiKTPG%jx-BS8r6{7Oih!WH>gFv^~lDB^Xnaz z7(%fZdcK+o<V_=LhWldDNnW6U<w-)|cgYQ0oE@i%fr2+r6E6w%q|-sJGw_oCtZ@9x z(plFwq0dO?C0pX6ZwV9HIl<5ZLe3R@>CC7#CySaXBF2lHf)Sd6jt-{b@YAHB$1oVv zPKXY5*V5r4d3d;;tJ@Cwe<?~-`=6fhL;uqnFij5%-$?<uLe_U9q_=}o{YDAg`eytf z4|#I&)D!#Lie%WNe1f`wqJ_i@iG^c>X6vbr26A!5SNQ{-dg#Ez0OYULD(mNRpfY#* zhsigrc=2Wa-<A=7&O%UE&ahP=+9LN~yA-sYUu=Q<d{<%u8HiQ#6Aw&ZhyuIjG6D{e zp=c4!&r993?bvqceEJh+{pD3>78D?Z7BrYrI|>+Kd>vff9k0}GxIw3XR4EcZ`vQvr zJps!KAsS5loemO6!nv({){SH)@&Noc6x>t0)g*v2*VyiO-7I5G6)~vvgw!X$I^&$x zn1c|0uk3l=@gOZ&OQ^dGv$D|U)iqM<hzfGb2Bf&F@CD^2vO+CTXjL5noEe6plM+Hw zWc4fqXf+-mgfCSJ%7^?Si!;eaLlBq{fGMr&d83o*keQg5=#ua8$4A%n`<Ec8tSt=Y zUqse2^UtXid-GZxx|gt({VP?vCe2G+--Ht2cTTfJtorV-AWlwIjymY7%JQhz-(b@k z$FUezg$0~pJRHc4@iy=uN8fp2bAmoPgTssjvIH$Y%<vG~JS(=|qRR-zNrM?}4Lq3H zF2HoqF{nvgTs@9^R`ATA5(ErzfyrGHZcvuAa+mkb7Q4yjVjJ}TxhuOusFILR@txuL z-57^v5KoQ>SsI<%I+xYhB<B~!C8)Meugbil0lG7q98DcfC86)vk>D9IN7!^{mVgjg zH}oz<B;*82ONr>BYy9VODZ5;|MFZ)fR36Zd2Kz#M0%rQHFT4v{G^H<ISoTpd^L3Ma z=d<Oj7cS0I`v)*Mq8`0I-wSocjv${RQY_{cOY6_~tG@mh4Pk9v(DbpoMTQZn%>|(4 zL<S4_65TmAysNbcQ^KWNf#A7~;+x$Y>)#8#sU{z<<un`ok9HQPzwnl3I=>if5?(No z0Kg@ahkr!fh6k3`l~nQ$95O-{qi#Sm0+Ou<ifvEtt!*eSAB!%91pdvYY<)%Fd>4Xj zKhrL{vQ@GXHT%xJhX6o^a6|A^+VhX~?6)@N$zx5tdkE2MPUL8IXyC+;JRRqGj^#f4 zTc`{G@%P>ofNfnot=8m1sly>qQ2c37MT8w6U4@v<NZ(jLGLTmk%6^1S5?cm%(-Gq& z{(6&Y!!G|A_|D~(uU=+}UG@`&=l3Ms0{<%(ds}UGKWpQ3gRzaN;Jcx#HLAYOSv1pR z=joWVXo4;o@ooG)hr+vg4D69rRMqr!x}(6II!SvZm=C&NL$FLbIayFN-5zs)+?8jT zGwe<qj3DJo^s^UTH1=_-D#GvwS<e)DLp`Ly21=t35_E!eL)MyC4nz7@b@>SgfzD0z zHn8;*4gdgT@89I%zdzO_No5J2oSkeo7szu=Ta!BgKq+#ev_SkWm8w@LQT03IkbY%O zAyKPF<tYT#vcbP%bx#>84nKStyFW%Iv+3E^1EuB1A8YgcAfajQDj64-MvXMzmw&Gn zwu3EiSq+-KJ5u`B^<rbDs>Qdzq@RABNz+MHG}yOo-vI?*kZ}k1E%a4Bbsu>g`wEfl z0pNbjb)%gk6+*A|%6@rp7$OeOAbofnUxZEMF^y9*XoAw-l3PVMAr&4Nn{7jLl9Bqf zs)%iFhJ?cHJQ5POWwNB~(!6S`J2Z?tw~B*zlA#%g`s}p_)uEkTon*>|2c<|Ln?;4{ zh}0!e5|)z<?VG3B{zC<4tq(-i7Q6O<!(&<)7&jVk+Q7SfzBSgWU|CY{8O6zbb$w`- zV_@}A=OXtY<JoMFv0m0t-aN1YQoJxpu(geN2{*KY>H$P;H4*H-t{e`2Hs%tAn35|W zHTV6l10f8(fc=)UKCH{0p{YW;7aDmt*I=&@Srt;!1N%_+qoLG(DhXK*6dK*K!mA!+ zT<<#*+=}d26H{ro<jJf>-LcBPx$<YUu*-U>D87IBS2ry8N=t~7i3e`T0))T~BnK*$ ztI#~qvWO-($nK}0Fbp)F%2XWdo%JjmDm-jMM}7_WK>IDK6rI=<1Q6kR<=?H;#NfGT z(rZQl$>Odof<PvG=)y+<uiQx=+RIL5O@(98OngL~cjA0LzzVWQxKYXUN^@*a$01BO zen$+K<nlO_K*%>EkBBoc1}V9%Q3CSM1LP;Vr$GMYgFlEEvI)DWE9bn;<?!n(P0*Z* z)1_nGrP;>4yvlGh(QJt4%rKH`RujcE44H=maPEKgEtw1_+9+Vj>G2uJ@zFCr?ZMrs zh^>2Pao5Lg^;_jk?L7QnE&y}c6;#x5r4|S8u*RiCraLePzD5czG8WvgW}e@KK}x5s zKza<=r`uFyR$X!u+cFr;{x08i+hK-LN31Q4;J!F+JcDd9wQUgbf_72ZT=+ggzKczJ z1FfzNLMw|Ts@@7rceo<KwKD?`d+FKx0u_+Jl6#oNCV%blr?^<7_C6fmJPV@kvmjG1 zaNnj&IE6}pyoknKl0GC~ew+?tn60W5$=9O&v8{E6vGLM^J8^9_9gCmfmV<#@m?#3t zK-C*dhF+5+teut8<G@Lmj^G<#dyHLVj?>GM8`BlgoYKiS7>_$0N?)oX6TR1S!LrR| z&*H*~JfR2_N~UN-jB^tlLCw*6^1Nis<hUcHuQt*b8WYfq0jkhB7S)5xArFaU)4@bf z0%@bd5!E9k0cTb{COuPzXhg6F>1?fSX<h@$SY)w`u?4&RdPpQaS-#es9!CbLf|Nco z+RX_Wqu#lWQ)8tdke1E~F;q`a;(VBHC&+zrP&bia85x^NeP)YJO4M&7=v!NHm`HxE z6eP*vy6AKBg)2ZLlzA4Ag~(f)bVW&CCzGVrnd@{(X-Dpfi`62Ik^ibrsVX)>dJU6D zuJjP-;CaarC@*Bc#M2;*IO%}q5IMg-D+O?+5E4QO)=q3hBCb}~?duMVb5Wt$LkfKy zIj`>EzSsn>{tc35M);XxE_5Y`KgaNiO;w9uz@cCL9Yj)UUi)IMbCxt41Ywbiz$D9K zwd+><px@BbKLBY+Xcr+bw-X@{6zCy<r95(9h!<G}q6+WeLVlP?2UNw!<tU%}B;tVR z1;@c2S+bJtr4gZrf?U|zz5rG_pRC~Ck<JG4D3)TcFyM{gB)o2-`A6O9c21QEA~o+s z^V6!}W+KdF>^|(|D&F6~Q5O*8UpQ~n6&iFqb)WZ;t#LB2P=u!UW?n^#jm2l;$CmqX zexBJX59iUPKMI=e7li6h=SSP%&Q!rNN;0P=06?xA6C<X!Ho?b5lzc=_)C&buxtrd& z*0?IzUhxO`FI}Z|c|`lN1Zo}4V#Q+`w=+C8fcl>z>V%zqOF{G6PTyua|GLPpfX^UL z5eonSoHvSxvcdm<osmyKO_v7u;9me>)3ko!|ILc{A!7Qi)G5B*osUwTPD;caSiVxY z=nQ<cMMF*V-e|N{MFD{hdlhIqB`Hw~#}o`V;2s{cE)f)6ap`WAr_TQ=?5%-VJsC#< zn}cgTRH92+#)nz>S(wj6^yBSPNv;`9RNRmU>6EAxBWflWZ`e6i4zb#_-Za^XVw;<4 zY;$vUk^>qHd$q!A_<C<$NTRw~DXvVY=cZ@G9Bz^@0S5tx29-<M$jOga3X}D$;TF!! zk+3*5bwHf0hm87K2&o<bBvoenm&f_;<8UR-2)`prG$3_uSH319Pp<j%B?<l(V5#X7 zc$TDh(nukK(7|v?#{)T}ozXZw<BfJx2Z3&<&IHy3xjZDYcx;gqEyf<b>~9A4Y(pbT zpwFjCLr=p(NfW&g8TI^eJ<%jJkkB@qe0oZyX=L0WcuH`fVYhR%%bmh@#b;s-*CN1G zF2rCp31w)BR1ymU4vtsBT?pqiLd!k-OUfYE-q47?6kk?mqdjMO>)&Ste~X%l9?4=# z&+s+(scw2<zsAK=ws(1%QZc{^y<9QIB?zT^%6gLNHTHL9_0EtO`uft&gLEbT#J+Z9 z)`eg}qm`l@?NxW8wnFQa_^?F=^e>5Gt6h}F^Epn8^OZkiB$qOAD?Ao_%mI=tsqU%z z3~jL{KDR8|W>E7*GfWx!$w%iblMslO+TQ2=_Mb6K+n{+|i`IXJOv6*U(ic2HY`md* zADJx7vp=K?ep2>RHI5v?jAXXPst2c*0%gpqHhh6PYKYgZcrJ4i4;xL>;WeZY-1Qh2 zI$NBtP%f@{<Jp*js}WpJnUf`b$VLv4r9wfi1*8ku2=vr?z)i4MgPUxRHr^v;ONy?P z8~QyGv6uCMW)JPt*3(NoUqG3vsfAxmm<4<;UY?WSaKS7Mw4@(G1-YBIL;(FIlzB`G zxPem}iNh}u3R+`TMai!Bqi+$4paRciVz%R|PqYsD(6#W><oqNY-Kt+-9(%{L?8T1o za)md^B$b}6Fy^fVNUR1w)Tz3Oi_`?j8`D96&1oTjOX?;4b1AclF67Q>L@?}G5Gq$J zu#&?G2z2H_ti<wjJHvP!nR-7&*6ba=0hP)g8YJoV<k~b@o+1<I%;Ou{>tu%Zfn0=> z<Sp;({}{u1FqDxE1S}Z>so<H(#z8=3>!oFYcRhtmNC3+>vE0O&oEkcDJ7cO=i4Sy# z(e-bd+`E?qdlokv$&H17NC|xx7pW1DKW6EIss!(Z%O{IGdDLqPV4S!J0gsPFfa<n) ziiEbcBf5=F-p=g-D=;uRodWh*Ht3}PzM;n|_h|_L0EmU8JKG3r%h>m947=GgNJQz4 zzbOEy1dM;~DX8BS<4-l=yYqEhaTVZ>HOCHYHZ;iuz<+%RW*8u%d6H(B>`)uh_Ye5# z3QPJR5Pmrny_z9E#HNaEa#B2Jw|z8Db0K4y0HFIJz0ID?ABv$OtoZQ!k1jcD4$0jX z0qpG?0hJe;(P@7T<EJrx9bYa-duMAECq1oad6Yzd{V?_b0OC2CHhqZQKhXZ4tmswN z*}!4l@)N6*cWm1Rs8jSMdLib+@fi;E1sMyGL(MYKh;MQEp{#pLn*;GuME0BFN<Aj8 z#J=8e?(r_Nrra=%Wc;GeJA^qS1}O77Bh}W1oc0ZPgp8x967~X?vVp9v@(=w0L|#<h zuVHAi0g^Z8ooi*R&@HT(W!J=@3w!w9f(i-(z#O|)6Sb)A@IwQqO2ny>OR|IBwlYx5 zuoz$2wq^L&n;BnAbPz30vHh}lt<hnMwS}IH*LM`XgpfU&BoZDZZDUzUGt$hAT&*Am z<V5D2>!Zz_?9<@>W)|_`jsZowW)n|#_XI$vDY9cB(@R|cP+Ej)0)E+bP0&)FhAATR z<*65S{$~PV<Uk<KDB#G_8VmU6v&EIu48}2N=^{g2%EiHPGuxvKwdUR}`^^Wa@CRWa z<{Z)QhLy{y?h7+-vUy-J`#kLY@ztZp@^9EF08}*#*3mr@tyW3=pv6AY7-Zm!l2@L6 zuOoIDN)%o=kZ?1cg1jW4k0Jely7IDvK*t99AlT+D2LJ$aa5!~xm|=C2RIc#t@##iW zwLH(1(}hzgt@<zGZ+a7&i)h%y&Oi;+-D=}j2PY!d(^XHKUK=HJg1RKwAaDenloWPW zP6+uXQ@(!n9)`l}0MIhZw;K0fp>r%VcCgju0;W~SrDSy`?AWJbA^?JPDic&|-MR*P zIZ6qAxfV=l@4t^)XzuCguJn5OpGg9wJ-dcEi-)*>isce2MKd}ypd1Z+nCa%RtXSmn zi#6ZYS8LmvO}ZqPH)LHkLZX!~I)Be#;Cv8!f+o`m)yw$YYQ7st$rrSoZ`YqqkadVT z3Qz!t+{c~D2_u0x6Ya%ezVv>TZUvEx-*7)mXY4e?$hU|I5`Ud3wGlh8??c2kN3p^q z2NG_+QxHHVH{+|Rh?{gT>QZ`enO@oNti>?1{Z5p_^o(T7dVS+RZG!*3{r+o50Gv;K zZcVZxfurG%C_SPpa)x2_Ps9X?zgYCJKNY1qmXwIuI~UMHVA~CnL4l1q`~1({0002+ zp)P`!9+CMX%01T<<1$D@>6O0%^=d3g5uVCmTr*X7kT3<XB81A{cf4cRT0kW_O0!F7 zNxDW_HN(Qz^F*vULhTR{4`vY?z#jLgle2^A!Aa)xK?Tkhso1o74S`qhkYM}wPr84h z)F%P-L|iPZ(bH3#taQXa$<7PVz$N{d8JJmIpLtt1-j<29{v%yZUsrNURV3z+BT$|i zTT3OTTt?EHX)zR&Ys1?Of&8{YTo&xSj8iSz0d~zQC31FX`NFQpk8MCpV);^_)l8l9 zIy}_zsedQ^irr*ao!`=I%Vc15*vY_lyai-j{Tb5S@-livlp`a?5|1<gFefb?6)oTs z*kNo+_TME%EB~XyZTQ*~((O-fO<iQy>c{QKn|zAB448UDdAQ59eL8QJGgK3xmw)LX z{Gy;FozRimXG7o#^pgcjrL)%9=s_Jy*j(UI^aTtM1xl2c64QY)gy)q{OYPd>1$kCI zwx=VfD@mzUsse_3OF%ZNk<$&lkrhhCiBq~(OrKi&Yj2<yyv)+WRxzIrMG`}QSMfje z28HcU*z#Xu(DA)|HpRH*gy5swanhfN(RJ^$L^vq)E+|nJVs-3xlO$m>r^;kv);vV_ z_(4Fi@|NI?h?g3hfw!*W&Lb9#uGwU98c#TlQ69TgdHI@-C3Abmt4@1xZp?!IVcgEd zOpI^Lu^Zczs@jzbm3A+7COma~^AD9sB7!-KFE?^J9%0dfK{;;|m#*uwsu7vn5gmQm z9t(KBMA|Y~Ln*l!pijvtVS6z#xgz!kAGgP?uKacjzLjqQvc+Ki6j#JbgA|~57i&!P zxoB$dOfMWL{V;Ko^!H;~Mb->}M`CZh^%%f!dW$hy(Xf_pTCCMvo>51Tv}~cds#2$I zn9OYGs?rYYmcfldbYZ_|yeBlNuGq$oBMB4NShmMKL41{9uJj7miNS<-e(1Yp_q}#G zEHE@qB@QUBt^#Oi5Ga6}gd!rBY!QWJGtuWjMftK6ksx=*lsFsV!916S%6cZdYsS5; zm_Zov5$IEjsm~T<JUh&IA8>=%m5@FiuHEV!qG>Bs8C&p908JF4K#}GhWyykAjPS4H z{sG>xM%g;fM01$y3P*Ld+DVi)PdYMa6Q=#wxy*qMt-N>i4-eA6dT<?G5?VuCDG-aP zB(UYGV&UB?wYp43?d5=S=KLJqD;V!*#SUH}NZ4SW0>#RU*C<}mq<zO2IhXOhWjga$ zceE@;heAZ(za&J3cOL4X{o6pw;3GVQ0+bwCouQc}dloDneNd&?Lcd<CS3J#{6(}12 zE%vmLYs2E9f;ZG$`Wz3M-g6<@f7bBQk1#gw72-!h%bMtq`~U=>s_z=wB5#PGgoe=w zgC(Wba^_j!i;F`QUc&fng)kN6TXKRg*4$}R47}sc9|93^sf&jl%?5kCwZlX**Qmy4 zUwcHFtcMdUPGbp2`?we|!HdvLY#w4pb<OuP8)A_xVj*oVQcUc*(05XlWRre)IYl&@ zzmxe~zs}!OVHZ2#qUh$%Ovpdo6A<Ql6mWu#qxGxB=H4YSJtb`rFJ{Flcy<=XN0e+A zJ^t<Q<~E420*UqNSDXSzW~<K%0EvKyP4G7x#7Gy~yqO*;df(C^b~7t2HDO$<`r_=% z>9nue)yh{PTb;)l3M8T)DK~$zyc*x~cE*sijP?c+0T$xFy2pp*8%Xmew_X=mky{<W zgYy^@gb6vlR5-DjUnU8@CI^_WKb@w#ZwOm*kj<xkeV<Ow0z}f(w2I>v1rfls^l%yj z^l2+Yf(>RS`Xj6m69!-U1S6Ih{itac8hRe3{B+Sdul{-|5a5W<K7+k*8rgL|;CR9) z8sm-swo>=>Oh#whaov^H5Jg@`JEnRnG0dc*8g6$cmkV6?>nEyNXU601g9Hv@60u`T z&OncnR~LYkTF0U_-`CL-qNJE*o>7#xgi|4{1^6?N6W(UhzT&>(0>A1!iYgNZG*T)q zzh(+pPxXu|5jyrL1#{qm0oFwxA>sL@5J)A02_gKHlwn6C4vBs7=I^Bj&JmzOKVv70 zEX4P;P0qwvm;;q_lt|00+69NOCfp&dNBtt>B$vn7B-o-3Z!4{zM#Fi&t2Pgp1pit{ zh<0D|%8;AfR^f8vN|->rwOUcfnQ|m0$BDSWejZD_D&T>jR~n@P)%eoUw}AQ>={`cd z;1!Q79;d$1Q~eYCoXD~0gHcD{-AZ7bw~EAaeXKZ4FJJ3O^D~n;yb?U=+!@1>RS|!3 zYSD4LnzXnPXj@kzu5$UQ=*5icP<U1bkp||x2sn?S*9*{vxY(Ol<r93*MjYN<u!LXl zUEIqZ$^V8+^Ip65-zEmwSr_;?8&szZXxFFh9AI^y>;2fwj^pTn5LTMU-?+g~_pEnW zPYDAOek%zKY1Oz{4dXCN>LRz1CH_j>2%%)wtt&Dh)L~aj07GcA){ActSh3ELD*g>O zf;`sxvPza|bGSkGF~+k4;wVP7(MKzosv)JXr2p0PmRD;Rbwj7gSm`h&sF|V!wbPWK zcA6B_PSX(n90b)5UM`VBm}=TpB=E9~NY`{j`oE5TpkG3b`xHaop-m+_9gzXLqznGf zQXIR*C?cxdRvKFq9t8tRy@>|En>CALhH_1pEJ!9o@)43hhNIO%w*n?0p*8iQUPsQD zK=uYTovSdMs6k(Xqk`l4S79#;xDQ4@%GZp2FzluI?Gi}E)XPQ&cQJ@@E%yFqH1zh1 zG$|e91ZPGnm_u~Puw0e~1TK9vBV(GkdzV6<*;vUAq_rcacfD~TMg~|0`d38}@?}KP z+vQG$mqC_d_GJG;@;!>Tr?~VpfU~Iah)95lrc`cy#R|7Qkg2qh!Sd@~6O#<%`3MZV zi(f2$9_lxtC9^_K)agMQEYT!r1N08^vv#n9Urto*^yIV(nvMmh<)DW)L~CHe*)&M( zp4lH&dPS!ljhw)O<nfL<)@SlzQa{R3MTjxRrehz=UOeB!^F3DU5Oc!oGriWmVQgUB zRp+Y0mXaTJ=#_<uK%kNg3+=JS#3W;yVxT`!Lc0+}DkW{=<Bbz-F;OBQbqkeTkp@T! zd3xdNe>pHnJ0yLU@8%PYfKKy}{W15^s>e{s!CAlQ>jZ6RPl$pD`1$PPGeSFnWW{B^ zVKhm>QI}o9LcHk<>W3QsElr&%-<tBD3@auLe<0c<4M^TuHpYdiHJ{#l_kfx1*If~n zT1V1()3jRls|B343;v|2drQ|-13K-`xse%iEGX_A%zMv&(to2`$qF$b3Um<1$Gx`s zEERwoT*L*K2JWxVue1xVi<t`6o(E=E+!alfn+^@%>Hh(ioos-zzKrNQlCH3?HZdX1 z<m|ntKTurwDv2xP072RUX}1*Iij<7#!Y1ySqlMuSJg_j12ays-wNH~%z6tHuA@TI% zw+L=f$?pAm6?ErHEnk~xS{OUM8a+H5MLBq+TmlxSuHL))QB|H^W*y!n?<`vHsbw#r z^nztoqQ~;E^E%0%B5_a6KGY3GQ42L8gy%h1Ebl{eyG}zZ(FUUB!pBZty|ZGHFH>5V zUuC?&u&?@;gKz8v4cRI^FcZzNCzGy@wSJY)M4LxJSSeNl7QHScDoaE=POC64hgXr2 zTzlL&?M3wRu|XA8Gvot4PLP@iyY+Llj%>wo{E*ztxzIL7h;-4pb|mF`ZKqIM5xex` z<RV4$s*Ep$SD6Lx^BkO8X59|6DM0nyw5Dsn+yOD+T`5lwC-RvBvmuJa6j!DOE1xO7 zbh`+3n3y_wk!`2xmJ{^+sCXw`-k2M|j&h>z-Lp?vEu;_tBgS-0P(@ROM<GhiUE#5h zhd@;Izz7JR<FD7!?9mb7_mLulov$eI)m{hl4OHN;{e6)e53=P?9Lj?JxmdQ$;V*xS zij|-he!CxUtXvo$tc-G`9YmO2BkEr1U<56}ni%yJlWY?Rf>{TA_1KMMH}1-tVZdC{ zr!A_qwmgkG%^8y+j=hL&d>^Zi(5%Cz8cDFe0?77Cu4^_7;ZQ|={bdteQ^cn{PS~BU z_n5;8Q{Vgdz$_UEKLc+HJqNO3BMLu6gX2@ygO8I;mV=bij&mW)dgu8e&^QkSiTOo7 zEB2ZBlGM(i44jy#XgW_rG6;$~f+Dc)ue^{;8oCf!p`~r7Hog42!f&GJ3S+zxyTFS; z(I;1V38;(VvYA`P;%+Lqd`;2nMjd$Xd(XdPMq4v7O>7JF)~H)@te^^B(xvc;lgAH} zUT+^OISD_Mrtm{Grv?MyS-6(O_`-X0#$r;4wO=k}OaRm<c@y*0Lj_1*eUoC2WMxUc z>6Qo=E9!CWG?P}(eZK)#UOEjLltVmxDthP3GwigQuQgQcg3Bm!rUp<9e80_bdg}$_ zq#f$-{bK`HQ0R^hXVRURyAYqTp<GGM1e@=AVER(EM{qVI5O@IUvD(td?h1lKBV=4| z`&eapfyx<<e#yI|E6VGbO6-{-TZ3tfz%BNAFqZVpDubCN10XR@fC6oamwD+6WJ2V^ zZ{gi22DU#QEdO0#-t9OJ4^f)2Yxyo;TO;hyLL@8j2sdX1Hod}#cYHw#MIGRIKHw8V zi({)Kcc%f5)+DpVfKJ{6kH)9vxXzM{2^qqlQt5UYFJcdXFQGLo^F}CQ5BZ!{Bq>2g zy~rg8mzLM_LPD7meCWt&&(1k1-#RGwrN3ytn8&`4sZuRLw(H+gJ#TKBvIA)4RV)KR z$%;=?<1y6y>+r?B`lzUZ1H8WV=mlr_zL-wA>Snq;-qsH*RJ+w7H&x>9*(_}F1^v_q zE26^PfT)v!)}^cBt$)Reg$uLYMI0trD=bEj2d3-kQ?kHSC^_xy${gXEdbI)$|G2<u z<%UYi$NJ)2*+G?{FS!oF>lnxvV7)sNNVahpL}sUyAQPE#p5z?`N~8NIK@UBMh;5Ag z!OkU}nHqpF^R)FEahWmLY5YtD3?+>yc*ih?JD!0$zScF+WGyb!RCpMX^0@0?!kUIJ zg>s^a*|!mQQzL{Ws~Xat7l3uM?+iOQvp^L8#?PZX^R97p-$D}&vwPMpfA5e*>xzkL zAjh^(L$pw9hK4lVD|uvnTGM2#Csog&wV;^}c8R*Br{>@oLqO#VcQd(;<znoq$)uU( z`J1U0sTIz%3T<IBauIypG!sF1HCevfNX%|fnkHgFOAv-k8rKJF=vg>Fq6?wrv#`zI zsH1FQcx?&+B%4(4nzVx3GX1clbN)z_u5@yNpR_8Zz&@SR?+BJleEf}E&@Bs1Q5a=t z$y7`N#H=2vH>`E|U^GKIzg;b}eG990e)Zj%FJ2jw6qpC0rOKE8T)2Ne?j>{KuGO#m z^l|P~3IVisbq@9u#Jv<MAoHl;$Yy#tft2+G>@l0QPu{At{hK}TV9pM(4<lVka24h$ zj&I9ov6p3{Kix!B>0BEPxCusIr%+Q#-UL^iViSVT(pgy=k{1ma4X1ttc?Nu>+?T%b z7AjChV(?_}P6~_`L#M4);})g7gdJuA)UZvqVb{y_R_3pnVJICe8!~lpL}>-S!cK@! z-3?)fxB-|FVb1w*_}9Fh@Gbem2j#sUHOf?Rl-yh5yN=&sw2E-qvT0%fkMu=xUC@*| zr}2HZigUIotRW?q-D~>TsgKwYU%RP9Sd-}gwl`XW$1R$vJeLXb>51)!XaT{{n2<v< zFqF;?+e(Nx#|kr7xb!D6o}UN-9*bsr40Zs!a4gA0t!YZ<{8QMj^adn~(Q+Mj>|WPv z*it~+P~!Kf=jhumXMX9bbPZa)r>#n0cRzw2)4hAsOnf*2wG6CX7=hpyxSbn?#3cWm z)C9F0yZxXT9of3`-pG>}N*1c0ki?-gQ`W|VR6n`wakq|>Ea5@h^POM^El6^A(Lp{S z^McC}5|A;vFHS&8=0@X189DQi`~Fw}gX5Owz;|Ue!Dytx7W!MQ6jFcqdV$<TicCUl zs>8hNJ|H8vFO-w_=j?&T2v<Wi<{W|0v(vl(`<$!8SGhiqPNC5hCZ+3dCXca0skAKa z?$DygZGaB!+OTo)T^X)z_g&7=eBJSFgcNB80zI^D%;Dn&hu9lp19t5LFT2j<tk9DM zMH6i@CtlgLH_yD41&vOBH(b*Sxrrr#aupt|yFPkS{*mdZ?+DU8aMK0HM%%vc=@HbN zIJiFK#ZB7g;mfM}0qtDwFB6y>dGD`d?-A27Dq|K1rMCK15dE-VtH82sd`%3ntFw3t zVVh=Yf&DwA8^sEEPq^j6hkvCfN_)`hmI?Zw5?%@+{jz1@ker(4(C@{}IHT1*?bvbN zgHLNucClH)TZh_VXF*fu`PA(XSd@93L^aacPNA5qN4^0Ry;!3&Z2wu#U3sx@0(mpb zUbg9u)<-;u0pR9kTnNgY1%pGTwD!duOQDI{;F7E~q@jkfh_=~-7%E%_cmbNugcnk8 zIjK}8>$Y;+SN_Rbnkl^1J@i=SSR*ofchzGI%Wz+-`xQRyMr6|DDL4%t+{~<9Z>4I` zC9U*VU0f`FT-?IeZGRsWn>ugMT&`LRKv==st<Op&Zn4J6{W|}3lL0xIrTCPv$hjU! za#H-0_W=X07#TH$uiv=qTv|8>vX@8Jmz;|`F5fN1Gf==-U3ad7aO;D4>9Xd(?LZU) z_D;KRDz`_ECNZ)f#I@R|Q;ceJe7#muqe1$Y2h=@=f}&3_M+y*ZgsqJW<;oL~6eX0| zt)sG~)1J93=j*eZ`~nuUel#xs5M=wqoiP$%A=ppYBO$M9>mw~6B!Of2O>C!%clfZ* z7d0PL|IaVx*zl1U`4FJLiDw@TtJvrKt&{^5-R}Lm@o~%XksSwPJPBQp!sc<z9ej;| zZ1bCj?Ti!76{^s9A?#`k)Omf+O4kYdumGQBSct26WOXu^f=hiV*esA}fRJ6{aOBl# z1?(byx;{(oX*xP)%ca&S$p;-nCc7&-M_^UtFq3koR3Yxy7NM=y9wY0<`<VeGut3j~ z$hokWrTyQ&Oo+nKI}4k{yno!N#bF=(V_DVahZBT@fXe0-Y?aL(mVu6QR@|o*NeBX( zok8krE~)=wmK4SNyJZPha*!-keGB~is&4AoVKHX%uQ*VV+~!40-b;_16n;<((wcmJ zrscFMZQyZ~5&{n_TKd!w`>Rif0SGQ0L?i|~H$XFJ%87rRbE{zMD7@3T+)UT)YH#EJ zrR<zhCmjKEsL=2rGA#yj>ey0`8Bl2w0H&vV2+!>0Wkwn^hrp6MzTT-!YJq)IIt3QS zajoC>e|e-^7qoBi(*OWa?R|LvZ#M1>{hQ{FeC2Id$V)`QxbmTZA7m}u1Atuty~ufc zzxo!EvQ>gosr!!t<0Qum$#bfLGy`IYNT+HxkUu#I=B^j6*gI+{LMOnDsJy25O8H2t zz{~!~9A24npi0Py3-|ZvB&CuCIHO-4v`1npMtem*r(Njnz#a|-IufsELW#e!SO-5( zIS?P9u0R!2@X}K4qwA{ZX2GYiq47T7E--8?XIhv@mvtQ#fYA)dgcxqmjN$1GO!FlL zEP%cLkr{F(KEZi(qe}u_-62d~1Q$6hxZy<((D(HOnk*mxA1pmC^U(@GaA0-`=sqCP zDht+gIUy@2_EvoHscY?RtZ76rf1=2KIlr{!PuyMT6y^ANC>va}eN;TgaKJPheQsaH zQ_XbiH8p}Bop|khn7lA^T)>&UC-9fm?kF_q4Ua=6$suEgv=O?(x|QY>L#`MWQK7Zx zh}k-(WoKPe9V%K@4bOUrBKMLLIVo^7)$!;+HTJK?N5r0@x)eKx!=AYotuVk}Ky5p( zPq1lZh(=gWlP^yU6JSWP-e03n&31);XO137=Fb>x72zcf7YSL+lXc##>`NxiCdbwo z`0;GukhxuEt%ugpK}aDa+V*Gol*an2P0QR-{7K{qDsx2}RnTcuXALgCzgkc2dHE2* z<zKtSgo}e*hE`5$mmr8SBb29ktnRrou%%JaO7bGZQFowU)=h3QRo4o|6^ij+E<d8b ziPQPkWHEYKdKGLkN}U^4No8Z_&%#=&$0^UwL95&R12s}P$*{SJn9A6=xOefBBV|M! z$Rj+rbUHe#vwVi;bBkPWi!iOxz^!vztnj*uSUb==r0?abWkN0to7>`NiE+r*UAB5T zalIJlAJE(u&g?s}BG!+V1xF=e%tuHEISEAxHk0XZJw2!}*NEuAw0i3&KD^HdXb2td zbjNlAu+3e&+Sj-kNve(n3R>x-qH_8h7bb!Ca(hP<VM_9-L7f`?%p7k1uGzbyAhTV~ z#+sshY1(|+Sc6Y)O`fu;NBd8R&fI}N<F=W*Sg6N=mY3T6gQRPB5$?iYx8HQdkGhv- zMt|7qMLc+MSa%SIHAtD8ga5>(tKSg<d~kx674FJ6b0SMjhR^1q7>kNRX8ikhD(^=H z>5D|?7FuVpKv>*fc893=#V3FmE^VsARpI|HG0~<vTjBm-cdjwu`C3~CtEbB`LK$J! zpW3L@<{q(z#(0KW14<FpZ@}!&HewB5RSncUiO;iCgY_imE_cmbu0YVW5JObSY{rno zVI(TM)jTPc2%V^%Hi;ktlDBaY7q2<QXXK?zj*OdctbX1Y7gsvN8D#n@cBXOps3$5) zI3+#ZpY(}TNZZHE{8zI=@+;j*3+=2yPEyht)l*v7mMpg}gn2VxLJK2zxzOk5%d?1V zj8aWOkvjuqhbGs3&AF01oW?|WpV{0=?5XZ<h_~ey@LU~>k!X10NA0xF77ExneB3eg zzd`|6!Zrm)6LY6JGTJ=+>4{gsKkhgezWxPWj8FHL^nzH>0wb!v2gz174#PZp9An_w zjr!!RL7S+AZ%CyS$-m>{V4ueL^p2kEzaLC~2@#ni&Dv(KhrEhGQy9osv}q=sxs^at zYX@~ZL!3!Lb9GK8jUa&2L%p7=ULyySL!?vRJF1eo>@m#Ho+$Iw6r1op)H?E;Kiq7N znOn#|@@??f(&B)^a@hia*E!4EX9*Dx?0Zt=VCkUCbCQ|Ohzcg@a~YKk4SJYOrynVj zdXl?`i%;`4+}-)L7Q-oG!5Z7!LfQ;p-{@dU1|d3Va4v-1VV)b=FPq;zRhYKIheC-i zUuo7#yidvD*xDr!y0K|)&?0*u9tkWssa~z>d8@+E#k`dIhTSR1Wg{_mf$19h%=GEa z7W$x~05JKH|0Pvhx?=w^jQ;!|_om(d=AeP#>+zT;@!iw#1|kaqXmSuQ^}<@PQtMcN z6Kuzm4gJHHlr^mHvhQ+E)fo}EI?X^|@nf&a&2}1*F;5LCNkg6Ti&vBFn7+L%dT9Nq zHFstS004+0=ZN-pevI<2FvU3gk1F5tBp7)gyEjtq$~GyUUz={Y;H4k~S_)zfqF=xP zC;w`QdPCGv?~IrRfp!>-`?1I^9p6#3C(MCc>${ry6W&g}zMNAVonCoe_4CoGreSf& zZ~X*03CRN@@@mY_`a~4lt=wj`0_s3cv~_u#G3^VZPLNAIcQsB>`aH0Rev1`oRRw-~ zB7U}!XiL%$T#Ds5<Ot*aZll=8+LqL16zth|p<t(oxzm=7twV|RIs+sXL4a7D6gp;q zY~h%NXnCv%q<Ac5AnHB&qQJPuBW}E>AS41QENx9bhdak6R!~5rD^oMkUuzc}E-xh) z^zZIDC3vAdpn%BGYz*MBxqz}Ln~yWvI~FjYAK1z_ia_3b(_x^^tee^d<d7Cg6tQr{ zHQCoYYo+ICB;6%&s7blzdd*i7a~yfSZ(1;ca&cm2k?{=z))Mxe8rJf<ptx}&7Xwdg zMgNv3Z&eQq^b%~^3dq#7df>Ky@UB)JS2OUKXQURXqc@*3XY>8j{9x)LT+Z*0w=-8A zzC)dXN-cE%f~8?^Vi7*gp^HyuG=xg-30=Botv)nSUl(CTR+OmZY5;}emn*2`#m>|? zDJr+H#3A;bn3ooZxQPT(hY?5PqelrmL4A;ND$!FjZ<NB($}{=ddqF~OB(Kh|^_!^G z^(G&l<sRMWcmSMov5&Hc0wD7c7&TsPtTyfYbBqx9j!11O^Qe7}0L1wsv5gcC0L|HW zE9=uI$c54Z@uNhk&Z1Z~?2beFiJLEVu2@I|ett!^SB5d@y<c!CaU6fi2!LtSkJmym zF99y`p;`iYg!2fJ)SosEBOd@j<L|A)M`1|Ygi}_mH#XB!m~<Ar0RWYP@#l{Q4Y*=t z)F6Ht--VY{J??Q+?B1GoLjJ-HQH*uTeHXJ%6#za#B{P9Vg2Z`i6n^9>a5>7a=)HYE zP5y>W72D~gcp@MAW}N0j#xoB<|KHX2F;s-*ubw|e#n)XSIR`=q2qWRv5$@Y8RuXZE zrV2i5j$nbNst7rTDh)I8V!^Kt;dc{4e+S?GUK%)AjHLaTJ7B6+pi<?zkfl$7I!c2b z6O7R{t9UOy|LrxMKu+E8&t%Hq>*tAGFd&9}5wa|+QHhCIQ$G<H<<g$U+f<+Klna7s z0gIv#Z>$cEPf`0~RNDO4djMiS%vG0+K1uqnc%N0kLY=g2m`a>S4^M%tEW*d2yHjcP zbjpn_Wg|RJJn47D<`*32JXspoB7(9G>flp$t!#eEal%t+aiJn98=wyU-%D&F4QUxx zQ~tjt;-k=AE3$e$;Kr7+0sPEjs|}$}?I>3OjV4*yz-ahb=wU4$>ePX9^U!3H9leZ( zcLg5S>i@Om>`iH&^%bY`Y)zxkst4*&&Y8PMW#wYtjV)yz_!~%0ZH0)H0F%}fo@B>O zuu$a>XbdPUhRpiFW=axVtYKp5MB7q`aqzlTQ10*5chFzC58&D*S3vpb9vD*=;tX>H z>30D&sO8jJMh=eX_j{ZW%UaNgb?-CVb%e}|>&Q<Z{^3?9E<m2|xcgZ~{L^y1Tmb_B zfIugX7bgR<9K|(2?dvIN@?XZH006mzcT_?t(}Je3Gixkq+VZfXe<xp8<ta!AKVz*y zuK)lpo0j>ALn$T^r6x|zTFSrA3SeJ?B-w%9=ydbHq~oDOP}{!)J81XA?&&F&F$E0) zTuEO=d9!{RbNP>wjylca19d>ike2h}g18gs=6KY^su?dpZX<T+``w#k!-8pk*?NFq zHV>vVbie7;rb^*Gm4kXn6kPZdSr&gCMDR%2rHwiAQwAmekqKgZ$3Op|FEH0EwjUd_ z0h^mrc%_;}N9;%C7WMWqNFaT?PRT#spy4EMrF|8THeq8Ad?alAgv4Zd1l?{>cIk-3 zl!IyswKh6@I)V2T4F(HzRL_QU<a^8dS?R5VuQ?r@Mpyel(HFRVhK3yhLh(4s*d-<> zS9P`0H;!gb3qEC=I&9;SutD~r*qcVGqCt0mqL_!5L$;OeNL3&KojZJ00U#p{Ahoyy zMRSNzW6g1eP$_Z2d}gR%{?U0p;@@WTfHbC!7&5z8Sg>m84N4G$414`<CSXC(-1bvP z(NmF;mkzXQF|fC>yO;klYO$gV)g_UB>>wRf1sZ@1v3J^tKJUH|BPO=is|MkhkAF-( zo69FYV@Z`6Z4BtB3^V^#RDuM1RFu6s76iyVPFUyq7Yprfin?Hu-G7PS2CfX)qer&J z<7A2Jg8SqbklJiBh%daONK<phX0bqvdUZTJv3|>xpiVQ`rZ|7y1Cu(=-J^^sZtG62 z?T8Fdb8y;yW>G+MQukt)NTd=9WMK?5G_;lijZ}|Ihp$Cph6M!sGi!zP3_P1=A(arU zugh#6Z<<EWR63+|EgFC>d%~n17guUs^OSU2k^=v&SrTYdq9c?_o?=q40=1sQZACx` zBM&6yihqT$Z8r=|#D3AoS&7?#!xAd@0^QGO1r;#H9FWeaQ81^?AyvgEt>bf96~QPj zt`bJP4#?=$kXQ`b<l?zXzT|$0l{M+?&7`VoB*PXA+N+ELqd`%%9LSYhQ!(0TfVo=- zO|QTzlX&J+(NL)BCf6!3@%+VFKE5Uw6n;lL+?i(v$dsGY+sHfpB14!Pyc(ZoZf4NP zPV;`w<S&Jj22pOCcNuJqQ-<sWkp!vZrC3flU1axFtlmF*#&B^X$pA*a@C^l@TSWtV zelQ*|e|LsmVpPm+3idFR5Y9(Hhi2T(tGbZJ$W|#-Z`u>#001++`(m0!Dsj+;Nsh=n z-?g_Xhy%UnO1g~kYaN2X^K&+8*Hvkm(l!WOofFcj&OF8I<@kdb1I%V205Lcv0YH)k z!|J&6@mFge0D;W9<<SO&I_z8tU=Z!fdf}M@tH$~FC;NBT0M8K|jeP$g7eh;r%6J#$ zU2cr=nFdr|EmDA?FBG{S9w&)xB~+SKCd`HYenG^c{s)|M**pl4%7lpMGbcydIk|3S zoEVh>YqMRO8|X$s@N&Uy3ti1OIHuCl#ewx1gj1B?VK$6n?zILO3dI>?H<FKFuWypa znk2%^>>1RprThuLBHTW~zN+vc8l0#;>!5Oj9MY%UAtY+OEUb9@@FO{1@WOny1o&%$ z28gg)Cp~SyELL2F)V`RMCOterSc%Lz7Ec2br^&0ve;woK`+~|OAJ$Ef40(C%$RDJT zkb)PeQS=cGzmA<I(_$pJO}nKa9vjmb^t0LLpgQOmXqvO<U<$x=JJCvUuyKEG{*lPU za(cp>cPIIw%!P$%<UBuGb&R!41!TB;=&=4`5JI|l@7)WKnCS4HVwutIncMtMZZnQ} zG0?tGUYM9D%?DVGB)pe_B9{vbFe#Hstv!z(x6#8dMX<};2j&j-epz}MwJmk2aD(iO zQA2GtRtOYjFC`y(5h{P#ibzG)e*Jx0#f9XQlbHN!?wUNeg&TMj6uze`Pih01mJBYl z`_Xpv>6vUltmvOqe^i+Ihqs_NgpbT~=pq|*PemI-i)@W9LHCs)ab7SwP#orDGq4zM zbp@1O3wuZOT}Dvip|B0jFC$ETtW$fs6ra0|33t)qq^5;Pfg|ra%9vg5pP1`7+z<BU z2Sx=XgJ|E>`3p@aHaxi52a)?x-y}rWr6}P=d!$PyB->UfsC#H@NH30h+8#86gj$57 z>8o>O-*WkD%kRPKxjFJiN}m2)d_p^68|Z0>^0yJz9d{z(mSD<oftS2jzabO<p}D@b z-sRB2qJ`_EG^AhMC*H#EFxV07Ad~GxvAxD1dFX*fB?->?I<|-Gl&dP^c8&B)@t)P= z>W-RZ5`{K+oC%Ejuua}+k58@%)7H_88jJw(c%WoyG8Se(5^0Gp1`xP)ZI?Z-4*JIx zzwBrP@1?I1=zq7B4ujJW8)C<m5vQ%Vx*4rr60_TZhDT73Sbr#yuml_f$%lx1y>JD1 z<sLd{0lLC(0v-c0E_3~&h=AGAh8)}^uiBFU%bjnw$3dxUckj~vu*%6qRGqD%^TLU? zGCNAgIYX!nFQ2A;duC1`I%KYWlkGV<7-h$8QQAREKe}mDh#)}{ssvbKYsRv#B_s%a zY59)WEVPfa-(oG-oRUPiMfmlnY*|RvFb&NpF5plfGDl8i@}-tYuHPXW7Om;2UczfH zd!?7pskseoPW~?-jWp+!z4;ce9TzXE(^E-QxEN)m=m`iDjJ1J#3V|1lFS(^xN}+$a zC@nT*O4!9<C*nly&u7wc<uKeS)+4Wy4nmNUWmTRPdwk+&n!A8GnbTv&;fZt`Ht~e@ zlp0Y?YM}+Mg@MQeYLlHuJU}QY@bGYqyCeZ4dC?dSSBNOyUO~Dsc67n&HL=E0H?^hF zw1}ZGhS|m0_3;=BWRQI1<(sc1$8?j6v76E`0z)^dXyS9csRd*Td`SxpHO*S1@<v60 z4&XrWls+JEnBd4aDAGb-$GUosJKGh|zbocvIy^GKp}^h=3vRoM<&m954+}yQwz<FM zK=RZNDEdsE`a3HN$QGiHC9{RanWn=)iSTlKog=5=7DvfaXp;ca18Dwf77FfTfPcyZ zBqi=GW6sGlf(S=xN<k(sh3aV#YUnRb4jPaPWE&c5)SbRMzr<vKyaZ!dFX(LWUc!;s z(bsk+1-<3en!S=GbM7giM-O*gW1pkPYKN{ICJY$;Qf3ydZbMtri~{CJrCPQ6U)Mx~ zkL|{=+>4C5Y^7;4P#salpqH{*Wbh^`iroa8`o`Yw9UN`SL{(ozSybXrlaTrGdPwg2 z@}{hEwDhC*0yZN=y9x$T+H*(KM<_r44**d>uD_B)2BXEjmZ-IH%}t00Md_3^;@|P0 zf@x!Q6dT^bZ)@w<w5%&$kEo4W8n-Lj8^U@*(og>zali*I*;rfpNjTYZsG!XmBWRs% zQHU%Iaz-%b`(}~)uE?z#JtqTs%4|}l1`X^r844+(f5KV)yE)HnD4`Q~K(O>_d`-Ng z%uZY&2=%|JbkFQ5i&SknS<OY2#R1CY0RJaf*n9%#T=;@~#CEe$o-`73A1|-Z@IH4E zKj&U})bLPMC#LF#0EFWilZJR3=RfqBORUKCF_pP#IjY>SAcpWqT)d@nF?4$*j@U|x zyc{TRNsP<s5%z@8dx2e&QzTQ4B3U^=%GJ58Ny~&OdUp6hO$=iFF!)=6?GE`<-Abr1 z0g!p+;k*KM%VSJ(6l@wW$wcy4Zuq^~Q+{S4^*<r4rx%K4Z{IcLG&?8yEi*(vhfW>l z^y*#gm-kC)yS{3Qx3)`b&~E257XVImDAs(1mvT`R5HWs2@sgWvV}44!n9~D!16u_V z07**K__8M30q-5QtT%>hIL3#+Y3Ti$HF(8<0mvnBzLwOVI2`7|yT@F2U3pv40${8L z0sK_n#WBLJm*}$pvIOTb4}0TIaU<zE{dM>=pAg+>J5HV)TeKo?;-o*TIM9VAu+Ro- zp+FRfc>NRs7Rwa!18ZAf!Nu{fR#<m#^~J!HS?Gt?(4Vp)43vSXP_|;EV|Qm8onx4u z!G2Qa*zYFG<4EBF3CyT^h*y2{d-?`H<e|fpKOOV@j0V+A)=p?@Uvf<N@8`+1@OBI! zIArAD>%HRM8F9qvv5a>nQDA<>*|@A4sLvemAS;fC1X5W~>z_Slv&0=92#FXrdB|kS zVW?M~4Vf<pvIGD3bEag~;V20Hw<#2pQUv9<v+f?Z9US`sM7=U{{4Mu2&EJ7WCBRpv zMj+M>qoNOa`N}B|vMFk-ER0_y;}D+j{2>OpBkG$;12@B$AlNC<t@&04>D&s|1);~} zx5=~`G?4g#Gv0ffEjzi(4#>EB>T8V>1^}q-3z9`WAucwsZdx}pzfjP9A!-*|5c}KP zG6!dmq&zNmiYI&u;qvCbEasi34IaTs*%d4=5#5%tqrbm&T`k%z_sxCnZKN;!`r*o0 zZm}a7Nlvg>5+i$N)1EmNHL|}CL?!d^gL6Zmhtg?G`lJ-dtykdH6<`u(^;qf~jKo*E zM5fQQ=`OEY^c-iBh)OKyhw<DjIG54^V8+JCaH}iwsAWtjroKygvNY8pCyl_r1l}xa z<?G_IR&)B%wxwL*E_0H8#e^@r7wPSnHiQHktTeQaK%$PKSJX_4%%nRRi39+w1XjbV zFaq;+P`P-&qEvQ0=vDGWVjI&b0J<pZWs2MHu9v%yed{Jtcw~0`0O+;0`X;XJH%)Fy z=f39eC07p{S>uI};C(Xg30fQ|Eu$e*3CpP}iXPGR0lv>dxdyzv-d2Al!Q1tos1E^w zdllYBU-nEgs|Xzqaa^8v^Z&39At^Ynaz7-<&ugP1QJ^i}Wa(P0JA28J9mfpO2AQC+ zsf9sglBNK50BD_>FB)gRL8@i!zjm4bBUUJQYF9>y09X$bD-bU@N>f~COYpXMr5%|* zJXx9g16S+IR4H;Ylgv?8aA#dSN^_Z7xxNeG@W{S2Vb7?-a3lrvI4`&GB2@siN{4KN z;qa4xZBw|+of;XbyRDCv<<G)HHD<qRsju#h4T>!a-;eoGN(JG>R`Z(`y4>L^Ef46< zUJt*9-dnGdJDs-pH~RFyTKmlGB6pMXMz8MfA=WEJCPHNoa^~nK?Yj8zE^x<Q>n!=o z#7n9XqT4O2ofx{$O|I6{PcaaIkq8wrQdiha-Vka?DoG742n~9rxRxX*mobJ2a%WQB zrD&_Bc18gP->gZh3^$Kjhp!^E*Wq3F?r_(kJq%KJN;-d~g%VH6AlW%aIG`o=3209k z24|zBS%~z=V=kxQLfHtT*6El)2ag+he;^!Y$QLEL!p^2=rreomqs3=jj2FOdBp_-$ z!lB?4+ltRNcPd-PNnr?3_-b(&^qBVHul{DBnzAtpQZh!C%94XDnw%3}wu<&?38+@~ z`ioF^0@iY3SFihlOv8?qFufuE>3U&-N|<RPK2|uD@v7juu)vBqBdI~>ziCf9_KQh> zyv@k~?N|+p)%li&7`R*?SA0~`<{G@eIW_H$!YSWVVN8AImoZKyTJ4GlO2p>^uB{j9 z=jP*S42A+kQIWOGUxR~6<*2V9lu=}{neiVm(7UnGSs7ZQj}qNYL_B*|CBzh%*MAd- z*NYVf*pMKPvhwcfu-u#v=(f|XRdF{fakM0FLRT|?eO*e+NqCK?I4=(N^&wDnHf|G% z>42rxw6Dxpy<`{nFC333nStlspyx2pKJ$YQD4byGM^Bc2#gcSianxlQyU`OT7~tkO zPzhMAxYri!W`?Wi<d9&*;Yr@rv-<Q%rw_*f2LBlV4Ps@$KAC<!#G)VuD8K*<^3BwT z?Yun^MgIWpmOFZ*s){pCgRmRO_)iA*Qz#13ivK$ldf(q&iwjQj+VpME!D%?n4eh|Z zX_|8}X0-E4R-`e$4AcI&Z}_Htq0oD#Sc<4-pRqr1Mu0iVpNU;-h5HEX1Pz^GbAv=_ zv8(nKtTN~!&r%@TUfMjsBZ{4yZMO)BmX5B+hPOwoN{$sA{ThCrd_Xuw*~qcw1Qg6; z_Vx8rtV@PnbGp?^K@+tB08Lt~9Qz*zH{_C#jLfM|H3F05sXK3uscEPX;^MK(uX3#H z;1l_jNzn(|1)-+YXQ6e>8rY>K-C2`_{?rb2cecu`-t%37!iKq642o|X;KXK^JQ0A_ zdT!`*x-mL!VV8r5i}W8iGSo@Pj((f@0UN2GWDPV1&tiK^!X%oE6pX--L_Pphd8Cb8 z?O*5%M!Au7vQ-}OFwSIQH;gK5@cxw#!V)c2P-($N)Dq%F9rR#w=-cc2;z}L|794%u z*FHfzEX{`0*cl7)S|u}t$N&U!H6Qx(+8FVt=w8AnaHipO2$bY{$lxpkn{COz4P;a% zin=hGF}N0<(*Pc`{?l0hN|+=AdXX`mu6tC&CZ3SNjTzUDVFmT)CJtGCOOGyAF5N7X zrUP5k%KI9&9sH&&QVe=V+(xd*Rb(sOtz3cl1RP7v%JQH71eOvE!E<$Dl{%RaKh~7O zlNp7T;a=-AU8AEP_>fTmd?ZrOMH#uMEDOWQFDZ2NG^>^?Onxtr@LMczhijS|jh<!A zkL?vfM(Vodu1!}GFBO;6L}#Z!;vmZD@w`F6F=2MQm42K(OnvfGM8Zout27(z7$UGB zNW?)RvKE4237^0~`F3I1U(h4=R*@DQ{aP`+!8NP>=w9`#uX={}xHZRKG)yupm{iV# z7V3`W;WRSpm=<?<v6b#ogPR15ymCdxycf4_o~Z7f9l<_^bhU}cnLM#9#YDfX1k{GH z^vZ~<pMtyCMrBW(Md+}mk>~e%Pqy+*lp*%tK-z+W05w<a<$d>88dQ2hL1bXv+beB& zzn`Hl$%+YB=}7gg$#_wEWuag(PiznrC5XI@jJ8xfyt_Ib=b4gqkG6y8(C`{$cX`CC zvJ+BsT7;0I339y54+sCz&N~dLHd)a~SUW158l3s;-sO(V%@jjLj^{X<?i&h4B27?+ zMsz359ZmtX!tmu-NY_e+q(b$gWpQ>j1)5s$Rz!m+DjLzCFzS-SPdPuWVk59}w>naL z>w0~vlBGT7c1*mc3r?fn-F#?IqxmNAY|5p3VBOJ?_vN-Khjh)cTjd}_!g}loy}G|l z2Mk;(uVNM3r<9eM;%17_V7Idk``=R{UtlJua%9r-8u2j|S2k=!rQ`AWDWP0vuOSW4 ztpjl)v!sI7=}fd_Hn&i)pb*2XhXNMH8C+c=&_?LO3C$qRFc3ee3bY=RCh9xMfptf1 zdCc0B^&GK?r-YqT^tbU67IETZ;(hY^;Bz5?O4&N9>nEB#;L<w3-Fx8%;||-}E5Muh zfHItOgpm&Bt6yN$GEsq(vqlB+fLga`6@8nL0g#UuHXA9)xY0cb-VRhI;nP4gwtp3+ zvZY{UEs#uS-=K~1_^_aF&9=5N3+343kXA^4_rLkmoL0P^U$}SqH|pcc)8KhEQ3w6z zS$UZc)L`MvS<ES7{QGib<mk)|Z7c(v<vxxfKY@?4elY+>mV5(fvkPzDU~alZfB7Qg zhZY#jOwX`?Bh$%eANovp+yE-tO&$OVVG{tlOQ8S$oN>EHm?T9nllx%>s+mM{MmKKM z8cdPN7w?4{Lw6rupK77!F~zwF8scA6up$Hm^2FM9TGjAAi#04Igw*SrL1Z<3t{yBg z5kBKzm2gWMwUxsrx}~Gi%_hwOuU-pEL&`;xP#{<ff58YJ!GKQjovu^mTTQl!xS3K= zvf7CKLw=nJ-MDZ7o+`8i%V8Tq7#;d%R>kV-$4nOugy^@n&UxIEqgE=zBx8?X;uZ6m zdz4$h8ibP^lirWSC=NcdVDDdHDV`xra2`FIjOi`X0P~J%=BWsS@{+x10000Rv%)(w zSTLv##oegJ?i!y2TAn2*EIYQMoZKoT`ThHRO_v7{lRj>jy3wZj(zN~vnbp?bQ_L-D z_ycumY0fok*0z>e99F0>>m3vHrGVi>28W7$UN}Z8(qgGRQN>zruX{^7g8&=HFeFX4 zrdf%1^sDbsbIOTr3$pP=5BrQ`_59f31L@{{6fL#{x_FTSJ?ac;I+S)9N`oriOsoYp zn3-g4z+TxmR7S`Q3MAXWMi*9*m3R>Qbw(g7I5eMv4D(Bilt}+8^Cc^+_ue0y;E-RJ zn@^yspG+Tqd@?(gpki#Yenz<c9I&hr-MOWq4GkCLkcL;ln)HF$vIzVm8Jp_#Y^E#G zU6E-j*Af_g&8<H7KF@~Avcm?%DWJBiaX7?T7or{>*4$qeS(J)pETwZC<0%H@aG~P6 z<QK)lGN;s|J0xF1N0PMGLi5*f9%h;w_qWJ)Kn(4_qP)l(^nN^lo!=Y;B}dQ-pRsWS zT%T++;7B|T361PCT`j!@6tX#QT0#0MyNMrVGjpxRIpIWfNtN<?7Vqd(%+?O(-?$QV z4VBxvq{W3TERPo=<+z1#2ZL>k9hV7q`2gz7E^0Mm&D+DTj_~_?ej|-BGs@}%B-Ggn zOuBFwsF(k8zh3-CF}(F=^w;chA`!+|-t0M(-!PK_E|^fUK3Y~U?2Lu`mP>DL<%f4# z<hi=;5=Yp-mJbnw2X;6zbXr-YYVJ^Hqgu=%tI7nC)82iM^AmA(xCq(`F^#pu30Gtz zr^7B`cUH#Oa~|3Cn@lbcJs4t?01F+Es9e;Sa_F<#40|Gd2+c2MCHfO#v#(gf3Fy6O z{MyBKzF~O5K9=+uUEIu};o`w}{?_P9tES}4*p|GLZk4VcoRH#Zh`dVvwAD@L{Z7lL zm!r~_g{s0noU84-1_CGUgFUxmd+fQ`mH^5arQ`HwaNfkQYDu-%x&<Z6m_y$QIk1>= zl9CM)$EKxgF0dsV8yop(d@c#-PyVU~PKos?aNE%PIjW*uY3P6)Ej6YG{^GCYrtv;a ztpxI@8AH*l*(R|6-OfzP5`ymLArO3^8$fhjbgY8N%`O#xO}<)t=Qp*g-w8#d+!nVZ zELg#d_qGsP8&?HIEfCH&)&<K@HL9x%DDUHZF8gToBcc?BhhPq-c@@uVZ;(gjxyB5I z)!Z*7j8`k}!fU#mGf~Tf#zeT34WbGU3G?oH&+XUQsq!-=XjL0~uX?eNki@;s&JEFq zid_G0yQAqWc+lG)n95DY6a_~P5&o`Rkl8a*Gh3k1RJ`#mc$FVM7|1j5%_DC>n4J9F z>7~ris{PwKvh99$;+}b4=E>Y6QGX0CDi)>VGHRCh<Z!wPNScDoj^9Q(I#i4KP|0%Q zXF`5=t#svpQVC7+FpiIgs<YtE*f(aZEPfhBsCh&+sMLO!!Lz9nT=&4F)$N975S=6a z>1MOs%*6<s463hO`ae2>$OXDqXV*f36k5?rwGfl)%Ze9rVoE$H&NP`yT1@x%USwP} zi*7`g+vEhEmb^WHA5R3;av{TV4tcl}_11UWrFb^1Acc}Wb<q=}_*-~~^|}mr1VUmd zjH~W7$NDstsE)AqXaXOsj4e_0ca%%RVc3*l{oz7@{FC7Xo|2;O-2(@>O^3qWYVORR z<_gNV)g74z`|-j4<xU`Yjr*|6&+=EqS{7A{bPkL~KgzktZp7QR@~LC$I-nuwYhz#v z2D%@(KyFwl4$F>eYh}!|1WL5SWlYG#-+5E;$})YjhF;);+IK|z3<4*EYQNhuQt>-B zt=9xluSywtTtEm&!2iYC(QZlHD$#0^*PZ}_l7=A{9m=!;XD^^_uj?LLz4vFu+GeOJ zU@{V_9ZnlKn@XN!vJzAY53DowBXjgTN(oNY;?5k?M*2?fds}DMTILOe)W8}<s2~Bt zZv$Fc)#}LYGC?uSyX79q<^OJG$GJ)XJ4Dlq57mGiNa0*71~)nr3v$0;CzO*{20TMa z?(2%MCm?9UTzfnUH|J6@beMki`d8$=Dxcpvq71@e<mHnQQh#7W_LU?JGf)dAevsLO z*s6W>IWAQey;)GoVo*V*n*o;0s`)OY&iHe_9Bf#U;}Zz9V86pQC1l@fG4&vxVprR3 z*@LG0%)i(%U=)={3|}<S$XJ~@f77=Jt%_^`_F2aJqpT7bi{OLgOfF|kwYZdu@*LG# z)@+Fq;awh<#giRkW~~_=OHkdhFjq7zX3=4=k>5y|NoRFyRg7%Ovoz0`R!=6&Oo2%_ zI3dI<gc}loLCqRr&wpwMZXkkG!FaLYgA!4|g$SjFLri_CqUX?TjzG=DmF}a^4W114 z0+}r|#7wgEnw5=fy4hB2;ydK+f&~xKfE8s~{CIA?-XR{lT)oUj7DDkOW-O~2Ti1oK zN1=_;^QrbD0#`$AMpb>5!qDY*ze?5^U+T}Sb5P>4AA2*8#tfziGD(Y;BBUN8xk=;N zE4dkQw(8PwL`BYbSVPSTHCTd@WCZ&?8i)FU|77-lhzsbL3uo45j}8d~u_Ut^&o0~b zKvzAnur(d_XY4B_y#D7d%pIp;>5U~W(9)b>0qrLevS@KzlvK<30YXpHLfdMpd94B8 z=Tlg$ZzO2toK{C7p~ETN0R$?flEyQ@Bty8spx7(IOmE8|PZZ<L<k@y4TouAI$(|8x z^n)_3fQTh=>n;oOsC=lYGE~49BeE~7<O}7)9M<-bAdtILWZOVD<LDmJ#Ffv{9;;E1 zvlbUBSVCwu<=$BrNPe8glM^eD#&6A%*F~>qtZ+_4&N}A?mzG|Rnwf=6%+_7+upBHD zdi%rLi_K+1-D(3ksXFy{?8Cp$#qL(Mc|BY70kCeG1H&9{rgpvdJ$H2z14PnuYgCBw zqBA>j>bqxN?0aD|jNjTBV5@C3+TjITtLO&PQf4(8ZAPUp&ZG`_`yLE;tkN<|kd^tK z+cG<)LwFb9<urPQGUG;4N-f{LPzniPf*G4F*gK=xp76rf161iGl8PW2r%LZ579UsE z*#lD<jBSQc^lJUBLvFK8LytUyq@siPP?;i$^3kh7vCV;^deuw8oEe$htvstG7jI1{ zA52e7IF#@Ih+sbCUx2KfTOBp+a$arOXG-Gq*^DusNFa(Ni(z5>>3=_7@xV6g>0Wq& zpI-gYw_mAB+_dVqbu}AyG&S+PQ}d9i(lwaZ*-$1|f(^!A0@>l*sZObOsRAmWnVm<> zYwge$3{(%@$KG3t%sa=KCezgnzF`o#880sgC$4-?-uD}K#1D9?Ju`zm;NX%+NgXeK z6}?5&i9Yx&uwMW)jmNJ!2Nc!Gk0ENKzxhtGE?)$QM5GOb42<tK@^eFmxf8Pb1Q3rJ zEARvqgx|(?n$%0vtY;|v#cijdI{?5|^Zp}j#B0q$f<Q**$Bjt!2VAQBC8%p?%Ip{K zUHXIRU&CY+V{Ap;#vwjsOyEjeB8hVTNm)uF{<8bF#>v<i)r!W}8}g}!;ec3@Vg`CC zK+P^e315d3f|^n9Vnv)zMwP{q?ezn@G%q>#c!)XBH)nOvqWLu)ovb`5a2JGfNl(KD zE0VK@`$gvU3>;QbmPW-wJTxJ@H2JGHg~eXA>}EjnLC;JG{UJxmx6@fUqLP(;5Blx* zC`TMGp*-N_<Yw5juXXwkN^cE$f6NSfjO-8~nxgn9NMe`4b#X=F2BFd737g+QAG@*3 zTk)+vw;^_teyFQ*0j@InS&0eH%FRS115$E?IA7D;t9}^J*JmkO9b5?)Yqz~0mS9O5 z>z_(zUz(#NqJa;Wa-k)+$_TSv3A};sQf8BD%xhv|1`|<Xe3D+=R;%if;N}yxf0OOf zrhTX$@=J={i3FVuavly@UySxIg=;?FcNn4w^l|dZ38MM4iCYUlO&k7UCPh*vjLe#3 zKCdBl?K=llf20teKt26`?XGr$hnd-Oiu=%XW<jXFbC+K$X>gyVEFE`hzYE1X8hKNA z8O#6!=}R(}d!*{=2X@t6UPKZm^J%sn{zcKrey-aRH=43VM<zr)vxfafAW7+|E`}db zq}}c7jsV@btA0uY2FMka)^2RS%~>C5rOVzAVv}j{q_|V|$m>I%|7~E!ctgvG8#3zY zn1J&()?pk%u;`>P>wg}bd7CGKl%2?G0P)<S+oe)6#23?#M8#SUW-4v>Q}<mdVl7eg zrc7=`?HNW%Bp3CjufmgwH`J$cIKtRpv4lNS-Hg1+VU-i2R6>M`ZZQI$?=6O?C?pb^ zS@3G>fRtbfgZgrfR0*gmsLJv~BL77w<V|mupfJtV)~LVYq6(vaHw~wt`{(Ss{&k1a z#lLpH%8!?31hdFTQ>LQ;j;Yq=)a^uGkTCX>ZA>U32>fr;H=v5T)qqJzVE;>qj4jUj zJ7?Y!WJx;1s8q&>`cva6GAn1nfxmMH3?rWhR`PKE;0{HH9^O%Q52mA4zaCJv2_~Q5 z`@xeE8;*ubmbIzXXH)y4)<_LXsv}=Uc+I(d$E6!MLj1+h(o3ZT@S5!y=6aB9H4T5v zOx1|&M*soX#%~KpuhnLE3IxK7u9Y-R51$H(S;PPgQSn)QvdqvS{kx4^^0NAPSA>#^ znv*y+xdu44X#tTLncjWSZxuiUxim8rwea6?5t8aL&`_PHN-(#(gD#M^w*=C1J~RbA zB5Dwv`6bmf_ih4ZNng{O*<?SqvHs;6OyQy$iNHq1qIT}eQo#8quNy)#nn4B~sj)Xt zzwk0sutON(q53zoR%{bn5loar*gyj>I^qBfqB?a!A=pbQLF0#F)qS?k;&`eW*DHVm z15p|R(dJiREu?Kim0zmN?i2}y7hNg<00005wQp|TBA<(VxG`KE%!+7z2Tq2nWf9F7 zRLmWA_;v(Q5yYZZNkvwXCTq+9IQq$hy?unHc!e>*c=m2Hq_;=|&N-)=q#_T>O7)-s z008p`LXzX1EFO4>fsf*R6e)w<v&Gtx{INy3W&hI=1aD-x$mGUFS@_*AA=fSiF<*y& zQn@eX#iE}q3>znfwADKzW6opK6XOIsu8&%QGEcHy4a9&X3j>!9DMcek3uzAH*j{9V zvst^s_u{AluNu>y53kUyAcUN6u77FOE=9_p=ik<yU2o;M?ZS2fs9X(yV7@PyW=cG> z%GhkS$twC>RjkF0X)uq1t@9eOH0_>uzrfV)7Neld6*#&9aUQ!r8PP{jKBh|{uDm0V z-i;fKp-FQ>Sq?C*#d;(lc;bDD!rzcMGj>8qm?olFW-cVUc-b9gsVFc0A6g+Ec>_}8 zrH|d|Zl6Za?=>o}*UD=>eKzDjVaFYch1^=Yy8sP3!ZEP&WDqlmX4|RBPWYE94}*Le zHaz(haT(h6+wZbJ%gq`?nV2XLaUDKd5p52ZxKiqO7=>8CP&uv`g0J~JcEZ#v)j$() z3F&rcDR1RCq&>On7#rMfRj<KmNIXD2Z8GW<HPaLeDt^8>Pi;bZ5irjcGFwCc?JZN^ z>1UHbS}f!ZgDXmH$Se~aR^R{t_$Y$M5W#7l$Tv)#%_8j}^h(Iz8ue<W04(8UI@^Me zhNixPHv-V<7zs8m?aDn-S|l3)=q_2&AYSxY<Gu)n>e}qRPSkwE21}jQkPY#svU^6i z5M)@D$5rNyZAjnA7nf1>w;^$V+7n>l0c1l!Cr|&#M(W$GQB)iNHOgN=i9K9CeFlHh z7~yI#S&!~rz^(81A*$dcT3z4bt~PA1^jXLFFfh~YaNGUWY7Ctn*s^Rf=3P92i@f#4 zP=lw6c`x`M;jU6}{<;63)nS0@q^@+bqnWL${h_F@yxOnY8jAbPs{Ns;uijmX%|HWz z6n64ZfP|npVPmpBuCx^Y@GYI&DZ7A!B@UPMhvjCXxl1(TPkFx~2>)H4LskeZ9+gks zhGuL&6dFrdIqOqR2I_+6Z_rvL=_UI6W}s^2cwFl(bW(vXI)FlALXW+vZxgP+V_}gD z3}pff8lgS)G)P=O#$jBM8!&uV&i^5WrevA42};g`@II0F_n<95nkXI$cl-)UVYD!r zUTr~FqM%SQ5t$@llD|nlwq1)iaZ)+(oSVJ;u{Or>OFXRZK@orkf6v&HTQUrUu66oI zHX-=&y0A59Slijy)Z<T9J6(Z91mv^^u=Um7hy+X`$N#LzYes%{FKZu~xmh$_^kz~C zz(yz!Nw8LiD69Z%OH6!Vr_!xTdlQ?v*F4#2{Hz@}x=reZHAcB$Jf%&}6iYj)LOvSn zkwp1U8<;w!%nOL?XTLY$OyH9NjT+y%FY_KkRjM7)37eX+jU}~-TI5Cpe~h_mG-DaD z19dh%4IoPpcx&<V2?!f@mBrI0)@K!RZrypRtp|L-?jpDK&t2+(08GZ=6APDa)Y%+X zo@JH7CE)^a_|x4HkO4}j0VQ^c2;bf~yl^IcPDt96L2-gtU+OgRXpM1^WW_Bt6MB-) zomHw!0V^060{a2yoJ9orNE<Jpky2-qieZ-2LSDR^H{on5?|AmKuzE=I99eHbokkrv zp|qnB&Fo}Fd@9_P`;SRP0%Y38rrg4`Dl*b^r=qlvrgTH1i)G^GgpNhR4CXFlg2@{= z?RDe>#b@6J$uQ3?BVU%PVh-3FgZGpvW2fB>gwwZDn?`G3|CgOZCe$e{UOs^EK9m*{ zWV0h~wzezUb?KI9{20i@t~k}`_kju)hHz2`OzttDz|;l5EMvJo{Br2IzgC-P=Lx)` z6k+1kb8)qtS=Lc11mb(p`mXMn#&KgBQ5+PMzMvdBIb6^Vu+bW1Eu*=rZpYj->Z3bm zjNEdJx%l#??p>X7M{eRw|Ceq|(+(^coO`2%P;8`!b8wY2#QxH_6QbzQQXKX_rE5^3 zeoc^1<c7KKB7{J#uefa)ODLU|)S!}!G4LyZpWt!X6Vdm`ST6`&f@j(5>mew1NbP0q zbu(KHP*0?(5M-7VkeGXgvvS!zLvZeW=N0jAv2!hoP~x;Tqb$jWFj2qGy&5P(0hpf$ z#9k5YqIE0~cj+CHx73D+X3;tqx$ZFrz3p1m!F8|9qzg12`gm-Lz~rB@IzX?UfaAd{ zJ39ZjpDA4;$-cc|Q&!>s2YzJw7{K4gv<#g=6A=GT3|eaXoV452sh~D+PemKJ_9Qy# zNy}xVFM%>GUIh#urIz=c^h@iU=I-?n2-!cKD2u|;FUj=rLuc|*H9U;b8CPY-<>P%R zlmzm6Y;}_E@DeEGaLa;LeOe@A39;V7=H6_}6YmtQtb*rR0;LVINF3rVz!U@TPztip zs^!>41CA1*P$VP#dtHO2DK(_gDIy+n_+zb#A=ogSYP6=z;Upv&t3C_J%1cAGuDA!H zCHlf0qAZ<Y>Fo^C(Z|2EJTSjBFaX|S&nI$bQXxcy*wIij#Y`HPgA)-q1GMBQT?w{u zUgxb_Q8p*HXYC$L7F22Ikm@Y%@r8F?JVT!dqq`!9{Oe9lhD$M(;rQC#nY1ZC#cV@Y zGAgS1AKi7GbmM_kQOF?T8XE)W0Am{o%h?E;OcZU_CCKV0ctg4JG1vf{Ba%^F=K!HG z#3O}ekaqk4KtPvlYhMy1p3KngAHRqEBXZXGszA0#@`)103Oh^nR*hGH!9VyZpts9O zuRe4knM;R&hFBpVjfx#|RRN%S1O*b-8;h#hqQmrR*baN|oMuL^suHo#ri>UhRy@)N z7Dm6yYO>!R<JX5Wpn4u7(_&^)6m5J=Qa6&X86cx-$TagBITi^2+!Y{+?2#`ue;%Pn zC*E4**RRy)dGWRkSsMRTVXr)6Rjc$H6k@w1BhR>j1mt@~iOWLI+RXK&nqcr)>EBta z5x;Rj*1mQt&2k(j55`_)U_o->8k)48q-JbDn~WUdWG$V<@l-XgS`1+%a(EB|7<yIk z4>;zYYLJLODJ$YfsL6x9eS~2EH=D9L&E>`U2#x>L#AwXefd?^io9(;Q@M`N;30b_U z5ba&0#|qXb7mG28@6lZ!7j*Srl0DXjf-q~#+tW6FJVFv{!okDZ_qRz$VcK={168_L zEj0n&g$xetsB|wg-8SA_Qp8`Hi&(@w^nOINbPERYC_p`ht>Rs}&t&ds=_9!M{ps-P zm0e<w0HqZW@pnWW(Y4%1kaGTtz`dGU7##NYi`j^nKRzRtRZx=r4{uK005XFe^z_FA z)x?C0eorqp?a%^2zw;C0)jO<f)GH=(#``%&hw|Bz6&$xt`K#s@Hxq`CS~-c3oD05w zuqSv>qiZ-bd>o!n=WO_o_V_#O=yo%E)_lLtIUhO4c-o6?CdH9DT9k2<23u!m^TRfX zU`JQ}LbL)0W9hv4M^%?^ldF6S8V~0-$%K05KL_J=;2J$`L6!U-Stp?5gbRoD5u5JY zp#u;6A7XqtPVL|g@@s*6F6EqMk4?{+8b5}We4EFWSw{}bAzLpl8e|3l6{2o~-}S?G zt_WBq{%FXQbF&h2HV+Ea-_;VYtG2s=;p`Tx3UCh>P8nh99Md>!Fb7OuYg*t2o1H;A z`<6fK@5*&Y^MfikVq?$KfNAt;!we3dBmkc`OoJ=^s7=6xxyea;lxA&ahPBE}=T44D z7bhh2ZDj*7$#CR!Ekz>kq($^#3P>r?g-3+^3;7?LmFLV#WP<7L-bn4DrAxF_qoB5a z>aU^r=Hy+wYchN_1_+Blk8)EWQEtHah`sz1Kv`p9#}`|o;XrHb!s7}ZTrXQ3@rN2& z4Tf!1XzH$A`plimb0H;j?2LgL>a4O~P1yb6J!3gcI7y?NF)hS@dXGG%qcqIP-kH94 z-n~V=k$3d>;DOC~*hx4ZB_MiR0<I-2qlZghpI6<}DeFJhchUNPw~XMRONTEDsOwc8 zdZO&Wa$VPS<i{c(R4L9GxmIw>XoMP2X+W`!_EDA^st7;XU{n?%&e}&SeyaLW4sHZs zaS)&3jRc|~mcOb1UBW|nYU1YYiXFh7eclGJ0E<4tc+KK<2_wvQICIA-cG9Cr)WI?m zC#mh3XGruO2ENW;66gIqTWdk^(2IZ2huZ_=aXTf3IP$KkU)LdDh;hXj7Qld4@MQ>w zA=(s1&mJ!ozLU-Bz+N8^m5GJ_6{oHV!W<#d@PYddC}9llWPj*8qC<j7tIG*&iJp3^ zujOX?Qn$mo*iP}@@QX>-G*k>1HMV$Ub{UwxB9hfBf5}sc9Vd?7LaOhI=_;5|TO|H) z8Z$~aSA6udf%j@AB@4F-fww|WkQQc#tvZFV3DJZTXS^(M5so&217-8eB9%026-dGs zuf}bXL!*Zg5G{hcwIjr(Yw)KZsZ$hKQv;WS(N>L(zT5-rZeaV6{o5ZIoRlJfS)%E~ zw4EQB!-D5ci9x$_x&T^x8ew1}qxd`=W+C2vma<HzkD^5|XJN)#kL4HWBY6S-A-GSW z%|R2hk1hp<t2w9E^p~bnVyYF8F8?iU$kq<$(M;vVPc$jUAkOZmxF$=H0xH6fREfEf zg5?d5a!a3z0r8o+*u0=*jf>bnC82bU;A`pWa|)TmZedq^0o8nh3AOX3ONn<r?C;?_ z?mq|)vQDqbC!a*ukR>9ecRdbjZ7r8R$THQ}gq)Km-1t@t%EInhBPpg9bPi#CpXBDf zI9T`UIg*Zo7YVQR#nJTg3Xg#Jm{K1W>bn%p>ej~4{J=pATW?FG>)5IxQ_4ni5c!Jh zo)H_ZC=(<LHK~^m=MOjNUYN&}^+9t7p5~uFu0Cb$^NO@DCK|hHpM#q+^vWbB+DN&_ zfh;Evd&HiCPLpRjL>R^gDo<4In*>b239u=y&eqjVxOc#r=iKx`f2_I_>|3^1IPd<t zeR=~m=Z7+?;?j6^*CLPnCMZU(l1`x|(e=PB44_M@@vW>g?NueW^JOoo^?gei$LXLt zS<lTouUS-azCG$_R#_K2qW@5K1ijzQ^7TE{S{B4J$Tav(?<Sb{Jvu>`ZfOI6q%;6) zN*HfRq)UmX#A&RJ;fpf*UY!F>zCFYVmDA8pEC2~WX3}M$(BK*{SXDC3-KEI*$Lcop z-yVfiRY{vD5lz87=SOC+#%h`?=#94eJp#pK5={zs#n{@6Fumc{-bcL7ls&We*Y|3x zim&32E9Nkvz}F{M0|$J<2Nl(CiD8SpV|447h}tyQf+9mZ0$8j@ggu{K3bLx$uuMk_ zJ;i?q#ngx^Qiia%8ayG*?9G*yGG07uDfD^66*qIsJYY3P1~BDVQ<|4<y$W}$x`5oB z+zQzA>VF3nxj#^;M{6R$4;eps@%**zM`N+T3`ObC!h$r}r?BjuTXS#%Jw@#YsU}}1 z!!$9=x3SkVj8dKo_OM63Vo;DPx-kOM`IVGXl~kSB8>(@ryll&F740FdmOYF;7bcQj z|32n+Z|jFoXgRsR7vCXs0bKML@LH7;^5fxg?aqD+&XGWJ=fC}tZF0j$h9w6!nEEEy zHFBdjh*AbCBaGZFZIPy9zmg@It`~*eB*3*7)$;-$8FVSdcz^CCPpk8V7cK?Gq!=i} zHgGFXo*H4MQC~U-!YKuYvrIXr{2*NFnLAg)s1F{Xu`-prE}(*}Y2|{c@a4obx9RFi zEO2U)=};=EwS>nIw=3kJiMJ~F6F9B;k$tUZ>(@&rFJ=r9*wDIOVKA8O_K&qo8tnr0 zGpXHU8g5Lf8mA4=$+jZVoP)=2VxZCYE|93B#tccmdZZ6kBR786tWt}~5*b#@u`7D< zQ={&^Ia@qU9m@hCO?TnPs`Y!g&8zsNO{1$wsF1LSXG=BDm@~KbNb%j^o4@r?@{V9V zQfMxk%dg@u_qatYHdSAsKCUpT(I()>KKnDi#iEHy{t6Hk)}|>sI7vnxfbC@HEKznp zlo1*_e7mEowxU6zCdO>$5@TlsIS_Ls)G};w3+CnO`>vdF>K8Hx2_&<>_Rfi1E^Obp z_t%dT2E)M~ajXYKMReTZIh`!XS#(|UGxJ1k1W>xfy}=(4O!NWv<2a}G1jKBY*K*|3 zf<-(Put-u%#gJa{$$>ZFf2ydzt#0Cag&}>cKKPvnf*?m~g^Ca{f=+0#m4@MD`RspI zS}BWyBN_Hu@+V#$dGwQaH(Vlcltw37kg-CJ;g62NPyego>8b_mbOPa+71=4gB%$<E z>$+~Oo;$AQFnJW-v%iamaG8w$*n|Cyg;weH67!WK`gYBZ=cHI3&ZSwifgL7Nx`&<S zC6r#b4`(OQ<ipJ=CIP4*>!#I_at@ptW2@m&Y59D;TBH2~IOEeA+y&Nxwq!Q9INLg* zVDbjK$!J+K7F<8S{$<pplgvt<4{7(%*>@-tba5q7M#_?BPcOS=NAk=rsO^QLL7CHE zUxpIJs7~Fkp(<c<)!54FphvH{v^msenAs`nnP{XC<Q}=8%zH?KiQ{uWd?K)9OTZmO zVd;1orpN6dR6c=!7=!dtjlTYdr#Zn(Qh3xaayJ)t8SHTa3#pVgu!6<xb`FngFG9L8 zX{LEMFmCiltrvZu_tRcnF0#Gb_7fF~Q*TMS9{#2h&#*zuL{)+DeF4x$uxpeTtiL2^ z?q|{cJ)Sk%2zzWXW91vlOr+C(k4^VDjHyW#l($K43it3Kz~fHbJxF<INy22zEJB>` zM>`cH)<w_iP|B{AXxzl*a~c@-{pATzPW#8#iOJ(iuj^ar`Hm4l?bJ1$FSQ~JEjKwN z=CbNN0mPMafJ?3ux^wKm9|ERQmu0cDsb?FYP{+VG*cdPx&mg;GWQ2iGc`@Q=atA?v z1}^6Ysg4_x&#SNVpgTxfQeZq1Pcf>`g^K)X&BBencap>%Y=JwMXzSvsPm`GLbO0<P z=B@#NZmWlX5DFSo@-xfv@G500)!(xFd@f6Tx>a~0_a60RBk%9{$AdOZ#WRvJ=o?sF z=8zabhhk*aU<R6ggi#$@oWU$?JTY(~T93JO^3?Bj9w=sgf1w?%`NC^gW)K{a5_xgp z&(b4p!kTsH*bGix_=@lDp0g__R=cl)%C$Z+ii{R(Z-x)MgShxmO_C%_?YrR!eYx%R zL0lLm)?4o)+;mTP_|yIo924@$0P1lq{-|ANI699MfPEq!3+noPPjK4Y)`7!7`qmWN zS`8Il=ol|Es(GS?2&5G#o&e~;a~R0+fRf<%WX@yM{ruzLv6}9({cm2s+#K`3k^CIm z_I4Kl=v&J{r>A5x3{2USoE@w~y@R(?ZQ+;Gc@c+?62?tgQArdg3cMgiO<gwT7n}BB zXBpLrKrFnVcL7u|ywXhLL&?oT$$8K+s-N~$WVVy%41$&U>C-8Xbr>*5L!GHbA$7FM zBU|U$I!K7kZ)jFBnr{F~HrQUX8sdNr8b?snqIvKR?y<lT7iiS2tJ=SSnypaaJM57h z4EzFwcY&INVMQTs*3-7z2PUGdaTi);FVHh8L3y_psu~5*JVXMuVUg(uV)Lq;JM%V} zGn1zxVzU)ge{7ePuJ@w|UYcr@b{wlVP;>Pnj9Y7WQ&G5_etZ4U(Q)=|qcMa~Al3o& z2%C4GL$6)0QD}YuFwIOQ%4qbOcCrk`H_>&JNfTX;u<)k9Hw#6<0?xg~0{J_2WYp;v z2@pB}qR20J<i8iY0AJ5k>+r#CUj&Hub#Y!D`;6<xvBp3-<QrY1j1|ji-0sX!J|zc{ zGC72eQpMOT!`nL)06rQ{8%3_OPG;|h3x^eM6PFJ12YG9x0S%Q$%OTt!(LGhQb*<9r zpZqItnE9q|Waie?0c+EVI(z@fcRnc*cR4u;2d-+p{u`C>Ex+3O7174{z6cG){0kUQ z`o6JmAPy>7o=|KC&kSdpXdFoqR3H8PMC)@{Dd?1k<4lt?G4p{B*Dtlm8#65gP-h+W zSvxNJ)T-m+%7?%eVxcAE9LE}YSKW8ft~;u^z3MFR2GiYr1aA7O0T<#~|LX;@b=i8k zbBZ&wF0H|9`u(xWV9HWli|;M-?z28FMM9Mi8dhXf(#A#X@8z285+N2OY3U|b0V7SB z(<;m>2bR3a(M#W>%wc|<(yBllRU}C<K%as`r5mEQ&a-`&f)-?eQkhh?qD;YKv6ubT z1_$dT_texWb8%JD;Mln=E0CAJ_D~yu$O=Y(WLKVNJE5!j2vt8S#U}HVJzDi{y~_8* zEo@Z@tR9_bhWHy*+^a$r{iS7BgbBmrPjpXY^8dFpW8CR(_hQaH&pqG(t3t07_MW;} z(`Hx1Gxe2M082C!LzS`Q@lm-U;cV=mK8rWQ{Q-Hk*zY_5*dB4s6qD@sW2Ek<Ju6$} zGFge(o$)XYAVH#ZUxu#p9GV>4dLJ*T1X7H>YXla<Q;q;WP2C~tr`I9v01aZA^rdrQ z)=U)o(>KdV81to`4EOQWOx{MJ$r@tCyD*qb)BAe<XQ|*<X$;$f>(Z1bdzVGy?8}!A z+zK0AWDI<nNpS#=>|3^6bG(G|5oqRYT9v%t0Ol)II^o{^%C2=LkrG{Z6cilx4e%nd zm4$dAezdjr1q8n7_HiA~%86*&i#&+VGOHS-u(s$!a<aVdK-dN0&YTB~^s@psNky=l zr%#3f^J{2at48T=tfN+K5+|&$!=<{WvG<Nr8*lYywHZPjX7<Z_`CD5mL`sn5i$1}5 z79#5R$0lE?eu9yCP0$-X>oh{2uJ@C_{p*m^7rHXjue#PyRa>~LACW*6$cZtlyV%r{ z6~XmnI=5#YrS7eQUS{oce@Z}u;1B`02?Zkg3vwdw86iYp$mwEch52&7don-y9wa*A z9pv#|Ou&b(&0jF8jl4pdx+zMi!hbu$@Ux?(Ci6jN+>#@JTz#AKoFb<X^zAEiFd5pm zKJ6hw54x^ZK#?~?;Ag;m-&=x#m>&pXGi6Tn@mgh@+21+aCw95f{S-MbA(wx1hFpUk z18D*Tj&)xpM2-=a-K$>D?w0gGrVskYcmqh}D7`4%{5pgdoE(tGJV+gPo|f`A)!Ne= zH+MHF9n6fMD^m;tlDYr={AJob8qD;9P8fNV&H-10E^PsHwFb_>ZQbbU8?T#EBLeML zP4yng>|d{ETIgwn|BxS2AzxphUCj1w#JE(x6!RsDq*f>VjWdCJ(kspXl_4h108_nN zg~m%i9^Di`-<YqKEJOf*jK;KZ<z7@K__-eS)Wc(_!Gb{yo*1xO%dq3gDitFOL(ro| z9*}bsg+au5ViP3be?*Cg(XW4M@r=*70pFJvSU!>LhowYHgAY`J(H^dT4LK@MXN1zv znMDM{sqa}zgHWNNF;Yno&FuPUc(P6po0%xtdAnp|c#Du|x{0#@akIOlF^k!jxr1e? ztW5?&s)<Z{<9ozG9l!WY4JH8_sp2RTs`oaH#sK<!B8)7eDhi(?&#zJSAJ<nOW{uAd zug^}4%2>j7?+a@}E?B81R>LOee@oTQ62A&>MT*&cA{(N{D;)_gtlr%ZhcQZae?)M! zMlDZO7t@WGKxI=JH@g@<FTU$@OjR&-=e8~$(-lJVw^U`|TR{u6<Myk83C%a2sDOD8 zD?o!8tGVxutptd~$ijYYzGWIhjO5ncy|+P_wMdDQ&Sx8u!Uf8w4wYIZ=vo9v22eqj zH|G?cQl4cJ*X|UB@Y&C@Rb*Od%bH(&^9A@x#ZAtyemWn&*n@zdEMvW|>Ub6iJj2Kj z2!#hb&Zxa=4a$L-T|l(P5vl|Z7We}?I=GBeNHFpFqYIxtqbrp-4bUZ-5QD$@hBR)c z(!WOfvCfg;eywKLg-|aO7Mne|7Y776g-{oZNjT2K`}{kfCD}qRwXj=(r?YureCN^$ z%+5T9R@lYopxhGv#BmG(U2O(d+8(dzQp9D2D!Ou9N|`~_RR_!n89iT_G)yqH8HEud zr2<qy!0XZWs5as&+%jcc+~DV6KSYV{Upc)n#b6(OjIuf@N9{Xq$iJU;o!_gk)YDyO z>>!1)7ZdF4(TeK!+TJGdkWY5niabo=l&}|p2Kq7(5lbAVp#%3BsqU95|4eE&rVe#f znKC{6N_A^mcXn`ZwPuf1@NP+7&QP7Ig_^_9(F`2BSVEJYZ$IP^D2fNlXM9_KRVHub z!@ItxXKst1_-~Xp>2#F~g)NsbC`RFrch9>R(VN+QOmpWm3*!mlE|$eu%n%H#g#D{B z7KctE=78d{=t6Cxz(Y?(a3NxU&v+RLm#~zc3+{DJH&uLr$7z*bfQ7-U4|7U;N+VDc zesIq|Wh4?f3+`&BlTa2Ka&EdhYo$aiREP;jZ~4-CjAo{W_0(G8pt>?cJ(ZMLX`hJy zajFydYiX-m3o{?Ui=j=u2P}~8gwskM*A8+8&&M0)<KE15xg@-~mPgv@q(-i`t@_z5 z%1S+&+i=6t^pLdOE(t~yno3W*WML^U8rqVKZ&hAVAd@pt%Ysy^!UE;_l4iK3_TMU{ zR8R2Va2l0}JMeEI>{7@4M^=v&JbLzKBV19~uD}kq?<l0&x!ZkfU-90m&$1ABy$BIG z*;JXD;ZIr@EXFRgBS+5`k>WsJa#D=pe&1w(hhEY}Ue}7wIQY)dHib{nWMNV)!+cyt z0)yW2jXe0Au$MtSAd9TFBy(?5zk`;ocD^bfPtj2KWtJE2B)Imcc34pT?FVHeSd}c$ z00+x3+PZqp**~i35{lH<SZLHP|LyXw4H?&uVcL*fx3(a64*>76=m6h$9t-Vd6}$-I ziUWJeiZ!jMM+Fm3?*gqMAO9L0$gZ9b2Qdii+2Ly{?%3QzD++zEZJFgjf5!#X7w6A+ z?#yLJ!nUJ2`!-T-D70;*dPvJekXu(}0P;verov6d=0&rh6F?bTR}$4t8XR}M*p9&+ zYr-=uI(LhD11-!Qt7bf@@k%WpsCz{0_9C~plsd+{C-clOy<ZDtE`N&M-wc~y?%{>V zKvke?m5oqZU9r$5-xM<q-yEUc9npv>fiB<HqD-lfRK{7tX;m|*$`Z~s(#aCXEy2=c zr#+Z6#lqHZ+Yq4?d5#xloFu4R8oG;oFzJNBSUq6sjdI>&j0p0ZE=f!H`gL~pJ`cn< za_r>0JqAm<-Jh1*P;WUPlL%2n4vM<Um^<Ov0ulyxfoghKMwYW#=f6|%+XbDjg%J9$ z$%qQ<bxbL!8yIXkN+ds>e%eW4&Td<@Y?0&xJ+-fSa*)}}vOa|A$3XsYH0&suqumi_ zB61y9i6+S9K)L4{=M{GLpf-}&u8}@#MFzp1s^^VBQwBpC(n7s#l)nsF2>+ldTAnVB zlDy^>w=b*CMyThnvFP38(D}s!`Cr?FUQFw0^ntoq1S1tOy3<mVG9xt;9JKPu97;g( z5lDMPM{~5JhSept<00qaJ&z&*vKS)3L5Oxi_NejECN~8Hp<kLV-j6WCWR1qWFe$lS z3&{l1+078Grd{bZVkjDJoj$<*N&0JNtW_-*1jZDjhsvz|z)`OkeR$nU$qoo0LM6ef zpMx^n2(ltNI+MwPozVn^&bqbMe#(_Gl56G>VH2hr3KMC#yiiVIIpi1kcqYJ|jmGRc z$v>p-0sB;O^@H)_5p0!i)IW+Y=14(gJJmLq9CGXTEUS8_m^}sB)DT8AYj9k9*nfFe zT!lhG*2b#%{XrYfkMQiw7QXIkK`ZDMOE}A5puWxQ6<!=I-ltc-(u)?!*_XO6$eX2o zKFlMO7WDN6qqM$Bp5p}U<jN8~MRi>~1XyRYHVTI0yv#hf9N6Fz2>>O7+5E^V+g`%O z4}Ltsk!!KOpyWN-|1orWCCE!D3@tcN$}a^4(jR8SjAptX_R!3GE%w4=9#c3X3nY;E z!^BXg2-*uN4#iXEbZ`(amp2i6@v~HyG$j#MC0Qj=lx|;tbHa)m78}7t-}0shd0|D> z`jJ^iKfjFIaWtC_8GqNBQTWK-ye@qu3K9xEowX>N1CvNggGu0ce`|NQU^UKR*k9iO z#pHKq7AxWpwY5B8<jNG9o0DNQ+1)Oz0Cm*L(5ZCoRP(v}A4DH1ZH*eIuWj-`V}o!5 zQ{&}!BzA1rXZk}NMFT=-Vg!fCM^$R<6e3%2am+vZ)UUsPyGeFo09WQ@GelJ}$^D@v zFK36`5XbMPr^bU=bD&VEKfJTY=+J#j+a5}+RJ9GAyL30IA!0Vt!5sw5-jI;-pVz<h zP<_eol~CgHFhFggM)B76W4J`G67wk^X1%Pb%E^BH8sx=A+Tq1j=st^%CNXK97OLfl zujCql@p@7QWZ>rktpQU0QA)&UUJ3q=<0({)51$H(S_VJKKw3P?>;<%qs8Xx-S)Iax zFrw?CkOHl6fB+oH^zg|zK{3jjGOlpI0mFP&03)2IWB@^+?C-CF02xrk27rHga|i^z z0)b(lp@42=AnqM8fMcQUl7^LWO)BD=RmC)`ifLCA(yes_gd$*KTG~e1-{=TuKm-wr zKzOQP0&3H~mf;Vl?SD-T)#|_~H?$q2%|1>5hS9G8S*7(b-~6-9Pm;S7W++?YuR{8a z#S7{)6fdaEP{9*L;bMU^)Jb9%NZ2J>=D4jjPY(flBO4F_W|OjslK6r0ZmR~ZhgcU; zci_*C+9FaPTX|Kr1iDa939j#u0DhD~V~Ak1&tw~>PUewzka{I#Z;g7jQh)#e000Dw z*U+010L=Z(Yh{DVjvKPM&E7=#!4J`USGvNaeKey)DivjAg{M?~n%hYK@s3?xO;;MG z%bSq4`~>I*?Lfx4%xJN8X7z1MSO+|&msVQZ(8wmCRV8`A6&W7h|5A$v$$nQaT{1h{ gFe+H*f991M)yu20KmY+={2RailO6W}0000008%BHQ~&?~ literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/widgets/visual-editor.mdx b/apps/web/content/docs/dev/widgets/visual-editor.mdx index 545db1f66f..2e5084d5fa 100644 --- a/apps/web/content/docs/dev/widgets/visual-editor.mdx +++ b/apps/web/content/docs/dev/widgets/visual-editor.mdx @@ -1,931 +1,108 @@ --- -title: Visual Edit Mode -description: Turn a public page into an editing surface without changing a single ContentZone - and without shipping a byte of the editor to the people who are only reading. +title: Visual editor +description: Arrange widgets on a VitNode page in the browser. Open the visual editor from the user menu, add, move and edit widgets, then save, with keyboard support and a preview. icon: MousePointerClick --- -**Visual Edit Mode** is the part where somebody finally gets to move things around. +import { ImgDocs } from "@/components/fumadocs/img"; +import editMode from "./visual-editor-edit-mode.webp"; -A page renders its [content zones](/docs/dev/widgets/content-zones) the way it always has. An authorized moderator opens the user menu in the header, clicks **Edit widgets**, and the _same page_ - same layout, same fonts, same widgets - grows an outline around each zone, makes every widget draggable where it stands, and slides a sidebar that slides in down the right-hand side while the whole site moves over to make room for it. They rearrange, edit in the sidebar, save, and leave. Nobody was sent to a separate admin screen to guess what the result would look like. +The visual editor lets a moderator rearrange a page's widgets on the page itself. They open **Edit widgets** from the user menu, the page grows outlines around its [content zones](/docs/dev/widgets/content-zones) and a sidebar slides in, and they drag, edit and save without leaving the page. ```text -public page - ↓ Edit widgets ← the user menu, on whatever page you are on -the same page, editable - ↓ Save -public page again +public page → Edit widgets → the same page, editable → Save → public page ``` -{/* Image prompt: A VitNode settings page in Visual Edit Mode. The left three quarters is a normal-looking settings screen with a profile form in the middle; above and below it, two content zones are outlined with dashed borders and small corner labels reading "Before profile" and "After profile". One block is selected with a blue ring and shows a small floating pill of icon buttons (edit, delete) in its top-right corner. The right quarter is a full-height sidebar headed "Widgets" with a search field and a grouped list of draggable block cards under "CORE" and "EXAMPLE", and a footer with a small amber dot beside "Unsaved changes" and a Discard link, above an eye-icon Preview button, a Finish editing button and a wide blue Save button. Dark theme, 1600x900. */} - -## `ContentZone` did not change - -This is the promise the [Content Zones](/docs/dev/widgets/content-zones) page made, and it is worth being specific about how it was kept. - -```tsx -<ContentZone - id="before-profile" - blocks={content.beforeProfile} - registry={blocksRegistry} +<ImgDocs + withoutBackground + className="*:max-w-full" + src={editMode} + alt="The newsroom zones page in edit mode: dashed outlines labelled Before profile and Sidebar, a selected Callout widget with Edit and Remove actions, an Add widget button in the sidebar zone, and the Callout's Body, Title and Tone fields in the editor sidebar above the Finish editing and Save buttons" /> -``` - -That is the zone in view mode. It is also the zone in edit mode. There is no `EditableContentZone`, no `editable` prop, no second component to migrate to - and nothing stored today needs rewriting. - -Internally `ContentZone` asks one question before it renders: _is an edit runtime present?_ In view mode the answer is `null` and the Stage 2 path runs untouched, including the `return null` for an empty zone. In edit mode the runtime answers, and the zone hands it everything it knows - id, blocks, registry, allowlist, wrapper - and lets it render the editing surface instead. - -A visitor pays one `useContext` that answers `null`. That is the entire cost of a feature they will never see. - -## Turning it on - -There are two ways to turn on visual editing, depending on how your page manages layouts. - -### 1. High-level: `<EditablePage>` (Recommended) - -For pages that declare their zones with `defineEditablePage`, wrap your zones in `<EditablePage>` from `@vitnode/core/widgets/page`. It automatically resolves zone data, handles defaults, rebases canonical server responses, and mounts the editor runtime when edit mode is active. - -```tsx title="plugins/example/src/pages/zones-page.tsx" -import { EditablePage } from '@vitnode/core/widgets/page' -import { ContentZone } from '@vitnode/core/widgets/zone' -import { createContentEditorAdapter } from '@vitnode/core/content/editor' - -const SettingsPage = ({ canEdit, layout, search }: SettingsPageProps) => { - const adapter = useMemo( - () => - createContentEditorAdapter({ - page: settingsPage, - save: async (payload) => { - await savePageLayout(payload) - }, - }), - [], - ) - - return ( - // [!code ++:4] - <EditablePage - adapter={adapter} - canEdit={canEdit} - layout={layout} - openEditing={search.edit === true} - page={settingsPage} - > - <ContentZone id="before-profile" /> - <ProfileForm /> - <ContentZone id="after-profile" /> - </EditablePage> - ) -} -``` - -No button and no `editing` state: `<EditablePage>` tells the site shell that an editable page this visitor may edit is on screen, and the shell puts **Edit widgets** in the user menu. `openEditing` is only for arriving with edit mode already asked for, which is what a `?edit=true` link does. -See [Editable Pages](/docs/dev/widgets/editable-pages) for the full breakdown of `defineEditablePage`, defaults, and zone permissions. +## Before you begin -### 2. Low-level: `<ContentEditorRuntime>` +- **A page with editing turned on.** An [editable page](/docs/dev/widgets/editable-pages) gets the editor, storage and saving from core; that is the usual way. A page that stores widgets somewhere else uses a [custom editor host](/docs/dev/widgets/custom-editor-host). +- **The page's moderator permission.** An editable page names it, such as **Widgets → Edit page widgets** for the newsroom plugin. Administrators with full access hold it already. -For custom hosts that manage their own raw zone persistence and do not declare an editable page, wrap your zones in `ContentEditorRuntime` from `@vitnode/core/widgets/edit`: +To try everything below, open `/newsroom/zones` from the newsroom plugin, signed in as an administrator. -```tsx -import { ContentEditorRuntime } from '@vitnode/core/widgets/edit' +## Open the editor -;<ContentEditorRuntime - adapter={adapter} - enabled={editing} - onExit={() => { - setEditing(false) - }} -> - <ContentZone id="before-profile" blocks={content.beforeProfile} /> - <ProfileForm /> - <ContentZone id="after-profile" blocks={content.afterProfile} /> -</ContentEditorRuntime> -``` +Open the user menu in the header and choose **Edit widgets**. The entry only appears on a page you can edit. -This one takes `enabled` from you, so a custom host that is not an editable page owns edit mode itself - and has to draw its own way in, because the user menu only offers one for a declared page. +The whole site moves over to make room for the **Widgets** sidebar, and every zone gets a dashed outline with its name. An empty zone, which renders nothing for visitors, shows **Drag and drop widgets here** and an **Add widget** button. -| Prop | | | -| :--------- | :------- | :---------------------------------------------------------------------------- | -| `enabled` | required | `false` renders the children and nothing else. `true` loads the editor. | -| `children` | required | The page. Every `ContentZone` inside it becomes editable. | -| `adapter` | optional | Where **Save** sends its payload. Without one, Save says so and does nothing. | -| `onExit` | optional | Called by **Finish editing**, after the unsaved-changes prompt. | +Nothing on the page restarts. A half-filled form or a playing video around the zones keeps its state. A link with `?edit=true` can ask for edit mode on arrival, but it never grants it. -### Who gets the button, and where it is +## Add a widget -The entry lives in **the user menu in the site header**, next to My Profile and Settings. That is one place for a site-wide action, it is on every page, and it means a page that happens to be editable does not have to find a corner of its own header to put a button in - which is how three pages end up with it in three different places. +The **Widgets** sidebar lists every widget the page's zones accept, grouped by plugin, with a search field on top. -It draws itself from what the page publishes, so there is nothing to render and nothing to wire: +- **Click** a widget to add it to the targeted zone, or to the first zone that accepts it. +- **Drag** it onto the page. A blue line shows exactly where it will land. +- **Add widget** on a zone targets that zone. The sidebar says _Adding to …_ and lists only what that zone accepts. -```text -<EditablePage canEdit …> → "this page is editable, and this visitor may" -site shell → Edit widgets in the user menu - → the room the sidebar needs, from the whole page -``` +The new widget is selected and its fields open in the sidebar, ready to fill in. The **Layout** section adds an **Area**, which places widgets side by side in up to four columns; see [Layout areas](/docs/dev/widgets/layout-areas). -`canEdit` is still **yours**. VitNode does not decide who may edit a page, because VitNode does not know what your pages are - a plugin's settings screen, a marketing page and a user profile have three different answers. On editable pages it is usually checked against the moderator permission the page declares (e.g. `widgets: ["can_edit"]`); pass `false` and the entry is not in the menu, the runtime is not mounted, and the editor chunk is not requested. +## Move a widget -<Callout title="A hidden button has never stopped anybody" type="warn"> - `/example/zones` reads the visitor's effective moderator permissions in its - loader and only then says `canEdit`. That is a *signal*, not the boundary: the - save endpoint behind the adapter asserts the same permission again and answers - `403` without it. A URL like `?edit=true` is the same kind of thing - it may - *request* edit mode, and it must never grant it. See [Editable - Pages](/docs/dev/widgets/editable-pages#can-i-edit-this). -</Callout> - -## The lazy-loading guarantee - -The editor is not small. Drag and drop, a block catalogue, a form runtime and a properties panel add up, and every one of them is useless to a visitor reading the page. - -So **none of it is in the public page's bundle**. `@vitnode/core/widgets/edit` reaches React and nothing else; the only path from it to the editor is a dynamic `import()` behind `React.lazy`: - -```tsx title="packages/vitnode/src/blocks/edit.tsx" -const EditorRoot = lazy(async () => await import('../editor/root')) -``` - -The chunk is requested when `enabled` first flips to `true` - that is, on the first click of **Edit widgets** - and never before. - -```text -view mode blocks/zone.tsx → react -edit seam blocks/edit.tsx → react -first click editor/root.tsx → @dnd-kit, @tanstack/react-form, sonner, … -``` +Drag a widget by any part of it. Drop it above or below another widget, into another zone, or onto an empty zone. A zone that does not accept the widget turns red and refuses it; nothing moves. -This is enforced, not merely intended. `packages/vitnode/src/editor/boundaries.test.ts` walks the real module graph and fails the build if the arrow ever points the wrong way: +Everything works from the keyboard too: -- `blocks/zone.tsx` and `blocks/edit.tsx` **eagerly** reach `react` and nothing else; -- neither reaches `@dnd-kit/*`, `@tanstack/react-form`, `sonner`, `@tanstack/react-query`, `@tanstack/react-router`, `cmdk` or `zod`; -- `blocks/edit.tsx` **does** reach `@dnd-kit/core` once dynamic imports are followed, which is the proof that the only path is a dynamic one; -- nothing under `src/editor/**` reaches `views/admin/**`, or any database or server package; -- the sidebar is the one panel `editor/root.tsx` mounts, `editor/toolbar/` and `editor/block-picker/dialog.tsx` do not exist, and the editor no longer reaches `cmdk` at all - a revert fails the test instead of quietly shipping a modal again. +| Key | What it does | +| --- | --- | +| <kbd>Tab</kbd> | Moves between widgets. | +| <kbd>Enter</kbd> | Selects the widget and opens its fields. | +| <kbd>Space</kbd> | Picks the widget up, and drops it the second time. | +| <kbd>↑</kbd> <kbd>↓</kbd> | Moves it through the positions of its zone and into the next zone. | +| <kbd>Esc</kbd> | Puts it back where it started. | -Turning that static `import` back on would be a one-line change and a silently 200 kB heavier home page. The test is the thing that notices. - -## Turning it on does not restart your page - -Lazy loading is easy to get right in a way that quietly breaks the page underneath. The obvious shape is this one: - -```tsx -if (!enabled) return <>{children}</> - -return ( - <Suspense fallback={children}> - <EditorRoot>{children}</EditorRoot> - </Suspense> -) -``` - -It looks like a toggle. It is a **remount**. React reconciles by position in the element tree, so the moment a wrapper appears above `children`, everything in them is torn down and built again: `useState` resets, uncontrolled inputs empty themselves, focus is lost, a playing video restarts. Reusing the identical `children` element object does not help - position is what counts, and `<Suspense>` alone is enough to do it. - -That is not acceptable on a page somebody is already using. So the runtime is built the other way round: - -```text -site shell <div> ← above the header, padding is the only thing on it - ContentEditorRuntime ← public, always mounted - ContentEditContext.Provider ← always mounted, value is null in view mode - {children} ← one fixed slot, never moves - {enabled && <Suspense><EditorRoot/></Suspense>} ← a SIBLING -``` - -The editor is never an ancestor of your page. Turning edit mode on changes one context value and mounts a sibling; nothing above `children` changes, so nothing in them remounts. - -The site shell above it all is a plain block `<div>` at the document root, and it stays one whether or not anybody is editing. That is deliberate rather than incidental: **padding only transitions between two values of an element that already has a box**, so a wrapper that appeared when editing started - or went back to `display: contents` when it ended - would snap to its new width instead of gliding there, in whichever direction it was going. It carries the transition and the two custom properties and nothing else. - -### Then how do zones become editable? - -`@dnd-kit` needs its `DndContext` above every droppable, and the zones are inside your page. Since the editor may not wrap your page, the zones come **out** to it instead. - -In edit mode `ContentZone` renders a bare host element - your `as`, your `className`, the usual `data-vitnode-zone` attributes - and registers that DOM node with the runtime. The editor, which owns the `DndContext`, renders the real `EditableZone` into each registered node with `createPortal`: - -```text -page editor -──── ────── -<aside ref> ← createPortal(<EditableZone/>, node) - inside <DndContext>, inside the editor's own providers -``` +Screen readers hear each step with the widget's name and the zone, such as _Callout was dropped into the after-profile zone, position 1 of 2._ On a touchscreen, press and hold a widget to pick it up. -The markup lands where you put the zone; the React tree it belongs to is the editor's. One consequence is worth knowing: a block rendered in a zone reads React context from the **editor**, not from inside your page subtree. Context from your app root reaches it as usual - the router, the theme, the intl provider - but a provider you render _between_ your page and a `ContentZone` will not. No built-in or plugin block relies on that today, and if yours does, pass the value through the block's own data instead. +## Edit a widget -## The interaction model +Click a widget to select it. Its **Edit** and **Remove** actions appear on the widget, and its fields open in the sidebar under **Properties**, with **Duplicate** and **Remove**. The widget on the page changes as you type, so the page is the preview. -A block is a real component. It contains links, buttons, forms, embedded video - things that do something when you click them. In edit mode, clicking one has to mean _select this block_, not _follow this link_. +A widget with [variants](/docs/dev/widgets/block-variants) shows a **Variant** picker above its fields. Changing it changes the look and keeps the content. -VitNode solves that with three layers on every block, and one escape hatch: +**Back to widgets** at the top of the sidebar returns to the list and clears the selection. -| | | -| :---------------------- | :------------------------------------------------------------------------------------------------------------------------ | -| **`inert` container** | The block's own component renders inside an `inert` element, so nothing in it can be clicked, focused or tabbed to. | -| **Transparent overlay** | A full-size `<button>` above it. Clicking anywhere on the block selects it; screen readers get _"Select the Hero block"_. | -| **Floating actions** | Edit and Delete appear on hover, on focus, and while selected. There is no move button: the widget itself is the handle. | -| **Preview toggle** | Removes all three. The block becomes the real thing again, exactly as a visitor sees it. | - -The alternative - asking every block author to make their component "editor-aware" - was never on the table. A block's component is public rendering code, it is written by plugin authors who have never read the editor's source, and it must not grow a second mode. `inert` does the whole job in one attribute, from the outside. - -Preview is there because the illusion has to break sometimes. Does the video play? Does the accordion open? Is the call-to-action button the right size once it is actually hoverable? Toggle Preview, use the page like a visitor, toggle back. - -## Empty zones become visible - -An empty zone [renders nothing at all](/docs/dev/widgets/content-zones#empty-zones) in view mode - no wrapper, no placeholder, no gap. That is deliberate, and it stays true. - -In edit mode the same zone renders a dashed drop target with its name and an **Add block** button, because now somebody _is_ looking for a place to put something. - -That name is the zone's id made readable, so nobody has to decode your naming scheme: hyphens become spaces, the first letter is capitalised, and each `:` scope becomes its own part. - -| Zone id | Shown as | -| :------------------------ | :-------------------------- | -| `header` | Header | -| `before-profile` | Before profile | -| `settings:before-profile` | Settings · Before profile | - -The same name is used in the sidebar (_Adding to Before profile_) and in what screen readers announce during a drag. The id itself is untouched - it is still what gets stored and what you write in code. - -```text -view mode before-footer (nothing) -edit mode before-footer ┌ dashed box ┐ - │ + Add block │ - └────────────┘ -``` - -Finish editing and it disappears again. A page with eight placement points and two filled ones costs two in public, and shows all eight to the person arranging them. - -## The editing sidebar - -Everything the editor asks of you lives in one panel down the right-hand side: the block catalogue, the properties of whatever is selected, and the **Preview** / **Discard** / **Save** / **Finish editing** row at the bottom. There is no modal to open and dismiss, and no second panel competing for the same corner of the screen. - -The **whole site** is padded, not covered - the header, the page and the footer all move over together, the way the AdminCP dashboard moves over for its widget panel. So the sidebar never sits on top of anything: not the zone you are arranging, and not the user menu you opened it from. Below `md` the same sidebar becomes a bottom sheet, because 360px of a phone is not a sidebar, and the padding moves underneath the site instead. - -Both halves of that take 200ms and start on the same frame, in both directions: the page's edge and the sidebar's edge are the same number on every frame of it. **Finish editing** plays the whole thing backwards - the editing chrome goes at once, so the page is public again immediately, and the editor stays mounted just long enough for the sidebar to slide back off screen while the padding shrinks under it. - -Which frame that is comes from the **editor**, not from the seam that loads it. On a first open the editor chunk and the sidebar's own messages take a moment to arrive, and a shell that started widening the moment edit mode was _requested_ would slide the page over to make room for a sidebar that had not loaded yet - the page moving first and the panel catching up, once, on the first click only. So `editor/root.tsx` is what asks the shell for its room, and it cannot ask before it exists. Nothing moves until the sidebar is ready; then everything moves together. - -### One panel, three modes - -| | | -| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Widgets** | A search field, a **Layout** section holding the [Area](/docs/dev/widgets/layout-areas) entry, and every block this location accepts, grouped by the namespace that provides it. | -| **Properties** | The selected block's name and type in the header, next to Duplicate and Delete, then its [variant](/docs/dev/widgets/block-variants) picker and its fields. | -| **Area properties** | Duplicate, Ungroup and Delete area in the header, then the Area's **Layout** (Columns, Alignment, Distribution) and **Spacing** (Gap and the space around it). | - -Selecting a block switches to **Properties**; selecting an Area switches to **Area properties**. Each panel keeps its header pinned while its content scrolls, so the actions never scroll out of reach. The **←** button at the top (_Back to widgets_) switches back from either _and_ clears the selection, so the page stops ringing something you are no longer editing. Deleting the selection does the same thing on its own. - -The footer keeps the state of the page in one glance: a coloured dot and a word (**Saved**, **Unsaved changes**, **Saving…**, **Save failed**), **Discard changes** beside it, and underneath **Preview**, **Finish editing** and **Save** - the only blue button in the panel, lit up only when there is something to save. - -In **Preview** the sidebar collapses to a slim bar holding **Back to editing** and **Finish editing**. It never collapses to nothing - a preview you cannot leave is a trap - and the editor stays mounted behind it with every unsaved change intact. - -## Two ways to add a block - -A catalogue entry is a drag source _and_ a button, because those answer two different questions. - -| | | -| :----------- | :------------------------------------------------------------------------------------------------------------------------------- | -| **Drag it** | You care where it goes. An insertion line shows the exact position while you are still holding it. | -| **Click it** | You do not, or you already said where. It goes to the targeted zone - or, with nothing targeted, the first zone that accepts it. | - -**Add widget** on a zone is what sets that target: the sidebar switches to **Widgets**, its header shows _Adding to Sidebar_, and the zone stays lit until a block lands or you clear it. **Add widget** on an Area targets the Area instead, and the header says so - _Adding to an area in After profile_ - because naming the zone alone would be a lie about where the block is going. - -The catalogue's own **Layout** section sits above the plugin groups and holds one entry: **Area**. It works exactly like a block entry: click it and an empty Area drops into the target, or drag it and it lands where the insertion line says. An Area is not a registered block and has no type, so what travels with the drag is the layout itself rather than a block id - and dropping one onto an Area is refused, because [an Area cannot hold another Area](/docs/dev/widgets/layout-areas#areas-cannot-contain-areas). While an Area is the insertion target the Layout section disappears for the same reason. - -Either gesture inserts the block, selects it and opens **Properties** in one step, so the next thing you do is fill it in. The new block fades in where it landed and scrolls into view if it landed off screen - handy when a click sent it to the bottom of a long page. - -### How a drag feels - -A drag is meant to feel like picking something up, not like watching a diagram. - -| | | -| :----------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Picking up** | The card lifts a touch (2% larger, deeper shadow). The place it came from turns into a dashed slot, so you can see the gap you are about to leave. | -| **Moving** | Every zone that accepts what you hold lights up softly; the one under the pointer lights up fully. Zones that refuse it dim instead of shouting in red. | -| **Dropping** | The card settles into its new slot in 200ms, shrinking back to its real size on the way. Drop a catalogue card nowhere useful and it glides back home. | -| **Reduced motion** | With _reduce motion_ switched on in the operating system, all of the above happens instantly - same feedback, no movement. | - -### The catalogue follows the target - -`allowedBlocks` on a zone is what the catalogue offers. Not everything installed - everything **allowed** in that location. - -```tsx -<ContentZone - id="sidebar" - allowedBlocks={['core:text']} - blocks={content.sidebar} -/> -``` +## Preview, save and finish -Target that sidebar and the catalogue shows exactly one block. Clear the target and it shows the union of what the page's zones accept, because now any of them could be the destination. Same `allowedBlocks` value, same format as a [`blocks()` field's `allowed`](/docs/dev/widgets/blocks-field#restricting-what-may-go-in), now doing a third job. +The sidebar footer shows the page's state (**Saved**, **Unsaved changes**, **Saving…**, **Save failed**) and these buttons: -A zone that allows nothing the installation provides says so, rather than offering an empty list. +| Button | What it does | +| --- | --- | +| **Preview** | Hides outlines and handles, so links and buttons inside widgets work. **Back to editing** returns. | +| **Discard changes** | Puts every zone back to how the page loaded. | +| **Save** | Stores the changes and stays in edit mode. A **Page saved** toast confirms it. | +| **Finish editing** | Leaves edit mode. With unsaved changes it asks first: **Save and finish**, **Leave without saving** or **Keep editing**. | -<Callout title="The catalogue is not the write boundary"> - The allowlist on a zone describes a location. The one on the `blocks()` field - **enforces**, on every create and update. The catalogue filtering by the - zone's copy is a courtesy to the person editing - the field is what refuses a - block that should never have been stored. -</Callout> - -## Drag and drop - -Grab a block anywhere on it, or a catalogue entry anywhere on its card, and move it. A click without moving still just selects the block, and an Area is dragged by its own frame - its header or the space around its columns - so grabbing a widget inside an Area moves that widget, not the Area. On a touchscreen a swipe keeps scrolling the page; press and hold to pick a widget up. - -- **Reorder** inside a zone: drop it above or below a sibling. -- **Move across zones**: drop it into another zone, or onto one of that zone's blocks to land at that position. -- **Into an empty zone**: drop it anywhere on the dashed placeholder. - -Identity is the block instance id throughout - never an array index - so a block that crosses a zone keeps being the same block, with the same data, and the properties panel does not blink. - -### Before or after, never into a block - -Dropping onto a block inserts **before** it or **after** it, decided by which half of it the pointer is over. That blue line is the answer, shown before you let go. - -Nothing ever lands _inside a block_. Dropping **into** something is the Area's gesture: drag a block onto an [Area](/docs/dev/widgets/layout-areas) and it becomes one of that Area's children, at the position the line shows. Drag a child back out and the Area keeps the rest. An Area dropped onto another Area is refused out loud - _An area cannot hold another area_ - rather than silently landing beside it. - -### The keyboard does all of it too - -Drag and drop that needs a mouse is drag and drop half the people cannot use, so every block is a real button and every gesture has a key. - -| Key | What it does | -| :------------------------ | :-------------------------------------------------------------------- | -| <kbd>Tab</kbd> | Reaches each block (and each Area's header), like any other button. | -| <kbd>Enter</kbd> | Selects the block and opens its properties. | -| <kbd>Space</kbd> | Picks the block up - and, the second time, drops it. | -| <kbd>↑</kbd> <kbd>↓</kbd> | Moves it through the positions of its zone and on into the next zone. | -| <kbd>Esc</kbd> | Puts it back where it started. | - -The blue insertion line follows a keyboard drag exactly as it follows a pointer, because both are the same line: the editor asks its drop resolver where this block _would_ land right now and draws the answer. Nothing is measured twice, so the line cannot disagree with the drop - and when the answer is "nowhere" (the zone refuses the block, or it already sits in that spot) there is no line, which is the honest thing to draw. - -Screen readers get the same story in words. The editor localises dnd-kit's announcements through `core.editor.dnd.*`, so picking a block up, passing over a zone, being refused by one, and landing all read out with the **block's name and the zone's id** rather than the instance ids dnd-kit would otherwise spell aloud. - -```text -Picked up Callout. -Callout is over the after-profile zone, position 1 of 2. -The sidebar zone does not accept Callout. -Callout was dropped into the after-profile zone, position 1 of 2. -``` - -### An incompatible target refuses - -Drag an `example:callout` toward a zone that allows `core:text` only and the zone turns red and says it does not accept what you are dragging. Let go and nothing happens: a block stays where it was, a catalogue entry is simply not inserted. - -The refusal is computed from the same `isBlockAllowed` the field and the catalogue use. One allowlist format, one function that evaluates it, three places that ask. - -## The properties panel - -Select a block and its fields appear in the sidebar: text, textarea, number, boolean, enum, date-time, and groups of those - the [field kinds a block may hold](/docs/dev/widgets/defining-a-block#which-fields-a-block-may-hold), as declared by `defineBlock`. The panel builds itself from the block definition, so a block that adds a field gets a control for it with no editor change at all. - -Typing updates the block on the page **as you type**. There is no Apply button, and no preview pane to compare against, because the page _is_ the preview. - -A block that declares more than one [variant](/docs/dev/widgets/block-variants) gets a **Variant** picker above those fields. Picking one is a separate action from editing content: it keeps the instance's id, leaves `data` untouched, and does not reset a field you were halfway through. A block with one variant, or none, shows no picker - there is nothing to decide. A stored variant the block no longer offers is named in the panel, with the declared ones still offered beside it. - -### Area properties - -Select an [Area](/docs/dev/widgets/layout-areas) rather than one of its children and the same sidebar shows its layout in two groups - **Layout** (**Columns** as a one-click 1–4 switch, **Alignment**, **Distribution**) and **Spacing** (**Gap** and the space around the Area) - and re-lays the page out as you pick them. **Duplicate area**, **Ungroup** and **Delete area** sit in the panel's header. - -Ungroup and Delete are deliberately different buttons. Ungroup removes the container and leaves the blocks where the Area was; Delete takes them with it, and asks first, offering _Ungroup, keep blocks_ in the same dialog. An Area holding nothing is deleted without the interrogation, because there is nothing to lose. - -A block whose stored data does not match what its definition declares is not editable here - it is flagged on the page instead. Editing it would mean guessing which half is wrong, and guessing is how content gets quietly destroyed. - -## Content the editor cannot read - -A zone is handed whatever is stored in it, and storage is older than any editor. A field can hold a value from a migration that never finished, from a plugin that wrote its own shape, or from a hand-edited row. The editor has to have an answer for that, and the answer is **never delete it**. - -Every value a zone mounts with is sorted into one of two piles: - -| | | -| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **A block with bad data** | `{ id, type, data }` is intact and `type` is registered, but `data` does not match the fields. It stays a block: selectable, movable, deletable. | -| **Something that is not a block** | No usable `id`, no `type`, an id already used **by an earlier block in the same zone**, or not an object at all. Nothing can be inferred from it, so nothing pretends to. | - -The first pile keeps working exactly as before - the block renders an [`InvalidBlock`](#the-properties-panel) placeholder in place of its component, and its own shell stays draggable and keeps its delete button. Its data is bad; its identity is not. - -The second pile never becomes a content node. It is kept beside them, not among them: - -```ts -interface EditorZoneState { - nodes: readonly ContentNode[] - invalid: readonly { index: number; value: unknown }[] - // … -} -``` - -A `ContentNode` is a block instance or an [Area](/docs/dev/widgets/layout-areas). An Area whose stored `layout` is not one the editor recognises, or which holds an Area of its own, lands in the second pile with everything else: shown as-is, never rewritten. - -Nothing in the editor - no reducer action, no drop resolver, no block component - is ever handed one of those values. The zone shows them at the top, prints what each one looks like, and offers exactly one action per entry: **Remove invalid entry**. - -### One id per zone, not one id per page - -An instance id has to be unique **within its zone**, and only within its zone. Two blocks sharing an id in one zone are indistinguishable there, so the second one goes in the opaque pile above. Two blocks sharing an id in two _different_ zones are perfectly valid - the Content Engine validates a blocks field on its own, so nothing has ever promised otherwise, and a zone copied from one field into another would trip over any rule that did. - -The editor therefore never identifies a block by its id alone. Selection, updates, deletion, duplication, moves and drag-and-drop all carry the zone: - -```ts -interface EditorBlockRef { - blockId: string - zoneId: string -} -``` - -Drag-and-drop ids are built the same way - `blockDraggableId({ zoneId, blockId })` percent-encodes both halves, so an id survives a round trip whatever characters it contains - and the drag payload carries the ref structurally rather than being parsed back out of a string. Selecting the copy of `X` in the sidebar zone can never edit the copy of `X` above the profile form. - -Zone ids run the other way: a zone id is a _place_, so one page may only have one of each. Two `<ContentZone>`s claiming the same id while the editor is open is a [developer error](/docs/dev/widgets/content-zones#one-id-one-place-on-the-page), not a merge. - -### Saving is blocked until you decide - -While a zone still holds one, the whole editor refuses to save. The **Save** button is disabled, the sidebar footer explains why, and the adapter is not called even from **Save and finish**: - -> This zone contains invalid or legacy content that the Visual Editor cannot safely save. Resolve or explicitly remove the invalid content before saving. - -That is deliberate, and it is the whole point of the pile. The save payload is a **replacement** array per zone - the editor hands over the blocks it understands, and the API stores exactly that. If a value the editor could not read were quietly left out of that array, editing an unrelated block in the same zone would delete it. Storing `[A, malformed, B]` and saving after a change to `A` would write `[A2, B]`, and nobody would ever be told. - -So removal is a decision you make, one entry at a time, and it is an edit like any other: **Discard** brings the entries back, and the page is dirty until you save. - -## Zones that leave the page - -A page is allowed to change its mind. A tab, a feature flag, a route transition - any of them can stop rendering a `ContentZone` while edit mode is still on, and the editor has to have an answer that is not "persist it anyway". - -When a zone's outlet unmounts it is **removed from the document**: out of `zones`, out of `order`, and therefore out of the next save payload entirely. A stale zone can never be written back. If it owned the selection, the selection clears and the sidebar returns to **Widgets**; if it was the target of **Add widget**, that target clears too. - -What happens to unsaved work in it depends on whether there was any: - -| | | -| :--------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | -| **No unsaved changes** | It is dropped silently. There was nothing to lose. | -| **Unsaved changes** | It is still dropped - the zone is gone, there is nowhere to put them back - but the sidebar footer names it, so it is never _quiet_. | - -That is the rule: an unmounted zone is out of the editable document, and losing work to it is reported rather than blocked. Blocking **Save** would trap you on a page whose zone no longer exists, and keeping the zone would mean writing content the page has stopped showing. Bring the zone back and it re-mounts from whatever the page hands it, with a fresh baseline. - -What the _host_ does with the gap is the host's call, and it matters. The save payload only carries zones the editor currently holds, so a save must write **only what it names** - never a whole field set composed on top of a fallback, which is how a zone that is off the page gets reset to something nobody chose. [Editable Pages](/docs/dev/widgets/editable-pages#the-two-routes) does exactly that: a zone the payload does not mention is not written, because each zone is its own row. - -## Saving is the host's job - -The editor never fetches. Not once. The only way anything leaves it is the adapter you passed: - -```ts -type VisualEditorSnapshot = Readonly<Record<string, readonly ContentNode[]>> - -interface VisualEditorSaveInput { - changedZoneIds: readonly string[] - expectedZones: VisualEditorSnapshot - zones: VisualEditorSnapshot -} - -interface VisualEditorSaveResult { - revision?: string - zones?: VisualEditorSnapshot -} - -interface VisualEditorAdapter { - save: ( - input: VisualEditorSaveInput, - ) => Promise<VisualEditorSaveResult | void> | VisualEditorSaveResult | void -} -``` - -`zones` holds every zone on the page keyed by its id; `changedZoneIds` names the ones that actually differ from what loaded; `expectedZones` holds, under the same keys, the **baseline** each zone started from - what was there before anybody dragged anything. Resolve and the editor marks itself clean and toasts. Throw or reject and it shows an error and keeps the changes, so nothing is lost to a failed request. - -Send the baseline with the write and your API can answer the only question that matters when two people are arranging one page: _is the thing I am replacing still the thing I was given?_ Zones are independent, so two moderators editing different zones both succeed, while a write to a zone that moved underneath somebody is refused instead of silently winning. [Editable Pages](/docs/dev/widgets/editable-pages#two-moderators-one-page) does exactly that with a `409`, and the editor says so - _Somebody else saved this page first_ - while keeping every change you made. - -The one rule the contract asks of you: **save what you were handed**. The editor rebases its idea of "unchanged" onto the snapshot it sent, not onto the state it is in when the promise resolves - so a word typed while the request was in flight is still unsaved afterwards, exactly as it should be. - -`zones` is a **complete** picture of the page, not a patch: every zone the editor mounted is in it, emptied ones included. `changedZoneIds` names the ones that differ from what loaded - send those, and leave everything else alone at the other end. What you must not do is send a partial write and let the rest fall back to defaults. - -<Callout title="You probably do not write this by hand"> - If the page declares its zones - and it usually should - - `createContentEditorAdapter` builds this payload for you, from the same page - definition the server reads. See [Editable - Pages](/docs/dev/widgets/editable-pages). The rest of this section is the - contract underneath it, and what to honour if you are writing an adapter for - somewhere else. -</Callout> - -```tsx -const adapter = useMemo<VisualEditorAdapter>( - () => ({ - save: async ({ changedZoneIds, expectedZones, zones }) => { - await fetcher({ - plugin: '@vitnode/example', - method: 'patch', - module: 'pages', - path: '/{id}/zones', - args: { - param: { id: page.id }, - json: { changedZoneIds, expectedZones, zones }, - }, - }) - }, - }), - [page.id], -) -``` - -### Answer with what you stored - -`save` may resolve with nothing, and the editor is happy either way - but it is better if it does not. What the client sent and what the server kept are not always the same thing: an API is allowed to reorder, normalise, drop or rewrite what it is given. If the editor rebases onto its own input, it goes clean against a version that never existed, and the next save pushes the stale copy back. - -So return what you stored: - -```tsx -const [zones, setZones] = useState(loaderData.zones) - -const save = async (input: VisualEditorSaveInput) => { - const payload = await writeChangedZones(input) - - setZones((current) => ({ ...current, ...payload.zones })) - - return { zones: payload.zones } -} -``` +The browser asks the same question when you navigate away with unsaved changes. If somebody else saved the same zone since you opened the editor, the server refuses the save with **Somebody else saved this page first**, and your changes stay in the editor. Two people editing different zones of one page both succeed. -The editor then adopts that snapshot as its baseline **and** as what you are looking at - unless you edited during the request, in which case your edit stays and the zone remains dirty against the new baseline. Both halves matter: the first stops the stale re-send, the second is the [save race](#save-stays-finish-editing-leaves) rule that has always applied. +## When the editor refuses to save -Updating the page's own state does the other half of the job: **Finish editing** shows the saved page immediately, with no reload, because the page underneath is already the new one. +- **A zone holds content the editor cannot read**, such as an entry without a widget type. The zone says _This zone holds content the editor cannot read_ and **Save** is disabled. Choose **Remove invalid entry** for each one. The editor never drops content silently. +- **A widget's stored data no longer matches its fields**, for example after a plugin update. The widget shows _Widget data needs fixing_. You can move or remove it, but not edit it. +- **A zone leaves the page while you edit**, for example behind a tab. It leaves the editor too, and the footer names it if it had unsaved changes. -This belongs to the page, not to the editor. The editor owns no layout state and never will: it is handed blocks, it hands back blocks, and the content's owner decides what is true. +## What the editor does not do -### Content that changes underneath the editor +- No areas inside areas, and no widgets that contain zones. +- No drafts or revisions. **Save** writes the live layout. +- No per-breakpoint layouts. Widgets are responsive on their own. +- No images, files, relations or rich text in widget fields yet. +- No live collaboration, so nobody sees anybody else editing. +- No dimming of the parts of the page that cannot be edited. -The same problem arrives from the other direction. A router invalidation, a refetch, or the `setZones` above all re-render your page with different `blocks`, and a zone that is already mounted has to decide what to do with them. +## Visitors never download it -The rule is the one you would write yourself: +The editor's code loads on the first click of **Edit widgets**, never before. A visitor who only reads the page downloads none of it; a test in `@vitnode/core` fails the build if the editor ever reaches the public bundle. -| | | -| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------ | -| **Zone is clean** | The incoming content replaces both the working copy and the baseline. The zone adopts it and stays clean. A selection whose block is gone clears. | -| **Zone is dirty** | Nothing about its content moves. Local edits win until **Save** or **Discard** resolves them. Only the allowlist and registry still refresh. | - -There is deliberately no merge. Two block arrays cannot be reconciled without inventing an answer, and inventing one is how an editor loses a paragraph somebody typed. - -### A failed load is not an empty page - -Loading has a trap that is easy to walk into and expensive to walk out of. A route answers three different "there is nothing here" shapes, and they mean three different things: - -| | | -| :-------------------------- | :--------------------------------------------------------------------------------------------- | -| **200, an empty zone** | Nothing is in that zone. Editing and **Save** are fine. | -| **200, nothing stored yet** | The page has never been rearranged, so its declared defaults come back with `updatedAt: null`. | -| **Anything non-2xx** | What is stored is **unknown** - an auth failure, a database error, a dropped connection. | - -Treating the third as the first is how a page overwrites content nobody meant to touch: the load fails, something plausible renders as if it had been read, somebody tidies a heading, presses **Save**, and the real stored layout is gone. The editor cannot catch this, because by then it was handed a perfectly valid set of blocks. - -So the playground loader refuses: - -```ts -if (!stored.ok) { - throw new Error(`Reading this page's layout answered ${stored.status}…`) -} -``` - -The router's `defaultErrorComponent` takes it from there, and **Edit widgets** is never reached. The API holds the same line from the other side: a stored row that cannot be read throws rather than answering with an empty layout. - -The second row is a _success_, and the distinction is the whole reason a page declares its defaults rather than inventing them at render time. Defaults that came from the declaration are content somebody shipped on purpose, so the first **Save** is entitled to replace them; defaults invented because a read failed are content nobody chose. [Editable Pages](/docs/dev/widgets/editable-pages#the-two-routes) has the longer version. - -If throwing does not suit your route, return an explicit error state and disable editing on it. What you must not do is hand the editor a writable copy of something you did not actually read. - -### Save stays, Finish editing leaves - -Two buttons, two different jobs, and it is worth being blunt about which is which. - -| | | -| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------- | -| **Save** | Runs the adapter and **stays in edit mode**. The footer goes from _Unsaved changes_ to _Saved_ and you carry on arranging. | -| **Finish editing** | Leaves edit mode. With nothing unsaved it just leaves. | -| **Finish while dirty** | Asks first: **Save and finish** (saves, then leaves - and stays put if the save fails), **Leave without saving**, or **Keep editing**. | - -Saving is not an exit, because the most common thing anybody does after saving is keep going. And leaving is not a save, because an editor that silently writes on the way out is an editor nobody trusts. **Discard** is the third option and the only one that throws work away - it puts every zone back to what loaded. - -The same question is asked by the browser: navigate away with unsaved changes and the guard prompts before the page goes. - -### Why there is no zones table - -The obvious alternative is a `core_content_zones` table that stores `(zoneId, blocks)` for every page in the installation, and a generic save endpoint that writes to it. It was not built, on purpose. - -Block content already lives somewhere: in a [`blocks()` field](/docs/dev/widgets/blocks-field) on a content type, in a plugin's own settings row, in whatever column the page loads it from. A generic zones table would be a **second** home for the same data, and then two places to migrate, two permission models, two revision histories, and a stubborn class of bug where the page renders one copy and the editor saves the other. - -The adapter is the alternative: the page that knew how to _load_ its zones is the page that knows how to _save_ them. It writes to its own column, through its own API, behind its own permission check. - -What is generic is the _wiring_, not the storage. [Editable Pages](/docs/dev/widgets/editable-pages) is the one exception, and it earns it: a settings screen's zones belong to no record, so core keeps them in an internal table keyed by the page id - one row per page, holding only the zones somebody customised - and the page declares its zones instead of mapping them. A zone whose blocks _do_ live on a content type stays where it always lived, and the page that knew how to load it is still the page that knows how to save it. - -## What the editor deliberately does not do - -Being clear about the edges is more useful than a roadmap. - -| | | -| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Nested areas** | An [Area](/docs/dev/widgets/layout-areas) holds blocks, one level deep. No areas inside areas, and no block that contains a zone of its own. | -| **Drafts and revisions** | Save writes. There is no "unpublished version of this page" concept in the editor. | -| **Permission UI** | No roles screen. Who may edit is your page's answer, and the save route's; an [editable page](/docs/dev/widgets/editable-pages#can-i-edit-this) names the moderator permission it wants, but granting it is the ordinary staff screen's job. | -| **Layout administration** | No AdminCP section listing which pages have been rearranged, no reset-to-default, no export or import, no copying one page's layout onto another. [Deliberately left to a possible V2](/docs/dev/widgets/editable-pages#where-a-layout-is-stored) - the storage shape makes each of them a query on one table, but none is built. | -| **Live collaboration** | No shared cursors, no presence, no merging two people's edits to **one** zone. Different zones of one page do merge, and a stale write to the same zone is refused rather than applied - see [two moderators, one page](/docs/dev/widgets/editable-pages#two-moderators-one-page) - but nobody watches anybody else arrange anything in real time. | -| **File and relation fields** | The properties panel edits the [field kinds a block may hold](/docs/dev/widgets/defining-a-block#which-fields-a-block-may-hold). Blocks cannot hold uploads or references yet, so neither can the panel. | -| **Responsive breakpoint editing** | One arrangement, rendered responsively by the blocks themselves. No per-breakpoint layouts. | -| **Rich text** | A `text` or `textarea` field is a plain string, and it stays one. You type into it in the properties panel, and no block field holds bold, links or lists. Tiptap ships in this repository and is deliberately nowhere near a block. | - -Everything in that table is a _later_ decision rather than a closed door - but none of it is built, and none of it is implied by the APIs above. - -## Known limitations - -The section above is about scope. This one is about rough edges in the part that _is_ built - the things you will notice, written down so you do not have to discover them. - -**A pointer drag's spoken position lags the line it draws.** The insertion line updates continuously, but the screen-reader announcement is only refreshed when the block underneath the pointer changes - move from a block's top half to its bottom half and the line jumps, the sentence does not. That is deliberate: the alternative is announcing on every pixel of movement, which floods a live region until it is useless. Keyboard dragging is unaffected, because every arrow key changes the target. - -**Locked application UI is not dimmed.** In edit mode the zones are outlined and labelled, and everything else on the page - your forms, your navigation, your buttons - looks exactly as it did. Nothing says "this part is not editable" except the absence of an outline. - -Dimming it would mean fading the page and un-fading the zones, and a descendant cannot undo an ancestor's `opacity` or `filter`: those create a new compositing context that the zone inside it is stuck in. The only other route is selector-based - "dim everything that does not contain a zone" - which would have to make assumptions about a page's DOM that VitNode does not get to make, since the page is yours. So the editor emphasises the zones rather than de-emphasising the page, and a host that wants more can style `[data-vitnode-zone]` and its surroundings itself. - -**Mobile is a bottom sheet, and only that.** Below `md` the sidebar becomes a sheet so it does not eat a phone screen. The page reserves room for it - `--editor-sheet-height` is padding on the canvas below `md` and the width of the sidebar above it, so the last zone always scrolls clear of the sheet and Preview takes both away - but nothing is _tuned_ for touch: a drag competes with page scrolling, and press-and-hold is the only way to tell a drag from a scroll. Arranging a page on a phone is possible. Enjoyable is a later stage. - -**Blocks themselves do remount when you enter edit mode.** The page around them does not - that is the whole point of the [stable boundary](#turning-it-on-does-not-restart-your-page) - but a `ContentZone` genuinely swaps what it renders, from `ContentRenderer` output to the editor's portal, so each block component is built again. A block holding transient state of its own restarts with it: a playing video, an open accordion, a carousel's position, a `useState` counter. Content survives, because content lives in the block's data; ephemeral UI state does not. Closing that gap means hoisting block instances above the view/edit split, which is a bigger change than this stage is willing to make. - -**A zone's blocks render in the editor's React tree, not your page's.** The consequence of the portal described [above](#then-how-do-zones-become-editable): context from your app root reaches a block as usual, context you provide between your page and a `ContentZone` does not. Nothing ships today that needs it, and the fix if you do is to put the value in the block's data. - -**There is no end-to-end test harness.** The pure logic is covered by vitest - the reducer, the drop resolver and its insertion placement, zone drop states, the save input, the catalogue, and the module-graph boundary test that keeps the editor out of public bundles. What no test covers is a real browser actually dragging something, so the [manual checklist](#verifying-it-yourself) is the regression suite for gestures. `apps/web` has no test runner configured at all, which is why the checklist lives in this page rather than in a spec file. - -## What used to be an extension point - -Two rows of that table were designed _around_ rather than merely skipped, and both have since landed. They are worth knowing as a pair, because they answer two halves of one question - and because keeping them apart is what stops a block definition turning into a settings screen. - -### Presentation variants - -How a block looks, as opposed to what it says. A wide hero and a narrow hero used to be either two block types or a `width` field sitting in the middle of the copy. A [variant](/docs/dev/widgets/block-variants) pulls them apart: - -```ts -interface BlockInstance { - data: BlockData - id: string - type: string - variant?: string -} -``` - -`variant` is optional, and nothing was migrated: an instance stored without one takes the block's `defaultVariant`, exactly as it rendered before. The workaround this replaces - a `variant`, `style` or `size` field declared on the block and stored in `data` - now has a real home, and moving one there is a data migration you write once and never again. - -### Layout areas - -How blocks sit next to each other, which was never one block's business. An [Area](/docs/dev/widgets/layout-areas) is a node in the zone's own list: - -```ts -interface BlockAreaInstance { - children: readonly BlockInstance[] - id: string - kind: 'area' - layout: { - columns: 1 | 2 | 3 | 4 - gap?: string - align?: string - justify?: string - } -} -``` - -It is not a block: no registry entry, no `allowedBlocks` entry, no fields of its own. It claims the drop-into gesture that was held back for exactly this, and it stops at one level - **an Area cannot contain an Area** - because nesting needs depth limits, cycle detection and an allowlist story that one level does not. - -Three concerns, kept separate: **data** is what the block says, **variant** is how this instance presents it, and **an Area's layout** is how a container arranges its children. Mixing them is what turns a block definition into a settings screen. - -## Verifying it yourself - -`/example/zones` is the manual test page. It has four zones - two around a locked profile form, one narrower sidebar, one empty - blocks from two plugins, a block stored with a variant, an Area holding two blocks, and a second Area left empty. It draws no button of its own: **Edit widgets** is in the user menu, for anybody holding the page's own moderator permission. It is an [editable page](/docs/dev/widgets/editable-pages), so your changes survive a reload; before anybody saves, it renders the layout the page declares. - -Sign in first: the action is gated on the moderator permission **Widgets → can edit** from the example plugin, and a root role holds it without being granted it. - -<Steps> -<Step> - -**Load the page** - -```bash -pnpm dev -``` - -Open [http://localhost:3000/example/zones](http://localhost:3000/example/zones) with DevTools → Network open, filtered to **JS**. - -</Step> -<Step> - -**Confirm no editor chunk was loaded** - -Reload and filter the request list to `/src/editor/`. **Nothing.** Not one editor module is requested for a page nobody is editing. - -<Callout title="One dev-server caveat" type="warn"> - In this repository you will also see `@dnd-kit` on *every* route, `/` - included. Those come from the AdminCP dashboard grid, which the development - module graph reaches whatever page you open - not from the zones. The honest - measurement is the production build [at the end of this - page](#against-a-production-build). -</Callout> - -</Step> -<Step> - -**Open the user menu and click Edit widgets** - -It is in the avatar menu in the header, under your name - not on the page. Walk to `/discover` first and look again: it is gone, because no editable page is on screen there. - -| | Expected | -| :--------- | :---------------------------------------------------------------------------------- | -| Network | Exactly one new chunk, on this click and not before. | -| Zones | Dashed outlines with the zone id in the corner. | -| Layout | Nothing jumped: the whole site slid over while the sidebar slid in. | -| Page state | The profile form still holds what you typed, and the counter still holds its count. | - -Click **Finish editing**, then **Edit widgets** again: the second time, **no** request is made. The chunk is already in memory. - -</Step> -<Step> - -**The sidebar appears on the right** - -| | Expected | -| :----- | :------------------------------------------------------------------------------------------------------------------------------------------ | -| Header | _Available Widgets_. | -| Body | A search field and the installed blocks, grouped by namespace. | -| Footer | _No changes yet_, and the Preview, Discard, Save and Finish editing buttons. | -| Canvas | The page, the header and the footer are all beside the sidebar, not under it. Narrow the window below `md` and the sidebar becomes a sheet. | - -</Step> -<Step> - -**Search the available widgets** - -Type `call` into the search field: the list narrows to `example:callout`. Clear it and everything comes back. Nothing about the page or your changes moves while you search. - -</Step> -<Step> - -**Drag a block from the sidebar into the empty zone** - -`before-footer` is empty, so in edit mode it is a large dashed placeholder. Drag `core:text` from the sidebar onto it. - -It lands, it is selected, and the sidebar is already showing its **Properties**. - -</Step> -<Step> - -**Drag a block between two existing blocks** - -Go **← Available Widgets**, then drag `core:cta` over `before-profile` and hover the _top half_ of its second block. A blue insertion line appears above that block; hover the bottom half and it moves below. - -Drop on the top half and the new block is second, not last. - -</Step> -<Step> - -**Move an existing block between compatible zones** - -Drag the `core:text` block out of `before-profile` and into `after-profile`. It keeps its content and its instance id - the properties panel does not flicker on the way. - -</Step> -<Step> - -**Move a block with the keyboard only** - -Put the mouse down. <kbd>Tab</kbd> to a block, press <kbd>Space</kbd>, then <kbd>↓</kbd>. - -The blue insertion line appears under the block below, exactly as it does for a pointer - keep pressing <kbd>↓</kbd> and it walks into the next zone. <kbd>Space</kbd> drops the block where the line is; <kbd>Esc</kbd> puts it back. Whatever the line said, that is where the block lands. - -</Step> -<Step> - -**Watch an incompatible zone refuse** - -Drag `example:callout` - from the sidebar, or from a zone that holds one - toward `sidebar`, which allows `core:text` only. - -The zone turns red and says it does not accept the block. Release: nothing moves and nothing is inserted. Now press **Add block** inside that sidebar zone and confirm the catalogue offers `core:text` and nothing else. - -</Step> -<Step> - -**Select a block** - -Click any block on the page. Expect a ring around it and a floating row of actions - Edit, Delete - in its corner. - -</Step> -<Step> - -**The sidebar switches to Properties** - -Same panel, different mode. Expect the block's name, its type underneath, its fields, a Duplicate and a Delete at the bottom, and a **← Available Widgets** at the top. - -</Step> -<Step> - -**Edit a field** - -Type into the heading or body field of the selected block. - -</Step> -<Step> - -**The block updates immediately** - -The block on the page changes **while you type** - no Apply button, no delay - and the sidebar footer switches to _Unsaved changes_. - -</Step> -<Step> - -**Go back to Available Widgets** - -Press **← Available Widgets**. The catalogue returns and the ring on the page disappears, because that action clears the selection as well as the panel. - -</Step> -<Step> - -**Switch a variant** - -Select the `example:features` block in `before-profile`. Above its fields sits a **Variant** picker holding _Grid_, _List_ and _Compact_. - -Move through all three. The block re-renders each time, and every word in the fields underneath stays exactly as it was - the variant is not content, so nothing about the content is touched. The footer says _Unsaved changes_, because the page did change. - -</Step> -<Step> - -**Add an Area, and move blocks in and out of it** - -Go **← Available Widgets**. Above the plugin groups is a **Layout** section holding one entry: **Area**. Click it - an empty two-column Area lands in the page. - -Now drag a root block onto it: it becomes a child, and the Area re-flows around it. Drag it back out to the zone and the Area keeps the rest. Reorder two children inside one Area and only their order changes. Try to drag an Area onto another Area: it is refused, out loud. - -</Step> -<Step> - -**Area properties** - -Click the Area's own shell rather than one of its children. The sidebar shows **Area properties**: Columns, Gap, the space above/below and left/right, Alignment and Distribution - each re-laying the page out as you pick it - with **Duplicate area**, **Ungroup** and **Delete area** under them. - -Gap and the two spacing controls are sliders measured in **pixels, 0 to 100**. Dragging one moves the page under the thumb. Gap is the room between the Area's own children; the other two are its outer margin, stored beside its columns as `marginX` and `marginY`. Pixels a person picked are not design tokens, so all three are written as an inline `style` rather than a utility class - and an Area asking for no margin renders exactly the markup Areas always have, so nothing on an existing page moves. - -An Area laid out before this - one storing `gap: "md"` rather than `gap: 16` - still reads. Every door into a layout resolves the old names (`none` 0, `sm` 8, `md` 16, `lg` 32) to their number, and the next save writes the number down, so nothing has to migrate the table. - -An empty Area draws one **Drop widgets here** cell per column, so a four-column Area shows the four places a widget can go before anything is in it. - -Press **Ungroup**: the container goes and its blocks stay, at the position the Area held. Undo that by adding an Area back and filling it, then press **Delete area**: it asks first, and offers _Ungroup, keep widgets_ in the same dialog. Delete the empty Area the page ships with and it does not interrogate you - there is nothing inside to lose. - -</Step> -<Step> - -**Preview** - -Press **Preview**. Outlines, handles and overlays go; the sidebar collapses to a slim bar with **Back to editing** and **Finish editing**. Click a link inside a block - it works now, because the `inert` wrapper is gone. - -**Back to editing** restores everything, unsaved changes included. - -</Step> -<Step> - -**Save** - -Press **Save** in the sidebar footer - not the profile form's own Save button, which is there to prove the form still works. - -| | Expected | -| :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Toast | _Page saved_. | -| Footer | Switches from _Unsaved changes_ to _Saved_. | -| Header | The line under the title stops saying the page ships these widgets and names the time it was rearranged. | -| Payload | A **Last save payload** block appears at the bottom of the page - open it and read the JSON that went to `PUT /pages/layout`. Edit one zone and it names that zone alone. | - -Check that `changedZoneIds` lists only the zones you actually touched. - -</Step> -<Step> - -**Finish editing, without reloading** - -Press **Finish editing**. The public page is back: no outlines, no sidebar, and `before-footer` is invisible again if you left it empty. - -The part worth checking is that **the page you are looking at is the page you saved** - the block you added, the one you moved and the text you typed, all in view mode, with no refresh anywhere. Then reload, and confirm you get the same thing a second time. The first comes from the API's answer to the save; the second from the route loader. - -Now do it the other way round: click **Edit widgets**, change something, and press **Finish editing** without saving. The dialog offers **Save and finish**, **Leave without saving** and **Keep editing** - and note that **Save** on its own, back in the footer, would have kept you in edit mode instead. - -</Step> -</Steps> - -### While you are in there - -- **Nothing on the page restarts.** Type a name into the profile form, press the **Local state** counter a few times, then **Edit widgets** and **Finish editing**. Both survive, both directions, because the editor mounts beside your page rather than around it. -- **Take the sidebar zone off the page** with the button above the zones, while the editor is open. It leaves the editor with it: the outline goes, an **Add widget** target pointing at it clears, and a selected block inside it returns the sidebar to _Available Widgets_. Save afterwards and the stored sidebar keeps what it had - the editor's copy is not written back, and it is not reset to defaults either. Edit it first and the footer names it rather than losing the change quietly. Put it back and it returns with a fresh baseline. -- **Discard** puts every zone back to what loaded, and the footer stops saying _Unsaved changes_. -- **An empty Area is edit-mode only.** The page ships one. In edit mode it is a two-column drop target; press **Finish editing** and it leaves no markup behind at all, exactly like an empty zone. -- **Add widget inside an Area** targets the Area, not the zone: the sidebar header reads _For: an area in after-profile_, and the **Layout** section disappears while it does, because an Area cannot hold another Area. -- **Duplicate** drops a copy directly below the original with its own instance id; **Delete** takes it away and returns the sidebar to the catalogue. -- The profile form in the middle must have **no** outline, **no** drag surface and **no** overlay, and its input must still take focus and type. It is application code. -- Navigating away with unsaved changes - a header link, or the back button - prompts, with **Keep editing** and **Leave without saving**. -- **Below `md`** the sidebar becomes a bottom sheet and the canvas gains padding to match: scroll to the end and the last zone, its **Add widget** button included, clears the sheet completely. **Preview** takes the padding away with the sheet, so the page is exactly as a visitor sees it. -- **Seed something unreadable** and the refusal is easy to see. Save the zone once first, so there is a row to corrupt: - - ```bash - psql "$POSTGRES_URL" -c 'update core_page_layouts set "zones" = \'{"before-profile":[{"foo":"bar"}]}\' where "pageId" = \'example:settings\';' - ``` - - Reload, press **Edit widgets**: `before-profile` shows _This zone holds content the editor cannot read_ with `{"foo":"bar"}` printed under it, **Save** is disabled whatever else you change, and the footer says why. Press **Remove invalid entry**, and Save comes back. **Discard** puts it straight back. - -### Against a production build - -```bash -pnpm build -pnpm start -``` - -Then confirm the editor never reached a visitor: - -```bash -curl -s http://localhost:3000/example/zones | grep -cE 'dnd-kit|editor/root' -``` +## Related -`0`. The [boundary test](#the-lazy-loading-guarantee) is the standing guarantee; this is the spot check that the guarantee survived bundling. +- [Editable pages](/docs/dev/widgets/editable-pages): make a page editable, with storage and permissions from core. +- [Custom editor host](/docs/dev/widgets/custom-editor-host): edit widgets stored anywhere else, with your own save route. +- [Content zones](/docs/dev/widgets/content-zones): where widgets render on a page. diff --git a/apps/web/content/docs/dev/working-with-users/admin-users.mdx b/apps/web/content/docs/dev/working-with-users/admin-users.mdx new file mode 100644 index 0000000000..9218363fab --- /dev/null +++ b/apps/web/content/docs/dev/working-with-users/admin-users.mdx @@ -0,0 +1,83 @@ +--- +title: Manage users +description: Find, create and edit VitNode member accounts in the AdminCP, the rules that protect staff accounts, and the admin user API routes with their permissions. +icon: UserCog +--- + +The AdminCP user screens let staff find accounts, create one by hand, and change everything a member can change in their own settings, plus a few things only staff can. They live at **AdminCP → Core → Users → User List** (`/admin/core/users`). + +## The user list + +{/* Image prompt: VitNode AdminCP user list at /admin/core/users. Data table with a search field ("Search users by email or username...") and a Roles filter above it, an "Add User" button at the top right, and columns User (avatar and name), Email, Roles (badges) and Created At, with a pencil "Edit profile" button at the end of each row and a "Verify Email" button on unverified rows. Dark theme, 1440x900. */} + +The table shows **User**, **Email**, **Roles** and **Created At**. Search by email or username, or filter by role. Each row has an **Edit profile** button that opens the user, and accounts with an unconfirmed email also get **Verify Email**. + +**Add User** opens a dialog that creates an account from a **Username** (3 to 32 characters), an **Email** and a **Password** (at least 8 characters). It needs `users:can_create`. + +There is no ban or delete action for accounts. + +## Edit a user + +{/* Image prompt: VitNode AdminCP user page at /admin/core/users/1. Left column: profile card with cover, round avatar, name, @handle, Staff and Verified badges, then Personal information, Preferences, Roles, Connected accounts and Devices cards. Right column: segmented tabs Activity, Notifications, Password & passkeys above a vertical activity timeline. Dark theme, 1440x1000. */} + +Open a user at `/admin/core/users/[id]`. Everything the member can change in their own `/settings` is editable here too: + +| Area | What staff can change | +| :-------------------------- | :----------------------------------------------------------------------------------------------------- | +| Profile card | Display name, name code, email, [avatar and cover](/docs/dev/working-with-users/avatars), and **Mark email as verified** | +| Personal information | First name, last name, headline, phone, birthday, **Show real name** | +| Preferences | Language, time zone (or automatic), newsletter | +| Roles | Primary role and secondary roles | +| Connected accounts | Disconnect an SSO account, choose where the avatar and name come from, turn **Sync on sign-in** on or off | +| Devices | Sign out one device, or every device at once | +| **Activity** tab | The account's timeline (read-only) | +| **Notifications** tab | In-app, push and email (with frequency) per notification type | +| **Password & passkeys** tab | Set a new password, rename or delete passkeys | + +A few rules differ from the member's own settings: + +- **Staff can edit locked fields.** The role's **Allow editing personal information** and the install's `users.personalInformation` switches ([Profile fields](/docs/dev/working-with-users/profile-fields#who-may-edit)) limit members, not staff. +- **Notification locks still apply.** Mandatory types, and types the notification settings stop members from changing, are read-only here too, because delivery ignores stored choices for them. +- **The last sign-in method can't be removed.** Disconnecting the only SSO account or deleting the only passkey answers `409`. +- **Setting a password signs the member out everywhere**, AdminCP sessions included. +- **Sync now isn't offered.** It needs the member to sign in with the provider themselves. + +## Who may do it + +Reads need `users:can_view`, creating an account needs `users:can_create`, and every write needs `users:can_edit`, plus `users:can_edit_admin` when the target is staff. A staff target must also sit within your own access. You need every admin and moderator permission they hold, and only a root administrator can edit a root or unrestricted account. So nobody can reset the password of, or demote, someone above them. [Permissions](/docs/dev/working-with-users/staff-permissions) shows how admins grant these. + +## API + +All routes are under `/api/@vitnode/core/admin/users` and need an AdminCP session. + +| Method | Path | Permission | Does | +| :------- | :--------------------------------------- | :------------- | :--------------------------------------------------- | +| `GET` | `/list` | `can_view` | The user list, with search and role filter | +| `POST` | `/create` | `can_create` | Creates an account from `{ email, name, password }` | +| `GET` | `/{id}` | `can_view` | One user | +| `PATCH` | `/{id}` | `can_edit` | Account, personal information and preferences | +| `GET` | `/{id}/timeline` | `can_view` | The activity timeline | +| `POST` | `/{id}/verify-email` | `can_edit` | Marks the email as verified | +| `PUT` | `/{id}/password` | `can_edit` | Sets a new password and revokes every session | +| `GET` | `/{id}/devices` | `can_view` | Devices with an active session | +| `DELETE` | `/{id}/devices/{publicId}` | `can_edit` | Signs one device out | +| `DELETE` | `/{id}/devices` | `can_edit` | Signs every device out | +| `GET` | `/{id}/passkeys` | `can_view` | Passkeys | +| `PATCH` | `/{id}/passkeys/{passkeyId}` | `can_edit` | Renames a passkey | +| `DELETE` | `/{id}/passkeys/{passkeyId}` | `can_edit` | Deletes a passkey | +| `GET` | `/{id}/sso` | `can_view` | Connected accounts, sign-in summary, profile sources | +| `DELETE` | `/{id}/sso/{providerId}` | `can_edit` | Disconnects an account | +| `PUT` | `/{id}/sso/preferences` | `can_edit` | Profile sources and sync on sign-in | +| `GET` | `/{id}/notification-preferences` | `can_view` | Notification preferences per type | +| `PUT` | `/{id}/notification-preferences` | `can_edit` | Changes notification preferences | +| `POST` | `/{id}/images/{kind}` | `can_edit` | Uploads an avatar or cover | +| `DELETE` | `/{id}/images/{kind}` | `can_edit` | Removes an avatar or cover | + +Every `can_edit` route also checks `can_edit_admin` and the access rule above when the target is staff. + +The `PATCH /{id}` body takes any of `email`, `name`, `nameCode`, `roleId`, `secondaryRoleIds`, `firstName`, `lastName`, `headline`, `phone`, `showRealName`, `birthday` (`YYYY-MM-DD` or `null`), `language`, `timeZone` (`null` for automatic) and `newsletter`. At least one field is required. + +## Related + +- [Roles](/docs/dev/working-with-users/roles) explains what the primary and secondary roles do. +- [Email verification](/docs/dev/working-with-users/email-verification) explains what **Mark email as verified** unlocks. diff --git a/apps/web/content/docs/dev/working-with-users/avatars.mdx b/apps/web/content/docs/dev/working-with-users/avatars.mdx new file mode 100644 index 0000000000..f3e21559fc --- /dev/null +++ b/apps/web/content/docs/dev/working-with-users/avatars.mdx @@ -0,0 +1,45 @@ +--- +title: Avatars and covers +description: Where VitNode members and staff upload or remove avatar and cover images, how role settings cap them, and the image upload routes and events. +icon: CircleUserRound +--- + +Every member can have an uploaded avatar and a profile cover. Without one, VitNode draws a letter avatar or a colour gradient. This page covers where people edit the images, the role settings that allow and cap them, and the routes behind the upload dialog. + +## Where images are edited + +- On the **profile page** (`/users/[nameCode]`), the owner sees a camera button on the cover and on the avatar. It opens one dialog that uploads and removes. With a picture already set, two radio buttons choose between the two actions and the confirm button reads **Upload** or **Delete** to match; with nothing set yet, the dialog goes straight to the file picker. +- On **Settings → Overview** (`/settings`), only the avatar and its camera button appear. The cover stays on the profile page. +- In the **AdminCP** (`/admin/core/users/[id]`), staff holding `users:can_edit`, plus `users:can_edit_admin` when the target is staff, get the same two buttons and the same dialog. Staff can set an image even when the user's own roles do not allow it; the role's size cap still applies. + +## Role settings + +Each role sets these on its **Profile** tab at **AdminCP → Core → Users → Roles**: + +| Setting | Column | Default | +| :----------------------- | :------------------ | :------ | +| Allow avatar upload | `allowUploadAvatar` | `true` | +| Maximum avatar size (kB) | `maxAvatarSize` | `2048` | +| Allow cover image upload | `allowUploadCover` | `true` | +| Maximum cover size (kB) | `maxCoverSize` | `5120` | + +A user with several roles may upload as soon as one role allows it, and gets the largest cap among the roles that allow it. The dialog shows the cap before you pick a file, and the server checks it again. + +## API + +| Method | Path | Who | +| :------- | :-------------------------------------------------- | :--------------------------------------------------------------- | +| `GET` | `/api/@vitnode/core/users/images/policy` | Signed-in user: what they may upload, and the caps in bytes | +| `POST` | `/api/@vitnode/core/users/images/{kind}` | Signed-in user: multipart `file`, `kind` is `avatar` or `cover` | +| `DELETE` | `/api/@vitnode/core/users/images/{kind}` | Signed-in user | +| `POST` | `/api/@vitnode/core/admin/users/{id}/images/{kind}` | Staff with `users:can_edit` | +| `DELETE` | `/api/@vitnode/core/admin/users/{id}/images/{kind}` | Staff with `users:can_edit` | + +Accepted types are JPEG, PNG and WebP. The browser crops an avatar to `512×512` and a cover to `1800×600` and sends WebP where it can encode it, so uploads usually land far under the cap. A refused file answers `400` with an `{ error }` message meant for the person who picked it, and a role that does not allow the image answers `403`. + +Both writes emit [`user.avatar.updated` or `user.cover.updated`](/docs/dev/events/built-in-events) with the new `core_files` id, or `null` when the image was removed. + +## Related + +- [Current user](/docs/dev/working-with-users/users) covers `avatarUrl` and `coverUrl` on every user payload. +- [Storage](/docs/dev/storage) explains where VitNode keeps the uploaded files. diff --git a/apps/web/content/docs/dev/working-with-users/email-verification.mdx b/apps/web/content/docs/dev/working-with-users/email-verification.mdx index f82b5ac455..fb2d5ce1ac 100644 --- a/apps/web/content/docs/dev/working-with-users/email-verification.mdx +++ b/apps/web/content/docs/dev/working-with-users/email-verification.mdx @@ -1,5 +1,5 @@ --- -title: Email Verification +title: Email verification description: How VitNode confirms a new member's email address before they can sign in, and the API routes and events behind it. icon: MailCheck --- @@ -33,7 +33,7 @@ If they try to sign in first, the sign-in form says **Confirm your email first** - **AdminCP sign-in** at `/admin` is not blocked. Only staff get in, and staff are picked by an administrator, so an install that just added an email adapter can't lock its admins out. - **SSO** sign-ups are confirmed already, since the provider vouches for the address. - **Completing a password reset** also confirms the address - the reset link went to the same mailbox. -- **Staff** can confirm anyone by hand from the AdminCP user page. +- **Staff** can confirm anyone by hand with **Verify Email** in the AdminCP user list or **Mark email as verified** on the user's page ([Manage users](/docs/dev/working-with-users/admin-users)). <Callout type="warn" title="Adding an email adapter to an existing install"> Members who registered while an adapter was configured but before this feature @@ -58,6 +58,7 @@ Call them through the [fetcher](/docs/dev/fetcher) like any other core route: ```ts title="src/lib/confirm-email.ts" import { fetcher } from '@vitnode/core/tanstack/fetcher' +// `token` is the `?token=` value from the confirmation link const response = await fetcher({ plugin: '@vitnode/core', method: 'post', diff --git a/apps/web/content/docs/dev/working-with-users/meta.json b/apps/web/content/docs/dev/working-with-users/meta.json index e79ec0b403..ebbdf2888e 100644 --- a/apps/web/content/docs/dev/working-with-users/meta.json +++ b/apps/web/content/docs/dev/working-with-users/meta.json @@ -1,6 +1,15 @@ { - "title": "Working with Users", + "title": "Users", "description": "The user model, roles, and the staff permission system - how VitNode decides who somebody is and what they are allowed to do.", "icon": "Users", - "pages": ["users", "email-verification", "roles", "staff-permissions", "..."] + "pages": [ + "users", + "profile-fields", + "avatars", + "admin-users", + "email-verification", + "roles", + "staff-permissions", + "..." + ] } diff --git a/apps/web/content/docs/dev/working-with-users/profile-fields.mdx b/apps/web/content/docs/dev/working-with-users/profile-fields.mdx new file mode 100644 index 0000000000..ee275411f8 --- /dev/null +++ b/apps/web/content/docs/dev/working-with-users/profile-fields.mdx @@ -0,0 +1,82 @@ +--- +title: Profile fields +description: How VitNode members set their personal information and time zone, which name the public sees, what the profile header shows, and how roles and the API config limit editing. +icon: IdCard +--- + +Members fill in a few optional profile fields themselves: first name, last name, phone, headline, the **Show my real name** switch and a time zone. This page covers where they edit them, the routes behind that, which name other people see, and the two controls you have. Role settings decide _who_ may edit, and the API config decides _which fields exist_. + +## Personal information + +Members set `firstName`, `lastName`, `phone` and `headline` at **Settings → Overview** (`/settings`). The **Profile** card lists them read-only; **Edit profile** opens one sheet with every field, the **Show my real name** switch and the time zone, saved together with **Save changes**. Every field is optional and stored as `null` when cleared. The session payload carries them, so anything that already reads the session can show them without another request. + +| Method | Path | Who | +| :------ | :----------------------------------- | :----------------------------------------- | +| `GET` | `/api/@vitnode/core/users/me/policy` | The signed-in user: which fields may they edit? | +| `PATCH` | `/api/@vitnode/core/users/me` | The signed-in user, on their own row | + +The `PATCH` body takes any subset of `{ firstName, lastName, phone, headline, showRealName }`. A field left out stays as it is, and a text field sent as `""` or whitespace is cleared. Saving clears the user's cached session and emits [`user.updated`](/docs/dev/events/built-in-events). + +`phone` is the one field with a format: digits plus `+`, spaces, `-`, `(` and `)`, up to 32 characters. The form and the route both reject anything else. It is **not** on the public profile; only the account's own session carries it. + +## Time zone + +`timeZone` sits under **Region** in the same **Edit profile** sheet. It takes any IANA name, like `Europe/Warsaw`, and **Use this device's time zone** fills it from the browser (it still waits for **Save changes**). `null` means "follow my language", then UTC. Notification digests go out in this time zone, and `c.get("user")?.timeZone` is there for anything else that needs local time. + +| Method | Path | Who | +| :----- | :-------------------------------------- | :----------------------------------- | +| `PUT` | `/api/@vitnode/core/users/me/time-zone` | The signed-in user, on their own row | + +The body is `{ timeZone: string | null }`. An unknown name answers `400`. Saving clears the cached session and emits [`user.updated`](/docs/dev/events/built-in-events). + +## Which name the public sees + +`showRealName` decides whether a profile is headed by the nickname (`name`) or by `firstName lastName`. The public profile route resolves this **on the server** and returns the result as `name`, so a real name the user has not published never leaves the API. When the switch is on but both halves are empty, the profile falls back to the nickname. + +People shown in content, such as a post's authors, carry the same answer as `fullName`, which is the real name when it is published and `null` otherwise. [`UserFormat`](/docs/ui/user-format) shows it in place of the nickname. To publish a real name from your own route, use `publicFullNameOf` from `@vitnode/core/lib/user-personal-information`, and never send `firstName` or `lastName` to other people. + +The AdminCP and search always show `name`, because staff need the name the account is filed under. + +## What the profile header shows + +{/* Image prompt: VitNode public profile header at /users/aXen. Wide cover image with a rounded-square avatar overlapping its bottom-left corner, the display name and @nameCode beside it, and a single row of muted meta items with small icons - a briefcase for the headline, a shield for the primary role, a calendar for the join date - with an "Edit profile" outline button at the far right. Light theme, 1440x400. */} + +`GET /api/@vitnode/core/users/profile/{nameCode}` returns everything the header needs: `id`, `name` (already resolved), `nameCode`, `headline`, `avatarUrl`, `coverUrl`, `avatarColor`, `createdAt`, the primary `role` and any `secondaryRoles`. The header shows the headline, the role and the join date as one row with an icon each, stacked under the avatar on a phone. + +With `users.personalInformation.headline` set to `false` (see [below](#turn-fields-off-for-the-whole-install)), the route returns `headline: null` for everyone, so turning the field off removes it from public profiles without touching what members wrote. + +The **Edit profile** button is the header's action slot and shows only on the account's own profile. A host that renders `ProfileContent` itself can pass any `action`: a follow button, a message link, or nothing. + +## Who may edit + +Each role has **Allow editing personal information** on its **Profile** tab at **AdminCP → Core → Users → Roles** (`allowEditPersonalInfo`, default `true`). A user may edit only when **every** role they hold allows it; one role that switches it off locks the fields. + +That is the opposite of the [image allowances](/docs/dev/working-with-users/avatars#role-settings), which any single role can grant. Since this setting defaults to `true`, "any role grants" would let every other role a member holds quietly undo an administrator who switched it off on one role. + +A locked member's **Edit profile** sheet shows only the time zone, which everyone may change, and `PATCH /users/me` answers `403` whatever the UI showed. Staff can still edit locked fields from [the AdminCP](/docs/dev/working-with-users/admin-users). + +## Turn fields off for the whole install + +Every field is on unless you set it to `false` under `users.personalInformation` in the API config: + +```ts title="apps/api/src/vitnode.api.config.ts" +export const vitNodeApiConfig = buildApiConfig({ + // ... + users: { + personalInformation: { + phone: false, + headline: false, + showRealName: false, + }, + }, +}); +``` + +The keys are `firstName`, `lastName`, `phone`, `headline` and `showRealName`. A field switched off disappears from the settings card and its form, and `PATCH /users/me` refuses to write it even when a request sends it, so a stale browser tab cannot get around the switch. + +Switching a field off never deletes data. The column keeps what members had set, and turning it back on restores it. With `showRealName` off, every profile is headed by the nickname. With **every** field off there is nothing left to edit, so the **Edit profile** button disappears too. + +## Related + +- [Current user](/docs/dev/working-with-users/users) shows the full user record and how to read it. +- [Avatars and covers](/docs/dev/working-with-users/avatars) covers the profile images. diff --git a/apps/web/content/docs/dev/working-with-users/roles-list.webp b/apps/web/content/docs/dev/working-with-users/roles-list.webp new file mode 100644 index 0000000000000000000000000000000000000000..940119b56eb260621cc6150612f78a74199248cc GIT binary patch literal 41836 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 zWk3J`00000000000000000000000000036~^f!3O1?x9L`*c#88c}gxu1#|Vt+lW3 ZZW(*XvB}QNpe&-~@Bjb+00000001IP+#Ub` literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/working-with-users/roles.mdx b/apps/web/content/docs/dev/working-with-users/roles.mdx index 64defab0f4..2e978d87ab 100644 --- a/apps/web/content/docs/dev/working-with-users/roles.mdx +++ b/apps/web/content/docs/dev/working-with-users/roles.mdx @@ -1,80 +1,81 @@ --- title: Roles -description: Manage user roles, primary and secondary group memberships, role colors, and default seeded groups. +description: How VitNode roles group users for coloured name badges, upload and profile allowances, and staff permissions, with the seeded default roles and primary and secondary roles. icon: UsersRound --- -In VitNode, a role groups users together for display styles (e.g. colored username badges) and staff permission grants. +import { ImgDocs } from "@/components/fumadocs/img"; +import rolesList from "./roles-list.webp"; -## Quick start +A role groups users. It decides how their name looks (colour and prefix), what they may upload and edit on their profile, and, through [staff permissions](/docs/dev/working-with-users/staff-permissions), whether they are administrators or moderators. -Resolve a user's complete set of role IDs (primary + secondary) on the API: +## Read a user's roles in an API route + +`getUserRoleIds` returns every role id a user holds, primary and secondary, without duplicates. It reads the database on each call: ```ts -import { getUserRoleIds } from '@vitnode/core/api/lib/check-staff-permission' +import { getUserRoleIds } from "@vitnode/core/api/lib/check-staff-permission"; -const user = c.get('user') -// [!code ++:1] -const roleIds = user ? await getUserRoleIds(c, user) : [] +// inside a route handler, where `c` is the Hono context +const user = c.get("user"); +const roleIds = user ? await getUserRoleIds(c, user) : []; ``` ---- - -## Seeded Default Roles +## Seeded roles -VitNode automatically seeds four protected system roles upon installation: +A fresh install gets four protected roles: -| Role | Flags | Default Color | Staff Privileges | -| :---------------- | :-------- | :--------------------------- | :----------------------------------------------- | -| **Guest** | `guest` | None | None (applies to unauthenticated visitors) | -| **Member** | `default` | None | Standard registered member role | -| **Moderator** | None | Green (`hsl(122, 80%, 45%)`) | Unrestricted moderation staff | -| **Administrator** | `root` | Red (`hsl(0, 100%, 50%)`) | Unrestricted administrative staff (`root: true`) | +| Role | Flags | Default colour | Staff access | +| :---------------- | :-------- | :--------------------------- | :---------------------------------------------------- | +| **Guest** | `guest` | None | None (applies to visitors who are not signed in) | +| **Member** | `default` | None | None (the role new accounts get) | +| **Moderator** | None | Green (`hsl(122, 80%, 45%)`) | Unrestricted moderator | +| **Administrator** | `root` | Red (`hsl(0, 100%, 50%)`) | Unrestricted administrator and moderator (`root`) | -<Callout type="info" title="First Account is Root"> - The first user to register during site initialization is automatically - assigned the Administrator role. +<Callout type="info" title="The first account is the administrator"> + The first user to register gets the Administrator role. </Callout> ---- - -## Role Model Attributes - -`core_roles` defines group styling and properties: +## Role fields -- `color`: CSS color string (e.g. `#ff0000`, `hsl(210, 100%, 50%)`) applied to member usernames across the UI. -- `prefix`: An emoji or a Lucide icon rendered in front of the role name and in front of every member's username. Stored as `emoji:🚀` or `icon:rocket` - see the [Emoji & Icon Picker](/docs/ui/emoji-icon-picker) for the codec and the components that read it. -- `root`: When `true`, user bypasses all staff permission checks. -- `default`: The role automatically assigned to newly registered members. -- `guest`: Reserved for unauthenticated requests. +`core_roles` holds: ---- +- `color`: a CSS colour (`#ff0000`, `hsl(210, 100%, 50%)`) applied to members' names across the UI. +- `prefix`: an emoji or a Lucide icon shown before the role name and every member's name. Stored as `emoji:🚀` or `icon:rocket`; the [Emoji & Icon Picker](/docs/ui/emoji-icon-picker) covers the format and the components that read it. +- `root`: when `true`, members pass every staff permission check. +- `default`: the role new members get. +- `guest`: the role used for visitors who are not signed in. -## Primary vs Secondary Roles +Roles also carry allowances: file uploads on the **Content** tab, and personal information plus avatar and cover limits on the **Profile** tab. [Profile fields](/docs/dev/working-with-users/profile-fields#who-may-edit) and [Avatars and covers](/docs/dev/working-with-users/avatars#role-settings) explain how several roles combine. -Every user has exactly one **primary role** (stored in `core_users.roleId`). Users may additionally hold multiple **secondary roles** (stored in `core_users_secondary_roles`), inheriting combined staff permissions across all assigned groups. +## Primary and secondary roles ---- +Every user has exactly one **primary role** (`core_users.roleId`) and any number of **secondary roles** (`core_users_secondary_roles`). VitNode combines staff permissions across all of them. Staff change both in the **Roles** card on the user's AdminCP page ([Manage users](/docs/dev/working-with-users/admin-users)). -## AdminCP Role Management +## Manage roles in the AdminCP -{/* Image prompt: VitNode AdminCP Roles management page at /admin/core/roles. Table showing custom roles with colored name badges, member counts, and action buttons to reorder, edit, or delete roles. Dark theme, 1440x900. */} +<ImgDocs + withoutBackground + className="*:max-w-full" + src={rolesList} + alt="The AdminCP Roles page: a search field and Create role button above a table of the Administrator, Moderator, Member and Guest roles with their colours, number of users, last update and an edit button" +/> -Create, color-code, and organize user groups under **Core → Roles** (`/admin/core/roles`). +Roles live at **AdminCP → Core → Users → Roles** (`/admin/core/users/roles`). The table shows each **Role**, its **Number of users** and when it was last updated. **Create role** and the edit button open a dialog with **General**, **Content** and **Profile** tabs, plus **Artificial intelligence (AI)** when AI is configured. **General** holds the **Name**, the **Color** that tints member names, and the **Prefix**. -The **General** tab of the create/edit dialog carries both display fields: **Color**, which tints member usernames, and **Prefix**, which puts an emoji or an icon in front of them. +Deleting a role that still has users asks which role to move them to first. -## Learn More +## Related <Cards> <Card - title="Staff Permissions" - description="Grant granular admin and moderator privileges to roles" + title="Permissions" + description="Grant admin and moderator permissions to roles" href="/docs/dev/working-with-users/staff-permissions" /> <Card - title="Users" - description="Managing user accounts and session context" + title="Current user" + description="Read the signed-in user and their role in routes and components" href="/docs/dev/working-with-users/users" /> </Cards> diff --git a/apps/web/content/docs/dev/working-with-users/staff-permissions-editor.webp b/apps/web/content/docs/dev/working-with-users/staff-permissions-editor.webp new file mode 100644 index 0000000000000000000000000000000000000000..198cf87b8109d84a51534563f8609e2904aaf995 GIT binary patch literal 64860 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]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%0AWMcp0|8aZN(mlr1Ae4pt&4L65R65@=Q#cZ&==g1 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/working-with-users/staff-permissions.mdx b/apps/web/content/docs/dev/working-with-users/staff-permissions.mdx index e920b0838d..7ad85ebba1 100644 --- a/apps/web/content/docs/dev/working-with-users/staff-permissions.mdx +++ b/apps/web/content/docs/dev/working-with-users/staff-permissions.mdx @@ -1,197 +1,442 @@ --- -title: Staff Permissions -description: Declare granular staff permissions in VitNode plugins, enforce them on Hono routes, and gate AdminCP UI controls. -icon: ShieldUser +title: Permissions +description: Declare a VitNode staff permission in the site-notes plugin, guard a create endpoint with it, and check that VitNode refuses a restricted administrator until you grant the permission. +icon: ShieldCheck --- -VitNode separates staff into two groups: **Moderators** and **Administrators**. Plugins declare granular permissions that restrict what staff members or roles can access. +import { ImgDocs } from "@/components/fumadocs/img"; +import permissionEditor from "./staff-permissions-editor.webp"; -<Callout type="warn" title="New Admin APIs Require Staff Permissions"> - Routes under `/admin/` are automatically gated by the admin session, but you must declare an explicit staff permission tuple to restrict specific actions. -</Callout> +Staff permissions decide what each AdminCP administrator or moderator may do. A plugin declares its own, the AdminCP lets you grant them, and routes check them on the server. In this lesson you declare **Create notes** for `site-notes` and add `POST /api/site-notes/admin/notes`, which only administrators holding it can call. -## Quick start +## Before you begin -### 1. Declare Permissions in Plugin API Config +- The `site_notes` table from [Database](/docs/dev/database), with `pnpm dev` running. +- A second account to restrict. Register one at `/register` in a private window; only the first account became the administrator. -```ts title="plugins/blog/src/config.api.ts" -import { buildApiPlugin } from "@vitnode/core/api/lib/plugin" +<Steps> + +<Step> + +### Declare the permission -import { manifest } from "@/manifest.gen" +Add `permissionStaff` to `buildApiPlugin` in `src/config.api.ts`. This is an excerpt; keep the rest of the file: -export const blogApiPlugin = () => +```ts title="plugins/site-notes/src/config.api.ts" +export const siteNotesApiPlugin = () => buildApiPlugin({ manifest, - // [!code ++:8] + modules: [helloModule, notesModule], + // [!code ++:3] permissionStaff: { - admin: { - posts: [ - "can_view", - { permission: "can_delete", dependsOn: ["can_view"] }, - ], - }, - }, - }) + admin: { notes: ["can_create"] } + } + }); ``` -### 2. Enforce on Hono Route +`admin` holds permissions for AdminCP administrators, `notes` is the permission module, and `can_create` the permission. Together with the plugin id they form `site-notes:notes:can_create`. Nobody can grant a permission that is not declared here, so only unrestricted administrators would ever pass its check. -Add `adminStaffPermission` to automatically return `403 Forbidden` if unauthorized: +Moderators work on the site, not in the AdminCP, so their permissions go under `moderator`. A plugin can declare both, for example letting moderators delete notes they find on the site: -```ts title="plugins/blog/src/api/modules/admin/posts/routes/delete.route.ts" -export const deletePostRoute = buildRoute({ - // [!code ++:1] - adminStaffPermission: { module: "posts", permission: "can_delete" }, - route: { - method: "delete", - path: "/{id}", - responses: { - 200: { description: "Post deleted" }, - 403: { description: "Forbidden" }, - }, - }, - handler: async (c) => { - // Execution only reaches here if caller has permission - }, -}) +```ts title="plugins/site-notes/src/config.api.ts" +permissionStaff: { + admin: { notes: ["can_create"] }, + moderator: { notes: ["can_delete"] }, // [!code highlight] +}, ``` ---- +You grant `site-notes:notes:can_delete` in **Staff → Moderators**, and VitNode checks it against the signed-in member. [Moderator permissions](#moderator-permissions) shows the routes that use it; this lesson continues with `can_create` only. -## Add Permissions Step by Step +</Step> -<Steps> <Step> -### 1. Define Translation Labels +### Label it -Add flat labels in `plugins/blog/src/locales/en.json`: +Open `src/locales/en.json`. Give the plugin a display name as `title` inside the `site-notes` object, and add the permission labels at the **root**, next to that object rather than inside it. This excerpt shows only the new keys: -```json title="plugins/blog/src/locales/en.json" +```json title="plugins/site-notes/src/locales/en.json" { - "@vitnode/blog": { "title": "Blog" }, - "@vitnode/blog:posts": "Articles", - "@vitnode/blog:posts:can_view": "View articles list", - "@vitnode/blog:posts:can_create": "Create articles", - "@vitnode/blog:posts:can_delete": "Delete articles" + "site-notes": { + "title": "Site Notes" + }, + "site-notes:notes": "Notes", + "site-notes:notes:can_create": "Create notes" } ``` +The AdminCP permission editor shows these names: **Site Notes** in its plugin list, then **Notes** and **Create notes**. Without them it shows the raw `site-notes` and keys. + </Step> + <Step> -### 2. Gate UI Controls +### Guard the create route -Hide buttons or panels from unauthorized staff with `AdminStaffPermissionGate`: +Admin endpoints live under an `admin` module, so their URLs contain `/admin/`. VitNode requires an AdminCP session for every such URL; `adminStaffPermission` adds the per-permission check. Create `src/api/modules/admin/notes/create.route.ts`: -```tsx title="plugins/blog/src/admin/delete-post-button.tsx" -import { AdminStaffPermissionGate } from "@vitnode/core/components/staff-permission/provider" +```ts title="plugins/site-notes/src/api/modules/admin/notes/create.route.ts" +import { z } from "@hono/zod-openapi"; -export const DeletePostButton = () => ( - // [!code ++:5] - <AdminStaffPermissionGate - plugin="@vitnode/blog" - module="posts" - permission="can_delete" - > - <button className="text-destructive">Delete</button> - </AdminStaffPermissionGate> -) -``` +import { buildRoute } from "@/api/builders"; +import { site_notes } from "@/database/notes"; -Or check permissions imperatively with `useStaffPermissions`: +import { zodNote } from "../../notes/notes.schema"; -```tsx -const { hasPermission } = useStaffPermissions() -const canDelete = hasPermission({ module: "posts", permission: "can_delete" }) +export const createNoteRoute = buildRoute({ + // [!code ++] + adminStaffPermission: { module: "notes", permission: "can_create" }, + route: { + method: "post", + path: "/", + request: { + body: { + content: { + "application/json": { + schema: z.object({ + title: z.string().trim().min(3).max(200), + body: z.string().trim().min(1).max(2000) + }) + } + } + } + }, + responses: { + 201: { + content: { "application/json": { schema: zodNote } }, + description: "The created note." + } + } + }, + handler: async (c) => { + const values = c.req.valid("json"); + const [note] = await c + .get("db") + .insert(site_notes) + .values(values) + .returning({ id: site_notes.id, title: site_notes.title, body: site_notes.body }); + + return c.json(note, 201); + } +}); ``` +`adminStaffPermission` checks the permission of the plugin that owns the route, so it never names `site-notes`. Anyone without it gets `403` before the handler runs, and an invalid body gets `400`. + </Step> + <Step> -### 3. Gate Sidebar Navigation +### Mount the admin module -Attach `permission` to navigation items in `src/admin/nav.tsx`: +Create the two modules that put the route at `admin/notes`: -```tsx title="plugins/blog/src/admin/nav.tsx" -export const adminNav: PluginAdminNav = { - nav: [ - { - id: "posts", - href: "/admin/blog/posts", - icon: <ListIcon />, - permission: { module: "posts", permission: "can_view" }, // [!code ++] - }, - ], -} +```ts title="plugins/site-notes/src/api/modules/admin/notes/notes.module.ts" +import { buildModule } from "@/api/builders"; + +import { createNoteRoute } from "./create.route"; + +export const adminNotesModule = buildModule({ + name: "notes", + routes: [createNoteRoute] +}); +``` + +```ts title="plugins/site-notes/src/api/modules/admin/admin.module.ts" +import { buildModule } from "@/api/builders"; + +import { adminNotesModule } from "./notes/notes.module"; + +export const adminModule = buildModule({ + name: "admin", + routes: [], + modules: [adminNotesModule] +}); +``` + +Then register `adminModule` in `src/config.api.ts`: + +```ts title="plugins/site-notes/src/config.api.ts" +import { adminModule } from "./api/modules/admin/admin.module"; // [!code ++] + + modules: [helloModule, notesModule], // [!code --] + modules: [helloModule, notesModule, adminModule], // [!code ++] ``` </Step> -<Step> -### 4. Grant Permissions in AdminCP +<Step> -{/* Image prompt: VitNode AdminCP staff permission editor at /admin/core/staff/admins. Left sidebar lists plugins (Core, Blog). Right panel displays permission toggles grouped by module ("Articles") with dependency locks and an Unrestricted / Restricted level switcher. Dark theme, 1440x900. */} +### Restrict the second account -1. Go to **Staff → Administrators** (`/admin/core/staff/admins`). -2. Select a User or Role and click **Edit**. -3. Choose **Restricted**, toggle the desired permissions, and click **Save Changes**. +In the AdminCP, open **Staff → Administrators** (`/admin/core/staff/admins`) and choose **Add Administrator**. Pick your second account, keep **Restricted** and save without ticking anything. That account can now sign in to the AdminCP but holds no permissions. </Step> + </Steps> ---- +## Check the result + +Add a temporary button that calls the route with `fetcher`. Create `src/pages/check-create-note.tsx`: + +```tsx title="plugins/site-notes/src/pages/check-create-note.tsx" +import { Button } from "@vitnode/core/components/ui/button"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { useState } from "react"; + +import { manifest } from "@/manifest.gen"; + +export const CheckCreateNote = () => { + const [status, setStatus] = useState<number>(); + const [isPending, setIsPending] = useState(false); + + const onClick = async () => { + setIsPending(true); + try { + const response = await fetcher({ + plugin: manifest.id, + method: "post", + module: "admin/notes", + path: "/", + args: { + body: { + title: "Parking lot repaint", + body: "The lot is closed on Saturday morning." + } + } + }); + setStatus(response.status); + } finally { + setIsPending(false); + } + }; + + return ( + <div className="flex items-center gap-3"> + <Button isLoading={isPending} onClick={onClick}> + Create a test note + </Button> + {status ? <output>{status}</output> : null} + </div> + ); +}; +``` + +Render `<CheckCreateNote />` above the list in `src/pages/notes-page.tsx`. The browser sends the AdminCP session cookie from every page, so sign in to the AdminCP as each account, open `/site-notes/notes` in that browser and press the button: -## Permission Dependencies +| Who | Result | +| ---------------------------------------------- | -------------------------------------------------- | +| Signed out of the AdminCP | `403` | +| The restricted account | `403` | +| The first account (unrestricted Administrator) | `201`, and the note appears at `/site-notes/notes` | -When a permission depends on another (e.g. creating posts requires viewing them), declare `dependsOn`: +Now edit the restricted account in **Staff → Administrators**, choose **Site Notes** in the plugin list, tick **Create notes** under **Notes** and save. The same button pressed as that account shows `201`. Remove `CheckCreateNote` when you are done. -```ts title="plugins/blog/src/config.api.ts" +<ImgDocs + withoutBackground + className="*:max-w-full" + src={permissionEditor} + alt="Edit permissions for the restricted administrator Ada Lovelace, with the Site Notes plugin selected and Create notes ticked under the Notes module" +/> + +The check happens on the server. Hiding a button or a sidebar link only tidies the UI, and the [AdminCP page](/docs/dev/plugins/admin) lesson does both on top of this guard. + +## Depend on another permission + +When one permission only makes sense with another, declare the dependency. The editor locks the dependent permission until you tick its prerequisite: + +```ts title="plugins/site-notes/src/config.api.ts" permissionStaff: { admin: { - posts: [ + notes: [ "can_view", { permission: "can_create", dependsOn: ["can_view"] }, { permission: "can_delete", dependsOn: ["can_view"] }, ], }, -} +}, ``` -The AdminCP permission editor automatically disables child toggles until prerequisites are checked. +Each permission you add needs its own label and its own `adminStaffPermission` on the routes it protects. -## Moderator permissions with scopes +## Check a permission in code -A moderator permission can be limited to some resources of a scope family, such as some forum sections. Declare the family with `scope` on the entry: +`adminStaffPermission` and `moderatorStaffPermission` cover a whole route. For a decision inside a handler, such as letting staff edit any note but members only their own, call `checkStaffPermission(c, { type, plugin, module, permission })` from `@vitnode/core/api/lib/check-staff-permission`; it resolves to `true` or `false`. In AdminCP components, `useAdminPermission({ plugin, module, permission })` from `@vitnode/core/tanstack/admin` answers the same question for the signed-in administrator, for showing or hiding controls. -```ts title="config.api.ts" +## Moderator permissions + +A moderator acts on the site with their normal member session, so moderator routes live in a public module, not under `admin`. These examples declare two moderator permissions: + +```ts title="plugins/site-notes/src/config.api.ts" permissionStaff: { - moderator: { - topics: [ - { permission: "can_view_reports", scope: "forum.section" }, - { - permission: "can_manage_reports", - dependsOn: ["can_view_reports"], - scope: "forum.section", + admin: { notes: ["can_create"] }, + moderator: { notes: ["can_delete", "can_view_details"] }, +}, +``` + +```json title="plugins/site-notes/src/locales/en.json" +{ + "site-notes:notes:can_delete": "Delete notes", + "site-notes:notes:can_view_details": "See note details" +} +``` + +Grant them in **Staff → Moderators** (`/admin/core/staff/moderators`). Choose **Add Moderator**, pick the member and save. The moderator's edit page opens; keep **Restricted**, choose **Site Notes** and tick the permissions. + +Pick the check by what a missing permission should do: + +| You want | Use | +| ------------------------------------- | ------------------------------------------ | +| Refuse the whole route | `moderatorStaffPermission` on `buildRoute` | +| Refuse one option of a route | `assertStaffPermission` in the handler | +| Answer everyone, moderators with more | `checkStaffPermission` in the handler | + +All three check the signed-in member, and a signed-out visitor never passes. + +### Guard a whole route + +`moderatorStaffPermission` works like `adminStaffPermission`, but checks the member's site session. Anyone who is not a moderator with **Delete notes** gets `403` before the handler runs: + +```ts title="plugins/site-notes/src/api/modules/notes/delete.route.ts" +import { z } from "@hono/zod-openapi"; +import { eq } from "drizzle-orm"; + +import { buildRoute } from "@/api/builders"; +import { site_notes } from "@/database/notes"; + +export const deleteNoteRoute = buildRoute({ + // [!code ++] + moderatorStaffPermission: { module: "notes", permission: "can_delete" }, + route: { + method: "delete", + path: "/{id}", + request: { + params: z.object({ id: z.coerce.number().int().positive() }) + }, + responses: { + 204: { description: "The note is gone." }, + 403: { description: "The member is not a moderator with Delete notes." }, + 404: { description: "No note has this id." } + } + }, + handler: async (c) => { + const { id } = c.req.valid("param"); + const [deleted] = await c + .get("db") + .delete(site_notes) + .where(eq(site_notes.id, id)) + .returning({ id: site_notes.id }); + if (!deleted) return c.body(null, 404); + + return c.body(null, 204); + } +}); +``` + +Add it to the `routes` of `notesModule`. Call it with `fetcher`, for example from a **Delete** button on the notes page: + +```ts +const response = await fetcher({ + plugin: manifest.id, + method: "delete", + module: "notes", + path: "/{id}", + args: { params: { id: note.id } } +}); +``` + +Signed in as the moderator, `response.status` is `204`; for any other member it is `403`. + +### Show moderators more + +The public note route answers everyone, and adds when the note was written for moderators with **See note details**. `checkStaffPermission` resolves to `true` or `false` instead of refusing: + +```ts title="plugins/site-notes/src/api/modules/notes/show.route.ts" +import { z } from "@hono/zod-openapi"; +import { checkStaffPermission } from "@vitnode/core/api/lib/check-staff-permission"; +import { eq } from "drizzle-orm"; + +import { buildRoute } from "@/api/builders"; +import { site_notes } from "@/database/notes"; +import { manifest } from "@/manifest.gen"; + +import { zodNote } from "./notes.schema"; + +export const showNoteRoute = buildRoute({ + route: { + method: "get", + path: "/{id}", + request: { + params: z.object({ id: z.coerce.number().int().positive() }) + }, + responses: { + 200: { + content: { + "application/json": { + schema: zodNote.extend({ createdAt: z.string().optional() }) + } + }, + description: "The note. Moderators with See note details also get createdAt." }, - ], + 404: { description: "No note has this id." } + } }, + handler: async (c) => { + const { id } = c.req.valid("param"); + const [note] = await c.get("db").select().from(site_notes).where(eq(site_notes.id, id)); + if (!note) return c.body(null, 404); + + const canViewDetails = await checkStaffPermission(c, { + type: "moderator", + plugin: manifest.id, + module: "notes", + permission: "can_view_details" + }); + + return c.json( + { + id: note.id, + title: note.title, + body: note.body, + ...(canViewDetails ? { createdAt: note.createdAt.toISOString() } : {}) + }, + 200 + ); + } +}); +``` + +- **The extra field is optional in the schema**, so the fetcher types it as `string | undefined` and the page shows it only when it is there. +- **`plugin: manifest.id`** is required here. Only the route options fill in the plugin for you. +- **Don't cache the moderator's answer for everyone.** A response that depends on who asks must not go into a shared cache key; cache the public part, then add the extras. + +### Refuse one option + +`assertStaffPermission` takes the same arguments and throws `403` instead of returning `false`. Use it when a member asks for something only moderators may have, here the details behind `?details=1`, while the plain request stays public: + +```ts title="plugins/site-notes/src/api/modules/notes/show.route.ts" +import { assertStaffPermission } from "@vitnode/core/api/lib/check-staff-permission"; + +// request: +request: { + params: z.object({ id: z.coerce.number().int().positive() }), + query: z.object({ details: z.literal("1").optional() }), // [!code ++] }, + +// handler, before reading the note: +const { details } = c.req.valid("query"); +if (details) { + await assertStaffPermission(c, { + type: "moderator", + plugin: manifest.id, + module: "notes", + permission: "can_view_details", + }); +} ``` -Each grant then carries a scope, and dependencies are checked per resource: managing in a section needs viewing in that section. The scope families and the AdminCP picker are covered in [Scoped moderator permissions](/docs/dev/moderation/scoped-permissions). - -## Learn More - -<Cards> - <Card - title="AdminCP Pages" - description="Build staff-only admin pages and navigation" - href="/docs/dev/plugins/admin" - /> - <Card - title="Roles & Users" - description="Configure user groups and roles" - href="/docs/dev/working-with-users/roles" - /> -</Cards> +Call it before the handler reads or changes anything, so a refused request has no side effects. Add `403` to the route's `responses` too. + +Moderator permissions can also be limited to some resources, such as some forum sections, with `scope` on the entry. [Scoped moderator permissions](/docs/dev/moderation/scoped-permissions) covers the scope families and the AdminCP picker. `moderatorStaffPermission` and a check without a `resource` pass only for grants on all resources; to allow a moderator of one section, pass `resource` to `checkStaffPermission` or `assertStaffPermission` in the handler. + +Content Engine content types declare their own permissions (`can_view`, `can_create`, `can_edit`, ...). Declaring the same module in `permissionStaff` replaces them, so use your own module names for custom permissions. diff --git a/apps/web/content/docs/dev/working-with-users/users.mdx b/apps/web/content/docs/dev/working-with-users/users.mdx index 61df7d1c28..e0fc5d9a4d 100644 --- a/apps/web/content/docs/dev/working-with-users/users.mdx +++ b/apps/web/content/docs/dev/working-with-users/users.mdx @@ -1,373 +1,138 @@ --- -title: Users & Sessions -description: Access signed-in user context in Hono API handlers, route loaders, and React components. +title: Current user +description: Read the signed-in VitNode user in Hono API handlers, React components and AdminCP screens, and see which fields the user record carries. icon: UserRound --- -import { TypeTable } from 'fumadocs-ui/components/type-table' +VitNode resolves the session cookie before your code runs, so the signed-in user is one call away on the server and in React. Use this page when a route or a component needs to know who is asking, or whether anybody is signed in at all. -Every incoming request in VitNode resolves the session cookie prior to route execution. The current user profile is accessible on both server handlers and frontend components. +## In an API route -## Quick start +`c.get("user")` returns the signed-in user, or `null` for a guest. This route answers `401` for guests and returns a few fields for everybody else: -### 1. In Hono API Routes +```ts title="plugins/site-notes/src/api/modules/hello/me.route.ts" +import { z } from "@hono/zod-openapi"; +import { HTTPException } from "hono/http-exception"; -Access the authenticated user via `c.get("user")`: +import { buildRoute } from "@/api/builders"; -```ts title="plugins/blog/src/api/modules/posts/routes/create.route.ts" -import { HTTPException } from 'hono/http-exception' - -handler: async (c) => { - // [!code ++:4] - const user = c.get('user') - if (!user) { - throw new HTTPException(401, { message: 'Unauthorized' }) - } +export const meRoute = buildRoute({ + route: { + method: "get", + path: "/me", + responses: { + 200: { + content: { + "application/json": { + schema: z.object({ id: z.number(), name: z.string() }), + }, + }, + description: "The signed-in user.", + }, + 401: { description: "Nobody is signed in." }, + }, + }, + handler: c => { + const user = c.get("user"); + if (!user) { + throw new HTTPException(401, { message: "Unauthorized" }); + } - const newPost = await createPost({ authorId: user.id }) - return c.json(newPost) -} + return c.json({ id: user.id, name: user.name }, 200); + }, +}); ``` ---- +Add `meRoute` to the `hello` module's `routes` array, and the route answers at `GET /api/site-notes/hello/me`. [API routes](/docs/dev/plugins/api/routes) shows how a route joins a module. The user object carries the columns in [the user record](#the-user-record) below, with the avatar and cover already resolved to `avatarUrl` and `coverUrl`. -### 2. In Frontend Components +## In a React component -Consume the user session via TanStack Query: +`useSessionQuery()` from `@vitnode/core/tanstack/auth` returns the session. `data.user` is `null` for a guest: -```tsx title="src/components/user-greeting.tsx" -import { useSessionQuery } from '@vitnode/core/tanstack/auth' +```tsx title="plugins/site-notes/src/pages/user-greeting.tsx" +import { useSessionQuery } from "@vitnode/core/tanstack/auth"; export const UserGreeting = () => { - // [!code ++:2] - const { data } = useSessionQuery() - const user = data?.user + const { data } = useSessionQuery(); + const user = data?.user; - if (!user) return <span>Welcome, guest!</span> + if (!user) return <span>Welcome, guest!</span>; - return <span>Welcome back, {user.name}!</span> -} + return <span>Welcome back, {user.name}!</span>; +}; ``` -`useSessionQuery()` wraps `useQuery(sessionQueryOptions())`, so it never -suspends: `data` is `undefined` on the very first render of a page that did not -warm it in a loader. Routes that want the session ready before paint call -`ensureAuthState(queryClient)` in their loader. +`useSessionQuery()` never suspends, so `data` is `undefined` on the first render of a page that did not load the session in its loader. A route that needs the session before paint calls `ensureAuthState(queryClient)` (same import) in its `loader`. ---- - -### 3. In the AdminCP +## In the AdminCP -The AdminCP session is a **second cookie**, and a second query. `isAdmin` on the -public session means "may be offered the AdminCP", not "is inside it" - so an -admin screen never answers an admin question with the public session. +The AdminCP session is a **second cookie** with its own query. `isAdmin` on the public session means "may be offered the AdminCP", not "is signed in to it", so an admin screen always reads the admin session: -```tsx title="plugins/blog/src/admin/current-admin.tsx" -import { useAdminSessionQuery } from '@vitnode/core/tanstack/admin' +```tsx title="plugins/site-notes/src/admin/current-admin.tsx" +import { useAdminSessionQuery } from "@vitnode/core/tanstack/admin"; export const CurrentAdmin = () => { - // [!code ++:1] - const { data } = useAdminSessionQuery() - - if (data.status !== 'granted') return null - - return <span>Signed in as {data.session.user.name}</span> -} -``` - -`useAdminSessionQuery()` wraps `useSuspenseQuery(adminSessionQueryOptions())`, -so `data` is always there and the screen suspends instead of rendering an empty -state. The AdminCP layout warms it, which is why every screen below it reads a -cache hit. Two shorthands sit on top of it: - -| Hook | Returns | -| :----------------- | :--------------------------------------------------------------- | -| `useAdminAccess()` | The whole access state - `granted`, or the reason it was refused | -| `useAdminUser()` | The signed-in administrator, or `null` when access is refused | - ---- - -## User Model (`core_users`) - -The canonical user table contains: - -| Column | Type | Description | -| :-------------- | :------------- | :---------------------------------------------------- | -| `id` | `serial` | Unique permanent identifier | -| `name` | `varchar(255)` | Display name | -| `nameCode` | `varchar(255)` | URL-safe slug for profile URLs (`/users/[nameCode]`) | -| `email` | `varchar(255)` | Unique account login email | -| `firstName` | `varchar(128)` | Given name, set by the user (nullable) | -| `lastName` | `varchar(128)` | Family name, set by the user (nullable) | -| `phone` | `varchar(32)` | Contact number, their own (nullable) | -| `headline` | `varchar(100)` | One line about the user, their own (nullable) | -| `showRealName` | `boolean` | Show the real name publicly instead of `name` | -| `roleId` | `integer` | Primary role ID (FK to `core_roles`) | -| `avatarColor` | `varchar(6)` | Hex color for letter avatars | -| `avatarId` | `integer` | Uploaded avatar, a `core_files` row (nullable) | -| `coverId` | `integer` | Uploaded profile cover, a `core_files` row (nullable) | -| `language` | `varchar(32)` | Preferred UI locale (defaults to `en`) | -| `timeZone` | `varchar(64)` | IANA time zone, set by the user (nullable) | -| `emailVerified` | `boolean` | Verification status | - -Every user payload the API hands out - the session, the public profile, the -AdminCP list and detail, search hit authors - carries the two images resolved -to URLs as `avatarUrl` and `coverUrl`. Both are `null` until something is -uploaded, and the `Avatar` component falls back to the letter avatar on its own - -drawn from the first character of `nameCode`, never of the displayed name, so a -member who changes which name their profile shows keeps the same face in every -list they appear in. - -### Personal information - -`firstName`, `lastName`, `phone` and `headline` are the user's own to set, at **Settings → -Overview** (`/settings`). The Profile card lists them read-only; **Edit profile** -opens one sheet with every field, the **Show my real name** switch and the time -zone, so changing three things takes one save instead of three. Every field is -optional, stored as `null` rather than an empty string when cleared, and the -session payload carries them so anything already reading the session can show -them without a second request. - -| Method | Path | Who | -| :------ | :----------------------------------- | :----------------------------------- | -| `GET` | `/api/@vitnode/core/users/me/policy` | The signed-in user - may they edit? | -| `PATCH` | `/api/@vitnode/core/users/me` | The signed-in user, on their own row | - -The body takes any subset of -`{ firstName, lastName, phone, headline, showRealName }` - -a field left out is left alone, and a text field sent as `""` or whitespace is -cleared. Writing invalidates the user's cached session and emits -[`user.updated`](/docs/dev/events/built-in-events). - -`phone` is the one field with a shape: digits and the punctuation international -numbers are written with (`+`, spaces, `-`, `(` and `)`), up to 32 characters. -Anything else is rejected by the form and by the route. It is **not** on the -public profile payload - only the account's own session carries it. - -### Time zone - -`timeZone` sits under **Region** in the same **Edit profile** sheet. It takes any -IANA name, like `Europe/Warsaw`, and **Use this device's time zone** fills the -field from the browser in one click - it still waits for **Save changes**. `null` means "follow my language", then UTC. -Notification digests go out in this time zone, and the session carries it, so -`c.get("user")?.timeZone` is there for anything else that wants local time. - -| Method | Path | Who | -| :----- | :-------------------------------------- | :----------------------------------- | -| `PUT` | `/api/@vitnode/core/users/me/time-zone` | The signed-in user, on their own row | - -The body is `{ timeZone: string | null }`. An unknown name answers `400`. -Saving invalidates the cached session and emits -[`user.updated`](/docs/dev/events/built-in-events). - -### Which name the public sees - -`showRealName` decides whether a profile is headed by the nickname (`name`) or by -`firstName lastName`. The public profile route resolves it **server-side** and -returns the answer as `name`, so a real name the user has not published never -leaves the API. When the switch is on but neither half is set, the nickname is -used, so turning it on early cannot leave a profile with an empty heading. - -People in content, such as a blog post's authors, carry the same answer as -`fullName`: the real name when it is published, `null` otherwise. -[`UserFormat`](/docs/ui/user-format) shows it in place of the nickname. To -publish a real name from your own route, use `publicFullNameOf` from -`@vitnode/core/lib/user-personal-information` and never send `firstName` or -`lastName` to other people. - -The AdminCP and search always show `name`, the account's own nickname - staff -need the identifier the account is filed under. - -### What the profile header shows - -{/* Image prompt: VitNode public profile header at /users/aXen. Wide cover image with a rounded-square avatar overlapping its bottom-left corner, the display name and @nameCode beside it, and a single row of muted meta items with small icons - a briefcase for the headline, a shield for the primary role, a calendar for the join date - with an "Edit profile" outline button at the far right. Light theme, 1440x400. */} - -`GET /api/@vitnode/core/users/profile/{nameCode}` answers with the header's whole -payload: `name` (already resolved), `nameCode`, `headline`, `avatarUrl`, -`coverUrl`, `avatarColor`, `createdAt`, the primary `role` and any -`secondaryRoles`. The header draws the headline, the role and the join date as -one row of meta items, each with its own icon, and stacks them centred under the -avatar on a phone. - -`headline` follows the install switch: with `users.personalInformation.headline` -set to `false` the route returns `null` for everyone, so turning the field off -takes it off public profiles too, without touching what members had written. - -The **Edit profile** button is the header's action slot. It is rendered only for -the account's own profile; a host that renders `ProfileContent` itself can pass -any `action` it likes - a follow button, a "message" link, nothing at all. - -### Who may edit it + const { data } = useAdminSessionQuery(); -Each role has **Allow editing personal information** on its **Profile** tab -(`allowEditPersonalInfo`, default `true`). A user may edit only when **every** -role they hold allows it - one role that switches it off is enough to lock the -card. + if (data.status !== "granted") return null; -That is the opposite of the image allowances, which grant on _any_ role, and -deliberately so: this column defaults to `true`, so under "any role grants" an -administrator who switched it off on one role would find it silently re-granted -by every other role the member happens to hold, and the setting would almost -never take effect. - -The **Edit profile** sheet then shows only the time zone, which every member may -change, and `PATCH /users/me` answers `403` regardless of what the UI showed. - -### Turning fields off for the whole install - -Roles decide _who_ may edit. The API config decides _which fields exist at all_. -Every field is on unless you set it to `false` in `vitnode.api.config.ts`: - -```ts title="vitnode.api.config.ts" -export const vitNodeApiConfig = buildApiConfig({ - // ... - users: { - personalInformation: { - phone: false, - headline: false, - showRealName: false, - }, - }, -}) + return <span>Signed in as {data.session.user.name}</span>; +}; ``` -The keys are `firstName`, `lastName`, `phone`, `headline` and `showRealName`. A -field switched off disappears from the settings card and from its form, and -`PATCH /users/me` refuses to write it even if a caller sends it anyway - so a -stale browser tab or a hand-rolled request cannot get around it. - -Switching a field off never deletes anything: the column keeps whatever members -had already set, so turning it back on restores their values. With -`showRealName` off, every profile is headed by the nickname again, whatever -individual members had chosen. With **every** field off there is nothing left to -edit, so the **Edit** button disappears too. - ---- - -## AdminCP User Management - -{/* Image prompt: VitNode AdminCP User management screen at /admin/core/users. Data table listing registered accounts with columns for Avatar, Name, Email, Primary Role badge, Status, and action dropdowns (Edit, Ban, Delete). Dark theme, 1440x900. */} - -Administrators can view, edit, ban, and assign roles to users at **Core → Users** (`/admin/core/users`). - ---- - -### Edit a user - -{/* Image prompt: VitNode AdminCP user page at /admin/core/users/1. Left column: profile card with cover, round avatar, name, @handle, Staff and Verified badges, then Personal information, Preferences, Roles, Connected accounts and Devices cards. Right column: segmented tabs Activity, Notifications, Password & passkeys above a vertical activity timeline. Dark theme, 1440x1000. */} - -Open a user at `/admin/core/users/[id]`. Everything the member can change in their own `/settings` is editable here too. - -| Area | What staff can change | -| :----------------------- | :------------------------------------------------------------------------------------------------------ | -| Profile card | Display name, name code, email, avatar, cover, and **Mark email as verified** | -| Personal information | First name, last name, headline, phone, birthday, **Show real name** | -| Preferences | Language, time zone (or automatic), newsletter | -| Roles | Primary role and secondary roles | -| Connected accounts | Disconnect an SSO account, choose where the avatar and name come from, turn **Sync on sign-in** on/off | -| Devices | Sign out one device, or every device at once | -| **Notifications** tab | In-app, push and email (with frequency) per notification type | -| **Password & passkeys** tab | Set a new password, rename or delete passkeys | - -A few rules differ from the member's own settings: - -- **Staff can edit locked fields.** The role's **Allow editing personal information** and the install's `users.personalInformation` switches limit members, not staff. -- **Notification locks still apply.** Mandatory types, and types the notification settings stop members from changing, are read-only here too, because delivery ignores stored choices for them. -- **The last sign-in method can't be removed.** Disconnecting the only SSO account or deleting the only passkey answers `409`. -- **Setting a password signs the member out everywhere**, AdminCP sessions included. -- **Sync now isn't offered.** It needs the member to sign in with the provider themselves. - -Every write needs `users:can_edit`, plus `users:can_edit_admin` when the target is staff. A staff target must also sit within your own access: you need every admin and moderator permission they hold, and only a root administrator can edit a root or unrestricted account. So nobody can reset the password of, or demote, someone above them. Reads need `users:can_view`. - -| Method | Path | Does | -| :------- | :------------------------------------------------------------------ | :--------------------------------------------------- | -| `PATCH` | `/api/@vitnode/core/admin/users/{id}` | Account, personal information and preferences | -| `PUT` | `/api/@vitnode/core/admin/users/{id}/password` | Sets a new password and revokes every session | -| `GET` | `/api/@vitnode/core/admin/users/{id}/devices` | Devices with an active session | -| `DELETE` | `/api/@vitnode/core/admin/users/{id}/devices/{publicId}` | Signs one device out | -| `DELETE` | `/api/@vitnode/core/admin/users/{id}/devices` | Signs every device out | -| `GET` | `/api/@vitnode/core/admin/users/{id}/passkeys` | Passkeys | -| `PATCH` | `/api/@vitnode/core/admin/users/{id}/passkeys/{passkeyId}` | Renames a passkey | -| `DELETE` | `/api/@vitnode/core/admin/users/{id}/passkeys/{passkeyId}` | Deletes a passkey | -| `GET` | `/api/@vitnode/core/admin/users/{id}/sso` | Connected accounts, sign-in summary, profile sources | -| `DELETE` | `/api/@vitnode/core/admin/users/{id}/sso/{providerId}` | Disconnects an account | -| `PUT` | `/api/@vitnode/core/admin/users/{id}/sso/preferences` | Profile sources and sync on sign-in | -| `GET` | `/api/@vitnode/core/admin/users/{id}/notification-preferences` | Notification preferences per type | -| `PUT` | `/api/@vitnode/core/admin/users/{id}/notification-preferences` | Changes notification preferences | - -The `PATCH` body takes any of `email`, `name`, `nameCode`, `roleId`, `secondaryRoleIds`, `firstName`, `lastName`, `headline`, `phone`, `showRealName`, `birthday` (`YYYY-MM-DD` or `null`), `language`, `timeZone` (`null` for automatic) and `newsletter`. At least one field is required. - ---- - -### Where it happens - -- **Profile page** (`/users/[nameCode]`): the owner sees a camera button on the - cover and on the avatar. It opens one dialog that both uploads and removes: - with a picture already set, a pair of radio buttons chooses between them and - the confirm button reads **Upload** or **Delete** to match; with nothing set - yet, the dialog goes straight to the picker. -- **Settings overview** (`/settings`): the avatar and its camera button only, - beside the name, code name, role and email the account carries, above the - personal information the user sets for themselves. The cover is - edited on the profile page. -- **AdminCP** (`/admin/core/users/[id]`): the same two buttons and the same - dialog, for anybody holding `users:can_edit` - plus `users:can_edit_admin` - when the target is an administrator. Staff can always set an image, even when - the user's own roles cannot; the role's size cap still applies. - -### Role settings - -Each role decides, on its **Profile** tab at **Core → Users → Roles**: - -| Setting | Column | Default | -| :--------------------------------- | :---------------------- | :------ | -| Allow editing personal information | `allowEditPersonalInfo` | `true` | -| Allow avatar upload | `allowUploadAvatar` | `true` | -| Maximum avatar size (kB) | `maxAvatarSize` | `2048` | -| Allow cover image upload | `allowUploadCover` | `true` | -| Maximum cover size (kB) | `maxCoverSize` | `5120` | - -A user with several roles is allowed as soon as **one** of them allows the -image, and gets the **most generous** cap among those roles. The cap is shown in -the dialog before a file is picked, and checked again on the server. - -### API - -| Method | Path | Who | -| :------- | :-------------------------------------------------- | :--------------------------------------------------------------- | -| `GET` | `/api/@vitnode/core/users/images/policy` | Signed-in user - what they may upload, and the caps in bytes | -| `POST` | `/api/@vitnode/core/users/images/{kind}` | Signed-in user - multipart `file`, `kind` is `avatar` or `cover` | -| `DELETE` | `/api/@vitnode/core/users/images/{kind}` | Signed-in user | -| `POST` | `/api/@vitnode/core/admin/users/{id}/images/{kind}` | Staff with `users:can_edit` | -| `DELETE` | `/api/@vitnode/core/admin/users/{id}/images/{kind}` | Staff with `users:can_edit` | - -Accepted types are JPEG, PNG and WebP. The browser crops to `512×512` for an -avatar and `1800×600` for a cover and sends WebP where the browser can encode -it, so uploads are usually far under the cap. A refused upload answers `400` -with `{ error }` written for the person who picked the file, and a role that -does not allow the image answers `403`. - -Both writes emit an event - -[`user.avatar.updated` and `user.cover.updated`](/docs/dev/events/built-in-events) - -- with the new `core_files` id, or `null` when the image was removed. - -## Learn More +`useAdminSessionQuery()` suspends instead of returning `undefined`, and the AdminCP layout loads it, so every screen below the layout reads it from the cache. Two shorter hooks from the same import sit on top of it: + +| Hook | Returns | +| :----------------- | :-------------------------------------------------------------- | +| `useAdminAccess()` | The whole access state: `granted`, or why access was refused | +| `useAdminUser()` | The signed-in administrator, or `null` when access is refused | + +[Auth and sessions](/docs/dev/advanced/auth) explains why there are two sessions and how long each lasts. + +## The user record + +Users live in the `core_users` table. These are the fields `c.get("user")` and the session carry: + +| Column | Type | Description | +| :-------------- | :------------- | :----------------------------------------------------- | +| `id` | `serial` | Permanent identifier | +| `name` | `varchar(255)` | Display name (the nickname) | +| `nameCode` | `varchar(255)` | URL-safe handle for the profile URL `/users/[nameCode]` | +| `email` | `varchar(255)` | Unique sign-in email | +| `emailVerified` | `boolean` | Whether the email is confirmed | +| `firstName` | `varchar(128)` | Given name, set by the user (nullable) | +| `lastName` | `varchar(128)` | Family name, set by the user (nullable) | +| `phone` | `varchar(32)` | Contact number (nullable) | +| `headline` | `varchar(100)` | One line about the user (nullable) | +| `showRealName` | `boolean` | Show the real name publicly instead of `name` | +| `birthday` | `timestamp` | Birthday, edited in the AdminCP (nullable) | +| `newsletter` | `boolean` | Newsletter opt-in | +| `roleId` | `integer` | Primary role (foreign key to `core_roles`) | +| `avatarColor` | `varchar(6)` | Hex colour for the letter avatar | +| `avatarId` | `integer` | Uploaded avatar, a `core_files` row (nullable) | +| `coverId` | `integer` | Uploaded profile cover, a `core_files` row (nullable) | +| `language` | `varchar(32)` | Preferred UI locale (defaults to `en`) | +| `timeZone` | `varchar(64)` | IANA time zone (nullable) | +| `createdAt` | `timestamp` | When the account was created | + +Every user payload the API hands out (the session, the public profile, the AdminCP list and detail, search hit authors) carries the two images as URLs, `avatarUrl` and `coverUrl`, instead of the file ids. Both are `null` until someone uploads an image. The `Avatar` component then draws a letter avatar from the first character of `nameCode`, never of the displayed name, so a member who switches to showing their real name keeps the same face everywhere. + +## Related <Cards> <Card - title="Roles" - description="Configure permissions, color badges, and user groups" - href="/docs/dev/working-with-users/roles" + title="Profile fields" + description="Personal information, time zone, real names and who may edit them" + href="/docs/dev/working-with-users/profile-fields" /> <Card - title="Staff Permissions" - description="Grant administrative and moderation privileges" - href="/docs/dev/working-with-users/staff-permissions" + title="Avatars and covers" + description="Profile images, the role caps and the upload routes" + href="/docs/dev/working-with-users/avatars" /> <Card - title="SSO" - description="Configure social login providers" - href="/docs/dev/sso" + title="Manage users" + description="Find, create and edit accounts in the AdminCP" + href="/docs/dev/working-with-users/admin-users" /> </Cards> diff --git a/apps/web/content/docs/guides/blog.mdx b/apps/web/content/docs/guides/blog.mdx index 596f734277..4eb0bb4cbc 100644 --- a/apps/web/content/docs/guides/blog.mdx +++ b/apps/web/content/docs/guides/blog.mdx @@ -212,7 +212,7 @@ A count only includes articles a reader can open in that language, the same ones `/blog` lists. Names stay cached until a category changes, and counts until an article is published, edited, hidden or deleted. To put a blog list on another page with your own layout, see -[Add a list to another page](/docs/content-engine/public-lists-embed). +[Embedded list](/docs/content-engine/public-lists-embed). ### Article authors @@ -246,7 +246,7 @@ curl "http://localhost:3000/api/@vitnode/blog/content/blog?locale=en&first=1" } ``` -The response is trimmed here. A deleted account simply drops out of the list. +The response is trimmed here. A deleted account drops out of the list. ## Write and translate articles @@ -295,8 +295,8 @@ The **More actions** menu of an article in the list has **Hide** and sitemap without unpublishing it, and **Unhide** brings it back with the same URL and date. It needs the **Hide and unhide articles** permission. Duplicating makes a draft copy with every translation, such as "Hello world (Copy)". See -[Hide content](/docs/content-engine/content-visibility) and -[Duplicate content](/docs/content-engine/duplicate-content). +[Visibility](/docs/content-engine/content-visibility) and +[Duplication](/docs/content-engine/duplicate-content). ### Translate side by side @@ -384,7 +384,7 @@ together. <Card icon={<RouteIcon />} title="Build your first plugin" - description="Create the plugin that will own your site’s public blog route." + description="Create the plugin that will own your site's public blog route." href="/docs/guides/first-plugin" /> <Card diff --git a/apps/web/content/docs/guides/first-plugin.mdx b/apps/web/content/docs/guides/first-plugin.mdx index bb38feaddf..afc7022aa5 100644 --- a/apps/web/content/docs/guides/first-plugin.mdx +++ b/apps/web/content/docs/guides/first-plugin.mdx @@ -1,127 +1,56 @@ --- -title: Build Your First Plugin -description: Create a VitNode plugin step by step, add a TanStack Start route, register it, and open a working page. +title: First plugin +description: Generate a VitNode plugin in a few minutes, open its page at /site-notes, and continue with the lessons that add an API, a database table, permissions and an AdminCP screen. icon: PackagePlus --- -import { LayoutDashboardIcon, NetworkIcon, RouteIcon } from 'lucide-react' -import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Tab, Tabs } from "fumadocs-ui/components/tabs"; -This tutorial builds `@acme/site-notes`, a tiny plugin with a page at -`/site-notes`. Start from a VitNode workspace with Turborepo enabled; it gives -the plugin generator a shared home. +import { ImgDocs } from "@/components/fumadocs/img"; +import generatedPage from "../dev/plugins/create-generated-page.webp"; + +This is the short version: generate a plugin and see its page. The [Learn lessons](/docs/dev) build the same `site-notes` plugin into a real feature. + +## Before you begin + +- A VitNode app created with **Turborepo** turned on, running locally. [Setup](/docs/dev/setup) walks through it. <Steps> - <Step> -### Generate `@acme/site-notes` +<Step> + +### Generate the plugin -Run the generator from the workspace root and enter `@acme/site-notes` when it -asks for a name: +From the workspace root: <Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Generate the plugin"> ```bash tab="bun" -bun create vitnode-app@canary --plugin +bun create vitnode-app@canary site-notes --plugin ``` ```bash tab="pnpm" -pnpm create vitnode-app@canary --plugin +pnpm create vitnode-app@canary site-notes --plugin ``` ```bash tab="npm" -npm create vitnode-app@canary -- --plugin +npm create vitnode-app@canary site-notes -- --plugin ``` </Tabs> -The result has `routes.ts`, `pages/home-page.tsx`, `locales/en.json`, and -`config.tsx`. The CLI adds a workspace dependency but leaves activation to you, -which makes installed plugins predictable. - - </Step> - <Step> - -### Claim the page URL - -The route tree belongs to the plugin and is all the host needs to discover a -route. `lazy` names the page module without importing it, so the page gets a -chunk of its own: - -```ts title="plugins/site-notes/src/routes.ts" -import { definePluginRoutes, lazy, page } from '@vitnode/core/routing' - -export const routes = definePluginRoutes([ - // [!code ++:3] - page('/site-notes', { - component: lazy(() => import('./pages/home-page')), - }), -]) -``` - - </Step> - <Step> - -### Render a translated page - -Edit the generated route module. It stays framework-neutral and is lazily -loaded by the TanStack Start host: - -```tsx title="plugins/site-notes/src/pages/home-page.tsx" -import { useTranslations } from 'use-intl' +The generator creates `plugins/site-notes` and registers it in your app's VitNode configs, so there is nothing to enable by hand. -const HomePage = () => { - const t = useTranslations('@acme/site-notes') // [!code ++] +</Step> - return ( - <div className="container mx-auto flex max-w-2xl flex-col gap-4 p-4"> - <h2 className="text-2xl font-semibold">{t('home.title')}</h2> - <p className="text-muted-foreground">{t('home.desc')}</p> - </div> - ) -} +<Step> -export default HomePage -``` - -```json title="plugins/site-notes/src/locales/en.json" -{ - "@acme/site-notes": { - "home": { - "title": "Site notes", - "desc": "This page ships from a plugin. Neat, right?" - } - } -} -``` - - </Step> - <Step> - -### Enable it in the host - -The package must be in the host's `plugins` array. This is the only composition -step; routes and pages remain inside `plugins/site-notes`: - -```ts title="apps/web/src/vitnode.config.ts" -import { siteNotesPlugin } from '@acme/site-notes/config' // [!code ++] +### Run it -export const vitNodeConfig = buildConfig({ - plugins: [ - siteNotesPlugin(), // [!code ++] - ], -}) -``` - - </Step> - <Step> - -### Run and inspect the result - -<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Run the plugin"> +<Tabs groupId="package-manager" persist items={["bun", "pnpm", "npm"]} label="Start the app"> ```bash tab="bun" -bun dev +bun run dev ``` ```bash tab="pnpm" @@ -134,32 +63,17 @@ npm run dev </Tabs> -Visit `http://localhost:3000/site-notes`. +</Step> -{/* Image prompt: Tutorial verification screenshot for a VitNode app at /site-notes. Show a simple “Site notes” page, browser address bar, and a compact visual hint that it is loaded from a plugin package. Dark theme, 1440x900. */} - - </Step> </Steps> -## Grow the same plugin - -<Cards> - <Card - icon={<RouteIcon />} - title="Add route behavior" - description="Use loaders, metadata, breadcrumbs, and parameters in the plugin route." - href="/docs/dev/routing" - /> - <Card - icon={<NetworkIcon />} - title="Add an API module" - description="Keep typed Hono routes beside the page that needs them." - href="/docs/dev/plugins/api/modules" - /> - <Card - icon={<LayoutDashboardIcon />} - title="Add AdminCP tools" - description="Give staff a plugin-owned screen or dashboard widget." - href="/docs/dev/plugins/admin" - /> -</Cards> +## Check the result + +Open `http://localhost:3000/site-notes`. The page comes from `plugins/site-notes/src/pages/home-page.tsx`, and `http://localhost:3000/api/site-notes/hello` answers from the plugin's API. + +<ImgDocs + withoutBackground + className="*:max-w-full" + src={generatedPage} + alt="The generated site-notes plugin page at /site-notes in a VitNode app" +/> diff --git a/apps/web/content/docs/guides/forum.mdx b/apps/web/content/docs/guides/forum.mdx index f952dc6f27..ab460d0aa6 100644 --- a/apps/web/content/docs/guides/forum.mdx +++ b/apps/web/content/docs/guides/forum.mdx @@ -12,7 +12,7 @@ everything you learn here works the same way in your own plugins. <Callout type="info" title="Lives in the monorepo"> The plugin is `private: true` and ships with the VitNode repository, like - `@vitnode/example`. It is not published to npm yet. + the `newsroom` plugin. It is not published to npm yet. </Callout> <Steps> diff --git a/apps/web/package.json b/apps/web/package.json index 65560f952a..f8b5f84d8d 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -29,8 +29,8 @@ "@tanstack/react-start": "^1.169.1", "@vitnode/blog": "workspace:*", "@vitnode/core": "workspace:*", - "@vitnode/example": "workspace:*", "@vitnode/forum": "workspace:*", + "newsroom": "workspace:*", "@vitnode/supabase-storage": "workspace:*", "d3-shape": "^3.2.0", "dotenv": "^18.0.6", diff --git a/apps/web/src/admin-nav.gen.ts b/apps/web/src/admin-nav.gen.ts index 39e211ce02..c19c78cc1d 100644 --- a/apps/web/src/admin-nav.gen.ts +++ b/apps/web/src/admin-nav.gen.ts @@ -18,14 +18,14 @@ import type { AdminNavPluginSource } from '@vitnode/core/lib/plugin' import { adminNavBundle } from '@vitnode/core/tanstack/admin' import { adminNav as adminNav0 } from '@vitnode/blog/admin/nav' -import { adminNav as adminNav1 } from '@vitnode/example/admin/nav' -import { adminNav as adminNav2 } from '@vitnode/forum/admin/nav' +import { adminNav as adminNav1 } from '@vitnode/forum/admin/nav' +import { adminNav as adminNav2 } from 'newsroom/admin/nav' export const pluginAdminNav = [ adminNav0, // @vitnode/blog - adminNav1, // @vitnode/example - adminNav2, // @vitnode/forum + adminNav1, // @vitnode/forum + adminNav2, // newsroom ] satisfies AdminNavPluginSource[] export const adminNav = adminNavBundle({ plugins: pluginAdminNav }) diff --git a/apps/web/src/api-registry.gen.ts b/apps/web/src/api-registry.gen.ts index ecd4051cb0..c2fae99d8b 100644 --- a/apps/web/src/api-registry.gen.ts +++ b/apps/web/src/api-registry.gen.ts @@ -20,14 +20,14 @@ // plugin id. import type { VitNodeApiPlugin as ApiPlugin0 } from '@vitnode/blog/config.api' -import type { VitNodeApiPlugin as ApiPlugin1 } from '@vitnode/example/config.api' -import type { VitNodeApiPlugin as ApiPlugin2 } from '@vitnode/forum/config.api' +import type { VitNodeApiPlugin as ApiPlugin1 } from '@vitnode/forum/config.api' +import type { VitNodeApiPlugin as ApiPlugin2 } from 'newsroom/config.api' declare module '@vitnode/core/lib/fetcher/registry' { interface ApiPluginRegistry { '@vitnode/blog': ApiPlugin0 - '@vitnode/example': ApiPlugin1 - '@vitnode/forum': ApiPlugin2 + '@vitnode/forum': ApiPlugin1 + 'newsroom': ApiPlugin2 } } diff --git a/apps/web/src/blocks.gen.ts b/apps/web/src/blocks.gen.ts index 7586692e83..8978419eec 100644 --- a/apps/web/src/blocks.gen.ts +++ b/apps/web/src/blocks.gen.ts @@ -29,12 +29,12 @@ import type { BlockPluginSource } from '@vitnode/core/widgets' import { createBlockRegistry, setDefaultBlockRegistry } from '@vitnode/core/widgets' import { blocks as blocks0 } from '@vitnode/core/widgets/built-in' -import { blocks as blocks1 } from '@vitnode/example/widgets' +import { blocks as blocks1 } from 'newsroom/widgets' export const pluginBlocks = [ blocks0, // @vitnode/core - blocks1, // @vitnode/example + blocks1, // newsroom ] satisfies BlockPluginSource[] export const blocksRegistry = createBlockRegistry(pluginBlocks) diff --git a/apps/web/src/content-modules.gen.ts b/apps/web/src/content-modules.gen.ts index a5152b2c8f..90d7e32514 100644 --- a/apps/web/src/content-modules.gen.ts +++ b/apps/web/src/content-modules.gen.ts @@ -12,11 +12,11 @@ // plugin id. import * as contentModule0 from '@vitnode/blog/content' -import * as contentModule1 from '@vitnode/example/content' -import * as contentModule2 from '@vitnode/forum/content' +import * as contentModule1 from '@vitnode/forum/content' +import * as contentModule2 from 'newsroom/content' export const contentModules: Readonly<Record<string, unknown>> = { '@vitnode/blog': contentModule0, - '@vitnode/example': contentModule1, - '@vitnode/forum': contentModule2, + '@vitnode/forum': contentModule1, + 'newsroom': contentModule2, } diff --git a/apps/web/src/content-registry.gen.ts b/apps/web/src/content-registry.gen.ts index 52f663bb9c..0ec4d966a3 100644 --- a/apps/web/src/content-registry.gen.ts +++ b/apps/web/src/content-registry.gen.ts @@ -18,14 +18,14 @@ import type { ContentFrontendPluginSource } from '@vitnode/core/lib/plugin' import { buildContentFrontendRegistry, setContentFrontendRegistry } from '@vitnode/core/content' import { adminContent as adminContent0 } from '@vitnode/blog/admin/content' -import { adminContent as adminContent1 } from '@vitnode/example/admin/content' -import { adminContent as adminContent2 } from '@vitnode/forum/admin/content' +import { adminContent as adminContent1 } from '@vitnode/forum/admin/content' +import { adminContent as adminContent2 } from 'newsroom/admin/content' export const pluginContentTypes = [ adminContent0, // @vitnode/blog - adminContent1, // @vitnode/example - adminContent2, // @vitnode/forum + adminContent1, // @vitnode/forum + adminContent2, // newsroom ] satisfies ContentFrontendPluginSource[] export const contentRegistry = buildContentFrontendRegistry(pluginContentTypes) diff --git a/apps/web/src/docs/docs.css b/apps/web/src/docs/docs.css index 0942508c9d..2fe35bd1da 100644 --- a/apps/web/src/docs/docs.css +++ b/apps/web/src/docs/docs.css @@ -39,6 +39,11 @@ --tw-prose-body: oklch(0.373 0.003 264); } +/* Long paths and file names in inline code would otherwise widen the page on phones. */ +.prose :not(pre) > code { + overflow-wrap: anywhere; +} + @keyframes vt-enter { from { opacity: 0; diff --git a/apps/web/src/locales/site/en.json b/apps/web/src/locales/site/en.json index 7b4db3e5f9..ae99bb4609 100644 --- a/apps/web/src/locales/site/en.json +++ b/apps/web/src/locales/site/en.json @@ -318,7 +318,7 @@ "discover": "Discover", "discover_description": "Fresh posts from every corner of the site.", "browse": "Browse", - "browse_description": "A paginated list, shipped by the example plugin.", + "browse_description": "A paginated list, shipped by the newsroom plugin.", "search": "Search" } } diff --git a/apps/web/src/locales/site/pl.json b/apps/web/src/locales/site/pl.json index 1982398935..0e14ad0338 100644 --- a/apps/web/src/locales/site/pl.json +++ b/apps/web/src/locales/site/pl.json @@ -318,7 +318,7 @@ "discover": "Odkrywaj", "discover_description": "Najnowsze wpisy z całej strony.", "browse": "Przeglądaj", - "browse_description": "Lista ze stronicowaniem z przykładowej wtyczki.", + "browse_description": "Lista ze stronicowaniem z wtyczki newsroom.", "search": "Szukaj" } } diff --git a/apps/web/src/package-messages.gen.ts b/apps/web/src/package-messages.gen.ts index f64e07a84d..dcee66bf87 100644 --- a/apps/web/src/package-messages.gen.ts +++ b/apps/web/src/package-messages.gen.ts @@ -27,10 +27,10 @@ export const packageMessages: Record<string, LocaleMessagesMap> = { '@vitnode/blog': { en: async () => await import('@vitnode/blog/locales/en.json'), }, - '@vitnode/example': { - en: async () => await import('@vitnode/example/locales/en.json'), - }, '@vitnode/forum': { en: async () => await import('@vitnode/forum/locales/en.json'), }, + 'newsroom': { + en: async () => await import('newsroom/locales/en.json'), + }, } diff --git a/apps/web/src/page-cache.gen.ts b/apps/web/src/page-cache.gen.ts index 96a393263f..3103dbe0bc 100644 --- a/apps/web/src/page-cache.gen.ts +++ b/apps/web/src/page-cache.gen.ts @@ -50,22 +50,25 @@ export const pageCacheRoutes: PageCacheRouteTable = [ { path: '/forum/topics/:id/edit' }, { path: '/blog/article/:slug', maxAge: 300, staleWhileRevalidate: 60 }, { path: '/blog/category/:slug', maxAge: 300, staleWhileRevalidate: 60 }, - { path: '/example/guide/:topic' }, { path: '/forum/comments/:slug' }, { path: '/forum/topics/:slug', maxAge: 60, staleWhileRevalidate: 30 }, { path: '/login/sso/:providerId' }, { path: '/modcp/approvals/:id' }, { path: '/modcp/reports/:id' }, - { path: '/admin/example' }, - { path: '/discussions/new' }, - { path: '/example/browse' }, - { path: '/example/embed' }, - { path: '/example/guide' }, - { path: '/example/zones' }, + { path: '/newsroom/guide/:topic' }, + { path: '/newsroom/notes/:slug' }, + { path: '/newsroom/pages/:slug' }, + { path: '/admin/newsroom' }, + { path: '/letters/new' }, { path: '/login/reset-password' }, { path: '/login/verify-email' }, { path: '/modcp/approvals' }, { path: '/modcp/reports' }, + { path: '/news/new' }, + { path: '/newsroom/browse' }, + { path: '/newsroom/embed' }, + { path: '/newsroom/guide' }, + { path: '/newsroom/zones' }, { path: '/settings/ai' }, { path: '/settings/devices' }, { path: '/settings/notifications' }, @@ -75,27 +78,30 @@ export const pageCacheRoutes: PageCacheRouteTable = [ { path: '/docs/search' }, { path: '/admin/containers/*' }, { path: '/admin/content/*' }, - { path: '/discussions/:id/edit' }, - { path: '/advanced-articles/:slug' }, - { path: '/articles/:slug' }, + { path: '/letters/:id/edit' }, + { path: '/news/:id/edit' }, { path: '/blog/:slug' }, - { path: '/boards/:slug' }, - { path: '/discussions/:slug' }, + { path: '/bulletins/:slug' }, + { path: '/desks/:slug' }, { path: '/events/:slug' }, - { path: '/example/:slug' }, + { path: '/explainers/:slug' }, { path: '/forum/:slug', maxAge: 60, staleWhileRevalidate: 30 }, - { path: '/localized-articles/:slug' }, + { path: '/letters/:slug' }, + { path: '/news/:slug' }, + { path: '/stories/:slug' }, { path: '/users/:nameCode' }, { path: '/solutions/:slug' }, { path: '/admin' }, { path: '/blog', maxAge: 300, staleWhileRevalidate: 60 }, - { path: '/boards' }, + { path: '/desks' }, { path: '/discover' }, - { path: '/discussions' }, { path: '/files' }, { path: '/forum', maxAge: 60, staleWhileRevalidate: 30 }, + { path: '/letters' }, { path: '/login' }, { path: '/modcp' }, + { path: '/news' }, + { path: '/newsroom' }, { path: '/notifications' }, { path: '/register' }, { path: '/search' }, diff --git a/apps/web/src/plugin-inventory.gen.ts b/apps/web/src/plugin-inventory.gen.ts index 889784b265..ed58bb965a 100644 --- a/apps/web/src/plugin-inventory.gen.ts +++ b/apps/web/src/plugin-inventory.gen.ts @@ -34,23 +34,6 @@ export const frontendPlugins: FrontendPluginInventory = [ updates: { url: "https://raw.githubusercontent.com/aXenDeveloper/vitnode/update-manifest/updates.json" }, }, }, - { - id: "@vitnode/example", - manifest: { - id: "@vitnode/example", - title: "Example", - icon: "flask-conical", - description: "Reference plugin exercising the VitNode Content Engine end to end.", - author: { - name: "VitNode", - email: "contact@vitnode.com", - url: "https://vitnode.com", - }, - license: "MIT", - version: "2.0.0-canary.13", - updates: null, - }, - }, { id: "@vitnode/forum", manifest: { @@ -68,4 +51,17 @@ export const frontendPlugins: FrontendPluginInventory = [ updates: null, }, }, + { + id: "newsroom", + manifest: { + id: "newsroom", + title: "Newsroom", + icon: "puzzle", + description: "Newsroom: the VitNode tutorial plugin, grown into a tour of the Content Engine.", + author: null, + license: null, + version: "0.1.0", + updates: null, + }, + }, ] diff --git a/apps/web/src/plugin-routes.gen.ts b/apps/web/src/plugin-routes.gen.ts index 33a29ea2f6..53a1f3945e 100644 --- a/apps/web/src/plugin-routes.gen.ts +++ b/apps/web/src/plugin-routes.gen.ts @@ -20,8 +20,8 @@ import type { PluginRouteDeclarationSource } from '@vitnode/core/routing' import { routes as pluginRoutes0 } from '@vitnode/blog/routes' import { routes as pluginRoutes1 } from '@vitnode/core/routes' -import { routes as pluginRoutes2 } from '@vitnode/example/routes' -import { routes as pluginRoutes3 } from '@vitnode/forum/routes' +import { routes as pluginRoutes2 } from '@vitnode/forum/routes' +import { routes as pluginRoutes3 } from 'newsroom/routes' export const pluginRouteSources = [ @@ -34,11 +34,11 @@ export const pluginRouteSources = [ routes: pluginRoutes1, }, { - pluginId: '@vitnode/example', + pluginId: '@vitnode/forum', routes: pluginRoutes2, }, { - pluginId: '@vitnode/forum', + pluginId: 'newsroom', routes: pluginRoutes3, }, ] as const satisfies readonly PluginRouteDeclarationSource[] diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx index 64284c42fb..357c63b1c1 100644 --- a/apps/web/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -25,7 +25,7 @@ import { vitNodeConfig } from '@/vitnode.config' import appCss from '../styles.css?url' -const { debug, editor, i18n, logo, metadata, theme } = vitNodeConfig +const { editor, i18n, logo, metadata, theme } = vitNodeConfig export interface RootRouterContext { queryClient: QueryClient @@ -70,7 +70,7 @@ export const Route = createRootRouteWithContext<RootRouterContext>()({ function RootComponent() { return ( <VitNodeRootProviders - config={{ debug, editor, locales: i18n.locales, logo, theme }} + config={{ editor, locales: i18n.locales, logo, theme }} > <Outlet /> </VitNodeRootProviders> diff --git a/apps/web/src/site/plugins/plugins-page.tsx b/apps/web/src/site/plugins/plugins-page.tsx index 9609df16e3..e52f69ebdb 100644 --- a/apps/web/src/site/plugins/plugins-page.tsx +++ b/apps/web/src/site/plugins/plugins-page.tsx @@ -42,7 +42,7 @@ interface OfficialPlugin { const OFFICIAL_PLUGINS: OfficialPlugin[] = [ { description: - 'Articles and categories built entirely on the Content Engine: drafts, revisions and scheduled publishing, signed preview links, multiple authors, cover images and a translation for every field. It ships the content types, the AdminCP screens and a public API. The public pages are yours to design, and the example plugin shows how.', + 'Articles and categories built entirely on the Content Engine: drafts, revisions and scheduled publishing, signed preview links, multiple authors, cover images and a translation for every field. It ships the content types, the AdminCP screens and a public API. The public pages are yours to design, and the newsroom plugin shows how.', highlights: [ 'Articles, categories and multiple authors', 'Drafts, 20 revisions and scheduled publishing', @@ -59,16 +59,16 @@ const OFFICIAL_PLUGINS: OfficialPlugin[] = [ }, { description: - 'A small plugin that exists to be read. It ships public pages with loaders and a searchable browse page, an AdminCP page with navigation, four content types including a localized one, a typed Hono API module and event listeners, all wired the way the docs describe. Copy it, rename it, ship it.', + 'The plugin the Content Engine docs build step by step, then keep growing. It ships articles with comments and member writing, stories with files and scheduling, localized bulletins, uuid tags and bigint events, a desk tree for letters to the editor, block pages and widget zones, an AdminCP page and a typed Hono API module, all wired the way the docs describe. Copy it, rename it, ship it.', highlights: [ - 'Public pages with loaders and a browse page with search', - 'A typed Hono API module and event listeners', - 'Four content types, including a localized one', - 'An AdminCP page and navigation entry', + 'Articles, comments and member writing from the tutorial', + 'Localized content, relations and every id strategy', + 'Containers, moderation scopes and widget zones', + 'An AdminCP page, an AI action and event listeners', ], Icon: FlaskConical, - name: 'Example', - pkg: '@vitnode/example', + name: 'Newsroom', + pkg: 'newsroom', screen: 'integrations', status: 'reference', }, @@ -157,7 +157,7 @@ export const PluginsPage = () => ( id="official-title" title="One you can install. One you should read." > - The blog ships today, and the example plugin is the friendliest way to + The blog ships today, and the newsroom plugin is the friendliest way to learn how a plugin is put together. </SectionHeading> diff --git a/apps/web/src/vitnode.api.config.ts b/apps/web/src/vitnode.api.config.ts index 2a955190fa..12410a095e 100644 --- a/apps/web/src/vitnode.api.config.ts +++ b/apps/web/src/vitnode.api.config.ts @@ -1,11 +1,11 @@ import { blogApiPlugin } from '@vitnode/blog/config.api' import { coreRelations } from '@vitnode/core/database/relations' import { buildApiConfig } from '@vitnode/core/vitnode.config' -import { exampleApiPlugin } from '@vitnode/example/config.api' import { forumApiPlugin } from '@vitnode/forum/config.api' import { SupabaseStorageAdapter } from '@vitnode/supabase-storage' import { config } from 'dotenv' import { drizzle } from 'drizzle-orm/postgres-js' +import { newsroomApiPlugin } from 'newsroom/config.api' import { contentModules } from './content-modules.gen' import { appMessages } from './locales/app' @@ -28,7 +28,7 @@ export const POSTGRES_URL = * them - `buildApiConfig` treats all of them as optional. */ export const vitNodeApiConfig = buildApiConfig({ - plugins: [blogApiPlugin(), exampleApiPlugin(), forumApiPlugin()], + plugins: [blogApiPlugin(), forumApiPlugin(), newsroomApiPlugin()], contentModules, frontendPlugins, storage: { diff --git a/apps/web/src/vitnode.config.ts b/apps/web/src/vitnode.config.ts index e86a01cbfa..13f698734f 100644 --- a/apps/web/src/vitnode.config.ts +++ b/apps/web/src/vitnode.config.ts @@ -1,7 +1,6 @@ import { blogPlugin } from '@vitnode/blog/config' import { LogoVitNodeBrand } from '@vitnode/core/components/logo-vitnode' import { buildConfig } from '@vitnode/core/vitnode.config' -import { examplePlugin } from '@vitnode/example/config' import { forumPlugin } from '@vitnode/forum/config' import { BookOpenIcon, @@ -12,9 +11,9 @@ import { PuzzleIcon, SearchIcon, } from 'lucide-react' +import { newsroomPlugin } from 'newsroom/config' export const vitNodeConfig = buildConfig({ - debug: false, editor: { emojis: [ { @@ -67,7 +66,7 @@ export const vitNodeConfig = buildConfig({ }, { description: 'site.menu.browse_description', - href: '/example/browse', + href: '/newsroom/browse', icon: ListIcon, title: 'site.menu.browse', }, @@ -81,7 +80,7 @@ export const vitNodeConfig = buildConfig({ { href: '/search', icon: SearchIcon, title: 'site.menu.search' }, ], }, - plugins: [blogPlugin(), examplePlugin(), forumPlugin()], + plugins: [blogPlugin(), forumPlugin(), newsroomPlugin()], theme: { defaultTheme: 'system', }, diff --git a/packages/create-vitnode-app/copy-of-vitnode-app/README.md b/packages/create-vitnode-app/copy-of-vitnode-app/README.md index 6cdbd7447d..432d9dac98 100644 --- a/packages/create-vitnode-app/copy-of-vitnode-app/README.md +++ b/packages/create-vitnode-app/copy-of-vitnode-app/README.md @@ -43,10 +43,10 @@ pnpm dev Two files, and the line between them is one question: may a browser hold this? -| File | Holds | -| :----------------------------- | :----------------------------------------------------------------------------------------------------------------------- | -| `src/vitnode.config.ts` | locales, metadata, theme, `debug`, enabled plugin ids - plain data, read by the browser, the server, and your Vite build | -| `src/vitnode.server.config.ts` | message loaders - server only | +| File | Holds | +| :----------------------------- | :--------------------------------------------------------------------------------------------------------------- | +| `src/vitnode.config.ts` | locales, metadata, theme and enabled plugin ids. Plain data, read by the browser, the server and your Vite build | +| `src/vitnode.server.config.ts` | message loaders. Server only | Add a language to `i18n.locales` in the shared config; register the files that translate it in `src/locales/packages.ts` (a package's own translations) or diff --git a/packages/create-vitnode-app/copy-of-vitnode-app/root/src/routes/__root.tsx b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/routes/__root.tsx index cb0130f685..d93344d628 100644 --- a/packages/create-vitnode-app/copy-of-vitnode-app/root/src/routes/__root.tsx +++ b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/routes/__root.tsx @@ -23,7 +23,7 @@ import { vitNodeConfig } from "@/vitnode.config"; import appCss from "../styles.css?url"; -const { debug, editor, i18n, logo, metadata, theme } = vitNodeConfig; +const { editor, i18n, logo, metadata, theme } = vitNodeConfig; export interface RootRouterContext { queryClient: QueryClient; @@ -63,7 +63,7 @@ export const Route = createRootRouteWithContext<RootRouterContext>()({ function RootComponent() { return ( <VitNodeRootProviders - config={{ debug, editor, locales: i18n.locales, logo, theme }} + config={{ editor, locales: i18n.locales, logo, theme }} > <Outlet /> </VitNodeRootProviders> diff --git a/packages/create-vitnode-app/copy-of-vitnode-app/root/src/vitnode.config.ts b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/vitnode.config.ts index e146beecdd..2a65ee658e 100644 --- a/packages/create-vitnode-app/copy-of-vitnode-app/root/src/vitnode.config.ts +++ b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/vitnode.config.ts @@ -2,7 +2,6 @@ import { buildConfig } from "@vitnode/core/vitnode.config"; import { CompassIcon, SearchIcon } from "lucide-react"; export const vitNodeConfig = buildConfig({ - debug: false, i18n: { defaultLocale: "en", locales: [{ code: "en", name: "English" }], diff --git a/packages/vitnode/package.json b/packages/vitnode/package.json index 23d0f14fb0..d3b818895d 100644 --- a/packages/vitnode/package.json +++ b/packages/vitnode/package.json @@ -281,7 +281,6 @@ "commander": "^15.0.0", "cron-parser": "^5.10.1", "d3-shape": "^3.2.0", - "date-fns": "^4.4.0", "dotenv": "^18.0.6", "embla-carousel-react": "^8.6.0", "input-otp": "^1.5.0", @@ -294,7 +293,6 @@ "react-colorful": "^5.8.1", "react-day-picker": "^10.0.2", "react-resizable-panels": "^4.14.3", - "react-scan": "^0.5.7", "redis": "^6.3.0", "sanitize-html": "^2.18.0", "semver": "^7.8.5", diff --git a/packages/vitnode/src/api/config.ts b/packages/vitnode/src/api/config.ts index 90eaf58872..c2dcb777a3 100644 --- a/packages/vitnode/src/api/config.ts +++ b/packages/vitnode/src/api/config.ts @@ -2,7 +2,6 @@ import type { OpenAPIHono } from "@hono/zod-openapi"; import type { Context, Env, Schema } from "hono"; import { swaggerUI } from "@hono/swagger-ui"; -import { bodyLimit } from "hono/body-limit"; import { cors } from "hono/cors"; import { csrf } from "hono/csrf"; import { HTTPException } from "hono/http-exception"; @@ -35,6 +34,7 @@ import { generatedContentModules, packageContentModules, } from "./lib/content-modules"; +import { bodyLimitMiddleware } from "./middlewares/body-limit.middleware"; import { globalAdminMiddleware, globalMiddleware, @@ -229,7 +229,7 @@ export function VitNodeAPI({ // wall, and `maxBodySize` moves it for an install that stores large media. app.use( "*", - bodyLimit({ + bodyLimitMiddleware({ maxSize: vitNodeApiConfig.maxBodySize ?? DEFAULT_MAX_BODY_SIZE, onError: c => c.json({ error: "Payload Too Large" }, 413), }), diff --git a/packages/vitnode/src/api/lib/route.ts b/packages/vitnode/src/api/lib/route.ts index e01491062e..01bd6548e5 100644 --- a/packages/vitnode/src/api/lib/route.ts +++ b/packages/vitnode/src/api/lib/route.ts @@ -5,6 +5,7 @@ import type { ZodError } from "zod"; import { createRoute as createRouteHono } from "@hono/zod-openapi"; import type { EnvVitNode } from "../middlewares/global.middleware"; +import type { PermissionStaffType } from "./permission-staff"; import { captchaMiddleware } from "../middlewares/captcha.middleware"; import { pluginMiddleware } from "../middlewares/plugin.middleware"; @@ -21,7 +22,7 @@ export type RouteValidationHook = ( c: Context, ) => Promise<Response | undefined> | Response | undefined; -/** The admin staff permission a route requires. */ +/** The staff permission a route requires. */ export interface AdminStaffPermission { /** The permission module, e.g. `posts`. */ module: string; @@ -31,8 +32,27 @@ export interface AdminStaffPermission { plugin?: string; } +/** The moderator staff permission a route requires. */ +export type ModeratorStaffPermission = AdminStaffPermission; + const staffPermissionGuards = new WeakSet<MiddlewareHandler>(); +const staffPermissionGuard = + ( + type: PermissionStaffType, + { plugin, module, permission }: AdminStaffPermission, + pluginId: string, + ): MiddlewareHandler => + async (c, next) => { + await assertStaffPermission(c, { + type, + plugin: plugin ?? pluginId, + module, + permission, + }); + await next(); + }; + interface MountedRoute { handler: unknown; method: string; @@ -97,6 +117,14 @@ export interface BuildRouteOptions< /** The Hono handler, typed from `route`: `c.req.valid(...)` and `c.json(...)` follow its schemas. */ handler: RouteHandler<R & { path: P }, EnvVitNode>; hook?: RouteValidationHook; + /** + * Requires a signed-in member who is a moderator with this staff permission; + * anyone else gets `403`. Checked against the member's site session, so use + * it on public routes, not under `/admin/`. A grant scoped to selected + * resources does not pass: check those in the handler with + * `assertStaffPermission` and a `resource`. + */ + moderatorStaffPermission?: ModeratorStaffPermission; route: R; } @@ -105,8 +133,9 @@ export interface BuildRouteOptions< * `bindApiPlugin`, which supplies `pluginId`. * * The route is tagged with its plugin for OpenAPI and runs behind middleware - * that sets `c.get("plugin")`, then the staff-permission guard and the captcha - * check when requested, then the route's own `middleware`. + * that sets `c.get("plugin")`, then the admin and moderator staff-permission + * guards and the captcha check when requested, then the route's own + * `middleware`. * * @example * ```ts @@ -141,6 +170,7 @@ export const buildRoute = < hook, pluginId, adminStaffPermission, + moderatorStaffPermission, }: BuildRouteOptions<P, R> & { pluginId: Plugin; }): Route<Plugin, R & { path: P }> => { @@ -149,20 +179,17 @@ export const buildRoute = < const middleware: MiddlewareHandler[] = [pluginMiddleware(pluginId)]; if (adminStaffPermission) { - const { plugin, module, permission } = adminStaffPermission; - const guard: MiddlewareHandler = async (c, next) => { - await assertStaffPermission(c, { - type: "admin", - plugin: plugin ?? pluginId, - module, - permission, - }); - await next(); - }; + const guard = staffPermissionGuard("admin", adminStaffPermission, pluginId); staffPermissionGuards.add(guard); middleware.push(guard); } + if (moderatorStaffPermission) { + middleware.push( + staffPermissionGuard("moderator", moderatorStaffPermission, pluginId), + ); + } + if (route.withCaptcha) { middleware.push(captchaMiddleware()); } diff --git a/packages/vitnode/src/api/middlewares/body-limit.middleware.test.ts b/packages/vitnode/src/api/middlewares/body-limit.middleware.test.ts new file mode 100644 index 0000000000..e7040cee57 --- /dev/null +++ b/packages/vitnode/src/api/middlewares/body-limit.middleware.test.ts @@ -0,0 +1,108 @@ +import { Hono } from "hono"; +import { describe, expect, it } from "vitest"; + +import { bodyLimitMiddleware } from "./body-limit.middleware"; + +const MAX_SIZE = 8; + +/** + * A request object that quacks like a `Request` but is not one - like the + * objects TanStack Start's server hands the API. `new Request(it, init)` reads + * it as a URL string and throws, which is what turned hono's `bodyLimit` into a + * `500` for every request without a `Content-Length`. + */ +const toForeignRequest = (request: Request) => ({ + body: request.body, + headers: request.headers, + method: request.method, + signal: request.signal, + url: request.url, +}); + +const app = new Hono(); +app.use(async (c, next) => { + if (c.req.header("x-foreign-request")) { + c.req.raw = toForeignRequest(c.req.raw) as unknown as Request; + } + await next(); +}); +app.use( + bodyLimitMiddleware({ + maxSize: MAX_SIZE, + onError: c => c.json({ error: "Payload Too Large" }, 413), + }), +); +app.all("/", async c => c.text(`echo:${await c.req.text()}`)); + +const streamOf = (...chunks: string[]) => + new ReadableStream<Uint8Array>({ + start(controller) { + for (const chunk of chunks) { + controller.enqueue(new TextEncoder().encode(chunk)); + } + controller.close(); + }, + }); + +const streamedRequest = ( + chunks: string[], + headers: Record<string, string> = {}, +) => + new Request("http://localhost/", { + body: streamOf(...chunks), + // @ts-expect-error - undici requires `duplex` for a stream body; lib.dom lacks it. + duplex: "half", + headers, + method: "POST", + }); + +describe("bodyLimitMiddleware", () => { + it("passes a request without a body through", async () => { + const res = await app.request("/", { method: "DELETE" }); + + expect(res.status).toBe(200); + expect(await res.text()).toBe("echo:"); + }); + + it.each([ + { body: "12345678", status: 200 }, + { body: "123456789", status: 413 }, + ])( + "answers $status for a $body.length-byte body with a Content-Length", + async ({ body, status }) => { + const res = await app.request("/", { body, method: "POST" }); + + expect(res.status).toBe(status); + }, + ); + + it("hands a streamed body under the limit to the handler unchanged", async () => { + const res = await app.request(streamedRequest(["abc", "def"])); + + expect(res.status).toBe(200); + expect(await res.text()).toBe("echo:abcdef"); + }); + + it("answers onError for a streamed body over the limit", async () => { + const res = await app.request(streamedRequest(["abcde", "fghij"])); + + expect(res.status).toBe(413); + expect(await res.json()).toEqual({ error: "Payload Too Large" }); + }); + + it("hands an empty streamed body to the handler", async () => { + const res = await app.request(streamedRequest([])); + + expect(res.status).toBe(200); + expect(await res.text()).toBe("echo:"); + }); + + it("re-attaches a streamed body when the request is not a global Request", async () => { + const res = await app.request( + streamedRequest(["abc", "def"], { "x-foreign-request": "1" }), + ); + + expect(res.status).toBe(200); + expect(await res.text()).toBe("echo:abcdef"); + }); +}); diff --git a/packages/vitnode/src/api/middlewares/body-limit.middleware.ts b/packages/vitnode/src/api/middlewares/body-limit.middleware.ts new file mode 100644 index 0000000000..59f523f63a --- /dev/null +++ b/packages/vitnode/src/api/middlewares/body-limit.middleware.ts @@ -0,0 +1,52 @@ +import type { Context, Next } from "hono"; + +/** + * Hono's `bodyLimit`, re-attaching a buffered body with + * `new Request(url, init)` instead of `new Request(request, init)`. + * + * The second form throws on the request objects TanStack Start's server hands + * the API, so every request without a `Content-Length` - a bodiless `DELETE` + * from a browser, a chunked upload - was answered `500` before it reached a + * route. + */ +export const bodyLimitMiddleware = ({ + maxSize, + onError, +}: { + maxSize: number; + onError: (c: Context) => Promise<Response> | Response; +}) => { + return async (c: Context, next: Next) => { + const raw = c.req.raw; + if (!raw.body) return next(); + + const length = raw.headers.get("content-length"); + if (length !== null && !raw.headers.has("transfer-encoding")) { + return Number.parseInt(length, 10) > maxSize ? onError(c) : next(); + } + + const chunks: Uint8Array<ArrayBuffer>[] = []; + let size = 0; + const reader = raw.body.getReader(); + for (;;) { + const { done, value } = await reader.read(); + if (done) break; + size += value.length; + if (size > maxSize) { + await reader.cancel(); + + return onError(c); + } + chunks.push(value); + } + + c.req.raw = new Request(raw.url, { + method: raw.method, + headers: raw.headers, + signal: raw.signal, + body: size > 0 ? new Blob(chunks) : undefined, + }); + + return next(); + }; +}; diff --git a/packages/vitnode/src/api/models/email.test.ts b/packages/vitnode/src/api/models/email.test.ts new file mode 100644 index 0000000000..1a70e0a0a4 --- /dev/null +++ b/packages/vitnode/src/api/models/email.test.ts @@ -0,0 +1,53 @@ +import type { Context } from "hono"; + +import { Hono } from "hono"; +import { createElement } from "react"; +import { describe, expect, it, vi } from "vitest"; + +import type { EmailModelSendArgs } from "./email"; + +import { EmailModel } from "./email"; + +describe("EmailModel.build", () => { + it("passes the core config's email tailwindConfig to the template", async () => { + const tailwindConfig = { + theme: { extend: { colors: { brand: "#0f766e" } } }, + }; + const logo = { text: "VitNode" }; + const content = vi.fn<EmailModelSendArgs["content"]>(() => + createElement("p", null, "Hello"), + ); + + const app = new Hono(); + app.use(async (c, next) => { + c.set("core", { + email: { logo, tailwindConfig }, + metadata: { shortTitle: "VitNode", title: "VitNode" }, + } as unknown as Context["var"]["core"]); + c.set("i18n", { + getMessages: async () => await Promise.resolve({}), + resolveSupportedLocale: () => "en", + } as unknown as Context["var"]["i18n"]); + await next(); + }); + app.get("/", async c => { + const email = await new EmailModel(c).build({ + content, + locale: "en", + subject: "Hi", + to: "user@example.com", + }); + + return c.json(email); + }); + + const res = await app.request("/"); + + expect(res.status).toBe(200); + expect(content).toHaveBeenCalledOnce(); + expect(content.mock.calls[0]?.[0].templateProps).toMatchObject({ + logo, + tailwindConfig, + }); + }); +}); diff --git a/packages/vitnode/src/api/models/email.ts b/packages/vitnode/src/api/models/email.ts index e20f4a2ce5..bbc19b3c71 100644 --- a/packages/vitnode/src/api/models/email.ts +++ b/packages/vitnode/src/api/models/email.ts @@ -153,6 +153,7 @@ export class EmailModel { url: CONFIG.web.href, }, logo: core.email?.logo, + tailwindConfig: core.email?.tailwindConfig, }, user, }); diff --git a/packages/vitnode/src/components/ui/calendar.tsx b/packages/vitnode/src/components/ui/calendar.tsx index a7089680e7..391036f580 100644 --- a/packages/vitnode/src/components/ui/calendar.tsx +++ b/packages/vitnode/src/components/ui/calendar.tsx @@ -13,7 +13,12 @@ import { getDefaultClassNames, type WeekNumber, } from "react-day-picker"; -import { useLocale, useTranslations } from "use-intl"; +import { + type DateTimeFormatOptions, + useFormatter, + useLocale, + useTranslations, +} from "use-intl"; import { type ButtonProps, buttonVariants } from "./button"; import { getFirstDayOfWeek, toDateString } from "./calendar-utils"; @@ -96,10 +101,13 @@ const Calendar = ({ }: CalendarProps) => { const t = useTranslations("core.global.calendar"); const intlLocale = useLocale(); + const format = useFormatter(); const defaultClassNames = getDefaultClassNames(); const followsIntlLocale = !locale; - const formatIntl = (date: Date, options: Intl.DateTimeFormatOptions) => - new Intl.DateTimeFormat(intlLocale, options).format(date); + const calendarTimeZone = + props.timeZone ?? new Intl.DateTimeFormat().resolvedOptions().timeZone; + const formatIntl = (date: Date, options: DateTimeFormatOptions) => + format.dateTime(date, { ...options, timeZone: calendarTimeZone }); const formatCaption = (month: Date) => formatIntl(month, { month: "long", year: "numeric" }); diff --git a/packages/vitnode/src/content/admin/spec.test.ts b/packages/vitnode/src/content/admin/spec.test.ts index fcbc97319f..5a936ea33e 100644 --- a/packages/vitnode/src/content/admin/spec.test.ts +++ b/packages/vitnode/src/content/admin/spec.test.ts @@ -442,6 +442,40 @@ describe("buildFormSchemaFromSpec", () => { expect(result.success).toBe(true); }); + it("opens a required rich text field on an empty paragraph, still refused as empty", () => { + // `{}` is what a create form started from before - the editor cannot open + // it and the "is empty" rule can never accept it, so the save never fired. + const richSchema = buildFormSchemaFromSpec( + buildContentFormSpec({ + definition: defineContentType({ + id: "test.rich", + tableName: "test_rich", + fields: { + title: field.text({ required: true }), + body: field.richText({ required: true }), + notes: field.richText({ nullable: true }), + }, + admin: { + titleField: "title", + form: { fields: ["title", "body", "notes"] }, + }, + }), + labelEnum, + labelField, + pluginId: "@vitnode/example", + }), + ); + const json = z.toJSONSchema(richSchema, { io: "input" }); + + expect(json.properties?.body).toMatchObject({ + default: { content: [{ type: "paragraph" }], type: "doc" }, + }); + expect(json.properties?.notes).not.toHaveProperty("default"); + expect(richSchema.safeParse({ title: "Hello" }).error?.issues).toEqual([ + expect.objectContaining({ message: "Body is empty.", path: ["body"] }), + ]); + }); + it("accepts null only for nullable fields", () => { expect( schema.safeParse({ category: REF, excerpt: null, title: "Hello" }) diff --git a/packages/vitnode/src/content/admin/spec.ts b/packages/vitnode/src/content/admin/spec.ts index 51b51e842c..fa218feda2 100644 --- a/packages/vitnode/src/content/admin/spec.ts +++ b/packages/vitnode/src/content/admin/spec.ts @@ -435,12 +435,16 @@ const richTextFormSchema = (spec: ContentFormFieldSpec): z.ZodType => { }); return spec.required && !spec.nullable - ? doc.refine( - value => isRichTextDocument(value) && !isRichTextEmpty(value), - { + ? doc + // Without it a create form starts from `{}`, which the editor cannot + // open and the refine below can never accept. + .default(() => ({ + content: [{ type: "paragraph" }], + type: "doc" as const, + })) + .refine(value => isRichTextDocument(value) && !isRichTextEmpty(value), { message: `${spec.label} is empty.`, - }, - ) + }) : doc; }; diff --git a/packages/vitnode/src/content/server/public-permissions.ts b/packages/vitnode/src/content/server/public-permissions.ts index ff1621cf55..8e17d4d80e 100644 --- a/packages/vitnode/src/content/server/public-permissions.ts +++ b/packages/vitnode/src/content/server/public-permissions.ts @@ -124,7 +124,9 @@ export const resolveContentViewerPermissions = async ( /** * `GET /{publicApi.path}/permissions?ids=1,2,3`: what the current visitor may * do with each record, as `can*` flags. Mounted for content types with - * `publicWrite.update` or `reports`. Personal, so never cached. + * `publicWrite.update` or `reports`. At most `CONTENT_PUBLIC_MAX_PAGE_SIZE` + * distinct ids per request - `useContentPermissions` batches for you. + * Personal, so never cached. */ export const contentPermissionsRoute = < TDefinition extends AnyContentTypeDefinition, diff --git a/packages/vitnode/src/content/server/thread.ts b/packages/vitnode/src/content/server/thread.ts index 652dc8e53c..515d5aa549 100644 --- a/packages/vitnode/src/content/server/thread.ts +++ b/packages/vitnode/src/content/server/thread.ts @@ -5,7 +5,7 @@ import type { } from "drizzle-orm/pg-core"; import type { Context } from "hono"; -import { and, asc, count, eq, gt, inArray, isNull, or } from "drizzle-orm"; +import { and, asc, count, eq, gt, inArray, isNull, or, sql } from "drizzle-orm"; import type { ContentId } from "../ids"; import type { AnyContentTypeDefinition } from "../types"; @@ -173,24 +173,35 @@ export interface ContentThreadPage<TRecord> { export const CONTENT_THREAD_MAX_NODES = 500; -const encodeCursor = (createdAt: Date, id: ContentId): string => - Buffer.from(JSON.stringify([createdAt.toISOString(), id])).toString( - "base64url", - ); +/** + * Where a page ends. `createdAt` is the column's own `::text`: Postgres keeps + * microseconds and a `Date` only milliseconds, so a cursor built from a `Date` + * sorts before its own row and the next page would repeat it. + */ +interface ThreadPosition { + createdAt: string; + id: ContentId; +} -const decodeCursor = ( - cursor: string | undefined, -): null | { createdAt: Date; id: ContentId } => { +/** A `timestamp::text` or an ISO string - anything else never reaches the cast. */ +const TIMESTAMP_TEXT = + /^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}(?:\.\d{1,6})?(?:Z|[+-]\d{2}(?::?\d{2})?)?$/; + +const encodeCursor = ({ createdAt, id }: ThreadPosition): string => + Buffer.from(JSON.stringify([createdAt, id])).toString("base64url"); + +const decodeCursor = (cursor: string | undefined): null | ThreadPosition => { if (!cursor) return null; try { const [createdAt, id] = JSON.parse( Buffer.from(cursor, "base64url").toString("utf8"), ) as [unknown, unknown]; - const date = typeof createdAt === "string" ? new Date(createdAt) : null; - if (!date || Number.isNaN(date.getTime())) return null; + if (typeof createdAt !== "string" || !TIMESTAMP_TEXT.test(createdAt)) { + return null; + } if (typeof id !== "number" && typeof id !== "string") return null; - return { createdAt: date, id }; + return { createdAt, id }; } catch { return null; } @@ -198,6 +209,7 @@ const decodeCursor = ( interface NodeRow extends Record<string, unknown> { createdAt: Date; + createdAtText: string; hiddenAt?: Date | null; id: ContentId; parent: ContentId | null; @@ -242,6 +254,7 @@ export const readContentThread = async < const nodeSelection = { createdAt: columns.createdAt, + createdAtText: sql<string>`${columns.createdAt}::text`, id: columns.id, parent: parentColumn, publishedAt: columns.publishedAt, @@ -250,16 +263,17 @@ export const readContentThread = async < }; const topLevel = and(eq(rootColumn, root), isNull(parentColumn)); - const after_ = (position: null | { createdAt: Date; id: ContentId }) => - position - ? or( - gt(columns.createdAt, position.createdAt), - and( - eq(columns.createdAt, position.createdAt), - gt(columns.id, position.id), - ), - ) - : undefined; + const after_ = (position: null | ThreadPosition) => { + if (!position) return undefined; + // Cast back to the column's own type, so Postgres parses it at the + // precision it stored. + const createdAt = sql`${position.createdAt}::${sql.raw(columns.createdAt.getSQLType())}`; + + return or( + gt(columns.createdAt, createdAt), + and(eq(columns.createdAt, createdAt), gt(columns.id, position.id)), + ); + }; /** * A top-level reply that is not public earns a place on the page only when @@ -301,7 +315,7 @@ export const readContentThread = async < const last = batch.at(-1); if (!last || batch.length <= first) break; - position = { createdAt: last.createdAt, id: last.id }; + position = { createdAt: last.createdAtText, id: last.id }; } return collected; @@ -397,7 +411,9 @@ export const readContentThread = async < return { items, pageInfo: { - endCursor: last ? encodeCursor(last.createdAt, last.id) : null, + endCursor: last + ? encodeCursor({ createdAt: last.createdAtText, id: last.id }) + : null, hasNextPage, totalCount: topTotal?.value ?? 0, }, diff --git a/packages/vitnode/src/framework/vite/optimize-deps.ts b/packages/vitnode/src/framework/vite/optimize-deps.ts index 46d3d9e0a6..a8e5aadf02 100644 --- a/packages/vitnode/src/framework/vite/optimize-deps.ts +++ b/packages/vitnode/src/framework/vite/optimize-deps.ts @@ -78,7 +78,6 @@ export const VITNODE_CLIENT_DEPENDENCIES = [ "react-colorful", "react-day-picker", "react-resizable-panels", - "react-scan", "sanitize-html", "sonner", "use-debounce", diff --git a/packages/vitnode/src/tanstack/admin/staff/edit-route.test.ts b/packages/vitnode/src/tanstack/admin/staff/edit-route.test.ts new file mode 100644 index 0000000000..a5590add62 --- /dev/null +++ b/packages/vitnode/src/tanstack/admin/staff/edit-route.test.ts @@ -0,0 +1,43 @@ +import type { QueryClient } from "@tanstack/react-query"; + +import { describe, expect, it } from "vitest"; + +import { MAX_NAMESPACES } from "../../i18n/query"; +import { loadStaffPermissionLabels } from "./edit-route"; + +describe("loadStaffPermissionLabels", () => { + it("keeps one plugin's labels when two chunks each carry part of it", async () => { + const scopeKey = "newsroom.moderation.category.label"; + const filler = Array.from( + { length: MAX_NAMESPACES - 1 }, + (_, index) => `filler${index}`, + ); + const queryClient = { + query: async ({ queryKey }: { queryKey: readonly unknown[] }) => { + await Promise.resolve(); + + return { + locale: "en", + messages: queryKey.includes(scopeKey) + ? { + newsroom: { moderation: { category: { label: "Categories" } } }, + } + : { newsroom: { title: "Newsroom" } }, + }; + }, + } as unknown as QueryClient; + + const labels = await loadStaffPermissionLabels({ + keys: ["newsroom", ...filler, scopeKey], + locale: "en", + queryClient, + }); + + expect(labels).toEqual({ + newsroom: { + moderation: { category: { label: "Categories" } }, + title: "Newsroom", + }, + }); + }); +}); diff --git a/packages/vitnode/src/tanstack/admin/staff/edit-route.tsx b/packages/vitnode/src/tanstack/admin/staff/edit-route.tsx index 2b7ffee5fa..0da104e3b6 100644 --- a/packages/vitnode/src/tanstack/admin/staff/edit-route.tsx +++ b/packages/vitnode/src/tanstack/admin/staff/edit-route.tsx @@ -16,6 +16,7 @@ import type { AdminStaffRow, } from "@/views/admin/views/core/staff/staff-query"; +import { deepMerge } from "@/lib/i18n/deep-merge"; import { adminStaffPermissions } from "@/views/admin/views/core/shared/admin-permissions"; import { buildStaffPermissionGroups, @@ -51,14 +52,15 @@ export const loadStaffPermissionLabels = async ({ locale: string; queryClient: QueryClient; }): Promise<Record<string, unknown>> => { - const merged: Record<string, unknown> = {}; + let merged: Record<string, unknown> = {}; for (const namespaces of chunkStaffLabelKeys(keys, MAX_NAMESPACES)) { const intl = await queryClient.query({ ...intlQueryOptions({ locale, namespaces }), staleTime: "static", }); - Object.assign(merged, intl.messages); + // Deep: two chunks can each carry part of one plugin's root object. + merged = deepMerge(merged, intl.messages); } return merged; diff --git a/packages/vitnode/src/tanstack/content/permissions.test.ts b/packages/vitnode/src/tanstack/content/permissions.test.ts new file mode 100644 index 0000000000..87a68c16bb --- /dev/null +++ b/packages/vitnode/src/tanstack/content/permissions.test.ts @@ -0,0 +1,42 @@ +import { describe, expect, it } from "vitest"; + +import { contentPermissionBatches } from "./permissions"; + +const range = (from: number, to: number) => + Array.from({ length: to - from + 1 }, (_, index) => from + index); + +describe("contentPermissionBatches", () => { + it.each<[string, (number | string)[], number, (number | string)[][]]>([ + ["nothing for no ids", [], 50, []], + ["repeated numbers once", [3, 1, 3, 2, 1], 50, [[1, 2, 3]]], + ["repeated strings once", ["b", "a", "b"], 50, [["a", "b"]]], + [ + "caller order across batches, each batch sorted as strings", + [9, 10, 3, 1, 2], + 2, + [[10, 9], [1, 3], [2]], + ], + ])("returns %s", (_label, ids, size, expected) => { + expect(contentPermissionBatches(ids, size)).toStrictEqual(expected); + }); + + it("cuts 120 ids into batches of 50, 50 and 20", () => { + const batches = contentPermissionBatches(range(1, 120)); + + expect(batches.map(batch => batch.length)).toStrictEqual([50, 50, 20]); + expect(batches.flat().toSorted((a, b) => a - b)).toStrictEqual( + range(1, 120), + ); + }); + + it("leaves earlier full batches untouched when ids are appended", () => { + const before = contentPermissionBatches(range(1, 100)); + const after = contentPermissionBatches([ + ...range(1, 100), + ...range(101, 130), + ]); + + expect(after.slice(0, 2)).toStrictEqual(before); + expect(after[2]).toHaveLength(30); + }); +}); diff --git a/packages/vitnode/src/tanstack/content/permissions.test.tsx b/packages/vitnode/src/tanstack/content/permissions.test.tsx new file mode 100644 index 0000000000..efc6f6adb1 --- /dev/null +++ b/packages/vitnode/src/tanstack/content/permissions.test.tsx @@ -0,0 +1,140 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { act, renderHook, waitFor } from "@testing-library/react"; +import { describe, expect, it } from "vitest"; + +import type { ContentPermissionsResponse } from "./permissions"; + +import { sessionQueryOptions } from "../auth/session-query"; +import { useContentPermissions } from "./permissions"; + +interface Call { + ids: number[]; + reject: () => void; + resolve: () => void; +} + +const range = (from: number, to: number) => + Array.from({ length: to - from + 1 }, (_, index) => from + index); + +/** A `fetch` whose calls stay open until the test settles them. */ +const deferredFetch = () => { + const calls: Call[] = []; + let inFlight = 0; + let maxInFlight = 0; + + const fetch = async (ids: number[]) => + await new Promise<ContentPermissionsResponse<number>>((resolve, reject) => { + inFlight++; + maxInFlight = Math.max(maxInFlight, inFlight); + calls.push({ + ids, + reject: () => { + inFlight--; + reject(new Error("Loading permissions failed.")); + }, + resolve: () => { + inFlight--; + resolve({ + items: ids.map(id => ({ + canEdit: id % 2 === 0, + canReport: true, + id, + })), + }); + }, + }); + }); + + return { calls, fetch, maxInFlight: () => maxInFlight }; +}; + +const mount = ( + ids: number[], + fetch: (ids: number[]) => Promise<ContentPermissionsResponse<number>>, +) => { + const queryClient = new QueryClient(); + queryClient.setQueryData(sessionQueryOptions().queryKey, { user: null }); + + return renderHook( + () => useContentPermissions({ fetch, ids, queryKey: ["posts"] }), + { + wrapper: ({ children }) => ( + <QueryClientProvider client={queryClient}> + {children} + </QueryClientProvider> + ), + }, + ); +}; + +describe("useContentPermissions", () => { + it("asks for every id once, 50 per call and 3 calls at a time", async () => { + const ids = range(1, 230); + const { calls, fetch, maxInFlight } = deferredFetch(); + const { result } = mount(ids, fetch); + + await waitFor(() => { + expect(calls).toHaveLength(3); + }); + expect(result.current.isPending).toBe(true); + expect(result.current.of(2)).toStrictEqual({ + canEdit: false, + canReport: false, + }); + + for (let settled = 0; settled < 5; settled++) { + await waitFor(() => { + expect(calls.length).toBeGreaterThan(settled); + }); + act(() => { + calls[settled].resolve(); + }); + } + + await waitFor(() => { + expect(result.current.isPending).toBe(false); + }); + expect(calls).toHaveLength(5); + expect(maxInFlight()).toBe(3); + expect(Math.max(...calls.map(call => call.ids.length))).toBe(50); + expect( + calls.flatMap(call => call.ids).toSorted((a, b) => a - b), + ).toStrictEqual(ids); + expect(result.current.isError).toBe(false); + expect([2, 3, 228, 229].map(id => result.current.of(id))).toStrictEqual([ + { canEdit: true, canReport: true }, + { canEdit: false, canReport: true }, + { canEdit: true, canReport: true }, + { canEdit: false, canReport: true }, + ]); + }); + + it("reads a failed batch as all false and keeps the others", async () => { + const { calls, fetch } = deferredFetch(); + const { result } = mount(range(1, 120), fetch); + + await waitFor(() => { + expect(calls).toHaveLength(3); + }); + act(() => { + calls[0].resolve(); + calls[1].reject(); + calls[2].resolve(); + }); + + await waitFor(() => { + expect(result.current.isPending).toBe(false); + }); + expect(result.current.isError).toBe(true); + const [failed] = calls[1].ids; + const [answered] = calls[2].ids.filter(id => id % 2 === 0); + expect(result.current.of(failed)).toStrictEqual({ + canEdit: false, + canReport: false, + }); + expect(result.current.of(answered)).toStrictEqual({ + canEdit: true, + canReport: true, + }); + }); +}); diff --git a/packages/vitnode/src/tanstack/content/permissions.ts b/packages/vitnode/src/tanstack/content/permissions.ts index f5cdbc5be4..eae44738b0 100644 --- a/packages/vitnode/src/tanstack/content/permissions.ts +++ b/packages/vitnode/src/tanstack/content/permissions.ts @@ -1,8 +1,10 @@ -import type { QueryKey } from "@tanstack/react-query"; +import type { QueryKey, UseQueryResult } from "@tanstack/react-query"; -import { useQuery } from "@tanstack/react-query"; +import { useQueries } from "@tanstack/react-query"; import React from "react"; +import { CONTENT_PUBLIC_MAX_PAGE_SIZE } from "@/content/const"; + import { useSessionQuery } from "../auth/session-query"; /** @@ -26,17 +28,93 @@ const NO_PERMISSIONS: ContentPermissions = { canReport: false, }; +/** Batches in flight at once for one hook. */ +const MAX_CONCURRENT_BATCHES = 3; + +/** + * `ids` without duplicates, in the order given, cut into batches the + * permissions route accepts. Each batch is sorted, so the same records keep + * the same query key, and appending ids leaves the earlier batches - and their + * cached answers - alone. + */ +export const contentPermissionBatches = <TId extends number | string>( + ids: readonly TId[], + size: number = CONTENT_PUBLIC_MAX_PAGE_SIZE, +): TId[][] => { + const seen = new Set<string>(); + const unique = ids.filter(id => { + const key = String(id); + if (seen.has(key)) return false; + seen.add(key); + + return true; + }); + const batches: TId[][] = []; + for (let start = 0; start < unique.length; start += size) { + batches.push( + unique + .slice(start, start + size) + .sort((a, b) => String(a).localeCompare(String(b))), + ); + } + + return batches; +}; + +/** Runs at most `max` tasks at once; the rest wait their turn in order. */ +const createLimiter = (max: number) => { + let active = 0; + const waiting: (() => void)[] = []; + + return async <T>(task: () => Promise<T>): Promise<T> => { + if (active < max) { + active++; + } else { + // The finishing task hands its slot over, so `active` never exceeds `max`. + await new Promise<void>(resolve => { + waiting.push(resolve); + }); + } + + try { + return await task(); + } finally { + const next = waiting.shift(); + if (next) next(); + else active--; + } + }; +}; + +const combineBatches = <TId extends number | string>( + results: UseQueryResult<ContentPermissionsResponse<TId>>[], +) => ({ + byId: new Map( + results.flatMap(result => + (result.data?.items ?? []).map(item => [String(item.id), item] as const), + ), + ), + isError: results.some(result => result.isError), + isPending: results.some(result => result.isPending), +}); + /** * Asks the Content Engine what the signed-in visitor may do with some records - * - one detail page or a whole list in one request - so a page never compares - * author ids or guesses moderator rights. Every answer starts with `can`, and - * a record not answered yet, or left out, reads as all `false`. + * - one detail page or a whole thread - so a page never compares author ids or + * guesses moderator rights. Every answer starts with `can`, and a record not + * answered yet, left out by the server or in a failed batch reads as all + * `false`. * - * Browser-only: it waits for the session, and it refetches when somebody signs - * in or out, so a cached page still shows each visitor their own buttons. Write - * the `fetcher` call inline in `fetch`, so the route stays typed. The - * `queryKey` prefix is the list's, so invalidating the list after a write - * refreshes the permissions too. + * Any number of `ids` works: duplicates are dropped and the rest go out in + * batches of `CONTENT_PUBLIC_MAX_PAGE_SIZE` (50), the route's limit, at most + * three at a time. Each batch is its own query, so ids appended by "Load more" + * only fetch their own batches. + * + * Browser-only: it waits for the session, and the user id is part of every + * query key, so a cached page still shows each visitor their own buttons and + * signing in or out asks again. Write the `fetcher` call inline in `fetch`, so + * the route stays typed. The `queryKey` prefix is the list's, so invalidating + * the list after a write refreshes the permissions too. * * @example * ```tsx @@ -68,47 +146,48 @@ export const useContentPermissions = <TId extends number | string>({ ids, queryKey, }: { - /** Calls `GET /{publicApi.path}/permissions` with `ids` joined by commas. */ + /** + * Calls `GET /{publicApi.path}/permissions` with `ids` joined by commas. + * Gets at most 50 ids per call. Throw on anything but `200`. + */ fetch: (ids: TId[]) => Promise<ContentPermissionsResponse<TId>>; - /** The records on screen, at most 50. */ + /** The records on screen, any number and in any order. */ ids: readonly TId[]; /** The prefix of the content type's queries, e.g. `[manifest.id, "discussions"]`. */ queryKey: QueryKey; }) => { const session = useSessionQuery(); const userId = session.data?.user?.id ?? null; - const unique = [...new Set(ids)].sort((a, b) => - String(a).localeCompare(String(b)), - ); + const [limit] = React.useState(() => createLimiter(MAX_CONCURRENT_BATCHES)); - const query = useQuery({ - enabled: !session.isPending && unique.length > 0, - queryFn: async () => await fetch(unique), - queryKey: [...queryKey, "permissions", { ids: unique, userId }], - retry: false, + const batches = useQueries({ + combine: combineBatches<TId>, + queries: contentPermissionBatches(ids).map(batch => ({ + enabled: !session.isPending, + queryFn: async () => await limit(async () => await fetch(batch)), + queryKey: [...queryKey, "permissions", { ids: batch, userId }], + retry: false, + })), }); - const byId = React.useMemo( - () => new Map(query.data?.items.map(item => [String(item.id), item])), - [query.data], - ); - - // Stable until the answer changes, so memoized rows that receive it skip + // Stable until an answer changes, so memoized rows that receive it skip // re-rendering. const of = React.useCallback( (id: TId): ContentPermissions => { - const item = byId.get(String(id)); + const item = batches.byId.get(String(id)); return item ? { canEdit: item.canEdit, canReport: item.canReport } : NO_PERMISSIONS; }, - [byId], + [batches.byId], ); return { - /** `true` until the first answer arrives. */ - isPending: query.isPending, + /** `true` when a batch failed; its records read as all `false`. */ + isError: batches.isError, + /** `true` while the session or any batch waits for its first answer. */ + isPending: session.isPending || batches.isPending, /** The permissions of one record, all `false` until known. */ of, }; diff --git a/packages/vitnode/src/tanstack/content/public-write.tsx b/packages/vitnode/src/tanstack/content/public-write.tsx index 5f9323a6eb..da650bdf22 100644 --- a/packages/vitnode/src/tanstack/content/public-write.tsx +++ b/packages/vitnode/src/tanstack/content/public-write.tsx @@ -59,22 +59,36 @@ const versionOf = (record: unknown): number | undefined => { * * - `400`: each issue on a field in `fields` shows under that field; anything * else, and every other refusal (`401`, `403`, `404`, `429`), is one toast. - * Messages come from core and follow the reader's language. - * - `409 CONTENT_UNIQUE_CONFLICT` shows under `uniqueField`. + * Messages come from `core.global.content_write` and follow the reader's + * language. + * - `409 CONTENT_UNIQUE_CONFLICT` shows under `uniqueField`, or as a toast. * - `409 CONTENT_VERSION_CONFLICT` shows `conflict`: an alert that keeps the - * form as it is and offers "Keep my version" and "Load latest version". + * form as it is and offers "Keep my version" (with `latestVersion`) and + * "Load latest version", which reloads the page and drops unsaved input. * * For an edit, pass `version` and `latestVersion`, and send `expectedVersion` * from the `request` argument: the hook keeps it current after every save and - * after "Keep my version". Browser-only. + * after "Keep my version". `version` is read once, so remount the form (with a + * `key`) for another record. + * + * On success it only returns the record. Success messages, a pending + * `approval`, `form.reset`, cache invalidation and navigation stay with the + * caller. Browser-only. * * @example * ```tsx + * import type { AutoFormOnSubmit } from "@vitnode/core/components/form/auto-form"; + * * import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; + * import { fetcher } from "@vitnode/core/tanstack/fetcher"; * * const write = useContentPublicWrite({ * fields: ["title", "body"], - * latestVersion: async () => (await loadEditable(id))?.version ?? null, + * latestVersion: async () => { + * const res = await fetchEditable(record.id); // GET /{id}/edit + * + * return res.status === 200 ? (await res.json()).version : null; + * }, * uniqueField: "title", * version: record.version, * }); @@ -86,10 +100,13 @@ const versionOf = (record: unknown): number | undefined => { * method: "patch", * module: "content/discussions", * path: "/{id}", - * args: { params: { id }, body: { values, expectedVersion } }, + * args: { params: { id: record.id }, body: { values, expectedVersion } }, * }), * ); - * if (updated) toast.success(t("saved")); + * if (!updated) return; + * + * form.reset(values); + * toast.success(t(updated.approval?.status === "pending" ? "pending" : "saved")); * }; * * <>{write.conflict}<AutoForm onSubmit={onSubmit} ... /></>; @@ -112,7 +129,7 @@ export const useContentPublicWrite = < latestVersion?: () => Promise<null | number>; /** Where "already taken" shows on a unique conflict, e.g. the slug's source field. */ uniqueField?: string; - /** The version the form opened with. Leave it out for a create. */ + /** The version the form opened with, read on the first render. Leave it out for a create. */ version?: TVersion; }) => { const t = useTranslations("core.global.content_write"); @@ -246,7 +263,10 @@ export const useContentPublicWrite = < return { /** The version-conflict alert, or `null`. Render it above the form. */ conflict, - /** Sends a write through `request` and returns the record on success, `null` otherwise. */ + /** + * Sends a write through `request` - given the current `expectedVersion` - + * and returns the record on a `2xx`, or `null` after showing why not. + */ submit, }; }; diff --git a/packages/vitnode/src/tests/memory-db.ts b/packages/vitnode/src/tests/memory-db.ts index 88a93141ce..dd6efc43ac 100644 --- a/packages/vitnode/src/tests/memory-db.ts +++ b/packages/vitnode/src/tests/memory-db.ts @@ -454,6 +454,9 @@ const evaluate = ( if (["bigint", "int", "integer", "numeric"].includes(node.to)) { return Number(value); } + if (node.to === "timestamp" || node.to === "timestamptz") { + return value instanceof Date ? value : new Date(textOf(value)); + } if (node.to === "jsonb") { return typeof value === "string" ? JSON.parse(value) : value; } diff --git a/packages/vitnode/src/tests/setup.ts b/packages/vitnode/src/tests/setup.ts index a1201e0c5a..ed8bcee22a 100644 --- a/packages/vitnode/src/tests/setup.ts +++ b/packages/vitnode/src/tests/setup.ts @@ -18,6 +18,8 @@ vi.mock("use-intl", async importOriginal => { return { ...actual, + useFormatter: () => + actual.createFormatter({ locale: "en", timeZone: "UTC" }), useLocale: () => "en", useTranslations, }; diff --git a/packages/vitnode/src/views/layouts/providers.tsx b/packages/vitnode/src/views/layouts/providers.tsx index d986e97e19..1dc901f0fc 100644 --- a/packages/vitnode/src/views/layouts/providers.tsx +++ b/packages/vitnode/src/views/layouts/providers.tsx @@ -11,13 +11,12 @@ import { LogoVitNodeBrand } from "@/components/logo-vitnode"; import { ThemeProvider } from "@/components/theme-provider"; import { Toaster } from "@/components/ui/sonner"; import { TooltipProvider } from "@/components/ui/tooltip"; -import { CONFIG } from "@/lib/config"; import { RateLimitListener } from "./rate-limit-listener"; export interface VitNodeProvidersConfig extends Pick< VitNodeConfig, - "debug" | "editor" | "logo" | "theme" + "editor" | "logo" | "theme" > { locales: LocaleConfig[]; } @@ -25,7 +24,7 @@ export interface VitNodeProvidersConfig extends Pick< export const VitNodeProviders = ({ children, toaster, - config: { debug, editor, locales, logo: Logo = LogoVitNodeBrand, theme }, + config: { editor, locales, logo: Logo = LogoVitNodeBrand, theme }, }: { children: React.ReactNode; config: VitNodeProvidersConfig; @@ -33,13 +32,6 @@ export const VitNodeProviders = ({ }) => { const logo = React.useMemo(() => <Logo />, [Logo]); - React.useEffect(() => { - // oxlint-disable-next-line react-you-might-not-need-an-effect/no-event-handler - if (!(debug && CONFIG.node_development)) return; - - void import("react-scan").then(({ scan }) => scan({ enabled: true })); - }, [debug]); - return ( <ThemeProvider attribute="class" diff --git a/packages/vitnode/src/vitnode.config.ts b/packages/vitnode/src/vitnode.config.ts index b5b9095936..c9d750b893 100644 --- a/packages/vitnode/src/vitnode.config.ts +++ b/packages/vitnode/src/vitnode.config.ts @@ -44,8 +44,6 @@ export type { LocaleConfig }; export interface VitNodeConfig< AppLocales extends LocaleConfig[] = LocaleConfig[], > { - /** Starts `react-scan` render highlighting in development. Ignored in production. */ - debug?: boolean; /** Editor settings shared by every `Editor` in the app. */ editor?: VitNodeEditorConfig; /** Languages and locale routing. */ diff --git a/plugins/example/src/admin/content.tsx b/plugins/example/src/admin/content.tsx deleted file mode 100644 index 54c3d6d1a5..0000000000 --- a/plugins/example/src/admin/content.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import type { ContentFrontendPluginSource } from "@vitnode/core/lib/plugin"; - -import { manifest } from "@/manifest.gen"; - -import { - exampleArticleNav, - exampleBoardsNav, - exampleCategoryNav, - exampleDiscussionNav, - exampleEventNav, - examplePageNav, - exampleTagNav, -} from "./nav"; - -export const adminContent = { - pluginId: manifest.id, - containers: [exampleBoardsNav], - contentTypes: [ - exampleArticleNav, - exampleCategoryNav, - examplePageNav, - exampleTagNav, - exampleEventNav, - exampleDiscussionNav, - ], -} satisfies ContentFrontendPluginSource; diff --git a/plugins/example/src/admin/nav.tsx b/plugins/example/src/admin/nav.tsx deleted file mode 100644 index a9edbc91e9..0000000000 --- a/plugins/example/src/admin/nav.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import type { AdminNavPluginSource } from "@vitnode/core/lib/plugin"; - -import { - CalendarDaysIcon, - FlaskConicalIcon, - FolderIcon, - FolderTreeIcon, - LayoutTemplateIcon, - MessagesSquareIcon, - NotebookPenIcon, - TagIcon, -} from "lucide-react"; - -import { articleContentType } from "@/content/article"; -import { boardContainers } from "@/content/boards"; -import { categoryContentType } from "@/content/category"; -import { discussionContentType } from "@/content/discussion"; -import { eventContentType } from "@/content/event"; -import { pageContentType } from "@/content/page"; -import { tagContentType } from "@/content/tag"; -import { manifest } from "@/manifest.gen"; - -/** The article content type, as the sidebar reads it. */ -export const exampleArticleNav = { - definition: articleContentType, - icon: <NotebookPenIcon />, -}; - -/** The category content type, likewise. */ -export const exampleCategoryNav = { - definition: categoryContentType, - icon: <FolderIcon />, -}; - -export const examplePageNav = { - definition: pageContentType, - icon: <LayoutTemplateIcon />, -}; - -export const exampleTagNav = { - definition: tagContentType, - icon: <TagIcon />, -}; - -export const exampleEventNav = { - definition: eventContentType, - icon: <CalendarDaysIcon />, -}; - -export const exampleDiscussionNav = { - definition: discussionContentType, - icon: <MessagesSquareIcon />, -}; - -export const exampleBoardsNav = { - definition: boardContainers, - icon: <FolderTreeIcon />, -}; - -export const adminNav = { - pluginId: manifest.id, - containers: [exampleBoardsNav], - contentTypes: [ - exampleArticleNav, - exampleCategoryNav, - examplePageNav, - exampleTagNav, - exampleEventNav, - exampleDiscussionNav, - ], - admin: { - nav: [ - { - href: "/admin/example", - icon: <FlaskConicalIcon />, - id: "overview", - }, - ], - }, -} satisfies AdminNavPluginSource; diff --git a/plugins/example/src/api/modules/admin/admin.module.ts b/plugins/example/src/api/modules/admin/admin.module.ts deleted file mode 100644 index 60321a240b..0000000000 --- a/plugins/example/src/api/modules/admin/admin.module.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { buildContentAdminModule, buildModule } from "@/api/builders"; -import { boardContainers } from "@/content/boards"; -import { advancedArticleContent } from "@/database/advanced-articles"; -import { articleContent } from "@/database/articles"; -import { categoryContent } from "@/database/categories"; -import { discussionContent } from "@/database/discussions"; -import { eventContent } from "@/database/events"; -import { localizedArticleContent } from "@/database/localized-articles"; -import { pageContent } from "@/database/pages"; -import { tagContent } from "@/database/tags"; - -export const adminModule = buildModule({ - name: "admin", - routes: [], - modules: [ - buildContentAdminModule({ - containers: [boardContainers], - // The localized article is registered on the API side only, so its - // generated CRUD *and* translation routes exist and its staff permissions - // are derived - but it gets no AdminCP screen yet, because a form that - // could not edit `title` in any language would be a worse thing to ship - // than no form at all. Registering it in `config.tsx` alongside the - // others is what would give it one. - contentTypes: [ - advancedArticleContent, - articleContent, - categoryContent, - discussionContent, - eventContent, - localizedArticleContent, - pageContent, - tagContent, - ], - }), - ], -}); diff --git a/plugins/example/src/config.api.ts b/plugins/example/src/config.api.ts deleted file mode 100644 index 8bf517ed84..0000000000 --- a/plugins/example/src/config.api.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { ApiPluginContract } from "@vitnode/core/api/lib/plugin"; - -import { buildApiPlugin } from "@vitnode/core/api/lib/plugin"; - -import { articleExcerptAiAction } from "@/api/ai/actions"; -import { buildContentPublicModule } from "@/api/builders"; -import { exampleCategoryScope } from "@/api/lib/moderation"; -import { adminModule } from "@/api/modules/admin/admin.module"; -import { boardContainers } from "@/content/boards"; -import { settingsPage } from "@/content/settings-page"; -import { advancedArticleContent } from "@/database/advanced-articles"; -import { articleContent } from "@/database/articles"; -import { categoryContent } from "@/database/categories"; -import { discussionContent } from "@/database/discussions"; -import { eventContent } from "@/database/events"; -import { localizedArticleContent } from "@/database/localized-articles"; -import { pageContent } from "@/database/pages"; -import { tagContent } from "@/database/tags"; -import { manifest } from "@/manifest.gen"; - -import { widgets } from "./widgets"; -import "@/api/lib/events"; - -export const exampleApiPlugin = () => - buildApiPlugin({ - manifest, - aiActions: [articleExcerptAiAction], - blocks: widgets, - editablePages: [settingsPage], - moderation: { scopes: [exampleCategoryScope] }, - permissionStaff: { - moderator: { - widgets: ["can_edit"], - }, - }, - modules: [ - adminModule, - buildContentPublicModule({ - containers: [boardContainers], - contentTypes: [ - advancedArticleContent, - articleContent, - categoryContent, - discussionContent, - eventContent, - localizedArticleContent, - pageContent, - tagContent, - ], - }), - ], - }); - -export type VitNodeApiPlugin = ApiPluginContract< - ReturnType<typeof exampleApiPlugin> ->; diff --git a/plugins/example/src/const.ts b/plugins/example/src/const.ts deleted file mode 100644 index 5a9e7d7042..0000000000 --- a/plugins/example/src/const.ts +++ /dev/null @@ -1,45 +0,0 @@ -export const EXAMPLE_MIGRATIONS = [ - "add_example_content", - "add_publication_to_example_articles", - "add_example_article_slug", - // Core, not `example_*`, but the editorial suites write revisions for an - // article - so the table has to exist before the column that needs it. - "add_content_revisions", - "add_example_article_editorial", - // Core again, for the same reason: the scheduling suites book a publication - // for an article, and the row has to have somewhere to go. - "add_content_schedules", - "add_content_schedule_effects_error", - // The Stage 5A localized fixture: a base table with only its shared field, and - // a translation table holding the localized ones. - "add_example_localized_articles", - // Stage 5B. Additive only: `languageId` arrives nullable, so every existing - // revision is a shared one, and the translation lifecycle columns arrive with - // `DEFAULT 'draft'`, so every translation written while Stage 5A was current - // becomes a draft rather than being silently published. - "add_translation_editorial", - // Stage 6: the advanced-modeling fixture. One base table with a flattened - // shared group, one translation table with a flattened localized group, two - // junction tables (one of them a self-relation) and one repeatable child - // table - each with the constraints that make its ordering and its integrity - // facts about the database rather than about the service. - "add_example_advanced_articles", - // Stage 8. Core again: `core_content_slug_history` is what makes an old public - // URL keep working, and the delivery suites write reservations for both example - // content types - so the table has to exist before either of them publishes. - "add_content_slug_history", - // The shared boolean `delivery.seo.noIndexField` reads, which drives the sitemap - // exclusion and the `robots` metadata together. Additive and defaulted, so every - // existing row becomes indexable rather than silently disappearing from a sitemap. - "add_example_article_no_index", - // The same field on `example.article`, but **nullable** - the shape an upgrade - // actually produces. `NULL` has to mean "indexable" identically in the metadata - // and in the sitemap predicate, and only a nullable column can prove it. - "add_example_article_no_index_flag", - // File fields: `example_articles.animation`, an integer foreign key into - // `core_files` with `ON DELETE RESTRICT`. Core arrives with it - - // `core_content_file_refs` is what pins the files a retained revision names - - // so the shared table has to exist before anything can reference it. - "add_content_file_fields", - "add_example_block_pages", -]; diff --git a/plugins/example/src/content/category.ts b/plugins/example/src/content/category.ts deleted file mode 100644 index 84c07500d3..0000000000 --- a/plugins/example/src/content/category.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { defineContentType, field } from "@vitnode/core/content"; - -export const categoryContentType = defineContentType({ - id: "example.category", - tableName: "example_categories", - - fields: { - name: field.text({ required: true, minLength: 1, maxLength: 100 }), - }, - - admin: { - path: "example/categories", - list: { - columns: ["name", "createdAt"], - orderableFields: ["name"], - }, - }, -}); diff --git a/plugins/example/src/database/advanced-articles.ts b/plugins/example/src/database/advanced-articles.ts deleted file mode 100644 index 85346196ea..0000000000 --- a/plugins/example/src/database/advanced-articles.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { createContentModel } from "@vitnode/core/content/server"; - -import { advancedArticleContentType } from "@/content/advanced-article"; - -import { example_categories } from "./categories"; -import { example_tags } from "./tags"; - -export const advancedArticleContent = createContentModel( - advancedArticleContentType, - { - references: { - // A to-many relation needs a reference thunk exactly as a to-one does: - // its foreign key is `related_item_id` on the generated junction table - // rather than a column on the row, but the target is just as much a fact - // this module has to supply. - categories: () => example_categories.id, - tags: () => example_tags.id, - // `relatedArticles` is deliberately absent. It is a `self: true` - // relation, and the engine resolves it from the table it is building: - // writing `() => advancedArticleContent.table.id` here would reference - // the model inside its own initializer, and TypeScript resolves that by - // widening the whole model to `any` - silently taking every typed - // service, schema and column map with it. - }, - }, -); - -// Six exports, not one. Drizzle Kit discovers each table from its export when -// it globs the built `dist/src/database/*.js`, so a junction or child table -// without one would simply be missing from the migration. -export const example_advanced_articles = advancedArticleContent.table; -export const example_advanced_articles_translations = - advancedArticleContent.translationTable; -export const example_advanced_articles_categories = - advancedArticleContent.advancedTables.junctions.categories; -export const example_advanced_articles_tags = - advancedArticleContent.advancedTables.junctions.tags; -export const example_advanced_articles_related_articles = - advancedArticleContent.advancedTables.junctions.relatedArticles; -export const example_advanced_articles_faq = - advancedArticleContent.advancedTables.repeatables.faq; diff --git a/plugins/example/src/database/categories.ts b/plugins/example/src/database/categories.ts deleted file mode 100644 index e1884d7f29..0000000000 --- a/plugins/example/src/database/categories.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createContentModel } from "@vitnode/core/content/server"; - -import { categoryContentType } from "@/content/category"; - -export const categoryContent = createContentModel(categoryContentType); - -// Drizzle Kit discovers the table from this export when it globs the built -// `dist/src/database/*.js`, so migrations stay generated and committed. -export const example_categories = categoryContent.table; diff --git a/plugins/example/src/database/discussions.ts b/plugins/example/src/database/discussions.ts deleted file mode 100644 index 83caf0f418..0000000000 --- a/plugins/example/src/database/discussions.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createContentModel } from "@vitnode/core/content/server"; - -import { discussionContentType } from "@/content/discussion"; - -export const discussionContent = createContentModel(discussionContentType); - -export const example_discussions = discussionContent.table; diff --git a/plugins/example/src/database/events.ts b/plugins/example/src/database/events.ts deleted file mode 100644 index ab8ccf4bdb..0000000000 --- a/plugins/example/src/database/events.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { createContentModel } from "@vitnode/core/content/server"; - -import { eventContentType } from "@/content/event"; - -import { example_categories } from "./categories"; -import { example_tags } from "./tags"; - -export const eventContent = createContentModel(eventContentType, { - references: { - category: () => example_categories.id, - primaryTag: () => example_tags.id, - tags: () => example_tags.id, - }, -}); - -export const example_events = eventContent.table; -export const example_events_translations = eventContent.translationTable; -export const example_events_tags = eventContent.advancedTables.junctions.tags; -export const example_events_related_events = - eventContent.advancedTables.junctions.relatedEvents; -export const example_events_gallery = - eventContent.advancedTables.junctions.gallery; -export const example_events_sessions = - eventContent.advancedTables.repeatables.sessions; diff --git a/plugins/example/src/database/localized-articles.ts b/plugins/example/src/database/localized-articles.ts deleted file mode 100644 index 07f55ab07c..0000000000 --- a/plugins/example/src/database/localized-articles.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createContentModel } from "@vitnode/core/content/server"; - -import { localizedArticleContentType } from "@/content/localized-article"; - -export const localizedArticleContent = createContentModel( - localizedArticleContentType, -); - -// Two exports for a localized content type, not one. Drizzle Kit discovers each -// table from the export when it globs the built `dist/src/database/*.js`, so the -// translation table needs its own or the migration would be generated without it. -export const example_localized_articles = localizedArticleContent.table; -export const example_localized_articles_translations = - localizedArticleContent.translationTable; diff --git a/plugins/example/src/database/tags.ts b/plugins/example/src/database/tags.ts deleted file mode 100644 index a9395b4c9e..0000000000 --- a/plugins/example/src/database/tags.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createContentModel } from "@vitnode/core/content/server"; - -import { tagContentType } from "@/content/tag"; - -import { example_categories } from "./categories"; - -export const tagContent = createContentModel(tagContentType, { - references: { category: () => example_categories.id }, -}); - -export const example_tags = tagContent.table; -export const example_tags_translations = tagContent.translationTable; -export const example_tags_related_tags = - tagContent.advancedTables.junctions.relatedTags; diff --git a/plugins/example/src/locales/en.json b/plugins/example/src/locales/en.json deleted file mode 100644 index b249ce65f7..0000000000 --- a/plugins/example/src/locales/en.json +++ /dev/null @@ -1,348 +0,0 @@ -{ - "@vitnode/example": { - "title": "Example", - "admin": { - "nav": { - "overview": "Overview" - }, - "overview": { - "title": "Example plugin", - "desc": "A plugin page inside the AdminCP, shipped by @vitnode/example and served by the app that installed it.", - "points": { - "shell": "The sidebar, the breadcrumb and the admin session guard around this page are the AdminCP's - the route declared area: \"admin\" and nothing else.", - "path": "The URL is the one the route spells out in full. An area chooses the frame; it never adds a prefix.", - "nav": "The sidebar entry that led here is a separate declaration. A plugin page may have no entry, and an entry may point anywhere." - }, - "editor": { - "title": "Editor showcase", - "desc": "Stored editor HTML rendered with EditorContent - one of everything, so a change to the tiptap extensions or to the .tiptap styles shows up here first." - }, - "form": { - "title": "Editor in a form", - "desc": "AutoFormEditor inside an AutoForm. Type / for blocks, use + for panels and tables, and press Ctrl or Cmd + Enter to save.", - "summary": { - "label": "Summary" - }, - "description": { - "label": "Description", - "desc": "Steps, logs and acceptance criteria. Nothing is stored - this form only shows what the editor sends.", - "required": "Describe what happened" - }, - "comment": { - "label": "Comment", - "placeholder": "Leave a note for the assignee…" - }, - "submit": "Save issue", - "success": { - "title": "Issue saved", - "desc": "{words, plural, one {# word} other {# words}} in the description." - } - } - } - }, - "content": { - "article": { - "label": "{count, plural, one {Article} other {Articles}}", - "title": "Articles", - "desc": "Everything the Content Engine generates, from one definition.", - "fields": { - "title": "Title", - "code": "Reference code", - "excerpt": "Excerpt", - "views": "Views", - "featured": "Featured", - "animation": "Animation", - "author": "Author", - "category": "Category", - "updatedAt": "Updated" - } - }, - "category": { - "label": "{count, plural, one {Category} other {Categories}}", - "title": "Categories", - "desc": "Group articles together.", - "fields": { - "name": "Name", - "createdAt": "Created" - } - }, - "tag": { - "label": "{count, plural, one {Tag} other {Tags}}", - "title": "Tags", - "desc": "Keyed by uuid - ids that give nothing away.", - "fields": { - "name": "Name", - "slug": "Slug", - "category": "Category", - "relatedTags": "Related tags", - "updatedAt": "Updated" - } - }, - "event": { - "label": "{count, plural, one {Event} other {Events}}", - "title": "Events", - "desc": "Keyed by bigint - ids too large for a JavaScript number arrive as exact strings.", - "fields": { - "title": "Title", - "slug": "Slug", - "body": "Description", - "primaryTag": "Main tag", - "category": "Category", - "tags": "Tags", - "relatedEvents": "Related events", - "sessions": "Sessions", - "gallery": "Gallery", - "updatedAt": "Updated" - } - }, - "discussion": { - "label": "{count, plural, one {Discussion} other {Discussions}}", - "title": "Discussions", - "desc": "Started and edited by signed-in members through the public write API.", - "fields": { - "title": "Title", - "slug": "Slug", - "body": "Message", - "author": "Author", - "publishedAt": "Published", - "updatedAt": "Updated", - "board": "Board" - } - } - }, - "containers": { - "boards": { - "label": "{count, plural, one {Board} other {Boards}}", - "title": "Boards", - "desc": "The board tree members file their discussions into. Drag to reorder or nest boards.", - "fields": { - "description": "Description", - "color": "Color", - "icon": "Icon", - "locked": "Locked" - } - } - }, - "guide": { - "title": "Plugin routing guide", - "desc": "A nested route shipped by @vitnode/example, served by the app that installed it.", - "index": { - "intro": "This page and the frame around it are two routes declared in one plugin's routes.ts. Neither was copied into the application - both are lazily imported from the plugin's own build output.", - "points": { - "nested": "A layout claims no URL; this index page claims the layout's.", - "messages": "The layout declares the messages both pages render in, so they are warmed alongside the code.", - "breadcrumb": "The breadcrumb above comes from the layout, next to the component that needs it." - } - }, - "topic": { - "from_index": "You arrived here from the guide index - the route's search contract recognised it, and everything else in the query string was dropped." - } - }, - "browse": { - "title": "Browse", - "desc": "A paginated page whose route declares an eager search schema, so ?page=999 is clamped before anything renders.", - "pagination": "Pagination", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {of}" - }, - "articles": { - "published": "Published", - "faq": "Frequently asked questions" - }, - "events": { - "sessions": "Sessions" - }, - "moderation": { - "category": { - "label": "Categories", - "desc": "Limit this permission to articles in some categories." - } - }, - "boards": { - "title": "Boards", - "desc": "Find the right place for your question, or start a new discussion.", - "tree": "All boards", - "children": "Boards inside", - "discussions": "Discussions", - "new_discussion": "New discussion", - "pagination": "Discussion pages", - "newest": "Newest discussions", - "older": "Older discussions", - "empty": { - "title": "No boards yet", - "desc": "An admin has not created any boards. Once they do, they show up here.", - "home": "Back to home" - }, - "empty_board": { - "title": "Nothing here yet", - "desc": "Be the first to start a discussion in this board." - }, - "not_found": { - "title": "Board not found", - "desc": "It may have been removed, or the link is wrong.", - "back": "See all boards" - }, - "latest": { - "title": "Latest discussions", - "all": "All discussions", - "empty": "Nothing posted yet.", - "error": "Couldn't load the latest discussions.", - "loading": "Loading discussions..." - } - }, - "discussions": { - "new": { - "title": "Start a discussion", - "desc": "Ask a question or share an idea. Everyone can read it as soon as you post it.", - "submit": "Post discussion", - "no_boards": { - "title": "No boards yet", - "desc": "Discussions live in boards, and an admin has not created one yet. Check back soon.", - "action": "Browse boards" - } - }, - "edit": { - "title": "Edit discussion", - "desc": "Changes are saved as a new revision, so nothing you replace is lost.", - "submit": "Save changes", - "view": "View discussion", - "success": { - "title": "Changes saved", - "desc": "\"{title}\" now shows your latest edits." - } - }, - "detail": { - "actions": "Discussion actions", - "edit": "Edit", - "new": "Start a discussion", - "created": { - "title": "Discussion posted", - "desc": "It is live. Use Edit whenever you want to change it." - }, - "board": "Board", - "boards": "Boards", - "posted_by": "Posted by", - "deleted_user": "Deleted user", - "report_type": "discussion", - "hidden": { - "title": "This discussion is hidden", - "desc": "A moderator hid it, so readers can't see it. You can, because you wrote it or moderate this board." - } - }, - "form": { - "board": { - "label": "Board", - "desc": "Pick where the discussion belongs. You can't move it later.", - "placeholder": "Choose a board", - "required": "Pick a board" - }, - "title": { - "label": "Title", - "min": "Use at least 3 characters", - "max": "Keep it under 200 characters" - }, - "body": { - "label": "Message", - "desc": "Type / for headings, lists and more.", - "required": "Write a message" - } - }, - "state": { - "unauthenticated": { - "title": "Sign in to continue", - "desc": "You need an account to start or edit a discussion.", - "action": "Sign in" - }, - "forbidden": { - "title": "You can't edit this discussion", - "desc": "Only its author or a moderator can change it." - }, - "not_found": { - "title": "Discussion not found", - "desc": "It may have been removed, or the link is wrong." - }, - "back": "Start a new discussion" - }, - "list": { - "title": "Discussions", - "desc": "Questions, ideas and show-and-tell from the community, newest first.", - "new": "Start a discussion", - "search_label": "Search discussions", - "search_placeholder": "Search by title", - "board_label": "Board", - "all_boards": "All boards", - "sort_label": "Sort by", - "sort": { - "newest": "Newest", - "oldest": "Oldest", - "title": "Title (A-Z)" - }, - "pagination": "Discussion pages", - "deleted_user": "Deleted user", - "empty": { - "title": "No discussions yet", - "desc": "Be the first to ask a question or share an idea." - }, - "no_results": { - "title": "No discussions match", - "desc": "Try another search term or board.", - "clear": "Clear filters" - }, - "error": { - "title": "Couldn't load discussions", - "desc": "Something went wrong on our side. Refresh the page to try again." - } - } - } - }, - "@vitnode/example:article": "Articles", - "@vitnode/example:article:can_view": "View articles", - "@vitnode/example:article:can_create": "Create articles", - "@vitnode/example:article:can_edit": "Edit articles", - "@vitnode/example:article:can_delete": "Delete articles", - "@vitnode/example:article:can_publish": "Publish and unpublish articles", - "@vitnode/example:article:can_restore": "Restore an earlier version of an article", - "@vitnode/example:category": "Categories", - "@vitnode/example:category:can_view": "View categories", - "@vitnode/example:category:can_create": "Create categories", - "@vitnode/example:category:can_edit": "Edit categories", - "@vitnode/example:category:can_delete": "Delete categories", - "@vitnode/example:tag": "Tags", - "@vitnode/example:tag:can_view": "View tags", - "@vitnode/example:tag:can_create": "Create tags", - "@vitnode/example:tag:can_edit": "Edit tags", - "@vitnode/example:tag:can_delete": "Delete tags", - "@vitnode/example:tag:can_publish": "Publish and unpublish tags", - "@vitnode/example:tag:can_restore": "Restore an earlier version of a tag", - "@vitnode/example:tag:can_hide": "Hide and unhide tags", - "@vitnode/example:event": "Events", - "@vitnode/example:event:can_view": "View events", - "@vitnode/example:event:can_create": "Create events", - "@vitnode/example:event:can_edit": "Edit events", - "@vitnode/example:event:can_delete": "Delete events", - "@vitnode/example:event:can_publish": "Publish and unpublish events", - "@vitnode/example:event:can_restore": "Restore an earlier version of an event", - "@vitnode/example:event:can_hide": "Hide and unhide events", - "@vitnode/example:discussion": "Discussions", - "@vitnode/example:discussion:can_view": "View discussions", - "@vitnode/example:discussion:can_create": "Create discussions", - "@vitnode/example:discussion:can_edit": "Edit discussions", - "@vitnode/example:discussion:can_delete": "Delete discussions", - "@vitnode/example:discussion:can_publish": "Publish and unpublish discussions", - "@vitnode/example:discussion:can_restore": "Restore an earlier version of a discussion", - "@vitnode/example:discussion:can_hide": "Hide and unhide discussions", - "@vitnode/example:example_boards": "Boards", - "@vitnode/example:example_boards:can_view": "View boards", - "@vitnode/example:example_boards:can_create": "Create boards", - "@vitnode/example:example_boards:can_edit": "Edit and move boards", - "@vitnode/example:example_boards:can_delete": "Delete boards", - "ai_actions": { - "@vitnode/example": { - "article_excerpt": { - "title": "Suggest article teaser", - "description": "Suggests a teaser for an example article." - } - } - } -} diff --git a/plugins/example/src/pages/board-search.ts b/plugins/example/src/pages/board-search.ts deleted file mode 100644 index 28dcd9f566..0000000000 --- a/plugins/example/src/pages/board-search.ts +++ /dev/null @@ -1,15 +0,0 @@ -export interface BoardSearch { - cursor?: string; -} - -const CURSOR = /^[A-Za-z0-9_-]{1,512}$/; - -export const boardSearch = (input: Record<string, unknown>): BoardSearch => - typeof input.cursor === "string" && CURSOR.test(input.cursor) - ? { cursor: input.cursor } - : {}; - -export const BOARDS_HREF = "/boards"; - -export const boardHref = (slug: string, { cursor }: BoardSearch = {}): string => - `/boards/${encodeURIComponent(slug)}${cursor ? `?cursor=${encodeURIComponent(cursor)}` : ""}`; diff --git a/plugins/example/src/pages/boards-data.ts b/plugins/example/src/pages/boards-data.ts deleted file mode 100644 index 003f0ac3cb..0000000000 --- a/plugins/example/src/pages/boards-data.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { fetcher } from "@vitnode/core/tanstack/fetcher"; - -import { manifest } from "@/manifest.gen"; - -export const fetchBoards = async () => { - const res = await fetcher({ - plugin: manifest.id, - method: "get", - module: "content/boards", - path: "/", - args: { query: {} }, - }); - - if (res.status !== 200) throw new Error("Loading the boards failed."); - - const { items } = await res.json(); - - return items; -}; - -export type Board = Awaited<ReturnType<typeof fetchBoards>>[number]; - -const HEX_COLOR = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i; - -export const boardColor = (board: Pick<Board, "metadata">): null | string => - typeof board.metadata.color === "string" && - HEX_COLOR.test(board.metadata.color) - ? board.metadata.color - : null; diff --git a/plugins/example/src/pages/discussion-list.ts b/plugins/example/src/pages/discussion-list.ts deleted file mode 100644 index 2f5a8a640b..0000000000 --- a/plugins/example/src/pages/discussion-list.ts +++ /dev/null @@ -1,95 +0,0 @@ -import type { QueryClient } from "@tanstack/react-query"; -import type { ContentListSearch } from "@vitnode/core/tanstack/content"; - -import { - contentListIdFilter, - contentListQueryOptions, - defineContentList, - useContentPermissions, -} from "@vitnode/core/tanstack/content"; -import { fetcher } from "@vitnode/core/tanstack/fetcher"; - -import { manifest } from "@/manifest.gen"; - -export const DISCUSSIONS_HREF = "/discussions"; - -/** `/discussions`: newest first, 10 a page, searchable and filterable by board. */ -export const discussionList = defineContentList({ - defaultSort: "newest", - filters: { board: contentListIdFilter }, - pageSize: 10, - sorts: { - newest: { order: "desc", orderBy: "publishedAt" }, - oldest: { order: "asc", orderBy: "publishedAt" }, - title: { order: "asc", orderBy: "title" }, - }, -}); - -export type DiscussionListSort = (typeof discussionList.sorts)[number]; - -export type DiscussionListSearch = ContentListSearch< - DiscussionListSort, - { board: typeof contentListIdFilter } ->; - -export const discussionListSearch = ( - input: Record<string, unknown>, -): DiscussionListSearch => discussionList.parseSearch(input); - -const discussionQueryKeys = { - all: [manifest.id, "discussions"] as const, -}; - -export const discussionsQueryOptions = (request: { - locale: string; - search: DiscussionListSearch; -}) => - contentListQueryOptions({ - ...request, - queryKey: discussionQueryKeys.all, - fetch: async ({ search }) => { - const res = await fetcher({ - plugin: manifest.id, - method: "get", - module: "content/discussions", - path: "/", - args: { - query: { - ...discussionList.apiQuery(search), - ...(search.board === undefined - ? {} - : { board: String(search.board), includeDescendants: "true" }), - }, - }, - }); - if (res.status !== 200) { - throw new Error(`Loading discussions answered ${res.status}.`); - } - - return await res.json(); - }, - }); - -/** Expires every cached discussion list, after a member posts or edits one. */ -export const invalidateDiscussionLists = async (queryClient: QueryClient) => { - await queryClient.invalidateQueries({ queryKey: discussionQueryKeys.all }); -}; - -/** What the visitor may do with each discussion on screen: `canEdit`, `canReport`. */ -export const useDiscussionPermissions = (ids: readonly number[]) => - useContentPermissions({ - ids, - queryKey: discussionQueryKeys.all, - fetch: async request => { - const res = await fetcher({ - plugin: manifest.id, - method: "get", - module: "content/discussions", - path: "/permissions", - args: { query: { ids: request.join(",") } }, - }); - if (res.status !== 200) throw new Error("Loading permissions failed."); - - return await res.json(); - }, - }); diff --git a/plugins/example/src/pages/discussion-new-page.tsx b/plugins/example/src/pages/discussion-new-page.tsx deleted file mode 100644 index 5b5864b963..0000000000 --- a/plugins/example/src/pages/discussion-new-page.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import type { AutoFormOnSubmit } from "@vitnode/core/components/form/auto-form"; -import type { PluginRoutePageProps } from "@vitnode/core/routing"; - -import { useQueryClient } from "@tanstack/react-query"; -import { buttonVariants } from "@vitnode/core/components/ui/button"; -import { - Empty, - EmptyContent, - EmptyDescription, - EmptyHeader, - EmptyMedia, - EmptyTitle, -} from "@vitnode/core/components/ui/empty"; -import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; -import { fetcher } from "@vitnode/core/tanstack/fetcher"; -import { HrefLink, useHrefNavigate } from "@vitnode/core/tanstack/link"; -import { - defineRoute, - type RouteLoadContext, -} from "@vitnode/core/tanstack/plugin-routes"; -import { FolderTreeIcon } from "lucide-react"; -import { useState } from "react"; -import { useTranslations } from "use-intl"; - -import { manifest } from "@/manifest.gen"; - -import type { DiscussionNewSearch } from "./discussion-search"; - -import { BOARDS_HREF } from "./board-search"; -import { - DISCUSSION_FIELDS, - DiscussionCreateForm, - type DiscussionCreateFormSchema, -} from "./discussion-form"; -import { invalidateDiscussionLists } from "./discussion-list"; -import { discussionEditHref, discussionHref } from "./discussion-search"; -import { DiscussionShell } from "./discussion-shell"; -import { boardsQueryOptions } from "./example-queries"; - -const loadBoardOptions = async (queryClient: RouteLoadContext["queryClient"]) => - (await queryClient.query(boardsQueryOptions())).map(board => ({ - label: `${"— ".repeat(board.depth - 1)}${board.name}`, - value: String(board.id), - })); - -type DiscussionNewData = Awaited<ReturnType<typeof loadBoardOptions>>; - -const DiscussionNewBreadcrumb = () => { - const t = useTranslations("@vitnode/example.discussions.new"); - - return <span>{t("title")}</span>; -}; - -export const route = defineRoute<DiscussionNewData, DiscussionNewSearch>({ - load: async ({ context }) => await loadBoardOptions(context.queryClient), - - head: ({ t }) => ({ - description: t("@vitnode/example.discussions.new.desc"), - robots: "noindex, nofollow", - title: t("@vitnode/example.discussions.new.title"), - }), - - breadcrumb: DiscussionNewBreadcrumb, -}); - -const DiscussionNewPage = ({ - loaderData: options, - search, -}: PluginRoutePageProps<DiscussionNewData, DiscussionNewSearch>) => { - const t = useTranslations("@vitnode/example.discussions"); - const write = useContentPublicWrite({ - fields: DISCUSSION_FIELDS, - uniqueField: "title", - }); - const [isLeaving, setIsLeaving] = useState(false); - const navigate = useHrefNavigate(); - const queryClient = useQueryClient(); - - const onSubmit: AutoFormOnSubmit<DiscussionCreateFormSchema> = async ( - { board, ...values }, - form, - ) => { - const record = await write.submit( - form, - async () => - await fetcher({ - plugin: manifest.id, - method: "post", - module: "content/discussions", - path: "/", - args: { body: { values: { ...values, board: Number(board) } } }, - }), - ); - if (!record) return; - - setIsLeaving(true); - await invalidateDiscussionLists(queryClient); - await navigate( - record.slug === null - ? discussionEditHref(record.id) - : discussionHref(record.slug, { created: true }), - ); - }; - - return ( - <DiscussionShell description={t("new.desc")} title={t("new.title")}> - {options.length === 0 ? ( - <Empty className="border"> - <EmptyHeader> - <EmptyMedia variant="icon"> - <FolderTreeIcon aria-hidden="true" /> - </EmptyMedia> - <EmptyTitle render={<h2 />}>{t("new.no_boards.title")}</EmptyTitle> - <EmptyDescription>{t("new.no_boards.desc")}</EmptyDescription> - </EmptyHeader> - <EmptyContent> - <HrefLink - className={buttonVariants({ variant: "outline" })} - href={BOARDS_HREF} - > - {t("new.no_boards.action")} - </HrefLink> - </EmptyContent> - </Empty> - ) : ( - <DiscussionCreateForm - boards={{ - options, - selected: - search.board === undefined ? undefined : String(search.board), - }} - isLeaving={isLeaving} - onSubmit={onSubmit} - submitLabel={t("new.submit")} - /> - )} - </DiscussionShell> - ); -}; - -export default DiscussionNewPage; diff --git a/plugins/example/src/pages/discussion-search.ts b/plugins/example/src/pages/discussion-search.ts deleted file mode 100644 index 2f0a2e9e4a..0000000000 --- a/plugins/example/src/pages/discussion-search.ts +++ /dev/null @@ -1,43 +0,0 @@ -export interface DiscussionSearch { - created?: true; -} - -export const discussionSearch = ( - input: Record<string, unknown>, -): DiscussionSearch => - input.created === true || input.created === "true" ? { created: true } : {}; - -export const discussionHref = ( - slug: string, - { created }: DiscussionSearch = {}, -): string => - `/discussions/${encodeURIComponent(slug)}${created ? "?created=true" : ""}`; - -export const discussionEditHref = (id: number | string): string => - `/discussions/${encodeURIComponent(String(id))}/edit`; - -const positiveId = (raw: unknown): number | undefined => { - const value = - typeof raw === "number" - ? raw - : typeof raw === "string" && /^[1-9]\d{0,15}$/.test(raw) - ? Number(raw) - : Number.NaN; - - return Number.isSafeInteger(value) && value > 0 ? value : undefined; -}; - -export interface DiscussionNewSearch { - board?: number; -} - -export const discussionNewSearch = ( - input: Record<string, unknown>, -): DiscussionNewSearch => { - const board = positiveId(input.board); - - return board === undefined ? {} : { board }; -}; - -export const discussionNewHref = (board?: number): string => - board === undefined ? "/discussions/new" : `/discussions/new?board=${board}`; diff --git a/plugins/example/src/pages/example-queries.ts b/plugins/example/src/pages/example-queries.ts deleted file mode 100644 index 5872a9269d..0000000000 --- a/plugins/example/src/pages/example-queries.ts +++ /dev/null @@ -1,96 +0,0 @@ -import type { RouteLoadContext } from "@vitnode/core/tanstack/plugin-routes"; - -import { LOADER_DATA_QUERY_META } from "@vitnode/core/lib/query-client"; -import { RECORD_STALE_TIME } from "@vitnode/core/lib/query-freshness"; -import { fetcher } from "@vitnode/core/tanstack/fetcher"; - -import { manifest } from "@/manifest.gen"; - -import { fetchBoards } from "./boards-data"; - -type QueryClient = RouteLoadContext["queryClient"]; - -/** - * Boards are AdminCP-managed containers, so they get a record's freshness and - * are shared across pages: the boards index, the "new discussion" picker and a - * board page all read the same entries. A discussion page and a board's list - * read the API directly; the `/discussions` list is cached in - * `discussion-list.ts`, and the create and edit pages expire it. - */ -const exampleQueryKeys = { - board: (idOrSlug: string) => [manifest.id, "board", idOrSlug] as const, - boards: () => [manifest.id, "boards"] as const, -}; - -export const boardsQueryOptions = () => ({ - meta: LOADER_DATA_QUERY_META, - queryFn: fetchBoards, - queryKey: exampleQueryKeys.boards(), - staleTime: RECORD_STALE_TIME, -}); - -const fetchBoard = async (idOrSlug: string) => { - const res = await fetcher({ - plugin: manifest.id, - method: "get", - module: "content/boards", - path: "/{idOrSlug}", - args: { params: { idOrSlug: encodeURIComponent(idOrSlug) } }, - }); - - if (res.status === 404) return null; - if (res.status !== 200) throw new Error("Loading the board failed."); - - return await res.json(); -}; - -const boardQueryOptions = (idOrSlug: string) => ({ - meta: LOADER_DATA_QUERY_META, - queryFn: async () => await fetchBoard(idOrSlug), - queryKey: exampleQueryKeys.board(idOrSlug), - // A miss is not cached, so a board created a moment ago is found next time. - staleTime: ({ state }: { state: { data: unknown } }) => - state.data ? RECORD_STALE_TIME : 0, -}); - -/** - * The board by id or slug, seeded under its other key as well - the board page - * asks by slug, a discussion page by id. A slug made only of digits is skipped: - * the route reads it as an id, so it would answer for a different board. - */ -export const queryBoard = async ( - queryClient: QueryClient, - idOrSlug: string, -) => { - const data = await queryClient.query(boardQueryOptions(idOrSlug)); - if (!data) return data; - - const { id, slug } = data.container; - // Through `query` with the data already in hand, so the copy is built from - // the same options - `meta` included, which keeps it out of the SSR payload. - // A fresh entry is left as it is; a stale one takes this newer copy. - await Promise.all( - [String(id), slug] - .filter(key => key !== idOrSlug && !(key === slug && /^\d+$/.test(slug))) - .map( - async key => - await queryClient.query({ - ...boardQueryOptions(key), - queryFn: () => data, - }), - ), - ); - - return data; -}; - -/** The board's id from the cached boards list, when a page has already read it. */ -export const cachedBoardId = ( - queryClient: QueryClient, - slug: string, -): null | number => - queryClient - .getQueryData<Awaited<ReturnType<typeof fetchBoards>>>( - exampleQueryKeys.boards(), - ) - ?.find(board => board.slug === slug)?.id ?? null; diff --git a/plugins/example/src/plugin-metadata.gen.ts b/plugins/example/src/plugin-metadata.gen.ts deleted file mode 100644 index f79bff5bd3..0000000000 --- a/plugins/example/src/plugin-metadata.gen.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* oxlint-disable */ - -// This file is generated by VitNode. Do not edit it, and do not format it. -// -// It is rewritten by `vitnode build` and `vitnode dev` from this package's -// package.json - `name`, `version` and `description` - and the title and -// icon in `src/plugin-metadata.ts`. Register `pluginMetadata` as `metadata` -// in both `buildPlugin` and `buildApiPlugin`. - -export const pluginMetadata = { - id: "@vitnode/example", - title: "@vitnode/example", - icon: null, - description: "Reference plugin exercising the VitNode Content Engine end to end.", - version: "2.0.0-canary.13", -} as const diff --git a/plugins/example/src/routes.ts b/plugins/example/src/routes.ts deleted file mode 100644 index 8971a35af8..0000000000 --- a/plugins/example/src/routes.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { - definePluginRoutes, - index, - layout, - lazy, - page, -} from "@vitnode/core/routing"; -import { - FeedPendingSkeleton, - RoutePendingSkeleton, -} from "@vitnode/core/tanstack/pending"; - -import type { ExampleSearch } from "./pages/example-page"; - -import { boardSearch } from "./pages/board-search"; -import { browseSearch } from "./pages/browse-search"; -import { discussionListSearch } from "./pages/discussion-list"; -import { - discussionNewSearch, - discussionSearch, -} from "./pages/discussion-search"; -import { zonesSearch } from "./pages/zones-search"; - -export const routes = definePluginRoutes([ - page("/example/:slug", { - component: lazy(() => import("./pages/example-page")), - search: (input): ExampleSearch => ({ - tab: input.tab === "details" ? "details" : "summary", - }), - }), - - page("/example/browse", { - component: lazy(() => import("./pages/browse-page")), - messages: ["@vitnode/example.browse"], - search: browseSearch, - }), - - page("/example/zones", { - component: lazy(() => import("./pages/zones-page")), - search: zonesSearch, - }), - - page("/example/embed", { - area: "blank", - component: lazy(() => import("./pages/embed-page")), - }), - - layout("/example/guide", { - component: lazy(() => import("./pages/guide-layout")), - messages: ["@vitnode/example.guide"], - children: [ - /** The page at the layout's own URL - `/example/guide`. */ - index({ - component: lazy(() => import("./pages/guide-index-page")), - }), - - page(":topic", { - component: lazy(() => import("./pages/guide-topic-page")), - }), - ], - }), - - page("/articles/:slug", { - component: lazy(() => import("./pages/article-page")), - messages: ["@vitnode/example.articles"], - }), - - page("/advanced-articles/:slug", { - component: lazy(() => import("./pages/advanced-article-page")), - messages: ["@vitnode/example.articles"], - }), - - page("/events/:slug", { - component: lazy(() => import("./pages/event-page")), - messages: ["@vitnode/example.articles", "@vitnode/example.events"], - }), - - page("/localized-articles/:slug", { - component: lazy(() => import("./pages/localized-article-page")), - messages: ["@vitnode/example.articles"], - }), - - page("/boards", { - component: lazy(() => import("./pages/boards-page")), - messages: ["@vitnode/example.boards"], - pendingComponent: RoutePendingSkeleton, - }), - - page("/boards/:slug", { - component: lazy(() => import("./pages/board-page")), - messages: ["@vitnode/example.boards"], - pendingComponent: FeedPendingSkeleton, - search: boardSearch, - }), - - page("/discussions", { - component: lazy(() => import("./pages/discussions-page")), - messages: ["@vitnode/example.discussions"], - pendingComponent: FeedPendingSkeleton, - search: discussionListSearch, - }), - - page("/discussions/new", { - component: lazy(() => import("./pages/discussion-new-page")), - messages: ["@vitnode/example.discussions"], - requires: "authenticated", - search: discussionNewSearch, - }), - - page("/discussions/:id/edit", { - component: lazy(() => import("./pages/discussion-edit-page")), - messages: ["@vitnode/example.discussions"], - }), - - page("/discussions/:slug", { - component: lazy(() => import("./pages/discussion-page")), - messages: ["@vitnode/example.articles", "@vitnode/example.discussions"], - search: discussionSearch, - }), - - page("/admin/example", { - area: "admin", - component: lazy(() => import("./pages/admin-example-page")), - messages: ["@vitnode/example.admin.overview"], - }), -]); diff --git a/plugins/forum/src/locales/en.json b/plugins/forum/src/locales/en.json index b3de652be4..05c15b9fe3 100644 --- a/plugins/forum/src/locales/en.json +++ b/plugins/forum/src/locales/en.json @@ -139,11 +139,6 @@ "pending": { "title": "Sent for approval", "desc": "A moderator will review your changes. Readers see the published version until then." - }, - "conflict": { - "title": "This topic changed", - "desc": "Someone saved a newer version while you were editing. Reload to see it, then make your changes again.", - "reload": "Reload" } }, "state": { diff --git a/plugins/forum/src/pages/forum-links.ts b/plugins/forum/src/pages/forum-links.ts index 1d07ad39e9..5a9aa7f6cd 100644 --- a/plugins/forum/src/pages/forum-links.ts +++ b/plugins/forum/src/pages/forum-links.ts @@ -65,19 +65,8 @@ export const topicNewHref = (forum?: number): string => ? `${FORUM_HREF}/create/topic` : `${FORUM_HREF}/create/topic?forum=${forum}`; -export interface TopicEditSearch { - submitted?: true; -} - -export const topicEditSearch = ( - input: Record<string, unknown>, -): TopicEditSearch => (isTrue(input.submitted) ? { submitted: true } : {}); - -export const topicEditHref = ( - id: number | string, - { submitted }: TopicEditSearch = {}, -): string => - `${FORUM_HREF}/topics/${encodeURIComponent(String(id))}/edit${submitted ? "?submitted=1" : ""}`; +export const topicEditHref = (id: number | string): string => + `${FORUM_HREF}/topics/${encodeURIComponent(String(id))}/edit`; export interface PendingSearch { page?: number; diff --git a/plugins/forum/src/pages/topic-edit-page.tsx b/plugins/forum/src/pages/topic-edit-page.tsx index d340ac9c55..9137fd2228 100644 --- a/plugins/forum/src/pages/topic-edit-page.tsx +++ b/plugins/forum/src/pages/topic-edit-page.tsx @@ -1,16 +1,13 @@ +import type { AutoFormOnSubmit } from "@vitnode/core/components/form/auto-form"; import type { ContentApprovalState } from "@vitnode/core/content"; import { useQueryClient } from "@tanstack/react-query"; -import { - type AutoFormOnSubmit, - setFormFieldError, -} from "@vitnode/core/components/form/auto-form"; import { Alert, AlertDescription, AlertTitle, } from "@vitnode/core/components/ui/alert"; -import { Button, buttonVariants } from "@vitnode/core/components/ui/button"; +import { buttonVariants } from "@vitnode/core/components/ui/button"; import { CONTENT_PUBLIC_WRITE_ISSUE_CODES, parseContentPublicWriteRejection, @@ -20,6 +17,7 @@ import { definePluginRoute, type PluginRoutePageProps, } from "@vitnode/core/routing"; +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; import { fetcher } from "@vitnode/core/tanstack/fetcher"; import { HrefLink } from "@vitnode/core/tanstack/link"; import { @@ -30,17 +28,15 @@ import { ShieldAlertIcon, XCircleIcon, } from "lucide-react"; -import { useRef, useState } from "react"; +import { useState } from "react"; import { toast } from "sonner"; import { useTranslations } from "use-intl"; import { z } from "zod"; import { manifest } from "@/manifest.gen"; -import type { TopicEditSearch } from "./forum-links"; import type { TopicFormValues } from "./topic-form"; -import { useForumRejection } from "./forum-errors"; import { FORUM_HREF, FORUM_PENDING_HREF, @@ -63,13 +59,9 @@ const zodProposedValues = z }) .catch({}); -const loadEditableTopic = async (param: string) => { - const id = Number(param); - if (!Number.isSafeInteger(id) || id < 1) { - return { state: "notFound" as const }; - } - - const res = await fetcher({ +// Answers only for the author and moderators, drafts and hidden topics included. +const fetchEditableTopic = async (id: number) => + await fetcher({ plugin: manifest.id, method: "get", module: "content/topics", @@ -77,6 +69,14 @@ const loadEditableTopic = async (param: string) => { args: { params: { id } }, }); +const loadEditableTopic = async (param: string) => { + const id = Number(param); + if (!Number.isSafeInteger(id) || id < 1) { + return { state: "notFound" as const }; + } + + const res = await fetchEditableTopic(id); + if (res.status === 200) { return { record: await res.json(), state: "ready" as const }; } @@ -108,7 +108,7 @@ const TopicEditBreadcrumb = () => { return <span>{t("title")}</span>; }; -export const route = definePluginRoute<TopicEditData, TopicEditSearch>({ +export const route = definePluginRoute<TopicEditData>({ load: async ({ params }) => await loadEditableTopic(params.id), head: ({ t }) => ({ @@ -133,15 +133,12 @@ const formValuesOf = (record: EditableTopic): TopicFormValues => { }; }; +/** Reads only the server's `approval`: neither the URL nor a draft status adds a notice. */ const ApprovalNotice = ({ approval, - status, - submitted, }: { /** Only what the notice reads, so the edit route's JSON answer fits as is. */ approval: null | Pick<ContentApprovalState, "kind" | "reason" | "status">; - status: EditableTopic["status"]; - submitted: boolean; }) => { const t = useTranslations("@vitnode/forum.topics.approval"); @@ -167,12 +164,7 @@ const ApprovalNotice = ({ ); } - if ( - submitted || - (status === "draft" && - approval?.status === "pending" && - approval.kind === "create") - ) { + if (approval?.status === "pending" && approval.kind === "create") { return ( <Alert icon={<HourglassIcon />} variant="info"> <AlertTitle>{t("pending_create.title")}</AlertTitle> @@ -189,105 +181,73 @@ const ApprovalNotice = ({ return null; }; -const TopicEditForm = ({ - record, - submitted, -}: { - record: EditableTopic; - submitted: boolean; -}) => { +const TopicEditForm = ({ record }: { record: EditableTopic }) => { const t = useTranslations("@vitnode/forum.topics"); - const tErrors = useTranslations("@vitnode/forum.forums.errors"); - const rejectTopic = useForumRejection(TOPIC_FORM_FIELDS); const queryClient = useQueryClient(); - const versionRef = useRef(record.version); const [current, setCurrent] = useState({ approval: record.approval, slug: record.slug, status: record.status, }); - const [hasConflict, setHasConflict] = useState(false); + // The form's defaults follow every save: AutoForm resets an untouched form + // to whatever `defaultValues` it renders with. + const [defaults, setDefaults] = useState(() => formValuesOf(record)); + const write = useContentPublicWrite({ + fields: TOPIC_FORM_FIELDS, + latestVersion: async () => { + const res = await fetchEditableTopic(record.id); + + return res.status === 200 ? (await res.json()).version : null; + }, + uniqueField: "title", + version: record.version, + }); const onSubmit: AutoFormOnSubmit<TopicFormSchema> = async (values, form) => { - const res = await fetcher({ - plugin: manifest.id, - method: "patch", - module: "content/topics", - path: "/{id}", - args: { - params: { id: record.id }, - body: { values, expectedVersion: versionRef.current }, - }, + const updated = await write.submit( + form, + async expectedVersion => + await fetcher({ + plugin: manifest.id, + method: "patch", + module: "content/topics", + path: "/{id}", + args: { + params: { id: record.id }, + body: { values, expectedVersion }, + }, + }), + ); + if (!updated) return; + + setCurrent({ + approval: updated.approval, + slug: updated.slug, + status: updated.status, }); + setDefaults(values); + form.reset(values); + await invalidateForumTopics(queryClient); - if (res.status === 200) { - const updated = await res.json(); - await invalidateForumTopics(queryClient); - versionRef.current = updated.version; - setCurrent({ - approval: updated.approval, - slug: updated.slug, - status: updated.status, + if (updated.approval?.status === "pending") { + toast.info(t("edit.pending.title"), { + description: t("edit.pending.desc"), + }); + } else { + toast.success(t("edit.success.title"), { + description: t("edit.success.desc", { title: values.title }), }); - setHasConflict(false); - form.reset(values); - - if (updated.approval?.status === "pending") { - toast.info(t("edit.pending.title"), { - description: t("edit.pending.desc"), - }); - } else { - toast.success(t("edit.success.title"), { - description: t("edit.success.desc", { title: values.title }), - }); - } - - return; - } - - if (res.status === 409) { - const conflict = await res.json(); - - if (conflict.code === "CONTENT_VERSION_CONFLICT") { - setHasConflict(true); - } else { - setFormFieldError(form, "title", tErrors("unique")); - } - - return; } - - await rejectTopic(res, form); }; return ( <> - <ApprovalNotice - approval={current.approval} - status={current.status} - submitted={submitted} - /> + <ApprovalNotice approval={current.approval} /> - {hasConflict ? ( - <Alert variant="warning"> - <AlertTitle>{t("edit.conflict.title")}</AlertTitle> - <AlertDescription>{t("edit.conflict.desc")}</AlertDescription> - <div className="flex pt-2"> - <Button - onClick={() => { - window.location.reload(); - }} - size="sm" - variant="outline" - > - {t("edit.conflict.reload")} - </Button> - </div> - </Alert> - ) : null} + {write.conflict} <TopicForm - defaultValues={formValuesOf(record)} + defaultValues={defaults} onSubmit={onSubmit} submitLabel={t("edit.submit")} /> @@ -310,8 +270,7 @@ const TopicEditForm = ({ const TopicEditPage = ({ loaderData, params, - search, -}: PluginRoutePageProps<TopicEditData, TopicEditSearch>) => { +}: PluginRoutePageProps<TopicEditData>) => { const t = useTranslations("@vitnode/forum.topics"); if (loaderData.state === "unauthenticated") { @@ -367,11 +326,7 @@ const TopicEditPage = ({ return ( <ForumShell description={t("edit.desc")} title={t("edit.title")}> - <TopicEditForm - key={params.id} - record={loaderData.record} - submitted={search.submitted === true} - /> + <TopicEditForm key={params.id} record={loaderData.record} /> </ForumShell> ); }; diff --git a/plugins/forum/src/pages/topic-new-page.tsx b/plugins/forum/src/pages/topic-new-page.tsx index 73ae1e7815..a3819ac9be 100644 --- a/plugins/forum/src/pages/topic-new-page.tsx +++ b/plugins/forum/src/pages/topic-new-page.tsx @@ -89,10 +89,12 @@ const TopicNewPage = ({ const record = await res.json(); setIsLeaving(true); await invalidateForumTopics(queryClient); + // Only a published topic has a public page. A pending or draft one + // opens its edit page, whose loader reads the approval state. await navigate( - record.approval?.status === "pending" || record.slug === null - ? topicEditHref(record.id, { submitted: true }) - : topicHref(record.slug, { created: true }), + record.status === "published" && record.slug !== null + ? topicHref(record.slug, { created: true }) + : topicEditHref(record.id), ); return; diff --git a/plugins/forum/src/routes.ts b/plugins/forum/src/routes.ts index 0927c74ebf..f25aea8f1a 100644 --- a/plugins/forum/src/routes.ts +++ b/plugins/forum/src/routes.ts @@ -8,7 +8,6 @@ import { import { forumSearch, pendingSearch, - topicEditSearch, topicNewSearch, topicSearch, } from "./pages/forum-links"; @@ -59,7 +58,6 @@ export const routes = definePluginRoutes([ component: lazy(() => import("./pages/topic-edit-page")), messages: ["@vitnode/forum.forums", "@vitnode/forum.topics"], pendingComponent: FormPendingSkeleton, - search: topicEditSearch, }), page("/forum/topics/:slug", { diff --git a/plugins/example/.npmignore b/plugins/newsroom/.npmignore similarity index 100% rename from plugins/example/.npmignore rename to plugins/newsroom/.npmignore diff --git a/plugins/newsroom/README.md b/plugins/newsroom/README.md new file mode 100644 index 0000000000..904a14d4e6 --- /dev/null +++ b/plugins/newsroom/README.md @@ -0,0 +1,28 @@ +# newsroom + +This is the plugin the [Content Engine docs](https://vitnode.com/docs/content-engine) build step by step. It kept growing, and now it's a tour of what the engine can do. Read it, copy it, rename it. + +## What is inside + +| Area | Where | Shows | +| --- | --- | --- | +| Articles, categories, comments | `src/content/article.ts`, `category.ts`, `comment.ts`; pages at `/news` | The tutorial: public API, delivery, member writing, threads, reports | +| Stories | `src/content/story.ts`; `/stories/:slug` | Files, scheduling, live editing, SEO, search, an AI teaser action, a moderation scope | +| Explainers | `src/content/explainer.ts`; `/explainers/:slug` | To-many relations, groups, repeatable rows, localization | +| Bulletins | `src/content/bulletin.ts`; `/bulletins/:slug` | A localized content type with per-language editorial | +| Tags and events | `src/content/tag.ts`, `event.ts`; `/events/:slug` | `uuid` and `bigint` id strategies, relations across them | +| Desks and letters | `src/content/desks.ts`, `letter.ts`; `/desks`, `/letters` | A container tree and member-written records filed in it | +| Pages and widgets | `src/content/page.ts`, `settings-page.ts`, `src/widgets/`; `/newsroom/zones` | Block fields, editable pages, content zones, block variants | +| Routing demos | `src/routes.ts`; `/newsroom/browse`, `/newsroom/guide`, `/newsroom/embed` | Search contracts, layouts, the blank area | +| AdminCP | `src/admin/nav.tsx`; `/admin/newsroom` | Content screens, containers and a plugin page | + +## Develop + +```bash +vitnode dev # rebuild dist/ on every change +vitnode build # one-off build +vitest # run the plugin's tests +vitnode plugin validate newsroom +``` + +Docs: https://vitnode.com/docs/dev/plugins diff --git a/plugins/example/global.d.ts b/plugins/newsroom/global.d.ts similarity index 62% rename from plugins/example/global.d.ts rename to plugins/newsroom/global.d.ts index c74dd53ee1..3e51a49d29 100644 --- a/plugins/example/global.d.ts +++ b/plugins/newsroom/global.d.ts @@ -1,10 +1,11 @@ /// <reference types="use-intl" /> +import coreApi from "@vitnode/core/locales/api/en.json" with { type: "json" }; import core from "@vitnode/core/locales/en.json" with { type: "json" }; import plugin from "./src/locales/en.json" with { type: "json" }; declare module "use-intl" { interface AppConfig { - Messages: typeof plugin & typeof core; + Messages: typeof plugin & typeof core & typeof coreApi; } } diff --git a/plugins/example/oxlint.config.ts b/plugins/newsroom/oxlint.config.ts similarity index 100% rename from plugins/example/oxlint.config.ts rename to plugins/newsroom/oxlint.config.ts diff --git a/plugins/example/package.json b/plugins/newsroom/package.json similarity index 81% rename from plugins/example/package.json rename to plugins/newsroom/package.json index c8ff21d57e..207c39cc15 100644 --- a/plugins/example/package.json +++ b/plugins/newsroom/package.json @@ -1,22 +1,11 @@ { - "name": "@vitnode/example", - "version": "2.0.0-canary.13", - "description": "Reference plugin exercising the VitNode Content Engine end to end.", - "author": { - "name": "VitNode", - "email": "contact@vitnode.com", - "url": "https://vitnode.com" - }, - "license": "MIT", + "name": "newsroom", + "version": "0.1.0", + "description": "Newsroom: the VitNode tutorial plugin, grown into a tour of the Content Engine.", "private": true, "type": "module", - "exports": { - "./locales/*.json": "./src/locales/*.json", - "./*": { - "import": "./dist/src/*.js", - "types": "./dist/src/*.d.ts", - "default": "./dist/src/*.js" - } + "engines": { + "node": "^22.18.0 || ^24.11.0 || >=26.0.0" }, "scripts": { "build:plugins": "vitnode build", @@ -26,6 +15,14 @@ "test": "vitest run", "test:watch": "vitest" }, + "exports": { + "./locales/*.json": "./src/locales/*.json", + "./*": { + "import": "./dist/src/*.js", + "types": "./dist/src/*.d.ts", + "default": "./dist/src/*.js" + } + }, "dependencies": { "@hono/zod-openapi": "^1.6.3", "@tanstack/react-form": "^1.33.5", diff --git a/plugins/newsroom/src/admin/content.tsx b/plugins/newsroom/src/admin/content.tsx new file mode 100644 index 0000000000..80cb10aeea --- /dev/null +++ b/plugins/newsroom/src/admin/content.tsx @@ -0,0 +1 @@ +export { adminNav as adminContent } from "./nav"; diff --git a/plugins/newsroom/src/admin/nav.tsx b/plugins/newsroom/src/admin/nav.tsx new file mode 100644 index 0000000000..2fe0a6b2bb --- /dev/null +++ b/plugins/newsroom/src/admin/nav.tsx @@ -0,0 +1,43 @@ +import type { AdminNavPluginSource } from "@vitnode/core/lib/plugin"; + +import { + CalendarDaysIcon, + FolderIcon, + FolderTreeIcon, + LayoutTemplateIcon, + MailIcon, + MessageSquareIcon, + NewspaperIcon, + NotebookPenIcon, + SparklesIcon, + TagIcon, +} from "lucide-react"; + +import { articleContentType } from "@/content/article"; +import { categoryContentType } from "@/content/category"; +import { commentContentType } from "@/content/comment"; +import { deskContainers } from "@/content/desks"; +import { eventContentType } from "@/content/event"; +import { letterContentType } from "@/content/letter"; +import { pageContentType } from "@/content/page"; +import { storyContentType } from "@/content/story"; +import { tagContentType } from "@/content/tag"; +import { manifest } from "@/manifest.gen"; + +export const adminNav = { + pluginId: manifest.id, + containers: [{ definition: deskContainers, icon: <FolderTreeIcon /> }], + contentTypes: [ + { definition: articleContentType, icon: <NewspaperIcon /> }, + { definition: categoryContentType, icon: <FolderIcon /> }, + { definition: commentContentType, icon: <MessageSquareIcon /> }, + { definition: storyContentType, icon: <NotebookPenIcon /> }, + { definition: tagContentType, icon: <TagIcon /> }, + { definition: eventContentType, icon: <CalendarDaysIcon /> }, + { definition: pageContentType, icon: <LayoutTemplateIcon /> }, + { definition: letterContentType, icon: <MailIcon /> }, + ], + admin: { + nav: [{ href: "/admin/newsroom", icon: <SparklesIcon />, id: "overview" }], + }, +} satisfies AdminNavPluginSource; diff --git a/plugins/example/src/api/admin-staff-permission.test.ts b/plugins/newsroom/src/api/admin-staff-permission.test.ts similarity index 72% rename from plugins/example/src/api/admin-staff-permission.test.ts rename to plugins/newsroom/src/api/admin-staff-permission.test.ts index 363925018b..858fff4c7a 100644 --- a/plugins/example/src/api/admin-staff-permission.test.ts +++ b/plugins/newsroom/src/api/admin-staff-permission.test.ts @@ -1,11 +1,11 @@ import { findAdminRoutesWithoutStaffPermission } from "@vitnode/core/api/lib/route"; import { describe, expect, it } from "vitest"; -import { exampleApiPlugin } from "@/config.api"; +import { newsroomApiPlugin } from "@/config.api"; -describe("example admin routes", () => { +describe("newsroom admin routes", () => { it("all require a staff permission", () => { - const { hono } = exampleApiPlugin(); + const { hono } = newsroomApiPlugin(); expect(hono.routes.some(route => route.path.includes("/admin/"))).toBe( true, diff --git a/plugins/example/src/api/ai/actions.ts b/plugins/newsroom/src/api/ai/actions.ts similarity index 68% rename from plugins/example/src/api/ai/actions.ts rename to plugins/newsroom/src/api/ai/actions.ts index edc2635bc4..68417a66ed 100644 --- a/plugins/example/src/api/ai/actions.ts +++ b/plugins/newsroom/src/api/ai/actions.ts @@ -3,21 +3,21 @@ import { languageName } from "@vitnode/core/api/lib/ai/language-name"; import { checkStaffPermission } from "@vitnode/core/api/lib/check-staff-permission"; import { z } from "zod"; -import { articleContentType } from "@/content/article"; +import { storyContentType } from "@/content/story"; import { manifest } from "@/manifest.gen"; -export const articleExcerptAiAction = defineAiAction({ +export const storyExcerptAiAction = defineAiAction({ authorize: async ({ c }) => await checkStaffPermission(c, { - module: articleContentType.permissionModule, + module: storyContentType.permissionModule, permission: "can_edit", plugin: manifest.id, type: "admin", }), buildPrompt: (input, { instructions }) => ({ - prompt: `Title: ${input.title}\nProduct code: ${input.code}`, + prompt: `Title: ${input.title}\nReference code: ${input.code}`, system: [ - "You write a one-sentence teaser for an article in a demo catalogue.", + "You write a one-sentence teaser for a newsroom story.", `Write it in ${languageName(input.locale)}, under 200 characters.`, "Answer with the teaser only, without quotes.", ...(instructions ? [instructions] : []), @@ -28,10 +28,10 @@ export const articleExcerptAiAction = defineAiAction({ maxOutputTokens: 120, timeoutMs: 20_000, }, - description: "ai_actions.@vitnode/example.article_excerpt.description", + description: "ai_actions.newsroom.story_excerpt.description", icon: "sparkles", - id: "article.excerpt", - title: "ai_actions.@vitnode/example.article_excerpt.title", + id: "story.excerpt", + title: "ai_actions.newsroom.story_excerpt.title", inputSchema: z.object({ code: z.string().max(100), locale: z.string().min(2).max(16), @@ -40,7 +40,7 @@ export const articleExcerptAiAction = defineAiAction({ output: "text", outputSchema: z.string().min(1).max(500), parseText: text => text.trim().replace(/^["“](.*)["”]$/su, "$1"), - permission: { defaultGranted: true, key: "article.excerpt" }, + permission: { defaultGranted: true, key: "story.excerpt" }, promptVersion: 1, requiredCapabilities: ["text"], }); diff --git a/plugins/example/src/api/builders.ts b/plugins/newsroom/src/api/builders.ts similarity index 100% rename from plugins/example/src/api/builders.ts rename to plugins/newsroom/src/api/builders.ts diff --git a/plugins/example/src/api/lib/events.ts b/plugins/newsroom/src/api/lib/events.ts similarity index 70% rename from plugins/example/src/api/lib/events.ts rename to plugins/newsroom/src/api/lib/events.ts index 5cb80ade52..d3289083ae 100644 --- a/plugins/example/src/api/lib/events.ts +++ b/plugins/newsroom/src/api/lib/events.ts @@ -1,11 +1,11 @@ import type { ContentEventsFor } from "@vitnode/core/content"; -import type { articleContentType } from "@/content/article"; import type { categoryContentType } from "@/content/category"; +import type { storyContentType } from "@/content/story"; declare module "@vitnode/core/api/models/events" { interface VitNodeEvents extends - ContentEventsFor<typeof articleContentType>, + ContentEventsFor<typeof storyContentType>, ContentEventsFor<typeof categoryContentType> {} } diff --git a/plugins/example/src/api/lib/moderation.ts b/plugins/newsroom/src/api/lib/moderation.ts similarity index 51% rename from plugins/example/src/api/lib/moderation.ts rename to plugins/newsroom/src/api/lib/moderation.ts index 45ad479ec4..043b1e13f4 100644 --- a/plugins/example/src/api/lib/moderation.ts +++ b/plugins/newsroom/src/api/lib/moderation.ts @@ -1,24 +1,24 @@ import { defineModerationScope } from "@vitnode/core/api/moderation"; import { and, asc, gt, ilike, inArray } from "drizzle-orm"; -import { example_categories } from "@/database/categories"; +import { newsroom_categories } from "@/database/categories"; -export const exampleCategoryScope = defineModerationScope({ - id: "example.category", - label: "@vitnode/example.moderation.category.label", - description: "@vitnode/example.moderation.category.desc", +export const categoryModerationScope = defineModerationScope({ + id: "newsroom.category", + label: "newsroom.moderation.category.label", + description: "newsroom.moderation.category.desc", list: async (c, { cursor, limit, search }) => { const rows = await c .get("db") - .select({ id: example_categories.id, name: example_categories.name }) - .from(example_categories) + .select({ id: newsroom_categories.id, name: newsroom_categories.name }) + .from(newsroom_categories) .where( and( - cursor ? gt(example_categories.id, Number(cursor)) : undefined, - search ? ilike(example_categories.name, `%${search}%`) : undefined, + cursor ? gt(newsroom_categories.id, Number(cursor)) : undefined, + search ? ilike(newsroom_categories.name, `%${search}%`) : undefined, ), ) - .orderBy(asc(example_categories.id)) + .orderBy(asc(newsroom_categories.id)) .limit(limit + 1); const page = rows.slice(0, limit); @@ -34,9 +34,9 @@ export const exampleCategoryScope = defineModerationScope({ const rows = await c .get("db") - .select({ id: example_categories.id, name: example_categories.name }) - .from(example_categories) - .where(inArray(example_categories.id, numeric)); + .select({ id: newsroom_categories.id, name: newsroom_categories.name }) + .from(newsroom_categories) + .where(inArray(newsroom_categories.id, numeric)); return rows.map(row => ({ id: String(row.id), label: row.name })); }, diff --git a/plugins/newsroom/src/api/modules/admin/admin.module.ts b/plugins/newsroom/src/api/modules/admin/admin.module.ts new file mode 100644 index 0000000000..474acb42f1 --- /dev/null +++ b/plugins/newsroom/src/api/modules/admin/admin.module.ts @@ -0,0 +1,36 @@ +import { buildContentAdminModule, buildModule } from "@/api/builders"; +import { deskContainers } from "@/content/desks"; +import { articleContent } from "@/database/articles"; +import { bulletinContent } from "@/database/bulletins"; +import { categoryContent } from "@/database/categories"; +import { commentContent } from "@/database/comments"; +import { eventContent } from "@/database/events"; +import { explainerContent } from "@/database/explainers"; +import { letterContent } from "@/database/letters"; +import { pageContent } from "@/database/pages"; +import { storyContent } from "@/database/stories"; +import { tagContent } from "@/database/tags"; + +export const adminModule = buildModule({ + name: "admin", + routes: [], + modules: [ + buildContentAdminModule({ + containers: [deskContainers], + // Explainers and bulletins get staff routes and permissions here, but no + // AdminCP screen: `src/admin/nav.tsx` does not list them. + contentTypes: [ + articleContent, + categoryContent, + commentContent, + storyContent, + explainerContent, + bulletinContent, + tagContent, + eventContent, + pageContent, + letterContent, + ], + }), + ], +}); diff --git a/plugins/newsroom/src/api/modules/hello/hello.module.test.ts b/plugins/newsroom/src/api/modules/hello/hello.module.test.ts new file mode 100644 index 0000000000..6be2829e9c --- /dev/null +++ b/plugins/newsroom/src/api/modules/hello/hello.module.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, it } from "vitest"; + +import { helloModule } from "./hello.module"; + +describe("hello module", () => { + it("answers GET / with a greeting from the plugin", async () => { + const response = await helloModule.hono.request("/"); + + expect(response.status).toBe(200); + await expect(response.json()).resolves.toEqual({ + message: "Hello from newsroom!", + }); + }); +}); diff --git a/plugins/newsroom/src/api/modules/hello/hello.module.ts b/plugins/newsroom/src/api/modules/hello/hello.module.ts new file mode 100644 index 0000000000..b954fe6291 --- /dev/null +++ b/plugins/newsroom/src/api/modules/hello/hello.module.ts @@ -0,0 +1,8 @@ +import { buildModule } from "@/api/builders"; + +import { helloRoute } from "./hello.route"; + +export const helloModule = buildModule({ + name: "hello", + routes: [helloRoute], +}); diff --git a/plugins/newsroom/src/api/modules/hello/hello.route.ts b/plugins/newsroom/src/api/modules/hello/hello.route.ts new file mode 100644 index 0000000000..aeb822355c --- /dev/null +++ b/plugins/newsroom/src/api/modules/hello/hello.route.ts @@ -0,0 +1,22 @@ +import { z } from "@hono/zod-openapi"; + +import { buildRoute } from "@/api/builders"; +import { manifest } from "@/manifest.gen"; + +export const helloRoute = buildRoute({ + route: { + method: "get", + path: "/", + responses: { + 200: { + content: { + "application/json": { + schema: z.object({ message: z.string() }), + }, + }, + description: "A greeting from the plugin.", + }, + }, + }, + handler: c => c.json({ message: `Hello from ${manifest.id}!` }), +}); diff --git a/plugins/example/src/blocks.tsx b/plugins/newsroom/src/blocks.tsx similarity index 100% rename from plugins/example/src/blocks.tsx rename to plugins/newsroom/src/blocks.tsx diff --git a/plugins/newsroom/src/config.api.ts b/plugins/newsroom/src/config.api.ts new file mode 100644 index 0000000000..478112ed83 --- /dev/null +++ b/plugins/newsroom/src/config.api.ts @@ -0,0 +1,70 @@ +import type { ApiPluginContract } from "@vitnode/core/api/lib/plugin"; + +import { buildApiPlugin } from "@vitnode/core/api/lib/plugin"; + +import { storyExcerptAiAction } from "@/api/ai/actions"; +import { buildContentPublicModule } from "@/api/builders"; +import { categoryModerationScope } from "@/api/lib/moderation"; +import { deskContainers } from "@/content/desks"; +import { settingsPage } from "@/content/settings-page"; +import { articleContent } from "@/database/articles"; +import { bulletinContent } from "@/database/bulletins"; +import { categoryContent } from "@/database/categories"; +import { commentContent } from "@/database/comments"; +import { eventContent } from "@/database/events"; +import { explainerContent } from "@/database/explainers"; +import { letterContent } from "@/database/letters"; +import { pageContent } from "@/database/pages"; +import { storyContent } from "@/database/stories"; +import { tagContent } from "@/database/tags"; +import { manifest } from "@/manifest.gen"; + +import { adminModule } from "./api/modules/admin/admin.module"; +import { helloModule } from "./api/modules/hello/hello.module"; +import { widgets } from "./widgets"; +import "@/api/lib/events"; + +export const newsroomApiPlugin = () => + buildApiPlugin({ + manifest, + aiActions: [storyExcerptAiAction], + blocks: widgets, + editablePages: [settingsPage], + moderation: { scopes: [categoryModerationScope] }, + permissionStaff: { + moderator: { + widgets: ["can_edit"], + }, + }, + modules: [ + helloModule, + adminModule, + buildContentPublicModule({ + containers: [deskContainers], + contentTypes: [ + articleContent, + commentContent, + storyContent, + explainerContent, + bulletinContent, + categoryContent, + tagContent, + eventContent, + pageContent, + letterContent, + ], + }), + ], + }); + +/** + * What an application's generated api-registry.gen.ts imports to make this + * plugin's routes callable through the fetcher. + * + * Reduced here, once, to the module tree and the route definitions - so no app + * that installs this plugin re-derives them, and none of the Hono, database or + * secret code behind the factory is reachable from a browser build. + */ +export type VitNodeApiPlugin = ApiPluginContract< + ReturnType<typeof newsroomApiPlugin> +>; diff --git a/plugins/example/src/config.tsx b/plugins/newsroom/src/config.tsx similarity index 76% rename from plugins/example/src/config.tsx rename to plugins/newsroom/src/config.tsx index a0b6b2dc96..c323cc5535 100644 --- a/plugins/example/src/config.tsx +++ b/plugins/newsroom/src/config.tsx @@ -4,11 +4,11 @@ import messages from "./locales"; import { manifest } from "./manifest.gen"; import { routes } from "./routes"; -export const examplePlugin = () => +export const newsroomPlugin = () => buildPlugin({ manifest, localeFiles: { - en: "@vitnode/example/locales/en.json", + en: "newsroom/locales/en.json", }, messages, routes, diff --git a/plugins/example/src/content.ts b/plugins/newsroom/src/content.ts similarity index 50% rename from plugins/example/src/content.ts rename to plugins/newsroom/src/content.ts index b815c4fc5d..25a23f1835 100644 --- a/plugins/example/src/content.ts +++ b/plugins/newsroom/src/content.ts @@ -1,19 +1,23 @@ -import { advancedArticleContentType } from "@/content/advanced-article"; import { articleContentType } from "@/content/article"; +import { bulletinContentType } from "@/content/bulletin"; import { categoryContentType } from "@/content/category"; -import { discussionContentType } from "@/content/discussion"; +import { commentContentType } from "@/content/comment"; import { eventContentType } from "@/content/event"; -import { localizedArticleContentType } from "@/content/localized-article"; +import { explainerContentType } from "@/content/explainer"; +import { letterContentType } from "@/content/letter"; import { pageContentType } from "@/content/page"; +import { storyContentType } from "@/content/story"; import { tagContentType } from "@/content/tag"; export const contentTypes = [ articleContentType, - advancedArticleContentType, - localizedArticleContentType, categoryContentType, - pageContentType, + commentContentType, + storyContentType, + explainerContentType, + bulletinContentType, tagContentType, eventContentType, - discussionContentType, + pageContentType, + letterContentType, ]; diff --git a/plugins/newsroom/src/content/article.ts b/plugins/newsroom/src/content/article.ts new file mode 100644 index 0000000000..bc4a38442d --- /dev/null +++ b/plugins/newsroom/src/content/article.ts @@ -0,0 +1,51 @@ +import { defineContentType, field } from "@vitnode/core/content"; + +import { categoryContentType } from "@/content/category"; + +export const articleContentType = defineContentType({ + id: "newsroom.article", + tableName: "newsroom_articles", + + fields: { + title: field.text({ required: true, minLength: 3, maxLength: 200 }), + slug: field.slug({ source: "title" }), + body: field.richText({ required: true }), + author: field.user(), + category: field.relation({ + target: () => categoryContentType, + nullable: true, + onDelete: "set null", + }), + }, + + publication: true, + + publicApi: { + path: "news", + fields: ["id", "title", "slug", "body", "category", "publishedAt"], + listFields: ["id", "title", "slug", "publishedAt"], + searchableFields: ["title"], + orderableFields: ["title"], + }, + + delivery: true, + + editorial: true, + + reports: true, + + publicWrite: { + ownership: { field: "author" }, + create: { fields: ["title", "body"], status: "published" }, + update: { fields: ["title", "body"] }, + }, + + admin: { + path: "newsroom/articles", + titleField: "title", + list: { + columns: ["status", "title", "category", "updatedAt"], + orderableFields: ["title"], + }, + }, +}); diff --git a/plugins/example/src/content/localized-article.ts b/plugins/newsroom/src/content/bulletin.ts similarity index 86% rename from plugins/example/src/content/localized-article.ts rename to plugins/newsroom/src/content/bulletin.ts index c14402fe66..fb9bf045d9 100644 --- a/plugins/example/src/content/localized-article.ts +++ b/plugins/newsroom/src/content/bulletin.ts @@ -1,8 +1,8 @@ import { defineContentType, field } from "@vitnode/core/content"; -export const localizedArticleContentType = defineContentType({ - id: "example.localized-article", - tableName: "example_localized_articles", +export const bulletinContentType = defineContentType({ + id: "newsroom.bulletin", + tableName: "newsroom_bulletins", localization: { // `en` has to exist in `core_languages`, which the boot guard checks once per @@ -17,11 +17,11 @@ export const localizedArticleContentType = defineContentType({ }, // The global lifecycle every translation's own status is subordinate to: - // publishing the English copy of a draft article puts nothing on the internet. + // publishing the English copy of a draft bulletin puts nothing on the internet. publication: true, publicApi: { - path: "localized-articles", + path: "bulletins", fields: ["title", "slug", "body", "featured", "publishedAt"], searchableFields: ["title", "body"], orderableFields: ["publishedAt"], @@ -33,7 +33,7 @@ export const localizedArticleContentType = defineContentType({ search: { titleField: "title", contentFields: ["title", "body"], - pathTemplate: "/localized-articles/{slug}", + pathTemplate: "/bulletins/{slug}", }, // Per-locale versions, per-locale revisions, per-locale restore. `retention` is @@ -59,7 +59,7 @@ export const localizedArticleContentType = defineContentType({ slug: field.slug({ localized: true, source: "title" }), body: field.textarea({ localized: true, required: true }), - // Shared: whether an article is featured is a property of the article, not + // Shared: whether a bulletin is featured is a property of the bulletin, not // of the language somebody is reading it in. featured: field.boolean({ defaultValue: false }), }, diff --git a/plugins/newsroom/src/content/category.ts b/plugins/newsroom/src/content/category.ts new file mode 100644 index 0000000000..53b04a73e4 --- /dev/null +++ b/plugins/newsroom/src/content/category.ts @@ -0,0 +1,17 @@ +import { defineContentType, field } from "@vitnode/core/content"; + +export const categoryContentType = defineContentType({ + id: "newsroom.category", + tableName: "newsroom_categories", + + fields: { + name: field.text({ required: true, minLength: 2, maxLength: 80 }), + slug: field.slug({ source: "name" }), + }, + + admin: { + path: "newsroom/categories", + titleField: "name", + list: { columns: ["name", "slug", "updatedAt"] }, + }, +}); diff --git a/plugins/newsroom/src/content/comment.ts b/plugins/newsroom/src/content/comment.ts new file mode 100644 index 0000000000..bd8f5aed60 --- /dev/null +++ b/plugins/newsroom/src/content/comment.ts @@ -0,0 +1,46 @@ +import { defineContentType, field } from "@vitnode/core/content"; + +import { articleContentType } from "@/content/article"; + +/** How deep replies nest. The section hides **Reply** at this depth. */ +export const COMMENT_MAX_DEPTH = 4; + +export const commentContentType = defineContentType({ + id: "newsroom.comment", + tableName: "newsroom_comments", + + fields: { + slug: field.slug({ generated: true }), + body: field.richText({ required: true }), + author: field.user(), + article: field.relation({ + target: () => articleContentType, + required: true, + onDelete: "cascade", + }), + parent: field.relation({ + self: true, + nullable: true, + onDelete: "set null", + }), + }, + + publication: true, + visibility: true, + + publicApi: { + path: "comments", + fields: ["id", "slug", "body", "article", "parent", "publishedAt"], + people: ["author"], + }, + + publicWrite: { + ownership: { field: "author" }, + create: { fields: ["body", "article", "parent"], status: "published" }, + update: { fields: ["body"] }, + }, + + thread: { parent: "parent", root: "article", maxDepth: COMMENT_MAX_DEPTH }, + + admin: { path: "newsroom/comments", titleField: "slug" }, +}); diff --git a/plugins/example/src/content/boards.ts b/plugins/newsroom/src/content/desks.ts similarity index 77% rename from plugins/example/src/content/boards.ts rename to plugins/newsroom/src/content/desks.ts index da79e8da08..fc33656e24 100644 --- a/plugins/example/src/content/boards.ts +++ b/plugins/newsroom/src/content/desks.ts @@ -1,7 +1,7 @@ import { defineContentContainer, field } from "@vitnode/core/content"; -export const boardContainers = defineContentContainer({ - id: "example.boards", +export const deskContainers = defineContentContainer({ + id: "newsroom.desks", fields: { description: field.textarea({ maxLength: 500, nullable: true }), @@ -14,9 +14,9 @@ export const boardContainers = defineContentContainer({ ordering: { mode: "manual" }, publicApi: { - path: "boards", + path: "desks", fields: ["description", "color", "icon"], }, - admin: { path: "example/boards" }, + admin: { path: "newsroom/desks" }, }); diff --git a/plugins/example/src/content/event.ts b/plugins/newsroom/src/content/event.ts similarity index 97% rename from plugins/example/src/content/event.ts rename to plugins/newsroom/src/content/event.ts index 4a4d0c910a..ec84df7062 100644 --- a/plugins/example/src/content/event.ts +++ b/plugins/newsroom/src/content/event.ts @@ -6,8 +6,8 @@ import { categoryContentType } from "./category"; import { tagContentType } from "./tag"; export const eventContentType = defineContentType({ - id: "example.event", - tableName: "example_events", + id: "newsroom.event", + tableName: "newsroom_events", idStrategy: "bigint", localization: { defaultLocale: "en", fallback: "default" }, diff --git a/plugins/example/src/content/advanced-article.ts b/plugins/newsroom/src/content/explainer.ts similarity index 90% rename from plugins/example/src/content/advanced-article.ts rename to plugins/newsroom/src/content/explainer.ts index 0725fb1b26..9807cb34a5 100644 --- a/plugins/example/src/content/advanced-article.ts +++ b/plugins/newsroom/src/content/explainer.ts @@ -3,9 +3,9 @@ import { defineContentType, field } from "@vitnode/core/content"; import { categoryContentType } from "./category"; import { tagContentType } from "./tag"; -export const advancedArticleContentType = defineContentType({ - id: "example.advanced-article", - tableName: "example_advanced_articles", +export const explainerContentType = defineContentType({ + id: "newsroom.explainer", + tableName: "newsroom_explainers", localization: { defaultLocale: "en", @@ -45,9 +45,9 @@ export const advancedArticleContentType = defineContentType({ }), // A self-relation, and an ordered one: "read next" is a sequence somebody - // chose. `onDelete: "cascade"` drops the reference when the target article + // chose. `onDelete: "cascade"` drops the reference when the target explainer // goes, which is the honest analogue of nulling a column here. - relatedArticles: field.relation({ + relatedExplainers: field.relation({ multiple: true, onDelete: "cascade", ordered: true, @@ -67,8 +67,8 @@ export const advancedArticleContentType = defineContentType({ }, }), - // Shared: whether a search engine should index the article, and how - // important it is, are properties of the article rather than of a language. + // Shared: whether a search engine should index the explainer, and how + // important it is, are properties of the explainer rather than of a language. syndication: field.group({ fields: { indexable: field.boolean({ defaultValue: true }), @@ -94,7 +94,7 @@ export const advancedArticleContentType = defineContentType({ }, publicApi: { - path: "advanced-articles", + path: "explainers", fields: [ // Exposed because Stage 8 needs it: alternates and `hreflang` are resolved by // identifier, and delivery reads the public projection - so a localized @@ -125,7 +125,7 @@ export const advancedArticleContentType = defineContentType({ titleField: "title", descriptionField: "seo.description", contentFields: ["title", "seo.description", "faq.question", "faq.answer"], - pathTemplate: "/advanced-articles/{slug}", + pathTemplate: "/explainers/{slug}", }, delivery: { @@ -159,7 +159,7 @@ export const advancedArticleContentType = defineContentType({ form: { // The form *does* carry them: this is the surface where a group renders as // a section and a collection as an editor. - fields: ["categories", "tags", "relatedArticles", "syndication", "faq"], + fields: ["categories", "tags", "relatedExplainers", "syndication", "faq"], }, }, }); diff --git a/plugins/example/src/content/discussion.ts b/plugins/newsroom/src/content/letter.ts similarity index 59% rename from plugins/example/src/content/discussion.ts rename to plugins/newsroom/src/content/letter.ts index a60ef8df11..34e59e1f8b 100644 --- a/plugins/example/src/content/discussion.ts +++ b/plugins/newsroom/src/content/letter.ts @@ -1,17 +1,17 @@ import { defineContentType, field } from "@vitnode/core/content"; -import { boardContainers } from "@/content/boards"; +import { deskContainers } from "@/content/desks"; -export const discussionContentType = defineContentType({ - id: "example.discussion", - tableName: "example_discussions", +export const letterContentType = defineContentType({ + id: "newsroom.letter", + tableName: "newsroom_letters", fields: { title: field.text({ required: true, minLength: 3, maxLength: 200 }), slug: field.slug({ source: "title" }), body: field.richText({ required: true }), author: field.user(), - board: field.container({ definition: boardContainers, required: true }), + desk: field.container({ definition: deskContainers, required: true }), }, publication: true, @@ -20,11 +20,11 @@ export const discussionContentType = defineContentType({ reports: true, publicApi: { - path: "discussions", - fields: ["id", "title", "slug", "body", "board", "publishedAt"], - // A board's discussion list shows titles and dates, never the body. - listFields: ["id", "title", "slug", "board", "publishedAt"], - filterableFields: ["board"], + path: "letters", + fields: ["id", "title", "slug", "body", "desk", "publishedAt"], + // A desk's letter list shows titles and dates, never the body. + listFields: ["id", "title", "slug", "desk", "publishedAt"], + filterableFields: ["desk"], searchableFields: ["title"], orderableFields: ["title"], people: ["author"], @@ -32,19 +32,19 @@ export const discussionContentType = defineContentType({ publicWrite: { ownership: { field: "author" }, - create: { fields: ["title", "body", "board"], status: "published" }, + create: { fields: ["title", "body", "desk"], status: "published" }, update: { fields: ["title", "body"] }, }, admin: { - path: "example/discussions", + path: "newsroom/letters", titleField: "title", list: { columns: [ "status", "title", "slug", - "board", + "desk", "author", "publishedAt", "updatedAt", diff --git a/plugins/example/src/content/page-blocks.ts b/plugins/newsroom/src/content/page-blocks.ts similarity index 74% rename from plugins/example/src/content/page-blocks.ts rename to plugins/newsroom/src/content/page-blocks.ts index 9e6261bd20..b9c6b16165 100644 --- a/plugins/example/src/content/page-blocks.ts +++ b/plugins/newsroom/src/content/page-blocks.ts @@ -1,7 +1,7 @@ export const PAGE_BLOCKS_ALLOWED = [ "core:*", - "example:callout", - "example:features", + "newsroom:callout", + "newsroom:features", ] as const; export const PAGE_SIDEBAR_BLOCKS_ALLOWED = ["core:text"] as const; diff --git a/plugins/example/src/content/page.ts b/plugins/newsroom/src/content/page.ts similarity index 92% rename from plugins/example/src/content/page.ts rename to plugins/newsroom/src/content/page.ts index a7346a557c..c99e6e6950 100644 --- a/plugins/example/src/content/page.ts +++ b/plugins/newsroom/src/content/page.ts @@ -3,8 +3,8 @@ import { defineContentType, field } from "@vitnode/core/content"; import { PAGE_BLOCKS_ALLOWED } from "./page-blocks"; export const pageContentType = defineContentType({ - id: "example.page", - tableName: "example_pages", + id: "newsroom.page", + tableName: "newsroom_pages", fields: { title: field.text({ required: true, minLength: 3, maxLength: 200 }), diff --git a/plugins/example/src/content/settings-page.ts b/plugins/newsroom/src/content/settings-page.ts similarity index 79% rename from plugins/example/src/content/settings-page.ts rename to plugins/newsroom/src/content/settings-page.ts index a80e66011e..9257374563 100644 --- a/plugins/example/src/content/settings-page.ts +++ b/plugins/newsroom/src/content/settings-page.ts @@ -9,14 +9,14 @@ import { const ZONE_BLOCKS_MAX = 20; -export const EXAMPLE_SETTINGS_PAGE_ID = "example:settings"; +export const NEWSROOM_SETTINGS_PAGE_ID = "newsroom:settings"; -export const EXAMPLE_WIDGETS_PERMISSION = { +export const NEWSROOM_WIDGETS_PERMISSION = { module: "widgets", permission: "can_edit", } as const; -export const EXAMPLE_ZONE_IDS = { +export const NEWSROOM_ZONE_IDS = { afterProfile: "after-profile", beforeFooter: "before-footer", beforeProfile: "before-profile", @@ -24,12 +24,12 @@ export const EXAMPLE_ZONE_IDS = { } as const; export const settingsPage = defineEditablePage({ - id: EXAMPLE_SETTINGS_PAGE_ID, + id: NEWSROOM_SETTINGS_PAGE_ID, - permission: EXAMPLE_WIDGETS_PERMISSION, + permission: NEWSROOM_WIDGETS_PERMISSION, zones: { - [EXAMPLE_ZONE_IDS.beforeProfile]: { + [NEWSROOM_ZONE_IDS.beforeProfile]: { allowed: PAGE_BLOCKS_ALLOWED, max: ZONE_BLOCKS_MAX, default: [ @@ -39,8 +39,8 @@ export const settingsPage = defineEditablePage({ title: "This notice lives in a zone", tone: "info", }, - id: "01JEXAMPLEZONESBEFORE00001", - type: "example:callout", + id: "01JNEWSROOMZONESBEFORE00001", + type: "newsroom:callout", }, { data: { @@ -60,8 +60,8 @@ export const settingsPage = defineEditablePage({ title: "Layout", }, }, - id: "01JEXAMPLEZONESBEFORE00002", - type: "example:features", + id: "01JNEWSROOMZONESBEFORE00002", + type: "newsroom:features", variant: "list", }, { @@ -70,13 +70,13 @@ export const settingsPage = defineEditablePage({ heading: "Blocks at the zone root", width: "prose", }, - id: "01JEXAMPLEZONESBEFORE00003", + id: "01JNEWSROOMZONESBEFORE00003", type: "core:text", }, ], }, - [EXAMPLE_ZONE_IDS.afterProfile]: { + [NEWSROOM_ZONE_IDS.afterProfile]: { allowed: PAGE_BLOCKS_ALLOWED, max: ZONE_BLOCKS_MAX, default: [ @@ -88,7 +88,7 @@ export const settingsPage = defineEditablePage({ heading: "Left column", width: "prose", }, - id: "01JEXAMPLEZONESCOL00000001", + id: "01JNEWSROOMZONESCOL00000001", type: "core:text", }, { @@ -98,17 +98,17 @@ export const settingsPage = defineEditablePage({ label: "Read about areas", title: "Right column", }, - id: "01JEXAMPLEZONESCOL00000002", + id: "01JNEWSROOMZONESCOL00000002", type: "core:cta", }, ], - id: "01JEXAMPLEZONESAREA0000001", + id: "01JNEWSROOMZONESAREA0000001", kind: "area", layout: { align: "stretch", columns: 2, gap: 16, justify: "start" }, }, { children: [], - id: "01JEXAMPLEZONESAREA0000002", + id: "01JNEWSROOMZONESAREA0000002", kind: "area", layout: { align: "stretch", columns: 2, gap: 16, justify: "start" }, }, @@ -120,13 +120,13 @@ export const settingsPage = defineEditablePage({ label: "Read the guide", title: "Content Zones", }, - id: "01JEXAMPLEZONESAFTERCTA001", + id: "01JNEWSROOMZONESAFTERCTA001", type: "core:cta", }, ], }, - [EXAMPLE_ZONE_IDS.sidebar]: { + [NEWSROOM_ZONE_IDS.sidebar]: { allowed: PAGE_SIDEBAR_BLOCKS_ALLOWED, max: ZONE_BLOCKS_MAX, default: [ @@ -136,20 +136,20 @@ export const settingsPage = defineEditablePage({ heading: "A narrower zone", width: "prose", }, - id: "01JEXAMPLEZONESSIDEBAR0001", + id: "01JNEWSROOMZONESSIDEBAR0001", type: "core:text", }, ], }, - [EXAMPLE_ZONE_IDS.beforeFooter]: { + [NEWSROOM_ZONE_IDS.beforeFooter]: { allowed: PAGE_BLOCKS_ALLOWED, max: ZONE_BLOCKS_MAX, }, }, }); -export interface ExampleStaffPermissions { +export interface NewsroomStaffPermissions { permissions: readonly { module: string; permission: string; @@ -161,11 +161,11 @@ export interface ExampleStaffPermissions { export const mayEditSettingsPage = ({ permissions, root, -}: ExampleStaffPermissions): boolean => +}: NewsroomStaffPermissions): boolean => root || permissions.some( entry => entry.plugin === manifest.id && - entry.module === EXAMPLE_WIDGETS_PERMISSION.module && - entry.permission === EXAMPLE_WIDGETS_PERMISSION.permission, + entry.module === NEWSROOM_WIDGETS_PERMISSION.module && + entry.permission === NEWSROOM_WIDGETS_PERMISSION.permission, ); diff --git a/plugins/example/src/content/article.ts b/plugins/newsroom/src/content/story.ts similarity index 91% rename from plugins/example/src/content/article.ts rename to plugins/newsroom/src/content/story.ts index dfe6ed0baf..3d76a61707 100644 --- a/plugins/example/src/content/article.ts +++ b/plugins/newsroom/src/content/story.ts @@ -2,20 +2,20 @@ import { defineContentType, field } from "@vitnode/core/content"; import { categoryContentType } from "./category"; -export const articleContentType = defineContentType({ - id: "example.article", - tableName: "example_articles", +export const storyContentType = defineContentType({ + id: "newsroom.story", + tableName: "newsroom_stories", fields: { title: field.text({ required: true, minLength: 3, maxLength: 200 }), // Derived from the title when the payload omits it, and never re-derived - // afterwards - renaming an article does not move its URL. + // afterwards - renaming a story does not move its URL. slug: field.slug({ source: "title" }), // `unique: true` is all it takes to get a unique index in the migration. code: field.text({ required: true, maxLength: 100, unique: true }), excerpt: field.textarea({ ai: { - action: "@vitnode/example:article.excerpt", + action: "newsroom:story.excerpt", mode: "suggestion", sourceFields: ["title", "code"], }, @@ -54,7 +54,7 @@ export const articleContentType = defineContentType({ reports: true, publicApi: { - path: "articles", + path: "stories", fields: [ "title", "slug", @@ -86,7 +86,7 @@ export const articleContentType = defineContentType({ titleField: "title", descriptionField: "excerpt", contentFields: ["title", "excerpt"], - pathTemplate: "/articles/{slug}", + pathTemplate: "/stories/{slug}", authorField: "author", }, @@ -118,9 +118,9 @@ export const articleContentType = defineContentType({ indexes: [{ on: ["status", "createdAt"] }], admin: { - // `/admin/content/example/articles` - plural, like the list it opens. The id + // `/admin/content/stories` - plural, like the list it opens. The id // stays singular because it names one record, and nobody types it. - path: "example/articles", + path: "newsroom/stories", titleField: "title", list: { columns: [ diff --git a/plugins/example/src/content/tag.ts b/plugins/newsroom/src/content/tag.ts similarity index 95% rename from plugins/example/src/content/tag.ts rename to plugins/newsroom/src/content/tag.ts index f9d8246cd8..a56bbea8ac 100644 --- a/plugins/example/src/content/tag.ts +++ b/plugins/newsroom/src/content/tag.ts @@ -3,8 +3,8 @@ import { defineContentType, field } from "@vitnode/core/content"; import { categoryContentType } from "./category"; export const tagContentType = defineContentType({ - id: "example.tag", - tableName: "example_tags", + id: "newsroom.tag", + tableName: "newsroom_tags", idStrategy: "uuid", localization: { defaultLocale: "en", fallback: "default" }, diff --git a/plugins/newsroom/src/database/articles.ts b/plugins/newsroom/src/database/articles.ts new file mode 100644 index 0000000000..699622a61a --- /dev/null +++ b/plugins/newsroom/src/database/articles.ts @@ -0,0 +1,11 @@ +import { createContentModel } from "@vitnode/core/content/server"; + +import { articleContentType } from "@/content/article"; + +import { newsroom_categories } from "./categories"; + +export const articleContent = createContentModel(articleContentType, { + references: { category: () => newsroom_categories.id }, +}); + +export const newsroom_articles = articleContent.table; diff --git a/plugins/newsroom/src/database/bulletins.ts b/plugins/newsroom/src/database/bulletins.ts new file mode 100644 index 0000000000..0639a96ab9 --- /dev/null +++ b/plugins/newsroom/src/database/bulletins.ts @@ -0,0 +1,11 @@ +import { createContentModel } from "@vitnode/core/content/server"; + +import { bulletinContentType } from "@/content/bulletin"; + +export const bulletinContent = createContentModel(bulletinContentType); + +// Two exports for a localized content type, not one. Drizzle Kit discovers each +// table from the export when it globs the built `dist/src/database/*.js`, so the +// translation table needs its own or the migration would be generated without it. +export const newsroom_bulletins = bulletinContent.table; +export const newsroom_bulletins_translations = bulletinContent.translationTable; diff --git a/plugins/newsroom/src/database/categories.ts b/plugins/newsroom/src/database/categories.ts new file mode 100644 index 0000000000..6f5a493f8b --- /dev/null +++ b/plugins/newsroom/src/database/categories.ts @@ -0,0 +1,7 @@ +import { createContentModel } from "@vitnode/core/content/server"; + +import { categoryContentType } from "@/content/category"; + +export const categoryContent = createContentModel(categoryContentType); + +export const newsroom_categories = categoryContent.table; diff --git a/plugins/newsroom/src/database/comments.ts b/plugins/newsroom/src/database/comments.ts new file mode 100644 index 0000000000..269b18bc71 --- /dev/null +++ b/plugins/newsroom/src/database/comments.ts @@ -0,0 +1,11 @@ +import { createContentModel } from "@vitnode/core/content/server"; + +import { commentContentType } from "@/content/comment"; + +import { newsroom_articles } from "./articles"; + +export const commentContent = createContentModel(commentContentType, { + references: { article: () => newsroom_articles.id }, +}); + +export const newsroom_comments = commentContent.table; diff --git a/plugins/newsroom/src/database/events.ts b/plugins/newsroom/src/database/events.ts new file mode 100644 index 0000000000..76302b43a9 --- /dev/null +++ b/plugins/newsroom/src/database/events.ts @@ -0,0 +1,24 @@ +import { createContentModel } from "@vitnode/core/content/server"; + +import { eventContentType } from "@/content/event"; + +import { newsroom_categories } from "./categories"; +import { newsroom_tags } from "./tags"; + +export const eventContent = createContentModel(eventContentType, { + references: { + category: () => newsroom_categories.id, + primaryTag: () => newsroom_tags.id, + tags: () => newsroom_tags.id, + }, +}); + +export const newsroom_events = eventContent.table; +export const newsroom_events_translations = eventContent.translationTable; +export const newsroom_events_tags = eventContent.advancedTables.junctions.tags; +export const newsroom_events_related_events = + eventContent.advancedTables.junctions.relatedEvents; +export const newsroom_events_gallery = + eventContent.advancedTables.junctions.gallery; +export const newsroom_events_sessions = + eventContent.advancedTables.repeatables.sessions; diff --git a/plugins/newsroom/src/database/explainers.ts b/plugins/newsroom/src/database/explainers.ts new file mode 100644 index 0000000000..8ee58ee75a --- /dev/null +++ b/plugins/newsroom/src/database/explainers.ts @@ -0,0 +1,38 @@ +import { createContentModel } from "@vitnode/core/content/server"; + +import { explainerContentType } from "@/content/explainer"; + +import { newsroom_categories } from "./categories"; +import { newsroom_tags } from "./tags"; + +export const explainerContent = createContentModel(explainerContentType, { + references: { + // A to-many relation needs a reference thunk exactly as a to-one does: + // its foreign key is `related_item_id` on the generated junction table + // rather than a column on the row, but the target is just as much a fact + // this module has to supply. + categories: () => newsroom_categories.id, + tags: () => newsroom_tags.id, + // `relatedExplainers` is deliberately absent. It is a `self: true` + // relation, and the engine resolves it from the table it is building: + // writing `() => explainerContent.table.id` here would reference + // the model inside its own initializer, and TypeScript resolves that by + // widening the whole model to `any` - silently taking every typed + // service, schema and column map with it. + }, +}); + +// Six exports, not one. Drizzle Kit discovers each table from its export when +// it globs the built `dist/src/database/*.js`, so a junction or child table +// without one would simply be missing from the migration. +export const newsroom_explainers = explainerContent.table; +export const newsroom_explainers_translations = + explainerContent.translationTable; +export const newsroom_explainers_categories = + explainerContent.advancedTables.junctions.categories; +export const newsroom_explainers_tags = + explainerContent.advancedTables.junctions.tags; +export const newsroom_explainers_related_explainers = + explainerContent.advancedTables.junctions.relatedExplainers; +export const newsroom_explainers_faq = + explainerContent.advancedTables.repeatables.faq; diff --git a/plugins/newsroom/src/database/letters.ts b/plugins/newsroom/src/database/letters.ts new file mode 100644 index 0000000000..e5a6bfad9b --- /dev/null +++ b/plugins/newsroom/src/database/letters.ts @@ -0,0 +1,7 @@ +import { createContentModel } from "@vitnode/core/content/server"; + +import { letterContentType } from "@/content/letter"; + +export const letterContent = createContentModel(letterContentType); + +export const newsroom_letters = letterContent.table; diff --git a/plugins/example/src/database/pages.ts b/plugins/newsroom/src/database/pages.ts similarity index 78% rename from plugins/example/src/database/pages.ts rename to plugins/newsroom/src/database/pages.ts index c59acad8ed..04557ba1ff 100644 --- a/plugins/example/src/database/pages.ts +++ b/plugins/newsroom/src/database/pages.ts @@ -4,4 +4,4 @@ import { pageContentType } from "@/content/page"; export const pageContent = createContentModel(pageContentType); -export const example_pages = pageContent.table; +export const newsroom_pages = pageContent.table; diff --git a/plugins/example/src/database/articles.ts b/plugins/newsroom/src/database/stories.ts similarity index 61% rename from plugins/example/src/database/articles.ts rename to plugins/newsroom/src/database/stories.ts index 97c6a8012d..2040987234 100644 --- a/plugins/example/src/database/articles.ts +++ b/plugins/newsroom/src/database/stories.ts @@ -1,10 +1,10 @@ import { createContentModel } from "@vitnode/core/content/server"; -import { articleContentType } from "@/content/article"; +import { storyContentType } from "@/content/story"; -import { example_categories } from "./categories"; +import { newsroom_categories } from "./categories"; -export const articleContent = createContentModel(articleContentType, { +export const storyContent = createContentModel(storyContentType, { // One thunk per `relation` field - a missing or extra key is a compile error, // and the thunk keeps circular content type references safe. // @@ -12,13 +12,13 @@ export const articleContent = createContentModel(articleContentType, { // is one files table in an installation, so the engine resolves // `core_files.id` itself and asking a plugin to name it would be a line of // boilerplate with one correct value. - references: { category: () => example_categories.id }, - moderationScope: { column: "category", family: "example.category" }, + references: { category: () => newsroom_categories.id }, + moderationScope: { column: "category", family: "newsroom.category" }, }); -export const example_articles = articleContent.table; +export const newsroom_stories = storyContent.table; // Two exports, not one. Drizzle Kit discovers each table from its export when it // globs the built `dist/src/database/*.js`, so the gallery's junction table // without one would simply be missing from the migration. -export const example_articles_gallery = - articleContent.advancedTables.junctions.gallery; +export const newsroom_stories_gallery = + storyContent.advancedTables.junctions.gallery; diff --git a/plugins/newsroom/src/database/tags.ts b/plugins/newsroom/src/database/tags.ts new file mode 100644 index 0000000000..d6b0a8782c --- /dev/null +++ b/plugins/newsroom/src/database/tags.ts @@ -0,0 +1,14 @@ +import { createContentModel } from "@vitnode/core/content/server"; + +import { tagContentType } from "@/content/tag"; + +import { newsroom_categories } from "./categories"; + +export const tagContent = createContentModel(tagContentType, { + references: { category: () => newsroom_categories.id }, +}); + +export const newsroom_tags = tagContent.table; +export const newsroom_tags_translations = tagContent.translationTable; +export const newsroom_tags_related_tags = + tagContent.advancedTables.junctions.relatedTags; diff --git a/plugins/newsroom/src/locales/en.json b/plugins/newsroom/src/locales/en.json new file mode 100644 index 0000000000..63b3a0d140 --- /dev/null +++ b/plugins/newsroom/src/locales/en.json @@ -0,0 +1,540 @@ +{ + "newsroom": { + "home": { + "api": "Your plugin's API answered:", + "desc": "This page ships inside the plugin and is served by the app that installed it.", + "title": "Hello from your plugin" + }, + "title": "Newsroom", + "content": { + "article": { + "label": "{count, plural, one {Article} other {Articles}}", + "title": "Articles", + "desc": "News and updates for your community.", + "fields": { + "title": "Title", + "slug": "Slug", + "body": "Body", + "updatedAt": "Updated", + "status": "Status", + "author": "Author", + "category": "Category" + } + }, + "category": { + "label": "{count, plural, one {Category} other {Categories}}", + "title": "Categories", + "desc": "Sections that group the articles.", + "fields": { + "name": "Name", + "slug": "Slug", + "updatedAt": "Updated", + "createdAt": "Created" + } + }, + "comment": { + "label": "{count, plural, one {Comment} other {Comments}}", + "title": "Comments", + "desc": "What readers say under the articles.", + "fields": { + "slug": "Link", + "body": "Comment", + "author": "Author", + "article": "Article", + "parent": "Answers" + } + }, + "story": { + "label": "{count, plural, one {Story} other {Stories}}", + "title": "Stories", + "desc": "Reported stories with files, scheduling, live editing and SEO.", + "fields": { + "title": "Title", + "code": "Reference code", + "excerpt": "Excerpt", + "views": "Views", + "featured": "Featured", + "animation": "Animation", + "author": "Author", + "category": "Category", + "updatedAt": "Updated" + } + }, + "tag": { + "label": "{count, plural, one {Tag} other {Tags}}", + "title": "Tags", + "desc": "Keyed by uuid, so their ids give nothing away.", + "fields": { + "name": "Name", + "slug": "Slug", + "category": "Category", + "relatedTags": "Related tags", + "updatedAt": "Updated" + } + }, + "event": { + "label": "{count, plural, one {Event} other {Events}}", + "title": "Events", + "desc": "Keyed by bigint. Ids too large for a JavaScript number arrive as exact strings.", + "fields": { + "title": "Title", + "slug": "Slug", + "body": "Description", + "primaryTag": "Main tag", + "category": "Category", + "tags": "Tags", + "relatedEvents": "Related events", + "sessions": "Sessions", + "gallery": "Gallery", + "updatedAt": "Updated" + } + }, + "letter": { + "label": "{count, plural, one {Letter} other {Letters}}", + "title": "Letters", + "desc": "Letters to the editor, written and edited by signed-in members.", + "fields": { + "title": "Title", + "slug": "Slug", + "body": "Letter", + "author": "Author", + "publishedAt": "Published", + "updatedAt": "Updated", + "desk": "Desk" + } + }, + "page": { + "label": "{count, plural, one {Page} other {Pages}}", + "title": "Pages", + "desc": "Pages built from blocks.", + "fields": { + "title": "Title", + "slug": "Slug", + "content": "Content" + } + } + }, + "articles": { + "title": "News", + "desc": "The latest articles from our team.", + "empty": "No articles yet. Check back soon.", + "error": "The articles could not be loaded. Try again in a moment.", + "pagination": "Article pages", + "form": { + "title": "Title", + "body": "Article" + }, + "new": { + "title": "Write an article", + "submit": "Publish article", + "success": { + "title": "Article published", + "desc": "Readers can see it now." + }, + "draft": { + "title": "Draft saved", + "desc": "It is not public yet, so only you and the site's staff can see it." + }, + "pending": { + "title": "Sent for approval", + "desc": "A moderator reviews it before readers can see it." + } + }, + "edit": { + "title": "Edit article", + "submit": "Save changes", + "view": "View article", + "success": { + "title": "Article saved", + "desc": "\"{title}\" is up to date." + } + }, + "state": { + "unauthenticated": { + "title": "Sign in to edit", + "action": "Sign in" + }, + "forbidden": { + "title": "You can't edit this article", + "desc": "Only its author and moderators can edit it." + }, + "not_found": { + "title": "Article not found", + "desc": "It does not exist, or you cannot see it." + } + }, + "edit_link": "Edit", + "report_type": "article", + "search_label": "Search articles", + "sort_label": "Sort articles", + "sort": { + "newest": "Newest first", + "oldest": "Oldest first", + "title": "Title A–Z" + }, + "no_results": "No articles match your search.", + "latest": { + "title": "Latest articles", + "all": "All news", + "empty": "No other articles yet.", + "error": "The latest articles could not be loaded.", + "loading": "Loading the latest articles" + } + }, + "comments": { + "title": "{count, plural, =0 {Comments} one {# comment} other {# comments}}", + "empty": "No comments yet. Be the first.", + "loading": "Loading comments", + "retry": "Try again", + "load_more": "Load more comments", + "load_failed": { + "title": "Could not load comments", + "desc": "Check your connection and try again." + }, + "sign_in": "Sign in to comment", + "form": { + "label": "Your comment", + "submit": "Post comment", + "required": "Write a comment first.", + "edit_label": "Edit your comment", + "save": "Save", + "cancel": "Cancel", + "reply_label": "Reply to {name}" + }, + "created": { + "title": "Comment posted", + "desc": "Your comment is below the article." + }, + "draft": { + "title": "Comment saved as a draft", + "desc": "It is not public yet, so it does not appear below the article." + }, + "pending": { + "title": "Your comment is waiting for a moderator", + "desc": "A moderator reviews it before readers can see it." + }, + "someone": "Deleted user", + "edit": "Edit", + "edited": { + "title": "Comment saved", + "desc": "Your changes are live." + }, + "edit_pending": { + "title": "Your changes are waiting for a moderator", + "desc": "Readers see the earlier text until a moderator approves." + }, + "reply": "Reply", + "removed": "This comment was removed.", + "truncated": "This conversation is long, so some deeper replies are not shown." + }, + "admin": { + "nav": { + "overview": "Overview" + }, + "overview": { + "title": "Newsroom", + "desc": "A plugin page inside the AdminCP, shipped by the newsroom plugin and served by the app that installed it.", + "points": { + "shell": "The sidebar, the breadcrumb and the admin session guard around this page are the AdminCP's - the route declared area: \"admin\" and nothing else.", + "path": "The URL is the one the route spells out in full. An area chooses the frame; it never adds a prefix.", + "nav": "The sidebar entry that led here is a separate declaration. A plugin page may have no entry, and an entry may point anywhere." + }, + "editor": { + "title": "Editor showcase", + "desc": "Stored editor HTML rendered with EditorContent - one of everything, so a change to the tiptap extensions or to the .tiptap styles shows up here first." + }, + "form": { + "title": "Editor in a form", + "desc": "AutoFormEditor inside an AutoForm. Type / for blocks, use + for panels and tables, and press Ctrl or Cmd + Enter to save.", + "summary": { + "label": "Summary" + }, + "description": { + "label": "Description", + "desc": "Steps, logs and acceptance criteria. Nothing is stored - this form only shows what the editor sends.", + "required": "Describe what happened" + }, + "comment": { + "label": "Comment", + "placeholder": "Leave a note for the assignee…" + }, + "submit": "Save issue", + "success": { + "title": "Issue saved", + "desc": "{words, plural, one {# word} other {# words}} in the description." + } + } + } + }, + "containers": { + "desks": { + "label": "{count, plural, one {Desk} other {Desks}}", + "title": "Desks", + "desc": "The desks readers send their letters to. Drag to reorder or nest desks.", + "fields": { + "description": "Description", + "color": "Color", + "icon": "Icon", + "locked": "Locked" + } + } + }, + "guide": { + "title": "Plugin routing guide", + "desc": "A nested route shipped by the newsroom plugin, served by the app that installed it.", + "index": { + "intro": "This page and the frame around it are two routes declared in one plugin's routes.ts. Neither was copied into the application - both are lazily imported from the plugin's own build output.", + "points": { + "nested": "A layout claims no URL; this index page claims the layout's.", + "messages": "The layout declares the messages both pages render in, so they are warmed alongside the code.", + "breadcrumb": "The breadcrumb above comes from the layout, next to the component that needs it." + } + }, + "topic": { + "from_index": "You arrived here from the guide index - the route's search contract recognised it, and everything else in the query string was dropped." + } + }, + "browse": { + "title": "Browse", + "desc": "A paginated page whose route declares an eager search schema, so ?page=999 is clamped before anything renders.", + "pagination": "Pagination", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {of}" + }, + "events": { + "sessions": "Sessions" + }, + "moderation": { + "category": { + "label": "Categories", + "desc": "Limit this permission to stories in some categories." + } + }, + "desks": { + "title": "Desks", + "desc": "Pick the desk that fits your letter, or write a new one.", + "tree": "All desks", + "children": "Desks inside", + "letters": "Letters", + "new_letter": "Write a letter", + "pagination": "Letter pages", + "newest": "Newest letters", + "older": "Older letters", + "empty": { + "title": "No desks yet", + "desc": "An admin has not created any desks. Once they do, they show up here.", + "home": "Back to home" + }, + "empty_desk": { + "title": "Nothing here yet", + "desc": "Be the first to write to this desk." + }, + "not_found": { + "title": "Desk not found", + "desc": "It may have been removed, or the link is wrong.", + "back": "See all desks" + }, + "latest": { + "title": "Latest letters", + "all": "All letters", + "empty": "Nothing posted yet.", + "error": "Couldn't load the latest letters.", + "loading": "Loading letters..." + } + }, + "letters": { + "new": { + "title": "Write a letter", + "desc": "Share a question, a correction or an idea with the newsroom. Everyone can read it as soon as you send it.", + "submit": "Send letter", + "no_desks": { + "title": "No desks yet", + "desc": "Letters go to a desk, and an admin has not created one yet. Check back soon.", + "action": "Browse desks" + } + }, + "edit": { + "title": "Edit letter", + "desc": "Changes are saved as a new revision, so nothing you replace is lost.", + "submit": "Save changes", + "view": "View letter", + "success": { + "title": "Changes saved", + "desc": "\"{title}\" now shows your latest edits." + } + }, + "detail": { + "actions": "Letter actions", + "edit": "Edit", + "new": "Write a letter", + "created": { + "title": "Letter sent", + "desc": "It is live. Use Edit whenever you want to change it." + }, + "desk": "Desk", + "desks": "Desks", + "posted_by": "Posted by", + "deleted_user": "Deleted user", + "report_type": "letter", + "hidden": { + "title": "This letter is hidden", + "desc": "A moderator hid it, so readers can't see it. You can, because you wrote it or moderate this desk." + } + }, + "form": { + "desk": { + "label": "Desk", + "desc": "Pick where the letter belongs. You can't move it later.", + "placeholder": "Choose a desk", + "required": "Pick a desk" + }, + "title": { + "label": "Title", + "min": "Use at least 3 characters", + "max": "Keep it under 200 characters" + }, + "body": { + "label": "Letter", + "desc": "Type / for headings, lists and more.", + "required": "Write your letter" + } + }, + "state": { + "unauthenticated": { + "title": "Sign in to continue", + "desc": "You need an account to write or edit a letter.", + "action": "Sign in" + }, + "forbidden": { + "title": "You can't edit this letter", + "desc": "Only its author or a moderator can change it." + }, + "not_found": { + "title": "Letter not found", + "desc": "It may have been removed, or the link is wrong." + }, + "back": "Write a new letter" + }, + "list": { + "title": "Letters", + "desc": "Questions, corrections and ideas from readers, newest first.", + "new": "Write a letter", + "search_label": "Search letters", + "search_placeholder": "Search by title", + "desk_label": "Desk", + "all_desks": "All desks", + "sort_label": "Sort by", + "sort": { + "newest": "Newest", + "oldest": "Oldest", + "title": "Title (A-Z)" + }, + "pagination": "Letter pages", + "deleted_user": "Deleted user", + "empty": { + "title": "No letters yet", + "desc": "Be the first to write to the newsroom." + }, + "no_results": { + "title": "No letters match", + "desc": "Try another search term or desk.", + "clear": "Clear filters" + }, + "error": { + "title": "Couldn't load letters", + "desc": "Something went wrong on our side. Refresh the page to try again." + } + } + }, + "stories": { + "published": "Published", + "faq": "Frequently asked questions" + } + }, + "newsroom:article": "Articles", + "newsroom:article:can_view": "View articles", + "newsroom:article:can_create": "Create articles", + "newsroom:article:can_edit": "Edit articles", + "newsroom:article:can_delete": "Delete articles", + "newsroom:article:can_publish": "Publish and unpublish articles", + "newsroom:category": "Categories", + "newsroom:category:can_view": "View categories", + "newsroom:category:can_create": "Create categories", + "newsroom:category:can_edit": "Edit categories", + "newsroom:category:can_delete": "Delete categories", + "newsroom:comment": "Comments", + "newsroom:comment:can_view": "View comments", + "newsroom:comment:can_create": "Create comments", + "newsroom:comment:can_edit": "Edit comments", + "newsroom:comment:can_delete": "Delete comments", + "newsroom:comment:can_publish": "Publish and unpublish comments", + "newsroom:comment:can_hide": "Hide and unhide comments", + "newsroom:story": "Stories", + "newsroom:story:can_view": "View stories", + "newsroom:story:can_create": "Create stories", + "newsroom:story:can_edit": "Edit stories", + "newsroom:story:can_delete": "Delete stories", + "newsroom:story:can_publish": "Publish and unpublish stories", + "newsroom:story:can_restore": "Restore an earlier version of a story", + "newsroom:tag": "Tags", + "newsroom:tag:can_view": "View tags", + "newsroom:tag:can_create": "Create tags", + "newsroom:tag:can_edit": "Edit tags", + "newsroom:tag:can_delete": "Delete tags", + "newsroom:tag:can_publish": "Publish and unpublish tags", + "newsroom:tag:can_restore": "Restore an earlier version of a tag", + "newsroom:tag:can_hide": "Hide and unhide tags", + "newsroom:event": "Events", + "newsroom:event:can_view": "View events", + "newsroom:event:can_create": "Create events", + "newsroom:event:can_edit": "Edit events", + "newsroom:event:can_delete": "Delete events", + "newsroom:event:can_publish": "Publish and unpublish events", + "newsroom:event:can_restore": "Restore an earlier version of an event", + "newsroom:event:can_hide": "Hide and unhide events", + "newsroom:letter": "Letters", + "newsroom:letter:can_view": "View letters", + "newsroom:letter:can_create": "Create letters", + "newsroom:letter:can_edit": "Edit letters", + "newsroom:letter:can_delete": "Delete letters", + "newsroom:letter:can_publish": "Publish and unpublish letters", + "newsroom:letter:can_restore": "Restore an earlier version of a letter", + "newsroom:letter:can_hide": "Hide and unhide letters", + "newsroom:newsroom_desks": "Desks", + "newsroom:newsroom_desks:can_view": "View desks", + "newsroom:newsroom_desks:can_create": "Create desks", + "newsroom:newsroom_desks:can_edit": "Edit and move desks", + "newsroom:newsroom_desks:can_delete": "Delete desks", + "ai_actions": { + "newsroom": { + "story_excerpt": { + "title": "Suggest story teaser", + "description": "Suggests a teaser for a newsroom story." + } + } + }, + "newsroom:article:can_restore": "Restore an earlier version of an article", + "newsroom:explainer": "Explainers", + "newsroom:explainer:can_view": "View explainers", + "newsroom:explainer:can_create": "Create explainers", + "newsroom:explainer:can_edit": "Edit explainers", + "newsroom:explainer:can_delete": "Delete explainers", + "newsroom:explainer:can_publish": "Publish and unpublish explainers", + "newsroom:explainer:can_restore": "Restore an earlier version of an explainer", + "newsroom:bulletin": "Bulletins", + "newsroom:bulletin:can_view": "View bulletins", + "newsroom:bulletin:can_create": "Create bulletins", + "newsroom:bulletin:can_edit": "Edit bulletins", + "newsroom:bulletin:can_delete": "Delete bulletins", + "newsroom:bulletin:can_publish": "Publish and unpublish bulletins", + "newsroom:bulletin:can_restore": "Restore an earlier version of a bulletin", + "newsroom:page": "Pages", + "newsroom:page:can_view": "View pages", + "newsroom:page:can_create": "Create pages", + "newsroom:page:can_edit": "Edit pages", + "newsroom:page:can_delete": "Delete pages", + "newsroom:page:can_publish": "Publish and unpublish pages", + "newsroom:widgets": "Widgets", + "newsroom:widgets:can_edit": "Edit page widgets" +} diff --git a/plugins/example/src/locales/index.ts b/plugins/newsroom/src/locales/index.ts similarity index 59% rename from plugins/example/src/locales/index.ts rename to plugins/newsroom/src/locales/index.ts index 6e61a48826..f8b7839303 100644 --- a/plugins/example/src/locales/index.ts +++ b/plugins/newsroom/src/locales/index.ts @@ -1,9 +1,5 @@ import type { LocaleMessagesMap } from "@vitnode/core/lib/i18n/types"; -/** - * Every language this plugin ships. Add a file next to this one and a line - * here to add another; apps pick it up with no copy step. - */ const messages: LocaleMessagesMap = { en: async () => await import("./en.json", { with: { type: "json" } }), }; diff --git a/plugins/example/src/manifest.gen.ts b/plugins/newsroom/src/manifest.gen.ts similarity index 65% rename from plugins/example/src/manifest.gen.ts rename to plugins/newsroom/src/manifest.gen.ts index 9c388e423e..a23a415325 100644 --- a/plugins/example/src/manifest.gen.ts +++ b/plugins/newsroom/src/manifest.gen.ts @@ -11,16 +11,12 @@ import { pluginInfo } from "./plugin-info" export const manifest = { - id: "@vitnode/example", - title: pluginInfo.title ?? "@vitnode/example", + id: "newsroom", + title: pluginInfo.title ?? "newsroom", icon: pluginInfo.icon ?? null, - description: "Reference plugin exercising the VitNode Content Engine end to end.", - author: { - name: "VitNode", - email: "contact@vitnode.com", - url: "https://vitnode.com", - }, - license: "MIT", - version: "2.0.0-canary.13", + description: "Newsroom: the VitNode tutorial plugin, grown into a tour of the Content Engine.", + author: null, + license: null, + version: "0.1.0", updates: pluginInfo.updates ?? null, } as const diff --git a/plugins/example/src/pages/admin-example-editor-form.tsx b/plugins/newsroom/src/pages/admin-editor-form.tsx similarity index 93% rename from plugins/example/src/pages/admin-example-editor-form.tsx rename to plugins/newsroom/src/pages/admin-editor-form.tsx index 742bf2a9ae..8bcbdf3646 100644 --- a/plugins/example/src/pages/admin-example-editor-form.tsx +++ b/plugins/newsroom/src/pages/admin-editor-form.tsx @@ -14,8 +14,8 @@ const SAMPLE_DESCRIPTION = ` <ul data-type="taskList"><li data-type="taskItem" data-checked="true"><p>Checkout falls back to the undiscounted total on a timeout</p></li><li data-type="taskItem" data-checked="false"><p>The customer sees an error with a retry button instead of a blank page</p></li></ul> `; -export const AdminExampleEditorForm = () => { - const t = useTranslations("@vitnode/example.admin.overview.form"); +export const AdminEditorForm = () => { + const t = useTranslations("newsroom.admin.overview.form"); const formSchema = z.object({ summary: z .string() @@ -31,13 +31,13 @@ export const AdminExampleEditorForm = () => { return ( <section - aria-labelledby="admin-example-editor-form" + aria-labelledby="admin-editor-form" className="flex flex-col gap-4" > <header className="flex flex-col gap-2"> <h2 className="text-xl font-semibold tracking-tight text-balance" - id="admin-example-editor-form" + id="admin-editor-form" > {t("title")} </h2> diff --git a/plugins/example/src/pages/admin-example-page.tsx b/plugins/newsroom/src/pages/admin-overview-page.tsx similarity index 82% rename from plugins/example/src/pages/admin-example-page.tsx rename to plugins/newsroom/src/pages/admin-overview-page.tsx index 7f3442ab3e..b0307867c3 100644 --- a/plugins/example/src/pages/admin-example-page.tsx +++ b/plugins/newsroom/src/pages/admin-overview-page.tsx @@ -3,11 +3,11 @@ import { EditorContent } from "@vitnode/core/components/ui/editor-content"; import { definePluginRoute } from "@vitnode/core/routing"; import { useTranslations } from "use-intl"; -import { AdminExampleEditorForm } from "./admin-example-editor-form"; +import { AdminEditorForm } from "./admin-editor-form"; import { editorShowcaseHtml } from "./editor-showcase"; -const AdminExamplePage = () => { - const t = useTranslations("@vitnode/example.admin.overview"); +const AdminOverviewPage = () => { + const t = useTranslations("newsroom.admin.overview"); const { emojis } = useEditorConfig(); return ( @@ -42,23 +42,23 @@ const AdminExamplePage = () => { </div> </section> - <AdminExampleEditorForm /> + <AdminEditorForm /> </div> ); }; -const AdminExampleBreadcrumb = () => { - const t = useTranslations("@vitnode/example.admin.overview"); +const AdminOverviewBreadcrumb = () => { + const t = useTranslations("newsroom.admin.overview"); return <span>{t("title")}</span>; }; export const route = definePluginRoute({ - breadcrumb: AdminExampleBreadcrumb, + breadcrumb: AdminOverviewBreadcrumb, // Inherited from the host's `_admin` route, which declares it once for the // whole panel - restated here because a plugin cannot rely on an application // having done so, and an AdminCP page must never be indexed. head: () => ({ robots: "noindex, nofollow" }), }); -export default AdminExamplePage; +export default AdminOverviewPage; diff --git a/plugins/newsroom/src/pages/article-edit-page.tsx b/plugins/newsroom/src/pages/article-edit-page.tsx new file mode 100644 index 0000000000..b89b4947c6 --- /dev/null +++ b/plugins/newsroom/src/pages/article-edit-page.tsx @@ -0,0 +1,190 @@ +import type { AutoFormOnSubmit } from "@vitnode/core/components/form/auto-form"; + +import { useQueryClient } from "@tanstack/react-query"; +import { buttonVariants } from "@vitnode/core/components/ui/button"; +import { + definePluginRoute, + type PluginRoutePageProps, +} from "@vitnode/core/routing"; +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { useState } from "react"; +import { toast } from "sonner"; +import { useTranslations } from "use-intl"; + +import { manifest } from "@/manifest.gen"; + +import { + ARTICLE_FORM_FIELDS, + ArticleForm, + type ArticleFormSchema, +} from "./article-form"; + +// Answers only for the author and moderators, drafts included. +const fetchEditableArticle = async (id: number) => + await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/news", + path: "/{id}/edit", + args: { params: { id } }, + }); + +const loadEditableArticle = async (param: string) => { + const id = Number(param); + if (!Number.isSafeInteger(id) || id < 1) + return { state: "notFound" as const }; + + const res = await fetchEditableArticle(id); + if (res.status === 200) { + return { record: await res.json(), state: "ready" as const }; + } + if (res.status === 401) return { id, state: "unauthenticated" as const }; + if (res.status === 403) return { state: "forbidden" as const }; + if (res.status === 404) return { state: "notFound" as const }; + + // A server failure is not "not found": let the app's error page show it. + throw new Error(`Loading article ${id} for editing failed.`); +}; + +type ArticleEditData = Awaited<ReturnType<typeof loadEditableArticle>>; + +type EditableArticle = Extract<ArticleEditData, { state: "ready" }>["record"]; + +export const route = definePluginRoute({ + load: async ({ params }) => await loadEditableArticle(params.id), + + head: ({ t }) => ({ + robots: "noindex, nofollow", + title: t("newsroom.articles.edit.title"), + }), +}); + +const ArticleEditForm = ({ record }: { record: EditableArticle }) => { + const t = useTranslations("newsroom.articles.edit"); + const queryClient = useQueryClient(); + const [current, setCurrent] = useState({ + slug: record.slug, + status: record.status, + }); + // AutoForm resets an untouched form to the defaults it renders with, so the + // defaults follow every save. + const [defaults, setDefaults] = useState({ + body: record.values.body, + title: record.values.title, + }); + const write = useContentPublicWrite({ + fields: ARTICLE_FORM_FIELDS, + latestVersion: async () => { + const res = await fetchEditableArticle(record.id); + + return res.status === 200 ? (await res.json()).version : null; + }, + uniqueField: "title", + version: record.version, + }); + + const onSubmit: AutoFormOnSubmit<ArticleFormSchema> = async ( + values, + form, + ) => { + const updated = await write.submit( + form, + async expectedVersion => + await fetcher({ + plugin: manifest.id, + method: "patch", + module: "content/news", + path: "/{id}", + args: { + params: { id: record.id }, + body: { values, expectedVersion }, + }, + }), + ); + if (!updated) return; + + setCurrent({ slug: updated.slug, status: updated.status }); + setDefaults(values); + form.reset(values); + await queryClient.invalidateQueries({ + queryKey: [manifest.id, "articles"], + }); + + toast.success(t("success.title"), { + description: t("success.desc", { title: values.title }), + }); + }; + + return ( + <> + {write.conflict} + <ArticleForm + defaultValues={defaults} + onSubmit={onSubmit} + submitLabel={t("submit")} + /> + {current.status === "published" && current.slug !== null ? ( + <HrefLink + className={buttonVariants({ + className: "self-start", + variant: "link", + })} + href={`/news/${current.slug}`} + > + {t("view")} + </HrefLink> + ) : null} + </> + ); +}; + +const ArticleEditPage = ({ + loaderData, + params, +}: PluginRoutePageProps<ArticleEditData>) => { + const t = useTranslations("newsroom.articles"); + + if (loaderData.state === "unauthenticated") { + return ( + <div className="container mx-auto flex max-w-3xl flex-col gap-4 px-4 py-8"> + <h1 className="text-2xl font-semibold text-balance"> + {t("state.unauthenticated.title")} + </h1> + <HrefLink + className={buttonVariants({ className: "self-start" })} + href={`/login?returnTo=${encodeURIComponent(`/news/${loaderData.id}/edit`)}`} + > + {t("state.unauthenticated.action")} + </HrefLink> + </div> + ); + } + + if (loaderData.state !== "ready") { + const key = loaderData.state === "forbidden" ? "forbidden" : "not_found"; + + return ( + <div className="container mx-auto flex max-w-3xl flex-col gap-2 px-4 py-8"> + <h1 className="text-2xl font-semibold text-balance"> + {t(`state.${key}.title`)} + </h1> + <p className="text-muted-foreground leading-relaxed"> + {t(`state.${key}.desc`)} + </p> + </div> + ); + } + + return ( + <div className="container mx-auto flex max-w-3xl flex-col gap-6 px-4 py-8"> + <h1 className="text-3xl font-semibold tracking-tight text-balance"> + {t("edit.title")} + </h1> + <ArticleEditForm key={params.id} record={loaderData.record} /> + </div> + ); +}; + +export default ArticleEditPage; diff --git a/plugins/newsroom/src/pages/article-form.tsx b/plugins/newsroom/src/pages/article-form.tsx new file mode 100644 index 0000000000..8e630b2860 --- /dev/null +++ b/plugins/newsroom/src/pages/article-form.tsx @@ -0,0 +1,63 @@ +import { + AutoForm, + type AutoFormOnSubmit, +} from "@vitnode/core/components/form/auto-form"; +import { AutoFormEditor } from "@vitnode/core/components/form/fields/editor"; +import { AutoFormInput } from "@vitnode/core/components/form/fields/input"; +import { + isRichTextEmpty, + type RichTextDocument, + zodRichTextDocument, +} from "@vitnode/core/content"; +import { useTranslations } from "use-intl"; +import { z } from "zod"; + +/** The fields the form renders, so server errors on them show in place. */ +export const ARTICLE_FORM_FIELDS = ["title", "body"] as const; + +export interface ArticleFormValues { + body: RichTextDocument; + title: string; +} + +const createArticleFormSchema = (defaults: ArticleFormValues) => + z.object({ + title: z.string().trim().min(3).max(200).default(defaults.title), + body: zodRichTextDocument + .refine(doc => !isRichTextEmpty(doc)) + .default(defaults.body), + }); + +export type ArticleFormSchema = ReturnType<typeof createArticleFormSchema>; + +export const ArticleForm = ({ + defaultValues, + onSubmit, + submitLabel, +}: { + defaultValues: ArticleFormValues; + onSubmit: AutoFormOnSubmit<ArticleFormSchema>; + submitLabel: string; +}) => { + const t = useTranslations("newsroom.articles.form"); + + return ( + <AutoForm + fields={[ + { + id: "title", + component: props => <AutoFormInput {...props} label={t("title")} />, + }, + { + id: "body", + component: props => ( + <AutoFormEditor {...props} format="json" label={t("body")} /> + ), + }, + ]} + formSchema={createArticleFormSchema(defaultValues)} + onSubmit={onSubmit} + submitButtonProps={{ children: submitLabel, className: "self-start" }} + /> + ); +}; diff --git a/plugins/newsroom/src/pages/article-list.ts b/plugins/newsroom/src/pages/article-list.ts new file mode 100644 index 0000000000..0ab834ff18 --- /dev/null +++ b/plugins/newsroom/src/pages/article-list.ts @@ -0,0 +1,47 @@ +import type { ContentListSearch } from "@vitnode/core/tanstack/content"; + +import { + contentListQueryOptions, + defineContentList, +} from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +import { manifest } from "@/manifest.gen"; + +/** `/news`: published articles, newest first, 10 a page. */ +export const articleList = defineContentList({ + defaultSort: "newest", + pageSize: 10, + sorts: { + newest: { order: "desc", orderBy: "publishedAt" }, + oldest: { order: "asc", orderBy: "publishedAt" }, + title: { order: "asc", orderBy: "title" }, + }, +}); + +export type ArticleListSearch = ContentListSearch< + (typeof articleList.sorts)[number] +>; + +export const articlesQueryOptions = (request: { + locale: string; + search: ArticleListSearch; +}) => + contentListQueryOptions({ + ...request, + queryKey: [manifest.id, "articles"], + fetch: async ({ search }) => { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/news", + path: "/", + args: { query: articleList.apiQuery(search) }, + }); + if (res.status !== 200) { + throw new Error(`Loading articles answered ${res.status}.`); + } + + return await res.json(); + }, + }); diff --git a/plugins/newsroom/src/pages/article-new-page.tsx b/plugins/newsroom/src/pages/article-new-page.tsx new file mode 100644 index 0000000000..c35a89f4fa --- /dev/null +++ b/plugins/newsroom/src/pages/article-new-page.tsx @@ -0,0 +1,91 @@ +import type { AutoFormOnSubmit } from "@vitnode/core/components/form/auto-form"; + +import { useQueryClient } from "@tanstack/react-query"; +import { emptyRichTextDocument } from "@vitnode/core/content"; +import { definePluginRoute } from "@vitnode/core/routing"; +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { useHrefNavigate } from "@vitnode/core/tanstack/link"; +import { toast } from "sonner"; +import { useTranslations } from "use-intl"; + +import { manifest } from "@/manifest.gen"; + +import { + ARTICLE_FORM_FIELDS, + ArticleForm, + type ArticleFormSchema, +} from "./article-form"; + +export const route = definePluginRoute({ + head: ({ t }) => ({ + robots: "noindex, nofollow", + title: t("newsroom.articles.new.title"), + }), +}); + +const ArticleNewPage = () => { + const t = useTranslations("newsroom.articles.new"); + const navigate = useHrefNavigate(); + const queryClient = useQueryClient(); + const write = useContentPublicWrite({ + fields: ARTICLE_FORM_FIELDS, + uniqueField: "title", + }); + + const onSubmit: AutoFormOnSubmit<ArticleFormSchema> = async ( + values, + form, + ) => { + const record = await write.submit( + form, + async () => + await fetcher({ + plugin: manifest.id, + method: "post", + module: "content/news", + path: "/", + args: { body: { values } }, + }), + ); + if (!record) return; + + await queryClient.invalidateQueries({ + queryKey: [manifest.id, "articles"], + }); + + // Waits for a moderator. Its public page answers 404 until approval. + if (record.approval?.status === "pending") { + toast.info(t("pending.title"), { description: t("pending.desc") }); + await navigate(`/news/${record.id}/edit`); + + return; + } + + // A draft nobody has to review. It stays private, so open its edit page. + if (record.status !== "published") { + toast.info(t("draft.title"), { description: t("draft.desc") }); + await navigate(`/news/${record.id}/edit`); + + return; + } + + toast.success(t("success.title"), { description: t("success.desc") }); + await navigate(`/news/${record.slug}`); + }; + + return ( + <div className="container mx-auto flex max-w-3xl flex-col gap-6 px-4 py-8"> + <h1 className="text-3xl font-semibold tracking-tight text-balance"> + {t("title")} + </h1> + <ArticleForm + defaultValues={{ body: emptyRichTextDocument(), title: "" }} + onSubmit={onSubmit} + submitLabel={t("submit")} + /> + </div> + ); +}; + +export default ArticleNewPage; diff --git a/plugins/newsroom/src/pages/article-page.tsx b/plugins/newsroom/src/pages/article-page.tsx new file mode 100644 index 0000000000..9277dd6c5f --- /dev/null +++ b/plugins/newsroom/src/pages/article-page.tsx @@ -0,0 +1,147 @@ +import type { PluginRoutePageProps } from "@vitnode/core/routing"; + +import { DateFormat } from "@vitnode/core/components/date-format"; +import { RichTextContent } from "@vitnode/core/components/rich-text"; +import { buttonVariants } from "@vitnode/core/components/ui/button"; +import { contentTarget, zodRichTextDocument } from "@vitnode/core/content"; +import { + contentDeliveryPage, + contentDeliveryPageHead, +} from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { ReportButton } from "@vitnode/core/tanstack/moderation"; +import { defineRoute } from "@vitnode/core/tanstack/plugin-routes"; +import { useTranslations } from "use-intl"; +import { z } from "zod"; + +import { articleContentType } from "@/content/article"; +import { manifest } from "@/manifest.gen"; + +import { articlesQueryOptions } from "./article-list"; +import { useArticlePermissions } from "./article-permissions"; +import { commentsQueryOptions } from "./comment-data"; +import { CommentSection } from "./comment-section"; +import { LatestArticles } from "./latest-articles"; + +const zodArticle = z.object({ + body: zodRichTextDocument, + id: z.number(), + publishedAt: z.string().nullable(), + slug: z.string(), + title: z.string(), +}); + +const loadArticle = async (slug: string) => { + const [resolution, detail] = await Promise.all([ + fetcher({ + plugin: manifest.id, + method: "get", + module: "content/news", + path: "/delivery/resolve/{slug}", + args: { params: { slug: encodeURIComponent(slug) } }, + }), + fetcher({ + plugin: manifest.id, + method: "get", + module: "content/news", + path: "/{slug}", + args: { params: { slug: encodeURIComponent(slug) } }, + }), + ]); + + if (resolution.status !== 200) { + throw new Error( + `Resolving the article "${slug}" answered ${resolution.status}.`, + ); + } + + return contentDeliveryPage({ + item: detail.status === 200 ? zodArticle.parse(await detail.json()) : null, + resolution: await resolution.json(), + }); +}; + +type ArticlePageData = Awaited<ReturnType<typeof loadArticle>>; + +export const route = defineRoute({ + load: async ({ context, params }) => { + const page = await loadArticle(params.slug); + await Promise.all([ + // The first page of comments arrives with the article's HTML. A failure + // leaves the section to show its own error instead of breaking the page. + context.queryClient + .infiniteQuery(commentsQueryOptions(page.item.id)) + .catch(() => null), + // Same options as the first page of /news. A failure leaves the box to + // retry in the browser instead of breaking the article. + context.queryClient + .query(articlesQueryOptions({ locale: context.locale, search: {} })) + .catch(() => null), + ]); + + return page; + }, + + head: ({ loaderData }) => + contentDeliveryPageHead(loaderData?.metadata, { + title: loaderData?.item.title, + }), +}); + +/** Asked in the browser, so the cached page stays the same for everyone. */ +const ArticleActions = ({ id, title }: { id: number; title: string }) => { + const t = useTranslations("newsroom.articles"); + const { canEdit, canReport } = useArticlePermissions([id]).of(id); + + return ( + <div className="flex flex-wrap gap-2"> + {canEdit ? ( + <HrefLink + className={buttonVariants({ size: "sm", variant: "outline" })} + href={`/news/${id}/edit`} + > + {t("edit_link")} + </HrefLink> + ) : null} + {canReport ? ( + <ReportButton + preview={{ title }} + target={contentTarget(manifest.id, articleContentType, id)} + typeLabel={t("report_type")} + /> + ) : null} + </div> + ); +}; + +const ArticlePage = ({ + loaderData: { item }, +}: PluginRoutePageProps<ArticlePageData>) => ( + <div className="container mx-auto flex max-w-3xl flex-col gap-10 px-4 py-8"> + <article className="flex flex-col gap-6"> + <header className="flex flex-col gap-2"> + <h1 className="text-3xl font-semibold tracking-tight text-balance"> + {item.title} + </h1> + {item.publishedAt ? ( + <span className="text-muted-foreground text-sm"> + <DateFormat date={item.publishedAt} /> + </span> + ) : null} + <ArticleActions id={item.id} title={item.title} /> + </header> + + <RichTextContent + className="leading-relaxed text-pretty" + content={item.body} + /> + + <CommentSection articleId={item.id} articleSlug={item.slug} /> + </article> + + <LatestArticles currentId={item.id} /> + </div> +); + +export default ArticlePage; diff --git a/plugins/newsroom/src/pages/article-permissions.ts b/plugins/newsroom/src/pages/article-permissions.ts new file mode 100644 index 0000000000..13266406bb --- /dev/null +++ b/plugins/newsroom/src/pages/article-permissions.ts @@ -0,0 +1,23 @@ +import { useContentPermissions } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +import { manifest } from "@/manifest.gen"; + +/** What the visitor may do with each article on screen: `canEdit`, `canReport`. */ +export const useArticlePermissions = (ids: readonly number[]) => + useContentPermissions({ + ids, + queryKey: [manifest.id, "articles"], + fetch: async request => { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/news", + path: "/permissions", + args: { query: { ids: request.join(",") } }, + }); + if (res.status !== 200) throw new Error("Loading permissions failed."); + + return await res.json(); + }, + }); diff --git a/plugins/newsroom/src/pages/articles-page.tsx b/plugins/newsroom/src/pages/articles-page.tsx new file mode 100644 index 0000000000..51415b15fb --- /dev/null +++ b/plugins/newsroom/src/pages/articles-page.tsx @@ -0,0 +1,159 @@ +import type { PluginRoutePageProps } from "@vitnode/core/routing"; + +import { DateFormat } from "@vitnode/core/components/date-format"; +import { Input } from "@vitnode/core/components/ui/input"; +import { + NativeSelect, + NativeSelectOption, +} from "@vitnode/core/components/ui/native-select"; +import { LOADER_DATA_QUERY_META } from "@vitnode/core/lib/query-client"; +import { + contentListPageHead, + ContentListPagination, + ContentListResults, + useContentListSearchInput, +} from "@vitnode/core/tanstack/content"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { + defineRoute, + type RouteLoadContext, +} from "@vitnode/core/tanstack/plugin-routes"; +import { useTransition } from "react"; +import { useTranslations } from "use-intl"; + +import type { ArticleListSearch } from "./article-list"; + +import { articleList, articlesQueryOptions } from "./article-list"; + +const loadArticles = async ( + { locale, queryClient }: RouteLoadContext, + search: ArticleListSearch, +) => + // A failed list becomes a message on the page, not an error page. + await queryClient + .query({ + ...articlesQueryOptions({ locale, search }), + meta: LOADER_DATA_QUERY_META, + }) + .catch(() => null); + +type ArticlesPageData = Awaited<ReturnType<typeof loadArticles>>; + +export const route = defineRoute<ArticlesPageData, ArticleListSearch>({ + load: async ({ context, search }) => await loadArticles(context, search), + + head: ({ search, t }) => + contentListPageHead({ + description: t("newsroom.articles.desc"), + pathname: "/news", + search, + title: t("newsroom.articles.title"), + }), +}); + +const ArticlesPage = ({ + loaderData: articles, + navigate, + search, +}: PluginRoutePageProps<ArticlesPageData, ArticleListSearch>) => { + const t = useTranslations("newsroom.articles"); + const [isPending, startTransition] = useTransition(); + const update = (patch: Partial<ArticleListSearch>) => { + startTransition(async () => { + await navigate({ + resetScroll: false, + search: articleList.withSearch(search, patch), + }); + }); + }; + const input = useContentListSearchInput({ + onCommit: q => { + update({ q }); + }, + value: search.q, + }); + + return ( + <div className="container mx-auto flex max-w-3xl flex-col gap-6 px-4 py-8"> + <h1 className="text-3xl font-semibold tracking-tight text-balance"> + {t("title")} + </h1> + + <div + className="flex flex-col gap-3 md:flex-row md:items-center" + role="search" + > + <Input + aria-label={t("search_label")} + className="md:flex-1" + onChange={event => { + input.setValue(event.target.value); + }} + onKeyDown={event => { + if (event.key === "Enter" && !event.nativeEvent.isComposing) { + input.commit(); + } + }} + placeholder={t("search_label")} + type="search" + value={input.value} + /> + <NativeSelect + aria-label={t("sort_label")} + onChange={event => { + update({ + sort: articleList.sorts.find(sort => sort === event.target.value), + }); + }} + value={search.sort ?? articleList.defaultSort} + > + {articleList.sorts.map(sort => ( + <NativeSelectOption key={sort} value={sort}> + {t(`sort.${sort}`)} + </NativeSelectOption> + ))} + </NativeSelect> + </div> + + <ContentListResults + className="flex flex-col divide-y rounded-lg border" + empty={<p className="text-muted-foreground">{t("empty")}</p>} + error={<p className="text-destructive">{t("error")}</p>} + getKey={article => article.id} + isError={articles === null} + isFetching={isPending} + isFiltered={articleList.isFiltered(search)} + itemClassName="flex flex-col gap-1 p-4" + items={articles?.edges} + label={t("title")} + loading={null} + noResults={<p className="text-muted-foreground">{t("no_results")}</p>} + renderItem={article => ( + <> + <HrefLink + className="text-lg font-medium hover:underline" + href={`/news/${article.slug}`} + > + {article.title} + </HrefLink> + {article.publishedAt ? ( + <span className="text-muted-foreground text-sm"> + <DateFormat date={article.publishedAt} /> + </span> + ) : null} + </> + )} + /> + + {articles ? ( + <ContentListPagination + hrefFor={page => articleList.href("/news", { ...search, page })} + label={t("pagination")} + pageInfo={articles.pageInfo} + /> + ) : null} + </div> + ); +}; + +export default ArticlesPage; diff --git a/plugins/example/src/pages/browse-page.tsx b/plugins/newsroom/src/pages/browse-page.tsx similarity index 94% rename from plugins/example/src/pages/browse-page.tsx rename to plugins/newsroom/src/pages/browse-page.tsx index 39e5239d10..2425f2ffc1 100644 --- a/plugins/example/src/pages/browse-page.tsx +++ b/plugins/newsroom/src/pages/browse-page.tsx @@ -23,7 +23,7 @@ const BrowsePage = ({ navigate, search, }: PluginRoutePageProps<undefined, BrowseSearch>) => { - const t = useTranslations("@vitnode/example.browse"); + const t = useTranslations("newsroom.browse"); const start = (search.page - 1) * BROWSE_PAGE_SIZE; const shown = ITEMS.slice(start, start + BROWSE_PAGE_SIZE); @@ -92,8 +92,8 @@ export const route = definePluginRoute({ * declared in `routes.ts`. */ head: ({ t }) => ({ - description: t("@vitnode/example.browse.desc"), - title: t("@vitnode/example.browse.title"), + description: t("newsroom.browse.desc"), + title: t("newsroom.browse.title"), }), breadcrumb: false, diff --git a/plugins/example/src/pages/browse-search.ts b/plugins/newsroom/src/pages/browse-search.ts similarity index 100% rename from plugins/example/src/pages/browse-search.ts rename to plugins/newsroom/src/pages/browse-search.ts diff --git a/plugins/example/src/pages/localized-article-page.tsx b/plugins/newsroom/src/pages/bulletin-page.tsx similarity index 58% rename from plugins/example/src/pages/localized-article-page.tsx rename to plugins/newsroom/src/pages/bulletin-page.tsx index b6dad89ef6..59d6eaba63 100644 --- a/plugins/example/src/pages/localized-article-page.tsx +++ b/plugins/newsroom/src/pages/bulletin-page.tsx @@ -8,15 +8,15 @@ import { z } from "zod"; import { manifest } from "@/manifest.gen"; -import { ContentArticle } from "./content-article"; +import { ContentStory } from "./content-story"; -const zodLocalizedArticle = z.object({ +const zodBulletin = z.object({ body: z.string(), publishedAt: z.string().nullable(), title: z.string(), }); -const loadLocalizedArticle = async ({ +const loadBulletin = async ({ locale, slug, }: { @@ -26,7 +26,7 @@ const loadLocalizedArticle = async ({ const detail = await fetcher({ plugin: manifest.id, method: "get", - module: "content/localized-articles", + module: "content/bulletins", path: "/{slug}", args: { params: { slug: encodeURIComponent(slug) }, @@ -36,44 +36,36 @@ const loadLocalizedArticle = async ({ return { item: contentPageItem( - detail.status === 200 - ? zodLocalizedArticle.parse(await detail.json()) - : null, + detail.status === 200 ? zodBulletin.parse(await detail.json()) : null, ), locale, }; }; -type LocalizedArticlePageData = Awaited< - ReturnType<typeof loadLocalizedArticle> ->; +type BulletinPageData = Awaited<ReturnType<typeof loadBulletin>>; export const route = definePluginRoute({ load: async ({ context, params }) => - await loadLocalizedArticle({ locale: context.locale, slug: params.slug }), + await loadBulletin({ locale: context.locale, slug: params.slug }), head: ({ loaderData, params }) => ({ alternates: loaderData ? { - [loaderData.locale]: `/localized-articles/${encodeURIComponent(params.slug)}`, + [loaderData.locale]: `/bulletins/${encodeURIComponent(params.slug)}`, } : undefined, title: loaderData?.item.title, }), }); -const LocalizedArticlePage = ({ +const BulletinPage = ({ loaderData: { item, locale }, -}: PluginRoutePageProps<LocalizedArticlePageData>) => ( - <ContentArticle - lang={locale} - publishedAt={item.publishedAt} - title={item.title} - > +}: PluginRoutePageProps<BulletinPageData>) => ( + <ContentStory lang={locale} publishedAt={item.publishedAt} title={item.title}> <p className="text-foreground leading-relaxed text-pretty whitespace-pre-line"> {item.body} </p> - </ContentArticle> + </ContentStory> ); -export default LocalizedArticlePage; +export default BulletinPage; diff --git a/plugins/newsroom/src/pages/comment-composer.tsx b/plugins/newsroom/src/pages/comment-composer.tsx new file mode 100644 index 0000000000..b760b8ddb0 --- /dev/null +++ b/plugins/newsroom/src/pages/comment-composer.tsx @@ -0,0 +1,99 @@ +import { + AutoForm, + type AutoFormOnSubmit, + AutoFormSubmitButton, +} from "@vitnode/core/components/form/auto-form"; +import { AutoFormEditor } from "@vitnode/core/components/form/fields/editor"; +import { + emptyRichTextDocument, + isRichTextEmpty, + zodRichTextDocument, +} from "@vitnode/core/content"; +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { useTranslations } from "use-intl"; +import { z } from "zod"; + +import { manifest } from "@/manifest.gen"; + +/** Where a new comment ended up. Only `published` is in the public thread. */ +export type CommentOutcome = "draft" | "pending" | "published"; + +export interface CommentComposerProps { + articleId: number; + label: string; + /** Called after the server stored the comment. */ + onPosted: (outcome: CommentOutcome) => Promise<void>; + /** The comment being answered, or `null` for the article itself. */ + parentId: null | number; +} + +const createSchema = (required: string) => + z.object({ + body: zodRichTextDocument + .refine(doc => !isRichTextEmpty(doc), required) + .default(emptyRichTextDocument()), + }); + +const CommentComposer = ({ + articleId, + label, + onPosted, + parentId, +}: CommentComposerProps) => { + const t = useTranslations("newsroom.comments.form"); + const write = useContentPublicWrite({ fields: ["body"] }); + + const onSubmit: AutoFormOnSubmit<ReturnType<typeof createSchema>> = async ( + { body }, + form, + ) => { + const record = await write.submit( + form, + async () => + await fetcher({ + plugin: manifest.id, + method: "post", + module: "content/comments", + path: "/", + args: { + body: { values: { article: articleId, body, parent: parentId } }, + }, + }), + ); + if (!record) return; + + // A pending comment is a draft too, so ask about approval first. + await onPosted( + record.approval?.status === "pending" + ? "pending" + : record.status === "published" + ? "published" + : "draft", + ); + }; + + return ( + <AutoForm + aria-label={label} + className="flex flex-col gap-3" + fields={[ + { + id: "body", + component: fieldProps => ( + <AutoFormEditor {...fieldProps} format="json" label={label} /> + ), + }, + ]} + formSchema={createSchema(t("required"))} + layout={fields => <>{fields.body}</>} + onSubmit={onSubmit} + > + <AutoFormSubmitButton className="self-start"> + {t("submit")} + </AutoFormSubmitButton> + </AutoForm> + ); +}; + +export default CommentComposer; diff --git a/plugins/newsroom/src/pages/comment-data.ts b/plugins/newsroom/src/pages/comment-data.ts new file mode 100644 index 0000000000..9464e691c6 --- /dev/null +++ b/plugins/newsroom/src/pages/comment-data.ts @@ -0,0 +1,104 @@ +import { infiniteQueryOptions } from "@tanstack/react-query"; +import { + zodContentPublicPerson, + zodRichTextDocument, +} from "@vitnode/core/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { z } from "zod"; + +import { manifest } from "@/manifest.gen"; + +/** Top-level comments per page. The thread route accepts 1 to 50. */ +const COMMENTS_PAGE_SIZE = 20; + +/** One comment as `publicApi.fields` and `people` return it. */ +const zodComment = z.object({ + author: zodContentPublicPerson.nullable().catch(null), + body: zodRichTextDocument, + id: z.number(), + publishedAt: z.string().nullable(), +}); + +const zodCommentPage = z.object({ + items: z.array( + z.object({ + depth: z.number(), + id: z.number(), + parentId: z.number().nullable(), + record: zodComment.nullable(), + removed: z.boolean(), + }), + ), + pageInfo: z.object({ + endCursor: z.string().nullable(), + hasNextPage: z.boolean(), + totalCount: z.number(), + }), + replyCount: z.number(), + truncated: z.boolean(), +}); + +export type CommentPage = z.infer<typeof zodCommentPage>; + +export type CommentItem = CommentPage["items"][number]; + +export type ArticleComment = NonNullable<CommentItem["record"]>; + +const fetchCommentPage = async (articleId: number, after?: string) => { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/comments", + path: "/thread", + args: { + query: { + root: String(articleId), + first: COMMENTS_PAGE_SIZE, + ...(after ? { after } : {}), + }, + }, + }); + if (res.status !== 200) throw new Error("Loading the comments failed."); + + // The thread route types `record` loosely, so parse it once here. + return zodCommentPage.parse(await res.json()); +}; + +export const commentsQueryKey = (articleId: number) => + [manifest.id, "comments", articleId] as const; + +/** Every loaded page under one key, so a refetch reloads them all in order. */ +export const commentsQueryOptions = (articleId: number) => + infiniteQueryOptions({ + getNextPageParam: (last: CommentPage) => + last.pageInfo.hasNextPage + ? (last.pageInfo.endCursor ?? undefined) + : undefined, + initialPageParam: undefined as string | undefined, + queryFn: async ({ pageParam }) => + await fetchCommentPage(articleId, pageParam), + queryKey: commentsQueryKey(articleId), + }); + +export interface CommentNode extends CommentItem { + children: CommentNode[]; +} + +/** The flat, depth-first answer as a tree: a parent always comes before its replies. */ +export const buildCommentTree = ( + items: readonly CommentItem[], +): CommentNode[] => { + const nodes = new Map<number, CommentNode>(); + const roots: CommentNode[] = []; + + for (const item of items) { + const node: CommentNode = { ...item, children: [] }; + nodes.set(item.id, node); + const parent = + item.parentId === null ? undefined : nodes.get(item.parentId); + if (parent) parent.children.push(node); + else roots.push(node); + } + + return roots; +}; diff --git a/plugins/newsroom/src/pages/comment-editor.tsx b/plugins/newsroom/src/pages/comment-editor.tsx new file mode 100644 index 0000000000..73887c41c1 --- /dev/null +++ b/plugins/newsroom/src/pages/comment-editor.tsx @@ -0,0 +1,93 @@ +import { + AutoForm, + type AutoFormOnSubmit, + AutoFormSubmitButton, +} from "@vitnode/core/components/form/auto-form"; +import { AutoFormEditor } from "@vitnode/core/components/form/fields/editor"; +import { Button } from "@vitnode/core/components/ui/button"; +import { + isRichTextEmpty, + type RichTextDocument, + zodRichTextDocument, +} from "@vitnode/core/content"; +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { useTranslations } from "use-intl"; +import { z } from "zod"; + +import { manifest } from "@/manifest.gen"; + +export interface CommentEditorProps { + /** The comment's latest text, from `GET /comments/{id}/edit`. */ + body: RichTextDocument; + commentId: number; + label: string; + onCancel: () => void; + /** Called after a save, with whether it waits for a moderator. */ + onSaved: (pending: boolean) => Promise<void>; +} + +const createSchema = (body: RichTextDocument, required: string) => + z.object({ + body: zodRichTextDocument + .refine(doc => !isRichTextEmpty(doc), required) + .default(body), + }); + +const CommentEditor = ({ + body, + commentId, + label, + onCancel, + onSaved, +}: CommentEditorProps) => { + const t = useTranslations("newsroom.comments.form"); + const write = useContentPublicWrite({ fields: ["body"] }); + + const onSubmit: AutoFormOnSubmit<ReturnType<typeof createSchema>> = async ( + values, + form, + ) => { + const saved = await write.submit( + form, + async () => + await fetcher({ + plugin: manifest.id, + method: "patch", + module: "content/comments", + path: "/{id}", + args: { params: { id: commentId }, body: { values } }, + }), + ); + if (!saved) return; + + await onSaved(saved.approval?.status === "pending"); + }; + + return ( + <AutoForm + aria-label={label} + className="flex flex-col gap-3" + fields={[ + { + id: "body", + component: fieldProps => ( + <AutoFormEditor {...fieldProps} format="json" label={label} /> + ), + }, + ]} + formSchema={createSchema(body, t("required"))} + layout={fields => <>{fields.body}</>} + onSubmit={onSubmit} + > + <div className="flex flex-wrap items-center gap-2"> + <AutoFormSubmitButton>{t("save")}</AutoFormSubmitButton> + <Button onClick={onCancel} type="button" variant="ghost"> + {t("cancel")} + </Button> + </div> + </AutoForm> + ); +}; + +export default CommentEditor; diff --git a/plugins/newsroom/src/pages/comment-permissions.ts b/plugins/newsroom/src/pages/comment-permissions.ts new file mode 100644 index 0000000000..63ceb27fc6 --- /dev/null +++ b/plugins/newsroom/src/pages/comment-permissions.ts @@ -0,0 +1,23 @@ +import { useContentPermissions } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +import { manifest } from "@/manifest.gen"; + +/** What the visitor may do with each comment on screen: `canEdit`, `canReport`. */ +export const useCommentPermissions = (ids: readonly number[]) => + useContentPermissions({ + ids, + queryKey: [manifest.id, "comments"], + fetch: async request => { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/comments", + path: "/permissions", + args: { query: { ids: request.join(",") } }, + }); + if (res.status !== 200) throw new Error("Loading permissions failed."); + + return await res.json(); + }, + }); diff --git a/plugins/newsroom/src/pages/comment-section.tsx b/plugins/newsroom/src/pages/comment-section.tsx new file mode 100644 index 0000000000..e849f2fcff --- /dev/null +++ b/plugins/newsroom/src/pages/comment-section.tsx @@ -0,0 +1,377 @@ +import { useInfiniteQuery, useQueryClient } from "@tanstack/react-query"; +import { RichTextContent } from "@vitnode/core/components/rich-text"; +import { Button, buttonVariants } from "@vitnode/core/components/ui/button"; +import { Skeleton } from "@vitnode/core/components/ui/skeleton"; +import { type RichTextDocument } from "@vitnode/core/content"; +import { useSessionQuery } from "@vitnode/core/tanstack/auth"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { lazy, Suspense, useMemo, useState } from "react"; +import { toast } from "sonner"; +import { useTranslations } from "use-intl"; + +import { COMMENT_MAX_DEPTH } from "@/content/comment"; +import { manifest } from "@/manifest.gen"; + +import type { CommentComposerProps, CommentOutcome } from "./comment-composer"; +import type { ArticleComment, CommentNode } from "./comment-data"; +import type { CommentEditorProps } from "./comment-editor"; + +import { + buildCommentTree, + commentsQueryKey, + commentsQueryOptions, +} from "./comment-data"; +import { useCommentPermissions } from "./comment-permissions"; + +// The editor is heavy and most readers never write, so it loads on demand. +const CommentComposer = lazy(async () => await import("./comment-composer")); +const CommentEditor = lazy(async () => await import("./comment-editor")); + +const Composer = (props: CommentComposerProps) => ( + <Suspense fallback={<Skeleton className="h-40 w-full rounded-lg" />}> + <CommentComposer {...props} /> + </Suspense> +); + +/** Who wrote a comment, and what they said. */ +const CommentBody = ({ comment }: { comment: ArticleComment }) => { + const t = useTranslations("newsroom.comments"); + + return ( + <div className="flex flex-col gap-2"> + <p className="text-sm font-medium"> + {comment.author?.name ?? t("someone")} + </p> + <RichTextContent + className="leading-relaxed text-pretty" + content={comment.body} + /> + </div> + ); +}; + +/** A comment, with Edit for the visitors who may use it. */ +const CommentItem = ({ + canEdit, + comment, + onSaved, +}: { + canEdit: boolean; + comment: ArticleComment; + onSaved: CommentEditorProps["onSaved"]; +}) => { + const t = useTranslations("newsroom.comments"); + const tWrite = useTranslations("core.global.content_write"); + const [editing, setEditing] = useState<null | RichTextDocument>(null); + const [isOpening, setIsOpening] = useState(false); + + // Opens the editor on the comment's latest text, not on the cached copy. + const openEditor = async () => { + setIsOpening(true); + try { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/comments", + path: "/{id}/edit", + args: { params: { id: comment.id } }, + }); + if (res.status !== 200) { + const reason = + res.status === 401 + ? "unauthenticated" + : res.status === 403 + ? "forbidden" + : res.status === 404 + ? "not_found" + : "unknown"; + toast.error(tWrite("title"), { description: tWrite(reason) }); + + return; + } + + setEditing((await res.json()).values.body); + } finally { + setIsOpening(false); + } + }; + + if (editing) { + return ( + <div className="flex flex-col gap-2"> + <p className="text-sm font-medium"> + {comment.author?.name ?? t("someone")} + </p> + <Suspense fallback={<Skeleton className="h-40 w-full rounded-lg" />}> + <CommentEditor + body={editing} + commentId={comment.id} + label={t("form.edit_label")} + onCancel={() => { + setEditing(null); + }} + onSaved={async pending => { + setEditing(null); + await onSaved(pending); + }} + /> + </Suspense> + </div> + ); + } + + return ( + <div className="flex flex-col gap-2"> + <CommentBody comment={comment} /> + {canEdit ? ( + <Button + className="self-start" + isLoading={isOpening} + onClick={openEditor} + size="sm" + variant="ghost" + > + {t("edit")} + </Button> + ) : null} + </div> + ); +}; + +/** What every comment in the tree needs from the section. */ +interface CommentThread { + articleId: number; + canReply: boolean; + onEdited: CommentEditorProps["onSaved"]; + onPosted: CommentComposerProps["onPosted"]; + permissions: ReturnType<typeof useCommentPermissions>; +} + +/** A comment with its Reply form, followed by every answer below it. */ +const CommentBranch = ({ + node, + thread, +}: { + node: CommentNode; + thread: CommentThread; +}) => { + const t = useTranslations("newsroom.comments"); + const [replying, setReplying] = useState(false); + + return ( + <li className="flex flex-col gap-3"> + {node.record ? ( + <> + <CommentItem + canEdit={thread.permissions.of(node.id).canEdit} + comment={node.record} + onSaved={thread.onEdited} + /> + {thread.canReply && node.depth < COMMENT_MAX_DEPTH ? ( + <Button + aria-expanded={replying} + className="self-start" + onClick={() => { + setReplying(!replying); + }} + size="sm" + variant="ghost" + > + {t("reply")} + </Button> + ) : null} + {replying ? ( + <div className="flex flex-col gap-2"> + <Composer + articleId={thread.articleId} + label={t("form.reply_label", { + name: node.record.author?.name ?? t("someone"), + })} + onPosted={async outcome => { + setReplying(false); + await thread.onPosted(outcome); + }} + parentId={node.id} + /> + <Button + className="self-start" + onClick={() => { + setReplying(false); + }} + size="sm" + variant="ghost" + > + {t("form.cancel")} + </Button> + </div> + ) : null} + </> + ) : ( + // Hidden, but its public answers still need a parent to hang from. + <p className="text-muted-foreground text-sm italic">{t("removed")}</p> + )} + + {node.children.length > 0 ? ( + <ol className="flex flex-col gap-4 border-l-2 pl-3 md:pl-6"> + {node.children.map(child => ( + <CommentBranch key={child.id} node={child} thread={thread} /> + ))} + </ol> + ) : null} + </li> + ); +}; + +export const CommentSection = ({ + articleId, + articleSlug, +}: { + articleId: number; + articleSlug: string; +}) => { + const t = useTranslations("newsroom.comments"); + const queryClient = useQueryClient(); + const session = useSessionQuery(); + const [composerKey, setComposerKey] = useState(0); + const comments = useInfiniteQuery(commentsQueryOptions(articleId)); + + const pages = comments.data?.pages; + const items = useMemo( + () => pages?.flatMap(page => page.items) ?? [], + [pages], + ); + const tree = useMemo(() => buildCommentTree(items), [items]); + // One request for every comment on screen, batched by the hook. + const permissions = useCommentPermissions( + items.flatMap(item => (item.record ? [item.id] : [])), + ); + + const onPosted = async (outcome: CommentOutcome) => { + if (outcome !== "published") { + // Not in the public thread, so there is nothing to refresh. + toast.info(t(`${outcome}.title`), { description: t(`${outcome}.desc`) }); + + return; + } + + toast.success(t("created.title"), { description: t("created.desc") }); + // Refetches every loaded page in order, with the new count. + await queryClient.invalidateQueries({ + queryKey: commentsQueryKey(articleId), + }); + }; + + const onEdited = async (pending: boolean) => { + if (pending) { + toast.info(t("edit_pending.title"), { + description: t("edit_pending.desc"), + }); + } else { + toast.success(t("edited.title"), { description: t("edited.desc") }); + } + await queryClient.invalidateQueries({ + queryKey: commentsQueryKey(articleId), + }); + }; + + const thread: CommentThread = { + articleId, + canReply: Boolean(session.data?.user), + onEdited, + onPosted, + permissions, + }; + + return ( + <section aria-labelledby="comments-title" className="flex flex-col gap-6"> + <h2 className="text-xl font-semibold text-balance" id="comments-title"> + {t("title", { count: pages?.[0]?.replyCount ?? 0 })} + </h2> + + {comments.isPending ? ( + <div aria-busy="true" className="flex flex-col gap-4"> + <span className="sr-only" role="status"> + {t("loading")} + </span> + {[0, 1].map(key => ( + <div className="flex flex-col gap-2" key={key}> + <Skeleton className="h-4 w-32" /> + <Skeleton className="h-4 w-full" /> + </div> + ))} + </div> + ) : comments.isError && items.length === 0 ? ( + <div className="flex flex-col items-start gap-3"> + <p className="text-muted-foreground leading-relaxed" role="alert"> + {t("load_failed.desc")} + </p> + <Button + isLoading={comments.isFetching} + onClick={async () => { + await comments.refetch(); + }} + variant="outline" + > + {t("retry")} + </Button> + </div> + ) : items.length === 0 ? ( + <p className="text-muted-foreground leading-relaxed">{t("empty")}</p> + ) : ( + <ol aria-busy={comments.isFetching} className="flex flex-col gap-6"> + {tree.map(node => ( + <CommentBranch key={node.id} node={node} thread={thread} /> + ))} + </ol> + )} + + {pages?.some(page => page.truncated) ? ( + <p className="text-muted-foreground text-sm">{t("truncated")}</p> + ) : null} + + {comments.hasNextPage ? ( + <Button + className="self-start" + disabled={comments.isFetching} + isLoading={comments.isFetchingNextPage} + onClick={async () => { + const next = await comments.fetchNextPage(); + if (next.isError) { + toast.error(t("load_failed.title"), { + description: t("load_failed.desc"), + }); + } + }} + variant="outline" + > + {t("load_more")} + </Button> + ) : null} + + {session.data?.user ? ( + <Composer + articleId={articleId} + // A fresh key gives the next comment an empty editor. + key={composerKey} + label={t("form.label")} + onPosted={async outcome => { + setComposerKey(key => key + 1); + await onPosted(outcome); + }} + parentId={null} + /> + ) : ( + <HrefLink + className={buttonVariants({ + className: "self-start", + variant: "outline", + })} + href={`/login?returnTo=${encodeURIComponent(`/news/${articleSlug}`)}`} + > + {t("sign_in")} + </HrefLink> + )} + </section> + ); +}; diff --git a/plugins/example/src/pages/content-article.tsx b/plugins/newsroom/src/pages/content-story.tsx similarity index 92% rename from plugins/example/src/pages/content-article.tsx rename to plugins/newsroom/src/pages/content-story.tsx index 9a3d665bb2..a18331f7d4 100644 --- a/plugins/example/src/pages/content-article.tsx +++ b/plugins/newsroom/src/pages/content-story.tsx @@ -1,7 +1,7 @@ import { DateFormat } from "@vitnode/core/components/date-format"; import { useTranslations } from "use-intl"; -export const ContentArticle = ({ +export const ContentStory = ({ children, lang, lead, @@ -14,7 +14,7 @@ export const ContentArticle = ({ publishedAt: null | string; title: string; }) => { - const t = useTranslations("@vitnode/example.articles"); + const t = useTranslations("newsroom.stories"); return ( <article diff --git a/plugins/example/src/pages/board-page.tsx b/plugins/newsroom/src/pages/desk-page.tsx similarity index 65% rename from plugins/example/src/pages/board-page.tsx rename to plugins/newsroom/src/pages/desk-page.tsx index 0256ce5c99..4469158338 100644 --- a/plugins/example/src/pages/board-page.tsx +++ b/plugins/newsroom/src/pages/desk-page.tsx @@ -30,32 +30,32 @@ import { z } from "zod"; import { manifest } from "@/manifest.gen"; -import type { BoardSearch } from "./board-search"; +import type { DeskSearch } from "./desk-search"; -import { boardHref, BOARDS_HREF } from "./board-search"; -import { BoardColorDot, BoardTree } from "./board-tree"; -import { discussionHref, discussionNewHref } from "./discussion-search"; -import { cachedBoardId, queryBoard } from "./example-queries"; +import { cachedDeskId, queryDesk } from "./desk-queries"; +import { deskHref, DESKS_HREF } from "./desk-search"; +import { DeskColorDot, DeskTree } from "./desk-tree"; +import { letterHref, letterNewHref } from "./letter-search"; const PAGE_SIZE = 20; -const zodDiscussionRow = z.object({ +const zodLetterRow = z.object({ id: z.number(), publishedAt: z.string().nullable(), slug: z.string().nullable(), title: z.string(), }); -const fetchDiscussions = async (boardId: number, cursor?: string) => { +const fetchLetters = async (deskId: number, cursor?: string) => { const filters = { - board: String(boardId), + desk: String(deskId), includeDescendants: "true", }; const list = await fetcher({ plugin: manifest.id, method: "get", - module: "content/discussions", + module: "content/letters", path: "/", args: { query: { @@ -66,37 +66,35 @@ const fetchDiscussions = async (boardId: number, cursor?: string) => { }, }); - if (list.status !== 200) throw new Error("Loading the discussions failed."); + if (list.status !== 200) throw new Error("Loading the letters failed."); const { edges, pageInfo } = await list.json(); return { - discussions: z.array(zodDiscussionRow).parse(edges), + letters: z.array(zodLetterRow).parse(edges), nextCursor: pageInfo.hasNextPage ? pageInfo.endCursor : null, }; }; -const loadBoard = async ( +const loadDesk = async ( queryClient: RouteLoadContext["queryClient"], idOrSlug: string, - { cursor }: BoardSearch, + { cursor }: DeskSearch, ) => { - // The list needs the board's id. When the boards index already cached it, + // The list needs the desk's id. When the desks index already cached it, // both requests go out together instead of one after the other. - const knownId = cachedBoardId(queryClient, idOrSlug); - const [board, early] = await Promise.all([ - queryBoard(queryClient, idOrSlug), - // A stale id (the board was moved or deleted since) is not this page's - // error: the board read below decides, and the list is fetched again. - knownId === null - ? null - : fetchDiscussions(knownId, cursor).catch(() => null), + const knownId = cachedDeskId(queryClient, idOrSlug); + const [desk, early] = await Promise.all([ + queryDesk(queryClient, idOrSlug), + // A stale id (the desk was moved or deleted since) is not this page's + // error: the desk read below decides, and the list is fetched again. + knownId === null ? null : fetchLetters(knownId, cursor).catch(() => null), ]); - const { ancestors, children, container } = contentPageItem(board); + const { ancestors, children, container } = contentPageItem(desk); const page = early && knownId === container.id ? early - : await fetchDiscussions(container.id, cursor); + : await fetchLetters(container.id, cursor); return { ancestors, @@ -107,10 +105,10 @@ const loadBoard = async ( }; }; -type BoardPageData = Awaited<ReturnType<typeof loadBoard>>; +type DeskPageData = Awaited<ReturnType<typeof loadDesk>>; -const BoardNotFound = () => { - const t = useTranslations("@vitnode/example.boards.not_found"); +const DeskNotFound = () => { + const t = useTranslations("newsroom.desks.not_found"); return ( <div className="container mx-auto flex max-w-3xl px-4 py-8 md:py-12"> @@ -125,7 +123,7 @@ const BoardNotFound = () => { <EmptyContent> <HrefLink className={buttonVariants({ variant: "outline" })} - href={BOARDS_HREF} + href={DESKS_HREF} > {t("back")} </HrefLink> @@ -135,15 +133,15 @@ const BoardNotFound = () => { ); }; -const BoardsCrumb = () => { - const t = useTranslations("@vitnode/example.boards"); +const DesksCrumb = () => { + const t = useTranslations("newsroom.desks"); return <>{t("title")}</>; }; -export const route = defineRoute<BoardPageData, BoardSearch>({ +export const route = defineRoute<DeskPageData, DeskSearch>({ load: async ({ context, params, search }) => - await loadBoard(context.queryClient, params.slug, search), + await loadDesk(context.queryClient, params.slug, search), head: ({ loaderData }) => ({ description: loaderData?.container.metadata.description ?? undefined, @@ -154,8 +152,8 @@ export const route = defineRoute<BoardPageData, BoardSearch>({ group: ({ loaderData }) => ( <> <BreadcrumbItem> - <BreadcrumbLink render={<HrefLink href={BOARDS_HREF} />}> - <BoardsCrumb /> + <BreadcrumbLink render={<HrefLink href={DESKS_HREF} />}> + <DesksCrumb /> </BreadcrumbLink> </BreadcrumbItem> {loaderData.ancestors.map(ancestor => ( @@ -163,7 +161,7 @@ export const route = defineRoute<BoardPageData, BoardSearch>({ <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink - render={<HrefLink href={boardHref(ancestor.slug)} />} + render={<HrefLink href={deskHref(ancestor.slug)} />} > {ancestor.name} </BreadcrumbLink> @@ -178,22 +176,21 @@ export const route = defineRoute<BoardPageData, BoardSearch>({ ), }, - notFound: BoardNotFound, + notFound: DeskNotFound, }); -const BoardPage = ({ +const DeskPage = ({ loaderData, -}: PluginRoutePageProps<BoardPageData, BoardSearch>) => { - const t = useTranslations("@vitnode/example.boards"); - const { children, container, discussions, isFirstPage, nextCursor } = - loaderData; +}: PluginRoutePageProps<DeskPageData, DeskSearch>) => { + const t = useTranslations("newsroom.desks"); + const { children, container, letters, isFirstPage, nextCursor } = loaderData; return ( <div className="container mx-auto flex max-w-3xl flex-col gap-8 px-4 py-8 md:py-12"> <header className="flex flex-col gap-4 md:flex-row md:items-end md:justify-between"> <div className="flex flex-col gap-2"> <h1 className="text-foreground flex items-center gap-3 text-3xl font-semibold tracking-tight text-balance"> - <BoardColorDot board={container} /> + <DeskColorDot desk={container} /> {container.name} </h1> {container.metadata.description ? ( @@ -205,81 +202,78 @@ const BoardPage = ({ <HrefLink className={buttonVariants({ className: "self-start" })} - href={discussionNewHref(container.id)} + href={letterNewHref(container.id)} > - {t("new_discussion")} + {t("new_letter")} </HrefLink> </header> {children.length > 0 ? ( <section - aria-labelledby="board-children" + aria-labelledby="desk-children" className="flex flex-col gap-4" > <h2 className="text-foreground text-xl font-semibold text-balance" - id="board-children" + id="desk-children" > {t("children")} </h2> - <BoardTree + <DeskTree label={t("children")} nodes={children.map(child => ({ ...child, children: [] }))} /> </section> ) : null} - <section - aria-labelledby="board-discussions" - className="flex flex-col gap-4" - > + <section aria-labelledby="desk-letters" className="flex flex-col gap-4"> <h2 className="text-foreground text-xl font-semibold text-balance" - id="board-discussions" + id="desk-letters" > - {t("discussions")} + {t("letters")} </h2> - {discussions.length === 0 ? ( + {letters.length === 0 ? ( <Empty className="border"> <EmptyHeader> <EmptyMedia variant="icon"> <MessagesSquareIcon aria-hidden="true" /> </EmptyMedia> - <EmptyTitle render={<h3 />}>{t("empty_board.title")}</EmptyTitle> - <EmptyDescription>{t("empty_board.desc")}</EmptyDescription> + <EmptyTitle render={<h3 />}>{t("empty_desk.title")}</EmptyTitle> + <EmptyDescription>{t("empty_desk.desc")}</EmptyDescription> </EmptyHeader> <EmptyContent> <HrefLink className={buttonVariants({ variant: "outline" })} - href={discussionNewHref(container.id)} + href={letterNewHref(container.id)} > - {t("new_discussion")} + {t("new_letter")} </HrefLink> </EmptyContent> </Empty> ) : ( <ul className="flex flex-col divide-y rounded-lg border"> - {discussions.map(discussion => ( - <li className="flex flex-col gap-1 p-4" key={discussion.id}> - {discussion.slug === null ? ( + {letters.map(letter => ( + <li className="flex flex-col gap-1 p-4" key={letter.id}> + {letter.slug === null ? ( <span className="text-foreground font-medium text-balance"> - {discussion.title} + {letter.title} </span> ) : ( <HrefLink className="text-foreground font-medium text-balance hover:underline" - href={discussionHref(discussion.slug)} + href={letterHref(letter.slug)} > - {discussion.title} + {letter.title} </HrefLink> )} - {discussion.publishedAt ? ( + {letter.publishedAt ? ( <time className="text-muted-foreground text-sm leading-relaxed" - dateTime={new Date(discussion.publishedAt).toISOString()} + dateTime={new Date(letter.publishedAt).toISOString()} > - <DateFormat date={discussion.publishedAt} /> + <DateFormat date={letter.publishedAt} /> </time> ) : null} </li> @@ -295,7 +289,7 @@ const BoardPage = ({ {isFirstPage ? null : ( <HrefLink className={buttonVariants({ variant: "outline" })} - href={boardHref(container.slug)} + href={deskHref(container.slug)} > {t("newest")} </HrefLink> @@ -303,7 +297,7 @@ const BoardPage = ({ {nextCursor === null ? null : ( <HrefLink className={buttonVariants({ variant: "outline" })} - href={boardHref(container.slug, { cursor: nextCursor })} + href={deskHref(container.slug, { cursor: nextCursor })} > {t("older")} </HrefLink> @@ -315,4 +309,4 @@ const BoardPage = ({ ); }; -export default BoardPage; +export default DeskPage; diff --git a/plugins/newsroom/src/pages/desk-queries.ts b/plugins/newsroom/src/pages/desk-queries.ts new file mode 100644 index 0000000000..db16b0a146 --- /dev/null +++ b/plugins/newsroom/src/pages/desk-queries.ts @@ -0,0 +1,91 @@ +import type { RouteLoadContext } from "@vitnode/core/tanstack/plugin-routes"; + +import { LOADER_DATA_QUERY_META } from "@vitnode/core/lib/query-client"; +import { RECORD_STALE_TIME } from "@vitnode/core/lib/query-freshness"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +import { manifest } from "@/manifest.gen"; + +import { fetchDesks } from "./desks-data"; + +type QueryClient = RouteLoadContext["queryClient"]; + +/** + * Desks are AdminCP-managed containers, so they get a record's freshness and + * are shared across pages: the desks index, the "new letter" picker and a + * desk page all read the same entries. A letter page and a desk's list + * read the API directly; the `/letters` list is cached in + * `letter-list.ts`, and the create and edit pages expire it. + */ +const deskQueryKeys = { + desk: (idOrSlug: string) => [manifest.id, "desk", idOrSlug] as const, + desks: () => [manifest.id, "desks"] as const, +}; + +export const desksQueryOptions = () => ({ + meta: LOADER_DATA_QUERY_META, + queryFn: fetchDesks, + queryKey: deskQueryKeys.desks(), + staleTime: RECORD_STALE_TIME, +}); + +const fetchDesk = async (idOrSlug: string) => { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/desks", + path: "/{idOrSlug}", + args: { params: { idOrSlug: encodeURIComponent(idOrSlug) } }, + }); + + if (res.status === 404) return null; + if (res.status !== 200) throw new Error("Loading the desk failed."); + + return await res.json(); +}; + +const deskQueryOptions = (idOrSlug: string) => ({ + meta: LOADER_DATA_QUERY_META, + queryFn: async () => await fetchDesk(idOrSlug), + queryKey: deskQueryKeys.desk(idOrSlug), + // A miss is not cached, so a desk created a moment ago is found next time. + staleTime: ({ state }: { state: { data: unknown } }) => + state.data ? RECORD_STALE_TIME : 0, +}); + +/** + * The desk by id or slug, seeded under its other key as well - the desk page + * asks by slug, a letter page by id. A slug made only of digits is skipped: + * the route reads it as an id, so it would answer for a different desk. + */ +export const queryDesk = async (queryClient: QueryClient, idOrSlug: string) => { + const data = await queryClient.query(deskQueryOptions(idOrSlug)); + if (!data) return data; + + const { id, slug } = data.container; + // Through `query` with the data already in hand, so the copy is built from + // the same options - `meta` included, which keeps it out of the SSR payload. + // A fresh entry is left as it is; a stale one takes this newer copy. + await Promise.all( + [String(id), slug] + .filter(key => key !== idOrSlug && !(key === slug && /^\d+$/.test(slug))) + .map( + async key => + await queryClient.query({ + ...deskQueryOptions(key), + queryFn: () => data, + }), + ), + ); + + return data; +}; + +/** The desk's id from the cached desks list, when a page has already read it. */ +export const cachedDeskId = ( + queryClient: QueryClient, + slug: string, +): null | number => + queryClient + .getQueryData<Awaited<ReturnType<typeof fetchDesks>>>(deskQueryKeys.desks()) + ?.find(desk => desk.slug === slug)?.id ?? null; diff --git a/plugins/newsroom/src/pages/desk-search.ts b/plugins/newsroom/src/pages/desk-search.ts new file mode 100644 index 0000000000..fbf01d51c9 --- /dev/null +++ b/plugins/newsroom/src/pages/desk-search.ts @@ -0,0 +1,15 @@ +export interface DeskSearch { + cursor?: string; +} + +const CURSOR = /^[A-Za-z0-9_-]{1,512}$/; + +export const deskSearch = (input: Record<string, unknown>): DeskSearch => + typeof input.cursor === "string" && CURSOR.test(input.cursor) + ? { cursor: input.cursor } + : {}; + +export const DESKS_HREF = "/desks"; + +export const deskHref = (slug: string, { cursor }: DeskSearch = {}): string => + `/desks/${encodeURIComponent(slug)}${cursor ? `?cursor=${encodeURIComponent(cursor)}` : ""}`; diff --git a/plugins/example/src/pages/board-tree.tsx b/plugins/newsroom/src/pages/desk-tree.tsx similarity index 71% rename from plugins/example/src/pages/board-tree.tsx rename to plugins/newsroom/src/pages/desk-tree.tsx index 4d43656ac4..e63e262d85 100644 --- a/plugins/example/src/pages/board-tree.tsx +++ b/plugins/newsroom/src/pages/desk-tree.tsx @@ -2,13 +2,13 @@ import type { ContentContainerTreeNode } from "@vitnode/core/content"; import { HrefLink } from "@vitnode/core/tanstack/link"; -import type { Board } from "./boards-data"; +import type { Desk } from "./desks-data"; -import { boardHref } from "./board-search"; -import { boardColor } from "./boards-data"; +import { deskHref } from "./desk-search"; +import { deskColor } from "./desks-data"; -export const BoardColorDot = ({ board }: { board: Board }) => { - const color = boardColor(board); +export const DeskColorDot = ({ desk }: { desk: Desk }) => { + const color = deskColor(desk); return ( <span @@ -19,20 +19,20 @@ export const BoardColorDot = ({ board }: { board: Board }) => { ); }; -const BoardTreeItems = ({ +const DeskTreeItems = ({ nodes, }: { - nodes: ContentContainerTreeNode<Board>[]; + nodes: ContentContainerTreeNode<Desk>[]; }) => ( <ul className="flex flex-col gap-2"> {nodes.map(node => ( <li className="flex flex-col gap-2" key={node.id}> <HrefLink className="hover:bg-accent hover:text-accent-foreground focus-visible:ring-ring flex flex-col gap-1 rounded-lg border p-4 transition-colors focus-visible:ring-2 focus-visible:outline-none" - href={boardHref(node.slug)} + href={deskHref(node.slug)} > <span className="text-foreground flex items-center gap-2 font-medium text-balance"> - <BoardColorDot board={node} /> + <DeskColorDot desk={node} /> {node.name} </span> {node.metadata.description ? ( @@ -44,7 +44,7 @@ const BoardTreeItems = ({ {node.children.length > 0 ? ( <div className="border-l pl-4 md:pl-6"> - <BoardTreeItems nodes={node.children} /> + <DeskTreeItems nodes={node.children} /> </div> ) : null} </li> @@ -52,14 +52,14 @@ const BoardTreeItems = ({ </ul> ); -export const BoardTree = ({ +export const DeskTree = ({ label, nodes, }: { label: string; - nodes: ContentContainerTreeNode<Board>[]; + nodes: ContentContainerTreeNode<Desk>[]; }) => ( <nav aria-label={label}> - <BoardTreeItems nodes={nodes} /> + <DeskTreeItems nodes={nodes} /> </nav> ); diff --git a/plugins/newsroom/src/pages/desks-data.ts b/plugins/newsroom/src/pages/desks-data.ts new file mode 100644 index 0000000000..1b0c3eab57 --- /dev/null +++ b/plugins/newsroom/src/pages/desks-data.ts @@ -0,0 +1,28 @@ +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +import { manifest } from "@/manifest.gen"; + +export const fetchDesks = async () => { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/desks", + path: "/", + args: { query: {} }, + }); + + if (res.status !== 200) throw new Error("Loading the desks failed."); + + const { items } = await res.json(); + + return items; +}; + +export type Desk = Awaited<ReturnType<typeof fetchDesks>>[number]; + +const HEX_COLOR = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i; + +export const deskColor = (desk: Pick<Desk, "metadata">): null | string => + typeof desk.metadata.color === "string" && HEX_COLOR.test(desk.metadata.color) + ? desk.metadata.color + : null; diff --git a/plugins/example/src/pages/boards-page.tsx b/plugins/newsroom/src/pages/desks-page.tsx similarity index 63% rename from plugins/example/src/pages/boards-page.tsx rename to plugins/newsroom/src/pages/desks-page.tsx index 4c678d43c2..9b94496384 100644 --- a/plugins/example/src/pages/boards-page.tsx +++ b/plugins/newsroom/src/pages/desks-page.tsx @@ -18,50 +18,50 @@ import { import { FolderTreeIcon } from "lucide-react"; import { useTranslations } from "use-intl"; -import { BoardTree } from "./board-tree"; -import { discussionsQueryOptions } from "./discussion-list"; -import { discussionNewHref } from "./discussion-search"; -import { boardsQueryOptions } from "./example-queries"; -import { LatestDiscussions } from "./latest-discussions"; +import { desksQueryOptions } from "./desk-queries"; +import { DeskTree } from "./desk-tree"; +import { LatestLetters } from "./latest-letters"; +import { lettersQueryOptions } from "./letter-list"; +import { letterNewHref } from "./letter-search"; -const loadBoards = async ( +const loadDesks = async ( queryClient: RouteLoadContext["queryClient"], locale: string, ) => { - const [boards] = await Promise.all([ - queryClient.query(boardsQueryOptions()), + const [desks] = await Promise.all([ + queryClient.query(desksQueryOptions()), // No `LOADER_DATA_QUERY_META`: the entry is dehydrated, so - // `LatestDiscussions` finds it in the browser and renders on the server. + // `LatestLetters` finds it in the browser and renders on the server. queryClient - .query(discussionsQueryOptions({ locale, search: {} })) + .query(lettersQueryOptions({ locale, search: {} })) .catch(() => null), ]); - return { tree: contentContainerTree(boards) }; + return { tree: contentContainerTree(desks) }; }; -type BoardsPageData = Awaited<ReturnType<typeof loadBoards>>; +type DesksPageData = Awaited<ReturnType<typeof loadDesks>>; -const BoardsBreadcrumb = () => { - const t = useTranslations("@vitnode/example.boards"); +const DesksBreadcrumb = () => { + const t = useTranslations("newsroom.desks"); return <span>{t("title")}</span>; }; -export const route = defineRoute<BoardsPageData>({ +export const route = defineRoute<DesksPageData>({ load: async ({ context }) => - await loadBoards(context.queryClient, context.locale), + await loadDesks(context.queryClient, context.locale), head: ({ t }) => ({ - description: t("@vitnode/example.boards.desc"), - title: t("@vitnode/example.boards.title"), + description: t("newsroom.desks.desc"), + title: t("newsroom.desks.title"), }), - breadcrumb: BoardsBreadcrumb, + breadcrumb: DesksBreadcrumb, }); -const BoardsPage = ({ loaderData }: PluginRoutePageProps<BoardsPageData>) => { - const t = useTranslations("@vitnode/example.boards"); +const DesksPage = ({ loaderData }: PluginRoutePageProps<DesksPageData>) => { + const t = useTranslations("newsroom.desks"); return ( <div className="container mx-auto flex max-w-3xl flex-col gap-6 px-4 py-8 md:gap-8 md:py-12"> @@ -77,9 +77,9 @@ const BoardsPage = ({ loaderData }: PluginRoutePageProps<BoardsPageData>) => { <HrefLink className={buttonVariants({ className: "self-start" })} - href={discussionNewHref()} + href={letterNewHref()} > - {t("new_discussion")} + {t("new_letter")} </HrefLink> </header> @@ -102,12 +102,12 @@ const BoardsPage = ({ loaderData }: PluginRoutePageProps<BoardsPageData>) => { </EmptyContent> </Empty> ) : ( - <BoardTree label={t("tree")} nodes={loaderData.tree} /> + <DeskTree label={t("tree")} nodes={loaderData.tree} /> )} - <LatestDiscussions /> + <LatestLetters /> </div> ); }; -export default BoardsPage; +export default DesksPage; diff --git a/plugins/example/src/pages/editor-showcase.ts b/plugins/newsroom/src/pages/editor-showcase.ts similarity index 100% rename from plugins/example/src/pages/editor-showcase.ts rename to plugins/newsroom/src/pages/editor-showcase.ts diff --git a/plugins/example/src/pages/embed-page.tsx b/plugins/newsroom/src/pages/embed-page.tsx similarity index 100% rename from plugins/example/src/pages/embed-page.tsx rename to plugins/newsroom/src/pages/embed-page.tsx diff --git a/plugins/example/src/pages/event-page.tsx b/plugins/newsroom/src/pages/event-page.tsx similarity index 94% rename from plugins/example/src/pages/event-page.tsx rename to plugins/newsroom/src/pages/event-page.tsx index 5016bd9dbd..ae38201e13 100644 --- a/plugins/example/src/pages/event-page.tsx +++ b/plugins/newsroom/src/pages/event-page.tsx @@ -11,7 +11,7 @@ import { z } from "zod"; import { manifest } from "@/manifest.gen"; -import { ContentArticle } from "./content-article"; +import { ContentStory } from "./content-story"; const zodEvent = z.object({ body: zodRichTextDocument.nullable(), @@ -61,10 +61,10 @@ export const route = definePluginRoute({ const EventPage = ({ loaderData: { item, locale }, }: PluginRoutePageProps<EventPageData>) => { - const t = useTranslations("@vitnode/example.events"); + const t = useTranslations("newsroom.events"); return ( - <ContentArticle + <ContentStory lang={locale} publishedAt={item.publishedAt} title={item.title} @@ -99,7 +99,7 @@ const EventPage = ({ </ul> </section> ) : null} - </ContentArticle> + </ContentStory> ); }; diff --git a/plugins/example/src/pages/advanced-article-page.tsx b/plugins/newsroom/src/pages/explainer-page.tsx similarity index 74% rename from plugins/example/src/pages/advanced-article-page.tsx rename to plugins/newsroom/src/pages/explainer-page.tsx index 376952f7fe..7f30208c85 100644 --- a/plugins/example/src/pages/advanced-article-page.tsx +++ b/plugins/newsroom/src/pages/explainer-page.tsx @@ -12,9 +12,9 @@ import { z } from "zod"; import { manifest } from "@/manifest.gen"; -import { ContentArticle } from "./content-article"; +import { ContentStory } from "./content-story"; -const zodAdvancedArticle = z.object({ +const zodExplainer = z.object({ faq: z .array(z.object({ answer: z.string(), question: z.string() })) .nullable() @@ -27,7 +27,7 @@ const zodAdvancedArticle = z.object({ title: z.string(), }); -const loadAdvancedArticle = async ({ +const loadExplainer = async ({ locale, slug, }: { @@ -38,7 +38,7 @@ const loadAdvancedArticle = async ({ fetcher({ plugin: manifest.id, method: "get", - module: "content/advanced-articles", + module: "content/explainers", path: "/delivery/resolve/{slug}", args: { params: { slug: encodeURIComponent(slug) }, @@ -48,7 +48,7 @@ const loadAdvancedArticle = async ({ fetcher({ plugin: manifest.id, method: "get", - module: "content/advanced-articles", + module: "content/explainers", path: "/{slug}", args: { params: { slug: encodeURIComponent(slug) }, @@ -59,24 +59,22 @@ const loadAdvancedArticle = async ({ if (resolution.status !== 200) { throw new Error( - `Resolving the advanced article "${slug}" answered ${resolution.status}.`, + `Resolving the explainer "${slug}" answered ${resolution.status}.`, ); } return contentDeliveryPage({ item: - detail.status === 200 - ? zodAdvancedArticle.parse(await detail.json()) - : null, + detail.status === 200 ? zodExplainer.parse(await detail.json()) : null, resolution: await resolution.json(), }); }; -type AdvancedArticlePageData = Awaited<ReturnType<typeof loadAdvancedArticle>>; +type ExplainerPageData = Awaited<ReturnType<typeof loadExplainer>>; export const route = definePluginRoute({ load: async ({ context, params }) => - await loadAdvancedArticle({ locale: context.locale, slug: params.slug }), + await loadExplainer({ locale: context.locale, slug: params.slug }), head: ({ loaderData }) => contentDeliveryPageHead(loaderData?.metadata, { @@ -84,14 +82,14 @@ export const route = definePluginRoute({ }), }); -const AdvancedArticlePage = ({ +const ExplainerPage = ({ loaderData: { item, metadata }, -}: PluginRoutePageProps<AdvancedArticlePageData>) => { - const t = useTranslations("@vitnode/example.articles"); +}: PluginRoutePageProps<ExplainerPageData>) => { + const t = useTranslations("newsroom.stories"); const faq = item.faq ?? []; return ( - <ContentArticle + <ContentStory lang={metadata.locale ?? undefined} lead={item.seo?.description} publishedAt={item.publishedAt} @@ -99,12 +97,12 @@ const AdvancedArticlePage = ({ > {faq.length > 0 ? ( <section - aria-labelledby="advanced-article-faq" + aria-labelledby="explainer-faq" className="flex flex-col gap-4" > <h2 className="text-foreground text-xl font-semibold tracking-tight text-balance" - id="advanced-article-faq" + id="explainer-faq" > {t("faq")} </h2> @@ -123,8 +121,8 @@ const AdvancedArticlePage = ({ </dl> </section> ) : null} - </ContentArticle> + </ContentStory> ); }; -export default AdvancedArticlePage; +export default ExplainerPage; diff --git a/plugins/example/src/pages/guide-index-page.tsx b/plugins/newsroom/src/pages/guide-index-page.tsx similarity index 90% rename from plugins/example/src/pages/guide-index-page.tsx rename to plugins/newsroom/src/pages/guide-index-page.tsx index b6035c6115..62e2f1cf80 100644 --- a/plugins/example/src/pages/guide-index-page.tsx +++ b/plugins/newsroom/src/pages/guide-index-page.tsx @@ -1,7 +1,7 @@ import { useTranslations } from "use-intl"; const GuideIndexPage = () => { - const t = useTranslations("@vitnode/example.guide"); + const t = useTranslations("newsroom.guide"); return ( <div className="flex flex-col gap-4"> diff --git a/plugins/example/src/pages/guide-layout.tsx b/plugins/newsroom/src/pages/guide-layout.tsx similarity index 88% rename from plugins/example/src/pages/guide-layout.tsx rename to plugins/newsroom/src/pages/guide-layout.tsx index 35bfbf3240..ac4739ef0e 100644 --- a/plugins/example/src/pages/guide-layout.tsx +++ b/plugins/newsroom/src/pages/guide-layout.tsx @@ -2,7 +2,7 @@ import { definePluginRoute } from "@vitnode/core/routing"; import { useTranslations } from "use-intl"; const GuideLayout = ({ children }: { children: React.ReactNode }) => { - const t = useTranslations("@vitnode/example.guide"); + const t = useTranslations("newsroom.guide"); return ( <div className="container mx-auto flex max-w-2xl flex-col gap-6 p-4"> @@ -22,7 +22,7 @@ const GuideLayout = ({ children }: { children: React.ReactNode }) => { }; const GuideBreadcrumb = () => { - const t = useTranslations("@vitnode/example.guide"); + const t = useTranslations("newsroom.guide"); return <span>{t("title")}</span>; }; diff --git a/plugins/example/src/pages/guide-topic-page.tsx b/plugins/newsroom/src/pages/guide-topic-page.tsx similarity index 97% rename from plugins/example/src/pages/guide-topic-page.tsx rename to plugins/newsroom/src/pages/guide-topic-page.tsx index 446580e375..256de764ab 100644 --- a/plugins/example/src/pages/guide-topic-page.tsx +++ b/plugins/newsroom/src/pages/guide-topic-page.tsx @@ -25,7 +25,7 @@ const GuideTopicPage = ({ loaderData, search, }: PluginRoutePageProps<Topic, TopicSearch>) => { - const t = useTranslations("@vitnode/example.guide"); + const t = useTranslations("newsroom.guide"); return ( <article className="flex flex-col gap-3"> diff --git a/plugins/newsroom/src/pages/home-page.tsx b/plugins/newsroom/src/pages/home-page.tsx new file mode 100644 index 0000000000..123cbdca22 --- /dev/null +++ b/plugins/newsroom/src/pages/home-page.tsx @@ -0,0 +1,47 @@ +import type { PluginRoutePageProps } from "@vitnode/core/routing"; + +import { definePluginRoute } from "@vitnode/core/routing"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { useTranslations } from "use-intl"; + +import { manifest } from "@/manifest.gen"; + +interface HelloMessage { + message: string; +} + +export const route = definePluginRoute<HelloMessage>({ + load: async () => { + const response = await fetcher({ + plugin: manifest.id, + method: "get", + module: "hello", + path: "/", + }); + + return await response.json(); + }, +}); + +const HomePage = ({ loaderData }: PluginRoutePageProps<HelloMessage>) => { + const t = useTranslations("newsroom"); + + return ( + <div className="container mx-auto flex max-w-2xl flex-col gap-4 p-4"> + <h1 className="text-2xl font-semibold tracking-tight text-balance"> + {t("home.title")} + </h1> + + <p className="text-muted-foreground leading-relaxed text-pretty"> + {t("home.desc")} + </p> + + <div className="bg-card text-card-foreground flex flex-col gap-1 rounded-lg border p-4"> + <span className="text-muted-foreground text-sm">{t("home.api")}</span> + <span className="font-medium">{loaderData.message}</span> + </div> + </div> + ); +}; + +export default HomePage; diff --git a/plugins/newsroom/src/pages/latest-articles.tsx b/plugins/newsroom/src/pages/latest-articles.tsx new file mode 100644 index 0000000000..33b6accf53 --- /dev/null +++ b/plugins/newsroom/src/pages/latest-articles.tsx @@ -0,0 +1,70 @@ +import { useQuery } from "@tanstack/react-query"; +import { Skeleton } from "@vitnode/core/components/ui/skeleton"; +import { ContentListResults } from "@vitnode/core/tanstack/content"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { useLocale, useTranslations } from "use-intl"; + +import { articlesQueryOptions } from "./article-list"; + +/** How many articles the box shows, out of the first page of `/news`. */ +const LATEST_COUNT = 5; + +/** The newest published articles, without the one being read. */ +export const LatestArticles = ({ currentId }: { currentId?: number }) => { + const t = useTranslations("newsroom.articles.latest"); + const locale = useLocale(); + const { data, isError, isFetching } = useQuery( + articlesQueryOptions({ locale, search: {} }), + ); + const items = data?.edges + .filter(article => article.id !== currentId) + .slice(0, LATEST_COUNT); + + return ( + <section aria-labelledby="latest-articles" className="flex flex-col gap-3"> + <div className="flex items-center justify-between gap-4"> + <h2 className="text-xl font-semibold text-balance" id="latest-articles"> + {t("title")} + </h2> + <HrefLink className="text-sm font-medium hover:underline" href="/news"> + {t("all")} + </HrefLink> + </div> + + <ContentListResults + className="flex flex-col divide-y rounded-lg border" + empty={<p className="text-muted-foreground text-sm">{t("empty")}</p>} + error={<p className="text-muted-foreground text-sm">{t("error")}</p>} + getKey={article => article.id} + isError={isError} + isFetching={isFetching} + isFiltered={false} + itemClassName="px-4 py-3" + items={items} + label={t("title")} + loading={ + <div + aria-busy="true" + className="flex flex-col gap-3 rounded-lg border p-4" + > + <span className="sr-only" role="status"> + {t("loading")} + </span> + {[0, 1, 2].map(key => ( + <Skeleton className="h-5 w-2/3" key={key} /> + ))} + </div> + } + noResults={null} + renderItem={article => ( + <HrefLink + className="font-medium hover:underline" + href={`/news/${article.slug}`} + > + {article.title} + </HrefLink> + )} + /> + </section> + ); +}; diff --git a/plugins/example/src/pages/latest-discussions.tsx b/plugins/newsroom/src/pages/latest-letters.tsx similarity index 64% rename from plugins/example/src/pages/latest-discussions.tsx rename to plugins/newsroom/src/pages/latest-letters.tsx index 7608fdc5b1..61d7885188 100644 --- a/plugins/example/src/pages/latest-discussions.tsx +++ b/plugins/newsroom/src/pages/latest-letters.tsx @@ -4,35 +4,32 @@ import { ContentListResults } from "@vitnode/core/tanstack/content"; import { HrefLink } from "@vitnode/core/tanstack/link"; import { useLocale, useTranslations } from "use-intl"; -import { DISCUSSIONS_HREF, discussionsQueryOptions } from "./discussion-list"; -import { discussionHref } from "./discussion-search"; +import { LETTERS_HREF, lettersQueryOptions } from "./letter-list"; +import { letterHref } from "./letter-search"; /** - * The five newest discussions, for any page. Shares its cache entry with the - * first page of `/discussions`, so warming either warms both. + * The five newest letters, for any page. Shares its cache entry with the + * first page of `/letters`, so warming either warms both. */ -export const LatestDiscussions = () => { - const t = useTranslations("@vitnode/example.boards.latest"); +export const LatestLetters = () => { + const t = useTranslations("newsroom.desks.latest"); const locale = useLocale(); const { data, isError, isFetching } = useQuery( - discussionsQueryOptions({ locale, search: {} }), + lettersQueryOptions({ locale, search: {} }), ); return ( - <section - aria-labelledby="latest-discussions" - className="flex flex-col gap-3" - > + <section aria-labelledby="latest-letters" className="flex flex-col gap-3"> <div className="flex items-center justify-between gap-4"> <h2 className="text-foreground text-xl font-semibold text-balance" - id="latest-discussions" + id="latest-letters" > {t("title")} </h2> <HrefLink className={buttonVariants({ size: "sm", variant: "ghost" })} - href={DISCUSSIONS_HREF} + href={LETTERS_HREF} > {t("all")} </HrefLink> @@ -49,7 +46,7 @@ export const LatestDiscussions = () => { {t("error")} </p> } - getKey={discussion => discussion.id} + getKey={letter => letter.id} isError={isError} isFetching={isFetching} isFiltered={false} @@ -62,17 +59,15 @@ export const LatestDiscussions = () => { </p> } noResults={null} - renderItem={discussion => - discussion.slug === null ? ( - <span className="text-foreground font-medium"> - {discussion.title} - </span> + renderItem={letter => + letter.slug === null ? ( + <span className="text-foreground font-medium">{letter.title}</span> ) : ( <HrefLink className="text-foreground font-medium hover:underline" - href={discussionHref(discussion.slug)} + href={letterHref(letter.slug)} > - {discussion.title} + {letter.title} </HrefLink> ) } diff --git a/plugins/example/src/pages/discussion-actions.tsx b/plugins/newsroom/src/pages/letter-actions.tsx similarity index 70% rename from plugins/example/src/pages/discussion-actions.tsx rename to plugins/newsroom/src/pages/letter-actions.tsx index 231425db6c..356c77c355 100644 --- a/plugins/example/src/pages/discussion-actions.tsx +++ b/plugins/newsroom/src/pages/letter-actions.tsx @@ -7,13 +7,13 @@ import { ReportButton } from "@vitnode/core/tanstack/moderation"; import { PencilIcon } from "lucide-react"; import { useTranslations } from "use-intl"; -import { discussionContentType } from "@/content/discussion"; +import { letterContentType } from "@/content/letter"; import { manifest } from "@/manifest.gen"; -import { discussionEditHref } from "./discussion-search"; +import { letterEditHref } from "./letter-search"; -/** Edit and Report for one discussion, as the Content Engine allows them. */ -export const DiscussionActions = ({ +/** Edit and Report for one letter, as the Content Engine allows them. */ +export const LetterActions = ({ can, describedBy, id, @@ -21,13 +21,13 @@ export const DiscussionActions = ({ title, }: { can: ContentPermissions; - /** The id of the element that names the discussion, for screen readers. */ + /** The id of the element that names the letter, for screen readers. */ describedBy?: string; id: number; size?: "default" | "sm"; title: string; }) => { - const t = useTranslations("@vitnode/example.discussions.detail"); + const t = useTranslations("newsroom.letters.detail"); return ( <div className="flex flex-wrap items-center gap-2"> @@ -35,7 +35,7 @@ export const DiscussionActions = ({ <HrefLink aria-describedby={describedBy} className={buttonVariants({ size, variant: "outline" })} - href={discussionEditHref(id)} + href={letterEditHref(id)} > <PencilIcon aria-hidden="true" /> {t("edit")} @@ -46,7 +46,7 @@ export const DiscussionActions = ({ className="text-muted-foreground" describedBy={describedBy} preview={{ title }} - target={contentTarget(manifest.id, discussionContentType, id)} + target={contentTarget(manifest.id, letterContentType, id)} typeLabel={t("report_type")} /> ) : null} diff --git a/plugins/example/src/pages/discussion-edit-page.tsx b/plugins/newsroom/src/pages/letter-edit-page.tsx similarity index 70% rename from plugins/example/src/pages/discussion-edit-page.tsx rename to plugins/newsroom/src/pages/letter-edit-page.tsx index 00ecf26fc4..b3dbc436a8 100644 --- a/plugins/example/src/pages/discussion-edit-page.tsx +++ b/plugins/newsroom/src/pages/letter-edit-page.tsx @@ -25,31 +25,31 @@ import { useTranslations } from "use-intl"; import { manifest } from "@/manifest.gen"; import { - DISCUSSION_FIELDS, - DiscussionForm, - type DiscussionFormSchema, -} from "./discussion-form"; -import { invalidateDiscussionLists } from "./discussion-list"; -import { discussionEditHref, discussionHref } from "./discussion-search"; -import { DiscussionShell } from "./discussion-shell"; + LETTER_FIELDS, + LetterForm, + type LetterFormSchema, +} from "./letter-form"; +import { invalidateLetterLists } from "./letter-list"; +import { letterEditHref, letterHref } from "./letter-search"; +import { LetterShell } from "./letter-shell"; // Answers only for the owner and moderators, drafts and hidden records included. -const fetchEditableDiscussion = async (id: number) => +const fetchEditableLetter = async (id: number) => await fetcher({ plugin: manifest.id, method: "get", - module: "content/discussions", + module: "content/letters", path: "/{id}/edit", args: { params: { id } }, }); -const loadEditableDiscussion = async (param: string) => { +const loadEditableLetter = async (param: string) => { const id = Number(param); if (!Number.isSafeInteger(id) || id < 1) { return { state: "notFound" as const }; } - const res = await fetchEditableDiscussion(id); + const res = await fetchEditableLetter(id); if (res.status === 200) { return { record: await res.json(), state: "ready" as const }; @@ -58,41 +58,38 @@ const loadEditableDiscussion = async (param: string) => { if (res.status === 403) return { state: "forbidden" as const }; if (res.status === 404) return { state: "notFound" as const }; - throw new Error(`Loading discussion ${id} for editing failed.`); + throw new Error(`Loading letter ${id} for editing failed.`); }; -type DiscussionEditData = Awaited<ReturnType<typeof loadEditableDiscussion>>; +type LetterEditData = Awaited<ReturnType<typeof loadEditableLetter>>; -type EditableDiscussion = Extract< - DiscussionEditData, - { state: "ready" } ->["record"]; +type EditableLetter = Extract<LetterEditData, { state: "ready" }>["record"]; -const DiscussionEditBreadcrumb = () => { - const t = useTranslations("@vitnode/example.discussions.edit"); +const LetterEditBreadcrumb = () => { + const t = useTranslations("newsroom.letters.edit"); return <span>{t("title")}</span>; }; export const route = definePluginRoute({ - load: async ({ params }) => await loadEditableDiscussion(params.id), + load: async ({ params }) => await loadEditableLetter(params.id), head: ({ t }) => ({ robots: "noindex, nofollow", - title: t("@vitnode/example.discussions.edit.title"), + title: t("newsroom.letters.edit.title"), }), - breadcrumb: DiscussionEditBreadcrumb, + breadcrumb: LetterEditBreadcrumb, }); -const DiscussionEditForm = ({ record }: { record: EditableDiscussion }) => { - const t = useTranslations("@vitnode/example.discussions"); +const LetterEditForm = ({ record }: { record: EditableLetter }) => { + const t = useTranslations("newsroom.letters"); const queryClient = useQueryClient(); const [slug, setSlug] = useState(record.slug); const write = useContentPublicWrite({ - fields: DISCUSSION_FIELDS, + fields: LETTER_FIELDS, latestVersion: async () => { - const res = await fetchEditableDiscussion(record.id); + const res = await fetchEditableLetter(record.id); return res.status === 200 ? (await res.json()).version : null; }, @@ -100,17 +97,14 @@ const DiscussionEditForm = ({ record }: { record: EditableDiscussion }) => { version: record.version, }); - const onSubmit: AutoFormOnSubmit<DiscussionFormSchema> = async ( - values, - form, - ) => { + const onSubmit: AutoFormOnSubmit<LetterFormSchema> = async (values, form) => { const updated = await write.submit( form, async expectedVersion => await fetcher({ plugin: manifest.id, method: "patch", - module: "content/discussions", + module: "content/letters", path: "/{id}", args: { params: { id: record.id }, @@ -122,7 +116,7 @@ const DiscussionEditForm = ({ record }: { record: EditableDiscussion }) => { setSlug(updated.slug); form.reset(values); - await invalidateDiscussionLists(queryClient); + await invalidateLetterLists(queryClient); toast.success(t("edit.success.title"), { description: t("edit.success.desc", { title: updated.values.title }), }); @@ -132,7 +126,7 @@ const DiscussionEditForm = ({ record }: { record: EditableDiscussion }) => { <> {write.conflict} - <DiscussionForm + <LetterForm defaultValues={record.values} onSubmit={onSubmit} submitLabel={t("edit.submit")} @@ -144,7 +138,7 @@ const DiscussionEditForm = ({ record }: { record: EditableDiscussion }) => { className: "self-start", variant: "link", })} - href={discussionHref(slug)} + href={letterHref(slug)} > {t("edit.view")} </HrefLink> @@ -176,10 +170,10 @@ const RefusedState = ({ </div> ); -const DiscussionEditPage = ({ +const LetterEditPage = ({ loaderData, -}: PluginRoutePageProps<DiscussionEditData>) => { - const t = useTranslations("@vitnode/example.discussions"); +}: PluginRoutePageProps<LetterEditData>) => { + const t = useTranslations("newsroom.letters"); if (loaderData.state === "unauthenticated") { return ( @@ -187,7 +181,7 @@ const DiscussionEditPage = ({ action={ <HrefLink className={buttonVariants()} - href={`/login?returnTo=${encodeURIComponent(discussionEditHref(loaderData.id))}`} + href={`/login?returnTo=${encodeURIComponent(letterEditHref(loaderData.id))}`} > {t("state.unauthenticated.action")} </HrefLink> @@ -207,7 +201,7 @@ const DiscussionEditPage = ({ action={ <HrefLink className={buttonVariants({ variant: "outline" })} - href="/discussions/new" + href="/letters/new" > {t("state.back")} </HrefLink> @@ -226,10 +220,10 @@ const DiscussionEditPage = ({ } return ( - <DiscussionShell description={t("edit.desc")} title={t("edit.title")}> - <DiscussionEditForm record={loaderData.record} /> - </DiscussionShell> + <LetterShell description={t("edit.desc")} title={t("edit.title")}> + <LetterEditForm record={loaderData.record} /> + </LetterShell> ); }; -export default DiscussionEditPage; +export default LetterEditPage; diff --git a/plugins/example/src/pages/discussion-form.tsx b/plugins/newsroom/src/pages/letter-form.tsx similarity index 62% rename from plugins/example/src/pages/discussion-form.tsx rename to plugins/newsroom/src/pages/letter-form.tsx index d3a9718161..7ebc74b93c 100644 --- a/plugins/example/src/pages/discussion-form.tsx +++ b/plugins/newsroom/src/pages/letter-form.tsx @@ -17,16 +17,16 @@ import { useTranslations } from "use-intl"; import { z } from "zod"; /** The fields the forms render, so server issues on them show in place. */ -export const DISCUSSION_FIELDS = ["title", "body", "board"] as const; +export const LETTER_FIELDS = ["title", "body", "desk"] as const; -export interface DiscussionFormValues { +export interface LetterFormValues { body: RichTextDocument; title: string; } -const createDiscussionFormSchema = ( +const createLetterFormSchema = ( t: (key: "body.required" | "title.max" | "title.min") => string, - defaults: DiscussionFormValues, + defaults: LetterFormValues, ) => z.object({ title: z @@ -40,41 +40,39 @@ const createDiscussionFormSchema = ( .default(defaults.body), }); -export type DiscussionFormSchema = ReturnType< - typeof createDiscussionFormSchema ->; +export type LetterFormSchema = ReturnType<typeof createLetterFormSchema>; -export interface DiscussionBoardChoice { +export interface LetterDeskChoice { options: { label: string; value: string }[]; selected?: string; } -const createDiscussionCreateFormSchema = ( +const createLetterCreateFormSchema = ( t: ( - key: "board.required" | "body.required" | "title.max" | "title.min", + key: "body.required" | "desk.required" | "title.max" | "title.min", ) => string, ids: [string, ...string[]], selected: string | undefined, ) => { - const board = z.enum(ids, { error: t("board.required") }); + const desk = z.enum(ids, { error: t("desk.required") }); - return createDiscussionFormSchema(t, { + return createLetterFormSchema(t, { body: emptyRichTextDocument(), title: "", }).extend({ - board: + desk: selected !== undefined && ids.includes(selected) - ? board.default(selected) - : board, + ? desk.default(selected) + : desk, }); }; -export type DiscussionCreateFormSchema = ReturnType< - typeof createDiscussionCreateFormSchema +export type LetterCreateFormSchema = ReturnType< + typeof createLetterCreateFormSchema >; -const useDiscussionFields = () => { - const t = useTranslations("@vitnode/example.discussions.form"); +const useLetterFields = () => { + const t = useTranslations("newsroom.letters.form"); return [ { @@ -97,25 +95,25 @@ const useDiscussionFields = () => { ]; }; -export const DiscussionForm = ({ +export const LetterForm = ({ defaultValues = { body: emptyRichTextDocument(), title: "" }, isLeaving = false, onSubmit, submitLabel, }: { - defaultValues?: DiscussionFormValues; + defaultValues?: LetterFormValues; isLeaving?: boolean; - onSubmit: AutoFormOnSubmit<DiscussionFormSchema>; + onSubmit: AutoFormOnSubmit<LetterFormSchema>; submitLabel: string; }) => { - const t = useTranslations("@vitnode/example.discussions.form"); - const fields = useDiscussionFields(); + const t = useTranslations("newsroom.letters.form"); + const fields = useLetterFields(); return ( <AutoForm aria-busy={isLeaving} fields={fields} - formSchema={createDiscussionFormSchema(t, defaultValues)} + formSchema={createLetterFormSchema(t, defaultValues)} onSubmit={onSubmit} submitButtonProps={{ children: submitLabel, @@ -126,20 +124,20 @@ export const DiscussionForm = ({ ); }; -export const DiscussionCreateForm = ({ - boards, +export const LetterCreateForm = ({ + desks, isLeaving = false, onSubmit, submitLabel, }: { - boards: DiscussionBoardChoice; + desks: LetterDeskChoice; isLeaving?: boolean; - onSubmit: AutoFormOnSubmit<DiscussionCreateFormSchema>; + onSubmit: AutoFormOnSubmit<LetterCreateFormSchema>; submitLabel: string; }) => { - const t = useTranslations("@vitnode/example.discussions.form"); - const fields = useDiscussionFields(); - const [first, ...rest] = boards.options.map(option => option.value); + const t = useTranslations("newsroom.letters.form"); + const fields = useLetterFields(); + const [first, ...rest] = desks.options.map(option => option.value); if (first === undefined) return null; return ( @@ -147,23 +145,23 @@ export const DiscussionCreateForm = ({ aria-busy={isLeaving} fields={[ { - id: "board", + id: "desk", component: props => ( <AutoFormSelect {...props} - description={t("board.desc")} - label={t("board.label")} - labels={boards.options} - placeholder={t("board.placeholder")} + description={t("desk.desc")} + label={t("desk.label")} + labels={desks.options} + placeholder={t("desk.placeholder")} /> ), }, ...fields, ]} - formSchema={createDiscussionCreateFormSchema( + formSchema={createLetterCreateFormSchema( t, [first, ...rest], - boards.selected, + desks.selected, )} onSubmit={onSubmit} submitButtonProps={{ diff --git a/plugins/newsroom/src/pages/letter-list.ts b/plugins/newsroom/src/pages/letter-list.ts new file mode 100644 index 0000000000..4ca7c5ee69 --- /dev/null +++ b/plugins/newsroom/src/pages/letter-list.ts @@ -0,0 +1,95 @@ +import type { QueryClient } from "@tanstack/react-query"; +import type { ContentListSearch } from "@vitnode/core/tanstack/content"; + +import { + contentListIdFilter, + contentListQueryOptions, + defineContentList, + useContentPermissions, +} from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +import { manifest } from "@/manifest.gen"; + +export const LETTERS_HREF = "/letters"; + +/** `/letters`: newest first, 10 a page, searchable and filterable by desk. */ +export const letterList = defineContentList({ + defaultSort: "newest", + filters: { desk: contentListIdFilter }, + pageSize: 10, + sorts: { + newest: { order: "desc", orderBy: "publishedAt" }, + oldest: { order: "asc", orderBy: "publishedAt" }, + title: { order: "asc", orderBy: "title" }, + }, +}); + +export type LetterListSort = (typeof letterList.sorts)[number]; + +export type LetterListSearch = ContentListSearch< + LetterListSort, + { desk: typeof contentListIdFilter } +>; + +export const letterListSearch = ( + input: Record<string, unknown>, +): LetterListSearch => letterList.parseSearch(input); + +const letterQueryKeys = { + all: [manifest.id, "letters"] as const, +}; + +export const lettersQueryOptions = (request: { + locale: string; + search: LetterListSearch; +}) => + contentListQueryOptions({ + ...request, + queryKey: letterQueryKeys.all, + fetch: async ({ search }) => { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/letters", + path: "/", + args: { + query: { + ...letterList.apiQuery(search), + ...(search.desk === undefined + ? {} + : { desk: String(search.desk), includeDescendants: "true" }), + }, + }, + }); + if (res.status !== 200) { + throw new Error(`Loading letters answered ${res.status}.`); + } + + return await res.json(); + }, + }); + +/** Expires every cached letter list, after a member posts or edits one. */ +export const invalidateLetterLists = async (queryClient: QueryClient) => { + await queryClient.invalidateQueries({ queryKey: letterQueryKeys.all }); +}; + +/** What the visitor may do with each letter on screen: `canEdit`, `canReport`. */ +export const useLetterPermissions = (ids: readonly number[]) => + useContentPermissions({ + ids, + queryKey: letterQueryKeys.all, + fetch: async request => { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/letters", + path: "/permissions", + args: { query: { ids: request.join(",") } }, + }); + if (res.status !== 200) throw new Error("Loading permissions failed."); + + return await res.json(); + }, + }); diff --git a/plugins/newsroom/src/pages/letter-new-page.tsx b/plugins/newsroom/src/pages/letter-new-page.tsx new file mode 100644 index 0000000000..d3d58c427d --- /dev/null +++ b/plugins/newsroom/src/pages/letter-new-page.tsx @@ -0,0 +1,141 @@ +import type { AutoFormOnSubmit } from "@vitnode/core/components/form/auto-form"; +import type { PluginRoutePageProps } from "@vitnode/core/routing"; + +import { useQueryClient } from "@tanstack/react-query"; +import { buttonVariants } from "@vitnode/core/components/ui/button"; +import { + Empty, + EmptyContent, + EmptyDescription, + EmptyHeader, + EmptyMedia, + EmptyTitle, +} from "@vitnode/core/components/ui/empty"; +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { HrefLink, useHrefNavigate } from "@vitnode/core/tanstack/link"; +import { + defineRoute, + type RouteLoadContext, +} from "@vitnode/core/tanstack/plugin-routes"; +import { FolderTreeIcon } from "lucide-react"; +import { useState } from "react"; +import { useTranslations } from "use-intl"; + +import { manifest } from "@/manifest.gen"; + +import type { LetterNewSearch } from "./letter-search"; + +import { desksQueryOptions } from "./desk-queries"; +import { DESKS_HREF } from "./desk-search"; +import { + LETTER_FIELDS, + LetterCreateForm, + type LetterCreateFormSchema, +} from "./letter-form"; +import { invalidateLetterLists } from "./letter-list"; +import { letterEditHref, letterHref } from "./letter-search"; +import { LetterShell } from "./letter-shell"; + +const loadDeskOptions = async (queryClient: RouteLoadContext["queryClient"]) => + (await queryClient.query(desksQueryOptions())).map(desk => ({ + label: `${"— ".repeat(desk.depth - 1)}${desk.name}`, + value: String(desk.id), + })); + +type LetterNewData = Awaited<ReturnType<typeof loadDeskOptions>>; + +const LetterNewBreadcrumb = () => { + const t = useTranslations("newsroom.letters.new"); + + return <span>{t("title")}</span>; +}; + +export const route = defineRoute<LetterNewData, LetterNewSearch>({ + load: async ({ context }) => await loadDeskOptions(context.queryClient), + + head: ({ t }) => ({ + description: t("newsroom.letters.new.desc"), + robots: "noindex, nofollow", + title: t("newsroom.letters.new.title"), + }), + + breadcrumb: LetterNewBreadcrumb, +}); + +const LetterNewPage = ({ + loaderData: options, + search, +}: PluginRoutePageProps<LetterNewData, LetterNewSearch>) => { + const t = useTranslations("newsroom.letters"); + const write = useContentPublicWrite({ + fields: LETTER_FIELDS, + uniqueField: "title", + }); + const [isLeaving, setIsLeaving] = useState(false); + const navigate = useHrefNavigate(); + const queryClient = useQueryClient(); + + const onSubmit: AutoFormOnSubmit<LetterCreateFormSchema> = async ( + { desk, ...values }, + form, + ) => { + const record = await write.submit( + form, + async () => + await fetcher({ + plugin: manifest.id, + method: "post", + module: "content/letters", + path: "/", + args: { body: { values: { ...values, desk: Number(desk) } } }, + }), + ); + if (!record) return; + + setIsLeaving(true); + await invalidateLetterLists(queryClient); + await navigate( + record.slug === null + ? letterEditHref(record.id) + : letterHref(record.slug, { created: true }), + ); + }; + + return ( + <LetterShell description={t("new.desc")} title={t("new.title")}> + {options.length === 0 ? ( + <Empty className="border"> + <EmptyHeader> + <EmptyMedia variant="icon"> + <FolderTreeIcon aria-hidden="true" /> + </EmptyMedia> + <EmptyTitle render={<h2 />}>{t("new.no_desks.title")}</EmptyTitle> + <EmptyDescription>{t("new.no_desks.desc")}</EmptyDescription> + </EmptyHeader> + <EmptyContent> + <HrefLink + className={buttonVariants({ variant: "outline" })} + href={DESKS_HREF} + > + {t("new.no_desks.action")} + </HrefLink> + </EmptyContent> + </Empty> + ) : ( + <LetterCreateForm + desks={{ + options, + selected: + search.desk === undefined ? undefined : String(search.desk), + }} + isLeaving={isLeaving} + onSubmit={onSubmit} + submitLabel={t("new.submit")} + /> + )} + </LetterShell> + ); +}; + +export default LetterNewPage; diff --git a/plugins/example/src/pages/discussion-page.tsx b/plugins/newsroom/src/pages/letter-page.tsx similarity index 65% rename from plugins/example/src/pages/discussion-page.tsx rename to plugins/newsroom/src/pages/letter-page.tsx index befdddda89..8d6e2b80cb 100644 --- a/plugins/example/src/pages/discussion-page.tsx +++ b/plugins/newsroom/src/pages/letter-page.tsx @@ -28,75 +28,75 @@ import { z } from "zod"; import { manifest } from "@/manifest.gen"; -import type { DiscussionSearch } from "./discussion-search"; +import type { LetterSearch } from "./letter-search"; -import { boardHref, BOARDS_HREF } from "./board-search"; -import { ContentArticle } from "./content-article"; -import { DiscussionActions } from "./discussion-actions"; -import { useDiscussionPermissions } from "./discussion-list"; -import { discussionNewHref } from "./discussion-search"; -import { queryBoard } from "./example-queries"; +import { ContentStory } from "./content-story"; +import { queryDesk } from "./desk-queries"; +import { deskHref, DESKS_HREF } from "./desk-search"; +import { LetterActions } from "./letter-actions"; +import { useLetterPermissions } from "./letter-list"; +import { letterNewHref } from "./letter-search"; -const zodDiscussion = z.object({ +const zodLetter = z.object({ author: zodContentPublicPerson.nullable(), - board: z.number(), + desk: z.number(), body: zodRichTextDocument, id: z.number(), publishedAt: z.string().nullable(), title: z.string(), }); -const loadDiscussion = async ( +const loadLetter = async ( queryClient: RouteLoadContext["queryClient"], slug: string, ) => { const detail = await fetcher({ plugin: manifest.id, method: "get", - module: "content/discussions", + module: "content/letters", path: "/{slug}", args: { params: { slug: encodeURIComponent(slug) } }, }); const item = contentPageItem( - detail.status === 200 ? zodDiscussion.parse(await detail.json()) : null, + detail.status === 200 ? zodLetter.parse(await detail.json()) : null, ); - // Only the author and moderators get a hidden discussion; readers get 404. + // Only the author and moderators get a hidden letter; readers get 404. const hidden = detail.headers.get(CONTENT_HIDDEN_HEADER) === "true"; - // Needs `item.board`, so it cannot start any sooner - but it is the same - // cached entry the board page reads, so moving between the two is free. - const board = await queryBoard(queryClient, String(item.board)).catch( + // Needs `item.desk`, so it cannot start any sooner - but it is the same + // cached entry the desk page reads, so moving between the two is free. + const desk = await queryDesk(queryClient, String(item.desk)).catch( () => null, ); - if (!board) return { ...item, boardTrail: [], hidden }; + if (!desk) return { ...item, deskTrail: [], hidden }; return { ...item, - boardTrail: [...board.ancestors, board.container], + deskTrail: [...desk.ancestors, desk.container], hidden, }; }; -type DiscussionPageData = Awaited<ReturnType<typeof loadDiscussion>>; +type LetterPageData = Awaited<ReturnType<typeof loadLetter>>; -export const route = defineRoute<DiscussionPageData, DiscussionSearch>({ +export const route = defineRoute<LetterPageData, LetterSearch>({ load: async ({ context, params }) => - await loadDiscussion(context.queryClient, params.slug), + await loadLetter(context.queryClient, params.slug), head: ({ loaderData }) => ({ title: loaderData?.title }), breadcrumb: ({ loaderData }) => <span>{loaderData.title}</span>, }); -const DiscussionPage = ({ +const LetterPage = ({ loaderData: item, navigate, search, -}: PluginRoutePageProps<DiscussionPageData, DiscussionSearch>) => { - const t = useTranslations("@vitnode/example.discussions.detail"); - const permissions = useDiscussionPermissions([item.id]); +}: PluginRoutePageProps<LetterPageData, LetterSearch>) => { + const t = useTranslations("newsroom.letters.detail"); + const permissions = useLetterPermissions([item.id]); const created = search.created === true; const announcedRef = useRef(false); @@ -110,23 +110,23 @@ const DiscussionPage = ({ }, [created, navigate, t]); return ( - <ContentArticle publishedAt={item.publishedAt} title={item.title}> - {item.boardTrail.length > 0 ? ( - <nav aria-label={t("board")}> + <ContentStory publishedAt={item.publishedAt} title={item.title}> + {item.deskTrail.length > 0 ? ( + <nav aria-label={t("desk")}> <ol className="text-muted-foreground flex flex-wrap items-center gap-2 text-sm leading-relaxed"> <li> - <HrefLink className="hover:text-foreground" href={BOARDS_HREF}> - {t("boards")} + <HrefLink className="hover:text-foreground" href={DESKS_HREF}> + {t("desks")} </HrefLink> </li> - {item.boardTrail.map(board => ( - <li className="flex items-center gap-2" key={board.id}> + {item.deskTrail.map(desk => ( + <li className="flex items-center gap-2" key={desk.id}> <span aria-hidden="true">/</span> <HrefLink className="hover:text-foreground" - href={boardHref(board.slug)} + href={deskHref(desk.slug)} > - {board.name} + {desk.name} </HrefLink> </li> ))} @@ -151,14 +151,14 @@ const DiscussionPage = ({ ) : null} <nav aria-label={t("actions")} className="flex flex-wrap gap-2"> - <DiscussionActions + <LetterActions can={permissions.of(item.id)} id={item.id} title={item.title} /> <HrefLink className={buttonVariants({ variant: "ghost" })} - href={discussionNewHref(item.board)} + href={letterNewHref(item.desk)} > {t("new")} </HrefLink> @@ -168,8 +168,8 @@ const DiscussionPage = ({ className="text-foreground leading-relaxed text-pretty" content={item.body} /> - </ContentArticle> + </ContentStory> ); }; -export default DiscussionPage; +export default LetterPage; diff --git a/plugins/newsroom/src/pages/letter-search.ts b/plugins/newsroom/src/pages/letter-search.ts new file mode 100644 index 0000000000..e5c7e8d6be --- /dev/null +++ b/plugins/newsroom/src/pages/letter-search.ts @@ -0,0 +1,41 @@ +export interface LetterSearch { + created?: true; +} + +export const letterSearch = (input: Record<string, unknown>): LetterSearch => + input.created === true || input.created === "true" ? { created: true } : {}; + +export const letterHref = ( + slug: string, + { created }: LetterSearch = {}, +): string => + `/letters/${encodeURIComponent(slug)}${created ? "?created=true" : ""}`; + +export const letterEditHref = (id: number | string): string => + `/letters/${encodeURIComponent(String(id))}/edit`; + +const positiveId = (raw: unknown): number | undefined => { + const value = + typeof raw === "number" + ? raw + : typeof raw === "string" && /^[1-9]\d{0,15}$/.test(raw) + ? Number(raw) + : Number.NaN; + + return Number.isSafeInteger(value) && value > 0 ? value : undefined; +}; + +export interface LetterNewSearch { + desk?: number; +} + +export const letterNewSearch = ( + input: Record<string, unknown>, +): LetterNewSearch => { + const desk = positiveId(input.desk); + + return desk === undefined ? {} : { desk }; +}; + +export const letterNewHref = (desk?: number): string => + desk === undefined ? "/letters/new" : `/letters/new?desk=${desk}`; diff --git a/plugins/example/src/pages/discussion-shell.tsx b/plugins/newsroom/src/pages/letter-shell.tsx similarity index 93% rename from plugins/example/src/pages/discussion-shell.tsx rename to plugins/newsroom/src/pages/letter-shell.tsx index d6b921b5d9..b96b812f59 100644 --- a/plugins/example/src/pages/discussion-shell.tsx +++ b/plugins/newsroom/src/pages/letter-shell.tsx @@ -1,4 +1,4 @@ -export const DiscussionShell = ({ +export const LetterShell = ({ children, description, title, diff --git a/plugins/example/src/pages/discussions-page.tsx b/plugins/newsroom/src/pages/letters-page.tsx similarity index 65% rename from plugins/example/src/pages/discussions-page.tsx rename to plugins/newsroom/src/pages/letters-page.tsx index 6d96c42be3..09bc6bcb40 100644 --- a/plugins/example/src/pages/discussions-page.tsx +++ b/plugins/newsroom/src/pages/letters-page.tsx @@ -36,51 +36,51 @@ import { import React from "react"; import { useTranslations } from "use-intl"; -import type { DiscussionListSearch } from "./discussion-list"; +import type { LetterListSearch } from "./letter-list"; -import { DiscussionActions } from "./discussion-actions"; +import { desksQueryOptions } from "./desk-queries"; +import { LetterActions } from "./letter-actions"; import { - discussionList, - DISCUSSIONS_HREF, - discussionsQueryOptions, - useDiscussionPermissions, -} from "./discussion-list"; -import { discussionHref, discussionNewHref } from "./discussion-search"; -import { boardsQueryOptions } from "./example-queries"; + letterList, + LETTERS_HREF, + lettersQueryOptions, + useLetterPermissions, +} from "./letter-list"; +import { letterHref, letterNewHref } from "./letter-search"; -const loadDiscussions = async ( +const loadLetters = async ( queryClient: RouteLoadContext["queryClient"], - { locale, search }: { locale: string; search: DiscussionListSearch }, + { locale, search }: { locale: string; search: LetterListSearch }, ) => { // A failed list is an error state on the page, not an error page. - const [discussions, boards] = await Promise.all([ + const [letters, desks] = await Promise.all([ queryClient .query({ - ...discussionsQueryOptions({ locale, search }), + ...lettersQueryOptions({ locale, search }), meta: LOADER_DATA_QUERY_META, }) .catch(() => null), - queryClient.query(boardsQueryOptions()).catch(() => []), + queryClient.query(desksQueryOptions()).catch(() => []), ]); - return { boards, discussions }; + return { desks, letters }; }; -type DiscussionsPageData = Awaited<ReturnType<typeof loadDiscussions>>; +type LettersPageData = Awaited<ReturnType<typeof loadLetters>>; -export const route = defineRoute<DiscussionsPageData, DiscussionListSearch>({ +export const route = defineRoute<LettersPageData, LetterListSearch>({ load: async ({ context, search }) => - await loadDiscussions(context.queryClient, { + await loadLetters(context.queryClient, { locale: context.locale, search, }), head: ({ search, t }) => contentListPageHead({ - description: t("@vitnode/example.discussions.list.desc"), - pathname: DISCUSSIONS_HREF, + description: t("newsroom.letters.list.desc"), + pathname: LETTERS_HREF, search, - title: t("@vitnode/example.discussions.list.title"), + title: t("newsroom.letters.list.title"), }), }); @@ -105,21 +105,21 @@ const ListState = ({ </Empty> ); -const DiscussionsPage = ({ - loaderData: { boards, discussions }, +const LettersPage = ({ + loaderData: { desks, letters }, navigate, search, -}: PluginRoutePageProps<DiscussionsPageData, DiscussionListSearch>) => { - const t = useTranslations("@vitnode/example.discussions.list"); - const permissions = useDiscussionPermissions( - discussions?.edges.map(discussion => discussion.id) ?? [], +}: PluginRoutePageProps<LettersPageData, LetterListSearch>) => { + const t = useTranslations("newsroom.letters.list"); + const permissions = useLetterPermissions( + letters?.edges.map(letter => letter.id) ?? [], ); const [isPending, startTransition] = React.useTransition(); - const update = (patch: Partial<DiscussionListSearch>) => { + const update = (patch: Partial<LetterListSearch>) => { startTransition(async () => { await navigate({ resetScroll: false, - search: discussionList.withSearch(search, patch), + search: letterList.withSearch(search, patch), }); }); }; @@ -143,7 +143,7 @@ const DiscussionsPage = ({ </div> <HrefLink className={buttonVariants({ className: "self-start" })} - href={discussionNewHref(search.board)} + href={letterNewHref(search.desk)} > {t("new")} </HrefLink> @@ -169,17 +169,17 @@ const DiscussionsPage = ({ value={input.value} /> <NativeSelect - aria-label={t("board_label")} + aria-label={t("desk_label")} onChange={event => { - const board = Number(event.target.value); - update({ board: board > 0 ? board : undefined }); + const desk = Number(event.target.value); + update({ desk: desk > 0 ? desk : undefined }); }} - value={String(search.board ?? "")} + value={String(search.desk ?? "")} > - <NativeSelectOption value="">{t("all_boards")}</NativeSelectOption> - {boards.map(board => ( - <NativeSelectOption key={board.id} value={String(board.id)}> - {`${"— ".repeat(board.depth - 1)}${board.name}`} + <NativeSelectOption value="">{t("all_desks")}</NativeSelectOption> + {desks.map(desk => ( + <NativeSelectOption key={desk.id} value={String(desk.id)}> + {`${"— ".repeat(desk.depth - 1)}${desk.name}`} </NativeSelectOption> ))} </NativeSelect> @@ -187,14 +187,12 @@ const DiscussionsPage = ({ aria-label={t("sort_label")} onChange={event => { update({ - sort: discussionList.sorts.find( - sort => sort === event.target.value, - ), + sort: letterList.sorts.find(sort => sort === event.target.value), }); }} - value={search.sort ?? discussionList.defaultSort} + value={search.sort ?? letterList.defaultSort} > - {discussionList.sorts.map(sort => ( + {letterList.sorts.map(sort => ( <NativeSelectOption key={sort} value={sort}> {t(`sort.${sort}`)} </NativeSelectOption> @@ -209,7 +207,7 @@ const DiscussionsPage = ({ action={ <HrefLink className={buttonVariants({ variant: "outline" })} - href={discussionNewHref()} + href={letterNewHref()} > {t("new")} </HrefLink> @@ -226,12 +224,12 @@ const DiscussionsPage = ({ title={t("error.title")} /> } - getKey={discussion => discussion.id} - isError={discussions === null} + getKey={letter => letter.id} + isError={letters === null} isFetching={isPending} - isFiltered={discussionList.isFiltered(search)} + isFiltered={letterList.isFiltered(search)} itemClassName="flex flex-col gap-2 p-4 md:flex-row md:items-center md:justify-between" - items={discussions?.edges} + items={letters?.edges} label={t("title")} loading={null} noResults={ @@ -239,7 +237,7 @@ const DiscussionsPage = ({ action={ <HrefLink className={buttonVariants({ variant: "outline" })} - href={DISCUSSIONS_HREF} + href={LETTERS_HREF} > {t("no_results.clear")} </HrefLink> @@ -249,71 +247,67 @@ const DiscussionsPage = ({ title={t("no_results.title")} /> } - renderItem={discussion => { - const titleId = `discussion-${discussion.id}-title`; + renderItem={letter => { + const titleId = `letter-${letter.id}-title`; return ( <> <div className="flex min-w-0 flex-col gap-1"> - {discussion.slug === null ? ( + {letter.slug === null ? ( <span className="text-foreground font-medium text-balance" id={titleId} > - {discussion.title} + {letter.title} </span> ) : ( <HrefLink className="text-foreground font-medium text-balance hover:underline" - href={discussionHref(discussion.slug)} + href={letterHref(letter.slug)} id={titleId} > - {discussion.title} + {letter.title} </HrefLink> )} <p className="text-muted-foreground flex flex-wrap items-center gap-x-2 text-sm leading-relaxed"> - {discussion.author ? ( - <UserFormat format user={discussion.author} /> + {letter.author ? ( + <UserFormat format user={letter.author} /> ) : ( <span>{t("deleted_user")}</span> )} - {discussion.publishedAt ? ( + {letter.publishedAt ? ( <> <span aria-hidden="true">·</span> <time - dateTime={new Date( - discussion.publishedAt, - ).toISOString()} + dateTime={new Date(letter.publishedAt).toISOString()} > - <DateFormat date={discussion.publishedAt} /> + <DateFormat date={letter.publishedAt} /> </time> </> ) : null} </p> </div> - <DiscussionActions - can={permissions.of(discussion.id)} + <LetterActions + can={permissions.of(letter.id)} describedBy={titleId} - id={discussion.id} + id={letter.id} size="sm" - title={discussion.title} + title={letter.title} /> </> ); }} /> - {discussions ? ( + {letters ? ( <ContentListPagination - hrefFor={page => - discussionList.href(DISCUSSIONS_HREF, { ...search, page }) - } + hrefFor={page => letterList.href(LETTERS_HREF, { ...search, page })} label={t("pagination")} - pageInfo={discussions.pageInfo} + pageInfo={letters.pageInfo} /> ) : null} </div> ); }; -export default DiscussionsPage; +export default LettersPage; diff --git a/plugins/example/src/pages/example-page.tsx b/plugins/newsroom/src/pages/note-page.tsx similarity index 82% rename from plugins/example/src/pages/example-page.tsx rename to plugins/newsroom/src/pages/note-page.tsx index 7cfdcb73c5..8301f9de28 100644 --- a/plugins/example/src/pages/example-page.tsx +++ b/plugins/newsroom/src/pages/note-page.tsx @@ -3,12 +3,12 @@ import { type PluginRoutePageProps, } from "@vitnode/core/routing"; -export const EXAMPLE_TABS = ["summary", "details"] as const; +export const NOTE_TABS = ["summary", "details"] as const; -export type ExampleTab = (typeof EXAMPLE_TABS)[number]; +export type NoteTab = (typeof NOTE_TABS)[number]; -export interface ExampleSearch { - tab: ExampleTab; +export interface NoteSearch { + tab: NoteTab; } interface Note { @@ -16,7 +16,7 @@ interface Note { title: string; } -export const route = definePluginRoute<Note, ExampleSearch>({ +export const route = definePluginRoute<Note, NoteSearch>({ load: ({ params, search }) => ({ lines: search.tab === "summary" @@ -34,14 +34,14 @@ const NotePage = ({ loaderData, navigate, search, -}: PluginRoutePageProps<Note, ExampleSearch>) => ( +}: PluginRoutePageProps<Note, NoteSearch>) => ( <article className="container mx-auto flex max-w-3xl flex-col gap-4 p-4"> <h1 className="text-3xl font-semibold tracking-tight text-balance capitalize"> {loaderData.title} </h1> <nav aria-label="Note view" className="flex items-center gap-2"> - {EXAMPLE_TABS.map(tab => ( + {NOTE_TABS.map(tab => ( <button aria-pressed={search.tab === tab} className="aria-pressed:bg-accent aria-pressed:text-accent-foreground rounded-md border px-3 py-2 capitalize" diff --git a/plugins/newsroom/src/pages/site-page.tsx b/plugins/newsroom/src/pages/site-page.tsx new file mode 100644 index 0000000000..934d15cc83 --- /dev/null +++ b/plugins/newsroom/src/pages/site-page.tsx @@ -0,0 +1,52 @@ +import { + definePluginRoute, + type PluginRoutePageProps, +} from "@vitnode/core/routing"; +import { contentPageItem } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { createBlockRegistry } from "@vitnode/core/widgets"; +import { blocks as coreBlocks } from "@vitnode/core/widgets/built-in"; +import { ContentZone } from "@vitnode/core/widgets/zone"; + +import { PAGE_BLOCKS_ALLOWED } from "@/content/page-blocks"; +import { manifest } from "@/manifest.gen"; +import { widgets } from "@/widgets"; + +const blocksRegistry = createBlockRegistry([coreBlocks, widgets]); + +const loadSitePage = async (slug: string) => { + const response = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/pages", + path: "/{slug}", + args: { params: { slug: encodeURIComponent(slug) } }, + }); + + return contentPageItem(response.ok ? await response.json() : null); +}; + +type SitePageData = Awaited<ReturnType<typeof loadSitePage>>; + +export const route = definePluginRoute({ + load: async ({ params }) => await loadSitePage(params.slug), + + head: ({ loaderData }) => ({ title: loaderData?.title }), +}); + +const SitePage = ({ loaderData: page }: PluginRoutePageProps<SitePageData>) => ( + <article className="container mx-auto flex max-w-3xl flex-col gap-8 px-4 py-8 md:py-12"> + <h1 className="text-foreground text-3xl font-semibold tracking-tight text-balance md:text-4xl"> + {page.title} + </h1> + + <ContentZone + allowedBlocks={PAGE_BLOCKS_ALLOWED} + blocks={page.content} + id="content" + registry={blocksRegistry} + /> + </article> +); + +export default SitePage; diff --git a/plugins/example/src/pages/article-page.tsx b/plugins/newsroom/src/pages/story-page.tsx similarity index 71% rename from plugins/example/src/pages/article-page.tsx rename to plugins/newsroom/src/pages/story-page.tsx index cf7c21eb76..5254250e3e 100644 --- a/plugins/example/src/pages/article-page.tsx +++ b/plugins/newsroom/src/pages/story-page.tsx @@ -11,27 +11,27 @@ import { z } from "zod"; import { manifest } from "@/manifest.gen"; -import { ContentArticle } from "./content-article"; +import { ContentStory } from "./content-story"; -const zodArticle = z.object({ +const zodStory = z.object({ excerpt: z.string().nullable(), publishedAt: z.string().nullable(), title: z.string(), }); -const loadArticle = async (slug: string) => { +const loadStory = async (slug: string) => { const [resolution, detail] = await Promise.all([ fetcher({ plugin: manifest.id, method: "get", - module: "content/articles", + module: "content/stories", path: "/delivery/resolve/{slug}", args: { params: { slug: encodeURIComponent(slug) } }, }), fetcher({ plugin: manifest.id, method: "get", - module: "content/articles", + module: "content/stories", path: "/{slug}", args: { params: { slug: encodeURIComponent(slug) } }, }), @@ -44,15 +44,15 @@ const loadArticle = async (slug: string) => { } return contentDeliveryPage({ - item: detail.status === 200 ? zodArticle.parse(await detail.json()) : null, + item: detail.status === 200 ? zodStory.parse(await detail.json()) : null, resolution: await resolution.json(), }); }; -type ArticlePageData = Awaited<ReturnType<typeof loadArticle>>; +type StoryPageData = Awaited<ReturnType<typeof loadStory>>; export const route = definePluginRoute({ - load: async ({ params }) => await loadArticle(params.slug), + load: async ({ params }) => await loadStory(params.slug), head: ({ loaderData }) => contentDeliveryPageHead(loaderData?.metadata, { @@ -60,14 +60,14 @@ export const route = definePluginRoute({ }), }); -const ArticlePage = ({ +const StoryPage = ({ loaderData: { item }, -}: PluginRoutePageProps<ArticlePageData>) => ( - <ContentArticle +}: PluginRoutePageProps<StoryPageData>) => ( + <ContentStory lead={item.excerpt} publishedAt={item.publishedAt} title={item.title} /> ); -export default ArticlePage; +export default StoryPage; diff --git a/plugins/example/src/pages/zones-page.tsx b/plugins/newsroom/src/pages/zones-page.tsx similarity index 90% rename from plugins/example/src/pages/zones-page.tsx rename to plugins/newsroom/src/pages/zones-page.tsx index f788d7dbb1..93f56cb958 100644 --- a/plugins/example/src/pages/zones-page.tsx +++ b/plugins/newsroom/src/pages/zones-page.tsx @@ -27,11 +27,11 @@ import { toast } from "sonner"; import { z } from "zod"; import { - EXAMPLE_ZONE_IDS, mayEditSettingsPage, + NEWSROOM_ZONE_IDS, settingsPage, } from "@/content/settings-page"; -import { widgets as exampleWidgets } from "@/widgets"; +import { widgets as newsroomWidgets } from "@/widgets"; import type { ZonesSearch } from "./zones-search"; @@ -53,7 +53,7 @@ const serverRefusal = async (response: Response): Promise<string> => { } }; -const blocksRegistry = createBlockRegistry([coreBlocks, exampleWidgets]); +const blocksRegistry = createBlockRegistry([coreBlocks, newsroomWidgets]); const zodLayout = z.object({ pageId: z.string(), @@ -162,19 +162,19 @@ const ProfileForm = () => { const VIEW_MODE_CHECKS = [ "before-profile - three blocks, no wrapper: no element around them in the DOM.", "after-profile - one area with two blocks in it, one empty area, and one block beside them. The filled area renders a two-column grid; the empty one renders nothing at all, not even a gap.", - 'example:features stored with variant: "list" renders one item per row. Nothing in its data says "list".', + 'newsroom:features stored with variant: "list" renders one item per row. Nothing in its data says "list".', 'sidebar - wrapped in <aside>, so it carries data-vitnode-zone and a narrower data-vitnode-zone-allowed. The page writes neither: <ContentZone id="sidebar" /> takes both from the page definition around it.', "before-footer - empty: no markup at all, and no gap below the sidebar.", - "Network: one GET /api/vitnode/core/pages/layout?pageId=example:settings, made by the route loader. The zones themselves request nothing.", + "Network: one GET /api/vitnode/core/pages/layout?pageId=newsroom:settings, made by the route loader. The zones themselves request nothing.", "Until somebody saves, that read answers with the blocks defineEditablePage ships and updatedAt: null. They are real content, not a placeholder - which is why the first Save is allowed to write over them.", "Network, JS filter: nothing under /src/editor/ is requested. The @dnd-kit deps you may also see come from the AdminCP dashboard grid on every development route, not from this page.", ]; const EDIT_MODE_CHECKS = [ - "Edit widgets lives in the user menu in the site header, not on this page, so it is one click away wherever you are. It is shown only to a member holding the moderator permission example.widgets/can_edit - or to a root role - and only while an editable page is on screen. Sign out, or walk to a page that declares no zones, and the entry is gone.", - "Arrive at /example/zones?edit=true and the page opens in edit mode already - but only if that same permission says so. The URL asks; it never authorizes, and PUT /pages/layout asks the permission again on every save.", + "Edit widgets lives in the user menu in the site header, not on this page, so it is one click away wherever you are. It is shown only to a member holding the moderator permission newsroom:widgets:can_edit - or to a root role - and only while an editable page is on screen. Sign out, or walk to a page that declares no zones, and the entry is gone.", + "Arrive at /newsroom/zones?edit=true and the page opens in edit mode already - but only if that same permission says so. The URL asks; it never authorizes, and PUT /pages/layout asks the permission again on every save.", "The editor chunk is fetched on the first Edit widgets click and never before it. Use Finish editing and click Edit widgets again: the second click fetches nothing.", - "createContentEditorAdapter is imported normally, not lazily: it belongs to the page definition, not to the editor, and its whole graph is two files with no third-party package in it. A boundary test in this plugin asserts nothing under core's src/editor/ is in this page's eager graph even so.", + "createContentEditorAdapter is imported normally, not lazily: it belongs to the page definition, not to the editor, and its whole graph is two files with no third-party package in it. A boundary test in core asserts that nothing under src/editor/ reaches an eager graph like this one.", "One sidebar opens on the right and the whole site is padded, never covered: the header, this page and the footer all move left together, exactly as the AdminCP dashboard does when its widget panel opens. Narrow the window below md and the same sidebar becomes a bottom sheet, with the padding moving underneath the site so the footer still scrolls clear of it.", "before-footer becomes visible only in edit mode, as a large dashed placeholder with its own Add widget button. Finish editing and it disappears again.", "The empty area in after-profile becomes visible only in edit mode too, as a two-column drop target. Finish editing and it leaves no trace.", @@ -182,12 +182,12 @@ const EDIT_MODE_CHECKS = [ "A catalog entry is both draggable and clickable. Drag one between two blocks and an insertion line shows exactly where it will land; click one instead and it goes to the targeted zone, or to the first zone that accepts it.", "Available Widgets opens with a Layout section above the plugin groups, holding a single Area entry. Click it and an empty area lands in the targeted zone; drag it and it lands exactly where the insertion line says, the same way a block does. Drag it over an area and the drop is refused, because an area cannot hold another one.", "Target a zone from inside an area (Add widget on the area) and the header reads For: an area in that zone - and the Layout section disappears, because an area cannot hold another area.", - "Target the sidebar and the catalog offers core:text alone; clear the target and core:cta, core:hero, example:callout and example:features come back.", + "Target the sidebar and the catalog offers core:text alone; clear the target and core:cta, core:hero, newsroom:callout and newsroom:features come back.", "Dropping onto a block inserts before or after it, by which half of it the pointer is over. Nothing ever lands inside a block.", "Drag a root block into the filled area: it becomes a child of it and the area re-flows. Drag a child back out to the zone root and the area keeps the rest. Reorder two children inside one area and only their order changes.", - "Drag example:callout over the sidebar: the zone turns red and the drop is refused, from the same allowlist the catalog filters by - and the API refuses it again from the zone's own allowlist, which it reads off the registered page rather than off the request.", + "Drag newsroom:callout over the sidebar: the zone turns red and the drop is refused, from the same allowlist the catalog filters by - and the API refuses it again from the zone's own allowlist, which it reads off the registered page rather than off the request.", "Select a block and the same sidebar switches to Properties. Back to Available Widgets clears the selection and returns to the catalog.", - "Select the example:features block: a Variant control sits above its fields. Switch grid, list and compact and the page re-renders instantly while every word in the fields stays exactly as it was, and the block keeps its id.", + "Select the newsroom:features block: a Variant control sits above its fields. Switch grid, list and compact and the page re-renders instantly while every word in the fields stays exactly as it was, and the block keeps its id.", "Select an area and the sidebar shows Area properties instead: Columns, Gap, Alignment and Distribution, then Duplicate area, Ungroup and Delete area. Each control re-lays the area out as you pick it.", "Ungroup keeps the children and drops them into the zone at the area's own position. Delete area on a non-empty area asks first, and the same dialog offers Ungroup, keep blocks. Delete an empty area and it says so instead of counting blocks.", "Every block sits in an inert container, so a block's own links and buttons cannot be clicked or tabbed to. Preview gives them back and collapses the sidebar to a slim bar with Back to editing and Finish editing.", @@ -359,14 +359,14 @@ const SettingsScreen = ({ <div className="flex flex-col gap-6 lg:flex-row lg:items-start"> <div className="flex flex-1 flex-col gap-6"> <ContentZone - id={EXAMPLE_ZONE_IDS.beforeProfile} + id={NEWSROOM_ZONE_IDS.beforeProfile} registry={blocksRegistry} /> <ProfileForm /> <ContentZone - id={EXAMPLE_ZONE_IDS.afterProfile} + id={NEWSROOM_ZONE_IDS.afterProfile} registry={blocksRegistry} /> </div> @@ -375,14 +375,14 @@ const SettingsScreen = ({ <ContentZone as="aside" className="border-border w-full rounded-lg border p-4 lg:w-64" - id={EXAMPLE_ZONE_IDS.sidebar} + id={NEWSROOM_ZONE_IDS.sidebar} registry={blocksRegistry} /> ) : null} </div> <ContentZone - id={EXAMPLE_ZONE_IDS.beforeFooter} + id={NEWSROOM_ZONE_IDS.beforeFooter} registry={blocksRegistry} /> diff --git a/plugins/example/src/pages/zones-search.ts b/plugins/newsroom/src/pages/zones-search.ts similarity index 100% rename from plugins/example/src/pages/zones-search.ts rename to plugins/newsroom/src/pages/zones-search.ts diff --git a/plugins/example/src/plugin-info.ts b/plugins/newsroom/src/plugin-info.ts similarity index 71% rename from plugins/example/src/plugin-info.ts rename to plugins/newsroom/src/plugin-info.ts index 526718e03c..d33b525d2a 100644 --- a/plugins/example/src/plugin-info.ts +++ b/plugins/newsroom/src/plugin-info.ts @@ -1,6 +1,6 @@ import type { PluginInfo } from "@vitnode/core/lib/plugin-manifest"; export const pluginInfo: PluginInfo = { - title: "Example", - icon: "flask-conical", + title: "Newsroom", + icon: "puzzle", }; diff --git a/plugins/newsroom/src/routes.ts b/plugins/newsroom/src/routes.ts new file mode 100644 index 0000000000..cca25c7fee --- /dev/null +++ b/plugins/newsroom/src/routes.ts @@ -0,0 +1,156 @@ +import { + definePluginRoutes, + index, + layout, + lazy, + page, +} from "@vitnode/core/routing"; +import { + FeedPendingSkeleton, + RoutePendingSkeleton, +} from "@vitnode/core/tanstack/pending"; + +import type { NoteSearch } from "./pages/note-page"; + +import { manifest } from "./manifest.gen"; +import { articleList } from "./pages/article-list"; +import { browseSearch } from "./pages/browse-search"; +import { deskSearch } from "./pages/desk-search"; +import { letterListSearch } from "./pages/letter-list"; +import { letterNewSearch, letterSearch } from "./pages/letter-search"; +import { zonesSearch } from "./pages/zones-search"; + +export const routes = definePluginRoutes([ + page("/newsroom", { + component: lazy(() => import("./pages/home-page")), + messages: [`${manifest.id}.home`], + }), + + page("/news", { + component: lazy(() => import("./pages/articles-page")), + messages: ["newsroom.articles"], + search: articleList.parseSearch, + }), + + page("/news/new", { + component: lazy(() => import("./pages/article-new-page")), + messages: ["newsroom.articles"], + requires: "authenticated", + }), + + page("/news/:id/edit", { + component: lazy(() => import("./pages/article-edit-page")), + messages: ["newsroom.articles"], + }), + + page("/news/:slug", { + component: lazy(() => import("./pages/article-page")), + messages: ["newsroom.articles", "newsroom.comments"], + }), + + page("/newsroom/notes/:slug", { + component: lazy(() => import("./pages/note-page")), + search: (input): NoteSearch => ({ + tab: input.tab === "details" ? "details" : "summary", + }), + }), + + page("/newsroom/browse", { + component: lazy(() => import("./pages/browse-page")), + messages: ["newsroom.browse"], + search: browseSearch, + }), + + page("/newsroom/pages/:slug", { + component: lazy(() => import("./pages/site-page")), + }), + + page("/newsroom/zones", { + component: lazy(() => import("./pages/zones-page")), + search: zonesSearch, + }), + + page("/newsroom/embed", { + area: "blank", + component: lazy(() => import("./pages/embed-page")), + }), + + layout("/newsroom/guide", { + component: lazy(() => import("./pages/guide-layout")), + messages: ["newsroom.guide"], + children: [ + /** The page at the layout's own URL - `/newsroom/guide`. */ + index({ + component: lazy(() => import("./pages/guide-index-page")), + }), + + page(":topic", { + component: lazy(() => import("./pages/guide-topic-page")), + }), + ], + }), + + page("/stories/:slug", { + component: lazy(() => import("./pages/story-page")), + messages: ["newsroom.stories"], + }), + + page("/explainers/:slug", { + component: lazy(() => import("./pages/explainer-page")), + messages: ["newsroom.stories"], + }), + + page("/events/:slug", { + component: lazy(() => import("./pages/event-page")), + messages: ["newsroom.stories", "newsroom.events"], + }), + + page("/bulletins/:slug", { + component: lazy(() => import("./pages/bulletin-page")), + messages: ["newsroom.stories"], + }), + + page("/desks", { + component: lazy(() => import("./pages/desks-page")), + messages: ["newsroom.desks"], + pendingComponent: RoutePendingSkeleton, + }), + + page("/desks/:slug", { + component: lazy(() => import("./pages/desk-page")), + messages: ["newsroom.desks"], + pendingComponent: FeedPendingSkeleton, + search: deskSearch, + }), + + page("/letters", { + component: lazy(() => import("./pages/letters-page")), + messages: ["newsroom.letters"], + pendingComponent: FeedPendingSkeleton, + search: letterListSearch, + }), + + page("/letters/new", { + component: lazy(() => import("./pages/letter-new-page")), + messages: ["newsroom.letters"], + requires: "authenticated", + search: letterNewSearch, + }), + + page("/letters/:id/edit", { + component: lazy(() => import("./pages/letter-edit-page")), + messages: ["newsroom.letters"], + }), + + page("/letters/:slug", { + component: lazy(() => import("./pages/letter-page")), + messages: ["newsroom.stories", "newsroom.letters"], + search: letterSearch, + }), + + page("/admin/newsroom", { + area: "admin", + component: lazy(() => import("./pages/admin-overview-page")), + messages: ["newsroom.admin.overview"], + }), +]); diff --git a/plugins/example/src/widgets.tsx b/plugins/newsroom/src/widgets.tsx similarity index 100% rename from plugins/example/src/widgets.tsx rename to plugins/newsroom/src/widgets.tsx diff --git a/plugins/example/src/widgets/callout.tsx b/plugins/newsroom/src/widgets/callout.tsx similarity index 100% rename from plugins/example/src/widgets/callout.tsx rename to plugins/newsroom/src/widgets/callout.tsx diff --git a/plugins/example/src/widgets/features.tsx b/plugins/newsroom/src/widgets/features.tsx similarity index 100% rename from plugins/example/src/widgets/features.tsx rename to plugins/newsroom/src/widgets/features.tsx diff --git a/plugins/example/tsconfig.build.json b/plugins/newsroom/tsconfig.build.json similarity index 100% rename from plugins/example/tsconfig.build.json rename to plugins/newsroom/tsconfig.build.json diff --git a/plugins/example/tsconfig.json b/plugins/newsroom/tsconfig.json similarity index 100% rename from plugins/example/tsconfig.json rename to plugins/newsroom/tsconfig.json diff --git a/plugins/example/types/api-registry.gen.d.ts b/plugins/newsroom/types/api-registry.gen.d.ts similarity index 95% rename from plugins/example/types/api-registry.gen.d.ts rename to plugins/newsroom/types/api-registry.gen.d.ts index 7c796dda0a..ce70efda76 100644 --- a/plugins/example/types/api-registry.gen.d.ts +++ b/plugins/newsroom/types/api-registry.gen.d.ts @@ -15,7 +15,7 @@ import type { VitNodeApiPlugin } from '../src/config.api' declare module '@vitnode/core/lib/fetcher/registry' { interface ApiPluginRegistry { - '@vitnode/example': VitNodeApiPlugin + 'newsroom': VitNodeApiPlugin } } diff --git a/plugins/example/vitest.config.ts b/plugins/newsroom/vitest.config.ts similarity index 100% rename from plugins/example/vitest.config.ts rename to plugins/newsroom/vitest.config.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 49e6e19020..eebb7b7669 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -114,9 +114,6 @@ importers: '@vitnode/config': specifier: workspace:* version: link:../../packages/config - '@vitnode/example': - specifier: workspace:* - version: link:../../plugins/example '@vitnode/forum': specifier: workspace:* version: link:../../plugins/forum @@ -126,6 +123,9 @@ importers: dotenv: specifier: ^18.0.6 version: 18.0.6 + newsroom: + specifier: workspace:* + version: link:../../plugins/newsroom oxlint: specifier: ^1.87.0 version: 1.87.0(oxlint-tsgolint@7.0.2003) @@ -186,9 +186,6 @@ importers: '@vitnode/core': specifier: workspace:* version: link:../../packages/vitnode - '@vitnode/example': - specifier: workspace:* - version: link:../../plugins/example '@vitnode/forum': specifier: workspace:* version: link:../../plugins/forum @@ -225,6 +222,9 @@ importers: motion: specifier: ^14.0.0 version: 14.0.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + newsroom: + specifier: workspace:* + version: link:../../plugins/newsroom nitro: specifier: 3.0.260903-beta version: 3.0.260903-beta @@ -639,9 +639,6 @@ importers: d3-shape: specifier: ^3.2.0 version: 3.2.0 - date-fns: - specifier: ^4.4.0 - version: 4.4.0 dotenv: specifier: ^18.0.6 version: 18.0.6 @@ -678,9 +675,6 @@ importers: react-resizable-panels: specifier: ^4.14.3 version: 4.14.3(react-dom@19.3.0(react@19.3.0))(react@19.3.0) - react-scan: - specifier: ^0.5.7 - version: 0.5.7(@opentelemetry/core@2.12.0(@opentelemetry/api@1.9.1))(esbuild@0.28.2)(eslint@10.11.0(jiti@2.7.0))(oxlint-tsgolint@7.0.2003)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(rolldown@1.2.12)(rollup@4.63.5)(vite@8.3.4(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) redis: specifier: ^6.3.0 version: 6.3.0(@opentelemetry/api@1.9.1) @@ -921,7 +915,7 @@ importers: specifier: ^5.0.3 version: 5.0.3(@opentelemetry/api@1.9.1)(@types/node@26.6.4)(@vitest/coverage-v8@5.0.3)(happy-dom@20.14.6)(jsdom@30.1.2)(vite@8.3.4(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) - plugins/example: + plugins/forum: dependencies: '@hono/zod-openapi': specifier: ^1.6.3 @@ -932,6 +926,9 @@ importers: '@tanstack/react-query': specifier: ^5.104.1 version: 5.104.1(react@19.3.0) + '@tanstack/react-router': + specifier: ^1.170.44 + version: 1.170.44(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@vitnode/core': specifier: workspace:* version: link:../../packages/vitnode @@ -994,7 +991,7 @@ importers: specifier: ^5.0.3 version: 5.0.3(@opentelemetry/api@1.9.1)(@types/node@26.6.4)(@vitest/coverage-v8@5.0.3)(happy-dom@20.14.6)(jsdom@30.1.2)(vite@8.3.4(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) - plugins/forum: + plugins/newsroom: dependencies: '@hono/zod-openapi': specifier: ^1.6.3 @@ -1005,9 +1002,6 @@ importers: '@tanstack/react-query': specifier: ^5.104.1 version: 5.104.1(react@19.3.0) - '@tanstack/react-router': - specifier: ^1.170.44 - version: 1.170.44(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@vitnode/core': specifier: workspace:* version: link:../../packages/vitnode @@ -2534,6 +2528,7 @@ packages: '@opentelemetry/sdk-trace-base@2.12.0': resolution: {integrity: sha512-JOERgZCxRM06FEJ5kEWxlSRChah6MmXDx3KwCruqEv/iEyLkTokCSemf2y1w8oIHtfrr8EVTpzebq/31vn2Cpg==} engines: {node: ^18.19.0 || >=20.6.0} + deprecated: Use @opentelemetry/sdk-trace package peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' @@ -3371,14 +3366,6 @@ packages: engines: {node: '>=18'} hasBin: true - '@preact/signals-core@1.14.4': - resolution: {integrity: sha512-HNB6HYeYKhQbJ1aKl+YRjrS4+QWHLKX6qKoUsfS/m0vqzsVaEBiZiaKbG/e+NKk2ch5ALQr/ihWaMHxiCuuWHA==} - - '@preact/signals@2.11.3': - resolution: {integrity: sha512-mttwFM98G/JiriTgMwU+UWygL6sfVmYEiNcPSKkUnv4PxPpZhmP2ugGC4qi360+ZIHyQ8NY05bfJT3b4RUIGlw==} - peerDependencies: - preact: '>= 10.25.0 || >=11.0.0-0' - '@quansync/fs@1.1.0': resolution: {integrity: sha512-qAPG/t3HqML1TlN7sY/pTbEjzFVAKsMjNNMGheyDosro+kT4iw2KCUoHcVdmliwWjorm4elZbgNQyU2eD97eDg==} @@ -3554,10 +3541,6 @@ packages: '@react-email/ui@6.11.1': resolution: {integrity: sha512-Toy+g7u+9USdFV3YKIUEK66c356+/LDumDnpz7eVdjgCC3TCDb/v6WcfTSoU+RSHRkpUQjl7B9MOtQ/dgj5yYQ==} - '@react-grab/cli@0.2.0': - resolution: {integrity: sha512-LVfA+j5cFT0Szd958WRD8W/B8ucCtz4ViiveDKWLqAwBkZFW9VRW1ZvwOUhp/M3SmVPtjDaRkW12GvAuTArP+Q==} - hasBin: true - '@redis/bloom@6.3.0': resolution: {integrity: sha512-NQ5poYpZr0jv6zazN1cy6JY5kIipKFZ3R9GTL4kOUTX3a9YAfY29U8bsE4lWhVQEM+G4V0BXVC57mubIdDijeA==} engines: {node: '>= 20.0.0'} @@ -3789,15 +3772,6 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@rollup/pluginutils@5.4.0': - resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/rollup-android-arm-eabi@4.63.5': resolution: {integrity: sha512-J25QJU+B78T4FhhBsNpLJyVWOi31mwtpcMwywHmOKH65Q9IWGA81gPj+dnwlhU8wktVriYE+tFAaQgrnJRzAZg==} cpu: [arm] @@ -5361,10 +5335,6 @@ packages: resolution: {integrity: sha512-nHlms9BkP8ZiY79HrwCGiA2DcNaXrAaJrCM/BEqQ7MEsSKyCk+2A76xPGylIfASZSZE0SaU3T0bNSg4rBPIJAQ==} hasBin: true - agent-install@0.0.6: - resolution: {integrity: sha512-7NRMZ/ZDz2vHevQTgJsocBFpakB1/Wx5ip19YSJuj4VOXpraWztTerViNtdSyARKZT9e2yVwUUB5JXXCE7mNrA==} - hasBin: true - ai@7.0.134: resolution: {integrity: sha512-2m/hyNGsNB2Fe/BCZ/XwpjnfxEVCqS0TtAwjR/HpIIyMAtiLJJ8bQb6+uMih4MXwukDJr9AR4hxbFLUE9H3SjQ==} engines: {node: '>=22'} @@ -5495,11 +5465,6 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bippy@0.5.43: - resolution: {integrity: sha512-Tvu7b1M7+d8b9/YHaCeODEsi2CgbuoBql+dWSBrNnCuqJ1gMUeY3i0r+319hvjjl5GVBP6FFWxrKnq3fhZER0w==} - peerDependencies: - react: '>=17.0.1' - bippy@0.6.1: resolution: {integrity: sha512-ky4m94Y/KfsddjGkKTsV4uFjZqkJjpOjQ2t5gKPdX6XH1MNxMNX5FrVefsxV4lpjemEmEdwe0e0YbzAMNs3oUQ==} peerDependencies: @@ -6467,9 +6432,6 @@ packages: estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -6939,10 +6901,6 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.12: - resolution: {integrity: sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==} - engines: {node: '>= 4'} - import-in-the-middle@3.5.2: resolution: {integrity: sha512-WseIA/4o56+GYO3RmlOPvejYi771OFeJEeK/ejROsr9bdjW+E5NXTOD1Di8TL40Qgg3JJX9aa97Hf8iiSVIKZw==} engines: {node: '>=18'} @@ -7884,10 +7842,6 @@ packages: resolution: {integrity: sha512-j6tdFoJbLztISYNlw7LMT+6naqhVsXTNn7drhoGRIqf0x2mCSD2Ur71hK0E/VrLens355finI6j+sMqHxHpEfA==} engines: {node: ^20.19.0 || >=22.13.0} - oxlint-plugin-react-doctor@0.9.18: - resolution: {integrity: sha512-1mfeb/jzXnduWOZJxrvdJjvKT0pFNKrNFYcPO4ncpFAnfW41M0mLz/23lAFzHb0knNLYayEgIQ5DjI4ZfFe+DQ==} - engines: {node: ^20.19.0 || >=22.13.0} - oxlint-tsgolint@7.0.2003: resolution: {integrity: sha512-VnK4zlqgmgq/7ZcjzCk/WpN8kKFsYGcB85Io9qT3wL4K8Un3RKmJkp793crNETieMusPMKOA4a+Mw2wbteI6TQ==} hasBin: true @@ -7938,9 +7892,6 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-manager-detector@1.9.0: - resolution: {integrity: sha512-zAMfbta9nPA8AKkA4WdmNAT8R8s6Dk0/xwPsqNnRidMFcLo1YkLuPDTgs2f64XdzS8vbLNnoJ+uUIkgbz7oRHA==} - parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} @@ -8205,11 +8156,6 @@ packages: engines: {node: ^20.19.0 || >=22.13.0} hasBin: true - react-doctor@0.9.18: - resolution: {integrity: sha512-4Ach00KtfnfjTBGgr2PyPgHua85vT/UfPY5sR0bHgRAc/QSu0JInA0GHCL6a7WFGMeGUrxtGnI8oqZinG44BOA==} - engines: {node: ^20.19.0 || >=22.13.0} - hasBin: true - react-dom@19.3.0: resolution: {integrity: sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==} peerDependencies: @@ -8223,15 +8169,6 @@ packages: react: ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^18.0 || ^19.0 || ^19.0.0-rc - react-grab@0.2.0: - resolution: {integrity: sha512-ohhsfXD4qN0j6cMQd56aaVJBPDF3kUdviF/Od1Eak/rEIXQ3svQ4gjkwTfuTZwTBnxHRL16p9JqdlVQO5nUHqA==} - hasBin: true - peerDependencies: - react: '>=17.0.0' - peerDependenciesMeta: - react: - optional: true - react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -8261,17 +8198,6 @@ packages: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - react-scan@0.5.7: - resolution: {integrity: sha512-KRlq734yN6q/f2CZmZi9CWHuiqSzoLhPFLtcJOL6XM4lR54myyFcY81pG9QOwj+eBC1hIHm5n+Ntbtqiilu8Rg==} - hasBin: true - peerDependencies: - esbuild: ^0.28.2 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - esbuild: - optional: true - react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} @@ -11335,13 +11261,6 @@ snapshots: playwright: 1.61.1 optional: true - '@preact/signals-core@1.14.4': {} - - '@preact/signals@2.11.3(preact@10.29.8)': - dependencies: - '@preact/signals-core': 1.14.4 - preact: 10.29.8 - '@quansync/fs@1.1.0': dependencies: quansync: 1.0.0 @@ -11508,17 +11427,6 @@ snapshots: - react-dom - sass - '@react-grab/cli@0.2.0': - dependencies: - agent-install: 0.0.6 - commander: 14.0.3 - ignore: 7.0.12 - ora: 9.4.1 - package-manager-detector: 1.9.0 - picocolors: 1.1.1 - prompts: 2.4.2 - tinyexec: 1.3.1 - '@redis/bloom@6.3.0(@redis/client@6.3.0(@opentelemetry/api@1.9.1))': dependencies: '@redis/client': 6.3.0(@opentelemetry/api@1.9.1) @@ -11631,14 +11539,6 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} - '@rollup/pluginutils@5.4.0(rollup@4.63.5)': - dependencies: - '@types/estree': 1.0.9 - estree-walker: 2.0.2 - picomatch: 4.0.7 - optionalDependencies: - rollup: 4.63.5 - '@rollup/rollup-android-arm-eabi@4.63.5': optional: true @@ -13170,15 +13070,6 @@ snapshots: prompts: 2.4.2 yaml: 2.9.1 - agent-install@0.0.6: - dependencies: - '@iarna/toml': 2.2.5 - commander: 14.0.3 - jsonc-parser: 3.3.1 - picocolors: 1.1.1 - prompts: 2.4.2 - yaml: 2.9.1 - ai@7.0.134(zod@4.6.5): dependencies: '@ai-sdk/gateway': 4.0.108(zod@4.6.5) @@ -13302,10 +13193,6 @@ snapshots: binary-extensions@2.3.0: {} - bippy@0.5.43(react@19.3.0): - dependencies: - react: 19.3.0 - bippy@0.6.1(react@19.3.0): dependencies: react: 19.3.0 @@ -14206,8 +14093,6 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.3 - estree-walker@2.0.2: {} - estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 @@ -14738,8 +14623,6 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.12: {} - import-in-the-middle@3.5.2: dependencies: cjs-module-lexer: 2.3.0 @@ -15904,15 +15787,6 @@ snapshots: lightningcss: 1.33.0 oxc-parser: 0.148.0 - oxlint-plugin-react-doctor@0.9.18: - dependencies: - '@shaderfrog/glsl-parser': 7.0.1 - '@typescript-eslint/types': 8.71.1 - eslint-scope: 9.1.2 - eslint-visitor-keys: 5.0.1 - lightningcss: 1.33.0 - oxc-parser: 0.148.0 - oxlint-tsgolint@7.0.2003: optionalDependencies: '@oxlint-tsgolint/darwin-arm64': 7.0.2003 @@ -15986,8 +15860,6 @@ snapshots: p-try@2.2.0: {} - package-manager-detector@1.9.0: {} - parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 @@ -16089,7 +15961,8 @@ snapshots: powershell-utils@0.2.1: {} - preact@10.29.8: {} + preact@10.29.8: + optional: true prelude-ls@1.2.1: {} @@ -16274,36 +16147,6 @@ snapshots: - supports-color - vite-plus - react-doctor@0.9.18(@opentelemetry/core@2.12.0(@opentelemetry/api@1.9.1))(eslint@10.11.0(jiti@2.7.0))(oxlint-tsgolint@7.0.2003)(react@19.3.0): - dependencies: - '@astrojs/compiler': 4.0.0 - '@sentry/node': 10.76.1(@opentelemetry/core@2.12.0(@opentelemetry/api@1.9.1)) - agent-install: 0.0.5 - bippy: 0.6.1(react@19.3.0) - conf: 15.1.0 - confbox: 0.2.4 - eslint-plugin-react-hooks: 7.1.1(eslint@10.11.0(jiti@2.7.0)) - is-unicode-supported: 2.1.0 - jiti: 2.7.0 - magicast: 0.5.5 - oxc-parser: 0.148.0 - oxc-resolver: 11.24.2 - oxlint: 1.81.0(oxlint-tsgolint@7.0.2003) - oxlint-plugin-react-doctor: 0.9.18 - playwright-core: 1.64.0 - prompts: 2.4.2 - typescript: 5.9.3 - yaml: 2.9.1 - yoga-layout: 3.2.1 - transitivePeerDependencies: - - '@opentelemetry/core' - - '@opentelemetry/exporter-trace-otlp-http' - - eslint - - oxlint-tsgolint - - react - - supports-color - - vite-plus - react-dom@19.3.0(react@19.3.0): dependencies: react: 19.3.0 @@ -16340,13 +16183,6 @@ snapshots: - supports-color - utf-8-validate - react-grab@0.2.0(react@19.3.0): - dependencies: - '@react-grab/cli': 0.2.0 - bippy: 0.6.1(react@19.3.0) - optionalDependencies: - react: 19.3.0 - react-is@17.0.2: {} react-remove-scroll-bar@2.3.8(@types/react@19.3.0)(react@19.3.0): @@ -16373,42 +16209,6 @@ snapshots: react: 19.3.0 react-dom: 19.3.0(react@19.3.0) - react-scan@0.5.7(@opentelemetry/core@2.12.0(@opentelemetry/api@1.9.1))(esbuild@0.28.2)(eslint@10.11.0(jiti@2.7.0))(oxlint-tsgolint@7.0.2003)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(rolldown@1.2.12)(rollup@4.63.5)(vite@8.3.4(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)): - dependencies: - '@babel/core': 7.29.7 - '@babel/types': 7.29.8 - '@preact/signals': 2.11.3(preact@10.29.8) - '@rollup/pluginutils': 5.4.0(rollup@4.63.5) - bippy: 0.5.43(react@19.3.0) - commander: 14.0.3 - picocolors: 1.1.1 - preact: 10.29.8 - prompts: 2.4.2 - react: 19.3.0 - react-doctor: 0.9.18(@opentelemetry/core@2.12.0(@opentelemetry/api@1.9.1))(eslint@10.11.0(jiti@2.7.0))(oxlint-tsgolint@7.0.2003)(react@19.3.0) - react-dom: 19.3.0(react@19.3.0) - react-grab: 0.2.0(react@19.3.0) - optionalDependencies: - esbuild: 0.28.2 - unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.63.5)(vite@8.3.4(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) - transitivePeerDependencies: - - '@farmfe/core' - - '@opentelemetry/core' - - '@opentelemetry/exporter-trace-otlp-http' - - '@rsbuild/core' - - '@rspack/core' - - bun-types-no-globals - - eslint - - oxlint-tsgolint - - preact-render-to-string - - rolldown - - rollup - - supports-color - - unloader - - vite - - vite-plus - - webpack - react-style-singleton@2.2.3(@types/react@19.3.0)(react@19.3.0): dependencies: get-nonce: 1.0.1 @@ -17264,18 +17064,6 @@ snapshots: unpipe@1.0.0: {} - unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.63.5)(vite@8.3.4(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)): - dependencies: - '@jridgewell/remapping': 2.3.5 - picomatch: 4.0.7 - webpack-virtual-modules: 0.6.2 - optionalDependencies: - esbuild: 0.28.2 - rolldown: 1.2.12 - rollup: 4.63.5 - vite: 8.3.4(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1) - optional: true - unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.5)(vite@8.3.4(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)): dependencies: '@jridgewell/remapping': 2.3.5
      `, below the date: -{canReport ? ( - -) : null} +```tsx title="plugins/newsroom/src/pages/article-page.tsx" +
      + {/* title and date as before */} + {/* [!code ++] */} +
      ``` - `contentTarget` names the record from the content type, so the type id always matches what the API registered. -- `typeLabel` finishes the dialog title, "What's wrong with this discussion?". Add `"report_type": "discussion"` to the plugin's locale file. -- `preview` shows the reader what they are reporting at the top of the dialog. +- `preview` shows the article's title in the dialog, and `typeLabel` finishes its title, "What's wrong with this article?". +- The button loads its own messages, and its form only when the dialog opens. -The button loads its own messages and its form only when the dialog opens. +If `ArticleActions` already exists from [Permissions](/docs/content-engine/public-permissions), add the `canReport` branch next to its **Edit** link, read both flags with `const { canEdit, canReport } = useArticlePermissions([id]).of(id)`, and pass `title={item.title}` where the header renders it. -### Add it to every row of a list - -Ask once for the whole page, and point each button at its row's title with `describedBy`, so a screen reader hears "Report discussion, Captcha on public forms" instead of ten identical buttons: - -```tsx title="plugins/example/src/pages/discussions-page.tsx" -const permissions = useDiscussionPermissions( - discussions?.edges.map(discussion => discussion.id) ?? [], -); - -renderItem={discussion => ( - <> - - {discussion.title} - - {permissions.of(discussion.id).canReport ? ( - - ) : null} - -)} -``` +### Add the label - +Add `report_type` under `newsroom.articles` in `src/locales/en.json`: - +```json title="plugins/newsroom/src/locales/en.json" +{ + "newsroom": { + "articles": { + "report_type": "article" + } + } +} +``` -## Choose what moderators see +The dialog's own labels, such as the reasons, come from core. -By default a report keeps the record's title and its public text, rich text, choice and file fields, frozen at the moment of the report. Pick the fields yourself when you want something else; they may even be private: + -```ts title="plugins/example/src/content/discussion.ts" -reports: { titleField: "title", snapshotFields: ["body"] }, -``` + -## What the server checks +### Grant the moderator permissions -The button is only a hint. The report route checks again: +Moderators need `can_view_reports` on articles to see a report, and `can_manage_reports` to handle it. A root administrator holds every moderator permission. For anyone else, open **AdminCP → Staff → Moderators**, add the user or role, and turn on the Newsroom report permissions, as [Configure moderators](/docs/dev/moderation/configure-moderators) shows. -- The reader is signed in. A guest gets the sign-in prompt. -- The reader can read the record through the public API. A draft or a hidden record is `404`. -- One reader holds one open report per record, and files at most 20 reports an hour. + + + ## Check the result -Sign in as a member and open someone else's discussion. Click **Report** and pick a reason: +Sign in as a member and open `/news/welcome-to-the-newsroom`, which staff wrote. **Report** shows below the date: +Click **Report**, pick **Spam**, add details and click **Send report**: + -The dialog moves on to details, then says **Report sent**. A moderator with `can_view_reports` now sees it in the [ModCP](/docs/dev/moderation/process-reports). +Now sign in as the moderator and open `/modcp/reports`. The report is in the queue with its reason and the article: + +Open it. The report shows the reason, the reporter's details and a snapshot of the article as it was when reported. A staff-written article shows no author. **Open current content** links to `/news/welcome-to-the-newsroom`, the live article: + + + +[Process reports](/docs/dev/moderation/process-reports) covers assigning, resolving and hiding. + +## Choose what moderators see + +By default a report keeps the record's title and its public text, rich text, choice and file fields, frozen at the moment of the report. Pick the fields yourself when you want something else. They may even be private: + +```ts title="plugins/newsroom/src/content/article.ts" +reports: { titleField: "title", snapshotFields: ["body"] }, +``` + +## What the server checks + +The button is only a hint. The report route checks again: + +- The reader is signed in. A guest gets the sign-in prompt. +- The reader can read the record through the public API. A draft or a hidden record is `404`. +- One reader holds one open report per record, and files at most 20 reports an hour. + +## Report from a list or a comment + +- **Every row of a list.** Call the permissions hook once with every id on the page, and point each button at its row's title with `describedBy`, so a screen reader hears which record each **Report** belongs to. The newsroom plugin's letters list does this in `plugins/newsroom/src/pages/letters-page.tsx`. +- **Comments.** Add `reports: true` to the [comment type](/docs/content-engine/threads), read `canReport` from its own permissions hook, and pass `contentTarget(manifest.id, commentContentType, comment.id)`. `snapshotFields: ["body"]` gives moderators the comment's text, since a comment has no title. + +Next, let readers answer an article with [Comments](/docs/content-engine/threads). diff --git a/apps/web/content/docs/content-engine/search-admincp-collection.webp b/apps/web/content/docs/content-engine/search-admincp-collection.webp index f80c016f3810e41b665b5dfd9d76036e4063671b..ca2b26a133c3cbc0696ffd142f44cbbd2faed006 100644 GIT binary patch literal 92484 zcmeFYWmFw$x(1571$TG1Ai>?;9fG^NI|O$R4#8c5ySqCixVyvVrn{#nJ?G5K>6v@( zS?jJf{Gm3xs`#qvl}FxEln@o=HU|b$6A_eGmFFO2{IOkK519o_eE@X^$;*TpAxun^ zi=_S{O$Z8B-{gb840)5Kl%L2A`T#KvH~HlG3OW^->Iok3k+cRngT$)XL#hh?@;mG^^F7UpY1=h-y`1nZt_id`T6nz zQUJ5pfqRnxv9~w3%`?3NzGu(CH%h?d8^QA1YZZXu#`nVa`4ty1{I>SS^L&4U_p<#= z@rt;b4cH_kc;(^eJNNMOXu6qvBDkHr=$w0V?C^TgyM8<7+wdKJ3j~b6xi0$l@tQsr z-!okCefO>N-Fnlw9lz$gB3R;Ud@H>P+~4eZOMD{%m;&_935MVL0p+ib&w7ux*PF|4 zmH;9^|7+k~*^BF`SOZ@&U>AV+qW5rq=eyo%#@p?S1>k(OeP(#rydqfTv+y4At$dk! z!`hC>d#ipk2Bh3m+)o~0%x9mHuDMuV0t-!@xAxG%)a(*@qK%nymx)9y6s@h4tP^|Lwupwd0WD`);rEV z^X+)ccv}ZZz5V#^K07xtN=hhJ}h5X1nQp32jlg8_fQSgRU=>L);1enbQ?iC~O5DsPPYs-pcBxS4uND3b@P2 zi%Jw&Y*{uLKEo!S9cqx&Rudt!87wY=9~ePtgS8tnu@4ae>rBJ#1uQpW3xD#)+Skl< zj=d(UVd^L}Q-w|13r7WLoW!HHCPv5##K}z-f%YZM0Y{2^A9omBSqx8P<3~7PdhoL$0}T(0{lMH z6Q^MYGb~c^U|)7>WKIWMZ=Zm$o}BOT+hRYN*2EwbEr$$$v-l1?W&#TzXGYiRjQZsH z80-g1r1x)3M1JCef{RmU>3EOLcP1a%{(R&l%F&fWSL`^wLMp4wu;c(leVZp>8mgkB z;z}^hR@D7~EHKt_FOhaim^DHjd&%X54LQToFNLYTID(6?iaAzeu3K_U_BmkY0<=S+ zM!Mc53ACQ{UU*AU$vwKm9Acc}KlmXLSY$pDev=?vC40v;Gl?jIA{nPZH@SfIFbnxOmC|5DicF3|XSAF@z9yhN0I%;|>nZ zR-f=fZJ_DcxhVm=LHrs}j%TEa-;;uh(Ub86888lMK2&M(vWbdRamblNjcF(h+G%V# zrM+HCg?G8Ik@Qx@)~k9V75Jt5V+6eGj()UnsP$Dot?d3Vj3I0MUN&a?UdzUutR%>4hX77{4Cnh&Z?6D=A)Qk3s7&lnsOQ;vR{RB77z zTo*ek5t^5o&k)L^x*6{=Aw)-x|H&b;1NT0d!zghE(xj%M?KsyQDiSlj$RrNj?_#J{k*lgI_n-`42s62Dq zPbOZC8ht8)BOT;wpvQqh%d>jA5#;H7g$m5ke$}m7lS`j{da(N#VRceA^w614NaOBC z(geTI^0l#&3*{Qk>4u9dz_Mssn9=^=y~dD8(ia4{;wNm;LpCl8Z;>dmgCoyFQ^C<3 ziV77K@wBz}C3A6;n`iO?vVzH&=m&@ONrGlN-;#MRK=$}`2gDvO?0EI{aN_%15L8;O z*K`&Mk&IWqPFW3tfF6G&aYqRliC}OOW-^Y*FhC+}m&_4oVXuR%cJYSzYS!@f(|o_uTj z6WLE1f+$Gi?$CB1=?yz0%m^EEhdZW~B|7>#7%hK)MuJ{DY}-M?J2=8NepSZc4VGXL zEAgn>)6r)9Zb13C6YOK!ZQDRLo+0Xab3^poBjksQHsr8sv3&Q4@GhL&P-SBIsl z?}`B*kug@I32Oz?OKJ}6YW6kh$92-0W)P4F-^7tTYm|`1d>`1+?rt9$B>4Pe`NUhn zD(ic{kUgrRK^{o}qB8NaBpE(t!pz6iCTr>@an!MRw>FYeVfgkXGuYN9nw9nZ{d)Mf z1xEk${(PFK%Zyh%4z-_9{bz)s{v z;kTsXjaDAns7CO~>#C;vwamN2t2kr7f7-a*!>B$i;ZaK-p7Re{Yi{_q#&3

      AR5h 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 z

      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

      1;%Ac8YIHknkgOdEGMq={IS z)LRp@*}X-&cR#|HrEoK6)N-vK0NY8}`whI0h?kqVD?puFKTSfTW{248eFhsISG5 zx3a(`@^@K~vGrT)=Nxc?ou-nJm#@ydb>})QZe=6Ux{65`vbRkm)qSC3@{N zd2kka1&PqaA7iHl>#fc&9Nv9b$QYrMZfrCiZE+*2RJoz-i)i}(h;94bn)28Bh*BW3 z_3pAcbLGi~^99~l{w~a`toTi>wSek-@Y2@w!V(||5pD2w{d#a literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/content-engine/threads-editing.mdx b/apps/web/content/docs/content-engine/threads-editing.mdx new file mode 100644 index 0000000000..329b1b86f7 --- /dev/null +++ b/apps/web/content/docs/content-engine/threads-editing.mdx @@ -0,0 +1,683 @@ +--- +title: Comment editing +description: Let VitNode Content Engine comment authors fix their comments. Ask useContentPermissions who may edit, load the editable text, save it with PATCH and refresh the thread, with the concurrency behavior that applies without editorial. +icon: MessageSquareText +implementation: + objective: Let members edit their own comments in an existing comment section. + decisions: + - Should two saves of the same comment be checked against each other? That needs `editorial` on the comment type; without it, the last save wins. + constraints: + - Show Edit only when `useContentPermissions` answers `canEdit`, with one hook call for every comment on screen. + - Load the text with `GET /{id}/edit` before editing, save with `PATCH /{id}` through `useContentPublicWrite`, then invalidate the thread query. + related: + - title: Comments + href: /docs/content-engine/threads + - title: Replies + href: /docs/content-engine/threads-frontend + - title: Permissions API + href: /docs/content-engine/public-permissions-api +--- + +import { Accordion, Accordions } from "fumadocs-ui/components/accordion"; + +import { ImgDocs } from "@/components/fumadocs/img"; +import editing from "./threads-editing-form.webp"; + +This page adds **Edit** to the comments a visitor may change, opens an editor in place, and refreshes the thread after a save. Authors edit their own comments; moderators with `can_edit` edit anyone's. + +This continues the working comment section from [Comments](/docs/content-engine/threads). Its comment type already has `update: { fields: ["body"] }`, so `PATCH /comments/{id}` and `GET /comments/{id}/edit` exist. + + + + + +### Ask who may edit + +Create `src/pages/comment-permissions.ts`. This is the complete file, like the article's in [Permissions](/docs/content-engine/public-permissions): + +```ts title="plugins/newsroom/src/pages/comment-permissions.ts" +import { useContentPermissions } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +import { manifest } from "@/manifest.gen"; + +/** What the visitor may do with each comment on screen: `canEdit`, `canReport`. */ +export const useCommentPermissions = (ids: readonly number[]) => + useContentPermissions({ + ids, + queryKey: [manifest.id, "comments"], + fetch: async request => { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/comments", + path: "/permissions", + args: { query: { ids: request.join(",") } }, + }); + if (res.status !== 200) throw new Error("Loading permissions failed."); + + return await res.json(); + }, + }); +``` + +`GET /comments/permissions` answers `canEdit` per comment for the visitor who asks. It is `true` for the author while the rules allow it, and for a moderator with `can_edit`. `queryKey` starts with the comments' prefix, so invalidating `[manifest.id, "comments"]` refreshes the answers too. + + + + + +### Write the editor + +Create `src/pages/comment-editor.tsx`. This is the complete file. It edits one comment's body and reports whether the save waits for a moderator: + +```tsx title="plugins/newsroom/src/pages/comment-editor.tsx" +import { + AutoForm, + type AutoFormOnSubmit, + AutoFormSubmitButton, +} from "@vitnode/core/components/form/auto-form"; +import { AutoFormEditor } from "@vitnode/core/components/form/fields/editor"; +import { Button } from "@vitnode/core/components/ui/button"; +import { + isRichTextEmpty, + type RichTextDocument, + zodRichTextDocument, +} from "@vitnode/core/content"; +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { useTranslations } from "use-intl"; +import { z } from "zod"; + +import { manifest } from "@/manifest.gen"; + +export interface CommentEditorProps { + /** The comment's latest text, from `GET /comments/{id}/edit`. */ + body: RichTextDocument; + commentId: number; + label: string; + onCancel: () => void; + /** Called after a save, with whether it waits for a moderator. */ + onSaved: (pending: boolean) => Promise; +} + +const createSchema = (body: RichTextDocument, required: string) => + z.object({ + body: zodRichTextDocument + .refine(doc => !isRichTextEmpty(doc), required) + .default(body), + }); + +const CommentEditor = ({ + body, + commentId, + label, + onCancel, + onSaved, +}: CommentEditorProps) => { + const t = useTranslations("newsroom.comments.form"); + const write = useContentPublicWrite({ fields: ["body"] }); + + const onSubmit: AutoFormOnSubmit> = async ( + values, + form, + ) => { + const saved = await write.submit( + form, + async () => + await fetcher({ + plugin: manifest.id, + method: "patch", + module: "content/comments", + path: "/{id}", + args: { params: { id: commentId }, body: { values } }, + }), + ); + if (!saved) return; + + await onSaved(saved.approval?.status === "pending"); + }; + + return ( + ( + + ), + }, + ]} + formSchema={createSchema(body, t("required"))} + layout={fields => <>{fields.body}} + onSubmit={onSubmit} + > +
      + {t("save")} + +
      +
      + ); +}; + +export default CommentEditor; +``` + +- **The request** sends only `body` to `PATCH /comments/{id}`. Members can never move a comment, because `article` and `parent` are not in `update.fields`. +- **`write.submit`** shows a refusal as a toast and returns `null`, so the editor stays open with the text. +- **`onSaved(pending)`** is `true` only when the comment lives in a container that holds edits for approval. For newsroom comments it is always `false`. + +
      + + + +### Show Edit and load the comment + +Edit `src/pages/comment-section.tsx`. Add the imports, load the editor lazily next to the composer, and add a `CommentItem` component above `CommentSection`. These are excerpts: + +```tsx title="plugins/newsroom/src/pages/comment-section.tsx (excerpt)" +import { type RichTextDocument } from "@vitnode/core/content"; // [!code ++] +import { fetcher } from "@vitnode/core/tanstack/fetcher"; // [!code ++] + +import { manifest } from "@/manifest.gen"; // [!code ++] + +import type { CommentEditorProps } from "./comment-editor"; // [!code ++] + +import { useCommentPermissions } from "./comment-permissions"; // [!code ++] + +const CommentComposer = lazy(async () => await import("./comment-composer")); +const CommentEditor = lazy(async () => await import("./comment-editor")); // [!code ++] +``` + +```tsx title="plugins/newsroom/src/pages/comment-section.tsx (excerpt)" +/** A comment, with Edit for the visitors who may use it. */ +const CommentItem = ({ + canEdit, + comment, + onSaved, +}: { + canEdit: boolean; + comment: ArticleComment; + onSaved: CommentEditorProps["onSaved"]; +}) => { + const t = useTranslations("newsroom.comments"); + const tWrite = useTranslations("core.global.content_write"); + const [editing, setEditing] = useState(null); + const [isOpening, setIsOpening] = useState(false); + + // Opens the editor on the comment's latest text, not on the cached copy. + const openEditor = async () => { + setIsOpening(true); + try { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/comments", + path: "/{id}/edit", + args: { params: { id: comment.id } }, + }); + if (res.status !== 200) { + const reason = + res.status === 401 + ? "unauthenticated" + : res.status === 403 + ? "forbidden" + : res.status === 404 + ? "not_found" + : "unknown"; + toast.error(tWrite("title"), { description: tWrite(reason) }); + + return; + } + + setEditing((await res.json()).values.body); + } finally { + setIsOpening(false); + } + }; + + if (editing) { + return ( +
      +

      + {comment.author?.name ?? t("someone")} +

      + }> + { + setEditing(null); + }} + onSaved={async pending => { + setEditing(null); + await onSaved(pending); + }} + /> + +
      + ); + } + + return ( +
      + + {canEdit ? ( + + ) : null} +
      + ); +}; +``` + +- **Edit** first loads `GET /comments/{id}/edit`, so the editor opens on the latest saved text, not on the copy the thread cached. The button shows a spinner while it loads, so a second click cannot open it twice. +- A refusal, such as a session that expired in the meantime, becomes a toast with core's message, and the comment stays as it was. +- While editing, the comment's text is replaced by the editor, with **Save** and **Cancel**. + +
      + + + +### Save and refresh the section + +In `CommentSection`, ask for the permissions of every comment on screen, add a handler for saved edits, and render `CommentItem` instead of `CommentBody`. These are excerpts: + +```tsx title="plugins/newsroom/src/pages/comment-section.tsx (excerpt)" + const items = useMemo( + () => pages?.flatMap(page => page.items) ?? [], + [pages], + ); + // [!code ++:4] + // One request for every comment on screen, batched by the hook. + const permissions = useCommentPermissions( + items.flatMap(item => (item.record ? [item.id] : [])), + ); + + // [!code ++:12] + const onEdited = async (pending: boolean) => { + if (pending) { + toast.info(t("edit_pending.title"), { + description: t("edit_pending.desc"), + }); + } else { + toast.success(t("edited.title"), { description: t("edited.desc") }); + } + await queryClient.invalidateQueries({ + queryKey: commentsQueryKey(articleId), + }); + }; +``` + +```tsx title="plugins/newsroom/src/pages/comment-section.tsx (excerpt)" + {items.map(item => + item.record ? ( +
    1. + {/* [!code ++:5] */} + +
    2. + ) : null, + )} +``` + +- **`useCommentPermissions`** gets every comment with a record in one call. It sends at most 50 ids per request and keeps earlier answers when **Load more comments** adds ids, as [Permissions API](/docs/content-engine/public-permissions-api#batches) describes. `of(id)` is all `false` until the answer arrives, so **Edit** appears a moment after the comments. +- **`onEdited`** invalidates the article's comment query, which refetches every loaded page, so the new text shows in place. + +
      + + + +### Add the labels + +Add these keys to the `comments` group in `src/locales/en.json`: + +```json title="plugins/newsroom/src/locales/en.json" +{ + "newsroom": { + "comments": { + "form": { "edit_label": "Edit your comment", "save": "Save", "cancel": "Cancel" }, + "edit": "Edit", + "edited": { "title": "Comment saved", "desc": "Your changes are live." }, + "edit_pending": { + "title": "Your changes are waiting for a moderator", + "desc": "Readers see the earlier text until a moderator approves." + } + } + } +} +``` + + + +
      + + + + +```tsx title="plugins/newsroom/src/pages/comment-section.tsx" +import { useInfiniteQuery, useQueryClient } from "@tanstack/react-query"; +import { RichTextContent } from "@vitnode/core/components/rich-text"; +import { Button, buttonVariants } from "@vitnode/core/components/ui/button"; +import { Skeleton } from "@vitnode/core/components/ui/skeleton"; +import { type RichTextDocument } from "@vitnode/core/content"; +import { useSessionQuery } from "@vitnode/core/tanstack/auth"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { lazy, Suspense, useMemo, useState } from "react"; +import { toast } from "sonner"; +import { useTranslations } from "use-intl"; + +import { manifest } from "@/manifest.gen"; + +import type { CommentComposerProps, CommentOutcome } from "./comment-composer"; +import type { ArticleComment } from "./comment-data"; +import type { CommentEditorProps } from "./comment-editor"; + +import { commentsQueryKey, commentsQueryOptions } from "./comment-data"; +import { useCommentPermissions } from "./comment-permissions"; + +// The editor is heavy and most readers never write, so it loads on demand. +const CommentComposer = lazy(async () => await import("./comment-composer")); +const CommentEditor = lazy(async () => await import("./comment-editor")); + +const Composer = (props: CommentComposerProps) => ( + }> + + +); + +/** Who wrote a comment, and what they said. */ +const CommentBody = ({ comment }: { comment: ArticleComment }) => { + const t = useTranslations("newsroom.comments"); + + return ( +
      +

      + {comment.author?.name ?? t("someone")} +

      + +
      + ); +}; + +/** A comment, with Edit for the visitors who may use it. */ +const CommentItem = ({ + canEdit, + comment, + onSaved, +}: { + canEdit: boolean; + comment: ArticleComment; + onSaved: CommentEditorProps["onSaved"]; +}) => { + const t = useTranslations("newsroom.comments"); + const tWrite = useTranslations("core.global.content_write"); + const [editing, setEditing] = useState(null); + const [isOpening, setIsOpening] = useState(false); + + // Opens the editor on the comment's latest text, not on the cached copy. + const openEditor = async () => { + setIsOpening(true); + try { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/comments", + path: "/{id}/edit", + args: { params: { id: comment.id } }, + }); + if (res.status !== 200) { + const reason = + res.status === 401 + ? "unauthenticated" + : res.status === 403 + ? "forbidden" + : res.status === 404 + ? "not_found" + : "unknown"; + toast.error(tWrite("title"), { description: tWrite(reason) }); + + return; + } + + setEditing((await res.json()).values.body); + } finally { + setIsOpening(false); + } + }; + + if (editing) { + return ( +
      +

      + {comment.author?.name ?? t("someone")} +

      + }> + { + setEditing(null); + }} + onSaved={async pending => { + setEditing(null); + await onSaved(pending); + }} + /> + +
      + ); + } + + return ( +
      + + {canEdit ? ( + + ) : null} +
      + ); +}; + +export const CommentSection = ({ + articleId, + articleSlug, +}: { + articleId: number; + articleSlug: string; +}) => { + const t = useTranslations("newsroom.comments"); + const queryClient = useQueryClient(); + const session = useSessionQuery(); + const [composerKey, setComposerKey] = useState(0); + const comments = useInfiniteQuery(commentsQueryOptions(articleId)); + + const pages = comments.data?.pages; + const items = useMemo( + () => pages?.flatMap(page => page.items) ?? [], + [pages], + ); + // One request for every comment on screen, batched by the hook. + const permissions = useCommentPermissions( + items.flatMap(item => (item.record ? [item.id] : [])), + ); + + const onPosted = async (outcome: CommentOutcome) => { + if (outcome !== "published") { + // Not in the public thread, so there is nothing to refresh. + toast.info(t(`${outcome}.title`), { description: t(`${outcome}.desc`) }); + + return; + } + + toast.success(t("created.title"), { description: t("created.desc") }); + // Refetches every loaded page in order, with the new count. + await queryClient.invalidateQueries({ + queryKey: commentsQueryKey(articleId), + }); + }; + + const onEdited = async (pending: boolean) => { + if (pending) { + toast.info(t("edit_pending.title"), { + description: t("edit_pending.desc"), + }); + } else { + toast.success(t("edited.title"), { description: t("edited.desc") }); + } + await queryClient.invalidateQueries({ + queryKey: commentsQueryKey(articleId), + }); + }; + + return ( +
      +

      + {t("title", { count: pages?.[0]?.replyCount ?? 0 })} +

      + + {comments.isPending ? ( +
      + + {t("loading")} + + {[0, 1].map(key => ( +
      + + +
      + ))} +
      + ) : comments.isError && items.length === 0 ? ( +
      +

      + {t("load_failed.desc")} +

      + +
      + ) : items.length === 0 ? ( +

      {t("empty")}

      + ) : ( +
        + {items.map(item => + item.record ? ( +
      1. + +
      2. + ) : null, + )} +
      + )} + + {comments.hasNextPage ? ( + + ) : null} + + {session.data?.user ? ( + { + setComposerKey(key => key + 1); + await onPosted(outcome); + }} + parentId={null} + /> + ) : ( + + {t("sign_in")} + + )} +
      + ); +}; +``` + +
      +
      + +## Check the result + +Open the article with comments from two members, `/news/welcome-to-the-newsroom` from [Comments](/docs/content-engine/threads#check-the-result): + +1. Sign in as one of them. **Edit** shows under your own comment only. +2. Click **Edit**, change the text and click **Save**. **Comment saved** appears and the new text shows in place. +3. Sign in as the other member, or open the page signed out. There is no **Edit** on comments you did not write. + + + +## Two saves of the same comment + +Newsroom comments have no `editorial`, so they have no `version`. `PATCH /comments/{id}` takes `{ "values": { "body": ... } }` and nothing else. When two tabs save the same comment, both answer `200` and the last save wins. Sending an `expectedVersion` anyway answers `400` with `Unrecognized key: "expectedVersion"`. + +For short comments that is usually fine. To stop silent overwrites, add `editorial: true` to the comment type and migrate. Every comment then gets a `version`, `GET /{id}/edit` returns it, and a stale save answers `409 CONTENT_VERSION_CONFLICT`. Pass `version` and `latestVersion` to `useContentPublicWrite`, send `expectedVersion` from `write.submit`, and render `write.conflict` above the editor, as the article's [Edit form](/docs/content-engine/public-write-edit#handle-version-conflicts) does. + +Next, [Replies](/docs/content-engine/threads-frontend) lets comments answer each other. diff --git a/apps/web/content/docs/content-engine/threads-frontend-tree.webp b/apps/web/content/docs/content-engine/threads-frontend-tree.webp index 0ef68dedc4642ad8e6fb68e97fcb03403d7a703a..95b1eb4e3fb94fb0f9af287c9b72b558417a4cd8 100644 GIT binary patch literal 55790 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 z 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%0D0r!015Rr4RxD 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 BioyT@ literal 84662 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 + + + +### Raise the depth + +Edit `src/content/comment.ts`. Export the limit, so the section can hide **Reply** where the server would refuse it. These are excerpts: + +```ts title="plugins/newsroom/src/content/comment.ts" +/** How deep replies nest. The section hides **Reply** at this depth. */ // [!code ++:2] +export const COMMENT_MAX_DEPTH = 4; + + thread: { parent: "parent", root: "article", maxDepth: COMMENT_MAX_DEPTH }, // [!code highlight] +``` + +`maxDepth` only changes what the server accepts, so there is nothing to migrate. Depth 1 is a top-level comment; with `4`, a reply to a reply to a reply is the deepest. + + + + + +### Build the tree + +Add a tree builder to the end of `src/pages/comment-data.ts`. This is an excerpt: + +```ts title="plugins/newsroom/src/pages/comment-data.ts" +export interface CommentNode extends CommentItem { + children: CommentNode[]; +} + +/** The flat, depth-first answer as a tree: a parent always comes before its replies. */ +export const buildCommentTree = ( + items: readonly CommentItem[], +): CommentNode[] => { + const nodes = new Map(); + const roots: CommentNode[] = []; + + for (const item of items) { + const node: CommentNode = { ...item, children: [] }; + nodes.set(item.id, node); + const parent = + item.parentId === null ? undefined : nodes.get(item.parentId); + if (parent) parent.children.push(node); + else roots.push(node); + } + + return roots; +}; +``` + +The thread route returns comments depth-first, so every reply comes after its parent. One pass with a `Map` is enough. If a reply's parent were ever missing from the page, the reply would fall back to the top level instead of disappearing. + + + + + +### Render a branch with Reply + +Edit `src/pages/comment-section.tsx`. Import the limit and the tree, then add `CommentBranch` above `CommentSection`. These are excerpts: + +```tsx title="plugins/newsroom/src/pages/comment-section.tsx (excerpt)" +import { COMMENT_MAX_DEPTH } from "@/content/comment"; // [!code ++] + +import type { ArticleComment, CommentNode } from "./comment-data"; // [!code highlight] + +import { + buildCommentTree, // [!code ++] + commentsQueryKey, + commentsQueryOptions, +} from "./comment-data"; +``` + +```tsx title="plugins/newsroom/src/pages/comment-section.tsx (excerpt)" +/** What every comment in the tree needs from the section. */ +interface CommentThread { + articleId: number; + canReply: boolean; + onEdited: CommentEditorProps["onSaved"]; + onPosted: CommentComposerProps["onPosted"]; + permissions: ReturnType; +} + +/** A comment with its Reply form, followed by every answer below it. */ +const CommentBranch = ({ + node, + thread, +}: { + node: CommentNode; + thread: CommentThread; +}) => { + const t = useTranslations("newsroom.comments"); + const [replying, setReplying] = useState(false); + + return ( +

    3. + {node.record ? ( + <> + + {thread.canReply && node.depth < COMMENT_MAX_DEPTH ? ( + + ) : null} + {replying ? ( +
      + { + setReplying(false); + await thread.onPosted(outcome); + }} + parentId={node.id} + /> + +
      + ) : null} + + ) : ( + // Hidden, but its public answers still need a parent to hang from. +

      {t("removed")}

      + )} + + {node.children.length > 0 ? ( +
        + {node.children.map(child => ( + + ))} +
      + ) : null} +
    4. + ); +}; +``` + +- **Reply** opens a composer for that comment with `parentId={node.id}`, the same composer that posts top-level comments. `aria-expanded` tells screen readers whether the form is open, and **Cancel** closes it. +- **Reply is hidden at `COMMENT_MAX_DEPTH`**, where the server would answer `400`. It is also hidden for guests. +- **Removed comments.** A hidden comment that still has public answers comes back as `removed: true` with `record: null`. It renders as **This comment was removed.**, keeps its answers below it, and offers no **Reply** or **Edit**. +- **Answers** are a nested `
        ` with a left border, indented less on phones. + + + + + +### Render the tree in the section + +In `CommentSection`, build the tree, collect what each branch needs, render the branches instead of the flat list, and say when a page was cut short. These are excerpts: + +```tsx title="plugins/newsroom/src/pages/comment-section.tsx (excerpt)" + const tree = useMemo(() => buildCommentTree(items), [items]); // [!code ++] + + // [!code ++:7] + const thread: CommentThread = { + articleId, + canReply: Boolean(session.data?.user), + onEdited, + onPosted, + permissions, + }; +``` + +```tsx title="plugins/newsroom/src/pages/comment-section.tsx (excerpt)" +
          + {/* [!code ++:3] */} + {tree.map(node => ( + + ))} +
        + )} + + {/* [!code ++:3] */} + {pages?.some(page => page.truncated) ? ( +

        {t("truncated")}

        + ) : null} +``` + +A posted reply goes through the same `onPosted` as a top-level comment. A published reply refreshes the thread, and a draft or pending one only shows its message. The top-level composer keeps its text, because only its own `onPosted` resets its key. + +
        + + + +### Add the labels + +Add these keys to the `comments` group in `src/locales/en.json`. `form.cancel` is the same key [Comment editing](/docs/content-engine/threads-editing) added: + +```json title="plugins/newsroom/src/locales/en.json" +{ + "newsroom": { + "comments": { + "form": { "reply_label": "Reply to {name}", "cancel": "Cancel" }, + "reply": "Reply", + "removed": "This comment was removed.", + "truncated": "This conversation is long, so some deeper replies are not shown." + } + } +} +``` + + + + + + + + +```tsx title="plugins/newsroom/src/pages/comment-section.tsx" +import { useInfiniteQuery, useQueryClient } from "@tanstack/react-query"; +import { RichTextContent } from "@vitnode/core/components/rich-text"; +import { Button, buttonVariants } from "@vitnode/core/components/ui/button"; +import { Skeleton } from "@vitnode/core/components/ui/skeleton"; +import { type RichTextDocument } from "@vitnode/core/content"; +import { useSessionQuery } from "@vitnode/core/tanstack/auth"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { lazy, Suspense, useMemo, useState } from "react"; +import { toast } from "sonner"; +import { useTranslations } from "use-intl"; + +import { COMMENT_MAX_DEPTH } from "@/content/comment"; +import { manifest } from "@/manifest.gen"; + +import type { CommentComposerProps, CommentOutcome } from "./comment-composer"; +import type { ArticleComment, CommentNode } from "./comment-data"; +import type { CommentEditorProps } from "./comment-editor"; + +import { + buildCommentTree, + commentsQueryKey, + commentsQueryOptions, +} from "./comment-data"; +import { useCommentPermissions } from "./comment-permissions"; + +// The editor is heavy and most readers never write, so it loads on demand. +const CommentComposer = lazy(async () => await import("./comment-composer")); +const CommentEditor = lazy(async () => await import("./comment-editor")); + +const Composer = (props: CommentComposerProps) => ( + }> + + +); + +/** Who wrote a comment, and what they said. */ +const CommentBody = ({ comment }: { comment: ArticleComment }) => { + const t = useTranslations("newsroom.comments"); + + return ( +
        +

        + {comment.author?.name ?? t("someone")} +

        + +
        + ); +}; + +/** A comment, with Edit for the visitors who may use it. */ +const CommentItem = ({ + canEdit, + comment, + onSaved, +}: { + canEdit: boolean; + comment: ArticleComment; + onSaved: CommentEditorProps["onSaved"]; +}) => { + const t = useTranslations("newsroom.comments"); + const tWrite = useTranslations("core.global.content_write"); + const [editing, setEditing] = useState(null); + const [isOpening, setIsOpening] = useState(false); + + // Opens the editor on the comment's latest text, not on the cached copy. + const openEditor = async () => { + setIsOpening(true); + try { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/comments", + path: "/{id}/edit", + args: { params: { id: comment.id } }, + }); + if (res.status !== 200) { + const reason = + res.status === 401 + ? "unauthenticated" + : res.status === 403 + ? "forbidden" + : res.status === 404 + ? "not_found" + : "unknown"; + toast.error(tWrite("title"), { description: tWrite(reason) }); + + return; + } + + setEditing((await res.json()).values.body); + } finally { + setIsOpening(false); + } + }; + + if (editing) { + return ( +
        +

        + {comment.author?.name ?? t("someone")} +

        + }> + { + setEditing(null); + }} + onSaved={async pending => { + setEditing(null); + await onSaved(pending); + }} + /> + +
        + ); + } + + return ( +
        + + {canEdit ? ( + + ) : null} +
        + ); +}; + +/** What every comment in the tree needs from the section. */ +interface CommentThread { + articleId: number; + canReply: boolean; + onEdited: CommentEditorProps["onSaved"]; + onPosted: CommentComposerProps["onPosted"]; + permissions: ReturnType; +} + +/** A comment with its Reply form, followed by every answer below it. */ +const CommentBranch = ({ + node, + thread, +}: { + node: CommentNode; + thread: CommentThread; +}) => { + const t = useTranslations("newsroom.comments"); + const [replying, setReplying] = useState(false); + + return ( +
      1. + {node.record ? ( + <> + + {thread.canReply && node.depth < COMMENT_MAX_DEPTH ? ( + + ) : null} + {replying ? ( +
        + { + setReplying(false); + await thread.onPosted(outcome); + }} + parentId={node.id} + /> + +
        + ) : null} + + ) : ( + // Hidden, but its public answers still need a parent to hang from. +

        {t("removed")}

        + )} + + {node.children.length > 0 ? ( +
          + {node.children.map(child => ( + + ))} +
        + ) : null} +
      2. + ); +}; + +export const CommentSection = ({ + articleId, + articleSlug, +}: { + articleId: number; + articleSlug: string; +}) => { + const t = useTranslations("newsroom.comments"); + const queryClient = useQueryClient(); + const session = useSessionQuery(); + const [composerKey, setComposerKey] = useState(0); + const comments = useInfiniteQuery(commentsQueryOptions(articleId)); + + const pages = comments.data?.pages; + const items = useMemo( + () => pages?.flatMap(page => page.items) ?? [], + [pages], + ); + const tree = useMemo(() => buildCommentTree(items), [items]); + // One request for every comment on screen, batched by the hook. + const permissions = useCommentPermissions( + items.flatMap(item => (item.record ? [item.id] : [])), + ); + + const onPosted = async (outcome: CommentOutcome) => { + if (outcome !== "published") { + // Not in the public thread, so there is nothing to refresh. + toast.info(t(`${outcome}.title`), { description: t(`${outcome}.desc`) }); + + return; + } + + toast.success(t("created.title"), { description: t("created.desc") }); + // Refetches every loaded page in order, with the new count. + await queryClient.invalidateQueries({ + queryKey: commentsQueryKey(articleId), + }); + }; + + const onEdited = async (pending: boolean) => { + if (pending) { + toast.info(t("edit_pending.title"), { + description: t("edit_pending.desc"), + }); + } else { + toast.success(t("edited.title"), { description: t("edited.desc") }); + } + await queryClient.invalidateQueries({ + queryKey: commentsQueryKey(articleId), + }); + }; + + const thread: CommentThread = { + articleId, + canReply: Boolean(session.data?.user), + onEdited, + onPosted, + permissions, + }; + + return ( +
        +

        + {t("title", { count: pages?.[0]?.replyCount ?? 0 })} +

        + + {comments.isPending ? ( +
        + + {t("loading")} + + {[0, 1].map(key => ( +
        + + +
        + ))} +
        + ) : comments.isError && items.length === 0 ? ( +
        +

        + {t("load_failed.desc")} +

        + +
        + ) : items.length === 0 ? ( +

        {t("empty")}

        + ) : ( +
          + {tree.map(node => ( + + ))} +
        + )} + + {pages?.some(page => page.truncated) ? ( +

        {t("truncated")}

        + ) : null} + + {comments.hasNextPage ? ( + + ) : null} + + {session.data?.user ? ( + { + setComposerKey(key => key + 1); + await onPosted(outcome); + }} + parentId={null} + /> + ) : ( + + {t("sign_in")} + + )} +
        + ); +}; +``` + +
        +
        + +## Check the result + +Open `/news/welcome-to-the-newsroom` as a member with a comment from another member below it: + +1. Click **Reply** under it, write an answer and click **Post comment**. The answer shows indented under the comment. +2. Reply to the answer, and to that answer. At depth 4, **Reply** is gone. +3. In **AdminCP → Newsroom → Comments**, hide a comment that has answers. Its place shows **This comment was removed.**, with its answers still below it, and it has no **Reply**. + + + +The thread route shows the same shape, with comment 3 hidden: + +```bash +curl "http://localhost:3000/api/newsroom/content/comments/thread?root=1" +``` + +```json title="200 (trimmed)" +{ + "items": [ + { "depth": 1, "id": 1, "parentId": null, "removed": false, "record": { "id": 1 } }, + { "depth": 2, "id": 10, "parentId": 1, "removed": false, "record": { "id": 10 } }, + { "depth": 1, "id": 2, "parentId": null, "removed": false, "record": { "id": 2 } }, + { "depth": 2, "id": 3, "parentId": 2, "removed": true, "record": null }, + { "depth": 3, "id": 4, "parentId": 3, "removed": false, "record": { "id": 4 } }, + { "depth": 4, "id": 5, "parentId": 4, "removed": false, "record": { "id": 5 } } + ], + "pageInfo": { "endCursor": "WyIyMDI2LTEwLTIzIDE5OjExOjIyLjAwMTIxOSIsMl0", "hasNextPage": false, "totalCount": 2 }, + "replyCount": 5, + "truncated": false +} +``` + +`totalCount` counts top-level comments; `replyCount` counts every public comment, so the heading reads **5 comments**. Comment 10 is the reply from step 1, listed right after its parent. A reply to comment 5, at depth 4, answers: + +```json title="400" +{ + "code": "CONTENT_INVALID_INPUT", + "contentTypeId": "newsroom.comment", + "issues": [ + { + "code": "unavailable", + "field": "parent", + "message": "Replies nest at most 4 levels deep. Answer a reply higher up." + } + ] +} +``` + +## Pages and long conversations + +- **Pages are top-level comments.** `first` counts top-level comments, and each comes with every reply below it. **Load more comments** adds the next ones; replies never split across pages. +- **Truncated pages.** One page holds at most 500 comments in total. When deep replies do not fit, `truncated` is `true` and the section says so instead of pretending the conversation ends there. +- **New top-level comments** land at the end, because comments are oldest first. While pages remain, **Load more comments** reaches them. +- **Permissions** are still one hook call for every loaded comment. It splits more than 50 ids into batches, so a long thread keeps its **Edit** buttons. + +The server keeps the tree valid on every write, in the AdminCP too: the parent must exist, be public and belong to the same article; a comment never answers itself or one of its own answers; and nothing nests deeper than `maxDepth`. The Forum plugin's `plugins/forum/src/pages/thread.tsx` builds the same thread with collapsible branches and permalinks. diff --git a/apps/web/content/docs/content-engine/threads.mdx b/apps/web/content/docs/content-engine/threads.mdx index 664fc25d09..fb262823a7 100644 --- a/apps/web/content/docs/content-engine/threads.mdx +++ b/apps/web/content/docs/content-engine/threads.mdx @@ -1,110 +1,204 @@ --- -title: Threaded replies -description: Add nested replies, such as comments under a forum topic, with the VitNode Content Engine thread option, from the content type to a comment section with replying, editing, tombstones and reporting. +title: Comments +description: Add comments under each VitNode Content Engine record with a comment content type and the thread option. Load them on the record's page, let signed-in members post, and tell published, draft and pending comments apart. icon: MessagesSquare implementation: - objective: Add threaded replies, such as comments, under an existing content type and show them on its page. + objective: Let signed-in members comment under the records of an existing content type, on its public page. decisions: - - Which plugin owns the replies? Offer plugins in the project that define Content Engine content types. - - Which items get replies? Offer content types from the chosen plugin with a public API and a public page. - - Who writes replies? Signed-in members from the public site (uses Public write), or only staff in the AdminCP. - - How deep can replies nest? From 1 (a flat list) to 32 levels; recommend 6. + - Which items get comments? Offer content types from the project's plugins that have a public API and a public page. + - 'Should comments go live at once? Recommend `create.status: "published"`; `"draft"` keeps them private until staff publish them.' constraints: - - Use the content type `thread` option. Do not build a separate comments table, tree query or placement checks. - - 'The root relation is required, to-one and `container: true`; `parent` is a nullable to-one self relation. Both belong in `publicApi.fields` and neither in `publicWrite.update.fields`.' - - 'Read replies with `GET /{publicApi.path}/thread` through `fetcher`, render tombstones (`removed: true`) so the tree keeps its shape, and show Edit and Report from `useContentPermissions`.' + - Define the comments as their own content type with the `thread` option, a required relation to the commented record as `root`, and a nullable self relation as `parent`. + - Read them with `GET /{publicApi.path}/thread` and post with `useContentPublicWrite`; check `approval.status` and `status` before saying a comment is posted. related: - - title: Public write - href: /docs/content-engine/public-write - - title: Report content - href: /docs/content-engine/reports - - title: Thread reference + - title: Comment editing + href: /docs/content-engine/threads-editing + - title: Replies + href: /docs/content-engine/threads-frontend + - title: thread reference href: /docs/content-engine/reference#thread --- +import { Accordion, Accordions } from "fumadocs-ui/components/accordion"; import { Tab, Tabs } from "fumadocs-ui/components/tabs"; import { ImgDocs } from "@/components/fumadocs/img"; -import tree from "./threads-frontend-tree.webp"; +import section from "./threads-comments.webp"; -The `thread` option turns a content type into replies that answer each other under one record, like comments under a forum topic. The server keeps the tree valid and returns it a page at a time; your page draws it. This guide follows the Forum plugin's comments: the content type first, then the comment section in `plugins/forum/src/pages/`. +Comments are records of their own, in a comment content type that points at the article it answers. The `thread` option gives that type a route that returns an article's comments a page at a time, and the server checks where every comment may go. This page adds a comment list and a composer under each article. -You need the root content type, here `forum.topic`, with a [public API](/docs/content-engine/public-api) and a page. For members to reply, read [Public write](/docs/content-engine/public-write) too. +## Before you begin + +You need: + +- **The article type with its public API and public page**, from the beginner path up to [Content page](/docs/content-engine/public-pages). The article itself needs no `author` and no `publicWrite`. Staff can keep writing every article in the AdminCP. The comment type below has its own `author` field and its own `publicWrite`, which is what lets members comment. +- **Member accounts.** Signing in is part of every VitNode app; it does not depend on members writing articles. +- **`@tanstack/react-query` in the plugin.** Skip this if [Embedded list](/docs/content-engine/public-lists-embed#add-tanstack-query-to-the-plugin) or [Create form](/docs/content-engine/public-write-frontend#add-tanstack-query-to-the-plugin) already added it; otherwise run this from the workspace root: + + + +```bash tab="bun" +bun add @tanstack/react-query --cwd plugins/newsroom +``` + +```bash tab="pnpm" +pnpm --filter newsroom add @tanstack/react-query +``` + +```bash tab="npm" +npm install @tanstack/react-query --workspace newsroom +``` + + -### Define the reply +### Define the comment type -```ts title="plugins/forum/src/content/comment.ts" +Create `src/content/comment.ts`. This is the complete file: + +```ts title="plugins/newsroom/src/content/comment.ts" import { defineContentType, field } from "@vitnode/core/content"; -import { topicContentType } from "@/content/topic"; +import { articleContentType } from "@/content/article"; export const commentContentType = defineContentType({ - id: "forum.comment", - tableName: "forum_comments", + id: "newsroom.comment", + tableName: "newsroom_comments", fields: { slug: field.slug({ generated: true }), body: field.richText({ required: true }), author: field.user(), - topic: field.relation({ - target: () => topicContentType, + article: field.relation({ + target: () => articleContentType, required: true, - container: true, onDelete: "cascade", }), - parent: field.relation({ self: true, nullable: true, onDelete: "set null" }), + parent: field.relation({ + self: true, + nullable: true, + onDelete: "set null", + }), }, publication: true, visibility: true, - reports: { snapshotFields: ["body"] }, publicApi: { path: "comments", - fields: ["id", "slug", "body", "topic", "parent", "publishedAt", "createdAt"], + fields: ["id", "slug", "body", "article", "parent", "publishedAt"], people: ["author"], }, publicWrite: { ownership: { field: "author" }, - create: { fields: ["body", "topic", "parent"], status: "published" }, + create: { fields: ["body", "article", "parent"], status: "published" }, update: { fields: ["body"] }, }, - thread: { parent: "parent", root: "topic", maxDepth: 6 }, + thread: { parent: "parent", root: "article", maxDepth: 1 }, + + admin: { path: "newsroom/comments", titleField: "slug" }, }); ``` -- `parent` is the reply being answered, or `null` for a direct answer to the topic. -- `topic` is the **root**. `container: true` puts the comment in the topic's forum, so the forum's [publishing policies](/docs/content-engine/container-policies) and moderators apply to comments too. -- `slug` with `generated: true` gets a random token such as `k3v9q2m7xa`, because a comment has no title. -- A comment's place is fixed when it is written. `parent` and `topic` cannot be edited. +- **`article`** is the comment's **root**, the record it belongs to. It must be a required relation to another content type. `onDelete: "cascade"` removes the comments with their article. +- **`parent`** is the comment being answered, or `null`. `thread` requires it even for flat comments; `maxDepth: 1` keeps every comment top level until [Replies](/docs/content-engine/threads-frontend). +- **`slug`** with `generated: true` gets a random token, because a comment has no title. The public API needs exactly one slug. +- **`publicWrite`** lets members post `body` under an `article`, and `create.status: "published"` makes a new comment public at once. `update` lets authors fix their text later, in [Comment editing](/docs/content-engine/threads-editing). A comment's place is fixed when it is written, so `parent` and `article` are never in `update.fields`. +- **`visibility`** lets moderators hide a comment, and **`admin`** gives staff a list of comments in the AdminCP. -### Create the model and migrate +### Create the model and register it + +Create `src/database/comments.ts`. This is the complete file; `references` points the `article` relation at the articles table: -```ts title="plugins/forum/src/database/comments.ts" +```ts title="plugins/newsroom/src/database/comments.ts" import { createContentModel } from "@vitnode/core/content/server"; import { commentContentType } from "@/content/comment"; -import { forum_topics } from "./topics"; +import { newsroom_articles } from "./articles"; export const commentContent = createContentModel(commentContentType, { - references: { topic: () => forum_topics.id }, + references: { article: () => newsroom_articles.id }, }); -export const forum_comments = commentContent.table; +export const newsroom_comments = commentContent.table; ``` -Add `commentContent` to `buildContentPublicModule` next to the topics, then migrate: +Add `commentContent` next to `articleContent` in the public module in `src/config.api.ts`. This is an excerpt: + +```ts title="plugins/newsroom/src/config.api.ts" +import { commentContent } from "@/database/comments"; // [!code ++] + +buildContentPublicModule({ + contentTypes: [articleContent, commentContent], // [!code highlight] +}), +``` + +Then give staff the comment list. Add `commentContent` to `buildContentAdminModule` in `src/api/modules/admin/admin.module.ts`, and its link to `src/admin/nav.tsx`. These are excerpts: + +```ts title="plugins/newsroom/src/api/modules/admin/admin.module.ts" +import { commentContent } from "@/database/comments"; // [!code ++] + +buildContentAdminModule({ contentTypes: [articleContent, commentContent] }), +``` + +```tsx title="plugins/newsroom/src/admin/nav.tsx" +import { MessageSquareIcon, NewspaperIcon } from "lucide-react"; + +import { commentContentType } from "@/content/comment"; // [!code ++] + + contentTypes: [ + { definition: articleContentType, icon: }, + { definition: commentContentType, icon: }, // [!code ++] + ], +``` + + + + + +### Label and migrate + +Add the comment type's labels to `src/locales/en.json`, next to `article` under `newsroom.content`, and its permission labels at the top level: + +```json title="plugins/newsroom/src/locales/en.json" +{ + "newsroom": { + "content": { + "comment": { + "label": "{count, plural, one {Comment} other {Comments}}", + "title": "Comments", + "desc": "What readers say under the articles.", + "fields": { + "slug": "Link", + "body": "Comment", + "author": "Author", + "article": "Article", + "parent": "Answers" + } + } + } + }, + "newsroom:comment": "Comments", + "newsroom:comment:can_view": "View comments", + "newsroom:comment:can_create": "Create comments", + "newsroom:comment:can_edit": "Edit comments", + "newsroom:comment:can_delete": "Delete comments", + "newsroom:comment:can_publish": "Publish and unpublish comments", + "newsroom:comment:can_hide": "Hide and unhide comments" +} +``` + +Then migrate from the workspace root: @@ -122,151 +216,556 @@ npm run db:migrate +The migration creates `newsroom_comments` with a foreign key to `newsroom_articles`. The thread route now answers: + +```bash +curl "http://localhost:3000/api/newsroom/content/comments/thread?root=1" +``` + +```json title="200" +{ "items": [], "pageInfo": { "endCursor": null, "hasNextPage": false, "totalCount": 0 }, "replyCount": 0, "truncated": false } +``` + -### Read the thread +### Read the comments -`GET /comments/thread?root={topicId}` returns a page of top-level replies, oldest first, each followed by every public answer below it: +Create `src/pages/comment-data.ts`. This is the complete file. All loaded pages of one article's comments live in one infinite query, so refreshing it reloads every page in order: -```ts title="plugins/forum/src/pages/thread-data.ts" -const res = await fetcher({ - plugin: manifest.id, - method: "get", - module: "content/comments", - path: "/thread", - args: { query: { root: String(topicId), first: 20, ...(after ? { after } : {}) } }, +```ts title="plugins/newsroom/src/pages/comment-data.ts" +import { infiniteQueryOptions } from "@tanstack/react-query"; +import { + zodContentPublicPerson, + zodRichTextDocument, +} from "@vitnode/core/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { z } from "zod"; + +import { manifest } from "@/manifest.gen"; + +/** Top-level comments per page. The thread route accepts 1 to 50. */ +const COMMENTS_PAGE_SIZE = 20; + +/** One comment as `publicApi.fields` and `people` return it. */ +const zodComment = z.object({ + author: zodContentPublicPerson.nullable().catch(null), + body: zodRichTextDocument, + id: z.number(), + publishedAt: z.string().nullable(), +}); + +const zodCommentPage = z.object({ + items: z.array( + z.object({ + depth: z.number(), + id: z.number(), + parentId: z.number().nullable(), + record: zodComment.nullable(), + removed: z.boolean(), + }), + ), + pageInfo: z.object({ + endCursor: z.string().nullable(), + hasNextPage: z.boolean(), + totalCount: z.number(), + }), + replyCount: z.number(), + truncated: z.boolean(), }); -``` -The answer is flat, so a parent always comes before its replies: +export type CommentPage = z.infer; + +export type CommentItem = CommentPage["items"][number]; + +export type ArticleComment = NonNullable; + +const fetchCommentPage = async (articleId: number, after?: string) => { + const res = await fetcher({ + plugin: manifest.id, + method: "get", + module: "content/comments", + path: "/thread", + args: { + query: { + root: String(articleId), + first: COMMENTS_PAGE_SIZE, + ...(after ? { after } : {}), + }, + }, + }); + if (res.status !== 200) throw new Error("Loading the comments failed."); + + // The thread route types `record` loosely, so parse it once here. + return zodCommentPage.parse(await res.json()); +}; -```json -{ - "items": [ - { "depth": 1, "id": 17, "parentId": null, "removed": false, "record": { "id": 17, "body": {}, "author": {} } }, - { "depth": 2, "id": 18, "parentId": 17, "removed": true, "record": null }, - { "depth": 3, "id": 21, "parentId": 18, "removed": false, "record": { "id": 21 } } - ], - "pageInfo": { "endCursor": "WyIyMDI2...", "hasNextPage": false, "totalCount": 1 }, - "replyCount": 2, - "truncated": false -} +export const commentsQueryKey = (articleId: number) => + [manifest.id, "comments", articleId] as const; + +/** Every loaded page under one key, so a refetch reloads them all in order. */ +export const commentsQueryOptions = (articleId: number) => + infiniteQueryOptions({ + getNextPageParam: (last: CommentPage) => + last.pageInfo.hasNextPage + ? (last.pageInfo.endCursor ?? undefined) + : undefined, + initialPageParam: undefined as string | undefined, + queryFn: async ({ pageParam }) => + await fetchCommentPage(articleId, pageParam), + queryKey: commentsQueryKey(articleId), + }); ``` -Warm the first page in the topic page's loader, so comments are in the server-rendered HTML. +- `GET /comments/thread?root={articleId}` returns up to `first` top-level comments, oldest first. `endCursor` asks for the next page. +- `items` is a flat list, and each comment in it has `depth`, `parentId` and `record`. With `maxDepth: 1`, every item is top level. +- The thread route types `record` loosely, so `zodCommentPage` checks the fields `publicApi` returns once, here. `author` comes from `people` as a small public profile, or `null` for a deleted account. +- `replyCount` counts every public comment, for the "2 comments" heading. -### Draw the tree - -Turn the flat list into a tree in one pass, then render nested `
          ` lists: - -```tsx title="plugins/forum/src/pages/thread.tsx" -const buildThreadTree = (items: ThreadNode[]) => { - const nodes = new Map(); - const roots: ThreadTreeNode[] = []; - for (const item of items) { - const node = { ...item, children: [] }; - nodes.set(item.id, node); - const parent = item.parentId === null ? undefined : nodes.get(item.parentId); - if (parent) parent.children.push(node); - else roots.push(node); - } +### Write the composer + +Create `src/pages/comment-composer.tsx`. This is the complete file. It posts one comment and reports where it ended up: + +```tsx title="plugins/newsroom/src/pages/comment-composer.tsx" +import { + AutoForm, + type AutoFormOnSubmit, + AutoFormSubmitButton, +} from "@vitnode/core/components/form/auto-form"; +import { AutoFormEditor } from "@vitnode/core/components/form/fields/editor"; +import { + emptyRichTextDocument, + isRichTextEmpty, + zodRichTextDocument, +} from "@vitnode/core/content"; +import { useContentPublicWrite } from "@vitnode/core/tanstack/content"; +import { fetcher } from "@vitnode/core/tanstack/fetcher"; +import { useTranslations } from "use-intl"; +import { z } from "zod"; + +import { manifest } from "@/manifest.gen"; + +/** Where a new comment ended up. Only `published` is in the public thread. */ +export type CommentOutcome = "draft" | "pending" | "published"; + +export interface CommentComposerProps { + articleId: number; + label: string; + /** Called after the server stored the comment. */ + onPosted: (outcome: CommentOutcome) => Promise; + /** The comment being answered, or `null` for the article itself. */ + parentId: null | number; +} - return roots; +const createSchema = (required: string) => + z.object({ + body: zodRichTextDocument + .refine(doc => !isRichTextEmpty(doc), required) + .default(emptyRichTextDocument()), + }); + +const CommentComposer = ({ + articleId, + label, + onPosted, + parentId, +}: CommentComposerProps) => { + const t = useTranslations("newsroom.comments.form"); + const write = useContentPublicWrite({ fields: ["body"] }); + + const onSubmit: AutoFormOnSubmit> = async ( + { body }, + form, + ) => { + const record = await write.submit( + form, + async () => + await fetcher({ + plugin: manifest.id, + method: "post", + module: "content/comments", + path: "/", + args: { + body: { values: { article: articleId, body, parent: parentId } }, + }, + }), + ); + if (!record) return; + + // A pending comment is a draft too, so ask about approval first. + await onPosted( + record.approval?.status === "pending" + ? "pending" + : record.status === "published" + ? "published" + : "draft", + ); + }; + + return ( + ( + + ), + }, + ]} + formSchema={createSchema(t("required"))} + layout={fields => <>{fields.body}} + onSubmit={onSubmit} + > + + {t("submit")} + + + ); }; -const ThreadNodeView = ({ node }: { node: ThreadTreeNode }) => ( -
        1. - {node.record ? ( - - ) : ( -

          {t("removed")}

          - )} - {node.children.length > 0 ? ( -
            - {node.children.map(child => )} -
          - ) : null} -
        2. -); +export default CommentComposer; ``` -**Tombstones.** `removed: true` is a reply readers can't see, such as a hidden one, that still has public answers. Show a short placeholder and keep its children, so the conversation keeps its shape. A hidden reply with no answers is left out. +- **The request** posts `{ values: { article, body, parent } }`; `parent: null` answers the article itself. The server fills `author` from the session. +- **`write.submit`** returns the stored comment, or `null` after showing why the server said no, such as an expired session. +- **The outcome** reads both `approval` and `status`. A comment waiting for a moderator is also a draft, so `approval` is checked first. +- The file has a default export because the section loads it with `lazy`. The editor is heavy, and most readers never write. -### Load more pages +### Render the section + +Create `src/pages/comment-section.tsx`. This is the complete file: + +```tsx title="plugins/newsroom/src/pages/comment-section.tsx" +import { useInfiniteQuery, useQueryClient } from "@tanstack/react-query"; +import { RichTextContent } from "@vitnode/core/components/rich-text"; +import { Button, buttonVariants } from "@vitnode/core/components/ui/button"; +import { Skeleton } from "@vitnode/core/components/ui/skeleton"; +import { useSessionQuery } from "@vitnode/core/tanstack/auth"; +import { HrefLink } from "@vitnode/core/tanstack/link"; +import { lazy, Suspense, useMemo, useState } from "react"; +import { toast } from "sonner"; +import { useTranslations } from "use-intl"; + +import type { CommentComposerProps, CommentOutcome } from "./comment-composer"; +import type { ArticleComment } from "./comment-data"; + +import { commentsQueryKey, commentsQueryOptions } from "./comment-data"; -Keep the pages you loaded and pass the last `endCursor` as `after`: +// The editor is heavy and most readers never write, so it loads on demand. +const CommentComposer = lazy(async () => await import("./comment-composer")); -```tsx title="plugins/forum/src/pages/thread.tsx" -{last.pageInfo.hasNextPage ? ( - -) : null} -{last.truncated ?

          {t("truncated")}

          : null} +const Composer = (props: CommentComposerProps) => ( + }> + + +); + +/** Who wrote a comment, and what they said. */ +const CommentBody = ({ comment }: { comment: ArticleComment }) => { + const t = useTranslations("newsroom.comments"); + + return ( +
          +

          + {comment.author?.name ?? t("someone")} +

          + +
          + ); +}; + +export const CommentSection = ({ + articleId, + articleSlug, +}: { + articleId: number; + articleSlug: string; +}) => { + const t = useTranslations("newsroom.comments"); + const queryClient = useQueryClient(); + const session = useSessionQuery(); + const [composerKey, setComposerKey] = useState(0); + const comments = useInfiniteQuery(commentsQueryOptions(articleId)); + + const pages = comments.data?.pages; + const items = useMemo( + () => pages?.flatMap(page => page.items) ?? [], + [pages], + ); + + const onPosted = async (outcome: CommentOutcome) => { + if (outcome !== "published") { + // Not in the public thread, so there is nothing to refresh. + toast.info(t(`${outcome}.title`), { description: t(`${outcome}.desc`) }); + + return; + } + + toast.success(t("created.title"), { description: t("created.desc") }); + // Refetches every loaded page in order, with the new count. + await queryClient.invalidateQueries({ + queryKey: commentsQueryKey(articleId), + }); + }; + + return ( +
          +

          + {t("title", { count: pages?.[0]?.replyCount ?? 0 })} +

          + + {comments.isPending ? ( +
          + + {t("loading")} + + {[0, 1].map(key => ( +
          + + +
          + ))} +
          + ) : comments.isError && items.length === 0 ? ( +
          +

          + {t("load_failed.desc")} +

          + +
          + ) : items.length === 0 ? ( +

          {t("empty")}

          + ) : ( +
            + {items.map(item => + item.record ? ( +
          1. + +
          2. + ) : null, + )} +
          + )} + + {comments.hasNextPage ? ( + + ) : null} + + {session.data?.user ? ( + { + setComposerKey(key => key + 1); + await onPosted(outcome); + }} + parentId={null} + /> + ) : ( + + {t("sign_in")} + + )} +
          + ); +}; ``` -One answer holds at most 500 replies. `truncated: true` means some deep answers did not fit; say so instead of pretending the thread ends there. `replyCount` counts every public reply, the number for a "5 comments" heading. +- **`useInfiniteQuery`** reads the pages the article's loader warms in the next step, so the comments are in the server-rendered HTML. When that warm-up failed, it loads them in the browser. +- **One state at a time.** `isPending` shows a skeleton with one screen reader label, an error with no comments shows **Try again**, an empty thread says so, and anything else is the list. A failed refetch keeps the comments already on screen. +- **`onPosted`** refreshes the thread only for a published comment. TanStack Query refetches every loaded page from the first, so the new comment and the heading's count update together. Drafts and pending comments only get their message; see [What a new comment can become](#what-a-new-comment-can-become). +- **Load more comments** calls `fetchNextPage` with the last cursor. It is disabled during any fetch, so a double click never loads a page twice. +- **Guests** see a sign-in link that brings them back to the article.
          -### Reply, edit and report +### Show it below the article -Ask what the visitor may do with every reply on screen, in one request: +Edit `src/pages/article-page.tsx`. The loader warms the first page of comments, which needs the query client from `defineRoute`. This is an excerpt: -```tsx title="plugins/forum/src/pages/thread.tsx" -const permissions = useCommentPermissions( - items.flatMap(item => (item.record ? [item.id] : [])), -); +```tsx title="plugins/newsroom/src/pages/article-page.tsx" +import type { PluginRoutePageProps } from "@vitnode/core/routing"; +import { defineRoute } from "@vitnode/core/tanstack/plugin-routes"; + +import { commentsQueryOptions } from "./comment-data"; // [!code ++] +import { CommentSection } from "./comment-section"; // [!code ++] -const { canEdit, canReport } = permissions.of(comment.id); +export const route = defineRoute({ + load: async ({ context, params }) => { + const page = await loadArticle(params.slug); + // [!code ++:5] + // The first page of comments arrives with the article's HTML. A failure + // leaves the section to show its own error instead of breaking the page. + await context.queryClient + .infiniteQuery(commentsQueryOptions(page.item.id)) + .catch(() => null); + + return page; + }, + + head: ({ loaderData }) => + contentDeliveryPageHead(loaderData?.metadata, { + title: loaderData?.item.title, + }), +}); ``` -`useCommentPermissions` wraps `useContentPermissions` with the `content/comments` route, like [`useDiscussionPermissions`](/docs/content-engine/reports#ask-who-may-report-what). Then: +- If the route still uses `definePluginRoute` from [Content page](/docs/content-engine/public-pages), switch to `defineRoute` as shown; `definePluginRoute` has no query client. +- If [Embedded list](/docs/content-engine/public-lists-embed) already warms **Latest articles** here, run both with `Promise.all`, so neither waits for the other. -- **Reply** posts `{ values: { body, parent: comment.id, topic: topicId } }` with `useContentPublicWrite`, like the [create form](/docs/content-engine/public-write-frontend). Show it to signed-in members while the reply sits above `maxDepth`. -- **Edit** appears when `canEdit`. It loads `GET /comments/{id}/edit` and saves with `PATCH`, like the [edit form](/docs/content-engine/public-write-edit). -- **Report** appears when `canReport`, with `contentTarget(manifest.id, commentContentType, comment.id)`. See [Report content](/docs/content-engine/reports). +Render the section at the end of `
          `, after the body: -When the forum's policy holds new comments for a moderator, the post answers `approval.status: "pending"`. Tell the author it is waiting; the comment appears in the thread after approval. +```tsx title="plugins/newsroom/src/pages/article-page.tsx" + + + {/* [!code ++] */} +
          +``` + +Then load the comment labels on the article's route in `src/routes.ts`: + +```ts title="plugins/newsroom/src/routes.ts" + page("/news/:slug", { + component: lazy(() => import("./pages/article-page")), + messages: ["newsroom.articles", "newsroom.comments"], // [!code highlight] + }), +```
          - + -## What the server checks +### Add the labels -Every reply is placed on the server, in the AdminCP too. A broken rule answers `400` with an issue on the field: +Add a `comments` group under `newsroom` in `src/locales/en.json`: -| Rule | Message | -| ---------------------------------------------------- | --------------------------------------------------------------- | -| The parent exists and is public | `The reply you are answering does not exist.` | -| The parent is under the same topic | `The reply you are answering belongs to another conversation.` | -| A reply never answers itself or one of its answers | `A reply cannot answer itself or one of its answers.` | -| Nothing sits deeper than `maxDepth` | `Replies nest at most 6 levels deep. Answer a reply higher up.` | +```json title="plugins/newsroom/src/locales/en.json" +{ + "newsroom": { + "comments": { + "title": "{count, plural, =0 {Comments} one {# comment} other {# comments}}", + "empty": "No comments yet. Be the first.", + "loading": "Loading comments", + "retry": "Try again", + "load_more": "Load more comments", + "load_failed": { "title": "Could not load comments", "desc": "Check your connection and try again." }, + "sign_in": "Sign in to comment", + "form": { "label": "Your comment", "submit": "Post comment", "required": "Write a comment first." }, + "created": { "title": "Comment posted", "desc": "Your comment is below the article." }, + "draft": { + "title": "Comment saved as a draft", + "desc": "It is not public yet, so it does not appear below the article." + }, + "pending": { + "title": "Your comment is waiting for a moderator", + "desc": "A moderator reviews it before readers can see it." + }, + "someone": "Deleted user" + } + } +} +``` -A missing, draft or hidden topic makes `GET /thread` answer `404`. Every option is in the [`thread` reference](/docs/content-engine/reference#thread). +The error toasts of `useContentPublicWrite` come from core and need no labels. -## Use it in another plugin + -The forum's `thread-data.ts`, `thread.tsx` and `comment-composer.tsx` are a reference to copy, not an export. Change the module to `content/` plus your reply type's path, `topic` to your `thread.root` field, and the depth limit to your `maxDepth`. The tree, tombstones, paging and buttons need nothing else. + ## Check the result -Open a topic with replies, such as `/forum/topics/show-us-your-first-content-engine-type`. Replies nest under the one they answer, a hidden reply leaves **This comment was removed.** with its answer still below it, your own replies show **Edit**, and the others show **Report**. +Open `/news/welcome-to-the-newsroom`, the article staff created in [First content type](/docs/content-engine/create-a-content-type) and published in [Drafts & publishing](/docs/content-engine/publication): + +1. Signed out, the section shows **No comments yet** and **Sign in to comment**. +2. Sign in as a member, write a comment and click **Post comment**. **Comment posted** appears, the comment shows with your name, the heading reads **1 comment**, and the editor is empty again. +3. Sign in as another member and comment too. The heading reads **2 comments**. + +To try a draft, set `create.status` to `"draft"` in `src/content/comment.ts` and post again. **Comment saved as a draft** appears, and the list and the count stay as they were, because a draft is not public. Set it back to `"published"` afterwards. + +## What a new comment can become + +`POST /comments` answers `201` with the stored comment. Its `status` and `approval` say whether readers can see it: + +| `status` | `approval` | When | What the section does | +| --- | --- | --- | --- | +| `"published"` | `null` | `create.status: "published"`, as here | **Comment posted**, and the thread refreshes | +| `"draft"` | `null` | `create.status: "draft"` | **Comment saved as a draft**; staff publish it in the AdminCP | +| `"draft"` | `{ status: "pending" }` | The article is filed in a container that holds new comments for approval | **Your comment is waiting for a moderator** | + +A newsroom comment can never be pending, because articles are not filed in a container. Pending comments need two more settings: mark the root relation `container: true`, and give its target a `field.container()` whose definition has `policies`. The Forum plugin's comments are set up this way: + +```ts title="plugins/forum/src/content/comment.ts (excerpt)" +topic: field.relation({ + target: () => topicContentType, + required: true, + container: true, // the comment follows its topic's forum and its rules + onDelete: "cascade", +}), +``` + +A moderator then sets **New posts** to **Wait for approval** for comments in a forum's [publishing rules](/docs/content-engine/container-policies). [Approvals](/docs/content-engine/approvals#drafts-and-approval) explains the difference between a draft and a pending submission. + +## What the server checks + +- **Signed out.** `POST /comments` answers `401`; the section never offers the composer to guests. +- **Placement.** The article must be public, the parent must belong to the same article, and nothing may nest deeper than `maxDepth`. A broken rule answers `400` with an issue on `parent`, which the composer shows as a toast. +- **Hidden articles.** A comment is only as public as its article. Once the article is unpublished or hidden, its comments drop out of the thread and their own routes answer `404`. + +Next, [Comment editing](/docs/content-engine/threads-editing) lets authors fix their comments. diff --git a/apps/web/content/docs/dev/advanced/auth.mdx b/apps/web/content/docs/dev/advanced/auth.mdx index 1029ceddc4..8edffcda39 100644 --- a/apps/web/content/docs/dev/advanced/auth.mdx +++ b/apps/web/content/docs/dev/advanced/auth.mdx @@ -1,12 +1,12 @@ --- -title: Authorization & Sessions +title: Auth and sessions description: How VitNode manages public and admin sessions, HttpOnly cookies, device fingerprinting, and session expiration. icon: Cookie --- import { TypeTable } from "fumadocs-ui/components/type-table" -VitNode implements two isolated sessions: a **public session** for the community site and a separate **admin session** for the AdminCP. Both use opaque random tokens stored as SHA-256 hashes in PostgreSQL. +VitNode keeps two separate sessions: a **public session** for the community site and an **admin session** for the AdminCP. Both use random tokens kept in `HttpOnly` cookies and stored only as SHA-256 hashes in PostgreSQL. Read this page to change how long sessions last, share them across subdomains, or switch password sign-in off. ## Quick start @@ -27,21 +27,21 @@ export const vitNodeApiConfig = buildApiConfig({ --- -## The Two-Session Model +## The two-session model -| Session Type | Cookie Name | Default Lifetime | Storage Table | Purpose | +| Session | Cookie name | Default lifetime | Table | Purpose | | :--- | :--- | :--- | :--- | :--- | -| **Public Session** | `vitnode_auth` | 90 days | `core_sessions` | Frontend member authentication | -| **Admin Session** | `vitnode_auth_admin` | 1 hour of inactivity | `core_admin_sessions` | High-privilege AdminCP access | -| **Known Device** | `vitnode_device` | 1 year | `core_sessions_known_devices` | Device authorization tracking | +| **Public session** | `vitnode_auth` | 90 days | `core_sessions` | Frontend member authentication | +| **Admin session** | `vitnode_auth_admin` | 1 hour of inactivity | `core_admin_sessions` | High-privilege AdminCP access | +| **Known device** | `vitnode_device` | 1 year | `core_sessions_known_devices` | Device authorization tracking | - + Signing out of the AdminCP does not terminate the user's public session, and vice versa. An administrator compromised in a public context cannot access the AdminCP without re-authenticating with staff credentials - a password or a user-verified passkey, checked against live staff access. Neither a public session nor social SSO ever becomes an AdminCP session. --- -## AdminCP Session Timeout +## AdminCP session timeout The AdminCP is the keys to the kingdom, so its session is deliberately short-lived. Staff are asked to sign in again when: @@ -55,17 +55,17 @@ The AdminCP is the keys to the kingdom, so its session is deliberately short-liv --- -## Security Guarantees +## Security guarantees -- **SHA-256 Token Storage**: The raw token is stored only in the user's `HttpOnly` cookie. The database stores only its cryptographic hash. Sign-in, SSO and passkey answers carry the user id only - page scripts never see the token. -- **Device Pinning**: Tokens are bound to a verified device ID. Tokens copied to another device without the matching device cookie are rejected. -- **Fast 60-Second Caching**: Active sessions are cached in Redis for up to 60 seconds, eliminating database query overhead on repeated requests. -- **Confirmed Email Addresses**: With an email adapter, members confirm their address before their first sign-in. See [Email Verification](/docs/dev/working-with-users/email-verification). -- **Canonical Email Identity**: Addresses are stored in their canonical form, so Gmail dot, `googlemail.com` and `+tag` variants cannot become a second account. See [One Mailbox, One Account](#one-mailbox-one-account). +- **Hashed tokens.** The raw token is stored only in the user's `HttpOnly` cookie. The database stores only its cryptographic hash. Sign-in, SSO and passkey answers carry the user id only, so page scripts never see the token. +- **Device pinning.** Tokens are bound to a verified device ID. Tokens copied to another device without the matching device cookie are rejected. +- **Short session cache.** An active session is cached for up to 60 seconds with [Redis](/docs/dev/advanced/redis), or up to 15 seconds in the API process without it, so repeated requests skip the database. The in-process cache is per instance, so run Redis when you run more than one API instance. +- **Confirmed email addresses.** With an email adapter, members confirm their address before their first sign-in. See [Email verification](/docs/dev/working-with-users/email-verification). +- **One account per mailbox.** Addresses are stored in their canonical form, so Gmail dot, `googlemail.com` and `+tag` variants cannot become a second account. See [One mailbox, one account](#one-mailbox-one-account). --- -## One Mailbox, One Account +## One mailbox, one account `jankowalski@gmail.com` and `jan.kowalski@gmail.com` look like two addresses. Gmail ignores the dots, so they are one mailbox - and a site that treats them as two lets the same person hold two accounts, dodge a ban, or farm their own referral link. @@ -105,7 +105,7 @@ The rules are per-provider, because they are only true per-provider: ``` -## `authorization` Options Reference +## `authorization` options -Password hashes already in the database are left alone, so switching `enabled` back to `true` restores password sign-in for everyone who had one. +Password hashes already in the database are left alone, so setting `password` back to `true` restores password sign-in for everyone who had one. -## Learn More +## Related diff --git a/apps/web/content/docs/dev/advanced/queue-debug-panel.webp b/apps/web/content/docs/dev/advanced/queue-debug-panel.webp new file mode 100644 index 0000000000000000000000000000000000000000..f795d5d965f0fc0f5273972d08149bfc2a2adea0 GIT binary patch literal 72086 zcmce-W0YlG(lwg4ZQHhO+jga0Y1_7K+jdq~+N#RTO55kFr@P-C{eIoI`{^<6z5CCJ zu}7@ESFE#E#GEtEQIVFAh{Fa3(i9g_(oo_e3i@p$WrF1b)678lfeA2UMTwCR7a~<2 zxe|ebwY2*YU%ta8-_|GsyrE~`H($Y=>jMOCmRBX}PCglv<_Z13J-h&5KQJE%-Tia> zkKO|O^8MN#c0Z;cz~4RIG(Q#ZKko>C`p*O6o_t?>0hABfN1(6qFAUA~8vrARbwSzw z&HfO?O~oyTK*Kdb0H6y1LUaKeG1`4-8fP@;}1g z!=D|_0q_0`@AMzCZw;$#2!%vKtf}4W&{bPPtzCoY#@20QukA}B~yMi5n zM*!_5<$L-omnfdu^s?;cRbl60}Dt% z0TGgd1}6GbCM@7+SiPFVes;Z^)8c$PyV?EEnDy=#5k+Wv=pVVd3bPTrLJg^VD29zKi8Hr6cUdCO-kYA@1YL?K8)NFq?eP{jYy1btlP!?KVGqFuHn*oNgB(idc^ z@$xi3I~0G|QsHJx>U{&VyFZ({pLUk=do1+8QvSPTnB zz>kclrBKr}j1Lw?5hoA&7X!kk@9QO`rJ)Wrzv!BLEG#*Q%n~QO({DJ&b{{ILsJ;gn zq8;5Bo+ZKEJ>TzV6S(s}e1UY{7FOj8t zVKK~*8~;gRyrwy=1Pv+l z95{JAZtzO5Ln{FIh4uS`0z=97lf|#u>QcsuNNT9I*w#Ox3IYd{#;>}C%z$2i)0}@Y zhC@`pb%WHFKz}!6^jVFt9vF2%=HJpgInc-;U*Xt)RBB?!T!>O|_}MjdWeR5;!yNX%P2JUn(&}$Q z1mq(f=_m&}c#A7uct)%)`)wSQN`@fY-h_R$j>^PCk*prVzu88m5+I4!kKsP9qSNpZMH|L&mgEAOd9Cfb zsKX++6YL8RQ4aKEBb^xj8t;EHA%P!UGPWMvoVnvB|LmCM(%~1LDWf7|b@m@ar;#K^ zZPsg8Jkb{A$g@?rVEHs)#b-$-a?+8^6l5bA$teHU9FT=(&(@NCpj<6qk4Vg`HxOu+ z?|uutzsgZCAn!Z)vpIwuThkf10K5}K93)4V^?;r<6t&IHe{!SallZaqE}k4@C;ZL} z>F6ji9@+rME)LYg*A7DbER1g{BG;O#dG(S!Z8sDC&nCjA)2UB?=Mo=If?;p}*5M_E z0xTs5&}%yI8#xw(x-?Su;!k=L>92Az9i+;j|MzzM=lv79rs&BfRNQxj$VbMX;TKe< z-shPT&aq6vZP{&CtnT^|bW6%Z9LtAX5t#AMqyMkn{)dALspdhh-PUdYls5ra1uNKc zUQ%{qq6PM^etON4vLiF?Fz>5r^;7CjYz*VP?%QQ=8G8xw49mLrR)as`7;T{sd@jO{ z#QHB!+yBD^IiDpJ^`&ni_Emq<<&_#}Y>AaHOiqy1ep>V#?O!`X&Ia)P-m`S?t00|{ zzaH$ASeGc+Q{qL3RuFH9zg3r$3$vCFvK{RT>ZD>kCCpXH`>M-4ue%!}j9tqWEq5Nl z<%FXvEs+h#;2Bj4<+bS>sN18RzY30;k7fh$V5pNjL zyVh-o{6fvQE4oI&sTLu{m&=FdF9?{gQ%h+fOmKlOLc;(Xl66;GAi`lLTkNs^q&TNs z?c$$4`jAWHs*gSGF6b`^sG$eS`(Srsvw`E-W#t977T7EDgjAk1VPpdjZgw3w-;HvP z$vMN@vDE1eQZgUk^grR@u*REzTDK|)Lf5mEUb5$3OEQvPg9PO_KWv5R zWB2F@SgDSSnmeyVR?LAJh14uEkd}SHvf7tt@^1ApVn5lnR4NIlk!IGIRA|}K7)Ki5 zJ(iXqL|jGa1uQTV3)}~t zzurUMo}Ir1)-N|!$pE2^yD1|tG_q2F+b=$fBSy|nzqL^IsOZd&y> zRc98uVSbO}s{53!m}sVX{TG{Fa!yi`8P?T5=QvtD+4nUD_`k{G2YMQYxJtb{w^4!n z`m?->^zdZ@g4p3+8&KS5*pf1_M&Z@bJaJ*hYBpx(gE$e`|5POZ>DaQKtI?yTT?ewi zqh113fZclnXqp!vI9XL!%h$TnnbcwO)z(9|6T@6Ybv{kh1b&e#n^d>vJOsWZlZNM) zhc+hjfW$U~E6H0qG#*i#YzJ7qW{*=cY?{c1Vz~dV&t084G-tOhnA#QEEI=PfBfwo| z1K#43K{4`0)`!|KLpdX?CX#06S;CftfpCa3gpQ01+7(2fB^hZ!LJ~ys_e~7undl?5 zyYlIEgk--qLEgYAOlnTDJAf~QPwJr@Nvix_Kx%~xO!jlHC7{=6|DLXXhsAKc)AoA> z*k+_7nQq?g)A;Irmk}_-(da68mpI=yb$* z(8!Q9tG%skrf?_YiN7}EULKr)VhdD8J-BY(ZoD}l*KNJ1nKv-^AwYkbWJt==NQP0w zPw6g6qNkh(u^VlCkxhg8sN>2q&N;T}Yc>`9QYktxH38DyBqtTV>Px!I(+H+!GBG{m zr!zii%2#~)5z|DfC`B+UeSn{7SR;Ds0KRON`qpV{z1jNwZB#^k4S*S09e_?W)s-LL z=zBSFem{Jg=NM0wQM!S>EhLV|b&r}!G}vMLy=Yat?FzFuHaYLZ%9?7OVfTKfseXWW zhz;_GkGZo^s0H405LKQL-PchP!8*2@5he^VnM(I^LKuSZ3bv{Hai@54@?lo^{c8)| zg6gMz2+OqWozpT2J#>r9BXnoaQxTQsTdL*yybib~*t8~~toGc!$lGuh&{!XkMSQ`e z#@t(^bp~JEC%GUXNuodS2??g886p*^HK>(KaKjCjv?U6%06kYi_dq6+Wc zo&@Pb4Hv}c#%aR)B#7OKe^L1`x2~f^-|)dgOnsx1qQSi5SLgsxry;z!tnomwdk=UPmc3XpxcNqb_i>k;hWc_p# zJLmgvq1{Ctjhd%0Mn9Irrk+~Gbr8KD({5WwArGdS7S}jk$e?nM3r}-JPStV7tk$KsL3~U5A)& z{z@u}E+k2G%8Vz3yx(*=AetRNW~Ct!M}|4H@|+zsO@GXwZUwpI%&kDq%|RR-;yc(wI+R+k43qdJ>QLA1M0J(7Z^z zA~JD0{PxG~U^$Pd_s&k>3mft4NwQj?LmkWlBh3J93Nmgqw*cqf&L4XO8&AtL_`?uT z7{&@EB}mRvV$(?6_uLFg*#QOT|C5wwwWo)f!I8OP%4(D{`q5Hf6aTLU0!7HbO6=6?H-2)rLviM)PEJNo-XM6iiiy zVQ%Ef0tO&e?XQviY6lR*yIV`t8Gx3lAf9~-TuAA4%yW3_=~}{Tu*oZWE}srERfv!+ z2BKt$%3uB;^g+4YQv`%WS+F#Qo1d%1ry1>WE7ERk2VQ0ZPg^(B?FC@C`qCr5hvJ!f zf|2_&rJkX?zL~dv3Y?gq+dq6U#{*Bmvim4;2mHR+_P5Bmhv@F4s_k^W(O#8XFSeXW z-Fn-8xSX+NaY2;#H6iigOY$6tcfifS7IsHg24bnzeNn*&_+yxg=)`#3cDr_oLf)dM zLuzzV_rb=isvKwXlv3-RoZdH}YKXuhQbVE~T?4axA$iyF|22sRkG$zz1`guee*#x~ zVD_6V#JLJp^9c3yvS;r5cX%^{N*>hIECIRL%6Kt#xNJvu+tHtyWbPBcptJs}I~>tS zHfi-`6RoaP_l3!K1Dl^(U4n3e$}4Rr!bI3G)Blv9r=LCGpeg!lgxgZ#x@7KJmBVj4 zA@Ri|Y*U{z>2T#(&tpGHZ+$M#)>rP)&My2^NstQ2C*e!%Rlr$vrlwflvud}^q2td3 zGIAS*(ytv6gvB{3u}}o*Z|9|7Vi!q-qNM`nzBh6qu+~#vwgPZSjn8T3N2uQlz+uqr z=}b#)Ob~KK!ZJF+4>c#wfJL=`p}CVngm20qN3c5Y*Q3{-0wNe`nSO zY;Vt{RN)POjxPLpUSaIe@Sr47^w)Lx7qsT@6Zi*~pBjPvM|ul*b|?8$Tbekj4KtEe%0>t8iOL|OXMAr~ZL!aM!B zc06e+f{0e+hJ0~~U8w0GrBpRw)opc7HHBKi_B)KwG(SyT6{MiXbH@AhfR$r7mYK2q zDgnAR(7%Wkda~)w3RgOz#T`2L1_{h~8hyglur-zDXg_grUERWoB}boOc_?raHdDwry?s4)^T(`If-YSLzxfObz>I2@XTx_ z_U1UE4G$5#Bi!N|Q4F}|cbZ1S?$RLfd^GhWMn?up1_0|^H*fOY{u~66DIy%v?X0!t zx5l_2S6*a4!8_R#7D6DOHiDVe?*I5MJt<3y8yraM$_2fL-Ur+TR_R z6w+RO6K*zt*nz6s;g71T(;~#bYMom`f;cD z_-8y2sbN|V_Xq_eFJ_EVbf|ef-}>#THsmFIbR=w^j%$omK9FmiZEY&PGn)(rEtuwf zDSX7FtW=k+aWVMgZZKVdLcrERJEKvLTRSij=}kqDd46@j2mYWW0L1J`nWwD9w`1&$ ziMULc)dP&kA5UhSfDj-ca6k-M!%*S^ZlVh1VC*WuuVr00+cO{%losRzZ?%SClOl*y z+~KExdc$zNOHV(o5S@>0c_;2sw_z_z#J{lPa#j9$wcS) zdGAMp?sC!2?KK2&%ljfWO(MW)O4(PjZ(2FV5*Im%fg#?u(w1@p2icxh+=g}fDj>M;jaA}9{tK6I!tM`H z5*)|yDY+FDs^3e>Msv}}!&#!Wsdn&JRpsxg{~sV+R&%;H_{y$}A05W=CE0cD2AmBp zCC_X5CTV^Z4L;sae6dN_K>|l|HaKe;owaC4D zFcMt~z^eO60@>oTZ-4rzgN6e#@OLYxyQ@5vHNIbi<9o|t$7|!leiTvEDBQPjB$*=! z8dAKui@EV)ge?ULdt9lsSnH&&LxC-U^S!oP)=G8+CSz|ZjODXS%oD3nA;4F$U#I&M zr1?#IGz1HbzmuwXeVek!3p2>WjR<^g-0`kj5hWjQShy+2t4G#d1N<YES@P5=c z@LDaEEgK?-Fx-c4Y90NIcFBp|{4& z^cVrrbKfMAl(19md?xo)M#n4EQcAk>td>Oy*d7-TvO%BVH*3Zch*1P}5JZv&4`pH5 zKrjURg9YUFgb`Ma7Cvw)?ft^xqyS-+*SM+|rKiluuxnh3_Fp=49Gbmo3nLjCUO>xh zezRz{JNs$1Y4lT!D7eh-+zkAY9+=(F7SyVM-kR-W5o?1j;~S1hyF#R# zK@qJDSoNUosbKE6>&Syx_X=Z+0Crj@CgnWM|x+W-q-g}KVs;HaOX3MB0-~7p|7%J9A9x!Dp`MFLK(@rc*YN*gz`r1RH=o5m3%`Zr z(S3Pm!AeT8|0JsaO?8jMs?f1T#pDula>lL1F#A=*Ld?gWP5!CFZWXFO)WB3Y9mBed z{{~))*Z#3>M<#**Rrs09<(VoACZP;Vysd6LcOnr~<@k{m;3+a~UUMLb8|MBX%^32R zrU|;A-Gu8Og0TliWy!zkIR@h9bT9BElp!Vkc-e$;O~qmUVVi8Z%XboZsBMycRP9138tN3*YYoJLX9guxE%O|%U z>_O^B%&Xn|R(CzBjEqEF=UFn8@xo}8VURf$9FFGU+IsT71KTs7X<&2!VeA>}PT|3Q zmiW0x!rdsnIR&>M0d}H7=>o!nfTQy5(tMTWgmC>+%4YF(LULY*a&iJjj+P?iX5T}t zK=$EV7DN_V95%YSfq*d_bpRG{!|SG6I#gpM8m>Ux z-+f#6bL;rGm%O6V=ufBIkw>y%aJD?CGky5YhK_Y}q3K(qbgtXz_qK|Jr!6rgS2Gu{ z<%ry-t$0~flA}h${+Fxx!BwzyfrHTc@#)4Rq=+X&hrq9(8da6oYxipPc8-XZ1;&D^ z!H|}b=s`cN5&JZ3B4W%k8v>}lf@&(nRKnC59{7mwKiKk5U3H zg|WVy%@w`W!2ZzHqWaF&!f1!I@a?CVnEY+>_BbsgAz@%CA1if!SSgNkcK>DSh1!b*HdfesD8bSAXFE;Ceh4PLVMX9= z`VADNts;-D?jJXI8{QR$PF8QdAB}Gr41ByQTuVIJJ{-dW9EK1I8C50GjH9Gl2dCgf zpxi9*WWtK*=g`o;=Ks`wU2oamU;p@G)?w|4V%)~CNAv9@ULi1yd79~Wdz#_T)hWI2HAf4Q zR;h^Lw={X=t?m(BpNrv{X7jg7C?3iQ?NQNtrmP%w#l#Nim;+-LU-TtJc4!y_V`etG zVnTb=3_-CoTivi>JuCVkSXph(STJssec&uCmcN_P9~3=f&CFI;Oz4h^Uo&TBYySWA zINa1j*5hHCuKN7>{=y#vAc`p~L^SMwufT^M3{sZaAx}qAZoWW=rtCtA5xI%VH-+h`jnomrZB9>I} zmA}Zx~~cJ`h(5pY)$PE@us1 z5h2vq=#*t*cLazB!e;kK?{LBr&l(!lEAJ^x9J-yFLY5Rh-Qsb#AdS#;*szzi?0t@wjUfFb&Lv{c_%-v_--_3=~|SOGy#vDdb3!wK8u$2JGN=3|f%R zjnB5bIT*76^SORsd-LOtuC{Y1L3GYXK3KXZcz6u_jf!a~?$vKA9)zvgfZIy1xh_RF zz6t<$E)St>ljU*-{Qk;;MRgo%s}({KrAdOj!{_=6URR{egR~>D!ECGj^3s?y0OC}B zCn<9~W!<1;ZoFS@2o^|YYX{-ezi0W|VcD-fEZN&1#dj^Ud`TeL3QS#xu}k;-;B?LO zW4_N=H6(-j$gH2yN^ckc67d2d#|m%Z+-T|B>3AND$SpTh=oUWktcs(^OnTpaAlim( zS!kx76?)aTsO}Spq8?qA3oRcpSk|5o6=@ySqXe!F4&+(;M5{Blfx~-o8o*r}^zlhy zFqpDl%^pu=U3Zu9^NSkN$oZs$5LD4ThF(q1JQz)h)Ox9@TXe-}SEIe+7#wK^=NOD| zXl2p?$q3T3`!x|g+qW3xnjSu{LmQa0w#Y^0Z}WRYsZL6=xETCS4*Zp>@C4u&g z#IXN5#~nm_UE%W1YMq3QXqiSFxKS>)?6yqFa!5PMi8w79cFl01y(f++OmguvyOZ>t(4+ya4jyD1JCZ+=#b2+I7yFfYK>`QipYJHB(j@UyHYY3=)eaSXj<1L7+l6&hD|>s+un^}$oo<^ z>>?uvg;EV9Q6Ob=N*M)%6em+ow2~Hu#2&ribDEibHaM4OvUzNi+ zTtGd_1XjdYa{ywlK;d~DWmgMTCbd<0$d{g#L{LH3c&ZC37S&{D?Aj zI$fyu2#Kn{qJ5Mhv$1!M&)kh5$HxWfr`f$b=s?xht=EG(y)`A;Aimbl#ne$`Lr|lz za%#5mc569l(T~*460=a3}5G(lKoQbR&l+|rDtbx&8X7} z3c6ay6Qt&Er(d1j_^V6wtU!7zB%>EYc|idy&I{Vl?o^f?=3n6=(JgY*Z6zFd26cbM zks05dv&9L@_5yEQfnb3%DEDZu$j@xaM2-(=&bZ#ChfnB%m>q@%M`J~BwwhG*#7I2H z|2jzPR>do!!%^cmztY;(70dN}+olc5`VH=w5f_LOIURbswT z7wWz*JLQq=o6-$)zMEb1b6*KDzpm62YNTbl|uN>}jmgazpODs&bo#5RBIG|l?Ma+~v z%F8i1l-iZ2+(+Q|C|J{D|HezQ@1ZsY%=-kdKibZ~m_~VpI`5rsadtco#E=FF2`j== zUx^I4y}fVBo@IMK7q^B_K zkR)Y)0pjkZr)FHGg)_}xYaoD2t-yehNcdRSXF~U@t*~|ip_NqUVO%eZBL_)%(;#++|)YqPgdc*HH^rhq9oXC zn2$Sqw;&(A@L!_A1V8>Ibe`eUZz$*qk7PIxx|8j=lPO|X&18c5UQCQSEW3|?UvaT0 zk%mG{Mi;=NO$aOV$~c@>WG&En$($8Zihs}C-_J2VB~ylWWS<=IbIVrvT4dY{c4(M1 zDWhM~34ejYBbyUr1Y0r4pTB?fu~KH=9qk3paM;;(Lt;k@YfGCr0pcp-P5Ze$)S)w? z>|FqA3Ik7q;d`V|uN;9;08dS=hM};22vg63DiGAlP%MfHfzcpK;}XH8{e%-H*_{RYD*Wb#BNwBJO&MZ(CSrY?hDgydjWl}N zz@S?dMrliMh<=tx3ZyVXdb&z=~@{Z`yfY$|A?W~jYjYamD>x4w$47qR0r#e4jjP&wSw5;`Z z2$*=o@>rvnx&{?!)Mc%a-u4?J%~L1u<<|kPerh&0b7OoKKM1QQ(7fbCDmV%BhW(Bb zDj7wb6}+`-Qh?tp!(3j|zIJbR#Db0s5v*EZwT1n+^j_?|?>EaIEIf7&YSxeqS}6g& zRGfY8`xy6^Oift;`NN~B95B?6wmG1pbl69hv~b@q_6Ga(i`Xm z!DD62z2`33bkFry6&^KUN>pNFmrPJG)#zd4JM(IqU4`J-_B0PYVehk_z6KYSk>LD* z;rL3oh5=xsdUpZ@AH;*^R2*B3GTRVW6M=IY3s|f_7(;dlpwltaODl&K>}!e{y z%x8n4xlv`aw*(t$Zsx1qQGdx)w?`bbh09`n1V^$q+pkz(=LxUq)dJa(%f#L;X!}MC zqa0X3V8d7UH4sob$#|Tvg^MZ^T3SD;!6l_s6uoZjztPehhvxCp!Y{v~{o1Pl{aQtk zn$acm3y-?=p`s|FDR9p!Pk?}o7G{<%FX`+37qf4unia6N)Zd<+yd5gtEjR|ZONneX z2SDu#qR5}<&bSx95Khi+eKbZ=LwHf^k@#LdN2_gqL}!|{wTWNz-BybTnVB%tW;C;zR&ij?)F+Iw;DWD0o5`gJD4J8 z_vTPDdQS8!RscHVQJyp^s}GhoiCgzSl5JBoO&^E${ua`3*gMR|6Jue`njK9)k957U z%_tOxgDX%m6hAseL1!4_itY`|WS36aUOUis3(qdAeC`u|*Frb<9evQqsq+W?FV$xV zUO(5*PZMdTE2Z`f!uOhAkgbV!tjOef@e+^&=wVuew}oNt5gtD*Qzvg)8!$V6?0m<# zapVIrddg$QxEsn&tDb^3!Du|dqW*@g1)o@h%vkBjpHL^og8lk{jbjaarjUhi?Om|$ z`k_Z?kP^Jz3BL_OPctO-1E;iq$78-q`EM9Sct#fdL7RFEr?c z<$bG|hEDsmBF>Qw!ndjdy0pF10EoNP(`r%+D4R|XTSNOZF;dC;Vf?4CA&G3;Ao1QT z`DH~O^lS11Aa4X3I@Q|X7}d8ClMYdIU+?`s3|NT*khwWe(8t#w4(kwWkxZmkljiDI z3@|@3TlMYq;#-bk@mzpN3L}W2}jx#V3(girK%4 zy8?6@7KtIRfU%01kgmVmn;-0jbcFL2Iw4^p|E4u-wBzF516Ev;}&v?Ti&LxJF7a3{{e} zL#spiM!@YQSoN&R=^-@3GlV*TXX^^%uwdw@rp-#N%BUP+Rj=H-`PoAcfciCTcI>B| z6ii26A1=x-RL$kc8E7TpX*XCQIZS%G6U$S=gzF-m=MUq&FV7e)3s-o9S5ZYwDvKPc6|oBt zEjIl$ju(^*PDnp3%zZCbNnoPi<9Tv`nVLcKhj@?&V2_C$4D5o4EUYTme~LV&S20js zy$rj#f#2Au=PiEbvOe@+H=l*#juSAZv{zXg@7ioPVjDGkaHLG#i}$2pkkI&#ei&iyL+QvZDk@+U25!ONV@-E{BBg z^=7~g!I-bfNJz|B=Le!lv(VfSn@Co*G!Ex`P<~q=^*nQY8iAJI>jS1CRMRFpTWi>B&fCYb0om_FKLGBb%yP@S%(&@k z5GTi!z;Q9hF6d1nN@jtqi3Y|;l$Pld9#2~9G$m!-i}_ktDZ8(Vb<*~nf!1=%h9xk0 z=uUvpLhw!n%?)as4Zf?@!gFSs$(0-gsEXW?OVN->UhZw#|1$Ll|Ll z_NpeMnza}b8Pf@v+Pw@QL~@YlmpqgY;QB)hlp{Ckrf~CN$5l+3bvYjy#~fc9csG_< z!aHuWdZ=#6OgJJvC3=RRarxd=rXCv}Vej8GI*7QW(0c>q+rAGhLxUMx%BeG`#0@r1 z+rsSd9|2`j$`9!WAlo+rrN%<&M_~cOrXKoO3wQ--0(`11setefair$7-T@RNw9$NqEmUr zNV})?up{OTS}f9K!rhLh;WAR%C}61-F%N3Esj8{!UzO{Oh>cIdrBP%6`VI%lK^b!H zJUV%`c#5d9&&+#!I}!fY1c7-d7Sd!lB$Ye{?lg(}z&P;q6?nQ}s-3)YmXxed^|rC+ z?di#@w{4S>PBm?(l8sWIGF0dqej;WZc$276KUtHr?RovBtM)FVhGKTh zuMrxL(#!F!J&w*zjQ{y~jgi?PRr!|6IDSu)~Jj*^5OVVfQX} zpn6e`NvhIU#(ib75j$K+!nH)lI@WyHK$UCI;})bu8LcV1m%a`!KuJi|2%mWk)=_&0 z-wwnzyJ@0?K+s%aioY=K=Clkkm<`>o#CzZYdA6OcWO=*3Iz1f=io%2G7TU^{h|E0p}oSMe}; zYdSoxeXy+z9=Vo+rv`l!(2XE;$Z6^%Qp6lg%bYKkoLrDi4*nE%nRUqBB44Vf=&ZK$ zPJS)AdYsilU|hJ1P(P$pg^D>LjlJ|PTzmSV3|k9O2zAgE1Yq;WbQA6&4yPqB|CEp* zfkb1JEg>2efr?D}vO-(LWy!H8q-hC^z3Sin?wQeZ+c_MO>&NW)TPx!`BpOZiLlvfM zr_}b%FbLT_sQUo&#fz**LWwr|ew>JR|2{qd1RJnZ=kxSZI5xxPUZ{pd^7*YeWBq^h zlK=Un&2s3Q3|gEV#*RB*-GjrT3)SCXTX3sB_G4=W?{ijJcy+vGp zFugyF)~Bdj*RUFChWnUf8N^{c-XXv*j~gq@pf!R#A_LBL(X0XWdkiQlR}IQxi{DV$ zHgiQPdR8R8D!3Abe`=Rs^ZfnJ;OI_O(@_J~p5<1xnK{soj;ByOO`xgT)&2}Ws`(GV z$YZbA`vNd`$~}i9I+=tKZY=T4?tY^R?G1muvLG9fJR|%~+-7WKHSAq=hMXiOEiB>1 zqZo==(lb!}4`?d|>)-c%6MI{UMuY(_mxoqHX(8t{70$+Ba>n8MLBVVk$4W_rKFWM* zohR=t>jzE0Ak1=Aa|y7END!JsXK8@=TH?<8Wq^eb3S=lgBn|AI$BDO)}jZ%JAgZ&N{el>{(8U4(>TbmVXLn)rJK_hIn9^rN+X4N&?lbxD6 zBTMk{%a1$jo1@h#!|al*HTm}+^a`AoS;e+cfmVjeRb3+6xzTxDRTk1yXDYGfyvh0& zs1Ku~+JuZv$WACTDi8Rd<#_4E`|KqmCrRt$14$(&7CD^!W*#aXQO@e}ZYc-0;=5UQ z^j@a|7ad%eBlaTytR#c2ZWv^Lrnc(N~f+S%FDHQw-k|4`7frNR;d`!3G1B`ru$%{L&lB zM#hOUPUiwz(%i9ZJA{5O0C@59-fl5o^`g(`ll9(p#LpV%4Y;K|hoD3IoWSpB5>^jG zPu?R<2qRPV$sW;0^yvF8zXazl=EFd@gwtk_dJf{kj>&|a?sX%+T9%0NbRu?K2T#wf zVHT&;m}klQW8EB)QAB(~$pXPr2EBTFV&Qxs*k(|3N=D06Z^>|CM%p#U_sUA?mRDb_I_5{EUir~VS@o?(Yp2%pT0WMiE?N)Z>N`S>U{qQ?EYfMUCEpQ+Vt~;4y%`Kks$OqbF24>(;yHQ9fTN( z?3}`BjNcZ7zwsp2+P^~&NZd!1jNuD?m(h4EpuqX%Z{Cn~XBXXuoePTQJT~czhj2_@ zL_m_dSw1~QeY;&YI7~d~HUsBt_QJ`jm^$ID2g3?A-6$e^viXAo2_^|Eq26`Vw1QWP z*8wyRKa2w#{kY%v8lX8S-;?IdGjQ9m*7LMlvZrNMeo`~?r65|z7N$AY-^pbva&0Y4 zLIux=#X_al3(5{ib}0FKggp~%I6~3+2$s?DC~vgVTU&q;<EZbdz^)g(ds za3ekrgS2c$6ycbVjGbMXQ8ZZJ_oww^*EJhFB9)z~Tp=yWk|`RQQIV zeVQ?9`Yy54dUz0I+9=85&zx+lJ3Rq&eVgYdN!9KOebtmj5%_B;+a2^u@rhHJ=%6GP zZ1NIjUdm21%)8htClME}z@;hH)mHk(y~#7`ko}Tv8-6;PJ zG!Pp+c-DRlk72MHg8P*|dKE(kagkOvQ$v!8)M^_I#Ez}5a{FOL2zY2_)VZKB-k0^G z)oR!Lr4u97nY$``k$`l3Op`l0L)MJ@uvQwXfDaXX4WK~YCMEXqqALhG@ae;<%0)mA znZs*hA|r7?nr_ZSW^ae1`+EEwcpvP)^?;(*_F$7B39?555OsAiq7oth&B1;SJs1zAeDB zY##?~E&@i5!Uk3Y>~}wH=3aeG<~$QIg@-*ToZ>b@NWDLMx^tVe!dCkisLp) z1p5OqA+nDi3RJQ=NKHgBl=fHRD>>mJumhE--8ZN9!5SQrgy24Rr2%jeE5UrFk#DBV zQXaW0wZvaCQJ!PiT$4zURv#s-S_XZ5La<$GXttoN#MTM|en$edLs5c#P;!VfTCA=0 z*iV-rz}fm@7I@QJKTU=hd*P=|`yrhLr#L; zSW7hRB3}dqD8B#YjlW+?f+@7~p)A^Mppbw`iQeLRrL{Ay*6v%i73#1luvAoey0a6{ z7(MH<@{xIsP{68ON0gqPZpgMufQ7i%9oi#9p#;L(pa%1l!X#22vhj*FIrh1chaQJT z2SuVrCZg!8jnnt;UYm@9W@Uyc{-Woa88NHpS4r;5S>&iH=a}b^7oWD-I=-EOOAw{K zDB={H=Qsw((Sa$RRW#JWOa8VPJffU5eSlY-+!aLNWLPBs8YsL#0d8C``G!n zsSi0B$w@U#xI(GO;$|iutR~GnsdITFUL2B^GhOriAR6Fu&FDlW)F^!ce{a2*nuikL z0uC4YsgnblB>o!DyHs|XA3vQLWFOC7I*%gU?Hzm00oFm%YI!=3We>JgqjWAY32#M_ zpG`M9XD!Dl2SXkB%#uIDh!VxWBP6-9K!G|`Tslhm@_i`;a%$pT2j41@p0~O9j(!MC zQY&D*{Av0`_|T00eYv)CD8dR&`;86|DSYk_wBi6M_tKLjb}e2;QsgB(TlB&x`N29v z@F zvX^jfZ^|M(7FyKkD}U^6mr{t~qJsFkYZTIdYlMIoM%$(8u+MKbDag{9{t6zPd4gCZ_&Sc zh2ztKU4FcE5TZcHs;fxd^jveFa~$QQIY<87)r73C>8;4jZF0AaBtYytNf{QWEn=w0y)$YM5#;2^-7U4w_VM2p21g!H)MUTkR;}B65ix6@?YcChDlWm z(zFnspIcA+#scMuyBKU{xM0ei1^;;5vg~mC9A7ptvb)~jtKp4Zah76Z;`fehGJiL# zyb!fy3HK-de0L^fR_50f(m7)n)7^i~IIM74T{&I2 zTfm&ZF~q&Qm}AwdTdyNw|5!mDER#=uMCkQhZHWqY@=7I8vM?W|fycYmi)XJbRLNfK ziElMrJS>#qGembUJDtH#s?IDJjgf6kpNU|hz2x;w$lG;gMoks}`^OF;$^;Wst$i%_TVK z>H|aG&b#@&HdewC2z-1lo-2JtAn2{g$zPG=baA;V*IYXwnkF}HSGynLR83IkrTiRJ zGMT{1Ha-j94pFemO=K$`wwLAvb^52;aaMvFa%Gp$cbG~khI&oqsk;YGSFS3ylqDik0zaSJFet%U!s}p zT(pSbf6fi^K^99IX<6Eo`$EQoM<}cWm)LRO+0<6ctn=2#EuN|FD_Ng=O=TNuP~A!g z6{JQt{Xj3Zy|@YAb6_D%q1{8=@%OA=CRsZNWPA)7D{Bl%t5nsUJZw-|#%RTEx_um@=@hCsJ0=r2a<81FNynlD$Jz5pTWrFXyH~f&(CJ)w-nyN)-Xid zv&f@tg|H+Zpnvc6Zab#H2wh$y;^2%u_7Wa(@rkI zx)H_VSxUa0rvI7}I3rT>z!P0tpQJuzfQAc~qzSI{0mqPqewp7CPkH7mTSE@=Y{RA< z)&5b2J`yPFgXvnjSOtMa%$yBwfqJ%f86;S)aQ}z0bLbL=iM4gxwr$(CZQHhO+qUiQw{6?DZQk#! zbN;}sStd28)F3N)_RbCZKj1HT7r4QnpTmzY>D-Hxby)r|m-i(MYWDG0Dp`a6GyIXY zL9#_rWKsdymn0e6EF$C@lqnDzzM7hMlB#$;?A2m^D;xxr!%mw(@#p|Yv#^hO7Czmu zo{}KKqCvpS9VyCV$Z=avcmI`*Qg1D~8*T-z$CcVM?d*%62INM#24+vl^AKyn!#Ems zOcz3sL>`iJG=Cy?t*nM=I&UbSXE&sI-dEUDQxR8#xYA^QFRq5sVdo3ujid$6!4DmIKyR6RkqJwnAeJ$J9s;VC-C6Jw9=K}}O zIq>cuMWdvH^=6LQVk58AG#Vv|knai*^ihg9ZCD;&Zh6h@$$r*pAR$DA3UJ9g!|8bF zfpCTtlSFwj3TO?5Ef3M}geTL_3e4Mm?t|)%urL*rNpT}2db$*n_JnAI5b~KWwaBY5+{>)J`Obz$5?M&}~{;3&GK#3||FDLYxIVN|}V)DG!0wT(}jmHi@ z=*Pv&kbnIiGC?@e+=fO(U89A_{nqfSbsC%@B;b|26el(h{V8wLs275PZqkew=E;TI zx_A^x)AQ~(m&SjWA~{F{7lF<}WvzO>^PHerq9m6r{;6T2WFl!chLpT=Ks>TVrp<^# zo|f~Z{@%;unTLy2UtEZrHkWENIWYNtCHDp2S))vlF+HPr>FWHQhyUn>;Id`_xPLR4 zfjuvbZ&hLP7fULZVhA;U`@g3cD#L|}UL;I%IWbk-j0!D1HeR01zG!7?@D*3@#l23O~;jErwmR3*P9P2SSOgswFVx&zX+8t8AA3& z8|1k8Ej-=Kv;M1pi;<9)D%dY*kfbljxmc@NK58n9XI*4@j1KK}n>J@hW#!AaCM-;2 z(%rPakq(u1;=o3}{T&!>n;2Zp{sQJ}1Ea{$m>ko77|m#HhU1f2TXu4{jE;gou^6kD zs>MkXOOW2VKge5_rdl7^>}1N#9cb7Vpc-`t8lu#>&89`*lJ|zn*%i!2JwyxcAIJ!l z>u!E$6uAzq+%^^e(Z@5g+sbHFdvn?pk0QzuV+Opce_UsHR4lME$L+0&RGUJUAq z4RA`c?*l?-N`w>O2f6fp2Uj0eQaQ0dhPV)cD7*RkouBsG0NEjIDuf{nqW9EFp-yqj z4^ii+1OTvZ^RwA+@BsQ|*J>*Pyx7^r`?LCaI%~z&@3E3?FHlyXwN8KO4}lf2(b7u{ zUg}1-)M1ty8H$3=>d|-k6;9Gj$@4~!`?)6;zFyTv$!ekz>_kvmOLW4Nz(RwhpCz9T*w^}!768PQ78UFRJ9T=}tsA}iP zx%alC#!K@0V8;LCD4(`^&A~9P69T~{jH^J7E?d%ug>X{8WVcW!U=Yd8iQy`SpZ}BE zo0CwoVbKvsWtN!$Zi>ff=*vYj7B*^_JD%UL$a%+#GuyspEy}c80`Ol)f=CTLG@&Oc z>L>x;oH4V{O!>8Cd9pb5wXmB$KkINGk$>a{Mbg*z7i`0NJE28@rkVM}P+z(j8MtI4 zR3Ed^h-#oK4gQfO%0M9FosRdO)2>StpA1c76x>6) zd6c}`HbNWrcIb+a>&N7$rr=)Tw}?b)8{NB>jMip0n4gIDMt^xBV$SdcaXSKt^u4@7 z!$Rr)ghyzC7<(juejlR?_b$z|7@?fTAGXey3gCZCiVr}BtUQ_64&0aZqjCo2KLP96K!+^IVw&QkmOc!8;(aUY4haXo?LRglGly1u%h(2K>p?qo2+TTO7Y@fUD zk{ZO*nz@ZScu_|;A-a?Lbm7 zGUcKg2ja&3a{5Gn-Onrjemwb|6&L$gxKb)9t0*z@q^*B#7QwYY^iw>$ za6~3(eKT<3SV~n9hYb(aZ+}@(NwOKD_k+u2I$SF$16zJmuMwBuc_-03ljdVBC`S}9(+y2DDz1{qO&bSGPQ}`_&__e#eJg;uq!+0tiyJNY#s6S zr()t-nxZn`% zmIBn&Pf`*hZ)m}T>9}=zXM&sHG;Q&Mt5`Qmr)TDz#I{AmM-7bi%BXsjkwFYuWx$KY zsqQCZbS!*fC`PLzY|ib)51qg&q7%Yhg3MghXBKAUaIk4sr)kj$URBf@ygC8+QhG~X zoN+O$V=06Ur>S&MDVV4f$2P=0^R2CU2~1Hdb{d4@CZB-x5^>?f|)f9 zX2PlW(+AMMxs6s`3vwNj*8-;+5clE4V{K>TJs>T07oq0BsN(wz0tSec*I8P%he=6Z z%1P)O$OYCOW$rbNTc%#79Va#%hV|3h`$|$viZy{T6?n{}=dk`3xKp`V#2L*uRxdZ1 zA{=Liin9G)7#`<54{pvY)F~Iio{tc59mP+!`S&IoawNmld*8h@D)~d5^CPh>DKqY1 zW^G~Ey?89i*#`A6G$WnX=N08Zk2(XtxqU$qZc)r3kQWx3{tn5ICmR*Tz*3#O0zJ!$=pvh%dFFRw6J8Xd(R?jde%ueJRyWPaL7ioqs;EwTG<+S7co z4uSjK6KH|_0-KWdtqsRZg_UeXU zQWr4_BjQ< zP4hu;JTpReo5?-FBMMDI@rNQF(kX)(G(!;NG1-FUQ9?j}3A-}rYKxb+ocLx+D>e); z224LNvtwgQd;|U)8b6#!d}e4}st1alC#8R)N8=}!*O3bxb0_Kq%R#r2I9&!&ys^@g zRwfzo%W`-n9xHhrZV%Y&0e7ln!h+1}qomK8pLq9j7O133Qbe;Q*)D&|`j*oBADI2l z$qzRxljMSBB%GllCiQ020$kj9>+XdaoW>3`*~CF?-e%Llx@Ci|re7NvS;y*afQjfqgvtAZ%gb-dY9_xr!TjF%gF?q#g zysE>eSj<`UyTPc?b+InPbmF5X;49~9eeZ&)uoa`P{oLt8={l2)8#MVh9Fx2qygeZLGG*|nLyKxyq}kFRyA z+q;IO?8no;fKH{Fh!gd?Idw7YKE+Kk=apdNDx5o`E#hbW07V16_XCnlCbfvD&}Dki zeP&YV!s60VpjUy_Yh$c^Ez5aSd3FA|^GCO8+IL(lNs=U~gg9t95p zdkM7uB}NSuAvIx$x~ zsJG!>$sP(U?c(W4T`Q{lwaA1V*0AFDGn;b&k+OHdzJ1>_4=cF(42SPwvklr!M=#^b z(c`zzxH()xzv$a};EiWfUXhsNARX&v`u2>4c9>$+m)M+zFxS0dQll2Y&sWYA4nWdX zIhPqYpRVgC_D3pq-ccR~Dug%;GIK}ge;oB#w4c~tS&9RWyFC&a^3@t;0YMaxut}kt z2PWJ#9U=-pBAK_hxZOVYT~MYN;^3Mjm7+A_^$Mdk4LNGkm0`4s%;;KO?i&PiEyhm4 z98G{9Y<;Ox7KRKBr+d;58{I>f)@E+zLQ7PM)t1W zucVbRKmS}PHNsn(c!x3xOU7Sp1C5N#OJG)D#B_Pf1>w>Shs^xsuD42F1;;y+dA0qZ zA-lX(bnk$-SUQ=jW0NPIh3+eVR3^M4W)?9MVLMM|H;cuVYum7y>x5gO(;-ll(pvq? zu)<2qk-zpE(2&4OFQ}b6wN6epmQWSrYDYDK#qkNNP?hvRNYMoXP7L?)fS5_b8iN0L zU$`fF&S@Ob)r5-J!`RGn)Qlk3MSC+l?xn)8CM!w?=@8PGr2SH6*FsmCHYu?RzAfT9 zx$yo(0H9z?;meo$u4mhU9W_g%T_yL!0Vla$jd#ArFb{}1$`n~&i^*{k|A*%Qj^QAo z$g>)?T0z%;k{%>Vc!E{JP^|lKy|Xo_ilT(U%pu@A0j-#{vhfve4W2OmUWe(IbGgR` z9lFLw?m>=f{kCxzrjVZR7;33EscR~|qRlUnqchFp&UP@V%x1LYhnqlYQ zk=Jr6FL7a5H_)RhRMy9A9SzcnNAEiggPv(9)hUF3O(F?d9p`Ub|MKcTznyWHFFVbHC*re5qdQnRg(H`O_g|CW0O^T@2%V8Aov7iI5K0MpI$j; zJi2-_5|nP$lq~WdK;geAs;6!!Azd{O$(m^<7p3-7uJ&&7N$;k4K;e_nK}3tu)9jQ% ztSV-0p$7rS;&kFM4yLnX&kUL^BmJBip$+yphpaV}Qp26LX-Z#-246q7Pia3yw@+B$ zRK*qqWqLSV9c+9GZUPV-7r!f)ipF3pU(c>PX9LwqHYYXl$;(`0XJm)s0j;^VmZ*J( zyO)o7-7LPgxR5CD!?(qy94ue?91sV>AxAXS!Ui2x;pD8`))8$ht3@OpWZ=51hV8SO z-`%N0i2;S#?Hux}&^eyLdKeVXLC8#`8&+D5{0C8{&N^07w$aVD5s9?(`C^Nl3jmng z(CsQb3=G<}tN(H}M{;l-1#QuWJe%6XcL>b?5Gu|H68rnDWs`{RV)g8Gf-`AS=UJOo+NgMDKKzPKNpS(;5uV51r zz#2=v7&!CI%(bzbjRR7(Z$3?8$z*J_=6U1tz0BDde7OfQcj&M!<^+DJ^={>suhXzD?8K@ z{XT^GhP=U{34L;ngCPfQ5#pWPGB?8()1_TRYVY!o{<&L+`zgTu376VO=QS5JTX=UE9Q)z!&&j(#zz8MqC@ zTT_-dqx= zm_VwqQBc=O>G^}2!CaoK?Y+e;0 z4@xUoWPy|;t_`O5aD;V4_g^%pJ*Y2N;j_`Rks$xd;ixN9k?A$$p$ z7?=or2F+rt@;#xPWvlyo!AdYj>Ilq0^nQmWjmp30e3E&a%-rSg>Xks|K+r5vB3a4d z39osZkN>mjs_FYSnEWs+SiT(rR#Y)eC{13zK!r3_L|5Sm9b9Bq!t{y17Ic&Gqj0X3 zlmtV4#|Pv!be-y{)WwA57(|RD%O;5yPqIu3HkmbyW$@+QlFEEwTpc&Zv+nW|LN#uQ zt+$NrWefb39SvC2X+um%>|1a2%FKYyHc%Z<==H3B0xJ)vcI-&vd)IP z8uEvZH6?CEvQ{O$r!wNUJ}2aQJ6p!U-g*92r!D^owd{!ChFaCw(DoFCnNT)KXlgJMJ63wkO zCCRuw^g5mJUC&EZVXqpQ&{mpV+LmLda2pU_?_<;6RAOfP#UPFcNEKX#h3gj=1;GTM zi7ZHu_Dr5;juBY{p~&TEc3|^!SZ|D0@4@EzU^)QInak9segygCJe!fjr(kD>A`Xo- zNa-Ub29=uF@hx#x>2&;9&t@XdZdJ;xwU<7K{zcbum}aJ-REK5z|DvP#)oB)UUcCI) zhZM-Cq5yFnYD?fW6f;J|&G)F&{+WQP8Ju$Dmp72T#EF~-?Q!OHA$t-iy;$@Fy68tp zhyd$db?$&pgO?v514|ccZOC-j=K{&4c4RO9Y=J27tB>Tg1*l?Sl3d3XsT1Jqxabtt3>|k*Pi7=}_rVrl)%{arCw+rrC zW&!eOMt0L-26{fIzB!aI5CX_aRtFp1*C0JAM+BE#@~M%}vaatoG+tL4uBw2-Z-m&< zR66t7f&dBYsqG7(V*GA;c?{Dp{7{|cOU1kX$7n@%(3vF2@{xr82Iqr6O~v)ql2NY@ zm+Exph$2jSzHbyb6hv-$Y16_}e3qUnNw|{4Vy!ptz4JhD)(KJN`+bQZ{OqFDjbSkL<>bSIia8? zH@WN<{zlaqy2Sm5_yEk)MqdUSelpI;oUqEqW3Ilaqpdcl&AT}+wA$H0aL5(&o=dt> zZYDO)O%N>D9igj^NQL(V7xHXbjIzu$LgxFc;V>hfLjxOb-VSV0u%h%QXyivNH z1|v*VkjT7dwAC?ZrsfBbQ^q0B&RzgkDWX@cs$ep`h`P{bb3B7gX1N>h3!Ts-jmFdfocMmpYqx%9Cd~ zB#JA!CY`kV?DtH~+l=?gOEaV~E{#6p?gS@)kOu;_41eI6VwZ2QFYlRgO7XN3UtrJk zjnC+@4&ju-V>nn&zOGIe z)wM8K(JeA=ohAULY;Bg3d<@CBK_* z*`~WU>qr_K(HmX3EvmeQzXidejjALeq0(FiR}L;tB2im(@2OWuKts4IEq43sU8rehyflvh`{ zW5X)P`gA{uytIp1-X*q|KE7882k5as=S|hk(fY7y#zf#4t`n9SBzcjJsT?68uFQQeAW$m8h2{*mLy!>YR*SrrWfL7=XOnR>BQlV`wg*L3iVsq~~`+5AP@ zR&fw>hy*4xL0w?dA8qz4rJ%b6T5=q#(2k@XkhDo0-z1aWAoI{ zRx>Z%ERN`gLcOP!3;i}s{e zdl9w2vK1a{O%L{kq3j0b`G3NF%J)Td?e9w8E1i+ba{NqZ-$I4&Z71kuuTUe_FL`&n zXExa<-LOm}Nqm(|pF1%8K49nk%w8*b_IRUZ9Hq@Xix6^$(679;-VLtp2$v_Elb+26 z0ZAPqbNXPp{x`0nNRa(N-gAC|dT-~Dfo*x0SLQWX-~!y9`kdNiD~?_8;Ypg?hsW1d z8?B0xJ|9JYyhcr^lJJ919O>D#X#)4pm1iWd3*E;x$UY^C{Hkx&Bv$K%+FzFdcj=voU&ZD%slI=Zy+ z3Pph0h7rwFfWM`gd@~ZSui_ablr_b_+*}MnXCjLNzDC@JoJ}#(teCZlVKt|wD`-_K zO(ZvON$L&;fFQJJ#_waBt0DY$PVm7=!2PUQLEi zsXtYXx;b-kCdl|YM-0TvSGGYc(|dOZ8ry*aWBWRaI1%`iE8kmwHVs>yF&UDiuSvqV z|7^hI9GOj7Elf)nDu`JtRK~#h27rCXIloc$1ExLFICnbuGZVdeY0L9MEPY{J&2>uQ z9uDoTUiI+Q2{6QY9w%2lj?U8WR60up+mg!W)#zTcgHqeG8EMxUiWxdR4ntMN?{(W{ z8&or6*a;z5Ys1GhHms+}ch0|lp>2?(l!w3cP^a_XeleID@?-HmF6z+7_HFY88X#79 z=*i?woW9*E%mWJ4`NdB7TsAB;MVTw%%V%~6sNwaP3<2=3WOKRlx$2Pod!vg>%LK3N zDz}O%J22*xo%cw&1lII_QCw)JV-~|8kA$|OJKpXxk^#p}lUO`hWCS#@i)}{3(Dait?nLnj<7wC#{|Bq$3LgJ4mY>QW8?w|%#c$%(gxdU3?Fppa5~?=?LxW;@PtBm68q`E zjabWNHPbl0Um)>is2a_pG3wLC=Ab?ZT=g)U@(_27Ak}O>`L=BcV}Jsqyyz2dFPMS{ zjTl`8dt##K3gir;Xzov8?5Qb^L-DeKVl^-LwsGg^oh)nBf4b}K^LIq!s(JWA=<*w! z%Y4Pm)}dy<7|*uZ)uuTYt%Ts@a|%v!@Uu{LcOaZ0PSrl@>eWBDw8O-9Y}Lukd1C>% z3pvmw_9K$oWaqfD-ica?^-bm7guV)d0G&h3*pLS!W#h(2~!%O#2u{ed)ZE zZaEh^ZJl!eR%eHbV`-6d&u2^k`ao<=qofy6!QQbmO^6qN_-o?swFsl8+Kkr+UT!g& zOT3uwc$kVCA&lelmCc(38i~+H9aJoWW0`|+LKZFGd(Oux-USP+Qr!Q7PtCM#J+7$$ zl+F=ETfN_y($*1u)T0$aIHV;6$3QWk!~H$~ycygOp0H#(8flGj+;AQ}t_!tuy9>hQ zVg*1l_dsWEvtp3tdWC$8qzv?~qWR=s57-Av(#@P2z58ToO4{neLNx=-j{F0`bCyPc^yjR0!cADh7Ec-@-G{?L=KHCoPPhDDOQqwXdQ)WHA>g!G-o^TwtT z$?78}DRlr3zf7>!0nlz$QjLS}_FIx2HD0y%8DUw$TjxOSzQ81Fb|l3TO#Gv;kD|+J zP|x}L)_pgjTA4~U(v=I~=HA1Y`W<*2spIhnJDTWU8H*0I!$pOpF96|9gWGo$N=rzj zsoac?Pg=g%9D@F<{yqptU2rokn1K%>{*&^5R;KrJI*7!^&8!LR>V+Pl-oTnt7@o3s z7Be`~H?LH4;)mFwbal<#n}mZ8<4xEV^w&`WJpZPRcE?Fl(9SjkPtW-Nrgeiv^sVR?*IP5bOiyD=apP$l({j5Ilp|}I(|E!W=ABy4N5@V53*>Fw{ z4&CJZje0VLwJ_w-sM4uD7k{R6nCW?QZDU~Yv6V@7Gsb|a6D97xl|0aw-l_SK=fIdXOx66B*Q4??|6dboIH>Q9lD!9hMNRl z=?>#(%bJ;#JezrcwrFWIhG2yDh&rS82ylE#jQ!IKU)+*BElDzAVkTELF1npv?9JX# zjjYW^>J`?}_Efw#5Zz{O5+G{vg%%u9uVK%Xa8qNSTAoU3R<-c-eMB^N6^Zwa$b9h1 z&=LvCG$2-*wm~W`=+q}CLsxEkj@8RQl+*xeZ8{^}4kK%%)>a=%o(~>Vv6>OyHh6Ex zy6OMb-&;Vq!xrgJgwON0aBwHpgu*a>B$*_g6%hh!HCswX;o{ED^@QLCXEXO6N@3!`=>=yr6pT~h-VtLO4zN@EJ_x>Tg-SOqRJf0t1?fElb zKvM+zT9?w@#Y#?8reqT(o~tybO>aL3KuT~8ZL@K-yLzl}E1@bi_d$yu((RsRtFI<< z&swtF_(*pwe}dY9CsD=8H|l$89`^*Fd@%Mc{byNc;SP5>V~V?fH*5(HcB=*cj+Ww) z|9Rwq$;_h34h2DR*ErL8uR;*>n!+EIF=&fEvzVhhtd<Fre7AD$ElyZn0nu3NClq)s;pI~j&mg*M!B#M|? zA|Wpgck{=vcGLo6EansZ>H$|OPRSK(T-F7W$m^oxp_f>E3S>_Bk&0O3{-X@sF5le~ zP0W-8Q9XUnC3Iy5<82cT=!h{f0rmEjlI9{&%dM9tB3forp4nc6w4EM6(~pF zt_o``Ee#Ljk6n9Y^XRe3gd7nUP>vUj!OK3&0U_@n_8)-8agP|<<&)?_&C!)h@_n{g&(>Hr7Ll@I`aorHxff61{r|Goq6(LayqlRKEAs!&!-3n`Ykz}lSGwk40=mP2U(U1ZRZ*cNvhoEmOVuntAp3!>{>r1P9KRi0vkiX^~V-H%=nm zt^n*AcXuHd|=Bcb~kniC!9 z(9+QYJF-V507P4^*@ExN?!twR)e`n{)uDlI>E=r1QypZ6^-#`5yMV64D9%!kI>SKm zm{U$u?wWqFgJ5MQpA|M4j_Kn)c?G1~Xz27XPzrIw)xw2&`uBF_Oi@6;8BZR< zmnD_S?Aez2iaOiGO8BVy6QX*~)ONSD_z82q-S+L-&|+*;rXR(di>E)NWU%&byryae z0>_vp);b#q*>tK1R_>i)bj{DoQlLjK1_3j$_6YINnTZ(mrFy=hd-3Fo3!N?&_W80} zuM_>)znBnpz2YTpxrWpGjfb9fK`jg~ z2_kdy$#XxGyrO!Wb_xRDEN^9*xw13hTV8c0UU%gBOZeO9fP&hz4QJ#=UT&v!Y$f=K znsVTXr0#ah?kY?L{Kc#Z%K5TY`+6e-L7f5{zyL{0?Dzlm3x=5D{>-&d;Ti!+P4FF) z5`N>CTd&4d{o3z2zd|4mSJ2o}!vNiW9IEvi>{IxSJ?G3dPHeV-7s}Weo+oIRM6nF5 zi11}g(w06nXlX(1$;leLQyg?B*!ad6X}h&ZM}R^0p7n+ z`q*U>6KRTV-?kN{4Fb}fcAJU!BKXPHmPf^Q>U~~d%RKV6T#+wmy)JX}n&Db4iCSSH z3Ko$3{;sks3k8ejppLfih(L)|XB#@&MsTUsldkm%MKDSK@FNvAw;j091~qu<|5Q;O zlX?i)Z7FMe|AHw5<&Dy+TmYN?+J&l6|IwYP_ZiBWcoxO{l~2PiNHOw*zziP!&^my* zVnqsL^uibS+>67Z2Oq9tEYVd&;E((sKg5F*++ILRPPzgOCS+lG3X5$_--5p(9IaE@ z&NdO}pO&L6k+G1Tl|ZW7%yMZ+%M9<82C*nVa9mFfISeIO2G!o^wx#$_X$xPnSPN3l ze^xR6jbgRg82%Vm!;&gTk_&Jw4LjkII@YQZM%SA#H)EBfz(XU5)QQ2JFku}KMy7BE zTbT$XyY+Rb;t)TL*+_vXtu)3NIsu^DS&zCA(7C{Do%IUj=a5#=9i_5c zs2yo|B%oCY4@V4;9PSzMIueet$N0xey+hyOue4t+gCrv@;^hzl2goZIoB$=$Q$aaD^RbCdsBuka@o|f0 z==hQfm@%7H|9Vih!_w6%QTas-JNYGKr7S;<1M9QK76SQB5#e`v(1By~S^SMBc z=}!9Cw+C8PON3aEpI}8m0I(|0k-YBX1VlhL0vD{K9$~#k1zm`x1>UQFIcV2&ZbD45 zUi6yEpp!TaHtp-ZP%3OgDCeoY9CG1AimQ?J0U8;0IMmrLu6!N1Bhb1@@L)5{gYF^B z_KI-H=x_dK;~C~SlY%~1Y_1;FEIvy*S-p~8N+YfF-r6Hf*Nln{K>rPkJnk^Z_(3O3`;72%o? zT4zEoB-9c_LT9))?yRTC;ti>b?_ugraY}N8yxeLV4$zjq7?HRvONw_!m*IXen{#PO zTA5{2OOfwO#7067m?><#9LJX`E@YoVR6FYGEg3u<I(&G^2)f?K|;ZhMd*&>U3blf>-0qz>AI=+0cKudL^tlKMqPj=!QOl2|7d@>_S z%Uxf0Fn9J&Ag$XkK)9-2YEPfiZ**}Orvv0Ki2Kv^Z-W&?kmP-9VPePQ-UD`UIfiP6 z0C*n>=TNFA&^Nf8;m}}eds!N@wCD*TMR>7oc$5V;o-)yq&8Ocz#Jngl^5-pbH#w7+ zAgSeo{zFR@htt%VYlRI6yDgA#cIcU#+5iTmfX~d{6F771a!%}qF|r@Nuo;kFEg8W@ zcLztcF`uH)jdJ*YwW<=FQoO}Tz{pXyIwub|GLdS1?MdJ$*|7v6oxsMQ0?9mDJG!cu z439FC2ug079{mrel~TA50FYY=c1NvxWg3hcf}bncVBv9JaqBEI}2O(#YK%b=JrxR0XAD{^BosgOkJlL6Z_B->OgY?iE*-F##CyNkA7 zg6|uW(2|F^FDpC})K{?DYt@`;Bz$)`$K0BO(2{q`Ek!(l%H9f4U!Vs9d3mezO;2`D z`Rzrl=+V@yY-1?Bz9bqYRFnA~sjz3YlUMt*KeCU| zcJ!44HB(qmbl=bbQy4@uL2M1tO3S`p1OKsZ&KE>yo-#2ZiQf!wsAQ;IwacBv40A=S ziPfl@g;_WNZkVb2Kgb96R-XIZc7h<;y7rzQ=%jJLhz>vidQKL{;UP>Z9o#=~0 zOqAC1Z?Mfglb#)!4G)2gE3eO2@E>;i2ZpL-6uzc+kT2_-a4Xb9z;SJ#xl5v*fyCNP zx#q3XxI^RuuUL|SBZejIDBIGrn^tU-y@{McVNF|q2iS#zP7!^HPxhd}MX0x-i`G)l zBCP!8xhQbQ_;dJWMV8>MMlsoY`s2mr>$UTkZ5Z-F2~DoxEOPY3Csu{gJKcTGR8lGR z?Xha6*0bbUMP8G4d4sb$J{O>xg3Cy$H2N@chW>4mPPZYD}5Me*qISP#eQ^| z2b%7hZfLIY30*qSwHXzgc=v-)5v6+Q1dCvmOFJoGDl%54t?j%-zq@PCY}0QmHb%hA zo2gfBpG)Avm8krJ)ZU(W%mk0%iZB$)mo;33o0E@;Iz{5HlKM=kA8FJr-8YX2epR~z&w2^OZ^Njr6fai;HKYqDM+htKDUY5p*$;yUX_pM zTEIG#2+dZ&_Gc2 zU(_c94X#8}RW-rKTI+B;IEN5!wJ5bVkqaQx?LA=W|81W=!!r~ApU(zSnh!&}D|5}a zF#`^n5=)A13-&XiO5+1Z>OU%|GKxv`BUGF^V+wAhKAsk4<{lwDtt@jOqiF-W=g;ki z>JPoOAh^%?Ir4L+%VjS zb5tD*0F?1x<kQcAZEX~N6co+F-s%Lq;-WWe zK2*K-@#v~^%i>*Dbc^i@&gi3zik7&z1{8pK{rGiK7$$0<8)kAgf~&I!7w7-)qE`%1 zoYDmgc!-CM_^n3|iMqe&Fvyu=M>`IP92Nub-OrubO%8G=oxd*>e(+q8s~Oxv4UO`9 z!R7Px`986H*3=1X?!K*9o21|5%Iu$6;*}k~q#Pr>T@XRO4c^&Y1obD`FhUakK|X*L zc^0cb691qVgD|UP(Jd-6gIF{!9`gLBWf73`aibt@(JP&T)9$gWYwPfA5@$z^w^t(7 z99Q@YU~qP7D0wrSP3y5A@r|`=6y53eJsS%vIZXi$ zFXl;*9Gp2l$5t5#+;^x)Y0+#_I>)aEY;dF1cZw`7_UppJARPOYqr$!I=ppGWU7I54 zx$QM#;Y8qM?iZ>54~rFp>Uj8V98XK@IsN_cSfQXntR@HLp8SpHiiyo}6ku#2U2IRs zmPMPd*y<1~81z6^h2Gw+L7XUuTka%`k}DPY>@R!@$m>%JLJ=q^NuC+>-bPP#%CRX_ zyGC}-U>?o%*eR*@C~2a{^qK(-;#vsHXtxgpfPi8;rWAxU&JV{eaU&`?l?*-{$K1>; zV;Zw%hsEJG@J+LNRt~hl=D_+Nu&;B^Y&(=O8i#vD2%l!t?xPxuP)9f zoB;*GiJNM57c{zsXg8F1=Hm=j%(4vgNzk(>(dI@gbq0-o8?7%l;Uj!>GTzZl2BC6S z2yOjNf+Z;R&hzs9R zH}To?Ir6;}fsRAcKwEviyJ!;SN@WZUh%b-6_}QE7Seh!_;OBRP^cZlxO2g&sfKqb8 z38Z2gd|2%W2AC+k&<4FE7P~GCme#bzQ5%$ zpgY7YqaH83&M)2KW9q99_$I2~!I(z^cGq)TDh|sA68k6EuHXI_BI3YSpziN}#)N{& zWZWTBE|*p42wKPsj#!C!5vlvGgG`u^<*VrkuqB62Qv=6jK`UI?#X}LBRP--~P|Z3O z7Cp92MzXl+RNf~-0|y>M3=oZ5ThYzhg>v`RIZh}jJI$X6Zcg4{^|A*;Ob#|N%o?s^ zVgc1SLk8K3RN9`DfpK?SK@Y*vbHBTMe|))fS2&@wTp`^H6f`T1kGD9&I}p zMwZ-)=)~sUaTxc1+VcDz@VHR|2ro~Wy72yWy?s}5Ae3Q^&i!o+zb+47c)qN7e-^Ql zhX&-*N|O0ve{a&T?fwvjR$r(GAB;Aq-}X|FW#BMfyr{Q?_ed?VX4JKIpQ7`si^fJ6 zxulj|04(vRtqN^3vuY)S{GfxVl-~V!Z5LwLvgS%QU*Ud)^I!_3Y7Psbw0m>#Qm8xx z)N`RV0p=AN!WNMV0v(Aq34tFBPJy(@z#}<9+y>I^tNf`(@xC6idzR&M+Q*zhsFvbY zi%N|hy4bF*&WO7n{i6tM?!;jj>(M9-IoR~gN#9NV4drJx{`rQhA-wwAshNBqrAj4s zL9o_>>qUx5(%p^ zN9;@87k~*bntRV355m{o*G^7ULPrh|yUnn4Oon{h`}3(h6fSdtI-5&r^3Zs9FGehb z-D3RduNrrH{^9#4XuMsOOlar^R7fRy4a)Y;sIqT4xYc&SE+a zcd0&`fz84iV2JuY*xf4XA{pVHEEluUj$sxn{K0O>Y|a75@tPtLIBp`GG^0l*7aAppq0W(Rt|%;DHN-20BF% zU%k0iW)oW@0b+c=eZ>aW2=X_WV+|ppaf*=Wh3}|jt}gLLD;q3fY2UfYnP}7c%+Vca zQx~-AMX5k?obDrKvS>$FFerN^x69mO@yjn(DP!<#V|Ukax{_W!*lX?oUX0jFK^g@N zae3c%T}cmNNl5T7qk?V8-t|v_Mx=w04nb+}Y&*pOJ4X9#8QK&1^$dZ+gjsU*eEnox z%>L};iR@B7yxEQTJbjs4nS2BX_I6;@4;z|XuJ!FzcAqM~e zOX-I|&GSs-zEHB`$qvaKkI?0FFWswqlW-a4 z>^&QN8YFCiSE38}*RIwMaUB*D+5qB;JzasM))E+`>^Ic-X9*#{|4XPDXIo*{0IN=L z3liuxv=HTqPla9o#yl)Zkrx(<#Hk2#wHGHv=9jzLngNp(0988?#}^!h*1^bo7b3@tHKvdQk=~ z!7{>rs`m%%CS4X<$=f?qr$tk{5v&`G`y`&yaz*^m`tsBBy8J+>`v94p?CFcDQ}3`- z1MoKZ`vuO{?@MjY^=L0!y>SGvz?PCPeExL(Q?}UrTO2Hm5V#1y#z#euB(NX*%L-PlN(y4FnXe?u=jXhv zF2m{B?(T)NSfTGA0+%HUFe>E({i0VFh5!AhzN|m#Rq5pO%<(Yah|+xU&w)IMpxHIf zvuGumEY>fhD)VZH9LQp|l$TcpB7hTt|8UQF?1n<(#JW;d!!JpTul11;upXkUgll0+ zkZk+Bg;Q|wjn$KJ8pyR#7$yTd`gx%hJ{(Kd{!=x-@{cx&XN%~I%M?)w6&jl!QrL32 z|I^FR+S>GfZMm@Du6%E@qjB9(Xh{U&Y|N;dquLg4=q`mEyAX>BXFj{`7pjYdQqOkh zUb(whMQ>r|CNvuj$}t8N$T3TrJ+(D6Dk&pB$P$J>V{Pap(I`fdAt0?Q9q8huX5i!} z8z$h-NT5zVQ-n&@w9>1LvU4cyAUjukl0~lT{W#N5JC7AmW3YMw@;qCK;SAS-iY6$o ziM)TaSut-ZaZ9VmKRr++LSj&;PD=)bU99yzYFF9R{rOgeQ0jB(-+riDJqOlM+wK#` zyyPmBXNuf30yE=iJu9Ys`cO^nFgjJYwZik-nJ?kiiaxy~N3cIC+{+y=!qcMQd;Ke3 z&?XI+2G1cVSo?~lbfp&myZSjZloX`^GEUtivL=zWm6iGVi(izQ41nOi%9nOXPDghv z@HZ%TOYwo*&>Et5g9WO5EK07uY4fAg(d?%~bR=`s_shG*#;1_Pw(Y-X7;C|d>#U+u zHulW8-vB||u2-&P@W~T1>9YGD|7{?BaP<|_osD|M%g1Pb1Wk472y3Wk#(7+GnYHAb z-aS!27O!S^DQ+f>dD<>0ff0#c2d$NwUoHU2iLRx0tS*3>P!NB;k3$d|AuYDv@%9(w z&*6cC6$s`+6qjv0l6vmIQ(CuH-AS?i-jx)9xG$OQdK>v&aQd^4`pn;tK)AsO1t$2@WQ`niG29Cj=Ap(cE_16FaaLCE#K})C3}EvbiXRD( zH>msjMucJdqOt*8esj;pV=I@2oJF+|f6J3zCPo<&FPFzBmBPEoA`SQLQoxae3Fo73 z1?e|5E7M`-`rS2m^tiXZoJJCC_dkX0i71K$xV{gjG<*RIO;-^O8|0 zR>h}j1#`lg*MAuIqbMJvuM*D(t-?U!_qJkr_Ag(lgPFaHq9WXj3ml;k3S^Bw(jBS! zUlSz+19$2F6{o}FH|8z@aJIau8~1iE~#imPXT9&AkdmMT=hGBn^o<_Jq}_<<@F)SL8m~3yvt?8UViKoMFXzi_ZY2-(f7p z={91gniqiLB?{g%_18`aZN96j~owGg-Kr02cOIqc~mKuxdEA53PSq4c?p zhlk%y8*F|l7(w%TakZ`8?)y*N9CMqjb&xI7^C*TG;uT05vI3UNc4AxS96x&?Z`o6v zI3UOwG5zK_#y<9^&0gq=pigeC`Jdk}LXa-zL`M19l4>{_00(bz-9ky+jv;YVgE7ud=uDrs=PE_63#xAuyw00!7 z8ptSvXWxV16`*kN{E@;(+^|;=WY{+Imu1TC8`j^BioYfL9?(5;`cz;!0HbH=D9pWi zQi7>Y5rZc_q1Oz2T(ElbMa}|!$HfeU(&UbQWRP+XGVJ1?)2qpAll^^ zOZbEEWO$!dV2TwaIib~xN%kb)Ry{ReU&jN92^k(g1H!#yp~Cek9fp6i{V<|SQ48DI z?@Dw8ntKP(y&+9rO>Ih*@iA_Si{2Q zo0%*V#rU5C_Jy6q7mGhh)7h=-LiW4tdd?PMquBe%sUa=*uSRhAY{Cso$u zGJK9A>gx%HVLaaOJ~%4kz?!PM0?af@vU7Z{b<818co!eSU?H=$+WS#R!7t=QcnP=L z@AEs-vx*}p(6Nw3WUy;q*+v)E6Cpt$yUqrg5}7S_prjf;Z_P&L<>od~)W8wj07 zR|bAs#yAY_1JmS8v~Iqb6(F3iAHVl|K*~fKNGi1-y++p-TBcDg_sC z>o9#6H= zJby6KznMTbp{FYo>??sYCr!sejRIDN=s*JYlu`#lx0Hb-!_H^&Xu|rXZbtE@=quk; z?pok$9a8||=OQaG7w6|i+ykrK-ZY?ERx9AIc08%bdLt#uF%zd0x#FA5n~Fn3aJ{OV zPl$y1CtB3!Fb;XG+Gb|&&1OyXZhaX!5!;`3f}xal*qkt#+j@XYIc)}j;I}5q$jE(U-7qeZ4DTJ6FA6MnhJ6F?tWgCh6+8a(bg|i znH}4tJQOryEKUkToczp@>>DUH8DEda`^0M9F<0hLl{M{OY^Pc0om@&r;5?{@iB|}y zbP=d?3r{VuPQ)9Tc}bS?m+AAtl(T#1Fts?X#CZG}7g_}eP6v-nP%nrSfeH}b3NPPC z4woHsQ%V>Eg8?Jh?nRlY!v-az&cR8n=`$TLDuYkj>?fp{`+S-BEYS2ZirzixS_ud?=_@WNt;^)$P}@Z2sPPR)puyWR#R zm-3_3Rd$vK|0LMaaf-+;fqR<8rd{*=JqJ)w-r{kg4Y;!}_%9$LRk~bFuIl?Wws=1% zdY!oUkzRT|-7LFCI}QG_(q*!_85`()7dc>K=tu-26wItO0~&#G<1rapa(AWZNrdLfc8QhnZmY7K6HpBBx5 z?xrgGNr`7y(|W5NSFRRBv9` zIoQ(;rwyxQa<$a|x@T_|#3EbZs(cl5j@=m5A+pYqv>ANqAESHe0UDEeTV;#Q-}(N+2!V$S5Wd5I z>}b4`z=2n7z*n~=3Bs0MkmvF1f1DsfNM`GlS1OH;8G}N+Vnm*h@oECrM ze^;BfGVwrXiq{aQSG{5AiE`nZEY5~dnrFE1AwQ1WfF29~VuFXz|1q<<; zSa>9m2jc36Z}5~?4i-mlq9V|YC=xCi%}~?fPjxGdfm$m}a0B&VMa+8WnRP0`kXsw0 z8~NX!3&`DvGNaqEfS6O`TE!{ojDTPW9O!lc^^u}szt+_bgFKCM?U6r(Kn zb!Z%rEj!hld;z@w(0Q%bID_ltZW`Ka)tCt&tX&GOjq77F`lPY*;~K;UTa+l~p+sWC zlc9O^<1m3vPSm6xl6MK^N`6@i?_GF7M^)f#`3*la>UB-8tX0|R>)1Q?SJm;#;?4fd z@RL~wyDxiuaMI^oi(nz?J@XEp8F>(DgaSz3Zr-c(g|GqSV!e!#XG10*@r+j%7|bMo z+7-T?g@1ML!;mpgTFWH|@qjvi=lO`H#;lOEY9hUjVXr3hR(7{CmmO*|&7&Q;pV&FQ zqK|lE^;rm{1`E&+N&Hh1&;i6g z2hHq)t*GvXa}CKU17KcGOr^h|&3bm2i#KFe-!_!!+U3eOz>t$qY>ET}%z4$k37FK; zxAS2dbNH(vWP{O2^1oo~3Aq+#sfN|DzMiWeundIG4uISdhrP8^W-Z_>D&lBET1bfK z;pwu8dZ?%216$9XnTO*TGYcl$SPvZ+!$1Ob#A=_K$pSQm^Rr_t}L3^3>oB*LR&9tF}r4?`68(nWPgnvDs?`_RVpI0L}H9ktAc zwZ+FR26pFMM;CQ)Si_wV3~zP=U1i6%FIea|ZZPeol>aMj9#>sybsqkXxII@K22)IU zd(I_z{wf%2rT>>{45C|AfXEqBYHs6Al1B0J@M4eBI6>byX-x$BZ>DQf97ia1ess_~2_B6oZWpf&Ctu+heC zImRC*6>aRk3O<3xcdJzBy@L6G713vF{Xo9vQ9Gk$rsGgw3Dalgcei=vfLz3fc#b(d zlGi|(vc1p1;-GEzZ*wi+Qm&VZLyjT3bOGBcgO5^D#uP1xyW6^)`t1z3 zejwvU7(qrUpK$Wyt%KoD=}6bODuw|wvcojOKj5!dH=1ZKC@+0qM)^EezqM*xMcVkT zq>H4MZ_6!_ZC8Ks^dI(0TJK;i{YawRyE=v((QsI`1Lex(Tx_80E)|cc#RiOMpk+7afaas3I>T-oH9O9EamVXaGkSNbM7! zv{P^m-kL%RYW`6Cus4qdo@C*6?H(H<%T z2I07)HswCxE1lN8KxudUKKOrIIK$&XsH{%z3Fx-)wHw@gjWZL=Vhp+BG5K{o=X{O} z?f|3}4(HS!k723NCd`dbW`fzsxNxse8{1sD z5jAn8jLS8fpR)!)`SKTEp0nV`qh_Hh%MGY~i%nEsKUk1~Hs6=%WoUclgY&4r?xRt} zrk<8=OIGI%S-Bwkqf;dbmAW4&7bduB-6(CHsR9crZq7+<48uiCfC6`>bS^;kyWDHv z%9+%|t4P$2Xru&s_1i^xc8)+~H6rhmm2t8Kw)mac9-g6D`&g83jWXdOX(Rht%3YP` zrTp!v_)C`_#^O**vVw3-5nyq4m3F@aZq&_FnH#($|GwWa1n3_CTZA)Tr%X%VCu1PN zAoX~%eJ%vJ1{eY#rr#+wO|X~pH-nxkDJo@dc%@+3PW?UE3so&@FYHmY4{&1g*}@y; zH{5c2|H==EP({tLnDF>B!@5sR=`cPvZ1)tP?9R6bcH6~~*Dr`0#o^43FTWhuIk_q| zNDlF1?#>Xh2Ha*R_6zbPt}ha2+rIy!U;^O7sa&NL*3 z%^bL2;J7(ZCKgrQIh5H7(&Rf24}U^ZqWX-zOE``wDifJiFN3a5<hCk5Asb-|Ph>(#NW}qnTziItL=ZYcj{^IxF00rzH!naB%h}t_<-li&lA-vh z@aq2GwFq`)&gM58Yn9N>9H*`6L-b&2drEkRYG5(SdU{<&eKiqv3NRqVlBivhqfwnu zx202E)&5Q<(w8EHITpGhZ3l`HgtUZ`q7j)Z$AsM=u$ zHHeacL^b$4faF7_K~l0UHQJ=iFS}N^$cEytj~&Cfp+Vu+D?oycPP6OoP>-^gHsI!$ z#c`4@a(~Y@0>|;$uvU*^Xq=~J_C&&8Z1 zko0!$KbdpE@CyjOo|z=F(Z7N*G5TWqLqxAOMypLAVG1G|5wq?)TQ=uNnj~<4&;-Z@ zpGMyTx4RDUMoy>le*O*KJSBYDxdr6&bR$5zV}@^S&*On#dsi1#12%da0H zBKk?3`3&|CdE_;#P_yq|UCs$0y4gyi!hlk^1CfBW{q0>& z$F(rlRsRtDD;d+sm|se_0+QhfbbR>)OAOIU5A{O!U6=RTu0f3ce45w1c^5d@G$Fv6wg7k zh=Vw2uW();djyK5nBVxEmqcKs`zv;PsoBVvc=E@!#Dllr^6CGm%>JK-2gEgDk0)=p zl1}3Ix+yJjbkmfUIKFNAU)5vVl$JQY_P8;C4bY4jzy@eW3}6E^BL=Vmnh^uo0L_R2 zY=CCO05(7~VgMVU8S(#T8T{^v{=FR%sCh(*8(jnCeBw6rS%q2z3_Bm32+&z27O=nIBr8$vFfTy7wZKeg=YGT*>r%7jny#($f*DkM&Eb)iDWOm&O@IIzjdyCUu<1)lk<%)#05H8}Qi z3JtcE8{!3*oh?NbE0O6Fdv0!76NFtX<+^t9U7jT6pL8cRCjZucUj^#2^?ooI?-fVe zE=fN~Kpp|kVkH30d1V{U5e-~Ec~tayMP#p0hf4>B{Q!EN1Y~x@XCD%gxF)c!r6k1L zk_Q3c7$1qSiQp??*_mMdMmSm4x1u$)t-Bc%pkwE-)%fUDe}ys#5=R**lF-U9$3P)G zU-v$FJih>pSLKwj4T*8(hl&rS8y%}6`0N){df0{%{JcM?VVX`v82YR$!FAxDuaHK77`cntD&O4LXZwhv>*(9O({`~G%vvB6z6^l2fb%Vd# zNE0iE9}ACi%I-M3f-iJk_bX)>$hg59Abf$9VufeJ15>VJS%ripvn9dd6$MXjdP%Kc zeF#Nv)1sl7qCV}Wr~42j0TnWi<}uwEe|0MSu8Npq12+G-v(C%cOUm_7lr8sE0nyD# zso#$5gB71&;#^LyM>x*Jef_>uy#Hw z337UY;5L3+>49q2XJVlGMn<9(Rl~4Cg$SL zPlZmUi_z4%E}>$d0{TC)ZFew5*30>RB4Xj4L`LeU!&3`;$+Z<=2?cta7{6O2OcilY zahj5ZE0L3o2FS7ucT)9?gGwFiCZt*X!nX7_witksev;rW7)TmD3dv-Fs@JPXxfA<7 zr)VJS9o(FzD5kzMM@NtbMiaH@=2Vl)#XWGGU+Ma5Zb}f|E{UfD0lGaF?%l9RM=%QS zi1MVlXdF{3UTQ}1q@i_ht75A_*DXBPsS z>yiRBTE}Y*p`VpB!B<@<-}jff+a4s|eoRAY>mB-vXAtLq)0eM} z3*gJvj4LrN4~}Du#X6oW(Xn~9S8q>5eXFV{fv`5j7xwpjRAxsWd0$6w20H63(soK4 zq||FPL%TOWW~ICF3El*tDx%dW5RF!j&mn0I$4U}TjFu5H#)5eVI?f@Ed;gpE!94`NF4F1BA{$Wd4W zj6FgYK8PvFhuA@hAxB{iF!lghcrT_TAEN#Gt-~Dc5y7AC2s`+>We&uVStTnA5S{Oy z9Tgsd(zI)ZKg)rAflM>zljm!g!4EQK79%(a|MP1#zv`)*Gh z4W{eMtq+Lmo3Dh-O!SM+320{5)y{ml)NnA%j)CSPs)vr~KMF0CHQPvIX^d zZ)Gj0gMNz*a=;R2VNr40Nz&2kZ z*$_uXngmRVZGL}?vnD++H4+ox4nX={$cBI(2+4^$>3zG~X(#Ippq_NfO|UCZefX&B z`7dBtU}}umzB#sV!+dA>sPs{MBCvWvg+I?@V-m%r28O&XBC*ch`#pG0e>0gtyBfXe zvqIJ4151wm7+@jn;}>c*_6PyH=Ohz3vU!vA6EueX?u_R;uZ71`DCoJ*o8;PwaCwB9 z9q5M6hsL~Gd0+Cdig(hp=3g}f&ov(?X6Nz!ZOul@?xm$Uo4DGpiWg(EKG6QgQ zbXOEn-Bcd)`hp|n&`Ub^x(e00Vk%NQk{q87Yx{f%X(u@dyf_*~gW>sUI3R15>#VI$ z1CQ)jFQlRdl1)?~YiuPaJ4rA3Mi5Az<#f2eXxBUQpx?noZ@-a`X0UPPgCSGD(nvBv zx<3mj9^$I366OlMrt_mqeaTOk#o=6M)%s7p*KiS*Ac})K`Jyk_y>G}r@!G=s0<%b+ z2!nGfiidvkw_tjH@JveAPwGvMtbS(ZjWxu7u?}s`=6}f0)^4gVu)6H_>FYtCZ8X$o zYj)su3wz8y-|#n^TX{N#tP;IT6{_HQ<(pZlH4j%2I)UEAPpPi3;6%9&^DH%m)ydwJ z3bk$WW>z8}GEBTT^-)-3d8sN}>;s6v=jjU?l(?=#0ZAWJ%o?Zq-9s0<*-3s0F&)@x z5|Dcoa*Ba9Rn;)~bcIw3o##xoh|r+G5e%dm@-uIfY11o^iPDBomUTCxK|1_%;o6SYJ+E80*|micnyilUo(4T@b_pM9#6%$r!=e*zRyz^mX}rbe(xI}3t!_JQV_Yo0D%ZLc+?PBovSpi`zmkR-*B7i4U) zm431*B(&o9Cr|dsCIR|jvEFg_xeWK-i)I~wNnX^=TsUbZ>a&14278>PziU5~;=Org z`)K$bXHdL;ZsF@!eDy=7jbFPcmG0Q^fAM^3psM+si!&`0;U967;iHf9RSc!qtW*RG z?H%CAJ>ty%dyXfsR7}94J{J3g`U+QI>yQ*&+AEvMO}MqEtCDkJ==iiT^?qRrM+=zD z_KfnA)pbEp!3wDDHnUyspwM(1;43rPg%`T6dDY~Ok20O&B*KmTI&35LBhL=mihtdw zcq&~sW##(CKDQ4|{=3Ncdrn^rYNbt$Xisfc7nHhK4GIJ+3@HQ~y#m%}V zBp$X#wY)@ygtfg1j(PyrM2VC)swXdQiP5pzF*0-IcSin_$3H@x56F+9eTJP(kx{d5 z-&F-7_jYxx1D=DuC@b@$(RXE-I?g$LMxx3-xmMvchZ?foQIJ%O)&`cUS2yJf@?{{_ zov7~$D~4sB`FuI!F53G~+Ez!0_26svpY@i7pHFB)1=5FF8kEL<@6k?Y6_3JiECNZJ z&x;tm5MZzhaDn2ayOA1JIO^IXx$_%FIu|FHQ`MeBaB~}&bzy$Q zeA<+#X%4NuNSO#`VWCR;wJ>F#Se;W=Yddy!U$qHqVh~~@me-FC7sHGtg;#Es8O%PR zv(1qHM@Jt)@q!IzhbyH?>&B%fVR&ft%t~`&OV3sy)DAjDgB~RZ_4OZUj?gkL0yzGa zYR*y)MPK2d=P8yd#>I1l?TTqpFyw+04>+8c1)dlf2VO$bG1pthx8$9Gi8a1@an_t9 zdxFxo9e+~5y2sDQ7NA^8R@i(QkLZoU!q#zCF*2Wc5~z%%%L_?}Hp<$AO#8 zm)+Ta1!(^uRFh6P|KuItUmIfX#uzoTk2O;@ID{xTV5rbiZ7D7XFyuOv^`Z+@22j!b zdOz)0*?JiVnv$BNQ}?{t`87Z$Dn?_kbZ4TU%m9~j5I-_^;)fUYUQRl6mt#=@;gYHr ze5*eFt3Qm=QU*qUVeh+#0@C|XNoZ>Clg|Pq1lIb#=QPs0ohkUi3Ysh0tQuQHRVzDT z^P;njT)Roj&bkXaWeQ)17fZm#Y|iMyH}7gM%w^oD+kR8WF!{dUWZY^ABWPx*ZFLs( zb*gfk^{}LAjkVt~fGf{vB2*3*g#L&YGJCy3^A%T1{Qu*K7+9r>yf#&`OHyVNTW{Up z^XdNeNLA5~zHCM6`$Z4re*vE-G-o3q4zqbIh1)YuLg3Tt{gv?nA)MO2X)8`pT@;2D znaMpODx%88S-HZ~LDljcYVvTr#I)0%aBKiS+=4zyQd~O{zR_I!$JG_9YzEbpE2jxU zi<}|+(0|*s@KZ6P6iuiUSSH-u%@xa9=Cw=Lnsk{ubJ#aIWNee-LI2?MBr!LQpO^h&`JZBUe*WUZP zAH6C~NLLilxWRR@k^9?+H&;I7df&3Z7BcdDHE*tdC+2ShqElzHb9cf~Y+^#Nj*1uU zcz4&yOVhiOv; zNReg7*)3>k>Vku*(|y2!{kMum^TvyT+v8aBD@8;E?Tw4Ot3&v`q?7Z1CRC^g=^*8+ z0?hZs6P|Mt%@JT28*nukidCuVjh@jS?&Q{Tnfu0tr0ZK9X)*;Wgr=eUDS+mQJZ!NS zC!OiL2)9}5wf=z9$@8E3W}Z`@PSxVP+hNo*Oa8{0Z*hOS1@V;1opP>@}{YpK4vngvQ=k++2 zP|8JWa~^fu-6K7Ehc2X%uFjb8E?3dQ%8VS#z69A5Y#jN#y@N9QpwBy!NM5GM(v;96 zO<#CxItc7K>IUN!%S`$%v5E*Mf5hiINLNk9;}L;plH-A7qL#|s@KIq+@?+Z->aRWF za5Ae+HX2oY0L1}_m#;I1^p>ml6i?Wl4H6r zyss#)1Sj4o99Zm2#FZ(Q)lZ z=RG8YbvSkBGUGIAbqXVaI+yXrig@u+Pd8?G8C!u0l{t+SjfGq>l82wP>-!G_1|pmk zmIs2#WRRll5I%O%f-_EE{?G#OTeb%;%%s^kl%;Q&|7(z9n!z=SE>A0{2@EOb2lmT= z3w$mL_uOx6_b-WN0Dtd+1rnNTOpM;h_!N zOJ&E*fq#3fv3;$6FqaPC$C?NO7Lp(~l0vi>g8ggM3v_O3k))9p5^4%szYB9~4qU9t zQ(|ALP{C>yxbai~7@ywyLt$NDx(?kk)2Ir0-bx>$FG(+SW%RuqwJslj!&A5sTc4aL zEOHSeux9THiWbG~?QVxg)`WTW^#{i19jF`;5$7r(cc6YaCK8n;f8Wl_ixB&`ADM7> zWKJ@mE)(C{5pnUw7qObGYe4>wMHB6B+-UK8VFOZS4PWz9uNtqUMo<5)^5(Cn6;;ON zJ}8e4zM`_{ST694_pIdX)iT;#z(a@zG&)uv(IvWe>DIEz!ZwX8>t08@B}!< zaCW2ry+v${IGqn{gjFjQOsUSb$Ly8=AJjUSH=Er(dnIfqSVhM^6fIc*j~W6pYK!ua z`DZNcE6q7+6Y*|V0iFBLwCP({z`$Qm<{NgL^c8W&T7-Bkm?j0!!afz=$VtR-^~t~$ zERpG&V@_Df{|lZ8xymXP@)Ax8v#`H2%#co7JL#=8pJOQtna~7(tO!=_ouSoE2nzR5 zuUmtFQpMCo)T8?ksqty{P>@mEpt5RXvjlwwz4yBeaTf&Wg|!aDf0kUrR2Kexe`jV}V2PvTG;%&^cLqDzTu-#;G^wF~e*FEe6x;hd6# zw5D~Ob~a~l_(l{27xP^{PVc8CCR^QtwPmrLrBqQ&mvXg9^K^2I_VO@(Y_eLL5sesT zMD{cyre>0E7#hAQp;7bn#Ykz^oS*xXcWc|qBE)M~=Hg(k1~`!z&(dr8G&S5(AcF=Y z-x`{4x1Fyf9nd;Z%6rZUL^CG~`;Pzv&~$J~V(6+h>!Cg+tUkiEN%b(EgN-r)&TM!B zhVb?^Dz-`boNd(Mr)g|aEt#VarLrD5TdrP%NT~qup2sLQZpwiwgJyIX*rD50KU%_5;3?HYD8pn8KE%s3`&zXOm_4T)zyATdc1MM!;&mg-{EAxB=oy zL#Bf)Kr5^l^+WX0l6hcpe%Xk_vRMZ@84Zi938c7I#pvz=t`pEjaT%3WVtk8*_>)K! zRA8+w>!41zEHh_;cEUQt=i^1#NiNNYpJ?W*fTv`C90#En=i!;+5o-d^PjK0S3*Ds# zZTM@ZEP)CJYr~fw=QS=|C3TylwAsCu?MsESGbL+Zc)K@kdvxFaW(ifCc5UQcQB2Tt z%VeMZO=Qyz<^cMa#bAX#vtrVPb9qqG2E?qJ&us{H$3Cr;E9H%oB}r zJ4Gey0AB6-l}V}|sBlL04Tl%zL5`fd;{uIpmuDZmxD;E1>Klpid~K?MfwR^1dY zvm3}oHukiu>)e+_1yzQ=t`c7UxPv9&;w_S3?HW;@e_}|S+)-}Xi}e{wcA!uCL=D&p z{?;eE6EAXncnT)h&9yj&PZgvmbcn-`JY+Fw0koRK&cIGQE$qJ6BOFvXT*0(;`qx!{wFrRWCKSFXgKdtC?i&z9lt*usqK zHr~V#^7IWLIixTW56F@sM^i$7jjP!h_?<%BjkRS0Ohs$pYh`GX<#yXwie|zOC`%;& z1Akn-g!X8xdzSQ2O{9`Swr@&wqiLNa<+DH3%1J!Ho5f-E01^&{OU?K{BEk{JzUf8i zfZ*J`$45KgsUK`Ul*jMAUSK-jxak4td3l4bxb*WWR>_wlWq3t8m^=FlJ{$5czHAr8 zhM{qHv&eVS%0LVzQFe9g;5d81yXJqy`SD@pOD4LyhVF+KW**#DiRU7-H;6&SK@@UQ zP@*#|8*p`Oe|6l2efgcmT%-kL2gq}_(1}lXKg)8Q=4y)FoRJrcz(&#REc(7ciolT% zL^R!lQ;C$-Uu@#gY4Ds8zP87ZsX50NCD51?gr4?`+E!J+a*&=h(hDP(1XoRe>F?e` zPycAX7w#NXg|YpieXQ>TnWQs8?%9VQWc!k<`vV-38$~wYKJ%TwHg(gO^$2Yn-O1YLp) zmbMF9e~{?eCol3f>nGj;0jM(J@6HCSkT zEs^9p-E~ro-I%;HU1@~mM;_-hltNNj^T~=~JBFv;(VRcOB z$AD{d(s_d?0&PJ6#RZ-JS%E!<>{Xl&V^C>bqgqQTQ&KLcUM*TqH<-!X4f=;hU>08R zSYeTvZTDMp2{-G#B7Y`edJ{5LqOWU*xTZnUp%coIfQn%Dmb>l+@BzeTx>?&g(BNitm--lV{Lw{Ul29 zL6e0Hv2+amwnLXW2e(Le@LM~Je(z;BiDbGp?OkTnI+Hy_UdlEYr^urPgjC&~flnQ( zh(;xRkdF&U1+~K*X8Jt^&Qzk3SRIX-T<5C92pA9ATD3ZgqIk%Z3QcUtIPwA*YF)8| zEjk$XSBb7oqr6bd{ZR zS8A&bT@T;l4Th?h@E-bGH8v-xZ5MD5s`bJF*6c%}*1p&DECoy+evc)5+51O<>3A!m zg~be<87Yx#&78;${cnDNRqjLFC66z6H%A|@M&!q<3fI>0xmh~lfe4cxC_XU4!x6gY z_>;WZQ^weiP%>Mq5r7JZhy%tjL_sHl((7*TgYrJ$_$Mz;X2_846iIvYMU2bB)}g@S zHnh6=i(@6z5!*-H@AY&1tt_GXwu9k|pvWc6p;meoVfk`0o&8SkHo&52f?+~OWDpV~ zWq9gO#BUT0B>t?~j7352fkX?etrIAystgP2@u&0?X^s4tfnLCg_ZbUyIUbA6wSmz2 zzD`v$03O1x07vKpLxBMRrFvQ^#Ary)vMufYy4^k;^yOZRUVH+fl{tz5L_XJ6b7x5D zkDBX@r`SaVdHX()2=C4bgd7QIzHqt%SH)E0{HnspOEn4-%i0CRfYTFINuP0rjWp2( z2D)F4-nwcB2~`lsI0J2Pd{b>0(C7=|zQ_H#?%FX6oX_(xJ?XmI z{oTQf^@Pwj>h%ntNOiFG%C&6d_qoEF`rv3THOJmqBdu-js`D3TCL!l!i;*YXwipXw zPSLk*LTE(W=uBw~MpD5tF;2x?46hlxoPFQRLQRFA9DYm_t^LYftQom-vLmZpru=3| zB~9^Y{$@LXGfMR{Gu=Y)m(F8r_5AGt)2v|~htP0DBB^=^*lj6OyPJeKN_{uUmxl9+ zTiUD>-N%*dO%SZHX>T1GNT~uZiW#1UVt>#M&i0zmbvvLldS{l5KvQtI2VgCrR0~5p zoaIiM{@`~tV&0L6QM4RG*3R!(a&lG1D*~&@;XC0QD zyZ`)>z3x7Uj2cryrKU?a1M~{$XrjMJl4n|V;&SEKf5yr?TCehmn97m3*Epyur){b! zS(Qs?2qDIoeh{%>pTqPp3YC3fY&}RZ3`Na%N8P)z^472K8*R*yDsEs4Pre_w$qkA- zhF0-#zy`>+Om(%0JmW^%KsG+6Uh?vG;*2evok zl$u+tV6s&q6R32BH{{4w!m3mmM+HSMoYz$#_O)+m%&PM6fReetQqW;sn&H&zup8fVNGond@@`9>EK;iM> zCpUfw+h{>%zN}?EEl%Wzf3B_};{?)f3;!#u_^)3kL_A=poJvQfqta37sB~01EFG1O z`u{tm%r@`5)$hNQ+dfdNOiyYI zPVA5r?YF%V!0ue_H6&2n6tpv4m`~$}SC_xQZ7fd)Wm5WPe+Rt$#W>`G5CAk}AD^eGU=qKP5 z63vJwryQ9V5|7Xlb{6G;3?(3X#z_B#^`hEd*01p6*=nm`Ce|64?`-zu?>kn3$-Cr? z#n%=Zx3;3&^-JZh^7)fBN~zk%5jjt6ocVtv2#kPKX9hb43{JwqJ66Y1`o83;Vpvmk zh4k*ayL^9q+HVf54zj1mBv7Y}X%QV6{|^9*Ky<(VR0gr@&;D@G_5J$B?bsab=K!_%W&+*&Pu?HHznl_QFMwhz+N<_har`q}7if^b#(rUF+ zKa^D808_%C*(Rs9P$LCV%!msvfp)(AtS+NeJNtyW!&m{OjMR@8C*m60sQ_Opnve%c z-K0zx#*5a#i=ojt;9%4W36yIP^gqZ5lWzAd2?%3bv1h9ni@?-j7Nyc&G!&VskGb&Q zS)o=47LWvyZroYdUY>DPHp&}|ar{3k}U|ST1i(u653KXmM}qx5PbT` zmW_%@)L49k@DccbYu}-0)LG^Eu4FG0rmoZJD+3Icueu1Dvv;BG8dC;BKBr<#&+a*B z*r~<)`hVxIl`B!q@^C%+!hhW8M1E7%_a== z7$-Vow3{q3R?P~VXXYV2@>$gXJgT9`cO}J{X1Ko0zV6NhonUQETgThZkwP}SRJ&Wl zg1u8gBrnLW&Ohn zXuO;0d4eh(k&h4xKWdzbtWag>B;bOi1G6{kw!8}L=~W3O$|G3j_Lw#_@2Mh(^&SJp zrPT;_4Kq7#)ufU|IfM$Il?z77bxD9V#87 z+>}~ZEGv_D^lL!L+1T-8Mb1MNsKPx^^0`e7|MyAKH;oDmDVoij&Lj~Vst7^RR?rdO zmqU|1-7|>~;-FK7>y9-;lL8OB`-Nm4;JW(FjoMUak*I7LK!1-If~86g?9UN_;_OCW zyy{N3JkVm>-8!RfqM_B}RFF9Yrt*2K+Km6<0qyxY`X!56qu6=uJoB>kVz2+6es-3& zMWm|Br7@eSp z%%f)+>-LIMo2PorAZel0xX;c!WUj{e!`g?A2UOi%tWZy;eu{OHHO%WrsMShC-pO#& z!@0dE89?$n$J_$zD0Q-m{N2q>gfQWA;(x(5NabJcqBT56YOZ+3=Ygwq`m}Gaz;i^4 z&w#YEaMd8&rmaoMQP7^}@>f(o?rql$|G%EII6Z74KekrI0a!n8mbLumptMBzk(OMq zb)pTwK}3T4Zw%IKTD<^am=esu5Q28U;&NQZga-ClTmqa23A6nWGG`}77X**3Fsb_O zoXUc}$wRtY!?Wty$r2i=oL2f*eGrM<#h?D`6OR!q0vjKmx`_BFG}wsMCDcfU@*xXI4hp?Vg(q)$iqI4}_+*l|#-xNYPdw~=x1tO&2(KPV ztR8+#wTPNqI~Nw(s(>L#f9RK`@a)lzzf0|l?VTOsDaoWOr@)7gI(`q;LjNzo#xC3m<29U5h_y?oY>`OPQOpFj>Lhz@2i zKR8O?dWXKROa{Y)omOD8Z-kRYTCnEKJdesGr0MJ(H?hN*8~duPs|KaJ_=`qR;1++F z#|7nan0aD z_%|Ax=~eG~yU}*V7)=qwxw%*^`MYwSI(LcMrDt=KnxvnI|3KWZ<`((_FBPy2ZJ@X} z`fHx5vOqp71_1!=^lC`fEiuu)FVqz#_G!IYob&q_7wmC*sW(4TYY@ViF;l>Z@4C@F zSAa36AU?%O;A-ZmhP3vQP1l?3RWG2-KTTdLe3{;D)}YB^Fh{;JBobZh-I`K6CHL>Z zBK4m?kgkx)W541MwA>JFlF=jxH;JF+slb5P%bQ-MG!||8@cXE_UwTFRb0qCd>Y~vj z^s~Q^&rqU}Kif{`UEJ@B93%Gr zsEUAjsf&+tUjzcpr7KABIEjOu8P8_S2vqZn>SaI553GDh2;^ZfoblP>_y;$YgPEI7 zKf7-Opp@URtbdhDTfdfFfD~wbpoqxv>17Z%Gf`H;8q7dGsf7vuSiN;j@<%#t_^i2c ziw9QJdkOy5(E8$iVoQ1mQO1TXW>Vnh&b2_F>A-uPmaSC7Rk6^b+D3LS8k}Wa#osn!}H$bW5r}^3g?Y7*L zsHy-mBY{%e>~C^9Cz0sURhE;lTawe!r?KU21PN)!;zqS4LM6at;RA|{TI)3KI0FjR z4w!7M6#@#)rYur^sR(LMMjbGPD8SHbF<-JhkX_aRRQXarXTgSWpK3YdL_;s@ir)am z;bFr0Z6A8Hb6r|yJPNo?CL>tMtW9>h8youaUZM57Egmu)gPAk8%rp)8*xp|6FZ{kC>2~M+9LJ&5uSg?%^@mTcg1X*jz8ZO3tI=rvOtFLcS0qID z98j>oSs!e$gM#l-4ZbFG+R1&tD8A4!vKT1C&5Y(?|B{B74;LIK*yR0xBn+XuVU)Bac_g6oo(q`Y^N@!4z)N2DkA z%9eDeo3w85nqbS8Zfy)?_xm<#Gul!+N>09p9Rot`Vps31K(sXyjK;KZ9b#3J#&7Vq z@3a4jLaK-6c?XtRRkrm>(QKe1R9LGp2n7-$>b7tH3EEaUBdu&2xm^v-mwC&hY$dlv zQTfD*$Wk;?u!?r=m$wo@GCK7#+JVweN$(sG5plZxg!9jY)Bf4;HkAlEz-Q0=H9zdG zU93K_gEYltw6iqE9*FwXIB_`y6k^!z9cL+6T-VI^CwbJ&$9IFMCBoQarxoww0P-j_ z77m7h5MFhhJ#N;yIiLT2ytavFc?S3QUPs69nH1*yV)UZ2O`K`xEpGCkLz?(k8^l0} z+mcp00#8eO6o!iark@HJU)F||fo$w*^f|S4Z<+nq!)^mFA9snEW{q0lmrb$aO7plL zV%KX`+>~w$-AOmvQ?#pb@I zSjWoQn^wZdXUqUevWFvvl)#}y(_~jVJ+o#%f?FpoH_93hyl$b=HTwye`y?{uRh$~m zUf+)TvVBDmVj?>8oZNQ?;5>5KA8!JEh*g@E)%#$+rTp><9!;U?q1gi#3u@~V4^L=LUIyVP8(6m0%ZR3$3 zdoowt`o|5A+gb`-&3X~#i&)3smYtID32nkL^MWH#cq_$_h7|Yj|JgW(2*1R6DcQiDtd%90w_*CZdpO z)AF0m_N>p(c?Ca5K;xd<3isrtK5fGBG!m|pK7^W6p^%JtO+z^2);^U>k2^}K_|0PL zX78*peVpHA{!YuXRG_{2VM?)gv^F}Z2aN;qlahx*41N@t6_H#pfM1xq+=?&F z@cbCpE$FtQX`yh}dl)_BFbSr~58)8A-O?@+O(h`zVb5Fo3Z<8YAC%dY$`+Lzh=ZX}NML8;$8>%mh zVWQe4L^6B~%8u5B?i6ZI%QR$4>%Y zo@R7BkeIK9Y_1yCwl+1fpSp4UsSM@-@Hzx63zktIST#MP9Uc>eWqb*a+-M1^_lzK#~U%{)T}buNf4kifE~D43-g`IduU$NI|(RJS=5` zBwDSS;J`crtHSmp{U=BNpeJg5es(u7pW`-cy-`E(gL4g0fpmT*ce#3BYdHk zq0M?J_kkP0`01i)xrl{Q)*IoMa71joW3^fqgzJF7SMMb_!_`Lsd;zi6H3y_eOiVoS zA_i;dnpt>f_y21D?+2*aT2Ikq6S$qygY*lVYSAP#I{#m&-GxcW=(Q$7)G2QIp`TM#qH0oBmuBgoLzRE| zC2~=yfpyZkiF)foA6UMt7~B^eU2eg~_9QR@2 z;Ajwmqw?n5^VNlqVR^ltQ$7+*Ee8k@;Kn^%0#=SI(ylQp%C@lHU+B1U948Y!)>0<0 zgs&aY0vpjUagbIcX9&rJJ~`3ky%&g|j^c1saoS{E1Zr5^Gwc$*(DpkL>YtD~X~;x| z|1kHz!YBI4Y+;M0hTqXL7aa+=KpG~DnRNv8kWWkY_#_&s#l<@Gs4?IrZUKl?#+@)q z2SoucjP^y?b_w!^^z4%oPY;)R%dXTIHdF6 zj&e*b%V9BUBp9TEnWly*Y1%vbR{{ZbS*hTL0ELGOD}ydkD(DwlJQ24ekiBwirXG}b zlq7scMPfol?^Su*^*VAgrv2=5!A+Dm@?>i$@@<}M50m#OQ%YQ!obo#JK55b`R*4b} z78G+KLr)5oxKDMIYGbkzkU?FP1S<#a?5ie$7+0DCCu($pW zR=-6D>V=H-k7suho1qR;s58vADwQGv(RUv|FDVNh0&X>p$)$&G>pdD3sO_hPVuwkf z8?Ry)fzo$<^F_r_fKbeQjcjq8-%kPhO^~x{m0w`4baYcwLKeOp(#M*W%V!Zj86ELn zR8r-VP9v#kdAb+rs6!mB7H6T7|6Csnn*P!(9|4x%sP;DVTgI#w*_mrTxHD&W=ChHf zlb|K+rK@4p7>$OHw^0E|bJ>7(joi9%!h}7(P07vi1RQO$!y^`u-F7Nzhw#VCh0gmb z&24oTyIK29e0r6AORql(Z`dijn41{KdP}Y9rexeH)>p}WCwGb&hyEuA4DyE!1f?b~ zWKni{oI&C!d8V~pHAg8mSpgb+><8q&*IRv1wDE?#&sQ@b^a+aRmWQ<8Xu^w<0x0#C z_4adxR)vXwOD`o68FYKvxeu0oq@zEEhPcNfCWAH6&mn``9*SUgJtqL>9*c&T(B}&6 z4Sn%u4RE535Fqe4*cWzUF^l9Ry%3#gR1lSt=DR-BX?Mr9Vz`6&hO7habYJZ;7AWF% zm#;EI#*Zc}prH-K5SrDllr|Myq@9f6wJjtKaCW1O_r^Y4_GDtFp9oPJZDXmD6I>~! zGo0y_rEm@RgDZ8w7^1b$Ng2u*AmrABa*zJ^rbX1DcoYM1YunNONypw?L!i)Z!%bq} z=ezWh?(0s8l06SZEw|k%y!DZN;yiw+t=Xvw--L_CDhZ|-7_hQTyi4xB#&v*5BJc4! zuV*@7y!kn9Kqr`kFNdK0yTF-V3S00k`c0nRGlm?dQQiN{bZ-#MRdc zX7sO5iQr9l2$192^PqA}usk&i*cMu?0FLAIBp&?iGprraa8b+(3NvpWlC`S{i1Vs% zD(C?;yLQ~Jws=;I+^2PZMt@TN&ts>Qd}QNJlx|Y?*&RI?d2)FcJ~A_9K==IP##fq*&rVb! zkXLbbC@-83ZMI`#PXIXqylM3Gj0BtRZ&+{d0~^fRi} zQL@P5iOjC%#bY+HPeG%|U=N+@cdNaU9V(`QmCwT>v ztJcRTTl9?y!{ozD0%6V??T4V`LECx38Q@ZsJZ@+poQBxrnB0#e1Y9q8coOABlA0NQ z^o_H9UfAnt+_@+kokj@zW*U1EeuPqljl$%mnvx5uG(zwOWPsQ#x&(s4hZEffIWf@S zy@|s|U08VLF*;B%m|5dMU_H(<=lsoVXij}kRd}hrV)W+&bsaZ zE9g*(0T}Ws!Yr*(0k6V!V#mSz(e(CH%+n=U*>l|%UFj8o2OOspm4e6GGNE`-EcXm* zgRze&9xbaS^QN)!)^OaTRf=r4-n7|2x~Z8XwTOn2jD?ovPcPOvsIF^7yVz&H23NYe4Z7rGpS zmq>GXXK*GRw0;;#!z}Hd;i13rv|%N zkD5*?gk8@NY2tw*>Vac!X7WEOzRUGAl=KXF5?>LARzT(eG zRxmPs0jDm|##@*_WyQ2OD9RT0vPeeH-&;R}^8Q*n2im$2o=-+L>RrMQLWJ0>z6p2x zdCA{@X{qw+Zb*fL8wf{X<2Ai*N|aqWoJ&YD5`3mU(EG8{3WclZ*BvVY_ik?-6Y6*C zVx&AnhX1xtuVh_j{}88TW7}1^yBY6QWMqpHXjJz?wvx1=3^PybYd5f zMaqwp=-iI^B!J-DSIPv(jsGIIVV*= zN=#4#2PR$u#1blSm3JJ&PZs)IL#&tx!- zQ9SH<#rVr}{yn7?i0w?u_nJ(^jVNXRz7Q(X*YL<|=SD*u7;RuvBK+_=&>#pf#5!xZ z{CSc&^ZV$K`x0Q2?oLq+1_QS4`?j%E-lc3>f^1`b3{}AuHJJ#YWmTF8ke~<&Dh)!t zMH@u)lSjIuyn zG0itBll%dJ8#+pjtsQJfgF;kF$_g?7OOeP&j`E-qqcz~1$@;x(w;caQD>78v2Q5AkC;ci5szTu%$m9^BsfzwX|CLxU3+US zaFK@kHQ7xK3b1T=sEGy#f6UD#P8l<1VxummGkrmT)$-LS?0<&UEuaqI%lwugsq>)> z1<#mE5%}siKeE(y;Lb7P!dwcSMk=>3U|Jrtw)S|IX|?7y4i+lDjYnd$qy2B)!^aPR#d(+HG1aFoBXNJ4lx!6V878Wv1pDygb6qaEV3~ z$3d;!LwIy`sBnJXJ-a(CJ{nCYnh3Mbn|k`pg$!}<6JM7?O|dv8WO_npSBMqFT-Fl7 z+7(qrML}sb$r^_kKo~t}jvLw?S`UyWpobYm14lPxjumd;x!NsPpJ3Xl;IN_=6(?;=8$x`L^GY+y~OH9xUbD0+l zlIn}pYJtu+tQY&PT|Z4T#Z|P={0Sm4jBL^t|1X|gdQLMCw+-cfo}|PmTm)83U+H9h zs%S#wc{8g{AKW6^z8Pi@kq^hFg*y?vgmxWx&mJqaO{wdEpN6_%JankY{Gd#;;Gri; zIr)qw?Gp&E)eAIkbj6ZHd7>1VERE`i0w(Y%si>*Wln>&KGy2O~S2AW-J4`UD~i znPOLSLrW-49C~pzEAQ0dWe#A)%$w|rKZ40<3%GsJHzPfD>PC9w#D}0}2dG^m2(X!K zLTGxzW(Wvxt6)gs)P{Q8fDaylLV*AX;RBAK32%<~N^=cvZv-}l6LwApg|k$oxrnXu zVeP-vCP`ar1nH7R$H%iH1T$J;C6~p9;pEbGPq|b7sAf-N0pUQQHP|%z;S#VE%q<=T zpCD0Dz5|hq)Bzv)0lQA_^cvT|?e&2_NURf~`N~P0LIAeaB(!-dB2MFMI$0!0YF5gK zu;ShcGC?B+4Q9|AB?hE3w9VBG(Oh)8D!@6EsXO*Inb)n==o0yb4-t}#nFA!Wm%w8|s=r0N5*O)NJe+e|;I`Da{WMDnNY{1hJ z5*?+pgD4KuapYw35wNR_R&Zqpz-K5d&y(C)FapLz9OgJB1(Czt*jtQ^9Rdac~-i?F6 zO4L+oa4XOVbrUx%N9U7wJ~^@P3s@wNYXRUOl3|A4uCO?nBTx?gyp&TICk9_#;|gSi zzerepsWu|iKaDpONEqBd%QojVTIx2;*Po-0hq!yEE>LabidXa*Lq*ROb^=r#zmqbqS~WPgoEDb{Z=jh7DpZUxaC+iFazMOXWPS?dOt8qyq*#7XdFdQAacH zwz$CTbwGm9RV?RJ6qPg+D_FPY%14YnM;Ol8fO|$Eg$w-AiY;~k4s9vz?@;F#sy(r1 z01%370OJ7?JT|oTpW)n;oPO!8v;~|PL{~0Cf=RF7ax7{srs#W1-dEg+#^$^$fnPH) z{mMK9;LOvD;)skbv-rqS?Q?IEY&|!m7b-phY2$^VisE1<7SQ7YgqdevLTd*#13wz_ zi`#(r8W;CLBg^vtqMw9$t$}{a2$)}rT#2AdXp}enKBo^_aI<5^nG~hr(v<$%ZI6Bwpc$*ip6|q3mtWrO(*S*u-1h zA?6i`S=%?C`b?)YooW#-fCyrsx?&2clz`1n`xZ*G}@FpynHT%FIfE#d9 zUjsEDmxS*#+tv;4$A<`Ebf>=Ch%m;dBVG5#yv6L)$>`BO^){^ql11+NAFMn4+yQ<% z>(S#>bv_axNXS{kk_fvDd2Dhq9mPIUb=76Q!%tx4mLgB4PCogR*R6DKRH+6PLUx<@ zEiIUOtX(ALl4_aw2x~EvU+!i1@IsM00v|Nm=FK}001KHsL+1u;mt~#l{G41-}k@o zf8PJS|9k%T{qOtV_rLFd-v7P-d;a(R@B82PzwdwE|Gocv{`b>cqPInEirp2uD|A-q zcAd`k7hxhH0000000AaBN-`kt2vAQ*$@3puCuZX0I=g;rQn!oD<)=_ZQ&DTP(7~O#@*40)=40{r zIQIX-gRJu!0=F2F?@F=WGl!Sr?lA*F5JlhM6LV1a%q~B1NS>HHS=b3Lsf_0!N|`|? z*hErLOhBS{DB{IZ+gmw7#jz@@mJ1+YaLdWiEPj~<8itUfMv8a6fQ_N=Z3gDqSsDIM z`8Cp6H8eG+MeE3CmMKKHhx zHs&@;(L@J?J}hNofDy%)M_^zYkskMTqPI|(ve3W0z6{{rXa zce>8Y^WUB8qi`aC{uZcr@)?}!dNjWLbuq?}T_5!#Ym8V+SL%^^&;E(BrtBq+L?H)n zzz$%~1r{>NH_RK|dMSL_3?}%EJ*v9QpkfW3wDj@6Ki|VKUahU`1h%&cm;*V2tmWZ~hOr4({LvaMAQ`{mh~GjFL*`zt<~FupQ9 z`Ls?(a~@HD{aaQSIy}VyTu6H$HOQ-g;XMJ=8ClS-D=r9ZgGJ-wyZqQvd{oaU z!1tt&q6V0Q)zeu$U+A#Tg&Qxw|4U5oo#{F{dni@@6r_Xl3(y(b?ciVJ(RkM3O1+id zmowA(i}M3QP}eBdkHNVmL~>e@Acol&v?m^|DlWrGyG%s=Rx3rdn?F8uxQiA^*xb)w z6XY?GWoW_5$w~jVY&ONQfBUM{}j&0B^hi6wkKNRa}X}mjpsmZiE zZw;70yrzqlq;NudMvZxmMke->g#k5bQ9DY)SYlIb)%?%G`Q=(MI zgcq@ZXc&Me$Uxc`y8gzqRoo!QH8C`a5U7{M+B#y4G&vZyRH^rUf={s$LY8heCP}0- zIQw@CWzDGb;xO+njG{m$CFiJWaL**M!M(N*n1aekoElm1i*BjjR6}x=neYaSnjKwU zVe8WtC3L$jEtH&P-@o{H_$Ro7|5p;;Is=nhESsD_{#7pTl5Xs zvKcvFTrO@DkCs?|#qF7i4mIno?DstXKHJsSGsa4j9z_H1tGWzpA>#AsnI9mg3Q_w$ z3iX`!ik3s!q>vj4%mzqBZUAPtjvMaBQ@ax;fdk+?rWLu|FcxAkKoP}y_5=U`a|HVS z?SMhH%Q37yxGVaGg6ArNz@R6vbWWuMsitS~61chHd&G+))K7nlbG7HZ!JHj?o}90M zLAJ{=tUb}Ojm>?+5>k5ogg=jPhqqSp)B$n1!CH2_Eer8@w336JOxK`w$UU>a65=QlH?PNU`oV+HN%)7R+ z4k8W9F#lv=V|htMbF~}h%-VG^PXq!EJ6~6TvSfe;QIG+As0R^QlR=TA`S*bUWszPI zZA!-eKz7Sj&G3&Z8ELJv{_3*{lV^C2Gh${UuT@o*j84sQ{BdsTcbg6y=D4(QEYH`@ zAi`!bm-fb(0|2gCwl96p^>D8!)-Ekfp3jpE9`-_e>%WhqUfWepWEhNGj*zU;R4ai6)oX**qK z*4p7X&#vj@*)TZ42(mXwa1h&QY>{%XYW9KV+X8y32>|faS?wHX(Euwb8oN>!-&`pf zNM1De7wevk%0?Ub+tr%@9J|W7H4h2VvY~fZ1V1mgv=VU;0M4BoqW2)@sO>0i^SJw# z)AG|}`TlZ7xWH*VUqpcWYuf0=!Vx?Hf{6uo0VIqTcFr;4L_9M7oeo^nKC#4qSt+d( zfNK?lw5xz(9v$gz>@c?R0gxs9>&VkVPwOK(3liL`zsR{`X4MebFrQ_FaIJNY+MOHB z+dI*fw%#N5=N_qF$)uSXF=w#)SLII^O=lrp>*4?`SZ3W6t_n|AijwqIHz}L+jch>#M1om!Z!I_DX8}lS84WQN3Xg( z(IHKBANkqQgcmX2AOn)xe_xIT|I~_eTLuq)~T~EDsL_GT{k^E@!mrnIJ zoN^SqV+n>3l9WQDx#3=B_aB^B9F*kb^(F-kw;?~igncG%G&jYi;9(>dO0?rGJMNz$ z-XgBc31w=fXPxLk;6GJ1?2RRA@;6bQ>33g>QbjQ)7GGA}oWvR$AO5w8K}?>3a14@; zE&d)!)~XI;^0-t?t@$oZ8ZQJAH$v#+>Nw6O=kLjH)`stt+3>mK8%PdB1iLxeG9U zKm-RA>y3`;YXQzSyT_a0lZPiwFGa%0UcHKZ_kRea+OAZy7Y0%dLzMGn`FGl&;s1*> zk5rf3$(_Wd5BX)x_Fh5Xq0^xKbIw-ky5xU~QqB*O#6+@;6*A-d4WNQ*CvZM-B%TU_ z-wHo7wVl$6APymKKg-Y|?y-ky6C-?HK|DlnUcNtGPUV%FVtw?}HdM(e<(Yw%?9>7Q zJq1Iv4Ulc~r#uIEE(xa>&*0A^WI;I%pUC~2UV1|E+1yv{;Ut`7frR0LH_#uxH{Cw} zq@Gl4g5v}Ov2vS(PM~#4W@k6&ERIs^mOCVjc&N%HF4m;Z`EOIcaI_?M4j=ktU#2dx zZs$5N4gI@z>%c})P1)SV$3N=`@o&VaMs{8FGH6W*!GuKN2onx$tGcY*&SX)BuZH8a z^C0=yhHbmxh&W=cJ{{QyEi>bMcMMg=4Gxh_iN&`b1JVHtJL+( z+N(-QWwa!B4j=ktUxYD(LB>cP!W7SJU@s+*kNx90x7Lv`?^U8vA z^qJlhSFshjd&51kEga@H<6sMzGJ=2Z2y%+~_f4Me1`7vyl{0yi9fZn#R2aB<9_GZ1 z6sPfD@I_FX?C0)9bY>1uFT66%Y%%X87z`?zwH3yUu9Iu?xwCDJ_DIlq4AW6{O@OKQQlcEQd`PW=K?nbPlW-z|av`C<4`fXg2o zSD;uJB}r7;X?NJr>{s%0AxHp(XbsA%hh@2ko(*Q6a}9O~^?e9CgPzQ@gWd;MMsFKbXJNi&bPu_O!@?%9AX^4T=|i0h!UA@B z3>;4J8#0=thiy{1K^4yKc19jZY}LPz=@(;bS$n49QIU=}e@xEb=$itm7yj;v260sF z{$ILFX8)vJ#JTZHmFGb~%aFNVJ)7>XnU`TF7%u4CKNMZ$#fgNo@U-qj8K8TBC!_0$ z%TN=X@**lFQ+ur;uM6|j=%z^$2GjqE%s)aUJm4)IF@e3iXn~W+sm^o<$`nQAQYs$;;#uX6_N;=RP<2 z_--~5&>%OTmCfTj18-MTN0&I)zA1jUkxR;TF%jBAv0mr5sibARZV3{l#{}d3aPd1- z8i|=W0DsD%=>}S>WnC@d*Se-R<}5cjq0a}&>Q`%NM%EDd&zIzN-Kggof_3jxs-myb z%liiZ?GJx&BBy}858&>N)}_Ttultoh$^x6SO!KO44>h9ujrD5_?ds#aCtY;$;RULc zjN#aY-gk}pmnP!^RCaO5?Y0Bx#)H`S!y zB~VrRBL69_{b$Ml#~qm#J!x`LhFDpLF8^Hy+0X-D6I$d&0FV>?0 zf2bNno!yAq+;%gD=s61eO};EfX7G~Hxk60jUEvcE+%0-ily_T15|6y1QypI!>H^$o zqZCJ0_%3TgCTpXrkO8a%(Sc6xBQ^xH=v@kV-cW^LGx7Kw%rmu9Crx_rO2|Rq?_ShU z&+*V)6j55HD^f&lDyPIS1ECj`lfAz!*p^J@{$Jl*BXLg&)=#BT2^(g&s#t4jv=M!L z{`=ExjQS#>{Pyx0YZz#TAOX}>nCT_no#M0DDqACTHJ1NAv$CZBpg#16Q zSEgD1dHkFfPS!V7b1&p5CER2~PdHs~sU}Gjvlf5(bRK{pUplbfy1#^RCY$$)g-HUv zN$ujsMsYt4{_kArKVe?^{;$>Ub(yA3w|EwVcR9NN4PM!ByOno$Y|dp3uIvXh`i{;H zvi7Bk0BfEl_eO5HpLmXi$Mue?kzs2$`^vl|F@u)DD3ACF_lsk`QJ4GqrNiqGMHjJ;1q>G+&}9rB#%Q{t!c0u25F zvjGYCu`97aB}|~XMCVC)SW18(>a2DAKtaB!N%@pF6O#ic@&1S8%CMQVkRe@PZ*y&iO0t zh6HCzirZjRz>bq;je=Tk5)KCKcoQnnm6F}Vc0k5e943!F9eW-+4|BM_5j2oC(rU;Y zUrbOnc8(f6AIHy+#~iSDcFb>b*yqO|lym7{n`H!_fBxEzjO()!mZ1I!5qjgz`k)YP z6ivYvW9my>4nj^m?U_+qr;JxO?jfs;zvr# zF(L z1+)_SXLQn~h>lc5wDTjg*@{`6TiO`OMfon$?w68xlg#4<$9|{{gQ6-aQ~k5nuNOvg zxLz?gj^P~&p5Bh>hQLSq>Ip?$JLG{aITaI5ARSMx0B9qDO@NZAJ{ z83S6_e3tv?zP&xW!iG}W**e;81X$!)VLeM>a$vJQH$p>>Zy5g?+E`2OXn}>q=G9WA z@kK?W$h75J7E&pxree?X=Y4jm{Z=EF#5Y|n>uo_EtfcoBoQ!TqQ9mPsNJJuct9YMy z+Dtb$4zI8XfLV~6)3w2Z`AH^61=UlT1&FWyqXfh#oU3u&& zT)SQSP}U+Ce+b%)r38<+bMlDmw}wSLBNeXi5ug$?7-#@KNa-ZUcVamxgLI4#;?n+; zQQQ3*q>3B3P-Z%Q)O_RM>`jv7?^N;(sPxXdIq{y1z0Hn($tchl8X(f1!fzJ)_<5#z}# zWCOz0>)l0~dGd}VECZ)$B=QpQvxS#X*E@Uq$&n8vl0DNmy6j)V#DsA2gl4Sf-E?|o zMeX9Ig`)1ftxV>9CqL!}OXZ-VL=u1IxZE)7DmFGu09_w(^anp?gXbV44ZMRtfI4i_ zItix;WvoFQJjlr!?SHhv7yr!UHbdt&6qYloAWg3XHvu7tuWVe$`mvOdx-XUMk1PKi&V?`DNiz1W{ZrL48{ zpn4n%#C3N7)r`&41ZowO+8N%o{>`6XaFq(Pv*w{8K2y<0VlwW3NdtrG2r`4EO-1o} zagQ;AjUFi}W9Nm&wDfWZxz|ijJd?r4MQj~iM2qL_40Q@18xal1Z+|pJP~`nj z0V?taCeM~Eg(Wj?^lP4+T;Cr(cm|gIa<{*^9+UGL2)o@MUbm|6A@vg2&&+iJ8#B_X zGyobi>%Is8(%`=so&>mfB~U%eQ%{(Ff_z5gQxT8X1Yy=2DTmIurkGq_{62aw8S2Yt ztwaToX=s&JE74G0l~}#=FiXxjlu5N19_esFbz!BpaZ%4Zh)W!-918bk2o@>4#UI}|^Wi0}fH z;k#ma8$7y+m^-y5YG=ac`m?wgB9zP}_rGf>j84gq9I8|b7gdr`q}ETnH~7{Fw$%+r z@flR_(xqrqvf~o`3u#eOPsH|+ls_}z(XmNm_>T=b_yFNDIm-l$zDIFaR!isF?uqVt zL(N|PvmeksAXZMrbp9!A(&w%Iy9lfuMd%#xK{EvHnNc2uA{z&S+euZhrXpkES5+sH zEn$EvVSDLQ9*9{Av#LtSd3miD{>@`!8QPAUlI>jq*^tLpG)5!#;n6eSDFpdSRv{A( zzDy(B5wWRr5UgQXS-9SyWzO6&AXNUn6vJb(sFHLxhk@Q+jczBP_`hf$3o(_1COp(7 zJU=g>FZ%Cl@U3x=_{UGTAyyxT5jclv*cL{MC6of9niuKm310vWKrmdwi*wLKhjrTyxIEmSmy_!3 z1#&{PNOY6Pll-CY+8iLZCDPXTs95z>8<`P9fGjblM)eHBAZ3qzd-!?F4W4<&co(;y{bO8TCo-I}&{Wa-;dKZn^(a%S4O2z^D`iF45nTkaF-W{gJkm ztkeR#J)!S0v?k_DRcidIHygEG=QA9R^FG~a(e6l;=)IS4dXFwAdW{xDIQ>I(BBwj2 zL>DJS@0}BbD5vGLBcdfl^x*Ol_2={bAAU1CvoCgbo)Se#P*5TGO85Zd%IrB7X_1B>b7a5gtL z9iycDg-lgT#HtX`S)a!@gFB49qCn}+8v_&aZR{luO4B(p``F^AqR}N-e%;73KeR?k zTRH6K+lzyoj;=pd=r{FoiSvrOC2~u!*}5@3S^^D?K@3P@vn^@ty-&%%j{u4|S=c>m>YK-y`9qH=G{*FCUt$ zf;r|UMemV7N($$~Ft8HGPe$(I@Aq5T5VTK<#^v0o&nAW|S-Klh?|b8K1YG9uqxfJm zp5SbKf0kQ~%2Ygz;gdrn&0in`J5g;3jBU~XbHoZ2y0pXr?L%*fO>F5V}^rz9y2;68k(T#Bg0|j(FN@6!{#Jo z7O@Qf_Cqa0*#Dk!D%}b<{9yCR9l~>@z{eIZ4cd|)5Am=Nk;Jk$sHHK@wr7Yd@LE_q zaI4w{e5ob8`&lgLq{8X3i*@xXzzHQD|J?(NsQh4_uvd34?mqlPb$}!$eiDq10F)ZL z|IVH@?KwXO`-;<(PgYIUhpPsYo9Uqng53GS6zSg=4=@jWe>c#0`)$Dv@D!+mM4yw$_wsuKdB%j;OJFFL^U@x{wci7H&)T<*Gb8=l}U+b!nco%2KFJ zS_LY9rg2yiJ#gMRuZ)yqz=ms{bq>uj9^jQiP3(;J9Mbi@lcsXdtftv+hf4O`AxjES z@>_26E;(m&aJQm9k<^qA)%bOSn4)G(<(#;JYAJsDLYM+rgM%;F6{pQ#FMQJv?%;Rh zyjPYPb^!Dxb~1Wp<}-7YhbBOr6^slLXUs)BG{OQ@Bh~>>4iXWR?Hpd3svhP_x=n*5 z##g^UMHZv}TfGAae8~TEHYMyE-mD7$)6Jo!+e!C7B=|2#KXaMEMPZ+!xuL%1s8S{r z!3a7?r)?s8x~_H}adf%5;gHs=w*En@sr~}hyO}piO`_ z=5TzdF}cx<0K~Qh8Kn~1Hgl1t_;UXclbDlrlNWw2)f#y?H-URcz+1lz7CSx7S}|lL zy~ZAp%InzvVC2|Es2g)fQP@5GeXow`j%SK`5ll8;fUY}zbzWOp9s?ztvN8WxIOnz-#oHlW0u zo}L_+)Hb?L_y*3ajLDg#+-U=GaXk zG(7~@Q~MEfd4AVH za@&*cWO9gGbS>;d{72Zlc6f1U_#IbmCRw{})YQB$ojO#Q0m1?#%{O^x_Ze6d^*9Al z#w6X@gy7$xfsAZF#PcKttGlii)hc{aeuuG~%g)-%%K)mP*hC1gyi-+fJB!3Yz%R&d zNI3~BgHHdXD*3A9GZ{gwPeF=m#c_GO=JT7BG)cS0C)ls69rR^a*c#wJ3jpvYd4!>$ z#%QbXpqwbX^$u;^kF8iov6~J;91dwoG^0sW#;0%0pbS39sussqM%rC0hiKB42zA2< zV8?KYNu?jb)7=|u7zR%dzE(x4oqtBPN`5`SDq_ciQk{gL-l(Po0*qU$`aYjK&p)!titNEHM%T*)9o$cX& z(|J2aW(>zy_xK@4LGSzzWCQ(9d0$^}8BjeVtlB-6{u!RYZ_#VOgVh}BDZW2S#OjE( zY}H&>DX{6UQzh~LD%nazlU91-))C9yVAz>=iL#uhD=WAi^lE5 z-hAf00Kopn3l`^S6nneBUlSRVVADWaA#B%lC;J3sYJ5%`*8Z$3%k>Ai@c~jGV(Qbk zz1dsUZl8htta`3c?@plbFVGzKvW)bvg2GY8vNY~E+EcLa7h5^WzazJ#WQ!XLYhWu- z5&$hld1Hujk|p9WvP~1%>*WWk#l{$-lt_~N$ug`6tJ0Kqk_HajWhZsWsPK(m0R)1q z*#>!QVaL8K1I06c2Ooasak2I0nQ-2{b$N=GhYQNPG>(+ zEJz>wQ7bbZ9?bpzI)~K;JaA}&b6%z`F#I<=rJiA}C2UR3kOCemWT^G=9F81Wm}xiw*f#)!OE*@K{Iw8C{s8dncJr*|GS} zKh-$?WJ|-y{pVad+9UY$j1WrNpO{hTx}2q0tNQ%ySVOj`G4mGrI?*Klh7O~%U`ZeE zU#7L---Y2L%x`wwh;wQ>3?cGgJZFQbod1>6febqN`}GwXwluAzf@@3|`Yvwm779q2 zQ3Urqa)q0>1HK)d(lVyZ;6@Am0%GZ-nU#wk(fJ=_5!R>`)`nS?qVmoeC;ogO&bU9* zQNhZY%qp|1V$M%b8V*_T{uV301M12u0e!GVExGDVWri`AvAZh0D^<$uV$0CkdpC%2 zwd8LF<8$8-QyFte=J!7N;>RaN8rT}Z`4hAF7ANxq+NGLb3Ag7{w)dzo=+t0KB7Uhv6v{NYG&0UYh*c1C9vjlHh7?3hQtRUB=y(O5{aUXumR z=(w*qRqkripD8KF+5KSv$e}78DHpb!*3J-R;rbDEgz`{9(gB19uSPlt*d-8Ue6FOo30(}b+VI0vf+IMl3g!7x;pQ#%ayM@L-^cX zl%SO@QqV&boSW5QWP_8|Tsddwx8obKD;#$q1P*62eTAX}{ahrWCQ}9m&gPZb;Az_R z{t;5g^TNOOVb|dk$l)XDaQEX$vQ%FEmCB4+<7c`~N^qpam=-Kva&dDt@2jn27CMP$ zeF?~U3@!3Nuyx2b>{v-TOQE6I$!aETvZ((j(>kWqU-COVx(eF;GY;9)vfl9=`*w1g f=DP-^{!FTKGmoi__CSI++flI+)O literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/advanced/queue.mdx b/apps/web/content/docs/dev/advanced/queue.mdx index f11f66d19f..aeb47107c1 100644 --- a/apps/web/content/docs/dev/advanced/queue.mdx +++ b/apps/web/content/docs/dev/advanced/queue.mdx @@ -1,158 +1,309 @@ --- -title: Queue Tasks -description: Run asynchronous background tasks through VitNode's database-backed queue with retries and AdminCP monitoring. +title: Queue +description: Run slow work in the background with VitNode's PostgreSQL queue. Define a task, validate its payload, dispatch it from a route, and follow it to completion with retries, delays, leases and deduplication. icon: ListOrdered --- -import { TypeTable } from "fumadocs-ui/components/type-table" +import { TypeTable } from "fumadocs-ui/components/type-table"; -Queue tasks handle asynchronous, one-off background work (e.g. sending bulk emails, processing media, or scheduling posts). Tasks are persisted in the `core_queue` table and drained periodically by VitNode's background worker. +import { ImgDocs } from "@/components/fumadocs/img"; +import queuePanel from "./queue-debug-panel.webp"; -## Quick start +The queue moves work out of the request. A route stores a task in the `core_queue` table and answers at once, and a background worker runs it a little later, retrying it if it fails. In this guide the `site-notes` plugin queues an announcement for a note and you watch the task complete. -### 1. Define a Queue Task +## Before you begin -```ts title="plugins/blog/src/api/tasks/send-newsletter.task.ts" -import { buildQueueTask } from "@vitnode/core/api/lib/queue" +- **A queue processor.** Tasks run only when core's `process-queue` cron job runs, every minute. Configure a [cron adapter](/docs/dev/cron) or an external trigger. During development you can trigger it by hand, as shown in [Check the result](#check-the-result). +- The `site-notes` plugin with its `site_notes` table and the **Create notes** permission, from the beginner path up to [Permissions](/docs/dev/working-with-users/staff-permissions). Any plugin with a top-level API module and a guarded route works the same way. -export interface NewsletterPayload { - postId: number -} + -export const sendNewsletterTask = buildQueueTask({ - name: "send-newsletter", + + +### Create the task + +Create `src/api/tasks/announce-note.task.ts`: + +```ts title="plugins/site-notes/src/api/tasks/announce-note.task.ts" +import { buildQueueTask } from "@vitnode/core/api/lib/queue"; +import { eq } from "drizzle-orm"; +import { z } from "zod"; + +import { site_notes } from "@/database/notes"; + +const zodPayload = z.object({ noteId: z.number().int().positive() }); + +export const announceNoteTask = buildQueueTask({ + name: "announce-note", + maxAttempts: 5, handler: async (c, payload) => { - await c.get("log").info(`Processing newsletter for post #${payload.postId}`) + const { noteId } = zodPayload.parse(payload); + const [note] = await c + .get("db") + .select({ title: site_notes.title }) + .from(site_notes) + .where(eq(site_notes.id, noteId)); + + // Deleted since it was queued: nothing to announce, and nothing to retry. + if (!note) return; + + await c.get("log").debug(`Announced note "${note.title}"`); }, -}) +}); ``` ---- +- **The payload is stored as JSON**, so the handler receives it as `Record`. `buildQueueTask` is not generic, so validate the payload yourself, here with Zod. An invalid payload throws, which counts as a failed attempt. +- **Returning completes the task. Throwing fails the attempt** and schedules a retry. +- **`name` is unique within the plugin.** Tasks are matched to handlers by plugin id and name. +- **`c.get("log").debug()`** writes to the console and to the Debug Panel's log explorer. + + + + + +### Register it on a top-level module -### 2. Register in an API Module +Add the task to the `queueTasks` of `notesModule`, which `config.api.ts` passes to `buildApiPlugin` directly: -Attach the task to your module's `queueTasks` list: +```ts title="plugins/site-notes/src/api/modules/notes/notes.module.ts" +import { buildModule } from "@/api/builders"; +import { announceNoteTask } from "@/api/tasks/announce-note.task"; // [!code ++] -```ts title="plugins/blog/src/api/modules/posts/posts.module.ts" -import { buildModule } from "@/api/builders" -import { sendNewsletterTask } from "../../tasks/send-newsletter.task" +import { listNotesRoute } from "./list.route"; +import { showNoteRoute } from "./show.route"; -export const postsModule = buildModule({ - name: "posts", - routes: [createPostRoute], - queueTasks: [sendNewsletterTask], // [!code ++] -}) +export const notesModule = buildModule({ + name: "notes", + routes: [listNotesRoute, showNoteRoute], + queueTasks: [announceNoteTask], // [!code ++] +}); ``` ---- +Queue tasks are read only from modules passed to `buildApiPlugin`. Declared on a nested module, such as `admin/notes`, a task is never registered, and its dispatches fail with "No handler registered". -### 3. Dispatch Tasks + -Dispatch jobs from any Hono route or service: + -```ts -// Dispatch immediately -await c.get("queue").dispatch({ - name: "send-newsletter", - payload: { postId: 42 }, -}) +### Dispatch it from a route + +Create `src/api/modules/admin/notes/announce.route.ts`. It queues the task and returns what `dispatch()` reported: + +```ts title="plugins/site-notes/src/api/modules/admin/notes/announce.route.ts" +import { z } from "@hono/zod-openapi"; + +import { buildRoute } from "@/api/builders"; + +export const announceNoteRoute = buildRoute({ + adminStaffPermission: { module: "notes", permission: "can_create" }, + route: { + method: "post", + path: "/{id}/announce", + request: { + params: z.object({ id: z.coerce.number().int().positive() }), + }, + responses: { + 202: { + content: { + "application/json": { + schema: z.object({ + deduplicated: z.boolean(), + taskId: z.number().nullable(), + }), + }, + }, + description: "The announcement is queued, or already waiting.", + }, + }, + }, + handler: async c => { + const { id } = c.req.valid("param"); + const { deduplicated, id: taskId } = await c.get("queue").dispatch({ + name: "announce-note", + payload: { noteId: id }, + dedupeKey: `announce-note:${id}`, + }); + + return c.json({ deduplicated, taskId }, 202); + }, +}); +``` + +Then add `announceNoteRoute` to the `routes` of `adminNotesModule` in `src/api/modules/admin/notes/notes.module.ts`, after `createNoteRoute`. + +`dispatch()` only inserts a row and returns `{ deduplicated, id }`. It never runs the handler. The task belongs to the plugin of the route that dispatched it; pass `pluginId` to queue another plugin's task. + + + + + +## Check the result + +1. Add a temporary button that queues an announcement for note `3` with `fetcher`. Create `src/pages/check-announce-note.tsx`: + + ```tsx title="plugins/site-notes/src/pages/check-announce-note.tsx" + import { Button } from "@vitnode/core/components/ui/button"; + import { fetcher } from "@vitnode/core/tanstack/fetcher"; + import { useState } from "react"; + + import { manifest } from "@/manifest.gen"; -// Or schedule for future execution + export const CheckAnnounceNote = () => { + const [result, setResult] = useState(""); + const [isPending, setIsPending] = useState(false); + + const onClick = async () => { + setIsPending(true); + try { + const response = await fetcher({ + plugin: manifest.id, + method: "post", + module: "admin/notes", + path: "/{id}/announce", + args: { params: { id: 3 } }, + }); + setResult(response.ok ? JSON.stringify(await response.json()) : String(response.status)); + } finally { + setIsPending(false); + } + }; + + return ( +
          + + {result ? {result} : null} +
          + ); + }; + ``` + + Render `` in `src/pages/notes-page.tsx`, sign in to the AdminCP in the same browser, open `/site-notes/notes` and press the button twice. The first press shows `{"deduplicated":false,"taskId":3}`, the second `{"deduplicated":true,"taskId":null}`. The second dispatch is dropped because a task with the same `dedupeKey` is still waiting. + +2. Open **Debug Panel → Queue** (`/admin/core/debug/queue`). The `announce-note` task from `site-notes` is **pending**, because nothing has run it yet. +3. Run the processor. With a cron adapter, wait for the next minute. During development you can trigger cron yourself; `CRON_SECRET` is in your `.env`: + + ```bash + curl -X POST http://localhost:3000/api/@vitnode/core/cron \ + -H "Authorization: Bearer $CRON_SECRET" \ + -H "Content-Type: application/json" + ``` + + It answers `Cron jobs processed. Executed N jobs.` + +4. Reload **Debug Panel → Queue**. The task is **completed**, with `1/5` attempts. **Debug Panel → Log explorer** has the debug entry `Announced note "New coffee machine"`. It is listed under `@vitnode/core`, because the worker runs outside any plugin's route. Remove `CheckAnnounceNote` when you are done. + + + +## Run a task later + +`availableAt` is the earliest time the task may run. The default is now: + +```ts await c.get("queue").dispatch({ - name: "send-newsletter", - payload: { postId: 42 }, - executeAt: new Date(Date.now() + 60 * 60 * 1000), // 1 hour from now - priority: 10, // Higher numbers run first -}) + name: "announce-note", + payload: { noteId: id }, + availableAt: new Date(Date.now() + 60 * 60 * 1000), // in an hour +}); ``` -`dispatch` returns `{ id }` as soon as the task row is written to PostgreSQL. +The task still waits for the next processor run after that time. `priority` (higher first, default `0`) orders tasks that are due at the same time. ---- +## Retries and backoff -## Retries and Error Handling +A thrown error fails the attempt. Until `maxAttempts` is reached, the task returns to `pending` with an exponential delay. The first retry waits about 10 seconds, and each later one waits twice as long, up to one hour. After the last attempt it is **failed**, with the error in `lastError`. -VitNode tasks automatically retry on failure using exponential backoff: +`maxAttempts` comes from the dispatch, then the task definition, then `3`. To wait without using an attempt, for example on a rate limit, throw `QueueDeferError` from `@vitnode/core/api/lib/queue`: ```ts -export const riskyTask = buildQueueTask({ - name: "sync-external-api", - maxAttempts: 5, // Default is 3 - handler: async (c, payload) => { - // If an error is thrown, the task retries automatically - }, -}) +throw new QueueDeferError(new Date(Date.now() + 60_000), "Provider rate limit"); ``` -| Attempt | Delay Before Next Retry | -| :--- | :--- | -| 1st failure | ~10 seconds | -| 2nd failure | ~20 seconds | -| Each next failure | Doubles, capped at 1 hour | -| Final failure | Marked as `failed` in `core_queue` | +A failed task stays failed. Fix the cause and dispatch again. -### How the Worker Drains the Queue +## Leases and abandoned tasks -Each `process-queue` tick claims 25 tasks at a time and runs up to 5 of them at once, then claims the next 25 - until the queue is empty or about 45 seconds have passed. Handlers share one tick, so make them safe to run side by side. Finished tasks stay in `core_queue` for 7 days; the hourly `clean` job removes older ones in small batches. +A worker that claims a task holds it for the task's `leaseSeconds`, `600` by default. If the worker dies, or the handler is still running when the lease ends, the task counts as abandoned. It returns to `pending`, or becomes **failed** when it has no attempts left, and another run picks it up. -### Stale Tasks Are Reclaimed +Keep handlers well inside their lease, or raise `leaseSeconds` on the task. A handler that outlives its lease may run twice at once. For large jobs, save progress and dispatch a follow-up task, as [notification fan-out](/docs/dev/notifications/queue-and-scale) does. -A task still `processing` after 15 minutes (`QUEUE_STALE_PROCESSING_MINUTES`) belonged to a worker that died mid-run. The queue worker puts it back to `pending`, or marks it `failed` if it has used every attempt, so a crash never strands a task forever. +## Deduplication - - A handler that runs longer would be reclaimed and run again while it is still going. Long work should save its progress and dispatch a follow-up task instead - the way [notification fan-out](/docs/dev/notifications/queue-and-scale) does. - +While a task with the same plugin id and `dedupeKey` is **pending** or **processing**, a new dispatch is dropped and returns `{ deduplicated: true, id: null }`. Once the first task completes or fails, the same key can be queued again. Without a `dedupeKey`, every dispatch creates a task. ---- +## Enqueue inside a transaction -## Inspect tasks in the Debug Panel +Pass `tx` to insert the task with the transaction that writes your data, so it is only queued if that write commits: -{/* Image prompt: VitNode AdminCP Debug Panel at /admin/core/debug/queue with the "Queue" section open in the side menu. Table of queue tasks with columns Task, Queue, Status (pending, processing, completed, failed badges), Attempts, Available At, Created At and Last Error, plus a Status filter above it. Dark theme, 1440x900. */} +```ts +await c.get("db").transaction(async tx => { + const [note] = await tx.insert(site_notes).values(values).returning(); + await c.get("queue").dispatch({ name: "announce-note", payload: { noteId: note.id }, tx }); +}); +``` -Open **Debug Panel → Queue** in the AdminCP (`/admin/core/debug/queue`), or type "Queue tasks" into the ⌘K admin search. The table lists every task with its queue, status, attempts, when it is next available, when it was created and its last error. Filter by status to find the failed ones. +## How the worker runs -The section is read-only. A failed task stays failed, so fix the cause and dispatch it again from your code. Viewing it needs the `queue → can_view` staff permission. +Each `process-queue` run claims tasks in batches of 25, runs up to 5 at once, highest `priority` first, and keeps draining for about 45 seconds. Tasks on the `ai` queue are drained by core's AI job instead. Completed and failed tasks stay in `core_queue` for 7 days; the hourly cleanup removes older ones. ---- +**Debug Panel → Queue** lists every task with its queue, status, attempts, next run, creation time and last error, filterable by status. It is read-only and needs the `queue → can_view` staff permission. -## `buildQueueTask` Options +## `buildQueueTask` options Promise", + type: "(c: Context, payload: Record) => Promise | void", }, maxAttempts: { default: "3", - description: "Maximum retry attempts before permanently failing.", + description: "Attempts before the task is failed, unless the dispatch sets its own.", type: "number", }, + leaseSeconds: { + default: "600", + description: "How long a worker may hold a claimed task before it counts as abandoned.", + type: "number", + }, + description: { + description: "A note for developers. Core does not display it.", + type: "string", + }, }} /> -## Learn More - - - - - - +## `dispatch()` options + +" }, + availableAt: { description: "Earliest time the task may run.", default: "now", type: "Date" }, + dedupeKey: { description: "Drops the dispatch while an active task has the same key.", type: "string" }, + maxAttempts: { description: "Overrides the task's attempt limit.", type: "number" }, + priority: { description: "Higher runs first.", default: "0", type: "number" }, + queue: { description: "Queue name. The default worker drains every queue except `ai`.", default: '"default"', type: "string" }, + pluginId: { description: "Plugin that owns the task.", default: "the current route's plugin", type: "string" }, + tx: { description: "A transaction to insert with.", type: "Transaction" }, + }} +/> + +`dispatch()` returns `Promise<{ deduplicated: boolean; id: number | null }>`. + +## Related + +- [Cron](/docs/dev/cron): recurring jobs, and the adapters that run the queue. +- [Events](/docs/dev/events): react to something that happened, inside the request. diff --git a/apps/web/content/docs/dev/advanced/rate-limiter-debugging.mdx b/apps/web/content/docs/dev/advanced/rate-limiter-debugging.mdx index 6940c2a27c..6e624e4d23 100644 --- a/apps/web/content/docs/dev/advanced/rate-limiter-debugging.mdx +++ b/apps/web/content/docs/dev/advanced/rate-limiter-debugging.mdx @@ -1,11 +1,16 @@ --- -title: Debug unexpected 429 errors +title: Debug 429 errors description: Find which VitNode rate-limit budget a visitor ran out of, using the X-RateLimit-Category header and the API's rate-limit log line, then fix the cause. icon: SearchCheck --- When a real visitor sees "Too many requests", find out which [rate-limit budget](/docs/dev/advanced/rate-limiter) refused them before you raise anything. Raising the wrong budget hides the cause and weakens protection you still need. +## Before you begin + +- An API running with `NODE_ENV` other than `development`, such as production or a staging copy. In development every budget is skipped, so these steps never show a `429` locally. +- Access to the API's logs for step 2. + diff --git a/apps/web/content/docs/dev/advanced/rate-limiter.mdx b/apps/web/content/docs/dev/advanced/rate-limiter.mdx index 2ab10d2fb4..351526888d 100644 --- a/apps/web/content/docs/dev/advanced/rate-limiter.mdx +++ b/apps/web/content/docs/dev/advanced/rate-limiter.mdx @@ -1,5 +1,5 @@ --- -title: Rate Limiter +title: Rate limiter description: How VitNode splits API rate limits into read, write, sign-in and content-write budgets under a global safety cap, with Redis-shared counters and 429 responses that carry Retry-After. icon: ShieldAlert --- @@ -17,7 +17,7 @@ Every request spends points from the budgets that apply to it, in this order, an | Safety cap | Every request, including `OPTIONS` preflights | 1000 / 60 s | `rateLimiter.safety` | | Read | `GET` and `HEAD` | 300 / 60 s | `rateLimiter.read` | | Write | `POST`, `PUT`, `PATCH`, `DELETE` and any other method | 60 / 60 s | `rateLimiter.write` | -| Sign-in | `POST` to the sign-in, sign-up, password and passkey routes, plus write | 10 / 60 s | `rateLimiter.auth` | +| Sign-in | `POST` to the sign-in, sign-up, password, email verification and passkey routes, plus write | 10 / 60 s | `rateLimiter.auth` | | Content writes | `POST` and `PATCH` under a plugin's `/content/`, outside `/admin/`, plus write | 20 / 60 s | `rateLimiter.contentWrite` | So a sign-in spends the safety cap, the write budget and the sign-in budget. A `GET` spends only the safety cap and the read budget. Each budget is spent at most once per request. diff --git a/apps/web/content/docs/dev/advanced/redis.mdx b/apps/web/content/docs/dev/advanced/redis.mdx index 530b75b825..569d324dd7 100644 --- a/apps/web/content/docs/dev/advanced/redis.mdx +++ b/apps/web/content/docs/dev/advanced/redis.mdx @@ -1,51 +1,28 @@ --- title: Redis -description: Add a shared Redis cache to VitNode for faster session lookups, distributed rate limiting, and multi-instance WebSocket broadcasts. +description: Connect Redis to VitNode to share the API cache, sessions, rate-limit counters and realtime events across instances, and see what happens without it. icon: DatabaseZap --- -import { Tab, Tabs } from "fumadocs-ui/components/tabs" +[Redis](https://redis.io) is VitNode's shared cache and pub/sub broker. It is optional. On a single API instance VitNode works without it and uses an in-process cache and per-instance counters. Add Redis when you run more than one API instance, deploy to a serverless host, or want cached values to live longer than 15 seconds. -[Redis](https://redis.io) serves as VitNode's shared cache and pub/sub broker across horizontally scaled instances. Redis is optional: without it, VitNode degrades gracefully to in-memory counters and local delivery. - -## Quick start - -### 1. Configure Environment Variables - -```bash title=".env" -REDIS_URL=redis://localhost:6379 // [!code ++] -REDIS_PASSWORD=root // [!code ++] -``` - -### 2. Connect in API Configuration - -```ts title="apps/api/src/vitnode.api.config.ts" -import { buildApiConfig } from "@vitnode/core/vitnode.config" - -export const vitNodeApiConfig = buildApiConfig({ - // [!code ++:5] - redis: process.env.REDIS_URL - ? { url: process.env.REDIS_URL, password: process.env.REDIS_PASSWORD } - : undefined, -}) -``` - ---- - -## What Redis Powers +## What Redis changes | Feature | Without Redis | With Redis | | :--- | :--- | :--- | -| **API Domain Cache** | No-op (always executes DB query) | Shared key-value store via `c.get("cache")` | -| **Rate Limiter** | In-memory counters per instance | Distributed sliding-window across cluster | -| **WebSocket Realtime** | Single instance only | Cross-instance delivery via Redis Pub/Sub; required on serverless hosts ([details](/docs/dev/websocket/reconnects#delivery-across-instances)) | -| **Sessions** | Database queries on every request | Instant cache hits with DB fallback | +| **API cache** (`c.get("cache")`) | In-process memory, TTLs capped at 15 seconds, per instance; a delete on one instance does not reach the others | Shared by every instance, with the TTL you ask for | +| **Sessions** | Cached in process for up to 15 seconds, then read from the database | Cached in Redis for up to 60 seconds, then read from the database | +| **Rate limiter** | Counters in memory, per instance | Counters shared by every instance | +| **WebSocket realtime** | Delivered only to clients on the same instance | Delivered across instances through Redis pub/sub; required on serverless hosts ([details](/docs/dev/websocket/reconnects#delivery-across-instances)) | ---- +## Connect Redis + + + -## Local Development (Docker) +### Start a Redis server -Start a Redis container with Docker Compose: +For local development, run Redis with Docker Compose. `--requirepass` sets the password used in the next step: ```yaml title="docker-compose.yml" services: @@ -57,41 +34,78 @@ services: command: redis-server --requirepass root ``` ---- +In production, use your host's managed Redis or your own server. -## Using the Cache in API Routes + + -Use `remember` with a key, a TTL in seconds, and a loader to cache expensive database lookups: +### Set the environment variables -```ts -const posts = await c.get("cache").remember( - "featured_posts", - 60, - async () => await fetchFeaturedPostsFromDB(), -) +Add the connection URL and the password to the API's `.env`. The password is a separate variable, so the URL can stay free of secrets: + +```bash title="apps/api/.env" +REDIS_URL=redis://localhost:6379 # [!code ++] +REDIS_PASSWORD=root # [!code ++] ``` -See [Cache API data](/docs/dev/cache/api) for invalidation and the full method list. + + ---- +### Pass them to the API config + +The starter apps already contain this. Check that `redis` is set in `vitnode.api.config.ts`: + +```ts title="apps/api/src/vitnode.api.config.ts" +import { buildApiConfig } from "@vitnode/core/vitnode.config"; + +export const vitNodeApiConfig = buildApiConfig({ + // [!code ++:3] + redis: process.env.REDIS_URL + ? { url: process.env.REDIS_URL, password: process.env.REDIS_PASSWORD } + : undefined, +}); +``` -## Check Redis in the AdminCP +`redis` accepts any option of node-redis `createClient`. When `REDIS_URL` is unset, `redis` is `undefined` and VitNode uses the in-process fallbacks from the table above. Restart the API after changing `.env`. -{/* Image prompt: VitNode AdminCP Debug Panel at /admin/core/debug/cache with the "Cache" section open. Engine "Redis" with a green "Redis connected" status, "Realtime across instances: Yes", and a "Clear cache" button. Dark theme, 1440x900. */} + + + +## Check the result + +{/* Image prompt: VitNode AdminCP Debug Panel at /admin/core/debug/cache with the "Cache" section open. Engine "Redis" with a green "Redis connected" status, "Realtime across instances: Yes", and a "Clear Cache" button. Dark theme, 1440x900. */} + +Open **Debug Panel → Cache** in the AdminCP (`/admin/core/debug/cache`). With Redis connected you see **Redis connected** and whether realtime events reach every instance (**Realtime across instances**). Without Redis it says **Redis is not configured, so the cache lives in memory**. An unreachable server shows **Redis is unreachable**, also on the Debug Panel's **Overview**. + +## Use the cache in an API route + +`c.get("cache")` works the same with or without Redis. `remember` takes a key, a TTL in seconds and a loader, and calls the loader only when the key is missing: + +```ts +import { count } from "drizzle-orm"; + +import { site_notes } from "@/database/notes"; + +// inside a route handler, where `c` is the Hono context +const total = await c.get("cache").remember("notes:total", 60, async () => { + const [row] = await c.get("db").select({ value: count() }).from(site_notes); + return row.value; +}); +``` -Open **Debug Panel → Cache** in the AdminCP (`/admin/core/debug/cache`). It shows whether Redis is connected, unreachable or not configured (then the cache lives in memory), and whether realtime events reach every instance. An unreachable Redis also shows up on the Debug Panel's **Overview**. +Without Redis the 60-second TTL is capped at 15 seconds. [Cache API data](/docs/dev/cache/api) covers keys, invalidation after a write and the full method list. -## Learn More +## Related diff --git a/apps/web/content/docs/dev/ai/action-options.mdx b/apps/web/content/docs/dev/ai/action-options.mdx new file mode 100644 index 0000000000..69b9e55b1e --- /dev/null +++ b/apps/web/content/docs/dev/ai/action-options.mdx @@ -0,0 +1,322 @@ +--- +title: Action options +description: Reference for defineAiAction in VitNode. Every AI action field, default and limit, the options of c.get("ai").run(), runAsSystem() and stream(), the run result, and the order of checks during a run. +icon: ListChecks +--- + +import { TypeTable } from 'fumadocs-ui/components/type-table' + +This page lists everything an AI action can declare and everything a run accepts and returns. Use it when you change an action you already built; to build your first one, follow [AI actions](/docs/dev/ai/actions). The examples continue that page's `@vitnode/forum` **Summarize topic** action. + +```ts +import { defineAiAction } from '@vitnode/core/api/lib/ai/action' +import { aiActionRef } from '@vitnode/core/api/lib/ai/registry' +``` + +`defineAiAction(definition)` validates the definition when the module loads and fills in defaults. Anything invalid throws an `AiActionDefinitionError` at boot. Register the result in `buildApiPlugin({ aiActions: [...] })`. + +## Definition fields + + boolean | Promise', + }, + defaults: { + description: 'Limits for each run. See Defaults and limits.', + type: 'AiActionDefaults', + required: true, + }, + inputSchema: { + description: 'Zod schema that validates the input before anything else.', + type: 'z.ZodType', + required: true, + }, + measureInput: { + description: + 'Characters counted against `maxInputCharacters`. By default every string in the input counts.', + type: '(input) => number', + }, + output: { + description: 'Plain text or a structured object.', + type: "'text' | 'object'", + required: true, + }, + parseText: { + description: + 'Text actions only: turns the model text into the value `outputSchema` checks. Throw to reject the answer.', + type: '(text, input) => unknown', + }, + outputSchema: { + description: 'Zod schema that validates the answer.', + type: 'z.ZodType', + required: true, + }, + buildPrompt: { + description: + 'Builds the prompt from the validated input. Returns `{ prompt, system? }` or `{ messages, system? }`.', + type: '(input, { instructions }) => AiPrompt', + required: true, + }, + }} +/> + +## Ids and canonical keys + +Core stores an action under its **canonical key**, `:`: + +```text +@vitnode/forum:topic.summarize +@vitnode/blog:article.review +``` + +Two plugins may both have a `topic.summarize`, because their canonical keys differ. The same canonical key twice throws at boot. Settings, history, limits and field `ai` options all use the canonical key. + +`aiActionRef(pluginId, action)` returns the canonical key typed with the action's input and output. Pass it to `run()` and TypeScript checks `input` and infers `output`. A plain string key also works, but its output is `unknown`. + +## Title, description and icon + +Every action appears on **Artificial Intelligence (AI) → Actions**, on the role form's **Artificial intelligence (AI)** tab and on the member's AI usage page. `title` and `description` are message keys such as `ai_actions.@vitnode/forum.topic_summarize.title`. The API returns them untranslated and each page translates them, falling back to the default language. Keep them in your plugin's `src/locales/en.json` under `ai_actions` → your plugin id, and translate them like any other [plugin message](/docs/dev/i18n/messages). + +A value that is not a message key is shown as written and never translated, which is handy while prototyping. A blank title or description, or an icon that is not a kebab-case name, throws at boot. + +## Prompt and instructions + +`buildPrompt(input, { instructions })` returns either `{ prompt, system? }` or `{ messages, system? }`, the same prompt shapes the AI SDK takes. `instructions` is extra guidance an admin set for this action in the AdminCP, or `null`. Append it to the system prompt: + +```ts +buildPrompt: (input, { instructions }) => ({ + system: ['Summarize the forum topic in two plain sentences.', instructions] + .filter(Boolean) + .join('\n'), + prompt: `${input.title}\n\n${input.content}`, +}), +``` + +`promptVersion` is stored with every run, so the AI logs show which prompt produced which result. + +## Input and output + +- **`inputSchema`** validates the input first. Invalid input fails with `AI_INVALID_INPUT`. +- **`measureInput(input)`** returns the characters counted against `maxInputCharacters`. Override it when only part of the input reaches the prompt. The blog's article review counts the title and at most 30,000 characters of the article. +- **`output: "text"`**: the model returns text, `parseText(text, input)` turns it into your value, then `outputSchema` checks it. +- **`output: "object"`**: the model returns JSON through the AI SDK's `Output.object`, and `outputSchema` validates it. The action must require `structured-output`, and it cannot be streamed. + +An empty answer, a `parseText()` that throws or a schema mismatch fails with `AI_INVALID_OUTPUT`, and the user is not charged. + +```ts title="plugins/forum/src/api/ai/actions.ts (excerpt)" +const topicTitleIdeasAiAction = defineAiAction({ + id: 'topic.title-ideas', + title: 'ai_actions.@vitnode/forum.topic_title_ideas.title', + description: 'ai_actions.@vitnode/forum.topic_title_ideas.description', + promptVersion: 1, + permission: { key: 'summarize', defaultGranted: true }, + requiredCapabilities: ['text', 'structured-output'], + defaults: { maxInputCharacters: 20_000, maxOutputTokens: 200, timeoutMs: 30_000 }, + inputSchema: z.object({ content: z.string().min(1) }), + output: 'object', + outputSchema: z.object({ titles: z.array(z.string().max(120)).max(3) }), + buildPrompt: (input) => ({ + system: 'Suggest up to three short titles for this forum topic.', + prompt: input.content, + }), + authorize: async ({ c }) => + await checkStaffPermission(c, { + type: 'admin', + plugin: manifest.id, + module: topicContentType.permissionModule, + permission: 'can_view', + }), +}) +``` + +It sits next to **Summarize topic** and reuses that file's imports. Both actions use the `summarize` permission, so they share one role switch and one daily counter. Actions that share a key must declare the same `defaultGranted`, or boot fails. + +### Images + +For a vision action, require `image-input` and pass the image bytes as a `file` part. Read them server-side, for example with `c.get("storage").readBytes(key, maxBytes)`, so no private file has to be made public for the provider: + +```ts +buildPrompt: (input) => ({ + messages: [ + { + role: 'user', + content: [ + { type: 'text', text: 'Describe this image in one sentence.' }, + { type: 'file', data: input.image, mediaType: input.mediaType }, + ], + }, + ], +}), +``` + +`maxImages` defaults to `1` for these actions and bounds how many images one run may send. Only models that declare `image-input` run them. See [Model capabilities](/docs/dev/ai#model-capabilities). + +## Permissions and authorize() + +Every action names a **permission**, which admins grant per role on the **Artificial intelligence (AI)** tab of the role form: + +```ts +permission: 'summarize' // same as { key: 'summarize', defaultGranted: false } +permission: { key: 'summarize', defaultGranted: true } +``` + +`defaultGranted` applies while no role has a setting for the key. The stored permission is `:`, for example `@vitnode/forum:summarize`. + +`authorize()` is required for actions users can run. The AI permission says "this role may use AI summaries"; `authorize()` says "this user may read this topic". Both must pass, or the run fails with `AI_UNAUTHORIZED`. It receives `{ c, input, resource, userId }`, where `resource` is the optional `{ type, id }` the caller passed to `run()`. + +## Actors + +`actors` decides who may run an action. The server picks the actor; a request never does. + +| Actor | Runs with | Charged to | +| :------- | :-------------------------- | :--------------------------------------------- | +| `user` | `c.get("ai").run()` | The site budget and the user's AI points | +| `system` | `c.get("ai").runAsSystem()` | The site budget and the optional system budget | + +`run()` uses the signed-in AdminCP user first, then the site user, and fails with `AI_UNAUTHORIZED` when there is neither. A `system`-only action (`actors: ['system']`) needs no `authorize()`. Call `runAsSystem()` only from trusted server code such as cron jobs, queue tasks and event listeners; [Run an action in a background job](/docs/dev/ai/errors#run-an-action-in-a-background-job) shows one. + +## Defaults and limits + +`defaults` sets an action's limits. Admins can override most of them per action on **Artificial Intelligence (AI) → Actions**. A value outside its range throws at boot. + +| Field | Required | Default | Range | +| :------------------- | :------- | :------------------------------- | :-------------- | +| `maxInputCharacters` | Yes | - | 1 – 1,000,000 | +| `maxOutputTokens` | Yes | - | 1 – 200,000 | +| `timeoutMs` | Yes | - | 1,000 – 600,000 | +| `maxRetries` | No | `0` | 0 – 3 | +| `maxSteps` | No | `1` | 1 – 10 | +| `maxImages` | No | `1` with `image-input`, else `0` | 0 – 10 | +| `dailyLimit` | No | `null` (no limit) | 0 – 100,000 | + +- `timeoutMs` applies to each attempt. +- `maxRetries` is extra attempts on the same model after a failed provider call. +- `maxSteps` is model round trips inside one attempt (tool loops). Each step is billed as its own call. +- `dailyLimit` counts runs per user per day for the action's permission key. A role's daily limit wins over the admin's action setting, which wins over this default. +- Admins cannot change `maxImages`, because it bounds the budget reserved for images. + +Admins can also switch an action off, assign it a model and a fallback model, and add `instructions`. + +## Run options + +`c.get("ai").run()`, `runAsSystem()`, `stream()` and `estimate()` take the same request: + + + +## Run result + +| Method | Returns | +| :---------------------- | :---------------------------------------------- | +| `run()`, `runAsSystem()` | `Promise<{ output, runId, usage }>` | +| `stream()` | `Promise<{ textStream, result, runId }>`. See [Streaming](/docs/dev/ai/streaming). | +| `estimate()` | `Promise<{ maxPoints, maxUsd }>`, the most the run could cost as decimal strings, or `null` without pricing | + +```ts +{ + output: Output, // validated by outputSchema + runId: number, + usage: { + chargedPoints: string, // points charged to the user, full precision; "0" for system runs + costKnown: boolean, + modelId: string, // the configured model that answered + }, +} +``` + +`usage` is safe to send to the browser. It never contains prices or provider details. + +## What happens during a run + +1. `run()`, `stream()` and `estimate()` find the signed-in user (`AI_UNAUTHORIZED` without one). +2. Find the action (`AI_ACTION_UNKNOWN`), check the actor, validate `input` (`AI_INVALID_INPUT`). +3. Check that `ai.models` is not empty (`AI_NOT_CONFIGURED`), then the global AI switch and the action's switch. +4. For users: check the role permission, then `authorize()`. +5. Measure the input against `maxInputCharacters`. +6. Pick the model: the admin's choice, or the first configured model with every required capability. `stream()` also requires `streaming`. Resolve the optional fallback, skipping an incompatible one. +7. Build the prompt and count its images against `maxImages`. +8. **Reserve** budget for the worst case and check rate and concurrency limits, in one short database transaction. +9. Call the provider outside any transaction. Retry up to `maxRetries` times, then try the fallback model once. +10. Validate the output. +11. **Settle**: charge the real cost and release the rest of the reservation. +12. Emit `ai.run.completed` or `ai.run.failed`. + +A canceled run stops at once. An invalid answer is not retried on the same model, but the fallback model still gets one try. Nothing before step 8 costs anything. [Costs and budgets](/docs/dev/ai/costs-and-limits) explains steps 8 and 11. diff --git a/apps/web/content/docs/dev/ai/actions.mdx b/apps/web/content/docs/dev/ai/actions.mdx index f501416f7d..ee5c7c318b 100644 --- a/apps/web/content/docs/dev/ai/actions.mdx +++ b/apps/web/content/docs/dev/ai/actions.mdx @@ -1,6 +1,6 @@ --- -title: AI Actions -description: Define managed AI features with defineAiAction, register them in a plugin and run them with c.get("ai").run(). VitNode Core handles permissions, limits, budgets and history. +title: AI actions +description: Create your first managed AI action in a VitNode plugin. Define it with defineAiAction, register it, run it with c.get("ai").run() from an AdminCP route and find the run in the AI logs. icon: Wand implementation: objective: Add an AI feature to a plugin through a registered AI action. @@ -13,46 +13,35 @@ implementation: constraints: - Define the action with `defineAiAction` and register it in `aiActions` of the plugin's `buildApiPlugin()`. - Run it through `aiActionRef` with `c.get("ai").run()`, `runAsSystem()` or `stream()`. Never hard-code a model or call a provider SDK directly. - - '`authorize()` checks access to the content the action reads, for example with `checkStaffPermission`.' + - '`authorize()` checks access to the content the action reads, for example with `checkStaffPermission` on the content type''s `permissionModule`.' - The action's `title` and `description` are message keys in the plugin's locale, not plain text. + - Mount the route that runs the action in one of the plugin's modules. related: - - title: AI in fields and the editor - href: /docs/dev/ai/fields-and-editor - - title: AI costs and limits - href: /docs/dev/ai/costs-and-limits + - title: Action options + href: /docs/dev/ai/action-options + - title: AI errors and limits + href: /docs/dev/ai/errors - title: AI in the AdminCP href: /docs/dev/ai/admin --- -import { TypeTable } from 'fumadocs-ui/components/type-table' +An **AI action** is one AI feature a plugin offers, such as "write an excerpt", "translate a field" or "summarize a topic". Your plugin describes the prompt and the shape of the input and output. VitNode Core runs it. It picks the model, checks permissions, enforces limits, holds budget, calls the provider through the [Vercel AI SDK](https://ai-sdk.dev), validates the answer and records what it cost. -An **AI action** is one AI feature a plugin offers, such as "write an excerpt", "translate a field" or "suggest tags". The plugin describes the prompt and the input and output shapes. VitNode Core runs it: it picks the model, checks permissions, enforces limits, holds budget, calls the provider, validates the answer and records what it cost. +On this page you add a **Summarize topic** action to the `@vitnode/forum` plugin, run it from an AdminCP route, and find the run in the AI logs. -```ts -const { output } = await c.get('ai').run({ - action: EXCERPT_AI_ACTION, - input: { title, content, locale }, -}) -``` - -## Why actions exist - -Calling `generateText` with `c.get("ai").model()` works, but every plugin would then need its own answers to the same questions: who may use this, how much can they spend, what happens when the provider times out, and where did the money go? - -Actions answer those once, in Core: - -- **One place for models.** Admins choose the model, fallback and limits per action in the AdminCP. Plugins never hard-code a model. -- **One place for limits.** Permissions, daily limits, rate limits and concurrency apply to every action the same way. -- **One place for accounting.** Every run and every provider call is recorded with tokens and cost, and charged to the right [budget](/docs/dev/ai/costs-and-limits). - - - Direct SDK calls with `c.get("ai").model()` bypass budgets, limits and - history. Keep them for internal tooling you fully control. + + `generateText` with `c.get("ai").model()` works, but it skips permissions, + budgets, AI points and run history. Use an action for anything people can + trigger, and keep [direct SDK calls](/docs/dev/ai/usage) for internal tooling. -## Create an action +## Before you begin -This example adds a "summarize topic" button to a forum plugin's AdminCP. +- **A language model with the `text` capability** in `ai.models` of your API config. See [AI setup](/docs/dev/ai). +- **The `@vitnode/forum` plugin** in your app. Any plugin with an API part (`src/config.api.ts`) works the same way; swap the plugin id, paths and content type. +- **An AdminCP account with a root role.** Root roles hold every AI permission and have no point cap. Any other role needs the permission, a monthly points allowance (the default is `0`) and a priced model; [AI in the AdminCP](/docs/dev/ai/admin#first-time-setup) walks through that. + +## Build the action @@ -60,20 +49,23 @@ This example adds a "summarize topic" button to a forum plugin's AdminCP. ### Define the action +Create `src/api/ai/actions.ts` in the forum plugin: + ```ts title="plugins/forum/src/api/ai/actions.ts" import { defineAiAction } from '@vitnode/core/api/lib/ai/action' import { aiActionRef } from '@vitnode/core/api/lib/ai/registry' import { checkStaffPermission } from '@vitnode/core/api/lib/check-staff-permission' import { z } from 'zod' +import { topicContentType } from '@/content/topic' import { manifest } from '@/manifest.gen' export const zodSummarizeTopicSchema = z.object({ - title: z.string().trim().min(1).max(255), + title: z.string().trim().min(1).max(200), content: z.string().trim().min(1).max(50_000), }) -export const summarizeTopicAiAction = defineAiAction({ +const summarizeTopicAiAction = defineAiAction({ id: 'topic.summarize', title: 'ai_actions.@vitnode/forum.topic_summarize.title', description: 'ai_actions.@vitnode/forum.topic_summarize.description', @@ -101,7 +93,7 @@ export const summarizeTopicAiAction = defineAiAction({ await checkStaffPermission(c, { type: 'admin', plugin: manifest.id, - module: 'topics', + module: topicContentType.permissionModule, permission: 'can_view', }), }) @@ -114,10 +106,12 @@ export const SUMMARIZE_TOPIC_AI_ACTION = aiActionRef( ) ``` -`title` and `description` are message keys. Add their text to the plugin's -messages in the next step. +- `id` is local to the plugin. Core stores the action as `@vitnode/forum:topic.summarize`. +- `permission` is the switch admins flip per role. `defaultGranted: true` keeps it on until a role says otherwise. +- `authorize()` asks whether this admin may view forum topics. `topicContentType.permissionModule` is `topic`, derived from the type id `forum.topic`. +- `aiActionRef()` builds the canonical key and carries the input and output types, so `run()` can check them. -`defineAiAction()` validates the definition when the module loads. A bad id, a missing `authorize()` or an out-of-range limit throws an `AiActionDefinitionError` at boot, not in production traffic. +`defineAiAction()` validates the definition when the module loads, so a bad id or a missing `authorize()` throws at boot instead of in production traffic. Every field is listed in [Action options](/docs/dev/ai/action-options). @@ -125,11 +119,9 @@ messages in the next step. ### Add the title and description -Add the text to the plugin's messages, under the shared `ai_actions` key and -your plugin id. Every AI page loads `ai_actions` as one namespace, so all -plugins' action names arrive together. +`title` and `description` are message keys. Add their text to the plugin's messages under the shared `ai_actions` key and your plugin id. Keep the existing keys in the file: -```json title="plugins/forum/src/locales/en.json" +```json title="plugins/forum/src/locales/en.json (excerpt)" { "ai_actions": { "@vitnode/forum": { @@ -142,24 +134,27 @@ plugins' action names arrive together. } ``` +The AdminCP, the role form and the member's AI usage page translate these keys in the reader's language. + -### Register it in the plugin +### Register the action in the plugin -```ts title="plugins/forum/src/config.api.ts" -import { buildApiPlugin } from '@vitnode/core/api/lib/plugin' +Open `src/config.api.ts` and pass the list to `aiActions`. Leave the existing modules as they are: -import { forumAiActions } from '@/api/ai/actions' -import { adminModule } from '@/api/modules/admin/admin.module' -import { manifest } from '@/manifest.gen' +```ts title="plugins/forum/src/config.api.ts (excerpt)" +import { forumAiActions } from '@/api/ai/actions' // [!code ++] export const forumApiPlugin = () => buildApiPlugin({ manifest, aiActions: forumAiActions, // [!code ++] - modules: [adminModule], + modules: [ + adminModule, + // ...forumModule and the public content module stay unchanged + ], }) ``` @@ -167,7 +162,9 @@ export const forumApiPlugin = () => -### Run it from a route +### Run the action from a route + +Create an AdminCP route that validates the body and passes it to `c.get("ai").run()`: ```ts title="plugins/forum/src/api/modules/admin/ai/routes/summarize.route.ts" import { z } from 'zod' @@ -177,9 +174,13 @@ import { zodSummarizeTopicSchema, } from '@/api/ai/actions' import { buildRoute } from '@/api/builders' +import { topicContentType } from '@/content/topic' export const summarizeTopicRoute = buildRoute({ - adminStaffPermission: { module: 'topics', permission: 'can_view' }, + adminStaffPermission: { + module: topicContentType.permissionModule, + permission: 'can_view', + }, route: { method: 'post', description: 'Summarize a forum topic with the configured AI model.', @@ -197,6 +198,7 @@ export const summarizeTopicRoute = buildRoute({ }, description: 'The summary', }, + 400: { description: 'No AI model is configured or the input is invalid' }, 403: { description: 'No access to topics or to this AI feature' }, 429: { description: 'A personal AI limit was reached' }, 502: { description: 'The AI provider failed or answered unusably' }, @@ -204,7 +206,6 @@ export const summarizeTopicRoute = buildRoute({ }, }, handler: async (c) => { - // [!code ++:4] const { output } = await c.get('ai').run({ action: SUMMARIZE_TOPIC_AI_ACTION, input: c.req.valid('json'), @@ -215,363 +216,126 @@ export const summarizeTopicRoute = buildRoute({ }) ``` -TypeScript infers `output` as `string` from the action's `outputSchema`. When the run fails, `run()` throws an `AiError` and the route answers with its [error code](#error-codes). +TypeScript infers `output` as `string` from the action's `outputSchema`. When a run fails, `run()` throws an `AiError` and the route answers with its status and a JSON body. See [AI errors and limits](/docs/dev/ai/errors). - - -For a complete, real example, read the `@vitnode/blog` plugin: `plugins/blog/src/api/ai/actions.ts` and its `admin/ai` routes. - -## Action ids - -An action has a **local id**, unique inside its plugin: lowercase, dot-separated words such as `topic.summarize`. - -Core stores it under a **canonical key**, `:`: - -```text -@acme/forum:topic.summarize -@vitnode/blog:article.review -``` - -Two plugins may both have a `topic.summarize`; their canonical keys differ. The same canonical key twice throws at boot. Settings, history and limits all use the canonical key. - -`aiActionRef(pluginId, action)` builds the canonical key **and** remembers the action's input and output types. Pass it to `run()` and TypeScript checks `input` and infers `output`. A plain string key also works, but its output is `unknown`. - -## Title, description and icon - -Every action appears as a row on **Artificial Intelligence (AI) → Actions**, as a feature on the role form's **Artificial intelligence (AI)** tab and in a member's AI usage. Each of those needs a human name in every language: - -- **`title`** (required): the message key of a short name, e.g. `ai_actions.@vitnode/forum.topic_summarize.title` for "Summarize topic". -- **`description`** (required): the message key of one sentence on what it does. -- **`icon`** (optional): a [Lucide](https://lucide.dev/icons) icon name in kebab case, e.g. `languages` or `wand-sparkles`. Without one, the row shows a sparkles icon. - -The API returns both keys untranslated. The AdminCP and the member's settings translate them into the page's language. A language without the key falls back to the default language's text. Keep the keys in your plugin's `src/locales/en.json` under `ai_actions` → your plugin id, and translate them like any other [plugin message](/docs/dev/i18n/messages). - - - A `title` or `description` that is not a message key is shown as written. That - is handy while prototyping, but it never gets translated. - - -A blank title or description, or an icon that isn't a kebab-case name, throws at boot. - -## Prompt versions and instructions - -`promptVersion` is stored with every run. Bump it whenever the prompt changes meaningfully, so the history shows which prompt produced which result. + -`buildPrompt(input, { instructions })` returns either `{ prompt, system? }` or `{ messages, system? }`. `instructions` is optional extra guidance an admin set for this action in the AdminCP, or `null`. Append it to the system prompt. +### Mount the route -## Input and output +Create an `ai` module for the route: -- **`inputSchema`** (Zod) validates the input before anything else happens. Invalid input fails with `AI_INVALID_INPUT`. -- **`measureInput(input)`** returns the number of characters counted against `maxInputCharacters`. By default every string in the input counts. Override it when only part of the input reaches the prompt. The blog's article review, for example, counts the title and at most 30,000 characters of the article text. -- **`output: "text"`** makes the model return text. `parseText(text, input)` turns it into your output, then `outputSchema` checks it. Throw from `parseText()` to reject an answer. -- **`output: "object"`** makes the model return structured JSON, which `outputSchema` validates. The action must require the `structured-output` capability, and it cannot be streamed. +```ts title="plugins/forum/src/api/modules/admin/ai/ai.admin.module.ts" +import { buildModule } from '@/api/builders' -An empty answer, a `parseText()` that throws or a schema mismatch fails with `AI_INVALID_OUTPUT`. The user is not charged for it. +import { summarizeTopicRoute } from './routes/summarize.route' -```ts title="An object action" -export const suggestTagsAiAction = defineAiAction({ - id: 'topic.tags', - title: 'ai_actions.@vitnode/forum.topic_tags.title', - description: 'ai_actions.@vitnode/forum.topic_tags.description', - promptVersion: 1, - permission: 'tags', - actors: ['system'], - requiredCapabilities: ['text', 'structured-output'], - defaults: { - maxInputCharacters: 20_000, - maxOutputTokens: 200, - timeoutMs: 30_000, - maxRetries: 1, - }, - inputSchema: z.object({ content: z.string().min(1) }), - output: 'object', - outputSchema: z.object({ tags: z.array(z.string().max(32)).max(5) }), - buildPrompt: (input) => ({ - system: 'Suggest up to five short, lowercase tags for this forum topic.', - prompt: input.content, - }), +export const aiAdminModule = buildModule({ + name: 'ai', + routes: [summarizeTopicRoute], }) - -export const TOPIC_TAGS_AI_ACTION = aiActionRef( - manifest.id, - suggestTagsAiAction, -) ``` -`actors: ["system"]` makes this a background-only action, so it needs no `authorize()`. See [Actors](#actors-users-and-the-system). - -### Images +Then add it to the forum's existing `admin` module: -For a vision action, require `image-input` and pass the image **bytes** as a `file` part. Read them server-side, for example with `c.get("storage").readBytes(key, maxBytes)`, so no private file ever has to be made public for the provider: +```ts title="plugins/forum/src/api/modules/admin/admin.module.ts (excerpt)" +import { aiAdminModule } from './ai/ai.admin.module' // [!code ++] -```ts -buildPrompt: (input) => ({ - messages: [ - { - role: 'user', - content: [ - { type: 'text', text: 'Describe this image in one sentence.' }, - { type: 'file', data: input.image, mediaType: input.mediaType }, - ], - }, +export const adminModule = buildModule({ + name: 'admin', + routes: [], + modules: [ + aiAdminModule, // [!code ++] + buildContentAdminModule({ + containers: [forumContainers], + contentTypes: [topicContent, commentContent], + }), ], -}), -``` - -`maxImages` defaults to `1` for these actions and bounds how many images one run may send. Only models that declare `image-input` are used. See [Model capabilities](/docs/dev/ai#model-capabilities). - -## Permissions and authorize() - -Every action names a **permission**. Admins grant it per role on the **Artificial intelligence (AI)** tab of the role form. Several actions may share one key. They then share one switch and one daily counter. - -```ts -permission: 'summarize' // same as { key: 'summarize', defaultGranted: false } -permission: { key: 'summarize', defaultGranted: true } -``` - -`defaultGranted` applies while no role has a setting for the key. The canonical permission is `:`. Two actions sharing a key must agree on `defaultGranted`, or boot fails. - -`authorize()` is **required** for actions users can run. The AI permission says "this role may use AI summaries". `authorize()` says "this user may read _this_ topic". Both must pass: - -```ts -// canReadTopic() is the forum plugin's own access check -authorize: async ({ c, input, userId }) => - await canReadTopic(c, { topicId: input.topicId, userId }), -``` - -`resource` is the optional `{ type, id }` the caller passed to `run()`. It is also stored with the run, so history can link back to the content. - -## Actors: users and the system - -`actors` decides who may run an action. The server sets the actor; the request never does. - -| Actor | Runs with | Charged to | -| :------- | :-------------------------- | :--------------------------------------------- | -| `user` | `c.get("ai").run()` | The site budget and the user's AI points | -| `system` | `c.get("ai").runAsSystem()` | The site budget and the optional system budget | - -The default is `["user"]`. `run()` uses the signed-in AdminCP user first, then the site user. Without one, it fails with `AI_UNAUTHORIZED`. - -Use `runAsSystem()` only from trusted server code: cron jobs, queue tasks, event listeners. No route should pass a client's request into it. - -```ts title="plugins/forum/src/api/cron/tag-topics.cron.ts" -import { isAiError } from '@vitnode/core/api/lib/ai/errors' -import { buildCron } from '@vitnode/core/api/lib/cron' - -import { TOPIC_TAGS_AI_ACTION } from '@/api/ai/actions' - -export const tagTopicsCron = buildCron({ - name: 'tag-new-topics', - description: 'Suggest tags for new forum topics', - schedule: '*/15 * * * *', - handler: async (c) => { - for (const topic of await loadUntaggedTopics(c)) { - try { - const { output } = await c.get('ai').runAsSystem({ - action: TOPIC_TAGS_AI_ACTION, - input: { content: topic.content }, - resource: { type: 'forum_topic', id: topic.id }, - }) - await saveTopicTags(c, topic.id, output.tags) - } catch (error) { - // Out of budget: stop now and try again on the next tick. - if (isAiError(error) && error.code === 'AI_BUDGET_EXHAUSTED') return - throw error - } - } - }, }) ``` -## Defaults and limits - -`defaults` sets an action's limits. Admins can override most of them per action in the AdminCP. Values outside the allowed range throw at boot. - -| Field | Required | Default | Range | -| :------------------- | :------- | :------------------------------- | :-------------- | -| `maxInputCharacters` | Yes | - | 1 – 1,000,000 | -| `maxOutputTokens` | Yes | - | 1 – 200,000 | -| `timeoutMs` | Yes | - | 1,000 – 600,000 | -| `maxRetries` | No | `0` | 0 – 3 | -| `maxSteps` | No | `1` | 1 – 10 | -| `maxImages` | No | `1` with `image-input`, else `0` | 0 – 10 | -| `dailyLimit` | No | `null` (no limit) | 0 – 100,000 | - -- `timeoutMs` applies to each attempt. -- `maxRetries` is extra attempts on the same model after a failed provider call. -- `maxSteps` is model round trips inside one attempt (tool loops). Each step is billed as its own call. -- `dailyLimit` counts runs per user per day for the action's permission key. A role's daily limit takes precedence over the admin's action setting, which takes precedence over this default. -- Admins cannot change `maxImages`, because it bounds the budget reserved for images. +The route is now served at `POST /api/@vitnode/forum/admin/ai/summarize`. -Admins can also, per action: switch it off, assign a model, assign a fallback model, and add `instructions`. - -## Run options - - - -`run()` and `runAsSystem()` resolve to: - -```ts -{ - output: Output, // validated by outputSchema - runId: number, - usage: { - chargedPoints: string, // points charged to the user, full precision; "0" for system runs - costKnown: boolean, - modelId: string, // the configured model that answered - }, -} -``` - -You can safely return `usage` to the browser: it never contains prices or provider details. - -## What happens during a run - -1. Find the action, check the actor, validate `input`. -2. Check the global AI switch and the action's switch. -3. For users: check the role permission, then `authorize()`. -4. Measure the input and the number of images. -5. Pick the model: the admin's choice, or the first configured model with every required capability. Resolve the optional fallback, skipping an incompatible one. -6. **Reserve** budget for the worst case and check rate and concurrency limits, in one short database transaction. -7. Call the provider outside any transaction. Retry up to `maxRetries` times, then try the fallback model once. -8. Validate the output. -9. **Settle**: charge the real cost and release the rest of the reservation. -10. Emit `ai.run.completed` or `ai.run.failed`. - -A canceled run stops immediately. An invalid answer is not retried on the same model, but the fallback model still gets one try. Everything before step 6 costs nothing. [Costs, Points & Budgets](/docs/dev/ai/costs-and-limits) explains steps 6 and 9. - -## Stream a text action - -`c.get("ai").stream()` streams a `text` action for the signed-in user. Object actions cannot be streamed. - -```ts -handler: async (c) => { - const { textStream } = await c.get('ai').stream({ - action: SUMMARIZE_TOPIC_AI_ACTION, - input: c.req.valid('json'), - signal: c.req.raw.signal, // stop paying when the reader leaves - }) - - return new Response(textStream.pipeThrough(new TextEncoderStream()), { - headers: { 'Content-Type': 'text/plain; charset=utf-8' }, - }) -} -``` - -The stream also returns `result`, a promise that resolves to the validated output once the stream ends, and rejects with an `AiError` if the full text is invalid. A stream makes one attempt on the primary model, with no retries and no fallback. If the reader cancels, the run settles as `canceled`. The user is charged nothing if no text had reached them yet; once text was sent, their points and daily count are charged as for a delivered run. - -## Error codes - -Every refusal and failure is an `AiError` with a stable `code`. Routes answer with this JSON body. Key the browser's messages on `code`, never on the English `message`: - -```json -{ - "code": "AI_USER_LIMIT_REACHED", - "message": "You used all your AI points for this period.", - "resetsAt": "2026-11-01T00:00:00.000Z", - "runId": 42 -} -``` - -`resetsAt` is set for limit and budget errors. `runId` is set when a run was recorded. - -| Code | Status | When | -| :----------------------- | :----- | :---------------------------------------------------------------------- | -| `AI_NOT_CONFIGURED` | 400 | No `ai.models` are configured. | -| `AI_INVALID_INPUT` | 400 | The input failed `inputSchema`, or an object action was streamed. | -| `AI_INPUT_TOO_LARGE` | 413 | The input exceeds `maxInputCharacters` or `maxImages`. | -| `AI_DISABLED` | 503 | An admin switched AI off for the whole site. | -| `AI_ACTION_DISABLED` | 403 | An admin switched this action off. | -| `AI_ACTION_UNKNOWN` | 404 | No installed plugin registers this key. | -| `AI_UNAUTHORIZED` | 403 | Not signed in, no AI permission, `authorize()` refused, or wrong actor. | -| `AI_MODEL_INCOMPATIBLE` | 409 | No model has the required capabilities. | -| `AI_PRICING_MISSING` | 409 | The model has no pricing while a budget cap applies. | -| `AI_USER_LIMIT_REACHED` | 429 | The user's monthly AI points are used up. | -| `AI_DAILY_LIMIT_REACHED` | 429 | The user reached today's limit for this permission. | -| `AI_RATE_LIMITED` | 429 | Too many runs started in the last minute. | -| `AI_CONCURRENCY_LIMITED` | 429 | Too many runs in flight. | -| `AI_BUDGET_EXHAUSTED` | 503 | The site budget (or the system budget) for this month is used up. | -| `AI_DUPLICATE_REQUEST` | 409 | The `idempotencyKey` was already used. | -| `AI_PROVIDER_FAILED` | 502 | The provider returned an error. | -| `AI_INVALID_OUTPUT` | 502 | The answer was empty or failed `parseText()` / `outputSchema`. | -| `AI_TIMEOUT` | 504 | The provider took longer than `timeoutMs`. | -| `AI_CANCELED` | 408 | The `signal` aborted the run. | - -Import the helpers from `@vitnode/core/api/lib/ai/errors`: `AiError`, `isAiError()`, `AI_ERROR_CODES` and `AI_ERROR_STATUS`. - -## Events - -Each run that got past the reservation emits one event after it settles: - -| Event | Payload | -| :----------------- | :------------------------------------------------------- | -| `ai.run.completed` | `actionKey`, `actorType`, `runId`, `userId` | -| `ai.run.failed` | `actionKey`, `actorType`, `errorCode`, `runId`, `userId` | - -`userId` is `null` for system runs. Refusals before the reservation, such as a missing permission or a reached limit, emit nothing. A listener that throws never breaks the run. - -```ts title="plugins/forum/src/api/lib/ai-events.ts" -import { buildEventListener } from '@vitnode/core/api/lib/events' - -export const aiFailureListener = buildEventListener({ - event: 'ai.run.failed', - name: 'log-ai-failures', - handler: async (c, payload) => { - if (!payload.actionKey.startsWith('@acme/forum:')) return - await c - .get('log') - .warn(`AI run ${payload.runId} failed: ${payload.errorCode}`) - }, -}) -``` + -See [Events](/docs/dev/events) for registering listeners. + -## Learn more +## Check the result + +Start or restart the dev server so the API loads the new action, then sign in to the AdminCP. + +1. Open **Artificial Intelligence (AI) → Actions**. A **Summarize topic** row appears with its description and icon. Nothing has been spent yet. +2. Add a temporary button that calls the route with `fetcher`. Create `src/pages/check-summarize.tsx`: + + ```tsx title="plugins/forum/src/pages/check-summarize.tsx" + import { Button } from '@vitnode/core/components/ui/button' + import { fetcher } from '@vitnode/core/tanstack/fetcher' + import { useState } from 'react' + + import { manifest } from '@/manifest.gen' + + export const CheckSummarize = () => { + const [result, setResult] = useState('') + const [isPending, setIsPending] = useState(false) + + const onClick = async () => { + setIsPending(true) + try { + const response = await fetcher({ + plugin: manifest.id, + method: 'post', + module: 'admin/ai', + path: '/summarize', + args: { + body: { + title: 'Parking on Saturday', + content: + 'The lot is closed on Saturday morning for repainting. Park on Elm Street instead.', + }, + }, + }) + setResult(JSON.stringify(await response.json())) + } finally { + setIsPending(false) + } + } + + return ( +
          + + {result ? {result} : null} +
          + ) + } + ``` + + Render `` on a forum page, such as `src/pages/forum-page.tsx`. The browser sends the AdminCP session cookie from every page, so open that page in the browser you signed in with and press the button. It shows `{"text":"…"}` with a two-sentence summary. This call spends real provider tokens. Remove the button when you are done. + +3. Open **Debug Panel → AI logs**. The newest row is `@vitnode/forum:topic.summarize` with status `succeeded`, the model that answered, the tokens and the cost. + +If the call answers an error instead, the body names it, for example `{ "code": "AI_NOT_CONFIGURED", ... }` when `ai.models` is empty. [AI errors and limits](/docs/dev/ai/errors) lists every code and its fix. + +Your own React code calls the route the same way, with `fetcher`. See [Fetcher](/docs/dev/fetcher). + +## Related + diff --git a/apps/web/content/docs/dev/ai/admin.mdx b/apps/web/content/docs/dev/ai/admin.mdx index bcc653c7e3..d160b0e344 100644 --- a/apps/web/content/docs/dev/ai/admin.mdx +++ b/apps/web/content/docs/dev/ai/admin.mdx @@ -1,5 +1,5 @@ --- -title: AdminCP & Account Usage +title: AI in the AdminCP description: Manage AI in the VitNode AdminCP with the global switch, monthly budgets in USD, per-action settings, AI access on roles and users, and history. Members see their AI points at /settings/ai. icon: LayoutDashboard --- @@ -26,7 +26,7 @@ Models and their prices are not edited in the AdminCP. They live in `vitnode.api ## First-time setup -[AI Setup](/docs/dev/ai) covers the models and prices you set in code. Everything after that happens in the AdminCP. +[AI setup](/docs/dev/ai) covers the models and prices you set in code. Everything after that happens in the AdminCP. @@ -58,7 +58,7 @@ Open **Users → Roles**, edit a role and switch to the **Artificial intelligenc ### Optionally turn on automatic ALT text -In the same **Settings** sheet, under **ALT text**, switch on **Write ALT text automatically**. You need a vision model (`image-input`) with pricing and a running cron. See [Automatic Image ALT Text](/docs/dev/ai/automatic-alt). +In the same **Settings** sheet, under **ALT text**, switch on **Write ALT text automatically**. You need a vision model (`image-input`) with pricing and a running cron. See [Image alt text](/docs/dev/ai/automatic-alt). @@ -100,7 +100,7 @@ Switch **AI features** off and the rest of the sheet hides, because none of it a Budgets and allowances are calendar months in the **site's time zone** (the default language's). The settings sheet shows which one. -Budgets are in **USD**, because that is what providers bill. Members are charged in **AI points**. [Costs, Points & Budgets](/docs/dev/ai/costs-and-limits) explains the conversion and what happens on failure. +Budgets are in **USD**, because that is what providers bill. Members are charged in **AI points**. [Costs and budgets](/docs/dev/ai/costs-and-limits) explains the conversion and what happens on failure. ## Actions @@ -233,21 +233,23 @@ Every screen is backed by an API route under `@vitnode/core`. Use them with [`fe | `GET /ai/usage` | signed in | The member's own allowance, notices and features | | `GET /ai/history?action=&limit=` | signed in | The member's own runs, optionally for one feature | +[Custom UI](/docs/dev/ai/custom-ui#built-in-run-routes) and [Streaming](/docs/dev/ai/streaming#built-in-stream-routes) list the routes that run actions (`/admin/ai/assist*`, `/ai/run`, `/ai/stream`, `/ai/estimate`, `/ai/available` and the feedback routes). [Translations](/docs/dev/ai/translations#track-outdated-translations) covers `/admin/ai/translation-sources`. + ## Learn more diff --git a/apps/web/content/docs/dev/ai/automatic-alt.mdx b/apps/web/content/docs/dev/ai/automatic-alt.mdx index ff10ce5703..d0906248e8 100644 --- a/apps/web/content/docs/dev/ai/automatic-alt.mdx +++ b/apps/web/content/docs/dev/ai/automatic-alt.mdx @@ -1,5 +1,5 @@ --- -title: Automatic Image ALT Text +title: Image alt text description: VitNode can describe uploaded images in the background and translate the ALT text into every site language, under a budget and without overwriting text a person wrote. This page covers how it works, how to render it and how to run its cron. icon: Image --- @@ -22,6 +22,8 @@ import { resolveImageAlt } from '@vitnode/core/lib/files/resolve-alt' /> ``` +`item` is the article your page loader returned, and `locale` and `defaultLocale` are the page's current and default languages. See [Render the ALT text](#render-the-alt-text) for the rules `resolveImageAlt()` follows. + ## Turn it on @@ -138,7 +140,7 @@ Each task has a 15-minute lease. A worker that dies mid-task leaves it `processi The job reads the image **server-side** and sends bytes to the provider, never a URL: -- through the storage adapter's optional `read(key, { maxBytes })` method (the Local adapter has one); +- through the storage adapter's optional `read(key, { maxBytes })` method (the bundled Local, S3 and Supabase adapters all have one); - otherwise by a bounded server-side `fetch()` of the adapter's URL. Files over 20 MB are skipped. With `sharp` installed, the copy sent to the provider is resized to at most 1024 px and re-encoded as WebP. A private file never has to be made public for the AI provider. @@ -253,23 +255,23 @@ See [Built-in events](/docs/dev/events/built-in-events#ai-events). - **Images only.** The job reads `image/jpeg`, `image/png`, `image/gif` and `image/webp`. It never analyses other files. - **Base language is English.** Other languages are translations of the English description. - **Legacy `metadata.alt` is not migrated.** An ALT a plugin stored in the free-form `core_files.metadata` column has no language, and VitNode does not guess one. The job treats those images as missing ALT text. Copy such values into `core_files_alt` yourself with `PUT /admin/files/{id}/alt` if you know their language. -- **Cost.** The **Automatic ALT text** card on **Artificial Intelligence (AI) → Overview** shows images described, translations and the known cost per image and per translation. +- **Cost.** The job's runs appear in **Debug Panel → AI logs** under **Background jobs**. Filter by the actions `@vitnode/core:media.alt.generate` and `@vitnode/core:media.alt.translate` to see what each image and translation cost. ## Learn more diff --git a/apps/web/content/docs/dev/ai/costs-and-limits.mdx b/apps/web/content/docs/dev/ai/costs-and-limits.mdx index f7a75e7ab1..ee385a2610 100644 --- a/apps/web/content/docs/dev/ai/costs-and-limits.mdx +++ b/apps/web/content/docs/dev/ai/costs-and-limits.mdx @@ -1,5 +1,5 @@ --- -title: Costs, Points & Budgets +title: Costs and budgets description: How VitNode prices every AI call, converts it to AI points, reserves budget before a provider call and charges users only for results they receive. icon: Coins --- @@ -336,12 +336,12 @@ Budgets, reservations, rate limits, concurrency and idempotency keys live in Pos diff --git a/apps/web/content/docs/dev/ai/custom-ui.mdx b/apps/web/content/docs/dev/ai/custom-ui.mdx new file mode 100644 index 0000000000..3df93921db --- /dev/null +++ b/apps/web/content/docs/dev/ai/custom-ui.mdx @@ -0,0 +1,170 @@ +--- +title: Custom UI +description: Run any registered VitNode AI action from your own AdminCP component with useAvailableAiActions() and requestAiAssist(), using Core's generic AI routes instead of writing a route of your own. +icon: MousePointerClick +--- + +The [field suggestion](/docs/dev/ai/fields-and-editor) button is built on generic Core routes that run any registered AI action for the signed-in user. Your own components can use them too, so an AI button needs no API route of its own. This page adds a **Summarize** button for the forum's **Summarize topic** action to an AdminCP component. + +## Before you begin + +- **An action that users can run** (`actors` includes `user`), registered in a plugin. This page uses **Summarize topic** from [AI actions](/docs/dev/ai/actions). +- **An AdminCP page or dialog in your plugin** to put the button on. `requestAiAssist()` calls the AdminCP route, so it uses the admin's session. + +## Add an AI button + + + + + +### Hide the button when the action is unavailable + +`useAvailableAiActions()` returns the action keys the current admin may start. An action makes the list when AI is on, the action is enabled, a configured model can run it, and the admin's roles grant its permission. + +```tsx title="plugins/forum/src/views/admin/summarize-button.tsx" +import { useAvailableAiActions } from '@vitnode/core/components/ai/use-available-ai-actions' + +const SUMMARIZE_ACTION = '@vitnode/forum:topic.summarize' + +export const SummarizeButton = ({ + content, + title, +}: { + content: string + title: string +}) => { + const { data: available = [] } = useAvailableAiActions('admin') + if (!available.includes(SUMMARIZE_ACTION)) return null + + // ...the button comes in the next step +} +``` + +The list only decides which buttons to show. The server checks the permission and `authorize()` again on every run. + + + + + +### Run the action + +`requestAiAssist()` posts to `POST /admin/ai/assist` with a fresh idempotency key and resolves to `{ output, runId }`. On failure it throws an `AiRequestError`; `aiErrorCodeOf()` reads its code, and Core's `core.global.ai_assist.error` messages translate it. + +```tsx title="plugins/forum/src/views/admin/summarize-button.tsx" +import { useAvailableAiActions } from '@vitnode/core/components/ai/use-available-ai-actions' +import { Button } from '@vitnode/core/components/ui/button' +import { + aiErrorCodeOf, + requestAiAssist, +} from '@vitnode/core/lib/ai/assist-client' +import React from 'react' +import { useTranslations } from 'use-intl' + +const SUMMARIZE_ACTION = '@vitnode/forum:topic.summarize' + +export const SummarizeButton = ({ + content, + title, +}: { + content: string + title: string +}) => { + const tError = useTranslations('core.global.ai_assist.error') + const { data: available = [] } = useAvailableAiActions('admin') + const [summary, setSummary] = React.useState(null) + const [error, setError] = React.useState(null) + const [pending, setPending] = React.useState(false) + + if (!available.includes(SUMMARIZE_ACTION)) return null + + const onClick = async () => { + setPending(true) + setError(null) + try { + const { output } = await requestAiAssist({ + action: SUMMARIZE_ACTION, + input: { content, title }, + }) + setSummary(typeof output === 'string' ? output : null) + } catch (caught) { + setError(tError(aiErrorCodeOf(caught))) + } finally { + setPending(false) + } + } + + return ( +
          + + {summary &&

          {summary}

          } + {error &&

          {error}

          } +
          + ) +} +``` + +`output` is `unknown` in the browser, because the generic route does not know your action's types. Check its shape before you use it. + +
          + + + +### Record whether the result was used (optional) + +When the editor accepts or discards a suggestion, record it on the run. It feeds the AI logs and never changes what was charged. Read `runId` from the `requestAiAssist()` result: + +```ts +import { sendAiFeedback } from '@vitnode/core/lib/ai/assist-client' + +await sendAiFeedback({ accepted: true, runId }) +``` + +`sendAiFeedback()` ignores network errors, so it never breaks the UI. + + + +
          + +## Check the result + +Render `` on an AdminCP page with a topic's title and text, then click **Summarize**. The button shows its loading state, and the summary appears below it. **Debug Panel → AI logs** shows the run. An admin whose roles lack the `summarize` permission does not see the button at all. + +## Built-in run routes + +| Route | Session | Purpose | +| :----------------------------------------- | :---------- | :------------------------------------------ | +| `POST /admin/ai/assist` | AdminCP | Run an action, JSON in, JSON out. | +| `GET /admin/ai/assist/available` | AdminCP | Action keys this admin may start. | +| `POST /admin/ai/assist/runs/{id}/feedback` | AdminCP | Record `{ accepted }` for one of your runs. | +| `POST /ai/run` | Site member | Run an action, JSON in, JSON out. | +| `GET /ai/available` | Site member | Action keys this member may start. | +| `POST /ai/runs/{id}/feedback` | Site member | Record `{ accepted }`. | + +All of them live in `@vitnode/core`, so the full path is `/api/@vitnode/core/...`. The run body is `{ action, input, idempotencyKey?, resource?, sourceFingerprint? }`, and a successful run answers `{ output, runId, usage }`. The body never carries a model, a price or an actor; the server decides those. These routes have no extra staff permission on purpose. The action's AI permission and its `authorize()` decide who gets in. + +For member pages, use `useAvailableAiActions('user')` and call `POST /ai/run` with [`fetcher`](/docs/dev/fetcher). `requestAiAssist()` only calls the AdminCP route. To stream the answer instead, see [Streaming](/docs/dev/ai/streaming). + +## Example: pre-publication review + +The blog's `@vitnode/blog:article.review` action is an optional read-through in the article editor's side panel, built exactly like this. Its component sends `{ content, locale, title }` with `requestAiAssist()`, where `content` is the article's rich-text document. It is an `output: "object"` action, so it needs a `structured-output` model, and it returns: + +```ts +{ + summary: string, + suggestions: Array<{ + area: 'clarity' | 'completeness' | 'structure' | 'tone', + fix: { quote: string, replacement: string } | null, + message: string, + priority: 'high' | 'low', + }>, // at most 8 +} +``` + +`fix` is set when a suggestion is about specific wording. `quote` is a passage copied from the article and `replacement` is the rewritten passage, or an empty string to delete it. + +- It **never verifies facts**. The prompt forbids judging whether facts are true, because the model has nothing to check them against. +- It **never gates publishing**. Publishing works the same with or without a review. + +Read `plugins/blog/src/api/ai/actions.ts` and `plugins/blog/src/views/admin/article/editor/ai-review.tsx` for the whole feature. diff --git a/apps/web/content/docs/dev/ai/errors.mdx b/apps/web/content/docs/dev/ai/errors.mdx new file mode 100644 index 0000000000..59cabd7248 --- /dev/null +++ b/apps/web/content/docs/dev/ai/errors.mdx @@ -0,0 +1,189 @@ +--- +title: Errors and limits +description: Handle VitNode AI action errors. The AiError JSON body, every error code with its status and fix, showing errors in the browser, stopping background jobs when the budget runs out, and listening to ai.run events. +icon: ShieldAlert +--- + +When an AI action is refused or fails, VitNode throws an `AiError` with a stable `code` such as `AI_USER_LIMIT_REACHED`. This page shows how to read that code in a route, in the browser and in a background job, what each code means and how to fix it, and how to react to finished runs with events. + +The examples continue the **Summarize topic** action from [AI actions](/docs/dev/ai/actions). + +## The error body + +A route that calls `c.get("ai").run()` does not need a `try`/`catch`. `AiError` is a Hono `HTTPException`, so an uncaught one becomes a response with the code's status and this JSON body: + +```json +{ + "code": "AI_USER_LIMIT_REACHED", + "message": "You used all your AI points for this period.", + "resetsAt": "2026-11-01T00:00:00.000Z", + "runId": 42 +} +``` + +- `resetsAt` is set for limit and budget errors. +- `runId` is set when a run was recorded, so you can find it in **Debug Panel → AI logs**. +- `message` is English, for logs. Key whatever the user sees on `code`. + +You can see one without spending anything. Core's member run route refuses a request without a session before it looks at the action: + +```bash +curl -i -X POST http://localhost:3000/api/@vitnode/core/ai/run \ + -H 'Content-Type: application/json' \ + -H 'Origin: http://localhost:3000' \ + -d '{"action":"@vitnode/forum:topic.summarize","input":{}}' +``` + +```text +HTTP/1.1 403 + +{"code":"AI_UNAUTHORIZED","message":"Sign in to use AI features."} +``` + +## Error codes + +| Code | Status | When | What to do | +| :----------------------- | :----- | :---------------------------------------------------------------------- | :------------------------------------------------------------------ | +| `AI_NOT_CONFIGURED` | 400 | No `ai.models` are configured. | Add a model in [AI setup](/docs/dev/ai). | +| `AI_INVALID_INPUT` | 400 | The input failed `inputSchema`, or an object action was streamed. | Send the shape the action's `inputSchema` expects. | +| `AI_INPUT_TOO_LARGE` | 413 | The input exceeds `maxInputCharacters` or `maxImages`. | Send less, or raise the limit on the action. | +| `AI_DISABLED` | 503 | An admin switched AI off for the whole site. | Switch it on in the AI **Settings** sheet. | +| `AI_ACTION_DISABLED` | 403 | An admin switched this action off. | Switch it on in **Artificial Intelligence (AI) → Actions**. | +| `AI_ACTION_UNKNOWN` | 404 | No installed plugin registers this key. | Check the canonical key and the plugin's `aiActions`. | +| `AI_UNAUTHORIZED` | 403 | Not signed in, no AI permission, `authorize()` refused, or wrong actor. | Sign in, grant the permission on the role, or check `authorize()`. | +| `AI_MODEL_INCOMPATIBLE` | 409 | No model has the required capabilities. | Declare the capability on a model, e.g. `streaming` for streams. | +| `AI_PRICING_MISSING` | 409 | The model has no pricing while a budget cap applies. | Add `pricing` to the model. | +| `AI_USER_LIMIT_REACHED` | 429 | The user's monthly AI points are used up. | Wait for `resetsAt`, or give the role more points. | +| `AI_DAILY_LIMIT_REACHED` | 429 | The user reached today's limit for this permission. | Wait for `resetsAt`, or raise the daily limit. | +| `AI_RATE_LIMITED` | 429 | Too many runs started in the last minute. | Try again in a minute. | +| `AI_CONCURRENCY_LIMITED` | 429 | Too many runs in flight. | Wait for a running request to finish. | +| `AI_BUDGET_EXHAUSTED` | 503 | The site budget (or the system budget) for this month is used up. | Wait for `resetsAt`, or raise the budget. | +| `AI_DUPLICATE_REQUEST` | 409 | The `idempotencyKey` was already used. | Send a fresh key for a new run. | +| `AI_PROVIDER_FAILED` | 502 | The provider returned an error. | Try again; check the provider key and status. | +| `AI_INVALID_OUTPUT` | 502 | The answer was empty or failed `parseText()` / `outputSchema`. | Try again; loosen the schema or tighten the prompt if it repeats. | +| `AI_TIMEOUT` | 504 | The provider took longer than `timeoutMs`. | Try again, or raise `timeoutMs`. | +| `AI_CANCELED` | 408 | The `signal` aborted the run. | Nothing; the reader stopped it. | + +VitNode charges a user only when they received output, meaning a valid result or streamed text that reached them before they stopped it. When the provider fails, times out or answers unusably, the site budget pays whatever the provider billed. [Who pays what](/docs/dev/ai/costs-and-limits#who-pays-what) has the full table. + +## Limits that refuse a run + +Four of those codes come from limits admins set. Core checks them before it sends anything to a provider, so a refusal costs nothing: + +| Limit | Set in | Code | +| :------------- | :--------------------------------------------------------- | :----------------------- | +| Monthly points | Role form → **Artificial intelligence (AI)** tab | `AI_USER_LIMIT_REACHED` | +| Daily count | Role form, the action's settings or `defaults.dailyLimit` | `AI_DAILY_LIMIT_REACHED` | +| Rate and concurrency | AI **Settings** sheet (10 runs a minute and 2 at once per user by default) | `AI_RATE_LIMITED`, `AI_CONCURRENCY_LIMITED` | +| Site budget | AI **Settings** sheet → **Monthly site budget** | `AI_BUDGET_EXHAUSTED` | + +[AI in the AdminCP](/docs/dev/ai/admin#ai-access) shows where each one lives, and [Costs and budgets](/docs/dev/ai/costs-and-limits) explains how points and budgets are counted. + +## Show errors in the browser + +Core's browser helpers (`requestAiAssist()`, `streamAiAction()`) throw an `AiRequestError`. Read its code with `aiErrorCodeOf()`, which returns `"unknown"` for anything else, and translate it with Core's ready-made messages in `core.global.ai_assist.error`: + +```tsx +import { aiErrorCodeOf } from '@vitnode/core/lib/ai/assist-client' +import { useTranslations } from 'use-intl' + +const tError = useTranslations('core.global.ai_assist.error') + +try { + // requestAiAssist(...) or streamAiAction(...) +} catch (caught) { + setError(tError(aiErrorCodeOf(caught))) // "You reached today's limit for this AI feature." +} +``` + +`setError` is your component's own state setter. When you call your own route with `fetcher`, read `code` from the JSON body of a non-2xx response instead. + +## Handle errors on the server + +Import the helpers from `@vitnode/core/api/lib/ai/errors`: + +| Export | What it is | +| :---------------- | :--------------------------------------------- | +| `AiError` | The error class, with `code` and `body`. | +| `isAiError(error)` | Whether a caught value is an `AiError`. | +| `AI_ERROR_CODES` | Every code, as an array. | +| `AI_ERROR_STATUS` | The HTTP status of each code. | + +Catch only the codes you can do something about, and rethrow the rest so the client still gets the right status. + +## Run an action in a background job + +A background job runs an action as the **system actor** with `c.get("ai").runAsSystem()`. System runs spend the site budget and the optional background jobs budget, never a member's points. + +First allow the system to run the action. Keep `user` so the AdminCP route still works: + +```ts title="plugins/forum/src/api/ai/actions.ts (excerpt)" +const summarizeTopicAiAction = defineAiAction({ + id: 'topic.summarize', + actors: ['user', 'system'], // [!code ++] + // ...the rest stays the same +}) +``` + +Then call it from a cron job and stop when the budget runs out, instead of failing on every topic: + +```ts title="plugins/forum/src/api/cron/summarize-topics.cron.ts" +import { isAiError } from '@vitnode/core/api/lib/ai/errors' +import { buildCron } from '@vitnode/core/api/lib/cron' + +import { SUMMARIZE_TOPIC_AI_ACTION } from '@/api/ai/actions' + +export const summarizeTopicsCron = buildCron({ + name: 'summarize-new-topics', + description: 'Summarize new forum topics', + schedule: '*/15 * * * *', + handler: async (c) => { + for (const topic of await loadTopicsWithoutSummary(c)) { + try { + const { output } = await c.get('ai').runAsSystem({ + action: SUMMARIZE_TOPIC_AI_ACTION, + input: { content: topic.content, title: topic.title }, + resource: { type: 'forum_topic', id: topic.id }, + }) + await saveTopicSummary(c, topic.id, output) + } catch (error) { + // Out of budget: stop now and try again on the next tick. + if (isAiError(error) && error.code === 'AI_BUDGET_EXHAUSTED') return + throw error + } + } + }, +}) +``` + +`loadTopicsWithoutSummary()` and `saveTopicSummary()` stand for your plugin's own queries; the forum has no summary column, so add one where you keep summaries. `resource` links each run in the AI logs to its topic. + +Register the job in a top-level module's `cronJobs`, for example the forum's `admin` module: `buildModule({ name: 'admin', cronJobs: [summarizeTopicsCron], ... })`. See [Cron jobs](/docs/dev/cron). + +## React to runs with events + +Each run that got past the budget reservation emits one event after it settles: + +| Event | Payload | +| :----------------- | :------------------------------------------------------- | +| `ai.run.completed` | `actionKey`, `actorType`, `runId`, `userId` | +| `ai.run.failed` | `actionKey`, `actorType`, `errorCode`, `runId`, `userId` | + +`userId` is `null` for system runs. Refusals before the reservation, such as a missing permission or a reached limit, emit nothing. A listener that throws never breaks the run. + +```ts title="plugins/forum/src/api/lib/ai-events.ts" +import { buildEventListener } from '@vitnode/core/api/lib/events' + +export const aiFailureListener = buildEventListener({ + event: 'ai.run.failed', + name: 'log-ai-failures', + handler: async (c, payload) => { + if (!payload.actionKey.startsWith('@vitnode/forum:')) return + await c + .get('log') + .warn(`AI run ${payload.runId} failed: ${payload.errorCode}`) + }, +}) +``` + +Add it to a top-level module's `events` array, for example `buildModule({ name: 'admin', events: [aiFailureListener], ... })`. See [Events](/docs/dev/events) and [Built-in events](/docs/dev/events/built-in-events#ai-events). diff --git a/apps/web/content/docs/dev/ai/fields-and-editor.mdx b/apps/web/content/docs/dev/ai/fields-and-editor.mdx index 4dc8111f82..e35796c17e 100644 --- a/apps/web/content/docs/dev/ai/fields-and-editor.mdx +++ b/apps/web/content/docs/dev/ai/fields-and-editor.mdx @@ -1,30 +1,21 @@ --- -title: AI in Fields & the Editor -description: Add an AI suggestion button to a Content Engine text field with one option, use Quick Ask in the rich text editor, validate rich-text translations, track which translations are outdated, and offer an optional pre-publication review. +title: Field suggestions +description: Add an AI suggestion button to a Content Engine text or textarea field in the VitNode AdminCP. Point the field's ai option at a registered AI action, and editors review each suggestion before it is used. icon: TextCursorInput --- import { TypeTable } from 'fumadocs-ui/components/type-table' -Give a Content Engine `text` or `textarea` field an `ai` option and the AdminCP form shows an **AI** button next to it. The button runs a registered [AI action](/docs/dev/ai/actions) with the other fields as input, shows the suggestion for review, and writes nothing until the editor accepts it. +Give a Content Engine `text` or `textarea` field an `ai` option and the AdminCP form shows an **AI** button next to it. The button runs a registered [AI action](/docs/dev/ai/actions) with other fields of the item as input, shows the suggestion for review, and writes nothing until the editor accepts it. You write no route, no button and no form code. -```ts title="plugins/example/src/content/article.ts" -excerpt: field.textarea({ - ai: { - action: '@vitnode/example:article.excerpt', - mode: 'suggestion', - sourceFields: ['title', 'code'], - }, - maxLength: 500, - nullable: true, -}), -``` +On this page the `newsroom` plugin suggests a story teaser (`excerpt`) from the story's title and reference code. It is the real code from the `newsroom` plugin. -You write no route, no button and no form code. Core provides all of it. +## Before you begin -## Add AI to a field in your plugin +- **A language model with the `text` capability** in `ai.models`. See [AI setup](/docs/dev/ai). +- **A Content Engine content type with a `text` or `textarea` field** to fill, and the fields it should be written from. The example uses `newsroom.story`; see [Create a content type](/docs/content-engine/create-a-content-type) to make one. -The `@vitnode/example` plugin suggests an article teaser from its title and product code. Here is the whole feature. +## Add AI to a field @@ -32,27 +23,43 @@ The `@vitnode/example` plugin suggests an article teaser from its title and prod ### Define the action -The action's input is **one string per source field, plus `locale`** for the language being edited. Match `inputSchema` to that shape. +The field sends **one string per source field, plus `locale`** for the language being edited. Match `inputSchema` to that shape: -```ts title="plugins/example/src/api/ai/actions.ts" +```ts title="plugins/newsroom/src/api/ai/actions.ts" import { defineAiAction } from '@vitnode/core/api/lib/ai/action' +import { languageName } from '@vitnode/core/api/lib/ai/language-name' import { checkStaffPermission } from '@vitnode/core/api/lib/check-staff-permission' import { z } from 'zod' -import { articleContentType } from '@/content/article' +import { storyContentType } from '@/content/story' import { manifest } from '@/manifest.gen' -export const articleExcerptAiAction = defineAiAction({ - id: 'article.excerpt', - description: 'Suggests a teaser for an example article.', - promptVersion: 1, - permission: { key: 'article.excerpt', defaultGranted: true }, - requiredCapabilities: ['text'], +export const storyExcerptAiAction = defineAiAction({ + authorize: async ({ c }) => + await checkStaffPermission(c, { + module: storyContentType.permissionModule, + permission: 'can_edit', + plugin: manifest.id, + type: 'admin', + }), + buildPrompt: (input, { instructions }) => ({ + prompt: `Title: ${input.title}\nReference code: ${input.code}`, + system: [ + 'You write a one-sentence teaser for a newsroom story.', + `Write it in ${languageName(input.locale)}, under 200 characters.`, + 'Answer with the teaser only, without quotes.', + ...(instructions ? [instructions] : []), + ].join('\n'), + }), defaults: { maxInputCharacters: 400, maxOutputTokens: 120, timeoutMs: 20_000, }, + description: 'ai_actions.newsroom.story_excerpt.description', + icon: 'sparkles', + id: 'story.excerpt', + title: 'ai_actions.newsroom.story_excerpt.title', // [!code ++:5] inputSchema: z.object({ code: z.string().max(100), @@ -62,40 +69,49 @@ export const articleExcerptAiAction = defineAiAction({ output: 'text', outputSchema: z.string().min(1).max(500), parseText: (text) => text.trim().replace(/^["“](.*)["”]$/su, '$1'), - buildPrompt: (input, { instructions }) => ({ - prompt: `Title: ${input.title}\nProduct code: ${input.code}`, - system: [ - 'You write a one-sentence teaser for an article in a demo catalogue.', - `Write it in ${input.locale}, under 200 characters.`, - 'Answer with the teaser only, without quotes.', - ...(instructions ? [instructions] : []), - ].join('\n'), - }), - // The AI permission never replaces access to the content. - authorize: async ({ c }) => - await checkStaffPermission(c, { - module: articleContentType.permissionModule, - permission: 'can_edit', - plugin: manifest.id, - type: 'admin', - }), + permission: { defaultGranted: true, key: 'story.excerpt' }, + promptVersion: 1, + requiredCapabilities: ['text'], }) ``` -The real file turns the locale code into a language name with `Intl.DisplayNames`, because models write better for "Polish" than for "pl". +`authorize` asks for the story's own `can_edit`, because the AI permission never replaces access to the content. `languageName` turns the locale code into a language name, because models write better for "Polish" than for "pl". + + + + + +### Add the title and description + +`title` and `description` are message keys. Add their text under `ai_actions` and the plugin id, next to the plugin's existing messages: + +```json title="plugins/newsroom/src/locales/en.json (excerpt)" +{ + "ai_actions": { + "newsroom": { + "story_excerpt": { + "title": "Suggest story teaser", + "description": "Suggests a teaser for a newsroom story." + } + } + } +} +``` -### Register it +### Register the action -```ts title="plugins/example/src/config.api.ts" -export const exampleApiPlugin = () => +```ts title="plugins/newsroom/src/config.api.ts (excerpt)" +import { storyExcerptAiAction } from '@/api/ai/actions' // [!code ++] + +export const newsroomApiPlugin = () => buildApiPlugin({ manifest, - aiActions: [articleExcerptAiAction], // [!code ++] - modules: [adminModule /* ... */], + aiActions: [storyExcerptAiAction], // [!code ++] + // ...blocks, modules and the rest stay unchanged }) ``` @@ -103,15 +119,15 @@ export const exampleApiPlugin = () => -### Point the field at it +### Point the field at the action -Use the canonical key, `:`: +Use the canonical key, `:`. The newsroom plugin's id is `newsroom`: -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts (excerpt)" excerpt: field.textarea({ // [!code ++:5] ai: { - action: '@vitnode/example:article.excerpt', + action: 'newsroom:story.excerpt', mode: 'suggestion', sourceFields: ['title', 'code'], }, @@ -126,13 +142,30 @@ excerpt: field.textarea({ ### Give editors access -The editor's role needs the action's permission and an AI points allowance. See [AI access](/docs/dev/ai/admin#ai-access). With `defaultGranted: true` the permission is on until a role says otherwise, but the default monthly points are `0`, so non-root editors still need an allowance. +A root role can use the button right away. Any other editor's role needs the action's permission and an AI points allowance. Open **Users → Roles**, edit the role and use its **Artificial intelligence (AI)** tab. With `defaultGranted: true` the permission is on until a role says otherwise, but the default monthly points are `0`. See [AI access](/docs/dev/ai/admin#ai-access). -### The `ai` field option +## Check the result + +Restart the dev server, open the newsroom stories in the AdminCP and create or edit a story. Fill in the title and the code, then click the **AI** button next to the excerpt field. + +1. **Generate** sends the source fields in the language being edited. While a source field is empty it stays disabled and names the field: _"Fill in … first."_ +2. The suggestion appears in a review panel with **Discard**, **Try again** and **Use suggestion**. +3. **Use suggestion** puts the text into the field, in the edited language only. Nothing is saved until you save the form, which still goes through validation and revisions. + +{/* Image prompt: The newsroom story form in the AdminCP with the AI suggestion panel open next to the Excerpt field, showing a one-sentence teaser and the Discard, Try again and Use suggestion buttons. */} + +The panel warns before stale text replaces anything: + +- If **the sources changed** since the suggestion was made, it says _"The text it was written from changed since. Try again for an up-to-date suggestion."_ +- If **the editor typed into the field** after asking, the accept button becomes **Replace my newer text**. + +The **AI** button appears only when this admin may start the action. That means AI is on, the action is enabled, a configured model can run it, and the admin's roles grant its permission. Each run shows up in **Debug Panel → AI logs**. Core records an accept or discard on the run for statistics only, and it never changes what was charged. Each [error code](/docs/dev/ai/errors#error-codes) has its own message, such as _"The AI provider failed. Nothing was charged to you."_ + +## The ai field option - Both actions share the permission `@vitnode/core:editor.assist` with - `defaultGranted: false`. Nobody but root sees Quick Ask until an admin allows - it for a role in **Artificial Intelligence (AI) → Access & limits** and gives - that role points. - - -How it behaves: - -- **Bounded context.** It sends the selection (up to 8,000 characters) and up to 1,500 characters before and after it. It never sends the whole document. -- **Streamed and previewed.** The answer streams into a preview. **Stop** cancels it; stopping before any text arrives charges the member nothing, while stopping after text has streamed in counts as a run. -- **Cost shown first.** With a selection, the panel shows the reservation bound, not a price: _"One request costs at most N AI points - usually much less."_ -- **Plain text only.** The answer becomes paragraphs and hard breaks. It is never parsed as HTML, so it cannot inject markup, links or scripts. -- **Stale selection.** If the selected text changed while the answer was written, **Replace selection** is disabled; **Insert below** still works. -- **One-step undo.** Applying is one editor transaction. The toast's **Undo** or Ctrl+Z restores the text exactly. -- **Nothing is saved** until the form is saved. -- **Content language.** It writes in the language of the field being edited (the multi-language tab), not the interface language. -- **Streaming models only.** Streamed runs use only models that declare the `streaming` capability; without one, Quick Ask fails with `AI_MODEL_INCOMPATIBLE`. - -Quick Ask uses the AdminCP routes on `/admin` pages and the member routes everywhere else. - -### Streaming and estimate routes - -| Route | Session | -| :------------------------------- | :---------- | -| `POST /admin/ai/assist/stream` | AdminCP | -| `POST /admin/ai/assist/estimate` | AdminCP | -| `POST /ai/stream` | Site member | -| `POST /ai/estimate` | Site member | - -The stream routes accept the same body as `/ai/run` and answer `application/x-ndjson`, one JSON object per line: - -```text -{"t":"A tighter "} -{"t":"version of the paragraph."} -{"done":{"runId":812,"chargedPoints":"0.42","costKnown":true,"modelId":"default"}} -``` - -A failure after the stream started arrives as `{"e":{"code":"AI_TIMEOUT","message":"…"}}`. Limits and budgets are checked before the first byte, so refusals are ordinary JSON error responses. Only `text` actions stream. - -`/estimate` answers `{ maxPoints, maxUsd }`: the most the run could cost, or `null` when no pricing bounds it. - -Use the browser helpers from `@vitnode/core/lib/ai/stream-client` in your own editor tools: - -```ts -import { - aiAssistScope, - streamAiAction, -} from '@vitnode/core/lib/ai/stream-client' - -const controller = new AbortController() -const summary = await streamAiAction({ - action: '@vitnode/core:editor.selection.rewrite', - input: { after, before, locale, operation: 'shorten', selection }, - onDelta: (delta) => setPreview((text) => text + delta), - scope: aiAssistScope(), // "admin" on /admin pages, otherwise "user" - signal: controller.signal, // controller.abort() stops paying -}) -``` - -`estimateAiAction({ action, input, scope })` resolves to the maximum points as a string, or `null`. The editor-side helpers `takeQuickAskSnapshot()`, `isQuickAskStale()` and `applyQuickAskResult()` live in `@vitnode/core/components/tiptap/quick-ask/quick-ask-editor`. - -## Rich-text translation keeps its structure - -Asking a model to "preserve the HTML" is not a guarantee. The blog's `field.translate` action checks it instead: - -```ts title="plugins/blog/src/api/ai/actions.ts" -import { assertSameHtmlStructure } from '@vitnode/core/api/lib/ai/html-structure' - -parseText: (text, input) => { - if (input.format === 'text') return unquote(text) - const translated = text.trim() - assertSameHtmlStructure(input.text, translated) // [!code highlight] - - return translated -}, -``` - -`assertSameHtmlStructure(source, translated)` compares every tag in order, with its attributes. Text and the translatable attributes `alt`, `title`, `aria-label` and `placeholder` may change; tags, links and other attributes may not. A difference throws `HtmlStructureError`, the run fails with `AI_INVALID_OUTPUT`, and the editor is not charged. - -`htmlStructureDifference()` returns the first difference as a string (or `null`) when you want to report it instead of throwing. - -## Translation freshness - -For each translated field, VitNode stores a fingerprint of **the source text it was translated from** in `core_ai_translation_sources`. Comparing that fingerprint with the current source shows exactly which fields are outdated. VitNode never uses timestamps for this. - -| Status | Meaning | -| :---------- | :------------------------------------------------------------------------ | -| `fresh` | Translated from the source as it is now. | -| `edited` | As above, and a person changed the translation since. Their changes stay. | -| `outdated` | The source changed after the translation was made. | -| `untracked` | No record of what it was translated from, so no claim either way. | -| `missing` | Nothing translated yet. | - -Use `useTranslationFreshness()` inside a Content Engine form: - -```tsx title="plugins/blog/src/views/admin/article/editor/article-editor.tsx" -import { - useContentForm, - useContentFormValues, - useTranslationFreshness, -} from '@vitnode/core/content/admin-form' - -const { defaultLocale } = useContentForm() -const values = useContentFormValues() - -const freshness = useTranslationFreshness({ - contentTypeId, - fields: ['title', 'content', 'excerpt'], - itemId, // undefined while creating - source: defaultLocale ?? 'en', - values, -}) - -freshness.freshnessOf('pl') // { title: 'fresh', content: 'outdated', excerpt: 'missing' } -freshness.outdatedFields('pl') // ['content'] -freshness.editedByPerson('pl', 'content') // true when a person changed the AI text - -// After placing an AI translation into the form: -freshness.rememberAiTranslation('pl', 'content') -// When a person confirms the translations still match the source: -freshness.markReviewed('pl', freshness.outdatedFields('pl')) -``` - -`rememberAiTranslation()` and `markReviewed()` record nothing immediately. They are written when the form is saved, through the form's `onSaved` hook, so a record always describes text that was actually kept. Your own form code can subscribe the same way: `useContentForm().onSaved?.(async ({ itemId }) => { … })` returns an unsubscribe function. - -The blog uses this to show which languages are outdated, to update only outdated fields that no person edited, and to let an editor mark a translation as reviewed. - -The records are read and written with `GET` and `PUT /admin/ai/translation-sources`. Both require `can_edit` on the content type's own permission module. - -## Pre-publication review - -The blog's `@vitnode/blog:article.review` action is an optional read-through in the article editor's side panel. It is an `output: "object"` action, so it needs a `structured-output` model. It returns: - -```ts -{ - summary: string, - suggestions: Array<{ - area: 'clarity' | 'completeness' | 'structure' | 'tone', - message: string, - priority: 'high' | 'low', - }>, // at most 8 -} -``` - -- It **never verifies facts**. The prompt forbids judging whether facts are true, because the model has nothing to check them against. -- It **never gates publishing**. The deterministic readiness checks decide; publishing works the same with or without a review. - -It is a good template for structured, advisory AI in your own plugin. - -## Learn more +## Related diff --git a/apps/web/content/docs/dev/ai/index.mdx b/apps/web/content/docs/dev/ai/index.mdx index 040f760a8e..bdbe3d5205 100644 --- a/apps/web/content/docs/dev/ai/index.mdx +++ b/apps/web/content/docs/dev/ai/index.mdx @@ -1,18 +1,41 @@ --- -title: AI Setup +title: AI setup description: Configure Vercel AI SDK models in the VitNode API config, declare what each model can do and what it costs, then use them with c.get("ai"). icon: Sparkles --- +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' import { TypeTable } from 'fumadocs-ui/components/type-table' VitNode integrates the [Vercel AI SDK](https://ai-sdk.dev). Register models in `vitnode.api.config.ts` once, then use them inside any API handler via `c.get("ai")`. ## Quick start -### 1. Configure models in the API config +### 1. Pick a provider -A model can be an AI Gateway id string or a direct provider instance: +A model is either a **provider instance** from an AI SDK provider package or an **AI Gateway id** string such as `'openai/gpt-4o-mini'`. + +- **Provider package.** Install it in your API app and set its key, for example `OPENAI_API_KEY` for `@ai-sdk/openai`. + + + +```bash tab="bun" +bun i @ai-sdk/openai +``` + +```bash tab="pnpm" +pnpm i @ai-sdk/openai +``` + +```bash tab="npm" +npm i @ai-sdk/openai +``` + + + +- **AI Gateway.** Install nothing. The AI SDK sends id strings through the [Vercel AI Gateway](https://vercel.com/docs/ai-gateway), which reads `AI_GATEWAY_API_KEY` from your `.env` file. + +### 2. Configure models in the API config ```ts title="apps/api/src/vitnode.api.config.ts" import { openai } from '@ai-sdk/openai' @@ -25,7 +48,7 @@ export const vitNodeApiConfig = buildApiConfig({ { id: 'default', name: 'GPT-4o Mini', - model: openai('gpt-4o-mini'), + model: openai('gpt-4o-mini'), // or the gateway id 'openai/gpt-4o-mini' capabilities: ['text', 'structured-output', 'streaming'], pricing: { rates: { inputPerMillion: '0.15', outputPerMillion: '0.60' }, @@ -36,29 +59,25 @@ export const vitNodeApiConfig = buildApiConfig({ }) ``` -Set `OPENAI_API_KEY` in your `.env` file. - -`capabilities` and `pricing` are optional, but [AI actions](/docs/dev/ai/actions) rely on them: capabilities decide which model can run an action, and pricing turns token usage into money. See [Model capabilities](#model-capabilities) and [Costs, Points & Budgets](/docs/dev/ai/costs-and-limits). - ---- +`capabilities` and `pricing` are optional, but [AI actions](/docs/dev/ai/actions) rely on them. Capabilities decide which model can run an action, and pricing turns token usage into money. See [Model capabilities](#model-capabilities) and [Costs and budgets](/docs/dev/ai/costs-and-limits). -### 2. Use it in a route handler +### 3. Use it in a route handler -For user-facing features, run a registered [AI action](/docs/dev/ai/actions). It checks permissions, limits and budgets, and records the cost: +For features people can trigger, run a registered [AI action](/docs/dev/ai/actions). It checks permissions, limits and budgets, and records the cost: ```ts handler: async (c) => { // [!code ++:4] const { output } = await c.get('ai').run({ - action: EXCERPT_AI_ACTION, + action: SUMMARIZE_TOPIC_AI_ACTION, input: c.req.valid('json'), }) - return c.json({ text: output }) + return c.json({ text: output }, 200) } ``` -For internal tooling, you can also resolve the raw model and call the SDK directly. See [AI Usage](/docs/dev/ai/usage). +`SUMMARIZE_TOPIC_AI_ACTION` is the action key you create in [AI actions](/docs/dev/ai/actions). For internal tooling, you can also resolve the raw model and call the SDK directly. See [Direct SDK calls](/docs/dev/ai/usage). --- @@ -109,7 +128,7 @@ Every [AI action](/docs/dev/ai/actions) declares the capabilities it needs. When Prices live only in this config. The AdminCP has no price editor, so a price change is a code change you deploy. A malformed price stops the server at boot. -Without pricing, a call's cost stays **unknown**, never zero. Under a budget cap, a model with no pricing is refused with `AI_PRICING_MISSING`. Tiers, flat fees and gateway vs direct pricing are covered in [Costs, Points & Budgets](/docs/dev/ai/costs-and-limits#model-pricing). +Without pricing, a call's cost stays **unknown**, never zero. Under a budget cap, a run on a model with no pricing fails with `AI_PRICING_MISSING`. [Costs and budgets](/docs/dev/ai/costs-and-limits#model-pricing) covers tiers, flat fees and gateway vs direct pricing. ### Model options @@ -186,7 +205,7 @@ const embedModel = c.get('ai').embeddingModel() const capabilities = c.get('ai').capabilities('reasoning') // ['text', 'image-input', ...] ``` -`model()`, `embeddingModel()`, `imageModel()` and `models()` work as before. Admins can assign a different model (and a fallback) to each action in the AdminCP; an assigned model that lacks a required capability is refused. +`embeddingModel()` throws when no `embeddingModels` are configured, and `imageModel()` when no `imageModels` are. Admins can assign a different model (and a fallback) to each action in the AdminCP. Core refuses an assigned model that lacks a required capability. --- @@ -234,38 +253,33 @@ a picker can hide itself instead of offering nothing. - diff --git a/apps/web/content/docs/dev/ai/meta.json b/apps/web/content/docs/dev/ai/meta.json index 264d9cc643..18daa6038d 100644 --- a/apps/web/content/docs/dev/ai/meta.json +++ b/apps/web/content/docs/dev/ai/meta.json @@ -4,11 +4,20 @@ "icon": "Sparkles", "pages": [ "index", + "---Actions---", "actions", + "streaming", + "errors", + "action-options", + "---Features---", + "fields-and-editor", + "custom-ui", + "quick-ask", + "translations", + "automatic-alt", + "---Operate---", "costs-and-limits", "admin", - "automatic-alt", - "fields-and-editor", "usage" ] } diff --git a/apps/web/content/docs/dev/ai/quick-ask.mdx b/apps/web/content/docs/dev/ai/quick-ask.mdx new file mode 100644 index 0000000000..63bf3ebe9d --- /dev/null +++ b/apps/web/content/docs/dev/ai/quick-ask.mdx @@ -0,0 +1,85 @@ +--- +title: Quick Ask +description: Turn on Quick Ask, the AI button in the VitNode rich text editor that shortens, corrects, simplifies, changes the tone of or continues the selected text, and learn how it limits context, cost and markup. +icon: WandSparkles +--- + +Quick Ask is the **Quick Ask (AI)** button in the toolbar of VitNode's rich text editor. It rewrites the selected text or writes more of it, streams the answer into a preview, and changes nothing until the editor applies it. It is built into Core and switched off for everyone except root roles until an admin allows it. + +## Before you begin + +- **A language model with the `text` and `streaming` capabilities** in `ai.models`. Quick Ask always streams, so without a `streaming` model it fails with `AI_MODEL_INCOMPATIBLE`. See [AI setup](/docs/dev/ai#model-capabilities). +- **A model with `pricing`** if the roles you allow have a points allowance. See [Model pricing](/docs/dev/ai#model-pricing). +- **An admin with `ai:can_manage`** to change a role's AI access. + +## Turn on Quick Ask for a role + + + + + +### Allow the editor.assist permission + +Open **Users → Roles**, edit the role and switch to the **Artificial intelligence (AI)** tab. Find the row with **Rewrite selected text** and **Quick Ask** and set it to _Allow_. Both actions share the permission `@vitnode/core:editor.assist`, which has `defaultGranted: false`. + + + + + +### Give the role AI points + +On the same tab, give the role a monthly points allowance or **Unlimited points**. The default allowance is `0`, so a member of an allowed role without points gets `AI_USER_LIMIT_REACHED`. Save the role. + + + + + +## Check the result + +Sign in with a member of that role and open any form with a rich text field, such as an article in the AdminCP. The toolbar shows **Quick Ask (AI)**. Select a sentence, open Quick Ask and choose **Shorten**. The shorter text streams into a preview with **Replace selection** and **Insert below**. The run appears in **Debug Panel → AI logs** as `@vitnode/core:editor.selection.rewrite`. + +## What it can do + +| Operation | Action key | Does | +| :--------------- | :--------------------------------------- | :--------------------------------------------------------- | +| Shorten | `@vitnode/core:editor.selection.rewrite` | Tighter text, same meaning. | +| Correct writing | `@vitnode/core:editor.selection.rewrite` | Spelling, grammar and punctuation only. | +| Simplify | `@vitnode/core:editor.selection.rewrite` | Simpler words, shorter sentences. | +| Change the tone | `@vitnode/core:editor.selection.rewrite` | Friendly, formal, confident or neutral. | +| Continue writing | `@vitnode/core:editor.quick-ask` | One or two paragraphs from where the text ends. | +| Ask anything | `@vitnode/core:editor.quick-ask` | A custom request about the selection (max 500 characters). | + +An admin can switch either action off, or give it its own model, on **Artificial Intelligence (AI) → Actions**. + +## How it behaves + +- **Bounded context.** It sends the selection (up to 8,000 characters) and up to 1,500 characters before and after it, never the whole document. +- **Cost shown first.** With a selection, the panel shows the reservation bound, not a price: _"One request costs at most N AI points - usually much less."_ +- **Stop is cheap.** **Stop** cancels the stream. Stopping before any text arrives charges nothing; stopping after text has streamed in counts as a run. +- **Plain text only.** The answer becomes paragraphs and hard breaks. The editor never parses it as HTML, so it cannot inject markup, links or scripts. +- **Stale selection.** If the selected text changed while the answer was written, **Replace selection** is disabled and **Insert below** still works. +- **One-step undo.** Applying is one editor transaction. The toast's **Undo** or Ctrl+Z restores the text exactly. +- **Nothing is saved** until you save the form. +- **Content language.** It writes in the language of the field being edited (the multi-language tab), not the interface language. + +Quick Ask calls Core's AdminCP stream routes on `/admin` pages and the member routes everywhere else. See [Streaming](/docs/dev/ai/streaming#built-in-stream-routes). + +## Build your own editor tool + +Your own Tiptap tools can reuse the same pieces: + +- `streamAiAction()` and `estimateAiAction()` from `@vitnode/core/lib/ai/stream-client` run and price a text action. See [Streaming](/docs/dev/ai/streaming). +- From `@vitnode/core/components/tiptap/quick-ask/quick-ask-editor`: `takeQuickAskSnapshot(editor)` captures the selection with its context (`{ before, selection, after, from, to }`), `isQuickAskStale(editor, snapshot)` tells whether the selection changed since, and `applyQuickAskResult(editor, { from, to, mode, text })` inserts the answer as one undoable transaction, with `mode` `"replace"` or `"below"`. + +```ts +import { streamAiAction } from '@vitnode/core/lib/ai/stream-client' + +await streamAiAction({ + action: '@vitnode/core:editor.selection.rewrite', + input: { after, before, locale, operation: 'shorten', selection }, + onDelta: (delta) => setPreview((text) => text + delta), + scope: 'admin', +}) +``` + +`before`, `selection` and `after` come from `takeQuickAskSnapshot(editor)`, `locale` is the content language being edited, and `setPreview` is your component's state setter. diff --git a/apps/web/content/docs/dev/ai/streaming.mdx b/apps/web/content/docs/dev/ai/streaming.mdx new file mode 100644 index 0000000000..1036cd73a7 --- /dev/null +++ b/apps/web/content/docs/dev/ai/streaming.mdx @@ -0,0 +1,183 @@ +--- +title: Streaming +description: Stream a VitNode AI action's text to the browser as the model writes it, with streamAiAction() and the built-in stream routes or c.get("ai").stream() in your own route, and learn what a stopped stream costs. +icon: Radio +--- + +A streamed AI action shows its text while the model is still writing, so a long answer feels quick and the reader can stop it early. This page streams the **Summarize topic** action from [AI actions](/docs/dev/ai/actions) into an AdminCP component, without writing a new API route. + +Only `output: "text"` actions stream. An object action fails with `AI_INVALID_INPUT` when streamed. + +## Before you begin + +- **The Summarize topic action** registered in the forum plugin, from [AI actions](/docs/dev/ai/actions). You don't need the route you built there. +- **A model with the `streaming` capability.** A streamed run adds `streaming` to the action's `requiredCapabilities`, so only models that declare it can answer. See [Model capabilities](/docs/dev/ai#model-capabilities). + +## Stream an action into a component + + + + + +### Declare a streaming model + +Make sure at least one model in your API config lists `streaming`: + +```ts title="apps/api/src/vitnode.api.config.ts (excerpt)" +ai: { + models: [ + { + id: 'default', + name: 'GPT-4o Mini', + model: openai('gpt-4o-mini'), + capabilities: ['text', 'structured-output', 'streaming'], // [!code highlight] + }, + ], +}, +``` + +Without one, a streamed run fails with `AI_MODEL_INCOMPATIBLE` before Core sends anything to a provider. + + + + + +### Call streamAiAction() from the component + +`streamAiAction()` posts to Core's generic stream route, which runs any registered user action, and calls `onDelta` with each piece of text. Add a component like this to an AdminCP page of your plugin: + +```tsx title="plugins/forum/src/views/admin/summarize-topic.tsx" +import { Button } from '@vitnode/core/components/ui/button' +import { aiErrorCodeOf } from '@vitnode/core/lib/ai/assist-client' +import { + aiAssistScope, + streamAiAction, +} from '@vitnode/core/lib/ai/stream-client' +import React from 'react' + +export const SummarizeTopic = ({ + content, + title, +}: { + content: string + title: string +}) => { + const [summary, setSummary] = React.useState('') + const [error, setError] = React.useState(null) + const [pending, setPending] = React.useState(false) + const controller = React.useRef(null) + + const onSummarize = async () => { + controller.current = new AbortController() + setSummary('') + setError(null) + setPending(true) + try { + await streamAiAction({ + action: '@vitnode/forum:topic.summarize', + input: { content, title }, + onDelta: (delta) => setSummary((text) => text + delta), + scope: aiAssistScope(), // "admin" on /admin pages, otherwise "user" + signal: controller.current.signal, + }) + } catch (caught) { + setError(aiErrorCodeOf(caught)) // e.g. "AI_USER_LIMIT_REACHED" + } finally { + setPending(false) + } + } + + return ( +
          +
          + + +
          +

          + {summary} +

          + {error &&

          {error}

          } +
          + ) +} +``` + +`streamAiAction()` resolves to `{ runId, chargedPoints, costKnown }` once the stream ends. It throws an `AiRequestError` for a refusal before the stream starts and for a failure inside it; `aiErrorCodeOf()` reads its code. To show a translated message instead of the code, translate it with the `core.global.ai_assist.error` messages, as the blog's review panel does. + +
          + +
          + +## Check the result + +Open the AdminCP page with the component and click **Summarize**. The summary appears piece by piece under the buttons. **Debug Panel → AI logs** shows a `@vitnode/forum:topic.summarize` run with status `succeeded`. + +Click **Summarize** again and then **Stop** while text is arriving. The text stops, and the AI logs show the run as `canceled`. + +## Stream from your own route + +When the stream needs server-side work first, such as loading the topic from the database, call `c.get("ai").stream()` in your own route. It takes the same options as `run()`: + +```ts title="plugins/forum/src/api/modules/admin/ai/routes/summarize-stream.route.ts (handler excerpt)" +handler: async (c) => { + const { textStream } = await c.get('ai').stream({ + action: SUMMARIZE_TOPIC_AI_ACTION, + input: c.req.valid('json'), + signal: c.req.raw.signal, // stop paying when the reader leaves + }) + + return new Response(textStream.pipeThrough(new TextEncoderStream()), { + headers: { 'Content-Type': 'text/plain; charset=utf-8' }, + }) +} +``` + +`stream()` resolves to `{ textStream, result, runId }`: + +- `textStream` is a `ReadableStream` of text deltas. +- `result` resolves to `{ output, runId, usage }` once the stream ends, the same shape `run()` returns, and rejects with an `AiError` if the full text fails `parseText()` or `outputSchema`. + +Core checks permissions, limits and budgets before `stream()` resolves, so a refusal is an ordinary JSON error response. To answer in the same NDJSON format as Core's routes, return `aiNdjsonStream(c, request)` with `AI_NDJSON_HEADERS`, both from `@vitnode/core/api/lib/ai/stream-response`. + +## Built-in stream routes + +`streamAiAction()` and `estimateAiAction()` call these Core routes. Their body is `{ action, input, idempotencyKey?, resource?, sourceFingerprint? }`, the same as the [run routes](/docs/dev/ai/custom-ui#built-in-run-routes). + +| Route | Session | Answers | +| :------------------------------- | :---------- | :-------------------------- | +| `POST /admin/ai/assist/stream` | AdminCP | NDJSON text, then a summary | +| `POST /admin/ai/assist/estimate` | AdminCP | `{ maxPoints, maxUsd }` | +| `POST /ai/stream` | Site member | NDJSON text, then a summary | +| `POST /ai/estimate` | Site member | `{ maxPoints, maxUsd }` | + +The stream routes answer `application/x-ndjson`, one JSON object per line: + +```text +{"t":"A tighter "} +{"t":"version of the paragraph."} +{"done":{"runId":812,"chargedPoints":"0.42","costKnown":true,"modelId":"default"}} +``` + +A failure after the stream started arrives as a last line `{"e":{"code":"AI_TIMEOUT","message":"…"}}`. + +`/estimate` answers the most the run could cost, or `null` when no pricing bounds it. In the browser, `estimateAiAction({ action, input, scope })` resolves to `maxPoints` as a string, or `null`. + +## What a stopped stream costs + +A stream makes one attempt on the primary model, with no retries and no fallback model. When the reader stops it, the run settles as `canceled`: + +- If no text had reached the reader yet, they pay nothing. +- If some text had arrived, Core charges their points and daily count as for a delivered run. + +## Related + +- [Quick Ask](/docs/dev/ai/quick-ask) is the rich text editor feature built on these routes. +- [AI errors and limits](/docs/dev/ai/errors) lists every error code a stream can end with. diff --git a/apps/web/content/docs/dev/ai/translations.mdx b/apps/web/content/docs/dev/ai/translations.mdx new file mode 100644 index 0000000000..d5d61d6264 --- /dev/null +++ b/apps/web/content/docs/dev/ai/translations.mdx @@ -0,0 +1,98 @@ +--- +title: Translations +description: Make AI translations safe in VitNode. Reject rich-text translations that change the HTML structure with assertSameHtmlStructure(), and track which translated fields are outdated with useTranslationFreshness(). +icon: Languages +--- + +Two helpers make AI translation of Content Engine fields trustworthy. `assertSameHtmlStructure()` rejects a rich-text translation that changed the markup, and `useTranslationFreshness()` shows which translated fields no longer match their source. The `@vitnode/blog` plugin uses both in its article editor; the examples below are its code. + +## Before you begin + +- **A text AI action that translates**, registered in your plugin. See [AI actions](/docs/dev/ai/actions). The blog's is `@vitnode/blog:field.translate` in `plugins/blog/src/api/ai/actions.ts`. +- **A Content Engine content type with localized fields** and a custom AdminCP form built with `@vitnode/core/content/admin-form`, for freshness tracking. + +## Keep the rich-text structure + +Asking a model to "preserve the HTML" is not a guarantee. Check it in the action's `parseText()` instead. The blog's translate action accepts plain text or a rich-text document, and compares the HTML it sent with the HTML it got back: + +```ts title="plugins/blog/src/api/ai/actions.ts (excerpt)" +import { assertSameHtmlStructure } from '@vitnode/core/api/lib/ai/html-structure' +import { richTextToHtml } from '@vitnode/core/content/rich-text' + +const translateSource = (input: TranslateAiInput) => + input.format === 'richText' + ? { format: 'html' as const, text: richTextToHtml(input.document) } + : { format: 'text' as const, text: input.text } + +// inside defineAiAction({ ... }) +parseText: (text, input) => { + if (input.format === 'text') return unquote(text) + const translated = text.trim() + assertSameHtmlStructure(translateSource(input).text, translated) // [!code highlight] + + return translated +}, +``` + +`TranslateAiInput` is the type of the action's `inputSchema`, and `unquote()` is the blog's helper that strips surrounding quotes from a plain-text answer. + +`assertSameHtmlStructure(source, translated)` compares every tag in order, with its attributes. Text and the translatable attributes `alt`, `title`, `aria-label` and `placeholder` may change; tags, links and other attributes may not. A difference throws `HtmlStructureError`, so the run fails with `AI_INVALID_OUTPUT` and the editor is not charged. + +`htmlStructureDifference(source, translated)` returns the first difference as a string, or `null`, when you want to report it instead of throwing. + +## Track outdated translations + +For each translated field, VitNode stores a fingerprint of **the source text it was translated from** in `core_ai_translation_sources`. Comparing that fingerprint with the current source shows exactly which fields are outdated, without relying on timestamps. + +| Status | Meaning | +| :---------- | :------------------------------------------------------------------------ | +| `fresh` | Translated from the source as it is now. | +| `edited` | As above, and a person changed the translation since. Their changes stay. | +| `outdated` | The source changed after the translation was made. | +| `untracked` | No record of what it was translated from, so no claim either way. | +| `missing` | Nothing translated yet. | + +Call `useTranslationFreshness()` inside a Content Engine form: + +```tsx title="plugins/blog/src/views/admin/article/editor/article-editor.tsx (excerpt)" +import { + useContentForm, + useContentFormValues, + useTranslationFreshness, +} from '@vitnode/core/content/admin-form' + +const { defaultLocale } = useContentForm() +const values = useContentFormValues() + +const freshness = useTranslationFreshness({ + contentTypeId, // e.g. 'blog.post' + fields: ['title', 'content', 'excerpt'], + itemId, // undefined while creating + source: defaultLocale ?? 'en', + values, +}) + +freshness.freshnessOf('pl') // { title: 'fresh', content: 'outdated', excerpt: 'missing' } +freshness.outdatedFields('pl') // ['content'] +freshness.editedByPerson('pl', 'content') // true when a person changed the AI text + +// After placing an AI translation into the form: +freshness.rememberAiTranslation('pl', 'content') +// When a person confirms the translations still match the source: +freshness.markReviewed('pl', freshness.outdatedFields('pl')) +``` + +`contentTypeId` and `itemId` are the content type and the item the form edits; the blog's editor receives them as props. + +`rememberAiTranslation()` and `markReviewed()` record nothing immediately. The form writes them when it saves, through its `onSaved` hook, so a record always describes text that was actually kept. Your own form code can subscribe the same way: `useContentForm().onSaved?.(async ({ itemId }) => { … })` returns an unsubscribe function. + +`GET` and `PUT /admin/ai/translation-sources` in `@vitnode/core` read and write the records. Both require `can_edit` on the content type's own permission module. + +## Check the result + +In the blog's article editor, translate a field into another language with AI and save. Then change the same field in the default language and save again. The editor lists that language as outdated, and `freshness.outdatedFields()` returns the field. + +## Related + +- [Custom UI](/docs/dev/ai/custom-ui) runs your translate action from your own form button. +- [Field suggestions](/docs/dev/ai/fields-and-editor) adds the no-code AI button to a single field. diff --git a/apps/web/content/docs/dev/ai/usage.mdx b/apps/web/content/docs/dev/ai/usage.mdx index ef37947dcd..624e7b885e 100644 --- a/apps/web/content/docs/dev/ai/usage.mdx +++ b/apps/web/content/docs/dev/ai/usage.mdx @@ -1,6 +1,6 @@ --- -title: AI Usage -description: Generate text, stream responses, get structured output and create embeddings with the Vercel AI SDK and the VitNode model registry. +title: Direct SDK calls +description: Call the Vercel AI SDK directly in VitNode API routes. Resolve a model with c.get("ai").model(), then generate text, stream a response, get structured output with Output.object or create embeddings. icon: Bot --- @@ -29,61 +29,71 @@ VitNode uses the [Vercel AI SDK](https://ai-sdk.dev). Resolve a model from `c.ge ## Model resolvers -| Resolver | Returned type | Used by | -| :-------------------------------- | :--------------- | :--------------------------------------------- | -| `c.get("ai").model(id?)` | `LanguageModel` | `generateText`, `streamText`, `generateObject` | -| `c.get("ai").embeddingModel(id?)` | `EmbeddingModel` | `embed`, `embedMany` | -| `c.get("ai").imageModel(id?)` | `ImageModel` | `generateImage` | +| Resolver | Returned type | Used by | +| :-------------------------------- | :--------------- | :--------------------------- | +| `c.get("ai").model(id?)` | `LanguageModel` | `generateText`, `streamText` | +| `c.get("ai").embeddingModel(id?)` | `EmbeddingModel` | `embed`, `embedMany` | +| `c.get("ai").imageModel(id?)` | `ImageModel` | `generateImage` | + +Without an `id`, each resolver returns the first model of its list in the [AI config](/docs/dev/ai). The examples below use the `ai` package that VitNode Core depends on (AI SDK 7). --- ## 1. Text generation -Generate text in a Hono API route: +Generate text in a staff-only API route. This one belongs to the `site-notes` plugin from the [learning path](/docs/dev/working-with-users/staff-permissions); add it to the plugin's admin `notes` module like any other route: -```ts title="plugins/blog/src/api/modules/posts/routes/summarize.route.ts" +```ts title="plugins/site-notes/src/api/modules/admin/notes/summarize.route.ts" import { generateText } from 'ai' import { z } from 'zod' import { buildRoute } from '@/api/builders' export const summarizeRoute = buildRoute({ + adminStaffPermission: { module: 'notes', permission: 'can_view' }, route: { method: 'post', + description: 'Summarize a text with the default AI model.', path: '/summarize', request: { body: { + required: true, content: { - 'application/json': { schema: z.object({ text: z.string().min(1) }) }, + 'application/json': { schema: z.object({ text: z.string().min(1).max(20_000) }) }, }, }, }, responses: { - 200: { description: 'Text summary' }, + 200: { + content: { + 'application/json': { schema: z.object({ summary: z.string() }) }, + }, + description: 'Text summary', + }, }, }, handler: async (c) => { const { text } = c.req.valid('json') - // [!code ++:6] + // [!code ++:5] const { text: summary } = await generateText({ model: c.get('ai').model(), system: 'You are a concise summary assistant.', - prompt: `Summarize the following content: - -${text}`, + prompt: `Summarize the following content:\n\n${text}`, }) - return c.json({ summary }) + return c.json({ summary }, 200) }, }) ``` +`adminStaffPermission` keeps the route to staff who hold `notes` → `can_view`. Swap in a permission your own plugin declares. + --- ## 2. Streaming responses -Stream the model's answer to the client as it arrives: +Stream the model's answer to the client as plain text: ```ts import { streamText } from 'ai' @@ -92,21 +102,24 @@ handler: async (c) => { const result = streamText({ model: c.get('ai').model(), prompt: 'Write an introduction to WebSockets.', + abortSignal: c.req.raw.signal, }) // [!code ++:1] - return result.toDataStreamResponse() + return result.toTextStreamResponse() } ``` +For a chat UI built on the AI SDK's `useChat`, return `result.toUIMessageStreamResponse()` instead. To stream a managed action with budgets and history, see [Streaming](/docs/dev/ai/streaming). + --- -## 3. Structured output (`generateObject`) +## 3. Structured output -Get typed JSON back from the model, shaped by a Zod schema: +Get typed JSON back from the model by passing an `output` setting to `generateText`. The model must support structured output: ```ts -import { generateObject } from 'ai' +import { generateText, Output } from 'ai' import { z } from 'zod' const postMetadataSchema = z.object({ @@ -115,19 +128,21 @@ const postMetadataSchema = z.object({ estimatedReadingMinutes: z.number(), }) -// [!code ++:6] -const { object } = await generateObject({ +// [!code ++:5] +const { output } = await generateText({ model: c.get('ai').model(), - schema: postMetadataSchema, + output: Output.object({ schema: postMetadataSchema }), prompt: 'Generate SEO metadata for an article on Postgres indexing.', }) ``` +`output` is typed from the schema. `generateObject` still exists in AI SDK 7 but is deprecated in favour of this form. + --- ## 4. Generating embeddings -Turn text into a vector embedding for semantic search: +Turn text into a vector embedding. This needs at least one entry in `ai.embeddingModels`, or `embeddingModel()` throws. See [Multiple models and embeddings](/docs/dev/ai#multiple-models--embeddings). ```ts import { embed } from 'ai' @@ -143,13 +158,13 @@ const { embedding } = await embed({ diff --git a/apps/web/content/docs/dev/architecture.mdx b/apps/web/content/docs/dev/architecture.mdx index df99a0d4ca..461c99a542 100644 --- a/apps/web/content/docs/dev/architecture.mdx +++ b/apps/web/content/docs/dev/architecture.mdx @@ -4,75 +4,71 @@ description: How VitNode combines TanStack Start for UI and isomorphic routing w icon: Blocks --- -VitNode separates concerns between two core layers: +A VitNode app is two layers in one project. TanStack Start renders the pages, and a Hono API answers every request for data. Read this page to know which layer owns a job before you write code for it. -1. **TanStack Start**: Frontend UI, SSR, isomorphic routing, and client caching. -2. **Hono API**: Backend routing, session management, staff permissions, and database operations. +1. **TanStack Start**: the UI, server-side rendering (SSR), routing and the client cache. +2. **Hono API**: API routes, sessions, staff permissions and database access. {/* Image prompt: VitNode architectural flow diagram displaying TanStack Start (SSR, route loaders, TanStack Query) communicating across an HTTP/RPC boundary with Hono API (middleware, sessions, Drizzle ORM) and PostgreSQL/Redis storage. Dark theme, 1600x900. */} -## System Boundaries +## Who owns what -| Responsibility | TanStack Start (Web App) | Hono (API) | -| :-------------------- | :-------------------------------------------- | :-------------------------------------------------------------- | -| **Routing** | Page URLs, dynamic parameters, nested layouts | REST/RPC endpoints under `/api/*` | -| **Data Fetching** | Route loaders and the universal `fetcher` | Query execution via Drizzle ORM | -| **State & Cache** | TanStack Query client cache | Redis domain cache & database storage | -| **Security Boundary** | UI guards (redirecting unauthenticated users) | **Enforces authentication, permissions, CSRF, and rate limits** | +| Responsibility | TanStack Start (web app) | Hono (API) | +| :---------------- | :-------------------------------------------- | :-------------------------------------------------------------- | +| **Routing** | Page URLs, dynamic parameters, nested layouts | API routes under `/api/*` | +| **Data fetching** | Route loaders and the universal `fetcher` | Queries through Drizzle ORM | +| **State & cache** | TanStack Query client cache | Redis domain cache and the database | +| **Security** | UI guards (redirecting signed-out visitors) | **Enforces authentication, permissions, CSRF and rate limits** | - - Route guards (`beforeLoad`) enhance UX by redirecting visitors early, but the - Hono API is the true security boundary. All private endpoints strictly verify - cookies and permissions on every request. + + Route guards (`beforeLoad`) improve the experience by redirecting visitors + early, but anyone can call the API directly. Every private endpoint checks the + session cookie and permissions on every request. ---- - -## End-to-End Request Flow - -When a user visits a page (e.g. `/blog`): +## Request flow -| Phase | Runtime | Action | -| :------------------------ | :--------------------- | :---------------------------------------------------------------- | -| **1. Request** | Browser | Visitor navigates to `/blog` | -| **2. Routing** | Server (SSR) / Browser | TanStack Router matches route and executes `loader` | -| **3. Query Warming** | Server / Browser | `context.queryClient.query` executes isomorphic fetcher | -| **4. RPC Call** | Server / Browser | The universal `fetcher` calls the Hono endpoint by plugin id | -| **5. API Middleware** | Server (Hono) | Verifies session cookie, applies rate limits, injects `c.get(db)` | -| **6. Handler & Database** | Server (Hono) | Handler validates input and queries PostgreSQL via Drizzle | -| **7. Response** | Server / Browser | JSON data hydrates TanStack Query cache and paints component | +When a visitor opens a page such as `/blog`: ---- - -## The Request Pipeline +| Step | Runs on | What happens | +| :--------------------- | :--------------------- | :------------------------------------------------------------------- | +| **1. Request** | Browser | The visitor navigates to `/blog` | +| **2. Routing** | Server (SSR) / browser | TanStack Router matches the route and runs its `loader` | +| **3. Query warming** | Server / browser | `context.queryClient.query` runs the query, which calls the fetcher | +| **4. API call** | Server / browser | The universal `fetcher` calls the Hono endpoint by plugin id | +| **5. API middleware** | Server (Hono) | Reads the session cookie, applies rate limits, provides `c.get("db")` | +| **6. Handler** | Server (Hono) | The route validates its input and queries PostgreSQL through Drizzle | +| **7. Response** | Server / browser | The JSON fills the TanStack Query cache and the component renders | -Before route matching, every request passes through the middleware -`createVitNodeStart` installs - in this order, and an app cannot get in front of -any of it: +## Request middleware -| Order | Middleware | Applies to | -| :---- | :----------------- | :------------------------------------------------------------------------------ | -| 1 | **CSRF** | Server function calls (`handlerType === 'serverFn'`) | -| 2 | **Locale** | Page requests: canonical `308` redirects and the locale cookie | -| 3 | **Document cache** | HTML responses: forced `Cache-Control: private, no-store` plus security headers | -| 4 | Your own | Whatever `requestMiddleware` lists | +Before a page route matches, every request passes through the middleware that +`createVitNodeStart` installs in `src/start.ts`, in this order: -`/api/*` reaches the same middleware and passes through untouched - no redirect, -no rewrite, no cache directive - so the Hono bridge sees the request exactly as -the client sent it and keeps its own caching policy. See -[Configuration](/docs/dev/configuration). +1. **CSRF**, for server function calls. +2. **Locale**, for page requests: canonical `308` redirects, the locale cookie, + and, on HTML responses, `Cache-Control: private, no-store` plus the security + headers. +3. **Your own** `requestMiddleware`, in the order you list it. ---- +An app cannot put its own middleware in front of the first two. `/api/*` +passes through untouched, so the Hono API sees the request exactly as the client +sent it and keeps its own caching policy. The details, and how to add your own +middleware, are in [Configuration](/docs/dev/configuration#request-pipeline). -## Plugin System Architecture +## Plugins -VitNode is built around modular plugins located in `plugins/*`: +Features live in plugins, each a package in `plugins/*` or `node_modules`: -- **Independent Packages**: Plugins compile to their own `dist/` with isolated dependencies. -- **Unified Manifest**: Routes, AdminCP navigation, and database models are registered declaratively. -- **Zero Overhead**: Inactive plugins contribute no code or overhead to production bundles. +- **Separate packages.** A plugin compiles to its own `dist/` folder. Its + imports of React, Hono, Drizzle and other packages stay imports, so the app + installs them once. +- **Declared, not wired by hand.** The plugin declares its routes, AdminCP + navigation and database tables, and the app's build generates the imports. +- **Only configured plugins ship.** A plugin that is not listed in + `vitnode.config.ts` and `vitnode.api.config.ts` adds no code to the build. -## Learn More +## Related { `countNotesByAuthor` stands for your existing database query. On a hit, `remember` returns the stored value and skips the query. On a miss, it runs the query, stores the result for five minutes and returns it. -Keys are prefixed with the plugin that owns the route. `notes:stats` is stored as `vitnode:cache:@acme/site-notes:notes:stats`, so it cannot collide with another plugin's key. Values are stored as JSON, so a `Date` comes back as a string. +Keys are prefixed with the plugin that owns the route. `notes:stats` is stored as `vitnode:cache:site-notes:notes:stats`, so it cannot collide with another plugin's key. Values are stored as JSON, so a `Date` comes back as a string. @@ -69,11 +69,11 @@ The TTL is a safety net, not the invalidation. Without `delete`, visitors see ou 2. Call the stats route, then list your plugin's keys: ```bash - redis-cli --scan --pattern 'vitnode:cache:@acme/site-notes:*' + redis-cli --scan --pattern 'vitnode:cache:site-notes:*' ``` - The output includes `vitnode:cache:@acme/site-notes:notes:stats`. Calling the route again within five minutes does not run `countNotesByAuthor`. + The output includes `vitnode:cache:site-notes:notes:stats`. Calling the route again within five minutes does not run `countNotesByAuthor`. 3. Create a note and run the same command. The key is gone until the next call to the stats route. -For every method, including `get`, `set`, `flush` and locks, see the [Cache reference](/docs/dev/cache/reference). +For every method, including `get`, `set`, `flush` and locks, see the [API cache reference](/docs/dev/cache/reference). diff --git a/apps/web/content/docs/dev/cache/app.mdx b/apps/web/content/docs/dev/cache/app.mdx index 2add96c38e..97c4718fb6 100644 --- a/apps/web/content/docs/dev/cache/app.mdx +++ b/apps/web/content/docs/dev/cache/app.mdx @@ -6,7 +6,12 @@ icon: AppWindow The app cache in VitNode is TanStack Query. A plugin route's loader fills a query entry during SSR or navigation, the page reads that same entry without another request, and a write invalidates it so the next read is fresh. -This guide builds a notes list for an `@acme/site-notes` plugin with a `notes` API module. How the API call itself works is covered in [Data fetching](/docs/dev/fetcher). +This guide moves the `site-notes` list page onto the query cache. How the API call itself works is covered in [Fetcher](/docs/dev/fetcher). + +## Before you begin + +- The `/site-notes/notes` page from [Plugin page](/docs/dev/plugins/page). Its route is already declared in `src/routes.ts`. +- For the last step, the AdminCP form and its `POST /api/site-notes/admin/notes` route from [AdminCP pages](/docs/dev/plugins/admin). @@ -15,32 +20,33 @@ This guide builds a notes list for an `@acme/site-notes` plugin with a `notes` A Create one `queryOptions` helper for the list. The loader, the page and the mutation all use it, so they always agree on the key. -```ts title="plugins/site-notes/src/features/notes/notes-query.ts" +```ts title="plugins/site-notes/src/pages/notes-query.ts" import { queryOptions } from '@tanstack/react-query' import { fetcher } from '@vitnode/core/tanstack/fetcher' -export const notesQueryKey = ['@acme/site-notes', 'notes'] as const +import { manifest } from '@/manifest.gen' + +export const NOTES_QUERY_KEY = [manifest.id, 'notes'] as const -export const notesQuery = () => +export const notesQueryOptions = () => queryOptions({ - queryKey: notesQueryKey, + queryKey: NOTES_QUERY_KEY, queryFn: async () => { const response = await fetcher({ - plugin: '@acme/site-notes', + plugin: manifest.id, method: 'get', module: 'notes', path: '/', }) - - if (response.status !== 200) { - throw new Error(`Loading notes answered ${response.status}.`) - } + if (!response.ok) throw new Error('Could not load notes.') return await response.json() }, }) ``` +If you followed [AdminCP pages](/docs/dev/plugins/admin), this file already exists. + Start every key with your plugin ID. `invalidateQueries` matches keys by prefix, so a generic first segment such as `'notes'` would let one plugin invalidate another plugin's data. @@ -48,29 +54,36 @@ Start every key with your plugin ID. `invalidateQueries` matches keys by prefix, ### Warm the query in the route loader -Create the page with `defineRoute` from `@vitnode/core/tanstack/plugin-routes`. Its loader context includes `queryClient`. The framework-neutral `definePluginRoute` from `@vitnode/core/routing` only receives `locale`. +Replace the loader in `src/pages/notes-page.tsx` with `defineRoute` from `@vitnode/core/tanstack/plugin-routes`. Its loader context includes `queryClient`; the framework-neutral `definePluginRoute` from `@vitnode/core/routing` only receives `locale`. ```tsx title="plugins/site-notes/src/pages/notes-page.tsx" import { useSuspenseQuery } from '@tanstack/react-query' import { defineRoute } from '@vitnode/core/tanstack/plugin-routes' +import { useTranslations } from 'use-intl' -import { notesQuery } from '../features/notes/notes-query' +import { notesQueryOptions } from './notes-query' export const route = defineRoute({ load: async ({ context }) => { - await context.queryClient.query({ ...notesQuery(), staleTime: 'static' }) // [!code ++] + await context.queryClient.query({ ...notesQueryOptions(), staleTime: 'static' }) // [!code ++] }, }) const NotesPage = () => { - const { data: notes } = useSuspenseQuery(notesQuery()) + const t = useTranslations('site-notes.notes') + const { data: notes } = useSuspenseQuery(notesQueryOptions()) return ( -
            - {notes.map((note) => ( -
          • {note.title}
          • - ))} -
          +
          +

          {t('title')}

          +
            + {notes.map(note => ( +
          • + {note.title} +
          • + ))} +
          +
          ) } @@ -88,24 +101,26 @@ The router also runs this loader when a visitor rests on a link to the page, and VitNode's query client does not refetch when a component mounts or the tab regains focus. A cached list stays as it is until your code invalidates it, so invalidate it in every mutation that changes notes: -```ts title="plugins/site-notes/src/features/notes/use-create-note.ts" +```ts title="plugins/site-notes/src/pages/use-create-note.ts" import { useMutation, useQueryClient } from '@tanstack/react-query' import { fetcher } from '@vitnode/core/tanstack/fetcher' import { toast } from 'sonner' -import { notesQueryKey } from './notes-query' +import { manifest } from '@/manifest.gen' + +import { NOTES_QUERY_KEY } from './notes-query' export const useCreateNote = () => { const queryClient = useQueryClient() return useMutation({ - mutationFn: async (title: string) => { + mutationFn: async (values: { title: string; body: string }) => { const response = await fetcher({ - plugin: '@acme/site-notes', + plugin: manifest.id, method: 'post', - module: 'notes', + module: 'admin/notes', path: '/', - args: { body: { title } }, + args: { body: values }, }) if (response.status !== 201) { @@ -113,7 +128,7 @@ export const useCreateNote = () => { } }, onSuccess: async () => { - await queryClient.invalidateQueries({ queryKey: notesQueryKey }) // [!code ++] + await queryClient.invalidateQueries({ queryKey: NOTES_QUERY_KEY }) // [!code ++] toast.success('Note created', { description: 'It now appears in the notes list.', }) @@ -122,6 +137,8 @@ export const useCreateNote = () => { } ``` +The AdminCP form from [AdminCP pages](/docs/dev/plugins/admin) does the same in its `onSubmit`. + Invalidate the narrowest key that covers everything the write could change. For a list with paging or sorting, that is the list's root key: the changed row may have moved to a different page.
          @@ -135,8 +152,8 @@ Invalidate the narrowest key that covers everything the write could change. For ## Check the result -1. Open the notes page with the browser's Network tab open. The list renders without a browser request for notes, because the loader filled the cache during SSR. +1. Open `http://localhost:3000/site-notes/notes` with the browser's Network tab open. The list renders without a browser request for notes, because the loader filled the cache during SSR. 2. Navigate to another page and back with a link. No new request for notes is sent. -3. Create a note. You see one `POST` request, then one `GET` request that refetches the list, and the new note appears. +3. Create a note in the AdminCP, then open the notes page in the same tab. The new note is there, because the write invalidated the cached list. To cache the database work behind the `notes` endpoint as well, continue with [Cache API data](/docs/dev/cache/api). diff --git a/apps/web/content/docs/dev/cache/index.mdx b/apps/web/content/docs/dev/cache/index.mdx index dd7a958668..fba4907a54 100644 --- a/apps/web/content/docs/dev/cache/index.mdx +++ b/apps/web/content/docs/dev/cache/index.mdx @@ -12,15 +12,15 @@ VitNode caches in three places. The app keeps API responses in TanStack Query, s | --------------------------------------------------------------- | -------------------------- | -------------------------------------------- | | Render SSR data without refetching it, and skip repeat requests | App cache (TanStack Query) | [Cache app data](/docs/dev/cache/app) | | Stop running the same slow database query for every visitor | API cache (Redis) | [Cache API data](/docs/dev/cache/api) | -| Look up `remember`, `delete`, `flush` and the other methods | API cache (Redis) | [Cache reference](/docs/dev/cache/reference) | +| Look up `remember`, `delete`, `flush` and the other methods | API cache (Redis) | [API cache reference](/docs/dev/cache/reference) | | Render a public page once and send that HTML to every visitor | Page cache | [Cache server-rendered pages](/docs/dev/cache/pages) | -Most features use both. The API caches the expensive part once, and each visitor's app keeps its own copy of the response. +Most features use both. The API caches the expensive part once, and each visitor's app keeps its own copy of the response. [How it differs from other caches](/docs/dev/cache/pages-invalidation#how-it-differs-from-other-caches) compares all three layers side by side. [`fetcher()`](/docs/dev/fetcher) forwards the visitor's cookies, so a stored response could be one visitor's data served to another. That is why caching - lives in the two layers above and not in the fetcher. + lives in the layers above and not in the fetcher. Content Engine public reads are not cached on the server. To cache them in your app or a separate front end, see [Content Engine caching](/docs/content-engine/caching). diff --git a/apps/web/content/docs/dev/cache/pages-invalidation.mdx b/apps/web/content/docs/dev/cache/pages-invalidation.mdx index 33be1545b9..27c5320280 100644 --- a/apps/web/content/docs/dev/cache/pages-invalidation.mdx +++ b/apps/web/content/docs/dev/cache/pages-invalidation.mdx @@ -1,5 +1,5 @@ --- -title: How cached pages stay fresh +title: Page freshness description: How VitNode's page cache expires HTML with TTL and stale-while-revalidate, keeps personal data out of shared pages, and invalidates articles when Content Engine content changes. icon: RefreshCw --- diff --git a/apps/web/content/docs/dev/cache/pages-reference.mdx b/apps/web/content/docs/dev/cache/pages-reference.mdx index 570987628e..4583ac1a82 100644 --- a/apps/web/content/docs/dev/cache/pages-reference.mdx +++ b/apps/web/content/docs/dev/cache/pages-reference.mdx @@ -78,9 +78,10 @@ import { setPageCacheTags } from '@vitnode/core/api/lib/page-cache' setPageCacheTags(c, ['events:list']) ``` -```ts title="after the write commits" +```ts title="plugins/events/src/api/modules/events/routes/update.route.ts" import { invalidatePageCacheTags } from '@vitnode/core/api/lib/page-cache' +// in the handler, after the write commits const result = await invalidatePageCacheTags(['events:list'], { mode: 'soft' }) if (result.status === 'failed') { await c.get('log').error('Cached event pages could not be invalidated.') diff --git a/apps/web/content/docs/dev/cache/pages.mdx b/apps/web/content/docs/dev/cache/pages.mdx index 502afe80b2..e2c672cde8 100644 --- a/apps/web/content/docs/dev/cache/pages.mdx +++ b/apps/web/content/docs/dev/cache/pages.mdx @@ -1,5 +1,5 @@ --- -title: Cache server-rendered pages +title: Cache pages description: Reuse a public page's server-rendered HTML for every visitor with a route cache policy, and invalidate it automatically when Content Engine content changes. icon: FileClock --- @@ -8,7 +8,11 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs' The page cache stores the complete HTML a public page renders and sends the same copy to the next visitors. Use it for pages that look the same for everyone, such as a blog article, when they still have to be rendered on the server because their content lives in the database. -A route is never cached unless it asks to be. This guide caches the blog plugin's article page, `/blog/article/:slug`. +A route is never cached unless it asks to be. This guide walks through the policy on the blog plugin's article page, `/blog/article/:slug`, and applies the same steps to a route of your own. + +## Before you begin + +- The `@vitnode/blog` plugin installed, with at least one published article. The check below uses the slug `hello-world`; use one of your own articles' slugs. @@ -31,6 +35,8 @@ export const routes = definePluginRoutes([ `maxAge: 300` keeps a rendered article fresh for 5 minutes. `staleWhileRevalidate: 60` adds one more minute in which a visitor may still get the previous copy while a fresh one renders in the background. [How cached pages stay fresh](/docs/dev/cache/pages-invalidation#ttl-and-stale-while-revalidate) walks through the timeline. +The blog plugin already ships this policy on `/blog/article/:slug`, `/blog` and `/blog/category/:slug`, so with the blog there is nothing to add. Write the same `cache` on a public page of your own plugin. + `index()` routes accept the same option. A layout, an AdminCP page and a route with `requires` cannot be cached, and the build fails if one declares a policy. @@ -115,7 +121,7 @@ The build's route summary shows the policy that each route actually got. See [Bu ## Check the result -Request a published article twice and look at the `x-vitnode-cache` header: +Request a published article twice and look at the `x-vitnode-cache` header. Replace `hello-world` with your article's slug: ```bash curl -s -o /dev/null -D - http://localhost:3000/blog/article/hello-world | grep -i 'x-vitnode-cache\|cache-control' diff --git a/apps/web/content/docs/dev/cache/reference.mdx b/apps/web/content/docs/dev/cache/reference.mdx index 2d6ea39f60..742d1990d9 100644 --- a/apps/web/content/docs/dev/cache/reference.mdx +++ b/apps/web/content/docs/dev/cache/reference.mdx @@ -1,5 +1,5 @@ --- -title: Cache reference +title: API cache reference description: Every method on c.get("cache") in VitNode API routes - signatures, return values, TTLs, key prefixes, serialization and behavior without Redis. icon: List --- @@ -29,7 +29,7 @@ icon: List | `get`, `set`, `has`, `remember`, `delete`, `flush` | `vitnode:cache:{pluginId}:{key}` | | `acquireLock`, `releaseLock` | `vitnode:cache:__system__:lock:{key}` | -The plugin ID comes from the route that handles the request. Lock keys are not prefixed with it, so include your plugin ID in a lock key, for example `@acme/site-notes:rebuild-stats`. +The plugin ID comes from the route that handles the request. Lock keys are not prefixed with it, so include your plugin ID in a lock key, for example `site-notes:rebuild-stats`. ## Serialization diff --git a/apps/web/content/docs/dev/captcha/cloudflare.mdx b/apps/web/content/docs/dev/captcha/cloudflare.mdx index d6e30d2bfe..bdec36c612 100644 --- a/apps/web/content/docs/dev/captcha/cloudflare.mdx +++ b/apps/web/content/docs/dev/captcha/cloudflare.mdx @@ -169,7 +169,12 @@ public middleware route: ```bash curl http://localhost:3000/api/@vitnode/core/middleware -# {"isEmail":false,"sso":[],"captcha":{"siteKey":"0x4AAAAAAA...","type":"cloudflare_turnstile"}} +``` + +The response now has a `captcha` field (abridged): + +```json +{ "captcha": { "siteKey": "0x4AAAAAAA...", "type": "cloudflare_turnstile" } } ``` Then open `/register`. A Turnstile widget renders just above the **Register** @@ -266,7 +271,7 @@ dark mode with no configuration of its own. `.env` only takes effect after you restart the dev server.
          -## Next +## Related `, a wizard, a component that is not an `AutoForm` at all - `useCaptcha` is the same three values `AutoForm` uses internally. There is no captcha _adapter_ to write: the two providers live in core, and -`type` is a closed union. What this page is about is the client half. +`type` is a closed union. This page is about the client half. The example is +the `site-notes` contact form from the [Captcha overview](/docs/dev/captcha), +rebuilt without `AutoForm`. -import { File, Files, Folder } from 'fumadocs-ui/components/files' -import { TypeTable } from 'fumadocs-ui/components/type-table' +## Before you begin + +- A captcha provider configured in the API config ([Captcha](/docs/dev/captcha#1-configure-a-provider)). +- A route with `withCaptcha: true`, such as `POST /api/site-notes/contact` from [Gate your own route](/docs/dev/captcha#2-gate-your-own-route). +- The form renders inside a VitNode app, under `VitNodeRootProviders` (see the gotchas below). ## Quick start Three values, and a `
          ` for the widget to land in. -```tsx title="plugins/contact/src/views/contact/contact-form.tsx" +```tsx title="plugins/site-notes/src/pages/contact-form.tsx" import type React from 'react' import { useCaptcha } from '@vitnode/core/hooks/use-captcha' // [!code ++] @@ -109,19 +117,21 @@ building it. ### Gate the route -Nothing on the client makes a route require a token - `withCaptcha: true` on the -route does, in a [plugin](/docs/dev/plugins/create) exactly as in core. +Nothing on the client makes a route require a token. `withCaptcha: true` on the +route does, in a [plugin](/docs/dev/plugins/create) exactly as in core. This is +the route from the overview, trimmed to the relevant part: -```ts title="plugins/my-plugin/src/api/modules/contact/routes/create.route.ts" -export const createContactRoute = buildRoute({ +```ts title="plugins/site-notes/src/api/modules/contact/send.route.ts" +import { buildRoute } from '@/api/builders' + +export const sendContactRoute = buildRoute({ route: { + withCaptcha: true, // [!code ++] method: 'post', path: '/', - description: 'Send a message to the site owner', - withCaptcha: true, // [!code ++] - // ... + // request.body and responses as in the overview }, - handler: async (c) => c.text('Message sent', 201), + handler: async (c) => c.body(null, 201), }) ``` @@ -133,12 +143,12 @@ export const createContactRoute = buildRoute({ The site key is public. A plugin page can read it with the shared TanStack Query definition before rendering its form: -```tsx title="plugins/contact/src/pages/contact-page.tsx" +```tsx title="plugins/site-notes/src/pages/contact-page.tsx" import { useMiddlewareConfigQuery } from '@vitnode/core/tanstack/auth' -import { ContactForm } from '../views/contact-form' +import { ContactForm } from './contact-form' -export const ContactScreen = () => { +export const ContactPage = () => { const { data: config } = useMiddlewareConfigQuery() return @@ -171,9 +181,11 @@ change. and the server one, and it spells the `x-vitnode-captcha-token` header for you. An empty string sends no header at all. -```ts title="src/site/contact/send-message.ts" +```ts title="plugins/site-notes/src/pages/send-message.ts" import { fetcher } from '@vitnode/core/tanstack/fetcher' +import { manifest } from '@/manifest.gen' + export const sendMessage = async ({ captchaToken, ...body @@ -182,7 +194,7 @@ export const sendMessage = async ({ message: string }) => await fetcher({ - plugin: '@vitnode/my-plugin', + plugin: manifest.id, method: 'post', module: 'contact', path: '/', @@ -199,7 +211,7 @@ export const sendMessage = async ({ Call the route with no token. It answers `400` before your handler runs: ```bash -curl -i -X POST 'http://localhost:3000/api/@vitnode/my-plugin/contact' \ +curl -i -X POST 'http://localhost:3000/api/site-notes/contact' \ -H 'Content-Type: application/json' \ -d '{"message":"Hello from curl"}' ``` @@ -223,12 +235,12 @@ A minimal captcha-gated feature is four files, and only one of them knows the hook exists. - - - + + + - - + + @@ -266,7 +278,7 @@ hook exists. that knows whether the token was any good. -## Next +## Related ---- +### 2. Gate your own route -### 2. Protect Custom API Routes +Add `withCaptcha: true` to the route definition. This `site-notes` route takes a message for the site owner: -Enable captcha verification on any custom Hono endpoint with `withCaptcha: true`: +```ts title="plugins/site-notes/src/api/modules/contact/send.route.ts" +import { z } from "@hono/zod-openapi" -```ts title="plugins/blog/src/api/modules/comments/routes/create.route.ts" import { buildRoute } from "@/api/builders" -export const createCommentRoute = buildRoute({ +export const sendContactRoute = buildRoute({ route: { withCaptcha: true, // [!code ++] method: "post", path: "/", - responses: { 201: { description: "Comment created" } }, + request: { + body: { + content: { + "application/json": { + schema: z.object({ message: z.string().trim().min(1).max(2000) }), + }, + }, + }, + }, + responses: { 201: { description: "Message sent." } }, }, handler: async (c) => { - // Execution only reaches here if the captcha token is valid + // Only reached with a valid captcha token + const { message } = c.req.valid("json") + await c.get("log").debug(`Contact message: ${message}`) + + return c.body(null, 201) }, }) ``` ---- +Put it in a `contact` module and add that module to `buildApiPlugin` in `src/config.api.ts`, the same way as in [API modules](/docs/dev/plugins/api/modules). The route is then `POST /api/site-notes/contact`. Without a token it answers `400` before the handler runs. -### 3. Render the Frontend Widget +### 3. Render the widget Pass the app's captcha config to `AutoForm`. It loads the widget, keeps the submit button disabled until the captcha is ready, and hands `onSubmit` a fresh token to forward as the fetcher's `captchaToken`: -```tsx title="plugins/blog/src/views/comment-form.tsx" +```tsx title="plugins/site-notes/src/pages/contact-form.tsx" import { AutoForm } from "@vitnode/core/components/form/auto-form" import { AutoFormTextarea } from "@vitnode/core/components/form/fields/textarea" import { useMiddlewareConfigQuery } from "@vitnode/core/tanstack/auth" import { fetcher } from "@vitnode/core/tanstack/fetcher" import { z } from "zod" -const formSchema = z.object({ text: z.string().min(1) }) +import { manifest } from "@/manifest.gen" -export const CommentForm = () => { +const formSchema = z.object({ message: z.string().min(1) }) + +export const ContactForm = () => { const { data: config } = useMiddlewareConfigQuery() return ( @@ -83,16 +98,16 @@ export const CommentForm = () => { captcha={config.captcha} // [!code ++] fields={[ { - id: "text", - component: (props) => , + id: "message", + component: (props) => , }, ]} formSchema={formSchema} onSubmit={async (values, form, { captchaToken }) => { await fetcher({ - plugin: "@acme/blog", + plugin: manifest.id, method: "post", - module: "comments", + module: "contact", path: "/", captchaToken, // [!code ++] args: { body: values }, @@ -103,11 +118,9 @@ export const CommentForm = () => { } ``` -`useMiddlewareConfigQuery` suspends until the config loads, so render the form under a `Suspense` boundary. Outside `AutoForm`, use the `useCaptcha` hook from `@vitnode/core/hooks/use-captcha`: it returns `isReady`, `getToken()` and `onReset()`, and for Turnstile your form must contain an element with `id="vitnode_captcha"`. - ---- +`useMiddlewareConfigQuery` suspends until the config loads, so render the form under a `Suspense` boundary. A real form would also show a toast and reset after a successful send. For a form that is not an `AutoForm`, see [Custom forms](/docs/dev/captcha/custom-adapter). -## Supported Providers +## Supported providers { /> -## Learn More +## Related diff --git a/apps/web/content/docs/dev/captcha/recaptcha.mdx b/apps/web/content/docs/dev/captcha/recaptcha.mdx index f1994f93a9..10d870ca9a 100644 --- a/apps/web/content/docs/dev/captcha/recaptcha.mdx +++ b/apps/web/content/docs/dev/captcha/recaptcha.mdx @@ -173,7 +173,12 @@ public middleware route: ```bash curl http://localhost:3000/api/@vitnode/core/middleware -# {"isEmail":false,"sso":[],"captcha":{"siteKey":"6Lc...","type":"recaptcha_v3"}} +``` + +The response now has a `captcha` field (abridged): + +```json +{ "captcha": { "siteKey": "6Lc...", "type": "recaptcha_v3" } } ``` Then open `/register`. Google's badge appears in the bottom corner of the page, @@ -204,11 +209,15 @@ Useful when the console's numbers and your form's behaviour disagree. | Threshold | `0.5`, hardcoded in `captchaMiddleware` | | Token travels as | the header `x-vitnode-captcha-token` | -The visitor's IP is forwarded as `remoteip`. It is the address of the socket the -request arrived on, falling back to `127.0.0.1` when the runtime exposes no -connection info. Proxy headers like `x-forwarded-for` are deliberately ignored - -the caller writes them - so behind a reverse proxy this is your proxy's address -and the score reflects your server rather than the person filling the form. +The visitor's IP is forwarded as `remoteip`. It is the client address VitNode +resolved for the request, the same one the rate limiter uses: the address your +web server signed for a server-rendered request, otherwise `X-Forwarded-For` +read past `VITNODE_TRUSTED_PROXY_HOPS` proxies, otherwise the socket address +(`127.0.0.1` when the runtime exposes none). Behind a reverse proxy with the +default of `0` hops, that is the proxy's address, so the score reflects your +server rather than the person filling the form. [Real visitor +IPs](/docs/dev/advanced/rate-limiter#real-visitor-ips-for-server-rendered-pages) +shows how to set it up. ## Gotchas @@ -241,7 +250,7 @@ and the score reflects your server rather than the person filling the form. `.env` only takes effect after you restart the dev server. -## Next +## Related

      NRZp0w)O5f=AV6AkB!v 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 z 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 diff --git a/apps/web/content/docs/content-engine/search-results.webp b/apps/web/content/docs/content-engine/search-results.webp index bed8d602df4f86b7a93f1b65de8e88bbabfa8b81..e06ab5b03a9e55f8a71f6703db22a25167f07464 100644 GIT binary patch literal 56388 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 literal 30844 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 diff --git a/apps/web/content/docs/content-engine/search.mdx b/apps/web/content/docs/content-engine/search.mdx index a58eb592f7..2059e6e1d4 100644 --- a/apps/web/content/docs/content-engine/search.mdx +++ b/apps/web/content/docs/content-engine/search.mdx @@ -15,7 +15,7 @@ implementation: - Every indexed field except `authorField` must be in `publicApi.fields`. - Records saved before the change need a Reindex in Debug Panel → Search. Own code that writes records must use the editorial service with `contentEditorialEffects` to keep the index current. related: - - title: Public pages + - title: Content page href: /docs/content-engine/public-pages - title: Search href: /docs/dev/search @@ -27,13 +27,13 @@ import { ImgDocs } from "@/components/fumadocs/img"; import searchAdmincpCollection from "./search-admincp-collection.webp"; import searchResults from "./search-results.webp"; -Add a `search` block to a content type and its published records show up on the site search page at `/search`. VitNode writes a search document after every save, publish and delete, so you never call the search engine yourself. This guide turns search on for `example.article` from the example plugin. +Add a `search` block to a content type and its published records show up on the site search page at `/search`. VitNode writes a search document after every save, publish and delete, so you never call the search engine yourself. This guide turns search on for `newsroom.story` from the newsroom plugin. ## Before you begin The content type needs [publication and a public API](/docs/content-engine/public-api), because a search result is a link to a public page and its text has to be public already. Without them, the definition throws when it loads: ``search needs `publication: true`.`` or ``search needs `publicApi: { path, fields }`.`` -It also needs a page that serves the result URL. [Public pages](/docs/content-engine/public-pages) shows how to add one. +It also needs a page that serves the result URL. [Content page](/docs/content-engine/public-pages) shows how to add one. @@ -43,29 +43,53 @@ It also needs a page that serves the result URL. [Public pages](/docs/content-en Add `search` to the definition. This excerpt leaves out the fields and blocks search does not read: -```ts title="plugins/example/src/content/article.ts" -export const articleContentType = defineContentType({ - id: "example.article", - tableName: "example_articles", +```ts title="plugins/newsroom/src/content/story.ts (excerpt)" +export const storyContentType = defineContentType({ + id: "newsroom.story", + tableName: "newsroom_stories", fields: { title: field.text({ required: true, minLength: 3, maxLength: 200 }), slug: field.slug({ source: "title" }), - excerpt: field.textarea({ maxLength: 500, nullable: true }), + // ... + excerpt: field.textarea({ + ai: { + action: "newsroom:story.excerpt", + mode: "suggestion", + sourceFields: ["title", "code"], + }, + maxLength: 500, + nullable: true, + }), + // ... author: field.user(), + // ... }, publication: true, + // ... publicApi: { - path: "articles", - fields: ["title", "slug", "excerpt", "publishedAt"], + path: "stories", + fields: [ + "title", + "slug", + "excerpt", + "featured", + "category", + "animation", + "gallery", + "noIndex", + "publishedAt", + ], + // ... }, // [!code ++:7] search: { titleField: "title", descriptionField: "excerpt", contentFields: ["title", "excerpt"], - pathTemplate: "/articles/{slug}", + pathTemplate: "/stories/{slug}", authorField: "author", }, + // ... }); ``` @@ -84,13 +108,13 @@ Every field except `authorField` must be in `publicApi.fields`. Otherwise a resu ### Index the records you already have -New writes are indexed from now on, but records saved before the `search` block existed are not. Open **Debug Panel → Search** in the AdminCP (`/admin/core/debug/search`), type `example.article` into **Search collections…**, and click **Reindex** on that row. **Rebuild index** at the top rebuilds every collection. +VitNode indexes new writes from now on, but not the records saved before the `search` block existed. Open **Debug Panel → Search** in the AdminCP (`/admin/core/debug/search`), type `newsroom.story` into **Search collections…**, and click **Reindex** on that row. **Rebuild index** at the top rebuilds every collection. Both buttons need the **Rebuild and clear the search index** staff permission (`system` → `can_manage_search`). A rebuild clears the collection and refills it in pages of 200 records. It is a queued job, so it only runs while [cron](/docs/dev/cron) is running. @@ -223,7 +247,7 @@ If the search engine fails, the save still succeeds. The failure is logged with ## Localized content types -A [localized](/docs/content-engine/localization) content type such as `example.localized-article` gets one document per translation, with the language stored on it. A translation is public only when both the record and that translation are published. Deleting a translation removes only that language's document. Deleting the record removes all of them. +A [localized](/docs/content-engine/localization) content type such as `newsroom.bulletin` gets one document per translation, with the language stored on it. A translation is public only when both the record and that translation are published. Deleting a translation removes only that language's document. Deleting the record removes all of them. `/search` shows documents in the visitor's language. Documents of content types that are not localized match every language. With `localization.fallback: "default"`, a visitor whose language has no published translation sees the default language's document instead. @@ -231,39 +255,39 @@ Each document gets the URL of its own language. `pathTemplate` stays the English ## Check the result -1. Publish an article in **AdminCP → Example → Articles**. -2. Open `/search` and type a whole word or two from its title or excerpt. The result links to `/articles/{slug}`. +1. Publish a story in **AdminCP → Newsroom → Stories**. +2. Open `/search` and type a whole word or two from its title or excerpt. The result links to `/stories/{slug}`. The same results come from the public search API. `types` limits them to one content type: ```bash -curl "http://localhost:3000/api/@vitnode/core/search?search=hello&types=example.article" +curl "http://localhost:3000/api/@vitnode/core/search?search=hello&types=newsroom.story" ``` ```json { "edges": [ { - "pluginId": "@vitnode/example", - "itemType": "example.article", + "pluginId": "newsroom", + "itemType": "newsroom.story", "itemId": 3, "languageCode": "", "title": "Hello Content Engine", - "content": "Hello Content Engine A first article from the example plugin, served by the public API and rendered on its own page.", - "url": "/articles/hello-content-engine", + "content": "Hello Content Engine A first story from the newsroom plugin, served by the public API and rendered on its own page.", + "url": "/stories/hello-content-engine", "isPublic": true } ] } ``` -Unpublish the article and run the request again. This time `edges` is empty. If a record you published before adding `search` is missing, reindex the collection. +Unpublish the story and run the request again. This time `edges` is empty. If a record you published before adding `search` is missing, reindex the collection. The index runs on Postgres full-text search by default. To switch engines, or to index data that is not a content type, see [Search & Discovery](/docs/dev/search) and [Elasticsearch](/docs/dev/search-elasticsearch). diff --git a/apps/web/content/docs/content-engine/seo.mdx b/apps/web/content/docs/content-engine/seo.mdx index 6167ef14c0..be8317087f 100644 --- a/apps/web/content/docs/content-engine/seo.mdx +++ b/apps/web/content/docs/content-engine/seo.mdx @@ -9,22 +9,44 @@ import blogSeoSheet from "./seo-blog-sheet.webp"; Once a content type has [public pages](/docs/content-engine/public-pages), `delivery.seo` decides which fields fill each page's ``, meta description and `robots` tag, and `delivery.sitemap` lists the pages for crawlers. You name fields; the Content Engine reads them from every published record, so editors never fill in a separate SEO form unless you give them one. -The examples use `example.article` from the example plugin and `blog.post` from the blog plugin, which is localized. +The examples use `newsroom.story` from the newsroom plugin and `blog.post` from the blog plugin, which is localized. ## Pick the SEO fields -`example.article` uses its title and excerpt, plus a boolean that hides a record from search engines: +`newsroom.story` uses its title and excerpt, plus a boolean that hides a record from search engines: -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts (excerpt)" fields: { title: field.text({ required: true, minLength: 3, maxLength: 200 }), - excerpt: field.textarea({ maxLength: 500, nullable: true }), + // ... + excerpt: field.textarea({ + ai: { + action: "newsroom:story.excerpt", + mode: "suggestion", + sourceFields: ["title", "code"], + }, + maxLength: 500, + nullable: true, + }), + // ... noIndex: field.boolean({ nullable: true }), + // ... }, publicApi: { - path: "articles", - fields: ["title", "slug", "excerpt", "noIndex", "publishedAt"], + path: "stories", + fields: [ + "title", + "slug", + "excerpt", + "featured", + "category", + "animation", + "gallery", + "noIndex", + "publishedAt", + ], + // ... }, delivery: { @@ -86,7 +108,7 @@ The page's `head` calls `contentDeliveryPageHead` with the resolve route's answe | `og:title`, `og:description` | No | <Callout type="warn"> - The resolve route returns `openGraph` and `canonicalPath` for every record, but nothing turns them into tags yet. A nonlocalized type such as `example.article` gets no canonical link, and no content type gets Open Graph tags. A plugin page cannot add them either, because its `head` only accepts `title`, `description`, `robots` and `alternates`. Keep `openGraph` in your definition so the data is ready, and read it from the resolve route if you render pages outside VitNode. + The resolve route returns `openGraph` and `canonicalPath` for every record, but nothing turns them into tags yet. A nonlocalized type such as `newsroom.story` gets no canonical link, and no content type gets Open Graph tags. A plugin page cannot add them either, because its `head` only accepts `title`, `description`, `robots` and `alternates`. Keep `openGraph` in your definition so the data is ready, and read it from the resolve route if you render pages outside VitNode. </Callout> ## Hide a record from search engines @@ -96,7 +118,7 @@ The page's `head` calls `contentDeliveryPageHead` with the resolve route's answe - the page gets `<meta content="noindex, nofollow" name="robots"/>`; - the record leaves the [sitemap](#sitemap). -Only `true` hides a record. `null` and `false` both mean "index it", which is why `example.article` can make the field nullable without emptying its sitemap. The resolve route reports the decision as `"robots": { "follow": true, "index": false }`. +Only `true` hides a record. `null` and `false` both mean "index it", which is why `newsroom.story` can make the field nullable without emptying its sitemap. The resolve route reports the decision as `"robots": { "follow": true, "index": false }`. The field must be shared, not localized. A record has one indexing decision, and a per-language value would let the Polish page say `noindex` while the sitemap lists the English one. The definition refuses a localized `noIndexField` for that reason. @@ -130,7 +152,7 @@ delivery: { `delivery.sitemap` adds a public route that lists every published URL of the content type, oldest record first. Pass `true` or `{ changeFrequency, priority }`. It needs `publication: true`, since a sitemap lists only what readers can reach. ```bash -curl "http://localhost:3000/api/@vitnode/example/content/articles/delivery/sitemap?cursor=1&limit=1" +curl "http://localhost:3000/api/newsroom/content/stories/delivery/sitemap?cursor=1&limit=1" ``` ```json @@ -141,7 +163,7 @@ curl "http://localhost:3000/api/@vitnode/example/content/articles/delivery/sitem "itemId": 3, "lastModified": "2026-10-10T11:06:30.518Z", "locale": null, - "path": "/articles/hello-content-engine", + "path": "/stories/hello-content-engine", "priority": 0.7 } ], @@ -182,10 +204,16 @@ import { contentSitemapXml, isContentSitemapChangeFrequency, } from "@vitnode/core/content"; - -const response = await fetch( - "http://localhost:3000/api/@vitnode/example/content/articles/delivery/sitemap", -); +import { fetcher } from "@vitnode/core/tanstack/fetcher"; + +const response = await fetcher({ + plugin: "newsroom", + method: "get", + module: "content/stories", + path: "/delivery/sitemap", + args: { query: { limit: 1000 } }, +}); +if (!response.ok) throw new Error("Could not load the story sitemap."); const { entries } = await response.json(); const xml = contentSitemapXml({ @@ -200,19 +228,19 @@ const xml = contentSitemapXml({ }); ``` -With the example plugin's two published articles, `xml` is: +With the newsroom plugin's two published stories, `xml` is: ```xml <?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> - <loc>https://example.com/articles/jbbjk-1</loc> + <loc>https://example.com/stories/jbbjk-1</loc> <lastmod>2026-08-30T09:18:25.398Z</lastmod> <changefreq>weekly</changefreq> <priority>0.7</priority> </url> <url> - <loc>https://example.com/articles/hello-content-engine</loc> + <loc>https://example.com/stories/hello-content-engine</loc> <lastmod>2026-10-10T11:06:30.518Z</lastmod> <changefreq>weekly</changefreq> <priority>0.7</priority> @@ -224,19 +252,19 @@ With the example plugin's two published articles, `xml` is: ## Retired slugs -With `delivery.redirects`, an old slug answers a permanent `308` redirect to the record's current URL, so links and search results that still use the old address land on the new page. See [Keep old URLs working](/docs/content-engine/public-pages#keep-old-urls-working). +With `delivery.redirects`, an old slug answers a permanent `308` redirect to the record's current URL, so links and search results that still use the old address land on the new page. See [Keep old URLs working](/docs/content-engine/public-pages#optional-next-steps). ## Check the result -Print the SEO tags of an article and of a localized blog post: +Print the SEO tags of a story and of a localized blog post: ```bash -curl -s http://localhost:3000/articles/hello-content-engine | grep -oE '<title>[^<]*|]*name="(description|robots)"[^>]*>|]*rel="(canonical|alternate)"[^>]*>' +curl -s http://localhost:3000/stories/hello-content-engine | grep -oE '[^<]*|]*name="(description|robots)"[^>]*>|]*rel="(canonical|alternate)"[^>]*>' ``` ```html Hello Content Engine - VitNode - + ``` Run the same command for `http://localhost:3000/blog/article/english-title` and you get its title, description and the four links from [Localized alternates](#localized-alternates-and-hreflang). The SVG logo's `Logo VitNode` may show up too; it is not page metadata. @@ -244,7 +272,7 @@ Run the same command for `http://localhost:3000/blog/article/english-title` and Then ask the resolve route what the page was given, `openGraph` and `robots` included: ```bash -curl http://localhost:3000/api/@vitnode/example/content/articles/delivery/resolve/hello-content-engine +curl http://localhost:3000/api/newsroom/content/stories/delivery/resolve/hello-content-engine ``` -Set `noIndex` on a test article, publish it, and run both commands again. The page gains the `robots` tag, and the [sitemap](#sitemap) route stops listing it. +Set `noIndex` on a test story, publish it, and run both commands again. The page gains the `robots` tag, and the [sitemap](#sitemap) route stops listing it. diff --git a/apps/web/content/docs/content-engine/services.mdx b/apps/web/content/docs/content-engine/services.mdx index 22ed651594..0a459f2168 100644 --- a/apps/web/content/docs/content-engine/services.mdx +++ b/apps/web/content/docs/content-engine/services.mdx @@ -4,31 +4,31 @@ description: Read and write Content Engine records from your own Hono routes, cr icon: Server --- -The generated routes cover the usual reads and writes. When you need something they don't do, such as "the three newest articles in a category" or "publish a digest every Monday", call a **service** from your own code. It is a typed object you get from the model: +The generated routes cover the usual reads and writes. When you need something they don't do, such as "the three newest stories in a category" or "publish a digest every Monday", call a **service** from your own code. It is a typed object you get from the model: ```ts -const article = await articleContent.service(c).findById(1); -article?.title; // string, and a typo is a compile error +const story = await storyContent.service(c).findById(1); +story?.title; // string, and a typo is a compile error ``` -`articleContent` is the model from `createContentModel`, and `c` is the Hono context of your route, cron job or queue task. +`storyContent` is the model from `createContentModel`, and `c` is the Hono context of your route, cron job or queue task. ## Pick a service | You want to | Use | It checks permissions | It emits events and writes history | | ------------------------------------------------------------- | ------------------------------------------ | --------------------- | ---------------------------------- | -| Show content to visitors: published records, public fields | `articleContent.publicService(c)` | Only public data | Read only | -| Read or write anything from a job or a staff route | `articleContent.service(c)` | No | No | -| Save a change the way the AdminCP does | `articleContent.editorialService(c, opts)` | No | Revisions, and events through the effects helpers | +| Show content to visitors: published records, public fields | `storyContent.publicService(c)` | Only public data | Read only | +| Read or write anything from a job or a staff route | `storyContent.service(c)` | No | No | +| Save a change the way the AdminCP does | `storyContent.editorialService(c, opts)` | No | Revisions, and events through the effects helpers | ## Read published records `publicService` returns exactly what the [public API](/docs/content-engine/public-api) would, so a custom public route can never leak a draft: -```ts title="plugins/example/src/api/modules/articles/by-category.route.ts" +```ts title="plugins/newsroom/src/api/modules/stories/by-category.route.ts" handler: async c => { - const { publicService } = articleContent; - if (!publicService) throw new Error("Articles have no public API."); + const { publicService } = storyContent; + if (!publicService) throw new Error("Stories have no public API."); const { edges } = await publicService(c).findMany({ filters: { category: c.req.valid("param").categoryId }, @@ -46,19 +46,19 @@ handler: async c => { The plain `service` sees every record and checks nothing, which suits a [cron job](/docs/dev/cron): -```ts title="plugins/example/src/api/cron/weekly-digest.cron.ts" +```ts title="plugins/newsroom/src/api/cron/weekly-digest.cron.ts" export const weeklyDigestCron = buildCron({ name: "weekly-digest", schedule: "0 8 * * 1", handler: async c => { - const service = articleContent.service(c); - const article = await service.create({ + const service = storyContent.service(c); + const story = await service.create({ title: "Weekly digest", code: `digest-${Date.now()}`, category: 1, gallery: [21], }); - await service.publish(article.id); + await service.publish(story.id); }, }); ``` @@ -73,15 +73,15 @@ export const weeklyDigestCron = buildCron({ `editorialService` (with [`editorial`](/docs/content-engine/editorial)) writes a revision and refuses to overwrite a newer save. Run the effects after it, so events, search and URLs follow: -```ts title="plugins/example/src/api/modules/admin/routes/feature.route.ts" +```ts title="plugins/newsroom/src/api/modules/admin/routes/feature.route.ts" import { contentEditorialEffects, resolveContentActor, withHttpErrors, } from "@vitnode/core/content/server"; -const { editorialService } = articleContent; -if (!editorialService) throw new Error("Articles have no editorial."); +const { editorialService } = storyContent; +if (!editorialService) throw new Error("Stories have no editorial."); const outcome = await withHttpErrors( "update", @@ -91,12 +91,12 @@ const outcome = await withHttpErrors( { featured: true }, { actor: resolveContentActor(c), expectedVersion }, ), - { contentTypeId: articleContent.definition.id, itemId: id, structured: true }, + { contentTypeId: storyContent.definition.id, itemId: id, structured: true }, ); if (outcome) { - await contentEditorialEffects(c, articleContent.definition, outcome, { - model: articleContent, + await contentEditorialEffects(c, storyContent.definition, outcome, { + model: storyContent, pluginId: manifest.id, }); } @@ -104,7 +104,7 @@ if (outcome) { - `expectedVersion` is the version the page loaded. A newer save turns the call into a `409 CONTENT_VERSION_CONFLICT`, which `withHttpErrors` answers for you. - `resolveContentActor(c)` names the signed-in user on the revision. A job passes `CONTENT_SYSTEM_ACTOR`. -- Protect a staff route with `adminStaffPermission: { module: "article", permission: "can_edit" }`. +- Protect a staff route with `adminStaffPermission: { module: "story", permission: "can_edit" }`. Hiding and duplicating work the same way, with `hide`, `unhide` and `duplicate` and the `contentVisibilityEffects` and `contentDuplicateEffects` helpers. They exist only when `visibility` or `duplication` is on. @@ -141,4 +141,4 @@ A [localized](/docs/content-engine/localization) content type also has `localize ### Schemas -`articleContent.schemas` holds the Zod schemas the generated routes use. Reuse them so a custom route accepts and returns the same shapes: `create`, `update`, `updateEnvelope`, `select`, `publicSelect`, `filters`, `publicFilters`, `order`, `params`, `publicParams` and `form`. +`storyContent.schemas` holds the Zod schemas the generated routes use. Reuse them so a custom route accepts and returns the same shapes: `create`, `update`, `updateEnvelope`, `select`, `publicSelect`, `filters`, `publicFilters`, `order`, `params`, `publicParams` and `form`. diff --git a/apps/web/content/docs/content-engine/threads-comments.webp b/apps/web/content/docs/content-engine/threads-comments.webp new file mode 100644 index 0000000000000000000000000000000000000000..07f20dd42e5f8d7601bf153b741adf548c751396 GIT binary patch literal 30878 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 Vm{cPMmbHZR&?mG1cJqJee*iOmlt%yn literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/content-engine/threads-editing-form.webp b/apps/web/content/docs/content-engine/threads-editing-form.webp new file mode 100644 index 0000000000000000000000000000000000000000..0c21691c34f2731ce9be2604898fc9c6a4059989 GIT binary patch literal 43276 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ℜT*@;D)C#=ah{0t-)drQCwXMrbCDDh(B_vz& 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 XB`^R00000fVLAvB%A! -### Define the content type +### Add an owner, versions and the write options -Create `src/content/discussion.ts`. The `publicWrite` block is the new part: - -```ts title="plugins/example/src/content/discussion.ts" -import { defineContentType, field } from "@vitnode/core/content"; - -export const discussionContentType = defineContentType({ - id: "example.discussion", - tableName: "example_discussions", +Edit `src/content/article.ts`. Add an `author` field, `editorial` and `publicWrite`: +```ts title="plugins/newsroom/src/content/article.ts" fields: { title: field.text({ required: true, minLength: 3, maxLength: 200 }), slug: field.slug({ source: "title" }), body: field.richText({ required: true }), - author: field.user(), + author: field.user(), // [!code ++] }, publication: true, - visibility: true, - editorial: { revisions: { retention: 20 } }, publicApi: { - path: "discussions", + path: "news", fields: ["id", "title", "slug", "body", "publishedAt"], }, + delivery: true, + + editorial: true, // [!code ++] + // [!code ++:5] publicWrite: { ownership: { field: "author" }, create: { fields: ["title", "body"], status: "published" }, update: { fields: ["title", "body"] }, }, - - admin: { - path: "example/discussions", - titleField: "title", - }, -}); ``` -- `ownership.field` names a single `field.user()`. The server fills it with the signed-in user on create. -- `create.fields` and `update.fields` are allowlists with no wildcard. A field you add later stays private until you list it. `slug` is derived from `title` on the server, so you list `title` instead. -- `create.status` is what a new record starts as. It defaults to `"draft"`; discussions go live straight away. -- `update.own` defaults to `true`, so owners can edit their own records. - -Every option and rule is in the [public write reference](/docs/content-engine/public-write-api#publicwrite-options). +- **`ownership.field`** names the user field the server fills with the signed-in member on create. It can never be in `create.fields` or `update.fields`. +- **`create`** adds `POST /` and lists what a member may send. `status: "published"` makes a new article live at once; the default, `"draft"`, keeps it private until staff publish it. +- **`update`** adds `GET /{id}/edit` and `PATCH /{id}`, and a `can_edit` moderator permission. +- **`editorial`** adds a `version` number to every article, so an edit form can tell when someone else saved first. It also keeps a [revision history](/docs/content-engine/editorial). -The example plugin's finished definition adds more on top: a `board` [container field](#containers) members pick on create, `people: ["author"]` and search options for the [discussion list](/docs/content-engine/public-lists), and `reports: true` for the [Report button](/docs/content-engine/reports). - - - - - -### Create the model - -Create `src/database/discussions.ts` and export the table so it reaches a migration: - -```ts title="plugins/example/src/database/discussions.ts" -import { createContentModel } from "@vitnode/core/content/server"; - -import { discussionContentType } from "@/content/discussion"; - -export const discussionContent = createContentModel(discussionContentType); - -export const example_discussions = discussionContent.table; -``` - - - - - -### Register the public module - -Add the model to `buildContentPublicModule` in your API plugin. The module mounts the read routes and, because of `publicWrite`, the write routes: - -```ts title="plugins/example/src/config.api.ts" -import { discussionContent } from "@/database/discussions"; // [!code ++] - -export const exampleApiPlugin = () => - buildApiPlugin({ - manifest, - modules: [ - adminModule, - buildContentPublicModule({ - contentTypes: [articleContent, discussionContent], // [!code highlight] - }), - ], - }); -``` - -The example plugin also adds `discussionContent` to its `admin` module and its AdminCP navigation, so staff can manage every discussion. That part is the same as in [Create a content type](/docs/content-engine/create-a-content-type#add-the-staff-api-routes). - - - - - -### Label the permissions - -A content type with `publicWrite.update` gets a `can_edit` **moderator** permission next to its usual admin permissions. Both share one label key: - -```json title="plugins/example/src/locales/en.json" -{ - "@vitnode/example:discussion": "Discussions", - "@vitnode/example:discussion:can_view": "View discussions", - "@vitnode/example:discussion:can_create": "Create discussions", - "@vitnode/example:discussion:can_edit": "Edit discussions", - "@vitnode/example:discussion:can_delete": "Delete discussions", - "@vitnode/example:discussion:can_publish": "Publish and unpublish discussions", - "@vitnode/example:discussion:can_restore": "Restore an earlier version of a discussion", - "@vitnode/example:discussion:can_hide": "Hide and unhide discussions" -} -``` +The moderator permission shares the `newsroom:article:can_edit` label you added in [First content type](/docs/content-engine/create-a-content-type#add-the-labels), so there is nothing new to translate. @@ -175,7 +87,7 @@ A content type with `publicWrite.update` gets a `can_edit` **moderator** permiss ### Migrate -Run this from the workspace root while `pnpm dev` is running: +Run this from the workspace root while `pnpm dev` is running, or after `pnpm build:plugins`: @@ -193,43 +105,65 @@ npm run db:migrate -The migration creates `example_discussions` with an `author` column that references `core_users`. [Database](/docs/content-engine/database) covers migrations in detail. +The migration adds two columns. Articles staff already wrote keep an empty `author`, so only moderators can edit them from the site: + +```sql title="apps/api/migrations/_/migration.sql (excerpt)" +ALTER TABLE "newsroom_articles" ADD COLUMN "version" integer DEFAULT 1 NOT NULL; +ALTER TABLE "newsroom_articles" ADD COLUMN "author" integer; +``` -## Ownership +## Check the result -Every publicly written record has exactly one owner, and only the server sets it. On create, the routes take the user from the session and write it into `ownership.field` after validating the payload. The field can never appear in `create.fields` or `update.fields`, and a payload that sends it gets the `not_writable` issue above. +Sign in on the site, copy the value of your `vitnode_auth` cookie from the browser's developer tools, and create an article: -The owner never changes through the public routes, not even when a moderator edits the record. If the owner's account is deleted, the field becomes empty and nobody owns the record, so only moderators can edit it. +```bash +curl -i -X POST http://localhost:3000/api/newsroom/content/news \ + -b "vitnode_auth=" \ + -H "Content-Type: application/json" \ + -d '{"values":{"title":"Our community garden","body":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"We planted tomatoes this week."}]}]}}}' +``` -That is why `ownership` is required and not configurable. A client that could choose the owner could write as somebody else or take over their records. +```json title="201" +{ + "approval": null, + "id": 18, + "publishedAt": "2026-10-23T19:22:31.230Z", + "slug": "our-community-garden", + "status": "published", + "values": { + "title": "Our community garden", + "body": { "type": "doc", "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "We planted tomatoes this week." }] }] } + }, + "version": 2 +} +``` -## Permissions +`values` holds exactly the writable fields, and `version` is `2` because the create and the publish each count. Now try what the server refuses: -Creating needs a signed-in user and nothing else. Editing is allowed for two kinds of people: +| Request | Answer | +| --- | --- | +| The same `POST` without the cookie | `401` with `"code": "CONTENT_UNAUTHENTICATED"` | +| `"title": "Hi"` and `"author": 1` in `values` | `400` with a `too_small` issue on `title` and a `not_writable` issue on `author` | +| The title of an article that exists | `409` with `"code": "CONTENT_UNIQUE_CONFLICT"`, because its slug is taken | -- **The owner**, while `update.own` is `true` (the default) and the record is not [hidden](/docs/content-engine/content-visibility). A record a moderator hid is the moderator's to restore, not the author's to keep editing. Set `update.own: false` to let only moderators edit. -- **Moderators** who hold the content type's `can_edit` moderator permission, directly or through a role. In a container collection with [publishing policies](/docs/content-engine/container-policies), `can_edit` is [scoped to containers](/docs/dev/moderation/scoped-permissions#container-scoped-permissions), and the policy can also limit how long the owner may edit. +The [Write API](/docs/content-engine/public-write-api) lists every route, body and error. Next, give members a form with [Create form](/docs/content-engine/public-write-frontend). -To make someone a discussion moderator: +## Ownership + +Every member-written record has exactly one owner, and only the server sets it. On create, the routes take the user from the session and write it into `ownership.field` after validating the payload. The owner never changes through the public routes, not even when a moderator edits the record. If the owner's account is deleted, the field becomes empty and only moderators can edit the record. -1. Open **AdminCP → Staff → Moderators** and click **Add Moderator**. -2. Pick a **Role** or a **User** and click **Add member**. The permission editor opens. -3. Choose **Restricted**, turn on **Edit discussions** under the example plugin, and click **Save changes**. +## Who may edit - +Creating needs a signed-in member. Editing is allowed for: -A moderator entry set to **Unrestricted**, and every root role, holds all moderator permissions, including this one. +- **The owner**, while `update.own` is `true` (the default) and the record is not [hidden](/docs/content-engine/content-visibility). Set `update.own: false` to let only moderators edit. +- **Moderators** who hold the content type's `can_edit` moderator permission. Give it in **AdminCP → Staff → Moderators**: add a role or a user, choose **Restricted**, and turn on **Edit articles** under Newsroom. A root role and an **Unrestricted** moderator entry hold every moderator permission. -Being staff is not enough on its own. The admin `can_edit` permission only opens the AdminCP routes, and an AdminCP session never adds powers on the public site. The public routes always act as the user's normal session. Moderators edit with the same forms and routes as members, so you build one edit page instead of two. +The admin `can_edit` permission only opens the AdminCP routes, and an AdminCP session never adds powers on the public site. Moderators edit with the same forms as members. [Permissions](/docs/content-engine/public-permissions) shows how a page asks who may edit. ## Security @@ -256,12 +190,12 @@ export const vitNodeApiConfig = buildApiConfig({ }); ``` -## Events, search and revisions +## Side effects Public writes trigger the same side effects as AdminCP writes, so nothing new needs wiring: - [Events](/docs/content-engine/events): `created` on create, then `published` when the record goes live, and `updated` with `changedFields` on an edit that changed something. There are no separate public-write events. A record waiting for [approval](/docs/content-engine/approvals) emits `published` or `updated` when a moderator approves it, plus the `content.approval.*` events. -- [Search](/docs/content-engine/search) is synced after the transaction commits, so a discussion published on create is searchable straight away. +- The Content Engine syncs [Search](/docs/content-engine/search) after the transaction commits, so an article published on create is searchable straight away. - On an [editorial](/docs/content-engine/editorial#revisions) content type, each create and edit stores a revision attributed to the signed-in user, and staff can restore it from the AdminCP. ## Containers @@ -270,84 +204,4 @@ A content type organized into [containers](/docs/content-engine/containers), suc ### Container policies -Whether a new record starts as a draft or goes live is decided on the server, never by the payload. Without container policies, it is `create.status`. When the record's container collection has [publishing policies](/docs/content-engine/container-policies), the container decides instead: who may create, whether new records and edits wait for a moderator, and how long the owner may edit. A new record that waits answers with `status: "draft"`, and every response carries an `approval` object, described in [Approvals](/docs/content-engine/approvals). - -Next, build the pages members use: a [create form](/docs/content-engine/public-write-frontend) and an [edit form](/docs/content-engine/public-write-edit) with its Edit button. - -## Check the result - -Sign in on the site, copy the value of your `vitnode_auth` cookie from the browser's developer tools, and create a discussion. Against the example plugin itself, whose discussions live in boards, also send `"board": 1` in `values`: - -```bash -curl -i -X POST http://localhost:3000/api/@vitnode/example/content/discussions \ - -b "vitnode_auth=" \ - -H "Content-Type: application/json" \ - -d '{"values":{"title":"How do I add a widget zone?","body":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"I want one under my article."}]}]}}}' -``` - -The API answers `201` with the new record. `version` is `2` because the create and the publish are each a version: - -```json title="201" -{ - "id": 1, - "slug": "how-do-i-add-a-widget-zone", - "status": "published", - "publishedAt": "2026-10-13T09:12:44.512Z", - "version": 2, - "values": { - "title": "How do I add a widget zone?", - "body": { - "type": "doc", - "content": [ - { - "type": "paragraph", - "content": [ - { "type": "text", "text": "I want one under my article." } - ] - } - ] - } - } -} -``` - -Now try to claim someone else's name. Send a short title and an `author`: - -```bash -curl -i -X POST http://localhost:3000/api/@vitnode/example/content/discussions \ - -b "vitnode_auth=" \ - -H "Content-Type: application/json" \ - -d '{"values":{"title":"Hi","author":2,"body":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Nice try."}]}]}}}' -``` - -Nothing is written, and each problem names its field: - -```json title="400" -{ - "code": "CONTENT_INVALID_INPUT", - "contentTypeId": "example.discussion", - "issues": [ - { - "code": "too_small", - "field": "title", - "message": "Too small: expected string to have >=3 characters" - }, - { - "code": "not_writable", - "field": "author", - "message": "This field cannot be written." - } - ] -} -``` - -Without the cookie, every write route answers `401` with `"code": "CONTENT_UNAUTHENTICATED"` before it reads the body. Validation failures are `400`, the status every VitNode input error uses, not `422`. - -Members' discussions show up in **AdminCP → Example → Discussions** like any other record, with their author filled in by the server: - - +The server decides whether a new record starts as a draft or goes live. The payload never does. Without container policies, `create.status` decides. When the record's container collection has [publishing policies](/docs/content-engine/container-policies), the container decides instead: who may create, whether new records and edits wait for a moderator, and how long the owner may edit. A new record that waits answers with `status: "draft"` and a pending `approval` object, described in [Approvals](/docs/content-engine/approvals). Without container policies, `create.status: "draft"` stores a plain draft, `status: "draft"` with `approval: null`, and no moderator is asked to review it. diff --git a/apps/web/content/docs/content-engine/publication.mdx b/apps/web/content/docs/content-engine/publication.mdx index 996c536270..77821fb8a3 100644 --- a/apps/web/content/docs/content-engine/publication.mdx +++ b/apps/web/content/docs/content-engine/publication.mdx @@ -1,5 +1,5 @@ --- -title: Publication +title: Drafts & publishing description: Give a VitNode Content Engine content type drafts and a Publish button with the publication option, so nothing reaches readers until an editor publishes it. icon: Send implementation: @@ -13,8 +13,8 @@ implementation: related: - title: Public API href: /docs/content-engine/public-api - - title: Editorial - href: /docs/content-engine/editorial + - title: Scheduling + href: /docs/content-engine/editorial-scheduling --- import { Tab, Tabs } from "fumadocs-ui/components/tabs"; @@ -23,39 +23,64 @@ import { ImgDocs } from "@/components/fumadocs/img"; import publishConfirm from "./public-api-publish-confirm.webp"; import publishRow from "./public-api-publish-row.webp"; -`publication` gives every record two states: **Draft** and **Published**. Drafts stay private, and only staff with the publish permission can make a record public. Turn it on before anything else on the public side, because the [public API](/docs/content-engine/public-api) only ever returns published records. +`publication` gives every record two states, **Draft** and **Published**. Drafts stay private, and only staff with the publish permission make a record public. Turn it on before anything reaches readers, because the [public API](/docs/content-engine/public-api) only ever returns published records. + +This continues the `newsroom.article` type from [First content type](/docs/content-engine/create-a-content-type). -### Turn it on +### Turn on publication -Add one line to the definition: +Edit `src/content/article.ts`. Add `publication` and show the state in the list: -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/article.ts" export const articleContentType = defineContentType({ - id: "example.article", - tableName: "example_articles", + id: "newsroom.article", + tableName: "newsroom_articles", + fields: { - title: field.text({ required: true }), + title: field.text({ required: true, minLength: 3, maxLength: 200 }), slug: field.slug({ source: "title" }), + body: field.richText({ required: true }), }, + publication: true, // [!code ++] + + admin: { + path: "newsroom/articles", + titleField: "title", + list: { + columns: ["status", "title", "slug", "updatedAt"], // [!code highlight] + orderableFields: ["title"], + }, + }, }); ``` -This adds a `status` column (`draft` or `published`), a `publishedAt` date, a `can_publish` permission and **Publish** and **Unpublish** buttons in the AdminCP. +This adds a `status` column (`draft` or `published`), a `publishedAt` date, a `can_publish` staff permission, and **Publish** and **Unpublish** actions in the AdminCP. -### Name the permission +### Label the new permission and column + +Add two keys to `src/locales/en.json`. This excerpt shows only the new keys, in their place: -```json title="plugins/example/src/locales/en.json" +```json title="plugins/newsroom/src/locales/en.json" { - "@vitnode/example:article:can_publish": "Publish and unpublish articles" + "newsroom": { + "content": { + "article": { + "fields": { + "status": "Status" + } + } + } + }, + "newsroom:article:can_publish": "Publish and unpublish articles" } ``` @@ -65,7 +90,7 @@ This adds a `status` column (`draft` or `published`), a `publishedAt` date, a `c ### Migrate -Run this from the workspace root while `pnpm dev` is running: +Run this from the workspace root while `pnpm dev` is running, or after `pnpm build:plugins`: @@ -83,38 +108,46 @@ npm run db:migrate -Existing rows become drafts. `pnpm dev` picks up the new option by itself. +The migration adds `status`, with `draft` as its default, and `publishedAt`. Both articles you already created are now drafts. - - -## What a reader sees - -| The record is | The public API answers | -| -------------------------- | --------------------------------- | -| A draft | `404`, like a slug that never existed | -| Published with a future `publishedAt` | `404` until that moment | -| Published | The record | - -The API never says whether a draft exists. To publish later on a schedule, or to share a draft with someone before it goes live, add [`editorial`](/docs/content-engine/editorial). + -## Check the result +### Publish an article -Open **AdminCP → Example → Articles**. New articles show a **Draft** badge. Click the paper plane **Publish** button at the end of a row: +Open **AdminCP → Newsroom → Articles**. Both rows show **Draft**. Click the paper plane button in the `Welcome to the newsroom` row: -Confirm with **Yes, publish it**, and the badge turns into **Published**. The create dialog also gets **Save as draft** and **Publish** buttons, and [bulk actions](/docs/content-engine/admincp#bulk-actions) publish many rows at once. +Confirm with **Yes, publish it**: + +Leave `Release notes for October` as a draft. The next tutorial checks that readers cannot see it. + + + + + +## Check the result + +The list shows **Published** for one article and **Draft** for the other, and a **Status** filter appears above it. The create dialog now has **Save as draft** and **Publish** buttons, and [bulk actions](/docs/content-engine/admincp#bulk-actions) publish many rows at once. + +| The record is | Readers get | +| --- | --- | +| A draft | Nothing. The public API answers `404`, the same as a slug that never existed | +| Published with a future `publishedAt` | `404` until that moment | +| Published | The record | + +To publish on a schedule, or share a draft before it goes live, see [Scheduling](/docs/content-engine/editorial-scheduling) and [Previews](/docs/content-engine/editorial-previews). + +Next, let readers fetch published articles with the [Public API](/docs/content-engine/public-api). diff --git a/apps/web/content/docs/content-engine/reference.mdx b/apps/web/content/docs/content-engine/reference.mdx index 6e9345e4a9..2baca75c4b 100644 --- a/apps/web/content/docs/content-engine/reference.mdx +++ b/apps/web/content/docs/content-engine/reference.mdx @@ -8,14 +8,14 @@ icon: BookOpen ## Minimal example -This is `example.article` from the example plugin, trimmed to the options most content types start with: +This is `newsroom.story` from the newsroom plugin, trimmed to the options most content types start with: -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts" import { defineContentType, field } from '@vitnode/core/content' -export const articleContentType = defineContentType({ - id: 'example.article', - tableName: 'example_articles', +export const storyContentType = defineContentType({ + id: 'newsroom.story', + tableName: 'newsroom_stories', fields: { title: field.text({ required: true, minLength: 3, maxLength: 200 }), slug: field.slug({ source: 'title' }), @@ -23,11 +23,11 @@ export const articleContentType = defineContentType({ }, publication: true, publicApi: { - path: 'articles', + path: 'stories', fields: ['title', 'slug', 'excerpt', 'publishedAt'], }, admin: { - path: 'example/articles', + path: 'newsroom/stories', titleField: 'title', }, }) @@ -43,7 +43,7 @@ Validation happens in two places, and both stop the app from starting: Every message starts with `[Content Engine] :` and names the option at fault: ```txt -[Content Engine] example.article: publicApi needs `publication: true`. A public API without a draft state would put every row on the internet the moment it is created. +[Content Engine] newsroom.story: publicApi needs `publication: true`. A public API without a draft state would put every row on the internet the moment it is created. ``` Many of these rules are type errors too, so your editor often complains before the app does. @@ -52,8 +52,8 @@ Many of these rules are type errors too, so your editor often complains before t | Name | Type | Required | Default | Description | | -------------- | --------------------------------------- | -------- | ---------- | --------------------------------------------------------------------------------- | -| `id` | `string` | Yes | | `plugin.entity`, such as `example.article`. See [Names](#names) | -| `tableName` | `string` | Yes | | Postgres table name, such as `example_articles` | +| `id` | `string` | Yes | | `plugin.entity`, such as `newsroom.story`. See [Names](#names) | +| `tableName` | `string` | Yes | | Postgres table name, such as `newsroom_stories` | | `fields` | `Record` | Yes | | At least one field built with a [`field.*` helper](/docs/content-engine/fields) | | `idStrategy` | `"serial"` \| `"uuid"` \| `"bigint"` | No | `"serial"` | Type of the primary key. See [`idStrategy`](#idstrategy) | | `admin` | [`admin`](#admin) | No | `{}` | AdminCP path, list, form and title | @@ -86,8 +86,8 @@ A feature block is on when it is present. `publicApi`, `publicWrite`, `localizat Two names are derived from the id: -- The **entity key** is the id without its first segment, with further dots turned into `_`. `example.article` becomes `article`. Strings live under `{pluginId}.content.{entityKey}`, for example `@vitnode/example.content.article`. -- The **permission module** is the entity key with anything outside `a-z0-9` turned into `_`, so `example.localized-article` becomes `localized_article`. Permissions are named `@vitnode/example:article:can_view`. Override it with `admin.permissionModule`. +- The **entity key** is the id without its first segment, with further dots turned into `_`. `newsroom.story` becomes `story`. Strings live under `{pluginId}.content.{entityKey}`, for example `newsroom.content.story`. +- The **permission module** is the entity key with anything outside `a-z0-9` turned into `_`, so an id such as `newsroom.breaking-story` gets `breaking_story`. Permissions are named `newsroom:story:can_view`. Override it with `admin.permissionModule`. Every content type gets `can_view`, `can_create`, `can_edit` and `can_delete`. `publication` adds `can_publish`, `editorial` adds `can_restore` and `visibility` adds `can_hide`. Duplicating needs `can_create` and `can_view`, so `duplication` adds no permission. @@ -97,7 +97,7 @@ Controls the generated AdminCP screens. Guide: [Customize the AdminCP](/docs/con | Name | Type | Default | Description | | ----------------------- | -------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `path` | `string` | The id with dots as slashes (`example/article`) | Screen URL under `/admin/content/`. Lowercase segments of letters, digits and dashes, starting with a letter, joined by `/`. The last segment cannot be `create` or `edit` | +| `path` | `string` | The id with dots as slashes (`newsroom/story`) | Screen URL under `/admin/content/`. Lowercase segments of letters, digits and dashes, starting with a letter, joined by `/`. The last segment cannot be `create` or `edit` | | `permissionModule` | `string` | Derived from the id, see [Names](#names) | Middle part of the permission names. snake_case | | `titleField` | field name \| `null` | First shared text or textarea field, then first localized one | Names a record in headings, pickers and toasts. A localized field is shown in the reader's language. `null` means no title | | `colorField` | field name \| `null` | `null` | A shared field holding a color, shown as a swatch beside the title | @@ -136,7 +136,7 @@ admin: { Publication on its own never makes anything public. Only [`publicApi`](#publicapi) does. Guide: [Publish content with a public API](/docs/content-engine/public-api). -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts" publication: true, ``` @@ -165,14 +165,14 @@ What `fields` accepts: `people` is the explicit opt-in for a user. Each named field comes back under its own name as `{ id, name, nameCode, avatarColor, avatarUrl, role: { color, prefix } }`, or `null` when nobody is set or the account was deleted. A `multiple: true` field comes back as a list of those summaries in the order it stores them, skipping deleted accounts - handy for co-authors. The summaries for a whole page are loaded in one query. `people` refuses a field that is not a `field.user()`, a localized user field, and a name listed twice. -`listFields` keeps a public list light: leave a long `body` or a gallery to the detail route, and the list neither selects nor loads them. The list route's OpenAPI schema and the `ContentPublicListRow` type carry exactly these fields, so a field you left out is a compile error rather than a surprise `undefined`. `people` and, on a localized content type, `locale` are always included. [Public lists](/docs/content-engine/public-lists) shows `listFields` on the blog. +`listFields` keeps a public list light: leave a long `body` or a gallery to the detail route, and the list neither selects nor loads them. The list route's OpenAPI schema and the `ContentPublicListRow` type carry exactly these fields, so a field you left out is a compile error rather than a surprise `undefined`. `people` and, on a localized content type, `locale` are always included. [Content list](/docs/content-engine/public-lists) shows `listFields` on the blog. `searchableFields`, `filterableFields` and `orderableFields` must all be in `fields`. Repeatable leaves fit none of them. `orderableFields` also refuses file fields, to-many relations and localized fields. -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts" publicApi: { - path: "articles", - fields: ["title", "slug", "excerpt", "featured", "category", "noIndex", "publishedAt"], + path: "stories", + fields: ["title", "slug", "excerpt", "featured", "category", "animation", "gallery", "noIndex", "publishedAt"], searchableFields: ["title", "excerpt"], orderableFields: ["publishedAt", "title"], filterableFields: ["category", "featured"], @@ -181,21 +181,21 @@ publicApi: { ## `publicWrite` -Adds create and edit routes for signed-in users beside the `publicApi` routes, with an owner stamped by the server and a `can_edit` moderator permission. Guide: [Public write](/docs/content-engine/public-write). Every option, route and error: [Public write API](/docs/content-engine/public-write-api). +Adds create and edit routes for signed-in users beside the `publicApi` routes, with an owner stamped by the server and a `can_edit` moderator permission. Guide: [Member writing](/docs/content-engine/public-write). Every option, route and error: [Write API](/docs/content-engine/public-write-api). -```ts title="plugins/example/src/content/discussion.ts" +```ts title="plugins/newsroom/src/content/letter.ts" publicWrite: { ownership: { field: "author" }, - create: { fields: ["title", "body", "board"], status: "published" }, + create: { fields: ["title", "body", "desk"], status: "published" }, update: { fields: ["title", "body"] }, }, ``` -A [container field](/docs/content-engine/fields#container), such as `board`, may be in `create.fields` only. Moving a record to another container is a staff edit. +A [container field](/docs/content-engine/fields#container), such as `desk`, may be in `create.fields` only. Moving a record to another container is a staff edit. ## `delivery` -Gives each published record a public page: canonical URL, SEO metadata, redirects from old slugs and a sitemap. Guides: [Public pages](/docs/content-engine/public-pages) and [SEO](/docs/content-engine/seo). +Gives each published record a public page: canonical URL, SEO metadata, redirects from old slugs and a sitemap. Guides: [Content page](/docs/content-engine/public-pages) and [SEO](/docs/content-engine/seo). | Name | Type | Default | Description | | -------------------------------- | --------------------------------------------------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------- | @@ -215,7 +215,7 @@ Gives each published record a public page: canonical URL, SEO metadata, redirect Every SEO field must be in `publicApi.fields`, may be a group leaf such as `"seo.title"`, and cannot be a repeatable leaf. `noIndexField` must be shared, not localized. -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts" delivery: { redirects: true, seo: { @@ -230,17 +230,17 @@ delivery: { ## `editorial` -Adds a `version` column, revision history and the `can_restore` permission. [`liveEditing`](#liveediting) builds on it. Guide: [Revisions, previews and scheduling](/docs/content-engine/editorial). +Adds a `version` column, revision history and the `can_restore` permission. [`liveEditing`](#liveediting) builds on it. Guides: [Revisions](/docs/content-engine/editorial), [Previews](/docs/content-engine/editorial-previews) and [Scheduling](/docs/content-engine/editorial-scheduling). | Name | Type | Default | Description | | -------------------------- | ---------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------- | | `revisions.retention` | `number` | `50` | Newest revisions kept per record. A whole number from 1 to 500 | -| `preview` | `true` \| `{ expiresInMinutes, pathTemplate }` | off | Signed [preview links](/docs/content-engine/editorial#preview-links) for drafts | +| `preview` | `true` \| `{ expiresInMinutes, pathTemplate }` | off | Signed [preview links](/docs/content-engine/editorial-previews) for drafts | | `preview.expiresInMinutes` | `number` | `15` | Link lifetime. A whole number from 1 to 1440 | | `preview.pathTemplate` | `string` | | Your own preview URL. Starts with `/`, contains `{token}` exactly once and no other placeholder, at most 512 characters | | `scheduling` | `boolean` | off | Publish or unpublish at a chosen time | -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts" editorial: { revisions: { retention: 20 }, preview: { expiresInMinutes: 30 }, @@ -259,7 +259,7 @@ Creates a `{tableName}_translations` table for fields marked `localized: true`. Only text, textarea, richText, slug, blocks and group fields can be localized. A localized slug needs a localized source field, and a shared slug needs a shared one. -```ts title="plugins/example/src/content/localized-article.ts" +```ts title="plugins/newsroom/src/content/bulletin.ts" localization: { defaultLocale: "en", fallback: "default", @@ -282,19 +282,19 @@ Keeps published records in the [site search index](/docs/dev/search). Drafts nev Every field except `authorField` must be in `publicApi.fields`, or a result snippet would leak a private value. Leave the language out of `pathTemplate`, because your [i18n settings](/docs/dev/i18n) add the locale prefix. -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts" search: { titleField: "title", descriptionField: "excerpt", contentFields: ["title", "excerpt"], - pathTemplate: "/articles/{slug}", + pathTemplate: "/stories/{slug}", authorField: "author", }, ``` ## `visibility` -`visibility: true` adds the nullable `hiddenAt` and `hiddenBy` columns, the `can_hide` permission, the `POST /{id}/hide` and `POST /{id}/unhide` staff routes and a **Visibility** filter in the AdminCP list. A hidden record is left out of every public read while it keeps its `status` and `publishedAt`. It has no other options. Guide: [Hide content](/docs/content-engine/content-visibility). +`visibility: true` adds the nullable `hiddenAt` and `hiddenBy` columns, the `can_hide` permission, the `POST /{id}/hide` and `POST /{id}/unhide` staff routes and a **Visibility** filter in the AdminCP list. A hidden record is left out of every public read while it keeps its `status` and `publishedAt`. It has no other options. Guide: [Visibility](/docs/content-engine/content-visibility). ```ts title="plugins/blog/src/content/post.ts" publication: true, @@ -312,7 +312,7 @@ reports: true, ## `thread` -Makes records of one content type answer each other under a root record, like forum comments under a topic. It adds the public `GET /{path}/thread` route and checks every placement on the server. Guide: [Threaded replies](/docs/content-engine/threads). +Makes records of one content type answer each other under a root record, like forum comments under a topic. It adds the public `GET /{path}/thread` route and checks every placement on the server. Guide: [Comments](/docs/content-engine/threads). ```ts title="plugins/forum/src/content/comment.ts" thread: { parent: "parent", root: "topic", maxDepth: 6 }, @@ -339,7 +339,7 @@ Both fields must be in `publicApi.fields` and neither may be in `publicWrite.upd ## `duplication` -Adds a **Duplicate** action and the `POST /{id}/duplicate` staff route, which copy a record and its translations into a new draft. Pass `true`, or an object to change the title suffix. Guide: [Duplicate content](/docs/content-engine/duplicate-content). +Adds a **Duplicate** action and the `POST /{id}/duplicate` staff route, which copy a record and its translations into a new draft. Pass `true`, or an object to change the title suffix. Guide: [Duplication](/docs/content-engine/duplicate-content). | Name | Type | Default | Description | | ------------- | --------- | ---------------------------------------------- | --------------------------------------------------------------------------------------- | @@ -351,7 +351,7 @@ duplication: true, ## `idStrategy` -The type of the primary key. Every foreign key, junction column and translation `itemId` that points at the record takes the same type. Guide: [Record ID strategies](/docs/content-engine/id-strategy). +The type of the primary key. Every foreign key, junction column and translation `itemId` that points at the record takes the same type. Guide: [Record IDs](/docs/content-engine/id-strategy). | Value | Postgres key | In JSON | | -------------------- | ----------------------------------------- | ------------------ | @@ -361,7 +361,7 @@ The type of the primary key. Every foreign key, junction column and translation Any other value throws. Changing the strategy of a content type that already has records needs a [hand-written data migration](/docs/content-engine/id-strategy#change-the-strategy-later). -```ts title="plugins/example/src/content/event.ts" +```ts title="plugins/newsroom/src/content/event.ts" idStrategy: "bigint", ``` @@ -377,7 +377,7 @@ Extra database indexes on the base table. The engine already indexes slugs, `uni `on` accepts shared fields, group leaves such as `"syndication.priority"`, and system columns (`id`, `createdAt`, `updatedAt`, plus `status`, `publishedAt` and `version` when their feature is on). It refuses localized fields, `field.blocks()`, repeatable leaves, to-many relations and file collections, and whole groups. Two indexes on the same columns throw. -```ts title="plugins/example/src/content/advanced-article.ts" +```ts title="plugins/newsroom/src/content/explainer.ts" indexes: [{ on: ["syndication.priority"] }], ``` @@ -385,8 +385,12 @@ indexes: [{ on: ["syndication.priority"] }], `liveEditing: true` lets several editors work on one record at once in the AdminCP edit form: field locks, an autosaved shared draft, presence and rich text co-editing. It needs `editorial`, because locks and drafts are measured against the record version. It adds the `/{id}/locks` and `/{id}/draft` staff routes. Guide: [Live editing](/docs/content-engine/live-editing). -```ts title="plugins/example/src/content/article.ts" -editorial: { revisions: { retention: 20 } }, +```ts title="plugins/newsroom/src/content/story.ts" +editorial: { + revisions: { retention: 20 }, + preview: { expiresInMinutes: 30 }, + scheduling: true, +}, liveEditing: true, ``` diff --git a/apps/web/content/docs/content-engine/relations-advanced-article-page.webp b/apps/web/content/docs/content-engine/relations-advanced-article-page.webp index db5f5e3eca7c8f43350cdb8be43cbdfdd4e240f6..927601498466ee9e74d40fbe198b10d002c06530 100644 GIT binary patch literal 32874 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 o>lfPzhTs4I000000000000000000000000000000000000Ltpu9smFU literal 28128 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 fVBM|R?5MgNvYI7;00000000000000000000GyYxa diff --git a/apps/web/content/docs/content-engine/relations-advanced.mdx b/apps/web/content/docs/content-engine/relations-advanced.mdx new file mode 100644 index 0000000000..bd62382b06 --- /dev/null +++ b/apps/web/content/docs/content-engine/relations-advanced.mdx @@ -0,0 +1,224 @@ +--- +title: Advanced fields +description: Store to-many relations, grouped fields and repeatable rows in real VitNode Content Engine tables, link records across id strategies, and write those values through the API. +icon: Network +--- + +import { ImgDocs } from "@/components/fumadocs/img"; +import advancedPage from "./relations-advanced-article-page.webp"; +import manyPicker from "./relations-many-picker.webp"; + +[Relations](/docs/content-engine/relations) links one record to one other record. This page covers the shapes that need more than one column: lists of links, groups of fields and repeatable rows. Each one still lands in real Postgres tables, not a JSON blob. + +The examples are excerpts of `newsroom.explainer` in the newsroom plugin, `plugins/newsroom/src/content/explainer.ts`, which uses all of them. Its targets, `newsroom.category` and `newsroom.tag`, live next to it. + +## Link to many records + +Add `multiple: true` to a relation. The explainer has a set of categories, an ordered list of tags, and an ordered "read next" list that points back at explainers: + +```ts title="plugins/newsroom/src/content/explainer.ts (excerpt)" +categories: field.relation({ + multiple: true, + onDelete: "restrict", + target: () => categoryContentType, +}), +tags: field.relation({ + multiple: true, + ordered: true, + target: () => tagContentType, +}), +relatedExplainers: field.relation({ + multiple: true, + onDelete: "cascade", + ordered: true, + self: true, +}), +``` + +- `ordered: true` keeps the order editors arrange. Without it, the engine stores the set in ascending id order, so `[9, 2]` and `[2, 9]` are the same value. +- On a to-many relation, `onDelete: "cascade"` drops the link when the target is deleted, and `"restrict"` refuses the delete. +- A to-many relation cannot be `required` or `nullable`. Use `min: 1` to demand at least one target. + +Each to-many field gets a junction table with `itemId`, `relatedItemId`, `position` and `createdAt`. Give every one except the `self: true` relation a `references` entry, and export every junction table, or Drizzle Kit leaves it out of the migration: + +```ts title="plugins/newsroom/src/database/explainers.ts (excerpt)" +export const explainerContent = createContentModel(explainerContentType, { + references: { + categories: () => newsroom_categories.id, + tags: () => newsroom_tags.id, + }, +}); + +export const newsroom_explainers = explainerContent.table; +export const newsroom_explainers_categories = + explainerContent.advancedTables.junctions.categories; +export const newsroom_explainers_tags = + explainerContent.advancedTables.junctions.tags; +export const newsroom_explainers_related_explainers = + explainerContent.advancedTables.junctions.relatedExplainers; +``` + +In the AdminCP form, a to-many relation shows each target as a chip you can remove. This is the blog plugin's **Categories** field: + + + +## Group related fields + +`field.group` keeps fields that belong together under one key: + +```ts title="plugins/newsroom/src/content/explainer.ts (excerpt)" +syndication: field.group({ + fields: { + indexable: field.boolean({ defaultValue: true }), + + noIndex: field.boolean({ defaultValue: false }), + priority: field.number({ + integer: true, + min: 0, + max: 10, + defaultValue: 5, + }), + }, +}), +``` + +A group adds one column per leaf to the main table: `syndicationIndexable`, `syndicationNoIndex` and `syndicationPriority`. The API reads and writes it as `{ syndication: { indexable, noIndex, priority } }`, and other options refer to a leaf by path, such as `indexes: [{ on: ["syndication.priority"] }]`. Leaves can be `text`, `textarea`, `number`, `boolean`, `enum` or `dateTime` fields. An optional group needs leaves that are nullable or have a default. In the AdminCP, a group renders as a fieldset with its leaf controls. + +## Add repeatable rows + +`field.repeatable` stores an ordered list of small rows, such as FAQ entries: + +```ts title="plugins/newsroom/src/content/explainer.ts (excerpt)" +faq: field.repeatable({ + max: 20, + fields: { + question: field.text({ required: true, minLength: 3, maxLength: 200 }), + answer: field.textarea({ required: true }), + }, +}), +``` + +The rows go to a child table, `newsroom_explainers_faq`, with `id`, `itemId`, `position`, `createdAt`, `updatedAt` and one column per leaf. Deleting the explainer deletes its rows. Export the child table too: + +```ts title="plugins/newsroom/src/database/explainers.ts (excerpt)" +export const newsroom_explainers_faq = + explainerContent.advancedTables.repeatables.faq; +``` + +In the AdminCP, a repeatable is a list of rows with move up, move down and remove buttons, plus an **Add** button. + +After adding any of these fields, build and migrate as in [Relations](/docs/content-engine/relations#build-and-migrate). The migration creates one table per junction and repeatable field. + +## Relations across id strategies + +A relation can point at a content type with a different [`idStrategy`](/docs/content-engine/id-strategy). The foreign key always takes the type of the key it references. The newsroom plugin's `newsroom.event` uses `bigint` and links to `uuid` tags and `serial` categories: + +```ts title="plugins/newsroom/src/content/event.ts (excerpt)" +import type { ContentRelationTarget } from "@vitnode/core/content"; + +import { defineContentType, field } from "@vitnode/core/content"; + +import { categoryContentType } from "./category"; +import { tagContentType } from "./tag"; + +fields: { + primaryTag: field.relation({ + nullable: true, + onDelete: "set null", + target: (): ContentRelationTarget<"uuid"> => tagContentType, + }), + category: field.relation({ + nullable: true, + onDelete: "set null", + target: () => categoryContentType, + }), + tags: field.relation({ + multiple: true, + ordered: true, + target: () => tagContentType, + }), + relatedEvents: field.relation({ + multiple: true, + onDelete: "cascade", + self: true, + }), +}, +``` + +| Field | Column or junction table | +| --------------- | -------------------------------------------------------------------- | +| `primaryTag` | `uuid` column referencing `newsroom_tags.id` | +| `category` | `integer` column referencing `newsroom_categories.id` | +| `tags` | `newsroom_events_tags` with `itemId bigint` and `relatedItemId uuid` | +| `relatedEvents` | `newsroom_events_related_events` with both columns `bigint` | + +`field.relation()` reads the target's strategy from `target`, so the API takes and returns tag ids as strings and category ids as numbers. When two content type modules import each other, TypeScript cannot infer a type through the cycle and falls back to serial. Annotate the thunk with `ContentRelationTarget<"uuid">` or `ContentRelationTarget<"bigint">`, as `primaryTag` does. At runtime, a `references` entry whose column type disagrees with the target's strategy throws and names the field. + +## Write related values + +A relation takes ids. A to-many relation and a repeatable take the whole list, which replaces what the record had: + +```json +{ + "categories": [2, 4], + "syndication": { "priority": 7 }, + "faq": [ + { + "id": 1, + "question": "When does construction start?", + "answer": "In spring, once the council signs the contracts." + }, + { "question": "Will the old bus route stay?", "answer": "Yes, until the trams run on the whole line." } + ] +} +``` + +The API updates a repeatable row that has an `id`, creates a row without one, and deletes the rows you leave out. The API refuses an `id` that belongs to another record with `CONTENT_REPEATABLE_UNKNOWN_CHILD`. To change one link or one row without sending the list, use the [content service](/docs/content-engine/services): `relations.categories.add()`, `.remove()`, `.set()`, `.reorder()` and `.get()`, or `repeatable.faq.create()`, `.update()`, `.delete()`, `.reorder()`, `.set()` and `.list()`. + +## Check the result + +The newsroom plugin gives the explainer API routes but no AdminCP screen, so check it through the API while `pnpm dev` runs. For a published explainer with the slug `how-the-tram-vote-works`, the public API returns the related values like this: + +```bash +curl "http://localhost:3000/api/newsroom/content/explainers/how-the-tram-vote-works?locale=en" +``` + +```json title="200 (excerpt)" +{ + "id": 1, + "title": "How the tram vote works", + "slug": "how-the-tram-vote-works", + "categories": [1], + "syndication": { "priority": 7, "noIndex": false }, + "faq": [ + { + "id": 1, + "question": "When does construction start?", + "answer": "In spring, once the council signs the contracts." + }, + { + "id": 2, + "question": "Will the old bus route stay?", + "answer": "Yes, until the trams run on the whole line." + } + ], + "publishedAt": "2026-10-24T17:39:32.786Z", + "locale": "en" +} +``` + +A to-many relation comes back as a list of ids, and a single relation as `{ "id": 2 }`. Only the leaves listed in `publicApi.fields`, such as `"faq.question"`, are public. The newsroom plugin's page at `/explainers/how-the-tram-vote-works` renders the FAQ rows: + + + +The [Fields](/docs/content-engine/fields#relation) reference lists every option of these helpers. diff --git a/apps/web/content/docs/content-engine/relations-articles-list.webp b/apps/web/content/docs/content-engine/relations-articles-list.webp new file mode 100644 index 0000000000000000000000000000000000000000..d14ba071e4aca9dd5613fc457840f96788b8de6e GIT binary patch literal 57356 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

  • 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 literal 95288 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ⅇ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 L{`a;2+w%Va!PkBF diff --git a/apps/web/content/docs/content-engine/production.mdx b/apps/web/content/docs/content-engine/production.mdx index 245751f7f8..cdf51d0d6b 100644 --- a/apps/web/content/docs/content-engine/production.mdx +++ b/apps/web/content/docs/content-engine/production.mdx @@ -15,11 +15,11 @@ A content type that works on your machine needs a few more checks before real ed - [ ] **Keep `publication` on.** `publicApi` and `search` both refuse to load without it, and new records start as drafts, so nothing is public until someone publishes it. - [ ] **Treat search as public.** `search.titleField`, `descriptionField` and `contentFields` must be public fields, and `search.authorField` shows who wrote a record in search results. -The example article lists eight of its own fields plus `publishedAt`. `code`, `views` and `author` stay private, because they are not in the list: +The newsroom story lists eight of its own fields plus `publishedAt`. `code`, `views` and `author` stay private, because they are not in the list: -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts (excerpt)" publicApi: { - path: "articles", + path: "stories", fields: [ "title", "slug", @@ -31,6 +31,7 @@ publicApi: { "noIndex", "publishedAt", ], + // ... }, ``` @@ -43,7 +44,7 @@ publicApi: { - [ ] Commit the migration that `pnpm db:migrate` generated together with the content type. - [ ] Run `db:migrate` as a deploy step. Production never migrates on startup. -- [ ] Read the generated SQL when you change an existing content type. See [Database](/docs/content-engine/database). +- [ ] Read the generated SQL when you change an existing content type. See [Migrations](/docs/content-engine/database). ## Configure what editorial features rely on @@ -62,7 +63,7 @@ publicApi: { withoutBackground className="*:max-w-full" src={searchHealth} - alt="The AdminCP Search screen with status, engine, indexed items and last indexed cards above a table of indexed collections with coverage bars" + alt="The Search section of the AdminCP Debug Panel with status, engine, indexed items and last indexed cards above a table of indexed collections with coverage bars" /> For a monitoring probe, core has a staff-only route that reports every content type, its search drift per language and failed scheduled effects. It needs the `can_view` permission of the `system` module: @@ -79,8 +80,8 @@ curl -b "vitnode_auth_admin=" \ "effectsHealthy": true, "contentTypes": [ { - "contentTypeId": "example.article", - "pluginId": "@vitnode/example", + "contentTypeId": "newsroom.story", + "pluginId": "newsroom", "features": { "editorial": true, "localization": false, @@ -106,7 +107,7 @@ curl -b "vitnode_auth_admin=" \ } ``` -This excerpt shows two indexed documents for one published article, so search is not healthy until the collection is reindexed. `failedEffects` counts scheduled publishes that committed but whose event or search update failed. In your own code, `contentEngineDiagnostics(c)` from `@vitnode/core/content/server` returns the same object. +This excerpt shows two indexed documents for one published story, so search is not healthy until you reindex the collection. `failedEffects` counts scheduled publishes that committed but whose event or search update failed. In your own code, `contentEngineDiagnostics(c)` from `@vitnode/core/content/server` returns the same object. ## Know the limits diff --git a/apps/web/content/docs/content-engine/public-api-publish-confirm.webp b/apps/web/content/docs/content-engine/public-api-publish-confirm.webp index 6bc1be4c845cfe3f3ab0e7fa0746e7f95f5ae638..0262627a424b1e518e364bd35bb8033e64fa6d66 100644 GIT binary patch literal 16198 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 QH9@q^lYD^vzn{qe2WMvfY5)KL literal 14914 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 z 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 XCO6ERluARGjc!K85-J7%l=%Mvp><(D diff --git a/apps/web/content/docs/content-engine/public-api-publish-row.webp b/apps/web/content/docs/content-engine/public-api-publish-row.webp index af9c9ea6f5043f94bb83f4e95fd71f9b3d2d149e..de948d8ad38b808d2af04bdbf513f028d978f02c 100644 GIT binary patch literal 49252 zcmcF}1#}!sl5LBbnOPPy%N8>;Gcz+YSf^VPln4bd*J$KL{2`w_R+)Bj=nQuerY+p`6% z_Fn=j-ZZ{$#qo=MxW92e%WuRv1Eby*UZx+3Zv1!soBif|OyAvKw;uWL^R{{pfmsi= z`{Fk}+dVe^oge$Yfqsl{>Mz6hSGW9o{LLTJ?@@1YFG#=g4*942&2FLQdY1jWfy}RE z*KlWy6Fr^&9zf2Ip4Y8QtcJ83;7*TAPap8^S@_r1<<^1!@W%x(@D=2P{cZXU>f!39 z=MvcJ4+QoUan);)JZVxt85N+yB%I%yq4^i%72YNr{j@PSJsWYfP7St;~Wyu5UUjcyP3I_?Sm^1~#n`QfR#X~e8H<{lA< zClrBz^OHXHH0U10xRkMpQ|MIMZ*RZ){=m2^B!vP|SI6@O`#fl2uHjGvUmrvPkM(De=W4p`nq3V)!Mgx z-u!#qyux`Wtc-izZ(MuwF2Ra};2fT8a8E%w0{Fv{Ti>871TVuOs9|klW(iH_8%j`x z-qR9n#sNtf&y}fHd%}Ay@EV<`Vz?HfD*L>mf7Bc-GuQ)WO8%u zSw-$HJFy7Hu`u_nHxqww+v{(z8OU^A>=;OWLirZ!xw+82f2+lq&a=lyTEu|t5TSVt zr%1z%P3)xrz|5OOzx?B^|0Q&t$PM(b8cq_@bpHlt4fje6vUirDiA_LTXAyr9kjw%I7po)d^hp0L;sD#o&0R#iJfY^&N{o>A4#v7 z(mJ^Z5@Q*b?fcpgo5=rj+kpK3*6nR0cXP$V7xOwUF5#c#B}LDAgX`d;yZLV z)`s~T*kT)MZ~iWptUm7mLuR*ogf6>JtLKlE129Av2Q&xnlWKoWtr+(@V)|V^b%OEF zx#zaZP{W8IV>b+@Uw!#SgLRxBN|hg|$4kPcx9#D)qQ1E-{HPTWP=zKn0__lcv<}s* z-Zjx#kg7(!{WrS&$0+_CV&wcGS~*sR`T=eK%RF*Fqpu<_X}^OwIXfNkZj6yJfP5>5 zf-$b@XaIu>n@mgbL$O}gJJQfJ3&KJKoxpi-8iasD0b^YWttZS_=1V2o+nZTMR@N|C zD+A${cz;=KxMaZ-qGp5Jsq0s9$#*JfJZ&wK)hJGhymB%mpsfaxuqhbeto%9C_ru89I@7fo$UT(9RLCf>TK8xn8U#v z4#QCeE(<8mwdiGg__?eORDy2^aue3-B2I;XUsKI&Vfr-H7fmV|jLs3n*k%`b@+N>+ zOe$jT>sg}V3hnD>=%)R0PWe$T$J!0jpMVVk=Y;;LRL$(NfL!G28E=o-6S zA-KoX_liTg|L35fl)N50(ra<~JCR*Uy~aQ$UK!|At^E=*`6RUYpC!J(Iih8v6@`%f zOES#3`qT|vX>HEG;Yr))3uoJ=nD;p3mKS7EK7wE}=;U+@8Anc}>_ODf&fVT$!7tJD zYtrQ6UuM@odYcwUxB9GCN~6JqTCHq6WHnlhz_tj6V3j#Qk_(hL9sKsF-(-CV6;@udXVcRf%iRgL=5T4q?G# zX^o_)8109|cs6grQgG+Pxre5JVqRM`m!La}lTO9@l?4089}qR<~|(LvR)H z8mly73YFh#8k1(xzHUElt_rsXE{oC~D5D3ne(N)C{dHemdAD45<3D(=2dTy(JU9cj zJ0@tSv8zk5_faCSJcy`4527BLuPv*ea<*d?TRV>+xSG7I0QV1l@kbB*fzPW=-5M2t z2z5ZB3ec01qX8^P;sxx(;yd*y`(af27`#N+>FQ>LG6a<1m^?`!=*8gcTd5w2p&{Gi z%H9qdMYW5>DescY0~Y~GJA&Z4!O+N)ZrHYfd=6w4*tQdFNMurjP7rQigl|a9$I;-u zvb#BdCJV%Ci2ZaA!TjM8U>9@6*ox%&^UnUa>HRq^_4{hwf2PPk#fDvlxuCz~=sJ^A zWA-*(eDVJK<^uvx3?Ohmmav?fAX(eKjHIrnl+Wc5bj`UFGQneDtf0g?>pa+pYKHkq z!5%XDYiNX_u{%O0*mUroyzkvTyEEXSfak9Q&MbcQrbTW345Z+-?K+!7^v-xir0Bn$ zZAb&Yf~{K0QGA&ty0vVmT3~R0<|OZK=6KjA!Wy-7=ESo*=}T$n#CsFb_{K|p-eju* zO?DlCO&4ug=&+LDuec44`0tSIKg-y^!>ne>!9c=}QPz)Fkv3>s);cQ$7)rA(WdKcp=Ed;{;bVSec2h!}I0X?0m^v z{1=z`(>Yka+;noP=p|8^U;nX|{`(*X8uZDLxdykRJBdWuxV+tjd*kOi=4!3Otcg0x1aBgEH$P`FwcTUe!ujiy2oVCqcGK=DXDQ zJ!ew)sDXLoxm?&s>V#h_K~2oqaQI}P+(B$NG5@u;|ND6Uio>TkC|rynw6VepSHcU9 z&)eA>HFbW62e}IUjH;d>1Z|{%k88GD_ENdjC3LoONM#CP?qF8sglWm&5z#aJJ1YJX z8UF?A-Cd)(_e4_2>1Wok_T~=C}(Bsl{I)^@ys9vmGrboqj>++4yh zK`|ecapB_U7w1Pwq#sC^1h_E&P`@BzQ$L?lxN}lyUY^TrbWQz{UmBM6i)a5J|CF*N z1-;p~@yiQ>!LdyGx{GX{-gK&v6vY(BR*@@87UHL|Nu^iJb(zABKBqvFgdw3eL_?DQ zW2xE2K5hlo<~A%IOEQ4aCgw(*wvc*Ic0XqDqe=XdX^ ze^|?!n+EcN2|~oQxCe97>q<8FaA}&DB9ZcN_mTP>qDFx{_NS)^SB{7-yNI3X{6p)y zQn~pxAvwD3|DLxgXIKzB?f3G3ox0v;(i^A$anphQ$<><&DI+E6{}o{U6|7Lf&?UWR zd4B3>WDI|r0so$KB=~F3=5%uXeiG)(Gj{IdtNb}h^_Pmlxyc}?Egf1jtkfIu7(k}! z{&NT0e9BZ7h{#gA)wsg3cWElxu94(QO2(W*Q`s-Q#1&?{fbYi$o`BrYg*+>!E9_4S zx@Dbay7uMafehltOJQW?J8HI)6eg4Ct~M$NqCkmb%e%WUb(LpTfjZ}GhQoZ88CIy; zM{h@{GiL2Jkx58EZy(F`9Q&6&r<%(B)q8WjEJeP)7HilFmsWoiB0Ti+=_mqFd&P$J zRW{9qH$%6saxcvwx-f5{z_qXK4D!X}1X{ii#}@h#>>eAFVZRf2w$MwaAOb*~qiW2jc7N5!nlA*@zK(AS|jhm&Eltwnvj+5lX*}CEJ#k16=m*dU# zcpt#7chO7LHiT-7BbrfesQ_O-F^<=x!Z`t&ncBQ$eY=9L_%%K*E$@IPnG1Z`Dl9~! zmwxt0+I)sG)pKVIkeby+rJX2iWVi?Voi=p!wf3H=Ge+g02twggd*(YGa>>a;I{zt(XwVPF~#sIlGUB zXE%ap*?Ls%#bmKW{A$Y$+3wrrrUmjJX-<7zi}(vWOnO_JtA&n;XWo(S{Ltf0Bo;S; z8Ks-vDtQ{?HPOdb9o5eUFB4Y__8+blzFWLrmZ&Hib1%{@gIh>*)#FcZOc=7VjeQ=> zTlC1jnw(nV;RcHH*w$Ds+2W{va;P2Ig%=V^VE8?zc@x%f9AU+%eGF=pxEsaZpMhfF zXXWs?nL3#rZ%54s6QDv#371(x8Oei?wS6$BvO>WvGc*)i*iH!LICSl)TIzyQ_k*Wo zul5$0cNL9Vn|Tty$G2Ha*Tzc})hM|hrC;mH<0}nOFoIN2q4!M8o2)J~vpapR(OBnN zO8JN@ZBPfVBIakspXv-5;?_ak&(VRnfBiZ4_RZS6*_#)Em?pQRcKZkn$wREKs!jDa zpTzxv`IqqktjTGkxy`R$Xjb9C)DqLbK;9z|iMl#J(DK1xl=jmY zXHgGTUUQh1xZAZqOtsEISnNUHF(Tkyo z>z%faWuOX0V{d#R3=l5~A*-3f0mYK#$vM+-ri;~WWbR+otp2dj__ridurFU8USG@si;lnaHC zr8RDXWhy?SLW|My9Bt6~QZz&9ye@Xr@cu+Ljyj1@RLMZ$VJOh(F`jba=imNB0S-!4 z1)TvfDB-0SlxJW~FN85p1ykFlz|JA5254CJptiH-AhKomPBs-|?KB~oqh+}-LH**6 zZ{3ChAa)S-6WJcbd<~m%YAIJ-NoK(?jTb~c1D!nOWb7*IH4N9?r>Q4IA|i|;A6JxW z9mc+QVu0s?!M!P^9R&qF?|kTagx$J7SnSlqJAaTV=^^K@Y9BP8Zeo5xlX7XZYYg6)-e%n93H+OlV%@eXt`kBtP80J z^U~6Zg9j{E<~pX>h+A3;t)p3%+KsZ~P3LV!q-&3<&tNQtRfxhxM_9x8Jw4HTe2 zu<4u5|s|?17 zXk!Re12*jSiCmKakqz~<V^!^tw~&^S~%QlWW(rCONeBaDx`U>A>Ky!!xcK$Ef8jgsEJGpVX-OvS6mKc&5QuKw9Z=9A?9ArBEWML{eBU-{>%1piDb|8;8q9hu=$K)VZO3R%3Su!0~s zb-QFq_c|s@BH11qsk(x@V3_ZHK|+R|d12`U*Vk+lKi^SBKEI*<88-V%)yDafei;@$ zs^|U&M;8~EFx`N-&0um(sCk@HQZ(hP;cg6ID3?#C{~AnW0Cz^-l&k>pMN1R2X)2mr z@y`C&e2MD#*D%Sa0hWq13#jfbvrjiOpP?j;1m&FZEu2TvoCIyY+06}B>k*q|8=XDw zeSymaU6s3`8T{u8@n3e7{;_WPLs3{Hp50$mae4&3DwtAo1Ye0#yCU8!?oB#r5j%o>Sk*Xx-+?$SN z471R@Y2u{+ngnOz5WvsQDI~C29^^O*7W=l2qO;RvAfH-lx9Fv%B0gUJUq#D;TFhQ; z>$lj?k^3hi-=%hS#1Z4Hcvh%t?vzvPVE(^1$x+t)r;Bntflp{D9>0V5pY{y@?~wb$ z1pRS)QIiG$_y9iY_Y|P#wjGPiZv+1FawZE`8F!7ct?4I~GLD~kg7MA;erWvlD+*6) zFD*QNd##Gxu3#pL_IB9q-=BZo8iT}mUpXE0-@)dA&CG>LK_p;#$>uS==W-c8bvQ|z z-xu^myiaFr+~c|c-iVin%*i& zQF9o(0&mnG0(6WjgXb`*?Wv-G^!i*t(ag$HCrAJk$D zz@l7GvrmyfezOQ0rcg1}RfZR5Yx%asdgRp_NNuBZjQu6=P~PMcySChH+8=S2_0fO^ z2~AujWFdo|d?#|D`!E&@i;P0*W}Yz5$6UmDUqQdDmWaPlG?iSfd~{23)UC1}PbZ>d z{dKG+i2IpE4+hyTRih`L>{2W;3R-XKQlFecuwfO3gb4QQ_l6d@M81tKv}w{TDEh-t zoOhfd_hZ}{VnW&_A)04Xdg2-El8T$obR#CW--KF9~Ly<1Hk{ zmPzm3+M6Ib>6h&`y&tXY-^w}yer$i$n9JRp;hZn*b3>wmTRr+=M1E3ZQGH^xF9fa! zA*vQVF-$jp{50-%-)BYDSBml#U&GrcgPKVQ31P$xu18UjC4SM&VUA`T0DPlXR@|7h zbgThc{?%uu^@~ZqmPK#0l#^$j9N(OFlgAHS92$?dxd3cDr->^Kd@bsTmNA zPNVAo?#XTV?%I}xHZB&)#}^*flvTp@zDgALX+Y-u7dvk_HI%9-kM^Q3-#xf7&SwLa zUK8rvqik_^-pV}uVOj+ov}G2ko4BSPE}3=ML3>*P^gKgjjziV{t~=(=VBCQ}^&8r@Ov7GdMTkvkwPlew!_^1Nln zrF&#yRRjV7>09s7P(n{icswRdtRY;o2h|JOP01UdbeL^K+|x8d*nukVwzR;gK4_BL zk-@TKk`mIZehI;eX9a-vymb?*N&gd!oR&pOplY@oO%ue?M$ER7tSN}X>o zUPP54C7qSW5-4@iDr6-?{aKb}`aYs!z?JkuN%&1mBB!bx@Ub-bGT1p^KeUyBpSnn( zM`EMu^PY`&$c46OVlwH)WnY^`acVw5dnG*}#!!Qeo2}}j2{tsJX-S6U^MHFvDt+0a znkG{<82X#pj%FrCIbN+~FUM1J&fAwzuX9Z;(Bgn z>jzpYrnpK$W?P_J1dO2lEDfTU4QE*7UtS4!wEdlxhH=#}w%wupwn@E29z&RXatjfa zHksNUraHUTp*${4eS(5Dv+Jn3{lfOKvJ{A|)-|Wy4c2$x>_pbBdS7=6$fICYp?X^B zp<&Zwwq1W!NDL+BCdB^`0Dk|Pc8fts3ckCng|*!solM)^YS@6c`O${Jx*=b`;Fc-- z;ldW6Uumb-W?8G@BQbOSjL$8K42H^UEH$E<#SKNp;-Iz_0@q=MeO)9esq4({mrhGh z98D-=B>~SUI+m1+ev`ixSaD$89A`STZxUIdjponAVW<#iXP!`xVE*m`KeItZByMdj z4D0o{xrl(YL**F=sRl~us-R*9BO68gL&Wp4@6*iFhYjn&UE;X^eH%s=GTRTNx+Bv| zHW@!2(`II(&+LAw>5jOD;G_bm%KM=ZE>;X#K3<6Tmqz*v0+_5n3dUSO56kH_bpQZ` z`$!t&e5Ub~11w_#mHWImPN^FKyPv6L`D~6WM*$@+6*2hj(lad?Br8s9re+`k;~ZXA zex8O{qY}Phv*x6{rB%5J3t}Cl*>Y=H*IQa_qEEA{aFLTb-`+u{eMLfHwlHQtY1xRJ z7#s^)uA&TQcr`MKzTVa02fhFLw013V9uE*1d~t4xJPQbc*3`&Tsfc0c#@ZIeQ0ruS zEFMg$e4xwrq48(iMpvDBcZ~f3cEL=^!7Y-fP>5c~LI3g<&|+6RW20?AvkxP`H-vC5 zYJOc68moiY^vy!wz{?Z@QgK2`&!pHmVADBac^UxZ52Tu1yTZX?2F|bX&_m5$H&6@v zK*g%afMSRs6{wr8d-6Z%5*1W^iPrvH%|{yk=#emx`Hsg%Ety2B!rx6_iP>SoJvC^x zD+Ee&P{PYu-)DdBhGE5`JSPRqUZq(U0t0~lwRs>@_jgHu@D&laQ`srH42&@w5A=;)TVdu$iclNb=RVM@r8(1&0hJNW|T;d&bPV5ju9b=OnlpuLoJ_cGo?T> z%PO5VKbKwU(|%4FlBi@x4+^c7oph*qSe=>4Q0NXx?}mJXy#Qp?v;qpubKBE{*LLKxOy+qY2>4stSZgz^Yj~<1+NY!l zI(OhVhIdmv{>__1+=RY9oW*$dU5B2P@^`Bv$6V#d?Mk-6oE2R4DLg(Ni!+yQ8ePo+3 zA@$K{d*5tPUhsr>)6)o z8AuweTG5BHo=`Q+vlzP8J6J8;6aayP25Bta5iPLV- zlP;aHJQ@!oVJ*-61WnhxodT;7L?+49V&ar(7X6Wg7gufs()r-0F?REaxZ)Om;uhdikxUJDK9 z;JxB25d1fT$jN6|IWep=6Sao`i_YWh``hp0pCK!%1`Tdan>5~cr(Wv2#1iT5WVccZ50m3okHU82x(H)^6)Fk`=uv$?M#%cu1F zs#zA*!!oMgYgn_tw%=8yV@l5mq!_j$YgAN%^0c6CU+NBU2^@tX3D;jwoE-crPBVkE z2#KJX46&DU&_VoB_EiUmnrI|#h`1Dk?06u7o}Fm*{=FuAT(@b;EImlRsjM@xLFS|_ zP3!jL{riT7NVWzqfgXi1YmF(9w- zI2en_{R1R24Ntk|JdOEXYsgwo=lXNq#y!NaAR`fyhz1Qif3dXMNl9Un zO9Sc*MYviZvWvg-elPrq8wpG@S`ZF%1~w@N^fGCy$fPAo@6YzbT{}dCfZ1Z|x)C*E zjk1`EB{%I{KF||+YSQ8FfPDl`?uwNbDvJZZA!(j1JFKu&iT5{BqSncYsc9;aMND9# zWVM^PQ!K^VIO5P}CGd>JSS}LDIjO*c!7?mWTqxgkwj1QAs~fJ2KD`>fyBRo~PVsj( z65rM-g^&a*gS9xNi4Drob|LAO(b-`CWBLV(RN9|MP{*3(N|2v$L0m&3jTT9jw4BjQ zE?*@5PDo$^csjtuAu=E}?c?bp#GqWZNO2t*!);LAEK@qR@&@CBp-SQXV}Jze@LuSE=8dEHKDH(J#_F6W>!b2tW4H z`E1%RAi1LsBY&eI&(Zt_?Fr*u@m1Np)G?s=(mCK5DyG-LXMrXBb5YDO$+CZLh<5sr zAlOg)!Q?hr#IqvjDLVTQzDx)Az~v|`|K?&SK`0@5YNI8O;+?t^vkLb9`kF4t#PWQS zijj|`OJa8lmf!sPQXTgHn> zzB1E3r3=(^-!LZ%E&Ry(mN=iU9}di#Vvws5seYxgvGF{(pWB_pw`JcxhJCwvB1GEo zL-Sz@`uM$QLxf***)B)_7DVVCrP#nzPuuY{|KJ&8S5YKieC8y=-zd{PDa4G<5#{t5ys8YCEkc5@S>`^iW0FBCD?DDUOuk z4GP}-SkXXKXZ5(!v(`yg5|JczbTi^&&4S7&seOqPw84qmef@<4ol1#oK^j)8&TWH! zERf?N7OjP~5sI7=-b)UTA}I0Yi#r)jQ~m<&Ty$;aGL~h^?uRAZq+u&$d%n-WrHx)4 zt7JJnSg@UDK>rKL(4*Enz|?Ds65&Qn1)nY4rDN50_Xv?efNQ<33BZ{c$UstZ^zmQ_ zv1(u)zsw=aRu%M?M3%Tk&K$SdOh$sIg=DXx0(2PZPf{srpIBpU#RH6IXCWstKl zcaHg(4d1HELX$(dez}k&?55TA)+&5v3Q3Uqo>j4!Ywu9wDvPGPYN0!xUeZAs;FM^A z2O=}*jsee9Hz3j@WgJ`*+W1N9awyQrBEKB_IFM7a(dq*EvWNC(b^|;Y>~mx3kF=Q1 zkh0amHGms|hVU*N(^%SL#PB2m;u?vrj5yy@vV^{>5~=5c?TKK5bMJRkge_E{W-DWEB<-OLT*|`X;H>ZNq5o_`ckkC zf7kqLXW#PVa`Ws={&sHcgs)822ki~jeQ1_objfs4sO;mM3 z8oouO8AVm^=LC-6tS2t&f8`c^`>OOHY#eQ}&*u?3`~1R1_Z^j3`<$;$Tov2g@P3S^yq_1TMsYz5XW7>&wvuV8 z|18;-uKiG}tP?`r(dm#S(hl5V1ssXz{ReNrU;Bbv_qHkQ?ctWY)%@!@zu*PY zeP?g0SPjw&$*UNc;+RqL4)Yqb>ehiK=IA=gFNr3PWfNj$Apyfngan+Kew`9L{9phx z2+$o2!wd8Gp(%_-?TjQ z;MVRjt78>~ywbjkk#TTSrqn5g^F21ALuBI!-~K%i5L+Nie&mh<#KdaeFWmvr`ryX6 zhqx7tq5G%lWaH2|4XEC(8ndg0rS2l&(`oFGwZQ_!KGCbum1;v5_^+P9<(_$4OHvge zk;`aTz@?YL;nkFszn9LGzwJrR80XKi-k@YxYOb4h3LFsZ8`xOM*%IJ3yF6sRI;mby zw^AC6INw^)+ZhQ#Sz~l#0E;d^^4wZ~#s+xF8@JD6&u!{R{CDOT9X$k!`P~A9kBYN4 zZLZxd^p?jh&Kg0A6srSa-{$O((q$@M|2@_aamb>kjEJRNzFf0RkDZfZZ(8ollgDF+ znhAPhp}k8`VS&8-5}w8hw0N87Oco5No!$ZjXi0$sh5Gz=rC+?HbMlxYXgpCU5UBUv zT#)4f#FbFbGt;W`pRaIOX&9?_^0UbI*euY69muNDsf0@a;WW+?wm*@l=6#SEl#55N zwfT)9A*0qnC#TffQoJk=o(J0q1zFL3t_d6?U10*XA|epL1jw&IbD|}BuaPnoKGQ^D z#a#;fV@n%b5-!}K+j{&IwDth|=4D_Lqi6RJ3C=L5)Hr;B(R0@I^*It4PpJMTbMZdx z!!!fRi>6~BT>&N{NH@>es5G7}2Z6Ls3k7j)nt-AD)1X0tFG%yyDdXweiA`9#>RbNl z&i6oRZA;61T(w6es~4TNAl<;qxQ1+7m#S|B4s*5> z8YcvwD^xpn8a5agEzGnFCTFvlQZy&h0&IlYXi)s6`O+TGF)?q|j6$tFveC8?8t-+< zQDm+VTJ95`0O@CCBg4>9@@dusf_f*rwX$=+;VOwVmOcMDcu^KTk$Gd3K%Zd(wjL*9 zNNb-|5rpWcRs4NL1Aq}Fu=T_uv>cnBRb6Wcs;JB ztEB;zhZr~y9y2J3vOZURtMi@ZG2*?RLnnF>%V zXbdFtra-A*A;w_7BBQ&#;?F=CfkE%CN;rxfITV%vgeuA-d66D{S|+%)$At}PQJRuI z`ZZpSEvu;}WJ8}exq^es_flW|2UN(#+gone4eAwf&U(0%?(VNS&s4+Fv$)xPo?b*K znu|TUi?L1?_ZG6d;hrEtBk&Jc&N`6Z z>C`cE;vl<~yWacHKOtgoOX2c1+K7)GBgmh3Q2U&SWe>Po6iq}UNxl_-XO6dWfuj(6 zxq!zh`QrFOv61t>N1_hNAX7Pd%xT5}F+8d)u4h8gS6PwIoyxe0Lab3ohqMfS3Rb^% z(qQ>w>1})iW-xRWbZJ2hJvs<5QtP}#XKW&qMdvk`-%+cvhDyPFc17+6%Rw~kdi*sK z{exE6K=PAyuka()O}kJahI65Ut4)JDw^DfPCTBz;bXNdLS0@g!WNsjW6hL)FxURVhwi8< z1fahM#J6{IC{qphQkuv^$g;ZH^|tR&=f*#}2TdPZOn?m`7LJN>!H+82GO_JC_Y)Gk zwD;WXDd63BPe_8`Ri#^dQoZYO_~%JL+QFWL$|=Zk-gi>0uOS~`eudz&)4k~shT0< zE%_pfhNXS+E4DZxAr=~EwjktZ6?!Y!PdK`H{9xOvV}5B-KjIsZB=)87uom!+k+%DU z-k(Pl3do-vWQU^W2JErxBktL@^Fw;x2QJ(?7*}g1;`Q9*>V5Z*ohR!qFW#*lR08-W zmhSnTJqtU2H5RxvEewRku0n3>|^l zwNIeB0mof2Q+-mitMTgD4iDJec6Jxs8m0L1d%EA;95Hbem`h!?M>w^=G5eqM zdW%)H<1N9zmsZVCMXWfmM$pCGwHVt1RL80#G-Va!>amCmiUf+O8a1f!f6VE+TZboW zC1M=?nA(qz;h&1$Qf2PGORbB9!hfd`V_~w(uFlK5D=vDe93ShVW3tOpI$yNkjVQ4g z{}6}p*%Mo>^cG@|aBw^&wwSX=PunUJEehy8mm9D5P&e0LSEqhNy>Qv_zz?gC9Wy(d z!_l0kNJ54{jE#T^S#Ioq)+_Qe1AqHA2iuQ(cM7Ri-`8otqFgPF{iaazRc9dk>06!n zvjbk(3)9hNJtyS(Lp_kHwNyRGjFOC&pYejrtAV{zNUmVua%&sn;~UxT(lU(Xx-T-i z`Pmok6$V}7{+oD^=q`BEI~M#M+Z<+V9z#0dP%loLU?em!QA6Z zmB{tnbQ+)SY_dqpqDQZgKF9}|locX0>5GxUroLGd4wLeeN9mWsllBnD6n`?(&)p9I zMYoOr(yY#Aj>lC;{#`EJpj4faS-I5FmNg!GQ*W#PQoICg;>0hM0I^B)uvuiOAzl2( zMjr+nSqUQ9!|E|FS;AyP1K56L@c3{(oXuCzI4|(`;LAFcY{N@g*wUOUUTg=FhAP-u&vs-)+)E^rK|{5n12S;(~k zW@#m#aH5ew4M2e{u~SvPl|@yCle3^AL}{^`%K=bP+W*kUyST1N88>?prTQeLcz7RE zFvH#C&nMEQk6O?9hLH(l{=Vk!2&er!We`_diNfpZRGO<9x=SeRDT;a?@E502gcIr3 zKn+_vQI>X_j|pwL^~3m!-y=b}_$jsr7a(4pyf+zkG~7x^KsYpzi+J99B}C+Xa3aiF zn48L?j28{=J1N)b3T0{&xbhIi>&>M>w$FTg^$jVR^kCzGpZR zI>O?-SS~p&H#^E-FZl{}gL<10X;p{dYme4GIbAlH-I>SYterR3V?^G4gK?c~xR~ z+B;Ou7km&Dz3-+HaBnFXq&UU`s=RrxUW%Ibxp2MbR^v8MZTNiYq&utK4lxp%VX%1%_? zQTJp*40cf_b@u|KQm$t%qk)!MrS0e<%wM=oADuG-KjXTQolm?UJ)G||=?$#D@|KDY zKD7Yx?k?Kvo zXv83y9fSQ?O&gHsyo#c@)iuB-NMHKg`Y`rp)&g@Ah$pUTnE!Tu^tEg+=Ux4$3mWbf z!_Crl*ds~iK(5`ESjf93*NSh&`As49uH~lnBagTVyLA~??Es#Fe)U)8)%v5eRWQJk zh*?WBhq5P#knWjFplrch!g8=UXyl@|E$$Pcmta}`_mPsm?;GC^ja5tv5{!j|mo>zu;qU^#WIDvOS-a<0#go0V0XUsFvek&~bX}+xmjhpUSkDSw&kKQnK z;%a6d7jL?JwNj{^r=$sYVU%>?jmx{P9APJ}u=-x@3(ADMwxr;uGBROWkdV~ulrtu|ht+tu4I?ee2-_mip>f#yUNOF_TZj1!GD28Ym4MRduc zCXSb%k!{ymf?w{iDK|nyD4&9Fl@%HHgru@38iJ5rek=Njc*Pfg@I-6al!c=pp8j>O z>2vWuGw%K=1S9%v1^s@&IcBqlgW_R3( zs$3d;@D!M?l}X+-7@C0;hQ(7>RiBJu*5$_VgX1(? zhzT#cf`Eb34Q|LU&eFN~?Xg*NQC|W^*$(x+(&nRf%jTgyKo4&8tKctX^f+p8xWf=B zcn@9C$2_!qrMM^zqjh7y%Rc&D`wZ-F`J~IdHa7JkUpV1u&^276bQ747nL{|)Ip^W# z$jV8)PmodJ0C#07<$vrzt&D;j-}Vu(&hSlnCT6}@AGZXTpLx|8ceK=#kth)De0&jp zg>{%Nv@U)YFy>BCV8c{aVN6uwq(0aFl()zbf(~IrB|_Q+(P?z}YK%7Ll@WD2Le6|5 zwRCox7cEmxtUsc=$wGRZ{@` z)dW19P0oIv4q-D#C}#KuZ~b$pcXA9k$l#T749EMTV!vE|s=vr<68}OS8e{n}g%6wr zhg^k8)bIjrawTu-i^^S|l`gd*cF^^6FNs-j3Yk&kPnefL3*P)`{|Y`B?od!ODaHr+S%dw4^xf3_{4>(6F0fdpP#J z?G*&zECY1X_2!xBH_QsX#>o`cyK$bOi#C#d#KmqY$dSs!Ps^zK3MMRx$+T+&WRy~( zPiUQ)s9|XyP_f1Jln4^@U%j6~LU#F0v+7G1kg>*XE^yXZ?9ThDXuoq3x4}_aLwIwN zy-2FgFfv_I#|W)UZnM<%z=D*>*Et>{#-H$$vo<0N1Bfkx%?EJd^EO(^6vK5(ITgT} zWrsgUiex|AOe)N>kJ*>^{!Z5b^AGDHQRovMka6XHNtdYnQUCm`uY*SeFi8OP$&5ji zQGQOw*v#WO0l+NS(gEyI%Y=!?f-R6N6kz-Ss~n*22)u9-L4hl=+CT~>$0k?;1pMw4 zRB^`UsHu9sfbCPHAG{80r*9DyaI}ol#3v`1m->aj@@$t>mJWPYHwQDNQu0@cCLmtP zO!G2TTD~ao`pQ)qIJ%LPaxc(&%VRXmBtwMu4O$Tq@-*S(=u6%Vla#R|v(9!$H!gxP z9zo1F=*3Ewx^&#!!vSB?p$jdy21KCpRf~6=c9qj-%7VL-Qsqy;YHpSp7FrIzo%3wLI}QpRapu>+hs{V3^Do zMoW>O%r|VXFlnGwd}g)fZ@Xh+c(z7&dXiZ0m3Y;z7n+~OT0-|?-ZrT!qn!#`>559T{d4S=r++kQYz6g(07aiMUz zk?uc_o(Q&l#6o;?-(qtfq+9RD`e9?0TRv+tB0Y^_v@hceH~vBR@LV<9*7zFy%Z8ee z42o4om8UTr#-lnuKIZ1>9Nb%v38>v3<^1_ZfLt4fx#V_zESe}QahPV^X1RCt$Sb}G z+bf6$R6A>MfTu)(u)T=6)>hx#+$mqrJnBe-x&C=2QWyOz&ZQ8OR?Bs*x{E8Wyyit5 zYeX4Lku$5rl3Sg+4ZBbJl7aU#H8I4((fdsq#>H$5si5Yh_j5P(EH%9~fQawCu-4_t z{UR-e?ogDG@m0JHMVRH*`jPB+s!J3?1GIZbnF|O-=nBmmib;-{EJ=eeJ|`ROdA|gn z$LV|C==%Q*W<|+=gdR(o*2iMHV|k&m|uE_ox%lYX8l$H53wNphaYN1u6g6?Kpp z%2;MNi5_gQ`NH6#2j^AvBg(j?+9j-gDpD6)i5Z6uW1HwBov`4SyB-k-}vIzA#h)Jmv1WAWZ z9{kLQX=`r}8>W4G#?Q@gnee@t?|gwA!&I`;j#a(#`{04PXQBc3HQ&n9FQ0{IcogKu zmrA7Lq-}WPsu8agmPj_)syp#cX0A@0Db$A~;7{tRRH?6xYH7{Ca>M;*`lc)%uYdd` zyv8ek;gmY+YS-Ch^0Fy6YGGdC;7u5q6p)7P?J_*C#W}!gt-k}yPvUj~pb6Es!q|uQ zn}+XBVxX!#P=s1kxsO;SW5h(3_yw;4)j5s9H6%J!1F4YNlExPur2zaESl;vD^A8q0 z!nNW9=*g+fcVswHpRPRmhkTl*Wp+VK`+C=f=*C7C~%RT(f1T4t~P^d z+i#Zq)^oqmvj*J#DY$e1o`t1KBUfW+-c%T$gKGjLsdm7ZI!T1BE2X7#Jw*s-u*~4F zNyEPM_@Kl3VI4Z7`xNV?%D(xVO1v>gi7JzEIoETj&_q{j47;B0di!TG>RDB#(dc)# zhBs_enz2n`XrdyXg^6?J_X0O~{K7*uBiGdv<{^eJbRn|=S2y6|i0GIbkXV~2@#kL8 z?4JTs&3|})@tJWer2*7@=vD1B5=5$d)T#Ni0^0n^PvYTqreTDfurSC1uT)DUj?1FG zntE-Drc)6_wjlxD!snVn-Zl8)tbuIUR$37g@T{9thR$WPJrR-tM35`1Z~p1>uqvT8 z@Dj`5fzRiDW=h9x!YmJZ|A(<}iq0(9x{cMbZ9D1Mwr$(C?WAMdNyoNr>x*q0f1h(- z?ilys{`IzNt%p5ERqe6YoNLY!HS*Sb8`Y;r)pwe{vc0l02}31l34R1Jx$b^_!jTWw zDyZQ93Te^ok}*$lu(Ak4KGYkD;W&@!m{*LZhR3f|@vu+eY7*pcUJfL` zl6~67+HVdAw9VbD#e$$08A>o=&3Y?bt!lzPRWo{%WDSC-rAnF~s@lHk(Auj(&@HeD z)2$Np@Z0w)wiAxYF>xW!p@pe*dIeGVu+ZdL6eU$!O-#0UR91`$gfH?_-R}$h$l-{6 zz|&PQNk%?F+9BmhDU$5T_<^6+b~OUaqv(oxJnOT{J|4BKjRs&FD<}HA1{nUxGI9ae z$gR*_waWt;qpOM$CC9pHji6AgPxNUhmAVx{n}-X}vQeSPkFML>B|!EwpnMYsg9y<~ zZDKBgv5Ns>k?*}&C1CH8W#2N5hfPB{Wb{IUm|A{I=Oy#tsDTgc-iG(Xg>11?UhoM*@X3OJXlC|DC0^bsPpXp!(=-! z@?iv`W}`h4`wwpwW?DY;^cXpB7{>ooC}EJEK!16mfp^hK;P?0Igr$46a8R1B-)gvA zx8hG;S5CqzIpMLadd#?+*asxSA}Ff}U9~egKQBNgW<@`2LPF?)91j^tou0K~0%H)I zTtNyC6GYH`hax-}%4nVP{d(#r6G<9B1oTXC|47A!Nu%R60}?|g!O{DA*CUg2^pmzE zC_{%)h|@zd*mAWavHds29CpF_C-6N=JtCQdy+u9ED0u=RIpnx_E+3xOn zXSQ$#*2zY&(eYjvXh>!M2X3zEGk)HK)6%>WJqnfwe0nFVdF0riob78wH7c1Aq{tE- zmS?gRv_||xyw+=F+olM)rcbYXr@ZnU3J`?Ts5SjoB7f^3dKMx3E(`xq;un8%y+Vy6 z5$LL}_8spnE1gt&7k-&P`6uVl!_pj701JECpRkL!D}JDn`DPf31CRESZxWZGZ)YK~ zRFm3Q(Vfw@4*9EwjcLpPnctTcVQ%0}qs-f31PVKliJOgrUh%#Sl(Qn|joGwBV!JgP zbve`#D3=W(Lg+!7Zx*32WdDB0;^W`U)O#JAW$++GydxV~diz39Iy*-=O$~g!)m%S; zX(PQa5PyNu42_|K$b+=q0PiOI1A8u7F@`KAJ_xS^Ba<0@2)3zQpB{tNjEWJ5Rg=Vs zRmovWn09X<<9z%MTwPygB&sPTDxtykEQQz0=!C-BJ+CypSv|#O)ZNP}1SlsL)i7hd zl^l4d-~sy03|*2-J&08QEN1%n#wqbO+*=DT{@#dkO;1$*b@7MxOAcY@5^_vlVm3lF zI}K~&LG%Lr{R$ImM6(L{EIort;Q?iu22(v^5)z|Tb>B3^x*K$rAf%*K)JVD`+ zVciY)QoB^4mb(>VYlm*{m2~xX3M9lufuSCVPB1#T-G6m~8KxTkLD!Sryj-X#FG;Bt znM+)Z^{3~Tk3GXRD=6KD+R$V$y`wu=LfW2kY@%qDa_xzrM~tp^p5Z~yW_(4z_a4a& zitN)WW5Mq^{1$qnSi&Ni2KIk#@%$9d^dtC#-~O-a{(hucPyszLy1=p5x^jQ$sTCrs zW6h!=YJ{a_2VtRxS=xa_iBj24TY9$(aGOnSMXi71J&Syknl+ zUHQj$h<}&*IxQp|%9TCa6K4Ek^&TIQS@i7fPtJqJ8p21nV6g^hcx`N8SIP3l3FCo- zcS_9dZJj7~5EB_`F~7AvD2luNYc+8xYTXk^$Sg)vt-uX3DsG@vQ?Cuhz}F4nP^~Pi zYh|mp#ZMH@ihQyg*8uU;vFZ z8eW`x(wtLqIG&75xh|@llnF$Y0o`5oNUBSt;VKD{jHVUfZ{OM04crHY9rh%j5R=T~ zzumCE#aGhjDmDjAJul65kpG|B@&6ihT`zni+A9`hnqV0DjWY3`5x@$2iwqTmrTWU@ zGCgJR8NPD=kMib!8!mkiO%g_HCH+(Qqa#Sg6HY9mx7E#Le2%Usho@e55E_ey*A?0R z@M;q0`_qK}XdmRcw+PupVmkr*f8LO?0uNpY%VC5pZnT6h7RcXxX#q#3^#RN*YM>h1 z>Xiql7l0pFV-T>5?sY28f#!`PLfx(1{|Dh4*+Cv8xsxnD3lw;u9EpO5)5FPvhkvY2 zkKj;)0pXq&Bm52h*WhO~_};f@(CrU#zlZ-HgRcKYLb>(5N8hbNJsHn2e+Sd@ADRn> z+nhZ&vCT~f`B{B}qj{;=(VSu{ap5Fu@hEi9Fr89QfnnFcO> z5DQ(v3qeL74r{HSpXqckG&Ttpyu7LDW*y||%Ec*@P65y~!l2(^kI!0$sVsNn?rC85 zxO+;)40;k{yDup{2*^D?f1?ubW~UdZ$EA)^9aNw_VLoI7~4WKV6v^WnR9^?aE-68xnf|j?WSR@&ZWs0=J<<(73x20PYW=2mZNo+Jc4i10c>_eV%Ik!$uvVW=WFQjkfx6Y& zX=L4*rtVvk2*z>ZCfvzI*cM&Z31i_&bUEjhfVI%K7Ric=492LnXxUrsbdrlZBWqD+ z;8y5lMAQIq^L7tQ#bkrYJ~vCb(M?`o^37=}6V>bVP$bT_oKw|$LMR96t&i$ld{lx_ zU08%Eob3u^OmAilLXL_z;D{qh`42KsCKLp2AWpx}5AG5w7sZ-fSj=-}&ks7%+3BMU7>R7ovN zzcWDN#b4`X%V6qvj`E2a5l`O4yoj6-2^1u{49>`A-^#*9=(;M-%J+*)V+P2nx}s{A`E|lxYdVz9#llo~+uA^O0elj2yfggoUySrB}o`gUez&Mi%=FK1q)5AUH6aFd8=c8U}+dURx29-80=Nch`Y zXEc(~=p0uqkmZ`q=nkB&W6T$XjUkd)`)4*$W&IzAb5h4lw#BL10QE*{VZt|Ls z2I@jtdHHB3D|}cKSo4rma88>(tVAIP9DDk$MzOOzc+@vLm?m!+;3)u_ba zBL?N@Ev6-s@hl4I^yQ$Rrm_1xvdp5qtYq(MS=#HoTd&4Zz&IIYR{Z_2cY8RN=tl3| zy1(tFZ~m!&4EXg~_+k!8Fm3K%L_Otiq`d{FcLM&#Im8r7lDbE7hbN)Xd@aUxo;I>Z z7%qQF%`KGh$~aovl}1xSDjZAaEdf$~y$eVWWJtgcUc5G&J9fhKr(Oxs`c)@)5x3<13H+#n4@2Jvji~k zH_O8cq&n(5?=Hz>mL1mP118jKsxsMWsEJApldj@Ye+PW0?lMsb7vPXL^3T%Ttmk6M zJl^)@_3j`Zt0(|?o)Wow?>^O}lXCq(S_j_cfZ$S%)5?X5co(s?Q4H+N;MZKwK4xfB zkwj_2P_?6h!O7mC>BE6Z68$B-EyPcSFMSdstLhbnns|6>yufLi;J+DlWvemoei!lm zJJJqJ^mnrKtFRPE2C3qHa20H|yB;PfzhhVQaF+$Ry@Q79D~?={`Vaq5lCj>Zw?MT* zYZ-~<2lSu@?uX*l(Bi+lGM8i?_=bX`FvKN7{DNRV$PgBJMd`J(wha*#OYtP(guOOn zb3MD&I>nU#M}2=D;6#npj7}H~T9MV(+42(W=v-=H`323aW9Z-rdzCtzlfG0YV-O|b zRv|O9#qJQbkxv)9-v46X;ad_9a%_>9r(@f4|1(8UG$aev+p!o z4OS-+bf`>&7QX`Gs_{*INYZr1DvUmmhRjbt<=g7G9bmBs;cR9F(XV9to2y3`dzsrx zvnu~Gb^BK@xu+}k#JUj8t=#I0?!2gxlU?f@|E5bvnNP!w(}drFrqPoErA!xChWExi z37nN7Gx^D&($-kw`+!=DHv77m!1WkP%9GEJwl+zOwH8kqhJgTC!S=6%DX43s%Ue{S zl~WbL*v&dA?fJ3GOEP@}4c@d;ul3KQLanQ-8^i-a(D55-xF>l*%=6An5V+ph!e4Qo9{BKOkyEvTx@$=ZW$TZMkKsEcSaA&O15cZk5s7rK5AaepD{u?`ALf z?x=Ke)rs|49b3BTPungZjtPd4N5ZHyI)Vv%lKdWOf3)j@a19WSDq(7-gH6f`d z7+=qgcQ13x;xc&U@tD1GxlEpTT*l8m&XShy7AYzYO68SDW&Xe6s08_Yd_r=vkPPUz z*3VEDwnYmP%7|3$Nfen%7n{N|zb=Pd(SZ?~H73!uB^RS~vau`gH4-4)_koW#GRUA- z;sk;@g!sbSK?0XWL0}@Ee>R9Wjxu#dw8G*&SP%U>SS3zM2-X`Q1hR2LrF%J=&Jv+RiLw_x=OS9Ap>y#18 z*Ruyz&N!!Gvg4`R1XS{kDV_tm_y%?}L*LGi)%Y?o49o!z!-7A88aN+ZdYXrf0qpf% zflcZgmzQOqJ`*Dh{9M%W6UB-7dS>Eofz927ndn8f*7f%U7R}gspVlJdmIQdY@FRh| zQ4x2Lk|&CJm+T*pKMYG*-Sb2XieHj~#70+b!8nM^$-EEEZ%TJ?;O;q*NqyU)R98{* zcX_T1E@f{TDMD*mTz8B4f;8Eo0hI$#=T`u}qd1t?S(UAc%jXB~ZJU{;a(#W-=01yW zd^JkGwO0YRBBw1<*;?M=aFrO;K#M4DVW1UUElvAb30p-y+H8f*RSeaW{xwcFMAf?H zxRhhG>2!#-0y97Q^E8Tp=OiwR6qEarXHy@yfQ&WcC08qfRKJYKX5--JhqfNChe5?X zVJ?T5)}A6LNuqlLYU`sqp6xkRG@eA44(1H>UZqFx4OWz33|*(hMp7oG_R1{i_J_Up z!6E_lHUJ7vD#+H`jfL9;z;^&2`Js-qqlF83vwfM8h}vX54CWf$wz9X1zXPImvb~KF zAX&lU19!AM!r~p}VVY!JS4l1tZHE`oyP;iIG&pl^dA!>` zG@uABH)PZuGbu4)_khb6E&BChH0KM)MDQoAcxt6>3$o(NiiC=C=&(d+6xQtzxGgmJ{;dUP zCkJGg6g&e5&P~MBH^aWSXqum>_zDsa973mbqrruS#%v^9vol& zSoF~ZW)^t6Fsx5lhIcbMPe@RrU(HeZcSyGpTY|Lre0t92c#I~nqe2fpF+308Yue=j z%}KG{qs!pD81C5QTtzyj_ydci=?$3}sATJ$z~?x6R{i*K2Yq}n?Goc!}D&1Lvw#>q6++8T4ETytl=lnu%Y8k3VHwjJY)CUS_CddJ_Zx+!~^Jx!y(`Mq5%8AN$5gHGz z=GMoe@l_>#Qfws)`6}9agiT=g%bs@awcR^-Z*-m~J^##?_JXfhP%M?LQq2p6X5I?k zdT>shPQItMF&)8>W8;r3@L9?22=yPT4;~43xM@`q$C+eE3`fLO`}aD7b#tz& z{8%7tjnbA&t(9b7NJxS>U1xD?2&X1oMR`LmV{7>kn_r`p;y&AIDfHNDLT|Jol&^g$ zB!}Gsg?J_SxHbE|UERBi3IUiK8i*-b``im8^>F0sqE1+C76!nf(tDvnbcC#MU^^A*Ma(2!=2mpk$86zEo6 zRhwTi;9D=mw?Jr3HapzSbjK}qUr1%Zpj8GK%Vpz5wV&hp>+mg3-$Ys>0%4x<2F2_e z?#bI}`L*B}Uhp$HBB)mAPT4n&Otm8yR}RpALq@-So@B{wtd3`xEj}Reb+PPZ7kp-8 z{QshLdS+?E^)v9Bl_?*!d{7_8fWC=@^)bRx4iHgS5pf3Eb;3BW?gKB-0Dc4&pzo6# z+@bN$W46ALzX|(C*W3zkjatbRRW3J2wns3?PU~b}y^nqM&sCG!popn{j_s7Q3JRv( zE3t0?gLdd-ZV(JQZxLPl^~RDB(z&Q-G42E=RK~_JJ}aT0P>KW|KCnmTFBxJQ?a7-2 z;lueGicELd&~p{YqYr%F&22|t0a-@M$EV;g%0K?B>wkkP*H>ppjdYx7@WRrpabJ!B zELnZdpBh2$62ur(0+=CF&8)R&^#n$m-m-YAYtCm?m z1|>E$Ff%V8mA!IUMO73pK0hX7ExeDUI2mv47XL7104}jcSnIL&9*}b7M^m;$Uy^p3 z5`^?Su9(hg?%V#UeD9gfDQXE2fz-tfUZ#qpb&Z|_dcq%}XG+0(;7Dw=o^GIPkH!$e z@lzp*v~}d;0fU_WBnq2un;KV6Jn!yHWy|!(4Y2v`+PiQ`Kw*h%ZqNGPfB0>sGX`OWx24F?U?C2O$tfaZX2C_ENZ%Bs&746AxEHX|cGrtp*f5bJj$ zu%IEkYlnI1v5c*1J9!|bo;*9a3Lv@AHB1xb_ za1JZbt{bQ5(BPH0&=D{r-74{y;qYI5(pCv%fM)uu!5{|%Wml?^YES-&_a=KfS(Cy7 zm?9T6zQDbBdO$`Tn|w2E3Wn1RLz%z54(M4OFyM^Z(iZ9UN}>(zy<`-N!?F`M-fF8;3yzE-=ts!i7?#YE|`BvvBMXV}JiU1*MLBlcT7ZA(>Y>DOP8XWkRqA zjbuEONtL<`Q>U?g>2I#JEw_8kJ5T|leC1d%R5Y>k{v!JXz(?@la18BQQseGiqmeTK zFl?HBEB9qcZw3SeNt3x8@Sie=l-((%rP?Jbw^KXY~VMOQ8Waq+qc}!4h!1w)(`1;}9Fc#*RM&MEN3!fix1LdZ@9CZB=38^oz zE6Hd!b*D-|ap{OAz|J3ftp4 zWZ^YFFq91AYH?6^MCA*tk+)^BEc^@_Eb&|5VC3Y@EhaSV$rQD>Moe}Kn@QC2-qMfH zPjdSBh)`ZWuTaJ4tjCY3P-xba6>&T{j8)g%rOLvwvArG_9bIH+S{mKci*#5oy+*B< z-hDRlNX#5*AqaJC02FZu%>4*h(xVE@ek~J*Zv7cv4bkOgUqC%lSxD6cGgLgHbLoCC zDJJ^)C*RCU3M@)bZ{NhM1w8d)npk>4lGe~PF%LX>lQm}rO|LdTmQi*6d(*J|7r;q} z;KKe0N008eCgaM(2SJQ;WqhQ&bOomHg&;QjZp_>^-jic~ctMK?oN1dr?^nNM#|ED* z;qBI8|C9n_B>-2pcvOvQQubT9S!E-j!#Aj19am%2G2HKn&3ZW+yfYVnjI2l$2!a;f z;eey@K&9tk!wlbY(9`7r;RfVs7eZH}CP0IG$*6h)?G6dkG3WAtq$rMGBroQNb^B!has?aK|o6+7mpD&7{zus41_3NFpCr6V_GTEmfc2DQ#l)P z3{(Z@KPGF%p4*tgZA%$e@i5@hpnkvkRZQ({nr902gSkIA^>G!uheaZrka9k$6tBAv z$BTXfS9T}5vNC(}jV2F4rIZM)FoIW-%|c#2^`crS@2L6fd+;s+`pUXqd&;J3h7aIIq2EwLkO*$h5%7hv9B((ndjM7j(b4h|`NJ$fa8 zDt!+5*tk#GoxI@1J*l33PVsvsWdR?e<|dltGhI-Sw$XfIIC;ycUDu_3apg*!a8rM0 zLjFtp0S?BPVu!AUn-dYPN?}U!q)TkuhEwvK(TJ~anFfDkHguY;D>b8_)$uXA4LT_@ zO@zm#@8X~$S(9n!?-za;tkuCju2VW5)#!-15N@O0=k&D+Webq7iRI~K1nb@mz)J}k zK-Fe3s_=AnCk0jd$xPUyjr!e-Ps3hKyR)UI+NzDd@^c7-xGAl31C$_8wzft12a*`* zszy}*BE=yg8j`@59=`ptP|>|V1wd6}3Lkdd%bS3vm;{%6`Kd-wD}8cU|q5Dq}t0n-uJ-g3MS^FU ziQl;;1r@L9fo9~yeA%xH@(JwHYI@>*zR-{>rL<7;v5h4 zWz5A-3!s)!eOsZAOKgFuuO2Gq%;|5@^ABsQ(NG}|DgR!8)XA*N>PoXJes&6fX#JU{ ze`W3kw*+|=r`L;*Wie1GL&m1>c}Q-0R8E&jiXK92<1`;CPpkewkyz09RYwy2tJg(C z*@{$pY0rB@&>MQ>v~caG=-CJCKa9iXgZNs>e0VT%*B_xyE7UzdC9N778f-q zsyw{}(<~jv^=9(z2Och4k2wHV0-1mPEYtl!3G-mecBE|%O23S$C517vzf;P!-xuc_ za>cKxHykl9_V~nCCDQ@+`SK@!kHMO;`alJ2$02=>caE!`RsZRMb9yD_ltqF;iP~BZ z3<-w%Z_N<{T^;O2&D|SWOZakc!yQ##!w)Tm%I_)i$fTy*ErluF@J{N4zV^^fC*gQA zt3zFPeiX3nMKg6r)!40-P#cZgqRrS0d0Sb@7u04ha(z9 zfzX`Qn)h0-JZ8B^^6N=Aaa!tw`@@ZsJAlr~UE3gN$%ZPCQ8;wq4_}(dWMo|eyJgX@ zMnO-2U!Gc_@p=|DEPw2K3om!WS!-AL3TB2T1+u&mY^T_b7g3O4hH{q8&)#i3q0_TI zOV>nFCl1n+oJ=A`Y7iC*lk7FAeKI=UKue+Vs#jDs5tjQGtCUD-q#KPc#p3mBx<*eY z+F!DfN*kkrbrZ_QQ2|Bcn!P8s4i&Z=$V*1H#`<8|crq02K3O3;lv1j**P{9|nsj|N z5a_Djd~DG9y)Z3jX$@%^Mx3ZU&4Ss#;TZ%K5VUdjfW^kY3{5g=F>vkhasugD24Tdzv5{wx1*C#f1rqt zc}?#bgHf^jLGKlr=~izIb?4SbIMmZ^Ig8a%h?Jbo16r2%b0@^N$Wq5_ndLB5s$l-U zu-~kV*Bek0h~8irX0WG^0s>Xdog`(KkE4BxLE((tY#yj!w*X}rxn;# z`|W9@B#DQi-Y7;3`f2GS>S2^>gmh9zK{+95x744gVy^3^`>ycs2mv9N$3CA8E6Se| zETt7rQ3UC*Y13c@Es*$zCx}2F?mi2LU-kzv9a?=f8KhMaDv~?dbz*UOA!gZ zj9Q6HJRQ|Nku$NJT3-Mk+bp-*kCu(S_&lqh8kR78q3(Yz;ybUSJ)(p~c>Yp1X8VzF z;g*@$YI7tBh#o;z33Gm9F7b?~jcFkTDyaGqu2DqVz|&p9K2*V`n$1)P^Y1RX?xcMY z--5Ftx$XSr3S*4fz%(+>S%ZKf0<^HQ9R77mKh5F{_ zv~?Z7y0RzPm8ft{Swu-07sdzo-0^G|Qtuq)C`EUgy)-5V=eZzbD&d-mno9JDuiV0b zL=I2M+KCx`kA2w%aWqh#Fpo7+17aKz2&IW_xozLcceH~C2H<{NgB|jQq7zTh6`#}h z^+%2ri-6;I;^UPsD%%LL-01TuCD63FQ@3b-V>_ko9J=W}q(G`L3Q9Lf1vRICea3MK zVbkUCURa4K*X-9eVy@7a)h1C*PE=l9Yo9uP#|dEzrY z5?Pl42SHHFWf6AMn4UQmdDuA}C-vww-|KzBsj(Vs0;x!d`c?Gh5ioBJa+9z{O}1<0 zTY0d!HJ932={u^7zNaAC!5U%CcyXS@f69Vh=F$+=d{j^05PVBo3D~p@())jVE2#_9 z)N+Xp!2MHIXN-jus^5&xBosH!=(zw-rCB`H_WN24O;{ds8xdbQgE?9JyLVp4e!ij5(N1uOARYxF>^f7g{Kj3ORB`;X`+@{ef zh$Tctfv7|Onhs;rWl5{1D$5~4_P$v*9E`j&X+&|BVfWtIc_N_>0C-r}0@t`j|6Bya zhEu$!iiw;!s4HLVOEft$8GsO?*`5l?uOVsc%h+~24?%w+nKW$B8+2L|rR_P@M{nOh zU55?eM`Dj=8y6yXF%v`#lKMfnp*&Yb)6JxT#=uddKFDsIXi&gxWM7!& ze2UE@vrqSrl~xG?B?MB%XpYkH7QxzWKiNHXzW{fVuUq(V8xmh#pufRY47}*uBTcyx ztKgL`bohbzqauPc`ukKlnwqT>-dRR-88vgGGatq*E8hYJCBJ4e8X52euxTK7laVDt{Lbyv{ikfx>H|! z2A2!7CM-I^!Gg?6C${wC3}iem#JFvaFE5NoMo@NVmp;BxgwDC?@Xy-O9@wo(t=aW9 zCvHR4q3H5(3DT$)j~q3|Y@iU4uC&c@;G65Tv(@hZkX+(1q`-LJ6;m&PB0?}sxd?JxU1x&`4n3s!bW%!rjh)GGZD+r^xkjoUaiSod zPF)Q`qP|s4WLJhH{2-lzv_UVnER6!U0)s(XS*%hlve@LF3^eQHp^?!%Yj%Pj&hhM2 zrf8`7T3IQ_!%msT;02%bsb*La{Bf^Q0YQ5{B- z=;s2ssTaI7aU8D|i9(02UCSar`_sFCm5gwPa+U~Y0j9mgWTQGdnwkE$_=s*<6tMOq7<&+YKpa911mEQ=3Vv1N(+2KPP}b1z z>8ml@=Rnjv_h^BsmmM*a8k@ZRLHQO6Nbi9)68K$&x^2s48f?r+dc-P%Nd&;G@E2wC zE~9#UrEx%`ENuiBSqe^VM1@ArK2q4*mdiMf7i|%gVdf_mUmexVgY&C^d_V$&dD@Oa zELqlzx2-t}XEJpq0dP5b&XzCP^IFcgwmmKm*A3RsWSuuJuSJ6KL9i)Cn%zXOS(cvN^F zzSZ!2L!%!juMa#whfC%GSLp)FP<1me=uHZ_OH9;@{Ii0oV9}_IBbvZEjp(WhB?K=h zslm6dlCm&DbocJ)>^lN@1e+gqdDTVcq29YJ5#BA)bawOi{lc;}VzIdh01t=-R-m@^ z2#+$lp_fv)w-JS!cEi^GcQ;vEX;aT4cjXEAsr#mDfrEbJf_eG;tGZvnD-P|v&nAI| zy)V`u6}#wO)^fm~L` zP^_){^&RXG76a#Ml8uvgV-d3`&9JzJ!HqV%HiG8Mbo5umeBRHc8RJ??YjX*9v9=uR zYde0)F=v0a?KShfT_0Z~04OiK_2Y94E;ai~1m;Ay;RouDMO82f8Ns>7=MT-Tot$HL za!!5CeviXnxko)+olSTn-!@2hS;vScwl0?w>rMw()0JpWt#kPXzQr+6#3%8_Hz|FB z$)LA>lCqLscde;q;93nl3>lmm-$Z%X>|W+SOb}@ttJiZdUTPo7ZExljYWr<9-3OaC zdFBmHEA6Y$(sBHtbFZr3B0!9LM7H9SuB=>&$!V>vP;zH>6X_**FXG) z-N#f9{<>q_%Eu#=X?HiP@lsA{^ybt0*?+Tc>dzVNnxCD0P0NY1O~s+ohwe1g@8BZb z<|2Uj;Mq~n)hyH7iucwF*a-eyo)9gW%!X;6$2PfIydLrct#*W!)AeFvXgnulQhFw% z&n7wKgYu3kQ}jbMHAg>*$VjHCm0$5;FU8SDfp?y|8m-F*mBwXtOMk9|sCvqKxJa;7?CFSv?=EC0dbsKA>9224#*wR#{3Wix zaJTdtcKGR5oUwC#P%@&=lXbJDt~Qqz33eR$Ckk<&pxWs}S;9q1CE(beQ4W=)pBmn{ zT?fVu5hmb3pZU`bywk?1j;Zt$1Jc~{;&C{0D^S-rR;x@URonZrD6rk+#!Z>5%ssL3Os;KZ3 z%q{Hf-#3!dbAb5@4G7@LJ^&zN&(Pknl2>xf0=1IweNRkAm}oJdJzG?$KKKTc z%8S59ctV_x#MxFELX{O@*;4}!)cb-C?R#v1x!OCe;=gKo!kq+PV^A_A`Kbf%g6+d{ zi07TwvpyP}%0n{yS|~2~#rQ$R%iY3f?QTIW)kIx+0jMh3GDWj7U%>t}CX|JLredy| zbk)u6kXP59?sc_7L!h(kW~+feE{YleP=-6S^HsgHwsNm!yIfHD15sO1refs!R2$-i zb|5sh!1zw<#VVR2>`stfOoeRL5zeTGFvId-d0=Ngy?+XQFrB8B31lBZ2oy$me&bJ& z4%B~?zkrR}M7x==6)p4g(m#b%WN6nRTY;r1QP!2XC8usEY7PeU*+o8U2iN<} zw3zMn2}m(9ZF2>O`Jx~ME8kQV984x%_QP&vu$(FjuAX9WnKY;P1o(OFVfvg04U?vP z_|d~Sz)hjQjtJ8pe@r7`B_8x!DqkLX?kqDDx0n-o{-SZl|1tJWI<=rbT4X0HMz9ag zunr9D4u4uDwyL3z{qv`Ha(<1*PQUIQwOK3Yxi_zvI5(%A7rtW1M-`uZ7HDg0U0L;f zA@Uj5l~ctH)+K0|QtkySA>wl-wHRmXr17)DZ`P#&yb%g?AW0c^^pk;55|Xy_*B{Ai z;LywZpJLQ{aZK_=$p8mNr$AJRdYD?CC!ABZ6@Ht``lR0^a932g*;T35;TFYT>Sc+4@QFoNcV5D*>hz8|Q zAVCoH&dLby0u;LbO|>d5?iD@aU=wNK+OX#XI5 zWn>HM>yel3sOOb3ph&uvW`v2{X5_P7|M=GCRuLjF`j)MMmj3mtejO~;n8Zgc&0}lX z$1deVnx-xi>S=X{T1Lk|w)#`jM1>>hpS^klA{K+kOZd!0;;UL^<8`U^}7VYQ=@Y3{6 zk@oquA_qEVZKWrVz~sm>do)F(4;%^j%`R6@-wq(k#HpJn%9k1T8t*}Y8ANEiWY?sA5)_dXl9)*27us(@gg^XY^D*eu_=x4f8CUft^*Tv- z!cBVP;5DV<=> zgL|YK2A{rb;Ekh_ZV0OV40r&aBkG*^pYG17NfVv{({0 z+qT_1?{~7lU{5v&spKFPRw}97x$a&BcI{M9G~P44a}?=U1!i*`Cuqi>&Ip9D(45n5 zmHc;{X+jz3T%;3*!CoEIXbuz88j4F`(!Gx30qsGqKkho^-IlBmF~8+20mP&#f5JJK zg^6AIADy)1lf$)2{xSrQ*wCV??{~6lxN1|n{c*9sJ~apHDIDjyufCy#m;Bm3j<{V( zj+4_1L0;Ve!WpS1%u&(>+*EqQ(lJ&Bwb79gsgvUHg#q`!zZ#+e~Qli(rx-SLMDDxSi7cAThXCM9~J7>ClS}{?LCxqc!i^ac6Kw*OH+(v z)WJi%pmxuKCC4fb3UEn6QVNg4M(v09c%l=Kvwh3H`mOy2`)lZ-R>lX%iB}VZqqE!N zF$#=NpQ1^=dNwqV7+dj$NYi1-=2|CkExvG2j-gR+O2QKZiD?Cvkd?}E0w3av^P;qT z&UINI{T+;uXU#KjC4m<>Z03Ein^!m-R*7Zui6YjZn4^Ks_3QS|^fBT92R2u%$qj3dq?tmDDlP_te?Vs^*&8Bx4*#b>9e^S|!lk*|+yXjSXSUe4| zRDX{9gXv5*8Y}pS(se7g7S?)3m;vj}^M%0=)m`ihV)flP%>@io0H*EkJP%(&_a8^M z*lkf9P#xbBIkYx8VwGefX(H?b_D9Ya!fs-+_0mOD>q-Xhxf~M?YazqK4NlqU3s?SXJN!+9iv42xQwsdsvjzhP5{%-po0SU3D<0bjzJDWW`@ zqk$6deKClek9I3q7D#u|U=N4Ld5vU~+OthVT07jtroMXex`HG|g`jewpWY)?<+w23 z4M9XV$*icdBoujD`yHh0&D4A++48Vq+8Z{zmTg^7GYO#fD2KlwNOJrs64}3RIX^+3 zq2cb9jd{P}ABoaOC+6qryFDSz<4(mcjFa4inAI>rk}E5=1J^ zru?cb-klh4WrLx4(EF}h$*$hs@&tt^2JxS$;~8PgyXC^hurDX3r#Z7!42o2j;IEf^ zI!}2*b@B`Rh|CnAIpsLFP%+#<8AmU0ZA7a8_}tFFL4j2)9(vwf(SFI588sZVdz9z# zmp$@KvSkuJ`HA3eQvDMCqCnATIeDo`Q+r77r(xlpdqPpp275pMHD%A10W5L_AVGyPOaG7?v)iVbIPEIyy!jBZ3I#{B z-POZkI)fWXoSl*_mR?`V=dRkvn&%ml)3=cp;e1tI-f|2o3kirAf$m5-Zz zKE;kJPf2cRwX<#v!n@n*Q})zHkb*bX&WF1TBKA^KmN6Z)t{%iqkN~5DW`+~*_6aW| zHLW!zgG#LNd1R%|YdL03hwt^(^W{4jdr6P~W(XZ}p~d*-VtZYhE@cJXI>Z#eSR%v4 z4&JTOn-gktV@Q-^Jblz)pdiTp3fsu14{h3u4LQZK_5v{7O&lc(1BGZI3E@k{k}q}y z!`arLG(b?cIN?@XHno;k+q|+RCJqjK)w3Si5MHV%FUxWF0W@n{EEqo~gw&=L=svrN zSo#sVKxjbpB_x$INdgS->>TU}WqyA=HXA*@fiDgW$Rx`2$6HG5YxJl2_L45-7Hnsy zKW?4Onu1WO2MM1|FA)6V$v*vH`wi1Fz6%-l2dAIWv*29u&emuDXnJGRfeq-ju2mOE zw0KxC|D9#Q`eOY;?ZLh#?5h+>Ek^fD@PB$GJh`GrBCT1%Y5h|gCy*ZYdugpJqldbd z_0Jbdpw)38_$F~*A!LJ5%Vl+}@ymD?G+@H4J+djfSlK z{>yiP!RnXc!ud=_h2vi#tB<3?_$`zN9GFb^=%s-AvwR-~hji73*Ecz6Cr3^kv&7X} zZO}{%stAzfcAE2tdu%H=l-mCGI?#@q0BO}mDg+($6$V>R&2}ZdP{_?O=Pid`4y?Y3 ztHM|;|DvTpe?=fdURhvP#ZLt}>!aCv|vs{8`^w6x;xxPi9ZS9U5GYRsS+ zv%&jezoyfvRqQk4*#0;D+l22AkuB1p;*#J1VFbeDL%D3LO6Pjd6mAPU&2~);F(dBl z9D3nL1(G4+_YqLDae*i^7W@Lzzly;5K$KuVIv7IWGgt|;{N8`C*s{)99mmV8jo-ax z^hb9;q&WGXE2!-*vJO~W~dquJq@Q8Zc!LgbYVRPjZRRE7pOP{fD z(D?XH4jj^gz^O8MjAy=mqLVb{p*fNS0K{k70=QB{Dmv9(llosGn@N)Nw8F!OCn%hv zMz*wI^bYlHG9z1FqAAS50QP-r+7M8{=4d`zf-r9~ALrKHnXIN}he<{-4X^cGXPuH$ z4xAFl{48w=_#NHP>*=7k#$rRygqYQ`(|(RC&M?cPw`4Yup_(F-*bhyKg%tSz)BLix)#fqprUr^3!9eqOid8qkg=QECHzK95;kEV zP~2MY!%Hh&x4;mUlr-4sJ_IY%Yb9h-b{cJ+%}#ZYdtDe1zt}n4PQV+}hF{|w6yFbA zzjPs%6^|-99y$HkJBYgi2JnqkC>v|udZC$0Bf&V6jw=TQ}1j;8r+2zYqGJ?b^kAVpyzBYcw zz+WlH0X{`oymyEzx6Ay=*46+&J-sTv8IiW-bm= zJNbUdHxMB}!Y#pssZ(L0_&ft6rV`#;4!#~i9PF%A7PucA9Wdr#fJ4ILQ}ISex4B!O z)IsNcJ;I1t=W8n?p1CK6n{>vJh&S!ElcU*tPNX0FdOY!q>QW%)Q6C-$pNb}96oHrc zd4>7Heq*i#x-c|!SzcDlX#7(Ov=LFDvF%Fp2E{=9ao;R-IZ(<^Tl4t{>gJKE&j}8C zj3HR)3?rJeP3wZ+mdr1!BCpK5&#iwNEvDy4BtTRZWkz z`Zo4pQ5CjN;g>zOr>maWSln@aDj7e#Mxo}ny*K*sslb^{=CEDr^m^;P&)ZdcDUtOj zSL+GF*3hHkY5>~9m5N=?py%My8o2yq4hc!5^YvXypkouN7M2+iODq|FwW`z$ zCyfC7$q60XbsE6=J$uB`9{Kt3<)_JN!RfV=Kyc2CSi*oXbkgP_HT0dv*a9|0gOS>c zMdNcbhx5P_LgDKskM;?*o|Ep5mbNz^g?)OKeZ=18HxlJKnD34Tf!`xl7sY-eQf;AcSJGl@^b_nW`6kkx5M=C&3YaQ=piSEH8Hm!)s(md(S=S>f}hexW!?l=T4HnmB4-2PE>Th>@rB_!B>M{f1052! z?!hT?zGSbkq%Xy71kGU?o;iuVpEXy^RFgin^8-GWY@ogp4dJv@GR{UPIzgDNG7N3gc*Gjp&N(+yw|a47 zoHNkRHpbD3(#pQtBI^64C3J*d8(IRN{6f6?Toc#HF-vUNZ}>Ddkz2GN=gSj%{9fB6 zgUeHZ6VgWukjPK3K(WVwd2I+g8^CL{;&u-n489jnEfP*XK{DMz)cQ#*gdxa9%5(kI?L(|0A!&d(_3Ij5mv z`42MSHNv;+i(wK1ia+?1>^4dG4%#)nfBw^FTL@0>uMOoC!zNM_hOJ^0l2yv3uuT#{X_h$5-%w3Cv_VsfedJuKoi4WB19?MUf8Wl%SbG3Qi~=zR~Ltd zf=h#$2m*0^%&kfD!Y%iL8vCs_@=PweH9Z>eSyScBAR`gCSoP!+rg0GpvezjJy`v!C z_Vlb3oV{{x(r^Hcls!>2FNbeQ8BbBCMF8E4UAJkh_ zhsFMlsSY z@A-y8q%yU#ls3buZ4hxF(SN5;s|&)6-lRI00ZI$ihjUcrEWh~lq@(7!igBus`x%9=jTcuET#9R6Cij~NO$}iG;P+8Qyl|Mo zG)gmeqFCp37YF_%`enkqAXMh5t3SxWKeZAo5$!O?&{Y`ih_c8P=b=7ovCv+sMg@oO zOE?dAomd6k=J7qm0$of|kVxD3;r?TzYx^0NV{(}nU9o^IE7Q5$#`(GmFQ@qpjzzu3 zD|)Nui4j2NWO0OY-ReN0smW4S-MTGWL3sT=o6Dm-;Hp~Hk@xqg{E|P8JRomtG+!D! z0>@R5*j@s!T5y19AWj8CZDhf(2$YTTALUCd_%D7MLoSjVZ z9QQ6IYWiq#@KXb2iJLg4(*%uPhnAEU3mXjfaed_a$!>ZX&Yl1UEpj;U9eC8H<<6K# z+24^|mu#4t!o_YCpLp1;VJ%$H$bZjwWHTWULXd~y*$Ej5cXHg|$X33(se*_Fv>Xla zsv!bLv=+>lPqjA=`evibd^LWF_Tebr+-Tx!`NHdH{tjIAcb5}_4bS>*I8KH^SjuZ1 z>fP48emg=vSkj~aX+1XBa1{Cm>hFp~AhWn*)>q@8Qw9hk62jA@(S0M8UMP@yh+w(p zT0fYVRgLf>)wqwN%N*E8Rtsf(zYJPqtvJBcICJhlMRwPjlXG!oEISErYs4JsmDE` zCKNUl0;;5fS)0$zQ~%?MaL^*_`0K%=MprxqEZ`sfN77l5zDxjP9X-4Lj7FZv!sv#F zV$MW{Em>>Uq~7l#J7mw)Wrx99MH$F^|EVGJbO+HbwqEDXH7vBf@8N>9$BM7G0wa|c z#(~9w?Q53M?d_?c0Ym~g&VR(5owYYm261PRh|d;GG+I4j|{~z38O%CAy!u7)znvguIhUI8oNB+cgQv8 za&Cup^%d^EU8GDD>+r>C)oi|ik<16~&blXLly2U$--&@Yx(FoGV$|g9A}GTgMA-%v zE@+@M!Y@tAd7LB_2M&s1uZ}#^lp^voi!G~c|1t;d-HTaR0W#e;t)Jx%Z(f#YuJ87h zmPNy%B##6a42`c%MTYqTPGKBtSQqCnz6QEB!%nsjdKs4q||M=oRmr4X2kCsqqi3 zgp=vpSZU%fm>rVWLXLIW;Hm$64`ak;Zt~bkS6)xZX0*aULX&x z`vjVsI%y0MP{b}oZ0LcOv1b+w!i{b{6n^xl^WEV16WYe8+G`aK;QM@Xx{_)q^Bi5q zLLS-vDMDebcI}T#IV`Rlu&QfN@GGH1Ay2);VZ65Hqq@yP;a>EnoCE!Pb}n=C<302I zx7Y6eq8y**hgtTvE=DNsp>(I<`}Rpmxb&H?hC`vaPzf~P6o3WlRqJcKvd05#412`Y zc?}Jx3^~(pjwyvSwYTrjWsdJYra^-g#yVNCq*!-cl(z49x`& zFju`hLFO>KKjo)T=-H`PS4Eob(!s|Y1J3Ku79%!o4murf14P>diP}v0HG#};)TMp$ zwS{oy@9LoZy&p*i30SUuSN!D8DE_cV{L8PGY)utALWC+JZYnxP{Pg9fnQr7WA%wNB z(e?*O6{;&ccP2v*i`s!*wJf}1dNCM)d@m?Fhju@8hC$N!Y*sGj3|89gQ}NHLPL8nK zDV~WdsAS1NXFn9RJ1|UEV@rQJGB&kT^2VfjCWG>`fDyb@P8`K@VtyFhfk2BVh9NK) zM4t9adf#P)y{Ejm#Mk7?Lqo3)s`d|Mh4|XnoeM)i`lQT?Fcb_UJ4>h$oABgWsseGr z;8)kYhow4(ccx%NxfAcLENt_onFwNlK3Ui-F&>r)S~cagPzeXcO*(JP?N6Ah^cNu@ z-#Lzq=>T@;V3qynTcI)5kM(feF#MrGoR56(4xHK+?uNXk*)rpLdZh8UXGD)h60-Qn zwD2cC3BHeKZyGouQ9*AAT&m~QYX~m5-)n9BA6hGjkDVBIODj09Ome-jc5ErhOFh4= zhcwuI;7|h0aHeC2*E0m0mTOF&&LE@DFR9@_{RU9xf8kWj2HfqWhOp=a_6$J$jI0S5 zFXUL88l&VoskXoq#jj>KE)}i6*?zz}A4%cUx8@T7QD-16B^TvQK=#e?gw=Od-bPP_exE|0b? zoPskEfNwp-OKw_BCiyxdx*_h!%7QP8eV=%Yui>9dOnhJh#mgG=nF3_K18Tvmowxi^ zH>0i*IDRg6G}fFD%f~jDYA91{&3x%j%>^0Jr%4Jj=_?Y8x41DbNWP*;AEkFD15U|UhEzO-c6{%andk)KUGOo?>0-NwCLc_6MHf;?pj z3J{OFXd5=|75o8d>P}zIHz@>=HDxhn@vI}uE)V(3bD)>n@I(6egrZ6lO9#$H~%noa=#56Q7e5I9bh+XP@U&IbIo z%s*SbV%Wm9;CWZS1J#xvig&pEX_HkUP7K)4Un~>zFiMcD6x@8=q) zzTMlIv;Jl{>Qnc&$_?zE4n%)iLrS}AJcZ9`AsSyvqd{ofV8puZ`6X+CRIOG+3}#=& z!`OvvtJwJ|0O5MC^hfIoo%`h=KT?!8YonU_Gny|k)ESj@vPGGWdWM#kY?R4&itz^S zHCI@vqYY^p83Cg<-omi6iWfK+)fGXGDuyZP`fw46W#chLyzQlg^*7<<9DPS6H;%u0 z9Uo|=&zVR4NFvmfDhNtEXZCIc!i&jm+N3^39~6_M^IIkr#lkf)3yJ|m5j>$>vLlau z)uji*MG!|ELQ8|ppbWFiqp2hI*LOPH43=?An#F&8`Ed+r%kGW4l+1wrBM7R7kOr3stXVc878#Jh@Qz0c;4nD_g7NlpUz-wY&(2 zC!w|Ujugt6$cyEHPP^F9_#^Mgr2+!?qqI^kP}0c^08z zRATT`o#-gK=!S^5v_M-kevCOYWF^|3XCF;Q7Y3y@G26=yTrlkJ2$my}@nuO$bJeUQ z8Ht8VTe1Cecy9vsA=^HPd$F7|3;SlBK>r=mqR)P|sW$L6r4$aqI4&!eJbP3AR+)##Er0hcs1X8M!K z)zy^O!atTa&0zxui5@-eF*}ZF2L?OcC0^57VERR1S;6BSRD*i%iP=#Pv!Du&DFFwk)GpJ})_dn7er88S``H8)?rFxD0!1ag+NYm^*7%7S15?l6B4}}n zPs?IUa$LdQcQIfCwtsZvB>QK-YH_tBLQ%Z)uP>*e*W8T#O?F&-8lnk24+aIB%+?#( zPv}qULMp#hYuu#zVj35vcRB-Vciw+(N>aPP5#_C)`ou1Q50TiN_9wngXn`B`Q8Uci zxG;JF2kvAHBdhRN;De195MowF&T25B%uZ(mtEsErqBV>A8<#|Jb$GVZ9la@vxD=%% zckB5Ng@@lLq1=DezgR0@dX2hg*4kZEZQbE`+y>XxkzAV^Hz$NV%b$|s1J5^GEnj5I zywBP?tbh$~UO%T=TzfM)ZDGI~O;o2yuC?3J+WsK<5Pd*|i&#ikT(;j*e$Xro3QTK< zkO#W%0;9L?{dmkhZ$>AZzq(Ozp&d^|%OT|a?HK{{wTiiJ5B<>JuF(bA1ntaY<#3<%++i zM`b@2hcYWTbdD=q;DsI_UVDst%F8q5zlChihPCReQ|dykPjG0I(^71$I$aUzkZt>W zT<0m0swW2}s~X*0{}2-r*ugF8l-4si=A0rmh*~u}RXEnI^5PaKH=~_`L~X~eIQ`<6 z)a>$cj~Jm915*EvBl_DnMNv6#*)XxaIFh5G*F=}r zf%Mwo8p_?Ol?t!=j-p%C$q@z4gJOde5u2OMl$)oy!=Bws)t#$2yIf2M0pW4aWF=^R zVAHV*MZmRJk9L7(hGQ9Wk8z?WOxq&7$!P2$*Ozi4_1+{OJh|- zM27S&J<6siS{8HX#Mx!>?9?n3p}*so3FbYW8R!iU!O26%%%2T=$Re!{d|O-nT;ve4jf2MjutSf%2gBd zl`_B_(XbS4`pLyYb97vq9p~}g!Dl~Px7x|~oDGdCAsElfZz3W>xgpCV@0(sP`&Omy zL5Y~8sPtXRd*UVU2fw`e)^T`Tjv3ScE|;Mx@bN@<-|Of)KF8cdODDD=JB*K?`PBJ(j^Y1tq8 zX+qO>Q%O@~_yLLn%lJ3uz`a+^6&;m=YluqiPXebS86e{{Mha)s>W7O2HvIV<8hu|A z`cxR{ zbC``?GkI%NUeh~Ic<<6mC%FIWeK@)M+-SQ)k8(p7ppa>ZDla$%SaUG2UlOlG997|= zbiDYr2rhn_2yldttX}_e!Mp@7$$+-kFp(*ET6@U?{(&-^i}Sm@4#UX#g^_E*W@Aew zvXpnpiTz*++4N#KG##+cLk(YkJp9$VjxY>k-<^}4g+m89jSk8FW*=~+D9(K_x0(Bs zM~8s@Zpi#w;gFjQSYTy1xd~bP!+77iQnQoR&>!vFrv`ev0#{1mPi-Lnm2*9pbqi~F zcWBj{26cHqQ<(fbsTpfy0GO=jNMiM<_;^Ndh5VJzF)E9xSr!&HMOSuElK4IJ;AOI2 zl`<1k`gcyIX>F``S#QnoZwaJYV{dHWCsrmYBAuk9o~{H=GreeQ*iWXx|s3};vj zhGcVxn$AvNAQZsip`SpkEilh>ozXi zRzu32R2u?bMJVDU#F>zBmpac(-PyB<{QY4JVilMkj;E$viOEgk)5~4@rrJK#&XjI5 z!z0hA!7K*d2^L9?kn}%D?p>-rWI*u#lkot-M5!-f(i7@TYMG4AaFEXohI6wMu$x)Z4OL0{uxT0Ru4R921$cn zS6{5lL3u|bB2iGln!I!tq3tU_qaq(x1dBlLdebi)=iL1aZ$zvbQEe>X5@ijg8*d9i z66)7Rd87owXt_Kvw!fE3iXMX2xn14<$aHVrUO)mp6@S0tZE0!ZQsBw=N`$_W4_S5- z{Uxc!zqGO3?IzKd47z^%D<+ken#`zowENKz2M3O${Hj(wrwRzmh$ffzeCNw~ z<~k)OzB(U_sBld}e9Ju=kQ@bi)B#^=#{dyjY(CX4rRv}Cd}ySQ;F0j_{x_m%-kFF_ zT|}1h=$^0|LEh&^^z5=6DM6R&$JtgL50vN5@Z&p`Ud(?H7*`_&N@QOC+T2m{YLkMxES}wmB4% zsV&0=?T7z;X(um?l=I|%d=t#?gO0kuSxu^~V7hUAN)|}u_Zn5321dIv9sqlHaSfEr zj+QO*r-pR|!Ry~2kx8H&GsvnPOZ{tvU$W_`jk}bPdj3eNIVqndO{hJuol*inc5=*+ zR^%o7j}_O6(Eo+z93mqH(d#`s?r}FoUxd}0QRMcfft|<~{FS~bn!a*4mMtQ0F8U4` z03T$%9|j~xEV@!NFcb#JZN%O_cW&piY{bT+n8{Uui zheDv%(m&UUwv7m#vTW&ouMK7ri4nPySd?h7-cuk;CM(w8a;#7{HGp3ES)$7Ar24M? z(bEH^Hut6C3|2RBylptg2Mm?-r%@6ZL$ z^cyS!7I*ky`a$)pqMs)I`OAF04@zm{3BGuP;!g#EWaO&2w*h|<1Z;^5*_7x+<>Zk7 z>(ZYX+&un1E6oq5Ofs>!s(GfDS;xHMef(RAWXqFsl0N0ndD{tg{*bYkoRmcfkD9TbX3!fh5u~G-DU{w&SDC7zW?DEE?HxEN~8Z#UM%n&i&$F@s3kWnyg~MC-9=HpOsl$ zgzWQGi!$L+SczMI8xN)hD>6~!pVX2!lYpyK4|_tk;AFsCcPU)h{dS6~XrFi(e4HR7zQsL(%YYT|UAI@)>fcN!Z?MQ;9$5MFaA%R#mx z2`1>?Wvm%>XORvHel(!z;K8yAW8n+&N_f4-0*V3dA(=@_$mW`IEIvA$Li_vhunL zZ113;EHwq63C4`e%#xxq%ezJF0$RhrMo&SH0vqKxEAzxdHS z@hcjfP}2EO=|L2XI4kP4C@ZAvjMCK)(;?f|HQ4wDUuqah4UYLLkOx|pemhnm`DNef zI==z|0f+EvHrVI9iug+QRR_yr&5LBWt{SFIa5yK-Oj5eQz@jrf$rjE2Zbdl=dI52o z(fR&EO_>GjrG*2i|1DR0m_h`N>RDbn)tj96vVX_Q*4Ki2P}=e2t8htjV+hzR#xub> zUQ)+mAzK?6UIx{;-I>8qAgYNgzVlUyRP~%=hPau2cxv?H*>(6aSRJIC2pySD$i=kY zy9WFIuEOP@>6?%+(-M}V1CC~4w4}k@>w67XRfa-dY34AJEU^2KA2A%WLS)bY*R(1@ zbqHf0PSJ%oR>aa;8V~fq%|aAop!490(;WOx=WTRecSTwd45e=TE9b}a4V&ll?(;;RMzjLDe% zdb!I5)81@MKp|rtFT6t(7*vR=uAE-DqBG{Q8~d2W1=ZVXmwTK#1N>zyHIVJi@MU>7 s{r@6+j{dD2GJ@yWGmHF*KMh6?<%sjrsuW|M4vX2h{3H0^$o&id2YQ6g+W-In literal 49398 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 XRRfN0WB;GLjp678Xo1mxZ%qFKhO?B) literal 29472 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 AZvX%Q diff --git a/apps/web/content/docs/content-engine/fields.mdx b/apps/web/content/docs/content-engine/fields.mdx index 50b95bd52a..2506ea756c 100644 --- a/apps/web/content/docs/content-engine/fields.mdx +++ b/apps/web/content/docs/content-engine/fields.mdx @@ -10,12 +10,13 @@ import formReferences from "./fields-article-form-references.webp"; A field is one property of a content type, such as a title or a view count. You build each one with a helper from `field`, exported by `@vitnode/core/content`. The helper decides three things at once: the Postgres column, the validation of every write and the control in the AdminCP form. -```ts title="plugins/example/src/content/article.ts" +```ts title="plugins/newsroom/src/content/story.ts (excerpt)" import { defineContentType, field } from "@vitnode/core/content"; -export const articleContentType = defineContentType({ - id: "example.article", - tableName: "example_articles", +export const storyContentType = defineContentType({ + id: "newsroom.story", + tableName: "newsroom_stories", + fields: { title: field.text({ required: true, minLength: 3, maxLength: 200 }), slug: field.slug({ source: "title" }), @@ -26,13 +27,13 @@ export const articleContentType = defineContentType({ }); ``` -The example plugin's article form shows most controls. The first half holds the plain values: +The newsroom plugin's story form shows most controls. The first half holds the plain values: The second half holds the references: a user picker, two file dropzones and a relation picker. @@ -41,7 +42,7 @@ The second half holds the references: a user picker, two file dropzones and a re withoutBackground className="*:max-w-full" src={formReferences} - alt="Lower half of the Create Article dialog: an Author select, an Animation dropzone that accepts one GIF up to 10 MB, a Gallery dropzone for up to 8 images and a Category search picker" + alt="Lower half of the Create Story dialog: an Author select, an Animation dropzone that accepts one GIF up to 10 MB, a Gallery dropzone for up to 8 images and a Category search picker" /> ## Field helpers @@ -175,7 +176,7 @@ slug: field.slug({ source: "title" }), A slug has no `required` or `nullable` option. It is required when there is no `source`, and it is never empty. Every value is normalized, so `"Weekend Pancakes!"` becomes `weekend-pancakes`. Slugs are unique across the table, or within each language when localized. The slug is derived only on create, so renaming the title later keeps the old URL. `source` must name a `field.text()`, and a localized slug needs a localized source. -For records without a natural title, such as forum comments, use `field.slug({ generated: true })`. The server mints a random token of lowercase letters and digits, 10 characters or `maxLength` if shorter, such as `k3v9q2m7xa`. A generated slug cannot be `localized` or have a `source`, and it is never [publicly writable](/docs/content-engine/public-write-api#writable-fields). See [Threaded replies](/docs/content-engine/threads). +For records without a natural title, such as forum comments, use `field.slug({ generated: true })`. The server mints a random token of lowercase letters and digits, 10 characters or `maxLength` if shorter, such as `k3v9q2m7xa`. A generated slug cannot be `localized` or have a `source`, and it is never [publicly writable](/docs/content-engine/public-write-api#writable-fields). See [Comments](/docs/content-engine/threads). ## User @@ -236,12 +237,12 @@ category: field.relation({ required: true, onDelete: "restrict", target: () => c A single relation must be `required` or `nullable`. A to-many relation can be neither. A to-one `self: true` relation, such as the reply a reply answers, must be `nullable`, because the first record has nothing to point at. -`container: true` files the record in the container of the record it points at, such as a comment in its topic's forum. The server always reads that container from the related row, so a client cannot claim another one, and [publishing policies](/docs/content-engine/container-policies) and container-scoped moderators apply as if the record had its own `field.container()`. A content type takes its container from one field only: one `field.container()` or one `container: true` relation. The target must have a `field.container()`, or the API stops at boot with ``Field "x" is `container: true`, but its target ... is not filed in a container.`` The column has the type of the target's key: `integer`, `uuid` or `bigint`, depending on its [`idStrategy`](/docs/content-engine/id-strategy). [Relations](/docs/content-engine/relations) shows the model wiring and the junction tables. +`container: true` files the record in the container of the record it points at, such as a comment in its topic's forum. The server always reads that container from the related row, so a client cannot claim another one, and [publishing policies](/docs/content-engine/container-policies) and container-scoped moderators apply as if the record had its own `field.container()`. A content type takes its container from one field only: one `field.container()` or one `container: true` relation. The target must have a `field.container()`, or the API stops at boot with ``Field "x" is `container: true`, but its target ... is not filed in a container.`` The column has the type of the target's key: `integer`, `uuid` or `bigint`, depending on its [`idStrategy`](/docs/content-engine/id-strategy). [Relations](/docs/content-engine/relations) shows the model wiring, and [Advanced fields](/docs/content-engine/relations-advanced) the junction tables. ## Container ```ts -board: field.container({ definition: boardContainers, required: true }), +desk: field.container({ definition: deskContainers, required: true }), ``` | Name | Type | Required | Default | Description | @@ -250,11 +251,11 @@ board: field.container({ definition: boardContainers, required: true }), | `required` | `boolean` | No | `false` | Every record needs a container. Without it, a record may have none | | `description` | `string` | No | | Text or an i18n key shown under the picker in the AdminCP | -`field.container()` files a record into one container of a [container collection](/docs/content-engine/containers), such as a discussion into a forum board. `nullable` is always the opposite of `required`, so there is no `nullable` option, no default and no `localized`. A content type can have at most one container field, and its collection must be registered with `buildContentAdminModule({ containers })`. +`field.container()` files a record into one container of a [container collection](/docs/content-engine/containers), such as a letter into a newsroom desk. `nullable` is always the opposite of `required`, so there is no `nullable` option, no default and no `localized`. A content type can have at most one container field, and you must register its collection with `buildContentAdminModule({ containers })`. The column is an `ON DELETE RESTRICT` foreign key with an index on the field (plus `publishedAt` when `publication` is on), so a container that still holds records cannot be deleted. Every write checks that the id belongs to the field's collection and answers `400` with `CONTAINER_NOT_FOUND` or `CONTAINER_DEFINITION_MISMATCH` otherwise. -The public API returns the container as its id. In `publicApi.filterableFields`, it filters a list with `?board=4`, and `includeDescendants=true` widens that to the whole subtree. In `publicWrite`, it may be listed in `create.fields` but not in `update.fields`. [Containers on the frontend](/docs/content-engine/container-frontend) shows both. +The public API returns the container as its id. In `publicApi.filterableFields`, it filters a list with `?desk=4`, and `includeDescendants=true` widens that to the whole subtree. In `publicWrite`, it may be listed in `create.fields` but not in `update.fields`. [Container pages](/docs/content-engine/container-frontend) shows both. ## Group @@ -298,7 +299,7 @@ Rows live in a child table. A repeatable is always shared between languages. ## Blocks ```ts -content: field.blocks({ allowed: ["core:*", "example:callout", "example:features"], max: 50 }), +content: field.blocks({ allowed: ["core:*", "newsroom:callout", "newsroom:features"], max: 50 }), ``` | Name | Type | Required | Default | Description | @@ -318,7 +319,7 @@ content: field.blocks({ allowed: ["core:*", "example:callout", "example:features ```ts excerpt: field.textarea({ ai: { - action: "@vitnode/example:article.excerpt", + action: "newsroom:story.excerpt", mode: "suggestion", sourceFields: ["title", "code"], }, @@ -333,7 +334,7 @@ excerpt: field.textarea({ | `mode` | `"suggestion"` | Yes | | The only supported mode. The editor reviews the text before it is used | | `sourceFields` | `string[]` | Yes | | Other fields of this content type sent to the action as input | -[AI in fields and the editor](/docs/dev/ai/fields-and-editor) shows how to write the action. +[Field suggestions](/docs/dev/ai/fields-and-editor) shows how to write the action. ## Searching and sorting diff --git a/apps/web/content/docs/content-engine/id-strategy.mdx b/apps/web/content/docs/content-engine/id-strategy.mdx index a13574a3bd..fb65b830f0 100644 --- a/apps/web/content/docs/content-engine/id-strategy.mdx +++ b/apps/web/content/docs/content-engine/id-strategy.mdx @@ -1,26 +1,34 @@ --- -title: Record ID strategies +title: Record IDs description: Key VitNode Content Engine records by serial integers, UUIDs or bigint, and see how those ids look in Postgres, JSON, URLs, relations and your own code. icon: KeyRound --- `idStrategy` decides the type of a content type's primary key. The default, `"serial"`, is an auto-incrementing integer. `"uuid"` gives random ids that reveal nothing about how many records exist. `"bigint"` gives integers that will not run out. Pick it when you create the content type, because changing it later means a [hand-written data migration](#change-the-strategy-later), and nobody enjoys those. -The example plugin keys its tags by UUID: +The newsroom plugin keys its tags by UUID: -```ts title="plugins/example/src/content/tag.ts" +```ts title="plugins/newsroom/src/content/tag.ts (excerpt)" export const tagContentType = defineContentType({ - id: "example.tag", - tableName: "example_tags", + id: "newsroom.tag", + tableName: "newsroom_tags", idStrategy: "uuid", // [!code ++] + localization: { defaultLocale: "en", fallback: "default" }, publication: true, + // visibility, duplication and editorial + fields: { - name: field.text({ localized: true, required: true, minLength: 1, maxLength: 100 }), + name: field.text({ + localized: true, + required: true, + minLength: 1, + maxLength: 100, + }), slug: field.slug({ localized: true, source: "name" }), // category and relatedTags relations }, - // editorial, visibility, duplication, publicApi and admin + // publicApi and admin }); ``` @@ -35,19 +43,19 @@ export const tagContentType = defineContentType({ Choose by what the ids are for: - **`serial`** suits most content. Ids are short and readable in URLs and logs. The blog's articles and categories use it. -- **`uuid`** suits content whose ids should not be guessable or countable, or records created in several places that must not collide. The example plugin's `example.tag` uses it. -- **`bigint`** suits tables that may outgrow two billion rows, such as events or logs. The example plugin's `example.event` uses it. +- **`uuid`** suits content whose ids should not be guessable or countable, or records created in several places that must not collide. The newsroom plugin's `newsroom.tag` uses it. +- **`bigint`** suits tables that may outgrow two billion rows, such as events or logs. The newsroom plugin's `newsroom.event` uses it. -Both example types appear in **AdminCP → Example → Tags** and **Events**, and their edit links carry the UUID or the decimal string, such as `/admin/content/example/event/9007199254740994/edit`. +Both types appear in **AdminCP → Newsroom → Tags** and **Events**, and their edit links carry the UUID or the decimal string, such as `/admin/content/newsroom/event/9007199254740994/edit`. ### Why bigint ids are strings A JavaScript number holds integers exactly only up to 2^53 − 1 (`9007199254740991`). A bigint key can be much larger, and a larger id read as a number is silently rounded to a different record: `Number("9007199254740993")` is `9007199254740992`. VitNode never converts a bigint id through `Number`. Drizzle reads the column in `string` mode, and every API, event, cursor and AdminCP URL carries the exact decimal string. -Once the `example_events` id sequence is past 2^53, the public API still returns every id intact: +Once the `newsroom_events` id sequence is past 2^53, the public API still returns every id intact: ```bash -curl "http://localhost:3000/api/@vitnode/example/content/events/big-launch" +curl "http://localhost:3000/api/newsroom/content/events/big-launch" ``` ```json title="Response (trimmed)" @@ -60,7 +68,7 @@ curl "http://localhost:3000/api/@vitnode/example/content/events/big-launch" } ``` -`primaryTag` and `tags` point at `example.tag` records, so they carry UUIDs. Keep bigint ids as strings in your own code too. +`primaryTag` and `tags` point at `newsroom.tag` records, so they carry UUIDs. Keep bigint ids as strings in your own code too. ## Valid ids @@ -78,8 +86,8 @@ Each record has exactly one spelling, so one record is never cached or indexed u Every Content Engine feature works with all three strategies: the public API, the AdminCP lists, editors, pickers and edit links, [public pages](/docs/content-engine/public-pages) and sitemaps, previews, schedules, revisions, [live editing](/docs/content-engine/live-editing), events, search, pagination cursors, [duplicate](/docs/content-engine/duplicate-content) and [hide](/docs/content-engine/content-visibility). -- **Relations** use the key type of the record they point at. A bigint event that links to uuid tags gets a `uuid` foreign key and a `bigint`-to-`uuid` junction table. See [Relations across id strategies](/docs/content-engine/relations#relations-across-id-strategies). -- **Shared core tables** that hold records of any content type, such as revisions, schedules, slug history, live editing drafts and the search index, store the id as text in a `varchar(64)` `itemId` column. See [Database](/docs/content-engine/database#ids-and-shared-tables). +- **Relations** use the key type of the record they point at. A bigint event that links to uuid tags gets a `uuid` foreign key and a `bigint`-to-`uuid` junction table. See [Relations across id strategies](/docs/content-engine/relations-advanced#relations-across-id-strategies). +- **Shared core tables** that hold records of any content type, such as revisions, schedules, slug history, live editing drafts and the search index, store the id as text in a `varchar(64)` `itemId` column. See [Migrations](/docs/content-engine/database#ids-and-shared-tables). - **Events** type `contentId` by strategy: `number` for serial, `string` for uuid and bigint. - **Sitemaps** page through records in key order. For a uuid content type that order is lexical, not creation order, and every record still appears once. - **Repeatable rows** keep their own `serial` ids, whatever the owner uses. User and file references stay integers. diff --git a/apps/web/content/docs/content-engine/index-articles-list.webp b/apps/web/content/docs/content-engine/index-articles-list.webp deleted file mode 100644 index e913bb33fdbd9a6352adbe176ed52092d974bae4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66278 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 i+ar~19 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 diff --git a/apps/web/content/docs/content-engine/index-public-form.webp b/apps/web/content/docs/content-engine/index-public-form.webp deleted file mode 100644 index 36a5dec0026219c98af51bcfe074d2e4cbc56c30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68304 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 +The Content Engine turns one TypeScript definition into structured content for your plugin. You describe the fields of a content type, such as an article, and VitNode generates its database table, validation, staff API routes, staff permissions and AdminCP screens. Optional blocks add drafts, a public API, member writing, reports, comments, revisions and more. + +## Start here -## On the public site +The beginner tutorial builds one small newsroom, step by step, with an article that has a title, a slug and a body. Each page continues the previous one: -The same definition also drives the public side. Add `publicApi` and the records become readable; a few more options and members write their own. The example plugin's discussions use all of it. +1. [First content type](/docs/content-engine/create-a-content-type): define the article and manage it in the AdminCP. +2. [Drafts & publishing](/docs/content-engine/publication): keep unfinished articles private until staff publish them. +3. [Public API](/docs/content-engine/public-api): let anyone read published articles, and only the fields you choose. +4. [Content list](/docs/content-engine/public-lists): show the articles at `/news`, a page at a time. +5. [Content page](/docs/content-engine/public-pages): give every article its own page at `/news/:slug`. -A list with search, filters and pages, from [Public lists](/docs/content-engine/public-lists): +After that, [Embedded list](/docs/content-engine/public-lists-embed) puts the newest articles under each one, and every guide below builds on the same article. -A page for each record, from [Public pages](/docs/content-engine/public-pages), with **Report** from [Report content](/docs/content-engine/reports): +## What is generated and what you write - +The Content Engine owns the data and the rules, and your plugin owns every page readers see: + +| You build | The Content Engine provides | Your plugin writes | +| --- | --- | --- | +| The AdminCP screen | The list, search, sorting, create and edit forms, publish and hide actions | The sidebar link and, optionally, [custom cells or form layouts](/docs/content-engine/admincp) | +| A list page | The list route, `defineContentList`, `contentListQueryOptions`, `ContentListResults`, `ContentListPagination` | The route, the row layout and the labels | +| A record page | Slug resolution, `404`s, redirects and metadata through `contentDeliveryPage` | The page component, with `RichTextContent` for rich text | +| A member form | The write routes, ownership, validation, `useContentPublicWrite` | The fields with `AutoForm`, success messages and navigation | +| Edit and Report buttons | `canEdit` and `canReport` per visitor, `useContentPermissions`, `ReportButton` | Where the buttons go | +| Comments | The thread route and its placement rules | The comment section, its composer and its refresh | + +The page helpers come from `@vitnode/core/tanstack/content`, and every request goes through the typed [`fetcher`](/docs/dev/fetcher) with `module: "content/"`. Public pages are the same for every reader, so they can be cached. The browser asks for anything that depends on the visitor, such as an **Edit** button, and the server checks every write again. -And a form members post with, from [Public create form](/docs/content-engine/public-write-frontend): +## Add a feature + +Each guide starts from a content type you already have, says what it needs at the top, and ends with something you can try. [Reports](/docs/content-engine/reports) and [Relations](/docs/content-engine/relations), for example, only need the beginner path. Comments also need [Member writing](/docs/content-engine/public-write). + +| Area | Guides | +| --- | --- | +| Public content | [Embedded list](/docs/content-engine/public-lists-embed) | +| Member content | [Member writing](/docs/content-engine/public-write), [Create form](/docs/content-engine/public-write-frontend), [Edit form](/docs/content-engine/public-write-edit), [Permissions](/docs/content-engine/public-permissions) | +| Interactions | [Reports](/docs/content-engine/reports), [Comments](/docs/content-engine/threads), [Comment editing](/docs/content-engine/threads-editing), [Replies](/docs/content-engine/threads-frontend) | +| Organization | [Relations](/docs/content-engine/relations), [Advanced fields](/docs/content-engine/relations-advanced), [Containers](/docs/content-engine/containers), [Container pages](/docs/content-engine/container-frontend) | +| Moderation | [Approvals](/docs/content-engine/approvals), [Approval notices](/docs/content-engine/approval-notices), [Publishing rules](/docs/content-engine/container-policies), [Visibility](/docs/content-engine/content-visibility) | +| Content features | [Rich text](/docs/content-engine/rich-text), [Translations](/docs/content-engine/localization), [Search](/docs/content-engine/search), [SEO](/docs/content-engine/seo) | +| Editorial | [Revisions](/docs/content-engine/editorial), [Previews](/docs/content-engine/editorial-previews), [Scheduling](/docs/content-engine/editorial-scheduling), [Live editing](/docs/content-engine/live-editing), [Duplication](/docs/content-engine/duplicate-content) | +| Customization | [AdminCP](/docs/content-engine/admincp), [Services](/docs/content-engine/services), [Events](/docs/content-engine/events) | +| Deployment | [Migrations](/docs/content-engine/database), [Caching](/docs/content-engine/caching), [Production](/docs/content-engine/production) | -## What you get +## What each option adds | From the definition | VitNode generates | | ------------------- | -------------------------------------------------------------------------------------- | @@ -95,43 +89,8 @@ And a form members post with, from [Public create form](/docs/content-engine/pub Content types live in code and in your migrations, not in the database. There is no screen for creating a content type at runtime. -## Pick a guide - -| You want to | Guide | -| -------------------------------------------------------- | --------------------------------------------------------------------- | -| Build your first content type, with its AdminCP screen | [First content type](/docs/content-engine/create-a-content-type) | -| Let anyone read published records through an API | [Public API](/docs/content-engine/public-api) | -| Understand how public reads are cached and refreshed | [Caching](/docs/content-engine/caching) | -| Give each record its own page with SEO metadata | [Public pages](/docs/content-engine/public-pages) | -| Keep drafts private until an editor publishes them | [Publication](/docs/content-engine/publication) | -| Show a list with search, filters and pages | [Public lists](/docs/content-engine/public-lists) | -| Let members create and edit records from the site | [Public write](/docs/content-engine/public-write) | -| Let readers report content to moderators | [Report content](/docs/content-engine/reports) | -| Control titles, descriptions, noindex and the sitemap | [SEO](/docs/content-engine/seo) | -| Make records findable in the site search | [Search](/docs/content-engine/search) | -| Link records, group fields or repeat rows | [Relations](/docs/content-engine/relations) | -| Organize records into boards, sections or categories | [Containers](/docs/content-engine/containers) | -| Show a container tree and its content on the site | [Containers on the frontend](/docs/content-engine/container-frontend) | -| Decide who posts in each container and what needs review | [Publishing policies](/docs/content-engine/container-policies) | -| Let moderators approve new posts and edits first | [Approvals](/docs/content-engine/approvals) | -| Build nested replies under a topic or a post | [Threaded replies](/docs/content-engine/threads) | -| Translate content into several languages | [Translations](/docs/content-engine/localization) | -| Store and render formatted text | [Rich text](/docs/content-engine/rich-text) | -| Keep revisions, share previews or schedule publishing | [Editorial](/docs/content-engine/editorial) | -| Let several editors work on one record at the same time | [Live editing](/docs/content-engine/live-editing) | -| Take a record off the public site without unpublishing | [Hide content](/docs/content-engine/content-visibility) | -| Let editors copy a record as a new draft | [Duplicate content](/docs/content-engine/duplicate-content) | -| Key records by UUID or bigint instead of serial integers | [Record ID strategies](/docs/content-engine/id-strategy) | -| Change list columns, form sections or field components | [AdminCP](/docs/content-engine/admincp) | -| Read and write content from your own API routes | [Services](/docs/content-engine/services) | -| React to created, updated or published records | [Events](/docs/content-engine/events) | -| Understand the generated tables and ship a schema change | [Database](/docs/content-engine/database) | -| Check a content type before it goes live | [Production](/docs/content-engine/production) | - ## Reference - [Options](/docs/content-engine/reference): every `defineContentType` option and how the options depend on each other. - [Fields](/docs/content-engine/fields): every `field.*` helper with its options, column type and form control. - [Plugin files](/docs/content-engine/plugin-files): the files and exports the app and the API read from your plugin. -- [Live editing API](/docs/content-engine/live-editing-api): the HTTP API and deployment requirements behind live editing. -- [Publishing policies reference](/docs/content-engine/container-policies-api): policy keys, resolution order, routes and errors. diff --git a/apps/web/content/docs/content-engine/live-editing-api.mdx b/apps/web/content/docs/content-engine/live-editing-api.mdx index 34441af016..39e8606f52 100644 --- a/apps/web/content/docs/content-engine/live-editing-api.mdx +++ b/apps/web/content/docs/content-engine/live-editing-api.mdx @@ -4,7 +4,7 @@ description: Reference for Content Engine live editing, covering deployment requ icon: Cable --- -The AdminCP drives [live editing](/docs/content-engine/live-editing) for you. This page is for the cases where you need the details: deploying it, calling its routes from your own code, or building a form layout that shows who is editing. Examples use `example.article`, whose staff API lives at `/api/@vitnode/example/admin/content/article`. +The AdminCP drives [live editing](/docs/content-engine/live-editing) for you. This page is for the cases where you need the details: deploying it, calling its routes from your own code, or building a form layout that shows who is editing. Examples use `newsroom.story`, whose staff API lives at `/api/newsroom/admin/content/story`. ## Deployment requirements @@ -40,7 +40,7 @@ The routes live under the content type's staff API module. Every route needs an Taking a lock on the excerpt: ```http title="Request" -POST /api/@vitnode/example/admin/content/article/2/locks +POST /api/newsroom/admin/content/story/2/locks Content-Type: application/json { "field": "excerpt", "locale": null, "action": "acquire" } @@ -73,7 +73,7 @@ When someone else asks for the same field, the `409` names the holder: Reading the draft returns the shared fields and one draft per language: -```json title="GET /api/@vitnode/example/admin/content/article/2/draft" +```json title="GET /api/newsroom/admin/content/story/2/draft" { "shared": { "baseVersion": 3, @@ -127,14 +127,14 @@ The daily `content-editorial-cleanup` [cron job](/docs/dev/cron) removes expired A plugin that replaces the edit form with [its own layout](/docs/content-engine/admincp) still gets locks and outlines on every field it renders with `ContentFormField`. The rest of the live UI comes from `@vitnode/core/content/admin-form`: -```tsx title="plugins/example/src/views/admin/article-layout.tsx" +```tsx title="story-form-layout.tsx" import { ContentFormField, ContentLivePresence, ContentLiveStatus, } from "@vitnode/core/content/admin-form"; -export const ArticleFormLayout = () => ( +export const StoryFormLayout = () => (