@formicoidea/labre-core 0.34.2 → 0.35.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 (34) hide show
  1. package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.d.ts +18 -2
  2. package/dist/_pkgs/affine-block-surface/extensions/editor-anchored-panel.js +141 -8
  3. package/dist/_pkgs/affine-block-surface/extensions/map-quality-widget.js +16 -22
  4. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +18 -0
  5. package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +35 -12
  6. package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +8 -0
  7. package/dist/_pkgs/affine-block-surface/extensions/reading.js +17 -6
  8. package/dist/_pkgs/affine-block-surface/extensions/tags-toolbar.js +10 -2
  9. package/dist/_pkgs/affine-block-surface/extensions/validation-toolbar.js +9 -2
  10. package/dist/_pkgs/affine-block-surface/framework-background/def.d.ts +14 -11
  11. package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +14 -7
  12. package/dist/_pkgs/affine-components/highlight-dropdown-menu/highlight-duotone-icon.js +8 -8
  13. package/dist/_pkgs/affine-components/highlight-dropdown-menu/text-duotone-icon.js +11 -11
  14. package/dist/_pkgs/affine-components/icons/text.js +426 -426
  15. package/dist/_pkgs/affine-components/toolbar/menu-button.js +27 -0
  16. package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.d.ts +2 -2
  17. package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.js +1 -1
  18. package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.d.ts +1 -1
  19. package/dist/_pkgs/affine-gfx-connector/direction/direction-widget.js +10 -1
  20. package/dist/_pkgs/affine-model/elements/c4/board.d.ts +49 -0
  21. package/dist/_pkgs/affine-model/elements/c4/board.js +68 -0
  22. package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/slide-menu.js +1 -1
  23. package/dist/_pkgs/affine-widget-keyboard-toolbar/icons.js +98 -98
  24. package/dist/_pkgs/data-view/core/group-by/renderer/boolean-group.js +11 -11
  25. package/dist/_pkgs/data-view/core/utils/menu-title.js +17 -17
  26. package/dist/_pkgs/data-view/view-presets/table/pc-virtual/group/top/group-title.js +18 -18
  27. package/dist/_pkgs/std/gfx/index.d.ts +1 -1
  28. package/dist/_pkgs/std/gfx/index.js +1 -1
  29. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.d.ts +57 -0
  30. package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +80 -25
  31. package/dist/_pkgs/std/gfx/model/surface/pivot.d.ts +55 -1
  32. package/dist/_pkgs/std/gfx/model/surface/pivot.js +87 -0
  33. package/dist/_pkgs/std/gfx/model/surface/role.d.ts +12 -1
  34. package/package.json +1 -1
@@ -247,6 +247,33 @@ export class EditorMenuAction extends LitElement {
247
247
  pointer-events: none;
248
248
  }
249
249
 
250
+ /*
251
+ * An OPTION row: one of N choices, the one in force carrying
252
+ * data-selected. Opt-in through data-option, because a plain command row is
253
+ * not a choice and keeps its left-packed icon and its grey highlight.
254
+ *
255
+ * The shape invents nothing. It is what edgeless-tool-icon-button draws
256
+ * with justify='space-between' and its default active-mode-color -- the
257
+ * Regular/Semibold menu -- and what size-dropdown-menu already spells out
258
+ * for its own check list: label left, tick right and ONLY when selected,
259
+ * the selected row in the primary colour. The colour IS the affordance, so
260
+ * the background highlight goes, and no gutter is held open on the left for
261
+ * a tick that is not there.
262
+ */
263
+ :host([data-option]) {
264
+ justify-content: space-between;
265
+ }
266
+
267
+ :host([data-option][data-selected]) {
268
+ color: var(--affine-primary-color);
269
+ background-color: unset;
270
+ }
271
+
272
+ /* The tick takes the row's colour rather than the neutral icon one. */
273
+ :host([data-option][data-selected]) ::slotted(svg) {
274
+ color: inherit;
275
+ }
276
+
250
277
  :host(:hover.delete),
251
278
  :host(:hover.delete) ::slotted(svg) {
252
279
  background-color: var(--affine-background-error-color);
@@ -6,7 +6,7 @@ import { type TypedEdge } from './typed-edge.js';
6
6
  * **M2 of `docs/adr/0010` — "show it".**
7
7
  *
8
8
  * A typed edge reveals its orientation on hover and on selection: ONE mark, the
9
- * role's verb laid ALONG the link — `depends on` — in a box whose far end is a
9
+ * role's verb laid ALONG the link — `needs` — in a box whose far end is a
10
10
  * point aimed at the target. At rest the board keeps the canonical arrowless
11
11
  * look, because on a Wardley map a permanent head already means something else
12
12
  * (evolution movement), and two meanings on one glyph make both unreadable.
@@ -66,7 +66,7 @@ export interface EdgeLabelAnchor {
66
66
  * this flag: the point of the box must face the TARGET, so on a link running
67
67
  * right-to-left — where the turn put the box's right end at the SOURCE — the
68
68
  * point moves to the box's left end. The words themselves never reverse; a
69
- * mirrored `depends on` would be a smudge, not a rotation.
69
+ * mirrored `needs` would be a smudge, not a rotation.
70
70
  */
71
71
  flipped: boolean;
72
72
  }
@@ -5,7 +5,7 @@ import { asTypedEdge, edgeIsBound, roleVocabularies, } from './typed-edge.js';
5
5
  * **M2 of `docs/adr/0010` — "show it".**
6
6
  *
7
7
  * A typed edge reveals its orientation on hover and on selection: ONE mark, the
8
- * role's verb laid ALONG the link — `depends on` — in a box whose far end is a
8
+ * role's verb laid ALONG the link — `needs` — in a box whose far end is a
9
9
  * point aimed at the target. At rest the board keeps the canonical arrowless
10
10
  * look, because on a Wardley map a permanent head already means something else
11
11
  * (evolution movement), and two meanings on one glyph make both unreadable.
@@ -12,7 +12,7 @@ export declare const EDGE_DIRECTION_WIDGET = "affine-edge-direction-widget";
12
12
  * is an unreadable one):
13
13
  *
14
14
  * - **M2** — while a typed edge is hovered or selected, the role's VERB laid
15
- * along the link: `depends on`, in a box that ends in a point aimed at the
15
+ * along the link: `needs`, in a box that ends in a point aimed at the
16
16
  * provider. Since the PO acceptance of 02/08/2026 this is the only mark the
17
17
  * reveal draws; the canvas chevron it used to sit on top of is folded into
18
18
  * that point (see `direction-reveal.ts`). Since the second pass of the same
@@ -86,7 +86,7 @@ const EDGE_DIRECTION_Z_INDEX = 0;
86
86
  * is an unreadable one):
87
87
  *
88
88
  * - **M2** — while a typed edge is hovered or selected, the role's VERB laid
89
- * along the link: `depends on`, in a box that ends in a point aimed at the
89
+ * along the link: `needs`, in a box that ends in a point aimed at the
90
90
  * provider. Since the PO acceptance of 02/08/2026 this is the only mark the
91
91
  * reveal draws; the canvas chevron it used to sit on top of is folded into
92
92
  * that point (see `direction-reveal.ts`). Since the second pass of the same
@@ -139,6 +139,11 @@ let EdgeDirectionWidget = (() => {
139
139
  * point has no border to speak of, and a hairline diagonal at 40 % zoom is
140
140
  * a smudge. Solid house blue with white text reads in both themes and
141
141
  * cannot be mistaken for the map's own ink.
142
+ *
143
+ * The background here is the DEFAULT, which every role that declares no
144
+ * chipColor keeps: render() overrides it inline only for a role that asks
145
+ * for one, so a colour decision taken about one relation never repaints the
146
+ * others.
142
147
  */
143
148
  .edge-direction-label {
144
149
  --edge-direction-point: 9px;
@@ -325,6 +330,9 @@ let EdgeDirectionWidget = (() => {
325
330
  const verb = this._verbFor(edge);
326
331
  if (!verb)
327
332
  return nothing;
333
+ // Declared by the ROLE, defaulted by the stylesheet: only a relation that
334
+ // asked for its own colour gets an inline background at all.
335
+ const chipColor = edge.direction?.chipColor;
328
336
  const { viewport } = this.gfx;
329
337
  const [x, y] = viewport.toViewCoord(anchor.at[0], anchor.at[1]);
330
338
  // Two decimals: below what a reader can see on a 12 px box, and it keeps
@@ -341,6 +349,7 @@ let EdgeDirectionWidget = (() => {
341
349
  style=${styleMap({
342
350
  left: `${x}px`,
343
351
  top: `${y}px`,
352
+ ...(chipColor ? { background: chipColor } : {}),
344
353
  // Read right to left, as CSS composes it: scale by the zoom and turn
345
354
  // onto the line, both about the box's centre, and only THEN slide that
346
355
  // centre onto the anchor. The lengths in the class are model units, so
@@ -1,6 +1,29 @@
1
1
  import type { SerializedXYWH } from '../../../global/gfx/index.js';
2
+ import type { PointTestOptions } from '../../../std/gfx/index.js';
2
3
  import type { FrameworkBackgroundProps } from '../framework-background/index.js';
3
4
  import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
5
+ /**
6
+ * Height of the board's title band — the header strip across the top of the
7
+ * sheet the diagram title is written in, in model units.
8
+ *
9
+ * Declared HERE, in the model, and re-exported by `@labre/affine-gfx-c4` rather
10
+ * than the other way round, for the reason `POOL_BAND_WIDTH` is: the
11
+ * board's own hit test needs it (a board is clickable by its title band as well
12
+ * as its border), and `affine-model` cannot reach into `affine-block-surface`
13
+ * where the declaration is resolved. One number, owned by the layer that both
14
+ * the declaration and the hit test can read.
15
+ *
16
+ * It is the board's TOP MARGIN, and it always was — the deep inset the plot
17
+ * gives up so the title has somewhere to be written. Naming it says out loud
18
+ * what was already true, so the strip that is painted, the strip that is picked
19
+ * and the strip that opens the rename are one number rather than three.
20
+ *
21
+ * 56 is what the title has been written in since the pack shipped: a 20-unit
22
+ * title, sitting on a baseline a third of the band up from its foot, with the
23
+ * rest as breathing room above and below. Changing it moves the title, so it is
24
+ * a visual decision and not a hit-test one.
25
+ */
26
+ export declare const C4_BOARD_TITLE_BAND_HEIGHT = 56;
4
27
  /**
5
28
  * Which of C4's levels this board draws — the DECLARED fact, as opposed to the
6
29
  * title, which is free text and says whatever its author wants it to.
@@ -85,4 +108,30 @@ export declare class C4BoardElementModel extends FrameworkBackgroundElementModel
85
108
  * on a board that declares none — no fact, no rule (PRD principle 8).
86
109
  */
87
110
  accessor level: C4BoardLevel | undefined;
111
+ /**
112
+ * A board is picked by its BORDER — and by its TITLE BAND, the one carve-out
113
+ * this frame keeps (issues #194 / #197).
114
+ *
115
+ * The same carve-out a BPMN pool makes, for the same reason and by the same
116
+ * arithmetic: the band is the only part of the sheet that is the SHEET rather
117
+ * than the diagram drawn on it. The title is written there, nothing is ever
118
+ * dropped there by convention, and the plot below is where the work goes — so
119
+ * a click there belongs to whatever node is under the pointer.
120
+ *
121
+ * Without this the title became unreachable the day backgrounds stopped being
122
+ * picked by their area: the only thing left answering was the view's
123
+ * double-click zone, which is the tight box of the DRAWN glyphs, and a single
124
+ * click on the title selected nothing at all.
125
+ *
126
+ * ## Where the geometry comes from
127
+ *
128
+ * The band is the top margin, full width — one number
129
+ * ({@link C4_BOARD_TITLE_BAND_HEIGHT}), read from here by the framework
130
+ * declaration, so what is painted is what is selectable. There is no
131
+ * zoom-grown target here as there is on a pool: the pool grows its 28-unit
132
+ * strip to stay reachable when zoomed out, which would put the rename zone
133
+ * outside the selectable one. A 56-unit header does not need it, and the
134
+ * promise "what is painted is what is picked" is worth more than the pixels.
135
+ */
136
+ includesPoint(x: number, y: number, options?: PointTestOptions): boolean;
88
137
  }
@@ -32,8 +32,31 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
32
32
  }
33
33
  return useValue ? value : void 0;
34
34
  };
35
+ import { rotatePoint } from '../../../global/gfx/index.js';
35
36
  import { field } from '../../../std/gfx/index.js';
36
37
  import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
38
+ /**
39
+ * Height of the board's title band — the header strip across the top of the
40
+ * sheet the diagram title is written in, in model units.
41
+ *
42
+ * Declared HERE, in the model, and re-exported by `@labre/affine-gfx-c4` rather
43
+ * than the other way round, for the reason `POOL_BAND_WIDTH` is: the
44
+ * board's own hit test needs it (a board is clickable by its title band as well
45
+ * as its border), and `affine-model` cannot reach into `affine-block-surface`
46
+ * where the declaration is resolved. One number, owned by the layer that both
47
+ * the declaration and the hit test can read.
48
+ *
49
+ * It is the board's TOP MARGIN, and it always was — the deep inset the plot
50
+ * gives up so the title has somewhere to be written. Naming it says out loud
51
+ * what was already true, so the strip that is painted, the strip that is picked
52
+ * and the strip that opens the rename are one number rather than three.
53
+ *
54
+ * 56 is what the title has been written in since the pack shipped: a 20-unit
55
+ * title, sitting on a baseline a third of the band up from its foot, with the
56
+ * rest as breathing room above and below. Changing it moves the title, so it is
57
+ * a visual decision and not a hit-test one.
58
+ */
59
+ export const C4_BOARD_TITLE_BAND_HEIGHT = 56;
37
60
  /**
38
61
  * The C4 board: the sheet one diagram of the model is drawn on — a context
39
62
  * diagram, a container diagram, a component diagram. A framework background like
@@ -119,6 +142,51 @@ let C4BoardElementModel = (() => {
119
142
  */
120
143
  get level() { return this.#level_accessor_storage; }
121
144
  set level(value) { this.#level_accessor_storage = value; }
145
+ /**
146
+ * A board is picked by its BORDER — and by its TITLE BAND, the one carve-out
147
+ * this frame keeps (issues #194 / #197).
148
+ *
149
+ * The same carve-out a BPMN pool makes, for the same reason and by the same
150
+ * arithmetic: the band is the only part of the sheet that is the SHEET rather
151
+ * than the diagram drawn on it. The title is written there, nothing is ever
152
+ * dropped there by convention, and the plot below is where the work goes — so
153
+ * a click there belongs to whatever node is under the pointer.
154
+ *
155
+ * Without this the title became unreachable the day backgrounds stopped being
156
+ * picked by their area: the only thing left answering was the view's
157
+ * double-click zone, which is the tight box of the DRAWN glyphs, and a single
158
+ * click on the title selected nothing at all.
159
+ *
160
+ * ## Where the geometry comes from
161
+ *
162
+ * The band is the top margin, full width — one number
163
+ * ({@link C4_BOARD_TITLE_BAND_HEIGHT}), read from here by the framework
164
+ * declaration, so what is painted is what is selectable. There is no
165
+ * zoom-grown target here as there is on a pool: the pool grows its 28-unit
166
+ * strip to stay reachable when zoomed out, which would put the rename zone
167
+ * outside the selectable one. A 56-unit header does not need it, and the
168
+ * promise "what is painted is what is picked" is worth more than the pixels.
169
+ */
170
+ includesPoint(x, y, options) {
171
+ if (super.includesPoint(x, y, options))
172
+ return true;
173
+ const [ex, ey, w, h] = this.deserializedXYWH;
174
+ // Element-local coordinates, undoing the element rotation about its centre
175
+ // — the band is axis-aligned inside the board, not on the canvas.
176
+ let lx = x - ex;
177
+ let ly = y - ey;
178
+ const rotate = this.rotate ?? 0;
179
+ if (rotate) {
180
+ const [ux, uy] = rotatePoint([x, y], [ex + w / 2, ey + h / 2], -rotate);
181
+ lx = ux - ex;
182
+ ly = uy - ey;
183
+ }
184
+ if (lx < 0 || lx > w || ly < 0)
185
+ return false;
186
+ // Clamped to a board shorter than its own header — the degenerate case the
187
+ // renderer clamps too.
188
+ return ly <= Math.min(C4_BOARD_TITLE_BAND_HEIGHT, h);
189
+ }
122
190
  constructor() {
123
191
  super(...arguments);
124
192
  __runInitializers(this, _level_extraInitializers);
@@ -88,7 +88,7 @@ let EdgelessSlideMenu = (() => {
88
88
  }
89
89
  .menu-container {
90
90
  background: var(--affine-background-overlay-panel-color);
91
- border-radius: 8px 8px 0 0;
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
  };
@@ -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';