@vertz/ui-primitives 0.2.16 → 0.2.18

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,163 @@
1
+ import {
2
+ setRovingTabindex
3
+ } from "./chunk-e2v1c9ex.js";
4
+ import {
5
+ handleListNavigation
6
+ } from "./chunk-jctqs9m4.js";
7
+ import {
8
+ setDataState,
9
+ setHidden,
10
+ setSelected
11
+ } from "./chunk-vvjyx7fe.js";
12
+ import {
13
+ applyAttrs
14
+ } from "./chunk-dpsgb1xw.js";
15
+ import {
16
+ uniqueId
17
+ } from "./chunk-8y1jf6xr.js";
18
+
19
+ // src/tabs/tabs.tsx
20
+ import { __element, __enterChildren, __exitChildren, __insert, __on } from "@vertz/ui/internals";
21
+ import { signal } from "@vertz/ui";
22
+ function TabsRoot(options = {}) {
23
+ const { defaultValue = "", orientation = "horizontal", onValueChange, ...attrs } = options;
24
+ const state = { value: signal(defaultValue) };
25
+ const triggers = [];
26
+ const panels = [];
27
+ const tabValues = [];
28
+ function selectTab(value) {
29
+ state.value.value = value;
30
+ for (let i = 0;i < tabValues.length; i++) {
31
+ const isActive = tabValues[i] === value;
32
+ const trig = triggers[i];
33
+ const panel = panels[i];
34
+ if (!trig || !panel)
35
+ continue;
36
+ setSelected(trig, isActive);
37
+ setDataState(trig, isActive ? "active" : "inactive");
38
+ trig.setAttribute("tabindex", isActive ? "0" : "-1");
39
+ setHidden(panel, !isActive);
40
+ setDataState(panel, isActive ? "active" : "inactive");
41
+ }
42
+ onValueChange?.(value);
43
+ }
44
+ const list = (() => {
45
+ const __el0 = __element("div");
46
+ __el0.setAttribute("role", "tablist");
47
+ {
48
+ const __v = orientation === "vertical" ? "vertical" : undefined;
49
+ if (__v != null && __v !== false)
50
+ __el0.setAttribute("aria-orientation", __v === true ? "" : __v);
51
+ }
52
+ __on(__el0, "keydown", (event) => {
53
+ const result = handleListNavigation(event, triggers, {
54
+ orientation
55
+ });
56
+ if (result) {
57
+ const idx = triggers.indexOf(result);
58
+ if (idx >= 0) {
59
+ const val = tabValues[idx];
60
+ if (val !== undefined)
61
+ selectTab(val);
62
+ }
63
+ }
64
+ });
65
+ return __el0;
66
+ })();
67
+ const root = (() => {
68
+ const __el1 = __element("div");
69
+ __enterChildren(__el1);
70
+ __insert(__el1, list);
71
+ __exitChildren();
72
+ return __el1;
73
+ })();
74
+ function Tab(value, label) {
75
+ const baseId = uniqueId("tab");
76
+ const triggerId = `${baseId}-trigger`;
77
+ const panelId = `${baseId}-panel`;
78
+ const isActive = value === state.value.peek();
79
+ const trig = (() => {
80
+ const __el2 = __element("button");
81
+ __el2.setAttribute("type", "button");
82
+ __el2.setAttribute("role", "tab");
83
+ {
84
+ const __v = triggerId;
85
+ if (__v != null && __v !== false)
86
+ __el2.setAttribute("id", __v === true ? "" : __v);
87
+ }
88
+ {
89
+ const __v = panelId;
90
+ if (__v != null && __v !== false)
91
+ __el2.setAttribute("aria-controls", __v === true ? "" : __v);
92
+ }
93
+ {
94
+ const __v = value;
95
+ if (__v != null && __v !== false)
96
+ __el2.setAttribute("data-value", __v === true ? "" : __v);
97
+ }
98
+ {
99
+ const __v = isActive ? "true" : "false";
100
+ if (__v != null && __v !== false)
101
+ __el2.setAttribute("aria-selected", __v === true ? "" : __v);
102
+ }
103
+ {
104
+ const __v = isActive ? "active" : "inactive";
105
+ if (__v != null && __v !== false)
106
+ __el2.setAttribute("data-state", __v === true ? "" : __v);
107
+ }
108
+ __on(__el2, "click", () => {
109
+ selectTab(value);
110
+ trig.focus();
111
+ });
112
+ __enterChildren(__el2);
113
+ __insert(__el2, label ?? value);
114
+ __exitChildren();
115
+ return __el2;
116
+ })();
117
+ const panel = (() => {
118
+ const __el3 = __element("div");
119
+ __el3.setAttribute("role", "tabpanel");
120
+ {
121
+ const __v = panelId;
122
+ if (__v != null && __v !== false)
123
+ __el3.setAttribute("id", __v === true ? "" : __v);
124
+ }
125
+ {
126
+ const __v = triggerId;
127
+ if (__v != null && __v !== false)
128
+ __el3.setAttribute("aria-labelledby", __v === true ? "" : __v);
129
+ }
130
+ __el3.setAttribute("tabindex", "0");
131
+ {
132
+ const __v = isActive ? "false" : "true";
133
+ if (__v != null && __v !== false)
134
+ __el3.setAttribute("aria-hidden", __v === true ? "" : __v);
135
+ }
136
+ {
137
+ const __v = isActive ? "active" : "inactive";
138
+ if (__v != null && __v !== false)
139
+ __el3.setAttribute("data-state", __v === true ? "" : __v);
140
+ }
141
+ {
142
+ const __v = isActive ? "" : "display: none";
143
+ if (__v != null && __v !== false)
144
+ __el3.setAttribute("style", __v === true ? "" : __v);
145
+ }
146
+ return __el3;
147
+ })();
148
+ triggers.push(trig);
149
+ panels.push(panel);
150
+ tabValues.push(value);
151
+ list.appendChild(trig);
152
+ root.appendChild(panel);
153
+ setRovingTabindex(triggers, triggers.findIndex((t) => tabValues[triggers.indexOf(t)] === state.value.peek()));
154
+ return { trigger: trig, panel };
155
+ }
156
+ applyAttrs(root, attrs);
157
+ return { root, list, state, Tab };
158
+ }
159
+ var Tabs = {
160
+ Root: TabsRoot
161
+ };
162
+
163
+ export { Tabs };
@@ -0,0 +1,218 @@
1
+ import {
2
+ focusFirst,
3
+ setRovingTabindex
4
+ } from "./chunk-e2v1c9ex.js";
5
+ import {
6
+ Keys,
7
+ handleListNavigation,
8
+ isKey
9
+ } from "./chunk-jctqs9m4.js";
10
+ import {
11
+ setDataState,
12
+ setExpanded,
13
+ setHidden,
14
+ setHiddenAnimated
15
+ } from "./chunk-vvjyx7fe.js";
16
+ import {
17
+ applyAttrs
18
+ } from "./chunk-dpsgb1xw.js";
19
+ import {
20
+ linkedIds
21
+ } from "./chunk-8y1jf6xr.js";
22
+
23
+ // src/navigation-menu/navigation-menu.tsx
24
+ import { __element, __enterChildren, __exitChildren, __insert, __on } from "@vertz/ui/internals";
25
+ import { signal } from "@vertz/ui";
26
+ function NavigationMenuRoot(options = {}) {
27
+ const { orientation = "horizontal", delayOpen = 200, delayClose = 300, ...attrs } = options;
28
+ const state = { activeItem: signal(null) };
29
+ const triggers = [];
30
+ const items = new Map;
31
+ const openTimeout = signal(null, "openTimeout");
32
+ const closeTimeout = signal(null, "closeTimeout");
33
+ function cancelTimers() {
34
+ if (openTimeout.value) {
35
+ clearTimeout(openTimeout.value);
36
+ openTimeout.value = null;
37
+ }
38
+ if (closeTimeout.value) {
39
+ clearTimeout(closeTimeout.value);
40
+ closeTimeout.value = null;
41
+ }
42
+ }
43
+ function openItem(value) {
44
+ cancelTimers();
45
+ const current = state.activeItem.peek();
46
+ if (current && current !== value) {
47
+ const prev = items.get(current);
48
+ if (prev) {
49
+ setExpanded(prev.trigger, false);
50
+ setDataState(prev.trigger, "closed");
51
+ setDataState(prev.content, "closed");
52
+ setHiddenAnimated(prev.content, true);
53
+ }
54
+ }
55
+ const item = items.get(value);
56
+ if (!item)
57
+ return;
58
+ state.activeItem.value = value;
59
+ setExpanded(item.trigger, true);
60
+ setHidden(item.content, false);
61
+ setDataState(item.trigger, "open");
62
+ setDataState(item.content, "open");
63
+ }
64
+ function closeAll() {
65
+ cancelTimers();
66
+ const current = state.activeItem.peek();
67
+ if (current) {
68
+ const item = items.get(current);
69
+ if (item) {
70
+ setExpanded(item.trigger, false);
71
+ setDataState(item.trigger, "closed");
72
+ setDataState(item.content, "closed");
73
+ setHiddenAnimated(item.content, true);
74
+ }
75
+ }
76
+ state.activeItem.value = null;
77
+ }
78
+ const list = (() => {
79
+ const __el0 = __element("div");
80
+ __on(__el0, "keydown", (event) => {
81
+ if (isKey(event, Keys.ArrowLeft, Keys.ArrowRight, Keys.Home, Keys.End)) {
82
+ handleListNavigation(event, triggers, {
83
+ orientation: orientation === "horizontal" ? "horizontal" : "vertical"
84
+ });
85
+ }
86
+ });
87
+ return __el0;
88
+ })();
89
+ const viewport = (() => {
90
+ const __el1 = __element("div");
91
+ return __el1;
92
+ })();
93
+ const root = (() => {
94
+ const __el2 = __element("nav");
95
+ __enterChildren(__el2);
96
+ __insert(__el2, list);
97
+ __insert(__el2, viewport);
98
+ __exitChildren();
99
+ return __el2;
100
+ })();
101
+ function Item(value, label) {
102
+ const ids = linkedIds("nav-menu");
103
+ const trigger = (() => {
104
+ const __el3 = __element("button");
105
+ __el3.setAttribute("type", "button");
106
+ {
107
+ const __v = ids.triggerId;
108
+ if (__v != null && __v !== false)
109
+ __el3.setAttribute("id", __v === true ? "" : __v);
110
+ }
111
+ {
112
+ const __v = ids.contentId;
113
+ if (__v != null && __v !== false)
114
+ __el3.setAttribute("aria-controls", __v === true ? "" : __v);
115
+ }
116
+ {
117
+ const __v = value;
118
+ if (__v != null && __v !== false)
119
+ __el3.setAttribute("data-value", __v === true ? "" : __v);
120
+ }
121
+ __el3.setAttribute("aria-expanded", "false");
122
+ __el3.setAttribute("data-state", "closed");
123
+ __on(__el3, "click", () => {
124
+ if (state.activeItem.peek() === value) {
125
+ closeAll();
126
+ } else {
127
+ openItem(value);
128
+ }
129
+ });
130
+ __on(__el3, "mouseenter", () => {
131
+ cancelTimers();
132
+ openTimeout.value = setTimeout(() => {
133
+ openItem(value);
134
+ openTimeout.value = null;
135
+ }, delayOpen);
136
+ });
137
+ __on(__el3, "mouseleave", () => {
138
+ cancelTimers();
139
+ closeTimeout.value = setTimeout(() => {
140
+ closeAll();
141
+ closeTimeout.value = null;
142
+ }, delayClose);
143
+ });
144
+ __on(__el3, "keydown", (event) => {
145
+ if (isKey(event, Keys.Enter, Keys.Space)) {
146
+ event.preventDefault();
147
+ openItem(value);
148
+ queueMicrotask(() => focusFirst(content));
149
+ }
150
+ if (isKey(event, Keys.Escape)) {
151
+ event.preventDefault();
152
+ closeAll();
153
+ }
154
+ });
155
+ __enterChildren(__el3);
156
+ __insert(__el3, label ?? value);
157
+ __exitChildren();
158
+ return __el3;
159
+ })();
160
+ const content = (() => {
161
+ const __el4 = __element("div");
162
+ {
163
+ const __v = ids.contentId;
164
+ if (__v != null && __v !== false)
165
+ __el4.setAttribute("id", __v === true ? "" : __v);
166
+ }
167
+ __el4.setAttribute("aria-hidden", "true");
168
+ __el4.setAttribute("data-state", "closed");
169
+ __el4.setAttribute("style", "display: none");
170
+ __on(__el4, "mouseenter", () => cancelTimers());
171
+ __on(__el4, "mouseleave", () => {
172
+ cancelTimers();
173
+ closeTimeout.value = setTimeout(() => {
174
+ closeAll();
175
+ closeTimeout.value = null;
176
+ }, delayClose);
177
+ });
178
+ __on(__el4, "keydown", (event) => {
179
+ if (isKey(event, Keys.Escape)) {
180
+ event.preventDefault();
181
+ event.stopPropagation();
182
+ closeAll();
183
+ trigger.focus();
184
+ }
185
+ });
186
+ return __el4;
187
+ })();
188
+ triggers.push(trigger);
189
+ setRovingTabindex(triggers, 0);
190
+ items.set(value, { trigger, content });
191
+ list.appendChild(trigger);
192
+ viewport.appendChild(content);
193
+ return { trigger, content };
194
+ }
195
+ function Link(href, label) {
196
+ const a = (() => {
197
+ const __el5 = __element("a");
198
+ {
199
+ const __v = href;
200
+ if (__v != null && __v !== false)
201
+ __el5.setAttribute("href", __v === true ? "" : __v);
202
+ }
203
+ __enterChildren(__el5);
204
+ __insert(__el5, label);
205
+ __exitChildren();
206
+ return __el5;
207
+ })();
208
+ list.appendChild(a);
209
+ return a;
210
+ }
211
+ applyAttrs(root, attrs);
212
+ return { root, list, viewport, state, Item, Link };
213
+ }
214
+ var NavigationMenu = {
215
+ Root: NavigationMenuRoot
216
+ };
217
+
218
+ export { NavigationMenu };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Menu
3
- } from "./chunk-tvpgeswh.js";
3
+ } from "./chunk-7ffg0caj.js";
4
4
 
5
5
  // src/dropdown-menu/dropdown-menu.ts
6
6
  var DropdownMenu = {
@@ -0,0 +1,95 @@
1
+ import {
2
+ createFloatingPosition
3
+ } from "./chunk-0mcr52hc.js";
4
+ import {
5
+ Keys,
6
+ isKey
7
+ } from "./chunk-jctqs9m4.js";
8
+ import {
9
+ setDataState,
10
+ setDescribedBy,
11
+ setHidden,
12
+ setHiddenAnimated
13
+ } from "./chunk-vvjyx7fe.js";
14
+ import {
15
+ applyAttrs
16
+ } from "./chunk-dpsgb1xw.js";
17
+ import {
18
+ uniqueId
19
+ } from "./chunk-8y1jf6xr.js";
20
+
21
+ // src/tooltip/tooltip.tsx
22
+ import { __element, __on } from "@vertz/ui/internals";
23
+ import { signal } from "@vertz/ui";
24
+ function TooltipRoot(options = {}) {
25
+ const { delay = 300, onOpenChange, positioning, ...attrs } = options;
26
+ const contentId = uniqueId("tooltip");
27
+ const state = { open: signal(false) };
28
+ let showTimeout = null;
29
+ let floatingCleanup = null;
30
+ function show() {
31
+ if (showTimeout !== null)
32
+ return;
33
+ showTimeout = setTimeout(() => {
34
+ state.open.value = true;
35
+ setHidden(content, false);
36
+ setDataState(content, "open");
37
+ if (positioning) {
38
+ const effectivePlacement = positioning.placement ?? "top";
39
+ const result = createFloatingPosition(trigger, content, {
40
+ ...positioning,
41
+ placement: effectivePlacement
42
+ });
43
+ floatingCleanup = result.cleanup;
44
+ }
45
+ onOpenChange?.(true);
46
+ showTimeout = null;
47
+ }, delay);
48
+ }
49
+ function hide() {
50
+ if (showTimeout !== null) {
51
+ clearTimeout(showTimeout);
52
+ showTimeout = null;
53
+ }
54
+ state.open.value = false;
55
+ setDataState(content, "closed");
56
+ setHiddenAnimated(content, true);
57
+ floatingCleanup?.();
58
+ floatingCleanup = null;
59
+ onOpenChange?.(false);
60
+ }
61
+ const trigger = (() => {
62
+ const __el0 = __element("span");
63
+ __on(__el0, "mouseenter", show);
64
+ __on(__el0, "mouseleave", hide);
65
+ __on(__el0, "focus", show);
66
+ __on(__el0, "blur", hide);
67
+ __on(__el0, "keydown", (event) => {
68
+ if (isKey(event, Keys.Escape)) {
69
+ hide();
70
+ }
71
+ });
72
+ return __el0;
73
+ })();
74
+ setDescribedBy(trigger, contentId);
75
+ const content = (() => {
76
+ const __el1 = __element("div");
77
+ __el1.setAttribute("role", "tooltip");
78
+ {
79
+ const __v = contentId;
80
+ if (__v != null && __v !== false)
81
+ __el1.setAttribute("id", __v === true ? "" : __v);
82
+ }
83
+ __el1.setAttribute("aria-hidden", "true");
84
+ __el1.setAttribute("data-state", "closed");
85
+ __el1.setAttribute("style", "display: none");
86
+ return __el1;
87
+ })();
88
+ applyAttrs(trigger, attrs);
89
+ return { trigger, content, state };
90
+ }
91
+ var Tooltip = {
92
+ Root: TooltipRoot
93
+ };
94
+
95
+ export { Tooltip };
@@ -0,0 +1,178 @@
1
+ import {
2
+ Keys,
3
+ handleListNavigation,
4
+ isKey
5
+ } from "./chunk-jctqs9m4.js";
6
+ import {
7
+ setDataState,
8
+ setExpanded,
9
+ setHidden,
10
+ setHiddenAnimated
11
+ } from "./chunk-vvjyx7fe.js";
12
+ import {
13
+ applyAttrs
14
+ } from "./chunk-dpsgb1xw.js";
15
+ import {
16
+ uniqueId
17
+ } from "./chunk-8y1jf6xr.js";
18
+
19
+ // src/accordion/accordion.tsx
20
+ import { __element, __enterChildren, __exitChildren, __insert, __on } from "@vertz/ui/internals";
21
+ import { signal } from "@vertz/ui";
22
+ function AccordionRoot(options = {}) {
23
+ const { multiple = false, defaultValue = [], onValueChange, ...attrs } = options;
24
+ const state = { value: signal([...defaultValue]) };
25
+ const triggers = [];
26
+ const itemMap = new Map;
27
+ function updateItemState(val, open) {
28
+ const entry = itemMap.get(val);
29
+ if (!entry)
30
+ return;
31
+ const { trigger: t, content: c } = entry;
32
+ if (open) {
33
+ setHidden(c, false);
34
+ }
35
+ const height = c.scrollHeight;
36
+ c.style.setProperty("--accordion-content-height", `${height}px`);
37
+ setExpanded(t, open);
38
+ setDataState(t, open ? "open" : "closed");
39
+ setDataState(c, open ? "open" : "closed");
40
+ if (!open) {
41
+ setHiddenAnimated(c, true);
42
+ }
43
+ }
44
+ function toggleItem(value) {
45
+ const prev = [...state.value.peek()];
46
+ const current = [...prev];
47
+ const idx = current.indexOf(value);
48
+ if (idx >= 0) {
49
+ current.splice(idx, 1);
50
+ } else {
51
+ if (multiple) {
52
+ current.push(value);
53
+ } else {
54
+ current.length = 0;
55
+ current.push(value);
56
+ }
57
+ }
58
+ state.value.value = current;
59
+ onValueChange?.(current);
60
+ for (const v of prev) {
61
+ if (!current.includes(v)) {
62
+ updateItemState(v, false);
63
+ }
64
+ }
65
+ for (const v of current) {
66
+ if (!prev.includes(v)) {
67
+ updateItemState(v, true);
68
+ }
69
+ }
70
+ }
71
+ const root = (() => {
72
+ const __el0 = __element("div");
73
+ __el0.setAttribute("data-orientation", "vertical");
74
+ __on(__el0, "keydown", (event) => {
75
+ if (isKey(event, Keys.ArrowUp, Keys.ArrowDown, Keys.Home, Keys.End)) {
76
+ handleListNavigation(event, triggers, { orientation: "vertical" });
77
+ }
78
+ });
79
+ return __el0;
80
+ })();
81
+ function Item(value) {
82
+ const baseId = uniqueId("accordion");
83
+ const triggerId = `${baseId}-trigger`;
84
+ const contentId = `${baseId}-content`;
85
+ const isOpen = state.value.peek().includes(value);
86
+ const trigger = (() => {
87
+ const __el1 = __element("button");
88
+ __el1.setAttribute("type", "button");
89
+ {
90
+ const __v = triggerId;
91
+ if (__v != null && __v !== false)
92
+ __el1.setAttribute("id", __v === true ? "" : __v);
93
+ }
94
+ {
95
+ const __v = contentId;
96
+ if (__v != null && __v !== false)
97
+ __el1.setAttribute("aria-controls", __v === true ? "" : __v);
98
+ }
99
+ {
100
+ const __v = value;
101
+ if (__v != null && __v !== false)
102
+ __el1.setAttribute("data-value", __v === true ? "" : __v);
103
+ }
104
+ {
105
+ const __v = isOpen ? "true" : "false";
106
+ if (__v != null && __v !== false)
107
+ __el1.setAttribute("aria-expanded", __v === true ? "" : __v);
108
+ }
109
+ {
110
+ const __v = isOpen ? "open" : "closed";
111
+ if (__v != null && __v !== false)
112
+ __el1.setAttribute("data-state", __v === true ? "" : __v);
113
+ }
114
+ __on(__el1, "click", () => toggleItem(value));
115
+ return __el1;
116
+ })();
117
+ const content = (() => {
118
+ const __el2 = __element("div");
119
+ __el2.setAttribute("role", "region");
120
+ {
121
+ const __v = contentId;
122
+ if (__v != null && __v !== false)
123
+ __el2.setAttribute("id", __v === true ? "" : __v);
124
+ }
125
+ {
126
+ const __v = triggerId;
127
+ if (__v != null && __v !== false)
128
+ __el2.setAttribute("aria-labelledby", __v === true ? "" : __v);
129
+ }
130
+ {
131
+ const __v = isOpen ? "false" : "true";
132
+ if (__v != null && __v !== false)
133
+ __el2.setAttribute("aria-hidden", __v === true ? "" : __v);
134
+ }
135
+ {
136
+ const __v = isOpen ? "open" : "closed";
137
+ if (__v != null && __v !== false)
138
+ __el2.setAttribute("data-state", __v === true ? "" : __v);
139
+ }
140
+ {
141
+ const __v = isOpen ? "" : "display: none";
142
+ if (__v != null && __v !== false)
143
+ __el2.setAttribute("style", __v === true ? "" : __v);
144
+ }
145
+ return __el2;
146
+ })();
147
+ const item = (() => {
148
+ const __el3 = __element("div");
149
+ {
150
+ const __v = value;
151
+ if (__v != null && __v !== false)
152
+ __el3.setAttribute("data-value", __v === true ? "" : __v);
153
+ }
154
+ __enterChildren(__el3);
155
+ __insert(__el3, trigger);
156
+ __insert(__el3, content);
157
+ __exitChildren();
158
+ return __el3;
159
+ })();
160
+ itemMap.set(value, { trigger, content });
161
+ triggers.push(trigger);
162
+ root.appendChild(item);
163
+ if (isOpen) {
164
+ requestAnimationFrame(() => {
165
+ const height = content.scrollHeight;
166
+ content.style.setProperty("--accordion-content-height", `${height}px`);
167
+ });
168
+ }
169
+ return { item, trigger, content };
170
+ }
171
+ applyAttrs(root, attrs);
172
+ return { root, state, Item };
173
+ }
174
+ var Accordion = {
175
+ Root: AccordionRoot
176
+ };
177
+
178
+ export { Accordion };