@formicoidea/labre-core 1.0.0 → 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 (207) hide show
  1. package/architecture/code.c4 +48 -44
  2. package/architecture/likec4.config.json +3 -3
  3. package/dist/_pkgs/affine-block-root/configs/toolbar.d.ts +1 -1
  4. package/dist/_pkgs/affine-block-root/configs/toolbar.js +4 -2
  5. package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.js +12 -12
  6. package/dist/_pkgs/affine-components/context-menu/menu-all.d.ts +1 -0
  7. package/dist/_pkgs/affine-components/context-menu/menu-renderer.d.ts +3 -1
  8. package/dist/_pkgs/affine-components/context-menu/menu-renderer.js +9 -1
  9. package/dist/_pkgs/affine-components/context-menu/menu.d.ts +7 -0
  10. package/dist/_pkgs/affine-components/context-menu/menu.js +5 -0
  11. package/dist/_pkgs/affine-components/context-menu/sub-menu.d.ts +19 -1
  12. package/dist/_pkgs/affine-components/context-menu/sub-menu.js +46 -7
  13. package/dist/_pkgs/affine-components/highlight-dropdown-menu/highlight-duotone-icon.js +8 -8
  14. package/dist/_pkgs/affine-components/highlight-dropdown-menu/text-duotone-icon.js +11 -11
  15. package/dist/_pkgs/affine-database-block/configs/slash-menu.d.ts +24 -0
  16. package/dist/_pkgs/affine-database-block/configs/slash-menu.js +52 -37
  17. package/dist/_pkgs/affine-database-block/creation-menu.d.ts +6 -0
  18. package/dist/_pkgs/affine-database-block/data-source.d.ts +6 -0
  19. package/dist/_pkgs/affine-database-block/data-source.js +16 -0
  20. package/dist/_pkgs/affine-database-block/database-block-styles.js +4 -3
  21. package/dist/_pkgs/affine-database-block/database-block.d.ts +23 -0
  22. package/dist/_pkgs/affine-database-block/database-block.js +129 -19
  23. package/dist/_pkgs/affine-database-block/database-dnd-preview-block.js +5 -1
  24. package/dist/_pkgs/affine-database-block/detail-panel/block-renderer.js +5 -2
  25. package/dist/_pkgs/affine-database-block/detail-panel/note-renderer.js +3 -2
  26. package/dist/_pkgs/affine-database-block/external-data-source.d.ts +17 -0
  27. package/dist/_pkgs/affine-database-block/external-data-source.js +54 -4
  28. package/dist/_pkgs/affine-database-block/index.d.ts +3 -0
  29. package/dist/_pkgs/affine-database-block/index.js +5 -0
  30. package/dist/_pkgs/affine-database-block/linked-view.d.ts +59 -0
  31. package/dist/_pkgs/affine-database-block/linked-view.js +131 -1
  32. package/dist/_pkgs/affine-database-block/properties/created-time/define.js +3 -1
  33. package/dist/_pkgs/affine-database-block/properties/link/cell-renderer.js +3 -2
  34. package/dist/_pkgs/affine-database-block/properties/link/define.js +3 -1
  35. package/dist/_pkgs/affine-database-block/properties/rich-text/define.js +3 -1
  36. package/dist/_pkgs/affine-database-block/properties/text/hosted.js +1 -0
  37. package/dist/_pkgs/affine-database-block/properties/title/define.js +3 -1
  38. package/dist/_pkgs/affine-database-block/properties/title/hosted.js +1 -0
  39. package/dist/_pkgs/affine-database-block/service/new-row-menu.d.ts +1 -1
  40. package/dist/_pkgs/affine-database-block/service/new-row-menu.js +1 -1
  41. package/dist/_pkgs/affine-database-block/translations.d.ts +29 -0
  42. package/dist/_pkgs/affine-database-block/translations.js +104 -0
  43. package/dist/_pkgs/affine-database-block/turn-into-source.d.ts +38 -0
  44. package/dist/_pkgs/affine-database-block/turn-into-source.js +187 -0
  45. package/dist/_pkgs/affine-database-block/view-deletion.d.ts +15 -0
  46. package/dist/_pkgs/affine-database-block/view-deletion.js +113 -0
  47. package/dist/_pkgs/affine-database-block/views/index.d.ts +7 -9
  48. package/dist/_pkgs/affine-database-block/views/index.js +7 -10
  49. package/dist/_pkgs/affine-database-engine/core/common/properties.js +7 -7
  50. package/dist/_pkgs/affine-database-engine/core/common/property-menu.d.ts +18 -2
  51. package/dist/_pkgs/affine-database-engine/core/common/property-menu.js +78 -27
  52. package/dist/_pkgs/affine-database-engine/core/data-source/base.d.ts +11 -0
  53. package/dist/_pkgs/affine-database-engine/core/data-source/base.js +3 -0
  54. package/dist/_pkgs/affine-database-engine/core/detail/detail.js +8 -5
  55. package/dist/_pkgs/affine-database-engine/core/detail/field.js +14 -7
  56. package/dist/_pkgs/affine-database-engine/core/filter/add-filter.js +4 -2
  57. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/boolean.js +7 -4
  58. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/create.d.ts +9 -1
  59. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/create.js +2 -0
  60. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/date.js +7 -4
  61. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/multi-tag.js +17 -8
  62. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/number.js +6 -6
  63. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/string.js +19 -12
  64. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/tag.js +9 -4
  65. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/unknown.js +7 -4
  66. package/dist/_pkgs/affine-database-engine/core/filter/literal/define.js +6 -4
  67. package/dist/_pkgs/affine-database-engine/core/filter/literal/matcher.d.ts +2 -1
  68. package/dist/_pkgs/affine-database-engine/core/filter/literal/matcher.js +3 -2
  69. package/dist/_pkgs/affine-database-engine/core/filter/literal/types.d.ts +4 -1
  70. package/dist/_pkgs/affine-database-engine/core/filter/literal/types.js +1 -1
  71. package/dist/_pkgs/affine-database-engine/core/group-by/define.js +11 -9
  72. package/dist/_pkgs/affine-database-engine/core/group-by/group-title.js +16 -6
  73. package/dist/_pkgs/affine-database-engine/core/group-by/locate-row.d.ts +16 -0
  74. package/dist/_pkgs/affine-database-engine/core/group-by/locate-row.js +32 -0
  75. package/dist/_pkgs/affine-database-engine/core/group-by/renderer/date-group.js +10 -3
  76. package/dist/_pkgs/affine-database-engine/core/group-by/setting.d.ts +2 -0
  77. package/dist/_pkgs/affine-database-engine/core/group-by/setting.js +40 -28
  78. package/dist/_pkgs/affine-database-engine/core/group-by/trait.d.ts +3 -0
  79. package/dist/_pkgs/affine-database-engine/core/group-by/trait.js +8 -0
  80. package/dist/_pkgs/affine-database-engine/core/group-by/types.d.ts +3 -1
  81. package/dist/_pkgs/affine-database-engine/core/group-by/types.js +1 -1
  82. package/dist/_pkgs/affine-database-engine/core/property/types.d.ts +7 -0
  83. package/dist/_pkgs/affine-database-engine/core/property/types.js +1 -1
  84. package/dist/_pkgs/affine-database-engine/core/sort/add-sort.js +3 -1
  85. package/dist/_pkgs/affine-database-engine/core/statistics/any.js +43 -21
  86. package/dist/_pkgs/affine-database-engine/core/statistics/checkbox.js +29 -14
  87. package/dist/_pkgs/affine-database-engine/core/statistics/number.js +54 -31
  88. package/dist/_pkgs/affine-database-engine/core/statistics/types.d.ts +8 -0
  89. package/dist/_pkgs/affine-database-engine/core/statistics/types.js +2 -1
  90. package/dist/_pkgs/affine-database-engine/core/utils/wording.d.ts +20 -1
  91. package/dist/_pkgs/affine-database-engine/core/utils/wording.js +24 -0
  92. package/dist/_pkgs/affine-database-engine/core/view-manager/property.d.ts +7 -0
  93. package/dist/_pkgs/affine-database-engine/core/view-manager/property.js +29 -5
  94. package/dist/_pkgs/affine-database-engine/core/view-manager/single-view.d.ts +14 -0
  95. package/dist/_pkgs/affine-database-engine/core/view-manager/single-view.js +11 -0
  96. package/dist/_pkgs/affine-database-engine/property-presets/checkbox/define.js +3 -1
  97. package/dist/_pkgs/affine-database-engine/property-presets/date/define.js +3 -1
  98. package/dist/_pkgs/affine-database-engine/property-presets/multi-select/define.js +3 -1
  99. package/dist/_pkgs/affine-database-engine/property-presets/number/define.js +3 -1
  100. package/dist/_pkgs/affine-database-engine/property-presets/number/utils/formats.d.ts +3 -0
  101. package/dist/_pkgs/affine-database-engine/property-presets/number/utils/formats.js +56 -9
  102. package/dist/_pkgs/affine-database-engine/property-presets/progress/define.js +3 -1
  103. package/dist/_pkgs/affine-database-engine/property-presets/select/define.js +3 -1
  104. package/dist/_pkgs/affine-database-engine/property-presets/text/define.js +3 -1
  105. package/dist/_pkgs/affine-database-engine/translations.d.ts +133 -5
  106. package/dist/_pkgs/affine-database-engine/translations.js +625 -9
  107. package/dist/_pkgs/affine-database-engine/view-presets/convert.js +0 -28
  108. package/dist/_pkgs/affine-database-engine/view-presets/effect.js +0 -2
  109. package/dist/_pkgs/affine-database-engine/view-presets/flat/flat-converts.js +2 -4
  110. package/dist/_pkgs/affine-database-engine/view-presets/flat/flat-view-ui.d.ts +57 -0
  111. package/dist/_pkgs/affine-database-engine/view-presets/flat/flat-view-ui.js +113 -4
  112. package/dist/_pkgs/affine-database-engine/view-presets/gallery/gallery-view.js +2 -1
  113. package/dist/_pkgs/affine-database-engine/view-presets/index.d.ts +0 -2
  114. package/dist/_pkgs/affine-database-engine/view-presets/index.js +0 -3
  115. package/dist/_pkgs/affine-database-engine/view-presets/kanban/kanban-view-manager.js +2 -0
  116. package/dist/_pkgs/affine-database-engine/view-presets/kanban/mobile/group.js +7 -5
  117. package/dist/_pkgs/affine-database-engine/view-presets/kanban/mobile/kanban-view-ui-logic.d.ts +5 -0
  118. package/dist/_pkgs/affine-database-engine/view-presets/kanban/mobile/kanban-view-ui-logic.js +25 -3
  119. package/dist/_pkgs/affine-database-engine/view-presets/kanban/mobile/menu.js +12 -6
  120. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/controller/selection.d.ts +8 -0
  121. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/controller/selection.js +35 -12
  122. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/group.js +7 -5
  123. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/header.js +5 -1
  124. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/kanban-view-ui-logic.d.ts +5 -0
  125. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/kanban-view-ui-logic.js +8 -4
  126. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/menu.js +12 -6
  127. package/dist/_pkgs/affine-database-engine/view-presets/list/list-view.js +2 -1
  128. package/dist/_pkgs/affine-database-engine/view-presets/table/mobile/column-header.js +6 -4
  129. package/dist/_pkgs/affine-database-engine/view-presets/table/mobile/group.js +6 -5
  130. package/dist/_pkgs/affine-database-engine/view-presets/table/mobile/header.js +2 -2
  131. package/dist/_pkgs/affine-database-engine/view-presets/table/mobile/table-view-ui-logic.d.ts +4 -3
  132. package/dist/_pkgs/affine-database-engine/view-presets/table/mobile/table-view-ui-logic.js +29 -5
  133. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/controller/clipboard.js +6 -2
  134. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/controller/selection.js +2 -0
  135. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/group.js +6 -5
  136. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/header/column-header.js +11 -7
  137. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/header/database-header-column.js +16 -12
  138. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/header/number-format-bar.js +4 -2
  139. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/menu.js +9 -6
  140. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/table-view-ui-logic.d.ts +8 -1
  141. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/table-view-ui-logic.js +29 -7
  142. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/controller/clipboard.js +6 -2
  143. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/controller/selection.js +2 -0
  144. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/bottom/group-footer.js +5 -2
  145. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/bottom/stats/column-stats-column.d.ts +1 -1
  146. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/bottom/stats/column-stats-column.js +14 -6
  147. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/top/group-header.js +5 -2
  148. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/top/group-title.js +5 -3
  149. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/top/header/column-header.js +17 -10
  150. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/top/header/number-format-bar.js +4 -2
  151. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/top/header/single-column-header.js +20 -14
  152. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/row/menu.js +9 -6
  153. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/table-view-ui-logic.d.ts +6 -1
  154. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/table-view-ui-logic.js +30 -3
  155. package/dist/_pkgs/affine-database-engine/view-presets/table/stats/column-stats-column.d.ts +1 -1
  156. package/dist/_pkgs/affine-database-engine/view-presets/table/stats/column-stats-column.js +14 -6
  157. package/dist/_pkgs/affine-database-engine/view-presets/table/table-view-manager.js +2 -0
  158. package/dist/_pkgs/affine-database-engine/widget-presets/quick-setting-bar/filter/condition-view.d.ts +2 -0
  159. package/dist/_pkgs/affine-database-engine/widget-presets/quick-setting-bar/filter/condition-view.js +13 -6
  160. package/dist/_pkgs/affine-database-engine/widget-presets/quick-setting-bar/filter/group-panel-view.js +20 -13
  161. package/dist/_pkgs/affine-database-engine/widget-presets/quick-setting-bar/filter/root-panel-view.js +10 -5
  162. package/dist/_pkgs/affine-database-engine/widget-presets/quick-setting-bar/sort/root-panel.js +8 -5
  163. package/dist/_pkgs/affine-database-engine/widget-presets/tools/presets/search/search.js +2 -2
  164. package/dist/_pkgs/affine-database-engine/widget-presets/tools/presets/table-add-row/add-row.d.ts +6 -0
  165. package/dist/_pkgs/affine-database-engine/widget-presets/tools/presets/table-add-row/add-row.js +49 -4
  166. package/dist/_pkgs/affine-database-engine/widget-presets/tools/presets/view-options/view-settings.d.ts +3 -3
  167. package/dist/_pkgs/affine-database-engine/widget-presets/tools/presets/view-options/view-settings.js +3 -3
  168. package/dist/_pkgs/affine-database-engine/widget-presets/views-bar/views-view.js +5 -0
  169. package/dist/_pkgs/affine-database-view-block/configs/slash-menu.js +6 -3
  170. package/dist/_pkgs/affine-database-view-block/data-view-block.js +5 -4
  171. package/dist/_pkgs/affine-fragment-doc-title/doc-title.d.ts +3 -2
  172. package/dist/_pkgs/affine-fragment-doc-title/doc-title.js +3 -2
  173. package/dist/_pkgs/affine-shared/services/data-source-picker-service.d.ts +130 -1
  174. package/dist/_pkgs/affine-widget-edgeless-zoom-toolbar/index.js +26 -26
  175. package/dist/_pkgs/affine-widget-keyboard-toolbar/config.js +10 -21
  176. package/dist/_pkgs/affine-widget-keyboard-toolbar/icons.js +98 -98
  177. package/dist/_pkgs/affine-widget-page-dragging-area/index.js +10 -10
  178. package/dist/_pkgs/affine-widget-viewport-overlay/index.js +13 -13
  179. package/package.json +1 -1
  180. package/dist/_pkgs/affine-database-engine/view-presets/calendar/calendar-view-manager.d.ts +0 -70
  181. package/dist/_pkgs/affine-database-engine/view-presets/calendar/calendar-view-manager.js +0 -449
  182. package/dist/_pkgs/affine-database-engine/view-presets/calendar/define.d.ts +0 -10
  183. package/dist/_pkgs/affine-database-engine/view-presets/calendar/define.js +0 -29
  184. package/dist/_pkgs/affine-database-engine/view-presets/calendar/effect.d.ts +0 -1
  185. package/dist/_pkgs/affine-database-engine/view-presets/calendar/effect.js +0 -4
  186. package/dist/_pkgs/affine-database-engine/view-presets/calendar/index.d.ts +0 -6
  187. package/dist/_pkgs/affine-database-engine/view-presets/calendar/index.js +0 -6
  188. package/dist/_pkgs/affine-database-engine/view-presets/calendar/layout.d.ts +0 -37
  189. package/dist/_pkgs/affine-database-engine/view-presets/calendar/layout.js +0 -138
  190. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/actions.d.ts +0 -7
  191. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/actions.js +0 -64
  192. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/dnd.d.ts +0 -32
  193. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/dnd.js +0 -159
  194. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/effect.d.ts +0 -1
  195. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/effect.js +0 -7
  196. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/hit-test.d.ts +0 -1
  197. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/hit-test.js +0 -28
  198. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/styles.d.ts +0 -1
  199. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/styles.js +0 -707
  200. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/view.d.ts +0 -89
  201. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/view.js +0 -849
  202. package/dist/_pkgs/affine-database-engine/view-presets/calendar/renderer.d.ts +0 -2
  203. package/dist/_pkgs/affine-database-engine/view-presets/calendar/renderer.js +0 -8
  204. package/dist/_pkgs/affine-database-engine/view-presets/calendar/source.d.ts +0 -8
  205. package/dist/_pkgs/affine-database-engine/view-presets/calendar/source.js +0 -3
  206. package/dist/_pkgs/affine-database-engine/view-presets/calendar/types.d.ts +0 -79
  207. package/dist/_pkgs/affine-database-engine/view-presets/calendar/types.js +0 -1
@@ -1,138 +0,0 @@
1
- const startOfDay = (date) => new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();
2
- const addDays = (date, days) => {
3
- const current = new Date(date);
4
- return startOfDay(new Date(current.getFullYear(), current.getMonth(), current.getDate() + days));
5
- };
6
- const endOfDay = (date) => addDays(date, 1) - 1;
7
- const toDate = (value) => value instanceof Date ? value : new Date(value);
8
- export const getCalendarVisibleMonthRange = (month, weekStartsOn = 0) => {
9
- const cursor = toDate(month);
10
- const monthStart = new Date(cursor.getFullYear(), cursor.getMonth(), 1);
11
- const monthEnd = new Date(cursor.getFullYear(), cursor.getMonth() + 1, 0);
12
- const startOffset = (monthStart.getDay() - weekStartsOn + 7) % 7;
13
- const endOffset = (weekStartsOn + 6 - monthEnd.getDay() + 7) % 7;
14
- const from = startOfDay(new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate() - startOffset));
15
- const to = endOfDay(startOfDay(new Date(monthEnd.getFullYear(), monthEnd.getMonth(), monthEnd.getDate() + endOffset)));
16
- return {
17
- from,
18
- to,
19
- monthStart: startOfDay(monthStart),
20
- monthEnd: endOfDay(startOfDay(monthEnd)),
21
- };
22
- };
23
- const isRangeEntry = (entry) => entry.endAt != null &&
24
- getRangeEndDay(entry) > startOfDay(new Date(entry.startAt));
25
- const getRangeEndDay = (entry) => {
26
- const endAt = entry.endAt ?? entry.startAt;
27
- const end = new Date(endAt);
28
- if (entry.kind === 'external' &&
29
- entry.allDay &&
30
- endAt > entry.startAt &&
31
- end.getHours() === 0 &&
32
- end.getMinutes() === 0 &&
33
- end.getSeconds() === 0 &&
34
- end.getMilliseconds() === 0) {
35
- return addDays(startOfDay(end), -1);
36
- }
37
- return startOfDay(end);
38
- };
39
- const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
40
- const getDayOffset = (days, date) => days.findIndex(day => day.date === date);
41
- const assignSegmentSlots = (weeks, segments) => {
42
- for (let weekIndex = 0; weekIndex < weeks.length; weekIndex++) {
43
- const weekSegments = segments.filter(segment => segment.weekIndex === weekIndex);
44
- const slots = [];
45
- for (const segment of weekSegments) {
46
- let slot = 0;
47
- while (slots[slot]?.some((occupied, index) => occupied &&
48
- index >= segment.startIndex &&
49
- index < segment.startIndex + segment.span)) {
50
- slot++;
51
- }
52
- const slotDays = (slots[slot] ??= Array.from({ length: 7 }, () => false));
53
- for (let index = segment.startIndex; index < segment.startIndex + segment.span; index++) {
54
- slotDays[index] = true;
55
- }
56
- segment.slot = slot;
57
- }
58
- }
59
- };
60
- export const getCalendarDaySegmentSlots = (day, ignoredEntryId) => {
61
- return Math.max(0, ...day.segments
62
- .filter(segment => segment.entry.id !== ignoredEntryId)
63
- .map(segment => segment.slot + 1));
64
- };
65
- export const getCalendarDayContentSlots = (day, ignoredEntryId) => {
66
- return (getCalendarDaySegmentSlots(day, ignoredEntryId) +
67
- day.entries.filter(entry => entry.id !== ignoredEntryId).length);
68
- };
69
- export const createCalendarMonthLayout = ({ month, entries, weekStartsOn = 0, }) => {
70
- const range = getCalendarVisibleMonthRange(month, weekStartsOn);
71
- const cursor = toDate(month);
72
- const days = [];
73
- const dayByTime = new Map();
74
- for (let date = range.from; date <= range.to; date = addDays(date, 1)) {
75
- const day = {
76
- date,
77
- inMonth: new Date(date).getMonth() === cursor.getMonth() &&
78
- new Date(date).getFullYear() === cursor.getFullYear(),
79
- entries: [],
80
- segments: [],
81
- };
82
- days.push(day);
83
- dayByTime.set(date, day);
84
- }
85
- for (const entry of entries) {
86
- if (isRangeEntry(entry)) {
87
- continue;
88
- }
89
- const day = dayByTime.get(startOfDay(new Date(entry.startAt)));
90
- if (day) {
91
- day.entries.push(entry);
92
- }
93
- }
94
- const segments = [];
95
- const rangeEntries = entries.filter(isRangeEntry);
96
- const visibleEndDay = startOfDay(new Date(range.to));
97
- for (const entry of rangeEntries) {
98
- const entryStart = startOfDay(new Date(entry.startAt));
99
- const entryEnd = getRangeEndDay(entry);
100
- if (entryEnd < range.from || entryStart > visibleEndDay) {
101
- continue;
102
- }
103
- const start = clamp(entryStart, range.from, visibleEndDay);
104
- const end = clamp(entryEnd, range.from, visibleEndDay);
105
- const startOffset = getDayOffset(days, start);
106
- const endOffset = getDayOffset(days, end);
107
- if (startOffset < 0 || endOffset < 0) {
108
- continue;
109
- }
110
- let offset = startOffset;
111
- while (offset <= endOffset) {
112
- const weekIndex = Math.floor(offset / 7);
113
- const startIndex = offset % 7;
114
- const weekEndOffset = weekIndex * 7 + 6;
115
- const span = Math.min(endOffset, weekEndOffset) - offset + 1;
116
- const segment = {
117
- entry,
118
- weekIndex,
119
- startIndex,
120
- span,
121
- slot: 0,
122
- startsBeforeWeek: startOffset < weekIndex * 7,
123
- endsAfterWeek: endOffset > weekEndOffset,
124
- };
125
- segments.push(segment);
126
- for (let index = 0; index < span; index++) {
127
- days[offset + index]?.segments.push(segment);
128
- }
129
- offset += span;
130
- }
131
- }
132
- const weeks = [];
133
- for (let index = 0; index < days.length; index += 7) {
134
- weeks.push(days.slice(index, index + 7));
135
- }
136
- assignSegmentSlots(weeks, segments);
137
- return { from: range.from, to: range.to, weeks, days, segments };
138
- };
@@ -1,7 +0,0 @@
1
- import type { DataViewRootUILogic } from '../../../core/data-view.js';
2
- import type { CalendarSingleView } from '../calendar-view-manager.js';
3
- import type { CalendarEntry } from '../types.js';
4
- export declare const formatEntryTime: (entry: CalendarEntry) => string;
5
- export declare const openCalendarEntry: (root: DataViewRootUILogic, view: CalendarSingleView, entry: CalendarEntry, target: HTMLElement, options?: {
6
- selectEntry?: (entryId: string | undefined) => void;
7
- }) => void;
@@ -1,64 +0,0 @@
1
- import { popMenu, popupTargetFromElement, } from '../../../../affine-components/context-menu/index.js';
2
- import { CalendarPanelIcon, DateTimeIcon, PinIcon, TextIcon, } from '@blocksuite/icons/lit';
3
- import { html } from 'lit';
4
- const dateTimeFormatter = new Intl.DateTimeFormat(undefined, {
5
- dateStyle: 'medium',
6
- timeStyle: 'short',
7
- });
8
- const dateFormatter = new Intl.DateTimeFormat(undefined, {
9
- dateStyle: 'medium',
10
- });
11
- export const formatEntryTime = (entry) => {
12
- const formatter = entry.allDay ? dateFormatter : dateTimeFormatter;
13
- const start = formatter.format(new Date(entry.startAt));
14
- if (!entry.endAt) {
15
- return start;
16
- }
17
- return `${start} - ${formatter.format(new Date(entry.endAt))}`;
18
- };
19
- export const openCalendarEntry = (root, view, entry, target, options) => {
20
- if (entry.kind === 'row') {
21
- options?.selectEntry?.(entry.id);
22
- root.openDetailPanel({
23
- view,
24
- rowId: entry.rowId,
25
- onClose: () => options?.selectEntry?.(undefined),
26
- });
27
- return;
28
- }
29
- popMenu(popupTargetFromElement(target), {
30
- options: {
31
- items: [
32
- () => html `
33
- <div class="calendar-event-popover">
34
- <div class="calendar-event-popover-title">${entry.title}</div>
35
- <div class="calendar-event-popover-row">
36
- <span class="calendar-event-popover-icon"
37
- >${CalendarPanelIcon()}</span
38
- >
39
- <span>${entry.calendarName ?? 'Calendar event'}</span>
40
- </div>
41
- <div class="calendar-event-popover-row">
42
- <span class="calendar-event-popover-icon">${DateTimeIcon()}</span>
43
- <span>${formatEntryTime(entry)}</span>
44
- </div>
45
- ${entry.location
46
- ? html `<div class="calendar-event-popover-row">
47
- <span class="calendar-event-popover-icon">${PinIcon()}</span>
48
- <span>${entry.location}</span>
49
- </div>`
50
- : ''}
51
- ${entry.description
52
- ? html `<div class="calendar-event-popover-row">
53
- <span class="calendar-event-popover-icon">${TextIcon()}</span>
54
- <span class="calendar-event-popover-description"
55
- >${entry.description}</span
56
- >
57
- </div>`
58
- : ''}
59
- </div>
60
- `,
61
- ],
62
- },
63
- });
64
- };
@@ -1,32 +0,0 @@
1
- import type { DndController } from '../../../../std/index.js';
2
- import type { CalendarEntry, CalendarRowEntry } from '../types.js';
3
- export type CalendarDndEntity = {
4
- type: 'calendar-entry';
5
- entryId: string;
6
- } | {
7
- type: 'doc';
8
- docId: string;
9
- };
10
- export declare const getCalendarDndEntity: (data: unknown) => CalendarDndEntity | undefined;
11
- export type CalendarDndCallbacks = {
12
- getEntry: (entryId: string) => CalendarEntry | undefined;
13
- canDragEntry: () => boolean;
14
- canDrop: (entity: CalendarDndEntity) => boolean;
15
- onEntryDragStart: (entry: CalendarRowEntry) => void;
16
- onEntryDragEnd: () => void;
17
- onDropTargetChange: (date: number | undefined, entity?: CalendarDndEntity) => void;
18
- onDrop: (entity: CalendarDndEntity, date: number) => void;
19
- };
20
- export declare class CalendarDnd {
21
- private readonly dnd;
22
- private readonly callbacks;
23
- private readonly entryCleanups;
24
- private rootCleanup?;
25
- constructor(dnd: DndController | undefined, callbacks: CalendarDndCallbacks);
26
- bindRoot(element?: Element): void;
27
- bindEntry(key: string, entry: CalendarEntry, element?: Element, disabled?: boolean): void;
28
- cleanup(): void;
29
- private cleanupEntry;
30
- private cleanupRoot;
31
- private updateDropTarget;
32
- }
@@ -1,159 +0,0 @@
1
- import { getCalendarDateFromPoint } from './hit-test.js';
2
- const isRecord = (value) => typeof value === 'object' && value !== null;
3
- export const getCalendarDndEntity = (data) => {
4
- if (!isRecord(data)) {
5
- return;
6
- }
7
- const bsEntity = data.bsEntity;
8
- if (isRecord(bsEntity)) {
9
- if (bsEntity.type === 'calendar-entry' &&
10
- typeof bsEntity.entryId === 'string') {
11
- return {
12
- type: 'calendar-entry',
13
- entryId: bsEntity.entryId,
14
- };
15
- }
16
- if (bsEntity.type === 'doc' && typeof bsEntity.docId === 'string') {
17
- return {
18
- type: 'doc',
19
- docId: bsEntity.docId,
20
- };
21
- }
22
- }
23
- const entity = data.entity;
24
- if (isRecord(entity) &&
25
- entity.type === 'doc' &&
26
- typeof entity.id === 'string') {
27
- return {
28
- type: 'doc',
29
- docId: entity.id,
30
- };
31
- }
32
- return;
33
- };
34
- export class CalendarDnd {
35
- constructor(dnd, callbacks) {
36
- this.dnd = dnd;
37
- this.callbacks = callbacks;
38
- this.entryCleanups = new Map();
39
- }
40
- bindRoot(element) {
41
- if (!this.dnd || !(element instanceof HTMLElement)) {
42
- this.cleanupRoot();
43
- return;
44
- }
45
- if (this.rootCleanup?.element === element) {
46
- return;
47
- }
48
- this.cleanupRoot();
49
- const cleanup = this.dnd.dropTarget({
50
- element,
51
- getIsSticky: () => true,
52
- setDropData: ({ input }) => ({
53
- date: getCalendarDateFromPoint(element, input.clientX, input.clientY),
54
- }),
55
- canDrop: ({ source, input }) => {
56
- const entity = getCalendarDndEntity(source.data);
57
- const date = getCalendarDateFromPoint(element, input.clientX, input.clientY);
58
- return entity && date !== undefined
59
- ? this.callbacks.canDrop(entity)
60
- : false;
61
- },
62
- onDrag: ({ source, location }) => {
63
- this.updateDropTarget(element, source.data, location.current.input);
64
- },
65
- onDragEnter: ({ source, location }) => {
66
- this.updateDropTarget(element, source.data, location.current.input);
67
- },
68
- onDragLeave: () => {
69
- this.callbacks.onDropTargetChange(undefined);
70
- },
71
- onDrop: ({ source, location }) => {
72
- const entity = getCalendarDndEntity(source.data);
73
- const date = getCalendarDateFromPoint(element, location.current.input.clientX, location.current.input.clientY);
74
- if (entity && date !== undefined && this.callbacks.canDrop(entity)) {
75
- this.callbacks.onDrop(entity, date);
76
- }
77
- this.callbacks.onDropTargetChange(undefined);
78
- },
79
- });
80
- this.rootCleanup = { element, cleanup };
81
- }
82
- bindEntry(key, entry, element, disabled = false) {
83
- if (!this.dnd ||
84
- !(element instanceof HTMLElement) ||
85
- entry.kind !== 'row' ||
86
- disabled) {
87
- this.cleanupEntry(key);
88
- if (element instanceof HTMLElement) {
89
- element.setAttribute('draggable', 'false');
90
- }
91
- return;
92
- }
93
- const current = this.entryCleanups.get(key);
94
- if (current?.element === element) {
95
- return;
96
- }
97
- this.cleanupEntry(key);
98
- const cleanup = this.dnd.draggable({
99
- element,
100
- canDrag: () => {
101
- const currentEntry = this.callbacks.getEntry(entry.id);
102
- return currentEntry?.kind === 'row'
103
- ? this.callbacks.canDragEntry()
104
- : false;
105
- },
106
- setDragData: () => ({
107
- type: 'calendar-entry',
108
- entryId: entry.id,
109
- }),
110
- setDragPreview: ({ container, setOffset }) => {
111
- const currentEntry = this.callbacks.getEntry(entry.id);
112
- const preview = document.createElement('div');
113
- preview.textContent = currentEntry?.title || 'Untitled';
114
- preview.style.cssText =
115
- 'padding:0 6px;height:22px;line-height:22px;border-radius:4px;' +
116
- 'font-size:12px;white-space:nowrap;overflow:hidden;' +
117
- 'background:var(--affine-hover-color,#f5f5f5);' +
118
- 'color:var(--affine-text-primary-color,#333);' +
119
- 'max-width:140px;text-overflow:ellipsis;pointer-events:none;';
120
- container.append(preview);
121
- setOffset({ x: 10, y: 11 });
122
- },
123
- onDragStart: () => {
124
- const currentEntry = this.callbacks.getEntry(entry.id);
125
- if (currentEntry?.kind === 'row') {
126
- this.callbacks.onEntryDragStart(currentEntry);
127
- }
128
- },
129
- onDrop: () => {
130
- this.callbacks.onEntryDragEnd();
131
- },
132
- });
133
- this.entryCleanups.set(key, { element, cleanup });
134
- }
135
- cleanup() {
136
- this.cleanupRoot();
137
- for (const key of this.entryCleanups.keys()) {
138
- this.cleanupEntry(key);
139
- }
140
- }
141
- cleanupEntry(key) {
142
- this.entryCleanups.get(key)?.cleanup();
143
- this.entryCleanups.delete(key);
144
- }
145
- cleanupRoot() {
146
- this.rootCleanup?.cleanup();
147
- this.rootCleanup = undefined;
148
- }
149
- updateDropTarget(root, data, input) {
150
- const entity = getCalendarDndEntity(data);
151
- const date = getCalendarDateFromPoint(root, input.clientX, input.clientY);
152
- if (entity && date !== undefined && this.callbacks.canDrop(entity)) {
153
- this.callbacks.onDropTargetChange(date, entity);
154
- }
155
- else {
156
- this.callbacks.onDropTargetChange(undefined);
157
- }
158
- }
159
- }
@@ -1 +0,0 @@
1
- export declare function pcEffects(): void;
@@ -1,7 +0,0 @@
1
- import { CalendarViewUI } from './view.js';
2
- export function pcEffects() {
3
- if (customElements.get('affine-data-view-calendar')) {
4
- return;
5
- }
6
- customElements.define('affine-data-view-calendar', CalendarViewUI);
7
- }
@@ -1 +0,0 @@
1
- export declare const getCalendarDateFromPoint: (root: HTMLElement, clientX: number, clientY: number) => number | undefined;
@@ -1,28 +0,0 @@
1
- export const getCalendarDateFromPoint = (root, clientX, clientY) => {
2
- const doc = root.ownerDocument;
3
- const hitStack = doc.elementsFromPoint(clientX, clientY);
4
- for (const element of hitStack) {
5
- const day = element.closest('.calendar-day[data-date]');
6
- if (day && root.contains(day)) {
7
- return Number(day.dataset['date']);
8
- }
9
- }
10
- for (const element of hitStack) {
11
- const week = element.closest('.calendar-week') ??
12
- element.closest('.calendar-segments')?.parentElement;
13
- if (week && root.contains(week)) {
14
- const days = week.querySelectorAll('.calendar-day');
15
- for (const day of days) {
16
- const rect = day.getBoundingClientRect();
17
- if (clientX >= rect.left &&
18
- clientX < rect.right &&
19
- clientY >= rect.top &&
20
- clientY < rect.bottom &&
21
- day.dataset['date']) {
22
- return Number(day.dataset['date']);
23
- }
24
- }
25
- }
26
- }
27
- return;
28
- };
@@ -1 +0,0 @@
1
- export declare const calendarViewStyles: import("lit").CSSResult;