@formicoidea/labre-core 1.1.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 (190) hide show
  1. package/architecture/code.c4 +37 -34
  2. package/architecture/likec4.config.json +3 -3
  3. package/dist/_pkgs/affine-block-surface/extensions/reading-toolbar.js +12 -12
  4. package/dist/_pkgs/affine-components/context-menu/menu-renderer.d.ts +3 -1
  5. package/dist/_pkgs/affine-components/context-menu/menu-renderer.js +9 -1
  6. package/dist/_pkgs/affine-components/context-menu/menu.d.ts +7 -0
  7. package/dist/_pkgs/affine-components/context-menu/menu.js +5 -0
  8. package/dist/_pkgs/affine-components/context-menu/sub-menu.d.ts +16 -1
  9. package/dist/_pkgs/affine-components/context-menu/sub-menu.js +32 -5
  10. package/dist/_pkgs/affine-components/highlight-dropdown-menu/highlight-duotone-icon.js +8 -8
  11. package/dist/_pkgs/affine-components/highlight-dropdown-menu/text-duotone-icon.js +11 -11
  12. package/dist/_pkgs/affine-database-block/configs/slash-menu.js +14 -6
  13. package/dist/_pkgs/affine-database-block/database-block-styles.js +4 -3
  14. package/dist/_pkgs/affine-database-block/database-block.js +6 -18
  15. package/dist/_pkgs/affine-database-block/database-dnd-preview-block.js +5 -1
  16. package/dist/_pkgs/affine-database-block/detail-panel/block-renderer.js +5 -2
  17. package/dist/_pkgs/affine-database-block/detail-panel/note-renderer.js +3 -2
  18. package/dist/_pkgs/affine-database-block/external-data-source.d.ts +10 -0
  19. package/dist/_pkgs/affine-database-block/external-data-source.js +24 -0
  20. package/dist/_pkgs/affine-database-block/properties/created-time/define.js +3 -1
  21. package/dist/_pkgs/affine-database-block/properties/link/cell-renderer.js +3 -2
  22. package/dist/_pkgs/affine-database-block/properties/link/define.js +3 -1
  23. package/dist/_pkgs/affine-database-block/properties/rich-text/define.js +3 -1
  24. package/dist/_pkgs/affine-database-block/properties/text/hosted.js +1 -0
  25. package/dist/_pkgs/affine-database-block/properties/title/define.js +3 -1
  26. package/dist/_pkgs/affine-database-block/properties/title/hosted.js +1 -0
  27. package/dist/_pkgs/affine-database-block/service/new-row-menu.d.ts +1 -1
  28. package/dist/_pkgs/affine-database-block/service/new-row-menu.js +1 -1
  29. package/dist/_pkgs/affine-database-block/translations.d.ts +11 -0
  30. package/dist/_pkgs/affine-database-block/translations.js +57 -0
  31. package/dist/_pkgs/affine-database-block/views/index.d.ts +7 -9
  32. package/dist/_pkgs/affine-database-block/views/index.js +7 -10
  33. package/dist/_pkgs/affine-database-engine/core/common/properties.js +7 -7
  34. package/dist/_pkgs/affine-database-engine/core/common/property-menu.d.ts +18 -2
  35. package/dist/_pkgs/affine-database-engine/core/common/property-menu.js +78 -27
  36. package/dist/_pkgs/affine-database-engine/core/data-source/base.d.ts +11 -0
  37. package/dist/_pkgs/affine-database-engine/core/data-source/base.js +3 -0
  38. package/dist/_pkgs/affine-database-engine/core/detail/detail.js +8 -5
  39. package/dist/_pkgs/affine-database-engine/core/detail/field.js +14 -7
  40. package/dist/_pkgs/affine-database-engine/core/filter/add-filter.js +4 -2
  41. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/boolean.js +7 -4
  42. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/create.d.ts +9 -1
  43. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/create.js +2 -0
  44. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/date.js +7 -4
  45. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/multi-tag.js +17 -8
  46. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/number.js +6 -6
  47. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/string.js +19 -12
  48. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/tag.js +9 -4
  49. package/dist/_pkgs/affine-database-engine/core/filter/filter-fn/unknown.js +7 -4
  50. package/dist/_pkgs/affine-database-engine/core/filter/literal/define.js +6 -4
  51. package/dist/_pkgs/affine-database-engine/core/filter/literal/matcher.d.ts +2 -1
  52. package/dist/_pkgs/affine-database-engine/core/filter/literal/matcher.js +3 -2
  53. package/dist/_pkgs/affine-database-engine/core/filter/literal/types.d.ts +4 -1
  54. package/dist/_pkgs/affine-database-engine/core/filter/literal/types.js +1 -1
  55. package/dist/_pkgs/affine-database-engine/core/group-by/define.js +11 -9
  56. package/dist/_pkgs/affine-database-engine/core/group-by/group-title.js +16 -6
  57. package/dist/_pkgs/affine-database-engine/core/group-by/locate-row.d.ts +16 -0
  58. package/dist/_pkgs/affine-database-engine/core/group-by/locate-row.js +32 -0
  59. package/dist/_pkgs/affine-database-engine/core/group-by/renderer/date-group.js +10 -3
  60. package/dist/_pkgs/affine-database-engine/core/group-by/setting.d.ts +2 -0
  61. package/dist/_pkgs/affine-database-engine/core/group-by/setting.js +40 -28
  62. package/dist/_pkgs/affine-database-engine/core/group-by/trait.d.ts +3 -0
  63. package/dist/_pkgs/affine-database-engine/core/group-by/trait.js +8 -0
  64. package/dist/_pkgs/affine-database-engine/core/group-by/types.d.ts +3 -1
  65. package/dist/_pkgs/affine-database-engine/core/group-by/types.js +1 -1
  66. package/dist/_pkgs/affine-database-engine/core/property/types.d.ts +7 -0
  67. package/dist/_pkgs/affine-database-engine/core/property/types.js +1 -1
  68. package/dist/_pkgs/affine-database-engine/core/sort/add-sort.js +3 -1
  69. package/dist/_pkgs/affine-database-engine/core/statistics/any.js +43 -21
  70. package/dist/_pkgs/affine-database-engine/core/statistics/checkbox.js +29 -14
  71. package/dist/_pkgs/affine-database-engine/core/statistics/number.js +54 -31
  72. package/dist/_pkgs/affine-database-engine/core/statistics/types.d.ts +8 -0
  73. package/dist/_pkgs/affine-database-engine/core/statistics/types.js +2 -1
  74. package/dist/_pkgs/affine-database-engine/core/utils/wording.d.ts +20 -1
  75. package/dist/_pkgs/affine-database-engine/core/utils/wording.js +24 -0
  76. package/dist/_pkgs/affine-database-engine/core/view-manager/property.d.ts +7 -0
  77. package/dist/_pkgs/affine-database-engine/core/view-manager/property.js +29 -5
  78. package/dist/_pkgs/affine-database-engine/core/view-manager/single-view.d.ts +14 -0
  79. package/dist/_pkgs/affine-database-engine/core/view-manager/single-view.js +11 -0
  80. package/dist/_pkgs/affine-database-engine/property-presets/checkbox/define.js +3 -1
  81. package/dist/_pkgs/affine-database-engine/property-presets/date/define.js +3 -1
  82. package/dist/_pkgs/affine-database-engine/property-presets/multi-select/define.js +3 -1
  83. package/dist/_pkgs/affine-database-engine/property-presets/number/define.js +3 -1
  84. package/dist/_pkgs/affine-database-engine/property-presets/number/utils/formats.d.ts +3 -0
  85. package/dist/_pkgs/affine-database-engine/property-presets/number/utils/formats.js +56 -9
  86. package/dist/_pkgs/affine-database-engine/property-presets/progress/define.js +3 -1
  87. package/dist/_pkgs/affine-database-engine/property-presets/select/define.js +3 -1
  88. package/dist/_pkgs/affine-database-engine/property-presets/text/define.js +3 -1
  89. package/dist/_pkgs/affine-database-engine/translations.d.ts +133 -5
  90. package/dist/_pkgs/affine-database-engine/translations.js +625 -9
  91. package/dist/_pkgs/affine-database-engine/view-presets/convert.js +0 -28
  92. package/dist/_pkgs/affine-database-engine/view-presets/effect.js +0 -2
  93. package/dist/_pkgs/affine-database-engine/view-presets/flat/flat-converts.js +2 -4
  94. package/dist/_pkgs/affine-database-engine/view-presets/flat/flat-view-ui.d.ts +57 -0
  95. package/dist/_pkgs/affine-database-engine/view-presets/flat/flat-view-ui.js +113 -4
  96. package/dist/_pkgs/affine-database-engine/view-presets/gallery/gallery-view.js +2 -1
  97. package/dist/_pkgs/affine-database-engine/view-presets/index.d.ts +0 -2
  98. package/dist/_pkgs/affine-database-engine/view-presets/index.js +0 -3
  99. package/dist/_pkgs/affine-database-engine/view-presets/kanban/kanban-view-manager.js +2 -0
  100. package/dist/_pkgs/affine-database-engine/view-presets/kanban/mobile/group.js +7 -5
  101. package/dist/_pkgs/affine-database-engine/view-presets/kanban/mobile/kanban-view-ui-logic.d.ts +5 -0
  102. package/dist/_pkgs/affine-database-engine/view-presets/kanban/mobile/kanban-view-ui-logic.js +25 -3
  103. package/dist/_pkgs/affine-database-engine/view-presets/kanban/mobile/menu.js +12 -6
  104. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/controller/selection.d.ts +8 -0
  105. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/controller/selection.js +35 -12
  106. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/group.js +7 -5
  107. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/header.js +5 -1
  108. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/kanban-view-ui-logic.d.ts +5 -0
  109. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/kanban-view-ui-logic.js +8 -4
  110. package/dist/_pkgs/affine-database-engine/view-presets/kanban/pc/menu.js +12 -6
  111. package/dist/_pkgs/affine-database-engine/view-presets/list/list-view.js +2 -1
  112. package/dist/_pkgs/affine-database-engine/view-presets/table/mobile/column-header.js +6 -4
  113. package/dist/_pkgs/affine-database-engine/view-presets/table/mobile/group.js +6 -5
  114. package/dist/_pkgs/affine-database-engine/view-presets/table/mobile/header.js +2 -2
  115. package/dist/_pkgs/affine-database-engine/view-presets/table/mobile/table-view-ui-logic.d.ts +4 -3
  116. package/dist/_pkgs/affine-database-engine/view-presets/table/mobile/table-view-ui-logic.js +29 -5
  117. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/controller/clipboard.js +6 -2
  118. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/controller/selection.js +2 -0
  119. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/group.js +6 -5
  120. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/header/column-header.js +11 -7
  121. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/header/database-header-column.js +16 -12
  122. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/header/number-format-bar.js +4 -2
  123. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/menu.js +9 -6
  124. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/table-view-ui-logic.d.ts +8 -1
  125. package/dist/_pkgs/affine-database-engine/view-presets/table/pc/table-view-ui-logic.js +29 -7
  126. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/controller/clipboard.js +6 -2
  127. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/controller/selection.js +2 -0
  128. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/bottom/group-footer.js +5 -2
  129. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/bottom/stats/column-stats-column.d.ts +1 -1
  130. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/bottom/stats/column-stats-column.js +14 -6
  131. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/top/group-header.js +5 -2
  132. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/top/group-title.js +5 -3
  133. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/top/header/column-header.js +17 -10
  134. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/top/header/number-format-bar.js +4 -2
  135. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/group/top/header/single-column-header.js +20 -14
  136. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/row/menu.js +9 -6
  137. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/table-view-ui-logic.d.ts +6 -1
  138. package/dist/_pkgs/affine-database-engine/view-presets/table/pc-virtual/table-view-ui-logic.js +30 -3
  139. package/dist/_pkgs/affine-database-engine/view-presets/table/stats/column-stats-column.d.ts +1 -1
  140. package/dist/_pkgs/affine-database-engine/view-presets/table/stats/column-stats-column.js +14 -6
  141. package/dist/_pkgs/affine-database-engine/view-presets/table/table-view-manager.js +2 -0
  142. package/dist/_pkgs/affine-database-engine/widget-presets/quick-setting-bar/filter/condition-view.d.ts +2 -0
  143. package/dist/_pkgs/affine-database-engine/widget-presets/quick-setting-bar/filter/condition-view.js +13 -6
  144. package/dist/_pkgs/affine-database-engine/widget-presets/quick-setting-bar/filter/group-panel-view.js +20 -13
  145. package/dist/_pkgs/affine-database-engine/widget-presets/quick-setting-bar/filter/root-panel-view.js +10 -5
  146. package/dist/_pkgs/affine-database-engine/widget-presets/quick-setting-bar/sort/root-panel.js +8 -5
  147. package/dist/_pkgs/affine-database-engine/widget-presets/tools/presets/search/search.js +2 -2
  148. package/dist/_pkgs/affine-database-engine/widget-presets/tools/presets/table-add-row/add-row.d.ts +6 -0
  149. package/dist/_pkgs/affine-database-engine/widget-presets/tools/presets/table-add-row/add-row.js +49 -4
  150. package/dist/_pkgs/affine-database-engine/widget-presets/tools/presets/view-options/view-settings.d.ts +3 -3
  151. package/dist/_pkgs/affine-database-engine/widget-presets/tools/presets/view-options/view-settings.js +3 -3
  152. package/dist/_pkgs/affine-database-engine/widget-presets/views-bar/views-view.js +5 -0
  153. package/dist/_pkgs/affine-database-view-block/configs/slash-menu.js +6 -3
  154. package/dist/_pkgs/affine-database-view-block/data-view-block.js +5 -4
  155. package/dist/_pkgs/affine-fragment-doc-title/doc-title.d.ts +3 -2
  156. package/dist/_pkgs/affine-fragment-doc-title/doc-title.js +3 -2
  157. package/dist/_pkgs/affine-shared/services/data-source-picker-service.d.ts +31 -0
  158. package/dist/_pkgs/affine-widget-edgeless-zoom-toolbar/index.js +26 -26
  159. package/dist/_pkgs/affine-widget-keyboard-toolbar/icons.js +98 -98
  160. package/dist/_pkgs/affine-widget-page-dragging-area/index.js +10 -10
  161. package/dist/_pkgs/affine-widget-viewport-overlay/index.js +13 -13
  162. package/package.json +1 -1
  163. package/dist/_pkgs/affine-database-engine/view-presets/calendar/calendar-view-manager.d.ts +0 -70
  164. package/dist/_pkgs/affine-database-engine/view-presets/calendar/calendar-view-manager.js +0 -449
  165. package/dist/_pkgs/affine-database-engine/view-presets/calendar/define.d.ts +0 -10
  166. package/dist/_pkgs/affine-database-engine/view-presets/calendar/define.js +0 -29
  167. package/dist/_pkgs/affine-database-engine/view-presets/calendar/effect.d.ts +0 -1
  168. package/dist/_pkgs/affine-database-engine/view-presets/calendar/effect.js +0 -4
  169. package/dist/_pkgs/affine-database-engine/view-presets/calendar/index.d.ts +0 -6
  170. package/dist/_pkgs/affine-database-engine/view-presets/calendar/index.js +0 -6
  171. package/dist/_pkgs/affine-database-engine/view-presets/calendar/layout.d.ts +0 -37
  172. package/dist/_pkgs/affine-database-engine/view-presets/calendar/layout.js +0 -138
  173. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/actions.d.ts +0 -7
  174. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/actions.js +0 -64
  175. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/dnd.d.ts +0 -32
  176. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/dnd.js +0 -159
  177. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/effect.d.ts +0 -1
  178. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/effect.js +0 -7
  179. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/hit-test.d.ts +0 -1
  180. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/hit-test.js +0 -28
  181. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/styles.d.ts +0 -1
  182. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/styles.js +0 -707
  183. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/view.d.ts +0 -89
  184. package/dist/_pkgs/affine-database-engine/view-presets/calendar/pc/view.js +0 -849
  185. package/dist/_pkgs/affine-database-engine/view-presets/calendar/renderer.d.ts +0 -2
  186. package/dist/_pkgs/affine-database-engine/view-presets/calendar/renderer.js +0 -8
  187. package/dist/_pkgs/affine-database-engine/view-presets/calendar/source.d.ts +0 -8
  188. package/dist/_pkgs/affine-database-engine/view-presets/calendar/source.js +0 -3
  189. package/dist/_pkgs/affine-database-engine/view-presets/calendar/types.d.ts +0 -79
  190. package/dist/_pkgs/affine-database-engine/view-presets/calendar/types.js +0 -1
@@ -1,449 +0,0 @@
1
- import { DocDisplayMetaProvider } from '../../../affine-shared/services/index.js';
2
- import { Text } from '../../../store/index.js';
3
- import { computed, signal } from '@preact/signals-core';
4
- import { Doc } from 'yjs';
5
- import { evalFilter } from '../../core/filter/eval.js';
6
- import { generateDefaultValues } from '../../core/filter/generate-default-values.js';
7
- import { FilterTrait, filterTraitKey } from '../../core/filter/trait.js';
8
- import { emptyFilterGroup } from '../../core/filter/utils.js';
9
- import { fromJson } from '../../core/property/utils.js';
10
- import { SortManager, sortTraitKey } from '../../core/sort/manager.js';
11
- import { PropertyBase } from '../../core/view-manager/property.js';
12
- import { RowBase } from '../../core/view-manager/row.js';
13
- import { SingleViewBase, } from '../../core/view-manager/single-view.js';
14
- import { getCalendarExternalSources } from './source.js';
15
- const getStartColumnId = (data) => data?.date?.startColumnId;
16
- const getEndColumnId = (data) => {
17
- return data?.date?.endColumnId;
18
- };
19
- const getDateData = (data) => ({
20
- ...data.date,
21
- startColumnId: getStartColumnId(data),
22
- });
23
- const getCardData = (data) => {
24
- if (data) {
25
- return data.card;
26
- }
27
- return {
28
- visiblePropertyIds: [],
29
- };
30
- };
31
- const toTimestamp = (date) => date instanceof Date ? date.getTime() : date;
32
- const isValidTimestamp = (value) => typeof value === 'number' && Number.isFinite(value);
33
- const createLinkedDocTitle = (docId) => {
34
- const text = new Text();
35
- new Doc().getMap('root').set('text', text.yText);
36
- text.applyDelta([
37
- {
38
- insert: ' ',
39
- attributes: { reference: { type: 'LinkedPage', pageId: docId } },
40
- },
41
- ]);
42
- return text;
43
- };
44
- const getTitleDeltas = (value) => typeof value === 'object' && value != null && 'deltas$' in value
45
- ? value.deltas$?.value
46
- : undefined;
47
- const getTitleSegments = (value, title, getLinkedDocTitle) => {
48
- const deltas = getTitleDeltas(value);
49
- if (!Array.isArray(deltas)) {
50
- return;
51
- }
52
- const segments = deltas.flatMap(delta => {
53
- const item = delta;
54
- const linkedDoc = item.attributes?.reference?.type === 'LinkedPage' &&
55
- typeof item.attributes.reference.pageId === 'string';
56
- const referenceTitle = item.attributes?.reference?.title;
57
- const resolvedLinkedDocTitle = linkedDoc && typeof item.attributes?.reference?.pageId === 'string'
58
- ? getLinkedDocTitle?.(item.attributes.reference.pageId, typeof referenceTitle === 'string' ? referenceTitle : undefined)
59
- : undefined;
60
- const text = resolvedLinkedDocTitle ||
61
- (linkedDoc && typeof referenceTitle === 'string' && referenceTitle
62
- ? referenceTitle
63
- : typeof item.insert === 'string'
64
- ? item.insert.trim()
65
- : '');
66
- if (linkedDoc) {
67
- return {
68
- text,
69
- linkedDoc,
70
- };
71
- }
72
- if (!text) {
73
- return [];
74
- }
75
- return {
76
- text,
77
- };
78
- });
79
- const normalizedSegments = segments.reduce((result, segment) => {
80
- const previous = result.at(-1);
81
- if (previous?.linkedDoc &&
82
- !previous.text &&
83
- !segment.linkedDoc &&
84
- segment.text) {
85
- previous.text = segment.text;
86
- return result;
87
- }
88
- result.push(segment);
89
- return result;
90
- }, []);
91
- if (!normalizedSegments.some(segment => segment.linkedDoc)) {
92
- return;
93
- }
94
- if (!normalizedSegments.some(segment => segment.text)) {
95
- return title
96
- ? [...normalizedSegments, { text: title }]
97
- : normalizedSegments;
98
- }
99
- return normalizedSegments;
100
- };
101
- export class CalendarSingleView extends SingleViewBase {
102
- get type() {
103
- return this.data$.value?.mode ?? 'calendar';
104
- }
105
- constructor(viewManager, viewId) {
106
- super(viewManager, viewId);
107
- this.externalEntries$ = signal([]);
108
- this.externalEntriesRequestId = 0;
109
- this.propertiesRaw$ = computed(() => {
110
- return this.dataSource.properties$.value.map(id => this.propertyGetOrCreate(id));
111
- });
112
- this.properties$ = this.propertiesRaw$;
113
- this.detailProperties$ = computed(() => {
114
- return this.propertiesRaw$.value.filter(property => property.type$.value !== 'title');
115
- });
116
- this.filter$ = computed(() => {
117
- return this.data$.value?.filter ?? emptyFilterGroup;
118
- });
119
- this.sortList$ = computed(() => {
120
- return this.data$.value?.sort;
121
- });
122
- this.emptyMonthHintDismissed$ = computed(() => {
123
- return this.data$.value?.ui?.emptyMonthHintDismissed ?? false;
124
- });
125
- this.sortManager = this.traitSet(sortTraitKey, new SortManager(this.sortList$, this, {
126
- setSortList: sortList => {
127
- this.dataUpdate(data => ({
128
- sort: {
129
- ...data.sort,
130
- ...sortList,
131
- },
132
- }));
133
- },
134
- }));
135
- this.filterTrait = this.traitSet(filterTraitKey, new FilterTrait(this.filter$, this, {
136
- filterSet: (filter) => {
137
- this.dataUpdate(() => ({ filter }));
138
- },
139
- }));
140
- this.mainProperties$ = computed(() => {
141
- const card = getCardData(this.data$.value);
142
- return {
143
- titleColumn: card.titleColumnId ??
144
- this.propertiesRaw$.value.find(property => property.type$.value === 'title')?.id,
145
- };
146
- });
147
- this.readonly$ = computed(() => {
148
- return this.manager.readonly$.value;
149
- });
150
- this.dateProperties$ = computed(() => {
151
- return this.propertiesRaw$.value.filter(property => property.type$.value === 'date');
152
- });
153
- this.dateMapping$ = computed(() => {
154
- const propertyId = getStartColumnId(this.data$.value);
155
- if (propertyId &&
156
- this.dataSource.properties$.value.includes(propertyId) &&
157
- this.dataSource.propertyTypeGet(propertyId) === 'date') {
158
- return {
159
- status: 'ready',
160
- propertyId,
161
- };
162
- }
163
- return {
164
- status: 'setup',
165
- propertyId,
166
- };
167
- });
168
- this.startDateMapping$ = this.dateMapping$;
169
- this.endDateMapping$ = computed(() => {
170
- const propertyId = getEndColumnId(this.data$.value);
171
- if (propertyId &&
172
- this.dataSource.properties$.value.includes(propertyId) &&
173
- this.dataSource.propertyTypeGet(propertyId) === 'date') {
174
- return {
175
- status: 'ready',
176
- propertyId,
177
- };
178
- }
179
- return {
180
- status: 'setup',
181
- propertyId,
182
- };
183
- });
184
- this.visibleCardProperties$ = computed(() => {
185
- const card = getCardData(this.data$.value);
186
- const visiblePropertyIds = card.visiblePropertyIds ?? [];
187
- const titleColumn = card.titleColumnId;
188
- return visiblePropertyIds
189
- .filter(propertyId => propertyId !== titleColumn)
190
- .map(propertyId => this.propertyGetOrCreate(propertyId));
191
- });
192
- this.rowEntries$ = computed(() => {
193
- const mapping = this.dateMapping$.value;
194
- if (mapping.status !== 'ready') {
195
- return [];
196
- }
197
- const endMapping = this.endDateMapping$.value;
198
- return this.rows$.value.flatMap(row => {
199
- const startAt = this.cellGetOrCreate(row.rowId, mapping.propertyId)
200
- .jsonValue$.value;
201
- if (!isValidTimestamp(startAt)) {
202
- return [];
203
- }
204
- const endAt = endMapping.status === 'ready'
205
- ? this.cellGetOrCreate(row.rowId, endMapping.propertyId).jsonValue$
206
- .value
207
- : undefined;
208
- const titleColumn = this.mainProperties$.value.titleColumn ?? 'title';
209
- const titleCell = this.cellGetOrCreate(row.rowId, titleColumn);
210
- const jsonTitle = titleCell.jsonValue$.value;
211
- const title = (typeof jsonTitle === 'string'
212
- ? jsonTitle
213
- : titleCell.stringValue$.value) ?? '';
214
- const docDisplayMeta = this.manager.dataSource.serviceGet(DocDisplayMetaProvider);
215
- const resolveLinkedDocTitle = (pageId, title) => docDisplayMeta?.title(pageId, { title }).value;
216
- const titleSegments = getTitleSegments(titleCell.value$.value, title, resolveLinkedDocTitle);
217
- const cardProperties = this.visibleCardProperties$.value.flatMap(property => {
218
- const cell = this.cellGetOrCreate(row.rowId, property.id);
219
- const value = cell.stringValue$.value;
220
- if (!value) {
221
- return [];
222
- }
223
- return {
224
- propertyId: property.id,
225
- value,
226
- };
227
- });
228
- return {
229
- kind: 'row',
230
- id: `database:${row.rowId}`,
231
- sourceId: 'database',
232
- rowId: row.rowId,
233
- title,
234
- startAt,
235
- endAt: isValidTimestamp(endAt) && endAt >= startAt ? endAt : undefined,
236
- titleSegments,
237
- cardProperties,
238
- canResizeRange: endMapping.status === 'ready' && !this.readonly$.value,
239
- };
240
- });
241
- });
242
- this.entries$ = computed(() => {
243
- return [...this.rowEntries$.value, ...this.externalEntries$.value];
244
- });
245
- this.externalSources$ = computed(() => {
246
- const viewData = this.data$.value;
247
- if (!viewData) {
248
- return [];
249
- }
250
- return getCalendarExternalSources(this.dataSource, viewData);
251
- });
252
- }
253
- isShow(rowId) {
254
- if (this.filter$.value.conditions.length) {
255
- const rowMap = Object.fromEntries(this.propertiesRaw$.value.map(column => [
256
- column.id,
257
- column.cellGetOrCreate(rowId).jsonValue$.value,
258
- ]));
259
- return evalFilter(this.filter$.value, rowMap);
260
- }
261
- return true;
262
- }
263
- rowsMapping(rows) {
264
- return this.sortManager.sort(super.rowsMapping(rows));
265
- }
266
- propertyGetOrCreate(propertyId) {
267
- return new CalendarProperty(this, propertyId);
268
- }
269
- rowGetOrCreate(rowId) {
270
- return new CalendarRow(this, rowId);
271
- }
272
- setStartDateColumn(propertyId) {
273
- this.dataUpdate(data => ({
274
- date: {
275
- ...getDateData(data),
276
- startColumnId: propertyId,
277
- },
278
- }));
279
- }
280
- setDateColumn(propertyId) {
281
- this.setStartDateColumn(propertyId);
282
- }
283
- setEndDateColumn(propertyId) {
284
- this.dataUpdate(data => ({
285
- date: {
286
- ...getDateData(data),
287
- endColumnId: propertyId,
288
- },
289
- }));
290
- }
291
- setWorkspaceCalendarEnabled(enabled) {
292
- this.dataUpdate(data => ({
293
- sources: {
294
- ...data.sources,
295
- workspaceCalendar: {
296
- ...(data.sources?.workspaceCalendar ?? { enabled: true }),
297
- enabled,
298
- },
299
- },
300
- }));
301
- }
302
- setWorkspaceCalendarSubscriptionIds(subscriptionIds) {
303
- this.dataUpdate(data => ({
304
- sources: {
305
- ...data.sources,
306
- workspaceCalendar: {
307
- ...(data.sources?.workspaceCalendar ?? { enabled: true }),
308
- subscriptionIds,
309
- },
310
- },
311
- }));
312
- }
313
- dismissEmptyMonthHint() {
314
- this.dataUpdate(data => ({
315
- ui: {
316
- ...data.ui,
317
- emptyMonthHintDismissed: true,
318
- },
319
- }));
320
- }
321
- getDocDisplayTitle(docId) {
322
- return (this.manager.dataSource.serviceGet(DocDisplayMetaProvider)?.title(docId)
323
- .value ?? 'Untitled');
324
- }
325
- createStartDateColumn() {
326
- const id = this.propertyAdd('end', {
327
- type: 'date',
328
- name: 'Date',
329
- });
330
- if (id) {
331
- this.setStartDateColumn(id);
332
- }
333
- return id;
334
- }
335
- createDateColumn() {
336
- return this.createStartDateColumn();
337
- }
338
- createEndDateColumn() {
339
- const id = this.propertyAdd('end', {
340
- type: 'date',
341
- name: 'End Date',
342
- });
343
- if (id) {
344
- this.setEndDateColumn(id);
345
- }
346
- return id;
347
- }
348
- createRowOnDate(date) {
349
- const mapping = this.startDateMapping$.value;
350
- if (mapping.status !== 'ready') {
351
- return;
352
- }
353
- const rowId = this.rowAdd('end');
354
- const filter = this.filter$.value;
355
- if (filter.conditions.length > 0) {
356
- const defaultValues = generateDefaultValues(filter, this.vars$.value);
357
- Object.entries(defaultValues).forEach(([propertyId, jsonValue]) => {
358
- const property = this.propertyGetOrCreate(propertyId);
359
- const propertyMeta = property.meta$.value;
360
- if (propertyMeta) {
361
- const value = fromJson(propertyMeta.config, {
362
- value: jsonValue,
363
- data: property.data$.value,
364
- dataSource: this.dataSource,
365
- });
366
- this.cellGetOrCreate(rowId, propertyId).valueSet(value);
367
- }
368
- });
369
- }
370
- this.cellGetOrCreate(rowId, mapping.propertyId).jsonValueSet(toTimestamp(date));
371
- this.dismissEmptyMonthHint();
372
- return rowId;
373
- }
374
- createLinkedDocRowOnDate(date, docId) {
375
- const rowId = this.createRowOnDate(date);
376
- if (!rowId)
377
- return;
378
- const titleColumn = this.mainProperties$.value.titleColumn ?? 'title';
379
- this.cellGetOrCreate(rowId, titleColumn).valueSet(createLinkedDocTitle(docId));
380
- return rowId;
381
- }
382
- moveRowToDate(rowId, date) {
383
- const mapping = this.startDateMapping$.value;
384
- if (mapping.status !== 'ready') {
385
- return;
386
- }
387
- const value = toTimestamp(date);
388
- const oldStartAt = this.cellGetOrCreate(rowId, mapping.propertyId)
389
- .jsonValue$.value;
390
- const endMapping = this.endDateMapping$.value;
391
- if (endMapping.status === 'ready' && isValidTimestamp(oldStartAt)) {
392
- const oldEndAt = this.cellGetOrCreate(rowId, endMapping.propertyId)
393
- .jsonValue$.value;
394
- if (isValidTimestamp(oldEndAt) && oldEndAt >= oldStartAt) {
395
- this.cellGetOrCreate(rowId, endMapping.propertyId).jsonValueSet(value + (oldEndAt - oldStartAt));
396
- }
397
- }
398
- this.cellGetOrCreate(rowId, mapping.propertyId).jsonValueSet(value);
399
- }
400
- resizeRowRange(rowId, edge, date) {
401
- const startMapping = this.startDateMapping$.value;
402
- const endMapping = this.endDateMapping$.value;
403
- if (startMapping.status !== 'ready' || endMapping.status !== 'ready') {
404
- return;
405
- }
406
- const startCell = this.cellGetOrCreate(rowId, startMapping.propertyId);
407
- const endCell = this.cellGetOrCreate(rowId, endMapping.propertyId);
408
- const startAt = startCell.jsonValue$.value;
409
- const endAt = endCell.jsonValue$.value;
410
- if (!isValidTimestamp(startAt) || !isValidTimestamp(endAt)) {
411
- return;
412
- }
413
- const value = toTimestamp(date);
414
- if (edge === 'start') {
415
- startCell.jsonValueSet(Math.min(value, endAt));
416
- }
417
- else {
418
- endCell.jsonValueSet(Math.max(value, startAt));
419
- }
420
- }
421
- async loadExternalEntries(range) {
422
- const requestId = ++this.externalEntriesRequestId;
423
- const viewData = this.data$.value;
424
- if (!viewData) {
425
- this.externalEntries$.value = [];
426
- return [];
427
- }
428
- const results = await Promise.allSettled(this.externalSources$.value.map(source => Promise.resolve(source.getEntries(range))));
429
- const entries = results.flatMap(result => result.status === 'fulfilled' ? result.value : []);
430
- if (requestId === this.externalEntriesRequestId) {
431
- this.externalEntries$.value = entries;
432
- }
433
- return entries;
434
- }
435
- }
436
- export class CalendarProperty extends PropertyBase {
437
- constructor(view, propertyId) {
438
- super(view, propertyId);
439
- this.hide$ = computed(() => false);
440
- }
441
- hideSet(_hide) { }
442
- move(_position) { }
443
- }
444
- export class CalendarRow extends RowBase {
445
- constructor(calendarView, rowId) {
446
- super(calendarView, rowId);
447
- this.calendarView = calendarView;
448
- }
449
- }
@@ -1,10 +0,0 @@
1
- import type { CalendarViewData } from './types.js';
2
- export declare const calendarViewType: {
3
- type: "calendar";
4
- createModel: <Data extends import("../../index.js").DataViewDataType>(model: import("../../index.js").DataViewModelConfig<Data>) => import("../../index.js").DataViewModel<"calendar", Data> & {
5
- createMeta: (renderer: import("../../index.js").DataViewRendererConfig) => import("../../index.js").ViewMeta<"calendar", Data>;
6
- };
7
- };
8
- export declare const calendarViewModel: import("../../index.js").DataViewModel<"calendar", CalendarViewData> & {
9
- createMeta: (renderer: import("../../index.js").DataViewRendererConfig) => import("../../index.js").ViewMeta<"calendar", CalendarViewData>;
10
- };
@@ -1,29 +0,0 @@
1
- import { viewType } from '../../core/view/data-view.js';
2
- import { VIEW_NAME_CALENDAR } from '../../translations.js';
3
- import { CalendarSingleView } from './calendar-view-manager.js';
4
- export const calendarViewType = viewType('calendar');
5
- export const calendarViewModel = calendarViewType.createModel({
6
- defaultName: VIEW_NAME_CALENDAR[1],
7
- defaultNameKey: VIEW_NAME_CALENDAR[0],
8
- dataViewManager: CalendarSingleView,
9
- defaultData: viewManager => {
10
- return {
11
- filter: {
12
- type: 'group',
13
- op: 'and',
14
- conditions: [],
15
- },
16
- date: {},
17
- card: {
18
- titleColumnId: viewManager.dataSource.properties$.value.find(id => viewManager.dataSource.propertyTypeGet(id) === 'title'),
19
- visiblePropertyIds: [],
20
- },
21
- sources: {
22
- workspaceCalendar: {
23
- enabled: true,
24
- },
25
- },
26
- ui: {},
27
- };
28
- },
29
- });
@@ -1 +0,0 @@
1
- export declare function calendarEffects(): void;
@@ -1,4 +0,0 @@
1
- import { pcEffects } from './pc/effect.js';
2
- export function calendarEffects() {
3
- pcEffects();
4
- }
@@ -1,6 +0,0 @@
1
- export * from './calendar-view-manager.js';
2
- export * from './define.js';
3
- export * from './layout.js';
4
- export * from './renderer.js';
5
- export * from './source.js';
6
- export * from './types.js';
@@ -1,6 +0,0 @@
1
- export * from './calendar-view-manager.js';
2
- export * from './define.js';
3
- export * from './layout.js';
4
- export * from './renderer.js';
5
- export * from './source.js';
6
- export * from './types.js';
@@ -1,37 +0,0 @@
1
- import type { CalendarEntry } from './types.js';
2
- export type CalendarDayLayout = {
3
- date: number;
4
- inMonth: boolean;
5
- entries: CalendarEntry[];
6
- segments: CalendarRangeSegment[];
7
- };
8
- export type CalendarRangeSegment = {
9
- entry: CalendarEntry;
10
- weekIndex: number;
11
- startIndex: number;
12
- span: number;
13
- slot: number;
14
- startsBeforeWeek: boolean;
15
- endsAfterWeek: boolean;
16
- };
17
- export type CalendarMonthLayout = {
18
- from: number;
19
- to: number;
20
- weeks: CalendarDayLayout[][];
21
- days: CalendarDayLayout[];
22
- segments: CalendarRangeSegment[];
23
- };
24
- export type CalendarMonthLayoutOptions = {
25
- month: number | Date;
26
- entries: CalendarEntry[];
27
- weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
28
- };
29
- export declare const getCalendarVisibleMonthRange: (month: number | Date, weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6) => {
30
- from: number;
31
- to: number;
32
- monthStart: number;
33
- monthEnd: number;
34
- };
35
- export declare const getCalendarDaySegmentSlots: (day: CalendarDayLayout, ignoredEntryId?: string) => number;
36
- export declare const getCalendarDayContentSlots: (day: CalendarDayLayout, ignoredEntryId?: string) => number;
37
- export declare const createCalendarMonthLayout: ({ month, entries, weekStartsOn, }: CalendarMonthLayoutOptions) => CalendarMonthLayout;
@@ -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
- };