@zeyos/zx 4.1.0 → 4.2.0

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 (83) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/DESIGN-SYSTEM.md +33 -3
  3. package/README.md +17 -5
  4. package/dist/types/components/app-icon/app-icon.d.ts +8 -1
  5. package/dist/types/components/aurora/aurora.d.ts +72 -0
  6. package/dist/types/components/calendar/calendar-model.d.ts +202 -0
  7. package/dist/types/components/calendar/calendar.d.ts +500 -0
  8. package/dist/types/components/card-view/card-view.d.ts +303 -0
  9. package/dist/types/components/card-view/record-card.d.ts +242 -0
  10. package/dist/types/components/kanban-view/kanban-view.d.ts +572 -0
  11. package/dist/types/components/table/table.d.ts +120 -31
  12. package/dist/types/components/table-view/table-view.d.ts +192 -0
  13. package/dist/types/components/view/record-view.d.ts +464 -0
  14. package/dist/types/index.d.ts +7 -0
  15. package/dist/types/zeyos/calendar.d.ts +91 -0
  16. package/dist/types/zeyos/icons.d.ts +19 -3
  17. package/dist/types/zeyos/index.d.ts +4 -0
  18. package/dist/types/zeyos/legacy-saved-views.d.ts +66 -0
  19. package/dist/types/zeyos/saved-views.d.ts +331 -0
  20. package/dist/types/zeyos/view.d.ts +305 -0
  21. package/dist/zx-zeyos.esm.js +4627 -1460
  22. package/dist/zx-zeyos.esm.min.js +1 -1
  23. package/dist/zx.css +2492 -410
  24. package/dist/zx.esm.js +4891 -115
  25. package/dist/zx.esm.min.js +3 -3
  26. package/dist/zx.global.js +4891 -115
  27. package/dist/zx.global.min.js +3 -3
  28. package/dist/zx.min.css +1 -1
  29. package/docs/api.json +1702 -191
  30. package/docs/llms.md +207 -20
  31. package/docs/llms.txt +16 -6
  32. package/package.json +1 -1
  33. package/src/components/app-icon/app-icon.css +140 -30
  34. package/src/components/app-icon/app-icon.js +32 -5
  35. package/src/components/app-rail/app-rail.css +11 -2
  36. package/src/components/app-sidebar/app-sidebar.css +11 -2
  37. package/src/components/aurora/aurora.css +143 -0
  38. package/src/components/aurora/aurora.js +146 -0
  39. package/src/components/avatar/avatar.css +1 -1
  40. package/src/components/button/button.css +34 -2
  41. package/src/components/calendar/calendar-model.js +402 -0
  42. package/src/components/calendar/calendar.css +567 -0
  43. package/src/components/calendar/calendar.js +1524 -0
  44. package/src/components/card/card.css +25 -3
  45. package/src/components/card-view/card-view.css +389 -0
  46. package/src/components/card-view/card-view.js +527 -0
  47. package/src/components/card-view/record-card.js +392 -0
  48. package/src/components/context-menu/context-menu.css +2 -2
  49. package/src/components/date-picker/date-picker.css +15 -3
  50. package/src/components/datebox/date-range-box.css +15 -2
  51. package/src/components/datebox/datebox.css +16 -3
  52. package/src/components/dropdown/dropdown.css +15 -3
  53. package/src/components/kanban-view/kanban-view.css +216 -0
  54. package/src/components/kanban-view/kanban-view.js +1228 -0
  55. package/src/components/launcher/launcher.css +18 -5
  56. package/src/components/master-panel/master-panel.css +14 -3
  57. package/src/components/menu-button/menu-button.css +2 -2
  58. package/src/components/message/message.css +15 -10
  59. package/src/components/modal/modal.css +15 -3
  60. package/src/components/navigation-bar/navigation-bar.css +17 -5
  61. package/src/components/panel/panel.css +10 -2
  62. package/src/components/select/select.css +20 -4
  63. package/src/components/sheet/sheet.css +4 -1
  64. package/src/components/table/table.css +80 -4
  65. package/src/components/table/table.js +322 -37
  66. package/src/components/table-view/table-view.css +18 -0
  67. package/src/components/table-view/table-view.js +347 -0
  68. package/src/components/tag-picker/tag-picker.css +15 -3
  69. package/src/components/tooltip/tooltip.css +15 -3
  70. package/src/components/view/record-view.css +114 -0
  71. package/src/components/view/record-view.js +770 -0
  72. package/src/index.js +15 -0
  73. package/src/zeyos/calendar.js +115 -0
  74. package/src/zeyos/icons.js +15 -8
  75. package/src/zeyos/index.js +13 -0
  76. package/src/zeyos/launcher.js +2 -2
  77. package/src/zeyos/legacy-saved-views.js +155 -0
  78. package/src/zeyos/saved-views.js +815 -0
  79. package/src/zeyos/table.js +3 -1
  80. package/src/zeyos/view.js +543 -0
  81. package/styles/icons.css +3 -10
  82. package/styles/tokens/semantic.css +74 -2
  83. package/styles/zx.css +6 -0
@@ -0,0 +1,567 @@
1
+ .zx-calendar {
2
+ --zx-calendar-time-axis: 4.75rem;
3
+ --zx-calendar-slot-height: 24px;
4
+ --zx-calendar-event-color: var(--zx-color-accent);
5
+ position: relative;
6
+ container-type: inline-size;
7
+ display: grid;
8
+ inline-size: 100%;
9
+ min-inline-size: 0;
10
+ overflow: hidden;
11
+ border: 1px solid var(--zx-color-border);
12
+ border-radius: var(--zx-radius-lg);
13
+ background: var(--zx-color-bg-surface);
14
+ color: var(--zx-color-text);
15
+ font-size: var(--zx-text-sm);
16
+ }
17
+
18
+ .zx-calendar__toolbar {
19
+ display: grid;
20
+ grid-template-columns: 1fr auto 1fr;
21
+ align-items: center;
22
+ gap: var(--zx-space-3);
23
+ min-inline-size: 0;
24
+ padding: var(--zx-space-3);
25
+ border-block-end: 1px solid var(--zx-color-border);
26
+ }
27
+
28
+ .zx-calendar__navigation,
29
+ .zx-calendar__commands,
30
+ .zx-calendar__views {
31
+ display: flex;
32
+ align-items: center;
33
+ min-inline-size: 0;
34
+ }
35
+
36
+ .zx-calendar__navigation { justify-self: start; gap: var(--zx-space-1); }
37
+ .zx-calendar__commands { justify-self: end; gap: var(--zx-space-3); }
38
+ .zx-calendar__views { overflow-x: auto; }
39
+
40
+ .zx-calendar__toolbar-button,
41
+ .zx-calendar__view-button,
42
+ .zx-calendar__new {
43
+ display: inline-flex;
44
+ min-block-size: var(--zx-control-height);
45
+ align-items: center;
46
+ justify-content: center;
47
+ border: 1px solid var(--zx-color-border-control);
48
+ background: var(--zx-color-bg-control);
49
+ color: var(--zx-color-text);
50
+ font: inherit;
51
+ font-size: var(--zx-text-sm);
52
+ cursor: pointer;
53
+ }
54
+
55
+ .zx-calendar__toolbar-button {
56
+ min-inline-size: var(--zx-control-height);
57
+ border-radius: var(--zx-control-radius);
58
+ padding-inline: var(--zx-space-3);
59
+ }
60
+
61
+ .zx-calendar__toolbar-button:has(.zx-icon) { padding-inline: var(--zx-space-2); }
62
+ .zx-calendar__view-button { border-inline-end-width: 0; padding-inline: var(--zx-space-3); }
63
+ .zx-calendar__view-button:first-child { border-start-start-radius: var(--zx-control-radius); border-end-start-radius: var(--zx-control-radius); }
64
+ .zx-calendar__view-button:last-child { border-inline-end-width: 1px; border-start-end-radius: var(--zx-control-radius); border-end-end-radius: var(--zx-control-radius); }
65
+ .zx-calendar__view-button[aria-pressed="true"] {
66
+ position: relative;
67
+ z-index: 1;
68
+ border-color: var(--zx-color-accent);
69
+ background: var(--zx-color-bg-selected);
70
+ color: var(--zx-color-accent);
71
+ }
72
+
73
+ .zx-calendar__new {
74
+ gap: var(--zx-space-2);
75
+ border-color: var(--zx-color-accent);
76
+ border-radius: var(--zx-control-radius);
77
+ background: var(--zx-color-accent);
78
+ color: var(--zx-color-on-accent);
79
+ padding-inline: var(--zx-space-3);
80
+ font-weight: 650;
81
+ }
82
+
83
+ .zx-calendar__toolbar-button:hover:not(:disabled),
84
+ .zx-calendar__view-button:hover:not(:disabled) { background: var(--zx-color-bg-hover); }
85
+ .zx-calendar__new:hover:not(:disabled) { background: var(--zx-color-accent-hover); }
86
+ .zx-calendar button:disabled { cursor: default; opacity: .55; }
87
+
88
+ .zx-calendar__toolbar-button:focus-visible,
89
+ .zx-calendar__view-button:focus-visible,
90
+ .zx-calendar__new:focus-visible,
91
+ .zx-calendar__event-action:focus-visible,
92
+ .zx-calendar__event-resize:focus-visible,
93
+ .zx-calendar__slot:focus-visible,
94
+ .zx-calendar__day-heading:focus-visible,
95
+ .zx-calendar__month-day:focus-visible,
96
+ .zx-calendar__year-day:focus-visible,
97
+ .zx-calendar__agenda-heading:focus-visible,
98
+ .zx-calendar__more:focus-visible,
99
+ .zx-calendar__month-week-number:focus-visible {
100
+ z-index: 4;
101
+ outline: none;
102
+ box-shadow: var(--zx-focus-ring);
103
+ }
104
+
105
+ .zx-calendar__heading {
106
+ min-inline-size: 0;
107
+ margin: 0;
108
+ overflow: hidden;
109
+ color: var(--zx-color-text);
110
+ font-size: var(--zx-text-lg);
111
+ font-weight: 700;
112
+ line-height: 1.25;
113
+ text-align: center;
114
+ text-overflow: ellipsis;
115
+ white-space: nowrap;
116
+ }
117
+
118
+ .zx-calendar__body { min-inline-size: 0; overflow-x: auto; }
119
+
120
+ .zx-calendar__time-surface {
121
+ display: grid;
122
+ min-inline-size: 42rem;
123
+ }
124
+
125
+ .zx-calendar__time-header,
126
+ .zx-calendar__all-day,
127
+ .zx-calendar__time-scroller {
128
+ display: grid;
129
+ grid-template-columns: var(--zx-calendar-time-axis) minmax(0, 1fr);
130
+ }
131
+
132
+ .zx-calendar__time-header,
133
+ .zx-calendar__all-day { border-block-end: 1px solid var(--zx-color-border); }
134
+ .zx-calendar__time-corner,
135
+ .zx-calendar__all-day-label {
136
+ border-inline-end: 1px solid var(--zx-color-border);
137
+ color: var(--zx-color-text-muted);
138
+ }
139
+
140
+ .zx-calendar__day-headings {
141
+ display: grid;
142
+ grid-template-columns: repeat(var(--zx-calendar-day-count), minmax(0, 1fr));
143
+ }
144
+
145
+ .zx-calendar__day-heading {
146
+ display: grid;
147
+ gap: 1px;
148
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
149
+ place-content: center;
150
+ border: 0;
151
+ border-inline-end: 1px solid var(--zx-color-border);
152
+ background: var(--zx-color-bg-surface);
153
+ color: var(--zx-color-text);
154
+ font: inherit;
155
+ cursor: pointer;
156
+ }
157
+
158
+ .zx-calendar__day-heading:last-child { border-inline-end: 0; }
159
+ .zx-calendar__day-heading:hover:not(:disabled) { background: var(--zx-color-bg-hover); }
160
+ .zx-calendar__day-heading[aria-current="date"] .zx-calendar__day-number { color: var(--zx-color-accent); font-weight: 750; }
161
+ .zx-calendar__day-weekday { color: var(--zx-color-text-muted); font-size: var(--zx-text-xs); text-transform: uppercase; letter-spacing: .04em; }
162
+ .zx-calendar__day-number { font-size: var(--zx-text-sm); }
163
+
164
+ .zx-calendar__all-day { min-block-size: calc(var(--zx-control-height) + var(--zx-space-2)); }
165
+ .zx-calendar__all-day-label {
166
+ display: grid;
167
+ place-items: center end;
168
+ padding-inline: var(--zx-space-2);
169
+ font-size: var(--zx-text-xs);
170
+ }
171
+
172
+ .zx-calendar__all-day-grid {
173
+ display: grid;
174
+ grid-template-columns: repeat(var(--zx-calendar-day-count), minmax(0, 1fr));
175
+ grid-auto-rows: calc(var(--zx-control-height) - var(--zx-space-2));
176
+ gap: 2px 0;
177
+ min-block-size: var(--zx-control-height);
178
+ padding-block: var(--zx-space-1);
179
+ overflow: hidden;
180
+ }
181
+
182
+ .zx-calendar__all-day-cell { border-inline-end: 1px solid var(--zx-color-border); }
183
+ .zx-calendar__all-day-cell:last-of-type { border-inline-end: 0; }
184
+
185
+ .zx-calendar__time-scroller {
186
+ position: relative;
187
+ max-block-size: min(68vh, 46rem);
188
+ overflow: auto;
189
+ overscroll-behavior: contain;
190
+ scrollbar-gutter: stable;
191
+ }
192
+
193
+ .zx-calendar__time-axis {
194
+ position: relative;
195
+ z-index: 2;
196
+ border-inline-end: 1px solid var(--zx-color-border);
197
+ background: var(--zx-color-bg-surface);
198
+ }
199
+
200
+ .zx-calendar__time-label {
201
+ display: block;
202
+ block-size: var(--zx-calendar-slot-height);
203
+ padding-block-start: var(--zx-space-1);
204
+ padding-inline-end: var(--zx-space-2);
205
+ color: var(--zx-color-text-muted);
206
+ font-size: var(--zx-text-xs);
207
+ text-align: end;
208
+ transform: translateY(-.65em);
209
+ }
210
+
211
+ .zx-calendar__time-label:first-child { transform: none; }
212
+
213
+ .zx-calendar__time-grid {
214
+ position: relative;
215
+ block-size: calc(var(--zx-calendar-slot-count) * var(--zx-calendar-slot-height));
216
+ min-inline-size: 0;
217
+ }
218
+
219
+ .zx-calendar__slots {
220
+ position: absolute;
221
+ inset: 0;
222
+ display: grid;
223
+ grid-template-columns: repeat(var(--zx-calendar-day-count), minmax(0, 1fr));
224
+ grid-template-rows: repeat(var(--zx-calendar-slot-count), var(--zx-calendar-slot-height));
225
+ }
226
+
227
+ .zx-calendar__slot {
228
+ min-inline-size: 0;
229
+ border: 0;
230
+ border-block-start: 1px solid var(--zx-color-border);
231
+ border-inline-end: 1px solid var(--zx-color-border);
232
+ background: var(--zx-color-bg-surface);
233
+ padding: 0;
234
+ cursor: crosshair;
235
+ }
236
+
237
+ .zx-calendar__slot:not([data-major="true"]) { border-block-start-style: dotted; }
238
+ .zx-calendar__slot[aria-selected="true"] { background: var(--zx-color-bg-selected); }
239
+ .zx-calendar__slot:hover:not(:disabled) { background: var(--zx-color-bg-hover); }
240
+ .zx-calendar__timed-events { position: absolute; inset: 0; pointer-events: none; }
241
+
242
+ .zx-calendar__event {
243
+ --zx-calendar-event-color: var(--zx-color-accent);
244
+ position: relative;
245
+ z-index: 2;
246
+ min-inline-size: 0;
247
+ pointer-events: auto;
248
+ }
249
+
250
+ .zx-calendar__event[data-variant="timed"] {
251
+ position: absolute;
252
+ min-block-size: calc(var(--zx-calendar-slot-height) - 2px);
253
+ padding: 1px 2px;
254
+ }
255
+
256
+ .zx-calendar__event-action {
257
+ display: grid;
258
+ grid-template-columns: minmax(0, 1fr);
259
+ align-content: start;
260
+ gap: 1px;
261
+ inline-size: 100%;
262
+ block-size: 100%;
263
+ min-inline-size: 0;
264
+ overflow: hidden;
265
+ border: 1px solid color-mix(in srgb, var(--zx-calendar-event-color) 65%, var(--zx-color-border));
266
+ border-inline-start: 3px solid var(--zx-calendar-event-color);
267
+ border-radius: var(--zx-radius-sm);
268
+ background: color-mix(in srgb, var(--zx-calendar-event-color) 11%, var(--zx-color-bg-surface));
269
+ color: var(--zx-color-text);
270
+ padding: var(--zx-space-1) var(--zx-space-2);
271
+ font: inherit;
272
+ font-size: var(--zx-text-xs);
273
+ line-height: 1.25;
274
+ text-align: start;
275
+ cursor: pointer;
276
+ }
277
+
278
+ .zx-calendar__event[data-draggable="true"] > .zx-calendar__event-action { cursor: grab; touch-action: none; }
279
+ .zx-calendar__event[data-state="dragging"] > .zx-calendar__event-action,
280
+ .zx-calendar__event[data-state="grabbed"] > .zx-calendar__event-action {
281
+ border-color: var(--zx-color-accent);
282
+ box-shadow: var(--zx-focus-ring);
283
+ cursor: grabbing;
284
+ }
285
+
286
+ .zx-calendar__event[data-preview]::after {
287
+ position: absolute;
288
+ inset-inline: var(--zx-space-1);
289
+ inset-block-end: var(--zx-space-1);
290
+ z-index: 5;
291
+ overflow: hidden;
292
+ border-radius: var(--zx-radius-sm);
293
+ background: var(--zx-color-bg-raised);
294
+ color: var(--zx-color-text);
295
+ content: attr(data-preview);
296
+ font-size: var(--zx-text-xs);
297
+ padding: 1px var(--zx-space-1);
298
+ text-overflow: ellipsis;
299
+ white-space: nowrap;
300
+ }
301
+
302
+ .zx-calendar__event-time { overflow: hidden; color: var(--zx-color-text-muted); text-overflow: ellipsis; white-space: nowrap; }
303
+ .zx-calendar__event-title { overflow: hidden; font-weight: 680; text-overflow: ellipsis; white-space: nowrap; }
304
+ .zx-calendar__event-location { overflow: hidden; color: var(--zx-color-text-muted); text-overflow: ellipsis; white-space: nowrap; }
305
+
306
+ .zx-calendar__event-resize {
307
+ position: absolute;
308
+ inset-inline: var(--zx-space-2);
309
+ inset-block-end: 1px;
310
+ z-index: 3;
311
+ display: grid;
312
+ block-size: 8px;
313
+ place-items: center;
314
+ border: 0;
315
+ background: transparent;
316
+ padding: 0;
317
+ cursor: ns-resize;
318
+ touch-action: none;
319
+ }
320
+
321
+ .zx-calendar__event-resize > span {
322
+ inline-size: 1.5rem;
323
+ border-block-start: 2px solid var(--zx-calendar-event-color);
324
+ }
325
+
326
+ .zx-calendar__event[data-variant="span"],
327
+ .zx-calendar__event[data-variant="month"] { min-inline-size: 0; padding-inline: 2px; }
328
+ .zx-calendar__event[data-variant="span"] { z-index: 2; }
329
+ .zx-calendar__event[data-variant="span"] .zx-calendar__event-action,
330
+ .zx-calendar__event[data-variant="month"] .zx-calendar__event-action {
331
+ display: flex;
332
+ align-items: center;
333
+ gap: var(--zx-space-1);
334
+ padding-block: 2px;
335
+ white-space: nowrap;
336
+ }
337
+ .zx-calendar__event[data-variant="span"] .zx-calendar__event-location,
338
+ .zx-calendar__event[data-variant="month"] .zx-calendar__event-location { display: none; }
339
+ .zx-calendar__event[data-variant="month"] .zx-calendar__event-time { flex: 0 0 auto; }
340
+ .zx-calendar__event[data-variant="month"] .zx-calendar__event-title { flex: 1 1 auto; }
341
+
342
+ .zx-calendar__now {
343
+ position: absolute;
344
+ inset-inline: 0;
345
+ z-index: 3;
346
+ border-block-start: 1px solid var(--zx-color-danger);
347
+ pointer-events: none;
348
+ }
349
+
350
+ .zx-calendar__now[hidden] { display: none; }
351
+ .zx-calendar__now-time {
352
+ position: absolute;
353
+ inset-inline-start: var(--zx-space-1);
354
+ color: var(--zx-color-danger);
355
+ font-size: var(--zx-text-xs);
356
+ font-weight: 700;
357
+ transform: translateY(-100%);
358
+ }
359
+
360
+ .zx-calendar__agenda { display: grid; }
361
+ .zx-calendar__agenda-day { display: grid; grid-template-columns: minmax(10rem, 22%) minmax(0, 1fr); border-block-end: 1px solid var(--zx-color-border); }
362
+ .zx-calendar__agenda-heading {
363
+ align-self: start;
364
+ border: 0;
365
+ background: var(--zx-color-bg-muted);
366
+ color: var(--zx-color-text);
367
+ padding: var(--zx-space-3);
368
+ font: inherit;
369
+ font-weight: 700;
370
+ text-align: start;
371
+ cursor: pointer;
372
+ }
373
+ .zx-calendar__agenda-heading[aria-current="date"] { color: var(--zx-color-accent); }
374
+ .zx-calendar__agenda-empty { margin: 0; color: var(--zx-color-text-muted); padding: var(--zx-space-3); }
375
+ .zx-calendar__agenda-day > .zx-calendar__event { border-block-end: 1px solid var(--zx-color-border); }
376
+ .zx-calendar__agenda-day > .zx-calendar__event:last-child { border-block-end: 0; }
377
+ .zx-calendar__event[data-variant="agenda"] .zx-calendar__event-action {
378
+ grid-template-columns: minmax(6rem, 18%) minmax(0, 1fr);
379
+ grid-template-areas: "time title" "time location";
380
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-4));
381
+ border: 0;
382
+ border-inline-start: 4px solid var(--zx-calendar-event-color);
383
+ border-radius: 0;
384
+ background: var(--zx-color-bg-surface);
385
+ padding: var(--zx-space-3);
386
+ }
387
+ .zx-calendar__event[data-variant="agenda"] .zx-calendar__event-time { grid-area: time; align-self: center; }
388
+ .zx-calendar__event[data-variant="agenda"] .zx-calendar__event-title { grid-area: title; align-self: end; font-size: var(--zx-text-sm); }
389
+ .zx-calendar__event[data-variant="agenda"] .zx-calendar__event-location { grid-area: location; align-self: start; }
390
+ .zx-calendar__event[data-variant="agenda"] .zx-calendar__event-action:hover:not(:disabled) { background: var(--zx-color-bg-hover); }
391
+
392
+ .zx-calendar__month {
393
+ display: grid;
394
+ min-inline-size: 42rem;
395
+ }
396
+
397
+ .zx-calendar__month-weekdays {
398
+ display: grid;
399
+ grid-template-columns: 2.5rem repeat(7, minmax(0, 1fr));
400
+ }
401
+
402
+ .zx-calendar__month-week {
403
+ display: grid;
404
+ grid-template-columns: auto minmax(0, 1fr);
405
+ }
406
+
407
+ .zx-calendar__month-weekdays { border-block-end: 1px solid var(--zx-color-border); }
408
+ .zx-calendar__month-week-gutter,
409
+ .zx-calendar__month-week-number { inline-size: 2.5rem; }
410
+ .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) { grid-template-columns: repeat(7, minmax(0, 1fr)); }
411
+ .zx-calendar__month-week:not(:has(.zx-calendar__month-week-number)) { grid-template-columns: minmax(0, 1fr); }
412
+ .zx-calendar__month-weekday {
413
+ padding: var(--zx-space-2);
414
+ color: var(--zx-color-text-muted);
415
+ font-size: var(--zx-text-xs);
416
+ font-weight: 650;
417
+ text-align: center;
418
+ text-transform: uppercase;
419
+ letter-spacing: .04em;
420
+ }
421
+ .zx-calendar__month-weekdays .zx-calendar__month-weekday { grid-row: 1; }
422
+ .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(7) { grid-column: 2; }
423
+ .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(6) { grid-column: 3; }
424
+ .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(5) { grid-column: 4; }
425
+ .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(4) { grid-column: 5; }
426
+ .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(3) { grid-column: 6; }
427
+ .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(2) { grid-column: 7; }
428
+ .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(1) { grid-column: 8; }
429
+ .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(7) { grid-column: 1; }
430
+ .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(6) { grid-column: 2; }
431
+ .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(5) { grid-column: 3; }
432
+ .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(4) { grid-column: 4; }
433
+ .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(3) { grid-column: 5; }
434
+ .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(2) { grid-column: 6; }
435
+ .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(1) { grid-column: 7; }
436
+ .zx-calendar__month-week { min-block-size: 7.5rem; border-block-end: 1px solid var(--zx-color-border); }
437
+ .zx-calendar__month-week-number {
438
+ grid-row: 1 / span 2;
439
+ border: 0;
440
+ border-inline-end: 1px solid var(--zx-color-border);
441
+ background: var(--zx-color-bg-muted);
442
+ color: var(--zx-color-text-muted);
443
+ font: inherit;
444
+ font-size: var(--zx-text-xs);
445
+ cursor: pointer;
446
+ }
447
+ .zx-calendar__month-days,
448
+ .zx-calendar__month-events {
449
+ grid-column: 2;
450
+ display: grid;
451
+ grid-template-columns: repeat(7, minmax(0, 1fr));
452
+ }
453
+ .zx-calendar__month-week:not(:has(.zx-calendar__month-week-number)) .zx-calendar__month-days,
454
+ .zx-calendar__month-week:not(:has(.zx-calendar__month-week-number)) .zx-calendar__month-events { grid-column: 1; }
455
+ .zx-calendar__month-days { grid-row: 1; }
456
+ .zx-calendar__month-day {
457
+ min-block-size: var(--zx-control-height);
458
+ border: 0;
459
+ border-inline-end: 1px solid var(--zx-color-border);
460
+ background: var(--zx-color-bg-surface);
461
+ color: var(--zx-color-text);
462
+ padding: var(--zx-space-2);
463
+ font: inherit;
464
+ text-align: end;
465
+ cursor: pointer;
466
+ }
467
+ .zx-calendar__month-day[data-other-month="true"] { color: var(--zx-color-text-muted); background: var(--zx-color-bg-muted); }
468
+ .zx-calendar__month-day[aria-current="date"] { color: var(--zx-color-accent); font-weight: 750; box-shadow: inset 0 2px var(--zx-color-accent); }
469
+ .zx-calendar__month-day:hover:not(:disabled) { background: var(--zx-color-bg-hover); }
470
+ .zx-calendar__month-events { grid-row: 2; grid-auto-rows: calc(var(--zx-control-height) - var(--zx-space-2)); align-content: start; gap: 2px 0; padding-block: var(--zx-space-1); }
471
+ .zx-calendar__more {
472
+ align-self: center;
473
+ overflow: hidden;
474
+ border: 0;
475
+ background: transparent;
476
+ color: var(--zx-color-accent);
477
+ padding-inline: var(--zx-space-2);
478
+ font: inherit;
479
+ font-size: var(--zx-text-xs);
480
+ text-align: start;
481
+ text-overflow: ellipsis;
482
+ white-space: nowrap;
483
+ cursor: pointer;
484
+ }
485
+
486
+ .zx-calendar__year {
487
+ display: grid;
488
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
489
+ gap: var(--zx-space-5);
490
+ padding: var(--zx-space-5);
491
+ }
492
+ .zx-calendar__year-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 2px; align-content: start; }
493
+ .zx-calendar__year-heading { grid-column: 1 / -1; margin: 0 0 var(--zx-space-2); font-size: var(--zx-text-md); }
494
+ .zx-calendar__year-weekday { color: var(--zx-color-text-muted); font-size: var(--zx-text-xs); font-weight: 650; text-align: center; }
495
+ .zx-calendar__year-day,
496
+ .zx-calendar__year-blank { aspect-ratio: 1; }
497
+ .zx-calendar__year-day {
498
+ display: grid;
499
+ place-items: center;
500
+ border: 0;
501
+ border-radius: var(--zx-radius-sm);
502
+ background: transparent;
503
+ color: var(--zx-color-text);
504
+ font: inherit;
505
+ font-size: var(--zx-text-xs);
506
+ cursor: pointer;
507
+ }
508
+ .zx-calendar__year-day[data-activity="1"] { background: color-mix(in srgb, var(--zx-color-accent) 10%, var(--zx-color-bg-surface)); }
509
+ .zx-calendar__year-day[data-activity="2"] { background: color-mix(in srgb, var(--zx-color-accent) 20%, var(--zx-color-bg-surface)); }
510
+ .zx-calendar__year-day[data-activity="3"] { background: color-mix(in srgb, var(--zx-color-accent) 32%, var(--zx-color-bg-surface)); font-weight: 700; }
511
+ .zx-calendar__year-day[aria-current="date"] { outline: 2px solid var(--zx-color-accent); outline-offset: -2px; }
512
+ .zx-calendar__year-day:hover:not(:disabled) { background: var(--zx-color-bg-hover); }
513
+
514
+ .zx-calendar__loading {
515
+ position: absolute;
516
+ inset: 0;
517
+ z-index: 10;
518
+ display: grid;
519
+ place-items: center;
520
+ background: color-mix(in srgb, var(--zx-color-bg-surface) 82%, transparent);
521
+ color: var(--zx-color-text);
522
+ font-weight: 650;
523
+ }
524
+ .zx-calendar__loading[hidden] { display: none; }
525
+ .zx-calendar[data-state="loading"] .zx-calendar__body { opacity: .55; }
526
+ .zx-calendar__status {
527
+ position: absolute;
528
+ inline-size: 1px;
529
+ block-size: 1px;
530
+ overflow: hidden;
531
+ clip-path: inset(50%);
532
+ white-space: nowrap;
533
+ }
534
+
535
+ @container (max-width: 44rem) {
536
+ .zx-calendar__toolbar { grid-template-columns: 1fr auto; align-items: start; }
537
+ .zx-calendar__navigation { grid-column: 1; grid-row: 1; }
538
+ .zx-calendar__heading { grid-column: 1 / -1; grid-row: 2; justify-self: start; max-inline-size: 100%; text-align: start; }
539
+ .zx-calendar__commands { display: contents; }
540
+ .zx-calendar__views {
541
+ grid-column: 1 / -1;
542
+ grid-row: 3;
543
+ max-inline-size: 100%;
544
+ }
545
+ .zx-calendar__new { grid-column: 2; grid-row: 1; justify-self: end; }
546
+ .zx-calendar__view-button { flex: 1 0 auto; }
547
+ .zx-calendar__new span { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); }
548
+ .zx-calendar__agenda-day { grid-template-columns: 1fr; }
549
+ .zx-calendar__agenda-heading { position: sticky; inset-block-start: 0; z-index: 3; border-block-end: 1px solid var(--zx-color-border); }
550
+ .zx-calendar__event[data-variant="agenda"] .zx-calendar__event-action { grid-template-columns: 5.5rem minmax(0, 1fr); }
551
+ .zx-calendar__year { grid-template-columns: 1fr; padding: var(--zx-space-3); }
552
+ }
553
+
554
+ [data-zx-density="compact"] .zx-calendar { --zx-calendar-slot-height: 20px; }
555
+
556
+ @media (prefers-reduced-motion: no-preference) {
557
+ .zx-calendar__event { transition: transform var(--zx-dur-fast) var(--zx-ease), opacity var(--zx-dur-fast) var(--zx-ease); }
558
+ .zx-calendar__toolbar-button,
559
+ .zx-calendar__view-button,
560
+ .zx-calendar__new { transition: background var(--zx-dur-fast) var(--zx-ease), border-color var(--zx-dur-fast) var(--zx-ease); }
561
+ }
562
+
563
+ @media (forced-colors: active) {
564
+ .zx-calendar__event-action { border: 1px solid CanvasText; border-inline-start-width: 4px; }
565
+ .zx-calendar__now { border-color: Highlight; }
566
+ .zx-calendar__year-day[data-activity] { outline: 1px solid CanvasText; }
567
+ }