@human-kit/svelte-components 1.0.0-alpha.1 → 1.0.0-alpha.10
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/dist/FOCUS_STATE_CONTRACT.md +63 -0
- package/dist/FOCUS_STATE_REVIEW_TEMPLATE.md +70 -0
- package/dist/button/README.md +48 -0
- package/dist/button/TODO.md +13 -0
- package/dist/button/index.d.ts +5 -0
- package/dist/button/index.js +4 -0
- package/dist/button/index.parts.d.ts +1 -0
- package/dist/button/index.parts.js +1 -0
- package/dist/button/root/README.md +43 -0
- package/dist/button/root/button-root.svelte +362 -0
- package/dist/button/root/button-root.svelte.d.ts +21 -0
- package/dist/button/root/button-test.svelte +76 -0
- package/dist/button/root/button-test.svelte.d.ts +11 -0
- package/dist/calendar/README.md +66 -0
- package/dist/calendar/TODO.md +23 -0
- package/dist/calendar/body-cell/README.md +15 -0
- package/dist/calendar/body-cell/calendar-body-cell.svelte +230 -0
- package/dist/calendar/body-cell/calendar-body-cell.svelte.d.ts +9 -0
- package/dist/calendar/grid/README.md +13 -0
- package/dist/calendar/grid/calendar-grid-month-scope.svelte +16 -0
- package/dist/calendar/grid/calendar-grid-month-scope.svelte.d.ts +8 -0
- package/dist/calendar/grid/calendar-grid.svelte +45 -0
- package/dist/calendar/grid/calendar-grid.svelte.d.ts +8 -0
- package/dist/calendar/grid/month-scope.d.ts +2 -0
- package/dist/calendar/grid/month-scope.js +8 -0
- package/dist/calendar/grid-body/README.md +13 -0
- package/dist/calendar/grid-body/calendar-grid-body-custom-test.svelte +13 -0
- package/dist/calendar/grid-body/calendar-grid-body-custom-test.svelte.d.ts +18 -0
- package/dist/calendar/grid-body/calendar-grid-body.svelte +36 -0
- package/dist/calendar/grid-body/calendar-grid-body.svelte.d.ts +8 -0
- package/dist/calendar/grid-header/README.md +13 -0
- package/dist/calendar/grid-header/calendar-grid-header-custom-test.svelte +13 -0
- package/dist/calendar/grid-header/calendar-grid-header-custom-test.svelte.d.ts +18 -0
- package/dist/calendar/grid-header/calendar-grid-header.svelte +31 -0
- package/dist/calendar/grid-header/calendar-grid-header.svelte.d.ts +8 -0
- package/dist/calendar/header-cell/README.md +14 -0
- package/dist/calendar/header-cell/calendar-header-cell-test.svelte +11 -0
- package/dist/calendar/header-cell/calendar-header-cell-test.svelte.d.ts +18 -0
- package/dist/calendar/header-cell/calendar-header-cell.svelte +16 -0
- package/dist/calendar/header-cell/calendar-header-cell.svelte.d.ts +8 -0
- package/dist/calendar/heading/README.md +13 -0
- package/dist/calendar/heading/calendar-heading.svelte +17 -0
- package/dist/calendar/heading/calendar-heading.svelte.d.ts +5 -0
- package/dist/calendar/index.d.ts +13 -0
- package/dist/calendar/index.js +13 -0
- package/dist/calendar/index.parts.d.ts +9 -0
- package/dist/calendar/index.parts.js +9 -0
- package/dist/calendar/root/README.md +24 -0
- package/dist/calendar/root/calendar-root-bind-value-test.svelte +14 -0
- package/dist/calendar/root/calendar-root-bind-value-test.svelte.d.ts +3 -0
- package/dist/calendar/root/calendar-root-controlled-clear-test.svelte +20 -0
- package/dist/calendar/root/calendar-root-controlled-clear-test.svelte.d.ts +3 -0
- package/dist/calendar/root/calendar-root-test.svelte +71 -0
- package/dist/calendar/root/calendar-root-test.svelte.d.ts +13 -0
- package/dist/calendar/root/calendar-root.svelte +143 -0
- package/dist/calendar/root/calendar-root.svelte.d.ts +31 -0
- package/dist/calendar/root/context.d.ts +66 -0
- package/dist/calendar/root/context.js +727 -0
- package/dist/calendar/root/date-utils.d.ts +17 -0
- package/dist/calendar/root/date-utils.js +94 -0
- package/dist/calendar/trigger-next/README.md +14 -0
- package/dist/calendar/trigger-next/calendar-trigger-next.svelte +43 -0
- package/dist/calendar/trigger-next/calendar-trigger-next.svelte.d.ts +9 -0
- package/dist/calendar/trigger-previous/README.md +14 -0
- package/dist/calendar/trigger-previous/calendar-trigger-previous.svelte +43 -0
- package/dist/calendar/trigger-previous/calendar-trigger-previous.svelte.d.ts +9 -0
- package/dist/checkbox/README.md +53 -0
- package/dist/checkbox/TODO.md +16 -0
- package/dist/checkbox/index.d.ts +6 -0
- package/dist/checkbox/index.js +6 -0
- package/dist/checkbox/index.parts.d.ts +2 -0
- package/dist/checkbox/index.parts.js +2 -0
- package/dist/checkbox/indicator/README.md +23 -0
- package/dist/checkbox/indicator/checkbox-indicator.svelte +43 -0
- package/dist/checkbox/indicator/checkbox-indicator.svelte.d.ts +10 -0
- package/dist/checkbox/root/README.md +47 -0
- package/dist/checkbox/root/checkbox-label-test.svelte +10 -0
- package/dist/checkbox/root/checkbox-label-test.svelte.d.ts +18 -0
- package/dist/checkbox/root/checkbox-root.svelte +361 -0
- package/dist/checkbox/root/checkbox-root.svelte.d.ts +23 -0
- package/dist/checkbox/root/checkbox-test.svelte +59 -0
- package/dist/checkbox/root/checkbox-test.svelte.d.ts +18 -0
- package/dist/checkbox/root/context.d.ts +21 -0
- package/dist/checkbox/root/context.js +15 -0
- package/dist/clock/README.md +75 -0
- package/dist/clock/axis/README.md +24 -0
- package/dist/clock/axis/clock-axis.svelte +37 -0
- package/dist/clock/axis/clock-axis.svelte.d.ts +8 -0
- package/dist/clock/hooks/use-wheel-scroll.svelte.d.ts +16 -0
- package/dist/clock/hooks/use-wheel-scroll.svelte.js +336 -0
- package/dist/clock/index.d.ts +10 -0
- package/dist/clock/index.js +10 -0
- package/dist/clock/index.parts.d.ts +4 -0
- package/dist/clock/index.parts.js +4 -0
- package/dist/clock/root/README.md +38 -0
- package/dist/clock/root/clock-root-test.svelte +62 -0
- package/dist/clock/root/clock-root-test.svelte.d.ts +14 -0
- package/dist/clock/root/clock-root.svelte +329 -0
- package/dist/clock/root/clock-root.svelte.d.ts +25 -0
- package/dist/clock/root/context.d.ts +22 -0
- package/dist/clock/root/context.js +15 -0
- package/dist/clock/root/resolve-visible-columns.d.ts +7 -0
- package/dist/clock/root/resolve-visible-columns.js +16 -0
- package/dist/clock/root/time-utils.d.ts +48 -0
- package/dist/clock/root/time-utils.js +314 -0
- package/dist/clock/root/wheel-options.d.ts +17 -0
- package/dist/clock/root/wheel-options.js +63 -0
- package/dist/clock/wheel-column/README.md +25 -0
- package/dist/clock/wheel-column/clock-wheel-column-bindable-test.svelte +16 -0
- package/dist/clock/wheel-column/clock-wheel-column-bindable-test.svelte.d.ts +3 -0
- package/dist/clock/wheel-column/clock-wheel-column-custom-snippet-test.svelte +29 -0
- package/dist/clock/wheel-column/clock-wheel-column-custom-snippet-test.svelte.d.ts +6 -0
- package/dist/clock/wheel-column/clock-wheel-column-default-height-test.svelte +11 -0
- package/dist/clock/wheel-column/clock-wheel-column-default-height-test.svelte.d.ts +3 -0
- package/dist/clock/wheel-column/clock-wheel-column-test.svelte +38 -0
- package/dist/clock/wheel-column/clock-wheel-column-test.svelte.d.ts +12 -0
- package/dist/clock/wheel-column/clock-wheel-column-tp-test.svelte +38 -0
- package/dist/clock/wheel-column/clock-wheel-column-tp-test.svelte.d.ts +12 -0
- package/dist/clock/wheel-column/clock-wheel-column-untagged-snippet-test.svelte +29 -0
- package/dist/clock/wheel-column/clock-wheel-column-untagged-snippet-test.svelte.d.ts +6 -0
- package/dist/clock/wheel-column/clock-wheel-column.svelte +499 -0
- package/dist/clock/wheel-column/clock-wheel-column.svelte.d.ts +17 -0
- package/dist/clock/wheel-item/README.md +17 -0
- package/dist/clock/wheel-item/clock-wheel-item.svelte +49 -0
- package/dist/clock/wheel-item/clock-wheel-item.svelte.d.ts +17 -0
- package/dist/combobox/README.md +46 -0
- package/dist/combobox/TODO.md +28 -175
- package/dist/combobox/button/README.md +20 -0
- package/dist/combobox/button/combobox-button-test.svelte +27 -0
- package/dist/combobox/button/combobox-button-test.svelte.d.ts +6 -0
- package/dist/combobox/button/combobox-button.svelte +10 -11
- package/dist/combobox/clear/README.md +21 -0
- package/dist/combobox/clear/combobox-clear-test.svelte +34 -0
- package/dist/combobox/clear/combobox-clear-test.svelte.d.ts +3 -0
- package/dist/combobox/clear/combobox-clear.svelte +61 -0
- package/dist/combobox/clear/combobox-clear.svelte.d.ts +9 -0
- package/dist/combobox/index.d.ts +5 -3
- package/dist/combobox/index.js +5 -3
- package/dist/combobox/index.parts.d.ts +2 -0
- package/dist/combobox/index.parts.js +2 -0
- package/dist/combobox/input/README.md +16 -0
- package/dist/combobox/input/combobox-input.svelte +43 -12
- package/dist/combobox/item/README.md +27 -0
- package/dist/combobox/item/combobox-item-implicit-text-test.svelte +1 -1
- package/dist/combobox/item/combobox-listboxitem.svelte +1 -9
- package/dist/combobox/item-indicator/README.md +15 -0
- package/dist/combobox/item-indicator/combobox-item-indicator.svelte +4 -15
- package/dist/combobox/list/README.md +27 -0
- package/dist/combobox/list/combobox-listbox.svelte.d.ts +1 -1
- package/dist/combobox/popover/README.md +13 -0
- package/dist/combobox/popover/combobox-popover.svelte +133 -17
- package/dist/combobox/popover/combobox-scrollable-list-test.svelte +23 -0
- package/dist/combobox/popover/combobox-scrollable-list-test.svelte.d.ts +18 -0
- package/dist/combobox/root/README.md +45 -0
- package/dist/combobox/root/combobox-multiselect-test.svelte +1 -1
- package/dist/combobox/root/combobox-numeric-string-id-test.svelte +1 -1
- package/dist/combobox/root/combobox-test.svelte +16 -3
- package/dist/combobox/root/combobox-test.svelte.d.ts +1 -0
- package/dist/combobox/root/combobox.svelte +78 -2
- package/dist/combobox/root/combobox.svelte.d.ts +1 -0
- package/dist/combobox/root/context.d.ts +9 -1
- package/dist/combobox/tag/README.md +37 -0
- package/dist/combobox/tag-remove/README.md +14 -0
- package/dist/combobox/tag-remove/combobox-tag-remove.svelte +3 -2
- package/dist/combobox/tags/README.md +23 -0
- package/dist/combobox/trigger/README.md +21 -0
- package/dist/combobox/trigger/combobox-trigger.svelte +56 -0
- package/dist/combobox/trigger/combobox-trigger.svelte.d.ts +9 -0
- package/dist/datepicker/README.md +100 -0
- package/dist/datepicker/TODO.md +28 -0
- package/dist/datepicker/calendar/README.md +19 -0
- package/dist/datepicker/calendar/date-picker-calendar-unsafe-props-test.svelte +60 -0
- package/dist/datepicker/calendar/date-picker-calendar-unsafe-props-test.svelte.d.ts +3 -0
- package/dist/datepicker/calendar/date-picker-calendar.svelte +65 -0
- package/dist/datepicker/calendar/date-picker-calendar.svelte.d.ts +10 -0
- package/dist/datepicker/index.d.ts +18 -0
- package/dist/datepicker/index.js +18 -0
- package/dist/datepicker/index.parts.d.ts +14 -0
- package/dist/datepicker/index.parts.js +14 -0
- package/dist/datepicker/input/README.md +15 -0
- package/dist/datepicker/input/date-picker-input.svelte +108 -0
- package/dist/datepicker/input/date-picker-input.svelte.d.ts +11 -0
- package/dist/datepicker/internal/strict-props.d.ts +2 -0
- package/dist/datepicker/internal/strict-props.js +28 -0
- package/dist/datepicker/popover/README.md +20 -0
- package/dist/datepicker/popover/date-picker-popover-handler-test.svelte +57 -0
- package/dist/datepicker/popover/date-picker-popover-handler-test.svelte.d.ts +3 -0
- package/dist/datepicker/popover/date-picker-popover-unsafe-props-test.svelte +45 -0
- package/dist/datepicker/popover/date-picker-popover-unsafe-props-test.svelte.d.ts +18 -0
- package/dist/datepicker/popover/date-picker-popover.svelte +87 -0
- package/dist/datepicker/popover/date-picker-popover.svelte.d.ts +7 -0
- package/dist/datepicker/root/README.md +38 -0
- package/dist/datepicker/root/context.d.ts +43 -0
- package/dist/datepicker/root/context.js +15 -0
- package/dist/datepicker/root/date-picker-bindable-empty-test.svelte +24 -0
- package/dist/datepicker/root/date-picker-bindable-empty-test.svelte.d.ts +3 -0
- package/dist/datepicker/root/date-picker-bindable-test.svelte +41 -0
- package/dist/datepicker/root/date-picker-bindable-test.svelte.d.ts +3 -0
- package/dist/datepicker/root/date-picker-empty-test.svelte +47 -0
- package/dist/datepicker/root/date-picker-empty-test.svelte.d.ts +3 -0
- package/dist/datepicker/root/date-picker-locale-typing-test.svelte +47 -0
- package/dist/datepicker/root/date-picker-locale-typing-test.svelte.d.ts +3 -0
- package/dist/datepicker/root/date-picker-open-cancel-test.svelte +54 -0
- package/dist/datepicker/root/date-picker-open-cancel-test.svelte.d.ts +8 -0
- package/dist/datepicker/root/date-picker-root.svelte +495 -0
- package/dist/datepicker/root/date-picker-root.svelte.d.ts +24 -0
- package/dist/datepicker/root/date-picker-test.svelte +86 -0
- package/dist/datepicker/root/date-picker-test.svelte.d.ts +13 -0
- package/dist/datepicker/root/date-utils.d.ts +17 -0
- package/dist/datepicker/root/date-utils.js +138 -0
- package/dist/datepicker/root/draft-evaluation.d.ts +13 -0
- package/dist/datepicker/root/draft-evaluation.js +56 -0
- package/dist/datepicker/root/focus-controller.d.ts +3 -0
- package/dist/datepicker/root/focus-controller.js +15 -0
- package/dist/datepicker/root/open-change.d.ts +5 -0
- package/dist/datepicker/root/open-change.js +13 -0
- package/dist/datepicker/root/open-controller.d.ts +7 -0
- package/dist/datepicker/root/open-controller.js +15 -0
- package/dist/datepicker/root/segment-controller.d.ts +8 -0
- package/dist/datepicker/root/segment-controller.js +53 -0
- package/dist/datepicker/root/segment-state.d.ts +18 -0
- package/dist/datepicker/root/segment-state.js +134 -0
- package/dist/datepicker/root/value-commit.d.ts +4 -0
- package/dist/datepicker/root/value-commit.js +8 -0
- package/dist/datepicker/segment/README.md +14 -0
- package/dist/datepicker/segment/date-picker-segment.svelte +319 -0
- package/dist/datepicker/segment/date-picker-segment.svelte.d.ts +9 -0
- package/dist/datepicker/trigger/README.md +14 -0
- package/dist/datepicker/trigger/date-picker-trigger.svelte +110 -0
- package/dist/datepicker/trigger/date-picker-trigger.svelte.d.ts +9 -0
- package/dist/dialog/README.md +35 -0
- package/dist/dialog/content/README.md +16 -0
- package/dist/dialog/content/dialog-content.svelte +6 -6
- package/dist/dialog/index.d.ts +3 -3
- package/dist/dialog/index.js +2 -2
- package/dist/dialog/overlay/README.md +13 -0
- package/dist/dialog/portal/README.md +12 -0
- package/dist/dialog/root/README.md +53 -0
- package/dist/dialog/root/context.d.ts +2 -1
- package/dist/dialog/root/dialog-root.svelte +9 -2
- package/dist/dialog/trigger/README.md +12 -0
- package/dist/dialog/trigger/dialog-trigger-multi-button-test.svelte +19 -0
- package/dist/dialog/trigger/dialog-trigger-multi-button-test.svelte.d.ts +18 -0
- package/dist/dialog/trigger/dialog-trigger.svelte +18 -6
- package/dist/index.d.ts +31 -13
- package/dist/index.js +31 -13
- package/dist/input/README.md +38 -0
- package/dist/input/TODO.md +12 -0
- package/dist/input/input-test.svelte +43 -0
- package/dist/input/input-test.svelte.d.ts +12 -0
- package/dist/input/input.svelte +151 -7
- package/dist/input/input.svelte.d.ts +8 -2
- package/dist/listbox/README.md +26 -0
- package/dist/listbox/index.d.ts +3 -3
- package/dist/listbox/index.js +3 -3
- package/dist/listbox/item/README.md +25 -0
- package/dist/listbox/item/listbox-item.svelte +152 -2
- package/dist/listbox/item/listbox-item.svelte.d.ts +2 -0
- package/dist/listbox/root/README.md +40 -0
- package/dist/listbox/root/listbox-test.svelte +14 -2
- package/dist/listbox/root/listbox-test.svelte.d.ts +1 -0
- package/dist/listbox/root/listbox.svelte +44 -0
- package/dist/listbox/root/listbox.svelte.d.ts +2 -2
- package/dist/locale-provider/context.d.ts +8 -0
- package/dist/locale-provider/context.js +18 -0
- package/dist/locale-provider/index.d.ts +4 -0
- package/dist/locale-provider/index.js +4 -0
- package/dist/locale-provider/locale-provider-initial-value-test.svelte +15 -0
- package/dist/locale-provider/locale-provider-initial-value-test.svelte.d.ts +7 -0
- package/dist/locale-provider/locale-provider-test.svelte +20 -0
- package/dist/locale-provider/locale-provider-test.svelte.d.ts +6 -0
- package/dist/locale-provider/locale-provider-value-probe.svelte +22 -0
- package/dist/locale-provider/locale-provider-value-probe.svelte.d.ts +6 -0
- package/dist/locale-provider/locale-provider.svelte +23 -0
- package/dist/locale-provider/locale-provider.svelte.d.ts +8 -0
- package/dist/popover/README.md +42 -0
- package/dist/popover/content/README.md +36 -0
- package/dist/popover/content/popover-content-standalone-test.svelte +28 -0
- package/dist/popover/content/popover-content-standalone-test.svelte.d.ts +6 -0
- package/dist/popover/content/popover-content-test.svelte +32 -2
- package/dist/popover/content/popover-content-test.svelte.d.ts +3 -1
- package/dist/popover/content/popover-content.svelte +276 -23
- package/dist/popover/content/popover-content.svelte.d.ts +5 -1
- package/dist/popover/index.d.ts +3 -3
- package/dist/popover/index.js +3 -5
- package/dist/popover/root/README.md +25 -0
- package/dist/popover/root/context.d.ts +16 -7
- package/dist/popover/root/context.js +0 -2
- package/dist/popover/root/focus-state.d.ts +4 -0
- package/dist/popover/root/focus-state.js +33 -0
- package/dist/popover/root/popover-root.svelte +90 -17
- package/dist/popover/root/popover-root.svelte.d.ts +2 -1
- package/dist/popover/root/popover-test.svelte +2 -1
- package/dist/popover/root/popover-test.svelte.d.ts +2 -1
- package/dist/popover/trigger/README.md +23 -0
- package/dist/popover/trigger/popover-trigger-button.svelte +14 -10
- package/dist/popover/trigger/popover-trigger-button.svelte.d.ts +2 -3
- package/dist/popover/trigger/popover-trigger-multi-button-test.svelte +16 -0
- package/dist/popover/trigger/popover-trigger-multi-button-test.svelte.d.ts +18 -0
- package/dist/popover/trigger/popover-trigger.svelte +19 -7
- package/dist/portal/portal.svelte +3 -1
- package/dist/primitives/click-outside.d.ts +1 -1
- package/dist/primitives/click-outside.js +1 -1
- package/dist/primitives/floating.js +12 -4
- package/dist/primitives/focus-trap.d.ts +7 -2
- package/dist/primitives/focus-trap.js +50 -17
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.js +1 -0
- package/dist/primitives/input-modality.d.ts +7 -0
- package/dist/primitives/input-modality.js +125 -0
- package/dist/table/IMPLEMENTATION_NOTES.md +8 -0
- package/dist/table/PLAN-HIDDEN-COLUMNS.md +152 -0
- package/dist/table/PLAN.md +924 -0
- package/dist/table/README.md +116 -0
- package/dist/table/SELECTION_CHECKBOX_PLAN.md +234 -0
- package/dist/table/TODO.md +100 -0
- package/dist/table/body/README.md +24 -0
- package/dist/table/body/table-body.svelte +25 -0
- package/dist/table/body/table-body.svelte.d.ts +9 -0
- package/dist/table/cell/README.md +25 -0
- package/dist/table/cell/table-cell.svelte +247 -0
- package/dist/table/cell/table-cell.svelte.d.ts +9 -0
- package/dist/table/checkbox/README.md +38 -0
- package/dist/table/checkbox/table-checkbox-test.svelte +121 -0
- package/dist/table/checkbox/table-checkbox-test.svelte.d.ts +16 -0
- package/dist/table/checkbox/table-checkbox.svelte +274 -0
- package/dist/table/checkbox/table-checkbox.svelte.d.ts +13 -0
- package/dist/table/checkbox-indicator/README.md +29 -0
- package/dist/table/checkbox-indicator/table-checkbox-indicator.svelte +22 -0
- package/dist/table/checkbox-indicator/table-checkbox-indicator.svelte.d.ts +10 -0
- package/dist/table/column/README.md +32 -0
- package/dist/table/column/table-column.svelte +108 -0
- package/dist/table/column/table-column.svelte.d.ts +18 -0
- package/dist/table/column-header-cell/README.md +28 -0
- package/dist/table/column-header-cell/table-column-header-cell.svelte +281 -0
- package/dist/table/column-header-cell/table-column-header-cell.svelte.d.ts +9 -0
- package/dist/table/column-resizer/README.md +32 -0
- package/dist/table/column-resizer/table-column-resizer-freeze-layout-test.svelte +51 -0
- package/dist/table/column-resizer/table-column-resizer-freeze-layout-test.svelte.d.ts +3 -0
- package/dist/table/column-resizer/table-column-resizer-selection-column-test.svelte +83 -0
- package/dist/table/column-resizer/table-column-resizer-selection-column-test.svelte.d.ts +3 -0
- package/dist/table/column-resizer/table-column-resizer-test.svelte +75 -0
- package/dist/table/column-resizer/table-column-resizer-test.svelte.d.ts +3 -0
- package/dist/table/column-resizer/table-column-resizer.svelte +616 -0
- package/dist/table/column-resizer/table-column-resizer.svelte.d.ts +11 -0
- package/dist/table/empty-state/README.md +25 -0
- package/dist/table/empty-state/table-empty-state.svelte +38 -0
- package/dist/table/empty-state/table-empty-state.svelte.d.ts +8 -0
- package/dist/table/footer/README.md +24 -0
- package/dist/table/footer/table-footer.svelte +19 -0
- package/dist/table/footer/table-footer.svelte.d.ts +9 -0
- package/dist/table/header/README.md +24 -0
- package/dist/table/header/table-header.svelte +19 -0
- package/dist/table/header/table-header.svelte.d.ts +9 -0
- package/dist/table/index.d.ts +16 -0
- package/dist/table/index.js +16 -0
- package/dist/table/index.parts.d.ts +12 -0
- package/dist/table/index.parts.js +12 -0
- package/dist/table/root/README.md +56 -0
- package/dist/table/root/context.d.ts +198 -0
- package/dist/table/root/context.js +1426 -0
- package/dist/table/root/table-reorder-test.svelte +64 -0
- package/dist/table/root/table-reorder-test.svelte.d.ts +3 -0
- package/dist/table/root/table-root.svelte +410 -0
- package/dist/table/root/table-root.svelte.d.ts +29 -0
- package/dist/table/root/table-test.svelte +165 -0
- package/dist/table/root/table-test.svelte.d.ts +25 -0
- package/dist/table/row/README.md +27 -0
- package/dist/table/row/table-row.svelte +321 -0
- package/dist/table/row/table-row.svelte.d.ts +13 -0
- package/dist/test-utils/focus-contract.d.ts +3 -0
- package/dist/test-utils/focus-contract.js +26 -0
- package/dist/timepicker/IMPLEMENTATION_PLAN.md +254 -0
- package/dist/timepicker/README.md +97 -0
- package/dist/timepicker/TODO.md +86 -0
- package/dist/timepicker/clock/README.md +14 -0
- package/dist/timepicker/clock/time-picker-clock-test.svelte +45 -0
- package/dist/timepicker/clock/time-picker-clock-test.svelte.d.ts +11 -0
- package/dist/timepicker/clock/time-picker-clock.svelte +65 -0
- package/dist/timepicker/clock/time-picker-clock.svelte.d.ts +10 -0
- package/dist/timepicker/index.d.ts +14 -0
- package/dist/timepicker/index.js +14 -0
- package/dist/timepicker/index.parts.d.ts +8 -0
- package/dist/timepicker/index.parts.js +8 -0
- package/dist/timepicker/input/README.md +15 -0
- package/dist/timepicker/input/time-picker-input-forwarding-test.svelte +40 -0
- package/dist/timepicker/input/time-picker-input-forwarding-test.svelte.d.ts +3 -0
- package/dist/timepicker/input/time-picker-input.svelte +109 -0
- package/dist/timepicker/input/time-picker-input.svelte.d.ts +11 -0
- package/dist/timepicker/internal/strict-props.d.ts +4 -0
- package/dist/timepicker/internal/strict-props.js +51 -0
- package/dist/timepicker/popover/README.md +20 -0
- package/dist/timepicker/popover/time-picker-popover-unsafe-props-test.svelte +22 -0
- package/dist/timepicker/popover/time-picker-popover-unsafe-props-test.svelte.d.ts +3 -0
- package/dist/timepicker/popover/time-picker-popover.svelte +89 -0
- package/dist/timepicker/popover/time-picker-popover.svelte.d.ts +7 -0
- package/dist/timepicker/root/README.md +42 -0
- package/dist/timepicker/root/context.d.ts +51 -0
- package/dist/timepicker/root/context.js +15 -0
- package/dist/timepicker/root/time-picker-12h-test.svelte +22 -0
- package/dist/timepicker/root/time-picker-12h-test.svelte.d.ts +3 -0
- package/dist/timepicker/root/time-picker-bindable-test.svelte +25 -0
- package/dist/timepicker/root/time-picker-bindable-test.svelte.d.ts +3 -0
- package/dist/timepicker/root/time-picker-empty-test.svelte +20 -0
- package/dist/timepicker/root/time-picker-empty-test.svelte.d.ts +3 -0
- package/dist/timepicker/root/time-picker-root.svelte +625 -0
- package/dist/timepicker/root/time-picker-root.svelte.d.ts +28 -0
- package/dist/timepicker/root/time-picker-test.svelte +72 -0
- package/dist/timepicker/root/time-picker-test.svelte.d.ts +15 -0
- package/dist/timepicker/root/time-utils.d.ts +1 -0
- package/dist/timepicker/root/time-utils.js +3 -0
- package/dist/timepicker/segment/README.md +14 -0
- package/dist/timepicker/segment/time-picker-segment.svelte +365 -0
- package/dist/timepicker/segment/time-picker-segment.svelte.d.ts +9 -0
- package/dist/timepicker/trigger/README.md +14 -0
- package/dist/timepicker/trigger/time-picker-trigger-forwarding-test.svelte +35 -0
- package/dist/timepicker/trigger/time-picker-trigger-forwarding-test.svelte.d.ts +3 -0
- package/dist/timepicker/trigger/time-picker-trigger.svelte +122 -0
- package/dist/timepicker/trigger/time-picker-trigger.svelte.d.ts +9 -0
- package/dist/utils/date-only.d.ts +11 -0
- package/dist/utils/date-only.js +53 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/package.json +41 -1
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
4
4
|
import { useListBoxContext } from '../root/context';
|
|
5
5
|
import { onMount, onDestroy } from 'svelte';
|
|
6
|
+
import {
|
|
7
|
+
shouldShowFocusVisible,
|
|
8
|
+
trackInteractionModality
|
|
9
|
+
} from '../../primitives/input-modality';
|
|
6
10
|
|
|
7
11
|
/**
|
|
8
12
|
* Props for the ListBox.Item component.
|
|
@@ -34,6 +38,8 @@
|
|
|
34
38
|
scrollOnFocus?: boolean;
|
|
35
39
|
/** Additional disabled state from parent. */
|
|
36
40
|
isParentDisabled?: boolean;
|
|
41
|
+
/** Override the visual pressed state. When provided, this value is used instead of internal press tracking. */
|
|
42
|
+
pressed?: boolean;
|
|
37
43
|
};
|
|
38
44
|
|
|
39
45
|
let {
|
|
@@ -50,6 +56,7 @@
|
|
|
50
56
|
onResolvedTextValue,
|
|
51
57
|
scrollOnFocus = false,
|
|
52
58
|
isParentDisabled = false,
|
|
59
|
+
pressed: pressedOverride,
|
|
53
60
|
...restProps
|
|
54
61
|
}: ListBoxItemProps = $props();
|
|
55
62
|
|
|
@@ -58,7 +65,10 @@
|
|
|
58
65
|
let elementRef: HTMLElement;
|
|
59
66
|
let isSelected = $state(false);
|
|
60
67
|
let isFocused = $state(false);
|
|
68
|
+
let isFocusVisible = $state(false);
|
|
61
69
|
let isHovered = $state(false);
|
|
70
|
+
let isPressed = $state(false);
|
|
71
|
+
let pressedKey: 'Enter' | 'Space' | null = $state(null);
|
|
62
72
|
|
|
63
73
|
// Focus: use override if provided, otherwise use internal state
|
|
64
74
|
const isFocusedComputed = $derived(
|
|
@@ -67,6 +77,11 @@
|
|
|
67
77
|
const isDisabledComputed = $derived(
|
|
68
78
|
disabled || listboxCtx.disabledIds.has(id) || isParentDisabled
|
|
69
79
|
);
|
|
80
|
+
const isPressedComputed = $derived(
|
|
81
|
+
pressedOverride !== undefined
|
|
82
|
+
? Boolean(pressedOverride) && !isDisabledComputed
|
|
83
|
+
: isPressed && !isDisabledComputed
|
|
84
|
+
);
|
|
70
85
|
|
|
71
86
|
// ID: use custom if provided, otherwise generate
|
|
72
87
|
const uniqueId = $derived(customId ?? `listbox-item-${id}`);
|
|
@@ -113,6 +128,18 @@
|
|
|
113
128
|
}
|
|
114
129
|
});
|
|
115
130
|
|
|
131
|
+
$effect(() => {
|
|
132
|
+
if (!isDisabledComputed) return;
|
|
133
|
+
clearPressedState();
|
|
134
|
+
isHovered = false;
|
|
135
|
+
isFocusVisible = false;
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
function clearPressedState() {
|
|
139
|
+
isPressed = false;
|
|
140
|
+
pressedKey = null;
|
|
141
|
+
}
|
|
142
|
+
|
|
116
143
|
function handleClick() {
|
|
117
144
|
if (isDisabledComputed) return;
|
|
118
145
|
|
|
@@ -128,12 +155,55 @@
|
|
|
128
155
|
}
|
|
129
156
|
|
|
130
157
|
function handleFocus() {
|
|
158
|
+
if (isDisabledComputed) return;
|
|
159
|
+
isFocusVisible = shouldShowFocusVisible(elementRef);
|
|
131
160
|
if (!disableFocusHandling) {
|
|
132
161
|
listboxCtx.setFocusedId(id);
|
|
133
162
|
}
|
|
134
163
|
}
|
|
135
164
|
|
|
136
|
-
function handleBlur() {
|
|
165
|
+
function handleBlur() {
|
|
166
|
+
isFocusVisible = false;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function handlePointerDown(event: PointerEvent) {
|
|
170
|
+
trackInteractionModality(event, elementRef);
|
|
171
|
+
isFocusVisible = false;
|
|
172
|
+
|
|
173
|
+
if (isDisabledComputed) {
|
|
174
|
+
event.preventDefault();
|
|
175
|
+
clearPressedState();
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (event.button !== 0) return;
|
|
180
|
+
isPressed = true;
|
|
181
|
+
pressedKey = null;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function handlePointerUp(event: PointerEvent) {
|
|
185
|
+
if (event.button !== 0) return;
|
|
186
|
+
isPressed = false;
|
|
187
|
+
pressedKey = null;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function handlePointerCancel() {
|
|
191
|
+
clearPressedState();
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function handlePointerEnter(event: PointerEvent) {
|
|
195
|
+
if (isDisabledComputed) return;
|
|
196
|
+
|
|
197
|
+
if ((event.buttons & 1) === 1 && pressedKey === null) {
|
|
198
|
+
isPressed = true;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function handlePointerLeave() {
|
|
203
|
+
if (pressedKey === null) {
|
|
204
|
+
isPressed = false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
137
207
|
|
|
138
208
|
function handleMouseEnter() {
|
|
139
209
|
if (!isDisabledComputed) {
|
|
@@ -143,17 +213,88 @@
|
|
|
143
213
|
|
|
144
214
|
function handleMouseLeave() {
|
|
145
215
|
isHovered = false;
|
|
216
|
+
if (pressedKey === null) {
|
|
217
|
+
isPressed = false;
|
|
218
|
+
}
|
|
146
219
|
}
|
|
147
220
|
|
|
148
221
|
// Keyboard is handled by parent container
|
|
149
|
-
function handleKeydown() {
|
|
222
|
+
function handleKeydown(event: KeyboardEvent) {
|
|
223
|
+
trackInteractionModality(event, elementRef);
|
|
224
|
+
if (isFocusedComputed) {
|
|
225
|
+
isFocusVisible = true;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const key =
|
|
229
|
+
event.key === 'Enter'
|
|
230
|
+
? 'Enter'
|
|
231
|
+
: event.key === ' ' || event.key === 'Spacebar'
|
|
232
|
+
? 'Space'
|
|
233
|
+
: null;
|
|
234
|
+
|
|
235
|
+
if (!key) return;
|
|
236
|
+
|
|
237
|
+
if (isDisabledComputed) {
|
|
238
|
+
event.preventDefault();
|
|
239
|
+
clearPressedState();
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (event.repeat && isPressed && pressedKey === key) return;
|
|
244
|
+
|
|
245
|
+
isPressed = true;
|
|
246
|
+
pressedKey = key;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function handleKeyup(event: KeyboardEvent) {
|
|
250
|
+
const key =
|
|
251
|
+
event.key === 'Enter'
|
|
252
|
+
? 'Enter'
|
|
253
|
+
: event.key === ' ' || event.key === 'Spacebar'
|
|
254
|
+
? 'Space'
|
|
255
|
+
: null;
|
|
256
|
+
|
|
257
|
+
if (!key) return;
|
|
258
|
+
|
|
259
|
+
if (isDisabledComputed) {
|
|
260
|
+
event.preventDefault();
|
|
261
|
+
clearPressedState();
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
if (pressedKey === key) {
|
|
266
|
+
clearPressedState();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
150
270
|
function handleMouseDown(event: MouseEvent) {
|
|
271
|
+
trackInteractionModality(event, elementRef);
|
|
272
|
+
isFocusVisible = false;
|
|
273
|
+
|
|
151
274
|
// Prevent focus stealing when used in ComboBox (disableFocusHandling=true)
|
|
152
275
|
// This keeps the focus on the input while allowing click selection
|
|
276
|
+
if (isDisabledComputed) {
|
|
277
|
+
event.preventDefault();
|
|
278
|
+
clearPressedState();
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (event.button === 0) {
|
|
283
|
+
isPressed = true;
|
|
284
|
+
pressedKey = null;
|
|
285
|
+
}
|
|
286
|
+
|
|
153
287
|
if (disableFocusHandling) {
|
|
154
288
|
event.preventDefault();
|
|
155
289
|
}
|
|
156
290
|
}
|
|
291
|
+
|
|
292
|
+
function handleMouseUp(event: MouseEvent) {
|
|
293
|
+
if (event.button !== 0) return;
|
|
294
|
+
if (pressedKey === null) {
|
|
295
|
+
clearPressedState();
|
|
296
|
+
}
|
|
297
|
+
}
|
|
157
298
|
</script>
|
|
158
299
|
|
|
159
300
|
<div
|
|
@@ -170,10 +311,19 @@
|
|
|
170
311
|
data-selected={isSelected || undefined}
|
|
171
312
|
data-disabled={isDisabledComputed || undefined}
|
|
172
313
|
data-focused={isFocusedComputed || undefined}
|
|
314
|
+
data-focus-visible={isFocusVisible || undefined}
|
|
173
315
|
data-hovered={isHovered || undefined}
|
|
316
|
+
data-pressed={isPressedComputed || undefined}
|
|
317
|
+
onpointerdown={handlePointerDown}
|
|
318
|
+
onpointerup={handlePointerUp}
|
|
319
|
+
onpointercancel={handlePointerCancel}
|
|
320
|
+
onpointerenter={handlePointerEnter}
|
|
321
|
+
onpointerleave={handlePointerLeave}
|
|
174
322
|
onmousedown={handleMouseDown}
|
|
323
|
+
onmouseup={handleMouseUp}
|
|
175
324
|
onclick={handleClick}
|
|
176
325
|
onkeydown={handleKeydown}
|
|
326
|
+
onkeyup={handleKeyup}
|
|
177
327
|
onfocus={handleFocus}
|
|
178
328
|
onblur={handleBlur}
|
|
179
329
|
onmouseenter={handleMouseEnter}
|
|
@@ -28,6 +28,8 @@ type ListBoxItemProps = Omit<HTMLAttributes<HTMLDivElement>, 'id' | 'children'>
|
|
|
28
28
|
scrollOnFocus?: boolean;
|
|
29
29
|
/** Additional disabled state from parent. */
|
|
30
30
|
isParentDisabled?: boolean;
|
|
31
|
+
/** Override the visual pressed state. When provided, this value is used instead of internal press tracking. */
|
|
32
|
+
pressed?: boolean;
|
|
31
33
|
};
|
|
32
34
|
declare const ListboxItem: import("svelte").Component<ListBoxItemProps, {}, "">;
|
|
33
35
|
type ListboxItem = ReturnType<typeof ListboxItem>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# ListBox Root
|
|
2
|
+
|
|
3
|
+
## API reference
|
|
4
|
+
|
|
5
|
+
### ListBox.Root
|
|
6
|
+
|
|
7
|
+
Name: `ListBox.Root`
|
|
8
|
+
Description: Main listbox state container that manages registration, selection, focus, and keyboard navigation.
|
|
9
|
+
|
|
10
|
+
| Prop | Type | Default | Description |
|
|
11
|
+
| ------------------- | ---------------------------------------- | --------------------- | ------------------------------------------------------------ |
|
|
12
|
+
| `selectionBehavior` | `'toggle' \| 'replace'` | `'toggle'` | Selection behavior for already selected options. |
|
|
13
|
+
| `emptyPlaceholder` | `string \| Snippet` | `'No items selected'` | Fallback content when no options are available. |
|
|
14
|
+
| `items` | `Iterable<T>` | `undefined` | Dynamic source collection for rendering. |
|
|
15
|
+
| `disabledIds` | `Iterable<string \| number>` | `undefined` | Option ids that should be disabled. |
|
|
16
|
+
| `selectionMode` | `'single' \| 'multiple'` | `'single'` | Selection mode for the listbox. |
|
|
17
|
+
| `value` | `Iterable<string \| number>` | `undefined` | Controlled selection values. |
|
|
18
|
+
| `defaultValue` | `Iterable<string \| number>` | `undefined` | Initial uncontrolled selection values. |
|
|
19
|
+
| `children` | `Snippet \| Snippet<[T]>` | `undefined` | Static or dynamic option rendering. |
|
|
20
|
+
| `class` | `string` | `''` | CSS class names for the root element. |
|
|
21
|
+
| `id` | `string` | `undefined` | DOM id for the listbox element. |
|
|
22
|
+
| `aria-label` | `string` | `undefined` | Accessible label for the listbox. |
|
|
23
|
+
| `onChange` | `(value: Set<string \| number>) => void` | `undefined` | Called when selection changes. |
|
|
24
|
+
| `context` | `ListBoxContext` | `bindable` | Exposes context via `bind:context` for advanced composition. |
|
|
25
|
+
| `element` | `HTMLElement` | `bindable` | Exposes root element via `bind:element`. |
|
|
26
|
+
|
|
27
|
+
### Context utilities
|
|
28
|
+
|
|
29
|
+
Name: `context.ts` helpers
|
|
30
|
+
Description: Low-level APIs for creating and consuming listbox state outside visual composition.
|
|
31
|
+
|
|
32
|
+
| Prop | Type | Default | Description |
|
|
33
|
+
| ----------------------------------------------- | ------------------------------------------------- | ----------- | ------------------------------------------------------------ |
|
|
34
|
+
| `createListBoxContext(options)` | `(CreateListBoxContextOptions) => ListBoxContext` | `{}` | Creates a listbox context with selection and focus behavior. |
|
|
35
|
+
| `useListBoxContext()` | `() => ListBoxContext` | `-` | Returns context and throws outside `ListBox.Root`. |
|
|
36
|
+
| `CreateListBoxContextOptions.selectionMode` | `'single' \| 'multiple'` | `'single'` | Initial selection mode. |
|
|
37
|
+
| `CreateListBoxContextOptions.selectionBehavior` | `'toggle' \| 'replace'` | `'toggle'` | Initial selection behavior. |
|
|
38
|
+
| `CreateListBoxContextOptions.disabledIds` | `Iterable<string \| number>` | `undefined` | Initial disabled ids. |
|
|
39
|
+
| `CreateListBoxContextOptions.initialSelection` | `Set<string \| number>` | `new Set()` | Initial uncontrolled selection set. |
|
|
40
|
+
| `CreateListBoxContextOptions.onSelectionChange` | `(selection) => void` | `undefined` | Callback for selection updates. |
|
|
@@ -5,9 +5,17 @@
|
|
|
5
5
|
selectionMode?: 'single' | 'multiple';
|
|
6
6
|
selectionBehavior?: 'toggle' | 'replace';
|
|
7
7
|
disabledIds?: Iterable<string | number>;
|
|
8
|
+
pressedIds?: Iterable<string | number>;
|
|
8
9
|
};
|
|
9
10
|
|
|
10
|
-
let {
|
|
11
|
+
let {
|
|
12
|
+
selectionMode = 'single',
|
|
13
|
+
selectionBehavior = 'toggle',
|
|
14
|
+
disabledIds,
|
|
15
|
+
pressedIds
|
|
16
|
+
}: Props = $props();
|
|
17
|
+
|
|
18
|
+
const pressedIdSet = $derived(new Set(pressedIds ?? []));
|
|
11
19
|
|
|
12
20
|
const fruits = [
|
|
13
21
|
{ id: 'apple', name: 'Apple' },
|
|
@@ -20,7 +28,11 @@
|
|
|
20
28
|
|
|
21
29
|
<ListBox.Root {selectionMode} {selectionBehavior} {disabledIds} aria-label="Fruits list">
|
|
22
30
|
{#each fruits as fruit (fruit.id)}
|
|
23
|
-
<ListBox.Item
|
|
31
|
+
<ListBox.Item
|
|
32
|
+
id={fruit.id}
|
|
33
|
+
textValue={fruit.name}
|
|
34
|
+
pressed={pressedIdSet.has(fruit.id) ? true : undefined}
|
|
35
|
+
>
|
|
24
36
|
{fruit.name}
|
|
25
37
|
</ListBox.Item>
|
|
26
38
|
{/each}
|
|
@@ -2,6 +2,7 @@ type Props = {
|
|
|
2
2
|
selectionMode?: 'single' | 'multiple';
|
|
3
3
|
selectionBehavior?: 'toggle' | 'replace';
|
|
4
4
|
disabledIds?: Iterable<string | number>;
|
|
5
|
+
pressedIds?: Iterable<string | number>;
|
|
5
6
|
};
|
|
6
7
|
declare const ListboxTest: import("svelte").Component<Props, {}, "">;
|
|
7
8
|
type ListboxTest = ReturnType<typeof ListboxTest>;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
<script lang="ts" generics="T extends object = object">
|
|
2
2
|
import type { Snippet } from 'svelte';
|
|
3
3
|
import { createListBoxContext, type ListBoxContext } from './context';
|
|
4
|
+
import {
|
|
5
|
+
shouldShowFocusVisible,
|
|
6
|
+
trackInteractionModality
|
|
7
|
+
} from '../../primitives/input-modality';
|
|
4
8
|
|
|
5
9
|
/**
|
|
6
10
|
* Props for the ListBox component.
|
|
@@ -114,6 +118,40 @@
|
|
|
114
118
|
|
|
115
119
|
const itemsArray = $derived(items ? Array.from(items) : []);
|
|
116
120
|
const hasItems = $derived(itemsArray.length > 0 || itemCount > 0);
|
|
121
|
+
|
|
122
|
+
let focusWithin = $state(false);
|
|
123
|
+
let focusVisible = $state(false);
|
|
124
|
+
|
|
125
|
+
function syncFocusWithin() {
|
|
126
|
+
focusWithin =
|
|
127
|
+
!!listboxElement &&
|
|
128
|
+
!!document.activeElement &&
|
|
129
|
+
listboxElement.contains(document.activeElement);
|
|
130
|
+
if (!focusWithin) {
|
|
131
|
+
focusVisible = false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function handleFocusIn(event: FocusEvent) {
|
|
136
|
+
focusWithin = true;
|
|
137
|
+
focusVisible = shouldShowFocusVisible(event.target as HTMLElement | null);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function handleFocusOut() {
|
|
141
|
+
queueMicrotask(syncFocusWithin);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function handleMouseDown(event: MouseEvent) {
|
|
145
|
+
trackInteractionModality(event, event.target as HTMLElement | null);
|
|
146
|
+
focusVisible = false;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function handleKeyDown(event: KeyboardEvent) {
|
|
150
|
+
trackInteractionModality(event, event.target as HTMLElement | null);
|
|
151
|
+
if (focusWithin) {
|
|
152
|
+
focusVisible = true;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
117
155
|
</script>
|
|
118
156
|
|
|
119
157
|
<div
|
|
@@ -124,7 +162,13 @@
|
|
|
124
162
|
aria-label={ariaLabel}
|
|
125
163
|
class={className}
|
|
126
164
|
tabindex="0"
|
|
165
|
+
data-focus-within={focusWithin || undefined}
|
|
166
|
+
data-focus-visible={focusVisible || undefined}
|
|
127
167
|
use:keyboardAction
|
|
168
|
+
onfocusin={handleFocusIn}
|
|
169
|
+
onfocusout={handleFocusOut}
|
|
170
|
+
onmousedown={handleMouseDown}
|
|
171
|
+
onkeydown={handleKeyDown}
|
|
128
172
|
>
|
|
129
173
|
{#if items && children}
|
|
130
174
|
{#each itemsArray as item (item)}
|
|
@@ -31,7 +31,7 @@ declare function $$render<T extends object = object>(): {
|
|
|
31
31
|
element?: HTMLElement;
|
|
32
32
|
};
|
|
33
33
|
exports: {};
|
|
34
|
-
bindings: "value" | "
|
|
34
|
+
bindings: "value" | "element" | "context";
|
|
35
35
|
slots: {};
|
|
36
36
|
events: {};
|
|
37
37
|
};
|
|
@@ -39,7 +39,7 @@ declare class __sveltets_Render<T extends object = object> {
|
|
|
39
39
|
props(): ReturnType<typeof $$render<T>>['props'];
|
|
40
40
|
events(): ReturnType<typeof $$render<T>>['events'];
|
|
41
41
|
slots(): ReturnType<typeof $$render<T>>['slots'];
|
|
42
|
-
bindings(): "value" | "
|
|
42
|
+
bindings(): "value" | "element" | "context";
|
|
43
43
|
exports(): {};
|
|
44
44
|
}
|
|
45
45
|
interface $$IsomorphicComponent {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Readable } from 'svelte/store';
|
|
2
|
+
export type LocaleContext = {
|
|
3
|
+
locale: Readable<string | undefined>;
|
|
4
|
+
};
|
|
5
|
+
export declare function setLocaleContext(context: LocaleContext): void;
|
|
6
|
+
export declare function getLocaleContext(): LocaleContext | undefined;
|
|
7
|
+
export declare function useLocaleContext(): LocaleContext;
|
|
8
|
+
export declare function useLocaleContextOptional(): LocaleContext | undefined;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getContext, setContext } from 'svelte';
|
|
2
|
+
const KEY = Symbol('locale-provider');
|
|
3
|
+
export function setLocaleContext(context) {
|
|
4
|
+
setContext(KEY, context);
|
|
5
|
+
}
|
|
6
|
+
export function getLocaleContext() {
|
|
7
|
+
return getContext(KEY);
|
|
8
|
+
}
|
|
9
|
+
export function useLocaleContext() {
|
|
10
|
+
const context = getLocaleContext();
|
|
11
|
+
if (!context) {
|
|
12
|
+
throw new Error('LocaleProvider must wrap component tree when using useLocaleContext.');
|
|
13
|
+
}
|
|
14
|
+
return context;
|
|
15
|
+
}
|
|
16
|
+
export function useLocaleContextOptional() {
|
|
17
|
+
return getLocaleContext();
|
|
18
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { LocaleProvider } from '../index';
|
|
3
|
+
import LocaleProviderValueProbe from './locale-provider-value-probe.svelte';
|
|
4
|
+
|
|
5
|
+
type Props = {
|
|
6
|
+
locale?: string;
|
|
7
|
+
onValue?: (value: string | undefined) => void;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
let { locale = 'es-ES', onValue }: Props = $props();
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<LocaleProvider {locale}>
|
|
14
|
+
<LocaleProviderValueProbe {onValue} />
|
|
15
|
+
</LocaleProvider>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type Props = {
|
|
2
|
+
locale?: string;
|
|
3
|
+
onValue?: (value: string | undefined) => void;
|
|
4
|
+
};
|
|
5
|
+
declare const LocaleProviderInitialValueTest: import("svelte").Component<Props, {}, "">;
|
|
6
|
+
type LocaleProviderInitialValueTest = ReturnType<typeof LocaleProviderInitialValueTest>;
|
|
7
|
+
export default LocaleProviderInitialValueTest;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { LocaleProvider } from '../index';
|
|
3
|
+
import Calendar from '../calendar';
|
|
4
|
+
|
|
5
|
+
type Props = {
|
|
6
|
+
locale?: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
let { locale = 'es-ES' }: Props = $props();
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<LocaleProvider {locale}>
|
|
13
|
+
<Calendar.Root defaultValue="2026-02-10" aria-label="Locale provider test calendar">
|
|
14
|
+
<Calendar.Heading />
|
|
15
|
+
<Calendar.Grid>
|
|
16
|
+
<Calendar.GridHeader />
|
|
17
|
+
<Calendar.GridBody />
|
|
18
|
+
</Calendar.Grid>
|
|
19
|
+
</Calendar.Root>
|
|
20
|
+
</LocaleProvider>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { useLocaleContext } from './context';
|
|
3
|
+
|
|
4
|
+
type Props = {
|
|
5
|
+
onValue?: (value: string | undefined) => void;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
let { onValue }: Props = $props();
|
|
9
|
+
|
|
10
|
+
const { locale } = useLocaleContext();
|
|
11
|
+
const unsubscribe = locale.subscribe((value) => {
|
|
12
|
+
onValue?.(value);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
$effect(() => {
|
|
16
|
+
return () => {
|
|
17
|
+
unsubscribe();
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<div data-testid="locale-value-probe"></div>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
type Props = {
|
|
2
|
+
onValue?: (value: string | undefined) => void;
|
|
3
|
+
};
|
|
4
|
+
declare const LocaleProviderValueProbe: import("svelte").Component<Props, {}, "">;
|
|
5
|
+
type LocaleProviderValueProbe = ReturnType<typeof LocaleProviderValueProbe>;
|
|
6
|
+
export default LocaleProviderValueProbe;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import { writable } from 'svelte/store';
|
|
4
|
+
import { setLocaleContext } from './context';
|
|
5
|
+
|
|
6
|
+
type LocaleProviderProps = {
|
|
7
|
+
locale?: string;
|
|
8
|
+
children?: Snippet;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
let props: LocaleProviderProps = $props();
|
|
12
|
+
|
|
13
|
+
const localeStore = writable<string | undefined>(props.locale);
|
|
14
|
+
setLocaleContext({ locale: localeStore });
|
|
15
|
+
|
|
16
|
+
$effect(() => {
|
|
17
|
+
localeStore.set(props.locale);
|
|
18
|
+
});
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
{#if props.children}
|
|
22
|
+
{@render props.children()}
|
|
23
|
+
{/if}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
type LocaleProviderProps = {
|
|
3
|
+
locale?: string;
|
|
4
|
+
children?: Snippet;
|
|
5
|
+
};
|
|
6
|
+
declare const LocaleProvider: import("svelte").Component<LocaleProviderProps, {}, "">;
|
|
7
|
+
type LocaleProvider = ReturnType<typeof LocaleProvider>;
|
|
8
|
+
export default LocaleProvider;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Popover
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
`Popover` renders floating content anchored to a trigger element. It supports modal and non-modal interaction patterns, outside interaction handling, and configurable positioning.
|
|
6
|
+
|
|
7
|
+
## Usage guidelines
|
|
8
|
+
|
|
9
|
+
- Use `Popover.Root` to share open state and trigger reference.
|
|
10
|
+
- Use `Popover.Trigger` when you want to auto-wire an existing button in children.
|
|
11
|
+
- Use `Popover.TriggerButton` when you want a pre-wired trigger button component.
|
|
12
|
+
- Use `Popover.Content` inside `Popover.Root`, or in standalone mode with `open`, `triggerRef`, and `onOpenChange`.
|
|
13
|
+
- Configure `isNonModal`, `shouldCloseOnInteractOutside`, and `shouldCloseOnBlur` to match your interaction model.
|
|
14
|
+
|
|
15
|
+
## onOpenChange details
|
|
16
|
+
|
|
17
|
+
`Popover.Root` and standalone `Popover.Content` use:
|
|
18
|
+
|
|
19
|
+
- `onOpenChange(open, details)`
|
|
20
|
+
- `details.reason`: `trigger-press | imperative-action | none | escape-key | outside-press | focus-out | close-press`
|
|
21
|
+
- `details.event?`: native event that triggered the change when available
|
|
22
|
+
- `details.cancel()`: prevents the open-state transition
|
|
23
|
+
- `details.isCanceled`: reflects cancellation state inside the callback
|
|
24
|
+
|
|
25
|
+
## Anatomy
|
|
26
|
+
|
|
27
|
+
Import the component and compose its parts:
|
|
28
|
+
|
|
29
|
+
```svelte
|
|
30
|
+
<Popover.Root>
|
|
31
|
+
<Popover.Trigger>
|
|
32
|
+
<button>Open</button>
|
|
33
|
+
</Popover.Trigger>
|
|
34
|
+
<Popover.Content>
|
|
35
|
+
<div>Content</div>
|
|
36
|
+
</Popover.Content>
|
|
37
|
+
</Popover.Root>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
- `Popover.Root`
|
|
41
|
+
- `Popover.Trigger` or `Popover.TriggerButton`
|
|
42
|
+
- `Popover.Content`
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Popover Content
|
|
2
|
+
|
|
3
|
+
## API reference
|
|
4
|
+
|
|
5
|
+
### Popover.Content
|
|
6
|
+
|
|
7
|
+
Name: `Popover.Content`
|
|
8
|
+
Description: Floating panel rendered in a portal. Supports context mode (`Popover.Root`) and standalone controlled mode.
|
|
9
|
+
|
|
10
|
+
| Prop | Type | Default | Description |
|
|
11
|
+
| ------------------------------ | -------------------------------- | ----------- | ------------------------------------------------------------------------------ |
|
|
12
|
+
| `offset` | `number` | `8` | Main-axis offset from the anchor element. |
|
|
13
|
+
| `placement` | `ExtendedPlacement` | `'bottom'` | Preferred floating placement. |
|
|
14
|
+
| `shouldFlip` | `boolean` | `true` | Enables automatic fallback placement when space is limited. |
|
|
15
|
+
| `boundaryElement` | `Element \| null` | `null` | Optional boundary element for positioning constraints. |
|
|
16
|
+
| `children` | `Snippet` | `undefined` | Rendered popover panel content. |
|
|
17
|
+
| `class` | `string` | `''` | CSS class names for the panel element. |
|
|
18
|
+
| `isNonModal` | `boolean` | `false` | Disables modal behaviors (focus trap, scroll lock, outside aria hiding). |
|
|
19
|
+
| `shouldCloseOnInteractOutside` | `boolean` | `true` | Closes when interacting outside the panel. |
|
|
20
|
+
| `shouldCloseOnEscape` | `boolean` | `true` | Closes on Escape key press. |
|
|
21
|
+
| `shouldCloseOnBlur` | `boolean` | `undefined` | Closes on focus leaving trigger/content. Defaults to `true` in non-modal mode. |
|
|
22
|
+
| `open` | `boolean` | `undefined` | Controlled open state in standalone mode. |
|
|
23
|
+
| `triggerRef` | `HTMLElement \| null` | `null` | Trigger reference in standalone mode. |
|
|
24
|
+
| `onOpenChange` | `(open: boolean) => void` | `undefined` | Open-state callback in standalone mode. |
|
|
25
|
+
| `...restProps` | `HTMLAttributes<HTMLDivElement>` | `-` | Additional panel attributes. |
|
|
26
|
+
|
|
27
|
+
## Styling state
|
|
28
|
+
|
|
29
|
+
`Popover.Content` exposes RAC-style data attributes that can drive CSS or Tailwind animation utilities:
|
|
30
|
+
|
|
31
|
+
- `data-state="open" | "closed"`
|
|
32
|
+
- `data-entering`
|
|
33
|
+
- `data-exiting`
|
|
34
|
+
- `data-placement="top" | "right" | "bottom" | "left"`
|
|
35
|
+
|
|
36
|
+
Exit animations keep the panel mounted until the element's own CSS transition or animation finishes. If no motion is defined, the panel unmounts immediately.
|