@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,196 @@
1
+ import {
2
+ Keys,
3
+ isKey
4
+ } from "./chunk-jctqs9m4.js";
5
+ import {
6
+ setDataState,
7
+ setExpanded,
8
+ setHidden,
9
+ setHiddenAnimated,
10
+ setSelected
11
+ } from "./chunk-vvjyx7fe.js";
12
+ import {
13
+ applyAttrs
14
+ } from "./chunk-dpsgb1xw.js";
15
+ import {
16
+ linkedIds
17
+ } from "./chunk-8y1jf6xr.js";
18
+
19
+ // src/combobox/combobox.tsx
20
+ import { __element, __enterChildren, __exitChildren, __insert, __on } from "@vertz/ui/internals";
21
+ import { signal } from "@vertz/ui";
22
+ function ComboboxRoot(options = {}) {
23
+ const { defaultValue = "", onValueChange, onInputChange, ...attrs } = options;
24
+ const ids = linkedIds("combobox");
25
+ const state = {
26
+ open: signal(false),
27
+ value: signal(defaultValue),
28
+ inputValue: signal(defaultValue),
29
+ activeIndex: signal(-1)
30
+ };
31
+ const optionElements = [];
32
+ function open() {
33
+ state.open.value = true;
34
+ setExpanded(input, true);
35
+ setHidden(listbox, false);
36
+ setDataState(listbox, "open");
37
+ }
38
+ function close() {
39
+ state.open.value = false;
40
+ state.activeIndex.value = -1;
41
+ setExpanded(input, false);
42
+ setDataState(listbox, "closed");
43
+ setHiddenAnimated(listbox, true);
44
+ updateActiveDescendant(-1);
45
+ }
46
+ function selectOption(value) {
47
+ state.value.value = value;
48
+ state.inputValue.value = value;
49
+ input.value = value;
50
+ for (const opt of optionElements) {
51
+ const isActive = opt.getAttribute("data-value") === value;
52
+ setSelected(opt, isActive);
53
+ setDataState(opt, isActive ? "active" : "inactive");
54
+ }
55
+ onValueChange?.(value);
56
+ close();
57
+ input.focus();
58
+ }
59
+ function updateActiveDescendant(index) {
60
+ const opt = optionElements[index];
61
+ if (index >= 0 && opt) {
62
+ input.setAttribute("aria-activedescendant", opt.id);
63
+ for (let i = 0;i < optionElements.length; i++) {
64
+ const el = optionElements[i];
65
+ if (el)
66
+ setDataState(el, i === index ? "active" : "inactive");
67
+ }
68
+ } else {
69
+ input.removeAttribute("aria-activedescendant");
70
+ }
71
+ }
72
+ const input = (() => {
73
+ const __el0 = __element("input");
74
+ __el0.setAttribute("type", "text");
75
+ __el0.setAttribute("role", "combobox");
76
+ __el0.setAttribute("aria-autocomplete", "list");
77
+ {
78
+ const __v = ids.contentId;
79
+ if (__v != null && __v !== false)
80
+ __el0.setAttribute("aria-controls", __v === true ? "" : __v);
81
+ }
82
+ __el0.setAttribute("aria-haspopup", "listbox");
83
+ {
84
+ const __v = ids.triggerId;
85
+ if (__v != null && __v !== false)
86
+ __el0.setAttribute("id", __v === true ? "" : __v);
87
+ }
88
+ {
89
+ const __v = defaultValue;
90
+ if (__v != null && __v !== false)
91
+ __el0.setAttribute("value", __v === true ? "" : __v);
92
+ }
93
+ __el0.setAttribute("aria-expanded", "false");
94
+ __on(__el0, "input", () => {
95
+ state.inputValue.value = input.value;
96
+ onInputChange?.(input.value);
97
+ if (!state.open.peek())
98
+ open();
99
+ });
100
+ __on(__el0, "focus", () => {
101
+ if (!state.open.peek() && input.value.length > 0)
102
+ open();
103
+ });
104
+ __on(__el0, "keydown", (event) => {
105
+ if (isKey(event, Keys.Escape)) {
106
+ event.preventDefault();
107
+ close();
108
+ return;
109
+ }
110
+ if (isKey(event, Keys.ArrowDown)) {
111
+ event.preventDefault();
112
+ if (!state.open.peek()) {
113
+ open();
114
+ }
115
+ const next = Math.min(state.activeIndex.peek() + 1, optionElements.length - 1);
116
+ state.activeIndex.value = next;
117
+ updateActiveDescendant(next);
118
+ return;
119
+ }
120
+ if (isKey(event, Keys.ArrowUp)) {
121
+ event.preventDefault();
122
+ const prev = Math.max(state.activeIndex.peek() - 1, 0);
123
+ state.activeIndex.value = prev;
124
+ updateActiveDescendant(prev);
125
+ return;
126
+ }
127
+ if (isKey(event, Keys.Enter)) {
128
+ event.preventDefault();
129
+ const idx = state.activeIndex.peek();
130
+ if (idx >= 0 && idx < optionElements.length) {
131
+ const val = optionElements[idx]?.getAttribute("data-value");
132
+ if (val != null)
133
+ selectOption(val);
134
+ }
135
+ return;
136
+ }
137
+ });
138
+ return __el0;
139
+ })();
140
+ const listbox = (() => {
141
+ const __el1 = __element("div");
142
+ __el1.setAttribute("role", "listbox");
143
+ {
144
+ const __v = ids.contentId;
145
+ if (__v != null && __v !== false)
146
+ __el1.setAttribute("id", __v === true ? "" : __v);
147
+ }
148
+ __el1.setAttribute("aria-hidden", "true");
149
+ __el1.setAttribute("data-state", "closed");
150
+ __el1.setAttribute("style", "display: none");
151
+ return __el1;
152
+ })();
153
+ function Option(value, label) {
154
+ const optId = `${ids.contentId}-opt-${optionElements.length}`;
155
+ const isSelectedOpt = value === defaultValue;
156
+ const opt = (() => {
157
+ const __el2 = __element("div");
158
+ __el2.setAttribute("role", "option");
159
+ {
160
+ const __v = optId;
161
+ if (__v != null && __v !== false)
162
+ __el2.setAttribute("id", __v === true ? "" : __v);
163
+ }
164
+ {
165
+ const __v = value;
166
+ if (__v != null && __v !== false)
167
+ __el2.setAttribute("data-value", __v === true ? "" : __v);
168
+ }
169
+ {
170
+ const __v = isSelectedOpt ? "true" : "false";
171
+ if (__v != null && __v !== false)
172
+ __el2.setAttribute("aria-selected", __v === true ? "" : __v);
173
+ }
174
+ {
175
+ const __v = isSelectedOpt ? "active" : "inactive";
176
+ if (__v != null && __v !== false)
177
+ __el2.setAttribute("data-state", __v === true ? "" : __v);
178
+ }
179
+ __on(__el2, "click", () => selectOption(value));
180
+ __enterChildren(__el2);
181
+ __insert(__el2, label ?? value);
182
+ __exitChildren();
183
+ return __el2;
184
+ })();
185
+ optionElements.push(opt);
186
+ listbox.appendChild(opt);
187
+ return opt;
188
+ }
189
+ applyAttrs(input, attrs);
190
+ return { input, listbox, state, Option };
191
+ }
192
+ var Combobox = {
193
+ Root: ComboboxRoot
194
+ };
195
+
196
+ export { Combobox };
@@ -0,0 +1,46 @@
1
+ import {
2
+ handleActivation
3
+ } from "./chunk-jctqs9m4.js";
4
+ import {
5
+ applyAttrs
6
+ } from "./chunk-dpsgb1xw.js";
7
+
8
+ // src/button/button.tsx
9
+ import { __element, __on } from "@vertz/ui/internals";
10
+ function ButtonRoot(options = {}) {
11
+ const { disabled = false, onClick, ...attrs } = options;
12
+ const el = (() => {
13
+ const __el0 = __element("button");
14
+ __el0.setAttribute("type", "button");
15
+ {
16
+ const __v = disabled;
17
+ if (__v != null && __v !== false)
18
+ __el0.setAttribute("disabled", __v === true ? "" : __v);
19
+ }
20
+ {
21
+ const __v = disabled ? "true" : undefined;
22
+ if (__v != null && __v !== false)
23
+ __el0.setAttribute("aria-disabled", __v === true ? "" : __v);
24
+ }
25
+ __on(__el0, "click", () => {
26
+ if (disabled)
27
+ return;
28
+ onClick?.();
29
+ });
30
+ __on(__el0, "keydown", (event) => {
31
+ if (disabled)
32
+ return;
33
+ handleActivation(event, () => {
34
+ event.target.click();
35
+ });
36
+ });
37
+ return __el0;
38
+ })();
39
+ applyAttrs(el, attrs);
40
+ return el;
41
+ }
42
+ var Button = {
43
+ Root: ButtonRoot
44
+ };
45
+
46
+ export { Button };
@@ -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 };
@@ -0,0 +1,61 @@
1
+ import {
2
+ Keys,
3
+ isKey
4
+ } from "./chunk-jctqs9m4.js";
5
+ import {
6
+ applyAttrs
7
+ } from "./chunk-dpsgb1xw.js";
8
+ import {
9
+ uniqueId
10
+ } from "./chunk-8y1jf6xr.js";
11
+
12
+ // src/switch/switch.tsx
13
+ import { computed, signal } from "@vertz/ui";
14
+ import { __attr, __element, __on } from "@vertz/ui/internals";
15
+ function SwitchRoot(options = {}) {
16
+ const { defaultChecked = false, disabled = false, onCheckedChange, ...attrs } = options;
17
+ const checked = signal(defaultChecked, "checked");
18
+ function toggle() {
19
+ if (disabled)
20
+ return;
21
+ checked.value = !checked.value;
22
+ onCheckedChange?.(checked.value);
23
+ }
24
+ const el = computed(() => (() => {
25
+ const __el0 = __element("button");
26
+ __el0.setAttribute("type", "button");
27
+ __el0.setAttribute("role", "switch");
28
+ {
29
+ const __v = uniqueId("switch");
30
+ if (__v != null && __v !== false)
31
+ __el0.setAttribute("id", __v === true ? "" : __v);
32
+ }
33
+ __attr(__el0, "aria-checked", () => checked.value ? "true" : "false");
34
+ __attr(__el0, "data-state", () => checked.value ? "checked" : "unchecked");
35
+ {
36
+ const __v = disabled;
37
+ if (__v != null && __v !== false)
38
+ __el0.setAttribute("disabled", __v === true ? "" : __v);
39
+ }
40
+ {
41
+ const __v = disabled ? "true" : undefined;
42
+ if (__v != null && __v !== false)
43
+ __el0.setAttribute("aria-disabled", __v === true ? "" : __v);
44
+ }
45
+ __on(__el0, "click", toggle);
46
+ __on(__el0, "keydown", (e) => {
47
+ if (isKey(e, Keys.Space)) {
48
+ e.preventDefault();
49
+ toggle();
50
+ }
51
+ });
52
+ return __el0;
53
+ })());
54
+ applyAttrs(el.value, attrs);
55
+ return el.value;
56
+ }
57
+ var Switch = {
58
+ Root: SwitchRoot
59
+ };
60
+
61
+ export { Switch };