@formicoidea/labre-core 0.47.1 → 0.49.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.
- package/dist/_pkgs/affine-block-data-view/configs/slash-menu.js +3 -1
- package/dist/_pkgs/affine-block-data-view/view.d.ts +17 -1
- package/dist/_pkgs/affine-block-data-view/view.js +21 -2
- package/dist/_pkgs/affine-block-database/commands.d.ts +2 -2
- package/dist/_pkgs/affine-block-database/commands.js +3 -3
- package/dist/_pkgs/affine-block-database/components/values-banner.d.ts +28 -0
- package/dist/_pkgs/affine-block-database/components/values-banner.js +199 -0
- package/dist/_pkgs/affine-block-database/configs/slash-menu.d.ts +6 -1
- package/dist/_pkgs/affine-block-database/configs/slash-menu.js +57 -70
- package/dist/_pkgs/affine-block-database/data-source.d.ts +9 -5
- package/dist/_pkgs/affine-block-database/data-source.js +11 -7
- package/dist/_pkgs/affine-block-database/database-block-styles.d.ts +2 -0
- package/dist/_pkgs/affine-block-database/database-block-styles.js +15 -0
- package/dist/_pkgs/affine-block-database/database-block.d.ts +23 -0
- package/dist/_pkgs/affine-block-database/database-block.js +141 -19
- package/dist/_pkgs/affine-block-database/effects.js +2 -0
- package/dist/_pkgs/affine-block-database/external-data-source.d.ts +69 -2
- package/dist/_pkgs/affine-block-database/external-data-source.js +88 -16
- package/dist/_pkgs/affine-block-database/index.d.ts +2 -0
- package/dist/_pkgs/affine-block-database/index.js +2 -0
- package/dist/_pkgs/affine-block-database/linked-view.d.ts +38 -0
- package/dist/_pkgs/affine-block-database/linked-view.js +109 -0
- package/dist/_pkgs/affine-block-database/properties/index.d.ts +2 -0
- package/dist/_pkgs/affine-block-database/properties/index.js +2 -0
- package/dist/_pkgs/affine-block-database/properties/text/hosted.d.ts +15 -0
- package/dist/_pkgs/affine-block-database/properties/text/hosted.js +24 -0
- package/dist/_pkgs/affine-block-database/properties/title/hosted.d.ts +16 -0
- package/dist/_pkgs/affine-block-database/properties/title/hosted.js +42 -0
- package/dist/_pkgs/affine-block-database/service/index.d.ts +3 -0
- package/dist/_pkgs/affine-block-database/service/index.js +3 -0
- package/dist/_pkgs/affine-block-database/service/new-row-menu.d.ts +49 -0
- package/dist/_pkgs/affine-block-database/service/new-row-menu.js +21 -0
- package/dist/_pkgs/affine-block-database/service/open-row.d.ts +77 -0
- package/dist/_pkgs/affine-block-database/service/open-row.js +62 -0
- package/dist/_pkgs/affine-block-database/service/properties-panel.d.ts +23 -0
- package/dist/_pkgs/affine-block-database/service/properties-panel.js +33 -0
- package/dist/_pkgs/affine-block-database/translations.d.ts +10 -0
- package/dist/_pkgs/affine-block-database/translations.js +35 -0
- package/dist/_pkgs/affine-block-database/view-creation.d.ts +10 -0
- package/dist/_pkgs/affine-block-database/view-creation.js +14 -0
- package/dist/_pkgs/affine-block-database/view.d.ts +31 -1
- package/dist/_pkgs/affine-block-database/view.js +48 -4
- package/dist/_pkgs/affine-block-database/views/index.d.ts +30 -3
- package/dist/_pkgs/affine-block-database/views/index.js +44 -3
- package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/configs/new-doc.d.ts +25 -0
- package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/configs/new-doc.js +71 -0
- package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/configs/slash-menu.js +3 -11
- package/dist/_pkgs/affine-components/date-picker/date-picker.d.ts +20 -0
- package/dist/_pkgs/affine-components/date-picker/date-picker.js +60 -26
- package/dist/_pkgs/affine-components/date-picker/style.js +1 -0
- package/dist/_pkgs/affine-components/translations.d.ts +4 -0
- package/dist/_pkgs/affine-components/translations.js +26 -0
- package/dist/_pkgs/affine-fragment-doc-title/doc-title.d.ts +18 -0
- package/dist/_pkgs/affine-fragment-doc-title/doc-title.js +41 -2
- package/dist/_pkgs/affine-fragment-doc-title/index.d.ts +1 -1
- package/dist/_pkgs/affine-fragment-doc-title/index.js +1 -1
- package/dist/_pkgs/affine-fragment-doc-title/title-band/band-cell.d.ts +30 -0
- package/dist/_pkgs/affine-fragment-doc-title/title-band/band-cell.js +137 -0
- package/dist/_pkgs/affine-fragment-doc-title/title-band/format.d.ts +7 -19
- package/dist/_pkgs/affine-fragment-doc-title/title-band/format.js +0 -38
- package/dist/_pkgs/affine-fragment-doc-title/title-band/show-here.d.ts +19 -0
- package/dist/_pkgs/affine-fragment-doc-title/title-band/show-here.js +61 -0
- package/dist/_pkgs/affine-fragment-doc-title/title-band/title-band.d.ts +33 -18
- package/dist/_pkgs/affine-fragment-doc-title/title-band/title-band.js +263 -205
- package/dist/_pkgs/affine-fragment-doc-title/translations.d.ts +7 -4
- package/dist/_pkgs/affine-fragment-doc-title/translations.js +12 -9
- package/dist/_pkgs/affine-model/blocks/database/types.d.ts +16 -0
- package/dist/_pkgs/affine-model/blocks/database/types.js +5 -1
- package/dist/_pkgs/affine-shared/services/data-source-picker-service.d.ts +139 -0
- package/dist/_pkgs/affine-shared/services/data-source-picker-service.js +22 -0
- package/dist/_pkgs/affine-shared/services/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/services/index.js +1 -0
- package/dist/_pkgs/affine-shared/services/linked-doc-creation-service.d.ts +15 -6
- package/dist/_pkgs/affine-shared/services/telemetry-service/database.d.ts +59 -0
- package/dist/_pkgs/affine-shared/services/title-band-service.d.ts +34 -7
- package/dist/_pkgs/affine-shared/utils/model/doc.d.ts +10 -2
- package/dist/_pkgs/affine-shared/utils/model/doc.js +17 -7
- package/dist/_pkgs/data-view/core/component/cell-status/cell-status-css.d.ts +2 -0
- package/dist/_pkgs/data-view/core/component/cell-status/cell-status-css.js +16 -0
- package/dist/_pkgs/data-view/core/component/cell-status/cell-status.d.ts +10 -0
- package/dist/_pkgs/data-view/core/component/cell-status/cell-status.js +23 -0
- package/dist/_pkgs/data-view/core/component/index.d.ts +1 -0
- package/dist/_pkgs/data-view/core/component/index.js +1 -0
- package/dist/_pkgs/data-view/core/component/overflow/fit.d.ts +26 -0
- package/dist/_pkgs/data-view/core/component/overflow/fit.js +48 -0
- package/dist/_pkgs/data-view/core/component/overflow/overflow.d.ts +26 -3
- package/dist/_pkgs/data-view/core/component/overflow/overflow.js +84 -31
- package/dist/_pkgs/data-view/core/component/tags/colors.d.ts +7 -0
- package/dist/_pkgs/data-view/core/component/tags/colors.js +22 -10
- package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.d.ts +25 -2
- package/dist/_pkgs/data-view/core/component/tags/multi-tag-select.js +81 -32
- package/dist/_pkgs/data-view/core/data-source/base.d.ts +5 -1
- package/dist/_pkgs/data-view/core/data-source/base.js +7 -1
- package/dist/_pkgs/data-view/core/data-source/hydration.d.ts +44 -0
- package/dist/_pkgs/data-view/core/data-source/hydration.js +31 -0
- package/dist/_pkgs/data-view/core/data-source/index.d.ts +1 -0
- package/dist/_pkgs/data-view/core/data-source/index.js +1 -0
- package/dist/_pkgs/data-view/core/data-view.d.ts +22 -2
- package/dist/_pkgs/data-view/core/data-view.js +14 -0
- package/dist/_pkgs/data-view/core/effect.js +4 -0
- package/dist/_pkgs/data-view/core/group-by/collapsed-state.d.ts +3 -0
- package/dist/_pkgs/data-view/core/group-by/collapsed-state.js +59 -0
- package/dist/_pkgs/data-view/core/group-by/group-properties.d.ts +21 -0
- package/dist/_pkgs/data-view/core/group-by/group-properties.js +38 -0
- package/dist/_pkgs/data-view/core/group-by/group-title.js +4 -0
- package/dist/_pkgs/data-view/core/group-by/group-visibility.d.ts +40 -0
- package/dist/_pkgs/data-view/core/group-by/group-visibility.js +291 -0
- package/dist/_pkgs/data-view/core/group-by/setting.d.ts +11 -3
- package/dist/_pkgs/data-view/core/group-by/setting.js +81 -8
- package/dist/_pkgs/data-view/core/group-by/trait.d.ts +22 -0
- package/dist/_pkgs/data-view/core/group-by/trait.js +62 -1
- package/dist/_pkgs/data-view/core/index.d.ts +3 -0
- package/dist/_pkgs/data-view/core/index.js +3 -0
- package/dist/_pkgs/data-view/core/property/base-cell.d.ts +15 -1
- package/dist/_pkgs/data-view/core/property/base-cell.js +28 -3
- package/dist/_pkgs/data-view/core/property/index.d.ts +1 -0
- package/dist/_pkgs/data-view/core/property/index.js +1 -0
- package/dist/_pkgs/data-view/core/property/standalone-cell.d.ts +109 -0
- package/dist/_pkgs/data-view/core/property/standalone-cell.js +324 -0
- package/dist/_pkgs/data-view/core/telemetry.d.ts +16 -0
- package/dist/_pkgs/data-view/core/telemetry.js +22 -0
- package/dist/_pkgs/data-view/core/utils/new-tab-click.d.ts +2 -0
- package/dist/_pkgs/data-view/core/utils/new-tab-click.js +4 -0
- package/dist/_pkgs/data-view/core/utils/wording.d.ts +11 -0
- package/dist/_pkgs/data-view/core/utils/wording.js +9 -0
- package/dist/_pkgs/data-view/core/view/data-view.d.ts +7 -0
- package/dist/_pkgs/data-view/core/view/default-name.d.ts +10 -0
- package/dist/_pkgs/data-view/core/view/default-name.js +14 -0
- package/dist/_pkgs/data-view/core/view/index.d.ts +2 -0
- package/dist/_pkgs/data-view/core/view/index.js +2 -0
- package/dist/_pkgs/data-view/core/view/open-in.d.ts +27 -0
- package/dist/_pkgs/data-view/core/view/open-in.js +39 -0
- package/dist/_pkgs/data-view/core/view-manager/cell.d.ts +5 -0
- package/dist/_pkgs/data-view/core/view-manager/cell.js +11 -0
- package/dist/_pkgs/data-view/core/view-manager/index.d.ts +3 -0
- package/dist/_pkgs/data-view/core/view-manager/index.js +3 -0
- package/dist/_pkgs/data-view/core/view-manager/new-row-menu-opener.d.ts +18 -0
- package/dist/_pkgs/data-view/core/view-manager/new-row-menu-opener.js +2 -0
- package/dist/_pkgs/data-view/core/view-manager/properties-panel-opener.d.ts +8 -0
- package/dist/_pkgs/data-view/core/view-manager/properties-panel-opener.js +9 -0
- package/dist/_pkgs/data-view/core/view-manager/property.d.ts +14 -0
- package/dist/_pkgs/data-view/core/view-manager/single-view.d.ts +28 -1
- package/dist/_pkgs/data-view/core/view-manager/single-view.js +45 -1
- package/dist/_pkgs/data-view/core/view-manager/view-creation.d.ts +49 -0
- package/dist/_pkgs/data-view/core/view-manager/view-creation.js +40 -0
- package/dist/_pkgs/data-view/core/view-manager/view-manager.d.ts +6 -2
- package/dist/_pkgs/data-view/core/view-manager/view-manager.js +2 -2
- package/dist/_pkgs/data-view/property-presets/date/cell-renderer.d.ts +2 -0
- package/dist/_pkgs/data-view/property-presets/date/cell-renderer.js +11 -2
- package/dist/_pkgs/data-view/property-presets/multi-select/cell-renderer.js +3 -1
- package/dist/_pkgs/data-view/property-presets/select/cell-renderer.js +3 -1
- package/dist/_pkgs/data-view/property-presets/text/cell-renderer.js +3 -1
- package/dist/_pkgs/data-view/translations.d.ts +55 -0
- package/dist/_pkgs/data-view/translations.js +181 -0
- package/dist/_pkgs/data-view/view-presets/calendar/define.js +3 -1
- package/dist/_pkgs/data-view/view-presets/convert.js +2 -0
- package/dist/_pkgs/data-view/view-presets/effect.js +4 -0
- package/dist/_pkgs/data-view/view-presets/flat/flat-converts.d.ts +2 -0
- package/dist/_pkgs/data-view/view-presets/flat/flat-converts.js +35 -0
- package/dist/_pkgs/data-view/view-presets/flat/flat-view-manager.d.ts +79 -0
- package/dist/_pkgs/data-view/view-presets/flat/flat-view-manager.js +194 -0
- package/dist/_pkgs/data-view/view-presets/flat/flat-view-ui.d.ts +56 -0
- package/dist/_pkgs/data-view/view-presets/flat/flat-view-ui.js +266 -0
- package/dist/_pkgs/data-view/view-presets/gallery/define.d.ts +14 -0
- package/dist/_pkgs/data-view/view-presets/gallery/define.js +15 -0
- package/dist/_pkgs/data-view/view-presets/gallery/effect.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/gallery/effect.js +4 -0
- package/dist/_pkgs/data-view/view-presets/gallery/gallery-view.d.ts +27 -0
- package/dist/_pkgs/data-view/view-presets/gallery/gallery-view.js +179 -0
- package/dist/_pkgs/data-view/view-presets/gallery/index.d.ts +2 -0
- package/dist/_pkgs/data-view/view-presets/gallery/index.js +2 -0
- package/dist/_pkgs/data-view/view-presets/gallery/renderer.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/gallery/renderer.js +11 -0
- package/dist/_pkgs/data-view/view-presets/index.d.ts +5 -0
- package/dist/_pkgs/data-view/view-presets/index.js +7 -0
- package/dist/_pkgs/data-view/view-presets/kanban/define.js +3 -1
- package/dist/_pkgs/data-view/view-presets/kanban/kanban-view-manager.js +5 -53
- package/dist/_pkgs/data-view/view-presets/kanban/mobile/card.js +8 -1
- package/dist/_pkgs/data-view/view-presets/kanban/mobile/cell.js +6 -1
- package/dist/_pkgs/data-view/view-presets/kanban/mobile/group.d.ts +4 -2
- package/dist/_pkgs/data-view/view-presets/kanban/mobile/group.js +52 -6
- package/dist/_pkgs/data-view/view-presets/kanban/mobile/kanban-view-ui-logic.js +5 -1
- package/dist/_pkgs/data-view/view-presets/kanban/pc/card.js +2 -0
- package/dist/_pkgs/data-view/view-presets/kanban/pc/cell.js +4 -0
- package/dist/_pkgs/data-view/view-presets/kanban/pc/group.d.ts +4 -2
- package/dist/_pkgs/data-view/view-presets/kanban/pc/group.js +51 -6
- package/dist/_pkgs/data-view/view-presets/kanban/pc/kanban-view-ui-logic.js +5 -1
- package/dist/_pkgs/data-view/view-presets/list/define.d.ts +14 -0
- package/dist/_pkgs/data-view/view-presets/list/define.js +15 -0
- package/dist/_pkgs/data-view/view-presets/list/effect.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/list/effect.js +4 -0
- package/dist/_pkgs/data-view/view-presets/list/index.d.ts +2 -0
- package/dist/_pkgs/data-view/view-presets/list/index.js +2 -0
- package/dist/_pkgs/data-view/view-presets/list/list-view.d.ts +24 -0
- package/dist/_pkgs/data-view/view-presets/list/list-view.js +194 -0
- package/dist/_pkgs/data-view/view-presets/list/renderer.d.ts +1 -0
- package/dist/_pkgs/data-view/view-presets/list/renderer.js +11 -0
- package/dist/_pkgs/data-view/view-presets/table/collapsed-state.d.ts +3 -14
- package/dist/_pkgs/data-view/view-presets/table/collapsed-state.js +6 -30
- package/dist/_pkgs/data-view/view-presets/table/consts.d.ts +2 -0
- package/dist/_pkgs/data-view/view-presets/table/consts.js +2 -0
- package/dist/_pkgs/data-view/view-presets/table/define.js +3 -1
- package/dist/_pkgs/data-view/view-presets/table/mobile/cell.js +4 -1
- package/dist/_pkgs/data-view/view-presets/table/mobile/column-header.js +2 -2
- package/dist/_pkgs/data-view/view-presets/table/mobile/group.d.ts +3 -1
- package/dist/_pkgs/data-view/view-presets/table/mobile/group.js +20 -5
- package/dist/_pkgs/data-view/view-presets/table/mobile/row.js +10 -2
- package/dist/_pkgs/data-view/view-presets/table/mobile/table-view-ui-logic.js +4 -1
- package/dist/_pkgs/data-view/view-presets/table/pc/cell.js +4 -1
- package/dist/_pkgs/data-view/view-presets/table/pc/controller/hotkeys.js +1 -1
- package/dist/_pkgs/data-view/view-presets/table/pc/group.d.ts +3 -1
- package/dist/_pkgs/data-view/view-presets/table/pc/group.js +20 -5
- package/dist/_pkgs/data-view/view-presets/table/pc/menu.d.ts +1 -1
- package/dist/_pkgs/data-view/view-presets/table/pc/menu.js +2 -1
- package/dist/_pkgs/data-view/view-presets/table/pc/row/row.js +3 -2
- package/dist/_pkgs/data-view/view-presets/table/pc/table-view-ui-logic.js +4 -1
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/hotkeys.js +1 -1
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/group/bottom/stats/column-stats-column.js +5 -1
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/group/top/group-title.js +22 -19
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/cell.js +4 -1
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/table-view-ui-logic.js +7 -2
- package/dist/_pkgs/data-view/view-presets/table/stats/column-stats-column.js +5 -1
- package/dist/_pkgs/data-view/view-presets/table/table-view-manager.js +5 -53
- package/dist/_pkgs/data-view/widget-presets/tools/presets/table-add-row/add-row.d.ts +1 -0
- package/dist/_pkgs/data-view/widget-presets/tools/presets/table-add-row/add-row.js +60 -2
- package/dist/_pkgs/data-view/widget-presets/tools/presets/view-options/view-options.d.ts +18 -1
- package/dist/_pkgs/data-view/widget-presets/tools/presets/view-options/view-options.js +121 -124
- package/dist/_pkgs/data-view/widget-presets/tools/presets/view-options/view-settings.d.ts +43 -0
- package/dist/_pkgs/data-view/widget-presets/tools/presets/view-options/view-settings.js +187 -0
- package/dist/_pkgs/data-view/widget-presets/views-bar/views-view.d.ts +36 -3
- package/dist/_pkgs/data-view/widget-presets/views-bar/views-view.js +187 -59
- package/dist/extensions/view.d.ts +2 -2
- package/dist/extensions/view.js +10 -3
- package/dist/flags.d.ts +8 -4
- package/dist/flags.js +8 -4
- package/dist/frameworks.d.ts +27 -0
- package/dist/frameworks.js +28 -0
- package/dist/translations.js +13 -1
- package/package.json +5 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { sortByManually } from './trait.js';
|
|
2
|
+
/**
|
|
3
|
+
* The group ops every grouped preset hands its `GroupTrait`, over the view's
|
|
4
|
+
* stored `groupProperties` (the shape table and kanban have always stored:
|
|
5
|
+
* `{ key, hide, manuallyCardSort }`). One copy for table, kanban, gallery and
|
|
6
|
+
* list (ADR 0035 §8, B8), so a hidden group and a manual order read and write
|
|
7
|
+
* the same way in every view.
|
|
8
|
+
*
|
|
9
|
+
* Every write lists the entry of every group key it is given, so a hidden
|
|
10
|
+
* group keeps its `hide` and its card order through a reorder; nothing is
|
|
11
|
+
* written when the value would not change.
|
|
12
|
+
*/
|
|
13
|
+
export const groupPropertiesOps = (read, write) => {
|
|
14
|
+
const entries = () => new Map(read().map(v => [v.key, v]));
|
|
15
|
+
const entry = (map, key) => map.get(key) ?? { key, hide: false, manuallyCardSort: [] };
|
|
16
|
+
const groupHidden = (key) => read().find(v => v.key === key)?.hide === true;
|
|
17
|
+
return {
|
|
18
|
+
sortGroup: (keys) => sortByManually(keys, v => v, read().map(v => v.key)),
|
|
19
|
+
sortRow: (key, rows) => sortByManually(rows, v => v.rowId, read().find(v => v.key === key)?.manuallyCardSort ?? []),
|
|
20
|
+
changeGroupSort: (keys) => {
|
|
21
|
+
const map = entries();
|
|
22
|
+
write(keys.map(key => entry(map, key)));
|
|
23
|
+
},
|
|
24
|
+
changeRowSort: (groupKeys, groupKey, keys) => {
|
|
25
|
+
const map = entries();
|
|
26
|
+
write(groupKeys.map(key => key === groupKey
|
|
27
|
+
? { ...entry(map, key), manuallyCardSort: keys }
|
|
28
|
+
: entry(map, key)));
|
|
29
|
+
},
|
|
30
|
+
groupHidden,
|
|
31
|
+
groupHideSet: (groupKeys, groupKey, hide) => {
|
|
32
|
+
if (groupHidden(groupKey) === hide)
|
|
33
|
+
return;
|
|
34
|
+
const map = entries();
|
|
35
|
+
write(groupKeys.map(key => key === groupKey ? { ...entry(map, key), hide } : entry(map, key)));
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
};
|
|
@@ -3,8 +3,12 @@ import { IS_MOBILE } from '../../../global/env/index.js';
|
|
|
3
3
|
import { MoreHorizontalIcon, PlusIcon } from '@blocksuite/icons/lit';
|
|
4
4
|
import { nothing } from 'lit';
|
|
5
5
|
import { html } from 'lit/static-html.js';
|
|
6
|
+
import { VALUES_PENDING_MARK, valuesReady } from '../data-source/hydration.js';
|
|
6
7
|
import { renderUniLit } from '../utils/uni-component/uni-component.js';
|
|
7
8
|
function GroupHeaderCount(group) {
|
|
9
|
+
if (!valuesReady(group.property.view.manager.dataSource)) {
|
|
10
|
+
return html ` <div class="group-header-count">${VALUES_PENDING_MARK}</div>`;
|
|
11
|
+
}
|
|
8
12
|
const cards = group.rows;
|
|
9
13
|
if (!cards.length) {
|
|
10
14
|
return;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type MenuConfig } from '../../../affine-components/context-menu/index.js';
|
|
2
|
+
import { type BlockStdScope, ShadowlessElement } from '../../../std/index.js';
|
|
3
|
+
import { nothing } from 'lit';
|
|
4
|
+
import { type Wording } from '../utils/wording.js';
|
|
5
|
+
import type { Group, GroupTrait } from './trait.js';
|
|
6
|
+
/**
|
|
7
|
+
* The group chrome every grouped preset shares (ADR 0035 §8, B8, PRD
|
|
8
|
+
* REQ-DB-16): "Hide group" in a group's menu, the fold toggle of a group
|
|
9
|
+
* header, and the list of hidden groups drawn at the end of the view. Hiding
|
|
10
|
+
* is a view setting, shared by everyone; folding is personal
|
|
11
|
+
* (`collapsed-state.ts`).
|
|
12
|
+
*/
|
|
13
|
+
/** "Hide group", for a group's own menu. Absent where the view hides none. */
|
|
14
|
+
export declare const hideGroupAction: (group: Group, wording: Wording) => MenuConfig;
|
|
15
|
+
/**
|
|
16
|
+
* A group header's fold button. Folding is never a write, so a read-only
|
|
17
|
+
* view folds too.
|
|
18
|
+
*/
|
|
19
|
+
export declare const renderGroupToggle: (group: Group, wording: Wording) => import("lit-html").TemplateResult<1>;
|
|
20
|
+
export declare const groupToggleStyles: import("lit").CSSResult;
|
|
21
|
+
declare const DataViewHiddenGroups_base: typeof ShadowlessElement & import("../../../global/utils/types.js").Constructor<import("../../../global/lit/with-disposable.js").DisposableClass>;
|
|
22
|
+
/**
|
|
23
|
+
* The hidden groups of a view, at its end, each with a button that shows it
|
|
24
|
+
* again (PRD REQ-DB-16). Nothing when the view hides no group. A read-only
|
|
25
|
+
* view lists them without the button.
|
|
26
|
+
*/
|
|
27
|
+
export declare class DataViewHiddenGroups extends DataViewHiddenGroups_base {
|
|
28
|
+
static styles: import("lit").CSSResult;
|
|
29
|
+
/** Absent outside an editor (a unit test): the wordings read English. */
|
|
30
|
+
accessor std: BlockStdScope;
|
|
31
|
+
accessor groupTrait: GroupTrait | undefined;
|
|
32
|
+
connectedCallback(): void;
|
|
33
|
+
render(): import("lit-html").TemplateResult<1> | typeof nothing;
|
|
34
|
+
}
|
|
35
|
+
declare global {
|
|
36
|
+
interface HTMLElementTagNameMap {
|
|
37
|
+
'dv-hidden-groups': DataViewHiddenGroups;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import { menu } from '../../../affine-components/context-menu/index.js';
|
|
36
|
+
import { SignalWatcher, WithDisposable } from '../../../global/lit/index.js';
|
|
37
|
+
import { InvisibleIcon, ToggleDownIcon, ToggleRightIcon, ViewIcon, } from '@blocksuite/icons/lit';
|
|
38
|
+
import { ShadowlessElement, stdContext } from '../../../std/index.js';
|
|
39
|
+
import { consume } from '@lit/context';
|
|
40
|
+
import { cssVarV2 } from '@toeverything/theme/v2';
|
|
41
|
+
import { css, html, nothing, unsafeCSS } from 'lit';
|
|
42
|
+
import { property } from 'lit/decorators.js';
|
|
43
|
+
import { repeat } from 'lit/directives/repeat.js';
|
|
44
|
+
import { DATA_VIEW_GROUP_COLLAPSE, DATA_VIEW_GROUP_EXPAND, DATA_VIEW_GROUP_HIDE, DATA_VIEW_GROUP_SHOW, DATA_VIEW_HIDDEN_GROUPS, } from '../../translations.js';
|
|
45
|
+
import { VALUES_PENDING_MARK, valuesReady } from '../data-source/hydration.js';
|
|
46
|
+
import { renderUniLit } from '../utils/uni-component/uni-component.js';
|
|
47
|
+
import { wordingOf } from '../utils/wording.js';
|
|
48
|
+
/**
|
|
49
|
+
* The group chrome every grouped preset shares (ADR 0035 §8, B8, PRD
|
|
50
|
+
* REQ-DB-16): "Hide group" in a group's menu, the fold toggle of a group
|
|
51
|
+
* header, and the list of hidden groups drawn at the end of the view. Hiding
|
|
52
|
+
* is a view setting, shared by everyone; folding is personal
|
|
53
|
+
* (`collapsed-state.ts`).
|
|
54
|
+
*/
|
|
55
|
+
/** "Hide group", for a group's own menu. Absent where the view hides none. */
|
|
56
|
+
export const hideGroupAction = (group, wording) => menu.action({
|
|
57
|
+
name: wording(DATA_VIEW_GROUP_HIDE),
|
|
58
|
+
prefix: InvisibleIcon(),
|
|
59
|
+
hide: () => !group.manager.groupsCanHide,
|
|
60
|
+
select: () => {
|
|
61
|
+
group.manager.groupHideSet(group.key, true);
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
const groupCount = (group) => valuesReady(group.property.view.manager.dataSource)
|
|
65
|
+
? group.rows.length
|
|
66
|
+
: VALUES_PENDING_MARK;
|
|
67
|
+
/**
|
|
68
|
+
* A group header's fold button. Folding is never a write, so a read-only
|
|
69
|
+
* view folds too.
|
|
70
|
+
*/
|
|
71
|
+
export const renderGroupToggle = (group, wording) => {
|
|
72
|
+
const collapsed = group.manager.collapsed$(group.key).value;
|
|
73
|
+
const label = wording(collapsed ? DATA_VIEW_GROUP_EXPAND : DATA_VIEW_GROUP_COLLAPSE);
|
|
74
|
+
return html `<button
|
|
75
|
+
class="dv-group-toggle"
|
|
76
|
+
data-testid="dv-group-toggle"
|
|
77
|
+
aria-expanded="${collapsed ? 'false' : 'true'}"
|
|
78
|
+
aria-label="${label}"
|
|
79
|
+
title="${label}"
|
|
80
|
+
@click="${(event) => {
|
|
81
|
+
event.stopPropagation();
|
|
82
|
+
group.manager.collapsedSet(group.key, !collapsed);
|
|
83
|
+
}}"
|
|
84
|
+
>
|
|
85
|
+
${collapsed ? ToggleRightIcon() : ToggleDownIcon()}
|
|
86
|
+
</button>`;
|
|
87
|
+
};
|
|
88
|
+
export const groupToggleStyles = css `
|
|
89
|
+
.dv-group-toggle {
|
|
90
|
+
display: flex;
|
|
91
|
+
flex-shrink: 0;
|
|
92
|
+
align-items: center;
|
|
93
|
+
justify-content: center;
|
|
94
|
+
width: 24px;
|
|
95
|
+
height: 24px;
|
|
96
|
+
padding: 0;
|
|
97
|
+
border: none;
|
|
98
|
+
border-radius: 4px;
|
|
99
|
+
background: transparent;
|
|
100
|
+
color: var(--affine-icon-color);
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.dv-group-toggle svg {
|
|
105
|
+
width: 16px;
|
|
106
|
+
height: 16px;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.dv-group-toggle:focus-visible {
|
|
110
|
+
outline: 2px solid var(--affine-primary-color);
|
|
111
|
+
outline-offset: 1px;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@media (hover: hover) {
|
|
115
|
+
.dv-group-toggle:hover {
|
|
116
|
+
background-color: var(--affine-hover-color);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@media (pointer: coarse) {
|
|
121
|
+
.dv-group-toggle {
|
|
122
|
+
width: 44px;
|
|
123
|
+
height: 44px;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
`;
|
|
127
|
+
/**
|
|
128
|
+
* The hidden groups of a view, at its end, each with a button that shows it
|
|
129
|
+
* again (PRD REQ-DB-16). Nothing when the view hides no group. A read-only
|
|
130
|
+
* view lists them without the button.
|
|
131
|
+
*/
|
|
132
|
+
let DataViewHiddenGroups = (() => {
|
|
133
|
+
let _classSuper = SignalWatcher(WithDisposable(ShadowlessElement));
|
|
134
|
+
let _std_decorators;
|
|
135
|
+
let _std_initializers = [];
|
|
136
|
+
let _std_extraInitializers = [];
|
|
137
|
+
let _groupTrait_decorators;
|
|
138
|
+
let _groupTrait_initializers = [];
|
|
139
|
+
let _groupTrait_extraInitializers = [];
|
|
140
|
+
return class DataViewHiddenGroups extends _classSuper {
|
|
141
|
+
static {
|
|
142
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
143
|
+
_std_decorators = [consume({ context: stdContext })];
|
|
144
|
+
_groupTrait_decorators = [property({ attribute: false })];
|
|
145
|
+
__esDecorate(this, null, _std_decorators, { kind: "accessor", name: "std", static: false, private: false, access: { has: obj => "std" in obj, get: obj => obj.std, set: (obj, value) => { obj.std = value; } }, metadata: _metadata }, _std_initializers, _std_extraInitializers);
|
|
146
|
+
__esDecorate(this, null, _groupTrait_decorators, { kind: "accessor", name: "groupTrait", static: false, private: false, access: { has: obj => "groupTrait" in obj, get: obj => obj.groupTrait, set: (obj, value) => { obj.groupTrait = value; } }, metadata: _metadata }, _groupTrait_initializers, _groupTrait_extraInitializers);
|
|
147
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
148
|
+
}
|
|
149
|
+
static { this.styles = css `
|
|
150
|
+
dv-hidden-groups {
|
|
151
|
+
display: block;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.dv-hidden-groups {
|
|
155
|
+
display: flex;
|
|
156
|
+
flex-direction: column;
|
|
157
|
+
gap: 2px;
|
|
158
|
+
padding: 8px 0;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.dv-hidden-groups-title {
|
|
162
|
+
display: flex;
|
|
163
|
+
align-items: center;
|
|
164
|
+
gap: 8px;
|
|
165
|
+
padding: 0 4px 4px;
|
|
166
|
+
font-size: 12px;
|
|
167
|
+
line-height: 20px;
|
|
168
|
+
color: var(--affine-text-secondary-color);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.dv-hidden-group {
|
|
172
|
+
display: flex;
|
|
173
|
+
align-items: center;
|
|
174
|
+
gap: 8px;
|
|
175
|
+
min-height: 32px;
|
|
176
|
+
padding: 0 4px;
|
|
177
|
+
border-radius: 4px;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.dv-hidden-group-title {
|
|
181
|
+
flex: 1 1 auto;
|
|
182
|
+
min-width: 0;
|
|
183
|
+
overflow: hidden;
|
|
184
|
+
opacity: 0.7;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.dv-hidden-group-count {
|
|
188
|
+
flex-shrink: 0;
|
|
189
|
+
font-size: 12px;
|
|
190
|
+
color: var(--affine-text-secondary-color);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.dv-hidden-group-show {
|
|
194
|
+
display: flex;
|
|
195
|
+
flex-shrink: 0;
|
|
196
|
+
align-items: center;
|
|
197
|
+
justify-content: center;
|
|
198
|
+
width: 28px;
|
|
199
|
+
height: 28px;
|
|
200
|
+
padding: 0;
|
|
201
|
+
border: 1px solid ${unsafeCSS(cssVarV2.layer.insideBorder.border)};
|
|
202
|
+
border-radius: 4px;
|
|
203
|
+
background: transparent;
|
|
204
|
+
color: var(--affine-icon-color);
|
|
205
|
+
cursor: pointer;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.dv-hidden-group-show svg {
|
|
209
|
+
width: 16px;
|
|
210
|
+
height: 16px;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.dv-hidden-group-show:focus-visible {
|
|
214
|
+
outline: 2px solid var(--affine-primary-color);
|
|
215
|
+
outline-offset: 1px;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
@media (hover: hover) {
|
|
219
|
+
.dv-hidden-group-show:hover {
|
|
220
|
+
background-color: var(--affine-hover-color);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
@media (pointer: coarse) {
|
|
225
|
+
.dv-hidden-group {
|
|
226
|
+
min-height: 44px;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.dv-hidden-group-show {
|
|
230
|
+
width: 44px;
|
|
231
|
+
height: 44px;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
`; }
|
|
235
|
+
#std_accessor_storage = __runInitializers(this, _std_initializers, void 0);
|
|
236
|
+
/** Absent outside an editor (a unit test): the wordings read English. */
|
|
237
|
+
get std() { return this.#std_accessor_storage; }
|
|
238
|
+
set std(value) { this.#std_accessor_storage = value; }
|
|
239
|
+
#groupTrait_accessor_storage = (__runInitializers(this, _std_extraInitializers), __runInitializers(this, _groupTrait_initializers, undefined));
|
|
240
|
+
get groupTrait() { return this.#groupTrait_accessor_storage; }
|
|
241
|
+
set groupTrait(value) { this.#groupTrait_accessor_storage = value; }
|
|
242
|
+
connectedCallback() {
|
|
243
|
+
super.connectedCallback();
|
|
244
|
+
this.dataset.testid = 'dv-hidden-groups';
|
|
245
|
+
}
|
|
246
|
+
render() {
|
|
247
|
+
const trait = this.groupTrait;
|
|
248
|
+
const groups = trait?.hiddenGroups$.value ?? [];
|
|
249
|
+
if (!trait || !groups.length)
|
|
250
|
+
return nothing;
|
|
251
|
+
const wording = wordingOf(this.std);
|
|
252
|
+
const readonly = trait.view.readonly$.value;
|
|
253
|
+
const show = wording(DATA_VIEW_GROUP_SHOW);
|
|
254
|
+
return html `<div class="dv-hidden-groups">
|
|
255
|
+
<div class="dv-hidden-groups-title">
|
|
256
|
+
<span>${wording(DATA_VIEW_HIDDEN_GROUPS)}</span>
|
|
257
|
+
<span>${groups.length}</span>
|
|
258
|
+
</div>
|
|
259
|
+
${repeat(groups, group => group.key, group => {
|
|
260
|
+
const props = { group, readonly: true };
|
|
261
|
+
return html `<div
|
|
262
|
+
class="dv-hidden-group"
|
|
263
|
+
data-testid="dv-hidden-group"
|
|
264
|
+
data-group-key="${group.key}"
|
|
265
|
+
>
|
|
266
|
+
<div class="dv-hidden-group-title">
|
|
267
|
+
${renderUniLit(group.view, props)}
|
|
268
|
+
</div>
|
|
269
|
+
<span class="dv-hidden-group-count">${groupCount(group)}</span>
|
|
270
|
+
${readonly
|
|
271
|
+
? nothing
|
|
272
|
+
: html `<button
|
|
273
|
+
class="dv-hidden-group-show"
|
|
274
|
+
data-testid="dv-group-show"
|
|
275
|
+
aria-label="${show}"
|
|
276
|
+
title="${show}"
|
|
277
|
+
@click="${() => trait.groupHideSet(group.key, false)}"
|
|
278
|
+
>
|
|
279
|
+
${ViewIcon()}
|
|
280
|
+
</button>`}
|
|
281
|
+
</div>`;
|
|
282
|
+
})}
|
|
283
|
+
</div>`;
|
|
284
|
+
}
|
|
285
|
+
constructor() {
|
|
286
|
+
super(...arguments);
|
|
287
|
+
__runInitializers(this, _groupTrait_extraInitializers);
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
})();
|
|
291
|
+
export { DataViewHiddenGroups };
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
import { type MenuOptions, type PopupTarget } from '../../../affine-components/context-menu/index.js';
|
|
2
2
|
import { ShadowlessElement } from '../../../std/index.js';
|
|
3
|
-
import type
|
|
3
|
+
import { type Wording } from '../utils/wording.js';
|
|
4
|
+
import type { Group, GroupTrait } from './trait.js';
|
|
4
5
|
declare const GroupSetting_base: typeof ShadowlessElement & import("../../../global/utils/types.js").Constructor<import("../../../global/lit/with-disposable.js").DisposableClass>;
|
|
5
6
|
export declare class GroupSetting extends GroupSetting_base {
|
|
6
7
|
static styles: import("lit").CSSResult;
|
|
7
8
|
accessor groupTrait: GroupTrait;
|
|
8
|
-
|
|
9
|
+
/** Resolved by the menu's opener: a popup renders outside the host. */
|
|
10
|
+
accessor wording: Wording;
|
|
11
|
+
/**
|
|
12
|
+
* The eye of a group (B8): hide it from the view for everyone, or show it
|
|
13
|
+
* again. A hidden group keeps its row here, in its place in the order.
|
|
14
|
+
*/
|
|
15
|
+
private renderVisibility;
|
|
16
|
+
groups$: import("@preact/signals-core").ReadonlySignal<Group<unknown, unknown, Record<string, unknown>>[] | undefined>;
|
|
9
17
|
sortContext: import("../utils/wc-dnd/sort/sort-context.js").SortContext;
|
|
10
18
|
connectedCallback(): void;
|
|
11
19
|
protected render(): unknown;
|
|
@@ -21,5 +29,5 @@ export declare const popSelectGroupByProperty: (target: PopupTarget, group: Grou
|
|
|
21
29
|
onClose?: () => void;
|
|
22
30
|
onBack?: () => void;
|
|
23
31
|
}) => void;
|
|
24
|
-
export declare const popGroupSetting: (target: PopupTarget, group: GroupTrait, onBack: () => void) => void;
|
|
32
|
+
export declare const popGroupSetting: (target: PopupTarget, group: GroupTrait, onBack: () => void, wording?: Wording) => void;
|
|
25
33
|
export {};
|
|
@@ -34,16 +34,17 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
34
34
|
};
|
|
35
35
|
import { menu, popMenu, } from '../../../affine-components/context-menu/index.js';
|
|
36
36
|
import { SignalWatcher, WithDisposable } from '../../../global/lit/index.js';
|
|
37
|
-
import { DeleteIcon } from '@blocksuite/icons/lit';
|
|
37
|
+
import { DeleteIcon, InvisibleIcon, ViewIcon } from '@blocksuite/icons/lit';
|
|
38
38
|
import { ShadowlessElement } from '../../../std/index.js';
|
|
39
39
|
import { computed } from '@preact/signals-core';
|
|
40
|
-
import { css, html, unsafeCSS } from 'lit';
|
|
40
|
+
import { css, html, nothing, unsafeCSS } from 'lit';
|
|
41
41
|
import { property, query } from 'lit/decorators.js';
|
|
42
42
|
import { repeat } from 'lit/directives/repeat.js';
|
|
43
|
+
import { DATA_VIEW_GROUP_HIDE, DATA_VIEW_GROUP_SHOW, } from '../../translations.js';
|
|
43
44
|
import { KanbanSingleView } from '../../view-presets/kanban/kanban-view-manager.js';
|
|
44
|
-
import { TableSingleView } from '../../view-presets/table/table-view-manager.js';
|
|
45
45
|
import { dataViewCssVariable } from '../common/css-variable.js';
|
|
46
46
|
import { renderUniLit } from '../utils/uni-component/uni-component.js';
|
|
47
|
+
import { englishWording } from '../utils/wording.js';
|
|
47
48
|
import { dragHandler } from '../utils/wc-dnd/dnd-context.js';
|
|
48
49
|
import { defaultActivators } from '../utils/wc-dnd/sensors/index.js';
|
|
49
50
|
import { createSortContext, sortable, } from '../utils/wc-dnd/sort/sort-context.js';
|
|
@@ -54,6 +55,9 @@ let GroupSetting = (() => {
|
|
|
54
55
|
let _groupTrait_decorators;
|
|
55
56
|
let _groupTrait_initializers = [];
|
|
56
57
|
let _groupTrait_extraInitializers = [];
|
|
58
|
+
let _wording_decorators;
|
|
59
|
+
let _wording_initializers = [];
|
|
60
|
+
let _wording_extraInitializers = [];
|
|
57
61
|
let _groupContainer_decorators;
|
|
58
62
|
let _groupContainer_initializers = [];
|
|
59
63
|
let _groupContainer_extraInitializers = [];
|
|
@@ -61,8 +65,10 @@ let GroupSetting = (() => {
|
|
|
61
65
|
static {
|
|
62
66
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
63
67
|
_groupTrait_decorators = [property({ attribute: false })];
|
|
68
|
+
_wording_decorators = [property({ attribute: false })];
|
|
64
69
|
_groupContainer_decorators = [query('.group-sort-setting')];
|
|
65
70
|
__esDecorate(this, null, _groupTrait_decorators, { kind: "accessor", name: "groupTrait", static: false, private: false, access: { has: obj => "groupTrait" in obj, get: obj => obj.groupTrait, set: (obj, value) => { obj.groupTrait = value; } }, metadata: _metadata }, _groupTrait_initializers, _groupTrait_extraInitializers);
|
|
71
|
+
__esDecorate(this, null, _wording_decorators, { kind: "accessor", name: "wording", static: false, private: false, access: { has: obj => "wording" in obj, get: obj => obj.wording, set: (obj, value) => { obj.wording = value; } }, metadata: _metadata }, _wording_initializers, _wording_extraInitializers);
|
|
66
72
|
__esDecorate(this, null, _groupContainer_decorators, { kind: "accessor", name: "groupContainer", static: false, private: false, access: { has: obj => "groupContainer" in obj, get: obj => obj.groupContainer, set: (obj, value) => { obj.groupContainer = value; } }, metadata: _metadata }, _groupContainer_initializers, _groupContainer_extraInitializers);
|
|
67
73
|
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
68
74
|
}
|
|
@@ -96,10 +102,73 @@ let GroupSetting = (() => {
|
|
|
96
102
|
.group-item:hover .group-item-drag-bar {
|
|
97
103
|
background-color: #c0bfc1;
|
|
98
104
|
}
|
|
105
|
+
|
|
106
|
+
.group-item-visibility {
|
|
107
|
+
display: flex;
|
|
108
|
+
flex-shrink: 0;
|
|
109
|
+
align-items: center;
|
|
110
|
+
justify-content: center;
|
|
111
|
+
width: 24px;
|
|
112
|
+
height: 24px;
|
|
113
|
+
margin-left: auto;
|
|
114
|
+
padding: 0;
|
|
115
|
+
border: none;
|
|
116
|
+
border-radius: 4px;
|
|
117
|
+
background: transparent;
|
|
118
|
+
color: var(--affine-icon-color);
|
|
119
|
+
cursor: pointer;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.group-item-visibility svg {
|
|
123
|
+
width: 16px;
|
|
124
|
+
height: 16px;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.group-item-visibility:hover {
|
|
128
|
+
background-color: var(--affine-hover-color);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
@media (pointer: coarse) {
|
|
132
|
+
.group-item {
|
|
133
|
+
align-items: center;
|
|
134
|
+
min-height: 44px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.group-item-visibility {
|
|
138
|
+
width: 44px;
|
|
139
|
+
height: 44px;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
99
142
|
`; }
|
|
100
143
|
#groupTrait_accessor_storage;
|
|
101
144
|
get groupTrait() { return this.#groupTrait_accessor_storage; }
|
|
102
145
|
set groupTrait(value) { this.#groupTrait_accessor_storage = value; }
|
|
146
|
+
#wording_accessor_storage;
|
|
147
|
+
/** Resolved by the menu's opener: a popup renders outside the host. */
|
|
148
|
+
get wording() { return this.#wording_accessor_storage; }
|
|
149
|
+
set wording(value) { this.#wording_accessor_storage = value; }
|
|
150
|
+
/**
|
|
151
|
+
* The eye of a group (B8): hide it from the view for everyone, or show it
|
|
152
|
+
* again. A hidden group keeps its row here, in its place in the order.
|
|
153
|
+
*/
|
|
154
|
+
renderVisibility(group) {
|
|
155
|
+
const trait = this.groupTrait;
|
|
156
|
+
if (!trait.groupsCanHide || trait.view.readonly$.value)
|
|
157
|
+
return nothing;
|
|
158
|
+
const hidden = trait.hiddenGroups$.value.includes(group);
|
|
159
|
+
const label = this.wording(hidden ? DATA_VIEW_GROUP_SHOW : DATA_VIEW_GROUP_HIDE);
|
|
160
|
+
return html `<button
|
|
161
|
+
class="group-item-visibility"
|
|
162
|
+
data-testid="dv-group-visibility"
|
|
163
|
+
aria-label="${label}"
|
|
164
|
+
title="${label}"
|
|
165
|
+
aria-pressed="${hidden ? 'true' : 'false'}"
|
|
166
|
+
@pointerdown="${(event) => event.stopPropagation()}"
|
|
167
|
+
@click="${() => trait.groupHideSet(group.key, !hidden)}"
|
|
168
|
+
>
|
|
169
|
+
${hidden ? InvisibleIcon() : ViewIcon()}
|
|
170
|
+
</button>`;
|
|
171
|
+
}
|
|
103
172
|
connectedCallback() {
|
|
104
173
|
super.connectedCallback();
|
|
105
174
|
this._disposables.addFromEvent(this, 'pointerdown', e => {
|
|
@@ -146,6 +215,7 @@ let GroupSetting = (() => {
|
|
|
146
215
|
style="position:absolute;left: 0;top: 0;right: 0;bottom: 0;"
|
|
147
216
|
></div>
|
|
148
217
|
</div>
|
|
218
|
+
${this.renderVisibility(group)}
|
|
149
219
|
</div>`;
|
|
150
220
|
})}
|
|
151
221
|
</div>
|
|
@@ -157,7 +227,8 @@ let GroupSetting = (() => {
|
|
|
157
227
|
constructor() {
|
|
158
228
|
super(...arguments);
|
|
159
229
|
this.#groupTrait_accessor_storage = __runInitializers(this, _groupTrait_initializers, void 0);
|
|
160
|
-
this
|
|
230
|
+
this.#wording_accessor_storage = (__runInitializers(this, _groupTrait_extraInitializers), __runInitializers(this, _wording_initializers, englishWording));
|
|
231
|
+
this.groups$ = (__runInitializers(this, _wording_extraInitializers), computed(() => {
|
|
161
232
|
return this.groupTrait.groupsDataList$.value;
|
|
162
233
|
}));
|
|
163
234
|
this.sortContext = createSortContext({
|
|
@@ -323,7 +394,7 @@ export const popSelectGroupByProperty = (target, group, ops) => {
|
|
|
323
394
|
options: selectGroupByProperty(group, ops),
|
|
324
395
|
});
|
|
325
396
|
};
|
|
326
|
-
export const popGroupSetting = (target, group, onBack) => {
|
|
397
|
+
export const popGroupSetting = (target, group, onBack, wording) => {
|
|
327
398
|
const view = group.view;
|
|
328
399
|
const groupProperty = group.property$.value;
|
|
329
400
|
if (groupProperty == null) {
|
|
@@ -361,7 +432,7 @@ export const popGroupSetting = (target, group, onBack) => {
|
|
|
361
432
|
options: selectGroupByProperty(group, {
|
|
362
433
|
onSelect: () => {
|
|
363
434
|
menuHandler.close();
|
|
364
|
-
popGroupSetting(target, group, onBack);
|
|
435
|
+
popGroupSetting(target, group, onBack, wording);
|
|
365
436
|
},
|
|
366
437
|
}),
|
|
367
438
|
}),
|
|
@@ -371,7 +442,7 @@ export const popGroupSetting = (target, group, onBack) => {
|
|
|
371
442
|
items: group.isDateGroup$.value
|
|
372
443
|
? dateGroupSettingItems(group, () => {
|
|
373
444
|
menuHandler.close();
|
|
374
|
-
popGroupSetting(target, group, onBack);
|
|
445
|
+
popGroupSetting(target, group, onBack, wording);
|
|
375
446
|
})
|
|
376
447
|
: [],
|
|
377
448
|
}),
|
|
@@ -384,6 +455,7 @@ export const popGroupSetting = (target, group, onBack) => {
|
|
|
384
455
|
menu => html ` <data-view-group-setting
|
|
385
456
|
@mouseenter="${() => menu.closeSubMenu()}"
|
|
386
457
|
.groupTrait="${group}"
|
|
458
|
+
.wording="${wording ?? englishWording}"
|
|
387
459
|
.columnId="${groupProperty.id}"
|
|
388
460
|
></data-view-group-setting>`,
|
|
389
461
|
],
|
|
@@ -394,7 +466,8 @@ export const popGroupSetting = (target, group, onBack) => {
|
|
|
394
466
|
name: 'Remove grouping',
|
|
395
467
|
prefix: DeleteIcon(),
|
|
396
468
|
class: { 'delete-item': true },
|
|
397
|
-
|
|
469
|
+
// Every layout but the kanban, which is a grouping (B8).
|
|
470
|
+
hide: () => view instanceof KanbanSingleView,
|
|
398
471
|
select: () => {
|
|
399
472
|
group.changeGroup(undefined);
|
|
400
473
|
},
|
|
@@ -57,6 +57,25 @@ export declare class GroupTrait {
|
|
|
57
57
|
} | undefined>;
|
|
58
58
|
groupDataMap$: ReadonlySignal<Record<string, Group<unknown, unknown, Record<string, unknown>>> | undefined>;
|
|
59
59
|
groupsDataList$: ReadonlySignal<Group<unknown, unknown, Record<string, unknown>>[] | undefined>;
|
|
60
|
+
/**
|
|
61
|
+
* The groups a view draws: every group but the ones its stored
|
|
62
|
+
* `groupProperties` hide (ADR 0035 §8, B8). `groupsDataList$` keeps them
|
|
63
|
+
* all, because a reorder or a card move writes an entry for every key and
|
|
64
|
+
* must not drop a hidden group's.
|
|
65
|
+
*/
|
|
66
|
+
visibleGroups$: ReadonlySignal<Group<unknown, unknown, Record<string, unknown>>[] | undefined>;
|
|
67
|
+
/** The hidden groups, listed at the end of the view to be shown again. */
|
|
68
|
+
hiddenGroups$: ReadonlySignal<Group<unknown, unknown, Record<string, unknown>>[]>;
|
|
69
|
+
/** Whether the view stores hidden groups (every preset of 0.49 does). */
|
|
70
|
+
get groupsCanHide(): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Hide or show a group for everyone: a view setting, written to the view's
|
|
73
|
+
* `groupProperties` on the gesture, never when nothing changes.
|
|
74
|
+
*/
|
|
75
|
+
groupHideSet(groupKey: string, hide: boolean): void;
|
|
76
|
+
/** Whether a group is folded: personal, on this device, never stored. */
|
|
77
|
+
collapsed$(groupKey: string): ReadonlySignal<boolean>;
|
|
78
|
+
collapsedSet(groupKey: string, collapsed: boolean): void;
|
|
60
79
|
updateData: (data: NonNullable<unknown>) => void;
|
|
61
80
|
get addGroup(): ((config: import("../index.js").WithCommonPropertyConfig<{
|
|
62
81
|
text: string;
|
|
@@ -69,6 +88,9 @@ export declare class GroupTrait {
|
|
|
69
88
|
sortRow: (groupKey: string, rows: Row[]) => Row[];
|
|
70
89
|
changeGroupSort: (keys: string[]) => void;
|
|
71
90
|
changeRowSort: (groupKeys: string[], groupKey: string, keys: string[]) => void;
|
|
91
|
+
/** Absent: the view hides no group (ops written before 0.49). */
|
|
92
|
+
groupHidden?: (groupKey: string) => boolean;
|
|
93
|
+
groupHideSet?: (groupKeys: string[], groupKey: string, hide: boolean) => void;
|
|
72
94
|
});
|
|
73
95
|
/**
|
|
74
96
|
* Whether the current grouping reads a date property, and so offers grains
|