@vertz/ui-primitives 0.2.41 → 0.2.42

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 (232) hide show
  1. package/dist/shared/chunk-06m8prfg.js +52 -0
  2. package/dist/shared/chunk-0n9jj8xr.js +24 -0
  3. package/dist/shared/chunk-1ben27xq.js +317 -0
  4. package/dist/shared/chunk-1j2mj0sa.js +45 -0
  5. package/dist/shared/chunk-250hj18f.js +243 -0
  6. package/dist/shared/chunk-2h4m9c71.js +38 -0
  7. package/dist/shared/chunk-2sbx20hv.js +128 -0
  8. package/dist/shared/chunk-2ye674gr.js +70 -0
  9. package/dist/shared/chunk-34d8385y.js +15 -0
  10. package/dist/shared/chunk-4d7bm8h0.js +113 -0
  11. package/dist/shared/chunk-4zjgxr7x.js +157 -0
  12. package/dist/shared/chunk-5c150wvr.js +140 -0
  13. package/dist/shared/chunk-5gycdypd.js +58 -0
  14. package/dist/shared/chunk-6mm7fhp8.js +105 -0
  15. package/dist/shared/chunk-6zmnqvh6.js +109 -0
  16. package/dist/shared/{chunk-yy3ft5mb.js → chunk-7amn5d71.js} +2 -2
  17. package/dist/shared/chunk-7pbff2hg.js +118 -0
  18. package/dist/shared/chunk-7zpjshwz.js +194 -0
  19. package/dist/shared/chunk-993ff51d.js +155 -0
  20. package/dist/shared/chunk-9pdt5aw7.js +24 -0
  21. package/dist/shared/chunk-a71m4xkv.js +106 -0
  22. package/dist/shared/chunk-aj8m39pk.js +127 -0
  23. package/dist/shared/chunk-ajawpc05.js +305 -0
  24. package/dist/shared/chunk-b7mzwqhj.js +125 -0
  25. package/dist/shared/chunk-bb887de4.js +200 -0
  26. package/dist/shared/chunk-bfsmbrxc.js +111 -0
  27. package/dist/shared/chunk-c2f63m5n.js +56 -0
  28. package/dist/shared/chunk-c5r3s5km.js +263 -0
  29. package/dist/shared/chunk-caba5bhd.js +427 -0
  30. package/dist/shared/chunk-crym07yc.js +264 -0
  31. package/dist/shared/{chunk-5964gmv0.js → chunk-csjtyvam.js} +62 -88
  32. package/dist/shared/chunk-d6rtejz3.js +128 -0
  33. package/dist/shared/chunk-dvaf0bmq.js +140 -0
  34. package/dist/shared/chunk-dwkv9ya6.js +22 -0
  35. package/dist/shared/chunk-e0ckxrjg.js +41 -0
  36. package/dist/shared/chunk-ennxcymj.js +225 -0
  37. package/dist/shared/{chunk-1jd1n0dt.js → chunk-ey38de46.js} +19 -47
  38. package/dist/shared/chunk-f0v1gs5e.js +52 -0
  39. package/dist/shared/chunk-f86rsf84.js +231 -0
  40. package/dist/shared/{chunk-3sahbk4d.js → chunk-fdse46x5.js} +6 -1
  41. package/dist/shared/chunk-gj4hrssn.js +135 -0
  42. package/dist/shared/chunk-gyvq4gk9.js +24 -0
  43. package/dist/shared/chunk-hbnps9sq.js +229 -0
  44. package/dist/shared/{chunk-fhss32ya.js → chunk-hdmpyeq9.js} +43 -132
  45. package/dist/shared/chunk-hgnkd4he.js +256 -0
  46. package/dist/shared/chunk-hpcyffm7.js +185 -0
  47. package/dist/shared/chunk-hpmvwx0h.js +99 -0
  48. package/dist/shared/chunk-hz0e504p.js +69 -0
  49. package/dist/shared/chunk-hzk4wfq9.js +43 -0
  50. package/dist/shared/chunk-j7znzkpa.js +48 -0
  51. package/dist/shared/chunk-j9kxgrnn.js +167 -0
  52. package/dist/shared/chunk-jetwnv0w.js +130 -0
  53. package/dist/shared/chunk-jjdg26c1.js +155 -0
  54. package/dist/shared/chunk-k0m4yh86.js +123 -0
  55. package/dist/shared/chunk-k43q9cjr.js +82 -0
  56. package/dist/shared/chunk-k9k8tbr5.js +119 -0
  57. package/dist/shared/chunk-meaj7br1.js +232 -0
  58. package/dist/shared/chunk-mgj0n08k.js +34 -0
  59. package/dist/shared/chunk-mjz4rp6c.js +46 -0
  60. package/dist/shared/chunk-n4rr5gme.js +239 -0
  61. package/dist/shared/chunk-nk55etpp.js +65 -0
  62. package/dist/shared/chunk-nkh1ks3k.js +264 -0
  63. package/dist/shared/chunk-pgvpvbpe.js +26 -0
  64. package/dist/shared/chunk-pma8gnv7.js +178 -0
  65. package/dist/shared/chunk-q7xv6xze.js +131 -0
  66. package/dist/shared/chunk-qey801nq.js +22 -0
  67. package/dist/shared/chunk-s6b4c3tj.js +58 -0
  68. package/dist/shared/chunk-sq27a4h0.js +36 -0
  69. package/dist/shared/chunk-taa5pj15.js +103 -0
  70. package/dist/shared/chunk-tc5rpvyx.js +127 -0
  71. package/dist/shared/chunk-tescm0b3.js +192 -0
  72. package/dist/shared/chunk-tkftdwnq.js +71 -0
  73. package/dist/shared/chunk-tqhnjcfp.js +116 -0
  74. package/dist/shared/chunk-vfknb5ht.js +183 -0
  75. package/dist/shared/chunk-vsc369w3.js +185 -0
  76. package/dist/shared/chunk-whq9s8v5.js +301 -0
  77. package/dist/shared/{chunk-hze1f32t.js → chunk-wrqddgaj.js} +1 -1
  78. package/dist/shared/chunk-yzbmkx4r.js +155 -0
  79. package/dist/shared/chunk-zaen0ajc.js +347 -0
  80. package/dist/src/accordion/accordion-composed.js +1 -1
  81. package/dist/src/accordion/accordion.js +1 -1
  82. package/dist/src/alert/alert-composed.js +1 -1
  83. package/dist/src/alert-dialog/alert-dialog-composed.js +1 -1
  84. package/dist/src/alert-dialog/alert-dialog.js +1 -1
  85. package/dist/src/avatar/avatar-composed.js +1 -1
  86. package/dist/src/badge/badge-composed.js +1 -1
  87. package/dist/src/badge/badge.js +1 -1
  88. package/dist/src/breadcrumb/breadcrumb-composed.js +1 -1
  89. package/dist/src/button/button-composed.js +1 -1
  90. package/dist/src/button/button.js +1 -1
  91. package/dist/src/calendar/calendar-composed.js +1 -1
  92. package/dist/src/calendar/calendar.js +1 -1
  93. package/dist/src/card/card-composed.js +1 -1
  94. package/dist/src/carousel/carousel-composed.js +1 -1
  95. package/dist/src/carousel/carousel.js +1 -1
  96. package/dist/src/checkbox/checkbox-composed.js +1 -1
  97. package/dist/src/checkbox/checkbox.js +1 -1
  98. package/dist/src/collapsible/collapsible-composed.js +1 -1
  99. package/dist/src/collapsible/collapsible.js +1 -1
  100. package/dist/src/combobox/combobox-composed.js +1 -1
  101. package/dist/src/combobox/combobox.js +1 -1
  102. package/dist/src/command/command-composed.js +1 -1
  103. package/dist/src/command/command.js +1 -1
  104. package/dist/src/composed/with-styles.js +1 -1
  105. package/dist/src/context-menu/context-menu-composed.js +1 -1
  106. package/dist/src/context-menu/context-menu.js +1 -1
  107. package/dist/src/date-picker/date-picker-composed.js +1 -1
  108. package/dist/src/date-picker/date-picker.js +1 -1
  109. package/dist/src/dialog/dialog-composed.js +1 -1
  110. package/dist/src/dialog/dialog-stack-parts.js +1 -1
  111. package/dist/src/dialog/dialog.js +1 -1
  112. package/dist/src/dropdown-menu/dropdown-menu-composed.js +1 -1
  113. package/dist/src/dropdown-menu/dropdown-menu.js +1 -1
  114. package/dist/src/empty-state/empty-state-composed.js +1 -1
  115. package/dist/src/form-group/form-group-composed.js +1 -1
  116. package/dist/src/hover-card/hover-card-composed.js +1 -1
  117. package/dist/src/hover-card/hover-card.js +1 -1
  118. package/dist/src/input/input-composed.js +1 -1
  119. package/dist/src/label/label-composed.js +1 -1
  120. package/dist/src/list/list-composed.js +1 -1
  121. package/dist/src/menu/menu-composed.js +1 -1
  122. package/dist/src/menu/menu.js +1 -1
  123. package/dist/src/menubar/menubar-composed.js +1 -1
  124. package/dist/src/menubar/menubar.js +1 -1
  125. package/dist/src/navigation-menu/navigation-menu-composed.js +1 -1
  126. package/dist/src/navigation-menu/navigation-menu.js +1 -1
  127. package/dist/src/pagination/pagination-composed.js +1 -1
  128. package/dist/src/popover/popover-composed.js +1 -1
  129. package/dist/src/popover/popover.js +1 -1
  130. package/dist/src/progress/progress-composed.js +1 -1
  131. package/dist/src/progress/progress.js +1 -1
  132. package/dist/src/radio/radio-composed.js +1 -1
  133. package/dist/src/radio/radio.js +1 -1
  134. package/dist/src/resizable-panel/resizable-panel-composed.js +1 -1
  135. package/dist/src/resizable-panel/resizable-panel.js +1 -1
  136. package/dist/src/scroll-area/scroll-area-composed.js +1 -1
  137. package/dist/src/scroll-area/scroll-area.js +1 -1
  138. package/dist/src/select/select-composed.js +1 -1
  139. package/dist/src/select/select.js +1 -1
  140. package/dist/src/separator/separator-composed.js +1 -1
  141. package/dist/src/sheet/sheet-composed.js +1 -1
  142. package/dist/src/sheet/sheet.js +1 -1
  143. package/dist/src/skeleton/skeleton-composed.js +1 -1
  144. package/dist/src/slider/slider-composed.js +1 -1
  145. package/dist/src/slider/slider.js +1 -1
  146. package/dist/src/switch/switch-composed.js +1 -1
  147. package/dist/src/switch/switch.js +1 -1
  148. package/dist/src/table/table-composed.js +1 -1
  149. package/dist/src/tabs/tabs-composed.js +1 -1
  150. package/dist/src/tabs/tabs.js +1 -1
  151. package/dist/src/textarea/textarea-composed.js +1 -1
  152. package/dist/src/toast/toast.js +1 -1
  153. package/dist/src/toggle/toggle-composed.js +1 -1
  154. package/dist/src/toggle/toggle.js +1 -1
  155. package/dist/src/toggle-group/toggle-group-composed.js +1 -1
  156. package/dist/src/toggle-group/toggle-group.js +1 -1
  157. package/dist/src/tooltip/tooltip-composed.js +1 -1
  158. package/dist/src/tooltip/tooltip.js +1 -1
  159. package/package.json +3 -3
  160. package/dist/shared/chunk-144kbnmx.js +0 -95
  161. package/dist/shared/chunk-1ewxfgsa.js +0 -167
  162. package/dist/shared/chunk-1hm0mbke.js +0 -258
  163. package/dist/shared/chunk-22rt6ws9.js +0 -69
  164. package/dist/shared/chunk-2ssqz188.js +0 -162
  165. package/dist/shared/chunk-33he7ay9.js +0 -218
  166. package/dist/shared/chunk-3jack97k.js +0 -509
  167. package/dist/shared/chunk-75pegjs7.js +0 -26
  168. package/dist/shared/chunk-862x7dja.js +0 -398
  169. package/dist/shared/chunk-8pk1pn5h.js +0 -215
  170. package/dist/shared/chunk-8t0nm721.js +0 -152
  171. package/dist/shared/chunk-94twh4s4.js +0 -28
  172. package/dist/shared/chunk-9yb26c0w.js +0 -232
  173. package/dist/shared/chunk-a82r2pnq.js +0 -67
  174. package/dist/shared/chunk-axpbdpgx.js +0 -177
  175. package/dist/shared/chunk-b3j6mym6.js +0 -203
  176. package/dist/shared/chunk-b4zzg457.js +0 -410
  177. package/dist/shared/chunk-b9qxfcsy.js +0 -60
  178. package/dist/shared/chunk-bc2qqkhr.js +0 -194
  179. package/dist/shared/chunk-bv12nkdm.js +0 -149
  180. package/dist/shared/chunk-bvxc1ww4.js +0 -164
  181. package/dist/shared/chunk-czv0kqj4.js +0 -107
  182. package/dist/shared/chunk-d83ag07h.js +0 -189
  183. package/dist/shared/chunk-de18ashk.js +0 -134
  184. package/dist/shared/chunk-dvk4h36t.js +0 -140
  185. package/dist/shared/chunk-dxvnerw2.js +0 -353
  186. package/dist/shared/chunk-e399pzdq.js +0 -241
  187. package/dist/shared/chunk-e4qha9as.js +0 -180
  188. package/dist/shared/chunk-eb2d9v6k.js +0 -68
  189. package/dist/shared/chunk-ect26sp5.js +0 -353
  190. package/dist/shared/chunk-ev367pq3.js +0 -102
  191. package/dist/shared/chunk-fjykbv0v.js +0 -214
  192. package/dist/shared/chunk-gdddk6nh.js +0 -96
  193. package/dist/shared/chunk-ghkw5bjq.js +0 -55
  194. package/dist/shared/chunk-hfjtkytb.js +0 -310
  195. package/dist/shared/chunk-hpvjfj0j.js +0 -31
  196. package/dist/shared/chunk-jpyjk616.js +0 -52
  197. package/dist/shared/chunk-k6d53tne.js +0 -206
  198. package/dist/shared/chunk-knzg86am.js +0 -168
  199. package/dist/shared/chunk-ktbf6xrt.js +0 -179
  200. package/dist/shared/chunk-m8y2p66x.js +0 -252
  201. package/dist/shared/chunk-metxdt5x.js +0 -28
  202. package/dist/shared/chunk-mgae1d93.js +0 -157
  203. package/dist/shared/chunk-mtx2cfbx.js +0 -175
  204. package/dist/shared/chunk-n436p5cb.js +0 -260
  205. package/dist/shared/chunk-nj420k31.js +0 -54
  206. package/dist/shared/chunk-nsmvdxgp.js +0 -213
  207. package/dist/shared/chunk-pcms04vq.js +0 -162
  208. package/dist/shared/chunk-pqskzq8t.js +0 -79
  209. package/dist/shared/chunk-pwr60kyd.js +0 -321
  210. package/dist/shared/chunk-pzknpa1y.js +0 -327
  211. package/dist/shared/chunk-q77y3rg4.js +0 -189
  212. package/dist/shared/chunk-qhnany7w.js +0 -179
  213. package/dist/shared/chunk-rdr0rtpr.js +0 -131
  214. package/dist/shared/chunk-rj52ty6r.js +0 -147
  215. package/dist/shared/chunk-rnqc7735.js +0 -125
  216. package/dist/shared/chunk-rtk30950.js +0 -202
  217. package/dist/shared/chunk-s0xgd8vg.js +0 -266
  218. package/dist/shared/chunk-s415735j.js +0 -357
  219. package/dist/shared/chunk-s62e7jf4.js +0 -30
  220. package/dist/shared/chunk-snd8e6r8.js +0 -418
  221. package/dist/shared/chunk-spng4yb9.js +0 -73
  222. package/dist/shared/chunk-t887wwjc.js +0 -168
  223. package/dist/shared/chunk-tn0m98j8.js +0 -42
  224. package/dist/shared/chunk-v0b5pkcq.js +0 -30
  225. package/dist/shared/chunk-v5tj7veh.js +0 -284
  226. package/dist/shared/chunk-vkscwzpr.js +0 -294
  227. package/dist/shared/chunk-vv187snj.js +0 -112
  228. package/dist/shared/chunk-xv4wd0kf.js +0 -293
  229. package/dist/shared/chunk-y1hpsqzy.js +0 -185
  230. package/dist/shared/chunk-yfzddvxc.js +0 -71
  231. package/dist/shared/chunk-yzgzx2dh.js +0 -311
  232. package/dist/shared/chunk-z5j7ztf2.js +0 -467
@@ -0,0 +1,183 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-q7xbcj9q.js";
4
+ import {
5
+ uniqueId
6
+ } from "./chunk-8y1jf6xr.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
+
19
+ // src/accordion/accordion-composed.tsx
20
+ import { jsxDEV as jsxDEV_7x81h0kn } from "@vertz/ui/jsx-dev-runtime";
21
+ import { createContext, ref, useContext } from "@vertz/ui";
22
+ var AccordionContext = createContext(undefined, "@vertz/ui-primitives::AccordionContext");
23
+ var AccordionItemContext = createContext(undefined, "@vertz/ui-primitives::AccordionItemContext");
24
+ function useAccordionContext(componentName) {
25
+ const ctx = useContext(AccordionContext);
26
+ if (!ctx) {
27
+ throw new Error(`<Accordion.${componentName}> must be used inside <Accordion>. ` + "Ensure it is a direct or nested child of the Accordion root component.");
28
+ }
29
+ return ctx;
30
+ }
31
+ function AccordionItem({ value, children }) {
32
+ const ctx = useAccordionContext("Item");
33
+ const baseId = uniqueId("accordion");
34
+ const triggerId = `${baseId}-trigger`;
35
+ const contentId = `${baseId}-content`;
36
+ const contentRef = ref();
37
+ const triggerRef = ref();
38
+ const itemCtx = {
39
+ value,
40
+ triggerId,
41
+ contentId,
42
+ contentRef,
43
+ triggerRef,
44
+ classes: ctx.classes,
45
+ isOpen: () => ctx.isOpen(value),
46
+ toggle: () => {
47
+ const prevHeight = contentRef.current?.scrollHeight ?? 0;
48
+ ctx.toggle(value);
49
+ const nowOpen = ctx.isOpen(value);
50
+ const contentEl = contentRef.current;
51
+ if (contentEl) {
52
+ contentEl.removeAttribute("data-initial");
53
+ if (nowOpen) {
54
+ setHidden(contentEl, false);
55
+ const height = contentEl.scrollHeight;
56
+ contentEl.style.setProperty("--accordion-content-height", `${height}px`);
57
+ setDataState(contentEl, "open");
58
+ } else {
59
+ contentEl.style.display = "";
60
+ contentEl.setAttribute("aria-hidden", "false");
61
+ contentEl.setAttribute("data-state", "open");
62
+ contentEl.style.setProperty("--accordion-content-height", `${prevHeight}px`);
63
+ contentEl.offsetHeight;
64
+ setDataState(contentEl, "closed");
65
+ setHiddenAnimated(contentEl, true);
66
+ }
67
+ }
68
+ const triggerEl = triggerRef.current;
69
+ if (triggerEl) {
70
+ setExpanded(triggerEl, nowOpen);
71
+ setDataState(triggerEl, nowOpen ? "open" : "closed");
72
+ }
73
+ }
74
+ };
75
+ return jsxDEV_7x81h0kn(AccordionItemContext.Provider, {
76
+ value: itemCtx,
77
+ children: jsxDEV_7x81h0kn("div", {
78
+ "data-accordion-item": "",
79
+ "data-value": value,
80
+ class: cn(ctx.classes?.item),
81
+ children
82
+ }, undefined, false, undefined, this)
83
+ }, undefined, false, undefined, this);
84
+ }
85
+ function AccordionTrigger({ children, className: cls, class: classProp }) {
86
+ const ctx = useContext(AccordionItemContext);
87
+ if (!ctx) {
88
+ throw new Error("<Accordion.Trigger> must be used inside <Accordion.Item>. " + "Ensure it is a direct or nested child of an Accordion Item component.");
89
+ }
90
+ const initiallyOpen = ctx.isOpen();
91
+ return jsxDEV_7x81h0kn("button", {
92
+ ref: ctx.triggerRef,
93
+ type: "button",
94
+ id: ctx.triggerId,
95
+ "data-accordion-trigger": "",
96
+ "aria-controls": ctx.contentId,
97
+ "data-value": ctx.value,
98
+ "aria-expanded": initiallyOpen ? "true" : "false",
99
+ "data-state": initiallyOpen ? "open" : "closed",
100
+ class: cn(ctx.classes?.trigger, cls ?? classProp),
101
+ onClick: () => ctx.toggle(),
102
+ children
103
+ }, undefined, false, undefined, this);
104
+ }
105
+ function AccordionContent({ children, className: cls, class: classProp }) {
106
+ const ctx = useContext(AccordionItemContext);
107
+ if (!ctx) {
108
+ throw new Error("<Accordion.Content> must be used inside <Accordion.Item>. " + "Ensure it is a direct or nested child of an Accordion Item component.");
109
+ }
110
+ const el = jsxDEV_7x81h0kn("div", {
111
+ ref: ctx.contentRef,
112
+ role: "region",
113
+ id: ctx.contentId,
114
+ "data-accordion-content": "",
115
+ "aria-labelledby": ctx.triggerId,
116
+ class: cn(ctx.classes?.content, cls ?? classProp),
117
+ children: jsxDEV_7x81h0kn("div", {
118
+ "data-part": "content-inner",
119
+ children
120
+ }, undefined, false, undefined, this)
121
+ }, undefined, false, undefined, this);
122
+ const isOpen = ctx.isOpen();
123
+ el.setAttribute("aria-hidden", isOpen ? "false" : "true");
124
+ el.setAttribute("data-state", isOpen ? "open" : "closed");
125
+ if (isOpen) {
126
+ el.setAttribute("data-initial", "");
127
+ } else {
128
+ el.style.display = "none";
129
+ }
130
+ return el;
131
+ }
132
+ function ComposedAccordionRoot({
133
+ children,
134
+ classes,
135
+ type,
136
+ defaultValue = [],
137
+ onValueChange
138
+ }) {
139
+ const multiple = type === "multiple";
140
+ let openValues = [...defaultValue];
141
+ const ctx = {
142
+ classes,
143
+ isOpen: (value) => openValues.includes(value),
144
+ toggle: (value) => {
145
+ const current = [...openValues];
146
+ const idx = current.indexOf(value);
147
+ if (idx >= 0) {
148
+ current.splice(idx, 1);
149
+ } else {
150
+ if (multiple) {
151
+ current.push(value);
152
+ } else {
153
+ current.length = 0;
154
+ current.push(value);
155
+ }
156
+ }
157
+ openValues = current;
158
+ onValueChange?.(current);
159
+ }
160
+ };
161
+ return jsxDEV_7x81h0kn(AccordionContext.Provider, {
162
+ value: ctx,
163
+ children: jsxDEV_7x81h0kn("div", {
164
+ "data-orientation": "vertical",
165
+ "data-accordion-root": "",
166
+ onKeydown: (event) => {
167
+ if (isKey(event, Keys.ArrowUp, Keys.ArrowDown, Keys.Home, Keys.End)) {
168
+ const root = event.currentTarget;
169
+ const triggers = [...root.querySelectorAll("[data-accordion-trigger]")];
170
+ handleListNavigation(event, triggers, { orientation: "vertical" });
171
+ }
172
+ },
173
+ children
174
+ }, undefined, false, undefined, this)
175
+ }, undefined, false, undefined, this);
176
+ }
177
+ var ComposedAccordion = Object.assign(ComposedAccordionRoot, {
178
+ Item: AccordionItem,
179
+ Trigger: AccordionTrigger,
180
+ Content: AccordionContent
181
+ });
182
+
183
+ export { ComposedAccordion };
@@ -0,0 +1,185 @@
1
+ import {
2
+ createDismiss
3
+ } from "./chunk-a6wp8c32.js";
4
+ import {
5
+ createFloatingPosition,
6
+ virtualElement
7
+ } from "./chunk-vef3sepw.js";
8
+ import {
9
+ uniqueId
10
+ } from "./chunk-8y1jf6xr.js";
11
+ import {
12
+ Keys,
13
+ handleListNavigation,
14
+ isKey
15
+ } from "./chunk-7867pr13.js";
16
+ import {
17
+ setDataState,
18
+ setHidden,
19
+ setHiddenAnimated
20
+ } from "./chunk-vevfhpc9.js";
21
+ import {
22
+ applyAttrs
23
+ } from "./chunk-2db2dnp3.js";
24
+
25
+ // src/context-menu/context-menu.tsx
26
+ import { jsxDEV as jsxDEV_7x81h0kn } from "@vertz/ui/jsx-dev-runtime";
27
+ import { signal } from "@vertz/ui";
28
+ function ContextMenuRoot(options = {}) {
29
+ const { onSelect, positioning, ...attrs } = options;
30
+ const state = {
31
+ open: signal(false),
32
+ activeIndex: signal(-1)
33
+ };
34
+ const items = [];
35
+ let floatingCleanup = null;
36
+ let dismissCleanup = null;
37
+ function handleClickOutside(event) {
38
+ const target = event.target;
39
+ if (!trigger.contains(target) && !content.contains(target)) {
40
+ close();
41
+ }
42
+ }
43
+ function updateActiveItem(index) {
44
+ for (let i = 0;i < items.length; i++) {
45
+ items[i]?.setAttribute("tabindex", i === index ? "0" : "-1");
46
+ }
47
+ }
48
+ function openMenu(x, y) {
49
+ state.open.value = true;
50
+ setHidden(content, false);
51
+ setDataState(content, "open");
52
+ if (positioning) {
53
+ const result = createFloatingPosition(virtualElement(x, y), content, {
54
+ strategy: "fixed",
55
+ ...positioning
56
+ });
57
+ floatingCleanup = result.cleanup;
58
+ dismissCleanup = createDismiss({
59
+ onDismiss: close,
60
+ insideElements: [trigger, content],
61
+ escapeKey: false
62
+ });
63
+ } else {
64
+ content.style.left = `${x}px`;
65
+ content.style.top = `${y}px`;
66
+ document.addEventListener("mousedown", handleClickOutside);
67
+ }
68
+ state.activeIndex.value = 0;
69
+ updateActiveItem(0);
70
+ items[0]?.focus();
71
+ }
72
+ function close() {
73
+ state.open.value = false;
74
+ setDataState(content, "closed");
75
+ setHiddenAnimated(content, true);
76
+ if (positioning) {
77
+ floatingCleanup?.();
78
+ floatingCleanup = null;
79
+ dismissCleanup?.();
80
+ dismissCleanup = null;
81
+ } else {
82
+ document.removeEventListener("mousedown", handleClickOutside);
83
+ }
84
+ }
85
+ const trigger = jsxDEV_7x81h0kn("div", {
86
+ onContextmenu: (event) => {
87
+ event.preventDefault();
88
+ if (state.open.peek()) {
89
+ close();
90
+ }
91
+ openMenu(event.clientX, event.clientY);
92
+ }
93
+ }, undefined, false, undefined, this);
94
+ const contentId = uniqueId("ctx-menu");
95
+ const content = jsxDEV_7x81h0kn("div", {
96
+ role: "menu",
97
+ id: contentId,
98
+ style: { position: "fixed", display: "none" },
99
+ "aria-hidden": "true",
100
+ "data-state": "closed",
101
+ onKeydown: (event) => {
102
+ if (isKey(event, Keys.Escape)) {
103
+ event.preventDefault();
104
+ close();
105
+ return;
106
+ }
107
+ if (isKey(event, Keys.Enter, Keys.Space)) {
108
+ event.preventDefault();
109
+ const active = items[state.activeIndex.peek()];
110
+ if (active) {
111
+ const val = active.getAttribute("data-value");
112
+ if (val !== null) {
113
+ onSelect?.(val);
114
+ close();
115
+ }
116
+ }
117
+ return;
118
+ }
119
+ const result = handleListNavigation(event, items, { orientation: "vertical" });
120
+ if (result) {
121
+ const idx = items.indexOf(result);
122
+ if (idx >= 0) {
123
+ state.activeIndex.value = idx;
124
+ updateActiveItem(idx);
125
+ }
126
+ return;
127
+ }
128
+ if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {
129
+ const char = event.key.toLowerCase();
130
+ const match = items.find((item) => item.textContent?.toLowerCase().startsWith(char));
131
+ if (match) {
132
+ const idx = items.indexOf(match);
133
+ state.activeIndex.value = idx;
134
+ updateActiveItem(idx);
135
+ match.focus();
136
+ }
137
+ }
138
+ }
139
+ }, undefined, false, undefined, this);
140
+ function createItem(value, label) {
141
+ const item = jsxDEV_7x81h0kn("div", {
142
+ role: "menuitem",
143
+ "data-value": value,
144
+ tabindex: "-1",
145
+ onClick: () => {
146
+ onSelect?.(value);
147
+ close();
148
+ },
149
+ children: label ?? value
150
+ }, undefined, false, undefined, this);
151
+ items.push(item);
152
+ return item;
153
+ }
154
+ function Item(value, label) {
155
+ return createItem(value, label);
156
+ }
157
+ function Group(label) {
158
+ const el = jsxDEV_7x81h0kn("div", {
159
+ role: "group",
160
+ "aria-label": label
161
+ }, undefined, false, undefined, this);
162
+ return {
163
+ el,
164
+ Item: (value, itemLabel) => createItem(value, itemLabel)
165
+ };
166
+ }
167
+ function Separator() {
168
+ return jsxDEV_7x81h0kn("hr", {
169
+ role: "separator"
170
+ }, undefined, false, undefined, this);
171
+ }
172
+ function Label(text) {
173
+ return jsxDEV_7x81h0kn("div", {
174
+ role: "none",
175
+ children: text
176
+ }, undefined, false, undefined, this);
177
+ }
178
+ applyAttrs(trigger, attrs);
179
+ return { trigger, content, state, Item, Group, Separator, Label };
180
+ }
181
+ var ContextMenu = {
182
+ Root: ContextMenuRoot
183
+ };
184
+
185
+ export { ContextMenu };
@@ -0,0 +1,301 @@
1
+ import {
2
+ applyAttrs
3
+ } from "./chunk-2db2dnp3.js";
4
+
5
+ // src/calendar/calendar.tsx
6
+ import { jsxDEV as jsxDEV_7x81h0kn } from "@vertz/ui/jsx-dev-runtime";
7
+ import { signal } from "@vertz/ui";
8
+ var MONTH_NAMES = [
9
+ "January",
10
+ "February",
11
+ "March",
12
+ "April",
13
+ "May",
14
+ "June",
15
+ "July",
16
+ "August",
17
+ "September",
18
+ "October",
19
+ "November",
20
+ "December"
21
+ ];
22
+ var DAY_NAMES = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
23
+ function getDaysInMonth(year, month) {
24
+ return new Date(year, month + 1, 0).getDate();
25
+ }
26
+ function isSameDay(a, b) {
27
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
28
+ }
29
+ function addDays(date, days) {
30
+ const result = new Date(date);
31
+ result.setDate(result.getDate() + days);
32
+ return result;
33
+ }
34
+ function addMonths(date, months) {
35
+ const result = new Date(date);
36
+ result.setMonth(result.getMonth() + months);
37
+ return result;
38
+ }
39
+ function CalendarTitleEl() {
40
+ return jsxDEV_7x81h0kn("div", {}, undefined, false, undefined, this);
41
+ }
42
+ function CalendarNavButton(onClick) {
43
+ return jsxDEV_7x81h0kn("button", {
44
+ type: "button",
45
+ onClick
46
+ }, undefined, false, undefined, this);
47
+ }
48
+ function CalendarHeaderEl(prevButton, title, nextButton) {
49
+ return jsxDEV_7x81h0kn("div", {
50
+ children: [
51
+ prevButton,
52
+ title,
53
+ nextButton
54
+ ]
55
+ }, undefined, true, undefined, this);
56
+ }
57
+ function CalendarGridEl(onKeydown) {
58
+ return jsxDEV_7x81h0kn("table", {
59
+ role: "grid",
60
+ onKeydown
61
+ }, undefined, false, undefined, this);
62
+ }
63
+ function CalendarRootEl(header, grid) {
64
+ return jsxDEV_7x81h0kn("div", {
65
+ children: [
66
+ header,
67
+ grid
68
+ ]
69
+ }, undefined, true, undefined, this);
70
+ }
71
+ function CalendarRoot(options = {}) {
72
+ const {
73
+ mode: modeOpt,
74
+ defaultValue,
75
+ defaultMonth: defaultMonthOpt,
76
+ minDate,
77
+ maxDate,
78
+ disabled,
79
+ weekStartsOn: weekStartsOnOpt,
80
+ onValueChange,
81
+ onMonthChange,
82
+ ...attrs
83
+ } = options;
84
+ const now = new Date;
85
+ const defaultMonth = defaultMonthOpt ?? now;
86
+ const weekStartsOn = weekStartsOnOpt ?? 0;
87
+ const mode = modeOpt ?? "single";
88
+ const state = {
89
+ value: signal(defaultValue ?? null),
90
+ focusedDate: signal(defaultMonth),
91
+ displayMonth: signal(defaultMonth)
92
+ };
93
+ function updateTitle() {
94
+ const month = state.displayMonth.peek();
95
+ title.textContent = `${MONTH_NAMES[month.getMonth()]} ${month.getFullYear()}`;
96
+ }
97
+ function isDateDisabled(date) {
98
+ if (disabled?.(date))
99
+ return true;
100
+ if (minDate && date < minDate && !isSameDay(date, minDate)) {
101
+ return true;
102
+ }
103
+ if (maxDate && date > maxDate && !isSameDay(date, maxDate)) {
104
+ return true;
105
+ }
106
+ return false;
107
+ }
108
+ function isSelected(date) {
109
+ const val = state.value.peek();
110
+ if (val === null)
111
+ return false;
112
+ if (val instanceof Date)
113
+ return isSameDay(val, date);
114
+ if (Array.isArray(val))
115
+ return val.some((d) => isSameDay(d, date));
116
+ if ("from" in val && "to" in val) {
117
+ return isSameDay(val.from, date) || isSameDay(val.to, date);
118
+ }
119
+ return false;
120
+ }
121
+ function isInRange(date) {
122
+ const val = state.value.peek();
123
+ if (val === null || !("from" in val))
124
+ return false;
125
+ const range = val;
126
+ return date > range.from && date < range.to;
127
+ }
128
+ function selectDate(date) {
129
+ if (isDateDisabled(date))
130
+ return;
131
+ if (mode === "single") {
132
+ state.value.value = date;
133
+ } else if (mode === "multiple") {
134
+ const current = state.value.peek() ?? [];
135
+ const existing = current.findIndex((d) => isSameDay(d, date));
136
+ if (existing >= 0) {
137
+ const next = [...current];
138
+ next.splice(existing, 1);
139
+ state.value.value = next;
140
+ } else {
141
+ state.value.value = [...current, date];
142
+ }
143
+ } else if (mode === "range") {
144
+ const current = state.value.peek();
145
+ if (!current || "to" in current && current.to) {
146
+ state.value.value = { from: date, to: date };
147
+ } else {
148
+ if (date < current.from) {
149
+ state.value.value = { from: date, to: current.from };
150
+ } else {
151
+ state.value.value = { from: current.from, to: date };
152
+ }
153
+ }
154
+ }
155
+ onValueChange?.(state.value.peek());
156
+ }
157
+ function computeGridRows(year, month) {
158
+ const daysInMonth = getDaysInMonth(year, month);
159
+ const firstDay = new Date(year, month, 1);
160
+ const firstDayOfWeek = firstDay.getDay();
161
+ const offset = (firstDayOfWeek - weekStartsOn + 7) % 7;
162
+ const startDate = addDays(firstDay, -offset);
163
+ const totalCells = offset + daysInMonth;
164
+ const totalRows = Math.ceil(totalCells / 7);
165
+ const rows = [];
166
+ let current = startDate;
167
+ for (let row = 0;row < totalRows; row++) {
168
+ const rowDates = [];
169
+ for (let col = 0;col < 7; col++) {
170
+ rowDates.push(new Date(current));
171
+ current = addDays(current, 1);
172
+ }
173
+ rows.push(rowDates);
174
+ }
175
+ return rows;
176
+ }
177
+ function buildDayButton(cellDate, month) {
178
+ const dateStr = cellDate.toISOString().split("T")[0] ?? "";
179
+ const isOutside = cellDate.getMonth() !== month;
180
+ const rangeVal = mode === "range" ? state.value.peek() : null;
181
+ return jsxDEV_7x81h0kn("button", {
182
+ type: "button",
183
+ "data-date": dateStr,
184
+ "data-outside-month": isOutside ? "true" : undefined,
185
+ "data-today": isSameDay(cellDate, now) ? "true" : undefined,
186
+ "aria-disabled": isDateDisabled(cellDate) ? "true" : undefined,
187
+ "aria-selected": isSelected(cellDate) ? "true" : undefined,
188
+ "data-range-start": rangeVal && "from" in rangeVal && isSameDay(cellDate, rangeVal.from) ? "true" : undefined,
189
+ "data-range-end": rangeVal && "to" in rangeVal && isSameDay(cellDate, rangeVal.to) ? "true" : undefined,
190
+ "data-in-range": rangeVal && isInRange(cellDate) ? "true" : undefined,
191
+ onClick: () => {
192
+ selectDate(cellDate);
193
+ rebuildGrid();
194
+ },
195
+ children: cellDate.getDate()
196
+ }, undefined, false, undefined, this);
197
+ }
198
+ function buildGrid() {
199
+ const display = state.displayMonth.peek();
200
+ const year = display.getFullYear();
201
+ const month = display.getMonth();
202
+ const rows = computeGridRows(year, month);
203
+ const thead = jsxDEV_7x81h0kn("thead", {
204
+ children: jsxDEV_7x81h0kn("tr", {
205
+ children: Array.from({ length: 7 }, (_, i) => {
206
+ const dayIndex = (weekStartsOn + i) % 7;
207
+ return jsxDEV_7x81h0kn("th", {
208
+ scope: "col",
209
+ children: DAY_NAMES[dayIndex] ?? ""
210
+ }, undefined, false, undefined, this);
211
+ })
212
+ }, undefined, false, undefined, this)
213
+ }, undefined, false, undefined, this);
214
+ const tbody = jsxDEV_7x81h0kn("tbody", {
215
+ children: rows.map((rowDates) => jsxDEV_7x81h0kn("tr", {
216
+ children: rowDates.map((cellDate) => jsxDEV_7x81h0kn("td", {
217
+ role: "gridcell",
218
+ children: buildDayButton(cellDate, month)
219
+ }, undefined, false, undefined, this))
220
+ }, undefined, false, undefined, this))
221
+ }, undefined, false, undefined, this);
222
+ grid.replaceChildren(thead, tbody);
223
+ }
224
+ function rebuildGrid() {
225
+ updateTitle();
226
+ buildGrid();
227
+ }
228
+ function navigateMonth(delta) {
229
+ state.displayMonth.value = addMonths(state.displayMonth.peek(), delta);
230
+ onMonthChange?.(state.displayMonth.peek());
231
+ rebuildGrid();
232
+ }
233
+ const title = CalendarTitleEl();
234
+ const prevButton = CalendarNavButton(() => navigateMonth(-1));
235
+ const nextButton = CalendarNavButton(() => navigateMonth(1));
236
+ const header = CalendarHeaderEl(prevButton, title, nextButton);
237
+ const grid = CalendarGridEl((event) => {
238
+ const active = document.activeElement;
239
+ if (!active || active.tagName !== "BUTTON")
240
+ return;
241
+ const dateStr = active.getAttribute("data-date");
242
+ if (!dateStr)
243
+ return;
244
+ const focused = new Date(`${dateStr}T00:00:00`);
245
+ let next = null;
246
+ if (event.key === "ArrowLeft") {
247
+ event.preventDefault();
248
+ next = addDays(focused, -1);
249
+ } else if (event.key === "ArrowRight") {
250
+ event.preventDefault();
251
+ next = addDays(focused, 1);
252
+ } else if (event.key === "ArrowUp") {
253
+ event.preventDefault();
254
+ next = addDays(focused, -7);
255
+ } else if (event.key === "ArrowDown") {
256
+ event.preventDefault();
257
+ next = addDays(focused, 7);
258
+ } else if (event.key === "Home") {
259
+ event.preventDefault();
260
+ const dayOfWeek = (focused.getDay() - weekStartsOn + 7) % 7;
261
+ next = addDays(focused, -dayOfWeek);
262
+ } else if (event.key === "End") {
263
+ event.preventDefault();
264
+ const dayOfWeek = (focused.getDay() - weekStartsOn + 7) % 7;
265
+ next = addDays(focused, 6 - dayOfWeek);
266
+ } else if (event.key === "PageUp") {
267
+ event.preventDefault();
268
+ next = event.shiftKey ? addMonths(focused, -12) : addMonths(focused, -1);
269
+ } else if (event.key === "PageDown") {
270
+ event.preventDefault();
271
+ next = event.shiftKey ? addMonths(focused, 12) : addMonths(focused, 1);
272
+ } else if (event.key === "Enter" || event.key === " ") {
273
+ event.preventDefault();
274
+ selectDate(focused);
275
+ rebuildGrid();
276
+ return;
277
+ }
278
+ if (next) {
279
+ state.focusedDate.value = next;
280
+ if (next.getMonth() !== state.displayMonth.peek().getMonth() || next.getFullYear() !== state.displayMonth.peek().getFullYear()) {
281
+ state.displayMonth.value = new Date(next.getFullYear(), next.getMonth(), 1);
282
+ onMonthChange?.(state.displayMonth.peek());
283
+ rebuildGrid();
284
+ }
285
+ const dateKey = next.toISOString().split("T")[0];
286
+ const btn = grid.querySelector(`button[data-date="${dateKey}"]`);
287
+ btn?.focus();
288
+ }
289
+ });
290
+ updateTitle();
291
+ buildGrid();
292
+ const root = CalendarRootEl(header, grid);
293
+ function destroy() {}
294
+ applyAttrs(root, attrs);
295
+ return { root, header, title, prevButton, nextButton, grid, state, destroy };
296
+ }
297
+ var Calendar = {
298
+ Root: CalendarRoot
299
+ };
300
+
301
+ export { Calendar };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Menu
3
- } from "./chunk-s0xgd8vg.js";
3
+ } from "./chunk-ennxcymj.js";
4
4
 
5
5
  // src/dropdown-menu/dropdown-menu.ts
6
6
  var DropdownMenu = {