@sectile/vue 0.18.3 → 0.20.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 (286) hide show
  1. package/README.md +127 -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 +33 -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 +16 -7
  81. package/dist/input/native-range-field.js +1 -1
  82. package/dist/input/native-range-field.js.map +1 -1
  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/popup-presentation.d.ts +32 -0
  89. package/dist/internal/popup-presentation.js +2 -0
  90. package/dist/internal/popup-presentation.js.map +1 -0
  91. package/dist/internal/portal-move.d.ts +11 -0
  92. package/dist/internal/portal-move.js +2 -0
  93. package/dist/internal/portal-move.js.map +1 -0
  94. package/dist/internal/scheduled-task.js +1 -1
  95. package/dist/internal/scheduled-task.js.map +1 -1
  96. package/dist/internal/tabs-context.d.ts +11 -0
  97. package/dist/internal/tabs-context.js +1 -1
  98. package/dist/internal/tabs-context.js.map +1 -1
  99. package/dist/internal/tree-parts.d.ts +142 -0
  100. package/dist/internal/tree-parts.js +2 -0
  101. package/dist/internal/tree-parts.js.map +1 -0
  102. package/dist/listbox.d.ts +11 -0
  103. package/dist/listbox.js +1 -1
  104. package/dist/listbox.js.map +1 -1
  105. package/dist/media-gesture.d.ts +20 -0
  106. package/dist/media-gesture.js +2 -0
  107. package/dist/media-gesture.js.map +1 -0
  108. package/dist/menu.d.ts +239 -0
  109. package/dist/menu.js +1 -1
  110. package/dist/menu.js.map +1 -1
  111. package/dist/meter-group.js +1 -1
  112. package/dist/meter-group.js.map +1 -1
  113. package/dist/multi-thumb-slider.js +1 -1
  114. package/dist/multi-thumb-slider.js.map +1 -1
  115. package/dist/number-field.d.ts +18 -1
  116. package/dist/number-field.js +1 -1
  117. package/dist/number-field.js.map +1 -1
  118. package/dist/overlay/dialog.d.ts +1 -0
  119. package/dist/overlay/dialog.js.map +1 -1
  120. package/dist/overlay/drawer.d.ts +33 -4
  121. package/dist/overlay/drawer.js +1 -1
  122. package/dist/overlay/drawer.js.map +1 -1
  123. package/dist/overlay/popover.d.ts +2 -1
  124. package/dist/overlay/popover.js.map +1 -1
  125. package/dist/overlay/popup.d.ts +50 -2
  126. package/dist/overlay/popup.js +1 -1
  127. package/dist/overlay/popup.js.map +1 -1
  128. package/dist/overlay/tooltip.d.ts +38 -3
  129. package/dist/overlay/tooltip.js +1 -1
  130. package/dist/overlay/tooltip.js.map +1 -1
  131. package/dist/pagination.js +1 -1
  132. package/dist/pagination.js.map +1 -1
  133. package/dist/pin-input.js +1 -1
  134. package/dist/pin-input.js.map +1 -1
  135. package/dist/presence/presence.d.ts +1 -1
  136. package/dist/presence/presence.js +1 -1
  137. package/dist/presence/presence.js.map +1 -1
  138. package/dist/primitive.d.ts +37 -3
  139. package/dist/primitive.js +1 -1
  140. package/dist/primitive.js.map +1 -1
  141. package/dist/quantity-field.js +1 -1
  142. package/dist/quantity-field.js.map +1 -1
  143. package/dist/radio-group.js +1 -1
  144. package/dist/radio-group.js.map +1 -1
  145. package/dist/rating.js +1 -1
  146. package/dist/rating.js.map +1 -1
  147. package/dist/reorder.d.ts +169 -77
  148. package/dist/reorder.js +1 -1
  149. package/dist/reorder.js.map +1 -1
  150. package/dist/select.d.ts +21 -0
  151. package/dist/select.js +1 -1
  152. package/dist/select.js.map +1 -1
  153. package/dist/slider.js +1 -1
  154. package/dist/slider.js.map +1 -1
  155. package/dist/spin-button.d.ts +19 -0
  156. package/dist/spin-button.js +1 -1
  157. package/dist/spin-button.js.map +1 -1
  158. package/dist/stepper.js +1 -1
  159. package/dist/stepper.js.map +1 -1
  160. package/dist/switch.js +1 -1
  161. package/dist/switch.js.map +1 -1
  162. package/dist/tabs.d.ts +2 -0
  163. package/dist/tabs.js +1 -1
  164. package/dist/tabs.js.map +1 -1
  165. package/dist/tabular/components.d.ts +5 -0
  166. package/dist/tabular/components.js.map +1 -1
  167. package/dist/tabular/controller.d.ts +1 -0
  168. package/dist/tabular/controller.js +1 -1
  169. package/dist/tabular/controller.js.map +1 -1
  170. package/dist/tabular/data-grid.d.ts +4 -4
  171. package/dist/tabular/data-grid.js +1 -1
  172. package/dist/tabular/data-grid.js.map +1 -1
  173. package/dist/tabular/data-table.d.ts +4 -4
  174. package/dist/tabular/data-table.js +1 -1
  175. package/dist/tabular/data-table.js.map +1 -1
  176. package/dist/tabular/data-tree-grid.d.ts +4 -4
  177. package/dist/tabular/data-tree-grid.js +1 -1
  178. package/dist/tabular/data-tree-grid.js.map +1 -1
  179. package/dist/tabular/parts.d.ts +11 -1
  180. package/dist/tabular/parts.js +1 -1
  181. package/dist/tabular/parts.js.map +1 -1
  182. package/dist/tags-input.d.ts +12 -1
  183. package/dist/tags-input.js +1 -1
  184. package/dist/tags-input.js.map +1 -1
  185. package/dist/temporal/calendar.d.ts +15 -111
  186. package/dist/temporal/calendar.js +1 -1
  187. package/dist/temporal/calendar.js.map +1 -1
  188. package/dist/temporal/capabilities/date-picker.js +1 -1
  189. package/dist/temporal/capabilities/date-picker.js.map +1 -1
  190. package/dist/temporal/capabilities/date-time-picker.js +1 -1
  191. package/dist/temporal/capabilities/date-time-picker.js.map +1 -1
  192. package/dist/temporal/capabilities/date-time-range-picker.js +1 -1
  193. package/dist/temporal/capabilities/date-time-range-picker.js.map +1 -1
  194. package/dist/temporal/capability.d.ts +13 -1
  195. package/dist/temporal/capability.js.map +1 -1
  196. package/dist/temporal/date-field.d.ts +1 -1
  197. package/dist/temporal/date-field.js +1 -1
  198. package/dist/temporal/date-field.js.map +1 -1
  199. package/dist/temporal/date-picker.d.ts +3 -1
  200. package/dist/temporal/date-picker.js.map +1 -1
  201. package/dist/temporal/date-range-field.d.ts +20 -0
  202. package/dist/temporal/date-range-field.js +1 -1
  203. package/dist/temporal/date-range-field.js.map +1 -1
  204. package/dist/temporal/date-range-picker.d.ts +3 -1
  205. package/dist/temporal/date-range-picker.js.map +1 -1
  206. package/dist/temporal/date-time-field.d.ts +4 -1
  207. package/dist/temporal/date-time-field.js +1 -1
  208. package/dist/temporal/date-time-field.js.map +1 -1
  209. package/dist/temporal/date-time-picker.d.ts +3 -1
  210. package/dist/temporal/date-time-picker.js +1 -1
  211. package/dist/temporal/date-time-picker.js.map +1 -1
  212. package/dist/temporal/date-time-range-field.d.ts +158 -0
  213. package/dist/temporal/date-time-range-field.js +2 -0
  214. package/dist/temporal/date-time-range-field.js.map +1 -0
  215. package/dist/temporal/date-time-range-picker.d.ts +3 -1
  216. package/dist/temporal/date-time-range-picker.js +1 -1
  217. package/dist/temporal/date-time-range-picker.js.map +1 -1
  218. package/dist/temporal/internal/time-presentation.d.ts +15 -0
  219. package/dist/temporal/internal/time-presentation.js +2 -0
  220. package/dist/temporal/internal/time-presentation.js.map +1 -0
  221. package/dist/temporal/month-picker.d.ts +3 -1
  222. package/dist/temporal/month-picker.js.map +1 -1
  223. package/dist/temporal/month-range-picker.d.ts +3 -1
  224. package/dist/temporal/month-range-picker.js.map +1 -1
  225. package/dist/temporal/picker.d.ts +23 -1
  226. package/dist/temporal/picker.js +1 -1
  227. package/dist/temporal/picker.js.map +1 -1
  228. package/dist/temporal/range-calendar.d.ts +119 -2
  229. package/dist/temporal/range-calendar.js +1 -1
  230. package/dist/temporal/range-calendar.js.map +1 -1
  231. package/dist/temporal/temporal-provider.d.ts +23 -0
  232. package/dist/temporal/temporal-provider.js +1 -1
  233. package/dist/temporal/temporal-provider.js.map +1 -1
  234. package/dist/temporal/time-field.d.ts +4 -1
  235. package/dist/temporal/time-field.js +1 -1
  236. package/dist/temporal/time-field.js.map +1 -1
  237. package/dist/temporal/time-picker.d.ts +112 -0
  238. package/dist/temporal/time-picker.js +2 -0
  239. package/dist/temporal/time-picker.js.map +1 -0
  240. package/dist/temporal/time-range-field.d.ts +32 -1
  241. package/dist/temporal/time-range-field.js +1 -1
  242. package/dist/temporal/time-range-field.js.map +1 -1
  243. package/dist/temporal/year-picker.d.ts +3 -1
  244. package/dist/temporal/year-picker.js.map +1 -1
  245. package/dist/temporal/year-range-picker.d.ts +3 -1
  246. package/dist/temporal/year-range-picker.js.map +1 -1
  247. package/dist/text.d.ts +43 -1
  248. package/dist/text.js +1 -1
  249. package/dist/text.js.map +1 -1
  250. package/dist/timer.d.ts +16 -5
  251. package/dist/timer.js +1 -1
  252. package/dist/timer.js.map +1 -1
  253. package/dist/toast.js +1 -1
  254. package/dist/toast.js.map +1 -1
  255. package/dist/toggle-group.js +1 -1
  256. package/dist/toggle-group.js.map +1 -1
  257. package/dist/toolbar.js +1 -1
  258. package/dist/toolbar.js.map +1 -1
  259. package/dist/transfer.d.ts +191 -0
  260. package/dist/transfer.js +2 -0
  261. package/dist/transfer.js.map +1 -0
  262. package/dist/tree-grid.d.ts +122 -0
  263. package/dist/tree-grid.js +1 -1
  264. package/dist/tree-grid.js.map +1 -1
  265. package/dist/tree-select.d.ts +186 -0
  266. package/dist/tree-select.js +2 -0
  267. package/dist/tree-select.js.map +1 -0
  268. package/dist/tree-view.js +1 -1
  269. package/dist/tree-view.js.map +1 -1
  270. package/dist/virtual/virtual-collection.d.ts +2 -0
  271. package/dist/virtual/virtual-collection.js.map +1 -1
  272. package/dist/virtual/virtual-grid.d.ts +12 -2
  273. package/dist/virtual/virtual-grid.js +1 -1
  274. package/dist/virtual/virtual-grid.js.map +1 -1
  275. package/dist/virtual/virtual-list.d.ts +12 -3
  276. package/dist/virtual/virtual-list.js +1 -1
  277. package/dist/virtual/virtual-list.js.map +1 -1
  278. package/dist/virtual/virtual-masonry.d.ts +12 -2
  279. package/dist/virtual/virtual-masonry.js +1 -1
  280. package/dist/virtual/virtual-masonry.js.map +1 -1
  281. package/dist/virtual/virtual-spatial.d.ts +12 -2
  282. package/dist/virtual/virtual-spatial.js +1 -1
  283. package/dist/virtual/virtual-spatial.js.map +1 -1
  284. package/dist/window-splitter.js +1 -1
  285. package/dist/window-splitter.js.map +1 -1
  286. package/package.json +88 -17
package/dist/menu.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { type PropType, type SlotsType, type VNodeChild } from 'vue';
2
2
  import { type MenuItemDefinition, type MenuPolicies } from '@sectile/dom/menu';
3
+ import { type MenuModel } from '@sectile/core/menu';
4
+ import type { DOMLayerPresentationSnapshot } from '@sectile/dom/dialog';
3
5
  import type { PositionBoundary, PositionOptions, PositionPadding, PositionStrategy, PositionTracking } from '@sectile/dom/position';
4
6
  import { type PrimitiveAs } from './primitive.js';
5
7
  export interface MenuRootProps {
@@ -19,11 +21,15 @@ export interface MenuButtonRootProps extends MenuRootProps, Omit<PositionOptions
19
21
  readonly defaultOpen?: boolean;
20
22
  readonly position?: boolean;
21
23
  }
24
+ export interface ContextMenuRootProps extends Omit<MenuButtonRootProps, 'as' | 'asChild'> {
25
+ }
22
26
  export interface MenuRootSlotProps {
23
27
  readonly open: boolean;
24
28
  readonly highlightedValue: string | null;
25
29
  readonly openPath: readonly string[];
26
30
  readonly disabled: boolean;
31
+ readonly model: MenuModel<string>;
32
+ readonly presentation: DOMLayerPresentationSnapshot | undefined;
27
33
  }
28
34
  export interface MenuItemProps {
29
35
  readonly value: string;
@@ -36,6 +42,7 @@ export interface MenuItemSlotProps {
36
42
  readonly highlighted: boolean;
37
43
  readonly open: boolean;
38
44
  readonly disabled: boolean;
45
+ readonly branch: boolean;
39
46
  }
40
47
  export interface MenuSubContentProps {
41
48
  readonly for: string;
@@ -522,6 +529,188 @@ export declare const MenuButtonRoot: import("vue").DefineComponent<import("vue")
522
529
  }, SlotsType<{
523
530
  default: (props: MenuRootSlotProps) => VNodeChild;
524
531
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
532
+ export declare const ContextMenuRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
533
+ readonly items: {
534
+ readonly type: PropType<readonly MenuItemDefinition<string>[]>;
535
+ readonly required: true;
536
+ };
537
+ readonly disabledItems: {
538
+ readonly type: PropType<readonly string[]>;
539
+ readonly default: () => never[];
540
+ };
541
+ readonly disabled: {
542
+ readonly type: BooleanConstructor;
543
+ readonly default: false;
544
+ };
545
+ readonly defaultHighlightedValue: {
546
+ readonly type: PropType<string | null>;
547
+ readonly default: null;
548
+ };
549
+ readonly label: {
550
+ readonly type: StringConstructor;
551
+ readonly default: undefined;
552
+ };
553
+ readonly textValue: {
554
+ readonly type: PropType<MenuTextValueResolver>;
555
+ readonly default: undefined;
556
+ };
557
+ readonly policies: {
558
+ readonly type: PropType<MenuPolicies<string>>;
559
+ readonly default: undefined;
560
+ };
561
+ readonly open: {
562
+ readonly type: BooleanConstructor;
563
+ readonly default: undefined;
564
+ };
565
+ readonly defaultOpen: {
566
+ readonly type: BooleanConstructor;
567
+ readonly default: false;
568
+ };
569
+ readonly position: {
570
+ readonly type: BooleanConstructor;
571
+ readonly default: true;
572
+ };
573
+ readonly side: {
574
+ readonly type: PropType<'top' | 'right' | 'bottom' | 'left'>;
575
+ readonly default: 'bottom';
576
+ };
577
+ readonly collisionPadding: {
578
+ readonly type: PropType<PositionPadding>;
579
+ readonly default: 8;
580
+ };
581
+ readonly collisionBoundary: {
582
+ readonly type: PropType<PositionBoundary>;
583
+ readonly default: undefined;
584
+ };
585
+ readonly avoidCollisions: {
586
+ readonly type: BooleanConstructor;
587
+ readonly default: true;
588
+ };
589
+ readonly hideWhenDetached: {
590
+ readonly type: BooleanConstructor;
591
+ readonly default: false;
592
+ };
593
+ readonly tracking: {
594
+ readonly type: PropType<PositionTracking>;
595
+ readonly default: 'events';
596
+ };
597
+ readonly align: {
598
+ readonly type: PropType<'start' | 'center' | 'end'>;
599
+ readonly default: undefined;
600
+ };
601
+ readonly sideOffset: {
602
+ readonly type: NumberConstructor;
603
+ readonly default: 0;
604
+ };
605
+ readonly strategy: {
606
+ readonly type: PropType<PositionStrategy>;
607
+ readonly default: 'fixed';
608
+ };
609
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
610
+ 'update:open': (_value: boolean) => boolean;
611
+ invoke: (_value: string) => boolean;
612
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
613
+ readonly items: {
614
+ readonly type: PropType<readonly MenuItemDefinition<string>[]>;
615
+ readonly required: true;
616
+ };
617
+ readonly disabledItems: {
618
+ readonly type: PropType<readonly string[]>;
619
+ readonly default: () => never[];
620
+ };
621
+ readonly disabled: {
622
+ readonly type: BooleanConstructor;
623
+ readonly default: false;
624
+ };
625
+ readonly defaultHighlightedValue: {
626
+ readonly type: PropType<string | null>;
627
+ readonly default: null;
628
+ };
629
+ readonly label: {
630
+ readonly type: StringConstructor;
631
+ readonly default: undefined;
632
+ };
633
+ readonly textValue: {
634
+ readonly type: PropType<MenuTextValueResolver>;
635
+ readonly default: undefined;
636
+ };
637
+ readonly policies: {
638
+ readonly type: PropType<MenuPolicies<string>>;
639
+ readonly default: undefined;
640
+ };
641
+ readonly open: {
642
+ readonly type: BooleanConstructor;
643
+ readonly default: undefined;
644
+ };
645
+ readonly defaultOpen: {
646
+ readonly type: BooleanConstructor;
647
+ readonly default: false;
648
+ };
649
+ readonly position: {
650
+ readonly type: BooleanConstructor;
651
+ readonly default: true;
652
+ };
653
+ readonly side: {
654
+ readonly type: PropType<'top' | 'right' | 'bottom' | 'left'>;
655
+ readonly default: 'bottom';
656
+ };
657
+ readonly collisionPadding: {
658
+ readonly type: PropType<PositionPadding>;
659
+ readonly default: 8;
660
+ };
661
+ readonly collisionBoundary: {
662
+ readonly type: PropType<PositionBoundary>;
663
+ readonly default: undefined;
664
+ };
665
+ readonly avoidCollisions: {
666
+ readonly type: BooleanConstructor;
667
+ readonly default: true;
668
+ };
669
+ readonly hideWhenDetached: {
670
+ readonly type: BooleanConstructor;
671
+ readonly default: false;
672
+ };
673
+ readonly tracking: {
674
+ readonly type: PropType<PositionTracking>;
675
+ readonly default: 'events';
676
+ };
677
+ readonly align: {
678
+ readonly type: PropType<'start' | 'center' | 'end'>;
679
+ readonly default: undefined;
680
+ };
681
+ readonly sideOffset: {
682
+ readonly type: NumberConstructor;
683
+ readonly default: 0;
684
+ };
685
+ readonly strategy: {
686
+ readonly type: PropType<PositionStrategy>;
687
+ readonly default: 'fixed';
688
+ };
689
+ }>> & Readonly<{
690
+ onInvoke?: (_value: string) => any;
691
+ "onUpdate:open"?: (_value: boolean) => any;
692
+ }>, {
693
+ readonly disabledItems: readonly string[];
694
+ readonly disabled: boolean;
695
+ readonly defaultHighlightedValue: string | null;
696
+ readonly label: string;
697
+ readonly textValue: (id: string) => string;
698
+ readonly policies: MenuPolicies<string>;
699
+ readonly open: boolean;
700
+ readonly defaultOpen: boolean;
701
+ readonly position: boolean;
702
+ readonly side: "bottom" | "left" | "right" | "top";
703
+ readonly collisionPadding: PositionPadding;
704
+ readonly collisionBoundary: PositionBoundary;
705
+ readonly avoidCollisions: boolean;
706
+ readonly hideWhenDetached: boolean;
707
+ readonly tracking: PositionTracking;
708
+ readonly align: "center" | "end" | "start";
709
+ readonly sideOffset: number;
710
+ readonly strategy: PositionStrategy;
711
+ }, SlotsType<{
712
+ default: (props: MenuRootSlotProps) => VNodeChild;
713
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
525
714
  export type MenuOpenChangeHandler = NonNullable<InstanceType<typeof MenuRoot>['$props']['onUpdate:open']>;
526
715
  export type MenuInvokeHandler = NonNullable<InstanceType<typeof MenuRoot>['$props']['onInvoke']>;
527
716
  export type MenubarOpenChangeHandler = NonNullable<InstanceType<typeof MenubarRoot>['$props']['onUpdate:open']>;
@@ -530,6 +719,8 @@ export type NavigationMenuOpenChangeHandler = NonNullable<InstanceType<typeof Na
530
719
  export type NavigationMenuInvokeHandler = NonNullable<InstanceType<typeof NavigationMenuRoot>['$props']['onInvoke']>;
531
720
  export type MenuButtonOpenChangeHandler = NonNullable<InstanceType<typeof MenuButtonRoot>['$props']['onUpdate:open']>;
532
721
  export type MenuButtonInvokeHandler = NonNullable<InstanceType<typeof MenuButtonRoot>['$props']['onInvoke']>;
722
+ export type ContextMenuOpenChangeHandler = NonNullable<InstanceType<typeof ContextMenuRoot>['$props']['onUpdate:open']>;
723
+ export type ContextMenuInvokeHandler = NonNullable<InstanceType<typeof ContextMenuRoot>['$props']['onInvoke']>;
533
724
  export declare const MenuButtonTrigger: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
534
725
  as: {
535
726
  type: PropType<PrimitiveAs>;
@@ -554,6 +745,30 @@ export declare const MenuButtonTrigger: import("vue").DefineComponent<import("vu
554
745
  }, SlotsType<{
555
746
  default: (props: MenuRootSlotProps) => VNodeChild;
556
747
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
748
+ export declare const ContextMenuTrigger: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
749
+ as: {
750
+ type: PropType<PrimitiveAs>;
751
+ default: string;
752
+ };
753
+ asChild: {
754
+ type: BooleanConstructor;
755
+ default: boolean;
756
+ };
757
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
758
+ as: {
759
+ type: PropType<PrimitiveAs>;
760
+ default: string;
761
+ };
762
+ asChild: {
763
+ type: BooleanConstructor;
764
+ default: boolean;
765
+ };
766
+ }>> & Readonly<{}>, {
767
+ as: PrimitiveAs;
768
+ asChild: boolean;
769
+ }, SlotsType<{
770
+ default: (props: MenuRootSlotProps) => VNodeChild;
771
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
557
772
  export declare const MenuButtonContent: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
558
773
  as: {
559
774
  type: PropType<PrimitiveAs>;
@@ -578,6 +793,30 @@ export declare const MenuButtonContent: import("vue").DefineComponent<import("vu
578
793
  }, SlotsType<{
579
794
  default: (props: MenuRootSlotProps) => VNodeChild;
580
795
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
796
+ export declare const ContextMenuContent: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
797
+ as: {
798
+ type: PropType<PrimitiveAs>;
799
+ default: string;
800
+ };
801
+ asChild: {
802
+ type: BooleanConstructor;
803
+ default: boolean;
804
+ };
805
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
806
+ as: {
807
+ type: PropType<PrimitiveAs>;
808
+ default: string;
809
+ };
810
+ asChild: {
811
+ type: BooleanConstructor;
812
+ default: boolean;
813
+ };
814
+ }>> & Readonly<{}>, {
815
+ as: PrimitiveAs;
816
+ asChild: boolean;
817
+ }, SlotsType<{
818
+ default: (props: MenuRootSlotProps) => VNodeChild;
819
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
581
820
  export declare const MenuItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
582
821
  as: {
583
822
  type: PropType<PrimitiveAs>;
package/dist/menu.js CHANGED
@@ -1,2 +1,2 @@
1
- import{Fragment,computed,defineComponent,h,inject,mergeProps,nextTick,onBeforeUnmount,onMounted,provide,shallowReactive,shallowRef,watch}from"vue";import{createMenu}from"@sectile/dom/menu";import{createMenuButton}from"@sectile/dom/menu-button";import{createMenubar}from"@sectile/dom/menubar";import{createNavigationMenu}from"@sectile/dom/navigation-menu";import{Primitive}from"./primitive.js";import{useHostDirection,useHostId}from"./host-provider.js";import{invalidateItemProjection,reconcileCollectionState,sameIDs}from"./internal/collection.js";import{useControlledStateInvariant}from"./internal/controlled-state.js";import{usePresence}from"./presence/presence.js";const key=Symbol("SectileMenuRoot");const partProps={as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}};const commonProps={items:{type:Array,required:true},disabledItems:{type:Array,default:()=>[]},disabled:{type:Boolean,default:false},defaultHighlightedValue:{type:String,default:null},label:{type:String,default:void 0},textValue:{type:Function,default:void 0},policies:{type:Object,default:void 0},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}};const menuButtonProps={...commonProps,open:{type:Boolean,default:void 0},defaultOpen:{type:Boolean,default:false},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"}};function createRoot(kind,rootProps,providerOnly=false){return defineComponent({name:kind==="menu-button"?"SectileMenuButtonRoot":kind==="menubar"?"SectileMenubarRoot":kind==="navigation-menu"?"SectileNavigationMenuRoot":"SectileMenuRoot",inheritAttrs:false,props:rootProps,emits:{"update:open":_value=>true,invoke:_value=>true},slots:Object,setup(props,{attrs,emit,slots}){const runtimeProps=props;const direction=useHostDirection();const baseID=useHostId();const root=shallowRef();const trigger=shallowRef();const connection=shallowRef();const controlled=useControlledStateInvariant("MenuButtonRoot","open",()=>kind==="menu-button"?runtimeProps.open:void 0);let currentOpen=kind==="menu-button"?runtimeProps.open??runtimeProps.defaultOpen??false:true;let currentHighlighted=runtimeProps.defaultHighlightedValue;let currentOpenPath=[];let currentOpenPathSet=new Set;let disabledItemSet=new Set(runtimeProps.disabledItems);const itemProjection=shallowReactive(new Map);const state=shallowReactive({open:kind==="menu-button"&&runtimeProps.open!==void 0?runtimeProps.open:currentOpen,highlightedValue:currentHighlighted,openPath:currentOpenPath,disabled:runtimeProps.disabled});const position=computed(()=>kind==="menu-button"?runtimeProps.position??true:false);const strategy=computed(()=>runtimeProps.strategy??"absolute");const publishOpen=value=>{currentOpen=value;const publicValue=kind==="menu-button"&&runtimeProps.open!==void 0?runtimeProps.open:value;if(state.open!==publicValue)state.open=publicValue};const publishHighlight=value=>{const previous=currentHighlighted;if(previous===value)return;currentHighlighted=value;state.highlightedValue=value;invalidateItemProjection(itemProjection,previous);invalidateItemProjection(itemProjection,value)};const publishOpenPath=value=>{const previousSet=currentOpenPathSet;const nextSet=new Set(value);const pathChanged=!sameIDs(currentOpenPath,value);currentOpenPath=value;currentOpenPathSet=nextSet;if(pathChanged)state.openPath=value;for(const id of previousSet)if(!nextSet.has(id))invalidateItemProjection(itemProjection,id);for(const id of nextSet)if(!previousSet.has(id))invalidateItemProjection(itemProjection,id)};const publishSnapshot=snapshot=>{publishOpen(snapshot.open);publishHighlight(snapshot.cursor.current);publishOpenPath(snapshot.openPath)};const updateOwnerProjection=()=>{const nextDisabledItems=new Set(runtimeProps.disabledItems);if(state.disabled===runtimeProps.disabled){for(const id of disabledItemSet)if(!nextDisabledItems.has(id))invalidateItemProjection(itemProjection,id);for(const id of nextDisabledItems)if(!disabledItemSet.has(id))invalidateItemProjection(itemProjection,id)}else state.disabled=runtimeProps.disabled;disabledItemSet=nextDisabledItems};const refresh=()=>{const snapshot=connection.value?.getSnapshot().state;if(snapshot!==void 0)publishSnapshot(snapshot)};const refreshParts=()=>{if(root.value===void 0||connection.value===void 0)return;root.value.querySelectorAll("[data-sectile-menu-id]").forEach(element=>{const id=element.dataset["sectileMenuId"];if(id!==void 0)connection.value?.setItemAttributes(element,id)});root.value.querySelectorAll("[data-sectile-submenu-for]").forEach(element=>{const id=element.dataset["sectileSubmenuFor"];if(id!==void 0)connection.value?.setSubmenuAttributes(element,id)})};const connect=()=>{connection.value?.disconnect();updateOwnerProjection();if(root.value===void 0||kind==="menu-button"&&trigger.value===void 0)return;const reconciled=reconcileCollectionState(runtimeProps.items.map(item=>item.id),[],currentHighlighted,runtimeProps.disabledItems,"single",{preserveNullCurrent:true});publishHighlight(reconciled.current);const options={root:root.value,items:runtimeProps.items,disabledItems:runtimeProps.disabledItems,disabled:runtimeProps.disabled,direction:direction.value,baseID,manageVisibility:false,...kind==="menu-button"?{position:runtimeProps.position??true,side:runtimeProps.side??"bottom",align:runtimeProps.align??"start",sideOffset:runtimeProps.sideOffset??8,collisionPadding:runtimeProps.collisionPadding??8,...runtimeProps.collisionBoundary===void 0?{}:{collisionBoundary:runtimeProps.collisionBoundary},avoidCollisions:runtimeProps.avoidCollisions??true,hideWhenDetached:runtimeProps.hideWhenDetached??false,strategy:runtimeProps.strategy??"absolute",tracking:runtimeProps.tracking??"events"}:{},...runtimeProps.policies===void 0?{}:{policies:runtimeProps.policies},defaultHighlightedValue:reconciled.current,...runtimeProps.label===void 0?{}:{label:runtimeProps.label},...runtimeProps.textValue===void 0?{}:{typeahead:{textValue:runtimeProps.textValue}},onOpenChange:value=>{publishOpen(value);emit("update:open",value)},onInvoke:value=>emit("invoke",value),onUpdate:refresh};connection.value=kind==="menu-button"?createMenuButton({...options,trigger:trigger.value,...controlled?{open:runtimeProps.open}:{defaultOpen:currentOpen}}):kind==="menubar"?createMenubar(options):kind==="navigation-menu"?createNavigationMenu(options):createMenu(options);refreshParts();refresh()};let mounted=false;let connectScheduled=false;const scheduleConnect=()=>{if(!mounted||connectScheduled)return;connectScheduled=true;void nextTick(()=>{connectScheduled=false;if(mounted)connect()})};const registerRoot=element=>{if(root.value===element)return;root.value=element;if(element===void 0){connection.value?.disconnect();connection.value=void 0}else scheduleConnect()};const registerTrigger=element=>{if(trigger.value===element)return;trigger.value=element;if(element===void 0){connection.value?.disconnect();connection.value=void 0}else scheduleConnect()};provide(key,{state,kind,label:computed(()=>runtimeProps.label),direction,position,strategy,itemProjection,isItemHighlighted:id=>currentHighlighted===id,isItemOpen:id=>currentOpenPathSet.has(id),isItemDisabled:id=>state.disabled||disabledItemSet.has(id),registerRoot,registerTrigger,refresh:parentID=>connection.value?.refresh(parentID??null),registerItem:(element,id)=>connection.value?.setItemAttributes(element,id),registerSubmenu:(element,parent)=>connection.value?.setSubmenuAttributes(element,parent)});onMounted(()=>{mounted=true;connect()});onBeforeUnmount(()=>{mounted=false;connection.value?.disconnect()});watch([()=>runtimeProps.items,()=>runtimeProps.disabledItems,()=>runtimeProps.disabled,()=>runtimeProps.label,()=>runtimeProps.textValue,()=>runtimeProps.policies,direction,()=>runtimeProps.position,()=>runtimeProps.side,()=>runtimeProps.align,()=>runtimeProps.sideOffset,()=>runtimeProps.collisionPadding,()=>runtimeProps.collisionBoundary,()=>runtimeProps.avoidCollisions,()=>runtimeProps.hideWhenDetached,()=>runtimeProps.strategy,()=>runtimeProps.tracking],connect);watch(()=>runtimeProps.open,value=>{if(!controlled||value===void 0)return;currentOpen=value;state.open=value;if(connection.value===void 0)return;const result=connection.value.syncControlledValue(value);if(!result.ok)throw new TypeError(result.error.message);refresh()});return()=>{if(providerOnly)return h(Fragment,null,slots["default"]?.(state)??[]);return h(Primitive,mergeProps(attrs,{as:runtimeProps.as,asChild:runtimeProps.asChild,elementRef:node=>registerRoot(node instanceof HTMLElement?node:void 0),role:kind==="navigation-menu"?"navigation":kind==="menubar"?"menubar":"menu","aria-label":runtimeProps.label,dir:direction.value,"data-scope":kind==="navigation-menu"?"navigation-menu":kind==="menubar"?"menubar":"menu","data-part":"root","data-state":state.open?"open":"closed"}),{default:()=>slots["default"]?.(state)})}}})}const MenuRoot=createRoot("menu",commonProps);const MenubarRoot=createRoot("menubar",commonProps);const NavigationMenuRoot=createRoot("navigation-menu",commonProps);const MenuButtonRoot=createRoot("menu-button",menuButtonProps,true);const MenuButtonTrigger=defineComponent({name:"SectileMenuButtonTrigger",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"button"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("MenuButtonTrigger");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.registerTrigger(node instanceof HTMLElement?node:void 0),type:props.as==="button"?"button":void 0,disabled:root.state.disabled,"aria-haspopup":"menu","aria-expanded":String(root.state.open),"data-scope":"menu-button","data-part":"trigger"}),{default:()=>slots["default"]?.(root.state)})}});const MenuButtonContent=defineComponent({name:"SectileMenuButtonContent",inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot("MenuButtonContent");const element=shallowRef();const open=computed(()=>root.state.open);const present=useMenuPresence(open,element,root.refresh);return()=>{const exiting=!open.value&&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.registerRoot(content)},role:"menu",hidden:!present.value,"aria-label":root.label.value,dir:root.direction.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,"data-scope":"menu-button","data-part":"content","data-state":open.value?"open":"closed"}),{default:()=>slots["default"]?.(root.state)})}}});const MenuItem=defineComponent({name:"SectileMenuItem",inheritAttrs:false,props:{value:{type:String,required:true},disabled:{type:Boolean,default:false},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("MenuItem");const state=Object.freeze({get value(){return props.value},get highlighted(){root.itemProjection.get(props.value);return root.isItemHighlighted(props.value)},get open(){root.itemProjection.get(props.value);return root.isItemOpen(props.value)},get disabled(){root.itemProjection.get(props.value);return props.disabled||root.isItemDisabled(props.value)}});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{root.registerItem(node instanceof HTMLElement?node:void 0,props.value)},role:root.kind==="navigation-menu"?void 0:"menuitem","aria-disabled":state.disabled?"true":void 0,"data-sectile-menu-id":props.value,"data-scope":root.kind==="navigation-menu"?"navigation-menu":root.kind==="menubar"?"menubar":"menu","data-part":"item","data-highlighted":state.highlighted?"":void 0,"data-state":state.open?"open":"closed"}),{default:()=>slots["default"]?.(state)})}});const MenuSubContent=defineComponent({name:"SectileMenuSubContent",inheritAttrs:false,props:{for:{type:String,required:true},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("MenuSubContent");const element=shallowRef();const open=computed(()=>{root.itemProjection.get(props.for);return root.state.open&&root.isItemOpen(props.for)});const present=useMenuPresence(open,element,()=>root.refresh(props.for));return()=>{const exiting=!open.value&&present.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{const submenu=node instanceof HTMLElement?node:void 0;element.value=submenu;root.registerSubmenu(submenu,props.for)},role:root.kind==="navigation-menu"?void 0:"menu",hidden:!present.value,dir:root.direction.value,"data-sectile-submenu-for":props.for,...exiting?{inert:true,"aria-hidden":"true"}:{},"data-scope":root.kind==="navigation-menu"?"navigation-menu":"menu","data-part":"sub-content","data-state":open.value?"open":"closed"}),{default:()=>slots["default"]?.(root.state)})}}});const MenuSeparator=defineComponent({name:"SectileMenuSeparator",inheritAttrs:false,props:partProps,setup(props,{attrs}){return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,role:"separator","data-scope":"menu","data-part":"separator"}))}});function useMenuPresence(open,element,refresh){const retainedReopen=shallowRef(0);const present=usePresence(open,element,()=>{retainedReopen.value+=1});watch([present,retainedReopen],async(_next,_previous,onCleanup)=>{let active=true;onCleanup(()=>{active=false});await nextTick();if(active)refresh()},{flush:"post"});return present}function useRoot(part){const root=inject(key);if(root===void 0)throw new TypeError(`${part} must be used inside a menu root.`);return root}export{MenuButtonContent,MenuButtonRoot,MenuButtonTrigger,MenuItem,MenuRoot,MenuSeparator,MenuSubContent,MenubarRoot,NavigationMenuRoot};
1
+ import{Fragment,computed,defineComponent,h,inject,mergeProps,nextTick,onBeforeUnmount,onMounted,provide,shallowReactive,shallowRef,watch}from'vue';import{tryCreateMenu}from'@sectile/dom/menu';import{tryCreateMenuButton}from'@sectile/dom/menu-button';import{tryCreateContextMenu}from'@sectile/dom/context-menu';import{tryCreateMenubar}from'@sectile/dom/menubar';import{tryCreateNavigationMenu}from'@sectile/dom/navigation-menu';import{unwrap}from'@sectile/core/result';import{stableIDElementToken}from'@sectile/dom/identity';import{createMenuModel}from'@sectile/core/menu';import{Primitive}from'./primitive.js';import{provideHostLayerParent,useHostDirection,useHostId,useHostLayer}from'./host-provider.js';import{usePopupPresentation}from'./internal/popup-presentation.js';import{providePortalMove}from'./internal/portal-move.js';import{invalidateItemProjection,reconcileCollectionState,sameIDs}from'./internal/collection.js';import{useControlledStateInvariant}from'./internal/controlled-state.js';import{usePresence}from'./presence/presence.js';const key=Symbol('SectileMenuRoot');const partProps={as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}};const commonProps={items:{type:Array,required:true},disabledItems:{type:Array,default:()=>[]},disabled:{type:Boolean,default:false},defaultHighlightedValue:{type:String,default:null},label:{type:String,default:undefined},textValue:{type:Function,default:undefined},policies:{type:Object,default:undefined},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}};const menuButtonProps={...commonProps,open:{type:Boolean,default:undefined},defaultOpen:{type:Boolean,default:false},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:undefined},avoidCollisions:{type:Boolean,default:true},hideWhenDetached:{type:Boolean,default:false},strategy:{type:String,default:'absolute'},tracking:{type:String,default:'events'}};const{as:_contextAs,asChild:_contextAsChild,...contextOwnerProps}=menuButtonProps;const contextMenuProps={...contextOwnerProps,align:{type:String,default:undefined},sideOffset:{type:Number,default:0},strategy:{type:String,default:'fixed'}};function createRoot(kind,rootProps,providerOnly=false){const popup=kind==='menu-button'||kind==='context-menu';return defineComponent({name:kind==='context-menu'?'SectileContextMenuRoot':kind==='menu-button'?'SectileMenuButtonRoot':kind==='menubar'?'SectileMenubarRoot':kind==='navigation-menu'?'SectileNavigationMenuRoot':'SectileMenuRoot',inheritAttrs:false,props:rootProps,emits:{'update:open':_value=>true,invoke:_value=>true},slots:Object,setup(props,{attrs,emit,slots}){const runtimeProps=props;const direction=useHostDirection();const layerHost=useHostLayer();const baseID=useHostId();const contentID=`sectile-menu-${baseID}-content`;const triggerID=`sectile-menu-${baseID}-trigger`;const submenuID=id=>`sectile-menu-${baseID}-submenu-${stableIDElementToken(id)}`;const itemID=id=>`sectile-menu-${baseID}-item-${stableIDElementToken(id)}`;const model=computed(()=>createMenuModel(runtimeProps.items));const root=shallowRef();const trigger=shallowRef();const connection=shallowRef();providePortalMove(()=>connection.value);let currentAnchorRect;const controlled=useControlledStateInvariant(kind==='context-menu'?'ContextMenuRoot':'MenuButtonRoot','open',()=>popup?runtimeProps.open:undefined);let currentOpen=popup?runtimeProps.open??runtimeProps.defaultOpen??false:true;let currentHighlighted=runtimeProps.defaultHighlightedValue;let currentOpenPath=[];let currentOpenPathSet=new Set;let disabledItemSet=new Set(runtimeProps.disabledItems);const itemProjection=shallowReactive(new Map);const state=shallowReactive({get model(){return model.value},get presentation(){return lifecycle.presentation.value},open:popup&&runtimeProps.open!==undefined?runtimeProps.open:currentOpen,highlightedValue:currentHighlighted,openPath:currentOpenPath,disabled:runtimeProps.disabled});const lifecycle=usePopupPresentation({connection,open:computed(()=>state.open),connect:()=>connect(),refresh:()=>refresh()});const position=computed(()=>popup?runtimeProps.position??true:false);const strategy=computed(()=>runtimeProps.strategy??(kind==='context-menu'?'fixed':'absolute'));const publishOpen=value=>{currentOpen=value;const publicValue=popup&&runtimeProps.open!==undefined?runtimeProps.open:value;if(state.open!==publicValue)state.open=publicValue};const publishHighlight=value=>{const previous=currentHighlighted;if(previous===value)return;currentHighlighted=value;state.highlightedValue=value;invalidateItemProjection(itemProjection,previous);invalidateItemProjection(itemProjection,value)};const publishOpenPath=value=>{const previousSet=currentOpenPathSet;const nextSet=new Set(value);const pathChanged=!sameIDs(currentOpenPath,value);currentOpenPath=value;currentOpenPathSet=nextSet;if(pathChanged)state.openPath=value;for(const id of previousSet)if(!nextSet.has(id))invalidateItemProjection(itemProjection,id);for(const id of nextSet)if(!previousSet.has(id))invalidateItemProjection(itemProjection,id)};const publishSnapshot=snapshot=>{publishOpen(snapshot.open);publishHighlight(snapshot.cursor.current);publishOpenPath(snapshot.openPath)};const updateOwnerProjection=()=>{const nextDisabledItems=new Set(runtimeProps.disabledItems);if(state.disabled===runtimeProps.disabled){for(const id of disabledItemSet)if(!nextDisabledItems.has(id))invalidateItemProjection(itemProjection,id);for(const id of nextDisabledItems)if(!disabledItemSet.has(id))invalidateItemProjection(itemProjection,id)}else state.disabled=runtimeProps.disabled;disabledItemSet=nextDisabledItems};const refresh=()=>{const snapshot=connection.value?.getSnapshot().state;if(snapshot!==undefined)publishSnapshot(snapshot);lifecycle.update()};const refreshParts=()=>{if(root.value===undefined||connection.value===undefined)return;root.value.querySelectorAll('[data-sectile-menu-id]').forEach(element=>{const id=element.dataset['sectileMenuId'];if(id!==undefined)connection.value?.setItemAttributes(element,id)});root.value.querySelectorAll('[data-sectile-submenu-for]').forEach(element=>{const id=element.dataset['sectileSubmenuFor'];if(id!==undefined)connection.value?.setSubmenuAttributes(element,id)})};const connect=()=>{const navigation={defaultOpenPath:currentOpenPath};disconnect();updateOwnerProjection();if(root.value===undefined||popup&&trigger.value===undefined)return;const reconciled=reconcileCollectionState(runtimeProps.items.map(item=>item.id),[],currentHighlighted,runtimeProps.disabledItems,'single',{preserveNullCurrent:true});publishHighlight(reconciled.current);const options={root:root.value,model:model.value,disabledItems:runtimeProps.disabledItems,disabled:runtimeProps.disabled,direction:direction.value,baseID,manageVisibility:false,...popup?{...layerHost.value===undefined?{}:{layerHost:layerHost.value},position:runtimeProps.position??true,side:runtimeProps.side??'bottom',align:runtimeProps.align??(kind==='context-menu'&&direction.value==='rtl'?'end':'start'),sideOffset:runtimeProps.sideOffset??(kind==='context-menu'?0:8),collisionPadding:runtimeProps.collisionPadding??8,...runtimeProps.collisionBoundary===undefined?{}:{collisionBoundary:runtimeProps.collisionBoundary},avoidCollisions:runtimeProps.avoidCollisions??true,hideWhenDetached:runtimeProps.hideWhenDetached??false,strategy:strategy.value,tracking:runtimeProps.tracking??'events'}:{},...runtimeProps.policies===undefined?{}:{policies:runtimeProps.policies},defaultHighlightedValue:reconciled.current,...runtimeProps.label===undefined?{}:{label:runtimeProps.label},...runtimeProps.textValue===undefined?{}:{typeahead:{textValue:runtimeProps.textValue}},onOpenChange:value=>{publishOpen(value);emit('update:open',value)},onInvoke:value=>emit('invoke',value),onUpdate:refresh};const create=retained=>{const basis={...options,...retained?navigation:{defaultHighlightedValue:null}};if(popup){const popupOptions={...basis,trigger:trigger.value,...controlled?{open:runtimeProps.open}:{defaultOpen:currentOpen}};return kind==='context-menu'?tryCreateContextMenu({...popupOptions,...currentAnchorRect===undefined?{}:{anchorRect:currentAnchorRect}}):tryCreateMenuButton(popupOptions)}return kind==='menubar'?tryCreateMenubar(basis):kind==='navigation-menu'?tryCreateNavigationMenu(basis):tryCreateMenu(basis)};const candidate=create(true);connection.value=unwrap(!candidate.ok&&(candidate.error.code==='invalid-menu-open-path'||candidate.error.code==='disconnected-menu-open-path'||candidate.error.code==='closed-menu-has-active-state'||candidate.error.code==='menu-cursor-hidden')?create(false):candidate);refreshParts();refresh()};const disconnect=()=>{const owner=connection.value;if(kind==='context-menu'&&owner!==undefined&&'getAnchorRect'in owner)currentAnchorRect=owner.getAnchorRect();lifecycle.release();try{connection.value?.disconnect()}finally{connection.value=undefined}};let mounted=false;let connectScheduled=false;const scheduleConnect=()=>{if(!mounted||connectScheduled)return;if(!lifecycle.availability.value){lifecycle.invalidate();return}connectScheduled=true;void nextTick(()=>{connectScheduled=false;if(mounted)lifecycle.reconnect()})};const registerRoot=element=>{if(root.value===element)return;root.value=element;if(element===undefined){disconnect()}else scheduleConnect()};const registerTrigger=element=>{if(trigger.value===element)return;trigger.value=element;if(element===undefined){disconnect()}else scheduleConnect()};provide(key,{active:lifecycle.active,presentation:lifecycle.presentation,registerPresence:lifecycle.registerPresence,state,kind,contentID,triggerID,submenuID,itemID,submenuControlID:id=>connection.value===undefined?submenuID(id):connection.value.getSubmenuID(id),label:computed(()=>runtimeProps.label),direction,position,strategy,itemProjection,isItemHighlighted:id=>currentHighlighted===id,isItemOpen:id=>currentOpenPathSet.has(id),isItemDisabled:id=>state.disabled||disabledItemSet.has(id),isItemBranch:id=>model.value.tree.isLeaf(id)===false,registerRoot,registerTrigger,refresh:parentID=>connection.value?.refresh(parentID??null),registerItem:(element,id)=>connection.value?.setItemAttributes(element,id),registerSubmenu:(element,parent)=>{const owner=connection.value,previous=owner?.getSubmenuID(parent);owner?.setSubmenuAttributes(element,parent);if(previous!==owner?.getSubmenuID(parent))invalidateItemProjection(itemProjection,parent)}});onMounted(()=>{mounted=true;lifecycle.reconnect()});onBeforeUnmount(()=>{mounted=false;disconnect()});watch([()=>runtimeProps.items,()=>runtimeProps.disabledItems,()=>runtimeProps.disabled,()=>runtimeProps.label,()=>runtimeProps.textValue,()=>runtimeProps.policies,direction,()=>runtimeProps.position,()=>runtimeProps.side,()=>runtimeProps.align,()=>runtimeProps.sideOffset,()=>runtimeProps.collisionPadding,()=>runtimeProps.collisionBoundary,()=>runtimeProps.avoidCollisions,()=>runtimeProps.hideWhenDetached,()=>runtimeProps.strategy,()=>runtimeProps.tracking],lifecycle.reconnect);if(popup)watch(layerHost,lifecycle.reconnect,{flush:'post'});watch(()=>runtimeProps.open,value=>{if(!controlled||value===undefined)return;currentOpen=value;state.open=value;lifecycle.prepareModelUpdate();if(connection.value===undefined)return;const result=connection.value.syncControlledValue(value);if(!result.ok)throw new TypeError(result.error.message);refresh()});return()=>{if(providerOnly)return h(Fragment,null,slots['default']?.(state)??[]);return h(Primitive,mergeProps(attrs,{as:runtimeProps.as,asChild:runtimeProps.asChild,elementRef:node=>registerRoot(node instanceof HTMLElement?node:undefined),role:kind==='navigation-menu'?'navigation':kind==='menubar'?'menubar':'menu','aria-label':runtimeProps.label,dir:direction.value,...!lifecycle.active.value?{hidden:true,inert:true,'aria-hidden':'true'}:{},'data-scope':kind==='navigation-menu'?'navigation-menu':kind==='menubar'?'menubar':'menu','data-part':'root','data-state':state.open?'open':'closed'}),{default:()=>slots['default']?.(state)})}}})}export const MenuRoot=/* @__PURE__ */createRoot('menu',commonProps);export const MenubarRoot=/* @__PURE__ */createRoot('menubar',commonProps);export const NavigationMenuRoot=/* @__PURE__ */createRoot('navigation-menu',commonProps);export const MenuButtonRoot=/* @__PURE__ */createRoot('menu-button',menuButtonProps,true);export const ContextMenuRoot=/* @__PURE__ */createRoot('context-menu',contextMenuProps,true);function createPopupTrigger(scope){return defineComponent({name:scope==='context-menu'?'SectileContextMenuTrigger':'SectileMenuButtonTrigger',inheritAttrs:false,props:{as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot(scope==='context-menu'?'ContextMenuTrigger':'MenuButtonTrigger');return()=>{const borrowed=scope==='context-menu'&&props.asChild;if(borrowed&&!root.label.value?.trim())throw new TypeError('ContextMenuRoot requires a nonempty label when its trigger borrows a child.');return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.registerTrigger(node instanceof HTMLElement?node:undefined),...borrowed?{}:{type:props.as==='button'?'button':undefined,disabled:root.state.disabled,id:root.triggerID,'aria-haspopup':'menu','aria-expanded':String(root.state.open),'aria-controls':root.contentID,'data-scope':scope,'data-part':'trigger'}}),{default:()=>slots['default']?.(root.state)})}}})}export const MenuButtonTrigger=/* @__PURE__ */createPopupTrigger('menu-button');export const ContextMenuTrigger=/* @__PURE__ */createPopupTrigger('context-menu');function createPopupContent(scope){return defineComponent({name:scope==='context-menu'?'SectileContextMenuContent':'SectileMenuButtonContent',inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot(scope==='context-menu'?'ContextMenuContent':'MenuButtonContent');const element=shallowRef();const open=computed(()=>root.state.open);provideHostLayerParent({element,open,active:root.active,presentation:root.presentation});const present=useMenuPresence(open,element,root.refresh,root.active);onBeforeUnmount(root.registerPresence(present));return()=>{const exiting=!open.value&&present.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{const content=node instanceof HTMLElement?node:undefined;element.value=content;root.registerRoot(content)},id:root.contentID,role:'menu',hidden:!root.active.value||!present.value,'aria-label':root.label.value,'aria-labelledby':root.label.value===undefined?root.triggerID:undefined,dir:root.direction.value,...exiting||!root.active.value?{inert:true,'aria-hidden':'true'}:{},style:root.position.value?{position:root.strategy.value,visibility:element.value===undefined?'hidden':undefined}:undefined,'data-scope':scope,'data-part':'content','data-state':open.value?'open':'closed'}),{default:()=>slots['default']?.(root.state)})}}})}export const MenuButtonContent=/* @__PURE__ */createPopupContent('menu-button');export const ContextMenuContent=/* @__PURE__ */createPopupContent('context-menu');export const MenuItem=defineComponent({name:'SectileMenuItem',inheritAttrs:false,props:{value:{type:String,required:true},disabled:{type:Boolean,default:false},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot('MenuItem');const state=Object.freeze({get value(){return props.value},get highlighted(){root.itemProjection.get(props.value);return root.isItemHighlighted(props.value)},get open(){root.itemProjection.get(props.value);return root.isItemOpen(props.value)},get disabled(){root.itemProjection.get(props.value);return props.disabled||root.isItemDisabled(props.value)},get branch(){return root.isItemBranch(props.value)}});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{root.registerItem(node instanceof HTMLElement?node:undefined,props.value)},role:root.kind==='navigation-menu'?undefined:'menuitem','aria-disabled':state.disabled?'true':undefined,'data-sectile-menu-id':props.value,id:state.branch&&root.kind!=='navigation-menu'?root.itemID(props.value):undefined,'aria-haspopup':state.branch&&root.kind!=='navigation-menu'?'menu':undefined,'aria-expanded':state.branch?String(state.open):undefined,'aria-controls':state.branch?root.submenuControlID(props.value):undefined,'data-scope':root.kind==='navigation-menu'?'navigation-menu':root.kind==='menubar'?'menubar':'menu','data-part':'item','data-highlighted':state.highlighted?'':undefined,'data-state':state.open?'open':'closed'}),{default:()=>slots['default']?.(state)})}});export const MenuSubContent=defineComponent({name:'SectileMenuSubContent',inheritAttrs:false,props:{for:{type:String,required:true},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot('MenuSubContent');const element=shallowRef();const open=computed(()=>{root.itemProjection.get(props.for);return root.state.open&&root.isItemOpen(props.for)});const present=useMenuPresence(open,element,()=>root.refresh(props.for),root.active);return()=>{const exiting=!open.value&&present.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{const submenu=node instanceof HTMLElement?node:undefined;element.value=submenu;root.registerSubmenu(submenu,props.for)},id:root.submenuID(props.for),role:root.kind==='navigation-menu'?undefined:'menu',hidden:!root.active.value||!present.value,dir:root.direction.value,'data-sectile-submenu-for':props.for,'aria-labelledby':root.kind==='navigation-menu'?undefined:root.itemID(props.for),...exiting||!root.active.value?{inert:true,'aria-hidden':'true'}:{},'data-scope':root.kind==='navigation-menu'?'navigation-menu':'menu','data-part':'sub-content','data-state':open.value?'open':'closed'}),{default:()=>slots['default']?.(root.state)})}}});export const MenuSeparator=defineComponent({name:'SectileMenuSeparator',inheritAttrs:false,props:partProps,setup(props,{attrs}){return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,role:'separator','data-scope':'menu','data-part':'separator'}))}});function useMenuPresence(open,element,refresh,active){const retainedReopen=shallowRef(0);const present=usePresence(open,element,()=>{retainedReopen.value+=1},active);watch([present,retainedReopen,element,active],async(_next,_previous,onCleanup)=>{let active=true;onCleanup(()=>{active=false});await nextTick();if(active)refresh()},{flush:'post'});return present}function useRoot(part){const root=inject(key);if(root===undefined)throw new TypeError(`${part} must be used inside a menu root.`);return root}
2
2
  //# sourceMappingURL=menu.js.map
package/dist/menu.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/menu.ts"],"mappings":"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","names":[],"file":"menu.js"}
1
+ {"version":3,"file":"menu.js","names":["Fragment","computed","defineComponent","h","inject","mergeProps","nextTick","onBeforeUnmount","onMounted","provide","shallowReactive","shallowRef","watch","tryCreateMenu","tryCreateMenuButton","tryCreateContextMenu","tryCreateMenubar","tryCreateNavigationMenu","unwrap","stableIDElementToken","createMenuModel","Primitive","provideHostLayerParent","useHostDirection","useHostId","useHostLayer","usePopupPresentation","providePortalMove","invalidateItemProjection","reconcileCollectionState","sameIDs","useControlledStateInvariant","usePresence","key","Symbol","partProps","as","type","String","Object","Function","default","asChild","Boolean","commonProps","items","Array","required","disabledItems","disabled","defaultHighlightedValue","label","undefined","textValue","policies","menuButtonProps","open","defaultOpen","position","side","align","sideOffset","Number","collisionPadding","collisionBoundary","avoidCollisions","hideWhenDetached","strategy","tracking","_contextAs","_contextAsChild","contextOwnerProps","contextMenuProps","createRoot","kind","rootProps","providerOnly","popup","name","inheritAttrs","props","emits","_value","invoke","slots","setup","attrs","emit","runtimeProps","direction","layerHost","baseID","contentID","triggerID","submenuID","id","itemID","model","root","trigger","connection","value","currentAnchorRect","controlled","currentOpen","currentHighlighted","currentOpenPath","currentOpenPathSet","Set","disabledItemSet","itemProjection","Map","state","presentation","lifecycle","highlightedValue","openPath","connect","refresh","publishOpen","publicValue","publishHighlight","previous","publishOpenPath","previousSet","nextSet","pathChanged","has","publishSnapshot","snapshot","cursor","current","updateOwnerProjection","nextDisabledItems","getSnapshot","update","refreshParts","querySelectorAll","forEach","element","dataset","setItemAttributes","setSubmenuAttributes","navigation","defaultOpenPath","disconnect","reconciled","map","item","preserveNullCurrent","options","manageVisibility","typeahead","onOpenChange","onInvoke","onUpdate","create","retained","basis","popupOptions","anchorRect","candidate","ok","error","code","owner","getAnchorRect","release","mounted","connectScheduled","scheduleConnect","availability","invalidate","reconnect","registerRoot","registerTrigger","active","registerPresence","submenuControlID","getSubmenuID","isItemHighlighted","isItemOpen","isItemDisabled","isItemBranch","tree","isLeaf","parentID","registerItem","registerSubmenu","parent","flush","prepareModelUpdate","result","syncControlledValue","TypeError","message","elementRef","node","HTMLElement","role","dir","hidden","inert","MenuRoot","MenubarRoot","NavigationMenuRoot","MenuButtonRoot","ContextMenuRoot","createPopupTrigger","scope","useRoot","borrowed","trim","MenuButtonTrigger","ContextMenuTrigger","createPopupContent","present","useMenuPresence","exiting","content","style","visibility","MenuButtonContent","ContextMenuContent","MenuItem","freeze","highlighted","get","branch","MenuSubContent","for","submenu","MenuSeparator","retainedReopen","async","_next","_previous","onCleanup","part"],"sources":["../src/menu.ts"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{computed,defineComponent,h,inject,mergeProps,provide}from"vue";import{createMeterGroupState}from"@sectile/core/meter-group";import{getMeterGroupRootAttributes,getMeterGroupSegmentAttributes,getMeterGroupTrackAttributes}from"@sectile/dom/meter-group";import{Primitive}from"./primitive.js";import{normalizeDecimalInput}from"./input/decimal-input.js";const meterGroupKey=Symbol("SectileMeterGroupRoot");const meterGroupEntryKey=Symbol("SectileMeterGroupEntry");const partProps={as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}};const keyedPartProps={id:{type:String,required:true},...partProps};const MeterGroupRoot=defineComponent({name:"SectileMeterGroupRoot",inheritAttrs:false,props:{items:{type:Array,required:true},max:{type:[Number,String],default:100},low:{type:[Number,String],default:void 0},high:{type:[Number,String],default:void 0},optimum:{type:[Number,String],default:void 0},label:{type:String,default:void 0},formatValue:{type:Function,default:void 0},formatTotal:{type:Function,default:void 0},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const projection=computed(()=>{const entries=new Map(props.items.map(entry=>[entry.id,entry]));const state=createMeterGroupState({items:props.items.map(entry=>({id:entry.id,value:normalizeDecimalInput(entry.value)})),max:normalizeDecimalInput(props.max),...props.low===void 0?{}:{low:normalizeDecimalInput(props.low)},...props.high===void 0?{}:{high:normalizeDecimalInput(props.high)},...props.optimum===void 0?{}:{optimum:normalizeDecimalInput(props.optimum)}});const segments=Object.freeze(state.segments.map(segment=>{const entry=entries.get(segment.id);if(entry===void 0)throw new Error("Internal invariant breach: MeterGroup entry lookup failed.");return projectSegment(state,entry,props.formatValue)}));const rootAttributes=getMeterGroupRootAttributes(state);return Object.freeze({state,entries,slot:Object.freeze({segments,max:state.max,total:state.total,remaining:state.remaining,percentage:Number(rootAttributes["data-percentage"]),zone:state.zone,valueText:props.formatTotal?.(state.total,state.max)??`${state.total} / ${state.max}`})})});provide(meterGroupKey,{projection});return()=>{const current=projection.value;const projected=getMeterGroupRootAttributes(current.state,{...props.label===void 0?{}:{label:props.label},...typeof attrs["aria-labelledby"]==="string"?{labelledBy:attrs["aria-labelledby"]}:{},...typeof attrs["aria-describedby"]==="string"?{describedBy:attrs["aria-describedby"]}:{}});return h(Primitive,mergeProps(attrs,projected,{as:props.as,asChild:props.asChild}),{default:()=>slots["default"]?.(current.slot)})}}});const MeterGroupTrack=defineComponent({name:"SectileMeterGroupTrack",inheritAttrs:false,props:partProps,setup(props,{attrs,slots}){const root=useMeterGroup("MeterGroupTrack");return()=>h(Primitive,mergeProps(attrs,getMeterGroupTrackAttributes(root.projection.value.state),{as:props.as,asChild:props.asChild}),slots)}});const MeterGroupSegment=defineComponent({name:"SectileMeterGroupSegment",inheritAttrs:false,props:keyedPartProps,slots:Object,setup(props,{attrs,slots}){const root=useMeterGroup("MeterGroupSegment");const segment=computed(()=>segmentByID(root,props.id??"","MeterGroupSegment"));provide(meterGroupEntryKey,{segment});return()=>{const current=segment.value;const projected=getMeterGroupSegmentAttributes(root.projection.value.state,current.id,{label:current.label,formatValue:()=>current.valueText});if(!projected.ok)throw new TypeError(`MeterGroupSegment id ${current.id} is unavailable.`);return h(Primitive,mergeProps(attrs,projected.value,{as:props.as,asChild:props.asChild}),{default:()=>slots["default"]?.(current)})}}});const MeterGroupIndicator=entryPart("SectileMeterGroupIndicator","indicator","div",segment=>({"aria-hidden":"true","data-percentage":segment.percentage,"data-start-percentage":segment.startPercentage,"data-end-percentage":segment.endPercentage,style:[`--sectile-meter-group-percentage: ${segment.percentage}%`,`--sectile-meter-group-start-percentage: ${segment.startPercentage}%`,`--sectile-meter-group-end-percentage: ${segment.endPercentage}%`].join("; ")}));const MeterGroupValueText=defineComponent({name:"SectileMeterGroupValueText",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"span"},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const root=useMeterGroup("MeterGroupValueText");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"meter-group","data-part":"value-text"}),{default:()=>slots["default"]?.(root.projection.value.slot)??root.projection.value.slot.valueText})}});const MeterGroupList=meterGroupPart("SectileMeterGroupList","list","ul",{"aria-hidden":"true"});const MeterGroupItem=defineComponent({name:"SectileMeterGroupItem",inheritAttrs:false,props:{id:{type:String,required:true},as:{type:[String,Object,Function],default:"li"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useMeterGroup("MeterGroupItem");const segment=computed(()=>segmentByID(root,props.id,"MeterGroupItem"));provide(meterGroupEntryKey,{segment});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"meter-group","data-part":"item","data-id":segment.value.id,"aria-hidden":"true"}),{default:()=>slots["default"]?.(segment.value)})}});const MeterGroupItemIndicator=entryPart("SectileMeterGroupItemIndicator","item-indicator","span",segment=>({"aria-hidden":"true","data-percentage":segment.percentage}));const MeterGroupItemLabel=entryTextPart("SectileMeterGroupItemLabel","item-label",segment=>segment.label);const MeterGroupItemValue=entryTextPart("SectileMeterGroupItemValue","item-value",segment=>segment.valueText);function projectSegment(state,entry,formatValue){const attributes=getMeterGroupSegmentAttributes(state,entry.id,{label:entry.label,...formatValue===void 0?{}:{formatValue:value=>formatValue(value,entry)}});if(!attributes.ok)throw new Error("Internal invariant breach: MeterGroup segment projection failed.");const segment=state.segments.find(candidate=>candidate.id===entry.id);if(segment===void 0)throw new Error("Internal invariant breach: MeterGroup segment lookup failed.");return Object.freeze({id:entry.id,label:entry.label,value:segment.value,valueText:String(attributes.value["aria-valuetext"]),start:segment.start,end:segment.end,percentage:Number(attributes.value["data-percentage"]),startPercentage:Number(attributes.value["data-start-percentage"]),endPercentage:Number(attributes.value["data-end-percentage"])})}function segmentByID(root,id,part){const segment=root.projection.value.slot.segments.find(candidate=>candidate.id===id);if(segment===void 0)throw new TypeError(`${part} id ${id} is unavailable.`);return segment}function meterGroupPart(name,part,defaultAs="div",extra={}){return defineComponent({name,inheritAttrs:false,props:{as:{type:[String,Object,Function],default:defaultAs},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){useMeterGroup(name);return()=>h(Primitive,mergeProps(attrs,extra,{as:props.as,asChild:props.asChild,"data-scope":"meter-group","data-part":part}),slots)}})}function entryPart(name,part,defaultAs,project){return defineComponent({name,inheritAttrs:false,props:{as:{type:[String,Object,Function],default:defaultAs},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const entry=useMeterGroupEntry(name);return()=>h(Primitive,mergeProps(attrs,project(entry.segment.value),{as:props.as,asChild:props.asChild,"data-scope":"meter-group","data-part":part,"data-id":entry.segment.value.id}),slots)}})}function entryTextPart(name,part,text){return defineComponent({name,inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"span"},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const entry=useMeterGroupEntry(name);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"meter-group","data-part":part,"data-id":entry.segment.value.id}),{default:()=>slots["default"]?.(entry.segment.value)??text(entry.segment.value)})}})}function useMeterGroup(part){const root=inject(meterGroupKey);if(root===void 0)throw new TypeError(`${part} must be used inside MeterGroupRoot.`);return root}function useMeterGroupEntry(part){const entry=inject(meterGroupEntryKey);if(entry===void 0)throw new TypeError(`${part} must be used inside MeterGroupSegment or MeterGroupItem.`);return entry}export{MeterGroupIndicator,MeterGroupItem,MeterGroupItemIndicator,MeterGroupItemLabel,MeterGroupItemValue,MeterGroupList,MeterGroupRoot,MeterGroupSegment,MeterGroupTrack,MeterGroupValueText};
1
+ import{computed,defineComponent,h,inject,mergeProps,provide,shallowRef,onScopeDispose}from"vue";import{createMeterGroupState}from"@sectile/core/meter-group";import{getMeterGroupRootAttributes,getMeterGroupAttributes}from"@sectile/dom/meter-group";import{Primitive}from"./primitive.js";import{normalizeDecimalInput}from"./input/decimal-input.js";const meterGroupKey=Symbol("SectileMeterGroupRoot");const meterGroupEntryKey=Symbol("SectileMeterGroupEntry");const partProps={as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}};const keyedPartProps={id:{type:String,required:true},...partProps};const MeterGroupRoot=defineComponent({name:"SectileMeterGroupRoot",inheritAttrs:false,props:{items:{type:Array,required:true},max:{type:[Number,String],default:100},low:{type:[Number,String],default:void 0},high:{type:[Number,String],default:void 0},optimum:{type:[Number,String],default:void 0},label:{type:String,default:void 0},formatValue:{type:Function,default:void 0},formatTotal:{type:Function,default:void 0},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const active=shallowRef(true);const projection=computed(()=>{if(!active.value)return void 0;const entries=new Map(props.items.map(entry=>[entry.id,entry]));const state=createMeterGroupState({items:props.items.map(entry=>({id:entry.id,value:normalizeDecimalInput(entry.value)})),max:normalizeDecimalInput(props.max),...props.low===void 0?{}:{low:normalizeDecimalInput(props.low)},...props.high===void 0?{}:{high:normalizeDecimalInput(props.high)},...props.optimum===void 0?{}:{optimum:normalizeDecimalInput(props.optimum)}});const attributes=getMeterGroupAttributes(state);const formatValue=props.formatValue;const slotsByID=new Map;const segments=Object.freeze(state.segments.map(segment=>{const entry=entries.get(segment.id);if(entry===void 0)throw new Error("Internal invariant breach: MeterGroup entry lookup failed.");const projected2=attributes.segment(segment.id,{label:entry.label,...formatValue===void 0?{}:{formatValue:value=>formatValue(value,entry)}});if(!projected2.ok)throw new Error("Internal invariant breach: MeterGroup segment projection failed.");const slot=projectSegment(segment.start,segment.end,entry,projected2.value);slotsByID.set(slot.id,slot);return slot}));const projected=Object.freeze({state,attributes,slotsByID,slot:Object.freeze({segments,max:state.max,total:state.total,remaining:state.remaining,percentage:Number(attributes.root["data-percentage"]),zone:state.zone,valueText:props.formatTotal?.(state.total,state.max)??`${state.total} / ${state.max}`})});return active.value?projected:void 0});onScopeDispose(()=>{active.value=false;void projection.value});provide(meterGroupKey,{projection});const content=()=>projection.value===void 0?void 0:slots["default"]?.(projection.value.slot);return()=>{const current=projection.value;if(current===void 0)return null;const projected=getMeterGroupRootAttributes(current.state,{...props.label===void 0?{}:{label:props.label},...typeof attrs["aria-labelledby"]==="string"?{labelledBy:attrs["aria-labelledby"]}:{},...typeof attrs["aria-describedby"]==="string"?{describedBy:attrs["aria-describedby"]}:{}});return h(Primitive,mergeProps(attrs,projected,{as:props.as,asChild:props.asChild}),{default:content})}}});const MeterGroupTrack=defineComponent({name:"SectileMeterGroupTrack",inheritAttrs:false,props:partProps,setup(props,{attrs,slots}){const root=useMeterGroup("MeterGroupTrack");return()=>h(Primitive,mergeProps(attrs,readProjection(root).attributes.track,{as:props.as,asChild:props.asChild}),slots)}});const MeterGroupSegment=defineComponent({name:"SectileMeterGroupSegment",inheritAttrs:false,props:keyedPartProps,slots:Object,setup(props,{attrs,slots}){const root=useMeterGroup("MeterGroupSegment");const segment=computed(()=>segmentByID(root,props.id??"","MeterGroupSegment"));provide(meterGroupEntryKey,{segment});return()=>{const current=segment.value;const projected=readProjection(root).attributes.segment(current.id,{label:current.label,formatValue:()=>current.valueText});if(!projected.ok)throw new TypeError(`MeterGroupSegment id ${current.id} is unavailable.`);return h(Primitive,mergeProps(attrs,projected.value,{as:props.as,asChild:props.asChild}),{default:()=>slots["default"]?.(current)})}}});const MeterGroupIndicator=entryPart("SectileMeterGroupIndicator","indicator","div",segment=>({"aria-hidden":"true","data-percentage":segment.percentage,"data-start-percentage":segment.startPercentage,"data-end-percentage":segment.endPercentage,style:[`--sectile-meter-group-percentage: ${segment.percentage}%`,`--sectile-meter-group-start-percentage: ${segment.startPercentage}%`,`--sectile-meter-group-end-percentage: ${segment.endPercentage}%`].join("; ")}));const MeterGroupValueText=defineComponent({name:"SectileMeterGroupValueText",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"span"},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const root=useMeterGroup("MeterGroupValueText");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"meter-group","data-part":"value-text"}),{default:()=>slots["default"]?.(readProjection(root).slot)??readProjection(root).slot.valueText})}});const MeterGroupList=meterGroupPart("SectileMeterGroupList","list","ul",{"aria-hidden":"true"});const MeterGroupItem=defineComponent({name:"SectileMeterGroupItem",inheritAttrs:false,props:{id:{type:String,required:true},as:{type:[String,Object,Function],default:"li"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useMeterGroup("MeterGroupItem");const segment=computed(()=>segmentByID(root,props.id,"MeterGroupItem"));provide(meterGroupEntryKey,{segment});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"meter-group","data-part":"item","data-id":segment.value.id,"aria-hidden":"true"}),{default:()=>slots["default"]?.(segment.value)})}});const MeterGroupItemIndicator=entryPart("SectileMeterGroupItemIndicator","item-indicator","span",segment=>({"aria-hidden":"true","data-percentage":segment.percentage}));const MeterGroupItemLabel=entryTextPart("SectileMeterGroupItemLabel","item-label",segment=>segment.label);const MeterGroupItemValue=entryTextPart("SectileMeterGroupItemValue","item-value",segment=>segment.valueText);function projectSegment(start,end,entry,attributes){return Object.freeze({id:entry.id,label:entry.label,value:String(attributes["aria-valuenow"]),valueText:String(attributes["aria-valuetext"]),start,end,percentage:Number(attributes["data-percentage"]),startPercentage:Number(attributes["data-start-percentage"]),endPercentage:Number(attributes["data-end-percentage"])})}function segmentByID(root,id,part){const segment=readProjection(root).slotsByID.get(id);if(segment===void 0)throw new TypeError(`${part} id ${id} is unavailable.`);return segment}function readProjection(root){const current=root.projection.value;if(current===void 0)throw new TypeError("MeterGroup is disposed.");return current}function meterGroupPart(name,part,defaultAs="div",extra={}){return defineComponent({name,inheritAttrs:false,props:{as:{type:[String,Object,Function],default:defaultAs},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){useMeterGroup(name);return()=>h(Primitive,mergeProps(attrs,extra,{as:props.as,asChild:props.asChild,"data-scope":"meter-group","data-part":part}),slots)}})}function entryPart(name,part,defaultAs,project){return defineComponent({name,inheritAttrs:false,props:{as:{type:[String,Object,Function],default:defaultAs},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const entry=useMeterGroupEntry(name);return()=>h(Primitive,mergeProps(attrs,project(entry.segment.value),{as:props.as,asChild:props.asChild,"data-scope":"meter-group","data-part":part,"data-id":entry.segment.value.id}),slots)}})}function entryTextPart(name,part,text){return defineComponent({name,inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"span"},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const entry=useMeterGroupEntry(name);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"meter-group","data-part":part,"data-id":entry.segment.value.id}),{default:()=>slots["default"]?.(entry.segment.value)??text(entry.segment.value)})}})}function useMeterGroup(part){const root=inject(meterGroupKey);if(root===void 0)throw new TypeError(`${part} must be used inside MeterGroupRoot.`);return root}function useMeterGroupEntry(part){const entry=inject(meterGroupEntryKey);if(entry===void 0)throw new TypeError(`${part} must be used inside MeterGroupSegment or MeterGroupItem.`);return entry}export{MeterGroupIndicator,MeterGroupItem,MeterGroupItemIndicator,MeterGroupItemLabel,MeterGroupItemValue,MeterGroupList,MeterGroupRoot,MeterGroupSegment,MeterGroupTrack,MeterGroupValueText};
2
2
  //# sourceMappingURL=meter-group.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/meter-group.ts"],"mappings":"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","names":[],"file":"meter-group.js"}
1
+ {"version":3,"sources":["../src/meter-group.ts"],"mappings":"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","names":["projected"],"file":"meter-group.js"}
@@ -1,2 +1,2 @@
1
- import{computed,defineComponent,h,inject,mergeProps,onBeforeUnmount,onMounted,provide,shallowRef,watch}from"vue";import{createMultiThumbSlider}from"@sectile/dom/multi-thumb-slider";import{createSliderControllerFromRange}from"@sectile/dom/slider";import{hiddenValueSubmissionCapabilities,useCompositeFormControl}from"./form/control.js";import{Primitive}from"./primitive.js";import{useControlledStateInvariant}from"./internal/controlled-state.js";const key=Symbol("SectileMultiThumbSliderRoot");const partProps={as:{type:[String,Object,Function],default:"span"},asChild:{type:Boolean,default:false}};const MultiThumbSliderRoot=defineComponent({name:"SectileMultiThumbSliderRoot",inheritAttrs:false,props:{thumbs:{type:Array,required:true},modelValue:{type:Array,default:void 0},defaultValue:{type:Array,default:void 0},min:{type:[Number,String],default:0},max:{type:[Number,String],default:100},step:{type:[Number,String],default:1},orientation:{type:String,default:"horizontal"},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false},label:{type:String,default:void 0},getThumbLabel:{type:Function,default:void 0},formatValue:{type:Function,default:void 0},policies:{type:Object,default:void 0},name:{type:String,default:void 0},form:{type:String,default:void 0},required:{type:Boolean,default:false},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},emits:{"update:modelValue":_values=>true},slots:Object,setup(props,{attrs,emit,slots}){const root=shallowRef();const track=shallowRef();const submissions=new Map;const connection=shallowRef();const local=shallowRef(normalizeValues(props.modelValue??props.defaultValue??props.thumbs.map(()=>props.min)));const controlled=useControlledStateInvariant("MultiThumbSliderRoot","modelValue",()=>props.modelValue);const rangeController=computed(()=>{const result=createSliderControllerFromRange({min:String(props.min),max:String(props.max),step:String(props.step)});if(!result.ok)throw new TypeError(result.error.message);return result.value});const current=computed(()=>normalizeValues(props.modelValue??local.value));const percentages=computed(()=>current.value.map(value=>{const tick=rangeController.value.range.tickOf(value);if(tick===null)throw new TypeError(`Multi-thumb slider value ${value} is outside its exact range.`);return rangeController.value.range.count===0?0:tick/rangeController.value.range.count*100}));const active=shallowRef(props.thumbs[0]??null);const participation=useCompositeFormControl({root:()=>root.value??null,focusTarget:()=>root.value?.querySelector("[data-sectile-multi-thumb]")??root.value??null,submissions:()=>current.value.flatMap((_value,index)=>{const element=submissions.get(index);return element===void 0?[]:[{element:()=>element,relativeName:[index],capabilities:hiddenValueSubmissionCapabilities}]})});const state=computed(()=>Object.freeze({values:current.value,percentages:percentages.value,activeThumb:active.value,disabled:props.disabled,readonly:props.readonly}));const ticks=values=>values.map(value=>{const tick=rangeController.value.range.tickOf(value);if(tick===null)throw new TypeError(`Multi-thumb slider value ${value} is outside its exact range.`);return tick});const refresh=()=>{if(connection.value===void 0)return;local.value=connection.value.getValues();active.value=connection.value.getSnapshot().state.cursor.current};const connect=()=>{connection.value?.disconnect();if(root.value===void 0)return;connection.value=createMultiThumbSlider({root:root.value,...track.value===void 0?{}:{track:track.value},thumbs:props.thumbs,min:String(props.min),max:String(props.max),step:String(props.step),...controlled?{values:ticks(current.value)}:{defaultValues:ticks(current.value)},disabled:props.disabled,readOnly:props.readonly,orientation:props.orientation,...props.label===void 0?{}:{label:props.label},...props.getThumbLabel===void 0?{}:{getThumbLabel:props.getThumbLabel},...props.formatValue===void 0?{}:{formatValue:props.formatValue},...props.policies===void 0?{}:{policies:props.policies},onValuesChange:nextTicks=>{const next=Object.freeze(nextTicks.map(tick=>{const value=rangeController.value.range.valueAt(tick);if(value===null)throw new TypeError(`Multi-thumb slider tick ${tick} is outside its exact range.`);return value}));local.value=next;emit("update:modelValue",next)},onUpdate:refresh});refreshThumbs();refresh()};const refreshThumbs=()=>{if(root.value===void 0||connection.value===void 0)return;root.value.querySelectorAll("[data-sectile-multi-thumb]").forEach(element=>{const id=element.dataset["sectileMultiThumb"];if(id!==void 0)connection.value?.setThumbAttributes(element,id)})};provide(key,{state,thumbs:computed(()=>props.thumbs),orientation:computed(()=>props.orientation),connection:computed(()=>connection.value),registerTrack:element=>{track.value=element},registerThumb:(id,element)=>connection.value?.setThumbAttributes(element,id)});onMounted(connect);onBeforeUnmount(()=>connection.value?.disconnect());watch([()=>props.thumbs,()=>props.min,()=>props.max,()=>props.step,()=>props.orientation,()=>props.disabled,()=>props.readonly,()=>props.policies],connect);watch(()=>props.modelValue,values=>{if(!controlled||values===void 0||connection.value===void 0)return;const result=connection.value.syncControlledValues({values:ticks(normalizeValues(values)),highlightedValue:active.value});if(!result.ok)throw new TypeError(result.error.message);refresh()});return()=>{const style=Object.fromEntries(percentages.value.map((value,index)=>[`--sectile-thumb-${index}-percentage`,`${value}%`]));const visual=h(Primitive,mergeProps(participation.controlProps.value,attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{root.value=node instanceof HTMLElement?node:void 0},role:"group","aria-label":props.label,"data-scope":"multi-thumb-slider","data-part":"root","data-orientation":props.orientation,style}),{default:()=>slots["default"]?.(state.value)});if(props.name===void 0&&props.form===void 0&&!props.required&&!participation.participating)return visual;return[visual,...current.value.map((value,index)=>h("input",{key:index,ref:element=>{if(element instanceof HTMLInputElement)submissions.set(index,element);else submissions.delete(index)},type:"hidden",name:props.name,form:props.form,value,disabled:props.disabled}))]}}});const MultiThumbSliderTrack=defineComponent({name:"SectileMultiThumbSliderTrack",inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot("MultiThumbSliderTrack");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.registerTrack(node instanceof HTMLElement?node:void 0),"data-scope":"multi-thumb-slider","data-part":"track","data-orientation":root.orientation.value}),{default:()=>slots["default"]?.(root.state.value)})}});const MultiThumbSliderRange=defineComponent({name:"SectileMultiThumbSliderRange",inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot("MultiThumbSliderRange");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"aria-hidden":"true","data-scope":"multi-thumb-slider","data-part":"range",style:{"--sectile-range-start":`${Math.min(...root.state.value.percentages)}%`,"--sectile-range-end":`${Math.max(...root.state.value.percentages)}%`}}),{default:()=>slots["default"]?.(root.state.value)})}});const MultiThumbSliderThumb=defineComponent({name:"SectileMultiThumbSliderThumb",inheritAttrs:false,props:{value:{type:String,required:true},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("MultiThumbSliderThumb");const slot=computed(()=>{const index=root.thumbs.value.indexOf(props.value);return{...root.state.value,value:props.value,index,percentage:root.state.value.percentages[index]??0}});return()=>{const index=root.thumbs.value.indexOf(props.value);return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{if(node instanceof HTMLElement)root.registerThumb(props.value,node)},"data-sectile-multi-thumb":props.value,"data-scope":"multi-thumb-slider","data-part":"thumb","data-index":index,style:{"--sectile-thumb-percentage":`${root.state.value.percentages[index]??0}%`}}),{default:()=>slots["default"]?.({...slot.value,index,percentage:root.state.value.percentages[index]??0})})}}});function normalizeValues(values){return Object.freeze(values.map(String))}function useRoot(part){const root=inject(key);if(root===void 0)throw new TypeError(`${part} must be used inside MultiThumbSliderRoot.`);return root}export{MultiThumbSliderRange,MultiThumbSliderRoot,MultiThumbSliderThumb,MultiThumbSliderTrack};
1
+ import{computed,defineComponent,h,inject,mergeProps,nextTick,onBeforeUnmount,onMounted,provide,shallowRef,watch}from'vue';import{createMultiThumbSlider,getMultiThumbSliderThumbAttributes}from'@sectile/dom/multi-thumb-slider';import{tryCreateMultiThumbSliderState}from'@sectile/core/multi-thumb-slider';import{tryCreateSequence}from'@sectile/core/sequence';import{unwrap}from'@sectile/core/result';import{createSliderControllerFromRange}from'@sectile/dom/slider';import{hiddenValueSubmissionCapabilities,useCompositeFormControl,useFormSubmissionProjection,useFormControlFlags}from'./form/control.js';import{Primitive}from'./primitive.js';import{useControlledStateInvariant}from'./internal/controlled-state.js';const key=Symbol('SectileMultiThumbSliderRoot');const partProps={as:{type:[String,Object,Function],default:'span'},asChild:{type:Boolean,default:false}};export const MultiThumbSliderRoot=/* @__PURE__ */defineComponent({__sectileFormLabelMode:'labelledby',name:'SectileMultiThumbSliderRoot',inheritAttrs:false,props:{thumbs:{type:Array,required:true},modelValue:{type:Array,default:undefined},defaultValue:{type:Array,default:undefined},min:{type:[Number,String],default:0},max:{type:[Number,String],default:100},step:{type:[Number,String],default:1},orientation:{type:String,default:'horizontal'},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false},label:{type:String,default:undefined},getThumbLabel:{type:Function,default:undefined},formatValue:{type:Function,default:undefined},policies:{type:Object,default:undefined},name:{type:String,default:undefined},form:{type:String,default:undefined},required:{type:Boolean,default:false},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}},emits:{'update:modelValue':_values=>true},slots:Object,setup(props,{attrs,emit,slots}){const flags=useFormControlFlags(props);const root=shallowRef();const track=shallowRef();const submissions=new Map;const connection=shallowRef();const initialValues=normalizeValues(props.modelValue??props.defaultValue??props.thumbs.map(()=>props.min));const local=shallowRef(initialValues);let mounted=false,resetScheduled=false,connectScheduled=false;const controlled=useControlledStateInvariant('MultiThumbSliderRoot','modelValue',()=>props.modelValue);const rangeController=computed(()=>{const result=createSliderControllerFromRange({min:String(props.min),max:String(props.max),step:String(props.step)});if(!result.ok)throw new TypeError(result.error.message);return result.value});const current=computed(()=>normalizeValues(props.modelValue??local.value));const percentages=computed(()=>current.value.map(value=>{const tick=rangeController.value.range.tickOf(value);if(tick===null)throw new TypeError(`Multi-thumb slider value ${value} is outside its exact range.`);return rangeController.value.range.count===0?0:tick/rangeController.value.range.count*100}));const active=shallowRef(props.thumbs[0]??null);const submissionProps=useFormSubmissionProjection(props);const participation=useCompositeFormControl({root:()=>root.value??null,focusTarget:()=>root.value?.querySelector('[data-sectile-multi-thumb]')??root.value??null,submissions:()=>current.value.flatMap((_value,index)=>{const element=submissions.get(index);return element===undefined?[]:[{element:()=>element,relativeName:[index],capabilities:hiddenValueSubmissionCapabilities}]}),reset:()=>{if(controlled||resetScheduled)return;resetScheduled=true;queueMicrotask(()=>{resetScheduled=false;if(!mounted)return;local.value=initialValues;connect()})}});const state=computed(()=>Object.freeze({values:current.value,percentages:percentages.value,activeThumb:active.value,disabled:flags.value.disabled,readonly:flags.value.readonly}));const ticks=values=>values.map(value=>{const tick=rangeController.value.range.tickOf(value);if(tick===null)throw new TypeError(`Multi-thumb slider value ${value} is outside its exact range.`);return tick});const domain=computed(()=>connection.value?.domain??unwrap(tryCreateSequence(props.thumbs)));const projection=computed(()=>{const values=current.value;return connection.value?.getSnapshot().state??unwrap(tryCreateMultiThumbSliderState(domain.value,rangeController.value.range,ticks(values),null,props.policies))});const refresh=()=>{if(connection.value===undefined)return;local.value=connection.value.getValues();active.value=connection.value.getSnapshot().state.cursor.current};const connect=()=>{connectScheduled=false;connection.value?.disconnect();connection.value=undefined;if(!mounted||root.value===undefined)return;connection.value=createMultiThumbSlider({root:root.value,...track.value===undefined?{}:{track:track.value},thumbs:props.thumbs,min:String(props.min),max:String(props.max),step:String(props.step),...controlled?{values:ticks(current.value)}:{defaultValues:ticks(current.value)},disabled:flags.value.disabled,readOnly:flags.value.readonly,orientation:props.orientation,...props.label===undefined?{}:{label:props.label},...props.getThumbLabel===undefined?{}:{getThumbLabel:props.getThumbLabel},...props.formatValue===undefined?{}:{formatValue:props.formatValue},...props.policies===undefined?{}:{policies:props.policies},onValuesChange:nextTicks=>{const next=Object.freeze(nextTicks.map(tick=>{const value=rangeController.value.range.valueAt(tick);if(value===null)throw new TypeError(`Multi-thumb slider tick ${tick} is outside its exact range.`);return value}));local.value=next;emit('update:modelValue',next)},onUpdate:refresh});refreshThumbs();refresh()};const requestConnect=()=>{if(!mounted||connectScheduled)return;connectScheduled=true;void nextTick(()=>{if(!mounted||!connectScheduled)return;connect()})};const refreshThumbs=()=>{if(root.value===undefined||connection.value===undefined)return;root.value.querySelectorAll('[data-sectile-multi-thumb]').forEach(element=>{const id=element.dataset['sectileMultiThumb'];if(id!==undefined)connection.value?.setThumbAttributes(element,id)})};provide(key,{state,thumbs:computed(()=>props.thumbs),orientation:computed(()=>props.orientation),connection:computed(()=>connection.value),registerTrack:element=>{track.value=element},registerThumb:(id,element)=>{if(element===undefined)requestConnect();else connection.value?.setThumbAttributes(element,id)},requestConnect,thumbIndex:id=>domain.value.indexOf(id),attributesFor:id=>getMultiThumbSliderThumbAttributes({domain:domain.value,range:connection.value?.range??rangeController.value.range,state:projection.value,id,orientation:props.orientation,disabled:flags.value.disabled,readOnly:flags.value.readonly,...props.policies===undefined?{}:{policies:props.policies},...props.getThumbLabel===undefined?{}:{label:props.getThumbLabel(id)},...props.formatValue===undefined?{}:{formatValue:props.formatValue}})});onMounted(()=>{mounted=true;requestConnect()});onBeforeUnmount(()=>{mounted=false;resetScheduled=false;connectScheduled=false;connection.value?.disconnect();connection.value=undefined;root.value=undefined;track.value=undefined;submissions.clear()});watch([()=>props.thumbs,()=>props.min,()=>props.max,()=>props.step,()=>props.orientation,()=>flags.value.disabled,()=>flags.value.readonly,()=>props.policies,()=>props.label,()=>props.getThumbLabel,()=>props.formatValue,()=>props.modelValue],(next,previous)=>{if(!mounted)return;for(let index=0;index<next.length-1;index++){if(next[index]!==previous[index]){connect();return}}if(connectScheduled||!controlled||props.modelValue===undefined||connection.value===undefined)return;const result=connection.value.syncControlledValues({values:ticks(normalizeValues(props.modelValue)),highlightedValue:active.value});if(!result.ok)throw new TypeError(result.error.message);refresh()});watch([root,track],requestConnect,{flush:'post'});return()=>{const style=Object.fromEntries(percentages.value.map((value,index)=>[`--sectile-thumb-${index}-percentage`,`${value}%`]));const visual=h(Primitive,mergeProps(participation.controlProps.value,attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{root.value=node instanceof HTMLElement?node:undefined},role:'group','aria-label':props.label,'data-scope':'multi-thumb-slider','data-part':'root','data-orientation':props.orientation,style}),{default:()=>slots['default']?.(state.value)});if(props.name===undefined&&props.form===undefined&&!props.required&&!participation.participating)return visual;return[visual,...current.value.map((value,index)=>h('input',{key:index,ref:element=>{if(element instanceof HTMLInputElement)submissions.set(index,element);else submissions.delete(index)},type:'hidden',...submissionProps({element:()=>null,capabilities:hiddenValueSubmissionCapabilities,relativeName:[index]}),value}))]}}});export const MultiThumbSliderTrack=/* @__PURE__ */defineComponent({name:'SectileMultiThumbSliderTrack',inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot('MultiThumbSliderTrack');return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.registerTrack(node instanceof HTMLElement?node:undefined),'data-scope':'multi-thumb-slider','data-part':'track','data-orientation':root.orientation.value}),{default:()=>slots['default']?.(root.state.value)})}});export const MultiThumbSliderRange=/* @__PURE__ */defineComponent({name:'SectileMultiThumbSliderRange',inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot('MultiThumbSliderRange');const style=computed(()=>{const percentages=root.state.value.percentages;let start=percentages[0]??0,end=start;for(const percentage of percentages){start=Math.min(start,percentage);end=Math.max(end,percentage)}return{'--sectile-range-start':`${start}%`,'--sectile-range-end':`${end}%`}});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,'aria-hidden':'true','data-scope':'multi-thumb-slider','data-part':'range',style:style.value}),{default:()=>slots['default']?.(root.state.value)})}});export const MultiThumbSliderThumb=/* @__PURE__ */defineComponent({name:'SectileMultiThumbSliderThumb',inheritAttrs:false,props:{value:{type:String,required:true},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot('MultiThumbSliderThumb');onBeforeUnmount(root.requestConnect);watch(()=>props.value,root.requestConnect,{flush:'post'});const slot=computed(()=>{const index=root.thumbIndex(props.value)??-1;return{...root.state.value,value:props.value,index,percentage:root.state.value.percentages[index]??0}});return()=>{const index=root.thumbIndex(props.value)??-1;return h(Primitive,mergeProps(attrs,root.attributesFor(props.value),{as:props.as,asChild:props.asChild,elementRef:node=>root.registerThumb(props.value,node instanceof HTMLElement?node:undefined),'data-sectile-multi-thumb':props.value,'data-scope':'multi-thumb-slider','data-part':'thumb','data-index':index,style:{'--sectile-thumb-percentage':`${root.state.value.percentages[index]??0}%`}}),{default:()=>slots['default']?.({...slot.value,index,percentage:root.state.value.percentages[index]??0})})}}});function normalizeValues(values){return Object.freeze(values.map(String))}function useRoot(part){const root=inject(key);if(root===undefined)throw new TypeError(`${part} must be used inside MultiThumbSliderRoot.`);return root}
2
2
  //# sourceMappingURL=multi-thumb-slider.js.map