@vamos-ui/react 0.0.0-stage → 0.3.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 +101 -0
- package/dist/blocks/site/_kit-1.js +137 -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 +113 -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 +52 -0
- package/dist/blocks/site/feature-grid.d.ts +46 -0
- package/dist/blocks/site/feature-grid.js +50 -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 +48 -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 +73 -0
- package/dist/blocks/site/logo-strip.d.ts +44 -0
- package/dist/blocks/site/logo-strip.js +27 -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 +56 -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 +83 -0
- package/dist/blocks/site/process.d.ts +36 -0
- package/dist/blocks/site/process.js +42 -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 +108 -0
- package/dist/blocks/site/site-shell.js +254 -0
- package/dist/blocks/site/stats-band.d.ts +42 -0
- package/dist/blocks/site/stats-band.js +45 -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 +66 -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 +12 -0
- package/dist/business/index.js +22 -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/business/signer-status.d.ts +53 -0
- package/dist/business/signer-status.js +76 -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 +46 -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/_qr-core.d.ts +26 -0
- package/dist/components/_qr-core.js +376 -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/backup-codes.d.ts +42 -0
- package/dist/components/backup-codes.js +67 -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 +281 -0
- package/dist/components/command.js +498 -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/pin-map.d.ts +58 -0
- package/dist/components/pin-map.js +167 -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/qr-code.d.ts +36 -0
- package/dist/components/qr-code.js +27 -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/sla-timer.d.ts +75 -0
- package/dist/components/sla-timer.js +142 -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/tour.d.ts +60 -0
- package/dist/components/tour.js +139 -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 +91 -0
- package/dist/index.js +92 -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 +23 -0
- package/dist/lib/public.js +34 -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 +140 -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/motion/core.d.ts +32 -0
- package/dist/motion/core.js +77 -0
- package/dist/motion/count-up.d.ts +29 -0
- package/dist/motion/count-up.js +92 -0
- package/dist/motion/index.d.ts +11 -0
- package/dist/motion/index.js +13 -0
- package/dist/motion/motion-scope.d.ts +17 -0
- package/dist/motion/motion-scope.js +16 -0
- package/dist/motion/page-transition.d.ts +33 -0
- package/dist/motion/page-transition.js +61 -0
- package/dist/motion/parallax.d.ts +37 -0
- package/dist/motion/parallax.js +90 -0
- package/dist/motion/pointer.d.ts +38 -0
- package/dist/motion/pointer.js +117 -0
- package/dist/motion/reveal.d.ts +72 -0
- package/dist/motion/reveal.js +133 -0
- package/dist/motion/scroll-shrink.d.ts +18 -0
- package/dist/motion/scroll-shrink.js +47 -0
- package/dist/motion/skeleton-swap.d.ts +17 -0
- package/dist/motion/skeleton-swap.js +43 -0
- package/dist/motion/text-reveal.d.ts +30 -0
- package/dist/motion/text-reveal.js +29 -0
- package/dist/motion/ticker.d.ts +35 -0
- package/dist/motion/ticker.js +16 -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 +105 -0
- package/dist/sortable/sortable-tree.js +462 -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/motion.css +389 -0
- package/dist/styles/navigation.css +293 -0
- package/dist/styles/overlays.css +244 -0
- package/dist/styles.css +743 -0
- package/package.json +160 -4
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { ImageOff } from "lucide-react";
|
|
6
|
+
import { cn } from "../lib/cn.js";
|
|
7
|
+
import { useLabels } from "../lib/labels.js";
|
|
8
|
+
import { DefaultImage, useImage, useMediaAdapter } from "../lib/provider.js";
|
|
9
|
+
import { useComposedRefs } from "../lib/compose-refs.js";
|
|
10
|
+
import { useIsomorphicLayoutEffect } from "../lib/use-controllable-state.js";
|
|
11
|
+
import { Spinner } from "./spinner.js";
|
|
12
|
+
/** Default `srcset` steps. */
|
|
13
|
+
export const IMAGE_WIDTHS = [320, 480, 640, 768, 1024, 1280, 1600, 1920];
|
|
14
|
+
/** `"16/9"` → 1.777…, `1.5` → 1.5, `"auto"` → the intrinsic ratio (or `undefined`). */
|
|
15
|
+
export function aspectRatioOf(aspect, width, height) {
|
|
16
|
+
if (typeof aspect === "number")
|
|
17
|
+
return aspect > 0 ? aspect : undefined;
|
|
18
|
+
if (aspect && aspect !== "auto") {
|
|
19
|
+
const [w, h] = aspect.split("/").map(Number);
|
|
20
|
+
if (w && h)
|
|
21
|
+
return w / h;
|
|
22
|
+
}
|
|
23
|
+
return width && height ? width / height : undefined;
|
|
24
|
+
}
|
|
25
|
+
/** Focal point (0..1) → CSS `object-position`. Image space: never mirrored in RTL. */
|
|
26
|
+
export function focalToObjectPosition(focal) {
|
|
27
|
+
if (!focal)
|
|
28
|
+
return undefined;
|
|
29
|
+
const pct = (n) => `${Math.round(Math.min(1, Math.max(0, n)) * 1000) / 10}%`;
|
|
30
|
+
return `${pct(focal.x)} ${pct(focal.y)}`;
|
|
31
|
+
}
|
|
32
|
+
const isAsset = (src) => typeof src === "object" && src !== null && "url" in src && "id" in src;
|
|
33
|
+
/** Builds `src` / `srcSet` / `sizes` for an asset or URL (pure; usable on the server). */
|
|
34
|
+
export function getImageSources(source, options = {}) {
|
|
35
|
+
const { loader, widths = IMAGE_WIDTHS, quality, focal, format, sizes } = options;
|
|
36
|
+
const url = typeof source === "string" ? source : source.url;
|
|
37
|
+
const crop = typeof options.crop === "string" ? (isAsset(source) ? source.crops?.[options.crop] : undefined) : options.crop;
|
|
38
|
+
if (loader) {
|
|
39
|
+
const max = isAsset(source) && source.width ? source.width : Infinity;
|
|
40
|
+
const steps = widths.filter((w) => w <= max);
|
|
41
|
+
const list = steps.length ? steps : [Math.min(widths[0] ?? 640, max)];
|
|
42
|
+
const srcSet = list.map((w) => `${loader({ src: url, width: w, quality, focal, crop, format })} ${w}w`).join(", ");
|
|
43
|
+
const fallbackWidth = list[Math.min(list.length - 1, Math.floor(list.length / 2))];
|
|
44
|
+
return { src: loader({ src: url, width: fallbackWidth, quality, focal, crop, format }), srcSet, sizes: sizes ?? "100vw" };
|
|
45
|
+
}
|
|
46
|
+
if (isAsset(source) && source.variants) {
|
|
47
|
+
const variants = Object.values(source.variants).sort((a, b) => a.width - b.width);
|
|
48
|
+
if (variants.length) {
|
|
49
|
+
const srcSet = [...variants.map((v) => `${v.url} ${v.width}w`), ...(source.width ? [`${source.url} ${source.width}w`] : [])].join(", ");
|
|
50
|
+
return { src: url, srcSet, sizes: sizes ?? "100vw" };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { src: url, sizes };
|
|
54
|
+
}
|
|
55
|
+
/* ------------------------------------------------------------------ */
|
|
56
|
+
/* Loader context */
|
|
57
|
+
/* ------------------------------------------------------------------ */
|
|
58
|
+
const ImageLoaderContext = React.createContext(undefined);
|
|
59
|
+
/**
|
|
60
|
+
* Sets the image loader for every kit `Image` below (CDN URL builder). Same signature as the
|
|
61
|
+
* Next.js loader. The media adapter's `loader` is used when no provider sets one.
|
|
62
|
+
*
|
|
63
|
+
* ```tsx
|
|
64
|
+
* <ImageLoaderProvider loader={({ src, width, quality }) => `https://cdn.example.com/cdn-cgi/image/width=${width},quality=${quality ?? 75},format=auto/${src}`}>
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export function ImageLoaderProvider({ loader, children }) {
|
|
68
|
+
return _jsx(ImageLoaderContext.Provider, { value: loader, children: children });
|
|
69
|
+
}
|
|
70
|
+
/** The active loader: `ImageLoaderProvider` → media adapter `loader` → none. */
|
|
71
|
+
export function useImageLoader() {
|
|
72
|
+
const fromContext = React.useContext(ImageLoaderContext);
|
|
73
|
+
const adapter = useMediaAdapter();
|
|
74
|
+
return fromContext ?? adapter?.loader;
|
|
75
|
+
}
|
|
76
|
+
/** `getImageSources` with the provider's loader. */
|
|
77
|
+
export function useImageSources(source, options = {}) {
|
|
78
|
+
const ctxLoader = useImageLoader();
|
|
79
|
+
const loader = options.loader ?? ctxLoader;
|
|
80
|
+
const cropKey = typeof options.crop === "object" ? JSON.stringify(options.crop) : options.crop;
|
|
81
|
+
const widthsKey = options.widths?.join(",");
|
|
82
|
+
return React.useMemo(() => getImageSources(source, { ...options, loader }),
|
|
83
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
84
|
+
[source, loader, options.sizes, widthsKey, options.quality, options.focal?.x, options.focal?.y, cropKey, options.format]);
|
|
85
|
+
}
|
|
86
|
+
/* ------------------------------------------------------------------ */
|
|
87
|
+
/* Image */
|
|
88
|
+
/* ------------------------------------------------------------------ */
|
|
89
|
+
export const imageVariants = cva("vui-image relative isolate block max-w-full overflow-hidden bg-skeleton", {
|
|
90
|
+
variants: {
|
|
91
|
+
rounded: { none: "", ui: "rounded-ui", "ui-lg": "rounded-ui-lg", full: "rounded-full" },
|
|
92
|
+
fit: { cover: "", contain: "" },
|
|
93
|
+
/** `surface`: a hairline `--surface-border` frame drawn above the image. */
|
|
94
|
+
frame: { none: "", surface: "vui-image-framed" },
|
|
95
|
+
},
|
|
96
|
+
defaultVariants: { rounded: "none", fit: "cover", frame: "none" },
|
|
97
|
+
});
|
|
98
|
+
const imageLabels = { processing: "Processing", error: "Image could not be loaded" };
|
|
99
|
+
const FILENAME_ALT = /(^(img|dsc|pxl|screenshot)[-_ ]?\d+)|\.(jpe?g|png|gif|webp|avif|heic|svg|tiff?)$/i;
|
|
100
|
+
/**
|
|
101
|
+
* The image primitive: no layout shift (width/height + `aspect-ratio`), focal point →
|
|
102
|
+
* `object-position`, LQIP / colour / skeleton placeholder that cross-fades out, `srcset` from the
|
|
103
|
+
* loader or asset variants. Framework-agnostic: a plain `<img>`, or the app's `Image` from
|
|
104
|
+
* `VamosProvider` (e.g. `next/image`).
|
|
105
|
+
*
|
|
106
|
+
* ```tsx
|
|
107
|
+
* <Image src={asset} alt="Lobby of the Kadıköy office" aspect="16/9" sizes="(min-width: 1024px) 50vw, 100vw" rounded="ui" />
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export const Image = React.forwardRef(function Image({ src: source, alt: altProp, width: widthProp, height: heightProp, aspect = "auto", fit = "cover", focal: focalProp, crop, sizes, widths, quality, priority, placeholder: placeholderProp, blurDataURL, color: colorProp, loader, fallback, processing: processingProp, rounded, frame, className, imgClassName, style, labels, onLoad, onError, loading, decoding, ...props }, forwardedRef) {
|
|
111
|
+
const t = useLabels("image", imageLabels, labels);
|
|
112
|
+
const Bridge = useImage();
|
|
113
|
+
const asset = isAsset(source) ? source : undefined;
|
|
114
|
+
const alt = altProp ?? asset?.alt ?? "";
|
|
115
|
+
const width = widthProp ?? asset?.width;
|
|
116
|
+
const height = heightProp ?? asset?.height;
|
|
117
|
+
const focal = focalProp ?? asset?.focalPoint;
|
|
118
|
+
const blur = blurDataURL ?? asset?.placeholder;
|
|
119
|
+
const color = colorProp ?? asset?.dominantColor;
|
|
120
|
+
const processing = processingProp ?? asset?.status === "processing";
|
|
121
|
+
const placeholder = placeholderProp ?? (blur ? "blur" : color ? "color" : "skeleton");
|
|
122
|
+
const ratio = aspectRatioOf(aspect, width, height);
|
|
123
|
+
const sources = useImageSources(source, { sizes, widths, loader, quality, focal, crop });
|
|
124
|
+
const [state, setState] = React.useState("loading");
|
|
125
|
+
const imgRef = React.useRef(null);
|
|
126
|
+
const ref = useComposedRefs(forwardedRef, imgRef);
|
|
127
|
+
// Reset on a new source; catch images that finished before hydration attached onLoad.
|
|
128
|
+
useIsomorphicLayoutEffect(() => {
|
|
129
|
+
const img = imgRef.current;
|
|
130
|
+
if (img?.complete && img.naturalWidth > 0)
|
|
131
|
+
setState("loaded");
|
|
132
|
+
// A broken image that errored before hydration never fires onError again.
|
|
133
|
+
else if (img?.complete && img.getAttribute("src"))
|
|
134
|
+
setState("error");
|
|
135
|
+
else
|
|
136
|
+
setState("loading");
|
|
137
|
+
}, [sources.src]);
|
|
138
|
+
if (process.env.NODE_ENV !== "production" && alt && FILENAME_ALT.test(alt.trim())) {
|
|
139
|
+
console.warn(`Image: alt text "${alt}" looks like a file name. Describe the image instead, or pass alt="" if it is decorative.`);
|
|
140
|
+
}
|
|
141
|
+
const objectPosition = focalToObjectPosition(focal);
|
|
142
|
+
const positioned = ratio !== undefined;
|
|
143
|
+
const imgClasses = cn("vui-image-img block", positioned ? "absolute inset-0 size-full" : "h-auto w-full", fit === "contain" ? "object-contain" : "object-cover", imgClassName);
|
|
144
|
+
const imgStyle = { objectPosition };
|
|
145
|
+
const handleLoad = (e) => {
|
|
146
|
+
setState("loaded");
|
|
147
|
+
onLoad?.(e);
|
|
148
|
+
};
|
|
149
|
+
const handleError = (e) => {
|
|
150
|
+
setState("error");
|
|
151
|
+
onError?.(e);
|
|
152
|
+
};
|
|
153
|
+
const a11y = alt === "" ? { role: "presentation" } : null;
|
|
154
|
+
const img = Bridge !== DefaultImage ? (_jsx(Bridge, { ref: ref, src: sources.src, alt: alt, ...(positioned ? { fill: true } : { width, height }), sizes: sources.sizes, priority: priority, quality: quality, className: imgClasses, style: imgStyle, onLoad: handleLoad, onError: handleError, ...a11y, ...props })) : (_jsx("img", { ref: ref, src: sources.src, srcSet: sources.srcSet, sizes: sources.sizes, alt: alt, width: width, height: height, loading: loading ?? (priority ? "eager" : "lazy"), decoding: decoding ?? "async", fetchPriority: priority ? "high" : undefined, className: imgClasses, style: imgStyle, onLoad: handleLoad, onError: handleError, ...a11y, ...props }));
|
|
155
|
+
return (_jsxs("span", { "data-slot": "image", "data-state": state, "data-placeholder": placeholder, className: cn(imageVariants({ rounded, frame }), placeholder === "none" && "bg-transparent", className), style: {
|
|
156
|
+
...(positioned ? { aspectRatio: String(ratio) } : null),
|
|
157
|
+
...(placeholder === "color" && color ? { backgroundColor: color } : null),
|
|
158
|
+
...style,
|
|
159
|
+
}, children: [placeholder === "blur" && blur && state !== "error" ? (_jsx("img", { "aria-hidden": true, alt: "", src: blur, "data-slot": "image-blur", className: "vui-image-blur pointer-events-none absolute inset-0 size-full object-cover", style: imgStyle })) : null, placeholder === "skeleton" && state === "loading" ? _jsx("span", { "aria-hidden": true, "data-slot": "image-skeleton", className: "ui-shimmer absolute inset-0" }) : null, state === "error" ? (fallback ? (_jsx("span", { "data-slot": "image-fallback", className: cn(positioned ? "absolute inset-0" : "block min-h-24", "flex items-center justify-center"), children: fallback })) : (_jsx("span", { "data-slot": "image-fallback", ...(alt ? { role: "img", "aria-label": alt } : { "aria-hidden": true }), title: t("error"), className: cn(positioned ? "absolute inset-0" : "block min-h-24", "flex items-center justify-center text-fg-subtle [&_svg]:size-6"), children: _jsx(ImageOff, { "aria-hidden": true, strokeWidth: 1.5 }) }))) : (img), processing ? (_jsxs("span", { "data-slot": "image-processing", className: "surface-popover absolute start-2 top-2 z-10 inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[11px] font-medium", children: [_jsx(Spinner, { size: "xs", tone: "accent" }), t("processing")] })) : null] }));
|
|
160
|
+
});
|
|
161
|
+
/** `<figure>` for a captioned image (blocks, galleries, articles). */
|
|
162
|
+
export const Figure = React.forwardRef(function Figure({ gap = "sm", className, ...props }, ref) {
|
|
163
|
+
return _jsx("figure", { ref: ref, "data-slot": "figure", className: cn("m-0 flex flex-col", gap === "sm" ? "gap-2" : "gap-3", className), ...props });
|
|
164
|
+
});
|
|
165
|
+
/** `<figcaption>`: caption text plus an optional credit. */
|
|
166
|
+
export const FigureCaption = React.forwardRef(function FigureCaption({ credit, className, children, ...props }, ref) {
|
|
167
|
+
return (_jsxs("figcaption", { ref: ref, "data-slot": "figure-caption", className: cn("text-[13px] leading-relaxed text-pretty text-fg-muted", className), ...props, children: [children, credit ? _jsx("span", { className: "ms-2 text-[11.5px] tracking-wide text-fg-subtle uppercase", children: credit }) : null] }));
|
|
168
|
+
});
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
declare const otpLabels: {
|
|
3
|
+
label: string;
|
|
4
|
+
labelCharacters: string;
|
|
5
|
+
verifying: string;
|
|
6
|
+
};
|
|
7
|
+
export type InputOTPLabels = typeof otpLabels;
|
|
8
|
+
export interface InputOTPRootProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "defaultValue" | "onChange" | "size" | "pattern" | "children" | "maxLength"> {
|
|
9
|
+
/** Number of characters. */
|
|
10
|
+
maxLength: number;
|
|
11
|
+
value?: string;
|
|
12
|
+
defaultValue?: string;
|
|
13
|
+
onValueChange?: (value: string) => void;
|
|
14
|
+
/** Called once all slots are filled. */
|
|
15
|
+
onComplete?: (value: string) => void;
|
|
16
|
+
/** Allowed characters. Default `"digits"`. */
|
|
17
|
+
pattern?: "digits" | "alphanumeric" | RegExp;
|
|
18
|
+
size?: "md" | "lg";
|
|
19
|
+
/** Show dots instead of characters (the value is unchanged). */
|
|
20
|
+
mask?: boolean;
|
|
21
|
+
invalid?: boolean;
|
|
22
|
+
/** Code is being checked: spinner after the slots, input read-only. */
|
|
23
|
+
loading?: boolean;
|
|
24
|
+
/** Classes for the visual container (`className` too). */
|
|
25
|
+
containerClassName?: string;
|
|
26
|
+
labels?: Partial<InputOTPLabels>;
|
|
27
|
+
children: React.ReactNode;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* One real `<input>` (screen readers, SMS autofill, password managers and paste all see one
|
|
31
|
+
* field) with visual slots drawn over it. Compose `InputOTPGroup` / `InputOTPSlot` /
|
|
32
|
+
* `InputOTPSeparator`, or use the `InputOTP` shorthand.
|
|
33
|
+
*/
|
|
34
|
+
export declare const InputOTPRoot: React.ForwardRefExoticComponent<InputOTPRootProps & React.RefAttributes<HTMLInputElement>>;
|
|
35
|
+
/** A run of joined slots. */
|
|
36
|
+
export declare const InputOTPGroup: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
37
|
+
export interface InputOTPSlotProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
38
|
+
/** Position of the character this slot shows (0-based). */
|
|
39
|
+
index: number;
|
|
40
|
+
}
|
|
41
|
+
/** One visual character box: active ring, fake caret, filled state. */
|
|
42
|
+
export declare const InputOTPSlot: React.ForwardRefExoticComponent<InputOTPSlotProps & React.RefAttributes<HTMLDivElement>>;
|
|
43
|
+
/** Visual divider between groups (123–456). */
|
|
44
|
+
export declare const InputOTPSeparator: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
45
|
+
export interface InputOTPProps extends Omit<InputOTPRootProps, "maxLength" | "children"> {
|
|
46
|
+
/** Number of characters. Default 6. */
|
|
47
|
+
length?: number;
|
|
48
|
+
/** Slot grouping, e.g. `[3, 3]` → 123–456. Default: one group. */
|
|
49
|
+
groups?: number[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* One-time code entry: 2FA sign-in, SMS verification, customer portal email codes, payment
|
|
53
|
+
* confirmation. Paste and SMS autofill fill every slot at once; `onComplete` fires when full.
|
|
54
|
+
*
|
|
55
|
+
* ```tsx
|
|
56
|
+
* <Field label="Verification code" hint="We sent a 6-digit code to +90 532 ••• 41 07.">
|
|
57
|
+
* <InputOTP name="code" groups={[3, 3]} onComplete={verify} />
|
|
58
|
+
* </Field>
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare const InputOTP: React.ForwardRefExoticComponent<InputOTPProps & React.RefAttributes<HTMLInputElement>>;
|
|
62
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { OTPInput, OTPInputContext } from "input-otp";
|
|
5
|
+
import { cn } from "../lib/cn.js";
|
|
6
|
+
import { useFieldContext, useFieldControl } from "../lib/field-context.js";
|
|
7
|
+
import { useLabels } from "../lib/labels.js";
|
|
8
|
+
import { useControllableState } from "../lib/use-controllable-state.js";
|
|
9
|
+
import { Spinner } from "./spinner.js";
|
|
10
|
+
const otpLabels = {
|
|
11
|
+
label: "Verification code, {length} digits",
|
|
12
|
+
labelCharacters: "Verification code, {length} characters",
|
|
13
|
+
verifying: "Verifying code…",
|
|
14
|
+
};
|
|
15
|
+
const PATTERNS = {
|
|
16
|
+
digits: "^\\d+$",
|
|
17
|
+
alphanumeric: "^[a-zA-Z0-9]+$",
|
|
18
|
+
};
|
|
19
|
+
const OTPStyleContext = React.createContext({ size: "md", mask: false, invalid: false });
|
|
20
|
+
/**
|
|
21
|
+
* One real `<input>` (screen readers, SMS autofill, password managers and paste all see one
|
|
22
|
+
* field) with visual slots drawn over it. Compose `InputOTPGroup` / `InputOTPSlot` /
|
|
23
|
+
* `InputOTPSeparator`, or use the `InputOTP` shorthand.
|
|
24
|
+
*/
|
|
25
|
+
export const InputOTPRoot = React.forwardRef(function InputOTPRoot(rawProps, ref) {
|
|
26
|
+
const { maxLength, value: valueProp, defaultValue, onValueChange, onComplete, pattern = "digits", size = "md", mask = false, invalid, loading, containerClassName, className, labels, children, ...rest } = rawProps;
|
|
27
|
+
const t = useLabels("otp", otpLabels, labels);
|
|
28
|
+
const field = useFieldContext();
|
|
29
|
+
const props = useFieldControl({ ...rest, "aria-invalid": invalid ? true : rest["aria-invalid"] });
|
|
30
|
+
const [value, setValue] = useControllableState({ value: valueProp, defaultValue: defaultValue ?? "", onChange: onValueChange, name: "InputOTP" });
|
|
31
|
+
const isInvalid = Boolean(props["aria-invalid"]) && props["aria-invalid"] !== "false";
|
|
32
|
+
const named = props["aria-label"] || props["aria-labelledby"] || field?.labelId;
|
|
33
|
+
const patternSource = pattern instanceof RegExp ? pattern.source : PATTERNS[pattern];
|
|
34
|
+
const style = React.useMemo(() => ({ size, mask, invalid: isInvalid }), [size, mask, isInvalid]);
|
|
35
|
+
return (_jsx(OTPStyleContext.Provider, { value: style, children: _jsx(OTPInput, { ref: ref, ...props, maxLength: maxLength, value: value, onChange: (v) => setValue(v), onComplete: onComplete, pattern: patternSource, inputMode: pattern === "digits" ? "numeric" : "text", autoComplete: "one-time-code", readOnly: props.readOnly || loading, "aria-busy": loading || undefined, "aria-label": named ? props["aria-label"] : t(pattern === "digits" ? "label" : "labelCharacters", { length: maxLength }), "data-slot": "input-otp-input", containerClassName: cn("group/otp flex items-center gap-2 has-disabled:cursor-not-allowed has-disabled:opacity-50", isInvalid && "ui-otp-invalid", containerClassName, className),
|
|
36
|
+
// Slots are always left-to-right, even in RTL pages.
|
|
37
|
+
dir: "ltr", children: _jsxs(_Fragment, { children: [children, loading ? (_jsx("span", { className: "ms-1 inline-flex items-center", children: _jsx(Spinner, { size: "sm", tone: "muted", label: t("verifying") }) })) : null] }) }) }));
|
|
38
|
+
});
|
|
39
|
+
/** A run of joined slots. */
|
|
40
|
+
export const InputOTPGroup = React.forwardRef(function InputOTPGroup({ className, ...props }, ref) {
|
|
41
|
+
return _jsx("div", { ref: ref, "data-slot": "input-otp-group", className: cn("ui-otp-group flex items-center", className), ...props });
|
|
42
|
+
});
|
|
43
|
+
/** One visual character box: active ring, fake caret, filled state. */
|
|
44
|
+
export const InputOTPSlot = React.forwardRef(function InputOTPSlot({ index, className, ...props }, ref) {
|
|
45
|
+
const ctx = React.useContext(OTPInputContext);
|
|
46
|
+
const { size, mask, invalid } = React.useContext(OTPStyleContext);
|
|
47
|
+
const slot = ctx.slots[index];
|
|
48
|
+
const char = slot?.char ?? null;
|
|
49
|
+
return (_jsxs("div", { ref: ref, "data-slot": "input-otp-slot", "data-active": slot?.isActive ? "" : undefined, "data-filled": char ? "" : undefined, "aria-hidden": true, className: cn("relative flex items-center justify-center border-y border-e border-field-border bg-field font-medium text-fg tabular", "transition-[border-color,box-shadow,background-color] duration-150", "first:rounded-s-ui first:border-s last:rounded-e-ui", size === "lg" ? "h-[calc(var(--control-h)+1rem)] w-[calc(var(--control-h)+0.25rem)] text-xl" : "h-[calc(var(--control-h)+0.25rem)] w-[calc(var(--control-h)-0.25rem)] text-lg", "group-hover/otp:border-field-border-hover", slot?.isActive && "z-10 border-ring shadow-[0_0_0_3px_var(--accent-soft)]", slot?.isActive && "border-s", invalid && "border-danger", invalid && slot?.isActive && "shadow-[0_0_0_3px_color-mix(in_srgb,var(--danger)_18%,transparent)]", className), ...props, children: [char ? mask ? _jsx("span", { className: "size-2 rounded-full bg-current" }) : char : null, slot?.hasFakeCaret ? (_jsx("span", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: _jsx("span", { className: "ui-otp-caret h-[45%] w-px bg-fg" }) })) : null] }));
|
|
50
|
+
});
|
|
51
|
+
/** Visual divider between groups (123–456). */
|
|
52
|
+
export const InputOTPSeparator = React.forwardRef(function InputOTPSeparator({ className, ...props }, ref) {
|
|
53
|
+
return (_jsx("div", { ref: ref, role: "separator", "data-slot": "input-otp-separator", className: cn("flex w-3 items-center justify-center text-fg-subtle", className), ...props, children: _jsx("span", { className: "h-px w-2.5 bg-current" }) }));
|
|
54
|
+
});
|
|
55
|
+
/**
|
|
56
|
+
* One-time code entry: 2FA sign-in, SMS verification, customer portal email codes, payment
|
|
57
|
+
* confirmation. Paste and SMS autofill fill every slot at once; `onComplete` fires when full.
|
|
58
|
+
*
|
|
59
|
+
* ```tsx
|
|
60
|
+
* <Field label="Verification code" hint="We sent a 6-digit code to +90 532 ••• 41 07.">
|
|
61
|
+
* <InputOTP name="code" groups={[3, 3]} onComplete={verify} />
|
|
62
|
+
* </Field>
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export const InputOTP = React.forwardRef(function InputOTP({ length = 6, groups, ...props }, ref) {
|
|
66
|
+
const sizes = groups && groups.reduce((a, b) => a + b, 0) === length ? groups : [length];
|
|
67
|
+
let start = 0;
|
|
68
|
+
return (_jsx(InputOTPRoot, { ref: ref, maxLength: length, ...props, children: sizes.map((count, gi) => {
|
|
69
|
+
const from = start;
|
|
70
|
+
start += count;
|
|
71
|
+
return (_jsxs(React.Fragment, { children: [gi > 0 ? _jsx(InputOTPSeparator, {}) : null, _jsx(InputOTPGroup, { children: Array.from({ length: count }, (_, i) => (_jsx(InputOTPSlot, { index: from + i }, from + i))) })] }, gi));
|
|
72
|
+
}) }));
|
|
73
|
+
});
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Label as LabelPrimitive } from "radix-ui";
|
|
3
|
+
/**
|
|
4
|
+
* The classic field look for a bare `<input>` / `<textarea>`. Kept for compatibility —
|
|
5
|
+
* new controls should use `controlVariants` from `lib/variants`.
|
|
6
|
+
*/
|
|
7
|
+
export declare const fieldBase = "w-full min-w-0 rounded-ui border border-field-border bg-field text-sm text-fg placeholder:text-fg-subtle transition-[border-color,box-shadow] duration-150 hover:border-field-border-hover focus-visible:border-ring focus-visible:shadow-[0_0_0_3px_var(--accent-soft)] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger aria-invalid:focus-visible:shadow-[0_0_0_3px_color-mix(in_srgb,var(--danger)_18%,transparent)]";
|
|
8
|
+
declare const inputLabels: {
|
|
9
|
+
clear: string;
|
|
10
|
+
count: string;
|
|
11
|
+
remaining: string;
|
|
12
|
+
};
|
|
13
|
+
export type InputLabels = typeof inputLabels;
|
|
14
|
+
export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size" | "prefix"> {
|
|
15
|
+
/** Height from the density axis: sm = control-h − 0.5rem, md = control-h, lg = control-h + 0.5rem. */
|
|
16
|
+
size?: "sm" | "md" | "lg";
|
|
17
|
+
/** `"ghost"`: borderless until hover/focus (inline cell edit). `"nav"`: inside the dark sidebar. */
|
|
18
|
+
variant?: "default" | "ghost" | "nav";
|
|
19
|
+
/** Icon or short text inside the box, at the start. */
|
|
20
|
+
leading?: React.ReactNode;
|
|
21
|
+
/** Icon, unit, spinner or small button inside the box, at the end. */
|
|
22
|
+
trailing?: React.ReactNode;
|
|
23
|
+
/** Segmented addon at the start (`https://`, `$`). */
|
|
24
|
+
addonStart?: React.ReactNode;
|
|
25
|
+
/** Segmented addon at the end (`.vamos.ist`, a Button). */
|
|
26
|
+
addonEnd?: React.ReactNode;
|
|
27
|
+
/** Show a clear (×) button while there is a value. Esc also clears. */
|
|
28
|
+
clearable?: boolean;
|
|
29
|
+
/** Called after the value was cleared. */
|
|
30
|
+
onClear?: () => void;
|
|
31
|
+
/** Character counter (`12 / 60` with `maxLength`). Announced politely only near the limit. */
|
|
32
|
+
showCount?: boolean;
|
|
33
|
+
/** Invalid look + `aria-invalid` (a surrounding Field with `error` sets this for you). */
|
|
34
|
+
invalid?: boolean;
|
|
35
|
+
/** Classes for the inner `<input>`; `className` always goes on the root box. */
|
|
36
|
+
inputClassName?: string;
|
|
37
|
+
/** Built-in string overrides (`input` namespace). */
|
|
38
|
+
labels?: Partial<InputLabels>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Single-line text entry. Native contract (`value` / `defaultValue` / `onChange(event)`); the
|
|
42
|
+
* `ref` always reaches the `<input>`, so `react-hook-form`'s `register` works. Inside a `Field`
|
|
43
|
+
* the id, description and invalid/required/disabled state are wired automatically.
|
|
44
|
+
*
|
|
45
|
+
* ```tsx
|
|
46
|
+
* <Field label="Title" hint="Under 60 characters for search results.">
|
|
47
|
+
* <Input maxLength={60} showCount />
|
|
48
|
+
* </Field>
|
|
49
|
+
* <Input leading={<Search />} placeholder="Search contacts" clearable />
|
|
50
|
+
* <Input addonStart="https://" addonEnd=".vamos.ist" defaultValue="northpoint" />
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
|
|
54
|
+
export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
|
|
55
|
+
invalid?: boolean;
|
|
56
|
+
/** Character counter under the box (`120 / 400` with `maxLength`). Announced politely only near the limit. */
|
|
57
|
+
showCount?: boolean;
|
|
58
|
+
/** Built-in string overrides (`input` namespace: `count`, `remaining`). */
|
|
59
|
+
labels?: Partial<InputLabels>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Multi-line text. Grows with its content (`field-sizing: content`) and reads Field context.
|
|
63
|
+
*
|
|
64
|
+
* ```tsx
|
|
65
|
+
* <Field label="Anything we should know first?"><Textarea maxLength={400} showCount /></Field>
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
|
|
69
|
+
/** Form label (Radix Label: no text selection on double-click). */
|
|
70
|
+
export declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & React.RefAttributes<HTMLLabelElement>>;
|
|
71
|
+
declare const fieldLabels: {
|
|
72
|
+
optional: string;
|
|
73
|
+
required: string;
|
|
74
|
+
};
|
|
75
|
+
export type FieldLabels = typeof fieldLabels;
|
|
76
|
+
export interface FieldProps {
|
|
77
|
+
label?: React.ReactNode;
|
|
78
|
+
hint?: React.ReactNode;
|
|
79
|
+
/** Error text; an array (TanStack Form) shows the first entry. Replaces the hint while shown. */
|
|
80
|
+
error?: React.ReactNode | React.ReactNode[];
|
|
81
|
+
/** Control id the label points to. Default: the child's `id`, or a generated one. */
|
|
82
|
+
id?: string;
|
|
83
|
+
/** Form field name, passed to the control. */
|
|
84
|
+
name?: string;
|
|
85
|
+
/** Adds an asterisk (hidden from screen readers) and `required` on the control. */
|
|
86
|
+
required?: boolean;
|
|
87
|
+
/** Shows "(optional)" — for forms where most fields are required. */
|
|
88
|
+
optional?: boolean;
|
|
89
|
+
disabled?: boolean;
|
|
90
|
+
readOnly?: boolean;
|
|
91
|
+
/**
|
|
92
|
+
* `"vertical"` (default): label, control, hint.
|
|
93
|
+
* `"horizontal"`: control first, then label + hint (Checkbox, Switch, Radio).
|
|
94
|
+
*/
|
|
95
|
+
orientation?: "vertical" | "horizontal";
|
|
96
|
+
/** `"inline"`: fixed label column beside the control (settings pages). Default `"stack"`. */
|
|
97
|
+
layout?: "stack" | "inline";
|
|
98
|
+
/** Slot at the end of the label row ("Forgot password?", an info button). */
|
|
99
|
+
labelAction?: React.ReactNode;
|
|
100
|
+
className?: string;
|
|
101
|
+
/** Built-in string overrides (`field` namespace). */
|
|
102
|
+
labels?: Partial<FieldLabels>;
|
|
103
|
+
/** One control. Kit controls read the Field context; a plain `<input>`/`<select>`/`<textarea>` is wired by cloning. */
|
|
104
|
+
children: React.ReactNode;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Label + control + hint/error, with the accessibility wiring done for you:
|
|
108
|
+
* `<label for>`, `aria-describedby` (merged with the control's own), `aria-invalid`, `required`,
|
|
109
|
+
* `disabled`. Works with any kit control through context — Select, Combobox, Date picker —
|
|
110
|
+
* not only a single direct child.
|
|
111
|
+
*
|
|
112
|
+
* ```tsx
|
|
113
|
+
* <Field label="Work email" hint="We send the invoice here." required>
|
|
114
|
+
* <Input type="email" />
|
|
115
|
+
* </Field>
|
|
116
|
+
* <Field label="Status" error={errors.status}><Select … /></Field>
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export declare function Field({ label, hint, error, id, name, required, optional, disabled, readOnly, orientation, layout, labelAction, className, labels, children, }: FieldProps): React.JSX.Element;
|
|
120
|
+
export interface FieldsetProps extends React.FieldsetHTMLAttributes<HTMLFieldSetElement> {
|
|
121
|
+
/** Group title, rendered as `<legend>`. Or put a `<Legend>` first in children. */
|
|
122
|
+
legend?: React.ReactNode;
|
|
123
|
+
/** Helper text under the legend (linked with `aria-describedby`). */
|
|
124
|
+
hint?: React.ReactNode;
|
|
125
|
+
/** Error for the whole group (e.g. "Pick at least one channel"). */
|
|
126
|
+
error?: React.ReactNode;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Groups related controls with a real `<fieldset>` + `<legend>` — radio and checkbox groups,
|
|
130
|
+
* an address block. `disabled` disables every native control inside.
|
|
131
|
+
*
|
|
132
|
+
* ```tsx
|
|
133
|
+
* <Fieldset legend="Notifications" hint="Choose where we reach you.">
|
|
134
|
+
* <Field label="Email" orientation="horizontal"><Checkbox /></Field>
|
|
135
|
+
* </Fieldset>
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
export declare const Fieldset: React.ForwardRefExoticComponent<FieldsetProps & React.RefAttributes<HTMLFieldSetElement>>;
|
|
139
|
+
/** Title of a Fieldset. */
|
|
140
|
+
export declare const Legend: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLLegendElement> & React.RefAttributes<HTMLLegendElement>>;
|
|
141
|
+
export {};
|