includio-cms 0.24.1 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/API.md +57 -4
- package/CHANGELOG.md +53 -0
- package/DOCS.md +1 -1
- package/README.md +2 -0
- package/ROADMAP.md +6 -0
- package/dist/admin/client/account/lang.d.ts +1 -0
- package/dist/admin/client/account/lang.js +4 -2
- package/dist/admin/client/account/profile-section.svelte +2 -2
- package/dist/admin/client/account/security-section.svelte +27 -4
- package/dist/admin/client/account/sessions-section.svelte +1 -1
- package/dist/admin/client/admin/admin-after-login-layout-content.svelte +1 -1
- package/dist/admin/client/admin/dashboard-page.svelte +34 -10
- package/dist/admin/client/collection/bulk-actions-bar.svelte +86 -44
- package/dist/admin/client/collection/bulk-actions-bar.svelte.d.ts +3 -1
- package/dist/admin/client/collection/collection-entries.svelte +52 -36
- package/dist/admin/client/collection/collection-entries.svelte.d.ts +3 -0
- package/dist/admin/client/collection/collection.svelte +28 -14
- package/dist/admin/client/collection/collection.svelte.d.ts +3 -0
- package/dist/admin/client/collection/data-table.svelte +279 -130
- package/dist/admin/client/collection/data-table.svelte.d.ts +11 -0
- package/dist/admin/client/collection/date-cell.svelte +4 -4
- package/dist/admin/client/collection/row-actions.svelte +2 -1
- package/dist/admin/client/collection/sortable-header.svelte +33 -9
- package/dist/admin/client/collection/state-display.svelte +102 -0
- package/dist/admin/client/collection/state-display.svelte.d.ts +12 -0
- package/dist/admin/client/collection/status-badge.svelte +99 -11
- package/dist/admin/client/collection/status-badge.svelte.d.ts +15 -1
- package/dist/admin/client/collection/table-pagination.svelte +21 -6
- package/dist/admin/client/collection/table-toolbar.svelte +105 -80
- package/dist/admin/client/collection/table-toolbar.svelte.d.ts +11 -8
- package/dist/admin/client/entry/entry-form.svelte +36 -11
- package/dist/admin/client/entry/entry-form.svelte.d.ts +1 -0
- package/dist/admin/client/entry/entry-header.svelte +22 -15
- package/dist/admin/client/entry/entry-header.svelte.d.ts +1 -0
- package/dist/admin/client/entry/entry.svelte +269 -165
- package/dist/admin/client/entry/header/a11y-header-badge.svelte +47 -0
- package/dist/admin/client/entry/header/a11y-header-badge.svelte.d.ts +8 -0
- package/dist/admin/client/entry/header/publish-panel.svelte +69 -13
- package/dist/admin/client/entry/header/save-indicator.svelte +57 -28
- package/dist/admin/client/entry/header/save-indicator.svelte.d.ts +1 -0
- package/dist/admin/client/entry/header/status-badge.svelte +60 -15
- package/dist/admin/client/entry/header/status-badge.svelte.d.ts +1 -2
- package/dist/admin/client/entry/header/version-history-sheet.svelte +1 -1
- package/dist/admin/client/entry/hybrid/hybrid-layout.svelte +74 -23
- package/dist/admin/client/entry/hybrid/hybrid-preview.svelte +1 -1
- package/dist/admin/client/entry/utils.d.ts +14 -0
- package/dist/admin/client/entry/utils.js +28 -0
- package/dist/admin/client/form/form-submission/form-submission.svelte +2 -2
- package/dist/admin/client/form/form-submissions.svelte +143 -194
- package/dist/admin/client/form/form-submissions.svelte.d.ts +2 -0
- package/dist/admin/client/login/lang.d.ts +3 -0
- package/dist/admin/client/login/lang.js +10 -4
- package/dist/admin/client/login/login-form.svelte +8 -1
- package/dist/admin/client/login/reset-password-page.svelte +24 -3
- package/dist/admin/client/login/schema.d.ts +14 -2
- package/dist/admin/client/login/schema.js +19 -8
- package/dist/admin/client/maintenance/maintenance-page.svelte +16 -17
- package/dist/admin/client/media/media-page.svelte +1 -1
- package/dist/admin/client/shop/coupon-edit-page.svelte +117 -13
- package/dist/admin/client/shop/coupon-form.svelte +282 -138
- package/dist/admin/client/shop/coupon-form.svelte.d.ts +1 -9
- package/dist/admin/client/shop/coupon-new-page.svelte +40 -10
- package/dist/admin/client/shop/coupon-new-page.svelte.d.ts +2 -17
- package/dist/admin/client/shop/coupon-schema.d.ts +28 -0
- package/dist/admin/client/shop/coupon-schema.js +53 -0
- package/dist/admin/client/shop/coupons-list-page.svelte +262 -118
- package/dist/admin/client/shop/coupons-list-page.svelte.d.ts +16 -1
- package/dist/admin/client/shop/shipping-method-edit-page.svelte +108 -59
- package/dist/admin/client/shop/shipping-method-form.svelte +36 -9
- package/dist/admin/client/shop/shipping-method-new-page.svelte +44 -13
- package/dist/admin/client/shop/shipping-methods-list-page.svelte +101 -59
- package/dist/admin/client/shop/shop-order-detail-page.svelte +113 -84
- package/dist/admin/client/shop/shop-orders-list-page.svelte +302 -152
- package/dist/admin/client/shop/shop-orders-list-page.svelte.d.ts +18 -1
- package/dist/admin/client/shop/shop-products-list-page.svelte +355 -118
- package/dist/admin/client/shop/shop-products-list-page.svelte.d.ts +19 -1
- package/dist/admin/client/users/accept-invite-page.svelte +24 -3
- package/dist/admin/client/users/create-user-dialog.svelte +3 -8
- package/dist/admin/client/users/lang.d.ts +2 -0
- package/dist/admin/client/users/lang.js +4 -0
- package/dist/admin/client/users/pending-invitations.svelte +2 -9
- package/dist/admin/client/users/user-name-cell.svelte +20 -0
- package/dist/admin/client/users/user-name-cell.svelte.d.ts +9 -0
- package/dist/admin/client/users/user-role-badge.svelte +16 -0
- package/dist/admin/client/users/user-role-badge.svelte.d.ts +7 -0
- package/dist/admin/client/users/user-row-actions.svelte +72 -0
- package/dist/admin/client/users/user-row-actions.svelte.d.ts +20 -0
- package/dist/admin/client/users/user-sessions-sheet.svelte +2 -11
- package/dist/admin/client/users/users-page.svelte +283 -497
- package/dist/admin/client/users/users-page.svelte.d.ts +12 -1
- package/dist/admin/components/dashboard/form-submissions-widget.svelte +59 -74
- package/dist/admin/components/dashboard/recent-activity.svelte +17 -5
- package/dist/admin/components/dashboard/recent-entries.svelte +19 -7
- package/dist/admin/components/dialogs/confirmation-dialog.svelte +105 -0
- package/dist/admin/components/dialogs/confirmation-dialog.svelte.d.ts +13 -0
- package/dist/admin/components/fields/block-picker-modal.svelte +6 -0
- package/dist/admin/components/fields/blocks-field.svelte +46 -1
- package/dist/admin/components/fields/boolean-field.svelte +1 -1
- package/dist/admin/components/fields/field-renderer.svelte +23 -21
- package/dist/admin/components/fields/file-field.svelte +344 -30
- package/dist/admin/components/fields/media-field.svelte +16 -2
- package/dist/admin/components/fields/radio-field.svelte +22 -0
- package/dist/admin/components/fields/relation-field.svelte +123 -97
- package/dist/admin/components/fields/relation-picker-dialog.svelte +2 -2
- package/dist/admin/components/fields/seo-field.svelte +60 -30
- package/dist/admin/components/fields/shop-field.svelte +9 -4
- package/dist/admin/components/fields/simple-array-field.svelte +321 -151
- package/dist/admin/components/fields/simple-array-field.svelte.d.ts +3 -0
- package/dist/admin/components/fields/slug-field.svelte +146 -21
- package/dist/admin/components/fields/text-field-wrapper.svelte +37 -20
- package/dist/admin/components/fields/text-field.svelte +7 -2
- package/dist/admin/components/fields/url-field-wrapper.svelte +10 -0
- package/dist/admin/components/fields/url-field.svelte +36 -23
- package/dist/admin/components/forms/form-error-summary.svelte +143 -0
- package/dist/admin/components/forms/form-error-summary.svelte.d.ts +27 -0
- package/dist/admin/components/layout/app-sidebar.svelte +7 -2
- package/dist/admin/components/layout/detail-page-shell.svelte +71 -0
- package/dist/admin/components/layout/detail-page-shell.svelte.d.ts +24 -0
- package/dist/admin/components/layout/lang.d.ts +5 -0
- package/dist/admin/components/layout/lang.js +10 -0
- package/dist/admin/components/layout/layout-renderer.svelte +71 -2
- package/dist/admin/components/layout/layout-renderer.svelte.d.ts +1 -0
- package/dist/admin/components/layout/layout-tabs.svelte +172 -0
- package/dist/admin/components/layout/layout-tabs.svelte.d.ts +24 -0
- package/dist/admin/components/layout/nav-breadcrumbs.svelte +25 -7
- package/dist/admin/components/layout/nav-collections.svelte +23 -36
- package/dist/admin/components/layout/nav-forms.svelte +19 -35
- package/dist/admin/components/layout/nav-main.svelte +3 -28
- package/dist/admin/components/layout/nav-search.svelte +70 -2
- package/dist/admin/components/layout/nav-section.svelte +77 -0
- package/dist/admin/components/layout/nav-section.svelte.d.ts +22 -0
- package/dist/admin/components/layout/nav-shop.svelte +3 -27
- package/dist/admin/components/layout/nav-singletons.svelte +16 -28
- package/dist/admin/components/layout/page-header.stories.svelte +93 -0
- package/dist/admin/components/layout/page-header.stories.svelte.d.ts +27 -0
- package/dist/admin/components/layout/page-header.svelte +68 -0
- package/dist/admin/components/layout/page-header.svelte.d.ts +17 -0
- package/dist/admin/components/layout/site-header.svelte +9 -0
- package/dist/admin/components/layout/site-header.svelte.d.ts +2 -17
- package/dist/admin/components/media/file/file-name-input.svelte +6 -2
- package/dist/admin/components/media/file/file-preview.svelte +130 -17
- package/dist/admin/components/media/file-upload.svelte +16 -7
- package/dist/admin/components/media/file-upload.svelte.d.ts +1 -0
- package/dist/admin/components/media/files-list.svelte +153 -53
- package/dist/admin/components/media/files-list.svelte.d.ts +1 -0
- package/dist/admin/components/media/media-library.svelte +577 -198
- package/dist/admin/components/media/media-library.svelte.d.ts +4 -0
- package/dist/admin/components/media/media-selector.svelte +4 -2
- package/dist/admin/components/media/media-selector.svelte.d.ts +1 -0
- package/dist/admin/components/media/tag-sidebar.svelte +4 -4
- package/dist/admin/components/tiptap/FigureNodeView.svelte +10 -0
- package/dist/admin/components/tiptap/bubble-menu.svelte +104 -0
- package/dist/admin/components/tiptap/bubble-menu.svelte.d.ts +19 -0
- package/dist/admin/components/tiptap/content-editor.svelte +28 -24
- package/dist/admin/components/tiptap/editor-toolbar.svelte +7 -7
- package/dist/admin/components/tiptap/extensions.js +5 -1
- package/dist/admin/components/tiptap/image-dialog.svelte +5 -1
- package/dist/admin/components/tiptap/link-dialog.svelte +2 -0
- package/dist/admin/components/tiptap/tiptap-editor.svelte +18 -20
- package/dist/admin/components/tiptap/video-dialog.svelte +1 -1
- package/dist/admin/i18n/errors.d.ts +140 -0
- package/dist/admin/i18n/errors.js +151 -0
- package/dist/admin/remote/entry.remote.d.ts +59 -4
- package/dist/admin/remote/entry.remote.js +239 -62
- package/dist/admin/remote/shop.remote.d.ts +37 -32
- package/dist/admin/remote/shop.remote.js +9 -2
- package/dist/admin/shared/password-generate.d.ts +6 -0
- package/dist/admin/shared/password-generate.js +40 -0
- package/dist/admin/shared/password-schema.d.ts +6 -0
- package/dist/admin/shared/password-schema.js +10 -3
- package/dist/admin/styles/admin.css +23 -6
- package/dist/admin/styles/tokens.md +244 -0
- package/dist/admin/utils/accordionActivation.d.ts +13 -0
- package/dist/admin/utils/accordionActivation.js +35 -0
- package/dist/admin/utils/entryLabel.d.ts +23 -0
- package/dist/admin/utils/entryLabel.js +51 -12
- package/dist/admin/utils/field-a11y.d.ts +29 -0
- package/dist/admin/utils/field-a11y.js +23 -0
- package/dist/admin/utils/fieldPathElement.d.ts +9 -0
- package/dist/admin/utils/fieldPathElement.js +18 -0
- package/dist/admin/utils/fileDisplay.d.ts +10 -0
- package/dist/admin/utils/fileDisplay.js +26 -0
- package/dist/admin/utils/flattenFormErrors.d.ts +19 -0
- package/dist/admin/utils/flattenFormErrors.js +102 -0
- package/dist/admin/utils/formatters.d.ts +12 -0
- package/dist/admin/utils/{formatDate.js → formatters.js} +23 -2
- package/dist/admin/utils/scrollWithin.d.ts +9 -0
- package/dist/admin/utils/scrollWithin.js +32 -0
- package/dist/admin/utils/tabActivation.d.ts +12 -0
- package/dist/admin/utils/tabActivation.js +24 -0
- package/dist/cms/runtime/schema.d.ts +1 -0
- package/dist/cms/runtime/schema.js +1 -0
- package/dist/cms/runtime/types.d.ts +80 -7
- package/dist/components/ui/accordion/accordion-content.svelte +17 -3
- package/dist/components/ui/accordion/accordion.stories.svelte +21 -1
- package/dist/components/ui/alert/alert.stories.svelte +14 -0
- package/dist/components/ui/alert-dialog/alert-dialog.stories.svelte +45 -0
- package/dist/components/ui/alert-dialog/alert-dialog.stories.svelte.d.ts +27 -0
- package/dist/components/ui/avatar/avatar.stories.svelte +27 -0
- package/dist/components/ui/badge/badge.stories.svelte +15 -0
- package/dist/components/ui/breadcrumb/breadcrumb.stories.svelte +47 -0
- package/dist/components/ui/breadcrumb/breadcrumb.svelte +1 -1
- package/dist/components/ui/button/button.stories.svelte +53 -6
- package/dist/components/ui/button/button.svelte +39 -5
- package/dist/components/ui/button/button.svelte.d.ts +4 -0
- package/dist/components/ui/button-group/button-group.stories.svelte +44 -0
- package/dist/components/ui/button-group/button-group.stories.svelte.d.ts +27 -0
- package/dist/components/ui/calendar/calendar.stories.svelte +36 -0
- package/dist/components/ui/calendar/calendar.stories.svelte.d.ts +27 -0
- package/dist/components/ui/card/card.stories.svelte +7 -0
- package/dist/components/ui/carousel/carousel.stories.svelte +43 -0
- package/dist/components/ui/carousel/carousel.stories.svelte.d.ts +27 -0
- package/dist/components/ui/checkbox/checkbox.stories.svelte +67 -0
- package/dist/components/ui/checkbox/checkbox.stories.svelte.d.ts +27 -0
- package/dist/components/ui/checkbox/checkbox.svelte +3 -3
- package/dist/components/ui/command/command.stories.svelte +18 -0
- package/dist/components/ui/data-table/data-table.stories.svelte +61 -0
- package/dist/components/ui/data-table/data-table.stories.svelte.d.ts +18 -0
- package/dist/components/ui/dialog/dialog-content.svelte +5 -0
- package/dist/components/ui/dialog/dialog-content.svelte.d.ts +2 -0
- package/dist/components/ui/dialog/dialog.stories.svelte +35 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.stories.svelte +74 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.stories.svelte.d.ts +27 -0
- package/dist/components/ui/field/field-context.svelte.d.ts +22 -0
- package/dist/components/ui/field/field-context.svelte.js +9 -0
- package/dist/components/ui/field/field-control.svelte +18 -0
- package/dist/components/ui/field/field-control.svelte.d.ts +8 -0
- package/dist/components/ui/field/field-description.svelte +12 -0
- package/dist/components/ui/field/field-error.svelte +14 -6
- package/dist/components/ui/field/field-label.svelte +10 -0
- package/dist/components/ui/field/field.stories.svelte +95 -9
- package/dist/components/ui/field/field.svelte +57 -0
- package/dist/components/ui/field/field.svelte.d.ts +2 -0
- package/dist/components/ui/field/index.d.ts +3 -1
- package/dist/components/ui/field/index.js +4 -2
- package/dist/components/ui/form/form-field-errors.svelte +1 -1
- package/dist/components/ui/form/form.stories.svelte +25 -0
- package/dist/components/ui/form/form.stories.svelte.d.ts +26 -0
- package/dist/components/ui/input/input.stories.svelte +26 -0
- package/dist/components/ui/input-group/input-group-input.svelte.d.ts +1 -1
- package/dist/components/ui/input-group/input-group.stories.svelte +43 -0
- package/dist/components/ui/input-group/input-group.stories.svelte.d.ts +27 -0
- package/dist/components/ui/item/item.stories.svelte +61 -0
- package/dist/components/ui/item/item.stories.svelte.d.ts +27 -0
- package/dist/components/ui/label/label.stories.svelte +7 -0
- package/dist/components/ui/live-region/index.d.ts +1 -0
- package/dist/components/ui/live-region/index.js +1 -0
- package/dist/components/ui/live-region/live-region-demo.svelte +32 -0
- package/dist/components/ui/live-region/live-region-demo.svelte.d.ts +7 -0
- package/dist/components/ui/live-region/live-region.stories.svelte +23 -0
- package/dist/components/ui/live-region/live-region.stories.svelte.d.ts +26 -0
- package/dist/components/ui/live-region/live-region.svelte +12 -0
- package/dist/components/ui/live-region/live-region.svelte.d.ts +8 -0
- package/dist/components/ui/popover/popover.stories.svelte +34 -0
- package/dist/components/ui/radio-group/radio-group.stories.svelte +58 -0
- package/dist/components/ui/radio-group/radio-group.stories.svelte.d.ts +27 -0
- package/dist/components/ui/resizable/resizable.stories.svelte +56 -0
- package/dist/components/ui/resizable/resizable.stories.svelte.d.ts +27 -0
- package/dist/components/ui/select/select.stories.svelte +49 -0
- package/dist/components/ui/separator/separator.stories.svelte +18 -0
- package/dist/components/ui/sheet/sheet.stories.svelte +34 -0
- package/dist/components/ui/sidebar/sidebar-input.svelte.d.ts +1 -1
- package/dist/components/ui/sidebar/sidebar-menu-button.svelte +1 -0
- package/dist/components/ui/sidebar/sidebar-trigger.svelte +1 -1
- package/dist/components/ui/sidebar/sidebar.stories.svelte +72 -0
- package/dist/components/ui/sidebar/sidebar.stories.svelte.d.ts +27 -0
- package/dist/components/ui/skeleton/skeleton.stories.svelte +39 -0
- package/dist/components/ui/skeleton/skeleton.stories.svelte.d.ts +27 -0
- package/dist/components/ui/skeleton/skeleton.svelte +6 -0
- package/dist/components/ui/sonner/index.d.ts +1 -1
- package/dist/components/ui/sonner/index.js +1 -1
- package/dist/components/ui/sonner/sonner.stories.svelte +7 -0
- package/dist/components/ui/sonner/sonner.svelte +17 -1
- package/dist/components/ui/sonner/sonner.svelte.d.ts +6 -0
- package/dist/components/ui/spinner/spinner.stories.svelte +30 -0
- package/dist/components/ui/spinner/spinner.stories.svelte.d.ts +27 -0
- package/dist/components/ui/switch/switch.stories.svelte +56 -0
- package/dist/components/ui/switch/switch.stories.svelte.d.ts +27 -0
- package/dist/components/ui/table/table-cell.svelte +1 -1
- package/dist/components/ui/table/table-head.svelte +1 -1
- package/dist/components/ui/table/table.stories.svelte +68 -0
- package/dist/components/ui/table/table.stories.svelte.d.ts +27 -0
- package/dist/components/ui/table/table.svelte +1 -1
- package/dist/components/ui/tabs/tabs.stories.svelte +48 -0
- package/dist/components/ui/tabs/tabs.stories.svelte.d.ts +27 -0
- package/dist/components/ui/textarea/textarea.stories.svelte +21 -0
- package/dist/components/ui/toggle/toggle.stories.svelte +23 -0
- package/dist/components/ui/toggle-group/toggle-group.stories.svelte +43 -0
- package/dist/components/ui/tooltip/tooltip.stories.svelte +46 -6
- package/dist/core/fields/fieldSchemaToTs.d.ts +7 -0
- package/dist/core/fields/fieldSchemaToTs.js +234 -90
- package/dist/core/fields/layoutUtils.d.ts +4 -1
- package/dist/core/fields/layoutUtils.js +41 -4
- package/dist/core/fields/resolveSeo.d.ts +70 -0
- package/dist/core/fields/resolveSeo.js +88 -0
- package/dist/core/fields/seoFieldDescriptor.d.ts +43 -0
- package/dist/core/fields/seoFieldDescriptor.js +74 -0
- package/dist/core/fields/slugPath.d.ts +13 -0
- package/dist/core/fields/slugPath.js +32 -0
- package/dist/core/fields/urlUtils.d.ts +8 -0
- package/dist/core/fields/urlUtils.js +27 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.js +1 -0
- package/dist/core/server/entries/operations/create.js +13 -0
- package/dist/core/server/entries/operations/get.d.ts +7 -0
- package/dist/core/server/entries/operations/get.js +10 -6
- package/dist/core/server/entries/operations/slugUniqueness.d.ts +37 -0
- package/dist/core/server/entries/operations/slugUniqueness.js +116 -0
- package/dist/core/server/entries/operations/update.d.ts +6 -1
- package/dist/core/server/entries/operations/update.js +24 -1
- package/dist/core/server/fields/slugResolver.d.ts +3 -13
- package/dist/core/server/fields/slugResolver.js +8 -37
- package/dist/core/server/generator/fields.js +10 -17
- package/dist/core/server/generator/formFields.js +2 -1
- package/dist/core/server/generator/generator.js +4 -4
- package/dist/core/server/generator/utils.d.ts +1 -0
- package/dist/core/server/generator/utils.js +4 -0
- package/dist/paraglide/messages/_index.d.ts +3 -36
- package/dist/paraglide/messages/_index.js +3 -71
- package/dist/paraglide/messages/hello_world.d.ts +5 -0
- package/dist/paraglide/messages/hello_world.js +33 -0
- package/dist/paraglide/messages/login_hello.d.ts +16 -0
- package/dist/paraglide/messages/login_hello.js +34 -0
- package/dist/paraglide/messages/login_please_login.d.ts +16 -0
- package/dist/paraglide/messages/login_please_login.js +34 -0
- package/dist/shop/server/orders.d.ts +1 -0
- package/dist/shop/server/orders.js +14 -0
- package/dist/shop/server/shop-data.d.ts +2 -0
- package/dist/shop/server/shop-data.js +20 -5
- package/dist/sveltekit/server/handle.js +17 -0
- package/dist/types/cms.schema.js +4 -2
- package/dist/types/fields.d.ts +35 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/layout.d.ts +35 -2
- package/dist/updates/0.26.0/index.d.ts +2 -0
- package/dist/updates/0.26.0/index.js +51 -0
- package/dist/updates/index.js +3 -1
- package/package.json +29 -7
- package/dist/admin/client/collection/empty-state.svelte +0 -28
- package/dist/admin/client/collection/empty-state.svelte.d.ts +0 -9
- package/dist/admin/client/form/submission-status-badge.svelte +0 -41
- package/dist/admin/client/form/submission-status-badge.svelte.d.ts +0 -7
- package/dist/admin/components/media/file-preview.svelte +0 -51
- package/dist/admin/components/media/file-preview.svelte.d.ts +0 -6
- package/dist/admin/utils/formatDate.d.ts +0 -5
- package/dist/paraglide/messages/en.d.ts +0 -5
- package/dist/paraglide/messages/en.js +0 -14
- package/dist/paraglide/messages/pl.d.ts +0 -5
- package/dist/paraglide/messages/pl.js +0 -14
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import type { MediaFile } from '../../../types/media.js';
|
|
1
2
|
type Props = {
|
|
2
3
|
selected?: string[] | string;
|
|
3
4
|
multiple?: boolean;
|
|
4
5
|
accept?: string;
|
|
6
|
+
showHeader?: boolean;
|
|
7
|
+
data?: MediaFile[];
|
|
8
|
+
state?: 'loading' | 'error' | 'ok';
|
|
5
9
|
};
|
|
6
10
|
declare const MediaLibrary: import("svelte").Component<Props, {}, "selected">;
|
|
7
11
|
type MediaLibrary = ReturnType<typeof MediaLibrary>;
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
cancel: 'Anuluj',
|
|
43
43
|
confirm: 'Potwierdź',
|
|
44
44
|
selectedCount: 'Wybrano',
|
|
45
|
-
clickToSelect: '
|
|
45
|
+
clickToSelect: 'Kliknij plik, aby go wybrać',
|
|
46
46
|
selectedFile: 'Wybrany plik:'
|
|
47
47
|
},
|
|
48
48
|
en: {
|
|
@@ -66,11 +66,12 @@
|
|
|
66
66
|
selected?: string[] | string;
|
|
67
67
|
multiple?: boolean;
|
|
68
68
|
accept?: string;
|
|
69
|
+
maxSizeMB?: number;
|
|
69
70
|
onConfirm?: () => void;
|
|
70
71
|
onCancel?: () => void;
|
|
71
72
|
};
|
|
72
73
|
|
|
73
|
-
let { selected = $bindable([]), multiple = false, accept, onConfirm, onCancel }: Props = $props();
|
|
74
|
+
let { selected = $bindable([]), multiple = false, accept, maxSizeMB, onConfirm, onCancel }: Props = $props();
|
|
74
75
|
|
|
75
76
|
const PAGE_SIZE = 48;
|
|
76
77
|
|
|
@@ -209,6 +210,7 @@
|
|
|
209
210
|
<FileUpload
|
|
210
211
|
onUpload={() => { page = 0; loadedFiles = []; filesQuery.refresh(); countQuery.refresh(); tagCountsQuery.refresh(); totalCountQuery.refresh(); untaggedCountQuery.refresh(); }}
|
|
211
212
|
{accept}
|
|
213
|
+
{maxSizeMB}
|
|
212
214
|
bind:dropZoneRef
|
|
213
215
|
tagIds={activeTagFilter && activeTagFilter !== 'untagged' ? [activeTagFilter] : undefined}
|
|
214
216
|
/>
|
|
@@ -137,9 +137,9 @@
|
|
|
137
137
|
|
|
138
138
|
<div class="flex h-full flex-col">
|
|
139
139
|
<div class="flex-1 overflow-y-auto py-2 scrollbar-thin" role="listbox" aria-label="Filtry tagów">
|
|
140
|
-
<ul class="flex flex-col gap-px px-1.5">
|
|
140
|
+
<ul class="flex flex-col gap-px px-1.5" role="presentation">
|
|
141
141
|
<!-- All files -->
|
|
142
|
-
<li>
|
|
142
|
+
<li role="presentation">
|
|
143
143
|
<button
|
|
144
144
|
type="button"
|
|
145
145
|
role="option"
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
</li>
|
|
162
162
|
|
|
163
163
|
<!-- Untagged -->
|
|
164
|
-
<li>
|
|
164
|
+
<li role="presentation">
|
|
165
165
|
<button
|
|
166
166
|
type="button"
|
|
167
167
|
role="option"
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
|
|
188
188
|
<!-- User tags -->
|
|
189
189
|
{#each tags as tag (tag.id)}
|
|
190
|
-
<li>
|
|
190
|
+
<li role="presentation">
|
|
191
191
|
{#if editingTagId === tag.id}
|
|
192
192
|
<form
|
|
193
193
|
class="flex items-center gap-1 px-1"
|
|
@@ -269,6 +269,11 @@
|
|
|
269
269
|
border-color: var(--primary);
|
|
270
270
|
}
|
|
271
271
|
|
|
272
|
+
.caption-input:focus-visible {
|
|
273
|
+
outline: 2px solid var(--ring);
|
|
274
|
+
outline-offset: 1px;
|
|
275
|
+
}
|
|
276
|
+
|
|
272
277
|
/* Alt text field */
|
|
273
278
|
.figure-alt-row {
|
|
274
279
|
margin-top: 0.375rem;
|
|
@@ -320,4 +325,9 @@
|
|
|
320
325
|
outline: none;
|
|
321
326
|
border-color: var(--primary);
|
|
322
327
|
}
|
|
328
|
+
|
|
329
|
+
.figure-alt-input:focus-visible {
|
|
330
|
+
outline: 2px solid var(--ring);
|
|
331
|
+
outline-offset: 1px;
|
|
332
|
+
}
|
|
323
333
|
</style>
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
@internal
|
|
4
|
+
-->
|
|
5
|
+
<script lang="ts">
|
|
6
|
+
import { onMount, type Snippet } from 'svelte';
|
|
7
|
+
import { BubbleMenuPlugin, type BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu';
|
|
8
|
+
import { PluginKey } from '@tiptap/pm/state';
|
|
9
|
+
import type { Editor } from '@tiptap/core';
|
|
10
|
+
|
|
11
|
+
type Props = {
|
|
12
|
+
editor: Editor;
|
|
13
|
+
pluginKey?: BubbleMenuPluginProps['pluginKey'];
|
|
14
|
+
updateDelay?: BubbleMenuPluginProps['updateDelay'];
|
|
15
|
+
resizeDelay?: BubbleMenuPluginProps['resizeDelay'];
|
|
16
|
+
appendTo?: BubbleMenuPluginProps['appendTo'];
|
|
17
|
+
shouldShow?: BubbleMenuPluginProps['shouldShow'];
|
|
18
|
+
getReferencedVirtualElement?: BubbleMenuPluginProps['getReferencedVirtualElement'];
|
|
19
|
+
options?: BubbleMenuPluginProps['options'];
|
|
20
|
+
class?: string;
|
|
21
|
+
children: Snippet;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
let {
|
|
25
|
+
editor,
|
|
26
|
+
pluginKey,
|
|
27
|
+
updateDelay,
|
|
28
|
+
resizeDelay,
|
|
29
|
+
appendTo,
|
|
30
|
+
shouldShow = null,
|
|
31
|
+
getReferencedVirtualElement,
|
|
32
|
+
options,
|
|
33
|
+
class: className,
|
|
34
|
+
children
|
|
35
|
+
}: Props = $props();
|
|
36
|
+
|
|
37
|
+
// svelte-ignore state_referenced_locally
|
|
38
|
+
const resolvedKey = pluginKey ?? new PluginKey('bubbleMenu');
|
|
39
|
+
|
|
40
|
+
let root = $state<HTMLDivElement | null>(null);
|
|
41
|
+
let skipFirst = true;
|
|
42
|
+
|
|
43
|
+
onMount(() => {
|
|
44
|
+
if (!root || !editor || editor.isDestroyed) return;
|
|
45
|
+
|
|
46
|
+
root.style.visibility = 'hidden';
|
|
47
|
+
root.style.position = 'absolute';
|
|
48
|
+
|
|
49
|
+
editor.registerPlugin(
|
|
50
|
+
BubbleMenuPlugin({
|
|
51
|
+
editor,
|
|
52
|
+
element: root,
|
|
53
|
+
pluginKey: resolvedKey,
|
|
54
|
+
updateDelay,
|
|
55
|
+
resizeDelay,
|
|
56
|
+
appendTo,
|
|
57
|
+
shouldShow,
|
|
58
|
+
getReferencedVirtualElement,
|
|
59
|
+
options
|
|
60
|
+
})
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
return () => {
|
|
64
|
+
editor.unregisterPlugin(resolvedKey);
|
|
65
|
+
requestAnimationFrame(() => {
|
|
66
|
+
// RAF: defer past in-flight Floating UI update
|
|
67
|
+
root?.parentNode?.removeChild(root);
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
$effect(() => {
|
|
73
|
+
updateDelay;
|
|
74
|
+
resizeDelay;
|
|
75
|
+
appendTo;
|
|
76
|
+
shouldShow;
|
|
77
|
+
getReferencedVirtualElement;
|
|
78
|
+
options;
|
|
79
|
+
|
|
80
|
+
if (skipFirst) {
|
|
81
|
+
skipFirst = false;
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (!editor || editor.isDestroyed) return;
|
|
85
|
+
|
|
86
|
+
editor.view.dispatch(
|
|
87
|
+
editor.state.tr.setMeta(resolvedKey, {
|
|
88
|
+
type: 'updateOptions',
|
|
89
|
+
options: {
|
|
90
|
+
updateDelay,
|
|
91
|
+
resizeDelay,
|
|
92
|
+
appendTo,
|
|
93
|
+
shouldShow,
|
|
94
|
+
getReferencedVirtualElement,
|
|
95
|
+
options
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
);
|
|
99
|
+
});
|
|
100
|
+
</script>
|
|
101
|
+
|
|
102
|
+
<div bind:this={root} class={className}>
|
|
103
|
+
{@render children()}
|
|
104
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
import { type BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu';
|
|
3
|
+
import type { Editor } from '@tiptap/core';
|
|
4
|
+
type Props = {
|
|
5
|
+
editor: Editor;
|
|
6
|
+
pluginKey?: BubbleMenuPluginProps['pluginKey'];
|
|
7
|
+
updateDelay?: BubbleMenuPluginProps['updateDelay'];
|
|
8
|
+
resizeDelay?: BubbleMenuPluginProps['resizeDelay'];
|
|
9
|
+
appendTo?: BubbleMenuPluginProps['appendTo'];
|
|
10
|
+
shouldShow?: BubbleMenuPluginProps['shouldShow'];
|
|
11
|
+
getReferencedVirtualElement?: BubbleMenuPluginProps['getReferencedVirtualElement'];
|
|
12
|
+
options?: BubbleMenuPluginProps['options'];
|
|
13
|
+
class?: string;
|
|
14
|
+
children: Snippet;
|
|
15
|
+
};
|
|
16
|
+
/** @internal */
|
|
17
|
+
declare const BubbleMenu: import("svelte").Component<Props, {}, "">;
|
|
18
|
+
type BubbleMenu = ReturnType<typeof BubbleMenu>;
|
|
19
|
+
export default BubbleMenu;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { onMount, getAllContexts } from 'svelte';
|
|
3
3
|
import { Editor, type Editor as EditorType } from '@tiptap/core';
|
|
4
|
-
import BubbleMenu from '@tiptap/extension-bubble-menu';
|
|
5
4
|
import { extensions } from './extensions.js';
|
|
5
|
+
import BubbleMenu from './bubble-menu.svelte';
|
|
6
6
|
import ToolbarButton from './toolbar-button.svelte';
|
|
7
7
|
import EditorToolbar from './editor-toolbar.svelte';
|
|
8
8
|
import LinkDialog from './link-dialog.svelte';
|
|
@@ -52,7 +52,6 @@
|
|
|
52
52
|
|
|
53
53
|
let element = $state<HTMLDivElement | null>(null);
|
|
54
54
|
let editorState = $state<{ editor: EditorType | null }>({ editor: null });
|
|
55
|
-
let bubbleMenu = $state<HTMLDivElement | null>(null);
|
|
56
55
|
|
|
57
56
|
// Dialog states
|
|
58
57
|
let linkDialogOpen = $state(false);
|
|
@@ -80,9 +79,6 @@
|
|
|
80
79
|
...extensions,
|
|
81
80
|
...extraExtensions,
|
|
82
81
|
HeadingA11yPlugin,
|
|
83
|
-
BubbleMenu.configure({
|
|
84
|
-
element: bubbleMenu!
|
|
85
|
-
}),
|
|
86
82
|
Placeholder.configure({
|
|
87
83
|
showOnlyCurrent: false,
|
|
88
84
|
placeholder: ({ node, hasAnchor, editor }) => {
|
|
@@ -154,16 +150,35 @@
|
|
|
154
150
|
{/if}
|
|
155
151
|
|
|
156
152
|
<!-- Bubble Menu -->
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
153
|
+
{#if ed}
|
|
154
|
+
<BubbleMenu
|
|
155
|
+
editor={ed}
|
|
156
|
+
appendTo={() => document.body}
|
|
157
|
+
options={{ scrollTarget: element!, placement: 'bottom', offset: 8 }}
|
|
158
|
+
shouldShow={({ editor, from, to }) =>
|
|
159
|
+
from !== to &&
|
|
160
|
+
!editor.isActive('image') &&
|
|
161
|
+
!editor.isActive('video') &&
|
|
162
|
+
!editor.isActive('figure') &&
|
|
163
|
+
!editor.isActive('codeBlock')}
|
|
164
|
+
>
|
|
165
|
+
<div
|
|
166
|
+
class="bg-popover text-popover-foreground flex items-center gap-0.5 rounded-lg border p-1 shadow-md"
|
|
167
|
+
>
|
|
160
168
|
{#if ed.isActive('link')}
|
|
161
169
|
{#if ed.getAttributes('link').target === '_blank'}
|
|
162
|
-
<span
|
|
170
|
+
<span
|
|
171
|
+
class="text-muted-foreground flex items-center px-1"
|
|
172
|
+
title="Otwiera w nowej karcie"
|
|
173
|
+
>
|
|
163
174
|
<ExternalLink class="h-4 w-4" />
|
|
164
175
|
</span>
|
|
165
176
|
{/if}
|
|
166
|
-
<ToolbarButton
|
|
177
|
+
<ToolbarButton
|
|
178
|
+
label="Edytuj link"
|
|
179
|
+
active={false}
|
|
180
|
+
onclick={() => (linkDialogOpen = true)}
|
|
181
|
+
>
|
|
167
182
|
<Pencil class="h-4 w-4" />
|
|
168
183
|
</ToolbarButton>
|
|
169
184
|
<ToolbarButton
|
|
@@ -270,13 +285,13 @@
|
|
|
270
285
|
</ToolbarButton>
|
|
271
286
|
{/if}
|
|
272
287
|
</div>
|
|
273
|
-
|
|
274
|
-
|
|
288
|
+
</BubbleMenu>
|
|
289
|
+
{/if}
|
|
275
290
|
|
|
276
291
|
<!-- Editor content -->
|
|
277
292
|
<div
|
|
278
293
|
bind:this={element}
|
|
279
|
-
class="prose prose-sm dark:prose-invert
|
|
294
|
+
class="prose prose-sm dark:prose-invert [&_.ProseMirror]:scroll-padding-top-12 max-h-112 max-w-none overflow-y-auto p-4 focus:outline-none [&_.ProseMirror]:min-h-[200px] [&_.ProseMirror]:outline-none"
|
|
280
295
|
></div>
|
|
281
296
|
</div>
|
|
282
297
|
</Tooltip.Provider>
|
|
@@ -287,14 +302,3 @@
|
|
|
287
302
|
<VideoDialog bind:open={videoDialogOpen} editor={ed} />
|
|
288
303
|
<TableDialog bind:open={tableDialogOpen} editor={ed} />
|
|
289
304
|
|
|
290
|
-
<style>
|
|
291
|
-
.bubble-menu {
|
|
292
|
-
height: 0;
|
|
293
|
-
overflow: visible;
|
|
294
|
-
visibility: hidden;
|
|
295
|
-
opacity: 0;
|
|
296
|
-
transition:
|
|
297
|
-
visibility 0.1s ease,
|
|
298
|
-
opacity 0.1s ease;
|
|
299
|
-
}
|
|
300
|
-
</style>
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
<LetterP class="h-4 w-4" />
|
|
87
87
|
</ToolbarButton>
|
|
88
88
|
|
|
89
|
-
<Separator orientation="vertical" class="mx-1 h-6" />
|
|
89
|
+
<Separator orientation="vertical" class="mx-1 hidden h-6 sm:block" />
|
|
90
90
|
|
|
91
91
|
<!-- Text formatting -->
|
|
92
92
|
<ToolbarButton
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
<Highlight class="h-4 w-4" />
|
|
126
126
|
</ToolbarButton>
|
|
127
127
|
|
|
128
|
-
<Separator orientation="vertical" class="mx-1 h-6" />
|
|
128
|
+
<Separator orientation="vertical" class="mx-1 hidden h-6 sm:block" />
|
|
129
129
|
|
|
130
130
|
<!-- Alignment -->
|
|
131
131
|
<ToolbarButton
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
<AlignJustified class="h-4 w-4" />
|
|
158
158
|
</ToolbarButton>
|
|
159
159
|
|
|
160
|
-
<Separator orientation="vertical" class="mx-1 h-6" />
|
|
160
|
+
<Separator orientation="vertical" class="mx-1 hidden h-6 sm:block" />
|
|
161
161
|
|
|
162
162
|
<!-- Lists & Quote -->
|
|
163
163
|
<ToolbarButton
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
<Quote class="h-4 w-4" />
|
|
183
183
|
</ToolbarButton>
|
|
184
184
|
|
|
185
|
-
<Separator orientation="vertical" class="mx-1 h-6" />
|
|
185
|
+
<Separator orientation="vertical" class="mx-1 hidden h-6 sm:block" />
|
|
186
186
|
|
|
187
187
|
<!-- Link, Image, Table -->
|
|
188
188
|
<ToolbarButton label={t.link} active={ed.isActive('link')} onclick={onLinkDialog}>
|
|
@@ -198,7 +198,7 @@
|
|
|
198
198
|
<Table class="h-4 w-4" />
|
|
199
199
|
</ToolbarButton>
|
|
200
200
|
|
|
201
|
-
<Separator orientation="vertical" class="mx-1 h-6" />
|
|
201
|
+
<Separator orientation="vertical" class="mx-1 hidden h-6 sm:block" />
|
|
202
202
|
|
|
203
203
|
<!-- Code -->
|
|
204
204
|
<ToolbarButton
|
|
@@ -217,14 +217,14 @@
|
|
|
217
217
|
</ToolbarButton>
|
|
218
218
|
|
|
219
219
|
{#if showInsertBlock && onInsertBlock}
|
|
220
|
-
<Separator orientation="vertical" class="mx-1 h-6" />
|
|
220
|
+
<Separator orientation="vertical" class="mx-1 hidden h-6 sm:block" />
|
|
221
221
|
<ToolbarButton label={t.insertBlock} active={false} onclick={onInsertBlock}>
|
|
222
222
|
<Plus class="h-4 w-4" />
|
|
223
223
|
</ToolbarButton>
|
|
224
224
|
{/if}
|
|
225
225
|
|
|
226
226
|
{#if showCodeView && onToggleCodeView}
|
|
227
|
-
<Separator orientation="vertical" class="mx-1 h-6" />
|
|
227
|
+
<Separator orientation="vertical" class="mx-1 hidden h-6 sm:block" />
|
|
228
228
|
|
|
229
229
|
<!-- HTML View -->
|
|
230
230
|
<ToolbarButton label={t.htmlView} active={isCodeViewActive} onclick={onToggleCodeView}>
|
|
@@ -15,7 +15,11 @@ import { FigureNode } from './figure-node.js';
|
|
|
15
15
|
const lowlight = createLowlight(common);
|
|
16
16
|
export const extensions = [
|
|
17
17
|
StarterKit.configure({
|
|
18
|
-
|
|
18
|
+
// StarterKit (TipTap v3) ships Link + Underline; we register CustomLink and
|
|
19
|
+
// Underline ourselves, so disable them here to avoid duplicate extensions.
|
|
20
|
+
codeBlock: false,
|
|
21
|
+
link: false,
|
|
22
|
+
underline: false
|
|
19
23
|
}),
|
|
20
24
|
CustomLink.configure({
|
|
21
25
|
openOnClick: false,
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
|
|
82
82
|
<!-- Dialog 1: Media selector -->
|
|
83
83
|
<Dialog.Root bind:open {onOpenChange}>
|
|
84
|
-
<Dialog.Content class="max-w-5xl! sm:max-w-5xl!">
|
|
84
|
+
<Dialog.Content fullscreenMobile class="max-w-5xl! sm:max-w-5xl!">
|
|
85
85
|
<Dialog.Header>
|
|
86
86
|
<Dialog.Title>{t.insertImage}</Dialog.Title>
|
|
87
87
|
</Dialog.Header>
|
|
@@ -183,6 +183,10 @@
|
|
|
183
183
|
.image-alt-input:focus {
|
|
184
184
|
border-color: var(--primary);
|
|
185
185
|
}
|
|
186
|
+
.image-alt-input:focus-visible {
|
|
187
|
+
outline: 2px solid var(--ring);
|
|
188
|
+
outline-offset: 1px;
|
|
189
|
+
}
|
|
186
190
|
.image-alt-actions {
|
|
187
191
|
display: flex;
|
|
188
192
|
gap: 8px;
|
|
@@ -256,6 +256,7 @@
|
|
|
256
256
|
<button
|
|
257
257
|
type="button"
|
|
258
258
|
class="flex w-full items-center gap-1 text-sm font-medium"
|
|
259
|
+
aria-expanded={a11yOpen}
|
|
259
260
|
onclick={() => (a11yOpen = !a11yOpen)}
|
|
260
261
|
>
|
|
261
262
|
{#if a11yOpen}
|
|
@@ -291,6 +292,7 @@
|
|
|
291
292
|
<button
|
|
292
293
|
type="button"
|
|
293
294
|
class="flex w-full items-center gap-1 text-sm font-medium"
|
|
295
|
+
aria-expanded={relOpen}
|
|
294
296
|
onclick={() => (relOpen = !relOpen)}
|
|
295
297
|
>
|
|
296
298
|
{#if relOpen}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { onMount } from 'svelte';
|
|
3
3
|
import { Editor, type Editor as EditorType } from '@tiptap/core';
|
|
4
|
-
import BubbleMenu from '@tiptap/extension-bubble-menu';
|
|
5
4
|
import { extensions } from './extensions.js';
|
|
6
5
|
import Placeholder from '@tiptap/extension-placeholder';
|
|
6
|
+
import BubbleMenu from './bubble-menu.svelte';
|
|
7
7
|
import ToolbarButton from './toolbar-button.svelte';
|
|
8
8
|
import EditorToolbar from './editor-toolbar.svelte';
|
|
9
9
|
import LinkDialog from './link-dialog.svelte';
|
|
@@ -40,7 +40,6 @@
|
|
|
40
40
|
|
|
41
41
|
let element = $state<HTMLDivElement | null>(null);
|
|
42
42
|
let editorState = $state<{ editor: EditorType | null }>({ editor: null });
|
|
43
|
-
let bubbleMenu = $state<HTMLDivElement | null>(null);
|
|
44
43
|
let isCodeViewActive = $state(false);
|
|
45
44
|
|
|
46
45
|
// Dialog states
|
|
@@ -54,9 +53,6 @@
|
|
|
54
53
|
element: element!,
|
|
55
54
|
extensions: [
|
|
56
55
|
...extensions,
|
|
57
|
-
BubbleMenu.configure({
|
|
58
|
-
element: bubbleMenu!
|
|
59
|
-
}),
|
|
60
56
|
Placeholder.configure({
|
|
61
57
|
placeholder: 'Wpisz treść...',
|
|
62
58
|
showOnlyCurrent: true
|
|
@@ -109,9 +105,21 @@
|
|
|
109
105
|
{/if}
|
|
110
106
|
|
|
111
107
|
<!-- Bubble Menu -->
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
108
|
+
{#if ed}
|
|
109
|
+
<BubbleMenu
|
|
110
|
+
editor={ed}
|
|
111
|
+
appendTo={() => document.body}
|
|
112
|
+
options={{ scrollTarget: element!, placement: 'bottom', offset: 8 }}
|
|
113
|
+
shouldShow={({ editor, from, to }) =>
|
|
114
|
+
from !== to &&
|
|
115
|
+
!editor.isActive('image') &&
|
|
116
|
+
!editor.isActive('video') &&
|
|
117
|
+
!editor.isActive('figure') &&
|
|
118
|
+
!editor.isActive('codeBlock')}
|
|
119
|
+
>
|
|
120
|
+
<div
|
|
121
|
+
class="bg-popover text-popover-foreground flex items-center gap-0.5 rounded-lg border p-1 shadow-md"
|
|
122
|
+
>
|
|
115
123
|
{#if ed.isActive('link')}
|
|
116
124
|
{#if ed.getAttributes('link').target === '_blank'}
|
|
117
125
|
<span class="text-muted-foreground flex items-center px-1" title="Otwiera w nowej karcie">
|
|
@@ -225,8 +233,8 @@
|
|
|
225
233
|
</ToolbarButton>
|
|
226
234
|
{/if}
|
|
227
235
|
</div>
|
|
228
|
-
|
|
229
|
-
|
|
236
|
+
</BubbleMenu>
|
|
237
|
+
{/if}
|
|
230
238
|
|
|
231
239
|
<!-- Editor content -->
|
|
232
240
|
<div
|
|
@@ -250,16 +258,6 @@
|
|
|
250
258
|
<TableDialog bind:open={tableDialogOpen} editor={ed} />
|
|
251
259
|
|
|
252
260
|
<style>
|
|
253
|
-
.bubble-menu {
|
|
254
|
-
height: 0;
|
|
255
|
-
overflow: visible;
|
|
256
|
-
visibility: hidden;
|
|
257
|
-
opacity: 0;
|
|
258
|
-
transition:
|
|
259
|
-
visibility 0.1s ease,
|
|
260
|
-
opacity 0.1s ease;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
261
|
:global(.tiptap-highlight) {
|
|
264
262
|
background-color: rgb(250 204 21 / 0.4);
|
|
265
263
|
padding: 0.125em 0.25em;
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
</script>
|
|
64
64
|
|
|
65
65
|
<Dialog.Root bind:open {onOpenChange}>
|
|
66
|
-
<Dialog.Content class="max-w-5xl! sm:max-w-5xl!">
|
|
66
|
+
<Dialog.Content fullscreenMobile class="max-w-5xl! sm:max-w-5xl!">
|
|
67
67
|
<Dialog.Header>
|
|
68
68
|
<Dialog.Title>{t.insertVideo}</Dialog.Title>
|
|
69
69
|
</Dialog.Header>
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AriaCMS — Error message catalog (COGA-friendly, PL/EN).
|
|
3
|
+
*
|
|
4
|
+
* Tone-of-voice (zob. `src/stories/docs/tone-of-voice.mdx`):
|
|
5
|
+
* - Mów do użytkownika, nie o nim
|
|
6
|
+
* - Konkretnie + akcja co zrobić, nie sucha diagnoza
|
|
7
|
+
* - Bez żargonu, kodów HTTP, "UWAGA!", "Validation failed"
|
|
8
|
+
* - Bez strachu — prowadź, nie strasz
|
|
9
|
+
*
|
|
10
|
+
* Wzorzec: "Brak/Problem X — zrób Y, żeby Z."
|
|
11
|
+
*
|
|
12
|
+
* `@public` od v0.26.0. Migracja do paraglide w S10.
|
|
13
|
+
*/
|
|
14
|
+
import type { InterfaceLanguage } from "../../types/languages.js";
|
|
15
|
+
type Bilingual = {
|
|
16
|
+
pl: string;
|
|
17
|
+
en: string;
|
|
18
|
+
};
|
|
19
|
+
export declare const errorMessages: {
|
|
20
|
+
readonly validation: {
|
|
21
|
+
readonly required: {
|
|
22
|
+
readonly pl: "Wpisz to pole, żeby zapisać.";
|
|
23
|
+
readonly en: "Fill in this field to save.";
|
|
24
|
+
};
|
|
25
|
+
readonly invalidEmail: {
|
|
26
|
+
readonly pl: "Sprawdź email — wygląda jakby brakowało @ i domeny.";
|
|
27
|
+
readonly en: "Check the email — looks like @ or domain is missing.";
|
|
28
|
+
};
|
|
29
|
+
readonly minLength: (n: number) => Bilingual;
|
|
30
|
+
readonly passwordWeak: {
|
|
31
|
+
readonly pl: "Hasło musi mieć wielką literę, cyfrę i znak specjalny — to chroni twoje konto.";
|
|
32
|
+
readonly en: "Password needs an uppercase letter, a digit and a special character — for your account safety.";
|
|
33
|
+
};
|
|
34
|
+
readonly passwordsDoNotMatch: {
|
|
35
|
+
readonly pl: "Hasła się różnią — wpisz to samo w obu polach.";
|
|
36
|
+
readonly en: "Passwords don't match — type the same one in both fields.";
|
|
37
|
+
};
|
|
38
|
+
readonly invalidFormat: {
|
|
39
|
+
readonly pl: "Sprawdź wpisaną wartość — format wygląda na inny niż oczekiwany.";
|
|
40
|
+
readonly en: "Check the value — the format looks unexpected.";
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
readonly network: {
|
|
44
|
+
readonly offline: {
|
|
45
|
+
readonly pl: "Brak połączenia z internetem — sprawdź sieć i spróbuj ponownie.";
|
|
46
|
+
readonly en: "No internet connection — check your network and try again.";
|
|
47
|
+
};
|
|
48
|
+
readonly timeout: {
|
|
49
|
+
readonly pl: "Serwer odpowiada wolno — spróbuj jeszcze raz za chwilę.";
|
|
50
|
+
readonly en: "The server is slow to respond — try again in a moment.";
|
|
51
|
+
};
|
|
52
|
+
readonly generic: {
|
|
53
|
+
readonly pl: "Nie udało się połączyć — spróbuj jeszcze raz.";
|
|
54
|
+
readonly en: "Couldn't connect — try again.";
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
readonly permission: {
|
|
58
|
+
readonly denied: {
|
|
59
|
+
readonly pl: "Nie masz dostępu do tego działania — poproś administratora o uprawnienia.";
|
|
60
|
+
readonly en: "You don't have access to this action — ask an admin for permissions.";
|
|
61
|
+
};
|
|
62
|
+
readonly sessionExpired: {
|
|
63
|
+
readonly pl: "Sesja wygasła — zaloguj się ponownie, żeby kontynuować.";
|
|
64
|
+
readonly en: "Your session expired — sign in again to continue.";
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
readonly conflict: {
|
|
68
|
+
readonly nameTaken: {
|
|
69
|
+
readonly pl: "Ta nazwa jest już zajęta — wybierz inną.";
|
|
70
|
+
readonly en: "That name is already taken — pick a different one.";
|
|
71
|
+
};
|
|
72
|
+
readonly alreadyExists: {
|
|
73
|
+
readonly pl: "Taki wpis już istnieje — sprawdź czy nie tworzysz duplikatu.";
|
|
74
|
+
readonly en: "An item like this already exists — check that you're not duplicating it.";
|
|
75
|
+
};
|
|
76
|
+
readonly staleData: {
|
|
77
|
+
readonly pl: "Ktoś zaktualizował te dane — odśwież stronę i wprowadź zmiany ponownie.";
|
|
78
|
+
readonly en: "Someone updated this data — refresh the page and try again.";
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
readonly server: {
|
|
82
|
+
readonly saveFailed: {
|
|
83
|
+
readonly pl: "Nie udało się zapisać — spróbuj jeszcze raz.";
|
|
84
|
+
readonly en: "Couldn't save — try again.";
|
|
85
|
+
};
|
|
86
|
+
readonly loadFailed: {
|
|
87
|
+
readonly pl: "Nie udało się wczytać danych — odśwież stronę.";
|
|
88
|
+
readonly en: "Couldn't load the data — refresh the page.";
|
|
89
|
+
};
|
|
90
|
+
readonly uploadFailed: {
|
|
91
|
+
readonly pl: "Nie udało się przesłać pliku — spróbuj jeszcze raz.";
|
|
92
|
+
readonly en: "Couldn't upload the file — try again.";
|
|
93
|
+
};
|
|
94
|
+
readonly generic: {
|
|
95
|
+
readonly pl: "Coś poszło nie tak — spróbuj jeszcze raz.";
|
|
96
|
+
readonly en: "Something went wrong — try again.";
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
readonly upload: {
|
|
100
|
+
readonly fileTooLarge: (maxMB: number) => Bilingual;
|
|
101
|
+
readonly unsupportedType: {
|
|
102
|
+
readonly pl: "Ten format nie jest obsługiwany — wybierz inny plik.";
|
|
103
|
+
readonly en: "This format isn't supported — pick a different file.";
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
readonly notFound: {
|
|
107
|
+
readonly entry: {
|
|
108
|
+
readonly pl: "Nie znaleziono wpisu — mógł zostać usunięty lub przeniesiony.";
|
|
109
|
+
readonly en: "Entry not found — it may have been deleted or moved.";
|
|
110
|
+
};
|
|
111
|
+
readonly page: {
|
|
112
|
+
readonly pl: "Nie znaleziono strony — sprawdź adres lub wróć do panelu.";
|
|
113
|
+
readonly en: "Page not found — check the address or return to the dashboard.";
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
export declare const successMessages: {
|
|
118
|
+
readonly saved: {
|
|
119
|
+
readonly pl: "Zapisano.";
|
|
120
|
+
readonly en: "Saved.";
|
|
121
|
+
};
|
|
122
|
+
readonly published: {
|
|
123
|
+
readonly pl: "Opublikowano — zmiany są już widoczne na stronie.";
|
|
124
|
+
readonly en: "Published — changes are now live.";
|
|
125
|
+
};
|
|
126
|
+
readonly uploaded: {
|
|
127
|
+
readonly pl: "Plik przesłany.";
|
|
128
|
+
readonly en: "File uploaded.";
|
|
129
|
+
};
|
|
130
|
+
readonly deleted: {
|
|
131
|
+
readonly pl: "Usunięto.";
|
|
132
|
+
readonly en: "Deleted.";
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Pobierz zlokalizowany komunikat dla interfejsu.
|
|
137
|
+
* @example pickError(errorMessages.server.saveFailed, lang.current)
|
|
138
|
+
*/
|
|
139
|
+
export declare function pickError(msg: Bilingual, lang: InterfaceLanguage): string;
|
|
140
|
+
export {};
|