@vertz/ui-primitives 0.2.41 → 0.2.43

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 (232) hide show
  1. package/dist/shared/chunk-06m8prfg.js +52 -0
  2. package/dist/shared/chunk-0n9jj8xr.js +24 -0
  3. package/dist/shared/chunk-1ben27xq.js +317 -0
  4. package/dist/shared/chunk-1j2mj0sa.js +45 -0
  5. package/dist/shared/chunk-250hj18f.js +243 -0
  6. package/dist/shared/chunk-2h4m9c71.js +38 -0
  7. package/dist/shared/chunk-2sbx20hv.js +128 -0
  8. package/dist/shared/chunk-2ye674gr.js +70 -0
  9. package/dist/shared/chunk-34d8385y.js +15 -0
  10. package/dist/shared/chunk-4d7bm8h0.js +113 -0
  11. package/dist/shared/chunk-4zjgxr7x.js +157 -0
  12. package/dist/shared/chunk-5c150wvr.js +140 -0
  13. package/dist/shared/chunk-5gycdypd.js +58 -0
  14. package/dist/shared/chunk-6mm7fhp8.js +105 -0
  15. package/dist/shared/chunk-6zmnqvh6.js +109 -0
  16. package/dist/shared/{chunk-yy3ft5mb.js → chunk-7amn5d71.js} +2 -2
  17. package/dist/shared/chunk-7pbff2hg.js +118 -0
  18. package/dist/shared/chunk-7zpjshwz.js +194 -0
  19. package/dist/shared/chunk-993ff51d.js +155 -0
  20. package/dist/shared/chunk-9pdt5aw7.js +24 -0
  21. package/dist/shared/chunk-a71m4xkv.js +106 -0
  22. package/dist/shared/chunk-aj8m39pk.js +127 -0
  23. package/dist/shared/chunk-ajawpc05.js +305 -0
  24. package/dist/shared/chunk-b7mzwqhj.js +125 -0
  25. package/dist/shared/chunk-bb887de4.js +200 -0
  26. package/dist/shared/chunk-bfsmbrxc.js +111 -0
  27. package/dist/shared/chunk-c2f63m5n.js +56 -0
  28. package/dist/shared/chunk-c5r3s5km.js +263 -0
  29. package/dist/shared/chunk-caba5bhd.js +427 -0
  30. package/dist/shared/chunk-crym07yc.js +264 -0
  31. package/dist/shared/{chunk-5964gmv0.js → chunk-csjtyvam.js} +62 -88
  32. package/dist/shared/chunk-d6rtejz3.js +128 -0
  33. package/dist/shared/chunk-dvaf0bmq.js +140 -0
  34. package/dist/shared/chunk-dwkv9ya6.js +22 -0
  35. package/dist/shared/chunk-e0ckxrjg.js +41 -0
  36. package/dist/shared/chunk-ennxcymj.js +225 -0
  37. package/dist/shared/{chunk-1jd1n0dt.js → chunk-ey38de46.js} +19 -47
  38. package/dist/shared/chunk-f0v1gs5e.js +52 -0
  39. package/dist/shared/chunk-f86rsf84.js +231 -0
  40. package/dist/shared/{chunk-3sahbk4d.js → chunk-fdse46x5.js} +6 -1
  41. package/dist/shared/chunk-gj4hrssn.js +135 -0
  42. package/dist/shared/chunk-gyvq4gk9.js +24 -0
  43. package/dist/shared/chunk-hbnps9sq.js +229 -0
  44. package/dist/shared/{chunk-fhss32ya.js → chunk-hdmpyeq9.js} +43 -132
  45. package/dist/shared/chunk-hgnkd4he.js +256 -0
  46. package/dist/shared/chunk-hpcyffm7.js +185 -0
  47. package/dist/shared/chunk-hpmvwx0h.js +99 -0
  48. package/dist/shared/chunk-hz0e504p.js +69 -0
  49. package/dist/shared/chunk-hzk4wfq9.js +43 -0
  50. package/dist/shared/chunk-j7znzkpa.js +48 -0
  51. package/dist/shared/chunk-j9kxgrnn.js +167 -0
  52. package/dist/shared/chunk-jetwnv0w.js +130 -0
  53. package/dist/shared/chunk-jjdg26c1.js +155 -0
  54. package/dist/shared/chunk-k0m4yh86.js +123 -0
  55. package/dist/shared/chunk-k43q9cjr.js +82 -0
  56. package/dist/shared/chunk-k9k8tbr5.js +119 -0
  57. package/dist/shared/chunk-meaj7br1.js +232 -0
  58. package/dist/shared/chunk-mgj0n08k.js +34 -0
  59. package/dist/shared/chunk-mjz4rp6c.js +46 -0
  60. package/dist/shared/chunk-n4rr5gme.js +239 -0
  61. package/dist/shared/chunk-nk55etpp.js +65 -0
  62. package/dist/shared/chunk-nkh1ks3k.js +264 -0
  63. package/dist/shared/chunk-pgvpvbpe.js +26 -0
  64. package/dist/shared/chunk-pma8gnv7.js +178 -0
  65. package/dist/shared/chunk-q7xv6xze.js +131 -0
  66. package/dist/shared/chunk-qey801nq.js +22 -0
  67. package/dist/shared/chunk-s6b4c3tj.js +58 -0
  68. package/dist/shared/chunk-sq27a4h0.js +36 -0
  69. package/dist/shared/chunk-taa5pj15.js +103 -0
  70. package/dist/shared/chunk-tc5rpvyx.js +127 -0
  71. package/dist/shared/chunk-tescm0b3.js +192 -0
  72. package/dist/shared/chunk-tkftdwnq.js +71 -0
  73. package/dist/shared/chunk-tqhnjcfp.js +116 -0
  74. package/dist/shared/chunk-vfknb5ht.js +183 -0
  75. package/dist/shared/chunk-vsc369w3.js +185 -0
  76. package/dist/shared/chunk-whq9s8v5.js +301 -0
  77. package/dist/shared/{chunk-hze1f32t.js → chunk-wrqddgaj.js} +1 -1
  78. package/dist/shared/chunk-yzbmkx4r.js +155 -0
  79. package/dist/shared/chunk-zaen0ajc.js +347 -0
  80. package/dist/src/accordion/accordion-composed.js +1 -1
  81. package/dist/src/accordion/accordion.js +1 -1
  82. package/dist/src/alert/alert-composed.js +1 -1
  83. package/dist/src/alert-dialog/alert-dialog-composed.js +1 -1
  84. package/dist/src/alert-dialog/alert-dialog.js +1 -1
  85. package/dist/src/avatar/avatar-composed.js +1 -1
  86. package/dist/src/badge/badge-composed.js +1 -1
  87. package/dist/src/badge/badge.js +1 -1
  88. package/dist/src/breadcrumb/breadcrumb-composed.js +1 -1
  89. package/dist/src/button/button-composed.js +1 -1
  90. package/dist/src/button/button.js +1 -1
  91. package/dist/src/calendar/calendar-composed.js +1 -1
  92. package/dist/src/calendar/calendar.js +1 -1
  93. package/dist/src/card/card-composed.js +1 -1
  94. package/dist/src/carousel/carousel-composed.js +1 -1
  95. package/dist/src/carousel/carousel.js +1 -1
  96. package/dist/src/checkbox/checkbox-composed.js +1 -1
  97. package/dist/src/checkbox/checkbox.js +1 -1
  98. package/dist/src/collapsible/collapsible-composed.js +1 -1
  99. package/dist/src/collapsible/collapsible.js +1 -1
  100. package/dist/src/combobox/combobox-composed.js +1 -1
  101. package/dist/src/combobox/combobox.js +1 -1
  102. package/dist/src/command/command-composed.js +1 -1
  103. package/dist/src/command/command.js +1 -1
  104. package/dist/src/composed/with-styles.js +1 -1
  105. package/dist/src/context-menu/context-menu-composed.js +1 -1
  106. package/dist/src/context-menu/context-menu.js +1 -1
  107. package/dist/src/date-picker/date-picker-composed.js +1 -1
  108. package/dist/src/date-picker/date-picker.js +1 -1
  109. package/dist/src/dialog/dialog-composed.js +1 -1
  110. package/dist/src/dialog/dialog-stack-parts.js +1 -1
  111. package/dist/src/dialog/dialog.js +1 -1
  112. package/dist/src/dropdown-menu/dropdown-menu-composed.js +1 -1
  113. package/dist/src/dropdown-menu/dropdown-menu.js +1 -1
  114. package/dist/src/empty-state/empty-state-composed.js +1 -1
  115. package/dist/src/form-group/form-group-composed.js +1 -1
  116. package/dist/src/hover-card/hover-card-composed.js +1 -1
  117. package/dist/src/hover-card/hover-card.js +1 -1
  118. package/dist/src/input/input-composed.js +1 -1
  119. package/dist/src/label/label-composed.js +1 -1
  120. package/dist/src/list/list-composed.js +1 -1
  121. package/dist/src/menu/menu-composed.js +1 -1
  122. package/dist/src/menu/menu.js +1 -1
  123. package/dist/src/menubar/menubar-composed.js +1 -1
  124. package/dist/src/menubar/menubar.js +1 -1
  125. package/dist/src/navigation-menu/navigation-menu-composed.js +1 -1
  126. package/dist/src/navigation-menu/navigation-menu.js +1 -1
  127. package/dist/src/pagination/pagination-composed.js +1 -1
  128. package/dist/src/popover/popover-composed.js +1 -1
  129. package/dist/src/popover/popover.js +1 -1
  130. package/dist/src/progress/progress-composed.js +1 -1
  131. package/dist/src/progress/progress.js +1 -1
  132. package/dist/src/radio/radio-composed.js +1 -1
  133. package/dist/src/radio/radio.js +1 -1
  134. package/dist/src/resizable-panel/resizable-panel-composed.js +1 -1
  135. package/dist/src/resizable-panel/resizable-panel.js +1 -1
  136. package/dist/src/scroll-area/scroll-area-composed.js +1 -1
  137. package/dist/src/scroll-area/scroll-area.js +1 -1
  138. package/dist/src/select/select-composed.js +1 -1
  139. package/dist/src/select/select.js +1 -1
  140. package/dist/src/separator/separator-composed.js +1 -1
  141. package/dist/src/sheet/sheet-composed.js +1 -1
  142. package/dist/src/sheet/sheet.js +1 -1
  143. package/dist/src/skeleton/skeleton-composed.js +1 -1
  144. package/dist/src/slider/slider-composed.js +1 -1
  145. package/dist/src/slider/slider.js +1 -1
  146. package/dist/src/switch/switch-composed.js +1 -1
  147. package/dist/src/switch/switch.js +1 -1
  148. package/dist/src/table/table-composed.js +1 -1
  149. package/dist/src/tabs/tabs-composed.js +1 -1
  150. package/dist/src/tabs/tabs.js +1 -1
  151. package/dist/src/textarea/textarea-composed.js +1 -1
  152. package/dist/src/toast/toast.js +1 -1
  153. package/dist/src/toggle/toggle-composed.js +1 -1
  154. package/dist/src/toggle/toggle.js +1 -1
  155. package/dist/src/toggle-group/toggle-group-composed.js +1 -1
  156. package/dist/src/toggle-group/toggle-group.js +1 -1
  157. package/dist/src/tooltip/tooltip-composed.js +1 -1
  158. package/dist/src/tooltip/tooltip.js +1 -1
  159. package/package.json +3 -3
  160. package/dist/shared/chunk-144kbnmx.js +0 -95
  161. package/dist/shared/chunk-1ewxfgsa.js +0 -167
  162. package/dist/shared/chunk-1hm0mbke.js +0 -258
  163. package/dist/shared/chunk-22rt6ws9.js +0 -69
  164. package/dist/shared/chunk-2ssqz188.js +0 -162
  165. package/dist/shared/chunk-33he7ay9.js +0 -218
  166. package/dist/shared/chunk-3jack97k.js +0 -509
  167. package/dist/shared/chunk-75pegjs7.js +0 -26
  168. package/dist/shared/chunk-862x7dja.js +0 -398
  169. package/dist/shared/chunk-8pk1pn5h.js +0 -215
  170. package/dist/shared/chunk-8t0nm721.js +0 -152
  171. package/dist/shared/chunk-94twh4s4.js +0 -28
  172. package/dist/shared/chunk-9yb26c0w.js +0 -232
  173. package/dist/shared/chunk-a82r2pnq.js +0 -67
  174. package/dist/shared/chunk-axpbdpgx.js +0 -177
  175. package/dist/shared/chunk-b3j6mym6.js +0 -203
  176. package/dist/shared/chunk-b4zzg457.js +0 -410
  177. package/dist/shared/chunk-b9qxfcsy.js +0 -60
  178. package/dist/shared/chunk-bc2qqkhr.js +0 -194
  179. package/dist/shared/chunk-bv12nkdm.js +0 -149
  180. package/dist/shared/chunk-bvxc1ww4.js +0 -164
  181. package/dist/shared/chunk-czv0kqj4.js +0 -107
  182. package/dist/shared/chunk-d83ag07h.js +0 -189
  183. package/dist/shared/chunk-de18ashk.js +0 -134
  184. package/dist/shared/chunk-dvk4h36t.js +0 -140
  185. package/dist/shared/chunk-dxvnerw2.js +0 -353
  186. package/dist/shared/chunk-e399pzdq.js +0 -241
  187. package/dist/shared/chunk-e4qha9as.js +0 -180
  188. package/dist/shared/chunk-eb2d9v6k.js +0 -68
  189. package/dist/shared/chunk-ect26sp5.js +0 -353
  190. package/dist/shared/chunk-ev367pq3.js +0 -102
  191. package/dist/shared/chunk-fjykbv0v.js +0 -214
  192. package/dist/shared/chunk-gdddk6nh.js +0 -96
  193. package/dist/shared/chunk-ghkw5bjq.js +0 -55
  194. package/dist/shared/chunk-hfjtkytb.js +0 -310
  195. package/dist/shared/chunk-hpvjfj0j.js +0 -31
  196. package/dist/shared/chunk-jpyjk616.js +0 -52
  197. package/dist/shared/chunk-k6d53tne.js +0 -206
  198. package/dist/shared/chunk-knzg86am.js +0 -168
  199. package/dist/shared/chunk-ktbf6xrt.js +0 -179
  200. package/dist/shared/chunk-m8y2p66x.js +0 -252
  201. package/dist/shared/chunk-metxdt5x.js +0 -28
  202. package/dist/shared/chunk-mgae1d93.js +0 -157
  203. package/dist/shared/chunk-mtx2cfbx.js +0 -175
  204. package/dist/shared/chunk-n436p5cb.js +0 -260
  205. package/dist/shared/chunk-nj420k31.js +0 -54
  206. package/dist/shared/chunk-nsmvdxgp.js +0 -213
  207. package/dist/shared/chunk-pcms04vq.js +0 -162
  208. package/dist/shared/chunk-pqskzq8t.js +0 -79
  209. package/dist/shared/chunk-pwr60kyd.js +0 -321
  210. package/dist/shared/chunk-pzknpa1y.js +0 -327
  211. package/dist/shared/chunk-q77y3rg4.js +0 -189
  212. package/dist/shared/chunk-qhnany7w.js +0 -179
  213. package/dist/shared/chunk-rdr0rtpr.js +0 -131
  214. package/dist/shared/chunk-rj52ty6r.js +0 -147
  215. package/dist/shared/chunk-rnqc7735.js +0 -125
  216. package/dist/shared/chunk-rtk30950.js +0 -202
  217. package/dist/shared/chunk-s0xgd8vg.js +0 -266
  218. package/dist/shared/chunk-s415735j.js +0 -357
  219. package/dist/shared/chunk-s62e7jf4.js +0 -30
  220. package/dist/shared/chunk-snd8e6r8.js +0 -418
  221. package/dist/shared/chunk-spng4yb9.js +0 -73
  222. package/dist/shared/chunk-t887wwjc.js +0 -168
  223. package/dist/shared/chunk-tn0m98j8.js +0 -42
  224. package/dist/shared/chunk-v0b5pkcq.js +0 -30
  225. package/dist/shared/chunk-v5tj7veh.js +0 -284
  226. package/dist/shared/chunk-vkscwzpr.js +0 -294
  227. package/dist/shared/chunk-vv187snj.js +0 -112
  228. package/dist/shared/chunk-xv4wd0kf.js +0 -293
  229. package/dist/shared/chunk-y1hpsqzy.js +0 -185
  230. package/dist/shared/chunk-yfzddvxc.js +0 -71
  231. package/dist/shared/chunk-yzgzx2dh.js +0 -311
  232. package/dist/shared/chunk-z5j7ztf2.js +0 -467
@@ -0,0 +1,52 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-q7xbcj9q.js";
4
+ import {
5
+ uniqueId
6
+ } from "./chunk-8y1jf6xr.js";
7
+ import {
8
+ Keys,
9
+ isKey
10
+ } from "./chunk-7867pr13.js";
11
+
12
+ // src/switch/switch-composed.tsx
13
+ import { jsxDEV as jsxDEV_7x81h0kn } from "@vertz/ui/jsx-dev-runtime";
14
+ function ComposedSwitchRoot({
15
+ classes,
16
+ defaultChecked = false,
17
+ disabled = false,
18
+ onCheckedChange
19
+ }) {
20
+ let checked = defaultChecked;
21
+ function toggle() {
22
+ if (disabled)
23
+ return;
24
+ checked = !checked;
25
+ onCheckedChange?.(checked);
26
+ }
27
+ return jsxDEV_7x81h0kn("button", {
28
+ type: "button",
29
+ role: "switch",
30
+ id: uniqueId("switch"),
31
+ "aria-checked": checked ? "true" : "false",
32
+ "data-state": checked ? "checked" : "unchecked",
33
+ disabled,
34
+ "aria-disabled": disabled ? "true" : undefined,
35
+ class: cn(classes?.root),
36
+ onClick: toggle,
37
+ onKeydown: (e) => {
38
+ if (isKey(e, Keys.Space)) {
39
+ e.preventDefault();
40
+ toggle();
41
+ }
42
+ },
43
+ children: jsxDEV_7x81h0kn("span", {
44
+ "data-part": "thumb",
45
+ "data-state": checked ? "checked" : "unchecked",
46
+ class: cn(classes?.thumb)
47
+ }, undefined, false, undefined, this)
48
+ }, undefined, false, undefined, this);
49
+ }
50
+ var ComposedSwitch = ComposedSwitchRoot;
51
+
52
+ export { ComposedSwitch };
@@ -0,0 +1,24 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-q7xbcj9q.js";
4
+
5
+ // src/badge/badge-composed.tsx
6
+ import { jsxDEV as jsxDEV_7x81h0kn } from "@vertz/ui/jsx-dev-runtime";
7
+ function ComposedBadgeRoot({
8
+ classes,
9
+ className,
10
+ class: classProp,
11
+ children,
12
+ style,
13
+ ...rest
14
+ }) {
15
+ return jsxDEV_7x81h0kn("span", {
16
+ class: cn(classes?.base, className ?? classProp),
17
+ style,
18
+ ...rest,
19
+ children
20
+ }, undefined, false, undefined, this);
21
+ }
22
+ var ComposedBadge = ComposedBadgeRoot;
23
+
24
+ export { ComposedBadge };
@@ -0,0 +1,317 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-q7xbcj9q.js";
4
+ import {
5
+ linkedIds
6
+ } from "./chunk-8y1jf6xr.js";
7
+ import {
8
+ Keys,
9
+ isKey
10
+ } from "./chunk-7867pr13.js";
11
+
12
+ // src/navigation-menu/navigation-menu-composed.tsx
13
+ import { jsxDEV as jsxDEV_7x81h0kn } from "@vertz/ui/jsx-dev-runtime";
14
+ import { createContext, ref, useContext } from "@vertz/ui";
15
+ var NavigationMenuContext = createContext(undefined, "@vertz/ui-primitives::NavigationMenuContext");
16
+ var NavigationMenuListContext = createContext(undefined, "@vertz/ui-primitives::NavigationMenuListContext");
17
+ var NavigationMenuItemContext = createContext(undefined, "@vertz/ui-primitives::NavigationMenuItemContext");
18
+ function useNavigationMenuContext(componentName) {
19
+ const ctx = useContext(NavigationMenuContext);
20
+ if (!ctx) {
21
+ throw new Error(`<NavigationMenu.${componentName}> must be used inside <NavigationMenu>. ` + "Ensure it is a direct or nested child of the NavigationMenu root component.");
22
+ }
23
+ return ctx;
24
+ }
25
+ function useNavigationMenuListContext(componentName) {
26
+ const ctx = useContext(NavigationMenuListContext);
27
+ if (ctx === undefined && !useContext(NavigationMenuContext)) {
28
+ throw new Error(`<NavigationMenu.${componentName}> must be used inside <NavigationMenu.List>. ` + "Ensure it is a direct or nested child of the NavigationMenu.List component.");
29
+ }
30
+ }
31
+ function useNavigationMenuItemContext(componentName) {
32
+ const ctx = useContext(NavigationMenuItemContext);
33
+ if (!ctx) {
34
+ throw new Error(`<NavigationMenu.${componentName}> must be used inside <NavigationMenu.Item>. ` + "Ensure it is a direct or nested child of the NavigationMenu.Item component.");
35
+ }
36
+ return ctx;
37
+ }
38
+ function NavMenuList({ children, className: cls, class: classProp }) {
39
+ const ctx = useNavigationMenuContext("List");
40
+ return jsxDEV_7x81h0kn("div", {
41
+ "data-part": "nav-list",
42
+ "data-navmenu-list": "",
43
+ class: cn(ctx.classes?.list, cls ?? classProp),
44
+ onKeydown: (event) => {
45
+ if (!isKey(event, Keys.ArrowLeft, Keys.ArrowRight, Keys.Home, Keys.End))
46
+ return;
47
+ const listEl = event.currentTarget;
48
+ const currentTriggers = [
49
+ ...listEl.querySelectorAll("[data-navmenu-trigger]")
50
+ ];
51
+ const focused = document.activeElement;
52
+ const currentIndex = currentTriggers.indexOf(focused);
53
+ if (currentIndex < 0)
54
+ return;
55
+ let nextIndex = -1;
56
+ if (isKey(event, Keys.ArrowRight)) {
57
+ event.preventDefault();
58
+ nextIndex = (currentIndex + 1) % currentTriggers.length;
59
+ } else if (isKey(event, Keys.ArrowLeft)) {
60
+ event.preventDefault();
61
+ nextIndex = (currentIndex - 1 + currentTriggers.length) % currentTriggers.length;
62
+ } else if (isKey(event, Keys.Home)) {
63
+ event.preventDefault();
64
+ nextIndex = 0;
65
+ } else if (isKey(event, Keys.End)) {
66
+ event.preventDefault();
67
+ nextIndex = currentTriggers.length - 1;
68
+ }
69
+ const nextTrigger = currentTriggers[nextIndex];
70
+ if (nextTrigger) {
71
+ for (let i = 0;i < currentTriggers.length; i++) {
72
+ currentTriggers[i]?.setAttribute("tabindex", i === nextIndex ? "0" : "-1");
73
+ }
74
+ nextTrigger.focus();
75
+ }
76
+ },
77
+ children
78
+ }, undefined, false, undefined, this);
79
+ }
80
+ function NavMenuItem({ value, children }) {
81
+ useNavigationMenuListContext("Item");
82
+ const ids = linkedIds("nav-menu");
83
+ const triggerRef = ref();
84
+ const contentRef = ref();
85
+ const itemCtx = {
86
+ value,
87
+ triggerId: ids.triggerId,
88
+ contentId: ids.contentId,
89
+ triggerRef,
90
+ contentRef
91
+ };
92
+ return jsxDEV_7x81h0kn(NavigationMenuItemContext.Provider, {
93
+ value: itemCtx,
94
+ children: jsxDEV_7x81h0kn("span", {
95
+ style: { display: "contents" },
96
+ "data-navmenu-item": "",
97
+ "data-value": value,
98
+ children
99
+ }, undefined, false, undefined, this)
100
+ }, undefined, false, undefined, this);
101
+ }
102
+ function NavMenuTrigger({ children, className: cls, class: classProp }) {
103
+ const ctx = useNavigationMenuContext("Trigger");
104
+ const itemCtx = useNavigationMenuItemContext("Trigger");
105
+ return jsxDEV_7x81h0kn("button", {
106
+ ref: itemCtx.triggerRef,
107
+ type: "button",
108
+ id: itemCtx.triggerId,
109
+ "aria-controls": itemCtx.contentId,
110
+ "data-navmenu-trigger": "",
111
+ "data-value": itemCtx.value,
112
+ "aria-expanded": "false",
113
+ "data-state": "closed",
114
+ class: cn(ctx.classes?.trigger, cls ?? classProp),
115
+ onClick: () => {
116
+ if (ctx.getActiveItem() === itemCtx.value) {
117
+ ctx.closeAll();
118
+ } else {
119
+ ctx.openItem(itemCtx.value);
120
+ }
121
+ },
122
+ onMouseenter: () => {
123
+ ctx.cancelTimers();
124
+ ctx.scheduleOpen(itemCtx.value);
125
+ },
126
+ onMouseleave: () => {
127
+ ctx.cancelTimers();
128
+ ctx.scheduleClose();
129
+ },
130
+ onKeydown: (event) => {
131
+ if (isKey(event, Keys.Enter, Keys.Space)) {
132
+ event.preventDefault();
133
+ ctx.openItem(itemCtx.value);
134
+ queueMicrotask(() => {
135
+ const content = itemCtx.contentRef.current;
136
+ if (content) {
137
+ const first = content.querySelector("a, button, [tabindex]");
138
+ if (first)
139
+ first.focus();
140
+ }
141
+ });
142
+ }
143
+ if (isKey(event, Keys.Escape)) {
144
+ event.preventDefault();
145
+ ctx.closeAll();
146
+ }
147
+ },
148
+ children
149
+ }, undefined, false, undefined, this);
150
+ }
151
+ function NavMenuContent({ children, className: cls, class: classProp }) {
152
+ const ctx = useNavigationMenuContext("Content");
153
+ const itemCtx = useNavigationMenuItemContext("Content");
154
+ return jsxDEV_7x81h0kn("div", {
155
+ ref: itemCtx.contentRef,
156
+ id: itemCtx.contentId,
157
+ "data-part": "nav-content",
158
+ "data-navmenu-content": "",
159
+ "data-value": itemCtx.value,
160
+ "aria-hidden": "true",
161
+ "data-state": "closed",
162
+ style: { display: "none" },
163
+ class: cn(ctx.classes?.content, cls ?? classProp),
164
+ onMouseenter: () => ctx.cancelTimers(),
165
+ onMouseleave: () => {
166
+ ctx.cancelTimers();
167
+ ctx.scheduleClose();
168
+ },
169
+ onKeydown: (event) => {
170
+ if (isKey(event, Keys.Escape)) {
171
+ event.preventDefault();
172
+ event.stopPropagation();
173
+ ctx.closeAll();
174
+ const trigger = itemCtx.triggerRef.current;
175
+ if (trigger)
176
+ trigger.focus();
177
+ }
178
+ },
179
+ children
180
+ }, undefined, false, undefined, this);
181
+ }
182
+ function NavMenuLink({ href, children, className: cls, class: classProp }) {
183
+ const ctx = useNavigationMenuContext("Link");
184
+ useNavigationMenuListContext("Link");
185
+ return jsxDEV_7x81h0kn("a", {
186
+ href,
187
+ "data-navmenu-link": "",
188
+ class: cn(ctx.classes?.link, cls ?? classProp),
189
+ children
190
+ }, undefined, false, undefined, this);
191
+ }
192
+ function NavMenuViewport({ className: cls, class: classProp }) {
193
+ const ctx = useNavigationMenuContext("Viewport");
194
+ return jsxDEV_7x81h0kn("div", {
195
+ "data-part": "nav-viewport",
196
+ "data-navmenu-viewport": "",
197
+ class: cn(ctx.classes?.viewport, cls ?? classProp)
198
+ }, undefined, false, undefined, this);
199
+ }
200
+ function ComposedNavigationMenuRoot({
201
+ children,
202
+ classes,
203
+ orientation = "horizontal",
204
+ delayOpen = 200,
205
+ delayClose = 300
206
+ }) {
207
+ const rootId = `nav-menu-${linkedIds("nav-root").triggerId}`;
208
+ const rootRef = ref();
209
+ const state = { activeItem: null, openTimeout: null, closeTimeout: null };
210
+ function cancelTimers() {
211
+ if (state.openTimeout) {
212
+ clearTimeout(state.openTimeout);
213
+ state.openTimeout = null;
214
+ }
215
+ if (state.closeTimeout) {
216
+ clearTimeout(state.closeTimeout);
217
+ state.closeTimeout = null;
218
+ }
219
+ }
220
+ function getRootEl() {
221
+ return rootRef.current ?? null;
222
+ }
223
+ function openItem(value) {
224
+ cancelTimers();
225
+ const root = getRootEl();
226
+ if (!root)
227
+ return;
228
+ if (state.activeItem && state.activeItem !== value) {
229
+ const prevTrigger = root.querySelector(`[data-navmenu-trigger][data-value="${state.activeItem}"]`);
230
+ const prevContent = root.querySelector(`[data-navmenu-content][data-value="${state.activeItem}"]`);
231
+ if (prevTrigger) {
232
+ prevTrigger.setAttribute("aria-expanded", "false");
233
+ prevTrigger.setAttribute("data-state", "closed");
234
+ }
235
+ if (prevContent) {
236
+ prevContent.setAttribute("data-state", "closed");
237
+ prevContent.setAttribute("aria-hidden", "true");
238
+ prevContent.style.display = "none";
239
+ }
240
+ }
241
+ const trigger = root.querySelector(`[data-navmenu-trigger][data-value="${value}"]`);
242
+ const content = root.querySelector(`[data-navmenu-content][data-value="${value}"]`);
243
+ if (!trigger || !content)
244
+ return;
245
+ state.activeItem = value;
246
+ trigger.setAttribute("aria-expanded", "true");
247
+ trigger.setAttribute("data-state", "open");
248
+ content.setAttribute("aria-hidden", "false");
249
+ content.setAttribute("data-state", "open");
250
+ content.style.display = "";
251
+ const viewport = root.querySelector("[data-navmenu-viewport]");
252
+ if (viewport && content.parentElement !== viewport) {
253
+ viewport.appendChild(content);
254
+ }
255
+ }
256
+ function closeAll() {
257
+ cancelTimers();
258
+ const root = getRootEl();
259
+ if (!root || !state.activeItem)
260
+ return;
261
+ const trigger = root.querySelector(`[data-navmenu-trigger][data-value="${state.activeItem}"]`);
262
+ const content = root.querySelector(`[data-navmenu-content][data-value="${state.activeItem}"]`);
263
+ if (trigger) {
264
+ trigger.setAttribute("aria-expanded", "false");
265
+ trigger.setAttribute("data-state", "closed");
266
+ }
267
+ if (content) {
268
+ content.setAttribute("data-state", "closed");
269
+ content.setAttribute("aria-hidden", "true");
270
+ content.style.display = "none";
271
+ }
272
+ state.activeItem = null;
273
+ }
274
+ function scheduleOpen(value) {
275
+ state.openTimeout = setTimeout(() => {
276
+ openItem(value);
277
+ state.openTimeout = null;
278
+ }, delayOpen);
279
+ }
280
+ function scheduleClose() {
281
+ state.closeTimeout = setTimeout(() => {
282
+ closeAll();
283
+ state.closeTimeout = null;
284
+ }, delayClose);
285
+ }
286
+ const ctx = {
287
+ rootId,
288
+ rootRef,
289
+ classes,
290
+ orientation,
291
+ getActiveItem: () => state.activeItem,
292
+ openItem,
293
+ closeAll,
294
+ scheduleOpen,
295
+ scheduleClose,
296
+ cancelTimers
297
+ };
298
+ return jsxDEV_7x81h0kn(NavigationMenuContext.Provider, {
299
+ value: ctx,
300
+ children: jsxDEV_7x81h0kn("nav", {
301
+ ref: rootRef,
302
+ id: rootId,
303
+ class: cn(classes?.root),
304
+ children
305
+ }, undefined, false, undefined, this)
306
+ }, undefined, false, undefined, this);
307
+ }
308
+ var ComposedNavigationMenu = Object.assign(ComposedNavigationMenuRoot, {
309
+ List: NavMenuList,
310
+ Item: NavMenuItem,
311
+ Trigger: NavMenuTrigger,
312
+ Content: NavMenuContent,
313
+ Link: NavMenuLink,
314
+ Viewport: NavMenuViewport
315
+ });
316
+
317
+ export { ComposedNavigationMenu };
@@ -0,0 +1,45 @@
1
+ import {
2
+ uniqueId
3
+ } from "./chunk-8y1jf6xr.js";
4
+ import {
5
+ Keys,
6
+ isKey
7
+ } from "./chunk-7867pr13.js";
8
+ import {
9
+ applyAttrs
10
+ } from "./chunk-2db2dnp3.js";
11
+
12
+ // src/toggle/toggle.tsx
13
+ import { jsxDEV as jsxDEV_7x81h0kn } from "@vertz/ui/jsx-dev-runtime";
14
+ function ToggleRoot(options = {}) {
15
+ const { defaultPressed = false, disabled = false, onPressedChange, ...attrs } = options;
16
+ let pressed = defaultPressed;
17
+ function toggle() {
18
+ if (disabled)
19
+ return;
20
+ pressed = !pressed;
21
+ onPressedChange?.(pressed);
22
+ }
23
+ const el = jsxDEV_7x81h0kn("button", {
24
+ type: "button",
25
+ id: uniqueId("toggle"),
26
+ "aria-pressed": pressed ? "true" : "false",
27
+ "data-state": pressed ? "on" : "off",
28
+ disabled,
29
+ "aria-disabled": disabled ? "true" : undefined,
30
+ onClick: toggle,
31
+ onKeydown: (e) => {
32
+ if (isKey(e, Keys.Space)) {
33
+ e.preventDefault();
34
+ toggle();
35
+ }
36
+ }
37
+ }, undefined, false, undefined, this);
38
+ applyAttrs(el, attrs);
39
+ return el;
40
+ }
41
+ var Toggle = {
42
+ Root: ToggleRoot
43
+ };
44
+
45
+ export { Toggle };
@@ -0,0 +1,243 @@
1
+ import {
2
+ createDismiss
3
+ } from "./chunk-a6wp8c32.js";
4
+ import {
5
+ createFloatingPosition
6
+ } from "./chunk-vef3sepw.js";
7
+ import {
8
+ setRovingTabindex
9
+ } from "./chunk-e2v1c9ex.js";
10
+ import {
11
+ linkedIds
12
+ } from "./chunk-8y1jf6xr.js";
13
+ import {
14
+ Keys,
15
+ handleListNavigation,
16
+ isKey
17
+ } from "./chunk-7867pr13.js";
18
+ import {
19
+ setDataState,
20
+ setExpanded,
21
+ setHidden,
22
+ setHiddenAnimated
23
+ } from "./chunk-vevfhpc9.js";
24
+ import {
25
+ applyAttrs
26
+ } from "./chunk-2db2dnp3.js";
27
+
28
+ // src/menubar/menubar.tsx
29
+ import { jsxDEV as jsxDEV_7x81h0kn } from "@vertz/ui/jsx-dev-runtime";
30
+ import { signal } from "@vertz/ui";
31
+ function MenubarRoot(options = {}) {
32
+ const { onSelect, positioning, ...attrs } = options;
33
+ const state = { activeMenu: signal(null) };
34
+ const triggers = [];
35
+ const menus = new Map;
36
+ let floatingCleanup = null;
37
+ let dismissCleanup = null;
38
+ function handleClickOutside(event) {
39
+ const target = event.target;
40
+ if (!root.contains(target)) {
41
+ closeAll();
42
+ }
43
+ }
44
+ function closeAll() {
45
+ for (const [, menu] of menus) {
46
+ setExpanded(menu.trigger, false);
47
+ setDataState(menu.trigger, "closed");
48
+ setDataState(menu.content, "closed");
49
+ setHiddenAnimated(menu.content, true);
50
+ }
51
+ state.activeMenu.value = null;
52
+ if (positioning) {
53
+ floatingCleanup?.();
54
+ floatingCleanup = null;
55
+ dismissCleanup?.();
56
+ dismissCleanup = null;
57
+ } else {
58
+ document.removeEventListener("mousedown", handleClickOutside);
59
+ }
60
+ }
61
+ function openMenu(value) {
62
+ const current = state.activeMenu.peek();
63
+ if (current && current !== value) {
64
+ const prev = menus.get(current);
65
+ if (prev) {
66
+ setExpanded(prev.trigger, false);
67
+ setDataState(prev.trigger, "closed");
68
+ setDataState(prev.content, "closed");
69
+ setHiddenAnimated(prev.content, true);
70
+ }
71
+ if (positioning) {
72
+ floatingCleanup?.();
73
+ floatingCleanup = null;
74
+ }
75
+ }
76
+ const menu = menus.get(value);
77
+ if (!menu)
78
+ return;
79
+ state.activeMenu.value = value;
80
+ setExpanded(menu.trigger, true);
81
+ setHidden(menu.content, false);
82
+ setDataState(menu.trigger, "open");
83
+ setDataState(menu.content, "open");
84
+ if (positioning) {
85
+ const result = createFloatingPosition(menu.trigger, menu.content, positioning);
86
+ floatingCleanup = result.cleanup;
87
+ if (!dismissCleanup) {
88
+ dismissCleanup = createDismiss({
89
+ onDismiss: closeAll,
90
+ insideElements: [root],
91
+ escapeKey: false
92
+ });
93
+ }
94
+ } else {
95
+ document.addEventListener("mousedown", handleClickOutside);
96
+ }
97
+ const firstItem = menu.items[0];
98
+ if (firstItem) {
99
+ firstItem.setAttribute("tabindex", "0");
100
+ firstItem.focus();
101
+ }
102
+ }
103
+ const root = jsxDEV_7x81h0kn("div", {
104
+ role: "menubar",
105
+ onKeydown: (event) => {
106
+ if (isKey(event, Keys.ArrowLeft, Keys.ArrowRight, Keys.Home, Keys.End)) {
107
+ const focused = document.activeElement;
108
+ const triggerIndex = triggers.indexOf(focused);
109
+ if (triggerIndex >= 0) {
110
+ const result = handleListNavigation(event, triggers, { orientation: "horizontal" });
111
+ if (result && state.activeMenu.peek()) {
112
+ const newTrigger = result;
113
+ const menuValue = newTrigger.getAttribute("data-value");
114
+ if (menuValue)
115
+ openMenu(menuValue);
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }, undefined, false, undefined, this);
121
+ function Menu(value, label) {
122
+ const ids = linkedIds("menubar-menu");
123
+ const menuItems = [];
124
+ const trigger = jsxDEV_7x81h0kn("button", {
125
+ type: "button",
126
+ role: "menuitem",
127
+ id: ids.triggerId,
128
+ "aria-controls": ids.contentId,
129
+ "aria-haspopup": "menu",
130
+ "data-value": value,
131
+ "aria-expanded": "false",
132
+ "data-state": "closed",
133
+ onClick: () => {
134
+ if (state.activeMenu.peek() === value) {
135
+ closeAll();
136
+ } else {
137
+ openMenu(value);
138
+ }
139
+ },
140
+ onKeydown: (event) => {
141
+ if (isKey(event, Keys.ArrowDown, Keys.Enter, Keys.Space)) {
142
+ event.preventDefault();
143
+ openMenu(value);
144
+ }
145
+ },
146
+ children: label ?? value
147
+ }, undefined, false, undefined, this);
148
+ setRovingTabindex(triggers.concat(trigger), triggers.length);
149
+ const content = jsxDEV_7x81h0kn("div", {
150
+ role: "menu",
151
+ id: ids.contentId,
152
+ "aria-hidden": "true",
153
+ "data-state": "closed",
154
+ style: { display: "none" },
155
+ onKeydown: (event) => {
156
+ if (isKey(event, Keys.Escape)) {
157
+ event.preventDefault();
158
+ event.stopPropagation();
159
+ closeAll();
160
+ trigger.focus();
161
+ return;
162
+ }
163
+ if (isKey(event, Keys.Enter, Keys.Space)) {
164
+ event.preventDefault();
165
+ const active = document.activeElement;
166
+ const activeItem = menuItems.find((item) => item === active);
167
+ if (activeItem) {
168
+ const val = activeItem.getAttribute("data-value");
169
+ if (val !== null) {
170
+ onSelect?.(val);
171
+ closeAll();
172
+ trigger.focus();
173
+ }
174
+ }
175
+ return;
176
+ }
177
+ if (isKey(event, Keys.ArrowLeft, Keys.ArrowRight)) {
178
+ event.preventDefault();
179
+ const triggerIdx = triggers.indexOf(trigger);
180
+ let nextIdx;
181
+ if (isKey(event, Keys.ArrowRight)) {
182
+ nextIdx = (triggerIdx + 1) % triggers.length;
183
+ } else {
184
+ nextIdx = (triggerIdx - 1 + triggers.length) % triggers.length;
185
+ }
186
+ const nextTrigger = triggers[nextIdx];
187
+ if (nextTrigger) {
188
+ nextTrigger.focus();
189
+ const nextValue = nextTrigger.getAttribute("data-value");
190
+ if (nextValue)
191
+ openMenu(nextValue);
192
+ }
193
+ return;
194
+ }
195
+ handleListNavigation(event, menuItems, { orientation: "vertical" });
196
+ }
197
+ }, undefined, false, undefined, this);
198
+ function createItem(val, itemLabel) {
199
+ const item = jsxDEV_7x81h0kn("div", {
200
+ role: "menuitem",
201
+ "data-value": val,
202
+ tabindex: "-1",
203
+ onClick: () => {
204
+ onSelect?.(val);
205
+ closeAll();
206
+ trigger.focus();
207
+ },
208
+ children: itemLabel ?? val
209
+ }, undefined, false, undefined, this);
210
+ menuItems.push(item);
211
+ return item;
212
+ }
213
+ function Item(val, itemLabel) {
214
+ return createItem(val, itemLabel);
215
+ }
216
+ function Group(groupLabel) {
217
+ const el = jsxDEV_7x81h0kn("div", {
218
+ role: "group",
219
+ "aria-label": groupLabel
220
+ }, undefined, false, undefined, this);
221
+ return {
222
+ el,
223
+ Item: (val, l) => createItem(val, l)
224
+ };
225
+ }
226
+ function Separator() {
227
+ return jsxDEV_7x81h0kn("hr", {
228
+ role: "separator"
229
+ }, undefined, false, undefined, this);
230
+ }
231
+ triggers.push(trigger);
232
+ setRovingTabindex(triggers, 0);
233
+ menus.set(value, { trigger, content, items: menuItems });
234
+ return { trigger, content, Item, Group, Separator };
235
+ }
236
+ applyAttrs(root, attrs);
237
+ return { root, state, Menu };
238
+ }
239
+ var Menubar = {
240
+ Root: MenubarRoot
241
+ };
242
+
243
+ export { Menubar };