@human-kit/svelte-components 1.0.0-alpha.4 → 1.0.0-alpha.6

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.
Files changed (102) hide show
  1. package/dist/calendar/index.d.ts +3 -3
  2. package/dist/calendar/index.js +3 -3
  3. package/dist/checkbox/README.md +53 -0
  4. package/dist/checkbox/TODO.md +16 -0
  5. package/dist/checkbox/index.d.ts +6 -0
  6. package/dist/checkbox/index.js +6 -0
  7. package/dist/checkbox/index.parts.d.ts +2 -0
  8. package/dist/checkbox/index.parts.js +2 -0
  9. package/dist/checkbox/indicator/README.md +23 -0
  10. package/dist/checkbox/indicator/checkbox-indicator.svelte +43 -0
  11. package/dist/checkbox/indicator/checkbox-indicator.svelte.d.ts +10 -0
  12. package/dist/checkbox/root/README.md +47 -0
  13. package/dist/checkbox/root/checkbox-label-test.svelte +10 -0
  14. package/dist/checkbox/root/checkbox-label-test.svelte.d.ts +18 -0
  15. package/dist/checkbox/root/checkbox-root.svelte +361 -0
  16. package/dist/checkbox/root/checkbox-root.svelte.d.ts +23 -0
  17. package/dist/checkbox/root/checkbox-test.svelte +59 -0
  18. package/dist/checkbox/root/checkbox-test.svelte.d.ts +18 -0
  19. package/dist/checkbox/root/context.d.ts +21 -0
  20. package/dist/checkbox/root/context.js +15 -0
  21. package/dist/clock/index.d.ts +5 -5
  22. package/dist/clock/index.js +5 -5
  23. package/dist/combobox/index.d.ts +3 -3
  24. package/dist/combobox/index.js +3 -3
  25. package/dist/combobox/input/combobox-input.svelte +17 -2
  26. package/dist/combobox/list/combobox-listbox.svelte.d.ts +1 -1
  27. package/dist/combobox/popover/combobox-popover.svelte +17 -1
  28. package/dist/combobox/root/combobox.svelte +5 -0
  29. package/dist/combobox/root/context.d.ts +2 -0
  30. package/dist/datepicker/index.d.ts +3 -3
  31. package/dist/datepicker/index.js +3 -3
  32. package/dist/dialog/index.d.ts +3 -3
  33. package/dist/dialog/index.js +2 -2
  34. package/dist/index.d.ts +29 -25
  35. package/dist/index.js +29 -25
  36. package/dist/listbox/index.d.ts +3 -3
  37. package/dist/listbox/index.js +3 -3
  38. package/dist/popover/index.d.ts +3 -3
  39. package/dist/popover/index.js +3 -3
  40. package/dist/table/IMPLEMENTATION_NOTES.md +8 -0
  41. package/dist/table/PLAN-HIDDEN-COLUMNS.md +152 -0
  42. package/dist/table/PLAN.md +924 -0
  43. package/dist/table/README.md +116 -0
  44. package/dist/table/SELECTION_CHECKBOX_PLAN.md +234 -0
  45. package/dist/table/TODO.md +100 -0
  46. package/dist/table/body/README.md +24 -0
  47. package/dist/table/body/table-body.svelte +25 -0
  48. package/dist/table/body/table-body.svelte.d.ts +9 -0
  49. package/dist/table/cell/README.md +25 -0
  50. package/dist/table/cell/table-cell.svelte +247 -0
  51. package/dist/table/cell/table-cell.svelte.d.ts +9 -0
  52. package/dist/table/checkbox/README.md +38 -0
  53. package/dist/table/checkbox/table-checkbox-test.svelte +121 -0
  54. package/dist/table/checkbox/table-checkbox-test.svelte.d.ts +16 -0
  55. package/dist/table/checkbox/table-checkbox.svelte +274 -0
  56. package/dist/table/checkbox/table-checkbox.svelte.d.ts +13 -0
  57. package/dist/table/checkbox-indicator/README.md +29 -0
  58. package/dist/table/checkbox-indicator/table-checkbox-indicator.svelte +22 -0
  59. package/dist/table/checkbox-indicator/table-checkbox-indicator.svelte.d.ts +10 -0
  60. package/dist/table/column/README.md +32 -0
  61. package/dist/table/column/table-column.svelte +108 -0
  62. package/dist/table/column/table-column.svelte.d.ts +18 -0
  63. package/dist/table/column-header-cell/README.md +28 -0
  64. package/dist/table/column-header-cell/table-column-header-cell.svelte +281 -0
  65. package/dist/table/column-header-cell/table-column-header-cell.svelte.d.ts +9 -0
  66. package/dist/table/column-resizer/README.md +32 -0
  67. package/dist/table/column-resizer/table-column-resizer-freeze-layout-test.svelte +51 -0
  68. package/dist/table/column-resizer/table-column-resizer-freeze-layout-test.svelte.d.ts +3 -0
  69. package/dist/table/column-resizer/table-column-resizer-selection-column-test.svelte +83 -0
  70. package/dist/table/column-resizer/table-column-resizer-selection-column-test.svelte.d.ts +3 -0
  71. package/dist/table/column-resizer/table-column-resizer-test.svelte +75 -0
  72. package/dist/table/column-resizer/table-column-resizer-test.svelte.d.ts +3 -0
  73. package/dist/table/column-resizer/table-column-resizer.svelte +616 -0
  74. package/dist/table/column-resizer/table-column-resizer.svelte.d.ts +11 -0
  75. package/dist/table/empty-state/README.md +25 -0
  76. package/dist/table/empty-state/table-empty-state.svelte +38 -0
  77. package/dist/table/empty-state/table-empty-state.svelte.d.ts +8 -0
  78. package/dist/table/footer/README.md +24 -0
  79. package/dist/table/footer/table-footer.svelte +19 -0
  80. package/dist/table/footer/table-footer.svelte.d.ts +9 -0
  81. package/dist/table/header/README.md +24 -0
  82. package/dist/table/header/table-header.svelte +19 -0
  83. package/dist/table/header/table-header.svelte.d.ts +9 -0
  84. package/dist/table/index.d.ts +16 -0
  85. package/dist/table/index.js +16 -0
  86. package/dist/table/index.parts.d.ts +12 -0
  87. package/dist/table/index.parts.js +12 -0
  88. package/dist/table/root/README.md +56 -0
  89. package/dist/table/root/context.d.ts +198 -0
  90. package/dist/table/root/context.js +1426 -0
  91. package/dist/table/root/table-reorder-test.svelte +64 -0
  92. package/dist/table/root/table-reorder-test.svelte.d.ts +3 -0
  93. package/dist/table/root/table-root.svelte +410 -0
  94. package/dist/table/root/table-root.svelte.d.ts +29 -0
  95. package/dist/table/root/table-test.svelte +165 -0
  96. package/dist/table/root/table-test.svelte.d.ts +25 -0
  97. package/dist/table/row/README.md +27 -0
  98. package/dist/table/row/table-row.svelte +321 -0
  99. package/dist/table/row/table-row.svelte.d.ts +13 -0
  100. package/dist/timepicker/index.d.ts +5 -5
  101. package/dist/timepicker/index.js +5 -5
  102. package/package.json +11 -1
@@ -0,0 +1,59 @@
1
+ <script lang="ts">
2
+ import { Checkbox } from '../index';
3
+
4
+ type Props = {
5
+ id?: string;
6
+ name?: string;
7
+ value?: string;
8
+ isChecked?: boolean;
9
+ defaultChecked?: boolean;
10
+ isIndeterminate?: boolean;
11
+ defaultIndeterminate?: boolean;
12
+ isDisabled?: boolean;
13
+ isReadOnly?: boolean;
14
+ required?: boolean;
15
+ keepMounted?: boolean;
16
+ onCheckedChange?: (checked: boolean) => void;
17
+ onIndeterminateChange?: (indeterminate: boolean) => void;
18
+ };
19
+
20
+ let {
21
+ id,
22
+ name,
23
+ value = 'newsletter',
24
+ isChecked = $bindable(),
25
+ defaultChecked = false,
26
+ isIndeterminate = $bindable(),
27
+ defaultIndeterminate = false,
28
+ isDisabled = false,
29
+ isReadOnly = false,
30
+ required = false,
31
+ keepMounted = false,
32
+ onCheckedChange,
33
+ onIndeterminateChange
34
+ }: Props = $props();
35
+ </script>
36
+
37
+ <Checkbox.Root
38
+ {id}
39
+ {name}
40
+ {value}
41
+ bind:isChecked
42
+ {defaultChecked}
43
+ bind:isIndeterminate
44
+ {defaultIndeterminate}
45
+ {isDisabled}
46
+ {isReadOnly}
47
+ {required}
48
+ {onCheckedChange}
49
+ {onIndeterminateChange}
50
+ class="inline-flex h-5 w-5 items-center justify-center"
51
+ aria-label="Accept terms"
52
+ >
53
+ <Checkbox.Indicator {keepMounted}>
54
+ <span data-checkbox-icon="true">icon</span>
55
+ </Checkbox.Indicator>
56
+ </Checkbox.Root>
57
+
58
+ <output data-checked-state>{String(isChecked ?? false)}</output>
59
+ <output data-indeterminate-state>{String(isIndeterminate ?? false)}</output>
@@ -0,0 +1,18 @@
1
+ type Props = {
2
+ id?: string;
3
+ name?: string;
4
+ value?: string;
5
+ isChecked?: boolean;
6
+ defaultChecked?: boolean;
7
+ isIndeterminate?: boolean;
8
+ defaultIndeterminate?: boolean;
9
+ isDisabled?: boolean;
10
+ isReadOnly?: boolean;
11
+ required?: boolean;
12
+ keepMounted?: boolean;
13
+ onCheckedChange?: (checked: boolean) => void;
14
+ onIndeterminateChange?: (indeterminate: boolean) => void;
15
+ };
16
+ declare const CheckboxTest: import("svelte").Component<Props, {}, "isChecked" | "isIndeterminate">;
17
+ type CheckboxTest = ReturnType<typeof CheckboxTest>;
18
+ export default CheckboxTest;
@@ -0,0 +1,21 @@
1
+ export type CheckboxState = 'checked' | 'unchecked' | 'indeterminate';
2
+ export type CheckboxContext = {
3
+ id: string;
4
+ inputId: string;
5
+ inputRef: HTMLInputElement | null;
6
+ setInputRef: (element: HTMLInputElement | null) => void;
7
+ state: CheckboxState;
8
+ pressed: boolean;
9
+ isChecked: boolean;
10
+ isIndeterminate: boolean;
11
+ isDisabled: boolean;
12
+ isReadOnly: boolean;
13
+ required: boolean;
14
+ focused: boolean;
15
+ focusVisible: boolean;
16
+ toggle: (event?: Event) => void;
17
+ setState: (state: CheckboxState, event?: Event) => void;
18
+ };
19
+ export declare function setCheckboxContext(context: CheckboxContext): void;
20
+ export declare function getCheckboxContext(): CheckboxContext | undefined;
21
+ export declare function useCheckboxContext(): CheckboxContext;
@@ -0,0 +1,15 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ const CHECKBOX_CONTEXT_KEY = Symbol('checkbox');
3
+ export function setCheckboxContext(context) {
4
+ setContext(CHECKBOX_CONTEXT_KEY, context);
5
+ }
6
+ export function getCheckboxContext() {
7
+ return getContext(CHECKBOX_CONTEXT_KEY);
8
+ }
9
+ export function useCheckboxContext() {
10
+ const context = getCheckboxContext();
11
+ if (!context) {
12
+ throw new Error('Checkbox components must be used within Checkbox.Root.');
13
+ }
14
+ return context;
15
+ }
@@ -1,10 +1,10 @@
1
- export * as Clock from './index.parts.ts';
1
+ export * as Clock from './index.parts.js';
2
2
  export { default as ClockRoot } from './root/clock-root.svelte';
3
3
  export { default as ClockAxis } from './axis/clock-axis.svelte';
4
4
  export { default as ClockWheelColumn } from './wheel-column/clock-wheel-column.svelte';
5
5
  export { default as ClockWheelItem } from './wheel-item/clock-wheel-item.svelte';
6
- export { getClockContext, setClockContext, useClockContext, type ClockContext, type ClockEditableSegmentType } from './root/context.ts';
7
- export { type TimePickerGranularity as ClockGranularity, type TimePickerHourCycle as ClockHourCycle, type TimePickerTimeValue as ClockTimeValue } from './root/time-utils';
8
- export { type ClockColumnInfo } from './root/resolve-visible-columns';
9
- import * as ClockParts from './index.parts.ts';
6
+ export { getClockContext, setClockContext, useClockContext, type ClockContext, type ClockEditableSegmentType } from './root/context.js';
7
+ export { type TimePickerGranularity as ClockGranularity, type TimePickerHourCycle as ClockHourCycle, type TimePickerTimeValue as ClockTimeValue } from './root/time-utils.js';
8
+ export { type ClockColumnInfo } from './root/resolve-visible-columns.js';
9
+ import * as ClockParts from './index.parts.js';
10
10
  export default ClockParts;
@@ -1,10 +1,10 @@
1
- export * as Clock from './index.parts.ts';
1
+ export * as Clock from './index.parts.js';
2
2
  export { default as ClockRoot } from './root/clock-root.svelte';
3
3
  export { default as ClockAxis } from './axis/clock-axis.svelte';
4
4
  export { default as ClockWheelColumn } from './wheel-column/clock-wheel-column.svelte';
5
5
  export { default as ClockWheelItem } from './wheel-item/clock-wheel-item.svelte';
6
- export { getClockContext, setClockContext, useClockContext } from './root/context.ts';
7
- export {} from './root/time-utils';
8
- export {} from './root/resolve-visible-columns';
9
- import * as ClockParts from './index.parts.ts';
6
+ export { getClockContext, setClockContext, useClockContext } from './root/context.js';
7
+ export {} from './root/time-utils.js';
8
+ export {} from './root/resolve-visible-columns.js';
9
+ import * as ClockParts from './index.parts.js';
10
10
  export default ClockParts;
@@ -1,4 +1,4 @@
1
- export * as ComboBox from './index.parts.ts';
1
+ export * as ComboBox from './index.parts.js';
2
2
  export { default as ComboBoxRoot } from './root/combobox.svelte';
3
3
  export { default as ComboBoxInput } from './input/combobox-input.svelte';
4
4
  export { default as ComboBoxButton } from './button/combobox-button.svelte';
@@ -9,6 +9,6 @@ export { default as ComboBoxItemIndicator } from './item-indicator/combobox-item
9
9
  export { default as ComboBoxTags } from './tags/combobox-tags.svelte';
10
10
  export { default as ComboBoxTag } from './tag/combobox-tag.svelte';
11
11
  export { default as ComboBoxTagRemove } from './tag-remove/combobox-tag-remove.svelte';
12
- export { getComboBoxContext, setComboBoxContext, useComboBoxContext, type ComboBoxContext } from './root/context.ts';
13
- import * as ComboBoxParts from './index.parts.ts';
12
+ export { getComboBoxContext, setComboBoxContext, useComboBoxContext, type ComboBoxContext } from './root/context.js';
13
+ import * as ComboBoxParts from './index.parts.js';
14
14
  export default ComboBoxParts;
@@ -1,5 +1,5 @@
1
1
  // Namespace export for component composition: <ComboBox.Root>, <ComboBox.Input>, etc.
2
- export * as ComboBox from './index.parts.ts';
2
+ export * as ComboBox from './index.parts.js';
3
3
  // Direct named exports for individual imports
4
4
  export { default as ComboBoxRoot } from './root/combobox.svelte';
5
5
  export { default as ComboBoxInput } from './input/combobox-input.svelte';
@@ -12,7 +12,7 @@ export { default as ComboBoxTags } from './tags/combobox-tags.svelte';
12
12
  export { default as ComboBoxTag } from './tag/combobox-tag.svelte';
13
13
  export { default as ComboBoxTagRemove } from './tag-remove/combobox-tag-remove.svelte';
14
14
  // Context and types
15
- export { getComboBoxContext, setComboBoxContext, useComboBoxContext } from './root/context.ts';
15
+ export { getComboBoxContext, setComboBoxContext, useComboBoxContext } from './root/context.js';
16
16
  // Default export as namespace object
17
- import * as ComboBoxParts from './index.parts.ts';
17
+ import * as ComboBoxParts from './index.parts.js';
18
18
  export default ComboBoxParts;
@@ -1,6 +1,10 @@
1
1
  <script lang="ts">
2
2
  import type { HTMLInputAttributes } from 'svelte/elements';
3
3
  import { useComboBoxContext } from '../root/context';
4
+ import {
5
+ shouldShowFocusVisible,
6
+ trackInteractionModality
7
+ } from '../../primitives/input-modality';
4
8
  import { cn } from '../../utils/cn';
5
9
 
6
10
  type ComboBoxInputProps = HTMLInputAttributes & {
@@ -42,6 +46,8 @@
42
46
  }
43
47
 
44
48
  function handleFocus() {
49
+ ctx.setFocusVisible(shouldShowFocusVisible(inputRef));
50
+
45
51
  // Open on focus if trigger is 'focus'
46
52
  // Use a small delay to avoid opening immediately on programmatic focus
47
53
  // (e.g., from a focus trap). This gives time for refs to be set up.
@@ -54,7 +60,9 @@
54
60
  }
55
61
  }
56
62
 
57
- function handleMouseDown() {
63
+ function handleMouseDown(event: MouseEvent) {
64
+ trackInteractionModality(event, inputRef);
65
+ ctx.setFocusVisible(false);
58
66
  ctx.setFocusedTagId(null);
59
67
  // Open on press if trigger is 'press'
60
68
  if (ctx.trigger === 'press' && !ctx.isOpen && !ctx.isDisabled && !ctx.isReadOnly) {
@@ -62,7 +70,14 @@
62
70
  }
63
71
  }
64
72
 
73
+ function handleKeyDown(event: KeyboardEvent) {
74
+ trackInteractionModality(event, inputRef);
75
+ ctx.setFocusVisible(shouldShowFocusVisible(inputRef));
76
+ ctx.handleKeydown(event);
77
+ }
78
+
65
79
  function handleBlur() {
80
+ ctx.setFocusVisible(false);
66
81
  // Restore selection label or deselect if empty
67
82
  ctx.handleInputBlur();
68
83
  }
@@ -89,7 +104,7 @@
89
104
  onfocus={handleFocus}
90
105
  onmousedown={handleMouseDown}
91
106
  onblur={handleBlur}
92
- onkeydown={ctx.handleKeydown}
107
+ onkeydown={handleKeyDown}
93
108
  class={cn(
94
109
  'bg-depth-2 sunken placeholder:text-muted-foreground hover:bg-depth-1 focus:ring-border h-8 w-full rounded-xs border px-2 text-sm shadow-xs transition-all ease-out outline-none focus:ring focus:ring-offset-1 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',
95
110
  className
@@ -17,7 +17,7 @@ declare function $$render<T extends object = object>(): {
17
17
  } & {
18
18
  context?: ListBoxContext;
19
19
  element?: HTMLElement;
20
- }, "selectionMode" | "selectionBehavior" | "id" | "value" | "defaultValue" | "onChange" | "items" | "children" | "context" | "element"> & {
20
+ }, "children" | "id" | "value" | "selectionMode" | "selectionBehavior" | "defaultValue" | "onChange" | "items" | "context" | "element"> & {
21
21
  /** Optional items for dynamic rendering - overrides items from ComboBox context */
22
22
  items?: Iterable<T>;
23
23
  /** Content of the listbox. Receives item in dynamic mode. */
@@ -2,6 +2,8 @@
2
2
  import type { Snippet } from 'svelte';
3
3
  import { useComboBoxContext } from '../root/context';
4
4
  import { Popover } from '../../popover';
5
+ import { focusWithModality, type InputModality } from '../../primitives/input-modality';
6
+ import type { PopoverOpenChangeDetails } from '../../popover/root/context';
5
7
 
6
8
  /**
7
9
  * ComboBox.Popover - Just the floating container wrapper.
@@ -16,7 +18,21 @@
16
18
 
17
19
  const ctx = useComboBoxContext();
18
20
 
19
- function handleOpenChange(open: boolean) {
21
+ function resolveFocusTarget(details?: PopoverOpenChangeDetails): HTMLElement | null {
22
+ const rawTarget = details?.event?.target;
23
+ if (!(rawTarget instanceof Node)) return null;
24
+ if (ctx.inputRef?.contains(rawTarget)) return null;
25
+ return rawTarget instanceof HTMLElement ? rawTarget : rawTarget.parentElement;
26
+ }
27
+
28
+ function handleOpenChange(open: boolean, details?: PopoverOpenChangeDetails) {
29
+ if (!open && details?.reason === 'outside-press') {
30
+ const target = resolveFocusTarget(details);
31
+ if (target) {
32
+ focusWithModality(target, 'pointer' satisfies InputModality);
33
+ }
34
+ }
35
+
20
36
  ctx.onOpenChange(open);
21
37
  }
22
38
 
@@ -358,6 +358,10 @@
358
358
  queueMicrotask(syncFocusWithin);
359
359
  }
360
360
 
361
+ function setFocusVisibleState(visible: boolean) {
362
+ focusVisible = visible && focusWithin;
363
+ }
364
+
361
365
  // Use navigation hook methods for keyboard navigation
362
366
  function selectFocusedItem() {
363
367
  if (navigation.focusedId !== null) {
@@ -694,6 +698,7 @@
694
698
  unregisterItem: navigation.unregister,
695
699
  handleKeydown,
696
700
  handleInputBlur,
701
+ setFocusVisible: setFocusVisibleState,
697
702
  get focusedTagId() {
698
703
  return focusedTagId;
699
704
  },
@@ -80,6 +80,8 @@ export type ComboBoxContext<T extends object = object> = {
80
80
  handleKeydown: (event: KeyboardEvent) => void;
81
81
  /** Handle input blur - restore selection or deselect if empty */
82
82
  handleInputBlur: () => void;
83
+ /** Update root-level focus-visible state based on current modality. */
84
+ setFocusVisible: (visible: boolean) => void;
83
85
  /** Currently focused tag ID (virtual focus for tag navigation) */
84
86
  focusedTagId: string | number | null;
85
87
  /** Set focused tag ID (virtual focus for tag navigation) */
@@ -1,4 +1,4 @@
1
- export * as DatePicker from './index.parts.ts';
1
+ export * as DatePicker from './index.parts.js';
2
2
  export { default as DatePickerRoot } from './root/date-picker-root.svelte';
3
3
  export { default as DatePickerInput } from './input/date-picker-input.svelte';
4
4
  export { default as DatePickerSegment } from './segment/date-picker-segment.svelte';
@@ -13,6 +13,6 @@ export { default as DatePickerGridHeader } from '../calendar/grid-header/calenda
13
13
  export { default as DatePickerHeaderCell } from '../calendar/header-cell/calendar-header-cell.svelte';
14
14
  export { default as DatePickerGridBody } from '../calendar/grid-body/calendar-grid-body.svelte';
15
15
  export { default as DatePickerBodyCell } from '../calendar/body-cell/calendar-body-cell.svelte';
16
- export { getDatePickerContext, setDatePickerContext, useDatePickerContext, type DatePickerContext, type DatePickerOpenChangeDetails, type DatePickerOpenChangeReason, type DatePickerSegmentPart, type DatePickerSegmentType } from './root/context.ts';
17
- import * as DatePickerParts from './index.parts.ts';
16
+ export { getDatePickerContext, setDatePickerContext, useDatePickerContext, type DatePickerContext, type DatePickerOpenChangeDetails, type DatePickerOpenChangeReason, type DatePickerSegmentPart, type DatePickerSegmentType } from './root/context.js';
17
+ import * as DatePickerParts from './index.parts.js';
18
18
  export default DatePickerParts;
@@ -1,4 +1,4 @@
1
- export * as DatePicker from './index.parts.ts';
1
+ export * as DatePicker from './index.parts.js';
2
2
  export { default as DatePickerRoot } from './root/date-picker-root.svelte';
3
3
  export { default as DatePickerInput } from './input/date-picker-input.svelte';
4
4
  export { default as DatePickerSegment } from './segment/date-picker-segment.svelte';
@@ -13,6 +13,6 @@ export { default as DatePickerGridHeader } from '../calendar/grid-header/calenda
13
13
  export { default as DatePickerHeaderCell } from '../calendar/header-cell/calendar-header-cell.svelte';
14
14
  export { default as DatePickerGridBody } from '../calendar/grid-body/calendar-grid-body.svelte';
15
15
  export { default as DatePickerBodyCell } from '../calendar/body-cell/calendar-body-cell.svelte';
16
- export { getDatePickerContext, setDatePickerContext, useDatePickerContext } from './root/context.ts';
17
- import * as DatePickerParts from './index.parts.ts';
16
+ export { getDatePickerContext, setDatePickerContext, useDatePickerContext } from './root/context.js';
17
+ import * as DatePickerParts from './index.parts.js';
18
18
  export default DatePickerParts;
@@ -1,4 +1,4 @@
1
- import * as DialogParts from './index.parts.ts';
1
+ import * as DialogParts from './index.parts.js';
2
2
  export declare const Dialog: typeof DialogParts;
3
3
  export default DialogParts;
4
4
  export { default as DialogRoot } from './root/dialog-root.svelte';
@@ -6,5 +6,5 @@ export { default as DialogTrigger } from './trigger/dialog-trigger.svelte';
6
6
  export { default as DialogPortal } from './portal/dialog-portal.svelte';
7
7
  export { default as DialogOverlay } from './overlay/dialog-overlay.svelte';
8
8
  export { default as DialogContent } from './content/dialog-content.svelte';
9
- export { getDialogContext, setDialogContext, type DialogContext } from './root/context';
10
- export type { DialogStateHelpers } from './root/types';
9
+ export { getDialogContext, setDialogContext, type DialogContext } from './root/context.js';
10
+ export type { DialogStateHelpers } from './root/types.js';
@@ -1,6 +1,6 @@
1
1
  // Dialog component with namespace pattern
2
2
  // Usage: <Dialog.Root>, <Dialog.Trigger>, <Dialog.Portal>, <Dialog.Overlay>, <Dialog.Content>
3
- import * as DialogParts from './index.parts.ts';
3
+ import * as DialogParts from './index.parts.js';
4
4
  // Named export for namespace usage: import { Dialog } from '...'
5
5
  export const Dialog = DialogParts;
6
6
  // Default export for backwards compatibility
@@ -12,4 +12,4 @@ export { default as DialogPortal } from './portal/dialog-portal.svelte';
12
12
  export { default as DialogOverlay } from './overlay/dialog-overlay.svelte';
13
13
  export { default as DialogContent } from './content/dialog-content.svelte';
14
14
  // Re-export context utilities
15
- export { getDialogContext, setDialogContext } from './root/context';
15
+ export { getDialogContext, setDialogContext } from './root/context.js';
package/dist/index.d.ts CHANGED
@@ -1,25 +1,29 @@
1
- export { ComboBox } from './combobox/index.ts';
2
- export { Calendar } from './calendar/index.ts';
3
- export { Clock } from './clock/index.ts';
4
- export { DatePicker } from './datepicker/index.ts';
5
- export { TimePicker } from './timepicker/index.ts';
6
- export { Dialog } from './dialog/index.ts';
7
- export { ListBox } from './listbox/index.ts';
8
- export { Popover } from './popover/index.ts';
9
- export { default as Input } from './input/index.ts';
10
- export { default as Label } from './label/index.ts';
11
- export { default as LocaleProvider } from './locale-provider/index.ts';
12
- export { Portal } from './portal/index.ts';
13
- export * from './locale-provider/index.ts';
14
- export * from './combobox/index.ts';
15
- export * from './calendar/index.ts';
16
- export * from './clock/index.ts';
17
- export * from './datepicker/index.ts';
18
- export * from './timepicker/index.ts';
19
- export * from './dialog/index.ts';
20
- export * from './listbox/index.ts';
21
- export * from './popover/index.ts';
22
- export * from './primitives/index.ts';
23
- export { cn } from './utils/index.ts';
24
- export * from './utils/index.ts';
25
- export * from './utils/index.ts';
1
+ export { Checkbox } from './checkbox/index.js';
2
+ export { ComboBox } from './combobox/index.js';
3
+ export { Calendar } from './calendar/index.js';
4
+ export { Clock } from './clock/index.js';
5
+ export { DatePicker } from './datepicker/index.js';
6
+ export { TimePicker } from './timepicker/index.js';
7
+ export { Dialog } from './dialog/index.js';
8
+ export { ListBox } from './listbox/index.js';
9
+ export { Popover } from './popover/index.js';
10
+ export { Table } from './table/index.js';
11
+ export { default as Input } from './input/index.js';
12
+ export { default as Label } from './label/index.js';
13
+ export { default as LocaleProvider } from './locale-provider/index.js';
14
+ export { Portal } from './portal/index.js';
15
+ export * from './locale-provider/index.js';
16
+ export * from './checkbox/index.js';
17
+ export * from './combobox/index.js';
18
+ export * from './calendar/index.js';
19
+ export * from './clock/index.js';
20
+ export * from './datepicker/index.js';
21
+ export * from './timepicker/index.js';
22
+ export * from './dialog/index.js';
23
+ export * from './listbox/index.js';
24
+ export * from './popover/index.js';
25
+ export * from './table/index.js';
26
+ export * from './primitives/index.js';
27
+ export { cn } from './utils/index.js';
28
+ export * from './utils/index.js';
29
+ export * from './utils/index.js';
package/dist/index.js CHANGED
@@ -1,31 +1,35 @@
1
1
  // Main library entry point
2
2
  // Components (namespace exports)
3
- export { ComboBox } from './combobox/index.ts';
4
- export { Calendar } from './calendar/index.ts';
5
- export { Clock } from './clock/index.ts';
6
- export { DatePicker } from './datepicker/index.ts';
7
- export { TimePicker } from './timepicker/index.ts';
8
- export { Dialog } from './dialog/index.ts';
9
- export { ListBox } from './listbox/index.ts';
10
- export { Popover } from './popover/index.ts';
3
+ export { Checkbox } from './checkbox/index.js';
4
+ export { ComboBox } from './combobox/index.js';
5
+ export { Calendar } from './calendar/index.js';
6
+ export { Clock } from './clock/index.js';
7
+ export { DatePicker } from './datepicker/index.js';
8
+ export { TimePicker } from './timepicker/index.js';
9
+ export { Dialog } from './dialog/index.js';
10
+ export { ListBox } from './listbox/index.js';
11
+ export { Popover } from './popover/index.js';
12
+ export { Table } from './table/index.js';
11
13
  // Simple components
12
- export { default as Input } from './input/index.ts';
13
- export { default as Label } from './label/index.ts';
14
- export { default as LocaleProvider } from './locale-provider/index.ts';
15
- export { Portal } from './portal/index.ts';
16
- export * from './locale-provider/index.ts';
14
+ export { default as Input } from './input/index.js';
15
+ export { default as Label } from './label/index.js';
16
+ export { default as LocaleProvider } from './locale-provider/index.js';
17
+ export { Portal } from './portal/index.js';
18
+ export * from './locale-provider/index.js';
17
19
  // Re-export named exports from components
18
- export * from './combobox/index.ts';
19
- export * from './calendar/index.ts';
20
- export * from './clock/index.ts';
21
- export * from './datepicker/index.ts';
22
- export * from './timepicker/index.ts';
23
- export * from './dialog/index.ts';
24
- export * from './listbox/index.ts';
25
- export * from './popover/index.ts';
20
+ export * from './checkbox/index.js';
21
+ export * from './combobox/index.js';
22
+ export * from './calendar/index.js';
23
+ export * from './clock/index.js';
24
+ export * from './datepicker/index.js';
25
+ export * from './timepicker/index.js';
26
+ export * from './dialog/index.js';
27
+ export * from './listbox/index.js';
28
+ export * from './popover/index.js';
29
+ export * from './table/index.js';
26
30
  // Primitives
27
- export * from './primitives/index.ts';
31
+ export * from './primitives/index.js';
28
32
  // Utilities
29
- export { cn } from './utils/index.ts';
30
- export * from './utils/index.ts';
31
- export * from './utils/index.ts';
33
+ export { cn } from './utils/index.js';
34
+ export * from './utils/index.js';
35
+ export * from './utils/index.js';
@@ -1,6 +1,6 @@
1
- export * as ListBox from './index.parts.ts';
1
+ export * as ListBox from './index.parts.js';
2
2
  export { default as ListBoxRoot } from './root/listbox.svelte';
3
3
  export { default as ListBoxItem } from './item/listbox-item.svelte';
4
- export { useListBoxContext, createListBoxContext, type ListBoxContext } from './root/context.ts';
5
- import * as ListBoxParts from './index.parts.ts';
4
+ export { useListBoxContext, createListBoxContext, type ListBoxContext } from './root/context.js';
5
+ import * as ListBoxParts from './index.parts.js';
6
6
  export default ListBoxParts;
@@ -1,10 +1,10 @@
1
1
  // Namespace export for component composition: <ListBox.Root>, <ListBox.Item>
2
- export * as ListBox from './index.parts.ts';
2
+ export * as ListBox from './index.parts.js';
3
3
  // Direct named exports for individual imports
4
4
  export { default as ListBoxRoot } from './root/listbox.svelte';
5
5
  export { default as ListBoxItem } from './item/listbox-item.svelte';
6
6
  // Context and types
7
- export { useListBoxContext, createListBoxContext } from './root/context.ts';
7
+ export { useListBoxContext, createListBoxContext } from './root/context.js';
8
8
  // Default export as namespace object
9
- import * as ListBoxParts from './index.parts.ts';
9
+ import * as ListBoxParts from './index.parts.js';
10
10
  export default ListBoxParts;
@@ -1,8 +1,8 @@
1
- export * as Popover from './index.parts.ts';
1
+ export * as Popover from './index.parts.js';
2
2
  export { default as PopoverRoot } from './root/popover-root.svelte';
3
3
  export { default as PopoverContent } from './content/popover-content.svelte';
4
4
  export { default as PopoverTrigger } from './trigger/popover-trigger.svelte';
5
5
  export { default as PopoverTriggerButton } from './trigger/popover-trigger-button.svelte';
6
- export { getPopoverContext, setPopoverContext, type PopoverContext, type PopoverCanonicalCloseReason, type PopoverCloseReason, type PopoverOpenReason, type PopoverChangeReason, type PopoverOpenChangeDetails } from './root/context.ts';
7
- import * as PopoverParts from './index.parts.ts';
6
+ export { getPopoverContext, setPopoverContext, type PopoverContext, type PopoverCanonicalCloseReason, type PopoverCloseReason, type PopoverOpenReason, type PopoverChangeReason, type PopoverOpenChangeDetails } from './root/context.js';
7
+ import * as PopoverParts from './index.parts.js';
8
8
  export default PopoverParts;
@@ -1,12 +1,12 @@
1
1
  // Namespace export for component composition: <Popover.Root>, <Popover.Trigger>, etc.
2
- export * as Popover from './index.parts.ts';
2
+ export * as Popover from './index.parts.js';
3
3
  // Direct named exports for individual imports
4
4
  export { default as PopoverRoot } from './root/popover-root.svelte';
5
5
  export { default as PopoverContent } from './content/popover-content.svelte';
6
6
  export { default as PopoverTrigger } from './trigger/popover-trigger.svelte';
7
7
  export { default as PopoverTriggerButton } from './trigger/popover-trigger-button.svelte';
8
8
  // Context and types
9
- export { getPopoverContext, setPopoverContext } from './root/context.ts';
9
+ export { getPopoverContext, setPopoverContext } from './root/context.js';
10
10
  // Default export as namespace object
11
- import * as PopoverParts from './index.parts.ts';
11
+ import * as PopoverParts from './index.parts.js';
12
12
  export default PopoverParts;
@@ -0,0 +1,8 @@
1
+ # Table Implementation Notes
2
+
3
+ ## Open questions
4
+
5
+ - Disabled body rows are currently rendered and keyboard-focusable, but they cannot be selected. We should validate whether this matches the desired UX.
6
+ - `Table.Column` is implemented as a logical wrapper and currently assumes the intended child is a single `Table.ColumnHeaderCell`.
7
+ - `Table.Footer` renders semantic table cells but is intentionally excluded from the roving-focus model in v1.
8
+ - Interactive controls nested inside `Table.Cell` are still intentionally out of scope for v1.