@sectile/vue 0.18.2 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/README.md +53 -14
  2. package/dist/accordion.js +1 -1
  3. package/dist/accordion.js.map +1 -1
  4. package/dist/carousel.d.ts +20 -0
  5. package/dist/carousel.js +1 -1
  6. package/dist/carousel.js.map +1 -1
  7. package/dist/cascade-list.js +1 -1
  8. package/dist/cascade-list.js.map +1 -1
  9. package/dist/cascade-select.js +1 -1
  10. package/dist/cascade-select.js.map +1 -1
  11. package/dist/chart.js +1 -1
  12. package/dist/chart.js.map +1 -1
  13. package/dist/checkbox-group.js +1 -1
  14. package/dist/checkbox-group.js.map +1 -1
  15. package/dist/checkbox-tree.d.ts +102 -0
  16. package/dist/checkbox-tree.js +2 -0
  17. package/dist/checkbox-tree.js.map +1 -0
  18. package/dist/checkbox.js +1 -1
  19. package/dist/checkbox.js.map +1 -1
  20. package/dist/color-picker.d.ts +24 -0
  21. package/dist/color-picker.js +1 -1
  22. package/dist/color-picker.js.map +1 -1
  23. package/dist/combobox.d.ts +47 -1
  24. package/dist/combobox.js +1 -1
  25. package/dist/combobox.js.map +1 -1
  26. package/dist/component-handle.d.ts +8 -0
  27. package/dist/component-handle.js +2 -0
  28. package/dist/component-handle.js.map +1 -0
  29. package/dist/context-menu.d.ts +1 -0
  30. package/dist/context-menu.js +2 -0
  31. package/dist/context-menu.js.map +1 -0
  32. package/dist/drag-drop.d.ts +23 -0
  33. package/dist/drag-drop.js +2 -0
  34. package/dist/drag-drop.js.map +1 -0
  35. package/dist/editable.d.ts +3 -0
  36. package/dist/editable.js +1 -1
  37. package/dist/editable.js.map +1 -1
  38. package/dist/form/context.d.ts +3 -0
  39. package/dist/form/context.js +1 -1
  40. package/dist/form/context.js.map +1 -1
  41. package/dist/form/contracts.d.ts +1 -0
  42. package/dist/form/control-inventory.d.ts +20 -0
  43. package/dist/form/control-inventory.js +1 -1
  44. package/dist/form/control-inventory.js.map +1 -1
  45. package/dist/form/control.d.ts +44 -1
  46. package/dist/form/control.js +1 -1
  47. package/dist/form/control.js.map +1 -1
  48. package/dist/form/field.d.ts +10 -0
  49. package/dist/form/field.js +1 -1
  50. package/dist/form/field.js.map +1 -1
  51. package/dist/form/file-input.d.ts +229 -0
  52. package/dist/form/file-input.js +2 -0
  53. package/dist/form/file-input.js.map +1 -0
  54. package/dist/form/file-upload/group.d.ts +28 -0
  55. package/dist/form/file-upload/group.js +2 -0
  56. package/dist/form/file-upload/group.js.map +1 -0
  57. package/dist/form/file-upload.d.ts +26 -0
  58. package/dist/form/file-upload.js +2 -0
  59. package/dist/form/file-upload.js.map +1 -0
  60. package/dist/form/root.js +1 -1
  61. package/dist/form/root.js.map +1 -1
  62. package/dist/form-boundary.d.ts +2 -0
  63. package/dist/form-boundary.js +2 -0
  64. package/dist/form-boundary.js.map +1 -0
  65. package/dist/fullscreen.d.ts +16 -0
  66. package/dist/fullscreen.js +2 -0
  67. package/dist/fullscreen.js.map +1 -0
  68. package/dist/host-provider.d.ts +99 -1
  69. package/dist/host-provider.js +1 -1
  70. package/dist/host-provider.js.map +1 -1
  71. package/dist/image.d.ts +24 -0
  72. package/dist/image.js +2 -0
  73. package/dist/image.js.map +1 -0
  74. package/dist/index.d.ts +6 -5
  75. package/dist/index.js +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/input/native-field.d.ts +25 -6
  78. package/dist/input/native-field.js +1 -1
  79. package/dist/input/native-field.js.map +1 -1
  80. package/dist/input/native-range-field.d.ts +95 -0
  81. package/dist/input/native-range-field.js +2 -0
  82. package/dist/input/native-range-field.js.map +1 -0
  83. package/dist/internal/cascade-choice.js +1 -1
  84. package/dist/internal/cascade-choice.js.map +1 -1
  85. package/dist/internal/connection-lifetime.d.ts +10 -0
  86. package/dist/internal/connection-lifetime.js +2 -0
  87. package/dist/internal/connection-lifetime.js.map +1 -0
  88. package/dist/internal/controlled-state.js +1 -1
  89. package/dist/internal/controlled-state.js.map +1 -1
  90. package/dist/internal/popup-presentation.d.ts +32 -0
  91. package/dist/internal/popup-presentation.js +2 -0
  92. package/dist/internal/popup-presentation.js.map +1 -0
  93. package/dist/internal/portal-move.d.ts +11 -0
  94. package/dist/internal/portal-move.js +2 -0
  95. package/dist/internal/portal-move.js.map +1 -0
  96. package/dist/internal/scheduled-task.js +1 -1
  97. package/dist/internal/scheduled-task.js.map +1 -1
  98. package/dist/internal/tabs-context.d.ts +11 -0
  99. package/dist/internal/tabs-context.js +1 -1
  100. package/dist/internal/tabs-context.js.map +1 -1
  101. package/dist/internal/tree-parts.d.ts +142 -0
  102. package/dist/internal/tree-parts.js +2 -0
  103. package/dist/internal/tree-parts.js.map +1 -0
  104. package/dist/listbox.d.ts +11 -0
  105. package/dist/listbox.js +1 -1
  106. package/dist/listbox.js.map +1 -1
  107. package/dist/media-gesture.d.ts +20 -0
  108. package/dist/media-gesture.js +2 -0
  109. package/dist/media-gesture.js.map +1 -0
  110. package/dist/menu.d.ts +239 -0
  111. package/dist/menu.js +1 -1
  112. package/dist/menu.js.map +1 -1
  113. package/dist/meter-group.js +1 -1
  114. package/dist/meter-group.js.map +1 -1
  115. package/dist/multi-thumb-slider.js +1 -1
  116. package/dist/multi-thumb-slider.js.map +1 -1
  117. package/dist/overlay/dialog.d.ts +1 -0
  118. package/dist/overlay/dialog.js.map +1 -1
  119. package/dist/overlay/drawer.d.ts +33 -4
  120. package/dist/overlay/drawer.js +1 -1
  121. package/dist/overlay/drawer.js.map +1 -1
  122. package/dist/overlay/popover.d.ts +2 -1
  123. package/dist/overlay/popover.js.map +1 -1
  124. package/dist/overlay/popup.d.ts +46 -2
  125. package/dist/overlay/popup.js +1 -1
  126. package/dist/overlay/popup.js.map +1 -1
  127. package/dist/overlay/tooltip.d.ts +37 -3
  128. package/dist/overlay/tooltip.js +1 -1
  129. package/dist/overlay/tooltip.js.map +1 -1
  130. package/dist/pagination.js +1 -1
  131. package/dist/pagination.js.map +1 -1
  132. package/dist/pin-input.js +1 -1
  133. package/dist/pin-input.js.map +1 -1
  134. package/dist/presence/presence.d.ts +1 -1
  135. package/dist/presence/presence.js +1 -1
  136. package/dist/presence/presence.js.map +1 -1
  137. package/dist/primitive.d.ts +37 -3
  138. package/dist/primitive.js +1 -1
  139. package/dist/primitive.js.map +1 -1
  140. package/dist/quantity-field.js +1 -1
  141. package/dist/quantity-field.js.map +1 -1
  142. package/dist/radio-group.js +1 -1
  143. package/dist/radio-group.js.map +1 -1
  144. package/dist/rating.js +1 -1
  145. package/dist/rating.js.map +1 -1
  146. package/dist/reorder.d.ts +156 -77
  147. package/dist/reorder.js +1 -1
  148. package/dist/reorder.js.map +1 -1
  149. package/dist/select.d.ts +21 -0
  150. package/dist/select.js +1 -1
  151. package/dist/select.js.map +1 -1
  152. package/dist/slider.js +1 -1
  153. package/dist/slider.js.map +1 -1
  154. package/dist/spin-button.d.ts +19 -0
  155. package/dist/spin-button.js +1 -1
  156. package/dist/spin-button.js.map +1 -1
  157. package/dist/stepper.js +1 -1
  158. package/dist/stepper.js.map +1 -1
  159. package/dist/switch.js +1 -1
  160. package/dist/switch.js.map +1 -1
  161. package/dist/tabs.d.ts +2 -0
  162. package/dist/tabs.js +1 -1
  163. package/dist/tabs.js.map +1 -1
  164. package/dist/tabular/components.d.ts +5 -0
  165. package/dist/tabular/components.js.map +1 -1
  166. package/dist/tabular/controller.d.ts +1 -0
  167. package/dist/tabular/controller.js +1 -1
  168. package/dist/tabular/controller.js.map +1 -1
  169. package/dist/tabular/data-grid.d.ts +4 -4
  170. package/dist/tabular/data-grid.js +1 -1
  171. package/dist/tabular/data-grid.js.map +1 -1
  172. package/dist/tabular/data-table.d.ts +4 -4
  173. package/dist/tabular/data-table.js +1 -1
  174. package/dist/tabular/data-table.js.map +1 -1
  175. package/dist/tabular/data-tree-grid.d.ts +4 -4
  176. package/dist/tabular/data-tree-grid.js +1 -1
  177. package/dist/tabular/data-tree-grid.js.map +1 -1
  178. package/dist/tabular/parts.d.ts +11 -1
  179. package/dist/tabular/parts.js +1 -1
  180. package/dist/tabular/parts.js.map +1 -1
  181. package/dist/tabular/source.js +1 -1
  182. package/dist/tabular/source.js.map +1 -1
  183. package/dist/tags-input.d.ts +12 -1
  184. package/dist/tags-input.js +1 -1
  185. package/dist/tags-input.js.map +1 -1
  186. package/dist/temporal/calendar.d.ts +27 -123
  187. package/dist/temporal/calendar.js +1 -1
  188. package/dist/temporal/calendar.js.map +1 -1
  189. package/dist/temporal/capabilities/date-picker.js +1 -1
  190. package/dist/temporal/capabilities/date-picker.js.map +1 -1
  191. package/dist/temporal/capabilities/date-time-picker.js +1 -1
  192. package/dist/temporal/capabilities/date-time-picker.js.map +1 -1
  193. package/dist/temporal/capabilities/date-time-range-picker.js +1 -1
  194. package/dist/temporal/capabilities/date-time-range-picker.js.map +1 -1
  195. package/dist/temporal/capability.d.ts +13 -1
  196. package/dist/temporal/capability.js.map +1 -1
  197. package/dist/temporal/date-field.d.ts +1 -1
  198. package/dist/temporal/date-field.js +1 -1
  199. package/dist/temporal/date-field.js.map +1 -1
  200. package/dist/temporal/date-picker.d.ts +16 -14
  201. package/dist/temporal/date-picker.js +1 -1
  202. package/dist/temporal/date-picker.js.map +1 -1
  203. package/dist/temporal/date-range-field.d.ts +21 -1
  204. package/dist/temporal/date-range-field.js +1 -1
  205. package/dist/temporal/date-range-field.js.map +1 -1
  206. package/dist/temporal/date-range-picker.d.ts +16 -14
  207. package/dist/temporal/date-range-picker.js +1 -1
  208. package/dist/temporal/date-range-picker.js.map +1 -1
  209. package/dist/temporal/date-time-field.d.ts +4 -1
  210. package/dist/temporal/date-time-field.js +1 -1
  211. package/dist/temporal/date-time-field.js.map +1 -1
  212. package/dist/temporal/date-time-picker.d.ts +16 -14
  213. package/dist/temporal/date-time-picker.js +1 -1
  214. package/dist/temporal/date-time-picker.js.map +1 -1
  215. package/dist/temporal/date-time-range-field.d.ts +158 -0
  216. package/dist/temporal/date-time-range-field.js +2 -0
  217. package/dist/temporal/date-time-range-field.js.map +1 -0
  218. package/dist/temporal/date-time-range-picker.d.ts +16 -14
  219. package/dist/temporal/date-time-range-picker.js +1 -1
  220. package/dist/temporal/date-time-range-picker.js.map +1 -1
  221. package/dist/temporal/internal/time-presentation.d.ts +15 -0
  222. package/dist/temporal/internal/time-presentation.js +2 -0
  223. package/dist/temporal/internal/time-presentation.js.map +1 -0
  224. package/dist/temporal/month-picker.d.ts +9 -7
  225. package/dist/temporal/month-picker.js +1 -1
  226. package/dist/temporal/month-picker.js.map +1 -1
  227. package/dist/temporal/month-range-picker.d.ts +9 -7
  228. package/dist/temporal/month-range-picker.js +1 -1
  229. package/dist/temporal/month-range-picker.js.map +1 -1
  230. package/dist/temporal/picker.d.ts +24 -3
  231. package/dist/temporal/picker.js +1 -1
  232. package/dist/temporal/picker.js.map +1 -1
  233. package/dist/temporal/range-calendar.d.ts +125 -8
  234. package/dist/temporal/range-calendar.js +1 -1
  235. package/dist/temporal/range-calendar.js.map +1 -1
  236. package/dist/temporal/temporal-provider.d.ts +23 -0
  237. package/dist/temporal/temporal-provider.js +1 -1
  238. package/dist/temporal/temporal-provider.js.map +1 -1
  239. package/dist/temporal/time-field.d.ts +4 -1
  240. package/dist/temporal/time-field.js +1 -1
  241. package/dist/temporal/time-field.js.map +1 -1
  242. package/dist/temporal/time-picker.d.ts +112 -0
  243. package/dist/temporal/time-picker.js +2 -0
  244. package/dist/temporal/time-picker.js.map +1 -0
  245. package/dist/temporal/time-range-field.d.ts +33 -2
  246. package/dist/temporal/time-range-field.js +1 -1
  247. package/dist/temporal/time-range-field.js.map +1 -1
  248. package/dist/temporal/year-picker.d.ts +9 -7
  249. package/dist/temporal/year-picker.js +1 -1
  250. package/dist/temporal/year-picker.js.map +1 -1
  251. package/dist/temporal/year-range-picker.d.ts +9 -7
  252. package/dist/temporal/year-range-picker.js +1 -1
  253. package/dist/temporal/year-range-picker.js.map +1 -1
  254. package/dist/text.d.ts +43 -1
  255. package/dist/text.js +1 -1
  256. package/dist/text.js.map +1 -1
  257. package/dist/timer.d.ts +16 -5
  258. package/dist/timer.js +1 -1
  259. package/dist/timer.js.map +1 -1
  260. package/dist/toast.js +1 -1
  261. package/dist/toast.js.map +1 -1
  262. package/dist/toggle-group.js +1 -1
  263. package/dist/toggle-group.js.map +1 -1
  264. package/dist/toolbar.js +1 -1
  265. package/dist/toolbar.js.map +1 -1
  266. package/dist/transfer.d.ts +191 -0
  267. package/dist/transfer.js +2 -0
  268. package/dist/transfer.js.map +1 -0
  269. package/dist/tree-grid.d.ts +122 -0
  270. package/dist/tree-grid.js +1 -1
  271. package/dist/tree-grid.js.map +1 -1
  272. package/dist/tree-select.d.ts +186 -0
  273. package/dist/tree-select.js +2 -0
  274. package/dist/tree-select.js.map +1 -0
  275. package/dist/tree-view.js +1 -1
  276. package/dist/tree-view.js.map +1 -1
  277. package/dist/virtual/virtual-collection.d.ts +3 -0
  278. package/dist/virtual/virtual-collection.js +1 -1
  279. package/dist/virtual/virtual-collection.js.map +1 -1
  280. package/dist/virtual/virtual-core.d.ts +1 -0
  281. package/dist/virtual/virtual-core.js +1 -1
  282. package/dist/virtual/virtual-core.js.map +1 -1
  283. package/dist/virtual/virtual-grid.d.ts +12 -2
  284. package/dist/virtual/virtual-grid.js +1 -1
  285. package/dist/virtual/virtual-grid.js.map +1 -1
  286. package/dist/virtual/virtual-list.d.ts +12 -3
  287. package/dist/virtual/virtual-list.js +1 -1
  288. package/dist/virtual/virtual-list.js.map +1 -1
  289. package/dist/virtual/virtual-masonry.d.ts +12 -2
  290. package/dist/virtual/virtual-masonry.js +1 -1
  291. package/dist/virtual/virtual-masonry.js.map +1 -1
  292. package/dist/virtual/virtual-spatial.d.ts +12 -2
  293. package/dist/virtual/virtual-spatial.js +1 -1
  294. package/dist/virtual/virtual-spatial.js.map +1 -1
  295. package/dist/window-splitter.js +1 -1
  296. package/dist/window-splitter.js.map +1 -1
  297. package/package.json +86 -16
package/dist/reorder.d.ts CHANGED
@@ -1,46 +1,92 @@
1
- import { type PropType, type SlotsType, type VNodeChild } from 'vue';
2
- import { type ReorderOrientation, type TreeReorderOptions } from '@sectile/dom/reorder';
1
+ import { type DefineSetupFnComponent, type EmitsToProps, type PropType, type PublicProps, type SlotsType, type VNodeChild } from 'vue';
2
+ import { type ReorderOrientation, type TreeReorderOptions, type TreeReorderDropTarget as NativeDropTarget } from '@sectile/dom/reorder';
3
3
  import { type PrimitiveAs } from './primitive.js';
4
- export type TreeReorderNode = TreeReorderOptions<string>['nodes'][number];
5
- export interface SequenceReorderRootProps {
6
- readonly items: readonly string[];
4
+ export type TreeReorderNode<ID extends string = string> = Omit<TreeReorderOptions<ID>['nodes'][number], 'parentID'> & {
5
+ readonly parentID: NoInfer<ID> | null;
6
+ };
7
+ export interface SequenceReorderRootProps<ID extends string = string> {
8
+ readonly items: readonly ID[];
9
+ readonly controlled?: boolean;
10
+ readonly handleOnly?: boolean;
11
+ readonly label?: string;
12
+ readonly roleDescription?: string;
7
13
  readonly orientation?: ReorderOrientation;
8
14
  readonly disabled?: boolean;
9
15
  readonly as?: PrimitiveAs;
10
16
  readonly asChild?: boolean;
11
17
  }
12
- export interface TreeReorderRootProps {
13
- readonly nodes: readonly TreeReorderNode[];
18
+ export interface TreeReorderRootProps<ID extends string = string> {
19
+ readonly nodes: readonly TreeReorderNode<ID>[];
20
+ readonly controlled?: boolean;
21
+ readonly handleOnly?: boolean;
22
+ readonly label?: string;
23
+ readonly roleDescription?: string;
14
24
  readonly orientation?: ReorderOrientation;
15
25
  readonly disabled?: boolean;
26
+ readonly readonly?: boolean;
27
+ readonly layout?: 'tree' | 'columns';
28
+ readonly direction?: 'ltr' | 'rtl';
29
+ readonly policies?: TreeReorderOptions<NoInfer<ID>>['policies'];
16
30
  readonly as?: PrimitiveAs;
17
31
  readonly asChild?: boolean;
18
32
  }
19
- export interface ReorderRootSlotProps {
20
- readonly items: readonly string[];
33
+ export interface ReorderRootSlotProps<ID extends string = string> {
34
+ readonly items: readonly ID[];
21
35
  readonly disabled: boolean;
22
36
  }
23
- export interface TreeReorderRootSlotProps {
24
- readonly nodes: readonly TreeReorderNode[];
37
+ export interface TreeReorderRootSlotProps<ID extends string = string> {
38
+ readonly nodes: readonly TreeReorderNode<ID>[];
25
39
  readonly disabled: boolean;
40
+ readonly readonly: boolean;
41
+ getChildren(parentID: NoInfer<ID> | null): readonly ID[];
42
+ getParent(id: NoInfer<ID>): ID | null;
43
+ canMove(id: NoInfer<ID>, target: TreeReorderTarget<NoInfer<ID>>): boolean;
26
44
  }
27
- export interface ReorderItemSlotProps {
28
- readonly value: string;
45
+ export interface ReorderItemSlotProps<ID extends string = string> {
46
+ readonly value: ID;
29
47
  readonly position: number;
48
+ readonly level: number;
49
+ readonly setSize: number;
30
50
  }
31
- export interface ReorderItemProps {
32
- readonly value: string;
51
+ export interface ReorderItemProps<ID extends string = string> {
52
+ readonly value: ID;
33
53
  readonly as?: PrimitiveAs;
34
54
  readonly asChild?: boolean;
35
55
  }
36
- export declare const SequenceReorderRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
37
- orientation: {
38
- type: PropType<ReorderOrientation>;
39
- default: string;
40
- };
41
- disabled: {
42
- type: BooleanConstructor;
43
- default: boolean;
56
+ export type SequenceReorderRootEmits<ID extends string = string> = {
57
+ 'update:items': [items: readonly NoInfer<ID>[]];
58
+ };
59
+ export type TreeReorderRootEmits<ID extends string = string> = {
60
+ 'update:nodes': [nodes: readonly TreeReorderNode<NoInfer<ID>>[]];
61
+ };
62
+ export interface SequenceReorderRootSlots<ID extends string = string> {
63
+ default?: (state: ReorderRootSlotProps<ID>) => VNodeChild;
64
+ }
65
+ export interface TreeReorderRootSlots<ID extends string = string> {
66
+ default?: (state: TreeReorderRootSlotProps<ID>) => VNodeChild;
67
+ }
68
+ export type TreeReorderTarget<ID extends string = string> = NativeDropTarget<ID>;
69
+ export interface TreeReorderExpose<ID extends string = string> {
70
+ readonly element: HTMLElement | null;
71
+ move(id: NoInfer<ID>, target: TreeReorderTarget<NoInfer<ID>>): boolean;
72
+ canMove(id: NoInfer<ID>, target: TreeReorderTarget<NoInfer<ID>>): boolean;
73
+ focus(id?: NoInfer<ID>): void;
74
+ }
75
+ export interface TreeReorderDropTargetProps<ID extends string = string> extends NativeDropTarget<ID> {
76
+ readonly label?: string;
77
+ readonly as?: PrimitiveAs;
78
+ readonly asChild?: boolean;
79
+ }
80
+ export interface ReorderHandleProps {
81
+ readonly label: string;
82
+ readonly disabled?: boolean;
83
+ readonly as?: PrimitiveAs;
84
+ readonly asChild?: boolean;
85
+ }
86
+ export declare const SequenceReorderItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
87
+ value: {
88
+ type: StringConstructor;
89
+ required: true;
44
90
  };
45
91
  as: {
46
92
  type: PropType<PrimitiveAs>;
@@ -50,21 +96,11 @@ export declare const SequenceReorderRoot: import("vue").DefineComponent<import("
50
96
  type: BooleanConstructor;
51
97
  default: boolean;
52
98
  };
53
- items: {
54
- type: PropType<readonly string[]>;
99
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
100
+ value: {
101
+ type: StringConstructor;
55
102
  required: true;
56
103
  };
57
- }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
58
- 'update:items': (_items: readonly string[]) => boolean;
59
- }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
60
- orientation: {
61
- type: PropType<ReorderOrientation>;
62
- default: string;
63
- };
64
- disabled: {
65
- type: BooleanConstructor;
66
- default: boolean;
67
- };
68
104
  as: {
69
105
  type: PropType<PrimitiveAs>;
70
106
  default: string;
@@ -73,21 +109,23 @@ export declare const SequenceReorderRoot: import("vue").DefineComponent<import("
73
109
  type: BooleanConstructor;
74
110
  default: boolean;
75
111
  };
76
- items: {
77
- type: PropType<readonly string[]>;
78
- required: true;
79
- };
80
- }>> & Readonly<{
81
- "onUpdate:items"?: (_items: readonly string[]) => any;
82
- }>, {
83
- orientation: ReorderOrientation;
84
- disabled: boolean;
112
+ }>> & Readonly<{}>, {
85
113
  as: PrimitiveAs;
86
114
  asChild: boolean;
87
115
  }, SlotsType<{
88
- default: (props: ReorderRootSlotProps) => VNodeChild;
116
+ default: (props: ReorderItemSlotProps) => VNodeChild;
89
117
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
90
- export declare const SequenceReorderItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
118
+ type SequenceProps<ID extends string> = SequenceReorderRootProps<ID> & PublicProps & EmitsToProps<SequenceReorderRootEmits<ID>>;
119
+ type SequenceInstance<ID extends string> = InstanceType<DefineSetupFnComponent<SequenceReorderRootProps<ID>, SequenceReorderRootEmits<ID>, SlotsType<SequenceReorderRootSlots<ID>>>>;
120
+ export declare const SequenceReorderRoot: new <const ID extends string = string>(props: SequenceProps<ID>) => Omit<SequenceInstance<ID>, '$props'> & {
121
+ readonly $props: SequenceProps<ID>;
122
+ };
123
+ type TreeProps<ID extends string> = TreeReorderRootProps<ID> & PublicProps & EmitsToProps<TreeReorderRootEmits<ID>>;
124
+ type TreeInstance<ID extends string> = InstanceType<DefineSetupFnComponent<TreeReorderRootProps<ID>, TreeReorderRootEmits<ID>, SlotsType<TreeReorderRootSlots<ID>>>> & TreeReorderExpose<ID>;
125
+ export declare const TreeReorderRoot: new <const ID extends string = string>(props: TreeProps<ID>) => Omit<TreeInstance<ID>, '$props'> & {
126
+ readonly $props: TreeProps<ID>;
127
+ };
128
+ export declare const TreeReorderItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
91
129
  value: {
92
130
  type: StringConstructor;
93
131
  required: true;
@@ -100,7 +138,7 @@ export declare const SequenceReorderItem: import("vue").DefineComponent<import("
100
138
  type: BooleanConstructor;
101
139
  default: boolean;
102
140
  };
103
- }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
141
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
104
142
  value: {
105
143
  type: StringConstructor;
106
144
  required: true;
@@ -119,15 +157,40 @@ export declare const SequenceReorderItem: import("vue").DefineComponent<import("
119
157
  }, SlotsType<{
120
158
  default: (props: ReorderItemSlotProps) => VNodeChild;
121
159
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
122
- export declare const TreeReorderRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
123
- orientation: {
124
- type: PropType<ReorderOrientation>;
160
+ export declare const TreeReorderDropTarget: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
161
+ parentID: {
162
+ type: PropType<string | null>;
163
+ default: null;
164
+ };
165
+ beforeID: {
166
+ type: PropType<string | null>;
167
+ default: undefined;
168
+ };
169
+ label: {
170
+ type: StringConstructor;
171
+ default: undefined;
172
+ };
173
+ as: {
174
+ type: PropType<PrimitiveAs>;
125
175
  default: string;
126
176
  };
127
- disabled: {
177
+ asChild: {
128
178
  type: BooleanConstructor;
129
179
  default: boolean;
130
180
  };
181
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
182
+ parentID: {
183
+ type: PropType<string | null>;
184
+ default: null;
185
+ };
186
+ beforeID: {
187
+ type: PropType<string | null>;
188
+ default: undefined;
189
+ };
190
+ label: {
191
+ type: StringConstructor;
192
+ default: undefined;
193
+ };
131
194
  as: {
132
195
  type: PropType<PrimitiveAs>;
133
196
  default: string;
@@ -136,17 +199,18 @@ export declare const TreeReorderRoot: import("vue").DefineComponent<import("vue"
136
199
  type: BooleanConstructor;
137
200
  default: boolean;
138
201
  };
139
- nodes: {
140
- type: PropType<readonly TreeReorderNode[]>;
202
+ }>> & Readonly<{}>, {
203
+ parentID: string | null;
204
+ beforeID: string | null;
205
+ label: string;
206
+ as: PrimitiveAs;
207
+ asChild: boolean;
208
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
209
+ export declare const SequenceReorderHandle: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
210
+ label: {
211
+ type: StringConstructor;
141
212
  required: true;
142
213
  };
143
- }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
144
- 'update:nodes': (_nodes: readonly TreeReorderNode[]) => boolean;
145
- }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
146
- orientation: {
147
- type: PropType<ReorderOrientation>;
148
- default: string;
149
- };
150
214
  disabled: {
151
215
  type: BooleanConstructor;
152
216
  default: boolean;
@@ -159,25 +223,37 @@ export declare const TreeReorderRoot: import("vue").DefineComponent<import("vue"
159
223
  type: BooleanConstructor;
160
224
  default: boolean;
161
225
  };
162
- nodes: {
163
- type: PropType<readonly TreeReorderNode[]>;
226
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
227
+ label: {
228
+ type: StringConstructor;
164
229
  required: true;
165
230
  };
166
- }>> & Readonly<{
167
- "onUpdate:nodes"?: (_nodes: readonly import("@sectile/dom").CascadeListItemDefinition<string>[]) => any;
168
- }>, {
169
- orientation: ReorderOrientation;
231
+ disabled: {
232
+ type: BooleanConstructor;
233
+ default: boolean;
234
+ };
235
+ as: {
236
+ type: PropType<PrimitiveAs>;
237
+ default: string;
238
+ };
239
+ asChild: {
240
+ type: BooleanConstructor;
241
+ default: boolean;
242
+ };
243
+ }>> & Readonly<{}>, {
170
244
  disabled: boolean;
171
245
  as: PrimitiveAs;
172
246
  asChild: boolean;
173
- }, SlotsType<{
174
- default: (props: TreeReorderRootSlotProps) => VNodeChild;
175
- }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
176
- export declare const TreeReorderItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
177
- value: {
247
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
248
+ export declare const TreeReorderHandle: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
249
+ label: {
178
250
  type: StringConstructor;
179
251
  required: true;
180
252
  };
253
+ disabled: {
254
+ type: BooleanConstructor;
255
+ default: boolean;
256
+ };
181
257
  as: {
182
258
  type: PropType<PrimitiveAs>;
183
259
  default: string;
@@ -186,11 +262,15 @@ export declare const TreeReorderItem: import("vue").DefineComponent<import("vue"
186
262
  type: BooleanConstructor;
187
263
  default: boolean;
188
264
  };
189
- }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
190
- value: {
265
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
266
+ label: {
191
267
  type: StringConstructor;
192
268
  required: true;
193
269
  };
270
+ disabled: {
271
+ type: BooleanConstructor;
272
+ default: boolean;
273
+ };
194
274
  as: {
195
275
  type: PropType<PrimitiveAs>;
196
276
  default: string;
@@ -200,9 +280,8 @@ export declare const TreeReorderItem: import("vue").DefineComponent<import("vue"
200
280
  default: boolean;
201
281
  };
202
282
  }>> & Readonly<{}>, {
283
+ disabled: boolean;
203
284
  as: PrimitiveAs;
204
285
  asChild: boolean;
205
- }, SlotsType<{
206
- default: (props: ReorderItemSlotProps) => VNodeChild;
207
- }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
286
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
208
287
  export type { ReorderOrientation };
package/dist/reorder.js CHANGED
@@ -1,2 +1,2 @@
1
- import{computed,defineComponent,h,inject,mergeProps,onBeforeUnmount,onMounted,provide,shallowRef,watch}from"vue";import{createReorder}from"@sectile/dom/reorder";import{Primitive}from"./primitive.js";const sequenceKey=Symbol("SectileSequenceReorderRoot");const treeKey=Symbol("SectileTreeReorderRoot");const rootProps={orientation:{type:String,default:"vertical"},disabled:{type:Boolean,default:false},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}};const SequenceReorderRoot=defineComponent({name:"SectileSequenceReorderRoot",inheritAttrs:false,props:{...rootProps,items:{type:Array,required:true}},emits:{"update:items":_items=>true},slots:Object,setup(props,{attrs,emit,slots}){const root=shallowRef();const connection=shallowRef();const current=shallowRef(props.items);const registrations=new Map;const connect=()=>{connection.value?.disconnect();if(root.value===void 0)return;connection.value=createReorder({root:root.value,ids:props.items,orientation:props.orientation,disabled:props.disabled,onOrderChange:items2=>{current.value=items2;emit("update:items",items2)}});for(const[id,element]of registrations)connection.value.setItemAttributes(element,id);current.value=connection.value.getSnapshot().state.ids};const items=computed(()=>current.value);provide(sequenceKey,{items,register:(element,id)=>{registrations.set(id,element);connection.value?.setItemAttributes(element,id)}});onMounted(connect);onBeforeUnmount(()=>connection.value?.disconnect());watch([()=>props.orientation,()=>props.disabled],connect);watch(()=>props.items,items2=>{const result=connection.value?.syncOrder(items2);current.value=result?.ok===true?result.value.state.ids:items2});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{root.value=element instanceof HTMLElement?element:void 0},"data-scope":"sequence-reorder","data-part":"root","data-orientation":props.orientation}),{default:()=>slots["default"]?.({items:items.value,disabled:props.disabled})})}});const SequenceReorderItem=defineComponent({name:"SectileSequenceReorderItem",inheritAttrs:false,props:{value:{type:String,required:true},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useSequenceContext("SequenceReorderItem");const position=computed(()=>root.items.value.indexOf(props.value)+1);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{if(element instanceof HTMLElement)root.register(element,props.value)},"data-scope":"sequence-reorder","data-part":"item","data-value":props.value}),{default:()=>slots["default"]?.({value:props.value,position:position.value})})}});const TreeReorderRoot=defineComponent({name:"SectileTreeReorderRoot",inheritAttrs:false,props:{...rootProps,nodes:{type:Array,required:true}},emits:{"update:nodes":_nodes=>true},slots:Object,setup(props,{attrs,emit,slots}){const root=shallowRef();const connection=shallowRef();const current=shallowRef(props.nodes);const registrations=new Map;const connect=()=>{connection.value?.disconnect();if(root.value===void 0)return;connection.value=createReorder({root:root.value,nodes:props.nodes,orientation:props.orientation,disabled:props.disabled,onOrderChange:nodes2=>{current.value=nodes2;emit("update:nodes",nodes2)}});for(const[id,element]of registrations)connection.value.setItemAttributes(element,id);current.value=connection.value.getSnapshot().state.nodes};const nodes=computed(()=>current.value);provide(treeKey,{nodes,register:(element,id)=>{registrations.set(id,element);connection.value?.setItemAttributes(element,id)}});onMounted(connect);onBeforeUnmount(()=>connection.value?.disconnect());watch([()=>props.orientation,()=>props.disabled],connect);watch(()=>props.nodes,nodes2=>{const result=connection.value?.syncOrder(nodes2);current.value=result?.ok===true?result.value.state.nodes:nodes2});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{root.value=element instanceof HTMLElement?element:void 0},role:"tree","data-scope":"tree-reorder","data-part":"root","data-orientation":props.orientation}),{default:()=>slots["default"]?.({nodes:nodes.value,disabled:props.disabled})})}});const TreeReorderItem=defineComponent({name:"SectileTreeReorderItem",inheritAttrs:false,props:{value:{type:String,required:true},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useTreeContext("TreeReorderItem");const position=computed(()=>root.nodes.value.findIndex(node=>node.id===props.value)+1);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{if(element instanceof HTMLElement)root.register(element,props.value)},role:"treeitem","data-scope":"tree-reorder","data-part":"item","data-value":props.value}),{default:()=>slots["default"]?.({value:props.value,position:position.value})})}});function useSequenceContext(part){const context=inject(sequenceKey);if(context===void 0)throw new TypeError(`${part} must be used inside SequenceReorderRoot.`);return context}function useTreeContext(part){const context=inject(treeKey);if(context===void 0)throw new TypeError(`${part} must be used inside TreeReorderRoot.`);return context}export{SequenceReorderItem,SequenceReorderRoot,TreeReorderItem,TreeReorderRoot};
1
+ import{computed,defineComponent,h,inject,mergeProps,onBeforeUnmount,onMounted,provide,shallowRef,watch}from'vue';import{createReorder}from'@sectile/dom/reorder';import{createSequenceReorderState,createTreeReorderState,getSequenceReorderOrder,getTreeReorderHierarchy,applyTreeReorderEvent}from'@sectile/core/reorder';import{unwrap}from'@sectile/core/result';import{Primitive}from'./primitive.js';import{useHostActive,useHostDirection}from'./host-provider.js';import{useNextTickTask}from'./internal/scheduled-task.js';const emptyItems=/* @__PURE__ */Object.freeze([]);function treeContextPort(source){let port=source;const value={position:id=>port?.position(id)??0,level:id=>port?.level(id)??0,size:id=>port?.size(id)??0,disabled:()=>port?.disabled()??true,columns:()=>port?.columns()??false,getChildren:parent=>port?.getChildren(parent)??emptyItems,getParent:id=>port?.getParent(id)??null,register:(element,id)=>port?.register(element,id),unregister:(element,id)=>port?.unregister(element,id),registerTarget:(element,target)=>port?.registerTarget(element,target),unregisterTarget:element=>port?.unregisterTarget(element)};return{value,retire:()=>{port=undefined}}}function treeExposure(source){let port=source;const value={get element(){return port?.element??null},move:(id,target)=>port?.move(id,target)??false,canMove:(id,target)=>port?.canMove(id,target)??false,focus:id=>port?.focus(id)};return{value,retire:()=>{port=undefined}}}const sequenceKey=/* @__PURE__ */Symbol('SectileSequenceReorderRoot');const treeKey=/* @__PURE__ */Symbol('SectileTreeReorderRoot');const rootProps={handleOnly:{type:Boolean,default:false},label:{type:String,default:undefined},roleDescription:{type:String,default:undefined},controlled:{type:Boolean,default:false},orientation:{type:String,default:'vertical'},disabled:{type:Boolean,default:false},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}};const SequenceRootImplementation=/* @__PURE__ */defineComponent({name:'SectileSequenceReorderRoot',inheritAttrs:false,props:/* @__PURE__ */Object.assign({},rootProps,{items:{type:Array,required:true}}),emits:{'update:items':_items=>true},slots:Object,setup(props,{attrs,emit,slots}){const root=shallowRef();const connection=shallowRef();const current=shallowRef(createSequenceReorderState(props.items));const registrations=new Map;const connect=()=>{connection.value?.disconnect();if(root.value===undefined)return;connection.value=createReorder({root:root.value,ids:props.controlled?props.items:current.value.ids,controlled:props.controlled,handleOnly:props.handleOnly,...reorderLabelOptions(props,attrs),orientation:props.orientation,disabled:props.disabled,onOrderChange:items=>{if(!props.controlled)current.value=connection.value.getSnapshot().state;emit('update:items',items)}});for(const[id,element]of registrations)connection.value.setItemAttributes(element,id);current.value=connection.value.getSnapshot().state};const items=computed(()=>current.value.ids);provide(sequenceKey,{position:id=>(getSequenceReorderOrder(current.value).indexOf(id)??-1)+1,level:()=>1,size:()=>current.value.ids.length,disabled:()=>props.disabled,register:(element,id)=>{registrations.set(id,element);connection.value?.setItemAttributes(element,id)},unregister:(element,id)=>{if(registrations.get(id)===element)registrations.delete(id);connection.value?.removeItem(element)}});onMounted(connect);onBeforeUnmount(()=>connection.value?.disconnect());watch([()=>props.orientation,()=>props.disabled,()=>props.controlled,()=>props.handleOnly,()=>props.label,()=>props.roleDescription],connect);watch(()=>props.items,items=>{current.value=connection.value===undefined?createSequenceReorderState(items):unwrap(connection.value.syncOrder(items)).state});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{root.value=element instanceof HTMLElement?element:undefined},'data-scope':'sequence-reorder','data-part':'root',role:'list','aria-label':props.label??attrs['aria-label'],'aria-roledescription':props.roleDescription??attrs['aria-roledescription']??'sortable','data-orientation':props.orientation}),{default:()=>slots['default']?.({items:items.value,disabled:props.disabled})})}});export const SequenceReorderItem=/* @__PURE__ */defineComponent({name:'SectileSequenceReorderItem',inheritAttrs:false,props:{value:{type:String,required:true},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useSequenceContext('SequenceReorderItem');const elementRef=useReorderItemRef(root,()=>props.value);const position=computed(()=>root.position(props.value));return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef,'data-scope':'sequence-reorder','data-part':'item','data-value':props.value,role:'listitem','aria-posinset':position.value||undefined,'aria-setsize':root.size(props.value)}),{default:()=>slots['default']?.({value:props.value,position:position.value,level:1,setSize:root.size(props.value)})})}});export const SequenceReorderRoot=SequenceRootImplementation;const TreeRootImplementation=/* @__PURE__ */defineComponent({name:'SectileTreeReorderRoot',inheritAttrs:false,props:/* @__PURE__ */Object.assign({},rootProps,{nodes:{type:Array,required:true},readonly:{type:Boolean,default:false},layout:{type:String,default:'tree'},direction:{type:String,default:undefined},policies:{type:Object,default:undefined}}),emits:{'update:nodes':_nodes=>true},slots:Object,setup(props,{attrs,emit,slots,expose}){const root=shallowRef();const connection=shallowRef();const current=shallowRef(createTreeReorderState(props.nodes,props.layout==='columns'?{maxDepth:1}:undefined));const registrations=new Map;const targets=new Map;const active=useHostActive(),inheritedDirection=useHostDirection();const direction=computed(()=>props.direction??inheritedDirection.value);let alive=true,mounted=false,generation=0;let connectedElement;let pendingFocus;const repairFocus=useNextTickTask(()=>{const pending=pendingFocus;pendingFocus=undefined;if(!alive||!active.value||!pending||!root.value)return;const focused=root.value.ownerDocument.activeElement;if(focused!==pending.previous&&focused!==root.value.ownerDocument.body&&focused!==null)return;const replacement=registrations.get(pending.id);if(replacement&&root.value.contains(replacement)&&getTreeReorderHierarchy(current.value).has(pending.id))replacement.focus();else if(props.layout==='columns')root.value.focus()});const retire=()=>{generation+=1;const previous=connection.value;connection.value=undefined;connectedElement=undefined;previous?.disconnect()};const validTarget=target=>applyTreeReorderEvent(current.value,{type:'move-nodes',ids:[],parentID:target.parentID,beforeID:target.beforeID??null}).ok;const projectTargets=()=>{const native=connection.value;if(!native)return;for(const[element,target]of targets){if(!alive||connection.value!==native)break;if(validTarget(target))native.setDropTarget(element,target);else native.removeDropTarget(element)}};const connect=(force=false)=>{if(!force&&connection.value&&connectedElement===root.value&&active.value)return;retire();if(!alive||!mounted||!active.value||!root.value)return;const expected=generation;const isCurrent=()=>alive&&expected===generation;try{const native=createReorder({root:root.value,nodes:props.controlled?props.nodes:current.value.nodes,controlled:props.controlled,handleOnly:props.handleOnly,...reorderLabelOptions(props,attrs),orientation:props.orientation,disabled:props.disabled,readOnly:props.readonly,layout:props.layout,direction:direction.value,...props.policies===undefined?{}:{policies:props.policies},onOrderChange:nodes=>{if(!isCurrent())return;if(connection.value)current.value=connection.value.getSnapshot().state;emit('update:nodes',nodes)},onUpdate:()=>{if(isCurrent()&&connection.value)current.value=connection.value.getSnapshot().state}});if(!isCurrent()){native.disconnect();return}connection.value=native;connectedElement=root.value;current.value=native.getSnapshot().state;for(const[id,element]of registrations){if(!isCurrent())break;native.setItemAttributes(element,id)}if(isCurrent())projectTargets()}catch(error){try{retire()}catch{}throw error}};const nodes=computed(()=>current.value.nodes);const context=treeContextPort({position:id=>{const tree=getTreeReorderHierarchy(current.value);if(!tree.has(id))return 0;const parentID=tree.parentOf(id);const siblings=parentID===null?tree.roots:tree.childrenOf(parentID);return siblings.indexOf(id)+1},level:id=>(getTreeReorderHierarchy(current.value).depthOf(id)??-1)+1,size:id=>{const tree=getTreeReorderHierarchy(current.value);if(!tree.has(id))return 0;const parentID=tree.parentOf(id);return(parentID===null?tree.roots:tree.childrenOf(parentID)).size},disabled:()=>props.disabled||props.readonly,columns:()=>props.layout==='columns',getChildren:parentID=>{const tree=getTreeReorderHierarchy(current.value);return(parentID===null?tree.roots:tree.childrenOf(parentID))?.ids??emptyItems},getParent:id=>getTreeReorderHierarchy(current.value).parentOf(id)??null,register:(element,id)=>{if(!alive)return;registrations.set(id,element);connection.value?.setItemAttributes(element,id)},unregister:(element,id)=>{if(!alive)return;const focused=element.ownerDocument.activeElement;if(active.value&&focused!==null&&(focused===element||element.contains(focused))){pendingFocus={id,previous:element};repairFocus.schedule()}if(registrations.get(id)===element)registrations.delete(id);connection.value?.removeItem(element)},registerTarget:(element,target)=>{if(!alive)return;const position={parentID:target.parentID,...target.beforeID===undefined?{}:{beforeID:target.beforeID}};if(!alive)return;targets.set(element,position);if(validTarget(position))connection.value?.setDropTarget(element,position);else connection.value?.removeDropTarget(element)},unregisterTarget:element=>{if(!alive)return;targets.delete(element);connection.value?.removeDropTarget(element)}});provide(treeKey,context.value);const canReorder=()=>alive&&active.value&&!props.disabled&&!props.readonly;const exposure=treeExposure({get element(){return root.value??null},move:(id,target)=>canReorder()&&(connection.value?.handleEvent({type:'move-node',id,parentID:target.parentID,beforeID:target.beforeID??null})??false),canMove:(id,target)=>canReorder()&&(connection.value?.canMove(id,target)??false),focus:id=>{if(!alive||!active.value)return;const element=id===undefined?root.value:registrations.get(id);if(element&&root.value?.contains(element))element.focus()}});expose(exposure.value);onMounted(()=>{mounted=true;connect()});onBeforeUnmount(()=>{alive=false;pendingFocus=undefined;repairFocus.cancel();exposure.retire();context.retire();try{retire()}finally{registrations.clear();targets.clear();root.value=undefined}});watch(root,()=>connect(),{flush:'post'});watch(active,()=>{pendingFocus=undefined;repairFocus.cancel();connect()},{flush:'post'});watch([()=>props.orientation,()=>props.disabled,()=>props.readonly,()=>props.controlled,()=>props.handleOnly,()=>props.label,()=>props.roleDescription,()=>props.layout,()=>props.policies,direction],()=>connect(true),{flush:'post'});watch(()=>props.nodes,nodes=>{current.value=connection.value===undefined?createTreeReorderState(nodes,props.layout==='columns'?{maxDepth:1}:undefined):unwrap(connection.value.syncOrder(nodes)).state;projectTargets()});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{root.value=typeof HTMLElement!=='undefined'&&element instanceof HTMLElement?element:undefined},role:props.layout==='columns'?'list':'tree',tabindex:props.layout==='columns'?-1:undefined,dir:direction.value,'aria-label':props.label??attrs['aria-label'],'aria-roledescription':props.roleDescription??attrs['aria-roledescription']??'sortable','data-scope':'tree-reorder','data-part':'root','data-orientation':props.orientation,'data-layout':props.layout,'data-readonly':props.readonly?'':undefined}),{default:()=>slots['default']?.({nodes:nodes.value,disabled:props.disabled,readonly:props.readonly,getChildren:context.value.getChildren,getParent:context.value.getParent,canMove:exposure.value.canMove})})}});export const TreeReorderRoot=TreeRootImplementation;export const TreeReorderItem=/* @__PURE__ */defineComponent({name:'SectileTreeReorderItem',inheritAttrs:false,props:{value:{type:String,required:true},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useTreeContext('TreeReorderItem');const elementRef=useReorderItemRef(root,()=>props.value);const position=computed(()=>root.position(props.value));const level=computed(()=>root.level(props.value));return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef,role:root.columns()?'listitem':'treeitem','data-scope':'tree-reorder','data-part':'item','data-value':props.value,'data-level':level.value,'aria-level':level.value||undefined,'aria-posinset':position.value||undefined,'aria-setsize':root.size(props.value)}),{default:()=>slots['default']?.({value:props.value,position:position.value,level:level.value,setSize:root.size(props.value)})})}});function reorderLabelOptions(props,attrs){const label=props.label??attrs['aria-label'];const roleDescription=props.roleDescription??attrs['aria-roledescription'];return{...typeof label==='string'?{label}:{},...typeof roleDescription==='string'?{roleDescription}:{}}}function useReorderItemRef(root,value){let current;let registeredID;const release=()=>{if(current!==undefined&&registeredID!==undefined)root.unregister(current,registeredID);current=undefined;registeredID=undefined};onBeforeUnmount(release);watch(value,()=>{if(current===undefined)return;root.unregister(current,registeredID);registeredID=value();root.register(current,registeredID)});return element=>{const next=element instanceof HTMLElement?element:undefined;if(next===current)return;release();current=next;if(current!==undefined){registeredID=value();root.register(current,registeredID)}}}function useSequenceContext(part){const context=inject(sequenceKey);if(context===undefined)throw new TypeError(`${part} must be used inside SequenceReorderRoot.`);return context}function useTreeContext(part){const context=inject(treeKey);if(context===undefined)throw new TypeError(`${part} must be used inside TreeReorderRoot.`);return context}export const TreeReorderDropTarget=/* @__PURE__ */defineComponent({name:'SectileTreeReorderDropTarget',inheritAttrs:false,props:{parentID:{type:String,default:null},beforeID:{type:String,default:undefined},label:{type:String,default:undefined},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const root=useTreeContext('TreeReorderDropTarget');let current;const release=()=>{const previous=current;current=undefined;if(previous)root.unregisterTarget(previous)};const register=()=>{if(current)root.registerTarget(current,{parentID:props.parentID,...props.beforeID===undefined?{}:{beforeID:props.beforeID}})};onBeforeUnmount(release);watch([()=>props.parentID,()=>props.beforeID],register,{flush:'post'});const elementRef=element=>{const next=typeof HTMLElement!=='undefined'&&element instanceof HTMLElement?element:undefined;if(next===current)return;release();current=next;register()};return()=>h(Primitive,mergeProps({role:root.columns()?'list':'group'},attrs,{as:props.as,asChild:props.asChild,elementRef,'aria-label':props.label??attrs['aria-label'],'data-scope':'tree-reorder','data-part':'drop-target'}),slots)}});function createReorderHandle(name,scope){return defineComponent({name,inheritAttrs:false,props:{label:{type:String,required:true},disabled:{type:Boolean,default:false},as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const root=scope==='sequence'?useSequenceContext(name):useTreeContext(name);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,disabled:props.disabled||root.disabled(),'aria-label':props.label,'aria-keyshortcuts':'Alt+ArrowUp Alt+ArrowDown Alt+ArrowLeft Alt+ArrowRight Alt+Home Alt+End','data-sectile-reorder-handle':'','data-scope':scope==='sequence'?'sequence-reorder':'tree-reorder','data-part':'handle'}),slots)}})}export const SequenceReorderHandle=/* @__PURE__ */createReorderHandle('SectileSequenceReorderHandle','sequence');export const TreeReorderHandle=/* @__PURE__ */createReorderHandle('SectileTreeReorderHandle','tree');
2
2
  //# sourceMappingURL=reorder.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/reorder.ts"],"mappings":"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","names":["items","nodes"],"file":"reorder.js"}
1
+ {"version":3,"file":"reorder.js","names":["computed","defineComponent","h","inject","mergeProps","onBeforeUnmount","onMounted","provide","shallowRef","watch","createReorder","createSequenceReorderState","createTreeReorderState","getSequenceReorderOrder","getTreeReorderHierarchy","applyTreeReorderEvent","unwrap","Primitive","useHostActive","useHostDirection","useNextTickTask","emptyItems","Object","freeze","treeContextPort","source","port","value","position","id","level","size","disabled","columns","getChildren","parent","getParent","register","element","unregister","registerTarget","target","unregisterTarget","retire","undefined","treeExposure","move","canMove","focus","sequenceKey","Symbol","treeKey","rootProps","handleOnly","type","Boolean","default","label","String","roleDescription","controlled","orientation","as","Function","asChild","SequenceRootImplementation","name","inheritAttrs","props","assign","items","Array","required","emits","_items","slots","setup","attrs","emit","root","connection","current","registrations","Map","connect","disconnect","ids","reorderLabelOptions","onOrderChange","getSnapshot","state","setItemAttributes","indexOf","length","set","get","delete","removeItem","syncOrder","elementRef","HTMLElement","role","SequenceReorderItem","useSequenceContext","useReorderItemRef","setSize","SequenceReorderRoot","TreeRootImplementation","nodes","readonly","layout","direction","policies","_nodes","expose","maxDepth","targets","active","inheritedDirection","alive","mounted","generation","connectedElement","pendingFocus","repairFocus","pending","focused","ownerDocument","activeElement","previous","body","replacement","contains","has","validTarget","parentID","beforeID","ok","projectTargets","native","setDropTarget","removeDropTarget","force","expected","isCurrent","readOnly","onUpdate","error","context","tree","parentOf","siblings","roots","childrenOf","depthOf","schedule","canReorder","exposure","handleEvent","cancel","clear","flush","tabindex","dir","TreeReorderRoot","TreeReorderItem","useTreeContext","registeredID","release","next","part","TypeError","TreeReorderDropTarget","createReorderHandle","scope","SequenceReorderHandle","TreeReorderHandle"],"sources":["../src/reorder.ts"],"mappings":"OACEA,SACAC,gBACAC,EACAC,OACAC,WACAC,gBACAC,UACAC,QACAC,WACAC,UAOK,aAELC,kBAMK,8BAELC,2BACAC,uBACAC,wBACAC,wBACAC,0BACK,+BACEC,WAAc,8BACdC,cAAmC,wBACnCC,cAAeC,qBAAwB,4BACvCC,oBAAuB,+BAyFhC,MAAMC,0BAAgDC,OAAOC,OAAO,IACpE,SAASC,gBAAgBC,QACvB,IAAIC,KAAgCD,OACpC,MAAME,MAAqB,CAAEC,SAAUC,IAAMH,MAAME,SAASC,KAAO,EAAGC,MAAOD,IAAMH,MAAMI,MAAMD,KAAO,EAAGE,KAAMF,IAAMH,MAAMK,KAAKF,KAAO,EACrIG,SAAU,IAAMN,MAAMM,YAAc,KAAMC,QAAS,IAAMP,MAAMO,WAAa,MAC5EC,YAAaC,QAAUT,MAAMQ,YAAYC,SAAWd,WAAYe,UAAWP,IAAMH,MAAMU,UAAUP,KAAO,KACxGQ,SAAU,CAACC,QAAQT,KAAOH,MAAMW,SAASC,QAAQT,IAAKU,WAAY,CAACD,QAAQT,KAAOH,MAAMa,WAAWD,QAAQT,IAC3GW,eAAgB,CAACF,QAAQG,SAAWf,MAAMc,eAAeF,QAAQG,QAASC,iBAAkBJ,SAAWZ,MAAMgB,iBAAiBJ,UAChI,MAAO,CAAEX,MAAOgB,OAAQ,KAAcjB,KAAOkB,WAC/C,CACA,SAASC,aAAapB,QACpB,IAAIC,KAAsCD,OAC1C,MAAME,MAA2B,CAAE,WAAIW,GAAY,OAAOZ,MAAMY,SAAW,IAAM,EAAGQ,KAAM,CAACjB,GAAGY,SAAWf,MAAMoB,KAAKjB,GAAGY,SAAW,MAChIM,QAAS,CAAClB,GAAGY,SAAWf,MAAMqB,QAAQlB,GAAGY,SAAW,MAAOO,MAAOnB,IAAMH,MAAMsB,MAAMnB,KACtF,MAAO,CAAEF,MAAOgB,OAAQ,KAAcjB,KAAOkB,WAC/C,CAEA,MAAMK,2BAA8BC,OAAO,8BAC3C,MAAMC,uBAA0BD,OAAO,0BAEvC,MAAME,UAAY,CAChBC,WAAY,CAAEC,KAAMC,QAASC,QAAS,OACtCC,MAAO,CAAEH,KAAMI,OAAQF,QAASZ,WAChCe,gBAAiB,CAAEL,KAAMI,OAAQF,QAASZ,WAC1CgB,WAAY,CAAEN,KAAMC,QAASC,QAAS,OACtCK,YAAa,CAAEP,KAAMI,OAAwCF,QAAS,YACtExB,SAAU,CAAEsB,KAAMC,QAASC,QAAS,OACpCM,GAAI,CAAER,KAAM,CAACI,OAAQpC,OAAQyC,UAAoCP,QAAS,OAC1EQ,QAAS,CAAEV,KAAMC,QAASC,QAAS,QAGrC,MAAMS,0CAA6ChE,gBAAgB,CACjEiE,KAAM,6BACNC,aAAc,MACdC,qBAAuB9C,OAAO+C,OAAO,GAAIjB,UAAW,CAClDkB,MAAO,CAAEhB,KAAMiB,MAAsCC,SAAU,QAEjEC,MAAO,CAAE,eAAiBC,QAAuC,MACjEC,MAAOrD,OACP,KAAAsD,CAAMR,OAAOS,MAAOC,KAAMH,QACxB,MAAMI,KAAOvE,aACb,MAAMwE,WAAaxE,aACnB,MAAMyE,QAAUzE,WAAWG,2BAA2ByD,MAAME,QAC5D,MAAMY,cAAgB,IAAIC,IAC1B,MAAMC,QAAU,KACdJ,WAAWrD,OAAO0D,aAClB,GAAIN,KAAKpD,QAAUiB,UAAW,OAC9BoC,WAAWrD,MAAQjB,cAAc,CAC/BqE,KAAMA,KAAKpD,MACX2D,IAAKlB,MAAMR,WAAaQ,MAAME,MAAQW,QAAQtD,MAAM2D,IACpD1B,WAAYQ,MAAMR,WAClBP,WAAYe,MAAMf,cACfkC,oBAAoBnB,MAAOS,OAC9BhB,YAAaO,MAAMP,YACnB7B,SAAUoC,MAAMpC,SAChBwD,cAAgBlB,QACd,IAAKF,MAAMR,WAAYqB,QAAQtD,MAAQqD,WAAWrD,MAAO8D,cAAcC,MACvEZ,KAAK,eAAgBR,UAGzB,IAAK,MAAOzC,GAAIS,WAAY4C,cAAeF,WAAWrD,MAAMgE,kBAAkBrD,QAAST,IACvFoD,QAAQtD,MAAQqD,WAAWrD,MAAM8D,cAAcC,OAEjD,MAAMpB,MAAQtE,SAAS,IAAMiF,QAAQtD,MAAM2D,KAC3C/E,QAAwB0C,YAAa,CACnCrB,SAAWC,KAAQhB,wBAAwBoE,QAAQtD,OAAOiE,QAAQ/D,MAAQ,GAAK,EAC/EC,MAAO,IAAM,EACbC,KAAM,IAAMkD,QAAQtD,MAAM2D,IAAIO,OAC9B7D,SAAU,IAAMoC,MAAMpC,SACtBK,SAAU,CAACC,QAAST,MAClBqD,cAAcY,IAAIjE,GAAIS,SACtB0C,WAAWrD,OAAOgE,kBAAkBrD,QAAST,KAE/CU,WAAY,CAACD,QAAST,MACpB,GAAIqD,cAAca,IAAIlE,MAAQS,QAAS4C,cAAcc,OAAOnE,IAC5DmD,WAAWrD,OAAOsE,WAAW3D,YAGjChC,UAAU8E,SACV/E,gBAAgB,IAAM2E,WAAWrD,OAAO0D,cACxC5E,MAAM,CAAC,IAAM2D,MAAMP,YAAa,IAAMO,MAAMpC,SAAU,IAAMoC,MAAMR,WAAY,IAAMQ,MAAMf,WAAY,IAAMe,MAAMX,MAAO,IAAMW,MAAMT,iBAAkByB,SACvJ3E,MAAM,IAAM2D,MAAME,MAAQA,QACxBW,QAAQtD,MAAQqD,WAAWrD,QAAUiB,UACjCjC,2BAA2B2D,OAC3BtD,OAAOgE,WAAWrD,MAAMuE,UAAU5B,QAAQoB,QAEhD,MAAO,IAAkBxF,EAAEe,UAAWb,WAAWyE,MAAO,CACtDf,GAAIM,MAAMN,GACVE,QAASI,MAAMJ,QACfmC,WAAa7D,UAAuByC,KAAKpD,MAAQW,mBAAmB8D,YAAc9D,QAAUM,WAC5F,aAAc,mBACd,YAAa,OACbyD,KAAM,OACN,aAAcjC,MAAMX,OAASoB,MAAM,cACnC,uBAAwBT,MAAMT,iBAAmBkB,MAAM,yBAA2B,WAClF,mBAAoBT,MAAMP,cACxB,CAAEL,QAAS,IAAMmB,MAAM,aAAa,CAAEL,MAAOA,MAAM3C,MAAOK,SAAUoC,MAAMpC,YAChF,WAGK,MAAMsE,mCAAsCrG,gBAAgB,CACjEiE,KAAM,6BACNC,aAAc,MACdC,MAAO,CACLzC,MAAO,CAAE2B,KAAMI,OAAQc,SAAU,MACjCV,GAAI,CAAER,KAAM,CAACI,OAAQpC,OAAQyC,UAAoCP,QAAS,OAC1EQ,QAAS,CAAEV,KAAMC,QAASC,QAAS,QAErCmB,MAAOrD,OACP,KAAAsD,CAAMR,OAAOS,MAAOF,QAClB,MAAMI,KAAOwB,mBAAmB,uBAChC,MAAMJ,WAAaK,kBAAkBzB,KAAM,IAAMX,MAAMzC,OACvD,MAAMC,SAAW5B,SAAS,IAAM+E,KAAKnD,SAASwC,MAAMzC,QACpD,MAAO,IAAkBzB,EAAEe,UAAWb,WAAWyE,MAAO,CACtDf,GAAIM,MAAMN,GACVE,QAASI,MAAMJ,QACfmC,WACA,aAAc,mBACd,YAAa,OACb,aAAc/B,MAAMzC,MACpB0E,KAAM,WACN,gBAAiBzE,SAASD,OAASiB,UACnC,eAAgBmC,KAAKhD,KAAKqC,MAAMzC,SAC9B,CAAE6B,QAAS,IAAMmB,MAAM,aAAa,CAAEhD,MAAOyC,MAAMzC,MAAOC,SAAUA,SAASD,MAAOG,MAAO,EAAG2E,QAAS1B,KAAKhD,KAAKqC,MAAMzC,UAC7H,WAKK,MAAM+E,oBAAwKzC,2BAErL,MAAM0C,sCAAyC1G,gBAAgB,CAC7DiE,KAAM,yBACNC,aAAc,MACdC,qBAAuB9C,OAAO+C,OAAO,GAAIjB,UAAW,CAClDwD,MAAO,CAAEtD,KAAMiB,MAA+CC,SAAU,MACxEqC,SAAU,CAAEvD,KAAMC,QAASC,QAAS,OACpCsD,OAAQ,CAAExD,KAAMI,OAAwCF,QAAS,QACjEuD,UAAW,CAAEzD,KAAMI,OAAmCF,QAASZ,WAC/DoE,SAAU,CAAE1D,KAAMhC,OAA4DkC,QAASZ,aAEzF6B,MAAO,CAAE,eAAiBwC,QAAgD,MAC1EtC,MAAOrD,OACP,KAAAsD,CAAMR,OAAOS,MAAOC,KAAMH,MAAOuC,SAC/B,MAAMnC,KAAOvE,aACb,MAAMwE,WAAaxE,aACnB,MAAMyE,QAAUzE,WAAWI,uBAAuBwD,MAAMwC,MAAOxC,MAAM0C,SAAW,UAAY,CAAEK,SAAU,GAAMvE,YAC9G,MAAMsC,cAAgB,IAAIC,IAC1B,MAAMiC,QAAU,IAAIjC,IACpB,MAAMkC,OAASnG,gBAAiBoG,mBAAqBnG,mBACrD,MAAM4F,UAAY/G,SAAS,IAAMoE,MAAM2C,WAAaO,mBAAmB3F,OACvE,IAAI4F,MAAQ,KAAMC,QAAU,MAAOC,WAAa,EAChD,IAAIC,iBACJ,IAAIC,aACJ,MAAMC,YAAcxG,gBAAgB,KAClC,MAAMyG,QAAUF,aAAcA,aAAe/E,UAC7C,IAAK2E,QAAUF,OAAO1F,QAAUkG,UAAY9C,KAAKpD,MAAO,OACxD,MAAMmG,QAAU/C,KAAKpD,MAAMoG,cAAcC,cACzC,GAAIF,UAAYD,QAAQI,UAAYH,UAAY/C,KAAKpD,MAAMoG,cAAcG,MAAQJ,UAAY,KAAM,OACnG,MAAMK,YAAcjD,cAAca,IAAI8B,QAAQhG,IAC9C,GAAIsG,aAAepD,KAAKpD,MAAMyG,SAASD,cAAgBrH,wBAAwBmE,QAAQtD,OAAO0G,IAAIR,QAAQhG,IAAKsG,YAAYnF,aACtH,GAAIoB,MAAM0C,SAAW,UAAW/B,KAAKpD,MAAMqB,UAElD,MAAML,OAAS,KACb8E,YAAc,EACd,MAAMQ,SAAWjD,WAAWrD,MAC5BqD,WAAWrD,MAAQiB,UAAW8E,iBAAmB9E,UACjDqF,UAAU5C,cAEZ,MAAMiD,YAAe7F,QAA8C1B,sBAAsBkE,QAAQtD,MAAO,CACtG2B,KAAM,aAAcgC,IAAK,GAAIiD,SAAU9F,OAAO8F,SAAUC,SAAU/F,OAAO+F,UAAY,OACpFC,GACH,MAAMC,eAAiB,KACrB,MAAMC,OAAS3D,WAAWrD,MAC1B,IAAKgH,OAAQ,OACb,IAAK,MAAOrG,QAASG,UAAW2E,QAAS,CACvC,IAAKG,OAASvC,WAAWrD,QAAUgH,OAAQ,MAC3C,GAAIL,YAAY7F,QAASkG,OAAOC,cAActG,QAASG,aAClDkG,OAAOE,iBAAiBvG,QAC/B,GAEF,MAAM8C,QAAU,CAAC0D,MAAQ,SACvB,IAAKA,OAAS9D,WAAWrD,OAAS+F,mBAAqB3C,KAAKpD,OAAS0F,OAAO1F,MAAO,OACnFgB,SACA,IAAK4E,QAAUC,UAAYH,OAAO1F,QAAUoD,KAAKpD,MAAO,OACxD,MAAMoH,SAAWtB,WACjB,MAAMuB,UAAY,IAAezB,OAASwB,WAAatB,WACvD,IACE,MAAMkB,OAASjI,cAAc,CAC3BqE,KAAMA,KAAKpD,MACXiF,MAAOxC,MAAMR,WAAaQ,MAAMwC,MAAQ3B,QAAQtD,MAAMiF,MACtDhD,WAAYQ,MAAMR,WAAYP,WAAYe,MAAMf,cAC7CkC,oBAAoBnB,MAAOS,OAC9BhB,YAAaO,MAAMP,YAAa7B,SAAUoC,MAAMpC,SAChDiH,SAAU7E,MAAMyC,SAAUC,OAAQ1C,MAAM0C,OAAQC,UAAWA,UAAUpF,SACjEyC,MAAM4C,WAAapE,UAAY,GAAK,CAAEoE,SAAU5C,MAAM4C,UAC1DxB,cAAgBoB,QACd,IAAKoC,YAAa,OAClB,GAAIhE,WAAWrD,MAAOsD,QAAQtD,MAAQqD,WAAWrD,MAAM8D,cAAcC,MACrEZ,KAAK,eAAgB8B,QAEvBsC,SAAU,KAAQ,GAAIF,aAAehE,WAAWrD,MAAOsD,QAAQtD,MAAQqD,WAAWrD,MAAM8D,cAAcC,SAExG,IAAKsD,YAAa,CAAEL,OAAOtD,aAAc,MAAQ,CACjDL,WAAWrD,MAAQgH,OAAQjB,iBAAmB3C,KAAKpD,MACnDsD,QAAQtD,MAAQgH,OAAOlD,cAAcC,MACrC,IAAK,MAAO7D,GAAIS,WAAY4C,cAAe,CACzC,IAAK8D,YAAa,MAClBL,OAAOhD,kBAAkBrD,QAAST,GACpC,CACA,GAAImH,YAAaN,gBACnB,CAAE,MAAOS,OACP,IAAMxG,QAAU,CAAE,MAAgD,CAClE,MAAMwG,KACR,GAEF,MAAMvC,MAAQ5G,SAAS,IAAMiF,QAAQtD,MAAMiF,OAC3C,MAAMwC,QAAU5H,gBAAgB,CAC9BI,SAAWC,KACT,MAAMwH,KAAOvI,wBAAwBmE,QAAQtD,OAC7C,IAAK0H,KAAKhB,IAAIxG,IAAK,OAAO,EAC1B,MAAM0G,SAAWc,KAAKC,SAASzH,IAC/B,MAAM0H,SAAWhB,WAAa,KAAOc,KAAKG,MAAQH,KAAKI,WAAWlB,UAClE,OAAOgB,SAAS3D,QAAQ/D,IAAO,GAEjCC,MAAQD,KAAQf,wBAAwBmE,QAAQtD,OAAO+H,QAAQ7H,MAAQ,GAAK,EAC5EE,KAAOF,KACL,MAAMwH,KAAOvI,wBAAwBmE,QAAQtD,OAC7C,IAAK0H,KAAKhB,IAAIxG,IAAK,OAAO,EAC1B,MAAM0G,SAAWc,KAAKC,SAASzH,IAC/B,OAAQ0G,WAAa,KAAOc,KAAKG,MAAQH,KAAKI,WAAWlB,WAAYxG,MAEvEC,SAAU,IAAMoC,MAAMpC,UAAYoC,MAAMyC,SACxC5E,QAAS,IAAMmC,MAAM0C,SAAW,UAChC5E,YAAcqG,WACZ,MAAMc,KAAOvI,wBAAwBmE,QAAQtD,OAC7C,OAAQ4G,WAAa,KAAOc,KAAKG,MAAQH,KAAKI,WAAWlB,YAAYjD,KAAOjE,YAE9Ee,UAAYP,IAAOf,wBAAwBmE,QAAQtD,OAAO2H,SAASzH,KAAO,KAC1EQ,SAAU,CAACC,QAAST,MAClB,IAAK0F,MAAO,OACZrC,cAAcY,IAAIjE,GAAIS,SACtB0C,WAAWrD,OAAOgE,kBAAkBrD,QAAST,KAE/CU,WAAY,CAACD,QAAST,MACpB,IAAK0F,MAAO,OACZ,MAAMO,QAAUxF,QAAQyF,cAAcC,cACtC,GAAIX,OAAO1F,OAASmG,UAAY,OAASA,UAAYxF,SAAWA,QAAQ8F,SAASN,UAAW,CAC1FH,aAAe,CAAE9F,GAAIoG,SAAU3F,SAAWsF,YAAY+B,UACxD,CACA,GAAIzE,cAAca,IAAIlE,MAAQS,QAAS4C,cAAcc,OAAOnE,IAC5DmD,WAAWrD,OAAOsE,WAAW3D,UAE/BE,eAAgB,CAACF,QAASG,UACxB,IAAK8E,MAAO,OACZ,MAAM3F,SAAW,CAAE2G,SAAU9F,OAAO8F,YAAc9F,OAAO+F,WAAa5F,UAAY,GAAK,CAAE4F,SAAU/F,OAAO+F,WAC1G,IAAKjB,MAAO,OACZH,QAAQtB,IAAIxD,QAASV,UACrB,GAAI0G,YAAY1G,UAAWoD,WAAWrD,OAAOiH,cAActG,QAASV,eAC/DoD,WAAWrD,OAAOkH,iBAAiBvG,UAE1CI,iBAAmBJ,UACjB,IAAKiF,MAAO,OACZH,QAAQpB,OAAO1D,SAAU0C,WAAWrD,OAAOkH,iBAAiBvG,YAGhE/B,QAAqB4C,QAASiG,QAAQzH,OACtC,MAAMiI,WAAa,IAAerC,OAASF,OAAO1F,QAAUyC,MAAMpC,WAAaoC,MAAMyC,SACrF,MAAMgD,SAAWhH,aAAa,CAC5B,WAAIP,GAAY,OAAOyC,KAAKpD,OAAS,IAAM,EAC3CmB,KAAM,CAACjB,GAAIY,SAAWmH,eAAiB5E,WAAWrD,OAAOmI,YAAY,CAAExG,KAAM,YAAazB,GAAI0G,SAAU9F,OAAO8F,SAAUC,SAAU/F,OAAO+F,UAAY,QAAW,OACjKzF,QAAS,CAAClB,GAAIY,SAAWmH,eAAiB5E,WAAWrD,OAAOoB,QAAQlB,GAAIY,SAAW,OACnFO,MAAQnB,KACN,IAAK0F,QAAUF,OAAO1F,MAAO,OAC7B,MAAMW,QAAUT,KAAOe,UAAYmC,KAAKpD,MAAQuD,cAAca,IAAIlE,IAClE,GAAIS,SAAWyC,KAAKpD,OAAOyG,SAAS9F,SAAUA,QAAQU,WAG1DkE,OAAO2C,SAASlI,OAChBrB,UAAU,KAAQkH,QAAU,KAAMpC,YAClC/E,gBAAgB,KACdkH,MAAQ,MAAOI,aAAe/E,UAAWgF,YAAYmC,SACrDF,SAASlH,SAAUyG,QAAQzG,SAC3B,IAAMA,QAAU,C,QAAYuC,cAAc8E,QAAS5C,QAAQ4C,QAASjF,KAAKpD,MAAQiB,SAAW,IAE9FnC,MAAMsE,KAAM,IAAMK,UAAW,CAAE6E,MAAO,SACtCxJ,MAAM4G,OAAQ,KACZM,aAAe/E,UAAWgF,YAAYmC,SAAU3E,WAC/C,CAAE6E,MAAO,SACZxJ,MAAM,CAAC,IAAM2D,MAAMP,YAAa,IAAMO,MAAMpC,SAAU,IAAMoC,MAAMyC,SAAU,IAAMzC,MAAMR,WAAY,IAAMQ,MAAMf,WAC9G,IAAMe,MAAMX,MAAO,IAAMW,MAAMT,gBAAiB,IAAMS,MAAM0C,OAAQ,IAAM1C,MAAM4C,SAAUD,WAAY,IAAM3B,QAAQ,MAAO,CAAE6E,MAAO,SACtIxJ,MAAM,IAAM2D,MAAMwC,MAAQA,QACxB3B,QAAQtD,MAAQqD,WAAWrD,QAAUiB,UACjChC,uBAAuBgG,MAAOxC,MAAM0C,SAAW,UAAY,CAAEK,SAAU,GAAMvE,WAC7E5B,OAAOgE,WAAWrD,MAAMuE,UAAUU,QAAQlB,MAC9CgD,mBAEF,MAAO,IAAkBxI,EAAEe,UAAWb,WAAWyE,MAAO,CACtDf,GAAIM,MAAMN,GACVE,QAASI,MAAMJ,QACfmC,WAAa7D,UAAuByC,KAAKpD,aAAeyE,cAAgB,aAAe9D,mBAAmB8D,YAAc9D,QAAUM,WAClIyD,KAAMjC,MAAM0C,SAAW,UAAY,OAAS,OAC5CoD,SAAU9F,MAAM0C,SAAW,WAAa,EAAIlE,UAC5CuH,IAAKpD,UAAUpF,MACf,aAAcyC,MAAMX,OAASoB,MAAM,cACnC,uBAAwBT,MAAMT,iBAAmBkB,MAAM,yBAA2B,WAClF,aAAc,eACd,YAAa,OACb,mBAAoBT,MAAMP,YAC1B,cAAeO,MAAM0C,OACrB,gBAAiB1C,MAAMyC,SAAW,GAAKjE,YACrC,CAAEY,QAAS,IAAMmB,MAAM,aAAa,CAAEiC,MAAOA,MAAMjF,MAAOK,SAAUoC,MAAMpC,SAAU6E,SAAUzC,MAAMyC,SACtG3E,YAAakH,QAAQzH,MAAMO,YAAaE,UAAWgH,QAAQzH,MAAMS,UAAWW,QAAS8G,SAASlI,MAAMoB,WACxG,WAKK,MAAMqH,gBAAwJzD,8BAE9J,MAAM0D,+BAAkCpK,gBAAgB,CAC7DiE,KAAM,yBACNC,aAAc,MACdC,MAAO,CACLzC,MAAO,CAAE2B,KAAMI,OAAQc,SAAU,MACjCV,GAAI,CAAER,KAAM,CAACI,OAAQpC,OAAQyC,UAAoCP,QAAS,OAC1EQ,QAAS,CAAEV,KAAMC,QAASC,QAAS,QAErCmB,MAAOrD,OACP,KAAAsD,CAAMR,OAAOS,MAAOF,QAClB,MAAMI,KAAOuF,eAAe,mBAC5B,MAAMnE,WAAaK,kBAAkBzB,KAAM,IAAMX,MAAMzC,OACvD,MAAMC,SAAW5B,SAAS,IAAM+E,KAAKnD,SAASwC,MAAMzC,QACpD,MAAMG,MAAQ9B,SAAS,IAAM+E,KAAKjD,MAAMsC,MAAMzC,QAC9C,MAAO,IAAkBzB,EAAEe,UAAWb,WAAWyE,MAAO,CACtDf,GAAIM,MAAMN,GACVE,QAASI,MAAMJ,QACfmC,WACAE,KAAMtB,KAAK9C,UAAY,WAAa,WACpC,aAAc,eACd,YAAa,OACb,aAAcmC,MAAMzC,MACpB,aAAcG,MAAMH,MACpB,aAAcG,MAAMH,OAASiB,UAC7B,gBAAiBhB,SAASD,OAASiB,UACnC,eAAgBmC,KAAKhD,KAAKqC,MAAMzC,SAC9B,CAAE6B,QAAS,IAAMmB,MAAM,aAAa,CAAEhD,MAAOyC,MAAMzC,MAAOC,SAAUA,SAASD,MAAOG,MAAOA,MAAMH,MAAO8E,QAAS1B,KAAKhD,KAAKqC,MAAMzC,UACvI,IAGF,SAAS4D,oBACPnB,MACAS,OAEA,MAAMpB,MAAQW,MAAMX,OAASoB,MAAM,cACnC,MAAMlB,gBAAkBS,MAAMT,iBAAmBkB,MAAM,wBACvD,MAAO,WAAapB,QAAU,SAAW,CAAEA,OAAU,aACxCE,kBAAoB,SAAW,CAAEA,iBAAoB,GACpE,CAEA,SAAS6C,kBACPzB,KACApD,OAEA,IAAIsD,QACJ,IAAIsF,aACJ,MAAMC,QAAU,KACd,GAAIvF,UAAYrC,WAAa2H,eAAiB3H,UAAWmC,KAAKxC,WAAW0C,QAASsF,cAClFtF,QAAUrC,UACV2H,aAAe3H,WAEjBvC,gBAAgBmK,SAChB/J,MAAMkB,MAAO,KACX,GAAIsD,UAAYrC,UAAW,OAC3BmC,KAAKxC,WAAW0C,QAASsF,cACzBA,aAAe5I,QACfoD,KAAK1C,SAAS4C,QAASsF,gBAEzB,OAAQjI,UACN,MAAMmI,KAAOnI,mBAAmB8D,YAAc9D,QAAUM,UACxD,GAAI6H,OAASxF,QAAS,OACtBuF,UACAvF,QAAUwF,KACV,GAAIxF,UAAYrC,UAAW,CACzB2H,aAAe5I,QACfoD,KAAK1C,SAAS4C,QAASsF,aACzB,EAEJ,CAEA,SAAShE,mBAAmBmE,MAC1B,MAAMtB,QAAUjJ,OAAuB8C,aACvC,GAAImG,UAAYxG,UAAW,MAAM,IAAI+H,UAAU,GAAGD,iDAClD,OAAOtB,OACT,CACA,SAASkB,eAAeI,MACtB,MAAMtB,QAAUjJ,OAAoBgD,SACpC,GAAIiG,UAAYxG,UAAW,MAAM,IAAI+H,UAAU,GAAGD,6CAClD,OAAOtB,OACT,QAEO,MAAMwB,qCAAwC3K,gBAAgB,CACnEiE,KAAM,+BAAgCC,aAAc,MACpDC,MAAO,CACLmE,SAAU,CAAEjF,KAAMI,OAAmCF,QAAS,MAC9DgF,SAAU,CAAElF,KAAMI,OAAmCF,QAASZ,WAC9Da,MAAO,CAAEH,KAAMI,OAAQF,QAASZ,WAChCkB,GAAI,CAAER,KAAM,CAACI,OAAQpC,OAAQyC,UAAoCP,QAAS,OAC1EQ,QAAS,CAAEV,KAAMC,QAASC,QAAS,QAErC,KAAAoB,CAAMR,OAAOS,MAAOF,QAClB,MAAMI,KAAOuF,eAAe,yBAC5B,IAAIrF,QACJ,MAAMuF,QAAU,KACd,MAAMvC,SAAWhD,QAASA,QAAUrC,UACpC,GAAIqF,SAAUlD,KAAKrC,iBAAiBuF,WAEtC,MAAM5F,SAAW,KACf,GAAI4C,QAASF,KAAKvC,eAAeyC,QAAS,CAAEsD,SAAUnE,MAAMmE,YACtDnE,MAAMoE,WAAa5F,UAAY,GAAK,CAAE4F,SAAUpE,MAAMoE,aAE9DnI,gBAAgBmK,SAChB/J,MAAM,CAAC,IAAM2D,MAAMmE,SAAU,IAAMnE,MAAMoE,UAAWnG,SAAU,CAAE4H,MAAO,SACvE,MAAM9D,WAAc7D,UAClB,MAAMmI,YAAcrE,cAAgB,aAAe9D,mBAAmB8D,YAAc9D,QAAUM,UAC9F,GAAI6H,OAASxF,QAAS,OACtBuF,UAAWvF,QAAUwF,KAAMpI,YAE7B,MAAO,IAAkBnC,EAAEe,UAAWb,WAAW,CAC/CiG,KAAMtB,KAAK9C,UAAY,OAAS,SAC/B4C,MAAO,CACRf,GAAIM,MAAMN,GAAIE,QAASI,MAAMJ,QAASmC,WACtC,aAAc/B,MAAMX,OAASoB,MAAM,cACnC,aAAc,eAAgB,YAAa,gBACzCF,MACN,IAGF,SAASkG,oBAAoB3G,KAAc4G,OACzC,OAAO7K,gBAAgB,CACrBiE,KAAMC,aAAc,MACpBC,MAAO,CACLX,MAAO,CAAEH,KAAMI,OAAQc,SAAU,MACjCxC,SAAU,CAAEsB,KAAMC,QAASC,QAAS,OACpCM,GAAI,CAAER,KAAM,CAACI,OAAQpC,OAAQyC,UAAoCP,QAAS,UAC1EQ,QAAS,CAAEV,KAAMC,QAASC,QAAS,QAErC,KAAAoB,CAAMR,OAAOS,MAAOF,QAClB,MAAMI,KAAO+F,QAAU,WAAavE,mBAAmBrC,MAAQoG,eAAepG,MAC9E,MAAO,IAAkBhE,EAAEe,UAAWb,WAAWyE,MAAO,CACtDf,GAAIM,MAAMN,GAAIE,QAASI,MAAMJ,QAC7BV,KAAMc,MAAMN,KAAO,SAAW,SAAWlB,UACzCZ,SAAUoC,MAAMpC,UAAY+C,KAAK/C,WACjC,aAAcoC,MAAMX,MACpB,oBAAqB,0EACrB,8BAA+B,GAC/B,aAAcqH,QAAU,WAAa,mBAAqB,eAC1D,YAAa,WACXnG,MACN,GAEJ,QACO,MAAMoG,qCAAwCF,oBAAoB,+BAAgC,mBAClG,MAAMG,iCAAoCH,oBAAoB,2BAA4B","ignoreList":[]}
package/dist/select.d.ts CHANGED
@@ -16,6 +16,9 @@ export interface SelectRootProps extends Omit<PositionOptions, 'arrowPadding'> {
16
16
  readonly name?: string;
17
17
  readonly form?: string;
18
18
  readonly required?: boolean;
19
+ readonly formOptions?: 'all' | 'selected';
20
+ /** Declared mounted IDs; undefined preserves complete-list ARIA publication. */
21
+ readonly renderedItems?: readonly string[] | undefined;
19
22
  readonly textValue?: (id: string) => string;
20
23
  readonly typeaheadTimeoutMs?: number;
21
24
  readonly position?: boolean;
@@ -104,6 +107,14 @@ export declare const SelectRoot: import("vue").DefineComponent<import("vue").Ext
104
107
  type: BooleanConstructor;
105
108
  default: boolean;
106
109
  };
110
+ formOptions: {
111
+ type: PropType<'all' | 'selected'>;
112
+ default: string;
113
+ };
114
+ renderedItems: {
115
+ type: PropType<readonly string[] | undefined>;
116
+ default: undefined;
117
+ };
107
118
  textValue: {
108
119
  type: PropType<SelectTextValueResolver>;
109
120
  default: undefined;
@@ -221,6 +232,14 @@ export declare const SelectRoot: import("vue").DefineComponent<import("vue").Ext
221
232
  type: BooleanConstructor;
222
233
  default: boolean;
223
234
  };
235
+ formOptions: {
236
+ type: PropType<'all' | 'selected'>;
237
+ default: string;
238
+ };
239
+ renderedItems: {
240
+ type: PropType<readonly string[] | undefined>;
241
+ default: undefined;
242
+ };
224
243
  textValue: {
225
244
  type: PropType<SelectTextValueResolver>;
226
245
  default: undefined;
@@ -301,6 +320,8 @@ export declare const SelectRoot: import("vue").DefineComponent<import("vue").Ext
301
320
  name: string;
302
321
  form: string;
303
322
  required: boolean;
323
+ formOptions: "all" | "selected";
324
+ renderedItems: readonly string[] | undefined;
304
325
  textValue: (id: string) => string;
305
326
  typeaheadTimeoutMs: number;
306
327
  position: boolean;
package/dist/select.js CHANGED
@@ -1,2 +1,2 @@
1
- import{Teleport,computed,defineComponent,h,inject,mergeProps,nextTick,onBeforeUnmount,onMounted,provide,shallowRef,watch}from"vue";import{stableIDElementToken}from"@sectile/dom/identity";import{createSelect}from"@sectile/dom/select";import{Primitive}from"./primitive.js";import{visuallyHiddenInputStyle}from"./input/native-input.js";import{hiddenSelectSubmissionCapabilities,useCompositeFormControl}from"./form/control.js";import{useHostId,useHostPortalTarget}from"./host-provider.js";import{usePresence}from"./presence/presence.js";import{conditionalPresenceProps,useConditionalPresenceRegistry}from"./presence/conditional-presence.js";import{reconcileCollectionState}from"./internal/collection.js";import{useControlledStateInvariant}from"./internal/controlled-state.js";const rootKey=Symbol("SectileSelectRoot");const itemKey=Symbol("SectileSelectItem");const partProps={as:{type:[String,Object,Function],default:"span"},asChild:{type:Boolean,default:false}};const SelectRoot=defineComponent({name:"SectileSelectRoot",inheritAttrs:false,props:{items:{type:Array,required:true},modelValue:{type:String,default:void 0},defaultValue:{type:String,default:null},open:{type:Boolean,default:void 0},defaultOpen:{type:Boolean,default:false},disabledItems:{type:Array,default:()=>[]},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false},label:{type:String,default:void 0},name:{type:String,default:void 0},form:{type:String,default:void 0},required:{type:Boolean,default:false},textValue:{type:Function,default:void 0},typeaheadTimeoutMs:{type:Number,default:700},position:{type:Boolean,default:true},side:{type:String,default:"bottom"},align:{type:String,default:"start"},sideOffset:{type:Number,default:8},collisionPadding:{type:[Number,Object],default:8},collisionBoundary:{type:[String,Object],default:void 0},avoidCollisions:{type:Boolean,default:true},hideWhenDetached:{type:Boolean,default:false},strategy:{type:String,default:"absolute"},tracking:{type:String,default:"events"},unmountOnExit:{type:Boolean,default:false},policies:{type:Object,default:void 0},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},emits:{"update:modelValue":_value=>true,"update:open":_value=>true,highlight:_value=>true},slots:Object,setup(props,{attrs,emit,slots}){const root=shallowRef();const trigger=shallowRef();const popup=shallowRef();const submissionElement=shallowRef(null);const participation=useCompositeFormControl({root:()=>root.value??null,focusTarget:()=>trigger.value??root.value??null,submissions:[{element:submissionElement,capabilities:hiddenSelectSubmissionCapabilities}]});const connection=shallowRef();const id=useHostId();const contentID=`sectile-select-${id}-content`;const itemID=value=>`${contentID}-item-${stableIDElementToken(value)}`;const localValue=shallowRef(props.modelValue!==void 0?props.modelValue:props.defaultValue);const localOpen=shallowRef(props.open??props.defaultOpen);const highlighted=shallowRef(localValue.value);const valueControlled=useControlledStateInvariant("SelectRoot","modelValue",()=>props.modelValue);const openControlled=useControlledStateInvariant("SelectRoot","open",()=>props.open);const unmountOnExit=computed(()=>props.unmountOnExit);const position=computed(()=>props.position);const strategy=computed(()=>props.strategy);const state=computed(()=>Object.freeze({value:props.modelValue!==void 0?props.modelValue:localValue.value,highlightedValue:highlighted.value,open:props.open??localOpen.value,disabled:props.disabled,readonly:props.readonly}));const selectedIDSet=computed(()=>{const value=props.modelValue!==void 0?props.modelValue:localValue.value;return value===null?new Set:new Set([value])});const indicatorPresence=useConditionalPresenceRegistry(selectedIDSet);const refresh=()=>{const snapshot=connection.value?.getSnapshot().state;if(snapshot===void 0)return;localValue.value=snapshot.choice.selection.selected[0]??null;highlighted.value=snapshot.choice.cursor.current;localOpen.value=snapshot.open;refreshItems()};const refreshItems=()=>{if(popup.value===void 0||connection.value===void 0)return;popup.value.querySelectorAll("[data-sectile-select-id]").forEach(element=>{const id2=element.dataset["sectileSelectId"];if(id2!==void 0)connection.value?.setItemAttributes(element,id2,props.disabledItems.includes(id2))})};const connect=()=>{connection.value?.disconnect();if(root.value===void 0||trigger.value===void 0||popup.value===void 0)return;const requestedValue=valueControlled?props.modelValue:localValue.value;const reconciled=reconcileCollectionState(props.items,requestedValue===null?[]:[requestedValue],highlighted.value,props.disabledItems,"single",{preserveNullCurrent:true});const value=reconciled.selected[0]??null;localValue.value=value;highlighted.value=reconciled.current;if(valueControlled&&requestedValue!==value)emit("update:modelValue",value);connection.value=createSelect({root:root.value,trigger:trigger.value,popup:popup.value,items:props.items,disabledItems:props.disabledItems,textValue:props.textValue??(value2=>value2),typeaheadTimeoutMs:props.typeaheadTimeoutMs,position:props.position,side:props.side,align:props.align,sideOffset:props.sideOffset,collisionPadding:props.collisionPadding,...props.collisionBoundary===void 0?{}:{collisionBoundary:props.collisionBoundary},avoidCollisions:props.avoidCollisions,hideWhenDetached:props.hideWhenDetached,strategy:props.strategy,tracking:props.tracking,manageVisibility:false,...props.policies===void 0?{}:{policies:props.policies},...valueControlled?{value}:{defaultValue:value},defaultHighlightedValue:reconciled.current,...openControlled?{open:props.open}:{defaultOpen:localOpen.value},disabled:props.disabled,readOnly:props.readonly,...props.label===void 0?{}:{label:props.label},onValueChange:next=>{localValue.value=next;emit("update:modelValue",next)},onHighlightedValueChange:next=>{highlighted.value=next;emit("highlight",next)},onOpenChange:next=>{localOpen.value=next;emit("update:open",next)},onUpdate:refresh});refreshItems();refresh()};let mounted=false;let connectScheduled=false;const scheduleConnect=()=>{if(!mounted||connectScheduled||props.unmountOnExit&&!state.value.open)return;connectScheduled=true;void nextTick(()=>{connectScheduled=false;if(mounted)connect()})};provide(rootKey,{state,unmountOnExit,position,strategy,label:computed(()=>props.label),textValue:computed(()=>props.textValue??(id2=>id2)),contentID,itemID,disabledItems:computed(()=>new Set(props.disabledItems)),indicatorPresence,registerTrigger:element=>{trigger.value=element;if(element===void 0){connection.value?.disconnect();connection.value=void 0}else scheduleConnect()},registerPopup:element=>{popup.value=element;if(element===void 0){connection.value?.disconnect();connection.value=void 0}else scheduleConnect()},registerItem:(element,id2,disabled)=>connection.value?.setItemAttributes(element,id2,disabled),activateTrigger:event=>{if(event?.defaultPrevented===true||connection.value!==void 0||props.disabled||state.value.open)return;if(!openControlled)localOpen.value=true;emit("update:open",true)},refresh:()=>connection.value?.refresh()});onMounted(()=>{mounted=true;connect()});onBeforeUnmount(()=>{mounted=false;connection.value?.disconnect()});watch([()=>props.items,()=>props.disabledItems,()=>props.disabled,()=>props.readonly,()=>props.label,()=>props.textValue,()=>props.typeaheadTimeoutMs,()=>props.position,()=>props.side,()=>props.align,()=>props.sideOffset,()=>props.collisionPadding,()=>props.collisionBoundary,()=>props.avoidCollisions,()=>props.hideWhenDetached,()=>props.strategy,()=>props.tracking,()=>props.policies],connect);watch([()=>props.modelValue,()=>props.open],()=>{if(connection.value===void 0)return;const result=connection.value.syncControlledValues({...valueControlled?{value:props.modelValue}:{},...openControlled?{open:props.open}:{}});if(!result.ok)throw new TypeError(result.error.message);refresh()});return()=>{const visual=h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{root.value=node instanceof HTMLElement?node:void 0;scheduleConnect()},"data-scope":"select","data-part":"root","data-state":state.value.open?"open":"closed"},participation.controlProps.value),{default:()=>slots["default"]?.(state.value)});if(!participation.participating&&props.name===void 0&&props.form===void 0&&!props.required)return visual;return[visual,h("select",{ref:submissionElement,name:props.name,form:props.form,required:props.required,disabled:props.disabled,value:state.value.value??"",tabindex:-1,"aria-hidden":"true",style:visuallyHiddenInputStyle},[h("option",{value:""}),...props.items.map(id2=>h("option",{value:id2,disabled:props.disabledItems.includes(id2)},props.textValue?.(id2)??id2))])]}}});const SelectTrigger=defineComponent({name:"SectileSelectTrigger",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"button"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectTrigger");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.registerTrigger(node instanceof HTMLButtonElement?node:void 0),onClick:root.activateTrigger,type:props.as==="button"?"button":void 0,disabled:root.state.value.disabled,"aria-haspopup":"listbox","aria-expanded":String(root.state.value.open),"aria-controls":root.contentID,"aria-label":root.label.value,"data-scope":"select","data-part":"trigger","data-state":root.state.value.open?"open":"closed"}),{default:()=>slots["default"]?.(root.state.value)})}});const SelectValue=defineComponent({name:"SectileSelectValue",inheritAttrs:false,props:{placeholder:{type:String,default:""},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectValue");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"value","data-placeholder":root.state.value.value===null?"":void 0}),{default:()=>slots["default"]?.(root.state.value)??(root.state.value.value===null?props.placeholder:root.textValue.value(root.state.value.value))})}});const SelectContent=defineComponent({name:"SectileSelectContent",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectContent");const element=shallowRef();const open=computed(()=>root.state.value.open);const present=usePresence(open,element);watch(present,async()=>{await nextTick();root.refresh()},{flush:"post"});return()=>{if(root.unmountOnExit.value&&!present.value)return null;const exiting=!root.state.value.open&&present.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{const content=node instanceof HTMLElement?node:void 0;element.value=content;root.registerPopup(content)},id:root.contentID,role:"listbox",hidden:!present.value,"aria-label":root.label.value,...exiting?{inert:true,"aria-hidden":"true"}:{},style:root.position.value?{position:root.strategy.value,visibility:element.value===void 0?"hidden":void 0}:void 0,"aria-activedescendant":root.state.value.highlightedValue===null?void 0:root.itemID(root.state.value.highlightedValue),"data-scope":"select","data-part":"content","data-state":root.state.value.open?"open":"closed"}),{default:()=>slots["default"]?.(root.state.value)})}}});const SelectItem=defineComponent({name:"SectileSelectItem",inheritAttrs:false,props:{value:{type:String,required:true},disabled:{type:Boolean,default:false},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectItem");const state=computed(()=>({value:props.value,selected:root.state.value.value===props.value,highlighted:root.state.value.highlightedValue===props.value,disabled:root.state.value.disabled||props.disabled||root.disabledItems.value.has(props.value)}));provide(itemKey,{state});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{if(node instanceof HTMLElement)root.registerItem(node,props.value,state.value.disabled)},id:root.itemID(props.value),role:"option","aria-selected":String(state.value.selected),"aria-disabled":state.value.disabled?"true":void 0,"data-sectile-select-id":props.value,"data-scope":"select","data-part":"item","data-selected":state.value.selected?"":void 0,"data-highlighted":state.value.highlighted?"":void 0}),{default:()=>slots["default"]?.(state.value)})}});const SelectItemIndicator=defineComponent({name:"SectileSelectItemIndicator",inheritAttrs:false,props:{...partProps,...conditionalPresenceProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectItemIndicator");const item=useItem("SelectItemIndicator");return()=>{const state=item.state.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>root.indicatorPresence.register(state.value,element),hidden:!root.indicatorPresence.isPresent(state.value,state.selected,props.forcePresent),"aria-hidden":"true","data-scope":"select","data-part":"item-indicator","data-state":state.selected?"checked":"unchecked"}),{default:()=>slots["default"]?.(state)})}}});const SelectViewport=defineComponent({name:"SectileSelectViewport",inheritAttrs:false,props:{...partProps,as:{...partProps.as,default:"div"}},setup(props,{attrs,slots}){useRoot("SelectViewport");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"viewport"}),slots)}});const SelectItemText=defineComponent({name:"SectileSelectItemText",inheritAttrs:false,props:partProps,setup(props,{attrs,slots}){useItem("SelectItemText");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"item-text"}),slots)}});const SelectPortal=defineComponent({name:"SectileSelectPortal",inheritAttrs:false,props:{to:{type:[String,Object],default:void 0},disabled:{type:Boolean,default:false},defer:{type:Boolean,default:false}},setup(props,{slots}){useRoot("SelectPortal");const portalTarget=useHostPortalTarget();return()=>h(Teleport,{to:props.to??portalTarget.value??"body",disabled:props.disabled,defer:props.defer},slots["default"]?.())}});function useRoot(part){const root=inject(rootKey);if(root===void 0)throw new TypeError(`${part} must be used inside SelectRoot.`);return root}function useItem(part){const item=inject(itemKey);if(item===void 0)throw new TypeError(`${part} must be used inside SelectItem.`);return item}export{SelectContent,SelectItem,SelectItemIndicator,SelectItemText,SelectPortal,SelectRoot,SelectTrigger,SelectValue,SelectViewport};
1
+ import{computed,defineComponent,h,inject,mergeProps,nextTick,onBeforeUnmount,onMounted,provide,shallowRef,watch}from"vue";import{stableIDElementToken}from"@sectile/dom/identity";import{createSelect}from"@sectile/dom/select";import{Primitive}from"./primitive.js";import{useNextTickTask}from"./internal/scheduled-task.js";import{visuallyHiddenInputStyle}from"./input/native-input.js";import{compositeControlCapabilities,hiddenSelectSubmissionCapabilities,useFormControl,useFormFieldDefaults,useFormMetadataPresence,useFormSubmissionProps,useFormControlFlags}from"./form/control.js";import{HostPortal,provideHostLayerParent,useHostId}from"./host-provider.js";import{usePresence}from"./presence/presence.js";import{conditionalPresenceProps,useConditionalPresenceRegistry}from"./presence/conditional-presence.js";import{reconcileCollectionState}from"./internal/collection.js";import{useControlledStateInvariant}from"./internal/controlled-state.js";import{usePopupPresentation}from"./internal/popup-presentation.js";const rootKey=Symbol("SectileSelectRoot");const itemKey=Symbol("SectileSelectItem");const partProps={as:{type:[String,Object,Function],default:"span"},asChild:{type:Boolean,default:false}};const SelectRoot=defineComponent({__sectileFormLabelMode:"for",name:"SectileSelectRoot",inheritAttrs:false,props:{items:{type:Array,required:true},modelValue:{type:String,default:void 0},defaultValue:{type:String,default:null},open:{type:Boolean,default:void 0},defaultOpen:{type:Boolean,default:false},disabledItems:{type:Array,default:()=>[]},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false},label:{type:String,default:void 0},name:{type:String,default:void 0},form:{type:String,default:void 0},required:{type:Boolean,default:false},formOptions:{type:String,default:"all"},renderedItems:{type:Array,default:void 0},textValue:{type:Function,default:void 0},typeaheadTimeoutMs:{type:Number,default:700},position:{type:Boolean,default:true},side:{type:String,default:"bottom"},align:{type:String,default:"start"},sideOffset:{type:Number,default:8},collisionPadding:{type:[Number,Object],default:8},collisionBoundary:{type:[String,Object],default:void 0},avoidCollisions:{type:Boolean,default:true},hideWhenDetached:{type:Boolean,default:false},strategy:{type:String,default:"absolute"},tracking:{type:String,default:"events"},unmountOnExit:{type:Boolean,default:false},policies:{type:Object,default:void 0},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},emits:{"update:modelValue":_value=>true,"update:open":_value=>true,highlight:_value=>true},slots:Object,setup(props,{attrs,emit,slots}){const flags=useFormControlFlags(props);const initialValue=props.defaultValue,initialOpen=props.defaultOpen;let resetPending=false;const resetRevision=shallowRef(0);const root=shallowRef();const trigger=shallowRef();const popup=shallowRef();const submissionElement=shallowRef(null);const fieldDefaults=useFormFieldDefaults();const explicitSubmission=useFormMetadataPresence();const submission={element:submissionElement,capabilities:hiddenSelectSubmissionCapabilities,get explicit(){return explicitSubmission.value}};const submissionProps=useFormSubmissionProps(submission,props);const connection=shallowRef();const id=useHostId();const contentID=`sectile-select-${id}-content`;const itemID=value=>`${contentID}-item-${stableIDElementToken(value)}`;const localValue=shallowRef(props.modelValue!==void 0?props.modelValue:props.defaultValue);const localOpen=shallowRef(props.open??props.defaultOpen);const highlighted=shallowRef(localValue.value);const valueControlled=useControlledStateInvariant("SelectRoot","modelValue",()=>props.modelValue);const openControlled=useControlledStateInvariant("SelectRoot","open",()=>props.open);const unmountOnExit=computed(()=>props.unmountOnExit);const position=computed(()=>props.position);const strategy=computed(()=>props.strategy);const state=computed(()=>Object.freeze({value:props.modelValue!==void 0?props.modelValue:localValue.value,highlightedValue:highlighted.value,open:props.open??localOpen.value,disabled:flags.value.disabled,readonly:flags.value.readonly}));const disabledIDs=computed(()=>new Set(props.disabledItems));const renderedItems=computed(()=>{const ids=props.renderedItems;if(ids===void 0)return void 0;if(!Array.isArray(ids)||ids.some(id2=>typeof id2!=="string"))throw new TypeError("SelectRoot renderedItems requires an array of IDs.");return ids});const selectedFormItems=computed(()=>{const value=props.modelValue!==void 0?props.modelValue:localValue.value;return value===null||!props.items.includes(value)?[]:[value]});const lifecycle=usePopupPresentation({connection,open:computed(()=>state.value.open),connect:()=>connect(),refresh:()=>refresh(),trackLayerHost:true});const{active,presentation,availability}=lifecycle;const formControl={element:()=>root.value??null,semanticControl:()=>trigger.value??null,labelMode:"for",capabilities:compositeControlCapabilities,focusTarget:()=>active.value?trigger.value??root.value??null:null,validationTarget:()=>active.value?root.value??null:null,submissions:[submission],reset:()=>{if(resetPending)return;resetPending=true;queueMicrotask(()=>{resetPending=false;if(!mounted)return;disconnect();const requested=valueControlled?props.modelValue:initialValue;const reconciled=reconcileCollectionState(props.items,requested===null?[]:[requested],requested,props.disabledItems,"single",{preserveNullCurrent:true});localValue.value=reconciled.selected[0]??null;localOpen.value=openControlled?props.open:initialOpen;highlighted.value=reconciled.current;resetRevision.value++;lifecycle.reconnect()})}};const selectedIDSet=computed(()=>{const value=props.modelValue!==void 0?props.modelValue:localValue.value;return value===null?new Set:new Set([value])});const indicatorPresence=useConditionalPresenceRegistry(selectedIDSet);const refresh=()=>{const snapshot=connection.value?.getSnapshot().state;if(snapshot===void 0)return;localValue.value=snapshot.choice.selection.selected[0]??null;highlighted.value=snapshot.choice.cursor.current;localOpen.value=snapshot.open;lifecycle.update();refreshItems()};const refreshItems=()=>{if(popup.value===void 0||connection.value===void 0)return;popup.value.querySelectorAll("[data-sectile-select-id]").forEach(element=>{const id2=element.dataset["sectileSelectId"];if(id2!==void 0)connection.value?.setItemAttributes(element,id2,disabledIDs.value.has(id2))})};const disconnect=()=>{lifecycle.release();try{connection.value?.disconnect()}finally{connection.value=void 0}};const connect=()=>{disconnect();if(root.value===void 0||trigger.value===void 0||popup.value===void 0)return;const requestedValue=valueControlled?props.modelValue:localValue.value;const reconciled=reconcileCollectionState(props.items,requestedValue===null?[]:[requestedValue],highlighted.value,props.disabledItems,"single",{preserveNullCurrent:true});const value=reconciled.selected[0]??null;localValue.value=value;highlighted.value=reconciled.current;if(valueControlled&&requestedValue!==value)emit("update:modelValue",value);connection.value=createSelect({...lifecycle.layerHost.value===void 0?{}:{layerHost:lifecycle.layerHost.value},root:root.value,trigger:trigger.value,popup:popup.value,items:props.items,disabledItems:props.disabledItems,textValue:props.textValue??(value2=>value2),typeaheadTimeoutMs:props.typeaheadTimeoutMs,position:props.position,side:props.side,align:props.align,sideOffset:props.sideOffset,collisionPadding:props.collisionPadding,...props.collisionBoundary===void 0?{}:{collisionBoundary:props.collisionBoundary},avoidCollisions:props.avoidCollisions,hideWhenDetached:props.hideWhenDetached,strategy:props.strategy,tracking:props.tracking,manageVisibility:false,...props.policies===void 0?{}:{policies:props.policies},...valueControlled?{value}:{defaultValue:value},defaultHighlightedValue:reconciled.current,...openControlled?{open:props.open}:{defaultOpen:localOpen.value},disabled:flags.value.disabled,readOnly:flags.value.readonly,...props.label===void 0?{}:{label:props.label},onValueChange:next=>{localValue.value=next;emit("update:modelValue",next)},onHighlightedValueChange:next=>{highlighted.value=next;emit("highlight",next)},onOpenChange:next=>{if(!openControlled)localOpen.value=next;emit("update:open",next)},onUpdate:refresh});refreshItems();refresh()};let mounted=false;let connectScheduled=false;const scheduleConnect=()=>{if(!mounted||!availability.value||connectScheduled||props.unmountOnExit&&!state.value.open)return;connectScheduled=true;void nextTick(()=>{connectScheduled=false;if(mounted&&availability.value)lifecycle.reconnect()})};provide(rootKey,{formControl,resetRevision,state,active,presentation,unmountOnExit,position,strategy,label:computed(()=>props.label),textValue:computed(()=>props.textValue??(id2=>id2)),contentID,itemID,disabledItems:disabledIDs,isItemRendered:id2=>renderedItems.value?.includes(id2)??true,indicatorPresence,registerPresence:lifecycle.registerPresence,registerTrigger:element=>{if(trigger.value===element)return;trigger.value=element;if(!availability.value){lifecycle.invalidate();return}if(element===void 0){disconnect()}else scheduleConnect()},registerPopup:element=>{if(popup.value===element)return;popup.value=element;if(!availability.value){lifecycle.invalidate();return}if(element===void 0){disconnect()}else scheduleConnect()},registerItem:(element,id2,disabled)=>connection.value?.setItemAttributes(element,id2,disabled),activateTrigger:event=>{if(!lifecycle.mayOpen()||event?.defaultPrevented===true||connection.value!==void 0||flags.value.disabled||state.value.open)return;if(!openControlled)localOpen.value=true;emit("update:open",true)},refresh:()=>connection.value?.refresh()});onMounted(()=>{mounted=true;lifecycle.reconnect()});onBeforeUnmount(()=>{mounted=false;disconnect()});watch([()=>props.items,()=>props.disabledItems,()=>flags.value.disabled,()=>flags.value.readonly,()=>props.label,()=>props.textValue,()=>props.typeaheadTimeoutMs,()=>props.position,()=>props.side,()=>props.align,()=>props.sideOffset,()=>props.collisionPadding,()=>props.collisionBoundary,()=>props.avoidCollisions,()=>props.hideWhenDetached,()=>props.strategy,()=>props.tracking,()=>props.policies],lifecycle.reconnect);watch([()=>props.modelValue,()=>props.open],()=>{lifecycle.prepareModelUpdate();if(connection.value===void 0)return;const result=connection.value.syncControlledValues({...valueControlled?{value:props.modelValue}:{},...openControlled?{open:props.open}:{}});if(!result.ok)throw new TypeError(result.error.message);refresh()});return()=>{if(props.formOptions!=="all"&&props.formOptions!=="selected")throw new TypeError("SelectRoot formOptions requires all or selected.");const visual=h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{const element=node instanceof HTMLElement?node:void 0;if(root.value===element)return;root.value=element;if(!availability.value)lifecycle.invalidate();else scheduleConnect()},"data-scope":"select","data-part":"root","data-state":state.value.open?"open":"closed"}),{default:()=>slots["default"]?.(state.value)});if(fieldDefaults===void 0&&props.name===void 0&&props.form===void 0&&!props.required)return visual;return[visual,h("select",{ref:submissionElement,...submissionProps.value,value:state.value.value??"",tabindex:-1,"aria-hidden":"true",style:visuallyHiddenInputStyle},[h("option",{value:"",selected:state.value.value===null}),...(props.formOptions==="selected"?selectedFormItems.value:props.items).map(id2=>h("option",{value:id2,selected:state.value.value===id2,disabled:disabledIDs.value.has(id2)},props.textValue?.(id2)??id2))])]}}});const SelectTrigger=defineComponent({name:"SectileSelectTrigger",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"button"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectTrigger");const participation=useFormControl(root.formControl);let baselinePending=false;const valueTask=useNextTickTask(()=>{participation.refreshValue?.(baselinePending?"baseline":"value");baselinePending=false});watch([()=>root.state.value.value,root.resetRevision],(value,previous)=>{baselinePending||=value[1]!==previous[1];valueTask.schedule()},{flush:"post"});return()=>h(Primitive,mergeProps(participation.controlProps.value,attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.registerTrigger(node instanceof HTMLButtonElement?node:void 0),onClick:root.activateTrigger,type:props.as==="button"?"button":void 0,disabled:root.state.value.disabled,"aria-haspopup":"listbox","aria-expanded":String(root.state.value.open),"aria-controls":root.contentID,"aria-label":root.label.value,"data-scope":"select","data-part":"trigger","data-state":root.state.value.open?"open":"closed"}),{default:()=>slots["default"]?.(root.state.value)})}});const SelectValue=defineComponent({name:"SectileSelectValue",inheritAttrs:false,props:{placeholder:{type:String,default:""},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectValue");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"value","data-placeholder":root.state.value.value===null?"":void 0}),{default:()=>slots["default"]?.(root.state.value)??(root.state.value.value===null?props.placeholder:root.textValue.value(root.state.value.value))})}});const SelectContent=defineComponent({name:"SectileSelectContent",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectContent");const element=shallowRef();const open=computed(()=>root.state.value.open);provideHostLayerParent({element,open,presentation:root.presentation,active:root.active});const present=usePresence(open,element,void 0,root.active);onBeforeUnmount(root.registerPresence(present));watch(present,async()=>{await nextTick();root.refresh()},{flush:"post"});return()=>{if(root.unmountOnExit.value&&!present.value)return null;const exiting=!root.state.value.open&&present.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{const content=node instanceof HTMLElement?node:void 0;element.value=content;root.registerPopup(content)},id:root.contentID,role:"listbox",hidden:!root.active.value||!present.value,"aria-label":root.label.value,...exiting||!root.active.value?{inert:true,"aria-hidden":"true"}:{},style:root.position.value?{position:root.strategy.value,visibility:element.value===void 0?"hidden":void 0}:void 0,"aria-activedescendant":root.state.value.highlightedValue===null||!root.isItemRendered(root.state.value.highlightedValue)?void 0:root.itemID(root.state.value.highlightedValue),"data-scope":"select","data-part":"content","data-state":root.state.value.open?"open":"closed"}),{default:()=>slots["default"]?.(root.state.value)})}}});const SelectItem=defineComponent({name:"SectileSelectItem",inheritAttrs:false,props:{value:{type:String,required:true},disabled:{type:Boolean,default:false},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectItem");const state=computed(()=>({value:props.value,selected:root.state.value.value===props.value,highlighted:root.state.value.highlightedValue===props.value,disabled:root.state.value.disabled||props.disabled||root.disabledItems.value.has(props.value)}));provide(itemKey,{state});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{if(node instanceof HTMLElement)root.registerItem(node,props.value,state.value.disabled)},id:root.itemID(props.value),role:"option","aria-selected":String(state.value.selected),"aria-disabled":state.value.disabled?"true":void 0,"data-sectile-select-id":props.value,"data-scope":"select","data-part":"item","data-selected":state.value.selected?"":void 0,"data-highlighted":state.value.highlighted?"":void 0}),{default:()=>slots["default"]?.(state.value)})}});const SelectItemIndicator=defineComponent({name:"SectileSelectItemIndicator",inheritAttrs:false,props:{...partProps,...conditionalPresenceProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectItemIndicator");const item=useItem("SelectItemIndicator");return()=>{const state=item.state.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>root.indicatorPresence.register(state.value,element),hidden:!root.indicatorPresence.isPresent(state.value,state.selected,props.forcePresent),"aria-hidden":"true","data-scope":"select","data-part":"item-indicator","data-state":state.selected?"checked":"unchecked"}),{default:()=>slots["default"]?.(state)})}}});const SelectViewport=defineComponent({name:"SectileSelectViewport",inheritAttrs:false,props:{...partProps,as:{...partProps.as,default:"div"}},setup(props,{attrs,slots}){useRoot("SelectViewport");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"viewport"}),slots)}});const SelectItemText=defineComponent({name:"SectileSelectItemText",inheritAttrs:false,props:partProps,setup(props,{attrs,slots}){useItem("SelectItemText");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"item-text"}),slots)}});const SelectPortal=defineComponent({name:"SectileSelectPortal",inheritAttrs:false,props:{to:{type:[String,Object],default:void 0},disabled:{type:Boolean,default:false},defer:{type:Boolean,default:false}},setup(props,{slots}){useRoot("SelectPortal");return()=>h(HostPortal,props,slots)}});function useRoot(part){const root=inject(rootKey);if(root===void 0)throw new TypeError(`${part} must be used inside SelectRoot.`);return root}function useItem(part){const item=inject(itemKey);if(item===void 0)throw new TypeError(`${part} must be used inside SelectItem.`);return item}export{SelectContent,SelectItem,SelectItemIndicator,SelectItemText,SelectPortal,SelectRoot,SelectTrigger,SelectValue,SelectViewport};
2
2
  //# sourceMappingURL=select.js.map