@chenzy-design/core 0.3.1 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/dist/ai-chat-dialogue.d.ts +300 -0
  2. package/dist/ai-chat-dialogue.d.ts.map +1 -0
  3. package/dist/ai-chat-dialogue.js +699 -0
  4. package/dist/ai-chat-dialogue.js.map +1 -0
  5. package/dist/ai-chat-dialogue.test.d.ts +2 -0
  6. package/dist/ai-chat-dialogue.test.d.ts.map +1 -0
  7. package/dist/ai-chat-dialogue.test.js +338 -0
  8. package/dist/ai-chat-dialogue.test.js.map +1 -0
  9. package/dist/ai-chat-input.d.ts +191 -0
  10. package/dist/ai-chat-input.d.ts.map +1 -0
  11. package/dist/ai-chat-input.js +274 -0
  12. package/dist/ai-chat-input.js.map +1 -0
  13. package/dist/ai-chat-input.test.d.ts +2 -0
  14. package/dist/ai-chat-input.test.d.ts.map +1 -0
  15. package/dist/ai-chat-input.test.js +339 -0
  16. package/dist/ai-chat-input.test.js.map +1 -0
  17. package/dist/audio-player.d.ts +154 -0
  18. package/dist/audio-player.d.ts.map +1 -0
  19. package/dist/audio-player.js +254 -0
  20. package/dist/audio-player.js.map +1 -0
  21. package/dist/audio-player.test.d.ts +2 -0
  22. package/dist/audio-player.test.d.ts.map +1 -0
  23. package/dist/audio-player.test.js +275 -0
  24. package/dist/audio-player.test.js.map +1 -0
  25. package/dist/back-top.d.ts +4 -1
  26. package/dist/back-top.d.ts.map +1 -1
  27. package/dist/back-top.js +5 -2
  28. package/dist/back-top.js.map +1 -1
  29. package/dist/back-top.test.js +3 -2
  30. package/dist/back-top.test.js.map +1 -1
  31. package/dist/calendar.d.ts +132 -44
  32. package/dist/calendar.d.ts.map +1 -1
  33. package/dist/calendar.js +413 -70
  34. package/dist/calendar.js.map +1 -1
  35. package/dist/calendar.test.js +160 -76
  36. package/dist/calendar.test.js.map +1 -1
  37. package/dist/chat.d.ts +172 -0
  38. package/dist/chat.d.ts.map +1 -0
  39. package/dist/chat.js +210 -0
  40. package/dist/chat.js.map +1 -0
  41. package/dist/chat.test.d.ts +2 -0
  42. package/dist/chat.test.d.ts.map +1 -0
  43. package/dist/chat.test.js +181 -0
  44. package/dist/chat.test.js.map +1 -0
  45. package/dist/code-highlight.d.ts +30 -0
  46. package/dist/code-highlight.d.ts.map +1 -0
  47. package/dist/code-highlight.js +37 -0
  48. package/dist/code-highlight.js.map +1 -0
  49. package/dist/code-highlight.test.d.ts +2 -0
  50. package/dist/code-highlight.test.d.ts.map +1 -0
  51. package/dist/code-highlight.test.js +36 -0
  52. package/dist/code-highlight.test.js.map +1 -0
  53. package/dist/collapsible.d.ts +41 -0
  54. package/dist/collapsible.d.ts.map +1 -0
  55. package/dist/collapsible.js +33 -0
  56. package/dist/collapsible.js.map +1 -0
  57. package/dist/collapsible.test.d.ts +2 -0
  58. package/dist/collapsible.test.d.ts.map +1 -0
  59. package/dist/collapsible.test.js +57 -0
  60. package/dist/collapsible.test.js.map +1 -0
  61. package/dist/color-value.d.ts +60 -0
  62. package/dist/color-value.d.ts.map +1 -0
  63. package/dist/color-value.js +165 -0
  64. package/dist/color-value.js.map +1 -0
  65. package/dist/color-value.test.d.ts +2 -0
  66. package/dist/color-value.test.d.ts.map +1 -0
  67. package/dist/color-value.test.js +104 -0
  68. package/dist/color-value.test.js.map +1 -0
  69. package/dist/config-provider.d.ts +76 -37
  70. package/dist/config-provider.d.ts.map +1 -1
  71. package/dist/config-provider.js +107 -32
  72. package/dist/config-provider.js.map +1 -1
  73. package/dist/config-provider.test.js +123 -60
  74. package/dist/config-provider.test.js.map +1 -1
  75. package/dist/cropper.d.ts +164 -0
  76. package/dist/cropper.d.ts.map +1 -0
  77. package/dist/cropper.js +841 -0
  78. package/dist/cropper.js.map +1 -0
  79. package/dist/cropper.test.d.ts +2 -0
  80. package/dist/cropper.test.d.ts.map +1 -0
  81. package/dist/cropper.test.js +259 -0
  82. package/dist/cropper.test.js.map +1 -0
  83. package/dist/drag-move.d.ts +119 -0
  84. package/dist/drag-move.d.ts.map +1 -0
  85. package/dist/drag-move.js +237 -0
  86. package/dist/drag-move.js.map +1 -0
  87. package/dist/drag-move.test.d.ts +2 -0
  88. package/dist/drag-move.test.d.ts.map +1 -0
  89. package/dist/drag-move.test.js +304 -0
  90. package/dist/drag-move.test.js.map +1 -0
  91. package/dist/editable.d.ts +24 -4
  92. package/dist/editable.d.ts.map +1 -1
  93. package/dist/editable.js +18 -0
  94. package/dist/editable.js.map +1 -1
  95. package/dist/editable.test.js +55 -2
  96. package/dist/editable.test.js.map +1 -1
  97. package/dist/ellipsis.d.ts +13 -0
  98. package/dist/ellipsis.d.ts.map +1 -1
  99. package/dist/ellipsis.js +36 -0
  100. package/dist/ellipsis.js.map +1 -1
  101. package/dist/ellipsis.test.js +37 -1
  102. package/dist/ellipsis.test.js.map +1 -1
  103. package/dist/form-path.d.ts +19 -0
  104. package/dist/form-path.d.ts.map +1 -0
  105. package/dist/form-path.js +97 -0
  106. package/dist/form-path.js.map +1 -0
  107. package/dist/form-path.test.d.ts +2 -0
  108. package/dist/form-path.test.d.ts.map +1 -0
  109. package/dist/form-path.test.js +57 -0
  110. package/dist/form-path.test.js.map +1 -0
  111. package/dist/form-validate.d.ts +13 -0
  112. package/dist/form-validate.d.ts.map +1 -0
  113. package/dist/form-validate.js +204 -0
  114. package/dist/form-validate.js.map +1 -0
  115. package/dist/form.d.ts +91 -18
  116. package/dist/form.d.ts.map +1 -1
  117. package/dist/form.js +170 -115
  118. package/dist/form.js.map +1 -1
  119. package/dist/form.test.js +349 -76
  120. package/dist/form.test.js.map +1 -1
  121. package/dist/highlight.d.ts +42 -32
  122. package/dist/highlight.d.ts.map +1 -1
  123. package/dist/highlight.js +67 -41
  124. package/dist/highlight.js.map +1 -1
  125. package/dist/highlight.test.js +73 -32
  126. package/dist/highlight.test.js.map +1 -1
  127. package/dist/hotkeys.d.ts +151 -0
  128. package/dist/hotkeys.d.ts.map +1 -0
  129. package/dist/hotkeys.js +188 -0
  130. package/dist/hotkeys.js.map +1 -0
  131. package/dist/hotkeys.test.d.ts +2 -0
  132. package/dist/hotkeys.test.d.ts.map +1 -0
  133. package/dist/hotkeys.test.js +170 -0
  134. package/dist/hotkeys.test.js.map +1 -0
  135. package/dist/index.d.ts +33 -17
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +32 -13
  138. package/dist/index.js.map +1 -1
  139. package/dist/input.d.ts +34 -0
  140. package/dist/input.d.ts.map +1 -0
  141. package/dist/input.js +54 -0
  142. package/dist/input.js.map +1 -0
  143. package/dist/input.test.d.ts +2 -0
  144. package/dist/input.test.d.ts.map +1 -0
  145. package/dist/input.test.js +56 -0
  146. package/dist/input.test.js.map +1 -0
  147. package/dist/markdown-render.d.ts +49 -0
  148. package/dist/markdown-render.d.ts.map +1 -0
  149. package/dist/markdown-render.js +61 -0
  150. package/dist/markdown-render.js.map +1 -0
  151. package/dist/markdown-render.test.d.ts +2 -0
  152. package/dist/markdown-render.test.d.ts.map +1 -0
  153. package/dist/markdown-render.test.js +106 -0
  154. package/dist/markdown-render.test.js.map +1 -0
  155. package/dist/notification.d.ts +40 -31
  156. package/dist/notification.d.ts.map +1 -1
  157. package/dist/notification.js +86 -70
  158. package/dist/notification.js.map +1 -1
  159. package/dist/notification.test.js +62 -39
  160. package/dist/notification.test.js.map +1 -1
  161. package/dist/numeral.d.ts +32 -0
  162. package/dist/numeral.d.ts.map +1 -0
  163. package/dist/numeral.js +67 -0
  164. package/dist/numeral.js.map +1 -0
  165. package/dist/numeral.test.d.ts +2 -0
  166. package/dist/numeral.test.d.ts.map +1 -0
  167. package/dist/numeral.test.js +59 -0
  168. package/dist/numeral.test.js.map +1 -0
  169. package/dist/overflow-list.d.ts +9 -40
  170. package/dist/overflow-list.d.ts.map +1 -1
  171. package/dist/overflow-list.js +9 -70
  172. package/dist/overflow-list.js.map +1 -1
  173. package/dist/overflow-list.test.js +1 -122
  174. package/dist/overflow-list.test.js.map +1 -1
  175. package/dist/pagination.d.ts +17 -0
  176. package/dist/pagination.d.ts.map +1 -1
  177. package/dist/pagination.js +48 -0
  178. package/dist/pagination.js.map +1 -1
  179. package/dist/pagination.test.js +40 -1
  180. package/dist/pagination.test.js.map +1 -1
  181. package/dist/pincode.d.ts +79 -0
  182. package/dist/pincode.d.ts.map +1 -0
  183. package/dist/pincode.js +119 -0
  184. package/dist/pincode.js.map +1 -0
  185. package/dist/pincode.test.d.ts +2 -0
  186. package/dist/pincode.test.d.ts.map +1 -0
  187. package/dist/pincode.test.js +151 -0
  188. package/dist/pincode.test.js.map +1 -0
  189. package/dist/progress.d.ts +32 -30
  190. package/dist/progress.d.ts.map +1 -1
  191. package/dist/progress.js +257 -64
  192. package/dist/progress.js.map +1 -1
  193. package/dist/progress.test.js +50 -47
  194. package/dist/progress.test.js.map +1 -1
  195. package/dist/resizable.d.ts +200 -0
  196. package/dist/resizable.d.ts.map +1 -0
  197. package/dist/resizable.js +329 -0
  198. package/dist/resizable.js.map +1 -0
  199. package/dist/resizable.test.d.ts +2 -0
  200. package/dist/resizable.test.d.ts.map +1 -0
  201. package/dist/resizable.test.js +302 -0
  202. package/dist/resizable.test.js.map +1 -0
  203. package/dist/scroll-list.d.ts +69 -62
  204. package/dist/scroll-list.d.ts.map +1 -1
  205. package/dist/scroll-list.js +103 -144
  206. package/dist/scroll-list.js.map +1 -1
  207. package/dist/scroll-list.test.js +100 -110
  208. package/dist/scroll-list.test.js.map +1 -1
  209. package/dist/sidebar.d.ts +46 -0
  210. package/dist/sidebar.d.ts.map +1 -0
  211. package/dist/sidebar.js +65 -0
  212. package/dist/sidebar.js.map +1 -0
  213. package/dist/sidebar.test.d.ts +2 -0
  214. package/dist/sidebar.test.d.ts.map +1 -0
  215. package/dist/sidebar.test.js +88 -0
  216. package/dist/sidebar.test.js.map +1 -0
  217. package/dist/spin.d.ts +5 -5
  218. package/dist/spin.d.ts.map +1 -1
  219. package/dist/spin.js +13 -39
  220. package/dist/spin.js.map +1 -1
  221. package/dist/spin.test.js +2 -26
  222. package/dist/spin.test.js.map +1 -1
  223. package/dist/toast.d.ts +33 -30
  224. package/dist/toast.d.ts.map +1 -1
  225. package/dist/toast.js +77 -72
  226. package/dist/toast.js.map +1 -1
  227. package/dist/toast.test.js +63 -37
  228. package/dist/toast.test.js.map +1 -1
  229. package/dist/tree.d.ts +22 -5
  230. package/dist/tree.d.ts.map +1 -1
  231. package/dist/tree.js +61 -9
  232. package/dist/tree.js.map +1 -1
  233. package/dist/tree.test.js +72 -1
  234. package/dist/tree.test.js.map +1 -1
  235. package/dist/user-guide.d.ts +73 -0
  236. package/dist/user-guide.d.ts.map +1 -0
  237. package/dist/user-guide.js +95 -0
  238. package/dist/user-guide.js.map +1 -0
  239. package/dist/user-guide.test.d.ts +2 -0
  240. package/dist/user-guide.test.d.ts.map +1 -0
  241. package/dist/user-guide.test.js +109 -0
  242. package/dist/user-guide.test.js.map +1 -0
  243. package/dist/video-player.d.ts +196 -0
  244. package/dist/video-player.d.ts.map +1 -0
  245. package/dist/video-player.js +461 -0
  246. package/dist/video-player.js.map +1 -0
  247. package/dist/video-player.test.d.ts +2 -0
  248. package/dist/video-player.test.d.ts.map +1 -0
  249. package/dist/video-player.test.js +435 -0
  250. package/dist/video-player.test.js.map +1 -0
  251. package/package.json +17 -1
  252. package/dist/banner.d.ts +0 -19
  253. package/dist/banner.d.ts.map +0 -1
  254. package/dist/banner.js +0 -20
  255. package/dist/banner.js.map +0 -1
  256. package/dist/banner.test.d.ts +0 -2
  257. package/dist/banner.test.d.ts.map +0 -1
  258. package/dist/banner.test.js +0 -29
  259. package/dist/banner.test.js.map +0 -1
  260. package/dist/breakpoints.d.ts +0 -30
  261. package/dist/breakpoints.d.ts.map +0 -1
  262. package/dist/breakpoints.js +0 -45
  263. package/dist/breakpoints.js.map +0 -1
  264. package/dist/breakpoints.test.d.ts +0 -2
  265. package/dist/breakpoints.test.d.ts.map +0 -1
  266. package/dist/breakpoints.test.js +0 -46
  267. package/dist/breakpoints.test.js.map +0 -1
  268. package/dist/lottie-icon.d.ts +0 -88
  269. package/dist/lottie-icon.d.ts.map +0 -1
  270. package/dist/lottie-icon.js +0 -84
  271. package/dist/lottie-icon.js.map +0 -1
  272. package/dist/lottie-icon.test.d.ts +0 -2
  273. package/dist/lottie-icon.test.d.ts.map +0 -1
  274. package/dist/lottie-icon.test.js +0 -88
  275. package/dist/lottie-icon.test.js.map +0 -1
  276. package/dist/sider.d.ts +0 -26
  277. package/dist/sider.d.ts.map +0 -1
  278. package/dist/sider.js +0 -55
  279. package/dist/sider.js.map +0 -1
  280. package/dist/sider.test.d.ts +0 -2
  281. package/dist/sider.test.d.ts.map +0 -1
  282. package/dist/sider.test.js +0 -29
  283. package/dist/sider.test.js.map +0 -1
package/dist/calendar.js CHANGED
@@ -1,94 +1,437 @@
1
1
  /**
2
- * createCalendar helpersframework-agnostic month-view event grouping.
3
- * Pure functions only; reuses date.ts grid math. No DOM, no framework deps.
4
- * See specs/components/show/Calendar.spec.md §3 (month-view subset).
2
+ * Framework-agnostic Calendar event algorithms aligned to Semi Design's
3
+ * `@douyinfe/semi-foundation/calendar/eventUtil` + `foundation`.
4
+ *
5
+ * Four view modes: day / week / month / range. Pure functions only; no DOM,
6
+ * no framework deps. The render layer (Calendar.svelte) supplies `children`
7
+ * for each event and turns the numeric positions here into inline styles.
8
+ *
9
+ * Semi event model: an EventObject carries a `key` (required, unique) and an
10
+ * optional `start` / `end` / `allDay`. Content is the render layer's business
11
+ * (Semi: `children`); this module never touches it beyond passing it through.
5
12
  */
6
13
  import { isSameDay, startOfDay } from './date.js';
7
- /** true if `date` falls within [start, end] (inclusive, day granularity). */
8
- export function eventCoversDay(event, date) {
9
- const day = startOfDay(date).getTime();
10
- const start = startOfDay(event.start).getTime();
11
- const end = startOfDay(event.end ?? event.start).getTime();
12
- return day >= start && day <= end;
14
+ // ============================ low-level date algebra ============================
15
+ // Calendar-only date helpers (Semi uses date-fns). Kept local so DatePicker's
16
+ // shared date.ts stays untouched. All local-time, pure.
17
+ const MS_DAY = 86_400_000;
18
+ export function addDaysLocal(d, n) {
19
+ const r = new Date(d);
20
+ r.setDate(r.getDate() + n);
21
+ return r;
22
+ }
23
+ export function addHoursLocal(d, n) {
24
+ const r = new Date(d);
25
+ r.setHours(r.getHours() + n);
26
+ return r;
27
+ }
28
+ export function endOfDay(d) {
29
+ const r = new Date(d);
30
+ r.setHours(23, 59, 59, 999);
31
+ return r;
32
+ }
33
+ export function startOfMonth(d) {
34
+ return new Date(d.getFullYear(), d.getMonth(), 1);
35
+ }
36
+ export function endOfMonth(d) {
37
+ return new Date(d.getFullYear(), d.getMonth() + 1, 0, 23, 59, 59, 999);
38
+ }
39
+ export function startOfWeek(d, weekStartsOn = 0) {
40
+ const day = d.getDay();
41
+ const diff = (day - weekStartsOn + 7) % 7;
42
+ return startOfDay(addDaysLocal(d, -diff));
43
+ }
44
+ export function endOfWeek(d, weekStartsOn = 0) {
45
+ return endOfDay(addDaysLocal(startOfWeek(d, weekStartsOn), 6));
46
+ }
47
+ export function isSameMonth(a, b) {
48
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();
49
+ }
50
+ export function isSameWeek(a, b, weekStartsOn = 0) {
51
+ return isSameDay(startOfWeek(a, weekStartsOn), startOfWeek(b, weekStartsOn));
52
+ }
53
+ /** whole calendar days b - a (positive when b is later) */
54
+ export function differenceInCalendarDays(b, a) {
55
+ return Math.round((startOfDay(b).getTime() - startOfDay(a).getTime()) / MS_DAY);
56
+ }
57
+ export function isBefore(a, b) {
58
+ return a.getTime() < b.getTime();
59
+ }
60
+ export function isAfter(a, b) {
61
+ return a.getTime() > b.getTime();
62
+ }
63
+ export function isWeekend(d) {
64
+ const day = d.getDay();
65
+ return day === 0 || day === 6;
66
+ }
67
+ /** ISO-ish week-of-month index (1-based) for a date, given weekStartsOn */
68
+ export function getWeekOfMonth(date, weekStartsOn = 0) {
69
+ const firstOfMonth = startOfMonth(date);
70
+ const firstWeekStart = startOfWeek(firstOfMonth, weekStartsOn);
71
+ const diff = differenceInCalendarDays(startOfWeek(date, weekStartsOn), firstWeekStart);
72
+ return Math.floor(diff / 7) + 1;
73
+ }
74
+ /** number of week rows the month spans, given weekStartsOn */
75
+ export function getWeeksInMonth(date, weekStartsOn = 0) {
76
+ const first = startOfMonth(date);
77
+ const last = endOfMonth(date);
78
+ const firstWeekStart = startOfWeek(first, weekStartsOn);
79
+ const lastWeekStart = startOfWeek(last, weekStartsOn);
80
+ return Math.round(differenceInCalendarDays(lastWeekStart, firstWeekStart) / 7) + 1;
81
+ }
82
+ export const round = (value) => Math.round(value * 1000) / 1000;
83
+ /** fraction of the day [0,1) at which `value`'s clock time falls (Semi getPos) */
84
+ export function getPos(value) {
85
+ const currSec = (value.getHours() * 60 + value.getMinutes()) * 60 + value.getSeconds();
86
+ return currSec / (24 * 60 * 60);
87
+ }
88
+ const isAllDayEvent = (e) => 'allDay' in e && !!e.allDay;
89
+ const sortByStart = (a, b) => (a.start?.getTime() ?? 0) - (b.start?.getTime() ?? 0);
90
+ function copyEvent(event, date, start, end, allDay = false) {
91
+ return { ...event, date, ...(start ? { start } : {}), ...(end ? { end } : {}), allDay };
13
92
  }
14
93
  /**
15
- * Group events onto a specific day, sorted by start time, capped at `maxPerDay`.
16
- * Multi-day events appear on every day they cover.
94
+ * Normalize a single event: if it has no start, default start = end - 1h (or
95
+ * start-of-day if that would cross a day boundary); symmetric for missing end.
96
+ * (Semi amendEvent)
17
97
  */
18
- export function eventsForDay(events, date, maxPerDay = Infinity) {
19
- const total = events
20
- .filter((e) => eventCoversDay(e, date))
21
- .slice()
22
- .sort((a, b) => {
23
- // all-day events first, then by start time, then stable by key string
24
- if (!!a.allDay !== !!b.allDay)
25
- return a.allDay ? -1 : 1;
26
- const d = a.start.getTime() - b.start.getTime();
27
- if (d !== 0)
28
- return d;
29
- return String(a.key).localeCompare(String(b.key));
30
- });
31
- const cap = maxPerDay < 0 ? 0 : maxPerDay;
32
- const visible = total.slice(0, cap);
33
- return { visible, total, overflow: Math.max(0, total.length - visible.length) };
98
+ export function amendEvent(event) {
99
+ const { start, end } = event;
100
+ if (!start && !end)
101
+ return undefined;
102
+ const e = { ...event };
103
+ if (!start && end) {
104
+ e.start = isSameDay(end, addHoursLocal(end, -1)) ? addHoursLocal(end, -1) : startOfDay(end);
105
+ }
106
+ else if (start) {
107
+ e.end = isSameDay(start, addHoursLocal(start, 1)) ? addHoursLocal(start, 1) : endOfDay(start);
108
+ }
109
+ return e;
110
+ }
111
+ /** split a spanned all-day event into one copy per covered day (Semi parseAllDayEvent) */
112
+ export function parseAllDayEvent(event, allDay = true, currDate) {
113
+ const res = [];
114
+ const { start, end } = event;
115
+ if (start && end) {
116
+ const diff = differenceInCalendarDays(end, start);
117
+ for (let day = 0; day <= diff; day += 1) {
118
+ res.push(copyEvent(event, addDaysLocal(start, day), undefined, undefined, allDay));
119
+ }
120
+ }
121
+ else {
122
+ const date = start ?? end ?? currDate ?? new Date();
123
+ res.push(copyEvent(event, startOfDay(date), undefined, undefined, allDay));
124
+ }
125
+ return res;
34
126
  }
35
127
  /**
36
- * Build a map (keyed by `YYYY-M-D`) of events-per-day for a set of cells,
37
- * so the render layer can look up each grid cell in O(1).
128
+ * Split an event into per-day copies (Semi parseEvent). Same-day timed events
129
+ * stay whole; timed events spanning < 24h split into a head (to end-of-day) and
130
+ * a tail (start-of-next-day); longer/all-day span into daily all-day copies.
38
131
  */
39
- export function groupEventsByDays(events, days, maxPerDay = Infinity) {
40
- const map = new Map();
41
- for (const date of days) {
42
- map.set(dayKey(date), eventsForDay(events, date, maxPerDay));
132
+ export function parseEvent(event) {
133
+ const e = { ...event };
134
+ const { start, end } = e;
135
+ let res = [];
136
+ if (isAllDayEvent(e))
137
+ return parseAllDayEvent(e);
138
+ if (start && end) {
139
+ const s = isBefore(start, end) ? start : end;
140
+ const en = isBefore(start, end) ? end : start;
141
+ e.start = s;
142
+ e.end = en;
143
+ if (isSameDay(s, en)) {
144
+ res.push(copyEvent(e, startOfDay(s)));
145
+ }
146
+ else if (Math.abs(en.getTime() - s.getTime()) < MS_DAY) {
147
+ res.push(copyEvent(e, startOfDay(s), undefined, endOfDay(s)));
148
+ res.push(copyEvent(e, startOfDay(en), startOfDay(en)));
149
+ }
150
+ else {
151
+ res = res.concat(parseAllDayEvent(e));
152
+ }
153
+ }
154
+ else {
155
+ const amend = amendEvent(e);
156
+ if (amend)
157
+ res.push(copyEvent(amend, startOfDay(amend.start)));
158
+ }
159
+ return res;
160
+ }
161
+ /** split all events into all-day vs timed buckets (Semi _parseEvents) */
162
+ export function parseEvents(events) {
163
+ const allDay = [];
164
+ const day = [];
165
+ for (const event of events) {
166
+ for (const item of parseEvent(event)) {
167
+ if (item.allDay)
168
+ allDay.push(item);
169
+ else
170
+ day.push(item);
171
+ }
172
+ }
173
+ return { allDay, day };
174
+ }
175
+ /** group dated events into a Map keyed by start-of-day string (Semi convertEventsArrToMap) */
176
+ export function convertEventsArrToMap(arr, key, normalize) {
177
+ const res = new Map();
178
+ for (const item of arr) {
179
+ const val = item[key] ?? item.date;
180
+ const k = (normalize ? normalize(val) : val).toString();
181
+ const bucket = res.get(k);
182
+ if (bucket)
183
+ bucket.push(item);
184
+ else
185
+ res.set(k, [item]);
186
+ }
187
+ return res;
188
+ }
189
+ /** compute a timed event's startPos/endPos on its day (Semi renderDailyEvent) */
190
+ export function renderDailyEvent(event) {
191
+ let { start, end } = event;
192
+ let startPos;
193
+ let endPos;
194
+ if (isAllDayEvent(event)) {
195
+ startPos = 0;
196
+ endPos = 0;
43
197
  }
44
- return map;
198
+ else if (!start || !end) {
199
+ const amend = amendEvent(event);
200
+ endPos = getPos(amend.end);
201
+ startPos = getPos(amend.start);
202
+ }
203
+ else {
204
+ if (!isBefore(start, end))
205
+ [start, end] = [end, start];
206
+ startPos = getPos(start);
207
+ endPos = getPos(end);
208
+ }
209
+ return {
210
+ key: event.key,
211
+ startPos: round(startPos),
212
+ endPos: round(endPos),
213
+ children: event.children,
214
+ allDay: !!event.allDay,
215
+ };
45
216
  }
46
- /** stable per-day map key (local time) */
47
- export function dayKey(date) {
48
- return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;
217
+ /**
218
+ * Timed events for one calendar day, positioned and offset for overlaps
219
+ * (Semi getParseDailyEvents). Events sharing an identical [startPos,endPos]
220
+ * are laid out side-by-side via the `left` percentage.
221
+ */
222
+ export function getDailyEvents(events, date) {
223
+ const key = startOfDay(date).toString();
224
+ const parsed = parseEvents(events);
225
+ const allDayMap = convertEventsArrToMap(parsed.allDay, 'date', startOfDay);
226
+ const dayMap = convertEventsArrToMap(parsed.day, 'date', null);
227
+ const allDay = allDayMap.get(key) ?? [];
228
+ const dayRaw = dayMap.get(key) ?? [];
229
+ const positioned = dayRaw.map(renderDailyEvent);
230
+ // group by identical position span
231
+ const spanGroups = new Map();
232
+ for (const item of positioned) {
233
+ const gk = `${item.startPos}-${item.endPos}`;
234
+ spanGroups.set(gk, (spanGroups.get(gk) ?? 0) + 1);
235
+ }
236
+ const countMap = new Map();
237
+ const day = positioned.map((item) => {
238
+ const gk = `${item.startPos}-${item.endPos}`;
239
+ const prev = countMap.get(gk);
240
+ const cur = prev === undefined ? 0 : prev + 1;
241
+ countMap.set(gk, cur);
242
+ const groupSize = spanGroups.get(gk) ?? 1;
243
+ const left = cur !== 0 ? `${(cur / groupSize) * 100}%` : 0;
244
+ return { ...item, left };
245
+ });
246
+ return { day, allDay };
49
247
  }
50
- /** true if `date` is strictly before today (day granularity) */
51
- export function isPastDay(date, today) {
52
- return startOfDay(date).getTime() < startOfDay(today).getTime();
248
+ const isDateInRange = (date, start, end) => date.getTime() < end.getTime() && date.getTime() >= start.getTime();
249
+ const sortDateStr = (a, b) => isBefore(new Date(a), new Date(b)) ? -1 : 1;
250
+ /** filter a day-keyed event map to those overlapping [start,end) (Semi filterEvents) */
251
+ function filterEvents(events, start, end) {
252
+ const res = new Map();
253
+ for (const day of events.keys()) {
254
+ const item = events.get(day);
255
+ const date = new Date(day);
256
+ if (isDateInRange(date, start, end)) {
257
+ res.set(day, res.has(day) ? [...res.get(day), ...item] : item);
258
+ }
259
+ else if (isBefore(end, date)) {
260
+ // beyond range: drop
261
+ }
262
+ else {
263
+ const filtered = item.filter((i) => !i.end || !isBefore(i.end, start));
264
+ const k = start.toString();
265
+ res.set(k, res.has(k) ? [...res.get(k), ...filtered] : item);
266
+ }
267
+ }
268
+ return res;
53
269
  }
54
270
  /**
55
- * Split a day's events into an all-day bucket and per-hour buckets for the
56
- * day timeline (`mode='day'`). An event is "timed" on `date` only when it
57
- * actually starts on that calendar day and is not flagged `allDay`; its hour
58
- * is clamped into [fromHour, toHour]. Everything else covering the day (all-day
59
- * flagged, or multi-day events whose start falls on another day) goes to
60
- * `allDay`. Pure: no DOM, no mutation of inputs.
271
+ * Arrange all-day/spanned events across a [rangeStart,rangeEnd) row, stacking
272
+ * overlaps into rows and computing leftPos/width/topInd (Semi parseRangeAllDayEvent).
273
+ * `parsed` is a working matrix [row][col]; returns it mutated.
61
274
  */
62
- export function timelineForDay(events, date, fromHour = 0, toHour = 23) {
63
- const lo = Math.max(0, Math.min(23, Math.floor(fromHour)));
64
- const hi = Math.max(lo, Math.min(23, Math.floor(toHour)));
65
- const covering = events.filter((e) => eventCoversDay(e, date));
66
- const allDay = [];
67
- const timed = [];
68
- for (const e of covering) {
69
- if (e.allDay || !isSameDay(e.start, date)) {
70
- allDay.push(e);
275
+ function parseRangeAllDayEvent(event, startDate, rangeStart, rangeEnd, parsed) {
276
+ const dateRangeLen = differenceInCalendarDays(rangeEnd, rangeStart);
277
+ event
278
+ .slice()
279
+ .sort((a, b) => sortByStart(a, b))
280
+ .forEach((item) => {
281
+ const { end } = item;
282
+ const j = differenceInCalendarDays(startDate, rangeStart);
283
+ let i = 0;
284
+ while (parsed[i] && parsed[i][j])
285
+ i++;
286
+ let dateLength;
287
+ if (!end) {
288
+ dateLength = 0;
289
+ }
290
+ else {
291
+ dateLength = isDateInRange(end, rangeStart, rangeEnd)
292
+ ? differenceInCalendarDays(end, startDate)
293
+ : differenceInCalendarDays(rangeEnd, startDate);
294
+ }
295
+ const info = {
296
+ key: item.key,
297
+ children: item.children,
298
+ leftPos: round(j / dateRangeLen),
299
+ width: Math.min(1 - round(j / dateRangeLen), round(((dateLength + 1) * 1) / dateRangeLen)),
300
+ topInd: i,
301
+ };
302
+ for (let dist = 0; dist <= dateLength; dist += 1) {
303
+ if (!parsed[i])
304
+ parsed[i] = [];
305
+ parsed[i][j + dist] = dist > 0 ? item : info;
306
+ }
307
+ });
308
+ return parsed;
309
+ }
310
+ /** pull the positioned span events out of the working matrix */
311
+ function collectSpanEvents(parsed) {
312
+ const res = [];
313
+ for (const row of parsed) {
314
+ if (!row)
71
315
  continue;
316
+ for (const item of row) {
317
+ if (item && 'leftPos' in item)
318
+ res.push(item);
72
319
  }
73
- const hour = Math.max(lo, Math.min(hi, e.start.getHours()));
74
- timed.push({ hour, event: e });
75
320
  }
76
- timed.sort((a, b) => {
77
- const d = a.event.start.getTime() - b.event.start.getTime();
78
- if (d !== 0)
79
- return d;
80
- return String(a.event.key).localeCompare(String(b.event.key));
321
+ return res;
322
+ }
323
+ /**
324
+ * Lay out all-day/spanned events across a date range (week or multi-day view).
325
+ * `rangeStart` inclusive, `rangeEnd` exclusive (Semi's left-closed-right-open).
326
+ */
327
+ export function parseSpanEvents(allDayEvents, rangeStart, rangeEnd) {
328
+ const map = convertEventsArrToMap(allDayEvents, 'start', startOfDay);
329
+ const filtered = filterEvents(map, rangeStart, rangeEnd);
330
+ let parsed = [[]];
331
+ [...filtered.keys()].sort(sortDateStr).forEach((k) => {
332
+ const startDate = new Date(k);
333
+ const curr = filtered.get(k).filter((e) => isSameDay(e.date, startDate));
334
+ parsed = parseRangeAllDayEvent(curr, startDate, rangeStart, rangeEnd, parsed);
335
+ });
336
+ return collectSpanEvents(parsed);
337
+ }
338
+ /** week-scoped span layout (Semi parseWeeklyAllDayEvents) */
339
+ export function parseWeekSpanEvents(allDayEvents, weekStart, weekStartsOn = 0) {
340
+ return parseSpanEvents(allDayEvents, weekStart, addDaysLocal(endOfWeek(weekStart, weekStartsOn), 1));
341
+ }
342
+ /** the all-day bucket (start-of-day keyed) for a set of events, for span layout */
343
+ export function allDayEventMap(events) {
344
+ return parseEvents(events).allDay;
345
+ }
346
+ /** number of stacking rows a span layout needs (Semi calcRowHeight) */
347
+ export function calcRowHeight(events) {
348
+ const tops = events.map((e) => e.topInd);
349
+ return tops.length ? Math.max(...tops) + 1 : 1;
350
+ }
351
+ function collectDailyEvents(events) {
352
+ const collections = [];
353
+ events.forEach((row, rowInd) => {
354
+ if (!row)
355
+ return;
356
+ row.forEach((event, ind) => {
357
+ if (!collections[ind])
358
+ collections[ind] = [];
359
+ collections[ind][rowInd] = event;
360
+ });
81
361
  });
82
- const byHour = new Map();
83
- for (const { hour, event } of timed) {
84
- const list = byHour.get(hour);
85
- if (list)
86
- list.push(event);
362
+ return collections;
363
+ }
364
+ /**
365
+ * Lay out a month's events by week row (Semi getParseMonthlyEvents). Returns a
366
+ * map week-index → { day, display }. The render layer counts how many events a
367
+ * given day cell holds beyond `itemLimit` for the "+N" affordance.
368
+ */
369
+ export function getMonthEvents(events, displayValue, weekStartsOn = 0) {
370
+ const firstDayOfMonth = startOfMonth(displayValue);
371
+ const lastDayOfMonth = endOfMonth(displayValue);
372
+ const currDate = displayValue;
373
+ const dated = [];
374
+ events
375
+ .slice()
376
+ .sort((a, b) => {
377
+ if (a.start && b.start) {
378
+ if (isBefore(a.start, b.start))
379
+ return -1;
380
+ if (isAfter(a.start, b.start))
381
+ return 1;
382
+ }
383
+ return 0;
384
+ })
385
+ .forEach((event) => {
386
+ dated.push(...parseAllDayEvent(event, event.allDay, currDate));
387
+ });
388
+ const perWeek = {};
389
+ const push = (item, ind) => {
390
+ if (perWeek[ind])
391
+ perWeek[ind].push(item);
87
392
  else
88
- byHour.set(hour, [event]);
393
+ perWeek[ind] = [item];
394
+ };
395
+ for (const item of dated) {
396
+ if (isSameMonth(item.date, displayValue)) {
397
+ push(item, getWeekOfMonth(item.date, weekStartsOn) - 1);
398
+ continue;
399
+ }
400
+ if (isBefore(item.date, firstDayOfMonth)) {
401
+ if (isSameWeek(item.date, firstDayOfMonth, weekStartsOn))
402
+ push(item, 0);
403
+ continue;
404
+ }
405
+ if (isAfter(item.date, lastDayOfMonth)) {
406
+ if (isSameWeek(item.date, lastDayOfMonth, weekStartsOn)) {
407
+ push(item, getWeekOfMonth(lastDayOfMonth, weekStartsOn) - 1);
408
+ }
409
+ }
410
+ }
411
+ const result = {};
412
+ for (const k of Object.keys(perWeek)) {
413
+ const ind = Number(k);
414
+ const week = perWeek[ind];
415
+ const weekStart = startOfWeek(week[0].date, weekStartsOn);
416
+ const weekEnd = addDaysLocal(endOfWeek(weekStart, weekStartsOn), 1);
417
+ // filterEvents 把「起始在本周之前但延续进本周」的跨周长条重映射到 weekStart,
418
+ // 否则这些片段的 start 键落在周外、被 isSameDay 过滤丢失(跨月长条中间周消失的根因,
419
+ // 对齐 Semi filterWeeklyEvents)。
420
+ const weekMap = filterEvents(convertEventsArrToMap(week, 'start', startOfDay), weekStart, weekEnd);
421
+ // parse span layout for this week
422
+ let parsed = [[]];
423
+ [...weekMap.keys()].sort(sortDateStr).forEach((mk) => {
424
+ const startDate = new Date(mk);
425
+ const curr = weekMap.get(mk).filter((e) => isSameDay(e.date, startDate));
426
+ parsed = parseRangeAllDayEvent(curr, startDate, weekStart, addDaysLocal(endOfWeek(weekStart, weekStartsOn), 1), parsed);
427
+ });
428
+ result[ind] = {
429
+ day: collectDailyEvents(parsed),
430
+ display: collectSpanEvents(parsed),
431
+ };
89
432
  }
90
- return { allDay, byHour };
433
+ return result;
91
434
  }
92
- /** re-export for convenience so the render layer imports calendar bits from one place */
435
+ // ============================ re-exports ============================
93
436
  export { isSameDay };
94
437
  //# sourceMappingURL=calendar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AA2BlD,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAAC,KAAoB,EAAE,IAAU;IAC7D,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3D,OAAO,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAgC,EAChC,IAAU,EACV,SAAS,GAAG,QAAQ;IAEpB,MAAM,KAAK,GAAG,MAAM;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;SACtC,KAAK,EAAE;SACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,sEAAsE;QACtE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IACL,MAAM,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAgC,EAChC,IAAqB,EACrB,SAAS,GAAG,QAAQ;IAEpB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,MAAM,CAAC,IAAU;IAC/B,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;AACtE,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,SAAS,CAAC,IAAU,EAAE,KAAW;IAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AAClE,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAgC,EAChC,IAAU,EACV,QAAQ,GAAG,CAAC,EACZ,MAAM,GAAG,EAAE;IAEX,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,MAAM,KAAK,GAA6C,EAAE,CAAC;IAC3D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAClB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5D,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAClD,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YACtB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,yFAAyF;AACzF,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"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"}