@sectile/vue 0.2.1

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 (287) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -0
  3. package/dist/accordion.d.ts +250 -0
  4. package/dist/accordion.d.ts.map +1 -0
  5. package/dist/accordion.js +242 -0
  6. package/dist/accordion.js.map +1 -0
  7. package/dist/alert-dialog.d.ts +16 -0
  8. package/dist/alert-dialog.d.ts.map +1 -0
  9. package/dist/alert-dialog.js +18 -0
  10. package/dist/alert-dialog.js.map +1 -0
  11. package/dist/calendar.d.ts +232 -0
  12. package/dist/calendar.d.ts.map +1 -0
  13. package/dist/calendar.js +109 -0
  14. package/dist/calendar.js.map +1 -0
  15. package/dist/carousel.d.ts +365 -0
  16. package/dist/carousel.d.ts.map +1 -0
  17. package/dist/carousel.js +140 -0
  18. package/dist/carousel.js.map +1 -0
  19. package/dist/cascade-select.d.ts +442 -0
  20. package/dist/cascade-select.d.ts.map +1 -0
  21. package/dist/cascade-select.js +111 -0
  22. package/dist/cascade-select.js.map +1 -0
  23. package/dist/checkbox-group.d.ts +206 -0
  24. package/dist/checkbox-group.d.ts.map +1 -0
  25. package/dist/checkbox-group.js +98 -0
  26. package/dist/checkbox-group.js.map +1 -0
  27. package/dist/checkbox.d.ts +152 -0
  28. package/dist/checkbox.d.ts.map +1 -0
  29. package/dist/checkbox.js +164 -0
  30. package/dist/checkbox.js.map +1 -0
  31. package/dist/color-picker.d.ts +602 -0
  32. package/dist/color-picker.d.ts.map +1 -0
  33. package/dist/color-picker.js +129 -0
  34. package/dist/color-picker.js.map +1 -0
  35. package/dist/combobox.d.ts +320 -0
  36. package/dist/combobox.d.ts.map +1 -0
  37. package/dist/combobox.js +176 -0
  38. package/dist/combobox.js.map +1 -0
  39. package/dist/date-field.d.ts +15 -0
  40. package/dist/date-field.d.ts.map +1 -0
  41. package/dist/date-field.js +19 -0
  42. package/dist/date-field.js.map +1 -0
  43. package/dist/date-picker.d.ts +554 -0
  44. package/dist/date-picker.d.ts.map +1 -0
  45. package/dist/date-picker.js +18 -0
  46. package/dist/date-picker.js.map +1 -0
  47. package/dist/date-range-field.d.ts +129 -0
  48. package/dist/date-range-field.d.ts.map +1 -0
  49. package/dist/date-range-field.js +134 -0
  50. package/dist/date-range-field.js.map +1 -0
  51. package/dist/date-range-picker.d.ts +594 -0
  52. package/dist/date-range-picker.d.ts.map +1 -0
  53. package/dist/date-range-picker.js +19 -0
  54. package/dist/date-range-picker.js.map +1 -0
  55. package/dist/date-time-field.d.ts +15 -0
  56. package/dist/date-time-field.d.ts.map +1 -0
  57. package/dist/date-time-field.js +19 -0
  58. package/dist/date-time-field.js.map +1 -0
  59. package/dist/date-time-picker.d.ts +635 -0
  60. package/dist/date-time-picker.d.ts.map +1 -0
  61. package/dist/date-time-picker.js +20 -0
  62. package/dist/date-time-picker.js.map +1 -0
  63. package/dist/date-time-range-picker.d.ts +755 -0
  64. package/dist/date-time-range-picker.d.ts.map +1 -0
  65. package/dist/date-time-range-picker.js +23 -0
  66. package/dist/date-time-range-picker.js.map +1 -0
  67. package/dist/dialog.d.ts +16 -0
  68. package/dist/dialog.d.ts.map +1 -0
  69. package/dist/dialog.js +15 -0
  70. package/dist/dialog.js.map +1 -0
  71. package/dist/disclosure.d.ts +147 -0
  72. package/dist/disclosure.d.ts.map +1 -0
  73. package/dist/disclosure.js +129 -0
  74. package/dist/disclosure.js.map +1 -0
  75. package/dist/editable.d.ts +300 -0
  76. package/dist/editable.d.ts.map +1 -0
  77. package/dist/editable.js +181 -0
  78. package/dist/editable.js.map +1 -0
  79. package/dist/feed.d.ts +216 -0
  80. package/dist/feed.d.ts.map +1 -0
  81. package/dist/feed.js +85 -0
  82. package/dist/feed.js.map +1 -0
  83. package/dist/form.d.ts +356 -0
  84. package/dist/form.d.ts.map +1 -0
  85. package/dist/form.js +752 -0
  86. package/dist/form.js.map +1 -0
  87. package/dist/grid.d.ts +254 -0
  88. package/dist/grid.d.ts.map +1 -0
  89. package/dist/grid.js +95 -0
  90. package/dist/grid.js.map +1 -0
  91. package/dist/host-provider.d.ts +46 -0
  92. package/dist/host-provider.d.ts.map +1 -0
  93. package/dist/host-provider.js +39 -0
  94. package/dist/host-provider.js.map +1 -0
  95. package/dist/index.d.ts +124 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +61 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/internal/date-picker.d.ts +539 -0
  100. package/dist/internal/date-picker.d.ts.map +1 -0
  101. package/dist/internal/date-picker.js +522 -0
  102. package/dist/internal/date-picker.js.map +1 -0
  103. package/dist/internal/form-control-inventory.d.ts +154 -0
  104. package/dist/internal/form-control-inventory.d.ts.map +1 -0
  105. package/dist/internal/form-control-inventory.js +43 -0
  106. package/dist/internal/form-control-inventory.js.map +1 -0
  107. package/dist/internal/form-control.d.ts +41 -0
  108. package/dist/internal/form-control.d.ts.map +1 -0
  109. package/dist/internal/form-control.js +52 -0
  110. package/dist/internal/form-control.js.map +1 -0
  111. package/dist/internal/native-field.d.ts +49 -0
  112. package/dist/internal/native-field.d.ts.map +1 -0
  113. package/dist/internal/native-field.js +81 -0
  114. package/dist/internal/native-field.js.map +1 -0
  115. package/dist/internal/native-input.d.ts +9 -0
  116. package/dist/internal/native-input.d.ts.map +1 -0
  117. package/dist/internal/native-input.js +9 -0
  118. package/dist/internal/native-input.js.map +1 -0
  119. package/dist/internal/part-contract.d.ts +9 -0
  120. package/dist/internal/part-contract.d.ts.map +1 -0
  121. package/dist/internal/part-contract.js +12 -0
  122. package/dist/internal/part-contract.js.map +1 -0
  123. package/dist/internal/popup.d.ts +99 -0
  124. package/dist/internal/popup.d.ts.map +1 -0
  125. package/dist/internal/popup.js +238 -0
  126. package/dist/internal/popup.js.map +1 -0
  127. package/dist/internal/tabs-context.d.ts +25 -0
  128. package/dist/internal/tabs-context.d.ts.map +1 -0
  129. package/dist/internal/tabs-context.js +9 -0
  130. package/dist/internal/tabs-context.js.map +1 -0
  131. package/dist/listbox.d.ts +275 -0
  132. package/dist/listbox.d.ts.map +1 -0
  133. package/dist/listbox.js +258 -0
  134. package/dist/listbox.js.map +1 -0
  135. package/dist/menu-button.d.ts +2 -0
  136. package/dist/menu-button.d.ts.map +1 -0
  137. package/dist/menu-button.js +2 -0
  138. package/dist/menu-button.js.map +1 -0
  139. package/dist/menu.d.ts +638 -0
  140. package/dist/menu.d.ts.map +1 -0
  141. package/dist/menu.js +167 -0
  142. package/dist/menu.js.map +1 -0
  143. package/dist/menubar.d.ts +2 -0
  144. package/dist/menubar.d.ts.map +1 -0
  145. package/dist/menubar.js +2 -0
  146. package/dist/menubar.js.map +1 -0
  147. package/dist/month-picker.d.ts +353 -0
  148. package/dist/month-picker.d.ts.map +1 -0
  149. package/dist/month-picker.js +10 -0
  150. package/dist/month-picker.js.map +1 -0
  151. package/dist/month-range-picker.d.ts +393 -0
  152. package/dist/month-range-picker.d.ts.map +1 -0
  153. package/dist/month-range-picker.js +11 -0
  154. package/dist/month-range-picker.js.map +1 -0
  155. package/dist/multi-thumb-slider.d.ts +299 -0
  156. package/dist/multi-thumb-slider.d.ts.map +1 -0
  157. package/dist/multi-thumb-slider.js +204 -0
  158. package/dist/multi-thumb-slider.js.map +1 -0
  159. package/dist/navigation-menu.d.ts +114 -0
  160. package/dist/navigation-menu.d.ts.map +1 -0
  161. package/dist/navigation-menu.js +36 -0
  162. package/dist/navigation-menu.js.map +1 -0
  163. package/dist/number-field.d.ts +12 -0
  164. package/dist/number-field.d.ts.map +1 -0
  165. package/dist/number-field.js +21 -0
  166. package/dist/number-field.js.map +1 -0
  167. package/dist/pagination.d.ts +294 -0
  168. package/dist/pagination.d.ts.map +1 -0
  169. package/dist/pagination.js +145 -0
  170. package/dist/pagination.js.map +1 -0
  171. package/dist/pin-input.d.ts +207 -0
  172. package/dist/pin-input.d.ts.map +1 -0
  173. package/dist/pin-input.js +129 -0
  174. package/dist/pin-input.js.map +1 -0
  175. package/dist/popover.d.ts +17 -0
  176. package/dist/popover.d.ts.map +1 -0
  177. package/dist/popover.js +16 -0
  178. package/dist/popover.js.map +1 -0
  179. package/dist/primitive.d.ts +41 -0
  180. package/dist/primitive.d.ts.map +1 -0
  181. package/dist/primitive.js +27 -0
  182. package/dist/primitive.js.map +1 -0
  183. package/dist/quantity-field.d.ts +249 -0
  184. package/dist/quantity-field.d.ts.map +1 -0
  185. package/dist/quantity-field.js +131 -0
  186. package/dist/quantity-field.js.map +1 -0
  187. package/dist/radio-group.d.ts +225 -0
  188. package/dist/radio-group.d.ts.map +1 -0
  189. package/dist/radio-group.js +198 -0
  190. package/dist/radio-group.js.map +1 -0
  191. package/dist/range-calendar.d.ts +336 -0
  192. package/dist/range-calendar.d.ts.map +1 -0
  193. package/dist/range-calendar.js +15 -0
  194. package/dist/range-calendar.js.map +1 -0
  195. package/dist/rating.d.ts +228 -0
  196. package/dist/rating.d.ts.map +1 -0
  197. package/dist/rating.js +118 -0
  198. package/dist/rating.js.map +1 -0
  199. package/dist/reorder.d.ts +209 -0
  200. package/dist/reorder.d.ts.map +1 -0
  201. package/dist/reorder.js +186 -0
  202. package/dist/reorder.js.map +1 -0
  203. package/dist/select.d.ts +352 -0
  204. package/dist/select.d.ts.map +1 -0
  205. package/dist/select.js +191 -0
  206. package/dist/select.js.map +1 -0
  207. package/dist/slider.d.ts +269 -0
  208. package/dist/slider.d.ts.map +1 -0
  209. package/dist/slider.js +197 -0
  210. package/dist/slider.js.map +1 -0
  211. package/dist/spin-button.d.ts +272 -0
  212. package/dist/spin-button.d.ts.map +1 -0
  213. package/dist/spin-button.js +190 -0
  214. package/dist/spin-button.js.map +1 -0
  215. package/dist/stepper.d.ts +310 -0
  216. package/dist/stepper.d.ts.map +1 -0
  217. package/dist/stepper.js +87 -0
  218. package/dist/stepper.js.map +1 -0
  219. package/dist/switch.d.ts +149 -0
  220. package/dist/switch.d.ts.map +1 -0
  221. package/dist/switch.js +140 -0
  222. package/dist/switch.js.map +1 -0
  223. package/dist/tabs.d.ts +290 -0
  224. package/dist/tabs.d.ts.map +1 -0
  225. package/dist/tabs.js +258 -0
  226. package/dist/tabs.js.map +1 -0
  227. package/dist/tags-input.d.ts +297 -0
  228. package/dist/tags-input.d.ts.map +1 -0
  229. package/dist/tags-input.js +196 -0
  230. package/dist/tags-input.js.map +1 -0
  231. package/dist/text.d.ts +138 -0
  232. package/dist/text.d.ts.map +1 -0
  233. package/dist/text.js +125 -0
  234. package/dist/text.js.map +1 -0
  235. package/dist/time-field.d.ts +15 -0
  236. package/dist/time-field.d.ts.map +1 -0
  237. package/dist/time-field.js +19 -0
  238. package/dist/time-field.js.map +1 -0
  239. package/dist/time-range-field.d.ts +128 -0
  240. package/dist/time-range-field.d.ts.map +1 -0
  241. package/dist/time-range-field.js +44 -0
  242. package/dist/time-range-field.js.map +1 -0
  243. package/dist/timer.d.ts +232 -0
  244. package/dist/timer.d.ts.map +1 -0
  245. package/dist/timer.js +51 -0
  246. package/dist/timer.js.map +1 -0
  247. package/dist/toast.d.ts +189 -0
  248. package/dist/toast.d.ts.map +1 -0
  249. package/dist/toast.js +78 -0
  250. package/dist/toast.js.map +1 -0
  251. package/dist/toggle-button.d.ts +81 -0
  252. package/dist/toggle-button.d.ts.map +1 -0
  253. package/dist/toggle-button.js +75 -0
  254. package/dist/toggle-button.js.map +1 -0
  255. package/dist/toggle-group.d.ts +228 -0
  256. package/dist/toggle-group.d.ts.map +1 -0
  257. package/dist/toggle-group.js +143 -0
  258. package/dist/toggle-group.js.map +1 -0
  259. package/dist/toolbar.d.ts +202 -0
  260. package/dist/toolbar.d.ts.map +1 -0
  261. package/dist/toolbar.js +82 -0
  262. package/dist/toolbar.js.map +1 -0
  263. package/dist/tooltip.d.ts +13 -0
  264. package/dist/tooltip.d.ts.map +1 -0
  265. package/dist/tooltip.js +15 -0
  266. package/dist/tooltip.js.map +1 -0
  267. package/dist/tree-grid.d.ts +359 -0
  268. package/dist/tree-grid.d.ts.map +1 -0
  269. package/dist/tree-grid.js +125 -0
  270. package/dist/tree-grid.js.map +1 -0
  271. package/dist/tree-view.d.ts +304 -0
  272. package/dist/tree-view.d.ts.map +1 -0
  273. package/dist/tree-view.js +131 -0
  274. package/dist/tree-view.js.map +1 -0
  275. package/dist/window-splitter.d.ts +204 -0
  276. package/dist/window-splitter.d.ts.map +1 -0
  277. package/dist/window-splitter.js +82 -0
  278. package/dist/window-splitter.js.map +1 -0
  279. package/dist/year-picker.d.ts +353 -0
  280. package/dist/year-picker.d.ts.map +1 -0
  281. package/dist/year-picker.js +10 -0
  282. package/dist/year-picker.js.map +1 -0
  283. package/dist/year-range-picker.d.ts +393 -0
  284. package/dist/year-range-picker.d.ts.map +1 -0
  285. package/dist/year-range-picker.js +11 -0
  286. package/dist/year-range-picker.js.map +1 -0
  287. package/package.json +356 -0
@@ -0,0 +1,82 @@
1
+ import { computed, defineComponent, h, inject, mergeProps, onBeforeUnmount, onMounted, provide, shallowRef, watch, } from 'vue';
2
+ import { createToolbar } from '@sectile/dom/toolbar';
3
+ import { Primitive } from './primitive.js';
4
+ import { useHostDirection } from './host-provider.js';
5
+ const key = Symbol('SectileToolbarRoot');
6
+ const partProps = { as: { type: [String, Object, Function], default: 'div' }, asChild: { type: Boolean, default: false } };
7
+ export const ToolbarRoot = defineComponent({
8
+ name: 'SectileToolbarRoot', inheritAttrs: false,
9
+ props: {
10
+ items: { type: Array, required: true }, modelValue: { type: String, default: undefined },
11
+ defaultValue: { type: String, default: null }, disabledItems: { type: Array, default: () => [] },
12
+ disabled: { type: Boolean, default: false }, orientation: { type: String, default: 'horizontal' },
13
+ label: { type: String, default: undefined }, policies: { type: Object, default: undefined },
14
+ as: { type: [String, Object, Function], default: 'div' }, asChild: { type: Boolean, default: false },
15
+ },
16
+ emits: { 'update:modelValue': (_value) => true, invoke: (_value) => true },
17
+ slots: Object,
18
+ setup(props, { attrs, emit, slots }) {
19
+ const direction = useHostDirection();
20
+ const root = shallowRef();
21
+ const connection = shallowRef();
22
+ const current = shallowRef(props.modelValue !== undefined ? props.modelValue : props.defaultValue);
23
+ const controlled = props.modelValue !== undefined;
24
+ const state = computed(() => ({ highlightedValue: props.modelValue !== undefined ? props.modelValue : current.value, disabled: props.disabled, orientation: props.orientation }));
25
+ const refresh = () => { if (connection.value !== undefined)
26
+ current.value = connection.value.getSnapshot().state.cursor.current; refreshItems(); };
27
+ const refreshItems = () => { if (root.value === undefined || connection.value === undefined)
28
+ return; root.value.querySelectorAll('[data-sectile-toolbar-id]').forEach((element) => { const id = element.dataset['sectileToolbarId']; if (id !== undefined)
29
+ connection.value?.setItemAttributes(element, id, props.disabledItems.includes(id)); }); };
30
+ const connect = () => {
31
+ connection.value?.disconnect();
32
+ if (root.value === undefined)
33
+ return;
34
+ connection.value = createToolbar({
35
+ root: root.value, items: props.items, disabledItems: props.disabledItems,
36
+ ...(props.policies === undefined ? {} : { policies: props.policies }),
37
+ ...(controlled ? { highlightedValue: props.modelValue } : { defaultHighlightedValue: current.value }),
38
+ disabled: props.disabled, orientation: props.orientation, direction: direction.value, ...(props.label === undefined ? {} : { label: props.label }),
39
+ onHighlightedValueChange: (value) => { current.value = value; emit('update:modelValue', value); },
40
+ onInvoke: (value) => emit('invoke', value), onUpdate: refresh,
41
+ });
42
+ refreshItems();
43
+ refresh();
44
+ };
45
+ provide(key, { state, disabledItems: computed(() => new Set(props.disabledItems)), register: (element, id, disabled) => connection.value?.setItemAttributes(element, id, disabled) });
46
+ onMounted(connect);
47
+ onBeforeUnmount(() => connection.value?.disconnect());
48
+ watch([() => props.items, () => props.disabledItems, () => props.disabled, () => props.orientation, () => props.label, () => props.policies, direction], connect);
49
+ watch(() => props.modelValue, (value) => { if (!controlled || value === undefined || connection.value === undefined)
50
+ return; const result = connection.value.syncControlledValue(value); if (!result.ok)
51
+ throw new TypeError(result.error.message); refresh(); });
52
+ return () => h(Primitive, mergeProps(attrs, {
53
+ as: props.as, asChild: props.asChild, elementRef: (node) => { root.value = node instanceof HTMLElement ? node : undefined; },
54
+ role: 'toolbar', 'aria-label': props.label, 'aria-orientation': props.orientation, 'aria-disabled': props.disabled ? 'true' : undefined,
55
+ dir: direction.value,
56
+ 'data-scope': 'toolbar', 'data-part': 'root', 'data-orientation': props.orientation,
57
+ }), { default: () => slots['default']?.(state.value) });
58
+ },
59
+ });
60
+ export const ToolbarItem = defineComponent({
61
+ name: 'SectileToolbarItem', inheritAttrs: false,
62
+ props: { value: { type: String, required: true }, disabled: { type: Boolean, default: false }, as: { type: [String, Object, Function], default: 'button' }, asChild: { type: Boolean, default: false } },
63
+ slots: Object,
64
+ setup(props, { attrs, slots }) {
65
+ const root = useRoot();
66
+ const state = computed(() => ({ value: props.value, highlighted: root.state.value.highlightedValue === props.value, disabled: root.state.value.disabled || props.disabled || root.disabledItems.value.has(props.value) }));
67
+ return () => h(Primitive, mergeProps(attrs, {
68
+ as: props.as, asChild: props.asChild, type: props.as === 'button' ? 'button' : undefined,
69
+ elementRef: (node) => { if (node instanceof HTMLElement)
70
+ root.register(node, props.value, state.value.disabled); },
71
+ disabled: state.value.disabled && props.as === 'button' ? true : undefined, 'aria-disabled': state.value.disabled ? 'true' : undefined,
72
+ 'data-sectile-toolbar-id': props.value, 'data-scope': 'toolbar', 'data-part': 'item', 'data-highlighted': state.value.highlighted ? '' : undefined,
73
+ }), { default: () => slots['default']?.(state.value) });
74
+ },
75
+ });
76
+ export const ToolbarSeparator = defineComponent({
77
+ name: 'SectileToolbarSeparator', inheritAttrs: false, props: partProps,
78
+ setup(props, { attrs }) { const root = useRoot(); return () => h(Primitive, mergeProps(attrs, { as: props.as, asChild: props.asChild, role: 'separator', 'aria-orientation': root.state.value.orientation, 'data-scope': 'toolbar', 'data-part': 'separator' })); },
79
+ });
80
+ function useRoot() { const root = inject(key); if (root === undefined)
81
+ throw new TypeError('Toolbar parts must be used inside ToolbarRoot.'); return root; }
82
+ //# sourceMappingURL=toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../src/toolbar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type PopupFactoryOptions, type PopupPartProps, type PopupPortalProps, type PopupRootProps, type PopupRootSlotProps } from './internal/popup.js';
2
+ export declare const TooltipRoot: import("vue").Component;
3
+ export type TooltipOpenChangeHandler = PopupFactoryOptions['onOpenChange'];
4
+ export type TooltipPositionChangeHandler = NonNullable<PopupFactoryOptions['onPositionChange']>;
5
+ export declare const TooltipTrigger: import("vue").Component;
6
+ export declare const TooltipPortal: import("vue").Component;
7
+ export declare const TooltipContent: import("vue").Component;
8
+ export declare const TooltipArrow: import("vue").Component;
9
+ export type TooltipRootProps = Pick<PopupRootProps, 'open' | 'defaultOpen' | 'disabled' | 'side' | 'align' | 'sideOffset' | 'collisionPadding' | 'collisionBoundary' | 'avoidCollisions' | 'arrowPadding' | 'hideWhenDetached' | 'strategy' | 'middleware' | 'autoUpdate'>;
10
+ export type TooltipRootSlotProps = PopupRootSlotProps;
11
+ export type TooltipPartProps = PopupPartProps;
12
+ export type TooltipPortalProps = PopupPortalProps;
13
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../src/tooltip.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAmB7B,eAAO,MAAM,WAAW,yBAAa,CAAC;AACtC,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;AAC3E,MAAM,MAAM,4BAA4B,GAAG,WAAW,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAChG,eAAO,MAAM,cAAc,yBAAgB,CAAC;AAC5C,eAAO,MAAM,aAAa,yBAAe,CAAC;AAC1C,eAAO,MAAM,cAAc,yBAAgB,CAAC;AAC5C,eAAO,MAAM,YAAY,yBAAc,CAAC;AACxC,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAC9C,MAAM,GAAG,aAAa,GAAG,UAAU,GACnC,MAAM,GAAG,OAAO,GAAG,YAAY,GAC/B,kBAAkB,GAAG,mBAAmB,GAAG,iBAAiB,GAC5D,cAAc,GAAG,kBAAkB,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CACjF,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AACtD,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAC9C,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { createTooltip } from '@sectile/dom/tooltip';
2
+ import { createPopupComponents, } from './internal/popup.js';
3
+ const parts = createPopupComponents({
4
+ scope: 'tooltip', role: 'tooltip', modal: false, triggerMode: 'focus-hover',
5
+ create: (options) => {
6
+ const { modal: _modal, label: _label, labelledBy: _labelledBy, describedBy: _describedBy, autoFocus: _autoFocus, restoreFocus: _restoreFocus, trapFocus: _trapFocus, ...tooltipOptions } = options;
7
+ return createTooltip({ ...tooltipOptions, id: options.root.id });
8
+ },
9
+ });
10
+ export const TooltipRoot = parts.Root;
11
+ export const TooltipTrigger = parts.Trigger;
12
+ export const TooltipPortal = parts.Portal;
13
+ export const TooltipContent = parts.Content;
14
+ export const TooltipArrow = parts.Arrow;
15
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../src/tooltip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA+C,MAAM,sBAAsB,CAAC;AAClG,OAAO,EACL,qBAAqB,GAMtB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,KAAK,GAAG,qBAAqB,CAAC;IAClC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa;IAC3E,MAAM,EAAE,CAAC,OAA4B,EAAqB,EAAE;QAC1D,MAAM,EACJ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,WAAW,EACvB,WAAW,EAAE,YAAY,EACzB,SAAS,EAAE,UAAU,EACrB,YAAY,EAAE,aAAa,EAC3B,SAAS,EAAE,UAAU,EACrB,GAAG,cAAc,EAClB,GAAG,OAAO,CAAC;QACZ,OAAO,aAAa,CAAC,EAAE,GAAG,cAAc,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAoB,CAAC,CAAC;IACrF,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;AAGtC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC;AAC5C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC;AAC5C,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC"}
@@ -0,0 +1,359 @@
1
+ import { type PropType, type SlotsType, type VNodeChild } from 'vue';
2
+ import { type TreeGridEditMode, type TreeGridPolicies, type TreeGridRowInput } from '@sectile/dom/tree-grid';
3
+ import { type PrimitiveAs } from './primitive.js';
4
+ export interface TreeGridRootProps {
5
+ readonly rows: readonly TreeGridRowInput<string, string>[];
6
+ readonly getCellValue: (id: string) => string;
7
+ readonly setCellValue: (id: string, value: string) => void;
8
+ readonly modelValue?: string | null;
9
+ readonly defaultValue?: string | null;
10
+ readonly expandedValue?: readonly string[];
11
+ readonly defaultExpandedValue?: readonly string[];
12
+ readonly highlightedValue?: string | null;
13
+ readonly defaultHighlightedValue?: string | null;
14
+ readonly editMode?: TreeGridEditMode;
15
+ readonly defaultEditMode?: TreeGridEditMode;
16
+ readonly disabled?: boolean;
17
+ readonly?: boolean;
18
+ readonly policies?: TreeGridPolicies<string>;
19
+ readonly as?: PrimitiveAs;
20
+ readonly asChild?: boolean;
21
+ }
22
+ export type TreeGridCellValueResolver = NonNullable<TreeGridRootProps['getCellValue']>;
23
+ export type TreeGridCellValueSetter = NonNullable<TreeGridRootProps['setCellValue']>;
24
+ export interface TreeGridRootSlotProps {
25
+ readonly value: string | null;
26
+ readonly expandedValue: readonly string[];
27
+ readonly highlightedValue: string | null;
28
+ readonly editMode: TreeGridEditMode;
29
+ readonly disabled: boolean;
30
+ readonly: boolean;
31
+ }
32
+ export interface TreeGridRowSlotProps extends TreeGridRootSlotProps {
33
+ readonly value: string;
34
+ readonly expanded: boolean;
35
+ }
36
+ export interface TreeGridCellSlotProps extends TreeGridRootSlotProps {
37
+ readonly value: string;
38
+ readonly selected: boolean;
39
+ readonly highlighted: boolean;
40
+ readonly editing: boolean;
41
+ }
42
+ export interface TreeGridPartProps {
43
+ readonly as?: PrimitiveAs;
44
+ readonly asChild?: boolean;
45
+ }
46
+ export declare const TreeGridRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
47
+ rows: {
48
+ type: PropType<readonly TreeGridRowInput<string, string>[]>;
49
+ required: true;
50
+ };
51
+ getCellValue: {
52
+ type: PropType<TreeGridCellValueResolver>;
53
+ required: true;
54
+ };
55
+ setCellValue: {
56
+ type: PropType<TreeGridCellValueSetter>;
57
+ required: true;
58
+ };
59
+ modelValue: {
60
+ type: PropType<string | null>;
61
+ default: undefined;
62
+ };
63
+ defaultValue: {
64
+ type: PropType<string | null>;
65
+ default: null;
66
+ };
67
+ expandedValue: {
68
+ type: PropType<readonly string[]>;
69
+ default: undefined;
70
+ };
71
+ defaultExpandedValue: {
72
+ type: PropType<readonly string[]>;
73
+ default: () => never[];
74
+ };
75
+ highlightedValue: {
76
+ type: PropType<string | null>;
77
+ default: undefined;
78
+ };
79
+ defaultHighlightedValue: {
80
+ type: PropType<string | null>;
81
+ default: null;
82
+ };
83
+ editMode: {
84
+ type: PropType<TreeGridEditMode>;
85
+ default: undefined;
86
+ };
87
+ defaultEditMode: {
88
+ type: PropType<TreeGridEditMode>;
89
+ default: string;
90
+ };
91
+ disabled: {
92
+ type: BooleanConstructor;
93
+ default: boolean;
94
+ };
95
+ readonly: {
96
+ type: BooleanConstructor;
97
+ default: boolean;
98
+ };
99
+ policies: {
100
+ type: PropType<TreeGridPolicies<string>>;
101
+ default: undefined;
102
+ };
103
+ as: {
104
+ type: PropType<PrimitiveAs>;
105
+ default: string;
106
+ };
107
+ asChild: {
108
+ type: BooleanConstructor;
109
+ default: boolean;
110
+ };
111
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
112
+ 'update:modelValue': (_value: string | null) => boolean;
113
+ 'update:expandedValue': (_value: readonly string[]) => boolean;
114
+ 'update:highlightedValue': (_value: string | null) => boolean;
115
+ 'update:editMode': (_value: TreeGridEditMode) => boolean;
116
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
117
+ rows: {
118
+ type: PropType<readonly TreeGridRowInput<string, string>[]>;
119
+ required: true;
120
+ };
121
+ getCellValue: {
122
+ type: PropType<TreeGridCellValueResolver>;
123
+ required: true;
124
+ };
125
+ setCellValue: {
126
+ type: PropType<TreeGridCellValueSetter>;
127
+ required: true;
128
+ };
129
+ modelValue: {
130
+ type: PropType<string | null>;
131
+ default: undefined;
132
+ };
133
+ defaultValue: {
134
+ type: PropType<string | null>;
135
+ default: null;
136
+ };
137
+ expandedValue: {
138
+ type: PropType<readonly string[]>;
139
+ default: undefined;
140
+ };
141
+ defaultExpandedValue: {
142
+ type: PropType<readonly string[]>;
143
+ default: () => never[];
144
+ };
145
+ highlightedValue: {
146
+ type: PropType<string | null>;
147
+ default: undefined;
148
+ };
149
+ defaultHighlightedValue: {
150
+ type: PropType<string | null>;
151
+ default: null;
152
+ };
153
+ editMode: {
154
+ type: PropType<TreeGridEditMode>;
155
+ default: undefined;
156
+ };
157
+ defaultEditMode: {
158
+ type: PropType<TreeGridEditMode>;
159
+ default: string;
160
+ };
161
+ disabled: {
162
+ type: BooleanConstructor;
163
+ default: boolean;
164
+ };
165
+ readonly: {
166
+ type: BooleanConstructor;
167
+ default: boolean;
168
+ };
169
+ policies: {
170
+ type: PropType<TreeGridPolicies<string>>;
171
+ default: undefined;
172
+ };
173
+ as: {
174
+ type: PropType<PrimitiveAs>;
175
+ default: string;
176
+ };
177
+ asChild: {
178
+ type: BooleanConstructor;
179
+ default: boolean;
180
+ };
181
+ }>> & Readonly<{
182
+ "onUpdate:editMode"?: (_value: TreeGridEditMode) => any;
183
+ "onUpdate:expandedValue"?: (_value: readonly string[]) => any;
184
+ "onUpdate:highlightedValue"?: (_value: string | null) => any;
185
+ "onUpdate:modelValue"?: (_value: string | null) => any;
186
+ }>, {
187
+ modelValue: string | null;
188
+ defaultValue: string | null;
189
+ expandedValue: readonly string[];
190
+ defaultExpandedValue: readonly string[];
191
+ highlightedValue: string | null;
192
+ defaultHighlightedValue: string | null;
193
+ editMode: TreeGridEditMode;
194
+ defaultEditMode: TreeGridEditMode;
195
+ disabled: boolean;
196
+ readonly: boolean;
197
+ policies: TreeGridPolicies<string>;
198
+ as: PrimitiveAs;
199
+ asChild: boolean;
200
+ }, SlotsType<{
201
+ default: (props: TreeGridRootSlotProps) => VNodeChild;
202
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
203
+ export type TreeGridValueChangeHandler = (value: string | null) => void;
204
+ export type TreeGridExpandedValueChangeHandler = (value: readonly string[]) => void;
205
+ export type TreeGridHighlightedValueChangeHandler = (value: string | null) => void;
206
+ export type TreeGridEditModeChangeHandler = (value: TreeGridEditMode) => void;
207
+ export declare const TreeGridRow: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
208
+ as: {
209
+ type: PropType<PrimitiveAs>;
210
+ default: string;
211
+ };
212
+ asChild: {
213
+ type: BooleanConstructor;
214
+ default: boolean;
215
+ };
216
+ value: {
217
+ type: StringConstructor;
218
+ required: true;
219
+ };
220
+ rowIndex: {
221
+ type: NumberConstructor;
222
+ required: true;
223
+ };
224
+ level: {
225
+ type: NumberConstructor;
226
+ default: number;
227
+ };
228
+ expandable: {
229
+ type: BooleanConstructor;
230
+ default: boolean;
231
+ };
232
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
233
+ as: {
234
+ type: PropType<PrimitiveAs>;
235
+ default: string;
236
+ };
237
+ asChild: {
238
+ type: BooleanConstructor;
239
+ default: boolean;
240
+ };
241
+ value: {
242
+ type: StringConstructor;
243
+ required: true;
244
+ };
245
+ rowIndex: {
246
+ type: NumberConstructor;
247
+ required: true;
248
+ };
249
+ level: {
250
+ type: NumberConstructor;
251
+ default: number;
252
+ };
253
+ expandable: {
254
+ type: BooleanConstructor;
255
+ default: boolean;
256
+ };
257
+ }>> & Readonly<{}>, {
258
+ as: PrimitiveAs;
259
+ asChild: boolean;
260
+ level: number;
261
+ expandable: boolean;
262
+ }, SlotsType<{
263
+ default: (props: TreeGridRowSlotProps) => VNodeChild;
264
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
265
+ export declare const TreeGridCell: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
266
+ as: {
267
+ type: PropType<PrimitiveAs>;
268
+ default: string;
269
+ };
270
+ asChild: {
271
+ type: BooleanConstructor;
272
+ default: boolean;
273
+ };
274
+ value: {
275
+ type: StringConstructor;
276
+ required: true;
277
+ };
278
+ columnIndex: {
279
+ type: NumberConstructor;
280
+ required: true;
281
+ };
282
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
283
+ as: {
284
+ type: PropType<PrimitiveAs>;
285
+ default: string;
286
+ };
287
+ asChild: {
288
+ type: BooleanConstructor;
289
+ default: boolean;
290
+ };
291
+ value: {
292
+ type: StringConstructor;
293
+ required: true;
294
+ };
295
+ columnIndex: {
296
+ type: NumberConstructor;
297
+ required: true;
298
+ };
299
+ }>> & Readonly<{}>, {
300
+ as: PrimitiveAs;
301
+ asChild: boolean;
302
+ }, SlotsType<{
303
+ default: (props: TreeGridCellSlotProps) => VNodeChild;
304
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
305
+ export declare const TreeGridDisclosure: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
306
+ for: {
307
+ type: StringConstructor;
308
+ required: true;
309
+ };
310
+ as: {
311
+ type: PropType<PrimitiveAs>;
312
+ default: string;
313
+ };
314
+ asChild: {
315
+ type: BooleanConstructor;
316
+ default: boolean;
317
+ };
318
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
319
+ for: {
320
+ type: StringConstructor;
321
+ required: true;
322
+ };
323
+ as: {
324
+ type: PropType<PrimitiveAs>;
325
+ default: string;
326
+ };
327
+ asChild: {
328
+ type: BooleanConstructor;
329
+ default: boolean;
330
+ };
331
+ }>> & Readonly<{}>, {
332
+ as: PrimitiveAs;
333
+ asChild: boolean;
334
+ }, SlotsType<{
335
+ default: (props: TreeGridRowSlotProps) => VNodeChild;
336
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
337
+ export declare const TreeGridEditor: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
338
+ for: {
339
+ type: StringConstructor;
340
+ required: true;
341
+ };
342
+ label: {
343
+ type: StringConstructor;
344
+ default: undefined;
345
+ };
346
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
347
+ for: {
348
+ type: StringConstructor;
349
+ required: true;
350
+ };
351
+ label: {
352
+ type: StringConstructor;
353
+ default: undefined;
354
+ };
355
+ }>> & Readonly<{}>, {
356
+ label: string;
357
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
358
+ export type { TreeGridEditMode, TreeGridPolicies, TreeGridRowInput };
359
+ //# sourceMappingURL=tree-grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-grid.d.ts","sourceRoot":"","sources":["../src/tree-grid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { computed, defineComponent, h, inject, mergeProps, onBeforeUnmount, onMounted, provide, shallowRef, watch, } from 'vue';
2
+ import { createTreeGrid, } from '@sectile/dom/tree-grid';
3
+ import { Primitive } from './primitive.js';
4
+ const key = Symbol('SectileTreeGridRoot');
5
+ const partProps = { as: { type: [String, Object, Function], default: 'div' }, asChild: { type: Boolean, default: false } };
6
+ export const TreeGridRoot = defineComponent({
7
+ name: 'SectileTreeGridRoot', inheritAttrs: false,
8
+ props: {
9
+ rows: { type: Array, required: true },
10
+ getCellValue: { type: Function, required: true }, setCellValue: { type: Function, required: true },
11
+ modelValue: { type: String, default: undefined }, defaultValue: { type: String, default: null },
12
+ expandedValue: { type: Array, default: undefined }, defaultExpandedValue: { type: Array, default: () => [] },
13
+ highlightedValue: { type: String, default: undefined }, defaultHighlightedValue: { type: String, default: null },
14
+ editMode: { type: String, default: undefined }, defaultEditMode: { type: String, default: 'navigation' },
15
+ disabled: { type: Boolean, default: false }, readonly: { type: Boolean, default: false }, policies: { type: Object, default: undefined },
16
+ as: { type: [String, Object, Function], default: 'div' }, asChild: { type: Boolean, default: false },
17
+ },
18
+ emits: { 'update:modelValue': (_value) => true, 'update:expandedValue': (_value) => true, 'update:highlightedValue': (_value) => true, 'update:editMode': (_value) => true },
19
+ slots: Object,
20
+ setup(props, { attrs, emit, slots }) {
21
+ const element = shallowRef();
22
+ const connection = shallowRef();
23
+ const localValue = shallowRef(props.modelValue !== undefined ? props.modelValue : props.defaultValue);
24
+ const localExpanded = shallowRef(props.expandedValue !== undefined ? props.expandedValue : props.defaultExpandedValue);
25
+ const localHighlight = shallowRef(props.highlightedValue !== undefined ? props.highlightedValue : props.defaultHighlightedValue);
26
+ const localEditMode = shallowRef(props.editMode ?? props.defaultEditMode);
27
+ const controlled = { value: props.modelValue !== undefined, expanded: props.expandedValue !== undefined, highlighted: props.highlightedValue !== undefined, editMode: props.editMode !== undefined };
28
+ const state = computed(() => Object.freeze({
29
+ value: props.modelValue !== undefined ? props.modelValue : localValue.value,
30
+ expandedValue: props.expandedValue !== undefined ? props.expandedValue : localExpanded.value,
31
+ highlightedValue: props.highlightedValue !== undefined ? props.highlightedValue : localHighlight.value,
32
+ editMode: props.editMode ?? localEditMode.value, disabled: props.disabled, readonly: props.readonly,
33
+ }));
34
+ const refreshParts = () => {
35
+ if (element.value === undefined || connection.value === undefined)
36
+ return;
37
+ connection.value.setGridAttributes(props.rows.length, Math.max(0, ...props.rows.map((row) => row.cells.length)));
38
+ element.value.querySelectorAll('[data-sectile-tree-grid-row]').forEach((node) => connection.value?.setRowAttributes(node, { rowIndex: numberData(node.dataset['rowIndex'], 1), level: numberData(node.dataset['level'], 1), ...(node.dataset['expandable'] === undefined ? {} : { expanded: node.dataset['expanded'] !== undefined }) }));
39
+ element.value.querySelectorAll('[data-sectile-tree-grid-cell]').forEach((node) => { const id = node.dataset['sectileTreeGridCell']; if (id !== undefined)
40
+ connection.value?.setCellAttributes(node, { id, columnIndex: numberData(node.dataset['columnIndex'], 1) }); });
41
+ element.value.querySelectorAll('[data-sectile-tree-grid-disclosure]').forEach((node) => { const id = node.dataset['sectileTreeGridDisclosure']; if (id !== undefined)
42
+ connection.value?.setDisclosureAttributes(node, id); });
43
+ element.value.querySelectorAll('[data-sectile-tree-grid-editor]').forEach((node) => { const id = node.dataset['sectileTreeGridEditor']; if (id !== undefined)
44
+ connection.value?.bindEditor(node, { id, ...(node.getAttribute('aria-label') === null ? {} : { label: node.getAttribute('aria-label') }) }); });
45
+ };
46
+ const refresh = () => { const snapshot = connection.value?.getSnapshot().state; if (snapshot === undefined)
47
+ return; localValue.value = snapshot.selection.selected[0] ?? null; localExpanded.value = snapshot.expansion.ids; localHighlight.value = snapshot.cursor.current; localEditMode.value = snapshot.editMode; refreshParts(); };
48
+ const connect = () => {
49
+ connection.value?.disconnect();
50
+ if (element.value === undefined)
51
+ return;
52
+ connection.value = createTreeGrid({
53
+ root: element.value, rows: props.rows, getCellValue: props.getCellValue, setCellValue: props.setCellValue,
54
+ ...(controlled.value ? { value: props.modelValue } : { defaultValue: localValue.value }),
55
+ ...(controlled.expanded ? { expandedValue: props.expandedValue } : { defaultExpandedValue: localExpanded.value }),
56
+ ...(controlled.highlighted ? { highlightedValue: props.highlightedValue } : { defaultHighlightedValue: localHighlight.value }),
57
+ ...(controlled.editMode ? { editMode: props.editMode } : { defaultEditMode: localEditMode.value }),
58
+ disabled: props.disabled, readOnly: props.readonly, ...(props.policies === undefined ? {} : { policies: props.policies }),
59
+ onValueChange: ({ value }) => { localValue.value = value; emit('update:modelValue', value); }, onExpandedValueChange: ({ value }) => { localExpanded.value = value; emit('update:expandedValue', value); },
60
+ onHighlightedValueChange: ({ value }) => { localHighlight.value = value; emit('update:highlightedValue', value); }, onEditModeChange: ({ value }) => { localEditMode.value = value; emit('update:editMode', value); }, onUpdate: refresh,
61
+ });
62
+ refreshParts();
63
+ refresh();
64
+ };
65
+ provide(key, {
66
+ state, registerRow: (node, rowIndex, level, expanded) => connection.value?.setRowAttributes(node, { rowIndex, level, ...(expanded === undefined ? {} : { expanded }) }),
67
+ registerCell: (node, id, columnIndex) => connection.value?.setCellAttributes(node, { id, columnIndex }), registerDisclosure: (node, id) => connection.value?.setDisclosureAttributes(node, id),
68
+ registerEditor: (node, id, label) => connection.value?.bindEditor(node, { id, ...(label === undefined ? {} : { label }) }),
69
+ });
70
+ onMounted(connect);
71
+ onBeforeUnmount(() => connection.value?.disconnect());
72
+ watch([() => props.rows, () => props.getCellValue, () => props.setCellValue, () => props.disabled, () => props.readonly, () => props.policies], connect);
73
+ watch([() => props.modelValue, () => props.expandedValue, () => props.highlightedValue, () => props.editMode], () => {
74
+ if (connection.value === undefined)
75
+ return;
76
+ const result = connection.value.syncControlledValues({ ...(controlled.value ? { value: props.modelValue } : {}), ...(controlled.expanded ? { expandedValue: props.expandedValue } : {}), ...(controlled.highlighted ? { highlightedValue: props.highlightedValue } : {}), ...(controlled.editMode ? { editMode: props.editMode } : {}) });
77
+ if (!result.ok)
78
+ throw new TypeError(result.error.message);
79
+ refresh();
80
+ });
81
+ return () => h(Primitive, mergeProps(attrs, { as: props.as, asChild: props.asChild, elementRef: (node) => { element.value = node instanceof HTMLElement ? node : undefined; }, 'data-scope': 'tree-grid', 'data-part': 'root', 'data-edit-mode': state.value.editMode }), { default: () => slots['default']?.(state.value) });
82
+ },
83
+ });
84
+ export const TreeGridRow = defineComponent({
85
+ name: 'SectileTreeGridRow', inheritAttrs: false,
86
+ props: { value: { type: String, required: true }, rowIndex: { type: Number, required: true }, level: { type: Number, default: 1 }, expandable: { type: Boolean, default: false }, ...partProps },
87
+ slots: Object,
88
+ setup(props, { attrs, slots }) {
89
+ const root = useRoot('TreeGridRow');
90
+ const state = computed(() => ({ ...root.state.value, value: props.value, expanded: root.state.value.expandedValue.includes(props.value) }));
91
+ return () => h(Primitive, mergeProps(attrs, {
92
+ as: props.as, asChild: props.asChild, elementRef: (node) => { if (node instanceof HTMLElement)
93
+ root.registerRow(node, props.rowIndex, props.level, props.expandable ? state.value.expanded : undefined); },
94
+ 'data-sectile-tree-grid-row': props.value, 'data-row-index': props.rowIndex, 'data-level': props.level, 'data-expandable': props.expandable ? '' : undefined,
95
+ 'data-expanded': props.expandable && state.value.expanded ? '' : undefined, 'data-scope': 'tree-grid', 'data-part': 'row',
96
+ }), { default: () => slots['default']?.(state.value) });
97
+ },
98
+ });
99
+ export const TreeGridCell = defineComponent({
100
+ name: 'SectileTreeGridCell', inheritAttrs: false,
101
+ props: { value: { type: String, required: true }, columnIndex: { type: Number, required: true }, ...partProps },
102
+ slots: Object,
103
+ setup(props, { attrs, slots }) {
104
+ const root = useRoot('TreeGridCell');
105
+ const state = computed(() => ({ ...root.state.value, value: props.value, selected: root.state.value.value === props.value, highlighted: root.state.value.highlightedValue === props.value, editing: root.state.value.highlightedValue === props.value && root.state.value.editMode === 'editing' }));
106
+ return () => h(Primitive, mergeProps(attrs, {
107
+ as: props.as, asChild: props.asChild, elementRef: (node) => { if (node instanceof HTMLElement)
108
+ root.registerCell(node, props.value, props.columnIndex); },
109
+ 'data-sectile-tree-grid-cell': props.value, 'data-column-index': props.columnIndex, 'data-scope': 'tree-grid', 'data-part': 'cell',
110
+ 'data-selected': state.value.selected ? '' : undefined, 'data-highlighted': state.value.highlighted ? '' : undefined, 'data-editing': state.value.editing ? '' : undefined,
111
+ }), { default: () => slots['default']?.(state.value) });
112
+ },
113
+ });
114
+ export const TreeGridDisclosure = defineComponent({ name: 'SectileTreeGridDisclosure', inheritAttrs: false, props: { for: { type: String, required: true }, as: { type: [String, Object, Function], default: 'span' }, asChild: { type: Boolean, default: false } }, slots: Object, setup(props, { attrs, slots }) { const root = useRoot('TreeGridDisclosure'); const state = computed(() => ({ ...root.state.value, value: props.for, expanded: root.state.value.expandedValue.includes(props.for) })); return () => h(Primitive, mergeProps(attrs, { as: props.as, asChild: props.asChild, type: props.as === 'button' ? 'button' : undefined, disabled: props.as === 'button' ? root.state.value.disabled : undefined, elementRef: (node) => { if (node instanceof HTMLElement)
115
+ root.registerDisclosure(node, props.for); }, 'data-sectile-tree-grid-disclosure': props.for, 'data-scope': 'tree-grid', 'data-part': 'disclosure', 'data-state': state.value.expanded ? 'open' : 'closed' }), { default: () => slots['default']?.(state.value) }); } });
116
+ export const TreeGridEditor = defineComponent({
117
+ name: 'SectileTreeGridEditor', inheritAttrs: false,
118
+ props: { for: { type: String, required: true }, label: { type: String, default: undefined } },
119
+ setup(props, { attrs }) { const root = useRoot('TreeGridEditor'); const editing = computed(() => root.state.value.highlightedValue === props.for && root.state.value.editMode === 'editing'); return () => h('input', mergeProps(attrs, { ref: (node) => { if (node instanceof HTMLInputElement)
120
+ root.registerEditor(node, props.for, props.label); }, hidden: !editing.value, disabled: root.state.value.disabled, readonly: root.state.value.readonly, 'aria-label': props.label, 'data-sectile-tree-grid-editor': props.for, 'data-scope': 'tree-grid', 'data-part': 'editor' })); },
121
+ });
122
+ function numberData(value, fallback) { const parsed = Number(value); return Number.isFinite(parsed) ? parsed : fallback; }
123
+ function useRoot(part) { const root = inject(key); if (root === undefined)
124
+ throw new TypeError(`${part} must be used inside TreeGridRoot.`); return root; }
125
+ //# sourceMappingURL=tree-grid.js.map