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,311 @@
|
|
|
1
|
+
import { BROWSER } from 'esm-env';
|
|
2
|
+
import type {
|
|
3
|
+
EditableTimeSegmentPart,
|
|
4
|
+
HourCycle,
|
|
5
|
+
TimeGranularity,
|
|
6
|
+
TimeSegmentContentObj,
|
|
7
|
+
TimeSegmentStateMap,
|
|
8
|
+
TimeSegmentValueObj,
|
|
9
|
+
TimeValue,
|
|
10
|
+
} from '../types.js';
|
|
11
|
+
import { CalendarDateTime, Time, ZonedDateTime } from '@internationalized/date';
|
|
12
|
+
import type { TimeFormatter } from '../formatter.js';
|
|
13
|
+
import { EDITABLE_TIME_SEGMENT_PARTS } from './parts.js';
|
|
14
|
+
import { getTimeSegments } from './segments.js';
|
|
15
|
+
import { styleToString } from '../../tools/index.js';
|
|
16
|
+
import { getPlaceholder } from '../placeholders.js';
|
|
17
|
+
import { isZonedDateTime } from '../utils.js';
|
|
18
|
+
import { getDefaultHourCycle } from './helpers.js';
|
|
19
|
+
|
|
20
|
+
type SharedTimeContentProps = {
|
|
21
|
+
granularity: TimeGranularity;
|
|
22
|
+
timeRef: TimeValue;
|
|
23
|
+
formatter: TimeFormatter;
|
|
24
|
+
hideTimeZone: boolean;
|
|
25
|
+
hourCycle: HourCycle | undefined;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
type CreateTimeContentObjProps = SharedTimeContentProps & {
|
|
29
|
+
segmentValues: TimeSegmentValueObj;
|
|
30
|
+
locale: string;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
type CreateTimeContentArrProps = SharedTimeContentProps & {
|
|
34
|
+
contentObj: TimeSegmentContentObj;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
function createTimeContentObj(props: CreateTimeContentObjProps) {
|
|
38
|
+
const { segmentValues, formatter, locale, timeRef } = props;
|
|
39
|
+
|
|
40
|
+
const content = Object.keys(segmentValues).reduce((obj, part) => {
|
|
41
|
+
if (!isEditableTimeSegmentPart(part)) return obj;
|
|
42
|
+
if (part === 'dayPeriod') {
|
|
43
|
+
const value = segmentValues[part];
|
|
44
|
+
if (value !== null) {
|
|
45
|
+
obj[part] = value;
|
|
46
|
+
} else {
|
|
47
|
+
obj[part] = getPlaceholder(part, 'AM', locale);
|
|
48
|
+
}
|
|
49
|
+
} else {
|
|
50
|
+
obj[part] = getPartContent(part);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return obj;
|
|
54
|
+
}, {} as TimeSegmentContentObj);
|
|
55
|
+
|
|
56
|
+
function getPartContent(part: EditableTimeSegmentPart) {
|
|
57
|
+
const value = segmentValues[part];
|
|
58
|
+
const leadingZero = typeof value === 'string' && value?.startsWith('0');
|
|
59
|
+
const intValue = value !== null ? Number.parseInt(value) : null;
|
|
60
|
+
|
|
61
|
+
if (value !== null && intValue !== null) {
|
|
62
|
+
const formatted = formatter.part(timeRef.set({ [part]: value }), part, {
|
|
63
|
+
hourCycle: props.hourCycle === 24 ? 'h23' : undefined,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* If we're operating in a 12 hour clock and the part is an hour, we handle
|
|
68
|
+
* the conversion to 12 hour format with 2 digit hours and leading zeros here.
|
|
69
|
+
*/
|
|
70
|
+
const is12HourMode = props.hourCycle === 12 || (props.hourCycle === undefined && getDefaultHourCycle(locale) === 12);
|
|
71
|
+
if (part === 'hour' && is12HourMode) {
|
|
72
|
+
/**
|
|
73
|
+
* If the value is over 12, we convert to 12 hour format and add leading
|
|
74
|
+
* zeroes if the value is less than 10.
|
|
75
|
+
*/
|
|
76
|
+
if (intValue > 12) {
|
|
77
|
+
const hour = intValue - 12;
|
|
78
|
+
if (hour === 0) {
|
|
79
|
+
return '12';
|
|
80
|
+
} else if (hour < 10) {
|
|
81
|
+
return `0${hour}`;
|
|
82
|
+
} else {
|
|
83
|
+
return `${hour}`;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* If the value is 0, we convert to 12, since 0 is not a valid 12 hour time.
|
|
89
|
+
*/
|
|
90
|
+
if (intValue === 0) {
|
|
91
|
+
return '12';
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* If the value is less than 10, we add a leading zero to the value.
|
|
96
|
+
*/
|
|
97
|
+
if (intValue < 10) {
|
|
98
|
+
return `0${intValue}`;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Otherwise, we don't need to do anything to the value.
|
|
103
|
+
*/
|
|
104
|
+
return `${intValue}`;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (leadingZero && formatted.length === 1) {
|
|
108
|
+
return `0${formatted}`;
|
|
109
|
+
}
|
|
110
|
+
return formatted;
|
|
111
|
+
} else {
|
|
112
|
+
return getPlaceholder(part, '', locale);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return content;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function createTimeContentArr(props: CreateTimeContentArrProps) {
|
|
120
|
+
const { granularity, timeRef, formatter, contentObj, hideTimeZone, hourCycle } = props;
|
|
121
|
+
const parts = formatter.toParts(timeRef, getOptsByGranularity(granularity, hourCycle));
|
|
122
|
+
const timeSegmentContentArr = parts
|
|
123
|
+
.map((part) => {
|
|
124
|
+
const defaultParts = ['literal', 'timeZoneName', null];
|
|
125
|
+
|
|
126
|
+
if (defaultParts.includes(part.type) || !isEditableTimeSegmentPart(part.type)) {
|
|
127
|
+
return {
|
|
128
|
+
part: part.type,
|
|
129
|
+
value: part.value,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
part: part.type,
|
|
134
|
+
value: contentObj[part.type],
|
|
135
|
+
};
|
|
136
|
+
})
|
|
137
|
+
.filter((segment): segment is { part: EditableTimeSegmentPart; value: string } => {
|
|
138
|
+
if (segment.part === null || segment.value === null) return false;
|
|
139
|
+
if (segment.part === 'timeZoneName' && (!isZonedDateTime(timeRef) || hideTimeZone)) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
return true;
|
|
143
|
+
});
|
|
144
|
+
return timeSegmentContentArr;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
type CreateTimeContentProps = CreateTimeContentObjProps;
|
|
148
|
+
|
|
149
|
+
export function createTimeContent(props: CreateTimeContentProps) {
|
|
150
|
+
const contentObj = createTimeContentObj(props);
|
|
151
|
+
const contentArr = createTimeContentArr({
|
|
152
|
+
contentObj,
|
|
153
|
+
...props,
|
|
154
|
+
});
|
|
155
|
+
return {
|
|
156
|
+
obj: contentObj,
|
|
157
|
+
arr: contentArr,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function getOptsByGranularity(granularity: TimeGranularity, hourCycle: HourCycle | undefined) {
|
|
162
|
+
const opts: Intl.DateTimeFormatOptions = {
|
|
163
|
+
hour: '2-digit',
|
|
164
|
+
minute: '2-digit',
|
|
165
|
+
second: '2-digit',
|
|
166
|
+
timeZoneName: 'short',
|
|
167
|
+
hourCycle: hourCycle === 24 ? 'h23' : undefined,
|
|
168
|
+
hour12: hourCycle === 24 ? false : undefined,
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
if (granularity === 'hour') {
|
|
172
|
+
delete opts.minute;
|
|
173
|
+
delete opts.second;
|
|
174
|
+
}
|
|
175
|
+
if (granularity === 'minute') {
|
|
176
|
+
delete opts.second;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return opts;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export const initTimeSegmentStates = () =>
|
|
183
|
+
EDITABLE_TIME_SEGMENT_PARTS.reduce((acc, key) => {
|
|
184
|
+
acc[key] = {
|
|
185
|
+
lastKeyZero: false,
|
|
186
|
+
hasLeftFocus: true,
|
|
187
|
+
updating: null,
|
|
188
|
+
};
|
|
189
|
+
return acc;
|
|
190
|
+
}, {} as TimeSegmentStateMap);
|
|
191
|
+
|
|
192
|
+
export const isEditableTimeSegmentPart = (part: unknown): part is EditableTimeSegmentPart =>
|
|
193
|
+
EDITABLE_TIME_SEGMENT_PARTS.includes(part as EditableTimeSegmentPart);
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Get the segments being used/ are rendered in the DOM.
|
|
197
|
+
* We're using this to determine when to set the value of
|
|
198
|
+
* the date picker, which is when all the segments have
|
|
199
|
+
* been filled.
|
|
200
|
+
*/
|
|
201
|
+
function getUsedTimeSegments(fieldNode: HTMLElement | null) {
|
|
202
|
+
if (!BROWSER || !fieldNode) return [];
|
|
203
|
+
const usedSegments = getTimeSegments(fieldNode)
|
|
204
|
+
.map((el) => el.dataset.segment)
|
|
205
|
+
.filter((part): part is EditableTimeSegmentPart => {
|
|
206
|
+
return EDITABLE_TIME_SEGMENT_PARTS.includes(part as EditableTimeSegmentPart);
|
|
207
|
+
});
|
|
208
|
+
return usedSegments;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
type GetTimeValueFromSegments<T extends TimeValue = Time> = {
|
|
212
|
+
segmentObj: TimeSegmentValueObj;
|
|
213
|
+
fieldNode: HTMLElement | null;
|
|
214
|
+
timeRef: T;
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
export function getTimeValueFromSegments<T extends TimeValue = Time>(props: GetTimeValueFromSegments<T>): T {
|
|
218
|
+
const usedSegments = getUsedTimeSegments(props.fieldNode);
|
|
219
|
+
|
|
220
|
+
for (const part of usedSegments) {
|
|
221
|
+
const value = props.segmentObj[part];
|
|
222
|
+
if (value === null) continue;
|
|
223
|
+
// @ts-expect-error shhh
|
|
224
|
+
props.timeRef = props.timeRef.set({ [part]: props.segmentObj[part] });
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return props.timeRef;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Check if all the segments being used have been filled.
|
|
232
|
+
* We use this to determine when we should set the value
|
|
233
|
+
* store of the date field(s).
|
|
234
|
+
*
|
|
235
|
+
* @param segmentValues - The current `SegmentValueObj`
|
|
236
|
+
* @param fieldNode - The id of the date field
|
|
237
|
+
*/
|
|
238
|
+
export function areAllTimeSegmentsFilled(segmentValues: TimeSegmentValueObj, fieldNode: HTMLElement | null) {
|
|
239
|
+
const usedSegments = getUsedTimeSegments(fieldNode);
|
|
240
|
+
for (const part of usedSegments) {
|
|
241
|
+
if (segmentValues[part] === null) return false;
|
|
242
|
+
}
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Determines if the element with the provided id is the first focusable
|
|
248
|
+
* segment in the date field with the provided fieldId.
|
|
249
|
+
*
|
|
250
|
+
* @param id - The id of the element to check if it's the first segment
|
|
251
|
+
* @param fieldNode - The id of the date field associated with the segment
|
|
252
|
+
*/
|
|
253
|
+
export function isFirstTimeSegment(id: string, fieldNode: HTMLElement | null) {
|
|
254
|
+
if (!BROWSER) return false;
|
|
255
|
+
const segments = getTimeSegments(fieldNode);
|
|
256
|
+
return segments.length ? segments[0]!.id === id : false;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
type SetTimeDescriptionProps = {
|
|
260
|
+
id: string;
|
|
261
|
+
formatter: TimeFormatter;
|
|
262
|
+
value: TimeValue;
|
|
263
|
+
doc: Document;
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Creates or updates a description element for a date field
|
|
268
|
+
* which enables screen readers to read the date field's value.
|
|
269
|
+
*
|
|
270
|
+
* This element is hidden from view, and is portalled to the body
|
|
271
|
+
* so it can be associated via `aria-describedby` and read by
|
|
272
|
+
* screen readers as the user interacts with the date field.
|
|
273
|
+
*/
|
|
274
|
+
export function setTimeDescription(props: SetTimeDescriptionProps) {
|
|
275
|
+
if (!BROWSER) return;
|
|
276
|
+
const valueString = props.formatter.selectedTime(props.value);
|
|
277
|
+
const el = props.doc.getElementById(props.id);
|
|
278
|
+
if (!el) {
|
|
279
|
+
const div = props.doc.createElement('div');
|
|
280
|
+
div.style.cssText = styleToString({
|
|
281
|
+
display: 'none',
|
|
282
|
+
});
|
|
283
|
+
div.id = props.id;
|
|
284
|
+
div.innerText = `Selected Time: ${valueString}`;
|
|
285
|
+
props.doc.body.appendChild(div);
|
|
286
|
+
} else {
|
|
287
|
+
el.innerText = `Selected Time: ${valueString}`;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Removes the description element for the date field with
|
|
293
|
+
* the provided ID. This function should be called when the
|
|
294
|
+
* date field is unmounted.
|
|
295
|
+
*/
|
|
296
|
+
export function removeTimeDescriptionElement(id: string, doc: Document) {
|
|
297
|
+
if (!BROWSER) return;
|
|
298
|
+
const el = doc.getElementById(id);
|
|
299
|
+
if (!el) return;
|
|
300
|
+
doc.body.removeChild(el);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export const convertTimeValueToDateValue = (time: TimeValue): CalendarDateTime | ZonedDateTime =>
|
|
304
|
+
time instanceof Time ? new CalendarDateTime(2020, 1, 1, time.hour, time.minute, time.second, time.millisecond) : time;
|
|
305
|
+
|
|
306
|
+
export const convertTimeValueToTime = (time: TimeValue): Time =>
|
|
307
|
+
time instanceof Time ? time : new Time(time.hour, time.minute, time.second, time.millisecond);
|
|
308
|
+
|
|
309
|
+
export const isTimeBefore = (timeToCompare: Time, referenceTime: Time) => timeToCompare.compare(referenceTime) < 0;
|
|
310
|
+
|
|
311
|
+
export const getISOTimeValue = (time: TimeValue): string => convertTimeValueToTime(time).toString();
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { DateFormatter, type DateValue } from '@internationalized/date';
|
|
2
|
+
import { hasTime, isZonedDateTime, toDate } from './utils.js';
|
|
3
|
+
import type { HourCycle, TimeValue } from './types.js';
|
|
4
|
+
import { convertTimeValueToDateValue } from './field/time-helpers.js';
|
|
5
|
+
import type { ReadableBox } from '../tools/index.js';
|
|
6
|
+
|
|
7
|
+
export type Formatter = ReturnType<typeof createFormatter>;
|
|
8
|
+
export type TimeFormatter = ReturnType<typeof createTimeFormatter>;
|
|
9
|
+
|
|
10
|
+
const defaultPartOptions: Intl.DateTimeFormatOptions = {
|
|
11
|
+
year: 'numeric',
|
|
12
|
+
month: 'numeric',
|
|
13
|
+
day: 'numeric',
|
|
14
|
+
hour: 'numeric',
|
|
15
|
+
minute: 'numeric',
|
|
16
|
+
second: 'numeric',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const partsFor = (locale: string, dv: DateValue, options?: Intl.DateTimeFormatOptions) =>
|
|
20
|
+
new DateFormatter(locale, isZonedDateTime(dv) ? { ...options, timeZone: dv.timeZone } : options).formatToParts(toDate(dv));
|
|
21
|
+
|
|
22
|
+
const customFor = (getLocale: () => string) => (date: Date, options: Intl.DateTimeFormatOptions) =>
|
|
23
|
+
new DateFormatter(getLocale(), options).format(date);
|
|
24
|
+
|
|
25
|
+
const dayPeriodFor = (getLocale: () => string) => (date: Date, hourCycle?: HourCycle) =>
|
|
26
|
+
new DateFormatter(getLocale(), { hour: 'numeric', minute: 'numeric', hourCycle: hourCycle === 24 ? 'h23' : undefined })
|
|
27
|
+
.formatToParts(date)
|
|
28
|
+
.find((p) => p.type === 'dayPeriod')?.value === 'PM'
|
|
29
|
+
? 'PM'
|
|
30
|
+
: 'AM';
|
|
31
|
+
|
|
32
|
+
const partFor =
|
|
33
|
+
<T>(toParts: (o: T, opts?: Intl.DateTimeFormatOptions) => Intl.DateTimeFormatPart[]) =>
|
|
34
|
+
(obj: T, type: Intl.DateTimeFormatPartTypes, options: Intl.DateTimeFormatOptions = {}) =>
|
|
35
|
+
toParts(obj, { ...defaultPartOptions, ...options }).find((p) => p.type === type)?.value ?? '';
|
|
36
|
+
|
|
37
|
+
type CreateFormatterOptions = {
|
|
38
|
+
locale: ReadableBox<string>;
|
|
39
|
+
monthFormat: ReadableBox<Intl.DateTimeFormatOptions['month'] | ((month: number) => string)>;
|
|
40
|
+
yearFormat: ReadableBox<Intl.DateTimeFormatOptions['year'] | ((year: number) => string)>;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export function createFormatter(opts: CreateFormatterOptions) {
|
|
44
|
+
const getLocale = () => opts.locale.current;
|
|
45
|
+
const custom = customFor(getLocale);
|
|
46
|
+
const dayPeriod = dayPeriodFor(getLocale);
|
|
47
|
+
const toParts = (date: DateValue, options?: Intl.DateTimeFormatOptions) => partsFor(getLocale(), date, options);
|
|
48
|
+
const part = partFor(toParts);
|
|
49
|
+
|
|
50
|
+
const selectedDate = (date: DateValue, includeTime = true) =>
|
|
51
|
+
custom(toDate(date), hasTime(date) && includeTime ? { dateStyle: 'long', timeStyle: 'long' } : { dateStyle: 'long' });
|
|
52
|
+
|
|
53
|
+
const fullMonth = (date: Date) => new DateFormatter(getLocale(), { month: 'long' }).format(date);
|
|
54
|
+
const fullYear = (date: Date) => new DateFormatter(getLocale(), { year: 'numeric' }).format(date);
|
|
55
|
+
const dayOfWeek = (date: Date, length: Intl.DateTimeFormatOptions['weekday'] = 'narrow') =>
|
|
56
|
+
new DateFormatter(getLocale(), { weekday: length }).format(date);
|
|
57
|
+
|
|
58
|
+
function fullMonthAndYear(date: Date) {
|
|
59
|
+
const locale = getLocale();
|
|
60
|
+
const monthFormat = opts.monthFormat.current;
|
|
61
|
+
const yearFormat = opts.yearFormat.current;
|
|
62
|
+
if (typeof monthFormat !== 'function' && typeof yearFormat !== 'function') {
|
|
63
|
+
return new DateFormatter(locale, { month: monthFormat, year: yearFormat }).format(date);
|
|
64
|
+
}
|
|
65
|
+
const month =
|
|
66
|
+
typeof monthFormat === 'function' ? monthFormat(date.getMonth() + 1) : new DateFormatter(locale, { month: monthFormat }).format(date);
|
|
67
|
+
const year =
|
|
68
|
+
typeof yearFormat === 'function' ? yearFormat(date.getFullYear()) : new DateFormatter(locale, { year: yearFormat }).format(date);
|
|
69
|
+
return `${month} ${year}`;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return { getLocale, fullMonth, fullYear, fullMonthAndYear, toParts, custom, part, dayPeriod, selectedDate, dayOfWeek };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function createTimeFormatter(initialLocale: string) {
|
|
76
|
+
let locale = initialLocale;
|
|
77
|
+
const getLocale = () => locale;
|
|
78
|
+
const setLocale = (l: string) => void (locale = l);
|
|
79
|
+
const custom = customFor(getLocale);
|
|
80
|
+
const dayPeriod = dayPeriodFor(getLocale);
|
|
81
|
+
const toParts = (tv: TimeValue, options?: Intl.DateTimeFormatOptions) => partsFor(getLocale(), convertTimeValueToDateValue(tv), options);
|
|
82
|
+
const part = partFor(toParts);
|
|
83
|
+
const selectedTime = (date: TimeValue) => custom(toDate(convertTimeValueToDateValue(date)), { timeStyle: 'long' });
|
|
84
|
+
|
|
85
|
+
return { setLocale, getLocale, toParts, custom, part, dayPeriod, selectedTime };
|
|
86
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// prettier-ignore
|
|
2
|
+
const supportedLocales = [
|
|
3
|
+
'ach','af','am','an','ar','ast','az','be','bg','bn','br','bs',
|
|
4
|
+
'ca','cak','ckb','cs','cy','da','de','dsb','el','en','eo','es',
|
|
5
|
+
'et','eu','fa','ff','fi','fr','fy','ga','gd','gl','he','hr',
|
|
6
|
+
'hsb','hu','ia','id','it','ja','ka','kk','kn','ko','lb','lo',
|
|
7
|
+
'lt','lv','meh','ml','ms','nl','nn','no','oc','pl','pt','rm',
|
|
8
|
+
'ro','ru','sc','scn','sk','sl','sr','sv','szl','tg','th','tr',
|
|
9
|
+
'uk','zh-CN','zh-TW',
|
|
10
|
+
] as const;
|
|
11
|
+
|
|
12
|
+
const placeholderFields = ["year", "month", "day"] as const;
|
|
13
|
+
|
|
14
|
+
type SupportedLocale = (typeof supportedLocales)[number];
|
|
15
|
+
type PlaceholderField = (typeof placeholderFields)[number];
|
|
16
|
+
export type PlaceholderMap = Record<SupportedLocale, Record<PlaceholderField, string>>;
|
|
17
|
+
|
|
18
|
+
const placeholders: PlaceholderMap = {
|
|
19
|
+
ach: { year: "mwaka", month: "dwe", day: "nino" },
|
|
20
|
+
af: { year: "jjjj", month: "mm", day: "dd" },
|
|
21
|
+
am: { year: "ዓዓዓዓ", month: "ሚሜ", day: "ቀቀ" },
|
|
22
|
+
an: { year: "aaaa", month: "mm", day: "dd" },
|
|
23
|
+
ar: { year: "سنة", month: "شهر", day: "يوم" },
|
|
24
|
+
ast: { year: "aaaa", month: "mm", day: "dd" },
|
|
25
|
+
az: { year: "iiii", month: "aa", day: "gg" },
|
|
26
|
+
be: { year: "гггг", month: "мм", day: "дд" },
|
|
27
|
+
bg: { year: "гггг", month: "мм", day: "дд" },
|
|
28
|
+
bn: { year: "yyyy", month: "মিমি", day: "dd" },
|
|
29
|
+
br: { year: "bbbb", month: "mm", day: "dd" },
|
|
30
|
+
bs: { year: "gggg", month: "mm", day: "dd" },
|
|
31
|
+
ca: { year: "aaaa", month: "mm", day: "dd" },
|
|
32
|
+
cak: { year: "jjjj", month: "ii", day: "q'q'" },
|
|
33
|
+
ckb: { year: "ساڵ", month: "مانگ", day: "ڕۆژ" },
|
|
34
|
+
cs: { year: "rrrr", month: "mm", day: "dd" },
|
|
35
|
+
cy: { year: "bbbb", month: "mm", day: "dd" },
|
|
36
|
+
da: { year: "åååå", month: "mm", day: "dd" },
|
|
37
|
+
de: { year: "jjjj", month: "mm", day: "tt" },
|
|
38
|
+
dsb: { year: "llll", month: "mm", day: "źź" },
|
|
39
|
+
el: { year: "εεεε", month: "μμ", day: "ηη" },
|
|
40
|
+
en: { year: "yyyy", month: "mm", day: "dd" },
|
|
41
|
+
eo: { year: "jjjj", month: "mm", day: "tt" },
|
|
42
|
+
es: { year: "aaaa", month: "mm", day: "dd" },
|
|
43
|
+
et: { year: "aaaa", month: "kk", day: "pp" },
|
|
44
|
+
eu: { year: "uuuu", month: "hh", day: "ee" },
|
|
45
|
+
fa: { year: "سال", month: "ماه", day: "روز" },
|
|
46
|
+
ff: { year: "hhhh", month: "ll", day: "ññ" },
|
|
47
|
+
fi: { year: "vvvv", month: "kk", day: "pp" },
|
|
48
|
+
fr: { year: "aaaa", month: "mm", day: "jj" },
|
|
49
|
+
fy: { year: "jjjj", month: "mm", day: "dd" },
|
|
50
|
+
ga: { year: "bbbb", month: "mm", day: "ll" },
|
|
51
|
+
gd: { year: "bbbb", month: "mm", day: "ll" },
|
|
52
|
+
gl: { year: "aaaa", month: "mm", day: "dd" },
|
|
53
|
+
he: { year: "שנה", month: "חודש", day: "יום" },
|
|
54
|
+
hr: { year: "gggg", month: "mm", day: "dd" },
|
|
55
|
+
hsb: { year: "llll", month: "mm", day: "dd" },
|
|
56
|
+
hu: { year: "éééé", month: "hh", day: "nn" },
|
|
57
|
+
ia: { year: "aaaa", month: "mm", day: "dd" },
|
|
58
|
+
id: { year: "tttt", month: "bb", day: "hh" },
|
|
59
|
+
it: { year: "aaaa", month: "mm", day: "gg" },
|
|
60
|
+
ja: { year: " 年 ", month: "月", day: "日" },
|
|
61
|
+
ka: { year: "წწწწ", month: "თთ", day: "რრ" },
|
|
62
|
+
kk: { year: "жжжж", month: "аа", day: "кк" },
|
|
63
|
+
kn: { year: "ವವವವ", month: "ಮಿಮೀ", day: "ದಿದಿ" },
|
|
64
|
+
ko: { year: "연도", month: "월", day: "일" },
|
|
65
|
+
lb: { year: "jjjj", month: "mm", day: "dd" },
|
|
66
|
+
lo: { year: "ປປປປ", month: "ດດ", day: "ວວ" },
|
|
67
|
+
lt: { year: "mmmm", month: "mm", day: "dd" },
|
|
68
|
+
lv: { year: "gggg", month: "mm", day: "dd" },
|
|
69
|
+
meh: { year: "aaaa", month: "mm", day: "dd" },
|
|
70
|
+
ml: { year: "വർഷം", month: "മാസം", day: "തീയതി" },
|
|
71
|
+
ms: { year: "tttt", month: "mm", day: "hh" },
|
|
72
|
+
nl: { year: "jjjj", month: "mm", day: "dd" },
|
|
73
|
+
nn: { year: "åååå", month: "mm", day: "dd" },
|
|
74
|
+
no: { year: "åååå", month: "mm", day: "dd" },
|
|
75
|
+
oc: { year: "aaaa", month: "mm", day: "jj" },
|
|
76
|
+
pl: { year: "rrrr", month: "mm", day: "dd" },
|
|
77
|
+
pt: { year: "aaaa", month: "mm", day: "dd" },
|
|
78
|
+
rm: { year: "oooo", month: "mm", day: "dd" },
|
|
79
|
+
ro: { year: "aaaa", month: "ll", day: "zz" },
|
|
80
|
+
ru: { year: "гггг", month: "мм", day: "дд" },
|
|
81
|
+
sc: { year: "aaaa", month: "mm", day: "dd" },
|
|
82
|
+
scn: { year: "aaaa", month: "mm", day: "jj" },
|
|
83
|
+
sk: { year: "rrrr", month: "mm", day: "dd" },
|
|
84
|
+
sl: { year: "llll", month: "mm", day: "dd" },
|
|
85
|
+
sr: { year: "гггг", month: "мм", day: "дд" },
|
|
86
|
+
sv: { year: "åååå", month: "mm", day: "dd" },
|
|
87
|
+
szl: { year: "rrrr", month: "mm", day: "dd" },
|
|
88
|
+
tg: { year: "сссс", month: "мм", day: "рр" },
|
|
89
|
+
th: { year: "ปปปป", month: "ดด", day: "วว" },
|
|
90
|
+
tr: { year: "yyyy", month: "aa", day: "gg" },
|
|
91
|
+
uk: { year: "рррр", month: "мм", day: "дд" },
|
|
92
|
+
"zh-CN": { year: "年", month: "月", day: "日" },
|
|
93
|
+
"zh-TW": { year: "年", month: "月", day: "日" },
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
function getPlaceholderObj(locale: SupportedLocale | (string & {})) {
|
|
97
|
+
if (!isSupportedLocale(locale)) {
|
|
98
|
+
const localeLanguage = getLocaleLanguage(locale);
|
|
99
|
+
if (!isSupportedLocale(localeLanguage)) {
|
|
100
|
+
return placeholders.en;
|
|
101
|
+
} else {
|
|
102
|
+
return placeholders[localeLanguage];
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
return placeholders[locale];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
type Field = "era" | "year" | "month" | "day" | "hour" | "minute" | "second" | "dayPeriod";
|
|
110
|
+
|
|
111
|
+
export function getPlaceholder(
|
|
112
|
+
field: Field,
|
|
113
|
+
value: string,
|
|
114
|
+
locale: SupportedLocale | (string & {})
|
|
115
|
+
) {
|
|
116
|
+
if (isPlaceholderField(field)) return getPlaceholderObj(locale)[field];
|
|
117
|
+
if (isDefaultField(field)) return value;
|
|
118
|
+
if (isTimeField(field)) return "––";
|
|
119
|
+
return "";
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const isSupportedLocale = (locale: string): locale is SupportedLocale => supportedLocales.includes(locale as SupportedLocale);
|
|
123
|
+
|
|
124
|
+
const isPlaceholderField = (field: unknown): field is PlaceholderField => placeholderFields.includes(field as PlaceholderField);
|
|
125
|
+
|
|
126
|
+
const isTimeField = (field: unknown): field is "hour" | "minute" | "second" =>
|
|
127
|
+
field === "hour" || field === "minute" || field === "second";
|
|
128
|
+
|
|
129
|
+
const isDefaultField = (field: unknown): field is "era" | "dayPeriod" => field === "era" || field === "dayPeriod";
|
|
130
|
+
|
|
131
|
+
const getLocaleLanguage = (locale: string) => (Intl.Locale ? new Intl.Locale(locale).language : locale.split("-")[0]!);
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { CalendarDateTime, DateValue, Time, ZonedDateTime } from '@internationalized/date';
|
|
2
|
+
import type {
|
|
3
|
+
DATE_SEGMENT_PARTS,
|
|
4
|
+
EDITABLE_SEGMENT_PARTS,
|
|
5
|
+
NON_EDITABLE_SEGMENT_PARTS,
|
|
6
|
+
EDITABLE_TIME_SEGMENT_PARTS,
|
|
7
|
+
} from './field/parts.js';
|
|
8
|
+
|
|
9
|
+
export type Granularity = 'day' | 'hour' | 'minute' | 'second';
|
|
10
|
+
export type TimeGranularity = 'hour' | 'minute' | 'second';
|
|
11
|
+
export type HourCycle = 12 | 24;
|
|
12
|
+
export type WeekStartsOn = 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
13
|
+
|
|
14
|
+
export type DateMatcher = (date: DateValue) => boolean;
|
|
15
|
+
|
|
16
|
+
export type TimeValue = Time | CalendarDateTime | ZonedDateTime;
|
|
17
|
+
|
|
18
|
+
export type TimeValidator<T extends TimeValue> = (time: T) => string[] | string | void;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* A function that returns a string or array of strings as validation errors if the date is
|
|
22
|
+
* invalid, or nothing if the date is valid
|
|
23
|
+
*/
|
|
24
|
+
export type DateValidator = (date: DateValue) => string[] | string | void;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* A function that returns a string or array of strings as validation errors if the date range
|
|
28
|
+
* is invalid, or nothing if the date range is valid
|
|
29
|
+
*/
|
|
30
|
+
export type DateRangeValidator = (range: { start: DateValue; end: DateValue }) => string[] | string | void;
|
|
31
|
+
|
|
32
|
+
export type TimeRangeValidator<T extends TimeValue = Time> = (range: { start: T; end: T }) => string[] | string | void;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* A callback fired when the date field's value is invalid. Use this to display an error
|
|
36
|
+
* message to the user.
|
|
37
|
+
*/
|
|
38
|
+
export type DateOnInvalid = (reason: 'min' | 'max' | 'custom', msg?: string | string[]) => void;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* A callback fired when the time field's value is invalid. Use this to display an error
|
|
42
|
+
* message to the user.
|
|
43
|
+
*/
|
|
44
|
+
export type TimeOnInvalid = (reason: 'min' | 'max' | 'custom', msg?: string | string[]) => void;
|
|
45
|
+
|
|
46
|
+
export type DateRange = {
|
|
47
|
+
start: DateValue | undefined;
|
|
48
|
+
end: DateValue | undefined;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export type TimeEndpoints<T extends TimeValue = Time> = {
|
|
52
|
+
start: T | undefined;
|
|
53
|
+
end: T | undefined;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export type Month<T> = {
|
|
57
|
+
/**
|
|
58
|
+
* A `DateValue` used to represent the month. Since days
|
|
59
|
+
* from the previous and next months may be included in the
|
|
60
|
+
* calendar grid, we need a source of truth for the value
|
|
61
|
+
* the grid is representing.
|
|
62
|
+
*/
|
|
63
|
+
value: DateValue;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* An array of arrays representing the weeks in the calendar.
|
|
67
|
+
* Each sub-array represents a week, and contains the dates for each
|
|
68
|
+
* day in that week. This structure is useful for rendering the calendar
|
|
69
|
+
* grid using a table, where each row represents a week and each cell
|
|
70
|
+
* represents a day.
|
|
71
|
+
*/
|
|
72
|
+
weeks: T[][];
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* An array of all the dates in the current month, including dates from
|
|
76
|
+
* the previous and next months that are used to fill out the calendar grid.
|
|
77
|
+
* This array is useful for rendering the calendar grid in a customizable way,
|
|
78
|
+
* as it provides all the dates that should be displayed in the grid in a flat
|
|
79
|
+
* array.
|
|
80
|
+
*/
|
|
81
|
+
dates: T[];
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export type DateSegmentPart = (typeof DATE_SEGMENT_PARTS)[number];
|
|
85
|
+
export type EditableTimeSegmentPart = (typeof EDITABLE_TIME_SEGMENT_PARTS)[number];
|
|
86
|
+
export type EditableSegmentPart = (typeof EDITABLE_SEGMENT_PARTS)[number];
|
|
87
|
+
export type NonEditableSegmentPart = (typeof NON_EDITABLE_SEGMENT_PARTS)[number];
|
|
88
|
+
export type SegmentPart = EditableSegmentPart | NonEditableSegmentPart;
|
|
89
|
+
|
|
90
|
+
export type TimeSegmentPart = EditableTimeSegmentPart | 'literal' | 'timeZoneName';
|
|
91
|
+
export type AnyTimeExceptLiteral = Exclude<TimeSegmentPart, 'literal'>;
|
|
92
|
+
|
|
93
|
+
export type AnyExceptLiteral = Exclude<SegmentPart, 'literal'>;
|
|
94
|
+
|
|
95
|
+
export type DayPeriod = 'AM' | 'PM' | null;
|
|
96
|
+
export type DateSegmentObj = {
|
|
97
|
+
[K in DateSegmentPart]: string | null;
|
|
98
|
+
};
|
|
99
|
+
export type TimeSegmentObj = {
|
|
100
|
+
[K in EditableTimeSegmentPart]: K extends 'dayPeriod' ? DayPeriod : string | null;
|
|
101
|
+
};
|
|
102
|
+
export type DateAndTimeSegmentObj = DateSegmentObj & TimeSegmentObj;
|
|
103
|
+
export type SegmentValueObj = DateSegmentObj | DateAndTimeSegmentObj;
|
|
104
|
+
export type SegmentContentObj = Record<EditableSegmentPart, string>;
|
|
105
|
+
|
|
106
|
+
export type TimeSegmentValueObj = TimeSegmentObj;
|
|
107
|
+
export type TimeSegmentContentObj = Record<EditableTimeSegmentPart, string>;
|
|
108
|
+
|
|
109
|
+
export type SegmentState = {
|
|
110
|
+
lastKeyZero: boolean;
|
|
111
|
+
hasLeftFocus: boolean;
|
|
112
|
+
updating: string | null;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
export type SegmentStateMap = {
|
|
116
|
+
[K in EditableSegmentPart]: SegmentState;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export type TimeSegmentStateMap = {
|
|
120
|
+
[K in EditableTimeSegmentPart]: SegmentState;
|
|
121
|
+
};
|