includio-cms 0.25.0 → 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,21 +1,107 @@
|
|
|
1
1
|
<script module>
|
|
2
2
|
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
Field,
|
|
5
|
+
FieldLabel,
|
|
6
|
+
FieldContent,
|
|
7
|
+
FieldControl,
|
|
8
|
+
FieldDescription,
|
|
9
|
+
FieldError,
|
|
10
|
+
} from './index.js';
|
|
4
11
|
import { Input } from '../input/index.js';
|
|
5
12
|
|
|
6
13
|
const { Story } = defineMeta({
|
|
7
14
|
title: 'UI/Forms/Field',
|
|
8
15
|
component: Field,
|
|
9
16
|
tags: ['autodocs'],
|
|
17
|
+
parameters: {
|
|
18
|
+
docs: {
|
|
19
|
+
description: {
|
|
20
|
+
component: 'Wrapper formularza spinający label, kontrolkę, opis i błąd w jeden ARIA-poprawny pakiet. Używaj `Field.Root` dla każdego pola w `<form>`.',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
10
24
|
});
|
|
11
25
|
</script>
|
|
12
26
|
|
|
13
|
-
<Story name="
|
|
14
|
-
|
|
15
|
-
<
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
27
|
+
<Story name="Auto-wired (label + description + input)">
|
|
28
|
+
{#snippet template()}
|
|
29
|
+
<div style="max-width:320px;">
|
|
30
|
+
<Field>
|
|
31
|
+
<FieldLabel>Tytuł wpisu</FieldLabel>
|
|
32
|
+
<FieldControl>
|
|
33
|
+
{#snippet child(props)}
|
|
34
|
+
<Input {...props} placeholder="Wpisz tytuł…" />
|
|
35
|
+
{/snippet}
|
|
36
|
+
</FieldControl>
|
|
37
|
+
<FieldDescription>Krótki, konkretny — pojawi się na liście wpisów.</FieldDescription>
|
|
38
|
+
</Field>
|
|
39
|
+
</div>
|
|
40
|
+
{/snippet}
|
|
41
|
+
</Story>
|
|
42
|
+
|
|
43
|
+
<Story name="Required + auto aria-required">
|
|
44
|
+
{#snippet template()}
|
|
45
|
+
<div style="max-width:320px;">
|
|
46
|
+
<Field required>
|
|
47
|
+
<FieldLabel>Email</FieldLabel>
|
|
48
|
+
<FieldControl>
|
|
49
|
+
{#snippet child(props)}
|
|
50
|
+
<Input {...props} type="email" placeholder="ty@przykład.pl" />
|
|
51
|
+
{/snippet}
|
|
52
|
+
</FieldControl>
|
|
53
|
+
<FieldDescription>Na ten adres wyślemy potwierdzenie.</FieldDescription>
|
|
54
|
+
</Field>
|
|
55
|
+
</div>
|
|
56
|
+
{/snippet}
|
|
57
|
+
</Story>
|
|
58
|
+
|
|
59
|
+
<Story name="Error state (auto aria-invalid + describedby)">
|
|
60
|
+
{#snippet template()}
|
|
61
|
+
<div style="max-width:320px;">
|
|
62
|
+
<Field required>
|
|
63
|
+
<FieldLabel>Email</FieldLabel>
|
|
64
|
+
<FieldControl>
|
|
65
|
+
{#snippet child(props)}
|
|
66
|
+
<Input {...props} type="email" value="kowalski" />
|
|
67
|
+
{/snippet}
|
|
68
|
+
</FieldControl>
|
|
69
|
+
<FieldDescription>Na ten adres wyślemy potwierdzenie.</FieldDescription>
|
|
70
|
+
<FieldError>Sprawdź email — wygląda jakby brakowało @ i domeny.</FieldError>
|
|
71
|
+
</Field>
|
|
72
|
+
</div>
|
|
73
|
+
{/snippet}
|
|
74
|
+
</Story>
|
|
75
|
+
|
|
76
|
+
<Story name="Number with hint">
|
|
77
|
+
{#snippet template()}
|
|
78
|
+
<div style="max-width:280px;">
|
|
79
|
+
<Field required>
|
|
80
|
+
<FieldLabel>Ocena</FieldLabel>
|
|
81
|
+
<FieldContent>
|
|
82
|
+
<FieldControl>
|
|
83
|
+
{#snippet child(props)}
|
|
84
|
+
<Input {...props} type="number" value="82" min={0} max={100} step={2} />
|
|
85
|
+
{/snippet}
|
|
86
|
+
</FieldControl>
|
|
87
|
+
</FieldContent>
|
|
88
|
+
<FieldDescription>Zakres: 0–100 · Krok: 2</FieldDescription>
|
|
89
|
+
</Field>
|
|
90
|
+
</div>
|
|
91
|
+
{/snippet}
|
|
92
|
+
</Story>
|
|
93
|
+
|
|
94
|
+
<Story name="Empty / minimal">
|
|
95
|
+
{#snippet template()}
|
|
96
|
+
<div style="max-width:280px;">
|
|
97
|
+
<Field>
|
|
98
|
+
<FieldLabel>Tytuł</FieldLabel>
|
|
99
|
+
<FieldControl>
|
|
100
|
+
{#snippet child(props)}
|
|
101
|
+
<Input {...props} placeholder="Wpisz tytuł…" />
|
|
102
|
+
{/snippet}
|
|
103
|
+
</FieldControl>
|
|
104
|
+
</Field>
|
|
105
|
+
</div>
|
|
106
|
+
{/snippet}
|
|
21
107
|
</Story>
|
|
@@ -29,16 +29,72 @@
|
|
|
29
29
|
<script lang="ts">
|
|
30
30
|
import { cn, type WithElementRef } from "../../../utils.js";
|
|
31
31
|
import type { HTMLAttributes } from "svelte/elements";
|
|
32
|
+
import { setFieldContext, type FieldA11yProps } from "./field-context.svelte.js";
|
|
32
33
|
|
|
33
34
|
let {
|
|
34
35
|
ref = $bindable(null),
|
|
35
36
|
class: className,
|
|
36
37
|
orientation = "vertical",
|
|
38
|
+
id: idProp,
|
|
39
|
+
required = false,
|
|
37
40
|
children,
|
|
38
41
|
...restProps
|
|
39
42
|
}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {
|
|
40
43
|
orientation?: FieldOrientation;
|
|
44
|
+
id?: string;
|
|
45
|
+
required?: boolean;
|
|
41
46
|
} = $props();
|
|
47
|
+
|
|
48
|
+
const autoId = $props.id();
|
|
49
|
+
const baseId = $derived(idProp ?? autoId);
|
|
50
|
+
const inputId = $derived(`${baseId}-control`);
|
|
51
|
+
const descriptionId = $derived(`${baseId}-description`);
|
|
52
|
+
const errorId = $derived(`${baseId}-error`);
|
|
53
|
+
|
|
54
|
+
let descriptionRefs = $state(0);
|
|
55
|
+
let errorRefs = $state(0);
|
|
56
|
+
|
|
57
|
+
const ctx = setFieldContext({
|
|
58
|
+
get inputId() {
|
|
59
|
+
return inputId;
|
|
60
|
+
},
|
|
61
|
+
get descriptionId() {
|
|
62
|
+
return descriptionId;
|
|
63
|
+
},
|
|
64
|
+
get errorId() {
|
|
65
|
+
return errorId;
|
|
66
|
+
},
|
|
67
|
+
get required() {
|
|
68
|
+
return required;
|
|
69
|
+
},
|
|
70
|
+
get hasDescription() {
|
|
71
|
+
return descriptionRefs > 0;
|
|
72
|
+
},
|
|
73
|
+
get hasError() {
|
|
74
|
+
return errorRefs > 0;
|
|
75
|
+
},
|
|
76
|
+
get invalid() {
|
|
77
|
+
return errorRefs > 0;
|
|
78
|
+
},
|
|
79
|
+
registerDescription: () => void descriptionRefs++,
|
|
80
|
+
unregisterDescription: () => void descriptionRefs--,
|
|
81
|
+
registerError: () => void errorRefs++,
|
|
82
|
+
unregisterError: () => void errorRefs--,
|
|
83
|
+
getControlProps(): FieldA11yProps {
|
|
84
|
+
const describedBy = [
|
|
85
|
+
descriptionRefs > 0 ? descriptionId : null,
|
|
86
|
+
errorRefs > 0 ? errorId : null,
|
|
87
|
+
]
|
|
88
|
+
.filter(Boolean)
|
|
89
|
+
.join(" ");
|
|
90
|
+
return {
|
|
91
|
+
id: inputId,
|
|
92
|
+
"aria-describedby": describedBy || undefined,
|
|
93
|
+
"aria-invalid": errorRefs > 0 ? "true" : undefined,
|
|
94
|
+
"aria-required": required ? "true" : undefined,
|
|
95
|
+
};
|
|
96
|
+
},
|
|
97
|
+
});
|
|
42
98
|
</script>
|
|
43
99
|
|
|
44
100
|
<div
|
|
@@ -46,6 +102,7 @@
|
|
|
46
102
|
role="group"
|
|
47
103
|
data-slot="field"
|
|
48
104
|
data-orientation={orientation}
|
|
105
|
+
data-invalid={ctx.invalid || undefined}
|
|
49
106
|
class={cn(fieldVariants({ orientation }), className)}
|
|
50
107
|
{...restProps}
|
|
51
108
|
>
|
|
@@ -23,6 +23,8 @@ import { type WithElementRef } from "../../../utils.js";
|
|
|
23
23
|
import type { HTMLAttributes } from "svelte/elements";
|
|
24
24
|
type $$ComponentProps = WithElementRef<HTMLAttributes<HTMLDivElement>> & {
|
|
25
25
|
orientation?: FieldOrientation;
|
|
26
|
+
id?: string;
|
|
27
|
+
required?: boolean;
|
|
26
28
|
};
|
|
27
29
|
declare const Field: import("svelte").Component<$$ComponentProps, {}, "ref">;
|
|
28
30
|
type Field = ReturnType<typeof Field>;
|
|
@@ -3,9 +3,11 @@ import Set from "./field-set.svelte";
|
|
|
3
3
|
import Legend from "./field-legend.svelte";
|
|
4
4
|
import Group from "./field-group.svelte";
|
|
5
5
|
import Content from "./field-content.svelte";
|
|
6
|
+
import Control from "./field-control.svelte";
|
|
6
7
|
import Label from "./field-label.svelte";
|
|
7
8
|
import Title from "./field-title.svelte";
|
|
8
9
|
import Description from "./field-description.svelte";
|
|
9
10
|
import Separator from "./field-separator.svelte";
|
|
10
11
|
import Error from "./field-error.svelte";
|
|
11
|
-
export {
|
|
12
|
+
export { getFieldContext, setFieldContext, type FieldA11yProps, type FieldContext, } from "./field-context.svelte.js";
|
|
13
|
+
export { Field, Set, Legend, Group, Content, Control, Label, Title, Description, Separator, Error, Set as FieldSet, Legend as FieldLegend, Group as FieldGroup, Content as FieldContent, Control as FieldControl, Label as FieldLabel, Title as FieldTitle, Description as FieldDescription, Separator as FieldSeparator, Error as FieldError, };
|
|
@@ -3,11 +3,13 @@ import Set from "./field-set.svelte";
|
|
|
3
3
|
import Legend from "./field-legend.svelte";
|
|
4
4
|
import Group from "./field-group.svelte";
|
|
5
5
|
import Content from "./field-content.svelte";
|
|
6
|
+
import Control from "./field-control.svelte";
|
|
6
7
|
import Label from "./field-label.svelte";
|
|
7
8
|
import Title from "./field-title.svelte";
|
|
8
9
|
import Description from "./field-description.svelte";
|
|
9
10
|
import Separator from "./field-separator.svelte";
|
|
10
11
|
import Error from "./field-error.svelte";
|
|
11
|
-
export {
|
|
12
|
+
export { getFieldContext, setFieldContext, } from "./field-context.svelte.js";
|
|
13
|
+
export { Field, Set, Legend, Group, Content, Control, Label, Title, Description, Separator, Error,
|
|
12
14
|
//
|
|
13
|
-
Set as FieldSet, Legend as FieldLegend, Group as FieldGroup, Content as FieldContent, Label as FieldLabel, Title as FieldTitle, Description as FieldDescription, Separator as FieldSeparator, Error as FieldError, };
|
|
15
|
+
Set as FieldSet, Legend as FieldLegend, Group as FieldGroup, Content as FieldContent, Control as FieldControl, Label as FieldLabel, Title as FieldTitle, Description as FieldDescription, Separator as FieldSeparator, Error as FieldError, };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import DemoForm from '../../../../stories/_fixtures/demo-form.svelte';
|
|
4
|
+
|
|
5
|
+
// superForm + zod4Client używa WeakMap do cache walidatorów; Storybook MockProvider
|
|
6
|
+
// invalidates the schema reference między decoratorami w vitest-browser ("Invalid value
|
|
7
|
+
// used as weak map key"). Stories działają w dev (`pnpm storybook`), test runner pada.
|
|
8
|
+
// Odłożone do S10 (real browser via MCP).
|
|
9
|
+
const { Story } = defineMeta({
|
|
10
|
+
title: 'UI/Forms/Form',
|
|
11
|
+
component: DemoForm,
|
|
12
|
+
tags: ['autodocs', 'no-test'],
|
|
13
|
+
parameters: {
|
|
14
|
+
docs: {
|
|
15
|
+
description: {
|
|
16
|
+
component: 'Wzorzec formularza z `sveltekit-superforms` + `formsnap`. Walidacja Valibot, błędy renderowane przez `Field.Error`, focus na pierwszy błąd po submit.',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<Story name="formsnap + superForm (demo)" args={{ autoSubmit: false }} />
|
|
24
|
+
|
|
25
|
+
<Story name="With initial errors (autoSubmit)" args={{ autoSubmit: true }} />
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export default Form;
|
|
2
|
+
type Form = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const Form: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
15
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
16
|
+
$$bindings?: Bindings;
|
|
17
|
+
} & Exports;
|
|
18
|
+
(internal: unknown, props: {
|
|
19
|
+
$$events?: Events;
|
|
20
|
+
$$slots?: Slots;
|
|
21
|
+
}): Exports & {
|
|
22
|
+
$set?: any;
|
|
23
|
+
$on?: any;
|
|
24
|
+
};
|
|
25
|
+
z_$$bindings?: Bindings;
|
|
26
|
+
}
|
|
@@ -6,6 +6,32 @@
|
|
|
6
6
|
title: 'UI/Forms/Input',
|
|
7
7
|
component: Input,
|
|
8
8
|
tags: ['autodocs'],
|
|
9
|
+
parameters: {
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component: 'Pole tekstowe. Zawsze wewnątrz `Field.Root` — wtedy `aria-describedby` (opis + błąd) i `aria-invalid` zostaną dopięte automatycznie.',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
argTypes: {
|
|
17
|
+
type: {
|
|
18
|
+
control: 'select',
|
|
19
|
+
options: ['text', 'email', 'password', 'number', 'search', 'tel', 'url'],
|
|
20
|
+
description: 'Typ HTML inputu (wpływa na klawiaturę mobilną i walidację).',
|
|
21
|
+
},
|
|
22
|
+
placeholder: {
|
|
23
|
+
control: 'text',
|
|
24
|
+
description: 'Tekst zachęty — NIE używaj zamiast labela.',
|
|
25
|
+
},
|
|
26
|
+
disabled: {
|
|
27
|
+
control: 'boolean',
|
|
28
|
+
description: 'Blokada z pełną nieaktywnością.',
|
|
29
|
+
},
|
|
30
|
+
readOnly: {
|
|
31
|
+
control: 'boolean',
|
|
32
|
+
description: 'Pole tylko do odczytu (skopiowanie tak, edycja nie).',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
9
35
|
});
|
|
10
36
|
</script>
|
|
11
37
|
|
|
@@ -2,7 +2,7 @@ declare const InputGroupInput: import("svelte").Component<(Omit<import("svelte/e
|
|
|
2
2
|
type: "file";
|
|
3
3
|
files?: FileList;
|
|
4
4
|
} | {
|
|
5
|
-
type?: "number" | "image" | "url" | "text" | "date" | "radio" | "color" | "button" | "checkbox" | "search" | (string & {}) | "email" | "password" | "time" | "hidden" | "reset" | "submit" | "
|
|
5
|
+
type?: "number" | "image" | "url" | "text" | "date" | "radio" | "color" | "button" | "checkbox" | "search" | (string & {}) | "email" | "tel" | "password" | "time" | "hidden" | "reset" | "submit" | "datetime-local" | "month" | "range" | "week";
|
|
6
6
|
files?: undefined;
|
|
7
7
|
})) & {
|
|
8
8
|
ref?: HTMLElement | null | undefined;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import * as InputGroup from './index.js';
|
|
4
|
+
import { Root as InputGroupRoot } from './index.js';
|
|
5
|
+
import { Label } from '../label/index.js';
|
|
6
|
+
|
|
7
|
+
const { Story } = defineMeta({
|
|
8
|
+
title: 'UI/Forms/InputGroup',
|
|
9
|
+
component: InputGroupRoot,
|
|
10
|
+
tags: ['autodocs'],
|
|
11
|
+
parameters: {
|
|
12
|
+
docs: {
|
|
13
|
+
description: {
|
|
14
|
+
component: 'Złożenie inputu z dodatkami (prefix, suffix, akcje). Składaj `InputGroupRoot > InputGroupAddon > InputGroupInput`.',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<Story name="Prefix addon">
|
|
22
|
+
<div class="space-y-2" style="width:320px;">
|
|
23
|
+
<Label for="ig-amount">Kwota</Label>
|
|
24
|
+
<InputGroup.Root>
|
|
25
|
+
<InputGroup.Addon align="inline-start">
|
|
26
|
+
<InputGroup.Text>PLN</InputGroup.Text>
|
|
27
|
+
</InputGroup.Addon>
|
|
28
|
+
<InputGroup.Input id="ig-amount" type="number" placeholder="0.00" />
|
|
29
|
+
</InputGroup.Root>
|
|
30
|
+
</div>
|
|
31
|
+
</Story>
|
|
32
|
+
|
|
33
|
+
<Story name="Suffix button">
|
|
34
|
+
<div class="space-y-2" style="width:320px;">
|
|
35
|
+
<Label for="ig-search">Szukaj</Label>
|
|
36
|
+
<InputGroup.Root>
|
|
37
|
+
<InputGroup.Input id="ig-search" placeholder="Wpisz frazę…" />
|
|
38
|
+
<InputGroup.Addon align="inline-end">
|
|
39
|
+
<InputGroup.Button>Szukaj</InputGroup.Button>
|
|
40
|
+
</InputGroup.Addon>
|
|
41
|
+
</InputGroup.Root>
|
|
42
|
+
</div>
|
|
43
|
+
</Story>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export default InputGroup;
|
|
2
|
+
type InputGroup = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const InputGroup: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
import * as InputGroup from './index.js';
|
|
15
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
16
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
17
|
+
$$bindings?: Bindings;
|
|
18
|
+
} & Exports;
|
|
19
|
+
(internal: unknown, props: {
|
|
20
|
+
$$events?: Events;
|
|
21
|
+
$$slots?: Slots;
|
|
22
|
+
}): Exports & {
|
|
23
|
+
$set?: any;
|
|
24
|
+
$on?: any;
|
|
25
|
+
};
|
|
26
|
+
z_$$bindings?: Bindings;
|
|
27
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import * as Item from './index.js';
|
|
4
|
+
import { Root as ItemRoot } from './index.js';
|
|
5
|
+
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
title: 'UI/Data/Item',
|
|
8
|
+
component: ItemRoot,
|
|
9
|
+
tags: ['autodocs'],
|
|
10
|
+
parameters: {
|
|
11
|
+
docs: {
|
|
12
|
+
description: {
|
|
13
|
+
component: 'Komponowalny rekord listy (avatar + treść + akcja). Zastępuje custom `<li>` z manualnym layoutem. Używaj w sidebarze, listach pickerów, dropdownach.',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<Story name="Default">
|
|
21
|
+
<Item.Root>
|
|
22
|
+
<Item.Content>
|
|
23
|
+
<Item.Title>Zamówienie #ZAM-2026-0001</Item.Title>
|
|
24
|
+
<Item.Description>Jan Kowalski · 123,00 PLN</Item.Description>
|
|
25
|
+
</Item.Content>
|
|
26
|
+
</Item.Root>
|
|
27
|
+
</Story>
|
|
28
|
+
|
|
29
|
+
<Story name="Outline + actions">
|
|
30
|
+
<Item.Root variant="outline">
|
|
31
|
+
<Item.Content>
|
|
32
|
+
<Item.Title>Wpis "Pierwszy"</Item.Title>
|
|
33
|
+
<Item.Description>Zaktualizowany 15 stycznia 2026</Item.Description>
|
|
34
|
+
</Item.Content>
|
|
35
|
+
<Item.Actions>
|
|
36
|
+
<button>Edytuj</button>
|
|
37
|
+
</Item.Actions>
|
|
38
|
+
</Item.Root>
|
|
39
|
+
</Story>
|
|
40
|
+
|
|
41
|
+
<Story name="Group with separators">
|
|
42
|
+
<Item.Group>
|
|
43
|
+
<Item.Root variant="muted">
|
|
44
|
+
<Item.Content>
|
|
45
|
+
<Item.Title>Pierwszy element</Item.Title>
|
|
46
|
+
</Item.Content>
|
|
47
|
+
</Item.Root>
|
|
48
|
+
<Item.Separator />
|
|
49
|
+
<Item.Root variant="muted">
|
|
50
|
+
<Item.Content>
|
|
51
|
+
<Item.Title>Drugi element</Item.Title>
|
|
52
|
+
</Item.Content>
|
|
53
|
+
</Item.Root>
|
|
54
|
+
<Item.Separator />
|
|
55
|
+
<Item.Root variant="muted">
|
|
56
|
+
<Item.Content>
|
|
57
|
+
<Item.Title>Trzeci element</Item.Title>
|
|
58
|
+
</Item.Content>
|
|
59
|
+
</Item.Root>
|
|
60
|
+
</Item.Group>
|
|
61
|
+
</Story>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export default Item;
|
|
2
|
+
type Item = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const Item: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
import * as Item from './index.js';
|
|
15
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
16
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
17
|
+
$$bindings?: Bindings;
|
|
18
|
+
} & Exports;
|
|
19
|
+
(internal: unknown, props: {
|
|
20
|
+
$$events?: Events;
|
|
21
|
+
$$slots?: Slots;
|
|
22
|
+
}): Exports & {
|
|
23
|
+
$set?: any;
|
|
24
|
+
$on?: any;
|
|
25
|
+
};
|
|
26
|
+
z_$$bindings?: Bindings;
|
|
27
|
+
}
|
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
title: 'UI/Forms/Label',
|
|
7
7
|
component: Label,
|
|
8
8
|
tags: ['autodocs'],
|
|
9
|
+
parameters: {
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component: 'Etykieta pola. W `Field.Root` używana automatycznie. Poza Field — `for` musi pasować do `id` kontrolki, inaczej kliknięcie nie ufokusuje pola.',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
9
16
|
});
|
|
10
17
|
</script>
|
|
11
18
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as LiveRegion } from './live-region.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as LiveRegion } from './live-region.svelte';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { LiveRegion } from './index.js';
|
|
3
|
+
|
|
4
|
+
type Props = {
|
|
5
|
+
politeness?: 'polite' | 'assertive';
|
|
6
|
+
initial?: string;
|
|
7
|
+
};
|
|
8
|
+
let { politeness = 'polite', initial = '' }: Props = $props();
|
|
9
|
+
|
|
10
|
+
let message = $state(initial);
|
|
11
|
+
let counter = $state(0);
|
|
12
|
+
|
|
13
|
+
function announce() {
|
|
14
|
+
counter += 1;
|
|
15
|
+
message = `Ogłoszenie nr ${counter}`;
|
|
16
|
+
}
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<div style="display:flex;flex-direction:column;gap:8px;align-items:flex-start;">
|
|
20
|
+
<button
|
|
21
|
+
type="button"
|
|
22
|
+
onclick={announce}
|
|
23
|
+
style="padding:8px 12px;border:1px solid currentColor;border-radius:8px;cursor:pointer;"
|
|
24
|
+
>
|
|
25
|
+
Ogłoś coś
|
|
26
|
+
</button>
|
|
27
|
+
<p style="margin:0;font-size:13px;color:var(--muted-foreground,#666);">
|
|
28
|
+
Komunikat (widoczny tu tylko do podglądu — w produkcji jest <code>sr-only</code>):
|
|
29
|
+
</p>
|
|
30
|
+
<output style="font-size:14px;min-height:1.5em;">{message}</output>
|
|
31
|
+
<LiveRegion {message} {politeness} />
|
|
32
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import LiveRegionDemo from './live-region-demo.svelte';
|
|
4
|
+
|
|
5
|
+
const { Story } = defineMeta({
|
|
6
|
+
title: 'UI/Feedback/LiveRegion',
|
|
7
|
+
component: LiveRegionDemo,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
parameters: {
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component: 'Niewidoczna strefa ARIA `aria-live` dla zapowiedzi (zapis, błąd, dodanie elementu). `polite` — czeka na pauzę; `assertive` — przerywa. Używaj `polite` chyba że krytyczne.',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<Story name="Polite (default)" args={{ politeness: 'polite' }} />
|
|
20
|
+
|
|
21
|
+
<Story name="Assertive" args={{ politeness: 'assertive' }} />
|
|
22
|
+
|
|
23
|
+
<Story name="With initial message" args={{ politeness: 'polite', initial: 'Załadowano 12 wyników' }} />
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export default LiveRegion;
|
|
2
|
+
type LiveRegion = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const LiveRegion: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
15
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
16
|
+
$$bindings?: Bindings;
|
|
17
|
+
} & Exports;
|
|
18
|
+
(internal: unknown, props: {
|
|
19
|
+
$$events?: Events;
|
|
20
|
+
$$slots?: Slots;
|
|
21
|
+
}): Exports & {
|
|
22
|
+
$set?: any;
|
|
23
|
+
$on?: any;
|
|
24
|
+
};
|
|
25
|
+
z_$$bindings?: Bindings;
|
|
26
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
type Props = {
|
|
3
|
+
message?: string;
|
|
4
|
+
politeness?: 'polite' | 'assertive';
|
|
5
|
+
class?: string;
|
|
6
|
+
};
|
|
7
|
+
let { message = '', politeness = 'polite', class: className = '' }: Props = $props();
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<div class="sr-only {className}" role="status" aria-live={politeness}>
|
|
11
|
+
{message}
|
|
12
|
+
</div>
|