@arbidocs/blocks 0.5.65 → 0.5.66

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 (118) hide show
  1. package/dist/{ConnectedCallDock-GJAGY75U.cjs → ConnectedCallDock-FFIDDYGH.cjs} +6 -6
  2. package/dist/{ConnectedCallDock-GJAGY75U.cjs.map → ConnectedCallDock-FFIDDYGH.cjs.map} +1 -1
  3. package/dist/{ConnectedCallDock-DEAEFUUD.js → ConnectedCallDock-VMEBH4LG.js} +6 -6
  4. package/dist/{ConnectedCallDock-DEAEFUUD.js.map → ConnectedCallDock-VMEBH4LG.js.map} +1 -1
  5. package/dist/{ConnectedCallRoom-DI7UYRHE.js → ConnectedCallRoom-2FNSX2VG.js} +6 -6
  6. package/dist/{ConnectedCallRoom-DI7UYRHE.js.map → ConnectedCallRoom-2FNSX2VG.js.map} +1 -1
  7. package/dist/{ConnectedCallRoom-KLE2PCMQ.cjs → ConnectedCallRoom-HYRLJUIV.cjs} +6 -6
  8. package/dist/{ConnectedCallRoom-KLE2PCMQ.cjs.map → ConnectedCallRoom-HYRLJUIV.cjs.map} +1 -1
  9. package/dist/{ConnectedDocumentViewer-YSZWOVGN.cjs → ConnectedDocumentViewer-S6YKCCRN.cjs} +9 -9
  10. package/dist/{ConnectedDocumentViewer-YSZWOVGN.cjs.map → ConnectedDocumentViewer-S6YKCCRN.cjs.map} +1 -1
  11. package/dist/{ConnectedDocumentViewer-HKIBNGGG.js → ConnectedDocumentViewer-XFQDHVWM.js} +9 -9
  12. package/dist/{ConnectedDocumentViewer-HKIBNGGG.js.map → ConnectedDocumentViewer-XFQDHVWM.js.map} +1 -1
  13. package/dist/agents/index.cjs +260 -260
  14. package/dist/agents/index.js +3 -3
  15. package/dist/calls/index.cjs +2 -2
  16. package/dist/calls/index.js +2 -2
  17. package/dist/chat/index.cjs +57 -57
  18. package/dist/chat/index.js +4 -4
  19. package/dist/{chunk-F777MGVA.cjs → chunk-3SHZPTR2.cjs} +18 -18
  20. package/dist/{chunk-F777MGVA.cjs.map → chunk-3SHZPTR2.cjs.map} +1 -1
  21. package/dist/{chunk-TVHTXO6V.cjs → chunk-56WWEK6I.cjs} +4 -4
  22. package/dist/{chunk-TVHTXO6V.cjs.map → chunk-56WWEK6I.cjs.map} +1 -1
  23. package/dist/{chunk-CGCTODPC.cjs → chunk-6PGTH2HD.cjs} +4 -4
  24. package/dist/{chunk-CGCTODPC.cjs.map → chunk-6PGTH2HD.cjs.map} +1 -1
  25. package/dist/{chunk-6QZ35CTZ.js → chunk-AD76WTGR.js} +3 -3
  26. package/dist/{chunk-6QZ35CTZ.js.map → chunk-AD76WTGR.js.map} +1 -1
  27. package/dist/{chunk-ROWJU4SK.cjs → chunk-AKGV6JUC.cjs} +12 -128
  28. package/dist/chunk-AKGV6JUC.cjs.map +1 -0
  29. package/dist/{chunk-UIUWCTIZ.js → chunk-APXW5XGA.js} +165 -4
  30. package/dist/chunk-APXW5XGA.js.map +1 -0
  31. package/dist/{chunk-SEVFIBF3.cjs → chunk-BFIHXDO6.cjs} +4 -4
  32. package/dist/{chunk-SEVFIBF3.cjs.map → chunk-BFIHXDO6.cjs.map} +1 -1
  33. package/dist/{chunk-JSHBC47B.cjs → chunk-BP5KBZLX.cjs} +38 -38
  34. package/dist/{chunk-JSHBC47B.cjs.map → chunk-BP5KBZLX.cjs.map} +1 -1
  35. package/dist/{chunk-YQEXBJVO.js → chunk-DF5X27QX.js} +42 -5
  36. package/dist/chunk-DF5X27QX.js.map +1 -0
  37. package/dist/{chunk-CJF7B5A7.cjs → chunk-DRUNPUDT.cjs} +3 -3
  38. package/dist/{chunk-CJF7B5A7.cjs.map → chunk-DRUNPUDT.cjs.map} +1 -1
  39. package/dist/{chunk-6OMIIF76.js → chunk-EM4KOKE6.js} +3 -3
  40. package/dist/{chunk-6OMIIF76.js.map → chunk-EM4KOKE6.js.map} +1 -1
  41. package/dist/{chunk-GPYLXEZO.js → chunk-FCOK73I3.js} +6 -120
  42. package/dist/chunk-FCOK73I3.js.map +1 -0
  43. package/dist/{chunk-ITRI47DF.cjs → chunk-GMGEAWFX.cjs} +41 -4
  44. package/dist/chunk-GMGEAWFX.cjs.map +1 -0
  45. package/dist/{chunk-LNH6NYG4.js → chunk-I3VBVP6R.js} +121 -6
  46. package/dist/chunk-I3VBVP6R.js.map +1 -0
  47. package/dist/{chunk-ZZHMJXM5.cjs → chunk-IXZCXK6Q.cjs} +122 -5
  48. package/dist/chunk-IXZCXK6Q.cjs.map +1 -0
  49. package/dist/{chunk-C2S246BV.js → chunk-J6FRFIVL.js} +3 -3
  50. package/dist/{chunk-C2S246BV.js.map → chunk-J6FRFIVL.js.map} +1 -1
  51. package/dist/{chunk-PLEMVK2W.js → chunk-KQLUMK56.js} +3 -3
  52. package/dist/{chunk-PLEMVK2W.js.map → chunk-KQLUMK56.js.map} +1 -1
  53. package/dist/{chunk-PNZVUH46.cjs → chunk-LAQ3Y5JP.cjs} +6 -6
  54. package/dist/{chunk-PNZVUH46.cjs.map → chunk-LAQ3Y5JP.cjs.map} +1 -1
  55. package/dist/{chunk-AESJLGMC.cjs → chunk-NDKZ6OR3.cjs} +6 -6
  56. package/dist/{chunk-AESJLGMC.cjs.map → chunk-NDKZ6OR3.cjs.map} +1 -1
  57. package/dist/{chunk-43IVRSFX.js → chunk-NVXNTHL4.js} +3 -3
  58. package/dist/{chunk-43IVRSFX.js.map → chunk-NVXNTHL4.js.map} +1 -1
  59. package/dist/{chunk-5EGTGHBW.js → chunk-PMWZTVIY.js} +3 -3
  60. package/dist/{chunk-5EGTGHBW.js.map → chunk-PMWZTVIY.js.map} +1 -1
  61. package/dist/{chunk-7MOQO6NO.cjs → chunk-RB54N5I7.cjs} +53 -5
  62. package/dist/chunk-RB54N5I7.cjs.map +1 -0
  63. package/dist/{chunk-2C4YUIVX.js → chunk-T2VGD4X6.js} +3 -3
  64. package/dist/{chunk-2C4YUIVX.js.map → chunk-T2VGD4X6.js.map} +1 -1
  65. package/dist/{chunk-4Q7ON335.js → chunk-TCCJ5I6G.js} +3 -3
  66. package/dist/{chunk-4Q7ON335.js.map → chunk-TCCJ5I6G.js.map} +1 -1
  67. package/dist/{chunk-4CI42DCG.js → chunk-U52KPOXT.js} +50 -5
  68. package/dist/chunk-U52KPOXT.js.map +1 -0
  69. package/dist/{chunk-SFTQO3TU.js → chunk-UO3FS6ZF.js} +3 -3
  70. package/dist/{chunk-SFTQO3TU.js.map → chunk-UO3FS6ZF.js.map} +1 -1
  71. package/dist/{chunk-LFS6UWSJ.cjs → chunk-XWUGPV7H.cjs} +5 -5
  72. package/dist/{chunk-LFS6UWSJ.cjs.map → chunk-XWUGPV7H.cjs.map} +1 -1
  73. package/dist/{chunk-OM5IVNEW.cjs → chunk-Z4KXF7WS.cjs} +165 -2
  74. package/dist/chunk-Z4KXF7WS.cjs.map +1 -0
  75. package/dist/connect/index.cjs +564 -283
  76. package/dist/connect/index.cjs.map +1 -1
  77. package/dist/connect/index.d.ts +3 -0
  78. package/dist/connect/index.js +292 -19
  79. package/dist/connect/index.js.map +1 -1
  80. package/dist/connect/viewer.cjs +7 -7
  81. package/dist/connect/viewer.js +7 -7
  82. package/dist/connection/runtime/ConnectedAppRuntime.d.ts +1 -1
  83. package/dist/connection/runtime/index.d.ts +1 -1
  84. package/dist/connection/runtime/requests.d.ts +8 -0
  85. package/dist/connection/runtime/useWelcomeDialog.d.ts +3 -0
  86. package/dist/connection/tips/ConnectedGettingStarted.d.ts +20 -0
  87. package/dist/connection/tips/ConnectedTipBar.d.ts +49 -0
  88. package/dist/connection/tips/useGettingStarted.d.ts +51 -0
  89. package/dist/embed/index.cjs +1 -1
  90. package/dist/embed/index.js +1 -1
  91. package/dist/home/index.cjs +23 -178
  92. package/dist/home/index.cjs.map +1 -1
  93. package/dist/home/index.js +3 -164
  94. package/dist/home/index.js.map +1 -1
  95. package/dist/index.cjs +457 -485
  96. package/dist/index.cjs.map +1 -1
  97. package/dist/index.js +15 -54
  98. package/dist/index.js.map +1 -1
  99. package/dist/shell/index.cjs +73 -73
  100. package/dist/shell/index.js +4 -4
  101. package/dist/studio/index.cjs +8 -8
  102. package/dist/studio/index.js +5 -5
  103. package/dist/tips/index.d.ts +1 -1
  104. package/dist/tips/visibility.d.ts +7 -0
  105. package/dist/workflow-canvas/index.cjs +17 -17
  106. package/dist/workflow-canvas/index.js +4 -4
  107. package/node_modules/@arbidocs/coedit/package.json +1 -1
  108. package/package.json +5 -5
  109. package/dist/chunk-4CI42DCG.js.map +0 -1
  110. package/dist/chunk-7MOQO6NO.cjs.map +0 -1
  111. package/dist/chunk-GPYLXEZO.js.map +0 -1
  112. package/dist/chunk-ITRI47DF.cjs.map +0 -1
  113. package/dist/chunk-LNH6NYG4.js.map +0 -1
  114. package/dist/chunk-OM5IVNEW.cjs.map +0 -1
  115. package/dist/chunk-ROWJU4SK.cjs.map +0 -1
  116. package/dist/chunk-UIUWCTIZ.js.map +0 -1
  117. package/dist/chunk-YQEXBJVO.js.map +0 -1
  118. package/dist/chunk-ZZHMJXM5.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/chat/ConversationLayout.tsx","../src/chat/ModelPicker.tsx","../src/chat/ConversationParts.tsx","../src/chat/PendingAnswerBar.tsx","../src/chat/ConversationSearchView.tsx"],"names":["jsx","cn","ModelPickerTrigger","jsxs","Button","Settings","Bot"],"mappings":"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","file":"chunk-43IVRSFX.js","sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\n/** Every fixed string of the conversation layout. Pass a partial `labels` to reword. */\nexport interface ConversationLayoutLabels {\n loadingMessages: string\n}\n\nexport const DEFAULT_CONVERSATION_LAYOUT_LABELS: ConversationLayoutLabels = {\n loadingMessages: 'Loading messages...',\n}\n\n/**\n * Page frame of a conversation. The chat scroll surface belongs to the HOST (the outer\n * `[data-scroll-container]`), so this column must GROW with its content, not stay\n * viewport-capped: the sticky header and the sticky composer dock need a containing block that\n * spans the whole thread, otherwise `position: sticky` is clamped to one screen and both unpin.\n *\n * Do NOT put `overflow: clip/hidden`, `transform`, `filter`, `will-change` or `contain` on\n * {@link ConversationBody}: `overflow: clip` collapses the scrollHeight so the thread cannot\n * scroll, and a transform creates a containing block that breaks the dock's `bottom: 0`.\n */\nexport function ConversationRoot({\n className,\n children,\n testId = 'conversation',\n ...rest\n}: HTMLAttributes<HTMLDivElement> & { testId?: string }) {\n return (\n <div\n data-slot=\"conversation\"\n className={cn('flex min-h-full shrink-0 flex-col', className)}\n data-testid={testId}\n {...rest}\n >\n {children}\n </div>\n )\n}\n\n/** Sticky strip at the top (tabs and their actions). */\nexport function ConversationHeader({\n className,\n children,\n ...rest\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"conversation-header\"\n className={cn('sticky top-0 z-10 bg-background', className)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n\n/** Grows (never shrinks) to the thread's full height so the sticky dock spans the scroll range. */\nexport function ConversationBody({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"conversation-body\"\n className={cn('flex flex-[1_0_auto] flex-col', className)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n\n/** The thread (or its empty / loading state). `relative` so absolutely-filled states fit. */\nexport function ConversationMain({ className, children, ...rest }: HTMLAttributes<HTMLElement>) {\n return (\n <main\n data-slot=\"conversation-main\"\n className={cn('relative flex flex-[1_0_auto] flex-col', className)}\n {...rest}\n >\n {children}\n </main>\n )\n}\n\n/** Centered status while the thread loads. */\nexport function ConversationLoading({\n children,\n labels,\n className,\n testId = 'loading-messages',\n}: {\n /** Text; wins over `labels.loadingMessages`. */\n children?: ReactNode\n labels?: Partial<ConversationLayoutLabels>\n className?: string\n testId?: string\n}) {\n const l = { ...DEFAULT_CONVERSATION_LAYOUT_LABELS, ...labels }\n return (\n <div className={cn('flex h-64 items-center justify-center', className)} data-testid={testId}>\n <p className=\"text-muted-foreground\">{children ?? l.loadingMessages}</p>\n </div>\n )\n}\n\nexport const Conversation = {\n Root: ConversationRoot,\n Header: ConversationHeader,\n Body: ConversationBody,\n Main: ConversationMain,\n Loading: ConversationLoading,\n}\n","import { forwardRef } from 'react'\nimport type { ComponentType, ReactNode } from 'react'\nimport { Check, ChevronsUpDown, Crown, Glasses, Settings, Sparkles, Zap } from 'lucide-react'\nimport {\n Button,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { BlocksTooltipProvider } from '../provider/TooltipScope'\n\n// ── Icons ───────────────────────────────────────────────────────────────────────────────────\n\nexport type ModelTierKind = 'standard' | 'wise' | 'premium'\n\nconst TIER_ICON: Record<ModelTierKind, ComponentType<{ className?: string }>> = {\n standard: Zap,\n wise: Glasses,\n premium: Crown,\n}\n\nconst TIER_TONE: Record<ModelTierKind, string> = {\n standard: 'text-secondary fill-secondary',\n wise: 'text-secondary fill-secondary',\n premium: 'text-yellow-text fill-yellow-text',\n}\n\nexport interface ModelTierIconProps {\n tier: ModelTierKind\n /** Agentic mode off: the tier glyph is greyed. */\n isGreyed?: boolean\n className?: string\n}\n\n/** The glyph of a model tier (Fast/Standard bolt, Wise glasses, Premium crown). */\nexport function ModelTierIcon({ tier, isGreyed, className }: ModelTierIconProps) {\n const Icon = TIER_ICON[tier]\n return (\n <Icon\n className={cn(\n 'size-3.5 shrink-0',\n isGreyed ? 'fill-muted-foreground text-muted-foreground' : TIER_TONE[tier],\n className\n )}\n />\n )\n}\n\n/** The Autoselect sparkle. */\nexport function ModelAutoIcon({ className }: { className?: string }) {\n return <Sparkles className={cn('size-3.5 shrink-0 fill-secondary text-secondary', className)} />\n}\n\n/** Neutral status dot for models with no tier glyph. */\nexport function ModelDot({ isGreyed }: { isGreyed?: boolean }) {\n return (\n <div\n className={cn(\n 'size-2 shrink-0 rounded-full',\n isGreyed ? 'bg-muted-foreground' : 'bg-primary'\n )}\n />\n )\n}\n\n/** Label + icon content shared by menu rows and select items. */\nexport function ModelOptionLabel({ icon, label }: { icon: ReactNode; label: ReactNode }) {\n return (\n <div className=\"flex w-full items-center gap-2\">\n {icon}\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </div>\n )\n}\n\n// ── Trigger ─────────────────────────────────────────────────────────────────────────────────\n\nexport interface ModelTriggerContentProps {\n icon?: ReactNode\n label: ReactNode\n}\n\n/** Icon + truncated label (used inside the compact trigger and the select trigger). */\nexport function ModelTriggerContent({ icon, label }: ModelTriggerContentProps) {\n return (\n <div className=\"flex min-w-0 items-center gap-1.5\">\n {icon}\n <span className=\"truncate\">{label}</span>\n </div>\n )\n}\n\nexport interface ModelPickerTriggerProps extends ModelTriggerContentProps {\n /** Spoken before the current model, so the button reads \"Model: Autoselect\". Default \"Model\". */\n nameLabel?: string\n className?: string\n testId?: string\n}\n\n/** The compact picker button (ghost, with a chevron). Forwards its ref for popover/tooltip triggers. */\nexport const ModelPickerTrigger = forwardRef<HTMLButtonElement, ModelPickerTriggerProps>(\n function ModelPickerTrigger(\n { icon, label, nameLabel = 'Model', className, testId = 'model-selector-compact', ...rest },\n ref\n ) {\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 min-w-0 shrink gap-1 px-2 text-sm text-muted-foreground hover:bg-muted hover:text-foreground pointer-coarse:h-11',\n className\n )}\n aria-label={typeof label === 'string' ? `${nameLabel}: ${label}` : undefined}\n data-slot=\"model-picker-trigger\"\n data-testid={testId}\n {...rest}\n >\n <ModelTriggerContent icon={icon} label={label} />\n <ChevronsUpDown className=\"size-3 shrink-0 text-muted-foreground\" />\n </Button>\n )\n }\n)\n\n// ── Popover + menu ──────────────────────────────────────────────────────────────────────────\n\nexport interface ModelPickerPopoverProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** The trigger (a ModelPickerTrigger). */\n trigger: ReactNode\n /** Hover tooltip on the trigger (hidden while open). */\n tooltip?: ReactNode\n title?: string\n /** The menu rows. */\n children: ReactNode\n}\n\n/** Popover shell: trigger + tooltip + titled, scrolling list. */\nexport function ModelPickerPopover({\n open,\n onOpenChange,\n trigger,\n tooltip,\n title = 'Select AI Model',\n children,\n}: ModelPickerPopoverProps) {\n return (\n <BlocksTooltipProvider>\n <Popover open={open} onOpenChange={onOpenChange}>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger asChild>{trigger}</PopoverTrigger>\n </TooltipTrigger>\n {tooltip && !open && <TooltipContent side=\"top\">{tooltip}</TooltipContent>}\n </Tooltip>\n <PopoverContent side=\"top\" align=\"start\" className=\"w-[280px] p-1\" sideOffset={8}>\n <div className=\"px-2 py-1.5 text-sm font-medium text-muted-foreground\">{title}</div>\n <div className=\"flex max-h-[280px] flex-col gap-0.5 overflow-y-auto\">{children}</div>\n </PopoverContent>\n </Popover>\n </BlocksTooltipProvider>\n )\n}\n\nexport function ModelMenuDivider() {\n return <div className=\"my-0.5 border-t border-border\" role=\"separator\" />\n}\n\nexport function ModelMenuMessage({ children }: { children: ReactNode }) {\n return <div className=\"px-2 py-1.5 text-sm text-muted-foreground\">{children}</div>\n}\n\nexport interface ModelOptionProps {\n icon: ReactNode\n label: ReactNode\n isSelected: boolean\n onSelect: () => void\n testId: string\n /** Tier rows mark selection with a primary left edge and bold label. */\n emphasis?: 'plain' | 'tier'\n}\n\n/** One selectable model row. */\nexport function ModelOption({\n icon,\n label,\n isSelected,\n onSelect,\n testId,\n emphasis = 'plain',\n}: ModelOptionProps) {\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n 'flex w-full min-w-0 items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm transition-colors hover:bg-accent pointer-coarse:min-h-11',\n emphasis === 'tier' && 'border-l-4',\n emphasis === 'tier' && (isSelected ? 'border-l-primary' : 'border-l-transparent'),\n isSelected && 'bg-accent'\n )}\n aria-pressed={isSelected}\n data-slot=\"model-option\"\n data-testid={testId}\n >\n {icon}\n <span\n className={cn(\n 'min-w-0 flex-1 truncate',\n emphasis === 'tier' &&\n (isSelected ? 'font-semibold text-foreground' : 'font-medium text-muted-foreground')\n )}\n >\n {label}\n </span>\n {isSelected && <Check className=\"size-3 shrink-0 text-primary\" />}\n </button>\n )\n}\n\nexport interface ModelTierOptionProps {\n icon: ReactNode\n label: ReactNode\n isSelected: boolean\n /** The tier is switched off in settings: shown dimmed and not selectable. */\n isDisabled?: boolean\n onSelect: () => void\n /** Trailing control (the configure cog). */\n action?: ReactNode\n testId: string\n}\n\n/** A tier row with a trailing action (Premium + configure cog). */\nexport function ModelTierOption({\n icon,\n label,\n isSelected,\n isDisabled,\n onSelect,\n action,\n testId,\n}: ModelTierOptionProps) {\n return (\n <div\n className={cn(\n 'flex items-center gap-1 rounded-sm border-l-4 pr-1 transition-colors',\n isSelected ? 'border-l-primary bg-accent' : 'border-l-transparent'\n )}\n data-slot=\"model-tier-option\"\n >\n <button\n type=\"button\"\n onClick={() => {\n if (!isDisabled) onSelect()\n }}\n disabled={isDisabled}\n className={cn(\n 'flex min-w-0 flex-1 items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm pointer-coarse:min-h-11',\n isDisabled ? 'cursor-not-allowed opacity-50' : 'hover:bg-accent'\n )}\n data-testid={testId}\n >\n {icon}\n <span\n className={cn(\n 'min-w-0 flex-1 truncate',\n isSelected ? 'font-semibold text-foreground' : 'font-medium text-muted-foreground'\n )}\n >\n {label}\n </span>\n </button>\n {action}\n </div>\n )\n}\n\nexport interface ModelConfigureButtonProps {\n onClick: () => void\n /** Accessible name. */\n label: string\n /** Tooltip text. */\n tooltip: string\n testId?: string\n}\n\n/** Small bordered cog beside a tier row. */\nexport function ModelConfigureButton({\n onClick,\n label,\n tooltip,\n testId,\n}: ModelConfigureButtonProps) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onClick()\n }}\n className=\"flex size-7 shrink-0 items-center justify-center rounded-md border border-border bg-background text-foreground hover:bg-accent pointer-coarse:size-11\"\n data-testid={testId}\n aria-label={label}\n >\n <Settings className=\"size-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{tooltip}</TooltipContent>\n </Tooltip>\n )\n}\n\n/** Every fixed string of the pricing tip. Pass a partial `labels` to translate or reword. */\nexport interface ModelPricingTipLabels {\n input: (price: string) => string\n output: (price: string) => string\n}\n\nexport const DEFAULT_MODEL_PRICING_TIP_LABELS: ModelPricingTipLabels = {\n input: (price) => `Input: ${price} / M tokens`,\n output: (price) => `Output: ${price} / M tokens`,\n}\n\nexport interface ModelPricingTipProps {\n modelName: string\n /** £ per million tokens, formatted (\"£2.50\"). */\n inputPrice?: string | null\n outputPrice?: string | null\n labels?: Partial<ModelPricingTipLabels>\n}\n\n/** Tooltip body: model name and per-million-token £ prices. */\nexport function ModelPricingTip({\n modelName,\n inputPrice,\n outputPrice,\n labels,\n}: ModelPricingTipProps) {\n const l = { ...DEFAULT_MODEL_PRICING_TIP_LABELS, ...labels }\n return (\n <div className=\"space-y-1 text-sm\">\n <div className=\"font-medium\">{modelName}</div>\n {inputPrice && <div>{l.input(inputPrice)}</div>}\n {outputPrice && <div>{l.output(outputPrice)}</div>}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Plus, Settings } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from './test-id'\n\n// ── Header actions ──────────────────────────────────────────────────────────────────────────\n\n/** Right side of the conversation tab strip. */\nexport function ConversationHeaderActions({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return (\n <div\n className={cn('flex items-center gap-2', className)}\n data-slot=\"conversation-header-actions\"\n >\n {children}\n </div>\n )\n}\n\n/** Every fixed string of the conversation parts. Pass a partial `labels` to a part to reword. */\nexport interface ConversationPartsLabels {\n /** \"New Chat\": `entityLabel` is the host's noun. */\n newEntity: (entityLabel: string) => string\n newPaChatTitle: string\n newPaChat: string\n paModeTitle: string\n pa: string\n}\n\nexport const DEFAULT_CONVERSATION_PARTS_LABELS: ConversationPartsLabels = {\n newEntity: (entityLabel) => `New ${entityLabel}`,\n newPaChatTitle: 'Start a new Personal Assistant chat',\n newPaChat: 'New PA Chat',\n paModeTitle: 'Personal Assistant mode',\n pa: 'PA',\n}\n\nexport interface NewChatButtonProps {\n /** Entity label, e.g. \"Chat\": names the button (\"New Chat\"). */\n entityLabel: string\n /** Narrow header: icon only. */\n isCompact: boolean\n onClick: () => void\n labels?: Partial<ConversationPartsLabels>\n testId?: string\n}\n\n/** \"+ New Chat\". */\nexport function NewChatButton({\n entityLabel,\n isCompact,\n onClick,\n labels,\n testId = 'new-conversation-button',\n}: NewChatButtonProps) {\n const text = { ...DEFAULT_CONVERSATION_PARTS_LABELS, ...labels }.newEntity(entityLabel)\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"flex h-8 items-center gap-1.5 rounded-md px-2 text-sm font-medium text-primary transition-colors hover:bg-primary/10 pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n data-testid={testId}\n aria-label={text}\n title={text}\n >\n <Plus className=\"size-4 shrink-0\" />\n {!isCompact && <span>{text}</span>}\n </button>\n )\n}\n\n/** Starts a Personal Assistant conversation (experimental). */\nexport function NewPaChatButton({\n isCompact,\n onClick,\n labels,\n testId = 'new-pa-conversation-button',\n}: {\n isCompact: boolean\n onClick: () => void\n labels?: Partial<ConversationPartsLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_CONVERSATION_PARTS_LABELS, ...labels }\n return (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={onClick}\n className={cn(\n 'pointer-coarse:min-h-11',\n isCompact ? 'flex items-center' : 'flex w-auto items-center gap-2 px-4'\n )}\n data-testid={testId}\n title={l.newPaChatTitle}\n >\n <Bot className=\"size-4\" />\n {!isCompact && <span>{l.newPaChat}</span>}\n </Button>\n )\n}\n\n// ── Composer slots ──────────────────────────────────────────────────────────────────────────\n\n/** Left of the composer toolbar: borderless, muted buttons (files, facts). */\nexport function ComposerAccessories({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return (\n <span\n className={cn(\n 'flex items-center gap-1 [&_button]:border-transparent [&_button]:bg-transparent [&_button]:text-muted-foreground pointer-coarse:[&_button]:h-11',\n className\n )}\n data-slot=\"composer-accessories\"\n >\n {children}\n </span>\n )\n}\n\n/** Right of the composer toolbar: tools (settings, mic) around the send button. */\nexport function ComposerTools({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return (\n <div\n className={cn(\n 'flex items-center gap-1 [&_button:not([data-testid=send-message-button]):not([data-testid=retry-button])]:border-transparent [&_button:not([data-testid=send-message-button]):not([data-testid=retry-button])]:bg-transparent',\n className\n )}\n data-slot=\"composer-tools\"\n >\n {children}\n </div>\n )\n}\n\n/** Personal Assistant mode marker in place of the accessories. */\nexport function PaModeBadge({\n icon,\n labels,\n testId = 'pa-mode-indicator',\n}: {\n icon: ReactNode\n labels?: Partial<ConversationPartsLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_CONVERSATION_PARTS_LABELS, ...labels }\n return (\n <div\n className=\"flex h-8 shrink-0 items-center gap-1.5 rounded-md px-2.5 text-yellow-text\"\n title={l.paModeTitle}\n data-testid={testId}\n >\n {icon}\n <span className=\"text-sm font-semibold\">{l.pa}</span>\n </div>\n )\n}\n\n/** Icon-only gear for the conversation's settings (developers). */\nexport function ConversationSettingsButton({\n label,\n onClick,\n testId = 'conversation-settings-button',\n}: {\n /** e.g. \"Chat Settings\". */\n label: string\n onClick: () => void\n testId?: string\n}) {\n return (\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 shrink-0 text-muted-foreground pointer-coarse:size-11\"\n onClick={onClick}\n title={label}\n aria-label={label}\n data-testid={testId}\n >\n <Settings className=\"size-4\" />\n </Button>\n )\n}\n\n/** The history (list) view area when no chat tab is active. */\nexport function ConversationHistoryPane({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return <div className={cn('min-h-0 flex-1 overflow-hidden', className)}>{children}</div>\n}\n","/**\n * PendingAnswerBar\n *\n * When the agent pauses to ask the user a question (ask_user / Human-in-the-loop),\n * this card docks directly above the message composer. It shows the FULL question\n * and lays the answer options out vertically — one full-width row each — so every\n * label is readable in full, however long. A countdown sits in the header.\n *\n * There is intentionally NO text input here: a free-text answer is typed in the\n * real composer below, which interjects the answer while a question is\n * pending. One input, where the user's cursor already is.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport { MessageCircleQuestion, Clock, Pause, Play } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\n/** Every fixed string of the pending-answer bar. */\nexport interface PendingAnswerBarLabels {\n heading: string\n optionsLabel: string\n hint: string\n /** Pause button while the countdown runs. */\n pauseTimer: string\n /** Pause button while it is paused. */\n resumeTimer: string\n /** Name of the countdown, spoken with its value. */\n timeLeft: string\n /** Announced at 30 and 10 seconds left. */\n secondsWarning: (seconds: number) => string\n}\n\nexport const DEFAULT_PENDING_ANSWER_BAR_LABELS: PendingAnswerBarLabels = {\n heading: 'ARBI is asking',\n optionsLabel: 'Answer options',\n hint: 'Pick an option, or type your own answer below.',\n pauseTimer: 'Pause the countdown',\n resumeTimer: 'Resume the countdown',\n timeLeft: 'Time left to answer',\n secondsWarning: (seconds) => `${seconds} seconds left to answer`,\n}\n\nexport interface PendingAnswerBarProps {\n question: string\n options: string[]\n timeoutSeconds: number\n /** Called with the chosen option, the typed answer, or 'timeout' when it expires. */\n onPick: (answer: string) => void\n labels?: Partial<PendingAnswerBarLabels>\n}\n\nexport function PendingAnswerBar({\n question,\n options,\n timeoutSeconds,\n onPick,\n labels,\n}: PendingAnswerBarProps) {\n const l = { ...DEFAULT_PENDING_ANSWER_BAR_LABELS, ...labels }\n const [secondsLeft, setSecondsLeft] = useState(timeoutSeconds)\n // Once we've answered (or timed out) don't fire again as the bar unmounts.\n const firedRef = useRef(false)\n // WCAG 2.2.1: the countdown is pausable, and holds still while focus is inside the bar so a\n // keyboard or screen-reader user reading the options is never timed out under their hands.\n const [isPausedByUser, setIsPausedByUser] = useState(false)\n const [hasFocusWithin, setHasFocusWithin] = useState(false)\n const isPaused = isPausedByUser || hasFocusWithin\n // Spoken once the bar is mounted (a live region only announces changes made after it exists).\n const [announcement, setAnnouncement] = useState('')\n\n // A bare \"Other\" option is redundant — the composer is the free-text path.\n const choices = options.filter((o) => o.trim().toLowerCase() !== 'other')\n\n useEffect(() => {\n setAnnouncement(`${l.heading}: ${question}`)\n // Once per question: the bar is keyed by it in the host.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n if (secondsLeft <= 0 || isPaused) return\n const t = setInterval(() => setSecondsLeft((s) => (s <= 1 ? 0 : s - 1)), 1000)\n return () => clearInterval(t)\n }, [secondsLeft, isPaused])\n\n useEffect(() => {\n if (secondsLeft === 30 || secondsLeft === 10) setAnnouncement(l.secondsWarning(secondsLeft))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [secondsLeft])\n\n useEffect(() => {\n if (secondsLeft === 0 && !firedRef.current) {\n firedRef.current = true\n onPick('timeout')\n }\n }, [secondsLeft, onPick])\n\n const pick = (answer: string) => {\n if (firedRef.current) return\n firedRef.current = true\n onPick(answer)\n }\n\n const fmt = (s: number): string => {\n const m = Math.floor(s / 60)\n const r = s % 60\n return m > 0 ? `${m}:${r.toString().padStart(2, '0')}` : `${r}s`\n }\n const low = secondsLeft <= 30\n\n return (\n <div\n role=\"group\"\n aria-label={l.heading}\n className=\"mb-2 rounded-lg border border-theme-cyan/30 bg-theme-cyan/[0.05] px-3 py-2.5\"\n data-slot=\"pending-answer-bar\"\n data-testid=\"pending-answer-bar\"\n onFocus={() => setHasFocusWithin(true)}\n onBlur={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n setHasFocusWithin(false)\n }\n }}\n >\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"sr-only\"\n data-testid=\"pending-answer-status\"\n >\n {announcement}\n </div>\n {/* Header: label + countdown */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <MessageCircleQuestion aria-hidden=\"true\" className=\"h-4 w-4 shrink-0 text-theme-cyan\" />\n <span className=\"text-xs font-medium uppercase tracking-wide text-theme-cyan\">\n {l.heading}\n </span>\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n <span\n role=\"timer\"\n aria-label={l.timeLeft}\n className={cn(\n 'flex items-center gap-1 text-xs tabular-nums',\n low ? 'text-red-text' : 'text-muted-foreground'\n )}\n data-testid=\"pending-answer-timer\"\n >\n <Clock aria-hidden=\"true\" className=\"h-3 w-3\" />\n {fmt(secondsLeft)}\n </span>\n <button\n type=\"button\"\n onClick={() => setIsPausedByUser((p) => !p)}\n aria-pressed={isPausedByUser}\n aria-label={l.pauseTimer}\n title={isPausedByUser ? l.resumeTimer : l.pauseTimer}\n className=\"flex size-6 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:size-11\"\n data-testid=\"pending-answer-pause\"\n >\n {isPausedByUser ? (\n <Play aria-hidden=\"true\" className=\"h-3 w-3\" />\n ) : (\n <Pause aria-hidden=\"true\" className=\"h-3 w-3\" />\n )}\n </button>\n </div>\n </div>\n\n {/* The full question — wraps freely, never truncated */}\n <p className=\"mt-1.5 whitespace-pre-line text-sm text-foreground\">{question}</p>\n\n {/* Options, stacked vertically — each row reveals its full label */}\n {choices.length > 0 && (\n <div className=\"mt-2.5 flex flex-col gap-1.5\" role=\"group\" aria-label={l.optionsLabel}>\n {choices.map((option, i) => (\n <button\n key={`${i}-${option}`}\n type=\"button\"\n onClick={() => pick(option)}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md border border-border bg-background',\n 'px-3 py-2 text-left text-sm text-foreground transition-colors',\n 'hover:border-theme-cyan/50 hover:bg-theme-cyan/10',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11'\n )}\n data-testid={`pending-answer-option-${option}`}\n >\n <span\n aria-hidden=\"true\"\n className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded-full border border-theme-cyan/40 text-xs font-medium text-theme-cyan\"\n >\n {i + 1}\n </span>\n <span className=\"min-w-0 flex-1\">{option}</span>\n </button>\n ))}\n </div>\n )}\n\n {/* Free-text affordance — points at the composer below */}\n <p className=\"mt-2 text-xs text-muted-foreground\">{l.hint}</p>\n </div>\n )\n}\n","import { useMemo, type ComponentType, type ReactNode } from 'react'\nimport { Bot, Loader2, MessageSquare, Search, User, X } from 'lucide-react'\n\nimport { Button, PassageCard } from '@arbidocs/react/ui'\n\n/** One matching message of a conversation. */\nexport interface ConversationSearchMatch {\n id: string\n role: string\n score: number\n snippet: string\n}\n\n/** A conversation with the messages that matched the query. */\nexport interface ConversationSearchGroup {\n id: string\n title?: string | null\n matches: ConversationSearchMatch[]\n}\n\n/** Every fixed string of the conversation search. */\nexport interface ConversationSearchLabels {\n placeholder: string\n search: string\n searching: string\n matched: (count: number, query: string) => string\n matchCount: (count: number) => string\n untitled: string\n you: string\n assistant: string\n clear: string\n noResults: (query: string) => string\n reindexHint: ReactNode\n backToList: string\n}\n\nexport const DEFAULT_CONVERSATION_SEARCH_LABELS: ConversationSearchLabels = {\n placeholder: 'Search your conversations...',\n search: 'Search',\n searching: 'Searching conversations…',\n matched: (count, query) => `${count} conversation${count === 1 ? '' : 's'} matched “${query}”`,\n matchCount: (count) => `${count} match${count === 1 ? '' : 'es'}`,\n untitled: 'Untitled conversation',\n you: 'You',\n assistant: 'Assistant',\n clear: 'Clear',\n noResults: (query) => `No conversations matched “${query}”.`,\n reindexHint: (\n <>\n Older conversations may need indexing — try <span className=\"font-medium\">Re-index</span>.\n </>\n ),\n backToList: 'Back to list',\n}\n\nexport interface ConversationSearchViewProps {\n query: string\n onQueryChange: (query: string) => void\n /** Enter (without Shift) or the submit button. */\n onSubmit: () => void\n canSubmit: boolean\n isSearching: boolean\n /** The query the shown results answer; empty while no search has run. */\n submittedQuery: string\n /** Results of `submittedQuery`. */\n groups: ConversationSearchGroup[]\n onOpenConversation: (conversationId: string, messageId?: string) => void\n /** Back to the idle body. */\n onClear: () => void\n /** Shown beneath the bar until a search is run (e.g. the history list). */\n children?: ReactNode\n /** Wraps the results area (e.g. an error boundary). */\n ResultsBoundary?: ComponentType<{ children: ReactNode }>\n labels?: Partial<ConversationSearchLabels>\n}\n\nfunction RoleChip({ isUser, labels }: { isUser: boolean; labels: ConversationSearchLabels }) {\n const Icon = isUser ? User : Bot\n return (\n <span className=\"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground\">\n <Icon className=\"size-3\" />\n {isUser ? labels.you : labels.assistant}\n </span>\n )\n}\n\nconst Passthrough = ({ children }: { children: ReactNode }) => <>{children}</>\n\n/**\n * Search across past conversations: a search bar, then either the idle body (history list) or\n * the matches grouped by conversation. Opening a group or a hit is the host's navigation.\n */\nexport function ConversationSearchView({\n query,\n onQueryChange,\n onSubmit,\n canSubmit,\n isSearching,\n submittedQuery,\n groups,\n onOpenConversation,\n onClear,\n children,\n ResultsBoundary = Passthrough,\n labels,\n}: ConversationSearchViewProps) {\n const l = useMemo(() => ({ ...DEFAULT_CONVERSATION_SEARCH_LABELS, ...labels }), [labels])\n const hasResults = !!submittedQuery && !isSearching && groups.length > 0\n\n return (\n <div\n data-slot=\"conversation-search\"\n className=\"flex h-full flex-col\"\n data-testid=\"conversation-search-page\"\n >\n <div className=\"flex items-start gap-3 px-6 py-4\">\n <form\n onSubmit={(e) => {\n e.preventDefault()\n onSubmit()\n }}\n className=\"flex-1\"\n >\n <div className=\"flex items-start gap-2 rounded-md border border-input bg-muted px-3 py-1.5 focus-within:ring-2 focus-within:ring-ring\">\n <textarea\n rows={1}\n value={query}\n onChange={(e) => {\n onQueryChange(e.target.value)\n e.target.style.height = 'auto'\n e.target.style.height = `${e.target.scrollHeight}px`\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n onSubmit()\n }\n }}\n placeholder={l.placeholder}\n aria-label={l.search}\n className=\"flex-1 resize-none overflow-hidden border-0 bg-transparent p-0 text-base leading-relaxed text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid=\"conversation-search-input\"\n />\n <div className=\"flex flex-shrink-0 items-center gap-1\">\n <Button\n type=\"submit\"\n size=\"icon\"\n disabled={!canSubmit}\n className=\"size-7 pointer-coarse:size-11\"\n data-testid=\"conversation-search-submit-button\"\n title={l.search}\n aria-label={l.search}\n >\n {isSearching ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Search className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n </form>\n </div>\n\n {!submittedQuery ? (\n <div className=\"flex-1 overflow-hidden\">{children}</div>\n ) : (\n <ResultsBoundary>\n <main className=\"flex-1 overflow-auto px-6 pb-6\">\n {isSearching ? (\n <div className=\"flex items-center justify-center gap-2 py-16 text-muted-foreground\">\n <Loader2 className=\"size-5 animate-spin\" />\n {l.searching}\n </div>\n ) : hasResults ? (\n <div className=\"space-y-4\" data-testid=\"conversation-search-results\">\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"text-sm text-muted-foreground\">\n {l.matched(groups.length, submittedQuery)}\n </p>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 gap-1 text-muted-foreground pointer-coarse:h-11\"\n onClick={onClear}\n data-testid=\"conversation-search-clear\"\n >\n <X className=\"size-3.5\" />\n {l.clear}\n </Button>\n </div>\n {groups.map((group) => (\n <div\n key={group.id}\n className=\"rounded-lg border border-border bg-card\"\n data-testid=\"conversation-search-group\"\n >\n <button\n type=\"button\"\n onClick={() => onOpenConversation(group.id)}\n className=\"flex w-full items-center justify-between gap-3 rounded-t-lg px-4 py-2.5 text-left transition-colors hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring pointer-coarse:min-h-11\"\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n <MessageSquare className=\"size-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"truncate font-medium\">{group.title || l.untitled}</span>\n </span>\n <span className=\"flex-shrink-0 text-xs text-muted-foreground\">\n {l.matchCount(group.matches.length)}\n </span>\n </button>\n <div className=\"space-y-2 border-t border-border p-3\">\n {group.matches.map((m) => (\n <PassageCard\n key={m.id}\n header={<RoleChip isUser={m.role === 'user'} labels={l} />}\n score={m.score}\n onClick={() => onOpenConversation(group.id, m.id)}\n data-testid=\"conversation-search-hit\"\n >\n <p className=\"line-clamp-3 text-sm text-foreground/90\">{m.snippet}</p>\n </PassageCard>\n ))}\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div\n className=\"py-16 text-center text-muted-foreground\"\n data-testid=\"conversation-search-no-results\"\n >\n <MessageSquare className=\"mx-auto mb-3 size-8 opacity-40\" />\n <p>{l.noResults(submittedQuery)}</p>\n <p className=\"mt-1 text-sm\">{l.reindexHint}</p>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"mt-3 gap-1 text-muted-foreground pointer-coarse:h-11\"\n onClick={onClear}\n >\n <X className=\"size-3.5\" />\n {l.backToList}\n </Button>\n </div>\n )}\n </main>\n </ResultsBoundary>\n )}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/chat/ConversationLayout.tsx","../src/chat/ModelPicker.tsx","../src/chat/ConversationParts.tsx","../src/chat/PendingAnswerBar.tsx","../src/chat/ConversationSearchView.tsx"],"names":["jsx","cn","ModelPickerTrigger","jsxs","Button","Settings","Bot"],"mappings":"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","file":"chunk-NVXNTHL4.js","sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\n/** Every fixed string of the conversation layout. Pass a partial `labels` to reword. */\nexport interface ConversationLayoutLabels {\n loadingMessages: string\n}\n\nexport const DEFAULT_CONVERSATION_LAYOUT_LABELS: ConversationLayoutLabels = {\n loadingMessages: 'Loading messages...',\n}\n\n/**\n * Page frame of a conversation. The chat scroll surface belongs to the HOST (the outer\n * `[data-scroll-container]`), so this column must GROW with its content, not stay\n * viewport-capped: the sticky header and the sticky composer dock need a containing block that\n * spans the whole thread, otherwise `position: sticky` is clamped to one screen and both unpin.\n *\n * Do NOT put `overflow: clip/hidden`, `transform`, `filter`, `will-change` or `contain` on\n * {@link ConversationBody}: `overflow: clip` collapses the scrollHeight so the thread cannot\n * scroll, and a transform creates a containing block that breaks the dock's `bottom: 0`.\n */\nexport function ConversationRoot({\n className,\n children,\n testId = 'conversation',\n ...rest\n}: HTMLAttributes<HTMLDivElement> & { testId?: string }) {\n return (\n <div\n data-slot=\"conversation\"\n className={cn('flex min-h-full shrink-0 flex-col', className)}\n data-testid={testId}\n {...rest}\n >\n {children}\n </div>\n )\n}\n\n/** Sticky strip at the top (tabs and their actions). */\nexport function ConversationHeader({\n className,\n children,\n ...rest\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"conversation-header\"\n className={cn('sticky top-0 z-10 bg-background', className)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n\n/** Grows (never shrinks) to the thread's full height so the sticky dock spans the scroll range. */\nexport function ConversationBody({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"conversation-body\"\n className={cn('flex flex-[1_0_auto] flex-col', className)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n\n/** The thread (or its empty / loading state). `relative` so absolutely-filled states fit. */\nexport function ConversationMain({ className, children, ...rest }: HTMLAttributes<HTMLElement>) {\n return (\n <main\n data-slot=\"conversation-main\"\n className={cn('relative flex flex-[1_0_auto] flex-col', className)}\n {...rest}\n >\n {children}\n </main>\n )\n}\n\n/** Centered status while the thread loads. */\nexport function ConversationLoading({\n children,\n labels,\n className,\n testId = 'loading-messages',\n}: {\n /** Text; wins over `labels.loadingMessages`. */\n children?: ReactNode\n labels?: Partial<ConversationLayoutLabels>\n className?: string\n testId?: string\n}) {\n const l = { ...DEFAULT_CONVERSATION_LAYOUT_LABELS, ...labels }\n return (\n <div className={cn('flex h-64 items-center justify-center', className)} data-testid={testId}>\n <p className=\"text-muted-foreground\">{children ?? l.loadingMessages}</p>\n </div>\n )\n}\n\nexport const Conversation = {\n Root: ConversationRoot,\n Header: ConversationHeader,\n Body: ConversationBody,\n Main: ConversationMain,\n Loading: ConversationLoading,\n}\n","import { forwardRef } from 'react'\nimport type { ComponentType, ReactNode } from 'react'\nimport { Check, ChevronsUpDown, Crown, Glasses, Settings, Sparkles, Zap } from 'lucide-react'\nimport {\n Button,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { BlocksTooltipProvider } from '../provider/TooltipScope'\n\n// ── Icons ───────────────────────────────────────────────────────────────────────────────────\n\nexport type ModelTierKind = 'standard' | 'wise' | 'premium'\n\nconst TIER_ICON: Record<ModelTierKind, ComponentType<{ className?: string }>> = {\n standard: Zap,\n wise: Glasses,\n premium: Crown,\n}\n\nconst TIER_TONE: Record<ModelTierKind, string> = {\n standard: 'text-secondary fill-secondary',\n wise: 'text-secondary fill-secondary',\n premium: 'text-yellow-text fill-yellow-text',\n}\n\nexport interface ModelTierIconProps {\n tier: ModelTierKind\n /** Agentic mode off: the tier glyph is greyed. */\n isGreyed?: boolean\n className?: string\n}\n\n/** The glyph of a model tier (Fast/Standard bolt, Wise glasses, Premium crown). */\nexport function ModelTierIcon({ tier, isGreyed, className }: ModelTierIconProps) {\n const Icon = TIER_ICON[tier]\n return (\n <Icon\n className={cn(\n 'size-3.5 shrink-0',\n isGreyed ? 'fill-muted-foreground text-muted-foreground' : TIER_TONE[tier],\n className\n )}\n />\n )\n}\n\n/** The Autoselect sparkle. */\nexport function ModelAutoIcon({ className }: { className?: string }) {\n return <Sparkles className={cn('size-3.5 shrink-0 fill-secondary text-secondary', className)} />\n}\n\n/** Neutral status dot for models with no tier glyph. */\nexport function ModelDot({ isGreyed }: { isGreyed?: boolean }) {\n return (\n <div\n className={cn(\n 'size-2 shrink-0 rounded-full',\n isGreyed ? 'bg-muted-foreground' : 'bg-primary'\n )}\n />\n )\n}\n\n/** Label + icon content shared by menu rows and select items. */\nexport function ModelOptionLabel({ icon, label }: { icon: ReactNode; label: ReactNode }) {\n return (\n <div className=\"flex w-full items-center gap-2\">\n {icon}\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </div>\n )\n}\n\n// ── Trigger ─────────────────────────────────────────────────────────────────────────────────\n\nexport interface ModelTriggerContentProps {\n icon?: ReactNode\n label: ReactNode\n}\n\n/** Icon + truncated label (used inside the compact trigger and the select trigger). */\nexport function ModelTriggerContent({ icon, label }: ModelTriggerContentProps) {\n return (\n <div className=\"flex min-w-0 items-center gap-1.5\">\n {icon}\n <span className=\"truncate\">{label}</span>\n </div>\n )\n}\n\nexport interface ModelPickerTriggerProps extends ModelTriggerContentProps {\n /** Spoken before the current model, so the button reads \"Model: Autoselect\". Default \"Model\". */\n nameLabel?: string\n className?: string\n testId?: string\n}\n\n/** The compact picker button (ghost, with a chevron). Forwards its ref for popover/tooltip triggers. */\nexport const ModelPickerTrigger = forwardRef<HTMLButtonElement, ModelPickerTriggerProps>(\n function ModelPickerTrigger(\n { icon, label, nameLabel = 'Model', className, testId = 'model-selector-compact', ...rest },\n ref\n ) {\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-8 min-w-0 shrink gap-1 px-2 text-sm text-muted-foreground hover:bg-muted hover:text-foreground pointer-coarse:h-11',\n className\n )}\n aria-label={typeof label === 'string' ? `${nameLabel}: ${label}` : undefined}\n data-slot=\"model-picker-trigger\"\n data-testid={testId}\n {...rest}\n >\n <ModelTriggerContent icon={icon} label={label} />\n <ChevronsUpDown className=\"size-3 shrink-0 text-muted-foreground\" />\n </Button>\n )\n }\n)\n\n// ── Popover + menu ──────────────────────────────────────────────────────────────────────────\n\nexport interface ModelPickerPopoverProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** The trigger (a ModelPickerTrigger). */\n trigger: ReactNode\n /** Hover tooltip on the trigger (hidden while open). */\n tooltip?: ReactNode\n title?: string\n /** The menu rows. */\n children: ReactNode\n}\n\n/** Popover shell: trigger + tooltip + titled, scrolling list. */\nexport function ModelPickerPopover({\n open,\n onOpenChange,\n trigger,\n tooltip,\n title = 'Select AI Model',\n children,\n}: ModelPickerPopoverProps) {\n return (\n <BlocksTooltipProvider>\n <Popover open={open} onOpenChange={onOpenChange}>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger asChild>{trigger}</PopoverTrigger>\n </TooltipTrigger>\n {tooltip && !open && <TooltipContent side=\"top\">{tooltip}</TooltipContent>}\n </Tooltip>\n <PopoverContent side=\"top\" align=\"start\" className=\"w-[280px] p-1\" sideOffset={8}>\n <div className=\"px-2 py-1.5 text-sm font-medium text-muted-foreground\">{title}</div>\n <div className=\"flex max-h-[280px] flex-col gap-0.5 overflow-y-auto\">{children}</div>\n </PopoverContent>\n </Popover>\n </BlocksTooltipProvider>\n )\n}\n\nexport function ModelMenuDivider() {\n return <div className=\"my-0.5 border-t border-border\" role=\"separator\" />\n}\n\nexport function ModelMenuMessage({ children }: { children: ReactNode }) {\n return <div className=\"px-2 py-1.5 text-sm text-muted-foreground\">{children}</div>\n}\n\nexport interface ModelOptionProps {\n icon: ReactNode\n label: ReactNode\n isSelected: boolean\n onSelect: () => void\n testId: string\n /** Tier rows mark selection with a primary left edge and bold label. */\n emphasis?: 'plain' | 'tier'\n}\n\n/** One selectable model row. */\nexport function ModelOption({\n icon,\n label,\n isSelected,\n onSelect,\n testId,\n emphasis = 'plain',\n}: ModelOptionProps) {\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n 'flex w-full min-w-0 items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm transition-colors hover:bg-accent pointer-coarse:min-h-11',\n emphasis === 'tier' && 'border-l-4',\n emphasis === 'tier' && (isSelected ? 'border-l-primary' : 'border-l-transparent'),\n isSelected && 'bg-accent'\n )}\n aria-pressed={isSelected}\n data-slot=\"model-option\"\n data-testid={testId}\n >\n {icon}\n <span\n className={cn(\n 'min-w-0 flex-1 truncate',\n emphasis === 'tier' &&\n (isSelected ? 'font-semibold text-foreground' : 'font-medium text-muted-foreground')\n )}\n >\n {label}\n </span>\n {isSelected && <Check className=\"size-3 shrink-0 text-primary\" />}\n </button>\n )\n}\n\nexport interface ModelTierOptionProps {\n icon: ReactNode\n label: ReactNode\n isSelected: boolean\n /** The tier is switched off in settings: shown dimmed and not selectable. */\n isDisabled?: boolean\n onSelect: () => void\n /** Trailing control (the configure cog). */\n action?: ReactNode\n testId: string\n}\n\n/** A tier row with a trailing action (Premium + configure cog). */\nexport function ModelTierOption({\n icon,\n label,\n isSelected,\n isDisabled,\n onSelect,\n action,\n testId,\n}: ModelTierOptionProps) {\n return (\n <div\n className={cn(\n 'flex items-center gap-1 rounded-sm border-l-4 pr-1 transition-colors',\n isSelected ? 'border-l-primary bg-accent' : 'border-l-transparent'\n )}\n data-slot=\"model-tier-option\"\n >\n <button\n type=\"button\"\n onClick={() => {\n if (!isDisabled) onSelect()\n }}\n disabled={isDisabled}\n className={cn(\n 'flex min-w-0 flex-1 items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm pointer-coarse:min-h-11',\n isDisabled ? 'cursor-not-allowed opacity-50' : 'hover:bg-accent'\n )}\n data-testid={testId}\n >\n {icon}\n <span\n className={cn(\n 'min-w-0 flex-1 truncate',\n isSelected ? 'font-semibold text-foreground' : 'font-medium text-muted-foreground'\n )}\n >\n {label}\n </span>\n </button>\n {action}\n </div>\n )\n}\n\nexport interface ModelConfigureButtonProps {\n onClick: () => void\n /** Accessible name. */\n label: string\n /** Tooltip text. */\n tooltip: string\n testId?: string\n}\n\n/** Small bordered cog beside a tier row. */\nexport function ModelConfigureButton({\n onClick,\n label,\n tooltip,\n testId,\n}: ModelConfigureButtonProps) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onClick()\n }}\n className=\"flex size-7 shrink-0 items-center justify-center rounded-md border border-border bg-background text-foreground hover:bg-accent pointer-coarse:size-11\"\n data-testid={testId}\n aria-label={label}\n >\n <Settings className=\"size-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{tooltip}</TooltipContent>\n </Tooltip>\n )\n}\n\n/** Every fixed string of the pricing tip. Pass a partial `labels` to translate or reword. */\nexport interface ModelPricingTipLabels {\n input: (price: string) => string\n output: (price: string) => string\n}\n\nexport const DEFAULT_MODEL_PRICING_TIP_LABELS: ModelPricingTipLabels = {\n input: (price) => `Input: ${price} / M tokens`,\n output: (price) => `Output: ${price} / M tokens`,\n}\n\nexport interface ModelPricingTipProps {\n modelName: string\n /** £ per million tokens, formatted (\"£2.50\"). */\n inputPrice?: string | null\n outputPrice?: string | null\n labels?: Partial<ModelPricingTipLabels>\n}\n\n/** Tooltip body: model name and per-million-token £ prices. */\nexport function ModelPricingTip({\n modelName,\n inputPrice,\n outputPrice,\n labels,\n}: ModelPricingTipProps) {\n const l = { ...DEFAULT_MODEL_PRICING_TIP_LABELS, ...labels }\n return (\n <div className=\"space-y-1 text-sm\">\n <div className=\"font-medium\">{modelName}</div>\n {inputPrice && <div>{l.input(inputPrice)}</div>}\n {outputPrice && <div>{l.output(outputPrice)}</div>}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Plus, Settings } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from './test-id'\n\n// ── Header actions ──────────────────────────────────────────────────────────────────────────\n\n/** Right side of the conversation tab strip. */\nexport function ConversationHeaderActions({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return (\n <div\n className={cn('flex items-center gap-2', className)}\n data-slot=\"conversation-header-actions\"\n >\n {children}\n </div>\n )\n}\n\n/** Every fixed string of the conversation parts. Pass a partial `labels` to a part to reword. */\nexport interface ConversationPartsLabels {\n /** \"New Chat\": `entityLabel` is the host's noun. */\n newEntity: (entityLabel: string) => string\n newPaChatTitle: string\n newPaChat: string\n paModeTitle: string\n pa: string\n}\n\nexport const DEFAULT_CONVERSATION_PARTS_LABELS: ConversationPartsLabels = {\n newEntity: (entityLabel) => `New ${entityLabel}`,\n newPaChatTitle: 'Start a new Personal Assistant chat',\n newPaChat: 'New PA Chat',\n paModeTitle: 'Personal Assistant mode',\n pa: 'PA',\n}\n\nexport interface NewChatButtonProps {\n /** Entity label, e.g. \"Chat\": names the button (\"New Chat\"). */\n entityLabel: string\n /** Narrow header: icon only. */\n isCompact: boolean\n onClick: () => void\n labels?: Partial<ConversationPartsLabels>\n testId?: string\n}\n\n/** \"+ New Chat\". */\nexport function NewChatButton({\n entityLabel,\n isCompact,\n onClick,\n labels,\n testId = 'new-conversation-button',\n}: NewChatButtonProps) {\n const text = { ...DEFAULT_CONVERSATION_PARTS_LABELS, ...labels }.newEntity(entityLabel)\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"flex h-8 items-center gap-1.5 rounded-md px-2 text-sm font-medium text-primary transition-colors hover:bg-primary/10 pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n data-testid={testId}\n aria-label={text}\n title={text}\n >\n <Plus className=\"size-4 shrink-0\" />\n {!isCompact && <span>{text}</span>}\n </button>\n )\n}\n\n/** Starts a Personal Assistant conversation (experimental). */\nexport function NewPaChatButton({\n isCompact,\n onClick,\n labels,\n testId = 'new-pa-conversation-button',\n}: {\n isCompact: boolean\n onClick: () => void\n labels?: Partial<ConversationPartsLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_CONVERSATION_PARTS_LABELS, ...labels }\n return (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={onClick}\n className={cn(\n 'pointer-coarse:min-h-11',\n isCompact ? 'flex items-center' : 'flex w-auto items-center gap-2 px-4'\n )}\n data-testid={testId}\n title={l.newPaChatTitle}\n >\n <Bot className=\"size-4\" />\n {!isCompact && <span>{l.newPaChat}</span>}\n </Button>\n )\n}\n\n// ── Composer slots ──────────────────────────────────────────────────────────────────────────\n\n/** Left of the composer toolbar: borderless, muted buttons (files, facts). */\nexport function ComposerAccessories({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return (\n <span\n className={cn(\n 'flex items-center gap-1 [&_button]:border-transparent [&_button]:bg-transparent [&_button]:text-muted-foreground pointer-coarse:[&_button]:h-11',\n className\n )}\n data-slot=\"composer-accessories\"\n >\n {children}\n </span>\n )\n}\n\n/** Right of the composer toolbar: tools (settings, mic) around the send button. */\nexport function ComposerTools({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return (\n <div\n className={cn(\n 'flex items-center gap-1 [&_button:not([data-testid=send-message-button]):not([data-testid=retry-button])]:border-transparent [&_button:not([data-testid=send-message-button]):not([data-testid=retry-button])]:bg-transparent',\n className\n )}\n data-slot=\"composer-tools\"\n >\n {children}\n </div>\n )\n}\n\n/** Personal Assistant mode marker in place of the accessories. */\nexport function PaModeBadge({\n icon,\n labels,\n testId = 'pa-mode-indicator',\n}: {\n icon: ReactNode\n labels?: Partial<ConversationPartsLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_CONVERSATION_PARTS_LABELS, ...labels }\n return (\n <div\n className=\"flex h-8 shrink-0 items-center gap-1.5 rounded-md px-2.5 text-yellow-text\"\n title={l.paModeTitle}\n data-testid={testId}\n >\n {icon}\n <span className=\"text-sm font-semibold\">{l.pa}</span>\n </div>\n )\n}\n\n/** Icon-only gear for the conversation's settings (developers). */\nexport function ConversationSettingsButton({\n label,\n onClick,\n testId = 'conversation-settings-button',\n}: {\n /** e.g. \"Chat Settings\". */\n label: string\n onClick: () => void\n testId?: string\n}) {\n return (\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 shrink-0 text-muted-foreground pointer-coarse:size-11\"\n onClick={onClick}\n title={label}\n aria-label={label}\n data-testid={testId}\n >\n <Settings className=\"size-4\" />\n </Button>\n )\n}\n\n/** The history (list) view area when no chat tab is active. */\nexport function ConversationHistoryPane({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return <div className={cn('min-h-0 flex-1 overflow-hidden', className)}>{children}</div>\n}\n","/**\n * PendingAnswerBar\n *\n * When the agent pauses to ask the user a question (ask_user / Human-in-the-loop),\n * this card docks directly above the message composer. It shows the FULL question\n * and lays the answer options out vertically — one full-width row each — so every\n * label is readable in full, however long. A countdown sits in the header.\n *\n * There is intentionally NO text input here: a free-text answer is typed in the\n * real composer below, which interjects the answer while a question is\n * pending. One input, where the user's cursor already is.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport { MessageCircleQuestion, Clock, Pause, Play } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\n/** Every fixed string of the pending-answer bar. */\nexport interface PendingAnswerBarLabels {\n heading: string\n optionsLabel: string\n hint: string\n /** Pause button while the countdown runs. */\n pauseTimer: string\n /** Pause button while it is paused. */\n resumeTimer: string\n /** Name of the countdown, spoken with its value. */\n timeLeft: string\n /** Announced at 30 and 10 seconds left. */\n secondsWarning: (seconds: number) => string\n}\n\nexport const DEFAULT_PENDING_ANSWER_BAR_LABELS: PendingAnswerBarLabels = {\n heading: 'ARBI is asking',\n optionsLabel: 'Answer options',\n hint: 'Pick an option, or type your own answer below.',\n pauseTimer: 'Pause the countdown',\n resumeTimer: 'Resume the countdown',\n timeLeft: 'Time left to answer',\n secondsWarning: (seconds) => `${seconds} seconds left to answer`,\n}\n\nexport interface PendingAnswerBarProps {\n question: string\n options: string[]\n timeoutSeconds: number\n /** Called with the chosen option, the typed answer, or 'timeout' when it expires. */\n onPick: (answer: string) => void\n labels?: Partial<PendingAnswerBarLabels>\n}\n\nexport function PendingAnswerBar({\n question,\n options,\n timeoutSeconds,\n onPick,\n labels,\n}: PendingAnswerBarProps) {\n const l = { ...DEFAULT_PENDING_ANSWER_BAR_LABELS, ...labels }\n const [secondsLeft, setSecondsLeft] = useState(timeoutSeconds)\n // Once we've answered (or timed out) don't fire again as the bar unmounts.\n const firedRef = useRef(false)\n // WCAG 2.2.1: the countdown is pausable, and holds still while focus is inside the bar so a\n // keyboard or screen-reader user reading the options is never timed out under their hands.\n const [isPausedByUser, setIsPausedByUser] = useState(false)\n const [hasFocusWithin, setHasFocusWithin] = useState(false)\n const isPaused = isPausedByUser || hasFocusWithin\n // Spoken once the bar is mounted (a live region only announces changes made after it exists).\n const [announcement, setAnnouncement] = useState('')\n\n // A bare \"Other\" option is redundant — the composer is the free-text path.\n const choices = options.filter((o) => o.trim().toLowerCase() !== 'other')\n\n useEffect(() => {\n setAnnouncement(`${l.heading}: ${question}`)\n // Once per question: the bar is keyed by it in the host.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n if (secondsLeft <= 0 || isPaused) return\n const t = setInterval(() => setSecondsLeft((s) => (s <= 1 ? 0 : s - 1)), 1000)\n return () => clearInterval(t)\n }, [secondsLeft, isPaused])\n\n useEffect(() => {\n if (secondsLeft === 30 || secondsLeft === 10) setAnnouncement(l.secondsWarning(secondsLeft))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [secondsLeft])\n\n useEffect(() => {\n if (secondsLeft === 0 && !firedRef.current) {\n firedRef.current = true\n onPick('timeout')\n }\n }, [secondsLeft, onPick])\n\n const pick = (answer: string) => {\n if (firedRef.current) return\n firedRef.current = true\n onPick(answer)\n }\n\n const fmt = (s: number): string => {\n const m = Math.floor(s / 60)\n const r = s % 60\n return m > 0 ? `${m}:${r.toString().padStart(2, '0')}` : `${r}s`\n }\n const low = secondsLeft <= 30\n\n return (\n <div\n role=\"group\"\n aria-label={l.heading}\n className=\"mb-2 rounded-lg border border-theme-cyan/30 bg-theme-cyan/[0.05] px-3 py-2.5\"\n data-slot=\"pending-answer-bar\"\n data-testid=\"pending-answer-bar\"\n onFocus={() => setHasFocusWithin(true)}\n onBlur={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n setHasFocusWithin(false)\n }\n }}\n >\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"sr-only\"\n data-testid=\"pending-answer-status\"\n >\n {announcement}\n </div>\n {/* Header: label + countdown */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <MessageCircleQuestion aria-hidden=\"true\" className=\"h-4 w-4 shrink-0 text-theme-cyan\" />\n <span className=\"text-xs font-medium uppercase tracking-wide text-theme-cyan\">\n {l.heading}\n </span>\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n <span\n role=\"timer\"\n aria-label={l.timeLeft}\n className={cn(\n 'flex items-center gap-1 text-xs tabular-nums',\n low ? 'text-red-text' : 'text-muted-foreground'\n )}\n data-testid=\"pending-answer-timer\"\n >\n <Clock aria-hidden=\"true\" className=\"h-3 w-3\" />\n {fmt(secondsLeft)}\n </span>\n <button\n type=\"button\"\n onClick={() => setIsPausedByUser((p) => !p)}\n aria-pressed={isPausedByUser}\n aria-label={l.pauseTimer}\n title={isPausedByUser ? l.resumeTimer : l.pauseTimer}\n className=\"flex size-6 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:size-11\"\n data-testid=\"pending-answer-pause\"\n >\n {isPausedByUser ? (\n <Play aria-hidden=\"true\" className=\"h-3 w-3\" />\n ) : (\n <Pause aria-hidden=\"true\" className=\"h-3 w-3\" />\n )}\n </button>\n </div>\n </div>\n\n {/* The full question — wraps freely, never truncated */}\n <p className=\"mt-1.5 whitespace-pre-line text-sm text-foreground\">{question}</p>\n\n {/* Options, stacked vertically — each row reveals its full label */}\n {choices.length > 0 && (\n <div className=\"mt-2.5 flex flex-col gap-1.5\" role=\"group\" aria-label={l.optionsLabel}>\n {choices.map((option, i) => (\n <button\n key={`${i}-${option}`}\n type=\"button\"\n onClick={() => pick(option)}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md border border-border bg-background',\n 'px-3 py-2 text-left text-sm text-foreground transition-colors',\n 'hover:border-theme-cyan/50 hover:bg-theme-cyan/10',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11'\n )}\n data-testid={`pending-answer-option-${option}`}\n >\n <span\n aria-hidden=\"true\"\n className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded-full border border-theme-cyan/40 text-xs font-medium text-theme-cyan\"\n >\n {i + 1}\n </span>\n <span className=\"min-w-0 flex-1\">{option}</span>\n </button>\n ))}\n </div>\n )}\n\n {/* Free-text affordance — points at the composer below */}\n <p className=\"mt-2 text-xs text-muted-foreground\">{l.hint}</p>\n </div>\n )\n}\n","import { useMemo, type ComponentType, type ReactNode } from 'react'\nimport { Bot, Loader2, MessageSquare, Search, User, X } from 'lucide-react'\n\nimport { Button, PassageCard } from '@arbidocs/react/ui'\n\n/** One matching message of a conversation. */\nexport interface ConversationSearchMatch {\n id: string\n role: string\n score: number\n snippet: string\n}\n\n/** A conversation with the messages that matched the query. */\nexport interface ConversationSearchGroup {\n id: string\n title?: string | null\n matches: ConversationSearchMatch[]\n}\n\n/** Every fixed string of the conversation search. */\nexport interface ConversationSearchLabels {\n placeholder: string\n search: string\n searching: string\n matched: (count: number, query: string) => string\n matchCount: (count: number) => string\n untitled: string\n you: string\n assistant: string\n clear: string\n noResults: (query: string) => string\n reindexHint: ReactNode\n backToList: string\n}\n\nexport const DEFAULT_CONVERSATION_SEARCH_LABELS: ConversationSearchLabels = {\n placeholder: 'Search your conversations...',\n search: 'Search',\n searching: 'Searching conversations…',\n matched: (count, query) => `${count} conversation${count === 1 ? '' : 's'} matched “${query}”`,\n matchCount: (count) => `${count} match${count === 1 ? '' : 'es'}`,\n untitled: 'Untitled conversation',\n you: 'You',\n assistant: 'Assistant',\n clear: 'Clear',\n noResults: (query) => `No conversations matched “${query}”.`,\n reindexHint: (\n <>\n Older conversations may need indexing — try <span className=\"font-medium\">Re-index</span>.\n </>\n ),\n backToList: 'Back to list',\n}\n\nexport interface ConversationSearchViewProps {\n query: string\n onQueryChange: (query: string) => void\n /** Enter (without Shift) or the submit button. */\n onSubmit: () => void\n canSubmit: boolean\n isSearching: boolean\n /** The query the shown results answer; empty while no search has run. */\n submittedQuery: string\n /** Results of `submittedQuery`. */\n groups: ConversationSearchGroup[]\n onOpenConversation: (conversationId: string, messageId?: string) => void\n /** Back to the idle body. */\n onClear: () => void\n /** Shown beneath the bar until a search is run (e.g. the history list). */\n children?: ReactNode\n /** Wraps the results area (e.g. an error boundary). */\n ResultsBoundary?: ComponentType<{ children: ReactNode }>\n labels?: Partial<ConversationSearchLabels>\n}\n\nfunction RoleChip({ isUser, labels }: { isUser: boolean; labels: ConversationSearchLabels }) {\n const Icon = isUser ? User : Bot\n return (\n <span className=\"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground\">\n <Icon className=\"size-3\" />\n {isUser ? labels.you : labels.assistant}\n </span>\n )\n}\n\nconst Passthrough = ({ children }: { children: ReactNode }) => <>{children}</>\n\n/**\n * Search across past conversations: a search bar, then either the idle body (history list) or\n * the matches grouped by conversation. Opening a group or a hit is the host's navigation.\n */\nexport function ConversationSearchView({\n query,\n onQueryChange,\n onSubmit,\n canSubmit,\n isSearching,\n submittedQuery,\n groups,\n onOpenConversation,\n onClear,\n children,\n ResultsBoundary = Passthrough,\n labels,\n}: ConversationSearchViewProps) {\n const l = useMemo(() => ({ ...DEFAULT_CONVERSATION_SEARCH_LABELS, ...labels }), [labels])\n const hasResults = !!submittedQuery && !isSearching && groups.length > 0\n\n return (\n <div\n data-slot=\"conversation-search\"\n className=\"flex h-full flex-col\"\n data-testid=\"conversation-search-page\"\n >\n <div className=\"flex items-start gap-3 px-6 py-4\">\n <form\n onSubmit={(e) => {\n e.preventDefault()\n onSubmit()\n }}\n className=\"flex-1\"\n >\n <div className=\"flex items-start gap-2 rounded-md border border-input bg-muted px-3 py-1.5 focus-within:ring-2 focus-within:ring-ring\">\n <textarea\n rows={1}\n value={query}\n onChange={(e) => {\n onQueryChange(e.target.value)\n e.target.style.height = 'auto'\n e.target.style.height = `${e.target.scrollHeight}px`\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n onSubmit()\n }\n }}\n placeholder={l.placeholder}\n aria-label={l.search}\n className=\"flex-1 resize-none overflow-hidden border-0 bg-transparent p-0 text-base leading-relaxed text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid=\"conversation-search-input\"\n />\n <div className=\"flex flex-shrink-0 items-center gap-1\">\n <Button\n type=\"submit\"\n size=\"icon\"\n disabled={!canSubmit}\n className=\"size-7 pointer-coarse:size-11\"\n data-testid=\"conversation-search-submit-button\"\n title={l.search}\n aria-label={l.search}\n >\n {isSearching ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Search className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n </form>\n </div>\n\n {!submittedQuery ? (\n <div className=\"flex-1 overflow-hidden\">{children}</div>\n ) : (\n <ResultsBoundary>\n <main className=\"flex-1 overflow-auto px-6 pb-6\">\n {isSearching ? (\n <div className=\"flex items-center justify-center gap-2 py-16 text-muted-foreground\">\n <Loader2 className=\"size-5 animate-spin\" />\n {l.searching}\n </div>\n ) : hasResults ? (\n <div className=\"space-y-4\" data-testid=\"conversation-search-results\">\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"text-sm text-muted-foreground\">\n {l.matched(groups.length, submittedQuery)}\n </p>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 gap-1 text-muted-foreground pointer-coarse:h-11\"\n onClick={onClear}\n data-testid=\"conversation-search-clear\"\n >\n <X className=\"size-3.5\" />\n {l.clear}\n </Button>\n </div>\n {groups.map((group) => (\n <div\n key={group.id}\n className=\"rounded-lg border border-border bg-card\"\n data-testid=\"conversation-search-group\"\n >\n <button\n type=\"button\"\n onClick={() => onOpenConversation(group.id)}\n className=\"flex w-full items-center justify-between gap-3 rounded-t-lg px-4 py-2.5 text-left transition-colors hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring pointer-coarse:min-h-11\"\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n <MessageSquare className=\"size-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"truncate font-medium\">{group.title || l.untitled}</span>\n </span>\n <span className=\"flex-shrink-0 text-xs text-muted-foreground\">\n {l.matchCount(group.matches.length)}\n </span>\n </button>\n <div className=\"space-y-2 border-t border-border p-3\">\n {group.matches.map((m) => (\n <PassageCard\n key={m.id}\n header={<RoleChip isUser={m.role === 'user'} labels={l} />}\n score={m.score}\n onClick={() => onOpenConversation(group.id, m.id)}\n data-testid=\"conversation-search-hit\"\n >\n <p className=\"line-clamp-3 text-sm text-foreground/90\">{m.snippet}</p>\n </PassageCard>\n ))}\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div\n className=\"py-16 text-center text-muted-foreground\"\n data-testid=\"conversation-search-no-results\"\n >\n <MessageSquare className=\"mx-auto mb-3 size-8 opacity-40\" />\n <p>{l.noResults(submittedQuery)}</p>\n <p className=\"mt-1 text-sm\">{l.reindexHint}</p>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"mt-3 gap-1 text-muted-foreground pointer-coarse:h-11\"\n onClick={onClear}\n >\n <X className=\"size-3.5\" />\n {l.backToList}\n </Button>\n </div>\n )}\n </main>\n </ResultsBoundary>\n )}\n </div>\n )\n}\n"]}
@@ -9,7 +9,7 @@ import { useOpenWorkflow } from './chunk-IXJDD2BO.js';
9
9
  import { SignDocumentDialog } from './chunk-2YOVK524.js';
10
10
  import { ThreadFollowMenuItem } from './chunk-66NMPTOH.js';
11
11
  import { PageHeader } from './chunk-XCVLUXFP.js';
12
- import { useWorkflowUsage, WEB_WORKFLOWS, DASHBOARD_PINNED, CUSTOM_TASK, REMIND_TASK, DASHBOARD_OPERATIONS, sortByRecentUse, taskComposerToCreateRequest, taskComposerToUpdateRequest, composerToWorkflowUpdate, moveTargets, workflowToComposerValues, REMIND_TASK_ID, CUSTOM_TASK_ID, taskToComposerValues, TaskComposer, renderWorkflowIcon, TaskPlan, TaskRunsDialog, TaskActivityDialog, WorkflowThreadStartedBy, matchRequiredLabels, requiredLabelsOf, withLabelIds, WorkflowStepBar, WorkflowThreadStrip, WorkflowStepAction, WorkflowRunner, useWorkflowView } from './chunk-4Q7ON335.js';
12
+ import { useWorkflowUsage, WEB_WORKFLOWS, DASHBOARD_PINNED, CUSTOM_TASK, REMIND_TASK, DASHBOARD_OPERATIONS, sortByRecentUse, taskComposerToCreateRequest, taskComposerToUpdateRequest, composerToWorkflowUpdate, moveTargets, workflowToComposerValues, REMIND_TASK_ID, CUSTOM_TASK_ID, taskToComposerValues, TaskComposer, renderWorkflowIcon, TaskPlan, TaskRunsDialog, TaskActivityDialog, WorkflowThreadStartedBy, matchRequiredLabels, requiredLabelsOf, withLabelIds, WorkflowStepBar, WorkflowThreadStrip, WorkflowStepAction, WorkflowRunner, useWorkflowView } from './chunk-TCCJ5I6G.js';
13
13
  import { AUTOMATION_EVENTS, fromPlanSteps, TaskFlow, toPlanSteps } from './chunk-2VH2PT3J.js';
14
14
  import { PersonPill } from './chunk-CEKOZAGO.js';
15
15
  import { listTimeZones, detectTimeZone } from './chunk-OJIX5NBN.js';
@@ -2452,5 +2452,5 @@ function useWorkflowsPageState({
2452
2452
  }
2453
2453
 
2454
2454
  export { ConnectedTaskActivityDialog, ConnectedTaskComposer, ConnectedThreadTaskBar, ConnectedWorkflowHistory, ConnectedWorkflowRunner, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_PAGE_LABELS, WorkflowRunThread, WorkflowRunWorkspaceChangedError, buildProjectSummaries, primaryProjectWorkspace, useEnsureRequiredLabels, useProjectSummaries, useProjectSummary, useRenderTaskPerson, useRequiredLabels, useSkillsEnabled, useTaskPeople, useWorkflowDefinitions, useWorkflowTasks, useWorkflowsPageState, workflowRunView };
2455
- //# sourceMappingURL=chunk-5EGTGHBW.js.map
2456
- //# sourceMappingURL=chunk-5EGTGHBW.js.map
2455
+ //# sourceMappingURL=chunk-PMWZTVIY.js.map
2456
+ //# sourceMappingURL=chunk-PMWZTVIY.js.map