sheer-ui 0.0.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 +42 -0
- package/package.json +369 -0
- package/src/lib/VENDORED.md +109 -0
- package/src/lib/assets/ui.css +733 -0
- package/src/lib/blocks/Appearance.svelte +104 -0
- package/src/lib/blocks/BoundaryFailed.svelte +33 -0
- package/src/lib/blocks/ErrorPage.svelte +65 -0
- package/src/lib/blocks/Footer.svelte +71 -0
- package/src/lib/blocks/Header.svelte +67 -0
- package/src/lib/blocks/Heading.svelte +86 -0
- package/src/lib/blocks/MobileNav.svelte +169 -0
- package/src/lib/blocks/PhoneInput.svelte +68 -0
- package/src/lib/blocks/Section.svelte +34 -0
- package/src/lib/blocks/alert-modal/AlertModal.svelte +83 -0
- package/src/lib/blocks/alert-modal/alert-modal.svelte.ts +81 -0
- package/src/lib/blocks/alert-modal/index.ts +2 -0
- package/src/lib/blocks/calendar.svelte +155 -0
- package/src/lib/blocks/copy-button/copy-button.svelte +43 -0
- package/src/lib/blocks/copy-button/copy.svelte.ts +52 -0
- package/src/lib/blocks/copy-button/index.ts +2 -0
- package/src/lib/blocks/date-picker/date-picker-with-presets.svelte +109 -0
- package/src/lib/blocks/date-picker/date-picker.svelte +91 -0
- package/src/lib/blocks/date-picker/index.ts +13 -0
- package/src/lib/blocks/date-picker/range-date-picker.svelte +128 -0
- package/src/lib/blocks/index.ts +12 -0
- package/src/lib/blocks/mockups/Browser.svelte +22 -0
- package/src/lib/blocks/mockups/Phone.svelte +44 -0
- package/src/lib/blocks/mockups/index.ts +2 -0
- package/src/lib/blocks/tab-nav/index.ts +1 -0
- package/src/lib/blocks/tab-nav/tab-nav.svelte +46 -0
- package/src/lib/blocks/time-picker/index.ts +16 -0
- package/src/lib/blocks/time-picker/time-input.svelte +118 -0
- package/src/lib/blocks/time-picker/time-picker.svelte +93 -0
- package/src/lib/blocks/time-picker/time-range-input.svelte +34 -0
- package/src/lib/blocks/time-picker/time-range-picker.svelte +180 -0
- package/src/lib/blocks/time-picker/time-slots.ts +61 -0
- package/src/lib/blocks/user-avatar/UserAvatar.svelte +36 -0
- package/src/lib/blocks/user-avatar/index.ts +1 -0
- package/src/lib/blocks/verification-code-field/VerificationCodeField.svelte +57 -0
- package/src/lib/blocks/verification-code-field/index.ts +1 -0
- package/src/lib/components/accordion/accordion.svelte.ts +43 -0
- package/src/lib/components/accordion/components/accordion-content.svelte +17 -0
- package/src/lib/components/accordion/components/accordion-item.svelte +58 -0
- package/src/lib/components/accordion/components/accordion-trigger.svelte +38 -0
- package/src/lib/components/accordion/components/accordion.svelte +24 -0
- package/src/lib/components/accordion/index.ts +11 -0
- package/src/lib/components/accordion/types.ts +19 -0
- package/src/lib/components/alert/alert-action.svelte +11 -0
- package/src/lib/components/alert/alert-description.svelte +18 -0
- package/src/lib/components/alert/alert-title.svelte +18 -0
- package/src/lib/components/alert/alert.svelte +37 -0
- package/src/lib/components/alert/index.ts +17 -0
- package/src/lib/components/avatar/avatar.svelte.ts +154 -0
- package/src/lib/components/avatar/components/avatar-fallback.svelte +38 -0
- package/src/lib/components/avatar/components/avatar-image.svelte +47 -0
- package/src/lib/components/avatar/components/avatar.svelte +57 -0
- package/src/lib/components/avatar/index.ts +9 -0
- package/src/lib/components/avatar/types.ts +46 -0
- package/src/lib/components/badge/badge.svelte +49 -0
- package/src/lib/components/badge/index.ts +1 -0
- package/src/lib/components/breadcrumb/breadcrumb-ellipsis.svelte +23 -0
- package/src/lib/components/breadcrumb/breadcrumb-item.svelte +11 -0
- package/src/lib/components/breadcrumb/breadcrumb-link.svelte +32 -0
- package/src/lib/components/breadcrumb/breadcrumb-list.svelte +15 -0
- package/src/lib/components/breadcrumb/breadcrumb-page.svelte +18 -0
- package/src/lib/components/breadcrumb/breadcrumb-separator.svelte +22 -0
- package/src/lib/components/breadcrumb/breadcrumb.svelte +10 -0
- package/src/lib/components/breadcrumb/index.ts +25 -0
- package/src/lib/components/button/button.svelte +55 -0
- package/src/lib/components/button/index.ts +12 -0
- package/src/lib/components/button/variants.ts +51 -0
- package/src/lib/components/calendar/calendar.svelte.ts +1081 -0
- package/src/lib/components/calendar/components/calendar-cell.svelte +34 -0
- package/src/lib/components/calendar/components/calendar-day.svelte +36 -0
- package/src/lib/components/calendar/components/calendar-grid-body.svelte +29 -0
- package/src/lib/components/calendar/components/calendar-grid-head.svelte +29 -0
- package/src/lib/components/calendar/components/calendar-grid-row.svelte +29 -0
- package/src/lib/components/calendar/components/calendar-grid.svelte +29 -0
- package/src/lib/components/calendar/components/calendar-head-cell.svelte +29 -0
- package/src/lib/components/calendar/components/calendar-header.svelte +29 -0
- package/src/lib/components/calendar/components/calendar-heading.svelte +33 -0
- package/src/lib/components/calendar/components/calendar-month-select.svelte +50 -0
- package/src/lib/components/calendar/components/calendar-next-button.svelte +37 -0
- package/src/lib/components/calendar/components/calendar-prev-button.svelte +37 -0
- package/src/lib/components/calendar/components/calendar-year-select.svelte +50 -0
- package/src/lib/components/calendar/components/calendar.svelte +123 -0
- package/src/lib/components/calendar/exports.ts +31 -0
- package/src/lib/components/calendar/index.ts +2 -0
- package/src/lib/components/calendar/types.ts +417 -0
- package/src/lib/components/card/card-action.svelte +15 -0
- package/src/lib/components/card/card-content.svelte +11 -0
- package/src/lib/components/card/card-description.svelte +11 -0
- package/src/lib/components/card/card-footer.svelte +11 -0
- package/src/lib/components/card/card-header.svelte +18 -0
- package/src/lib/components/card/card-title.svelte +11 -0
- package/src/lib/components/card/card.svelte +15 -0
- package/src/lib/components/card/index.ts +25 -0
- package/src/lib/components/carousel/carousel-arrow.svelte +42 -0
- package/src/lib/components/carousel/carousel-content.svelte +25 -0
- package/src/lib/components/carousel/carousel-dots.svelte +21 -0
- package/src/lib/components/carousel/carousel-item.svelte +21 -0
- package/src/lib/components/carousel/carousel-next.svelte +9 -0
- package/src/lib/components/carousel/carousel-previous.svelte +9 -0
- package/src/lib/components/carousel/carousel.svelte +245 -0
- package/src/lib/components/carousel/carouselState.svelte.ts +30 -0
- package/src/lib/components/carousel/index.ts +24 -0
- package/src/lib/components/chart/chart-container.svelte +52 -0
- package/src/lib/components/chart/chart-style.svelte +29 -0
- package/src/lib/components/chart/chart-tooltip.svelte +163 -0
- package/src/lib/components/chart/chart-utils.ts +50 -0
- package/src/lib/components/chart/index.ts +6 -0
- package/src/lib/components/checkbox/checkbox.svelte.ts +199 -0
- package/src/lib/components/checkbox/components/checkbox-group-label.svelte +29 -0
- package/src/lib/components/checkbox/components/checkbox-group.svelte +48 -0
- package/src/lib/components/checkbox/components/checkbox.svelte +85 -0
- package/src/lib/components/checkbox/index.ts +9 -0
- package/src/lib/components/checkbox/types.ts +131 -0
- package/src/lib/components/checkbox-native/checkbox.svelte +96 -0
- package/src/lib/components/checkbox-native/index.ts +8 -0
- package/src/lib/components/collapsible/components/collapsible-content.svelte +16 -0
- package/src/lib/components/collapsible/components/collapsible-trigger.svelte +14 -0
- package/src/lib/components/collapsible/components/collapsible.svelte +68 -0
- package/src/lib/components/collapsible/index.ts +9 -0
- package/src/lib/components/collapsible/types.ts +25 -0
- package/src/lib/components/combobox/components/combobox-arrow.svelte +8 -0
- package/src/lib/components/combobox/components/combobox-input.svelte +46 -0
- package/src/lib/components/combobox/components/combobox-trigger.svelte +44 -0
- package/src/lib/components/combobox/components/combobox.svelte +83 -0
- package/src/lib/components/combobox/index.ts +30 -0
- package/src/lib/components/combobox/select/components/select-content-static.svelte +56 -0
- package/src/lib/components/combobox/select/components/select-content.svelte +95 -0
- package/src/lib/components/combobox/select/components/select-group-heading.svelte +51 -0
- package/src/lib/components/combobox/select/components/select-group.svelte +51 -0
- package/src/lib/components/combobox/select/components/select-hidden-input.svelte +16 -0
- package/src/lib/components/combobox/select/components/select-item.svelte +86 -0
- package/src/lib/components/combobox/select/components/select-scroll-down-button.svelte +41 -0
- package/src/lib/components/combobox/select/components/select-scroll-up-button.svelte +34 -0
- package/src/lib/components/combobox/select/components/select-trigger.svelte +32 -0
- package/src/lib/components/combobox/select/components/select-value.svelte +40 -0
- package/src/lib/components/combobox/select/components/select-viewport.svelte +29 -0
- package/src/lib/components/combobox/select/components/select.svelte +92 -0
- package/src/lib/components/combobox/select/select.svelte.ts +1596 -0
- package/src/lib/components/combobox/select/types.ts +291 -0
- package/src/lib/components/combobox/types.ts +77 -0
- package/src/lib/components/command/command-dialog.svelte +42 -0
- package/src/lib/components/command/command.svelte.ts +1506 -0
- package/src/lib/components/command/components/_command-label.svelte +31 -0
- package/src/lib/components/command/components/command-empty.svelte +34 -0
- package/src/lib/components/command/components/command-group-heading.svelte +29 -0
- package/src/lib/components/command/components/command-group-items.svelte +31 -0
- package/src/lib/components/command/components/command-group.svelte +76 -0
- package/src/lib/components/command/components/command-input.svelte +55 -0
- package/src/lib/components/command/components/command-item.svelte +61 -0
- package/src/lib/components/command/components/command-link-item.svelte +61 -0
- package/src/lib/components/command/components/command-list.svelte +41 -0
- package/src/lib/components/command/components/command-loading.svelte +30 -0
- package/src/lib/components/command/components/command-separator.svelte +34 -0
- package/src/lib/components/command/components/command-viewport.svelte +29 -0
- package/src/lib/components/command/components/command.svelte +143 -0
- package/src/lib/components/command/compute-command-score.ts +207 -0
- package/src/lib/components/command/index.ts +29 -0
- package/src/lib/components/command/types.ts +222 -0
- package/src/lib/components/command/utils.ts +30 -0
- package/src/lib/components/context-menu/components/context-menu-content-static.svelte +22 -0
- package/src/lib/components/context-menu/components/context-menu-content.svelte +22 -0
- package/src/lib/components/context-menu/components/context-menu-trigger.svelte +46 -0
- package/src/lib/components/context-menu/components/context-menu.svelte +8 -0
- package/src/lib/components/context-menu/index.ts +39 -0
- package/src/lib/components/context-menu/types.ts +56 -0
- package/src/lib/components/data-table/column-helpers.ts +97 -0
- package/src/lib/components/data-table/data-table-checkbox.svelte +25 -0
- package/src/lib/components/data-table/data-table-sort-button.svelte +16 -0
- package/src/lib/components/data-table/flex-render.svelte +42 -0
- package/src/lib/components/data-table/index.ts +29 -0
- package/src/lib/components/data-table/render-helpers.ts +105 -0
- package/src/lib/components/data-table/table-cell.svelte +9 -0
- package/src/lib/components/data-table/table-column-header.svelte +51 -0
- package/src/lib/components/data-table/table-faceted-filter.svelte +109 -0
- package/src/lib/components/data-table/table-pagination.svelte +54 -0
- package/src/lib/components/data-table/table-priority-cell.svelte +22 -0
- package/src/lib/components/data-table/table-row-actions.svelte +29 -0
- package/src/lib/components/data-table/table-status-cell.svelte +34 -0
- package/src/lib/components/data-table/table-title-cell.svelte +24 -0
- package/src/lib/components/data-table/table-toolbar.svelte +55 -0
- package/src/lib/components/data-table/table-view-options.svelte +25 -0
- package/src/lib/components/date-field/components/date-field-hidden-input.svelte +9 -0
- package/src/lib/components/date-field/components/date-field-input.svelte +33 -0
- package/src/lib/components/date-field/components/date-field-label.svelte +29 -0
- package/src/lib/components/date-field/components/date-field-segment.svelte +29 -0
- package/src/lib/components/date-field/components/date-field.svelte +106 -0
- package/src/lib/components/date-field/date-field.svelte.ts +1474 -0
- package/src/lib/components/date-field/index.ts +11 -0
- package/src/lib/components/date-field/types.ts +165 -0
- package/src/lib/components/date-range-field/components/date-range-field-input.svelte +36 -0
- package/src/lib/components/date-range-field/components/date-range-field-label.svelte +29 -0
- package/src/lib/components/date-range-field/components/date-range-field.svelte +106 -0
- package/src/lib/components/date-range-field/date-range-field.svelte.ts +212 -0
- package/src/lib/components/date-range-field/index.ts +11 -0
- package/src/lib/components/date-range-field/types.ts +171 -0
- package/src/lib/components/dialog/components/dialog-close.svelte +31 -0
- package/src/lib/components/dialog/components/dialog-content-headless.svelte +104 -0
- package/src/lib/components/dialog/components/dialog-content.svelte +69 -0
- package/src/lib/components/dialog/components/dialog-description.svelte +29 -0
- package/src/lib/components/dialog/components/dialog-overlay.svelte +31 -0
- package/src/lib/components/dialog/components/dialog-title.svelte +30 -0
- package/src/lib/components/dialog/components/dialog-trigger.svelte +30 -0
- package/src/lib/components/dialog/components/dialog.svelte +21 -0
- package/src/lib/components/dialog/components/modal-surface.svelte +131 -0
- package/src/lib/components/dialog/dialog.svelte.ts +371 -0
- package/src/lib/components/dialog/index.ts +19 -0
- package/src/lib/components/dialog/types.ts +105 -0
- package/src/lib/components/drawer/drawer-close.svelte +7 -0
- package/src/lib/components/drawer/drawer-content.svelte +91 -0
- package/src/lib/components/drawer/drawer-description.svelte +8 -0
- package/src/lib/components/drawer/drawer-footer.svelte +11 -0
- package/src/lib/components/drawer/drawer-header.svelte +11 -0
- package/src/lib/components/drawer/drawer-nested.svelte +44 -0
- package/src/lib/components/drawer/drawer-overlay.svelte +60 -0
- package/src/lib/components/drawer/drawer-portal.svelte +10 -0
- package/src/lib/components/drawer/drawer-title.svelte +8 -0
- package/src/lib/components/drawer/drawer-trigger.svelte +7 -0
- package/src/lib/components/drawer/drawer.svelte +290 -0
- package/src/lib/components/drawer/index.ts +37 -0
- package/src/lib/components/dropdown-menu/components/dropdown-menu-content-static.svelte +22 -0
- package/src/lib/components/dropdown-menu/components/dropdown-menu-content.svelte +22 -0
- package/src/lib/components/dropdown-menu/index.ts +39 -0
- package/src/lib/components/dropdown-menu/types.ts +41 -0
- package/src/lib/components/empty/empty-content.svelte +15 -0
- package/src/lib/components/empty/empty-description.svelte +15 -0
- package/src/lib/components/empty/empty-header.svelte +15 -0
- package/src/lib/components/empty/empty-media.svelte +21 -0
- package/src/lib/components/empty/empty-title.svelte +11 -0
- package/src/lib/components/empty/empty.svelte +18 -0
- package/src/lib/components/empty/index.ts +22 -0
- package/src/lib/components/empty/variants.ts +16 -0
- package/src/lib/components/field/field-content.svelte +14 -0
- package/src/lib/components/field/field-description.svelte +19 -0
- package/src/lib/components/field/field-error.svelte +47 -0
- package/src/lib/components/field/field-group.svelte +17 -0
- package/src/lib/components/field/field-label.svelte +18 -0
- package/src/lib/components/field/field-legend.svelte +23 -0
- package/src/lib/components/field/field-separator.svelte +32 -0
- package/src/lib/components/field/field-set.svelte +14 -0
- package/src/lib/components/field/field-title.svelte +14 -0
- package/src/lib/components/field/field.svelte +36 -0
- package/src/lib/components/field/index.ts +32 -0
- package/src/lib/components/field/variants.ts +19 -0
- package/src/lib/components/input/file-input.svelte +26 -0
- package/src/lib/components/input/index.ts +12 -0
- package/src/lib/components/input/input.svelte +24 -0
- package/src/lib/components/input/variants.ts +28 -0
- package/src/lib/components/item/index.ts +34 -0
- package/src/lib/components/item/item-actions.svelte +11 -0
- package/src/lib/components/item/item-content.svelte +15 -0
- package/src/lib/components/item/item-description.svelte +18 -0
- package/src/lib/components/item/item-footer.svelte +11 -0
- package/src/lib/components/item/item-group.svelte +16 -0
- package/src/lib/components/item/item-header.svelte +11 -0
- package/src/lib/components/item/item-media.svelte +37 -0
- package/src/lib/components/item/item-separator.svelte +9 -0
- package/src/lib/components/item/item-title.svelte +15 -0
- package/src/lib/components/item/item.svelte +61 -0
- package/src/lib/components/kbd/index.ts +10 -0
- package/src/lib/components/kbd/kbd-group.svelte +11 -0
- package/src/lib/components/kbd/kbd.svelte +18 -0
- package/src/lib/components/label/exports.ts +2 -0
- package/src/lib/components/label/index.ts +2 -0
- package/src/lib/components/label/label.svelte +39 -0
- package/src/lib/components/label/label.svelte.ts +39 -0
- package/src/lib/components/label/types.ts +7 -0
- package/src/lib/components/link-preview/components/link-preview-content.svelte +60 -0
- package/src/lib/components/link-preview/components/link-preview-trigger.svelte +29 -0
- package/src/lib/components/link-preview/components/link-preview.svelte +34 -0
- package/src/lib/components/link-preview/exports.ts +11 -0
- package/src/lib/components/link-preview/index.ts +2 -0
- package/src/lib/components/link-preview/link-preview.svelte.ts +270 -0
- package/src/lib/components/link-preview/types.ts +102 -0
- package/src/lib/components/menu/components/menu-arrow.svelte +14 -0
- package/src/lib/components/menu/components/menu-checkbox-group.svelte +42 -0
- package/src/lib/components/menu/components/menu-checkbox-item.svelte +85 -0
- package/src/lib/components/menu/components/menu-content.svelte +98 -0
- package/src/lib/components/menu/components/menu-group-heading.svelte +47 -0
- package/src/lib/components/menu/components/menu-group.svelte +36 -0
- package/src/lib/components/menu/components/menu-item.svelte +58 -0
- package/src/lib/components/menu/components/menu-radio-group.svelte +44 -0
- package/src/lib/components/menu/components/menu-radio-item.svelte +65 -0
- package/src/lib/components/menu/components/menu-separator.svelte +38 -0
- package/src/lib/components/menu/components/menu-sub-content-static.svelte +8 -0
- package/src/lib/components/menu/components/menu-sub-content.svelte +133 -0
- package/src/lib/components/menu/components/menu-sub-trigger.svelte +60 -0
- package/src/lib/components/menu/components/menu-sub.svelte +23 -0
- package/src/lib/components/menu/components/menu-trigger.svelte +50 -0
- package/src/lib/components/menu/components/menu.svelte +58 -0
- package/src/lib/components/menu/exports.ts +38 -0
- package/src/lib/components/menu/menu.svelte.ts +1599 -0
- package/src/lib/components/menu/types.ts +285 -0
- package/src/lib/components/menu/utils.ts +68 -0
- package/src/lib/components/menubar/components/menubar-content-static.svelte +50 -0
- package/src/lib/components/menubar/components/menubar-content.svelte +54 -0
- package/src/lib/components/menubar/components/menubar-menu.svelte +34 -0
- package/src/lib/components/menubar/components/menubar-trigger.svelte +50 -0
- package/src/lib/components/menubar/components/menubar.svelte +57 -0
- package/src/lib/components/menubar/exports.ts +44 -0
- package/src/lib/components/menubar/index.ts +2 -0
- package/src/lib/components/menubar/menubar.svelte.ts +394 -0
- package/src/lib/components/menubar/types.ts +97 -0
- package/src/lib/components/meter/components/meter.svelte +41 -0
- package/src/lib/components/meter/exports.ts +2 -0
- package/src/lib/components/meter/index.ts +2 -0
- package/src/lib/components/meter/meter.svelte.ts +47 -0
- package/src/lib/components/meter/types.ts +28 -0
- package/src/lib/components/navigation-menu/components/navigation-menu-content-impl.svelte +85 -0
- package/src/lib/components/navigation-menu/components/navigation-menu-content.svelte +58 -0
- package/src/lib/components/navigation-menu/components/navigation-menu-indicator-impl.svelte +29 -0
- package/src/lib/components/navigation-menu/components/navigation-menu-indicator.svelte +56 -0
- package/src/lib/components/navigation-menu/components/navigation-menu-item.svelte +56 -0
- package/src/lib/components/navigation-menu/components/navigation-menu-link.svelte +64 -0
- package/src/lib/components/navigation-menu/components/navigation-menu-list.svelte +59 -0
- package/src/lib/components/navigation-menu/components/navigation-menu-sub.svelte +46 -0
- package/src/lib/components/navigation-menu/components/navigation-menu-trigger.svelte +80 -0
- package/src/lib/components/navigation-menu/components/navigation-menu-viewport.svelte +63 -0
- package/src/lib/components/navigation-menu/components/navigation-menu.svelte +80 -0
- package/src/lib/components/navigation-menu/index.ts +28 -0
- package/src/lib/components/navigation-menu/navigation-menu.svelte.ts +1092 -0
- package/src/lib/components/navigation-menu/types.ts +189 -0
- package/src/lib/components/pagination/components/pagination-next-button.svelte +60 -0
- package/src/lib/components/pagination/components/pagination-page.svelte +65 -0
- package/src/lib/components/pagination/components/pagination-prev-button.svelte +60 -0
- package/src/lib/components/pagination/components/pagination.svelte +65 -0
- package/src/lib/components/pagination/index.ts +11 -0
- package/src/lib/components/pagination/pagination.svelte.ts +275 -0
- package/src/lib/components/pagination/types.ts +100 -0
- package/src/lib/components/pin-input/components/pin-input-cell.svelte +49 -0
- package/src/lib/components/pin-input/components/pin-input.svelte +76 -0
- package/src/lib/components/pin-input/exports.ts +4 -0
- package/src/lib/components/pin-input/index.ts +2 -0
- package/src/lib/components/pin-input/pin-input.svelte.ts +541 -0
- package/src/lib/components/pin-input/types.ts +118 -0
- package/src/lib/components/pin-input/usePasswordManager.svelte.ts +122 -0
- package/src/lib/components/popover/components/popover-close.svelte +38 -0
- package/src/lib/components/popover/components/popover-content.svelte +70 -0
- package/src/lib/components/popover/components/popover-header.svelte +11 -0
- package/src/lib/components/popover/components/popover-title.svelte +11 -0
- package/src/lib/components/popover/components/popover-trigger.svelte +44 -0
- package/src/lib/components/popover/components/popover.svelte +26 -0
- package/src/lib/components/popover/exports.ts +13 -0
- package/src/lib/components/popover/index.ts +2 -0
- package/src/lib/components/popover/popover.svelte.ts +392 -0
- package/src/lib/components/popover/types.ts +92 -0
- package/src/lib/components/progress/components/progress.svelte +56 -0
- package/src/lib/components/progress/exports.ts +3 -0
- package/src/lib/components/progress/index.ts +2 -0
- package/src/lib/components/progress/progress.svelte.ts +58 -0
- package/src/lib/components/progress/types.ts +28 -0
- package/src/lib/components/radio-group/context.ts +13 -0
- package/src/lib/components/radio-group/index.ts +10 -0
- package/src/lib/components/radio-group/radio-group-item.svelte +67 -0
- package/src/lib/components/radio-group/radio-group.svelte +87 -0
- package/src/lib/components/range-calendar/components/range-calendar-cell.svelte +31 -0
- package/src/lib/components/range-calendar/components/range-calendar-day.svelte +33 -0
- package/src/lib/components/range-calendar/components/range-calendar.svelte +120 -0
- package/src/lib/components/range-calendar/exports.ts +31 -0
- package/src/lib/components/range-calendar/index.ts +2 -0
- package/src/lib/components/range-calendar/range-calendar.svelte.ts +739 -0
- package/src/lib/components/range-calendar/types.ts +258 -0
- package/src/lib/components/resizable/index.ts +15 -0
- package/src/lib/components/resizable/resizable-handle.svelte +30 -0
- package/src/lib/components/resizable/resizable-pane-group.svelte +19 -0
- package/src/lib/components/scroll-area/components/scroll-area-corner-impl.svelte +34 -0
- package/src/lib/components/scroll-area/components/scroll-area-corner.svelte +18 -0
- package/src/lib/components/scroll-area/components/scroll-area-scrollbar-auto.svelte +15 -0
- package/src/lib/components/scroll-area/components/scroll-area-scrollbar-hover.svelte +22 -0
- package/src/lib/components/scroll-area/components/scroll-area-scrollbar-scroll.svelte +16 -0
- package/src/lib/components/scroll-area/components/scroll-area-scrollbar-shared.svelte +19 -0
- package/src/lib/components/scroll-area/components/scroll-area-scrollbar-visible.svelte +16 -0
- package/src/lib/components/scroll-area/components/scroll-area-scrollbar-x.svelte +23 -0
- package/src/lib/components/scroll-area/components/scroll-area-scrollbar-y.svelte +24 -0
- package/src/lib/components/scroll-area/components/scroll-area-scrollbar.svelte +56 -0
- package/src/lib/components/scroll-area/components/scroll-area-thumb-impl.svelte +49 -0
- package/src/lib/components/scroll-area/components/scroll-area-thumb.svelte +21 -0
- package/src/lib/components/scroll-area/components/scroll-area-viewport.svelte +39 -0
- package/src/lib/components/scroll-area/components/scroll-area.svelte +82 -0
- package/src/lib/components/scroll-area/exports.ts +13 -0
- package/src/lib/components/scroll-area/index.ts +2 -0
- package/src/lib/components/scroll-area/scroll-area.svelte.ts +946 -0
- package/src/lib/components/scroll-area/types.ts +67 -0
- package/src/lib/components/select/index.ts +5 -0
- package/src/lib/components/select/select-opt-group.svelte +10 -0
- package/src/lib/components/select/select-option.svelte +15 -0
- package/src/lib/components/select/select.svelte +281 -0
- package/src/lib/components/separator/components/separator.svelte +49 -0
- package/src/lib/components/separator/index.ts +3 -0
- package/src/lib/components/separator/separator.svelte.ts +43 -0
- package/src/lib/components/separator/types.ts +22 -0
- package/src/lib/components/sheet/components/sheet-close.svelte +8 -0
- package/src/lib/components/sheet/components/sheet-content.svelte +108 -0
- package/src/lib/components/sheet/components/sheet-description.svelte +9 -0
- package/src/lib/components/sheet/components/sheet-footer.svelte +11 -0
- package/src/lib/components/sheet/components/sheet-header.svelte +11 -0
- package/src/lib/components/sheet/components/sheet-overlay.svelte +13 -0
- package/src/lib/components/sheet/components/sheet-title.svelte +9 -0
- package/src/lib/components/sheet/components/sheet-trigger.svelte +8 -0
- package/src/lib/components/sheet/index.ts +47 -0
- package/src/lib/components/sheet/variants.ts +20 -0
- package/src/lib/components/sidebar/constants.ts +6 -0
- package/src/lib/components/sidebar/context.svelte.ts +54 -0
- package/src/lib/components/sidebar/index.ts +77 -0
- package/src/lib/components/sidebar/sidebar-content.svelte +16 -0
- package/src/lib/components/sidebar/sidebar-desktop-surface.svelte +60 -0
- package/src/lib/components/sidebar/sidebar-footer.svelte +11 -0
- package/src/lib/components/sidebar/sidebar-group-action.svelte +34 -0
- package/src/lib/components/sidebar/sidebar-group-content.svelte +16 -0
- package/src/lib/components/sidebar/sidebar-group-label.svelte +34 -0
- package/src/lib/components/sidebar/sidebar-group.svelte +16 -0
- package/src/lib/components/sidebar/sidebar-header.svelte +11 -0
- package/src/lib/components/sidebar/sidebar-input.svelte +14 -0
- package/src/lib/components/sidebar/sidebar-inset.svelte +18 -0
- package/src/lib/components/sidebar/sidebar-menu-action.svelte +38 -0
- package/src/lib/components/sidebar/sidebar-menu-badge.svelte +19 -0
- package/src/lib/components/sidebar/sidebar-menu-button.svelte +99 -0
- package/src/lib/components/sidebar/sidebar-menu-item.svelte +21 -0
- package/src/lib/components/sidebar/sidebar-menu-skeleton.svelte +34 -0
- package/src/lib/components/sidebar/sidebar-menu-sub-button.svelte +40 -0
- package/src/lib/components/sidebar/sidebar-menu-sub-item.svelte +16 -0
- package/src/lib/components/sidebar/sidebar-menu-sub.svelte +19 -0
- package/src/lib/components/sidebar/sidebar-menu.svelte +21 -0
- package/src/lib/components/sidebar/sidebar-mobile-surface.svelte +48 -0
- package/src/lib/components/sidebar/sidebar-provider.svelte +60 -0
- package/src/lib/components/sidebar/sidebar-rail.svelte +36 -0
- package/src/lib/components/sidebar/sidebar-separator.svelte +9 -0
- package/src/lib/components/sidebar/sidebar-trigger.svelte +35 -0
- package/src/lib/components/sidebar/sidebar.svelte +30 -0
- package/src/lib/components/sidebar/types.ts +14 -0
- package/src/lib/components/skeleton/index.ts +7 -0
- package/src/lib/components/skeleton/skeleton.svelte +9 -0
- package/src/lib/components/slider/components/slider-range.svelte +37 -0
- package/src/lib/components/slider/components/slider-thumb-label.svelte +42 -0
- package/src/lib/components/slider/components/slider-thumb.svelte +46 -0
- package/src/lib/components/slider/components/slider-tick-label.svelte +42 -0
- package/src/lib/components/slider/components/slider-tick.svelte +28 -0
- package/src/lib/components/slider/components/slider.svelte +136 -0
- package/src/lib/components/slider/helpers.ts +249 -0
- package/src/lib/components/slider/index.ts +15 -0
- package/src/lib/components/slider/slider.svelte.ts +979 -0
- package/src/lib/components/slider/types.ts +294 -0
- package/src/lib/components/sonner/Toast.svelte +558 -0
- package/src/lib/components/sonner/Toaster.svelte +603 -0
- package/src/lib/components/sonner/index.ts +15 -0
- package/src/lib/components/sonner/toast-state.svelte.ts +217 -0
- package/src/lib/components/sonner/types.ts +384 -0
- package/src/lib/components/switch/index.ts +8 -0
- package/src/lib/components/switch/switch.svelte +78 -0
- package/src/lib/components/table/index.ts +28 -0
- package/src/lib/components/table/table-body.svelte +15 -0
- package/src/lib/components/table/table-caption.svelte +10 -0
- package/src/lib/components/table/table-cell.svelte +14 -0
- package/src/lib/components/table/table-footer.svelte +19 -0
- package/src/lib/components/table/table-head.svelte +17 -0
- package/src/lib/components/table/table-header.svelte +15 -0
- package/src/lib/components/table/table-row.svelte +14 -0
- package/src/lib/components/table/table.svelte +12 -0
- package/src/lib/components/tabs/components/tabs-content.svelte +30 -0
- package/src/lib/components/tabs/components/tabs-list.svelte +38 -0
- package/src/lib/components/tabs/components/tabs-trigger.svelte +51 -0
- package/src/lib/components/tabs/components/tabs.svelte +52 -0
- package/src/lib/components/tabs/index.ts +11 -0
- package/src/lib/components/tabs/tabs.svelte.ts +253 -0
- package/src/lib/components/tabs/types.ts +86 -0
- package/src/lib/components/textarea/index.ts +7 -0
- package/src/lib/components/textarea/textarea.svelte +23 -0
- package/src/lib/components/theme-toggle/index.ts +5 -0
- package/src/lib/components/theme-toggle/theme-toggle.svelte +49 -0
- package/src/lib/components/theme-toggle/theme.svelte.ts +81 -0
- package/src/lib/components/time-field/components/time-field-hidden-input.svelte +9 -0
- package/src/lib/components/time-field/components/time-field-input.svelte +33 -0
- package/src/lib/components/time-field/components/time-field-label.svelte +29 -0
- package/src/lib/components/time-field/components/time-field-segment.svelte +29 -0
- package/src/lib/components/time-field/components/time-field.svelte +99 -0
- package/src/lib/components/time-field/index.ts +11 -0
- package/src/lib/components/time-field/time-field.svelte.ts +1198 -0
- package/src/lib/components/time-field/types.ts +174 -0
- package/src/lib/components/time-range-field/components/time-range-field-input.svelte +36 -0
- package/src/lib/components/time-range-field/components/time-range-field-label.svelte +29 -0
- package/src/lib/components/time-range-field/components/time-range-field.svelte +104 -0
- package/src/lib/components/time-range-field/index.ts +11 -0
- package/src/lib/components/time-range-field/time-range-field.svelte.ts +235 -0
- package/src/lib/components/time-range-field/types.ts +181 -0
- package/src/lib/components/toggle/components/toggle.svelte +55 -0
- package/src/lib/components/toggle/index.ts +3 -0
- package/src/lib/components/toggle/toggle.svelte.ts +57 -0
- package/src/lib/components/toggle/types.ts +33 -0
- package/src/lib/components/toggle/variants.ts +25 -0
- package/src/lib/components/toggle-group/components/toggle-group-item.svelte +67 -0
- package/src/lib/components/toggle-group/components/toggle-group.svelte +109 -0
- package/src/lib/components/toggle-group/index.ts +7 -0
- package/src/lib/components/toggle-group/toggle-group.svelte.ts +235 -0
- package/src/lib/components/toggle-group/types.ts +89 -0
- package/src/lib/components/toolbar/components/toolbar-button.svelte +46 -0
- package/src/lib/components/toolbar/components/toolbar-group-item.svelte +56 -0
- package/src/lib/components/toolbar/components/toolbar-group.svelte +69 -0
- package/src/lib/components/toolbar/components/toolbar-link.svelte +39 -0
- package/src/lib/components/toolbar/components/toolbar.svelte +39 -0
- package/src/lib/components/toolbar/index.ts +13 -0
- package/src/lib/components/toolbar/toolbar.svelte.ts +373 -0
- package/src/lib/components/toolbar/types.ts +60 -0
- package/src/lib/components/tooltip/components/tooltip-content.svelte +81 -0
- package/src/lib/components/tooltip/components/tooltip-provider.svelte +26 -0
- package/src/lib/components/tooltip/components/tooltip-trigger.svelte +48 -0
- package/src/lib/components/tooltip/components/tooltip.svelte +55 -0
- package/src/lib/components/tooltip/index.ts +17 -0
- package/src/lib/components/tooltip/tooltip.svelte.ts +796 -0
- package/src/lib/components/tooltip/types.ts +175 -0
- package/src/lib/components/tooltip/utils.ts +1 -0
- package/src/lib/icons/google-icon.svelte +10 -0
- package/src/lib/icons/google-workspace.svelte +18 -0
- package/src/lib/icons/icon.d.ts +19 -0
- package/src/lib/icons/instagram.svelte +9 -0
- package/src/lib/icons/instantly.svelte +10 -0
- package/src/lib/icons/linkedin.svelte +9 -0
- package/src/lib/icons/mailshake.svelte +10 -0
- package/src/lib/icons/microsoft-365.svelte +7 -0
- package/src/lib/icons/passcode.svelte +12 -0
- package/src/lib/icons/replyio.svelte +10 -0
- package/src/lib/icons/smartlead.svelte +19 -0
- package/src/lib/icons/smtp.svelte +10 -0
- package/src/lib/icons/x-logo.svelte +9 -0
- package/src/lib/internal/animations-settled.svelte.ts +119 -0
- package/src/lib/internal/arrays.ts +253 -0
- package/src/lib/internal/attribute-types.ts +53 -0
- package/src/lib/internal/attrs.ts +64 -0
- package/src/lib/internal/body-scroll-lock.svelte.ts +330 -0
- package/src/lib/internal/create-id.ts +12 -0
- package/src/lib/internal/date-time/announcer.ts +74 -0
- package/src/lib/internal/date-time/calendar-helpers.svelte.ts +399 -0
- package/src/lib/internal/date-time/field/helpers.ts +431 -0
- package/src/lib/internal/date-time/field/parts.ts +15 -0
- package/src/lib/internal/date-time/field/range-field.svelte.ts +45 -0
- package/src/lib/internal/date-time/field/segments.ts +89 -0
- package/src/lib/internal/date-time/field/time-helpers.ts +311 -0
- package/src/lib/internal/date-time/formatter.ts +86 -0
- package/src/lib/internal/date-time/placeholders.ts +131 -0
- package/src/lib/internal/date-time/types.ts +121 -0
- package/src/lib/internal/date-time/utils.ts +243 -0
- package/src/lib/internal/dismissible-layer/index.ts +3 -0
- package/src/lib/internal/dismissible-layer/scheduler.ts +48 -0
- package/src/lib/internal/dismissible-layer/types.ts +57 -0
- package/src/lib/internal/dismissible-layer/use-dismissable-layer.svelte.ts +291 -0
- package/src/lib/internal/escape-layer/index.ts +3 -0
- package/src/lib/internal/escape-layer/types.ts +34 -0
- package/src/lib/internal/escape-layer/use-escape-layer.svelte.ts +91 -0
- package/src/lib/internal/floating-layer/components/floating-layer-arrow.svelte +35 -0
- package/src/lib/internal/floating-layer/components/floating-layer-content-static.svelte +19 -0
- package/src/lib/internal/floating-layer/components/floating-layer-content.svelte +52 -0
- package/src/lib/internal/floating-layer/components/floating-layer.svelte +12 -0
- package/src/lib/internal/floating-layer/components/index.ts +6 -0
- package/src/lib/internal/floating-layer/index.ts +2 -0
- package/src/lib/internal/floating-layer/types.ts +126 -0
- package/src/lib/internal/floating-layer/use-floating-layer.svelte.ts +471 -0
- package/src/lib/internal/focus-scope/focus-scope.svelte.ts +310 -0
- package/src/lib/internal/focus-scope/index.ts +4 -0
- package/src/lib/internal/focus-scope/types.ts +45 -0
- package/src/lib/internal/focus.ts +14 -0
- package/src/lib/internal/global-singleton.ts +10 -0
- package/src/lib/internal/group-value.svelte.ts +36 -0
- package/src/lib/internal/hover-intent-geometry.ts +96 -0
- package/src/lib/internal/index.ts +44 -0
- package/src/lib/internal/kbd.ts +60 -0
- package/src/lib/internal/layer-stack.ts +37 -0
- package/src/lib/internal/math.ts +11 -0
- package/src/lib/internal/merge-props.ts +7 -0
- package/src/lib/internal/native-dialog-controller.svelte.ts +102 -0
- package/src/lib/internal/native-popover.svelte.ts +173 -0
- package/src/lib/internal/open-cell.svelte.ts +41 -0
- package/src/lib/internal/paneforge/index.ts +5 -0
- package/src/lib/internal/paneforge/internal/constants.ts +2 -0
- package/src/lib/internal/paneforge/internal/helpers.ts +354 -0
- package/src/lib/internal/paneforge/internal/types.ts +33 -0
- package/src/lib/internal/paneforge/internal/utils/adjust-layout.ts +122 -0
- package/src/lib/internal/paneforge/internal/utils/aria.ts +36 -0
- package/src/lib/internal/paneforge/internal/utils/compare.ts +15 -0
- package/src/lib/internal/paneforge/internal/utils/is.ts +13 -0
- package/src/lib/internal/paneforge/internal/utils/resize.ts +31 -0
- package/src/lib/internal/paneforge/internal/utils/storage.ts +116 -0
- package/src/lib/internal/paneforge/internal/utils/style.ts +104 -0
- package/src/lib/internal/paneforge/pane-group.svelte +48 -0
- package/src/lib/internal/paneforge/pane-resizer.svelte +40 -0
- package/src/lib/internal/paneforge/pane.svelte +60 -0
- package/src/lib/internal/paneforge/paneforge.svelte.ts +821 -0
- package/src/lib/internal/paneforge/types.ts +179 -0
- package/src/lib/internal/popper-layer/index.ts +2 -0
- package/src/lib/internal/popper-layer/popper-content.svelte +19 -0
- package/src/lib/internal/popper-layer/popper-layer-inner.svelte +122 -0
- package/src/lib/internal/popper-layer/popper-layer.svelte +71 -0
- package/src/lib/internal/popper-layer/types.ts +65 -0
- package/src/lib/internal/portal/index.ts +2 -0
- package/src/lib/internal/portal/portal.svelte +61 -0
- package/src/lib/internal/prop-resolvers.ts +14 -0
- package/src/lib/internal/roving-focus-group.ts +147 -0
- package/src/lib/internal/roving-focus-item.svelte.ts +51 -0
- package/src/lib/internal/safe-polygon.svelte.ts +239 -0
- package/src/lib/internal/shared-state.svelte.ts +39 -0
- package/src/lib/internal/state-machine.ts +32 -0
- package/src/lib/internal/svelte-resize-observer.svelte.ts +37 -0
- package/src/lib/internal/tabbable.ts +398 -0
- package/src/lib/internal/table/core.ts +53 -0
- package/src/lib/internal/table/filter-fns.ts +10 -0
- package/src/lib/internal/table/index.ts +2 -0
- package/src/lib/internal/table/sorting-fns.ts +84 -0
- package/src/lib/internal/table/table.svelte.ts +330 -0
- package/src/lib/internal/table/types.ts +33 -0
- package/src/lib/internal/timeout-fn.svelte.ts +36 -0
- package/src/lib/internal/tools/box.svelte.ts +153 -0
- package/src/lib/internal/tools/index.ts +22 -0
- package/src/lib/internal/tools/types.ts +44 -0
- package/src/lib/internal/tools/utils/attach-ref.ts +74 -0
- package/src/lib/internal/tools/utils/compose-handlers.ts +36 -0
- package/src/lib/internal/tools/utils/dom-context.svelte.ts +63 -0
- package/src/lib/internal/tools/utils/dom.ts +62 -0
- package/src/lib/internal/tools/utils/events.ts +1 -0
- package/src/lib/internal/tools/utils/index.ts +5 -0
- package/src/lib/internal/tools/utils/strings.ts +28 -0
- package/src/lib/internal/typeahead.svelte.ts +48 -0
- package/src/lib/internal/types.ts +119 -0
- package/src/lib/internal/utils.ts +10 -0
- package/src/lib/internal/vaul/browser.ts +8 -0
- package/src/lib/internal/vaul/constants.ts +19 -0
- package/src/lib/internal/vaul/helpers.ts +39 -0
- package/src/lib/internal/vaul/types.ts +142 -0
- package/src/lib/internal/vaul/use-drawer-content.svelte.ts +219 -0
- package/src/lib/internal/vaul/use-drawer-root.svelte.ts +682 -0
- package/src/lib/internal/vaul/use-position-fixed.svelte.ts +142 -0
- package/src/lib/internal/vaul/use-prevent-scroll.svelte.ts +267 -0
- package/src/lib/internal/vaul/use-snap-points.svelte.ts +246 -0
- package/src/lib/time.ts +73 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import type { DateValue } from '@internationalized/date';
|
|
2
|
+
import type { OnChangeFn, WithChild, Without } from '../../internal/types.js';
|
|
3
|
+
import type { BitsPrimitiveDivAttributes, BitsPrimitiveSpanAttributes } from '../../internal/attribute-types.js';
|
|
4
|
+
import type { DateOnInvalid, DateRange, DateRangeValidator, EditableSegmentPart, SegmentPart } from '../../internal/index.js';
|
|
5
|
+
import type { DateFieldSegmentProps, DateFieldSegmentPropsWithoutHTML } from '../date-field/types.js';
|
|
6
|
+
import type { Granularity } from '../../internal/date-time/types.js';
|
|
7
|
+
|
|
8
|
+
export type DateRangeFieldRootPropsWithoutHTML = WithChild<{
|
|
9
|
+
/**
|
|
10
|
+
* The value of the date range field.
|
|
11
|
+
*
|
|
12
|
+
* @bindable
|
|
13
|
+
*/
|
|
14
|
+
value?: DateRange;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* A callback that is called when the value of the date range field changes.
|
|
18
|
+
*/
|
|
19
|
+
onValueChange?: OnChangeFn<DateRange | undefined>;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The placeholder value of the date field. This determines the format
|
|
23
|
+
* and what date the field starts at when it is empty.
|
|
24
|
+
*
|
|
25
|
+
* @bindable
|
|
26
|
+
*/
|
|
27
|
+
placeholder?: DateValue;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* A callback that is called when the date field's placeholder value changes.
|
|
31
|
+
*/
|
|
32
|
+
onPlaceholderChange?: OnChangeFn<DateValue | undefined>;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* A function that returns a string or array of strings as validation errors if the date is
|
|
36
|
+
* invalid, or nothing if the date is valid
|
|
37
|
+
*/
|
|
38
|
+
validate?: DateRangeValidator;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* A callback fired when the date field's value is invalid. Use this to display an error
|
|
42
|
+
* message to the user.
|
|
43
|
+
*/
|
|
44
|
+
onInvalid?: DateOnInvalid;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The minimum acceptable date. When provided, the date field
|
|
48
|
+
* will be marked as invalid if the user enters a date before this date.
|
|
49
|
+
*/
|
|
50
|
+
minValue?: DateValue;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The maximum acceptable date. When provided, the date field
|
|
54
|
+
* will be marked as invalid if the user enters a date after this date.
|
|
55
|
+
*/
|
|
56
|
+
maxValue?: DateValue;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* If true, the date field will be disabled and users will not be able
|
|
60
|
+
* to interact with it. This also disables the hidden input element if
|
|
61
|
+
* the date field is used in a form.
|
|
62
|
+
*
|
|
63
|
+
* @defaultValue false
|
|
64
|
+
*/
|
|
65
|
+
disabled?: boolean;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* If true, the date field will be readonly, and users will not be able to
|
|
69
|
+
* edit the values of any of the individual segments.
|
|
70
|
+
*
|
|
71
|
+
* @defaultValue false
|
|
72
|
+
*/
|
|
73
|
+
readonly?: boolean;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* If true, the date field will be required, which is useful when used within
|
|
77
|
+
* a form. If the date field is empty when the form is submitted, the form
|
|
78
|
+
* will not be valid.
|
|
79
|
+
*
|
|
80
|
+
* @defaultValue false
|
|
81
|
+
*/
|
|
82
|
+
required?: boolean;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* An array of segment names that should be readonly. If provided, only the
|
|
86
|
+
* segments not in this array will be editable.
|
|
87
|
+
*/
|
|
88
|
+
readonlySegments?: EditableSegmentPart[];
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The format to use for displaying the time in the input.
|
|
92
|
+
* If using a 12 hour clock, ensure you also include the `dayPeriod`
|
|
93
|
+
* segment in your input to ensure the user can select AM/PM.
|
|
94
|
+
*
|
|
95
|
+
* @defaultValue the locale's default time format
|
|
96
|
+
*/
|
|
97
|
+
hourCycle?: 12 | 24;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* The locale to use for formatting the date field.
|
|
101
|
+
*
|
|
102
|
+
* @defaultValue 'en'
|
|
103
|
+
*/
|
|
104
|
+
locale?: string;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The granularity of the date field. This determines which
|
|
108
|
+
* segments will be includes in the segments array used to
|
|
109
|
+
* build the date field.
|
|
110
|
+
*
|
|
111
|
+
* By default, when a `CalendarDate` value is used, the granularity
|
|
112
|
+
* will default to `'day'`, and when a `CalendarDateTime` or `ZonedDateTime`
|
|
113
|
+
* value is used, the granularity will default to `'minute'`.
|
|
114
|
+
*
|
|
115
|
+
* Granularity is only used for visual purposes, and does not impact
|
|
116
|
+
* the value of the date field. You can have the same value synced
|
|
117
|
+
* between multiple date fields with different granularities and they
|
|
118
|
+
* will all contain the same value.
|
|
119
|
+
*
|
|
120
|
+
* @defaultValue 'day'
|
|
121
|
+
*/
|
|
122
|
+
granularity?: Granularity;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Whether or not to hide the timeZoneName segment from the date field.
|
|
126
|
+
*
|
|
127
|
+
* @defaultValue false;
|
|
128
|
+
*/
|
|
129
|
+
hideTimeZone?: boolean;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* The `id` of the element which contains the error messages for the date field when the
|
|
133
|
+
* date is invalid.
|
|
134
|
+
*/
|
|
135
|
+
errorMessageId?: string;
|
|
136
|
+
}>;
|
|
137
|
+
|
|
138
|
+
export type DateRangeFieldRootProps = DateRangeFieldRootPropsWithoutHTML &
|
|
139
|
+
Without<BitsPrimitiveDivAttributes, DateRangeFieldRootPropsWithoutHTML>;
|
|
140
|
+
|
|
141
|
+
export type DateRangeFieldLabelPropsWithoutHTML = WithChild;
|
|
142
|
+
|
|
143
|
+
export type DateRangeFieldLabelProps = DateRangeFieldLabelPropsWithoutHTML &
|
|
144
|
+
Without<BitsPrimitiveSpanAttributes, DateRangeFieldLabelPropsWithoutHTML>;
|
|
145
|
+
|
|
146
|
+
export type DateRangeFieldInputSnippetProps = {
|
|
147
|
+
segments: Array<{ part: SegmentPart; value: string }>;
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
export type DateRangeFieldInputPropsWithoutHTML = WithChild<
|
|
151
|
+
{
|
|
152
|
+
/**
|
|
153
|
+
* The name to use for the hidden input element associated with this input
|
|
154
|
+
* used for form submission.
|
|
155
|
+
*/
|
|
156
|
+
name?: string;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Whether this input represents the start or end of the date range.
|
|
160
|
+
*/
|
|
161
|
+
type: 'start' | 'end';
|
|
162
|
+
},
|
|
163
|
+
DateRangeFieldInputSnippetProps
|
|
164
|
+
>;
|
|
165
|
+
|
|
166
|
+
export type DateRangeFieldInputProps = DateRangeFieldInputPropsWithoutHTML &
|
|
167
|
+
Without<BitsPrimitiveDivAttributes, DateRangeFieldInputPropsWithoutHTML>;
|
|
168
|
+
|
|
169
|
+
export type DateRangeFieldSegmentPropsWithoutHTML = DateFieldSegmentPropsWithoutHTML;
|
|
170
|
+
|
|
171
|
+
export type DateRangeFieldSegmentProps = DateFieldSegmentProps;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { boxWith } from '../../../internal/tools/index.js';
|
|
3
|
+
import { mergeProps } from '../../../internal/merge-props.js';
|
|
4
|
+
import { DialogCloseState } from '../dialog.svelte.js';
|
|
5
|
+
import type { DialogCloseProps } from '../types.js';
|
|
6
|
+
import { createId } from '../../../internal/create-id.js';
|
|
7
|
+
|
|
8
|
+
const uid = $props.id();
|
|
9
|
+
|
|
10
|
+
let { children, child, id = createId(uid), ref = $bindable(null), disabled = false, ...restProps }: DialogCloseProps = $props();
|
|
11
|
+
|
|
12
|
+
const closeState = DialogCloseState.create({
|
|
13
|
+
variant: boxWith(() => 'close'),
|
|
14
|
+
id: boxWith(() => id),
|
|
15
|
+
ref: boxWith(
|
|
16
|
+
() => ref,
|
|
17
|
+
(v) => (ref = v),
|
|
18
|
+
),
|
|
19
|
+
disabled: boxWith(() => Boolean(disabled)),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const mergedProps = $derived(mergeProps({ 'data-slot': 'dialog-close' }, restProps, closeState.props));
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
{#if child}
|
|
26
|
+
{@render child({ props: mergedProps })}
|
|
27
|
+
{:else}
|
|
28
|
+
<button {...mergedProps}>
|
|
29
|
+
{@render children?.()}
|
|
30
|
+
</button>
|
|
31
|
+
{/if}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { boxWith } from '../../../internal/tools/index.js';
|
|
3
|
+
import { mergeProps } from '../../../internal/merge-props.js';
|
|
4
|
+
import { DialogContentState } from '../dialog.svelte.js';
|
|
5
|
+
import type { DialogContentProps } from '../types.js';
|
|
6
|
+
import { interactOutsideAttachment } from '../../../internal/dismissible-layer/use-dismissable-layer.svelte.js';
|
|
7
|
+
import { escapeKeydownAttachment } from '../../../internal/escape-layer/use-escape-layer.svelte.js';
|
|
8
|
+
import { createFocusScopeProps } from '../../../internal/focus-scope/focus-scope.svelte.js';
|
|
9
|
+
import { createId } from '../../../internal/create-id.js';
|
|
10
|
+
import { scrollLockAttachment } from '../../../internal/body-scroll-lock.svelte.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Headless JS-overlay dialog content — an always-mounted <div> (visibility:hidden while closed;
|
|
14
|
+
* the drawer's exit keyframes hold it visible) with the FocusScope / EscapeLayer /
|
|
15
|
+
* DismissibleLayer / ScrollLock stack and the CSS text-selection guard. The public Dialog.Content is now the native <dialog>
|
|
16
|
+
* (dialog-content.svelte); this variant survives ONLY for the Drawer, whose vaul drag physics need a
|
|
17
|
+
* draggable in-flow <div> and cannot live in the top layer. Keep in sync with the shared Dialog state
|
|
18
|
+
* cell — it is the same DialogContentState, just rendered as a div instead of a modal <dialog>.
|
|
19
|
+
*/
|
|
20
|
+
const uid = $props.id();
|
|
21
|
+
|
|
22
|
+
let {
|
|
23
|
+
id = createId(uid),
|
|
24
|
+
children,
|
|
25
|
+
child,
|
|
26
|
+
ref = $bindable(null),
|
|
27
|
+
onCloseAutoFocus = () => {},
|
|
28
|
+
onOpenAutoFocus = () => {},
|
|
29
|
+
onEscapeKeydown = () => {},
|
|
30
|
+
onInteractOutside = () => {},
|
|
31
|
+
trapFocus = true,
|
|
32
|
+
preventScroll = true,
|
|
33
|
+
restoreScrollDelay = null,
|
|
34
|
+
...restProps
|
|
35
|
+
}: DialogContentProps = $props();
|
|
36
|
+
|
|
37
|
+
const contentState = DialogContentState.create({
|
|
38
|
+
id: boxWith(() => id),
|
|
39
|
+
ref: boxWith(
|
|
40
|
+
() => ref,
|
|
41
|
+
(v) => (ref = v),
|
|
42
|
+
),
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Closed state, on this element only (DialogContentState.props is shared with the native
|
|
46
|
+
// modal surface). The scroll lock's body styles land a tick after opening, after vaul's
|
|
47
|
+
// open effect has snapshotted them, as they did when the mount gate flipped a flush later.
|
|
48
|
+
const mergedProps = $derived(mergeProps(restProps, contentState.props, { style: contentState.root.cell.open ? {} : { visibility: 'hidden' } }));
|
|
49
|
+
|
|
50
|
+
const escapeAttachment = escapeKeydownAttachment({
|
|
51
|
+
escapeKeydownBehavior: () => restProps.escapeKeydownBehavior ?? 'close',
|
|
52
|
+
onEscapeKeydown: () => (e) => {
|
|
53
|
+
onEscapeKeydown(e);
|
|
54
|
+
if (e.defaultPrevented) return;
|
|
55
|
+
contentState.root.handleClose();
|
|
56
|
+
},
|
|
57
|
+
enabled: () => contentState.root.cell.open,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Dialog content historically dropped the dismissible focus-capture props (its default-slot
|
|
61
|
+
// usage never threaded them), so only `dismissible.attachment` is merged below.
|
|
62
|
+
const dismissible = interactOutsideAttachment({
|
|
63
|
+
id: () => id,
|
|
64
|
+
interactOutsideBehavior: () => restProps.interactOutsideBehavior ?? 'close',
|
|
65
|
+
onInteractOutside: () => (e) => {
|
|
66
|
+
onInteractOutside(e);
|
|
67
|
+
if (e.defaultPrevented) return;
|
|
68
|
+
contentState.root.handleClose();
|
|
69
|
+
},
|
|
70
|
+
onFocusOutside: () => restProps.onFocusOutside,
|
|
71
|
+
enabled: () => contentState.root.cell.open,
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// Flags the open surface for the CSS text-selection guard in ui.css.
|
|
75
|
+
const textSelectionGuard = $derived(
|
|
76
|
+
contentState.root.cell.open && (restProps.preventOverflowTextSelection ?? true) ? { 'data-text-selection-guard': '' } : {},
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
// Spans `present` (open through the settled exit), the window element lifecycle used to
|
|
80
|
+
// give it — restoreScrollDelay covers the scrollbar restore.
|
|
81
|
+
const scrollLock = scrollLockAttachment({
|
|
82
|
+
enabled: () => preventScroll && contentState.root.present,
|
|
83
|
+
restoreScrollDelay: () => restoreScrollDelay,
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
const focusScope = createFocusScopeProps({
|
|
87
|
+
enabled: () => contentState.root.cell.open,
|
|
88
|
+
trap: () => trapFocus,
|
|
89
|
+
loop: () => true,
|
|
90
|
+
onCloseAutoFocus: () => onCloseAutoFocus,
|
|
91
|
+
onOpenAutoFocus: () => onOpenAutoFocus,
|
|
92
|
+
});
|
|
93
|
+
</script>
|
|
94
|
+
|
|
95
|
+
{#if child}
|
|
96
|
+
{@render child({
|
|
97
|
+
props: mergeProps(mergedProps, focusScope.props, escapeAttachment, dismissible.attachment, textSelectionGuard, scrollLock),
|
|
98
|
+
...contentState.snippetProps,
|
|
99
|
+
})}
|
|
100
|
+
{:else}
|
|
101
|
+
<div {...mergeProps(mergedProps, focusScope.props, escapeAttachment, dismissible.attachment, textSelectionGuard, scrollLock)}>
|
|
102
|
+
{@render children?.()}
|
|
103
|
+
</div>
|
|
104
|
+
{/if}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { join } from 'overrule';
|
|
3
|
+
import ModalSurface from './modal-surface.svelte';
|
|
4
|
+
import type { DialogContentProps, DialogPortalProps } from '../types.js';
|
|
5
|
+
import type { WithoutChildrenOrChild } from '../../../internal/utils.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Modal dialog adapter over the shared native modal surface (modal-surface.svelte),
|
|
9
|
+
* which owns the skeleton: parity props, content state, controller, scroll lock, and
|
|
10
|
+
* the `<dialog>` render. This file owns only Dialog's visual policy.
|
|
11
|
+
*
|
|
12
|
+
* The visual surface (centered box, bg, border, radius, shadow, padding, sm:max-w-lg) is baked
|
|
13
|
+
* here — the shadcn convention — so a bare `<Dialog.Content>` is a styled modal; consumer
|
|
14
|
+
* `class` still merges to override (e.g. `max-w-md!`). Two Tailwind gotchas: no `display`
|
|
15
|
+
* utility on the <dialog> (grid lives on the inner wrapper); explicit centering via
|
|
16
|
+
* `fixed inset-0 m-auto h-fit` (preflight resets the UA `margin:auto` that would otherwise
|
|
17
|
+
* center it).
|
|
18
|
+
*/
|
|
19
|
+
let {
|
|
20
|
+
children,
|
|
21
|
+
ref = $bindable(null),
|
|
22
|
+
class: className,
|
|
23
|
+
...restProps
|
|
24
|
+
}: DialogContentProps & {
|
|
25
|
+
portalProps?: WithoutChildrenOrChild<DialogPortalProps>;
|
|
26
|
+
} = $props();
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<ModalSurface
|
|
30
|
+
bind:ref
|
|
31
|
+
data-slot="dialog-content"
|
|
32
|
+
class={join(
|
|
33
|
+
'dialog-content bg-background fixed inset-0 z-50 m-auto h-fit max-h-[calc(100dvh-2rem)] w-full max-w-[calc(100%-2rem)] overflow-y-auto rounded-lg border p-6 shadow-lg sm:max-w-lg',
|
|
34
|
+
className,
|
|
35
|
+
)}
|
|
36
|
+
{...restProps}>
|
|
37
|
+
<div class="grid gap-4">
|
|
38
|
+
{@render children?.()}
|
|
39
|
+
</div>
|
|
40
|
+
</ModalSurface>
|
|
41
|
+
|
|
42
|
+
<style>
|
|
43
|
+
/* Pop is a keyframe animation, not an @starting-style / display / overlay transition: WebKit
|
|
44
|
+
doesn't start those on top-layer changes (bug 275184; `overlay` is Chromium-only), so
|
|
45
|
+
transitions snapped both directions on iOS. Exit plays REVERSED on [data-state=closed] while
|
|
46
|
+
the dialog is still open — the controller defers close() until animations settle. The
|
|
47
|
+
closed-state display reset and the ::backdrop fade live in ui.css under [data-modal-surface]. */
|
|
48
|
+
/* Distinct in/out names on purpose: with a single name, the state flip only UPDATES the
|
|
49
|
+
already-finished entry animation (animation-name unchanged → no restart per spec), so the
|
|
50
|
+
exit would never play and the deferred close would fire instantly. */
|
|
51
|
+
@keyframes dialog-pop-in {
|
|
52
|
+
from {
|
|
53
|
+
scale: 0.95;
|
|
54
|
+
opacity: 0;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
@keyframes dialog-pop-out {
|
|
58
|
+
to {
|
|
59
|
+
scale: 0.95;
|
|
60
|
+
opacity: 0;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
:global(.dialog-content[open][data-state='open']) {
|
|
64
|
+
animation: dialog-pop-in 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
65
|
+
}
|
|
66
|
+
:global(.dialog-content[open][data-state='closed']) {
|
|
67
|
+
animation: dialog-pop-out 200ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
68
|
+
}
|
|
69
|
+
</style>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { boxWith } from '../../../internal/tools/index.js';
|
|
3
|
+
import { mergeProps } from '../../../internal/merge-props.js';
|
|
4
|
+
import { DialogDescriptionState } from '../dialog.svelte.js';
|
|
5
|
+
import type { DialogDescriptionProps } from '../types.js';
|
|
6
|
+
import { createId } from '../../../internal/create-id.js';
|
|
7
|
+
|
|
8
|
+
const uid = $props.id();
|
|
9
|
+
|
|
10
|
+
let { id = createId(uid), children, child, ref = $bindable(null), ...restProps }: DialogDescriptionProps = $props();
|
|
11
|
+
|
|
12
|
+
const descriptionState = DialogDescriptionState.create({
|
|
13
|
+
id: boxWith(() => id),
|
|
14
|
+
ref: boxWith(
|
|
15
|
+
() => ref,
|
|
16
|
+
(v) => (ref = v),
|
|
17
|
+
),
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const mergedProps = $derived(mergeProps(restProps, descriptionState.props));
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
{#if child}
|
|
24
|
+
{@render child({ props: mergedProps })}
|
|
25
|
+
{:else}
|
|
26
|
+
<div {...mergedProps}>
|
|
27
|
+
{@render children?.()}
|
|
28
|
+
</div>
|
|
29
|
+
{/if}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { boxWith } from '../../../internal/tools/index.js';
|
|
3
|
+
import { mergeProps } from '../../../internal/merge-props.js';
|
|
4
|
+
import { DialogOverlayState } from '../dialog.svelte.js';
|
|
5
|
+
import type { DialogOverlayProps } from '../types.js';
|
|
6
|
+
import { createId } from '../../../internal/create-id.js';
|
|
7
|
+
|
|
8
|
+
const uid = $props.id();
|
|
9
|
+
|
|
10
|
+
let { id = createId(uid), child, children, ref = $bindable(null), ...restProps }: DialogOverlayProps = $props();
|
|
11
|
+
|
|
12
|
+
const overlayState = DialogOverlayState.create({
|
|
13
|
+
id: boxWith(() => id),
|
|
14
|
+
ref: boxWith(
|
|
15
|
+
() => ref,
|
|
16
|
+
(v) => (ref = v),
|
|
17
|
+
),
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
// Always mounted; closed is visibility:hidden here, and the adapter's exit (the drawer's fadeOut
|
|
21
|
+
// keyframe, the sheet's overlay-surface transition) holds it visible while it plays.
|
|
22
|
+
const mergedProps = $derived(mergeProps(restProps, overlayState.props, { style: overlayState.root.cell.open ? {} : { visibility: 'hidden' } }));
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
{#if child}
|
|
26
|
+
{@render child({ props: mergedProps, ...overlayState.snippetProps })}
|
|
27
|
+
{:else}
|
|
28
|
+
<div {...mergedProps}>
|
|
29
|
+
{@render children?.(overlayState.snippetProps)}
|
|
30
|
+
</div>
|
|
31
|
+
{/if}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { boxWith } from '../../../internal/tools/index.js';
|
|
3
|
+
import { mergeProps } from '../../../internal/merge-props.js';
|
|
4
|
+
import { DialogTitleState } from '../dialog.svelte.js';
|
|
5
|
+
import type { DialogTitleProps } from '../types.js';
|
|
6
|
+
import { createId } from '../../../internal/create-id.js';
|
|
7
|
+
|
|
8
|
+
const uid = $props.id();
|
|
9
|
+
|
|
10
|
+
let { id = createId(uid), ref = $bindable(null), child, children, level = 2, ...restProps }: DialogTitleProps = $props();
|
|
11
|
+
|
|
12
|
+
const titleState = DialogTitleState.create({
|
|
13
|
+
id: boxWith(() => id),
|
|
14
|
+
level: boxWith(() => level),
|
|
15
|
+
ref: boxWith(
|
|
16
|
+
() => ref,
|
|
17
|
+
(v) => (ref = v),
|
|
18
|
+
),
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const mergedProps = $derived(mergeProps(restProps, titleState.props));
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
{#if child}
|
|
25
|
+
{@render child({ props: mergedProps })}
|
|
26
|
+
{:else}
|
|
27
|
+
<div {...mergedProps}>
|
|
28
|
+
{@render children?.()}
|
|
29
|
+
</div>
|
|
30
|
+
{/if}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { boxWith } from '../../../internal/tools/index.js';
|
|
3
|
+
import { mergeProps } from '../../../internal/merge-props.js';
|
|
4
|
+
import { DialogTriggerState } from '../dialog.svelte.js';
|
|
5
|
+
import type { DialogTriggerProps } from '../types.js';
|
|
6
|
+
import { createId } from '../../../internal/create-id.js';
|
|
7
|
+
|
|
8
|
+
const uid = $props.id();
|
|
9
|
+
|
|
10
|
+
let { id = createId(uid), ref = $bindable(null), children, child, disabled = false, ...restProps }: DialogTriggerProps = $props();
|
|
11
|
+
|
|
12
|
+
const triggerState = DialogTriggerState.create({
|
|
13
|
+
id: boxWith(() => id),
|
|
14
|
+
ref: boxWith(
|
|
15
|
+
() => ref,
|
|
16
|
+
(v) => (ref = v),
|
|
17
|
+
),
|
|
18
|
+
disabled: boxWith(() => Boolean(disabled)),
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const mergedProps = $derived(mergeProps(restProps, triggerState.props));
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
{#if child}
|
|
25
|
+
{@render child({ props: mergedProps })}
|
|
26
|
+
{:else}
|
|
27
|
+
<button {...mergedProps}>
|
|
28
|
+
{@render children?.()}
|
|
29
|
+
</button>
|
|
30
|
+
{/if}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { boxWith } from '../../../internal/tools/index.js';
|
|
3
|
+
import { DialogRootState, DialogState } from '../dialog.svelte.js';
|
|
4
|
+
import type { DialogRootProps } from '../types.js';
|
|
5
|
+
|
|
6
|
+
let { open = false, onOpenChangeComplete = () => {}, state, children }: DialogRootProps = $props();
|
|
7
|
+
|
|
8
|
+
// Root owns both the machinery and the cell; `open` (the prop) is the cell's
|
|
9
|
+
// derivation source, and the children snippet is the only way the cell leaves.
|
|
10
|
+
// A caller-built `state` cell (with its own source/writer) takes over both roles.
|
|
11
|
+
// The cell's identity is fixed at mount — swapping `state` later is not supported.
|
|
12
|
+
// svelte-ignore state_referenced_locally
|
|
13
|
+
const dialog = state ?? new DialogState(() => open);
|
|
14
|
+
DialogRootState.create({
|
|
15
|
+
variant: boxWith(() => 'dialog'),
|
|
16
|
+
cell: dialog,
|
|
17
|
+
onOpenChangeComplete: boxWith(() => onOpenChangeComplete),
|
|
18
|
+
});
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
{@render children?.(dialog)}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { HTMLDialogAttributes } from 'svelte/elements';
|
|
3
|
+
import { boxWith } from '../../../internal/tools/index.js';
|
|
4
|
+
import { mergeProps } from '../../../internal/merge-props.js';
|
|
5
|
+
import { DialogContentState } from '../dialog.svelte.js';
|
|
6
|
+
import type { DialogContentProps, DialogPortalProps } from '../types.js';
|
|
7
|
+
import { createId } from '../../../internal/create-id.js';
|
|
8
|
+
import type { WithoutChildrenOrChild } from '../../../internal/utils.js';
|
|
9
|
+
import { scrollLockAttachment } from '../../../internal/body-scroll-lock.svelte.js';
|
|
10
|
+
import { nativeDialogControllerAttachment } from '../../../internal/native-dialog-controller.svelte.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The native modal surface: the one skeleton behind every modal `<dialog>` adapter
|
|
14
|
+
* (Dialog.Content, Sheet.Content). Owns what the adapters used to copy — the parity
|
|
15
|
+
* prop block, the content state, the controller attachment, the scroll lock, and the
|
|
16
|
+
* `<dialog>` render + attribute cast. Adapters supply only their visual policy:
|
|
17
|
+
* `class`, an `outsideEvent` override, and their inner markup.
|
|
18
|
+
*
|
|
19
|
+
* What native + CSS absorb, replacing the old JS overlay stack
|
|
20
|
+
* (FocusScope / EscapeLayer / DismissibleLayer / presence gate / portal + overlay <div>):
|
|
21
|
+
* focus trap / restore / initial focus → showModal() (drops FocusScope + the focus-memory stack)
|
|
22
|
+
* focus CONTAINMENT (can't tab out) → native, via inert on everything outside the dialog
|
|
23
|
+
* focus trap LOOP (tab wraps ends) → NOT native: inert stops escape but sequential nav lands
|
|
24
|
+
* on <body> for one step instead of wrapping. The
|
|
25
|
+
* controller's keydown handler closes that gap (via
|
|
26
|
+
* `trapFocus`, wired here for every adapter).
|
|
27
|
+
* Esc to close → native `cancel` (drops EscapeLayer + its global stack)
|
|
28
|
+
* inert background (clicks/focus/AT) → native modal, stronger than the JS Tab-trap
|
|
29
|
+
* backdrop dim → ::backdrop (drops the rendered overlay <div>; the fade
|
|
30
|
+
* lives in ui.css under `[data-modal-surface]`)
|
|
31
|
+
* mount/unmount + enter/exit timing → @starting-style + display/overlay allow-discrete
|
|
32
|
+
* (drops the {#if shouldRender} presence gate)
|
|
33
|
+
* click-outside to close → backdrop click; checked on `pointerdown` by default so
|
|
34
|
+
* a text-selection drag that overshoots the edge isn't
|
|
35
|
+
* misread as a backdrop click
|
|
36
|
+
* Surviving JS: the controller attachment (open↔showModal + dismissal sync + tab-wrap) and
|
|
37
|
+
* <ScrollLock> (native showModal makes the page inert but still scrollable; the ref-counted body
|
|
38
|
+
* lock stays, and `overflow:hidden` leaks touch-scroll on iOS Safari).
|
|
39
|
+
*
|
|
40
|
+
* Adapter gotcha (Tailwind): no `display` utility on the `<dialog>` itself — a grid/flex class
|
|
41
|
+
* overrides the UA `dialog:not([open]){display:none}`, leaving a closed dialog rendered and
|
|
42
|
+
* intercepting events (ui.css re-asserts the reset, but layout utilities belong on an inner
|
|
43
|
+
* wrapper). Each adapter's transition-property re-home stays in its own <style> — which
|
|
44
|
+
* properties animate (scale vs translate) is visual policy.
|
|
45
|
+
*/
|
|
46
|
+
const uid = $props.id();
|
|
47
|
+
|
|
48
|
+
let {
|
|
49
|
+
id = createId(uid),
|
|
50
|
+
children,
|
|
51
|
+
child,
|
|
52
|
+
ref = $bindable(null),
|
|
53
|
+
// how the controller detects a backdrop dismissal; Dialog and Sheet both use the default.
|
|
54
|
+
outsideEvent = 'pointerdown',
|
|
55
|
+
// --- Accepted for API parity; the native <dialog> absorbs or no-ops these ---
|
|
56
|
+
// no-op: the <dialog> is always rendered; showModal()/close() toggles visibility.
|
|
57
|
+
forceMount = false,
|
|
58
|
+
// no-op: native modal restores focus to the opener on close.
|
|
59
|
+
onCloseAutoFocus = () => {},
|
|
60
|
+
// no-op: showModal() autofocuses ([autofocus] or the first focusable).
|
|
61
|
+
onOpenAutoFocus = () => {},
|
|
62
|
+
// wired below via the native `cancel` event.
|
|
63
|
+
onEscapeKeydown = () => {},
|
|
64
|
+
// wired below via backdrop click.
|
|
65
|
+
onInteractOutside = () => {},
|
|
66
|
+
// no-op: a native modal makes the background inert (no focus-outside to report).
|
|
67
|
+
onFocusOutside = () => {},
|
|
68
|
+
// honored — enables the controller's sequential-focus wrap.
|
|
69
|
+
trapFocus = true,
|
|
70
|
+
// still honored — passed to the scrollLockAttachment below.
|
|
71
|
+
preventScroll = true,
|
|
72
|
+
restoreScrollDelay = null,
|
|
73
|
+
// honored in the `cancel` / backdrop-click handlers below.
|
|
74
|
+
escapeKeydownBehavior = 'close',
|
|
75
|
+
interactOutsideBehavior = 'close',
|
|
76
|
+
// no-op: not applicable to a native modal surface.
|
|
77
|
+
preventOverflowTextSelection = true,
|
|
78
|
+
// no-op: no portal — a modal <dialog> renders in place and is promoted to the top layer.
|
|
79
|
+
portalProps,
|
|
80
|
+
...restProps
|
|
81
|
+
}: DialogContentProps & {
|
|
82
|
+
outsideEvent?: 'pointerdown' | 'click';
|
|
83
|
+
portalProps?: WithoutChildrenOrChild<DialogPortalProps>;
|
|
84
|
+
} = $props();
|
|
85
|
+
|
|
86
|
+
const contentState = DialogContentState.create({
|
|
87
|
+
id: boxWith(() => id),
|
|
88
|
+
ref: boxWith(
|
|
89
|
+
() => ref,
|
|
90
|
+
(v) => (ref = v),
|
|
91
|
+
),
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Bridge the shared root `open` to the native top-layer API and mirror native dismissal back
|
|
95
|
+
// into the root state, in one attachment. The root stays the source of truth, so Trigger /
|
|
96
|
+
// Close / handleClose stay authoritative.
|
|
97
|
+
//
|
|
98
|
+
// NOTE: onOpenChangeComplete is intentionally NOT re-homed here. The Dialog root watches
|
|
99
|
+
// `contentNode` (set by DialogContentState) and fires it once the <dialog>'s animations
|
|
100
|
+
// settle (useOpenChangeComplete) — a listener here would double-fire it.
|
|
101
|
+
const controllerAttachment = nativeDialogControllerAttachment({
|
|
102
|
+
open: () => contentState.root.cell.open,
|
|
103
|
+
onClose: () => contentState.root.handleClose(),
|
|
104
|
+
// the controller takes this as a plain, non-reactive value — fixed per adapter at mount
|
|
105
|
+
// svelte-ignore state_referenced_locally
|
|
106
|
+
outsideEvent,
|
|
107
|
+
onInteractOutside: () => onInteractOutside,
|
|
108
|
+
interactOutsideBehavior: () => interactOutsideBehavior,
|
|
109
|
+
onEscapeKeydown: () => onEscapeKeydown,
|
|
110
|
+
escapeKeydownBehavior: () => escapeKeydownBehavior,
|
|
111
|
+
trapFocus: () => trapFocus,
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// The <dialog> persists across open/close, so the lock gates on the cell's open, not element lifecycle.
|
|
115
|
+
const scrollLock = scrollLockAttachment({
|
|
116
|
+
enabled: () => contentState.root.cell.open && preventScroll,
|
|
117
|
+
restoreScrollDelay: () => restoreScrollDelay,
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
const mergedProps = $derived(mergeProps({ 'data-modal-surface': '' }, restProps, contentState.props, scrollLock));
|
|
121
|
+
</script>
|
|
122
|
+
|
|
123
|
+
{#if child}
|
|
124
|
+
{@render child({ props: mergeProps(mergedProps, controllerAttachment), ...contentState.snippetProps })}
|
|
125
|
+
{:else}
|
|
126
|
+
<!-- DialogContentState.props / DialogContentProps are authored for a <div>; their generic event
|
|
127
|
+
handlers are typed to HTMLDivElement, so assert the merged set as dialog attributes. -->
|
|
128
|
+
<dialog {...controllerAttachment} {...mergedProps as unknown as HTMLDialogAttributes}>
|
|
129
|
+
{@render children?.()}
|
|
130
|
+
</dialog>
|
|
131
|
+
{/if}
|