@vertz/ui-primitives 0.2.22 → 0.2.23

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 (91) hide show
  1. package/dist/shared/chunk-3h1mxp95.js +148 -0
  2. package/dist/shared/chunk-3kwh27dv.js +135 -0
  3. package/dist/shared/chunk-4894pmy6.js +184 -0
  4. package/dist/shared/chunk-67sn29eh.js +125 -0
  5. package/dist/shared/chunk-7cb3z0s8.js +287 -0
  6. package/dist/shared/chunk-8c01c8mb.js +217 -0
  7. package/dist/shared/chunk-99tk72t3.js +69 -0
  8. package/dist/shared/chunk-9gfp3ffv.js +204 -0
  9. package/dist/shared/chunk-b25npqer.js +149 -0
  10. package/dist/shared/chunk-cgb2j94g.js +141 -0
  11. package/dist/shared/chunk-e1jcf22s.js +79 -0
  12. package/dist/shared/chunk-e3h0ddmx.js +168 -0
  13. package/dist/shared/chunk-f2vx4tpw.js +168 -0
  14. package/dist/shared/chunk-h3v10x04.js +271 -0
  15. package/dist/shared/chunk-hdvdfd1c.js +96 -0
  16. package/dist/shared/{chunk-dhyr0s9n.js → chunk-j902w020.js} +1 -1
  17. package/dist/shared/chunk-jdygp28a.js +260 -0
  18. package/dist/shared/chunk-jqre4qtw.js +180 -0
  19. package/dist/shared/{chunk-k8nabsxm.js → chunk-mgr904ap.js} +74 -34
  20. package/dist/shared/chunk-mr1tb0dp.js +167 -0
  21. package/dist/shared/chunk-nj420k31.js +54 -0
  22. package/dist/shared/chunk-p0x7hgv6.js +181 -0
  23. package/dist/shared/{chunk-w9dag6ce.js → chunk-pn6shbcs.js} +132 -80
  24. package/dist/shared/chunk-pzx0vpq1.js +223 -0
  25. package/dist/shared/chunk-tn0m98j8.js +42 -0
  26. package/dist/shared/{chunk-myq79qew.js → chunk-ttb2tt03.js} +47 -27
  27. package/dist/shared/chunk-vy874zxe.js +68 -0
  28. package/dist/shared/chunk-ww7k2azn.js +297 -0
  29. package/dist/shared/{chunk-jda3v59q.js → chunk-xa1b96mb.js} +2 -2
  30. package/dist/shared/chunk-xs6gp369.js +245 -0
  31. package/dist/shared/chunk-y4mmmayp.js +206 -0
  32. package/dist/src/accordion/accordion.js +1 -1
  33. package/dist/src/alert-dialog/alert-dialog.js +1 -1
  34. package/dist/src/badge/badge.js +1 -1
  35. package/dist/src/button/button.js +1 -1
  36. package/dist/src/calendar/calendar.js +1 -1
  37. package/dist/src/carousel/carousel.js +1 -1
  38. package/dist/src/checkbox/checkbox.js +1 -1
  39. package/dist/src/collapsible/collapsible.js +1 -1
  40. package/dist/src/combobox/combobox.js +1 -1
  41. package/dist/src/command/command.js +1 -1
  42. package/dist/src/context-menu/context-menu.js +1 -1
  43. package/dist/src/date-picker/date-picker.js +1 -1
  44. package/dist/src/dialog/dialog.js +1 -1
  45. package/dist/src/dropdown-menu/dropdown-menu.js +1 -1
  46. package/dist/src/hover-card/hover-card.js +1 -1
  47. package/dist/src/index.d.ts +14 -1
  48. package/dist/src/index.js +5595 -4310
  49. package/dist/src/menu/menu.js +1 -1
  50. package/dist/src/menubar/menubar.js +1 -1
  51. package/dist/src/navigation-menu/navigation-menu.js +1 -1
  52. package/dist/src/popover/popover.js +1 -1
  53. package/dist/src/progress/progress.js +1 -1
  54. package/dist/src/radio/radio.js +1 -1
  55. package/dist/src/resizable-panel/resizable-panel.js +1 -1
  56. package/dist/src/scroll-area/scroll-area.js +1 -1
  57. package/dist/src/select/select.js +1 -1
  58. package/dist/src/sheet/sheet.js +1 -1
  59. package/dist/src/slider/slider.js +1 -1
  60. package/dist/src/switch/switch.js +1 -1
  61. package/dist/src/tabs/tabs.js +1 -1
  62. package/dist/src/toggle/toggle.js +1 -1
  63. package/dist/src/toggle-group/toggle-group.js +1 -1
  64. package/dist/src/tooltip/tooltip.js +1 -1
  65. package/package.json +3 -3
  66. package/dist/shared/chunk-07yzsaaw.js +0 -165
  67. package/dist/shared/chunk-279bzynx.js +0 -132
  68. package/dist/shared/chunk-27xs9apd.js +0 -288
  69. package/dist/shared/chunk-2k8gxzdf.js +0 -151
  70. package/dist/shared/chunk-3rp73gkd.js +0 -175
  71. package/dist/shared/chunk-4rf1m34c.js +0 -267
  72. package/dist/shared/chunk-7bxsf80c.js +0 -60
  73. package/dist/shared/chunk-8qtexw5s.js +0 -199
  74. package/dist/shared/chunk-9ezgd78r.js +0 -142
  75. package/dist/shared/chunk-ajpj10z0.js +0 -282
  76. package/dist/shared/chunk-c46v0fsw.js +0 -117
  77. package/dist/shared/chunk-e4mm5e59.js +0 -178
  78. package/dist/shared/chunk-fqa5bwn1.js +0 -128
  79. package/dist/shared/chunk-g8hnc95b.js +0 -219
  80. package/dist/shared/chunk-j2tdpxgc.js +0 -185
  81. package/dist/shared/chunk-kcnq15je.js +0 -175
  82. package/dist/shared/chunk-mqs4qq0b.js +0 -46
  83. package/dist/shared/chunk-pg2yjn8f.js +0 -88
  84. package/dist/shared/chunk-rb53v045.js +0 -71
  85. package/dist/shared/chunk-s6a2yph8.js +0 -239
  86. package/dist/shared/chunk-vhx3sqw6.js +0 -196
  87. package/dist/shared/chunk-w318par6.js +0 -204
  88. package/dist/shared/chunk-wcdq7bew.js +0 -133
  89. package/dist/shared/chunk-z0gwkzgp.js +0 -34
  90. package/dist/shared/chunk-z850et33.js +0 -161
  91. package/dist/shared/chunk-zyfc6cx3.js +0 -61
@@ -1,267 +0,0 @@
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-7867pr13.js";
12
- import {
13
- setDataState,
14
- setExpanded,
15
- setHidden,
16
- setHiddenAnimated
17
- } from "./chunk-vevfhpc9.js";
18
- import {
19
- linkedIds
20
- } from "./chunk-8y1jf6xr.js";
21
- import {
22
- applyAttrs
23
- } from "./chunk-2db2dnp3.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, onOpenChange, 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
- onOpenChange?.(true);
51
- if (positioning) {
52
- const ref = positioning.referenceElement ?? trigger;
53
- const result = createFloatingPosition(ref, content, positioning);
54
- floatingCleanup = result.cleanup;
55
- dismissCleanup = createDismiss({
56
- onDismiss: close,
57
- insideElements: [ref, trigger, content],
58
- escapeKey: false
59
- });
60
- } else {
61
- document.addEventListener("mousedown", handleClickOutside);
62
- }
63
- if (activateFirst && items.length > 0) {
64
- state.activeIndex.value = 0;
65
- updateActiveItem(0);
66
- items[0]?.focus();
67
- } else {
68
- state.activeIndex.value = -1;
69
- updateActiveItem(-1);
70
- content.focus();
71
- }
72
- }
73
- function close() {
74
- state.open.value = false;
75
- setExpanded(trigger, false);
76
- setDataState(trigger, "closed");
77
- setDataState(content, "closed");
78
- setHiddenAnimated(content, true);
79
- onOpenChange?.(false);
80
- if (positioning) {
81
- floatingCleanup?.();
82
- floatingCleanup = null;
83
- dismissCleanup?.();
84
- dismissCleanup = null;
85
- } else {
86
- document.removeEventListener("mousedown", handleClickOutside);
87
- }
88
- trigger.focus();
89
- }
90
- function updateActiveItem(index) {
91
- for (let i = 0;i < items.length; i++) {
92
- items[i]?.setAttribute("tabindex", i === index ? "0" : "-1");
93
- }
94
- }
95
- const trigger = (() => {
96
- const __el0 = __element("button");
97
- __el0.setAttribute("type", "button");
98
- {
99
- const __v = ids.triggerId;
100
- if (__v != null && __v !== false)
101
- __el0.setAttribute("id", __v === true ? "" : __v);
102
- }
103
- {
104
- const __v = ids.contentId;
105
- if (__v != null && __v !== false)
106
- __el0.setAttribute("aria-controls", __v === true ? "" : __v);
107
- }
108
- __el0.setAttribute("aria-haspopup", "menu");
109
- __el0.setAttribute("aria-expanded", "false");
110
- __el0.setAttribute("data-state", "closed");
111
- __on(__el0, "click", () => {
112
- if (state.open.peek()) {
113
- close();
114
- } else {
115
- open();
116
- }
117
- });
118
- __on(__el0, "keydown", (event) => {
119
- if (isKey(event, Keys.ArrowDown, Keys.Enter, Keys.Space)) {
120
- event.preventDefault();
121
- if (!state.open.peek())
122
- open(true);
123
- }
124
- });
125
- return __el0;
126
- })();
127
- const content = (() => {
128
- const __el1 = __element("div");
129
- __el1.setAttribute("role", "menu");
130
- __el1.setAttribute("tabindex", "-1");
131
- {
132
- const __v = ids.contentId;
133
- if (__v != null && __v !== false)
134
- __el1.setAttribute("id", __v === true ? "" : __v);
135
- }
136
- __el1.setAttribute("aria-hidden", "true");
137
- __el1.setAttribute("data-state", "closed");
138
- __el1.setAttribute("style", "display: none");
139
- __on(__el1, "keydown", (event) => {
140
- if (isKey(event, Keys.Escape)) {
141
- event.preventDefault();
142
- close();
143
- return;
144
- }
145
- if (isKey(event, Keys.Enter, Keys.Space)) {
146
- event.preventDefault();
147
- const active = items[state.activeIndex.peek()];
148
- if (active) {
149
- const val = active.getAttribute("data-value");
150
- if (val !== null) {
151
- onSelect?.(val);
152
- close();
153
- }
154
- }
155
- return;
156
- }
157
- if (state.activeIndex.peek() === -1) {
158
- if (isKey(event, Keys.ArrowDown)) {
159
- event.preventDefault();
160
- state.activeIndex.value = 0;
161
- updateActiveItem(0);
162
- items[0]?.focus();
163
- return;
164
- }
165
- if (isKey(event, Keys.ArrowUp)) {
166
- event.preventDefault();
167
- const last = items.length - 1;
168
- state.activeIndex.value = last;
169
- updateActiveItem(last);
170
- items[last]?.focus();
171
- return;
172
- }
173
- }
174
- const result = handleListNavigation(event, items, { orientation: "vertical" });
175
- if (result) {
176
- const idx = items.indexOf(result);
177
- if (idx >= 0) {
178
- state.activeIndex.value = idx;
179
- updateActiveItem(idx);
180
- }
181
- return;
182
- }
183
- if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {
184
- const char = event.key.toLowerCase();
185
- const match = items.find((item) => item.textContent?.toLowerCase().startsWith(char));
186
- if (match) {
187
- const idx = items.indexOf(match);
188
- state.activeIndex.value = idx;
189
- updateActiveItem(idx);
190
- match.focus();
191
- }
192
- }
193
- });
194
- return __el1;
195
- })();
196
- function createItem(value, label, parent) {
197
- const item = (() => {
198
- const __el2 = __element("div");
199
- __el2.setAttribute("role", "menuitem");
200
- {
201
- const __v = value;
202
- if (__v != null && __v !== false)
203
- __el2.setAttribute("data-value", __v === true ? "" : __v);
204
- }
205
- __el2.setAttribute("tabindex", "-1");
206
- __on(__el2, "click", () => {
207
- onSelect?.(value);
208
- close();
209
- });
210
- __enterChildren(__el2);
211
- __insert(__el2, label ?? value);
212
- __exitChildren();
213
- return __el2;
214
- })();
215
- items.push(item);
216
- (parent ?? content).appendChild(item);
217
- return item;
218
- }
219
- function Item(value, label) {
220
- return createItem(value, label);
221
- }
222
- function Group(label) {
223
- const el = (() => {
224
- const __el3 = __element("div");
225
- __el3.setAttribute("role", "group");
226
- {
227
- const __v = label;
228
- if (__v != null && __v !== false)
229
- __el3.setAttribute("aria-label", __v === true ? "" : __v);
230
- }
231
- return __el3;
232
- })();
233
- content.appendChild(el);
234
- return {
235
- el,
236
- Item: (value, itemLabel) => createItem(value, itemLabel, el)
237
- };
238
- }
239
- function Separator() {
240
- const hr = (() => {
241
- const __el4 = __element("hr");
242
- __el4.setAttribute("role", "separator");
243
- return __el4;
244
- })();
245
- content.appendChild(hr);
246
- return hr;
247
- }
248
- function Label(text) {
249
- const el = (() => {
250
- const __el5 = __element("div");
251
- __el5.setAttribute("role", "none");
252
- __enterChildren(__el5);
253
- __insert(__el5, text);
254
- __exitChildren();
255
- return __el5;
256
- })();
257
- content.appendChild(el);
258
- return el;
259
- }
260
- applyAttrs(trigger, attrs);
261
- return { trigger, content, state, Item, Group, Separator, Label };
262
- }
263
- var Menu = {
264
- Root: MenuRoot
265
- };
266
-
267
- export { Menu };
@@ -1,60 +0,0 @@
1
- import {
2
- Keys,
3
- isKey
4
- } from "./chunk-7867pr13.js";
5
- import {
6
- uniqueId
7
- } from "./chunk-8y1jf6xr.js";
8
- import {
9
- applyAttrs
10
- } from "./chunk-2db2dnp3.js";
11
-
12
- // src/toggle/toggle.tsx
13
- import { computed, signal } from "@vertz/ui";
14
- import { __attr, __element, __on } from "@vertz/ui/internals";
15
- function ToggleRoot(options = {}) {
16
- const { defaultPressed = false, disabled = false, onPressedChange, ...attrs } = options;
17
- const pressed = signal(defaultPressed, "pressed");
18
- function toggle() {
19
- if (disabled)
20
- return;
21
- pressed.value = !pressed.value;
22
- onPressedChange?.(pressed.value);
23
- }
24
- const el = computed(() => (() => {
25
- const __el0 = __element("button");
26
- __el0.setAttribute("type", "button");
27
- {
28
- const __v = uniqueId("toggle");
29
- if (__v != null && __v !== false)
30
- __el0.setAttribute("id", __v === true ? "" : __v);
31
- }
32
- __attr(__el0, "aria-pressed", () => pressed.value ? "true" : "false");
33
- __attr(__el0, "data-state", () => pressed.value ? "on" : "off");
34
- {
35
- const __v = disabled;
36
- if (__v != null && __v !== false)
37
- __el0.setAttribute("disabled", __v === true ? "" : __v);
38
- }
39
- {
40
- const __v = disabled ? "true" : undefined;
41
- if (__v != null && __v !== false)
42
- __el0.setAttribute("aria-disabled", __v === true ? "" : __v);
43
- }
44
- __on(__el0, "click", toggle);
45
- __on(__el0, "keydown", (e) => {
46
- if (isKey(e, Keys.Space)) {
47
- e.preventDefault();
48
- toggle();
49
- }
50
- });
51
- return __el0;
52
- })());
53
- applyAttrs(el.value, attrs);
54
- return el.value;
55
- }
56
- var Toggle = {
57
- Root: ToggleRoot
58
- };
59
-
60
- export { Toggle };
@@ -1,199 +0,0 @@
1
- import {
2
- focusFirst,
3
- saveFocus,
4
- trapFocus
5
- } from "./chunk-e2v1c9ex.js";
6
- import {
7
- Keys,
8
- isKey
9
- } from "./chunk-7867pr13.js";
10
- import {
11
- setDataState,
12
- setDescribedBy,
13
- setExpanded,
14
- setHidden,
15
- setHiddenAnimated,
16
- setLabelledBy
17
- } from "./chunk-vevfhpc9.js";
18
- import {
19
- linkedIds
20
- } from "./chunk-8y1jf6xr.js";
21
- import {
22
- applyAttrs
23
- } from "./chunk-2db2dnp3.js";
24
-
25
- // src/dialog/dialog.tsx
26
- import { __element, __on, __styleStr } from "@vertz/ui/internals";
27
- import { signal } from "@vertz/ui";
28
- function DialogRoot(options = {}) {
29
- const { modal = true, defaultOpen = false, onOpenChange, ...attrs } = options;
30
- const ids = linkedIds("dialog");
31
- const titleId = `${ids.contentId}-title`;
32
- const descriptionId = `${ids.contentId}-description`;
33
- const state = { open: signal(defaultOpen) };
34
- let restoreFocus = null;
35
- let removeTrap = null;
36
- function openDialog() {
37
- state.open.value = true;
38
- setExpanded(trigger, true);
39
- setHidden(overlay, false);
40
- setHidden(content, false);
41
- setDataState(trigger, "open");
42
- setDataState(overlay, "open");
43
- setDataState(content, "open");
44
- restoreFocus = saveFocus();
45
- if (modal) {
46
- removeTrap = trapFocus(content);
47
- }
48
- queueMicrotask(() => focusFirst(content));
49
- onOpenChange?.(true);
50
- }
51
- function closeDialog() {
52
- state.open.value = false;
53
- setExpanded(trigger, false);
54
- setDataState(trigger, "closed");
55
- setDataState(overlay, "closed");
56
- setDataState(content, "closed");
57
- setHiddenAnimated(overlay, true);
58
- setHiddenAnimated(content, true);
59
- removeTrap?.();
60
- removeTrap = null;
61
- restoreFocus?.();
62
- restoreFocus = null;
63
- onOpenChange?.(false);
64
- }
65
- const trigger = (() => {
66
- const __el0 = __element("button");
67
- __el0.setAttribute("type", "button");
68
- {
69
- const __v = ids.triggerId;
70
- if (__v != null && __v !== false)
71
- __el0.setAttribute("id", __v === true ? "" : __v);
72
- }
73
- {
74
- const __v = ids.contentId;
75
- if (__v != null && __v !== false)
76
- __el0.setAttribute("aria-controls", __v === true ? "" : __v);
77
- }
78
- {
79
- const __v = defaultOpen ? "true" : "false";
80
- if (__v != null && __v !== false)
81
- __el0.setAttribute("aria-expanded", __v === true ? "" : __v);
82
- }
83
- {
84
- const __v = defaultOpen ? "open" : "closed";
85
- if (__v != null && __v !== false)
86
- __el0.setAttribute("data-state", __v === true ? "" : __v);
87
- }
88
- __on(__el0, "click", () => {
89
- if (state.open.peek()) {
90
- closeDialog();
91
- } else {
92
- openDialog();
93
- }
94
- });
95
- return __el0;
96
- })();
97
- const overlay = (() => {
98
- const __el1 = __element("div");
99
- __el1.setAttribute("data-dialog-overlay", "");
100
- {
101
- const __v = defaultOpen ? "false" : "true";
102
- if (__v != null && __v !== false)
103
- __el1.setAttribute("aria-hidden", __v === true ? "" : __v);
104
- }
105
- {
106
- const __v = defaultOpen ? "open" : "closed";
107
- if (__v != null && __v !== false)
108
- __el1.setAttribute("data-state", __v === true ? "" : __v);
109
- }
110
- {
111
- const __v = defaultOpen ? "" : "display: none";
112
- if (__v != null && __v !== false)
113
- __el1.setAttribute("style", typeof __v === "object" ? __styleStr(__v) : __v === true ? "" : String(__v));
114
- }
115
- __on(__el1, "click", () => closeDialog());
116
- return __el1;
117
- })();
118
- const content = (() => {
119
- const __el2 = __element("div");
120
- __el2.setAttribute("role", "dialog");
121
- {
122
- const __v = ids.contentId;
123
- if (__v != null && __v !== false)
124
- __el2.setAttribute("id", __v === true ? "" : __v);
125
- }
126
- {
127
- const __v = modal ? "true" : undefined;
128
- if (__v != null && __v !== false)
129
- __el2.setAttribute("aria-modal", __v === true ? "" : __v);
130
- }
131
- {
132
- const __v = defaultOpen ? "false" : "true";
133
- if (__v != null && __v !== false)
134
- __el2.setAttribute("aria-hidden", __v === true ? "" : __v);
135
- }
136
- {
137
- const __v = defaultOpen ? "open" : "closed";
138
- if (__v != null && __v !== false)
139
- __el2.setAttribute("data-state", __v === true ? "" : __v);
140
- }
141
- {
142
- const __v = defaultOpen ? "" : "display: none";
143
- if (__v != null && __v !== false)
144
- __el2.setAttribute("style", typeof __v === "object" ? __styleStr(__v) : __v === true ? "" : String(__v));
145
- }
146
- __on(__el2, "keydown", (event) => {
147
- if (isKey(event, Keys.Escape)) {
148
- event.preventDefault();
149
- event.stopPropagation();
150
- closeDialog();
151
- }
152
- });
153
- return __el2;
154
- })();
155
- setLabelledBy(content, titleId);
156
- setDescribedBy(content, descriptionId);
157
- const title = (() => {
158
- const __el3 = __element("h2");
159
- {
160
- const __v = titleId;
161
- if (__v != null && __v !== false)
162
- __el3.setAttribute("id", __v === true ? "" : __v);
163
- }
164
- return __el3;
165
- })();
166
- const description = (() => {
167
- const __el4 = __element("p");
168
- {
169
- const __v = descriptionId;
170
- if (__v != null && __v !== false)
171
- __el4.setAttribute("id", __v === true ? "" : __v);
172
- }
173
- return __el4;
174
- })();
175
- const close = (() => {
176
- const __el5 = __element("button");
177
- __el5.setAttribute("type", "button");
178
- __el5.setAttribute("aria-label", "Close");
179
- __on(__el5, "click", () => closeDialog());
180
- return __el5;
181
- })();
182
- applyAttrs(content, attrs);
183
- return {
184
- trigger,
185
- overlay,
186
- content,
187
- title,
188
- description,
189
- close,
190
- state,
191
- show: openDialog,
192
- hide: closeDialog
193
- };
194
- }
195
- var Dialog = {
196
- Root: DialogRoot
197
- };
198
-
199
- export { Dialog };
@@ -1,142 +0,0 @@
1
- import {
2
- createDismiss
3
- } from "./chunk-a6wp8c32.js";
4
- import {
5
- focusFirst,
6
- saveFocus
7
- } from "./chunk-e2v1c9ex.js";
8
- import {
9
- createFloatingPosition
10
- } from "./chunk-0mcr52hc.js";
11
- import {
12
- Keys,
13
- isKey
14
- } from "./chunk-7867pr13.js";
15
- import {
16
- setDataState,
17
- setExpanded,
18
- setHidden,
19
- setHiddenAnimated
20
- } from "./chunk-vevfhpc9.js";
21
- import {
22
- linkedIds
23
- } from "./chunk-8y1jf6xr.js";
24
- import {
25
- applyAttrs
26
- } from "./chunk-2db2dnp3.js";
27
-
28
- // src/popover/popover.tsx
29
- import { __element, __on, __styleStr } from "@vertz/ui/internals";
30
- import { signal } from "@vertz/ui";
31
- function PopoverRoot(options = {}) {
32
- const { defaultOpen = false, onOpenChange, positioning, ...attrs } = options;
33
- const ids = linkedIds("popover");
34
- const state = { open: signal(defaultOpen) };
35
- let restoreFocus = null;
36
- let floatingCleanup = null;
37
- let dismissCleanup = null;
38
- function open() {
39
- state.open.value = true;
40
- setExpanded(trigger, true);
41
- setHidden(content, false);
42
- setDataState(trigger, "open");
43
- setDataState(content, "open");
44
- restoreFocus = saveFocus();
45
- queueMicrotask(() => focusFirst(content));
46
- if (positioning) {
47
- const result = createFloatingPosition(trigger, content, positioning);
48
- floatingCleanup = result.cleanup;
49
- dismissCleanup = createDismiss({
50
- onDismiss: close,
51
- insideElements: [trigger, content],
52
- escapeKey: false
53
- });
54
- }
55
- onOpenChange?.(true);
56
- }
57
- function close() {
58
- state.open.value = false;
59
- setExpanded(trigger, false);
60
- setDataState(trigger, "closed");
61
- setDataState(content, "closed");
62
- setHiddenAnimated(content, true);
63
- floatingCleanup?.();
64
- floatingCleanup = null;
65
- dismissCleanup?.();
66
- dismissCleanup = null;
67
- restoreFocus?.();
68
- restoreFocus = null;
69
- onOpenChange?.(false);
70
- }
71
- const trigger = (() => {
72
- const __el0 = __element("button");
73
- __el0.setAttribute("type", "button");
74
- {
75
- const __v = ids.triggerId;
76
- if (__v != null && __v !== false)
77
- __el0.setAttribute("id", __v === true ? "" : __v);
78
- }
79
- {
80
- const __v = ids.contentId;
81
- if (__v != null && __v !== false)
82
- __el0.setAttribute("aria-controls", __v === true ? "" : __v);
83
- }
84
- __el0.setAttribute("aria-haspopup", "dialog");
85
- {
86
- const __v = defaultOpen ? "true" : "false";
87
- if (__v != null && __v !== false)
88
- __el0.setAttribute("aria-expanded", __v === true ? "" : __v);
89
- }
90
- {
91
- const __v = defaultOpen ? "open" : "closed";
92
- if (__v != null && __v !== false)
93
- __el0.setAttribute("data-state", __v === true ? "" : __v);
94
- }
95
- __on(__el0, "click", () => {
96
- if (state.open.peek()) {
97
- close();
98
- } else {
99
- open();
100
- }
101
- });
102
- return __el0;
103
- })();
104
- const content = (() => {
105
- const __el1 = __element("div");
106
- __el1.setAttribute("role", "dialog");
107
- {
108
- const __v = ids.contentId;
109
- if (__v != null && __v !== false)
110
- __el1.setAttribute("id", __v === true ? "" : __v);
111
- }
112
- {
113
- const __v = defaultOpen ? "false" : "true";
114
- if (__v != null && __v !== false)
115
- __el1.setAttribute("aria-hidden", __v === true ? "" : __v);
116
- }
117
- {
118
- const __v = defaultOpen ? "open" : "closed";
119
- if (__v != null && __v !== false)
120
- __el1.setAttribute("data-state", __v === true ? "" : __v);
121
- }
122
- {
123
- const __v = defaultOpen ? "" : "display: none";
124
- if (__v != null && __v !== false)
125
- __el1.setAttribute("style", typeof __v === "object" ? __styleStr(__v) : __v === true ? "" : String(__v));
126
- }
127
- __on(__el1, "keydown", (event) => {
128
- if (isKey(event, Keys.Escape)) {
129
- event.preventDefault();
130
- close();
131
- }
132
- });
133
- return __el1;
134
- })();
135
- applyAttrs(trigger, attrs);
136
- return { trigger, content, state };
137
- }
138
- var Popover = {
139
- Root: PopoverRoot
140
- };
141
-
142
- export { Popover };