@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,265 @@
1
+ import {
2
+ createDismiss
3
+ } from "./chunk-a6wp8c32.js";
4
+ import {
5
+ createFloatingPosition
6
+ } from "./chunk-0mcr52hc.js";
7
+ import {
8
+ Keys,
9
+ handleListNavigation,
10
+ isKey
11
+ } from "./chunk-jctqs9m4.js";
12
+ import {
13
+ setDataState,
14
+ setExpanded,
15
+ setHidden,
16
+ setHiddenAnimated
17
+ } from "./chunk-vvjyx7fe.js";
18
+ import {
19
+ applyAttrs
20
+ } from "./chunk-dpsgb1xw.js";
21
+ import {
22
+ linkedIds
23
+ } from "./chunk-8y1jf6xr.js";
24
+
25
+ // src/menu/menu.tsx
26
+ import { __element, __enterChildren, __exitChildren, __insert, __on } from "@vertz/ui/internals";
27
+ import { signal } from "@vertz/ui";
28
+ function MenuRoot(options = {}) {
29
+ const { onSelect, positioning, ...attrs } = options;
30
+ const ids = linkedIds("menu");
31
+ const state = {
32
+ open: signal(false),
33
+ activeIndex: signal(-1)
34
+ };
35
+ const items = [];
36
+ let floatingCleanup = null;
37
+ let dismissCleanup = null;
38
+ function handleClickOutside(event) {
39
+ const target = event.target;
40
+ if (!trigger.contains(target) && !content.contains(target)) {
41
+ close();
42
+ }
43
+ }
44
+ function open(activateFirst = false) {
45
+ state.open.value = true;
46
+ setExpanded(trigger, true);
47
+ setHidden(content, false);
48
+ setDataState(trigger, "open");
49
+ setDataState(content, "open");
50
+ if (positioning) {
51
+ const ref = positioning.referenceElement ?? trigger;
52
+ const result = createFloatingPosition(ref, content, positioning);
53
+ floatingCleanup = result.cleanup;
54
+ dismissCleanup = createDismiss({
55
+ onDismiss: close,
56
+ insideElements: [ref, trigger, content],
57
+ escapeKey: false
58
+ });
59
+ } else {
60
+ document.addEventListener("mousedown", handleClickOutside);
61
+ }
62
+ if (activateFirst && items.length > 0) {
63
+ state.activeIndex.value = 0;
64
+ updateActiveItem(0);
65
+ items[0]?.focus();
66
+ } else {
67
+ state.activeIndex.value = -1;
68
+ updateActiveItem(-1);
69
+ content.focus();
70
+ }
71
+ }
72
+ function close() {
73
+ state.open.value = false;
74
+ setExpanded(trigger, false);
75
+ setDataState(trigger, "closed");
76
+ setDataState(content, "closed");
77
+ setHiddenAnimated(content, true);
78
+ if (positioning) {
79
+ floatingCleanup?.();
80
+ floatingCleanup = null;
81
+ dismissCleanup?.();
82
+ dismissCleanup = null;
83
+ } else {
84
+ document.removeEventListener("mousedown", handleClickOutside);
85
+ }
86
+ trigger.focus();
87
+ }
88
+ function updateActiveItem(index) {
89
+ for (let i = 0;i < items.length; i++) {
90
+ items[i]?.setAttribute("tabindex", i === index ? "0" : "-1");
91
+ }
92
+ }
93
+ const trigger = (() => {
94
+ const __el0 = __element("button");
95
+ __el0.setAttribute("type", "button");
96
+ {
97
+ const __v = ids.triggerId;
98
+ if (__v != null && __v !== false)
99
+ __el0.setAttribute("id", __v === true ? "" : __v);
100
+ }
101
+ {
102
+ const __v = ids.contentId;
103
+ if (__v != null && __v !== false)
104
+ __el0.setAttribute("aria-controls", __v === true ? "" : __v);
105
+ }
106
+ __el0.setAttribute("aria-haspopup", "menu");
107
+ __el0.setAttribute("aria-expanded", "false");
108
+ __el0.setAttribute("data-state", "closed");
109
+ __on(__el0, "click", () => {
110
+ if (state.open.peek()) {
111
+ close();
112
+ } else {
113
+ open();
114
+ }
115
+ });
116
+ __on(__el0, "keydown", (event) => {
117
+ if (isKey(event, Keys.ArrowDown, Keys.Enter, Keys.Space)) {
118
+ event.preventDefault();
119
+ if (!state.open.peek())
120
+ open(true);
121
+ }
122
+ });
123
+ return __el0;
124
+ })();
125
+ const content = (() => {
126
+ const __el1 = __element("div");
127
+ __el1.setAttribute("role", "menu");
128
+ __el1.setAttribute("tabindex", "-1");
129
+ {
130
+ const __v = ids.contentId;
131
+ if (__v != null && __v !== false)
132
+ __el1.setAttribute("id", __v === true ? "" : __v);
133
+ }
134
+ __el1.setAttribute("aria-hidden", "true");
135
+ __el1.setAttribute("data-state", "closed");
136
+ __el1.setAttribute("style", "display: none");
137
+ __on(__el1, "keydown", (event) => {
138
+ if (isKey(event, Keys.Escape)) {
139
+ event.preventDefault();
140
+ close();
141
+ return;
142
+ }
143
+ if (isKey(event, Keys.Enter, Keys.Space)) {
144
+ event.preventDefault();
145
+ const active = items[state.activeIndex.peek()];
146
+ if (active) {
147
+ const val = active.getAttribute("data-value");
148
+ if (val !== null) {
149
+ onSelect?.(val);
150
+ close();
151
+ }
152
+ }
153
+ return;
154
+ }
155
+ if (state.activeIndex.peek() === -1) {
156
+ if (isKey(event, Keys.ArrowDown)) {
157
+ event.preventDefault();
158
+ state.activeIndex.value = 0;
159
+ updateActiveItem(0);
160
+ items[0]?.focus();
161
+ return;
162
+ }
163
+ if (isKey(event, Keys.ArrowUp)) {
164
+ event.preventDefault();
165
+ const last = items.length - 1;
166
+ state.activeIndex.value = last;
167
+ updateActiveItem(last);
168
+ items[last]?.focus();
169
+ return;
170
+ }
171
+ }
172
+ const result = handleListNavigation(event, items, { orientation: "vertical" });
173
+ if (result) {
174
+ const idx = items.indexOf(result);
175
+ if (idx >= 0) {
176
+ state.activeIndex.value = idx;
177
+ updateActiveItem(idx);
178
+ }
179
+ return;
180
+ }
181
+ if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {
182
+ const char = event.key.toLowerCase();
183
+ const match = items.find((item) => item.textContent?.toLowerCase().startsWith(char));
184
+ if (match) {
185
+ const idx = items.indexOf(match);
186
+ state.activeIndex.value = idx;
187
+ updateActiveItem(idx);
188
+ match.focus();
189
+ }
190
+ }
191
+ });
192
+ return __el1;
193
+ })();
194
+ function createItem(value, label, parent) {
195
+ const item = (() => {
196
+ const __el2 = __element("div");
197
+ __el2.setAttribute("role", "menuitem");
198
+ {
199
+ const __v = value;
200
+ if (__v != null && __v !== false)
201
+ __el2.setAttribute("data-value", __v === true ? "" : __v);
202
+ }
203
+ __el2.setAttribute("tabindex", "-1");
204
+ __on(__el2, "click", () => {
205
+ onSelect?.(value);
206
+ close();
207
+ });
208
+ __enterChildren(__el2);
209
+ __insert(__el2, label ?? value);
210
+ __exitChildren();
211
+ return __el2;
212
+ })();
213
+ items.push(item);
214
+ (parent ?? content).appendChild(item);
215
+ return item;
216
+ }
217
+ function Item(value, label) {
218
+ return createItem(value, label);
219
+ }
220
+ function Group(label) {
221
+ const el = (() => {
222
+ const __el3 = __element("div");
223
+ __el3.setAttribute("role", "group");
224
+ {
225
+ const __v = label;
226
+ if (__v != null && __v !== false)
227
+ __el3.setAttribute("aria-label", __v === true ? "" : __v);
228
+ }
229
+ return __el3;
230
+ })();
231
+ content.appendChild(el);
232
+ return {
233
+ el,
234
+ Item: (value, itemLabel) => createItem(value, itemLabel, el)
235
+ };
236
+ }
237
+ function Separator() {
238
+ const hr = (() => {
239
+ const __el4 = __element("hr");
240
+ __el4.setAttribute("role", "separator");
241
+ return __el4;
242
+ })();
243
+ content.appendChild(hr);
244
+ return hr;
245
+ }
246
+ function Label(text) {
247
+ const el = (() => {
248
+ const __el5 = __element("div");
249
+ __el5.setAttribute("role", "none");
250
+ __enterChildren(__el5);
251
+ __insert(__el5, text);
252
+ __exitChildren();
253
+ return __el5;
254
+ })();
255
+ content.appendChild(el);
256
+ return el;
257
+ }
258
+ applyAttrs(trigger, attrs);
259
+ return { trigger, content, state, Item, Group, Separator, Label };
260
+ }
261
+ var Menu = {
262
+ Root: MenuRoot
263
+ };
264
+
265
+ export { Menu };
@@ -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/switch/switch.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 SwitchRoot(options = {}) {
13
- const { defaultChecked = false, disabled = false, onCheckedChange } = options;
16
+ const { defaultChecked = false, disabled = false, onCheckedChange, ...attrs } = options;
14
17
  const checked = signal(defaultChecked, "checked");
15
18
  function toggle() {
16
19
  if (disabled)
@@ -18,9 +21,8 @@ function SwitchRoot(options = {}) {
18
21
  checked.value = !checked.value;
19
22
  onCheckedChange?.(checked.value);
20
23
  }
21
- return (() => {
24
+ const el = computed(() => (() => {
22
25
  const __el0 = __element("button");
23
- __el0.setAttribute("data-v-id", "SwitchRoot");
24
26
  __el0.setAttribute("type", "button");
25
27
  __el0.setAttribute("role", "switch");
26
28
  {
@@ -48,7 +50,9 @@ function SwitchRoot(options = {}) {
48
50
  }
49
51
  });
50
52
  return __el0;
51
- })();
53
+ })());
54
+ applyAttrs(el.value, attrs);
55
+ return el.value;
52
56
  }
53
57
  var Switch = {
54
58
  Root: SwitchRoot
@@ -0,0 +1,177 @@
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
+ setLabelledBy
16
+ } from "./chunk-vvjyx7fe.js";
17
+ import {
18
+ applyAttrs
19
+ } from "./chunk-dpsgb1xw.js";
20
+ import {
21
+ linkedIds
22
+ } from "./chunk-8y1jf6xr.js";
23
+
24
+ // src/dialog/dialog.tsx
25
+ import { __element, __on } from "@vertz/ui/internals";
26
+ import { signal } from "@vertz/ui";
27
+ function DialogRoot(options = {}) {
28
+ const { modal = true, defaultOpen = false, onOpenChange, ...attrs } = options;
29
+ const ids = linkedIds("dialog");
30
+ const titleId = `${ids.contentId}-title`;
31
+ const state = { open: signal(defaultOpen) };
32
+ let restoreFocus = null;
33
+ let removeTrap = null;
34
+ function openDialog() {
35
+ state.open.value = true;
36
+ setExpanded(trigger, true);
37
+ setHidden(overlay, false);
38
+ setHidden(content, false);
39
+ setDataState(trigger, "open");
40
+ setDataState(overlay, "open");
41
+ setDataState(content, "open");
42
+ restoreFocus = saveFocus();
43
+ if (modal) {
44
+ removeTrap = trapFocus(content);
45
+ }
46
+ queueMicrotask(() => focusFirst(content));
47
+ onOpenChange?.(true);
48
+ }
49
+ function closeDialog() {
50
+ state.open.value = false;
51
+ setExpanded(trigger, false);
52
+ setDataState(trigger, "closed");
53
+ setDataState(overlay, "closed");
54
+ setDataState(content, "closed");
55
+ setHiddenAnimated(overlay, true);
56
+ setHiddenAnimated(content, true);
57
+ removeTrap?.();
58
+ removeTrap = null;
59
+ restoreFocus?.();
60
+ restoreFocus = null;
61
+ onOpenChange?.(false);
62
+ }
63
+ const trigger = (() => {
64
+ const __el0 = __element("button");
65
+ __el0.setAttribute("type", "button");
66
+ {
67
+ const __v = ids.triggerId;
68
+ if (__v != null && __v !== false)
69
+ __el0.setAttribute("id", __v === true ? "" : __v);
70
+ }
71
+ {
72
+ const __v = ids.contentId;
73
+ if (__v != null && __v !== false)
74
+ __el0.setAttribute("aria-controls", __v === true ? "" : __v);
75
+ }
76
+ {
77
+ const __v = defaultOpen ? "true" : "false";
78
+ if (__v != null && __v !== false)
79
+ __el0.setAttribute("aria-expanded", __v === true ? "" : __v);
80
+ }
81
+ {
82
+ const __v = defaultOpen ? "open" : "closed";
83
+ if (__v != null && __v !== false)
84
+ __el0.setAttribute("data-state", __v === true ? "" : __v);
85
+ }
86
+ __on(__el0, "click", () => {
87
+ if (state.open.peek()) {
88
+ closeDialog();
89
+ } else {
90
+ openDialog();
91
+ }
92
+ });
93
+ return __el0;
94
+ })();
95
+ const overlay = (() => {
96
+ const __el1 = __element("div");
97
+ __el1.setAttribute("data-dialog-overlay", "");
98
+ {
99
+ const __v = defaultOpen ? "false" : "true";
100
+ if (__v != null && __v !== false)
101
+ __el1.setAttribute("aria-hidden", __v === true ? "" : __v);
102
+ }
103
+ {
104
+ const __v = defaultOpen ? "open" : "closed";
105
+ if (__v != null && __v !== false)
106
+ __el1.setAttribute("data-state", __v === true ? "" : __v);
107
+ }
108
+ {
109
+ const __v = defaultOpen ? "" : "display: none";
110
+ if (__v != null && __v !== false)
111
+ __el1.setAttribute("style", __v === true ? "" : __v);
112
+ }
113
+ __on(__el1, "click", () => closeDialog());
114
+ return __el1;
115
+ })();
116
+ const content = (() => {
117
+ const __el2 = __element("div");
118
+ __el2.setAttribute("role", "dialog");
119
+ {
120
+ const __v = ids.contentId;
121
+ if (__v != null && __v !== false)
122
+ __el2.setAttribute("id", __v === true ? "" : __v);
123
+ }
124
+ {
125
+ const __v = modal ? "true" : undefined;
126
+ if (__v != null && __v !== false)
127
+ __el2.setAttribute("aria-modal", __v === true ? "" : __v);
128
+ }
129
+ {
130
+ const __v = defaultOpen ? "false" : "true";
131
+ if (__v != null && __v !== false)
132
+ __el2.setAttribute("aria-hidden", __v === true ? "" : __v);
133
+ }
134
+ {
135
+ const __v = defaultOpen ? "open" : "closed";
136
+ if (__v != null && __v !== false)
137
+ __el2.setAttribute("data-state", __v === true ? "" : __v);
138
+ }
139
+ {
140
+ const __v = defaultOpen ? "" : "display: none";
141
+ if (__v != null && __v !== false)
142
+ __el2.setAttribute("style", __v === true ? "" : __v);
143
+ }
144
+ __on(__el2, "keydown", (event) => {
145
+ if (isKey(event, Keys.Escape)) {
146
+ event.preventDefault();
147
+ event.stopPropagation();
148
+ closeDialog();
149
+ }
150
+ });
151
+ return __el2;
152
+ })();
153
+ setLabelledBy(content, titleId);
154
+ const title = (() => {
155
+ const __el3 = __element("h2");
156
+ {
157
+ const __v = titleId;
158
+ if (__v != null && __v !== false)
159
+ __el3.setAttribute("id", __v === true ? "" : __v);
160
+ }
161
+ return __el3;
162
+ })();
163
+ const close = (() => {
164
+ const __el4 = __element("button");
165
+ __el4.setAttribute("type", "button");
166
+ __el4.setAttribute("aria-label", "Close");
167
+ __on(__el4, "click", () => closeDialog());
168
+ return __el4;
169
+ })();
170
+ applyAttrs(content, attrs);
171
+ return { trigger, overlay, content, title, close, state, show: openDialog, hide: closeDialog };
172
+ }
173
+ var Dialog = {
174
+ Root: DialogRoot
175
+ };
176
+
177
+ export { Dialog };
@@ -0,0 +1,151 @@
1
+ import {
2
+ Keys,
3
+ isKey
4
+ } from "./chunk-jctqs9m4.js";
5
+ import {
6
+ setDataState,
7
+ setValueRange
8
+ } from "./chunk-vvjyx7fe.js";
9
+ import {
10
+ applyAttrs
11
+ } from "./chunk-dpsgb1xw.js";
12
+ import {
13
+ uniqueId
14
+ } from "./chunk-8y1jf6xr.js";
15
+
16
+ // src/slider/slider.tsx
17
+ import { __element, __enterChildren, __exitChildren, __insert, __on } from "@vertz/ui/internals";
18
+ import { signal } from "@vertz/ui";
19
+ function SliderRoot(options = {}) {
20
+ const {
21
+ defaultValue = 0,
22
+ min = 0,
23
+ max = 100,
24
+ step = 1,
25
+ disabled = false,
26
+ onValueChange,
27
+ ...attrs
28
+ } = options;
29
+ const state = {
30
+ value: signal(defaultValue),
31
+ disabled: signal(disabled)
32
+ };
33
+ function clamp(val) {
34
+ return Math.min(max, Math.max(min, val));
35
+ }
36
+ function updatePosition(pct2) {
37
+ thumb.style.left = `${pct2}%`;
38
+ fill.style.width = `${pct2}%`;
39
+ }
40
+ function setValue(val) {
41
+ if (state.disabled.peek())
42
+ return;
43
+ const clamped = clamp(val);
44
+ state.value.value = clamped;
45
+ setValueRange(thumb, clamped, min, max);
46
+ const pct2 = (clamped - min) / (max - min) * 100;
47
+ updatePosition(pct2);
48
+ setDataState(root, "active");
49
+ onValueChange?.(clamped);
50
+ }
51
+ function valueFromPointer(event) {
52
+ const rect = track.getBoundingClientRect();
53
+ const pct2 = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));
54
+ const raw = min + pct2 * (max - min);
55
+ return Math.round(raw / step) * step;
56
+ }
57
+ const fill = (() => {
58
+ const __el0 = __element("div");
59
+ __el0.setAttribute("data-part", "fill");
60
+ __el0.setAttribute("style", "position: absolute; height: 100%; border-radius: inherit;");
61
+ return __el0;
62
+ })();
63
+ const thumb = (() => {
64
+ const __el1 = __element("div");
65
+ __el1.setAttribute("role", "slider");
66
+ {
67
+ const __v = disabled ? "-1" : "0";
68
+ if (__v != null && __v !== false)
69
+ __el1.setAttribute("tabindex", __v === true ? "" : __v);
70
+ }
71
+ __el1.setAttribute("data-part", "thumb");
72
+ {
73
+ const __v = disabled ? "true" : undefined;
74
+ if (__v != null && __v !== false)
75
+ __el1.setAttribute("aria-disabled", __v === true ? "" : __v);
76
+ }
77
+ __el1.setAttribute("style", "position: absolute; transform: translate(-50%, -50%);");
78
+ __on(__el1, "keydown", (event) => {
79
+ if (state.disabled.peek())
80
+ return;
81
+ const current = state.value.peek();
82
+ if (isKey(event, Keys.ArrowRight, Keys.ArrowUp)) {
83
+ event.preventDefault();
84
+ setValue(current + step);
85
+ } else if (isKey(event, Keys.ArrowLeft, Keys.ArrowDown)) {
86
+ event.preventDefault();
87
+ setValue(current - step);
88
+ } else if (isKey(event, Keys.Home)) {
89
+ event.preventDefault();
90
+ setValue(min);
91
+ } else if (isKey(event, Keys.End)) {
92
+ event.preventDefault();
93
+ setValue(max);
94
+ }
95
+ });
96
+ return __el1;
97
+ })();
98
+ setValueRange(thumb, defaultValue, min, max);
99
+ const track = (() => {
100
+ const __el2 = __element("div");
101
+ __el2.setAttribute("data-part", "track");
102
+ __el2.setAttribute("style", "position: relative;");
103
+ __enterChildren(__el2);
104
+ __insert(__el2, fill);
105
+ __insert(__el2, thumb);
106
+ __exitChildren();
107
+ return __el2;
108
+ })();
109
+ const root = (() => {
110
+ const __el3 = __element("div");
111
+ {
112
+ const __v = uniqueId("slider");
113
+ if (__v != null && __v !== false)
114
+ __el3.setAttribute("id", __v === true ? "" : __v);
115
+ }
116
+ {
117
+ const __v = disabled ? "disabled" : "active";
118
+ if (__v != null && __v !== false)
119
+ __el3.setAttribute("data-state", __v === true ? "" : __v);
120
+ }
121
+ __on(__el3, "pointerdown", (event) => {
122
+ if (state.disabled.peek())
123
+ return;
124
+ event.preventDefault();
125
+ setValue(valueFromPointer(event));
126
+ thumb.focus();
127
+ function onMove(e) {
128
+ setValue(valueFromPointer(e));
129
+ }
130
+ function onUp() {
131
+ document.removeEventListener("pointermove", onMove);
132
+ document.removeEventListener("pointerup", onUp);
133
+ }
134
+ document.addEventListener("pointermove", onMove);
135
+ document.addEventListener("pointerup", onUp);
136
+ });
137
+ __enterChildren(__el3);
138
+ __insert(__el3, track);
139
+ __exitChildren();
140
+ return __el3;
141
+ })();
142
+ const pct = (defaultValue - min) / (max - min) * 100;
143
+ updatePosition(pct);
144
+ applyAttrs(root, attrs);
145
+ return { root, thumb, track, state };
146
+ }
147
+ var Slider = {
148
+ Root: SliderRoot
149
+ };
150
+
151
+ export { Slider };