@vertz/ui-primitives 0.2.16 → 0.2.17

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 (117) hide show
  1. package/dist/shared/chunk-18y8gfk0.js +308 -0
  2. package/dist/shared/chunk-4085nbdq.js +196 -0
  3. package/dist/shared/chunk-4da5zksy.js +46 -0
  4. package/dist/shared/chunk-7ffg0caj.js +265 -0
  5. package/dist/shared/{chunk-w06tst6x.js → chunk-7kpsyjd7.js} +9 -5
  6. package/dist/shared/chunk-7krvqrwq.js +177 -0
  7. package/dist/shared/chunk-8ak7vdk1.js +151 -0
  8. package/dist/shared/chunk-8nk0ya7a.js +163 -0
  9. package/dist/shared/chunk-8tvzqry6.js +218 -0
  10. package/dist/shared/{chunk-qpfqyrc5.js → chunk-96d9nr7y.js} +1 -1
  11. package/dist/shared/chunk-9hj9p7s2.js +95 -0
  12. package/dist/shared/chunk-avxcmmk6.js +178 -0
  13. package/dist/shared/chunk-bew4bjgf.js +165 -0
  14. package/dist/shared/chunk-dpsgb1xw.js +18 -0
  15. package/dist/shared/chunk-g9qvd20g.js +133 -0
  16. package/dist/shared/chunk-gkddsbmh.js +73 -0
  17. package/dist/shared/chunk-gt0wth9h.js +128 -0
  18. package/dist/shared/chunk-hr9hx58m.js +71 -0
  19. package/dist/shared/{chunk-n92bvn5d.js → chunk-j4cm8avr.js} +85 -59
  20. package/dist/shared/chunk-jz0s6srh.js +161 -0
  21. package/dist/shared/chunk-kg27s15c.js +282 -0
  22. package/dist/shared/chunk-m1ptgp1s.js +142 -0
  23. package/dist/shared/{chunk-9cqe2q6e.js → chunk-n9nwx58j.js} +9 -5
  24. package/dist/shared/chunk-ppcv3ehd.js +85 -0
  25. package/dist/shared/{chunk-vq9tfzh8.js → chunk-rnjm61t0.js} +5 -1
  26. package/dist/shared/chunk-sqs8kyb2.js +288 -0
  27. package/dist/shared/chunk-tfyg0qrp.js +117 -0
  28. package/dist/shared/chunk-ttsyf6ma.js +239 -0
  29. package/dist/shared/chunk-x0we8gcy.js +219 -0
  30. package/dist/shared/{chunk-6pnjrst7.js → chunk-x2hz98qn.js} +2 -2
  31. package/dist/shared/chunk-yr9yzpvq.js +107 -0
  32. package/dist/src/accordion/accordion.d.ts +14 -2
  33. package/dist/src/accordion/accordion.js +2 -1
  34. package/dist/src/badge/badge.d.ts +13 -1
  35. package/dist/src/badge/badge.js +2 -1
  36. package/dist/src/button/button.d.ts +16 -14
  37. package/dist/src/button/button.js +2 -2
  38. package/dist/src/calendar/calendar.d.ts +14 -2
  39. package/dist/src/calendar/calendar.js +2 -1
  40. package/dist/src/carousel/carousel.d.ts +14 -2
  41. package/dist/src/carousel/carousel.js +2 -1
  42. package/dist/src/checkbox/checkbox.d.ts +15 -13
  43. package/dist/src/checkbox/checkbox.js +2 -2
  44. package/dist/src/collapsible/collapsible.d.ts +14 -2
  45. package/dist/src/collapsible/collapsible.js +2 -1
  46. package/dist/src/combobox/combobox.d.ts +14 -2
  47. package/dist/src/combobox/combobox.js +2 -1
  48. package/dist/src/command/command.d.ts +14 -2
  49. package/dist/src/command/command.js +2 -1
  50. package/dist/src/context-menu/context-menu.d.ts +14 -2
  51. package/dist/src/context-menu/context-menu.js +2 -1
  52. package/dist/src/date-picker/date-picker.js +4 -3
  53. package/dist/src/dialog/dialog.d.ts +14 -2
  54. package/dist/src/dialog/dialog.js +2 -1
  55. package/dist/src/dropdown-menu/dropdown-menu.d.ts +13 -1
  56. package/dist/src/dropdown-menu/dropdown-menu.js +3 -2
  57. package/dist/src/hover-card/hover-card.d.ts +14 -2
  58. package/dist/src/hover-card/hover-card.js +2 -1
  59. package/dist/src/index.d.ts +132 -140
  60. package/dist/src/index.js +31 -30
  61. package/dist/src/menu/menu.d.ts +14 -2
  62. package/dist/src/menu/menu.js +2 -1
  63. package/dist/src/menubar/menubar.d.ts +14 -2
  64. package/dist/src/menubar/menubar.js +2 -1
  65. package/dist/src/navigation-menu/navigation-menu.d.ts +14 -2
  66. package/dist/src/navigation-menu/navigation-menu.js +2 -1
  67. package/dist/src/popover/popover.d.ts +14 -2
  68. package/dist/src/popover/popover.js +2 -1
  69. package/dist/src/progress/progress.d.ts +14 -2
  70. package/dist/src/progress/progress.js +2 -1
  71. package/dist/src/radio/radio.d.ts +14 -2
  72. package/dist/src/radio/radio.js +2 -1
  73. package/dist/src/resizable-panel/resizable-panel.d.ts +14 -2
  74. package/dist/src/resizable-panel/resizable-panel.js +2 -1
  75. package/dist/src/scroll-area/scroll-area.d.ts +14 -2
  76. package/dist/src/scroll-area/scroll-area.js +2 -1
  77. package/dist/src/select/select.d.ts +14 -2
  78. package/dist/src/select/select.js +2 -1
  79. package/dist/src/slider/slider.d.ts +14 -2
  80. package/dist/src/slider/slider.js +2 -1
  81. package/dist/src/switch/switch.d.ts +13 -1
  82. package/dist/src/switch/switch.js +2 -1
  83. package/dist/src/tabs/tabs.d.ts +14 -2
  84. package/dist/src/tabs/tabs.js +2 -1
  85. package/dist/src/toast/toast.d.ts +14 -2
  86. package/dist/src/toast/toast.js +2 -1
  87. package/dist/src/toggle/toggle.d.ts +13 -1
  88. package/dist/src/toggle/toggle.js +2 -1
  89. package/dist/src/toggle-group/toggle-group.d.ts +14 -2
  90. package/dist/src/toggle-group/toggle-group.js +2 -1
  91. package/dist/src/tooltip/tooltip.d.ts +14 -2
  92. package/dist/src/tooltip/tooltip.js +2 -1
  93. package/package.json +3 -3
  94. package/dist/shared/chunk-2h5qpc00.js +0 -98
  95. package/dist/shared/chunk-31yptvbf.js +0 -151
  96. package/dist/shared/chunk-3pantb0p.js +0 -108
  97. package/dist/shared/chunk-3s6s6f06.js +0 -61
  98. package/dist/shared/chunk-48v8j0vh.js +0 -267
  99. package/dist/shared/chunk-6dmt4513.js +0 -78
  100. package/dist/shared/chunk-6sqwjfg8.js +0 -169
  101. package/dist/shared/chunk-8qfeqrrz.js +0 -179
  102. package/dist/shared/chunk-bcfzteh0.js +0 -148
  103. package/dist/shared/chunk-cr9sbwns.js +0 -235
  104. package/dist/shared/chunk-cvbf1js1.js +0 -52
  105. package/dist/shared/chunk-dkhst4wv.js +0 -97
  106. package/dist/shared/chunk-e3aj5yw4.js +0 -115
  107. package/dist/shared/chunk-fv1y77tn.js +0 -225
  108. package/dist/shared/chunk-h42bk324.js +0 -58
  109. package/dist/shared/chunk-h9m9x5my.js +0 -119
  110. package/dist/shared/chunk-qq0e0gym.js +0 -73
  111. package/dist/shared/chunk-tk1k1bet.js +0 -93
  112. package/dist/shared/chunk-tvpgeswh.js +0 -216
  113. package/dist/shared/chunk-vcp10kne.js +0 -175
  114. package/dist/shared/chunk-ve006hmy.js +0 -51
  115. package/dist/shared/chunk-vx1ajy2z.js +0 -115
  116. package/dist/shared/chunk-wnttq0gv.js +0 -49
  117. package/dist/shared/chunk-x6qzr3g6.js +0 -100
@@ -0,0 +1,142 @@
1
+ import {
2
+ createDismiss
3
+ } from "./chunk-a6wp8c32.js";
4
+ import {
5
+ focusFirst,
6
+ saveFocus
7
+ } from "./chunk-e2v1c9ex.js";
8
+ import {
9
+ createFloatingPosition
10
+ } from "./chunk-0mcr52hc.js";
11
+ import {
12
+ Keys,
13
+ isKey
14
+ } from "./chunk-jctqs9m4.js";
15
+ import {
16
+ setDataState,
17
+ setExpanded,
18
+ setHidden,
19
+ setHiddenAnimated
20
+ } from "./chunk-vvjyx7fe.js";
21
+ import {
22
+ applyAttrs
23
+ } from "./chunk-dpsgb1xw.js";
24
+ import {
25
+ linkedIds
26
+ } from "./chunk-8y1jf6xr.js";
27
+
28
+ // src/popover/popover.tsx
29
+ import { __element, __on } from "@vertz/ui/internals";
30
+ import { signal } from "@vertz/ui";
31
+ function PopoverRoot(options = {}) {
32
+ const { defaultOpen = false, onOpenChange, positioning, ...attrs } = options;
33
+ const ids = linkedIds("popover");
34
+ const state = { open: signal(defaultOpen) };
35
+ let restoreFocus = null;
36
+ let floatingCleanup = null;
37
+ let dismissCleanup = null;
38
+ function open() {
39
+ state.open.value = true;
40
+ setExpanded(trigger, true);
41
+ setHidden(content, false);
42
+ setDataState(trigger, "open");
43
+ setDataState(content, "open");
44
+ restoreFocus = saveFocus();
45
+ queueMicrotask(() => focusFirst(content));
46
+ if (positioning) {
47
+ const result = createFloatingPosition(trigger, content, positioning);
48
+ floatingCleanup = result.cleanup;
49
+ dismissCleanup = createDismiss({
50
+ onDismiss: close,
51
+ insideElements: [trigger, content],
52
+ escapeKey: false
53
+ });
54
+ }
55
+ onOpenChange?.(true);
56
+ }
57
+ function close() {
58
+ state.open.value = false;
59
+ setExpanded(trigger, false);
60
+ setDataState(trigger, "closed");
61
+ setDataState(content, "closed");
62
+ setHiddenAnimated(content, true);
63
+ floatingCleanup?.();
64
+ floatingCleanup = null;
65
+ dismissCleanup?.();
66
+ dismissCleanup = null;
67
+ restoreFocus?.();
68
+ restoreFocus = null;
69
+ onOpenChange?.(false);
70
+ }
71
+ const trigger = (() => {
72
+ const __el0 = __element("button");
73
+ __el0.setAttribute("type", "button");
74
+ {
75
+ const __v = ids.triggerId;
76
+ if (__v != null && __v !== false)
77
+ __el0.setAttribute("id", __v === true ? "" : __v);
78
+ }
79
+ {
80
+ const __v = ids.contentId;
81
+ if (__v != null && __v !== false)
82
+ __el0.setAttribute("aria-controls", __v === true ? "" : __v);
83
+ }
84
+ __el0.setAttribute("aria-haspopup", "dialog");
85
+ {
86
+ const __v = defaultOpen ? "true" : "false";
87
+ if (__v != null && __v !== false)
88
+ __el0.setAttribute("aria-expanded", __v === true ? "" : __v);
89
+ }
90
+ {
91
+ const __v = defaultOpen ? "open" : "closed";
92
+ if (__v != null && __v !== false)
93
+ __el0.setAttribute("data-state", __v === true ? "" : __v);
94
+ }
95
+ __on(__el0, "click", () => {
96
+ if (state.open.peek()) {
97
+ close();
98
+ } else {
99
+ open();
100
+ }
101
+ });
102
+ return __el0;
103
+ })();
104
+ const content = (() => {
105
+ const __el1 = __element("div");
106
+ __el1.setAttribute("role", "dialog");
107
+ {
108
+ const __v = ids.contentId;
109
+ if (__v != null && __v !== false)
110
+ __el1.setAttribute("id", __v === true ? "" : __v);
111
+ }
112
+ {
113
+ const __v = defaultOpen ? "false" : "true";
114
+ if (__v != null && __v !== false)
115
+ __el1.setAttribute("aria-hidden", __v === true ? "" : __v);
116
+ }
117
+ {
118
+ const __v = defaultOpen ? "open" : "closed";
119
+ if (__v != null && __v !== false)
120
+ __el1.setAttribute("data-state", __v === true ? "" : __v);
121
+ }
122
+ {
123
+ const __v = defaultOpen ? "" : "display: none";
124
+ if (__v != null && __v !== false)
125
+ __el1.setAttribute("style", __v === true ? "" : __v);
126
+ }
127
+ __on(__el1, "keydown", (event) => {
128
+ if (isKey(event, Keys.Escape)) {
129
+ event.preventDefault();
130
+ close();
131
+ }
132
+ });
133
+ return __el1;
134
+ })();
135
+ applyAttrs(trigger, attrs);
136
+ return { trigger, content, state };
137
+ }
138
+ var Popover = {
139
+ Root: PopoverRoot
140
+ };
141
+
142
+ export { Popover };
@@ -2,15 +2,18 @@ import {
2
2
  Keys,
3
3
  isKey
4
4
  } from "./chunk-jctqs9m4.js";
5
+ import {
6
+ applyAttrs
7
+ } from "./chunk-dpsgb1xw.js";
5
8
  import {
6
9
  uniqueId
7
10
  } from "./chunk-8y1jf6xr.js";
8
11
 
9
12
  // src/toggle/toggle.tsx
10
- import { signal } from "@vertz/ui";
13
+ import { computed, signal } from "@vertz/ui";
11
14
  import { __attr, __element, __on } from "@vertz/ui/internals";
12
15
  function ToggleRoot(options = {}) {
13
- const { defaultPressed = false, disabled = false, onPressedChange } = options;
16
+ const { defaultPressed = false, disabled = false, onPressedChange, ...attrs } = options;
14
17
  const pressed = signal(defaultPressed, "pressed");
15
18
  function toggle() {
16
19
  if (disabled)
@@ -18,9 +21,8 @@ function ToggleRoot(options = {}) {
18
21
  pressed.value = !pressed.value;
19
22
  onPressedChange?.(pressed.value);
20
23
  }
21
- return (() => {
24
+ const el = computed(() => (() => {
22
25
  const __el0 = __element("button");
23
- __el0.setAttribute("data-v-id", "ToggleRoot");
24
26
  __el0.setAttribute("type", "button");
25
27
  {
26
28
  const __v = uniqueId("toggle");
@@ -47,7 +49,9 @@ function ToggleRoot(options = {}) {
47
49
  }
48
50
  });
49
51
  return __el0;
50
- })();
52
+ })());
53
+ applyAttrs(el.value, attrs);
54
+ return el.value;
51
55
  }
52
56
  var Toggle = {
53
57
  Root: ToggleRoot
@@ -0,0 +1,85 @@
1
+ import {
2
+ setDataState
3
+ } from "./chunk-vvjyx7fe.js";
4
+ import {
5
+ applyAttrs
6
+ } from "./chunk-dpsgb1xw.js";
7
+ import {
8
+ uniqueId
9
+ } from "./chunk-8y1jf6xr.js";
10
+
11
+ // src/progress/progress.tsx
12
+ import { __append, __element, __enterChildren, __exitChildren } from "@vertz/ui/internals";
13
+ import { ref, signal } from "@vertz/ui";
14
+ function dataStateFor(pct) {
15
+ if (pct >= 100)
16
+ return "complete";
17
+ if (pct > 0)
18
+ return "loading";
19
+ return "idle";
20
+ }
21
+ function ProgressRoot(options = {}) {
22
+ const { defaultValue = 0, min = 0, max = 100, ...attrs } = options;
23
+ const state = { value: signal(defaultValue) };
24
+ const indicatorRef = ref();
25
+ const initialPct = (defaultValue - min) / (max - min) * 100;
26
+ const root = (() => {
27
+ const __el0 = __element("div");
28
+ __el0.setAttribute("role", "progressbar");
29
+ {
30
+ const __v = uniqueId("progress");
31
+ if (__v != null && __v !== false)
32
+ __el0.setAttribute("id", __v === true ? "" : __v);
33
+ }
34
+ {
35
+ const __v = String(defaultValue);
36
+ if (__v != null && __v !== false)
37
+ __el0.setAttribute("aria-valuenow", __v === true ? "" : __v);
38
+ }
39
+ {
40
+ const __v = String(min);
41
+ if (__v != null && __v !== false)
42
+ __el0.setAttribute("aria-valuemin", __v === true ? "" : __v);
43
+ }
44
+ {
45
+ const __v = String(max);
46
+ if (__v != null && __v !== false)
47
+ __el0.setAttribute("aria-valuemax", __v === true ? "" : __v);
48
+ }
49
+ {
50
+ const __v = dataStateFor(initialPct);
51
+ if (__v != null && __v !== false)
52
+ __el0.setAttribute("data-state", __v === true ? "" : __v);
53
+ }
54
+ __enterChildren(__el0);
55
+ __append(__el0, (() => {
56
+ const __el1 = __element("div");
57
+ indicatorRef.current = __el1;
58
+ __el1.setAttribute("data-part", "indicator");
59
+ {
60
+ const __v = `width: ${initialPct}%`;
61
+ if (__v != null && __v !== false)
62
+ __el1.setAttribute("style", __v === true ? "" : __v);
63
+ }
64
+ return __el1;
65
+ })());
66
+ __exitChildren();
67
+ return __el0;
68
+ })();
69
+ const indicator = indicatorRef.current;
70
+ applyAttrs(root, attrs);
71
+ function setValue(val) {
72
+ const clamped = Math.min(max, Math.max(min, val));
73
+ state.value.value = clamped;
74
+ root.setAttribute("aria-valuenow", String(clamped));
75
+ const pct = (clamped - min) / (max - min) * 100;
76
+ indicator.style.width = `${pct}%`;
77
+ setDataState(root, dataStateFor(pct));
78
+ }
79
+ return { root, indicator, state, setValue };
80
+ }
81
+ var Progress = {
82
+ Root: ProgressRoot
83
+ };
84
+
85
+ export { Progress };
@@ -1,3 +1,6 @@
1
+ import {
2
+ applyAttrs
3
+ } from "./chunk-dpsgb1xw.js";
1
4
  import {
2
5
  uniqueId
3
6
  } from "./chunk-8y1jf6xr.js";
@@ -5,7 +8,7 @@ import {
5
8
  // src/badge/badge.tsx
6
9
  import { __element } from "@vertz/ui/internals";
7
10
  function BadgeRoot(options = {}) {
8
- const { variant = "default" } = options;
11
+ const { variant = "default", ...attrs } = options;
9
12
  const badge = (() => {
10
13
  const __el0 = __element("span");
11
14
  {
@@ -21,6 +24,7 @@ function BadgeRoot(options = {}) {
21
24
  }
22
25
  return __el0;
23
26
  })();
27
+ applyAttrs(badge, attrs);
24
28
  return { badge };
25
29
  }
26
30
  var Badge = {
@@ -0,0 +1,288 @@
1
+ import {
2
+ createDismiss
3
+ } from "./chunk-a6wp8c32.js";
4
+ import {
5
+ setRovingTabindex
6
+ } from "./chunk-e2v1c9ex.js";
7
+ import {
8
+ createFloatingPosition
9
+ } from "./chunk-0mcr52hc.js";
10
+ import {
11
+ Keys,
12
+ handleListNavigation,
13
+ isKey
14
+ } from "./chunk-jctqs9m4.js";
15
+ import {
16
+ setDataState,
17
+ setExpanded,
18
+ setHidden,
19
+ setHiddenAnimated
20
+ } from "./chunk-vvjyx7fe.js";
21
+ import {
22
+ applyAttrs
23
+ } from "./chunk-dpsgb1xw.js";
24
+ import {
25
+ linkedIds
26
+ } from "./chunk-8y1jf6xr.js";
27
+
28
+ // src/menubar/menubar.tsx
29
+ import { __element, __enterChildren, __exitChildren, __insert, __on } from "@vertz/ui/internals";
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 = (() => {
104
+ const __el0 = __element("div");
105
+ __el0.setAttribute("role", "menubar");
106
+ __on(__el0, "keydown", (event) => {
107
+ if (isKey(event, Keys.ArrowLeft, Keys.ArrowRight, Keys.Home, Keys.End)) {
108
+ const focused = document.activeElement;
109
+ const triggerIndex = triggers.indexOf(focused);
110
+ if (triggerIndex >= 0) {
111
+ const result = handleListNavigation(event, triggers, { orientation: "horizontal" });
112
+ if (result && state.activeMenu.peek()) {
113
+ const newTrigger = result;
114
+ const menuValue = newTrigger.getAttribute("data-value");
115
+ if (menuValue)
116
+ openMenu(menuValue);
117
+ }
118
+ }
119
+ }
120
+ });
121
+ return __el0;
122
+ })();
123
+ function Menu(value, label) {
124
+ const ids = linkedIds("menubar-menu");
125
+ const menuItems = [];
126
+ const trigger = (() => {
127
+ const __el1 = __element("button");
128
+ __el1.setAttribute("type", "button");
129
+ __el1.setAttribute("role", "menuitem");
130
+ {
131
+ const __v = ids.triggerId;
132
+ if (__v != null && __v !== false)
133
+ __el1.setAttribute("id", __v === true ? "" : __v);
134
+ }
135
+ {
136
+ const __v = ids.contentId;
137
+ if (__v != null && __v !== false)
138
+ __el1.setAttribute("aria-controls", __v === true ? "" : __v);
139
+ }
140
+ __el1.setAttribute("aria-haspopup", "menu");
141
+ {
142
+ const __v = value;
143
+ if (__v != null && __v !== false)
144
+ __el1.setAttribute("data-value", __v === true ? "" : __v);
145
+ }
146
+ __el1.setAttribute("aria-expanded", "false");
147
+ __el1.setAttribute("data-state", "closed");
148
+ __on(__el1, "click", () => {
149
+ if (state.activeMenu.peek() === value) {
150
+ closeAll();
151
+ } else {
152
+ openMenu(value);
153
+ }
154
+ });
155
+ __on(__el1, "keydown", (event) => {
156
+ if (isKey(event, Keys.ArrowDown, Keys.Enter, Keys.Space)) {
157
+ event.preventDefault();
158
+ openMenu(value);
159
+ }
160
+ });
161
+ __enterChildren(__el1);
162
+ __insert(__el1, label ?? value);
163
+ __exitChildren();
164
+ return __el1;
165
+ })();
166
+ setRovingTabindex(triggers.concat(trigger), triggers.length);
167
+ const content = (() => {
168
+ const __el2 = __element("div");
169
+ __el2.setAttribute("role", "menu");
170
+ {
171
+ const __v = ids.contentId;
172
+ if (__v != null && __v !== false)
173
+ __el2.setAttribute("id", __v === true ? "" : __v);
174
+ }
175
+ __el2.setAttribute("aria-hidden", "true");
176
+ __el2.setAttribute("data-state", "closed");
177
+ __el2.setAttribute("style", "display: none");
178
+ __on(__el2, "keydown", (event) => {
179
+ if (isKey(event, Keys.Escape)) {
180
+ event.preventDefault();
181
+ event.stopPropagation();
182
+ closeAll();
183
+ trigger.focus();
184
+ return;
185
+ }
186
+ if (isKey(event, Keys.Enter, Keys.Space)) {
187
+ event.preventDefault();
188
+ const active = document.activeElement;
189
+ const activeItem = menuItems.find((item) => item === active);
190
+ if (activeItem) {
191
+ const val = activeItem.getAttribute("data-value");
192
+ if (val !== null) {
193
+ onSelect?.(val);
194
+ closeAll();
195
+ trigger.focus();
196
+ }
197
+ }
198
+ return;
199
+ }
200
+ if (isKey(event, Keys.ArrowLeft, Keys.ArrowRight)) {
201
+ event.preventDefault();
202
+ const triggerIdx = triggers.indexOf(trigger);
203
+ let nextIdx;
204
+ if (isKey(event, Keys.ArrowRight)) {
205
+ nextIdx = (triggerIdx + 1) % triggers.length;
206
+ } else {
207
+ nextIdx = (triggerIdx - 1 + triggers.length) % triggers.length;
208
+ }
209
+ const nextTrigger = triggers[nextIdx];
210
+ if (nextTrigger) {
211
+ nextTrigger.focus();
212
+ const nextValue = nextTrigger.getAttribute("data-value");
213
+ if (nextValue)
214
+ openMenu(nextValue);
215
+ }
216
+ return;
217
+ }
218
+ handleListNavigation(event, menuItems, { orientation: "vertical" });
219
+ });
220
+ return __el2;
221
+ })();
222
+ function createItem(val, itemLabel, parent) {
223
+ const item = (() => {
224
+ const __el3 = __element("div");
225
+ __el3.setAttribute("role", "menuitem");
226
+ {
227
+ const __v = val;
228
+ if (__v != null && __v !== false)
229
+ __el3.setAttribute("data-value", __v === true ? "" : __v);
230
+ }
231
+ __el3.setAttribute("tabindex", "-1");
232
+ __on(__el3, "click", () => {
233
+ onSelect?.(val);
234
+ closeAll();
235
+ trigger.focus();
236
+ });
237
+ __enterChildren(__el3);
238
+ __insert(__el3, itemLabel ?? val);
239
+ __exitChildren();
240
+ return __el3;
241
+ })();
242
+ menuItems.push(item);
243
+ (parent ?? content).appendChild(item);
244
+ return item;
245
+ }
246
+ function Item(val, itemLabel) {
247
+ return createItem(val, itemLabel);
248
+ }
249
+ function Group(groupLabel) {
250
+ const el = (() => {
251
+ const __el4 = __element("div");
252
+ __el4.setAttribute("role", "group");
253
+ {
254
+ const __v = groupLabel;
255
+ if (__v != null && __v !== false)
256
+ __el4.setAttribute("aria-label", __v === true ? "" : __v);
257
+ }
258
+ return __el4;
259
+ })();
260
+ content.appendChild(el);
261
+ return {
262
+ el,
263
+ Item: (val, l) => createItem(val, l, el)
264
+ };
265
+ }
266
+ function Separator() {
267
+ const hr = (() => {
268
+ const __el5 = __element("hr");
269
+ __el5.setAttribute("role", "separator");
270
+ return __el5;
271
+ })();
272
+ content.appendChild(hr);
273
+ return hr;
274
+ }
275
+ triggers.push(trigger);
276
+ setRovingTabindex(triggers, 0);
277
+ menus.set(value, { trigger, content, items: menuItems });
278
+ root.appendChild(trigger);
279
+ return { trigger, content, Item, Group, Separator };
280
+ }
281
+ applyAttrs(root, attrs);
282
+ return { root, state, Menu };
283
+ }
284
+ var Menubar = {
285
+ Root: MenubarRoot
286
+ };
287
+
288
+ export { Menubar };
@@ -0,0 +1,117 @@
1
+ import {
2
+ setDataState,
3
+ setExpanded,
4
+ setHidden,
5
+ setHiddenAnimated
6
+ } from "./chunk-vvjyx7fe.js";
7
+ import {
8
+ applyAttrs
9
+ } from "./chunk-dpsgb1xw.js";
10
+ import {
11
+ linkedIds
12
+ } from "./chunk-8y1jf6xr.js";
13
+
14
+ // src/collapsible/collapsible.tsx
15
+ import { __element, __enterChildren, __exitChildren, __insert, __on } from "@vertz/ui/internals";
16
+ import { signal } from "@vertz/ui";
17
+ function CollapsibleRoot(options = {}) {
18
+ const { defaultOpen = false, disabled = false, onOpenChange, ...attrs } = options;
19
+ const ids = linkedIds("collapsible");
20
+ const state = {
21
+ open: signal(defaultOpen),
22
+ disabled: signal(disabled)
23
+ };
24
+ function toggle() {
25
+ if (state.disabled.peek())
26
+ return;
27
+ const next = !state.open.peek();
28
+ state.open.value = next;
29
+ if (next) {
30
+ setHidden(content, false);
31
+ }
32
+ const height = content.scrollHeight;
33
+ content.style.setProperty("--collapsible-content-height", `${height}px`);
34
+ setExpanded(trigger, next);
35
+ setDataState(trigger, next ? "open" : "closed");
36
+ setDataState(content, next ? "open" : "closed");
37
+ if (!next) {
38
+ setHiddenAnimated(content, true);
39
+ }
40
+ onOpenChange?.(next);
41
+ }
42
+ const trigger = (() => {
43
+ const __el0 = __element("button");
44
+ __el0.setAttribute("type", "button");
45
+ {
46
+ const __v = ids.triggerId;
47
+ if (__v != null && __v !== false)
48
+ __el0.setAttribute("id", __v === true ? "" : __v);
49
+ }
50
+ {
51
+ const __v = ids.contentId;
52
+ if (__v != null && __v !== false)
53
+ __el0.setAttribute("aria-controls", __v === true ? "" : __v);
54
+ }
55
+ {
56
+ const __v = defaultOpen ? "true" : "false";
57
+ if (__v != null && __v !== false)
58
+ __el0.setAttribute("aria-expanded", __v === true ? "" : __v);
59
+ }
60
+ {
61
+ const __v = defaultOpen ? "open" : "closed";
62
+ if (__v != null && __v !== false)
63
+ __el0.setAttribute("data-state", __v === true ? "" : __v);
64
+ }
65
+ {
66
+ const __v = disabled;
67
+ if (__v != null && __v !== false)
68
+ __el0.setAttribute("disabled", __v === true ? "" : __v);
69
+ }
70
+ {
71
+ const __v = disabled ? "true" : undefined;
72
+ if (__v != null && __v !== false)
73
+ __el0.setAttribute("aria-disabled", __v === true ? "" : __v);
74
+ }
75
+ __on(__el0, "click", toggle);
76
+ return __el0;
77
+ })();
78
+ const content = (() => {
79
+ const __el1 = __element("div");
80
+ {
81
+ const __v = ids.contentId;
82
+ if (__v != null && __v !== false)
83
+ __el1.setAttribute("id", __v === true ? "" : __v);
84
+ }
85
+ {
86
+ const __v = defaultOpen ? "false" : "true";
87
+ if (__v != null && __v !== false)
88
+ __el1.setAttribute("aria-hidden", __v === true ? "" : __v);
89
+ }
90
+ {
91
+ const __v = defaultOpen ? "open" : "closed";
92
+ if (__v != null && __v !== false)
93
+ __el1.setAttribute("data-state", __v === true ? "" : __v);
94
+ }
95
+ {
96
+ const __v = defaultOpen ? "" : "display: none";
97
+ if (__v != null && __v !== false)
98
+ __el1.setAttribute("style", __v === true ? "" : __v);
99
+ }
100
+ return __el1;
101
+ })();
102
+ const root = (() => {
103
+ const __el2 = __element("div");
104
+ __enterChildren(__el2);
105
+ __insert(__el2, trigger);
106
+ __insert(__el2, content);
107
+ __exitChildren();
108
+ return __el2;
109
+ })();
110
+ applyAttrs(root, attrs);
111
+ return { root, trigger, content, state };
112
+ }
113
+ var Collapsible = {
114
+ Root: CollapsibleRoot
115
+ };
116
+
117
+ export { Collapsible };