@arbidocs/blocks 0.4.87 → 0.4.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/agents/index.cjs +211 -211
  2. package/dist/agents/index.js +6 -6
  3. package/dist/chat/index.cjs +125 -125
  4. package/dist/chat/index.js +3 -3
  5. package/dist/{chunk-2EI7NCUA.cjs → chunk-2CFW2ELM.cjs} +8 -2
  6. package/dist/chunk-2CFW2ELM.cjs.map +1 -0
  7. package/dist/{chunk-OR4CO743.cjs → chunk-5YXG342J.cjs} +3 -3
  8. package/dist/{chunk-OR4CO743.cjs.map → chunk-5YXG342J.cjs.map} +1 -1
  9. package/dist/{chunk-R26OHONI.js → chunk-6S5FLMWG.js} +83 -72
  10. package/dist/chunk-6S5FLMWG.js.map +1 -0
  11. package/dist/{chunk-P5ST47VY.js → chunk-DDF5GPIJ.js} +3 -3
  12. package/dist/{chunk-P5ST47VY.js.map → chunk-DDF5GPIJ.js.map} +1 -1
  13. package/dist/{chunk-PFA43QNX.js → chunk-EWSEQEPL.js} +3 -3
  14. package/dist/{chunk-PFA43QNX.js.map → chunk-EWSEQEPL.js.map} +1 -1
  15. package/dist/{chunk-X5K5PCRJ.cjs → chunk-FNEL2BYV.cjs} +18 -18
  16. package/dist/{chunk-X5K5PCRJ.cjs.map → chunk-FNEL2BYV.cjs.map} +1 -1
  17. package/dist/{chunk-LBE36YNZ.js → chunk-ICBAFX5B.js} +3 -3
  18. package/dist/{chunk-LBE36YNZ.js.map → chunk-ICBAFX5B.js.map} +1 -1
  19. package/dist/{chunk-C3DRLFU7.cjs → chunk-IF6VAYIA.cjs} +5 -5
  20. package/dist/{chunk-C3DRLFU7.cjs.map → chunk-IF6VAYIA.cjs.map} +1 -1
  21. package/dist/{chunk-O5NDG4EA.cjs → chunk-MP6FK43E.cjs} +3 -3
  22. package/dist/{chunk-O5NDG4EA.cjs.map → chunk-MP6FK43E.cjs.map} +1 -1
  23. package/dist/{chunk-AFSOUS5X.cjs → chunk-N26CXGXC.cjs} +83 -72
  24. package/dist/chunk-N26CXGXC.cjs.map +1 -0
  25. package/dist/{chunk-2FBQSQDW.js → chunk-NXWKMKZY.js} +298 -214
  26. package/dist/chunk-NXWKMKZY.js.map +1 -0
  27. package/dist/{chunk-QOADH2YB.cjs → chunk-UCAYNE44.cjs} +297 -213
  28. package/dist/chunk-UCAYNE44.cjs.map +1 -0
  29. package/dist/{chunk-UJM7TG44.js → chunk-UZV27QLC.js} +7 -7
  30. package/dist/{chunk-UJM7TG44.js.map → chunk-UZV27QLC.js.map} +1 -1
  31. package/dist/{chunk-GFYGYME3.js → chunk-W7NZRZ54.js} +3 -3
  32. package/dist/{chunk-GFYGYME3.js.map → chunk-W7NZRZ54.js.map} +1 -1
  33. package/dist/{chunk-HUJLKDWX.cjs → chunk-XMBYDLZQ.cjs} +4 -4
  34. package/dist/{chunk-HUJLKDWX.cjs.map → chunk-XMBYDLZQ.cjs.map} +1 -1
  35. package/dist/{chunk-WDD255XQ.js → chunk-XQDM6T6C.js} +3 -3
  36. package/dist/{chunk-WDD255XQ.js.map → chunk-XQDM6T6C.js.map} +1 -1
  37. package/dist/{chunk-ZV3BKLFY.cjs → chunk-Z5VUZ6YD.cjs} +3 -3
  38. package/dist/{chunk-ZV3BKLFY.cjs.map → chunk-Z5VUZ6YD.cjs.map} +1 -1
  39. package/dist/{chunk-YU2KUMGE.js → chunk-ZX2VPMBJ.js} +8 -2
  40. package/dist/chunk-ZX2VPMBJ.js.map +1 -0
  41. package/dist/connect/index.cjs +50 -50
  42. package/dist/connect/index.js +8 -8
  43. package/dist/facts/index.cjs +7 -7
  44. package/dist/facts/index.js +4 -4
  45. package/dist/files/index.cjs +4 -23
  46. package/dist/files/index.cjs.map +1 -1
  47. package/dist/files/index.js +4 -22
  48. package/dist/files/index.js.map +1 -1
  49. package/dist/files/views/TagFormParts.d.ts +0 -8
  50. package/dist/files/views/index.d.ts +1 -1
  51. package/dist/home/index.cjs +17 -17
  52. package/dist/home/index.js +3 -3
  53. package/dist/index.cjs +629 -537
  54. package/dist/index.cjs.map +1 -1
  55. package/dist/index.js +116 -25
  56. package/dist/index.js.map +1 -1
  57. package/dist/retrieval/index.cjs +1 -1
  58. package/dist/retrieval/index.js +1 -1
  59. package/dist/settings/index.cjs +38 -38
  60. package/dist/settings/index.js +3 -3
  61. package/dist/shell/FilterInput.d.ts +3 -1
  62. package/dist/shell/index.cjs +5 -5
  63. package/dist/shell/index.js +2 -2
  64. package/dist/studio/index.cjs +4 -4
  65. package/dist/studio/index.js +3 -3
  66. package/dist/tags/TagDetail.d.ts +14 -2
  67. package/dist/tags/TagTable.d.ts +20 -11
  68. package/dist/tags/TagsNav.d.ts +28 -4
  69. package/dist/tags/index.d.ts +1 -1
  70. package/dist/tags/tagTableModel.d.ts +10 -2
  71. package/dist/workflow-canvas/index.cjs +13 -13
  72. package/dist/workflow-canvas/index.js +6 -6
  73. package/dist/workspaces/index.cjs +2 -2
  74. package/dist/workspaces/index.js +2 -2
  75. package/package.json +4 -4
  76. package/dist/chunk-2EI7NCUA.cjs.map +0 -1
  77. package/dist/chunk-2FBQSQDW.js.map +0 -1
  78. package/dist/chunk-AFSOUS5X.cjs.map +0 -1
  79. package/dist/chunk-QOADH2YB.cjs.map +0 -1
  80. package/dist/chunk-R26OHONI.js.map +0 -1
  81. package/dist/chunk-YU2KUMGE.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Toolbar.tsx","../src/components/EntityIdentityBar.tsx","../src/components/EntityTooltip.tsx","../src/components/AskBar.tsx","../src/tags/TagDetail.tsx","../src/tags/TagsNav.tsx"],"names":["jsxs","cn","jsx","Input","useState","Search"],"mappings":"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","file":"index.js","sourcesContent":["import type { ReactNode } from 'react'\nimport { Search } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\n/** Search + filter bar used above every list view. */\nexport function Toolbar({\n search,\n onSearch,\n searchPlaceholder = 'Search…',\n filters,\n actions,\n className,\n testId,\n}: {\n search?: string\n onSearch?: (v: string) => void\n searchPlaceholder?: string\n filters?: ReactNode\n actions?: ReactNode\n className?: string\n testId?: string\n}) {\n return (\n <div\n className={cn(\n 'flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between',\n className\n )}\n data-testid={testId}\n >\n <div className=\"flex flex-1 flex-wrap items-center gap-2\">\n {onSearch && (\n <div className=\"relative w-full max-w-xs\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => onSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"bg-card text-sm placeholder:text-muted-foreground focus-visible:border-ring/60 focus-visible:ring-2 focus-visible:ring-ring pl-8\"\n data-testid={testId ? `${testId}-search` : 'toolbar-search'}\n />\n </div>\n )}\n {filters}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n )\n}\n","import { useEffect, useState, type ReactNode } from 'react'\nimport { Pencil } from 'lucide-react'\nimport { Input, Textarea, cn } from '@arbidocs/react/ui'\n\n/** Longest a name may be. Exported so a form editing the same field agrees. */\nexport const IDENTITY_NAME_MAX_LENGTH = 50\n\n/** Shown once the remaining allowance gets this low, not for the whole time. */\nconst COUNTER_THRESHOLD = 10\n\nexport interface EntityIdentityField {\n /** Row caption. Rendered with a trailing colon. */\n label: string\n value: string\n /** Stands in for an empty value, in italics — never a blank row. */\n placeholder: string\n /** Commits the edit. Not called when the value is unchanged. */\n onSave: (next: string) => void\n /** A description needs line breaks; a name does not. */\n multiline?: boolean\n /** Caps the input and shows a counter as it fills. Names only, by default. */\n maxLength?: number\n /** Classes for the read-mode value, e.g. a larger weight for the name. */\n valueClassName?: string\n /**\n * Content pinned to the RIGHT END of this row — e.g. the owning project\n * beside a name, a member stack beside a status. Rows without one let their\n * value run the full width, which is what a description wants.\n */\n trailing?: ReactNode\n /**\n * Content rendered immediately BEFORE the value — the entity's own mark.\n * Sits outside the edit swap, so starting to edit the name doesn't make the\n * icon jump or disappear.\n */\n leading?: ReactNode\n /**\n * Drops the caption from view for this row, leaving the value flush left.\n * For a field whose value already says what it is — a workspace's name and\n * description read as exactly that — the caption is a word the eye has to\n * step over on the way in. The caption stays in the markup for screen\n * readers, which have no such visual cue to fall back on.\n */\n hideLabel?: boolean\n /** Row test id; the pencil and input derive `-edit` and `-input`. */\n testId?: string\n}\n\nexport interface EntityIdentityBarProps {\n /** The editable text fields, in order. Usually name then description. */\n fields: EntityIdentityField[]\n /**\n * Read-only rows shown after the editable ones — anything whose control the\n * consumer owns (a project picker, an owner avatar, a status). Rendered with\n * the same caption column so every row lines up.\n */\n extraRows?: { label: string; content: ReactNode; trailing?: ReactNode; testId?: string }[]\n /** Hides every pencil. A viewer without permission sees values, not controls. */\n canEdit?: boolean\n /** Trailing controls, pinned right — e.g. a member stack, a status. */\n actions?: ReactNode\n /**\n * Controls that act on the ENTITY rather than on any one field — typically an\n * overflow menu holding delete or leave. Sits under the field list, where a\n * destructive action is findable but not in the path of everyday reading.\n */\n footer?: ReactNode\n className?: string\n testId?: string\n}\n\n/**\n * The \"what am I looking at\" bar for an entity's own page.\n *\n * A caption column (`Name:`, `Description:`, `Project:`) and a value column. The\n * captions are the point: a bare bold string at the top of a page reads equally\n * as a workspace, a project, a case file or a folder, and people read it as\n * whichever they expected. Saying which field is which costs one column and\n * removes the ambiguity entirely.\n *\n * Editing happens in place. The pencil is always visible to someone who can use\n * it rather than revealed on hover — a control you have to go hunting for is one\n * most people never find, and hover doesn't exist on touch. Commit is on blur\n * and on Enter (single-line fields only, so a description can hold line\n * breaks); Escape abandons the edit.\n *\n * Deliberately NOT a form: no submit, no dirty state, no field-level errors.\n * When a consumer needs visibility toggles, destructive actions or validation\n * messages, those belong in its settings form — this bar is the identity of the\n * thing, shown where you are working on it.\n *\n * Styled with SEMANTIC tokens only, so every host gets it in its own colours.\n */\nexport function EntityIdentityBar({\n fields,\n extraRows = [],\n canEdit = false,\n actions,\n footer,\n className,\n testId,\n}: EntityIdentityBarProps) {\n return (\n <div\n className={cn('flex flex-wrap items-start justify-between gap-x-6 gap-y-3', className)}\n data-testid={testId}\n >\n <dl className=\"min-w-0 flex-1 space-y-1.5\">\n {fields.map((field) => (\n <IdentityFieldRow key={field.label} field={field} canEdit={canEdit} />\n ))}\n {extraRows.map((row) => (\n <div\n key={row.label}\n className=\"flex min-h-7 min-w-0 items-center gap-2\"\n data-testid={row.testId}\n >\n <dt className=\"w-24 shrink-0 text-sm font-medium text-muted-foreground\">\n {row.label}:\n </dt>\n <dd className=\"flex min-w-0 flex-1 items-center gap-2\">\n {row.content}\n {row.trailing ? (\n <div className=\"min-w-0 shrink-0 sm:ml-auto\">{row.trailing}</div>\n ) : null}\n </dd>\n </div>\n ))}\n {footer ? <div className=\"flex items-center pt-0.5\">{footer}</div> : null}\n </dl>\n {actions ? <div className=\"flex shrink-0 items-center gap-2\">{actions}</div> : null}\n </div>\n )\n}\n\nfunction IdentityFieldRow({ field, canEdit }: { field: EntityIdentityField; canEdit: boolean }) {\n const {\n label,\n value,\n placeholder,\n onSave,\n multiline = false,\n maxLength,\n valueClassName,\n leading,\n hideLabel,\n trailing,\n testId,\n } = field\n\n const [isEditing, setIsEditing] = useState(false)\n const [draft, setDraft] = useState(value)\n\n // Track the value while not editing, so an update from elsewhere (another\n // tab, a websocket) doesn't get overwritten by a stale draft on the next edit.\n useEffect(() => {\n if (!isEditing) setDraft(value)\n }, [value, isEditing])\n\n const commit = () => {\n setIsEditing(false)\n const next = draft.trim()\n if (next !== value) onSave(next)\n }\n\n const cancel = () => {\n setDraft(value)\n setIsEditing(false)\n }\n\n const charsLeft = maxLength === undefined ? null : maxLength - draft.length\n\n // Editing must not move anything. The input carries the read view's exact\n // typography and padding, drops the border and shadow entirely, and marks\n // focus with a contrasting FIELD instead — a box appearing around the text\n // (and the row growing to fit it) reads as the page jumping under the cursor.\n const fieldClass =\n 'h-auto rounded border-0 bg-muted px-1.5 py-0.5 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0'\n\n const shared = {\n autoFocus: true,\n value: draft,\n placeholder,\n maxLength,\n 'aria-label': label,\n 'data-testid': testId && `${testId}-input`,\n onBlur: commit,\n onChange: (e: { target: { value: string } }) => setDraft(e.target.value),\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n cancel()\n } else if (e.key === 'Enter' && !multiline) {\n e.preventDefault()\n commit()\n }\n },\n }\n\n // Every row shares one minimum height: that of the small controls (h-7) a\n // row may carry at its trailing end. A row that is only text then sits in\n // the same rhythm as one holding a button, so the captions fall on an even\n // beat down the bar instead of bunching up wherever a row has no control.\n return (\n <div className={cn('flex min-h-7 min-w-0 gap-2', multiline ? 'items-start' : 'items-center')}>\n <dt\n className={cn(\n hideLabel\n ? 'sr-only'\n : cn('w-24 shrink-0 text-sm font-medium text-muted-foreground', multiline && 'pt-1')\n )}\n >\n {label}:\n </dt>\n {/* Wraps under sm: the trailing controls drop to their own line instead of overflowing. */}\n <dd className=\"flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1.5 sm:flex-nowrap\">\n {leading}\n {isEditing ? (\n <div className=\"relative min-w-0 flex-1 max-sm:basis-[calc(100%-2.5rem)]\">\n {multiline ? (\n <Textarea\n {...shared}\n rows={2}\n className={cn(fieldClass, 'min-h-0 resize-none leading-snug', valueClassName)}\n />\n ) : (\n <Input {...shared} className={cn(fieldClass, 'pr-20', valueClassName)} />\n )}\n {charsLeft !== null && charsLeft <= COUNTER_THRESHOLD && (\n <span\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 hidden -translate-y-1/2 text-sm lg:block',\n charsLeft < 0 ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={testId && `${testId}-counter`}\n >\n {charsLeft < 0 ? `${-charsLeft} over` : `${charsLeft} left`}\n </span>\n )}\n </div>\n ) : (\n // `identity-field` (not the generic `group`) scopes the pencil's hover\n // to THIS field only — an ancestor card also carries `group`, so a\n // `.group:hover` rule would reveal every field's pencil at once.\n <span className=\"identity-field flex min-w-0 flex-1 items-center gap-1.5 sm:flex-none\">\n {/* Same padding as the input above — the swap must not nudge the\n text sideways or change the row's height. */}\n <span className={cn('px-1.5 py-0.5', valueClassName)} data-testid={testId}>\n {value || <span className=\"italic text-muted-foreground\">{placeholder}</span>}\n </span>\n {canEdit && (\n <button\n type=\"button\"\n onClick={() => setIsEditing(true)}\n aria-label={`Edit ${label.toLowerCase()}`}\n title={`Edit ${label.toLowerCase()}`}\n // Quiet by default — the pencil only surfaces when the row is\n // hovered so it reads as clean text, and stays reachable by\n // keyboard (focus-visible).\n //\n // NB: use the ungated `[.identity-field:hover_&]` selector rather\n // than Tailwind's `group-hover:`. The latter compiles behind\n // `@media (hover: hover)`, so on a touchscreen (whose PRIMARY\n // pointer reports `hover: none`) the rule is disabled even when a\n // real mouse is firing hover events — the pencil then stays at\n // opacity-0 forever. The arbitrary selector has no media gate, so\n // it reveals on any genuine `:hover`.\n className=\"shrink-0 cursor-pointer rounded p-1 text-muted-foreground opacity-60 transition-[color,background-color,opacity] hover:bg-accent hover:text-foreground focus-visible:opacity-100 pointer-coarse:p-[15px] [.identity-field:hover_&]:opacity-100\"\n data-testid={testId && `${testId}-edit`}\n >\n <Pencil className=\"size-3.5\" />\n </button>\n )}\n </span>\n )}\n {trailing ? (\n <div className=\"min-w-0 shrink-0 max-sm:w-full sm:ml-auto\">{trailing}</div>\n ) : null}\n </dd>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\n/**\n * Parts for the hover card of an entity pill (workspace, user, tag, ...): a header, optional\n * stat rows, bordered sections and an action hint. The host fills them from its own data.\n */\n\nexport function EntityTooltip({\n className,\n children,\n}: {\n className?: string\n children: ReactNode\n}) {\n return (\n <div data-slot=\"entity-tooltip\" className={cn('flex flex-col gap-2', className)}>\n {children}\n </div>\n )\n}\n\nexport interface EntityTooltipHeaderProps {\n /** Icon / avatar before the title. */\n lead: ReactNode\n title: ReactNode\n subtitle?: ReactNode\n /** Right-hand badge. */\n trailing?: ReactNode\n /** Extra glyph after the title (e.g. an agent mark). */\n titleAccessory?: ReactNode\n}\n\nexport function EntityTooltipHeader({\n lead,\n title,\n subtitle,\n trailing,\n titleAccessory,\n}: EntityTooltipHeaderProps) {\n return (\n <div className=\"flex items-center gap-2\">\n {lead}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"truncate text-sm font-medium\">{title}</span>\n {titleAccessory}\n </div>\n {subtitle && <span className=\"truncate text-xs text-muted-foreground\">{subtitle}</span>}\n </div>\n {trailing}\n </div>\n )\n}\n\nexport interface EntityTooltipStat {\n key: string\n icon: ReactNode\n label: ReactNode\n value: ReactNode\n}\n\n/** Label/value rows between two rules. */\nexport function EntityTooltipStats({ stats }: { stats: EntityTooltipStat[] }) {\n return (\n <div className=\"flex flex-col gap-1.5 border-y border-border py-2\">\n {stats.map((s) => (\n <div key={s.key} className=\"flex items-center justify-between text-sm\">\n <div className=\"flex items-center gap-2\">\n {s.icon}\n <span className=\"text-muted-foreground\">{s.label}</span>\n </div>\n <span className=\"font-medium\">{s.value}</span>\n </div>\n ))}\n </div>\n )\n}\n\n/** A secondary section under a rule, optionally headed by an icon + text. */\nexport function EntityTooltipSection({\n icon,\n heading,\n children,\n}: {\n icon?: ReactNode\n heading?: ReactNode\n children?: ReactNode\n}) {\n return (\n <div className=\"flex flex-col gap-1.5 border-t border-border pt-2\">\n {heading && (\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n {icon}\n <span>{heading}</span>\n </div>\n )}\n {children}\n </div>\n )\n}\n\n/** Muted one-liner at the foot of the card, e.g. \"Click to send message\". */\nexport function EntityTooltipHint({\n icon,\n children,\n isRuled,\n}: {\n icon?: ReactNode\n children: ReactNode\n /** Draw the rule above (the hint closes a card that already has sections). */\n isRuled?: boolean\n}) {\n return (\n <div\n className={cn(\n 'flex items-center gap-1.5 text-xs text-muted-foreground',\n isRuled && 'border-t border-border pt-1'\n )}\n >\n {icon}\n <span>{children}</span>\n </div>\n )\n}\n","/**\n * A question box that IS the product's front door, not a link to one.\n *\n * One input, two destinations: Enter (or the arrow) ASKS — hands the trimmed\n * text to `onAsk`, the conversational answer — while the Search button beside\n * it hands the same text to `onSearch`, the retrieval experience. The split\n * matters because queries come in both registers (\"what does\n * this term mean\" vs \"find every mention of it\") and making them choose a\n * page before typing kills the impulse. Omit `onSearch` and the bar is a plain\n * ask composer.\n *\n * The consumer owns what asking and searching mean (start a chat, run smart\n * search, open a record). Suggestion chips prefill the input rather than\n * firing immediately: a suggestion is a starting point you edit, not a button\n * you regret.\n *\n * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,\n * primary), so every host gets it in its own colours.\n */\n\nimport { useRef, useState, type KeyboardEventHandler, type ReactNode, type RefObject } from 'react'\nimport { Search, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface AskBarProps {\n /** Receives the trimmed question; the caller owns what asking means. */\n onAsk: (text: string) => void\n /** Second destination for the same text — retrieval. Omit to hide. */\n onSearch?: (text: string) => void\n /** Prefill-on-click starter questions, shown under the input. */\n suggestions?: string[]\n placeholder?: string\n askLabel?: string\n searchLabel?: string\n /** Controlled value. Omit for the bar to own its own text. */\n value?: string\n onValueChange?: (value: string) => void\n /** Raw keydown on the input — lets a consumer run an autocomplete\n * (arrow/Enter/Tab/Escape) before the form's own submit handling.\n * preventDefault() on Enter suppresses the submit. */\n onInputKeyDown?: KeyboardEventHandler<HTMLInputElement>\n /** Popover anchored to the pill (e.g. a slash-command menu). Rendered in a\n * relative wrapper around the form, so absolute children position against\n * the pill. */\n menu?: ReactNode\n /** External input ref, for consumers that refocus after menu selection. */\n inputRef?: RefObject<HTMLInputElement | null>\n className?: string\n /** Root test id; children derive `-input`, `-submit`, `-search`, `-suggestion`. */\n testId?: string\n}\n\nexport function AskBar({\n onAsk,\n onSearch,\n suggestions = [],\n placeholder = 'Ask anything…',\n askLabel = 'Ask',\n searchLabel = 'Search',\n value,\n onValueChange,\n onInputKeyDown,\n menu,\n inputRef: externalInputRef,\n className,\n testId = 'ask-bar',\n}: AskBarProps) {\n const [innerText, setInnerText] = useState('')\n const text = value !== undefined ? value : innerText\n const setText = (next: string) => {\n onValueChange?.(next)\n if (value === undefined) setInnerText(next)\n }\n const localInputRef = useRef<HTMLInputElement>(null)\n const inputRef = externalInputRef ?? localInputRef\n\n const submitTo = (handler: (text: string) => void) => {\n const question = text.trim()\n if (!question) return\n handler(question)\n setText('')\n }\n\n return (\n <div className={cn('flex flex-col gap-2', className)} data-testid={testId}>\n <div className=\"relative\">\n {menu}\n <form\n onSubmit={(e) => {\n e.preventDefault()\n submitTo(onAsk)\n }}\n // The AppHeader search pill's language exactly — rounded-md,\n // border-input, magnifier left, muted text — so the bar sits in a\n // topbar the way a ⌘K trigger does, not like a chat composer\n // dropped into a header.\n className=\"flex h-12 items-center gap-1.5 rounded-md border border-border/50 bg-background pl-3 pr-1.5 transition-colors focus-within:border-border\"\n >\n <Search className=\"pointer-events-none size-4 shrink-0 text-muted-foreground\" />\n <input\n ref={inputRef}\n type=\"text\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n className=\"h-8 min-w-0 flex-1 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testId && `${testId}-input`}\n />\n {onSearch && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={!text.trim()}\n onClick={() => submitTo(onSearch)}\n className=\"h-8 shrink-0 px-2.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n data-testid={testId && `${testId}-search`}\n >\n {searchLabel}\n </Button>\n )}\n {/* The primary door wears the Ask AI anatomy: Sparkles + label. */}\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!text.trim()}\n className=\"h-8 shrink-0 px-3 text-xs font-medium\"\n data-testid={testId && `${testId}-submit`}\n >\n <Sparkles className=\"size-3.5\" />\n {askLabel}\n </Button>\n </form>\n </div>\n {suggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => {\n setText(s)\n inputRef.current?.focus()\n }}\n className=\"rounded-full border border-border/50 bg-card px-3 py-1 text-xs text-muted-foreground transition-colors hover:border-border hover:bg-accent hover:text-foreground\"\n data-testid={testId && `${testId}-suggestion`}\n >\n {s}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","/**\n * One tag in full: its values for its kind's fields (position, role, status, …) editable in place,\n * then everything across the workspace that carries it — the documents (with the value or note the\n * tag has on each, and how many passages back it), the facts and the threads. The data is the tag\n * read with its links (`TagTableRow`) and its kind's fields; every write goes back through the host.\n */\n\nimport type { ReactNode } from 'react'\nimport { FileText, Lightbulb, Loader2, MessagesSquare } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport {\n DEFAULT_TAG_TABLE_LABELS,\n TagTableCell,\n type TagTableLabels,\n type TagTableProps,\n} from './TagTable'\nimport { rowLinks, type TagTableField, type TagTableRow } from './tagTableModel'\n\nexport interface TagDetailLabels {\n fields: string\n documents: string\n facts: string\n threads: string\n /** `{shown}` of `{count}` listed. */\n showing: string\n noDocuments: string\n noFacts: string\n noThreads: string\n untitledThread: string\n /** When a thread was last active: `{date}`. */\n threadUpdated: string\n /** `{count}` passages cited. */\n passages: string\n passage: string\n loading: string\n}\n\nexport const DEFAULT_TAG_DETAIL_LABELS: TagDetailLabels = {\n fields: 'Fields',\n documents: 'Documents',\n facts: 'Facts',\n threads: 'Threads',\n showing: 'Showing {shown} of {count}',\n noDocuments: 'No document carries this tag yet.',\n noFacts: 'No fact carries this tag yet.',\n noThreads: 'No thread carries this tag yet.',\n untitledThread: 'Untitled thread',\n threadUpdated: 'Updated {date}',\n passages: '{count} passages',\n passage: '1 passage',\n loading: 'Loading…',\n}\n\nexport interface TagDetailProps extends Pick<\n TagTableProps,\n 'onChangeValue' | 'onOpenDocument' | 'onOpenFact' | 'onOpenThread' | 'people'\n> {\n /** The tag with its values and links (documents, facts, threads). */\n row: TagTableRow | undefined\n /** Its kind's fields in the workspace (none: no Fields section). */\n fields?: TagTableField[]\n isLoading?: boolean\n labels?: Partial<TagDetailLabels>\n /** Labels of the field inputs (the empty choice). */\n fieldLabels?: Partial<TagTableLabels>\n className?: string\n testId?: string\n}\n\nfunction Section({\n title,\n count,\n shown,\n l,\n children,\n testId,\n}: {\n title: string\n count?: number\n shown?: number\n l: TagDetailLabels\n children: ReactNode\n testId: string\n}) {\n return (\n <section className=\"flex flex-col gap-2\" data-testid={testId}>\n <div className=\"flex items-baseline gap-2\">\n <h2 className=\"text-sm font-semibold\">{title}</h2>\n {count !== undefined && (\n <span className=\"text-sm tabular-nums text-muted-foreground\">{count}</span>\n )}\n {count !== undefined && shown !== undefined && shown < count && (\n <span className=\"ml-auto text-xs text-muted-foreground\">\n {l.showing.replace('{shown}', String(shown)).replace('{count}', String(count))}\n </span>\n )}\n </div>\n {children}\n </section>\n )\n}\n\n/** A timestamp as a day in the viewer's locale (\"18 Oct 2026\"). */\nconst formatDay = (iso: string) => {\n const at = new Date(iso)\n return Number.isNaN(at.getTime())\n ? iso\n : at.toLocaleDateString(undefined, { day: 'numeric', month: 'short', year: 'numeric' })\n}\n\nconst LIST = 'divide-y divide-border overflow-hidden rounded-lg border border-border'\nconst ITEM =\n 'flex w-full items-start gap-2 px-3 py-2 text-left text-sm transition-colors hover:bg-muted/50 disabled:hover:bg-transparent'\n\nexport function TagDetail({\n row,\n fields = [],\n isLoading,\n people,\n onChangeValue,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n labels,\n fieldLabels,\n className,\n testId = 'tag-detail',\n}: TagDetailProps) {\n const l = { ...DEFAULT_TAG_DETAIL_LABELS, ...labels }\n const cellLabels = { ...DEFAULT_TAG_TABLE_LABELS, ...fieldLabels }\n if (isLoading || !row)\n return (\n <p className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {l.loading}\n </p>\n )\n const links = rowLinks(row)\n const docs = links.docs ?? []\n const facts = links.facts ?? []\n const threads = links.threads ?? []\n const passages = (n: number) => (n === 1 ? l.passage : l.passages.replace('{count}', String(n)))\n\n return (\n <div className={cn('flex flex-col gap-6', className)} data-testid={testId}>\n {fields.length > 0 && (\n <Section title={l.fields} l={l} testId={`${testId}-fields`}>\n <dl className=\"grid grid-cols-1 gap-x-4 gap-y-2 sm:grid-cols-[minmax(8rem,auto)_1fr]\">\n {fields.map((field) => (\n <div key={field.id} className=\"contents\">\n <dt className=\"pt-1.5 text-sm text-muted-foreground\">{field.name}</dt>\n <dd className=\"min-w-0\">\n <TagTableCell\n row={row}\n column={field}\n people={people}\n onChange={onChangeValue}\n l={cellLabels}\n testId={`${testId}-field-${field.id}`}\n />\n </dd>\n </div>\n ))}\n </dl>\n </Section>\n )}\n\n <Section\n title={l.documents}\n count={links.doc_count}\n shown={docs.length}\n l={l}\n testId={`${testId}-documents`}\n >\n {docs.length ? (\n <ul className={LIST}>\n {docs.map((d) => (\n <li key={d.doc_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenDocument}\n onClick={() => onOpenDocument?.(d.doc_ext_id)}\n data-testid={`${testId}-doc-${d.doc_ext_id}`}\n >\n <FileText className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate font-medium\">{d.file_name}</span>\n {d.note && (\n <span className=\"line-clamp-2 whitespace-pre-line text-muted-foreground\">\n {d.note}\n </span>\n )}\n </span>\n {d.citations_count > 0 && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {passages(d.citations_count)}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noDocuments}</p>\n )}\n </Section>\n\n <Section\n title={l.facts}\n count={links.fact_count}\n shown={facts.length}\n l={l}\n testId={`${testId}-facts`}\n >\n {facts.length ? (\n <ul className={LIST}>\n {facts.map((f) => (\n <li key={f.fact_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenFact}\n onClick={() => onOpenFact?.(f.fact_ext_id)}\n data-testid={`${testId}-fact-${f.fact_ext_id}`}\n >\n <Lightbulb className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"line-clamp-3 min-w-0 flex-1\">{f.text}</span>\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noFacts}</p>\n )}\n </Section>\n\n <Section\n title={l.threads}\n count={links.thread_count}\n shown={threads.length}\n l={l}\n testId={`${testId}-threads`}\n >\n {threads.length ? (\n <ul className={LIST}>\n {threads.map((t) => (\n <li key={t.conversation_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenThread}\n onClick={() => onOpenThread?.(t.conversation_ext_id)}\n data-testid={`${testId}-thread-${t.conversation_ext_id}`}\n >\n <MessagesSquare className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 flex-1 truncate font-medium\">\n {t.title || l.untitledThread}\n </span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {l.threadUpdated.replace('{date}', formatDay(t.updated_at))}\n </span>\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noThreads}</p>\n )}\n </Section>\n </div>\n )\n}\n","/**\n * The side navigation of a Tags page: the workspace's tags grouped by kind (labels, annotations,\n * issues, people, organisations, searches), each group with its count, each tag with how much\n * carries it, and nested tags (a label's sub-labels) under their parent. A group heading selects\n * the whole kind; a tag selects that tag. Data-free: the host passes the groups.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport { Search, X } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\nexport interface TagsNavItem {\n id: string\n name: string\n /** How many documents and facts carry it. */\n count?: number\n /** A swatch colour (any CSS colour). */\n color?: string\n /** Nested tags (e.g. a label's sub-labels). */\n children?: TagsNavItem[]\n}\n\nexport interface TagsNavGroup {\n id: string\n label: string\n icon?: ReactNode\n items: TagsNavItem[]\n}\n\n/** What is selected: a whole group, or one tag of it. */\nexport type TagsNavSelection = { groupId: string; itemId?: string }\n\nexport interface TagsNavLabels {\n filter: string\n clearFilter: string\n empty: string\n noMatch: string\n}\n\nexport const DEFAULT_TAGS_NAV_LABELS: TagsNavLabels = {\n filter: 'Find a tag…',\n clearFilter: 'Clear',\n empty: 'None yet',\n noMatch: 'No match',\n}\n\nexport interface TagsNavProps {\n groups: TagsNavGroup[]\n selected: TagsNavSelection | null\n onSelect: (selection: TagsNavSelection) => void\n labels?: Partial<TagsNavLabels>\n className?: string\n testId?: string\n}\n\nconst total = (items: TagsNavItem[]): number =>\n items.reduce((n, item) => n + 1 + total(item.children ?? []), 0)\n\n/** The items whose name (or a nested item's name) contains `text`, nesting kept. */\nfunction filterItems(items: TagsNavItem[], text: string): TagsNavItem[] {\n if (!text) return items\n const needle = text.toLowerCase()\n return items.flatMap((item) => {\n const children = filterItems(item.children ?? [], text)\n return item.name.toLowerCase().includes(needle) || children.length\n ? [{ ...item, children }]\n : []\n })\n}\n\nexport function TagsNav({\n groups,\n selected,\n onSelect,\n labels,\n className,\n testId = 'tags-nav',\n}: TagsNavProps) {\n const l = { ...DEFAULT_TAGS_NAV_LABELS, ...labels }\n const [filter, setFilter] = useState('')\n const text = filter.trim()\n\n const row = (groupId: string, item: TagsNavItem, depth: number): ReactNode => {\n const active = selected?.groupId === groupId && selected.itemId === item.id\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId, itemId: item.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md py-1.5 pr-2 text-left text-sm transition-colors hover:bg-muted pointer-coarse:min-h-11',\n active && 'bg-primary/10 font-medium text-primary hover:bg-primary/10'\n )}\n style={{ paddingLeft: 12 + depth * 16 }}\n data-testid={`${testId}-item-${item.id}`}\n >\n {item.color && (\n <span\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: item.color }}\n aria-hidden\n />\n )}\n <span className=\"min-w-0 flex-1 truncate\" title={item.name}>\n {item.name}\n </span>\n {item.count !== undefined && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {item.count}\n </span>\n )}\n </button>\n {!!item.children?.length && (\n <ul>{item.children.map((child) => row(groupId, child, depth + 1))}</ul>\n )}\n </li>\n )\n }\n\n return (\n <nav className={cn('flex flex-col gap-3', className)} data-testid={testId}>\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n placeholder={l.filter}\n aria-label={l.filter}\n className=\"h-8 pl-8 pr-8 text-sm\"\n data-testid={`${testId}-filter`}\n />\n {filter && (\n <button\n type=\"button\"\n onClick={() => setFilter('')}\n aria-label={l.clearFilter}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n {groups.map((group) => {\n const items = filterItems(group.items, text)\n if (text && !items.length) return null\n const active = selected?.groupId === group.id && !selected.itemId\n return (\n <section key={group.id} data-testid={`${testId}-group-${group.id}`}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId: group.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:bg-muted hover:text-foreground pointer-coarse:min-h-11',\n active && 'bg-primary/10 text-primary hover:bg-primary/10 hover:text-primary'\n )}\n data-testid={`${testId}-group-${group.id}-heading`}\n >\n {group.icon && <span className=\"shrink-0 [&_svg]:size-4\">{group.icon}</span>}\n <span className=\"flex-1\">{group.label}</span>\n <span className=\"tabular-nums\" data-testid={`${testId}-group-${group.id}-count`}>\n {total(group.items)}\n </span>\n </button>\n {items.length ? (\n <ul className=\"mt-0.5\">{items.map((item) => row(group.id, item, 0))}</ul>\n ) : (\n <p className=\"px-3 py-1 text-xs text-muted-foreground\">{l.empty}</p>\n )}\n </section>\n )\n })}\n {text && groups.every((g) => !filterItems(g.items, text).length) && (\n <p className=\"px-2 text-sm text-muted-foreground\">{l.noMatch}</p>\n )}\n </nav>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Toolbar.tsx","../src/components/EntityIdentityBar.tsx","../src/components/EntityTooltip.tsx","../src/components/AskBar.tsx","../src/tags/TagDetail.tsx","../src/tags/TagsNav.tsx"],"names":["jsxs","cn","jsx","Input","useState","Search","text"],"mappings":"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","file":"index.js","sourcesContent":["import type { ReactNode } from 'react'\nimport { Search } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\n/** Search + filter bar used above every list view. */\nexport function Toolbar({\n search,\n onSearch,\n searchPlaceholder = 'Search…',\n filters,\n actions,\n className,\n testId,\n}: {\n search?: string\n onSearch?: (v: string) => void\n searchPlaceholder?: string\n filters?: ReactNode\n actions?: ReactNode\n className?: string\n testId?: string\n}) {\n return (\n <div\n className={cn(\n 'flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between',\n className\n )}\n data-testid={testId}\n >\n <div className=\"flex flex-1 flex-wrap items-center gap-2\">\n {onSearch && (\n <div className=\"relative w-full max-w-xs\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => onSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"bg-card text-sm placeholder:text-muted-foreground focus-visible:border-ring/60 focus-visible:ring-2 focus-visible:ring-ring pl-8\"\n data-testid={testId ? `${testId}-search` : 'toolbar-search'}\n />\n </div>\n )}\n {filters}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n )\n}\n","import { useEffect, useState, type ReactNode } from 'react'\nimport { Pencil } from 'lucide-react'\nimport { Input, Textarea, cn } from '@arbidocs/react/ui'\n\n/** Longest a name may be. Exported so a form editing the same field agrees. */\nexport const IDENTITY_NAME_MAX_LENGTH = 50\n\n/** Shown once the remaining allowance gets this low, not for the whole time. */\nconst COUNTER_THRESHOLD = 10\n\nexport interface EntityIdentityField {\n /** Row caption. Rendered with a trailing colon. */\n label: string\n value: string\n /** Stands in for an empty value, in italics — never a blank row. */\n placeholder: string\n /** Commits the edit. Not called when the value is unchanged. */\n onSave: (next: string) => void\n /** A description needs line breaks; a name does not. */\n multiline?: boolean\n /** Caps the input and shows a counter as it fills. Names only, by default. */\n maxLength?: number\n /** Classes for the read-mode value, e.g. a larger weight for the name. */\n valueClassName?: string\n /**\n * Content pinned to the RIGHT END of this row — e.g. the owning project\n * beside a name, a member stack beside a status. Rows without one let their\n * value run the full width, which is what a description wants.\n */\n trailing?: ReactNode\n /**\n * Content rendered immediately BEFORE the value — the entity's own mark.\n * Sits outside the edit swap, so starting to edit the name doesn't make the\n * icon jump or disappear.\n */\n leading?: ReactNode\n /**\n * Drops the caption from view for this row, leaving the value flush left.\n * For a field whose value already says what it is — a workspace's name and\n * description read as exactly that — the caption is a word the eye has to\n * step over on the way in. The caption stays in the markup for screen\n * readers, which have no such visual cue to fall back on.\n */\n hideLabel?: boolean\n /** Row test id; the pencil and input derive `-edit` and `-input`. */\n testId?: string\n}\n\nexport interface EntityIdentityBarProps {\n /** The editable text fields, in order. Usually name then description. */\n fields: EntityIdentityField[]\n /**\n * Read-only rows shown after the editable ones — anything whose control the\n * consumer owns (a project picker, an owner avatar, a status). Rendered with\n * the same caption column so every row lines up.\n */\n extraRows?: { label: string; content: ReactNode; trailing?: ReactNode; testId?: string }[]\n /** Hides every pencil. A viewer without permission sees values, not controls. */\n canEdit?: boolean\n /** Trailing controls, pinned right — e.g. a member stack, a status. */\n actions?: ReactNode\n /**\n * Controls that act on the ENTITY rather than on any one field — typically an\n * overflow menu holding delete or leave. Sits under the field list, where a\n * destructive action is findable but not in the path of everyday reading.\n */\n footer?: ReactNode\n className?: string\n testId?: string\n}\n\n/**\n * The \"what am I looking at\" bar for an entity's own page.\n *\n * A caption column (`Name:`, `Description:`, `Project:`) and a value column. The\n * captions are the point: a bare bold string at the top of a page reads equally\n * as a workspace, a project, a case file or a folder, and people read it as\n * whichever they expected. Saying which field is which costs one column and\n * removes the ambiguity entirely.\n *\n * Editing happens in place. The pencil is always visible to someone who can use\n * it rather than revealed on hover — a control you have to go hunting for is one\n * most people never find, and hover doesn't exist on touch. Commit is on blur\n * and on Enter (single-line fields only, so a description can hold line\n * breaks); Escape abandons the edit.\n *\n * Deliberately NOT a form: no submit, no dirty state, no field-level errors.\n * When a consumer needs visibility toggles, destructive actions or validation\n * messages, those belong in its settings form — this bar is the identity of the\n * thing, shown where you are working on it.\n *\n * Styled with SEMANTIC tokens only, so every host gets it in its own colours.\n */\nexport function EntityIdentityBar({\n fields,\n extraRows = [],\n canEdit = false,\n actions,\n footer,\n className,\n testId,\n}: EntityIdentityBarProps) {\n return (\n <div\n className={cn('flex flex-wrap items-start justify-between gap-x-6 gap-y-3', className)}\n data-testid={testId}\n >\n <dl className=\"min-w-0 flex-1 space-y-1.5\">\n {fields.map((field) => (\n <IdentityFieldRow key={field.label} field={field} canEdit={canEdit} />\n ))}\n {extraRows.map((row) => (\n <div\n key={row.label}\n className=\"flex min-h-7 min-w-0 items-center gap-2\"\n data-testid={row.testId}\n >\n <dt className=\"w-24 shrink-0 text-sm font-medium text-muted-foreground\">\n {row.label}:\n </dt>\n <dd className=\"flex min-w-0 flex-1 items-center gap-2\">\n {row.content}\n {row.trailing ? (\n <div className=\"min-w-0 shrink-0 sm:ml-auto\">{row.trailing}</div>\n ) : null}\n </dd>\n </div>\n ))}\n {footer ? <div className=\"flex items-center pt-0.5\">{footer}</div> : null}\n </dl>\n {actions ? <div className=\"flex shrink-0 items-center gap-2\">{actions}</div> : null}\n </div>\n )\n}\n\nfunction IdentityFieldRow({ field, canEdit }: { field: EntityIdentityField; canEdit: boolean }) {\n const {\n label,\n value,\n placeholder,\n onSave,\n multiline = false,\n maxLength,\n valueClassName,\n leading,\n hideLabel,\n trailing,\n testId,\n } = field\n\n const [isEditing, setIsEditing] = useState(false)\n const [draft, setDraft] = useState(value)\n\n // Track the value while not editing, so an update from elsewhere (another\n // tab, a websocket) doesn't get overwritten by a stale draft on the next edit.\n useEffect(() => {\n if (!isEditing) setDraft(value)\n }, [value, isEditing])\n\n const commit = () => {\n setIsEditing(false)\n const next = draft.trim()\n if (next !== value) onSave(next)\n }\n\n const cancel = () => {\n setDraft(value)\n setIsEditing(false)\n }\n\n const charsLeft = maxLength === undefined ? null : maxLength - draft.length\n\n // Editing must not move anything. The input carries the read view's exact\n // typography and padding, drops the border and shadow entirely, and marks\n // focus with a contrasting FIELD instead — a box appearing around the text\n // (and the row growing to fit it) reads as the page jumping under the cursor.\n const fieldClass =\n 'h-auto rounded border-0 bg-muted px-1.5 py-0.5 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0'\n\n const shared = {\n autoFocus: true,\n value: draft,\n placeholder,\n maxLength,\n 'aria-label': label,\n 'data-testid': testId && `${testId}-input`,\n onBlur: commit,\n onChange: (e: { target: { value: string } }) => setDraft(e.target.value),\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n cancel()\n } else if (e.key === 'Enter' && !multiline) {\n e.preventDefault()\n commit()\n }\n },\n }\n\n // Every row shares one minimum height: that of the small controls (h-7) a\n // row may carry at its trailing end. A row that is only text then sits in\n // the same rhythm as one holding a button, so the captions fall on an even\n // beat down the bar instead of bunching up wherever a row has no control.\n return (\n <div className={cn('flex min-h-7 min-w-0 gap-2', multiline ? 'items-start' : 'items-center')}>\n <dt\n className={cn(\n hideLabel\n ? 'sr-only'\n : cn('w-24 shrink-0 text-sm font-medium text-muted-foreground', multiline && 'pt-1')\n )}\n >\n {label}:\n </dt>\n {/* Wraps under sm: the trailing controls drop to their own line instead of overflowing. */}\n <dd className=\"flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1.5 sm:flex-nowrap\">\n {leading}\n {isEditing ? (\n <div className=\"relative min-w-0 flex-1 max-sm:basis-[calc(100%-2.5rem)]\">\n {multiline ? (\n <Textarea\n {...shared}\n rows={2}\n className={cn(fieldClass, 'min-h-0 resize-none leading-snug', valueClassName)}\n />\n ) : (\n <Input {...shared} className={cn(fieldClass, 'pr-20', valueClassName)} />\n )}\n {charsLeft !== null && charsLeft <= COUNTER_THRESHOLD && (\n <span\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 hidden -translate-y-1/2 text-sm lg:block',\n charsLeft < 0 ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={testId && `${testId}-counter`}\n >\n {charsLeft < 0 ? `${-charsLeft} over` : `${charsLeft} left`}\n </span>\n )}\n </div>\n ) : (\n // `identity-field` (not the generic `group`) scopes the pencil's hover\n // to THIS field only — an ancestor card also carries `group`, so a\n // `.group:hover` rule would reveal every field's pencil at once.\n <span className=\"identity-field flex min-w-0 flex-1 items-center gap-1.5 sm:flex-none\">\n {/* Same padding as the input above — the swap must not nudge the\n text sideways or change the row's height. */}\n <span className={cn('px-1.5 py-0.5', valueClassName)} data-testid={testId}>\n {value || <span className=\"italic text-muted-foreground\">{placeholder}</span>}\n </span>\n {canEdit && (\n <button\n type=\"button\"\n onClick={() => setIsEditing(true)}\n aria-label={`Edit ${label.toLowerCase()}`}\n title={`Edit ${label.toLowerCase()}`}\n // Quiet by default — the pencil only surfaces when the row is\n // hovered so it reads as clean text, and stays reachable by\n // keyboard (focus-visible).\n //\n // NB: use the ungated `[.identity-field:hover_&]` selector rather\n // than Tailwind's `group-hover:`. The latter compiles behind\n // `@media (hover: hover)`, so on a touchscreen (whose PRIMARY\n // pointer reports `hover: none`) the rule is disabled even when a\n // real mouse is firing hover events — the pencil then stays at\n // opacity-0 forever. The arbitrary selector has no media gate, so\n // it reveals on any genuine `:hover`.\n className=\"shrink-0 cursor-pointer rounded p-1 text-muted-foreground opacity-60 transition-[color,background-color,opacity] hover:bg-accent hover:text-foreground focus-visible:opacity-100 pointer-coarse:p-[15px] [.identity-field:hover_&]:opacity-100\"\n data-testid={testId && `${testId}-edit`}\n >\n <Pencil className=\"size-3.5\" />\n </button>\n )}\n </span>\n )}\n {trailing ? (\n <div className=\"min-w-0 shrink-0 max-sm:w-full sm:ml-auto\">{trailing}</div>\n ) : null}\n </dd>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\n/**\n * Parts for the hover card of an entity pill (workspace, user, tag, ...): a header, optional\n * stat rows, bordered sections and an action hint. The host fills them from its own data.\n */\n\nexport function EntityTooltip({\n className,\n children,\n}: {\n className?: string\n children: ReactNode\n}) {\n return (\n <div data-slot=\"entity-tooltip\" className={cn('flex flex-col gap-2', className)}>\n {children}\n </div>\n )\n}\n\nexport interface EntityTooltipHeaderProps {\n /** Icon / avatar before the title. */\n lead: ReactNode\n title: ReactNode\n subtitle?: ReactNode\n /** Right-hand badge. */\n trailing?: ReactNode\n /** Extra glyph after the title (e.g. an agent mark). */\n titleAccessory?: ReactNode\n}\n\nexport function EntityTooltipHeader({\n lead,\n title,\n subtitle,\n trailing,\n titleAccessory,\n}: EntityTooltipHeaderProps) {\n return (\n <div className=\"flex items-center gap-2\">\n {lead}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"truncate text-sm font-medium\">{title}</span>\n {titleAccessory}\n </div>\n {subtitle && <span className=\"truncate text-xs text-muted-foreground\">{subtitle}</span>}\n </div>\n {trailing}\n </div>\n )\n}\n\nexport interface EntityTooltipStat {\n key: string\n icon: ReactNode\n label: ReactNode\n value: ReactNode\n}\n\n/** Label/value rows between two rules. */\nexport function EntityTooltipStats({ stats }: { stats: EntityTooltipStat[] }) {\n return (\n <div className=\"flex flex-col gap-1.5 border-y border-border py-2\">\n {stats.map((s) => (\n <div key={s.key} className=\"flex items-center justify-between text-sm\">\n <div className=\"flex items-center gap-2\">\n {s.icon}\n <span className=\"text-muted-foreground\">{s.label}</span>\n </div>\n <span className=\"font-medium\">{s.value}</span>\n </div>\n ))}\n </div>\n )\n}\n\n/** A secondary section under a rule, optionally headed by an icon + text. */\nexport function EntityTooltipSection({\n icon,\n heading,\n children,\n}: {\n icon?: ReactNode\n heading?: ReactNode\n children?: ReactNode\n}) {\n return (\n <div className=\"flex flex-col gap-1.5 border-t border-border pt-2\">\n {heading && (\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n {icon}\n <span>{heading}</span>\n </div>\n )}\n {children}\n </div>\n )\n}\n\n/** Muted one-liner at the foot of the card, e.g. \"Click to send message\". */\nexport function EntityTooltipHint({\n icon,\n children,\n isRuled,\n}: {\n icon?: ReactNode\n children: ReactNode\n /** Draw the rule above (the hint closes a card that already has sections). */\n isRuled?: boolean\n}) {\n return (\n <div\n className={cn(\n 'flex items-center gap-1.5 text-xs text-muted-foreground',\n isRuled && 'border-t border-border pt-1'\n )}\n >\n {icon}\n <span>{children}</span>\n </div>\n )\n}\n","/**\n * A question box that IS the product's front door, not a link to one.\n *\n * One input, two destinations: Enter (or the arrow) ASKS — hands the trimmed\n * text to `onAsk`, the conversational answer — while the Search button beside\n * it hands the same text to `onSearch`, the retrieval experience. The split\n * matters because queries come in both registers (\"what does\n * this term mean\" vs \"find every mention of it\") and making them choose a\n * page before typing kills the impulse. Omit `onSearch` and the bar is a plain\n * ask composer.\n *\n * The consumer owns what asking and searching mean (start a chat, run smart\n * search, open a record). Suggestion chips prefill the input rather than\n * firing immediately: a suggestion is a starting point you edit, not a button\n * you regret.\n *\n * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,\n * primary), so every host gets it in its own colours.\n */\n\nimport { useRef, useState, type KeyboardEventHandler, type ReactNode, type RefObject } from 'react'\nimport { Search, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface AskBarProps {\n /** Receives the trimmed question; the caller owns what asking means. */\n onAsk: (text: string) => void\n /** Second destination for the same text — retrieval. Omit to hide. */\n onSearch?: (text: string) => void\n /** Prefill-on-click starter questions, shown under the input. */\n suggestions?: string[]\n placeholder?: string\n askLabel?: string\n searchLabel?: string\n /** Controlled value. Omit for the bar to own its own text. */\n value?: string\n onValueChange?: (value: string) => void\n /** Raw keydown on the input — lets a consumer run an autocomplete\n * (arrow/Enter/Tab/Escape) before the form's own submit handling.\n * preventDefault() on Enter suppresses the submit. */\n onInputKeyDown?: KeyboardEventHandler<HTMLInputElement>\n /** Popover anchored to the pill (e.g. a slash-command menu). Rendered in a\n * relative wrapper around the form, so absolute children position against\n * the pill. */\n menu?: ReactNode\n /** External input ref, for consumers that refocus after menu selection. */\n inputRef?: RefObject<HTMLInputElement | null>\n className?: string\n /** Root test id; children derive `-input`, `-submit`, `-search`, `-suggestion`. */\n testId?: string\n}\n\nexport function AskBar({\n onAsk,\n onSearch,\n suggestions = [],\n placeholder = 'Ask anything…',\n askLabel = 'Ask',\n searchLabel = 'Search',\n value,\n onValueChange,\n onInputKeyDown,\n menu,\n inputRef: externalInputRef,\n className,\n testId = 'ask-bar',\n}: AskBarProps) {\n const [innerText, setInnerText] = useState('')\n const text = value !== undefined ? value : innerText\n const setText = (next: string) => {\n onValueChange?.(next)\n if (value === undefined) setInnerText(next)\n }\n const localInputRef = useRef<HTMLInputElement>(null)\n const inputRef = externalInputRef ?? localInputRef\n\n const submitTo = (handler: (text: string) => void) => {\n const question = text.trim()\n if (!question) return\n handler(question)\n setText('')\n }\n\n return (\n <div className={cn('flex flex-col gap-2', className)} data-testid={testId}>\n <div className=\"relative\">\n {menu}\n <form\n onSubmit={(e) => {\n e.preventDefault()\n submitTo(onAsk)\n }}\n // The AppHeader search pill's language exactly — rounded-md,\n // border-input, magnifier left, muted text — so the bar sits in a\n // topbar the way a ⌘K trigger does, not like a chat composer\n // dropped into a header.\n className=\"flex h-12 items-center gap-1.5 rounded-md border border-border/50 bg-background pl-3 pr-1.5 transition-colors focus-within:border-border\"\n >\n <Search className=\"pointer-events-none size-4 shrink-0 text-muted-foreground\" />\n <input\n ref={inputRef}\n type=\"text\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n className=\"h-8 min-w-0 flex-1 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testId && `${testId}-input`}\n />\n {onSearch && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={!text.trim()}\n onClick={() => submitTo(onSearch)}\n className=\"h-8 shrink-0 px-2.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n data-testid={testId && `${testId}-search`}\n >\n {searchLabel}\n </Button>\n )}\n {/* The primary door wears the Ask AI anatomy: Sparkles + label. */}\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!text.trim()}\n className=\"h-8 shrink-0 px-3 text-xs font-medium\"\n data-testid={testId && `${testId}-submit`}\n >\n <Sparkles className=\"size-3.5\" />\n {askLabel}\n </Button>\n </form>\n </div>\n {suggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => {\n setText(s)\n inputRef.current?.focus()\n }}\n className=\"rounded-full border border-border/50 bg-card px-3 py-1 text-xs text-muted-foreground transition-colors hover:border-border hover:bg-accent hover:text-foreground\"\n data-testid={testId && `${testId}-suggestion`}\n >\n {s}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","/**\n * One tag in full: its values for its kind's fields (position, role, status, …) editable in place,\n * then everything across the workspace that carries it — the documents (with the value or note the\n * tag has on each, and how many passages back it), the facts and the threads. The data is the tag\n * read with its links (`TagTableRow`) and its kind's fields; every write goes back through the host.\n */\n\nimport type { ReactNode } from 'react'\nimport { FileText, Lightbulb, Loader2, MessagesSquare } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport {\n DEFAULT_TAG_TABLE_LABELS,\n TagTableCell,\n type TagTableLabels,\n type TagTableProps,\n} from './TagTable'\nimport { rowLinks, type TagTableField, type TagTableRow } from './tagTableModel'\n\nexport interface TagDetailLabels {\n fields: string\n documents: string\n facts: string\n threads: string\n /** `{shown}` of `{count}` listed. */\n showing: string\n noDocuments: string\n noFacts: string\n /** An annotation with no value on a document. */\n noValue: string\n noThreads: string\n untitledThread: string\n /** When a thread was last active: `{date}`. */\n threadUpdated: string\n /** `{count}` passages cited. */\n passages: string\n passage: string\n loading: string\n}\n\nexport const DEFAULT_TAG_DETAIL_LABELS: TagDetailLabels = {\n fields: 'Fields',\n documents: 'Documents',\n facts: 'Facts',\n threads: 'Threads',\n showing: 'Showing {shown} of {count}',\n noDocuments: 'No document carries this tag yet.',\n noFacts: 'No fact carries this tag yet.',\n noValue: 'No note',\n noThreads: 'No thread carries this tag yet.',\n untitledThread: 'Untitled thread',\n threadUpdated: 'Updated {date}',\n passages: '{count} passages',\n passage: '1 passage',\n loading: 'Loading…',\n}\n\nexport interface TagDetailProps extends Pick<\n TagTableProps,\n | 'onChangeValue'\n | 'onOpenDocument'\n | 'onOpenFact'\n | 'onOpenThread'\n | 'people'\n | 'tags'\n | 'onOpenTag'\n> {\n /** The tag with its values and links (documents, facts, threads). */\n row: TagTableRow | undefined\n /** Its kind's fields in the workspace (none: no Fields section). */\n fields?: TagTableField[]\n /**\n * What the tag's note on a document is, e.g. \"Note\" for an annotation or \"Role\" for a person.\n * Given, each document row names it before the note.\n */\n noteLabel?: string\n /**\n * The note is the point of the row (an annotation's value): shown prominently, and a document\n * without one says so.\n */\n noteIsValue?: boolean\n isLoading?: boolean\n labels?: Partial<TagDetailLabels>\n /** Labels of the field inputs (the empty choice). */\n fieldLabels?: Partial<TagTableLabels>\n className?: string\n testId?: string\n}\n\nfunction Section({\n title,\n count,\n shown,\n l,\n children,\n testId,\n}: {\n title: string\n count?: number\n shown?: number\n l: TagDetailLabels\n children: ReactNode\n testId: string\n}) {\n return (\n <section className=\"flex flex-col gap-2\" data-testid={testId}>\n <div className=\"flex items-baseline gap-2\">\n <h2 className=\"text-sm font-semibold\">{title}</h2>\n {count !== undefined && (\n <span className=\"text-sm tabular-nums text-muted-foreground\">{count}</span>\n )}\n {count !== undefined && shown !== undefined && shown < count && (\n <span className=\"ml-auto text-xs text-muted-foreground\">\n {l.showing.replace('{shown}', String(shown)).replace('{count}', String(count))}\n </span>\n )}\n </div>\n {children}\n </section>\n )\n}\n\n/** A timestamp as a day in the viewer's locale (\"18 Oct 2026\"). */\nconst formatDay = (iso: string) => {\n const at = new Date(iso)\n return Number.isNaN(at.getTime())\n ? iso\n : at.toLocaleDateString(undefined, { day: 'numeric', month: 'short', year: 'numeric' })\n}\n\nconst LIST = 'divide-y divide-border overflow-hidden rounded-lg border border-border'\nconst ITEM =\n 'flex w-full items-start gap-2 px-3 py-2 text-left text-sm transition-colors hover:bg-muted/50 disabled:hover:bg-transparent'\n\nexport function TagDetail({\n row,\n fields = [],\n isLoading,\n people,\n tags,\n onOpenTag,\n onChangeValue,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n noteLabel,\n noteIsValue = false,\n labels,\n fieldLabels,\n className,\n testId = 'tag-detail',\n}: TagDetailProps) {\n const l = { ...DEFAULT_TAG_DETAIL_LABELS, ...labels }\n const cellLabels = { ...DEFAULT_TAG_TABLE_LABELS, ...fieldLabels }\n if (isLoading || !row)\n return (\n <p className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {l.loading}\n </p>\n )\n const links = rowLinks(row)\n const docs = links.docs ?? []\n const facts = links.facts ?? []\n const threads = links.threads ?? []\n const passages = (n: number) => (n === 1 ? l.passage : l.passages.replace('{count}', String(n)))\n\n return (\n <div className={cn('flex flex-col gap-6', className)} data-testid={testId}>\n {fields.length > 0 && (\n <Section title={l.fields} l={l} testId={`${testId}-fields`}>\n <dl className=\"grid grid-cols-1 gap-x-4 gap-y-2 sm:grid-cols-[minmax(8rem,auto)_1fr]\">\n {fields.map((field) => (\n <div key={field.id} className=\"contents\">\n <dt className=\"pt-1.5 text-sm text-muted-foreground\">{field.name}</dt>\n <dd className=\"min-w-0\">\n <TagTableCell\n row={row}\n column={field}\n people={people}\n tags={tags}\n onOpenTag={onOpenTag}\n onChange={onChangeValue}\n l={cellLabels}\n testId={`${testId}-field-${field.id}`}\n />\n </dd>\n </div>\n ))}\n </dl>\n </Section>\n )}\n\n <Section\n title={l.documents}\n count={links.doc_count}\n shown={docs.length}\n l={l}\n testId={`${testId}-documents`}\n >\n {docs.length ? (\n <ul className={LIST}>\n {docs.map((d) => (\n <li key={d.doc_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenDocument}\n onClick={() => onOpenDocument?.(d.doc_ext_id)}\n data-testid={`${testId}-doc-${d.doc_ext_id}`}\n >\n <FileText className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate font-medium\">{d.file_name}</span>\n {(d.note || noteIsValue) && (\n <span\n className={cn(\n 'mt-0.5 flex min-w-0 items-baseline gap-2',\n noteIsValue ? 'text-base text-foreground' : 'text-muted-foreground'\n )}\n data-testid={`${testId}-doc-${d.doc_ext_id}-note`}\n >\n {noteLabel && (\n <span className=\"shrink-0 text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {noteLabel}\n </span>\n )}\n <span\n className={cn(\n 'line-clamp-3 min-w-0 whitespace-pre-line',\n noteIsValue && 'font-semibold',\n !d.note && 'font-normal italic text-muted-foreground'\n )}\n >\n {d.note || l.noValue}\n </span>\n </span>\n )}\n </span>\n {d.citations_count > 0 && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {passages(d.citations_count)}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noDocuments}</p>\n )}\n </Section>\n\n <Section\n title={l.facts}\n count={links.fact_count}\n shown={facts.length}\n l={l}\n testId={`${testId}-facts`}\n >\n {facts.length ? (\n <ul className={LIST}>\n {facts.map((f) => (\n <li key={f.fact_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenFact}\n onClick={() => onOpenFact?.(f.fact_ext_id)}\n data-testid={`${testId}-fact-${f.fact_ext_id}`}\n >\n <Lightbulb className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"line-clamp-3 min-w-0 flex-1\">{f.text}</span>\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noFacts}</p>\n )}\n </Section>\n\n <Section\n title={l.threads}\n count={links.thread_count}\n shown={threads.length}\n l={l}\n testId={`${testId}-threads`}\n >\n {threads.length ? (\n <ul className={LIST}>\n {threads.map((t) => (\n <li key={t.conversation_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenThread}\n onClick={() => onOpenThread?.(t.conversation_ext_id)}\n data-testid={`${testId}-thread-${t.conversation_ext_id}`}\n >\n <MessagesSquare className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 flex-1 truncate font-medium\">\n {t.title || l.untitledThread}\n </span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {l.threadUpdated.replace('{date}', formatDay(t.updated_at))}\n </span>\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noThreads}</p>\n )}\n </Section>\n </div>\n )\n}\n","/**\n * The side navigation of a Tags page: the workspace's tags grouped by kind (labels, annotations,\n * issues, people, organisations, searches), each group with its count, each tag with how much\n * carries it, and nested tags (sub-labels) under their parent. A group heading selects the whole\n * kind; a tag selects that tag. One box finds and adds: typing filters the list, and a name that is\n * not there yet is offered as a new tag (\"Create …\", or Enter). Data-free: the host passes the\n * groups and creates.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport { Plus, Search, X } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\nexport interface TagsNavItem {\n id: string\n name: string\n /** How many documents and facts carry it. */\n count?: number\n /** A swatch colour (any CSS colour). */\n color?: string\n /** Nested tags (e.g. sub-labels). */\n children?: TagsNavItem[]\n /** Other text the filter matches (e.g. the tag's field values). */\n keywords?: string\n}\n\nexport interface TagsNavGroup {\n id: string\n label: string\n icon?: ReactNode\n items: TagsNavItem[]\n}\n\n/** What is selected: a whole group, or one tag of it. */\nexport type TagsNavSelection = { groupId: string; itemId?: string }\n\nexport interface TagsNavLabels {\n filter: string\n clearFilter: string\n empty: string\n noMatch: string\n /** Offer to add the typed name: `{name}`. */\n create: string\n}\n\nexport const DEFAULT_TAGS_NAV_LABELS: TagsNavLabels = {\n filter: 'Find or add a tag…',\n clearFilter: 'Clear',\n empty: 'None yet',\n noMatch: 'No match',\n create: 'Create \"{name}\"',\n}\n\nexport interface TagsNavProps {\n groups: TagsNavGroup[]\n selected: TagsNavSelection | null\n onSelect: (selection: TagsNavSelection) => void\n /**\n * Add a tag by the name typed in the box when no tag has that name (any case). Absent: the box\n * only finds.\n */\n onCreate?: (name: string) => void | Promise<unknown>\n /**\n * The filter text, when the box lives elsewhere (e.g. the page header's filter): the list then\n * renders no box of its own and filters by this; `onFilterChange` hears a create clearing it.\n */\n filter?: string\n onFilterChange?: (text: string) => void\n /** Match items' `keywords` as well as their names. */\n matchKeywords?: boolean\n labels?: Partial<TagsNavLabels>\n className?: string\n testId?: string\n}\n\nconst total = (items: TagsNavItem[]): number =>\n items.reduce((n, item) => n + 1 + total(item.children ?? []), 0)\n\n/** The tag named `name` (any case) in these groups, with its group; nested ones included. */\nexport function findTagsNavItem(\n groups: TagsNavGroup[],\n name: string\n): { groupId: string; item: TagsNavItem } | undefined {\n const text = name.trim()\n if (!text) return undefined\n for (const g of groups) {\n const item = findByName(g.items, text)\n if (item) return { groupId: g.id, item }\n }\n return undefined\n}\n\n/** The item named `name` (any case), nested ones included. */\nfunction findByName(items: TagsNavItem[], name: string): TagsNavItem | undefined {\n const needle = name.toLowerCase()\n for (const item of items) {\n if (item.name.trim().toLowerCase() === needle) return item\n const nested = findByName(item.children ?? [], name)\n if (nested) return nested\n }\n return undefined\n}\n\n/** The items whose name (or keywords, or a nested item's) contains `text`, nesting kept. */\nfunction filterItems(items: TagsNavItem[], text: string, keywords = false): TagsNavItem[] {\n if (!text) return items\n const needle = text.toLowerCase()\n return items.flatMap((item) => {\n const children = filterItems(item.children ?? [], text, keywords)\n const hit =\n item.name.toLowerCase().includes(needle) ||\n (keywords && !!item.keywords?.toLowerCase().includes(needle))\n return hit || children.length ? [{ ...item, children }] : []\n })\n}\n\nexport function TagsNav({\n groups,\n selected,\n onSelect,\n onCreate,\n filter: controlledFilter,\n onFilterChange,\n matchKeywords = false,\n labels,\n className,\n testId = 'tags-nav',\n}: TagsNavProps) {\n const l = { ...DEFAULT_TAGS_NAV_LABELS, ...labels }\n const [ownFilter, setOwnFilter] = useState('')\n const hasOwnBox = controlledFilter === undefined\n const filter = hasOwnBox ? ownFilter : controlledFilter\n const setFilter = (text: string) => (hasOwnBox ? setOwnFilter(text) : onFilterChange?.(text))\n const [creating, setCreating] = useState(false)\n const text = filter.trim()\n const exact = findTagsNavItem(groups, text)\n const canCreate = !!onCreate && !!text && !exact\n const filterGroup = (items: TagsNavItem[]) => filterItems(items, text, matchKeywords)\n\n const create = async () => {\n if (!canCreate || creating) return\n setCreating(true)\n try {\n await onCreate?.(text)\n setFilter('')\n } finally {\n setCreating(false)\n }\n }\n\n const row = (groupId: string, item: TagsNavItem, depth: number): ReactNode => {\n const active = selected?.groupId === groupId && selected.itemId === item.id\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId, itemId: item.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md py-1.5 pr-2 text-left text-sm transition-colors hover:bg-muted pointer-coarse:min-h-11',\n active && 'bg-primary/10 font-medium text-primary hover:bg-primary/10'\n )}\n style={{ paddingLeft: 12 + depth * 16 }}\n data-testid={`${testId}-item-${item.id}`}\n >\n {item.color && (\n <span\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: item.color }}\n aria-hidden\n />\n )}\n <span className=\"min-w-0 flex-1 truncate\" title={item.name}>\n {item.name}\n </span>\n {item.count !== undefined && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {item.count}\n </span>\n )}\n </button>\n {!!item.children?.length && (\n <ul>{item.children.map((child) => row(groupId, child, depth + 1))}</ul>\n )}\n </li>\n )\n }\n\n return (\n <nav className={cn('flex flex-col gap-3', className)} data-testid={testId}>\n {hasOwnBox && (\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return\n e.preventDefault()\n if (canCreate) void create()\n else if (exact?.item) onSelect({ groupId: exact.groupId, itemId: exact.item.id })\n }}\n placeholder={l.filter}\n aria-label={l.filter}\n className=\"h-8 pl-8 pr-8 text-sm\"\n data-testid={`${testId}-filter`}\n />\n {filter && (\n <button\n type=\"button\"\n onClick={() => setFilter('')}\n aria-label={l.clearFilter}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n )}\n {canCreate && (\n <button\n type=\"button\"\n onClick={() => void create()}\n disabled={creating}\n className=\"flex w-full items-center gap-2 rounded-md px-3 py-1.5 text-left text-sm text-primary transition-colors hover:bg-muted disabled:opacity-60 pointer-coarse:min-h-11\"\n data-testid={`${testId}-create`}\n >\n <Plus className=\"size-4 shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">{l.create.replace('{name}', text)}</span>\n </button>\n )}\n {groups.map((group) => {\n const items = filterGroup(group.items)\n if (text && !items.length) return null\n const active = selected?.groupId === group.id && !selected.itemId\n return (\n <section key={group.id} data-testid={`${testId}-group-${group.id}`}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId: group.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:bg-muted hover:text-foreground pointer-coarse:min-h-11',\n active && 'bg-primary/10 text-primary hover:bg-primary/10 hover:text-primary'\n )}\n data-testid={`${testId}-group-${group.id}-heading`}\n >\n {group.icon && <span className=\"shrink-0 [&_svg]:size-4\">{group.icon}</span>}\n <span className=\"flex-1\">{group.label}</span>\n <span className=\"tabular-nums\" data-testid={`${testId}-group-${group.id}-count`}>\n {total(group.items)}\n </span>\n </button>\n {items.length ? (\n <ul className=\"mt-0.5\">{items.map((item) => row(group.id, item, 0))}</ul>\n ) : (\n <p className=\"px-3 py-1 text-xs text-muted-foreground\">{l.empty}</p>\n )}\n </section>\n )\n })}\n {text && !canCreate && groups.every((g) => !filterGroup(g.items).length) && (\n <p className=\"px-2 text-sm text-muted-foreground\">{l.noMatch}</p>\n )}\n </nav>\n )\n}\n"]}
@@ -3,8 +3,8 @@
3
3
 
4
4
  var chunkQI6AIHWP_cjs = require('../chunk-QI6AIHWP.cjs');
5
5
  var chunkOUW6G4O2_cjs = require('../chunk-OUW6G4O2.cjs');
6
- require('../chunk-MHVNT4J3.cjs');
7
6
  require('../chunk-C54XEN5T.cjs');
7
+ require('../chunk-MHVNT4J3.cjs');
8
8
  require('../chunk-DES3K4SD.cjs');
9
9
 
10
10
 
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  export { ApplyLabelButton, ApplyLabelDialog, DEFAULT_APPLY_LABEL_DIALOG_LABELS, DEFAULT_RELEVANCE_STEPS, DEFAULT_SEARCH_BAR_LABELS, DEFAULT_SEARCH_EMPTY_STATE_LABELS, DEFAULT_SEARCH_GROUP_HEADER_LABELS, DEFAULT_SEARCH_NO_RESULTS_LABELS, DEFAULT_SEARCH_PAGINATION_LABELS, DEFAULT_SEARCH_TOTALS_LABELS, DOCUMENT_SEARCH_NOUNS, Highlight, RelevanceThreshold, SearchBar, SearchControlsBar, SearchEmptyState, SearchErrorBanner, SearchGroupCard, SearchGroupHeader, SearchNoResults, SearchPageBody, SearchPageFrame, SearchPageHeader, SearchPagination, SearchPillToggle, SearchResultList, SearchResultsInner, SearchResultsMain, SearchToolbarRow, SearchTotalsHeadline, getPageNumbers, highlightTerms, searchNouns, splitByTerms, stripMarkdownLinks } from '../chunk-2MJWWPHY.js';
3
3
  export { DEFAULT_SEARCH_HIT_LABELS, SearchHit } from '../chunk-A2YAC22G.js';
4
- import '../chunk-7F6CBP3Z.js';
5
4
  import '../chunk-76JDDMSP.js';
5
+ import '../chunk-7F6CBP3Z.js';
6
6
  import '../chunk-VUNV25KB.js';
7
7
  //# sourceMappingURL=index.js.map
8
8
  //# sourceMappingURL=index.js.map
@@ -1,18 +1,18 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkOR4CO743_cjs = require('../chunk-OR4CO743.cjs');
4
+ var chunk5YXG342J_cjs = require('../chunk-5YXG342J.cjs');
5
5
  var chunk223D4727_cjs = require('../chunk-223D4727.cjs');
6
6
  var chunk46IU3UPF_cjs = require('../chunk-46IU3UPF.cjs');
7
7
  var chunkS5HZBXZA_cjs = require('../chunk-S5HZBXZA.cjs');
8
- var chunkAFSOUS5X_cjs = require('../chunk-AFSOUS5X.cjs');
8
+ var chunkN26CXGXC_cjs = require('../chunk-N26CXGXC.cjs');
9
9
  var chunk7RGLTF76_cjs = require('../chunk-7RGLTF76.cjs');
10
10
  var chunkVFUWWH52_cjs = require('../chunk-VFUWWH52.cjs');
11
11
  require('../chunk-ADOKTJHV.cjs');
12
12
  require('../chunk-PPCATBOY.cjs');
13
+ var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
13
14
  var chunkULWRNGGE_cjs = require('../chunk-ULWRNGGE.cjs');
14
15
  var chunkMHVNT4J3_cjs = require('../chunk-MHVNT4J3.cjs');
15
- var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
16
16
  require('../chunk-DES3K4SD.cjs');
17
17
  var react = require('react');
18
18
  var lucideReact = require('lucide-react');
@@ -3477,135 +3477,135 @@ function ErrorDialogView({
3477
3477
 
3478
3478
  Object.defineProperty(exports, "ActiveSessionsDialog", {
3479
3479
  enumerable: true,
3480
- get: function () { return chunkOR4CO743_cjs.ActiveSessionsDialog; }
3480
+ get: function () { return chunk5YXG342J_cjs.ActiveSessionsDialog; }
3481
3481
  });
3482
3482
  Object.defineProperty(exports, "AvatarPicker", {
3483
3483
  enumerable: true,
3484
- get: function () { return chunkOR4CO743_cjs.AvatarPicker; }
3484
+ get: function () { return chunk5YXG342J_cjs.AvatarPicker; }
3485
3485
  });
3486
3486
  Object.defineProperty(exports, "DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS", {
3487
3487
  enumerable: true,
3488
- get: function () { return chunkOR4CO743_cjs.DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS; }
3488
+ get: function () { return chunk5YXG342J_cjs.DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS; }
3489
3489
  });
3490
3490
  Object.defineProperty(exports, "DEFAULT_AVATAR_PICKER_LABELS", {
3491
3491
  enumerable: true,
3492
- get: function () { return chunkOR4CO743_cjs.DEFAULT_AVATAR_PICKER_LABELS; }
3492
+ get: function () { return chunk5YXG342J_cjs.DEFAULT_AVATAR_PICKER_LABELS; }
3493
3493
  });
3494
3494
  Object.defineProperty(exports, "DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS", {
3495
3495
  enumerable: true,
3496
- get: function () { return chunkOR4CO743_cjs.DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS; }
3496
+ get: function () { return chunk5YXG342J_cjs.DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS; }
3497
3497
  });
3498
3498
  Object.defineProperty(exports, "DEFAULT_IDENTITY_VERIFICATION_LABELS", {
3499
3499
  enumerable: true,
3500
- get: function () { return chunkOR4CO743_cjs.DEFAULT_IDENTITY_VERIFICATION_LABELS; }
3500
+ get: function () { return chunk5YXG342J_cjs.DEFAULT_IDENTITY_VERIFICATION_LABELS; }
3501
3501
  });
3502
3502
  Object.defineProperty(exports, "DEFAULT_LOGOUT_DIALOG_LABELS", {
3503
3503
  enumerable: true,
3504
- get: function () { return chunkOR4CO743_cjs.DEFAULT_LOGOUT_DIALOG_LABELS; }
3504
+ get: function () { return chunk5YXG342J_cjs.DEFAULT_LOGOUT_DIALOG_LABELS; }
3505
3505
  });
3506
3506
  Object.defineProperty(exports, "DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS", {
3507
3507
  enumerable: true,
3508
- get: function () { return chunkOR4CO743_cjs.DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS; }
3508
+ get: function () { return chunk5YXG342J_cjs.DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS; }
3509
3509
  });
3510
3510
  Object.defineProperty(exports, "DEFAULT_PROFILE_CARD_LABELS", {
3511
3511
  enumerable: true,
3512
- get: function () { return chunkOR4CO743_cjs.DEFAULT_PROFILE_CARD_LABELS; }
3512
+ get: function () { return chunk5YXG342J_cjs.DEFAULT_PROFILE_CARD_LABELS; }
3513
3513
  });
3514
3514
  Object.defineProperty(exports, "DEFAULT_SETTINGS_DANGER_ZONE_LABELS", {
3515
3515
  enumerable: true,
3516
- get: function () { return chunkOR4CO743_cjs.DEFAULT_SETTINGS_DANGER_ZONE_LABELS; }
3516
+ get: function () { return chunk5YXG342J_cjs.DEFAULT_SETTINGS_DANGER_ZONE_LABELS; }
3517
3517
  });
3518
3518
  Object.defineProperty(exports, "DeleteAccountDialog", {
3519
3519
  enumerable: true,
3520
- get: function () { return chunkOR4CO743_cjs.DeleteAccountDialog; }
3520
+ get: function () { return chunk5YXG342J_cjs.DeleteAccountDialog; }
3521
3521
  });
3522
3522
  Object.defineProperty(exports, "EMAIL_NOTIFICATION_CATEGORIES", {
3523
3523
  enumerable: true,
3524
- get: function () { return chunkOR4CO743_cjs.EMAIL_NOTIFICATION_CATEGORIES; }
3524
+ get: function () { return chunk5YXG342J_cjs.EMAIL_NOTIFICATION_CATEGORIES; }
3525
3525
  });
3526
3526
  Object.defineProperty(exports, "EMAIL_NOTIFICATION_KEYS", {
3527
3527
  enumerable: true,
3528
- get: function () { return chunkOR4CO743_cjs.EMAIL_NOTIFICATION_KEYS; }
3528
+ get: function () { return chunk5YXG342J_cjs.EMAIL_NOTIFICATION_KEYS; }
3529
3529
  });
3530
3530
  Object.defineProperty(exports, "IdentityVerificationCard", {
3531
3531
  enumerable: true,
3532
- get: function () { return chunkOR4CO743_cjs.IdentityVerificationCard; }
3532
+ get: function () { return chunk5YXG342J_cjs.IdentityVerificationCard; }
3533
3533
  });
3534
3534
  Object.defineProperty(exports, "IdentityVerificationDialog", {
3535
3535
  enumerable: true,
3536
- get: function () { return chunkOR4CO743_cjs.IdentityVerificationDialog; }
3536
+ get: function () { return chunk5YXG342J_cjs.IdentityVerificationDialog; }
3537
3537
  });
3538
3538
  Object.defineProperty(exports, "LogoutDialog", {
3539
3539
  enumerable: true,
3540
- get: function () { return chunkOR4CO743_cjs.LogoutDialog; }
3540
+ get: function () { return chunk5YXG342J_cjs.LogoutDialog; }
3541
3541
  });
3542
3542
  Object.defineProperty(exports, "NotificationCategoryList", {
3543
3543
  enumerable: true,
3544
- get: function () { return chunkOR4CO743_cjs.NotificationCategoryList; }
3544
+ get: function () { return chunk5YXG342J_cjs.NotificationCategoryList; }
3545
3545
  });
3546
3546
  Object.defineProperty(exports, "PasswordChangeDialog", {
3547
3547
  enumerable: true,
3548
- get: function () { return chunkOR4CO743_cjs.PasswordChangeDialog; }
3548
+ get: function () { return chunk5YXG342J_cjs.PasswordChangeDialog; }
3549
3549
  });
3550
3550
  Object.defineProperty(exports, "ProfileCard", {
3551
3551
  enumerable: true,
3552
- get: function () { return chunkOR4CO743_cjs.ProfileCard; }
3552
+ get: function () { return chunk5YXG342J_cjs.ProfileCard; }
3553
3553
  });
3554
3554
  Object.defineProperty(exports, "RequireVerified", {
3555
3555
  enumerable: true,
3556
- get: function () { return chunkOR4CO743_cjs.RequireVerified; }
3556
+ get: function () { return chunk5YXG342J_cjs.RequireVerified; }
3557
3557
  });
3558
3558
  Object.defineProperty(exports, "SettingsActionRow", {
3559
3559
  enumerable: true,
3560
- get: function () { return chunkOR4CO743_cjs.SettingsActionRow; }
3560
+ get: function () { return chunk5YXG342J_cjs.SettingsActionRow; }
3561
3561
  });
3562
3562
  Object.defineProperty(exports, "SettingsCard", {
3563
3563
  enumerable: true,
3564
- get: function () { return chunkOR4CO743_cjs.SettingsCard; }
3564
+ get: function () { return chunk5YXG342J_cjs.SettingsCard; }
3565
3565
  });
3566
3566
  Object.defineProperty(exports, "SettingsDangerZone", {
3567
3567
  enumerable: true,
3568
- get: function () { return chunkOR4CO743_cjs.SettingsDangerZone; }
3568
+ get: function () { return chunk5YXG342J_cjs.SettingsDangerZone; }
3569
3569
  });
3570
3570
  Object.defineProperty(exports, "SettingsPanel", {
3571
3571
  enumerable: true,
3572
- get: function () { return chunkOR4CO743_cjs.SettingsPanel; }
3572
+ get: function () { return chunk5YXG342J_cjs.SettingsPanel; }
3573
3573
  });
3574
3574
  Object.defineProperty(exports, "SettingsRow", {
3575
3575
  enumerable: true,
3576
- get: function () { return chunkOR4CO743_cjs.SettingsRow; }
3576
+ get: function () { return chunk5YXG342J_cjs.SettingsRow; }
3577
3577
  });
3578
3578
  Object.defineProperty(exports, "SettingsSection", {
3579
3579
  enumerable: true,
3580
- get: function () { return chunkOR4CO743_cjs.SettingsSection; }
3580
+ get: function () { return chunk5YXG342J_cjs.SettingsSection; }
3581
3581
  });
3582
3582
  Object.defineProperty(exports, "SettingsSwitchGroup", {
3583
3583
  enumerable: true,
3584
- get: function () { return chunkOR4CO743_cjs.SettingsSwitchGroup; }
3584
+ get: function () { return chunk5YXG342J_cjs.SettingsSwitchGroup; }
3585
3585
  });
3586
3586
  Object.defineProperty(exports, "SettingsSwitchRow", {
3587
3587
  enumerable: true,
3588
- get: function () { return chunkOR4CO743_cjs.SettingsSwitchRow; }
3588
+ get: function () { return chunk5YXG342J_cjs.SettingsSwitchRow; }
3589
3589
  });
3590
3590
  Object.defineProperty(exports, "formatSessionTtl", {
3591
3591
  enumerable: true,
3592
- get: function () { return chunkOR4CO743_cjs.formatSessionTtl; }
3592
+ get: function () { return chunk5YXG342J_cjs.formatSessionTtl; }
3593
3593
  });
3594
3594
  Object.defineProperty(exports, "toActiveSessionViews", {
3595
3595
  enumerable: true,
3596
- get: function () { return chunkOR4CO743_cjs.toActiveSessionViews; }
3596
+ get: function () { return chunk5YXG342J_cjs.toActiveSessionViews; }
3597
3597
  });
3598
3598
  Object.defineProperty(exports, "toDeleteBlockerViews", {
3599
3599
  enumerable: true,
3600
- get: function () { return chunkOR4CO743_cjs.toDeleteBlockerViews; }
3600
+ get: function () { return chunk5YXG342J_cjs.toDeleteBlockerViews; }
3601
3601
  });
3602
3602
  Object.defineProperty(exports, "toLogoutSessionViews", {
3603
3603
  enumerable: true,
3604
- get: function () { return chunkOR4CO743_cjs.toLogoutSessionViews; }
3604
+ get: function () { return chunk5YXG342J_cjs.toLogoutSessionViews; }
3605
3605
  });
3606
3606
  Object.defineProperty(exports, "toNotificationCategories", {
3607
3607
  enumerable: true,
3608
- get: function () { return chunkOR4CO743_cjs.toNotificationCategories; }
3608
+ get: function () { return chunk5YXG342J_cjs.toNotificationCategories; }
3609
3609
  });
3610
3610
  Object.defineProperty(exports, "ModalBreadcrumbHeader", {
3611
3611
  enumerable: true,
@@ -3629,11 +3629,11 @@ Object.defineProperty(exports, "MultiSelect", {
3629
3629
  });
3630
3630
  Object.defineProperty(exports, "DEFAULT_TRI_STATE_FILTER_MENU_LABELS", {
3631
3631
  enumerable: true,
3632
- get: function () { return chunkAFSOUS5X_cjs.DEFAULT_TRI_STATE_FILTER_MENU_LABELS; }
3632
+ get: function () { return chunkN26CXGXC_cjs.DEFAULT_TRI_STATE_FILTER_MENU_LABELS; }
3633
3633
  });
3634
3634
  Object.defineProperty(exports, "TriStateFilterMenu", {
3635
3635
  enumerable: true,
3636
- get: function () { return chunkAFSOUS5X_cjs.TriStateFilterMenu; }
3636
+ get: function () { return chunkN26CXGXC_cjs.TriStateFilterMenu; }
3637
3637
  });
3638
3638
  Object.defineProperty(exports, "MODAL_SECTION_TITLE_CLASS", {
3639
3639
  enumerable: true,
@@ -1,17 +1,17 @@
1
1
  "use client";
2
- export { ActiveSessionsDialog, AvatarPicker, DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS, DEFAULT_AVATAR_PICKER_LABELS, DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS, DEFAULT_IDENTITY_VERIFICATION_LABELS, DEFAULT_LOGOUT_DIALOG_LABELS, DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS, DEFAULT_PROFILE_CARD_LABELS, DEFAULT_SETTINGS_DANGER_ZONE_LABELS, DeleteAccountDialog, EMAIL_NOTIFICATION_CATEGORIES, EMAIL_NOTIFICATION_KEYS, IdentityVerificationCard, IdentityVerificationDialog, LogoutDialog, NotificationCategoryList, PasswordChangeDialog, ProfileCard, RequireVerified, SettingsActionRow, SettingsCard, SettingsDangerZone, SettingsPanel, SettingsRow, SettingsSection, SettingsSwitchGroup, SettingsSwitchRow, formatSessionTtl, toActiveSessionViews, toDeleteBlockerViews, toLogoutSessionViews, toNotificationCategories } from '../chunk-GFYGYME3.js';
2
+ export { ActiveSessionsDialog, AvatarPicker, DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS, DEFAULT_AVATAR_PICKER_LABELS, DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS, DEFAULT_IDENTITY_VERIFICATION_LABELS, DEFAULT_LOGOUT_DIALOG_LABELS, DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS, DEFAULT_PROFILE_CARD_LABELS, DEFAULT_SETTINGS_DANGER_ZONE_LABELS, DeleteAccountDialog, EMAIL_NOTIFICATION_CATEGORIES, EMAIL_NOTIFICATION_KEYS, IdentityVerificationCard, IdentityVerificationDialog, LogoutDialog, NotificationCategoryList, PasswordChangeDialog, ProfileCard, RequireVerified, SettingsActionRow, SettingsCard, SettingsDangerZone, SettingsPanel, SettingsRow, SettingsSection, SettingsSwitchGroup, SettingsSwitchRow, formatSessionTtl, toActiveSessionViews, toDeleteBlockerViews, toLogoutSessionViews, toNotificationCategories } from '../chunk-W7NZRZ54.js';
3
3
  export { ModalBreadcrumbHeader, ModalCrumbs } from '../chunk-RC6VTY2H.js';
4
4
  import { UsageMeter } from '../chunk-D5T53XCL.js';
5
5
  export { DEFAULT_DOCUMENT_PICKER_LABELS, DocumentPicker, MultiSelect } from '../chunk-4XJZ6AAY.js';
6
- export { DEFAULT_TRI_STATE_FILTER_MENU_LABELS, TriStateFilterMenu } from '../chunk-R26OHONI.js';
6
+ export { DEFAULT_TRI_STATE_FILTER_MENU_LABELS, TriStateFilterMenu } from '../chunk-6S5FLMWG.js';
7
7
  import { TabHeader } from '../chunk-4WWM3GQ5.js';
8
8
  import { TONE_BORDER, TONE_SURFACE, ToneBadge } from '../chunk-DPLRHEJZ.js';
9
9
  import '../chunk-VILAPTCB.js';
10
10
  import '../chunk-NPLYHR2E.js';
11
+ import { formatCount } from '../chunk-OXF2IFXG.js';
11
12
  import { ModalScaffold, ModalSection, ModalSectionTitle, ModalHeader } from '../chunk-TX2ZICS7.js';
12
13
  export { MODAL_SECTION_TITLE_CLASS, ModalHeader, ModalScaffold, ModalSection, ModalSectionTitle } from '../chunk-TX2ZICS7.js';
13
14
  import { testIdOr, prefixedTestId } from '../chunk-7F6CBP3Z.js';
14
- import { formatCount } from '../chunk-OXF2IFXG.js';
15
15
  import '../chunk-VUNV25KB.js';
16
16
  import { useMemo, useRef, useState, useId, Fragment as Fragment$1 } from 'react';
17
17
  import { AlertTriangle, History, Undo2, Star, Trash2, Users, Sparkles, Brain, RefreshCw, Wifi, WifiOff, Crown, ChevronDown, ChevronRight, Pencil, Plus, Loader2, Check, Tag, Info, Gift, PlugIcon, CheckCircle2, ExternalLink, ShieldCheck, Plug, AlertCircle, MessageCircleQuestionMark, BookOpen, UserPlus, BadgeCent, ChartNoAxesColumn, FileText, X, Mail, Send, Clock, Infinity, ArrowRight, Copy, LogOut } from 'lucide-react';
@@ -31,6 +31,8 @@ export interface FilterInputProps<Field extends string = FilterField> {
31
31
  hideFieldPicker?: boolean;
32
32
  ariaLabel?: string;
33
33
  onChange: (q: string) => void;
34
+ /** Enter in the box (e.g. open the one match, or add what was typed). */
35
+ onSubmit?: (q: string) => void;
34
36
  fields: Field[];
35
37
  onFieldsChange: (fields: Field[]) => void;
36
38
  /**
@@ -45,4 +47,4 @@ export interface FilterInputProps<Field extends string = FilterField> {
45
47
  labels?: Partial<FilterInputLabels<Field>>;
46
48
  testIds?: Partial<FilterInputTestIds<Field>>;
47
49
  }
48
- export declare function FilterInput<Field extends string = FilterField>({ fieldOptions, value, hideFieldPicker, ariaLabel, onChange, fields, onFieldsChange, filter, className, borderless, labels, testIds, }: FilterInputProps<Field>): import("react").JSX.Element;
50
+ export declare function FilterInput<Field extends string = FilterField>({ fieldOptions, value, hideFieldPicker, ariaLabel, onChange, onSubmit, fields, onFieldsChange, filter, className, borderless, labels, testIds, }: FilterInputProps<Field>): import("react").JSX.Element;