@threadlabs/looma 0.22.2 → 0.22.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threadlabs/looma",
3
- "version": "0.22.2",
3
+ "version": "0.22.4",
4
4
  "type": "module",
5
5
  "description": "Looma components as HTML, Vue, and plain DOM, with design tokens.",
6
6
  "license": "MIT",
@@ -14,6 +14,19 @@
14
14
  background: var(--ui-accent-subtle);
15
15
  }
16
16
 
17
+ /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
18
+ the surface and a fine accent ring, so the initials stay visible. */
19
+ :scope[aria-selected="true"] .avatar {
20
+ background: var(--ui-surface);
21
+ box-shadow: inset 0 0 0 1px var(--ui-accent-soft);
22
+ }
23
+
24
+ /* A slotted Avatar (a person's photo) is its own circle. */
25
+ :scope .avatar:has(> [data-component~="ui-avatar"]) {
26
+ background: none;
27
+ box-shadow: none;
28
+ }
29
+
17
30
  .avatar {
18
31
  display: inline-flex;
19
32
  align-items: center;
@@ -55,3 +68,9 @@
55
68
  display: none;
56
69
  }
57
70
  }
71
+ @scope ([data-component~="ui-editor-mention-menu-item"]) to ([data-component]) {
72
+ /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
73
+ the surface and a fine accent ring, so the initials stay visible. */
74
+
75
+ /* A slotted Avatar (a person's photo) is its own circle. */
76
+ }
@@ -83,6 +83,13 @@
83
83
  background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
84
84
  }
85
85
 
86
+ /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
87
+ the surface and a fine accent ring, so the initials stay visible. */
88
+ .item.active .avatar {
89
+ background: var(--ui-surface);
90
+ box-shadow: inset 0 0 0 1px var(--ui-accent-soft, var(--ui-accent-subtle));
91
+ }
92
+
86
93
  .avatar {
87
94
  display: inline-flex;
88
95
  align-items: center;
@@ -143,6 +150,9 @@
143
150
  }
144
151
  }
145
152
  @scope ([data-component~="ui-editor-mention-menu"]) to ([data-component]) {
146
- @media (max-width: 767px) {
153
+ /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
154
+ the surface and a fine accent ring, so the initials stay visible. */
155
+
156
+ @media (max-width: 767px) {
147
157
  }
148
158
  }
@@ -91,6 +91,29 @@
91
91
  box-shadow: var(--_ui-tooltip-shadow, var(--ui-overlay-shadow, var(--ui-elevation-tooltip, var(--ui-shadow-md))));
92
92
  }
93
93
 
94
+ /* A keyboard shortcut follows the label after a thin divider, smaller and quieter, as menus show
95
+ it. The label stays first in the description, so a screen reader hears the name, then the keys. */
96
+ .shortcut {
97
+ display: inline-flex;
98
+ align-items: center;
99
+ margin-inline-start: var(--ui-space-2);
100
+ padding-inline-start: var(--ui-space-2);
101
+ border-inline-start: 1px solid color-mix(in oklab, currentColor 28%, transparent);
102
+ color: color-mix(in oklab, currentColor 72%, transparent);
103
+ font-size: var(--ui-font-size-xs);
104
+ font-weight: var(--ui-font-normal);
105
+ white-space: nowrap;
106
+ vertical-align: baseline;
107
+ }
108
+
109
+ .shortcut:empty {
110
+ display: none;
111
+ }
112
+
113
+ .shortcut kbd {
114
+ font: inherit;
115
+ }
116
+
94
117
  :scope[data-ui-tooltip-state~="inverse"] .surface {
95
118
  --_tooltip-line: var(--_ui-tooltip-inverse-surface, var(--ui-text-primary));
96
119
  background: var(--_ui-tooltip-inverse-surface, var(--ui-text-primary));
@@ -193,6 +216,9 @@
193
216
  @scope ([data-component~="ui-tooltip"]) to ([data-component]) {
194
217
  /* This component's hooks style the element they are set on, and never a nested one. */
195
218
 
219
+ /* A keyboard shortcut follows the label after a thin divider, smaller and quieter, as menus show
220
+ it. The label stays first in the description, so a screen reader hears the name, then the keys. */
221
+
196
222
  /* A rotated square shares the surface fill and draws the two outward border edges. Its centre sits on
197
223
  * the surface border line, so the fill covers that stretch of border and the outline runs unbroken. */
198
224
 
@@ -3,7 +3,7 @@ import { manageComponentLifecycle } from "@nextwebwg/html-next/runtime";
3
3
  import * as controller from "../components/ui-tooltip/ui-tooltip.js";
4
4
  import "../styles/ui-tooltip.css";
5
5
 
6
- const definition = {...{"contract":{"tag":"ui-tooltip","props":{"for":{"type":"string","required":false,"target":{"attribute":"for"},"default":""},"hideDelay":{"type":"number","required":false,"target":{"attribute":"hidedelay"},"default":100},"inverse":{"type":"boolean","required":false,"target":{"attribute":"inverse"},"default":false},"open":{"type":"boolean","required":false,"target":{"attribute":"open"},"default":false},"placement":{"type":{"kind":"terminal","name":"keyword"},"values":["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end"],"required":false,"target":{"attribute":"placement"},"default":"top"},"showDelay":{"type":"number","required":false,"target":{"attribute":"showdelay"},"default":500},"trigger":{"type":{"kind":"terminal","name":"keyword"},"values":["hover","click","focus"],"required":false,"target":{"attribute":"trigger"},"default":"hover"}}},"template":{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"role","value":"tooltip"},{"kind":"attribute","name":"hidden","expression":"not internalOpen","expressionPlan":{"source":"not internalOpen","ast":{"kind":"unary","op":"not","operand":{"kind":"id","name":"internalOpen"}},"dependencies":["internalOpen"]}}],"children":[{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"surface"}],"children":[{"kind":"slot"}]}]},"declarations":[{"kind":"state","name":"internalOpen","type":"boolean","value":"false","expression":{"source":"false","ast":{"kind":"literal","value":false},"dependencies":[]}},{"kind":"event","name":"open","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false},{"kind":"event","name":"close","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false}],"root":{"kind":"native","element":"span","choices":["span"]}},source:{file:import.meta.url},css:""};
6
+ const definition = {...{"contract":{"tag":"ui-tooltip","props":{"for":{"type":"string","required":false,"target":{"attribute":"for"},"default":""},"hideDelay":{"type":"number","required":false,"target":{"attribute":"hidedelay"},"default":100},"inverse":{"type":"boolean","required":false,"target":{"attribute":"inverse"},"default":false},"open":{"type":"boolean","required":false,"target":{"attribute":"open"},"default":false},"placement":{"type":{"kind":"terminal","name":"keyword"},"values":["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end"],"required":false,"target":{"attribute":"placement"},"default":"top"},"showDelay":{"type":"number","required":false,"target":{"attribute":"showdelay"},"default":500},"trigger":{"type":{"kind":"terminal","name":"keyword"},"values":["hover","click","focus"],"required":false,"target":{"attribute":"trigger"},"default":"hover"}}},"template":{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"role","value":"tooltip"},{"kind":"attribute","name":"hidden","expression":"not internalOpen","expressionPlan":{"source":"not internalOpen","ast":{"kind":"unary","op":"not","operand":{"kind":"id","name":"internalOpen"}},"dependencies":["internalOpen"]}}],"children":[{"kind":"element","name":"div","attributes":[{"kind":"literal","name":"class","value":"surface"}],"children":[{"kind":"slot"},{"kind":"element","name":"span","attributes":[{"kind":"literal","name":"class","value":"shortcut"}],"children":[{"kind":"slot","fallback":[],"name":"shortcut"}]}]}]},"declarations":[{"kind":"state","name":"internalOpen","type":"boolean","value":"false","expression":{"source":"false","ast":{"kind":"literal","value":false},"dependencies":[]}},{"kind":"event","name":"open","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false},{"kind":"event","name":"close","type":"object","shape":{"kind":"object","fields":[{"name":"open","type":{"kind":"terminal","name":"boolean"},"optional":false},{"name":"reason","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["action","programmatic","light-dismiss","escape"]},"optional":false},{"name":"trigger","type":{"kind":"constrained","base":{"kind":"terminal","name":"keyword"},"values":["keyboard","pointer","programmatic"]},"optional":false}],"open":false},"bubbles":true,"composed":true,"cancelable":false}],"root":{"kind":"native","element":"span","choices":["span"]}},source:{file:import.meta.url},css:""};
7
7
 
8
8
  export function createUiTooltip(options = {}) {
9
9
  const { attributes = {}, children = [], slots = {}, ...componentProps } = options;
@@ -26,6 +26,18 @@ export function createUiTooltip(options = {}) {
26
26
  }
27
27
  } else {
28
28
  }
29
+ const element1 = document.createElement("span");
30
+ element1.setAttribute("class", "shortcut");
31
+ if (slots["shortcut"] ?? [].length > 0) {
32
+ for (const child of slots["shortcut"] ?? []) {
33
+ const node = typeof child === "string" ? document.createTextNode(child) : child;
34
+ if (node.nodeType === 1) node.setAttribute("data-slotted", "");
35
+ projected.push([node, "shortcut"]);
36
+ element1.append(node);
37
+ }
38
+ } else {
39
+ }
40
+ element0.append(element1);
29
41
  element.append(element0);
30
42
  manageComponentLifecycle(element, definition, { props: componentProps, projected,
31
43
  controller,
@@ -450,6 +450,13 @@ useComponentHost(() => import('../components/ui-editor-mention-menu/ui-editor-me
450
450
  background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
451
451
  }
452
452
 
453
+ /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
454
+ the surface and a fine accent ring, so the initials stay visible. */
455
+ .item.active .avatar {
456
+ background: var(--ui-surface);
457
+ box-shadow: inset 0 0 0 1px var(--ui-accent-soft, var(--ui-accent-subtle));
458
+ }
459
+
453
460
  .avatar {
454
461
  display: inline-flex;
455
462
  align-items: center;
@@ -147,6 +147,19 @@ if (
147
147
  background: var(--ui-accent-subtle);
148
148
  }
149
149
 
150
+ /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
151
+ the surface and a fine accent ring, so the initials stay visible. */
152
+ [data-component~="ui-editor-mention-menu-item"][aria-selected="true"] .avatar {
153
+ background: var(--ui-surface);
154
+ box-shadow: inset 0 0 0 1px var(--ui-accent-soft);
155
+ }
156
+
157
+ /* A slotted Avatar (a person's photo) is its own circle. */
158
+ [data-component~="ui-editor-mention-menu-item"] .avatar:has(> [data-component~="ui-avatar"]) {
159
+ background: none;
160
+ box-shadow: none;
161
+ }
162
+
150
163
  .avatar {
151
164
  display: inline-flex;
152
165
  align-items: center;
@@ -1,7 +1,9 @@
1
1
  import type { PropType } from 'vue';
2
- declare var __VLS_1: {};
2
+ declare var __VLS_1: {}, __VLS_3: {};
3
3
  type __VLS_Slots = {} & {
4
4
  default?: (props: typeof __VLS_1) => any;
5
+ } & {
6
+ shortcut?: (props: typeof __VLS_3) => any;
5
7
  };
6
8
  declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
7
9
  for: {
package/vue/UiTooltip.vue CHANGED
@@ -312,7 +312,10 @@ useComponentHost(() => import('../components/ui-tooltip/ui-tooltip.js'), {
312
312
  :data-trigger="reflectedProp('trigger', 'trigger', checkedProps.trigger, undefined, false)"
313
313
  :data-ui-tooltip-state="hostState || undefined"
314
314
  ref="root"
315
- ><div class="surface"><slot /></div></span>
315
+ ><div class="surface">
316
+ <slot />
317
+ <span class="shortcut"><slot name="shortcut" /></span>
318
+ </div></span>
316
319
  </template>
317
320
 
318
321
  <style scoped>
@@ -410,6 +413,29 @@ useComponentHost(() => import('../components/ui-tooltip/ui-tooltip.js'), {
410
413
  );
411
414
  }
412
415
 
416
+ /* A keyboard shortcut follows the label after a thin divider, smaller and quieter, as menus show
417
+ it. The label stays first in the description, so a screen reader hears the name, then the keys. */
418
+ .shortcut {
419
+ display: inline-flex;
420
+ align-items: center;
421
+ margin-inline-start: var(--ui-space-2);
422
+ padding-inline-start: var(--ui-space-2);
423
+ border-inline-start: 1px solid color-mix(in oklab, currentColor 28%, transparent);
424
+ color: color-mix(in oklab, currentColor 72%, transparent);
425
+ font-size: var(--ui-font-size-xs);
426
+ font-weight: var(--ui-font-normal);
427
+ white-space: nowrap;
428
+ vertical-align: baseline;
429
+ }
430
+
431
+ .shortcut:empty {
432
+ display: none;
433
+ }
434
+
435
+ .shortcut kbd {
436
+ font: inherit;
437
+ }
438
+
413
439
  [data-component~="ui-tooltip"][data-ui-tooltip-state~="inverse"] .surface {
414
440
  --_tooltip-line: var(--_ui-tooltip-inverse-surface, var(--ui-text-primary));
415
441
  background: var(--_ui-tooltip-inverse-surface, var(--ui-text-primary));
@@ -511,6 +511,6 @@ var UiEditorMentionMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_defaul
511
511
  }]]);
512
512
  };
513
513
  }
514
- }), [["__scopeId", "data-v-40241d5b"]]);
514
+ }), [["__scopeId", "data-v-4e4cf8c6"]]);
515
515
  //#endregion
516
516
  export { UiEditorMentionMenu_default as t };
@@ -123,6 +123,6 @@ var UiEditorMentionMenuItem_default = /*#__PURE__*/ _plugin_vue_export_helper_de
123
123
  }]]);
124
124
  };
125
125
  }
126
- }), [["__scopeId", "data-v-0efb3ba1"]]);
126
+ }), [["__scopeId", "data-v-58580723"]]);
127
127
  //#endregion
128
128
  export { UiEditorMentionMenuItem_default as t };
@@ -15,6 +15,7 @@ var _hoisted_1 = [
15
15
  "data-ui-tooltip-state"
16
16
  ];
17
17
  var _hoisted_2 = { class: "surface" };
18
+ var _hoisted_3 = { class: "shortcut" };
18
19
  //#endregion
19
20
  //#region .build/vue/UiTooltip.vue
20
21
  var UiTooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -253,12 +254,12 @@ var UiTooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
253
254
  "data-ui-tooltip-state": hostState.value || void 0,
254
255
  ref_key: "root",
255
256
  ref: root
256
- }), [createElementVNode("div", _hoisted_2, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 16, _hoisted_1)), [[unref(vPropValidity), {
257
+ }), [createElementVNode("div", _hoisted_2, [renderSlot(_ctx.$slots, "default", {}, void 0, true), createElementVNode("span", _hoisted_3, [renderSlot(_ctx.$slots, "shortcut", {}, void 0, true)])])], 16, _hoisted_1)), [[unref(vPropValidity), {
257
258
  contract: propValidityContract,
258
259
  values: { ...checkedProps.value }
259
260
  }]]);
260
261
  };
261
262
  }
262
- }), [["__scopeId", "data-v-0ec1a9c8"]]);
263
+ }), [["__scopeId", "data-v-3762dc6a"]]);
263
264
  //#endregion
264
265
  export { UiTooltip_default as t };
@@ -1484,7 +1484,7 @@ input[data-v-101ef53e]:focus-visible {
1484
1484
  syntax: "*";
1485
1485
  inherits: false;
1486
1486
  }
1487
- [data-component~="ui-tooltip"][data-v-0ec1a9c8] {
1487
+ [data-component~="ui-tooltip"][data-v-3762dc6a] {
1488
1488
  /* Hooks do not inherit, so the parts below read them from the root. */
1489
1489
  --_ui-tooltip-border: var(--ui-tooltip-border);
1490
1490
  --_ui-tooltip-max-inline-size: var(--ui-tooltip-max-inline-size);
@@ -1516,7 +1516,7 @@ input[data-v-101ef53e]:focus-visible {
1516
1516
  display var(--ui-motion-fast) allow-discrete,
1517
1517
  overlay var(--ui-motion-fast) allow-discrete;
1518
1518
  }
1519
- .surface[data-v-0ec1a9c8] {
1519
+ .surface[data-v-3762dc6a] {
1520
1520
  --_tooltip-line: var(--_ui-tooltip-border, var(--ui-overlay-border, var(--ui-border-strong)));
1521
1521
  position: relative;
1522
1522
  box-sizing: border-box;
@@ -1534,7 +1534,28 @@ input[data-v-101ef53e]:focus-visible {
1534
1534
  var(--ui-overlay-shadow, var(--ui-elevation-tooltip, var(--ui-shadow-md)))
1535
1535
  );
1536
1536
  }
1537
- [data-component~="ui-tooltip"][data-ui-tooltip-state~="inverse"] .surface[data-v-0ec1a9c8] {
1537
+
1538
+ /* A keyboard shortcut follows the label after a thin divider, smaller and quieter, as menus show
1539
+ it. The label stays first in the description, so a screen reader hears the name, then the keys. */
1540
+ .shortcut[data-v-3762dc6a] {
1541
+ display: inline-flex;
1542
+ align-items: center;
1543
+ margin-inline-start: var(--ui-space-2);
1544
+ padding-inline-start: var(--ui-space-2);
1545
+ border-inline-start: 1px solid color-mix(in oklab, currentColor 28%, transparent);
1546
+ color: color-mix(in oklab, currentColor 72%, transparent);
1547
+ font-size: var(--ui-font-size-xs);
1548
+ font-weight: var(--ui-font-normal);
1549
+ white-space: nowrap;
1550
+ vertical-align: baseline;
1551
+ }
1552
+ .shortcut[data-v-3762dc6a]:empty {
1553
+ display: none;
1554
+ }
1555
+ .shortcut kbd[data-v-3762dc6a] {
1556
+ font: inherit;
1557
+ }
1558
+ [data-component~="ui-tooltip"][data-ui-tooltip-state~="inverse"] .surface[data-v-3762dc6a] {
1538
1559
  --_tooltip-line: var(--_ui-tooltip-inverse-surface, var(--ui-text-primary));
1539
1560
  background: var(--_ui-tooltip-inverse-surface, var(--ui-text-primary));
1540
1561
  color: var(--_ui-tooltip-inverse-text, var(--ui-surface-default));
@@ -1542,7 +1563,7 @@ input[data-v-101ef53e]:focus-visible {
1542
1563
 
1543
1564
  /* A rotated square shares the surface fill and draws the two outward border edges. Its centre sits on
1544
1565
  * the surface border line, so the fill covers that stretch of border and the outline runs unbroken. */
1545
- .surface[data-v-0ec1a9c8]::after {
1566
+ .surface[data-v-3762dc6a]::after {
1546
1567
  content: "";
1547
1568
  position: absolute;
1548
1569
  z-index: 1;
@@ -1558,7 +1579,7 @@ input[data-v-101ef53e]:focus-visible {
1558
1579
  border-end-end-radius: 1px;
1559
1580
  transform: rotate(45deg) scaleX(1.25) scaleY(0.85);
1560
1581
  }
1561
- [data-component~="ui-tooltip"][data-ui-actual-placement="bottom"] .surface[data-v-0ec1a9c8]::after {
1582
+ [data-component~="ui-tooltip"][data-ui-actual-placement="bottom"] .surface[data-v-3762dc6a]::after {
1562
1583
  inset-block-start: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - 0.5px);
1563
1584
  inset-block-end: auto;
1564
1585
  border-inline-end-width: 0;
@@ -1568,59 +1589,59 @@ input[data-v-101ef53e]:focus-visible {
1568
1589
  border-end-end-radius: 0;
1569
1590
  border-start-start-radius: 1px;
1570
1591
  }
1571
- [data-component~="ui-tooltip"][data-ui-actual-align="center"] .surface[data-v-0ec1a9c8]::after {
1592
+ [data-component~="ui-tooltip"][data-ui-actual-align="center"] .surface[data-v-3762dc6a]::after {
1572
1593
  inset-inline-start: calc(50% - var(--_ui-tooltip-arrow-size, 0.625rem) / 2);
1573
1594
  }
1574
- [data-component~="ui-tooltip"][data-ui-actual-align="end"] .surface[data-v-0ec1a9c8]::after {
1595
+ [data-component~="ui-tooltip"][data-ui-actual-align="end"] .surface[data-v-3762dc6a]::after {
1575
1596
  inset-inline-start: auto;
1576
1597
  inset-inline-end: var(--ui-space-3);
1577
1598
  }
1578
- [data-component~="ui-tooltip"][data-ui-actual-placement="left"] .surface[data-v-0ec1a9c8]::after,
1579
- [data-component~="ui-tooltip"][data-ui-actual-placement="right"] .surface[data-v-0ec1a9c8]::after {
1599
+ [data-component~="ui-tooltip"][data-ui-actual-placement="left"] .surface[data-v-3762dc6a]::after,
1600
+ [data-component~="ui-tooltip"][data-ui-actual-placement="right"] .surface[data-v-3762dc6a]::after {
1580
1601
  inset-block-start: calc(50% - var(--_ui-tooltip-arrow-size, 0.625rem) / 2);
1581
1602
  inset-block-end: auto;
1582
1603
  border: 0 solid var(--_tooltip-line);
1583
1604
  }
1584
- [data-component~="ui-tooltip"][data-ui-actual-placement="left"] .surface[data-v-0ec1a9c8]::after {
1605
+ [data-component~="ui-tooltip"][data-ui-actual-placement="left"] .surface[data-v-3762dc6a]::after {
1585
1606
  inset-inline-start: auto;
1586
1607
  inset-inline-end: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - 0.5px);
1587
1608
  border-inline-end-width: 1px;
1588
1609
  border-block-start-width: 1px;
1589
1610
  }
1590
- [data-component~="ui-tooltip"][data-ui-actual-placement="right"] .surface[data-v-0ec1a9c8]::after {
1611
+ [data-component~="ui-tooltip"][data-ui-actual-placement="right"] .surface[data-v-3762dc6a]::after {
1591
1612
  inset-inline-start: calc(var(--_ui-tooltip-arrow-size, 0.625rem) / -2 - 0.5px);
1592
1613
  inset-inline-end: auto;
1593
1614
  border-inline-start-width: 1px;
1594
1615
  border-block-end-width: 1px;
1595
1616
  }
1596
1617
  [data-component~="ui-tooltip"][data-ui-actual-placement="left"][data-ui-actual-align="start"]
1597
- .surface[data-v-0ec1a9c8]::after,
1618
+ .surface[data-v-3762dc6a]::after,
1598
1619
  [data-component~="ui-tooltip"][data-ui-actual-placement="right"][data-ui-actual-align="start"]
1599
- .surface[data-v-0ec1a9c8]::after {
1620
+ .surface[data-v-3762dc6a]::after {
1600
1621
  inset-block-start: var(--ui-space-3);
1601
1622
  }
1602
1623
  [data-component~="ui-tooltip"][data-ui-actual-placement="left"][data-ui-actual-align="end"]
1603
- .surface[data-v-0ec1a9c8]::after,
1624
+ .surface[data-v-3762dc6a]::after,
1604
1625
  [data-component~="ui-tooltip"][data-ui-actual-placement="right"][data-ui-actual-align="end"]
1605
- .surface[data-v-0ec1a9c8]::after {
1626
+ .surface[data-v-3762dc6a]::after {
1606
1627
  inset-block-start: auto;
1607
1628
  inset-block-end: var(--ui-space-3);
1608
1629
  }
1609
- [data-component~="ui-tooltip"][data-v-0ec1a9c8]:popover-open {
1630
+ [data-component~="ui-tooltip"][data-v-3762dc6a]:popover-open {
1610
1631
  opacity: 1;
1611
1632
  transform: translateY(0);
1612
1633
  }
1613
1634
  @starting-style {
1614
- [data-component~="ui-tooltip"][data-v-0ec1a9c8]:popover-open {
1635
+ [data-component~="ui-tooltip"][data-v-3762dc6a]:popover-open {
1615
1636
  opacity: 0;
1616
1637
  transform: translateY(4px);
1617
1638
  }
1618
1639
  }
1619
- [data-component~="ui-tooltip"][hidden][data-v-0ec1a9c8] {
1640
+ [data-component~="ui-tooltip"][hidden][data-v-3762dc6a] {
1620
1641
  display: none;
1621
1642
  }
1622
1643
  @media (prefers-reduced-motion: reduce) {
1623
- [data-component~="ui-tooltip"][data-v-0ec1a9c8] {
1644
+ [data-component~="ui-tooltip"][data-v-3762dc6a] {
1624
1645
  transition: none;
1625
1646
  }
1626
1647
  }
@@ -2837,10 +2858,10 @@ from {
2837
2858
  display: none;
2838
2859
  }
2839
2860
 
2840
- [data-component~="ui-editor-mention-menu"][data-v-40241d5b] {
2861
+ [data-component~="ui-editor-mention-menu"][data-v-4e4cf8c6] {
2841
2862
  user-select: none;
2842
2863
  }
2843
- [data-component~="ui-editor-mention-menu"][data-v-40241d5b] {
2864
+ [data-component~="ui-editor-mention-menu"][data-v-4e4cf8c6] {
2844
2865
  display: flex;
2845
2866
  overflow: hidden;
2846
2867
  flex-direction: column;
@@ -2849,7 +2870,7 @@ from {
2849
2870
  border-radius: var(--ui-radius-dialog);
2850
2871
  box-shadow: var(--ui-shadow-lg, 0 8px 24px rgb(0 0 0 / 0.12));
2851
2872
  }
2852
- .header[data-v-40241d5b] {
2873
+ .header[data-v-4e4cf8c6] {
2853
2874
  display: flex;
2854
2875
  align-items: center;
2855
2876
  justify-content: space-between;
@@ -2860,23 +2881,23 @@ from {
2860
2881
  font-size: var(--ui-font-size-xs);
2861
2882
  font-weight: var(--ui-font-semibold);
2862
2883
  }
2863
- [data-component~="ui-editor-mention-menu"] > .header[data-v-40241d5b]:empty,
2864
- [data-component~="ui-editor-mention-menu"] > .empty[data-v-40241d5b]:empty {
2884
+ [data-component~="ui-editor-mention-menu"] > .header[data-v-4e4cf8c6]:empty,
2885
+ [data-component~="ui-editor-mention-menu"] > .empty[data-v-4e4cf8c6]:empty {
2865
2886
  display: none;
2866
2887
  }
2867
- .empty[data-v-40241d5b] {
2888
+ .empty[data-v-4e4cf8c6] {
2868
2889
  padding: var(--ui-space-3);
2869
2890
  color: var(--ui-text-muted);
2870
2891
  font-size: var(--ui-font-size-sm);
2871
2892
  }
2872
- .hint[data-v-40241d5b] {
2893
+ .hint[data-v-4e4cf8c6] {
2873
2894
  overflow: hidden;
2874
2895
  color: var(--ui-text-muted);
2875
2896
  font-weight: var(--ui-font-normal);
2876
2897
  text-overflow: ellipsis;
2877
2898
  white-space: nowrap;
2878
2899
  }
2879
- .list[data-v-40241d5b] {
2900
+ .list[data-v-4e4cf8c6] {
2880
2901
  max-height: 280px;
2881
2902
  padding: var(--ui-space-1) 0;
2882
2903
  margin: 0;
@@ -2905,7 +2926,7 @@ from {
2905
2926
  -1px calc(100% - var(--_ui-scroll-fade-size)),
2906
2927
  calc(100% - var(--_ui-scroll-fade-size)) 100%;
2907
2928
  }
2908
- .item[data-v-40241d5b] {
2929
+ .item[data-v-4e4cf8c6] {
2909
2930
  display: flex;
2910
2931
  align-items: center;
2911
2932
  min-height: 44px;
@@ -2913,10 +2934,17 @@ from {
2913
2934
  gap: var(--ui-space-3);
2914
2935
  cursor: pointer;
2915
2936
  }
2916
- .item.active[data-v-40241d5b] {
2937
+ .item.active[data-v-4e4cf8c6] {
2917
2938
  background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
2918
2939
  }
2919
- .avatar[data-v-40241d5b] {
2940
+
2941
+ /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
2942
+ the surface and a fine accent ring, so the initials stay visible. */
2943
+ .item.active .avatar[data-v-4e4cf8c6] {
2944
+ background: var(--ui-surface);
2945
+ box-shadow: inset 0 0 0 1px var(--ui-accent-soft, var(--ui-accent-subtle));
2946
+ }
2947
+ .avatar[data-v-4e4cf8c6] {
2920
2948
  display: inline-flex;
2921
2949
  align-items: center;
2922
2950
  justify-content: center;
@@ -2929,45 +2957,45 @@ from {
2929
2957
  font-size: var(--ui-font-size-xs);
2930
2958
  font-weight: var(--ui-font-semibold);
2931
2959
  }
2932
- .body[data-v-40241d5b] {
2960
+ .body[data-v-4e4cf8c6] {
2933
2961
  display: flex;
2934
2962
  min-width: 0;
2935
2963
  flex-direction: column;
2936
2964
  }
2937
- .label[data-v-40241d5b],
2938
- .detail[data-v-40241d5b] {
2965
+ .label[data-v-4e4cf8c6],
2966
+ .detail[data-v-4e4cf8c6] {
2939
2967
  overflow: hidden;
2940
2968
  text-overflow: ellipsis;
2941
2969
  white-space: nowrap;
2942
2970
  }
2943
- .label[data-v-40241d5b] {
2971
+ .label[data-v-4e4cf8c6] {
2944
2972
  color: var(--ui-text-primary);
2945
2973
  font-size: var(--ui-font-size-sm);
2946
2974
  font-weight: var(--ui-font-medium);
2947
2975
  }
2948
- .detail[data-v-40241d5b],
2949
- .loading[data-v-40241d5b] {
2976
+ .detail[data-v-4e4cf8c6],
2977
+ .loading[data-v-4e4cf8c6] {
2950
2978
  color: var(--ui-text-muted);
2951
2979
  font-size: var(--ui-font-size-xs);
2952
2980
  }
2953
- .loading[data-v-40241d5b] {
2981
+ .loading[data-v-4e4cf8c6] {
2954
2982
  min-height: 44px;
2955
2983
  padding: var(--ui-space-3);
2956
2984
  }
2957
2985
  @media (max-width: 767px) {
2958
- [data-component~="ui-editor-mention-menu"][data-v-40241d5b] {
2986
+ [data-component~="ui-editor-mention-menu"][data-v-4e4cf8c6] {
2959
2987
  border-bottom: 0;
2960
2988
  border-radius: var(--ui-radius-dialog) var(--ui-radius-dialog) 0 0;
2961
2989
  }
2962
- .list[data-v-40241d5b] {
2990
+ .list[data-v-4e4cf8c6] {
2963
2991
  max-height: calc(60dvh - 48px);
2964
2992
  }
2965
2993
  }
2966
- [data-component~="ui-editor-mention-menu"][hidden][data-v-40241d5b] {
2994
+ [data-component~="ui-editor-mention-menu"][hidden][data-v-4e4cf8c6] {
2967
2995
  display: none;
2968
2996
  }
2969
2997
 
2970
- [data-component~="ui-editor-mention-menu-item"][data-v-0efb3ba1] {
2998
+ [data-component~="ui-editor-mention-menu-item"][data-v-58580723] {
2971
2999
  display: flex;
2972
3000
  align-items: center;
2973
3001
  min-block-size: 44px;
@@ -2976,10 +3004,23 @@ from {
2976
3004
  cursor: pointer;
2977
3005
  list-style: none;
2978
3006
  }
2979
- [data-component~="ui-editor-mention-menu-item"][aria-selected="true"][data-v-0efb3ba1] {
3007
+ [data-component~="ui-editor-mention-menu-item"][aria-selected="true"][data-v-58580723] {
2980
3008
  background: var(--ui-accent-subtle);
2981
3009
  }
2982
- .avatar[data-v-0efb3ba1] {
3010
+
3011
+ /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
3012
+ the surface and a fine accent ring, so the initials stay visible. */
3013
+ [data-component~="ui-editor-mention-menu-item"][aria-selected="true"] .avatar[data-v-58580723] {
3014
+ background: var(--ui-surface);
3015
+ box-shadow: inset 0 0 0 1px var(--ui-accent-soft);
3016
+ }
3017
+
3018
+ /* A slotted Avatar (a person's photo) is its own circle. */
3019
+ [data-component~="ui-editor-mention-menu-item"] .avatar[data-v-58580723]:has(> [data-component~="ui-avatar"]) {
3020
+ background: none;
3021
+ box-shadow: none;
3022
+ }
3023
+ .avatar[data-v-58580723] {
2983
3024
  display: inline-flex;
2984
3025
  align-items: center;
2985
3026
  justify-content: center;
@@ -2992,26 +3033,26 @@ from {
2992
3033
  font-size: var(--ui-font-size-xs);
2993
3034
  font-weight: var(--ui-font-semibold);
2994
3035
  }
2995
- .body[data-v-0efb3ba1] {
3036
+ .body[data-v-58580723] {
2996
3037
  display: flex;
2997
3038
  min-inline-size: 0;
2998
3039
  flex-direction: column;
2999
3040
  }
3000
- .label[data-v-0efb3ba1], .detail[data-v-0efb3ba1] {
3041
+ .label[data-v-58580723], .detail[data-v-58580723] {
3001
3042
  overflow: hidden;
3002
3043
  text-overflow: ellipsis;
3003
3044
  white-space: nowrap;
3004
3045
  }
3005
- .label[data-v-0efb3ba1] {
3046
+ .label[data-v-58580723] {
3006
3047
  color: var(--ui-text-primary);
3007
3048
  font-size: var(--ui-font-size-sm);
3008
3049
  font-weight: var(--ui-font-medium);
3009
3050
  }
3010
- .detail[data-v-0efb3ba1] {
3051
+ .detail[data-v-58580723] {
3011
3052
  color: var(--ui-text-muted);
3012
3053
  font-size: var(--ui-font-size-xs);
3013
3054
  }
3014
- [data-component~="ui-editor-mention-menu-item"][hidden][data-v-0efb3ba1] {
3055
+ [data-component~="ui-editor-mention-menu-item"][hidden][data-v-58580723] {
3015
3056
  display: none;
3016
3057
  }
3017
3058