calendarkit-pro 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,44 +1,64 @@
1
- 'use strict';
1
+ "use client";
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
2
30
 
3
- var React15 = require('react');
4
- var core = require('@dnd-kit/core');
5
- var modifiers = require('@dnd-kit/modifiers');
6
- var framerMotion = require('framer-motion');
7
- var dateFns = require('date-fns');
8
- var classVarianceAuthority = require('class-variance-authority');
9
- var clsx = require('clsx');
10
- var tailwindMerge = require('tailwind-merge');
11
- var lucideReact = require('lucide-react');
12
- var dateFnsTz = require('date-fns-tz');
13
- var utilities = require('@dnd-kit/utilities');
14
- var rrule = require('rrule');
31
+ // src/index.tsx
32
+ var index_exports = {};
33
+ __export(index_exports, {
34
+ Scheduler: () => Scheduler,
35
+ cn: () => cn
36
+ });
37
+ module.exports = __toCommonJS(index_exports);
38
+ var import_react19 = __toESM(require("react"));
39
+ var import_core3 = require("@dnd-kit/core");
40
+ var import_modifiers = require("@dnd-kit/modifiers");
41
+ var import_framer_motion4 = require("framer-motion");
15
42
 
16
- function _interopNamespace(e) {
17
- if (e && e.__esModule) return e;
18
- var n = Object.create(null);
19
- if (e) {
20
- Object.keys(e).forEach(function (k) {
21
- if (k !== 'default') {
22
- var d = Object.getOwnPropertyDescriptor(e, k);
23
- Object.defineProperty(n, k, d.get ? d : {
24
- enumerable: true,
25
- get: function () { return e[k]; }
26
- });
27
- }
28
- });
29
- }
30
- n.default = e;
31
- return Object.freeze(n);
32
- }
43
+ // src/components/CalendarHeader.tsx
44
+ var import_react = __toESM(require("react"));
45
+ var import_date_fns = require("date-fns");
33
46
 
34
- var React15__namespace = /*#__PURE__*/_interopNamespace(React15);
47
+ // src/components/ui/button.tsx
48
+ var React = __toESM(require("react"));
49
+ var import_class_variance_authority = require("class-variance-authority");
35
50
 
51
+ // src/utils.ts
52
+ var import_clsx = require("clsx");
53
+ var import_tailwind_merge = require("tailwind-merge");
36
54
  function cn(...inputs) {
37
- return tailwindMerge.twMerge(clsx.clsx(inputs));
55
+ return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
38
56
  }
57
+ var isEventDragDisabled = (event) => event?.draggable === false;
58
+ var isEventResizeDisabled = (event) => event?.resizable === false || event?.resizable === void 0 && isEventDragDisabled(event);
39
59
 
40
60
  // src/components/ui/button.tsx
41
- var buttonVariants = classVarianceAuthority.cva(
61
+ var buttonVariants = (0, import_class_variance_authority.cva)(
42
62
  "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
43
63
  {
44
64
  variants: {
@@ -63,10 +83,10 @@ var buttonVariants = classVarianceAuthority.cva(
63
83
  }
64
84
  }
65
85
  );
66
- var Button = React15__namespace.forwardRef(
67
- ({ className, variant, size, asChild = false, ...props }, ref) => {
86
+ var Button = React.forwardRef(
87
+ ({ className, variant, size, ...props }, ref) => {
68
88
  const Comp = "button";
69
- return /* @__PURE__ */ React15__namespace.createElement(
89
+ return /* @__PURE__ */ React.createElement(
70
90
  Comp,
71
91
  {
72
92
  className: cn(buttonVariants({ variant, size, className })),
@@ -77,6 +97,9 @@ var Button = React15__namespace.forwardRef(
77
97
  }
78
98
  );
79
99
  Button.displayName = "Button";
100
+
101
+ // src/components/CalendarHeader.tsx
102
+ var import_lucide_react = require("lucide-react");
80
103
  var CalendarHeader = ({
81
104
  currentDate,
82
105
  onPrev,
@@ -94,12 +117,12 @@ var CalendarHeader = ({
94
117
  locale
95
118
  }) => {
96
119
  const viewConfig = [
97
- { key: "month", icon: lucideReact.CalendarDays },
98
- { key: "week", icon: lucideReact.CalendarRange },
99
- { key: "day", icon: lucideReact.Calendar },
100
- { key: "agenda", icon: lucideReact.ListTodo }
120
+ { key: "month", icon: import_lucide_react.CalendarDays },
121
+ { key: "week", icon: import_lucide_react.CalendarRange },
122
+ { key: "day", icon: import_lucide_react.Calendar },
123
+ { key: "agenda", icon: import_lucide_react.ListTodo }
101
124
  ];
102
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col md:flex-row items-center justify-between px-3 md:px-5 py-3 border-b-[0px] border-border/50 bg-gradient-to-r from-background via-background to-muted/20 gap-3 md:gap-0 min-h-[64px]" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2 w-full md:w-auto justify-between md:justify-start" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2 md:gap-3" }, /* @__PURE__ */ React15__namespace.default.createElement(
125
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col md:flex-row items-center justify-between px-3 md:px-5 py-3 border-b-[0px] border-border/50 bg-gradient-to-r from-background via-background to-muted/20 gap-3 md:gap-0 min-h-[64px]" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-center gap-2 w-full md:w-auto justify-between md:justify-start" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-center gap-2 md:gap-3" }, /* @__PURE__ */ import_react.default.createElement(
103
126
  Button,
104
127
  {
105
128
  variant: "ghost",
@@ -107,8 +130,8 @@ var CalendarHeader = ({
107
130
  className: "text-muted-foreground hover:text-foreground hover:bg-accent/80 rounded-xl h-10 w-10 hidden md:inline-flex transition-all duration-200",
108
131
  onClick: onMenuClick
109
132
  },
110
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Menu, { className: "h-5 w-5" })
111
- ), /* @__PURE__ */ React15__namespace.default.createElement(
133
+ /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Menu, { className: "h-5 w-5" })
134
+ ), /* @__PURE__ */ import_react.default.createElement(
112
135
  Button,
113
136
  {
114
137
  variant: "outline",
@@ -116,7 +139,7 @@ var CalendarHeader = ({
116
139
  className: "h-9 px-5 rounded-xl text-sm font-medium hidden sm:inline-flex border-[0.5px] border-border/60 hover:border-primary/40 hover:bg-primary/5 hover:text-primary transition-all duration-200"
117
140
  },
118
141
  translations.today
119
- ), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center bg-muted/40 rounded-xl p-0.5" }, /* @__PURE__ */ React15__namespace.default.createElement(
142
+ ), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-center bg-muted/40 rounded-xl p-0.5" }, /* @__PURE__ */ import_react.default.createElement(
120
143
  Button,
121
144
  {
122
145
  variant: "ghost",
@@ -124,8 +147,8 @@ var CalendarHeader = ({
124
147
  onClick: onPrev,
125
148
  className: "rounded-lg h-8 w-8 hover:bg-background/80 transition-all duration-200"
126
149
  },
127
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.ChevronLeft, { className: "h-4 w-4 text-muted-foreground" })
128
- ), /* @__PURE__ */ React15__namespace.default.createElement(
150
+ /* @__PURE__ */ import_react.default.createElement(import_lucide_react.ChevronLeft, { className: "h-4 w-4 text-muted-foreground" })
151
+ ), /* @__PURE__ */ import_react.default.createElement(
129
152
  Button,
130
153
  {
131
154
  variant: "ghost",
@@ -133,8 +156,8 @@ var CalendarHeader = ({
133
156
  onClick: onNext,
134
157
  className: "rounded-lg h-8 w-8 hover:bg-background/80 transition-all duration-200"
135
158
  },
136
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.ChevronRight, { className: "h-4 w-4 text-muted-foreground" })
137
- )), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "ml-2 md:ml-4" }, /* @__PURE__ */ React15__namespace.default.createElement("h2", { className: "text-lg md:text-xl font-semibold text-foreground whitespace-nowrap capitalize tracking-tight" }, dateFns.format(currentDate, "MMMM yyyy", { locale }))))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2 md:gap-3 w-full md:w-auto justify-end" }, onLanguageChange && language && /* @__PURE__ */ React15__namespace.default.createElement(
159
+ /* @__PURE__ */ import_react.default.createElement(import_lucide_react.ChevronRight, { className: "h-4 w-4 text-muted-foreground" })
160
+ )), /* @__PURE__ */ import_react.default.createElement("div", { className: "ml-2 md:ml-4" }, /* @__PURE__ */ import_react.default.createElement("h2", { className: "text-lg md:text-xl font-semibold text-foreground whitespace-nowrap capitalize tracking-tight" }, (0, import_date_fns.format)(currentDate, "MMMM yyyy", { locale }))))), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-center gap-2 md:gap-3 w-full md:w-auto justify-end" }, onLanguageChange && language && /* @__PURE__ */ import_react.default.createElement(
138
161
  Button,
139
162
  {
140
163
  variant: "ghost",
@@ -143,7 +166,7 @@ var CalendarHeader = ({
143
166
  className: "h-9 px-3 rounded-xl text-xs font-semibold text-muted-foreground hover:text-foreground hover:bg-accent/80 transition-all duration-200 uppercase tracking-wider"
144
167
  },
145
168
  language
146
- ), onThemeToggle && /* @__PURE__ */ React15__namespace.default.createElement(
169
+ ), onThemeToggle && /* @__PURE__ */ import_react.default.createElement(
147
170
  Button,
148
171
  {
149
172
  variant: "ghost",
@@ -151,8 +174,8 @@ var CalendarHeader = ({
151
174
  className: "rounded-xl h-9 w-9 hover:bg-accent/80 transition-all duration-200",
152
175
  onClick: onThemeToggle
153
176
  },
154
- isDarkMode ? /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Sun, { className: "h-4 w-4 text-amber-500" }) : /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Moon, { className: "h-4 w-4 text-muted-foreground" })
155
- ), !hideViewSwitcher && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center bg-muted/50 backdrop-blur-sm rounded-xl p-1" }, viewConfig.map(({ key, icon: Icon }) => /* @__PURE__ */ React15__namespace.default.createElement(
177
+ isDarkMode ? /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Sun, { className: "h-4 w-4 text-amber-500" }) : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Moon, { className: "h-4 w-4 text-muted-foreground" })
178
+ ), !hideViewSwitcher && /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-center bg-muted/50 backdrop-blur-sm rounded-xl p-1" }, viewConfig.map(({ key, icon: Icon }) => /* @__PURE__ */ import_react.default.createElement(
156
179
  Button,
157
180
  {
158
181
  key,
@@ -164,40 +187,63 @@ var CalendarHeader = ({
164
187
  view === key ? "bg-background shadow-sm text-foreground font-medium border-[0.5px] border-border/50" : "text-muted-foreground hover:text-foreground hover:bg-background/50"
165
188
  )
166
189
  },
167
- /* @__PURE__ */ React15__namespace.default.createElement(Icon, { className: "h-3.5 w-3.5" }),
168
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "hidden sm:inline" }, translations[key])
190
+ /* @__PURE__ */ import_react.default.createElement(Icon, { className: "h-3.5 w-3.5" }),
191
+ /* @__PURE__ */ import_react.default.createElement("span", { className: "hidden sm:inline" }, translations[key])
169
192
  )))));
170
193
  };
194
+
195
+ // src/components/Sidebar.tsx
196
+ var import_react3 = __toESM(require("react"));
197
+ var import_lucide_react3 = require("lucide-react");
198
+
199
+ // src/components/MiniCalendar.tsx
200
+ var import_react2 = __toESM(require("react"));
201
+ var import_date_fns3 = require("date-fns");
202
+
203
+ // src/lib/date.ts
204
+ var import_date_fns2 = require("date-fns");
171
205
  var getMonthGrid = (date, weekStartOn = 0) => {
172
- const monthStart = dateFns.startOfMonth(date);
173
- const monthEnd = dateFns.endOfMonth(monthStart);
174
- const startDate = dateFns.startOfWeek(monthStart, { weekStartsOn: weekStartOn });
175
- const endDate = dateFns.endOfWeek(monthEnd, { weekStartsOn: weekStartOn });
176
- return dateFns.eachDayOfInterval({
177
- start: startDate,
178
- end: endDate
206
+ const monthStart = (0, import_date_fns2.startOfMonth)(date);
207
+ return (0, import_date_fns2.eachDayOfInterval)({
208
+ start: (0, import_date_fns2.startOfWeek)(monthStart, { weekStartsOn: weekStartOn }),
209
+ end: (0, import_date_fns2.endOfWeek)((0, import_date_fns2.endOfMonth)(monthStart), { weekStartsOn: weekStartOn })
179
210
  });
180
211
  };
212
+ var uses24HourClock = (locale) => {
213
+ if (!locale) return false;
214
+ return !/[ap]\.?m/i.test((0, import_date_fns2.format)(new Date(2e3, 0, 1, 13, 0), "p", { locale }));
215
+ };
216
+
217
+ // src/components/MiniCalendar.tsx
218
+ var import_lucide_react2 = require("lucide-react");
181
219
  var MiniCalendar = ({
182
220
  currentDate,
183
221
  onDateChange,
184
222
  onViewChange,
185
- className
223
+ className,
224
+ locale
186
225
  }) => {
187
- const [viewDate, setViewDate] = React15__namespace.default.useState(currentDate);
188
- React15__namespace.default.useEffect(() => {
226
+ const [viewDate, setViewDate] = import_react2.default.useState(currentDate);
227
+ import_react2.default.useEffect(() => {
189
228
  setViewDate(currentDate);
190
229
  }, [currentDate]);
191
- const days = React15__namespace.default.useMemo(() => getMonthGrid(viewDate), [viewDate]);
192
- const weekDays = ["S", "M", "T", "W", "T", "F", "S"];
230
+ const weekStartsOn = locale?.options?.weekStartsOn ?? 0;
231
+ const days = import_react2.default.useMemo(
232
+ () => getMonthGrid(viewDate, weekStartsOn),
233
+ [viewDate, weekStartsOn]
234
+ );
235
+ const weekDays = locale?.localize ? [0, 1, 2, 3, 4, 5, 6].map((d) => {
236
+ const dayIndex = (d + weekStartsOn) % 7;
237
+ return locale.localize.day(dayIndex, { width: "narrow" });
238
+ }) : ["S", "M", "T", "W", "T", "F", "S"];
193
239
  const handlePrev = () => {
194
- const newDate = dateFns.subMonths(viewDate, 1);
240
+ const newDate = (0, import_date_fns3.subMonths)(viewDate, 1);
195
241
  setViewDate(newDate);
196
242
  onDateChange(newDate);
197
243
  if (onViewChange) onViewChange("month");
198
244
  };
199
245
  const handleNext = () => {
200
- const newDate = dateFns.addMonths(viewDate, 1);
246
+ const newDate = (0, import_date_fns3.addMonths)(viewDate, 1);
201
247
  setViewDate(newDate);
202
248
  onDateChange(newDate);
203
249
  if (onViewChange) onViewChange("month");
@@ -206,7 +252,7 @@ var MiniCalendar = ({
206
252
  onDateChange(day);
207
253
  if (onViewChange) onViewChange("day");
208
254
  };
209
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { className: cn("px-4 w-[260px]", className) }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm font-semibold text-foreground capitalize" }, dateFns.format(viewDate, "MMMM yyyy")), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center bg-muted/40 rounded-lg p-0.5" }, /* @__PURE__ */ React15__namespace.default.createElement(
255
+ return /* @__PURE__ */ import_react2.default.createElement("div", { className: cn("px-4 w-[260px]", className) }, /* @__PURE__ */ import_react2.default.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ import_react2.default.createElement("span", { className: "text-sm font-semibold text-foreground capitalize" }, (0, import_date_fns3.format)(viewDate, "MMMM yyyy", { locale })), /* @__PURE__ */ import_react2.default.createElement("div", { className: "flex items-center bg-muted/40 rounded-lg p-0.5" }, /* @__PURE__ */ import_react2.default.createElement(
210
256
  Button,
211
257
  {
212
258
  variant: "ghost",
@@ -215,8 +261,8 @@ var MiniCalendar = ({
215
261
  onClick: handlePrev,
216
262
  "aria-label": "Previous month"
217
263
  },
218
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.ChevronLeft, { className: "h-4 w-4" })
219
- ), /* @__PURE__ */ React15__namespace.default.createElement(
264
+ /* @__PURE__ */ import_react2.default.createElement(import_lucide_react2.ChevronLeft, { className: "h-4 w-4" })
265
+ ), /* @__PURE__ */ import_react2.default.createElement(
220
266
  Button,
221
267
  {
222
268
  variant: "ghost",
@@ -225,12 +271,12 @@ var MiniCalendar = ({
225
271
  onClick: handleNext,
226
272
  "aria-label": "Next month"
227
273
  },
228
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.ChevronRight, { className: "h-4 w-4" })
229
- ))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "grid grid-cols-7 gap-y-2 text-center mb-2" }, weekDays.map((day, i) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: `${day}-${i}`, className: "text-[10px] text-muted-foreground/70 font-semibold uppercase" }, day))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "grid grid-cols-7 gap-y-1 text-center" }, days.map((day) => {
230
- const isSelected = dateFns.isSameDay(day, currentDate);
231
- const isCurrentMonth = dateFns.isSameMonth(day, viewDate);
232
- const isTodayDate = dateFns.isToday(day);
233
- return /* @__PURE__ */ React15__namespace.default.createElement(
274
+ /* @__PURE__ */ import_react2.default.createElement(import_lucide_react2.ChevronRight, { className: "h-4 w-4" })
275
+ ))), /* @__PURE__ */ import_react2.default.createElement("div", { className: "grid grid-cols-7 gap-y-2 text-center mb-2" }, weekDays.map((day, i) => /* @__PURE__ */ import_react2.default.createElement("div", { key: `${day}-${i}`, className: "text-[10px] text-muted-foreground/70 font-semibold uppercase" }, day))), /* @__PURE__ */ import_react2.default.createElement("div", { className: "grid grid-cols-7 gap-y-1 text-center" }, days.map((day) => {
276
+ const isSelected = (0, import_date_fns3.isSameDay)(day, currentDate);
277
+ const isCurrentMonth = (0, import_date_fns3.isSameMonth)(day, viewDate);
278
+ const isTodayDate = (0, import_date_fns3.isToday)(day);
279
+ return /* @__PURE__ */ import_react2.default.createElement(
234
280
  "button",
235
281
  {
236
282
  key: day.toISOString(),
@@ -243,10 +289,14 @@ var MiniCalendar = ({
243
289
  !isSelected && isTodayDate && "bg-primary/10 text-primary ring-1 ring-primary/30"
244
290
  )
245
291
  },
246
- dateFns.format(day, "d")
292
+ (0, import_date_fns3.format)(day, "d")
247
293
  );
248
294
  })));
249
295
  };
296
+
297
+ // src/components/Sidebar.tsx
298
+ var import_date_fns_tz = require("date-fns-tz");
299
+ var import_date_fns4 = require("date-fns");
250
300
  var Sidebar = ({
251
301
  currentDate,
252
302
  onDateChange,
@@ -258,13 +308,14 @@ var Sidebar = ({
258
308
  readOnly,
259
309
  calendars,
260
310
  onCalendarToggle,
261
- translations
311
+ translations,
312
+ locale
262
313
  }) => {
263
- const [calendarsOpen, setCalendarsOpen] = React15.useState(true);
264
- const [timezoneOpen, setTimezoneOpen] = React15.useState(false);
265
- const [now, setNow] = React15.useState(null);
266
- const [hasMounted, setHasMounted] = React15.useState(false);
267
- React15.useEffect(() => {
314
+ const [calendarsOpen, setCalendarsOpen] = (0, import_react3.useState)(true);
315
+ const [timezoneOpen, setTimezoneOpen] = (0, import_react3.useState)(false);
316
+ const [now, setNow] = (0, import_react3.useState)(null);
317
+ const [hasMounted, setHasMounted] = (0, import_react3.useState)(false);
318
+ (0, import_react3.useEffect)(() => {
268
319
  setHasMounted(true);
269
320
  setNow(/* @__PURE__ */ new Date());
270
321
  const timer = setInterval(() => setNow(/* @__PURE__ */ new Date()), 6e4);
@@ -280,12 +331,12 @@ var Sidebar = ({
280
331
  if (!tz || !now) return "LOC";
281
332
  try {
282
333
  return new Intl.DateTimeFormat("en-US", { timeZone: tz, timeZoneName: "short" }).formatToParts(now).find((part) => part.type === "timeZoneName")?.value || "";
283
- } catch (e) {
334
+ } catch {
284
335
  return "";
285
336
  }
286
337
  };
287
338
  const timezones = [
288
- { value: "", label: "Local Time", acronym: "LOC" },
339
+ { value: "", label: translations?.localTime || "Local Time", acronym: "LOC" },
289
340
  { value: "UTC", label: "UTC", acronym: "UTC" },
290
341
  { value: "America/New_York", label: "New York", acronym: "EST" },
291
342
  { value: "America/Chicago", label: "Chicago", acronym: "CST" },
@@ -301,56 +352,56 @@ var Sidebar = ({
301
352
  ];
302
353
  const formatTzLabel = (tz, showTime = true) => {
303
354
  if (!hasMounted || !now || !showTime) {
304
- return /* @__PURE__ */ React15__namespace.default.createElement("span", null, tz.label);
355
+ return /* @__PURE__ */ import_react3.default.createElement("span", null, tz.label);
305
356
  }
306
357
  let time = "";
307
358
  let acronym = tz.acronym;
308
359
  try {
309
360
  if (!tz.value) {
310
- time = dateFns.format(now, "HH:mm");
361
+ time = (0, import_date_fns4.format)(now, "HH:mm");
311
362
  try {
312
363
  acronym = new Intl.DateTimeFormat("en-US", { timeZoneName: "short" }).formatToParts(now).find((part) => part.type === "timeZoneName")?.value || "LOC";
313
- } catch (e) {
364
+ } catch {
314
365
  }
315
366
  } else {
316
- const zDate = dateFnsTz.toZonedTime(now, tz.value);
317
- time = dateFns.format(zDate, "HH:mm");
367
+ const zDate = (0, import_date_fns_tz.toZonedTime)(now, tz.value);
368
+ time = (0, import_date_fns4.format)(zDate, "HH:mm");
318
369
  const dynAcronym = getAcronym(tz.value);
319
370
  if (dynAcronym && !dynAcronym.includes("GMT") && !dynAcronym.includes("Time")) {
320
371
  acronym = dynAcronym;
321
372
  }
322
373
  }
323
- } catch (e) {
324
- return /* @__PURE__ */ React15__namespace.default.createElement("span", null, tz.label);
374
+ } catch {
375
+ return /* @__PURE__ */ import_react3.default.createElement("span", null, tz.label);
325
376
  }
326
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex justify-between w-full" }, /* @__PURE__ */ React15__namespace.default.createElement("span", null, tz.label), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-muted-foreground ml-2 tabular-nums" }, time, " ", /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-xs opacity-75" }, "(", acronym, ")")));
377
+ return /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex justify-between w-full" }, /* @__PURE__ */ import_react3.default.createElement("span", null, tz.label), /* @__PURE__ */ import_react3.default.createElement("span", { className: "text-muted-foreground ml-2 tabular-nums" }, time, " ", /* @__PURE__ */ import_react3.default.createElement("span", { className: "text-xs opacity-75" }, "(", acronym, ")")));
327
378
  };
328
379
  const selectedTzObj = timezones.find((t) => t.value === (timezone || ""));
329
380
  const selectedTimezoneLabel = selectedTzObj ? formatTzLabel(selectedTzObj) : translations?.localTime || "Local Time";
330
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { className: cn("flex flex-col w-[260px] overflow-x-hidden h-full bg-gradient-to-b scrollbar-hide from-background via-background to-muted/10 pt-4 pb-4 overflow-y-auto hidden lg:flex", className) }, !readOnly && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "px-4 mb-6" }, /* @__PURE__ */ React15__namespace.default.createElement(
381
+ return /* @__PURE__ */ import_react3.default.createElement("div", { className: cn("flex flex-col w-[260px] overflow-x-hidden h-full bg-gradient-to-b scrollbar-hide from-background via-background to-muted/10 pt-4 pb-4 overflow-y-auto hidden lg:flex", className) }, !readOnly && /* @__PURE__ */ import_react3.default.createElement("div", { className: "px-4 mb-6" }, /* @__PURE__ */ import_react3.default.createElement(
331
382
  Button,
332
383
  {
333
384
  className: "w-full rounded-2xl shadow-lg bg-primary text-primary-foreground hover:bg-primary/90 h-12 gap-3 justify-center transition-all duration-300 hover:shadow-xl hover:shadow-primary/20 hover:scale-[1.02] active:scale-[0.98] font-semibold",
334
385
  onClick: onEventCreate
335
386
  },
336
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Plus, { className: "w-5 h-5" }),
337
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm" }, translations?.create || "Create")
338
- )), /* @__PURE__ */ React15__namespace.default.createElement(MiniCalendar, { currentDate, onDateChange, onViewChange }), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 px-4 space-y-5 mt-5" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "bg-muted/20 rounded-2xl p-3 border-[0px] border-border/30" }, /* @__PURE__ */ React15__namespace.default.createElement(
387
+ /* @__PURE__ */ import_react3.default.createElement(import_lucide_react3.Plus, { className: "w-5 h-5" }),
388
+ /* @__PURE__ */ import_react3.default.createElement("span", { className: "text-sm" }, translations?.create || "Create")
389
+ )), /* @__PURE__ */ import_react3.default.createElement(MiniCalendar, { currentDate, onDateChange, onViewChange, locale }), /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex-1 px-4 space-y-5 mt-5" }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "bg-muted/20 rounded-2xl p-3 border-[0px] border-border/30" }, /* @__PURE__ */ import_react3.default.createElement(
339
390
  "div",
340
391
  {
341
392
  className: "flex items-center justify-between cursor-pointer hover:bg-accent/50 p-2 -m-1 rounded-xl mb-2 transition-all duration-200",
342
393
  onClick: () => setCalendarsOpen(!calendarsOpen)
343
394
  },
344
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm font-semibold text-foreground" }, translations?.calendars || "Calendars"),
345
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.ChevronDown, { className: cn("w-4 h-4 text-muted-foreground transition-transform duration-200", calendarsOpen && "rotate-180") })
346
- ), calendarsOpen && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "space-y-1" }, displayCalendars.map((cal) => /* @__PURE__ */ React15__namespace.default.createElement(
395
+ /* @__PURE__ */ import_react3.default.createElement("span", { className: "text-sm font-semibold text-foreground" }, translations?.calendars || "Calendars"),
396
+ /* @__PURE__ */ import_react3.default.createElement(import_lucide_react3.ChevronDown, { className: cn("w-4 h-4 text-muted-foreground transition-transform duration-200", calendarsOpen && "rotate-180") })
397
+ ), calendarsOpen && /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-1" }, displayCalendars.map((cal) => /* @__PURE__ */ import_react3.default.createElement(
347
398
  "div",
348
399
  {
349
400
  key: cal.id,
350
401
  className: "flex items-center gap-3 py-2 px-2 hover:bg-accent/60 rounded-xl cursor-pointer group transition-all duration-200",
351
402
  onClick: () => onCalendarToggle?.(cal.id, !(cal.active ?? true))
352
403
  },
353
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "relative flex items-center justify-center" }, /* @__PURE__ */ React15__namespace.default.createElement(
404
+ /* @__PURE__ */ import_react3.default.createElement("div", { className: "relative flex items-center justify-center" }, /* @__PURE__ */ import_react3.default.createElement(
354
405
  "input",
355
406
  {
356
407
  type: "checkbox",
@@ -363,7 +414,7 @@ var Sidebar = ({
363
414
  style: { "--primary-color": cal.color },
364
415
  "data-cal-id": cal.id
365
416
  }
366
- ), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none opacity-0 peer-checked:opacity-100 transition-opacity" }, /* @__PURE__ */ React15__namespace.default.createElement("svg", { className: "w-3.5 h-3.5 text-white", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 3 }, /* @__PURE__ */ React15__namespace.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" }))), /* @__PURE__ */ React15__namespace.default.createElement("style", null, `
417
+ ), /* @__PURE__ */ import_react3.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none opacity-0 peer-checked:opacity-100 transition-opacity" }, /* @__PURE__ */ import_react3.default.createElement("svg", { className: "w-3.5 h-3.5 text-white", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 3 }, /* @__PURE__ */ import_react3.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" }))), /* @__PURE__ */ import_react3.default.createElement("style", null, `
367
418
  input[type="checkbox"][data-cal-id="${cal.id}"]:checked {
368
419
  background-color: ${cal.color} !important;
369
420
  border-color: ${cal.color} !important;
@@ -372,23 +423,23 @@ var Sidebar = ({
372
423
  --tw-ring-color: ${cal.color}40 !important;
373
424
  }
374
425
  `)),
375
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2 flex-1 min-w-0" }, /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm text-foreground/90 truncate font-medium" }, cal.label)),
376
- /* @__PURE__ */ React15__namespace.default.createElement(
426
+ /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex items-center gap-2 flex-1 min-w-0" }, /* @__PURE__ */ import_react3.default.createElement("span", { className: "text-sm text-foreground/90 truncate font-medium" }, cal.label)),
427
+ /* @__PURE__ */ import_react3.default.createElement(
377
428
  "div",
378
429
  {
379
430
  className: "w-2 h-2 rounded-full opacity-60 group-hover:opacity-100 transition-opacity",
380
431
  style: { backgroundColor: cal.color }
381
432
  }
382
433
  )
383
- ))))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "mt-auto px-4 pt-5" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "bg-muted/20 rounded-2xl p-3" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2 mb-3" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "p-1.5 bg-primary/10 rounded-lg" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Globe, { className: "w-4 h-4 text-primary" })), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm font-semibold text-foreground" }, translations?.timezone || "Timezone")), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React15__namespace.default.createElement(
434
+ ))))), /* @__PURE__ */ import_react3.default.createElement("div", { className: "mt-auto px-4 pt-5" }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "bg-muted/20 rounded-2xl p-3" }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex items-center gap-2 mb-3" }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "p-1.5 bg-primary/10 rounded-lg" }, /* @__PURE__ */ import_react3.default.createElement(import_lucide_react3.Globe, { className: "w-4 h-4 text-primary" })), /* @__PURE__ */ import_react3.default.createElement("span", { className: "text-sm font-semibold text-foreground" }, translations?.timezone || "Timezone")), /* @__PURE__ */ import_react3.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react3.default.createElement(
384
435
  "button",
385
436
  {
386
437
  onClick: () => setTimezoneOpen(!timezoneOpen),
387
438
  className: "w-full flex items-center justify-between bg-blue-200/40 hover:bg-blue-200/80 rounded-xl py-2.5 pl-4 pr-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary/50 transition-all duration-200 text-left"
388
439
  },
389
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 truncate mr-2 font-medium" }, selectedTimezoneLabel),
390
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.ChevronDown, { className: cn("w-4 h-4 text-muted-foreground transition-transform duration-200", timezoneOpen && "rotate-180") })
391
- ), timezoneOpen && /* @__PURE__ */ React15__namespace.default.createElement(React15__namespace.default.Fragment, null, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setTimezoneOpen(false) }), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute bottom-full left-0 w-full mb-2 bg-background rounded-xl shadow-2xl z-50 max-h-[260px] overflow-y-auto p-1.5 animate-in fade-in zoom-in-95 duration-200 backdrop-blur-none" }, timezones.map((tz) => /* @__PURE__ */ React15__namespace.default.createElement(
440
+ /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex-1 truncate mr-2 font-medium" }, selectedTimezoneLabel),
441
+ /* @__PURE__ */ import_react3.default.createElement(import_lucide_react3.ChevronDown, { className: cn("w-4 h-4 text-muted-foreground transition-transform duration-200", timezoneOpen && "rotate-180") })
442
+ ), timezoneOpen && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setTimezoneOpen(false) }), /* @__PURE__ */ import_react3.default.createElement("div", { className: "absolute bottom-full left-0 w-full mb-2 bg-background rounded-xl shadow-2xl z-50 max-h-[260px] overflow-y-auto p-1.5 animate-in fade-in zoom-in-95 duration-200 backdrop-blur-none" }, timezones.map((tz) => /* @__PURE__ */ import_react3.default.createElement(
392
443
  "div",
393
444
  {
394
445
  key: tz.value,
@@ -404,14 +455,26 @@ var Sidebar = ({
404
455
  formatTzLabel(tz)
405
456
  ))))))));
406
457
  };
458
+
459
+ // src/views/MonthView.tsx
460
+ var import_react6 = __toESM(require("react"));
461
+ var import_date_fns5 = require("date-fns");
462
+ var import_date_fns_tz2 = require("date-fns-tz");
463
+
464
+ // src/components/dnd/DraggableEvent.tsx
465
+ var import_react4 = __toESM(require("react"));
466
+ var import_core = require("@dnd-kit/core");
467
+ var import_utilities = require("@dnd-kit/utilities");
407
468
  var DraggableEvent = ({ event, children, className, style: propStyle, ...props }) => {
408
- const { attributes, listeners, setNodeRef, transform, isDragging } = core.useDraggable({
469
+ const dragDisabled = isEventDragDisabled(event);
470
+ const { attributes, listeners, setNodeRef, transform, isDragging } = (0, import_core.useDraggable)({
409
471
  id: event.id,
410
- data: { event }
472
+ data: { event },
473
+ disabled: dragDisabled
411
474
  });
412
475
  const style = {
413
476
  ...propStyle,
414
- transform: utilities.CSS.Translate.toString(transform),
477
+ transform: import_utilities.CSS.Translate.toString(transform),
415
478
  zIndex: isDragging ? 100 : propStyle?.zIndex,
416
479
  // When dragging, we want the ORIGINAL element to be almost invisible (or fully invisible)
417
480
  // so that the DragOverlay (the "ghost") is the only thing the user focuses on.
@@ -421,7 +484,7 @@ var DraggableEvent = ({ event, children, className, style: propStyle, ...props }
421
484
  opacity: isDragging ? 0 : propStyle?.opacity
422
485
  // Hiding original element completely
423
486
  };
424
- return /* @__PURE__ */ React15__namespace.default.createElement(
487
+ return /* @__PURE__ */ import_react4.default.createElement(
425
488
  "div",
426
489
  {
427
490
  ref: setNodeRef,
@@ -429,20 +492,24 @@ var DraggableEvent = ({ event, children, className, style: propStyle, ...props }
429
492
  ...listeners,
430
493
  ...attributes,
431
494
  ...props,
432
- className: cn("touch-none", className)
495
+ className: cn(!dragDisabled && "touch-none", className)
433
496
  },
434
497
  children
435
498
  );
436
499
  };
500
+
501
+ // src/components/dnd/DroppableCell.tsx
502
+ var import_react5 = __toESM(require("react"));
503
+ var import_core2 = require("@dnd-kit/core");
437
504
  var DroppableCell = ({ id, date, resourceId, children, className, style, onClick }) => {
438
- const { isOver, setNodeRef } = core.useDroppable({
505
+ const { isOver, setNodeRef } = (0, import_core2.useDroppable)({
439
506
  id,
440
507
  data: { date, resourceId }
441
508
  });
442
509
  const minutes = date.getMinutes();
443
510
  const quarterClass = minutes === 0 ? "hover:bg-blue-50/50 dark:hover:bg-blue-900/10" : minutes === 15 ? "hover:bg-blue-50/80 dark:hover:bg-blue-900/20" : minutes === 30 ? "hover:bg-blue-100/50 dark:hover:bg-blue-900/30" : "hover:bg-blue-100/80 dark:hover:bg-blue-900/40";
444
511
  const activeQuarterClass = minutes === 0 ? "bg-blue-50/50 dark:bg-blue-900/10 ring-2 ring-primary ring-inset" : minutes === 15 ? "bg-blue-50/80 dark:bg-blue-900/20 ring-2 ring-primary ring-inset" : minutes === 30 ? "bg-blue-100/50 dark:bg-blue-900/30 ring-2 ring-primary ring-inset" : "bg-blue-100/80 dark:bg-blue-900/40 ring-2 ring-primary ring-inset";
445
- return /* @__PURE__ */ React15__namespace.default.createElement(
512
+ return /* @__PURE__ */ import_react5.default.createElement(
446
513
  "div",
447
514
  {
448
515
  ref: setNodeRef,
@@ -459,7 +526,7 @@ var DroppableCell = ({ id, date, resourceId, children, className, style, onClick
459
526
  };
460
527
 
461
528
  // src/views/MonthView.tsx
462
- var EventItem = React15__namespace.default.memo(({ event, onEventClick }) => /* @__PURE__ */ React15__namespace.default.createElement(DraggableEvent, { event }, /* @__PURE__ */ React15__namespace.default.createElement(
529
+ var EventItem = import_react6.default.memo(({ event, onEventClick }) => /* @__PURE__ */ import_react6.default.createElement(DraggableEvent, { event }, /* @__PURE__ */ import_react6.default.createElement(
463
530
  "div",
464
531
  {
465
532
  className: cn(
@@ -477,7 +544,7 @@ var EventItem = React15__namespace.default.memo(({ event, onEventClick }) => /*
477
544
  onEventClick?.(event);
478
545
  }
479
546
  },
480
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "font-medium" }, event.title)
547
+ /* @__PURE__ */ import_react6.default.createElement("span", { className: "font-medium" }, event.title)
481
548
  )));
482
549
  EventItem.displayName = "EventItem";
483
550
  var MonthView = ({
@@ -488,20 +555,24 @@ var MonthView = ({
488
555
  timezone,
489
556
  locale
490
557
  }) => {
491
- const days = React15.useMemo(() => getMonthGrid(currentDate), [currentDate]);
492
- const weekDays = React15.useMemo(() => {
493
- const start = dateFns.startOfWeek(currentDate, { weekStartsOn: 1 });
494
- const end = dateFns.endOfWeek(currentDate, { weekStartsOn: 1 });
495
- return dateFns.eachDayOfInterval({ start, end });
496
- }, [currentDate]);
497
- const getZonedDate = React15.useCallback((date) => {
498
- return timezone ? dateFnsTz.toZonedTime(date, timezone) : date;
558
+ const weekStartsOn = locale?.options?.weekStartsOn ?? 1;
559
+ const days = (0, import_react6.useMemo)(
560
+ () => getMonthGrid(currentDate, weekStartsOn),
561
+ [currentDate, weekStartsOn]
562
+ );
563
+ const weekDays = (0, import_react6.useMemo)(() => {
564
+ const start = (0, import_date_fns5.startOfWeek)(currentDate, { weekStartsOn });
565
+ const end = (0, import_date_fns5.endOfWeek)(currentDate, { weekStartsOn });
566
+ return (0, import_date_fns5.eachDayOfInterval)({ start, end });
567
+ }, [currentDate, weekStartsOn]);
568
+ const getZonedDate = (0, import_react6.useCallback)((date) => {
569
+ return timezone ? (0, import_date_fns_tz2.toZonedTime)(date, timezone) : date;
499
570
  }, [timezone]);
500
- const eventsByDay = React15.useMemo(() => {
571
+ const eventsByDay = (0, import_react6.useMemo)(() => {
501
572
  const map = /* @__PURE__ */ new Map();
502
573
  events.forEach((event) => {
503
574
  const zonedStart = getZonedDate(event.start);
504
- const key = dateFns.format(zonedStart, "yyyy-MM-dd");
575
+ const key = (0, import_date_fns5.format)(zonedStart, "yyyy-MM-dd");
505
576
  if (!map.has(key)) {
506
577
  map.set(key, []);
507
578
  }
@@ -509,19 +580,19 @@ var MonthView = ({
509
580
  });
510
581
  return map;
511
582
  }, [events, getZonedDate]);
512
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col h-full bg-background border-[0.5px] scrollbar-hide border-border/50 rounded-2xl overflow-hidden min-w-[800px] md:min-w-0 shadow-sm" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "overflow-y-auto flex-1 relative" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "grid grid-cols-7 border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/30 via-muted/40 to-muted/30 sticky top-0 z-20 backdrop-blur-sm" }, weekDays.map((day) => /* @__PURE__ */ React15__namespace.default.createElement(
583
+ return /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col h-full bg-background border-[0.5px] scrollbar-hide border-border/50 rounded-2xl overflow-hidden min-w-[800px] md:min-w-0 shadow-sm" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "overflow-y-auto flex-1 relative" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "grid grid-cols-7 border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/30 via-muted/40 to-muted/30 sticky top-0 z-20 backdrop-blur-sm" }, weekDays.map((day) => /* @__PURE__ */ import_react6.default.createElement(
513
584
  "div",
514
585
  {
515
586
  key: day.toISOString(),
516
587
  className: "py-3 text-center text-xs font-semibold text-muted-foreground border-r-[0.5px] border-border/30 last:border-r-0 uppercase tracking-wider"
517
588
  },
518
- dateFns.format(day, "EEE", { locale })
519
- ))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "grid grid-cols-7", style: { gridAutoRows: "130px" } }, days.map((day) => {
520
- const dayKey = dateFns.format(day, "yyyy-MM-dd");
589
+ (0, import_date_fns5.format)(day, "EEE", { locale })
590
+ ))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "grid grid-cols-7", style: { gridAutoRows: "130px" } }, days.map((day) => {
591
+ const dayKey = (0, import_date_fns5.format)(day, "yyyy-MM-dd");
521
592
  const dayEvents = eventsByDay.get(dayKey) || [];
522
- const isCurrentMonth = dateFns.isSameMonth(day, currentDate);
593
+ const isCurrentMonth = (0, import_date_fns5.isSameMonth)(day, currentDate);
523
594
  const cellId = day.toISOString();
524
- return /* @__PURE__ */ React15__namespace.default.createElement(
595
+ return /* @__PURE__ */ import_react6.default.createElement(
525
596
  DroppableCell,
526
597
  {
527
598
  key: cellId,
@@ -530,18 +601,26 @@ var MonthView = ({
530
601
  className: cn(
531
602
  "h-[130px] p-2 border-b-[0.5px] border-r-[0.5px] border-border/30 last:border-r-0 relative transition-all duration-200 hover:bg-accent/5 flex flex-col gap-1.5 overflow-hidden group",
532
603
  !isCurrentMonth && "bg-muted/5 text-muted-foreground/60",
533
- dateFns.isToday(day) && "bg-primary/5 ring-1 ring-inset ring-primary/20"
604
+ (0, import_date_fns5.isToday)(day) && "bg-primary/5 ring-1 ring-inset ring-primary/20"
534
605
  ),
535
606
  onClick: () => onDateClick?.(day)
536
607
  },
537
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex justify-between items-start" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: cn(
608
+ /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex justify-between items-start" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: cn(
538
609
  "text-sm font-semibold w-7 h-7 flex items-center justify-center rounded-full transition-all duration-200",
539
- dateFns.isToday(day) ? "bg-primary text-primary-foreground shadow-md shadow-primary/30" : "group-hover:bg-accent"
540
- ) }, dateFns.format(day, "d", { locale })), dayEvents.length > 0 && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-[10px] font-medium text-muted-foreground/60 bg-muted/50 px-1.5 py-0.5 rounded-full" }, dayEvents.length)),
541
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 flex flex-col gap-1 scrollbar-hide overflow-y-auto overflow-x-hidden" }, dayEvents.slice(0, 4).map((event) => /* @__PURE__ */ React15__namespace.default.createElement(EventItem, { key: `${event.id}-${dayKey}`, event, onEventClick })), dayEvents.length > 4 && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-[10px] text-primary font-semibold text-center py-1 px-2 rounded-md bg-primary/5 hover:bg-primary/10 cursor-pointer transition-colors" }, "+", dayEvents.length - 4, " more"))
610
+ (0, import_date_fns5.isToday)(day) ? "bg-primary text-primary-foreground shadow-md shadow-primary/30" : "group-hover:bg-accent"
611
+ ) }, (0, import_date_fns5.format)(day, "d", { locale })), dayEvents.length > 0 && /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-[10px] font-medium text-muted-foreground/60 bg-muted/50 px-1.5 py-0.5 rounded-full" }, dayEvents.length)),
612
+ /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex-1 flex flex-col gap-1 scrollbar-hide overflow-y-auto overflow-x-hidden" }, dayEvents.slice(0, 4).map((event) => /* @__PURE__ */ import_react6.default.createElement(EventItem, { key: `${event.id}-${dayKey}`, event, onEventClick })), dayEvents.length > 4 && /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-[10px] text-primary font-semibold text-center py-1 px-2 rounded-md bg-primary/5 hover:bg-primary/10 cursor-pointer transition-colors" }, "+", dayEvents.length - 4, " more"))
542
613
  );
543
614
  }))));
544
615
  };
616
+
617
+ // src/views/WeekView.tsx
618
+ var import_react8 = __toESM(require("react"));
619
+ var import_date_fns6 = require("date-fns");
620
+ var import_date_fns_tz3 = require("date-fns-tz");
621
+
622
+ // src/components/dnd/ResizableEvent.tsx
623
+ var import_react7 = __toESM(require("react"));
545
624
  var ResizableEvent = ({
546
625
  event,
547
626
  hourHeight,
@@ -552,12 +631,14 @@ var ResizableEvent = ({
552
631
  style,
553
632
  readonly
554
633
  }) => {
555
- const [isResizing, setIsResizing] = React15.useState(false);
556
- const [resizeHeight, setResizeHeight] = React15.useState(null);
557
- const containerRef = React15.useRef(null);
558
- const startYRef = React15.useRef(0);
559
- const startHeightRef = React15.useRef(0);
560
- const handleResizeStart = React15.useCallback((e) => {
634
+ const resizeLocked = readonly || isEventResizeDisabled(event);
635
+ const [isResizing, setIsResizing] = (0, import_react7.useState)(false);
636
+ const [resizeHeight, setResizeHeight] = (0, import_react7.useState)(null);
637
+ const containerRef = (0, import_react7.useRef)(null);
638
+ const startYRef = (0, import_react7.useRef)(0);
639
+ const startHeightRef = (0, import_react7.useRef)(0);
640
+ const resizeHeightRef = (0, import_react7.useRef)(null);
641
+ const handleResizeStart = (0, import_react7.useCallback)((e) => {
561
642
  e.preventDefault();
562
643
  e.stopPropagation();
563
644
  const clientY = "touches" in e ? e.touches[0].clientY : e.clientY;
@@ -574,13 +655,15 @@ var ResizableEvent = ({
574
655
  // Minimum height based on minDuration
575
656
  startHeightRef.current + snappedDelta
576
657
  );
658
+ resizeHeightRef.current = newHeight;
577
659
  setResizeHeight(newHeight);
578
660
  };
579
661
  const handleEnd = () => {
580
662
  setIsResizing(false);
581
- if (resizeHeight !== null && containerRef.current && onResize) {
663
+ const finalHeight = resizeHeightRef.current;
664
+ if (finalHeight !== null && containerRef.current && onResize) {
582
665
  const originalHeight = startHeightRef.current;
583
- const heightDiff = (resizeHeight || originalHeight) - originalHeight;
666
+ const heightDiff = finalHeight - originalHeight;
584
667
  const minutesDiff = heightDiff / hourHeight * 60;
585
668
  const newEnd = new Date(event.end);
586
669
  newEnd.setMinutes(newEnd.getMinutes() + minutesDiff);
@@ -588,6 +671,7 @@ var ResizableEvent = ({
588
671
  onResize(event, newEnd);
589
672
  }
590
673
  }
674
+ resizeHeightRef.current = null;
591
675
  setResizeHeight(null);
592
676
  document.removeEventListener("mousemove", handleMove);
593
677
  document.removeEventListener("mouseup", handleEnd);
@@ -598,8 +682,11 @@ var ResizableEvent = ({
598
682
  document.addEventListener("mouseup", handleEnd);
599
683
  document.addEventListener("touchmove", handleMove, { passive: false });
600
684
  document.addEventListener("touchend", handleEnd);
601
- }, [event, hourHeight, minDuration, onResize, resizeHeight]);
602
- return /* @__PURE__ */ React15__namespace.default.createElement(
685
+ }, [event, hourHeight, minDuration, onResize]);
686
+ const handlePointerDown = (0, import_react7.useCallback)((e) => {
687
+ e.stopPropagation();
688
+ }, []);
689
+ return /* @__PURE__ */ import_react7.default.createElement(
603
690
  "div",
604
691
  {
605
692
  ref: containerRef,
@@ -610,24 +697,25 @@ var ResizableEvent = ({
610
697
  }
611
698
  },
612
699
  children,
613
- /* @__PURE__ */ React15__namespace.default.createElement(
700
+ /* @__PURE__ */ import_react7.default.createElement(
614
701
  "div",
615
702
  {
616
703
  className: cn(
617
- readonly ? "cursor-default" : "cursor-ns-resize group-hover:opacity-100",
704
+ resizeLocked ? "cursor-default" : "cursor-ns-resize group-hover:opacity-100",
618
705
  "absolute bottom-0 left-0 right-0 h-3 z-20 flex items-center justify-center",
619
706
  "opacity-0 transition-opacity",
620
707
  isResizing && "opacity-100"
621
708
  ),
622
- onMouseDown: readonly ? void 0 : handleResizeStart,
623
- onTouchStart: readonly ? void 0 : handleResizeStart
709
+ onPointerDown: resizeLocked ? void 0 : handlePointerDown,
710
+ onMouseDown: resizeLocked ? void 0 : handleResizeStart,
711
+ onTouchStart: resizeLocked ? void 0 : handleResizeStart
624
712
  },
625
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: cn(
713
+ /* @__PURE__ */ import_react7.default.createElement("div", { className: cn(
626
714
  "w-8 h-1 rounded-full transition-all",
627
715
  isResizing ? "bg-primary" : "bg-muted-foreground/30 group-hover:bg-primary/50"
628
716
  ) })
629
717
  ),
630
- isResizing && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute inset-0 border-2 border-primary border-dashed rounded-md pointer-events-none bg-primary/5" })
718
+ isResizing && /* @__PURE__ */ import_react7.default.createElement("div", { className: "absolute inset-0 border-2 border-primary border-dashed rounded-md pointer-events-none bg-primary/5" })
631
719
  );
632
720
  };
633
721
 
@@ -642,29 +730,26 @@ var WeekView = ({
642
730
  locale,
643
731
  readonly
644
732
  }) => {
645
- const start = dateFns.startOfWeek(currentDate, { weekStartsOn: 1 });
646
- const end = dateFns.endOfWeek(currentDate, { weekStartsOn: 1 });
647
- const weekDays = dateFns.eachDayOfInterval({ start, end });
733
+ const weekStartsOn = locale?.options?.weekStartsOn ?? 1;
734
+ const start = (0, import_date_fns6.startOfWeek)(currentDate, { weekStartsOn });
735
+ const end = (0, import_date_fns6.endOfWeek)(currentDate, { weekStartsOn });
736
+ const weekDays = (0, import_date_fns6.eachDayOfInterval)({ start, end });
648
737
  const hours = Array.from({ length: 24 }, (_, i) => i);
649
738
  const hourHeight = 60;
650
- const scrollContainerRef = React15__namespace.default.useRef(null);
651
- const [now, setNow] = React15__namespace.default.useState(/* @__PURE__ */ new Date());
652
- React15__namespace.default.useEffect(() => {
739
+ const scrollContainerRef = import_react8.default.useRef(null);
740
+ const [now, setNow] = import_react8.default.useState(/* @__PURE__ */ new Date());
741
+ import_react8.default.useEffect(() => {
653
742
  const interval = setInterval(() => setNow(/* @__PURE__ */ new Date()), 6e4);
654
743
  return () => clearInterval(interval);
655
744
  }, []);
656
- React15__namespace.default.useEffect(() => {
745
+ import_react8.default.useEffect(() => {
657
746
  if (scrollContainerRef.current) {
658
- const scrollToActualTime = () => {
659
- const currentHour = now.getHours();
660
- const offsetHour = 4;
661
- return (currentHour - offsetHour) * hourHeight;
662
- };
663
- scrollContainerRef.current.scrollTop = scrollToActualTime();
747
+ const offsetHour = 4;
748
+ scrollContainerRef.current.scrollTop = ((/* @__PURE__ */ new Date()).getHours() - offsetHour) * hourHeight;
664
749
  }
665
750
  }, []);
666
751
  const getZonedDate = (date) => {
667
- return timezone ? dateFnsTz.toZonedTime(date, timezone) : date;
752
+ return timezone ? (0, import_date_fns_tz3.toZonedTime)(date, timezone) : date;
668
753
  };
669
754
  const zonedNow = getZonedDate(/* @__PURE__ */ new Date());
670
755
  const getTimezoneDisplay = (tz) => {
@@ -672,60 +757,60 @@ var WeekView = ({
672
757
  let displayTime = "";
673
758
  let acronym = "";
674
759
  if (!tz) {
675
- displayTime = dateFns.format(date, "HH:mm");
760
+ displayTime = (0, import_date_fns6.format)(date, "HH:mm");
676
761
  try {
677
762
  acronym = new Intl.DateTimeFormat("en-US", { timeZoneName: "short" }).formatToParts(date).find((part) => part.type === "timeZoneName")?.value || "";
678
- } catch (e) {
763
+ } catch {
679
764
  acronym = "LOC";
680
765
  }
681
766
  } else {
682
767
  try {
683
- const zDate = dateFnsTz.toZonedTime(date, tz);
684
- displayTime = dateFns.format(zDate, "HH:mm");
768
+ const zDate = (0, import_date_fns_tz3.toZonedTime)(date, tz);
769
+ displayTime = (0, import_date_fns6.format)(zDate, "HH:mm");
685
770
  acronym = new Intl.DateTimeFormat("en-US", { timeZone: tz, timeZoneName: "short" }).formatToParts(date).find((part) => part.type === "timeZoneName")?.value || "";
686
- } catch (e) {
687
- displayTime = dateFns.format(date, "HH:mm");
771
+ } catch {
772
+ displayTime = (0, import_date_fns6.format)(date, "HH:mm");
688
773
  acronym = tz;
689
774
  }
690
775
  }
691
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col items-center justify-center leading-tight" }, /* @__PURE__ */ React15__namespace.default.createElement("span", null, displayTime), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-[10px] opacity-75" }, "(", acronym, ")"));
776
+ return /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col items-center justify-center leading-tight" }, /* @__PURE__ */ import_react8.default.createElement("span", null, displayTime), /* @__PURE__ */ import_react8.default.createElement("span", { className: "text-[10px] opacity-75" }, "(", acronym, ")"));
692
777
  };
693
- const timeFormat = locale?.code === "fr" ? "H:mm" : "h a";
694
- const eventTimeFormat = locale?.code === "fr" ? "H:mm" : "h:mm a";
695
- const nowFormat = locale?.code === "fr" ? "H:mm" : "h:mm";
696
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col h-full bg-background border-[0.5px] border-border/50 rounded-2xl overflow-hidden min-w-[800px] md:min-w-0 shadow-sm" }, /* @__PURE__ */ React15__namespace.default.createElement(
778
+ const is24h = uses24HourClock(locale);
779
+ const timeFormat = is24h ? "H:mm" : "h a";
780
+ const eventTimeFormat = is24h ? "H:mm" : "h:mm a";
781
+ const nowFormat = is24h ? "H:mm" : "h:mm";
782
+ return /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col h-full bg-background border-[0.5px] border-border/50 rounded-2xl overflow-hidden min-w-[800px] md:min-w-0 shadow-sm" }, /* @__PURE__ */ import_react8.default.createElement(
697
783
  "div",
698
784
  {
699
785
  ref: scrollContainerRef,
700
- className: "flex-1 overflow-y-auto scrollbar-hide relative bg-background scroll-smooth",
701
- style: { scrollbarGutter: "stable" }
786
+ className: "flex-1 overflow-y-auto scrollbar-hide relative bg-background scroll-smooth"
702
787
  },
703
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/20 via-background to-muted/20 z-20 sticky top-0 backdrop-blur-sm" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-none p-3 text-center text-xs font-semibold text-muted-foreground w-16 flex items-center justify-center border-r-[0.5px] border-border/30 bg-muted/10" }, getTimezoneDisplay(timezone)), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 grid grid-cols-7" }, weekDays.map((day, index) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: day.toISOString(), className: cn("py-3 px-2 text-center", index > 0 && "border-l-[0.5px] border-border/30") }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1.5" }, dateFns.format(day, "EEE", { locale })), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: cn(
788
+ /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/20 via-background to-muted/20 z-20 sticky top-0 backdrop-blur-sm" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex-none p-3 text-center text-xs font-semibold text-muted-foreground w-16 flex items-center justify-center border-r-[0.5px] border-border/30 bg-muted/10" }, getTimezoneDisplay(timezone)), /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex-1 grid grid-cols-7" }, weekDays.map((day, index) => /* @__PURE__ */ import_react8.default.createElement("div", { key: day.toISOString(), className: cn("py-3 px-2 text-center", index > 0 && "border-l-[0.5px] border-border/30") }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1.5" }, (0, import_date_fns6.format)(day, "EEE", { locale })), /* @__PURE__ */ import_react8.default.createElement("div", { className: cn(
704
789
  "w-9 h-9 flex items-center justify-center rounded-xl mx-auto text-sm font-semibold transition-all duration-200",
705
- dateFns.isToday(day) ? "bg-primary text-primary-foreground shadow-lg shadow-primary/30 scale-110" : "text-foreground hover:bg-accent/80"
706
- ) }, dateFns.format(day, "d", { locale })))))),
707
- /* @__PURE__ */ React15__namespace.default.createElement(
790
+ (0, import_date_fns6.isToday)(day) ? "bg-primary text-primary-foreground shadow-lg shadow-primary/30 scale-110" : "text-foreground hover:bg-accent/80"
791
+ ) }, (0, import_date_fns6.format)(day, "d", { locale })))))),
792
+ /* @__PURE__ */ import_react8.default.createElement(
708
793
  "div",
709
794
  {
710
795
  className: "flex min-w-full relative",
711
796
  style: { height: hours.length * hourHeight }
712
797
  },
713
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-none w-16 border-r-[0.5px] border-border/30 relative bg-muted/5" }, hours.map((hour) => /* @__PURE__ */ React15__namespace.default.createElement(
798
+ /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex-none w-16 border-r-[0.5px] border-border/30 relative bg-muted/5" }, hours.map((hour) => /* @__PURE__ */ import_react8.default.createElement(
714
799
  "div",
715
800
  {
716
801
  key: hour,
717
802
  className: "relative w-full text-[11px] text-muted-foreground/80 text-right pr-3 font-medium tabular-nums box-border",
718
803
  style: { height: hourHeight }
719
804
  },
720
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "block -translate-y-1/2" }, hour !== 0 && dateFns.format((/* @__PURE__ */ new Date()).setHours(hour, 0, 0, 0), timeFormat, { locale }))
805
+ /* @__PURE__ */ import_react8.default.createElement("span", { className: "block -translate-y-1/2" }, hour !== 0 && (0, import_date_fns6.format)((/* @__PURE__ */ new Date()).setHours(hour, 0, 0, 0), timeFormat, { locale }))
721
806
  ))),
722
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 grid grid-cols-7 relative" }, weekDays.map((day, dayIndex) => {
807
+ /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex-1 grid grid-cols-7 relative" }, weekDays.map((day, dayIndex) => {
723
808
  const dayEvents = events.filter((e) => {
724
809
  const zonedStart = getZonedDate(e.start);
725
- return dateFns.isSameDay(zonedStart, day);
810
+ return (0, import_date_fns6.isSameDay)(zonedStart, day);
726
811
  });
727
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { key: day.toISOString(), className: cn("relative h-full", dayIndex > 0 && "border-l-[0.5px] border-border/30") }, hours.map((hour) => {
728
- return /* @__PURE__ */ React15__namespace.default.createElement(
812
+ return /* @__PURE__ */ import_react8.default.createElement("div", { key: day.toISOString(), className: cn("relative h-full", dayIndex > 0 && "border-l-[0.5px] border-border/30") }, hours.map((hour) => {
813
+ return /* @__PURE__ */ import_react8.default.createElement(
729
814
  "div",
730
815
  {
731
816
  key: hour,
@@ -736,7 +821,7 @@ var WeekView = ({
736
821
  const cellDate = new Date(day);
737
822
  cellDate.setHours(hour, minute, 0, 0);
738
823
  const cellId = cellDate.toISOString();
739
- return /* @__PURE__ */ React15__namespace.default.createElement(
824
+ return /* @__PURE__ */ import_react8.default.createElement(
740
825
  DroppableCell,
741
826
  {
742
827
  key: minute,
@@ -748,7 +833,7 @@ var WeekView = ({
748
833
  top: `${minute / 60 * 100}%`
749
834
  }
750
835
  },
751
- /* @__PURE__ */ React15__namespace.default.createElement(
836
+ /* @__PURE__ */ import_react8.default.createElement(
752
837
  "div",
753
838
  {
754
839
  className: "w-full h-full bg-transparent cursor-pointer",
@@ -778,11 +863,11 @@ var WeekView = ({
778
863
  const zonedEventStart = getZonedDate(event.start);
779
864
  const zonedEventEnd = getZonedDate(event.end);
780
865
  const startMinutes = zonedEventStart.getHours() * 60 + zonedEventStart.getMinutes();
781
- const durationMinutes = dateFns.differenceInMinutes(zonedEventEnd, zonedEventStart);
866
+ const durationMinutes = (0, import_date_fns6.differenceInMinutes)(zonedEventEnd, zonedEventStart);
782
867
  const top = startMinutes / 60 * hourHeight;
783
868
  const height = durationMinutes / 60 * hourHeight;
784
869
  const isShortEvent = durationMinutes < 60;
785
- return /* @__PURE__ */ React15__namespace.default.createElement(
870
+ return /* @__PURE__ */ import_react8.default.createElement(
786
871
  DraggableEvent,
787
872
  {
788
873
  key: `${event.id}-${day.toISOString()}`,
@@ -797,7 +882,7 @@ var WeekView = ({
797
882
  paddingRight: count > 1 ? "2px" : "0"
798
883
  }
799
884
  },
800
- /* @__PURE__ */ React15__namespace.default.createElement(
885
+ /* @__PURE__ */ import_react8.default.createElement(
801
886
  ResizableEvent,
802
887
  {
803
888
  readonly,
@@ -807,13 +892,13 @@ var WeekView = ({
807
892
  className: "h-full",
808
893
  style: { height: "100%" }
809
894
  },
810
- /* @__PURE__ */ React15__namespace.default.createElement(
895
+ /* @__PURE__ */ import_react8.default.createElement(
811
896
  "div",
812
897
  {
813
898
  className: cn(
814
899
  "rounded-md border shadow-sm transition-all hover:shadow-md group overflow-hidden relative",
815
900
  "glass",
816
- readonly ? "cursor-default" : "cursor-grab active:cursor-grabbing",
901
+ readonly || isEventDragDisabled(event) ? "cursor-default" : "cursor-grab active:cursor-grabbing",
817
902
  !event.color && "border-primary/20 bg-primary/10",
818
903
  isShortEvent ? "px-1 flex items-center justify-center" : "p-2",
819
904
  // Add active border for overlapped events to distinguish them
@@ -832,14 +917,14 @@ var WeekView = ({
832
917
  },
833
918
  title: count > 1 ? `${event.title} (${index + 1}/${count})` : void 0
834
919
  },
835
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col h-full overflow-hidden w-full" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: cn(
920
+ /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col h-full overflow-hidden w-full" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: cn(
836
921
  "font-semibold truncate text-foreground/90 leading-tight",
837
922
  isShortEvent ? "text-xs text-center" : "text-xs"
838
- ) }, event.title), !isShortEvent && /* @__PURE__ */ React15__namespace.default.createElement(React15__namespace.default.Fragment, null, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-[10px] text-muted-foreground truncate mt-0.5 font-medium leading-tight" }, dateFns.format(zonedEventStart, eventTimeFormat, { locale }), " - ", dateFns.format(zonedEventEnd, eventTimeFormat, { locale })), event.description && height > 50 && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-[10px] text-muted-foreground/80 truncate mt-1 leading-tight opacity-80" }, event.description)), count > 1 && !isShortEvent && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute top-1 right-1 bg-background/80 backdrop-blur-sm rounded-full w-4 h-4 flex items-center justify-center text-[9px] font-bold text-muted-foreground border border-border shadow-sm" }, count))
923
+ ) }, event.title), !isShortEvent && /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, /* @__PURE__ */ import_react8.default.createElement("div", { className: "text-[10px] text-muted-foreground truncate mt-0.5 font-medium leading-tight" }, (0, import_date_fns6.format)(zonedEventStart, eventTimeFormat, { locale }), " - ", (0, import_date_fns6.format)(zonedEventEnd, eventTimeFormat, { locale })), event.description && height > 50 && /* @__PURE__ */ import_react8.default.createElement("div", { className: "text-[10px] text-muted-foreground/80 truncate mt-1 leading-tight opacity-80" }, event.description)), count > 1 && !isShortEvent && /* @__PURE__ */ import_react8.default.createElement("div", { className: "absolute top-1 right-1 bg-background/80 backdrop-blur-sm rounded-full w-4 h-4 flex items-center justify-center text-[9px] font-bold text-muted-foreground border border-border shadow-sm" }, count))
839
924
  )
840
925
  )
841
926
  );
842
- }), dateFns.isToday(day) && /* @__PURE__ */ React15__namespace.default.createElement(
927
+ }), (0, import_date_fns6.isToday)(day) && /* @__PURE__ */ import_react8.default.createElement(
843
928
  "div",
844
929
  {
845
930
  className: "absolute left-0 right-0 z-20 pointer-events-none flex items-center",
@@ -847,12 +932,12 @@ var WeekView = ({
847
932
  top: `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight}px`
848
933
  }
849
934
  },
850
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "h-[2px] w-full bg-gradient-to-r from-primary via-primary to-primary/50" }),
851
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute -left-1.5 w-3 h-3 bg-primary rounded-full shadow-lg shadow-primary/40 ring-2 ring-background animate-pulse" })
935
+ /* @__PURE__ */ import_react8.default.createElement("div", { className: "h-[2px] w-full bg-gradient-to-r from-primary via-primary to-primary/50" }),
936
+ /* @__PURE__ */ import_react8.default.createElement("div", { className: "absolute -left-1.5 w-3 h-3 bg-primary rounded-full shadow-lg shadow-primary/40 ring-2 ring-background animate-pulse" })
852
937
  ));
853
938
  }))
854
939
  ),
855
- /* @__PURE__ */ React15__namespace.default.createElement(
940
+ /* @__PURE__ */ import_react8.default.createElement(
856
941
  "div",
857
942
  {
858
943
  className: "absolute left-0 w-16 pointer-events-none z-30 flex justify-end pr-2",
@@ -860,10 +945,15 @@ var WeekView = ({
860
945
  top: `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight + 80}px`
861
946
  }
862
947
  },
863
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-[10px] font-bold text-primary-foreground bg-primary px-1.5 py-0.5 rounded-md shadow-md -translate-y-1/2 backdrop-blur-none" }, dateFns.format(zonedNow, nowFormat, { locale }))
948
+ /* @__PURE__ */ import_react8.default.createElement("span", { className: "text-[10px] font-bold text-primary-foreground bg-primary px-1.5 py-0.5 rounded-md shadow-md -translate-y-1/2 backdrop-blur-none" }, (0, import_date_fns6.format)(zonedNow, nowFormat, { locale }))
864
949
  )
865
950
  ));
866
951
  };
952
+
953
+ // src/views/DayView.tsx
954
+ var import_react9 = __toESM(require("react"));
955
+ var import_date_fns7 = require("date-fns");
956
+ var import_date_fns_tz4 = require("date-fns-tz");
867
957
  var DayView = ({
868
958
  currentDate,
869
959
  events,
@@ -876,42 +966,39 @@ var DayView = ({
876
966
  }) => {
877
967
  const hours = Array.from({ length: 24 }, (_, i) => i);
878
968
  const hourHeight = 80;
879
- const scrollContainerRef = React15__namespace.default.useRef(null);
880
- const [now, setNow] = React15__namespace.default.useState(/* @__PURE__ */ new Date());
881
- React15__namespace.default.useEffect(() => {
969
+ const scrollContainerRef = import_react9.default.useRef(null);
970
+ const [now, setNow] = import_react9.default.useState(/* @__PURE__ */ new Date());
971
+ import_react9.default.useEffect(() => {
882
972
  const interval = setInterval(() => setNow(/* @__PURE__ */ new Date()), 6e4);
883
973
  return () => clearInterval(interval);
884
974
  }, []);
885
- React15__namespace.default.useEffect(() => {
975
+ import_react9.default.useEffect(() => {
886
976
  if (scrollContainerRef.current) {
887
- const scrollToActualTime = () => {
888
- const currentHour = now.getHours();
889
- const offsetHour = 3;
890
- return (currentHour - offsetHour) * hourHeight;
891
- };
892
- scrollContainerRef.current.scrollTop = scrollToActualTime();
977
+ const offsetHour = 3;
978
+ scrollContainerRef.current.scrollTop = ((/* @__PURE__ */ new Date()).getHours() - offsetHour) * hourHeight;
893
979
  }
894
980
  }, []);
895
981
  const getZonedDate = (date) => {
896
- return timezone ? dateFnsTz.toZonedTime(date, timezone) : date;
982
+ return timezone ? (0, import_date_fns_tz4.toZonedTime)(date, timezone) : date;
897
983
  };
898
984
  const zonedNow = getZonedDate(now);
899
985
  const dayEvents = events.filter((e) => {
900
986
  const zonedStart = getZonedDate(e.start);
901
- return dateFns.isSameDay(zonedStart, currentDate);
987
+ return (0, import_date_fns7.isSameDay)(zonedStart, currentDate);
902
988
  });
903
- const timeFormat = locale?.code === "fr" ? "H:mm" : "h a";
904
- const eventTimeFormat = locale?.code === "fr" ? "H:mm" : "h:mm a";
905
- const nowFormat = locale?.code === "fr" ? "H:mm" : "h:mm a";
906
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col h-full bg-background border-[0.5px] border-border/50 rounded-2xl overflow-hidden shadow-sm" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "px-6 py-4 border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/20 via-background to-muted/20 text-center shrink-0" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center justify-center gap-3" }, /* @__PURE__ */ React15__namespace.default.createElement("h2", { className: "text-xl font-semibold capitalize text-foreground" }, dateFns.format(currentDate, "EEEE, MMMM d, yyyy", { locale })), dateFns.isToday(currentDate) && /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-xs font-semibold bg-primary text-primary-foreground px-3 py-1 rounded-full shadow-md shadow-primary/20" }, "Today"))), /* @__PURE__ */ React15__namespace.default.createElement("div", { ref: scrollContainerRef, className: "flex-1 overflow-y-auto relative" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex relative", style: { height: hours.length * hourHeight } }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "w-20 bg-muted/5 border-r-[0.5px] border-border/30 relative" }, hours.map((hour) => /* @__PURE__ */ React15__namespace.default.createElement(
989
+ const is24h = uses24HourClock(locale);
990
+ const timeFormat = is24h ? "H:mm" : "h a";
991
+ const eventTimeFormat = is24h ? "H:mm" : "h:mm a";
992
+ const nowFormat = is24h ? "H:mm" : "h:mm a";
993
+ return /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex flex-col h-full bg-background border-[0.5px] border-border/50 rounded-2xl overflow-hidden shadow-sm" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "px-6 py-4 border-b-[0.5px] border-border/50 bg-gradient-to-r from-muted/20 via-background to-muted/20 text-center shrink-0" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex items-center justify-center gap-3" }, /* @__PURE__ */ import_react9.default.createElement("h2", { className: "text-xl font-semibold capitalize text-foreground" }, (0, import_date_fns7.format)(currentDate, "EEEE, MMMM d, yyyy", { locale })), (0, import_date_fns7.isToday)(currentDate) && /* @__PURE__ */ import_react9.default.createElement("span", { className: "text-xs font-semibold bg-primary text-primary-foreground px-3 py-1 rounded-full shadow-md shadow-primary/20" }, "Today"))), /* @__PURE__ */ import_react9.default.createElement("div", { ref: scrollContainerRef, className: "flex-1 overflow-y-auto relative" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex relative", style: { height: hours.length * hourHeight } }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "w-20 bg-muted/5 border-r-[0.5px] border-border/30 relative" }, hours.map((hour) => /* @__PURE__ */ import_react9.default.createElement(
907
994
  "div",
908
995
  {
909
996
  key: hour,
910
997
  className: "relative w-full",
911
998
  style: { height: hourHeight }
912
999
  },
913
- hour !== 0 && /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "absolute w-full text-center -top-3 left-1/2 -translate-x-1/2 text-[11px] text-muted-foreground/80 font-medium tabular-nums bg-background px-1.5 py-0.5 rounded-md" }, dateFns.format((/* @__PURE__ */ new Date()).setHours(hour, 0, 0, 0), timeFormat, { locale }))
914
- )), dateFns.isToday(currentDate) && /* @__PURE__ */ React15__namespace.default.createElement(
1000
+ hour !== 0 && /* @__PURE__ */ import_react9.default.createElement("span", { className: "absolute w-full text-center -top-3 left-1/2 -translate-x-1/2 text-[11px] text-muted-foreground/80 font-medium tabular-nums bg-background px-1.5 py-0.5 rounded-md" }, (0, import_date_fns7.format)((/* @__PURE__ */ new Date()).setHours(hour, 0, 0, 0), timeFormat, { locale }))
1001
+ )), (0, import_date_fns7.isToday)(currentDate) && /* @__PURE__ */ import_react9.default.createElement(
915
1002
  "div",
916
1003
  {
917
1004
  className: "absolute left-0 w-full pointer-events-none z-30 flex justify-end pr-2",
@@ -919,9 +1006,9 @@ var DayView = ({
919
1006
  top: `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight}px`
920
1007
  }
921
1008
  },
922
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-[10px] font-bold text-white bg-primary px-2 py-1 rounded-lg shadow-md shadow-primary/30 -translate-y-1/2" }, dateFns.format(zonedNow, nowFormat, { locale }))
923
- )), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 relative" }, hours.map((hour) => {
924
- return /* @__PURE__ */ React15__namespace.default.createElement(
1009
+ /* @__PURE__ */ import_react9.default.createElement("span", { className: "text-[10px] font-bold text-white bg-primary px-2 py-1 rounded-lg shadow-md shadow-primary/30 -translate-y-1/2" }, (0, import_date_fns7.format)(zonedNow, nowFormat, { locale }))
1010
+ )), /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex-1 relative" }, hours.map((hour) => {
1011
+ return /* @__PURE__ */ import_react9.default.createElement(
925
1012
  "div",
926
1013
  {
927
1014
  key: hour,
@@ -932,7 +1019,7 @@ var DayView = ({
932
1019
  const cellDate = new Date(currentDate);
933
1020
  cellDate.setHours(hour, minute, 0, 0);
934
1021
  const cellId = cellDate.toISOString();
935
- return /* @__PURE__ */ React15__namespace.default.createElement(
1022
+ return /* @__PURE__ */ import_react9.default.createElement(
936
1023
  DroppableCell,
937
1024
  {
938
1025
  key: minute,
@@ -944,7 +1031,7 @@ var DayView = ({
944
1031
  top: `${minute / 60 * 100}%`
945
1032
  }
946
1033
  },
947
- /* @__PURE__ */ React15__namespace.default.createElement(
1034
+ /* @__PURE__ */ import_react9.default.createElement(
948
1035
  "div",
949
1036
  {
950
1037
  className: "h-full w-full bg-transparent cursor-pointer",
@@ -973,11 +1060,11 @@ var DayView = ({
973
1060
  const zonedStart = getZonedDate(event.start);
974
1061
  const zonedEnd = getZonedDate(event.end);
975
1062
  const startMinutes = zonedStart.getHours() * 60 + zonedStart.getMinutes();
976
- const durationMinutes = dateFns.differenceInMinutes(zonedEnd, zonedStart);
1063
+ const durationMinutes = (0, import_date_fns7.differenceInMinutes)(zonedEnd, zonedStart);
977
1064
  const top = startMinutes / 60 * hourHeight;
978
1065
  const height = durationMinutes / 60 * hourHeight;
979
1066
  const isShortEvent = durationMinutes < 45;
980
- return /* @__PURE__ */ React15__namespace.default.createElement(
1067
+ return /* @__PURE__ */ import_react9.default.createElement(
981
1068
  DraggableEvent,
982
1069
  {
983
1070
  key: `${event.id}-${currentDate.toISOString()}`,
@@ -991,7 +1078,7 @@ var DayView = ({
991
1078
  paddingRight: count > 1 ? "2px" : "0"
992
1079
  }
993
1080
  },
994
- /* @__PURE__ */ React15__namespace.default.createElement(
1081
+ /* @__PURE__ */ import_react9.default.createElement(
995
1082
  ResizableEvent,
996
1083
  {
997
1084
  readonly,
@@ -1001,13 +1088,13 @@ var DayView = ({
1001
1088
  className: "h-full",
1002
1089
  style: { height: "100%" }
1003
1090
  },
1004
- /* @__PURE__ */ React15__namespace.default.createElement(
1091
+ /* @__PURE__ */ import_react9.default.createElement(
1005
1092
  "div",
1006
1093
  {
1007
1094
  className: cn(
1008
1095
  "h-full rounded-lg border-[0.5px] shadow-sm overflow-hidden transition-all hover:shadow-lg hover:z-20 group",
1009
1096
  "glass backdrop-blur-sm",
1010
- readonly ? "cursor-default" : "cursor-grab active:cursor-grabbing",
1097
+ readonly || isEventDragDisabled(event) ? "cursor-default" : "cursor-grab active:cursor-grabbing",
1011
1098
  !event.color && "bg-primary/10 border-primary/20",
1012
1099
  isShortEvent ? "px-2 flex items-center" : "px-3 py-2",
1013
1100
  count > 1 && "border-l-4"
@@ -1024,15 +1111,15 @@ var DayView = ({
1024
1111
  },
1025
1112
  title: count > 1 ? `${event.title} (${index + 1}/${count})` : void 0
1026
1113
  },
1027
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col h-full overflow-hidden w-full" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: cn(
1114
+ /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex flex-col h-full overflow-hidden w-full" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: cn(
1028
1115
  "font-semibold truncate leading-tight",
1029
1116
  isShortEvent ? "text-xs" : "text-sm",
1030
1117
  event.color ? "text-foreground" : "text-foreground/90"
1031
- ) }, event.title), !isShortEvent && /* @__PURE__ */ React15__namespace.default.createElement(React15__namespace.default.Fragment, null, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-xs text-muted-foreground mt-0.5 font-medium" }, dateFns.format(zonedStart, eventTimeFormat, { locale }), " - ", dateFns.format(zonedEnd, eventTimeFormat, { locale })), event.description && height > 60 && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-xs text-muted-foreground/80 mt-1 line-clamp-2" }, event.description)), count > 1 && !isShortEvent && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute top-1.5 right-1.5 bg-background/90 backdrop-blur-sm rounded-full w-5 h-5 flex items-center justify-center text-[10px] font-bold text-muted-foreground border border-border shadow-sm" }, count))
1118
+ ) }, event.title), !isShortEvent && /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("div", { className: "text-xs text-muted-foreground mt-0.5 font-medium" }, (0, import_date_fns7.format)(zonedStart, eventTimeFormat, { locale }), " - ", (0, import_date_fns7.format)(zonedEnd, eventTimeFormat, { locale })), event.description && height > 60 && /* @__PURE__ */ import_react9.default.createElement("div", { className: "text-xs text-muted-foreground/80 mt-1 line-clamp-2" }, event.description)), count > 1 && !isShortEvent && /* @__PURE__ */ import_react9.default.createElement("div", { className: "absolute top-1.5 right-1.5 bg-background/90 backdrop-blur-sm rounded-full w-5 h-5 flex items-center justify-center text-[10px] font-bold text-muted-foreground border border-border shadow-sm" }, count))
1032
1119
  )
1033
1120
  )
1034
1121
  );
1035
- }), dateFns.isToday(currentDate) && /* @__PURE__ */ React15__namespace.default.createElement(
1122
+ }), (0, import_date_fns7.isToday)(currentDate) && /* @__PURE__ */ import_react9.default.createElement(
1036
1123
  "div",
1037
1124
  {
1038
1125
  className: "absolute left-0 right-0 z-20 pointer-events-none flex items-center",
@@ -1040,45 +1127,62 @@ var DayView = ({
1040
1127
  top: `${(zonedNow.getHours() * 60 + zonedNow.getMinutes()) / 60 * hourHeight}px`
1041
1128
  }
1042
1129
  },
1043
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "h-[2px] w-full bg-gradient-to-r from-primary via-primary to-primary/50" }),
1044
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute -left-1.5 w-3 h-3 bg-primary rounded-full shadow-lg shadow-primary/40 ring-2 ring-background animate-pulse" })
1130
+ /* @__PURE__ */ import_react9.default.createElement("div", { className: "h-[2px] w-full bg-gradient-to-r from-primary via-primary to-primary/50" }),
1131
+ /* @__PURE__ */ import_react9.default.createElement("div", { className: "absolute -left-1.5 w-3 h-3 bg-primary rounded-full shadow-lg shadow-primary/40 ring-2 ring-background animate-pulse" })
1045
1132
  )))));
1046
1133
  };
1047
- var AgendaEmptyState = ({ onCreateEvent, translations }) => /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col items-center justify-center h-full min-h-[400px] py-12" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "relative mb-8" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "p-8 bg-gradient-to-br from-green-50 to-blue-50 dark:from-green-900/10 dark:to-blue-900/10 rounded-3xl border border-border/30" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "w-12 h-12 rounded-2xl bg-green-100 dark:bg-green-900/30 flex items-center justify-center" }, /* @__PURE__ */ React15__namespace.default.createElement("svg", { className: "w-6 h-6 text-green-600 dark:text-green-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2 }, /* @__PURE__ */ React15__namespace.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" }))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-left" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "font-medium text-foreground" }, "All caught up!"), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-sm text-muted-foreground" }, "No events scheduled"))))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-center max-w-sm" }, /* @__PURE__ */ React15__namespace.default.createElement("h3", { className: "text-lg font-semibold text-foreground mb-2" }, translations?.noUpcoming || "Your schedule is clear"), /* @__PURE__ */ React15__namespace.default.createElement("p", { className: "text-sm text-muted-foreground mb-6" }, "No upcoming events to show. Create a new event to start planning."), onCreateEvent && /* @__PURE__ */ React15__namespace.default.createElement(
1134
+
1135
+ // src/views/AgendaView.tsx
1136
+ var import_react11 = __toESM(require("react"));
1137
+ var import_date_fns8 = require("date-fns");
1138
+
1139
+ // src/components/EmptyState.tsx
1140
+ var import_react10 = __toESM(require("react"));
1141
+ var import_lucide_react4 = require("lucide-react");
1142
+ var AgendaEmptyState = ({ onCreateEvent, translations }) => /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex flex-col items-center justify-center h-full min-h-[400px] py-12" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative mb-8" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "p-8 bg-gradient-to-br from-green-50 to-blue-50 dark:from-green-900/10 dark:to-blue-900/10 rounded-3xl border border-border/30" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-12 h-12 rounded-2xl bg-green-100 dark:bg-green-900/30 flex items-center justify-center" }, /* @__PURE__ */ import_react10.default.createElement("svg", { className: "w-6 h-6 text-green-600 dark:text-green-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2 }, /* @__PURE__ */ import_react10.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" }))), /* @__PURE__ */ import_react10.default.createElement("div", { className: "text-left" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "font-medium text-foreground" }, translations?.allCaughtUp || "All caught up!"), /* @__PURE__ */ import_react10.default.createElement("div", { className: "text-sm text-muted-foreground" }, translations?.noEventsScheduled || "No events scheduled"))))), /* @__PURE__ */ import_react10.default.createElement("div", { className: "text-center max-w-sm" }, /* @__PURE__ */ import_react10.default.createElement("h3", { className: "text-lg font-semibold text-foreground mb-2" }, translations?.noUpcoming || "Your schedule is clear"), /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-sm text-muted-foreground mb-6" }, translations?.noUpcomingHint || "No upcoming events to show. Create a new event to start planning."), onCreateEvent && /* @__PURE__ */ import_react10.default.createElement(
1048
1143
  "button",
1049
1144
  {
1050
1145
  onClick: onCreateEvent,
1051
1146
  className: "inline-flex items-center gap-2 px-5 py-2.5 bg-primary text-primary-foreground rounded-xl font-medium text-sm shadow-lg shadow-primary/20 hover:shadow-xl hover:shadow-primary/30 hover:scale-105 active:scale-95 transition-all duration-200"
1052
1147
  },
1053
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Plus, { className: "w-4 h-4" }),
1148
+ /* @__PURE__ */ import_react10.default.createElement(import_lucide_react4.Plus, { className: "w-4 h-4" }),
1054
1149
  translations?.createEvent || "Create Event"
1055
1150
  )));
1151
+
1152
+ // src/views/AgendaView.tsx
1153
+ var import_framer_motion = require("framer-motion");
1154
+ var import_lucide_react5 = require("lucide-react");
1056
1155
  var formatDuration = (start, end) => {
1057
- const minutes = dateFns.differenceInMinutes(end, start);
1156
+ const minutes = (0, import_date_fns8.differenceInMinutes)(end, start);
1058
1157
  if (minutes < 60) return `${minutes}m`;
1059
1158
  const hours = Math.floor(minutes / 60);
1060
1159
  const remainingMinutes = minutes % 60;
1061
1160
  if (remainingMinutes === 0) return `${hours}h`;
1062
1161
  return `${hours}h ${remainingMinutes}m`;
1063
1162
  };
1064
- var getDateLabel = (date) => {
1065
- if (dateFns.isToday(date)) return "Today";
1066
- if (dateFns.isTomorrow(date)) return "Tomorrow";
1067
- return dateFns.format(date, "EEEE");
1163
+ var getDateLabel = (date, locale, translations) => {
1164
+ if ((0, import_date_fns8.isToday)(date)) return translations?.today || "Today";
1165
+ if ((0, import_date_fns8.isTomorrow)(date)) return translations?.tomorrow || "Tomorrow";
1166
+ return (0, import_date_fns8.format)(date, "EEEE", { locale });
1068
1167
  };
1069
1168
  var AgendaView = ({
1070
1169
  currentDate,
1071
1170
  events,
1072
1171
  onEventClick,
1073
- onCreateEvent
1172
+ onCreateEvent,
1173
+ locale,
1174
+ translations
1074
1175
  }) => {
1075
- const groupedEvents = React15.useMemo(() => {
1076
- const startDate = dateFns.startOfDay(currentDate);
1176
+ const is24h = uses24HourClock(locale);
1177
+ const timePattern = is24h ? "H:mm" : "h:mm a";
1178
+ const compactTimePattern = is24h ? "H:mm" : "h:mm";
1179
+ const groupedEvents = (0, import_react11.useMemo)(() => {
1180
+ const startDate = (0, import_date_fns8.startOfDay)(currentDate);
1077
1181
  const groups = [];
1078
1182
  const sortedEvents = [...events].sort((a, b) => a.start.getTime() - b.start.getTime());
1079
1183
  for (let i = 0; i < 30; i++) {
1080
- const day = dateFns.addDays(startDate, i);
1081
- const dayEvents = sortedEvents.filter((event) => dateFns.isSameDay(event.start, day));
1184
+ const day = (0, import_date_fns8.addDays)(startDate, i);
1185
+ const dayEvents = sortedEvents.filter((event) => (0, import_date_fns8.isSameDay)(event.start, day));
1082
1186
  if (dayEvents.length > 0) {
1083
1187
  groups.push({ date: day, events: dayEvents });
1084
1188
  }
@@ -1098,30 +1202,30 @@ var AgendaView = ({
1098
1202
  hidden: { opacity: 0, x: -20 },
1099
1203
  show: { opacity: 1, x: 0 }
1100
1204
  };
1101
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col h-full bg-background overflow-y-auto" }, groupedEvents.length === 0 ? /* @__PURE__ */ React15__namespace.default.createElement(AgendaEmptyState, { onCreateEvent }) : /* @__PURE__ */ React15__namespace.default.createElement(
1102
- framerMotion.motion.div,
1205
+ return /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex flex-col h-full bg-background overflow-y-auto" }, groupedEvents.length === 0 ? /* @__PURE__ */ import_react11.default.createElement(AgendaEmptyState, { onCreateEvent, translations }) : /* @__PURE__ */ import_react11.default.createElement(
1206
+ import_framer_motion.motion.div,
1103
1207
  {
1104
1208
  className: "max-w-3xl mx-auto w-full pb-10 px-4 md:px-6",
1105
1209
  variants: container,
1106
1210
  initial: "hidden",
1107
1211
  animate: "show"
1108
1212
  },
1109
- groupedEvents.map((group, groupIndex) => /* @__PURE__ */ React15__namespace.default.createElement(
1110
- framerMotion.motion.div,
1213
+ groupedEvents.map((group) => /* @__PURE__ */ import_react11.default.createElement(
1214
+ import_framer_motion.motion.div,
1111
1215
  {
1112
1216
  key: group.date.toISOString(),
1113
1217
  className: "relative",
1114
1218
  variants: item
1115
1219
  },
1116
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "sticky top-0 bg-background/95 backdrop-blur-md py-4 z-10 border-b border-border/50" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: cn(
1220
+ /* @__PURE__ */ import_react11.default.createElement("div", { className: "sticky top-0 bg-background/95 backdrop-blur-md py-4 z-10 border-b border-border/50" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: cn(
1117
1221
  "flex flex-col items-center justify-center w-16 h-16 rounded-2xl transition-all",
1118
- dateFns.isToday(group.date) ? "bg-primary text-primary-foreground shadow-lg shadow-primary/30" : "bg-muted/50 text-foreground"
1119
- ) }, /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-2xl font-bold leading-none" }, dateFns.format(group.date, "d")), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-xs font-medium uppercase tracking-wide opacity-80" }, dateFns.format(group.date, "MMM"))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React15__namespace.default.createElement("span", { className: cn(
1222
+ (0, import_date_fns8.isToday)(group.date) ? "bg-primary text-primary-foreground shadow-lg shadow-primary/30" : "bg-muted/50 text-foreground"
1223
+ ) }, /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-2xl font-bold leading-none" }, (0, import_date_fns8.format)(group.date, "d")), /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-xs font-medium uppercase tracking-wide opacity-80" }, (0, import_date_fns8.format)(group.date, "MMM", { locale }))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: cn(
1120
1224
  "text-lg font-semibold",
1121
- dateFns.isToday(group.date) && "text-primary"
1122
- ) }, getDateLabel(group.date)), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm text-muted-foreground" }, group.events.length, " event", group.events.length !== 1 ? "s" : "")))),
1123
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "py-4 space-y-3" }, group.events.map((event, eventIndex) => /* @__PURE__ */ React15__namespace.default.createElement(
1124
- framerMotion.motion.div,
1225
+ (0, import_date_fns8.isToday)(group.date) && "text-primary"
1226
+ ) }, getDateLabel(group.date, locale, translations)), /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-sm text-muted-foreground" }, group.events.length, " ", group.events.length !== 1 ? translations?.eventPlural || "events" : translations?.eventSingular || "event")))),
1227
+ /* @__PURE__ */ import_react11.default.createElement("div", { className: "py-4 space-y-3" }, group.events.map((event) => /* @__PURE__ */ import_react11.default.createElement(
1228
+ import_framer_motion.motion.div,
1125
1229
  {
1126
1230
  key: event.id,
1127
1231
  onClick: () => onEventClick?.(event),
@@ -1134,26 +1238,30 @@ var AgendaView = ({
1134
1238
  whileHover: { scale: 1.01, y: -2 },
1135
1239
  transition: { duration: 0.2 }
1136
1240
  },
1137
- /* @__PURE__ */ React15__namespace.default.createElement(
1241
+ /* @__PURE__ */ import_react11.default.createElement(
1138
1242
  "div",
1139
1243
  {
1140
1244
  className: "absolute left-0 top-3 bottom-3 w-1 rounded-full",
1141
1245
  style: { backgroundColor: event.color || "var(--primary)" }
1142
1246
  }
1143
1247
  ),
1144
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col items-center min-w-[70px] pl-2" }, event.allDay ? /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-xs font-semibold text-muted-foreground bg-muted/80 px-2.5 py-1 rounded-full" }, "All Day")) : /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-base font-semibold text-foreground" }, dateFns.format(event.start, "h:mm")), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-xs text-muted-foreground uppercase" }, dateFns.format(event.start, "a")), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "w-px h-3 bg-border my-1" }), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-xs text-muted-foreground/70 font-medium" }, formatDuration(event.start, event.end)))),
1145
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 min-w-0 space-y-2" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-start justify-between gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement("h4", { className: "text-base font-semibold text-foreground group-hover:text-primary transition-colors line-clamp-1" }, event.title), /* @__PURE__ */ React15__namespace.default.createElement(
1248
+ /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex flex-col items-center min-w-[70px] pl-2" }, event.allDay ? /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-xs font-semibold text-muted-foreground bg-muted/80 px-2.5 py-1 rounded-full" }, translations?.allDay || "All Day")) : /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex flex-col items-center" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-base font-semibold text-foreground" }, (0, import_date_fns8.format)(event.start, compactTimePattern, { locale })), !is24h && /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-xs text-muted-foreground uppercase" }, (0, import_date_fns8.format)(event.start, "a")), /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-px h-3 bg-border my-1" }), /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-xs text-muted-foreground/70 font-medium" }, formatDuration(event.start, event.end)))),
1249
+ /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex-1 min-w-0 space-y-2" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-start justify-between gap-2" }, /* @__PURE__ */ import_react11.default.createElement("h4", { className: "text-base font-semibold text-foreground group-hover:text-primary transition-colors line-clamp-1" }, event.title), /* @__PURE__ */ import_react11.default.createElement(
1146
1250
  "div",
1147
1251
  {
1148
1252
  className: "w-3 h-3 rounded-full shrink-0 mt-1.5",
1149
1253
  style: { backgroundColor: event.color || "var(--primary)" }
1150
1254
  }
1151
- )), event.description && /* @__PURE__ */ React15__namespace.default.createElement("p", { className: "text-sm text-muted-foreground line-clamp-2 leading-relaxed" }, event.description), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-wrap items-center gap-3 pt-1" }, !event.allDay && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Clock, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ React15__namespace.default.createElement("span", null, dateFns.format(event.start, "h:mm a"), " - ", dateFns.format(event.end, "h:mm a"))), event.guests && event.guests.length > 0 && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Users, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ React15__namespace.default.createElement("span", null, event.guests.length, " guest", event.guests.length !== 1 ? "s" : "")), event.attachments && event.attachments.length > 0 && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Paperclip, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ React15__namespace.default.createElement("span", null, event.attachments.length)), event.reminders && event.reminders.length > 0 && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Bell, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ React15__namespace.default.createElement("span", null, event.reminders.length)))),
1152
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute right-4 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity" }, /* @__PURE__ */ React15__namespace.default.createElement("svg", { className: "w-5 h-5 text-muted-foreground", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2" }, /* @__PURE__ */ React15__namespace.default.createElement("path", { d: "M9 18l6-6-6-6" })))
1255
+ )), event.description && /* @__PURE__ */ import_react11.default.createElement("p", { className: "text-sm text-muted-foreground line-clamp-2 leading-relaxed" }, event.description), /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex flex-wrap items-center gap-3 pt-1" }, !event.allDay && /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground" }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.Clock, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ import_react11.default.createElement("span", null, (0, import_date_fns8.format)(event.start, timePattern, { locale }), " - ", (0, import_date_fns8.format)(event.end, timePattern, { locale }))), event.guests && event.guests.length > 0 && /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground" }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.Users, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ import_react11.default.createElement("span", null, event.guests.length, " ", event.guests.length !== 1 ? translations?.guestsCount || "guests" : translations?.guestCount || "guest")), event.attachments && event.attachments.length > 0 && /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground" }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.Paperclip, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ import_react11.default.createElement("span", null, event.attachments.length)), event.reminders && event.reminders.length > 0 && /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground" }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.Bell, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ import_react11.default.createElement("span", null, event.reminders.length)))),
1256
+ /* @__PURE__ */ import_react11.default.createElement("div", { className: "absolute right-4 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity" }, /* @__PURE__ */ import_react11.default.createElement("svg", { className: "w-5 h-5 text-muted-foreground", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2" }, /* @__PURE__ */ import_react11.default.createElement("path", { d: "M9 18l6-6-6-6" })))
1153
1257
  )))
1154
1258
  ))
1155
1259
  ));
1156
1260
  };
1261
+
1262
+ // src/views/ResourceView.tsx
1263
+ var import_react12 = __toESM(require("react"));
1264
+ var import_date_fns9 = require("date-fns");
1157
1265
  var ResourceView = ({
1158
1266
  currentDate,
1159
1267
  events,
@@ -1162,16 +1270,16 @@ var ResourceView = ({
1162
1270
  onTimeSlotClick,
1163
1271
  locale
1164
1272
  }) => {
1165
- const containerRef = React15.useRef(null);
1273
+ const containerRef = (0, import_react12.useRef)(null);
1166
1274
  const hours = Array.from({ length: 24 }, (_, i) => i);
1167
1275
  const hourWidth = 100;
1168
- const timeFormat = locale?.code === "fr" ? "H:mm" : "h a";
1276
+ const timeFormat = uses24HourClock(locale) ? "H:mm" : "h a";
1169
1277
  const getEventStyle = (event) => {
1170
1278
  const start = new Date(event.start);
1171
1279
  const end = new Date(event.end);
1172
- const dayStart = dateFns.startOfDay(currentDate);
1173
- const startMinutes = dateFns.differenceInMinutes(start, dayStart);
1174
- const durationMinutes = dateFns.differenceInMinutes(end, start);
1280
+ const dayStart = (0, import_date_fns9.startOfDay)(currentDate);
1281
+ const startMinutes = (0, import_date_fns9.differenceInMinutes)(start, dayStart);
1282
+ const durationMinutes = (0, import_date_fns9.differenceInMinutes)(end, start);
1175
1283
  const left = startMinutes / 60 * hourWidth;
1176
1284
  const width = durationMinutes / 60 * hourWidth;
1177
1285
  return {
@@ -1180,19 +1288,19 @@ var ResourceView = ({
1180
1288
  // Min width for visibility
1181
1289
  };
1182
1290
  };
1183
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col h-full bg-background overflow-hidden" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex border-b border-border bg-muted/20" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "w-48 shrink-0 border-r border-border p-4 font-semibold text-sm bg-background sticky left-0 z-20" }, "Resources"), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex overflow-hidden" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex relative", style: { width: hours.length * hourWidth } }, hours.map((hour) => /* @__PURE__ */ React15__namespace.default.createElement(
1291
+ return /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex flex-col h-full bg-background overflow-hidden" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex border-b border-border bg-muted/20" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "w-48 shrink-0 border-r border-border p-4 font-semibold text-sm bg-background sticky left-0 z-20" }, "Resources"), /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex overflow-hidden" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex relative", style: { width: hours.length * hourWidth } }, hours.map((hour) => /* @__PURE__ */ import_react12.default.createElement(
1184
1292
  "div",
1185
1293
  {
1186
1294
  key: hour,
1187
1295
  className: "border-r border-border/50 text-xs text-muted-foreground p-2 font-medium shrink-0",
1188
1296
  style: { width: hourWidth }
1189
1297
  },
1190
- dateFns.format((/* @__PURE__ */ new Date()).setHours(hour, 0, 0, 0), timeFormat, { locale })
1191
- ))))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 overflow-auto relative", ref: containerRef }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "min-w-fit" }, resources.map((resource) => {
1298
+ (0, import_date_fns9.format)((/* @__PURE__ */ new Date()).setHours(hour, 0, 0, 0), timeFormat, { locale })
1299
+ ))))), /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex-1 overflow-auto relative", ref: containerRef }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "min-w-fit" }, resources.map((resource) => {
1192
1300
  const resourceEvents = events.filter(
1193
- (e) => e.resourceId === resource.id && dateFns.isSameDay(new Date(e.start), currentDate)
1301
+ (e) => e.resourceId === resource.id && (0, import_date_fns9.isSameDay)(new Date(e.start), currentDate)
1194
1302
  );
1195
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { key: resource.id, className: "flex border-b border-border min-h-[100px]" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "w-48 shrink-0 border-r border-border p-4 bg-background sticky left-0 z-10 flex items-center gap-3" }, resource.avatar ? /* @__PURE__ */ React15__namespace.default.createElement("img", { src: resource.avatar, alt: resource.label, className: "w-8 h-8 rounded-full object-cover" }) : /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold text-primary" }, resource.label.substring(0, 2).toUpperCase()), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm font-medium" }, resource.label), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-xs text-muted-foreground" }, "ID: ", resource.id))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "relative flex", style: { width: hours.length * hourWidth } }, hours.map((hour) => /* @__PURE__ */ React15__namespace.default.createElement(
1303
+ return /* @__PURE__ */ import_react12.default.createElement("div", { key: resource.id, className: "flex border-b border-border min-h-[100px]" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "w-48 shrink-0 border-r border-border p-4 bg-background sticky left-0 z-10 flex items-center gap-3" }, resource.avatar ? /* @__PURE__ */ import_react12.default.createElement("img", { src: resource.avatar, alt: resource.label, className: "w-8 h-8 rounded-full object-cover" }) : /* @__PURE__ */ import_react12.default.createElement("div", { className: "w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold text-primary" }, resource.label.substring(0, 2).toUpperCase()), /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ import_react12.default.createElement("span", { className: "text-sm font-medium" }, resource.label), /* @__PURE__ */ import_react12.default.createElement("span", { className: "text-xs text-muted-foreground" }, "ID: ", resource.id))), /* @__PURE__ */ import_react12.default.createElement("div", { className: "relative flex", style: { width: hours.length * hourWidth } }, hours.map((hour) => /* @__PURE__ */ import_react12.default.createElement(
1196
1304
  "div",
1197
1305
  {
1198
1306
  key: hour,
@@ -1203,7 +1311,7 @@ var ResourceView = ({
1203
1311
  const slotDate = new Date(currentDate);
1204
1312
  slotDate.setHours(hour, minute, 0, 0);
1205
1313
  const slotId = `${resource.id}-${slotDate.toISOString()}`;
1206
- return /* @__PURE__ */ React15__namespace.default.createElement(
1314
+ return /* @__PURE__ */ import_react12.default.createElement(
1207
1315
  DroppableCell,
1208
1316
  {
1209
1317
  key: minute,
@@ -1217,7 +1325,7 @@ var ResourceView = ({
1217
1325
  }
1218
1326
  );
1219
1327
  })
1220
- )), resourceEvents.map((event) => /* @__PURE__ */ React15__namespace.default.createElement(
1328
+ )), resourceEvents.map((event) => /* @__PURE__ */ import_react12.default.createElement(
1221
1329
  DraggableEvent,
1222
1330
  {
1223
1331
  key: event.id,
@@ -1234,10 +1342,17 @@ var ResourceView = ({
1234
1342
  color: "#fff"
1235
1343
  }
1236
1344
  },
1237
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "truncate" }, event.title)
1345
+ /* @__PURE__ */ import_react12.default.createElement("div", { className: "truncate" }, event.title)
1238
1346
  ))));
1239
1347
  }))));
1240
1348
  };
1349
+
1350
+ // src/components/EventModal.tsx
1351
+ var import_react14 = __toESM(require("react"));
1352
+
1353
+ // src/components/ui/Modal.tsx
1354
+ var import_react13 = __toESM(require("react"));
1355
+ var import_lucide_react6 = require("lucide-react");
1241
1356
  var Modal = ({
1242
1357
  isOpen,
1243
1358
  onClose,
@@ -1246,8 +1361,8 @@ var Modal = ({
1246
1361
  className,
1247
1362
  hideHeader = false
1248
1363
  }) => {
1249
- const overlayRef = React15.useRef(null);
1250
- React15.useEffect(() => {
1364
+ const overlayRef = (0, import_react13.useRef)(null);
1365
+ (0, import_react13.useEffect)(() => {
1251
1366
  const handleEscape = (e) => {
1252
1367
  if (e.key === "Escape") {
1253
1368
  onClose();
@@ -1261,14 +1376,14 @@ var Modal = ({
1261
1376
  };
1262
1377
  }, [isOpen, onClose]);
1263
1378
  if (!isOpen) return null;
1264
- return /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute inset-0 z-50 flex items-center justify-center p-4 bg-black/40 backdrop-blur-md animate-in fade-in duration-300" }, /* @__PURE__ */ React15__namespace.default.createElement(
1379
+ return /* @__PURE__ */ import_react13.default.createElement("div", { className: "absolute inset-0 z-50 flex items-center justify-center p-4 bg-black/40 backdrop-blur-md animate-in fade-in duration-300" }, /* @__PURE__ */ import_react13.default.createElement(
1265
1380
  "div",
1266
1381
  {
1267
1382
  ref: overlayRef,
1268
1383
  className: "absolute inset-0",
1269
1384
  onClick: onClose
1270
1385
  }
1271
- ), /* @__PURE__ */ React15__namespace.default.createElement(
1386
+ ), /* @__PURE__ */ import_react13.default.createElement(
1272
1387
  "div",
1273
1388
  {
1274
1389
  className: cn(
@@ -1276,7 +1391,7 @@ var Modal = ({
1276
1391
  className
1277
1392
  )
1278
1393
  },
1279
- !hideHeader && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center justify-between px-6 py-4 border-b border-border/50 shrink-0 bg-gradient-to-r from-muted/20 to-background" }, /* @__PURE__ */ React15__namespace.default.createElement("h3", { className: "text-lg font-semibold text-foreground" }, title), /* @__PURE__ */ React15__namespace.default.createElement(
1394
+ !hideHeader && /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex items-center justify-between px-6 py-4 border-b border-border/50 shrink-0 bg-gradient-to-r from-muted/20 to-background" }, /* @__PURE__ */ import_react13.default.createElement("h3", { className: "text-lg font-semibold text-foreground" }, title), /* @__PURE__ */ import_react13.default.createElement(
1280
1395
  Button,
1281
1396
  {
1282
1397
  variant: "ghost",
@@ -1284,12 +1399,17 @@ var Modal = ({
1284
1399
  onClick: onClose,
1285
1400
  className: "h-9 w-9 p-0 rounded-xl hover:bg-accent/80 transition-all duration-200"
1286
1401
  },
1287
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.X, { className: "h-4 w-4" }),
1288
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "sr-only" }, "Close")
1402
+ /* @__PURE__ */ import_react13.default.createElement(import_lucide_react6.X, { className: "h-4 w-4" }),
1403
+ /* @__PURE__ */ import_react13.default.createElement("span", { className: "sr-only" }, "Close")
1289
1404
  )),
1290
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: cn("overflow-y-auto flex-1", !hideHeader && "p-6") }, children)
1405
+ /* @__PURE__ */ import_react13.default.createElement("div", { className: cn("overflow-y-auto flex-1", !hideHeader && "p-6") }, children)
1291
1406
  ));
1292
1407
  };
1408
+
1409
+ // src/components/EventModal.tsx
1410
+ var import_date_fns10 = require("date-fns");
1411
+ var import_framer_motion2 = require("framer-motion");
1412
+ var import_lucide_react7 = require("lucide-react");
1293
1413
  var REMINDER_OPTIONS = [
1294
1414
  { value: 0, label: "At time of event" },
1295
1415
  { value: 5, label: "5 minutes before" },
@@ -1331,13 +1451,10 @@ var EventModal = ({
1331
1451
  initialDate,
1332
1452
  onSave,
1333
1453
  onDelete,
1334
- calendars,
1335
- eventTypes,
1336
- translations
1454
+ calendars
1337
1455
  }) => {
1338
- const [mode, setMode] = React15.useState("create");
1339
- const [activeTab, setActiveTab] = React15.useState("details");
1340
- const [formData, setFormData] = React15.useState({
1456
+ const [mode, setMode] = (0, import_react14.useState)("create");
1457
+ const [formData, setFormData] = (0, import_react14.useState)({
1341
1458
  title: "",
1342
1459
  description: "",
1343
1460
  location: "",
@@ -1351,10 +1468,10 @@ var EventModal = ({
1351
1468
  attachments: [],
1352
1469
  reminders: [{ id: "1", type: "notification", time: 30, label: "30 minutes before" }]
1353
1470
  });
1354
- const [isCalendarDropdownOpen, setIsCalendarDropdownOpen] = React15.useState(false);
1355
- const [isColorPickerOpen, setIsColorPickerOpen] = React15.useState(false);
1356
- const [isReminderDropdownOpen, setIsReminderDropdownOpen] = React15.useState(false);
1357
- const [isGuestsDropdownOpen, setIsGuestsDropdownOpen] = React15.useState(false);
1471
+ const [isCalendarDropdownOpen, setIsCalendarDropdownOpen] = (0, import_react14.useState)(false);
1472
+ const [isColorPickerOpen, setIsColorPickerOpen] = (0, import_react14.useState)(false);
1473
+ const [isReminderDropdownOpen, setIsReminderDropdownOpen] = (0, import_react14.useState)(false);
1474
+ const [isGuestsDropdownOpen, setIsGuestsDropdownOpen] = (0, import_react14.useState)(false);
1358
1475
  const fakeGuests = [
1359
1476
  "alice@example.com",
1360
1477
  "bob@example.com",
@@ -1362,9 +1479,8 @@ var EventModal = ({
1362
1479
  "diana@example.com",
1363
1480
  "evan@example.com"
1364
1481
  ];
1365
- React15.useRef(null);
1366
- const [selectedGuests, setSelectedGuests] = React15.useState([]);
1367
- React15.useEffect(() => {
1482
+ const [selectedGuests, setSelectedGuests] = (0, import_react14.useState)([]);
1483
+ (0, import_react14.useEffect)(() => {
1368
1484
  if (isOpen) {
1369
1485
  if (event) {
1370
1486
  setMode("view");
@@ -1394,7 +1510,6 @@ var EventModal = ({
1394
1510
  reminders: [{ id: "1", type: "notification", time: 30, label: "30 minutes before" }]
1395
1511
  });
1396
1512
  setSelectedGuests([]);
1397
- setActiveTab("details");
1398
1513
  }
1399
1514
  }
1400
1515
  }, [isOpen, event, initialDate, calendars]);
@@ -1429,7 +1544,7 @@ var EventModal = ({
1429
1544
  };
1430
1545
  const formatDateForInput = (date) => {
1431
1546
  if (!date) return "";
1432
- return dateFns.format(date, "yyyy-MM-dd'T'HH:mm");
1547
+ return (0, import_date_fns10.format)(date, "yyyy-MM-dd'T'HH:mm");
1433
1548
  };
1434
1549
  const handleDateChange = (field, value) => {
1435
1550
  const date = new Date(value);
@@ -1479,14 +1594,14 @@ var EventModal = ({
1479
1594
  };
1480
1595
  const getDurationText = () => {
1481
1596
  if (!formData.start || !formData.end) return "";
1482
- const mins = dateFns.differenceInMinutes(formData.end, formData.start);
1597
+ const mins = (0, import_date_fns10.differenceInMinutes)(formData.end, formData.start);
1483
1598
  if (mins < 60) return `${mins} min`;
1484
1599
  const hours = Math.floor(mins / 60);
1485
1600
  const remainingMins = mins % 60;
1486
1601
  if (remainingMins === 0) return `${hours} hr`;
1487
1602
  return `${hours} hr ${remainingMins} min`;
1488
1603
  };
1489
- const renderViewMode = () => /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-col bg-background overflow-hidden w-full max-h-[90vh]" }, /* @__PURE__ */ React15__namespace.default.createElement(
1604
+ const renderViewMode = () => /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex flex-col bg-background overflow-hidden w-full max-h-[90vh]" }, /* @__PURE__ */ import_react14.default.createElement(
1490
1605
  "div",
1491
1606
  {
1492
1607
  className: "relative px-6 pt-6 pb-8",
@@ -1494,65 +1609,65 @@ var EventModal = ({
1494
1609
  background: `linear-gradient(135deg, ${event?.color || "#3b82f6"}15 0%, transparent 100%)`
1495
1610
  }
1496
1611
  },
1497
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center justify-between mb-6" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement(
1612
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center justify-between mb-6" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react14.default.createElement(
1498
1613
  "div",
1499
1614
  {
1500
1615
  className: "w-3 h-3 rounded-full",
1501
1616
  style: { backgroundColor: event?.color || "#3b82f6" }
1502
1617
  }
1503
- ), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider" }, calendars?.find((c) => c.id === event?.calendarId)?.label || "Event")), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React15__namespace.default.createElement(
1618
+ ), /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider" }, calendars?.find((c) => c.id === event?.calendarId)?.label || "Event")), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ import_react14.default.createElement(
1504
1619
  "button",
1505
1620
  {
1506
1621
  onClick: () => setMode("edit"),
1507
1622
  className: "p-2 hover:bg-background/80 rounded-lg transition-all text-muted-foreground hover:text-foreground",
1508
1623
  title: "Edit"
1509
1624
  },
1510
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Edit2, { className: "w-4 h-4" })
1511
- ), /* @__PURE__ */ React15__namespace.default.createElement(
1625
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Edit2, { className: "w-4 h-4" })
1626
+ ), /* @__PURE__ */ import_react14.default.createElement(
1512
1627
  "button",
1513
1628
  {
1514
1629
  onClick: handleDelete,
1515
1630
  className: "p-2 hover:bg-destructive/10 rounded-lg transition-all text-muted-foreground hover:text-destructive",
1516
1631
  title: "Delete"
1517
1632
  },
1518
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Trash2, { className: "w-4 h-4" })
1519
- ), /* @__PURE__ */ React15__namespace.default.createElement(
1633
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Trash2, { className: "w-4 h-4" })
1634
+ ), /* @__PURE__ */ import_react14.default.createElement(
1520
1635
  "button",
1521
1636
  {
1522
1637
  onClick: onClose,
1523
1638
  className: "p-2 hover:bg-background/80 rounded-lg transition-all text-muted-foreground hover:text-foreground",
1524
1639
  title: "Close"
1525
1640
  },
1526
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.X, { className: "w-4 h-4" })
1641
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.X, { className: "w-4 h-4" })
1527
1642
  ))),
1528
- /* @__PURE__ */ React15__namespace.default.createElement("h1", { className: "text-2xl font-bold text-foreground mb-3 leading-tight" }, event?.title || "(No title)"),
1529
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-3 text-sm" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2 px-3 py-1.5 bg-background/60 backdrop-blur-sm rounded-lg border border-border/30" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Calendar, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "font-medium" }, event?.start && dateFns.format(new Date(event.start), "EEE, MMM d"))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2 px-3 py-1.5 bg-background/60 backdrop-blur-sm rounded-lg border border-border/30" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Clock, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "font-medium" }, event?.start && dateFns.format(new Date(event.start), "h:mm a"), " \u2013 ", event?.end && dateFns.format(new Date(event.end), "h:mm a"))))
1530
- ), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "px-6 pb-6 space-y-4 overflow-y-auto flex-1" }, event?.location && /* @__PURE__ */ React15__namespace.default.createElement(
1531
- framerMotion.motion.div,
1643
+ /* @__PURE__ */ import_react14.default.createElement("h1", { className: "text-2xl font-bold text-foreground mb-3 leading-tight" }, event?.title || "(No title)"),
1644
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-3 text-sm" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2 px-3 py-1.5 bg-background/60 backdrop-blur-sm rounded-lg border border-border/30" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Calendar, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "font-medium" }, event?.start && (0, import_date_fns10.format)(new Date(event.start), "EEE, MMM d"))), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2 px-3 py-1.5 bg-background/60 backdrop-blur-sm rounded-lg border border-border/30" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Clock, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "font-medium" }, event?.start && (0, import_date_fns10.format)(new Date(event.start), "h:mm a"), " \u2013 ", event?.end && (0, import_date_fns10.format)(new Date(event.end), "h:mm a"))))
1645
+ ), /* @__PURE__ */ import_react14.default.createElement("div", { className: "px-6 pb-6 space-y-4 overflow-y-auto flex-1" }, event?.location && /* @__PURE__ */ import_react14.default.createElement(
1646
+ import_framer_motion2.motion.div,
1532
1647
  {
1533
1648
  initial: { opacity: 0, y: 10 },
1534
1649
  animate: { opacity: 1, y: 0 },
1535
1650
  className: "flex items-start gap-3 p-4 rounded-2xl bg-muted/30 border border-border/30 group hover:bg-muted/50 transition-all cursor-pointer"
1536
1651
  },
1537
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "p-2 bg-primary/10 rounded-xl" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.MapPin, { className: "w-5 h-5 text-primary" })),
1538
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React15__namespace.default.createElement("p", { className: "text-sm font-medium text-foreground" }, event.location), /* @__PURE__ */ React15__namespace.default.createElement("p", { className: "text-xs text-muted-foreground mt-0.5" }, "Click to open in maps")),
1539
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.ExternalLink, { className: "w-4 h-4 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity" })
1540
- ), event?.guests && event.guests.length > 0 && /* @__PURE__ */ React15__namespace.default.createElement(
1541
- framerMotion.motion.div,
1652
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "p-2 bg-primary/10 rounded-xl" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.MapPin, { className: "w-5 h-5 text-primary" })),
1653
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ import_react14.default.createElement("p", { className: "text-sm font-medium text-foreground" }, event.location), /* @__PURE__ */ import_react14.default.createElement("p", { className: "text-xs text-muted-foreground mt-0.5" }, "Click to open in maps")),
1654
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.ExternalLink, { className: "w-4 h-4 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity" })
1655
+ ), event?.guests && event.guests.length > 0 && /* @__PURE__ */ import_react14.default.createElement(
1656
+ import_framer_motion2.motion.div,
1542
1657
  {
1543
1658
  initial: { opacity: 0, y: 10 },
1544
1659
  animate: { opacity: 1, y: 0 },
1545
1660
  transition: { delay: 0.05 },
1546
1661
  className: "space-y-3"
1547
1662
  },
1548
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Users, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm font-medium text-foreground" }, event.guests.length, " ", event.guests.length > 1 ? "Guests" : "Guest"))),
1549
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-wrap gap-2" }, event.guests.map((email, index) => /* @__PURE__ */ React15__namespace.default.createElement(
1663
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Users, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-sm font-medium text-foreground" }, event.guests.length, " ", event.guests.length > 1 ? "Guests" : "Guest"))),
1664
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex flex-wrap gap-2" }, event.guests.map((email, index) => /* @__PURE__ */ import_react14.default.createElement(
1550
1665
  "div",
1551
1666
  {
1552
1667
  key: index,
1553
1668
  className: "flex items-center gap-2 px-3 py-2 rounded-xl bg-muted/30 border border-border/30 hover:bg-muted/50 transition-all cursor-pointer group"
1554
1669
  },
1555
- /* @__PURE__ */ React15__namespace.default.createElement(
1670
+ /* @__PURE__ */ import_react14.default.createElement(
1556
1671
  "div",
1557
1672
  {
1558
1673
  className: "w-8 h-8 rounded-full flex items-center justify-center text-sm font-semibold text-white",
@@ -1560,18 +1675,18 @@ var EventModal = ({
1560
1675
  },
1561
1676
  email[0].toUpperCase()
1562
1677
  ),
1563
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React15__namespace.default.createElement("p", { className: "text-sm font-medium text-foreground" }, email.split("@")[0]), /* @__PURE__ */ React15__namespace.default.createElement("p", { className: "text-xs text-muted-foreground truncate" }, email))
1678
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react14.default.createElement("p", { className: "text-sm font-medium text-foreground" }, email.split("@")[0]), /* @__PURE__ */ import_react14.default.createElement("p", { className: "text-xs text-muted-foreground truncate" }, email))
1564
1679
  )))
1565
- ), event?.reminders && event.reminders.length > 0 && /* @__PURE__ */ React15__namespace.default.createElement(
1566
- framerMotion.motion.div,
1680
+ ), event?.reminders && event.reminders.length > 0 && /* @__PURE__ */ import_react14.default.createElement(
1681
+ import_framer_motion2.motion.div,
1567
1682
  {
1568
1683
  initial: { opacity: 0, y: 10 },
1569
1684
  animate: { opacity: 1, y: 0 },
1570
1685
  transition: { delay: 0.1 },
1571
1686
  className: "flex items-center gap-3"
1572
1687
  },
1573
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "p-2 bg-amber-500/10 rounded-xl" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Bell, { className: "w-4 h-4 text-amber-500" })),
1574
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-wrap gap-2" }, event.reminders.map((reminder) => /* @__PURE__ */ React15__namespace.default.createElement(
1688
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "p-2 bg-amber-500/10 rounded-xl" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Bell, { className: "w-4 h-4 text-amber-500" })),
1689
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex flex-wrap gap-2" }, event.reminders.map((reminder) => /* @__PURE__ */ import_react14.default.createElement(
1575
1690
  "span",
1576
1691
  {
1577
1692
  key: reminder.id,
@@ -1579,45 +1694,45 @@ var EventModal = ({
1579
1694
  },
1580
1695
  reminder.label || `${reminder.time} min before`
1581
1696
  )))
1582
- ), event?.description && /* @__PURE__ */ React15__namespace.default.createElement(
1583
- framerMotion.motion.div,
1697
+ ), event?.description && /* @__PURE__ */ import_react14.default.createElement(
1698
+ import_framer_motion2.motion.div,
1584
1699
  {
1585
1700
  initial: { opacity: 0, y: 10 },
1586
1701
  animate: { opacity: 1, y: 0 },
1587
1702
  transition: { delay: 0.15 },
1588
1703
  className: "space-y-2"
1589
1704
  },
1590
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.AlignLeft, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm font-medium text-foreground" }, "Notes")),
1591
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-sm text-foreground/80 whitespace-pre-wrap leading-relaxed pl-6 p-3 rounded-xl bg-muted/20 border border-border/30" }, event.description)
1592
- ), event?.attachments && event.attachments.length > 0 && /* @__PURE__ */ React15__namespace.default.createElement(
1593
- framerMotion.motion.div,
1705
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.AlignLeft, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-sm font-medium text-foreground" }, "Notes")),
1706
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "text-sm text-foreground/80 whitespace-pre-wrap leading-relaxed pl-6 p-3 rounded-xl bg-muted/20 border border-border/30" }, event.description)
1707
+ ), event?.attachments && event.attachments.length > 0 && /* @__PURE__ */ import_react14.default.createElement(
1708
+ import_framer_motion2.motion.div,
1594
1709
  {
1595
1710
  initial: { opacity: 0, y: 10 },
1596
1711
  animate: { opacity: 1, y: 0 },
1597
1712
  transition: { delay: 0.2 },
1598
1713
  className: "space-y-2"
1599
1714
  },
1600
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Paperclip, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm font-medium text-foreground" }, "Attachments")),
1601
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "grid gap-2" }, event.attachments.map((att) => /* @__PURE__ */ React15__namespace.default.createElement(
1715
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Paperclip, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-sm font-medium text-foreground" }, "Attachments")),
1716
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "grid gap-2" }, event.attachments.map((att) => /* @__PURE__ */ import_react14.default.createElement(
1602
1717
  "div",
1603
1718
  {
1604
1719
  key: att.id,
1605
1720
  onClick: () => handleDownload(att),
1606
1721
  className: "flex items-center gap-3 p-3 rounded-xl border border-border/30 bg-muted/20 hover:bg-muted/40 transition-all cursor-pointer group"
1607
1722
  },
1608
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "p-2 bg-primary/10 rounded-lg" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.File, { className: "w-4 h-4 text-primary" })),
1609
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React15__namespace.default.createElement("p", { className: "text-sm font-medium text-foreground truncate" }, att.name), /* @__PURE__ */ React15__namespace.default.createElement("p", { className: "text-xs text-muted-foreground" }, att.size)),
1610
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Download, { className: "w-4 h-4 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity" })
1723
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "p-2 bg-primary/10 rounded-lg" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.File, { className: "w-4 h-4 text-primary" })),
1724
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react14.default.createElement("p", { className: "text-sm font-medium text-foreground truncate" }, att.name), /* @__PURE__ */ import_react14.default.createElement("p", { className: "text-xs text-muted-foreground" }, att.size)),
1725
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Download, { className: "w-4 h-4 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity" })
1611
1726
  )))
1612
1727
  )));
1613
- const renderEditMode = () => /* @__PURE__ */ React15__namespace.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col bg-background overflow-hidden w-full max-h-[85vh]" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center justify-between px-5 py-4 border-b border-border/50 shrink-0" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React15__namespace.default.createElement(
1728
+ const renderEditMode = () => /* @__PURE__ */ import_react14.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col bg-background overflow-hidden w-full max-h-[85vh]" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center justify-between px-5 py-4 border-b border-border/50 shrink-0" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react14.default.createElement(
1614
1729
  "button",
1615
1730
  {
1616
1731
  type: "button",
1617
1732
  onClick: () => setIsColorPickerOpen(!isColorPickerOpen),
1618
1733
  className: "relative p-1"
1619
1734
  },
1620
- /* @__PURE__ */ React15__namespace.default.createElement(
1735
+ /* @__PURE__ */ import_react14.default.createElement(
1621
1736
  "div",
1622
1737
  {
1623
1738
  className: "w-5 h-5 rounded-full cursor-pointer hover:scale-110 transition-transform",
@@ -1627,7 +1742,7 @@ var EventModal = ({
1627
1742
  }
1628
1743
  }
1629
1744
  ),
1630
- isColorPickerOpen && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute top-full left-0 mt-2 p-2 bg-background border border-border rounded-xl shadow-xl z-50 flex flex-wrap gap-1.5 w-[180px]" }, COLOR_PALETTE.map((color) => /* @__PURE__ */ React15__namespace.default.createElement(
1745
+ isColorPickerOpen && /* @__PURE__ */ import_react14.default.createElement("div", { className: "absolute top-full left-0 mt-2 p-2 bg-background border border-border rounded-xl shadow-xl z-50 flex flex-wrap gap-1.5 w-[180px]" }, COLOR_PALETTE.map((color) => /* @__PURE__ */ import_react14.default.createElement(
1631
1746
  "button",
1632
1747
  {
1633
1748
  key: color,
@@ -1643,15 +1758,15 @@ var EventModal = ({
1643
1758
  style: { backgroundColor: color, color }
1644
1759
  }
1645
1760
  )))
1646
- ), /* @__PURE__ */ React15__namespace.default.createElement("h2", { className: "text-lg font-semibold text-foreground" }, mode === "edit" ? "Edit Event" : "New Event")), /* @__PURE__ */ React15__namespace.default.createElement(
1761
+ ), /* @__PURE__ */ import_react14.default.createElement("h2", { className: "text-lg font-semibold text-foreground" }, mode === "edit" ? "Edit Event" : "New Event")), /* @__PURE__ */ import_react14.default.createElement(
1647
1762
  "button",
1648
1763
  {
1649
1764
  type: "button",
1650
1765
  onClick: onClose,
1651
1766
  className: "p-2 hover:bg-accent rounded-xl transition-all text-muted-foreground hover:text-foreground"
1652
1767
  },
1653
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.X, { className: "w-4 h-4" })
1654
- )), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 overflow-y-auto" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "px-5 py-4 space-y-5" }, /* @__PURE__ */ React15__namespace.default.createElement("div", null, /* @__PURE__ */ React15__namespace.default.createElement(
1768
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.X, { className: "w-4 h-4" })
1769
+ )), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex-1 overflow-y-auto" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "px-5 py-4 space-y-5" }, /* @__PURE__ */ import_react14.default.createElement("div", null, /* @__PURE__ */ import_react14.default.createElement(
1655
1770
  "input",
1656
1771
  {
1657
1772
  type: "text",
@@ -1662,7 +1777,7 @@ var EventModal = ({
1662
1777
  onChange: (e) => setFormData({ ...formData, title: e.target.value }),
1663
1778
  placeholder: "Add title"
1664
1779
  }
1665
- )), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-3 p-4 rounded-2xl bg-muted/20 border border-border/30" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "p-2 bg-primary/10 rounded-xl shrink-0" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Clock, { className: "w-5 h-5 text-primary" })), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 grid grid-cols-2 gap-3" }, /* @__PURE__ */ React15__namespace.default.createElement("div", null, /* @__PURE__ */ React15__namespace.default.createElement("label", { className: "text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1 block" }, "Start"), /* @__PURE__ */ React15__namespace.default.createElement(
1780
+ )), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-3 p-4 rounded-2xl bg-muted/20 border border-border/30" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "p-2 bg-primary/10 rounded-xl shrink-0" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Clock, { className: "w-5 h-5 text-primary" })), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex-1 grid grid-cols-2 gap-3" }, /* @__PURE__ */ import_react14.default.createElement("div", null, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1 block" }, "Start"), /* @__PURE__ */ import_react14.default.createElement(
1666
1781
  "input",
1667
1782
  {
1668
1783
  type: "datetime-local",
@@ -1670,7 +1785,7 @@ var EventModal = ({
1670
1785
  value: formatDateForInput(formData.start),
1671
1786
  onChange: (e) => handleDateChange("start", e.target.value)
1672
1787
  }
1673
- )), /* @__PURE__ */ React15__namespace.default.createElement("div", null, /* @__PURE__ */ React15__namespace.default.createElement("label", { className: "text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1 block" }, "End"), /* @__PURE__ */ React15__namespace.default.createElement(
1788
+ )), /* @__PURE__ */ import_react14.default.createElement("div", null, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1 block" }, "End"), /* @__PURE__ */ import_react14.default.createElement(
1674
1789
  "input",
1675
1790
  {
1676
1791
  type: "datetime-local",
@@ -1678,16 +1793,16 @@ var EventModal = ({
1678
1793
  value: formatDateForInput(formData.end),
1679
1794
  onChange: (e) => handleDateChange("end", e.target.value)
1680
1795
  }
1681
- )))), getDurationText() && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex justify-center" }, /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-xs font-medium px-3 py-1 rounded-full bg-primary/10 text-primary" }, getDurationText())), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Bell, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm font-medium text-foreground" }, "Reminders")), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React15__namespace.default.createElement(
1796
+ )))), getDurationText() && /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex justify-center" }, /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-xs font-medium px-3 py-1 rounded-full bg-primary/10 text-primary" }, getDurationText())), /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Bell, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-sm font-medium text-foreground" }, "Reminders")), /* @__PURE__ */ import_react14.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react14.default.createElement(
1682
1797
  "button",
1683
1798
  {
1684
1799
  type: "button",
1685
1800
  onClick: () => setIsReminderDropdownOpen(!isReminderDropdownOpen),
1686
1801
  className: "flex items-center gap-1 text-xs font-medium text-primary hover:text-primary/80 transition-colors"
1687
1802
  },
1688
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Plus, { className: "w-3.5 h-3.5" }),
1803
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Plus, { className: "w-3.5 h-3.5" }),
1689
1804
  "Add"
1690
- ), isReminderDropdownOpen && /* @__PURE__ */ React15__namespace.default.createElement(React15__namespace.default.Fragment, null, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setIsReminderDropdownOpen(false) }), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute right-0 top-full mt-1 w-48 bg-background border border-border rounded-xl shadow-xl z-50 py-1 max-h-60 overflow-y-auto" }, REMINDER_OPTIONS.map((option) => /* @__PURE__ */ React15__namespace.default.createElement(
1805
+ ), isReminderDropdownOpen && /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, /* @__PURE__ */ import_react14.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setIsReminderDropdownOpen(false) }), /* @__PURE__ */ import_react14.default.createElement("div", { className: "absolute right-0 top-full mt-1 w-48 bg-background border border-border rounded-xl shadow-xl z-50 py-1 max-h-60 overflow-y-auto" }, REMINDER_OPTIONS.map((option) => /* @__PURE__ */ import_react14.default.createElement(
1691
1806
  "button",
1692
1807
  {
1693
1808
  key: option.value,
@@ -1696,58 +1811,58 @@ var EventModal = ({
1696
1811
  className: "w-full px-3 py-2 text-left text-sm hover:bg-accent transition-colors"
1697
1812
  },
1698
1813
  option.label
1699
- )))))), formData.reminders && formData.reminders.length > 0 && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-wrap gap-2" }, formData.reminders.map((reminder) => /* @__PURE__ */ React15__namespace.default.createElement(
1814
+ )))))), formData.reminders && formData.reminders.length > 0 && /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex flex-wrap gap-2" }, formData.reminders.map((reminder) => /* @__PURE__ */ import_react14.default.createElement(
1700
1815
  "div",
1701
1816
  {
1702
1817
  key: reminder.id,
1703
1818
  className: "flex items-center gap-2 px-3 py-1.5 rounded-full bg-amber-500/10 border border-amber-500/20"
1704
1819
  },
1705
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.BellRing, { className: "w-3.5 h-3.5 text-amber-500" }),
1706
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-xs font-medium text-amber-600 dark:text-amber-400" }, reminder.label),
1707
- /* @__PURE__ */ React15__namespace.default.createElement(
1820
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.BellRing, { className: "w-3.5 h-3.5 text-amber-500" }),
1821
+ /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-xs font-medium text-amber-600 dark:text-amber-400" }, reminder.label),
1822
+ /* @__PURE__ */ import_react14.default.createElement(
1708
1823
  "button",
1709
1824
  {
1710
1825
  type: "button",
1711
1826
  onClick: () => removeReminder(reminder.id),
1712
1827
  className: "p-0.5 hover:bg-amber-500/20 rounded-full transition-colors"
1713
1828
  },
1714
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.X, { className: "w-3 h-3 text-amber-500" })
1829
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.X, { className: "w-3 h-3 text-amber-500" })
1715
1830
  )
1716
- )))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Users, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm font-medium text-foreground" }, "Guests")), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React15__namespace.default.createElement(
1831
+ )))), /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Users, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-sm font-medium text-foreground" }, "Guests")), /* @__PURE__ */ import_react14.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react14.default.createElement(
1717
1832
  "button",
1718
1833
  {
1719
1834
  type: "button",
1720
1835
  onClick: () => setIsGuestsDropdownOpen(!isGuestsDropdownOpen),
1721
1836
  className: "w-full flex items-center justify-between px-4 py-3 bg-muted/20 border border-border/30 rounded-xl text-sm text-left hover:bg-muted/30 transition-all"
1722
1837
  },
1723
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: selectedGuests.length > 0 ? "text-foreground font-medium" : "text-muted-foreground" }, selectedGuests.length > 0 ? `${selectedGuests.length} guest${selectedGuests.length > 1 ? "s" : ""} added` : "Add guests"),
1724
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.ChevronDown, { className: cn("w-4 h-4 text-muted-foreground transition-transform", isGuestsDropdownOpen && "rotate-180") })
1725
- ), isGuestsDropdownOpen && /* @__PURE__ */ React15__namespace.default.createElement(React15__namespace.default.Fragment, null, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setIsGuestsDropdownOpen(false) }), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute z-50 w-full mt-2 bg-background border border-border rounded-xl shadow-xl max-h-48 overflow-y-auto" }, fakeGuests.map((email) => /* @__PURE__ */ React15__namespace.default.createElement(
1838
+ /* @__PURE__ */ import_react14.default.createElement("span", { className: selectedGuests.length > 0 ? "text-foreground font-medium" : "text-muted-foreground" }, selectedGuests.length > 0 ? `${selectedGuests.length} guest${selectedGuests.length > 1 ? "s" : ""} added` : "Add guests"),
1839
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.ChevronDown, { className: cn("w-4 h-4 text-muted-foreground transition-transform", isGuestsDropdownOpen && "rotate-180") })
1840
+ ), isGuestsDropdownOpen && /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, /* @__PURE__ */ import_react14.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setIsGuestsDropdownOpen(false) }), /* @__PURE__ */ import_react14.default.createElement("div", { className: "absolute z-50 w-full mt-2 bg-background border border-border rounded-xl shadow-xl max-h-48 overflow-y-auto" }, fakeGuests.map((email) => /* @__PURE__ */ import_react14.default.createElement(
1726
1841
  "div",
1727
1842
  {
1728
1843
  key: email,
1729
1844
  className: "px-4 py-3 hover:bg-accent cursor-pointer flex items-center gap-3 transition-colors",
1730
1845
  onClick: () => toggleGuest(email)
1731
1846
  },
1732
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: cn(
1847
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: cn(
1733
1848
  "w-5 h-5 rounded-md border-2 flex items-center justify-center transition-all",
1734
1849
  selectedGuests.includes(email) ? "bg-primary border-primary" : "border-border"
1735
- ) }, selectedGuests.includes(email) && /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Check, { className: "w-3 h-3 text-primary-foreground" })),
1736
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement(
1850
+ ) }, selectedGuests.includes(email) && /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Check, { className: "w-3 h-3 text-primary-foreground" })),
1851
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react14.default.createElement(
1737
1852
  "div",
1738
1853
  {
1739
1854
  className: "w-7 h-7 rounded-full flex items-center justify-center text-xs font-semibold text-white",
1740
1855
  style: { backgroundColor: `hsl(${fakeGuests.indexOf(email) * 60}, 70%, 50%)` }
1741
1856
  },
1742
1857
  email[0].toUpperCase()
1743
- ), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm" }, email))
1744
- ))))), selectedGuests.length > 0 && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-wrap gap-2 mt-2" }, selectedGuests.map((email) => /* @__PURE__ */ React15__namespace.default.createElement(
1858
+ ), /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-sm" }, email))
1859
+ ))))), selectedGuests.length > 0 && /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex flex-wrap gap-2 mt-2" }, selectedGuests.map((email) => /* @__PURE__ */ import_react14.default.createElement(
1745
1860
  "div",
1746
1861
  {
1747
1862
  key: email,
1748
1863
  className: "flex items-center gap-2 pl-1 pr-2 py-1 bg-muted/30 border border-border/30 rounded-full"
1749
1864
  },
1750
- /* @__PURE__ */ React15__namespace.default.createElement(
1865
+ /* @__PURE__ */ import_react14.default.createElement(
1751
1866
  "div",
1752
1867
  {
1753
1868
  className: "w-6 h-6 rounded-full flex items-center justify-center text-xs font-semibold text-white",
@@ -1755,17 +1870,17 @@ var EventModal = ({
1755
1870
  },
1756
1871
  email[0].toUpperCase()
1757
1872
  ),
1758
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-xs font-medium text-foreground" }, email.split("@")[0]),
1759
- /* @__PURE__ */ React15__namespace.default.createElement(
1873
+ /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-xs font-medium text-foreground" }, email.split("@")[0]),
1874
+ /* @__PURE__ */ import_react14.default.createElement(
1760
1875
  "button",
1761
1876
  {
1762
1877
  type: "button",
1763
1878
  onClick: () => toggleGuest(email),
1764
1879
  className: "p-0.5 hover:bg-destructive/10 rounded-full transition-colors"
1765
1880
  },
1766
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.X, { className: "w-3 h-3 text-muted-foreground" })
1881
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.X, { className: "w-3 h-3 text-muted-foreground" })
1767
1882
  )
1768
- )))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-3 p-3 rounded-xl bg-muted/20 border border-border/30" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.MapPin, { className: "w-5 h-5 text-muted-foreground shrink-0" }), /* @__PURE__ */ React15__namespace.default.createElement(
1883
+ )))), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-3 p-3 rounded-xl bg-muted/20 border border-border/30" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.MapPin, { className: "w-5 h-5 text-muted-foreground shrink-0" }), /* @__PURE__ */ import_react14.default.createElement(
1769
1884
  "input",
1770
1885
  {
1771
1886
  type: "text",
@@ -1774,7 +1889,7 @@ var EventModal = ({
1774
1889
  value: formData.location || "",
1775
1890
  onChange: (e) => setFormData({ ...formData, location: e.target.value })
1776
1891
  }
1777
- )), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.AlignLeft, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm font-medium text-foreground" }, "Notes")), /* @__PURE__ */ React15__namespace.default.createElement(
1892
+ )), /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.AlignLeft, { className: "w-4 h-4 text-muted-foreground" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-sm font-medium text-foreground" }, "Notes")), /* @__PURE__ */ import_react14.default.createElement(
1778
1893
  "textarea",
1779
1894
  {
1780
1895
  className: "w-full bg-muted/20 border border-border/30 rounded-xl px-4 py-3 text-sm min-h-[100px] resize-none text-foreground placeholder-muted-foreground focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all",
@@ -1782,7 +1897,7 @@ var EventModal = ({
1782
1897
  value: formData.description || "",
1783
1898
  onChange: (e) => setFormData({ ...formData, description: e.target.value })
1784
1899
  }
1785
- )), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-3 p-3 rounded-xl bg-muted/20 border border-border/30" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Repeat, { className: "w-5 h-5 text-muted-foreground shrink-0" }), /* @__PURE__ */ React15__namespace.default.createElement(
1900
+ )), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-3 p-3 rounded-xl bg-muted/20 border border-border/30" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Repeat, { className: "w-5 h-5 text-muted-foreground shrink-0" }), /* @__PURE__ */ import_react14.default.createElement(
1786
1901
  "select",
1787
1902
  {
1788
1903
  className: "flex-1 bg-transparent text-sm text-foreground focus:outline-none cursor-pointer",
@@ -1801,28 +1916,28 @@ var EventModal = ({
1801
1916
  }
1802
1917
  }
1803
1918
  },
1804
- /* @__PURE__ */ React15__namespace.default.createElement("option", { value: "" }, "Does not repeat"),
1805
- /* @__PURE__ */ React15__namespace.default.createElement("option", { value: "DAILY" }, "Daily"),
1806
- /* @__PURE__ */ React15__namespace.default.createElement("option", { value: "WEEKLY" }, "Weekly"),
1807
- /* @__PURE__ */ React15__namespace.default.createElement("option", { value: "MONTHLY" }, "Monthly"),
1808
- /* @__PURE__ */ React15__namespace.default.createElement("option", { value: "YEARLY" }, "Yearly")
1809
- )), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center justify-between p-3 rounded-xl bg-muted/20 border border-border/30" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Tag, { className: "w-5 h-5 text-muted-foreground" }), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm text-foreground" }, "Calendar")), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React15__namespace.default.createElement(
1919
+ /* @__PURE__ */ import_react14.default.createElement("option", { value: "" }, "Does not repeat"),
1920
+ /* @__PURE__ */ import_react14.default.createElement("option", { value: "DAILY" }, "Daily"),
1921
+ /* @__PURE__ */ import_react14.default.createElement("option", { value: "WEEKLY" }, "Weekly"),
1922
+ /* @__PURE__ */ import_react14.default.createElement("option", { value: "MONTHLY" }, "Monthly"),
1923
+ /* @__PURE__ */ import_react14.default.createElement("option", { value: "YEARLY" }, "Yearly")
1924
+ )), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center justify-between p-3 rounded-xl bg-muted/20 border border-border/30" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Tag, { className: "w-5 h-5 text-muted-foreground" }), /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-sm text-foreground" }, "Calendar")), /* @__PURE__ */ import_react14.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react14.default.createElement(
1810
1925
  "button",
1811
1926
  {
1812
1927
  type: "button",
1813
1928
  onClick: () => setIsCalendarDropdownOpen(!isCalendarDropdownOpen),
1814
1929
  className: "flex items-center gap-2 px-3 py-1.5 bg-background border border-border/50 rounded-lg text-sm hover:bg-accent/50 transition-all"
1815
1930
  },
1816
- /* @__PURE__ */ React15__namespace.default.createElement(
1931
+ /* @__PURE__ */ import_react14.default.createElement(
1817
1932
  "div",
1818
1933
  {
1819
1934
  className: "w-3 h-3 rounded-full",
1820
1935
  style: { backgroundColor: calendars?.find((c) => c.id === formData.calendarId)?.color || "#3b82f6" }
1821
1936
  }
1822
1937
  ),
1823
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "font-medium" }, calendars?.find((c) => c.id === formData.calendarId)?.label || "Select"),
1824
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.ChevronDown, { className: "w-3.5 h-3.5 text-muted-foreground" })
1825
- ), isCalendarDropdownOpen && /* @__PURE__ */ React15__namespace.default.createElement(React15__namespace.default.Fragment, null, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setIsCalendarDropdownOpen(false) }), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute right-0 bottom-full mb-2 w-48 bg-background border border-border rounded-xl shadow-xl z-50 py-1" }, calendars?.map((cal) => /* @__PURE__ */ React15__namespace.default.createElement(
1938
+ /* @__PURE__ */ import_react14.default.createElement("span", { className: "font-medium" }, calendars?.find((c) => c.id === formData.calendarId)?.label || "Select"),
1939
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.ChevronDown, { className: "w-3.5 h-3.5 text-muted-foreground" })
1940
+ ), isCalendarDropdownOpen && /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, /* @__PURE__ */ import_react14.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setIsCalendarDropdownOpen(false) }), /* @__PURE__ */ import_react14.default.createElement("div", { className: "absolute right-0 bottom-full mb-2 w-48 bg-background border border-border rounded-xl shadow-xl z-50 py-1" }, calendars?.map((cal) => /* @__PURE__ */ import_react14.default.createElement(
1826
1941
  "button",
1827
1942
  {
1828
1943
  key: cal.id,
@@ -1837,19 +1952,19 @@ var EventModal = ({
1837
1952
  setIsCalendarDropdownOpen(false);
1838
1953
  }
1839
1954
  },
1840
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "w-3 h-3 rounded-full", style: { backgroundColor: cal.color } }),
1841
- /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "flex-1 text-sm" }, cal.label),
1842
- formData.calendarId === cal.id && /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Check, { className: "w-4 h-4 text-primary" })
1843
- )))))))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "px-5 py-4 border-t border-border/50 flex items-center justify-between bg-muted/10 shrink-0" }, mode === "edit" && /* @__PURE__ */ React15__namespace.default.createElement(
1955
+ /* @__PURE__ */ import_react14.default.createElement("div", { className: "w-3 h-3 rounded-full", style: { backgroundColor: cal.color } }),
1956
+ /* @__PURE__ */ import_react14.default.createElement("span", { className: "flex-1 text-sm" }, cal.label),
1957
+ formData.calendarId === cal.id && /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Check, { className: "w-4 h-4 text-primary" })
1958
+ )))))))), /* @__PURE__ */ import_react14.default.createElement("div", { className: "px-5 py-4 border-t border-border/50 flex items-center justify-between bg-muted/10 shrink-0" }, mode === "edit" && /* @__PURE__ */ import_react14.default.createElement(
1844
1959
  "button",
1845
1960
  {
1846
1961
  type: "button",
1847
1962
  onClick: handleDelete,
1848
1963
  className: "flex items-center gap-2 px-4 py-2 text-destructive hover:bg-destructive/10 rounded-xl transition-all text-sm font-medium"
1849
1964
  },
1850
- /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Trash2, { className: "w-4 h-4" }),
1965
+ /* @__PURE__ */ import_react14.default.createElement(import_lucide_react7.Trash2, { className: "w-4 h-4" }),
1851
1966
  "Delete"
1852
- ), mode === "create" && /* @__PURE__ */ React15__namespace.default.createElement("div", null), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement(
1967
+ ), mode === "create" && /* @__PURE__ */ import_react14.default.createElement("div", null), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react14.default.createElement(
1853
1968
  "button",
1854
1969
  {
1855
1970
  type: "button",
@@ -1857,7 +1972,7 @@ var EventModal = ({
1857
1972
  className: "px-4 py-2.5 text-muted-foreground hover:text-foreground font-medium text-sm rounded-xl transition-all hover:bg-accent"
1858
1973
  },
1859
1974
  "Cancel"
1860
- ), /* @__PURE__ */ React15__namespace.default.createElement(
1975
+ ), /* @__PURE__ */ import_react14.default.createElement(
1861
1976
  "button",
1862
1977
  {
1863
1978
  type: "submit",
@@ -1865,8 +1980,8 @@ var EventModal = ({
1865
1980
  },
1866
1981
  mode === "edit" ? "Save Changes" : "Create Event"
1867
1982
  ))));
1868
- return /* @__PURE__ */ React15__namespace.default.createElement(Modal, { isOpen, onClose, hideHeader: true, className: "p-0 overflow-hidden max-w-lg rounded-2xl shadow-2xl" }, /* @__PURE__ */ React15__namespace.default.createElement(framerMotion.AnimatePresence, { mode: "wait" }, mode === "view" && event ? /* @__PURE__ */ React15__namespace.default.createElement(
1869
- framerMotion.motion.div,
1983
+ return /* @__PURE__ */ import_react14.default.createElement(Modal, { isOpen, onClose, hideHeader: true, className: "p-0 overflow-hidden max-w-lg rounded-2xl shadow-2xl" }, /* @__PURE__ */ import_react14.default.createElement(import_framer_motion2.AnimatePresence, { mode: "wait" }, mode === "view" && event ? /* @__PURE__ */ import_react14.default.createElement(
1984
+ import_framer_motion2.motion.div,
1870
1985
  {
1871
1986
  key: "view",
1872
1987
  initial: { opacity: 0 },
@@ -1875,8 +1990,8 @@ var EventModal = ({
1875
1990
  transition: { duration: 0.15 }
1876
1991
  },
1877
1992
  renderViewMode()
1878
- ) : /* @__PURE__ */ React15__namespace.default.createElement(
1879
- framerMotion.motion.div,
1993
+ ) : /* @__PURE__ */ import_react14.default.createElement(
1994
+ import_framer_motion2.motion.div,
1880
1995
  {
1881
1996
  key: "edit",
1882
1997
  initial: { opacity: 0 },
@@ -1887,9 +2002,12 @@ var EventModal = ({
1887
2002
  renderEditMode()
1888
2003
  )));
1889
2004
  };
1890
- var Skeleton = ({ className, style }) => /* @__PURE__ */ React15__namespace.default.createElement("div", { className: cn("animate-pulse bg-muted/40 rounded", className), style });
1891
- var MonthViewSkeleton = () => /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "h-full bg-background border border-border/50 rounded-2xl overflow-hidden" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "grid grid-cols-7 border-b border-border/50 bg-muted/10" }, Array.from({ length: 7 }).map((_, i) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: i, className: "py-3 px-2 text-center border-r border-border/30 last:border-r-0" }, /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-4 w-8 mx-auto" })))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "grid grid-cols-7 flex-1" }, Array.from({ length: 35 }).map((_, i) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: i, className: "min-h-[120px] border-r border-b border-border/30 p-2" }, /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-4 w-6 mb-2" }), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "space-y-1" }, Math.random() > 0.5 && /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-5 w-full rounded-md" }), Math.random() > 0.7 && /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-5 w-3/4 rounded-md" }))))));
1892
- var WeekViewSkeleton = () => /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "h-full bg-background border border-border/50 rounded-2xl overflow-hidden" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex border-b border-border/50 bg-muted/10" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "w-16 p-3 border-r border-border/30" }, /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-8 w-10 mx-auto" })), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 grid grid-cols-7" }, Array.from({ length: 7 }).map((_, i) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: i, className: "py-3 px-2 text-center border-r border-border/30 last:border-r-0" }, /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-3 w-8 mx-auto mb-1" }), /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-8 w-8 mx-auto rounded-xl" }))))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-1", style: { height: "600px" } }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "w-16 border-r border-border/30" }, Array.from({ length: 10 }).map((_, i) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: i, className: "h-[60px] relative" }, /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-4 w-10 absolute right-2 -translate-y-1/2" })))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 grid grid-cols-7 relative" }, Array.from({ length: 7 }).map((_, colIdx) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: colIdx, className: "relative border-r border-border/30 last:border-r-0" }, Array.from({ length: 10 }).map((_2, rowIdx) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: rowIdx, className: "h-[60px] border-b border-dashed border-border/20" })), Math.random() > 0.3 && /* @__PURE__ */ React15__namespace.default.createElement(
2005
+
2006
+ // src/components/Skeleton.tsx
2007
+ var import_react15 = __toESM(require("react"));
2008
+ var Skeleton = ({ className, style }) => /* @__PURE__ */ import_react15.default.createElement("div", { className: cn("animate-pulse bg-muted/40 rounded", className), style });
2009
+ var MonthViewSkeleton = () => /* @__PURE__ */ import_react15.default.createElement("div", { className: "h-full bg-background border border-border/50 rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "grid grid-cols-7 border-b border-border/50 bg-muted/10" }, Array.from({ length: 7 }).map((_, i) => /* @__PURE__ */ import_react15.default.createElement("div", { key: i, className: "py-3 px-2 text-center border-r border-border/30 last:border-r-0" }, /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-4 w-8 mx-auto" })))), /* @__PURE__ */ import_react15.default.createElement("div", { className: "grid grid-cols-7 flex-1" }, Array.from({ length: 35 }).map((_, i) => /* @__PURE__ */ import_react15.default.createElement("div", { key: i, className: "min-h-[120px] border-r border-b border-border/30 p-2" }, /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-4 w-6 mb-2" }), /* @__PURE__ */ import_react15.default.createElement("div", { className: "space-y-1" }, Math.random() > 0.5 && /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-5 w-full rounded-md" }), Math.random() > 0.7 && /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-5 w-3/4 rounded-md" }))))));
2010
+ var WeekViewSkeleton = () => /* @__PURE__ */ import_react15.default.createElement("div", { className: "h-full bg-background border border-border/50 rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex border-b border-border/50 bg-muted/10" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "w-16 p-3 border-r border-border/30" }, /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-8 w-10 mx-auto" })), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex-1 grid grid-cols-7" }, Array.from({ length: 7 }).map((_, i) => /* @__PURE__ */ import_react15.default.createElement("div", { key: i, className: "py-3 px-2 text-center border-r border-border/30 last:border-r-0" }, /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-3 w-8 mx-auto mb-1" }), /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-8 w-8 mx-auto rounded-xl" }))))), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex flex-1", style: { height: "600px" } }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "w-16 border-r border-border/30" }, Array.from({ length: 10 }).map((_, i) => /* @__PURE__ */ import_react15.default.createElement("div", { key: i, className: "h-[60px] relative" }, /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-4 w-10 absolute right-2 -translate-y-1/2" })))), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex-1 grid grid-cols-7 relative" }, Array.from({ length: 7 }).map((_, colIdx) => /* @__PURE__ */ import_react15.default.createElement("div", { key: colIdx, className: "relative border-r border-border/30 last:border-r-0" }, Array.from({ length: 10 }).map((_2, rowIdx) => /* @__PURE__ */ import_react15.default.createElement("div", { key: rowIdx, className: "h-[60px] border-b border-dashed border-border/20" })), Math.random() > 0.3 && /* @__PURE__ */ import_react15.default.createElement(
1893
2011
  Skeleton,
1894
2012
  {
1895
2013
  className: "absolute rounded-md",
@@ -1901,20 +2019,25 @@ var WeekViewSkeleton = () => /* @__PURE__ */ React15__namespace.default.createEl
1901
2019
  }
1902
2020
  }
1903
2021
  ))))));
1904
- var DayViewSkeleton = () => /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "h-full bg-background border border-border/50 rounded-2xl overflow-hidden" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "px-6 py-4 border-b border-border/50 bg-muted/10 text-center" }, /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-7 w-64 mx-auto" })), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-1", style: { height: "600px" } }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "w-20 border-r border-border/30 bg-muted/5" }, Array.from({ length: 10 }).map((_, i) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: i, className: "h-[80px] relative" }, /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-4 w-12 absolute left-1/2 -translate-x-1/2 -translate-y-1/2" })))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 relative" }, Array.from({ length: 10 }).map((_, i) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: i, className: "h-[80px] border-b border-dashed border-border/20" })), /* @__PURE__ */ React15__namespace.default.createElement(
2022
+ var DayViewSkeleton = () => /* @__PURE__ */ import_react15.default.createElement("div", { className: "h-full bg-background border border-border/50 rounded-2xl overflow-hidden" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "px-6 py-4 border-b border-border/50 bg-muted/10 text-center" }, /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-7 w-64 mx-auto" })), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex flex-1", style: { height: "600px" } }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "w-20 border-r border-border/30 bg-muted/5" }, Array.from({ length: 10 }).map((_, i) => /* @__PURE__ */ import_react15.default.createElement("div", { key: i, className: "h-[80px] relative" }, /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-4 w-12 absolute left-1/2 -translate-x-1/2 -translate-y-1/2" })))), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex-1 relative" }, Array.from({ length: 10 }).map((_, i) => /* @__PURE__ */ import_react15.default.createElement("div", { key: i, className: "h-[80px] border-b border-dashed border-border/20" })), /* @__PURE__ */ import_react15.default.createElement(
1905
2023
  Skeleton,
1906
2024
  {
1907
2025
  className: "absolute rounded-lg left-4 right-4",
1908
2026
  style: { top: "160px", height: "120px" }
1909
2027
  }
1910
- ), /* @__PURE__ */ React15__namespace.default.createElement(
2028
+ ), /* @__PURE__ */ import_react15.default.createElement(
1911
2029
  Skeleton,
1912
2030
  {
1913
2031
  className: "absolute rounded-lg left-4 right-4",
1914
2032
  style: { top: "400px", height: "80px" }
1915
2033
  }
1916
2034
  ))));
1917
- var AgendaViewSkeleton = () => /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "h-full bg-background border border-border/50 rounded-2xl overflow-hidden p-6" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "space-y-6" }, Array.from({ length: 4 }).map((_, dayIdx) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: dayIdx }, /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-5 w-40 mb-4" }), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "space-y-3" }, Array.from({ length: 2 + Math.floor(Math.random() * 3) }).map((_2, eventIdx) => /* @__PURE__ */ React15__namespace.default.createElement("div", { key: eventIdx, className: "flex items-center gap-4 p-3 rounded-xl bg-muted/10" }, /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-10 w-10 rounded-lg" }), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 space-y-2" }, /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-4 w-3/4" }), /* @__PURE__ */ React15__namespace.default.createElement(Skeleton, { className: "h-3 w-1/2" })))))))));
2035
+ var AgendaViewSkeleton = () => /* @__PURE__ */ import_react15.default.createElement("div", { className: "h-full bg-background border border-border/50 rounded-2xl overflow-hidden p-6" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "space-y-6" }, Array.from({ length: 4 }).map((_, dayIdx) => /* @__PURE__ */ import_react15.default.createElement("div", { key: dayIdx }, /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-5 w-40 mb-4" }), /* @__PURE__ */ import_react15.default.createElement("div", { className: "space-y-3" }, Array.from({ length: 2 + Math.floor(Math.random() * 3) }).map((_2, eventIdx) => /* @__PURE__ */ import_react15.default.createElement("div", { key: eventIdx, className: "flex items-center gap-4 p-3 rounded-xl bg-muted/10" }, /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-10 w-10 rounded-lg" }), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex-1 space-y-2" }, /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-4 w-3/4" }), /* @__PURE__ */ import_react15.default.createElement(Skeleton, { className: "h-3 w-1/2" })))))))));
2036
+
2037
+ // src/components/ContextMenu.tsx
2038
+ var import_react16 = __toESM(require("react"));
2039
+ var import_lucide_react8 = require("lucide-react");
2040
+ var import_framer_motion3 = require("framer-motion");
1918
2041
  var EventContextMenu = ({
1919
2042
  event,
1920
2043
  position,
@@ -1925,8 +2048,8 @@ var EventContextMenu = ({
1925
2048
  customActions = [],
1926
2049
  translations
1927
2050
  }) => {
1928
- const menuRef = React15.useRef(null);
1929
- React15.useEffect(() => {
2051
+ const menuRef = (0, import_react16.useRef)(null);
2052
+ (0, import_react16.useEffect)(() => {
1930
2053
  const handleKeyDown = (e) => {
1931
2054
  if (e.key === "Escape") {
1932
2055
  onClose();
@@ -1937,7 +2060,7 @@ var EventContextMenu = ({
1937
2060
  return () => document.removeEventListener("keydown", handleKeyDown);
1938
2061
  }
1939
2062
  }, [position, onClose]);
1940
- React15.useEffect(() => {
2063
+ (0, import_react16.useEffect)(() => {
1941
2064
  const handleClickOutside = (e) => {
1942
2065
  if (menuRef.current && !menuRef.current.contains(e.target)) {
1943
2066
  onClose();
@@ -1955,7 +2078,7 @@ var EventContextMenu = ({
1955
2078
  ...onEdit ? [{
1956
2079
  id: "edit",
1957
2080
  label: translations?.edit || "Edit",
1958
- icon: /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Edit3, { className: "w-4 h-4" }),
2081
+ icon: /* @__PURE__ */ import_react16.default.createElement(import_lucide_react8.Edit3, { className: "w-4 h-4" }),
1959
2082
  onClick: () => {
1960
2083
  onEdit(event);
1961
2084
  onClose();
@@ -1964,7 +2087,7 @@ var EventContextMenu = ({
1964
2087
  ...onDuplicate ? [{
1965
2088
  id: "duplicate",
1966
2089
  label: translations?.duplicate || "Duplicate",
1967
- icon: /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Copy, { className: "w-4 h-4" }),
2090
+ icon: /* @__PURE__ */ import_react16.default.createElement(import_lucide_react8.Copy, { className: "w-4 h-4" }),
1968
2091
  onClick: () => {
1969
2092
  onDuplicate(event);
1970
2093
  onClose();
@@ -1974,7 +2097,7 @@ var EventContextMenu = ({
1974
2097
  ...onDelete ? [{
1975
2098
  id: "delete",
1976
2099
  label: translations?.delete || "Delete",
1977
- icon: /* @__PURE__ */ React15__namespace.default.createElement(lucideReact.Trash2, { className: "w-4 h-4" }),
2100
+ icon: /* @__PURE__ */ import_react16.default.createElement(import_lucide_react8.Trash2, { className: "w-4 h-4" }),
1978
2101
  onClick: () => {
1979
2102
  onDelete(event.id);
1980
2103
  onClose();
@@ -1986,8 +2109,8 @@ var EventContextMenu = ({
1986
2109
  x: Math.min(position.x, window.innerWidth - 200),
1987
2110
  y: Math.min(position.y, window.innerHeight - (actions.length * 44 + 80))
1988
2111
  };
1989
- return /* @__PURE__ */ React15__namespace.default.createElement(framerMotion.AnimatePresence, null, /* @__PURE__ */ React15__namespace.default.createElement(
1990
- framerMotion.motion.div,
2112
+ return /* @__PURE__ */ import_react16.default.createElement(import_framer_motion3.AnimatePresence, null, /* @__PURE__ */ import_react16.default.createElement(
2113
+ import_framer_motion3.motion.div,
1991
2114
  {
1992
2115
  ref: menuRef,
1993
2116
  initial: { opacity: 0, scale: 0.95, y: -5 },
@@ -2000,14 +2123,14 @@ var EventContextMenu = ({
2000
2123
  top: adjustedPosition.y
2001
2124
  }
2002
2125
  },
2003
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "px-3 py-2 border-b-[0.5px] border-border bg-muted/30" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15__namespace.default.createElement(
2126
+ /* @__PURE__ */ import_react16.default.createElement("div", { className: "px-3 py-2 border-b-[0.5px] border-border bg-muted/30" }, /* @__PURE__ */ import_react16.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react16.default.createElement(
2004
2127
  "div",
2005
2128
  {
2006
2129
  className: "w-2.5 h-2.5 rounded-full shrink-0",
2007
2130
  style: { backgroundColor: event.color || "var(--primary)" }
2008
2131
  }
2009
- ), /* @__PURE__ */ React15__namespace.default.createElement("span", { className: "text-sm font-medium truncate text-foreground" }, event.title))),
2010
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "py-1" }, actions.map((action, index) => /* @__PURE__ */ React15__namespace.default.createElement(React15__namespace.default.Fragment, { key: action.id }, index > 0 && action.variant === "danger" && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "h-px bg-border my-1" }), /* @__PURE__ */ React15__namespace.default.createElement(
2132
+ ), /* @__PURE__ */ import_react16.default.createElement("span", { className: "text-sm font-medium truncate text-foreground" }, event.title))),
2133
+ /* @__PURE__ */ import_react16.default.createElement("div", { className: "py-1" }, actions.map((action, index) => /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, { key: action.id }, index > 0 && action.variant === "danger" && /* @__PURE__ */ import_react16.default.createElement("div", { className: "h-px bg-border my-1" }), /* @__PURE__ */ import_react16.default.createElement(
2011
2134
  "button",
2012
2135
  {
2013
2136
  onClick: action.onClick,
@@ -2019,13 +2142,13 @@ var EventContextMenu = ({
2019
2142
  )
2020
2143
  },
2021
2144
  action.icon,
2022
- /* @__PURE__ */ React15__namespace.default.createElement("span", null, action.label)
2145
+ /* @__PURE__ */ import_react16.default.createElement("span", null, action.label)
2023
2146
  ))))
2024
2147
  ));
2025
2148
  };
2026
2149
  var useEventContextMenu = () => {
2027
- const [contextMenu, setContextMenu] = React15.useState({ event: null, position: null });
2028
- const openContextMenu = React15.useCallback((event, e) => {
2150
+ const [contextMenu, setContextMenu] = (0, import_react16.useState)({ event: null, position: null });
2151
+ const openContextMenu = (0, import_react16.useCallback)((event, e) => {
2029
2152
  e.preventDefault();
2030
2153
  e.stopPropagation();
2031
2154
  setContextMenu({
@@ -2033,7 +2156,7 @@ var useEventContextMenu = () => {
2033
2156
  position: { x: e.clientX, y: e.clientY }
2034
2157
  });
2035
2158
  }, []);
2036
- const closeContextMenu = React15.useCallback(() => {
2159
+ const closeContextMenu = (0, import_react16.useCallback)(() => {
2037
2160
  setContextMenu({ event: null, position: null });
2038
2161
  }, []);
2039
2162
  return {
@@ -2044,6 +2167,146 @@ var useEventContextMenu = () => {
2044
2167
  };
2045
2168
  };
2046
2169
 
2170
+ // src/locales/index.ts
2171
+ var en = {
2172
+ today: "Today",
2173
+ month: "Month",
2174
+ week: "Week",
2175
+ day: "Day",
2176
+ agenda: "Agenda",
2177
+ resource: "Resources",
2178
+ createEvent: "Create Event",
2179
+ editEvent: "Edit Event",
2180
+ delete: "Delete",
2181
+ save: "Save",
2182
+ cancel: "Cancel",
2183
+ title: "Add title",
2184
+ start: "Start",
2185
+ end: "End",
2186
+ allDay: "All Day",
2187
+ description: "Description",
2188
+ repeat: "Repeat",
2189
+ noRepeat: "Does not repeat",
2190
+ selectCalendar: "Select Calendar",
2191
+ selectType: "Select Type",
2192
+ daily: "Daily",
2193
+ weekly: "Weekly",
2194
+ monthly: "Monthly",
2195
+ yearly: "Yearly",
2196
+ search: "Search events...",
2197
+ allTypes: "All Types",
2198
+ timezone: "Time zone",
2199
+ localTime: "Local Time",
2200
+ create: "Create",
2201
+ calendars: "Calendars",
2202
+ event: "Event",
2203
+ task: "Task",
2204
+ appointmentSchedule: "Appointment schedule",
2205
+ new: "New",
2206
+ dateAndTime: "Date & Time",
2207
+ whosJoining: "Who's joining?",
2208
+ suggestedTimes: "Suggested times for guests",
2209
+ viewSuggestions: "View suggestions",
2210
+ whereWillItBe: "Where will it be?",
2211
+ location: "Enter address",
2212
+ descriptionAndAttachments: "Description",
2213
+ dragAndDrop: "Drag & drop files or",
2214
+ guests: "Guests",
2215
+ addGuests: "Add guests",
2216
+ addAttachment: "Upload files",
2217
+ moreOptions: "More options",
2218
+ doesNotRepeat: "Does not repeat",
2219
+ locationHelpText: 'Enter a physical address (e.g. "123 Main St") to generate the map.',
2220
+ notes: "Notes...",
2221
+ guestCount: "guest",
2222
+ guestsCount: "guests",
2223
+ repeatFor: "Repeat for",
2224
+ times: "times",
2225
+ until: "Until",
2226
+ endRepeat: "End repeat",
2227
+ never: "Never",
2228
+ afterOccurrences: "After occurrences",
2229
+ onDate: "On date",
2230
+ tomorrow: "Tomorrow",
2231
+ edit: "Edit",
2232
+ duplicate: "Duplicate",
2233
+ eventSingular: "event",
2234
+ eventPlural: "events",
2235
+ allCaughtUp: "All caught up!",
2236
+ noEventsScheduled: "No events scheduled",
2237
+ noUpcoming: "Your schedule is clear",
2238
+ noUpcomingHint: "No upcoming events to show. Create a new event to start planning."
2239
+ };
2240
+ var fr = {
2241
+ today: "Aujourd'hui",
2242
+ month: "Mois",
2243
+ week: "Semaine",
2244
+ day: "Jour",
2245
+ agenda: "Agenda",
2246
+ resource: "Ressources",
2247
+ createEvent: "Cr\xE9er un \xE9v\xE9nement",
2248
+ editEvent: "Modifier l'\xE9v\xE9nement",
2249
+ delete: "Supprimer",
2250
+ save: "Enregistrer",
2251
+ cancel: "Annuler",
2252
+ title: "Ajouter un titre",
2253
+ start: "D\xE9but",
2254
+ end: "Fin",
2255
+ allDay: "Toute la journ\xE9e",
2256
+ description: "Description",
2257
+ repeat: "R\xE9p\xE9ter",
2258
+ noRepeat: "Ne se r\xE9p\xE8te pas",
2259
+ selectCalendar: "S\xE9lectionner un calendrier",
2260
+ selectType: "S\xE9lectionner un type",
2261
+ daily: "Quotidien",
2262
+ weekly: "Hebdomadaire",
2263
+ monthly: "Mensuel",
2264
+ yearly: "Annuel",
2265
+ search: "Rechercher...",
2266
+ allTypes: "Tous les types",
2267
+ timezone: "Fuseau horaire",
2268
+ localTime: "Heure locale",
2269
+ create: "Cr\xE9er",
2270
+ calendars: "Calendriers",
2271
+ event: "\xC9v\xE9nement",
2272
+ task: "T\xE2che",
2273
+ appointmentSchedule: "Planning de rendez-vous",
2274
+ new: "Nouveau",
2275
+ dateAndTime: "Date et heure",
2276
+ whosJoining: "Qui participe ?",
2277
+ suggestedTimes: "Horaires sugg\xE9r\xE9s",
2278
+ viewSuggestions: "Voir les suggestions",
2279
+ whereWillItBe: "O\xF9 aura lieu ?",
2280
+ location: "Entrer une adresse",
2281
+ descriptionAndAttachments: "Description",
2282
+ dragAndDrop: "Glisser-d\xE9poser des fichiers ou",
2283
+ guests: "Invit\xE9s",
2284
+ addGuests: "Ajouter des invit\xE9s",
2285
+ addAttachment: "T\xE9l\xE9charger des fichiers",
2286
+ moreOptions: "Plus d'options",
2287
+ doesNotRepeat: "Ne se r\xE9p\xE8te pas",
2288
+ locationHelpText: 'Entrez une adresse physique (ex: "123 Rue Principale") pour g\xE9n\xE9rer la carte.',
2289
+ notes: "Notes...",
2290
+ guestCount: "invit\xE9",
2291
+ guestsCount: "invit\xE9s",
2292
+ repeatFor: "R\xE9p\xE9ter pendant",
2293
+ times: "fois",
2294
+ until: "Jusqu'au",
2295
+ endRepeat: "Fin de r\xE9p\xE9tition",
2296
+ never: "Jamais",
2297
+ afterOccurrences: "Apr\xE8s occurrences",
2298
+ onDate: "\xC0 la date",
2299
+ tomorrow: "Demain",
2300
+ edit: "Modifier",
2301
+ duplicate: "Dupliquer",
2302
+ eventSingular: "\xE9v\xE9nement",
2303
+ eventPlural: "\xE9v\xE9nements",
2304
+ allCaughtUp: "Tout est \xE0 jour !",
2305
+ noEventsScheduled: "Aucun \xE9v\xE9nement pr\xE9vu",
2306
+ noUpcoming: "Votre planning est libre",
2307
+ noUpcomingHint: "Aucun \xE9v\xE9nement \xE0 venir. Cr\xE9ez un nouvel \xE9v\xE9nement pour commencer \xE0 planifier."
2308
+ };
2309
+
2047
2310
  // src/lib/theme.ts
2048
2311
  function colorToHsl(color) {
2049
2312
  let r = 0, g = 0, b = 0;
@@ -2069,7 +2332,7 @@ function colorToHsl(color) {
2069
2332
  const min = Math.min(r, g, b);
2070
2333
  let h = 0;
2071
2334
  let s = 0;
2072
- let l = (max + min) / 2;
2335
+ const l = (max + min) / 2;
2073
2336
  if (max !== min) {
2074
2337
  const d = max - min;
2075
2338
  s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
@@ -2122,6 +2385,12 @@ function getThemeStyles(theme) {
2122
2385
  }
2123
2386
  return styles;
2124
2387
  }
2388
+
2389
+ // src/hooks/useCalendarLogic.ts
2390
+ var import_react17 = require("react");
2391
+ var import_date_fns11 = require("date-fns");
2392
+ var import_date_fns_tz5 = require("date-fns-tz");
2393
+ var import_rrule = require("rrule");
2125
2394
  var useCalendarLogic = ({
2126
2395
  events,
2127
2396
  view: controlledView,
@@ -2135,23 +2404,23 @@ var useCalendarLogic = ({
2135
2404
  readOnly,
2136
2405
  timezone
2137
2406
  }) => {
2138
- const [internalView, setInternalView] = React15.useState("week");
2139
- const [internalDate, setInternalDate] = React15.useState(/* @__PURE__ */ new Date());
2140
- const [isSidebarOpen, setIsSidebarOpen] = React15.useState(true);
2141
- const [isModalOpen, setIsModalOpen] = React15.useState(false);
2142
- const [selectedEvent, setSelectedEvent] = React15.useState(null);
2143
- const [modalInitialDate, setModalInitialDate] = React15.useState(void 0);
2407
+ const [internalView, setInternalView] = (0, import_react17.useState)("week");
2408
+ const [internalDate, setInternalDate] = (0, import_react17.useState)(/* @__PURE__ */ new Date());
2409
+ const [isSidebarOpen, setIsSidebarOpen] = (0, import_react17.useState)(true);
2410
+ const [isModalOpen, setIsModalOpen] = (0, import_react17.useState)(false);
2411
+ const [selectedEvent, setSelectedEvent] = (0, import_react17.useState)(null);
2412
+ const [modalInitialDate, setModalInitialDate] = (0, import_react17.useState)(void 0);
2144
2413
  const view = controlledView ?? internalView;
2145
2414
  const currentDate = controlledDate ?? internalDate;
2146
- const expandedEvents = React15.useMemo(() => {
2415
+ const expandedEvents = (0, import_react17.useMemo)(() => {
2147
2416
  const allEvents = [];
2148
- const rangeStart = dateFns.subDays(currentDate, 365);
2149
- const rangeEnd = dateFns.addDays(currentDate, 365);
2417
+ const rangeStart = (0, import_date_fns11.subDays)(currentDate, 365);
2418
+ const rangeEnd = (0, import_date_fns11.addDays)(currentDate, 365);
2150
2419
  events.forEach((event) => {
2151
2420
  if (event.recurrence) {
2152
2421
  try {
2153
- const rule = new rrule.RRule({
2154
- freq: rrule.RRule[event.recurrence.freq],
2422
+ const rule = new import_rrule.RRule({
2423
+ freq: import_rrule.RRule[event.recurrence.freq],
2155
2424
  interval: event.recurrence.interval || 1,
2156
2425
  dtstart: new Date(event.start),
2157
2426
  until: event.recurrence.until ? new Date(event.recurrence.until) : void 0,
@@ -2159,7 +2428,7 @@ var useCalendarLogic = ({
2159
2428
  });
2160
2429
  const dates = rule.between(rangeStart, rangeEnd);
2161
2430
  dates.forEach((date) => {
2162
- const duration = dateFns.differenceInMilliseconds(new Date(event.end), new Date(event.start));
2431
+ const duration = (0, import_date_fns11.differenceInMilliseconds)(new Date(event.end), new Date(event.start));
2163
2432
  allEvents.push({
2164
2433
  ...event,
2165
2434
  id: `${event.id}-${date.getTime()}`,
@@ -2197,34 +2466,34 @@ var useCalendarLogic = ({
2197
2466
  const handlePrev = () => {
2198
2467
  switch (view) {
2199
2468
  case "month":
2200
- handleDateChange(dateFns.subMonths(currentDate, 1));
2469
+ handleDateChange((0, import_date_fns11.subMonths)(currentDate, 1));
2201
2470
  break;
2202
2471
  case "week":
2203
- handleDateChange(dateFns.subWeeks(currentDate, 1));
2472
+ handleDateChange((0, import_date_fns11.subWeeks)(currentDate, 1));
2204
2473
  break;
2205
2474
  case "day":
2206
2475
  case "resource":
2207
- handleDateChange(dateFns.subDays(currentDate, 1));
2476
+ handleDateChange((0, import_date_fns11.subDays)(currentDate, 1));
2208
2477
  break;
2209
2478
  case "agenda":
2210
- handleDateChange(dateFns.subDays(currentDate, 7));
2479
+ handleDateChange((0, import_date_fns11.subDays)(currentDate, 7));
2211
2480
  break;
2212
2481
  }
2213
2482
  };
2214
2483
  const handleNext = () => {
2215
2484
  switch (view) {
2216
2485
  case "month":
2217
- handleDateChange(dateFns.addMonths(currentDate, 1));
2486
+ handleDateChange((0, import_date_fns11.addMonths)(currentDate, 1));
2218
2487
  break;
2219
2488
  case "week":
2220
- handleDateChange(dateFns.addWeeks(currentDate, 1));
2489
+ handleDateChange((0, import_date_fns11.addWeeks)(currentDate, 1));
2221
2490
  break;
2222
2491
  case "day":
2223
2492
  case "resource":
2224
- handleDateChange(dateFns.addDays(currentDate, 1));
2493
+ handleDateChange((0, import_date_fns11.addDays)(currentDate, 1));
2225
2494
  break;
2226
2495
  case "agenda":
2227
- handleDateChange(dateFns.addDays(currentDate, 7));
2496
+ handleDateChange((0, import_date_fns11.addDays)(currentDate, 7));
2228
2497
  break;
2229
2498
  }
2230
2499
  };
@@ -2292,17 +2561,17 @@ var useCalendarLogic = ({
2292
2561
  if (!activeEvent || !overDate) return;
2293
2562
  const originalStart = new Date(activeEvent.start);
2294
2563
  const originalEnd = new Date(activeEvent.end);
2295
- const duration = dateFns.differenceInMilliseconds(originalEnd, originalStart);
2564
+ const duration = (0, import_date_fns11.differenceInMilliseconds)(originalEnd, originalStart);
2296
2565
  let newStart;
2297
2566
  if (view === "month") {
2298
2567
  if (timezone) {
2299
- const zonedOriginal = dateFnsTz.toZonedTime(originalStart, timezone);
2568
+ const zonedOriginal = (0, import_date_fns_tz5.toZonedTime)(originalStart, timezone);
2300
2569
  const zonedNew = new Date(overDate);
2301
2570
  zonedNew.setHours(zonedOriginal.getHours());
2302
2571
  zonedNew.setMinutes(zonedOriginal.getMinutes());
2303
2572
  zonedNew.setSeconds(zonedOriginal.getSeconds());
2304
2573
  zonedNew.setMilliseconds(zonedOriginal.getMilliseconds());
2305
- newStart = dateFnsTz.fromZonedTime(zonedNew, timezone);
2574
+ newStart = (0, import_date_fns_tz5.fromZonedTime)(zonedNew, timezone);
2306
2575
  } else {
2307
2576
  newStart = new Date(overDate);
2308
2577
  newStart.setHours(originalStart.getHours());
@@ -2312,7 +2581,7 @@ var useCalendarLogic = ({
2312
2581
  }
2313
2582
  } else {
2314
2583
  if (timezone) {
2315
- newStart = dateFnsTz.fromZonedTime(overDate, timezone);
2584
+ newStart = (0, import_date_fns_tz5.fromZonedTime)(overDate, timezone);
2316
2585
  } else {
2317
2586
  newStart = new Date(overDate);
2318
2587
  }
@@ -2361,6 +2630,12 @@ var useCalendarLogic = ({
2361
2630
  handleDragEnd
2362
2631
  };
2363
2632
  };
2633
+
2634
+ // src/index.tsx
2635
+ var import_date_fns12 = require("date-fns");
2636
+
2637
+ // src/hooks/useSwipeGesture.ts
2638
+ var import_react18 = require("react");
2364
2639
  var useSwipeGesture = (options) => {
2365
2640
  const {
2366
2641
  onSwipeLeft,
@@ -2372,9 +2647,9 @@ var useSwipeGesture = (options) => {
2372
2647
  allowedTime = 500,
2373
2648
  enabled = true
2374
2649
  } = options;
2375
- const touchInfoRef = React15.useRef(null);
2376
- const elementRef = React15.useRef(null);
2377
- const handleTouchStart = React15.useCallback((e) => {
2650
+ const touchInfoRef = (0, import_react18.useRef)(null);
2651
+ const elementRef = (0, import_react18.useRef)(null);
2652
+ const handleTouchStart = (0, import_react18.useCallback)((e) => {
2378
2653
  if (!enabled) return;
2379
2654
  const touch = e.touches[0];
2380
2655
  touchInfoRef.current = {
@@ -2383,7 +2658,7 @@ var useSwipeGesture = (options) => {
2383
2658
  startTime: Date.now()
2384
2659
  };
2385
2660
  }, [enabled]);
2386
- const handleTouchEnd = React15.useCallback((e) => {
2661
+ const handleTouchEnd = (0, import_react18.useCallback)((e) => {
2387
2662
  if (!enabled || !touchInfoRef.current) return;
2388
2663
  const touch = e.changedTouches[0];
2389
2664
  const { startX, startY, startTime } = touchInfoRef.current;
@@ -2407,7 +2682,7 @@ var useSwipeGesture = (options) => {
2407
2682
  }
2408
2683
  touchInfoRef.current = null;
2409
2684
  }, [enabled, threshold, restraint, allowedTime, onSwipeLeft, onSwipeRight, onSwipeUp, onSwipeDown]);
2410
- React15.useEffect(() => {
2685
+ (0, import_react18.useEffect)(() => {
2411
2686
  const element = elementRef.current;
2412
2687
  if (!element) return;
2413
2688
  element.addEventListener("touchstart", handleTouchStart, { passive: true });
@@ -2463,7 +2738,7 @@ var Scheduler = ({
2463
2738
  locale
2464
2739
  // Date-fns locale
2465
2740
  }) => {
2466
- const [activeDragEvent, setActiveDragEvent] = React15.useState(null);
2741
+ const [activeDragEvent, setActiveDragEvent] = (0, import_react19.useState)(null);
2467
2742
  const {
2468
2743
  contextMenuEvent,
2469
2744
  contextMenuPosition,
@@ -2505,16 +2780,16 @@ var Scheduler = ({
2505
2780
  readOnly,
2506
2781
  timezone
2507
2782
  });
2508
- const sensors = core.useSensors(
2509
- core.useSensor(core.PointerSensor, {
2783
+ const sensors = (0, import_core3.useSensors)(
2784
+ (0, import_core3.useSensor)(import_core3.PointerSensor, {
2510
2785
  activationConstraint: {
2511
2786
  distance: 8
2512
2787
  }
2513
2788
  })
2514
2789
  );
2515
2790
  const gridSize = 15;
2516
- const snapToGrid = modifiers.createSnapModifier(gridSize);
2517
- const modifiers$1 = [snapToGrid, modifiers.restrictToWindowEdges];
2791
+ const snapToGrid = (0, import_modifiers.createSnapModifier)(gridSize);
2792
+ const modifiers = [snapToGrid, import_modifiers.restrictToWindowEdges];
2518
2793
  const dndSensors = readOnly ? [] : sensors;
2519
2794
  const handleEventResize = (event, newEnd) => {
2520
2795
  if (readOnly) return;
@@ -2528,35 +2803,14 @@ var Scheduler = ({
2528
2803
  });
2529
2804
  }
2530
2805
  };
2531
- const id = React15.useId();
2806
+ const id = (0, import_react19.useId)();
2532
2807
  const swipeRef = useViewSwipe(handlePrev, handleNext, true);
2808
+ const languagePack = language === "fr" ? fr : en;
2533
2809
  const t = {
2534
- today: "Today",
2535
- month: "Month",
2536
- week: "Week",
2537
- day: "Day",
2538
- agenda: "Agenda",
2539
- resource: "Resource",
2540
- createEvent: "Create Event",
2541
- editEvent: "Edit Event",
2542
- delete: "Delete",
2543
- save: "Save",
2544
- cancel: "Cancel",
2545
- title: "Title",
2546
- start: "Start",
2547
- end: "End",
2548
- allDay: "All Day",
2549
- description: "Description",
2550
- repeat: "Repeat",
2551
- noRepeat: "Does not repeat",
2552
- selectCalendar: "Select Calendar",
2553
- selectType: "Select Type",
2554
- daily: "Daily",
2555
- weekly: "Weekly",
2556
- monthly: "Monthly",
2557
- yearly: "Yearly",
2810
+ ...languagePack,
2558
2811
  ...translations
2559
2812
  };
2813
+ const overlayTimeFormat = uses24HourClock(locale) ? "H:mm" : "h:mm a";
2560
2814
  const handleDragStart = (event) => {
2561
2815
  const { active } = event;
2562
2816
  const draggedEvent = expandedEvents.find((e) => e.id === active.id);
@@ -2574,20 +2828,20 @@ var Scheduler = ({
2574
2828
  return 80;
2575
2829
  }
2576
2830
  if (view !== "week" && view !== "day") return void 0;
2577
- const duration = dateFns.differenceInMinutes(activeDragEvent.end, activeDragEvent.start);
2831
+ const duration = (0, import_date_fns12.differenceInMinutes)(activeDragEvent.end, activeDragEvent.start);
2578
2832
  const hourHeight = view === "day" ? 80 : 60;
2579
2833
  return duration / 60 * hourHeight;
2580
2834
  };
2581
2835
  const getDragWidth = () => {
2582
2836
  if (view === "month") return "100%";
2583
2837
  if (view === "resource" && activeDragEvent) {
2584
- const duration = dateFns.differenceInMinutes(activeDragEvent.end, activeDragEvent.start);
2838
+ const duration = (0, import_date_fns12.differenceInMinutes)(activeDragEvent.end, activeDragEvent.start);
2585
2839
  const width = duration / 60 * 100;
2586
2840
  return `${Math.max(width, 4)}px`;
2587
2841
  }
2588
2842
  return "150px";
2589
2843
  };
2590
- const filteredEvents = React15.useMemo(() => {
2844
+ const filteredEvents = (0, import_react19.useMemo)(() => {
2591
2845
  if (!calendars) return expandedEvents;
2592
2846
  const activeCalendarIds = calendars.filter((c) => c.active !== false).map((c) => c.id);
2593
2847
  return expandedEvents.filter((e) => {
@@ -2595,22 +2849,22 @@ var Scheduler = ({
2595
2849
  return activeCalendarIds.includes(e.calendarId);
2596
2850
  });
2597
2851
  }, [expandedEvents, calendars]);
2598
- return /* @__PURE__ */ React15__namespace.default.createElement(
2599
- core.DndContext,
2852
+ return /* @__PURE__ */ import_react19.default.createElement(
2853
+ import_core3.DndContext,
2600
2854
  {
2601
2855
  id,
2602
2856
  sensors: dndSensors,
2603
2857
  onDragStart: handleDragStart,
2604
2858
  onDragEnd: onDragEndWrapper,
2605
- modifiers: modifiers$1
2859
+ modifiers
2606
2860
  },
2607
- /* @__PURE__ */ React15__namespace.default.createElement(
2861
+ /* @__PURE__ */ import_react19.default.createElement(
2608
2862
  "div",
2609
2863
  {
2610
2864
  className: cn("flex flex-col h-full bg-background text-foreground relative", className),
2611
2865
  style: getThemeStyles(theme)
2612
2866
  },
2613
- /* @__PURE__ */ React15__namespace.default.createElement(
2867
+ /* @__PURE__ */ import_react19.default.createElement(
2614
2868
  CalendarHeader,
2615
2869
  {
2616
2870
  currentDate,
@@ -2629,8 +2883,8 @@ var Scheduler = ({
2629
2883
  locale
2630
2884
  }
2631
2885
  ),
2632
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex flex-1 overflow-hidden" }, /* @__PURE__ */ React15__namespace.default.createElement(
2633
- framerMotion.motion.div,
2886
+ /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-1 overflow-hidden" }, /* @__PURE__ */ import_react19.default.createElement(
2887
+ import_framer_motion4.motion.div,
2634
2888
  {
2635
2889
  className: cn(
2636
2890
  "hidden md:block overflow-hidden"
@@ -2645,7 +2899,7 @@ var Scheduler = ({
2645
2899
  ease: [0.4, 0, 0.2, 1]
2646
2900
  }
2647
2901
  },
2648
- /* @__PURE__ */ React15__namespace.default.createElement(
2902
+ /* @__PURE__ */ import_react19.default.createElement(
2649
2903
  Sidebar,
2650
2904
  {
2651
2905
  currentDate,
@@ -2658,11 +2912,12 @@ var Scheduler = ({
2658
2912
  readOnly,
2659
2913
  calendars,
2660
2914
  onCalendarToggle,
2661
- translations: t
2915
+ translations: t,
2916
+ locale
2662
2917
  }
2663
2918
  )
2664
- ), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 flex flex-col overflow-hidden relative" }, isLoading ? /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "flex-1 overflow-auto p-0 md:p-4" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "h-full min-w-full" }, view === "month" && /* @__PURE__ */ React15__namespace.default.createElement(MonthViewSkeleton, null), view === "week" && /* @__PURE__ */ React15__namespace.default.createElement(WeekViewSkeleton, null), view === "day" && /* @__PURE__ */ React15__namespace.default.createElement(DayViewSkeleton, null), view === "agenda" && /* @__PURE__ */ React15__namespace.default.createElement(AgendaViewSkeleton, null), view === "resource" && /* @__PURE__ */ React15__namespace.default.createElement(WeekViewSkeleton, null))) : /* @__PURE__ */ React15__namespace.default.createElement("div", { ref: swipeRef, className: "flex-1 overflow-auto p-0 md:p-4 touch-pan-y" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "h-full min-w-full" }, /* @__PURE__ */ React15__namespace.default.createElement(framerMotion.AnimatePresence, { mode: "wait", initial: false }, /* @__PURE__ */ React15__namespace.default.createElement(
2665
- framerMotion.motion.div,
2919
+ ), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex-1 flex flex-col overflow-hidden relative" }, isLoading ? /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex-1 overflow-auto p-0 md:p-4" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "h-full min-w-full" }, view === "month" && /* @__PURE__ */ import_react19.default.createElement(MonthViewSkeleton, null), view === "week" && /* @__PURE__ */ import_react19.default.createElement(WeekViewSkeleton, null), view === "day" && /* @__PURE__ */ import_react19.default.createElement(DayViewSkeleton, null), view === "agenda" && /* @__PURE__ */ import_react19.default.createElement(AgendaViewSkeleton, null), view === "resource" && /* @__PURE__ */ import_react19.default.createElement(WeekViewSkeleton, null))) : /* @__PURE__ */ import_react19.default.createElement("div", { ref: swipeRef, className: "flex-1 overflow-auto p-0 md:p-4 touch-pan-y" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "h-full min-w-full" }, /* @__PURE__ */ import_react19.default.createElement(import_framer_motion4.AnimatePresence, { mode: "wait", initial: false }, /* @__PURE__ */ import_react19.default.createElement(
2920
+ import_framer_motion4.motion.div,
2666
2921
  {
2667
2922
  key: `${view}-${currentDate.toISOString()}-${timezone || "local"}`,
2668
2923
  initial: { opacity: 0, scale: 0.98, y: 15 },
@@ -2686,7 +2941,7 @@ var Scheduler = ({
2686
2941
  },
2687
2942
  className: "h-full"
2688
2943
  },
2689
- view === "month" && /* @__PURE__ */ React15__namespace.default.createElement(
2944
+ view === "month" && /* @__PURE__ */ import_react19.default.createElement(
2690
2945
  MonthView,
2691
2946
  {
2692
2947
  currentDate,
@@ -2697,7 +2952,7 @@ var Scheduler = ({
2697
2952
  locale
2698
2953
  }
2699
2954
  ),
2700
- view === "week" && /* @__PURE__ */ React15__namespace.default.createElement(
2955
+ view === "week" && /* @__PURE__ */ import_react19.default.createElement(
2701
2956
  WeekView,
2702
2957
  {
2703
2958
  currentDate,
@@ -2710,7 +2965,7 @@ var Scheduler = ({
2710
2965
  readonly: readOnly
2711
2966
  }
2712
2967
  ),
2713
- view === "day" && /* @__PURE__ */ React15__namespace.default.createElement(
2968
+ view === "day" && /* @__PURE__ */ import_react19.default.createElement(
2714
2969
  DayView,
2715
2970
  {
2716
2971
  currentDate,
@@ -2723,36 +2978,38 @@ var Scheduler = ({
2723
2978
  readonly: readOnly
2724
2979
  }
2725
2980
  ),
2726
- view === "agenda" && /* @__PURE__ */ React15__namespace.default.createElement(
2981
+ view === "agenda" && /* @__PURE__ */ import_react19.default.createElement(
2727
2982
  AgendaView,
2728
2983
  {
2729
2984
  currentDate,
2730
2985
  events: filteredEvents,
2731
2986
  onEventClick: handleEventClickInternal,
2732
- onCreateEvent: handleCreateEvent
2987
+ onCreateEvent: handleCreateEvent,
2988
+ locale,
2989
+ translations: t
2733
2990
  }
2734
2991
  ),
2735
- view === "resource" && resources && /* @__PURE__ */ React15__namespace.default.createElement(
2992
+ view === "resource" && resources && /* @__PURE__ */ import_react19.default.createElement(
2736
2993
  ResourceView,
2737
2994
  {
2738
2995
  currentDate,
2739
2996
  events: filteredEvents,
2740
2997
  resources,
2741
2998
  onEventClick: handleEventClickInternal,
2742
- onTimeSlotClick: (date, resourceId) => {
2999
+ onTimeSlotClick: (date) => {
2743
3000
  if (readOnly) return;
2744
3001
  handleTimeSlotClick(date);
2745
3002
  },
2746
3003
  locale
2747
3004
  }
2748
3005
  )
2749
- )))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "md:hidden absolute bottom-6 right-6 z-50" }, /* @__PURE__ */ React15__namespace.default.createElement(
3006
+ )))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "md:hidden absolute bottom-6 right-6 z-50" }, /* @__PURE__ */ import_react19.default.createElement(
2750
3007
  "button",
2751
3008
  {
2752
3009
  onClick: handleCreateEvent,
2753
3010
  className: "w-14 h-14 bg-blue-600 rounded-full shadow-lg flex items-center justify-center text-white active:scale-90 transition-transform"
2754
3011
  },
2755
- /* @__PURE__ */ React15__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React15__namespace.default.createElement("path", { d: "M5 12h14" }), /* @__PURE__ */ React15__namespace.default.createElement("path", { d: "M12 5v14" }))
3012
+ /* @__PURE__ */ import_react19.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react19.default.createElement("path", { d: "M5 12h14" }), /* @__PURE__ */ import_react19.default.createElement("path", { d: "M12 5v14" }))
2756
3013
  )))),
2757
3014
  renderEventForm ? renderEventForm({
2758
3015
  isOpen: isModalOpen,
@@ -2761,7 +3018,7 @@ var Scheduler = ({
2761
3018
  initialDate: modalInitialDate,
2762
3019
  onSave: handleModalSave,
2763
3020
  onDelete: handleModalDelete
2764
- }) : /* @__PURE__ */ React15__namespace.default.createElement(
3021
+ }) : /* @__PURE__ */ import_react19.default.createElement(
2765
3022
  EventModal,
2766
3023
  {
2767
3024
  isOpen: isModalOpen,
@@ -2775,7 +3032,7 @@ var Scheduler = ({
2775
3032
  translations: t
2776
3033
  }
2777
3034
  ),
2778
- /* @__PURE__ */ React15__namespace.default.createElement(
3035
+ /* @__PURE__ */ import_react19.default.createElement(
2779
3036
  EventContextMenu,
2780
3037
  {
2781
3038
  event: contextMenuEvent,
@@ -2802,13 +3059,13 @@ var Scheduler = ({
2802
3059
  closeContextMenu();
2803
3060
  },
2804
3061
  translations: {
2805
- edit: t.editEvent || "Edit",
3062
+ edit: t.edit || t.editEvent || "Edit",
2806
3063
  delete: t.delete || "Delete",
2807
- duplicate: "Duplicate"
3064
+ duplicate: t.duplicate || "Duplicate"
2808
3065
  }
2809
3066
  }
2810
3067
  ),
2811
- /* @__PURE__ */ React15__namespace.default.createElement(core.DragOverlay, { dropAnimation: null }, activeDragEvent ? /* @__PURE__ */ React15__namespace.default.createElement(
3068
+ /* @__PURE__ */ import_react19.default.createElement(import_core3.DragOverlay, { dropAnimation: null }, activeDragEvent ? /* @__PURE__ */ import_react19.default.createElement(
2812
3069
  "div",
2813
3070
  {
2814
3071
  className: cn(
@@ -2826,19 +3083,19 @@ var Scheduler = ({
2826
3083
  transform: "rotate(-2deg) scale(1.02)"
2827
3084
  }
2828
3085
  },
2829
- /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "p-2.5 h-full flex flex-col" }, /* @__PURE__ */ React15__namespace.default.createElement(
3086
+ /* @__PURE__ */ import_react19.default.createElement("div", { className: "p-2.5 h-full flex flex-col" }, /* @__PURE__ */ import_react19.default.createElement(
2830
3087
  "div",
2831
3088
  {
2832
3089
  className: "absolute left-0 top-0 bottom-0 w-1 rounded-l-lg",
2833
3090
  style: { backgroundColor: activeDragEvent.color || "var(--primary)" }
2834
3091
  }
2835
- ), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "pl-2" }, /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "font-semibold truncate text-sm" }, activeDragEvent.title), (view === "week" || view === "day") && getDragHeight() && getDragHeight() > 40 && /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "text-xs opacity-80 mt-0.5 flex items-center gap-1" }, /* @__PURE__ */ React15__namespace.default.createElement("svg", { className: "w-3 h-3", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2" }, /* @__PURE__ */ React15__namespace.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ React15__namespace.default.createElement("path", { d: "M12 6v6l4 2" })), dateFns.format(activeDragEvent.start, "h:mm a"), " - ", dateFns.format(activeDragEvent.end, "h:mm a"))), /* @__PURE__ */ React15__namespace.default.createElement("div", { className: "absolute bottom-1.5 right-1.5 opacity-60" }, /* @__PURE__ */ React15__namespace.default.createElement("svg", { className: "w-4 h-4", viewBox: "0 0 24 24", fill: "currentColor" }, /* @__PURE__ */ React15__namespace.default.createElement("circle", { cx: "9", cy: "5", r: "1.5" }), /* @__PURE__ */ React15__namespace.default.createElement("circle", { cx: "15", cy: "5", r: "1.5" }), /* @__PURE__ */ React15__namespace.default.createElement("circle", { cx: "9", cy: "12", r: "1.5" }), /* @__PURE__ */ React15__namespace.default.createElement("circle", { cx: "15", cy: "12", r: "1.5" }), /* @__PURE__ */ React15__namespace.default.createElement("circle", { cx: "9", cy: "19", r: "1.5" }), /* @__PURE__ */ React15__namespace.default.createElement("circle", { cx: "15", cy: "19", r: "1.5" }))))
3092
+ ), /* @__PURE__ */ import_react19.default.createElement("div", { className: "pl-2" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "font-semibold truncate text-sm" }, activeDragEvent.title), (view === "week" || view === "day") && getDragHeight() && getDragHeight() > 40 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "text-xs opacity-80 mt-0.5 flex items-center gap-1" }, /* @__PURE__ */ import_react19.default.createElement("svg", { className: "w-3 h-3", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2" }, /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react19.default.createElement("path", { d: "M12 6v6l4 2" })), (0, import_date_fns12.format)(activeDragEvent.start, overlayTimeFormat, { locale }), " - ", (0, import_date_fns12.format)(activeDragEvent.end, overlayTimeFormat, { locale }))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "absolute bottom-1.5 right-1.5 opacity-60" }, /* @__PURE__ */ import_react19.default.createElement("svg", { className: "w-4 h-4", viewBox: "0 0 24 24", fill: "currentColor" }, /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "9", cy: "5", r: "1.5" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "15", cy: "5", r: "1.5" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "9", cy: "12", r: "1.5" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "15", cy: "12", r: "1.5" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "9", cy: "19", r: "1.5" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "15", cy: "19", r: "1.5" }))))
2836
3093
  ) : null)
2837
3094
  )
2838
3095
  );
2839
3096
  };
2840
-
2841
- exports.Scheduler = Scheduler;
2842
- exports.cn = cn;
2843
- //# sourceMappingURL=index.js.map
2844
- //# sourceMappingURL=index.js.map
3097
+ // Annotate the CommonJS export names for ESM import in node:
3098
+ 0 && (module.exports = {
3099
+ Scheduler,
3100
+ cn
3101
+ });