@innosolutions/inno-calendar 1.0.59 → 1.0.60

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 (62) hide show
  1. package/AGENT.md +40 -5
  2. package/README.md +47 -3
  3. package/dist/agenda-widget-BtjS59HE.cjs +2 -0
  4. package/dist/agenda-widget-BtjS59HE.cjs.map +1 -0
  5. package/dist/{agenda-widget-wrZfO67A.js → agenda-widget-COpTIR70.js} +5 -5
  6. package/dist/agenda-widget-COpTIR70.js.map +1 -0
  7. package/dist/components/event/event-card.d.ts.map +1 -1
  8. package/dist/components/index.cjs +1 -1
  9. package/dist/components/index.mjs +2 -2
  10. package/dist/core/context/inno-calendar-provider.d.ts.map +1 -1
  11. package/dist/core/index.cjs +1 -1
  12. package/dist/core/index.mjs +115 -114
  13. package/dist/core/types.d.ts +6 -18
  14. package/dist/core/types.d.ts.map +1 -1
  15. package/dist/core/utils/event-utils.d.ts.map +1 -1
  16. package/dist/core/utils/index.d.ts +1 -0
  17. package/dist/core/utils/index.d.ts.map +1 -1
  18. package/dist/core/utils/react-node-utils.d.ts +14 -0
  19. package/dist/core/utils/react-node-utils.d.ts.map +1 -0
  20. package/dist/index.cjs +1 -1
  21. package/dist/index.mjs +174 -173
  22. package/dist/position-utils-BQpbtF6N.cjs +2 -0
  23. package/dist/position-utils-BQpbtF6N.cjs.map +1 -0
  24. package/dist/position-utils-DMVQFywD.js +936 -0
  25. package/dist/position-utils-DMVQFywD.js.map +1 -0
  26. package/dist/presets/index.cjs +1 -1
  27. package/dist/presets/index.mjs +1 -1
  28. package/dist/{slot-selection-context-BwghpxKA.js → slot-selection-context-CKGT_45R.js} +201 -200
  29. package/dist/{slot-selection-context-BwghpxKA.js.map → slot-selection-context-CKGT_45R.js.map} +1 -1
  30. package/dist/slot-selection-context-CS1te8uo.cjs +2 -0
  31. package/dist/{slot-selection-context-CHSaOPWP.cjs.map → slot-selection-context-CS1te8uo.cjs.map} +1 -1
  32. package/dist/{tailwind-calendar-CVuxWXLY.js → tailwind-calendar-C3DidCJ5.js} +80 -80
  33. package/dist/{tailwind-calendar-CVuxWXLY.js.map → tailwind-calendar-C3DidCJ5.js.map} +1 -1
  34. package/dist/tailwind-calendar-iFeIx0Ci.cjs +2 -0
  35. package/dist/{tailwind-calendar-DoG6s3PJ.cjs.map → tailwind-calendar-iFeIx0Ci.cjs.map} +1 -1
  36. package/dist/{use-calendar-Clo9DFK4.js → use-calendar-D8XaVe44.js} +69 -69
  37. package/dist/{use-calendar-Clo9DFK4.js.map → use-calendar-D8XaVe44.js.map} +1 -1
  38. package/dist/use-calendar-DkT1_V3j.cjs +2 -0
  39. package/dist/{use-calendar-BEuelmSu.cjs.map → use-calendar-DkT1_V3j.cjs.map} +1 -1
  40. package/dist/{use-slot-selection-BCZKnZSM.js → use-slot-selection-CWRk_17s.js} +32 -32
  41. package/dist/{use-slot-selection-BCZKnZSM.js.map → use-slot-selection-CWRk_17s.js.map} +1 -1
  42. package/dist/use-slot-selection-Dj_tWg1O.cjs +2 -0
  43. package/dist/{use-slot-selection-Bwqwjiaq.cjs.map → use-slot-selection-Dj_tWg1O.cjs.map} +1 -1
  44. package/dist/utils.cjs +1 -1
  45. package/dist/utils.cjs.map +1 -1
  46. package/dist/utils.mjs +117 -920
  47. package/dist/utils.mjs.map +1 -1
  48. package/dist/week-view-B9_48WmF.cjs +11 -0
  49. package/dist/week-view-B9_48WmF.cjs.map +1 -0
  50. package/dist/{week-view-C1FxF_nk.js → week-view-CNbtlkE_.js} +804 -793
  51. package/dist/week-view-CNbtlkE_.js.map +1 -0
  52. package/package.json +1 -1
  53. package/dist/agenda-widget-BxZU4eGL.cjs +0 -2
  54. package/dist/agenda-widget-BxZU4eGL.cjs.map +0 -1
  55. package/dist/agenda-widget-wrZfO67A.js.map +0 -1
  56. package/dist/slot-selection-context-CHSaOPWP.cjs +0 -2
  57. package/dist/tailwind-calendar-DoG6s3PJ.cjs +0 -2
  58. package/dist/use-calendar-BEuelmSu.cjs +0 -2
  59. package/dist/use-slot-selection-Bwqwjiaq.cjs +0 -2
  60. package/dist/week-view-Bzpbti1B.cjs +0 -11
  61. package/dist/week-view-Bzpbti1B.cjs.map +0 -1
  62. package/dist/week-view-C1FxF_nk.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { jsxs as T, jsx as n } from "react/jsx-runtime";
2
- import { useState as g, useMemo as x, useCallback as a } from "react";
3
- import { C as te, A as re, M as ae, W as se, c as ne } from "./week-view-C1FxF_nk.js";
4
- import { DEFAULT_PREFERENCES as oe, navigatePrev as ie, navigateNext as de, navigateToday as le } from "./utils.mjs";
2
+ import { useState as g, useMemo as x, useCallback as r } from "react";
3
+ import { C as te, A as ae, M as re, W as se, c as ne } from "./week-view-CNbtlkE_.js";
4
+ import { c as oe, aF as ie, aE as de, aG as ce } from "./position-utils-DMVQFywD.js";
5
5
  import { c as De } from "./index-DtaLkIY8.js";
6
6
  const xe = {
7
7
  display: "flex",
@@ -28,8 +28,8 @@ const xe = {
28
28
  color: "var(--ic-text-muted, #6b7280)"
29
29
  };
30
30
  function _e({
31
- events: c,
32
- resources: ce,
31
+ events: l,
32
+ resources: le,
33
33
  scheduleTypes: Q,
34
34
  initialView: j = "week",
35
35
  initialDate: A,
@@ -48,37 +48,37 @@ function _e({
48
48
  emptyState: o,
49
49
  children: fe
50
50
  }) {
51
- const [f, k] = g(j), [l, z] = g(A ?? /* @__PURE__ */ new Date()), m = x(
51
+ const [f, k] = g(j), [c, z] = g(A ?? /* @__PURE__ */ new Date()), m = x(
52
52
  () => ({
53
53
  ...oe,
54
54
  ...N
55
55
  }),
56
56
  [N]
57
- ), b = a(
58
- (r) => {
59
- k(r), y?.(r);
57
+ ), b = r(
58
+ (a) => {
59
+ k(a), y?.(a);
60
60
  },
61
61
  [y]
62
- ), h = a(
63
- (r) => {
64
- z(r), H?.(r);
62
+ ), h = r(
63
+ (a) => {
64
+ z(a), H?.(a);
65
65
  },
66
66
  [H]
67
- ), W = a(() => {
68
- const r = ie(l, f);
69
- h(r);
70
- }, [l, f, h]), _ = a(() => {
71
- const r = de(l, f);
72
- h(r);
73
- }, [l, f, h]), X = a(() => {
74
- const r = le();
75
- h(r);
76
- }, [h]), i = a(
77
- (r) => {
78
- h(r), b("day");
67
+ ), W = r(() => {
68
+ const a = ie(c, f);
69
+ h(a);
70
+ }, [c, f, h]), _ = r(() => {
71
+ const a = de(c, f);
72
+ h(a);
73
+ }, [c, f, h]), X = r(() => {
74
+ const a = ce();
75
+ h(a);
76
+ }, [h]), i = r(
77
+ (a) => {
78
+ h(a), b("day");
79
79
  },
80
80
  [h, b]
81
- ), R = x(
81
+ ), F = x(
82
82
  () => ({
83
83
  startHour: m.startHour,
84
84
  endHour: m.endHour
@@ -90,10 +90,10 @@ function _e({
90
90
  return /* @__PURE__ */ n(
91
91
  ne,
92
92
  {
93
- events: c,
94
- date: l,
93
+ events: l,
94
+ date: c,
95
95
  badgeVariant: s,
96
- visibleHours: R,
96
+ visibleHours: F,
97
97
  slotDuration: m.slotDuration,
98
98
  ...u && { onEventClick: u },
99
99
  ...t && { onSlotSelect: t }
@@ -103,11 +103,11 @@ function _e({
103
103
  return /* @__PURE__ */ n(
104
104
  se,
105
105
  {
106
- events: c,
107
- date: l,
106
+ events: l,
107
+ date: c,
108
108
  badgeVariant: s,
109
109
  weekStartsOn: d,
110
- visibleHours: R,
110
+ visibleHours: F,
111
111
  slotDuration: m.slotDuration,
112
112
  onDayClick: i,
113
113
  ...u && { onEventClick: u },
@@ -116,10 +116,10 @@ function _e({
116
116
  );
117
117
  case "month":
118
118
  return /* @__PURE__ */ n(
119
- ae,
119
+ re,
120
120
  {
121
- events: c,
122
- date: l,
121
+ events: l,
122
+ date: c,
123
123
  badgeVariant: s,
124
124
  weekStartsOn: d,
125
125
  onDayClick: i,
@@ -129,10 +129,10 @@ function _e({
129
129
  );
130
130
  case "agenda":
131
131
  return /* @__PURE__ */ n(
132
- re,
132
+ ae,
133
133
  {
134
- events: c,
135
- date: l,
134
+ events: l,
135
+ date: c,
136
136
  badgeVariant: s,
137
137
  ...u && { onEventClick: u },
138
138
  ...o && { emptyState: o }
@@ -151,11 +151,11 @@ function _e({
151
151
  te,
152
152
  {
153
153
  view: f,
154
- currentDate: l,
154
+ currentDate: c,
155
155
  availableViews: O,
156
156
  onViewChange: b,
157
- onNavigate: (r) => {
158
- r === "prev" ? W() : r === "next" ? _() : X();
157
+ onNavigate: (a) => {
158
+ a === "prev" ? W() : a === "next" ? _() : X();
159
159
  },
160
160
  actions: v,
161
161
  className: "p-3"
@@ -164,9 +164,9 @@ function _e({
164
164
  /* @__PURE__ */ n("div", { style: Ne, children: B() })
165
165
  ] });
166
166
  }
167
- function Re({
168
- events: c,
169
- resources: ce,
167
+ function Fe({
168
+ events: l,
169
+ resources: le,
170
170
  scheduleTypes: Q = [],
171
171
  initialView: j = "week",
172
172
  initialDate: A,
@@ -186,7 +186,7 @@ function Re({
186
186
  renderEventPopover: fe,
187
187
  renderFilterSidebar: f,
188
188
  renderHeader: k,
189
- settingsContent: l,
189
+ settingsContent: c,
190
190
  filterContent: z,
191
191
  showSettings: m = !0,
192
192
  showTimelineViews: b = !1,
@@ -195,36 +195,36 @@ function Re({
195
195
  emptyState: _,
196
196
  children: X
197
197
  }) {
198
- const [i, R] = g(j), [d, B] = g(A ?? /* @__PURE__ */ new Date()), [r, Y] = g([]), [U, Z] = g([]), w = x(
198
+ const [i, F] = g(j), [d, B] = g(A ?? /* @__PURE__ */ new Date()), [a, Y] = g([]), [U, Z] = g([]), w = x(
199
199
  () => ({
200
200
  ...oe,
201
201
  ...N
202
202
  }),
203
203
  [N]
204
- ), L = a(
204
+ ), G = r(
205
205
  (e) => {
206
- R(e), H?.(e);
206
+ F(e), H?.(e);
207
207
  },
208
208
  [H]
209
- ), D = a(
209
+ ), D = r(
210
210
  (e) => {
211
211
  B(e), I?.(e);
212
212
  },
213
213
  [I]
214
- ), q = a(() => {
214
+ ), L = r(() => {
215
215
  const e = ie(d, i);
216
216
  D(e);
217
- }, [d, i, D]), G = a(() => {
217
+ }, [d, i, D]), q = r(() => {
218
218
  const e = de(d, i);
219
219
  D(e);
220
- }, [d, i, D]), J = a(() => {
221
- const e = le();
220
+ }, [d, i, D]), J = r(() => {
221
+ const e = ce();
222
222
  D(e);
223
- }, [D]), $ = a(
223
+ }, [D]), $ = r(
224
224
  (e) => {
225
- D(e), L("day");
225
+ D(e), G("day");
226
226
  },
227
- [D, L]
227
+ [D, G]
228
228
  ), V = x(
229
229
  () => ({
230
230
  startHour: 0,
@@ -236,7 +236,7 @@ function Re({
236
236
  for (let p = 0; p <= 6; p++)
237
237
  p === 0 || p === 6 ? w.showWeekends ? p === 6 ? e[p] = { enabled: !0, from: 8, to: 12 } : e[p] = { enabled: !1, from: 0, to: 0 } : e[p] = { enabled: !1, from: 0, to: 0 } : e[p] = { enabled: !0, from: w.startHour, to: w.endHour };
238
238
  return e;
239
- }, [w.startHour, w.endHour, w.showWeekends]), he = a(
239
+ }, [w.startHour, w.endHour, w.showWeekends]), he = r(
240
240
  (e) => {
241
241
  Y(e), v?.({
242
242
  scheduleTypeIds: e,
@@ -244,15 +244,15 @@ function Re({
244
244
  });
245
245
  },
246
246
  [v, U]
247
- ), ye = a(
247
+ ), ye = r(
248
248
  (e) => {
249
249
  Z(e), v?.({
250
- scheduleTypeIds: r,
250
+ scheduleTypeIds: a,
251
251
  participantIds: e
252
252
  });
253
253
  },
254
- [v, r]
255
- ), F = x(() => {
254
+ [v, a]
255
+ ), R = x(() => {
256
256
  if (o)
257
257
  return (e) => o({
258
258
  event: e.event,
@@ -286,7 +286,7 @@ function Re({
286
286
  return /* @__PURE__ */ n(
287
287
  ne,
288
288
  {
289
- events: c,
289
+ events: l,
290
290
  date: d,
291
291
  badgeVariant: s,
292
292
  visibleHours: V,
@@ -294,14 +294,14 @@ function Re({
294
294
  slotDuration: w.slotDuration,
295
295
  ...t && { onEventClick: t },
296
296
  ...y && { onSlotSelect: y },
297
- ...F && { renderEvent: F }
297
+ ...R && { renderEvent: R }
298
298
  }
299
299
  );
300
300
  case "week":
301
301
  return /* @__PURE__ */ n(
302
302
  se,
303
303
  {
304
- events: c,
304
+ events: l,
305
305
  date: d,
306
306
  badgeVariant: s,
307
307
  weekStartsOn: K,
@@ -311,14 +311,14 @@ function Re({
311
311
  onDayClick: $,
312
312
  ...t && { onEventClick: t },
313
313
  ...y && { onSlotSelect: y },
314
- ...F && { renderEvent: F }
314
+ ...R && { renderEvent: R }
315
315
  }
316
316
  );
317
317
  case "month":
318
318
  return /* @__PURE__ */ n(
319
- ae,
319
+ re,
320
320
  {
321
- events: c,
321
+ events: l,
322
322
  date: d,
323
323
  badgeVariant: s,
324
324
  weekStartsOn: K,
@@ -330,9 +330,9 @@ function Re({
330
330
  );
331
331
  case "agenda":
332
332
  return /* @__PURE__ */ n(
333
- re,
333
+ ae,
334
334
  {
335
- events: c,
335
+ events: l,
336
336
  date: d,
337
337
  badgeVariant: s,
338
338
  ...t && { onEventClick: t },
@@ -347,32 +347,32 @@ function Re({
347
347
  '" is not yet implemented'
348
348
  ] });
349
349
  }
350
- }, we = a(
350
+ }, we = r(
351
351
  (e) => {
352
- e === "prev" ? q() : e === "next" ? G() : J();
352
+ e === "prev" ? L() : e === "next" ? q() : J();
353
353
  },
354
- [q, G, J]
354
+ [L, q, J]
355
355
  ), ee = {
356
356
  view: i,
357
357
  currentDate: d,
358
358
  availableViews: u,
359
- onViewChange: L,
359
+ onViewChange: G,
360
360
  onNavigate: we,
361
- onNavigatePrev: q,
362
- onNavigateNext: G,
361
+ onNavigatePrev: L,
362
+ onNavigateNext: q,
363
363
  onNavigateToday: J,
364
364
  ...P && { onAddEvent: P },
365
365
  ...W && { actions: W },
366
366
  className: "border-b border-gray-200 p-3"
367
367
  }, pe = {
368
368
  ...ee,
369
- events: c,
369
+ events: l,
370
370
  weekStartsOn: K,
371
- settingsContent: l,
371
+ settingsContent: c,
372
372
  filterContent: z,
373
373
  showSettings: m,
374
374
  showTimelineViews: b
375
- }, ve = a(() => {
375
+ }, ve = r(() => {
376
376
  Y([]), Z([]), v?.({
377
377
  scheduleTypeIds: [],
378
378
  participantIds: []
@@ -381,7 +381,7 @@ function Re({
381
381
  return /* @__PURE__ */ T("div", { className: De("flex h-full bg-white border border-gray-200 rounded-lg", h), children: [
382
382
  O && /* @__PURE__ */ n("div", { className: "w-64 border-r border-gray-200 flex-shrink-0", children: f ? f({
383
383
  scheduleTypes: Q,
384
- selectedScheduleTypeIds: r,
384
+ selectedScheduleTypeIds: a,
385
385
  selectedParticipantIds: U,
386
386
  onScheduleTypeChange: he,
387
387
  onParticipantChange: ye,
@@ -395,6 +395,6 @@ function Re({
395
395
  }
396
396
  export {
397
397
  _e as D,
398
- Re as T
398
+ Fe as T
399
399
  };
400
- //# sourceMappingURL=tailwind-calendar-CVuxWXLY.js.map
400
+ //# sourceMappingURL=tailwind-calendar-C3DidCJ5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tailwind-calendar-CVuxWXLY.js","sources":["../src/presets/default/default-calendar.tsx","../src/presets/tailwind/tailwind-calendar.tsx"],"sourcesContent":["/**\n * DefaultCalendar - Pre-styled Calendar Preset\n *\n * A fully styled calendar using CSS custom properties for theming.\n * Designed for projects that don't use TailwindCSS but want a complete solution.\n *\n * CSS Custom Properties (override these for theming):\n * - --ic-bg: Background color\n * - --ic-bg-muted: Muted background\n * - --ic-text: Primary text color\n * - --ic-text-muted: Secondary text color\n * - --ic-border: Border color\n * - --ic-primary: Primary/accent color\n * - --ic-primary-foreground: Text on primary background\n * - --ic-radius: Border radius\n *\n * @example\n * ```tsx\n * import { DefaultCalendar } from '@inno/calendar/presets';\n *\n * function MyAgenda() {\n * return (\n * <div style={{ '--ic-primary': '#6366f1' }}>\n * <DefaultCalendar\n * events={myEvents}\n * onEventClick={(event) => console.log('Clicked:', event)}\n * />\n * </div>\n * );\n * }\n * ```\n */\n\nimport { type CSSProperties, type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { CalendarHeader } from '../../components/header/calendar-header';\nimport { AgendaView } from '../../components/views/agenda-view';\nimport { DayView } from '../../components/views/day-view';\nimport { MonthView } from '../../components/views/month-view';\nimport { WeekView } from '../../components/views/week-view';\nimport { DEFAULT_PREFERENCES } from '../../core/constants';\nimport type {\n\tCalendarEvent,\n\tICalendarFilters,\n\tICalendarPreferences,\n\tIResource,\n\tIScheduleType,\n\tISelectionResult,\n\tTBadgeVariant,\n\tTCalendarView,\n} from '../../core/types';\nimport { navigateNext, navigatePrev, navigateToday } from '../../core/utils/grid-utils';\n\n// ============================================================================\n// STYLES (CSS-in-JS for zero-config usage)\n// ============================================================================\n\nconst baseStyles: CSSProperties = {\n\tdisplay: 'flex',\n\tflexDirection: 'column',\n\theight: '100%',\n\tminHeight: '400px',\n\tbackgroundColor: 'var(--ic-bg, #ffffff)',\n\tborder: '1px solid var(--ic-border, #e5e7eb)',\n\tborderRadius: 'var(--ic-radius, 0.5rem)',\n\toverflow: 'hidden',\n\tfontFamily:\n\t\t'var(--ic-font-family, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif)',\n\tfontSize: 'var(--ic-font-size, 0.875rem)',\n\tcolor: 'var(--ic-text, #111827)',\n};\n\nconst headerStyles: CSSProperties = {\n\tborderBottom: '1px solid var(--ic-border, #e5e7eb)',\n};\n\nconst contentStyles: CSSProperties = {\n\tflex: 1,\n\toverflow: 'auto',\n};\n\nconst fallbackViewStyles: CSSProperties = {\n\tdisplay: 'flex',\n\talignItems: 'center',\n\tjustifyContent: 'center',\n\theight: '16rem',\n\tcolor: 'var(--ic-text-muted, #6b7280)',\n};\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface DefaultCalendarProps<\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\t/** Available resources */\n\tresources?: IResource<TResourceData>[];\n\t/** Available schedule types */\n\tscheduleTypes?: IScheduleType<TScheduleTypeData>[];\n\t/** Initial view */\n\tinitialView?: TCalendarView;\n\t/** Initial date */\n\tinitialDate?: Date;\n\t/** Initial filters */\n\tinitialFilters?: ICalendarFilters;\n\t/** Preferences */\n\tpreferences?: Partial<ICalendarPreferences>;\n\t/** Badge variant for events (dot, colored, mixed) */\n\tbadgeVariant?: TBadgeVariant;\n\t/** Hide the header */\n\thideHeader?: boolean;\n\t/** Available views to show in view switcher */\n\tavailableViews?: TCalendarView[];\n\t/** Event click handler */\n\tonEventClick?: (event: CalendarEvent<TEventData>) => void;\n\t/** Slot selection handler */\n\tonSlotSelect?: (selection: ISelectionResult) => void;\n\t/** View change handler */\n\tonViewChange?: (view: TCalendarView) => void;\n\t/** Date change handler */\n\tonDateChange?: (date: Date) => void;\n\t/** Additional CSS class */\n\tclassName?: string;\n\t/** Custom style overrides */\n\tstyle?: CSSProperties;\n\t/** Custom header actions */\n\theaderActions?: ReactNode;\n\t/** Empty state for agenda view */\n\temptyState?: ReactNode;\n\t/** Children (for header slot) */\n\tchildren?: ReactNode;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function DefaultCalendar<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>({\n\tevents,\n\tresources: _resources,\n\tscheduleTypes: _scheduleTypes,\n\tinitialView = 'week',\n\tinitialDate,\n\tinitialFilters: _initialFilters,\n\tpreferences: userPreferences,\n\tbadgeVariant = 'colored',\n\thideHeader = false,\n\tavailableViews = ['day', 'week', 'month', 'agenda'],\n\tonEventClick,\n\tonSlotSelect,\n\tonViewChange,\n\tonDateChange,\n\tclassName = '',\n\tstyle,\n\theaderActions,\n\temptyState,\n\tchildren: _children,\n}: DefaultCalendarProps<TEventData, TScheduleTypeData, TResourceData>) {\n\t// ========================================================================\n\t// STATE\n\t// ========================================================================\n\n\tconst [view, setView] = useState<TCalendarView>(initialView);\n\tconst [date, setDate] = useState<Date>(initialDate ?? new Date());\n\n\t// Merge user preferences with defaults\n\tconst preferences: ICalendarPreferences = useMemo(\n\t\t() => ({\n\t\t\t...DEFAULT_PREFERENCES,\n\t\t\t...userPreferences,\n\t\t}),\n\t\t[userPreferences]\n\t);\n\n\t// ========================================================================\n\t// HANDLERS\n\t// ========================================================================\n\n\tconst handleViewChange = useCallback(\n\t\t(newView: TCalendarView) => {\n\t\t\tsetView(newView);\n\t\t\tonViewChange?.(newView);\n\t\t},\n\t\t[onViewChange]\n\t);\n\n\tconst handleDateChange = useCallback(\n\t\t(newDate: Date) => {\n\t\t\tsetDate(newDate);\n\t\t\tonDateChange?.(newDate);\n\t\t},\n\t\t[onDateChange]\n\t);\n\n\tconst handleNavigatePrev = useCallback(() => {\n\t\tconst newDate = navigatePrev(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateNext = useCallback(() => {\n\t\tconst newDate = navigateNext(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateToday = useCallback(() => {\n\t\tconst newDate = navigateToday();\n\t\thandleDateChange(newDate);\n\t}, [handleDateChange]);\n\n\tconst handleDayClick = useCallback(\n\t\t(clickedDate: Date) => {\n\t\t\t// Navigate to day view when clicking a day in month view\n\t\t\thandleDateChange(clickedDate);\n\t\t\thandleViewChange('day');\n\t\t},\n\t\t[handleDateChange, handleViewChange]\n\t);\n\n\t// ========================================================================\n\t// VIEW RENDERING\n\t// ========================================================================\n\n\t// Build visible hours from preferences\n\tconst visibleHours = useMemo(\n\t\t() => ({\n\t\t\tstartHour: preferences.startHour,\n\t\t\tendHour: preferences.endHour,\n\t\t}),\n\t\t[preferences.startHour, preferences.endHour]\n\t);\n\n\t// Week starts on (convert from 0-6 to 0 | 1)\n\tconst weekStartsOn: 0 | 1 = preferences.firstDayOfWeek === 0 ? 0 : 1;\n\n\tconst renderView = () => {\n\t\tswitch (view) {\n\t\t\tcase 'day':\n\t\t\t\treturn (\n\t\t\t\t\t<DayView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'week':\n\t\t\t\treturn (\n\t\t\t\t\t<WeekView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'month':\n\t\t\t\treturn (\n\t\t\t\t\t<MonthView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'agenda':\n\t\t\t\treturn (\n\t\t\t\t\t<AgendaView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(emptyState && { emptyState })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tdefault:\n\t\t\t\treturn <div style={fallbackViewStyles}>View &quot;{view}&quot; is not yet implemented</div>;\n\t\t}\n\t};\n\n\t// ========================================================================\n\t// RENDER\n\t// ========================================================================\n\n\treturn (\n\t\t<div className={className} style={{ ...baseStyles, ...style }}>\n\t\t\t{/* Header */}\n\t\t\t{!hideHeader && (\n\t\t\t\t<div style={headerStyles}>\n\t\t\t\t\t<CalendarHeader\n\t\t\t\t\t\tview={view}\n\t\t\t\t\t\tcurrentDate={date}\n\t\t\t\t\t\tavailableViews={availableViews}\n\t\t\t\t\t\tonViewChange={handleViewChange}\n\t\t\t\t\t\tonNavigate={(direction) => {\n\t\t\t\t\t\t\tif (direction === 'prev') handleNavigatePrev();\n\t\t\t\t\t\t\telse if (direction === 'next') handleNavigateNext();\n\t\t\t\t\t\t\telse handleNavigateToday();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tactions={headerActions}\n\t\t\t\t\t\tclassName=\"p-3\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Calendar View */}\n\t\t\t<div style={contentStyles}>{renderView()}</div>\n\t\t</div>\n\t);\n}\n","/**\n * TailwindCalendar - Tailwind-Optimized Calendar Preset\n *\n * A fully featured, ready-to-use calendar component designed for TailwindCSS projects.\n * Composes all calendar components into a cohesive experience.\n *\n * Features:\n * - Full customization via render props (renderEvent, renderEventPopover, renderFilterSidebar)\n * - All visual components can be replaced while keeping state management\n * - Matches production quality when used with custom components\n *\n * @example\n * ```tsx\n * import { TailwindCalendar } from '@inno/calendar/presets';\n *\n * function MyAgenda() {\n * return (\n * <TailwindCalendar\n * events={myEvents}\n * onEventClick={(event) => console.log('Clicked:', event)}\n * onSlotSelect={(selection) => console.log('Selected:', selection)}\n * // Custom components for production quality\n * renderEvent={(event) => <MyEventCard event={event} />}\n * renderEventPopover={(event, onClose) => <MyEventPopover event={event} onClose={onClose} />}\n * renderFilterSidebar={(props) => <MyFilterSidebar {...props} />}\n * />\n * );\n * }\n * ```\n */\n\nimport { type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { CalendarHeader } from '../../components/header/calendar-header';\nimport { AgendaView } from '../../components/views/agenda-view';\nimport { DayView } from '../../components/views/day-view';\nimport { MonthView } from '../../components/views/month-view';\nimport { WeekView } from '../../components/views/week-view';\nimport { DEFAULT_PREFERENCES } from '../../core/constants';\nimport type {\n\tCalendarEvent,\n\tICalendarFilters,\n\tICalendarPreferences,\n\tIEventPosition,\n\tIResource,\n\tIScheduleType,\n\tISelectionResult,\n\tTBadgeVariant,\n\tTCalendarView,\n} from '../../core/types';\nimport { navigateNext, navigatePrev, navigateToday } from '../../core/utils/grid-utils';\nimport { cn } from '../../lib/utils';\n\n// ============================================================================\n// RENDER PROP TYPES\n// ============================================================================\n\n/**\n * Props for custom event rendering\n */\nexport interface RenderEventProps<TEventData = Record<string, unknown>> {\n\tevent: CalendarEvent<TEventData>;\n\tview: TCalendarView;\n\tvariant: 'full' | 'compact' | 'dot' | 'block';\n\tposition?: IEventPosition;\n\tbadgeVariant: TBadgeVariant;\n\tonClick?: () => void;\n}\n\n/**\n * Props for custom event popover rendering\n */\nexport interface RenderEventPopoverProps<TEventData = Record<string, unknown>> {\n\tevent: CalendarEvent<TEventData>;\n\tonClose: () => void;\n}\n\n/**\n * Props for custom filter sidebar rendering\n */\nexport interface RenderFilterSidebarProps<TScheduleTypeData = Record<string, unknown>> {\n\tscheduleTypes: IScheduleType<TScheduleTypeData>[];\n\tselectedScheduleTypeIds: number[];\n\tonScheduleTypeChange: (ids: number[]) => void;\n\tselectedParticipantIds: string[];\n\tonParticipantChange: (ids: string[]) => void;\n\tonClearAll?: () => void;\n}\n\n/**\n * Props for custom header rendering\n */\nexport interface RenderHeaderProps {\n\tview: TCalendarView;\n\tcurrentDate: Date;\n\tavailableViews: TCalendarView[];\n\tonViewChange: (view: TCalendarView) => void;\n\tonNavigate: (direction: 'prev' | 'next' | 'today') => void;\n\tonNavigatePrev?: () => void;\n\tonNavigateNext?: () => void;\n\tonNavigateToday?: () => void;\n\tonAddEvent?: () => void;\n\tactions?: ReactNode;\n\tclassName?: string;\n}\n\n// ============================================================================\n// COMPONENT PROPS\n// ============================================================================\n\nexport interface TailwindCalendarProps<\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\t/** Available resources */\n\tresources?: IResource<TResourceData>[];\n\t/** Available schedule types */\n\tscheduleTypes?: IScheduleType<TScheduleTypeData>[];\n\t/** Initial view */\n\tinitialView?: TCalendarView;\n\t/** Initial date */\n\tinitialDate?: Date;\n\t/** Initial filters */\n\tinitialFilters?: ICalendarFilters;\n\t/** Preferences */\n\tpreferences?: Partial<ICalendarPreferences>;\n\t/** Badge variant for events (dot, colored, mixed) */\n\tbadgeVariant?: TBadgeVariant;\n\t/** Hide the header */\n\thideHeader?: boolean;\n\t/** Show filter sidebar */\n\tshowFilterSidebar?: boolean;\n\t/** Available views to show in view switcher */\n\tavailableViews?: TCalendarView[];\n\n\t// ========================================================================\n\t// CALLBACKS\n\t// ========================================================================\n\n\t/** Event click handler */\n\tonEventClick?: (event: CalendarEvent<TEventData>) => void;\n\t/** Slot selection handler */\n\tonSlotSelect?: (selection: ISelectionResult) => void;\n\t/** View change handler */\n\tonViewChange?: (view: TCalendarView) => void;\n\t/** Date change handler */\n\tonDateChange?: (date: Date) => void;\n\t/** Add event handler (for header button) */\n\tonAddEvent?: () => void;\n\t/** Filter change handler */\n\tonFiltersChange?: (filters: ICalendarFilters) => void;\n\n\t// ========================================================================\n\t// RENDER PROPS (for custom components)\n\t// ========================================================================\n\n\t/**\n\t * Custom event renderer\n\t * Use this to inject your own EventCard component\n\t */\n\trenderEvent?: (props: RenderEventProps<TEventData>) => ReactNode;\n\n\t/**\n\t * Custom event popover renderer\n\t * Use this to inject your own EventPopover component\n\t * If not provided, a basic popover is shown\n\t */\n\trenderEventPopover?: (props: RenderEventPopoverProps<TEventData>) => ReactNode;\n\n\t/**\n\t * Custom filter sidebar renderer\n\t * Use this to inject your own CalendarFilterSidebar component\n\t */\n\trenderFilterSidebar?: (props: RenderFilterSidebarProps<TScheduleTypeData>) => ReactNode;\n\n\t/**\n\t * Custom header renderer\n\t * Use this to inject your own CalendarHeader component\n\t */\n\trenderHeader?: (props: RenderHeaderProps) => ReactNode;\n\n\t// ========================================================================\n\t// HEADER SLOTS\n\t// ========================================================================\n\n\t/** Settings popover content (for default header) */\n\tsettingsContent?: ReactNode;\n\t/** Filter row content (for default header) */\n\tfilterContent?: ReactNode;\n\t/** Whether to show the settings button (default: true) */\n\tshowSettings?: boolean;\n\t/** Whether to show timeline view options (default: false) */\n\tshowTimelineViews?: boolean;\n\n\t// ========================================================================\n\t// STYLING\n\t// ========================================================================\n\n\t/** Additional CSS class */\n\tclassName?: string;\n\t/** Custom header actions (shown in default header) */\n\theaderActions?: ReactNode;\n\t/** Empty state for agenda view */\n\temptyState?: ReactNode;\n\t/** Children (for header slot) */\n\tchildren?: ReactNode;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function TailwindCalendar<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>({\n\tevents,\n\tresources: _resources,\n\tscheduleTypes = [],\n\tinitialView = 'week',\n\tinitialDate,\n\tinitialFilters: _initialFilters,\n\tpreferences: userPreferences,\n\tbadgeVariant = 'colored',\n\thideHeader = false,\n\tshowFilterSidebar = false,\n\tavailableViews = ['day', 'week', 'month', 'agenda'],\n\tonEventClick,\n\tonSlotSelect,\n\tonViewChange,\n\tonDateChange,\n\tonAddEvent,\n\tonFiltersChange,\n\trenderEvent,\n\trenderEventPopover: _renderEventPopover,\n\trenderFilterSidebar,\n\trenderHeader,\n\tsettingsContent,\n\tfilterContent,\n\tshowSettings = true,\n\tshowTimelineViews = false,\n\tclassName,\n\theaderActions,\n\temptyState,\n\tchildren: _children,\n}: TailwindCalendarProps<TEventData, TScheduleTypeData, TResourceData>) {\n\t// ========================================================================\n\t// STATE\n\t// ========================================================================\n\n\tconst [view, setView] = useState<TCalendarView>(initialView);\n\tconst [date, setDate] = useState<Date>(initialDate ?? new Date());\n\n\t// Filter state (for filter sidebar)\n\tconst [selectedScheduleTypeIds, setSelectedScheduleTypeIds] = useState<number[]>([]);\n\tconst [selectedParticipantIds, setSelectedParticipantIds] = useState<string[]>([]);\n\n\t// Merge user preferences with defaults\n\tconst preferences: ICalendarPreferences = useMemo(\n\t\t() => ({\n\t\t\t...DEFAULT_PREFERENCES,\n\t\t\t...userPreferences,\n\t\t}),\n\t\t[userPreferences]\n\t);\n\n\t// ========================================================================\n\t// HANDLERS\n\t// ========================================================================\n\n\tconst handleViewChange = useCallback(\n\t\t(newView: TCalendarView) => {\n\t\t\tsetView(newView);\n\t\t\tonViewChange?.(newView);\n\t\t},\n\t\t[onViewChange]\n\t);\n\n\tconst handleDateChange = useCallback(\n\t\t(newDate: Date) => {\n\t\t\tsetDate(newDate);\n\t\t\tonDateChange?.(newDate);\n\t\t},\n\t\t[onDateChange]\n\t);\n\n\tconst handleNavigatePrev = useCallback(() => {\n\t\tconst newDate = navigatePrev(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateNext = useCallback(() => {\n\t\tconst newDate = navigateNext(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateToday = useCallback(() => {\n\t\tconst newDate = navigateToday();\n\t\thandleDateChange(newDate);\n\t}, [handleDateChange]);\n\n\tconst handleDayClick = useCallback(\n\t\t(clickedDate: Date) => {\n\t\t\t// Navigate to day view when clicking a day in month view\n\t\t\thandleDateChange(clickedDate);\n\t\t\thandleViewChange('day');\n\t\t},\n\t\t[handleDateChange, handleViewChange]\n\t);\n\n\t// ========================================================================\n\t// VIEW RENDERING\n\t// ========================================================================\n\n\t// Visible hours - show all hours (0-24) so users can see the full day\n\t// The working hours determine which slots have striped (disabled) appearance\n\tconst visibleHours = useMemo(\n\t\t() => ({\n\t\t\tstartHour: 0,\n\t\t\tendHour: 24,\n\t\t}),\n\t\t[]\n\t);\n\n\t// Week starts on (convert from 0-6 to 0 | 1)\n\tconst weekStartsOn: 0 | 1 = preferences.firstDayOfWeek === 0 ? 0 : 1;\n\n\t// Build working hours from preferences (for time grid views)\n\t// Working hours determine which slots are clickable and don't have striped pattern\n\t// Non-working hours get diagonal stripes and are disabled\n\tconst workingHours = useMemo(() => {\n\t\tconst hours: Record<number, { enabled: boolean; from: number; to: number }> = {};\n\t\tfor (let i = 0; i <= 6; i++) {\n\t\t\tconst isWeekend = i === 0 || i === 6;\n\t\t\t// Weekdays: use preferences, Weekends: use preferences if showWeekends, otherwise disabled\n\t\t\tif (!isWeekend) {\n\t\t\t\t// Weekdays (Mon-Fri): always have working hours from preferences\n\t\t\t\thours[i] = { enabled: true, from: preferences.startHour, to: preferences.endHour };\n\t\t\t} else if (preferences.showWeekends) {\n\t\t\t\t// Weekends with showWeekends: Saturday half-day (8-12), Sunday disabled\n\t\t\t\tif (i === 6) {\n\t\t\t\t\t// Saturday - half day (matching agenda-v2)\n\t\t\t\t\thours[i] = { enabled: true, from: 8, to: 12 };\n\t\t\t\t} else {\n\t\t\t\t\t// Sunday - disabled\n\t\t\t\t\thours[i] = { enabled: false, from: 0, to: 0 };\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Weekends without showWeekends: both disabled\n\t\t\t\thours[i] = { enabled: false, from: 0, to: 0 };\n\t\t\t}\n\t\t}\n\t\treturn hours;\n\t}, [preferences.startHour, preferences.endHour, preferences.showWeekends]);\n\n\t// Handle filter changes\n\tconst handleScheduleTypeFilterChange = useCallback(\n\t\t(ids: number[]) => {\n\t\t\tsetSelectedScheduleTypeIds(ids);\n\t\t\tonFiltersChange?.({\n\t\t\t\tscheduleTypeIds: ids,\n\t\t\t\tparticipantIds: selectedParticipantIds,\n\t\t\t});\n\t\t},\n\t\t[onFiltersChange, selectedParticipantIds]\n\t);\n\n\tconst handleParticipantFilterChange = useCallback(\n\t\t(ids: string[]) => {\n\t\t\tsetSelectedParticipantIds(ids);\n\t\t\tonFiltersChange?.({\n\t\t\t\tscheduleTypeIds: selectedScheduleTypeIds,\n\t\t\t\tparticipantIds: ids,\n\t\t\t});\n\t\t},\n\t\t[onFiltersChange, selectedScheduleTypeIds]\n\t);\n\n\t// Create render event adapters for different view types\n\t// Each view has a slightly different renderEvent signature\n\n\tconst dayWeekRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: {\n\t\t\tevent: CalendarEvent<TEventData>;\n\t\t\tposition: { top: number; height: number; left: number; width: number };\n\t\t}) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview,\n\t\t\t\tvariant: 'full',\n\t\t\t\tposition: { ...props.position, zIndex: 1 },\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, view, badgeVariant, onEventClick]);\n\n\tconst monthRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: { event: CalendarEvent<TEventData>; variant: 'compact' }) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview: 'month',\n\t\t\t\tvariant: props.variant,\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, badgeVariant, onEventClick]);\n\n\tconst agendaRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: { event: CalendarEvent<TEventData> }) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview: 'agenda',\n\t\t\t\tvariant: 'block',\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, badgeVariant, onEventClick]);\n\n\tconst renderView = () => {\n\t\tswitch (view) {\n\t\t\tcase 'day':\n\t\t\t\treturn (\n\t\t\t\t\t<DayView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tworkingHours={workingHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(dayWeekRenderEvent && { renderEvent: dayWeekRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'week':\n\t\t\t\treturn (\n\t\t\t\t\t<WeekView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tworkingHours={workingHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(dayWeekRenderEvent && { renderEvent: dayWeekRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'month':\n\t\t\t\treturn (\n\t\t\t\t\t<MonthView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(monthRenderEvent && { renderEvent: monthRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'agenda':\n\t\t\t\treturn (\n\t\t\t\t\t<AgendaView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(emptyState && { emptyState })}\n\t\t\t\t\t\t{...(agendaRenderEvent && { renderEvent: agendaRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tdefault:\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"flex items-center justify-center h-64 text-gray-500\">\n\t\t\t\t\t\tView &quot;{view}&quot; is not yet implemented\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t}\n\t};\n\n\t// ========================================================================\n\t// RENDER\n\t// ========================================================================\n\n\t// Header navigation handler\n\tconst handleNavigate = useCallback(\n\t\t(direction: 'prev' | 'next' | 'today') => {\n\t\t\tif (direction === 'prev') handleNavigatePrev();\n\t\t\telse if (direction === 'next') handleNavigateNext();\n\t\t\telse handleNavigateToday();\n\t\t},\n\t\t[handleNavigatePrev, handleNavigateNext, handleNavigateToday]\n\t);\n\n\t// Default header props (conditionally add optional props)\n\tconst headerProps: RenderHeaderProps = {\n\t\tview,\n\t\tcurrentDate: date,\n\t\tavailableViews,\n\t\tonViewChange: handleViewChange,\n\t\tonNavigate: handleNavigate,\n\t\tonNavigatePrev: handleNavigatePrev,\n\t\tonNavigateNext: handleNavigateNext,\n\t\tonNavigateToday: handleNavigateToday,\n\t\t...(onAddEvent && { onAddEvent }),\n\t\t...(headerActions && { actions: headerActions }),\n\t\tclassName: 'border-b border-gray-200 p-3',\n\t};\n\n\t// Calendar header props (includes events for count display + slots)\n\tconst calendarHeaderProps = {\n\t\t...headerProps,\n\t\tevents,\n\t\tweekStartsOn,\n\t\tsettingsContent,\n\t\tfilterContent,\n\t\tshowSettings,\n\t\tshowTimelineViews,\n\t};\n\n\t// Clear all filters handler\n\tconst handleClearAllFilters = useCallback(() => {\n\t\tsetSelectedScheduleTypeIds([]);\n\t\tsetSelectedParticipantIds([]);\n\t\tonFiltersChange?.({\n\t\t\tscheduleTypeIds: [],\n\t\t\tparticipantIds: [],\n\t\t});\n\t}, [onFiltersChange]);\n\n\treturn (\n\t\t<div className={cn('flex h-full bg-white border border-gray-200 rounded-lg', className)}>\n\t\t\t{/* Filter Sidebar */}\n\t\t\t{showFilterSidebar && (\n\t\t\t\t<div className=\"w-64 border-r border-gray-200 flex-shrink-0\">\n\t\t\t\t\t{renderFilterSidebar ? (\n\t\t\t\t\t\trenderFilterSidebar({\n\t\t\t\t\t\t\tscheduleTypes,\n\t\t\t\t\t\t\tselectedScheduleTypeIds,\n\t\t\t\t\t\t\tselectedParticipantIds,\n\t\t\t\t\t\t\tonScheduleTypeChange: handleScheduleTypeFilterChange,\n\t\t\t\t\t\t\tonParticipantChange: handleParticipantFilterChange,\n\t\t\t\t\t\t\tonClearAll: handleClearAllFilters,\n\t\t\t\t\t\t})\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"p-4 text-sm text-gray-500\">Filter sidebar not configured</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Main Calendar Area */}\n\t\t\t<div className=\"flex flex-col flex-1 min-w-0\">\n\t\t\t\t{/* Header */}\n\t\t\t\t{!hideHeader &&\n\t\t\t\t\t(renderHeader ? renderHeader(headerProps) : <CalendarHeader {...calendarHeaderProps} />)}\n\n\t\t\t\t{/* Calendar View */}\n\t\t\t\t<div className=\"flex-1 overflow-auto\">{renderView()}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"],"names":["baseStyles","headerStyles","contentStyles","fallbackViewStyles","DefaultCalendar","events","_resources","_scheduleTypes","initialView","initialDate","_initialFilters","userPreferences","badgeVariant","hideHeader","availableViews","onEventClick","onSlotSelect","onViewChange","onDateChange","className","style","headerActions","emptyState","_children","view","setView","useState","date","setDate","preferences","useMemo","DEFAULT_PREFERENCES","handleViewChange","useCallback","newView","handleDateChange","newDate","handleNavigatePrev","navigatePrev","handleNavigateNext","navigateNext","handleNavigateToday","navigateToday","handleDayClick","clickedDate","visibleHours","weekStartsOn","renderView","jsx","DayView","WeekView","MonthView","AgendaView","jsxs","CalendarHeader","direction","TailwindCalendar","scheduleTypes","showFilterSidebar","onAddEvent","onFiltersChange","renderEvent","_renderEventPopover","renderFilterSidebar","renderHeader","settingsContent","filterContent","showSettings","showTimelineViews","selectedScheduleTypeIds","setSelectedScheduleTypeIds","selectedParticipantIds","setSelectedParticipantIds","workingHours","hours","i","handleScheduleTypeFilterChange","ids","handleParticipantFilterChange","dayWeekRenderEvent","props","monthRenderEvent","agendaRenderEvent","handleNavigate","headerProps","calendarHeaderProps","handleClearAllFilters","cn"],"mappings":";;;;;AAwDA,MAAMA,KAA4B;AAAA,EACjC,SAAS;AAAA,EACT,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,UAAU;AAAA,EACV,YACC;AAAA,EACD,UAAU;AAAA,EACV,OAAO;AACR,GAEMC,KAA8B;AAAA,EACnC,cAAc;AACf,GAEMC,KAA+B;AAAA,EACpC,MAAM;AAAA,EACN,UAAU;AACX,GAEMC,KAAoC;AAAA,EACzC,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,QAAQ;AAAA,EACR,OAAO;AACR;AAuDO,SAASC,GAId;AAAA,EACD,QAAAC;AAAA,EACA,WAAWC;AAAA,EACX,eAAeC;AAAA,EACf,aAAAC,IAAc;AAAA,EACd,aAAAC;AAAA,EACA,gBAAgBC;AAAA,EAChB,aAAaC;AAAA,EACb,cAAAC,IAAe;AAAA,EACf,YAAAC,IAAa;AAAA,EACb,gBAAAC,IAAiB,CAAC,OAAO,QAAQ,SAAS,QAAQ;AAAA,EAClD,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,eAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAUC;AACX,GAAuE;AAKtE,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAwBlB,CAAW,GACrD,CAACmB,GAAMC,CAAO,IAAIF,EAAejB,KAAe,oBAAI,MAAM,GAG1DoB,IAAoCC;AAAA,IACzC,OAAO;AAAA,MACN,GAAGC;AAAA,MACH,GAAGpB;AAAA,IAAA;AAAA,IAEJ,CAACA,CAAe;AAAA,EAAA,GAOXqB,IAAmBC;AAAA,IACxB,CAACC,MAA2B;AAC3B,MAAAT,EAAQS,CAAO,GACfjB,IAAeiB,CAAO;AAAA,IACvB;AAAA,IACA,CAACjB,CAAY;AAAA,EAAA,GAGRkB,IAAmBF;AAAA,IACxB,CAACG,MAAkB;AAClB,MAAAR,EAAQQ,CAAO,GACflB,IAAekB,CAAO;AAAA,IACvB;AAAA,IACA,CAAClB,CAAY;AAAA,EAAA,GAGRmB,IAAqBJ,EAAY,MAAM;AAC5C,UAAMG,IAAUE,GAAaX,GAAMH,CAAI;AACvC,IAAAW,EAAiBC,CAAO;AAAA,EACzB,GAAG,CAACT,GAAMH,GAAMW,CAAgB,CAAC,GAE3BI,IAAqBN,EAAY,MAAM;AAC5C,UAAMG,IAAUI,GAAab,GAAMH,CAAI;AACvC,IAAAW,EAAiBC,CAAO;AAAA,EACzB,GAAG,CAACT,GAAMH,GAAMW,CAAgB,CAAC,GAE3BM,IAAsBR,EAAY,MAAM;AAC7C,UAAMG,IAAUM,GAAA;AAChB,IAAAP,EAAiBC,CAAO;AAAA,EACzB,GAAG,CAACD,CAAgB,CAAC,GAEfQ,IAAiBV;AAAA,IACtB,CAACW,MAAsB;AAEtB,MAAAT,EAAiBS,CAAW,GAC5BZ,EAAiB,KAAK;AAAA,IACvB;AAAA,IACA,CAACG,GAAkBH,CAAgB;AAAA,EAAA,GAQ9Ba,IAAef;AAAA,IACpB,OAAO;AAAA,MACN,WAAWD,EAAY;AAAA,MACvB,SAASA,EAAY;AAAA,IAAA;AAAA,IAEtB,CAACA,EAAY,WAAWA,EAAY,OAAO;AAAA,EAAA,GAItCiB,IAAsBjB,EAAY,mBAAmB,IAAI,IAAI,GAE7DkB,IAAa,MAAM;AACxB,YAAQvB,GAAA;AAAA,MACP,KAAK;AACJ,eACC,gBAAAwB;AAAA,UAACC;AAAA,UAAA;AAAA,YACA,QAAA5C;AAAA,YACA,MAAAsB;AAAA,YACA,cAAAf;AAAA,YACA,cAAAiC;AAAA,YACA,cAAchB,EAAY;AAAA,YACzB,GAAId,KAAgB,EAAE,cAAAA,EAAA;AAAA,YACtB,GAAIC,KAAgB,EAAE,cAAAA,EAAA;AAAA,UAAa;AAAA,QAAA;AAAA,MAIvC,KAAK;AACJ,eACC,gBAAAgC;AAAA,UAACE;AAAA,UAAA;AAAA,YACA,QAAA7C;AAAA,YACA,MAAAsB;AAAA,YACA,cAAAf;AAAA,YACA,cAAAkC;AAAA,YACA,cAAAD;AAAA,YACA,cAAchB,EAAY;AAAA,YAC1B,YAAYc;AAAA,YACX,GAAI5B,KAAgB,EAAE,cAAAA,EAAA;AAAA,YACtB,GAAIC,KAAgB,EAAE,cAAAA,EAAA;AAAA,UAAa;AAAA,QAAA;AAAA,MAIvC,KAAK;AACJ,eACC,gBAAAgC;AAAA,UAACG;AAAA,UAAA;AAAA,YACA,QAAA9C;AAAA,YACA,MAAAsB;AAAA,YACA,cAAAf;AAAA,YACA,cAAAkC;AAAA,YACA,YAAYH;AAAA,YACX,GAAI5B,KAAgB,EAAE,cAAAA,EAAA;AAAA,YACtB,GAAIC,KAAgB,EAAE,cAAAA,EAAA;AAAA,UAAa;AAAA,QAAA;AAAA,MAIvC,KAAK;AACJ,eACC,gBAAAgC;AAAA,UAACI;AAAA,UAAA;AAAA,YACA,QAAA/C;AAAA,YACA,MAAAsB;AAAA,YACA,cAAAf;AAAA,YACC,GAAIG,KAAgB,EAAE,cAAAA,EAAA;AAAA,YACtB,GAAIO,KAAc,EAAE,YAAAA,EAAA;AAAA,UAAW;AAAA,QAAA;AAAA,MAInC;AACC,eAAO,gBAAA+B,EAAC,OAAA,EAAI,OAAOlD,IAAoB,UAAA;AAAA,UAAA;AAAA,UAAYqB;AAAA,UAAK;AAAA,QAAA,GAA6B;AAAA,IAAA;AAAA,EAExF;AAMA,SACC,gBAAA6B,EAAC,SAAI,WAAAlC,GAAsB,OAAO,EAAE,GAAGnB,IAAY,GAAGoB,EAAA,GAEpD,UAAA;AAAA,IAAA,CAACP,KACD,gBAAAmC,EAAC,OAAA,EAAI,OAAO/C,IACX,UAAA,gBAAA+C;AAAA,MAACM;AAAA,MAAA;AAAA,QACA,MAAA9B;AAAA,QACA,aAAaG;AAAA,QACb,gBAAAb;AAAA,QACA,cAAckB;AAAA,QACd,YAAY,CAACuB,MAAc;AAC1B,UAAIA,MAAc,SAAQlB,EAAA,IACjBkB,MAAc,SAAQhB,EAAA,IAC1BE,EAAA;AAAA,QACN;AAAA,QACA,SAASpB;AAAA,QACT,WAAU;AAAA,MAAA;AAAA,IAAA,GAEZ;AAAA,IAID,gBAAA2B,EAAC,OAAA,EAAI,OAAO9C,IAAgB,cAAW,CAAE;AAAA,EAAA,GAC1C;AAEF;ACpHO,SAASsD,GAId;AAAA,EACD,QAAAnD;AAAA,EACA,WAAWC;AAAA,EACX,eAAAmD,IAAgB,CAAA;AAAA,EAChB,aAAAjD,IAAc;AAAA,EACd,aAAAC;AAAA,EACA,gBAAgBC;AAAA,EAChB,aAAaC;AAAA,EACb,cAAAC,IAAe;AAAA,EACf,YAAAC,IAAa;AAAA,EACb,mBAAA6C,IAAoB;AAAA,EACpB,gBAAA5C,IAAiB,CAAC,OAAO,QAAQ,SAAS,QAAQ;AAAA,EAClD,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAyC;AAAA,EACA,iBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAoBC;AAAA,EACpB,qBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,mBAAAC,IAAoB;AAAA,EACpB,WAAAjD;AAAA,EACA,eAAAE;AAAA,EACA,YAAAC;AAAA,EACA,UAAUC;AACX,GAAwE;AAKvE,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAwBlB,CAAW,GACrD,CAACmB,GAAMC,CAAO,IAAIF,EAAejB,KAAe,oBAAI,MAAM,GAG1D,CAAC4D,GAAyBC,CAA0B,IAAI5C,EAAmB,CAAA,CAAE,GAC7E,CAAC6C,GAAwBC,CAAyB,IAAI9C,EAAmB,CAAA,CAAE,GAG3EG,IAAoCC;AAAA,IACzC,OAAO;AAAA,MACN,GAAGC;AAAA,MACH,GAAGpB;AAAA,IAAA;AAAA,IAEJ,CAACA,CAAe;AAAA,EAAA,GAOXqB,IAAmBC;AAAA,IACxB,CAACC,MAA2B;AAC3B,MAAAT,EAAQS,CAAO,GACfjB,IAAeiB,CAAO;AAAA,IACvB;AAAA,IACA,CAACjB,CAAY;AAAA,EAAA,GAGRkB,IAAmBF;AAAA,IACxB,CAACG,MAAkB;AAClB,MAAAR,EAAQQ,CAAO,GACflB,IAAekB,CAAO;AAAA,IACvB;AAAA,IACA,CAAClB,CAAY;AAAA,EAAA,GAGRmB,IAAqBJ,EAAY,MAAM;AAC5C,UAAMG,IAAUE,GAAaX,GAAMH,CAAI;AACvC,IAAAW,EAAiBC,CAAO;AAAA,EACzB,GAAG,CAACT,GAAMH,GAAMW,CAAgB,CAAC,GAE3BI,IAAqBN,EAAY,MAAM;AAC5C,UAAMG,IAAUI,GAAab,GAAMH,CAAI;AACvC,IAAAW,EAAiBC,CAAO;AAAA,EACzB,GAAG,CAACT,GAAMH,GAAMW,CAAgB,CAAC,GAE3BM,IAAsBR,EAAY,MAAM;AAC7C,UAAMG,IAAUM,GAAA;AAChB,IAAAP,EAAiBC,CAAO;AAAA,EACzB,GAAG,CAACD,CAAgB,CAAC,GAEfQ,IAAiBV;AAAA,IACtB,CAACW,MAAsB;AAEtB,MAAAT,EAAiBS,CAAW,GAC5BZ,EAAiB,KAAK;AAAA,IACvB;AAAA,IACA,CAACG,GAAkBH,CAAgB;AAAA,EAAA,GAS9Ba,IAAef;AAAA,IACpB,OAAO;AAAA,MACN,WAAW;AAAA,MACX,SAAS;AAAA,IAAA;AAAA,IAEV,CAAA;AAAA,EAAC,GAIIgB,IAAsBjB,EAAY,mBAAmB,IAAI,IAAI,GAK7D4C,IAAe3C,EAAQ,MAAM;AAClC,UAAM4C,IAAwE,CAAA;AAC9E,aAASC,IAAI,GAAGA,KAAK,GAAGA;AAGvB,MAFkBA,MAAM,KAAKA,MAAM,IAKxB9C,EAAY,eAElB8C,MAAM,IAETD,EAAMC,CAAC,IAAI,EAAE,SAAS,IAAM,MAAM,GAAG,IAAI,GAAA,IAGzCD,EAAMC,CAAC,IAAI,EAAE,SAAS,IAAO,MAAM,GAAG,IAAI,EAAA,IAI3CD,EAAMC,CAAC,IAAI,EAAE,SAAS,IAAO,MAAM,GAAG,IAAI,EAAA,IAZ1CD,EAAMC,CAAC,IAAI,EAAE,SAAS,IAAM,MAAM9C,EAAY,WAAW,IAAIA,EAAY,QAAA;AAe3E,WAAO6C;AAAA,EACR,GAAG,CAAC7C,EAAY,WAAWA,EAAY,SAASA,EAAY,YAAY,CAAC,GAGnE+C,KAAiC3C;AAAA,IACtC,CAAC4C,MAAkB;AAClB,MAAAP,EAA2BO,CAAG,GAC9BjB,IAAkB;AAAA,QACjB,iBAAiBiB;AAAA,QACjB,gBAAgBN;AAAA,MAAA,CAChB;AAAA,IACF;AAAA,IACA,CAACX,GAAiBW,CAAsB;AAAA,EAAA,GAGnCO,KAAgC7C;AAAA,IACrC,CAAC4C,MAAkB;AAClB,MAAAL,EAA0BK,CAAG,GAC7BjB,IAAkB;AAAA,QACjB,iBAAiBS;AAAA,QACjB,gBAAgBQ;AAAA,MAAA,CAChB;AAAA,IACF;AAAA,IACA,CAACjB,GAAiBS,CAAuB;AAAA,EAAA,GAMpCU,IAAqBjD,EAAQ,MAAM;AACxC,QAAK+B;AACL,aAAO,CAACmB,MAIAnB,EAAY;AAAA,QAClB,OAAOmB,EAAM;AAAA,QACb,MAAAxD;AAAA,QACA,SAAS;AAAA,QACT,UAAU,EAAE,GAAGwD,EAAM,UAAU,QAAQ,EAAA;AAAA,QACvC,cAAApE;AAAA,QACA,GAAIG,KAAgB,EAAE,SAAS,MAAMA,EAAaiE,EAAM,KAAK,EAAA;AAAA,MAAE,CAC/D;AAAA,EAEH,GAAG,CAACnB,GAAarC,GAAMZ,GAAcG,CAAY,CAAC,GAE5CkE,IAAmBnD,EAAQ,MAAM;AACtC,QAAK+B;AACL,aAAO,CAACmB,MACAnB,EAAY;AAAA,QAClB,OAAOmB,EAAM;AAAA,QACb,MAAM;AAAA,QACN,SAASA,EAAM;AAAA,QACf,cAAApE;AAAA,QACA,GAAIG,KAAgB,EAAE,SAAS,MAAMA,EAAaiE,EAAM,KAAK,EAAA;AAAA,MAAE,CAC/D;AAAA,EAEH,GAAG,CAACnB,GAAajD,GAAcG,CAAY,CAAC,GAEtCmE,IAAoBpD,EAAQ,MAAM;AACvC,QAAK+B;AACL,aAAO,CAACmB,MACAnB,EAAY;AAAA,QAClB,OAAOmB,EAAM;AAAA,QACb,MAAM;AAAA,QACN,SAAS;AAAA,QACT,cAAApE;AAAA,QACA,GAAIG,KAAgB,EAAE,SAAS,MAAMA,EAAaiE,EAAM,KAAK,EAAA;AAAA,MAAE,CAC/D;AAAA,EAEH,GAAG,CAACnB,GAAajD,GAAcG,CAAY,CAAC,GAEtCgC,KAAa,MAAM;AACxB,YAAQvB,GAAA;AAAA,MACP,KAAK;AACJ,eACC,gBAAAwB;AAAA,UAACC;AAAA,UAAA;AAAA,YACA,QAAA5C;AAAA,YACA,MAAAsB;AAAA,YACA,cAAAf;AAAA,YACA,cAAAiC;AAAA,YACA,cAAA4B;AAAA,YACA,cAAc5C,EAAY;AAAA,YACzB,GAAId,KAAgB,EAAE,cAAAA,EAAA;AAAA,YACtB,GAAIC,KAAgB,EAAE,cAAAA,EAAA;AAAA,YACtB,GAAI+D,KAAsB,EAAE,aAAaA,EAAA;AAAA,UAAmB;AAAA,QAAA;AAAA,MAIhE,KAAK;AACJ,eACC,gBAAA/B;AAAA,UAACE;AAAA,UAAA;AAAA,YACA,QAAA7C;AAAA,YACA,MAAAsB;AAAA,YACA,cAAAf;AAAA,YACA,cAAAkC;AAAA,YACA,cAAAD;AAAA,YACA,cAAA4B;AAAA,YACA,cAAc5C,EAAY;AAAA,YAC1B,YAAYc;AAAA,YACX,GAAI5B,KAAgB,EAAE,cAAAA,EAAA;AAAA,YACtB,GAAIC,KAAgB,EAAE,cAAAA,EAAA;AAAA,YACtB,GAAI+D,KAAsB,EAAE,aAAaA,EAAA;AAAA,UAAmB;AAAA,QAAA;AAAA,MAIhE,KAAK;AACJ,eACC,gBAAA/B;AAAA,UAACG;AAAA,UAAA;AAAA,YACA,QAAA9C;AAAA,YACA,MAAAsB;AAAA,YACA,cAAAf;AAAA,YACA,cAAAkC;AAAA,YACA,YAAYH;AAAA,YACX,GAAI5B,KAAgB,EAAE,cAAAA,EAAA;AAAA,YACtB,GAAIC,KAAgB,EAAE,cAAAA,EAAA;AAAA,YACtB,GAAIiE,KAAoB,EAAE,aAAaA,EAAA;AAAA,UAAiB;AAAA,QAAA;AAAA,MAI5D,KAAK;AACJ,eACC,gBAAAjC;AAAA,UAACI;AAAA,UAAA;AAAA,YACA,QAAA/C;AAAA,YACA,MAAAsB;AAAA,YACA,cAAAf;AAAA,YACC,GAAIG,KAAgB,EAAE,cAAAA,EAAA;AAAA,YACtB,GAAIO,KAAc,EAAE,YAAAA,EAAA;AAAA,YACpB,GAAI4D,KAAqB,EAAE,aAAaA,EAAA;AAAA,UAAkB;AAAA,QAAA;AAAA,MAI9D;AACC,eACC,gBAAA7B,EAAC,OAAA,EAAI,WAAU,uDAAsD,UAAA;AAAA,UAAA;AAAA,UACxD7B;AAAA,UAAK;AAAA,QAAA,GAClB;AAAA,IAAA;AAAA,EAGJ,GAOM2D,KAAiBlD;AAAA,IACtB,CAACsB,MAAyC;AACzC,MAAIA,MAAc,SAAQlB,EAAA,IACjBkB,MAAc,SAAQhB,EAAA,IAC1BE,EAAA;AAAA,IACN;AAAA,IACA,CAACJ,GAAoBE,GAAoBE,CAAmB;AAAA,EAAA,GAIvD2C,KAAiC;AAAA,IACtC,MAAA5D;AAAA,IACA,aAAaG;AAAA,IACb,gBAAAb;AAAA,IACA,cAAckB;AAAA,IACd,YAAYmD;AAAA,IACZ,gBAAgB9C;AAAA,IAChB,gBAAgBE;AAAA,IAChB,iBAAiBE;AAAA,IACjB,GAAIkB,KAAc,EAAE,YAAAA,EAAA;AAAA,IACpB,GAAItC,KAAiB,EAAE,SAASA,EAAA;AAAA,IAChC,WAAW;AAAA,EAAA,GAINgE,KAAsB;AAAA,IAC3B,GAAGD;AAAA,IACH,QAAA/E;AAAA,IACA,cAAAyC;AAAA,IACA,iBAAAmB;AAAA,IACA,eAAAC;AAAA,IACA,cAAAC;AAAA,IACA,mBAAAC;AAAA,EAAA,GAIKkB,KAAwBrD,EAAY,MAAM;AAC/C,IAAAqC,EAA2B,CAAA,CAAE,GAC7BE,EAA0B,CAAA,CAAE,GAC5BZ,IAAkB;AAAA,MACjB,iBAAiB,CAAA;AAAA,MACjB,gBAAgB,CAAA;AAAA,IAAC,CACjB;AAAA,EACF,GAAG,CAACA,CAAe,CAAC;AAEpB,2BACE,OAAA,EAAI,WAAW2B,GAAG,0DAA0DpE,CAAS,GAEpF,UAAA;AAAA,IAAAuC,KACA,gBAAAV,EAAC,OAAA,EAAI,WAAU,+CACb,cACAe,EAAoB;AAAA,MACnB,eAAAN;AAAA,MACA,yBAAAY;AAAA,MACA,wBAAAE;AAAA,MACA,sBAAsBK;AAAA,MACtB,qBAAqBE;AAAA,MACrB,YAAYQ;AAAA,IAAA,CACZ,IAED,gBAAAtC,EAAC,SAAI,WAAU,6BAA4B,2CAA6B,GAE1E;AAAA,IAID,gBAAAK,EAAC,OAAA,EAAI,WAAU,gCAEb,UAAA;AAAA,MAAA,CAACxC,MACAmD,IAAeA,EAAaoB,EAAW,IAAI,gBAAApC,EAACM,IAAA,EAAgB,GAAG+B,GAAA,CAAqB;AAAA,MAGtF,gBAAArC,EAAC,OAAA,EAAI,WAAU,wBAAwB,eAAW,CAAE;AAAA,IAAA,EAAA,CACrD;AAAA,EAAA,GACD;AAEF;"}
1
+ {"version":3,"file":"tailwind-calendar-C3DidCJ5.js","sources":["../src/presets/default/default-calendar.tsx","../src/presets/tailwind/tailwind-calendar.tsx"],"sourcesContent":["/**\n * DefaultCalendar - Pre-styled Calendar Preset\n *\n * A fully styled calendar using CSS custom properties for theming.\n * Designed for projects that don't use TailwindCSS but want a complete solution.\n *\n * CSS Custom Properties (override these for theming):\n * - --ic-bg: Background color\n * - --ic-bg-muted: Muted background\n * - --ic-text: Primary text color\n * - --ic-text-muted: Secondary text color\n * - --ic-border: Border color\n * - --ic-primary: Primary/accent color\n * - --ic-primary-foreground: Text on primary background\n * - --ic-radius: Border radius\n *\n * @example\n * ```tsx\n * import { DefaultCalendar } from '@inno/calendar/presets';\n *\n * function MyAgenda() {\n * return (\n * <div style={{ '--ic-primary': '#6366f1' }}>\n * <DefaultCalendar\n * events={myEvents}\n * onEventClick={(event) => console.log('Clicked:', event)}\n * />\n * </div>\n * );\n * }\n * ```\n */\n\nimport { type CSSProperties, type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { CalendarHeader } from '../../components/header/calendar-header';\nimport { AgendaView } from '../../components/views/agenda-view';\nimport { DayView } from '../../components/views/day-view';\nimport { MonthView } from '../../components/views/month-view';\nimport { WeekView } from '../../components/views/week-view';\nimport { DEFAULT_PREFERENCES } from '../../core/constants';\nimport type {\n\tCalendarEvent,\n\tICalendarFilters,\n\tICalendarPreferences,\n\tIResource,\n\tIScheduleType,\n\tISelectionResult,\n\tTBadgeVariant,\n\tTCalendarView,\n} from '../../core/types';\nimport { navigateNext, navigatePrev, navigateToday } from '../../core/utils/grid-utils';\n\n// ============================================================================\n// STYLES (CSS-in-JS for zero-config usage)\n// ============================================================================\n\nconst baseStyles: CSSProperties = {\n\tdisplay: 'flex',\n\tflexDirection: 'column',\n\theight: '100%',\n\tminHeight: '400px',\n\tbackgroundColor: 'var(--ic-bg, #ffffff)',\n\tborder: '1px solid var(--ic-border, #e5e7eb)',\n\tborderRadius: 'var(--ic-radius, 0.5rem)',\n\toverflow: 'hidden',\n\tfontFamily:\n\t\t'var(--ic-font-family, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif)',\n\tfontSize: 'var(--ic-font-size, 0.875rem)',\n\tcolor: 'var(--ic-text, #111827)',\n};\n\nconst headerStyles: CSSProperties = {\n\tborderBottom: '1px solid var(--ic-border, #e5e7eb)',\n};\n\nconst contentStyles: CSSProperties = {\n\tflex: 1,\n\toverflow: 'auto',\n};\n\nconst fallbackViewStyles: CSSProperties = {\n\tdisplay: 'flex',\n\talignItems: 'center',\n\tjustifyContent: 'center',\n\theight: '16rem',\n\tcolor: 'var(--ic-text-muted, #6b7280)',\n};\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface DefaultCalendarProps<\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\t/** Available resources */\n\tresources?: IResource<TResourceData>[];\n\t/** Available schedule types */\n\tscheduleTypes?: IScheduleType<TScheduleTypeData>[];\n\t/** Initial view */\n\tinitialView?: TCalendarView;\n\t/** Initial date */\n\tinitialDate?: Date;\n\t/** Initial filters */\n\tinitialFilters?: ICalendarFilters;\n\t/** Preferences */\n\tpreferences?: Partial<ICalendarPreferences>;\n\t/** Badge variant for events (dot, colored, mixed) */\n\tbadgeVariant?: TBadgeVariant;\n\t/** Hide the header */\n\thideHeader?: boolean;\n\t/** Available views to show in view switcher */\n\tavailableViews?: TCalendarView[];\n\t/** Event click handler */\n\tonEventClick?: (event: CalendarEvent<TEventData>) => void;\n\t/** Slot selection handler */\n\tonSlotSelect?: (selection: ISelectionResult) => void;\n\t/** View change handler */\n\tonViewChange?: (view: TCalendarView) => void;\n\t/** Date change handler */\n\tonDateChange?: (date: Date) => void;\n\t/** Additional CSS class */\n\tclassName?: string;\n\t/** Custom style overrides */\n\tstyle?: CSSProperties;\n\t/** Custom header actions */\n\theaderActions?: ReactNode;\n\t/** Empty state for agenda view */\n\temptyState?: ReactNode;\n\t/** Children (for header slot) */\n\tchildren?: ReactNode;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function DefaultCalendar<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>({\n\tevents,\n\tresources: _resources,\n\tscheduleTypes: _scheduleTypes,\n\tinitialView = 'week',\n\tinitialDate,\n\tinitialFilters: _initialFilters,\n\tpreferences: userPreferences,\n\tbadgeVariant = 'colored',\n\thideHeader = false,\n\tavailableViews = ['day', 'week', 'month', 'agenda'],\n\tonEventClick,\n\tonSlotSelect,\n\tonViewChange,\n\tonDateChange,\n\tclassName = '',\n\tstyle,\n\theaderActions,\n\temptyState,\n\tchildren: _children,\n}: DefaultCalendarProps<TEventData, TScheduleTypeData, TResourceData>) {\n\t// ========================================================================\n\t// STATE\n\t// ========================================================================\n\n\tconst [view, setView] = useState<TCalendarView>(initialView);\n\tconst [date, setDate] = useState<Date>(initialDate ?? new Date());\n\n\t// Merge user preferences with defaults\n\tconst preferences: ICalendarPreferences = useMemo(\n\t\t() => ({\n\t\t\t...DEFAULT_PREFERENCES,\n\t\t\t...userPreferences,\n\t\t}),\n\t\t[userPreferences]\n\t);\n\n\t// ========================================================================\n\t// HANDLERS\n\t// ========================================================================\n\n\tconst handleViewChange = useCallback(\n\t\t(newView: TCalendarView) => {\n\t\t\tsetView(newView);\n\t\t\tonViewChange?.(newView);\n\t\t},\n\t\t[onViewChange]\n\t);\n\n\tconst handleDateChange = useCallback(\n\t\t(newDate: Date) => {\n\t\t\tsetDate(newDate);\n\t\t\tonDateChange?.(newDate);\n\t\t},\n\t\t[onDateChange]\n\t);\n\n\tconst handleNavigatePrev = useCallback(() => {\n\t\tconst newDate = navigatePrev(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateNext = useCallback(() => {\n\t\tconst newDate = navigateNext(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateToday = useCallback(() => {\n\t\tconst newDate = navigateToday();\n\t\thandleDateChange(newDate);\n\t}, [handleDateChange]);\n\n\tconst handleDayClick = useCallback(\n\t\t(clickedDate: Date) => {\n\t\t\t// Navigate to day view when clicking a day in month view\n\t\t\thandleDateChange(clickedDate);\n\t\t\thandleViewChange('day');\n\t\t},\n\t\t[handleDateChange, handleViewChange]\n\t);\n\n\t// ========================================================================\n\t// VIEW RENDERING\n\t// ========================================================================\n\n\t// Build visible hours from preferences\n\tconst visibleHours = useMemo(\n\t\t() => ({\n\t\t\tstartHour: preferences.startHour,\n\t\t\tendHour: preferences.endHour,\n\t\t}),\n\t\t[preferences.startHour, preferences.endHour]\n\t);\n\n\t// Week starts on (convert from 0-6 to 0 | 1)\n\tconst weekStartsOn: 0 | 1 = preferences.firstDayOfWeek === 0 ? 0 : 1;\n\n\tconst renderView = () => {\n\t\tswitch (view) {\n\t\t\tcase 'day':\n\t\t\t\treturn (\n\t\t\t\t\t<DayView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'week':\n\t\t\t\treturn (\n\t\t\t\t\t<WeekView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'month':\n\t\t\t\treturn (\n\t\t\t\t\t<MonthView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'agenda':\n\t\t\t\treturn (\n\t\t\t\t\t<AgendaView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(emptyState && { emptyState })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tdefault:\n\t\t\t\treturn <div style={fallbackViewStyles}>View &quot;{view}&quot; is not yet implemented</div>;\n\t\t}\n\t};\n\n\t// ========================================================================\n\t// RENDER\n\t// ========================================================================\n\n\treturn (\n\t\t<div className={className} style={{ ...baseStyles, ...style }}>\n\t\t\t{/* Header */}\n\t\t\t{!hideHeader && (\n\t\t\t\t<div style={headerStyles}>\n\t\t\t\t\t<CalendarHeader\n\t\t\t\t\t\tview={view}\n\t\t\t\t\t\tcurrentDate={date}\n\t\t\t\t\t\tavailableViews={availableViews}\n\t\t\t\t\t\tonViewChange={handleViewChange}\n\t\t\t\t\t\tonNavigate={(direction) => {\n\t\t\t\t\t\t\tif (direction === 'prev') handleNavigatePrev();\n\t\t\t\t\t\t\telse if (direction === 'next') handleNavigateNext();\n\t\t\t\t\t\t\telse handleNavigateToday();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tactions={headerActions}\n\t\t\t\t\t\tclassName=\"p-3\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Calendar View */}\n\t\t\t<div style={contentStyles}>{renderView()}</div>\n\t\t</div>\n\t);\n}\n","/**\n * TailwindCalendar - Tailwind-Optimized Calendar Preset\n *\n * A fully featured, ready-to-use calendar component designed for TailwindCSS projects.\n * Composes all calendar components into a cohesive experience.\n *\n * Features:\n * - Full customization via render props (renderEvent, renderEventPopover, renderFilterSidebar)\n * - All visual components can be replaced while keeping state management\n * - Matches production quality when used with custom components\n *\n * @example\n * ```tsx\n * import { TailwindCalendar } from '@inno/calendar/presets';\n *\n * function MyAgenda() {\n * return (\n * <TailwindCalendar\n * events={myEvents}\n * onEventClick={(event) => console.log('Clicked:', event)}\n * onSlotSelect={(selection) => console.log('Selected:', selection)}\n * // Custom components for production quality\n * renderEvent={(event) => <MyEventCard event={event} />}\n * renderEventPopover={(event, onClose) => <MyEventPopover event={event} onClose={onClose} />}\n * renderFilterSidebar={(props) => <MyFilterSidebar {...props} />}\n * />\n * );\n * }\n * ```\n */\n\nimport { type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { CalendarHeader } from '../../components/header/calendar-header';\nimport { AgendaView } from '../../components/views/agenda-view';\nimport { DayView } from '../../components/views/day-view';\nimport { MonthView } from '../../components/views/month-view';\nimport { WeekView } from '../../components/views/week-view';\nimport { DEFAULT_PREFERENCES } from '../../core/constants';\nimport type {\n\tCalendarEvent,\n\tICalendarFilters,\n\tICalendarPreferences,\n\tIEventPosition,\n\tIResource,\n\tIScheduleType,\n\tISelectionResult,\n\tTBadgeVariant,\n\tTCalendarView,\n} from '../../core/types';\nimport { navigateNext, navigatePrev, navigateToday } from '../../core/utils/grid-utils';\nimport { cn } from '../../lib/utils';\n\n// ============================================================================\n// RENDER PROP TYPES\n// ============================================================================\n\n/**\n * Props for custom event rendering\n */\nexport interface RenderEventProps<TEventData = Record<string, unknown>> {\n\tevent: CalendarEvent<TEventData>;\n\tview: TCalendarView;\n\tvariant: 'full' | 'compact' | 'dot' | 'block';\n\tposition?: IEventPosition;\n\tbadgeVariant: TBadgeVariant;\n\tonClick?: () => void;\n}\n\n/**\n * Props for custom event popover rendering\n */\nexport interface RenderEventPopoverProps<TEventData = Record<string, unknown>> {\n\tevent: CalendarEvent<TEventData>;\n\tonClose: () => void;\n}\n\n/**\n * Props for custom filter sidebar rendering\n */\nexport interface RenderFilterSidebarProps<TScheduleTypeData = Record<string, unknown>> {\n\tscheduleTypes: IScheduleType<TScheduleTypeData>[];\n\tselectedScheduleTypeIds: number[];\n\tonScheduleTypeChange: (ids: number[]) => void;\n\tselectedParticipantIds: string[];\n\tonParticipantChange: (ids: string[]) => void;\n\tonClearAll?: () => void;\n}\n\n/**\n * Props for custom header rendering\n */\nexport interface RenderHeaderProps {\n\tview: TCalendarView;\n\tcurrentDate: Date;\n\tavailableViews: TCalendarView[];\n\tonViewChange: (view: TCalendarView) => void;\n\tonNavigate: (direction: 'prev' | 'next' | 'today') => void;\n\tonNavigatePrev?: () => void;\n\tonNavigateNext?: () => void;\n\tonNavigateToday?: () => void;\n\tonAddEvent?: () => void;\n\tactions?: ReactNode;\n\tclassName?: string;\n}\n\n// ============================================================================\n// COMPONENT PROPS\n// ============================================================================\n\nexport interface TailwindCalendarProps<\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\t/** Available resources */\n\tresources?: IResource<TResourceData>[];\n\t/** Available schedule types */\n\tscheduleTypes?: IScheduleType<TScheduleTypeData>[];\n\t/** Initial view */\n\tinitialView?: TCalendarView;\n\t/** Initial date */\n\tinitialDate?: Date;\n\t/** Initial filters */\n\tinitialFilters?: ICalendarFilters;\n\t/** Preferences */\n\tpreferences?: Partial<ICalendarPreferences>;\n\t/** Badge variant for events (dot, colored, mixed) */\n\tbadgeVariant?: TBadgeVariant;\n\t/** Hide the header */\n\thideHeader?: boolean;\n\t/** Show filter sidebar */\n\tshowFilterSidebar?: boolean;\n\t/** Available views to show in view switcher */\n\tavailableViews?: TCalendarView[];\n\n\t// ========================================================================\n\t// CALLBACKS\n\t// ========================================================================\n\n\t/** Event click handler */\n\tonEventClick?: (event: CalendarEvent<TEventData>) => void;\n\t/** Slot selection handler */\n\tonSlotSelect?: (selection: ISelectionResult) => void;\n\t/** View change handler */\n\tonViewChange?: (view: TCalendarView) => void;\n\t/** Date change handler */\n\tonDateChange?: (date: Date) => void;\n\t/** Add event handler (for header button) */\n\tonAddEvent?: () => void;\n\t/** Filter change handler */\n\tonFiltersChange?: (filters: ICalendarFilters) => void;\n\n\t// ========================================================================\n\t// RENDER PROPS (for custom components)\n\t// ========================================================================\n\n\t/**\n\t * Custom event renderer\n\t * Use this to inject your own EventCard component\n\t */\n\trenderEvent?: (props: RenderEventProps<TEventData>) => ReactNode;\n\n\t/**\n\t * Custom event popover renderer\n\t * Use this to inject your own EventPopover component\n\t * If not provided, a basic popover is shown\n\t */\n\trenderEventPopover?: (props: RenderEventPopoverProps<TEventData>) => ReactNode;\n\n\t/**\n\t * Custom filter sidebar renderer\n\t * Use this to inject your own CalendarFilterSidebar component\n\t */\n\trenderFilterSidebar?: (props: RenderFilterSidebarProps<TScheduleTypeData>) => ReactNode;\n\n\t/**\n\t * Custom header renderer\n\t * Use this to inject your own CalendarHeader component\n\t */\n\trenderHeader?: (props: RenderHeaderProps) => ReactNode;\n\n\t// ========================================================================\n\t// HEADER SLOTS\n\t// ========================================================================\n\n\t/** Settings popover content (for default header) */\n\tsettingsContent?: ReactNode;\n\t/** Filter row content (for default header) */\n\tfilterContent?: ReactNode;\n\t/** Whether to show the settings button (default: true) */\n\tshowSettings?: boolean;\n\t/** Whether to show timeline view options (default: false) */\n\tshowTimelineViews?: boolean;\n\n\t// ========================================================================\n\t// STYLING\n\t// ========================================================================\n\n\t/** Additional CSS class */\n\tclassName?: string;\n\t/** Custom header actions (shown in default header) */\n\theaderActions?: ReactNode;\n\t/** Empty state for agenda view */\n\temptyState?: ReactNode;\n\t/** Children (for header slot) */\n\tchildren?: ReactNode;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function TailwindCalendar<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>({\n\tevents,\n\tresources: _resources,\n\tscheduleTypes = [],\n\tinitialView = 'week',\n\tinitialDate,\n\tinitialFilters: _initialFilters,\n\tpreferences: userPreferences,\n\tbadgeVariant = 'colored',\n\thideHeader = false,\n\tshowFilterSidebar = false,\n\tavailableViews = ['day', 'week', 'month', 'agenda'],\n\tonEventClick,\n\tonSlotSelect,\n\tonViewChange,\n\tonDateChange,\n\tonAddEvent,\n\tonFiltersChange,\n\trenderEvent,\n\trenderEventPopover: _renderEventPopover,\n\trenderFilterSidebar,\n\trenderHeader,\n\tsettingsContent,\n\tfilterContent,\n\tshowSettings = true,\n\tshowTimelineViews = false,\n\tclassName,\n\theaderActions,\n\temptyState,\n\tchildren: _children,\n}: TailwindCalendarProps<TEventData, TScheduleTypeData, TResourceData>) {\n\t// ========================================================================\n\t// STATE\n\t// ========================================================================\n\n\tconst [view, setView] = useState<TCalendarView>(initialView);\n\tconst [date, setDate] = useState<Date>(initialDate ?? new Date());\n\n\t// Filter state (for filter sidebar)\n\tconst [selectedScheduleTypeIds, setSelectedScheduleTypeIds] = useState<number[]>([]);\n\tconst [selectedParticipantIds, setSelectedParticipantIds] = useState<string[]>([]);\n\n\t// Merge user preferences with defaults\n\tconst preferences: ICalendarPreferences = useMemo(\n\t\t() => ({\n\t\t\t...DEFAULT_PREFERENCES,\n\t\t\t...userPreferences,\n\t\t}),\n\t\t[userPreferences]\n\t);\n\n\t// ========================================================================\n\t// HANDLERS\n\t// ========================================================================\n\n\tconst handleViewChange = useCallback(\n\t\t(newView: TCalendarView) => {\n\t\t\tsetView(newView);\n\t\t\tonViewChange?.(newView);\n\t\t},\n\t\t[onViewChange]\n\t);\n\n\tconst handleDateChange = useCallback(\n\t\t(newDate: Date) => {\n\t\t\tsetDate(newDate);\n\t\t\tonDateChange?.(newDate);\n\t\t},\n\t\t[onDateChange]\n\t);\n\n\tconst handleNavigatePrev = useCallback(() => {\n\t\tconst newDate = navigatePrev(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateNext = useCallback(() => {\n\t\tconst newDate = navigateNext(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateToday = useCallback(() => {\n\t\tconst newDate = navigateToday();\n\t\thandleDateChange(newDate);\n\t}, [handleDateChange]);\n\n\tconst handleDayClick = useCallback(\n\t\t(clickedDate: Date) => {\n\t\t\t// Navigate to day view when clicking a day in month view\n\t\t\thandleDateChange(clickedDate);\n\t\t\thandleViewChange('day');\n\t\t},\n\t\t[handleDateChange, handleViewChange]\n\t);\n\n\t// ========================================================================\n\t// VIEW RENDERING\n\t// ========================================================================\n\n\t// Visible hours - show all hours (0-24) so users can see the full day\n\t// The working hours determine which slots have striped (disabled) appearance\n\tconst visibleHours = useMemo(\n\t\t() => ({\n\t\t\tstartHour: 0,\n\t\t\tendHour: 24,\n\t\t}),\n\t\t[]\n\t);\n\n\t// Week starts on (convert from 0-6 to 0 | 1)\n\tconst weekStartsOn: 0 | 1 = preferences.firstDayOfWeek === 0 ? 0 : 1;\n\n\t// Build working hours from preferences (for time grid views)\n\t// Working hours determine which slots are clickable and don't have striped pattern\n\t// Non-working hours get diagonal stripes and are disabled\n\tconst workingHours = useMemo(() => {\n\t\tconst hours: Record<number, { enabled: boolean; from: number; to: number }> = {};\n\t\tfor (let i = 0; i <= 6; i++) {\n\t\t\tconst isWeekend = i === 0 || i === 6;\n\t\t\t// Weekdays: use preferences, Weekends: use preferences if showWeekends, otherwise disabled\n\t\t\tif (!isWeekend) {\n\t\t\t\t// Weekdays (Mon-Fri): always have working hours from preferences\n\t\t\t\thours[i] = { enabled: true, from: preferences.startHour, to: preferences.endHour };\n\t\t\t} else if (preferences.showWeekends) {\n\t\t\t\t// Weekends with showWeekends: Saturday half-day (8-12), Sunday disabled\n\t\t\t\tif (i === 6) {\n\t\t\t\t\t// Saturday - half day (matching agenda-v2)\n\t\t\t\t\thours[i] = { enabled: true, from: 8, to: 12 };\n\t\t\t\t} else {\n\t\t\t\t\t// Sunday - disabled\n\t\t\t\t\thours[i] = { enabled: false, from: 0, to: 0 };\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Weekends without showWeekends: both disabled\n\t\t\t\thours[i] = { enabled: false, from: 0, to: 0 };\n\t\t\t}\n\t\t}\n\t\treturn hours;\n\t}, [preferences.startHour, preferences.endHour, preferences.showWeekends]);\n\n\t// Handle filter changes\n\tconst handleScheduleTypeFilterChange = useCallback(\n\t\t(ids: number[]) => {\n\t\t\tsetSelectedScheduleTypeIds(ids);\n\t\t\tonFiltersChange?.({\n\t\t\t\tscheduleTypeIds: ids,\n\t\t\t\tparticipantIds: selectedParticipantIds,\n\t\t\t});\n\t\t},\n\t\t[onFiltersChange, selectedParticipantIds]\n\t);\n\n\tconst handleParticipantFilterChange = useCallback(\n\t\t(ids: string[]) => {\n\t\t\tsetSelectedParticipantIds(ids);\n\t\t\tonFiltersChange?.({\n\t\t\t\tscheduleTypeIds: selectedScheduleTypeIds,\n\t\t\t\tparticipantIds: ids,\n\t\t\t});\n\t\t},\n\t\t[onFiltersChange, selectedScheduleTypeIds]\n\t);\n\n\t// Create render event adapters for different view types\n\t// Each view has a slightly different renderEvent signature\n\n\tconst dayWeekRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: {\n\t\t\tevent: CalendarEvent<TEventData>;\n\t\t\tposition: { top: number; height: number; left: number; width: number };\n\t\t}) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview,\n\t\t\t\tvariant: 'full',\n\t\t\t\tposition: { ...props.position, zIndex: 1 },\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, view, badgeVariant, onEventClick]);\n\n\tconst monthRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: { event: CalendarEvent<TEventData>; variant: 'compact' }) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview: 'month',\n\t\t\t\tvariant: props.variant,\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, badgeVariant, onEventClick]);\n\n\tconst agendaRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: { event: CalendarEvent<TEventData> }) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview: 'agenda',\n\t\t\t\tvariant: 'block',\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, badgeVariant, onEventClick]);\n\n\tconst renderView = () => {\n\t\tswitch (view) {\n\t\t\tcase 'day':\n\t\t\t\treturn (\n\t\t\t\t\t<DayView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tworkingHours={workingHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(dayWeekRenderEvent && { renderEvent: dayWeekRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'week':\n\t\t\t\treturn (\n\t\t\t\t\t<WeekView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tworkingHours={workingHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(dayWeekRenderEvent && { renderEvent: dayWeekRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'month':\n\t\t\t\treturn (\n\t\t\t\t\t<MonthView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(monthRenderEvent && { renderEvent: monthRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'agenda':\n\t\t\t\treturn (\n\t\t\t\t\t<AgendaView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(emptyState && { emptyState })}\n\t\t\t\t\t\t{...(agendaRenderEvent && { renderEvent: agendaRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tdefault:\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"flex items-center justify-center h-64 text-gray-500\">\n\t\t\t\t\t\tView &quot;{view}&quot; is not yet implemented\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t}\n\t};\n\n\t// ========================================================================\n\t// RENDER\n\t// ========================================================================\n\n\t// Header navigation handler\n\tconst handleNavigate = useCallback(\n\t\t(direction: 'prev' | 'next' | 'today') => {\n\t\t\tif (direction === 'prev') handleNavigatePrev();\n\t\t\telse if (direction === 'next') handleNavigateNext();\n\t\t\telse handleNavigateToday();\n\t\t},\n\t\t[handleNavigatePrev, handleNavigateNext, handleNavigateToday]\n\t);\n\n\t// Default header props (conditionally add optional props)\n\tconst headerProps: RenderHeaderProps = {\n\t\tview,\n\t\tcurrentDate: date,\n\t\tavailableViews,\n\t\tonViewChange: handleViewChange,\n\t\tonNavigate: handleNavigate,\n\t\tonNavigatePrev: handleNavigatePrev,\n\t\tonNavigateNext: handleNavigateNext,\n\t\tonNavigateToday: handleNavigateToday,\n\t\t...(onAddEvent && { onAddEvent }),\n\t\t...(headerActions && { actions: headerActions }),\n\t\tclassName: 'border-b border-gray-200 p-3',\n\t};\n\n\t// Calendar header props (includes events for count display + slots)\n\tconst calendarHeaderProps = {\n\t\t...headerProps,\n\t\tevents,\n\t\tweekStartsOn,\n\t\tsettingsContent,\n\t\tfilterContent,\n\t\tshowSettings,\n\t\tshowTimelineViews,\n\t};\n\n\t// Clear all filters handler\n\tconst handleClearAllFilters = useCallback(() => {\n\t\tsetSelectedScheduleTypeIds([]);\n\t\tsetSelectedParticipantIds([]);\n\t\tonFiltersChange?.({\n\t\t\tscheduleTypeIds: [],\n\t\t\tparticipantIds: [],\n\t\t});\n\t}, [onFiltersChange]);\n\n\treturn (\n\t\t<div className={cn('flex h-full bg-white border border-gray-200 rounded-lg', className)}>\n\t\t\t{/* Filter Sidebar */}\n\t\t\t{showFilterSidebar && (\n\t\t\t\t<div className=\"w-64 border-r border-gray-200 flex-shrink-0\">\n\t\t\t\t\t{renderFilterSidebar ? (\n\t\t\t\t\t\trenderFilterSidebar({\n\t\t\t\t\t\t\tscheduleTypes,\n\t\t\t\t\t\t\tselectedScheduleTypeIds,\n\t\t\t\t\t\t\tselectedParticipantIds,\n\t\t\t\t\t\t\tonScheduleTypeChange: handleScheduleTypeFilterChange,\n\t\t\t\t\t\t\tonParticipantChange: handleParticipantFilterChange,\n\t\t\t\t\t\t\tonClearAll: handleClearAllFilters,\n\t\t\t\t\t\t})\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"p-4 text-sm text-gray-500\">Filter sidebar not configured</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Main Calendar Area */}\n\t\t\t<div className=\"flex flex-col flex-1 min-w-0\">\n\t\t\t\t{/* Header */}\n\t\t\t\t{!hideHeader &&\n\t\t\t\t\t(renderHeader ? renderHeader(headerProps) : <CalendarHeader {...calendarHeaderProps} />)}\n\n\t\t\t\t{/* Calendar View */}\n\t\t\t\t<div className=\"flex-1 overflow-auto\">{renderView()}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"],"names":["baseStyles","headerStyles","contentStyles","fallbackViewStyles","DefaultCalendar","events","_resources","_scheduleTypes","initialView","initialDate","_initialFilters","userPreferences","badgeVariant","hideHeader","availableViews","onEventClick","onSlotSelect","onViewChange","onDateChange","className","style","headerActions","emptyState","_children","view","setView","useState","date","setDate","preferences","useMemo","DEFAULT_PREFERENCES","handleViewChange","useCallback","newView","handleDateChange","newDate","handleNavigatePrev","navigatePrev","handleNavigateNext","navigateNext","handleNavigateToday","navigateToday","handleDayClick","clickedDate","visibleHours","weekStartsOn","renderView","jsx","DayView","WeekView","MonthView","AgendaView","jsxs","CalendarHeader","direction","TailwindCalendar","scheduleTypes","showFilterSidebar","onAddEvent","onFiltersChange","renderEvent","_renderEventPopover","renderFilterSidebar","renderHeader","settingsContent","filterContent","showSettings","showTimelineViews","selectedScheduleTypeIds","setSelectedScheduleTypeIds","selectedParticipantIds","setSelectedParticipantIds","workingHours","hours","i","handleScheduleTypeFilterChange","ids","handleParticipantFilterChange","dayWeekRenderEvent","props","monthRenderEvent","agendaRenderEvent","handleNavigate","headerProps","calendarHeaderProps","handleClearAllFilters","cn"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const r=require("react/jsx-runtime"),s=require("react"),y=require("./week-view-B9_48WmF.cjs"),p=require("./position-utils-BQpbtF6N.cjs"),ce=require("./index-D2U2F80P.cjs"),de={display:"flex",flexDirection:"column",height:"100%",minHeight:"400px",backgroundColor:"var(--ic-bg, #ffffff)",border:"1px solid var(--ic-border, #e5e7eb)",borderRadius:"var(--ic-radius, 0.5rem)",overflow:"hidden",fontFamily:'var(--ic-font-family, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif)',fontSize:"var(--ic-font-size, 0.875rem)",color:"var(--ic-text, #111827)"},ue={borderBottom:"1px solid var(--ic-border, #e5e7eb)"},fe={flex:1,overflow:"auto"},he={display:"flex",alignItems:"center",justifyContent:"center",height:"16rem",color:"var(--ic-text-muted, #6b7280)"};function ye({events:d,resources:ee,scheduleTypes:G,initialView:R="week",initialDate:_,initialFilters:se,preferences:g,badgeVariant:n="colored",hideHeader:W=!1,availableViews:F=["day","week","month","agenda"],onEventClick:u,onSlotSelect:a,onViewChange:x,onDateChange:N,className:j="",style:H,headerActions:b,emptyState:i,children:ae}){const[f,T]=s.useState(R),[c,q]=s.useState(_??new Date),w=s.useMemo(()=>({...p.DEFAULT_PREFERENCES,...g}),[g]),k=s.useCallback(t=>{T(t),x?.(t)},[x]),h=s.useCallback(t=>{q(t),N?.(t)},[N]),C=s.useCallback(()=>{const t=p.navigatePrev(c,f);h(t)},[c,f,h]),I=s.useCallback(()=>{const t=p.navigateNext(c,f);h(t)},[c,f,h]),J=s.useCallback(()=>{const t=p.navigateToday();h(t)},[h]),l=s.useCallback(t=>{h(t),k("day")},[h,k]),P=s.useMemo(()=>({startHour:w.startHour,endHour:w.endHour}),[w.startHour,w.endHour]),o=w.firstDayOfWeek===0?0:1,A=()=>{switch(f){case"day":return r.jsx(y.DayView,{events:d,date:c,badgeVariant:n,visibleHours:P,slotDuration:w.slotDuration,...u&&{onEventClick:u},...a&&{onSlotSelect:a}});case"week":return r.jsx(y.WeekView,{events:d,date:c,badgeVariant:n,weekStartsOn:o,visibleHours:P,slotDuration:w.slotDuration,onDayClick:l,...u&&{onEventClick:u},...a&&{onSlotSelect:a}});case"month":return r.jsx(y.MonthView,{events:d,date:c,badgeVariant:n,weekStartsOn:o,onDayClick:l,...u&&{onEventClick:u},...a&&{onSlotSelect:a}});case"agenda":return r.jsx(y.AgendaView,{events:d,date:c,badgeVariant:n,...u&&{onEventClick:u},...i&&{emptyState:i}});default:return r.jsxs("div",{style:he,children:['View "',f,'" is not yet implemented']})}};return r.jsxs("div",{className:j,style:{...de,...H},children:[!W&&r.jsx("div",{style:ue,children:r.jsx(y.CalendarHeader,{view:f,currentDate:c,availableViews:F,onViewChange:k,onNavigate:t=>{t==="prev"?C():t==="next"?I():J()},actions:b,className:"p-3"})}),r.jsx("div",{style:fe,children:A()})]})}function xe({events:d,resources:ee,scheduleTypes:G=[],initialView:R="week",initialDate:_,initialFilters:se,preferences:g,badgeVariant:n="colored",hideHeader:W=!1,showFilterSidebar:F=!1,availableViews:u=["day","week","month","agenda"],onEventClick:a,onSlotSelect:x,onViewChange:N,onDateChange:j,onAddEvent:H,onFiltersChange:b,renderEvent:i,renderEventPopover:ae,renderFilterSidebar:f,renderHeader:T,settingsContent:c,filterContent:q,showSettings:w=!0,showTimelineViews:k=!1,className:h,headerActions:C,emptyState:I,children:J}){const[l,P]=s.useState(R),[o,A]=s.useState(_??new Date),[t,K]=s.useState([]),[O,Q]=s.useState([]),m=s.useMemo(()=>({...p.DEFAULT_PREFERENCES,...g}),[g]),U=s.useCallback(e=>{P(e),N?.(e)},[N]),D=s.useCallback(e=>{A(e),j?.(e)},[j]),V=s.useCallback(()=>{const e=p.navigatePrev(o,l);D(e)},[o,l,D]),z=s.useCallback(()=>{const e=p.navigateNext(o,l);D(e)},[o,l,D]),B=s.useCallback(()=>{const e=p.navigateToday();D(e)},[D]),S=s.useCallback(e=>{D(e),U("day")},[D,U]),X=s.useMemo(()=>({startHour:0,endHour:24}),[]),L=m.firstDayOfWeek===0?0:1,Y=s.useMemo(()=>{const e={};for(let v=0;v<=6;v++)v===0||v===6?m.showWeekends?v===6?e[v]={enabled:!0,from:8,to:12}:e[v]={enabled:!1,from:0,to:0}:e[v]={enabled:!1,from:0,to:0}:e[v]={enabled:!0,from:m.startHour,to:m.endHour};return e},[m.startHour,m.endHour,m.showWeekends]),te=s.useCallback(e=>{K(e),b?.({scheduleTypeIds:e,participantIds:O})},[b,O]),re=s.useCallback(e=>{Q(e),b?.({scheduleTypeIds:t,participantIds:e})},[b,t]),M=s.useMemo(()=>{if(i)return e=>i({event:e.event,view:l,variant:"full",position:{...e.position,zIndex:1},badgeVariant:n,...a&&{onClick:()=>a(e.event)}})},[i,l,n,a]),Z=s.useMemo(()=>{if(i)return e=>i({event:e.event,view:"month",variant:e.variant,badgeVariant:n,...a&&{onClick:()=>a(e.event)}})},[i,n,a]),$=s.useMemo(()=>{if(i)return e=>i({event:e.event,view:"agenda",variant:"block",badgeVariant:n,...a&&{onClick:()=>a(e.event)}})},[i,n,a]),ne=()=>{switch(l){case"day":return r.jsx(y.DayView,{events:d,date:o,badgeVariant:n,visibleHours:X,workingHours:Y,slotDuration:m.slotDuration,...a&&{onEventClick:a},...x&&{onSlotSelect:x},...M&&{renderEvent:M}});case"week":return r.jsx(y.WeekView,{events:d,date:o,badgeVariant:n,weekStartsOn:L,visibleHours:X,workingHours:Y,slotDuration:m.slotDuration,onDayClick:S,...a&&{onEventClick:a},...x&&{onSlotSelect:x},...M&&{renderEvent:M}});case"month":return r.jsx(y.MonthView,{events:d,date:o,badgeVariant:n,weekStartsOn:L,onDayClick:S,...a&&{onEventClick:a},...x&&{onSlotSelect:x},...Z&&{renderEvent:Z}});case"agenda":return r.jsx(y.AgendaView,{events:d,date:o,badgeVariant:n,...a&&{onEventClick:a},...I&&{emptyState:I},...$&&{renderEvent:$}});default:return r.jsxs("div",{className:"flex items-center justify-center h-64 text-gray-500",children:['View "',l,'" is not yet implemented']})}},ie=s.useCallback(e=>{e==="prev"?V():e==="next"?z():B()},[V,z,B]),E={view:l,currentDate:o,availableViews:u,onViewChange:U,onNavigate:ie,onNavigatePrev:V,onNavigateNext:z,onNavigateToday:B,...H&&{onAddEvent:H},...C&&{actions:C},className:"border-b border-gray-200 p-3"},le={...E,events:d,weekStartsOn:L,settingsContent:c,filterContent:q,showSettings:w,showTimelineViews:k},oe=s.useCallback(()=>{K([]),Q([]),b?.({scheduleTypeIds:[],participantIds:[]})},[b]);return r.jsxs("div",{className:ce.cn("flex h-full bg-white border border-gray-200 rounded-lg",h),children:[F&&r.jsx("div",{className:"w-64 border-r border-gray-200 flex-shrink-0",children:f?f({scheduleTypes:G,selectedScheduleTypeIds:t,selectedParticipantIds:O,onScheduleTypeChange:te,onParticipantChange:re,onClearAll:oe}):r.jsx("div",{className:"p-4 text-sm text-gray-500",children:"Filter sidebar not configured"})}),r.jsxs("div",{className:"flex flex-col flex-1 min-w-0",children:[!W&&(T?T(E):r.jsx(y.CalendarHeader,{...le})),r.jsx("div",{className:"flex-1 overflow-auto",children:ne()})]})]})}exports.DefaultCalendar=ye;exports.TailwindCalendar=xe;
2
+ //# sourceMappingURL=tailwind-calendar-iFeIx0Ci.cjs.map