@ngxsmk/cdk 1.3.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/cva-base/cva-base.d.ts +34 -0
  2. package/cva-base/cva-base.d.ts.map +1 -0
  3. package/cva-base/index.d.ts +2 -0
  4. package/cva-base/index.d.ts.map +1 -0
  5. package/cva-base/ngxsmk-cdk-cva-base.d.ts.map +1 -0
  6. package/esm2022/cva-base/cva-base.mjs +45 -0
  7. package/esm2022/cva-base/index.mjs +2 -0
  8. package/esm2022/cva-base/ngxsmk-cdk-cva-base.mjs +5 -0
  9. package/esm2022/input-group/index.mjs +3 -0
  10. package/esm2022/input-group/input-group-engine.mjs +219 -0
  11. package/esm2022/input-group/models/index.mjs +2 -0
  12. package/esm2022/input-group/models/input-group.model.mjs +2 -0
  13. package/esm2022/input-group/ngxsmk-cdk-input-group.mjs +5 -0
  14. package/esm2022/listbox-keyboard/index.mjs +2 -0
  15. package/esm2022/listbox-keyboard/listbox-keyboard.mjs +145 -0
  16. package/esm2022/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.mjs +5 -0
  17. package/esm2022/public-api.mjs +10 -1
  18. package/esm2022/scheduler/index.mjs +5 -0
  19. package/esm2022/scheduler/models/date-range.mjs +2 -0
  20. package/esm2022/scheduler/models/event.model.mjs +2 -0
  21. package/esm2022/scheduler/models/index.mjs +6 -0
  22. package/esm2022/scheduler/models/resource.model.mjs +5 -0
  23. package/esm2022/scheduler/models/selection.model.mjs +7 -0
  24. package/esm2022/scheduler/models/view.model.mjs +7 -0
  25. package/esm2022/scheduler/ngxsmk-cdk-scheduler.mjs +5 -0
  26. package/esm2022/scheduler/plugin/drag-plugin.mjs +82 -0
  27. package/esm2022/scheduler/plugin/index.mjs +8 -0
  28. package/esm2022/scheduler/plugin/keyboard-plugin.mjs +150 -0
  29. package/esm2022/scheduler/plugin/plugin-host.mjs +48 -0
  30. package/esm2022/scheduler/plugin/plugin.types.mjs +2 -0
  31. package/esm2022/scheduler/plugin/resize-plugin.mjs +74 -0
  32. package/esm2022/scheduler/plugin/selection-plugin.mjs +84 -0
  33. package/esm2022/scheduler/plugin/tooltip-plugin.mjs +103 -0
  34. package/esm2022/scheduler/scheduler-engine.mjs +316 -0
  35. package/esm2022/scheduler/utils/date-utils.mjs +131 -0
  36. package/esm2022/scheduler/utils/index.mjs +3 -0
  37. package/esm2022/scheduler/utils/snap.mjs +24 -0
  38. package/esm2022/spreadsheet/index.mjs +5 -0
  39. package/esm2022/spreadsheet/models/cell.model.mjs +2 -0
  40. package/esm2022/spreadsheet/models/column.model.mjs +2 -0
  41. package/esm2022/spreadsheet/models/filter.model.mjs +2 -0
  42. package/esm2022/spreadsheet/models/formula.model.mjs +2 -0
  43. package/esm2022/spreadsheet/models/index.mjs +8 -0
  44. package/esm2022/spreadsheet/models/row.model.mjs +2 -0
  45. package/esm2022/spreadsheet/models/selection.model.mjs +2 -0
  46. package/esm2022/spreadsheet/models/sort.model.mjs +2 -0
  47. package/esm2022/spreadsheet/ngxsmk-cdk-spreadsheet.mjs +5 -0
  48. package/esm2022/spreadsheet/plugin/clipboard-plugin.mjs +171 -0
  49. package/esm2022/spreadsheet/plugin/filter-plugin.mjs +87 -0
  50. package/esm2022/spreadsheet/plugin/formula-plugin.mjs +456 -0
  51. package/esm2022/spreadsheet/plugin/index.mjs +10 -0
  52. package/esm2022/spreadsheet/plugin/plugin-host.mjs +188 -0
  53. package/esm2022/spreadsheet/plugin/plugin.types.mjs +2 -0
  54. package/esm2022/spreadsheet/plugin/selection-plugin.mjs +114 -0
  55. package/esm2022/spreadsheet/plugin/sort-plugin.mjs +63 -0
  56. package/esm2022/spreadsheet/plugin/undo-plugin.mjs +138 -0
  57. package/esm2022/spreadsheet/plugin/validation-plugin.mjs +71 -0
  58. package/esm2022/spreadsheet/spreadsheet-engine.mjs +547 -0
  59. package/esm2022/spreadsheet/utils/cell-utils.mjs +129 -0
  60. package/esm2022/spreadsheet/utils/index.mjs +2 -0
  61. package/fesm2022/ngxsmk-cdk-cva-base.mjs +52 -0
  62. package/fesm2022/ngxsmk-cdk-cva-base.mjs.map +1 -0
  63. package/fesm2022/ngxsmk-cdk-input-group.mjs +226 -0
  64. package/fesm2022/ngxsmk-cdk-input-group.mjs.map +1 -0
  65. package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs +152 -0
  66. package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs.map +1 -0
  67. package/fesm2022/ngxsmk-cdk-scheduler.mjs +1035 -0
  68. package/fesm2022/ngxsmk-cdk-scheduler.mjs.map +1 -0
  69. package/fesm2022/ngxsmk-cdk-spreadsheet.mjs +1969 -0
  70. package/fesm2022/ngxsmk-cdk-spreadsheet.mjs.map +1 -0
  71. package/fesm2022/ngxsmk-cdk.mjs +5 -0
  72. package/fesm2022/ngxsmk-cdk.mjs.map +1 -1
  73. package/input-group/index.d.ts +3 -0
  74. package/input-group/index.d.ts.map +1 -0
  75. package/input-group/input-group-engine.d.ts +88 -0
  76. package/input-group/input-group-engine.d.ts.map +1 -0
  77. package/input-group/models/index.d.ts +2 -0
  78. package/input-group/models/index.d.ts.map +1 -0
  79. package/input-group/models/input-group.model.d.ts +114 -0
  80. package/input-group/models/input-group.model.d.ts.map +1 -0
  81. package/input-group/ngxsmk-cdk-input-group.d.ts.map +1 -0
  82. package/listbox-keyboard/index.d.ts +2 -0
  83. package/listbox-keyboard/index.d.ts.map +1 -0
  84. package/listbox-keyboard/listbox-keyboard.d.ts +60 -0
  85. package/listbox-keyboard/listbox-keyboard.d.ts.map +1 -0
  86. package/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.d.ts.map +1 -0
  87. package/package.json +41 -11
  88. package/public-api.d.ts +8 -0
  89. package/public-api.d.ts.map +1 -1
  90. package/scheduler/index.d.ts +5 -0
  91. package/scheduler/index.d.ts.map +1 -0
  92. package/scheduler/models/date-range.d.ts +6 -0
  93. package/scheduler/models/date-range.d.ts.map +1 -0
  94. package/scheduler/models/event.model.d.ts +50 -0
  95. package/scheduler/models/event.model.d.ts.map +1 -0
  96. package/scheduler/models/index.d.ts +6 -0
  97. package/scheduler/models/index.d.ts.map +1 -0
  98. package/scheduler/models/resource.model.d.ts +16 -0
  99. package/scheduler/models/resource.model.d.ts.map +1 -0
  100. package/scheduler/models/selection.model.d.ts +12 -0
  101. package/scheduler/models/selection.model.d.ts.map +1 -0
  102. package/scheduler/models/view.model.d.ts +21 -0
  103. package/scheduler/models/view.model.d.ts.map +1 -0
  104. package/scheduler/ngxsmk-cdk-scheduler.d.ts.map +1 -0
  105. package/scheduler/plugin/drag-plugin.d.ts +28 -0
  106. package/scheduler/plugin/drag-plugin.d.ts.map +1 -0
  107. package/scheduler/plugin/index.d.ts +8 -0
  108. package/scheduler/plugin/index.d.ts.map +1 -0
  109. package/scheduler/plugin/keyboard-plugin.d.ts +24 -0
  110. package/scheduler/plugin/keyboard-plugin.d.ts.map +1 -0
  111. package/scheduler/plugin/plugin-host.d.ts +16 -0
  112. package/scheduler/plugin/plugin-host.d.ts.map +1 -0
  113. package/scheduler/plugin/plugin.types.d.ts +9 -0
  114. package/scheduler/plugin/plugin.types.d.ts.map +1 -0
  115. package/scheduler/plugin/resize-plugin.d.ts +26 -0
  116. package/scheduler/plugin/resize-plugin.d.ts.map +1 -0
  117. package/scheduler/plugin/selection-plugin.d.ts +40 -0
  118. package/scheduler/plugin/selection-plugin.d.ts.map +1 -0
  119. package/scheduler/plugin/tooltip-plugin.d.ts +41 -0
  120. package/scheduler/plugin/tooltip-plugin.d.ts.map +1 -0
  121. package/scheduler/scheduler-engine.d.ts +95 -0
  122. package/scheduler/scheduler-engine.d.ts.map +1 -0
  123. package/scheduler/utils/date-utils.d.ts +26 -0
  124. package/scheduler/utils/date-utils.d.ts.map +1 -0
  125. package/scheduler/utils/index.d.ts +3 -0
  126. package/scheduler/utils/index.d.ts.map +1 -0
  127. package/scheduler/utils/snap.d.ts +7 -0
  128. package/scheduler/utils/snap.d.ts.map +1 -0
  129. package/spreadsheet/index.d.ts +5 -0
  130. package/spreadsheet/index.d.ts.map +1 -0
  131. package/spreadsheet/models/cell.model.d.ts +44 -0
  132. package/spreadsheet/models/cell.model.d.ts.map +1 -0
  133. package/spreadsheet/models/column.model.d.ts +77 -0
  134. package/spreadsheet/models/column.model.d.ts.map +1 -0
  135. package/spreadsheet/models/filter.model.d.ts +15 -0
  136. package/spreadsheet/models/filter.model.d.ts.map +1 -0
  137. package/spreadsheet/models/formula.model.d.ts +65 -0
  138. package/spreadsheet/models/formula.model.d.ts.map +1 -0
  139. package/spreadsheet/models/index.d.ts +8 -0
  140. package/spreadsheet/models/index.d.ts.map +1 -0
  141. package/spreadsheet/models/row.model.d.ts +33 -0
  142. package/spreadsheet/models/row.model.d.ts.map +1 -0
  143. package/spreadsheet/models/selection.model.d.ts +18 -0
  144. package/spreadsheet/models/selection.model.d.ts.map +1 -0
  145. package/spreadsheet/models/sort.model.d.ts +14 -0
  146. package/spreadsheet/models/sort.model.d.ts.map +1 -0
  147. package/spreadsheet/ngxsmk-cdk-spreadsheet.d.ts.map +1 -0
  148. package/spreadsheet/plugin/clipboard-plugin.d.ts +24 -0
  149. package/spreadsheet/plugin/clipboard-plugin.d.ts.map +1 -0
  150. package/spreadsheet/plugin/filter-plugin.d.ts +21 -0
  151. package/spreadsheet/plugin/filter-plugin.d.ts.map +1 -0
  152. package/spreadsheet/plugin/formula-plugin.d.ts +39 -0
  153. package/spreadsheet/plugin/formula-plugin.d.ts.map +1 -0
  154. package/spreadsheet/plugin/index.d.ts +10 -0
  155. package/spreadsheet/plugin/index.d.ts.map +1 -0
  156. package/spreadsheet/plugin/plugin-host.d.ts +66 -0
  157. package/spreadsheet/plugin/plugin-host.d.ts.map +1 -0
  158. package/spreadsheet/plugin/plugin.types.d.ts +58 -0
  159. package/spreadsheet/plugin/plugin.types.d.ts.map +1 -0
  160. package/spreadsheet/plugin/selection-plugin.d.ts +28 -0
  161. package/spreadsheet/plugin/selection-plugin.d.ts.map +1 -0
  162. package/spreadsheet/plugin/sort-plugin.d.ts +18 -0
  163. package/spreadsheet/plugin/sort-plugin.d.ts.map +1 -0
  164. package/spreadsheet/plugin/undo-plugin.d.ts +40 -0
  165. package/spreadsheet/plugin/undo-plugin.d.ts.map +1 -0
  166. package/spreadsheet/plugin/validation-plugin.d.ts +29 -0
  167. package/spreadsheet/plugin/validation-plugin.d.ts.map +1 -0
  168. package/spreadsheet/spreadsheet-engine.d.ts +194 -0
  169. package/spreadsheet/spreadsheet-engine.d.ts.map +1 -0
  170. package/spreadsheet/utils/cell-utils.d.ts +26 -0
  171. package/spreadsheet/utils/cell-utils.d.ts.map +1 -0
  172. package/spreadsheet/utils/index.d.ts +2 -0
  173. package/spreadsheet/utils/index.d.ts.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngxsmk-cdk-scheduler.mjs","sources":["../../../../packages/cdk/scheduler/utils/date-utils.ts","../../../../packages/cdk/scheduler/scheduler-engine.ts","../../../../packages/cdk/scheduler/models/resource.model.ts","../../../../packages/cdk/scheduler/models/view.model.ts","../../../../packages/cdk/scheduler/models/selection.model.ts","../../../../packages/cdk/scheduler/plugin/plugin-host.ts","../../../../packages/cdk/scheduler/plugin/drag-plugin.ts","../../../../packages/cdk/scheduler/plugin/resize-plugin.ts","../../../../packages/cdk/scheduler/plugin/selection-plugin.ts","../../../../packages/cdk/scheduler/plugin/tooltip-plugin.ts","../../../../packages/cdk/scheduler/plugin/keyboard-plugin.ts","../../../../packages/cdk/scheduler/utils/snap.ts","../../../../packages/cdk/scheduler/ngxsmk-cdk-scheduler.ts"],"sourcesContent":["export function startOfDay(date: Date): Date {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return d;\n}\n\nexport function startOfWeek(date: Date, firstDayOfWeek: number): Date {\n const d = startOfDay(date);\n const day = d.getDay();\n const diff = (day - firstDayOfWeek + 7) % 7;\n d.setDate(d.getDate() - diff);\n return d;\n}\n\nexport function endOfWeek(date: Date, firstDayOfWeek: number): Date {\n const start = startOfWeek(date, firstDayOfWeek);\n const end = new Date(start);\n end.setDate(end.getDate() + 7);\n end.setMilliseconds(-1);\n return end;\n}\n\nexport function startOfMonth(date: Date): Date {\n const d = new Date(date.getFullYear(), date.getMonth(), 1);\n d.setHours(0, 0, 0, 0);\n return d;\n}\n\nexport function endOfMonth(date: Date): Date {\n const d = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n d.setHours(23, 59, 59, 999);\n return d;\n}\n\nexport function addDays(date: Date, days: number): Date {\n const d = new Date(date);\n d.setDate(d.getDate() + days);\n return d;\n}\n\nexport function addMinutes(date: Date, minutes: number): Date {\n return new Date(date.getTime() + minutes * 60_000);\n}\n\nexport function addWeeks(date: Date, weeks: number): Date {\n return addDays(date, weeks * 7);\n}\n\nexport function diffMinutes(start: Date, end: Date): number {\n return (end.getTime() - start.getTime()) / 60_000;\n}\n\nexport function diffDays(start: Date, end: Date): number {\n const s = startOfDay(start);\n const e = startOfDay(end);\n return Math.round((e.getTime() - s.getTime()) / 86_400_000);\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function isSameWeek(a: Date, b: Date, firstDayOfWeek: number): boolean {\n return isSameDay(startOfWeek(a, firstDayOfWeek), startOfWeek(b, firstDayOfWeek));\n}\n\nexport function isToday(date: Date): boolean {\n return isSameDay(date, new Date());\n}\n\nexport function isWeekend(date: Date): boolean {\n const day = date.getDay();\n return day === 0 || day === 6;\n}\n\nexport function isPast(date: Date): boolean {\n return date.getTime() < Date.now();\n}\n\nexport function dateRangeOverlaps(aStart: Date, aEnd: Date, bStart: Date, bEnd: Date): boolean {\n return aStart.getTime() < bEnd.getTime() && aEnd.getTime() > bStart.getTime();\n}\n\nexport function clampDate(date: Date, min: Date, max: Date): Date {\n const t = date.getTime();\n if (t < min.getTime()) return new Date(min);\n if (t > max.getTime()) return new Date(max);\n return new Date(date);\n}\n\nexport function getHoursInRange(start: Date, end: Date): number[] {\n const hours: number[] = [];\n const d = new Date(start);\n while (d < end) {\n hours.push(d.getHours());\n d.setHours(d.getHours() + 1, 0, 0, 0);\n }\n return hours;\n}\n\nexport function formatHour(h: number, locale = 'en-US'): string {\n const d = new Date();\n d.setHours(h, 0, 0, 0);\n return d.toLocaleTimeString(locale, { hour: 'numeric', minute: undefined });\n}\n\nexport function formatDateRange(start: Date, end: Date, locale = 'en-US'): string {\n const opts: Intl.DateTimeFormatOptions = { month: 'short', day: 'numeric' };\n const yearOpts: Intl.DateTimeFormatOptions = { month: 'short', day: 'numeric', year: 'numeric' };\n const sameYear = start.getFullYear() === end.getFullYear();\n const fmt = new Intl.DateTimeFormat(locale, sameYear ? opts : yearOpts);\n return `${fmt.format(start)} – ${fmt.format(end)}${sameYear ? `, ${start.getFullYear()}` : ''}`;\n}\n\nexport function getWeekDates(date: Date, firstDayOfWeek: number): Date[] {\n const start = startOfWeek(date, firstDayOfWeek);\n return Array.from({ length: 7 }, (_, i) => addDays(start, i));\n}\n\nexport function getWorkWeekDates(date: Date, firstDayOfWeek: number): Date[] {\n const weekDates = getWeekDates(date, firstDayOfWeek);\n return weekDates.filter((d) => !isWeekend(d));\n}\n\nexport function getMonthGrid(date: Date, firstDayOfWeek: number): Date[][] {\n const monthStart = startOfMonth(date);\n const gridStart = startOfWeek(monthStart, firstDayOfWeek);\n const gridEnd = addDays(gridStart, 42);\n const weeks: Date[][] = [];\n let current = new Date(gridStart);\n while (current < gridEnd) {\n weeks.push(Array.from({ length: 7 }, (_, i) => addDays(current, i)));\n current = addDays(current, 7);\n }\n return weeks;\n}\n\nexport function getDayNames(\n locale = 'en-US',\n format: 'long' | 'short' | 'narrow' = 'short',\n): string[] {\n return Array.from({ length: 7 }, (_, i) => {\n const d = new Date(2026, 0, 4 + i);\n return d.toLocaleDateString(locale, { weekday: format });\n });\n}\n\nexport function getMonthNames(locale = 'en-US', format: 'long' | 'short' = 'long'): string[] {\n return Array.from({ length: 12 }, (_, i) => {\n const d = new Date(2026, i, 1);\n return d.toLocaleDateString(locale, { month: format });\n });\n}\n","import { computed, signal, type WritableSignal, type Signal } from '@angular/core';\nimport type {\n SchedulerEvent,\n SchedulerResource,\n SchedulerMove,\n SchedulerResize,\n ViewState,\n ViewType,\n SelectionState,\n WorkingHours,\n Density,\n} from './models';\nimport type { SchedulerPlugin } from './plugin/plugin.types';\nimport {\n startOfDay,\n startOfWeek,\n endOfWeek,\n startOfMonth,\n endOfMonth,\n addDays,\n diffMinutes,\n isSameDay,\n dateRangeOverlaps,\n} from './utils/date-utils';\n\nexport interface SchedulerConfig {\n defaultView?: ViewType;\n slotDuration?: number;\n snapDuration?: number;\n firstDayOfWeek?: number;\n locale?: string;\n rtl?: boolean;\n density?: Density;\n showAllDay?: boolean;\n showWeekends?: boolean;\n showCurrentTime?: boolean;\n businessHours?: WorkingHours;\n visibleHours?: [number, number];\n plugins?: SchedulerPlugin[];\n maxEventsPerCell?: number;\n}\n\nexport interface LifecycleHooks {\n beforeRender: Signal<(state: ViewState) => void>;\n afterRender: Signal<(state: ViewState) => void>;\n beforeCreate: Signal<(event: SchedulerEvent) => boolean>;\n afterCreate: Signal<(event: SchedulerEvent) => void>;\n beforeUpdate: Signal<(event: SchedulerEvent) => boolean>;\n afterUpdate: Signal<(event: SchedulerEvent) => void>;\n beforeDelete: Signal<(event: SchedulerEvent) => boolean>;\n afterDelete: Signal<(event: SchedulerEvent) => void>;\n beforeDrag: Signal<(event: SchedulerEvent) => boolean>;\n afterDrag: Signal<(move: SchedulerMove) => void>;\n beforeResize: Signal<(event: SchedulerEvent) => boolean>;\n afterResize: Signal<(resize: SchedulerResize) => void>;\n}\n\nconst HOUR_HEIGHT_MAP: Record<Density, number> = {\n compact: 48,\n comfortable: 60,\n dense: 36,\n};\n\nfunction computeRange(\n type: ViewType,\n date: Date,\n firstDayOfWeek: number,\n): { start: Date; end: Date } {\n switch (type) {\n case 'timeGridDay':\n case 'dayGridDay':\n case 'agenda':\n return { start: startOfDay(date), end: addDays(startOfDay(date), 1) };\n case 'timeGridWeek':\n case 'dayGridWeek':\n return { start: startOfWeek(date, firstDayOfWeek), end: endOfWeek(date, firstDayOfWeek) };\n case 'timeGridWorkWeek': {\n const weekStart = startOfWeek(date, firstDayOfWeek);\n return { start: addDays(weekStart, 1), end: addDays(weekStart, 5) };\n }\n case 'timeGrid3Day':\n return { start: startOfDay(date), end: addDays(startOfDay(date), 3) };\n case 'dayGridMonth':\n return { start: startOfMonth(date), end: endOfMonth(date) };\n case 'timeline':\n return { start: startOfWeek(date, firstDayOfWeek), end: endOfWeek(date, firstDayOfWeek) };\n default:\n return { start: startOfWeek(date, firstDayOfWeek), end: endOfWeek(date, firstDayOfWeek) };\n }\n}\n\nexport class SchedulerEngine {\n readonly events: WritableSignal<SchedulerEvent[]>;\n readonly resources: WritableSignal<SchedulerResource[]>;\n readonly viewState: WritableSignal<ViewState>;\n readonly selection: WritableSignal<SelectionState>;\n readonly plugins: WritableSignal<SchedulerPlugin[]>;\n readonly now = signal(new Date());\n\n readonly hourHeight: Signal<number>;\n\n readonly visibleEvents: Signal<SchedulerEvent[]>;\n readonly allDayEvents: Signal<SchedulerEvent[]>;\n readonly timedEvents: Signal<SchedulerEvent[]>;\n readonly weekDates: Signal<Date[]>;\n readonly dayNames: Signal<string[]>;\n readonly weekLabel: Signal<string>;\n\n private _lifecycle: LifecycleHooks;\n private _config: SchedulerConfig;\n\n constructor(config: SchedulerConfig = {}) {\n this._config = config;\n const firstDay = config.firstDayOfWeek ?? 1;\n const date = config.date ?? new Date();\n const view = config.defaultView ?? 'timeGridWeek';\n const range = computeRange(view, date, firstDay);\n\n this._lifecycle = {\n beforeRender: signal(() => true),\n afterRender: signal(() => {\n /* noop */\n }),\n beforeCreate: signal(() => true),\n afterCreate: signal(() => {\n /* noop */\n }),\n beforeUpdate: signal(() => true),\n afterUpdate: signal(() => {\n /* noop */\n }),\n beforeDelete: signal(() => true),\n afterDelete: signal(() => {\n /* noop */\n }),\n beforeDrag: signal(() => true),\n afterDrag: signal(() => {\n /* noop */\n }),\n beforeResize: signal(() => true),\n afterResize: signal(() => {\n /* noop */\n }),\n };\n\n this.events = signal(config.initialEvents ?? []);\n this.resources = signal(config.initialResources ?? []);\n this.plugins = signal(config.plugins ?? []);\n\n this.viewState = signal<ViewState>({\n type: view,\n date: new Date(date),\n rangeStart: range.start,\n rangeEnd: range.end,\n slotDuration: config.slotDuration ?? 30,\n snapDuration: config.snapDuration ?? 15,\n visibleHours: config.visibleHours ?? [0, 24],\n firstDayOfWeek: firstDay,\n locale: config.locale ?? 'en-US',\n rtl: config.rtl ?? false,\n density: config.density ?? 'comfortable',\n showAllDay: config.showAllDay ?? true,\n showWeekends: config.showWeekends ?? true,\n showCurrentTime: config.showCurrentTime ?? true,\n });\n\n this.selection = signal<SelectionState>({\n selectedEventIds: new Set(),\n selectedRange: null,\n multiSelect: false,\n focusedCell: null,\n });\n\n this.hourHeight = computed(() => HOUR_HEIGHT_MAP[this.viewState().density] ?? 60);\n\n this.visibleEvents = computed(() => {\n const vs = this.viewState();\n const events = this.events();\n return events.filter(\n (e) => !e.allDay && dateRangeOverlaps(e.start, e.end, vs.rangeStart, vs.rangeEnd),\n );\n });\n\n this.allDayEvents = computed(() => {\n const vs = this.viewState();\n const events = this.events();\n return events.filter(\n (e) => e.allDay && dateRangeOverlaps(e.start, e.end, vs.rangeStart, vs.rangeEnd),\n );\n });\n\n this.timedEvents = computed(() => this.visibleEvents());\n\n this.weekDates = computed(() => {\n const vs = this.viewState();\n const start = vs.rangeStart;\n const dates: Date[] = [];\n let current = new Date(start);\n while (current < vs.rangeEnd) {\n dates.push(new Date(current));\n current = addDays(current, 1);\n }\n return dates;\n });\n\n this.dayNames = computed(() => {\n const locale = this.viewState().locale;\n return Array.from({ length: 7 }, (_, i) => {\n const d = startOfWeek(new Date(), this.viewState().firstDayOfWeek);\n d.setDate(d.getDate() + i);\n return d.toLocaleDateString(locale, { weekday: 'short' });\n });\n });\n\n this.weekLabel = computed(() => {\n const vs = this.viewState();\n return (\n vs.rangeStart.toLocaleDateString(vs.locale, {\n month: 'short',\n day: 'numeric',\n }) +\n ' – ' +\n vs.rangeEnd.toLocaleDateString(vs.locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n );\n });\n }\n\n get lifecycle(): LifecycleHooks {\n return this._lifecycle;\n }\n\n // ── Navigation ──\n\n next(): void {\n const vs = this.viewState();\n const date = addDays(vs.date, this._viewSpan(vs.type));\n this._navigateTo(date);\n }\n\n previous(): void {\n const vs = this.viewState();\n const date = addDays(vs.date, -this._viewSpan(vs.type));\n this._navigateTo(date);\n }\n\n today(): void {\n this._navigateTo(new Date());\n }\n\n goto(date: Date): void {\n this._navigateTo(date);\n }\n\n setView(type: ViewType, date?: Date): void {\n const vs = this.viewState();\n const refDate = date ?? vs.date;\n const range = computeRange(type, refDate, vs.firstDayOfWeek);\n this.viewState.update((s) => ({\n ...s,\n type,\n date: new Date(refDate),\n rangeStart: range.start,\n rangeEnd: range.end,\n }));\n }\n\n // ── Event Mutations ──\n\n addEvent(event: SchedulerEvent): void {\n if (!this._runHook(this._lifecycle.beforeCreate, event)) return;\n this.events.update((evts) => [...evts, event]);\n this._lifecycle.afterCreate()(event);\n }\n\n updateEvent(id: string, patch: Partial<SchedulerEvent>): void {\n const existing = this.events().find((e) => e.id === id);\n if (!existing) return;\n const updated = { ...existing, ...patch };\n if (!this._runHook(this._lifecycle.beforeUpdate, updated)) return;\n this.events.update((evts) => evts.map((e) => (e.id === id ? updated : e)));\n this._lifecycle.afterUpdate()(updated);\n }\n\n removeEvent(id: string): void {\n const existing = this.events().find((e) => e.id === id);\n if (!existing) return;\n if (!this._runHook(this._lifecycle.beforeDelete, existing)) return;\n this.events.update((evts) => evts.filter((e) => e.id !== id));\n this._lifecycle.afterDelete()(existing);\n }\n\n moveEvent(id: string, newStart: Date, newEnd: Date, resourceId?: string): void {\n const existing = this.events().find((e) => e.id === id);\n if (!existing) return;\n\n const move: SchedulerMove = {\n event: existing,\n from: existing.start,\n to: newStart,\n newStart,\n newEnd,\n resourceId,\n };\n\n if (!this._runHook(this._lifecycle.beforeDrag, existing)) return;\n\n this.events.update((evts) =>\n evts.map((e) =>\n e.id === id\n ? { ...e, start: newStart, end: newEnd, resourceId: resourceId ?? e.resourceId }\n : e,\n ),\n );\n\n this._lifecycle.afterDrag()(move);\n }\n\n resizeEvent(id: string, newEnd: Date): void {\n const existing = this.events().find((e) => e.id === id);\n if (!existing) return;\n\n const resize: SchedulerResize = {\n event: existing,\n oldEnd: existing.end,\n newEnd,\n };\n\n if (!this._runHook(this._lifecycle.beforeResize, existing)) return;\n\n this.events.update((evts) => evts.map((e) => (e.id === id ? { ...e, end: newEnd } : e)));\n\n this._lifecycle.afterResize()(resize);\n }\n\n // ── Selection ──\n\n selectEvent(id: string, multi = false): void {\n this.selection.update((s) => {\n const ids = new Set(multi ? s.selectedEventIds : []);\n if (ids.has(id)) {\n ids.delete(id);\n } else {\n ids.add(id);\n }\n return { ...s, selectedEventIds: ids };\n });\n }\n\n selectRange(start: Date, end: Date, resourceId?: string): void {\n this.selection.update((s) => ({\n ...s,\n selectedRange: { start, end, resourceId },\n }));\n }\n\n clearSelection(): void {\n this.selection.update((s) => ({\n ...s,\n selectedEventIds: new Set(),\n selectedRange: null,\n }));\n }\n\n isEventSelected(id: string): boolean {\n return this.selection().selectedEventIds.has(id);\n }\n\n // ── Queries ──\n\n eventsForDay(day: Date): SchedulerEvent[] {\n return this.visibleEvents().filter((e) => isSameDay(e.start, day));\n }\n\n allDayEventsForDay(day: Date): SchedulerEvent[] {\n return this.allDayEvents().filter(\n (e) => e.start.getTime() <= day.getTime() + 86_400_000 && e.end.getTime() >= day.getTime(),\n );\n }\n\n getEventsInRange(start: Date, end: Date): SchedulerEvent[] {\n return this.events().filter((e) => dateRangeOverlaps(e.start, e.end, start, end));\n }\n\n eventTop(event: SchedulerEvent): number {\n const hh = this.hourHeight();\n return ((event.start.getHours() * 60 + event.start.getMinutes()) / 60) * hh;\n }\n\n eventHeight(event: SchedulerEvent): number {\n const hh = this.hourHeight();\n const durationMin = diffMinutes(event.start, event.end);\n return Math.max((durationMin / 60) * hh, 18);\n }\n\n currentTimeY(): number {\n const hh = this.hourHeight();\n const now = this.now();\n return ((now.getHours() * 60 + now.getMinutes()) / 60) * hh;\n }\n\n // ── Private ──\n\n private _navigateTo(date: Date): void {\n const vs = this.viewState();\n const range = computeRange(vs.type, date, vs.firstDayOfWeek);\n this.viewState.update((s) => ({\n ...s,\n date: new Date(date),\n rangeStart: range.start,\n rangeEnd: range.end,\n }));\n }\n\n private _viewSpan(type: ViewType): number {\n switch (type) {\n case 'timeGridDay':\n case 'dayGridDay':\n case 'agenda':\n return 1;\n case 'timeGrid3Day':\n return 3;\n case 'timeGridWorkWeek':\n case 'timeGridWeek':\n case 'dayGridWeek':\n return 7;\n case 'dayGridMonth':\n return 30;\n case 'timeline':\n return 7;\n default:\n return 7;\n }\n }\n\n private _runHook<T>(hook: Signal<(arg: T) => boolean | void>, arg: T): boolean {\n const fn = hook();\n const result = fn(arg);\n return result === false ? false : true;\n }\n}\n\nexport interface SchedulerConfig {\n defaultView?: ViewType;\n slotDuration?: number;\n snapDuration?: number;\n firstDayOfWeek?: number;\n locale?: string;\n rtl?: boolean;\n density?: Density;\n showAllDay?: boolean;\n showWeekends?: boolean;\n showCurrentTime?: boolean;\n businessHours?: WorkingHours;\n visibleHours?: [number, number];\n plugins?: SchedulerPlugin[];\n maxEventsPerCell?: number;\n date?: Date;\n initialEvents?: SchedulerEvent[];\n initialResources?: SchedulerResource[];\n}\n","export interface SchedulerResource {\n id: string;\n title: string;\n color?: string;\n icon?: string;\n parentId?: string;\n workingHours?: WorkingHours;\n capacity?: number;\n meta?: Record<string, unknown>;\n}\n\nexport interface WorkingHours {\n days: number[];\n ranges: [number, number][];\n}\n\nexport const DEFAULT_WORKING_HOURS: WorkingHours = {\n days: [1, 2, 3, 4, 5],\n ranges: [[480, 1020]],\n};\n","export type ViewType =\n | 'dayGridDay'\n | 'dayGridWeek'\n | 'dayGridMonth'\n | 'timeGridDay'\n | 'timeGridWeek'\n | 'timeGridWorkWeek'\n | 'timeGrid3Day'\n | 'agenda'\n | 'timeline';\n\nexport type Density = 'compact' | 'comfortable' | 'dense';\n\nexport interface ViewState {\n type: ViewType;\n date: Date;\n rangeStart: Date;\n rangeEnd: Date;\n slotDuration: number;\n snapDuration: number;\n visibleHours: [number, number];\n firstDayOfWeek: number;\n locale: string;\n rtl: boolean;\n density: Density;\n showAllDay: boolean;\n showWeekends: boolean;\n showCurrentTime: boolean;\n}\n\nexport function isTimeGridView(view: ViewType): boolean {\n return view.startsWith('timeGrid');\n}\n\nexport function isDayGridView(view: ViewType): boolean {\n return view.startsWith('dayGrid');\n}\n","import type { DateRange } from './date-range';\n\nexport interface SelectionState {\n selectedEventIds: Set<string>;\n selectedRange: DateRange | null;\n multiSelect: boolean;\n focusedCell: { date: Date; resourceId?: string } | null;\n}\n\nexport const DEFAULT_SELECTION: SelectionState = {\n selectedEventIds: new Set(),\n selectedRange: null,\n multiSelect: false,\n focusedCell: null,\n};\n","import { Injectable } from '@angular/core';\nimport type { SchedulerEngine } from '../scheduler-engine';\nimport type { SchedulerPlugin } from './plugin.types';\n\n@Injectable()\nexport class PluginHost {\n private _plugins = new Map<string, SchedulerPlugin>();\n private _engine: SchedulerEngine | null = null;\n\n register(engine: SchedulerEngine, plugins: SchedulerPlugin[]): void {\n this._engine = engine;\n const sorted = [...plugins].sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));\n for (const plugin of sorted) {\n if (this._plugins.has(plugin.name)) continue;\n this._plugins.set(plugin.name, plugin);\n plugin.onInit?.(engine);\n }\n }\n\n unregister(name: string): void {\n const plugin = this._plugins.get(name);\n if (plugin) {\n plugin.onDestroy?.();\n this._plugins.delete(name);\n }\n }\n\n notifyRender(): void {\n for (const plugin of this._plugins.values()) {\n plugin.onRender?.();\n }\n }\n\n destroy(): void {\n for (const plugin of this._plugins.values()) {\n plugin.onDestroy?.();\n }\n this._plugins.clear();\n }\n\n has(name: string): boolean {\n return this._plugins.has(name);\n }\n\n get(name: string): SchedulerPlugin | undefined {\n return this._plugins.get(name);\n }\n}\n","import type { SchedulerEngine } from '../scheduler-engine';\nimport type { SchedulerEvent, SchedulerMove } from '../models';\nimport type { SchedulerPlugin } from './plugin.types';\n\nexport interface DragPluginOptions {\n snapDuration?: number;\n onDragStart?: (event: SchedulerEvent) => boolean;\n onDragEnd?: (move: SchedulerMove) => void;\n}\n\nexport class DragPlugin implements SchedulerPlugin {\n readonly name = 'drag';\n readonly priority = 10;\n\n private _engine!: SchedulerEngine;\n private _options: DragPluginOptions;\n private _dragging: {\n eventId: string;\n offsetY: number;\n startTop: number;\n originDay: Date;\n } | null = null;\n\n constructor(options: DragPluginOptions = {}) {\n this._options = options;\n }\n\n onInit(engine: SchedulerEngine): void {\n this._engine = engine;\n }\n\n onDestroy(): void {\n this._dragging = null;\n }\n\n startDrag(eventId: string, pointerY: number, dayEl: HTMLElement, day: Date): boolean {\n const event = this._engine.events().find((e) => e.id === eventId);\n if (!event || event.draggable === false) return false;\n if (this._options.onDragStart && !this._options.onDragStart(event)) return false;\n\n const scrollTop = dayEl.closest('.ngxsmk-sch__scroll')?.scrollTop ?? 0;\n const colTop = dayEl.getBoundingClientRect().top;\n const eventTop = this._engine.eventTop(event);\n const offsetY = pointerY - colTop - eventTop + scrollTop;\n\n this._dragging = {\n eventId,\n offsetY,\n startTop: eventTop,\n originDay: day,\n };\n return true;\n }\n\n moveDrag(pointerY: number, dayEl: HTMLElement, day: Date): { top: number; day: Date } | null {\n if (!this._dragging) return null;\n\n const hh = this._engine.hourHeight();\n const scrollTop = dayEl.closest('.ngxsmk-sch__scroll')?.scrollTop ?? 0;\n const colTop = dayEl.getBoundingClientRect().top;\n const rawY = pointerY - colTop + scrollTop - this._dragging.offsetY;\n const snap = this._options.snapDuration ?? this._engine.viewState().snapDuration;\n const snapPx = (snap / 60) * hh;\n const top = Math.max(0, Math.round(rawY / snapPx) * snapPx);\n\n return { top, day };\n }\n\n endDrag(top: number, day: Date): SchedulerMove | null {\n if (!this._dragging) return null;\n\n const event = this._engine.events().find((e) => e.id === this._dragging!.eventId);\n if (!event) {\n this._dragging = null;\n return null;\n }\n\n const hh = this._engine.hourHeight();\n const minutes = (top / hh) * 60;\n const durationMs = event.end.getTime() - event.start.getTime();\n const newStart = new Date(day);\n newStart.setHours(0, 0, 0, 0);\n newStart.setMinutes(minutes);\n const newEnd = new Date(newStart.getTime() + durationMs);\n\n const move: SchedulerMove = {\n event,\n from: event.start,\n to: day,\n newStart,\n newEnd,\n resourceId: event.resourceId,\n };\n\n this._engine.moveEvent(event.id, newStart, newEnd);\n this._options.onDragEnd?.(move);\n this._dragging = null;\n return move;\n }\n\n cancelDrag(): void {\n this._dragging = null;\n }\n\n get dragging(): boolean {\n return this._dragging !== null;\n }\n\n get draggingEventId(): string | null {\n return this._dragging?.eventId ?? null;\n }\n}\n","import type { SchedulerEngine } from '../scheduler-engine';\nimport type { SchedulerEvent, SchedulerResize } from '../models';\nimport type { SchedulerPlugin } from './plugin.types';\n\nexport interface ResizePluginOptions {\n snapDuration?: number;\n minDuration?: number;\n onResizeStart?: (event: SchedulerEvent) => boolean;\n onResizeEnd?: (resize: SchedulerResize) => void;\n}\n\nexport class ResizePlugin implements SchedulerPlugin {\n readonly name = 'resize';\n readonly priority = 11;\n\n private _engine!: SchedulerEngine;\n private _options: ResizePluginOptions;\n private _resizing: {\n eventId: string;\n originEnd: Date;\n } | null = null;\n\n constructor(options: ResizePluginOptions = {}) {\n this._options = options;\n }\n\n onInit(engine: SchedulerEngine): void {\n this._engine = engine;\n }\n\n onDestroy(): void {\n this._resizing = null;\n }\n\n startResize(eventId: string): boolean {\n const event = this._engine.events().find((e) => e.id === eventId);\n if (!event || event.resizable === false) return false;\n if (this._options.onResizeStart && !this._options.onResizeStart(event)) return false;\n\n this._resizing = { eventId, originEnd: new Date(event.end) };\n return true;\n }\n\n moveResize(pointerY: number, dayEl: HTMLElement): Date | null {\n if (!this._resizing) return null;\n\n const event = this._engine.events().find((e) => e.id === this._resizing!.eventId);\n if (!event) return null;\n\n const hh = this._engine.hourHeight();\n const scrollTop = dayEl.closest('.ngxsmk-sch__scroll')?.scrollTop ?? 0;\n const colTop = dayEl.getBoundingClientRect().top;\n const rawY = pointerY - colTop + scrollTop;\n const snap = this._options.snapDuration ?? this._engine.viewState().snapDuration;\n const snapPx = (snap / 60) * hh;\n const y = Math.max(this._engine.eventTop(event) + snapPx, Math.round(rawY / snapPx) * snapPx);\n\n const minutes = (y / hh) * 60;\n const newEnd = new Date(event.start);\n newEnd.setHours(0, 0, 0, 0);\n newEnd.setMinutes(minutes);\n\n const minDur = this._options.minDuration ?? 15;\n if (newEnd.getTime() - event.start.getTime() < minDur * 60_000) {\n newEnd.setTime(event.start.getTime() + minDur * 60_000);\n }\n\n return newEnd;\n }\n\n endResize(): SchedulerResize | null {\n if (!this._resizing) return null;\n\n const event = this._engine.events().find((e) => e.id === this._resizing!.eventId);\n if (!event) {\n this._resizing = null;\n return null;\n }\n\n const resize: SchedulerResize = {\n event,\n oldEnd: this._resizing.originEnd,\n newEnd: event.end,\n };\n\n this._engine.resizeEvent(event.id, event.end);\n this._options.onResizeEnd?.(resize);\n this._resizing = null;\n return resize;\n }\n\n cancelResize(): void {\n this._resizing = null;\n }\n\n get resizing(): boolean {\n return this._resizing !== null;\n }\n\n get resizingEventId(): string | null {\n return this._resizing?.eventId ?? null;\n }\n}\n","import type { SchedulerEngine } from '../scheduler-engine';\nimport type { SchedulerEvent } from '../models';\nimport type { SchedulerPlugin } from './plugin.types';\n\nexport interface SelectionPluginOptions {\n multiSelect?: boolean;\n rangeSelect?: boolean;\n onSelect?: (events: SchedulerEvent[]) => void;\n onDeselect?: (events: SchedulerEvent[]) => void;\n onRangeSelect?: (start: Date, end: Date) => void;\n}\n\nexport class SelectionPlugin implements SchedulerPlugin {\n readonly name = 'selection';\n readonly priority = 5;\n\n private _engine!: SchedulerEngine;\n private _options: SelectionPluginOptions;\n private _rangeSelecting = false;\n private _rangeStart: Date | null = null;\n\n constructor(options: SelectionPluginOptions = {}) {\n this._options = options;\n }\n\n onInit(engine: SchedulerEngine): void {\n this._engine = engine;\n if (this._options.multiSelect) {\n this._engine.selection.update((s) => ({ ...s, multiSelect: true }));\n }\n }\n\n onDestroy(): void {\n this._rangeSelecting = false;\n this._rangeStart = null;\n }\n\n toggleEvent(eventId: string, modifierKey = false): void {\n const multi = this._options.multiSelect && modifierKey;\n this._engine.selectEvent(eventId, multi);\n\n const selectedIds = this._engine.selection().selectedEventIds;\n const selectedEvents = this._engine.events().filter((e) => selectedIds.has(e.id));\n\n if (selectedIds.has(eventId)) {\n this._options.onSelect?.(selectedEvents);\n } else {\n this._options.onDeselect?.(selectedEvents);\n }\n }\n\n selectOnly(eventId: string): void {\n this._engine.clearSelection();\n this._engine.selectEvent(eventId);\n const event = this._engine.events().find((e) => e.id === eventId);\n if (event) this._options.onSelect?.([event]);\n }\n\n selectRange(start: Date, end: Date): void {\n this._engine.selectRange(start, end);\n this._options.onRangeSelect?.(start, end);\n }\n\n startRangeSelect(date: Date): void {\n this._rangeSelecting = true;\n this._rangeStart = date;\n }\n\n updateRangeSelect(date: Date): void {\n if (!this._rangeSelecting || !this._rangeStart) return;\n const s = this._rangeStart < date ? this._rangeStart : date;\n const e = this._rangeStart < date ? date : this._rangeStart;\n this._engine.selectRange(s, e);\n }\n\n endRangeSelect(): DateRange | null {\n if (!this._rangeSelecting || !this._rangeStart) return null;\n const range = this._engine.selection().selectedRange;\n this._rangeSelecting = false;\n this._rangeStart = null;\n return range;\n }\n\n selectAll(): void {\n const all = this._engine.events();\n this._engine.selection.update((s) => ({\n ...s,\n selectedEventIds: new Set(all.map((e) => e.id)),\n }));\n }\n\n clearSelection(): void {\n this._engine.clearSelection();\n }\n\n get selectedIds(): Set<string> {\n return this._engine.selection().selectedEventIds;\n }\n\n get selectedCount(): number {\n return this._engine.selection().selectedEventIds.size;\n }\n\n get hasSelection(): boolean {\n return this._engine.selection().selectedEventIds.size > 0;\n }\n\n get isRangeSelecting(): boolean {\n return this._rangeSelecting;\n }\n}\n\ninterface DateRange {\n start: Date;\n end: Date;\n resourceId?: string;\n}\n","import type { SchedulerEngine } from '../scheduler-engine';\nimport type { SchedulerEvent } from '../models';\nimport type { SchedulerPlugin } from './plugin.types';\n\nexport interface TooltipPluginOptions {\n delay?: number;\n showArrow?: boolean;\n placement?: 'top' | 'bottom' | 'left' | 'right';\n maxWidth?: number;\n onShow?: (event: SchedulerEvent) => boolean | void;\n onHide?: (event: SchedulerEvent) => void;\n content?: (event: SchedulerEvent) => string;\n}\n\nexport interface TooltipState {\n visible: boolean;\n event: SchedulerEvent | null;\n x: number;\n y: number;\n placement: 'top' | 'bottom' | 'left' | 'right';\n content: string;\n}\n\nexport function createDefaultTooltipState(): TooltipState {\n return {\n visible: false,\n event: null,\n x: 0,\n y: 0,\n placement: 'top',\n content: '',\n };\n}\n\nexport class TooltipPlugin implements SchedulerPlugin {\n readonly name = 'tooltip';\n readonly priority = 50;\n\n private _engine!: SchedulerEngine;\n private _options: Required<TooltipPluginOptions>;\n private _timeout: ReturnType<typeof setTimeout> | null = null;\n private _state: TooltipState = createDefaultTooltipState();\n private _listeners: (() => void)[] = [];\n\n constructor(options: TooltipPluginOptions = {}) {\n this._options = {\n delay: options.delay ?? 400,\n showArrow: options.showArrow ?? true,\n placement: options.placement ?? 'top',\n maxWidth: options.maxWidth ?? 280,\n onShow: options.onShow ?? (() => true),\n onHide:\n options.onHide ??\n (() => {\n /* noop */\n }),\n content: options.content ?? defaultContent,\n };\n }\n\n onInit(engine: SchedulerEngine): void {\n this._engine = engine;\n }\n\n onDestroy(): void {\n this.hide();\n this._clearTimeout();\n for (const unlisten of this._listeners) unlisten();\n this._listeners = [];\n }\n\n show(event: SchedulerEvent, targetEl: HTMLElement): void {\n this._clearTimeout();\n\n this._timeout = setTimeout(() => {\n if (this._options.onShow(event) === false) return;\n\n const rect = targetEl.getBoundingClientRect();\n const pos = this._computePosition(rect);\n\n this._state = {\n visible: true,\n event,\n x: pos.x,\n y: pos.y,\n placement: pos.placement,\n content: this._options.content(event),\n };\n }, this._options.delay);\n }\n\n hide(): void {\n this._clearTimeout();\n if (this._state.event) {\n this._options.onHide(this._state.event);\n }\n this._state = createDefaultTooltipState();\n }\n\n updatePosition(targetEl: HTMLElement): void {\n if (!this._state.visible || !this._state.event) return;\n const rect = targetEl.getBoundingClientRect();\n const pos = this._computePosition(rect);\n this._state = { ...this._state, x: pos.x, y: pos.y, placement: pos.placement };\n }\n\n get state(): TooltipState {\n return this._state;\n }\n\n get isVisible(): boolean {\n return this._state.visible;\n }\n\n private _computePosition(rect: DOMRect): {\n x: number;\n y: number;\n placement: 'top' | 'bottom' | 'left' | 'right';\n } {\n const placement = this._options.placement;\n const offset = 8;\n\n switch (placement) {\n case 'top':\n return { x: rect.left + rect.width / 2, y: rect.top - offset, placement };\n case 'bottom':\n return { x: rect.left + rect.width / 2, y: rect.bottom + offset, placement };\n case 'left':\n return { x: rect.left - offset, y: rect.top + rect.height / 2, placement };\n case 'right':\n return { x: rect.right + offset, y: rect.top + rect.height / 2, placement };\n }\n }\n\n private _clearTimeout(): void {\n if (this._timeout) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n }\n}\n\nfunction defaultContent(event: SchedulerEvent): string {\n const time = `${event.start.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} – ${event.end.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`;\n return `${event.title}\\n${time}`;\n}\n","import type { SchedulerEngine } from '../scheduler-engine';\nimport type { SchedulerPlugin } from './plugin.types';\nimport { addDays, addMinutes } from '../utils/date-utils';\n\nexport interface KeyboardPluginOptions {\n onKeyAction?: (action: string) => boolean | void;\n}\n\nexport class KeyboardPlugin implements SchedulerPlugin {\n readonly name = 'keyboard';\n readonly priority = 20;\n\n private _engine!: SchedulerEngine;\n private _options: KeyboardPluginOptions;\n private _handler: ((e: KeyboardEvent) => void) | null = null;\n\n constructor(options: KeyboardPluginOptions = {}) {\n this._options = options;\n }\n\n onInit(engine: SchedulerEngine): void {\n this._engine = engine;\n if (typeof document !== 'undefined') {\n this._handler = (e: KeyboardEvent) => this._onKeyDown(e);\n document.addEventListener('keydown', this._handler);\n }\n }\n\n onDestroy(): void {\n if (this._handler) {\n document.removeEventListener('keydown', this._handler);\n this._handler = null;\n }\n }\n\n private _onKeyDown(e: KeyboardEvent): void {\n const target = e.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable)\n return;\n\n switch (e.key) {\n case 'ArrowRight':\n e.preventDefault();\n this._moveFocus(1);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n this._moveFocus(-1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this._moveFocusTime(-30);\n break;\n case 'ArrowDown':\n e.preventDefault();\n this._moveFocusTime(30);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n this._activateFocused();\n break;\n case 'Delete':\n case 'Backspace':\n e.preventDefault();\n this._deleteSelected();\n break;\n case 'Escape':\n e.preventDefault();\n this._deselect();\n this._options.onKeyAction?.('escape');\n break;\n case 'a':\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault();\n this._selectAll();\n }\n break;\n case 't':\n if (!e.ctrlKey && !e.metaKey && !e.altKey) {\n e.preventDefault();\n this._goToday();\n }\n break;\n }\n }\n\n private _moveFocus(deltaDays: number): void {\n const sel = this._engine.selection();\n const focused = sel.focusedCell;\n\n if (focused) {\n const newDate = addDays(focused.date, deltaDays);\n this._engine.selection.update((s) => ({\n ...s,\n focusedCell: { date: newDate, resourceId: focused.resourceId },\n }));\n } else {\n const vs = this._engine.viewState();\n this._engine.selection.update((s) => ({\n ...s,\n focusedCell: { date: vs.date },\n }));\n }\n this._options.onKeyAction?.('moveFocus');\n }\n\n private _moveFocusTime(deltaMinutes: number): void {\n const sel = this._engine.selection();\n const focused = sel.focusedCell;\n\n if (focused) {\n const newDate = addMinutes(focused.date, deltaMinutes);\n this._engine.selection.update((s) => ({\n ...s,\n focusedCell: { date: newDate, resourceId: focused.resourceId },\n }));\n } else {\n this._moveFocus(0);\n }\n this._options.onKeyAction?.('moveFocusTime');\n }\n\n private _activateFocused(): void {\n const sel = this._engine.selection();\n const ids = sel.selectedEventIds;\n if (ids.size === 1) {\n const eventId = Array.from(ids)[0];\n const event = this._engine.events().find((e) => e.id === eventId);\n if (event) this._options.onKeyAction?.('activate');\n } else {\n const focused = sel.focusedCell;\n if (focused) {\n const dayEvents = this._engine.eventsForDay(focused.date);\n if (dayEvents.length > 0) {\n this._engine.selectEvent(dayEvents[0].id);\n }\n }\n }\n }\n\n private _deleteSelected(): void {\n if (this._options.onKeyAction?.('delete') === false) return;\n const ids = this._engine.selection().selectedEventIds;\n for (const id of ids) {\n this._engine.removeEvent(id);\n }\n this._engine.clearSelection();\n }\n\n private _deselect(): void {\n this._engine.clearSelection();\n }\n\n private _selectAll(): void {\n const events = this._engine.events();\n this._engine.selection.update((s) => ({\n ...s,\n selectedEventIds: new Set(events.map((e) => e.id)),\n }));\n this._options.onKeyAction?.('selectAll');\n }\n\n private _goToday(): void {\n this._engine.today();\n this._options.onKeyAction?.('today');\n }\n}\n","export function snapToSlot(value: number, snapDuration: number): number {\n return Math.round(value / snapDuration) * snapDuration;\n}\n\nexport function snapDateToSlot(date: Date, snapDuration: number): Date {\n const ms = date.getTime();\n const snapMs = snapDuration * 60_000;\n return new Date(Math.round(ms / snapMs) * snapMs);\n}\n\nexport function minutesToPixels(minutes: number, hourHeight: number): number {\n return (minutes / 60) * hourHeight;\n}\n\nexport function pixelsToMinutes(pixels: number, hourHeight: number): number {\n return (pixels / hourHeight) * 60;\n}\n\nexport function timeToMinutes(date: Date): number {\n return date.getHours() * 60 + date.getMinutes();\n}\n\nexport function minutesToTime(baseDate: Date, minutes: number): Date {\n const d = new Date(baseDate);\n d.setHours(0, 0, 0, 0);\n d.setMinutes(minutes);\n return d;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}