@vertz/ui-primitives 0.2.23 → 0.2.25

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 (191) hide show
  1. package/dist/shared/{chunk-pzx0vpq1.js → chunk-00fqgnq1.js} +6 -11
  2. package/dist/shared/chunk-1dx23qnr.js +232 -0
  3. package/dist/shared/chunk-1hm0mbke.js +258 -0
  4. package/dist/shared/{chunk-ww7k2azn.js → chunk-20kwns82.js} +5 -9
  5. package/dist/shared/chunk-3jack97k.js +509 -0
  6. package/dist/shared/{chunk-xs6gp369.js → chunk-455p0jbk.js} +3 -7
  7. package/dist/shared/chunk-4z006v1j.js +467 -0
  8. package/dist/shared/{chunk-b25npqer.js → chunk-585ysr70.js} +1 -1
  9. package/dist/shared/chunk-5964gmv0.js +416 -0
  10. package/dist/shared/chunk-75pegjs7.js +26 -0
  11. package/dist/shared/{chunk-mr1tb0dp.js → chunk-7a2nqmeh.js} +1 -1
  12. package/dist/shared/chunk-7wem1bhb.js +252 -0
  13. package/dist/shared/{chunk-7cb3z0s8.js → chunk-8evj43jn.js} +5 -8
  14. package/dist/shared/chunk-8t0nm721.js +152 -0
  15. package/dist/shared/chunk-94twh4s4.js +28 -0
  16. package/dist/shared/chunk-98y1sw9y.js +398 -0
  17. package/dist/shared/chunk-9eedsnnk.js +164 -0
  18. package/dist/shared/{chunk-8c01c8mb.js → chunk-9hv3vc72.js} +0 -2
  19. package/dist/shared/{chunk-4894pmy6.js → chunk-9ydd4pn3.js} +6 -1
  20. package/dist/shared/chunk-aa3w85hn.js +321 -0
  21. package/dist/shared/chunk-axpbdpgx.js +177 -0
  22. package/dist/shared/chunk-b4zzg457.js +410 -0
  23. package/dist/shared/chunk-bc2qqkhr.js +194 -0
  24. package/dist/shared/chunk-brk0drrk.js +202 -0
  25. package/dist/shared/chunk-czv0kqj4.js +107 -0
  26. package/dist/shared/chunk-d83ag07h.js +189 -0
  27. package/dist/shared/{chunk-3kwh27dv.js → chunk-de18ashk.js} +0 -1
  28. package/dist/shared/{chunk-cgb2j94g.js → chunk-dvk4h36t.js} +0 -1
  29. package/dist/shared/chunk-e6660g7e.js +179 -0
  30. package/dist/shared/{chunk-3h1mxp95.js → chunk-eq4d9b0w.js} +0 -1
  31. package/dist/shared/chunk-ev367pq3.js +102 -0
  32. package/dist/shared/chunk-fjykbv0v.js +214 -0
  33. package/dist/shared/chunk-ghkw5bjq.js +55 -0
  34. package/dist/shared/chunk-gqb1n1hj.js +60 -0
  35. package/dist/shared/chunk-hfjtkytb.js +310 -0
  36. package/dist/shared/chunk-hpvjfj0j.js +31 -0
  37. package/dist/shared/chunk-hxmxvp56.js +67 -0
  38. package/dist/shared/chunk-j9m2f0rd.js +162 -0
  39. package/dist/shared/chunk-jpyjk616.js +52 -0
  40. package/dist/shared/{chunk-ttb2tt03.js → chunk-jsa3byag.js} +1 -1
  41. package/dist/shared/{chunk-9gfp3ffv.js → chunk-jzy1bkdk.js} +0 -1
  42. package/dist/shared/{chunk-f2vx4tpw.js → chunk-knzg86am.js} +5 -5
  43. package/dist/shared/chunk-metxdt5x.js +28 -0
  44. package/dist/shared/chunk-mhn2aazf.js +353 -0
  45. package/dist/shared/chunk-mtx2cfbx.js +175 -0
  46. package/dist/shared/chunk-nsmvdxgp.js +213 -0
  47. package/dist/shared/{chunk-pn6shbcs.js → chunk-pdzmg245.js} +1 -5
  48. package/dist/shared/chunk-pzknpa1y.js +327 -0
  49. package/dist/shared/chunk-q1ff3xp3.js +95 -0
  50. package/dist/shared/chunk-q7xbcj9q.js +7 -0
  51. package/dist/shared/{chunk-p0x7hgv6.js → chunk-qhnany7w.js} +0 -2
  52. package/dist/shared/chunk-qrm43tr3.js +357 -0
  53. package/dist/shared/{chunk-xa1b96mb.js → chunk-qsp7sfhp.js} +2 -2
  54. package/dist/shared/{chunk-j902w020.js → chunk-qwqnjjg8.js} +1 -1
  55. package/dist/shared/{chunk-h3v10x04.js → chunk-r0rz7z03.js} +6 -11
  56. package/dist/shared/chunk-r3ngaa64.js +418 -0
  57. package/dist/shared/chunk-r3pffzss.js +13 -0
  58. package/dist/shared/chunk-rrt62bp0.js +353 -0
  59. package/dist/shared/chunk-s24gkmna.js +131 -0
  60. package/dist/shared/chunk-s62e7jf4.js +30 -0
  61. package/dist/shared/chunk-spng4yb9.js +73 -0
  62. package/dist/shared/chunk-v0b5pkcq.js +30 -0
  63. package/dist/shared/chunk-v11kd39k.js +162 -0
  64. package/dist/shared/{chunk-0mcr52hc.js → chunk-vef3sepw.js} +17 -1
  65. package/dist/shared/chunk-vkscwzpr.js +294 -0
  66. package/dist/shared/chunk-vv187snj.js +112 -0
  67. package/dist/shared/chunk-wqsek87j.js +311 -0
  68. package/dist/shared/chunk-wtkxz2te.js +157 -0
  69. package/dist/shared/chunk-y1hpsqzy.js +185 -0
  70. package/dist/shared/chunk-yfzddvxc.js +71 -0
  71. package/dist/src/accordion/accordion-composed.d.ts +30 -0
  72. package/dist/src/accordion/accordion-composed.js +6 -0
  73. package/dist/src/accordion/accordion.js +1 -1
  74. package/dist/src/alert/alert-composed.d.ts +26 -0
  75. package/dist/src/alert/alert-composed.js +6 -0
  76. package/dist/src/alert-dialog/alert-dialog-composed.d.ts +40 -0
  77. package/dist/src/alert-dialog/alert-dialog-composed.js +6 -0
  78. package/dist/src/avatar/avatar-composed.d.ts +33 -0
  79. package/dist/src/avatar/avatar-composed.js +6 -0
  80. package/dist/src/badge/badge-composed.d.ts +33 -0
  81. package/dist/src/badge/badge-composed.js +6 -0
  82. package/dist/src/breadcrumb/breadcrumb-composed.d.ts +34 -0
  83. package/dist/src/breadcrumb/breadcrumb-composed.js +6 -0
  84. package/dist/src/button/button-composed.d.ts +34 -0
  85. package/dist/src/button/button-composed.js +6 -0
  86. package/dist/src/calendar/calendar-composed.d.ts +42 -0
  87. package/dist/src/calendar/calendar-composed.js +6 -0
  88. package/dist/src/calendar/calendar.js +1 -1
  89. package/dist/src/card/card-composed.d.ts +34 -0
  90. package/dist/src/card/card-composed.js +6 -0
  91. package/dist/src/carousel/carousel-composed.d.ts +32 -0
  92. package/dist/src/carousel/carousel-composed.js +6 -0
  93. package/dist/src/carousel/carousel.js +1 -1
  94. package/dist/src/checkbox/checkbox-composed.d.ts +18 -0
  95. package/dist/src/checkbox/checkbox-composed.js +6 -0
  96. package/dist/src/collapsible/collapsible-composed.d.ts +26 -0
  97. package/dist/src/collapsible/collapsible-composed.js +6 -0
  98. package/dist/src/combobox/combobox-composed.d.ts +30 -0
  99. package/dist/src/combobox/combobox-composed.js +6 -0
  100. package/dist/src/combobox/combobox.js +1 -1
  101. package/dist/src/command/command-composed.d.ts +67 -0
  102. package/dist/src/command/command-composed.js +6 -0
  103. package/dist/src/command/command.js +1 -1
  104. package/dist/src/composed/with-styles.d.ts +38 -0
  105. package/dist/src/composed/with-styles.js +6 -0
  106. package/dist/src/context-menu/context-menu-composed.d.ts +51 -0
  107. package/dist/src/context-menu/context-menu-composed.js +6 -0
  108. package/dist/src/context-menu/context-menu.js +1 -1
  109. package/dist/src/date-picker/date-picker-composed.d.ts +77 -0
  110. package/dist/src/date-picker/date-picker-composed.js +6 -0
  111. package/dist/src/date-picker/date-picker.js +1 -1
  112. package/dist/src/dialog/dialog-composed.d.ts +36 -0
  113. package/dist/src/dialog/dialog-composed.js +6 -0
  114. package/dist/src/dialog/dialog-stack-parts.d.ts +16 -0
  115. package/dist/src/dialog/dialog-stack-parts.js +18 -0
  116. package/dist/src/dropdown-menu/dropdown-menu-composed.d.ts +51 -0
  117. package/dist/src/dropdown-menu/dropdown-menu-composed.js +6 -0
  118. package/dist/src/dropdown-menu/dropdown-menu.js +1 -1
  119. package/dist/src/empty-state/empty-state-composed.d.ts +30 -0
  120. package/dist/src/empty-state/empty-state-composed.js +6 -0
  121. package/dist/src/form-group/form-group-composed.d.ts +24 -0
  122. package/dist/src/form-group/form-group-composed.js +6 -0
  123. package/dist/src/hover-card/hover-card-composed.d.ts +38 -0
  124. package/dist/src/hover-card/hover-card-composed.js +6 -0
  125. package/dist/src/hover-card/hover-card.js +1 -1
  126. package/dist/src/index.d.ts +1312 -812
  127. package/dist/src/index.js +79 -6566
  128. package/dist/src/input/input-composed.d.ts +35 -0
  129. package/dist/src/input/input-composed.js +6 -0
  130. package/dist/src/label/label-composed.d.ts +32 -0
  131. package/dist/src/label/label-composed.js +6 -0
  132. package/dist/src/list/list-composed.d.ts +34 -0
  133. package/dist/src/list/list-composed.js +6 -0
  134. package/dist/src/menu/menu-composed.d.ts +51 -0
  135. package/dist/src/menu/menu-composed.js +6 -0
  136. package/dist/src/menu/menu.js +1 -1
  137. package/dist/src/menubar/menubar-composed.d.ts +56 -0
  138. package/dist/src/menubar/menubar-composed.js +6 -0
  139. package/dist/src/menubar/menubar.js +1 -1
  140. package/dist/src/navigation-menu/navigation-menu-composed.d.ts +56 -0
  141. package/dist/src/navigation-menu/navigation-menu-composed.js +6 -0
  142. package/dist/src/navigation-menu/navigation-menu.js +1 -1
  143. package/dist/src/pagination/pagination-composed.d.ts +30 -0
  144. package/dist/src/pagination/pagination-composed.js +6 -0
  145. package/dist/src/popover/popover-composed.d.ts +36 -0
  146. package/dist/src/popover/popover-composed.js +6 -0
  147. package/dist/src/popover/popover.js +1 -1
  148. package/dist/src/progress/progress-composed.d.ts +17 -0
  149. package/dist/src/progress/progress-composed.js +6 -0
  150. package/dist/src/radio/radio-composed.d.ts +24 -0
  151. package/dist/src/radio/radio-composed.js +6 -0
  152. package/dist/src/radio/radio.js +1 -1
  153. package/dist/src/resizable-panel/resizable-panel-composed.d.ts +33 -0
  154. package/dist/src/resizable-panel/resizable-panel-composed.js +6 -0
  155. package/dist/src/resizable-panel/resizable-panel.js +1 -1
  156. package/dist/src/scroll-area/scroll-area-composed.d.ts +17 -0
  157. package/dist/src/scroll-area/scroll-area-composed.js +6 -0
  158. package/dist/src/scroll-area/scroll-area.js +1 -1
  159. package/dist/src/select/select-composed.d.ts +53 -0
  160. package/dist/src/select/select-composed.js +6 -0
  161. package/dist/src/select/select.js +1 -1
  162. package/dist/src/separator/separator-composed.d.ts +32 -0
  163. package/dist/src/separator/separator-composed.js +6 -0
  164. package/dist/src/sheet/sheet-composed.d.ts +34 -0
  165. package/dist/src/sheet/sheet-composed.js +6 -0
  166. package/dist/src/skeleton/skeleton-composed.d.ts +65 -0
  167. package/dist/src/skeleton/skeleton-composed.js +6 -0
  168. package/dist/src/slider/slider-composed.d.ts +22 -0
  169. package/dist/src/slider/slider-composed.js +6 -0
  170. package/dist/src/switch/switch-composed.d.ts +17 -0
  171. package/dist/src/switch/switch-composed.js +6 -0
  172. package/dist/src/table/table-composed.d.ts +34 -0
  173. package/dist/src/table/table-composed.js +6 -0
  174. package/dist/src/tabs/tabs-composed.d.ts +33 -0
  175. package/dist/src/tabs/tabs-composed.js +6 -0
  176. package/dist/src/tabs/tabs.js +1 -1
  177. package/dist/src/textarea/textarea-composed.d.ts +35 -0
  178. package/dist/src/textarea/textarea-composed.js +6 -0
  179. package/dist/src/toast/toast.js +1 -1
  180. package/dist/src/toggle/toggle-composed.d.ts +16 -0
  181. package/dist/src/toggle/toggle-composed.js +6 -0
  182. package/dist/src/toggle-group/toggle-group-composed.d.ts +24 -0
  183. package/dist/src/toggle-group/toggle-group-composed.js +6 -0
  184. package/dist/src/toggle-group/toggle-group.js +1 -1
  185. package/dist/src/tooltip/tooltip-composed.d.ts +36 -0
  186. package/dist/src/tooltip/tooltip-composed.js +6 -0
  187. package/dist/src/tooltip/tooltip.js +1 -1
  188. package/dist/src/utils.js +1 -1
  189. package/package.json +3 -3
  190. package/dist/shared/chunk-56reyd5r.js +0 -64
  191. package/dist/shared/chunk-mgr904ap.js +0 -370
@@ -1,370 +0,0 @@
1
- import {
2
- applyAttrs
3
- } from "./chunk-2db2dnp3.js";
4
-
5
- // src/calendar/calendar.tsx
6
- import { __discardMountFrame, __element, __enterChildren, __exitChildren, __flushMountFrame, __insert, __on, __pushMountFrame } from "@vertz/ui/internals";
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
- const __mfDepth = __pushMountFrame();
41
- try {
42
- const __mfResult0 = (() => {
43
- const __el0 = __element("div");
44
- return __el0;
45
- })();
46
- __flushMountFrame();
47
- return __mfResult0;
48
- } catch (__mfErr) {
49
- __discardMountFrame(__mfDepth);
50
- throw __mfErr;
51
- }
52
- }
53
- function CalendarNavButton(onClick) {
54
- const __mfDepth = __pushMountFrame();
55
- try {
56
- const __mfResult0 = (() => {
57
- const __el0 = __element("button");
58
- __el0.setAttribute("type", "button");
59
- __on(__el0, "click", onClick);
60
- return __el0;
61
- })();
62
- __flushMountFrame();
63
- return __mfResult0;
64
- } catch (__mfErr) {
65
- __discardMountFrame(__mfDepth);
66
- throw __mfErr;
67
- }
68
- }
69
- function CalendarHeaderEl(prevButton, title, nextButton) {
70
- const __mfDepth = __pushMountFrame();
71
- try {
72
- const __mfResult0 = (() => {
73
- const __el0 = __element("div");
74
- __enterChildren(__el0);
75
- __insert(__el0, prevButton);
76
- __insert(__el0, title);
77
- __insert(__el0, nextButton);
78
- __exitChildren();
79
- return __el0;
80
- })();
81
- __flushMountFrame();
82
- return __mfResult0;
83
- } catch (__mfErr) {
84
- __discardMountFrame(__mfDepth);
85
- throw __mfErr;
86
- }
87
- }
88
- function CalendarGridEl(onKeydown) {
89
- const __mfDepth = __pushMountFrame();
90
- try {
91
- const __mfResult0 = (() => {
92
- const __el0 = __element("table");
93
- __el0.setAttribute("role", "grid");
94
- __on(__el0, "keydown", onKeydown);
95
- return __el0;
96
- })();
97
- __flushMountFrame();
98
- return __mfResult0;
99
- } catch (__mfErr) {
100
- __discardMountFrame(__mfDepth);
101
- throw __mfErr;
102
- }
103
- }
104
- function CalendarRootEl(header, grid) {
105
- const __mfDepth = __pushMountFrame();
106
- try {
107
- const __mfResult0 = (() => {
108
- const __el0 = __element("div");
109
- __enterChildren(__el0);
110
- __insert(__el0, header);
111
- __insert(__el0, grid);
112
- __exitChildren();
113
- return __el0;
114
- })();
115
- __flushMountFrame();
116
- return __mfResult0;
117
- } catch (__mfErr) {
118
- __discardMountFrame(__mfDepth);
119
- throw __mfErr;
120
- }
121
- }
122
- function CalendarRoot(options = {}) {
123
- const {
124
- mode: modeOpt,
125
- defaultValue,
126
- defaultMonth: defaultMonthOpt,
127
- minDate,
128
- maxDate,
129
- disabled,
130
- weekStartsOn: weekStartsOnOpt,
131
- onValueChange,
132
- onMonthChange,
133
- ...attrs
134
- } = options;
135
- const now = new Date;
136
- const defaultMonth = defaultMonthOpt ?? now;
137
- const weekStartsOn = weekStartsOnOpt ?? 0;
138
- const mode = modeOpt ?? "single";
139
- const state = {
140
- value: signal(defaultValue ?? null),
141
- focusedDate: signal(defaultMonth),
142
- displayMonth: signal(defaultMonth)
143
- };
144
- function updateTitle() {
145
- const month = state.displayMonth.peek();
146
- title.textContent = `${MONTH_NAMES[month.getMonth()]} ${month.getFullYear()}`;
147
- }
148
- function isDateDisabled(date) {
149
- if (disabled?.(date))
150
- return true;
151
- if (minDate && date < minDate && !isSameDay(date, minDate)) {
152
- return true;
153
- }
154
- if (maxDate && date > maxDate && !isSameDay(date, maxDate)) {
155
- return true;
156
- }
157
- return false;
158
- }
159
- function isSelected(date) {
160
- const val = state.value.peek();
161
- if (val === null)
162
- return false;
163
- if (val instanceof Date)
164
- return isSameDay(val, date);
165
- if (Array.isArray(val))
166
- return val.some((d) => isSameDay(d, date));
167
- if ("from" in val && "to" in val) {
168
- return isSameDay(val.from, date) || isSameDay(val.to, date);
169
- }
170
- return false;
171
- }
172
- function isInRange(date) {
173
- const val = state.value.peek();
174
- if (val === null || !("from" in val))
175
- return false;
176
- const range = val;
177
- return date > range.from && date < range.to;
178
- }
179
- function selectDate(date) {
180
- if (isDateDisabled(date))
181
- return;
182
- if (mode === "single") {
183
- state.value.value = date;
184
- } else if (mode === "multiple") {
185
- const current = state.value.peek() ?? [];
186
- const existing = current.findIndex((d) => isSameDay(d, date));
187
- if (existing >= 0) {
188
- const next = [...current];
189
- next.splice(existing, 1);
190
- state.value.value = next;
191
- } else {
192
- state.value.value = [...current, date];
193
- }
194
- } else if (mode === "range") {
195
- const current = state.value.peek();
196
- if (!current || "to" in current && current.to) {
197
- state.value.value = { from: date, to: date };
198
- } else {
199
- if (date < current.from) {
200
- state.value.value = { from: date, to: current.from };
201
- } else {
202
- state.value.value = { from: current.from, to: date };
203
- }
204
- }
205
- }
206
- onValueChange?.(state.value.peek());
207
- }
208
- const gridCleanups = [];
209
- function cleanupGridListeners() {
210
- for (const cleanup of gridCleanups)
211
- cleanup();
212
- gridCleanups.length = 0;
213
- }
214
- function buildGrid() {
215
- cleanupGridListeners();
216
- grid.innerHTML = "";
217
- const display = state.displayMonth.peek();
218
- const year = display.getFullYear();
219
- const month = display.getMonth();
220
- const daysInMonth = getDaysInMonth(year, month);
221
- const thead = document.createElement("thead");
222
- const headerRow = document.createElement("tr");
223
- for (let i = 0;i < 7; i++) {
224
- const dayIndex = (weekStartsOn + i) % 7;
225
- const th = document.createElement("th");
226
- th.setAttribute("scope", "col");
227
- th.textContent = DAY_NAMES[dayIndex] ?? "";
228
- headerRow.appendChild(th);
229
- }
230
- thead.appendChild(headerRow);
231
- grid.appendChild(thead);
232
- const tbody = document.createElement("tbody");
233
- const firstDay = new Date(year, month, 1);
234
- const firstDayOfWeek = firstDay.getDay();
235
- const offset = (firstDayOfWeek - weekStartsOn + 7) % 7;
236
- const startDate = addDays(firstDay, -offset);
237
- let currentDate = startDate;
238
- const totalCells = offset + daysInMonth;
239
- const totalRows = Math.ceil(totalCells / 7);
240
- for (let row = 0;row < totalRows; row++) {
241
- const tr = document.createElement("tr");
242
- for (let col = 0;col < 7; col++) {
243
- const td = document.createElement("td");
244
- td.setAttribute("role", "gridcell");
245
- const btn = document.createElement("button");
246
- btn.setAttribute("type", "button");
247
- const cellDate = new Date(currentDate);
248
- btn.textContent = String(cellDate.getDate());
249
- btn.setAttribute("data-date", cellDate.toISOString().split("T")[0] ?? "");
250
- const isOutside = cellDate.getMonth() !== month;
251
- if (isOutside) {
252
- btn.setAttribute("data-outside-month", "true");
253
- }
254
- if (isSameDay(cellDate, now)) {
255
- btn.setAttribute("data-today", "true");
256
- }
257
- if (isDateDisabled(cellDate)) {
258
- btn.setAttribute("aria-disabled", "true");
259
- }
260
- if (isSelected(cellDate)) {
261
- btn.setAttribute("aria-selected", "true");
262
- }
263
- if (mode === "range") {
264
- const val = state.value.peek();
265
- if (val && "from" in val) {
266
- if (isSameDay(cellDate, val.from)) {
267
- btn.setAttribute("data-range-start", "true");
268
- }
269
- if (isSameDay(cellDate, val.to)) {
270
- btn.setAttribute("data-range-end", "true");
271
- }
272
- if (isInRange(cellDate)) {
273
- btn.setAttribute("data-in-range", "true");
274
- }
275
- }
276
- }
277
- const handleClick = () => {
278
- selectDate(cellDate);
279
- rebuildGrid();
280
- };
281
- btn.addEventListener("click", handleClick);
282
- gridCleanups.push(() => btn.removeEventListener("click", handleClick));
283
- td.appendChild(btn);
284
- tr.appendChild(td);
285
- currentDate = addDays(currentDate, 1);
286
- }
287
- tbody.appendChild(tr);
288
- }
289
- grid.appendChild(tbody);
290
- }
291
- function rebuildGrid() {
292
- updateTitle();
293
- buildGrid();
294
- }
295
- function navigateMonth(delta) {
296
- state.displayMonth.value = addMonths(state.displayMonth.peek(), delta);
297
- onMonthChange?.(state.displayMonth.peek());
298
- rebuildGrid();
299
- }
300
- const title = CalendarTitleEl();
301
- const prevButton = CalendarNavButton(() => navigateMonth(-1));
302
- const nextButton = CalendarNavButton(() => navigateMonth(1));
303
- const header = CalendarHeaderEl(prevButton, title, nextButton);
304
- const grid = CalendarGridEl((event) => {
305
- const active = document.activeElement;
306
- if (!active || active.tagName !== "BUTTON")
307
- return;
308
- const dateStr = active.getAttribute("data-date");
309
- if (!dateStr)
310
- return;
311
- const focused = new Date(`${dateStr}T00:00:00`);
312
- let next = null;
313
- if (event.key === "ArrowLeft") {
314
- event.preventDefault();
315
- next = addDays(focused, -1);
316
- } else if (event.key === "ArrowRight") {
317
- event.preventDefault();
318
- next = addDays(focused, 1);
319
- } else if (event.key === "ArrowUp") {
320
- event.preventDefault();
321
- next = addDays(focused, -7);
322
- } else if (event.key === "ArrowDown") {
323
- event.preventDefault();
324
- next = addDays(focused, 7);
325
- } else if (event.key === "Home") {
326
- event.preventDefault();
327
- const dayOfWeek = (focused.getDay() - weekStartsOn + 7) % 7;
328
- next = addDays(focused, -dayOfWeek);
329
- } else if (event.key === "End") {
330
- event.preventDefault();
331
- const dayOfWeek = (focused.getDay() - weekStartsOn + 7) % 7;
332
- next = addDays(focused, 6 - dayOfWeek);
333
- } else if (event.key === "PageUp") {
334
- event.preventDefault();
335
- next = event.shiftKey ? addMonths(focused, -12) : addMonths(focused, -1);
336
- } else if (event.key === "PageDown") {
337
- event.preventDefault();
338
- next = event.shiftKey ? addMonths(focused, 12) : addMonths(focused, 1);
339
- } else if (event.key === "Enter" || event.key === " ") {
340
- event.preventDefault();
341
- selectDate(focused);
342
- rebuildGrid();
343
- return;
344
- }
345
- if (next) {
346
- state.focusedDate.value = next;
347
- if (next.getMonth() !== state.displayMonth.peek().getMonth() || next.getFullYear() !== state.displayMonth.peek().getFullYear()) {
348
- state.displayMonth.value = new Date(next.getFullYear(), next.getMonth(), 1);
349
- onMonthChange?.(state.displayMonth.peek());
350
- rebuildGrid();
351
- }
352
- const dateKey = next.toISOString().split("T")[0];
353
- const btn = grid.querySelector(`button[data-date="${dateKey}"]`);
354
- btn?.focus();
355
- }
356
- });
357
- updateTitle();
358
- buildGrid();
359
- const root = CalendarRootEl(header, grid);
360
- function destroy() {
361
- cleanupGridListeners();
362
- }
363
- applyAttrs(root, attrs);
364
- return { root, header, title, prevButton, nextButton, grid, state, destroy };
365
- }
366
- var Calendar = {
367
- Root: CalendarRoot
368
- };
369
-
370
- export { Calendar };