@formicoidea/labre-core 0.34.2 → 0.36.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-surface/extensions/editor-anchored-panel.d.ts +18 -2
- package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.js +141 -8
- package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.js +16 -22
- package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +18 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +35 -12
- package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +8 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading.js +17 -6
- package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.js +17 -2
- package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.js +9 -2
- package/dist/_pkgs/affine-block-surface/framework-background/def.d.ts +14 -11
- package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +14 -7
- package/dist/_pkgs/affine-components/highlight-dropdown-menu/highlight-duotone-icon.js +8 -8
- package/dist/_pkgs/affine-components/highlight-dropdown-menu/text-duotone-icon.js +11 -11
- package/dist/_pkgs/affine-components/icons/text.js +426 -426
- package/dist/_pkgs/affine-components/toolbar/menu-button.js +40 -0
- package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.d.ts +2 -2
- package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.js +1 -1
- package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.d.ts +1 -1
- package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.js +10 -1
- package/dist/_pkgs/affine-gfx-shape/element-view.d.ts +42 -1
- package/dist/_pkgs/affine-gfx-shape/element-view.js +54 -0
- package/dist/_pkgs/affine-gfx-shape/toolbar/index.d.ts +1 -0
- package/dist/_pkgs/affine-gfx-shape/toolbar/index.js +1 -0
- package/dist/_pkgs/affine-gfx-shape/toolbar/palette-color-action.d.ts +25 -0
- package/dist/_pkgs/affine-gfx-shape/toolbar/palette-color-action.js +123 -0
- package/dist/_pkgs/affine-model/elements/c4/board.d.ts +49 -0
- package/dist/_pkgs/affine-model/elements/c4/board.js +68 -0
- package/dist/_pkgs/affine-model/elements/wardley/node.d.ts +21 -6
- package/dist/_pkgs/affine-model/elements/wardley/node.js +20 -5
- package/dist/_pkgs/affine-shared/services/telemetry-service/block-lifecycle-watcher.d.ts +16 -1
- package/dist/_pkgs/affine-shared/services/telemetry-service/block-lifecycle-watcher.js +27 -2
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/slide-menu.js +1 -1
- package/dist/_pkgs/affine-widget-keyboard-toolbar/icons.js +98 -98
- package/dist/_pkgs/data-view/core/group-by/renderer/boolean-group.js +11 -11
- package/dist/_pkgs/data-view/core/utils/menu-title.js +17 -17
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/group/top/group-title.js +18 -18
- package/dist/_pkgs/std/extension/command-registry.d.ts +15 -8
- package/dist/_pkgs/std/gfx/index.d.ts +1 -1
- package/dist/_pkgs/std/gfx/index.js +1 -1
- package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.d.ts +57 -0
- package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +80 -25
- package/dist/_pkgs/std/gfx/model/surface/pivot.d.ts +55 -1
- package/dist/_pkgs/std/gfx/model/surface/pivot.js +87 -0
- package/dist/_pkgs/std/gfx/model/surface/role.d.ts +12 -1
- package/dist/extensions/command-telemetry.js +4 -0
- package/package.json +1 -1
|
@@ -40,11 +40,26 @@ import { ShapeElementModel } from '../shape/index.js';
|
|
|
40
40
|
* center connector anchor, the shape context toolbar — for free. `kind`
|
|
41
41
|
* discriminates the plain `component`, the `anchor` (which the renderer
|
|
42
42
|
* decorates with an inscribed person glyph), the two pieces of a pipeline (the
|
|
43
|
-
* `pipeline` body + its square `handle`), the `market` outer circle,
|
|
44
|
-
* `ecosystem` grey backing disk
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
43
|
+
* `pipeline` body + its square `handle`), the `market` outer circle, the
|
|
44
|
+
* `ecosystem` grey backing disk, the `porter` circle — a Porter's-forces
|
|
45
|
+
* glyph, which is the one kind that is NOT a link in the value chain: it marks
|
|
46
|
+
* an external competition force acting on the map — and the `accelerator` /
|
|
47
|
+
* `decelerator` arrows, which are not links in the chain either: they annotate
|
|
48
|
+
* the CLIMATE, saying that something is speeding evolution up or slowing it
|
|
49
|
+
* down. Those two are the first kinds drawn as a native POLYGON rather than an
|
|
50
|
+
* ellipse or a rect — and the `area` is the third: a translucent ZONE of the
|
|
51
|
+
* map, drawn as a rect or as a polygon over the components it groups, and the
|
|
52
|
+
* only kind whose two shapes are the same kind (the `shapeType` says which).
|
|
53
|
+
* Composite nodes (pipeline / market / ecosystem / porter / accelerator /
|
|
54
|
+
* decelerator) are built by grouping several of these + native connectors + a
|
|
55
|
+
* text label. The text label is a SEPARATE native text element grouped with the
|
|
56
|
+
* node, not stored here — the `porter` and the `area` being the exceptions that
|
|
57
|
+
* prove it, since the porter's one letter and the area's name are the shape's
|
|
58
|
+
* own inner text.
|
|
59
|
+
*
|
|
60
|
+
* `kind` is ADDITIVE by construction: a value is only ever appended, so a
|
|
61
|
+
* document written before a value was appended carries none of it and opens
|
|
62
|
+
* unchanged. `area` is the most recent, and needs no migration.
|
|
48
63
|
*/
|
|
49
64
|
let WardleyNodeElementModel = (() => {
|
|
50
65
|
let _classSuper = ShapeElementModel;
|
|
@@ -10,6 +10,20 @@ export declare const ABANDON_WINDOW_MS = 15000;
|
|
|
10
10
|
* BlockUsageDuration when it closes).
|
|
11
11
|
*/
|
|
12
12
|
export declare const IDLE_GAP_MS = 30000;
|
|
13
|
+
/**
|
|
14
|
+
* The flavours whose lifecycle is reported. Canvas blocks only: the surface
|
|
15
|
+
* (every framework element mutation lands on it), the cards placed on it and
|
|
16
|
+
* the media that can be dropped there.
|
|
17
|
+
*
|
|
18
|
+
* Prose is deliberately out (PO decision, 2026-09-03). Per-paragraph edit
|
|
19
|
+
* sessions are the volume driver of the whole taxonomy and answer no product
|
|
20
|
+
* question the document itself cannot answer later — which documents carry
|
|
21
|
+
* prose next to a map is a corpus query, not a telemetry one. What evaporates
|
|
22
|
+
* if not captured is behaviour on the canvas: hesitation, abandonment, time
|
|
23
|
+
* spent — so that is what stays on the bus. Reversible in one line.
|
|
24
|
+
*/
|
|
25
|
+
export declare const CANVAS_FLAVOURS: ReadonlySet<string>;
|
|
26
|
+
export declare function isCanvasFlavour(flavour: string): boolean;
|
|
13
27
|
/**
|
|
14
28
|
* The subset of the store `blockUpdated` payload the tracker relies on —
|
|
15
29
|
* structurally compatible with `Store['slots']['blockUpdated']` payloads.
|
|
@@ -29,7 +43,8 @@ export type BlockLifecyclePayload = {
|
|
|
29
43
|
* BlockCreated is intentionally NOT emitted here — it stays a UI-intent
|
|
30
44
|
* event emitted at insertion sites (slash menu, toolbars), to avoid double
|
|
31
45
|
* counting. Remote and initial-load mutations are ignored (`isLocal` only):
|
|
32
|
-
* the taxonomy describes user intent, not store mechanics.
|
|
46
|
+
* the taxonomy describes user intent, not store mechanics. Non-canvas
|
|
47
|
+
* flavours are ignored too — see {@link CANVAS_FLAVOURS}.
|
|
33
48
|
*
|
|
34
49
|
* Pure logic, injectable clock — see the unit tests.
|
|
35
50
|
*/
|
|
@@ -10,6 +10,30 @@ export const ABANDON_WINDOW_MS = 15_000;
|
|
|
10
10
|
* BlockUsageDuration when it closes).
|
|
11
11
|
*/
|
|
12
12
|
export const IDLE_GAP_MS = 30_000;
|
|
13
|
+
/**
|
|
14
|
+
* The flavours whose lifecycle is reported. Canvas blocks only: the surface
|
|
15
|
+
* (every framework element mutation lands on it), the cards placed on it and
|
|
16
|
+
* the media that can be dropped there.
|
|
17
|
+
*
|
|
18
|
+
* Prose is deliberately out (PO decision, 2026-09-03). Per-paragraph edit
|
|
19
|
+
* sessions are the volume driver of the whole taxonomy and answer no product
|
|
20
|
+
* question the document itself cannot answer later — which documents carry
|
|
21
|
+
* prose next to a map is a corpus query, not a telemetry one. What evaporates
|
|
22
|
+
* if not captured is behaviour on the canvas: hesitation, abandonment, time
|
|
23
|
+
* spent — so that is what stays on the bus. Reversible in one line.
|
|
24
|
+
*/
|
|
25
|
+
export const CANVAS_FLAVOURS = new Set([
|
|
26
|
+
'affine:surface',
|
|
27
|
+
'affine:note',
|
|
28
|
+
'affine:frame',
|
|
29
|
+
'affine:edgeless-text',
|
|
30
|
+
'affine:image',
|
|
31
|
+
'affine:attachment',
|
|
32
|
+
'affine:bookmark',
|
|
33
|
+
]);
|
|
34
|
+
export function isCanvasFlavour(flavour) {
|
|
35
|
+
return CANVAS_FLAVOURS.has(flavour) || flavour.startsWith('affine:embed-');
|
|
36
|
+
}
|
|
13
37
|
/**
|
|
14
38
|
* Turns raw store mutations into the block lifecycle taxonomy (see README):
|
|
15
39
|
* BlockEdited / BlockDeleted / BlockAbandoned / BlockUsageDuration.
|
|
@@ -17,7 +41,8 @@ export const IDLE_GAP_MS = 30_000;
|
|
|
17
41
|
* BlockCreated is intentionally NOT emitted here — it stays a UI-intent
|
|
18
42
|
* event emitted at insertion sites (slash menu, toolbars), to avoid double
|
|
19
43
|
* counting. Remote and initial-load mutations are ignored (`isLocal` only):
|
|
20
|
-
* the taxonomy describes user intent, not store mechanics.
|
|
44
|
+
* the taxonomy describes user intent, not store mechanics. Non-canvas
|
|
45
|
+
* flavours are ignored too — see {@link CANVAS_FLAVOURS}.
|
|
21
46
|
*
|
|
22
47
|
* Pure logic, injectable clock — see the unit tests.
|
|
23
48
|
*/
|
|
@@ -31,7 +56,7 @@ export class BlockLifecycleTracker {
|
|
|
31
56
|
this._sessions = new Map();
|
|
32
57
|
}
|
|
33
58
|
handle(payload) {
|
|
34
|
-
if (!payload.isLocal)
|
|
59
|
+
if (!payload.isLocal || !isCanvasFlavour(payload.flavour))
|
|
35
60
|
return;
|
|
36
61
|
const t = this._now();
|
|
37
62
|
const { id, flavour } = payload;
|
|
@@ -88,7 +88,7 @@ let EdgelessSlideMenu = (() => {
|
|
|
88
88
|
}
|
|
89
89
|
.menu-container {
|
|
90
90
|
background: var(--affine-background-overlay-panel-color);
|
|
91
|
-
border-radius:
|
|
91
|
+
border-radius: 16px 16px 0 0;
|
|
92
92
|
border: 1px solid var(--affine-border-color);
|
|
93
93
|
border-bottom: none;
|
|
94
94
|
display: flex;
|
|
@@ -19,105 +19,105 @@ export function HeadingIcon(i) {
|
|
|
19
19
|
return Heading1Icon();
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
export const HighLightDuotoneIcon = (color) => html `<svg
|
|
23
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
24
|
-
width="24"
|
|
25
|
-
height="24"
|
|
26
|
-
viewBox="0 0 24 24"
|
|
27
|
-
fill="none"
|
|
28
|
-
>
|
|
29
|
-
<path
|
|
30
|
-
d="M5.8291 16.441L7.91757 18.5295L6.57811 19.8689C6.53119 19.9158 6.46406 19.9364 6.3989 19.9239L3.37036 19.3412C3.21285 19.3109 3.15331 19.1168 3.26673 19.0034L5.8291 16.441Z"
|
|
31
|
-
fill="${color}"
|
|
32
|
-
/>
|
|
33
|
-
<path
|
|
34
|
-
fill-rule="evenodd"
|
|
35
|
-
clip-rule="evenodd"
|
|
36
|
-
d="M19.0095 3.63759C17.9526 2.58067 16.26 2.516 15.1255 3.48919L7.32135 10.1837C6.35438 11.0132 6.05275 12.3823 6.58163 13.5414L6.73501 13.8775L5.67697 14.9356C5.30169 15.3108 5.30169 15.9193 5.67697 16.2946L8.06379 18.6814C8.43907 19.0567 9.04752 19.0567 9.4228 18.6814L10.4808 17.6234L10.8171 17.7768C11.9761 18.3057 13.3452 18.0041 14.1747 17.0371L20.8692 9.23294C21.8424 8.09846 21.7778 6.40588 20.7208 5.34896L19.0095 3.63759ZM16.1021 4.62769C16.6415 4.16498 17.4463 4.19572 17.9488 4.69825L19.6602 6.40962C20.1627 6.91215 20.1935 7.7169 19.7307 8.25631L14.6424 14.188L10.1704 9.71604L16.1021 4.62769ZM9.02857 10.6955L8.29798 11.3222C7.83822 11.7166 7.6948 12.3676 7.94627 12.9187L8.29785 13.6892C8.4348 13.9893 8.37947 14.3544 8.13372 14.6001L7.11878 15.6151L8.74329 17.2396L9.75812 16.2247C10.004 15.9789 10.3691 15.9236 10.6693 16.0606L11.4398 16.4122C11.9908 16.6636 12.6418 16.5202 13.0362 16.0605L13.6629 15.3299L9.02857 10.6955Z"
|
|
37
|
-
fill="${cssVarV2('icon/primary')}"
|
|
38
|
-
/>
|
|
22
|
+
export const HighLightDuotoneIcon = (color) => html `<svg
|
|
23
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
24
|
+
width="24"
|
|
25
|
+
height="24"
|
|
26
|
+
viewBox="0 0 24 24"
|
|
27
|
+
fill="none"
|
|
28
|
+
>
|
|
29
|
+
<path
|
|
30
|
+
d="M5.8291 16.441L7.91757 18.5295L6.57811 19.8689C6.53119 19.9158 6.46406 19.9364 6.3989 19.9239L3.37036 19.3412C3.21285 19.3109 3.15331 19.1168 3.26673 19.0034L5.8291 16.441Z"
|
|
31
|
+
fill="${color}"
|
|
32
|
+
/>
|
|
33
|
+
<path
|
|
34
|
+
fill-rule="evenodd"
|
|
35
|
+
clip-rule="evenodd"
|
|
36
|
+
d="M19.0095 3.63759C17.9526 2.58067 16.26 2.516 15.1255 3.48919L7.32135 10.1837C6.35438 11.0132 6.05275 12.3823 6.58163 13.5414L6.73501 13.8775L5.67697 14.9356C5.30169 15.3108 5.30169 15.9193 5.67697 16.2946L8.06379 18.6814C8.43907 19.0567 9.04752 19.0567 9.4228 18.6814L10.4808 17.6234L10.8171 17.7768C11.9761 18.3057 13.3452 18.0041 14.1747 17.0371L20.8692 9.23294C21.8424 8.09846 21.7778 6.40588 20.7208 5.34896L19.0095 3.63759ZM16.1021 4.62769C16.6415 4.16498 17.4463 4.19572 17.9488 4.69825L19.6602 6.40962C20.1627 6.91215 20.1935 7.7169 19.7307 8.25631L14.6424 14.188L10.1704 9.71604L16.1021 4.62769ZM9.02857 10.6955L8.29798 11.3222C7.83822 11.7166 7.6948 12.3676 7.94627 12.9187L8.29785 13.6892C8.4348 13.9893 8.37947 14.3544 8.13372 14.6001L7.11878 15.6151L8.74329 17.2396L9.75812 16.2247C10.004 15.9789 10.3691 15.9236 10.6693 16.0606L11.4398 16.4122C11.9908 16.6636 12.6418 16.5202 13.0362 16.0605L13.6629 15.3299L9.02857 10.6955Z"
|
|
37
|
+
fill="${cssVarV2('icon/primary')}"
|
|
38
|
+
/>
|
|
39
39
|
</svg>`;
|
|
40
|
-
export const TextColorIcon = (color) => html `<svg
|
|
41
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
42
|
-
width="32"
|
|
43
|
-
height="32"
|
|
44
|
-
viewBox="0 0 32 32"
|
|
45
|
-
fill="none"
|
|
46
|
-
>
|
|
47
|
-
<path
|
|
48
|
-
fill-rule="evenodd"
|
|
49
|
-
clip-rule="evenodd"
|
|
50
|
-
d="M14.0627 6.16255C14.385 5.30291 15.2068 4.7334 16.1249 4.7334C17.043 4.7334 17.8648 5.30291 18.1872 6.16255L23.7279 20.9378C23.9219 21.455 23.6599 22.0314 23.1427 22.2253C22.6256 22.4192 22.0492 22.1572 21.8553 21.6401L20.2289 17.3031H12.021L10.3946 21.6401C10.2007 22.1572 9.62428 22.4192 9.10716 22.2253C8.59004 22.0314 8.32803 21.455 8.52195 20.9378L14.0627 6.16255ZM12.771 15.3031H19.4789L16.3146 6.8648C16.2849 6.78576 16.2094 6.7334 16.1249 6.7334C16.0405 6.7334 15.965 6.78576 15.9353 6.8648L12.771 15.3031Z"
|
|
51
|
-
fill="${cssVarV2('icon/primary')}"
|
|
52
|
-
/>
|
|
53
|
-
<rect
|
|
54
|
-
x="5.45837"
|
|
55
|
-
y="24"
|
|
56
|
-
width="21.3333"
|
|
57
|
-
height="3.33333"
|
|
58
|
-
rx="1"
|
|
59
|
-
fill=${color}
|
|
60
|
-
/>
|
|
40
|
+
export const TextColorIcon = (color) => html `<svg
|
|
41
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
42
|
+
width="32"
|
|
43
|
+
height="32"
|
|
44
|
+
viewBox="0 0 32 32"
|
|
45
|
+
fill="none"
|
|
46
|
+
>
|
|
47
|
+
<path
|
|
48
|
+
fill-rule="evenodd"
|
|
49
|
+
clip-rule="evenodd"
|
|
50
|
+
d="M14.0627 6.16255C14.385 5.30291 15.2068 4.7334 16.1249 4.7334C17.043 4.7334 17.8648 5.30291 18.1872 6.16255L23.7279 20.9378C23.9219 21.455 23.6599 22.0314 23.1427 22.2253C22.6256 22.4192 22.0492 22.1572 21.8553 21.6401L20.2289 17.3031H12.021L10.3946 21.6401C10.2007 22.1572 9.62428 22.4192 9.10716 22.2253C8.59004 22.0314 8.32803 21.455 8.52195 20.9378L14.0627 6.16255ZM12.771 15.3031H19.4789L16.3146 6.8648C16.2849 6.78576 16.2094 6.7334 16.1249 6.7334C16.0405 6.7334 15.965 6.78576 15.9353 6.8648L12.771 15.3031Z"
|
|
51
|
+
fill="${cssVarV2('icon/primary')}"
|
|
52
|
+
/>
|
|
53
|
+
<rect
|
|
54
|
+
x="5.45837"
|
|
55
|
+
y="24"
|
|
56
|
+
width="21.3333"
|
|
57
|
+
height="3.33333"
|
|
58
|
+
rx="1"
|
|
59
|
+
fill=${color}
|
|
60
|
+
/>
|
|
61
61
|
</svg>`;
|
|
62
|
-
export const TextBackgroundDuotoneIcon = (color) => html `<svg
|
|
63
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
64
|
-
width="32"
|
|
65
|
-
height="32"
|
|
66
|
-
viewBox="0 0 32 32"
|
|
67
|
-
fill="none"
|
|
68
|
-
>
|
|
69
|
-
<path
|
|
70
|
-
fill-rule="evenodd"
|
|
71
|
-
clip-rule="evenodd"
|
|
72
|
-
d="M4.57507 7.33336C4.57507 5.60287 5.97791 4.20003 7.70841 4.20003H25.0417C26.7722 4.20003 28.1751 5.60287 28.1751 7.33336V24.6667C28.1751 26.3972 26.7722 27.8 25.0417 27.8H7.70841C5.97791 27.8 4.57507 26.3972 4.57507 24.6667V7.33336Z"
|
|
73
|
-
fill="${color}"
|
|
74
|
-
/>
|
|
75
|
-
<path
|
|
76
|
-
fill-rule="evenodd"
|
|
77
|
-
clip-rule="evenodd"
|
|
78
|
-
d="M4.57495 7.33333C4.57495 5.60284 5.97779 4.2 7.70828 4.2H25.0416C26.7721 4.2 28.175 5.60284 28.175 7.33333V24.6667C28.175 26.3972 26.7721 27.8 25.0416 27.8H7.70828C5.97779 27.8 4.57495 26.3972 4.57495 24.6667V7.33333ZM7.70828 5.13333C6.49326 5.13333 5.50828 6.1183 5.50828 7.33333V24.6667C5.50828 25.8817 6.49326 26.8667 7.70828 26.8667H25.0416C26.2566 26.8667 27.2416 25.8817 27.2416 24.6667V7.33333C27.2416 6.1183 26.2566 5.13333 25.0416 5.13333H7.70828Z"
|
|
79
|
-
fill="black"
|
|
80
|
-
fill-opacity="0.22"
|
|
81
|
-
/>
|
|
82
|
-
<path
|
|
83
|
-
fill-rule="evenodd"
|
|
84
|
-
clip-rule="evenodd"
|
|
85
|
-
d="M14.5379 10.0064C14.8251 9.24064 15.5571 8.73332 16.375 8.73332C17.1928 8.73332 17.9249 9.24064 18.2121 10.0064L22.6446 21.8266C22.8386 22.3438 22.5766 22.9202 22.0594 23.1141C21.5423 23.308 20.9659 23.046 20.772 22.5289L19.5196 19.1891H13.2304L11.978 22.5289C11.7841 23.046 11.2076 23.308 10.6905 23.1141C10.1734 22.9202 9.9114 22.3438 10.1053 21.8266L14.5379 10.0064ZM13.9804 17.1891H18.7696L16.375 10.8035L13.9804 17.1891Z"
|
|
86
|
-
fill="${cssVarV2('text/primary')}"
|
|
87
|
-
/>
|
|
62
|
+
export const TextBackgroundDuotoneIcon = (color) => html `<svg
|
|
63
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
64
|
+
width="32"
|
|
65
|
+
height="32"
|
|
66
|
+
viewBox="0 0 32 32"
|
|
67
|
+
fill="none"
|
|
68
|
+
>
|
|
69
|
+
<path
|
|
70
|
+
fill-rule="evenodd"
|
|
71
|
+
clip-rule="evenodd"
|
|
72
|
+
d="M4.57507 7.33336C4.57507 5.60287 5.97791 4.20003 7.70841 4.20003H25.0417C26.7722 4.20003 28.1751 5.60287 28.1751 7.33336V24.6667C28.1751 26.3972 26.7722 27.8 25.0417 27.8H7.70841C5.97791 27.8 4.57507 26.3972 4.57507 24.6667V7.33336Z"
|
|
73
|
+
fill="${color}"
|
|
74
|
+
/>
|
|
75
|
+
<path
|
|
76
|
+
fill-rule="evenodd"
|
|
77
|
+
clip-rule="evenodd"
|
|
78
|
+
d="M4.57495 7.33333C4.57495 5.60284 5.97779 4.2 7.70828 4.2H25.0416C26.7721 4.2 28.175 5.60284 28.175 7.33333V24.6667C28.175 26.3972 26.7721 27.8 25.0416 27.8H7.70828C5.97779 27.8 4.57495 26.3972 4.57495 24.6667V7.33333ZM7.70828 5.13333C6.49326 5.13333 5.50828 6.1183 5.50828 7.33333V24.6667C5.50828 25.8817 6.49326 26.8667 7.70828 26.8667H25.0416C26.2566 26.8667 27.2416 25.8817 27.2416 24.6667V7.33333C27.2416 6.1183 26.2566 5.13333 25.0416 5.13333H7.70828Z"
|
|
79
|
+
fill="black"
|
|
80
|
+
fill-opacity="0.22"
|
|
81
|
+
/>
|
|
82
|
+
<path
|
|
83
|
+
fill-rule="evenodd"
|
|
84
|
+
clip-rule="evenodd"
|
|
85
|
+
d="M14.5379 10.0064C14.8251 9.24064 15.5571 8.73332 16.375 8.73332C17.1928 8.73332 17.9249 9.24064 18.2121 10.0064L22.6446 21.8266C22.8386 22.3438 22.5766 22.9202 22.0594 23.1141C21.5423 23.308 20.9659 23.046 20.772 22.5289L19.5196 19.1891H13.2304L11.978 22.5289C11.7841 23.046 11.2076 23.308 10.6905 23.1141C10.1734 22.9202 9.9114 22.3438 10.1053 21.8266L14.5379 10.0064ZM13.9804 17.1891H18.7696L16.375 10.8035L13.9804 17.1891Z"
|
|
86
|
+
fill="${cssVarV2('text/primary')}"
|
|
87
|
+
/>
|
|
88
88
|
</svg>`;
|
|
89
|
-
export const FigmaDuotoneIcon = html `<svg
|
|
90
|
-
width="32"
|
|
91
|
-
height="32"
|
|
92
|
-
viewBox="0 0 24 24"
|
|
93
|
-
fill="none"
|
|
94
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
95
|
-
>
|
|
96
|
-
<g id="Figma_Duotone">
|
|
97
|
-
<path
|
|
98
|
-
id="Vector"
|
|
99
|
-
d="M8.41842 22.5027C10.3047 22.5027 11.8356 20.9719 11.8356 19.0856V15.6685H8.41842C6.53216 15.6685 5.00128 17.1993 5.00128 19.0856C5.00128 20.9719 6.53216 22.5027 8.41842 22.5027Z"
|
|
100
|
-
fill="#0ACF83"
|
|
101
|
-
/>
|
|
102
|
-
<path
|
|
103
|
-
id="Vector_2"
|
|
104
|
-
d="M5.00128 12.2514C5.00128 10.3651 6.53216 8.83423 8.41842 8.83423H11.8356V15.6685H8.41842C6.53216 15.6685 5.00128 14.1376 5.00128 12.2514Z"
|
|
105
|
-
fill="#A259FF"
|
|
106
|
-
/>
|
|
107
|
-
<path
|
|
108
|
-
id="Vector_3"
|
|
109
|
-
d="M5.00146 5.41714C5.00146 3.53088 6.53234 2 8.4186 2H11.8357V8.83428H8.4186C6.53234 8.83428 5.00146 7.3034 5.00146 5.41714Z"
|
|
110
|
-
fill="#F24E1E"
|
|
111
|
-
/>
|
|
112
|
-
<path
|
|
113
|
-
id="Vector_4"
|
|
114
|
-
d="M11.8356 2H15.2527C17.139 2 18.6699 3.53088 18.6699 5.41714C18.6699 7.3034 17.139 8.83428 15.2527 8.83428H11.8356V2Z"
|
|
115
|
-
fill="#FF7262"
|
|
116
|
-
/>
|
|
117
|
-
<path
|
|
118
|
-
id="Vector_5"
|
|
119
|
-
d="M18.6699 12.2514C18.6699 14.1376 17.139 15.6685 15.2527 15.6685C13.3665 15.6685 11.8356 14.1376 11.8356 12.2514C11.8356 10.3651 13.3665 8.83423 15.2527 8.83423C17.139 8.83423 18.6699 10.3651 18.6699 12.2514Z"
|
|
120
|
-
fill="#1ABCFE"
|
|
121
|
-
/>
|
|
122
|
-
</g>
|
|
89
|
+
export const FigmaDuotoneIcon = html `<svg
|
|
90
|
+
width="32"
|
|
91
|
+
height="32"
|
|
92
|
+
viewBox="0 0 24 24"
|
|
93
|
+
fill="none"
|
|
94
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
95
|
+
>
|
|
96
|
+
<g id="Figma_Duotone">
|
|
97
|
+
<path
|
|
98
|
+
id="Vector"
|
|
99
|
+
d="M8.41842 22.5027C10.3047 22.5027 11.8356 20.9719 11.8356 19.0856V15.6685H8.41842C6.53216 15.6685 5.00128 17.1993 5.00128 19.0856C5.00128 20.9719 6.53216 22.5027 8.41842 22.5027Z"
|
|
100
|
+
fill="#0ACF83"
|
|
101
|
+
/>
|
|
102
|
+
<path
|
|
103
|
+
id="Vector_2"
|
|
104
|
+
d="M5.00128 12.2514C5.00128 10.3651 6.53216 8.83423 8.41842 8.83423H11.8356V15.6685H8.41842C6.53216 15.6685 5.00128 14.1376 5.00128 12.2514Z"
|
|
105
|
+
fill="#A259FF"
|
|
106
|
+
/>
|
|
107
|
+
<path
|
|
108
|
+
id="Vector_3"
|
|
109
|
+
d="M5.00146 5.41714C5.00146 3.53088 6.53234 2 8.4186 2H11.8357V8.83428H8.4186C6.53234 8.83428 5.00146 7.3034 5.00146 5.41714Z"
|
|
110
|
+
fill="#F24E1E"
|
|
111
|
+
/>
|
|
112
|
+
<path
|
|
113
|
+
id="Vector_4"
|
|
114
|
+
d="M11.8356 2H15.2527C17.139 2 18.6699 3.53088 18.6699 5.41714C18.6699 7.3034 17.139 8.83428 15.2527 8.83428H11.8356V2Z"
|
|
115
|
+
fill="#FF7262"
|
|
116
|
+
/>
|
|
117
|
+
<path
|
|
118
|
+
id="Vector_5"
|
|
119
|
+
d="M18.6699 12.2514C18.6699 14.1376 17.139 15.6685 15.2527 15.6685C13.3665 15.6685 11.8356 14.1376 11.8356 12.2514C11.8356 10.3651 13.3665 8.83423 15.2527 8.83423C17.139 8.83423 18.6699 10.3651 18.6699 12.2514Z"
|
|
120
|
+
fill="#1ABCFE"
|
|
121
|
+
/>
|
|
122
|
+
</g>
|
|
123
123
|
</svg> `;
|
|
@@ -2,21 +2,21 @@ import { CheckBoxCheckSolidIcon, CheckBoxUnIcon } from '@blocksuite/icons/lit';
|
|
|
2
2
|
import { css, html } from 'lit';
|
|
3
3
|
import { BaseGroup } from './base.js';
|
|
4
4
|
export class BooleanGroupView extends BaseGroup {
|
|
5
|
-
static { this.styles = css `
|
|
6
|
-
.data-view-group-title-boolean-view {
|
|
7
|
-
display: flex;
|
|
8
|
-
align-items: center;
|
|
9
|
-
}
|
|
10
|
-
.data-view-group-title-boolean-view svg {
|
|
11
|
-
width: 20px;
|
|
12
|
-
height: 20px;
|
|
13
|
-
}
|
|
5
|
+
static { this.styles = css `
|
|
6
|
+
.data-view-group-title-boolean-view {
|
|
7
|
+
display: flex;
|
|
8
|
+
align-items: center;
|
|
9
|
+
}
|
|
10
|
+
.data-view-group-title-boolean-view svg {
|
|
11
|
+
width: 20px;
|
|
12
|
+
height: 20px;
|
|
13
|
+
}
|
|
14
14
|
`; }
|
|
15
15
|
render() {
|
|
16
|
-
return html ` <div class="data-view-group-title-boolean-view">
|
|
16
|
+
return html ` <div class="data-view-group-title-boolean-view">
|
|
17
17
|
${this.value
|
|
18
18
|
? CheckBoxCheckSolidIcon({ style: `color:#1E96EB` })
|
|
19
|
-
: CheckBoxUnIcon()}
|
|
19
|
+
: CheckBoxUnIcon()}
|
|
20
20
|
</div>`;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { ArrowLeftBigIcon } from '@blocksuite/icons/lit';
|
|
2
2
|
import { html } from 'lit';
|
|
3
3
|
export const menuTitle = (name, onBack) => {
|
|
4
|
-
return html `
|
|
5
|
-
<div
|
|
6
|
-
style="display:flex;align-items:center;gap: 4px;padding: 3px 3px 3px 2px"
|
|
7
|
-
>
|
|
8
|
-
<div
|
|
9
|
-
@click=${onBack}
|
|
10
|
-
class="dv-icon-20 dv-hover dv-pd-2 dv-round-4"
|
|
11
|
-
style="display:flex;"
|
|
12
|
-
>
|
|
13
|
-
${ArrowLeftBigIcon()}
|
|
14
|
-
</div>
|
|
15
|
-
<div
|
|
16
|
-
style="font-weight:500;font-size: 14px;line-height: 22px;color: var(--affine-text-primary-color)"
|
|
17
|
-
>
|
|
18
|
-
${name}
|
|
19
|
-
</div>
|
|
20
|
-
</div>
|
|
4
|
+
return html `
|
|
5
|
+
<div
|
|
6
|
+
style="display:flex;align-items:center;gap: 4px;padding: 3px 3px 3px 2px"
|
|
7
|
+
>
|
|
8
|
+
<div
|
|
9
|
+
@click=${onBack}
|
|
10
|
+
class="dv-icon-20 dv-hover dv-pd-2 dv-round-4"
|
|
11
|
+
style="display:flex;"
|
|
12
|
+
>
|
|
13
|
+
${ArrowLeftBigIcon()}
|
|
14
|
+
</div>
|
|
15
|
+
<div
|
|
16
|
+
style="font-weight:500;font-size: 14px;line-height: 22px;color: var(--affine-text-primary-color)"
|
|
17
|
+
>
|
|
18
|
+
${name}
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
21
|
`;
|
|
22
22
|
};
|
|
@@ -19,9 +19,9 @@ export const GroupTitle = (groupData, ops) => {
|
|
|
19
19
|
}
|
|
20
20
|
const icon = groupData.value == null
|
|
21
21
|
? ''
|
|
22
|
-
: html ` <uni-lit
|
|
23
|
-
class="${groupHeaderIcon}"
|
|
24
|
-
.uni="${groupData.property.icon}"
|
|
22
|
+
: html ` <uni-lit
|
|
23
|
+
class="${groupHeaderIcon}"
|
|
24
|
+
.uni="${groupData.property.icon}"
|
|
25
25
|
></uni-lit>`;
|
|
26
26
|
const props = {
|
|
27
27
|
group: groupData,
|
|
@@ -29,25 +29,25 @@ export const GroupTitle = (groupData, ops) => {
|
|
|
29
29
|
};
|
|
30
30
|
const showColumnName = groupData.property.type$.value === 'checkbox';
|
|
31
31
|
const columnName = showColumnName
|
|
32
|
-
? html `<span class="${groupHeaderTitle}"
|
|
33
|
-
>${groupData.property.name$.value}</span
|
|
32
|
+
? html `<span class="${groupHeaderTitle}"
|
|
33
|
+
>${groupData.property.name$.value}</span
|
|
34
34
|
>`
|
|
35
35
|
: nothing;
|
|
36
36
|
const opsClass = clsx(ops.groupHover && show, groupHeaderOps);
|
|
37
|
-
return html `
|
|
38
|
-
<div class="${groupTitleRow}">
|
|
39
|
-
${icon} ${renderUniLit(view, props)} ${columnName}
|
|
40
|
-
${GroupHeaderCount(groupData)}
|
|
41
|
-
</div>
|
|
37
|
+
return html `
|
|
38
|
+
<div class="${groupTitleRow}">
|
|
39
|
+
${icon} ${renderUniLit(view, props)} ${columnName}
|
|
40
|
+
${GroupHeaderCount(groupData)}
|
|
41
|
+
</div>
|
|
42
42
|
${!ops.readonly
|
|
43
|
-
? html ` <div class="${opsClass}">
|
|
44
|
-
<div @click="${ops.clickAdd}" class="${groupHeaderOp}">
|
|
45
|
-
${PlusIcon()}
|
|
46
|
-
</div>
|
|
47
|
-
<div @click="${ops.clickOps}" class="${groupHeaderOp}">
|
|
48
|
-
${MoreHorizontalIcon()}
|
|
49
|
-
</div>
|
|
43
|
+
? html ` <div class="${opsClass}">
|
|
44
|
+
<div @click="${ops.clickAdd}" class="${groupHeaderOp}">
|
|
45
|
+
${PlusIcon()}
|
|
46
|
+
</div>
|
|
47
|
+
<div @click="${ops.clickOps}" class="${groupHeaderOp}">
|
|
48
|
+
${MoreHorizontalIcon()}
|
|
49
|
+
</div>
|
|
50
50
|
</div>`
|
|
51
|
-
: nothing}
|
|
51
|
+
: nothing}
|
|
52
52
|
`;
|
|
53
53
|
};
|
|
@@ -121,11 +121,21 @@ export interface CommandDescriptor<P = void> {
|
|
|
121
121
|
* Emitted centrally by {@link runCommand} — never by the command body.
|
|
122
122
|
* `framework` is the code-side id; the reporter maps it through
|
|
123
123
|
* `FrameworkDescriptor.telemetryKey` so the wire value stays historical.
|
|
124
|
+
*
|
|
125
|
+
* `board: true` marks the command that puts a framework's BOARD on the
|
|
126
|
+
* canvas (a Wardley background, a BPMN pool, a C4 board…). Every framework
|
|
127
|
+
* names its board differently in `element` — `background:classic`, `pool`,
|
|
128
|
+
* `board`, `cynefin` — so "boards created per framework" cannot be read off
|
|
129
|
+
* a prefix; it is declared here, at the command, and the reporter forwards
|
|
130
|
+
* it as the `role` dimension.
|
|
124
131
|
*/
|
|
125
|
-
telemetry?:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
132
|
+
telemetry?: CommandTelemetry;
|
|
133
|
+
}
|
|
134
|
+
/** See {@link CommandDescriptor.telemetry}. */
|
|
135
|
+
export interface CommandTelemetry {
|
|
136
|
+
framework: FrameworkId;
|
|
137
|
+
element: string;
|
|
138
|
+
board?: true;
|
|
129
139
|
}
|
|
130
140
|
/**
|
|
131
141
|
* A command with its parameter contract erased — what the REGISTRY holds.
|
|
@@ -189,10 +199,7 @@ export interface CommandManifestEntry {
|
|
|
189
199
|
* command is. Derived from `CommandDescriptor.params`, never authored twice.
|
|
190
200
|
*/
|
|
191
201
|
params?: CommandParam[];
|
|
192
|
-
telemetry?:
|
|
193
|
-
framework: FrameworkId;
|
|
194
|
-
element: string;
|
|
195
|
-
};
|
|
202
|
+
telemetry?: CommandTelemetry;
|
|
196
203
|
}
|
|
197
204
|
/**
|
|
198
205
|
* The per-framework identity consumers 2-5 need, and that nothing owned before
|
|
@@ -17,7 +17,7 @@ export { type GfxModel, isPrimitiveModel } from './model/model.js';
|
|
|
17
17
|
export { convert, convertProps, derive, field, getDerivedProps, getFieldPropsSet, getLocalPropsSet, initializeObservers, initializeWatchers, local, observe, updateDerivedProps, watch, } from './model/surface/decorators/index.js';
|
|
18
18
|
export { type BaseElementProps, type ForeignInterchange, type InterchangeScope, GfxGroupLikeElementModel, GfxPrimitiveElementModel, type SerializedElement, type ValidationException, } from './model/surface/element-model.js';
|
|
19
19
|
export { GfxLocalElementModel, prop, } from './model/surface/local-element-model.js';
|
|
20
|
-
export { collectPivotOccurrences, isPivotBound, type PivotBoundElement, type PivotOccurrence, } from './model/surface/pivot.js';
|
|
20
|
+
export { collectPivotOccurrences, isPivotBound, type PivotBoundElement, type PivotOccurrence, resolvePivotBinding, } from './model/surface/pivot.js';
|
|
21
21
|
export { type EdgeDirectionDef, findRoleDef, isTypedEdgeRole, type RoleDef, type RoleDefs, type RoleId, roleIsA, type RoleKind, RoleVocabularyExtension, RoleVocabularyIdentifier, } from './model/surface/role.js';
|
|
22
22
|
export { ELEMENT_TAGS_FIELD, type ElementTags, elementTagValues, hasElementTagValue, readElementTags, setElementTag, tagsPropToY, } from './model/surface/tags.js';
|
|
23
23
|
export { SURFACE_TEXT_UNIQ_IDENTIFIER, SURFACE_YMAP_UNIQ_IDENTIFIER, SurfaceBlockModel, type SurfaceBlockProps, type SurfaceMiddleware, } from './model/surface/surface-model.js';
|
|
@@ -14,7 +14,7 @@ export { isPrimitiveModel } from './model/model.js';
|
|
|
14
14
|
export { convert, convertProps, derive, field, getDerivedProps, getFieldPropsSet, getLocalPropsSet, initializeObservers, initializeWatchers, local, observe, updateDerivedProps, watch, } from './model/surface/decorators/index.js';
|
|
15
15
|
export { GfxGroupLikeElementModel, GfxPrimitiveElementModel, } from './model/surface/element-model.js';
|
|
16
16
|
export { GfxLocalElementModel, prop, } from './model/surface/local-element-model.js';
|
|
17
|
-
export { collectPivotOccurrences, isPivotBound, } from './model/surface/pivot.js';
|
|
17
|
+
export { collectPivotOccurrences, isPivotBound, resolvePivotBinding, } from './model/surface/pivot.js';
|
|
18
18
|
export { findRoleDef, isTypedEdgeRole, roleIsA, RoleVocabularyExtension, RoleVocabularyIdentifier, } from './model/surface/role.js';
|
|
19
19
|
export { ELEMENT_TAGS_FIELD, elementTagValues, hasElementTagValue, readElementTags, setElementTag, tagsPropToY, } from './model/surface/tags.js';
|
|
20
20
|
export { SURFACE_TEXT_UNIQ_IDENTIFIER, SURFACE_YMAP_UNIQ_IDENTIFIER, SurfaceBlockModel, } from './model/surface/surface-model.js';
|
|
@@ -8,6 +8,63 @@ export declare class GfxViewEventManager {
|
|
|
8
8
|
private _callInReverseOrder;
|
|
9
9
|
constructor(gfx: GfxController);
|
|
10
10
|
dispatch(eventName: SupportedEvent, evt: PointerEventState): boolean | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Which view a POSITIONED event (click, dblclick, pointerdown/up) belongs to.
|
|
13
|
+
*
|
|
14
|
+
* The hovered stack answers whenever it is still true — the pointer has not
|
|
15
|
+
* moved off the view it was last seen on, which is the ordinary case and the
|
|
16
|
+
* one every framework gesture already relies on. What this adds is the
|
|
17
|
+
* fallback: when the top of the stack is NOT under the event's own
|
|
18
|
+
* coordinates, the target is resolved from those coordinates instead of the
|
|
19
|
+
* event being dropped.
|
|
20
|
+
*
|
|
21
|
+
* ## The bug this repairs
|
|
22
|
+
*
|
|
23
|
+
* The stack is only ever rebuilt by {@link _handlePointerMove}, so a pointer
|
|
24
|
+
* that arrives somewhere without a `pointermove` reaching this manager leaves
|
|
25
|
+
* it EMPTY or STALE — and every click and double-click on a canvas element is
|
|
26
|
+
* then delivered to nobody, or to whatever the pointer was last over. It
|
|
27
|
+
* happens for real: a `pointermove` emitted while the event dispatcher is not
|
|
28
|
+
* yet active is dropped before it gets here (the first gesture in a freshly
|
|
29
|
+
* mounted editor), an element created under a stationary pointer is never
|
|
30
|
+
* moved onto, and a viewport change slides the canvas under a pointer that
|
|
31
|
+
* never moves.
|
|
32
|
+
*
|
|
33
|
+
* The symptom is a very specific one, and it is what sent us here: SELECTING
|
|
34
|
+
* the element works — `handleElementSelection` re-picks by point on every
|
|
35
|
+
* click — while the element's own gestures do not, because they came through
|
|
36
|
+
* this stack. Two answers to "what is under the pointer", one of them stale.
|
|
37
|
+
* Reported on the C4 board's title band, where a click selected the sheet and
|
|
38
|
+
* a double-click renamed nothing.
|
|
39
|
+
*
|
|
40
|
+
* Deliberately NOT a rebuild of the stack: hover enter/leave is a `pointermove`
|
|
41
|
+
* story, and firing those from a click would announce arrivals and departures
|
|
42
|
+
* that never happened.
|
|
43
|
+
*/
|
|
44
|
+
private _targetOf;
|
|
11
45
|
private _handleDrag;
|
|
46
|
+
/**
|
|
47
|
+
* Whether a view answers for a MODEL point — the VIEW's hit test, not the
|
|
48
|
+
* model's.
|
|
49
|
+
*
|
|
50
|
+
* `GfxElementModelView.includesPoint` delegates to the model by default, so
|
|
51
|
+
* for every view that does not override it this is the same answer as
|
|
52
|
+
* before. It is the seam a framework needs when the area that SELECTS an
|
|
53
|
+
* element and the area that its own gestures answer on are not the same
|
|
54
|
+
* rectangle: a framework background is picked by its border alone (issue
|
|
55
|
+
* #194), yet its editable labels must keep receiving the double-click that
|
|
56
|
+
* renames them, and a BPMN pool's lane separators must keep receiving the
|
|
57
|
+
* drag that moves them. Those zones are drawn by the framework's view, so
|
|
58
|
+
* that is where they are declared — the model layer stays free of geometry it
|
|
59
|
+
* cannot see.
|
|
60
|
+
*/
|
|
61
|
+
private _answersAt;
|
|
62
|
+
/**
|
|
63
|
+
* The views under a MODEL point, in PAINT ORDER — the topmost last.
|
|
64
|
+
*
|
|
65
|
+
* One walk, used by the hover bookkeeping and by {@link _targetOf}, so "what
|
|
66
|
+
* is under the pointer" has exactly one answer however it is asked.
|
|
67
|
+
*/
|
|
68
|
+
private _viewsAt;
|
|
12
69
|
private _handlePointerMove;
|
|
13
70
|
}
|