@tutti-os/ui-rich-text 0.0.36 → 0.0.37

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.
@@ -624,6 +624,10 @@
624
624
  background: var(--rich-text-at-mention-success-bg);
625
625
  color: var(--rich-text-at-mention-success-fg);
626
626
  }
627
+ .rich-text-at-mention-status[data-tone=purple] {
628
+ background: color-mix(in srgb, var(--rich-text-at-mention-accent) 12%, transparent);
629
+ color: var(--rich-text-at-mention-accent);
630
+ }
627
631
  .rich-text-at-mention-status[data-tone=red] {
628
632
  background: var(--rich-text-at-mention-danger-bg);
629
633
  color: var(--rich-text-at-mention-danger-fg);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/at-panel/mentionPalette.css"],"sourcesContent":[".rich-text-at-mention-palette-scroll-region {\n scrollbar-width: none !important;\n -ms-overflow-style: none !important;\n scrollbar-gutter: auto;\n}\n\n.rich-text-at-mention-palette-scroll-region::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n}\n\n.rich-text-at-mention-palette-scrollbar {\n position: absolute;\n top: 4px;\n right: 4px;\n bottom: 4px;\n width: 4px;\n cursor: pointer;\n opacity: 0;\n pointer-events: auto;\n transition: opacity 160ms ease-in-out;\n}\n\n.rich-text-at-mention-palette-scrollbar-thumb {\n width: 4px;\n min-height: 24px;\n border-radius: 999px;\n background: var(--transparency-block);\n cursor: grab;\n transition: background-color 160ms ease-in-out;\n will-change: transform;\n}\n\n.rich-text-at-mention-palette-scrollbar:hover\n .rich-text-at-mention-palette-scrollbar-thumb {\n background: var(--transparency-hover);\n}\n\n.rich-text-at-mention-palette-scrollbar[data-dragging=\"true\"] {\n opacity: 1;\n}\n\n.rich-text-at-mention-palette-scrollbar[data-dragging=\"true\"]\n .rich-text-at-mention-palette-scrollbar-thumb {\n background: var(--transparency-hover);\n cursor: grabbing;\n}\n\n.rich-text-at-mention-palette {\n container-type: inline-size;\n --rich-text-at-mention-bg: var(\n --background-fronted,\n var(--panel, var(--background-panel, #fff))\n );\n --rich-text-at-mention-text-primary: var(\n --text-primary,\n var(--text, #171717)\n );\n --rich-text-at-mention-text-secondary: var(\n --text-secondary,\n var(--muted, #737373)\n );\n --rich-text-at-mention-text-tertiary: var(\n --text-tertiary,\n var(--muted, #8a8a8a)\n );\n --rich-text-at-mention-line-1: var(--line-1, var(--border, #0000001a));\n --rich-text-at-mention-line-2: var(--line-2, var(--border, #00000014));\n --rich-text-at-mention-hover: var(\n --transparency-block,\n var(--accent-soft, var(--sidebar-hover, #0000000d))\n );\n --rich-text-at-mention-active: var(\n --transparency-active,\n var(--accent-hover, #00000014)\n );\n --rich-text-at-mention-accent: var(--tutti-purple, var(--accent, #5f5cf0));\n --rich-text-at-mention-danger-bg: var(--on-danger, #fee2e2);\n --rich-text-at-mention-danger-fg: var(--state-danger, #dc2626);\n --rich-text-at-mention-success-fg: var(--state-success, #16a34a);\n --rich-text-at-mention-success-bg: color-mix(\n in srgb,\n var(--rich-text-at-mention-success-fg) 12%,\n transparent\n );\n --rich-text-at-mention-warning-fg: var(--color-amber-500, #d97706);\n --rich-text-at-mention-warning-bg: color-mix(\n in srgb,\n var(--rich-text-at-mention-warning-fg) 12%,\n transparent\n );\n --rich-text-at-mention-info-fg: #0369a1;\n --rich-text-at-mention-info-bg: rgb(14 165 233 / 10%);\n}\n\n.rich-text-at-mention-palette__shell {\n display: grid;\n grid-template-rows: auto minmax(0, 1fr) auto;\n height: 100%;\n max-height: 320px;\n min-height: 0;\n overflow: hidden;\n color: var(--rich-text-at-mention-text-primary);\n font-size: 13px;\n -webkit-app-region: no-drag;\n}\n\n.rich-text-at-mention-palette__header {\n position: relative;\n z-index: 10;\n flex-shrink: 0;\n}\n\n.rich-text-at-mention-palette__footer {\n flex-shrink: 0;\n}\n\n.rich-text-at-mention-palette__scroll-shell {\n position: relative;\n min-height: 0;\n overflow: hidden;\n}\n\n.rich-text-at-mention-palette__scroll-body {\n height: 100%;\n min-height: 0;\n padding: 8px 4px 4px;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n\n.rich-text-at-mention-palette__groups,\n.rich-text-at-mention-palette__group,\n.rich-text-at-mention-palette__group-items {\n display: grid;\n}\n\n.rich-text-at-mention-palette__groups {\n gap: 12px;\n}\n\n.rich-text-at-mention-palette__group,\n.rich-text-at-mention-palette__group-items {\n gap: 4px;\n}\n\n.rich-text-at-mention-palette__group-divider {\n margin: 0 12px 8px;\n border-top: 1px solid var(--rich-text-at-mention-line-1);\n}\n\n.rich-text-at-mention-palette__group-label,\n.rich-text-at-mention-palette__group-empty {\n padding-inline: 12px;\n font-size: 13px;\n font-weight: 400;\n}\n\n.rich-text-at-mention-palette__group-label {\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-palette__group-empty {\n padding-block: 4px;\n color: var(--rich-text-at-mention-text-tertiary);\n}\n\n.rich-text-at-mention-palette__row-button,\n.rich-text-at-mention-palette__expand-button {\n appearance: none;\n -webkit-app-region: no-drag;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n cursor: pointer;\n outline: none;\n}\n\n.rich-text-at-mention-palette__row-button {\n position: relative;\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n min-width: 0;\n min-height: 36px;\n padding: 8px 10px;\n overflow: hidden;\n border-radius: 6px;\n color: var(--rich-text-at-mention-text-primary);\n text-align: left;\n user-select: none;\n transition:\n background-color 200ms ease,\n color 200ms ease;\n}\n\n.rich-text-at-mention-palette__row-button > svg,\n.rich-text-at-mention-palette__row-button svg {\n flex-shrink: 0;\n pointer-events: none;\n}\n\n.rich-text-at-mention-palette__row-button > svg:not([class*=\"size-\"]) {\n width: 16px;\n height: 16px;\n}\n\n.rich-text-at-mention-palette__row-button[data-highlighted],\n.rich-text-at-mention-palette__expand-button[data-highlighted] {\n background: var(--rich-text-at-mention-hover);\n color: var(--rich-text-at-mention-text-primary);\n}\n\n.rich-text-at-mention-palette__row-button:active,\n.rich-text-at-mention-palette__expand-button:active {\n background: var(--rich-text-at-mention-active);\n}\n\n.rich-text-at-mention-palette__expand-button {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n padding: 8px 12px;\n border-radius: 6px;\n color: var(--rich-text-at-mention-text-secondary);\n font-size: 13px;\n font-weight: 500;\n transition:\n background-color 160ms ease,\n color 160ms ease;\n}\n\n.rich-text-at-mention-palette__empty-state {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 0;\n height: 100%;\n padding: 24px 16px;\n color: var(--rich-text-at-mention-text-tertiary);\n font-size: 13px;\n text-align: center;\n}\n\n.rich-text-at-mention-palette__empty-state-inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n max-width: 28ch;\n}\n\n.rich-text-at-mention-palette__empty-state-icon {\n width: 24px;\n height: 24px;\n color: var(--rich-text-at-mention-text-tertiary);\n}\n\n.rich-text-at-mention-palette__empty-state-text {\n color: var(--rich-text-at-mention-text-tertiary);\n line-height: 20px;\n}\n\n.rich-text-at-mention-palette__loading {\n display: flex;\n align-items: center;\n gap: 8px;\n min-height: 52px;\n padding-inline: 12px;\n border-radius: 12px;\n color: var(--rich-text-at-mention-text-secondary);\n font-size: 13px;\n}\n\n.rich-text-at-mention-palette__loading-spinner {\n width: 16px;\n height: 16px;\n border: 2px solid color-mix(in srgb, currentColor 28%, transparent);\n border-top-color: currentColor;\n border-radius: 999px;\n animation: rich-text-at-mention-spin 820ms linear infinite;\n}\n\n@keyframes rich-text-at-mention-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.tsh-underline-tabs.rich-text-at-mention-palette-tabs {\n height: 41px;\n padding: 8px 16px 0;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs\"] {\n position: relative;\n box-sizing: border-box;\n min-width: 0;\n height: 33px;\n padding-inline: 16px;\n border-bottom: 1px solid var(--rich-text-at-mention-line-1);\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-viewport\"] {\n height: 32px;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none;\n}\n\n.rich-text-at-mention-palette\n [data-slot=\"underline-tabs-viewport\"]::-webkit-scrollbar {\n display: none;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-viewport\"] > div {\n position: relative;\n display: flex;\n align-items: center;\n gap: 14px;\n width: max-content;\n min-width: 100%;\n height: 32px;\n padding-bottom: 8px;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-tab\"] {\n appearance: none;\n position: relative;\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n gap: 6px;\n height: 24px;\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--rich-text-at-mention-text-secondary);\n font: inherit;\n font-size: 13px;\n font-weight: 600;\n line-height: 24px;\n white-space: nowrap;\n cursor: pointer;\n transition: color 160ms ease;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-tab\"]:hover,\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-tab\"]:focus-visible {\n color: var(--rich-text-at-mention-text-primary);\n outline: none;\n}\n\n.rich-text-at-mention-palette\n [data-slot=\"underline-tabs-tab\"][data-active=\"true\"] {\n color: var(--rich-text-at-mention-accent);\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-indicator\"] {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: 1;\n height: 2px;\n border-radius: 1px;\n background: var(--rich-text-at-mention-accent);\n transition:\n transform 220ms cubic-bezier(0.4, 0, 0.2, 1),\n width 220ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-scroll-left\"],\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-scroll-right\"] {\n appearance: none;\n pointer-events: none;\n position: absolute;\n top: 12px;\n z-index: 3;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: 0;\n border-radius: 999px;\n background: var(--rich-text-at-mention-bg);\n color: var(--rich-text-at-mention-text-secondary);\n opacity: 0;\n box-shadow: 0 4px 16px rgb(15 23 42 / 12%);\n transform: translateY(-50%) scale(0.94);\n transition:\n opacity 160ms ease,\n transform 160ms ease,\n background-color 160ms ease,\n color 160ms ease;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-scroll-left\"] {\n left: 16px;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-scroll-right\"] {\n right: 16px;\n}\n\n.rich-text-at-mention-palette:hover\n [data-slot=\"underline-tabs-scroll-left\"][data-visible=\"true\"],\n.rich-text-at-mention-palette:hover\n [data-slot=\"underline-tabs-scroll-right\"][data-visible=\"true\"],\n.rich-text-at-mention-palette:focus-within\n [data-slot=\"underline-tabs-scroll-left\"][data-visible=\"true\"],\n.rich-text-at-mention-palette:focus-within\n [data-slot=\"underline-tabs-scroll-right\"][data-visible=\"true\"] {\n pointer-events: auto;\n opacity: 1;\n transform: translateY(-50%) scale(1);\n}\n\n.rich-text-at-mention-palette-header {\n padding: 8px 0 0;\n}\n\n.rich-text-at-mention-palette-footer {\n min-height: 36px;\n border-top: 1px solid var(--line-2, var(--tutti-line-2));\n background: var(--background-fronted, var(--background-panel));\n}\n\n.rich-text-at-mention-palette-hint {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n width: 100%;\n height: 36px;\n padding: 0 16px 1px;\n color: var(--rich-text-at-mention-text-secondary);\n font-size: 13px;\n font-weight: 500;\n line-height: 20px;\n pointer-events: auto;\n}\n\n.rich-text-at-mention-palette-hint-item {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n white-space: nowrap;\n}\n\n.rich-text-at-mention-palette-hint-button,\n.rich-text-at-mention-palette-shortcut-button {\n appearance: none;\n border: 0;\n font: inherit;\n cursor: pointer;\n}\n\n.rich-text-at-mention-palette-hint-button {\n padding: 0;\n background: transparent;\n color: inherit;\n}\n\n.rich-text-at-mention-palette-hint-button > span:last-child,\n.rich-text-at-mention-palette-hint-item > span:last-child {\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-palette-shortcut {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n min-width: 20px;\n border: 1px solid var(--rich-text-at-mention-line-2);\n border-radius: 5px;\n background: var(--rich-text-at-mention-hover);\n color: var(--rich-text-at-mention-text-primary);\n box-shadow: inset 0 -1px 0 rgb(0 0 0 / 4%);\n font-size: 12px;\n font-weight: 650;\n line-height: 1;\n padding: 3px 6px;\n}\n\n.rich-text-at-mention-palette-hint-button:hover\n .rich-text-at-mention-palette-shortcut,\n.rich-text-at-mention-palette-hint-button:focus-visible\n .rich-text-at-mention-palette-shortcut,\n.rich-text-at-mention-palette-shortcut-button:hover,\n.rich-text-at-mention-palette-shortcut-button:focus-visible {\n border-color: var(--rich-text-at-mention-line-1);\n background: var(--rich-text-at-mention-active);\n}\n\n.rich-text-at-mention-palette-hint-button:focus-visible,\n.rich-text-at-mention-palette-shortcut-button:focus-visible {\n outline: 2px solid var(--rich-text-at-mention-line-1);\n outline-offset: 2px;\n}\n\n.rich-text-at-mention-palette-shortcut--arrow {\n width: 20px;\n min-width: 20px;\n font-size: 13px;\n line-height: 1;\n padding: 0;\n}\n\n.rich-text-at-mention-palette-shortcut-group {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.rich-text-at-mention-palette-hint-separator {\n color: var(--rich-text-at-mention-line-1);\n}\n\n.rich-text-at-mention-palette:hover\n .rich-text-at-mention-palette-scrollbar[data-scrollable=\"true\"] {\n opacity: 1;\n}\n\n.rich-text-at-mention-palette {\n --agent-mention-file-icon-size: 16px;\n}\n\n.rich-text-at-mention-row {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n width: 100%;\n overflow: hidden;\n}\n\n.rich-text-at-mention-row--session {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n gap: 12px;\n}\n\n.rich-text-at-mention-row--plain > :not(.rich-text-at-mention-row__text-stack) {\n flex: 0 0 auto;\n}\n\n.rich-text-at-mention-row__leading,\n.rich-text-at-mention-row__inline,\n.rich-text-at-mention-row__file-text,\n.rich-text-at-mention-row__app-text {\n display: flex;\n min-width: 0;\n overflow: hidden;\n}\n\n.rich-text-at-mention-row__leading {\n align-items: center;\n gap: 8px;\n}\n\n.rich-text-at-mention-row__inline {\n align-items: center;\n gap: 8px;\n}\n\n.rich-text-at-mention-row__file-text,\n.rich-text-at-mention-row__app-text {\n align-items: baseline;\n gap: 4px;\n}\n\n.rich-text-at-mention-row__app-text {\n flex: 1 1 auto;\n}\n\n.rich-text-at-mention-row__text-stack {\n display: grid;\n gap: 2px;\n min-width: 0;\n overflow: hidden;\n}\n\n.rich-text-at-mention-row__text-stack--fill {\n flex: 1 1 auto;\n}\n\n.rich-text-at-mention-row__title,\n.rich-text-at-mention-row__app-name,\n.rich-text-at-mention-row__session-title,\n.rich-text-at-mention-row__description,\n.rich-text-at-mention-row__app-description,\n.rich-text-at-mention-row__file-count,\n.rich-text-at-mention-row__session-participant,\n.rich-text-at-mention-row__session-summary {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 13px;\n}\n\n.rich-text-at-mention-row__title,\n.rich-text-at-mention-row__app-name,\n.rich-text-at-mention-row__session-title,\n.rich-text-at-mention-row__session-participant {\n color: var(--rich-text-at-mention-text-primary);\n font-weight: 600;\n}\n\n.rich-text-at-mention-row__title,\n.rich-text-at-mention-row__app-name {\n flex: 0 1 auto;\n}\n\n.rich-text-at-mention-row__app-name {\n max-width: 40%;\n flex-shrink: 0;\n}\n\n.rich-text-at-mention-row__description,\n.rich-text-at-mention-row__app-description,\n.rich-text-at-mention-row__file-count,\n.rich-text-at-mention-row__session-summary {\n color: var(--rich-text-at-mention-text-secondary);\n font-weight: 400;\n}\n\n.rich-text-at-mention-row__app-description {\n flex: 1 1 auto;\n}\n\n.rich-text-at-mention-row__file-count {\n flex-shrink: 0;\n}\n\n.rich-text-at-mention-row__session-title,\n.rich-text-at-mention-row__session-participant,\n.rich-text-at-mention-row__session-summary {\n line-height: 16px;\n}\n\n.rich-text-at-mention-row__media {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.rich-text-at-mention-row__open-references {\n display: grid;\n place-items: center;\n width: 24px;\n height: 24px;\n margin-left: auto;\n flex: 0 0 24px;\n border-radius: 5px;\n color: var(--rich-text-at-mention-text-tertiary);\n cursor: pointer;\n transition:\n background-color 160ms ease,\n color 160ms ease;\n}\n\n.rich-text-at-mention-row__open-references:hover {\n background: var(--rich-text-at-mention-active);\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-file-icon--glyph {\n display: grid;\n place-items: center;\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-app-icon {\n display: grid;\n place-items: center;\n width: 20px;\n height: 20px;\n flex: 0 0 20px;\n overflow: hidden;\n border-radius: 5px;\n background: var(--bg-block, var(--block, #0000000a));\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-kind-icon--app {\n width: 16px;\n height: 16px;\n}\n\n.rich-text-at-mention-avatar-stack {\n position: relative;\n isolation: isolate;\n display: block;\n width: 36px;\n height: 20px;\n flex: 0 0 36px;\n}\n\n.rich-text-at-mention-avatar-stack--agent-only {\n width: 20px;\n flex: 0 0 20px;\n}\n\n.rich-text-at-mention-avatar-stack--agent-only\n .rich-text-at-mention-avatar--agent {\n left: 0;\n}\n\n.rich-text-at-mention-avatar {\n position: absolute;\n top: 0;\n display: grid;\n width: 20px;\n height: 20px;\n overflow: hidden;\n border-radius: 999px;\n background: var(--bg-block, var(--block, #0000000a));\n}\n\n.rich-text-at-mention-avatar--user {\n left: 0;\n z-index: 0;\n}\n\n.rich-text-at-mention-avatar--agent {\n left: 16px;\n z-index: 10;\n}\n\n.rich-text-at-mention-status {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n gap: 4px;\n min-width: 0;\n width: fit-content;\n overflow: hidden;\n border: 1px solid transparent;\n white-space: nowrap;\n}\n\n.rich-text-at-mention-status[data-tone=\"blue\"] {\n background: var(--rich-text-at-mention-info-bg);\n color: var(--rich-text-at-mention-info-fg);\n}\n\n.rich-text-at-mention-status[data-tone=\"amber\"] {\n background: var(--rich-text-at-mention-warning-bg);\n color: var(--rich-text-at-mention-warning-fg);\n}\n\n.rich-text-at-mention-status[data-tone=\"green\"] {\n background: var(--rich-text-at-mention-success-bg);\n color: var(--rich-text-at-mention-success-fg);\n}\n\n.rich-text-at-mention-status[data-tone=\"red\"] {\n background: var(--rich-text-at-mention-danger-bg);\n color: var(--rich-text-at-mention-danger-fg);\n}\n\n.rich-text-at-mention-status[data-tone=\"neutral\"] {\n background: var(--rich-text-at-mention-hover);\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-status--activity {\n padding-inline: 0;\n background: transparent;\n}\n\n.rich-text-at-mention-status--activity[data-tone] {\n background: transparent;\n}\n\n.rich-text-at-mention-status [data-slot=\"status-dot\"] {\n display: inline-flex;\n width: 6px;\n height: 6px;\n flex: 0 0 6px;\n border-radius: 999px;\n background: currentColor;\n}\n\n.rich-text-at-mention-status [data-slot=\"status-dot\"][data-pulse=\"true\"] {\n animation: rich-text-at-mention-pulse 1.4s ease-in-out infinite;\n}\n\n@keyframes rich-text-at-mention-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n.rich-text-at-mention-select-indicator {\n display: grid;\n place-items: center;\n width: 18px;\n height: 18px;\n flex: 0 0 18px;\n border: 1px solid var(--border, var(--rich-text-at-mention-line-1));\n border-radius: 5px;\n background: #fff;\n color: transparent;\n}\n\n.rich-text-at-mention-select-indicator[data-selected=\"true\"] {\n border-color: #171717;\n background: #171717;\n color: #fff;\n}\n\n.rich-text-at-mention-multiselect-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 10px;\n border-top: 1px solid var(--border, var(--rich-text-at-mention-line-1));\n background: var(--panel, var(--rich-text-at-mention-bg));\n}\n\n.rich-text-at-mention-multiselect-footer__count {\n color: var(--rich-text-at-mention-text-secondary);\n font-size: 12px;\n font-weight: 600;\n}\n\n.rich-text-at-mention-multiselect-footer__actions {\n display: flex;\n gap: 8px;\n}\n\n.rich-text-at-mention-multiselect-footer__button {\n appearance: none;\n height: 30px;\n padding-inline: 12px;\n border-radius: 8px;\n font: inherit;\n font-size: 12px;\n font-weight: 700;\n cursor: pointer;\n}\n\n.rich-text-at-mention-multiselect-footer__button--secondary {\n border: 1px solid var(--border, var(--rich-text-at-mention-line-1));\n background: #fff;\n color: var(--text, var(--rich-text-at-mention-text-primary));\n}\n\n.rich-text-at-mention-multiselect-footer__button--primary {\n border: 0;\n background: #171717;\n color: #fff;\n}\n\n.rich-text-at-mention-multiselect-footer__button:disabled {\n opacity: 0.45;\n cursor: default;\n}\n\n/*\n * Structural styling for the shared MentionRow elements. These mirror the\n * agent composer's rules (in `agentactivity.css`) under package-owned\n * `rich-text-at-mention-*` class names so any consumer (e.g. issue-manager)\n * that does NOT load the agent stylesheet still renders styled rows. The agent\n * keeps passing its own class names via `renderMentionRow(item, classNames)`.\n */\n.rich-text-at-mention-file-thumb {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--agent-mention-file-icon-size, 16px);\n height: var(--agent-mention-file-icon-size, 16px);\n flex: 0 0 var(--agent-mention-file-icon-size, 16px);\n overflow: hidden;\n border-radius: 4px;\n background-color: var(--bg-block, var(--block));\n vertical-align: middle;\n}\n\n.rich-text-at-mention-file-thumb img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n/*\n * NOTE: the masked file kind-icon glyph and the fallback app glyph need raw SVG\n * mask assets. Those cannot live in this package (the `check-ui-boundaries`\n * gate restricts raw .svg assets to `packages/ui/system/src/icons/`), so only\n * the structural box (size/layout) is owned here. The agent composer supplies\n * its own masked glyph rules via `agentactivity.css` + its own class names. The\n * issue-manager file glyph + app fallback glyph are completed in Phases 3-4.\n */\n.rich-text-at-mention-file-icon {\n width: var(--agent-mention-file-icon-size, 16px);\n height: var(--agent-mention-file-icon-size, 16px);\n flex: 0 0 var(--agent-mention-file-icon-size, 16px);\n background-color: var(--folder);\n border-radius: 4px;\n}\n\n/* Fallback app glyph box (shown when a workspace-app mention has no icon URL). */\n.rich-text-at-mention-kind-icon {\n display: block;\n width: 16px;\n height: 16px;\n flex: 0 0 16px;\n background-color: currentColor;\n border-radius: 22.5%;\n}\n\n/* Session user-avatar placeholder background (no avatar URL). */\n.rich-text-at-mention-avatar-img--user-placeholder {\n background-color: var(--muted);\n}\n\n/*\n * Workspace-app icon container. Data-attribute based (matches the agent's\n * global rule) so the rounded app icon renders for any consumer of the shared\n * row, including surfaces that do not load `agentactivity.css`.\n */\n[data-workspace-app-icon=\"true\"] {\n display: inline-grid;\n min-width: 0;\n min-height: 0;\n place-items: center;\n overflow: hidden;\n border-radius: 22.5%;\n background: var(--workspace-app-icon-bg, transparent);\n}\n\n[data-workspace-app-icon=\"true\"] > img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n}\n\n[data-workspace-app-icon=\"true\"] > .rich-text-at-mention-kind-icon {\n display: block;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/at-panel/mentionPalette.css"],"sourcesContent":[".rich-text-at-mention-palette-scroll-region {\n scrollbar-width: none !important;\n -ms-overflow-style: none !important;\n scrollbar-gutter: auto;\n}\n\n.rich-text-at-mention-palette-scroll-region::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n}\n\n.rich-text-at-mention-palette-scrollbar {\n position: absolute;\n top: 4px;\n right: 4px;\n bottom: 4px;\n width: 4px;\n cursor: pointer;\n opacity: 0;\n pointer-events: auto;\n transition: opacity 160ms ease-in-out;\n}\n\n.rich-text-at-mention-palette-scrollbar-thumb {\n width: 4px;\n min-height: 24px;\n border-radius: 999px;\n background: var(--transparency-block);\n cursor: grab;\n transition: background-color 160ms ease-in-out;\n will-change: transform;\n}\n\n.rich-text-at-mention-palette-scrollbar:hover\n .rich-text-at-mention-palette-scrollbar-thumb {\n background: var(--transparency-hover);\n}\n\n.rich-text-at-mention-palette-scrollbar[data-dragging=\"true\"] {\n opacity: 1;\n}\n\n.rich-text-at-mention-palette-scrollbar[data-dragging=\"true\"]\n .rich-text-at-mention-palette-scrollbar-thumb {\n background: var(--transparency-hover);\n cursor: grabbing;\n}\n\n.rich-text-at-mention-palette {\n container-type: inline-size;\n --rich-text-at-mention-bg: var(\n --background-fronted,\n var(--panel, var(--background-panel, #fff))\n );\n --rich-text-at-mention-text-primary: var(\n --text-primary,\n var(--text, #171717)\n );\n --rich-text-at-mention-text-secondary: var(\n --text-secondary,\n var(--muted, #737373)\n );\n --rich-text-at-mention-text-tertiary: var(\n --text-tertiary,\n var(--muted, #8a8a8a)\n );\n --rich-text-at-mention-line-1: var(--line-1, var(--border, #0000001a));\n --rich-text-at-mention-line-2: var(--line-2, var(--border, #00000014));\n --rich-text-at-mention-hover: var(\n --transparency-block,\n var(--accent-soft, var(--sidebar-hover, #0000000d))\n );\n --rich-text-at-mention-active: var(\n --transparency-active,\n var(--accent-hover, #00000014)\n );\n --rich-text-at-mention-accent: var(--tutti-purple, var(--accent, #5f5cf0));\n --rich-text-at-mention-danger-bg: var(--on-danger, #fee2e2);\n --rich-text-at-mention-danger-fg: var(--state-danger, #dc2626);\n --rich-text-at-mention-success-fg: var(--state-success, #16a34a);\n --rich-text-at-mention-success-bg: color-mix(\n in srgb,\n var(--rich-text-at-mention-success-fg) 12%,\n transparent\n );\n --rich-text-at-mention-warning-fg: var(--color-amber-500, #d97706);\n --rich-text-at-mention-warning-bg: color-mix(\n in srgb,\n var(--rich-text-at-mention-warning-fg) 12%,\n transparent\n );\n --rich-text-at-mention-info-fg: #0369a1;\n --rich-text-at-mention-info-bg: rgb(14 165 233 / 10%);\n}\n\n.rich-text-at-mention-palette__shell {\n display: grid;\n grid-template-rows: auto minmax(0, 1fr) auto;\n height: 100%;\n max-height: 320px;\n min-height: 0;\n overflow: hidden;\n color: var(--rich-text-at-mention-text-primary);\n font-size: 13px;\n -webkit-app-region: no-drag;\n}\n\n.rich-text-at-mention-palette__header {\n position: relative;\n z-index: 10;\n flex-shrink: 0;\n}\n\n.rich-text-at-mention-palette__footer {\n flex-shrink: 0;\n}\n\n.rich-text-at-mention-palette__scroll-shell {\n position: relative;\n min-height: 0;\n overflow: hidden;\n}\n\n.rich-text-at-mention-palette__scroll-body {\n height: 100%;\n min-height: 0;\n padding: 8px 4px 4px;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n\n.rich-text-at-mention-palette__groups,\n.rich-text-at-mention-palette__group,\n.rich-text-at-mention-palette__group-items {\n display: grid;\n}\n\n.rich-text-at-mention-palette__groups {\n gap: 12px;\n}\n\n.rich-text-at-mention-palette__group,\n.rich-text-at-mention-palette__group-items {\n gap: 4px;\n}\n\n.rich-text-at-mention-palette__group-divider {\n margin: 0 12px 8px;\n border-top: 1px solid var(--rich-text-at-mention-line-1);\n}\n\n.rich-text-at-mention-palette__group-label,\n.rich-text-at-mention-palette__group-empty {\n padding-inline: 12px;\n font-size: 13px;\n font-weight: 400;\n}\n\n.rich-text-at-mention-palette__group-label {\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-palette__group-empty {\n padding-block: 4px;\n color: var(--rich-text-at-mention-text-tertiary);\n}\n\n.rich-text-at-mention-palette__row-button,\n.rich-text-at-mention-palette__expand-button {\n appearance: none;\n -webkit-app-region: no-drag;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n cursor: pointer;\n outline: none;\n}\n\n.rich-text-at-mention-palette__row-button {\n position: relative;\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n min-width: 0;\n min-height: 36px;\n padding: 8px 10px;\n overflow: hidden;\n border-radius: 6px;\n color: var(--rich-text-at-mention-text-primary);\n text-align: left;\n user-select: none;\n transition:\n background-color 200ms ease,\n color 200ms ease;\n}\n\n.rich-text-at-mention-palette__row-button > svg,\n.rich-text-at-mention-palette__row-button svg {\n flex-shrink: 0;\n pointer-events: none;\n}\n\n.rich-text-at-mention-palette__row-button > svg:not([class*=\"size-\"]) {\n width: 16px;\n height: 16px;\n}\n\n.rich-text-at-mention-palette__row-button[data-highlighted],\n.rich-text-at-mention-palette__expand-button[data-highlighted] {\n background: var(--rich-text-at-mention-hover);\n color: var(--rich-text-at-mention-text-primary);\n}\n\n.rich-text-at-mention-palette__row-button:active,\n.rich-text-at-mention-palette__expand-button:active {\n background: var(--rich-text-at-mention-active);\n}\n\n.rich-text-at-mention-palette__expand-button {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n padding: 8px 12px;\n border-radius: 6px;\n color: var(--rich-text-at-mention-text-secondary);\n font-size: 13px;\n font-weight: 500;\n transition:\n background-color 160ms ease,\n color 160ms ease;\n}\n\n.rich-text-at-mention-palette__empty-state {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 0;\n height: 100%;\n padding: 24px 16px;\n color: var(--rich-text-at-mention-text-tertiary);\n font-size: 13px;\n text-align: center;\n}\n\n.rich-text-at-mention-palette__empty-state-inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n max-width: 28ch;\n}\n\n.rich-text-at-mention-palette__empty-state-icon {\n width: 24px;\n height: 24px;\n color: var(--rich-text-at-mention-text-tertiary);\n}\n\n.rich-text-at-mention-palette__empty-state-text {\n color: var(--rich-text-at-mention-text-tertiary);\n line-height: 20px;\n}\n\n.rich-text-at-mention-palette__loading {\n display: flex;\n align-items: center;\n gap: 8px;\n min-height: 52px;\n padding-inline: 12px;\n border-radius: 12px;\n color: var(--rich-text-at-mention-text-secondary);\n font-size: 13px;\n}\n\n.rich-text-at-mention-palette__loading-spinner {\n width: 16px;\n height: 16px;\n border: 2px solid color-mix(in srgb, currentColor 28%, transparent);\n border-top-color: currentColor;\n border-radius: 999px;\n animation: rich-text-at-mention-spin 820ms linear infinite;\n}\n\n@keyframes rich-text-at-mention-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.tsh-underline-tabs.rich-text-at-mention-palette-tabs {\n height: 41px;\n padding: 8px 16px 0;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs\"] {\n position: relative;\n box-sizing: border-box;\n min-width: 0;\n height: 33px;\n padding-inline: 16px;\n border-bottom: 1px solid var(--rich-text-at-mention-line-1);\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-viewport\"] {\n height: 32px;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none;\n}\n\n.rich-text-at-mention-palette\n [data-slot=\"underline-tabs-viewport\"]::-webkit-scrollbar {\n display: none;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-viewport\"] > div {\n position: relative;\n display: flex;\n align-items: center;\n gap: 14px;\n width: max-content;\n min-width: 100%;\n height: 32px;\n padding-bottom: 8px;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-tab\"] {\n appearance: none;\n position: relative;\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n gap: 6px;\n height: 24px;\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--rich-text-at-mention-text-secondary);\n font: inherit;\n font-size: 13px;\n font-weight: 600;\n line-height: 24px;\n white-space: nowrap;\n cursor: pointer;\n transition: color 160ms ease;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-tab\"]:hover,\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-tab\"]:focus-visible {\n color: var(--rich-text-at-mention-text-primary);\n outline: none;\n}\n\n.rich-text-at-mention-palette\n [data-slot=\"underline-tabs-tab\"][data-active=\"true\"] {\n color: var(--rich-text-at-mention-accent);\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-indicator\"] {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: 1;\n height: 2px;\n border-radius: 1px;\n background: var(--rich-text-at-mention-accent);\n transition:\n transform 220ms cubic-bezier(0.4, 0, 0.2, 1),\n width 220ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-scroll-left\"],\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-scroll-right\"] {\n appearance: none;\n pointer-events: none;\n position: absolute;\n top: 12px;\n z-index: 3;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n border: 0;\n border-radius: 999px;\n background: var(--rich-text-at-mention-bg);\n color: var(--rich-text-at-mention-text-secondary);\n opacity: 0;\n box-shadow: 0 4px 16px rgb(15 23 42 / 12%);\n transform: translateY(-50%) scale(0.94);\n transition:\n opacity 160ms ease,\n transform 160ms ease,\n background-color 160ms ease,\n color 160ms ease;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-scroll-left\"] {\n left: 16px;\n}\n\n.rich-text-at-mention-palette [data-slot=\"underline-tabs-scroll-right\"] {\n right: 16px;\n}\n\n.rich-text-at-mention-palette:hover\n [data-slot=\"underline-tabs-scroll-left\"][data-visible=\"true\"],\n.rich-text-at-mention-palette:hover\n [data-slot=\"underline-tabs-scroll-right\"][data-visible=\"true\"],\n.rich-text-at-mention-palette:focus-within\n [data-slot=\"underline-tabs-scroll-left\"][data-visible=\"true\"],\n.rich-text-at-mention-palette:focus-within\n [data-slot=\"underline-tabs-scroll-right\"][data-visible=\"true\"] {\n pointer-events: auto;\n opacity: 1;\n transform: translateY(-50%) scale(1);\n}\n\n.rich-text-at-mention-palette-header {\n padding: 8px 0 0;\n}\n\n.rich-text-at-mention-palette-footer {\n min-height: 36px;\n border-top: 1px solid var(--line-2, var(--tutti-line-2));\n background: var(--background-fronted, var(--background-panel));\n}\n\n.rich-text-at-mention-palette-hint {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n width: 100%;\n height: 36px;\n padding: 0 16px 1px;\n color: var(--rich-text-at-mention-text-secondary);\n font-size: 13px;\n font-weight: 500;\n line-height: 20px;\n pointer-events: auto;\n}\n\n.rich-text-at-mention-palette-hint-item {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n white-space: nowrap;\n}\n\n.rich-text-at-mention-palette-hint-button,\n.rich-text-at-mention-palette-shortcut-button {\n appearance: none;\n border: 0;\n font: inherit;\n cursor: pointer;\n}\n\n.rich-text-at-mention-palette-hint-button {\n padding: 0;\n background: transparent;\n color: inherit;\n}\n\n.rich-text-at-mention-palette-hint-button > span:last-child,\n.rich-text-at-mention-palette-hint-item > span:last-child {\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-palette-shortcut {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n min-width: 20px;\n border: 1px solid var(--rich-text-at-mention-line-2);\n border-radius: 5px;\n background: var(--rich-text-at-mention-hover);\n color: var(--rich-text-at-mention-text-primary);\n box-shadow: inset 0 -1px 0 rgb(0 0 0 / 4%);\n font-size: 12px;\n font-weight: 650;\n line-height: 1;\n padding: 3px 6px;\n}\n\n.rich-text-at-mention-palette-hint-button:hover\n .rich-text-at-mention-palette-shortcut,\n.rich-text-at-mention-palette-hint-button:focus-visible\n .rich-text-at-mention-palette-shortcut,\n.rich-text-at-mention-palette-shortcut-button:hover,\n.rich-text-at-mention-palette-shortcut-button:focus-visible {\n border-color: var(--rich-text-at-mention-line-1);\n background: var(--rich-text-at-mention-active);\n}\n\n.rich-text-at-mention-palette-hint-button:focus-visible,\n.rich-text-at-mention-palette-shortcut-button:focus-visible {\n outline: 2px solid var(--rich-text-at-mention-line-1);\n outline-offset: 2px;\n}\n\n.rich-text-at-mention-palette-shortcut--arrow {\n width: 20px;\n min-width: 20px;\n font-size: 13px;\n line-height: 1;\n padding: 0;\n}\n\n.rich-text-at-mention-palette-shortcut-group {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.rich-text-at-mention-palette-hint-separator {\n color: var(--rich-text-at-mention-line-1);\n}\n\n.rich-text-at-mention-palette:hover\n .rich-text-at-mention-palette-scrollbar[data-scrollable=\"true\"] {\n opacity: 1;\n}\n\n.rich-text-at-mention-palette {\n --agent-mention-file-icon-size: 16px;\n}\n\n.rich-text-at-mention-row {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n width: 100%;\n overflow: hidden;\n}\n\n.rich-text-at-mention-row--session {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n gap: 12px;\n}\n\n.rich-text-at-mention-row--plain > :not(.rich-text-at-mention-row__text-stack) {\n flex: 0 0 auto;\n}\n\n.rich-text-at-mention-row__leading,\n.rich-text-at-mention-row__inline,\n.rich-text-at-mention-row__file-text,\n.rich-text-at-mention-row__app-text {\n display: flex;\n min-width: 0;\n overflow: hidden;\n}\n\n.rich-text-at-mention-row__leading {\n align-items: center;\n gap: 8px;\n}\n\n.rich-text-at-mention-row__inline {\n align-items: center;\n gap: 8px;\n}\n\n.rich-text-at-mention-row__file-text,\n.rich-text-at-mention-row__app-text {\n align-items: baseline;\n gap: 4px;\n}\n\n.rich-text-at-mention-row__app-text {\n flex: 1 1 auto;\n}\n\n.rich-text-at-mention-row__text-stack {\n display: grid;\n gap: 2px;\n min-width: 0;\n overflow: hidden;\n}\n\n.rich-text-at-mention-row__text-stack--fill {\n flex: 1 1 auto;\n}\n\n.rich-text-at-mention-row__title,\n.rich-text-at-mention-row__app-name,\n.rich-text-at-mention-row__session-title,\n.rich-text-at-mention-row__description,\n.rich-text-at-mention-row__app-description,\n.rich-text-at-mention-row__file-count,\n.rich-text-at-mention-row__session-participant,\n.rich-text-at-mention-row__session-summary {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 13px;\n}\n\n.rich-text-at-mention-row__title,\n.rich-text-at-mention-row__app-name,\n.rich-text-at-mention-row__session-title,\n.rich-text-at-mention-row__session-participant {\n color: var(--rich-text-at-mention-text-primary);\n font-weight: 600;\n}\n\n.rich-text-at-mention-row__title,\n.rich-text-at-mention-row__app-name {\n flex: 0 1 auto;\n}\n\n.rich-text-at-mention-row__app-name {\n max-width: 40%;\n flex-shrink: 0;\n}\n\n.rich-text-at-mention-row__description,\n.rich-text-at-mention-row__app-description,\n.rich-text-at-mention-row__file-count,\n.rich-text-at-mention-row__session-summary {\n color: var(--rich-text-at-mention-text-secondary);\n font-weight: 400;\n}\n\n.rich-text-at-mention-row__app-description {\n flex: 1 1 auto;\n}\n\n.rich-text-at-mention-row__file-count {\n flex-shrink: 0;\n}\n\n.rich-text-at-mention-row__session-title,\n.rich-text-at-mention-row__session-participant,\n.rich-text-at-mention-row__session-summary {\n line-height: 16px;\n}\n\n.rich-text-at-mention-row__media {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.rich-text-at-mention-row__open-references {\n display: grid;\n place-items: center;\n width: 24px;\n height: 24px;\n margin-left: auto;\n flex: 0 0 24px;\n border-radius: 5px;\n color: var(--rich-text-at-mention-text-tertiary);\n cursor: pointer;\n transition:\n background-color 160ms ease,\n color 160ms ease;\n}\n\n.rich-text-at-mention-row__open-references:hover {\n background: var(--rich-text-at-mention-active);\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-file-icon--glyph {\n display: grid;\n place-items: center;\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-app-icon {\n display: grid;\n place-items: center;\n width: 20px;\n height: 20px;\n flex: 0 0 20px;\n overflow: hidden;\n border-radius: 5px;\n background: var(--bg-block, var(--block, #0000000a));\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-kind-icon--app {\n width: 16px;\n height: 16px;\n}\n\n.rich-text-at-mention-avatar-stack {\n position: relative;\n isolation: isolate;\n display: block;\n width: 36px;\n height: 20px;\n flex: 0 0 36px;\n}\n\n.rich-text-at-mention-avatar-stack--agent-only {\n width: 20px;\n flex: 0 0 20px;\n}\n\n.rich-text-at-mention-avatar-stack--agent-only\n .rich-text-at-mention-avatar--agent {\n left: 0;\n}\n\n.rich-text-at-mention-avatar {\n position: absolute;\n top: 0;\n display: grid;\n width: 20px;\n height: 20px;\n overflow: hidden;\n border-radius: 999px;\n background: var(--bg-block, var(--block, #0000000a));\n}\n\n.rich-text-at-mention-avatar--user {\n left: 0;\n z-index: 0;\n}\n\n.rich-text-at-mention-avatar--agent {\n left: 16px;\n z-index: 10;\n}\n\n.rich-text-at-mention-status {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n gap: 4px;\n min-width: 0;\n width: fit-content;\n overflow: hidden;\n border: 1px solid transparent;\n white-space: nowrap;\n}\n\n.rich-text-at-mention-status[data-tone=\"blue\"] {\n background: var(--rich-text-at-mention-info-bg);\n color: var(--rich-text-at-mention-info-fg);\n}\n\n.rich-text-at-mention-status[data-tone=\"amber\"] {\n background: var(--rich-text-at-mention-warning-bg);\n color: var(--rich-text-at-mention-warning-fg);\n}\n\n.rich-text-at-mention-status[data-tone=\"green\"] {\n background: var(--rich-text-at-mention-success-bg);\n color: var(--rich-text-at-mention-success-fg);\n}\n\n.rich-text-at-mention-status[data-tone=\"purple\"] {\n background: color-mix(\n in srgb,\n var(--rich-text-at-mention-accent) 12%,\n transparent\n );\n color: var(--rich-text-at-mention-accent);\n}\n\n.rich-text-at-mention-status[data-tone=\"red\"] {\n background: var(--rich-text-at-mention-danger-bg);\n color: var(--rich-text-at-mention-danger-fg);\n}\n\n.rich-text-at-mention-status[data-tone=\"neutral\"] {\n background: var(--rich-text-at-mention-hover);\n color: var(--rich-text-at-mention-text-secondary);\n}\n\n.rich-text-at-mention-status--activity {\n padding-inline: 0;\n background: transparent;\n}\n\n.rich-text-at-mention-status--activity[data-tone] {\n background: transparent;\n}\n\n.rich-text-at-mention-status [data-slot=\"status-dot\"] {\n display: inline-flex;\n width: 6px;\n height: 6px;\n flex: 0 0 6px;\n border-radius: 999px;\n background: currentColor;\n}\n\n.rich-text-at-mention-status [data-slot=\"status-dot\"][data-pulse=\"true\"] {\n animation: rich-text-at-mention-pulse 1.4s ease-in-out infinite;\n}\n\n@keyframes rich-text-at-mention-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n.rich-text-at-mention-select-indicator {\n display: grid;\n place-items: center;\n width: 18px;\n height: 18px;\n flex: 0 0 18px;\n border: 1px solid var(--border, var(--rich-text-at-mention-line-1));\n border-radius: 5px;\n background: #fff;\n color: transparent;\n}\n\n.rich-text-at-mention-select-indicator[data-selected=\"true\"] {\n border-color: #171717;\n background: #171717;\n color: #fff;\n}\n\n.rich-text-at-mention-multiselect-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 10px;\n border-top: 1px solid var(--border, var(--rich-text-at-mention-line-1));\n background: var(--panel, var(--rich-text-at-mention-bg));\n}\n\n.rich-text-at-mention-multiselect-footer__count {\n color: var(--rich-text-at-mention-text-secondary);\n font-size: 12px;\n font-weight: 600;\n}\n\n.rich-text-at-mention-multiselect-footer__actions {\n display: flex;\n gap: 8px;\n}\n\n.rich-text-at-mention-multiselect-footer__button {\n appearance: none;\n height: 30px;\n padding-inline: 12px;\n border-radius: 8px;\n font: inherit;\n font-size: 12px;\n font-weight: 700;\n cursor: pointer;\n}\n\n.rich-text-at-mention-multiselect-footer__button--secondary {\n border: 1px solid var(--border, var(--rich-text-at-mention-line-1));\n background: #fff;\n color: var(--text, var(--rich-text-at-mention-text-primary));\n}\n\n.rich-text-at-mention-multiselect-footer__button--primary {\n border: 0;\n background: #171717;\n color: #fff;\n}\n\n.rich-text-at-mention-multiselect-footer__button:disabled {\n opacity: 0.45;\n cursor: default;\n}\n\n/*\n * Structural styling for the shared MentionRow elements. These mirror the\n * agent composer's rules (in `agentactivity.css`) under package-owned\n * `rich-text-at-mention-*` class names so any consumer (e.g. issue-manager)\n * that does NOT load the agent stylesheet still renders styled rows. The agent\n * keeps passing its own class names via `renderMentionRow(item, classNames)`.\n */\n.rich-text-at-mention-file-thumb {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--agent-mention-file-icon-size, 16px);\n height: var(--agent-mention-file-icon-size, 16px);\n flex: 0 0 var(--agent-mention-file-icon-size, 16px);\n overflow: hidden;\n border-radius: 4px;\n background-color: var(--bg-block, var(--block));\n vertical-align: middle;\n}\n\n.rich-text-at-mention-file-thumb img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n/*\n * NOTE: the masked file kind-icon glyph and the fallback app glyph need raw SVG\n * mask assets. Those cannot live in this package (the `check-ui-boundaries`\n * gate restricts raw .svg assets to `packages/ui/system/src/icons/`), so only\n * the structural box (size/layout) is owned here. The agent composer supplies\n * its own masked glyph rules via `agentactivity.css` + its own class names. The\n * issue-manager file glyph + app fallback glyph are completed in Phases 3-4.\n */\n.rich-text-at-mention-file-icon {\n width: var(--agent-mention-file-icon-size, 16px);\n height: var(--agent-mention-file-icon-size, 16px);\n flex: 0 0 var(--agent-mention-file-icon-size, 16px);\n background-color: var(--folder);\n border-radius: 4px;\n}\n\n/* Fallback app glyph box (shown when a workspace-app mention has no icon URL). */\n.rich-text-at-mention-kind-icon {\n display: block;\n width: 16px;\n height: 16px;\n flex: 0 0 16px;\n background-color: currentColor;\n border-radius: 22.5%;\n}\n\n/* Session user-avatar placeholder background (no avatar URL). */\n.rich-text-at-mention-avatar-img--user-placeholder {\n background-color: var(--muted);\n}\n\n/*\n * Workspace-app icon container. Data-attribute based (matches the agent's\n * global rule) so the rounded app icon renders for any consumer of the shared\n * row, including surfaces that do not load `agentactivity.css`.\n */\n[data-workspace-app-icon=\"true\"] {\n display: inline-grid;\n min-width: 0;\n min-height: 0;\n place-items: center;\n overflow: hidden;\n border-radius: 22.5%;\n background: var(--workspace-app-icon-bg, transparent);\n}\n\n[data-workspace-app-icon=\"true\"] > img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n object-position: center;\n}\n\n[data-workspace-app-icon=\"true\"] > .rich-text-at-mention-kind-icon {\n display: block;\n}\n"],"mappings":";AAAA,CAAC;AACC,mBAAiB;AACjB,sBAAoB;AACpB,oBAAkB;AACpB;AAEA,CANC,0CAM0C;AACzC,WAAS;AACT,SAAO;AACP,UAAQ;AACV;AAEA,CAAC;AACC,YAAU;AACV,OAAK;AACL,SAAO;AACP,UAAQ;AACR,SAAO;AACP,UAAQ;AACR,WAAS;AACT,kBAAgB;AAChB,cAAY,QAAQ,MAAM;AAC5B;AAEA,CAAC;AACC,SAAO;AACP,cAAY;AACZ,iBAAe;AACf,cAAY,IAAI;AAChB,UAAQ;AACR,cAAY,iBAAiB,MAAM;AACnC,eAAa;AACf;AAEA,CAtBC,sCAsBsC,OACrC,CAXD;AAYC,cAAY,IAAI;AAClB;AAEA,CA3BC,sCA2BsC,CAAC;AACtC,WAAS;AACX;AAEA,CA/BC,sCA+BsC,CAAC,oBACtC,CApBD;AAqBC,cAAY,IAAI;AAChB,UAAQ;AACV;AAEA,CAAC;AACC,kBAAgB;AAChB,6BAA2B,KACzB,oBAAoB,EACpB,IAAI,OAAO,EAAE,IAAI,kBAAkB,EAAE;AAEvC,uCAAqC,KACnC,cAAc,EACd,IAAI,MAAM,EAAE;AAEd,yCAAuC,KACrC,gBAAgB,EAChB,IAAI,OAAO,EAAE;AAEf,wCAAsC,KACpC,eAAe,EACf,IAAI,OAAO,EAAE;AAEf,iCAA+B,IAAI,QAAQ,EAAE,IAAI,QAAQ,EAAE;AAC3D,iCAA+B,IAAI,QAAQ,EAAE,IAAI,QAAQ,EAAE;AAC3D,gCAA8B,KAC5B,oBAAoB,EACpB,IAAI,aAAa,EAAE,IAAI,eAAe,EAAE;AAE1C,iCAA+B,KAC7B,qBAAqB,EACrB,IAAI,cAAc,EAAE;AAEtB,iCAA+B,IAAI,cAAc,EAAE,IAAI,QAAQ,EAAE;AACjE,oCAAkC,IAAI,WAAW,EAAE;AACnD,oCAAkC,IAAI,cAAc,EAAE;AACtD,qCAAmC,IAAI,eAAe,EAAE;AACxD,qCAAmC,WACjC,GAAG,IAAI,EACP,IAAI,mCAAmC,GAAG,EAC1C;AAEF,qCAAmC,IAAI,iBAAiB,EAAE;AAC1D,qCAAmC,WACjC,GAAG,IAAI,EACP,IAAI,mCAAmC,GAAG,EAC1C;AAEF,kCAAgC;AAChC,kCAAgC,IAAI,GAAG,IAAI,IAAI,EAAE;AACnD;AAEA,CAAC;AACC,WAAS;AACT,sBAAoB,KAAK,OAAO,CAAC,EAAE,KAAK;AACxC,UAAQ;AACR,cAAY;AACZ,cAAY;AACZ,YAAU;AACV,SAAO,IAAI;AACX,aAAW;AACX,sBAAoB;AACtB;AAEA,CAAC;AACC,YAAU;AACV,WAAS;AACT,eAAa;AACf;AAEA,CAAC;AACC,eAAa;AACf;AAEA,CAAC;AACC,YAAU;AACV,cAAY;AACZ,YAAU;AACZ;AAEA,CAAC;AACC,UAAQ;AACR,cAAY;AACZ,WAAS,IAAI,IAAI;AACjB,cAAY;AACZ,uBAAqB;AACvB;AAEA,CAAC;AACD,CAAC;AACD,CAAC;AACC,WAAS;AACX;AAEA,CANC;AAOC,OAAK;AACP;AAEA,CATC;AAUD,CATC;AAUC,OAAK;AACP;AAEA,CAAC;AACC,UAAQ,EAAE,KAAK;AACf,cAAY,IAAI,MAAM,IAAI;AAC5B;AAEA,CAAC;AACD,CAAC;AACC,kBAAgB;AAChB,aAAW;AACX,eAAa;AACf;AAEA,CAPC;AAQC,SAAO,IAAI;AACb;AAEA,CAVC;AAWC,iBAAe;AACf,SAAO,IAAI;AACb;AAEA,CAAC;AACD,CAAC;AACC,cAAY;AACZ,sBAAoB;AACpB,UAAQ;AACR,cAAY;AACZ,SAAO;AACP,QAAM;AACN,UAAQ;AACR,WAAS;AACX;AAEA,CAZC;AAaC,YAAU;AACV,WAAS;AACT,eAAa;AACb,OAAK;AACL,SAAO;AACP,aAAW;AACX,cAAY;AACZ,WAAS,IAAI;AACb,YAAU;AACV,iBAAe;AACf,SAAO,IAAI;AACX,cAAY;AACZ,eAAa;AACb,cACE,iBAAiB,MAAM,IAAI,EAC3B,MAAM,MAAM;AAChB;AAEA,CA/BC,yCA+ByC,EAAE;AAC5C,CAhCC,yCAgCyC;AACxC,eAAa;AACb,kBAAgB;AAClB;AAEA,CArCC,yCAqCyC,EAAE,GAAG,KAAK,CAAC;AACnD,SAAO;AACP,UAAQ;AACV;AAEA,CA1CC,wCA0CwC,CAAC;AAC1C,CA1CC,2CA0C2C,CAAC;AAC3C,cAAY,IAAI;AAChB,SAAO,IAAI;AACb;AAEA,CAhDC,wCAgDwC;AACzC,CAhDC,2CAgD2C;AAC1C,cAAY,IAAI;AAClB;AAEA,CApDC;AAqDC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO;AACP,WAAS,IAAI;AACb,iBAAe;AACf,SAAO,IAAI;AACX,aAAW;AACX,eAAa;AACb,cACE,iBAAiB,MAAM,IAAI,EAC3B,MAAM,MAAM;AAChB;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,cAAY;AACZ,UAAQ;AACR,WAAS,KAAK;AACd,SAAO,IAAI;AACX,aAAW;AACX,cAAY;AACd;AAEA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,eAAa;AACb,mBAAiB;AACjB,OAAK;AACL,aAAW;AACb;AAEA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,SAAO,IAAI;AACb;AAEA,CAAC;AACC,SAAO,IAAI;AACX,eAAa;AACf;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK;AACL,cAAY;AACZ,kBAAgB;AAChB,iBAAe;AACf,SAAO,IAAI;AACX,aAAW;AACb;AAEA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,UAAQ,IAAI,MAAM,UAAU,GAAG,IAAI,EAAE,aAAa,GAAG,EAAE;AACvD,oBAAkB;AAClB,iBAAe;AACf,aAAW,0BAA0B,MAAM,OAAO;AACpD;AAEA,WAHa;AAIX;AACE,eAAW,OAAO;AACpB;AACF;AAEA,CAAC,kBAAkB,CAAC;AAClB,UAAQ;AACR,WAAS,IAAI,KAAK;AACpB;AAEA,CA1PC,6BA0P6B,CAAC;AAC7B,YAAU;AACV,cAAY;AACZ,aAAW;AACX,UAAQ;AACR,kBAAgB;AAChB,iBAAe,IAAI,MAAM,IAAI;AAC/B;AAEA,CAnQC,6BAmQ6B,CAAC;AAC7B,UAAQ;AACR,cAAY;AACZ,cAAY;AACZ,mBAAiB;AACnB;AAEA,CA1QC,6BA2QC,CAAC,kCAAoC;AACrC,WAAS;AACX;AAEA,CA/QC,6BA+Q6B,CAAC,mCAAqC,EAAE;AACpE,YAAU;AACV,WAAS;AACT,eAAa;AACb,OAAK;AACL,SAAO;AACP,aAAW;AACX,UAAQ;AACR,kBAAgB;AAClB;AAEA,CA1RC,6BA0R6B,CAAC;AAC7B,cAAY;AACZ,YAAU;AACV,WAAS;AACT,eAAa;AACb,eAAa;AACb,OAAK;AACL,UAAQ;AACR,WAAS;AACT,UAAQ;AACR,cAAY;AACZ,SAAO,IAAI;AACX,QAAM;AACN,aAAW;AACX,eAAa;AACb,eAAa;AACb,eAAa;AACb,UAAQ;AACR,cAAY,MAAM,MAAM;AAC1B;AAEA,CA/SC,6BA+S6B,CAAC,6BAA+B;AAC9D,CAhTC,6BAgT6B,CAAC,6BAA+B;AAC5D,SAAO,IAAI;AACX,WAAS;AACX;AAEA,CArTC,6BAsTC,CAAC,6BAA+B,CAAC;AACjC,SAAO,IAAI;AACb;AAEA,CA1TC,6BA0T6B,CAAC;AAC7B,YAAU;AACV,UAAQ;AACR,QAAM;AACN,WAAS;AACT,UAAQ;AACR,iBAAe;AACf,cAAY,IAAI;AAChB,cACE,UAAU,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAC5C,MAAM,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AAC1C;AAEA,CAvUC,6BAuU6B,CAAC;AAC/B,CAxUC,6BAwU6B,CAAC;AAC7B,cAAY;AACZ,kBAAgB;AAChB,YAAU;AACV,OAAK;AACL,WAAS;AACT,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO;AACP,UAAQ;AACR,WAAS;AACT,UAAQ;AACR,iBAAe;AACf,cAAY,IAAI;AAChB,SAAO,IAAI;AACX,WAAS;AACT,cAAY,EAAE,IAAI,KAAK,IAAI,GAAG,GAAG,GAAG,EAAE;AACtC,aAAW,WAAW,MAAM,MAAM;AAClC;AAAA,IACE,QAAQ,MAAM,IAAI;AAAA,IAClB,UAAU,MAAM,IAAI;AAAA,IACpB,iBAAiB,MAAM,IAAI;AAAA,IAC3B,MAAM,MAAM;AAChB;AAEA,CAlWC,6BAkW6B,CAAC;AAC7B,QAAM;AACR;AAEA,CAtWC,6BAsW6B,CAAC;AAC7B,SAAO;AACT;AAEA,CA1WC,4BA0W4B,OAC3B,CAAC,qCAAuC,CAAC;AAC3C,CA5WC,4BA4W4B,OAC3B,CAAC,sCAAwC,CAAC;AAC5C,CA9WC,4BA8W4B,cAC3B,CAAC,qCAAuC,CAAC;AAC3C,CAhXC,4BAgX4B,cAC3B,CAAC,sCAAwC,CAAC;AAC1C,kBAAgB;AAChB,WAAS;AACT,aAAW,WAAW,MAAM,MAAM;AACpC;AAEA,CAAC;AACC,WAAS,IAAI,EAAE;AACjB;AAEA,CAAC;AACC,cAAY;AACZ,cAAY,IAAI,MAAM,IAAI,QAAQ,EAAE,IAAI;AACxC,cAAY,IAAI,oBAAoB,EAAE,IAAI;AAC5C;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,OAAK;AACL,SAAO;AACP,UAAQ;AACR,WAAS,EAAE,KAAK;AAChB,SAAO,IAAI;AACX,aAAW;AACX,eAAa;AACb,eAAa;AACb,kBAAgB;AAClB;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK;AACL,eAAa;AACf;AAEA,CAAC;AACD,CAAC;AACC,cAAY;AACZ,UAAQ;AACR,QAAM;AACN,UAAQ;AACV;AAEA,CARC;AASC,WAAS;AACT,cAAY;AACZ,SAAO;AACT;AAEA,CAdC,yCAcyC,EAAE,IAAI;AAChD,CAtBC,uCAsBuC,EAAE,IAAI;AAC5C,SAAO,IAAI;AACb;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,UAAQ;AACR,aAAW;AACX,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe;AACf,cAAY,IAAI;AAChB,SAAO,IAAI;AACX,cAAY,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACvC,aAAW;AACX,eAAa;AACb,eAAa;AACb,WAAS,IAAI;AACf;AAEA,CApCC,wCAoCwC,OACvC,CAlBD;AAmBD,CAtCC,wCAsCwC,eACvC,CApBD;AAqBD,CAvCC,4CAuC4C;AAC7C,CAxCC,4CAwC4C;AAC3C,gBAAc,IAAI;AAClB,cAAY,IAAI;AAClB;AAEA,CA9CC,wCA8CwC;AACzC,CA9CC,4CA8C4C;AAC3C,WAAS,IAAI,MAAM,IAAI;AACvB,kBAAgB;AAClB;AAEA,CAAC;AACC,SAAO;AACP,aAAW;AACX,aAAW;AACX,eAAa;AACb,WAAS;AACX;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK;AACP;AAEA,CAAC;AACC,SAAO,IAAI;AACb;AAEA,CA7dC,4BA6d4B,OAC3B,CAngBD,sCAmgBwC,CAAC;AACxC,WAAS;AACX;AAEA,CAleC;AAmeC,kCAAgC;AAClC;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK;AACL,aAAW;AACX,SAAO;AACP,YAAU;AACZ;AAEA,CAAC;AACC,WAAS;AACT,yBAAuB,OAAO,CAAC,EAAE,KAAK;AACtC,OAAK;AACP;AAEA,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACvC,QAAM,EAAE,EAAE;AACZ;AAEA,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACC,WAAS;AACT,aAAW;AACX,YAAU;AACZ;AAEA,CATC;AAUC,eAAa;AACb,OAAK;AACP;AAEA,CAbC;AAcC,eAAa;AACb,OAAK;AACP;AAEA,CAjBC;AAkBD,CAjBC;AAkBC,eAAa;AACb,OAAK;AACP;AAEA,CAtBC;AAuBC,QAAM,EAAE,EAAE;AACZ;AAEA,CAjCyC;AAkCvC,WAAS;AACT,OAAK;AACL,aAAW;AACX,YAAU;AACZ;AAEA,CAAC;AACC,QAAM,EAAE,EAAE;AACZ;AAEA,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACD,CAAC;AACC,aAAW;AACX,YAAU;AACV,iBAAe;AACf,eAAa;AACb,aAAW;AACb;AAEA,CAfC;AAgBD,CAfC;AAgBD,CAfC;AAgBD,CAZC;AAaC,SAAO,IAAI;AACX,eAAa;AACf;AAEA,CAvBC;AAwBD,CAvBC;AAwBC,QAAM,EAAE,EAAE;AACZ;AAEA,CA3BC;AA4BC,aAAW;AACX,eAAa;AACf;AAEA,CA9BC;AA+BD,CA9BC;AA+BD,CA9BC;AA+BD,CA7BC;AA8BC,SAAO,IAAI;AACX,eAAa;AACf;AAEA,CArCC;AAsCC,QAAM,EAAE,EAAE;AACZ;AAEA,CAxCC;AAyCC,eAAa;AACf;AAEA,CA/CC;AAgDD,CA5CC;AA6CD,CA5CC;AA6CC,eAAa;AACf;AAEA,CAAC;AACC,WAAS;AACT,SAAO;AACP,UAAQ;AACR,cAAY;AACd;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,SAAO;AACP,UAAQ;AACR,eAAa;AACb,QAAM,EAAE,EAAE;AACV,iBAAe;AACf,SAAO,IAAI;AACX,UAAQ;AACR,cACE,iBAAiB,MAAM,IAAI,EAC3B,MAAM,MAAM;AAChB;AAEA,CAfC,yCAeyC;AACxC,cAAY,IAAI;AAChB,SAAO,IAAI;AACb;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,SAAO,IAAI;AACb;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,SAAO;AACP,UAAQ;AACR,QAAM,EAAE,EAAE;AACV,YAAU;AACV,iBAAe;AACf,cAAY,IAAI,UAAU,EAAE,IAAI,OAAO,EAAE;AACzC,SAAO,IAAI;AACb;AAEA,CAAC;AACC,SAAO;AACP,UAAQ;AACV;AAEA,CAAC;AACC,YAAU;AACV,aAAW;AACX,WAAS;AACT,SAAO;AACP,UAAQ;AACR,QAAM,EAAE,EAAE;AACZ;AAEA,CAAC;AACC,SAAO;AACP,QAAM,EAAE,EAAE;AACZ;AAEA,CALC,8CAMC,CAAC;AACD,QAAM;AACR;AAEA,CAAC;AACC,YAAU;AACV,OAAK;AACL,WAAS;AACT,SAAO;AACP,UAAQ;AACR,YAAU;AACV,iBAAe;AACf,cAAY,IAAI,UAAU,EAAE,IAAI,OAAO,EAAE;AAC3C;AAEA,CAAC;AACC,QAAM;AACN,WAAS;AACX;AAEA,CApBG;AAqBD,QAAM;AACN,WAAS;AACX;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,eAAa;AACb,OAAK;AACL,aAAW;AACX,SAAO;AACP,YAAU;AACV,UAAQ,IAAI,MAAM;AAClB,eAAa;AACf;AAEA,CAbC,2BAa2B,CAAC;AAC3B,cAAY,IAAI;AAChB,SAAO,IAAI;AACb;AAEA,CAlBC,2BAkB2B,CAAC;AAC3B,cAAY,IAAI;AAChB,SAAO,IAAI;AACb;AAEA,CAvBC,2BAuB2B,CAAC;AAC3B,cAAY,IAAI;AAChB,SAAO,IAAI;AACb;AAEA,CA5BC,2BA4B2B,CAAC;AAC3B,cAAY,UACV,GAAG,IAAI,EACP,IAAI,+BAA+B,GAAG,EACtC;AAEF,SAAO,IAAI;AACb;AAEA,CArCC,2BAqC2B,CAAC;AAC3B,cAAY,IAAI;AAChB,SAAO,IAAI;AACb;AAEA,CA1CC,2BA0C2B,CAAC;AAC3B,cAAY,IAAI;AAChB,SAAO,IAAI;AACb;AAEA,CAAC;AACC,kBAAgB;AAChB,cAAY;AACd;AAEA,CALC,qCAKqC,CAAC;AACrC,cAAY;AACd;AAEA,CAxDC,4BAwD4B,CAAC;AAC5B,WAAS;AACT,SAAO;AACP,UAAQ;AACR,QAAM,EAAE,EAAE;AACV,iBAAe;AACf,cAAY;AACd;AAEA,CAjEC,4BAiE4B,CAAC,qBAAuB,CAAC;AACpD,aAAW,2BAA2B,KAAK,YAAY;AACzD;AAEA,WAHa;AAIX;AACE,aAAS;AACX;AACF;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,SAAO;AACP,UAAQ;AACR,QAAM,EAAE,EAAE;AACV,UAAQ,IAAI,MAAM,IAAI,QAAQ,EAAE,IAAI;AACpC,iBAAe;AACf,cAAY;AACZ,SAAO;AACT;AAEA,CAZC,qCAYqC,CAAC;AACrC,gBAAc;AACd,cAAY;AACZ,SAAO;AACT;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,OAAK;AACL,WAAS,IAAI;AACb,cAAY,IAAI,MAAM,IAAI,QAAQ,EAAE,IAAI;AACxC,cAAY,IAAI,OAAO,EAAE,IAAI;AAC/B;AAEA,CAAC;AACC,SAAO,IAAI;AACX,aAAW;AACX,eAAa;AACf;AAEA,CAAC;AACC,WAAS;AACT,OAAK;AACP;AAEA,CAAC;AACC,cAAY;AACZ,UAAQ;AACR,kBAAgB;AAChB,iBAAe;AACf,QAAM;AACN,aAAW;AACX,eAAa;AACb,UAAQ;AACV;AAEA,CAAC;AACC,UAAQ,IAAI,MAAM,IAAI,QAAQ,EAAE,IAAI;AACpC,cAAY;AACZ,SAAO,IAAI,MAAM,EAAE,IAAI;AACzB;AAEA,CAAC;AACC,UAAQ;AACR,cAAY;AACZ,SAAO;AACT;AAEA,CAvBC,+CAuB+C;AAC9C,WAAS;AACT,UAAQ;AACV;AASA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO,IAAI,8BAA8B,EAAE;AAC3C,UAAQ,IAAI,8BAA8B,EAAE;AAC5C,QAAM,EAAE,EAAE,IAAI,8BAA8B,EAAE;AAC9C,YAAU;AACV,iBAAe;AACf,oBAAkB,IAAI,UAAU,EAAE,IAAI;AACtC,kBAAgB;AAClB;AAEA,CAbC,gCAagC;AAC/B,WAAS;AACT,SAAO;AACP,UAAQ;AACR,cAAY;AACd;AAUA,CAAC;AACC,SAAO,IAAI,8BAA8B,EAAE;AAC3C,UAAQ,IAAI,8BAA8B,EAAE;AAC5C,QAAM,EAAE,EAAE,IAAI,8BAA8B,EAAE;AAC9C,oBAAkB,IAAI;AACtB,iBAAe;AACjB;AAGA,CAAC;AACC,WAAS;AACT,SAAO;AACP,UAAQ;AACR,QAAM,EAAE,EAAE;AACV,oBAAkB;AAClB,iBAAe;AACjB;AAGA,CAAC;AACC,oBAAkB,IAAI;AACxB;AAOA,CAAC;AACC,WAAS;AACT,aAAW;AACX,cAAY;AACZ,eAAa;AACb,YAAU;AACV,iBAAe;AACf,cAAY,IAAI,uBAAuB,EAAE;AAC3C;AAEA,CAAC,8BAAgC,EAAE;AACjC,WAAS;AACT,SAAO;AACP,UAAQ;AACR,cAAY;AACZ,mBAAiB;AACnB;AAEA,CAAC,8BAAgC,EAAE,CArClC;AAsCC,WAAS;AACX;","names":[]}
@@ -15,7 +15,7 @@ import {
15
15
  resolveMentionFileThumbnailUrl,
16
16
  resolveMentionFileVisualKind,
17
17
  selectedMentionPaletteItem
18
- } from "../chunk-DWBETNOQ.js";
18
+ } from "../chunk-HMAUQU6Q.js";
19
19
 
20
20
  // src/at-panel/MentionPalette.tsx
21
21
  import {
@@ -1516,7 +1516,7 @@ function MentionStatusBadge({
1516
1516
  /* @__PURE__ */ jsx5(
1517
1517
  StatusDot,
1518
1518
  {
1519
- tone: statusTag.tone,
1519
+ tone: statusTag.tone === "purple" ? "neutral" : statusTag.tone,
1520
1520
  pulse: statusTag.pulse ?? false,
1521
1521
  size: "xs",
1522
1522
  title: statusTag.label
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/at-panel/MentionPalette.tsx","../../src/at-panel/mentionPaletteScrollbar.tsx","../../src/at-panel/mentionPaletteStateAdapter.ts","../../src/at-panel/MentionPaletteFromState.tsx","../../src/at-panel/MentionPaletteControls.tsx","../../src/at-panel/MentionRow.tsx","../../src/at-panel/mentionRowDataAttributes.ts","../../src/at-panel/mentionReferenceIcon.ts","../../src/at-panel/mentionTriggerRowItem.ts","../../src/at-panel/useAtPanelKeyboard.ts"],"sourcesContent":["import {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type JSX,\n type MutableRefObject,\n type ReactNode\n} from \"react\";\nimport {\n FolderFailedFilledIcon,\n KeyboardFilledIcon\n} from \"@tutti-os/ui-system/icons\";\nimport { UnderlineTabs } from \"@tutti-os/ui-system/components\";\nimport { cn } from \"@tutti-os/ui-system/utils\";\nimport { flattenMentionPaletteEntries } from \"./mentionPaletteEntries.ts\";\nimport { MentionPaletteScrollbar } from \"./mentionPaletteScrollbar.tsx\";\nimport type {\n MentionPaletteGroup,\n MentionPaletteProps,\n MentionPaletteState,\n MentionPaletteTheme\n} from \"./mentionPaletteTypes.ts\";\nimport \"./mentionPalette.css\";\n\nconst DEFAULT_THEME = {\n classNames: {\n palette: \"rich-text-at-mention-palette\",\n header: \"rich-text-at-mention-palette-header\",\n footer: \"rich-text-at-mention-palette-footer\",\n tabs: \"rich-text-at-mention-palette-tabs\",\n scrollRegion: \"rich-text-at-mention-palette-scroll-region\",\n scrollbar: \"rich-text-at-mention-palette-scrollbar\",\n scrollbarThumb: \"rich-text-at-mention-palette-scrollbar-thumb\",\n hint: \"rich-text-at-mention-palette-hint\",\n hintItem: \"rich-text-at-mention-palette-hint-item\",\n hintButton: \"rich-text-at-mention-palette-hint-button\",\n hintSeparator: \"rich-text-at-mention-palette-hint-separator\",\n shortcut: \"rich-text-at-mention-palette-shortcut\",\n shortcutArrow: \"rich-text-at-mention-palette-shortcut--arrow\",\n shortcutButton: \"rich-text-at-mention-palette-shortcut-button\",\n shortcutGroup: \"rich-text-at-mention-palette-shortcut-group\"\n },\n testIds: {\n emptyState: \"rich-text-at-mention-palette-empty-state\",\n hint: \"rich-text-at-mention-palette-hint\",\n scrollbar: \"rich-text-at-mention-palette-scrollbar\",\n loadingSpinner: \"rich-text-at-mention-loading-spinner\"\n },\n groupDividerAttribute: \"data-rich-text-at-mention-group-divider\"\n} as const;\n\ninterface ResolvedMentionPaletteTheme {\n classNames: Required<NonNullable<MentionPaletteTheme[\"classNames\"]>>;\n testIds: Required<NonNullable<MentionPaletteTheme[\"testIds\"]>>;\n groupDividerAttribute: string;\n}\n\nfunction resolveMentionPaletteTheme(\n theme: MentionPaletteTheme | undefined\n): ResolvedMentionPaletteTheme {\n return {\n classNames: { ...DEFAULT_THEME.classNames, ...theme?.classNames },\n testIds: { ...DEFAULT_THEME.testIds, ...theme?.testIds },\n groupDividerAttribute:\n theme?.groupDividerAttribute ?? DEFAULT_THEME.groupDividerAttribute\n };\n}\n\nfunction mentionPaletteRootClassName(\n theme: ResolvedMentionPaletteTheme\n): string {\n return cn(\n DEFAULT_THEME.classNames.palette,\n theme.classNames.palette,\n paletteStyles.palette\n );\n}\n\nconst paletteStyles = {\n palette: \"rich-text-at-mention-palette__shell\",\n header: \"rich-text-at-mention-palette__header\",\n footer: \"rich-text-at-mention-palette__footer\",\n scrollShell: \"rich-text-at-mention-palette__scroll-shell\",\n scrollBody: \"rich-text-at-mention-palette__scroll-body\",\n groups: \"rich-text-at-mention-palette__groups\",\n group: \"rich-text-at-mention-palette__group\",\n groupDivider: \"rich-text-at-mention-palette__group-divider\",\n groupLabel: \"rich-text-at-mention-palette__group-label\",\n groupItems: \"rich-text-at-mention-palette__group-items\",\n groupEmpty: \"rich-text-at-mention-palette__group-empty\",\n rowButton: \"rich-text-at-mention-palette__row-button\",\n expandButton: \"rich-text-at-mention-palette__expand-button\",\n emptyState: \"rich-text-at-mention-palette__empty-state\",\n emptyStateInner: \"rich-text-at-mention-palette__empty-state-inner\",\n emptyStateIcon: \"rich-text-at-mention-palette__empty-state-icon\",\n emptyStateText: \"rich-text-at-mention-palette__empty-state-text\",\n loading: \"rich-text-at-mention-palette__loading\",\n loadingSpinner: \"rich-text-at-mention-palette__loading-spinner\"\n} as const;\n\nconst MENTION_PALETTE_LOADING_MIN_VISIBLE_MS = 320;\n\nexport function MentionPalette<TItem>(\n props: MentionPaletteProps<TItem>\n): JSX.Element {\n \"use memo\";\n const {\n state,\n highlightedKey,\n getItemKey,\n renderItem,\n labels,\n hintLabels,\n maxHeightPx,\n onHighlightChange,\n onSelectItem,\n onSelectCategory,\n onSelectFilter,\n onExpandGroup,\n onCycleFilter,\n onMoveSelection,\n onNavigateHierarchy,\n renderListFooter,\n loadingBanner,\n scrollHighlightedIntoViewCentered = false,\n theme: themeProp\n } = props;\n const theme = resolveMentionPaletteTheme(themeProp);\n\n const highlightedOptionRef = useRef<HTMLButtonElement | null>(null);\n const scrollBodyRef = useRef<HTMLDivElement | null>(null);\n const loadingVisibleUntilRef = useRef(0);\n const loadingHideTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const [loadingIndicatorVisible, setLoadingIndicatorVisible] = useState(\n state.status === \"loading\"\n );\n\n const interactiveEntries = flattenMentionPaletteEntries(\n state,\n (item, groupId) => getItemKey(item, findGroup(state.groups, groupId))\n );\n const hasInteractiveEntries = interactiveEntries.some(\n (entry) => entry.type === \"item\" || entry.type === \"expand\"\n );\n\n const showLoadingState =\n loadingIndicatorVisible &&\n (!hasInteractiveEntries || state.mode === \"browse\");\n const showLoadingBanner =\n Boolean(loadingBanner) &&\n loadingIndicatorVisible &&\n hasInteractiveEntries &&\n state.mode === \"results\";\n\n useEffect(() => {\n const highlightedElement = highlightedOptionRef.current;\n if (!highlightedElement) {\n return;\n }\n const scrollContainer = scrollBodyRef.current;\n if (!scrollContainer || !scrollContainer.contains(highlightedElement)) {\n highlightedElement.scrollIntoView({ block: \"nearest\" });\n return;\n }\n if (scrollHighlightedIntoViewCentered) {\n centerElementInScrollContainer(scrollContainer, highlightedElement);\n return;\n }\n scrollElementIntoScrollContainerNearest(\n scrollContainer,\n highlightedElement\n );\n }, [highlightedKey, scrollHighlightedIntoViewCentered]);\n\n useEffect(() => {\n if (loadingHideTimerRef.current !== null) {\n clearTimeout(loadingHideTimerRef.current);\n loadingHideTimerRef.current = null;\n }\n\n if (state.status === \"loading\") {\n loadingVisibleUntilRef.current =\n Date.now() + MENTION_PALETTE_LOADING_MIN_VISIBLE_MS;\n setLoadingIndicatorVisible(true);\n return;\n }\n\n const remainingMs = loadingVisibleUntilRef.current - Date.now();\n if (remainingMs <= 0) {\n setLoadingIndicatorVisible(false);\n return;\n }\n\n loadingHideTimerRef.current = setTimeout(() => {\n loadingHideTimerRef.current = null;\n setLoadingIndicatorVisible(false);\n }, remainingMs);\n\n return () => {\n if (loadingHideTimerRef.current !== null) {\n clearTimeout(loadingHideTimerRef.current);\n loadingHideTimerRef.current = null;\n }\n };\n }, [state.status]);\n\n const paletteMaxHeightStyle: CSSProperties | undefined =\n maxHeightPx > 0 ? { maxHeight: `${maxHeightPx}px` } : undefined;\n\n if (state.status === \"error\") {\n return (\n <div\n className={mentionPaletteRootClassName(theme)}\n style={paletteMaxHeightStyle}\n role=\"listbox\"\n aria-label={labels.listbox ?? labels.tabHint}\n >\n <MentionPaletteEmptyState\n icon=\"folder-failed\"\n label={labels.error}\n testId={theme.testIds.emptyState}\n />\n </div>\n );\n }\n\n const isBrowse = state.mode === \"browse\";\n\n let body: ReactNode;\n if (showLoadingState) {\n body = (\n <MentionPaletteLoading\n label={labels.loading}\n spinnerTestId={theme.testIds.loadingSpinner}\n />\n );\n } else if (state.groups.length === 0) {\n body = (\n <MentionPaletteEmptyState\n icon={isBrowse ? \"keyboard\" : \"folder-failed\"}\n label={labels.empty}\n testId={theme.testIds.emptyState}\n />\n );\n } else {\n body = (\n <MentionPaletteGroups\n state={state}\n highlightedKey={highlightedKey}\n highlightedOptionRef={highlightedOptionRef}\n getItemKey={getItemKey}\n renderItem={renderItem}\n onHighlightChange={onHighlightChange}\n onSelectItem={onSelectItem}\n onExpandGroup={onExpandGroup}\n renderListFooter={renderListFooter}\n groupDividerAttribute={theme.groupDividerAttribute}\n />\n );\n }\n\n return (\n <div\n className={mentionPaletteRootClassName(theme)}\n style={paletteMaxHeightStyle}\n role=\"listbox\"\n aria-label={labels.listbox ?? labels.tabHint}\n >\n <div className={cn(theme.classNames.header, paletteStyles.header)}>\n <UnderlineTabs\n tabs={state.categories.map((category) => ({\n value: category.id,\n label: category.label\n }))}\n value={state.filter}\n onValueChange={isBrowse ? onSelectCategory : onSelectFilter}\n className={theme.classNames.tabs}\n preventMouseDownDefault\n />\n {showLoadingBanner ? loadingBanner : null}\n </div>\n <div className={paletteStyles.scrollShell}>\n <div\n ref={scrollBodyRef}\n className={cn(\n theme.classNames.scrollRegion,\n paletteStyles.scrollBody\n )}\n >\n {body}\n </div>\n <MentionPaletteScrollbar\n scrollBodyRef={scrollBodyRef}\n className={theme.classNames.scrollbar}\n thumbClassName={theme.classNames.scrollbarThumb}\n testId={theme.testIds.scrollbar}\n />\n </div>\n <div className={cn(theme.classNames.footer, paletteStyles.footer)}>\n <MentionPaletteHint\n ariaLabel={labels.tabHint}\n cycleFilterLabel={hintLabels.cycleFilter}\n moveSelectionLabel={hintLabels.moveSelection}\n navigateHierarchyLabel={hintLabels.navigateHierarchy}\n onCycleFilter={onCycleFilter}\n onMoveSelection={onMoveSelection}\n onNavigateHierarchy={onNavigateHierarchy}\n classNames={theme.classNames}\n testId={theme.testIds.hint}\n />\n </div>\n </div>\n );\n}\n\nfunction centerElementInScrollContainer(\n container: HTMLElement,\n element: HTMLElement\n): void {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n const currentScrollTop = container.scrollTop;\n const elementTop = elementRect.top - containerRect.top + currentScrollTop;\n const centeredScrollTop =\n elementTop - (container.clientHeight - elementRect.height) / 2;\n const maxScrollTop = Math.max(\n 0,\n container.scrollHeight - container.clientHeight\n );\n const nextScrollTop = Math.min(Math.max(0, centeredScrollTop), maxScrollTop);\n container.scrollTo({ top: nextScrollTop, behavior: \"auto\" });\n}\n\nfunction scrollElementIntoScrollContainerNearest(\n container: HTMLElement,\n element: HTMLElement\n): void {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n let nextScrollTop = container.scrollTop;\n\n if (elementRect.top < containerRect.top) {\n nextScrollTop -= containerRect.top - elementRect.top;\n } else if (elementRect.bottom > containerRect.bottom) {\n nextScrollTop += elementRect.bottom - containerRect.bottom;\n } else {\n return;\n }\n\n const maxScrollTop = Math.max(\n 0,\n container.scrollHeight - container.clientHeight\n );\n container.scrollTo({\n top: Math.min(Math.max(0, nextScrollTop), maxScrollTop),\n behavior: \"auto\"\n });\n}\n\nfunction findGroup<TItem>(\n groups: MentionPaletteState<TItem>[\"groups\"],\n groupId: string\n): MentionPaletteGroup<TItem> {\n const group = groups.find((candidate) => candidate.id === groupId);\n if (!group) {\n throw new Error(`MentionPalette: unknown group id \"${groupId}\"`);\n }\n return group;\n}\n\nfunction MentionPaletteGroups<TItem>({\n state,\n highlightedKey,\n highlightedOptionRef,\n getItemKey,\n renderItem,\n onHighlightChange,\n onSelectItem,\n onExpandGroup,\n renderListFooter,\n groupDividerAttribute\n}: {\n state: MentionPaletteState<TItem>;\n highlightedKey: string | null;\n highlightedOptionRef: MutableRefObject<HTMLButtonElement | null>;\n getItemKey: (item: TItem, group: MentionPaletteGroup<TItem>) => string;\n renderItem: (item: TItem, ctx: { active: boolean }) => ReactNode;\n onHighlightChange: (key: string) => void;\n onSelectItem: (item: TItem, group: MentionPaletteGroup<TItem>) => void;\n onExpandGroup: (groupId: string) => void;\n renderListFooter?: () => ReactNode;\n groupDividerAttribute: string;\n}): JSX.Element {\n return (\n <div className={paletteStyles.groups}>\n {state.groups.map((group, index) => {\n const showGroupDivider = index > 0 && !group.hideTopDivider;\n return (\n <section\n key={group.id}\n className={cn(paletteStyles.group, group.sectionClassName)}\n >\n {showGroupDivider ? (\n <div\n className={paletteStyles.groupDivider}\n {...{ [groupDividerAttribute]: \"true\" }}\n aria-hidden=\"true\"\n />\n ) : null}\n {group.label ? (\n <div className={paletteStyles.groupLabel}>{group.label}</div>\n ) : null}\n <div className={paletteStyles.groupItems}>\n {group.items.length === 0 && group.emptyLabel ? (\n <div className={paletteStyles.groupEmpty}>\n {group.emptyLabel}\n </div>\n ) : null}\n {group.items.map((item) => {\n const entryKey = `${group.id}:${getItemKey(item, group)}`;\n const isHighlighted = entryKey === highlightedKey;\n return (\n <button\n key={entryKey}\n ref={isHighlighted ? highlightedOptionRef : null}\n type=\"button\"\n className={paletteStyles.rowButton}\n role=\"option\"\n aria-selected={isHighlighted}\n data-highlighted={isHighlighted ? \"\" : undefined}\n onPointerMove={() => {\n if (!isHighlighted) {\n onHighlightChange(entryKey);\n }\n }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onSelectItem(item, group)}\n >\n {renderItem(item, { active: isHighlighted })}\n </button>\n );\n })}\n {group.hasMore ? (\n <button\n key={`expand:${group.id}`}\n ref={\n `expand:${group.id}` === highlightedKey\n ? highlightedOptionRef\n : null\n }\n type=\"button\"\n className={paletteStyles.expandButton}\n data-highlighted={\n `expand:${group.id}` === highlightedKey ? \"\" : undefined\n }\n onPointerMove={() => {\n if (`expand:${group.id}` !== highlightedKey) {\n onHighlightChange(`expand:${group.id}`);\n }\n }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onExpandGroup(group.id)}\n >\n {group.expandLabel ??\n `+${Math.max(0, group.totalCount - group.visibleCount)}`}\n </button>\n ) : null}\n </div>\n </section>\n );\n })}\n {renderListFooter?.()}\n </div>\n );\n}\n\nfunction MentionPaletteEmptyState({\n icon = \"folder-failed\",\n label,\n testId\n}: {\n icon?: \"folder-failed\" | \"keyboard\";\n label: string;\n testId: string;\n}): JSX.Element {\n \"use memo\";\n const EmptyStateIcon =\n icon === \"keyboard\" ? KeyboardFilledIcon : FolderFailedFilledIcon;\n\n return (\n <div\n className={paletteStyles.emptyState}\n data-empty-state-icon={icon}\n data-testid={testId}\n >\n <div className={paletteStyles.emptyStateInner}>\n <EmptyStateIcon\n className={paletteStyles.emptyStateIcon}\n aria-hidden=\"true\"\n />\n <span className={paletteStyles.emptyStateText}>{label}</span>\n </div>\n </div>\n );\n}\n\nfunction MentionPaletteLoading({\n label,\n spinnerTestId\n}: {\n label: string;\n spinnerTestId: string;\n}): JSX.Element {\n \"use memo\";\n return (\n <div className={paletteStyles.loading}>\n <span\n aria-hidden=\"true\"\n className={paletteStyles.loadingSpinner}\n data-testid={spinnerTestId}\n />\n <span>{label}</span>\n </div>\n );\n}\n\nfunction MentionPaletteHint({\n ariaLabel,\n cycleFilterLabel,\n moveSelectionLabel,\n navigateHierarchyLabel,\n onCycleFilter,\n onMoveSelection,\n onNavigateHierarchy,\n classNames,\n testId\n}: {\n ariaLabel: string;\n cycleFilterLabel: string;\n moveSelectionLabel: string;\n navigateHierarchyLabel?: string;\n onCycleFilter: (delta: 1 | -1) => void;\n onMoveSelection: (delta: 1 | -1) => void;\n onNavigateHierarchy?: (delta: 1 | -1) => void;\n classNames: ResolvedMentionPaletteTheme[\"classNames\"];\n testId: string;\n}): JSX.Element {\n \"use memo\";\n const showHierarchyHints = Boolean(\n navigateHierarchyLabel && onNavigateHierarchy\n );\n return (\n <div\n className={classNames.hint}\n aria-label={ariaLabel}\n data-testid={testId}\n >\n <span className={classNames.hintItem}>\n <span className={classNames.shortcutGroup}>\n <button\n className={cn(classNames.shortcut, classNames.shortcutButton)}\n type=\"button\"\n aria-label={`Tab ${cycleFilterLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onCycleFilter(1)}\n >\n {/* i18n-check-ignore: Keyboard key label. */}\n Tab\n </button>\n {!showHierarchyHints ? (\n <>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`← ${cycleFilterLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onCycleFilter(-1)}\n >\n ←\n </button>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`→ ${cycleFilterLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onCycleFilter(1)}\n >\n →\n </button>\n </>\n ) : null}\n </span>\n <span>{cycleFilterLabel}</span>\n </span>\n {showHierarchyHints ? (\n <>\n <span className={classNames.hintSeparator} aria-hidden=\"true\">\n |\n </span>\n <span className={classNames.hintItem}>\n <span className={classNames.shortcutGroup}>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`← ${navigateHierarchyLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onNavigateHierarchy?.(-1)}\n >\n ←\n </button>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`→ ${navigateHierarchyLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onNavigateHierarchy?.(1)}\n >\n →\n </button>\n </span>\n <span>{navigateHierarchyLabel}</span>\n </span>\n </>\n ) : null}\n <span className={classNames.hintSeparator} aria-hidden=\"true\">\n |\n </span>\n <span className={classNames.hintItem}>\n <span className={classNames.shortcutGroup}>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`↑ ${moveSelectionLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onMoveSelection(-1)}\n >\n ↑\n </button>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`↓ ${moveSelectionLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onMoveSelection(1)}\n >\n ↓\n </button>\n </span>\n <span>{moveSelectionLabel}</span>\n </span>\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type JSX,\n type MouseEvent as ReactMouseEvent,\n type RefObject\n} from \"react\";\nimport { cn } from \"@tutti-os/ui-system/utils\";\n\ninterface MentionPaletteScrollbarState {\n scrollable: boolean;\n thumbHeight: number;\n thumbTop: number;\n}\n\ninterface MentionPaletteScrollbarDragState {\n maxScrollTop: number;\n maxThumbTop: number;\n startClientY: number;\n startScrollTop: number;\n}\n\nconst MENTION_PALETTE_SCROLLBAR_MIN_THUMB_HEIGHT = 24;\nconst MENTION_PALETTE_SCROLLBAR_HIDDEN_STATE: MentionPaletteScrollbarState = {\n scrollable: false,\n thumbHeight: 0,\n thumbTop: 0\n};\n\nexport function MentionPaletteScrollbar({\n scrollBodyRef,\n className,\n thumbClassName,\n testId\n}: {\n scrollBodyRef: RefObject<HTMLDivElement | null>;\n className: string;\n thumbClassName: string;\n testId: string;\n}): JSX.Element {\n \"use memo\";\n const trackRef = useRef<HTMLDivElement | null>(null);\n const dragStateRef = useRef<MentionPaletteScrollbarDragState | null>(null);\n const [scrollbarState, setScrollbarState] =\n useState<MentionPaletteScrollbarState>({\n scrollable: false,\n thumbHeight: 0,\n thumbTop: 0\n });\n const [dragging, setDragging] = useState(false);\n\n const hideScrollbar = useCallback((): void => {\n setScrollbarState((previous) =>\n previous.scrollable ||\n previous.thumbHeight !== 0 ||\n previous.thumbTop !== 0\n ? MENTION_PALETTE_SCROLLBAR_HIDDEN_STATE\n : previous\n );\n }, []);\n\n const syncScrollbarState = useCallback((): void => {\n const contentElement = scrollBodyRef.current;\n if (!contentElement) {\n hideScrollbar();\n return;\n }\n\n const { scrollHeight, scrollTop, clientHeight } = contentElement;\n const measuredTrackHeight = trackRef.current?.clientHeight ?? 0;\n const trackHeight =\n measuredTrackHeight > 0 ? measuredTrackHeight : clientHeight;\n const maxScrollTop = Math.max(0, scrollHeight - clientHeight);\n\n if (clientHeight <= 0 || trackHeight <= 0 || maxScrollTop <= 0) {\n hideScrollbar();\n return;\n }\n\n const thumbHeight = Math.max(\n MENTION_PALETTE_SCROLLBAR_MIN_THUMB_HEIGHT,\n Math.round((clientHeight / scrollHeight) * trackHeight)\n );\n const maxThumbTop = Math.max(0, trackHeight - thumbHeight);\n const thumbTop = Math.round((scrollTop / maxScrollTop) * maxThumbTop);\n setScrollbarState((previous) =>\n previous.scrollable &&\n previous.thumbHeight === thumbHeight &&\n previous.thumbTop === thumbTop\n ? previous\n : { scrollable: true, thumbHeight, thumbTop }\n );\n }, [hideScrollbar, scrollBodyRef]);\n\n useEffect(() => {\n const contentElement = scrollBodyRef.current;\n if (!contentElement) {\n hideScrollbar();\n return;\n }\n\n syncScrollbarState();\n contentElement.addEventListener(\"scroll\", syncScrollbarState, {\n passive: true\n });\n const resizeObserver =\n typeof ResizeObserver !== \"undefined\"\n ? new ResizeObserver(syncScrollbarState)\n : null;\n resizeObserver?.observe(contentElement);\n if (trackRef.current) {\n resizeObserver?.observe(trackRef.current);\n }\n const animationFrameId = window.requestAnimationFrame(syncScrollbarState);\n return () => {\n contentElement.removeEventListener(\"scroll\", syncScrollbarState);\n resizeObserver?.disconnect();\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [hideScrollbar, scrollBodyRef, syncScrollbarState]);\n\n useEffect(() => {\n if (!dragging) {\n return;\n }\n\n const handleMouseMove = (event: MouseEvent): void => {\n const contentElement = scrollBodyRef.current;\n const dragState = dragStateRef.current;\n if (!contentElement || !dragState || dragState.maxThumbTop <= 0) {\n return;\n }\n const delta = event.clientY - dragState.startClientY;\n const nextThumbTop =\n (dragState.startScrollTop / dragState.maxScrollTop) *\n dragState.maxThumbTop +\n delta;\n contentElement.scrollTop =\n (Math.min(Math.max(0, nextThumbTop), dragState.maxThumbTop) /\n dragState.maxThumbTop) *\n dragState.maxScrollTop;\n syncScrollbarState();\n };\n\n const handleMouseUp = (): void => {\n dragStateRef.current = null;\n setDragging(false);\n };\n\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [dragging, scrollBodyRef, syncScrollbarState]);\n\n const scrollContentToThumbTop = (thumbTop: number): void => {\n const contentElement = scrollBodyRef.current;\n const trackElement = trackRef.current;\n if (!contentElement || !trackElement) {\n return;\n }\n const maxScrollTop = Math.max(\n 0,\n contentElement.scrollHeight - contentElement.clientHeight\n );\n const maxThumbTop = Math.max(\n 0,\n trackElement.clientHeight - scrollbarState.thumbHeight\n );\n if (maxScrollTop <= 0 || maxThumbTop <= 0) {\n return;\n }\n contentElement.scrollTop =\n (Math.min(Math.max(0, thumbTop), maxThumbTop) / maxThumbTop) *\n maxScrollTop;\n syncScrollbarState();\n };\n\n const handleTrackMouseDown = (\n event: ReactMouseEvent<HTMLDivElement>\n ): void => {\n if (\n event.button !== 0 ||\n !scrollbarState.scrollable ||\n event.target !== event.currentTarget\n ) {\n return;\n }\n event.preventDefault();\n const trackRect = event.currentTarget.getBoundingClientRect();\n scrollContentToThumbTop(\n event.clientY - trackRect.top - scrollbarState.thumbHeight / 2\n );\n };\n\n const handleThumbMouseDown = (\n event: ReactMouseEvent<HTMLDivElement>\n ): void => {\n if (event.button !== 0 || !scrollbarState.scrollable) {\n return;\n }\n const contentElement = scrollBodyRef.current;\n const trackElement = trackRef.current;\n if (!contentElement || !trackElement) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n dragStateRef.current = {\n maxScrollTop: Math.max(\n 0,\n contentElement.scrollHeight - contentElement.clientHeight\n ),\n maxThumbTop: Math.max(\n 0,\n trackElement.clientHeight - scrollbarState.thumbHeight\n ),\n startClientY: event.clientY,\n startScrollTop: contentElement.scrollTop\n };\n setDragging(true);\n };\n\n if (!scrollbarState.scrollable && !dragging) {\n return <div ref={trackRef} className=\"hidden\" aria-hidden=\"true\" />;\n }\n\n return (\n <div\n ref={trackRef}\n className={cn(\"group/status-scrollbar\", className)}\n data-scrollable={scrollbarState.scrollable ? \"true\" : \"false\"}\n data-dragging={dragging ? \"true\" : \"false\"}\n data-testid={testId}\n aria-hidden=\"true\"\n onMouseDown={handleTrackMouseDown}\n >\n <div\n className={thumbClassName}\n onMouseDown={handleThumbMouseDown}\n style={{\n height: `${scrollbarState.thumbHeight}px`,\n transform: `translateY(${scrollbarState.thumbTop}px)`\n }}\n />\n </div>\n );\n}\n","import type {\n MentionPaletteGroup,\n MentionPaletteProps,\n MentionPaletteState\n} from \"./mentionPaletteTypes.ts\";\nimport {\n findMentionPaletteEntry,\n moveMentionPaletteHighlight,\n nextMentionPaletteCategory,\n selectedMentionPaletteItem\n} from \"./mentionPaletteModel.ts\";\n\ntype MentionPaletteCycleCategory =\n | string\n | {\n id: string;\n };\n\nexport interface MentionPaletteStateCallbacks<TItem> {\n onHighlightChange?: (key: string) => void;\n onActiveCategoryIdChange?: (categoryId: string) => void;\n onSelectItem?: (item: TItem) => void;\n onExpandGroup?: (groupId: string) => void;\n}\n\nexport interface MentionPaletteStateAdapterInput<TItem> {\n state: MentionPaletteState<TItem>;\n highlightedKey: string | null;\n /**\n * Optional order used by Tab/Shift+Tab. Defaults to the rendered category\n * order; callers with a surface-specific results-mode tab order can pass it\n * here and keep that policy outside the shell.\n */\n categoryCycleOrder?: readonly MentionPaletteCycleCategory[];\n getItemKey: (item: TItem, groupId: string) => string;\n callbacks?: MentionPaletteStateCallbacks<TItem>;\n}\n\nexport type MentionPaletteStateCommitResult<TItem> =\n | { type: \"none\" }\n | { type: \"category\"; categoryId: string }\n | { type: \"expand\"; groupId: string }\n | { type: \"item\"; item: TItem };\n\nexport interface MentionPaletteStateAdapter<TItem> {\n selectedItem: TItem | null;\n paletteProps: Pick<\n MentionPaletteProps<TItem>,\n | \"state\"\n | \"highlightedKey\"\n | \"getItemKey\"\n | \"onHighlightChange\"\n | \"onSelectItem\"\n | \"onSelectCategory\"\n | \"onSelectFilter\"\n | \"onExpandGroup\"\n | \"onCycleFilter\"\n | \"onMoveSelection\"\n >;\n moveSelection: (delta: 1 | -1) => string | null;\n selectCategory: (categoryId: string) => void;\n expandGroup: (groupId: string) => void;\n cycleCategory: (delta: 1 | -1) => string | null;\n commitHighlighted: () => MentionPaletteStateCommitResult<TItem>;\n}\n\nexport function createMentionPaletteStateAdapter<TItem>(\n input: MentionPaletteStateAdapterInput<TItem>\n): MentionPaletteStateAdapter<TItem> {\n const getPaletteItemKey = (\n item: TItem,\n group: MentionPaletteGroup<TItem>\n ): string => input.getItemKey(item, group.id);\n\n const selectCategory = (categoryId: string): void => {\n input.callbacks?.onActiveCategoryIdChange?.(categoryId);\n };\n\n const expandGroup = (groupId: string): void => {\n input.callbacks?.onExpandGroup?.(groupId);\n };\n\n const moveSelection = (delta: 1 | -1): string | null => {\n const nextKey = moveMentionPaletteHighlight({\n state: input.state,\n currentKey: input.highlightedKey,\n delta,\n getItemKey: input.getItemKey\n });\n if (nextKey !== null) {\n input.callbacks?.onHighlightChange?.(nextKey);\n }\n return nextKey;\n };\n\n const cycleCategory = (delta: 1 | -1): string | null => {\n const cycleCategories = resolveCycleCategories(input.categoryCycleOrder);\n const categories = cycleCategories.length\n ? cycleCategories\n : input.state.categories;\n if (categories.length === 0) {\n return null;\n }\n const nextCategoryId = nextMentionPaletteCategory(\n categories,\n input.state.filter,\n delta\n );\n selectCategory(nextCategoryId);\n return nextCategoryId;\n };\n\n const selectedItem = selectedMentionPaletteItem({\n state: input.state,\n key: input.highlightedKey,\n getItemKey: input.getItemKey\n });\n\n const commitHighlighted = (): MentionPaletteStateCommitResult<TItem> => {\n const activeEntry = findMentionPaletteEntry({\n state: input.state,\n key: input.highlightedKey,\n getItemKey: input.getItemKey\n });\n const fallbackCategoryId = categoryIdFromKey(input.highlightedKey);\n\n if (!activeEntry) {\n if (\n fallbackCategoryId !== null &&\n input.state.categories.some(\n (category) => category.id === fallbackCategoryId\n )\n ) {\n selectCategory(fallbackCategoryId);\n return { type: \"category\", categoryId: fallbackCategoryId };\n }\n return { type: \"none\" };\n }\n\n if (activeEntry.type === \"category\" && activeEntry.categoryId) {\n selectCategory(activeEntry.categoryId);\n return { type: \"category\", categoryId: activeEntry.categoryId };\n }\n\n if (activeEntry.type === \"expand\" && activeEntry.groupId) {\n expandGroup(activeEntry.groupId);\n return { type: \"expand\", groupId: activeEntry.groupId };\n }\n\n if (activeEntry.type === \"item\") {\n const item = selectedMentionPaletteItem({\n state: input.state,\n key: activeEntry.key,\n getItemKey: input.getItemKey\n });\n if (item !== null) {\n input.callbacks?.onSelectItem?.(item);\n return { type: \"item\", item };\n }\n }\n\n return { type: \"none\" };\n };\n\n return {\n selectedItem,\n paletteProps: {\n state: input.state,\n highlightedKey: input.highlightedKey,\n getItemKey: getPaletteItemKey,\n onHighlightChange: (key) => {\n input.callbacks?.onHighlightChange?.(key);\n },\n onSelectItem: (item) => {\n input.callbacks?.onSelectItem?.(item);\n },\n onSelectCategory: selectCategory,\n onSelectFilter: selectCategory,\n onExpandGroup: expandGroup,\n onCycleFilter: cycleCategory,\n onMoveSelection: moveSelection\n },\n moveSelection,\n selectCategory,\n expandGroup,\n cycleCategory,\n commitHighlighted\n };\n}\n\nfunction resolveCycleCategories(\n categories: readonly MentionPaletteCycleCategory[] | undefined\n): readonly { id: string }[] {\n return (\n categories?.map((category) =>\n typeof category === \"string\" ? { id: category } : category\n ) ?? []\n );\n}\n\nfunction categoryIdFromKey(key: string | null): string | null {\n const prefix = \"category:\";\n return key?.startsWith(prefix) ? key.slice(prefix.length) : null;\n}\n","import type { JSX, ReactNode } from \"react\";\nimport { MentionPalette } from \"./MentionPalette.tsx\";\nimport {\n createMentionPaletteStateAdapter,\n type MentionPaletteStateAdapterInput\n} from \"./mentionPaletteStateAdapter.ts\";\nimport type {\n MentionPaletteProps,\n MentionPaletteTheme\n} from \"./mentionPaletteTypes.ts\";\n\nexport interface MentionPaletteFromStateProps<\n TItem\n> extends MentionPaletteStateAdapterInput<TItem> {\n labels: MentionPaletteProps<TItem>[\"labels\"];\n hintLabels: MentionPaletteProps<TItem>[\"hintLabels\"];\n maxHeightPx: number;\n renderItem: (item: TItem, ctx: { active: boolean }) => ReactNode;\n renderListFooter?: () => ReactNode;\n loadingBanner?: ReactNode;\n scrollHighlightedIntoViewCentered?: boolean;\n theme?: MentionPaletteTheme;\n onNavigateHierarchy?: MentionPaletteProps<TItem>[\"onNavigateHierarchy\"];\n}\n\nexport function MentionPaletteFromState<TItem>(\n props: MentionPaletteFromStateProps<TItem>\n): JSX.Element {\n \"use memo\";\n const {\n labels,\n hintLabels,\n maxHeightPx,\n renderItem,\n renderListFooter,\n loadingBanner,\n scrollHighlightedIntoViewCentered,\n theme,\n onNavigateHierarchy,\n ...adapterInput\n } = props;\n const adapter = createMentionPaletteStateAdapter(adapterInput);\n\n return (\n <MentionPalette\n {...adapter.paletteProps}\n labels={labels}\n hintLabels={hintLabels}\n maxHeightPx={maxHeightPx}\n renderItem={renderItem}\n renderListFooter={renderListFooter}\n loadingBanner={loadingBanner}\n scrollHighlightedIntoViewCentered={scrollHighlightedIntoViewCentered}\n theme={theme}\n onNavigateHierarchy={onNavigateHierarchy}\n />\n );\n}\n","import { CheckIcon } from \"@tutti-os/ui-system/icons\";\n\nexport function MentionPaletteSelectIndicator(props: { selected: boolean }) {\n return (\n <span\n aria-hidden=\"true\"\n className=\"rich-text-at-mention-select-indicator\"\n data-selected={props.selected ? \"true\" : \"false\"}\n >\n <CheckIcon size={13} />\n </span>\n );\n}\n\nexport function MentionPaletteMultiSelectFooter(props: {\n count: number;\n countLabel: string;\n cancelLabel: string;\n confirmLabel: string;\n onCancel: () => void;\n onConfirm: () => void;\n}) {\n return (\n <div className=\"rich-text-at-mention-multiselect-footer\">\n <span className=\"rich-text-at-mention-multiselect-footer__count\">\n {props.countLabel}\n </span>\n <div className=\"rich-text-at-mention-multiselect-footer__actions\">\n <button\n type=\"button\"\n className=\"rich-text-at-mention-multiselect-footer__button rich-text-at-mention-multiselect-footer__button--secondary\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={props.onCancel}\n >\n {props.cancelLabel}\n </button>\n <button\n type=\"button\"\n disabled={props.count === 0}\n className=\"rich-text-at-mention-multiselect-footer__button rich-text-at-mention-multiselect-footer__button--primary\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={props.onConfirm}\n >\n {props.confirmLabel}\n </button>\n </div>\n </div>\n );\n}\n","import {\n ArrowLeftIcon,\n Badge,\n FileCodeIcon,\n FileTextIcon,\n FolderIcon,\n ImageFileIcon,\n LocateFolderIcon,\n ProductIcon,\n StatusDot,\n VideoFileIcon,\n cn,\n type IconProps\n} from \"@tutti-os/ui-system\";\nimport type { MentionFileVisualKind } from \"./mentionFileVisualKind.ts\";\nimport {\n mentionRowDataAttribute,\n mentionRowRootDataAttributes,\n type MentionRowDataAttributeMode\n} from \"./mentionRowDataAttributes.ts\";\nimport type {\n MentionRowFileItem,\n MentionRowItem,\n MentionRowSessionItem,\n MentionRowStatusTag\n} from \"./mentionRowTypes.ts\";\nimport { mentionStatusBadgeClassName } from \"./mentionStatusTone.ts\";\n\n/**\n * Default file kind-icon shapes for surfaces that do NOT ship the agent's\n * CSS-masked glyph stylesheet. These mirror the agent's mask glyph shapes\n * (`agentactivity.css`: folder-filled / doc-filled / code-filled / image-filled\n * / video-filled / arrow-left-filled) using ui-system icon components, so a\n * file row renders a real glyph without `agentactivity.css`. The agent composer\n * passes its own `fileIcon` class and keeps rendering masked `<span>` glyphs,\n * except `back` rows which always use {@link ArrowLeftIcon}.\n */\nconst MENTION_FILE_VISUAL_KIND_ICON: Record<\n MentionFileVisualKind,\n (props: IconProps) => React.JSX.Element\n> = {\n back: ArrowLeftIcon,\n folder: FolderIcon,\n document: FileTextIcon,\n // The agent maps markdown to `product-filled.svg`; ProductIcon is the\n // matching boundary-safe ui-system glyph.\n markdown: ProductIcon,\n code: FileCodeIcon,\n image: ImageFileIcon,\n video: VideoFileIcon\n};\n\n/**\n * Structural class-name hooks for the elements a {@link MentionRow} renders that\n * rely on a stylesheet (file icon/thumb, the app fallback kind-icon, and the\n * session avatar placeholder modifier). Every key is optional and defaults to a\n * PACKAGE-OWNED `rich-text-at-mention-*` class whose CSS ships with\n * `mentionPalette.css`, so any consumer renders styled rows out of the box.\n *\n * Surfaces with their own stylesheet (e.g. the agent composer) pass their exact\n * existing class names here so their rendered DOM stays byte-identical.\n */\nexport interface MentionRowClassNames {\n /** The masked file kind-icon `<span>`. */\n fileIcon?: string;\n /** The image-thumbnail wrapper `<span>` (rendered for image files). */\n fileThumb?: string;\n /** The fallback app icon glyph rendered when no `iconUrl` is present. */\n kindIcon?: string;\n /**\n * Modifier class added to the session user avatar `<img>` when the user has no\n * avatar URL and the placeholder asset is shown.\n */\n avatarImgUserPlaceholder?: string;\n}\n\nexport interface MentionRowRenderOptions {\n classNames?: MentionRowClassNames;\n dataAttributeMode?: MentionRowDataAttributeMode;\n /**\n * 当提供时,issue / app 行末尾渲染一个「查看产物文件」入口图标(独立点击热区,\n * 不触发整行选中)。点击回调由调用方注入(如打开引用文件 picker 并定位到该实体)。\n */\n onOpenReferences?: () => void;\n /** 入口图标的无障碍标签 / tooltip 文案。 */\n openReferencesLabel?: string;\n}\n\ninterface ResolvedMentionRowRenderOptions {\n classNames?: MentionRowClassNames;\n dataAttributeMode: MentionRowDataAttributeMode;\n onOpenReferences?: () => void;\n openReferencesLabel?: string;\n}\n\nconst DEFAULT_MENTION_ROW_CLASS_NAMES = {\n fileIcon: \"rich-text-at-mention-file-icon\",\n fileThumb: \"rich-text-at-mention-file-thumb\",\n kindIcon: \"rich-text-at-mention-kind-icon\",\n avatarImgUserPlaceholder: \"rich-text-at-mention-avatar-img--user-placeholder\"\n} as const satisfies Required<MentionRowClassNames>;\n\nfunction resolveMentionRowClassNames(\n classNames?: MentionRowClassNames\n): Required<MentionRowClassNames> {\n return {\n fileIcon: classNames?.fileIcon ?? DEFAULT_MENTION_ROW_CLASS_NAMES.fileIcon,\n fileThumb:\n classNames?.fileThumb ?? DEFAULT_MENTION_ROW_CLASS_NAMES.fileThumb,\n kindIcon: classNames?.kindIcon ?? DEFAULT_MENTION_ROW_CLASS_NAMES.kindIcon,\n avatarImgUserPlaceholder:\n classNames?.avatarImgUserPlaceholder ??\n DEFAULT_MENTION_ROW_CLASS_NAMES.avatarImgUserPlaceholder\n };\n}\n\nfunction resolveMentionRowRenderOptions(\n options?: MentionRowClassNames | MentionRowRenderOptions\n): ResolvedMentionRowRenderOptions {\n if (isMentionRowRenderOptions(options)) {\n return {\n classNames: options.classNames,\n dataAttributeMode: options.dataAttributeMode ?? \"shared\",\n onOpenReferences: options.onOpenReferences,\n openReferencesLabel: options.openReferencesLabel\n };\n }\n return {\n classNames: options,\n dataAttributeMode: \"shared\"\n };\n}\n\nfunction isMentionRowRenderOptions(\n options: MentionRowClassNames | MentionRowRenderOptions | undefined\n): options is MentionRowRenderOptions {\n return (\n options !== undefined &&\n (\"classNames\" in options || \"dataAttributeMode\" in options)\n );\n}\n\n/**\n * Render the inner content of a single `@`-mention palette row from a\n * fully-resolved {@link MentionRowItem}. The surrounding option button / active\n * state is provided by the shared `MentionPalette` shell; this renders only the\n * row body.\n *\n * Pass {@link classNames} to override the package-owned structural class hooks\n * (e.g. so the agent composer keeps emitting its own stylesheet's class names).\n */\nexport function renderMentionRow(\n item: MentionRowItem,\n options?: MentionRowClassNames | MentionRowRenderOptions\n): React.ReactNode {\n const {\n classNames,\n dataAttributeMode,\n onOpenReferences,\n openReferencesLabel\n } = resolveMentionRowRenderOptions(options);\n const resolved = resolveMentionRowClassNames(classNames);\n const referencesButton = onOpenReferences ? (\n <MentionOpenReferencesButton\n label={openReferencesLabel}\n onOpenReferences={onOpenReferences}\n dataAttributeMode={dataAttributeMode}\n />\n ) : null;\n if (item.kind === \"file\") {\n return (\n <MentionFileRow\n item={item}\n classNames={resolved}\n dataAttributeMode={dataAttributeMode}\n />\n );\n }\n\n if (item.kind === \"plain\") {\n return (\n <span className=\"rich-text-at-mention-row rich-text-at-mention-row--plain\">\n {item.leading}\n <span className=\"rich-text-at-mention-row__text-stack\">\n <span className=\"rich-text-at-mention-row__title\">{item.label}</span>\n {item.description ? (\n <span className=\"rich-text-at-mention-row__description\">\n {item.description}\n </span>\n ) : null}\n </span>\n </span>\n );\n }\n\n if (item.kind === \"session\") {\n return (\n <span className=\"rich-text-at-mention-row rich-text-at-mention-row--session\">\n <span className=\"rich-text-at-mention-row__leading\">\n <MentionSessionAvatarStack\n item={item}\n classNames={resolved}\n dataAttributeMode={dataAttributeMode}\n />\n <span className=\"rich-text-at-mention-row__session-title\">\n <MentionSessionTitle item={item} />\n </span>\n </span>\n {item.statusTag ? (\n <MentionStatusBadge\n statusTag={item.statusTag}\n dataAttributeMode={dataAttributeMode}\n />\n ) : null}\n </span>\n );\n }\n\n if (item.kind === \"app\") {\n return (\n <span className=\"rich-text-at-mention-row rich-text-at-mention-row--app\">\n <MentionWorkspaceAppIcon\n iconUrl={item.iconUrl}\n kindIconClassName={resolved.kindIcon}\n dataAttributeMode={dataAttributeMode}\n />\n <span className=\"rich-text-at-mention-row__app-text\">\n <span className=\"rich-text-at-mention-row__app-name\">\n {item.name}\n </span>\n {item.description ? (\n <span className=\"rich-text-at-mention-row__app-description\">\n {item.description}\n </span>\n ) : null}\n </span>\n {referencesButton}\n </span>\n );\n }\n\n if (item.kind === \"app-factory\") {\n return (\n <span className=\"rich-text-at-mention-row__text-stack\">\n <span className=\"rich-text-at-mention-row__title\">{item.name}</span>\n </span>\n );\n }\n\n return (\n <span className=\"rich-text-at-mention-row rich-text-at-mention-row--issue\">\n <span className=\"rich-text-at-mention-row__text-stack rich-text-at-mention-row__text-stack--fill\">\n <span className=\"rich-text-at-mention-row__inline\">\n <span className=\"rich-text-at-mention-row__title\">{item.title}</span>\n {item.statusTag ? (\n <MentionStatusBadge\n statusTag={item.statusTag}\n dataAttributeMode={dataAttributeMode}\n />\n ) : null}\n </span>\n {item.creatorName ? (\n <span className=\"rich-text-at-mention-row__description\">\n {item.creatorName}\n </span>\n ) : null}\n </span>\n {referencesButton}\n </span>\n );\n}\n\n/**\n * 「查看产物文件」入口图标。issue / app 行末尾的独立点击热区:点击只触发\n * {@link onOpenReferences}(如打开引用文件 picker 并定位),阻断冒泡以免触发整行选中。\n * 行外层按钮的 `[&_svg]:pointer-events-none` 使图标本身不吃事件,点击落在此 `<span>` 上。\n */\nfunction MentionOpenReferencesButton({\n label,\n onOpenReferences,\n dataAttributeMode\n}: {\n label?: string;\n onOpenReferences: () => void;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n return (\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label={label}\n title={label}\n className=\"rich-text-at-mention-row__open-references\"\n {...mentionRowDataAttribute(dataAttributeMode, \"openReferences\", \"true\")}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onOpenReferences();\n }}\n >\n <LocateFolderIcon size={16} />\n </span>\n );\n}\n\nfunction MentionFileRow({\n item,\n classNames,\n dataAttributeMode\n}: {\n item: MentionRowFileItem;\n classNames: Required<MentionRowClassNames>;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n return (\n <span\n className=\"rich-text-at-mention-row rich-text-at-mention-row--file\"\n {...mentionRowRootDataAttributes(dataAttributeMode, \"file\")}\n {...(item.entryKind\n ? mentionRowDataAttribute(\n dataAttributeMode,\n \"fileEntryKind\",\n item.entryKind\n )\n : {})}\n {...mentionRowDataAttribute(\n dataAttributeMode,\n \"fileVisualKind\",\n item.visualKind\n )}\n {...(item.mentionNavigation\n ? mentionRowDataAttribute(\n dataAttributeMode,\n \"navigation\",\n item.mentionNavigation\n )\n : {})}\n >\n <MentionFileIcon\n item={item}\n classNames={classNames}\n dataAttributeMode={dataAttributeMode}\n />\n <span className=\"rich-text-at-mention-row__file-text\">\n <span className=\"rich-text-at-mention-row__title\">{item.name}</span>\n {item.childCountLabel ? (\n <span className=\"rich-text-at-mention-row__file-count\">\n {item.childCountLabel}\n </span>\n ) : null}\n </span>\n </span>\n );\n}\n\nfunction MentionFileIcon({\n item,\n classNames,\n dataAttributeMode\n}: {\n item: MentionRowFileItem;\n classNames: Required<MentionRowClassNames>;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n const thumbnailUrl =\n item.visualKind === \"image\" ? item.thumbnailUrl?.trim() || \"\" : \"\";\n if (thumbnailUrl) {\n return (\n <span\n className={classNames.fileThumb}\n {...mentionRowDataAttribute(dataAttributeMode, \"fileThumb\", \"true\")}\n aria-hidden=\"true\"\n >\n <img\n src={thumbnailUrl}\n alt=\"\"\n className=\"rich-text-at-mention-row__media\"\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n </span>\n );\n }\n\n // Back navigation always renders the ui-system back glyph so every surface\n // (including the agent composer's CSS-masked file icons) shares one source.\n if (item.visualKind === \"back\") {\n return (\n <span\n className={cn(\n classNames.fileIcon,\n \"rich-text-at-mention-file-icon--glyph\"\n )}\n {...mentionRowDataAttribute(\n dataAttributeMode,\n \"fileVisualKind\",\n item.visualKind\n )}\n aria-hidden=\"true\"\n >\n <ArrowLeftIcon size={16} />\n </span>\n );\n }\n\n // Surfaces that ship a custom file-icon stylesheet (e.g. the agent composer\n // via `agentactivity.css`) render the empty CSS-masked `<span>` so their DOM\n // stays byte-identical. Surfaces using the package default class have no such\n // stylesheet, so render a real ui-system kind glyph instead of an empty box.\n const usesDefaultFileIcon =\n classNames.fileIcon === DEFAULT_MENTION_ROW_CLASS_NAMES.fileIcon;\n if (usesDefaultFileIcon) {\n const Icon = MENTION_FILE_VISUAL_KIND_ICON[item.visualKind];\n return (\n <span\n className={cn(\n classNames.fileIcon,\n \"rich-text-at-mention-file-icon--glyph\"\n )}\n {...mentionRowDataAttribute(\n dataAttributeMode,\n \"fileVisualKind\",\n item.visualKind\n )}\n aria-hidden=\"true\"\n >\n <Icon size={16} />\n </span>\n );\n }\n\n return (\n <span\n className={classNames.fileIcon}\n {...mentionRowDataAttribute(\n dataAttributeMode,\n \"fileVisualKind\",\n item.visualKind\n )}\n aria-hidden=\"true\"\n />\n );\n}\n\nfunction MentionWorkspaceAppIcon({\n iconUrl,\n kindIconClassName,\n dataAttributeMode\n}: {\n iconUrl?: string | null;\n kindIconClassName: string;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n const normalizedIconUrl = iconUrl?.trim() ?? \"\";\n return (\n <span\n className=\"rich-text-at-mention-app-icon\"\n {...mentionRowDataAttribute(dataAttributeMode, \"appIcon\", \"true\")}\n data-workspace-app-icon=\"true\"\n aria-hidden=\"true\"\n >\n {normalizedIconUrl ? (\n <img\n src={normalizedIconUrl}\n alt=\"\"\n className=\"rich-text-at-mention-row__media\"\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n ) : (\n <span\n className={cn(\n kindIconClassName,\n \"rich-text-at-mention-kind-icon--app\"\n )}\n />\n )}\n </span>\n );\n}\n\nfunction MentionSessionAvatarStack({\n item,\n classNames,\n dataAttributeMode\n}: {\n item: MentionRowSessionItem;\n classNames: Required<MentionRowClassNames>;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n const showUserAvatar = item.showUserAvatar !== false;\n if (!showUserAvatar) {\n return (\n <span\n className={cn(\n \"rich-text-at-mention-avatar-stack\",\n \"rich-text-at-mention-avatar-stack--agent-only\"\n )}\n aria-hidden=\"true\"\n >\n <span\n className=\"rich-text-at-mention-avatar rich-text-at-mention-avatar--agent\"\n {...mentionRowDataAttribute(dataAttributeMode, \"agentAvatar\", \"true\")}\n >\n <img\n src={item.agentIconUrl}\n alt=\"\"\n className=\"rich-text-at-mention-row__media\"\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n </span>\n </span>\n );\n }\n\n const userAvatarUrl = item.userAvatarUrl?.trim() ?? \"\";\n const placeholderUrl = item.userAvatarPlaceholderUrl;\n const userImageUrl = userAvatarUrl || placeholderUrl;\n return (\n <span className=\"rich-text-at-mention-avatar-stack\" aria-hidden=\"true\">\n <span\n className=\"rich-text-at-mention-avatar rich-text-at-mention-avatar--user\"\n {...mentionRowDataAttribute(dataAttributeMode, \"userAvatar\", \"true\")}\n >\n <img\n src={userImageUrl}\n alt=\"\"\n className={cn(\n \"rich-text-at-mention-row__media\",\n !userAvatarUrl && classNames.avatarImgUserPlaceholder\n )}\n decoding=\"async\"\n loading=\"lazy\"\n referrerPolicy=\"no-referrer\"\n draggable={false}\n onError={(event) => {\n if (event.currentTarget.dataset.fallbackAvatarApplied === \"true\") {\n return;\n }\n event.currentTarget.dataset.fallbackAvatarApplied = \"true\";\n event.currentTarget.src = placeholderUrl;\n event.currentTarget.classList.add(\n classNames.avatarImgUserPlaceholder\n );\n }}\n />\n </span>\n <span\n className=\"rich-text-at-mention-avatar rich-text-at-mention-avatar--agent\"\n {...mentionRowDataAttribute(dataAttributeMode, \"agentAvatar\", \"true\")}\n >\n <img\n src={item.agentIconUrl}\n alt=\"\"\n className=\"rich-text-at-mention-row__media\"\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n </span>\n </span>\n );\n}\n\nfunction MentionSessionTitle({\n item\n}: {\n item: MentionRowSessionItem;\n}): React.JSX.Element {\n return (\n <>\n <span className=\"rich-text-at-mention-row__session-participant\">\n {item.participant}\n </span>\n <span className=\"rich-text-at-mention-row__session-summary\">\n {\" \"}\n {item.summary ?? \"\"}\n </span>\n </>\n );\n}\n\nfunction MentionStatusBadge({\n statusTag,\n dataAttributeMode\n}: {\n statusTag: MentionRowStatusTag;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n if (statusTag.variant === \"issue\") {\n return (\n <Badge\n variant=\"secondary\"\n size=\"sm\"\n className={cn(\n \"rich-text-at-mention-status rich-text-at-mention-status--issue\",\n mentionStatusBadgeClassName({\n tone: statusTag.tone,\n variant: \"issue\"\n })\n )}\n {...mentionRowDataAttribute(dataAttributeMode, \"statusTag\", \"true\")}\n {...(statusTag.dataStatus\n ? { \"data-status\": statusTag.dataStatus }\n : {})}\n data-tone={statusTag.tone}\n >\n {statusTag.label}\n </Badge>\n );\n }\n\n return (\n <Badge\n variant=\"secondary\"\n size=\"sm\"\n className={cn(\n \"rich-text-at-mention-status rich-text-at-mention-status--activity\",\n mentionStatusBadgeClassName({\n tone: statusTag.tone,\n variant: \"activity\"\n })\n )}\n {...mentionRowDataAttribute(dataAttributeMode, \"statusTag\", \"true\")}\n {...(statusTag.dataStatus ? { \"data-status\": statusTag.dataStatus } : {})}\n data-tone={statusTag.tone}\n title={statusTag.label}\n >\n <StatusDot\n tone={statusTag.tone}\n pulse={statusTag.pulse ?? false}\n size=\"xs\"\n title={statusTag.label}\n />\n <span>{statusTag.label}</span>\n </Badge>\n );\n}\n","import type { MentionRowItem } from \"./mentionRowTypes.ts\";\n\nexport type MentionRowDataAttributeMode = \"shared\" | \"agent\";\n\nexport type MentionRowDataAttributeKey =\n | \"agentAvatar\"\n | \"appIcon\"\n | \"fileEntryKind\"\n | \"fileThumb\"\n | \"fileVisualKind\"\n | \"navigation\"\n | \"openReferences\"\n | \"statusTag\"\n | \"userAvatar\";\n\nconst MENTION_ROW_DATA_ATTRIBUTES: Record<\n MentionRowDataAttributeMode,\n Record<MentionRowDataAttributeKey, string>\n> = {\n shared: {\n agentAvatar: \"data-rich-text-at-mention-agent-avatar\",\n appIcon: \"data-rich-text-at-mention-app-icon\",\n fileEntryKind: \"data-rich-text-at-mention-file-entry-kind\",\n fileThumb: \"data-rich-text-at-mention-file-thumb\",\n fileVisualKind: \"data-rich-text-at-mention-file-visual-kind\",\n navigation: \"data-rich-text-at-mention-navigation\",\n openReferences: \"data-rich-text-at-mention-open-references\",\n statusTag: \"data-rich-text-at-mention-status-tag\",\n userAvatar: \"data-rich-text-at-mention-user-avatar\"\n },\n agent: {\n agentAvatar: \"data-agent-mention-agent-avatar\",\n appIcon: \"data-agent-mention-app-icon\",\n fileEntryKind: \"data-agent-file-entry-kind\",\n fileThumb: \"data-agent-mention-file-thumb\",\n fileVisualKind: \"data-agent-file-visual-kind\",\n navigation: \"data-agent-mention-navigation\",\n openReferences: \"data-agent-mention-open-references\",\n statusTag: \"data-agent-mention-status-tag\",\n userAvatar: \"data-agent-mention-user-avatar\"\n }\n};\n\nexport function mentionRowRootDataAttributes(\n mode: MentionRowDataAttributeMode,\n kind: MentionRowItem[\"kind\"]\n): Record<string, string> {\n return mode === \"agent\"\n ? {\n \"data-agent-file-mention\": \"true\",\n \"data-agent-mention-kind\": kind\n }\n : {\n \"data-rich-text-at-mention-row\": \"true\",\n \"data-rich-text-at-mention-kind\": kind\n };\n}\n\nexport function mentionRowDataAttribute(\n mode: MentionRowDataAttributeMode,\n key: MentionRowDataAttributeKey,\n value: string\n): Record<string, string> {\n return {\n [MENTION_ROW_DATA_ATTRIBUTES[mode][key]]: value\n };\n}\n","import React, { type CSSProperties } from \"react\";\nimport type { MentionFileVisualKind } from \"./mentionFileVisualKind.ts\";\n\nexport type MentionReferenceProviderKind =\n | \"agent-generated-file\"\n | \"agent-session\"\n | \"file\"\n | \"workspace-app\"\n | \"workspace-issue\"\n | \"generic\";\n\nexport interface MentionReferenceLeadingInput {\n className?: string;\n fileVisualKind?: MentionFileVisualKind;\n iconUrl?: string | null;\n imageClassName?: string;\n kind: MentionReferenceProviderKind;\n label?: string | null;\n thumbnailUrl?: string | null;\n}\n\nconst REFERENCE_LEADING_STYLE = {\n alignItems: \"center\",\n background: \"var(--bg-block, var(--block, #0000000a))\",\n borderRadius: \"8px\",\n color: \"var(--rich-text-at-mention-text-secondary, currentColor)\",\n display: \"inline-grid\",\n flex: \"0 0 32px\",\n height: \"32px\",\n justifyItems: \"center\",\n overflow: \"hidden\",\n width: \"32px\"\n} as const satisfies CSSProperties;\n\nconst REFERENCE_IMAGE_STYLE = {\n display: \"block\",\n height: \"100%\",\n objectFit: \"cover\",\n width: \"100%\"\n} as const satisfies CSSProperties;\n\nconst REFERENCE_ICON_STYLE = {\n display: \"block\",\n height: \"18px\",\n width: \"18px\"\n} as const satisfies CSSProperties;\n\nexport function resolveMentionReferenceImageUrl(input: {\n iconUrl?: string | null;\n thumbnailUrl?: string | null;\n}): string | undefined {\n return input.thumbnailUrl?.trim() || input.iconUrl?.trim() || undefined;\n}\n\nexport function renderMentionReferenceLeading(\n input: MentionReferenceLeadingInput\n): React.JSX.Element {\n const imageUrl = resolveMentionReferenceImageUrl(input);\n return React.createElement(\n \"span\",\n {\n \"aria-hidden\": \"true\",\n className: input.className,\n \"data-rich-text-at-mention-reference-kind\": input.kind,\n \"data-rich-text-at-mention-reference-leading\": \"true\",\n style: REFERENCE_LEADING_STYLE\n },\n imageUrl\n ? React.createElement(\"img\", {\n alt: \"\",\n className: input.imageClassName,\n decoding: \"async\",\n draggable: false,\n loading: \"lazy\",\n src: imageUrl,\n style: REFERENCE_IMAGE_STYLE\n })\n : renderMentionReferenceFallbackIcon(input)\n );\n}\n\nfunction renderMentionReferenceFallbackIcon(\n input: Pick<MentionReferenceLeadingInput, \"fileVisualKind\" | \"kind\">\n): React.JSX.Element {\n return React.createElement(\n \"svg\",\n {\n \"aria-hidden\": \"true\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 1.8,\n style: REFERENCE_ICON_STYLE,\n viewBox: \"0 0 24 24\"\n },\n ...referenceIconPaths(input)\n );\n}\n\nfunction referenceIconPaths(\n input: Pick<MentionReferenceLeadingInput, \"fileVisualKind\" | \"kind\">\n): React.ReactNode[] {\n if (input.kind === \"workspace-app\") {\n return [\n React.createElement(\"rect\", {\n height: 7,\n key: \"a\",\n rx: 1.5,\n width: 7,\n x: 4,\n y: 4\n }),\n React.createElement(\"rect\", {\n height: 7,\n key: \"b\",\n rx: 1.5,\n width: 7,\n x: 13,\n y: 4\n }),\n React.createElement(\"rect\", {\n height: 7,\n key: \"c\",\n rx: 1.5,\n width: 7,\n x: 4,\n y: 13\n }),\n React.createElement(\"rect\", {\n height: 7,\n key: \"d\",\n rx: 1.5,\n width: 7,\n x: 13,\n y: 13\n })\n ];\n }\n if (input.kind === \"workspace-issue\") {\n return [\n React.createElement(\"circle\", { cx: 12, cy: 12, key: \"a\", r: 8 }),\n React.createElement(\"path\", { d: \"M8.5 12.5 11 15l4.5-5\", key: \"b\" })\n ];\n }\n if (input.kind === \"agent-session\") {\n return [\n React.createElement(\"path\", {\n d: \"M6 9.5a5 5 0 0 1 5-5h2a5 5 0 0 1 5 5v2.5a5 5 0 0 1-5 5h-1.5L8 19v-2.4A5 5 0 0 1 6 12z\",\n key: \"a\"\n })\n ];\n }\n if (\n input.kind === \"file\" ||\n input.kind === \"agent-generated-file\" ||\n input.fileVisualKind != null\n ) {\n if (input.fileVisualKind === \"folder\" || input.fileVisualKind === \"back\") {\n return [\n React.createElement(\"path\", {\n d: \"M3.5 7.5h6l2 2h9v8a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2z\",\n key: \"a\"\n })\n ];\n }\n if (input.fileVisualKind === \"image\") {\n return [\n React.createElement(\"rect\", {\n height: 14,\n key: \"a\",\n rx: 2,\n width: 16,\n x: 4,\n y: 5\n }),\n React.createElement(\"path\", {\n d: \"m7 16 3.5-3.5 2.5 2.5 2-2 2 3\",\n key: \"b\"\n }),\n React.createElement(\"circle\", { cx: 9, cy: 9, key: \"c\", r: 1 })\n ];\n }\n if (input.fileVisualKind === \"video\") {\n return [\n React.createElement(\"rect\", {\n height: 14,\n key: \"a\",\n rx: 2,\n width: 16,\n x: 4,\n y: 5\n }),\n React.createElement(\"path\", {\n d: \"m10 9 5 3-5 3z\",\n key: \"b\"\n })\n ];\n }\n return [\n React.createElement(\"path\", {\n d: \"M7 3.5h7l4 4V20a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V4.5a1 1 0 0 1 1-1z\",\n key: \"a\"\n }),\n React.createElement(\"path\", { d: \"M14 3.5v4h4\", key: \"b\" })\n ];\n }\n return [\n React.createElement(\"path\", {\n d: \"M9.5 14.5 14.5 9.5\",\n key: \"a\"\n }),\n React.createElement(\"path\", {\n d: \"M8.5 10.5 7 12a3.5 3.5 0 0 0 5 5l1.5-1.5\",\n key: \"b\"\n }),\n React.createElement(\"path\", {\n d: \"M15.5 13.5 17 12a3.5 3.5 0 0 0-5-5l-1.5 1.5\",\n key: \"c\"\n })\n ];\n}\n","import type { ReactNode } from \"react\";\nimport {\n resolveMentionFileThumbnailUrl,\n resolveMentionFileVisualKind,\n type MentionFileVisualKind\n} from \"./mentionFileVisualKind.ts\";\nimport {\n renderMentionReferenceLeading,\n type MentionReferenceProviderKind\n} from \"./mentionReferenceIcon.ts\";\nimport type {\n MentionRowItem,\n MentionRowPlainItem,\n MentionRowStatusTag\n} from \"./mentionRowTypes.ts\";\nimport type {\n MentionRowStatusTone,\n MentionRowStatusVariant\n} from \"./mentionStatusTone.ts\";\nimport type {\n RichTextMentionPresentation,\n RichTextTriggerQueryMatch\n} from \"../types/index.ts\";\n\nexport type MentionTriggerRowProviderId =\n | \"agent-generated-file\"\n | \"agent-session\"\n | \"file\"\n | \"workspace-app\"\n | \"workspace-issue\";\n\nexport interface MentionTriggerRowLeadingContext<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n> {\n description: string | null;\n fileVisualKind?: MentionFileVisualKind;\n iconUrl: string | null;\n label: string;\n match: TMatch;\n providerKind: MentionReferenceProviderKind;\n thumbnailUrl: string | null;\n}\n\nexport interface MentionTriggerRowItemOptions<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n> {\n getAgentIconUrl?: (match: TMatch) => string | null | undefined;\n getChildCountLabel?: (match: TMatch) => string | null | undefined;\n getDescription?: (match: TMatch) => string | null | undefined;\n getFileEntryKind?: (match: TMatch) => string | null | undefined;\n getFileMentionNavigation?: (match: TMatch) => string | null | undefined;\n getFileThumbnailUrl?: (match: TMatch) => string | null | undefined;\n getFileVisualKind?: (\n match: TMatch\n ) => MentionFileVisualKind | null | undefined;\n getStatusTag?: (\n match: TMatch,\n variant: MentionRowStatusVariant\n ) => MentionRowStatusTag | null | undefined;\n getUserAvatarPlaceholderUrl?: (match: TMatch) => string | null | undefined;\n getUserAvatarUrl?: (match: TMatch) => string | null | undefined;\n getWorkspaceAppIconFallbackUrl?: (match: TMatch) => string | null | undefined;\n renderLeading?: (\n context: MentionTriggerRowLeadingContext<TMatch>\n ) => ReactNode | undefined;\n}\n\nconst SUPPORTED_MENTION_TRIGGER_ROW_PROVIDER_IDS = new Set<string>([\n \"agent-generated-file\",\n \"agent-session\",\n \"file\",\n \"workspace-app\",\n \"workspace-issue\"\n]);\n\nexport function richTextTriggerQueryMatchToMentionRowItem<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n>(\n match: TMatch,\n options: MentionTriggerRowItemOptions<TMatch> = {}\n): MentionRowItem {\n const presentation = mentionPresentation(match);\n const label = resolveMentionRowLabel(match);\n const description = resolveMentionRowDescription(match, options);\n const providerKind = mentionReferenceProviderKind(match.providerId);\n const iconUrl = resolveMentionRowIconUrl(match, presentation, options);\n const thumbnailUrl = resolveMentionRowThumbnailUrl(\n match,\n presentation,\n options\n );\n const fileVisualKind = isFileMentionProvider(match.providerId)\n ? resolveMentionRowFileVisualKind(match, options)\n : undefined;\n const customLeading = options.renderLeading?.({\n description,\n fileVisualKind,\n iconUrl,\n label,\n match,\n providerKind,\n thumbnailUrl\n });\n\n if (customLeading !== undefined) {\n return mentionRowPlainItem({\n description,\n label,\n leading: customLeading\n });\n }\n\n if (match.providerId === \"workspace-app\") {\n return {\n kind: \"app\",\n description,\n iconUrl,\n name: label\n };\n }\n\n if (match.providerId === \"workspace-issue\") {\n return {\n kind: \"issue\",\n creatorName: description,\n statusTag: resolveMentionRowStatusTag(match, \"issue\", options),\n title: label\n };\n }\n\n if (isFileMentionProvider(match.providerId)) {\n const entryKind = resolveFileEntryKind(match, options);\n const mentionNavigation = resolveFileMentionNavigation(match, options);\n const visualKind = fileVisualKind ?? \"document\";\n return {\n kind: \"file\",\n childCountLabel: normalizedText(options.getChildCountLabel?.(match)),\n entryKind,\n mentionNavigation,\n name: label,\n thumbnailUrl:\n resolveMentionFileThumbnailUrl({\n thumbnailUrl,\n visualKind\n }) ?? null,\n visualKind\n };\n }\n\n if (match.providerId === \"agent-session\") {\n const session = agentSessionMentionRowItem(match, {\n description,\n iconUrl,\n options,\n presentation\n });\n if (session) {\n return session;\n }\n }\n\n return mentionRowPlainItem({\n description,\n label,\n leading: renderMentionReferenceLeading({\n fileVisualKind,\n iconUrl,\n kind: providerKind,\n label,\n thumbnailUrl\n })\n });\n}\n\nexport function isMentionTriggerRowProviderId(\n providerId: string\n): providerId is MentionTriggerRowProviderId {\n return SUPPORTED_MENTION_TRIGGER_ROW_PROVIDER_IDS.has(providerId);\n}\n\nexport function workspaceAppIconFallbackUrlFromTriggerMatch(\n match: RichTextTriggerQueryMatch\n): string | null {\n const appId = mentionEntityId(match) || match.key.trim();\n if (!appId) {\n return null;\n }\n return `tutti://workspace-apps/${encodeURIComponent(appId)}/icon.png`;\n}\n\nexport function mentionRowStatusTagFromPresentation(\n match: RichTextTriggerQueryMatch,\n input: {\n tone?: MentionRowStatusTone;\n variant: MentionRowStatusVariant;\n }\n): MentionRowStatusTag | null {\n const presentation = mentionPresentation(match);\n const label = normalizedText(presentation?.statusLabel);\n if (!label) {\n return null;\n }\n const dataStatus =\n normalizedText(presentation?.statusDataStatus) ??\n normalizedText(presentation?.status);\n return {\n dataStatus: dataStatus ?? undefined,\n label,\n pulse: presentation?.statusPulse === \"true\",\n tone: input.tone ?? \"neutral\",\n variant: input.variant\n };\n}\n\nfunction agentSessionMentionRowItem<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n input: {\n description: string | null;\n iconUrl: string | null;\n options: MentionTriggerRowItemOptions<TMatch>;\n presentation: RichTextMentionPresentation | null;\n }\n): MentionRowItem | null {\n const agentIconUrl =\n normalizedText(input.options.getAgentIconUrl?.(match)) ??\n normalizedText(input.presentation?.agentIconUrl) ??\n input.iconUrl;\n const userAvatarPlaceholderUrl =\n normalizedText(input.options.getUserAvatarPlaceholderUrl?.(match)) ??\n normalizedText(input.presentation?.userAvatarPlaceholderUrl);\n if (!agentIconUrl || !userAvatarPlaceholderUrl) {\n return null;\n }\n return {\n kind: \"session\",\n agentIconUrl,\n participant:\n normalizedText(input.presentation?.participant) ??\n resolveMentionRowLabel(match),\n statusTag: resolveMentionRowStatusTag(match, \"activity\", input.options),\n summary: input.description,\n userAvatarPlaceholderUrl,\n userAvatarUrl:\n normalizedText(input.options.getUserAvatarUrl?.(match)) ?? null\n };\n}\n\nfunction mentionRowPlainItem(input: {\n description: string | null;\n label: string;\n leading?: ReactNode;\n}): MentionRowPlainItem {\n return {\n kind: \"plain\",\n description: input.description,\n label: input.label,\n leading: input.leading\n };\n}\n\nfunction resolveMentionRowLabel(match: RichTextTriggerQueryMatch): string {\n return (\n normalizedText(\n match.insertResult.kind === \"mention\"\n ? match.insertResult.mention.label\n : match.insertResult.kind === \"markdown-link\"\n ? match.insertResult.label\n : undefined\n ) ??\n normalizedText(match.label) ??\n match.key\n );\n}\n\nfunction resolveMentionRowDescription<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n options: Pick<MentionTriggerRowItemOptions<TMatch>, \"getDescription\">\n): string | null {\n const presentation = mentionPresentation(match);\n return (\n normalizedText(options.getDescription?.(match)) ??\n normalizedText(presentation?.description) ??\n normalizedText(presentation?.subtitle) ??\n normalizedText(match.subtitle) ??\n null\n );\n}\n\nfunction resolveMentionRowIconUrl<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n presentation: RichTextMentionPresentation | null,\n options: Pick<\n MentionTriggerRowItemOptions<TMatch>,\n \"getWorkspaceAppIconFallbackUrl\"\n >\n): string | null {\n return (\n normalizedText(presentation?.iconUrl) ??\n normalizedText(match.iconUrl) ??\n (match.providerId === \"workspace-app\"\n ? (normalizedText(options.getWorkspaceAppIconFallbackUrl?.(match)) ??\n workspaceAppIconFallbackUrlFromTriggerMatch(match))\n : null) ??\n null\n );\n}\n\nfunction resolveMentionRowThumbnailUrl<\n TMatch extends RichTextTriggerQueryMatch\n>(\n match: TMatch,\n presentation: RichTextMentionPresentation | null,\n options: Pick<MentionTriggerRowItemOptions<TMatch>, \"getFileThumbnailUrl\">\n): string | null {\n return (\n normalizedText(options.getFileThumbnailUrl?.(match)) ??\n normalizedText(presentation?.thumbnailUrl) ??\n normalizedText(readStringProperty(match.item, \"thumbnailUrl\")) ??\n (isFileMentionProvider(match.providerId)\n ? normalizedText(match.iconUrl)\n : null) ??\n null\n );\n}\n\nfunction resolveMentionRowFileVisualKind<\n TMatch extends RichTextTriggerQueryMatch\n>(\n match: TMatch,\n options: Pick<\n MentionTriggerRowItemOptions<TMatch>,\n \"getFileEntryKind\" | \"getFileMentionNavigation\" | \"getFileVisualKind\"\n >\n): MentionFileVisualKind {\n const override = options.getFileVisualKind?.(match);\n if (override) {\n return override;\n }\n return resolveMentionFileVisualKind({\n baseVisualKind: inferMentionFileVisualKind(\n markdownLinkHref(match) ??\n normalizedText(match.subtitle) ??\n normalizedText(match.label) ??\n match.key\n ),\n entryKind: resolveFileEntryKind(match, options),\n mentionNavigation: resolveFileMentionNavigation(match, options)\n });\n}\n\nfunction resolveMentionRowStatusTag<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n variant: MentionRowStatusVariant,\n options: Pick<MentionTriggerRowItemOptions<TMatch>, \"getStatusTag\">\n): MentionRowStatusTag | null {\n return (\n options.getStatusTag?.(match, variant) ??\n mentionRowStatusTagFromPresentation(match, { variant })\n );\n}\n\nfunction resolveFileEntryKind<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n options: Pick<MentionTriggerRowItemOptions<TMatch>, \"getFileEntryKind\">\n): string | null {\n return (\n normalizedText(options.getFileEntryKind?.(match)) ??\n normalizedText(readStringProperty(match.item, \"entryKind\")) ??\n normalizedText(readStringProperty(match.item, \"kind\")) ??\n null\n );\n}\n\nfunction resolveFileMentionNavigation<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n options: Pick<\n MentionTriggerRowItemOptions<TMatch>,\n \"getFileMentionNavigation\"\n >\n): string | null {\n return (\n normalizedText(options.getFileMentionNavigation?.(match)) ??\n normalizedText(readStringProperty(match.item, \"mentionNavigation\")) ??\n null\n );\n}\n\nfunction mentionReferenceProviderKind(\n providerId: string\n): MentionReferenceProviderKind {\n if (providerId === \"workspace-app\") {\n return \"workspace-app\";\n }\n if (providerId === \"workspace-issue\") {\n return \"workspace-issue\";\n }\n if (providerId === \"agent-session\") {\n return \"agent-session\";\n }\n if (providerId === \"agent-generated-file\") {\n return \"agent-generated-file\";\n }\n if (providerId === \"file\") {\n return \"file\";\n }\n return \"generic\";\n}\n\nfunction isFileMentionProvider(providerId: string): boolean {\n return providerId === \"file\" || providerId === \"agent-generated-file\";\n}\n\nfunction mentionPresentation(\n match: RichTextTriggerQueryMatch\n): RichTextMentionPresentation | null {\n return match.insertResult.kind === \"mention\"\n ? (match.insertResult.mention.presentation ?? null)\n : null;\n}\n\nfunction mentionEntityId(match: RichTextTriggerQueryMatch): string | null {\n return match.insertResult.kind === \"mention\"\n ? (normalizedText(match.insertResult.mention.entityId) ?? null)\n : null;\n}\n\nfunction markdownLinkHref(match: RichTextTriggerQueryMatch): string | null {\n return match.insertResult.kind === \"markdown-link\"\n ? (normalizedText(match.insertResult.href) ?? null)\n : null;\n}\n\nfunction inferMentionFileVisualKind(pathOrName: string): MentionFileVisualKind {\n const normalized = pathOrName.trim().toLowerCase();\n if (!normalized) {\n return \"document\";\n }\n if (normalized.endsWith(\"/\")) {\n return \"folder\";\n }\n const extension = normalized.match(/\\.([a-z0-9]+)(?:[?#].*)?$/)?.[1] ?? \"\";\n if (\n [\"apng\", \"avif\", \"gif\", \"jpeg\", \"jpg\", \"png\", \"svg\", \"webp\"].includes(\n extension\n )\n ) {\n return \"image\";\n }\n if ([\"avi\", \"m4v\", \"mkv\", \"mov\", \"mp4\", \"webm\"].includes(extension)) {\n return \"video\";\n }\n if ([\"markdown\", \"md\", \"mdx\"].includes(extension)) {\n return \"markdown\";\n }\n if (\n [\n \"c\",\n \"cpp\",\n \"css\",\n \"go\",\n \"h\",\n \"hpp\",\n \"html\",\n \"java\",\n \"js\",\n \"jsx\",\n \"json\",\n \"kt\",\n \"php\",\n \"py\",\n \"rb\",\n \"rs\",\n \"sh\",\n \"sql\",\n \"swift\",\n \"toml\",\n \"ts\",\n \"tsx\",\n \"xml\",\n \"yaml\",\n \"yml\"\n ].includes(extension)\n ) {\n return \"code\";\n }\n return \"document\";\n}\n\nfunction readStringProperty(value: unknown, key: string): string | undefined {\n if (value === null || typeof value !== \"object\") {\n return undefined;\n }\n const record = value as Readonly<Record<string, unknown>>;\n return typeof record[key] === \"string\" ? record[key] : undefined;\n}\n\nfunction normalizedText(value: string | null | undefined): string | null {\n const normalized = value?.trim() ?? \"\";\n return normalized || null;\n}\n","export interface AtPanelKeyboardActions {\n moveSelection: (delta: 1 | -1) => void;\n commitSelection: () => void;\n close: () => void;\n cycleFilter?: (delta: 1 | -1) => void;\n navigateHierarchy?: (delta: 1 | -1) => boolean;\n}\n\nexport interface AtPanelKeyboardEventLike {\n key: string;\n shiftKey?: boolean;\n preventDefault: () => void;\n}\n\nexport function makeAtPanelKeyDown(actions: AtPanelKeyboardActions) {\n return (event: AtPanelKeyboardEventLike): boolean => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n actions.moveSelection(1);\n return true;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n actions.moveSelection(-1);\n return true;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n actions.close();\n return true;\n }\n if (event.key === \"Tab\" && actions.cycleFilter) {\n event.preventDefault();\n actions.cycleFilter(event.shiftKey ? -1 : 1);\n return true;\n }\n if (event.key === \"ArrowRight\" && actions.navigateHierarchy) {\n if (actions.navigateHierarchy(1)) {\n event.preventDefault();\n return true;\n }\n return false;\n }\n if (event.key === \"ArrowLeft\" && actions.navigateHierarchy) {\n if (actions.navigateHierarchy(-1)) {\n event.preventDefault();\n return true;\n }\n return false;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n actions.commitSelection();\n return true;\n }\n return false;\n };\n}\n\nexport function useAtPanelKeyboard(actions: AtPanelKeyboardActions) {\n return makeAtPanelKeyDown(actions);\n}\n"],"mappings":"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","names":["useEffect","useRef","useState","cn","jsx","cn","useRef","useState","useEffect","jsx","jsx","jsxs","cn","Fragment","jsx","jsxs","cn"]}
1
+ {"version":3,"sources":["../../src/at-panel/MentionPalette.tsx","../../src/at-panel/mentionPaletteScrollbar.tsx","../../src/at-panel/mentionPaletteStateAdapter.ts","../../src/at-panel/MentionPaletteFromState.tsx","../../src/at-panel/MentionPaletteControls.tsx","../../src/at-panel/MentionRow.tsx","../../src/at-panel/mentionRowDataAttributes.ts","../../src/at-panel/mentionReferenceIcon.ts","../../src/at-panel/mentionTriggerRowItem.ts","../../src/at-panel/useAtPanelKeyboard.ts"],"sourcesContent":["import {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type JSX,\n type MutableRefObject,\n type ReactNode\n} from \"react\";\nimport {\n FolderFailedFilledIcon,\n KeyboardFilledIcon\n} from \"@tutti-os/ui-system/icons\";\nimport { UnderlineTabs } from \"@tutti-os/ui-system/components\";\nimport { cn } from \"@tutti-os/ui-system/utils\";\nimport { flattenMentionPaletteEntries } from \"./mentionPaletteEntries.ts\";\nimport { MentionPaletteScrollbar } from \"./mentionPaletteScrollbar.tsx\";\nimport type {\n MentionPaletteGroup,\n MentionPaletteProps,\n MentionPaletteState,\n MentionPaletteTheme\n} from \"./mentionPaletteTypes.ts\";\nimport \"./mentionPalette.css\";\n\nconst DEFAULT_THEME = {\n classNames: {\n palette: \"rich-text-at-mention-palette\",\n header: \"rich-text-at-mention-palette-header\",\n footer: \"rich-text-at-mention-palette-footer\",\n tabs: \"rich-text-at-mention-palette-tabs\",\n scrollRegion: \"rich-text-at-mention-palette-scroll-region\",\n scrollbar: \"rich-text-at-mention-palette-scrollbar\",\n scrollbarThumb: \"rich-text-at-mention-palette-scrollbar-thumb\",\n hint: \"rich-text-at-mention-palette-hint\",\n hintItem: \"rich-text-at-mention-palette-hint-item\",\n hintButton: \"rich-text-at-mention-palette-hint-button\",\n hintSeparator: \"rich-text-at-mention-palette-hint-separator\",\n shortcut: \"rich-text-at-mention-palette-shortcut\",\n shortcutArrow: \"rich-text-at-mention-palette-shortcut--arrow\",\n shortcutButton: \"rich-text-at-mention-palette-shortcut-button\",\n shortcutGroup: \"rich-text-at-mention-palette-shortcut-group\"\n },\n testIds: {\n emptyState: \"rich-text-at-mention-palette-empty-state\",\n hint: \"rich-text-at-mention-palette-hint\",\n scrollbar: \"rich-text-at-mention-palette-scrollbar\",\n loadingSpinner: \"rich-text-at-mention-loading-spinner\"\n },\n groupDividerAttribute: \"data-rich-text-at-mention-group-divider\"\n} as const;\n\ninterface ResolvedMentionPaletteTheme {\n classNames: Required<NonNullable<MentionPaletteTheme[\"classNames\"]>>;\n testIds: Required<NonNullable<MentionPaletteTheme[\"testIds\"]>>;\n groupDividerAttribute: string;\n}\n\nfunction resolveMentionPaletteTheme(\n theme: MentionPaletteTheme | undefined\n): ResolvedMentionPaletteTheme {\n return {\n classNames: { ...DEFAULT_THEME.classNames, ...theme?.classNames },\n testIds: { ...DEFAULT_THEME.testIds, ...theme?.testIds },\n groupDividerAttribute:\n theme?.groupDividerAttribute ?? DEFAULT_THEME.groupDividerAttribute\n };\n}\n\nfunction mentionPaletteRootClassName(\n theme: ResolvedMentionPaletteTheme\n): string {\n return cn(\n DEFAULT_THEME.classNames.palette,\n theme.classNames.palette,\n paletteStyles.palette\n );\n}\n\nconst paletteStyles = {\n palette: \"rich-text-at-mention-palette__shell\",\n header: \"rich-text-at-mention-palette__header\",\n footer: \"rich-text-at-mention-palette__footer\",\n scrollShell: \"rich-text-at-mention-palette__scroll-shell\",\n scrollBody: \"rich-text-at-mention-palette__scroll-body\",\n groups: \"rich-text-at-mention-palette__groups\",\n group: \"rich-text-at-mention-palette__group\",\n groupDivider: \"rich-text-at-mention-palette__group-divider\",\n groupLabel: \"rich-text-at-mention-palette__group-label\",\n groupItems: \"rich-text-at-mention-palette__group-items\",\n groupEmpty: \"rich-text-at-mention-palette__group-empty\",\n rowButton: \"rich-text-at-mention-palette__row-button\",\n expandButton: \"rich-text-at-mention-palette__expand-button\",\n emptyState: \"rich-text-at-mention-palette__empty-state\",\n emptyStateInner: \"rich-text-at-mention-palette__empty-state-inner\",\n emptyStateIcon: \"rich-text-at-mention-palette__empty-state-icon\",\n emptyStateText: \"rich-text-at-mention-palette__empty-state-text\",\n loading: \"rich-text-at-mention-palette__loading\",\n loadingSpinner: \"rich-text-at-mention-palette__loading-spinner\"\n} as const;\n\nconst MENTION_PALETTE_LOADING_MIN_VISIBLE_MS = 320;\n\nexport function MentionPalette<TItem>(\n props: MentionPaletteProps<TItem>\n): JSX.Element {\n \"use memo\";\n const {\n state,\n highlightedKey,\n getItemKey,\n renderItem,\n labels,\n hintLabels,\n maxHeightPx,\n onHighlightChange,\n onSelectItem,\n onSelectCategory,\n onSelectFilter,\n onExpandGroup,\n onCycleFilter,\n onMoveSelection,\n onNavigateHierarchy,\n renderListFooter,\n loadingBanner,\n scrollHighlightedIntoViewCentered = false,\n theme: themeProp\n } = props;\n const theme = resolveMentionPaletteTheme(themeProp);\n\n const highlightedOptionRef = useRef<HTMLButtonElement | null>(null);\n const scrollBodyRef = useRef<HTMLDivElement | null>(null);\n const loadingVisibleUntilRef = useRef(0);\n const loadingHideTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const [loadingIndicatorVisible, setLoadingIndicatorVisible] = useState(\n state.status === \"loading\"\n );\n\n const interactiveEntries = flattenMentionPaletteEntries(\n state,\n (item, groupId) => getItemKey(item, findGroup(state.groups, groupId))\n );\n const hasInteractiveEntries = interactiveEntries.some(\n (entry) => entry.type === \"item\" || entry.type === \"expand\"\n );\n\n const showLoadingState =\n loadingIndicatorVisible &&\n (!hasInteractiveEntries || state.mode === \"browse\");\n const showLoadingBanner =\n Boolean(loadingBanner) &&\n loadingIndicatorVisible &&\n hasInteractiveEntries &&\n state.mode === \"results\";\n\n useEffect(() => {\n const highlightedElement = highlightedOptionRef.current;\n if (!highlightedElement) {\n return;\n }\n const scrollContainer = scrollBodyRef.current;\n if (!scrollContainer || !scrollContainer.contains(highlightedElement)) {\n highlightedElement.scrollIntoView({ block: \"nearest\" });\n return;\n }\n if (scrollHighlightedIntoViewCentered) {\n centerElementInScrollContainer(scrollContainer, highlightedElement);\n return;\n }\n scrollElementIntoScrollContainerNearest(\n scrollContainer,\n highlightedElement\n );\n }, [highlightedKey, scrollHighlightedIntoViewCentered]);\n\n useEffect(() => {\n if (loadingHideTimerRef.current !== null) {\n clearTimeout(loadingHideTimerRef.current);\n loadingHideTimerRef.current = null;\n }\n\n if (state.status === \"loading\") {\n loadingVisibleUntilRef.current =\n Date.now() + MENTION_PALETTE_LOADING_MIN_VISIBLE_MS;\n setLoadingIndicatorVisible(true);\n return;\n }\n\n const remainingMs = loadingVisibleUntilRef.current - Date.now();\n if (remainingMs <= 0) {\n setLoadingIndicatorVisible(false);\n return;\n }\n\n loadingHideTimerRef.current = setTimeout(() => {\n loadingHideTimerRef.current = null;\n setLoadingIndicatorVisible(false);\n }, remainingMs);\n\n return () => {\n if (loadingHideTimerRef.current !== null) {\n clearTimeout(loadingHideTimerRef.current);\n loadingHideTimerRef.current = null;\n }\n };\n }, [state.status]);\n\n const paletteMaxHeightStyle: CSSProperties | undefined =\n maxHeightPx > 0 ? { maxHeight: `${maxHeightPx}px` } : undefined;\n\n if (state.status === \"error\") {\n return (\n <div\n className={mentionPaletteRootClassName(theme)}\n style={paletteMaxHeightStyle}\n role=\"listbox\"\n aria-label={labels.listbox ?? labels.tabHint}\n >\n <MentionPaletteEmptyState\n icon=\"folder-failed\"\n label={labels.error}\n testId={theme.testIds.emptyState}\n />\n </div>\n );\n }\n\n const isBrowse = state.mode === \"browse\";\n\n let body: ReactNode;\n if (showLoadingState) {\n body = (\n <MentionPaletteLoading\n label={labels.loading}\n spinnerTestId={theme.testIds.loadingSpinner}\n />\n );\n } else if (state.groups.length === 0) {\n body = (\n <MentionPaletteEmptyState\n icon={isBrowse ? \"keyboard\" : \"folder-failed\"}\n label={labels.empty}\n testId={theme.testIds.emptyState}\n />\n );\n } else {\n body = (\n <MentionPaletteGroups\n state={state}\n highlightedKey={highlightedKey}\n highlightedOptionRef={highlightedOptionRef}\n getItemKey={getItemKey}\n renderItem={renderItem}\n onHighlightChange={onHighlightChange}\n onSelectItem={onSelectItem}\n onExpandGroup={onExpandGroup}\n renderListFooter={renderListFooter}\n groupDividerAttribute={theme.groupDividerAttribute}\n />\n );\n }\n\n return (\n <div\n className={mentionPaletteRootClassName(theme)}\n style={paletteMaxHeightStyle}\n role=\"listbox\"\n aria-label={labels.listbox ?? labels.tabHint}\n >\n <div className={cn(theme.classNames.header, paletteStyles.header)}>\n <UnderlineTabs\n tabs={state.categories.map((category) => ({\n value: category.id,\n label: category.label\n }))}\n value={state.filter}\n onValueChange={isBrowse ? onSelectCategory : onSelectFilter}\n className={theme.classNames.tabs}\n preventMouseDownDefault\n />\n {showLoadingBanner ? loadingBanner : null}\n </div>\n <div className={paletteStyles.scrollShell}>\n <div\n ref={scrollBodyRef}\n className={cn(\n theme.classNames.scrollRegion,\n paletteStyles.scrollBody\n )}\n >\n {body}\n </div>\n <MentionPaletteScrollbar\n scrollBodyRef={scrollBodyRef}\n className={theme.classNames.scrollbar}\n thumbClassName={theme.classNames.scrollbarThumb}\n testId={theme.testIds.scrollbar}\n />\n </div>\n <div className={cn(theme.classNames.footer, paletteStyles.footer)}>\n <MentionPaletteHint\n ariaLabel={labels.tabHint}\n cycleFilterLabel={hintLabels.cycleFilter}\n moveSelectionLabel={hintLabels.moveSelection}\n navigateHierarchyLabel={hintLabels.navigateHierarchy}\n onCycleFilter={onCycleFilter}\n onMoveSelection={onMoveSelection}\n onNavigateHierarchy={onNavigateHierarchy}\n classNames={theme.classNames}\n testId={theme.testIds.hint}\n />\n </div>\n </div>\n );\n}\n\nfunction centerElementInScrollContainer(\n container: HTMLElement,\n element: HTMLElement\n): void {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n const currentScrollTop = container.scrollTop;\n const elementTop = elementRect.top - containerRect.top + currentScrollTop;\n const centeredScrollTop =\n elementTop - (container.clientHeight - elementRect.height) / 2;\n const maxScrollTop = Math.max(\n 0,\n container.scrollHeight - container.clientHeight\n );\n const nextScrollTop = Math.min(Math.max(0, centeredScrollTop), maxScrollTop);\n container.scrollTo({ top: nextScrollTop, behavior: \"auto\" });\n}\n\nfunction scrollElementIntoScrollContainerNearest(\n container: HTMLElement,\n element: HTMLElement\n): void {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n let nextScrollTop = container.scrollTop;\n\n if (elementRect.top < containerRect.top) {\n nextScrollTop -= containerRect.top - elementRect.top;\n } else if (elementRect.bottom > containerRect.bottom) {\n nextScrollTop += elementRect.bottom - containerRect.bottom;\n } else {\n return;\n }\n\n const maxScrollTop = Math.max(\n 0,\n container.scrollHeight - container.clientHeight\n );\n container.scrollTo({\n top: Math.min(Math.max(0, nextScrollTop), maxScrollTop),\n behavior: \"auto\"\n });\n}\n\nfunction findGroup<TItem>(\n groups: MentionPaletteState<TItem>[\"groups\"],\n groupId: string\n): MentionPaletteGroup<TItem> {\n const group = groups.find((candidate) => candidate.id === groupId);\n if (!group) {\n throw new Error(`MentionPalette: unknown group id \"${groupId}\"`);\n }\n return group;\n}\n\nfunction MentionPaletteGroups<TItem>({\n state,\n highlightedKey,\n highlightedOptionRef,\n getItemKey,\n renderItem,\n onHighlightChange,\n onSelectItem,\n onExpandGroup,\n renderListFooter,\n groupDividerAttribute\n}: {\n state: MentionPaletteState<TItem>;\n highlightedKey: string | null;\n highlightedOptionRef: MutableRefObject<HTMLButtonElement | null>;\n getItemKey: (item: TItem, group: MentionPaletteGroup<TItem>) => string;\n renderItem: (item: TItem, ctx: { active: boolean }) => ReactNode;\n onHighlightChange: (key: string) => void;\n onSelectItem: (item: TItem, group: MentionPaletteGroup<TItem>) => void;\n onExpandGroup: (groupId: string) => void;\n renderListFooter?: () => ReactNode;\n groupDividerAttribute: string;\n}): JSX.Element {\n return (\n <div className={paletteStyles.groups}>\n {state.groups.map((group, index) => {\n const showGroupDivider = index > 0 && !group.hideTopDivider;\n return (\n <section\n key={group.id}\n className={cn(paletteStyles.group, group.sectionClassName)}\n >\n {showGroupDivider ? (\n <div\n className={paletteStyles.groupDivider}\n {...{ [groupDividerAttribute]: \"true\" }}\n aria-hidden=\"true\"\n />\n ) : null}\n {group.label ? (\n <div className={paletteStyles.groupLabel}>{group.label}</div>\n ) : null}\n <div className={paletteStyles.groupItems}>\n {group.items.length === 0 && group.emptyLabel ? (\n <div className={paletteStyles.groupEmpty}>\n {group.emptyLabel}\n </div>\n ) : null}\n {group.items.map((item) => {\n const entryKey = `${group.id}:${getItemKey(item, group)}`;\n const isHighlighted = entryKey === highlightedKey;\n return (\n <button\n key={entryKey}\n ref={isHighlighted ? highlightedOptionRef : null}\n type=\"button\"\n className={paletteStyles.rowButton}\n role=\"option\"\n aria-selected={isHighlighted}\n data-highlighted={isHighlighted ? \"\" : undefined}\n onPointerMove={() => {\n if (!isHighlighted) {\n onHighlightChange(entryKey);\n }\n }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onSelectItem(item, group)}\n >\n {renderItem(item, { active: isHighlighted })}\n </button>\n );\n })}\n {group.hasMore ? (\n <button\n key={`expand:${group.id}`}\n ref={\n `expand:${group.id}` === highlightedKey\n ? highlightedOptionRef\n : null\n }\n type=\"button\"\n className={paletteStyles.expandButton}\n data-highlighted={\n `expand:${group.id}` === highlightedKey ? \"\" : undefined\n }\n onPointerMove={() => {\n if (`expand:${group.id}` !== highlightedKey) {\n onHighlightChange(`expand:${group.id}`);\n }\n }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onExpandGroup(group.id)}\n >\n {group.expandLabel ??\n `+${Math.max(0, group.totalCount - group.visibleCount)}`}\n </button>\n ) : null}\n </div>\n </section>\n );\n })}\n {renderListFooter?.()}\n </div>\n );\n}\n\nfunction MentionPaletteEmptyState({\n icon = \"folder-failed\",\n label,\n testId\n}: {\n icon?: \"folder-failed\" | \"keyboard\";\n label: string;\n testId: string;\n}): JSX.Element {\n \"use memo\";\n const EmptyStateIcon =\n icon === \"keyboard\" ? KeyboardFilledIcon : FolderFailedFilledIcon;\n\n return (\n <div\n className={paletteStyles.emptyState}\n data-empty-state-icon={icon}\n data-testid={testId}\n >\n <div className={paletteStyles.emptyStateInner}>\n <EmptyStateIcon\n className={paletteStyles.emptyStateIcon}\n aria-hidden=\"true\"\n />\n <span className={paletteStyles.emptyStateText}>{label}</span>\n </div>\n </div>\n );\n}\n\nfunction MentionPaletteLoading({\n label,\n spinnerTestId\n}: {\n label: string;\n spinnerTestId: string;\n}): JSX.Element {\n \"use memo\";\n return (\n <div className={paletteStyles.loading}>\n <span\n aria-hidden=\"true\"\n className={paletteStyles.loadingSpinner}\n data-testid={spinnerTestId}\n />\n <span>{label}</span>\n </div>\n );\n}\n\nfunction MentionPaletteHint({\n ariaLabel,\n cycleFilterLabel,\n moveSelectionLabel,\n navigateHierarchyLabel,\n onCycleFilter,\n onMoveSelection,\n onNavigateHierarchy,\n classNames,\n testId\n}: {\n ariaLabel: string;\n cycleFilterLabel: string;\n moveSelectionLabel: string;\n navigateHierarchyLabel?: string;\n onCycleFilter: (delta: 1 | -1) => void;\n onMoveSelection: (delta: 1 | -1) => void;\n onNavigateHierarchy?: (delta: 1 | -1) => void;\n classNames: ResolvedMentionPaletteTheme[\"classNames\"];\n testId: string;\n}): JSX.Element {\n \"use memo\";\n const showHierarchyHints = Boolean(\n navigateHierarchyLabel && onNavigateHierarchy\n );\n return (\n <div\n className={classNames.hint}\n aria-label={ariaLabel}\n data-testid={testId}\n >\n <span className={classNames.hintItem}>\n <span className={classNames.shortcutGroup}>\n <button\n className={cn(classNames.shortcut, classNames.shortcutButton)}\n type=\"button\"\n aria-label={`Tab ${cycleFilterLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onCycleFilter(1)}\n >\n {/* i18n-check-ignore: Keyboard key label. */}\n Tab\n </button>\n {!showHierarchyHints ? (\n <>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`← ${cycleFilterLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onCycleFilter(-1)}\n >\n ←\n </button>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`→ ${cycleFilterLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onCycleFilter(1)}\n >\n →\n </button>\n </>\n ) : null}\n </span>\n <span>{cycleFilterLabel}</span>\n </span>\n {showHierarchyHints ? (\n <>\n <span className={classNames.hintSeparator} aria-hidden=\"true\">\n |\n </span>\n <span className={classNames.hintItem}>\n <span className={classNames.shortcutGroup}>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`← ${navigateHierarchyLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onNavigateHierarchy?.(-1)}\n >\n ←\n </button>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`→ ${navigateHierarchyLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onNavigateHierarchy?.(1)}\n >\n →\n </button>\n </span>\n <span>{navigateHierarchyLabel}</span>\n </span>\n </>\n ) : null}\n <span className={classNames.hintSeparator} aria-hidden=\"true\">\n |\n </span>\n <span className={classNames.hintItem}>\n <span className={classNames.shortcutGroup}>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`↑ ${moveSelectionLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onMoveSelection(-1)}\n >\n ↑\n </button>\n <button\n className={cn(\n classNames.shortcut,\n classNames.shortcutArrow,\n classNames.shortcutButton\n )}\n type=\"button\"\n aria-label={`↓ ${moveSelectionLabel}`}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onMoveSelection(1)}\n >\n ↓\n </button>\n </span>\n <span>{moveSelectionLabel}</span>\n </span>\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type JSX,\n type MouseEvent as ReactMouseEvent,\n type RefObject\n} from \"react\";\nimport { cn } from \"@tutti-os/ui-system/utils\";\n\ninterface MentionPaletteScrollbarState {\n scrollable: boolean;\n thumbHeight: number;\n thumbTop: number;\n}\n\ninterface MentionPaletteScrollbarDragState {\n maxScrollTop: number;\n maxThumbTop: number;\n startClientY: number;\n startScrollTop: number;\n}\n\nconst MENTION_PALETTE_SCROLLBAR_MIN_THUMB_HEIGHT = 24;\nconst MENTION_PALETTE_SCROLLBAR_HIDDEN_STATE: MentionPaletteScrollbarState = {\n scrollable: false,\n thumbHeight: 0,\n thumbTop: 0\n};\n\nexport function MentionPaletteScrollbar({\n scrollBodyRef,\n className,\n thumbClassName,\n testId\n}: {\n scrollBodyRef: RefObject<HTMLDivElement | null>;\n className: string;\n thumbClassName: string;\n testId: string;\n}): JSX.Element {\n \"use memo\";\n const trackRef = useRef<HTMLDivElement | null>(null);\n const dragStateRef = useRef<MentionPaletteScrollbarDragState | null>(null);\n const [scrollbarState, setScrollbarState] =\n useState<MentionPaletteScrollbarState>({\n scrollable: false,\n thumbHeight: 0,\n thumbTop: 0\n });\n const [dragging, setDragging] = useState(false);\n\n const hideScrollbar = useCallback((): void => {\n setScrollbarState((previous) =>\n previous.scrollable ||\n previous.thumbHeight !== 0 ||\n previous.thumbTop !== 0\n ? MENTION_PALETTE_SCROLLBAR_HIDDEN_STATE\n : previous\n );\n }, []);\n\n const syncScrollbarState = useCallback((): void => {\n const contentElement = scrollBodyRef.current;\n if (!contentElement) {\n hideScrollbar();\n return;\n }\n\n const { scrollHeight, scrollTop, clientHeight } = contentElement;\n const measuredTrackHeight = trackRef.current?.clientHeight ?? 0;\n const trackHeight =\n measuredTrackHeight > 0 ? measuredTrackHeight : clientHeight;\n const maxScrollTop = Math.max(0, scrollHeight - clientHeight);\n\n if (clientHeight <= 0 || trackHeight <= 0 || maxScrollTop <= 0) {\n hideScrollbar();\n return;\n }\n\n const thumbHeight = Math.max(\n MENTION_PALETTE_SCROLLBAR_MIN_THUMB_HEIGHT,\n Math.round((clientHeight / scrollHeight) * trackHeight)\n );\n const maxThumbTop = Math.max(0, trackHeight - thumbHeight);\n const thumbTop = Math.round((scrollTop / maxScrollTop) * maxThumbTop);\n setScrollbarState((previous) =>\n previous.scrollable &&\n previous.thumbHeight === thumbHeight &&\n previous.thumbTop === thumbTop\n ? previous\n : { scrollable: true, thumbHeight, thumbTop }\n );\n }, [hideScrollbar, scrollBodyRef]);\n\n useEffect(() => {\n const contentElement = scrollBodyRef.current;\n if (!contentElement) {\n hideScrollbar();\n return;\n }\n\n syncScrollbarState();\n contentElement.addEventListener(\"scroll\", syncScrollbarState, {\n passive: true\n });\n const resizeObserver =\n typeof ResizeObserver !== \"undefined\"\n ? new ResizeObserver(syncScrollbarState)\n : null;\n resizeObserver?.observe(contentElement);\n if (trackRef.current) {\n resizeObserver?.observe(trackRef.current);\n }\n const animationFrameId = window.requestAnimationFrame(syncScrollbarState);\n return () => {\n contentElement.removeEventListener(\"scroll\", syncScrollbarState);\n resizeObserver?.disconnect();\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [hideScrollbar, scrollBodyRef, syncScrollbarState]);\n\n useEffect(() => {\n if (!dragging) {\n return;\n }\n\n const handleMouseMove = (event: MouseEvent): void => {\n const contentElement = scrollBodyRef.current;\n const dragState = dragStateRef.current;\n if (!contentElement || !dragState || dragState.maxThumbTop <= 0) {\n return;\n }\n const delta = event.clientY - dragState.startClientY;\n const nextThumbTop =\n (dragState.startScrollTop / dragState.maxScrollTop) *\n dragState.maxThumbTop +\n delta;\n contentElement.scrollTop =\n (Math.min(Math.max(0, nextThumbTop), dragState.maxThumbTop) /\n dragState.maxThumbTop) *\n dragState.maxScrollTop;\n syncScrollbarState();\n };\n\n const handleMouseUp = (): void => {\n dragStateRef.current = null;\n setDragging(false);\n };\n\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [dragging, scrollBodyRef, syncScrollbarState]);\n\n const scrollContentToThumbTop = (thumbTop: number): void => {\n const contentElement = scrollBodyRef.current;\n const trackElement = trackRef.current;\n if (!contentElement || !trackElement) {\n return;\n }\n const maxScrollTop = Math.max(\n 0,\n contentElement.scrollHeight - contentElement.clientHeight\n );\n const maxThumbTop = Math.max(\n 0,\n trackElement.clientHeight - scrollbarState.thumbHeight\n );\n if (maxScrollTop <= 0 || maxThumbTop <= 0) {\n return;\n }\n contentElement.scrollTop =\n (Math.min(Math.max(0, thumbTop), maxThumbTop) / maxThumbTop) *\n maxScrollTop;\n syncScrollbarState();\n };\n\n const handleTrackMouseDown = (\n event: ReactMouseEvent<HTMLDivElement>\n ): void => {\n if (\n event.button !== 0 ||\n !scrollbarState.scrollable ||\n event.target !== event.currentTarget\n ) {\n return;\n }\n event.preventDefault();\n const trackRect = event.currentTarget.getBoundingClientRect();\n scrollContentToThumbTop(\n event.clientY - trackRect.top - scrollbarState.thumbHeight / 2\n );\n };\n\n const handleThumbMouseDown = (\n event: ReactMouseEvent<HTMLDivElement>\n ): void => {\n if (event.button !== 0 || !scrollbarState.scrollable) {\n return;\n }\n const contentElement = scrollBodyRef.current;\n const trackElement = trackRef.current;\n if (!contentElement || !trackElement) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n dragStateRef.current = {\n maxScrollTop: Math.max(\n 0,\n contentElement.scrollHeight - contentElement.clientHeight\n ),\n maxThumbTop: Math.max(\n 0,\n trackElement.clientHeight - scrollbarState.thumbHeight\n ),\n startClientY: event.clientY,\n startScrollTop: contentElement.scrollTop\n };\n setDragging(true);\n };\n\n if (!scrollbarState.scrollable && !dragging) {\n return <div ref={trackRef} className=\"hidden\" aria-hidden=\"true\" />;\n }\n\n return (\n <div\n ref={trackRef}\n className={cn(\"group/status-scrollbar\", className)}\n data-scrollable={scrollbarState.scrollable ? \"true\" : \"false\"}\n data-dragging={dragging ? \"true\" : \"false\"}\n data-testid={testId}\n aria-hidden=\"true\"\n onMouseDown={handleTrackMouseDown}\n >\n <div\n className={thumbClassName}\n onMouseDown={handleThumbMouseDown}\n style={{\n height: `${scrollbarState.thumbHeight}px`,\n transform: `translateY(${scrollbarState.thumbTop}px)`\n }}\n />\n </div>\n );\n}\n","import type {\n MentionPaletteGroup,\n MentionPaletteProps,\n MentionPaletteState\n} from \"./mentionPaletteTypes.ts\";\nimport {\n findMentionPaletteEntry,\n moveMentionPaletteHighlight,\n nextMentionPaletteCategory,\n selectedMentionPaletteItem\n} from \"./mentionPaletteModel.ts\";\n\ntype MentionPaletteCycleCategory =\n | string\n | {\n id: string;\n };\n\nexport interface MentionPaletteStateCallbacks<TItem> {\n onHighlightChange?: (key: string) => void;\n onActiveCategoryIdChange?: (categoryId: string) => void;\n onSelectItem?: (item: TItem) => void;\n onExpandGroup?: (groupId: string) => void;\n}\n\nexport interface MentionPaletteStateAdapterInput<TItem> {\n state: MentionPaletteState<TItem>;\n highlightedKey: string | null;\n /**\n * Optional order used by Tab/Shift+Tab. Defaults to the rendered category\n * order; callers with a surface-specific results-mode tab order can pass it\n * here and keep that policy outside the shell.\n */\n categoryCycleOrder?: readonly MentionPaletteCycleCategory[];\n getItemKey: (item: TItem, groupId: string) => string;\n callbacks?: MentionPaletteStateCallbacks<TItem>;\n}\n\nexport type MentionPaletteStateCommitResult<TItem> =\n | { type: \"none\" }\n | { type: \"category\"; categoryId: string }\n | { type: \"expand\"; groupId: string }\n | { type: \"item\"; item: TItem };\n\nexport interface MentionPaletteStateAdapter<TItem> {\n selectedItem: TItem | null;\n paletteProps: Pick<\n MentionPaletteProps<TItem>,\n | \"state\"\n | \"highlightedKey\"\n | \"getItemKey\"\n | \"onHighlightChange\"\n | \"onSelectItem\"\n | \"onSelectCategory\"\n | \"onSelectFilter\"\n | \"onExpandGroup\"\n | \"onCycleFilter\"\n | \"onMoveSelection\"\n >;\n moveSelection: (delta: 1 | -1) => string | null;\n selectCategory: (categoryId: string) => void;\n expandGroup: (groupId: string) => void;\n cycleCategory: (delta: 1 | -1) => string | null;\n commitHighlighted: () => MentionPaletteStateCommitResult<TItem>;\n}\n\nexport function createMentionPaletteStateAdapter<TItem>(\n input: MentionPaletteStateAdapterInput<TItem>\n): MentionPaletteStateAdapter<TItem> {\n const getPaletteItemKey = (\n item: TItem,\n group: MentionPaletteGroup<TItem>\n ): string => input.getItemKey(item, group.id);\n\n const selectCategory = (categoryId: string): void => {\n input.callbacks?.onActiveCategoryIdChange?.(categoryId);\n };\n\n const expandGroup = (groupId: string): void => {\n input.callbacks?.onExpandGroup?.(groupId);\n };\n\n const moveSelection = (delta: 1 | -1): string | null => {\n const nextKey = moveMentionPaletteHighlight({\n state: input.state,\n currentKey: input.highlightedKey,\n delta,\n getItemKey: input.getItemKey\n });\n if (nextKey !== null) {\n input.callbacks?.onHighlightChange?.(nextKey);\n }\n return nextKey;\n };\n\n const cycleCategory = (delta: 1 | -1): string | null => {\n const cycleCategories = resolveCycleCategories(input.categoryCycleOrder);\n const categories = cycleCategories.length\n ? cycleCategories\n : input.state.categories;\n if (categories.length === 0) {\n return null;\n }\n const nextCategoryId = nextMentionPaletteCategory(\n categories,\n input.state.filter,\n delta\n );\n selectCategory(nextCategoryId);\n return nextCategoryId;\n };\n\n const selectedItem = selectedMentionPaletteItem({\n state: input.state,\n key: input.highlightedKey,\n getItemKey: input.getItemKey\n });\n\n const commitHighlighted = (): MentionPaletteStateCommitResult<TItem> => {\n const activeEntry = findMentionPaletteEntry({\n state: input.state,\n key: input.highlightedKey,\n getItemKey: input.getItemKey\n });\n const fallbackCategoryId = categoryIdFromKey(input.highlightedKey);\n\n if (!activeEntry) {\n if (\n fallbackCategoryId !== null &&\n input.state.categories.some(\n (category) => category.id === fallbackCategoryId\n )\n ) {\n selectCategory(fallbackCategoryId);\n return { type: \"category\", categoryId: fallbackCategoryId };\n }\n return { type: \"none\" };\n }\n\n if (activeEntry.type === \"category\" && activeEntry.categoryId) {\n selectCategory(activeEntry.categoryId);\n return { type: \"category\", categoryId: activeEntry.categoryId };\n }\n\n if (activeEntry.type === \"expand\" && activeEntry.groupId) {\n expandGroup(activeEntry.groupId);\n return { type: \"expand\", groupId: activeEntry.groupId };\n }\n\n if (activeEntry.type === \"item\") {\n const item = selectedMentionPaletteItem({\n state: input.state,\n key: activeEntry.key,\n getItemKey: input.getItemKey\n });\n if (item !== null) {\n input.callbacks?.onSelectItem?.(item);\n return { type: \"item\", item };\n }\n }\n\n return { type: \"none\" };\n };\n\n return {\n selectedItem,\n paletteProps: {\n state: input.state,\n highlightedKey: input.highlightedKey,\n getItemKey: getPaletteItemKey,\n onHighlightChange: (key) => {\n input.callbacks?.onHighlightChange?.(key);\n },\n onSelectItem: (item) => {\n input.callbacks?.onSelectItem?.(item);\n },\n onSelectCategory: selectCategory,\n onSelectFilter: selectCategory,\n onExpandGroup: expandGroup,\n onCycleFilter: cycleCategory,\n onMoveSelection: moveSelection\n },\n moveSelection,\n selectCategory,\n expandGroup,\n cycleCategory,\n commitHighlighted\n };\n}\n\nfunction resolveCycleCategories(\n categories: readonly MentionPaletteCycleCategory[] | undefined\n): readonly { id: string }[] {\n return (\n categories?.map((category) =>\n typeof category === \"string\" ? { id: category } : category\n ) ?? []\n );\n}\n\nfunction categoryIdFromKey(key: string | null): string | null {\n const prefix = \"category:\";\n return key?.startsWith(prefix) ? key.slice(prefix.length) : null;\n}\n","import type { JSX, ReactNode } from \"react\";\nimport { MentionPalette } from \"./MentionPalette.tsx\";\nimport {\n createMentionPaletteStateAdapter,\n type MentionPaletteStateAdapterInput\n} from \"./mentionPaletteStateAdapter.ts\";\nimport type {\n MentionPaletteProps,\n MentionPaletteTheme\n} from \"./mentionPaletteTypes.ts\";\n\nexport interface MentionPaletteFromStateProps<\n TItem\n> extends MentionPaletteStateAdapterInput<TItem> {\n labels: MentionPaletteProps<TItem>[\"labels\"];\n hintLabels: MentionPaletteProps<TItem>[\"hintLabels\"];\n maxHeightPx: number;\n renderItem: (item: TItem, ctx: { active: boolean }) => ReactNode;\n renderListFooter?: () => ReactNode;\n loadingBanner?: ReactNode;\n scrollHighlightedIntoViewCentered?: boolean;\n theme?: MentionPaletteTheme;\n onNavigateHierarchy?: MentionPaletteProps<TItem>[\"onNavigateHierarchy\"];\n}\n\nexport function MentionPaletteFromState<TItem>(\n props: MentionPaletteFromStateProps<TItem>\n): JSX.Element {\n \"use memo\";\n const {\n labels,\n hintLabels,\n maxHeightPx,\n renderItem,\n renderListFooter,\n loadingBanner,\n scrollHighlightedIntoViewCentered,\n theme,\n onNavigateHierarchy,\n ...adapterInput\n } = props;\n const adapter = createMentionPaletteStateAdapter(adapterInput);\n\n return (\n <MentionPalette\n {...adapter.paletteProps}\n labels={labels}\n hintLabels={hintLabels}\n maxHeightPx={maxHeightPx}\n renderItem={renderItem}\n renderListFooter={renderListFooter}\n loadingBanner={loadingBanner}\n scrollHighlightedIntoViewCentered={scrollHighlightedIntoViewCentered}\n theme={theme}\n onNavigateHierarchy={onNavigateHierarchy}\n />\n );\n}\n","import { CheckIcon } from \"@tutti-os/ui-system/icons\";\n\nexport function MentionPaletteSelectIndicator(props: { selected: boolean }) {\n return (\n <span\n aria-hidden=\"true\"\n className=\"rich-text-at-mention-select-indicator\"\n data-selected={props.selected ? \"true\" : \"false\"}\n >\n <CheckIcon size={13} />\n </span>\n );\n}\n\nexport function MentionPaletteMultiSelectFooter(props: {\n count: number;\n countLabel: string;\n cancelLabel: string;\n confirmLabel: string;\n onCancel: () => void;\n onConfirm: () => void;\n}) {\n return (\n <div className=\"rich-text-at-mention-multiselect-footer\">\n <span className=\"rich-text-at-mention-multiselect-footer__count\">\n {props.countLabel}\n </span>\n <div className=\"rich-text-at-mention-multiselect-footer__actions\">\n <button\n type=\"button\"\n className=\"rich-text-at-mention-multiselect-footer__button rich-text-at-mention-multiselect-footer__button--secondary\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={props.onCancel}\n >\n {props.cancelLabel}\n </button>\n <button\n type=\"button\"\n disabled={props.count === 0}\n className=\"rich-text-at-mention-multiselect-footer__button rich-text-at-mention-multiselect-footer__button--primary\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={props.onConfirm}\n >\n {props.confirmLabel}\n </button>\n </div>\n </div>\n );\n}\n","import {\n ArrowLeftIcon,\n Badge,\n FileCodeIcon,\n FileTextIcon,\n FolderIcon,\n ImageFileIcon,\n LocateFolderIcon,\n ProductIcon,\n StatusDot,\n VideoFileIcon,\n cn,\n type IconProps\n} from \"@tutti-os/ui-system\";\nimport type { MentionFileVisualKind } from \"./mentionFileVisualKind.ts\";\nimport {\n mentionRowDataAttribute,\n mentionRowRootDataAttributes,\n type MentionRowDataAttributeMode\n} from \"./mentionRowDataAttributes.ts\";\nimport type {\n MentionRowFileItem,\n MentionRowItem,\n MentionRowSessionItem,\n MentionRowStatusTag\n} from \"./mentionRowTypes.ts\";\nimport { mentionStatusBadgeClassName } from \"./mentionStatusTone.ts\";\n\n/**\n * Default file kind-icon shapes for surfaces that do NOT ship the agent's\n * CSS-masked glyph stylesheet. These mirror the agent's mask glyph shapes\n * (`agentactivity.css`: folder-filled / doc-filled / code-filled / image-filled\n * / video-filled / arrow-left-filled) using ui-system icon components, so a\n * file row renders a real glyph without `agentactivity.css`. The agent composer\n * passes its own `fileIcon` class and keeps rendering masked `<span>` glyphs,\n * except `back` rows which always use {@link ArrowLeftIcon}.\n */\nconst MENTION_FILE_VISUAL_KIND_ICON: Record<\n MentionFileVisualKind,\n (props: IconProps) => React.JSX.Element\n> = {\n back: ArrowLeftIcon,\n folder: FolderIcon,\n document: FileTextIcon,\n // The agent maps markdown to `product-filled.svg`; ProductIcon is the\n // matching boundary-safe ui-system glyph.\n markdown: ProductIcon,\n code: FileCodeIcon,\n image: ImageFileIcon,\n video: VideoFileIcon\n};\n\n/**\n * Structural class-name hooks for the elements a {@link MentionRow} renders that\n * rely on a stylesheet (file icon/thumb, the app fallback kind-icon, and the\n * session avatar placeholder modifier). Every key is optional and defaults to a\n * PACKAGE-OWNED `rich-text-at-mention-*` class whose CSS ships with\n * `mentionPalette.css`, so any consumer renders styled rows out of the box.\n *\n * Surfaces with their own stylesheet (e.g. the agent composer) pass their exact\n * existing class names here so their rendered DOM stays byte-identical.\n */\nexport interface MentionRowClassNames {\n /** The masked file kind-icon `<span>`. */\n fileIcon?: string;\n /** The image-thumbnail wrapper `<span>` (rendered for image files). */\n fileThumb?: string;\n /** The fallback app icon glyph rendered when no `iconUrl` is present. */\n kindIcon?: string;\n /**\n * Modifier class added to the session user avatar `<img>` when the user has no\n * avatar URL and the placeholder asset is shown.\n */\n avatarImgUserPlaceholder?: string;\n}\n\nexport interface MentionRowRenderOptions {\n classNames?: MentionRowClassNames;\n dataAttributeMode?: MentionRowDataAttributeMode;\n /**\n * 当提供时,issue / app 行末尾渲染一个「查看产物文件」入口图标(独立点击热区,\n * 不触发整行选中)。点击回调由调用方注入(如打开引用文件 picker 并定位到该实体)。\n */\n onOpenReferences?: () => void;\n /** 入口图标的无障碍标签 / tooltip 文案。 */\n openReferencesLabel?: string;\n}\n\ninterface ResolvedMentionRowRenderOptions {\n classNames?: MentionRowClassNames;\n dataAttributeMode: MentionRowDataAttributeMode;\n onOpenReferences?: () => void;\n openReferencesLabel?: string;\n}\n\nconst DEFAULT_MENTION_ROW_CLASS_NAMES = {\n fileIcon: \"rich-text-at-mention-file-icon\",\n fileThumb: \"rich-text-at-mention-file-thumb\",\n kindIcon: \"rich-text-at-mention-kind-icon\",\n avatarImgUserPlaceholder: \"rich-text-at-mention-avatar-img--user-placeholder\"\n} as const satisfies Required<MentionRowClassNames>;\n\nfunction resolveMentionRowClassNames(\n classNames?: MentionRowClassNames\n): Required<MentionRowClassNames> {\n return {\n fileIcon: classNames?.fileIcon ?? DEFAULT_MENTION_ROW_CLASS_NAMES.fileIcon,\n fileThumb:\n classNames?.fileThumb ?? DEFAULT_MENTION_ROW_CLASS_NAMES.fileThumb,\n kindIcon: classNames?.kindIcon ?? DEFAULT_MENTION_ROW_CLASS_NAMES.kindIcon,\n avatarImgUserPlaceholder:\n classNames?.avatarImgUserPlaceholder ??\n DEFAULT_MENTION_ROW_CLASS_NAMES.avatarImgUserPlaceholder\n };\n}\n\nfunction resolveMentionRowRenderOptions(\n options?: MentionRowClassNames | MentionRowRenderOptions\n): ResolvedMentionRowRenderOptions {\n if (isMentionRowRenderOptions(options)) {\n return {\n classNames: options.classNames,\n dataAttributeMode: options.dataAttributeMode ?? \"shared\",\n onOpenReferences: options.onOpenReferences,\n openReferencesLabel: options.openReferencesLabel\n };\n }\n return {\n classNames: options,\n dataAttributeMode: \"shared\"\n };\n}\n\nfunction isMentionRowRenderOptions(\n options: MentionRowClassNames | MentionRowRenderOptions | undefined\n): options is MentionRowRenderOptions {\n return (\n options !== undefined &&\n (\"classNames\" in options || \"dataAttributeMode\" in options)\n );\n}\n\n/**\n * Render the inner content of a single `@`-mention palette row from a\n * fully-resolved {@link MentionRowItem}. The surrounding option button / active\n * state is provided by the shared `MentionPalette` shell; this renders only the\n * row body.\n *\n * Pass {@link classNames} to override the package-owned structural class hooks\n * (e.g. so the agent composer keeps emitting its own stylesheet's class names).\n */\nexport function renderMentionRow(\n item: MentionRowItem,\n options?: MentionRowClassNames | MentionRowRenderOptions\n): React.ReactNode {\n const {\n classNames,\n dataAttributeMode,\n onOpenReferences,\n openReferencesLabel\n } = resolveMentionRowRenderOptions(options);\n const resolved = resolveMentionRowClassNames(classNames);\n const referencesButton = onOpenReferences ? (\n <MentionOpenReferencesButton\n label={openReferencesLabel}\n onOpenReferences={onOpenReferences}\n dataAttributeMode={dataAttributeMode}\n />\n ) : null;\n if (item.kind === \"file\") {\n return (\n <MentionFileRow\n item={item}\n classNames={resolved}\n dataAttributeMode={dataAttributeMode}\n />\n );\n }\n\n if (item.kind === \"plain\") {\n return (\n <span className=\"rich-text-at-mention-row rich-text-at-mention-row--plain\">\n {item.leading}\n <span className=\"rich-text-at-mention-row__text-stack\">\n <span className=\"rich-text-at-mention-row__title\">{item.label}</span>\n {item.description ? (\n <span className=\"rich-text-at-mention-row__description\">\n {item.description}\n </span>\n ) : null}\n </span>\n </span>\n );\n }\n\n if (item.kind === \"session\") {\n return (\n <span className=\"rich-text-at-mention-row rich-text-at-mention-row--session\">\n <span className=\"rich-text-at-mention-row__leading\">\n <MentionSessionAvatarStack\n item={item}\n classNames={resolved}\n dataAttributeMode={dataAttributeMode}\n />\n <span className=\"rich-text-at-mention-row__session-title\">\n <MentionSessionTitle item={item} />\n </span>\n </span>\n {item.statusTag ? (\n <MentionStatusBadge\n statusTag={item.statusTag}\n dataAttributeMode={dataAttributeMode}\n />\n ) : null}\n </span>\n );\n }\n\n if (item.kind === \"app\") {\n return (\n <span className=\"rich-text-at-mention-row rich-text-at-mention-row--app\">\n <MentionWorkspaceAppIcon\n iconUrl={item.iconUrl}\n kindIconClassName={resolved.kindIcon}\n dataAttributeMode={dataAttributeMode}\n />\n <span className=\"rich-text-at-mention-row__app-text\">\n <span className=\"rich-text-at-mention-row__app-name\">\n {item.name}\n </span>\n {item.description ? (\n <span className=\"rich-text-at-mention-row__app-description\">\n {item.description}\n </span>\n ) : null}\n </span>\n {referencesButton}\n </span>\n );\n }\n\n if (item.kind === \"app-factory\") {\n return (\n <span className=\"rich-text-at-mention-row__text-stack\">\n <span className=\"rich-text-at-mention-row__title\">{item.name}</span>\n </span>\n );\n }\n\n return (\n <span className=\"rich-text-at-mention-row rich-text-at-mention-row--issue\">\n <span className=\"rich-text-at-mention-row__text-stack rich-text-at-mention-row__text-stack--fill\">\n <span className=\"rich-text-at-mention-row__inline\">\n <span className=\"rich-text-at-mention-row__title\">{item.title}</span>\n {item.statusTag ? (\n <MentionStatusBadge\n statusTag={item.statusTag}\n dataAttributeMode={dataAttributeMode}\n />\n ) : null}\n </span>\n {item.creatorName ? (\n <span className=\"rich-text-at-mention-row__description\">\n {item.creatorName}\n </span>\n ) : null}\n </span>\n {referencesButton}\n </span>\n );\n}\n\n/**\n * 「查看产物文件」入口图标。issue / app 行末尾的独立点击热区:点击只触发\n * {@link onOpenReferences}(如打开引用文件 picker 并定位),阻断冒泡以免触发整行选中。\n * 行外层按钮的 `[&_svg]:pointer-events-none` 使图标本身不吃事件,点击落在此 `<span>` 上。\n */\nfunction MentionOpenReferencesButton({\n label,\n onOpenReferences,\n dataAttributeMode\n}: {\n label?: string;\n onOpenReferences: () => void;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n return (\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label={label}\n title={label}\n className=\"rich-text-at-mention-row__open-references\"\n {...mentionRowDataAttribute(dataAttributeMode, \"openReferences\", \"true\")}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onOpenReferences();\n }}\n >\n <LocateFolderIcon size={16} />\n </span>\n );\n}\n\nfunction MentionFileRow({\n item,\n classNames,\n dataAttributeMode\n}: {\n item: MentionRowFileItem;\n classNames: Required<MentionRowClassNames>;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n return (\n <span\n className=\"rich-text-at-mention-row rich-text-at-mention-row--file\"\n {...mentionRowRootDataAttributes(dataAttributeMode, \"file\")}\n {...(item.entryKind\n ? mentionRowDataAttribute(\n dataAttributeMode,\n \"fileEntryKind\",\n item.entryKind\n )\n : {})}\n {...mentionRowDataAttribute(\n dataAttributeMode,\n \"fileVisualKind\",\n item.visualKind\n )}\n {...(item.mentionNavigation\n ? mentionRowDataAttribute(\n dataAttributeMode,\n \"navigation\",\n item.mentionNavigation\n )\n : {})}\n >\n <MentionFileIcon\n item={item}\n classNames={classNames}\n dataAttributeMode={dataAttributeMode}\n />\n <span className=\"rich-text-at-mention-row__file-text\">\n <span className=\"rich-text-at-mention-row__title\">{item.name}</span>\n {item.childCountLabel ? (\n <span className=\"rich-text-at-mention-row__file-count\">\n {item.childCountLabel}\n </span>\n ) : null}\n </span>\n </span>\n );\n}\n\nfunction MentionFileIcon({\n item,\n classNames,\n dataAttributeMode\n}: {\n item: MentionRowFileItem;\n classNames: Required<MentionRowClassNames>;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n const thumbnailUrl =\n item.visualKind === \"image\" ? item.thumbnailUrl?.trim() || \"\" : \"\";\n if (thumbnailUrl) {\n return (\n <span\n className={classNames.fileThumb}\n {...mentionRowDataAttribute(dataAttributeMode, \"fileThumb\", \"true\")}\n aria-hidden=\"true\"\n >\n <img\n src={thumbnailUrl}\n alt=\"\"\n className=\"rich-text-at-mention-row__media\"\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n </span>\n );\n }\n\n // Back navigation always renders the ui-system back glyph so every surface\n // (including the agent composer's CSS-masked file icons) shares one source.\n if (item.visualKind === \"back\") {\n return (\n <span\n className={cn(\n classNames.fileIcon,\n \"rich-text-at-mention-file-icon--glyph\"\n )}\n {...mentionRowDataAttribute(\n dataAttributeMode,\n \"fileVisualKind\",\n item.visualKind\n )}\n aria-hidden=\"true\"\n >\n <ArrowLeftIcon size={16} />\n </span>\n );\n }\n\n // Surfaces that ship a custom file-icon stylesheet (e.g. the agent composer\n // via `agentactivity.css`) render the empty CSS-masked `<span>` so their DOM\n // stays byte-identical. Surfaces using the package default class have no such\n // stylesheet, so render a real ui-system kind glyph instead of an empty box.\n const usesDefaultFileIcon =\n classNames.fileIcon === DEFAULT_MENTION_ROW_CLASS_NAMES.fileIcon;\n if (usesDefaultFileIcon) {\n const Icon = MENTION_FILE_VISUAL_KIND_ICON[item.visualKind];\n return (\n <span\n className={cn(\n classNames.fileIcon,\n \"rich-text-at-mention-file-icon--glyph\"\n )}\n {...mentionRowDataAttribute(\n dataAttributeMode,\n \"fileVisualKind\",\n item.visualKind\n )}\n aria-hidden=\"true\"\n >\n <Icon size={16} />\n </span>\n );\n }\n\n return (\n <span\n className={classNames.fileIcon}\n {...mentionRowDataAttribute(\n dataAttributeMode,\n \"fileVisualKind\",\n item.visualKind\n )}\n aria-hidden=\"true\"\n />\n );\n}\n\nfunction MentionWorkspaceAppIcon({\n iconUrl,\n kindIconClassName,\n dataAttributeMode\n}: {\n iconUrl?: string | null;\n kindIconClassName: string;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n const normalizedIconUrl = iconUrl?.trim() ?? \"\";\n return (\n <span\n className=\"rich-text-at-mention-app-icon\"\n {...mentionRowDataAttribute(dataAttributeMode, \"appIcon\", \"true\")}\n data-workspace-app-icon=\"true\"\n aria-hidden=\"true\"\n >\n {normalizedIconUrl ? (\n <img\n src={normalizedIconUrl}\n alt=\"\"\n className=\"rich-text-at-mention-row__media\"\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n ) : (\n <span\n className={cn(\n kindIconClassName,\n \"rich-text-at-mention-kind-icon--app\"\n )}\n />\n )}\n </span>\n );\n}\n\nfunction MentionSessionAvatarStack({\n item,\n classNames,\n dataAttributeMode\n}: {\n item: MentionRowSessionItem;\n classNames: Required<MentionRowClassNames>;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n const showUserAvatar = item.showUserAvatar !== false;\n if (!showUserAvatar) {\n return (\n <span\n className={cn(\n \"rich-text-at-mention-avatar-stack\",\n \"rich-text-at-mention-avatar-stack--agent-only\"\n )}\n aria-hidden=\"true\"\n >\n <span\n className=\"rich-text-at-mention-avatar rich-text-at-mention-avatar--agent\"\n {...mentionRowDataAttribute(dataAttributeMode, \"agentAvatar\", \"true\")}\n >\n <img\n src={item.agentIconUrl}\n alt=\"\"\n className=\"rich-text-at-mention-row__media\"\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n </span>\n </span>\n );\n }\n\n const userAvatarUrl = item.userAvatarUrl?.trim() ?? \"\";\n const placeholderUrl = item.userAvatarPlaceholderUrl;\n const userImageUrl = userAvatarUrl || placeholderUrl;\n return (\n <span className=\"rich-text-at-mention-avatar-stack\" aria-hidden=\"true\">\n <span\n className=\"rich-text-at-mention-avatar rich-text-at-mention-avatar--user\"\n {...mentionRowDataAttribute(dataAttributeMode, \"userAvatar\", \"true\")}\n >\n <img\n src={userImageUrl}\n alt=\"\"\n className={cn(\n \"rich-text-at-mention-row__media\",\n !userAvatarUrl && classNames.avatarImgUserPlaceholder\n )}\n decoding=\"async\"\n loading=\"lazy\"\n referrerPolicy=\"no-referrer\"\n draggable={false}\n onError={(event) => {\n if (event.currentTarget.dataset.fallbackAvatarApplied === \"true\") {\n return;\n }\n event.currentTarget.dataset.fallbackAvatarApplied = \"true\";\n event.currentTarget.src = placeholderUrl;\n event.currentTarget.classList.add(\n classNames.avatarImgUserPlaceholder\n );\n }}\n />\n </span>\n <span\n className=\"rich-text-at-mention-avatar rich-text-at-mention-avatar--agent\"\n {...mentionRowDataAttribute(dataAttributeMode, \"agentAvatar\", \"true\")}\n >\n <img\n src={item.agentIconUrl}\n alt=\"\"\n className=\"rich-text-at-mention-row__media\"\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n </span>\n </span>\n );\n}\n\nfunction MentionSessionTitle({\n item\n}: {\n item: MentionRowSessionItem;\n}): React.JSX.Element {\n return (\n <>\n <span className=\"rich-text-at-mention-row__session-participant\">\n {item.participant}\n </span>\n <span className=\"rich-text-at-mention-row__session-summary\">\n {\" \"}\n {item.summary ?? \"\"}\n </span>\n </>\n );\n}\n\nfunction MentionStatusBadge({\n statusTag,\n dataAttributeMode\n}: {\n statusTag: MentionRowStatusTag;\n dataAttributeMode: MentionRowDataAttributeMode;\n}): React.JSX.Element {\n if (statusTag.variant === \"issue\") {\n return (\n <Badge\n variant=\"secondary\"\n size=\"sm\"\n className={cn(\n \"rich-text-at-mention-status rich-text-at-mention-status--issue\",\n mentionStatusBadgeClassName({\n tone: statusTag.tone,\n variant: \"issue\"\n })\n )}\n {...mentionRowDataAttribute(dataAttributeMode, \"statusTag\", \"true\")}\n {...(statusTag.dataStatus\n ? { \"data-status\": statusTag.dataStatus }\n : {})}\n data-tone={statusTag.tone}\n >\n {statusTag.label}\n </Badge>\n );\n }\n\n return (\n <Badge\n variant=\"secondary\"\n size=\"sm\"\n className={cn(\n \"rich-text-at-mention-status rich-text-at-mention-status--activity\",\n mentionStatusBadgeClassName({\n tone: statusTag.tone,\n variant: \"activity\"\n })\n )}\n {...mentionRowDataAttribute(dataAttributeMode, \"statusTag\", \"true\")}\n {...(statusTag.dataStatus ? { \"data-status\": statusTag.dataStatus } : {})}\n data-tone={statusTag.tone}\n title={statusTag.label}\n >\n <StatusDot\n tone={statusTag.tone === \"purple\" ? \"neutral\" : statusTag.tone}\n pulse={statusTag.pulse ?? false}\n size=\"xs\"\n title={statusTag.label}\n />\n <span>{statusTag.label}</span>\n </Badge>\n );\n}\n","import type { MentionRowItem } from \"./mentionRowTypes.ts\";\n\nexport type MentionRowDataAttributeMode = \"shared\" | \"agent\";\n\nexport type MentionRowDataAttributeKey =\n | \"agentAvatar\"\n | \"appIcon\"\n | \"fileEntryKind\"\n | \"fileThumb\"\n | \"fileVisualKind\"\n | \"navigation\"\n | \"openReferences\"\n | \"statusTag\"\n | \"userAvatar\";\n\nconst MENTION_ROW_DATA_ATTRIBUTES: Record<\n MentionRowDataAttributeMode,\n Record<MentionRowDataAttributeKey, string>\n> = {\n shared: {\n agentAvatar: \"data-rich-text-at-mention-agent-avatar\",\n appIcon: \"data-rich-text-at-mention-app-icon\",\n fileEntryKind: \"data-rich-text-at-mention-file-entry-kind\",\n fileThumb: \"data-rich-text-at-mention-file-thumb\",\n fileVisualKind: \"data-rich-text-at-mention-file-visual-kind\",\n navigation: \"data-rich-text-at-mention-navigation\",\n openReferences: \"data-rich-text-at-mention-open-references\",\n statusTag: \"data-rich-text-at-mention-status-tag\",\n userAvatar: \"data-rich-text-at-mention-user-avatar\"\n },\n agent: {\n agentAvatar: \"data-agent-mention-agent-avatar\",\n appIcon: \"data-agent-mention-app-icon\",\n fileEntryKind: \"data-agent-file-entry-kind\",\n fileThumb: \"data-agent-mention-file-thumb\",\n fileVisualKind: \"data-agent-file-visual-kind\",\n navigation: \"data-agent-mention-navigation\",\n openReferences: \"data-agent-mention-open-references\",\n statusTag: \"data-agent-mention-status-tag\",\n userAvatar: \"data-agent-mention-user-avatar\"\n }\n};\n\nexport function mentionRowRootDataAttributes(\n mode: MentionRowDataAttributeMode,\n kind: MentionRowItem[\"kind\"]\n): Record<string, string> {\n return mode === \"agent\"\n ? {\n \"data-agent-file-mention\": \"true\",\n \"data-agent-mention-kind\": kind\n }\n : {\n \"data-rich-text-at-mention-row\": \"true\",\n \"data-rich-text-at-mention-kind\": kind\n };\n}\n\nexport function mentionRowDataAttribute(\n mode: MentionRowDataAttributeMode,\n key: MentionRowDataAttributeKey,\n value: string\n): Record<string, string> {\n return {\n [MENTION_ROW_DATA_ATTRIBUTES[mode][key]]: value\n };\n}\n","import React, { type CSSProperties } from \"react\";\nimport type { MentionFileVisualKind } from \"./mentionFileVisualKind.ts\";\n\nexport type MentionReferenceProviderKind =\n | \"agent-generated-file\"\n | \"agent-session\"\n | \"file\"\n | \"workspace-app\"\n | \"workspace-issue\"\n | \"generic\";\n\nexport interface MentionReferenceLeadingInput {\n className?: string;\n fileVisualKind?: MentionFileVisualKind;\n iconUrl?: string | null;\n imageClassName?: string;\n kind: MentionReferenceProviderKind;\n label?: string | null;\n thumbnailUrl?: string | null;\n}\n\nconst REFERENCE_LEADING_STYLE = {\n alignItems: \"center\",\n background: \"var(--bg-block, var(--block, #0000000a))\",\n borderRadius: \"8px\",\n color: \"var(--rich-text-at-mention-text-secondary, currentColor)\",\n display: \"inline-grid\",\n flex: \"0 0 32px\",\n height: \"32px\",\n justifyItems: \"center\",\n overflow: \"hidden\",\n width: \"32px\"\n} as const satisfies CSSProperties;\n\nconst REFERENCE_IMAGE_STYLE = {\n display: \"block\",\n height: \"100%\",\n objectFit: \"cover\",\n width: \"100%\"\n} as const satisfies CSSProperties;\n\nconst REFERENCE_ICON_STYLE = {\n display: \"block\",\n height: \"18px\",\n width: \"18px\"\n} as const satisfies CSSProperties;\n\nexport function resolveMentionReferenceImageUrl(input: {\n iconUrl?: string | null;\n thumbnailUrl?: string | null;\n}): string | undefined {\n return input.thumbnailUrl?.trim() || input.iconUrl?.trim() || undefined;\n}\n\nexport function renderMentionReferenceLeading(\n input: MentionReferenceLeadingInput\n): React.JSX.Element {\n const imageUrl = resolveMentionReferenceImageUrl(input);\n return React.createElement(\n \"span\",\n {\n \"aria-hidden\": \"true\",\n className: input.className,\n \"data-rich-text-at-mention-reference-kind\": input.kind,\n \"data-rich-text-at-mention-reference-leading\": \"true\",\n style: REFERENCE_LEADING_STYLE\n },\n imageUrl\n ? React.createElement(\"img\", {\n alt: \"\",\n className: input.imageClassName,\n decoding: \"async\",\n draggable: false,\n loading: \"lazy\",\n src: imageUrl,\n style: REFERENCE_IMAGE_STYLE\n })\n : renderMentionReferenceFallbackIcon(input)\n );\n}\n\nfunction renderMentionReferenceFallbackIcon(\n input: Pick<MentionReferenceLeadingInput, \"fileVisualKind\" | \"kind\">\n): React.JSX.Element {\n return React.createElement(\n \"svg\",\n {\n \"aria-hidden\": \"true\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 1.8,\n style: REFERENCE_ICON_STYLE,\n viewBox: \"0 0 24 24\"\n },\n ...referenceIconPaths(input)\n );\n}\n\nfunction referenceIconPaths(\n input: Pick<MentionReferenceLeadingInput, \"fileVisualKind\" | \"kind\">\n): React.ReactNode[] {\n if (input.kind === \"workspace-app\") {\n return [\n React.createElement(\"rect\", {\n height: 7,\n key: \"a\",\n rx: 1.5,\n width: 7,\n x: 4,\n y: 4\n }),\n React.createElement(\"rect\", {\n height: 7,\n key: \"b\",\n rx: 1.5,\n width: 7,\n x: 13,\n y: 4\n }),\n React.createElement(\"rect\", {\n height: 7,\n key: \"c\",\n rx: 1.5,\n width: 7,\n x: 4,\n y: 13\n }),\n React.createElement(\"rect\", {\n height: 7,\n key: \"d\",\n rx: 1.5,\n width: 7,\n x: 13,\n y: 13\n })\n ];\n }\n if (input.kind === \"workspace-issue\") {\n return [\n React.createElement(\"circle\", { cx: 12, cy: 12, key: \"a\", r: 8 }),\n React.createElement(\"path\", { d: \"M8.5 12.5 11 15l4.5-5\", key: \"b\" })\n ];\n }\n if (input.kind === \"agent-session\") {\n return [\n React.createElement(\"path\", {\n d: \"M6 9.5a5 5 0 0 1 5-5h2a5 5 0 0 1 5 5v2.5a5 5 0 0 1-5 5h-1.5L8 19v-2.4A5 5 0 0 1 6 12z\",\n key: \"a\"\n })\n ];\n }\n if (\n input.kind === \"file\" ||\n input.kind === \"agent-generated-file\" ||\n input.fileVisualKind != null\n ) {\n if (input.fileVisualKind === \"folder\" || input.fileVisualKind === \"back\") {\n return [\n React.createElement(\"path\", {\n d: \"M3.5 7.5h6l2 2h9v8a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2z\",\n key: \"a\"\n })\n ];\n }\n if (input.fileVisualKind === \"image\") {\n return [\n React.createElement(\"rect\", {\n height: 14,\n key: \"a\",\n rx: 2,\n width: 16,\n x: 4,\n y: 5\n }),\n React.createElement(\"path\", {\n d: \"m7 16 3.5-3.5 2.5 2.5 2-2 2 3\",\n key: \"b\"\n }),\n React.createElement(\"circle\", { cx: 9, cy: 9, key: \"c\", r: 1 })\n ];\n }\n if (input.fileVisualKind === \"video\") {\n return [\n React.createElement(\"rect\", {\n height: 14,\n key: \"a\",\n rx: 2,\n width: 16,\n x: 4,\n y: 5\n }),\n React.createElement(\"path\", {\n d: \"m10 9 5 3-5 3z\",\n key: \"b\"\n })\n ];\n }\n return [\n React.createElement(\"path\", {\n d: \"M7 3.5h7l4 4V20a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V4.5a1 1 0 0 1 1-1z\",\n key: \"a\"\n }),\n React.createElement(\"path\", { d: \"M14 3.5v4h4\", key: \"b\" })\n ];\n }\n return [\n React.createElement(\"path\", {\n d: \"M9.5 14.5 14.5 9.5\",\n key: \"a\"\n }),\n React.createElement(\"path\", {\n d: \"M8.5 10.5 7 12a3.5 3.5 0 0 0 5 5l1.5-1.5\",\n key: \"b\"\n }),\n React.createElement(\"path\", {\n d: \"M15.5 13.5 17 12a3.5 3.5 0 0 0-5-5l-1.5 1.5\",\n key: \"c\"\n })\n ];\n}\n","import type { ReactNode } from \"react\";\nimport {\n resolveMentionFileThumbnailUrl,\n resolveMentionFileVisualKind,\n type MentionFileVisualKind\n} from \"./mentionFileVisualKind.ts\";\nimport {\n renderMentionReferenceLeading,\n type MentionReferenceProviderKind\n} from \"./mentionReferenceIcon.ts\";\nimport type {\n MentionRowItem,\n MentionRowPlainItem,\n MentionRowStatusTag\n} from \"./mentionRowTypes.ts\";\nimport type {\n MentionRowStatusTone,\n MentionRowStatusVariant\n} from \"./mentionStatusTone.ts\";\nimport type {\n RichTextMentionPresentation,\n RichTextTriggerQueryMatch\n} from \"../types/index.ts\";\n\nexport type MentionTriggerRowProviderId =\n | \"agent-generated-file\"\n | \"agent-session\"\n | \"file\"\n | \"workspace-app\"\n | \"workspace-issue\";\n\nexport interface MentionTriggerRowLeadingContext<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n> {\n description: string | null;\n fileVisualKind?: MentionFileVisualKind;\n iconUrl: string | null;\n label: string;\n match: TMatch;\n providerKind: MentionReferenceProviderKind;\n thumbnailUrl: string | null;\n}\n\nexport interface MentionTriggerRowItemOptions<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n> {\n getAgentIconUrl?: (match: TMatch) => string | null | undefined;\n getChildCountLabel?: (match: TMatch) => string | null | undefined;\n getDescription?: (match: TMatch) => string | null | undefined;\n getFileEntryKind?: (match: TMatch) => string | null | undefined;\n getFileMentionNavigation?: (match: TMatch) => string | null | undefined;\n getFileThumbnailUrl?: (match: TMatch) => string | null | undefined;\n getFileVisualKind?: (\n match: TMatch\n ) => MentionFileVisualKind | null | undefined;\n getStatusTag?: (\n match: TMatch,\n variant: MentionRowStatusVariant\n ) => MentionRowStatusTag | null | undefined;\n getUserAvatarPlaceholderUrl?: (match: TMatch) => string | null | undefined;\n getUserAvatarUrl?: (match: TMatch) => string | null | undefined;\n getWorkspaceAppIconFallbackUrl?: (match: TMatch) => string | null | undefined;\n renderLeading?: (\n context: MentionTriggerRowLeadingContext<TMatch>\n ) => ReactNode | undefined;\n}\n\nconst SUPPORTED_MENTION_TRIGGER_ROW_PROVIDER_IDS = new Set<string>([\n \"agent-generated-file\",\n \"agent-session\",\n \"file\",\n \"workspace-app\",\n \"workspace-issue\"\n]);\n\nexport function richTextTriggerQueryMatchToMentionRowItem<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n>(\n match: TMatch,\n options: MentionTriggerRowItemOptions<TMatch> = {}\n): MentionRowItem {\n const presentation = mentionPresentation(match);\n const label = resolveMentionRowLabel(match);\n const description = resolveMentionRowDescription(match, options);\n const providerKind = mentionReferenceProviderKind(match.providerId);\n const iconUrl = resolveMentionRowIconUrl(match, presentation, options);\n const thumbnailUrl = resolveMentionRowThumbnailUrl(\n match,\n presentation,\n options\n );\n const fileVisualKind = isFileMentionProvider(match.providerId)\n ? resolveMentionRowFileVisualKind(match, options)\n : undefined;\n const customLeading = options.renderLeading?.({\n description,\n fileVisualKind,\n iconUrl,\n label,\n match,\n providerKind,\n thumbnailUrl\n });\n\n if (customLeading !== undefined) {\n return mentionRowPlainItem({\n description,\n label,\n leading: customLeading\n });\n }\n\n if (match.providerId === \"workspace-app\") {\n return {\n kind: \"app\",\n description,\n iconUrl,\n name: label\n };\n }\n\n if (match.providerId === \"workspace-issue\") {\n return {\n kind: \"issue\",\n creatorName: description,\n statusTag: resolveMentionRowStatusTag(match, \"issue\", options),\n title: label\n };\n }\n\n if (isFileMentionProvider(match.providerId)) {\n const entryKind = resolveFileEntryKind(match, options);\n const mentionNavigation = resolveFileMentionNavigation(match, options);\n const visualKind = fileVisualKind ?? \"document\";\n return {\n kind: \"file\",\n childCountLabel: normalizedText(options.getChildCountLabel?.(match)),\n entryKind,\n mentionNavigation,\n name: label,\n thumbnailUrl:\n resolveMentionFileThumbnailUrl({\n thumbnailUrl,\n visualKind\n }) ?? null,\n visualKind\n };\n }\n\n if (match.providerId === \"agent-session\") {\n const session = agentSessionMentionRowItem(match, {\n description,\n iconUrl,\n options,\n presentation\n });\n if (session) {\n return session;\n }\n }\n\n return mentionRowPlainItem({\n description,\n label,\n leading: renderMentionReferenceLeading({\n fileVisualKind,\n iconUrl,\n kind: providerKind,\n label,\n thumbnailUrl\n })\n });\n}\n\nexport function isMentionTriggerRowProviderId(\n providerId: string\n): providerId is MentionTriggerRowProviderId {\n return SUPPORTED_MENTION_TRIGGER_ROW_PROVIDER_IDS.has(providerId);\n}\n\nexport function workspaceAppIconFallbackUrlFromTriggerMatch(\n match: RichTextTriggerQueryMatch\n): string | null {\n const appId = mentionEntityId(match) || match.key.trim();\n if (!appId) {\n return null;\n }\n return `tutti://workspace-apps/${encodeURIComponent(appId)}/icon.png`;\n}\n\nexport function mentionRowStatusTagFromPresentation(\n match: RichTextTriggerQueryMatch,\n input: {\n tone?: MentionRowStatusTone;\n variant: MentionRowStatusVariant;\n }\n): MentionRowStatusTag | null {\n const presentation = mentionPresentation(match);\n const label = normalizedText(presentation?.statusLabel);\n if (!label) {\n return null;\n }\n const dataStatus =\n normalizedText(presentation?.statusDataStatus) ??\n normalizedText(presentation?.status);\n return {\n dataStatus: dataStatus ?? undefined,\n label,\n pulse: presentation?.statusPulse === \"true\",\n tone: input.tone ?? \"neutral\",\n variant: input.variant\n };\n}\n\nfunction agentSessionMentionRowItem<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n input: {\n description: string | null;\n iconUrl: string | null;\n options: MentionTriggerRowItemOptions<TMatch>;\n presentation: RichTextMentionPresentation | null;\n }\n): MentionRowItem | null {\n const agentIconUrl =\n normalizedText(input.options.getAgentIconUrl?.(match)) ??\n normalizedText(input.presentation?.agentIconUrl) ??\n input.iconUrl;\n const userAvatarPlaceholderUrl =\n normalizedText(input.options.getUserAvatarPlaceholderUrl?.(match)) ??\n normalizedText(input.presentation?.userAvatarPlaceholderUrl);\n if (!agentIconUrl || !userAvatarPlaceholderUrl) {\n return null;\n }\n return {\n kind: \"session\",\n agentIconUrl,\n participant:\n normalizedText(input.presentation?.participant) ??\n resolveMentionRowLabel(match),\n statusTag: resolveMentionRowStatusTag(match, \"activity\", input.options),\n summary: input.description,\n userAvatarPlaceholderUrl,\n userAvatarUrl:\n normalizedText(input.options.getUserAvatarUrl?.(match)) ?? null\n };\n}\n\nfunction mentionRowPlainItem(input: {\n description: string | null;\n label: string;\n leading?: ReactNode;\n}): MentionRowPlainItem {\n return {\n kind: \"plain\",\n description: input.description,\n label: input.label,\n leading: input.leading\n };\n}\n\nfunction resolveMentionRowLabel(match: RichTextTriggerQueryMatch): string {\n return (\n normalizedText(\n match.insertResult.kind === \"mention\"\n ? match.insertResult.mention.label\n : match.insertResult.kind === \"markdown-link\"\n ? match.insertResult.label\n : undefined\n ) ??\n normalizedText(match.label) ??\n match.key\n );\n}\n\nfunction resolveMentionRowDescription<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n options: Pick<MentionTriggerRowItemOptions<TMatch>, \"getDescription\">\n): string | null {\n const presentation = mentionPresentation(match);\n return (\n normalizedText(options.getDescription?.(match)) ??\n normalizedText(presentation?.description) ??\n normalizedText(presentation?.subtitle) ??\n normalizedText(match.subtitle) ??\n null\n );\n}\n\nfunction resolveMentionRowIconUrl<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n presentation: RichTextMentionPresentation | null,\n options: Pick<\n MentionTriggerRowItemOptions<TMatch>,\n \"getWorkspaceAppIconFallbackUrl\"\n >\n): string | null {\n return (\n normalizedText(presentation?.iconUrl) ??\n normalizedText(match.iconUrl) ??\n (match.providerId === \"workspace-app\"\n ? (normalizedText(options.getWorkspaceAppIconFallbackUrl?.(match)) ??\n workspaceAppIconFallbackUrlFromTriggerMatch(match))\n : null) ??\n null\n );\n}\n\nfunction resolveMentionRowThumbnailUrl<\n TMatch extends RichTextTriggerQueryMatch\n>(\n match: TMatch,\n presentation: RichTextMentionPresentation | null,\n options: Pick<MentionTriggerRowItemOptions<TMatch>, \"getFileThumbnailUrl\">\n): string | null {\n return (\n normalizedText(options.getFileThumbnailUrl?.(match)) ??\n normalizedText(presentation?.thumbnailUrl) ??\n normalizedText(readStringProperty(match.item, \"thumbnailUrl\")) ??\n (isFileMentionProvider(match.providerId)\n ? normalizedText(match.iconUrl)\n : null) ??\n null\n );\n}\n\nfunction resolveMentionRowFileVisualKind<\n TMatch extends RichTextTriggerQueryMatch\n>(\n match: TMatch,\n options: Pick<\n MentionTriggerRowItemOptions<TMatch>,\n \"getFileEntryKind\" | \"getFileMentionNavigation\" | \"getFileVisualKind\"\n >\n): MentionFileVisualKind {\n const override = options.getFileVisualKind?.(match);\n if (override) {\n return override;\n }\n return resolveMentionFileVisualKind({\n baseVisualKind: inferMentionFileVisualKind(\n markdownLinkHref(match) ??\n normalizedText(match.subtitle) ??\n normalizedText(match.label) ??\n match.key\n ),\n entryKind: resolveFileEntryKind(match, options),\n mentionNavigation: resolveFileMentionNavigation(match, options)\n });\n}\n\nfunction resolveMentionRowStatusTag<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n variant: MentionRowStatusVariant,\n options: Pick<MentionTriggerRowItemOptions<TMatch>, \"getStatusTag\">\n): MentionRowStatusTag | null {\n return (\n options.getStatusTag?.(match, variant) ??\n mentionRowStatusTagFromPresentation(match, { variant })\n );\n}\n\nfunction resolveFileEntryKind<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n options: Pick<MentionTriggerRowItemOptions<TMatch>, \"getFileEntryKind\">\n): string | null {\n return (\n normalizedText(options.getFileEntryKind?.(match)) ??\n normalizedText(readStringProperty(match.item, \"entryKind\")) ??\n normalizedText(readStringProperty(match.item, \"kind\")) ??\n null\n );\n}\n\nfunction resolveFileMentionNavigation<TMatch extends RichTextTriggerQueryMatch>(\n match: TMatch,\n options: Pick<\n MentionTriggerRowItemOptions<TMatch>,\n \"getFileMentionNavigation\"\n >\n): string | null {\n return (\n normalizedText(options.getFileMentionNavigation?.(match)) ??\n normalizedText(readStringProperty(match.item, \"mentionNavigation\")) ??\n null\n );\n}\n\nfunction mentionReferenceProviderKind(\n providerId: string\n): MentionReferenceProviderKind {\n if (providerId === \"workspace-app\") {\n return \"workspace-app\";\n }\n if (providerId === \"workspace-issue\") {\n return \"workspace-issue\";\n }\n if (providerId === \"agent-session\") {\n return \"agent-session\";\n }\n if (providerId === \"agent-generated-file\") {\n return \"agent-generated-file\";\n }\n if (providerId === \"file\") {\n return \"file\";\n }\n return \"generic\";\n}\n\nfunction isFileMentionProvider(providerId: string): boolean {\n return providerId === \"file\" || providerId === \"agent-generated-file\";\n}\n\nfunction mentionPresentation(\n match: RichTextTriggerQueryMatch\n): RichTextMentionPresentation | null {\n return match.insertResult.kind === \"mention\"\n ? (match.insertResult.mention.presentation ?? null)\n : null;\n}\n\nfunction mentionEntityId(match: RichTextTriggerQueryMatch): string | null {\n return match.insertResult.kind === \"mention\"\n ? (normalizedText(match.insertResult.mention.entityId) ?? null)\n : null;\n}\n\nfunction markdownLinkHref(match: RichTextTriggerQueryMatch): string | null {\n return match.insertResult.kind === \"markdown-link\"\n ? (normalizedText(match.insertResult.href) ?? null)\n : null;\n}\n\nfunction inferMentionFileVisualKind(pathOrName: string): MentionFileVisualKind {\n const normalized = pathOrName.trim().toLowerCase();\n if (!normalized) {\n return \"document\";\n }\n if (normalized.endsWith(\"/\")) {\n return \"folder\";\n }\n const extension = normalized.match(/\\.([a-z0-9]+)(?:[?#].*)?$/)?.[1] ?? \"\";\n if (\n [\"apng\", \"avif\", \"gif\", \"jpeg\", \"jpg\", \"png\", \"svg\", \"webp\"].includes(\n extension\n )\n ) {\n return \"image\";\n }\n if ([\"avi\", \"m4v\", \"mkv\", \"mov\", \"mp4\", \"webm\"].includes(extension)) {\n return \"video\";\n }\n if ([\"markdown\", \"md\", \"mdx\"].includes(extension)) {\n return \"markdown\";\n }\n if (\n [\n \"c\",\n \"cpp\",\n \"css\",\n \"go\",\n \"h\",\n \"hpp\",\n \"html\",\n \"java\",\n \"js\",\n \"jsx\",\n \"json\",\n \"kt\",\n \"php\",\n \"py\",\n \"rb\",\n \"rs\",\n \"sh\",\n \"sql\",\n \"swift\",\n \"toml\",\n \"ts\",\n \"tsx\",\n \"xml\",\n \"yaml\",\n \"yml\"\n ].includes(extension)\n ) {\n return \"code\";\n }\n return \"document\";\n}\n\nfunction readStringProperty(value: unknown, key: string): string | undefined {\n if (value === null || typeof value !== \"object\") {\n return undefined;\n }\n const record = value as Readonly<Record<string, unknown>>;\n return typeof record[key] === \"string\" ? record[key] : undefined;\n}\n\nfunction normalizedText(value: string | null | undefined): string | null {\n const normalized = value?.trim() ?? \"\";\n return normalized || null;\n}\n","export interface AtPanelKeyboardActions {\n moveSelection: (delta: 1 | -1) => void;\n commitSelection: () => void;\n close: () => void;\n cycleFilter?: (delta: 1 | -1) => void;\n navigateHierarchy?: (delta: 1 | -1) => boolean;\n}\n\nexport interface AtPanelKeyboardEventLike {\n key: string;\n shiftKey?: boolean;\n preventDefault: () => void;\n}\n\nexport function makeAtPanelKeyDown(actions: AtPanelKeyboardActions) {\n return (event: AtPanelKeyboardEventLike): boolean => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n actions.moveSelection(1);\n return true;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n actions.moveSelection(-1);\n return true;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n actions.close();\n return true;\n }\n if (event.key === \"Tab\" && actions.cycleFilter) {\n event.preventDefault();\n actions.cycleFilter(event.shiftKey ? -1 : 1);\n return true;\n }\n if (event.key === \"ArrowRight\" && actions.navigateHierarchy) {\n if (actions.navigateHierarchy(1)) {\n event.preventDefault();\n return true;\n }\n return false;\n }\n if (event.key === \"ArrowLeft\" && actions.navigateHierarchy) {\n if (actions.navigateHierarchy(-1)) {\n event.preventDefault();\n return true;\n }\n return false;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n actions.commitSelection();\n return true;\n }\n return false;\n };\n}\n\nexport function useAtPanelKeyboard(actions: AtPanelKeyboardActions) {\n return makeAtPanelKeyDown(actions);\n}\n"],"mappings":"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","names":["useEffect","useRef","useState","cn","jsx","cn","useRef","useState","useEffect","jsx","jsx","jsxs","cn","Fragment","jsx","jsxs","cn"]}
@@ -191,7 +191,7 @@ declare function resolveMentionFileThumbnailUrl(input: {
191
191
  * presentational mapping so the styling stays in one place and identical across
192
192
  * surfaces.
193
193
  */
194
- type MentionRowStatusTone = "amber" | "blue" | "green" | "neutral" | "red";
194
+ type MentionRowStatusTone = "amber" | "blue" | "green" | "neutral" | "purple" | "red";
195
195
  type MentionRowStatusVariant = "activity" | "issue";
196
196
  /**
197
197
  * Text classes for agent activity status signals. Activity rows already include
@@ -15,7 +15,7 @@ import {
15
15
  resolveMentionFileThumbnailUrl,
16
16
  resolveMentionFileVisualKind,
17
17
  selectedMentionPaletteItem
18
- } from "../chunk-DWBETNOQ.js";
18
+ } from "../chunk-HMAUQU6Q.js";
19
19
  export {
20
20
  activityMentionStatusBadgeClassName,
21
21
  activityMentionStatusTone,
@@ -190,8 +190,14 @@ function activityMentionStatusBadgeClassName(tone) {
190
190
  }
191
191
  function issueMentionStatusBadgeClassName(tone) {
192
192
  switch (tone) {
193
+ case "blue":
194
+ return "bg-[color:color-mix(in_srgb,var(--status-running)_12%,transparent)] text-[var(--status-running)]";
195
+ case "amber":
196
+ return "bg-[color:color-mix(in_srgb,var(--state-warning)_12%,transparent)] text-[var(--state-warning)]";
193
197
  case "green":
194
198
  return "bg-[color:color-mix(in_srgb,var(--state-success)_12%,transparent)] text-[var(--state-success)]";
199
+ case "purple":
200
+ return "bg-[color-mix(in_srgb,var(--rich-text-mention-issue)_12%,transparent)] text-[var(--rich-text-mention-issue)]";
195
201
  case "red":
196
202
  return "bg-[var(--on-danger)] text-[var(--state-danger)]";
197
203
  default:
@@ -265,4 +271,4 @@ export {
265
271
  resolveMentionFileVisualKind,
266
272
  resolveMentionFileThumbnailUrl
267
273
  };
268
- //# sourceMappingURL=chunk-DWBETNOQ.js.map
274
+ //# sourceMappingURL=chunk-HMAUQU6Q.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/at-panel/mentionPaletteEntries.ts","../src/at-panel/mentionPaletteModel.ts","../src/at-panel/mentionStatusTone.ts","../src/at-panel/mentionFileVisualKind.ts"],"sourcesContent":["import type {\n MentionPaletteEntry,\n MentionPaletteState\n} from \"./mentionPaletteTypes.ts\";\n\n/**\n * Returns true when at least one group has items or a \"load more\" trigger,\n * i.e. there is something interactive to render beyond category headers.\n */\nfunction hasInteractiveGroupEntries<TItem>(\n groups: MentionPaletteState<TItem>[\"groups\"]\n): boolean {\n return groups.some((group) => group.items.length > 0 || group.hasMore);\n}\n\n/**\n * Flatten the palette state into a stable, ordered list of navigable entries.\n *\n * Mirrors the ordering and key format of `flattenAgentMentionPaletteEntries`\n * from AgentFileMentionPalette.tsx, but is generic over item type.\n *\n * Key formats:\n * category entry → `category:<categoryId>`\n * item entry → `<groupId>:<getItemKey(item, groupId)>`\n * expand entry → `expand:<groupId>`\n */\nexport function flattenMentionPaletteEntries<TItem>(\n state: MentionPaletteState<TItem>,\n getItemKey: (item: TItem, groupId: string) => string\n): MentionPaletteEntry[] {\n // Browse mode with no interactive group content → show category nav only\n if (state.mode === \"browse\" && !hasInteractiveGroupEntries(state.groups)) {\n return state.categories.map((category) => ({\n key: `category:${category.id}`,\n type: \"category\" as const,\n categoryId: category.id\n }));\n }\n\n const entries: MentionPaletteEntry[] = [];\n\n for (const group of state.groups) {\n group.items.forEach((item, index) => {\n entries.push({\n key: `${group.id}:${getItemKey(item, group.id)}`,\n type: \"item\",\n groupId: group.id,\n itemIndex: index\n });\n });\n\n if (group.hasMore) {\n entries.push({\n key: `expand:${group.id}`,\n type: \"expand\",\n groupId: group.id\n });\n }\n }\n\n return entries;\n}\n","import type {\n MentionPaletteCategory,\n MentionPaletteEntry,\n MentionPaletteGroup,\n MentionPaletteState\n} from \"./mentionPaletteTypes.ts\";\nimport { flattenMentionPaletteEntries } from \"./mentionPaletteEntries.ts\";\nimport type { RichTextTriggerQueryMatch } from \"../types/trigger.ts\";\n\nexport interface MentionPaletteModelInput<TItem> {\n activeCategoryId: string;\n categories: readonly MentionPaletteCategory[];\n groups: readonly MentionPaletteGroup<TItem>[];\n loading: boolean;\n query?: string;\n mode?: \"browse\" | \"results\";\n}\n\nexport interface MentionPaletteSectionConfig<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n> {\n id: string;\n label?: string;\n providerIds?: readonly string[];\n matches?: (match: TMatch) => boolean;\n emptyLabel?: string;\n}\n\nexport interface MentionPaletteCategoryConfig<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n> {\n id: string;\n label: string;\n providerIds?: readonly string[];\n matches?: (match: TMatch) => boolean;\n emptyLabel?: string;\n sections?: readonly MentionPaletteSectionConfig<TMatch>[];\n}\n\nexport function mentionPaletteGroup<TItem>(input: {\n id: string;\n label?: string;\n items: readonly TItem[];\n emptyLabel?: string;\n}): MentionPaletteGroup<TItem> {\n return {\n id: input.id,\n label: input.label,\n items: input.items,\n totalCount: input.items.length,\n visibleCount: input.items.length,\n hasMore: false,\n emptyLabel: input.emptyLabel\n };\n}\n\nexport function buildMentionPaletteModel<TItem>(\n input: MentionPaletteModelInput<TItem>\n): MentionPaletteState<TItem> {\n return {\n status: input.loading ? \"loading\" : \"ready\",\n query: input.query ?? \"\",\n mode: input.mode ?? \"results\",\n filter: input.activeCategoryId,\n categories: input.categories,\n groups: input.groups,\n error: null\n };\n}\n\nexport function buildMentionPaletteModelFromTriggerMatches<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n>(input: {\n activeCategoryId: string;\n categories: readonly MentionPaletteCategoryConfig<TMatch>[];\n matches: readonly TMatch[];\n loading: boolean;\n query?: string;\n mode?: \"browse\" | \"results\";\n}): MentionPaletteState<TMatch> {\n const categories = input.categories.map((category) => ({\n id: category.id,\n label: category.label\n }));\n const activeCategory =\n input.categories.find(\n (category) => category.id === input.activeCategoryId\n ) ??\n input.categories[0] ??\n null;\n const groups =\n activeCategory === null\n ? []\n : buildMentionPaletteGroupsForCategory(activeCategory, input.matches);\n\n return buildMentionPaletteModel({\n activeCategoryId: activeCategory?.id ?? input.activeCategoryId,\n categories,\n groups,\n loading: input.loading,\n query: input.query,\n mode: input.mode\n });\n}\n\nfunction buildMentionPaletteGroupsForCategory<\n TMatch extends RichTextTriggerQueryMatch\n>(\n category: MentionPaletteCategoryConfig<TMatch>,\n matches: readonly TMatch[]\n): MentionPaletteGroup<TMatch>[] {\n const categoryMatches = matches.filter((match) =>\n mentionPaletteConfigMatches(category, match)\n );\n if (!category.sections?.length) {\n if (categoryMatches.length === 0 && category.emptyLabel == null) {\n return [];\n }\n return [\n mentionPaletteGroup({\n id: category.id,\n items: categoryMatches,\n emptyLabel: category.emptyLabel\n })\n ];\n }\n\n const sectionItems = new Map<string, TMatch[]>(\n category.sections.map((section) => [section.id, []])\n );\n for (const match of categoryMatches) {\n const section = category.sections.find((candidate) =>\n mentionPaletteConfigMatches(candidate, match)\n );\n if (!section) {\n continue;\n }\n sectionItems.get(section.id)?.push(match);\n }\n\n return category.sections\n .map((section) => {\n const items = sectionItems.get(section.id) ?? [];\n if (items.length === 0 && section.emptyLabel == null) {\n return null;\n }\n return mentionPaletteGroup({\n id: section.id,\n label: section.label,\n items,\n emptyLabel: section.emptyLabel\n });\n })\n .filter((group): group is MentionPaletteGroup<TMatch> => group !== null);\n}\n\nfunction mentionPaletteConfigMatches<TMatch extends RichTextTriggerQueryMatch>(\n config: {\n providerIds?: readonly string[];\n matches?: (match: TMatch) => boolean;\n },\n match: TMatch\n): boolean {\n if (\n config.providerIds != null &&\n !config.providerIds.includes(match.providerId)\n ) {\n return false;\n }\n return config.matches?.(match) ?? true;\n}\n\nexport function moveMentionPaletteHighlight<TItem>(input: {\n state: MentionPaletteState<TItem>;\n currentKey: string | null;\n delta: 1 | -1;\n getItemKey: (item: TItem, groupId: string) => string;\n}): string | null {\n const entries = flattenMentionPaletteEntries(\n input.state,\n input.getItemKey\n ).filter(\n (entry) =>\n entry.type === \"category\" ||\n entry.type === \"item\" ||\n entry.type === \"expand\"\n );\n if (!entries.length) {\n return null;\n }\n const foundIndex = entries.findIndex(\n (entry) => entry.key === input.currentKey\n );\n const currentIndex = foundIndex >= 0 ? foundIndex : input.delta > 0 ? -1 : 0;\n return (\n entries[(currentIndex + input.delta + entries.length) % entries.length]\n ?.key ?? null\n );\n}\n\nexport function repairMentionPaletteHighlight<TItem>(input: {\n state: MentionPaletteState<TItem>;\n currentKey: string | null;\n getItemKey: (item: TItem, groupId: string) => string;\n preferredKey?: string | null;\n}): string | null {\n const entries = flattenMentionPaletteEntries(input.state, input.getItemKey);\n if (entries.length === 0) {\n return null;\n }\n if (\n input.currentKey !== null &&\n entries.some((entry) => entry.key === input.currentKey)\n ) {\n return input.currentKey;\n }\n if (\n input.preferredKey != null &&\n entries.some((entry) => entry.key === input.preferredKey)\n ) {\n return input.preferredKey;\n }\n return entries[0]?.key ?? null;\n}\n\nexport function findMentionPaletteEntry<TItem>(input: {\n state: MentionPaletteState<TItem>;\n key: string | null;\n getItemKey: (item: TItem, groupId: string) => string;\n}): MentionPaletteEntry | null {\n if (input.key === null) {\n return null;\n }\n return (\n flattenMentionPaletteEntries(input.state, input.getItemKey).find(\n (entry) => entry.key === input.key\n ) ?? null\n );\n}\n\nexport function selectedMentionPaletteItem<TItem>(input: {\n state: MentionPaletteState<TItem>;\n key: string | null;\n getItemKey: (item: TItem, groupId: string) => string;\n}): TItem | null {\n for (const group of input.state.groups) {\n const index = group.items.findIndex(\n (candidate) =>\n `${group.id}:${input.getItemKey(candidate, group.id)}` === input.key\n );\n if (index >= 0) {\n return group.items[index] ?? null;\n }\n }\n return null;\n}\n\nexport function nextMentionPaletteCategory<TCategoryId extends string>(\n categories: readonly { id: TCategoryId }[],\n current: TCategoryId,\n delta: 1 | -1\n): TCategoryId {\n const index = categories.findIndex((category) => category.id === current);\n const safeIndex = index >= 0 ? index : 0;\n return categories[\n (safeIndex + delta + categories.length) % categories.length\n ]!.id;\n}\n","/**\n * Tone → className maps for the {@link MentionStatusBadge} rendered inside a\n * {@link MentionRow}. The surface resolves a status into a data-only\n * {@link MentionRowStatusTag} (label + tone + variant); this module owns the\n * presentational mapping so the styling stays in one place and identical across\n * surfaces.\n */\nexport type MentionRowStatusTone =\n | \"amber\"\n | \"blue\"\n | \"green\"\n | \"neutral\"\n | \"red\";\n\nexport type MentionRowStatusVariant = \"activity\" | \"issue\";\n\n/**\n * Text classes for agent activity status signals. Activity rows already include\n * a status dot, so they render as plain signal text instead of a filled badge.\n */\nexport function activityMentionStatusBadgeClassName(\n tone: MentionRowStatusTone\n): string {\n switch (tone) {\n case \"blue\":\n return \"bg-transparent px-0 text-[var(--status-running)]\";\n case \"amber\":\n return \"bg-transparent px-0 text-[var(--state-warning)]\";\n case \"green\":\n return \"bg-transparent px-0 text-[var(--state-success)]\";\n case \"red\":\n return \"bg-transparent px-0 text-[var(--state-danger)]\";\n default:\n return \"bg-transparent px-0 text-[var(--text-secondary)]\";\n }\n}\n\n/**\n * Background/text classes for the issue status badge. Ported verbatim from the\n * agent's `issueMentionStatusBadgeClassName` (keyed by the issue tone the\n * surface resolves).\n */\nexport function issueMentionStatusBadgeClassName(\n tone: MentionRowStatusTone\n): string {\n switch (tone) {\n case \"green\":\n return \"bg-[color:color-mix(in_srgb,var(--state-success)_12%,transparent)] text-[var(--state-success)]\";\n case \"red\":\n return \"bg-[var(--on-danger)] text-[var(--state-danger)]\";\n default:\n return \"bg-[var(--transparency-block)] text-[var(--text-secondary)]\";\n }\n}\n\nexport function mentionStatusBadgeClassName(input: {\n tone: MentionRowStatusTone;\n variant: MentionRowStatusVariant;\n}): string {\n return input.variant === \"issue\"\n ? issueMentionStatusBadgeClassName(input.tone)\n : activityMentionStatusBadgeClassName(input.tone);\n}\n\n/**\n * Map a normalized agent-activity display status to its badge tone. Shared by\n * every `@`-mention surface that renders a session row (agent composer,\n * issue-manager) so the activity status badge color is identical across\n * surfaces. Mirrors the agent composer's local `mentionStatusTone` mapping\n * verbatim (the agent keeps its own copy producing identical values). The label\n * is resolved by each surface; only the tone lives here.\n */\nexport function activityMentionStatusTone(\n status: string\n): MentionRowStatusTone {\n switch (status.trim().toLowerCase()) {\n case \"working\":\n return \"blue\";\n case \"waiting\":\n case \"canceled\":\n return \"amber\";\n case \"completed\":\n case \"idle\":\n return \"green\";\n case \"failed\":\n return \"red\";\n default:\n return \"neutral\";\n }\n}\n\n/**\n * Map an issue status string to its badge tone. Shared by every `@`-mention\n * surface that renders an issue row (agent composer, issue-manager) so the\n * status badge color is identical across surfaces. The label is resolved by\n * each surface's own i18n; only the tone lives here.\n */\nexport function issueMentionStatusTone(status: string): MentionRowStatusTone {\n switch (status.trim().toLowerCase()) {\n case \"completed\":\n return \"green\";\n case \"failed\":\n case \"canceled\":\n return \"red\";\n default:\n return \"neutral\";\n }\n}\n","/**\n * Pure, dependency-free file visual-kind helpers shared by every `@`-mention\n * surface that renders a {@link MentionRow}. The *base* extension → kind\n * resolution lives in each surface (the agent maps file-manager kinds, etc.);\n * this module owns only the surface-agnostic vocabulary and the thumbnail rule\n * so the shared row renderer never imports a workspace feature.\n */\nexport type MentionFileVisualKind =\n | \"back\"\n | \"document\"\n | \"code\"\n | \"markdown\"\n | \"image\"\n | \"video\"\n | \"folder\";\n\nexport interface MentionFileVisualKindInput {\n entryKind?: string | null;\n mentionNavigation?: string | null;\n /**\n * The base visual kind already resolved from the file extension/name by the\n * surface (e.g. the agent's file-manager mapping). Used as the fallback when\n * the entry is neither a back-navigation marker nor a directory.\n */\n baseVisualKind: MentionFileVisualKind;\n}\n\n/**\n * Resolve the row's visual kind from a pre-resolved {@link MentionFileVisualKindInput.baseVisualKind}\n * plus the structural markers (back navigation, directory) that override it.\n */\nexport function resolveMentionFileVisualKind(\n input: MentionFileVisualKindInput\n): MentionFileVisualKind {\n if (input.mentionNavigation === \"agent-generated-folder-back\") {\n return \"back\";\n }\n if (input.entryKind === \"directory\") {\n return \"folder\";\n }\n return input.baseVisualKind;\n}\n\n/**\n * The thumbnail is only shown for image entries with a non-empty thumbnail URL.\n */\nexport function resolveMentionFileThumbnailUrl(input: {\n visualKind: MentionFileVisualKind;\n thumbnailUrl?: string | null;\n}): string | undefined {\n if (input.visualKind !== \"image\") {\n return undefined;\n }\n const thumbnailUrl = input.thumbnailUrl?.trim() ?? \"\";\n return thumbnailUrl || undefined;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/at-panel/mentionPaletteEntries.ts","../src/at-panel/mentionPaletteModel.ts","../src/at-panel/mentionStatusTone.ts","../src/at-panel/mentionFileVisualKind.ts"],"sourcesContent":["import type {\n MentionPaletteEntry,\n MentionPaletteState\n} from \"./mentionPaletteTypes.ts\";\n\n/**\n * Returns true when at least one group has items or a \"load more\" trigger,\n * i.e. there is something interactive to render beyond category headers.\n */\nfunction hasInteractiveGroupEntries<TItem>(\n groups: MentionPaletteState<TItem>[\"groups\"]\n): boolean {\n return groups.some((group) => group.items.length > 0 || group.hasMore);\n}\n\n/**\n * Flatten the palette state into a stable, ordered list of navigable entries.\n *\n * Mirrors the ordering and key format of `flattenAgentMentionPaletteEntries`\n * from AgentFileMentionPalette.tsx, but is generic over item type.\n *\n * Key formats:\n * category entry → `category:<categoryId>`\n * item entry → `<groupId>:<getItemKey(item, groupId)>`\n * expand entry → `expand:<groupId>`\n */\nexport function flattenMentionPaletteEntries<TItem>(\n state: MentionPaletteState<TItem>,\n getItemKey: (item: TItem, groupId: string) => string\n): MentionPaletteEntry[] {\n // Browse mode with no interactive group content → show category nav only\n if (state.mode === \"browse\" && !hasInteractiveGroupEntries(state.groups)) {\n return state.categories.map((category) => ({\n key: `category:${category.id}`,\n type: \"category\" as const,\n categoryId: category.id\n }));\n }\n\n const entries: MentionPaletteEntry[] = [];\n\n for (const group of state.groups) {\n group.items.forEach((item, index) => {\n entries.push({\n key: `${group.id}:${getItemKey(item, group.id)}`,\n type: \"item\",\n groupId: group.id,\n itemIndex: index\n });\n });\n\n if (group.hasMore) {\n entries.push({\n key: `expand:${group.id}`,\n type: \"expand\",\n groupId: group.id\n });\n }\n }\n\n return entries;\n}\n","import type {\n MentionPaletteCategory,\n MentionPaletteEntry,\n MentionPaletteGroup,\n MentionPaletteState\n} from \"./mentionPaletteTypes.ts\";\nimport { flattenMentionPaletteEntries } from \"./mentionPaletteEntries.ts\";\nimport type { RichTextTriggerQueryMatch } from \"../types/trigger.ts\";\n\nexport interface MentionPaletteModelInput<TItem> {\n activeCategoryId: string;\n categories: readonly MentionPaletteCategory[];\n groups: readonly MentionPaletteGroup<TItem>[];\n loading: boolean;\n query?: string;\n mode?: \"browse\" | \"results\";\n}\n\nexport interface MentionPaletteSectionConfig<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n> {\n id: string;\n label?: string;\n providerIds?: readonly string[];\n matches?: (match: TMatch) => boolean;\n emptyLabel?: string;\n}\n\nexport interface MentionPaletteCategoryConfig<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n> {\n id: string;\n label: string;\n providerIds?: readonly string[];\n matches?: (match: TMatch) => boolean;\n emptyLabel?: string;\n sections?: readonly MentionPaletteSectionConfig<TMatch>[];\n}\n\nexport function mentionPaletteGroup<TItem>(input: {\n id: string;\n label?: string;\n items: readonly TItem[];\n emptyLabel?: string;\n}): MentionPaletteGroup<TItem> {\n return {\n id: input.id,\n label: input.label,\n items: input.items,\n totalCount: input.items.length,\n visibleCount: input.items.length,\n hasMore: false,\n emptyLabel: input.emptyLabel\n };\n}\n\nexport function buildMentionPaletteModel<TItem>(\n input: MentionPaletteModelInput<TItem>\n): MentionPaletteState<TItem> {\n return {\n status: input.loading ? \"loading\" : \"ready\",\n query: input.query ?? \"\",\n mode: input.mode ?? \"results\",\n filter: input.activeCategoryId,\n categories: input.categories,\n groups: input.groups,\n error: null\n };\n}\n\nexport function buildMentionPaletteModelFromTriggerMatches<\n TMatch extends RichTextTriggerQueryMatch = RichTextTriggerQueryMatch\n>(input: {\n activeCategoryId: string;\n categories: readonly MentionPaletteCategoryConfig<TMatch>[];\n matches: readonly TMatch[];\n loading: boolean;\n query?: string;\n mode?: \"browse\" | \"results\";\n}): MentionPaletteState<TMatch> {\n const categories = input.categories.map((category) => ({\n id: category.id,\n label: category.label\n }));\n const activeCategory =\n input.categories.find(\n (category) => category.id === input.activeCategoryId\n ) ??\n input.categories[0] ??\n null;\n const groups =\n activeCategory === null\n ? []\n : buildMentionPaletteGroupsForCategory(activeCategory, input.matches);\n\n return buildMentionPaletteModel({\n activeCategoryId: activeCategory?.id ?? input.activeCategoryId,\n categories,\n groups,\n loading: input.loading,\n query: input.query,\n mode: input.mode\n });\n}\n\nfunction buildMentionPaletteGroupsForCategory<\n TMatch extends RichTextTriggerQueryMatch\n>(\n category: MentionPaletteCategoryConfig<TMatch>,\n matches: readonly TMatch[]\n): MentionPaletteGroup<TMatch>[] {\n const categoryMatches = matches.filter((match) =>\n mentionPaletteConfigMatches(category, match)\n );\n if (!category.sections?.length) {\n if (categoryMatches.length === 0 && category.emptyLabel == null) {\n return [];\n }\n return [\n mentionPaletteGroup({\n id: category.id,\n items: categoryMatches,\n emptyLabel: category.emptyLabel\n })\n ];\n }\n\n const sectionItems = new Map<string, TMatch[]>(\n category.sections.map((section) => [section.id, []])\n );\n for (const match of categoryMatches) {\n const section = category.sections.find((candidate) =>\n mentionPaletteConfigMatches(candidate, match)\n );\n if (!section) {\n continue;\n }\n sectionItems.get(section.id)?.push(match);\n }\n\n return category.sections\n .map((section) => {\n const items = sectionItems.get(section.id) ?? [];\n if (items.length === 0 && section.emptyLabel == null) {\n return null;\n }\n return mentionPaletteGroup({\n id: section.id,\n label: section.label,\n items,\n emptyLabel: section.emptyLabel\n });\n })\n .filter((group): group is MentionPaletteGroup<TMatch> => group !== null);\n}\n\nfunction mentionPaletteConfigMatches<TMatch extends RichTextTriggerQueryMatch>(\n config: {\n providerIds?: readonly string[];\n matches?: (match: TMatch) => boolean;\n },\n match: TMatch\n): boolean {\n if (\n config.providerIds != null &&\n !config.providerIds.includes(match.providerId)\n ) {\n return false;\n }\n return config.matches?.(match) ?? true;\n}\n\nexport function moveMentionPaletteHighlight<TItem>(input: {\n state: MentionPaletteState<TItem>;\n currentKey: string | null;\n delta: 1 | -1;\n getItemKey: (item: TItem, groupId: string) => string;\n}): string | null {\n const entries = flattenMentionPaletteEntries(\n input.state,\n input.getItemKey\n ).filter(\n (entry) =>\n entry.type === \"category\" ||\n entry.type === \"item\" ||\n entry.type === \"expand\"\n );\n if (!entries.length) {\n return null;\n }\n const foundIndex = entries.findIndex(\n (entry) => entry.key === input.currentKey\n );\n const currentIndex = foundIndex >= 0 ? foundIndex : input.delta > 0 ? -1 : 0;\n return (\n entries[(currentIndex + input.delta + entries.length) % entries.length]\n ?.key ?? null\n );\n}\n\nexport function repairMentionPaletteHighlight<TItem>(input: {\n state: MentionPaletteState<TItem>;\n currentKey: string | null;\n getItemKey: (item: TItem, groupId: string) => string;\n preferredKey?: string | null;\n}): string | null {\n const entries = flattenMentionPaletteEntries(input.state, input.getItemKey);\n if (entries.length === 0) {\n return null;\n }\n if (\n input.currentKey !== null &&\n entries.some((entry) => entry.key === input.currentKey)\n ) {\n return input.currentKey;\n }\n if (\n input.preferredKey != null &&\n entries.some((entry) => entry.key === input.preferredKey)\n ) {\n return input.preferredKey;\n }\n return entries[0]?.key ?? null;\n}\n\nexport function findMentionPaletteEntry<TItem>(input: {\n state: MentionPaletteState<TItem>;\n key: string | null;\n getItemKey: (item: TItem, groupId: string) => string;\n}): MentionPaletteEntry | null {\n if (input.key === null) {\n return null;\n }\n return (\n flattenMentionPaletteEntries(input.state, input.getItemKey).find(\n (entry) => entry.key === input.key\n ) ?? null\n );\n}\n\nexport function selectedMentionPaletteItem<TItem>(input: {\n state: MentionPaletteState<TItem>;\n key: string | null;\n getItemKey: (item: TItem, groupId: string) => string;\n}): TItem | null {\n for (const group of input.state.groups) {\n const index = group.items.findIndex(\n (candidate) =>\n `${group.id}:${input.getItemKey(candidate, group.id)}` === input.key\n );\n if (index >= 0) {\n return group.items[index] ?? null;\n }\n }\n return null;\n}\n\nexport function nextMentionPaletteCategory<TCategoryId extends string>(\n categories: readonly { id: TCategoryId }[],\n current: TCategoryId,\n delta: 1 | -1\n): TCategoryId {\n const index = categories.findIndex((category) => category.id === current);\n const safeIndex = index >= 0 ? index : 0;\n return categories[\n (safeIndex + delta + categories.length) % categories.length\n ]!.id;\n}\n","/**\n * Tone → className maps for the {@link MentionStatusBadge} rendered inside a\n * {@link MentionRow}. The surface resolves a status into a data-only\n * {@link MentionRowStatusTag} (label + tone + variant); this module owns the\n * presentational mapping so the styling stays in one place and identical across\n * surfaces.\n */\nexport type MentionRowStatusTone =\n | \"amber\"\n | \"blue\"\n | \"green\"\n | \"neutral\"\n | \"purple\"\n | \"red\";\n\nexport type MentionRowStatusVariant = \"activity\" | \"issue\";\n\n/**\n * Text classes for agent activity status signals. Activity rows already include\n * a status dot, so they render as plain signal text instead of a filled badge.\n */\nexport function activityMentionStatusBadgeClassName(\n tone: MentionRowStatusTone\n): string {\n switch (tone) {\n case \"blue\":\n return \"bg-transparent px-0 text-[var(--status-running)]\";\n case \"amber\":\n return \"bg-transparent px-0 text-[var(--state-warning)]\";\n case \"green\":\n return \"bg-transparent px-0 text-[var(--state-success)]\";\n case \"red\":\n return \"bg-transparent px-0 text-[var(--state-danger)]\";\n default:\n return \"bg-transparent px-0 text-[var(--text-secondary)]\";\n }\n}\n\n/**\n * Background/text classes for the issue status badge. Ported verbatim from the\n * agent's `issueMentionStatusBadgeClassName` (keyed by the issue tone the\n * surface resolves).\n */\nexport function issueMentionStatusBadgeClassName(\n tone: MentionRowStatusTone\n): string {\n switch (tone) {\n case \"blue\":\n return \"bg-[color:color-mix(in_srgb,var(--status-running)_12%,transparent)] text-[var(--status-running)]\";\n case \"amber\":\n return \"bg-[color:color-mix(in_srgb,var(--state-warning)_12%,transparent)] text-[var(--state-warning)]\";\n case \"green\":\n return \"bg-[color:color-mix(in_srgb,var(--state-success)_12%,transparent)] text-[var(--state-success)]\";\n case \"purple\":\n return \"bg-[color-mix(in_srgb,var(--rich-text-mention-issue)_12%,transparent)] text-[var(--rich-text-mention-issue)]\";\n case \"red\":\n return \"bg-[var(--on-danger)] text-[var(--state-danger)]\";\n default:\n return \"bg-[var(--transparency-block)] text-[var(--text-secondary)]\";\n }\n}\n\nexport function mentionStatusBadgeClassName(input: {\n tone: MentionRowStatusTone;\n variant: MentionRowStatusVariant;\n}): string {\n return input.variant === \"issue\"\n ? issueMentionStatusBadgeClassName(input.tone)\n : activityMentionStatusBadgeClassName(input.tone);\n}\n\n/**\n * Map a normalized agent-activity display status to its badge tone. Shared by\n * every `@`-mention surface that renders a session row (agent composer,\n * issue-manager) so the activity status badge color is identical across\n * surfaces. Mirrors the agent composer's local `mentionStatusTone` mapping\n * verbatim (the agent keeps its own copy producing identical values). The label\n * is resolved by each surface; only the tone lives here.\n */\nexport function activityMentionStatusTone(\n status: string\n): MentionRowStatusTone {\n switch (status.trim().toLowerCase()) {\n case \"working\":\n return \"blue\";\n case \"waiting\":\n case \"canceled\":\n return \"amber\";\n case \"completed\":\n case \"idle\":\n return \"green\";\n case \"failed\":\n return \"red\";\n default:\n return \"neutral\";\n }\n}\n\n/**\n * Map an issue status string to its badge tone. Shared by every `@`-mention\n * surface that renders an issue row (agent composer, issue-manager) so the\n * status badge color is identical across surfaces. The label is resolved by\n * each surface's own i18n; only the tone lives here.\n */\nexport function issueMentionStatusTone(status: string): MentionRowStatusTone {\n switch (status.trim().toLowerCase()) {\n case \"completed\":\n return \"green\";\n case \"failed\":\n case \"canceled\":\n return \"red\";\n default:\n return \"neutral\";\n }\n}\n","/**\n * Pure, dependency-free file visual-kind helpers shared by every `@`-mention\n * surface that renders a {@link MentionRow}. The *base* extension → kind\n * resolution lives in each surface (the agent maps file-manager kinds, etc.);\n * this module owns only the surface-agnostic vocabulary and the thumbnail rule\n * so the shared row renderer never imports a workspace feature.\n */\nexport type MentionFileVisualKind =\n | \"back\"\n | \"document\"\n | \"code\"\n | \"markdown\"\n | \"image\"\n | \"video\"\n | \"folder\";\n\nexport interface MentionFileVisualKindInput {\n entryKind?: string | null;\n mentionNavigation?: string | null;\n /**\n * The base visual kind already resolved from the file extension/name by the\n * surface (e.g. the agent's file-manager mapping). Used as the fallback when\n * the entry is neither a back-navigation marker nor a directory.\n */\n baseVisualKind: MentionFileVisualKind;\n}\n\n/**\n * Resolve the row's visual kind from a pre-resolved {@link MentionFileVisualKindInput.baseVisualKind}\n * plus the structural markers (back navigation, directory) that override it.\n */\nexport function resolveMentionFileVisualKind(\n input: MentionFileVisualKindInput\n): MentionFileVisualKind {\n if (input.mentionNavigation === \"agent-generated-folder-back\") {\n return \"back\";\n }\n if (input.entryKind === \"directory\") {\n return \"folder\";\n }\n return input.baseVisualKind;\n}\n\n/**\n * The thumbnail is only shown for image entries with a non-empty thumbnail URL.\n */\nexport function resolveMentionFileThumbnailUrl(input: {\n visualKind: MentionFileVisualKind;\n thumbnailUrl?: string | null;\n}): string | undefined {\n if (input.visualKind !== \"image\") {\n return undefined;\n }\n const thumbnailUrl = input.thumbnailUrl?.trim() ?? \"\";\n return thumbnailUrl || undefined;\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutti-os/ui-rich-text",
3
- "version": "0.0.36",
3
+ "version": "0.0.37",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -52,8 +52,8 @@
52
52
  "directory": "packages/ui/rich-text"
53
53
  },
54
54
  "dependencies": {
55
- "@tutti-os/ui-i18n-runtime": "0.0.36",
56
- "@tutti-os/ui-system": "0.0.36",
55
+ "@tutti-os/ui-i18n-runtime": "0.0.37",
56
+ "@tutti-os/ui-system": "0.0.37",
57
57
  "@tiptap/core": "^3.23.6",
58
58
  "@tiptap/extension-document": "^3.23.6",
59
59
  "@tiptap/extension-hard-break": "^3.23.6",