@vamos-ui/react 0.0.0-stage → 0.2.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/LICENSE +21 -0
- package/README.md +27 -2
- package/dist/blocks/block-heading.d.ts +29 -0
- package/dist/blocks/block-heading.js +39 -0
- package/dist/blocks/block-image.d.ts +52 -0
- package/dist/blocks/block-image.js +48 -0
- package/dist/blocks/block-link.d.ts +30 -0
- package/dist/blocks/block-link.js +36 -0
- package/dist/blocks/create-blocks.d.ts +54 -0
- package/dist/blocks/create-blocks.js +52 -0
- package/dist/blocks/index.d.ts +55 -0
- package/dist/blocks/index.js +59 -0
- package/dist/blocks/json-ld.d.ts +18 -0
- package/dist/blocks/json-ld.js +44 -0
- package/dist/blocks/labels.d.ts +20 -0
- package/dist/blocks/labels.js +43 -0
- package/dist/blocks/rich-text.d.ts +36 -0
- package/dist/blocks/rich-text.js +106 -0
- package/dist/blocks/schema/define-block.d.ts +151 -0
- package/dist/blocks/schema/define-block.js +120 -0
- package/dist/blocks/schema/emphasis.d.ts +17 -0
- package/dist/blocks/schema/emphasis.js +69 -0
- package/dist/blocks/schema/fields.d.ts +497 -0
- package/dist/blocks/schema/fields.js +240 -0
- package/dist/blocks/schema/icons.d.ts +2 -0
- package/dist/blocks/schema/icons.js +26 -0
- package/dist/blocks/schema/index.d.ts +18 -0
- package/dist/blocks/schema/index.js +21 -0
- package/dist/blocks/schema/lint-types.d.ts +16 -0
- package/dist/blocks/schema/lint-types.js +2 -0
- package/dist/blocks/schema/lint.d.ts +32 -0
- package/dist/blocks/schema/lint.js +164 -0
- package/dist/blocks/schema/localize.d.ts +20 -0
- package/dist/blocks/schema/localize.js +29 -0
- package/dist/blocks/schema/localized.d.ts +25 -0
- package/dist/blocks/schema/localized.js +53 -0
- package/dist/blocks/schema/migrate.d.ts +24 -0
- package/dist/blocks/schema/migrate.js +75 -0
- package/dist/blocks/schema/nodes.d.ts +196 -0
- package/dist/blocks/schema/nodes.js +78 -0
- package/dist/blocks/schema/rich-doc-schema.d.ts +32 -0
- package/dist/blocks/schema/rich-doc-schema.js +66 -0
- package/dist/blocks/schema/rich-doc.d.ts +90 -0
- package/dist/blocks/schema/rich-doc.js +62 -0
- package/dist/blocks/schema/safety.d.ts +20 -0
- package/dist/blocks/schema/safety.js +49 -0
- package/dist/blocks/schema/types.d.ts +172 -0
- package/dist/blocks/schema/types.js +3 -0
- package/dist/blocks/schema/validate.d.ts +17 -0
- package/dist/blocks/schema/validate.js +32 -0
- package/dist/blocks/schema/walk.d.ts +22 -0
- package/dist/blocks/schema/walk.js +60 -0
- package/dist/blocks/section-header.d.ts +38 -0
- package/dist/blocks/section-header.js +22 -0
- package/dist/blocks/section.d.ts +59 -0
- package/dist/blocks/section.js +66 -0
- package/dist/blocks/site/_kit-1.d.ts +100 -0
- package/dist/blocks/site/_kit-1.js +135 -0
- package/dist/blocks/site/_site-icon-1.d.ts +6 -0
- package/dist/blocks/site/_site-icon-1.js +15 -0
- package/dist/blocks/site/announcement-bar.d.ts +42 -0
- package/dist/blocks/site/announcement-bar.js +38 -0
- package/dist/blocks/site/announcement-dismiss.d.ts +18 -0
- package/dist/blocks/site/announcement-dismiss.js +28 -0
- package/dist/blocks/site/article-layout.d.ts +65 -0
- package/dist/blocks/site/article-layout.js +88 -0
- package/dist/blocks/site/blog-list.d.ts +79 -0
- package/dist/blocks/site/blog-list.js +78 -0
- package/dist/blocks/site/comparison-table.d.ts +54 -0
- package/dist/blocks/site/comparison-table.js +38 -0
- package/dist/blocks/site/consent-banner.d.ts +52 -0
- package/dist/blocks/site/consent-banner.js +33 -0
- package/dist/blocks/site/contact-dock.d.ts +52 -0
- package/dist/blocks/site/contact-dock.js +55 -0
- package/dist/blocks/site/contact-form.d.ts +60 -0
- package/dist/blocks/site/contact-form.js +45 -0
- package/dist/blocks/site/cta-booking.d.ts +43 -0
- package/dist/blocks/site/cta-booking.js +69 -0
- package/dist/blocks/site/cta.d.ts +74 -0
- package/dist/blocks/site/cta.js +112 -0
- package/dist/blocks/site/embed-facade.d.ts +20 -0
- package/dist/blocks/site/embed-facade.js +21 -0
- package/dist/blocks/site/faq.d.ts +48 -0
- package/dist/blocks/site/faq.js +51 -0
- package/dist/blocks/site/feature-grid.d.ts +46 -0
- package/dist/blocks/site/feature-grid.js +49 -0
- package/dist/blocks/site/feature-tabs.d.ts +22 -0
- package/dist/blocks/site/feature-tabs.js +11 -0
- package/dist/blocks/site/footer.d.ts +68 -0
- package/dist/blocks/site/footer.js +61 -0
- package/dist/blocks/site/gallery-section.d.ts +42 -0
- package/dist/blocks/site/gallery-section.js +47 -0
- package/dist/blocks/site/hero-video.d.ts +15 -0
- package/dist/blocks/site/hero-video.js +31 -0
- package/dist/blocks/site/hero.d.ts +64 -0
- package/dist/blocks/site/hero.js +67 -0
- package/dist/blocks/site/logo-strip.d.ts +42 -0
- package/dist/blocks/site/logo-strip.js +26 -0
- package/dist/blocks/site/map-hours.d.ts +83 -0
- package/dist/blocks/site/map-hours.js +125 -0
- package/dist/blocks/site/media-text.d.ts +45 -0
- package/dist/blocks/site/media-text.js +55 -0
- package/dist/blocks/site/menu-list.d.ts +74 -0
- package/dist/blocks/site/menu-list.js +84 -0
- package/dist/blocks/site/navbar-submenu.d.ts +18 -0
- package/dist/blocks/site/navbar-submenu.js +51 -0
- package/dist/blocks/site/navbar.d.ts +67 -0
- package/dist/blocks/site/navbar.js +64 -0
- package/dist/blocks/site/not-found.d.ts +40 -0
- package/dist/blocks/site/not-found.js +38 -0
- package/dist/blocks/site/page-intro.d.ts +46 -0
- package/dist/blocks/site/page-intro.js +44 -0
- package/dist/blocks/site/pricing-table.d.ts +67 -0
- package/dist/blocks/site/pricing-table.js +82 -0
- package/dist/blocks/site/process.d.ts +36 -0
- package/dist/blocks/site/process.js +41 -0
- package/dist/blocks/site/registry-1.d.ts +720 -0
- package/dist/blocks/site/registry-1.js +783 -0
- package/dist/blocks/site/registry-2.d.ts +914 -0
- package/dist/blocks/site/registry-2.js +563 -0
- package/dist/blocks/site/rich-text-section.d.ts +34 -0
- package/dist/blocks/site/rich-text-section.js +32 -0
- package/dist/blocks/site/shared/brand-icons.d.ts +21 -0
- package/dist/blocks/site/shared/brand-icons.js +56 -0
- package/dist/blocks/site/shared/consent-gate.d.ts +41 -0
- package/dist/blocks/site/shared/consent-gate.js +43 -0
- package/dist/blocks/site/shared/consent-island.d.ts +38 -0
- package/dist/blocks/site/shared/consent-island.js +63 -0
- package/dist/blocks/site/shared/consent.d.ts +49 -0
- package/dist/blocks/site/shared/consent.js +130 -0
- package/dist/blocks/site/shared/contact-form-island.d.ts +41 -0
- package/dist/blocks/site/shared/contact-form-island.js +100 -0
- package/dist/blocks/site/shared/copy-link.d.ts +10 -0
- package/dist/blocks/site/shared/copy-link.js +25 -0
- package/dist/blocks/site/shared/dock-avoid.d.ts +15 -0
- package/dist/blocks/site/shared/dock-avoid.js +107 -0
- package/dist/blocks/site/shared/dock-hours.d.ts +13 -0
- package/dist/blocks/site/shared/dock-hours.js +25 -0
- package/dist/blocks/site/shared/gallery-lightbox.d.ts +12 -0
- package/dist/blocks/site/shared/gallery-lightbox.js +10 -0
- package/dist/blocks/site/shared/island-keys.d.ts +10 -0
- package/dist/blocks/site/shared/island-keys.js +44 -0
- package/dist/blocks/site/shared/kit-2.d.ts +55 -0
- package/dist/blocks/site/shared/kit-2.js +84 -0
- package/dist/blocks/site/shared/labels-2.d.ts +209 -0
- package/dist/blocks/site/shared/labels-2.js +427 -0
- package/dist/blocks/site/shared/open-now.d.ts +22 -0
- package/dist/blocks/site/shared/open-now.js +27 -0
- package/dist/blocks/site/shared/opening-hours.d.ts +117 -0
- package/dist/blocks/site/shared/opening-hours.js +245 -0
- package/dist/blocks/site/shared/site-accent.d.ts +48 -0
- package/dist/blocks/site/shared/site-accent.js +249 -0
- package/dist/blocks/site/shared/site-form.d.ts +79 -0
- package/dist/blocks/site/shared/site-form.js +111 -0
- package/dist/blocks/site/shared/site-routing.d.ts +54 -0
- package/dist/blocks/site/shared/site-routing.js +86 -0
- package/dist/blocks/site/shared/testimonials-carousel.d.ts +17 -0
- package/dist/blocks/site/shared/testimonials-carousel.js +64 -0
- package/dist/blocks/site/site-shell.d.ts +97 -0
- package/dist/blocks/site/site-shell.js +227 -0
- package/dist/blocks/site/stats-band.d.ts +40 -0
- package/dist/blocks/site/stats-band.js +41 -0
- package/dist/blocks/site/team.d.ts +44 -0
- package/dist/blocks/site/team.js +48 -0
- package/dist/blocks/site/testimonials.d.ts +68 -0
- package/dist/blocks/site/testimonials.js +65 -0
- package/dist/blocks/types.d.ts +63 -0
- package/dist/blocks/types.js +2 -0
- package/dist/business/approval-flow.d.ts +152 -0
- package/dist/business/approval-flow.js +221 -0
- package/dist/business/export-core.d.ts +55 -0
- package/dist/business/export-core.js +101 -0
- package/dist/business/export.d.ts +148 -0
- package/dist/business/export.js +264 -0
- package/dist/business/import-core.d.ts +104 -0
- package/dist/business/import-core.js +281 -0
- package/dist/business/import-wizard.d.ts +186 -0
- package/dist/business/import-wizard.js +401 -0
- package/dist/business/index.d.ts +11 -0
- package/dist/business/index.js +20 -0
- package/dist/business/line-items-core.d.ts +129 -0
- package/dist/business/line-items-core.js +183 -0
- package/dist/business/line-items.d.ts +119 -0
- package/dist/business/line-items.js +299 -0
- package/dist/business/multi-step-form.d.ts +131 -0
- package/dist/business/multi-step-form.js +337 -0
- package/dist/business/permission-core.d.ts +59 -0
- package/dist/business/permission-core.js +99 -0
- package/dist/business/permission-matrix.d.ts +158 -0
- package/dist/business/permission-matrix.js +341 -0
- package/dist/business/setup-checklist.d.ts +80 -0
- package/dist/business/setup-checklist.js +92 -0
- package/dist/charts/area-chart.d.ts +35 -0
- package/dist/charts/area-chart.js +33 -0
- package/dist/charts/bar-chart.d.ts +27 -0
- package/dist/charts/bar-chart.js +42 -0
- package/dist/charts/bar-list.d.ts +47 -0
- package/dist/charts/bar-list.js +60 -0
- package/dist/charts/chart-shell.d.ts +173 -0
- package/dist/charts/chart-shell.js +205 -0
- package/dist/charts/chart.d.ts +73 -0
- package/dist/charts/chart.js +106 -0
- package/dist/charts/combo-chart.d.ts +29 -0
- package/dist/charts/combo-chart.js +47 -0
- package/dist/charts/donut-chart.d.ts +33 -0
- package/dist/charts/donut-chart.js +113 -0
- package/dist/charts/funnel.d.ts +51 -0
- package/dist/charts/funnel.js +69 -0
- package/dist/charts/gauge.d.ts +62 -0
- package/dist/charts/gauge.js +104 -0
- package/dist/charts/heatmap.d.ts +81 -0
- package/dist/charts/heatmap.js +338 -0
- package/dist/charts/index.d.ts +12 -0
- package/dist/charts/index.js +14 -0
- package/dist/charts/line-chart.d.ts +21 -0
- package/dist/charts/line-chart.js +36 -0
- package/dist/charts/test-utils.d.ts +2 -0
- package/dist/charts/test-utils.js +38 -0
- package/dist/charts/utils.d.ts +130 -0
- package/dist/charts/utils.js +262 -0
- package/dist/components/accordion.d.ts +47 -0
- package/dist/components/accordion.js +70 -0
- package/dist/components/activity-timeline.d.ts +149 -0
- package/dist/components/activity-timeline.js +122 -0
- package/dist/components/address-field.d.ts +116 -0
- package/dist/components/address-field.js +219 -0
- package/dist/components/alert-dialog.d.ts +99 -0
- package/dist/components/alert-dialog.js +192 -0
- package/dist/components/alert.d.ts +42 -0
- package/dist/components/alert.js +82 -0
- package/dist/components/app-shell.d.ts +159 -0
- package/dist/components/app-shell.js +289 -0
- package/dist/components/attachment-list.d.ts +96 -0
- package/dist/components/attachment-list.js +196 -0
- package/dist/components/audit-log.d.ts +150 -0
- package/dist/components/audit-log.js +205 -0
- package/dist/components/avatar.d.ts +87 -0
- package/dist/components/avatar.js +126 -0
- package/dist/components/badge.d.ts +41 -0
- package/dist/components/badge.js +68 -0
- package/dist/components/breadcrumb.d.ts +78 -0
- package/dist/components/breadcrumb.js +106 -0
- package/dist/components/button-group.d.ts +52 -0
- package/dist/components/button-group.js +77 -0
- package/dist/components/button.d.ts +58 -0
- package/dist/components/button.js +107 -0
- package/dist/components/calendar.d.ts +240 -0
- package/dist/components/calendar.js +483 -0
- package/dist/components/card.d.ts +66 -0
- package/dist/components/card.js +76 -0
- package/dist/components/carousel.d.ts +170 -0
- package/dist/components/carousel.js +348 -0
- package/dist/components/checkbox.d.ts +78 -0
- package/dist/components/checkbox.js +138 -0
- package/dist/components/color-picker.d.ts +112 -0
- package/dist/components/color-picker.js +235 -0
- package/dist/components/combobox.d.ts +136 -0
- package/dist/components/combobox.js +294 -0
- package/dist/components/command.d.ts +275 -0
- package/dist/components/command.js +493 -0
- package/dist/components/comment-thread.d.ts +252 -0
- package/dist/components/comment-thread.js +449 -0
- package/dist/components/context-menu.d.ts +77 -0
- package/dist/components/context-menu.js +82 -0
- package/dist/components/currency-input.d.ts +43 -0
- package/dist/components/currency-input.js +85 -0
- package/dist/components/date-picker.d.ts +141 -0
- package/dist/components/date-picker.js +241 -0
- package/dist/components/date-range-picker.d.ts +91 -0
- package/dist/components/date-range-picker.js +251 -0
- package/dist/components/description-list.d.ts +92 -0
- package/dist/components/description-list.js +42 -0
- package/dist/components/dialog.d.ts +139 -0
- package/dist/components/dialog.js +185 -0
- package/dist/components/dropdown-menu.d.ts +100 -0
- package/dist/components/dropdown-menu.js +102 -0
- package/dist/components/editor-layout.d.ts +166 -0
- package/dist/components/editor-layout.js +237 -0
- package/dist/components/empty-state.d.ts +49 -0
- package/dist/components/empty-state.js +68 -0
- package/dist/components/entity-card.d.ts +83 -0
- package/dist/components/entity-card.js +92 -0
- package/dist/components/file-upload.d.ts +256 -0
- package/dist/components/file-upload.js +490 -0
- package/dist/components/formatted-input.d.ts +177 -0
- package/dist/components/formatted-input.js +399 -0
- package/dist/components/hierarchy-chart.d.ts +190 -0
- package/dist/components/hierarchy-chart.js +890 -0
- package/dist/components/hover-card.d.ts +21 -0
- package/dist/components/hover-card.js +32 -0
- package/dist/components/iban-input.d.ts +38 -0
- package/dist/components/iban-input.js +112 -0
- package/dist/components/id-input.d.ts +65 -0
- package/dist/components/id-input.js +130 -0
- package/dist/components/image.d.ts +130 -0
- package/dist/components/image.js +168 -0
- package/dist/components/input-otp.d.ts +62 -0
- package/dist/components/input-otp.js +73 -0
- package/dist/components/input.d.ts +141 -0
- package/dist/components/input.js +187 -0
- package/dist/components/item.d.ts +96 -0
- package/dist/components/item.js +113 -0
- package/dist/components/kbd.d.ts +64 -0
- package/dist/components/kbd.js +119 -0
- package/dist/components/list-layout.d.ts +144 -0
- package/dist/components/list-layout.js +210 -0
- package/dist/components/native-select.d.ts +33 -0
- package/dist/components/native-select.js +48 -0
- package/dist/components/navigation-menu.d.ts +127 -0
- package/dist/components/navigation-menu.js +129 -0
- package/dist/components/notification-center.d.ts +164 -0
- package/dist/components/notification-center.js +399 -0
- package/dist/components/page-header.d.ts +60 -0
- package/dist/components/page-header.js +60 -0
- package/dist/components/pagination.d.ts +121 -0
- package/dist/components/pagination.js +174 -0
- package/dist/components/phone-input.d.ts +49 -0
- package/dist/components/phone-input.js +266 -0
- package/dist/components/popover.d.ts +38 -0
- package/dist/components/popover.js +69 -0
- package/dist/components/progress.d.ts +79 -0
- package/dist/components/progress.js +97 -0
- package/dist/components/radio-group.d.ts +43 -0
- package/dist/components/radio-group.js +81 -0
- package/dist/components/record-detail-layout.d.ts +167 -0
- package/dist/components/record-detail-layout.js +233 -0
- package/dist/components/record-picker.d.ts +199 -0
- package/dist/components/record-picker.js +650 -0
- package/dist/components/resizable.d.ts +50 -0
- package/dist/components/resizable.js +88 -0
- package/dist/components/scroll-area.d.ts +40 -0
- package/dist/components/scroll-area.js +56 -0
- package/dist/components/select.d.ts +126 -0
- package/dist/components/select.js +137 -0
- package/dist/components/separator.d.ts +31 -0
- package/dist/components/separator.js +41 -0
- package/dist/components/settings-layout.d.ts +134 -0
- package/dist/components/settings-layout.js +180 -0
- package/dist/components/sheet.d.ts +103 -0
- package/dist/components/sheet.js +165 -0
- package/dist/components/sidebar.d.ts +171 -0
- package/dist/components/sidebar.js +421 -0
- package/dist/components/signature-pad.d.ts +85 -0
- package/dist/components/signature-pad.js +283 -0
- package/dist/components/skeleton.d.ts +64 -0
- package/dist/components/skeleton.js +53 -0
- package/dist/components/slider.d.ts +57 -0
- package/dist/components/slider.js +133 -0
- package/dist/components/slug-input.d.ts +69 -0
- package/dist/components/slug-input.js +201 -0
- package/dist/components/sparkline.d.ts +54 -0
- package/dist/components/sparkline.js +122 -0
- package/dist/components/spinner.d.ts +34 -0
- package/dist/components/spinner.js +34 -0
- package/dist/components/stat.d.ts +135 -0
- package/dist/components/stat.js +130 -0
- package/dist/components/status-picker.d.ts +107 -0
- package/dist/components/status-picker.js +175 -0
- package/dist/components/stepper.d.ts +86 -0
- package/dist/components/stepper.js +103 -0
- package/dist/components/switch.d.ts +34 -0
- package/dist/components/switch.js +70 -0
- package/dist/components/table.d.ts +101 -0
- package/dist/components/table.js +72 -0
- package/dist/components/tabs.d.ts +103 -0
- package/dist/components/tabs.js +173 -0
- package/dist/components/tag-input.d.ts +77 -0
- package/dist/components/tag-input.js +305 -0
- package/dist/components/task-list.d.ts +89 -0
- package/dist/components/task-list.js +238 -0
- package/dist/components/time-picker.d.ts +119 -0
- package/dist/components/time-picker.js +399 -0
- package/dist/components/toast.d.ts +87 -0
- package/dist/components/toast.js +142 -0
- package/dist/components/toggle.d.ts +77 -0
- package/dist/components/toggle.js +109 -0
- package/dist/components/tooltip.d.ts +69 -0
- package/dist/components/tooltip.js +105 -0
- package/dist/components/top-bar.d.ts +87 -0
- package/dist/components/top-bar.js +99 -0
- package/dist/components/tree-select.d.ts +89 -0
- package/dist/components/tree-select.js +243 -0
- package/dist/components/tree-view.d.ts +109 -0
- package/dist/components/tree-view.js +170 -0
- package/dist/components/typography.d.ts +107 -0
- package/dist/components/typography.js +128 -0
- package/dist/components/user-picker.d.ts +89 -0
- package/dist/components/user-picker.js +162 -0
- package/dist/components/version-history.d.ts +191 -0
- package/dist/components/version-history.js +431 -0
- package/dist/data-table/csv.d.ts +27 -0
- package/dist/data-table/csv.js +68 -0
- package/dist/data-table/data-table.d.ts +423 -0
- package/dist/data-table/data-table.js +1259 -0
- package/dist/data-table/filter-bar.d.ts +146 -0
- package/dist/data-table/filter-bar.js +569 -0
- package/dist/data-table/filter-fns.d.ts +65 -0
- package/dist/data-table/filter-fns.js +382 -0
- package/dist/data-table/index.d.ts +8 -0
- package/dist/data-table/index.js +9 -0
- package/dist/data-table/saved-views.d.ts +100 -0
- package/dist/data-table/saved-views.js +251 -0
- package/dist/data-table/types.d.ts +168 -0
- package/dist/data-table/types.js +87 -0
- package/dist/data-table/url-state.d.ts +94 -0
- package/dist/data-table/url-state.js +303 -0
- package/dist/data-table/view-state.d.ts +16 -0
- package/dist/data-table/view-state.js +81 -0
- package/dist/editor/_test-setup.d.ts +1 -0
- package/dist/editor/_test-setup.js +33 -0
- package/dist/editor/block-editor.d.ts +137 -0
- package/dist/editor/block-editor.js +280 -0
- package/dist/editor/commands.d.ts +31 -0
- package/dist/editor/commands.js +150 -0
- package/dist/editor/context.d.ts +108 -0
- package/dist/editor/context.js +30 -0
- package/dist/editor/convert.d.ts +66 -0
- package/dist/editor/convert.js +567 -0
- package/dist/editor/drag-handle.d.ts +10 -0
- package/dist/editor/drag-handle.js +69 -0
- package/dist/editor/extensions.d.ts +34 -0
- package/dist/editor/extensions.js +239 -0
- package/dist/editor/index.d.ts +14 -0
- package/dist/editor/index.js +17 -0
- package/dist/editor/inserter.d.ts +12 -0
- package/dist/editor/inserter.js +88 -0
- package/dist/editor/inspector.d.ts +17 -0
- package/dist/editor/inspector.js +65 -0
- package/dist/editor/items.d.ts +62 -0
- package/dist/editor/items.js +195 -0
- package/dist/editor/labels.d.ts +119 -0
- package/dist/editor/labels.js +130 -0
- package/dist/editor/markdown.d.ts +14 -0
- package/dist/editor/markdown.js +209 -0
- package/dist/editor/menus.d.ts +20 -0
- package/dist/editor/menus.js +236 -0
- package/dist/editor/nodes.d.ts +14 -0
- package/dist/editor/nodes.js +201 -0
- package/dist/editor/outline.d.ts +11 -0
- package/dist/editor/outline.js +52 -0
- package/dist/editor/schema-form.d.ts +64 -0
- package/dist/editor/schema-form.js +290 -0
- package/dist/editor/slash-menu.d.ts +15 -0
- package/dist/editor/slash-menu.js +119 -0
- package/dist/fonts/catalog.d.ts +53 -0
- package/dist/fonts/catalog.js +121 -0
- package/dist/fonts/font-picker.d.ts +70 -0
- package/dist/fonts/font-picker.js +225 -0
- package/dist/fonts/index.d.ts +6 -0
- package/dist/fonts/index.js +7 -0
- package/dist/fonts/loader.d.ts +66 -0
- package/dist/fonts/loader.js +161 -0
- package/dist/fonts/pairing-picker.d.ts +31 -0
- package/dist/fonts/pairing-picker.js +81 -0
- package/dist/fonts/pairings.d.ts +84 -0
- package/dist/fonts/pairings.js +149 -0
- package/dist/fonts/provider.d.ts +34 -0
- package/dist/fonts/provider.js +51 -0
- package/dist/form/index.d.ts +1 -0
- package/dist/form/index.js +1 -0
- package/dist/format/core.d.ts +149 -0
- package/dist/format/core.js +357 -0
- package/dist/format/index.d.ts +4 -0
- package/dist/format/index.js +5 -0
- package/dist/format/use-format.d.ts +1 -0
- package/dist/format/use-format.js +3 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.js +87 -0
- package/dist/lib/cn.d.ts +3 -0
- package/dist/lib/cn.js +16 -0
- package/dist/lib/color.d.ts +64 -0
- package/dist/lib/color.js +177 -0
- package/dist/lib/compose-refs.d.ts +24 -0
- package/dist/lib/compose-refs.js +45 -0
- package/dist/lib/data-islands.d.ts +194 -0
- package/dist/lib/data-islands.js +368 -0
- package/dist/lib/date.d.ts +129 -0
- package/dist/lib/date.js +386 -0
- package/dist/lib/field-context.d.ts +64 -0
- package/dist/lib/field-context.js +62 -0
- package/dist/lib/floating-arrow.d.ts +18 -0
- package/dist/lib/floating-arrow.js +15 -0
- package/dist/lib/islands.d.ts +38 -0
- package/dist/lib/islands.js +40 -0
- package/dist/lib/labels.d.ts +51 -0
- package/dist/lib/labels.js +56 -0
- package/dist/lib/layer.d.ts +36 -0
- package/dist/lib/layer.js +42 -0
- package/dist/lib/locale.d.ts +85 -0
- package/dist/lib/locale.js +105 -0
- package/dist/lib/menu.d.ts +58 -0
- package/dist/lib/menu.js +99 -0
- package/dist/lib/message-format.d.ts +20 -0
- package/dist/lib/message-format.js +116 -0
- package/dist/lib/nav.d.ts +132 -0
- package/dist/lib/nav.js +178 -0
- package/dist/lib/provider.d.ts +100 -0
- package/dist/lib/provider.js +105 -0
- package/dist/lib/public.d.ts +22 -0
- package/dist/lib/public.js +33 -0
- package/dist/lib/sr-name.d.ts +18 -0
- package/dist/lib/sr-name.js +17 -0
- package/dist/lib/text.d.ts +100 -0
- package/dist/lib/text.js +233 -0
- package/dist/lib/theme-scope.d.ts +58 -0
- package/dist/lib/theme-scope.js +59 -0
- package/dist/lib/use-async-list.d.ts +60 -0
- package/dist/lib/use-async-list.js +119 -0
- package/dist/lib/use-container-width.d.ts +19 -0
- package/dist/lib/use-container-width.js +39 -0
- package/dist/lib/use-controllable-state.d.ts +33 -0
- package/dist/lib/use-controllable-state.js +56 -0
- package/dist/lib/use-edge-fade.d.ts +13 -0
- package/dist/lib/use-edge-fade.js +43 -0
- package/dist/lib/use-formatted-input.d.ts +69 -0
- package/dist/lib/use-formatted-input.js +152 -0
- package/dist/lib/use-hotkeys.d.ts +80 -0
- package/dist/lib/use-hotkeys.js +221 -0
- package/dist/lib/use-hover-intent.d.ts +44 -0
- package/dist/lib/use-hover-intent.js +119 -0
- package/dist/lib/use-media-query.d.ts +21 -0
- package/dist/lib/use-media-query.js +28 -0
- package/dist/lib/use-reduced-motion.d.ts +8 -0
- package/dist/lib/use-reduced-motion.js +13 -0
- package/dist/lib/use-tree.d.ts +153 -0
- package/dist/lib/use-tree.js +534 -0
- package/dist/lib/value-format.d.ts +25 -0
- package/dist/lib/value-format.js +56 -0
- package/dist/lib/variants.d.ts +131 -0
- package/dist/lib/variants.js +109 -0
- package/dist/locale-data/core/date.d.ts +24 -0
- package/dist/locale-data/core/date.js +68 -0
- package/dist/locale-data/core/decimal.d.ts +19 -0
- package/dist/locale-data/core/decimal.js +79 -0
- package/dist/locale-data/core/holidays.d.ts +30 -0
- package/dist/locale-data/core/holidays.js +79 -0
- package/dist/locale-data/core/iban.d.ts +29 -0
- package/dist/locale-data/core/iban.js +74 -0
- package/dist/locale-data/core/index.d.ts +7 -0
- package/dist/locale-data/core/index.js +6 -0
- package/dist/locale-data/core/types.d.ts +173 -0
- package/dist/locale-data/core/types.js +6 -0
- package/dist/locale-data/core/week-info.d.ts +23 -0
- package/dist/locale-data/core/week-info.js +85 -0
- package/dist/locale-data/core/working-days.d.ts +27 -0
- package/dist/locale-data/core/working-days.js +133 -0
- package/dist/locale-data/index.d.ts +2 -0
- package/dist/locale-data/index.js +4 -0
- package/dist/locale-data/tr/address-tr.json +1 -0
- package/dist/locale-data/tr/address.d.ts +23 -0
- package/dist/locale-data/tr/address.js +52 -0
- package/dist/locale-data/tr/holidays.d.ts +31 -0
- package/dist/locale-data/tr/holidays.js +81 -0
- package/dist/locale-data/tr/iban.d.ts +21 -0
- package/dist/locale-data/tr/iban.js +45 -0
- package/dist/locale-data/tr/id.d.ts +36 -0
- package/dist/locale-data/tr/id.js +120 -0
- package/dist/locale-data/tr/index.d.ts +12 -0
- package/dist/locale-data/tr/index.js +33 -0
- package/dist/locale-data/tr/kdv.d.ts +91 -0
- package/dist/locale-data/tr/kdv.js +222 -0
- package/dist/locales/en.d.ts +2102 -0
- package/dist/locales/en.js +2088 -0
- package/dist/locales/tr.d.ts +2086 -0
- package/dist/locales/tr.js +2087 -0
- package/dist/media/focal-point.d.ts +42 -0
- package/dist/media/focal-point.js +96 -0
- package/dist/media/gallery-layout.d.ts +19 -0
- package/dist/media/gallery-layout.js +61 -0
- package/dist/media/gallery.d.ts +64 -0
- package/dist/media/gallery.js +138 -0
- package/dist/media/image-cropper.d.ts +86 -0
- package/dist/media/image-cropper.js +170 -0
- package/dist/media/image-field.d.ts +115 -0
- package/dist/media/image-field.js +212 -0
- package/dist/media/index.d.ts +19 -0
- package/dist/media/index.js +23 -0
- package/dist/media/lightbox.d.ts +82 -0
- package/dist/media/lightbox.js +171 -0
- package/dist/media/link-preview.d.ts +97 -0
- package/dist/media/link-preview.js +177 -0
- package/dist/media/media-library.d.ts +244 -0
- package/dist/media/media-library.js +776 -0
- package/dist/media/media-picker.d.ts +96 -0
- package/dist/media/media-picker.js +209 -0
- package/dist/media/media-provider.d.ts +23 -0
- package/dist/media/media-provider.js +44 -0
- package/dist/media/media-utils.d.ts +39 -0
- package/dist/media/media-utils.js +145 -0
- package/dist/media/memory-adapter.d.ts +22 -0
- package/dist/media/memory-adapter.js +162 -0
- package/dist/media/rest-adapter.d.ts +90 -0
- package/dist/media/rest-adapter.js +208 -0
- package/dist/media/serp.d.ts +62 -0
- package/dist/media/serp.js +108 -0
- package/dist/media/test-fixtures.d.ts +3 -0
- package/dist/media/test-fixtures.js +37 -0
- package/dist/media/types.d.ts +183 -0
- package/dist/media/types.js +3 -0
- package/dist/media/use-pan-zoom.d.ts +51 -0
- package/dist/media/use-pan-zoom.js +156 -0
- package/dist/media/use-upload-queue.d.ts +64 -0
- package/dist/media/use-upload-queue.js +115 -0
- package/dist/media/video-player.d.ts +135 -0
- package/dist/media/video-player.js +319 -0
- package/dist/next/index.d.ts +42 -0
- package/dist/next/index.js +36 -0
- package/dist/render/block-renderer.d.ts +56 -0
- package/dist/render/block-renderer.js +137 -0
- package/dist/render/index.d.ts +6 -0
- package/dist/render/index.js +7 -0
- package/dist/render/prepare.d.ts +61 -0
- package/dist/render/prepare.js +119 -0
- package/dist/scheduler/core/duration.d.ts +83 -0
- package/dist/scheduler/core/duration.js +174 -0
- package/dist/scheduler/core/gantt.d.ts +63 -0
- package/dist/scheduler/core/gantt.js +226 -0
- package/dist/scheduler/core/index.d.ts +6 -0
- package/dist/scheduler/core/index.js +7 -0
- package/dist/scheduler/core/layout.d.ts +97 -0
- package/dist/scheduler/core/layout.js +249 -0
- package/dist/scheduler/core/time-scale.d.ts +89 -0
- package/dist/scheduler/core/time-scale.js +173 -0
- package/dist/scheduler/gantt.d.ts +125 -0
- package/dist/scheduler/gantt.js +532 -0
- package/dist/scheduler/index.d.ts +6 -0
- package/dist/scheduler/index.js +7 -0
- package/dist/scheduler/resource-calendar.d.ts +218 -0
- package/dist/scheduler/resource-calendar.js +661 -0
- package/dist/scheduler/scheduler.d.ts +168 -0
- package/dist/scheduler/scheduler.js +768 -0
- package/dist/scheduler/shared.d.ts +63 -0
- package/dist/scheduler/shared.js +145 -0
- package/dist/scheduler/time-tracker.d.ts +138 -0
- package/dist/scheduler/time-tracker.js +403 -0
- package/dist/sortable/core.d.ts +67 -0
- package/dist/sortable/core.js +167 -0
- package/dist/sortable/index.d.ts +8 -0
- package/dist/sortable/index.js +10 -0
- package/dist/sortable/kanban-core.d.ts +70 -0
- package/dist/sortable/kanban-core.js +67 -0
- package/dist/sortable/kanban.d.ts +147 -0
- package/dist/sortable/kanban.js +472 -0
- package/dist/sortable/sortable-list.d.ts +71 -0
- package/dist/sortable/sortable-list.js +76 -0
- package/dist/sortable/sortable-tree.d.ts +101 -0
- package/dist/sortable/sortable-tree.js +450 -0
- package/dist/sortable/sortable.d.ts +188 -0
- package/dist/sortable/sortable.js +485 -0
- package/dist/sortable/use-pointer-drag.d.ts +75 -0
- package/dist/sortable/use-pointer-drag.js +173 -0
- package/dist/sortable/use-time-scale.d.ts +11 -0
- package/dist/sortable/use-time-scale.js +19 -0
- package/dist/styles/base.css +51 -0
- package/dist/styles/blocks.css +949 -0
- package/dist/styles/calendar.css +642 -0
- package/dist/styles/charts.css +264 -0
- package/dist/styles/data.css +474 -0
- package/dist/styles/editors.css +1022 -0
- package/dist/styles/forms.css +406 -0
- package/dist/styles/media.css +515 -0
- package/dist/styles/navigation.css +293 -0
- package/dist/styles/overlays.css +244 -0
- package/dist/styles.css +742 -0
- package/package.json +156 -4
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Built-in strings for site blocks (D2b). Server-safe: no context — pass `labels` or use createBlocks.
|
|
2
|
+
import { formatMessage } from "../lib/message-format.js";
|
|
3
|
+
/** English defaults. Keys are shared by every site block; wave-3 blocks add theirs here. */
|
|
4
|
+
export const blockLabels = {
|
|
5
|
+
opensInNewTab: "(opens in a new tab)",
|
|
6
|
+
skipToContent: "Skip to content",
|
|
7
|
+
addTitle: "Add a title",
|
|
8
|
+
addText: "Add text",
|
|
9
|
+
addImage: "Add an image",
|
|
10
|
+
unknownBlock: "Unknown block “{type}”",
|
|
11
|
+
unknownBlockHint: "This block type is not installed. Its content is kept and will render again once the block is available.",
|
|
12
|
+
invalidBlock: "“{type}” has invalid content",
|
|
13
|
+
invalidBlockHint: "{count, plural, one {# field was} other {# fields were}} replaced with defaults. Fix them in the editor.",
|
|
14
|
+
newerBlock: "“{type}” was saved by a newer version (v{v})",
|
|
15
|
+
emptyImage: "No image",
|
|
16
|
+
codeSample: "Code sample",
|
|
17
|
+
};
|
|
18
|
+
/** Turkish dictionary for site blocks. */
|
|
19
|
+
export const blockLabelsTr = {
|
|
20
|
+
opensInNewTab: "(yeni sekmede açılır)",
|
|
21
|
+
skipToContent: "İçeriğe geç",
|
|
22
|
+
addTitle: "Başlık ekleyin",
|
|
23
|
+
addText: "Metin ekleyin",
|
|
24
|
+
addImage: "Görsel ekleyin",
|
|
25
|
+
unknownBlock: "Bilinmeyen blok “{type}”",
|
|
26
|
+
unknownBlockHint: "Bu blok türü kurulu değil. İçeriği korunuyor; blok yeniden eklendiğinde görünecek.",
|
|
27
|
+
invalidBlock: "“{type}” geçersiz içerik barındırıyor",
|
|
28
|
+
invalidBlockHint: "{count} alan varsayılan değerle değiştirildi. Düzenleyicide düzeltin.",
|
|
29
|
+
newerBlock: "“{type}” daha yeni bir sürümle kaydedilmiş (v{v})",
|
|
30
|
+
emptyImage: "Görsel yok",
|
|
31
|
+
codeSample: "Kod örneği",
|
|
32
|
+
};
|
|
33
|
+
/** Label lookup for server components: `labels` prop → English. */
|
|
34
|
+
export function blockText(labels, locale = "en-US") {
|
|
35
|
+
const merged = { ...blockLabels };
|
|
36
|
+
if (labels)
|
|
37
|
+
for (const k in labels) {
|
|
38
|
+
const v = labels[k];
|
|
39
|
+
if (typeof v === "string")
|
|
40
|
+
merged[k] = v;
|
|
41
|
+
}
|
|
42
|
+
return (key, vars) => formatMessage(merged[key], vars, locale);
|
|
43
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type RichBlock, type RichDoc, type RichInline } from "./schema/rich-doc.js";
|
|
3
|
+
import { type BlockLabels } from "./labels.js";
|
|
4
|
+
import type { BlockAdapters } from "./types.js";
|
|
5
|
+
export interface RichTextRenderOptions {
|
|
6
|
+
components?: BlockAdapters;
|
|
7
|
+
labels?: Partial<BlockLabels>;
|
|
8
|
+
locale?: string;
|
|
9
|
+
/** Shift stored heading levels: 1 renders h2 as h3 (inside a block whose title is h2). */
|
|
10
|
+
headingOffset?: 0 | 1 | 2;
|
|
11
|
+
}
|
|
12
|
+
/** Renders inline runs. Consecutive runs with the same link share one `<a>`. */
|
|
13
|
+
export declare function renderInline(content: readonly RichInline[] | undefined, opts?: RichTextRenderOptions, keyPrefix?: string): React.ReactNode;
|
|
14
|
+
/** Renders RichDoc blocks (no wrapper). */
|
|
15
|
+
export declare function renderRichBlocks(blocks: readonly RichBlock[], opts?: RichTextRenderOptions, keyPrefix?: string): React.ReactNode;
|
|
16
|
+
export interface RichTextProps extends RichTextRenderOptions, Omit<React.HTMLAttributes<HTMLDivElement>, "content"> {
|
|
17
|
+
/** A RichDoc, a list of RichDoc blocks, inline runs, or plain text (blank line = new paragraph). */
|
|
18
|
+
doc?: RichDoc | readonly RichBlock[] | readonly RichInline[] | string;
|
|
19
|
+
/** Text size: 14 / 16 / 18 px. Default `"md"`. */
|
|
20
|
+
size?: "sm" | "md" | "lg";
|
|
21
|
+
/** Remove the reading-width cap (64ch). */
|
|
22
|
+
fullWidth?: boolean;
|
|
23
|
+
editMode?: boolean;
|
|
24
|
+
/** Prop path for edit mode (`data-field`). */
|
|
25
|
+
field?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Pure server renderer for the RichDoc format (paragraphs, h2–h4, lists, quotes, code, rules +
|
|
29
|
+
* bold, italic, underline, strike, code, highlight, sub/sup, links). No editor code reaches the
|
|
30
|
+
* site. Links are sanitised and routed through `components.Link`.
|
|
31
|
+
*
|
|
32
|
+
* ```tsx
|
|
33
|
+
* <RichText doc={props.body} components={{ Link: NextLink }} />
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function RichText({ doc, components, labels, locale, headingOffset, size, fullWidth, editMode, field, className, ...props }: RichTextProps): React.JSX.Element | null;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "../lib/cn.js";
|
|
4
|
+
import { BlockLink } from "./block-link.js";
|
|
5
|
+
import { isBreak, richFromText } from "./schema/rich-doc.js";
|
|
6
|
+
import { blockText } from "./labels.js";
|
|
7
|
+
const MARK_ORDER = ["bold", "italic", "underline", "strike", "highlight", "code", "sub", "sup"];
|
|
8
|
+
const markTag = { bold: "strong", italic: "em", underline: "u", strike: "s", highlight: "mark", code: "code", sub: "sub", sup: "sup" };
|
|
9
|
+
function textWithBreaks(text, key) {
|
|
10
|
+
if (!text.includes("\n"))
|
|
11
|
+
return text;
|
|
12
|
+
return text.split("\n").map((line, i) => (_jsxs(React.Fragment, { children: [i > 0 ? _jsx("br", {}) : null, line] }, `${key}-${i}`)));
|
|
13
|
+
}
|
|
14
|
+
function renderRun(run, key) {
|
|
15
|
+
let node = textWithBreaks(run.text, key);
|
|
16
|
+
const types = new Set((run.marks ?? []).map((m) => m.type));
|
|
17
|
+
// innermost first so the nesting is always strong > em > u > s > mark > code > sub/sup
|
|
18
|
+
for (const m of [...MARK_ORDER].reverse()) {
|
|
19
|
+
if (types.has(m)) {
|
|
20
|
+
const Tag = markTag[m];
|
|
21
|
+
node = _jsx(Tag, { children: node }, `${key}-${m}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return node;
|
|
25
|
+
}
|
|
26
|
+
const linkOf = (n) => (isBreak(n) ? undefined : n.marks?.find((m) => m.type === "link"));
|
|
27
|
+
const sameLink = (a, b) => !!a && !!b && a.href === b.href && !!a.newTab === !!b.newTab;
|
|
28
|
+
/** Renders inline runs. Consecutive runs with the same link share one `<a>`. */
|
|
29
|
+
export function renderInline(content, opts = {}, keyPrefix = "i") {
|
|
30
|
+
if (!content?.length)
|
|
31
|
+
return null;
|
|
32
|
+
const out = [];
|
|
33
|
+
for (let i = 0; i < content.length; i++) {
|
|
34
|
+
const n = content[i];
|
|
35
|
+
const key = `${keyPrefix}${i}`;
|
|
36
|
+
if (isBreak(n)) {
|
|
37
|
+
out.push(_jsx("br", {}, key));
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const link = linkOf(n);
|
|
41
|
+
if (!link) {
|
|
42
|
+
out.push(_jsx(React.Fragment, { children: renderRun(n, key) }, key));
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const group = [renderRun(n, key)];
|
|
46
|
+
while (i + 1 < content.length && sameLink(link, linkOf(content[i + 1]))) {
|
|
47
|
+
i++;
|
|
48
|
+
group.push(_jsx(React.Fragment, { children: renderRun(content[i], `${keyPrefix}${i}`) }, `${keyPrefix}${i}`));
|
|
49
|
+
}
|
|
50
|
+
out.push(_jsx(BlockLink, { href: link.href, newTab: link.newTab, title: link.title, components: opts.components, labels: opts.labels, locale: opts.locale, children: group }, key));
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
/** Renders RichDoc blocks (no wrapper). */
|
|
55
|
+
export function renderRichBlocks(blocks, opts = {}, keyPrefix = "b") {
|
|
56
|
+
return blocks.map((b, i) => {
|
|
57
|
+
const key = `${keyPrefix}${i}`;
|
|
58
|
+
switch (b.type) {
|
|
59
|
+
case "paragraph":
|
|
60
|
+
return b.content?.length ? _jsx("p", { children: renderInline(b.content, opts, `${key}-`) }, key) : null;
|
|
61
|
+
case "heading": {
|
|
62
|
+
const level = Math.min(6, b.level + (opts.headingOffset ?? 0));
|
|
63
|
+
const Tag = `h${level}`;
|
|
64
|
+
return (_jsx(Tag, { id: b.anchor, children: renderInline(b.content, opts, `${key}-`) }, key));
|
|
65
|
+
}
|
|
66
|
+
case "list": {
|
|
67
|
+
const items = b.items.map((it, j) => _jsx("li", { children: renderRichBlocks(it.content, opts, `${key}-${j}-`) }, j));
|
|
68
|
+
return b.ordered ? (_jsx("ol", { start: b.start && b.start !== 1 ? b.start : undefined, children: items }, key)) : (_jsx("ul", { children: items }, key));
|
|
69
|
+
}
|
|
70
|
+
case "blockquote":
|
|
71
|
+
return (_jsxs("blockquote", { children: [renderRichBlocks(b.content, opts, `${key}-`), b.cite ? _jsx("footer", { children: b.cite }) : null] }, key));
|
|
72
|
+
case "code":
|
|
73
|
+
return (
|
|
74
|
+
// Focusable + named so a long line that scrolls sideways is reachable by keyboard.
|
|
75
|
+
_jsx("pre", { "data-language": b.language, tabIndex: 0, role: "region", "aria-label": b.language ? `${blockText(opts.labels, opts.locale)("codeSample")} (${b.language})` : blockText(opts.labels, opts.locale)("codeSample"), children: _jsx("code", { children: b.text }) }, key));
|
|
76
|
+
case "hr":
|
|
77
|
+
return _jsx("hr", {}, key);
|
|
78
|
+
default:
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const isInlineList = (v) => v.length > 0 && v.every((n) => typeof n === "object" && n !== null && ("text" in n || n.type === "br"));
|
|
84
|
+
/**
|
|
85
|
+
* Pure server renderer for the RichDoc format (paragraphs, h2–h4, lists, quotes, code, rules +
|
|
86
|
+
* bold, italic, underline, strike, code, highlight, sub/sup, links). No editor code reaches the
|
|
87
|
+
* site. Links are sanitised and routed through `components.Link`.
|
|
88
|
+
*
|
|
89
|
+
* ```tsx
|
|
90
|
+
* <RichText doc={props.body} components={{ Link: NextLink }} />
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export function RichText({ doc, components, labels, locale, headingOffset, size = "md", fullWidth, editMode, field, className, ...props }) {
|
|
94
|
+
if (doc === undefined || doc === null || (typeof doc === "string" && !doc.trim())) {
|
|
95
|
+
return editMode ? (_jsx("div", { "data-field": field, "data-empty": "", className: cn("prose-ui vb-prose text-fg-subtle", className), ...props, children: _jsx("p", { children: blockText(labels, locale)("addText") }) })) : null;
|
|
96
|
+
}
|
|
97
|
+
const opts = { components, labels, locale, headingOffset };
|
|
98
|
+
let body;
|
|
99
|
+
if (typeof doc === "string")
|
|
100
|
+
body = renderRichBlocks(richFromText(doc).content, opts);
|
|
101
|
+
else if (Array.isArray(doc))
|
|
102
|
+
body = isInlineList(doc) ? _jsx("p", { children: renderInline(doc, opts) }) : renderRichBlocks(doc, opts);
|
|
103
|
+
else
|
|
104
|
+
body = renderRichBlocks(doc.content ?? [], opts);
|
|
105
|
+
return (_jsx("div", { "data-slot": "rich-text", "data-field": editMode ? field : undefined, className: cn("prose-ui vb-prose", size === "sm" && "prose-ui-sm", size === "lg" && "prose-ui-lg", fullWidth && "max-w-none", className), ...props, children: body }));
|
|
106
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type * as React from "react";
|
|
3
|
+
import type { BlockNode } from "./types.js";
|
|
4
|
+
import type { BlockComponentProps } from "../types.js";
|
|
5
|
+
import type { LintIssueInput } from "./lint-types.js";
|
|
6
|
+
export type BlockCategory = "intro" | "content" | "media" | "proof" | "conversion" | "local" | "blog" | "site" | "layout" | "text" | "form" | "embed";
|
|
7
|
+
export type BlockRegion = "header" | "body" | "footer" | "overlay";
|
|
8
|
+
/** Removes the `{ [locale]: T }` branch of every Localized<T> — what a component receives after `localize()`. */
|
|
9
|
+
export type Delocalized<T> = T extends string | number | boolean | null | undefined | bigint ? T : T extends readonly (infer U)[] ? Delocalized<U>[] : T extends object ? {
|
|
10
|
+
[K in keyof T]: Delocalized<DropLocaleMap<T[K]>>;
|
|
11
|
+
} : T;
|
|
12
|
+
type DropLocaleMap<T> = T extends unknown ? (T extends readonly unknown[] ? T : string extends keyof T ? never : T) : never;
|
|
13
|
+
/** Props a registered block's component gets for schema `S`. */
|
|
14
|
+
export type BlockPropsOf<S extends z.ZodType> = Delocalized<z.output<S>>;
|
|
15
|
+
/** Inspector hints per prop (the editor's SchemaForm reads them; `f.*` metadata is the default). */
|
|
16
|
+
export type FieldHints<P> = {
|
|
17
|
+
[K in keyof P]?: {
|
|
18
|
+
widget?: string;
|
|
19
|
+
label?: string;
|
|
20
|
+
help?: string;
|
|
21
|
+
placeholder?: string;
|
|
22
|
+
group?: string;
|
|
23
|
+
hidden?: boolean;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export interface SlotSpec {
|
|
27
|
+
label?: string;
|
|
28
|
+
/** Allowed child block types. Default: any body block. */
|
|
29
|
+
allow?: readonly string[];
|
|
30
|
+
min?: number;
|
|
31
|
+
max?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface BlockSupports {
|
|
34
|
+
/** Editors may set `node.anchor`. Default true. */
|
|
35
|
+
anchor?: boolean;
|
|
36
|
+
/** Editors may set `node.theme`. Default true. */
|
|
37
|
+
theme?: boolean;
|
|
38
|
+
/** Width options a layout may offer. */
|
|
39
|
+
align?: readonly ("wide" | "full")[];
|
|
40
|
+
/** Editors may set `theme.rhythm`. Default true. */
|
|
41
|
+
spacing?: boolean;
|
|
42
|
+
/** This block's title is the page title: the first one on a page gets `h1` (hero, page intro). */
|
|
43
|
+
pageTitle?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface JsonLdContext {
|
|
46
|
+
locale: string;
|
|
47
|
+
node: BlockNode;
|
|
48
|
+
}
|
|
49
|
+
export interface BlockDefinitionInput<S extends z.ZodObject = z.ZodObject, V extends string = string> {
|
|
50
|
+
/** Unique, kebab-case, never renamed. */
|
|
51
|
+
type: string;
|
|
52
|
+
/** Schema version of `props`. Bump on any breaking change and add a `migrate` step. */
|
|
53
|
+
version: number;
|
|
54
|
+
/** Inserter title ("Map & opening hours"). */
|
|
55
|
+
title: string;
|
|
56
|
+
description?: string;
|
|
57
|
+
category: BlockCategory;
|
|
58
|
+
/** Page region the block belongs to. Default "body". */
|
|
59
|
+
region?: BlockRegion;
|
|
60
|
+
/** Inserter search aliases ("banner", "intro"). */
|
|
61
|
+
keywords?: readonly string[];
|
|
62
|
+
/** Lucide icon name for the inserter (kebab-case). */
|
|
63
|
+
icon?: string;
|
|
64
|
+
variants?: readonly [V, ...V[]];
|
|
65
|
+
defaultVariant?: V;
|
|
66
|
+
variantMeta?: Partial<Record<V, {
|
|
67
|
+
label: string;
|
|
68
|
+
description?: string;
|
|
69
|
+
thumb?: string;
|
|
70
|
+
}>>;
|
|
71
|
+
/** Props schema (built with `f.*`). Defaults via `.default()`. */
|
|
72
|
+
schema: S;
|
|
73
|
+
fields?: FieldHints<z.input<S>>;
|
|
74
|
+
slots?: Record<string, SlotSpec>;
|
|
75
|
+
/** `migrate[n]` upgrades props from version n to n + 1. */
|
|
76
|
+
migrate?: Record<number, (props: any, node: BlockNode) => unknown>;
|
|
77
|
+
supports?: BlockSupports;
|
|
78
|
+
/** Inserter preview and the fallback for invalid fields. Realistic copy, never lorem ipsum. */
|
|
79
|
+
preview?: {
|
|
80
|
+
props?: z.input<S>;
|
|
81
|
+
variant?: V;
|
|
82
|
+
image?: string;
|
|
83
|
+
};
|
|
84
|
+
/** Sample content per variant/locale (AI drafts, docs, empty blocks). */
|
|
85
|
+
examples?: (variant: V, locale: string) => z.input<S>;
|
|
86
|
+
/** JSON-LD for this block; the renderer merges every block into one @graph. */
|
|
87
|
+
jsonLd?: (props: BlockPropsOf<S>, ctx: JsonLdContext) => Record<string, unknown> | Record<string, unknown>[] | null;
|
|
88
|
+
/** Block-specific lint rules (D6). */
|
|
89
|
+
lint?: (props: BlockPropsOf<S>, node: BlockNode) => LintIssueInput[];
|
|
90
|
+
/** The SAME component on the site and in the editor canvas. Omit for schema-only (server) registries. */
|
|
91
|
+
component?: React.ComponentType<BlockComponentProps<BlockPropsOf<S>>>;
|
|
92
|
+
}
|
|
93
|
+
export interface BlockDefinition<S extends z.ZodObject = z.ZodObject, V extends string = string> extends BlockDefinitionInput<S, V> {
|
|
94
|
+
readonly region: BlockRegion;
|
|
95
|
+
readonly supports: BlockSupports;
|
|
96
|
+
/** Strict node schema for this type. */
|
|
97
|
+
readonly nodeSchema: z.ZodType<BlockNode>;
|
|
98
|
+
/** Example props for a variant (preview → examples → schema defaults). */
|
|
99
|
+
sample(variant?: V, locale?: string): z.input<S>;
|
|
100
|
+
}
|
|
101
|
+
/** A block definition with any props schema (registries, renderers). */
|
|
102
|
+
export type AnyBlockDefinition = BlockDefinition<any, any>;
|
|
103
|
+
export declare class BlockDefinitionError extends Error {
|
|
104
|
+
constructor(type: string, message: string);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Defines a block once for the site, the editor and JSON tooling.
|
|
108
|
+
*
|
|
109
|
+
* ```ts
|
|
110
|
+
* export const faqBlock = defineBlock({
|
|
111
|
+
* type: "faq", version: 1, title: "FAQ", category: "content",
|
|
112
|
+
* schema: z.object({ title: f.heading(), items: f.list(f.group({ q: f.text(), a: f.rich() }), { min: 1 }) }),
|
|
113
|
+
* preview: { props: { title: "Before you *book*", items: [...] } },
|
|
114
|
+
* component: Faq,
|
|
115
|
+
* });
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
export declare function defineBlock<S extends z.ZodObject, const V extends string = string>(def: BlockDefinitionInput<S, V>): BlockDefinition<S, V>;
|
|
119
|
+
export interface BlockRegistry {
|
|
120
|
+
readonly definitions: readonly AnyBlockDefinition[];
|
|
121
|
+
readonly types: readonly string[];
|
|
122
|
+
get(type: string): AnyBlockDefinition | undefined;
|
|
123
|
+
has(type: string): boolean;
|
|
124
|
+
/** True for registered types and the core text types (paragraph, heading…). */
|
|
125
|
+
knows(type: string): boolean;
|
|
126
|
+
list(filter?: {
|
|
127
|
+
region?: BlockRegion;
|
|
128
|
+
category?: BlockCategory;
|
|
129
|
+
}): AnyBlockDefinition[];
|
|
130
|
+
/** A new registry with more blocks (later definitions win only when `override` is set). */
|
|
131
|
+
extend(defs: readonly AnyBlockDefinition[], opts?: {
|
|
132
|
+
override?: boolean;
|
|
133
|
+
}): BlockRegistry;
|
|
134
|
+
/** Strict node schema: a discriminated union of every registered type (core text types pass loosely). */
|
|
135
|
+
nodeSchema(): z.ZodType<BlockNode>;
|
|
136
|
+
/** Strict VamosDoc schema for this registry. */
|
|
137
|
+
docSchema(): z.ZodType;
|
|
138
|
+
/** JSON Schema of the doc format with every block's props (LLM tool definitions, external builders). */
|
|
139
|
+
toJSONSchema(opts?: {
|
|
140
|
+
target?: "doc" | "node";
|
|
141
|
+
}): Record<string, unknown>;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Collects block definitions. Tree-shakeable: import only the blocks a site uses.
|
|
145
|
+
*
|
|
146
|
+
* ```ts
|
|
147
|
+
* export const siteBlocks = createRegistry([heroBlock, faqBlock, ctaBlock]);
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
export declare function createRegistry(defs?: readonly AnyBlockDefinition[]): BlockRegistry;
|
|
151
|
+
export {};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// defineBlock + registry: ONE definition per block, shared by the site renderer, the block
|
|
2
|
+
// editor (inspector, inserter, slots) and AI/JSON tooling (X6). React appears only as a type.
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { blockNodeBase, docSchemaOf, BlockNodeSchema, isCoreTextType, VAMOS_DOC_SCHEMA_URL } from "./nodes.js";
|
|
5
|
+
export class BlockDefinitionError extends Error {
|
|
6
|
+
constructor(type, message) {
|
|
7
|
+
super(`defineBlock("${type}"): ${message}`);
|
|
8
|
+
this.name = "BlockDefinitionError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Defines a block once for the site, the editor and JSON tooling.
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* export const faqBlock = defineBlock({
|
|
16
|
+
* type: "faq", version: 1, title: "FAQ", category: "content",
|
|
17
|
+
* schema: z.object({ title: f.heading(), items: f.list(f.group({ q: f.text(), a: f.rich() }), { min: 1 }) }),
|
|
18
|
+
* preview: { props: { title: "Before you *book*", items: [...] } },
|
|
19
|
+
* component: Faq,
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function defineBlock(def) {
|
|
24
|
+
if (!/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(def.type))
|
|
25
|
+
throw new BlockDefinitionError(def.type, "type must be kebab-case.");
|
|
26
|
+
if (!Number.isInteger(def.version) || def.version < 1)
|
|
27
|
+
throw new BlockDefinitionError(def.type, "version must be a positive integer.");
|
|
28
|
+
for (const k of Object.keys(def.migrate ?? {})) {
|
|
29
|
+
const n = Number(k);
|
|
30
|
+
if (!Number.isInteger(n) || n < 1 || n >= def.version)
|
|
31
|
+
throw new BlockDefinitionError(def.type, `migrate[${k}] must upgrade a version below ${def.version}.`);
|
|
32
|
+
}
|
|
33
|
+
for (let n = 1; n < def.version; n++) {
|
|
34
|
+
if (!def.migrate?.[n])
|
|
35
|
+
throw new BlockDefinitionError(def.type, `missing migrate[${n}] (v${n} → v${n + 1}); stored content would be lost.`);
|
|
36
|
+
}
|
|
37
|
+
if (def.defaultVariant && def.variants && !def.variants.includes(def.defaultVariant))
|
|
38
|
+
throw new BlockDefinitionError(def.type, `defaultVariant "${def.defaultVariant}" is not in variants.`);
|
|
39
|
+
const variantSchema = def.variants ? z.enum(def.variants).optional() : z.string().optional();
|
|
40
|
+
const nodeSchema = z.object({
|
|
41
|
+
...blockNodeBase,
|
|
42
|
+
type: z.literal(def.type),
|
|
43
|
+
variant: variantSchema,
|
|
44
|
+
props: def.schema,
|
|
45
|
+
slots: z.record(z.string(), z.array(BlockNodeSchema)).optional(),
|
|
46
|
+
});
|
|
47
|
+
const out = {
|
|
48
|
+
...def,
|
|
49
|
+
region: def.region ?? "body",
|
|
50
|
+
supports: { anchor: true, theme: true, spacing: true, ...def.supports },
|
|
51
|
+
nodeSchema,
|
|
52
|
+
sample(variant, locale = "en") {
|
|
53
|
+
if (variant && def.examples)
|
|
54
|
+
return def.examples(variant, locale);
|
|
55
|
+
if (def.preview?.props)
|
|
56
|
+
return def.preview.props;
|
|
57
|
+
const v = (variant ?? def.defaultVariant ?? def.variants?.[0]);
|
|
58
|
+
if (def.examples)
|
|
59
|
+
return def.examples(v, locale);
|
|
60
|
+
const parsed = def.schema.safeParse({});
|
|
61
|
+
return (parsed.success ? parsed.data : {});
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
return Object.freeze(out);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Collects block definitions. Tree-shakeable: import only the blocks a site uses.
|
|
68
|
+
*
|
|
69
|
+
* ```ts
|
|
70
|
+
* export const siteBlocks = createRegistry([heroBlock, faqBlock, ctaBlock]);
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export function createRegistry(defs = []) {
|
|
74
|
+
const map = new Map();
|
|
75
|
+
for (const d of defs) {
|
|
76
|
+
if (map.has(d.type))
|
|
77
|
+
throw new BlockDefinitionError(d.type, "registered twice.");
|
|
78
|
+
map.set(d.type, d);
|
|
79
|
+
}
|
|
80
|
+
let node;
|
|
81
|
+
const reg = {
|
|
82
|
+
definitions: [...map.values()],
|
|
83
|
+
types: [...map.keys()],
|
|
84
|
+
get: (t) => map.get(t),
|
|
85
|
+
has: (t) => map.has(t),
|
|
86
|
+
knows: (t) => map.has(t) || isCoreTextType(t),
|
|
87
|
+
list: (filter) => [...map.values()].filter((d) => (!filter?.region || d.region === filter.region) && (!filter?.category || d.category === filter.category)),
|
|
88
|
+
extend(more, opts) {
|
|
89
|
+
const next = new Map(map);
|
|
90
|
+
for (const d of more) {
|
|
91
|
+
if (next.has(d.type) && !opts?.override)
|
|
92
|
+
throw new BlockDefinitionError(d.type, "already registered (pass { override: true } to replace it).");
|
|
93
|
+
next.set(d.type, d);
|
|
94
|
+
}
|
|
95
|
+
return createRegistry([...next.values()]);
|
|
96
|
+
},
|
|
97
|
+
nodeSchema() {
|
|
98
|
+
if (node)
|
|
99
|
+
return node;
|
|
100
|
+
const strict = [...map.values()].map((d) => d.nodeSchema);
|
|
101
|
+
const loose = BlockNodeSchema.refine((n) => isCoreTextType(n.type), { message: "Unknown block type." });
|
|
102
|
+
node = strict.length ? z.union([...strict, loose]) : loose;
|
|
103
|
+
return node;
|
|
104
|
+
},
|
|
105
|
+
docSchema() {
|
|
106
|
+
return docSchemaOf(reg.nodeSchema());
|
|
107
|
+
},
|
|
108
|
+
toJSONSchema(opts) {
|
|
109
|
+
const target = opts?.target ?? "doc";
|
|
110
|
+
const strict = [...map.values()].map((d) => d.nodeSchema);
|
|
111
|
+
const nodeUnion = strict.length > 1 ? z.union(strict) : (strict[0] ?? BlockNodeSchema);
|
|
112
|
+
const schema = target === "node" ? nodeUnion : docSchemaOf(nodeUnion);
|
|
113
|
+
const json = z.toJSONSchema(schema, { unrepresentable: "any", io: "input" });
|
|
114
|
+
if (target === "doc")
|
|
115
|
+
json.$id = VAMOS_DOC_SCHEMA_URL;
|
|
116
|
+
return json;
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
return reg;
|
|
120
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface EmphasisPart {
|
|
2
|
+
text: string;
|
|
3
|
+
em: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Splits a heading string into plain and emphasized parts. `\*` is a literal star; an unmatched
|
|
7
|
+
* star stays literal; `**` (empty) is ignored.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* parseEmphasis("Dinner, *slowly*."); // [{ text: "Dinner, ", em: false }, { text: "slowly", em: true }, { text: ".", em: false }]
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseEmphasis(input: string): EmphasisPart[];
|
|
14
|
+
/** Number of emphasized spans (the schema allows at most one). */
|
|
15
|
+
export declare const countEmphasis: (input: string) => number;
|
|
16
|
+
/** The heading without emphasis markers (for `<title>`, aria-labels, search). */
|
|
17
|
+
export declare const stripEmphasis: (input: string) => string;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// `*emphasis*` in headings: one starred span becomes <em> (italic serif in editorial presets,
|
|
2
|
+
// accent ink in sans presets). Pure, shared by the schema (validation) and BlockHeading (render).
|
|
3
|
+
/**
|
|
4
|
+
* Splits a heading string into plain and emphasized parts. `\*` is a literal star; an unmatched
|
|
5
|
+
* star stays literal; `**` (empty) is ignored.
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* parseEmphasis("Dinner, *slowly*."); // [{ text: "Dinner, ", em: false }, { text: "slowly", em: true }, { text: ".", em: false }]
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export function parseEmphasis(input) {
|
|
12
|
+
const parts = [];
|
|
13
|
+
let buf = "";
|
|
14
|
+
let i = 0;
|
|
15
|
+
const push = (text, em) => {
|
|
16
|
+
if (!text)
|
|
17
|
+
return;
|
|
18
|
+
const last = parts[parts.length - 1];
|
|
19
|
+
if (last && last.em === em)
|
|
20
|
+
last.text += text;
|
|
21
|
+
else
|
|
22
|
+
parts.push({ text, em });
|
|
23
|
+
};
|
|
24
|
+
while (i < input.length) {
|
|
25
|
+
const ch = input[i];
|
|
26
|
+
if (ch === "\\" && input[i + 1] === "*") {
|
|
27
|
+
buf += "*";
|
|
28
|
+
i += 2;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (ch === "*") {
|
|
32
|
+
// find the closing star (not escaped)
|
|
33
|
+
let j = i + 1;
|
|
34
|
+
let inner = "";
|
|
35
|
+
let closed = false;
|
|
36
|
+
while (j < input.length) {
|
|
37
|
+
if (input[j] === "\\" && input[j + 1] === "*") {
|
|
38
|
+
inner += "*";
|
|
39
|
+
j += 2;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (input[j] === "*") {
|
|
43
|
+
closed = true;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
inner += input[j];
|
|
47
|
+
j++;
|
|
48
|
+
}
|
|
49
|
+
if (closed && inner.trim() && inner === inner.trim()) {
|
|
50
|
+
push(buf, false);
|
|
51
|
+
buf = "";
|
|
52
|
+
push(inner, true);
|
|
53
|
+
i = j + 1;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
buf += "*";
|
|
57
|
+
i++;
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
buf += ch;
|
|
61
|
+
i++;
|
|
62
|
+
}
|
|
63
|
+
push(buf, false);
|
|
64
|
+
return parts;
|
|
65
|
+
}
|
|
66
|
+
/** Number of emphasized spans (the schema allows at most one). */
|
|
67
|
+
export const countEmphasis = (input) => parseEmphasis(input).filter((p) => p.em).length;
|
|
68
|
+
/** The heading without emphasis markers (for `<title>`, aria-labels, search). */
|
|
69
|
+
export const stripEmphasis = (input) => parseEmphasis(input).map((p) => p.text).join("");
|