@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,221 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { useLatest } from "./use-controllable-state.js";
|
|
3
|
+
const KEY_ALIASES = {
|
|
4
|
+
esc: "escape",
|
|
5
|
+
return: "enter",
|
|
6
|
+
space: " ",
|
|
7
|
+
spacebar: " ",
|
|
8
|
+
del: "delete",
|
|
9
|
+
up: "arrowup",
|
|
10
|
+
down: "arrowdown",
|
|
11
|
+
left: "arrowleft",
|
|
12
|
+
right: "arrowright",
|
|
13
|
+
plus: "+",
|
|
14
|
+
comma: ",",
|
|
15
|
+
period: ".",
|
|
16
|
+
slash: "/",
|
|
17
|
+
cmd: "meta",
|
|
18
|
+
command: "meta",
|
|
19
|
+
option: "alt",
|
|
20
|
+
opt: "alt",
|
|
21
|
+
control: "ctrl",
|
|
22
|
+
};
|
|
23
|
+
/** `true` on macOS, iOS and iPadOS. Always `false` on the server. */
|
|
24
|
+
export function isApplePlatform() {
|
|
25
|
+
if (typeof navigator === "undefined")
|
|
26
|
+
return false;
|
|
27
|
+
const nav = navigator;
|
|
28
|
+
const platform = nav.userAgentData?.platform || nav.platform || nav.userAgent || "";
|
|
29
|
+
return /mac|iphone|ipad|ipod/i.test(platform);
|
|
30
|
+
}
|
|
31
|
+
const noopSubscribe = () => () => { };
|
|
32
|
+
/**
|
|
33
|
+
* Platform check that is safe for SSR: renders as non-Apple ("Ctrl") on the server and during
|
|
34
|
+
* hydration, then switches to "⌘" on Apple devices without a hydration mismatch.
|
|
35
|
+
*/
|
|
36
|
+
export function useIsMac() {
|
|
37
|
+
return React.useSyncExternalStore(noopSubscribe, isApplePlatform, () => false);
|
|
38
|
+
}
|
|
39
|
+
/** Parses `"mod+shift+k"` into its parts. */
|
|
40
|
+
export function parseShortcut(shortcut) {
|
|
41
|
+
const parts = shortcut
|
|
42
|
+
.toLowerCase()
|
|
43
|
+
.split(/\+(?!$)/) // keep a trailing "+" as the key ("mod++")
|
|
44
|
+
.map((p) => p.trim())
|
|
45
|
+
.filter(Boolean);
|
|
46
|
+
const out = { key: "", mod: false, ctrl: false, meta: false, alt: false, shift: false };
|
|
47
|
+
for (const raw of parts) {
|
|
48
|
+
const p = KEY_ALIASES[raw] ?? raw;
|
|
49
|
+
if (p === "mod")
|
|
50
|
+
out.mod = true;
|
|
51
|
+
else if (p === "ctrl")
|
|
52
|
+
out.ctrl = true;
|
|
53
|
+
else if (p === "meta")
|
|
54
|
+
out.meta = true;
|
|
55
|
+
else if (p === "alt")
|
|
56
|
+
out.alt = true;
|
|
57
|
+
else if (p === "shift")
|
|
58
|
+
out.shift = true;
|
|
59
|
+
else
|
|
60
|
+
out.key = p;
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
const isLetterOrDigit = (k) => /^[a-z0-9]$/.test(k);
|
|
65
|
+
/** Does this keyboard event match the shortcut? */
|
|
66
|
+
export function matchesShortcut(event, shortcut, isMac = isApplePlatform()) {
|
|
67
|
+
const s = typeof shortcut === "string" ? parseShortcut(shortcut) : shortcut;
|
|
68
|
+
if (!s.key)
|
|
69
|
+
return false;
|
|
70
|
+
const wantMeta = s.meta || (s.mod && isMac);
|
|
71
|
+
const wantCtrl = s.ctrl || (s.mod && !isMac);
|
|
72
|
+
if (event.metaKey !== wantMeta || event.ctrlKey !== wantCtrl || event.altKey !== s.alt)
|
|
73
|
+
return false;
|
|
74
|
+
const key = (event.key ?? "").toLowerCase();
|
|
75
|
+
const code = event.code ?? "";
|
|
76
|
+
// Shift is implied for symbols ("?" is shift+/ on US layouts) — only enforce it for letters, digits and named keys.
|
|
77
|
+
const symbol = s.key.length === 1 && !isLetterOrDigit(s.key);
|
|
78
|
+
if (!symbol && event.shiftKey !== s.shift)
|
|
79
|
+
return false;
|
|
80
|
+
if (key === s.key)
|
|
81
|
+
return true;
|
|
82
|
+
// Layout-independent fallback (Option on macOS changes event.key: alt+k → "˚").
|
|
83
|
+
if (isLetterOrDigit(s.key))
|
|
84
|
+
return code === `Key${s.key.toUpperCase()}` || code === `Digit${s.key}`;
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
const MAC_SYMBOLS = {
|
|
88
|
+
mod: "⌘",
|
|
89
|
+
meta: "⌘",
|
|
90
|
+
ctrl: "⌃",
|
|
91
|
+
alt: "⌥",
|
|
92
|
+
shift: "⇧",
|
|
93
|
+
enter: "↩",
|
|
94
|
+
backspace: "⌫",
|
|
95
|
+
delete: "⌦",
|
|
96
|
+
escape: "Esc",
|
|
97
|
+
tab: "⇥",
|
|
98
|
+
arrowup: "↑",
|
|
99
|
+
arrowdown: "↓",
|
|
100
|
+
arrowleft: "←",
|
|
101
|
+
arrowright: "→",
|
|
102
|
+
" ": "Space",
|
|
103
|
+
pageup: "PgUp",
|
|
104
|
+
pagedown: "PgDn",
|
|
105
|
+
};
|
|
106
|
+
const PC_NAMES = {
|
|
107
|
+
mod: "Ctrl",
|
|
108
|
+
meta: "Win",
|
|
109
|
+
ctrl: "Ctrl",
|
|
110
|
+
alt: "Alt",
|
|
111
|
+
shift: "Shift",
|
|
112
|
+
enter: "Enter",
|
|
113
|
+
backspace: "Backspace",
|
|
114
|
+
delete: "Del",
|
|
115
|
+
escape: "Esc",
|
|
116
|
+
tab: "Tab",
|
|
117
|
+
arrowup: "↑",
|
|
118
|
+
arrowdown: "↓",
|
|
119
|
+
arrowleft: "←",
|
|
120
|
+
arrowright: "→",
|
|
121
|
+
" ": "Space",
|
|
122
|
+
pageup: "PgUp",
|
|
123
|
+
pagedown: "PgDn",
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Canonical key tokens of a shortcut in display order, e.g. `"mod+shift+k"` → `["mod", "shift", "k"]`
|
|
127
|
+
* (Apple order is ⌃ ⌥ ⇧ ⌘; elsewhere Ctrl, Alt, Shift). Kbd uses this to render one keycap per key.
|
|
128
|
+
*/
|
|
129
|
+
export function shortcutKeys(shortcut, isMac = false) {
|
|
130
|
+
const s = parseShortcut(shortcut);
|
|
131
|
+
const mods = [];
|
|
132
|
+
const push = (cond, k) => cond && mods.push(k);
|
|
133
|
+
if (isMac) {
|
|
134
|
+
push(s.ctrl, "ctrl");
|
|
135
|
+
push(s.alt, "alt");
|
|
136
|
+
push(s.shift, "shift");
|
|
137
|
+
push(s.meta || s.mod, "mod");
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
push(s.ctrl || s.mod, "ctrl");
|
|
141
|
+
push(s.meta, "meta");
|
|
142
|
+
push(s.alt, "alt");
|
|
143
|
+
push(s.shift, "shift");
|
|
144
|
+
}
|
|
145
|
+
return s.key ? [...mods, s.key] : mods;
|
|
146
|
+
}
|
|
147
|
+
/** Display text for one key token (`"mod"` → `"⌘"` / `"Ctrl"`, `"k"` → `"K"`). */
|
|
148
|
+
export function formatKey(key, isMac = false) {
|
|
149
|
+
const k = KEY_ALIASES[key.toLowerCase()] ?? key.toLowerCase();
|
|
150
|
+
const table = isMac ? MAC_SYMBOLS : PC_NAMES;
|
|
151
|
+
if (table[k])
|
|
152
|
+
return table[k];
|
|
153
|
+
if (/^f\d{1,2}$/.test(k))
|
|
154
|
+
return k.toUpperCase();
|
|
155
|
+
return k.length === 1 ? k.toUpperCase() : k.charAt(0).toUpperCase() + k.slice(1);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Human-readable shortcut: `"mod+k"` → `"⌘K"` on Apple platforms, `"Ctrl+K"` elsewhere.
|
|
159
|
+
* Pass `isMac` explicitly in render code (from `useIsMac()`) so SSR and client agree.
|
|
160
|
+
*/
|
|
161
|
+
export function formatShortcut(shortcut, options = {}) {
|
|
162
|
+
const isMac = options.isMac ?? isApplePlatform();
|
|
163
|
+
const keys = shortcutKeys(shortcut, isMac).map((k) => formatKey(k, isMac));
|
|
164
|
+
return keys.join(options.separator ?? (isMac ? "" : "+"));
|
|
165
|
+
}
|
|
166
|
+
function isTypingTarget(el) {
|
|
167
|
+
if (!el || !el.tagName)
|
|
168
|
+
return false;
|
|
169
|
+
const t = el;
|
|
170
|
+
const tag = t.tagName;
|
|
171
|
+
if (tag === "TEXTAREA" || tag === "SELECT")
|
|
172
|
+
return true;
|
|
173
|
+
if (tag === "INPUT") {
|
|
174
|
+
const type = t.type;
|
|
175
|
+
return !["checkbox", "radio", "button", "submit", "reset", "range", "color", "file"].includes(type);
|
|
176
|
+
}
|
|
177
|
+
return t.isContentEditable;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Registers global (or element-scoped) keyboard shortcuts.
|
|
181
|
+
*
|
|
182
|
+
* ```ts
|
|
183
|
+
* useHotkeys("mod+k", () => setOpen(true));
|
|
184
|
+
* useHotkeys(["j", "down"], next, { enabled: listFocused });
|
|
185
|
+
* ```
|
|
186
|
+
*
|
|
187
|
+
* IME composition is ignored. The kit itself only registers `mod+k`, `mod+\` and opt-in layout
|
|
188
|
+
* shortcuts; everything else belongs to the app (avoid clashing with browsers and rich-text editors).
|
|
189
|
+
*/
|
|
190
|
+
export function useHotkeys(shortcuts, handler, options = {}) {
|
|
191
|
+
const { enabled = true, preventDefault = true, enableOnFormFields, target, event = "keydown", ignoreRepeat = false } = options;
|
|
192
|
+
const handlerRef = useLatest(handler);
|
|
193
|
+
const list = Array.isArray(shortcuts) ? shortcuts : [shortcuts];
|
|
194
|
+
const key = list.join("|");
|
|
195
|
+
React.useEffect(() => {
|
|
196
|
+
if (!enabled || typeof document === "undefined")
|
|
197
|
+
return;
|
|
198
|
+
const parsed = key.split("|").map(parseShortcut);
|
|
199
|
+
const el = target && "current" in target ? target.current : target;
|
|
200
|
+
const node = el ?? document;
|
|
201
|
+
const mac = isApplePlatform();
|
|
202
|
+
const listener = (e) => {
|
|
203
|
+
const ke = e;
|
|
204
|
+
if (ke.isComposing || ke.key === "Process" || (ignoreRepeat && ke.repeat))
|
|
205
|
+
return;
|
|
206
|
+
for (const s of parsed) {
|
|
207
|
+
if (!matchesShortcut(ke, s, mac))
|
|
208
|
+
continue;
|
|
209
|
+
const withModifier = s.mod || s.ctrl || s.meta || s.alt;
|
|
210
|
+
if (isTypingTarget(ke.target) && !(enableOnFormFields ?? withModifier))
|
|
211
|
+
return;
|
|
212
|
+
if (preventDefault)
|
|
213
|
+
ke.preventDefault();
|
|
214
|
+
handlerRef.current(ke);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
node.addEventListener(event, listener);
|
|
219
|
+
return () => node.removeEventListener(event, listener);
|
|
220
|
+
}, [key, enabled, preventDefault, enableOnFormFields, target, event, ignoreRepeat, handlerRef]);
|
|
221
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface UseHoverIntentOptions {
|
|
3
|
+
/** Controlled open state. */
|
|
4
|
+
open?: boolean;
|
|
5
|
+
defaultOpen?: boolean;
|
|
6
|
+
onOpenChange?: (open: boolean) => void;
|
|
7
|
+
/** ms the pointer must rest on the trigger before opening. Default 150. */
|
|
8
|
+
openDelay?: number;
|
|
9
|
+
/** ms after leaving before closing. Default 200. */
|
|
10
|
+
closeDelay?: number;
|
|
11
|
+
/** Keep open while the pointer travels from the trigger towards the content ("safe triangle"). Default `true`. */
|
|
12
|
+
safeTriangle?: boolean;
|
|
13
|
+
/** Also open on keyboard focus. Default `true`. */
|
|
14
|
+
openOnFocus?: boolean;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Hover-to-open with delays and a safe triangle — for sidebar flyouts, hover cards and
|
|
19
|
+
* navigation menus. Touch pointers are ignored (tap the trigger instead).
|
|
20
|
+
*
|
|
21
|
+
* ```tsx
|
|
22
|
+
* const hover = useHoverIntent({ openDelay: 120 });
|
|
23
|
+
* <button {...hover.triggerProps}>Posts</button>
|
|
24
|
+
* {hover.open && <div ref={hover.contentRef} {...hover.contentProps}>…</div>}
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function useHoverIntent(options?: UseHoverIntentOptions): {
|
|
28
|
+
open: boolean;
|
|
29
|
+
setOpen: (next: boolean | ((prev: boolean) => boolean)) => void;
|
|
30
|
+
/** Cancel any pending open/close. */
|
|
31
|
+
cancel: () => void;
|
|
32
|
+
/** Attach to the floating element so the safe triangle can be computed. */
|
|
33
|
+
contentRef: (node: HTMLElement | null) => void;
|
|
34
|
+
triggerProps: {
|
|
35
|
+
onPointerEnter: (e: React.PointerEvent) => void;
|
|
36
|
+
onPointerLeave: (e: React.PointerEvent) => void;
|
|
37
|
+
onFocus: () => void;
|
|
38
|
+
onBlur: (e: React.FocusEvent) => void;
|
|
39
|
+
};
|
|
40
|
+
contentProps: {
|
|
41
|
+
onPointerEnter: () => void;
|
|
42
|
+
onPointerLeave: (e: React.PointerEvent) => void;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { useControllableState, useLatest } from "./use-controllable-state.js";
|
|
3
|
+
function insideTriangle(p, a, b, c) {
|
|
4
|
+
const s = (p1, p2, p3) => (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y);
|
|
5
|
+
const d1 = s(p, a, b);
|
|
6
|
+
const d2 = s(p, b, c);
|
|
7
|
+
const d3 = s(p, c, a);
|
|
8
|
+
const neg = d1 < 0 || d2 < 0 || d3 < 0;
|
|
9
|
+
const pos = d1 > 0 || d2 > 0 || d3 > 0;
|
|
10
|
+
return !(neg && pos);
|
|
11
|
+
}
|
|
12
|
+
/** The two corners of `rect` that face `from`, forming a triangle with it. */
|
|
13
|
+
function facingCorners(from, r) {
|
|
14
|
+
if (from.x <= r.left)
|
|
15
|
+
return [{ x: r.left, y: r.top }, { x: r.left, y: r.bottom }];
|
|
16
|
+
if (from.x >= r.right)
|
|
17
|
+
return [{ x: r.right, y: r.top }, { x: r.right, y: r.bottom }];
|
|
18
|
+
if (from.y <= r.top)
|
|
19
|
+
return [{ x: r.left, y: r.top }, { x: r.right, y: r.top }];
|
|
20
|
+
return [{ x: r.left, y: r.bottom }, { x: r.right, y: r.bottom }];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Hover-to-open with delays and a safe triangle — for sidebar flyouts, hover cards and
|
|
24
|
+
* navigation menus. Touch pointers are ignored (tap the trigger instead).
|
|
25
|
+
*
|
|
26
|
+
* ```tsx
|
|
27
|
+
* const hover = useHoverIntent({ openDelay: 120 });
|
|
28
|
+
* <button {...hover.triggerProps}>Posts</button>
|
|
29
|
+
* {hover.open && <div ref={hover.contentRef} {...hover.contentProps}>…</div>}
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export function useHoverIntent(options = {}) {
|
|
33
|
+
const { openDelay = 150, closeDelay = 200, safeTriangle = true, openOnFocus = true, disabled = false } = options;
|
|
34
|
+
const [open, setOpen] = useControllableState({ value: options.open, defaultValue: options.defaultOpen ?? false, onChange: options.onOpenChange, name: "useHoverIntent" });
|
|
35
|
+
const timer = React.useRef(undefined);
|
|
36
|
+
const contentEl = React.useRef(null);
|
|
37
|
+
const moveCleanup = React.useRef(null);
|
|
38
|
+
const setOpenRef = useLatest(setOpen);
|
|
39
|
+
const clear = React.useCallback(() => {
|
|
40
|
+
if (timer.current)
|
|
41
|
+
clearTimeout(timer.current);
|
|
42
|
+
timer.current = undefined;
|
|
43
|
+
}, []);
|
|
44
|
+
const stopTracking = React.useCallback(() => {
|
|
45
|
+
moveCleanup.current?.();
|
|
46
|
+
moveCleanup.current = null;
|
|
47
|
+
}, []);
|
|
48
|
+
const schedule = React.useCallback((next, delay) => {
|
|
49
|
+
clear();
|
|
50
|
+
if (delay <= 0)
|
|
51
|
+
setOpenRef.current(next);
|
|
52
|
+
else
|
|
53
|
+
timer.current = setTimeout(() => setOpenRef.current(next), delay);
|
|
54
|
+
}, [clear, setOpenRef]);
|
|
55
|
+
React.useEffect(() => () => (clear(), stopTracking()), [clear, stopTracking]);
|
|
56
|
+
const isMouse = (e) => e.pointerType === "mouse" || e.pointerType === "pen";
|
|
57
|
+
const onTriggerLeave = (e) => {
|
|
58
|
+
if (!isMouse(e) || disabled)
|
|
59
|
+
return;
|
|
60
|
+
const el = contentEl.current;
|
|
61
|
+
if (!safeTriangle || !el || !open)
|
|
62
|
+
return schedule(false, closeDelay);
|
|
63
|
+
const exit = { x: e.clientX, y: e.clientY };
|
|
64
|
+
const [b, c] = facingCorners(exit, el.getBoundingClientRect());
|
|
65
|
+
stopTracking();
|
|
66
|
+
const onMove = (ev) => {
|
|
67
|
+
const p = { x: ev.clientX, y: ev.clientY };
|
|
68
|
+
if (insideTriangle(p, exit, b, c))
|
|
69
|
+
schedule(false, closeDelay * 2);
|
|
70
|
+
else {
|
|
71
|
+
stopTracking();
|
|
72
|
+
schedule(false, closeDelay);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
document.addEventListener("pointermove", onMove);
|
|
76
|
+
moveCleanup.current = () => document.removeEventListener("pointermove", onMove);
|
|
77
|
+
schedule(false, closeDelay * 2);
|
|
78
|
+
};
|
|
79
|
+
return {
|
|
80
|
+
open,
|
|
81
|
+
setOpen,
|
|
82
|
+
/** Cancel any pending open/close. */
|
|
83
|
+
cancel: clear,
|
|
84
|
+
/** Attach to the floating element so the safe triangle can be computed. */
|
|
85
|
+
contentRef: React.useCallback((node) => {
|
|
86
|
+
contentEl.current = node;
|
|
87
|
+
}, []),
|
|
88
|
+
triggerProps: {
|
|
89
|
+
onPointerEnter: (e) => {
|
|
90
|
+
if (!isMouse(e) || disabled)
|
|
91
|
+
return;
|
|
92
|
+
stopTracking();
|
|
93
|
+
schedule(true, open ? 0 : openDelay);
|
|
94
|
+
},
|
|
95
|
+
onPointerLeave: onTriggerLeave,
|
|
96
|
+
onFocus: () => {
|
|
97
|
+
if (openOnFocus && !disabled)
|
|
98
|
+
schedule(true, 0);
|
|
99
|
+
},
|
|
100
|
+
onBlur: (e) => {
|
|
101
|
+
if (!openOnFocus)
|
|
102
|
+
return;
|
|
103
|
+
if (contentEl.current?.contains(e.relatedTarget))
|
|
104
|
+
return;
|
|
105
|
+
schedule(false, closeDelay);
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
contentProps: {
|
|
109
|
+
onPointerEnter: () => {
|
|
110
|
+
stopTracking();
|
|
111
|
+
clear();
|
|
112
|
+
},
|
|
113
|
+
onPointerLeave: (e) => {
|
|
114
|
+
if (isMouse(e))
|
|
115
|
+
schedule(false, closeDelay);
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subscribes to a CSS media query.
|
|
3
|
+
*
|
|
4
|
+
* Returns `undefined` during server rendering and hydration, so CSS decides the first paint
|
|
5
|
+
* and there is no hydration mismatch. Render a CSS-only fallback while it is `undefined`.
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* const isDesktop = useMediaQuery("(min-width: 1024px)"); // undefined | boolean
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export declare function useMediaQuery(query: string): boolean | undefined;
|
|
12
|
+
/** Tailwind's default breakpoints, for `useBreakpoint`. */
|
|
13
|
+
export declare const breakpoints: {
|
|
14
|
+
readonly sm: 640;
|
|
15
|
+
readonly md: 768;
|
|
16
|
+
readonly lg: 1024;
|
|
17
|
+
readonly xl: 1280;
|
|
18
|
+
readonly "2xl": 1536;
|
|
19
|
+
};
|
|
20
|
+
/** `true` when the viewport is at least the given Tailwind breakpoint; `undefined` during SSR. */
|
|
21
|
+
export declare function useBreakpoint(bp: keyof typeof breakpoints): boolean | undefined;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Subscribes to a CSS media query.
|
|
4
|
+
*
|
|
5
|
+
* Returns `undefined` during server rendering and hydration, so CSS decides the first paint
|
|
6
|
+
* and there is no hydration mismatch. Render a CSS-only fallback while it is `undefined`.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* const isDesktop = useMediaQuery("(min-width: 1024px)"); // undefined | boolean
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export function useMediaQuery(query) {
|
|
13
|
+
const subscribe = React.useCallback((notify) => {
|
|
14
|
+
if (typeof window === "undefined" || !window.matchMedia)
|
|
15
|
+
return () => { };
|
|
16
|
+
const mql = window.matchMedia(query);
|
|
17
|
+
mql.addEventListener?.("change", notify);
|
|
18
|
+
return () => mql.removeEventListener?.("change", notify);
|
|
19
|
+
}, [query]);
|
|
20
|
+
const getSnapshot = () => (typeof window !== "undefined" && window.matchMedia ? window.matchMedia(query).matches : undefined);
|
|
21
|
+
return React.useSyncExternalStore(subscribe, getSnapshot, () => undefined);
|
|
22
|
+
}
|
|
23
|
+
/** Tailwind's default breakpoints, for `useBreakpoint`. */
|
|
24
|
+
export const breakpoints = { sm: 640, md: 768, lg: 1024, xl: 1280, "2xl": 1536 };
|
|
25
|
+
/** `true` when the viewport is at least the given Tailwind breakpoint; `undefined` during SSR. */
|
|
26
|
+
export function useBreakpoint(bp) {
|
|
27
|
+
return useMediaQuery(`(min-width: ${breakpoints[bp]}px)`);
|
|
28
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `true` when the user asked the OS to reduce motion. `false` during SSR (animations are
|
|
3
|
+
* CSS-driven and already respect the media query; use this only for JS-driven motion such as
|
|
4
|
+
* carousels, chart transitions or `scrollIntoView({ behavior })`).
|
|
5
|
+
*/
|
|
6
|
+
export declare function useReducedMotion(): boolean;
|
|
7
|
+
/** `true` when the user asked the OS to reduce transparency (glass falls back to opaque). */
|
|
8
|
+
export declare function useReducedTransparency(): boolean;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useMediaQuery } from "./use-media-query.js";
|
|
2
|
+
/**
|
|
3
|
+
* `true` when the user asked the OS to reduce motion. `false` during SSR (animations are
|
|
4
|
+
* CSS-driven and already respect the media query; use this only for JS-driven motion such as
|
|
5
|
+
* carousels, chart transitions or `scrollIntoView({ behavior })`).
|
|
6
|
+
*/
|
|
7
|
+
export function useReducedMotion() {
|
|
8
|
+
return useMediaQuery("(prefers-reduced-motion: reduce)") ?? false;
|
|
9
|
+
}
|
|
10
|
+
/** `true` when the user asked the OS to reduce transparency (glass falls back to opaque). */
|
|
11
|
+
export function useReducedTransparency() {
|
|
12
|
+
return useMediaQuery("(prefers-reduced-transparency: reduce)") ?? false;
|
|
13
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* One node of a hierarchy: a category, a department, a folder, a page. Shared by Tree view,
|
|
4
|
+
* Tree select and (later) Sortable tree.
|
|
5
|
+
*/
|
|
6
|
+
export interface TreeNode {
|
|
7
|
+
id: string;
|
|
8
|
+
label: string;
|
|
9
|
+
/** Known children. Leave out and set `hasChildren` to load them lazily. */
|
|
10
|
+
children?: TreeNode[];
|
|
11
|
+
/** Children exist but are loaded on first expand (`loadChildren`). */
|
|
12
|
+
hasChildren?: boolean;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
icon?: React.ReactNode;
|
|
15
|
+
/** Trailing count or badge (Tree view). */
|
|
16
|
+
badge?: React.ReactNode;
|
|
17
|
+
/** Secondary text, searchable too ("12 products", a code). */
|
|
18
|
+
description?: string;
|
|
19
|
+
/** Extra search terms (SKU, slug, cost centre code). */
|
|
20
|
+
keywords?: string[];
|
|
21
|
+
}
|
|
22
|
+
/** What a fully-checked branch yields as the checked value. */
|
|
23
|
+
export type TreeCheckValueMode = "all" | "parent" | "leaf";
|
|
24
|
+
export type TreeCheckedState = boolean | "mixed";
|
|
25
|
+
/** One visible row of the flattened tree. */
|
|
26
|
+
export interface TreeItemState {
|
|
27
|
+
node: TreeNode;
|
|
28
|
+
id: string;
|
|
29
|
+
/** 1-based depth (`aria-level`). */
|
|
30
|
+
level: number;
|
|
31
|
+
parentId: string | null;
|
|
32
|
+
/** 1-based position among its siblings (`aria-posinset`). */
|
|
33
|
+
posinset: number;
|
|
34
|
+
/** Number of siblings (`aria-setsize`). */
|
|
35
|
+
setsize: number;
|
|
36
|
+
/** Has (or may lazily have) children. */
|
|
37
|
+
hasChildren: boolean;
|
|
38
|
+
expanded: boolean;
|
|
39
|
+
loading: boolean;
|
|
40
|
+
/** Load error message (lazy children). */
|
|
41
|
+
error: string | null;
|
|
42
|
+
checked: TreeCheckedState;
|
|
43
|
+
selected: boolean;
|
|
44
|
+
disabled: boolean;
|
|
45
|
+
/** Label matches the current filter (rows kept only as ancestors are `false`). */
|
|
46
|
+
match: boolean;
|
|
47
|
+
/** Is the last of its siblings (indent guides stop here). */
|
|
48
|
+
last: boolean;
|
|
49
|
+
/** For each ancestor level (1…level-1): does that ancestor have a following sibling? Draws guides. */
|
|
50
|
+
guides: boolean[];
|
|
51
|
+
}
|
|
52
|
+
export interface UseTreeOptions {
|
|
53
|
+
nodes: TreeNode[];
|
|
54
|
+
/** Expanded ids (controlled). */
|
|
55
|
+
expanded?: string[];
|
|
56
|
+
defaultExpanded?: string[];
|
|
57
|
+
onExpandedChange?: (ids: string[]) => void;
|
|
58
|
+
/** Loads the children of a node with `hasChildren` on first expand. Abortable. */
|
|
59
|
+
loadChildren?: (node: TreeNode, signal: AbortSignal) => Promise<TreeNode[]>;
|
|
60
|
+
/** Keeps matches and their ancestors, auto-expanding the ancestors. Locale-folded (İ/ı, accents). */
|
|
61
|
+
filter?: string;
|
|
62
|
+
locale?: string;
|
|
63
|
+
/** `"single"` / `"multiple"` selection (`aria-selected`). Default `"none"`. */
|
|
64
|
+
selectionMode?: "none" | "single" | "multiple";
|
|
65
|
+
selected?: string[];
|
|
66
|
+
defaultSelected?: string[];
|
|
67
|
+
onSelectedChange?: (ids: string[]) => void;
|
|
68
|
+
/** Can this node be selected? (e.g. leaves only). Default: any enabled node. */
|
|
69
|
+
isSelectable?: (node: TreeNode, hasChildren: boolean) => boolean;
|
|
70
|
+
/** Turns on checkboxes (`aria-checked`). */
|
|
71
|
+
checkable?: boolean;
|
|
72
|
+
checked?: string[];
|
|
73
|
+
defaultChecked?: string[];
|
|
74
|
+
onCheckedChange?: (ids: string[]) => void;
|
|
75
|
+
/** Checking a parent checks its descendants; a parent is checked when all children are (tri-state). Default `true`. */
|
|
76
|
+
cascade?: boolean;
|
|
77
|
+
/** With `cascade`: which ids the checked value lists. Default `"all"`. */
|
|
78
|
+
checkValueMode?: TreeCheckValueMode;
|
|
79
|
+
/** Enter / double click on a row. */
|
|
80
|
+
onAction?: (node: TreeNode) => void;
|
|
81
|
+
/** Swaps ←/→. */
|
|
82
|
+
dir?: "ltr" | "rtl";
|
|
83
|
+
/** Called before focusing a row that may not be rendered yet (virtual lists scroll it into view). */
|
|
84
|
+
scrollToIndex?: (index: number) => void;
|
|
85
|
+
}
|
|
86
|
+
export interface UseTreeReturn {
|
|
87
|
+
/** Visible rows in order — render them flat, inside one `role="tree"` element. */
|
|
88
|
+
items: TreeItemState[];
|
|
89
|
+
/** Every known node by id (including loaded children). */
|
|
90
|
+
getNode: (id: string) => TreeNode | undefined;
|
|
91
|
+
getParentId: (id: string) => string | null;
|
|
92
|
+
/** Ancestors + the node, root first. */
|
|
93
|
+
getPath: (id: string) => TreeNode[];
|
|
94
|
+
getChildren: (node: TreeNode) => TreeNode[] | undefined;
|
|
95
|
+
isExpanded: (id: string) => boolean;
|
|
96
|
+
toggleExpanded: (id: string, open?: boolean) => void;
|
|
97
|
+
expandAll: () => void;
|
|
98
|
+
collapseAll: () => void;
|
|
99
|
+
expandedIds: string[];
|
|
100
|
+
selectedIds: string[];
|
|
101
|
+
select: (id: string) => void;
|
|
102
|
+
checkedIds: string[];
|
|
103
|
+
getChecked: (id: string) => TreeCheckedState;
|
|
104
|
+
toggleChecked: (id: string, next?: boolean) => void;
|
|
105
|
+
/** Retry a failed lazy load. */
|
|
106
|
+
reload: (id: string) => void;
|
|
107
|
+
focusedId: string | null;
|
|
108
|
+
setFocusedId: (id: string | null) => void;
|
|
109
|
+
/** Focus a row (scrolling it into view first in virtual lists). */
|
|
110
|
+
focusItem: (id: string) => void;
|
|
111
|
+
/** Spread on the `role="tree"` element (ref, role, keyboard). */
|
|
112
|
+
getTreeProps: () => {
|
|
113
|
+
ref: React.RefCallback<HTMLElement>;
|
|
114
|
+
role: "tree";
|
|
115
|
+
"aria-multiselectable"?: boolean;
|
|
116
|
+
onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;
|
|
117
|
+
};
|
|
118
|
+
/** Spread on each row. */
|
|
119
|
+
getItemProps: (item: TreeItemState) => {
|
|
120
|
+
role: "treeitem";
|
|
121
|
+
id?: string;
|
|
122
|
+
tabIndex: number;
|
|
123
|
+
"aria-level": number;
|
|
124
|
+
"aria-posinset": number;
|
|
125
|
+
"aria-setsize": number;
|
|
126
|
+
"aria-expanded"?: boolean;
|
|
127
|
+
"aria-selected"?: boolean;
|
|
128
|
+
"aria-checked"?: boolean | "mixed";
|
|
129
|
+
"aria-disabled"?: boolean;
|
|
130
|
+
"aria-busy"?: boolean;
|
|
131
|
+
"data-tree-id": string;
|
|
132
|
+
"data-state"?: "open" | "closed";
|
|
133
|
+
onFocus: (e: React.FocusEvent<HTMLElement>) => void;
|
|
134
|
+
};
|
|
135
|
+
/** Number of filter matches (for "N results" announcements). */
|
|
136
|
+
matchCount: number;
|
|
137
|
+
/** Is a filter active? */
|
|
138
|
+
filtering: boolean;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The shared tree model behind Tree view and Tree select: flattened visible rows, expand state,
|
|
142
|
+
* single/multiple selection, tri-state checks with cascade, lazy children (with abort and retry),
|
|
143
|
+
* locale-folded filtering that keeps ancestors, and the full WAI-ARIA treeview keyboard
|
|
144
|
+
* (↑ ↓ → ← Home End `*`, type-ahead, Space, Enter) with a roving tabindex.
|
|
145
|
+
*
|
|
146
|
+
* ```tsx
|
|
147
|
+
* const tree = useTree({ nodes, defaultExpanded: ["clothing"], checkable: true });
|
|
148
|
+
* <div {...tree.getTreeProps()} aria-label="Categories">
|
|
149
|
+
* {tree.items.map((item) => <div key={item.id} {...tree.getItemProps(item)}>{item.node.label}</div>)}
|
|
150
|
+
* </div>
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
export declare function useTree(options: UseTreeOptions): UseTreeReturn;
|