@forcecalendar/interface 1.0.38 → 1.0.40

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.
@@ -1,8 +1,8 @@
1
- var _ = Object.defineProperty;
2
- var $ = (h, e, t) => e in h ? _(h, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : h[e] = t;
3
- var m = (h, e, t) => $(h, typeof e != "symbol" ? e + "" : e, t);
4
- import { Calendar as M, DateUtils as T } from "@forcecalendar/core";
5
- class k extends HTMLElement {
1
+ var S = Object.defineProperty;
2
+ var F = (f, e, t) => e in f ? S(f, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : f[e] = t;
3
+ var v = (f, e, t) => F(f, typeof e != "symbol" ? e + "" : e, t);
4
+ import { Calendar as H, DateUtils as L } from "@forcecalendar/core";
5
+ class T extends HTMLElement {
6
6
  constructor() {
7
7
  super(), this.attachShadow({ mode: "open" }), this._listeners = [], this._state = null, this._props = /* @__PURE__ */ new Map(), this._initialized = !1;
8
8
  }
@@ -111,7 +111,7 @@ class k extends HTMLElement {
111
111
  this.setProp(e, r), this._initialized && this.render();
112
112
  }
113
113
  }
114
- class S {
114
+ class V {
115
115
  constructor() {
116
116
  this.events = /* @__PURE__ */ new Map(), this.wildcardHandlers = /* @__PURE__ */ new Set();
117
117
  }
@@ -125,14 +125,14 @@ class S {
125
125
  on(e, t, r = {}) {
126
126
  const { once: i = !1, priority: s = 0 } = r;
127
127
  if (e.includes("*")) {
128
- const o = { pattern: e, handler: t, once: i, priority: s };
129
- return this.wildcardHandlers.add(o), () => this.wildcardHandlers.delete(o);
128
+ const a = { pattern: e, handler: t, once: i, priority: s };
129
+ return this.wildcardHandlers.add(a), () => this.wildcardHandlers.delete(a);
130
130
  }
131
131
  this.events.has(e) || this.events.set(e, []);
132
- const n = { handler: t, once: i, priority: s }, a = this.events.get(e);
133
- return a.push(n), a.sort((o, c) => c.priority - o.priority), () => {
134
- const o = a.indexOf(n);
135
- o > -1 && a.splice(o, 1);
132
+ const n = { handler: t, once: i, priority: s }, o = this.events.get(e);
133
+ return o.push(n), o.sort((a, c) => c.priority - a.priority), () => {
134
+ const a = o.indexOf(n);
135
+ a > -1 && o.splice(a, 1);
136
136
  };
137
137
  }
138
138
  /**
@@ -189,10 +189,10 @@ class S {
189
189
  if (this.events.has(e)) {
190
190
  const s = [...this.events.get(e)];
191
191
  for (const n of s) {
192
- const { handler: a, once: o } = n;
193
- o && this.off(e, a);
192
+ const { handler: o, once: a } = n;
193
+ a && this.off(e, o);
194
194
  try {
195
- const c = a(t, e);
195
+ const c = o(t, e);
196
196
  c instanceof Promise && r.push(c);
197
197
  } catch (c) {
198
198
  console.error(`Error in event handler for ${e}:`, c);
@@ -202,13 +202,13 @@ class S {
202
202
  const i = [];
203
203
  for (const s of [...this.wildcardHandlers])
204
204
  if (this.matchesPattern(e, s.pattern)) {
205
- const { handler: n, once: a } = s;
206
- a && i.push(s);
205
+ const { handler: n, once: o } = s;
206
+ o && i.push(s);
207
207
  try {
208
- const o = n(t, e);
209
- o instanceof Promise && r.push(o);
210
- } catch (o) {
211
- console.error(`Error in wildcard handler for ${e}:`, o);
208
+ const a = n(t, e);
209
+ a instanceof Promise && r.push(a);
210
+ } catch (a) {
211
+ console.error(`Error in wildcard handler for ${e}:`, a);
212
212
  }
213
213
  }
214
214
  return i.forEach((s) => this.wildcardHandlers.delete(s)), Promise.all(r);
@@ -253,10 +253,10 @@ class S {
253
253
  return e;
254
254
  }
255
255
  }
256
- const d = new S();
257
- class C {
256
+ const l = new V();
257
+ class I {
258
258
  constructor(e = {}) {
259
- this.calendar = new M({
259
+ this.calendar = new H({
260
260
  view: e.view || "month",
261
261
  date: e.date || /* @__PURE__ */ new Date(),
262
262
  weekStartsOn: e.weekStartsOn ?? 0,
@@ -343,48 +343,48 @@ class C {
343
343
  emitStateChange(e, t) {
344
344
  const r = Object.keys(t).filter((i) => e[i] !== t[i]);
345
345
  r.forEach((i) => {
346
- d.emit(`state:${i}:changed`, {
346
+ l.emit(`state:${i}:changed`, {
347
347
  oldValue: e[i],
348
348
  newValue: t[i],
349
349
  state: t
350
350
  });
351
- }), r.length > 0 && d.emit("state:changed", { oldState: e, newState: t, changedKeys: r });
351
+ }), r.length > 0 && l.emit("state:changed", { oldState: e, newState: t, changedKeys: r });
352
352
  }
353
353
  // Calendar operations
354
354
  setView(e) {
355
- this.calendar.setView(e), this.setState({ view: e }), d.emit("view:changed", { view: e });
355
+ this.calendar.setView(e), this.setState({ view: e }), l.emit("view:changed", { view: e });
356
356
  }
357
357
  getView() {
358
358
  return this.state.view;
359
359
  }
360
360
  setDate(e) {
361
- this.calendar.goToDate(e), this.setState({ currentDate: this.calendar.getCurrentDate() }), d.emit("date:changed", { date: this.state.currentDate });
361
+ this.calendar.goToDate(e), this.setState({ currentDate: this.calendar.getCurrentDate() }), l.emit("date:changed", { date: this.state.currentDate });
362
362
  }
363
363
  getCurrentDate() {
364
364
  return this.state.currentDate;
365
365
  }
366
366
  // Navigation
367
367
  next() {
368
- this.calendar.next(), this.setState({ currentDate: this.calendar.getCurrentDate() }), d.emit("navigation:next", { date: this.state.currentDate });
368
+ this.calendar.next(), this.setState({ currentDate: this.calendar.getCurrentDate() }), l.emit("navigation:next", { date: this.state.currentDate });
369
369
  }
370
370
  previous() {
371
- this.calendar.previous(), this.setState({ currentDate: this.calendar.getCurrentDate() }), d.emit("navigation:previous", { date: this.state.currentDate });
371
+ this.calendar.previous(), this.setState({ currentDate: this.calendar.getCurrentDate() }), l.emit("navigation:previous", { date: this.state.currentDate });
372
372
  }
373
373
  today() {
374
- this.calendar.today(), this.setState({ currentDate: this.calendar.getCurrentDate() }), d.emit("navigation:today", { date: this.state.currentDate });
374
+ this.calendar.today(), this.setState({ currentDate: this.calendar.getCurrentDate() }), l.emit("navigation:today", { date: this.state.currentDate });
375
375
  }
376
376
  goToDate(e) {
377
- this.calendar.goToDate(e), this.setState({ currentDate: this.calendar.getCurrentDate() }), d.emit("navigation:goto", { date: this.state.currentDate });
377
+ this.calendar.goToDate(e), this.setState({ currentDate: this.calendar.getCurrentDate() }), l.emit("navigation:goto", { date: this.state.currentDate });
378
378
  }
379
379
  // Event management
380
380
  addEvent(e) {
381
381
  const t = this.calendar.addEvent(e);
382
- return t ? (this._syncEventsFromCore(), d.emit("event:add", { event: t }), d.emit("event:added", { event: t }), t) : (console.error("Failed to add event to calendar"), d.emit("event:error", { action: "add", event: e, error: "Failed to add event" }), null);
382
+ return t ? (this._syncEventsFromCore(), l.emit("event:add", { event: t }), l.emit("event:added", { event: t }), t) : (console.error("Failed to add event to calendar"), l.emit("event:error", { action: "add", event: e, error: "Failed to add event" }), null);
383
383
  }
384
384
  updateEvent(e, t) {
385
385
  this._syncEventsFromCore({ silent: !0 });
386
386
  const r = this.calendar.updateEvent(e, t);
387
- return r ? (this._syncEventsFromCore({ force: !0 }), d.emit("event:update", { event: r }), d.emit("event:updated", { event: r }), r) : (console.error(`Failed to update event: ${e}`), d.emit("event:error", {
387
+ return r ? (this._syncEventsFromCore({ force: !0 }), l.emit("event:update", { event: r }), l.emit("event:updated", { event: r }), r) : (console.error(`Failed to update event: ${e}`), l.emit("event:error", {
388
388
  action: "update",
389
389
  eventId: e,
390
390
  updates: t,
@@ -392,7 +392,7 @@ class C {
392
392
  }), null);
393
393
  }
394
394
  deleteEvent(e) {
395
- return this._syncEventsFromCore({ silent: !0 }), this.calendar.removeEvent(e) ? (this._syncEventsFromCore(), d.emit("event:remove", { eventId: e }), d.emit("event:deleted", { eventId: e }), !0) : (console.error(`Failed to delete event: ${e}`), d.emit("event:error", { action: "delete", eventId: e, error: "Event not found" }), !1);
395
+ return this._syncEventsFromCore({ silent: !0 }), this.calendar.removeEvent(e) ? (this._syncEventsFromCore(), l.emit("event:remove", { eventId: e }), l.emit("event:deleted", { eventId: e }), !0) : (console.error(`Failed to delete event: ${e}`), l.emit("event:error", { action: "delete", eventId: e, error: "Event not found" }), !1);
396
396
  }
397
397
  getEvents() {
398
398
  return this.calendar.getEvents() || [];
@@ -421,11 +421,11 @@ class C {
421
421
  if (t.weeks && (t.weeks = t.weeks.map((s) => ({
422
422
  ...s,
423
423
  days: s.days.map((n) => {
424
- const a = new Date(n.date);
424
+ const o = new Date(n.date);
425
425
  return {
426
426
  ...n,
427
- isSelected: a.toDateString() === r,
428
- events: n.events || this.getEventsForDate(a)
427
+ isSelected: o.toDateString() === r,
428
+ events: n.events || this.getEventsForDate(o)
429
429
  };
430
430
  })
431
431
  }))), t.days && (t.days = t.days.map((s) => {
@@ -443,20 +443,20 @@ class C {
443
443
  }
444
444
  // Selection management
445
445
  selectEvent(e) {
446
- this.setState({ selectedEvent: e }), d.emit("event:selected", { event: e });
446
+ this.setState({ selectedEvent: e }), l.emit("event:selected", { event: e });
447
447
  }
448
448
  selectEventById(e) {
449
449
  const t = this.state.events.find((r) => r.id === e);
450
450
  t && this.selectEvent(t);
451
451
  }
452
452
  deselectEvent() {
453
- this.setState({ selectedEvent: null }), d.emit("event:deselected", {});
453
+ this.setState({ selectedEvent: null }), l.emit("event:deselected", {});
454
454
  }
455
455
  selectDate(e) {
456
- this.setState({ selectedDate: e }), d.emit("date:selected", { date: e });
456
+ this.setState({ selectedDate: e }), l.emit("date:selected", { date: e });
457
457
  }
458
458
  deselectDate() {
459
- this.setState({ selectedDate: null }), d.emit("date:deselected", {});
459
+ this.setState({ selectedDate: null }), l.emit("date:deselected", {});
460
460
  }
461
461
  // Utility methods
462
462
  isToday(e) {
@@ -476,7 +476,7 @@ class C {
476
476
  }
477
477
  // Error handling
478
478
  setError(e) {
479
- this.setState({ error: e }), e && d.emit("error", { error: e });
479
+ this.setState({ error: e }), e && l.emit("error", { error: e });
480
480
  }
481
481
  clearError() {
482
482
  this.setState({ error: null });
@@ -490,7 +490,7 @@ class C {
490
490
  this.subscribers.clear(), this._subscriberIds && (this._subscriberIds.clear(), this._subscriberIds = null), this.state = null, this.calendar = null;
491
491
  }
492
492
  }
493
- class g extends T {
493
+ class g extends L {
494
494
  /**
495
495
  * Format date for display
496
496
  */
@@ -552,8 +552,8 @@ class g extends T {
552
552
  * Get relative time string (e.g., "2 hours ago", "in 3 days")
553
553
  */
554
554
  static getRelativeTime(e, t = /* @__PURE__ */ new Date(), r = "en-US") {
555
- const i = new Intl.RelativeTimeFormat(r, { numeric: "auto" }), s = e - t, n = Math.floor(s / 1e3), a = Math.floor(n / 60), o = Math.floor(a / 60), c = Math.floor(o / 24), l = Math.floor(c / 7), f = Math.floor(c / 30), p = Math.floor(c / 365);
556
- return Math.abs(n) < 60 ? i.format(n, "second") : Math.abs(a) < 60 ? i.format(a, "minute") : Math.abs(o) < 24 ? i.format(o, "hour") : Math.abs(c) < 7 ? i.format(c, "day") : Math.abs(l) < 4 ? i.format(l, "week") : Math.abs(f) < 12 ? i.format(f, "month") : i.format(p, "year");
555
+ const i = new Intl.RelativeTimeFormat(r, { numeric: "auto" }), s = e - t, n = Math.floor(s / 1e3), o = Math.floor(n / 60), a = Math.floor(o / 60), c = Math.floor(a / 24), d = Math.floor(c / 7), h = Math.floor(c / 30), u = Math.floor(c / 365);
556
+ return Math.abs(n) < 60 ? i.format(n, "second") : Math.abs(o) < 60 ? i.format(o, "minute") : Math.abs(a) < 24 ? i.format(a, "hour") : Math.abs(c) < 7 ? i.format(c, "day") : Math.abs(d) < 4 ? i.format(d, "week") : Math.abs(h) < 12 ? i.format(h, "month") : i.format(u, "year");
557
557
  }
558
558
  /**
559
559
  * Check if date is today
@@ -599,12 +599,12 @@ class g extends T {
599
599
  * Parse time string (e.g., "14:30" or "2:30 PM")
600
600
  */
601
601
  static parseTimeString(e, t = /* @__PURE__ */ new Date()) {
602
- const r = new Date(t), [i, s] = e.split(/\s+/), [n, a] = i.split(":").map(Number);
603
- let o = n;
604
- return s && (s.toLowerCase() === "pm" && n < 12 ? o = n + 12 : s.toLowerCase() === "am" && n === 12 && (o = 0)), r.setHours(o, a || 0, 0, 0), r;
602
+ const r = new Date(t), [i, s] = e.split(/\s+/), [n, o] = i.split(":").map(Number);
603
+ let a = n;
604
+ return s && (s.toLowerCase() === "pm" && n < 12 ? a = n + 12 : s.toLowerCase() === "am" && n === 12 && (a = 0)), r.setHours(a, o || 0, 0, 0), r;
605
605
  }
606
606
  }
607
- class x {
607
+ class E {
608
608
  /**
609
609
  * Create element with attributes and children
610
610
  */
@@ -618,8 +618,8 @@ class x {
618
618
  else if (s.startsWith("data-"))
619
619
  i.setAttribute(s, n);
620
620
  else if (s.startsWith("on") && typeof n == "function") {
621
- const a = s.slice(2).toLowerCase();
622
- i.addEventListener(a, n);
621
+ const o = s.slice(2).toLowerCase();
622
+ i.addEventListener(o, n);
623
623
  } else
624
624
  i[s] = n;
625
625
  }), r.forEach((s) => {
@@ -643,8 +643,8 @@ class x {
643
643
  */
644
644
  static delegate(e, t, r, i) {
645
645
  const s = (n) => {
646
- const a = n.target.closest(t);
647
- a && e.contains(a) && i.call(a, n);
646
+ const o = n.target.closest(t);
647
+ o && e.contains(o) && i.call(o, n);
648
648
  };
649
649
  return e.addEventListener(r, s), () => e.removeEventListener(r, s);
650
650
  }
@@ -799,7 +799,7 @@ class x {
799
799
  return e.addEventListener("keydown", s), r == null || r.focus(), () => e.removeEventListener("keydown", s);
800
800
  }
801
801
  }
802
- class u {
802
+ class p {
803
803
  /**
804
804
  * Get CSS variable value
805
805
  */
@@ -967,15 +967,15 @@ class u {
967
967
  * Darken color by percentage
968
968
  */
969
969
  static darken(e, t) {
970
- const r = parseInt(e.replace("#", ""), 16), i = Math.round(2.55 * t), s = (r >> 16) - i, n = (r >> 8 & 255) - i, a = (r & 255) - i;
971
- return "#" + (16777216 + (s < 255 ? s < 1 ? 0 : s : 255) * 65536 + (n < 255 ? n < 1 ? 0 : n : 255) * 256 + (a < 255 ? a < 1 ? 0 : a : 255)).toString(16).slice(1);
970
+ const r = parseInt(e.replace("#", ""), 16), i = Math.round(2.55 * t), s = (r >> 16) - i, n = (r >> 8 & 255) - i, o = (r & 255) - i;
971
+ return "#" + (16777216 + (s < 255 ? s < 1 ? 0 : s : 255) * 65536 + (n < 255 ? n < 1 ? 0 : n : 255) * 256 + (o < 255 ? o < 1 ? 0 : o : 255)).toString(16).slice(1);
972
972
  }
973
973
  /**
974
974
  * Lighten color by percentage
975
975
  */
976
976
  static lighten(e, t) {
977
- const r = parseInt(e.replace("#", ""), 16), i = Math.round(2.55 * t), s = (r >> 16) + i, n = (r >> 8 & 255) + i, a = (r & 255) + i;
978
- return "#" + (16777216 + (s < 255 ? s < 1 ? 0 : s : 255) * 65536 + (n < 255 ? n < 1 ? 0 : n : 255) * 256 + (a < 255 ? a < 1 ? 0 : a : 255)).toString(16).slice(1);
977
+ const r = parseInt(e.replace("#", ""), 16), i = Math.round(2.55 * t), s = (r >> 16) + i, n = (r >> 8 & 255) + i, o = (r & 255) + i;
978
+ return "#" + (16777216 + (s < 255 ? s < 1 ? 0 : s : 255) * 65536 + (n < 255 ? n < 1 ? 0 : n : 255) * 256 + (o < 255 ? o < 1 ? 0 : o : 255)).toString(16).slice(1);
979
979
  }
980
980
  /**
981
981
  * Get contrast color (black or white) for background
@@ -1136,7 +1136,7 @@ class u {
1136
1136
  /**
1137
1137
  * Default theme colors
1138
1138
  */
1139
- m(u, "colors", {
1139
+ v(p, "colors", {
1140
1140
  primary: "#3B82F6",
1141
1141
  // Modern Blue
1142
1142
  secondary: "#64748B",
@@ -1169,7 +1169,7 @@ m(u, "colors", {
1169
1169
  }), /**
1170
1170
  * Common CSS variables
1171
1171
  */
1172
- m(u, "cssVariables", {
1172
+ v(p, "cssVariables", {
1173
1173
  // "Pro" Palette - Functional & Sharp
1174
1174
  "--fc-primary-color": "#2563EB",
1175
1175
  // International Blue (Focus)
@@ -1237,7 +1237,7 @@ m(u, "cssVariables", {
1237
1237
  }), /**
1238
1238
  * Get responsive breakpoints
1239
1239
  */
1240
- m(u, "breakpoints", {
1240
+ v(p, "breakpoints", {
1241
1241
  xs: "320px",
1242
1242
  sm: "576px",
1243
1243
  md: "768px",
@@ -1245,7 +1245,7 @@ m(u, "breakpoints", {
1245
1245
  xl: "1200px",
1246
1246
  "2xl": "1400px"
1247
1247
  });
1248
- class w {
1248
+ class _ {
1249
1249
  /**
1250
1250
  * @param {HTMLElement} container - The DOM element to render into
1251
1251
  * @param {StateManager} stateManager - The state manager instance
@@ -1284,7 +1284,7 @@ class w {
1284
1284
  * @returns {string}
1285
1285
  */
1286
1286
  escapeHTML(e) {
1287
- return e == null ? "" : x.escapeHTML(String(e));
1287
+ return e == null ? "" : E.escapeHTML(String(e));
1288
1288
  }
1289
1289
  /**
1290
1290
  * Check if a date is today
@@ -1336,8 +1336,8 @@ class w {
1336
1336
  const r = t.length === 3 ? t[0] + t[0] + t[1] + t[1] + t[2] + t[2] : t, i = parseInt(r.substring(0, 2), 16), s = parseInt(r.substring(2, 4), 16), n = parseInt(r.substring(4, 6), 16);
1337
1337
  if (isNaN(i) || isNaN(s) || isNaN(n))
1338
1338
  return "white";
1339
- const o = [i / 255, s / 255, n / 255].map((l) => l <= 0.03928 ? l / 12.92 : Math.pow((l + 0.055) / 1.055, 2.4));
1340
- return 0.2126 * o[0] + 0.7152 * o[1] + 0.0722 * o[2] > 0.179 ? "black" : "white";
1339
+ const a = [i / 255, s / 255, n / 255].map((d) => d <= 0.03928 ? d / 12.92 : Math.pow((d + 0.055) / 1.055, 2.4));
1340
+ return 0.2126 * a[0] + 0.7152 * a[1] + 0.0722 * a[2] > 0.179 ? "black" : "white";
1341
1341
  }
1342
1342
  /**
1343
1343
  * Render the "now" indicator line for time-based views
@@ -1347,20 +1347,64 @@ class w {
1347
1347
  const e = /* @__PURE__ */ new Date();
1348
1348
  return `<div class="fc-now-indicator" style="position: absolute; left: 0; right: 0; top: ${e.getHours() * 60 + e.getMinutes()}px; height: 2px; background: #dc2626; z-index: 15; pointer-events: none;"></div>`;
1349
1349
  }
1350
+ /**
1351
+ * Compute overlap layout columns for a list of timed events.
1352
+ * Returns a Map of event.id -> { column, totalColumns }.
1353
+ * Uses a greedy left-to-right column packing algorithm.
1354
+ * @param {Array} events - Array of event objects with start/end dates
1355
+ * @returns {Map<string, {column: number, totalColumns: number}>}
1356
+ */
1357
+ computeOverlapLayout(e) {
1358
+ if (!e || e.length === 0) return /* @__PURE__ */ new Map();
1359
+ const t = e.map((a) => {
1360
+ const c = new Date(a.start), d = new Date(a.end), h = c.getHours() * 60 + c.getMinutes(), u = Math.max(h + 1, d.getHours() * 60 + d.getMinutes());
1361
+ return { id: a.id, startMin: h, endMin: u };
1362
+ });
1363
+ t.sort((a, c) => a.startMin - c.startMin || c.endMin - c.startMin - (a.endMin - a.startMin));
1364
+ const r = [], i = /* @__PURE__ */ new Map();
1365
+ for (const a of t) {
1366
+ let c = !1;
1367
+ for (let d = 0; d < r.length; d++)
1368
+ if (r[d] <= a.startMin) {
1369
+ r[d] = a.endMin, i.set(a.id, { column: d, totalColumns: 0 }), c = !0;
1370
+ break;
1371
+ }
1372
+ c || (i.set(a.id, { column: r.length, totalColumns: 0 }), r.push(a.endMin));
1373
+ }
1374
+ const s = [];
1375
+ let n = [], o = 0;
1376
+ for (const a of t)
1377
+ n.length === 0 || a.startMin < o ? (n.push(a), o = Math.max(o, a.endMin)) : (s.push(n), n = [a], o = a.endMin);
1378
+ n.length > 0 && s.push(n);
1379
+ for (const a of s) {
1380
+ const c = Math.max(...a.map((d) => i.get(d.id).column)) + 1;
1381
+ for (const d of a)
1382
+ i.get(d.id).totalColumns = c;
1383
+ }
1384
+ return i;
1385
+ }
1350
1386
  /**
1351
1387
  * Render a timed event block
1352
1388
  * @param {Object} event - Event object
1353
1389
  * @param {Object} options - Rendering options
1390
+ * @param {Object} options.compact - Use compact layout
1391
+ * @param {Object} options.overlapLayout - Map from computeOverlapLayout()
1354
1392
  * @returns {string} HTML string
1355
1393
  */
1356
1394
  renderTimedEvent(e, t = {}) {
1357
- const { compact: r = !0 } = t, i = new Date(e.start), s = new Date(e.end), n = i.getHours() * 60 + i.getMinutes(), a = Math.max((s - i) / (1e3 * 60), r ? 20 : 30), o = this.getEventColor(e), c = r ? "4px 8px" : "8px 12px", l = r ? "11px" : "13px", f = r ? "2px" : "12px", p = r ? "2px" : "24px", D = r ? "4px" : "6px";
1395
+ const { compact: r = !0, overlapLayout: i = null } = t, s = new Date(e.start), n = new Date(e.end), o = s.getHours() * 60 + s.getMinutes(), a = Math.max((n - s) / (1e3 * 60), r ? 20 : 30), c = this.getEventColor(e), d = r ? "4px 8px" : "8px 12px", h = r ? "11px" : "13px", u = r ? 2 : 12, b = r ? 2 : 24, y = r ? "4px" : "6px";
1396
+ let x, w;
1397
+ if (i && i.has(e.id)) {
1398
+ const { column: C, totalColumns: $ } = i.get(e.id), M = `(100% - ${u + b}px)`;
1399
+ x = `calc(${u}px + ${C} * ${M} / ${$})`, w = `calc(${M} / ${$})`;
1400
+ } else
1401
+ x = `${u}px`, w = `calc(100% - ${u + b}px)`;
1358
1402
  return `
1359
1403
  <div class="fc-event fc-timed-event" data-event-id="${this.escapeHTML(e.id)}"
1360
- style="position: absolute; top: ${n}px; height: ${a}px;
1361
- left: ${f}; right: ${p};
1362
- background-color: ${o}; border-radius: ${D};
1363
- padding: ${c}; font-size: ${l};
1404
+ style="position: absolute; top: ${o}px; height: ${a}px;
1405
+ left: ${x}; width: ${w};
1406
+ background-color: ${c}; border-radius: ${y};
1407
+ padding: ${d}; font-size: ${h};
1364
1408
  font-weight: 500; color: white; overflow: hidden;
1365
1409
  box-shadow: 0 1px 2px rgba(0,0,0,0.1);
1366
1410
  cursor: pointer; z-index: 5;">
@@ -1368,7 +1412,7 @@ class w {
1368
1412
  ${this.escapeHTML(e.title)}
1369
1413
  </div>
1370
1414
  <div style="font-size: ${r ? "10px" : "11px"}; opacity: 0.9;">
1371
- ${this.formatTime(i)}${r ? "" : " - " + this.formatTime(s)}
1415
+ ${this.formatTime(s)}${r ? "" : " - " + this.formatTime(n)}
1372
1416
  </div>
1373
1417
  </div>
1374
1418
  `;
@@ -1379,7 +1423,7 @@ class w {
1379
1423
  * @returns {string}
1380
1424
  */
1381
1425
  getEventColor(e) {
1382
- return u.sanitizeColor(e == null ? void 0 : e.backgroundColor, "#2563eb");
1426
+ return p.sanitizeColor(e == null ? void 0 : e.backgroundColor, "#2563eb");
1383
1427
  }
1384
1428
  /**
1385
1429
  * Attach common event handlers for day/event clicks
@@ -1394,7 +1438,7 @@ class w {
1394
1438
  });
1395
1439
  }
1396
1440
  }
1397
- class v extends w {
1441
+ class m extends _ {
1398
1442
  constructor(e, t) {
1399
1443
  super(e, t), this.maxEventsToShow = 3;
1400
1444
  }
@@ -1437,7 +1481,7 @@ class v extends w {
1437
1481
  }), t += "</div>", t;
1438
1482
  }
1439
1483
  _renderDay(e) {
1440
- const t = !e.isCurrentMonth, r = e.isToday, i = t ? "#f3f4f6" : "#fff", s = t ? "#9ca3af" : "#111827", n = r ? "background: #2563eb; color: white; border-radius: 50%; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center;" : "", a = e.events || [], o = a.slice(0, this.maxEventsToShow), c = a.length - this.maxEventsToShow;
1484
+ const t = !e.isCurrentMonth, r = e.isToday, i = t ? "#f3f4f6" : "#fff", s = t ? "#9ca3af" : "#111827", n = r ? "background: #2563eb; color: white; border-radius: 50%; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center;" : "", o = e.events || [], a = o.slice(0, this.maxEventsToShow), c = o.length - this.maxEventsToShow;
1441
1485
  return `
1442
1486
  <div class="fc-month-day" data-date="${e.date}"
1443
1487
  style="background: ${i}; border-right: 1px solid #e5e7eb; border-bottom: 1px solid #e5e7eb; padding: 4px; min-height: 80px; cursor: pointer; display: flex; flex-direction: column;">
@@ -1445,7 +1489,7 @@ class v extends w {
1445
1489
  ${e.dayOfMonth}
1446
1490
  </div>
1447
1491
  <div class="fc-day-events" style="display: flex; flex-direction: column; gap: 2px; flex: 1; overflow: hidden;">
1448
- ${o.map((l) => this._renderEvent(l)).join("")}
1492
+ ${a.map((d) => this._renderEvent(d)).join("")}
1449
1493
  ${c > 0 ? `<div class="fc-more-events" style="font-size: 10px; color: #6b7280; padding: 2px 4px; font-weight: 500;">+${c} more</div>` : ""}
1450
1494
  </div>
1451
1495
  </div>
@@ -1469,7 +1513,7 @@ class v extends w {
1469
1513
  }), this.attachCommonEventHandlers();
1470
1514
  }
1471
1515
  }
1472
- class b extends w {
1516
+ class D extends _ {
1473
1517
  constructor(e, t) {
1474
1518
  super(e, t), this.hourHeight = 60, this.totalHeight = 24 * this.hourHeight;
1475
1519
  }
@@ -1485,16 +1529,16 @@ class b extends w {
1485
1529
  this.container.innerHTML = r, this._attachEventHandlers(), this._scrollToCurrentTime();
1486
1530
  }
1487
1531
  _renderWeekView(e, t) {
1488
- const r = e.days, i = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], s = Array.from({ length: 24 }, (a, o) => o), n = r.map((a) => {
1489
- const o = new Date(a.date), c = a.events || [];
1532
+ const r = e.days, i = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], s = Array.from({ length: 24 }, (o, a) => a), n = r.map((o) => {
1533
+ const a = new Date(o.date), c = o.events || [];
1490
1534
  return {
1491
- ...a,
1492
- date: o,
1493
- dayName: i[o.getDay()],
1494
- dayOfMonth: o.getDate(),
1495
- isToday: this.isToday(o),
1496
- timedEvents: c.filter((l) => !l.allDay),
1497
- allDayEvents: c.filter((l) => l.allDay)
1535
+ ...o,
1536
+ date: a,
1537
+ dayName: i[a.getDay()],
1538
+ dayOfMonth: a.getDate(),
1539
+ isToday: this.isToday(a),
1540
+ timedEvents: c.filter((d) => !d.allDay),
1541
+ allDayEvents: c.filter((d) => d.allDay)
1498
1542
  };
1499
1543
  });
1500
1544
  return `
@@ -1580,7 +1624,10 @@ class b extends w {
1580
1624
  ${e.isToday ? this.renderNowIndicator() : ""}
1581
1625
 
1582
1626
  <!-- Timed events -->
1583
- ${e.timedEvents.map((r) => this.renderTimedEvent(r, { compact: !0 })).join("")}
1627
+ ${(() => {
1628
+ const r = this.computeOverlapLayout(e.timedEvents);
1629
+ return e.timedEvents.map((i) => this.renderTimedEvent(i, { compact: !0, overlapLayout: r })).join("");
1630
+ })()}
1584
1631
  </div>
1585
1632
  `;
1586
1633
  }
@@ -1588,12 +1635,10 @@ class b extends w {
1588
1635
  this.addListener(this.container, "click", (e) => {
1589
1636
  const t = e.target.closest(".fc-week-day-column");
1590
1637
  if (!t || !this.container.contains(t) || e.target.closest(".fc-event")) return;
1591
- const r = new Date(t.dataset.date), i = t.getBoundingClientRect();
1592
- this.container.querySelector("#week-scroll-container");
1593
- const s = e.clientY - i.top;
1638
+ const r = new Date(t.dataset.date), i = this.container.querySelector("#week-scroll-container"), s = t.offsetTop, n = e.clientY - t.getBoundingClientRect().top + (i ? i.scrollTop : 0) - s, o = Math.max(0, Math.min(n + s, this.totalHeight));
1594
1639
  r.setHours(
1595
- Math.floor(s / this.hourHeight),
1596
- Math.floor(s % this.hourHeight / (this.hourHeight / 60)),
1640
+ Math.floor(o / this.hourHeight),
1641
+ Math.floor(o % this.hourHeight / (this.hourHeight / 60)),
1597
1642
  0,
1598
1643
  0
1599
1644
  ), this.stateManager.selectDate(r);
@@ -1605,7 +1650,7 @@ class b extends w {
1605
1650
  e && (e.scrollTop = 8 * this.hourHeight - 50, this._scrolled = !0);
1606
1651
  }
1607
1652
  }
1608
- class y extends w {
1653
+ class k extends _ {
1609
1654
  constructor(e, t) {
1610
1655
  super(e, t), this.hourHeight = 60, this.totalHeight = 24 * this.hourHeight;
1611
1656
  }
@@ -1621,40 +1666,40 @@ class y extends w {
1621
1666
  this.container.innerHTML = r, this._attachEventHandlers(), this._scrollToCurrentTime();
1622
1667
  }
1623
1668
  _renderDayView(e, t) {
1624
- var f, p;
1625
- const r = ((p = (f = this.stateManager) == null ? void 0 : f.getState()) == null ? void 0 : p.currentDate) || /* @__PURE__ */ new Date(), i = this._extractDayData(e, r);
1669
+ var h, u;
1670
+ const r = ((u = (h = this.stateManager) == null ? void 0 : h.getState()) == null ? void 0 : u.currentDate) || /* @__PURE__ */ new Date(), i = this._extractDayData(e, r);
1626
1671
  if (!i)
1627
1672
  return '<div style="padding: 20px; text-align: center; color: #666;">No data available for day view.</div>';
1628
- const { dayDate: s, dayName: n, isToday: a, allDayEvents: o, timedEvents: c } = i, l = Array.from({ length: 24 }, (D, E) => E);
1673
+ const { dayDate: s, dayName: n, isToday: o, allDayEvents: a, timedEvents: c } = i, d = Array.from({ length: 24 }, (b, y) => y);
1629
1674
  return `
1630
1675
  <div class="fc-day-view" style="display: flex; flex-direction: column; height: 100%; background: #fff; overflow: hidden;">
1631
- ${this._renderHeader(s, n, a)}
1632
- ${this._renderAllDayRow(o, s)}
1633
- ${this._renderTimeGrid(c, a, s, l)}
1676
+ ${this._renderHeader(s, n, o)}
1677
+ ${this._renderAllDayRow(a, s)}
1678
+ ${this._renderTimeGrid(c, o, s, d)}
1634
1679
  </div>
1635
1680
  `;
1636
1681
  }
1637
1682
  _extractDayData(e, t) {
1638
- let r, i, s, n, a;
1639
- const o = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
1683
+ let r, i, s, n, o;
1684
+ const a = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
1640
1685
  if (e.type === "day" && e.date)
1641
- if (r = new Date(e.date), i = e.dayName || o[r.getDay()], s = e.isToday !== void 0 ? e.isToday : this.isToday(r), n = e.allDayEvents || [], e.hours && Array.isArray(e.hours)) {
1686
+ if (r = new Date(e.date), i = e.dayName || a[r.getDay()], s = e.isToday !== void 0 ? e.isToday : this.isToday(r), n = e.allDayEvents || [], e.hours && Array.isArray(e.hours)) {
1642
1687
  const c = /* @__PURE__ */ new Map();
1643
- e.hours.forEach((l) => {
1644
- (l.events || []).forEach((f) => {
1645
- c.has(f.id) || c.set(f.id, f);
1688
+ e.hours.forEach((d) => {
1689
+ (d.events || []).forEach((h) => {
1690
+ c.has(h.id) || c.set(h.id, h);
1646
1691
  });
1647
- }), a = Array.from(c.values());
1692
+ }), o = Array.from(c.values());
1648
1693
  } else
1649
- a = [];
1694
+ o = [];
1650
1695
  else if (e.days && e.days.length > 0) {
1651
- const c = e.days.find((f) => this.isSameDay(new Date(f.date), t)) || e.days[0];
1652
- r = new Date(c.date), i = o[r.getDay()], s = this.isToday(r);
1653
- const l = c.events || [];
1654
- n = l.filter((f) => f.allDay), a = l.filter((f) => !f.allDay);
1696
+ const c = e.days.find((h) => this.isSameDay(new Date(h.date), t)) || e.days[0];
1697
+ r = new Date(c.date), i = a[r.getDay()], s = this.isToday(r);
1698
+ const d = c.events || [];
1699
+ n = d.filter((h) => h.allDay), o = d.filter((h) => !h.allDay);
1655
1700
  } else
1656
1701
  return null;
1657
- return { dayDate: r, dayName: i, isToday: s, allDayEvents: n, timedEvents: a };
1702
+ return { dayDate: r, dayName: i, isToday: s, allDayEvents: n, timedEvents: o };
1658
1703
  }
1659
1704
  _renderHeader(e, t, r) {
1660
1705
  return `
@@ -1723,7 +1768,10 @@ class y extends w {
1723
1768
  ${t ? this.renderNowIndicator() : ""}
1724
1769
 
1725
1770
  <!-- Timed events -->
1726
- ${e.map((s) => this.renderTimedEvent(s, { compact: !1 })).join("")}
1771
+ ${(() => {
1772
+ const s = this.computeOverlapLayout(e);
1773
+ return e.map((n) => this.renderTimedEvent(n, { compact: !1, overlapLayout: s })).join("");
1774
+ })()}
1727
1775
  </div>
1728
1776
  `;
1729
1777
  }
@@ -1731,12 +1779,10 @@ class y extends w {
1731
1779
  this.addListener(this.container, "click", (e) => {
1732
1780
  const t = e.target.closest(".fc-day-column");
1733
1781
  if (!t || !this.container.contains(t) || e.target.closest(".fc-event")) return;
1734
- const r = new Date(t.dataset.date), i = t.getBoundingClientRect();
1735
- this.container.querySelector("#day-scroll-container");
1736
- const s = e.clientY - i.top;
1782
+ const r = new Date(t.dataset.date), i = this.container.querySelector("#day-scroll-container"), s = t.offsetTop, n = e.clientY - t.getBoundingClientRect().top + (i ? i.scrollTop : 0) - s, o = Math.max(0, Math.min(n + s, this.totalHeight));
1737
1783
  r.setHours(
1738
- Math.floor(s / this.hourHeight),
1739
- Math.floor(s % this.hourHeight / (this.hourHeight / 60)),
1784
+ Math.floor(o / this.hourHeight),
1785
+ Math.floor(o % this.hourHeight / (this.hourHeight / 60)),
1740
1786
  0,
1741
1787
  0
1742
1788
  ), this.stateManager.selectDate(r);
@@ -1748,7 +1794,7 @@ class y extends w {
1748
1794
  e && (e.scrollTop = 8 * this.hourHeight - 50, this._scrolled = !0);
1749
1795
  }
1750
1796
  }
1751
- class F extends k {
1797
+ class z extends T {
1752
1798
  constructor() {
1753
1799
  super(), this._isVisible = !1, this._cleanupFocusTrap = null, this.config = {
1754
1800
  title: "New Event",
@@ -1778,8 +1824,8 @@ class F extends k {
1778
1824
  }
1779
1825
  getStyles() {
1780
1826
  return `
1781
- ${u.getBaseStyles()}
1782
- ${u.getButtonStyles()}
1827
+ ${p.getBaseStyles()}
1828
+ ${p.getButtonStyles()}
1783
1829
 
1784
1830
  :host {
1785
1831
  display: none;
@@ -2024,7 +2070,7 @@ class F extends k {
2024
2070
  });
2025
2071
  }
2026
2072
  open(e = /* @__PURE__ */ new Date()) {
2027
- this.hasAttribute("open") || this.setAttribute("open", ""), this.titleGroup.classList.remove("has-error"), this.endGroup.classList.remove("has-error"), this._formData.start = e, this._formData.end = new Date(e.getTime() + this.config.defaultDuration * 60 * 1e3), this._formData.title = "", this._formData.color = this.config.colors[0].color, this.startInput && (this.titleInput.value = "", this.startInput.value = this.formatDateForInput(this._formData.start), this.endInput.value = this.formatDateForInput(this._formData.end), this.updateColorSelection(), this._cleanupFocusTrap && this._cleanupFocusTrap(), this._cleanupFocusTrap = x.trapFocus(this.modalContent));
2073
+ this.hasAttribute("open") || this.setAttribute("open", ""), this.titleGroup.classList.remove("has-error"), this.endGroup.classList.remove("has-error"), this._formData.start = e, this._formData.end = new Date(e.getTime() + this.config.defaultDuration * 60 * 1e3), this._formData.title = "", this._formData.color = this.config.colors[0].color, this.startInput && (this.titleInput.value = "", this.startInput.value = this.formatDateForInput(this._formData.start), this.endInput.value = this.formatDateForInput(this._formData.end), this.updateColorSelection(), this._cleanupFocusTrap && this._cleanupFocusTrap(), this._cleanupFocusTrap = E.trapFocus(this.modalContent));
2028
2074
  }
2029
2075
  close() {
2030
2076
  this.removeAttribute("open"), this._cleanupFocusTrap && (this._cleanupFocusTrap(), this._cleanupFocusTrap = null);
@@ -2046,15 +2092,15 @@ class F extends k {
2046
2092
  this.emit("save", e), this.close();
2047
2093
  }
2048
2094
  formatDateForInput(e) {
2049
- const t = (o) => String(o).padStart(2, "0"), r = e.getFullYear(), i = t(e.getMonth() + 1), s = t(e.getDate()), n = t(e.getHours()), a = t(e.getMinutes());
2050
- return `${r}-${i}-${s}T${n}:${a}`;
2095
+ const t = (a) => String(a).padStart(2, "0"), r = e.getFullYear(), i = t(e.getMonth() + 1), s = t(e.getDate()), n = t(e.getHours()), o = t(e.getMinutes());
2096
+ return `${r}-${i}-${s}T${n}:${o}`;
2051
2097
  }
2052
2098
  unmount() {
2053
2099
  this._cleanupFocusTrap && this._cleanupFocusTrap(), this._handleKeyDown && (window.removeEventListener("keydown", this._handleKeyDown), this._handleKeyDown = null, this._keydownListenerAdded = !1);
2054
2100
  }
2055
2101
  }
2056
- customElements.get("forcecal-event-form") || customElements.define("forcecal-event-form", F);
2057
- class H extends k {
2102
+ customElements.get("forcecal-event-form") || customElements.define("forcecal-event-form", z);
2103
+ class A extends T {
2058
2104
  static get observedAttributes() {
2059
2105
  return ["view", "date", "locale", "timezone", "week-starts-on", "height"];
2060
2106
  }
@@ -2069,15 +2115,15 @@ class H extends k {
2069
2115
  timeZone: this.getAttribute("timezone") || Intl.DateTimeFormat().resolvedOptions().timeZone,
2070
2116
  weekStartsOn: parseInt(this.getAttribute("week-starts-on") || "0")
2071
2117
  };
2072
- this.stateManager = new C(e), this.stateManager.subscribe(this.handleStateChange.bind(this)), this.setupEventListeners();
2118
+ this.stateManager = new I(e), this.stateManager.subscribe(this.handleStateChange.bind(this)), this.setupEventListeners();
2073
2119
  }
2074
2120
  setupEventListeners() {
2075
2121
  this._busUnsubscribers.forEach((t) => t()), this._busUnsubscribers = [], this._busUnsubscribers.push(
2076
- d.on("navigation:*", (t, r) => {
2122
+ l.on("navigation:*", (t, r) => {
2077
2123
  this.emit("calendar-navigate", { action: r.split(":")[1], ...t });
2078
2124
  })
2079
2125
  ), this._busUnsubscribers.push(
2080
- d.on("view:changed", (t) => {
2126
+ l.on("view:changed", (t) => {
2081
2127
  this.emit("calendar-view-change", t);
2082
2128
  })
2083
2129
  );
@@ -2085,40 +2131,40 @@ class H extends k {
2085
2131
  this.emit(`calendar-event-${t}`, r);
2086
2132
  };
2087
2133
  this._busUnsubscribers.push(
2088
- d.on("event:add", (t) => {
2134
+ l.on("event:add", (t) => {
2089
2135
  e("add", t);
2090
2136
  })
2091
2137
  ), this._busUnsubscribers.push(
2092
- d.on("event:update", (t) => {
2138
+ l.on("event:update", (t) => {
2093
2139
  e("update", t);
2094
2140
  })
2095
2141
  ), this._busUnsubscribers.push(
2096
- d.on("event:remove", (t) => {
2142
+ l.on("event:remove", (t) => {
2097
2143
  e("remove", t);
2098
2144
  })
2099
2145
  ), this._busUnsubscribers.push(
2100
- d.on("event:added", (t) => {
2146
+ l.on("event:added", (t) => {
2101
2147
  this.emit("calendar-event-added", t);
2102
2148
  })
2103
2149
  ), this._busUnsubscribers.push(
2104
- d.on("event:updated", (t) => {
2150
+ l.on("event:updated", (t) => {
2105
2151
  this.emit("calendar-event-updated", t);
2106
2152
  })
2107
2153
  ), this._busUnsubscribers.push(
2108
- d.on("event:deleted", (t) => {
2154
+ l.on("event:deleted", (t) => {
2109
2155
  this.emit("calendar-event-deleted", t);
2110
2156
  })
2111
2157
  ), this._busUnsubscribers.push(
2112
- d.on("date:selected", (t) => {
2158
+ l.on("date:selected", (t) => {
2113
2159
  this.emit("calendar-date-select", t);
2114
2160
  })
2115
2161
  );
2116
2162
  }
2117
2163
  handleStateChange(e, t) {
2118
- var o, c;
2164
+ var a, c;
2119
2165
  if (!this._hasRendered)
2120
2166
  return;
2121
- const r = e.view !== (t == null ? void 0 : t.view), i = ((o = e.currentDate) == null ? void 0 : o.getTime()) !== ((c = t == null ? void 0 : t.currentDate) == null ? void 0 : c.getTime()), s = e.events !== (t == null ? void 0 : t.events), n = e.loading !== (t == null ? void 0 : t.loading);
2167
+ const r = e.view !== (t == null ? void 0 : t.view), i = ((a = e.currentDate) == null ? void 0 : a.getTime()) !== ((c = t == null ? void 0 : t.currentDate) == null ? void 0 : c.getTime()), s = e.events !== (t == null ? void 0 : t.events), n = e.loading !== (t == null ? void 0 : t.loading);
2122
2168
  if (e.error !== (t == null ? void 0 : t.error)) {
2123
2169
  this.render();
2124
2170
  return;
@@ -2158,10 +2204,10 @@ class H extends k {
2158
2204
  this._currentViewInstance && this._currentViewInstance.cleanup && this._currentViewInstance.cleanup();
2159
2205
  try {
2160
2206
  const r = {
2161
- month: v,
2162
- week: b,
2163
- day: y
2164
- }[this.currentView] || v, i = new r(e, this.stateManager);
2207
+ month: m,
2208
+ week: D,
2209
+ day: k
2210
+ }[this.currentView] || m, i = new r(e, this.stateManager);
2165
2211
  i._viewType = this.currentView, this._currentViewInstance = i, i.render();
2166
2212
  } catch (t) {
2167
2213
  console.error("[ForceCalendar] Error switching view:", t);
@@ -2190,10 +2236,10 @@ class H extends k {
2190
2236
  getStyles() {
2191
2237
  const e = this.getAttribute("height") || "800px";
2192
2238
  return `
2193
- ${u.getBaseStyles()}
2194
- ${u.getButtonStyles()}
2195
- ${u.getGridStyles()}
2196
- ${u.getAnimations()}
2239
+ ${p.getBaseStyles()}
2240
+ ${p.getButtonStyles()}
2241
+ ${p.getGridStyles()}
2242
+ ${p.getAnimations()}
2197
2243
 
2198
2244
  :host {
2199
2245
  --calendar-height: ${e};
@@ -2582,7 +2628,7 @@ class H extends k {
2582
2628
  return `
2583
2629
  <div class="force-calendar">
2584
2630
  <div class="fc-error">
2585
- <p><strong>Error:</strong> ${x.escapeHTML(s.message || "An error occurred")}</p>
2631
+ <p><strong>Error:</strong> ${E.escapeHTML(s.message || "An error occurred")}</p>
2586
2632
  </div>
2587
2633
  </div>
2588
2634
  `;
@@ -2646,10 +2692,10 @@ class H extends k {
2646
2692
  this._currentViewInstance && (this._currentViewInstance.cleanup && this._currentViewInstance.cleanup(), this._viewUnsubscribe && (this._viewUnsubscribe(), this._viewUnsubscribe = null));
2647
2693
  try {
2648
2694
  const s = {
2649
- month: v,
2650
- week: b,
2651
- day: y
2652
- }[this.currentView] || v, n = new s(e, this.stateManager);
2695
+ month: m,
2696
+ week: D,
2697
+ day: k
2698
+ }[this.currentView] || m, n = new s(e, this.stateManager);
2653
2699
  n._viewType = this.currentView, this._currentViewInstance = n, n.render();
2654
2700
  } catch (i) {
2655
2701
  console.error("[ForceCalendar] Error creating/rendering view:", i);
@@ -2681,10 +2727,10 @@ class H extends k {
2681
2727
  */
2682
2728
  _createViewRenderer(e) {
2683
2729
  const r = {
2684
- month: v,
2685
- week: b,
2686
- day: y
2687
- }[e] || v;
2730
+ month: m,
2731
+ week: D,
2732
+ day: k
2733
+ }[e] || m;
2688
2734
  return new r(null, null);
2689
2735
  }
2690
2736
  handleNavigation(e) {
@@ -2770,19 +2816,19 @@ class H extends k {
2770
2816
  this._busUnsubscribers.forEach((e) => e()), this._busUnsubscribers = [], this.stateManager && this.stateManager.destroy(), super.cleanup();
2771
2817
  }
2772
2818
  }
2773
- customElements.get("forcecal-main") || customElements.define("forcecal-main", H);
2819
+ customElements.get("forcecal-main") || customElements.define("forcecal-main", A);
2774
2820
  export {
2775
- k as BaseComponent,
2776
- w as BaseViewRenderer,
2777
- x as DOMUtils,
2821
+ T as BaseComponent,
2822
+ _ as BaseViewRenderer,
2823
+ E as DOMUtils,
2778
2824
  g as DateUtils,
2779
- y as DayViewRenderer,
2780
- S as EventBus,
2781
- H as ForceCalendar,
2782
- v as MonthViewRenderer,
2783
- C as StateManager,
2784
- u as StyleUtils,
2785
- b as WeekViewRenderer,
2786
- d as eventBus
2825
+ k as DayViewRenderer,
2826
+ V as EventBus,
2827
+ A as ForceCalendar,
2828
+ m as MonthViewRenderer,
2829
+ I as StateManager,
2830
+ p as StyleUtils,
2831
+ D as WeekViewRenderer,
2832
+ l as eventBus
2787
2833
  };
2788
2834
  //# sourceMappingURL=force-calendar-interface.esm.js.map