@human-kit/svelte-components 1.0.0-alpha.2 → 1.0.0-alpha.21
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 +393 -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 +2 -1
- package/dist/calendar/TODO.md +21 -107
- package/dist/calendar/body-cell/README.md +15 -0
- package/dist/calendar/body-cell/calendar-body-cell.svelte +116 -41
- package/dist/calendar/grid/README.md +13 -0
- package/dist/calendar/grid-body/README.md +13 -0
- package/dist/calendar/grid-header/README.md +13 -0
- package/dist/calendar/header-cell/README.md +14 -0
- package/dist/calendar/heading/README.md +13 -0
- package/dist/calendar/index.d.ts +3 -3
- package/dist/calendar/index.js +3 -3
- package/dist/calendar/root/README.md +24 -0
- package/dist/calendar/root/calendar-root-test.svelte +4 -0
- package/dist/calendar/root/calendar-root-test.svelte.d.ts +1 -0
- package/dist/calendar/root/calendar-root.svelte +3 -0
- package/dist/calendar/root/calendar-root.svelte.d.ts +1 -0
- package/dist/calendar/root/context.d.ts +4 -0
- package/dist/calendar/root/context.js +28 -25
- package/dist/calendar/root/date-utils.d.ts +1 -1
- package/dist/calendar/root/date-utils.js +16 -26
- package/dist/calendar/trigger-next/README.md +14 -0
- package/dist/calendar/trigger-next/calendar-trigger-next.svelte +9 -4
- package/dist/calendar/trigger-next/calendar-trigger-next.svelte.d.ts +2 -1
- package/dist/calendar/trigger-previous/README.md +14 -0
- package/dist/calendar/trigger-previous/calendar-trigger-previous.svelte +9 -4
- package/dist/calendar/trigger-previous/calendar-trigger-previous.svelte.d.ts +2 -1
- 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 +386 -0
- package/dist/checkbox/root/checkbox-root.svelte.d.ts +29 -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 +8 -2
- package/dist/combobox/TODO.md +28 -175
- package/dist/combobox/button/README.md +8 -3
- 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/combobox-input.svelte +44 -12
- package/dist/combobox/item/combobox-item-implicit-text-test.svelte +1 -1
- package/dist/combobox/item/combobox-listboxitem.svelte +14 -11
- package/dist/combobox/item-indicator/combobox-item-indicator.svelte +4 -15
- package/dist/combobox/list/combobox-listbox.svelte +1 -0
- package/dist/combobox/list/combobox-listbox.svelte.d.ts +2 -1
- package/dist/combobox/popover/README.md +18 -4
- package/dist/combobox/popover/combobox-popover-props-test.svelte +38 -0
- package/dist/combobox/popover/combobox-popover-props-test.svelte.d.ts +11 -0
- package/dist/combobox/popover/combobox-popover.svelte +166 -23
- package/dist/combobox/popover/combobox-popover.svelte.d.ts +3 -3
- 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 +1 -0
- package/dist/combobox/root/combobox-multiselect-test.svelte +5 -3
- package/dist/combobox/root/combobox-multiselect-test.svelte.d.ts +1 -0
- package/dist/combobox/root/combobox-numeric-string-id-test.svelte +1 -1
- package/dist/combobox/root/combobox-test.svelte +23 -4
- package/dist/combobox/root/combobox-test.svelte.d.ts +2 -0
- package/dist/combobox/root/combobox.svelte +119 -13
- package/dist/combobox/root/combobox.svelte.d.ts +1 -0
- package/dist/combobox/root/context.d.ts +19 -1
- package/dist/combobox/tag-remove/combobox-tag-remove.svelte +3 -2
- 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/content/dialog-content.svelte +6 -6
- package/dist/dialog/index.d.ts +3 -3
- package/dist/dialog/index.js +2 -2
- package/dist/dialog/root/context.d.ts +2 -1
- package/dist/dialog/root/dialog-root.svelte +9 -2
- package/dist/dialog/trigger/dialog-trigger.svelte +3 -0
- package/dist/hooks/use-virtual-focus.svelte.js +3 -1
- package/dist/index.d.ts +31 -17
- package/dist/index.js +31 -17
- 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/index.d.ts +3 -3
- package/dist/listbox/index.js +3 -3
- package/dist/listbox/item/README.md +2 -1
- package/dist/listbox/item/listbox-item.svelte +260 -6
- package/dist/listbox/item/listbox-item.svelte.d.ts +6 -0
- package/dist/listbox/root/context.d.ts +6 -0
- package/dist/listbox/root/context.js +23 -13
- 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 +49 -2
- package/dist/listbox/root/listbox.svelte.d.ts +4 -2
- package/dist/popover/README.md +10 -0
- package/dist/popover/content/README.md +11 -0
- package/dist/popover/content/popover-content-controlled-close-test.svelte +30 -0
- package/dist/popover/content/popover-content-controlled-close-test.svelte.d.ts +3 -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 +315 -24
- 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 +10 -15
- 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/popover-trigger-button-root-test.svelte +17 -0
- package/dist/popover/trigger/popover-trigger-button-root-test.svelte.d.ts +18 -0
- package/dist/popover/trigger/popover-trigger-button.svelte +9 -7
- package/dist/popover/trigger/popover-trigger.svelte +17 -5
- 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/primitives/keyboard-navigation.d.ts +1 -0
- package/dist/primitives/keyboard-navigation.js +17 -0
- package/dist/table/IMPLEMENTATION_NOTES.md +9 -0
- package/dist/table/PLAN-HIDDEN-COLUMNS.md +152 -0
- package/dist/table/PLAN.md +1336 -0
- package/dist/table/README.md +143 -0
- package/dist/table/SELECTION_CHECKBOX_PLAN.md +234 -0
- package/dist/table/TODO.md +138 -0
- package/dist/table/body/README.md +39 -0
- package/dist/table/body/table-body-items-test.svelte +45 -0
- package/dist/table/body/table-body-items-test.svelte.d.ts +18 -0
- package/dist/table/body/table-body.svelte +171 -0
- package/dist/table/body/table-body.svelte.d.ts +45 -0
- package/dist/table/cell/README.md +27 -0
- package/dist/table/cell/table-cell.svelte +253 -0
- package/dist/table/cell/table-cell.svelte.d.ts +4 -0
- package/dist/table/checkbox/README.md +40 -0
- package/dist/table/checkbox/table-checkbox-test.svelte +170 -0
- package/dist/table/checkbox/table-checkbox-test.svelte.d.ts +22 -0
- package/dist/table/checkbox/table-checkbox.svelte +235 -0
- package/dist/table/checkbox/table-checkbox.svelte.d.ts +4 -0
- package/dist/table/checkbox-indicator/README.md +31 -0
- package/dist/table/checkbox-indicator/table-checkbox-indicator.svelte +15 -0
- package/dist/table/checkbox-indicator/table-checkbox-indicator.svelte.d.ts +4 -0
- package/dist/table/column/README.md +36 -0
- package/dist/table/column/table-column.svelte +79 -0
- package/dist/table/column/table-column.svelte.d.ts +4 -0
- package/dist/table/column-header-cell/README.md +30 -0
- package/dist/table/column-header-cell/table-column-header-cell.svelte +271 -0
- package/dist/table/column-header-cell/table-column-header-cell.svelte.d.ts +4 -0
- package/dist/table/column-resizer/README.md +33 -0
- package/dist/table/column-resizer/table-column-resizer-fixed-width-test.svelte +57 -0
- package/dist/table/column-resizer/table-column-resizer-fixed-width-test.svelte.d.ts +3 -0
- package/dist/table/column-resizer/table-column-resizer-freeze-layout-test.svelte +52 -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-narrow-min-width-test.svelte +76 -0
- package/dist/table/column-resizer/table-column-resizer-narrow-min-width-test.svelte.d.ts +3 -0
- package/dist/table/column-resizer/table-column-resizer-overflow-test.svelte +64 -0
- package/dist/table/column-resizer/table-column-resizer-overflow-test.svelte.d.ts +3 -0
- package/dist/table/column-resizer/table-column-resizer-padded-container-test.svelte +67 -0
- package/dist/table/column-resizer/table-column-resizer-padded-container-test.svelte.d.ts +3 -0
- package/dist/table/column-resizer/table-column-resizer-sandbox-overflow-test.svelte +87 -0
- package/dist/table/column-resizer/table-column-resizer-sandbox-overflow-test.svelte.d.ts +3 -0
- package/dist/table/column-resizer/table-column-resizer-selection-column-test.svelte +84 -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 +77 -0
- package/dist/table/column-resizer/table-column-resizer-test.svelte.d.ts +3 -0
- package/dist/table/column-resizer/table-column-resizer-three-column-relative-test.svelte +64 -0
- package/dist/table/column-resizer/table-column-resizer-three-column-relative-test.svelte.d.ts +3 -0
- package/dist/table/column-resizer/table-column-resizer.svelte +610 -0
- package/dist/table/column-resizer/table-column-resizer.svelte.d.ts +4 -0
- package/dist/table/empty-state/README.md +27 -0
- package/dist/table/empty-state/table-empty-state.svelte +33 -0
- package/dist/table/empty-state/table-empty-state.svelte.d.ts +4 -0
- package/dist/table/footer/README.md +26 -0
- package/dist/table/footer/table-footer.svelte +13 -0
- package/dist/table/footer/table-footer.svelte.d.ts +4 -0
- package/dist/table/header/README.md +26 -0
- package/dist/table/header/table-header.svelte +13 -0
- package/dist/table/header/table-header.svelte.d.ts +4 -0
- package/dist/table/index.d.ts +18 -0
- package/dist/table/index.js +17 -0
- package/dist/table/index.parts.d.ts +13 -0
- package/dist/table/index.parts.js +13 -0
- package/dist/table/root/README.md +66 -0
- package/dist/table/root/context.d.ts +233 -0
- package/dist/table/root/context.js +2153 -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 +561 -0
- package/dist/table/root/table-root.svelte.d.ts +4 -0
- package/dist/table/root/table-ssr-wrapper-column.svelte +48 -0
- package/dist/table/root/table-ssr-wrapper-column.svelte.d.ts +4 -0
- package/dist/table/root/table-ssr-wrapper-context.d.ts +11 -0
- package/dist/table/root/table-ssr-wrapper-context.js +13 -0
- package/dist/table/root/table-ssr-wrapper-test.svelte +57 -0
- package/dist/table/root/table-ssr-wrapper-test.svelte.d.ts +3 -0
- package/dist/table/root/table-test.svelte +206 -0
- package/dist/table/root/table-test.svelte.d.ts +29 -0
- package/dist/table/row/README.md +29 -0
- package/dist/table/row/table-row.svelte +244 -0
- package/dist/table/row/table-row.svelte.d.ts +4 -0
- package/dist/table/sort-trigger/README.md +45 -0
- package/dist/table/sort-trigger/table-sort-trigger.svelte +183 -0
- package/dist/table/sort-trigger/table-sort-trigger.svelte.d.ts +4 -0
- package/dist/table/types.d.ts +112 -0
- package/dist/table/types.js +1 -0
- package/dist/table/utils/handle-body-keydown.d.ts +13 -0
- package/dist/table/utils/handle-body-keydown.js +67 -0
- package/dist/table/utils/visually-hidden-style.d.ts +1 -0
- package/dist/table/utils/visually-hidden-style.js +1 -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 +33 -2
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onDestroy } from 'svelte';
|
|
3
|
+
import {
|
|
4
|
+
setTableCellContext,
|
|
5
|
+
useTableColumnContext,
|
|
6
|
+
useTableContext,
|
|
7
|
+
useTableRowContext
|
|
8
|
+
} from '../root/context';
|
|
9
|
+
import type { TableColumnHeaderCellProps } from '../types.js';
|
|
10
|
+
import {
|
|
11
|
+
shouldShowFocusVisible,
|
|
12
|
+
trackInteractionModality
|
|
13
|
+
} from '../../primitives/input-modality';
|
|
14
|
+
|
|
15
|
+
let { children, class: className = '', ...restProps }: TableColumnHeaderCellProps = $props();
|
|
16
|
+
|
|
17
|
+
const table = useTableContext();
|
|
18
|
+
const column = useTableColumnContext();
|
|
19
|
+
const row = useTableRowContext();
|
|
20
|
+
const key = table.createInstanceToken('header-cell');
|
|
21
|
+
const focusVersion = table.focusVersion;
|
|
22
|
+
const layoutVersion = table.layoutVersion;
|
|
23
|
+
const sortVersion = table.sortVersion;
|
|
24
|
+
const widthVersion = table.widthVersion;
|
|
25
|
+
|
|
26
|
+
let element = $state<HTMLElement | undefined>(undefined);
|
|
27
|
+
let focusDelegate = $state<(() => HTMLElement | undefined) | undefined>(undefined);
|
|
28
|
+
let isElementFocused = $state(false);
|
|
29
|
+
let isElementFocusVisible = $state(false);
|
|
30
|
+
let isFocusWithin = $state(false);
|
|
31
|
+
let isFocusVisibleWithin = $state(false);
|
|
32
|
+
row.registerCellToken(key, () => element);
|
|
33
|
+
function syncHeaderCellRegistration() {
|
|
34
|
+
table.registerCell({
|
|
35
|
+
key,
|
|
36
|
+
rowToken: row.rowToken,
|
|
37
|
+
section: 'header',
|
|
38
|
+
columnToken: column.token,
|
|
39
|
+
element,
|
|
40
|
+
focusDelegate
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function registerFocusDelegate(getElement: () => HTMLElement | undefined) {
|
|
45
|
+
focusDelegate = getElement;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function unregisterFocusDelegate() {
|
|
49
|
+
focusDelegate = undefined;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function notifyResizerPresent() {
|
|
53
|
+
// No-op. Header cells now always provide the positioning context that
|
|
54
|
+
// column resizers need so the handle is available in SSR HTML too.
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function notifyResizerRemoved() {
|
|
58
|
+
// No-op. See notifyResizerPresent().
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
setTableCellContext({
|
|
62
|
+
cellKey: key,
|
|
63
|
+
registerFocusDelegate,
|
|
64
|
+
unregisterFocusDelegate,
|
|
65
|
+
notifyResizerPresent,
|
|
66
|
+
notifyResizerRemoved
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
syncHeaderCellRegistration();
|
|
70
|
+
|
|
71
|
+
$effect(() => {
|
|
72
|
+
syncHeaderCellRegistration();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
onDestroy(() => {
|
|
76
|
+
row.unregisterCellToken(key);
|
|
77
|
+
table.unregisterCell(key);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const isFocused = $derived.by(() => {
|
|
81
|
+
void $focusVersion;
|
|
82
|
+
return table.isCellFocused(key) && isElementFocused;
|
|
83
|
+
});
|
|
84
|
+
const isFocusVisible = $derived.by(() => {
|
|
85
|
+
void $focusVersion;
|
|
86
|
+
return isFocused && isElementFocusVisible;
|
|
87
|
+
});
|
|
88
|
+
const sortDirection = $derived.by(() => {
|
|
89
|
+
void $sortVersion;
|
|
90
|
+
return table.getSortDirection(column.id);
|
|
91
|
+
});
|
|
92
|
+
const isHidden = $derived.by(() => {
|
|
93
|
+
void $layoutVersion;
|
|
94
|
+
return column.isHidden;
|
|
95
|
+
});
|
|
96
|
+
const columnWidthStyle = $derived.by(() => {
|
|
97
|
+
void $widthVersion;
|
|
98
|
+
return table.getColumnWidthStyle(column.id);
|
|
99
|
+
});
|
|
100
|
+
const columnMinWidth = $derived.by(() => {
|
|
101
|
+
void $widthVersion;
|
|
102
|
+
return table.getColumnMinWidth(column.id);
|
|
103
|
+
});
|
|
104
|
+
const columnMaxWidth = $derived.by(() => {
|
|
105
|
+
void $widthVersion;
|
|
106
|
+
return table.getColumnMaxWidth(column.id);
|
|
107
|
+
});
|
|
108
|
+
const visibleColumnIndex = $derived.by(() => {
|
|
109
|
+
void $layoutVersion;
|
|
110
|
+
return table.getVisibleColumnIndexByToken(column.token);
|
|
111
|
+
});
|
|
112
|
+
const isSortable = $derived.by(() => {
|
|
113
|
+
void $layoutVersion;
|
|
114
|
+
void $sortVersion;
|
|
115
|
+
return table.isColumnSortable(column.id);
|
|
116
|
+
});
|
|
117
|
+
const headerTabIndex = $derived.by(() => {
|
|
118
|
+
if (isHidden || focusDelegate) return undefined;
|
|
119
|
+
return table.isCellTabStop(key) ? 0 : -1;
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
function focusResizerInHeader(target: HTMLElement | undefined) {
|
|
123
|
+
const resizer = target?.querySelector<HTMLElement>('[data-table-column-resizer="true"]');
|
|
124
|
+
if (!resizer) return false;
|
|
125
|
+
resizer.focus();
|
|
126
|
+
return document.activeElement === resizer;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function getSiblingHeaderCell(direction: 'left' | 'right') {
|
|
130
|
+
const headerRow = element?.closest('tr');
|
|
131
|
+
if (!headerRow || !element) return null;
|
|
132
|
+
|
|
133
|
+
const headerCells = Array.from(
|
|
134
|
+
headerRow.querySelectorAll<HTMLElement>('th[role="columnheader"]')
|
|
135
|
+
);
|
|
136
|
+
const currentIndex = headerCells.indexOf(element);
|
|
137
|
+
if (currentIndex < 0) return null;
|
|
138
|
+
|
|
139
|
+
return headerCells[currentIndex + (direction === 'left' ? -1 : 1)] ?? null;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function moveFocusIntoResizeHandle(direction: 'left' | 'right') {
|
|
143
|
+
if (direction === 'right') {
|
|
144
|
+
return focusResizerInHeader(element);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return focusResizerInHeader(getSiblingHeaderCell('left') ?? undefined);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function handleFocus() {
|
|
151
|
+
isElementFocused = true;
|
|
152
|
+
isElementFocusVisible = shouldShowFocusVisible(element ?? null);
|
|
153
|
+
table.setFocusedCell(key);
|
|
154
|
+
table.setFocusVisible(isElementFocusVisible);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function handleBlur() {
|
|
158
|
+
isElementFocused = false;
|
|
159
|
+
isElementFocusVisible = false;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function handleFocusIn(event: FocusEvent) {
|
|
163
|
+
if (event.target === element) {
|
|
164
|
+
isFocusWithin = false;
|
|
165
|
+
isFocusVisibleWithin = false;
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
isFocusWithin = true;
|
|
169
|
+
isFocusVisibleWithin = shouldShowFocusVisible(event.target as HTMLElement | null);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function handleFocusOut(event: FocusEvent) {
|
|
173
|
+
const nextFocused = event.relatedTarget;
|
|
174
|
+
if (nextFocused instanceof Node && element?.contains(nextFocused)) return;
|
|
175
|
+
isFocusWithin = false;
|
|
176
|
+
isFocusVisibleWithin = false;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function handleClick() {
|
|
180
|
+
table.focusCellByKey(key);
|
|
181
|
+
table.consumeHeaderClickSuppression();
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function handleMouseDown(event: MouseEvent) {
|
|
185
|
+
trackInteractionModality(event, element ?? null);
|
|
186
|
+
isElementFocusVisible = false;
|
|
187
|
+
isFocusVisibleWithin = false;
|
|
188
|
+
table.setFocusVisible(false);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function handleKeyDown(event: KeyboardEvent) {
|
|
192
|
+
trackInteractionModality(event, element ?? null);
|
|
193
|
+
|
|
194
|
+
if ((event.ctrlKey || event.metaKey) && event.key === 'Home') {
|
|
195
|
+
event.preventDefault();
|
|
196
|
+
table.moveToGridStart();
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if ((event.ctrlKey || event.metaKey) && event.key === 'End') {
|
|
201
|
+
event.preventDefault();
|
|
202
|
+
table.moveToGridEnd();
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
switch (event.key) {
|
|
207
|
+
case 'ArrowUp':
|
|
208
|
+
event.preventDefault();
|
|
209
|
+
table.moveFocus('up');
|
|
210
|
+
return;
|
|
211
|
+
case 'ArrowDown':
|
|
212
|
+
event.preventDefault();
|
|
213
|
+
table.moveFocus('down');
|
|
214
|
+
return;
|
|
215
|
+
case 'ArrowLeft':
|
|
216
|
+
event.preventDefault();
|
|
217
|
+
if (moveFocusIntoResizeHandle('left')) return;
|
|
218
|
+
table.moveFocus('left');
|
|
219
|
+
return;
|
|
220
|
+
case 'ArrowRight':
|
|
221
|
+
event.preventDefault();
|
|
222
|
+
if (moveFocusIntoResizeHandle('right')) return;
|
|
223
|
+
table.moveFocus('right');
|
|
224
|
+
return;
|
|
225
|
+
case 'Home':
|
|
226
|
+
event.preventDefault();
|
|
227
|
+
table.moveToRowStart();
|
|
228
|
+
return;
|
|
229
|
+
case 'End':
|
|
230
|
+
event.preventDefault();
|
|
231
|
+
table.moveToRowEnd();
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
</script>
|
|
236
|
+
|
|
237
|
+
<th
|
|
238
|
+
bind:this={element}
|
|
239
|
+
role="columnheader"
|
|
240
|
+
class={className}
|
|
241
|
+
tabindex={headerTabIndex}
|
|
242
|
+
aria-colindex={!isHidden && visibleColumnIndex >= 0 ? visibleColumnIndex + 1 : undefined}
|
|
243
|
+
aria-hidden={isHidden ? true : undefined}
|
|
244
|
+
aria-sort={isSortable ? (sortDirection ?? 'none') : undefined}
|
|
245
|
+
data-focused={isFocused ? 'true' : undefined}
|
|
246
|
+
data-focus-visible={isFocusVisible ? 'true' : undefined}
|
|
247
|
+
data-focus-within={isFocusWithin ? 'true' : undefined}
|
|
248
|
+
data-focus-visible-within={isFocusVisibleWithin ? 'true' : undefined}
|
|
249
|
+
data-sortable={isSortable || undefined}
|
|
250
|
+
data-sort-direction={sortDirection}
|
|
251
|
+
data-column-index={visibleColumnIndex >= 0 ? visibleColumnIndex : undefined}
|
|
252
|
+
style:box-sizing="border-box"
|
|
253
|
+
style:position="relative"
|
|
254
|
+
style:overflow="visible"
|
|
255
|
+
style:width={columnWidthStyle}
|
|
256
|
+
style:min-width={columnMinWidth !== undefined ? `${columnMinWidth}px` : undefined}
|
|
257
|
+
style:max-width={columnMaxWidth !== undefined ? `${columnMaxWidth}px` : undefined}
|
|
258
|
+
style:display={isHidden ? 'none' : 'table-cell'}
|
|
259
|
+
onfocusin={handleFocusIn}
|
|
260
|
+
onfocusout={handleFocusOut}
|
|
261
|
+
onfocus={handleFocus}
|
|
262
|
+
onblur={handleBlur}
|
|
263
|
+
onclick={handleClick}
|
|
264
|
+
onmousedown={handleMouseDown}
|
|
265
|
+
onkeydown={handleKeyDown}
|
|
266
|
+
{...restProps}
|
|
267
|
+
>
|
|
268
|
+
{#if children}
|
|
269
|
+
{@render children()}
|
|
270
|
+
{/if}
|
|
271
|
+
</th>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { TableColumnHeaderCellProps } from '../types.js';
|
|
2
|
+
declare const TableColumnHeaderCell: import("svelte").Component<TableColumnHeaderCellProps, {}, "">;
|
|
3
|
+
type TableColumnHeaderCell = ReturnType<typeof TableColumnHeaderCell>;
|
|
4
|
+
export default TableColumnHeaderCell;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!-- markdownlint-disable MD024 MD060 -->
|
|
2
|
+
|
|
3
|
+
# Table.ColumnResizer
|
|
4
|
+
|
|
5
|
+
## API reference
|
|
6
|
+
|
|
7
|
+
### Table.ColumnResizer
|
|
8
|
+
|
|
9
|
+
Name: `Table.ColumnResizer`
|
|
10
|
+
Description: Interactive resize handle for the current `Table.Column`. It must be composed inside `Table.ColumnHeaderCell`, and it resizes the column that owns the surrounding `Table.Column` context.
|
|
11
|
+
|
|
12
|
+
Public prop type: `TableColumnResizerProps`
|
|
13
|
+
|
|
14
|
+
| Prop | Type | Default | Description |
|
|
15
|
+
| ----------- | --------- | ----------- | -------------------------------------------------------------------- |
|
|
16
|
+
| `step` | `number` | `16` | Keyboard resize delta in px for `ArrowLeft` / `ArrowRight`. |
|
|
17
|
+
| `shiftStep` | `number` | `48` | Larger keyboard resize delta in px for `Shift+ArrowLeft/ArrowRight`. |
|
|
18
|
+
| `class` | `string` | `''` | Class names for the resize handle element. |
|
|
19
|
+
| `children` | `Snippet` | `undefined` | Optional custom resize affordance content. |
|
|
20
|
+
|
|
21
|
+
## Usage notes
|
|
22
|
+
|
|
23
|
+
- `Table.ColumnResizer` must be used inside `Table.ColumnHeaderCell`.
|
|
24
|
+
- Rendering `Table.ColumnResizer` inside `Table.ColumnHeaderCell` is enough to make the owning `Table.Column` resizable.
|
|
25
|
+
- The handle resolves the active column from `Table.Column` context. It does not accept a separate `columnId` prop.
|
|
26
|
+
- Width state lives in `Table.Root` through `columnWidths` / `defaultColumnWidths`.
|
|
27
|
+
- Pointer resizing uses Pointer Events, so mouse, touch, and pen interactions share the same behavior.
|
|
28
|
+
- Keyboard resizing uses an explicit resize mode: focus the handle, press `Enter` to capture resize, use `ArrowLeft` / `ArrowRight` (plus `Shift`) to adjust the width, `Home` to jump to the minimum width, and `End` to auto-fit the column to its content width, then press `Enter` again to commit the width and keep focus on the handle.
|
|
29
|
+
- While keyboard resize mode is active, pressing `Escape` restores the starting width, exits resize mode, and returns focus to the owning header cell.
|
|
30
|
+
- Keyboard resizing uses the same resize lifecycle callbacks as pointer resizing and announces committed widths through a polite live region.
|
|
31
|
+
- During pointer drag, pressing `Escape` restores the starting width and cancels the resize interaction.
|
|
32
|
+
- Double-click still auto-fits the column to its content width.
|
|
33
|
+
- In RTL layouts, `ArrowLeft` and `ArrowRight` are inverted so the logical resize direction matches the visual layout.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Table } from '../index';
|
|
3
|
+
import type { TableColumnWidth } from '../root/context';
|
|
4
|
+
|
|
5
|
+
let currentColumnWidths = $state<Map<string, TableColumnWidth>>(new Map());
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<Table.Root aria-label="Fixed width table" bind:columnWidths={currentColumnWidths}>
|
|
9
|
+
<Table.Header>
|
|
10
|
+
<Table.Row>
|
|
11
|
+
<Table.Column
|
|
12
|
+
id="email"
|
|
13
|
+
isRowHeader
|
|
14
|
+
textValue="Email"
|
|
15
|
+
width={220}
|
|
16
|
+
minWidth={220}
|
|
17
|
+
maxWidth={220}
|
|
18
|
+
>
|
|
19
|
+
<Table.ColumnHeaderCell>
|
|
20
|
+
<div class="flex items-center justify-between gap-3">
|
|
21
|
+
<span>Email</span>
|
|
22
|
+
<Table.ColumnResizer
|
|
23
|
+
data-testid="fixed-email-resizer"
|
|
24
|
+
class="inline-flex w-3 cursor-col-resize justify-center"
|
|
25
|
+
/>
|
|
26
|
+
</div>
|
|
27
|
+
</Table.ColumnHeaderCell>
|
|
28
|
+
</Table.Column>
|
|
29
|
+
<Table.Column id="role" textValue="Role" defaultWidth={180} minWidth={120}>
|
|
30
|
+
<Table.ColumnHeaderCell>
|
|
31
|
+
<div class="flex items-center justify-between gap-3">
|
|
32
|
+
<span>Role</span>
|
|
33
|
+
<Table.ColumnResizer
|
|
34
|
+
data-testid="role-resizer"
|
|
35
|
+
class="inline-flex w-3 cursor-col-resize justify-center"
|
|
36
|
+
/>
|
|
37
|
+
</div>
|
|
38
|
+
</Table.ColumnHeaderCell>
|
|
39
|
+
</Table.Column>
|
|
40
|
+
</Table.Row>
|
|
41
|
+
</Table.Header>
|
|
42
|
+
|
|
43
|
+
<Table.Body>
|
|
44
|
+
<Table.Row id="danilo">
|
|
45
|
+
<Table.Cell>danilo.fernandez+workspace-owner@example.com</Table.Cell>
|
|
46
|
+
<Table.Cell>Developer</Table.Cell>
|
|
47
|
+
</Table.Row>
|
|
48
|
+
<Table.Row id="zahra">
|
|
49
|
+
<Table.Cell>zahra@example.com</Table.Cell>
|
|
50
|
+
<Table.Cell>Admin</Table.Cell>
|
|
51
|
+
</Table.Row>
|
|
52
|
+
</Table.Body>
|
|
53
|
+
</Table.Root>
|
|
54
|
+
|
|
55
|
+
<output data-testid="column-widths"
|
|
56
|
+
>{JSON.stringify(Object.fromEntries(currentColumnWidths))}</output
|
|
57
|
+
>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Table } from '../index';
|
|
3
|
+
import type { TableColumnWidth } from '../root/context';
|
|
4
|
+
|
|
5
|
+
let currentColumnWidths = $state<Map<string, TableColumnWidth> | undefined>(undefined);
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<div style="width: 640px;">
|
|
9
|
+
<Table.Root
|
|
10
|
+
aria-label="Freeze layout table"
|
|
11
|
+
bind:columnWidths={currentColumnWidths}
|
|
12
|
+
class="min-w-full border-collapse text-left"
|
|
13
|
+
>
|
|
14
|
+
<Table.Header>
|
|
15
|
+
<Table.Row>
|
|
16
|
+
<Table.Column id="email" isRowHeader textValue="Email" minWidth={80}>
|
|
17
|
+
<Table.ColumnHeaderCell>
|
|
18
|
+
<div class="flex items-center justify-between gap-3">
|
|
19
|
+
<span>Email address</span>
|
|
20
|
+
<Table.ColumnResizer
|
|
21
|
+
data-testid="freeze-email-resizer"
|
|
22
|
+
class="inline-flex w-3 cursor-col-resize justify-center"
|
|
23
|
+
/>
|
|
24
|
+
</div>
|
|
25
|
+
</Table.ColumnHeaderCell>
|
|
26
|
+
</Table.Column>
|
|
27
|
+
<Table.Column id="group" textValue="Group" minWidth={80}>
|
|
28
|
+
<Table.ColumnHeaderCell>
|
|
29
|
+
<div class="flex items-center justify-between gap-3">
|
|
30
|
+
<span>Group membership</span>
|
|
31
|
+
<Table.ColumnResizer
|
|
32
|
+
data-testid="freeze-group-resizer"
|
|
33
|
+
class="inline-flex w-3 cursor-col-resize justify-center"
|
|
34
|
+
/>
|
|
35
|
+
</div>
|
|
36
|
+
</Table.ColumnHeaderCell>
|
|
37
|
+
</Table.Column>
|
|
38
|
+
</Table.Row>
|
|
39
|
+
</Table.Header>
|
|
40
|
+
|
|
41
|
+
<Table.Body>
|
|
42
|
+
<Table.Row id="danilo">
|
|
43
|
+
<Table.Cell>danilo@example.com</Table.Cell>
|
|
44
|
+
<Table.Cell>Developer relations</Table.Cell>
|
|
45
|
+
</Table.Row>
|
|
46
|
+
</Table.Body>
|
|
47
|
+
</Table.Root>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<output data-testid="freeze-column-widths"
|
|
51
|
+
>{JSON.stringify(Object.fromEntries(currentColumnWidths ?? new Map()))}</output
|
|
52
|
+
>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Table } from '../index';
|
|
3
|
+
import type { TableColumnWidth } from '../root/context';
|
|
4
|
+
|
|
5
|
+
let currentColumnWidths = $state<Map<string, TableColumnWidth> | undefined>(undefined);
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<div data-testid="narrow-min-width-container" style="width: 240px; overflow-x: auto;">
|
|
9
|
+
<Table.Root
|
|
10
|
+
aria-label="Narrow min width table"
|
|
11
|
+
bind:columnWidths={currentColumnWidths}
|
|
12
|
+
class="min-w-full border-collapse text-left"
|
|
13
|
+
>
|
|
14
|
+
<Table.Header>
|
|
15
|
+
<Table.Row>
|
|
16
|
+
<Table.Column id="request" isRowHeader textValue="Request" minWidth={75}>
|
|
17
|
+
<Table.ColumnHeaderCell data-testid="narrow-request-header-cell">
|
|
18
|
+
<div class="flex items-center justify-between gap-3">
|
|
19
|
+
<span>Request</span>
|
|
20
|
+
<Table.ColumnResizer
|
|
21
|
+
data-testid="narrow-request-resizer"
|
|
22
|
+
class="inline-flex w-3 cursor-col-resize justify-center"
|
|
23
|
+
/>
|
|
24
|
+
</div>
|
|
25
|
+
</Table.ColumnHeaderCell>
|
|
26
|
+
</Table.Column>
|
|
27
|
+
<Table.Column id="requester" textValue="Requester" minWidth={140}>
|
|
28
|
+
<Table.ColumnHeaderCell data-testid="narrow-requester-header-cell">
|
|
29
|
+
<div class="flex items-center justify-between gap-3">
|
|
30
|
+
<span>Requester</span>
|
|
31
|
+
<Table.ColumnResizer class="inline-flex w-3 cursor-col-resize justify-center" />
|
|
32
|
+
</div>
|
|
33
|
+
</Table.ColumnHeaderCell>
|
|
34
|
+
</Table.Column>
|
|
35
|
+
<Table.Column id="area" textValue="Area">
|
|
36
|
+
<Table.ColumnHeaderCell data-testid="narrow-area-header-cell">
|
|
37
|
+
<div class="flex items-center justify-between gap-3">
|
|
38
|
+
<span>Area</span>
|
|
39
|
+
<Table.ColumnResizer class="inline-flex w-3 cursor-col-resize justify-center" />
|
|
40
|
+
</div>
|
|
41
|
+
</Table.ColumnHeaderCell>
|
|
42
|
+
</Table.Column>
|
|
43
|
+
<Table.Column id="status" textValue="Status">
|
|
44
|
+
<Table.ColumnHeaderCell data-testid="narrow-status-header-cell">
|
|
45
|
+
<div class="flex items-center justify-between gap-3">
|
|
46
|
+
<span>Status</span>
|
|
47
|
+
<Table.ColumnResizer class="inline-flex w-3 cursor-col-resize justify-center" />
|
|
48
|
+
</div>
|
|
49
|
+
</Table.ColumnHeaderCell>
|
|
50
|
+
</Table.Column>
|
|
51
|
+
<Table.Column id="total" textValue="Total">
|
|
52
|
+
<Table.ColumnHeaderCell data-testid="narrow-total-header-cell">
|
|
53
|
+
<div class="flex items-center justify-between gap-3">
|
|
54
|
+
<span>Total</span>
|
|
55
|
+
<Table.ColumnResizer class="inline-flex w-3 cursor-col-resize justify-center" />
|
|
56
|
+
</div>
|
|
57
|
+
</Table.ColumnHeaderCell>
|
|
58
|
+
</Table.Column>
|
|
59
|
+
</Table.Row>
|
|
60
|
+
</Table.Header>
|
|
61
|
+
|
|
62
|
+
<Table.Body>
|
|
63
|
+
<Table.Row id="pr-001">
|
|
64
|
+
<Table.Cell>PR-001</Table.Cell>
|
|
65
|
+
<Table.Cell>Ana Gomez</Table.Cell>
|
|
66
|
+
<Table.Cell>Ops</Table.Cell>
|
|
67
|
+
<Table.Cell>Pending</Table.Cell>
|
|
68
|
+
<Table.Cell>$1,520</Table.Cell>
|
|
69
|
+
</Table.Row>
|
|
70
|
+
</Table.Body>
|
|
71
|
+
</Table.Root>
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
<output data-testid="narrow-min-width-widths"
|
|
75
|
+
>{JSON.stringify(Object.fromEntries(currentColumnWidths ?? new Map()))}</output
|
|
76
|
+
>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Table } from '../index';
|
|
3
|
+
import type { TableColumnWidth } from '../root/context';
|
|
4
|
+
|
|
5
|
+
let currentColumnWidths = $state<Map<string, TableColumnWidth> | undefined>(undefined);
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<div style="width: 640px; overflow-x: auto;">
|
|
9
|
+
<Table.Root
|
|
10
|
+
aria-label="Resizable overflow table"
|
|
11
|
+
bind:columnWidths={currentColumnWidths}
|
|
12
|
+
class="min-w-full border-collapse text-left"
|
|
13
|
+
>
|
|
14
|
+
<Table.Header>
|
|
15
|
+
<Table.Row>
|
|
16
|
+
<Table.Column id="name" isRowHeader textValue="Name" width={240}>
|
|
17
|
+
<Table.ColumnHeaderCell data-testid="overflow-name-header-cell">
|
|
18
|
+
<div class="flex items-center justify-between gap-3">
|
|
19
|
+
<span>Name</span>
|
|
20
|
+
<Table.ColumnResizer
|
|
21
|
+
data-testid="overflow-name-resizer"
|
|
22
|
+
class="inline-flex w-3 cursor-col-resize justify-center"
|
|
23
|
+
/>
|
|
24
|
+
</div>
|
|
25
|
+
</Table.ColumnHeaderCell>
|
|
26
|
+
</Table.Column>
|
|
27
|
+
<Table.Column id="region" textValue="Region" defaultWidth={180} minWidth={140}>
|
|
28
|
+
<Table.ColumnHeaderCell data-testid="overflow-region-header-cell">
|
|
29
|
+
<div class="flex items-center justify-between gap-3">
|
|
30
|
+
<span>Region</span>
|
|
31
|
+
<Table.ColumnResizer
|
|
32
|
+
data-testid="overflow-region-resizer"
|
|
33
|
+
class="inline-flex w-3 cursor-col-resize justify-center"
|
|
34
|
+
/>
|
|
35
|
+
</div>
|
|
36
|
+
</Table.ColumnHeaderCell>
|
|
37
|
+
</Table.Column>
|
|
38
|
+
<Table.Column id="plan" textValue="Plan">
|
|
39
|
+
<Table.ColumnHeaderCell data-testid="overflow-plan-header-cell">
|
|
40
|
+
<div class="flex items-center justify-between gap-3">
|
|
41
|
+
<span>Plan</span>
|
|
42
|
+
<Table.ColumnResizer
|
|
43
|
+
data-testid="overflow-plan-resizer"
|
|
44
|
+
class="inline-flex w-3 cursor-col-resize justify-center"
|
|
45
|
+
/>
|
|
46
|
+
</div>
|
|
47
|
+
</Table.ColumnHeaderCell>
|
|
48
|
+
</Table.Column>
|
|
49
|
+
</Table.Row>
|
|
50
|
+
</Table.Header>
|
|
51
|
+
|
|
52
|
+
<Table.Body>
|
|
53
|
+
<Table.Row id="danilo">
|
|
54
|
+
<Table.Cell>Danilo Fernandez</Table.Cell>
|
|
55
|
+
<Table.Cell>Buenos Aires</Table.Cell>
|
|
56
|
+
<Table.Cell>Enterprise</Table.Cell>
|
|
57
|
+
</Table.Row>
|
|
58
|
+
</Table.Body>
|
|
59
|
+
</Table.Root>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<output data-testid="overflow-column-widths"
|
|
63
|
+
>{JSON.stringify(Object.fromEntries(currentColumnWidths ?? new Map()))}</output
|
|
64
|
+
>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Table } from '../index';
|
|
3
|
+
import type { TableColumnWidth } from '../root/context';
|
|
4
|
+
|
|
5
|
+
let currentColumnWidths = $state<Map<string, TableColumnWidth> | undefined>(undefined);
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<div
|
|
9
|
+
data-testid="padded-relative-container"
|
|
10
|
+
style="width: 640px; box-sizing: border-box; overflow-x: auto; padding: 12px; border: 1px solid transparent;"
|
|
11
|
+
>
|
|
12
|
+
<Table.Root
|
|
13
|
+
aria-label="Padded relative resize table"
|
|
14
|
+
bind:columnWidths={currentColumnWidths}
|
|
15
|
+
class="min-w-full border-collapse text-left"
|
|
16
|
+
>
|
|
17
|
+
<Table.Header>
|
|
18
|
+
<Table.Row>
|
|
19
|
+
<Table.Column id="name" isRowHeader textValue="Name">
|
|
20
|
+
<Table.ColumnHeaderCell data-testid="padded-name-header-cell">
|
|
21
|
+
<div class="flex items-center justify-between gap-3">
|
|
22
|
+
<span>Name</span>
|
|
23
|
+
<Table.ColumnResizer
|
|
24
|
+
data-testid="padded-name-resizer"
|
|
25
|
+
class="inline-flex w-3 cursor-col-resize justify-center"
|
|
26
|
+
/>
|
|
27
|
+
</div>
|
|
28
|
+
</Table.ColumnHeaderCell>
|
|
29
|
+
</Table.Column>
|
|
30
|
+
<Table.Column id="region" textValue="Region" defaultWidth={180} minWidth={140}>
|
|
31
|
+
<Table.ColumnHeaderCell data-testid="padded-region-header-cell">
|
|
32
|
+
<div class="flex items-center justify-between gap-3">
|
|
33
|
+
<span>Region</span>
|
|
34
|
+
<Table.ColumnResizer
|
|
35
|
+
data-testid="padded-region-resizer"
|
|
36
|
+
class="inline-flex w-3 cursor-col-resize justify-center"
|
|
37
|
+
/>
|
|
38
|
+
</div>
|
|
39
|
+
</Table.ColumnHeaderCell>
|
|
40
|
+
</Table.Column>
|
|
41
|
+
<Table.Column id="plan" textValue="Plan">
|
|
42
|
+
<Table.ColumnHeaderCell data-testid="padded-plan-header-cell">
|
|
43
|
+
<div class="flex items-center justify-between gap-3">
|
|
44
|
+
<span>Plan</span>
|
|
45
|
+
<Table.ColumnResizer
|
|
46
|
+
data-testid="padded-plan-resizer"
|
|
47
|
+
class="inline-flex w-3 cursor-col-resize justify-center"
|
|
48
|
+
/>
|
|
49
|
+
</div>
|
|
50
|
+
</Table.ColumnHeaderCell>
|
|
51
|
+
</Table.Column>
|
|
52
|
+
</Table.Row>
|
|
53
|
+
</Table.Header>
|
|
54
|
+
|
|
55
|
+
<Table.Body>
|
|
56
|
+
<Table.Row id="danilo">
|
|
57
|
+
<Table.Cell>Danilo Fernandez</Table.Cell>
|
|
58
|
+
<Table.Cell>Buenos Aires</Table.Cell>
|
|
59
|
+
<Table.Cell>Enterprise</Table.Cell>
|
|
60
|
+
</Table.Row>
|
|
61
|
+
</Table.Body>
|
|
62
|
+
</Table.Root>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<output data-testid="padded-relative-widths"
|
|
66
|
+
>{JSON.stringify(Object.fromEntries(currentColumnWidths ?? new Map()))}</output
|
|
67
|
+
>
|