@innosolutions/inno-calendar 1.0.72 → 2.0.1
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/CHANGELOG.md +116 -0
- package/LICENSE +48 -48
- package/README.md +333 -305
- package/dist/components/event/event-card.d.ts +4 -28
- package/dist/components/event/event-card.d.ts.map +1 -1
- package/dist/components/header/calendar-header.d.ts +14 -3
- package/dist/components/header/calendar-header.d.ts.map +1 -1
- package/dist/components/index.cjs +1 -1
- package/dist/components/index.d.ts +7 -6
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.mjs +48 -57
- package/dist/components/index.mjs.map +1 -1
- package/dist/components/inno-calendar.d.ts +139 -72
- package/dist/components/inno-calendar.d.ts.map +1 -1
- package/dist/components/primitives/field-layer.d.ts +22 -0
- package/dist/components/primitives/field-layer.d.ts.map +1 -0
- package/dist/components/primitives/index.d.ts +3 -0
- package/dist/components/primitives/index.d.ts.map +1 -1
- package/dist/components/primitives/multi-day-banner.d.ts.map +1 -1
- package/dist/components/primitives/quick-create.d.ts +44 -0
- package/dist/components/primitives/quick-create.d.ts.map +1 -0
- package/dist/components/primitives/recurrence-field.d.ts +102 -0
- package/dist/components/primitives/recurrence-field.d.ts.map +1 -0
- package/dist/components/primitives/week-all-day-row.d.ts.map +1 -1
- package/dist/components/primitives/when-row.d.ts +41 -0
- package/dist/components/primitives/when-row.d.ts.map +1 -0
- package/dist/components/shell/calendar-settings.d.ts +28 -0
- package/dist/components/shell/calendar-settings.d.ts.map +1 -0
- package/dist/components/shell/calendar-sidebar.d.ts +27 -0
- package/dist/components/shell/calendar-sidebar.d.ts.map +1 -0
- package/dist/components/shell/filter-panel.d.ts +10 -0
- package/dist/components/shell/filter-panel.d.ts.map +1 -0
- package/dist/components/shell/index.d.ts +5 -0
- package/dist/components/shell/index.d.ts.map +1 -0
- package/dist/components/shell/mini-month.d.ts +16 -0
- package/dist/components/shell/mini-month.d.ts.map +1 -0
- package/dist/components/ui/index.d.ts +0 -2
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/views/agenda-view.d.ts +14 -15
- package/dist/components/views/agenda-view.d.ts.map +1 -1
- package/dist/components/views/day-events-expansion.d.ts +1 -1
- package/dist/components/views/day-events-expansion.d.ts.map +1 -1
- package/dist/components/views/day-view.d.ts +2 -6
- package/dist/components/views/day-view.d.ts.map +1 -1
- package/dist/components/views/index.d.ts +2 -1
- package/dist/components/views/index.d.ts.map +1 -1
- package/dist/components/views/month-view.d.ts +2 -12
- package/dist/components/views/month-view.d.ts.map +1 -1
- package/dist/components/views/resource-columns-view.d.ts +23 -0
- package/dist/components/views/resource-columns-view.d.ts.map +1 -0
- package/dist/components/views/timeline-view.d.ts +2 -6
- package/dist/components/views/timeline-view.d.ts.map +1 -1
- package/dist/components/views/week-view.d.ts +10 -6
- package/dist/components/views/week-view.d.ts.map +1 -1
- package/dist/components/views/year-view.d.ts +2 -6
- package/dist/components/views/year-view.d.ts.map +1 -1
- package/dist/core/constants.d.ts +39 -1
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/context/drag-drop-context.d.ts +15 -1
- package/dist/core/context/drag-drop-context.d.ts.map +1 -1
- package/dist/core/context/event-card-context.d.ts +16 -0
- package/dist/core/context/event-card-context.d.ts.map +1 -0
- package/dist/core/context/inno-calendar-provider.d.ts +10 -1
- package/dist/core/context/inno-calendar-provider.d.ts.map +1 -1
- package/dist/core/context/slot-selection-context.d.ts +16 -0
- package/dist/core/context/slot-selection-context.d.ts.map +1 -1
- package/dist/core/index.cjs +1 -1
- package/dist/core/index.d.ts +3 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.mjs +155 -149
- package/dist/core/index.mjs.map +1 -1
- package/dist/core/types.d.ts +44 -514
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/utils/date-input.d.ts +8 -0
- package/dist/core/utils/date-input.d.ts.map +1 -0
- package/dist/core/utils/grid-utils.d.ts.map +1 -1
- package/dist/core/utils/index.d.ts +1 -0
- package/dist/core/utils/index.d.ts.map +1 -1
- package/dist/core/utils/time-format.d.ts +33 -0
- package/dist/core/utils/time-format.d.ts.map +1 -0
- package/dist/core/utils/view-storage.d.ts +2 -2
- package/dist/core/utils/view-storage.d.ts.map +1 -1
- package/dist/core/z-layers.d.ts +21 -0
- package/dist/core/z-layers.d.ts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +228 -234
- package/dist/index.mjs.map +1 -1
- package/dist/inno-calendar-DFEaWcSi.cjs +11 -0
- package/dist/inno-calendar-DFEaWcSi.cjs.map +1 -0
- package/dist/inno-calendar-R7LPGSJU.js +7454 -0
- package/dist/inno-calendar-R7LPGSJU.js.map +1 -0
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.mjs +1 -1
- package/dist/position-utils-BH6T1FL5.js +1125 -0
- package/dist/position-utils-BH6T1FL5.js.map +1 -0
- package/dist/position-utils-BVt-Bp93.cjs +2 -0
- package/dist/position-utils-BVt-Bp93.cjs.map +1 -0
- package/dist/styles/index.css +1 -1
- package/dist/use-slot-selection-CSsSyfAi.cjs +2 -0
- package/dist/use-slot-selection-CSsSyfAi.cjs.map +1 -0
- package/dist/use-slot-selection-CT1z9v9X.js +357 -0
- package/dist/use-slot-selection-CT1z9v9X.js.map +1 -0
- package/dist/utils-B6yFEsav.js +9 -0
- package/dist/utils-B6yFEsav.js.map +1 -0
- package/dist/utils-IjLH3w2e.cjs +2 -0
- package/dist/utils-IjLH3w2e.cjs.map +1 -0
- package/dist/utils.cjs +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.mjs +108 -104
- package/dist/z-layers-CpHPAMdp.js +637 -0
- package/dist/z-layers-CpHPAMdp.js.map +1 -0
- package/dist/z-layers-D1DivrJg.cjs +2 -0
- package/dist/z-layers-D1DivrJg.cjs.map +1 -0
- package/package.json +117 -138
- package/AGENT.md +0 -1783
- package/dist/agenda-widget-B0t3TCcV.js +0 -4141
- package/dist/agenda-widget-B0t3TCcV.js.map +0 -1
- package/dist/agenda-widget-i2tjGr5U.cjs +0 -2
- package/dist/agenda-widget-i2tjGr5U.cjs.map +0 -1
- package/dist/components/calendar.d.ts +0 -45
- package/dist/components/calendar.d.ts.map +0 -1
- package/dist/components/event/event-page-transition.d.ts +0 -32
- package/dist/components/event/event-page-transition.d.ts.map +0 -1
- package/dist/components/filters/calendar-filter-sidebar.d.ts +0 -54
- package/dist/components/filters/calendar-filter-sidebar.d.ts.map +0 -1
- package/dist/components/filters/index.d.ts +0 -9
- package/dist/components/filters/index.d.ts.map +0 -1
- package/dist/components/filters/schedule-type-filter.d.ts +0 -31
- package/dist/components/filters/schedule-type-filter.d.ts.map +0 -1
- package/dist/components/filters/user-filter.d.ts +0 -31
- package/dist/components/filters/user-filter.d.ts.map +0 -1
- package/dist/components/header/components/index.d.ts +0 -8
- package/dist/components/header/components/index.d.ts.map +0 -1
- package/dist/components/integrated-calendar.d.ts +0 -37
- package/dist/components/integrated-calendar.d.ts.map +0 -1
- package/dist/components/settings/badge-variant-setting.d.ts +0 -25
- package/dist/components/settings/badge-variant-setting.d.ts.map +0 -1
- package/dist/components/settings/index.d.ts +0 -10
- package/dist/components/settings/index.d.ts.map +0 -1
- package/dist/components/settings/slot-duration-setting.d.ts +0 -20
- package/dist/components/settings/slot-duration-setting.d.ts.map +0 -1
- package/dist/components/settings/visible-hours-setting.d.ts +0 -23
- package/dist/components/settings/visible-hours-setting.d.ts.map +0 -1
- package/dist/components/settings/working-hours-setting.d.ts +0 -41
- package/dist/components/settings/working-hours-setting.d.ts.map +0 -1
- package/dist/components/ui/dialog.d.ts +0 -35
- package/dist/components/ui/dialog.d.ts.map +0 -1
- package/dist/components/ui/select.d.ts +0 -12
- package/dist/components/ui/select.d.ts.map +0 -1
- package/dist/components/widget/agenda-dropdown.d.ts +0 -20
- package/dist/components/widget/agenda-dropdown.d.ts.map +0 -1
- package/dist/components/widget/agenda-widget.d.ts +0 -27
- package/dist/components/widget/agenda-widget.d.ts.map +0 -1
- package/dist/components/widget/index.d.ts +0 -6
- package/dist/components/widget/index.d.ts.map +0 -1
- package/dist/index-D2U2F80P.cjs +0 -2
- package/dist/index-D2U2F80P.cjs.map +0 -1
- package/dist/index-DtaLkIY8.js +0 -2777
- package/dist/index-DtaLkIY8.js.map +0 -1
- package/dist/position-utils-D_KpwRus.js +0 -1053
- package/dist/position-utils-D_KpwRus.js.map +0 -1
- package/dist/position-utils-ksZ_IjXC.cjs +0 -2
- package/dist/position-utils-ksZ_IjXC.cjs.map +0 -1
- package/dist/presets/default/default-calendar.d.ts +0 -44
- package/dist/presets/default/default-calendar.d.ts.map +0 -1
- package/dist/presets/default/index.d.ts +0 -2
- package/dist/presets/default/index.d.ts.map +0 -1
- package/dist/presets/index.cjs +0 -2
- package/dist/presets/index.cjs.map +0 -1
- package/dist/presets/index.d.ts +0 -3
- package/dist/presets/index.d.ts.map +0 -1
- package/dist/presets/index.mjs +0 -6
- package/dist/presets/index.mjs.map +0 -1
- package/dist/presets/tailwind/index.d.ts +0 -2
- package/dist/presets/tailwind/index.d.ts.map +0 -1
- package/dist/presets/tailwind/tailwind-calendar.d.ts +0 -122
- package/dist/presets/tailwind/tailwind-calendar.d.ts.map +0 -1
- package/dist/slot-selection-context-CLYZU6ul.cjs +0 -2
- package/dist/slot-selection-context-CLYZU6ul.cjs.map +0 -1
- package/dist/slot-selection-context-Ct5cVcKW.js +0 -611
- package/dist/slot-selection-context-Ct5cVcKW.js.map +0 -1
- package/dist/tailwind-calendar-BbUb61uY.cjs +0 -2
- package/dist/tailwind-calendar-BbUb61uY.cjs.map +0 -1
- package/dist/tailwind-calendar-DrwGVSF-.js +0 -400
- package/dist/tailwind-calendar-DrwGVSF-.js.map +0 -1
- package/dist/use-calendar-BK0nQYJq.cjs +0 -2
- package/dist/use-calendar-BK0nQYJq.cjs.map +0 -1
- package/dist/use-calendar-DJI35SSd.js +0 -175
- package/dist/use-calendar-DJI35SSd.js.map +0 -1
- package/dist/use-slot-selection-CCE11R4j.cjs +0 -2
- package/dist/use-slot-selection-CCE11R4j.cjs.map +0 -1
- package/dist/use-slot-selection-CX1w8EdM.js +0 -188
- package/dist/use-slot-selection-CX1w8EdM.js.map +0 -1
- package/dist/week-view-BXmaRChB.cjs +0 -11
- package/dist/week-view-BXmaRChB.cjs.map +0 -1
- package/dist/week-view-BeasFcyR.js +0 -3520
- package/dist/week-view-BeasFcyR.js.map +0 -1
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
import { useContext as R, createContext as Z, useState as E, useMemo as x, useCallback as s, useEffect as $, useRef as ee } from "react";
|
|
2
|
+
import { d as b, an as te, ao as ne, T as re, V as se, U as oe, W as ae, X as ce, b5 as ie, aO as ue, aP as le, aQ as fe, c as de, bf as M, q as N } from "./position-utils-BH6T1FL5.js";
|
|
3
|
+
import { jsx as ge } from "react/jsx-runtime";
|
|
4
|
+
const k = Z(void 0);
|
|
5
|
+
function Se({ children: t, value: r }) {
|
|
6
|
+
return /* @__PURE__ */ ge(k.Provider, { value: r, children: t });
|
|
7
|
+
}
|
|
8
|
+
function P() {
|
|
9
|
+
const t = R(k);
|
|
10
|
+
if (!t)
|
|
11
|
+
throw new Error("useCalendarContext must be used within a CalendarProvider");
|
|
12
|
+
return t;
|
|
13
|
+
}
|
|
14
|
+
function He() {
|
|
15
|
+
return R(k);
|
|
16
|
+
}
|
|
17
|
+
function ve() {
|
|
18
|
+
const { view: t, setView: r } = P();
|
|
19
|
+
return { view: t, setView: r };
|
|
20
|
+
}
|
|
21
|
+
function ye() {
|
|
22
|
+
const { currentDate: t, setCurrentDate: r, goToNext: c, goToPrev: u, goToToday: i, goToDate: f } = P();
|
|
23
|
+
return { currentDate: t, setCurrentDate: r, goToNext: c, goToPrev: u, goToToday: i, goToDate: f };
|
|
24
|
+
}
|
|
25
|
+
function me() {
|
|
26
|
+
const { events: t, filteredEvents: r } = P();
|
|
27
|
+
return { events: t, filteredEvents: r };
|
|
28
|
+
}
|
|
29
|
+
function we() {
|
|
30
|
+
const { filters: t, setFilters: r, updateFilters: c, clearFilters: u } = P();
|
|
31
|
+
return { filters: t, setFilters: r, updateFilters: c, clearFilters: u };
|
|
32
|
+
}
|
|
33
|
+
function Te() {
|
|
34
|
+
const { preferences: t, setPreferences: r } = P();
|
|
35
|
+
return { preferences: t, setPreferences: r };
|
|
36
|
+
}
|
|
37
|
+
function pe(t) {
|
|
38
|
+
const {
|
|
39
|
+
events: r,
|
|
40
|
+
resources: c = [],
|
|
41
|
+
scheduleTypes: u = [],
|
|
42
|
+
initialView: i = "week",
|
|
43
|
+
initialDate: f,
|
|
44
|
+
initialFilters: S = {},
|
|
45
|
+
preferences: H = {},
|
|
46
|
+
lockedPreferences: e = {},
|
|
47
|
+
locale: o = "en-US",
|
|
48
|
+
onViewChange: v,
|
|
49
|
+
onDateChange: w,
|
|
50
|
+
onEventClick: Y,
|
|
51
|
+
onSlotSelect: I,
|
|
52
|
+
onFiltersChange: y
|
|
53
|
+
} = t, [d, D] = E(i), [a, g] = E(() => f ?? /* @__PURE__ */ new Date()), [l, h] = E(S), [m, W] = E(() => ({
|
|
54
|
+
...b,
|
|
55
|
+
...H,
|
|
56
|
+
...e
|
|
57
|
+
})), F = x(
|
|
58
|
+
() => te(a, d, m.firstDayOfWeek),
|
|
59
|
+
[a, d, m.firstDayOfWeek]
|
|
60
|
+
), U = x(
|
|
61
|
+
() => ne(a, d, o),
|
|
62
|
+
[a, d, o]
|
|
63
|
+
), B = x(() => {
|
|
64
|
+
let n = [...r];
|
|
65
|
+
n = re(n, F.startDate, F.endDate);
|
|
66
|
+
const T = l.scheduleTypeIds;
|
|
67
|
+
T && T.length > 0 && (n = se(n, T));
|
|
68
|
+
const p = l.resourceIds;
|
|
69
|
+
p && p.length > 0 && (n = oe(n, p));
|
|
70
|
+
const V = l.search;
|
|
71
|
+
return V && (n = ae(n, V)), m.showCanceledEvents || (n = ce(n)), ie(n);
|
|
72
|
+
}, [r, F, l, m.showCanceledEvents]), _ = s(
|
|
73
|
+
(n) => {
|
|
74
|
+
D(n), v?.(n);
|
|
75
|
+
},
|
|
76
|
+
[v]
|
|
77
|
+
), C = s(
|
|
78
|
+
(n) => {
|
|
79
|
+
g(n), w?.(n);
|
|
80
|
+
},
|
|
81
|
+
[w]
|
|
82
|
+
), L = s(() => {
|
|
83
|
+
const n = ue(a, d);
|
|
84
|
+
C(n);
|
|
85
|
+
}, [a, d, C]), j = s(() => {
|
|
86
|
+
const n = le(a, d);
|
|
87
|
+
C(n);
|
|
88
|
+
}, [a, d, C]), A = s(() => {
|
|
89
|
+
C(fe());
|
|
90
|
+
}, [C]), J = s(
|
|
91
|
+
(n) => {
|
|
92
|
+
C(n);
|
|
93
|
+
},
|
|
94
|
+
[C]
|
|
95
|
+
), q = s(
|
|
96
|
+
(n) => {
|
|
97
|
+
h(n), y?.(n);
|
|
98
|
+
},
|
|
99
|
+
[y]
|
|
100
|
+
), G = s(
|
|
101
|
+
(n) => {
|
|
102
|
+
h((T) => {
|
|
103
|
+
const p = { ...T, ...n };
|
|
104
|
+
return y?.(p), p;
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
[y]
|
|
108
|
+
), K = s(() => {
|
|
109
|
+
const n = {};
|
|
110
|
+
h(n), y?.(n);
|
|
111
|
+
}, [y]), Q = s(
|
|
112
|
+
(n) => {
|
|
113
|
+
W((T) => ({
|
|
114
|
+
...T,
|
|
115
|
+
...n,
|
|
116
|
+
...e
|
|
117
|
+
// Locked prefs always override
|
|
118
|
+
}));
|
|
119
|
+
},
|
|
120
|
+
[e]
|
|
121
|
+
), X = s(
|
|
122
|
+
(n) => {
|
|
123
|
+
Y?.(n);
|
|
124
|
+
},
|
|
125
|
+
[Y]
|
|
126
|
+
), z = s(
|
|
127
|
+
(n) => {
|
|
128
|
+
I?.(n);
|
|
129
|
+
},
|
|
130
|
+
[I]
|
|
131
|
+
);
|
|
132
|
+
return {
|
|
133
|
+
// State
|
|
134
|
+
view: d,
|
|
135
|
+
currentDate: a,
|
|
136
|
+
dateRange: F,
|
|
137
|
+
filters: l,
|
|
138
|
+
preferences: m,
|
|
139
|
+
// Computed
|
|
140
|
+
filteredEvents: B,
|
|
141
|
+
viewTitle: U,
|
|
142
|
+
// Data
|
|
143
|
+
events: r,
|
|
144
|
+
resources: c,
|
|
145
|
+
scheduleTypes: u,
|
|
146
|
+
// Actions
|
|
147
|
+
setView: _,
|
|
148
|
+
setCurrentDate: C,
|
|
149
|
+
goToNext: L,
|
|
150
|
+
goToPrev: j,
|
|
151
|
+
goToToday: A,
|
|
152
|
+
goToDate: J,
|
|
153
|
+
// Filters
|
|
154
|
+
setFilters: q,
|
|
155
|
+
updateFilters: G,
|
|
156
|
+
clearFilters: K,
|
|
157
|
+
// Preferences
|
|
158
|
+
setPreferences: Q,
|
|
159
|
+
// Event handlers
|
|
160
|
+
handleEventClick: X,
|
|
161
|
+
handleSlotSelect: z
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function Ee() {
|
|
165
|
+
const { preferences: t, setPreferences: r } = P(), c = x(
|
|
166
|
+
() => ({
|
|
167
|
+
from: t.startHour,
|
|
168
|
+
to: t.endHour
|
|
169
|
+
}),
|
|
170
|
+
[t.startHour, t.endHour]
|
|
171
|
+
), u = x(
|
|
172
|
+
() => ({
|
|
173
|
+
// Default: Mon-Fri same hours
|
|
174
|
+
1: { from: t.startHour, to: t.endHour },
|
|
175
|
+
2: { from: t.startHour, to: t.endHour },
|
|
176
|
+
3: { from: t.startHour, to: t.endHour },
|
|
177
|
+
4: { from: t.startHour, to: t.endHour },
|
|
178
|
+
5: { from: t.startHour, to: t.endHour }
|
|
179
|
+
}),
|
|
180
|
+
[t.startHour, t.endHour]
|
|
181
|
+
), i = s(
|
|
182
|
+
(e) => {
|
|
183
|
+
r({
|
|
184
|
+
startHour: e.from,
|
|
185
|
+
endHour: e.to
|
|
186
|
+
});
|
|
187
|
+
},
|
|
188
|
+
[r]
|
|
189
|
+
), f = s(
|
|
190
|
+
(e) => {
|
|
191
|
+
const o = Object.values(e)[0];
|
|
192
|
+
o && r({
|
|
193
|
+
startHour: o.from,
|
|
194
|
+
endHour: o.to
|
|
195
|
+
});
|
|
196
|
+
},
|
|
197
|
+
[r]
|
|
198
|
+
), S = s(
|
|
199
|
+
(e) => {
|
|
200
|
+
r({ slotDuration: e });
|
|
201
|
+
},
|
|
202
|
+
[r]
|
|
203
|
+
), H = s((e) => {
|
|
204
|
+
console.warn("showWorkingHoursOnly is not yet supported in core preferences");
|
|
205
|
+
}, []);
|
|
206
|
+
return {
|
|
207
|
+
visibleHours: c,
|
|
208
|
+
setVisibleHours: i,
|
|
209
|
+
workingHours: u,
|
|
210
|
+
setWorkingHours: f,
|
|
211
|
+
slotDuration: t.slotDuration,
|
|
212
|
+
setSlotDuration: S,
|
|
213
|
+
showWorkingHoursOnly: !1,
|
|
214
|
+
// Default until added to core preferences
|
|
215
|
+
setShowWorkingHoursOnly: H
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function Pe(t = {}) {
|
|
219
|
+
const { initial: r = {}, storageKey: c, onChange: u } = t, [i, f] = E(() => {
|
|
220
|
+
if (c && typeof window < "u")
|
|
221
|
+
try {
|
|
222
|
+
const o = localStorage.getItem(c);
|
|
223
|
+
if (o) {
|
|
224
|
+
const v = JSON.parse(o);
|
|
225
|
+
return { ...b, ...v, ...r };
|
|
226
|
+
}
|
|
227
|
+
} catch {
|
|
228
|
+
}
|
|
229
|
+
return { ...b, ...r };
|
|
230
|
+
});
|
|
231
|
+
$(() => {
|
|
232
|
+
if (c && typeof window < "u")
|
|
233
|
+
try {
|
|
234
|
+
localStorage.setItem(c, JSON.stringify(i));
|
|
235
|
+
} catch {
|
|
236
|
+
}
|
|
237
|
+
}, [i, c]);
|
|
238
|
+
const S = s(
|
|
239
|
+
(o) => {
|
|
240
|
+
f((v) => {
|
|
241
|
+
const w = { ...v, ...o };
|
|
242
|
+
return u?.(w), w;
|
|
243
|
+
});
|
|
244
|
+
},
|
|
245
|
+
[u]
|
|
246
|
+
), H = s(() => {
|
|
247
|
+
const o = { ...b, ...r };
|
|
248
|
+
f(o), u?.(o);
|
|
249
|
+
}, [r, u]), e = s(
|
|
250
|
+
(o) => i[o],
|
|
251
|
+
[i]
|
|
252
|
+
);
|
|
253
|
+
return {
|
|
254
|
+
preferences: i,
|
|
255
|
+
setPreferences: S,
|
|
256
|
+
resetPreferences: H,
|
|
257
|
+
getPreference: e
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
const O = {
|
|
261
|
+
isSelecting: !1,
|
|
262
|
+
startDate: null,
|
|
263
|
+
endDate: null,
|
|
264
|
+
startY: null,
|
|
265
|
+
currentY: null,
|
|
266
|
+
resourceId: void 0
|
|
267
|
+
};
|
|
268
|
+
function xe(t) {
|
|
269
|
+
const {
|
|
270
|
+
dayStart: r,
|
|
271
|
+
visibleHours: c,
|
|
272
|
+
hourHeight: u = de,
|
|
273
|
+
slotDuration: i = 30,
|
|
274
|
+
resourceId: f,
|
|
275
|
+
enabled: S = !0,
|
|
276
|
+
onSelect: H
|
|
277
|
+
} = t, [e, o] = E(O), v = ee(0), w = s(
|
|
278
|
+
(D, a) => {
|
|
279
|
+
if (!S) return;
|
|
280
|
+
const g = D.clientY - a.top;
|
|
281
|
+
v.current = a.height;
|
|
282
|
+
const l = M(g, r, c, u, i);
|
|
283
|
+
o({
|
|
284
|
+
isSelecting: !0,
|
|
285
|
+
startDate: l,
|
|
286
|
+
endDate: N(l, i),
|
|
287
|
+
startY: g,
|
|
288
|
+
currentY: g,
|
|
289
|
+
resourceId: f
|
|
290
|
+
});
|
|
291
|
+
},
|
|
292
|
+
[S, r, c, u, i, f]
|
|
293
|
+
), Y = s(
|
|
294
|
+
(D, a) => {
|
|
295
|
+
if (!e.isSelecting || !e.startY) return;
|
|
296
|
+
const g = Math.max(0, Math.min(D.clientY - a.top, a.height)), l = M(g, r, c, u, i);
|
|
297
|
+
o((h) => {
|
|
298
|
+
if (!h.startDate) return h;
|
|
299
|
+
const m = g >= (h.startY ?? 0);
|
|
300
|
+
return {
|
|
301
|
+
...h,
|
|
302
|
+
currentY: g,
|
|
303
|
+
endDate: m ? N(l, i) : l,
|
|
304
|
+
startDate: m ? h.startDate : l
|
|
305
|
+
};
|
|
306
|
+
});
|
|
307
|
+
},
|
|
308
|
+
[e.isSelecting, e.startY, r, c, u, i]
|
|
309
|
+
), I = s(() => {
|
|
310
|
+
if (!e.isSelecting || !e.startDate || !e.endDate) {
|
|
311
|
+
o(O);
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
const D = e.startDate < e.endDate ? e.startDate : e.endDate, a = e.startDate < e.endDate ? e.endDate : e.startDate, g = {
|
|
315
|
+
startDate: D,
|
|
316
|
+
endDate: a,
|
|
317
|
+
resourceId: e.resourceId
|
|
318
|
+
};
|
|
319
|
+
H?.(g), o(O);
|
|
320
|
+
}, [e, H]), y = s(() => {
|
|
321
|
+
o(O);
|
|
322
|
+
}, []), d = (() => {
|
|
323
|
+
if (!e.isSelecting || e.startY === null || e.currentY === null)
|
|
324
|
+
return { top: 0, height: 0, visible: !1 };
|
|
325
|
+
const D = Math.min(e.startY, e.currentY), a = Math.max(e.startY, e.currentY);
|
|
326
|
+
return {
|
|
327
|
+
top: D,
|
|
328
|
+
height: Math.max(a - D, 20),
|
|
329
|
+
// Minimum height
|
|
330
|
+
visible: !0
|
|
331
|
+
};
|
|
332
|
+
})();
|
|
333
|
+
return {
|
|
334
|
+
selection: e,
|
|
335
|
+
overlay: d,
|
|
336
|
+
handlePointerDown: w,
|
|
337
|
+
handlePointerMove: Y,
|
|
338
|
+
handlePointerUp: I,
|
|
339
|
+
cancel: y,
|
|
340
|
+
isSelecting: e.isSelecting
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
export {
|
|
344
|
+
Se as C,
|
|
345
|
+
P as a,
|
|
346
|
+
ye as b,
|
|
347
|
+
me as c,
|
|
348
|
+
we as d,
|
|
349
|
+
Te as e,
|
|
350
|
+
Ee as f,
|
|
351
|
+
ve as g,
|
|
352
|
+
He as h,
|
|
353
|
+
Pe as i,
|
|
354
|
+
xe as j,
|
|
355
|
+
pe as u
|
|
356
|
+
};
|
|
357
|
+
//# sourceMappingURL=use-slot-selection-CT1z9v9X.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-slot-selection-CT1z9v9X.js","sources":["../src/core/context/calendar-context.tsx","../src/core/hooks/use-calendar.ts","../src/core/hooks/use-calendar-time-config.ts","../src/core/hooks/use-preferences.ts","../src/core/hooks/use-slot-selection.ts"],"sourcesContent":["/**\n * CalendarContext - React Context for Calendar State\n *\n * Provides calendar state to deeply nested components without prop drilling.\n */\n\nimport { createContext, type ReactNode, useContext } from 'react';\nimport type { UseCalendarReturn } from '../hooks/use-calendar';\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\n/**\n * Calendar context type - generic to support any event data type\n * We use `any` here because context consumers may not know the exact type\n * Use the typed hooks below for type-safe access\n */\n// biome-ignore lint/suspicious/noExplicitAny: Context needs to be flexible for different event types\nconst CalendarContext = createContext<UseCalendarReturn<any, any, any> | undefined>(undefined);\n\n// ============================================================================\n// PROVIDER\n// ============================================================================\n\nexport interface CalendarProviderProps<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n> {\n\tchildren: ReactNode;\n\tvalue: UseCalendarReturn<TEventData, TScheduleTypeData, TResourceData>;\n}\n\nexport function CalendarProvider<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>({ children, value }: CalendarProviderProps<TEventData, TScheduleTypeData, TResourceData>) {\n\treturn <CalendarContext.Provider value={value}>{children}</CalendarContext.Provider>;\n}\n\n// ============================================================================\n// HOOKS\n// ============================================================================\n\n/**\n * Get the full calendar context (throws if not in provider)\n */\nexport function useCalendarContext<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>(): UseCalendarReturn<TEventData, TScheduleTypeData, TResourceData> {\n\tconst context = useContext(CalendarContext);\n\tif (!context) {\n\t\tthrow new Error('useCalendarContext must be used within a CalendarProvider');\n\t}\n\treturn context as UseCalendarReturn<TEventData, TScheduleTypeData, TResourceData>;\n}\n\n/**\n * Get the calendar context or undefined (safe version)\n */\nexport function useOptionalCalendarContext<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>(): UseCalendarReturn<TEventData, TScheduleTypeData, TResourceData> | undefined {\n\tconst context = useContext(CalendarContext);\n\treturn context as UseCalendarReturn<TEventData, TScheduleTypeData, TResourceData> | undefined;\n}\n\n// ============================================================================\n// CONVENIENCE HOOKS\n// ============================================================================\n\n/**\n * Get current view\n */\nexport function useCalendarView() {\n\tconst { view, setView } = useCalendarContext();\n\treturn { view, setView };\n}\n\n/**\n * Get current date and navigation\n */\nexport function useCalendarDate() {\n\tconst { currentDate, setCurrentDate, goToNext, goToPrev, goToToday, goToDate } =\n\t\tuseCalendarContext();\n\treturn { currentDate, setCurrentDate, goToNext, goToPrev, goToToday, goToDate };\n}\n\n/**\n * Get filtered events\n */\nexport function useCalendarEvents<TEventData = Record<string, unknown>>() {\n\tconst { events, filteredEvents } = useCalendarContext<TEventData>();\n\treturn { events, filteredEvents };\n}\n\n/**\n * Get filters\n */\nexport function useCalendarFilters() {\n\tconst { filters, setFilters, updateFilters, clearFilters } = useCalendarContext();\n\treturn { filters, setFilters, updateFilters, clearFilters };\n}\n\n/**\n * Get preferences\n */\nexport function useCalendarPreferences() {\n\tconst { preferences, setPreferences } = useCalendarContext();\n\treturn { preferences, setPreferences };\n}\n\n// ============================================================================\n// ALIASES (for agenda-v2 naming convention compatibility)\n// ============================================================================\n\n/**\n * Alias for useCalendarContext - matches agenda-v2 naming convention\n */\nexport { useCalendarContext as useCalendar };\n\n/**\n * Alias for useOptionalCalendarContext - matches agenda-v2 naming convention\n */\nexport { useOptionalCalendarContext as useOptionalCalendar };\n","/**\n * useCalendar - Main Calendar Hook\n *\n * This hook provides all the state and methods needed to build a calendar.\n * It is fully generic, allowing consumers to define their own event data types.\n *\n * @example\n * ```tsx\n * interface MyEventData {\n * projectId: number;\n * priority: 'low' | 'medium' | 'high';\n * }\n *\n * const calendar = useCalendar<MyEventData>({\n * events: myEvents,\n * onEventClick: (event) => {\n * console.log(event.data?.projectId);\n * },\n * });\n * ```\n */\n\nimport { useCallback, useMemo, useState } from 'react';\nimport { DEFAULT_PREFERENCES } from '../constants';\nimport type {\n\tCalendarEvent,\n\tICalendarFilters,\n\tICalendarPreferences,\n\tIDateRange,\n\tIResource,\n\tIScheduleType,\n\tISelectionResult,\n\tTCalendarView,\n} from '../types';\nimport {\n\tfilterEventsByDateRange,\n\tfilterEventsByResource,\n\tfilterEventsByScheduleType,\n\tfilterEventsBySearch,\n\tfilterOutCanceled,\n\tsortEventsByStart,\n} from '../utils/event-utils';\nimport {\n\tgetViewDateRange,\n\tgetViewTitle,\n\tnavigateNext,\n\tnavigatePrev,\n\tnavigateToday,\n} from '../utils/grid-utils';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/**\n * Options for useCalendar hook\n */\nexport interface UseCalendarOptions<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n> {\n\t/** Events to display */\n\tevents: CalendarEvent<TEventData>[];\n\n\t/** Available resources (for resource views) */\n\tresources?: IResource<TResourceData>[] | undefined;\n\n\t/** Available schedule types */\n\tscheduleTypes?: IScheduleType<TScheduleTypeData>[] | undefined;\n\n\t/** Initial view */\n\tinitialView?: TCalendarView | undefined;\n\n\t/** Initial date */\n\tinitialDate?: Date | undefined;\n\n\t/** Initial filters */\n\tinitialFilters?: ICalendarFilters | undefined;\n\n\t/** User preferences */\n\tpreferences?: Partial<ICalendarPreferences> | undefined;\n\n\t/** Locked preferences (cannot be changed by user) */\n\tlockedPreferences?: Partial<ICalendarPreferences> | undefined;\n\n\t/** Locale for formatting */\n\tlocale?: string | undefined;\n\n\t/** Callback when view changes */\n\tonViewChange?: ((view: TCalendarView) => void) | undefined;\n\n\t/** Callback when date changes */\n\tonDateChange?: ((date: Date) => void) | undefined;\n\n\t/** Callback when event is clicked */\n\tonEventClick?: ((event: CalendarEvent<TEventData>) => void) | undefined;\n\n\t/** Callback when slot is selected */\n\tonSlotSelect?: ((selection: ISelectionResult) => void) | undefined;\n\n\t/** Callback when filters change */\n\tonFiltersChange?: ((filters: ICalendarFilters) => void) | undefined;\n}\n\n/**\n * Return type for useCalendar hook\n */\nexport interface UseCalendarReturn<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n> {\n\t// State\n\tview: TCalendarView;\n\tcurrentDate: Date;\n\tdateRange: IDateRange;\n\tfilters: ICalendarFilters;\n\tpreferences: ICalendarPreferences;\n\n\t// Computed\n\tfilteredEvents: CalendarEvent<TEventData>[];\n\tviewTitle: string;\n\n\t// Data\n\tevents: CalendarEvent<TEventData>[];\n\tresources: IResource<TResourceData>[];\n\tscheduleTypes: IScheduleType<TScheduleTypeData>[];\n\n\t// Actions\n\tsetView: (view: TCalendarView) => void;\n\tsetCurrentDate: (date: Date) => void;\n\tgoToNext: () => void;\n\tgoToPrev: () => void;\n\tgoToToday: () => void;\n\tgoToDate: (date: Date) => void;\n\n\t// Filters\n\tsetFilters: (filters: ICalendarFilters) => void;\n\tupdateFilters: (updates: Partial<ICalendarFilters>) => void;\n\tclearFilters: () => void;\n\n\t// Preferences\n\tsetPreferences: (prefs: Partial<ICalendarPreferences>) => void;\n\n\t// Event handlers\n\thandleEventClick: (event: CalendarEvent<TEventData>) => void;\n\thandleSlotSelect: (selection: ISelectionResult) => void;\n}\n\n// ============================================================================\n// HOOK\n// ============================================================================\n\nexport function useCalendar<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>(\n\toptions: UseCalendarOptions<TEventData, TScheduleTypeData, TResourceData>\n): UseCalendarReturn<TEventData, TScheduleTypeData, TResourceData> {\n\tconst {\n\t\tevents,\n\t\tresources = [],\n\t\tscheduleTypes = [],\n\t\tinitialView = 'week',\n\t\tinitialDate,\n\t\tinitialFilters = {},\n\t\tpreferences: userPreferences = {},\n\t\tlockedPreferences = {},\n\t\tlocale = 'en-US',\n\t\tonViewChange,\n\t\tonDateChange,\n\t\tonEventClick,\n\t\tonSlotSelect,\n\t\tonFiltersChange,\n\t} = options;\n\n\t// ========================================================================\n\t// STATE\n\t// ========================================================================\n\n\tconst [view, setViewState] = useState<TCalendarView>(initialView);\n\tconst [currentDate, setCurrentDateState] = useState<Date>(() => initialDate ?? new Date());\n\tconst [filters, setFiltersState] = useState<ICalendarFilters>(initialFilters);\n\tconst [preferences, setPreferencesState] = useState<ICalendarPreferences>(() => ({\n\t\t...DEFAULT_PREFERENCES,\n\t\t...userPreferences,\n\t\t...lockedPreferences,\n\t}));\n\n\t// ========================================================================\n\t// COMPUTED\n\t// ========================================================================\n\n\tconst dateRange = useMemo(\n\t\t() => getViewDateRange(currentDate, view, preferences.firstDayOfWeek),\n\t\t[currentDate, view, preferences.firstDayOfWeek]\n\t);\n\n\tconst viewTitle = useMemo(\n\t\t() => getViewTitle(currentDate, view, locale),\n\t\t[currentDate, view, locale]\n\t);\n\n\tconst filteredEvents = useMemo(() => {\n\t\tlet result = [...events];\n\n\t\t// Filter by date range\n\t\tresult = filterEventsByDateRange(result, dateRange.startDate, dateRange.endDate);\n\n\t\t// Filter by schedule types\n\t\tconst scheduleTypeIds = filters.scheduleTypeIds;\n\t\tif (scheduleTypeIds && scheduleTypeIds.length > 0) {\n\t\t\tresult = filterEventsByScheduleType(result, scheduleTypeIds);\n\t\t}\n\n\t\t// Filter by resources\n\t\tconst resourceIds = filters.resourceIds;\n\t\tif (resourceIds && resourceIds.length > 0) {\n\t\t\tresult = filterEventsByResource(result, resourceIds);\n\t\t}\n\n\t\t// Filter by search\n\t\tconst search = filters.search;\n\t\tif (search) {\n\t\t\tresult = filterEventsBySearch(result, search);\n\t\t}\n\n\t\t// Filter canceled\n\t\tif (!preferences.showCanceledEvents) {\n\t\t\tresult = filterOutCanceled(result);\n\t\t}\n\n\t\t// Sort by start date\n\t\treturn sortEventsByStart(result);\n\t}, [events, dateRange, filters, preferences.showCanceledEvents]);\n\n\t// ========================================================================\n\t// ACTIONS\n\t// ========================================================================\n\n\tconst setView = useCallback(\n\t\t(newView: TCalendarView) => {\n\t\t\tsetViewState(newView);\n\t\t\tonViewChange?.(newView);\n\t\t},\n\t\t[onViewChange]\n\t);\n\n\tconst setCurrentDate = useCallback(\n\t\t(date: Date) => {\n\t\t\tsetCurrentDateState(date);\n\t\t\tonDateChange?.(date);\n\t\t},\n\t\t[onDateChange]\n\t);\n\n\tconst goToNext = useCallback(() => {\n\t\tconst newDate = navigateNext(currentDate, view);\n\t\tsetCurrentDate(newDate);\n\t}, [currentDate, view, setCurrentDate]);\n\n\tconst goToPrev = useCallback(() => {\n\t\tconst newDate = navigatePrev(currentDate, view);\n\t\tsetCurrentDate(newDate);\n\t}, [currentDate, view, setCurrentDate]);\n\n\tconst goToToday = useCallback(() => {\n\t\tsetCurrentDate(navigateToday());\n\t}, [setCurrentDate]);\n\n\tconst goToDate = useCallback(\n\t\t(date: Date) => {\n\t\t\tsetCurrentDate(date);\n\t\t},\n\t\t[setCurrentDate]\n\t);\n\n\t// ========================================================================\n\t// FILTERS\n\t// ========================================================================\n\n\tconst setFilters = useCallback(\n\t\t(newFilters: ICalendarFilters) => {\n\t\t\tsetFiltersState(newFilters);\n\t\t\tonFiltersChange?.(newFilters);\n\t\t},\n\t\t[onFiltersChange]\n\t);\n\n\tconst updateFilters = useCallback(\n\t\t(updates: Partial<ICalendarFilters>) => {\n\t\t\tsetFiltersState((prev) => {\n\t\t\t\tconst next = { ...prev, ...updates };\n\t\t\t\tonFiltersChange?.(next);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[onFiltersChange]\n\t);\n\n\tconst clearFilters = useCallback(() => {\n\t\tconst emptyFilters: ICalendarFilters = {};\n\t\tsetFiltersState(emptyFilters);\n\t\tonFiltersChange?.(emptyFilters);\n\t}, [onFiltersChange]);\n\n\t// ========================================================================\n\t// PREFERENCES\n\t// ========================================================================\n\n\tconst setPreferences = useCallback(\n\t\t(prefs: Partial<ICalendarPreferences>) => {\n\t\t\tsetPreferencesState((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\t...prefs,\n\t\t\t\t...lockedPreferences, // Locked prefs always override\n\t\t\t}));\n\t\t},\n\t\t[lockedPreferences]\n\t);\n\n\t// ========================================================================\n\t// EVENT HANDLERS\n\t// ========================================================================\n\n\tconst handleEventClick = useCallback(\n\t\t(event: CalendarEvent<TEventData>) => {\n\t\t\tonEventClick?.(event);\n\t\t},\n\t\t[onEventClick]\n\t);\n\n\tconst handleSlotSelect = useCallback(\n\t\t(selection: ISelectionResult) => {\n\t\t\tonSlotSelect?.(selection);\n\t\t},\n\t\t[onSlotSelect]\n\t);\n\n\t// ========================================================================\n\t// RETURN\n\t// ========================================================================\n\n\treturn {\n\t\t// State\n\t\tview,\n\t\tcurrentDate,\n\t\tdateRange,\n\t\tfilters,\n\t\tpreferences,\n\n\t\t// Computed\n\t\tfilteredEvents,\n\t\tviewTitle,\n\n\t\t// Data\n\t\tevents,\n\t\tresources,\n\t\tscheduleTypes,\n\n\t\t// Actions\n\t\tsetView,\n\t\tsetCurrentDate,\n\t\tgoToNext,\n\t\tgoToPrev,\n\t\tgoToToday,\n\t\tgoToDate,\n\n\t\t// Filters\n\t\tsetFilters,\n\t\tupdateFilters,\n\t\tclearFilters,\n\n\t\t// Preferences\n\t\tsetPreferences,\n\n\t\t// Event handlers\n\t\thandleEventClick,\n\t\thandleSlotSelect,\n\t};\n}\n","/**\n * useCalendarTimeConfig - Time Configuration Hook\n *\n * Convenience hook that provides access to time-related preferences\n * from the calendar context. Matches agenda-v2 naming conventions.\n *\n * @example\n * ```tsx\n * function TimeSettings() {\n * const {\n * visibleHours,\n * setVisibleHours,\n * workingHours,\n * setWorkingHours,\n * slotDuration,\n * setSlotDuration,\n * showWorkingHoursOnly,\n * setShowWorkingHoursOnly,\n * } = useCalendarTimeConfig();\n *\n * return (\n * <div>\n * <p>Visible: {visibleHours.from}:00 - {visibleHours.to}:00</p>\n * <p>Slot duration: {slotDuration} minutes</p>\n * </div>\n * );\n * }\n * ```\n */\n\nimport { useCallback, useMemo } from 'react';\nimport { useCalendarContext } from '../context/calendar-context';\nimport type { IVisibleHoursConfig, TWorkingHoursConfig } from '../preferences/types';\nimport type { TSlotDuration } from '../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface UseCalendarTimeConfigReturn {\n\t/** Current visible hours range */\n\tvisibleHours: IVisibleHoursConfig;\n\t/** Update visible hours */\n\tsetVisibleHours: (hours: IVisibleHoursConfig) => void;\n\t/** Current working hours configuration */\n\tworkingHours: TWorkingHoursConfig;\n\t/** Update working hours */\n\tsetWorkingHours: (hours: TWorkingHoursConfig) => void;\n\t/** Current slot duration in minutes */\n\tslotDuration: TSlotDuration;\n\t/** Update slot duration */\n\tsetSlotDuration: (duration: TSlotDuration) => void;\n\t/** Whether to show only working hours */\n\tshowWorkingHoursOnly: boolean;\n\t/** Toggle show working hours only */\n\tsetShowWorkingHoursOnly: (show: boolean) => void;\n}\n\n// ============================================================================\n// HOOK\n// ============================================================================\n\n/**\n * Get time configuration from calendar context\n *\n * Provides a focused subset of calendar preferences related to time display.\n * All setters will update the underlying preferences in the calendar context.\n *\n * Note: This hook maps the core preferences (startHour/endHour) to the\n * agenda-v2 naming convention (visibleHours.from/to, workingHours).\n */\nexport function useCalendarTimeConfig(): UseCalendarTimeConfigReturn {\n\tconst { preferences, setPreferences } = useCalendarContext();\n\n\t// Map core preferences to visible hours format\n\tconst visibleHours = useMemo<IVisibleHoursConfig>(\n\t\t() => ({\n\t\t\tfrom: preferences.startHour,\n\t\t\tto: preferences.endHour,\n\t\t}),\n\t\t[preferences.startHour, preferences.endHour]\n\t);\n\n\t// Default working hours based on visible hours (can be extended later)\n\tconst workingHours = useMemo<TWorkingHoursConfig>(\n\t\t() => ({\n\t\t\t// Default: Mon-Fri same hours\n\t\t\t1: { from: preferences.startHour, to: preferences.endHour },\n\t\t\t2: { from: preferences.startHour, to: preferences.endHour },\n\t\t\t3: { from: preferences.startHour, to: preferences.endHour },\n\t\t\t4: { from: preferences.startHour, to: preferences.endHour },\n\t\t\t5: { from: preferences.startHour, to: preferences.endHour },\n\t\t}),\n\t\t[preferences.startHour, preferences.endHour]\n\t);\n\n\tconst setVisibleHours = useCallback(\n\t\t(hours: IVisibleHoursConfig) => {\n\t\t\tsetPreferences({\n\t\t\t\tstartHour: hours.from,\n\t\t\t\tendHour: hours.to,\n\t\t\t});\n\t\t},\n\t\t[setPreferences]\n\t);\n\n\tconst setWorkingHours = useCallback(\n\t\t(_hours: TWorkingHoursConfig) => {\n\t\t\t// Working hours per-day config would need to be added to core preferences\n\t\t\t// For now, we use the first available day's hours to set visible hours\n\t\t\tconst firstDay = Object.values(_hours)[0];\n\t\t\tif (firstDay) {\n\t\t\t\tsetPreferences({\n\t\t\t\t\tstartHour: firstDay.from,\n\t\t\t\t\tendHour: firstDay.to,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[setPreferences]\n\t);\n\n\tconst setSlotDuration = useCallback(\n\t\t(duration: TSlotDuration) => {\n\t\t\tsetPreferences({ slotDuration: duration });\n\t\t},\n\t\t[setPreferences]\n\t);\n\n\tconst setShowWorkingHoursOnly = useCallback((_show: boolean) => {\n\t\t// This would need to be added to ICalendarPreferences\n\t\t// For now, this is a no-op but provides the API surface\n\t\tconsole.warn('showWorkingHoursOnly is not yet supported in core preferences');\n\t}, []);\n\n\treturn {\n\t\tvisibleHours,\n\t\tsetVisibleHours,\n\t\tworkingHours,\n\t\tsetWorkingHours,\n\t\tslotDuration: preferences.slotDuration as TSlotDuration,\n\t\tsetSlotDuration,\n\t\tshowWorkingHoursOnly: false, // Default until added to core preferences\n\t\tsetShowWorkingHoursOnly,\n\t};\n}\n","/**\n * usePreferences - Calendar Preferences Hook\n *\n * Manages user preferences with optional localStorage persistence.\n */\n\nimport { useCallback, useEffect, useState } from 'react';\nimport { DEFAULT_PREFERENCES } from '../constants';\nimport type { ICalendarPreferences } from '../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface UsePreferencesOptions {\n\t/** Initial preferences (overrides defaults) */\n\tinitial?: Partial<ICalendarPreferences>;\n\t/** Storage key for persistence (if provided, uses localStorage) */\n\tstorageKey?: string;\n\t/** Callback when preferences change */\n\tonChange?: (preferences: ICalendarPreferences) => void;\n}\n\nexport interface UsePreferencesReturn {\n\t/** Current preferences */\n\tpreferences: ICalendarPreferences;\n\t/** Update preferences */\n\tsetPreferences: (updates: Partial<ICalendarPreferences>) => void;\n\t/** Reset to defaults */\n\tresetPreferences: () => void;\n\t/** Get a specific preference */\n\tgetPreference: <K extends keyof ICalendarPreferences>(key: K) => ICalendarPreferences[K];\n}\n\n// ============================================================================\n// HOOK\n// ============================================================================\n\nexport function usePreferences(options: UsePreferencesOptions = {}): UsePreferencesReturn {\n\tconst { initial = {}, storageKey, onChange } = options;\n\n\t// Load from storage or use defaults\n\tconst [preferences, setPreferencesState] = useState<ICalendarPreferences>(() => {\n\t\tif (storageKey && typeof window !== 'undefined') {\n\t\t\ttry {\n\t\t\t\tconst stored = localStorage.getItem(storageKey);\n\t\t\t\tif (stored) {\n\t\t\t\t\tconst parsed = JSON.parse(stored) as Partial<ICalendarPreferences>;\n\t\t\t\t\treturn { ...DEFAULT_PREFERENCES, ...parsed, ...initial };\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Ignore parsing errors\n\t\t\t}\n\t\t}\n\t\treturn { ...DEFAULT_PREFERENCES, ...initial };\n\t});\n\n\t// Persist to storage when preferences change\n\tuseEffect(() => {\n\t\tif (storageKey && typeof window !== 'undefined') {\n\t\t\ttry {\n\t\t\t\tlocalStorage.setItem(storageKey, JSON.stringify(preferences));\n\t\t\t} catch {\n\t\t\t\t// Ignore storage errors\n\t\t\t}\n\t\t}\n\t}, [preferences, storageKey]);\n\n\tconst setPreferences = useCallback(\n\t\t(updates: Partial<ICalendarPreferences>) => {\n\t\t\tsetPreferencesState((prev) => {\n\t\t\t\tconst next = { ...prev, ...updates };\n\t\t\t\tonChange?.(next);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[onChange]\n\t);\n\n\tconst resetPreferences = useCallback(() => {\n\t\tconst defaults = { ...DEFAULT_PREFERENCES, ...initial };\n\t\tsetPreferencesState(defaults);\n\t\tonChange?.(defaults);\n\t}, [initial, onChange]);\n\n\tconst getPreference = useCallback(\n\t\t<K extends keyof ICalendarPreferences>(key: K): ICalendarPreferences[K] => {\n\t\t\treturn preferences[key];\n\t\t},\n\t\t[preferences]\n\t);\n\n\treturn {\n\t\tpreferences,\n\t\tsetPreferences,\n\t\tresetPreferences,\n\t\tgetPreference,\n\t};\n}\n","/**\n * useSlotSelection - Drag-to-Select Hook\n *\n * Handles mouse/touch interactions for creating events by\n * selecting time slots in the calendar grid.\n */\n\nimport { useCallback, useRef, useState } from 'react';\nimport { DEFAULT_HOUR_HEIGHT } from '../constants';\nimport type { ISelectionResult, ISlotSelection, IVisibleHours } from '../types';\nimport { addMinutes } from '../utils/date-utils';\nimport { yToTime } from '../utils/position-utils';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface UseSlotSelectionOptions {\n\t/** Current day being selected on */\n\tdayStart: Date;\n\t/** Visible hours configuration */\n\tvisibleHours: IVisibleHours;\n\t/** Height of one hour in pixels */\n\thourHeight?: number;\n\t/** Slot duration in minutes for snapping */\n\tslotDuration?: number;\n\t/** Resource ID (for resource views) */\n\tresourceId?: string;\n\t/** Whether selection is enabled */\n\tenabled?: boolean;\n\t/** Callback when selection completes */\n\tonSelect?: (selection: ISelectionResult) => void;\n}\n\nexport interface UseSlotSelectionReturn {\n\t/** Current selection state */\n\tselection: ISlotSelection;\n\t/** Selection overlay for rendering */\n\toverlay: { top: number; height: number; visible: boolean };\n\t/** Handler for mouse/touch down */\n\thandlePointerDown: (e: React.PointerEvent, containerRect: DOMRect) => void;\n\t/** Handler for mouse/touch move */\n\thandlePointerMove: (e: React.PointerEvent, containerRect: DOMRect) => void;\n\t/** Handler for mouse/touch up */\n\thandlePointerUp: () => void;\n\t/** Cancel current selection */\n\tcancel: () => void;\n\t/** Whether currently selecting */\n\tisSelecting: boolean;\n}\n\n// ============================================================================\n// INITIAL STATE\n// ============================================================================\n\nconst INITIAL_SELECTION: ISlotSelection = {\n\tisSelecting: false,\n\tstartDate: null,\n\tendDate: null,\n\tstartY: null,\n\tcurrentY: null,\n\tresourceId: undefined,\n};\n\n// ============================================================================\n// HOOK\n// ============================================================================\n\nexport function useSlotSelection(options: UseSlotSelectionOptions): UseSlotSelectionReturn {\n\tconst {\n\t\tdayStart,\n\t\tvisibleHours,\n\t\thourHeight = DEFAULT_HOUR_HEIGHT,\n\t\tslotDuration = 30,\n\t\tresourceId,\n\t\tenabled = true,\n\t\tonSelect,\n\t} = options;\n\n\tconst [selection, setSelection] = useState<ISlotSelection>(INITIAL_SELECTION);\n\tconst containerHeightRef = useRef<number>(0);\n\n\t// ========================================================================\n\t// HANDLERS\n\t// ========================================================================\n\n\tconst handlePointerDown = useCallback(\n\t\t(e: React.PointerEvent, containerRect: DOMRect) => {\n\t\t\tif (!enabled) return;\n\n\t\t\tconst y = e.clientY - containerRect.top;\n\t\t\tcontainerHeightRef.current = containerRect.height;\n\n\t\t\tconst startTime = yToTime(y, dayStart, visibleHours, hourHeight, slotDuration);\n\n\t\t\tsetSelection({\n\t\t\t\tisSelecting: true,\n\t\t\t\tstartDate: startTime,\n\t\t\t\tendDate: addMinutes(startTime, slotDuration),\n\t\t\t\tstartY: y,\n\t\t\t\tcurrentY: y,\n\t\t\t\tresourceId,\n\t\t\t});\n\t\t},\n\t\t[enabled, dayStart, visibleHours, hourHeight, slotDuration, resourceId]\n\t);\n\n\tconst handlePointerMove = useCallback(\n\t\t(e: React.PointerEvent, containerRect: DOMRect) => {\n\t\t\tif (!selection.isSelecting || !selection.startY) return;\n\n\t\t\tconst y = Math.max(0, Math.min(e.clientY - containerRect.top, containerRect.height));\n\t\t\tconst currentTime = yToTime(y, dayStart, visibleHours, hourHeight, slotDuration);\n\n\t\t\tsetSelection((prev) => {\n\t\t\t\tif (!prev.startDate) return prev;\n\n\t\t\t\t// Determine if dragging up or down\n\t\t\t\tconst isDraggingDown = y >= (prev.startY ?? 0);\n\n\t\t\t\treturn {\n\t\t\t\t\t...prev,\n\t\t\t\t\tcurrentY: y,\n\t\t\t\t\tendDate: isDraggingDown ? addMinutes(currentTime, slotDuration) : currentTime,\n\t\t\t\t\tstartDate: isDraggingDown ? prev.startDate : currentTime,\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\t[selection.isSelecting, selection.startY, dayStart, visibleHours, hourHeight, slotDuration]\n\t);\n\n\tconst handlePointerUp = useCallback(() => {\n\t\tif (!selection.isSelecting || !selection.startDate || !selection.endDate) {\n\t\t\tsetSelection(INITIAL_SELECTION);\n\t\t\treturn;\n\t\t}\n\n\t\t// Ensure start is before end\n\t\tconst start = selection.startDate < selection.endDate ? selection.startDate : selection.endDate;\n\t\tconst end = selection.startDate < selection.endDate ? selection.endDate : selection.startDate;\n\n\t\tconst result: ISelectionResult = {\n\t\t\tstartDate: start,\n\t\t\tendDate: end,\n\t\t\tresourceId: selection.resourceId,\n\t\t};\n\n\t\tonSelect?.(result);\n\t\tsetSelection(INITIAL_SELECTION);\n\t}, [selection, onSelect]);\n\n\tconst cancel = useCallback(() => {\n\t\tsetSelection(INITIAL_SELECTION);\n\t}, []);\n\n\t// ========================================================================\n\t// OVERLAY CALCULATION\n\t// ========================================================================\n\n\tconst overlay = (() => {\n\t\tif (!selection.isSelecting || selection.startY === null || selection.currentY === null) {\n\t\t\treturn { top: 0, height: 0, visible: false };\n\t\t}\n\n\t\tconst minY = Math.min(selection.startY, selection.currentY);\n\t\tconst maxY = Math.max(selection.startY, selection.currentY);\n\n\t\treturn {\n\t\t\ttop: minY,\n\t\t\theight: Math.max(maxY - minY, 20), // Minimum height\n\t\t\tvisible: true,\n\t\t};\n\t})();\n\n\t// ========================================================================\n\t// RETURN\n\t// ========================================================================\n\n\treturn {\n\t\tselection,\n\t\toverlay,\n\t\thandlePointerDown,\n\t\thandlePointerMove,\n\t\thandlePointerUp,\n\t\tcancel,\n\t\tisSelecting: selection.isSelecting,\n\t};\n}\n"],"names":["CalendarContext","createContext","CalendarProvider","children","value","jsx","useCalendarContext","context","useContext","useOptionalCalendarContext","useCalendarView","view","setView","useCalendarDate","currentDate","setCurrentDate","goToNext","goToPrev","goToToday","goToDate","useCalendarEvents","events","filteredEvents","useCalendarFilters","filters","setFilters","updateFilters","clearFilters","useCalendarPreferences","preferences","setPreferences","useCalendar","options","resources","scheduleTypes","initialView","initialDate","initialFilters","userPreferences","lockedPreferences","locale","onViewChange","onDateChange","onEventClick","onSlotSelect","onFiltersChange","setViewState","useState","setCurrentDateState","setFiltersState","setPreferencesState","DEFAULT_PREFERENCES","dateRange","useMemo","getViewDateRange","viewTitle","getViewTitle","result","filterEventsByDateRange","scheduleTypeIds","filterEventsByScheduleType","resourceIds","filterEventsByResource","search","filterEventsBySearch","filterOutCanceled","sortEventsByStart","useCallback","newView","date","newDate","navigateNext","navigatePrev","navigateToday","newFilters","updates","prev","next","emptyFilters","prefs","handleEventClick","event","handleSlotSelect","selection","useCalendarTimeConfig","visibleHours","workingHours","setVisibleHours","hours","setWorkingHours","_hours","firstDay","setSlotDuration","duration","setShowWorkingHoursOnly","_show","usePreferences","initial","storageKey","onChange","stored","parsed","useEffect","resetPreferences","defaults","getPreference","key","INITIAL_SELECTION","useSlotSelection","dayStart","hourHeight","DEFAULT_HOUR_HEIGHT","slotDuration","resourceId","enabled","onSelect","setSelection","containerHeightRef","useRef","handlePointerDown","e","containerRect","y","startTime","yToTime","addMinutes","handlePointerMove","currentTime","isDraggingDown","handlePointerUp","start","end","cancel","overlay","minY","maxY"],"mappings":";;;AAmBA,MAAMA,IAAkBC,EAA4D,MAAS;AAetF,SAASC,GAId,EAAE,UAAAC,GAAU,OAAAC,KAA8E;AAC3F,SAAO,gBAAAC,GAACL,EAAgB,UAAhB,EAAyB,OAAAI,GAAe,UAAAD,EAAA,CAAS;AAC1D;AASO,SAASG,IAIqD;AACpE,QAAMC,IAAUC,EAAWR,CAAe;AAC1C,MAAI,CAACO;AACJ,UAAM,IAAI,MAAM,2DAA2D;AAE5E,SAAOA;AACR;AAKO,SAASE,KAIiE;AAEhF,SADgBD,EAAWR,CAAe;AAE3C;AASO,SAASU,KAAkB;AACjC,QAAM,EAAE,MAAAC,GAAM,SAAAC,EAAA,IAAYN,EAAA;AAC1B,SAAO,EAAE,MAAAK,GAAM,SAAAC,EAAA;AAChB;AAKO,SAASC,KAAkB;AACjC,QAAM,EAAE,aAAAC,GAAa,gBAAAC,GAAgB,UAAAC,GAAU,UAAAC,GAAU,WAAAC,GAAW,UAAAC,EAAA,IACnEb,EAAA;AACD,SAAO,EAAE,aAAAQ,GAAa,gBAAAC,GAAgB,UAAAC,GAAU,UAAAC,GAAU,WAAAC,GAAW,UAAAC,EAAA;AACtE;AAKO,SAASC,KAA0D;AACzE,QAAM,EAAE,QAAAC,GAAQ,gBAAAC,EAAA,IAAmBhB,EAAA;AACnC,SAAO,EAAE,QAAAe,GAAQ,gBAAAC,EAAA;AAClB;AAKO,SAASC,KAAqB;AACpC,QAAM,EAAE,SAAAC,GAAS,YAAAC,GAAY,eAAAC,GAAe,cAAAC,EAAA,IAAiBrB,EAAA;AAC7D,SAAO,EAAE,SAAAkB,GAAS,YAAAC,GAAY,eAAAC,GAAe,cAAAC,EAAA;AAC9C;AAKO,SAASC,KAAyB;AACxC,QAAM,EAAE,aAAAC,GAAa,gBAAAC,EAAA,IAAmBxB,EAAA;AACxC,SAAO,EAAE,aAAAuB,GAAa,gBAAAC,EAAA;AACvB;ACsCO,SAASC,GAKfC,GACkE;AAClE,QAAM;AAAA,IACL,QAAAX;AAAA,IACA,WAAAY,IAAY,CAAA;AAAA,IACZ,eAAAC,IAAgB,CAAA;AAAA,IAChB,aAAAC,IAAc;AAAA,IACd,aAAAC;AAAA,IACA,gBAAAC,IAAiB,CAAA;AAAA,IACjB,aAAaC,IAAkB,CAAA;AAAA,IAC/B,mBAAAC,IAAoB,CAAA;AAAA,IACpB,QAAAC,IAAS;AAAA,IACT,cAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,EAAA,IACGb,GAME,CAACrB,GAAMmC,CAAY,IAAIC,EAAwBZ,CAAW,GAC1D,CAACrB,GAAakC,CAAmB,IAAID,EAAe,MAAMX,KAAe,oBAAI,MAAM,GACnF,CAACZ,GAASyB,CAAe,IAAIF,EAA2BV,CAAc,GACtE,CAACR,GAAaqB,CAAmB,IAAIH,EAA+B,OAAO;AAAA,IAChF,GAAGI;AAAA,IACH,GAAGb;AAAA,IACH,GAAGC;AAAA,EAAA,EACF,GAMIa,IAAYC;AAAA,IACjB,MAAMC,GAAiBxC,GAAaH,GAAMkB,EAAY,cAAc;AAAA,IACpE,CAACf,GAAaH,GAAMkB,EAAY,cAAc;AAAA,EAAA,GAGzC0B,IAAYF;AAAA,IACjB,MAAMG,GAAa1C,GAAaH,GAAM6B,CAAM;AAAA,IAC5C,CAAC1B,GAAaH,GAAM6B,CAAM;AAAA,EAAA,GAGrBlB,IAAiB+B,EAAQ,MAAM;AACpC,QAAII,IAAS,CAAC,GAAGpC,CAAM;AAGvB,IAAAoC,IAASC,GAAwBD,GAAQL,EAAU,WAAWA,EAAU,OAAO;AAG/E,UAAMO,IAAkBnC,EAAQ;AAChC,IAAImC,KAAmBA,EAAgB,SAAS,MAC/CF,IAASG,GAA2BH,GAAQE,CAAe;AAI5D,UAAME,IAAcrC,EAAQ;AAC5B,IAAIqC,KAAeA,EAAY,SAAS,MACvCJ,IAASK,GAAuBL,GAAQI,CAAW;AAIpD,UAAME,IAASvC,EAAQ;AACvB,WAAIuC,MACHN,IAASO,GAAqBP,GAAQM,CAAM,IAIxClC,EAAY,uBAChB4B,IAASQ,GAAkBR,CAAM,IAI3BS,GAAkBT,CAAM;AAAA,EAChC,GAAG,CAACpC,GAAQ+B,GAAW5B,GAASK,EAAY,kBAAkB,CAAC,GAMzDjB,IAAUuD;AAAA,IACf,CAACC,MAA2B;AAC3B,MAAAtB,EAAasB,CAAO,GACpB3B,IAAe2B,CAAO;AAAA,IACvB;AAAA,IACA,CAAC3B,CAAY;AAAA,EAAA,GAGR1B,IAAiBoD;AAAA,IACtB,CAACE,MAAe;AACf,MAAArB,EAAoBqB,CAAI,GACxB3B,IAAe2B,CAAI;AAAA,IACpB;AAAA,IACA,CAAC3B,CAAY;AAAA,EAAA,GAGR1B,IAAWmD,EAAY,MAAM;AAClC,UAAMG,IAAUC,GAAazD,GAAaH,CAAI;AAC9C,IAAAI,EAAeuD,CAAO;AAAA,EACvB,GAAG,CAACxD,GAAaH,GAAMI,CAAc,CAAC,GAEhCE,IAAWkD,EAAY,MAAM;AAClC,UAAMG,IAAUE,GAAa1D,GAAaH,CAAI;AAC9C,IAAAI,EAAeuD,CAAO;AAAA,EACvB,GAAG,CAACxD,GAAaH,GAAMI,CAAc,CAAC,GAEhCG,IAAYiD,EAAY,MAAM;AACnC,IAAApD,EAAe0D,IAAe;AAAA,EAC/B,GAAG,CAAC1D,CAAc,CAAC,GAEbI,IAAWgD;AAAA,IAChB,CAACE,MAAe;AACf,MAAAtD,EAAesD,CAAI;AAAA,IACpB;AAAA,IACA,CAACtD,CAAc;AAAA,EAAA,GAOVU,IAAa0C;AAAA,IAClB,CAACO,MAAiC;AACjC,MAAAzB,EAAgByB,CAAU,GAC1B7B,IAAkB6B,CAAU;AAAA,IAC7B;AAAA,IACA,CAAC7B,CAAe;AAAA,EAAA,GAGXnB,IAAgByC;AAAA,IACrB,CAACQ,MAAuC;AACvC,MAAA1B,EAAgB,CAAC2B,MAAS;AACzB,cAAMC,IAAO,EAAE,GAAGD,GAAM,GAAGD,EAAA;AAC3B,eAAA9B,IAAkBgC,CAAI,GACfA;AAAA,MACR,CAAC;AAAA,IACF;AAAA,IACA,CAAChC,CAAe;AAAA,EAAA,GAGXlB,IAAewC,EAAY,MAAM;AACtC,UAAMW,IAAiC,CAAA;AACvC,IAAA7B,EAAgB6B,CAAY,GAC5BjC,IAAkBiC,CAAY;AAAA,EAC/B,GAAG,CAACjC,CAAe,CAAC,GAMdf,IAAiBqC;AAAA,IACtB,CAACY,MAAyC;AACzC,MAAA7B,EAAoB,CAAC0B,OAAU;AAAA,QAC9B,GAAGA;AAAA,QACH,GAAGG;AAAA,QACH,GAAGxC;AAAA;AAAA,MAAA,EACF;AAAA,IACH;AAAA,IACA,CAACA,CAAiB;AAAA,EAAA,GAObyC,IAAmBb;AAAA,IACxB,CAACc,MAAqC;AACrC,MAAAtC,IAAesC,CAAK;AAAA,IACrB;AAAA,IACA,CAACtC,CAAY;AAAA,EAAA,GAGRuC,IAAmBf;AAAA,IACxB,CAACgB,MAAgC;AAChC,MAAAvC,IAAeuC,CAAS;AAAA,IACzB;AAAA,IACA,CAACvC,CAAY;AAAA,EAAA;AAOd,SAAO;AAAA;AAAA,IAEN,MAAAjC;AAAA,IACA,aAAAG;AAAA,IACA,WAAAsC;AAAA,IACA,SAAA5B;AAAA,IACA,aAAAK;AAAA;AAAA,IAGA,gBAAAP;AAAA,IACA,WAAAiC;AAAA;AAAA,IAGA,QAAAlC;AAAA,IACA,WAAAY;AAAA,IACA,eAAAC;AAAA;AAAA,IAGA,SAAAtB;AAAA,IACA,gBAAAG;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA;AAAA,IAGA,YAAAM;AAAA,IACA,eAAAC;AAAA,IACA,cAAAC;AAAA;AAAA,IAGA,gBAAAG;AAAA;AAAA,IAGA,kBAAAkD;AAAA,IACA,kBAAAE;AAAA,EAAA;AAEF;ACvTO,SAASE,KAAqD;AACpE,QAAM,EAAE,aAAAvD,GAAa,gBAAAC,EAAA,IAAmBxB,EAAA,GAGlC+E,IAAehC;AAAA,IACpB,OAAO;AAAA,MACN,MAAMxB,EAAY;AAAA,MAClB,IAAIA,EAAY;AAAA,IAAA;AAAA,IAEjB,CAACA,EAAY,WAAWA,EAAY,OAAO;AAAA,EAAA,GAItCyD,IAAejC;AAAA,IACpB,OAAO;AAAA;AAAA,MAEN,GAAG,EAAE,MAAMxB,EAAY,WAAW,IAAIA,EAAY,QAAA;AAAA,MAClD,GAAG,EAAE,MAAMA,EAAY,WAAW,IAAIA,EAAY,QAAA;AAAA,MAClD,GAAG,EAAE,MAAMA,EAAY,WAAW,IAAIA,EAAY,QAAA;AAAA,MAClD,GAAG,EAAE,MAAMA,EAAY,WAAW,IAAIA,EAAY,QAAA;AAAA,MAClD,GAAG,EAAE,MAAMA,EAAY,WAAW,IAAIA,EAAY,QAAA;AAAA,IAAQ;AAAA,IAE3D,CAACA,EAAY,WAAWA,EAAY,OAAO;AAAA,EAAA,GAGtC0D,IAAkBpB;AAAA,IACvB,CAACqB,MAA+B;AAC/B,MAAA1D,EAAe;AAAA,QACd,WAAW0D,EAAM;AAAA,QACjB,SAASA,EAAM;AAAA,MAAA,CACf;AAAA,IACF;AAAA,IACA,CAAC1D,CAAc;AAAA,EAAA,GAGV2D,IAAkBtB;AAAA,IACvB,CAACuB,MAAgC;AAGhC,YAAMC,IAAW,OAAO,OAAOD,CAAM,EAAE,CAAC;AACxC,MAAIC,KACH7D,EAAe;AAAA,QACd,WAAW6D,EAAS;AAAA,QACpB,SAASA,EAAS;AAAA,MAAA,CAClB;AAAA,IAEH;AAAA,IACA,CAAC7D,CAAc;AAAA,EAAA,GAGV8D,IAAkBzB;AAAA,IACvB,CAAC0B,MAA4B;AAC5B,MAAA/D,EAAe,EAAE,cAAc+D,GAAU;AAAA,IAC1C;AAAA,IACA,CAAC/D,CAAc;AAAA,EAAA,GAGVgE,IAA0B3B,EAAY,CAAC4B,MAAmB;AAG/D,YAAQ,KAAK,+DAA+D;AAAA,EAC7E,GAAG,CAAA,CAAE;AAEL,SAAO;AAAA,IACN,cAAAV;AAAA,IACA,iBAAAE;AAAA,IACA,cAAAD;AAAA,IACA,iBAAAG;AAAA,IACA,cAAc5D,EAAY;AAAA,IAC1B,iBAAA+D;AAAA,IACA,sBAAsB;AAAA;AAAA,IACtB,yBAAAE;AAAA,EAAA;AAEF;AC1GO,SAASE,GAAehE,IAAiC,IAA0B;AACzF,QAAM,EAAE,SAAAiE,IAAU,CAAA,GAAI,YAAAC,GAAY,UAAAC,MAAanE,GAGzC,CAACH,GAAaqB,CAAmB,IAAIH,EAA+B,MAAM;AAC/E,QAAImD,KAAc,OAAO,SAAW;AACnC,UAAI;AACH,cAAME,IAAS,aAAa,QAAQF,CAAU;AAC9C,YAAIE,GAAQ;AACX,gBAAMC,IAAS,KAAK,MAAMD,CAAM;AAChC,iBAAO,EAAE,GAAGjD,GAAqB,GAAGkD,GAAQ,GAAGJ,EAAA;AAAA,QAChD;AAAA,MACD,QAAQ;AAAA,MAER;AAED,WAAO,EAAE,GAAG9C,GAAqB,GAAG8C,EAAA;AAAA,EACrC,CAAC;AAGD,EAAAK,EAAU,MAAM;AACf,QAAIJ,KAAc,OAAO,SAAW;AACnC,UAAI;AACH,qBAAa,QAAQA,GAAY,KAAK,UAAUrE,CAAW,CAAC;AAAA,MAC7D,QAAQ;AAAA,MAER;AAAA,EAEF,GAAG,CAACA,GAAaqE,CAAU,CAAC;AAE5B,QAAMpE,IAAiBqC;AAAA,IACtB,CAACQ,MAA2C;AAC3C,MAAAzB,EAAoB,CAAC0B,MAAS;AAC7B,cAAMC,IAAO,EAAE,GAAGD,GAAM,GAAGD,EAAA;AAC3B,eAAAwB,IAAWtB,CAAI,GACRA;AAAA,MACR,CAAC;AAAA,IACF;AAAA,IACA,CAACsB,CAAQ;AAAA,EAAA,GAGJI,IAAmBpC,EAAY,MAAM;AAC1C,UAAMqC,IAAW,EAAE,GAAGrD,GAAqB,GAAG8C,EAAA;AAC9C,IAAA/C,EAAoBsD,CAAQ,GAC5BL,IAAWK,CAAQ;AAAA,EACpB,GAAG,CAACP,GAASE,CAAQ,CAAC,GAEhBM,IAAgBtC;AAAA,IACrB,CAAuCuC,MAC/B7E,EAAY6E,CAAG;AAAA,IAEvB,CAAC7E,CAAW;AAAA,EAAA;AAGb,SAAO;AAAA,IACN,aAAAA;AAAA,IACA,gBAAAC;AAAA,IACA,kBAAAyE;AAAA,IACA,eAAAE;AAAA,EAAA;AAEF;AC3CA,MAAME,IAAoC;AAAA,EACzC,aAAa;AAAA,EACb,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AACb;AAMO,SAASC,GAAiB5E,GAA0D;AAC1F,QAAM;AAAA,IACL,UAAA6E;AAAA,IACA,cAAAxB;AAAA,IACA,YAAAyB,IAAaC;AAAA,IACb,cAAAC,IAAe;AAAA,IACf,YAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,UAAAC;AAAA,EAAA,IACGnF,GAEE,CAACmD,GAAWiC,CAAY,IAAIrE,EAAyB4D,CAAiB,GACtEU,IAAqBC,GAAe,CAAC,GAMrCC,IAAoBpD;AAAA,IACzB,CAACqD,GAAuBC,MAA2B;AAClD,UAAI,CAACP,EAAS;AAEd,YAAMQ,IAAIF,EAAE,UAAUC,EAAc;AACpC,MAAAJ,EAAmB,UAAUI,EAAc;AAE3C,YAAME,IAAYC,EAAQF,GAAGb,GAAUxB,GAAcyB,GAAYE,CAAY;AAE7E,MAAAI,EAAa;AAAA,QACZ,aAAa;AAAA,QACb,WAAWO;AAAA,QACX,SAASE,EAAWF,GAAWX,CAAY;AAAA,QAC3C,QAAQU;AAAA,QACR,UAAUA;AAAA,QACV,YAAAT;AAAA,MAAA,CACA;AAAA,IACF;AAAA,IACA,CAACC,GAASL,GAAUxB,GAAcyB,GAAYE,GAAcC,CAAU;AAAA,EAAA,GAGjEa,IAAoB3D;AAAA,IACzB,CAACqD,GAAuBC,MAA2B;AAClD,UAAI,CAACtC,EAAU,eAAe,CAACA,EAAU,OAAQ;AAEjD,YAAMuC,IAAI,KAAK,IAAI,GAAG,KAAK,IAAIF,EAAE,UAAUC,EAAc,KAAKA,EAAc,MAAM,CAAC,GAC7EM,IAAcH,EAAQF,GAAGb,GAAUxB,GAAcyB,GAAYE,CAAY;AAE/E,MAAAI,EAAa,CAACxC,MAAS;AACtB,YAAI,CAACA,EAAK,UAAW,QAAOA;AAG5B,cAAMoD,IAAiBN,MAAM9C,EAAK,UAAU;AAE5C,eAAO;AAAA,UACN,GAAGA;AAAA,UACH,UAAU8C;AAAA,UACV,SAASM,IAAiBH,EAAWE,GAAaf,CAAY,IAAIe;AAAA,UAClE,WAAWC,IAAiBpD,EAAK,YAAYmD;AAAA,QAAA;AAAA,MAE/C,CAAC;AAAA,IACF;AAAA,IACA,CAAC5C,EAAU,aAAaA,EAAU,QAAQ0B,GAAUxB,GAAcyB,GAAYE,CAAY;AAAA,EAAA,GAGrFiB,IAAkB9D,EAAY,MAAM;AACzC,QAAI,CAACgB,EAAU,eAAe,CAACA,EAAU,aAAa,CAACA,EAAU,SAAS;AACzE,MAAAiC,EAAaT,CAAiB;AAC9B;AAAA,IACD;AAGA,UAAMuB,IAAQ/C,EAAU,YAAYA,EAAU,UAAUA,EAAU,YAAYA,EAAU,SAClFgD,IAAMhD,EAAU,YAAYA,EAAU,UAAUA,EAAU,UAAUA,EAAU,WAE9E1B,IAA2B;AAAA,MAChC,WAAWyE;AAAA,MACX,SAASC;AAAA,MACT,YAAYhD,EAAU;AAAA,IAAA;AAGvB,IAAAgC,IAAW1D,CAAM,GACjB2D,EAAaT,CAAiB;AAAA,EAC/B,GAAG,CAACxB,GAAWgC,CAAQ,CAAC,GAElBiB,IAASjE,EAAY,MAAM;AAChC,IAAAiD,EAAaT,CAAiB;AAAA,EAC/B,GAAG,CAAA,CAAE,GAMC0B,KAAW,MAAM;AACtB,QAAI,CAAClD,EAAU,eAAeA,EAAU,WAAW,QAAQA,EAAU,aAAa;AACjF,aAAO,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAA;AAGtC,UAAMmD,IAAO,KAAK,IAAInD,EAAU,QAAQA,EAAU,QAAQ,GACpDoD,IAAO,KAAK,IAAIpD,EAAU,QAAQA,EAAU,QAAQ;AAE1D,WAAO;AAAA,MACN,KAAKmD;AAAA,MACL,QAAQ,KAAK,IAAIC,IAAOD,GAAM,EAAE;AAAA;AAAA,MAChC,SAAS;AAAA,IAAA;AAAA,EAEX,GAAA;AAMA,SAAO;AAAA,IACN,WAAAnD;AAAA,IACA,SAAAkD;AAAA,IACA,mBAAAd;AAAA,IACA,mBAAAO;AAAA,IACA,iBAAAG;AAAA,IACA,QAAAG;AAAA,IACA,aAAajD,EAAU;AAAA,EAAA;AAEzB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-B6yFEsav.js","sources":["../src/lib/utils.ts"],"sourcesContent":["/**\n * Utility functions for @inno/calendar\n */\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merge class names with Tailwind support\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n"],"names":["cn","inputs","twMerge","clsx"],"mappings":";;AAUO,SAASA,KAAMC,GAAsB;AAC3C,SAAOC,EAAQC,EAAKF,CAAM,CAAC;AAC5B;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-IjLH3w2e.cjs","sources":["../src/lib/utils.ts"],"sourcesContent":["/**\n * Utility functions for @inno/calendar\n */\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merge class names with Tailwind support\n */\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n"],"names":["cn","inputs","twMerge","clsx"],"mappings":"iEAUO,SAASA,KAAMC,EAAsB,CAC3C,OAAOC,EAAAA,QAAQC,OAAKF,CAAM,CAAC,CAC5B"}
|
package/dist/utils.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./position-utils-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./position-utils-BVt-Bp93.cjs");exports.CALENDAR_VIEWS=e.CALENDAR_VIEWS;exports.CALENDAR_VIEW_STORAGE_KEY=e.CALENDAR_VIEW_STORAGE_KEY;exports.DEFAULT_BUSINESS_HOURS=e.DEFAULT_BUSINESS_HOURS;exports.DEFAULT_HEADER_HEIGHT=e.DEFAULT_HEADER_HEIGHT;exports.DEFAULT_HOUR_HEIGHT=e.DEFAULT_HOUR_HEIGHT;exports.DEFAULT_PREFERENCES=e.DEFAULT_PREFERENCES;exports.DEFAULT_RESOURCE_WIDTH=e.DEFAULT_RESOURCE_WIDTH;exports.DEFAULT_SLOT_HEIGHT=e.DEFAULT_SLOT_HEIGHT;exports.DEFAULT_VIEW_CONFIGS=e.DEFAULT_VIEW_CONFIGS;exports.DEFAULT_VISIBLE_HOURS=e.DEFAULT_VISIBLE_HOURS;exports.EVENT_COLORS=e.EVENT_COLORS;exports.EVENT_COLOR_CLASSES=e.EVENT_COLOR_CLASSES;exports.HEX_TO_EVENT_COLOR=e.HEX_TO_EVENT_COLOR;exports.HOURS_IN_DAY=e.HOURS_IN_DAY;exports.MINUTES_IN_HOUR=e.MINUTES_IN_HOUR;exports.MIN_EVENT_HEIGHT=e.MIN_EVENT_HEIGHT;exports.MS_PER_DAY=e.MS_PER_DAY;exports.MS_PER_HOUR=e.MS_PER_HOUR;exports.MS_PER_MINUTE=e.MS_PER_MINUTE;exports.RESOURCE_VIEW_STORAGE_KEY=e.RESOURCE_VIEW_STORAGE_KEY;exports.addDays=e.addDays;exports.addHours=e.addHours;exports.addMinutes=e.addMinutes;exports.addMonths=e.addMonths;exports.addWeeks=e.addWeeks;exports.addYears=e.addYears;exports.applyEventFilters=e.applyEventFilters;exports.calculateEventPosition=e.calculateEventPosition;exports.calculateOverlappingPositions=e.calculateOverlappingPositions;exports.calculateSelectionOverlay=e.calculateSelectionOverlay;exports.clearCalendarView=e.clearCalendarView;exports.clearResourceView=e.clearResourceView;exports.detectAllDayEvent=e.detectAllDayEvent;exports.differenceInDays=e.differenceInDays;exports.differenceInHours=e.differenceInHours;exports.differenceInMilliseconds=e.differenceInMilliseconds;exports.differenceInMinutes=e.differenceInMinutes;exports.eachDayOfInterval=e.eachDayOfInterval;exports.eachHourOfInterval=e.eachHourOfInterval;exports.endOfDay=e.endOfDay;exports.endOfMonth=e.endOfMonth;exports.endOfWeek=e.endOfWeek;exports.endOfYear=e.endOfYear;exports.eventsOverlap=e.eventsOverlap;exports.filterEventsByDateRange=e.filterEventsByDateRange;exports.filterEventsByResource=e.filterEventsByResource;exports.filterEventsByScheduleType=e.filterEventsByScheduleType;exports.filterEventsBySearch=e.filterEventsBySearch;exports.filterOutCanceled=e.filterOutCanceled;exports.formatClock=e.formatClock;exports.formatClockCompact=e.formatClockCompact;exports.formatClockRange=e.formatClockRange;exports.formatDateISO=e.formatDateISO;exports.formatEventTimeDisplay=e.formatEventTimeDisplay;exports.formatHourLabel=e.formatHourLabel;exports.formatTime=e.formatTime;exports.generateHourLabels=e.generateHourLabels;exports.generateMonthCells=e.generateMonthCells;exports.generateMonthGrid=e.generateMonthGrid;exports.generateTimeSlots=e.generateTimeSlots;exports.generateWeekCells=e.generateWeekCells;exports.generateYearCells=e.generateYearCells;exports.getAllDayEvents=e.getAllDayEvents;exports.getDayOfWeek=e.getDayOfWeek;exports.getDaysInMonth=e.getDaysInMonth;exports.getDecimalHours=e.getDecimalHours;exports.getEventColor=e.getEventColor;exports.getEventDurationMinutes=e.getEventDurationMinutes;exports.getEventsCountInView=e.getEventsCountInView;exports.getEventsForDay=e.getEventsForDay;exports.getEventsInRange=e.getEventsInRange;exports.getMonthNames=e.getMonthNames;exports.getMultiDayEvents=e.getMultiDayEvents;exports.getOverlappingGroups=e.getOverlappingGroups;exports.getRangeText=e.getRangeText;exports.getTimedEvents=e.getTimedEvents;exports.getViewDateRange=e.getViewDateRange;exports.getViewTitle=e.getViewTitle;exports.getVisibleHoursArray=e.getVisibleHoursArray;exports.getWeekDays=e.getWeekDays;exports.getWeekNumber=e.getWeekNumber;exports.getWeekdayHeaders=e.getWeekdayHeaders;exports.getWeekdayNames=e.getWeekdayNames;exports.getWorkingHoursForDay=e.getWorkingHoursForDay;exports.getYearMonths=e.getYearMonths;exports.groupEventsByDate=e.groupEventsByDate;exports.groupEventsByResource=e.groupEventsByResource;exports.groupEventsByScheduleType=e.groupEventsByScheduleType;exports.isAfter=e.isAfter;exports.isBefore=e.isBefore;exports.isBetween=e.isBetween;exports.isCalendarGridView=e.isCalendarGridView;exports.isMultiDayEvent=e.isMultiDayEvent;exports.isResourceView=e.isResourceView;exports.isSameDay=e.isSameDay;exports.isSameMonth=e.isSameMonth;exports.isSameWeek=e.isSameWeek;exports.isSameYear=e.isSameYear;exports.isToday=e.isToday;exports.isWeekend=e.isWeekend;exports.isWorkingHour=e.isWorkingHour;exports.maxDate=e.maxDate;exports.minDate=e.minDate;exports.navigateNext=e.navigateNext;exports.navigatePrev=e.navigatePrev;exports.navigateToday=e.navigateToday;exports.parseClockText=e.parseClockText;exports.parseISO=e.parseISO;exports.reactNodeToText=e.reactNodeToText;exports.readCalendarView=e.readCalendarView;exports.readPersistedView=e.readPersistedView;exports.readPreferencesView=e.readPreferencesView;exports.readResourceView=e.readResourceView;exports.resolveEventColor=e.resolveEventColor;exports.saveCalendarView=e.saveCalendarView;exports.saveResourceView=e.saveResourceView;exports.saveViewByFamily=e.saveViewByFamily;exports.separateEventsByDuration=e.separateEventsByDuration;exports.setTime=e.setTime;exports.shouldShowEventTime=e.shouldShowEventTime;exports.sortEventsByDuration=e.sortEventsByDuration;exports.sortEventsByEnd=e.sortEventsByEnd;exports.sortEventsByStart=e.sortEventsByStart;exports.startOfDay=e.startOfDay;exports.startOfMonth=e.startOfMonth;exports.startOfWeek=e.startOfWeek;exports.startOfYear=e.startOfYear;exports.subDays=e.subDays;exports.subMonths=e.subMonths;exports.subWeeks=e.subWeeks;exports.subYears=e.subYears;exports.timeToY=e.timeToY;exports.yToTime=e.yToTime;
|
|
2
2
|
//# sourceMappingURL=utils.cjs.map
|
package/dist/utils.d.ts
CHANGED
|
@@ -20,5 +20,5 @@
|
|
|
20
20
|
*/
|
|
21
21
|
export * from './core/utils';
|
|
22
22
|
export { CALENDAR_VIEWS, DEFAULT_BUSINESS_HOURS, DEFAULT_HEADER_HEIGHT, DEFAULT_HOUR_HEIGHT, DEFAULT_PREFERENCES, DEFAULT_RESOURCE_WIDTH, DEFAULT_SLOT_HEIGHT, DEFAULT_VIEW_CONFIGS, DEFAULT_VISIBLE_HOURS, EVENT_COLOR_CLASSES, EVENT_COLORS, HEX_TO_EVENT_COLOR, HOURS_IN_DAY, MIN_EVENT_HEIGHT, MINUTES_IN_HOUR, MS_PER_DAY, MS_PER_HOUR, MS_PER_MINUTE, } from './core/constants';
|
|
23
|
-
export type { CalendarEvent, IBaseEvent, ICalendarCell,
|
|
23
|
+
export type { CalendarEvent, IBaseEvent, ICalendarCell, ICalendarFilters, ICalendarPreferences, ICalendarUser, IDateRange, IEventPosition, IPositionedEvent, IResource, IScheduleType, ISelectionResult, ISlotSelection, ISlotSelectionState, ITimeSlot, IViewConfig, IVisibleHours, TBadgeVariant, TCalendarView, TEventColor, TOnDateChange, TOnEventClick, TOnEventDrop, TOnEventResize, TOnFiltersChange, TOnSlotSelect, TOnViewChange, TSelectionMode, } from './core/types';
|
|
24
24
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,cAAc,cAAc,CAAC;AAM7B,OAAO,EACN,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,WAAW,EACX,aAAa,GACb,MAAM,kBAAkB,CAAC;AAM1B,YAAY,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,cAAc,cAAc,CAAC;AAM7B,OAAO,EACN,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,WAAW,EACX,aAAa,GACb,MAAM,kBAAkB,CAAC;AAM1B,YAAY,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,GACd,MAAM,cAAc,CAAC"}
|