@fieldia/calendar 0.0.0-stage → 0.23.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.
- package/LICENSE +21 -0
- package/README.md +125 -2
- package/package.json +37 -3
- package/src/index.d.mts +3 -0
- package/src/index.d.ts +3 -0
- package/src/index.js +6 -0
- package/src/index.js.map +1 -0
- package/src/index.mjs +2 -0
- package/src/index.mjs.map +1 -0
- package/src/lib/calendar-core.d.mts +83 -0
- package/src/lib/calendar-core.d.ts +83 -0
- package/src/lib/calendar-core.js +18 -0
- package/src/lib/calendar-core.js.map +1 -0
- package/src/lib/calendar-core.mjs +13 -0
- package/src/lib/calendar-core.mjs.map +1 -0
- package/src/lib/calendar-view.d.mts +11 -0
- package/src/lib/calendar-view.d.ts +11 -0
- package/src/lib/calendar-view.js +829 -0
- package/src/lib/calendar-view.js.map +1 -0
- package/src/lib/calendar-view.mjs +826 -0
- package/src/lib/calendar-view.mjs.map +1 -0
- package/src/lib/dates.d.mts +43 -0
- package/src/lib/dates.d.ts +43 -0
- package/src/lib/dates.js +100 -0
- package/src/lib/dates.js.map +1 -0
- package/src/lib/dates.mjs +80 -0
- package/src/lib/dates.mjs.map +1 -0
- package/src/lib/events.d.mts +58 -0
- package/src/lib/events.d.ts +58 -0
- package/src/lib/events.js +136 -0
- package/src/lib/events.js.map +1 -0
- package/src/lib/events.mjs +125 -0
- package/src/lib/events.mjs.map +1 -0
- package/src/lib/gestures.d.mts +11 -0
- package/src/lib/gestures.d.ts +11 -0
- package/src/lib/gestures.js +215 -0
- package/src/lib/gestures.js.map +1 -0
- package/src/lib/gestures.mjs +210 -0
- package/src/lib/gestures.mjs.map +1 -0
- package/src/lib/keys.d.mts +5 -0
- package/src/lib/keys.d.ts +5 -0
- package/src/lib/keys.js +151 -0
- package/src/lib/keys.js.map +1 -0
- package/src/lib/keys.mjs +146 -0
- package/src/lib/keys.mjs.map +1 -0
- package/src/lib/labels.d.mts +65 -0
- package/src/lib/labels.d.ts +65 -0
- package/src/lib/labels.js +193 -0
- package/src/lib/labels.js.map +1 -0
- package/src/lib/labels.mjs +188 -0
- package/src/lib/labels.mjs.map +1 -0
- package/src/lib/list-view.d.mts +11 -0
- package/src/lib/list-view.d.ts +11 -0
- package/src/lib/list-view.js +54 -0
- package/src/lib/list-view.js.map +1 -0
- package/src/lib/list-view.mjs +51 -0
- package/src/lib/list-view.mjs.map +1 -0
- package/src/lib/move-to.d.mts +15 -0
- package/src/lib/move-to.d.ts +15 -0
- package/src/lib/move-to.js +122 -0
- package/src/lib/move-to.js.map +1 -0
- package/src/lib/move-to.mjs +118 -0
- package/src/lib/move-to.mjs.map +1 -0
- package/src/lib/settings.d.mts +11 -0
- package/src/lib/settings.d.ts +11 -0
- package/src/lib/settings.js +3 -0
- package/src/lib/settings.js.map +1 -0
- package/src/lib/settings.mjs +2 -0
- package/src/lib/settings.mjs.map +1 -0
- package/src/lib/styles.d.mts +9 -0
- package/src/lib/styles.d.ts +9 -0
- package/src/lib/styles.js +165 -0
- package/src/lib/styles.js.map +1 -0
- package/src/lib/styles.mjs +161 -0
- package/src/lib/styles.mjs.map +1 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A list's calendar in Fieldia's tokens, so a theme, a host's own tokens and
|
|
3
|
+
* the dark scheme reach it: each record a tint of the surface with a bar in
|
|
4
|
+
* its colour, which reads on a light page and a dark one alike. Logical
|
|
5
|
+
* sides throughout, so right to left needs nothing of its own but the arrows.
|
|
6
|
+
*/
|
|
7
|
+
export const CALENDAR_CSS = `
|
|
8
|
+
.fd-cal { position: relative; display: grid; gap: 10px; min-width: 0; color: var(--fd-text); container: fd-cal / inline-size; --fd-cal-hour: 48px; }
|
|
9
|
+
.fd-cal-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
|
|
10
|
+
.fd-cal-nav { display: inline-flex; gap: 4px; align-items: center; }
|
|
11
|
+
.fd-cal .fd-button { min-height: 32px; }
|
|
12
|
+
.fd-cal-step { min-width: 32px; padding-inline: 6px; display: inline-grid; place-items: center; }
|
|
13
|
+
.fd-cal-step svg { width: 16px; height: 16px; }
|
|
14
|
+
.fd-cal-step:dir(rtl) svg { transform: scaleX(-1); }
|
|
15
|
+
.fd-cal-title { margin: 0; flex: 1 1 12em; min-width: 0; font-size: 1.05rem; font-weight: 600; }
|
|
16
|
+
.fd-cal-ranges { display: inline-flex; border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); overflow: hidden; }
|
|
17
|
+
.fd-cal-ranges .fd-button { border: 0; border-radius: 0; padding-inline: 10px; }
|
|
18
|
+
.fd-cal-ranges .fd-button + .fd-button { border-inline-start: 1px solid var(--fd-border); }
|
|
19
|
+
.fd-cal-ranges .fd-button[aria-pressed="true"] { background: var(--fd-accent-soft); color: var(--fd-accent); font-weight: 600; }
|
|
20
|
+
.fd-cal-said:not(:empty), .fd-cal-alert:not(:empty) { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; padding: 6px 10px; border-radius: var(--fd-control-radius); font-size: 13.5px; }
|
|
21
|
+
.fd-cal-said:not(:empty) { background: var(--fd-info-soft); color: var(--fd-text); }
|
|
22
|
+
.fd-cal-alert:not(:empty) { background: var(--fd-error-soft); color: var(--fd-text); }
|
|
23
|
+
.fd-cal-said .fd-button { min-height: 28px; }
|
|
24
|
+
.fd-cal-note { margin: 0; color: var(--fd-muted); font-size: 13px; }
|
|
25
|
+
.fd-cal-body { min-width: 0; border: 1px solid var(--fd-border); border-radius: var(--fd-radius); background: var(--fd-surface); overflow: hidden; }
|
|
26
|
+
.fd-cal-body[aria-busy="true"] { cursor: progress; }
|
|
27
|
+
.fd-cal-failed { margin: 0; padding: 24px; text-align: center; }
|
|
28
|
+
.fd-cal-empty { margin: 0; padding: 32px 16px; text-align: center; color: var(--fd-muted); }
|
|
29
|
+
|
|
30
|
+
/* The day and the week: the hours down the side, a column for each day or each person. */
|
|
31
|
+
.fd-cal-scroll { overflow-x: auto; }
|
|
32
|
+
.fd-cal-grid { display: grid; grid-template-columns: 52px repeat(var(--fd-cal-cols), minmax(var(--fd-cal-min, 0px), 1fr)); min-width: min-content; }
|
|
33
|
+
.fd-cal-corner, .fd-cal-head { box-sizing: border-box; padding: 6px 4px; border-bottom: 1px solid var(--fd-border); font-size: 12px; color: var(--fd-muted); text-align: center; min-width: 0; }
|
|
34
|
+
.fd-cal-head { border-inline-start: 1px solid var(--fd-border); overflow-wrap: anywhere; }
|
|
35
|
+
.fd-cal-head-day { display: inline-grid; justify-items: center; gap: 2px; border: 0; background: none; color: inherit; font: inherit; padding: 2px 6px; border-radius: var(--fd-control-radius); cursor: pointer; }
|
|
36
|
+
.fd-cal-head-day:hover { background: var(--fd-accent-soft); }
|
|
37
|
+
.fd-cal-head-day:focus-visible, .fd-cal-daynum:focus-visible, .fd-cal-more:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; }
|
|
38
|
+
.fd-cal-head-num { font-size: 18px; line-height: 28px; min-width: 28px; border-radius: 999px; color: var(--fd-text); }
|
|
39
|
+
.fd-cal-head[aria-current="date"] .fd-cal-head-num { background: var(--fd-accent); color: var(--fd-accent-text); }
|
|
40
|
+
.fd-cal-head-who { font-size: 13px; font-weight: 600; color: var(--fd-text); }
|
|
41
|
+
.fd-cal-corner { font-size: 11px; display: grid; align-items: end; justify-items: end; padding-inline-end: 6px; }
|
|
42
|
+
.fd-cal-allday { box-sizing: border-box; display: grid; align-content: start; gap: 2px; padding: 2px; min-height: 30px; min-width: 0; border-inline-start: 1px solid var(--fd-border); border-bottom: 1px solid var(--fd-border); }
|
|
43
|
+
.fd-cal-allday[data-alone] { min-height: 240px; }
|
|
44
|
+
.fd-cal-hours { position: relative; height: calc(var(--fd-cal-span) * var(--fd-cal-hour)); }
|
|
45
|
+
.fd-cal-hour { position: absolute; inset-inline-end: 6px; transform: translateY(-50%); font-size: 11px; color: var(--fd-muted); font-variant-numeric: tabular-nums; }
|
|
46
|
+
.fd-cal-hour:first-child { transform: none; }
|
|
47
|
+
.fd-cal-col {
|
|
48
|
+
position: relative; min-width: 0; border-inline-start: 1px solid var(--fd-border); height: calc(var(--fd-cal-span) * var(--fd-cal-hour));
|
|
49
|
+
background-image: repeating-linear-gradient(to bottom, var(--fd-border) 0 1px, transparent 1px calc(var(--fd-cal-hour) / 2), color-mix(in srgb, var(--fd-border) 50%, transparent) calc(var(--fd-cal-hour) / 2) calc(var(--fd-cal-hour) / 2 + 1px), transparent calc(var(--fd-cal-hour) / 2 + 1px) var(--fd-cal-hour));
|
|
50
|
+
}
|
|
51
|
+
.fd-cal-col[data-today] { background-color: color-mix(in srgb, var(--fd-accent) 4%, transparent); }
|
|
52
|
+
.fd-cal-slot { box-sizing: border-box; height: calc(var(--fd-cal-hour) * var(--fd-cal-slot) / 60); }
|
|
53
|
+
.fd-cal[data-creates] .fd-cal-slot, .fd-cal[data-creates] .fd-cal-allday, .fd-cal[data-creates] .fd-cal-day { cursor: cell; }
|
|
54
|
+
.fd-cal-slot:focus { outline: none; }
|
|
55
|
+
.fd-cal-slot:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: -2px; background: var(--fd-accent-soft); }
|
|
56
|
+
.fd-cal-picking { position: absolute; inset-inline: 2px; z-index: 2; box-sizing: border-box; border: 1px dashed var(--fd-accent); border-radius: 4px; background: var(--fd-accent-soft); pointer-events: none; }
|
|
57
|
+
/* Under the records, so a record's words are never struck through. */
|
|
58
|
+
.fd-cal-now { position: absolute; inset-inline: 0; z-index: 0; height: 2px; margin-top: -1px; background: var(--fd-error); pointer-events: none; }
|
|
59
|
+
.fd-cal-now::before { content: ""; position: absolute; inset-inline-start: -5px; top: -4px; width: 10px; height: 10px; border-radius: 50%; background: var(--fd-error); }
|
|
60
|
+
|
|
61
|
+
/* A record: a tint of the surface, a bar in its colour. */
|
|
62
|
+
.fd-cal-event {
|
|
63
|
+
--fd-cal-c: var(--fd-accent);
|
|
64
|
+
box-sizing: border-box; min-width: 0; overflow: hidden; padding: 2px 6px; border-radius: 4px; font-size: 12.5px; line-height: 1.3;
|
|
65
|
+
background: color-mix(in srgb, var(--fd-cal-c) 16%, var(--fd-surface)); color: var(--fd-text); border-inline-start: 3px solid var(--fd-cal-c);
|
|
66
|
+
cursor: default; user-select: none; -webkit-user-select: none;
|
|
67
|
+
}
|
|
68
|
+
.fd-cal-event[data-opens], .fd-cal-event[data-moves] { cursor: pointer; }
|
|
69
|
+
.fd-cal-event:hover, .fd-cal-event.fd-cal-hot { background: color-mix(in srgb, var(--fd-cal-c) 26%, var(--fd-surface)); }
|
|
70
|
+
.fd-cal-event:focus { outline: none; }
|
|
71
|
+
.fd-cal-event:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; z-index: 3; }
|
|
72
|
+
.fd-cal-col > .fd-cal-event { position: absolute; z-index: 1; box-shadow: 0 0 0 1px var(--fd-surface); line-height: 16px; container: fd-cal-ev / inline-size; }
|
|
73
|
+
/* Its words in the whole lines its height holds (--fd-cal-lines, by linesIn): none cut through. */
|
|
74
|
+
.fd-cal-col > .fd-cal-event > .fd-cal-event-text { display: block; max-height: calc(var(--fd-cal-lines, 1) * 16px); overflow: hidden; text-overflow: ellipsis; }
|
|
75
|
+
/* Each word whole, a long one cut with "…"; too narrow for its time, the name alone (the hours say when). */
|
|
76
|
+
.fd-cal-col .fd-cal-event-title { overflow-wrap: normal; }
|
|
77
|
+
.fd-cal-col .fd-cal-event-who { overflow: hidden; text-overflow: ellipsis; }
|
|
78
|
+
@container fd-cal-ev (max-width: 56px) { .fd-cal-col .fd-cal-event-time, .fd-cal-col .fd-cal-event-who { display: none; } }
|
|
79
|
+
.fd-cal-event[data-moving] { opacity: 0.9; z-index: 6; box-shadow: 0 6px 18px rgba(0, 0, 0, 0.22); pointer-events: none; }
|
|
80
|
+
.fd-cal-event[aria-busy="true"] { opacity: 0.75; }
|
|
81
|
+
.fd-cal-event-time { font-variant-numeric: tabular-nums; }
|
|
82
|
+
.fd-cal-event-title { font-weight: 600; overflow-wrap: anywhere; text-align: match-parent; }
|
|
83
|
+
.fd-cal-event-who { display: block; opacity: 0.85; }
|
|
84
|
+
/* 24 pixels at least, so a finger or a pointer can hit each (WCAG 2.5.8). */
|
|
85
|
+
.fd-cal-allday > .fd-cal-event, .fd-cal-day > .fd-cal-event { position: relative; min-height: 24px; box-sizing: border-box; line-height: 20px; white-space: nowrap; padding-inline-end: 24px; }
|
|
86
|
+
.fd-cal-col > .fd-cal-event[data-short] .fd-cal-event-who { display: none; }
|
|
87
|
+
/* One line (a short record, a month's day, all day): the name cut with "…" at its own end, so a Latin one right to left
|
|
88
|
+
keeps its start; whole when pointed at, and to a screen reader. */
|
|
89
|
+
.fd-cal-col > .fd-cal-event[data-short] > .fd-cal-event-text, .fd-cal-allday .fd-cal-event-text, .fd-cal-day .fd-cal-event-text { display: flex; gap: 0.3em; white-space: nowrap; }
|
|
90
|
+
:is(.fd-cal-col > .fd-cal-event[data-short], .fd-cal-allday > .fd-cal-event, .fd-cal-day > .fd-cal-event) .fd-cal-event-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
91
|
+
.fd-cal-resize { position: absolute; inset-inline: 0; bottom: 0; height: 8px; cursor: ns-resize; touch-action: none; }
|
|
92
|
+
.fd-cal-event-menu {
|
|
93
|
+
position: absolute; top: 0; inset-inline-end: 0; z-index: 2; width: 24px; height: 24px; padding: 0; border: 0; border-radius: 4px;
|
|
94
|
+
display: none; place-items: center; background: var(--fd-surface); color: var(--fd-text); font: 700 14px/1 system-ui, sans-serif; cursor: pointer;
|
|
95
|
+
}
|
|
96
|
+
.fd-cal-event:hover > .fd-cal-event-menu, .fd-cal-event:focus-within > .fd-cal-event-menu, .fd-cal-event:focus > .fd-cal-event-menu { display: grid; }
|
|
97
|
+
@media (hover: none) { .fd-cal-event-menu { display: grid; } }
|
|
98
|
+
|
|
99
|
+
/* The month: whole weeks, each day its records, and how many more. */
|
|
100
|
+
.fd-cal-month { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); }
|
|
101
|
+
.fd-cal-weekday { padding: 6px 4px; border-bottom: 1px solid var(--fd-border); font-size: 12px; color: var(--fd-muted); text-align: center; }
|
|
102
|
+
.fd-cal-weekday + .fd-cal-weekday, .fd-cal-day:not(:nth-child(7n + 1)) { border-inline-start: 1px solid var(--fd-border); }
|
|
103
|
+
.fd-cal-day { box-sizing: border-box; min-width: 0; min-height: 104px; padding: 3px; display: grid; align-content: start; gap: 2px; border-bottom: 1px solid var(--fd-border); }
|
|
104
|
+
.fd-cal-day[data-out] { background: color-mix(in srgb, var(--fd-text) 3%, var(--fd-surface)); }
|
|
105
|
+
.fd-cal-daynum { justify-self: start; min-width: 26px; height: 26px; padding: 0 6px; border: 0; border-radius: 999px; background: none; color: var(--fd-text); font: inherit; font-size: 12.5px; cursor: pointer; }
|
|
106
|
+
.fd-cal-day[data-out] .fd-cal-daynum { color: var(--fd-muted); }
|
|
107
|
+
.fd-cal-day[aria-current="date"] .fd-cal-daynum { background: var(--fd-accent); color: var(--fd-accent-text); font-weight: 600; }
|
|
108
|
+
.fd-cal-more { justify-self: start; min-height: 24px; padding: 0 6px; border: 0; background: none; color: var(--fd-accent); font: inherit; font-size: 12px; cursor: pointer; }
|
|
109
|
+
/* A crowded slot's "+N more", in the last lane over the records it holds. */
|
|
110
|
+
.fd-cal-col > .fd-cal-more {
|
|
111
|
+
position: absolute; z-index: 1; box-sizing: border-box; display: block; padding: 3px 2px; line-height: 14px; text-align: center; overflow: hidden;
|
|
112
|
+
border-radius: 4px; border: 1px dashed color-mix(in srgb, var(--fd-accent) 55%, transparent); background: var(--fd-accent-soft); font-weight: 600;
|
|
113
|
+
}
|
|
114
|
+
.fd-cal-col > .fd-cal-more:hover { background: color-mix(in srgb, var(--fd-accent) 22%, var(--fd-surface)); }
|
|
115
|
+
.fd-cal-day > .fd-cal-event .fd-cal-event-who { display: none; }
|
|
116
|
+
|
|
117
|
+
/* The agenda: each day that has something, its records in order. */
|
|
118
|
+
.fd-cal-agenda-day { display: grid; grid-template-columns: minmax(8em, 11em) minmax(0, 1fr); border-bottom: 1px solid var(--fd-border); }
|
|
119
|
+
.fd-cal-agenda-day:last-child { border-bottom: 0; }
|
|
120
|
+
.fd-cal-agenda-head { margin: 0; padding: 10px 12px; font-size: 13px; font-weight: 600; }
|
|
121
|
+
.fd-cal-agenda-day[aria-current="date"] .fd-cal-agenda-head { color: var(--fd-accent); }
|
|
122
|
+
.fd-cal-agenda-list { list-style: none; margin: 0; padding: 6px 8px; display: grid; gap: 4px; min-width: 0; }
|
|
123
|
+
.fd-cal-agenda-list .fd-cal-event { position: relative; padding: 0; font-size: 13.5px; }
|
|
124
|
+
.fd-cal-event-open { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 2px 12px; padding-block: 8px; padding-inline: 10px 48px; border-radius: inherit; }
|
|
125
|
+
.fd-cal-event[data-opens] .fd-cal-event-open { cursor: pointer; }
|
|
126
|
+
.fd-cal-event-open:focus { outline: none; }
|
|
127
|
+
.fd-cal-event-open:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; }
|
|
128
|
+
.fd-cal-agenda-list .fd-cal-event-who { grid-column: 2; }
|
|
129
|
+
.fd-cal-agenda-list .fd-cal-event-menu { display: grid; top: 50%; transform: translateY(-50%); inset-inline-end: 6px; width: 36px; height: 36px; }
|
|
130
|
+
.fd-cal-agenda-list .fd-cal-event-menu:focus-visible { outline: 2px solid var(--fd-focus); outline-offset: 1px; }
|
|
131
|
+
@container fd-cal (max-width: 520px) {
|
|
132
|
+
.fd-cal-agenda-day { grid-template-columns: minmax(0, 1fr); }
|
|
133
|
+
.fd-cal-agenda-head { padding-bottom: 0; }
|
|
134
|
+
.fd-cal-title { flex-basis: 100%; order: -1; }
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* "Move to…": its day, its time, its person; and a crowded slot's list, in the same kind of box. */
|
|
138
|
+
.fd-cal-move, .fd-cal-crowd {
|
|
139
|
+
position: absolute; z-index: 30; box-sizing: border-box; width: min(320px, calc(100% - 16px)); padding: 14px; display: grid; gap: 10px;
|
|
140
|
+
background: var(--fd-surface); color: var(--fd-text); border: 1px solid var(--fd-border); border-radius: max(var(--fd-radius), 6px); box-shadow: 0 12px 32px rgba(0, 0, 0, 0.24);
|
|
141
|
+
}
|
|
142
|
+
.fd-cal-move-title { margin: 0; font-size: 14px; font-weight: 600; }
|
|
143
|
+
.fd-cal-move label { display: grid; gap: 4px; font-size: 13px; }
|
|
144
|
+
.fd-cal-move-actions { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; }
|
|
145
|
+
.fd-cal-move-problem { margin: 0; color: var(--fd-error); font-size: 13px; }
|
|
146
|
+
.fd-cal-move-problem:empty { display: none; }
|
|
147
|
+
.fd-cal-move .fd-input[aria-invalid="true"] { border-color: var(--fd-error); }
|
|
148
|
+
.fd-cal-crowd { padding: 10px; gap: 6px; }
|
|
149
|
+
.fd-cal-crowd-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding-inline-start: 4px; }
|
|
150
|
+
.fd-cal-crowd .fd-cal-agenda-list { padding: 0; max-height: min(60vh, 360px); overflow-y: auto; }
|
|
151
|
+
`;
|
|
152
|
+
/** The calendar's stylesheet, once per document, before the page's own so an app's rule wins. */
|
|
153
|
+
export function installCalendarStyles(doc) {
|
|
154
|
+
if (doc.getElementById('fieldia-calendar-styles'))
|
|
155
|
+
return;
|
|
156
|
+
const style = doc.createElement('style');
|
|
157
|
+
style.id = 'fieldia-calendar-styles';
|
|
158
|
+
style.textContent = CALENDAR_CSS;
|
|
159
|
+
doc.head.prepend(style);
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=styles.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.mjs","sourceRoot":"","sources":["../../../../../libs/calendar/src/lib/styles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgJ3B,CAAC;AAEF,iGAAiG;AACjG,MAAM,UAAU,qBAAqB,CAAC,GAAa;IACjD,IAAI,GAAG,CAAC,cAAc,CAAC,yBAAyB,CAAC;QAAE,OAAO;IAC1D,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,GAAG,yBAAyB,CAAC;IACrC,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC;IACjC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC"}
|