@vertz/ui-primitives 0.2.15 → 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 (109) hide show
  1. package/dist/shared/chunk-0mcr52hc.js +78 -0
  2. package/dist/shared/chunk-18y8gfk0.js +308 -0
  3. package/dist/shared/chunk-34yfm2b0.js +182 -0
  4. package/dist/shared/chunk-4085nbdq.js +196 -0
  5. package/dist/shared/chunk-4da5zksy.js +46 -0
  6. package/dist/shared/chunk-7ffg0caj.js +265 -0
  7. package/dist/shared/chunk-7kpsyjd7.js +61 -0
  8. package/dist/shared/chunk-7krvqrwq.js +177 -0
  9. package/dist/shared/chunk-8ak7vdk1.js +151 -0
  10. package/dist/shared/chunk-8nk0ya7a.js +163 -0
  11. package/dist/shared/chunk-8tvzqry6.js +218 -0
  12. package/dist/shared/chunk-8y1jf6xr.js +17 -0
  13. package/dist/shared/chunk-96d9nr7y.js +19 -0
  14. package/dist/shared/chunk-9hj9p7s2.js +95 -0
  15. package/dist/shared/chunk-a6wp8c32.js +32 -0
  16. package/dist/shared/chunk-avxcmmk6.js +178 -0
  17. package/dist/shared/chunk-bew4bjgf.js +165 -0
  18. package/dist/shared/chunk-dpsgb1xw.js +18 -0
  19. package/dist/shared/chunk-e2v1c9ex.js +62 -0
  20. package/dist/shared/chunk-g9qvd20g.js +133 -0
  21. package/dist/shared/chunk-gkddsbmh.js +73 -0
  22. package/dist/shared/chunk-gt0wth9h.js +128 -0
  23. package/dist/shared/chunk-hr9hx58m.js +71 -0
  24. package/dist/shared/chunk-j4cm8avr.js +175 -0
  25. package/dist/shared/chunk-jctqs9m4.js +60 -0
  26. package/dist/shared/chunk-jz0s6srh.js +161 -0
  27. package/dist/shared/chunk-kg27s15c.js +282 -0
  28. package/dist/shared/chunk-m1ptgp1s.js +142 -0
  29. package/dist/shared/chunk-n9nwx58j.js +60 -0
  30. package/dist/shared/chunk-ppcv3ehd.js +85 -0
  31. package/dist/shared/chunk-rnjm61t0.js +34 -0
  32. package/dist/shared/chunk-sqs8kyb2.js +288 -0
  33. package/dist/shared/chunk-t1vkvsz2.js +175 -0
  34. package/dist/shared/chunk-tfyg0qrp.js +117 -0
  35. package/dist/shared/chunk-ttsyf6ma.js +239 -0
  36. package/dist/shared/chunk-vvjyx7fe.js +62 -0
  37. package/dist/shared/chunk-x0we8gcy.js +219 -0
  38. package/dist/shared/chunk-x2hz98qn.js +108 -0
  39. package/dist/shared/chunk-yr9yzpvq.js +107 -0
  40. package/dist/src/accordion/accordion.d.ts +35 -0
  41. package/dist/src/accordion/accordion.js +10 -0
  42. package/dist/src/alert-dialog/alert-dialog.d.ts +26 -0
  43. package/dist/src/alert-dialog/alert-dialog.js +9 -0
  44. package/dist/src/badge/badge.d.ts +22 -0
  45. package/dist/src/badge/badge.js +8 -0
  46. package/dist/src/button/button.d.ts +20 -0
  47. package/dist/src/button/button.js +8 -0
  48. package/dist/src/calendar/calendar.d.ts +52 -0
  49. package/dist/src/calendar/calendar.js +7 -0
  50. package/dist/src/carousel/carousel.d.ts +39 -0
  51. package/dist/src/carousel/carousel.js +9 -0
  52. package/dist/src/checkbox/checkbox.d.ts +22 -0
  53. package/dist/src/checkbox/checkbox.js +9 -0
  54. package/dist/src/collapsible/collapsible.d.ts +33 -0
  55. package/dist/src/collapsible/collapsible.js +9 -0
  56. package/dist/src/combobox/combobox.d.ts +35 -0
  57. package/dist/src/combobox/combobox.js +10 -0
  58. package/dist/src/command/command.d.ts +41 -0
  59. package/dist/src/command/command.js +10 -0
  60. package/dist/src/context-menu/context-menu.d.ts +51 -0
  61. package/dist/src/context-menu/context-menu.js +12 -0
  62. package/dist/src/date-picker/date-picker.d.ts +47 -0
  63. package/dist/src/date-picker/date-picker.js +15 -0
  64. package/dist/src/dialog/dialog.d.ts +36 -0
  65. package/dist/src/dialog/dialog.js +11 -0
  66. package/dist/src/dropdown-menu/dropdown-menu.d.ts +54 -0
  67. package/dist/src/dropdown-menu/dropdown-menu.js +13 -0
  68. package/dist/src/hover-card/hover-card.d.ts +45 -0
  69. package/dist/src/hover-card/hover-card.js +11 -0
  70. package/dist/{index.d.ts → src/index.d.ts} +132 -140
  71. package/dist/src/index.js +137 -0
  72. package/dist/src/menu/menu.d.ts +51 -0
  73. package/dist/src/menu/menu.js +12 -0
  74. package/dist/src/menubar/menubar.d.ts +52 -0
  75. package/dist/src/menubar/menubar.js +13 -0
  76. package/dist/src/navigation-menu/navigation-menu.d.ts +37 -0
  77. package/dist/src/navigation-menu/navigation-menu.js +11 -0
  78. package/dist/src/popover/popover.d.ts +44 -0
  79. package/dist/src/popover/popover.js +13 -0
  80. package/dist/src/progress/progress.d.ts +32 -0
  81. package/dist/src/progress/progress.js +9 -0
  82. package/dist/src/radio/radio.d.ts +30 -0
  83. package/dist/src/radio/radio.js +11 -0
  84. package/dist/src/resizable-panel/resizable-panel.d.ts +36 -0
  85. package/dist/src/resizable-panel/resizable-panel.js +9 -0
  86. package/dist/src/scroll-area/scroll-area.d.ts +37 -0
  87. package/dist/src/scroll-area/scroll-area.js +7 -0
  88. package/dist/src/select/select.d.ts +53 -0
  89. package/dist/src/select/select.js +12 -0
  90. package/dist/src/sheet/sheet.d.ts +24 -0
  91. package/dist/src/sheet/sheet.js +10 -0
  92. package/dist/src/slider/slider.d.ts +36 -0
  93. package/dist/src/slider/slider.js +10 -0
  94. package/dist/src/switch/switch.d.ts +21 -0
  95. package/dist/src/switch/switch.js +9 -0
  96. package/dist/src/tabs/tabs.d.ts +35 -0
  97. package/dist/src/tabs/tabs.js +11 -0
  98. package/dist/src/toast/toast.d.ts +36 -0
  99. package/dist/src/toast/toast.js +9 -0
  100. package/dist/src/toggle/toggle.d.ts +21 -0
  101. package/dist/src/toggle/toggle.js +9 -0
  102. package/dist/src/toggle-group/toggle-group.d.ts +34 -0
  103. package/dist/src/toggle-group/toggle-group.js +10 -0
  104. package/dist/src/tooltip/tooltip.d.ts +44 -0
  105. package/dist/src/tooltip/tooltip.js +11 -0
  106. package/dist/src/utils.d.ts +176 -0
  107. package/dist/src/utils.js +72 -0
  108. package/package.json +12 -10
  109. package/dist/index.js +0 -3675
@@ -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 };
@@ -0,0 +1,34 @@
1
+ import {
2
+ applyAttrs
3
+ } from "./chunk-dpsgb1xw.js";
4
+ import {
5
+ uniqueId
6
+ } from "./chunk-8y1jf6xr.js";
7
+
8
+ // src/badge/badge.tsx
9
+ import { __element } from "@vertz/ui/internals";
10
+ function BadgeRoot(options = {}) {
11
+ const { variant = "default", ...attrs } = options;
12
+ const badge = (() => {
13
+ const __el0 = __element("span");
14
+ {
15
+ const __v = uniqueId("badge");
16
+ if (__v != null && __v !== false)
17
+ __el0.setAttribute("id", __v === true ? "" : __v);
18
+ }
19
+ __el0.setAttribute("data-slot", "badge");
20
+ {
21
+ const __v = variant;
22
+ if (__v != null && __v !== false)
23
+ __el0.setAttribute("data-variant", __v === true ? "" : __v);
24
+ }
25
+ return __el0;
26
+ })();
27
+ applyAttrs(badge, attrs);
28
+ return { badge };
29
+ }
30
+ var Badge = {
31
+ Root: BadgeRoot
32
+ };
33
+
34
+ export { 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,175 @@
1
+ import {
2
+ focusFirst,
3
+ saveFocus,
4
+ trapFocus
5
+ } from "./chunk-e2v1c9ex.js";
6
+ import {
7
+ Keys,
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
+ linkedIds
18
+ } from "./chunk-8y1jf6xr.js";
19
+
20
+ // src/sheet/sheet.tsx
21
+ import { __element, __on } from "@vertz/ui/internals";
22
+ import { signal } from "@vertz/ui";
23
+ function SheetRoot(options = {}) {
24
+ const { side = "right", defaultOpen = false, onOpenChange } = options;
25
+ const ids = linkedIds("sheet");
26
+ const state = { open: signal(defaultOpen) };
27
+ let restoreFocus = null;
28
+ let removeTrap = null;
29
+ function show() {
30
+ state.open.value = true;
31
+ setExpanded(trigger, true);
32
+ setHidden(overlay, false);
33
+ setHidden(content, false);
34
+ setDataState(trigger, "open");
35
+ setDataState(overlay, "open");
36
+ setDataState(content, "open");
37
+ restoreFocus = saveFocus();
38
+ removeTrap = trapFocus(content);
39
+ queueMicrotask(() => focusFirst(content));
40
+ onOpenChange?.(true);
41
+ }
42
+ function hide() {
43
+ state.open.value = false;
44
+ setExpanded(trigger, false);
45
+ setDataState(trigger, "closed");
46
+ setDataState(overlay, "closed");
47
+ setDataState(content, "closed");
48
+ setHiddenAnimated(overlay, true);
49
+ setHiddenAnimated(content, true);
50
+ removeTrap?.();
51
+ removeTrap = null;
52
+ restoreFocus?.();
53
+ restoreFocus = null;
54
+ onOpenChange?.(false);
55
+ }
56
+ const SWIPE_THRESHOLD = 50;
57
+ let startX = 0;
58
+ let startY = 0;
59
+ function handlePointerDown(e) {
60
+ startX = e.clientX;
61
+ startY = e.clientY;
62
+ }
63
+ function handlePointerUp(e) {
64
+ if (!state.open.peek())
65
+ return;
66
+ const deltaX = e.clientX - startX;
67
+ const deltaY = e.clientY - startY;
68
+ const shouldDismiss = side === "right" && deltaX >= SWIPE_THRESHOLD || side === "left" && deltaX <= -SWIPE_THRESHOLD || side === "bottom" && deltaY >= SWIPE_THRESHOLD || side === "top" && deltaY <= -SWIPE_THRESHOLD;
69
+ if (shouldDismiss) {
70
+ hide();
71
+ }
72
+ }
73
+ const trigger = (() => {
74
+ const __el0 = __element("button");
75
+ __el0.setAttribute("type", "button");
76
+ {
77
+ const __v = ids.triggerId;
78
+ if (__v != null && __v !== false)
79
+ __el0.setAttribute("id", __v === true ? "" : __v);
80
+ }
81
+ {
82
+ const __v = ids.contentId;
83
+ if (__v != null && __v !== false)
84
+ __el0.setAttribute("aria-controls", __v === true ? "" : __v);
85
+ }
86
+ {
87
+ const __v = defaultOpen ? "true" : "false";
88
+ if (__v != null && __v !== false)
89
+ __el0.setAttribute("aria-expanded", __v === true ? "" : __v);
90
+ }
91
+ {
92
+ const __v = defaultOpen ? "open" : "closed";
93
+ if (__v != null && __v !== false)
94
+ __el0.setAttribute("data-state", __v === true ? "" : __v);
95
+ }
96
+ __on(__el0, "click", () => {
97
+ state.open.peek() ? hide() : show();
98
+ });
99
+ return __el0;
100
+ })();
101
+ const overlay = (() => {
102
+ const __el1 = __element("div");
103
+ __el1.setAttribute("data-sheet-overlay", "");
104
+ {
105
+ const __v = defaultOpen ? "false" : "true";
106
+ if (__v != null && __v !== false)
107
+ __el1.setAttribute("aria-hidden", __v === true ? "" : __v);
108
+ }
109
+ {
110
+ const __v = defaultOpen ? "open" : "closed";
111
+ if (__v != null && __v !== false)
112
+ __el1.setAttribute("data-state", __v === true ? "" : __v);
113
+ }
114
+ {
115
+ const __v = defaultOpen ? "" : "display: none";
116
+ if (__v != null && __v !== false)
117
+ __el1.setAttribute("style", __v === true ? "" : __v);
118
+ }
119
+ __on(__el1, "click", () => hide());
120
+ return __el1;
121
+ })();
122
+ const content = (() => {
123
+ const __el2 = __element("div");
124
+ __el2.setAttribute("role", "dialog");
125
+ __el2.setAttribute("aria-modal", "true");
126
+ {
127
+ const __v = ids.contentId;
128
+ if (__v != null && __v !== false)
129
+ __el2.setAttribute("id", __v === true ? "" : __v);
130
+ }
131
+ {
132
+ const __v = side;
133
+ if (__v != null && __v !== false)
134
+ __el2.setAttribute("data-side", __v === true ? "" : __v);
135
+ }
136
+ {
137
+ const __v = defaultOpen ? "false" : "true";
138
+ if (__v != null && __v !== false)
139
+ __el2.setAttribute("aria-hidden", __v === true ? "" : __v);
140
+ }
141
+ {
142
+ const __v = defaultOpen ? "open" : "closed";
143
+ if (__v != null && __v !== false)
144
+ __el2.setAttribute("data-state", __v === true ? "" : __v);
145
+ }
146
+ {
147
+ const __v = defaultOpen ? "" : "display: none";
148
+ if (__v != null && __v !== false)
149
+ __el2.setAttribute("style", __v === true ? "" : __v);
150
+ }
151
+ __on(__el2, "keydown", (event) => {
152
+ if (isKey(event, Keys.Escape)) {
153
+ event.preventDefault();
154
+ event.stopPropagation();
155
+ hide();
156
+ }
157
+ });
158
+ __on(__el2, "pointerdown", handlePointerDown);
159
+ __on(__el2, "pointerup", handlePointerUp);
160
+ return __el2;
161
+ })();
162
+ const close = (() => {
163
+ const __el3 = __element("button");
164
+ __el3.setAttribute("type", "button");
165
+ __el3.setAttribute("aria-label", "Close");
166
+ __on(__el3, "click", () => hide());
167
+ return __el3;
168
+ })();
169
+ return { trigger, overlay, content, close, state, show, hide };
170
+ }
171
+ var Sheet = {
172
+ Root: SheetRoot
173
+ };
174
+
175
+ export { Sheet };
@@ -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 };