@timelinekit/core 1.0.0 → 1.0.3

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 (232) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +200 -0
  3. package/dist/__tests__/calendar/sidebar/calendar-list.test.d.ts +1 -0
  4. package/dist/__tests__/calendar/sidebar/mini-calendar.test.d.ts +1 -0
  5. package/dist/__tests__/calendar/test-helpers.d.ts +169 -0
  6. package/dist/__tests__/calendar/tooltip/calendar-tooltip-renderer.test.d.ts +1 -0
  7. package/dist/__tests__/calendar/validation.test.d.ts +1 -0
  8. package/dist/__tests__/calendar/views/agenda-view.test.d.ts +1 -0
  9. package/dist/__tests__/calendar/views/day-view.test.d.ts +1 -0
  10. package/dist/__tests__/calendar/views/drag-handlers.test.d.ts +1 -0
  11. package/dist/__tests__/calendar/views/keyboard-navigation.test.d.ts +1 -0
  12. package/dist/__tests__/calendar/views/month-view.test.d.ts +1 -0
  13. package/dist/__tests__/calendar/views/swipe-navigation-handler.test.d.ts +1 -0
  14. package/dist/__tests__/calendar/views/time-grid-helper.test.d.ts +1 -0
  15. package/dist/__tests__/calendar/views/view-utils.test.d.ts +1 -0
  16. package/dist/__tests__/calendar/views/week-view.test.d.ts +1 -0
  17. package/dist/__tests__/ganttchart/model/dependency-evaluator.test.d.ts +1 -0
  18. package/dist/__tests__/ganttchart/model/task-filters.test.d.ts +1 -0
  19. package/dist/__tests__/ganttchart/model/task-link.test.d.ts +1 -0
  20. package/dist/calendar/clipboard/calendar-clipboard.d.ts +19 -0
  21. package/dist/calendar/eventcalendar-context.d.ts +157 -0
  22. package/dist/calendar/eventcalendar-engine.d.ts +80 -0
  23. package/dist/calendar/eventcalendar-events.d.ts +40 -0
  24. package/dist/calendar/eventcalendar-settings.d.ts +30 -0
  25. package/dist/calendar/export/calendar-data-exporter.d.ts +32 -0
  26. package/dist/calendar/export/calendar-icalendar-exporter.d.ts +24 -0
  27. package/dist/calendar/export/calendar-image-exporter.d.ts +17 -0
  28. package/dist/calendar/export/calendar-pdf-exporter.d.ts +30 -0
  29. package/dist/calendar/import/calendar-icalendar-importer.d.ts +30 -0
  30. package/dist/calendar/model/calendar-data.d.ts +34 -0
  31. package/dist/calendar/model/calendar-entry.d.ts +44 -0
  32. package/dist/calendar/model/calendar-item.d.ts +151 -0
  33. package/dist/calendar/model/calendar.d.ts +29 -0
  34. package/dist/calendar/model/recurrence-editor.d.ts +25 -0
  35. package/dist/calendar/model/recurrence-exception.d.ts +34 -0
  36. package/dist/calendar/model/recurrence-expander.d.ts +17 -0
  37. package/dist/calendar/model/recurrence-rule.d.ts +42 -0
  38. package/dist/calendar/sidebar/calendar-list.d.ts +13 -0
  39. package/dist/calendar/sidebar/mini-calendar.d.ts +20 -0
  40. package/dist/calendar/themes/dark-theme.d.ts +4 -0
  41. package/dist/calendar/themes/eventcalendar-theme.d.ts +156 -0
  42. package/dist/calendar/themes/light-theme.d.ts +4 -0
  43. package/dist/calendar/tooltip/calendar-tooltip-renderer.d.ts +8 -0
  44. package/dist/calendar/views/agenda-view.d.ts +12 -0
  45. package/dist/calendar/views/base-view.d.ts +23 -0
  46. package/dist/calendar/views/day-view.d.ts +11 -0
  47. package/dist/calendar/views/handlers/allday-drag-handler.d.ts +14 -0
  48. package/dist/calendar/views/handlers/allday-entry-drag-handler.d.ts +18 -0
  49. package/dist/calendar/views/handlers/month-drag-handler.d.ts +14 -0
  50. package/dist/calendar/views/handlers/month-entry-drag-handler.d.ts +18 -0
  51. package/dist/calendar/views/handlers/swipe-navigation-handler.d.ts +14 -0
  52. package/dist/calendar/views/handlers/time-grid-drag-handler.d.ts +14 -0
  53. package/dist/calendar/views/handlers/time-grid-entry-drag-handler.d.ts +18 -0
  54. package/dist/calendar/views/month-view.d.ts +13 -0
  55. package/dist/calendar/views/time-grid-helper.d.ts +36 -0
  56. package/dist/calendar/views/view-utils.d.ts +38 -0
  57. package/dist/calendar/views/week-view.d.ts +16 -0
  58. package/dist/common/base-background-renderer.d.ts +9 -6
  59. package/dist/common/base-chart-handler.d.ts +19 -13
  60. package/dist/common/base-chart-handlers.d.ts +34 -0
  61. package/dist/common/base-chart-scroll-handler.d.ts +5 -3
  62. package/dist/common/base-chart.d.ts +98 -0
  63. package/dist/common/base-divider.d.ts +2 -0
  64. package/dist/common/base-engine.d.ts +112 -0
  65. package/dist/common/base-export-renderer.d.ts +26 -0
  66. package/dist/common/base-header-renderer.d.ts +8 -6
  67. package/dist/common/base-markers-renderer.d.ts +9 -6
  68. package/dist/common/base-theme.d.ts +107 -0
  69. package/dist/common/base-tooltip-renderer.d.ts +7 -0
  70. package/dist/common/chart-time-axis.d.ts +32 -0
  71. package/dist/common/common.d.ts +12 -2
  72. package/dist/common/custom-properties-container.d.ts +14 -0
  73. package/dist/common/drawing.d.ts +8 -2
  74. package/dist/common/export-utils.d.ts +34 -7
  75. package/dist/common/functions.d.ts +1 -1
  76. package/dist/common/locale.d.ts +101 -0
  77. package/dist/common/marker.d.ts +13 -0
  78. package/dist/common/subscription-manager.d.ts +17 -0
  79. package/dist/common/text.d.ts +9 -9
  80. package/dist/common/theme-utils.d.ts +5 -0
  81. package/dist/common/timeline-theme.d.ts +107 -0
  82. package/dist/common/undo-manager.d.ts +22 -0
  83. package/dist/common/working-calendar.d.ts +57 -0
  84. package/dist/ganttchart/chart/chart-scroll-handler.d.ts +1 -1
  85. package/dist/ganttchart/chart/chart-time-axis.d.ts +2 -32
  86. package/dist/ganttchart/chart/chart.d.ts +10 -4
  87. package/dist/ganttchart/chart/handlers/add-task-part.d.ts +14 -7
  88. package/dist/ganttchart/chart/handlers/connector-dots-handler.d.ts +10 -8
  89. package/dist/ganttchart/chart/handlers/gantt-drag-handler.d.ts +32 -0
  90. package/dist/ganttchart/chart/handlers/handler.d.ts +7 -4
  91. package/dist/ganttchart/chart/handlers/handlers.d.ts +5 -10
  92. package/dist/ganttchart/chart/handlers/move-milestone.d.ts +9 -7
  93. package/dist/ganttchart/chart/handlers/move-task-part.d.ts +9 -7
  94. package/dist/ganttchart/chart/handlers/resize-task-part.d.ts +18 -7
  95. package/dist/ganttchart/chart/handlers/select-link.d.ts +8 -6
  96. package/dist/ganttchart/chart/handlers/select-task.d.ts +13 -11
  97. package/dist/ganttchart/chart/handlers/set-task-progress.d.ts +14 -7
  98. package/dist/ganttchart/chart/renderers/chart-background-renderer.d.ts +3 -2
  99. package/dist/ganttchart/chart/renderers/chart-header-renderer.d.ts +2 -2
  100. package/dist/ganttchart/chart/renderers/chart-links-renderer.d.ts +4 -3
  101. package/dist/ganttchart/chart/renderers/chart-markers-renderer.d.ts +2 -2
  102. package/dist/ganttchart/chart/renderers/chart-tasks-renderer.d.ts +9 -9
  103. package/dist/ganttchart/chart/renderers/renderer-base.d.ts +2 -1
  104. package/dist/ganttchart/chart/tooltip/chart-tooltip-renderer.d.ts +4 -6
  105. package/dist/ganttchart/clipboard.d.ts +10 -3
  106. package/dist/ganttchart/divider/divider.d.ts +1 -1
  107. package/dist/ganttchart/export/data-exporter.d.ts +12 -7
  108. package/dist/ganttchart/export/export-common.d.ts +16 -16
  109. package/dist/ganttchart/export/image-exporter.d.ts +5 -4
  110. package/dist/ganttchart/export/pdf-exporter.d.ts +7 -6
  111. package/dist/ganttchart/ganttchart-engine.d.ts +134 -40
  112. package/dist/ganttchart/locale.d.ts +2 -66
  113. package/dist/ganttchart/model/dependency-evaluator.d.ts +16 -0
  114. package/dist/ganttchart/model/lag.d.ts +11 -0
  115. package/dist/ganttchart/model/length.d.ts +13 -2
  116. package/dist/ganttchart/model/marker.d.ts +1 -7
  117. package/dist/ganttchart/model/rate.d.ts +7 -1
  118. package/dist/ganttchart/model/resource-list.d.ts +11 -0
  119. package/dist/ganttchart/model/resource.d.ts +15 -1
  120. package/dist/ganttchart/model/task-filters.d.ts +10 -0
  121. package/dist/ganttchart/model/task-link.d.ts +15 -2
  122. package/dist/ganttchart/model/task-list-adapter.d.ts +22 -0
  123. package/dist/ganttchart/model/task-list.d.ts +55 -2
  124. package/dist/ganttchart/model/task-part.d.ts +20 -0
  125. package/dist/ganttchart/model/task-parts-manager.d.ts +44 -0
  126. package/dist/ganttchart/model/task-resource.d.ts +11 -0
  127. package/dist/ganttchart/model/task-serializer.d.ts +5 -0
  128. package/dist/ganttchart/model/task-warnings.d.ts +4 -0
  129. package/dist/ganttchart/model/task.d.ts +92 -19
  130. package/dist/ganttchart/model/work.d.ts +14 -1
  131. package/dist/ganttchart/model/working-calendar.d.ts +2 -32
  132. package/dist/ganttchart/sheet/renderers/sheet-icons-cell-renderer.d.ts +2 -0
  133. package/dist/ganttchart/sheet/sheet.d.ts +12 -7
  134. package/dist/ganttchart/themes/theme.d.ts +63 -108
  135. package/dist/ganttchart/undo-manager.d.ts +1 -13
  136. package/dist/index.d.ts +77 -8
  137. package/dist/index.js +6 -1
  138. package/dist/licensing/features.d.ts +3 -1
  139. package/dist/licensing/license-key.d.ts +1 -0
  140. package/dist/licensing/license-manager.d.ts +4 -1
  141. package/dist/licensing/watermark.d.ts +1 -0
  142. package/dist/locales/cs.d.ts +1 -1
  143. package/dist/locales/cs.js +1 -0
  144. package/dist/locales/de.d.ts +1 -1
  145. package/dist/locales/de.js +1 -0
  146. package/dist/locales/es.d.ts +1 -1
  147. package/dist/locales/es.js +1 -0
  148. package/dist/locales/fr.d.ts +1 -1
  149. package/dist/locales/fr.js +1 -0
  150. package/dist/locales/it.d.ts +1 -1
  151. package/dist/locales/it.js +1 -0
  152. package/dist/locales/ja.d.ts +1 -1
  153. package/dist/locales/ja.js +1 -0
  154. package/dist/locales/ko.d.ts +1 -1
  155. package/dist/locales/ko.js +1 -0
  156. package/dist/locales/nl.d.ts +1 -1
  157. package/dist/locales/nl.js +1 -0
  158. package/dist/locales/pl.d.ts +1 -1
  159. package/dist/locales/pl.js +1 -0
  160. package/dist/locales/pt.d.ts +1 -1
  161. package/dist/locales/pt.js +1 -0
  162. package/dist/locales/ru.d.ts +1 -1
  163. package/dist/locales/ru.js +1 -0
  164. package/dist/locales/sv.d.ts +1 -1
  165. package/dist/locales/sv.js +1 -0
  166. package/dist/locales/zh.d.ts +1 -1
  167. package/dist/locales/zh.js +1 -0
  168. package/dist/resourcescheduler/chart/handlers/add-event.d.ts +15 -8
  169. package/dist/resourcescheduler/chart/handlers/move-event.d.ts +10 -8
  170. package/dist/resourcescheduler/chart/handlers/resize-event.d.ts +21 -8
  171. package/dist/resourcescheduler/chart/handlers/scheduler-drag-handler.d.ts +32 -0
  172. package/dist/resourcescheduler/chart/handlers/scheduler-handler.d.ts +5 -3
  173. package/dist/resourcescheduler/chart/handlers/scheduler-handlers.d.ts +9 -10
  174. package/dist/resourcescheduler/chart/handlers/select-event.d.ts +10 -8
  175. package/dist/resourcescheduler/chart/renderers/scheduler-background-renderer.d.ts +2 -1
  176. package/dist/resourcescheduler/chart/renderers/scheduler-events-renderer.d.ts +2 -1
  177. package/dist/resourcescheduler/chart/renderers/scheduler-renderer-base.d.ts +1 -0
  178. package/dist/resourcescheduler/chart/scheduler-chart.d.ts +9 -4
  179. package/dist/resourcescheduler/chart/tooltip/scheduler-tooltip-renderer.d.ts +2 -4
  180. package/dist/resourcescheduler/clipboard.d.ts +8 -0
  181. package/dist/resourcescheduler/export/scheduler-data-exporter.d.ts +5 -0
  182. package/dist/resourcescheduler/export/scheduler-export-common.d.ts +12 -7
  183. package/dist/resourcescheduler/export/scheduler-image-exporter.d.ts +2 -1
  184. package/dist/resourcescheduler/export/scheduler-pdf-exporter.d.ts +3 -1
  185. package/dist/resourcescheduler/model/scheduler-data-adapter.d.ts +1 -0
  186. package/dist/resourcescheduler/model/scheduler-data.d.ts +45 -2
  187. package/dist/resourcescheduler/model/scheduler-event.d.ts +22 -2
  188. package/dist/resourcescheduler/model/scheduler-layout-calculator.d.ts +18 -0
  189. package/dist/resourcescheduler/model/scheduler-resource.d.ts +21 -2
  190. package/dist/resourcescheduler/resourcescheduler-engine.d.ts +134 -42
  191. package/dist/resourcescheduler/sheet/renderers/scheduler-icon-cell-renderer.d.ts +2 -0
  192. package/dist/resourcescheduler/sheet/scheduler-sheet.d.ts +11 -6
  193. package/dist/resourcescheduler/themes/scheduler-themes.d.ts +13 -0
  194. package/dist/styles/ec.css +1 -0
  195. package/dist/styles/gc.css +1 -1
  196. package/dist/styles/index.css +1 -0
  197. package/dist/styles/rs.css +1 -0
  198. package/dist/table/editors/input-editor.d.ts +1 -0
  199. package/dist/table/table-column.d.ts +7 -1
  200. package/dist/table/table-data-source.d.ts +2 -0
  201. package/dist/table/table-rows-selection.d.ts +1 -0
  202. package/dist/table/table.d.ts +11 -0
  203. package/dist/table/tree-table.d.ts +2 -0
  204. package/package.json +17 -6
  205. package/styles/_common.scss +12 -1
  206. package/styles/ec.scss +1225 -0
  207. package/styles/index.scss +3 -0
  208. package/dist/ganttchart/model/sheet-column.d.ts +0 -27
  209. package/dist/ganttchart/sheet/editors/cell-editor.d.ts +0 -23
  210. package/dist/ganttchart/sheet/editors/currency-editor.d.ts +0 -6
  211. package/dist/ganttchart/sheet/editors/date-editor.d.ts +0 -6
  212. package/dist/ganttchart/sheet/editors/decimal-editor.d.ts +0 -6
  213. package/dist/ganttchart/sheet/editors/dialog-editor.d.ts +0 -17
  214. package/dist/ganttchart/sheet/editors/input-editor.d.ts +0 -19
  215. package/dist/ganttchart/sheet/editors/integer-editor.d.ts +0 -6
  216. package/dist/ganttchart/sheet/editors/percent-editor.d.ts +0 -6
  217. package/dist/ganttchart/sheet/editors/text-editor.d.ts +0 -5
  218. package/dist/ganttchart/sheet/sheet-keyboard-navigation.d.ts +0 -26
  219. package/dist/ganttchart/sheet/sheet-rows-selection.d.ts +0 -24
  220. /package/dist/__tests__/{critical-path-calculator.test.d.ts → calendar/calendar-clipboard.test.d.ts} +0 -0
  221. /package/dist/__tests__/{model/lag.test.d.ts → calendar/eventcalendar-engine.test.d.ts} +0 -0
  222. /package/dist/__tests__/{model/length.test.d.ts → calendar/export/calendar-data-export.test.d.ts} +0 -0
  223. /package/dist/__tests__/{model/resource-list.test.d.ts → calendar/export/calendar-export.test.d.ts} +0 -0
  224. /package/dist/__tests__/{model/resource.test.d.ts → calendar/export/calendar-icalendar.test.d.ts} +0 -0
  225. /package/dist/__tests__/{model/task-list.test.d.ts → calendar/model/calendar-data.test.d.ts} +0 -0
  226. /package/dist/__tests__/{model/task-part.test.d.ts → calendar/model/calendar-item-recurrence.test.d.ts} +0 -0
  227. /package/dist/__tests__/{model/task-resource.test.d.ts → calendar/model/calendar-item-types.test.d.ts} +0 -0
  228. /package/dist/__tests__/{model/task-warnings.test.d.ts → calendar/model/calendar-occurrence.test.d.ts} +0 -0
  229. /package/dist/__tests__/{model/task.test.d.ts → calendar/model/calendar.test.d.ts} +0 -0
  230. /package/dist/__tests__/{model/work.test.d.ts → calendar/model/recurrence-editor.test.d.ts} +0 -0
  231. /package/dist/__tests__/{model/working-calendar.test.d.ts → calendar/model/recurrence-expander.test.d.ts} +0 -0
  232. /package/dist/__tests__/{undo-manager.test.d.ts → calendar/model/recurrence-rule.test.d.ts} +0 -0
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  TimelineKit Commercial License
2
2
 
3
- Copyright (c) 2025 TimelineKit. All rights reserved.
3
+ Copyright (c) 2026-present TimelineKit. All rights reserved.
4
4
 
5
5
  This software is licensed under the TimelineKit Commercial License.
6
6
 
package/README.md CHANGED
@@ -0,0 +1,200 @@
1
+ # @timelinekit/core
2
+
3
+ The framework-agnostic engine behind [TimelineKit](https://timelinekit.com) — a suite of high-performance, canvas-rendered scheduling components for JavaScript and TypeScript.
4
+
5
+ > **Note:** This package is not intended to be used directly. Install a framework wrapper instead:
6
+ >
7
+ > - **React:** [`@timelinekit/react`](https://www.npmjs.com/package/@timelinekit/react)
8
+ > - **Angular:** [`@timelinekit/angular`](https://www.npmjs.com/package/@timelinekit/angular)
9
+ >
10
+ > `@timelinekit/core` is included automatically as a dependency and re-exports all types through the wrapper packages.
11
+
12
+ ## Components
13
+
14
+ ### Gantt Chart
15
+
16
+ Interactive project timeline with canvas rendering for 60 fps performance.
17
+
18
+ - Tasks, summary tasks, and milestones
19
+ - Four dependency types (FS, SS, FF, SF) with lag/lead
20
+ - Critical path analysis (CPM)
21
+ - Baseline comparison with visual overlay
22
+ - Resource management with overallocation detection
23
+ - Working calendars (business days, holidays, shifts)
24
+ - Markers and today line
25
+ - Zoom levels from hours to years
26
+ - Drag & drop editing with undo/redo
27
+ - Filtering and keyboard navigation
28
+
29
+ ### Resource Scheduler
30
+
31
+ Visual resource planning with drag-and-drop event scheduling.
32
+
33
+ - Hierarchical resource lanes
34
+ - Automatic multi-lane event stacking
35
+ - Frozen (pinned) resource rows
36
+ - Conflict detection for overlapping events
37
+ - Time scales from hours to months
38
+ - Custom event rendering
39
+ - Drag & drop editing with undo/redo
40
+ - Filtering and keyboard navigation
41
+
42
+ ### Event Calendar
43
+
44
+ Full-featured calendar with month, week, day, and agenda views.
45
+
46
+ - Recurring events (RFC 5545 RRULE with exceptions)
47
+ - Multiple color-coded calendars
48
+ - 9 built-in item types (Meeting, Appointment, Task, Deadline, Holiday, Birthday, Reminder, Resource Booking, Availability Block)
49
+ - iCalendar (.ics) import and export
50
+ - Mini calendar and sidebar
51
+ - All-day events
52
+ - Custom event rendering
53
+ - Drag & drop editing with undo/redo
54
+ - Keyboard navigation
55
+
56
+ ## Quick Start
57
+
58
+ ### React
59
+
60
+ ```bash
61
+ npm install @timelinekit/react @timelinekit/core
62
+ ```
63
+
64
+ ```tsx
65
+ import { useRef, useEffect } from 'react';
66
+ import { GanttChart, GanttChartRef } from '@timelinekit/react';
67
+ import { Task, TaskLink } from '@timelinekit/core';
68
+ import '@timelinekit/core/styles';
69
+
70
+ function App() {
71
+ const ref = useRef<GanttChartRef>(null);
72
+
73
+ useEffect(() => {
74
+ const gantt = ref.current!;
75
+ const taskA = gantt.list.addTask(new Task({ id: '1', name: 'Design', startTime: '2027-01-05', endTime: '2027-01-09' }));
76
+ const taskB = gantt.list.addTask(new Task({ id: '2', name: 'Development', startTime: '2027-01-12', endTime: '2027-01-23' }));
77
+ gantt.list.addLink(new TaskLink({ id: 'l1', from: taskA, to: taskB, type: 'finishToStart' }));
78
+ gantt.zoomToFit();
79
+ }, []);
80
+
81
+ return <GanttChart ref={ref} style={{ height: '600px' }} />;
82
+ }
83
+ ```
84
+
85
+ ### Angular
86
+
87
+ ```bash
88
+ npm install @timelinekit/angular @timelinekit/core
89
+ ```
90
+
91
+ ```typescript
92
+ import { GanttChartComponent } from '@timelinekit/angular';
93
+ import { Task, TaskLink } from '@timelinekit/core';
94
+
95
+ @Component({
96
+ imports: [GanttChartComponent],
97
+ template: `<tk-gantt-chart #gantt style="height: 600px" />`,
98
+ })
99
+ export class AppComponent implements AfterViewInit {
100
+ @ViewChild('gantt') gantt!: GanttChartComponent;
101
+
102
+ ngAfterViewInit() {
103
+ const taskA = this.gantt.list.addTask(new Task({ id: '1', name: 'Design', startTime: '2027-01-05', endTime: '2027-01-09' }));
104
+ const taskB = this.gantt.list.addTask(new Task({ id: '2', name: 'Development', startTime: '2027-01-12', endTime: '2027-01-23' }));
105
+ this.gantt.list.addLink(new TaskLink({ id: 'l1', from: taskA, to: taskB, type: 'finishToStart' }));
106
+ this.gantt.zoomToFit();
107
+ }
108
+ }
109
+ ```
110
+
111
+ ## Styles
112
+
113
+ Import the combined stylesheet for all components:
114
+
115
+ ```typescript
116
+ import '@timelinekit/core/styles';
117
+ ```
118
+
119
+ Or import individual component styles for smaller bundles:
120
+
121
+ ```typescript
122
+ import '@timelinekit/core/styles/gc'; // Gantt Chart
123
+ import '@timelinekit/core/styles/rs'; // Resource Scheduler
124
+ import '@timelinekit/core/styles/ec'; // Event Calendar
125
+ ```
126
+
127
+ SCSS sources are also available for custom builds:
128
+
129
+ ```scss
130
+ @use '@timelinekit/core/styles/scss'; // All components
131
+ @use '@timelinekit/core/styles/gc/scss'; // Gantt Chart
132
+ @use '@timelinekit/core/styles/rs/scss'; // Resource Scheduler
133
+ @use '@timelinekit/core/styles/ec/scss'; // Event Calendar
134
+ ```
135
+
136
+ ## Themes
137
+
138
+ Four built-in themes for each component, fully customizable via CSS variables:
139
+
140
+ | Theme | Gantt Chart | Resource Scheduler | Event Calendar |
141
+ |-------|-------------|--------------------|----------------|
142
+ | Light | `LightGanttChartTheme` | `LightSchedulerTheme` | `LightEventCalendarTheme` |
143
+ | Dark | `DarkGanttChartTheme` | `DarkSchedulerTheme` | `DarkEventCalendarTheme` |
144
+ | Modern | `ModernGanttChartTheme` | `ModernSchedulerTheme` | — |
145
+ | Classic | `ClassicGanttChartTheme` | `ClassicSchedulerTheme` | — |
146
+
147
+ ## Localization
148
+
149
+ English is included by default. Additional locales are available as separate imports:
150
+
151
+ ```typescript
152
+ import { csLocale } from '@timelinekit/core/locales/cs';
153
+ ```
154
+
155
+ | Code | Language | Code | Language |
156
+ |------|----------|------|----------|
157
+ | `cs` | Czech | `ko` | Korean |
158
+ | `de` | German | `nl` | Dutch |
159
+ | `es` | Spanish | `pl` | Polish |
160
+ | `fr` | French | `pt` | Portuguese |
161
+ | `it` | Italian | `ru` | Russian |
162
+ | `ja` | Japanese | `sv` | Swedish |
163
+ | | | `zh` | Chinese |
164
+
165
+ ## Export
166
+
167
+ All components support export to multiple formats (requires optional peer dependencies for some formats):
168
+
169
+ - **PNG** — requires `html2canvas` (Event Calendar only; Gantt and Scheduler use built-in canvas export)
170
+ - **PDF** — requires `jspdf` (and `html2canvas` for Event Calendar)
171
+ - **CSV** — built-in
172
+ - **Excel** — requires `exceljs`
173
+ - **ICS** — Event Calendar only, built-in
174
+
175
+ ## Licensing
176
+
177
+ TimelineKit uses a commercial license with a free tier.
178
+
179
+ **Free** — All components and all features with a "TimelineKit.com" watermark. No license key required.
180
+
181
+ **Pro** — Remove the watermark and get email support. Licenses are per-developer and perpetual for the major version.
182
+
183
+ ```typescript
184
+ import { setLicense } from '@timelinekit/core';
185
+
186
+ setLicense('your-license-key');
187
+ ```
188
+
189
+ See [pricing](https://timelinekit.com/pricing) for details.
190
+
191
+ ## Resources
192
+
193
+ - [Documentation](https://timelinekit.com/docs)
194
+ - [Live Demos](https://timelinekit.com/gantt-chart/demo)
195
+ - [Examples](https://github.com/timelinekit/examples)
196
+ - [Support](mailto:support@timelinekit.com)
197
+
198
+ ## License
199
+
200
+ See [LICENSE](./LICENSE) for details.
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Shared DOM shim and factory functions for EventCalendar tests.
3
+ * No jsdom required — provides a MinimalElement that covers all DOM APIs
4
+ * used by views, drag handlers, and keyboard navigation.
5
+ */
6
+ import { EventCalendarContext } from '../../calendar/eventcalendar-context';
7
+ import { Calendar } from '../../calendar/model/calendar';
8
+ import { CalendarEntry } from '../../calendar/model/calendar-entry';
9
+ import { Meeting, Appointment, type CalendarItem } from '../../calendar/model/calendar-item';
10
+ export declare class MinimalCSSStyleDeclaration {
11
+ #private;
12
+ visibility: string;
13
+ display: string;
14
+ fontFamily: string;
15
+ fontSize: string;
16
+ top: string;
17
+ left: string;
18
+ height: string;
19
+ width: string;
20
+ backgroundColor: string;
21
+ color: string;
22
+ borderLeft: string;
23
+ cursor: string;
24
+ position: string;
25
+ setProperty(name: string, value: string): void;
26
+ getPropertyValue(name: string): string;
27
+ [key: string]: any;
28
+ }
29
+ export interface BoundingRect {
30
+ top: number;
31
+ left: number;
32
+ width: number;
33
+ height: number;
34
+ right: number;
35
+ bottom: number;
36
+ }
37
+ export declare class MinimalElement {
38
+ #private;
39
+ tagName: string;
40
+ className: string;
41
+ id: string;
42
+ tabIndex: number;
43
+ textContent: string;
44
+ offsetHeight: number;
45
+ offsetWidth: number;
46
+ scrollTop: number;
47
+ dataset: Record<string, string>;
48
+ style: MinimalCSSStyleDeclaration;
49
+ children: MinimalElement[];
50
+ childNodes: MinimalElement[];
51
+ parentNode: MinimalElement | null;
52
+ parentElement: MinimalElement | null;
53
+ get innerHTML(): string;
54
+ set innerHTML(value: string);
55
+ get firstElementChild(): MinimalElement | null;
56
+ classList: {
57
+ add: (...classes: string[]) => void;
58
+ remove: (...classes: string[]) => void;
59
+ contains: (c: string) => boolean;
60
+ toggle: (c: string, force?: boolean) => void;
61
+ readonly length: number;
62
+ };
63
+ constructor(tag: string);
64
+ setAttribute(name: string, value: string): void;
65
+ getAttribute(name: string): string | null;
66
+ removeAttribute(name: string): void;
67
+ appendChild(child: any): any;
68
+ removeChild(child: any): any;
69
+ remove(): void;
70
+ cloneNode(deep?: boolean): MinimalElement;
71
+ querySelector(selector: string): MinimalElement | null;
72
+ querySelectorAll(selector: string): MinimalElement[];
73
+ closest(selector: string): MinimalElement | null;
74
+ addEventListener(type: string, handler: Function, _options?: any): void;
75
+ removeEventListener(type: string, handler: Function): void;
76
+ dispatchEvent(event: any): boolean;
77
+ focus(): void;
78
+ setPointerCapture(_pointerId: number): void;
79
+ releasePointerCapture(_pointerId: number): void;
80
+ attachShadow(_init: any): MinimalElement;
81
+ getBoundingClientRect(): BoundingRect;
82
+ /** Set the bounding rect returned by getBoundingClientRect(). */
83
+ setBoundingRect(rect: Partial<BoundingRect>): void;
84
+ }
85
+ export declare class MinimalTextNode {
86
+ textContent: string;
87
+ constructor(text: string);
88
+ }
89
+ /** Install global document/ResizeObserver/requestAnimationFrame shims. */
90
+ export declare function installDomShim(): void;
91
+ /** Create a minimal EventCalendarContext for testing. */
92
+ export declare function createTestContext(opts?: {
93
+ currentDate?: Date;
94
+ firstDayOfWeek?: number;
95
+ slotDuration?: number;
96
+ workingHours?: {
97
+ start: number;
98
+ end: number;
99
+ };
100
+ canEdit?: boolean;
101
+ }): EventCalendarContext;
102
+ export declare function createTestCalendar(id: string, opts?: {
103
+ name?: string;
104
+ color?: number;
105
+ isDefault?: boolean;
106
+ isVisible?: boolean;
107
+ }): Calendar;
108
+ export declare function createTestMeeting(id: string, calendarId: string, opts?: {
109
+ title?: string;
110
+ startTime?: Date;
111
+ endTime?: Date;
112
+ isAllDay?: boolean;
113
+ color?: number;
114
+ location?: string;
115
+ responseStatus?: 'accepted' | 'tentative' | 'needsAction' | 'declined';
116
+ }): {
117
+ item: Meeting;
118
+ entry: CalendarEntry;
119
+ };
120
+ export declare function createTestAppointment(id: string, calendarId: string, opts?: {
121
+ title?: string;
122
+ startTime?: Date;
123
+ endTime?: Date;
124
+ isAllDay?: boolean;
125
+ }): {
126
+ item: Appointment;
127
+ entry: CalendarEntry;
128
+ };
129
+ export interface TestScenario {
130
+ ec: EventCalendarContext;
131
+ calendar: Calendar;
132
+ items: CalendarItem[];
133
+ entries: CalendarEntry[];
134
+ }
135
+ /** Creates a context with one calendar and a set of meetings for a given week. */
136
+ export declare function createWeekScenario(opts?: {
137
+ currentDate?: Date;
138
+ firstDayOfWeek?: number;
139
+ }): TestScenario;
140
+ export declare function createPointerEvent(type: string, opts?: {
141
+ clientX?: number;
142
+ clientY?: number;
143
+ button?: number;
144
+ ctrlKey?: boolean;
145
+ metaKey?: boolean;
146
+ pointerId?: number;
147
+ pointerType?: string;
148
+ isPrimary?: boolean;
149
+ }): any;
150
+ /** @deprecated Use createPointerEvent instead. Kept for non-drag tests. */
151
+ export declare function createMouseEvent(type: string, opts?: {
152
+ clientX?: number;
153
+ clientY?: number;
154
+ button?: number;
155
+ ctrlKey?: boolean;
156
+ metaKey?: boolean;
157
+ }): any;
158
+ export declare function createKeyboardEvent(type: string, key: string, opts?: {
159
+ ctrlKey?: boolean;
160
+ metaKey?: boolean;
161
+ shiftKey?: boolean;
162
+ }): any;
163
+ /** Creates a grid of MinimalElement cells with sequential bounding rects. */
164
+ export declare function createCellGrid(rows: number, cols: number, opts?: {
165
+ cellWidth?: number;
166
+ cellHeight?: number;
167
+ startX?: number;
168
+ startY?: number;
169
+ }): MinimalElement[];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ import type { EventCalendarContext } from "../eventcalendar-context";
2
+ import type { CalendarEntry } from "../model/calendar-entry";
3
+ import { type CalendarItem } from "../model/calendar-item";
4
+ /** Emitted after a paste operation completes. */
5
+ export interface CalendarEntriesPastedEventArgs {
6
+ /** Newly created items. */
7
+ items: CalendarItem[];
8
+ }
9
+ /** Handles copy, cut, and paste of calendar entries via internal buffer and system clipboard. */
10
+ export declare class CalendarClipboardManager {
11
+ #private;
12
+ constructor(ec: EventCalendarContext);
13
+ /** Copy entries to the internal buffer and system clipboard (as TSV). */
14
+ copy(entries: CalendarEntry[]): Promise<void>;
15
+ /** Copy entries to the clipboard and remove the original items. */
16
+ cut(entries: CalendarEntry[]): Promise<void>;
17
+ /** Paste entries from the internal buffer. Shift times relative to targetDate. */
18
+ paste(targetDate: Date): Promise<CalendarEntriesPastedEventArgs | null>;
19
+ }
@@ -0,0 +1,157 @@
1
+ import { BehaviorSubject, Subject } from "rxjs";
2
+ import type { TimelineKitLocale } from "../common/locale";
3
+ import type { Calendar } from "./model/calendar";
4
+ import { CalendarData } from "./model/calendar-data";
5
+ import { CalendarEntry } from "./model/calendar-entry";
6
+ import type { EventCalendarEntryColor } from "./themes/eventcalendar-theme";
7
+ import { EventCalendarTheme } from "./themes/eventcalendar-theme";
8
+ import { EventCalendarSettings } from "./eventcalendar-settings";
9
+ /** Calendar view modes. */
10
+ export type ViewMode = 'month' | 'week' | 'day' | 'agenda';
11
+ /** Event args for entry interaction events. */
12
+ export interface EntryEventArgs {
13
+ entry: CalendarEntry;
14
+ domEvent: MouseEvent;
15
+ }
16
+ /** Event args for entry context menu. */
17
+ export interface EntryContextMenuArgs {
18
+ entry: CalendarEntry;
19
+ domEvent: MouseEvent;
20
+ }
21
+ /** Event args for clicking the "+N more" label in month view. */
22
+ export interface MoreClickArgs {
23
+ date: Date;
24
+ entries: CalendarEntry[];
25
+ }
26
+ /** Event args for clicking an empty date area. */
27
+ export interface DateClickArgs {
28
+ date: Date;
29
+ isAllDay: boolean;
30
+ domEvent: MouseEvent;
31
+ }
32
+ /** Event args for right-clicking an empty date area. */
33
+ export interface DateContextMenuArgs {
34
+ date: Date;
35
+ isAllDay: boolean;
36
+ entry: CalendarEntry | null;
37
+ domEvent: MouseEvent;
38
+ }
39
+ /** Event args for entry drag/move. Cancelable. */
40
+ export interface EntryMovingArgs {
41
+ entry: CalendarEntry;
42
+ newStartTime: Date;
43
+ newEndTime: Date;
44
+ cancel: boolean;
45
+ }
46
+ /** Event args for entry resize. Cancelable. */
47
+ export interface EntryResizingArgs {
48
+ entry: CalendarEntry;
49
+ newStartTime: Date;
50
+ newEndTime: Date;
51
+ edge: 'start' | 'end';
52
+ cancel: boolean;
53
+ }
54
+ /** Event args for entry creation via drag on empty area. Cancelable. */
55
+ export interface EntryCreatingArgs {
56
+ startTime: Date;
57
+ endTime: Date;
58
+ isAllDay: boolean;
59
+ cancel: boolean;
60
+ }
61
+ /** Event args for entry deletion. Cancelable. */
62
+ export interface EntryDeletingArgs {
63
+ entry: CalendarEntry;
64
+ /** Whether the entry belongs to a recurring series. */
65
+ isRecurring: boolean;
66
+ /**
67
+ * Scope of deletion for recurring entries: 'this' | 'thisAndFollowing' | 'all'.
68
+ * Defaults to 'all' for non-recurring entries.
69
+ * Subscribers can change this before the engine processes the deletion.
70
+ */
71
+ scope: 'this' | 'thisAndFollowing' | 'all';
72
+ cancel: boolean;
73
+ }
74
+ /** Event args for calendar removal. Cancelable. */
75
+ export interface CalendarRemovingArgs {
76
+ calendar: Calendar;
77
+ cancel: boolean;
78
+ }
79
+ /** Arguments passed to the custom entry rendering callback. */
80
+ export interface EntryRenderArgs {
81
+ /** The calendar entry being rendered. */
82
+ entry: CalendarEntry;
83
+ /** The DOM element for the entry. Modify its content/style to customize rendering. */
84
+ element: HTMLElement;
85
+ /** Whether this entry is rendered in an all-day section. */
86
+ isAllDay: boolean;
87
+ /** Current view mode. */
88
+ viewMode: ViewMode;
89
+ /** Resolved color for this entry. */
90
+ color: EventCalendarEntryColor;
91
+ }
92
+ /** Custom entry rendering function. Called after default content is rendered.
93
+ * Return true if you handled the rendering (default content will be cleared first),
94
+ * or false/undefined to keep the default rendering. */
95
+ export type EntryRenderFn = (args: EntryRenderArgs) => boolean | void;
96
+ /** Arguments passed to the custom tooltip callback. */
97
+ export interface EntryTooltipArgs {
98
+ /** The calendar entry being hovered. */
99
+ entry: CalendarEntry;
100
+ /** Current view mode. */
101
+ viewMode: ViewMode;
102
+ }
103
+ /** Content to display in an entry tooltip. */
104
+ export interface EntryTooltipContent {
105
+ /** Tooltip title. */
106
+ title: string;
107
+ /** Key-value rows displayed below the title. */
108
+ rows?: {
109
+ label: string;
110
+ value: string;
111
+ }[];
112
+ }
113
+ /** Custom tooltip function. Return content to display, or null to hide the tooltip. */
114
+ export type EntryTooltipFn = (args: EntryTooltipArgs) => EntryTooltipContent | null | Promise<EntryTooltipContent | null>;
115
+ /** Internal shared state for all EventCalendar sub-components. */
116
+ export declare class EventCalendarContext {
117
+ data: CalendarData;
118
+ currentDate$: BehaviorSubject<Date>;
119
+ viewMode$: BehaviorSubject<ViewMode>;
120
+ locale$: BehaviorSubject<TimelineKitLocale>;
121
+ theme$: BehaviorSubject<EventCalendarTheme>;
122
+ firstDayOfWeek$: BehaviorSubject<number>;
123
+ workingHours$: BehaviorSubject<{
124
+ start: number;
125
+ end: number;
126
+ }>;
127
+ slotDuration$: BehaviorSubject<number>;
128
+ showWeekNumbers$: BehaviorSubject<boolean>;
129
+ agendaDays$: BehaviorSubject<number>;
130
+ canEdit$: BehaviorSubject<boolean>;
131
+ sidebarVisible$: BehaviorSubject<boolean>;
132
+ selectedEntries$: BehaviorSubject<CalendarEntry[]>;
133
+ hoveredEntry$: BehaviorSubject<CalendarEntry | null>;
134
+ entryRendering$: BehaviorSubject<EntryRenderFn | null>;
135
+ entryTooltip$: BehaviorSubject<EntryTooltipFn | null>;
136
+ entryClick$: Subject<EntryEventArgs>;
137
+ entryDblClick$: Subject<EntryEventArgs>;
138
+ entryContextMenu$: Subject<EntryContextMenuArgs>;
139
+ dateClick$: Subject<DateClickArgs>;
140
+ dateContextMenu$: Subject<DateContextMenuArgs>;
141
+ moreClick$: Subject<MoreClickArgs>;
142
+ entryMoving$: Subject<EntryMovingArgs>;
143
+ entryResizing$: Subject<EntryResizingArgs>;
144
+ entryCreating$: Subject<EntryCreatingArgs>;
145
+ entryDeleting$: Subject<EntryDeletingArgs>;
146
+ /** Emitted when the user clicks "Add calendar" in the sidebar. Host app should handle creation. */
147
+ calendarAddRequested$: Subject<void>;
148
+ /** Emitted before a calendar is removed via the sidebar. Set cancel=true to prevent removal. */
149
+ calendarRemoving$: Subject<CalendarRemovingArgs>;
150
+ /** Emitted when the visible date range changes (e.g. navigation, view switch). */
151
+ viewDateRangeChanged$: Subject<{
152
+ start: Date;
153
+ end: Date;
154
+ }>;
155
+ settings: EventCalendarSettings;
156
+ constructor();
157
+ }