@arbidocs/blocks 0.5.32 → 0.5.34

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 (86) hide show
  1. package/README.md +2 -0
  2. package/dist/{ConnectedNativeDocxComparison-X6NTNHHM.cjs → ConnectedNativeDocxComparison-4R5WW7IU.cjs} +9 -9
  3. package/dist/{ConnectedNativeDocxComparison-X6NTNHHM.cjs.map → ConnectedNativeDocxComparison-4R5WW7IU.cjs.map} +1 -1
  4. package/dist/{ConnectedNativeDocxComparison-4RHC6KCE.js → ConnectedNativeDocxComparison-AH6KR4CZ.js} +8 -8
  5. package/dist/{ConnectedNativeDocxComparison-4RHC6KCE.js.map → ConnectedNativeDocxComparison-AH6KR4CZ.js.map} +1 -1
  6. package/dist/{ConnectedNativeDocxEditor-S5AT2UAH.js → ConnectedNativeDocxEditor-ETEJM7GN.js} +7 -7
  7. package/dist/{ConnectedNativeDocxEditor-S5AT2UAH.js.map → ConnectedNativeDocxEditor-ETEJM7GN.js.map} +1 -1
  8. package/dist/{ConnectedNativeDocxEditor-U75VOJBC.cjs → ConnectedNativeDocxEditor-MJVE2I33.cjs} +9 -9
  9. package/dist/{ConnectedNativeDocxEditor-U75VOJBC.cjs.map → ConnectedNativeDocxEditor-MJVE2I33.cjs.map} +1 -1
  10. package/dist/{ConnectedStreamedWordArtifact-7XU5RSX2.js → ConnectedStreamedWordArtifact-JJI3HR7U.js} +8 -8
  11. package/dist/{ConnectedStreamedWordArtifact-7XU5RSX2.js.map → ConnectedStreamedWordArtifact-JJI3HR7U.js.map} +1 -1
  12. package/dist/{ConnectedStreamedWordArtifact-QAZ5VQZS.cjs → ConnectedStreamedWordArtifact-S7EQ4FM2.cjs} +9 -9
  13. package/dist/ConnectedStreamedWordArtifact-S7EQ4FM2.cjs.map +1 -0
  14. package/dist/agents/index.cjs +326 -326
  15. package/dist/agents/index.js +4 -4
  16. package/dist/calls/index.cjs +33 -33
  17. package/dist/calls/index.js +5 -5
  18. package/dist/{chunk-2MCHQGVY.js → chunk-24H5WTGM.js} +4 -4
  19. package/dist/{chunk-2MCHQGVY.js.map → chunk-24H5WTGM.js.map} +1 -1
  20. package/dist/{chunk-D57MPMTZ.js → chunk-2YCCCXYV.js} +12 -3
  21. package/dist/chunk-2YCCCXYV.js.map +1 -0
  22. package/dist/{chunk-BNOP4REH.js → chunk-5JEM3BWT.js} +3 -3
  23. package/dist/{chunk-BNOP4REH.js.map → chunk-5JEM3BWT.js.map} +1 -1
  24. package/dist/{chunk-XBY36SIJ.js → chunk-AL4GAWD3.js} +3 -3
  25. package/dist/{chunk-XBY36SIJ.js.map → chunk-AL4GAWD3.js.map} +1 -1
  26. package/dist/{chunk-PUX4M22Q.cjs → chunk-B426HYRI.cjs} +49 -49
  27. package/dist/{chunk-PUX4M22Q.cjs.map → chunk-B426HYRI.cjs.map} +1 -1
  28. package/dist/{chunk-ZIURNTTS.cjs → chunk-BIWPXSGS.cjs} +7 -7
  29. package/dist/{chunk-ZIURNTTS.cjs.map → chunk-BIWPXSGS.cjs.map} +1 -1
  30. package/dist/{chunk-EPQ3364Q.cjs → chunk-C3YIVBTU.cjs} +6 -6
  31. package/dist/{chunk-EPQ3364Q.cjs.map → chunk-C3YIVBTU.cjs.map} +1 -1
  32. package/dist/{chunk-JBR3QNHC.cjs → chunk-EFSL4O3B.cjs} +4 -4
  33. package/dist/{chunk-JBR3QNHC.cjs.map → chunk-EFSL4O3B.cjs.map} +1 -1
  34. package/dist/{chunk-FHB4G77H.js → chunk-G5ISXB5I.js} +3 -3
  35. package/dist/{chunk-FHB4G77H.js.map → chunk-G5ISXB5I.js.map} +1 -1
  36. package/dist/{chunk-6EQSP77K.cjs → chunk-J6U6DIZK.cjs} +5 -5
  37. package/dist/{chunk-6EQSP77K.cjs.map → chunk-J6U6DIZK.cjs.map} +1 -1
  38. package/dist/{chunk-SBTRXXJF.cjs → chunk-JVXHVFUA.cjs} +11 -2
  39. package/dist/chunk-JVXHVFUA.cjs.map +1 -0
  40. package/dist/{chunk-2RFXSBPD.cjs → chunk-KBISVJPU.cjs} +4 -4
  41. package/dist/{chunk-2RFXSBPD.cjs.map → chunk-KBISVJPU.cjs.map} +1 -1
  42. package/dist/{chunk-B5G3AZ3O.js → chunk-N3HVTMQK.js} +3 -3
  43. package/dist/{chunk-B5G3AZ3O.js.map → chunk-N3HVTMQK.js.map} +1 -1
  44. package/dist/{chunk-3ES6VWRB.cjs → chunk-NOKTUWTN.cjs} +7 -7
  45. package/dist/{chunk-3ES6VWRB.cjs.map → chunk-NOKTUWTN.cjs.map} +1 -1
  46. package/dist/{chunk-EZSYYENN.js → chunk-O76V2TUY.js} +5 -5
  47. package/dist/{chunk-EZSYYENN.js.map → chunk-O76V2TUY.js.map} +1 -1
  48. package/dist/{chunk-7CHI36EP.js → chunk-OPK6GYYR.js} +3 -3
  49. package/dist/{chunk-7CHI36EP.js.map → chunk-OPK6GYYR.js.map} +1 -1
  50. package/dist/{chunk-FY4C7HU5.cjs → chunk-POU4O4D7.cjs} +9 -9
  51. package/dist/{chunk-FY4C7HU5.cjs.map → chunk-POU4O4D7.cjs.map} +1 -1
  52. package/dist/{chunk-ULA6YWWD.cjs → chunk-QU77RRZP.cjs} +21 -21
  53. package/dist/{chunk-ULA6YWWD.cjs.map → chunk-QU77RRZP.cjs.map} +1 -1
  54. package/dist/{chunk-L22MGRKB.cjs → chunk-R3QNE46Z.cjs} +4 -4
  55. package/dist/{chunk-L22MGRKB.cjs.map → chunk-R3QNE46Z.cjs.map} +1 -1
  56. package/dist/{chunk-EOLQ5YBP.js → chunk-RFQ2FGL4.js} +3 -3
  57. package/dist/{chunk-EOLQ5YBP.js.map → chunk-RFQ2FGL4.js.map} +1 -1
  58. package/dist/{chunk-2QDNQM63.cjs → chunk-SSYRPBL5.cjs} +3 -3
  59. package/dist/{chunk-2QDNQM63.cjs.map → chunk-SSYRPBL5.cjs.map} +1 -1
  60. package/dist/{chunk-NQWP5PWA.js → chunk-SXYXFCHN.js} +5 -5
  61. package/dist/{chunk-NQWP5PWA.js.map → chunk-SXYXFCHN.js.map} +1 -1
  62. package/dist/{chunk-4DKI37QQ.js → chunk-UWXCT3ON.js} +3 -3
  63. package/dist/{chunk-4DKI37QQ.js.map → chunk-UWXCT3ON.js.map} +1 -1
  64. package/dist/{chunk-DY2Z3DP7.js → chunk-VPWCARVO.js} +3 -3
  65. package/dist/{chunk-DY2Z3DP7.js.map → chunk-VPWCARVO.js.map} +1 -1
  66. package/dist/connect/docx.cjs +11 -11
  67. package/dist/connect/docx.js +7 -7
  68. package/dist/connect/index.cjs +368 -353
  69. package/dist/connect/index.cjs.map +1 -1
  70. package/dist/connect/index.js +31 -17
  71. package/dist/connect/index.js.map +1 -1
  72. package/dist/connect/viewer.cjs +25 -25
  73. package/dist/connect/viewer.js +8 -8
  74. package/dist/connection/files/ConnectedGridView.d.ts +2 -0
  75. package/dist/connection/files/index.d.ts +1 -0
  76. package/dist/index.cjs +395 -395
  77. package/dist/index.js +6 -6
  78. package/dist/studio/index.cjs +4 -4
  79. package/dist/studio/index.js +2 -2
  80. package/dist/workflow-canvas/index.cjs +23 -23
  81. package/dist/workflow-canvas/index.js +6 -6
  82. package/node_modules/@arbidocs/coedit/package.json +1 -1
  83. package/package.json +5 -5
  84. package/dist/ConnectedStreamedWordArtifact-QAZ5VQZS.cjs.map +0 -1
  85. package/dist/chunk-D57MPMTZ.js.map +0 -1
  86. package/dist/chunk-SBTRXXJF.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/agents/workflows/useWorkflowPreview.ts","../src/agents/definitions/AgentCard.tsx","../src/agents/definitions/AgentGallery.tsx","../src/agents/skills/SkillCard.tsx","../src/agents/skills/SkillRow.tsx","../src/agents/tasks/elapsed.ts","../src/agents/tasks/UploadTaskItem.tsx","../src/agents/tasks/UploadTaskList.tsx","../src/agents/tasks/TaskOutputsCell.tsx","../src/agents/tasks/TaskMoveDialog.tsx","../src/agents/tasks/TaskRowMenu.tsx","../src/agents/tasks/TaskStatusPill.tsx","../src/agents/tasks/taskColumns.tsx","../src/agents/tasks/gridWidth.ts","../src/agents/tasks/taskTableLabels.ts","../src/agents/tasks/TaskTable.tsx","../src/agents/tasks/TaskInbox.tsx","../src/agents/tasks/ConversationListView.tsx","../src/agents/tasks/TaskThreadChip.tsx","../src/agents/tasks/TasksChrome.tsx","../src/agents/tasks/ThreadNotifyDialog.tsx","../src/agents/tasks/ConversationTurnSpeaker.tsx"],"names":["workflowSteps","useState","initialRunInputs","useRef","useEffect","stepPhase","composeStepPrompt","useWorkflowView","formatCount","goalProgress","jsxs","cn","testIdOr","jsx","ActionLink","Button","MessageSquare","Eye","ClipboardList","Pencil","Copy","Trash2","EmptyState","Bot","Sparkles","Plus","activateOnKey","SkillTypeBadge","SkillGlobalBadge","SkillActionButton","Download","Lock","Globe","minutes","Check","X","Loader2","SkipForward","FileX","AlertTriangle","StatusIcon","DropdownMenu","DropdownMenuTrigger","FileText","DropdownMenuContent","DropdownMenuItem","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Input","CornerDownRight","MoreHorizontal","KeyRound","RotateCcw","CheckCheck","History","ListPlus","Fragment","DropdownMenuSeparator","CircleDashed","asTaskStatus","STATUS_LABELS","STATUS_TONE","ToneBadge","AlertCircle","useMemo","indexTasks","ownerExtId","PersonPill","STATUS_ORDER","buildTaskRows","isPlainTodo","descendantIds","ChevronDown","ChevronRight","Workflow","VisibilityToggle","ChevronsUpDown","ChevronsDownUp","ListTodo","GridView","SelectionBar","SelectionBarAction","moveTargets","TabHeader","FilterInput","TriStateFilterMenu","useIsPhone","EntityChip","ThreadVisibilityIcon","CellHoverIcon","ThreadStatusLine","Checkbox","ARBI_MARK_SRC","UserEntity"],"mappings":"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","file":"chunk-PUX4M22Q.cjs","sourcesContent":["/**\n * A stepped workflow run on screen only (the builder's preview): agent steps run one at a time,\n * the way the server does, and answer with the prompt they would send; action steps just finish.\n * No thread, no agent.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport {\n composeStepPrompt,\n initialRunInputs,\n stepPhase,\n workflowSteps,\n type StepComposeOptions,\n} from './run'\nimport type { WorkflowDefinition, WorkflowInputs, WorkflowStepState } from './types'\nimport { useWorkflowView, type WorkflowRunView } from './useWorkflowView'\n\nexport interface UseWorkflowPreviewOptions extends StepComposeOptions {\n /** What a stand-in agent step answers; `{prompt}` is replaced with the prompt it would send. */\n answer?: string\n /** How long a stand-in step takes. */\n delayMs?: number\n}\n\nexport function useWorkflowPreview(\n workflow: WorkflowDefinition,\n { answer = '{prompt}', delayMs = 400, resolveWorkflow, compose }: UseWorkflowPreviewOptions = {}\n): WorkflowRunView {\n const steps = workflowSteps(workflow)\n const [inputs, setInputs] = useState<WorkflowInputs>(() => initialRunInputs(workflow))\n const [states, setStates] = useState<Record<string, WorkflowStepState>>({})\n const set = (id: string, state: WorkflowStepState) => setStates((s) => ({ ...s, [id]: state }))\n\n // A stand-in step's timer outlives the re-render its start causes; it is cleared on unmount, and\n // a step it cut short starts again (StrictMode mounts twice).\n const timers = useRef(new Map<string, ReturnType<typeof setTimeout>>())\n useEffect(() => {\n const pending = timers.current\n return () => {\n for (const t of pending.values()) clearTimeout(t)\n pending.clear()\n setStates((s) =>\n Object.fromEntries(\n Object.entries(s).map(([id, v]) => [\n id,\n v.status === 'running' ? { status: 'pending' } : v,\n ])\n )\n )\n }\n }, [])\n\n // One turn at a time: start the first ready agent step when nothing is running.\n useEffect(() => {\n if (Object.values(states).some((s) => s.status === 'running')) return\n // An action step (a signature, an email, a review) stands in the same way, with no answer.\n const next = steps.find(\n (s) =>\n (s.kind === 'agent' || s.kind === 'action') && stepPhase(steps, states, s.id) === 'ready'\n )\n if (!next || (next.kind !== 'agent' && next.kind !== 'action')) return\n const prompt =\n next.kind === 'agent'\n ? composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose })\n : ''\n set(next.id, { status: 'running', startedAt: new Date().toISOString() })\n timers.current.set(\n next.id,\n setTimeout(() => {\n timers.current.delete(next.id)\n set(\n next.id,\n next.kind === 'agent'\n ? { status: 'done', text: answer.replace('{prompt}', prompt) }\n : { status: 'done' }\n )\n }, delayMs)\n )\n // `inputs` are read when a step starts, not watched.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [states, steps, workflow])\n\n return useWorkflowView({\n steps,\n states,\n inputs,\n setInput: (name, value) => setInputs((i) => ({ ...i, [name]: value })),\n complete: async (step) => set(step.id, { status: 'done' }),\n skip: async (id) => set(id, { status: 'skipped' }),\n retry: async (id) => set(id, { status: 'pending' }),\n isLocked: (id) => states[id]?.status === 'done',\n })\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { ClipboardList, Copy, Eye, MessageSquare, Pencil, Trash2 } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatCount } from '../../lib/format'\n\nexport interface AgentCardLabels {\n running: string\n /** Pulse indicator aria-label. */\n runningIndicator: string\n /** Chip text; receives the running count. */\n runningCount: (count: number) => string\n /** Chip text; receives the task count (0 -> none yet). */\n taskCount: (count: number) => string\n goalMet: (met: number, total: number) => string\n watch: string\n message: string\n assignTask: string\n edit: string\n copyAddress: string\n deleteAgent: (name: string) => string\n}\n\nexport const DEFAULT_AGENT_CARD_LABELS: AgentCardLabels = {\n running: 'Running',\n runningIndicator: 'Running',\n runningCount: (count) => `${count} running`,\n taskCount: (count) =>\n count > 0 ? formatCount(count, { one: 'task', other: 'tasks' }) : 'no tasks yet',\n goalMet: (met, total) => `✓ ${met}/${total} met`,\n watch: 'Watch',\n message: 'Message',\n assignTask: 'Assign task',\n edit: 'Edit',\n copyAddress: 'Copy address',\n deleteAgent: (name) => `Delete agent ${name}`,\n}\n\nexport interface AgentCardTestIds {\n root: string\n watch: string\n message: string\n assignTask: string\n edit: string\n copyAddress: string\n delete: string\n}\n\nexport interface AgentCardProps {\n /** Display name; also the key in the test ids (`agent-card-{name}`, `agent-edit-{name}`...). */\n name: string\n /** The agent's avatar (the app supplies its entity avatar). */\n avatar: ReactNode\n /** Tasks currently running for this agent; shows a pulse + chip when > 0. */\n runningCount: number\n /** All tasks assigned to this agent. */\n taskCount: number\n /** Extra content under the chips (the app shows what the agent can access). */\n details?: ReactNode\n /** Criteria progress of the agent's most recent goal task. */\n goalProgress?: { met: number; total: number } | null\n /** When set, a Watch action opens the live run. */\n onWatch?: () => void\n /** Each action is optional: the button is omitted when its handler is absent. */\n onMessage?: () => void\n onAssignTask?: () => void\n onEdit?: () => void\n /** When set, a ghost \"Copy address\" action copies the agent's address (it is not shown raw). */\n onCopyAddress?: () => void\n onDelete?: () => void\n /**\n * Destination of the agent; the name becomes a real link. `onSelect` fires on a plain click\n * (modified clicks go to the browser).\n */\n href?: string\n onSelect?: () => void\n labels?: Partial<AgentCardLabels>\n /** Overrides for the default `agent-card-{name}` / `agent-watch-run-{name}` ... ids. */\n testIds?: Partial<AgentCardTestIds>\n testId?: string\n className?: string\n}\n\nconst ACTION = 'h-9 gap-1.5 px-2 text-sm pointer-coarse:h-11'\n\n/** One agent in the gallery: avatar, live task chips, and Watch / Assign task / Edit / Delete. */\nexport function AgentCard({\n name,\n avatar,\n runningCount,\n taskCount,\n goalProgress,\n details,\n onWatch,\n onMessage,\n onAssignTask,\n onEdit,\n onCopyAddress,\n onDelete,\n href,\n onSelect,\n labels,\n testIds,\n testId,\n className,\n ...rest\n}: AgentCardProps & Omit<HTMLAttributes<HTMLDivElement>, keyof AgentCardProps>) {\n const l = { ...DEFAULT_AGENT_CARD_LABELS, ...labels }\n return (\n <div\n {...rest}\n className={cn('rounded-lg bg-muted p-4', className)}\n data-testid={testIdOr(testId ?? testIds?.root, { testId: `agent-card-${name}` })}\n data-slot=\"agent-card\"\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"relative shrink-0\">\n {avatar}\n {runningCount > 0 && (\n <span\n className=\"absolute -right-0.5 -top-0.5 size-2.5 rounded-full bg-ai-ink\"\n role=\"img\"\n aria-label={l.runningIndicator}\n >\n <span className=\"absolute inset-0 animate-ping rounded-full bg-ai-ink opacity-60\" />\n </span>\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n {href ? (\n <ActionLink\n href={href}\n onSelect={onSelect}\n className=\"block max-w-full truncate text-left font-medium hover:underline\"\n >\n {name}\n </ActionLink>\n ) : (\n <p className=\"truncate font-medium\">{name}</p>\n )}\n <div className=\"mt-1.5 flex flex-wrap gap-1 text-xs text-muted-foreground\">\n {runningCount > 0 ? (\n <span className=\"rounded-full bg-ai-soft px-2 py-px text-ai-ink\">\n {l.runningCount(runningCount)}\n </span>\n ) : (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.taskCount(taskCount)}\n </span>\n )}\n {goalProgress && (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.goalMet(goalProgress.met, goalProgress.total)}\n </span>\n )}\n </div>\n {details}\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-center gap-1 pt-1\">\n {onMessage && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onMessage}\n data-testid={testIdOr(testIds?.message, { testId: `agent-message-${name}` })}\n >\n <MessageSquare size={14} /> {l.message}\n </Button>\n )}\n {onWatch && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-ai-ink hover:text-ai-ink')}\n onClick={onWatch}\n data-testid={testIdOr(testIds?.watch, { testId: `agent-watch-run-${name}` })}\n >\n <Eye size={14} /> {l.watch}\n </Button>\n )}\n {onAssignTask && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onAssignTask}\n data-testid={testIdOr(testIds?.assignTask, { testId: `agent-assign-task-${name}` })}\n >\n <ClipboardList size={14} /> {l.assignTask}\n </Button>\n )}\n {onEdit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onEdit}\n data-testid={testIdOr(testIds?.edit, { testId: `agent-edit-${name}` })}\n >\n <Pencil size={14} /> {l.edit}\n </Button>\n )}\n {onCopyAddress && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-muted-foreground')}\n onClick={onCopyAddress}\n data-testid={testIdOr(testIds?.copyAddress, { testId: `agent-copy-address-${name}` })}\n >\n <Copy size={14} /> {l.copyAddress}\n </Button>\n )}\n {onDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'ml-auto text-muted-foreground hover:text-red-text')}\n onClick={onDelete}\n aria-label={l.deleteAgent(name)}\n data-testid={testIdOr(testIds?.delete, { testId: `agent-delete-${name}` })}\n >\n <Trash2 size={14} />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Plus, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { EmptyState } from '../../components/EmptyState'\n\nexport interface AgentGalleryLabels {\n /** Intro line next to the New agent button. */\n description: string\n emptyTitle: string\n emptyDescription: string\n emptyCta: string\n newAgent: string\n}\n\nexport const DEFAULT_AGENT_GALLERY_LABELS: AgentGalleryLabels = {\n description: 'Personas that work for you, on demand.',\n emptyTitle: 'Create your first agent',\n emptyDescription:\n 'Describe a persona, pick its tools, generate an avatar, then hand it work from an agent card and watch it converge.',\n emptyCta: 'Create an agent',\n newAgent: 'New agent',\n}\n\nexport interface AgentGalleryTestIds {\n emptyCta: string\n createButton: string\n gallery: string\n}\n\nexport interface AgentGalleryProps {\n /** Number of agents; 0 shows the first-run empty state instead of the grid. */\n count: number\n onCreate: () => void\n /** The AgentCard children. */\n children?: ReactNode\n /** Intro line next to the New agent button (wins over `labels.description`). */\n description?: string\n labels?: Partial<AgentGalleryLabels>\n testIds?: Partial<AgentGalleryTestIds>\n className?: string\n}\n\n/** Agents grid with an intro row + New agent action, or a first-run empty state. */\nexport function AgentGallery({\n count,\n onCreate,\n children,\n description,\n labels,\n testIds,\n className,\n}: AgentGalleryProps) {\n const l = { ...DEFAULT_AGENT_GALLERY_LABELS, ...labels }\n if (count === 0) {\n return (\n <div className={cn('mt-8', className)}>\n <EmptyState\n className=\"rounded-lg border-0 bg-muted\"\n icon={Bot}\n title={l.emptyTitle}\n description={l.emptyDescription}\n action={\n <Button\n onClick={onCreate}\n className=\"gap-1.5\"\n data-testid={testIdOr(testIds?.emptyCta, { testId: 'agent-empty-cta' })}\n >\n <Sparkles size={16} /> {l.emptyCta}\n </Button>\n }\n />\n </div>\n )\n }\n return (\n <div className={className}>\n <div className=\"mb-4 flex flex-wrap items-center justify-between gap-x-3 gap-y-2\">\n <p className=\"min-w-0 text-sm text-muted-foreground\">{description ?? l.description}</p>\n <Button\n size=\"sm\"\n onClick={onCreate}\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n data-testid={testIdOr(testIds?.createButton, { testId: 'agent-create-button' })}\n >\n <Plus size={16} /> {l.newAgent}\n </Button>\n </div>\n <div\n className=\"grid grid-cols-[repeat(auto-fill,minmax(16rem,1fr))] gap-4\"\n data-testid={testIdOr(testIds?.gallery, { testId: 'agent-gallery' })}\n data-slot=\"agent-gallery\"\n >\n {children}\n </div>\n </div>\n )\n}\n","import type { HTMLAttributes, MouseEvent, ReactNode } from 'react'\nimport { Download, Eye, Globe, Lock, Pencil } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n SkillActionButton,\n SkillGlobalBadge,\n SkillTypeBadge,\n activateOnKey,\n type SkillGlobalBadgeLabels,\n} from './SkillParts'\n\nexport interface SkillCardLabels extends SkillGlobalBadgeLabels {\n preview: string\n edit: string\n export: string\n makePrivate: string\n makePrivateTooltip: string\n publish: string\n}\n\nexport const DEFAULT_SKILL_CARD_LABELS: SkillCardLabels = {\n global: 'Global',\n globalTitle: 'Shared with everyone in the marketplace',\n preview: 'Preview skill',\n edit: 'Edit skill',\n export: 'Export skill',\n makePrivate: 'Make private',\n makePrivateTooltip: 'Make private (unpublish)',\n publish: 'Publish to marketplace',\n}\n\nexport interface SkillCardTestIds {\n root: string\n preview: string\n edit: string\n export: string\n toggleVisibility: string\n}\n\nexport interface SkillCardProps {\n name: string\n description: string\n /** Skill type; a small badge is shown when not `markdown`. */\n type?: string\n /** `global` shows a badge and drives the publish toggle. */\n visibility?: 'mine' | 'global'\n /** Only owners see the publish toggle. */\n isOwner?: boolean\n /** Leading icon (the app supplies its skill entity icon). */\n icon?: ReactNode\n /** Invoke the skill (row click / Enter / Space). */\n onClick: () => void\n onPreview: (e: MouseEvent) => void\n onEdit: (e: MouseEvent) => void\n onExport: (e: MouseEvent) => void\n /** Publish / unpublish. Owner-only; omit to hide. */\n onToggleVisibility?: (e: MouseEvent) => void\n /** Destination of the skill; the name becomes a real link (modified clicks go to the browser). */\n href?: string\n labels?: Partial<SkillCardLabels>\n testId?: string\n testIds?: Partial<SkillCardTestIds>\n className?: string\n}\n\n/**\n * Horizontal skill row: icon + `/name` + badges + description, with preview / edit / export /\n * publish actions. All actions are always visible (nothing is hover-only).\n */\nexport function SkillCard({\n name,\n description,\n type,\n visibility = 'mine',\n isOwner = true,\n icon,\n onClick,\n onPreview,\n onEdit,\n onExport,\n onToggleVisibility,\n href,\n labels,\n testId,\n testIds,\n className,\n ...rest\n}: SkillCardProps & Omit<HTMLAttributes<HTMLDivElement>, keyof SkillCardProps | 'onClick'>) {\n const l = { ...DEFAULT_SKILL_CARD_LABELS, ...labels }\n const isGlobal = visibility === 'global'\n return (\n <div\n {...rest}\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'flex w-full cursor-pointer flex-wrap items-center gap-x-3 gap-y-1 rounded-lg bg-muted px-4 py-3 transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className\n )}\n onClick={onClick}\n onKeyDown={activateOnKey(onClick)}\n data-skill-name={name}\n data-testid={testIdOr(testId ?? testIds?.root, { testId: 'skill-card' })}\n data-slot=\"skill-card\"\n >\n {icon && <span className=\"shrink-0 text-primary [&>svg]:size-5\">{icon}</span>}\n {href ? (\n // The link owns plain + modified clicks; stop the row handler from double-firing.\n <span onClick={(e) => e.stopPropagation()}>\n <ActionLink\n href={href}\n onSelect={onClick}\n className=\"whitespace-nowrap font-mono text-sm font-medium\"\n >\n /{name}\n </ActionLink>\n </span>\n ) : (\n <span className=\"whitespace-nowrap font-mono text-sm font-medium\">/{name}</span>\n )}\n {type && type !== 'markdown' && <SkillTypeBadge type={type} />}\n {isGlobal && <SkillGlobalBadge labels={l} />}\n <span className=\"min-w-0 text-sm text-muted-foreground max-sm:order-last max-sm:w-full max-sm:line-clamp-2 sm:flex-1 sm:truncate\">\n {description}\n </span>\n <span className=\"ml-auto flex shrink-0 items-center gap-1\" data-slot=\"skill-card-actions\">\n <SkillActionButton\n label={l.preview}\n onClick={onPreview}\n testId={testIdOr(testIds?.preview, { testId: 'preview-skill-button' })}\n >\n <Eye className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n <SkillActionButton\n label={l.edit}\n onClick={onEdit}\n testId={testIdOr(testIds?.edit, { testId: 'edit-skill-button' })}\n >\n <Pencil className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n <SkillActionButton\n label={l.export}\n onClick={onExport}\n testId={testIdOr(testIds?.export, { testId: 'export-skill-button' })}\n >\n <Download className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n {isOwner && onToggleVisibility && (\n <SkillActionButton\n label={isGlobal ? l.makePrivate : l.publish}\n tooltip={isGlobal ? l.makePrivateTooltip : l.publish}\n onClick={onToggleVisibility}\n testId={testIdOr(testIds?.toggleVisibility, {\n testId: 'toggle-skill-visibility-button',\n })}\n >\n {isGlobal ? (\n <Lock className=\"size-4 text-muted-foreground\" />\n ) : (\n <Globe className=\"size-4 text-primary\" />\n )}\n </SkillActionButton>\n )}\n </span>\n </div>\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { Eye, Globe, Lock, Pencil, Trash2 } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n SkillActionButton,\n SkillGlobalBadge,\n SkillTypeBadge,\n activateOnKey,\n type SkillGlobalBadgeLabels,\n} from './SkillParts'\n\nexport interface SkillRowLabels extends SkillGlobalBadgeLabels {\n preview: string\n edit: string\n makePrivate: string\n publish: string\n delete: string\n /** Row tooltip; receives the skill name. */\n insertTitle: (name: string) => string\n}\n\nexport const DEFAULT_SKILL_ROW_LABELS: SkillRowLabels = {\n global: 'Global',\n globalTitle: 'Shared with everyone in the marketplace',\n preview: 'Preview',\n edit: 'Edit',\n makePrivate: 'Make private',\n publish: 'Publish to marketplace',\n delete: 'Delete',\n insertTitle: (name) => `Insert /${name} into the chat`,\n}\n\nexport interface SkillRowProps {\n name: string\n description?: string\n type?: string\n isGlobal?: boolean\n icon?: ReactNode\n /** Invoke the skill (inserts `/name` into the chat). */\n onInvoke: () => void\n onPreview: () => void\n /** Owner-only actions: omit to hide. */\n onEdit?: () => void\n onTogglePublish?: () => void\n onDelete?: () => void\n /** Destination of the skill; the name becomes a real link (modified clicks go to the browser). */\n href?: string\n labels?: Partial<SkillRowLabels>\n /** Overrides the default `skills-panel-row-{name}` id. */\n testId?: string\n className?: string\n}\n\n/** Compact two-line skill row for side panels. Actions are always visible. */\nexport function SkillRow({\n name,\n description,\n type,\n isGlobal = false,\n icon,\n onInvoke,\n onPreview,\n onEdit,\n onTogglePublish,\n onDelete,\n href,\n labels,\n testId,\n className,\n ...rest\n}: SkillRowProps & Omit<HTMLAttributes<HTMLDivElement>, keyof SkillRowProps | 'onClick'>) {\n const l = { ...DEFAULT_SKILL_ROW_LABELS, ...labels }\n return (\n <div\n {...rest}\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'flex cursor-pointer items-center gap-2 px-4 py-2 hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n className\n )}\n onClick={onInvoke}\n onKeyDown={activateOnKey(onInvoke)}\n data-testid={testIdOr(testId, { testId: `skills-panel-row-${name}` })}\n data-slot=\"skill-row\"\n title={l.insertTitle(name)}\n >\n {icon && <span className=\"shrink-0 text-primary [&>svg]:size-4\">{icon}</span>}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-1.5\">\n {href ? (\n // The link owns plain + modified clicks; stop the row handler from double-firing.\n <span className=\"min-w-0\" onClick={(e) => e.stopPropagation()}>\n <ActionLink href={href} onSelect={onInvoke} className=\"truncate font-mono text-sm\">\n /{name}\n </ActionLink>\n </span>\n ) : (\n <span className=\"truncate font-mono text-sm\">/{name}</span>\n )}\n {type && type !== 'markdown' && <SkillTypeBadge type={type} />}\n {isGlobal && <SkillGlobalBadge labels={l} />}\n </div>\n {description && <div className=\"truncate text-xs text-muted-foreground\">{description}</div>}\n </div>\n <div className=\"flex shrink-0 items-center gap-0.5\">\n <SkillActionButton label={l.preview} onClick={() => onPreview()}>\n <Eye className=\"size-4\" />\n </SkillActionButton>\n {onEdit && (\n <SkillActionButton label={l.edit} onClick={() => onEdit()}>\n <Pencil className=\"size-4\" />\n </SkillActionButton>\n )}\n {onTogglePublish && (\n <SkillActionButton\n label={isGlobal ? l.makePrivate : l.publish}\n onClick={() => onTogglePublish()}\n >\n {isGlobal ? <Lock className=\"size-4\" /> : <Globe className=\"size-4 text-primary\" />}\n </SkillActionButton>\n )}\n {onDelete && (\n <SkillActionButton label={l.delete} onClick={() => onDelete()}>\n <Trash2 className=\"size-4 text-destructive\" />\n </SkillActionButton>\n )}\n </div>\n </div>\n )\n}\n","/** Compact elapsed time: 123ms, 5s, 2m 30s, 1h 15m. */\nexport function formatElapsed(startTime: number, endTime?: number): string {\n const elapsedMs = (endTime || Date.now()) - startTime\n if (elapsedMs < 1000) return `${Math.round(elapsedMs)}ms`\n if (elapsedMs < 60000) return `${Math.round(elapsedMs / 1000)}s`\n if (elapsedMs < 3600000) {\n const minutes = Math.floor(elapsedMs / 60000)\n const seconds = Math.round((elapsedMs % 60000) / 1000)\n return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`\n }\n const hours = Math.floor(elapsedMs / 3600000)\n const minutes = Math.round((elapsedMs % 3600000) / 60000)\n return minutes > 0 ? `${hours}h ${minutes}m` : `${hours}h`\n}\n","import { useEffect, useState, type ReactNode } from 'react'\nimport { AlertTriangle, Check, FileX, Loader2, SkipForward, X, type LucideIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\n\nconst ACTIVE_STATUSES = new Set(['parsing', 'encrypting', 'indexing', 'analysing'])\nconst RUNNING_STATUSES = new Set(['queued', ...ACTIVE_STATUSES])\n\ninterface StatusTone {\n text: string\n bar: string\n Icon: LucideIcon\n}\n\nconst TONES: Record<string, StatusTone> = {\n completed: { text: 'text-green-text', bar: 'bg-green-text/90', Icon: Check },\n failed: { text: 'text-red-text', bar: 'bg-red-text/90', Icon: X },\n parsing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n encrypting: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n indexing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n analysing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n queued: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: Loader2 },\n skipped: { text: 'text-gray-text', bar: 'bg-gray-text/90', Icon: SkipForward },\n empty: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: FileX },\n 'low-content': { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: AlertTriangle },\n}\nconst DEFAULT_TONE: StatusTone = { text: 'text-gray-text', bar: 'bg-blue-text/90', Icon: Loader2 }\n\nexport interface UploadTaskItemLabels {\n /** Delete action text (failed rows). */\n delete: string\n /** Delete action tooltip. */\n deleteTitle: string\n /** aria-label of the progress bar. */\n progress: (fileName: string) => string\n /** Status line text; the default capitalises the raw status. */\n status: (status: string, percent: number) => string\n}\n\nexport const DEFAULT_UPLOAD_TASK_ITEM_LABELS: UploadTaskItemLabels = {\n delete: 'Delete',\n deleteTitle: 'Delete file',\n progress: (fileName) => `${fileName} progress`,\n status: (status, percent) => `${status.charAt(0).toUpperCase() + status.slice(1)} - ${percent}%`,\n}\n\n/** Per-row test ids derived from the task id (defaults `task-item-{id}`, ...). */\nexport interface UploadTaskItemTestIds {\n item: (taskId: string) => string\n fileName: (taskId: string) => string\n progressBar: (taskId: string) => string\n status: (taskId: string) => string\n delete: (taskId: string) => string\n}\n\nexport interface UploadTaskItemProps {\n taskId: string\n fileName: string\n /** queued | parsing | encrypting | indexing | analysing | completed | failed | skipped | empty | low-content */\n status: string\n /** 0-1 fraction or 0-100 percentage. */\n progress: number\n startTime?: number\n endTime?: number\n /** File-type icon for the row (the app maps the extension). */\n fileIcon?: ReactNode\n /** Shown as a Delete action on failed tasks. */\n onDelete?: (taskId: string) => void\n testIds?: Partial<UploadTaskItemTestIds>\n labels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\n/** One document-processing row: status icon, file, progress bar, status text + elapsed time. */\nexport function UploadTaskItem({\n taskId,\n fileName,\n status,\n progress,\n startTime,\n endTime,\n fileIcon,\n onDelete,\n testIds,\n labels,\n className,\n}: UploadTaskItemProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_ITEM_LABELS, ...labels }\n const [elapsed, setElapsed] = useState('')\n\n useEffect(() => {\n if (!startTime) {\n setElapsed('')\n return\n }\n if (RUNNING_STATUSES.has(status)) {\n const tick = () => setElapsed(formatElapsed(startTime))\n tick()\n const interval = setInterval(tick, 1000)\n return () => clearInterval(interval)\n }\n setElapsed(formatElapsed(startTime, endTime))\n }, [startTime, endTime, status])\n\n const percent = progress > 1 ? progress : progress * 100\n const tone = TONES[status] ?? DEFAULT_TONE\n const StatusIcon = tone.Icon\n\n return (\n <div\n className={cn(\n 'mb-2 w-full max-w-full overflow-hidden rounded-md bg-muted p-2 box-border',\n className\n )}\n data-testid={testIdOr(testIds?.item?.(taskId), { testId: `task-item-${taskId}` })}\n data-slot=\"upload-task-item\"\n >\n <div className=\"mb-1 flex w-full max-w-full items-center gap-2 overflow-hidden\">\n <div className={cn('shrink-0', tone.text)}>\n <StatusIcon className={cn('size-4', ACTIVE_STATUSES.has(status) && 'animate-spin')} />\n </div>\n {fileIcon && <div className=\"shrink-0\">{fileIcon}</div>}\n <div\n className=\"min-w-0 flex-1 truncate text-sm font-medium\"\n title={fileName}\n data-testid={testIdOr(testIds?.fileName?.(taskId), { testId: `task-filename-${taskId}` })}\n >\n {fileName}\n </div>\n </div>\n\n <div\n className=\"mb-1 h-2 w-full max-w-full overflow-hidden rounded-md bg-background\"\n data-testid={testIdOr(testIds?.progressBar?.(taskId), {\n testId: `task-progress-bar-${taskId}`,\n })}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(percent)}\n aria-label={l.progress(fileName)}\n >\n <div\n className={cn('h-2 rounded-md transition-all duration-300 ease-in-out', tone.bar)}\n style={{ width: `${percent}%` }}\n />\n </div>\n\n <div className=\"flex w-full max-w-full items-center justify-between overflow-hidden text-sm\">\n <span\n className=\"truncate text-gray-text\"\n data-testid={testIdOr(testIds?.status?.(taskId), { testId: `task-status-${taskId}` })}\n >\n {l.status(status, Math.round(percent))}\n {elapsed && <span className=\"ml-2 text-muted-foreground\">({elapsed})</span>}\n </span>\n\n {status === 'failed' && onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(taskId)}\n className=\"shrink-0 text-sm text-red-text hover:text-red-text/80 pointer-coarse:min-h-11 pointer-coarse:px-3\"\n title={l.deleteTitle}\n data-testid={testIdOr(testIds?.delete?.(taskId), { testId: `delete-task-${taskId}` })}\n >\n {l.delete}\n </button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { UploadTaskItem, type UploadTaskItemLabels } from './UploadTaskItem'\n\nexport interface UploadTaskView {\n fileName: string\n status: string\n progress: number\n startTime?: number\n endTime?: number\n}\n\nexport interface UploadTaskListProps {\n tasks: Record<string, UploadTaskView>\n /** Include only matching tasks. */\n filter?: (taskId: string, task: UploadTaskView) => boolean\n title?: string\n onDelete?: (taskId: string) => void\n /** File-type icon per file name. */\n renderFileIcon?: (fileName: string) => ReactNode\n /** Render the \"No documents in this category\" message when empty (default true). */\n showEmptyState?: boolean\n testIds?: Partial<{ root: string; empty: string; title: string }>\n labels?: Partial<UploadTaskListLabels>\n /** Labels forwarded to every row. */\n itemLabels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\nexport interface UploadTaskListLabels {\n title: string\n empty: string\n}\n\nexport const DEFAULT_UPLOAD_TASK_LIST_LABELS: UploadTaskListLabels = {\n title: 'Active Tasks',\n empty: 'No documents in this category',\n}\n\nexport function UploadTaskList({\n tasks,\n filter,\n title,\n onDelete,\n renderFileIcon,\n showEmptyState = true,\n testIds,\n labels,\n itemLabels,\n className,\n}: UploadTaskListProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_LIST_LABELS, ...labels }\n const heading = title ?? l.title\n const safeTasks = typeof tasks === 'object' && tasks !== null ? tasks : {}\n let entries = Object.entries(safeTasks)\n if (filter) entries = entries.filter(([id, task]) => filter(id, task))\n\n if (entries.length === 0) {\n return showEmptyState ? (\n <div\n className=\"text-sm italic text-muted-foreground\"\n data-testid={testIdOr(testIds?.empty, { testId: 'task-list-empty-state' })}\n >\n {l.empty}\n </div>\n ) : null\n }\n\n return (\n <div\n data-testid={testIdOr(testIds?.root, { testId: 'task-status-list' })}\n data-slot=\"upload-task-list\"\n className={cn('box-border w-full max-w-full', className)}\n >\n {heading && (\n <h3\n className=\"mb-2 truncate text-sm font-semibold\"\n data-testid={testIdOr(testIds?.title, { testId: 'task-list-title' })}\n >\n {heading}\n </h3>\n )}\n <div className=\"box-border w-full max-w-full overflow-hidden\">\n {entries.map(([taskId, task]) => (\n <UploadTaskItem\n key={taskId}\n taskId={taskId}\n fileName={task.fileName}\n status={task.status}\n progress={task.progress}\n startTime={task.startTime}\n endTime={task.endTime}\n fileIcon={renderFileIcon?.(task.fileName)}\n onDelete={onDelete}\n labels={itemLabels}\n className=\"box-border max-w-full\"\n />\n ))}\n </div>\n </div>\n )\n}\n","import { FileText } from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** A document a task produced, as the Outputs cell needs it. */\nexport interface TaskOutput {\n id: string\n name: string\n}\n\nexport interface TaskOutputsCellLabels {\n none: string\n /** Menu trigger's accessible name. */\n open: (count: number) => string\n /** \"+2\" next to the first file name. */\n more: (count: number) => string\n}\n\nexport const DEFAULT_TASK_OUTPUTS_CELL_LABELS: TaskOutputsCellLabels = {\n none: '—',\n open: (count) => `${count} ${count === 1 ? 'output' : 'outputs'}`,\n more: (count) => `+${count}`,\n}\n\nexport interface TaskOutputsCellProps {\n /** Task id: keys the test ids (`task-outputs-{id}`, `task-output-{id}-{docId}`). */\n id: string\n outputs?: readonly TaskOutput[]\n onOpen: (documentId: string) => void\n testId?: string\n labels?: Partial<TaskOutputsCellLabels>\n}\n\n/** The documents a task generated: the first file name and a count, with a menu that opens each. */\nexport function TaskOutputsCell({ id, outputs, onOpen, testId, labels }: TaskOutputsCellProps) {\n const l = { ...DEFAULT_TASK_OUTPUTS_CELL_LABELS, ...labels }\n const base = testIdOr(testId, { testId: `task-outputs-${id}` })\n if (!outputs || outputs.length === 0) {\n return (\n <span className=\"text-xs text-muted-foreground\" data-testid={base} data-state=\"none\">\n {l.none}\n </span>\n )\n }\n const [first] = outputs\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 max-w-full gap-1.5 px-2 text-xs\"\n aria-label={l.open(outputs.length)}\n data-testid={base}\n data-count={outputs.length}\n >\n <FileText className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{first.name}</span>\n {outputs.length > 1 && (\n <span className=\"shrink-0 text-muted-foreground\">{l.more(outputs.length - 1)}</span>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {outputs.map((o) => (\n <DropdownMenuItem\n key={o.id}\n onSelect={() => onOpen(o.id)}\n data-testid={`task-output-${id}-${o.id}`}\n >\n <FileText className=\"mr-2 size-4\" aria-hidden />\n <span className=\"truncate\">{o.name}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import { useState } from 'react'\nimport { CornerDownRight } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskMoveOption {\n id: string\n label: string\n}\n\nexport interface TaskMoveDialogLabels {\n title: string\n none: string\n search: string\n empty: string\n cancel: string\n}\n\nexport interface TaskMoveDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Where the task can go (the host excludes the task itself and its descendants). */\n options: TaskMoveOption[]\n /** The task's current parent, marked in the list. */\n currentParentId?: string | null\n /** `null` moves the task to the top level. */\n onPick: (parentId: string | null) => void\n labels: TaskMoveDialogLabels\n testId?: string\n}\n\n/** A parent picker: choose the task another task becomes a sub-task of, or the top level. */\nexport function TaskMoveDialog({\n open,\n onOpenChange,\n options,\n currentParentId,\n onPick,\n labels,\n testId,\n}: TaskMoveDialogProps) {\n const [query, setQuery] = useState('')\n const id = testIdOr(testId, { testId: 'task-move' })\n const q = query.trim().toLowerCase()\n const shown = q ? options.filter((o) => o.label.toLowerCase().includes(q)) : options\n const pick = (parentId: string | null) => {\n onPick(parentId)\n onOpenChange(false)\n }\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (!next) setQuery('')\n onOpenChange(next)\n }}\n >\n <DialogContent presentation=\"sheet\" className=\"max-h-[80dvh] sm:max-w-md\" data-testid={id}>\n <DialogHeader>\n <DialogTitle>{labels.title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{labels.title}</DialogDescription>\n </DialogHeader>\n <Input\n value={query}\n placeholder={labels.search}\n aria-label={labels.search}\n onChange={(e) => setQuery(e.target.value)}\n data-testid={`${id}-search`}\n />\n <ul\n className=\"flex max-h-[50dvh] flex-col gap-1 overflow-y-auto\"\n data-testid={`${id}-list`}\n >\n {!q && (\n <li>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={!currentParentId}\n onClick={() => pick(null)}\n data-testid={`${id}-none`}\n >\n {labels.none}\n </Button>\n </li>\n )}\n {shown.map((o) => (\n <li key={o.id}>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={o.id === currentParentId}\n onClick={() => pick(o.id)}\n data-testid={`${id}-option-${o.id}`}\n >\n <CornerDownRight className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{o.label}</span>\n </Button>\n </li>\n ))}\n {shown.length === 0 && (\n <li className=\"px-2 py-4 text-center text-sm text-muted-foreground\">{labels.empty}</li>\n )}\n </ul>\n <div className=\"flex justify-end\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {labels.cancel}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useState } from 'react'\nimport {\n CheckCheck,\n KeyRound,\n CornerDownRight,\n ListPlus,\n MoreHorizontal,\n History,\n Pencil,\n RotateCcw,\n Trash2,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { isPlainTodo, type TaskListRow } from './taskRows'\nimport type { TaskStatusKey } from './taskLabels'\nimport type { TaskListLabels } from './taskTableLabels'\n\nexport interface TaskRowMenuProps {\n task: TaskListRow\n status: TaskStatusKey\n busy: boolean\n /** The viewer owns the task: only they delete it, grant its agent access, or change who sees it. */\n isOwner: boolean\n /** The viewer may change who sees it and delete it: its creator, or an owner of the workspace. */\n canAdmin: boolean\n /** The viewer can edit it: its owner, or an editor of the workspace a shared task sits in. */\n canEdit: boolean\n labels: TaskListLabels\n /** Explicit completion permission; otherwise follows the existing edit permission. */\n canMarkDone?: boolean\n /** Hide when the containing view already offers a reopen control. */\n canReopen?: boolean\n selected?: boolean\n onToggleSelected?: () => void\n onMarkDone: () => void\n onReopen: () => void\n onAddSubtask?: () => void\n onEdit: () => void\n onDelete?: () => void\n onMoveTo?: () => void\n onNotify?: () => void\n /** Open the task's activity timeline. */\n onToggleShared?: () => void\n onOpenActivity?: () => void\n /** Present only when a run is waiting for access. */\n onGrantAccess?: () => void\n}\n\nexport function TaskRowMenu({\n task,\n status,\n busy,\n isOwner,\n canAdmin,\n canEdit,\n labels,\n canMarkDone = canEdit,\n canReopen = canEdit,\n selected = false,\n onToggleSelected,\n onMarkDone,\n onReopen,\n onAddSubtask,\n onEdit,\n onDelete,\n onMoveTo,\n onOpenActivity,\n onToggleShared,\n onGrantAccess,\n}: TaskRowMenuProps) {\n const [open, setOpen] = useState(false)\n const id = task.external_id\n // An editor can do everything but delete and grant access (the owner's). A guest only reads.\n // A plain chat is not run, finished or reopened: it can be renamed, moved and deleted.\n const isChat = status === 'chat'\n const done = status === 'done'\n return (\n <DropdownMenu open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={labels.moreActions}\n data-testid={`task-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {onToggleSelected && (\n <DropdownMenuItem onSelect={onToggleSelected} data-testid={`task-select-${id}`}>\n {selected ? 'Deselect task' : 'Select task'}\n </DropdownMenuItem>\n )}\n {isOwner && onGrantAccess && task.pending_auth_request_id && (\n <DropdownMenuItem\n onSelect={onGrantAccess}\n data-testid={`task-grant-${id}`}\n className=\"text-destructive\"\n >\n <KeyRound className=\"mr-2 size-4\" aria-hidden />\n {labels.grantAccess}\n </DropdownMenuItem>\n )}\n {isChat || !canEdit\n ? null\n : done\n ? canReopen && (\n <DropdownMenuItem\n disabled={busy}\n onSelect={onReopen}\n data-testid={`task-reopen-${id}`}\n >\n <RotateCcw className=\"mr-2 size-4\" aria-hidden />\n {labels.reopen}\n </DropdownMenuItem>\n )\n : canMarkDone && (\n <DropdownMenuItem\n disabled={busy}\n onSelect={onMarkDone}\n data-testid={`task-mark-done-${id}`}\n >\n <CheckCheck className=\"mr-2 size-4\" aria-hidden />\n {labels.markDone}\n </DropdownMenuItem>\n )}\n {!isChat && onOpenActivity && (\n <DropdownMenuItem onSelect={onOpenActivity} data-testid={`task-activity-${id}`}>\n <History className=\"mr-2 size-4\" aria-hidden />\n {labels.activity}\n </DropdownMenuItem>\n )}\n {isOwner && onToggleShared && (\n <DropdownMenuItem disabled={busy} onSelect={onToggleShared}>\n {task.is_shared ? 'Make private' : 'Share with workspace'}\n </DropdownMenuItem>\n )}\n {canEdit && onAddSubtask && (\n <DropdownMenuItem onSelect={onAddSubtask} data-testid={`task-add-subtask-${id}`}>\n <ListPlus className=\"mr-2 size-4\" aria-hidden />\n {labels.addSubtask}\n </DropdownMenuItem>\n )}\n {canEdit && onMoveTo && (\n <DropdownMenuItem onSelect={onMoveTo} data-testid={`task-move-${id}`}>\n <CornerDownRight className=\"mr-2 size-4\" aria-hidden />\n {labels.moveTo}\n </DropdownMenuItem>\n )}\n {canEdit && (\n <DropdownMenuItem onSelect={onEdit} data-testid={`task-edit-${id}`}>\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {isChat ? labels.rename : labels.edit}\n </DropdownMenuItem>\n )}\n {canEdit && onDelete && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={onDelete}\n title={canAdmin ? undefined : labels.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`task-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {labels.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { AlertCircle, Check, CircleDashed, Loader2, MessageSquare } from 'lucide-react'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\nimport { STATUS_LABELS, STATUS_TONE, asTaskStatus, type TaskStatusKey } from './taskLabels'\n\nexport interface TaskStatusPillLabels {\n waitingForAccess: string\n lastRunFailed: string\n /** The visible word beside the status when the last run failed. */\n failed: string\n}\n\nexport const DEFAULT_TASK_STATUS_PILL_LABELS: TaskStatusPillLabels = {\n waitingForAccess: 'Waiting for access',\n lastRunFailed: 'Last run failed',\n failed: 'Failed',\n}\n\nexport interface TaskStatusPillProps {\n /** Task id: keys the test id (`task-status-{id}`). */\n id: string\n status: string | null | undefined\n /** When the in-flight run started (ISO); a generating pill shows a live elapsed time. */\n runStartedAt?: string | null\n /** The last run's error, shown as a danger dot with the message on hover. */\n lastError?: string | null\n /** A run is waiting for the owner to grant workspace access. */\n awaitingAccess?: boolean\n testId?: string\n labels?: Partial<TaskStatusPillLabels>\n /** Tooltip with the latest step (\"To do · 2 min ago\"). */\n hint?: string\n}\n\nconst ICON = 'size-3'\n\nfunction StatusIcon({ status }: { status: TaskStatusKey }) {\n switch (status) {\n case 'generating':\n return <Loader2 className={`${ICON} animate-spin`} aria-hidden />\n case 'done':\n return <Check className={ICON} aria-hidden />\n case 'chat':\n return <MessageSquare className={ICON} aria-hidden />\n default:\n return <CircleDashed className={ICON} aria-hidden />\n }\n}\n\n/** Ticks once a second while mounted, so a generating pill's elapsed time stays live. */\nfunction useNow(active: boolean): number {\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n if (!active) return\n const timer = setInterval(() => setNow(Date.now()), 1000)\n return () => clearInterval(timer)\n }, [active])\n return now\n}\n\n/** A task's workflow status as one tinted pill: To do, Generating (live), Done. */\nexport function TaskStatusPill({\n id,\n status,\n runStartedAt,\n lastError,\n awaitingAccess = false,\n testId,\n labels,\n hint,\n}: TaskStatusPillProps) {\n const l = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...labels }\n const key = asTaskStatus(status)\n const generating = key === 'generating'\n const now = useNow(generating && Boolean(runStartedAt))\n const started = runStartedAt ? Date.parse(runStartedAt) : NaN\n\n let text: string = STATUS_LABELS[key]\n let tone = STATUS_TONE[key]\n if (awaitingAccess) {\n text = l.waitingForAccess\n tone = 'danger'\n }\n const elapsed = generating && !Number.isNaN(started) ? formatElapsed(started, now) : null\n\n return (\n <span className=\"inline-flex items-center gap-1.5\" data-slot=\"task-status\" title={hint}>\n <ToneBadge\n tone={tone}\n icon={<StatusIcon status={key} />}\n data-status={key}\n data-testid={testIdOr(testId, { testId: `task-status-${id}` })}\n >\n {text}\n {elapsed && <span className=\"tabular-nums opacity-70\">· {elapsed}</span>}\n </ToneBadge>\n {lastError && !generating && (\n <span\n role=\"img\"\n aria-label={l.lastRunFailed}\n title={`${l.lastRunFailed}: ${lastError}`}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-medium text-red-text\"\n data-testid={`task-error-${id}`}\n >\n <AlertCircle className=\"size-3.5\" aria-hidden />\n {l.failed}\n </span>\n )}\n </span>\n )\n}\n","/**\n * Column definitions for the tasks grid. Every column has an\n * explicit `colId` (AG Grid persists column state by id: see CLAUDE.md). The table supplies behaviour and\n * the cells that need it through slots; the structure, widths and headers live here. The slots must be\n * stable functions (the table keeps the latest handlers behind them) so the definitions are built once\n * and the grid never refreshes its columns on a selection or expand.\n *\n * Every conversation is a task: Owner (who has the next step), due, shared, thread link,\n * status, outputs. Rows are `TaskGridRow`s: a task plus where it sits in the sub-task tree, so the\n * order is the tree's. A column's header still shows and reports the sort, but the grid's own sort is\n * a no-op (`keepOrder`): that would tear sub-tasks away from their parent, so the table sorts within\n * each level instead (see `buildTaskRows`).\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport type { TaskGridRow, TaskListRow } from './taskRows'\nimport type { TaskListLabels } from './taskTableLabels'\n\n/** The actions column's width: Allow access and the menu (the widest row). */\nexport const ACTIONS_WIDTH = 160\nconst NARROW_ACTIONS_WIDTH = 56\n\nexport const TASK_COLUMN_ORDER = [\n 'name',\n 'owner',\n 'due',\n 'status',\n 'outputs',\n 'shared',\n 'actions',\n] as const\n\nexport interface CreateTaskColumnsOptions<T extends TaskListRow> {\n labels: TaskListLabels\n renderName: (row: TaskGridRow<T>) => ReactNode\n /** Who has the next step. */\n renderOwner: (row: TaskGridRow<T>) => ReactNode\n renderDue: (row: TaskGridRow<T>) => ReactNode\n renderShared: (row: TaskGridRow<T>) => ReactNode\n /** The documents the task generated. */\n renderOutputs: (row: TaskGridRow<T>) => ReactNode\n /** A phone-width grid: the actions column is just the menu. */\n narrow?: boolean\n /** Whether the Outputs column is shown: only worth the room once some task has outputs. */\n showOutputs?: boolean\n renderStatus: (row: TaskGridRow<T>) => ReactNode\n /** Who is in the thread (Threads view). */\n renderActions: (row: TaskGridRow<T>) => ReactNode\n /** Plain text of the owner cell, for sorting, filters and the clipboard. */\n getOwnerName: (row: TaskGridRow<T>) => string\n}\n\n/** Grid-side comparator that keeps the table's order: the table sorts each level itself. */\nconst keepOrder = () => 0\n\n/** Columns the user can sort by, per view. */\nexport type SortableTaskColumn = 'name' | 'owner' | 'due' | 'status' | 'updated' | 'messages'\n\n/** The cell renderer for a slot: a missing row (AG Grid's loading shell) renders nothing. */\nfunction cell<T extends TaskListRow>(render: (row: TaskGridRow<T>) => ReactNode) {\n return (params: ICellRendererParams<TaskGridRow<T>>): ReactNode =>\n params.data ? render(params.data) : null\n}\n\nexport function createTaskColumns<T extends TaskListRow>(\n o: CreateTaskColumnsOptions<T>\n): ColDef<TaskGridRow<T>>[] {\n const l = o.labels\n const sortable = {\n sortable: true,\n comparator: keepOrder,\n sortingOrder: ['asc' as const, 'desc' as const, null],\n }\n const base: Partial<ColDef<TaskGridRow<T>>> = {\n sortable: false,\n suppressMovable: true,\n // Keyboard focus lands on the name cell only (arrow keys expand and collapse sub-tasks there).\n suppressNavigable: true,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n const name: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'name',\n ...sortable,\n suppressNavigable: false,\n headerName: l.colTask,\n flex: 3,\n minWidth: 200,\n cellRenderer: cell(o.renderName),\n }\n const shared: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width: 90,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'center' },\n valueGetter: (p) => p.data?.task.is_shared ?? false,\n cellRenderer: cell(o.renderShared),\n }\n const actions = (): ColDef<TaskGridRow<T>> => ({\n ...base,\n colId: 'actions',\n headerName: '',\n // Always in view, even if the rest has to scroll.\n pinned: 'right',\n lockPinned: true,\n width: o.narrow ? NARROW_ACTIONS_WIDTH : ACTIONS_WIDTH,\n minWidth: NARROW_ACTIONS_WIDTH,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end' },\n cellRenderer: cell(o.renderActions),\n })\n\n // Left to right: the title, who has the next step, when, how it stands, then who sees it and the\n // thread link, with the actions (Approve included) last, at the right edge.\n return [\n name,\n {\n ...base,\n colId: 'owner',\n ...sortable,\n headerName: l.colOwner,\n headerTooltip: l.ownerHint,\n flex: 1.4,\n minWidth: 150,\n valueGetter: (p) => (p.data ? o.getOwnerName(p.data) : ''),\n cellRenderer: cell(o.renderOwner),\n },\n {\n ...base,\n colId: 'due',\n ...sortable,\n headerName: l.colDue,\n flex: 1,\n minWidth: 140,\n valueGetter: (p) => p.data?.task.due_at ?? '',\n cellRenderer: cell(o.renderDue),\n },\n {\n ...base,\n colId: 'status',\n ...sortable,\n headerName: l.colStatus,\n // Wide enough for \"Generating\" and \"Waiting for access\" in full, with the elapsed time.\n flex: 1.3,\n minWidth: 170,\n valueGetter: (p) => p.data?.task.status ?? '',\n cellRenderer: cell(o.renderStatus),\n },\n ...(o.showOutputs\n ? [\n {\n ...base,\n colId: 'outputs',\n headerName: l.colOutputs,\n flex: 1.2,\n minWidth: 130,\n cellRenderer: cell(o.renderOutputs),\n } as ColDef<TaskGridRow<T>>,\n ]\n : []),\n shared,\n actions(),\n ]\n}\n","/**\n * Drop the least useful columns as a grid gets narrower, so the actions column (Approve, Run, the menu)\n * is never pushed off the edge. Each rule keeps its column while the grid is at least `minWidth` wide.\n */\nimport type { GridApi } from 'ag-grid-community'\n\nexport interface ColumnWidthRule {\n colId: string\n /** The narrowest grid (px) that still shows the column. */\n minWidth: number\n}\n\nexport function applyColumnWidthRules(\n api: Pick<GridApi, 'getColumn' | 'setColumnsVisible'>,\n gridWidth: number,\n rules: readonly ColumnWidthRule[]\n): void {\n for (const rule of rules) {\n if (api.getColumn(rule.colId)) api.setColumnsVisible([rule.colId], gridWidth >= rule.minWidth)\n }\n}\n","import type { TaskStatusKey } from './taskLabels'\n\nexport interface TaskListLabels {\n agent: string\n filterAll: string\n emptyTitle: string\n emptyMessage: string\n noMatches: string\n due: (when: string) => string\n overdue: (when: string) => string\n colTask: string\n colOwner: string\n ownerHint: string\n colOutputs: string\n preparedBy: (agentName: string) => string\n colDue: string\n colStatus: string\n me: string\n someone: string\n noDue: string\n colShared: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n goalMet: (met: number, total: number) => string\n subtasksDone: (done: number, total: number) => string\n expandSubtasks: string\n collapseSubtasks: string\n selectAll: string\n selectTask: (name: string) => string\n markDone: string\n reopen: string\n markDoneMany: string\n markDoneManyHint: string\n deleteMany: string\n moveTo: string\n untitled: string\n fromWorkflow: (workflowName: string) => string\n searchLabel: string\n searchPlaceholder: string\n expandAll: string\n collapseAll: string\n moveToTitle: (taskName: string) => string\n moveToNone: string\n moveToSearch: string\n moveToEmpty: string\n moveToCancel: string\n subtasksSelected: (count: number) => string\n addSubtask: string\n edit: string\n rename: string\n delete: string\n grantAccess: string\n allowAccess: string\n moreActions: string\n activity: string\n /** Status tooltip: the latest step and how long ago. */\n statusHint: (status: string, ago: string) => string\n status: Partial<Record<TaskStatusKey, string>>\n}\n\nexport const DEFAULT_TASK_LIST_LABELS: TaskListLabels = {\n filterAll: 'All',\n emptyTitle: 'No tasks yet',\n emptyMessage:\n 'Use New to add one: just type what you need, or add a due date. Automations that create tasks live on the Workflows page. You always decide when a task is done.',\n noMatches: 'No tasks match.',\n due: (when) => when,\n overdue: (when) => `${when} · overdue`,\n agent: 'Agent',\n colTask: 'Task',\n colOwner: 'Owner',\n ownerHint: 'Who created the task. They are notified when its run finishes.',\n colOutputs: 'Outputs',\n preparedBy: (agent) => `Prepared by ${agent}`,\n colDue: 'Due',\n colStatus: 'Status',\n me: 'Me',\n someone: 'Someone',\n noDue: '—',\n colShared: 'Shared',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n goalMet: (met, total) => `${met}/${total} met`,\n subtasksDone: (done, total) => `${done}/${total} sub-tasks done`,\n expandSubtasks: 'Show sub-tasks',\n collapseSubtasks: 'Hide sub-tasks',\n selectAll: 'Select all tasks',\n selectTask: (name) => `Select ${name}`,\n markDone: 'Mark done',\n reopen: 'Reopen',\n markDoneMany: 'Mark done',\n markDoneManyHint: 'Marks the selected tasks done.',\n deleteMany: 'Delete',\n moveTo: 'Move to…',\n untitled: 'Untitled task',\n fromWorkflow: (name) => `From “${name}”`,\n searchLabel: 'Search tasks',\n searchPlaceholder: 'Search tasks…',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n moveToTitle: (name) => `Move “${name}” to…`,\n moveToNone: 'No parent (top level)',\n moveToSearch: 'Search tasks…',\n moveToEmpty: 'No task to move it under.',\n moveToCancel: 'Cancel',\n subtasksSelected: (count) => `${count} ${count === 1 ? 'sub-task' : 'sub-tasks'} included`,\n addSubtask: 'Add sub-task',\n edit: 'Edit',\n rename: 'Rename',\n delete: 'Delete',\n grantAccess: 'Allow access and continue',\n allowAccess: 'Allow access',\n moreActions: 'More actions',\n activity: 'Activity',\n statusHint: (status, ago) => `${status} · ${ago}`,\n status: {},\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { CellKeyDownEvent, GridApi, GridOptions } from 'ag-grid-community'\nimport {\n ChevronDown,\n ChevronRight,\n ChevronsDownUp,\n ChevronsUpDown,\n CheckCheck,\n KeyRound,\n ListTodo,\n Trash2,\n Workflow,\n} from 'lucide-react'\nimport { Button, Input, VisibilityToggle, cn } from '@arbidocs/react/ui'\nimport { EmptyState } from '../../components/EmptyState'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskOutputsCell, type TaskOutput, type TaskOutputsCellLabels } from './TaskOutputsCell'\nimport { TaskMoveDialog } from './TaskMoveDialog'\nimport { TaskRowMenu } from './TaskRowMenu'\nimport {\n DEFAULT_TASK_STATUS_PILL_LABELS,\n TaskStatusPill,\n type TaskStatusPillLabels,\n} from './TaskStatusPill'\nimport type { TaskThreadChipLabels } from './TaskThreadChip'\nimport { createTaskColumns, type SortableTaskColumn } from './taskColumns'\nimport { applyColumnWidthRules, type ColumnWidthRule } from './gridWidth'\nimport { STATUS_LABELS, STATUS_ORDER, asTaskStatus, goalProgress } from './taskLabels'\nimport {\n buildTaskRows,\n ownerExtId,\n descendantIds,\n indexTasks,\n isPlainTodo,\n moveTargets,\n type TaskFilter,\n type TaskGridRow,\n type TaskListRow,\n} from './taskRows'\nimport { DEFAULT_TASK_LIST_LABELS, type TaskListLabels } from './taskTableLabels'\n\nexport interface TaskTableProps<T extends TaskListRow> {\n /** The workspace's tasks: the conversations that have a status (the host drops plain chats). */\n tasks: T[]\n isLoading?: boolean\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Open the task's thread (its conversation). */\n onOpenThread: (conversationId: string, task: T) => void\n /** A person marks a task done / reopens a finished one. */\n onMarkDone: (task: T) => void\n onReopen: (task: T) => void\n /** People in the workspace, by id: names the Owner column. */\n people?: { id: string; label: string }[]\n /** Agent names by id, for the Assigned to column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Workflow names by id: names a task whose title the run has not generated yet, and its origin chip. */\n workflowNames?: Record<string, string>\n /**\n * How a person appears in the Owner column. Defaults to the app's user pill from\n * `@arbidocs/react`; a host with presence and direct messages passes its own.\n */\n renderPerson?: (person: TaskPerson) => ReactNode\n /** Share a task with the workspace or make it private (the shared/private toggle appears with it). */\n onToggleShared?: (task: T, shouldShare: boolean) => void\n onEdit: (task: T) => void\n onDelete: (task: T) => void\n /** Start a new task that is a child of this one. */\n onAddSubtask?: (task: T) => void\n /** Re-parent a task (`null` = top level). With it, the row menu offers \"Move to…\". */\n onMove?: (task: T, parentId: string | null) => void\n /** Bulk actions on the selected rows (the selection bar shows only the ones provided). */\n onMarkDoneMany?: (tasks: T[]) => void\n onDeleteMany?: (tasks: T[]) => void\n /** When set, a run waiting for access shows a one-click \"allow access\" action. */\n onGrantAccess?: (task: T) => void\n /** Task id with a request in flight: its row disables its actions. */\n busyId?: string | null\n /** Slot above the table (e.g. a live-runs banner). */\n header?: ReactNode\n /**\n * Extra bulk actions for the selection bar (an export, a share): called with the selected tasks, whether\n * the bar is compact, and a function that clears the selection.\n */\n selectionActions?: (selected: T[], isCompact: boolean, clearSelection: () => void) => ReactNode\n /** Text from outside the table (a topbar filter) that narrows the rows like the search box does. */\n filterText?: string\n /**\n * The viewer edits the workspace (owner or collaborator): a row they do not own is always shared, and\n * they may then edit, run, move, mark done and add sub-tasks to it. The share toggle, Delete and Allow\n * access stay with the row's owner. A guest leaves this off and only reads.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with a row's creator, the only one who deletes it. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n labels?: Partial<TaskListLabels>\n testId?: string\n statusPillLabels?: Partial<TaskStatusPillLabels>\n threadChipLabels?: Partial<TaskThreadChipLabels>\n /** Generated documents per task id (latest versions only); a task with none shows a dash. */\n outputsByTask?: Record<string, readonly TaskOutput[]>\n /** Open one generated document (Tasks view's Outputs column). */\n onOpenOutput?: (documentId: string, task: T) => void\n outputsLabels?: Partial<TaskOutputsCellLabels>\n /** Open a task's activity timeline (row menu: \"Activity\"). */\n onOpenActivity?: (task: T) => void\n /** \"2 min ago\" for the status tooltip; without it the tooltip is left out. */\n formatRelative?: (iso: string) => string\n}\n\nconst ROW_HEIGHT = 56\n/** Taller on a phone, where the status sits under the title. */\nconst NARROW_ROW_HEIGHT = 76\n/** Sub-tasks stop indenting after this depth (the table stays readable at any nesting). */\nconst MAX_INDENT_DEPTH = 4\n/** Above this many rows the grid stops animating row changes. */\nconst ANIMATE_ROWS_UP_TO = 500\n\n/** Below this grid width the table is one column and a menu. */\nconst NARROW_GRID = 640\n\n/** What goes first as the grid narrows (the grid is the page minus the sidebar). */\nconst WIDTH_RULES: readonly ColumnWidthRule[] = [\n { colId: 'shared', minWidth: 1050 },\n { colId: 'due', minWidth: 850 },\n { colId: 'outputs', minWidth: 930 },\n { colId: 'owner', minWidth: 730 },\n { colId: 'status', minWidth: NARROW_GRID },\n]\n\ntype Row<T extends TaskListRow> = TaskGridRow<T>\n\n/** The tooltip on the status pill: the latest step and how long ago. */\nfunction statusHint<T extends TaskListRow>(\n task: T,\n ctx: {\n props: TaskTableProps<T>\n l: TaskListLabels\n }\n): string | undefined {\n const { props: p, l } = ctx\n if (!p.formatRelative || !task.updated_at) return undefined\n const key = asTaskStatus(task.status)\n const pill = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...p.statusPillLabels }\n const label = task.pending_auth_request_id ? pill.waitingForAccess : STATUS_LABELS[key]\n return l.statusHint(label, p.formatRelative(task.updated_at))\n}\n\n/**\n * The tasks of a workspace as a person's work list, in the same grid as every other list in the app:\n * what an agent is generating first, then to-dos and, last, what is done.\n * Sub-tasks sit indented under their parent. Rows are selected with the grid's checkboxes (shift-click\n * for a range; ticking a parent ticks its sub-tasks) and acted on from the selection bar. Agents prepare\n * work; only a person closes it.\n */\nexport function TaskTable<T extends TaskListRow>(props: TaskTableProps<T>) {\n const { tasks: allTasks, isLoading, busyId, header, testId } = props\n const l: TaskListLabels = {\n ...DEFAULT_TASK_LIST_LABELS,\n ...props.labels,\n status: { ...STATUS_LABELS, ...props.labels?.status },\n }\n const [filter, setFilter] = useState<TaskFilter>('all')\n const [query, setQuery] = useState('')\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set())\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set())\n const [sort, setSort] = useState<{ colId: SortableTaskColumn; dir: 'asc' | 'desc' } | null>(null)\n const [moving, setMoving] = useState<T | null>(null)\n const tasks = allTasks\n const apiRef = useRef<GridApi<Row<T>> | null>(null)\n // A phone-width grid: one column and a menu, the status under the title (see onGridSizeChanged).\n const [narrow, setNarrow] = useState(false)\n const rowCache = useRef(new Map<string, Row<T>>())\n\n const tree = useMemo(() => indexTasks(tasks), [tasks])\n const peopleNames = useMemo(\n () => new Map((props.people ?? []).map((p) => [p.id, p.label])),\n [props.people]\n )\n /** What a task is called: its title, else the workflow that made it, else \"Untitled\". */\n const nameOf = (task: T): string =>\n task.title?.trim() ||\n (task.workflow_ext_id && props.workflowNames?.[task.workflow_ext_id]) ||\n l.untitled\n /** Who owns the task: its creator. */\n const owner = (task: T): TaskPerson => {\n const id = ownerExtId(task)\n const mine = task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n /** Who started a thread. */\n const starter = (task: T): TaskPerson => {\n const id = task.created_by_ext_id ?? task.owner_ext_id\n const mine = task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n const renderPerson =\n props.renderPerson ?? ((person: TaskPerson) => <PersonPill person={person} />)\n\n const q = (query.trim() || (props.filterText ?? '').trim()).toLowerCase()\n const counts = useMemo(() => {\n const map = new Map<string, number>(STATUS_ORDER.map((s) => [s, 0]))\n let all = 0\n for (const task of tasks) {\n const text = `${nameOf(task)} ${task.description ?? ''}`.toLowerCase()\n if (q && !text.includes(q)) continue\n all += 1\n const s = asTaskStatus(task.status)\n map.set(s, (map.get(s) ?? 0) + 1)\n }\n map.set('all', all)\n return map\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks, q, props.workflowNames, l.untitled])\n\n const compare = useMemo(() => {\n if (!sort) return undefined\n // A sort key is computed once per task, not once per comparison.\n const keys = new Map<T, string | number>()\n const compute = (t: T): string | number => {\n switch (sort.colId) {\n case 'name':\n return nameOf(t).toLowerCase()\n case 'owner':\n return owner(t).label.toLowerCase()\n case 'updated':\n return t.updated_at ? Date.parse(t.updated_at) : 0\n case 'messages':\n return t.message_count ?? 0\n case 'due':\n return t.due_at ? Date.parse(t.due_at) : Number.POSITIVE_INFINITY\n default:\n return STATUS_ORDER.indexOf(asTaskStatus(t.status))\n }\n }\n const key = (t: T): string | number => {\n let k = keys.get(t)\n if (k === undefined) {\n k = compute(t)\n keys.set(t, k)\n }\n return k\n }\n const sign = sort.dir === 'asc' ? 1 : -1\n return (a: T, b: T) => {\n const [x, y] = [key(a), key(b)]\n if (typeof x === 'number' && typeof y === 'number') return (x - y) * sign\n return String(x).localeCompare(String(y)) * sign\n }\n // The name lookups close over the people, agents and workflows the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n sort,\n peopleNames,\n props.agentNames,\n props.workflowNames,\n l.me,\n l.agent,\n l.someone,\n l.untitled,\n ])\n\n const rows = useMemo(\n () =>\n buildTaskRows(tasks, filter, collapsed, compare, {\n query: query.trim() || props.filterText,\n titleOf: nameOf,\n cache: rowCache.current,\n }),\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [tasks, filter, collapsed, compare, query, props.filterText, props.workflowNames, l.untitled]\n )\n\n // Selection lives here (the grid mirrors it), so a parent can carry its sub-tasks with it, even\n // the collapsed or filtered-out ones the grid does not show.\n const selectedRows = useMemo(\n () => rows.filter((r) => selectedIds.has(r.external_id)),\n [rows, selectedIds]\n )\n const selectedTasks = useMemo(\n () => tasks.filter((t) => selectedIds.has(t.external_id)),\n [tasks, selectedIds]\n )\n const subtasksIncluded = useMemo(\n () =>\n selectedTasks.filter((t) => {\n const parent = tree.parentOf.get(t.external_id)\n return parent !== undefined && selectedIds.has(parent)\n }).length,\n [selectedTasks, selectedIds, tree]\n )\n // Only a task is marked done: a plain chat has no status to finish.\n const markable = selectedTasks.filter(\n (t) =>\n t.status != null &&\n (t.is_owner !== false || props.canEditShared) &&\n isPlainTodo(t) &&\n asTaskStatus(t.status) !== 'done'\n )\n const deletable = selectedTasks.filter((t) => t.is_owner !== false || props.isWorkspaceOwner)\n\n const rowsRef = useRef(rows)\n rowsRef.current = rows\n const handleSelectionChange = (picked: Row<T>[]) => {\n const visible = new Set(rowsRef.current.map((r) => r.external_id))\n const pickedIds = new Set(picked.map((r) => r.external_id))\n setSelectedIds((prev) => {\n const added = [...pickedIds].filter((id) => !prev.has(id))\n const removed = [...prev].filter((id) => visible.has(id) && !pickedIds.has(id))\n if (added.length === 0 && removed.length === 0) return prev\n const next = new Set(prev)\n const nested = true\n for (const id of added) {\n next.add(id)\n if (nested) for (const d of descendantIds(tree, id)) next.add(d)\n }\n for (const id of removed) {\n next.delete(id)\n if (!nested) continue\n for (const d of descendantIds(tree, id)) next.delete(d)\n // A parent is no longer fully selected once one of its sub-tasks is not.\n for (let at = tree.parentOf.get(id); at; at = tree.parentOf.get(at)) next.delete(at)\n }\n return next\n })\n }\n\n const setExpanded = (id: string, expanded: boolean) =>\n setCollapsed((prev) => {\n if (prev.has(id) === !expanded) return prev\n const next = new Set(prev)\n if (expanded) next.delete(id)\n else next.add(id)\n return next\n })\n const expandAll = () => setCollapsed(new Set())\n const collapseAll = () => setCollapsed(new Set(tree.kids.keys()))\n\n // The column definitions are built once. Their cells read the latest props and lookups through\n // this ref, so a selection, a filter or an expand never makes the grid rebuild its columns.\n const latest = useRef({ props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow })\n latest.current = { props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow }\n\n // The Outputs column earns its room once some task has produced something.\n const showOutputs = Object.values(props.outputsByTask ?? {}).some((o) => o.length > 0)\n const columnDefs = useMemo(\n () =>\n createTaskColumns<T>({\n narrow,\n labels: l,\n getOwnerName: (row) => latest.current.owner(row.task).label,\n renderName: (row) => {\n const { l: lb, props: p, nameOf: name } = latest.current\n const { task, depth, childStats, expanded } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const goal = goalProgress(task)\n const workflowName = task.workflow_ext_id ? p.workflowNames?.[task.workflow_ext_id] : null\n return (\n <div\n className=\"flex min-w-0 flex-1 items-center gap-1.5\"\n style={\n depth > 0\n ? { paddingLeft: `${Math.min(depth, MAX_INDENT_DEPTH) * 1.5}rem` }\n : undefined\n }\n data-depth={depth}\n aria-level={depth + 1}\n aria-setsize={row.setSize}\n aria-posinset={row.posInSet}\n data-context={row.context || undefined}\n >\n {childStats ? (\n <button\n type=\"button\"\n onClick={() => latest.current.setExpanded(id, !expanded)}\n aria-expanded={expanded}\n aria-label={expanded ? lb.collapseSubtasks : lb.expandSubtasks}\n className=\"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n data-testid={`task-expand-${id}`}\n >\n {expanded ? (\n <ChevronDown className=\"size-4\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-4\" aria-hidden />\n )}\n </button>\n ) : depth > 0 ? (\n <span className=\"size-5 shrink-0\" aria-hidden />\n ) : null}\n <div className=\"min-w-0 flex-1 leading-tight\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => latest.current.props.onOpenThread(id, task)}\n // The agent that prepared the work is not a column: it is named here, on hover.\n title={\n task.agent_ext_id\n ? lb.preparedBy(p.agentNames?.[task.agent_ext_id] || lb.agent)\n : undefined\n }\n className={cn(\n // The title has priority: it keeps at least 12 characters before it ellipsises.\n 'min-w-[12ch] truncate text-left text-sm font-medium hover:underline focus-visible:underline focus-visible:outline-none',\n status === 'done' && 'text-muted-foreground line-through'\n )}\n data-testid={`task-name-${id}`}\n >\n {name(task)}\n </button>\n {goal && (\n <ToneBadge\n tone={goal.done ? 'success' : 'neutral'}\n data-testid={`task-goal-progress-${id}`}\n >\n {goal.done ? '✓ ' : ''}\n {lb.goalMet(goal.met, goal.total)}\n </ToneBadge>\n )}\n </div>\n {/* A phone has no Status column: the status sits under the title. */}\n {latest.current.narrow && (\n <div className=\"pt-0.5\">\n <TaskStatusPill\n id={id}\n status={status}\n runStartedAt={task.run_started_at}\n lastError={task.last_error}\n awaitingAccess={Boolean(task.pending_auth_request_id)}\n labels={p.statusPillLabels}\n />\n </div>\n )}\n {/* Second line: what it is (or where it came from) and the sub-task count, which never\n squeezes the title above it. */}\n {(task.description || workflowName || childStats) && (\n <div className=\"flex min-w-0 items-center gap-2 text-xs text-muted-foreground\">\n {task.description ? (\n <p className=\"min-w-0 truncate\">{task.description}</p>\n ) : workflowName ? (\n <span\n className=\"inline-flex min-w-0 items-center gap-1.5\"\n data-testid={`task-workflow-${id}`}\n >\n <Workflow className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{lb.fromWorkflow(workflowName)}</span>\n </span>\n ) : null}\n {childStats && (\n <span\n className=\"shrink-0 tabular-nums\"\n data-testid={`task-subtask-progress-${id}`}\n >\n {lb.subtasksDone(childStats.done, childStats.total)}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n )\n },\n // Who has the next step: the person pill, with the \"Me\" treatment. A plain chat is its starter's.\n renderOwner: (row) => (\n <span data-testid={`task-owner-${row.external_id}`} className=\"flex min-w-0\">\n {latest.current.renderPerson(\n row.task.status ? latest.current.owner(row.task) : latest.current.starter(row.task)\n )}\n </span>\n ),\n renderDue: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const dueMs = task.due_at ? Date.parse(task.due_at) : NaN\n const overdue =\n asTaskStatus(task.status) !== 'done' && !Number.isNaN(dueMs) && dueMs < Date.now()\n return (\n <span\n className={cn(\n 'truncate text-sm',\n overdue ? 'font-medium text-red-text' : 'text-muted-foreground'\n )}\n data-testid={`task-due-${task.external_id}`}\n data-overdue={overdue}\n >\n {task.due_at\n ? overdue\n ? lb.overdue(p.formatDate(task.due_at))\n : lb.due(p.formatDate(task.due_at))\n : lb.noDue}\n </span>\n )\n },\n renderShared: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n // A teammate cannot change the owner's visibility choice.\n if (!p.onToggleShared) return null\n return (\n <VisibilityToggle\n items={{ shared: task.is_shared ?? false }}\n onToggle={(shouldShare) => latest.current.props.onToggleShared?.(task, shouldShare)}\n disabled={task.is_owner === false}\n disabledTooltip={lb.sharedOwnerOnly}\n showLabel={false}\n data-testid={`task-shared-${task.external_id}`}\n />\n )\n },\n showOutputs,\n renderOutputs: (row) => (\n <TaskOutputsCell\n id={row.external_id}\n outputs={latest.current.props.outputsByTask?.[row.external_id]}\n onOpen={(docId) => latest.current.props.onOpenOutput?.(docId, row.task)}\n labels={latest.current.props.outputsLabels}\n />\n ),\n renderStatus: (row) => (\n <TaskStatusPill\n id={row.external_id}\n status={asTaskStatus(row.task.status)}\n runStartedAt={row.task.run_started_at}\n lastError={row.task.last_error}\n awaitingAccess={Boolean(row.task.pending_auth_request_id)}\n labels={latest.current.props.statusPillLabels}\n hint={statusHint(row.task, latest.current)}\n />\n ),\n renderActions: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const busy = p.busyId === id\n const isOwner = task.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n return (\n <div className=\"flex items-center justify-end gap-2\">\n {!latest.current.narrow &&\n isOwner &&\n task.pending_auth_request_id &&\n p.onGrantAccess && (\n <Button\n size=\"sm\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n onClick={() => p.onGrantAccess?.(task)}\n data-testid={`task-allow-access-${id}`}\n >\n <KeyRound className=\"size-3.5\" aria-hidden />\n {lb.allowAccess}\n </Button>\n )}\n <TaskRowMenu\n task={task}\n status={status}\n busy={busy}\n isOwner={isOwner}\n canAdmin={canAdmin}\n canEdit={canEdit}\n labels={lb}\n onMarkDone={() => p.onMarkDone(task)}\n onReopen={() => p.onReopen(task)}\n onAddSubtask={p.onAddSubtask ? () => p.onAddSubtask?.(task) : undefined}\n onMoveTo={p.onMove ? () => setMoving(task) : undefined}\n onEdit={() => p.onEdit(task)}\n onDelete={() => p.onDelete(task)}\n onOpenActivity={p.onOpenActivity ? () => p.onOpenActivity?.(task) : undefined}\n onGrantAccess={p.onGrantAccess ? () => p.onGrantAccess?.(task) : undefined}\n />\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colTask,\n l.colOwner,\n l.colDue,\n l.colStatus,\n l.colShared,\n l.colOutputs,\n l.shared,\n showOutputs,\n narrow,\n ]\n )\n\n // Cells read their data through `latest`, so a change in the lookups they draw from (people, agents,\n // workflow names, the row in flight) redraws the cells once, rather than on every interaction.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.people,\n props.agentNames,\n props.workflowNames,\n props.outputsByTask,\n props.renderPerson,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n narrow,\n ])\n\n const animate = rows.length <= ANIMATE_ROWS_UP_TO\n const gridOptions = useMemo<Partial<GridOptions<Row<T>>>>(\n () => ({\n suppressClickEdit: true,\n // Keyboard focus lives on the name column only (the others are not navigable): ArrowRight\n // opens a task's sub-tasks and ArrowLeft closes them, or steps up to the parent.\n suppressCellFocus: false,\n suppressColumnVirtualisation: true,\n animateRows: animate,\n getRowClass: (p) => (p.data?.context ? 'opacity-60' : undefined),\n // The grid shows and reports the sort; the table orders each level (see buildTaskRows).\n onSortChanged: (event) => {\n const sorted = event.api.getColumnState().find((c) => c.sort)\n setSort(\n sorted?.colId\n ? { colId: sorted.colId as SortableTaskColumn, dir: sorted.sort ?? 'asc' }\n : null\n )\n },\n onGridSizeChanged: (event) => {\n applyColumnWidthRules(event.api, event.clientWidth, WIDTH_RULES)\n setNarrow(event.clientWidth < NARROW_GRID)\n },\n onCellKeyDown: (event: CellKeyDownEvent<Row<T>>) => {\n const row = event.data\n const key = (event.event as KeyboardEvent | null)?.key\n if (!row || event.column.getColId() !== 'name') return\n if (key === 'ArrowRight' && row.childStats && !row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, true)\n } else if (key === 'ArrowLeft') {\n if (row.childStats && row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, false)\n } else if (row.parentId) {\n event.event?.preventDefault()\n const parent = event.api.getRowNode(row.parentId)\n if (parent?.rowIndex != null) {\n event.api.ensureIndexVisible(parent.rowIndex)\n event.api.setFocusedCell(parent.rowIndex, 'name')\n }\n }\n }\n },\n }),\n [animate]\n )\n\n const clearSelection = () => setSelectedIds(new Set())\n // A Chat chip only once there is a plain chat, so the chips add up to All.\n const filterKeys = (['all', ...STATUS_ORDER] as TaskFilter[]).filter(\n (key) => key !== 'chat' || (counts.get(key) ?? 0) > 0\n )\n const hasChildren = tree.kids.size > 0\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col gap-3\"\n data-testid={testIdOr(testId, { testId: 'task-list' })}\n >\n {header}\n <div className=\"flex flex-wrap items-center gap-2\">\n <div role=\"tablist\" aria-label=\"Filter tasks\" className=\"flex flex-wrap gap-1.5\">\n {filterKeys.map((key) => {\n const count = counts.get(key) ?? 0\n const isSelected = filter === key\n return (\n <button\n key={key}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n onClick={() => setFilter(key)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11',\n isSelected\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border text-muted-foreground hover:bg-accent'\n )}\n data-testid={`task-filter-${key}`}\n >\n {key === 'all' ? l.filterAll : l.status[key]}\n <span className=\"tabular-nums opacity-70\">{count}</span>\n </button>\n )\n })}\n </div>\n <Input\n type=\"search\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={l.searchPlaceholder}\n aria-label={l.searchLabel}\n className=\"h-8 max-w-56 text-xs pointer-coarse:h-11\"\n data-testid=\"task-search\"\n />\n {hasChildren && (\n <div className=\"ml-auto flex gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={expandAll}\n data-testid=\"task-expand-all\"\n >\n <ChevronsUpDown className=\"size-3.5\" aria-hidden />\n {l.expandAll}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={collapseAll}\n data-testid=\"task-collapse-all\"\n >\n <ChevronsDownUp className=\"size-3.5\" aria-hidden />\n {l.collapseAll}\n </Button>\n </div>\n )}\n </div>\n {tasks.length === 0 && !isLoading ? (\n <EmptyState\n icon={ListTodo}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"task-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<Row<T>>\n testId=\"task-grid\"\n gridId={props.gridId ?? 'tasks-grid-v4'}\n items={rows}\n columnDefs={columnDefs}\n getItemId={(row) => row.external_id}\n getRowTestId={(row) => `task-row-${row.external_id}`}\n isLoading={isLoading}\n showEmpty={rows.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={narrow ? NARROW_ROW_HEIGHT : ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n selection={{\n mode: 'multiple',\n controlled: true,\n selected: selectedRows,\n onSelectionChange: handleSelectionChange,\n }}\n gridOptions={gridOptions}\n />\n </div>\n )}\n <SelectionBar\n count={selectedTasks.length}\n onClear={clearSelection}\n status={\n selectedTasks.length > 0 && subtasksIncluded > 0 ? (\n <span className=\"text-xs text-muted-foreground\" data-testid=\"task-selection-subtasks\">\n {l.subtasksSelected(subtasksIncluded)}\n </span>\n ) : undefined\n }\n >\n {(isCompact) => (\n <>\n {props.selectionActions?.(selectedTasks, isCompact, clearSelection)}\n {props.onMarkDoneMany && (\n <SelectionBarAction\n icon={CheckCheck}\n label={l.markDoneMany}\n onClick={() => {\n props.onMarkDoneMany?.(markable)\n clearSelection()\n }}\n disabled={markable.length === 0}\n isCompact={isCompact}\n tooltip={l.markDoneManyHint}\n testId=\"task-bulk-done\"\n />\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.deleteMany}\n onClick={() => {\n props.onDeleteMany?.(deletable)\n clearSelection()\n }}\n disabled={deletable.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"task-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n {moving && props.onMove && (\n <TaskMoveDialog\n open\n onOpenChange={(open) => !open && setMoving(null)}\n options={moveTargets(tasks, moving).map((t) => ({ id: t.external_id, label: nameOf(t) }))}\n currentParentId={moving.parent_conversation_ext_id}\n onPick={(parentId) => props.onMove?.(moving, parentId)}\n labels={{\n title: l.moveToTitle(nameOf(moving)),\n none: l.moveToNone,\n search: l.moveToSearch,\n empty: l.moveToEmpty,\n cancel: l.moveToCancel,\n }}\n />\n )}\n </div>\n )\n}\n","import { useState } from 'react'\nimport {\n CheckCheck,\n ListTodo,\n ChevronDown,\n ChevronRight,\n FileText,\n MoreHorizontal,\n Plus,\n Trash2,\n Workflow,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { FilterInput, type FilterField } from '../../shell/FilterInput'\nimport { TriStateFilterMenu, type TriState } from '../../settings/TriStateFilterMenu'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { EmptyState } from '../../components/EmptyState'\nimport { PersonPill } from './PersonPill'\nimport { TaskStatusPill } from './TaskStatusPill'\nimport { TaskRowMenu } from './TaskRowMenu'\nimport { TaskMoveDialog } from './TaskMoveDialog'\nimport { DEFAULT_TASK_LIST_LABELS } from './taskTableLabels'\nimport { asTaskStatus } from './taskLabels'\nimport { isPlainTodo, moveTargets, ownerExtId, type TaskListRow } from './taskRows'\nimport type { TaskTableProps } from './TaskTable'\n\nexport interface TaskInboxWorkflow {\n external_id: string\n name: string\n active: boolean\n is_owner?: boolean\n last_error?: string | null\n summary?: string\n next_fire_at?: string | null\n}\nexport interface TaskInboxWorkflowActions {\n workflows?: readonly TaskInboxWorkflow[]\n onEditWorkflow?: (id: string) => void\n onCreateWorkflow?: () => void\n onToggleWorkflow?: (id: string, active: boolean) => void\n onDeleteWorkflow?: (id: string) => void\n onWorkflowHistory?: (id: string) => void\n}\nexport interface TaskInboxProps<T extends TaskListRow>\n extends TaskTableProps<T>, TaskInboxWorkflowActions {\n onFilterTextChange?: (text: string) => void\n onCreate?: () => void\n onNotify?: (task: T) => void\n}\n/** Tasks and saved workflows form one list. A workflow contains its runs; a task contains its substeps. */\nexport function TaskInbox<T extends TaskListRow>(p: TaskInboxProps<T>) {\n const [filterOpen, setFilterOpen] = useState(false)\n const [statusFilters, setStatusFilters] = useState<Map<string, TriState>>(\n () => new Map([['done', 'exclude']])\n )\n const [localQuery, setLocalQuery] = useState('')\n const [searchFields, setSearchFields] = useState<FilterField[]>(['text', 'labels'])\n const [selected, setSelected] = useState<Set<string>>(new Set())\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set())\n const [moving, setMoving] = useState<T | null>(null)\n const l = { ...DEFAULT_TASK_LIST_LABELS, ...p.labels }\n const nameOf = (t: T) =>\n t.title?.trim() || (t.workflow_ext_id && p.workflowNames?.[t.workflow_ext_id]) || l.untitled\n const all = p.tasks.filter((t) => t.status != null)\n const filterText = p.filterText ?? localQuery\n const q = filterText.trim().toLowerCase()\n const included = [...statusFilters].filter(([, state]) => state === 'include').map(([id]) => id)\n const statusMatches = (t: T) =>\n statusFilters.get(asTaskStatus(t.status)) !== 'exclude' &&\n (!included.length || included.includes(asTaskStatus(t.status)))\n const rows = all.filter(\n (t) =>\n statusMatches(t) &&\n (!q ||\n [\n searchFields.includes('text') ? `${nameOf(t)} ${t.description ?? ''}` : '',\n searchFields.includes('labels') && t.workflow_ext_id\n ? (p.workflowNames?.[t.workflow_ext_id] ?? '')\n : '',\n ]\n .join(' ')\n .toLowerCase()\n .includes(q))\n )\n const hasActiveFilters = !!q || [...statusFilters.values()].some((state) => state != null)\n const selectedTasks = all.filter((t) => selected.has(t.external_id))\n const canEdit = (t: T) => t.is_owner !== false || Boolean(p.canEditShared)\n const markable = (t: T) =>\n t.status !== 'done' && t.status !== 'generating' && canEdit(t) && !t.in_progress\n const markableTasks = selectedTasks.filter(markable)\n const deletableTasks = selectedTasks.filter((t) => t.is_owner !== false || p.isWorkspaceOwner)\n const clearSelection = () => setSelected(new Set())\n const toggle = (set: React.Dispatch<React.SetStateAction<Set<string>>>, id: string) =>\n set((old) => {\n const next = new Set(old)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n const person = (t: T) => {\n const id = ownerExtId(t)\n return {\n id,\n label:\n t.is_owner !== false ? 'You' : (p.people?.find((x) => x.id === id)?.label ?? l.someone),\n isMe: t.is_owner !== false,\n }\n }\n const renderPerson = p.renderPerson ?? ((value) => <PersonPill person={value} />)\n const taskById = new Map(all.map((t) => [t.external_id, t]))\n const visible = new Set(rows.map((t) => t.external_id))\n // Keep the parent as context when only a child matches a filter.\n for (const task of rows) {\n let id = task.parent_conversation_ext_id\n const seen = new Set<string>()\n while (id && taskById.has(id) && !seen.has(id)) {\n seen.add(id)\n visible.add(id)\n id = taskById.get(id)?.parent_conversation_ext_id\n }\n }\n const listed = all.filter((t) => visible.has(t.external_id))\n const roots = listed.filter(\n (t) => !t.parent_conversation_ext_id || !visible.has(t.parent_conversation_ext_id)\n )\n const workflows = (p.workflows ?? []).filter((w) => {\n const runs = roots.filter((t) => t.workflow_ext_id === w.external_id)\n return runs.length > 0 || (!included.length && (!q || w.name.toLowerCase().includes(q)))\n })\n const workflowIds = new Set(workflows.map((w) => w.external_id))\n const order = (a: T, b: T) => {\n const weight = (t: T) =>\n t.pending_auth_request_id || t.last_error\n ? 0\n : t.status === 'todo'\n ? 1\n : t.status === 'generating'\n ? 2\n : 3\n return weight(a) - weight(b) || (b.updated_at ?? '').localeCompare(a.updated_at ?? '')\n }\n const renderTask = (task: T, depth = 0): React.ReactNode => {\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const busy = p.busyId === id\n const children = listed.filter((t) => t.parent_conversation_ext_id === id).sort(order)\n const outputs = p.outputsByTask?.[id] ?? []\n return (\n <li key={id} data-testid={`task-inbox-row-${id}`}>\n <div\n className={cn(\n 'relative flex cursor-pointer items-start gap-2 border-b py-3 hover:bg-muted/40',\n selected.has(id) && 'bg-muted/60'\n )}\n onClick={(event) => {\n if (\n !(event.target as HTMLElement).closest(\n 'button, a, input, select, textarea, [role=\"menuitem\"], [role=\"checkbox\"], [role=\"combobox\"]'\n )\n ) {\n p.onOpenThread(id, task)\n }\n }}\n style={{ paddingLeft: `${Math.min(depth, 5) * 20}px` }}\n >\n {children.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0\"\n aria-label={`${collapsed.has(id) ? 'Expand' : 'Collapse'} ${nameOf(task)}`}\n onClick={() => toggle(setCollapsed, id)}\n >\n {collapsed.has(id) ? (\n <ChevronRight className=\"size-4\" />\n ) : (\n <ChevronDown className=\"size-4\" />\n )}\n </Button>\n )}\n <div className=\"min-w-0 flex-1\">\n <button\n className={cn(\n 'block w-full text-left text-sm font-medium hover:underline',\n status === 'done' && 'text-muted-foreground'\n )}\n data-testid={`task-open-${id}`}\n onClick={() => p.onOpenThread(id, task)}\n >\n {nameOf(task)}\n </button>\n <div className=\"mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground\">\n {status !== 'todo' && (\n <TaskStatusPill\n id={id}\n status={task.status}\n runStartedAt={task.run_started_at}\n lastError={task.last_error}\n awaitingAccess={Boolean(task.pending_auth_request_id)}\n />\n )}\n {task.due_at && <span>Due {p.formatDate(task.due_at)}</span>}\n {children.length > 0 && (\n <span>\n {\n all.filter((t) => t.parent_conversation_ext_id === id && t.status === 'done')\n .length\n }\n /{all.filter((t) => t.parent_conversation_ext_id === id).length} steps complete\n </span>\n )}\n </div>\n {outputs.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-2\" aria-label=\"Outputs\">\n {outputs.map((output) => (\n <Button\n key={output.id}\n variant=\"link\"\n size=\"sm\"\n className=\"h-auto max-w-full gap-1 px-0 py-1 text-xs\"\n disabled={!p.onOpenOutput}\n onClick={() => p.onOpenOutput?.(output.id, task)}\n data-testid={`task-output-${id}-${output.id}`}\n >\n <FileText className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{output.name}</span>\n </Button>\n ))}\n </div>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {task.pending_auth_request_id && task.is_owner !== false && p.onGrantAccess && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={busy}\n onClick={() => p.onGrantAccess?.(task)}\n >\n Allow access\n </Button>\n )}\n <TaskRowMenu\n task={task}\n status={status}\n busy={busy}\n isOwner={task.is_owner !== false}\n canAdmin={task.is_owner !== false || Boolean(p.isWorkspaceOwner)}\n canEdit={canEdit(task)}\n canMarkDone={markable(task)}\n canReopen={canEdit(task)}\n selected={selected.has(id)}\n onToggleSelected={\n p.selectionActions || p.onMarkDoneMany || p.onDeleteMany\n ? () => toggle(setSelected, id)\n : undefined\n }\n labels={l}\n onMarkDone={() => p.onMarkDone(task)}\n onNotify={p.onNotify ? () => p.onNotify?.(task) : undefined}\n onReopen={() => p.onReopen(task)}\n onEdit={() => p.onEdit(task)}\n onAddSubtask={p.onAddSubtask ? () => p.onAddSubtask?.(task) : undefined}\n onMoveTo={p.onMove ? () => setMoving(task) : undefined}\n onOpenActivity={p.onOpenActivity ? () => p.onOpenActivity?.(task) : undefined}\n onToggleShared={\n p.onToggleShared ? () => p.onToggleShared?.(task, !task.is_shared) : undefined\n }\n />\n </div>\n </div>\n {children.length > 0 && !collapsed.has(id) && (\n <ul>{children.map((child) => renderTask(child, depth + 1))}</ul>\n )}\n </li>\n )\n }\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\" data-testid={p.testId ?? 'task-inbox'}>\n <TabHeader\n testId=\"tasks-tab-header\"\n tabs={[\n {\n id: 'tasks',\n label: '',\n count: rows.length,\n countPlacement: 'leading',\n countIcon: <ListTodo className=\"size-3.5\" />,\n hasActiveFilters,\n testId: 'tasks-tab',\n presentation: 'count',\n },\n ]}\n activeTabId=\"tasks\"\n onTabChange={() => {}}\n firstTabContent={\n <FilterInput\n value={filterText}\n onChange={p.onFilterTextChange ?? setLocalQuery}\n fields={searchFields}\n onFieldsChange={setSearchFields}\n labels={{ fieldNames: { text: 'Task', labels: 'Workflow' } }}\n className=\"w-44 max-w-[40vw]\"\n testIds={{\n root: 'tasks-filter',\n input: 'tasks-filter-input',\n fieldsButton: 'tasks-filter-fields',\n }}\n filter={\n <TriStateFilterMenu\n testId=\"tasks-status-filter\"\n open={filterOpen}\n onOpenChange={setFilterOpen}\n filterStates={statusFilters}\n onFiltersChange={setStatusFilters}\n options={[\n {\n id: 'todo',\n label: 'To do',\n count: all.filter((t) => t.status === 'todo').length,\n },\n {\n id: 'generating',\n label: 'Generating',\n count: all.filter((t) => t.status === 'generating').length,\n },\n {\n id: 'done',\n label: 'Completed',\n count: all.filter((t) => t.status === 'done').length,\n },\n ]}\n groups={[{ label: 'Status', options: ['todo', 'generating', 'done'] }]}\n triggerClassName=\"flex h-5 items-center gap-0.5 rounded px-1 text-muted-foreground hover:text-foreground pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n renderChevron\n disableHoverOpen\n />\n }\n />\n }\n rightContent={\n p.onCreate ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-testid=\"new-task-button\">\n <Plus className=\"mr-1 size-4\" />\n New\n <ChevronDown className=\"ml-1 size-3\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onSelect={p.onCreate}>Task</DropdownMenuItem>\n {p.onCreateWorkflow && (\n <DropdownMenuItem onSelect={p.onCreateWorkflow}>Saved workflow</DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : (\n p.header\n )\n }\n />\n <div className=\"min-h-0 flex-1 overflow-y-auto\" aria-busy={p.isLoading}>\n {p.isLoading ? (\n <p className=\"py-12 text-center text-sm text-muted-foreground\">Loading work…</p>\n ) : !listed.length && !workflows.length ? (\n <EmptyState\n title={q ? 'No matches' : all.length ? 'You’re all caught up' : 'No work here yet'}\n description=\"Create a task from a prompt or a saved workflow. Keep its drafts and outputs together.\"\n />\n ) : (\n <ul>\n {workflows.map((w) => {\n const runs = roots.filter((t) => t.workflow_ext_id === w.external_id).sort(order)\n const editable = w.is_owner !== false || p.canEditShared\n return (\n <li key={w.external_id} data-testid={`task-workflow-${w.external_id}`}>\n <div className=\"flex items-start gap-2 border-b py-3\">\n {runs.length > 0 ? (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={`${collapsed.has(w.external_id) ? 'Expand' : 'Collapse'} ${w.name}`}\n onClick={() => toggle(setCollapsed, w.external_id)}\n >\n {collapsed.has(w.external_id) ? (\n <ChevronRight className=\"size-4\" />\n ) : (\n <ChevronDown className=\"size-4\" />\n )}\n </Button>\n ) : (\n <Workflow className=\"mx-1 mt-1 size-4 shrink-0 text-muted-foreground\" />\n )}\n <div className=\"min-w-0 flex-1\">\n <button\n className=\"block text-left text-sm font-medium hover:underline\"\n disabled={!editable}\n onClick={() => p.onEditWorkflow?.(w.external_id)}\n >\n {w.name}\n </button>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Saved workflow · {w.summary ?? 'Run when needed'}\n {!w.active ? ' · Paused' : ''}\n {runs.length\n ? ` · ${runs.length} ${runs.length === 1 ? 'task' : 'tasks'}`\n : ''}\n </p>\n {w.last_error && (\n <p className=\"mt-1 text-xs text-destructive\">{w.last_error}</p>\n )}\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n aria-label={`Actions for ${w.name}`}\n >\n <MoreHorizontal className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {p.onWorkflowHistory && (\n <DropdownMenuItem onSelect={() => p.onWorkflowHistory?.(w.external_id)}>\n Run history\n </DropdownMenuItem>\n )}\n {editable && p.onToggleWorkflow && (\n <DropdownMenuItem\n onSelect={() => p.onToggleWorkflow?.(w.external_id, !w.active)}\n >\n {w.active ? 'Pause' : 'Resume'}\n </DropdownMenuItem>\n )}\n {(w.is_owner !== false || p.isWorkspaceOwner) && p.onDeleteWorkflow && (\n <DropdownMenuItem onSelect={() => p.onDeleteWorkflow?.(w.external_id)}>\n Delete workflow\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n {!collapsed.has(w.external_id) && runs.length > 0 && (\n <ul>{runs.map((t) => renderTask(t, 1))}</ul>\n )}\n </li>\n )\n })}\n {roots\n .filter((t) => !t.workflow_ext_id || !workflowIds.has(t.workflow_ext_id))\n .sort(order)\n .map((t) => renderTask(t))}\n </ul>\n )}\n </div>\n <SelectionBar count={selectedTasks.length} onClear={clearSelection}>\n {(isCompact) => (\n <>\n {p.selectionActions?.(selectedTasks, isCompact, clearSelection)}\n {p.onMarkDoneMany && (\n <SelectionBarAction\n icon={CheckCheck}\n label={l.markDoneMany}\n isCompact={isCompact}\n disabled={!markableTasks.length}\n onClick={() => {\n p.onMarkDoneMany?.(markableTasks)\n clearSelection()\n }}\n testId=\"task-bulk-done\"\n />\n )}\n {p.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.deleteMany}\n isCompact={isCompact}\n disabled={!deletableTasks.length}\n onClick={() => {\n p.onDeleteMany?.(deletableTasks)\n clearSelection()\n }}\n className=\"text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"task-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n {moving && p.onMove && (\n <TaskMoveDialog\n open\n onOpenChange={(open) => !open && setMoving(null)}\n options={moveTargets(all, moving).map((t) => ({ id: t.external_id, label: nameOf(t) }))}\n currentParentId={moving.parent_conversation_ext_id}\n onPick={(id) => p.onMove?.(moving, id)}\n labels={{\n title: l.moveToTitle(nameOf(moving)),\n none: l.moveToNone,\n search: l.moveToSearch,\n empty: l.moveToEmpty,\n cancel: l.moveToCancel,\n }}\n />\n )}\n </div>\n )\n}\n","import { useMemo, useRef, useState, type ReactNode } from 'react'\nimport { MessageSquare } from 'lucide-react'\nimport { ThreadVisibilityIcon } from '@arbidocs/react/ui'\nimport { ThreadStatusLine } from './ThreadStatusLine'\nimport { EntityChip } from '../../components/EntityChip'\nimport { CellHoverIcon } from '../../files/cells/HoverIconCell'\nimport type { ColDef, ICellRendererParams, ValueGetterParams } from 'ag-grid-community'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar } from '../../files/SelectionBar'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { FilterInput } from '../../shell/FilterInput'\nimport { useIsPhone } from '../../lib/use-media-query'\n\n/** Only fields on the conversation object: no message or participant fetches. */\nexport interface ConversationListRow {\n external_id: string\n title?: string | null\n created_at?: string | null\n updated_at?: string | null\n created_by_ext_id?: string | null\n assistant_mode?: string | null\n message_count?: number | null\n is_shared?: boolean | null\n is_owner?: boolean | null\n status?: string | null\n in_progress?: boolean | null\n last_message_role?: string | null\n last_message_updated_at?: string | null\n last_message_actor?: {\n external_id: string\n given_name: string\n family_name?: string | null\n picture?: string | null\n parent_ext_id?: string | null\n } | null\n last_message_status?: string | null\n /** Set when the thread is a call's meeting chat. */\n meeting_call_ext_id?: string | null\n}\n\nexport interface ConversationListViewProps<T extends ConversationListRow> {\n conversations: T[]\n isLoading?: boolean\n visibilityFilters?: { me: 'include' | 'exclude' | null; workspace: 'include' | 'exclude' | null }\n doneFilter?: 'include' | 'exclude' | null\n /** \"Meetings\": only (include) or no (exclude) meeting threads. */\n meetingFilter?: 'include' | 'exclude' | null\n filterText?: string\n header?: ReactNode\n /** Below the list: the launcher that starts a new thread from here. */\n footer?: ReactNode\n showHeader?: boolean\n formatDate: (iso: string) => string\n renderThread?: (conversation: T) => ReactNode\n renderBy?: (conversation: T) => ReactNode\n renderStatus?: (conversation: T) => ReactNode\n renderOwner?: (conversation: T) => ReactNode\n renderLabels?: (conversation: T) => ReactNode\n labelText?: (conversation: T) => string\n onOpen: (conversation: T) => void\n onRename: (conversation: T) => void\n onDelete: (conversation: T) => void\n canEditShared?: boolean\n isWorkspaceOwner?: boolean\n selectionActions?: (selected: T[], compact: boolean, clear: () => void) => ReactNode\n}\n\n/** Shared title/label filtering and latest-activity ordering for the header and grid. */\nexport function filterConversationRows<T extends ConversationListRow>(\n conversations: T[],\n query: string,\n labelText?: (row: T) => string,\n doneFilter: 'include' | 'exclude' | null = 'exclude',\n visibilityFilters?: { me: 'include' | 'exclude' | null; workspace: 'include' | 'exclude' | null },\n meetingFilter: 'include' | 'exclude' | null = null\n): T[] {\n const q = query.trim().toLowerCase()\n return [...conversations]\n .sort(\n (a, b) =>\n (Date.parse(b.last_message_updated_at || b.updated_at || b.created_at || '') || 0) -\n (Date.parse(a.last_message_updated_at || a.updated_at || a.created_at || '') || 0)\n )\n .filter((row) =>\n doneFilter === 'exclude'\n ? row.status !== 'done'\n : doneFilter === 'include'\n ? row.status === 'done'\n : true\n )\n .filter((row) => {\n const state = row.is_shared ? visibilityFilters?.workspace : visibilityFilters?.me\n const hasIncluded =\n visibilityFilters?.me === 'include' || visibilityFilters?.workspace === 'include'\n return state !== 'exclude' && (!hasIncluded || state === 'include')\n })\n .filter((row) =>\n meetingFilter === 'include'\n ? !!row.meeting_call_ext_id\n : meetingFilter === 'exclude'\n ? !row.meeting_call_ext_id\n : true\n )\n .filter((row) => !q || `${row.title ?? ''} ${labelText?.(row) ?? ''}`.toLowerCase().includes(q))\n}\n\n/** Conversation history ordered by activity, including conversations attached to work. */\nexport function ConversationListView<T extends ConversationListRow>(\n p: ConversationListViewProps<T>\n) {\n const liveProps = useRef(p)\n liveProps.current = p\n const [query, setQuery] = useState('')\n const [selected, setSelected] = useState<Set<string>>(new Set())\n const q = `${query} ${p.filterText ?? ''}`.trim().toLowerCase()\n // On a phone the thread name and labels stay; the other columns are hidden. Labels get a fixed\n // width there so the grid overflows and scrolls sideways instead of squeezing them into the edge.\n const isPhone = useIsPhone()\n const rows = useMemo(\n () =>\n filterConversationRows(\n p.conversations,\n q,\n p.labelText,\n p.doneFilter,\n p.visibilityFilters,\n p.meetingFilter\n ),\n [p.conversations, q, p.labelText, p.doneFilter, p.visibilityFilters, p.meetingFilter]\n )\n const selectedRows = p.conversations.filter((c) => selected.has(c.external_id))\n const hasLabels = p.conversations.some((c) => !!p.labelText?.(c))\n const columns = useMemo<ColDef<T>[]>(\n () => [\n {\n colId: 'name',\n headerName: 'Thread',\n flex: 2,\n minWidth: 200,\n valueGetter: ({ data }) => data?.title?.trim() || 'Untitled thread',\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && (\n <div className=\"group flex h-full min-w-0 items-center gap-2\">\n <div className=\"min-w-0\">\n {liveProps.current.renderThread ? (\n liveProps.current.renderThread(data)\n ) : (\n <EntityChip\n icon={\n <ThreadVisibilityIcon shared={data.is_shared ?? false} className=\"size-4\" />\n }\n label={data.title?.trim() || 'Untitled thread'}\n pillTooltip=\"Open conversation\"\n labelMaxWidth=\"max-w-full\"\n onClick={() => liveProps.current.onOpen(data)}\n testId={`thread-open-${data.external_id}`}\n />\n )}\n </div>\n {/* How long it is, beside its name (not a column of its own). */}\n {(data.message_count ?? 0) > 0 && (\n <span\n className=\"inline-flex h-5 shrink-0 items-center gap-0.5 self-center rounded-full bg-muted px-1.5 text-[10px] font-medium leading-none tabular-nums text-muted-foreground\"\n title={`${data.message_count} ${data.message_count === 1 ? 'message' : 'messages'}`}\n data-testid={`thread-messages-${data.external_id}`}\n >\n <MessageSquare className=\"size-3\" aria-hidden />\n {data.message_count}\n </span>\n )}\n {(data.is_owner !== false || liveProps.current.canEditShared) && (\n <button\n type=\"button\"\n aria-label={`Rename ${data.title?.trim() || 'Untitled thread'}`}\n onClick={() => liveProps.current.onRename(data)}\n data-testid={`thread-rename-${data.external_id}`}\n className=\"shrink-0 pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center\"\n >\n <CellHoverIcon />\n </button>\n )}\n </div>\n ),\n },\n // Labels only when a thread has some (an empty column only takes the names' room), and never\n // on a phone, where the status is what a row must say.\n ...(liveProps.current.renderLabels && hasLabels && !isPhone\n ? [\n {\n colId: 'labels',\n headerName: 'Labels',\n flex: 0.5,\n minWidth: 100,\n valueGetter: ({ data }: ValueGetterParams<T>) =>\n data ? (liveProps.current.labelText?.(data) ?? '') : '',\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && liveProps.current.renderLabels?.(data),\n },\n ]\n : []),\n {\n colId: 'status',\n headerName: 'Status',\n width: isPhone ? 170 : 240,\n valueGetter: ({ data }) => data?.status,\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data &&\n (liveProps.current.renderStatus ? (\n liveProps.current.renderStatus(data)\n ) : (\n <ThreadStatusLine\n state={data.status === 'done' ? 'done' : data.status === 'todo' ? 'todo' : 'ready'}\n />\n )),\n },\n // Who spoke last (their face) and when: the two read together, at the row's end.\n ...(liveProps.current.renderBy || liveProps.current.renderOwner\n ? [\n {\n colId: liveProps.current.renderBy ? 'by' : 'owner',\n headerName: liveProps.current.renderBy ? 'By' : 'Owner',\n width: 64,\n hide: isPhone,\n sortable: false,\n resizable: false,\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && (liveProps.current.renderBy || liveProps.current.renderOwner)?.(data),\n },\n ]\n : []),\n {\n colId: 'activity',\n initialSort: 'desc',\n headerName: 'Updated',\n width: 128,\n hide: isPhone,\n valueGetter: ({ data }) =>\n data?.last_message_updated_at || data?.updated_at || data?.created_at || '',\n valueFormatter: ({ value }) => (value ? liveProps.current.formatDate(value) : '—'),\n cellClass: 'flex items-center text-xs text-muted-foreground/80',\n },\n ],\n [\n Boolean(p.renderThread),\n Boolean(p.renderLabels),\n Boolean(p.renderOwner),\n Boolean(p.renderBy),\n Boolean(p.renderStatus),\n isPhone,\n hasLabels,\n ]\n )\n // Every cell's content sits in the middle of its row (a two-line title makes rows taller).\n const centred = useMemo(\n () => columns.map((c) => ({ cellClass: 'flex items-center', ...c })),\n [columns]\n )\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\" data-testid=\"conversation-list-view\">\n {p.showHeader !== false && (\n <TabHeader\n testId=\"threads-tab-header\"\n tabs={[\n {\n id: 'threads',\n label: '',\n count: rows.length,\n countIcon: <MessageSquare className=\"size-3.5\" />,\n countPlacement: 'leading',\n presentation: 'count',\n hasActiveFilters: !!q,\n },\n ]}\n activeTabId=\"threads\"\n onTabChange={() => {}}\n firstTabContent={\n <FilterInput\n value={query}\n hideFieldPicker\n ariaLabel=\"Search threads\"\n onChange={setQuery}\n fields={['text']}\n onFieldsChange={() => {}}\n labels={{\n placeholder: 'Find a thread…',\n fieldNames: { text: 'Thread' },\n }}\n className=\"w-44 max-w-[40vw]\"\n />\n }\n rightContent={p.header}\n />\n )}\n <div className=\"min-h-0 flex-1\">\n <GridView<T>\n testId=\"threads-grid\"\n items={rows}\n columnDefs={centred}\n getItemId={(row) => row.external_id}\n getRowTestId={(row) => `thread-row-${row.external_id}`}\n onRowClick={p.onOpen}\n height=\"100%\"\n isLoading={p.isLoading}\n loadingMessage=\"Loading threads…\"\n emptyState={{\n title: q ? 'No threads match' : 'No conversations yet',\n message: p.footer\n ? 'Type below to ask ARBI, bring in people, or both.'\n : 'Use New Task to ask ARBI, bring in people, or both.',\n }}\n selection={\n p.selectionActions\n ? {\n mode: 'multiple',\n controlled: true,\n selected: selectedRows,\n onSelectionChange: (items) =>\n setSelected(new Set(items.map((item) => item.external_id))),\n }\n : undefined\n }\n gridOptions={{\n suppressClickEdit: true,\n onCellKeyDown: (event) => {\n if (\n (event.event as KeyboardEvent | undefined)?.key === 'Enter' &&\n 'column' in event &&\n event.column.getColId() === 'name' &&\n event.data\n )\n p.onOpen(event.data)\n },\n }}\n />\n </div>\n {p.footer}\n {p.selectionActions && (\n <SelectionBar count={selectedRows.length} onClear={() => setSelected(new Set())}>\n {(compact) => p.selectionActions?.(selectedRows, compact, () => setSelected(new Set()))}\n </SelectionBar>\n )}\n </div>\n )\n}\n","import { MessageSquare } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskThreadChipLabels {\n open: string\n watch: string\n none: string\n}\n\nexport const DEFAULT_TASK_THREAD_CHIP_LABELS: TaskThreadChipLabels = {\n open: 'Open thread',\n watch: 'Watch live',\n none: 'No thread yet',\n}\n\nexport interface TaskThreadChipProps {\n /** Task id: keys the test id (`task-thread-{id}`). */\n id: string\n /** The task's conversation (a task is a conversation: its own id). */\n conversationId?: string | null\n /** An agent is writing into the thread right now. */\n generating?: boolean\n onOpen: (conversationId: string) => void\n testId?: string\n labels?: Partial<TaskThreadChipLabels>\n}\n\n/** The link from a task to its thread — live-pulsing while the agent works, muted before there is one. */\nexport function TaskThreadChip({\n id,\n conversationId,\n generating = false,\n onOpen,\n testId,\n labels,\n}: TaskThreadChipProps) {\n const l = { ...DEFAULT_TASK_THREAD_CHIP_LABELS, ...labels }\n if (!conversationId) {\n return (\n <span\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: `task-thread-${id}` })}\n data-state=\"none\"\n >\n <MessageSquare className=\"size-3.5 opacity-50\" aria-hidden />\n {l.none}\n </span>\n )\n }\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-7 gap-1.5 px-2 text-xs pointer-coarse:h-11',\n generating && 'text-ai-ink hover:text-ai-ink'\n )}\n onClick={() => onOpen(conversationId)}\n data-testid={testIdOr(testId, { testId: `task-thread-${id}` })}\n data-state={generating ? 'live' : 'idle'}\n >\n <span className=\"relative flex size-3.5 items-center justify-center\">\n {generating && (\n <span className=\"absolute inline-flex size-full animate-ping rounded-full bg-ai-soft\" />\n )}\n <MessageSquare className=\"relative size-3.5\" aria-hidden />\n </span>\n {generating ? l.watch : l.open}\n </Button>\n )\n}\n","import { ListTodo, Plus, Workflow } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { TabHeader, type Tab } from '../../shell/TabHeader'\n\n/** Fixed strings of the Tasks page chrome. */\nexport interface TasksChromeLabels {\n tasksTab: string\n newTask: string\n}\n\nexport const DEFAULT_TASKS_CHROME_LABELS: TasksChromeLabels = {\n tasksTab: 'Tasks',\n newTask: 'New task',\n}\n\nexport interface TasksToolbarProps {\n /** Number of tasks (shown on the single \"Tasks\" tab). */\n count: number\n onNewTask: () => void\n testIds?: Partial<{ tab: string; newTask: string }>\n labels?: Partial<TasksChromeLabels>\n}\n\n/** The Tasks page header: one \"Tasks\" tab with a count, and New task (the page's primary action). */\nexport function TasksToolbar({ count, onNewTask, testIds, labels }: TasksToolbarProps) {\n const l = { ...DEFAULT_TASKS_CHROME_LABELS, ...labels }\n const tabs: Tab[] = [\n {\n id: 'tasks',\n label: l.tasksTab,\n icon: <ListTodo className=\"size-4\" />,\n count,\n testId: testIdOr(testIds?.tab, { testId: 'tasks-tab' }),\n },\n ]\n return (\n <div className=\"sticky top-0 z-10 bg-background\" data-slot=\"tasks-toolbar\">\n <TabHeader\n tabs={tabs}\n activeTabId=\"tasks\"\n onTabChange={() => {}}\n rightContent={\n <Button\n onClick={onNewTask}\n data-testid={testIdOr(testIds?.newTask, { testId: 'task-new' })}\n >\n <Plus size={16} className=\"mr-1.5\" />\n {l.newTask}\n </Button>\n }\n />\n </div>\n )\n}\n\n/** Fixed strings of the Workflows page chrome. */\nexport interface WorkflowsChromeLabels {\n workflowsTab: string\n newWorkflow: string\n}\n\nexport const DEFAULT_WORKFLOWS_CHROME_LABELS: WorkflowsChromeLabels = {\n workflowsTab: 'Workflows',\n newWorkflow: 'New workflow',\n}\n\nexport interface WorkflowsToolbarProps {\n /** Number of workflows (shown on the single \"Workflows\" tab). */\n count: number\n onNewWorkflow: () => void\n testIds?: Partial<{ tab: string; newWorkflow: string }>\n labels?: Partial<WorkflowsChromeLabels>\n}\n\n/** The Workflows page header: one \"Workflows\" tab with a count, and New workflow. */\nexport function WorkflowsToolbar({ count, onNewWorkflow, testIds, labels }: WorkflowsToolbarProps) {\n const l = { ...DEFAULT_WORKFLOWS_CHROME_LABELS, ...labels }\n const tabs: Tab[] = [\n {\n id: 'workflows',\n label: l.workflowsTab,\n icon: <Workflow className=\"size-4\" />,\n count,\n testId: testIdOr(testIds?.tab, { testId: 'workflows-tab' }),\n },\n ]\n return (\n <div className=\"sticky top-0 z-10 bg-background\" data-slot=\"workflows-toolbar\">\n <TabHeader\n tabs={tabs}\n activeTabId=\"workflows\"\n onTabChange={() => {}}\n rightContent={\n <Button\n onClick={onNewWorkflow}\n data-testid={testIdOr(testIds?.newWorkflow, { testId: 'workflow-new' })}\n >\n <Plus size={16} className=\"mr-1.5\" />\n {l.newWorkflow}\n </Button>\n }\n />\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\nimport {\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\n\n/** Notifications are invitations to follow up in the thread, without assigning a review stage. */\nexport function ThreadNotifyDialog({\n open,\n onOpenChange,\n people,\n isShared,\n onNotify,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n people: readonly { id: string; label: string }[]\n isShared: boolean\n onNotify: (ids: string[]) => Promise<unknown>\n}) {\n const [selected, setSelected] = useState<string[]>([])\n const [query, setQuery] = useState('')\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n useEffect(() => {\n if (open) {\n setSelected([])\n setQuery('')\n setError(null)\n }\n }, [open])\n return (\n <Dialog\n open={open}\n onOpenChange={(value) => {\n if (!busy) onOpenChange(value)\n }}\n >\n <DialogContent className=\"max-w-sm\" data-testid=\"thread-notify-dialog\">\n <DialogTitle>Notify</DialogTitle>\n <DialogDescription>\n {isShared\n ? 'Ask someone to follow up in this thread.'\n : 'Notifying someone shares this thread with your workspace.'}\n </DialogDescription>\n <Input\n aria-label=\"Find people\"\n placeholder=\"Find someone…\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n />\n <div className=\"max-h-64 overflow-y-auto space-y-1\">\n {people\n .filter((person) => person.label.toLowerCase().includes(query.toLowerCase()))\n .map((person) => (\n <label\n key={person.id}\n className=\"flex cursor-pointer items-center gap-2 rounded px-2 py-2 hover:bg-muted\"\n >\n <Checkbox\n disabled={busy}\n checked={selected.includes(person.id)}\n onCheckedChange={(checked) =>\n setSelected((old) =>\n checked ? [...old, person.id] : old.filter((id) => id !== person.id)\n )\n }\n />\n {person.label}\n </label>\n ))}\n {!people.length && (\n <p className=\"text-sm text-muted-foreground\">No other workspace members yet.</p>\n )}\n </div>\n {error && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {error}\n </p>\n )}\n <Button\n disabled={busy || !selected.length}\n data-testid=\"thread-notify-submit\"\n onClick={async () => {\n setBusy(true)\n setError(null)\n try {\n await onNotify(selected)\n onOpenChange(false)\n } catch (failure) {\n setError(failure instanceof Error ? failure.message : 'Could not notify people')\n } finally {\n setBusy(false)\n }\n }}\n >\n {busy ? 'Notifying…' : 'Notify'}\n </Button>\n </DialogContent>\n </Dialog>\n )\n}\n","import { ARBI_MARK_SRC, UserEntity } from '@arbidocs/react/ui'\n\nexport interface TurnSpeakerProfile {\n external_id: string\n given_name: string\n family_name?: string | null\n picture?: string | null\n parent_ext_id?: string | null\n}\n\n/** A last-turn speaker, using only metadata returned with the conversation list. */\nexport function ConversationTurnSpeaker({\n role,\n actor,\n currentUserId,\n colorClass,\n platformName = 'ARBI',\n platformLogoSrc = ARBI_MARK_SRC,\n variant = 'pill',\n}: {\n role?: string | null\n actor?: TurnSpeakerProfile | null\n currentUserId?: string\n colorClass?: string\n platformName?: string\n platformLogoSrc?: string\n /** `icon`: the face alone (its name on hover), for a narrow column. */\n variant?: 'icon' | 'pill'\n}) {\n if (!role) return <span className=\"text-muted-foreground\">—</span>\n if (role === 'assistant' && !actor)\n return (\n <UserEntity\n size=\"sm\"\n variant={variant}\n interactive={false}\n picture={platformLogoSrc}\n avatarImageClassName=\"object-contain p-0.5\"\n initials={platformName.charAt(0)}\n displayName={platformName}\n />\n )\n if (!actor) return <span className=\"text-muted-foreground\">Unknown participant</span>\n const isMe = actor.external_id === currentUserId\n const displayName = isMe ? 'You' : [actor.given_name, actor.family_name].filter(Boolean).join(' ')\n return (\n <UserEntity\n size=\"sm\"\n variant={variant}\n interactive={false}\n isMe={isMe}\n isAgent={actor.external_id.startsWith('agt-')}\n displayName={displayName}\n initials={`${actor.given_name.charAt(0)}${actor.family_name?.charAt(0) ?? ''}`.toUpperCase()}\n picture={actor.picture}\n colorClass={colorClass}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/agents/workflows/useWorkflowPreview.ts","../src/agents/definitions/AgentCard.tsx","../src/agents/definitions/AgentGallery.tsx","../src/agents/skills/SkillCard.tsx","../src/agents/skills/SkillRow.tsx","../src/agents/tasks/elapsed.ts","../src/agents/tasks/UploadTaskItem.tsx","../src/agents/tasks/UploadTaskList.tsx","../src/agents/tasks/TaskOutputsCell.tsx","../src/agents/tasks/TaskMoveDialog.tsx","../src/agents/tasks/TaskRowMenu.tsx","../src/agents/tasks/TaskStatusPill.tsx","../src/agents/tasks/taskColumns.tsx","../src/agents/tasks/gridWidth.ts","../src/agents/tasks/taskTableLabels.ts","../src/agents/tasks/TaskTable.tsx","../src/agents/tasks/TaskInbox.tsx","../src/agents/tasks/ConversationListView.tsx","../src/agents/tasks/TaskThreadChip.tsx","../src/agents/tasks/TasksChrome.tsx","../src/agents/tasks/ThreadNotifyDialog.tsx","../src/agents/tasks/ConversationTurnSpeaker.tsx"],"names":["workflowSteps","useState","initialRunInputs","useRef","useEffect","stepPhase","composeStepPrompt","useWorkflowView","formatCount","goalProgress","jsxs","cn","testIdOr","jsx","ActionLink","Button","MessageSquare","Eye","ClipboardList","Pencil","Copy","Trash2","EmptyState","Bot","Sparkles","Plus","activateOnKey","SkillTypeBadge","SkillGlobalBadge","SkillActionButton","Download","Lock","Globe","minutes","Check","X","Loader2","SkipForward","FileX","AlertTriangle","StatusIcon","DropdownMenu","DropdownMenuTrigger","FileText","DropdownMenuContent","DropdownMenuItem","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Input","CornerDownRight","MoreHorizontal","KeyRound","RotateCcw","CheckCheck","History","ListPlus","Fragment","DropdownMenuSeparator","CircleDashed","asTaskStatus","STATUS_LABELS","STATUS_TONE","ToneBadge","AlertCircle","useMemo","indexTasks","ownerExtId","PersonPill","STATUS_ORDER","buildTaskRows","isPlainTodo","descendantIds","ChevronDown","ChevronRight","Workflow","VisibilityToggle","ChevronsUpDown","ChevronsDownUp","ListTodo","GridView","SelectionBar","SelectionBarAction","moveTargets","TabHeader","FilterInput","TriStateFilterMenu","useIsPhone","EntityChip","ThreadVisibilityIcon","CellHoverIcon","ThreadStatusLine","Checkbox","ARBI_MARK_SRC","UserEntity"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAwBO,SAAS,kBAAA,CACd,QAAA,EACA,EAAE,MAAA,GAAS,UAAA,EAAY,OAAA,GAAU,GAAA,EAAK,eAAA,EAAiB,OAAA,EAAQ,GAA+B,EAAC,EAC9E;AACjB,EAAA,MAAM,KAAA,GAAQA,gCAAc,QAAQ,CAAA;AACpC,EAAA,MAAM,CAAC,QAAQ,SAAS,CAAA,GAAIC,eAAyB,MAAMC,kCAAA,CAAiB,QAAQ,CAAC,CAAA;AACrF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAID,cAAA,CAA4C,EAAE,CAAA;AAC1E,EAAA,MAAM,GAAA,GAAM,CAAC,EAAA,EAAY,KAAA,KAA6B,UAAU,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,CAAC,EAAE,GAAG,OAAM,CAAE,CAAA;AAI9F,EAAA,MAAM,MAAA,GAASE,YAAA,iBAAO,IAAI,GAAA,EAA4C,CAAA;AACtE,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAA,KAAA,MAAW,CAAA,IAAK,OAAA,CAAQ,MAAA,EAAO,eAAgB,CAAC,CAAA;AAChD,MAAA,OAAA,CAAQ,KAAA,EAAM;AACd,MAAA,SAAA;AAAA,QAAU,CAAC,MACT,MAAA,CAAO,WAAA;AAAA,UACL,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAE,IAAI,CAAC,CAAC,EAAA,EAAI,CAAC,CAAA,KAAM;AAAA,YACjC,EAAA;AAAA,YACA,EAAE,MAAA,KAAW,SAAA,GAAY,EAAE,MAAA,EAAQ,WAAU,GAAI;AAAA,WAClD;AAAA;AACH,OACF;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,SAAS,CAAA,EAAG;AAE/D,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AAAA,MACjB,CAAC,CAAA,KAAA,CACE,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,IAAA,KAAS,QAAA,KAAaC,2BAAA,CAAU,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,EAAE,CAAA,KAAM;AAAA,KACtF;AACA,IAAA,IAAI,CAAC,IAAA,IAAS,IAAA,CAAK,SAAS,OAAA,IAAW,IAAA,CAAK,SAAS,QAAA,EAAW;AAChE,IAAA,MAAM,MAAA,GACJ,IAAA,CAAK,IAAA,KAAS,OAAA,GACVC,mCAAA,CAAkB,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,EAAE,eAAA,EAAiB,OAAA,EAAS,CAAA,GACtE,EAAA;AACN,IAAA,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,EAAE,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,EAAG,CAAA;AACvE,IAAA,MAAA,CAAO,OAAA,CAAQ,GAAA;AAAA,MACb,IAAA,CAAK,EAAA;AAAA,MACL,WAAW,MAAM;AACf,QAAA,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAC7B,QAAA,GAAA;AAAA,UACE,IAAA,CAAK,EAAA;AAAA,UACL,IAAA,CAAK,IAAA,KAAS,OAAA,GACV,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,YAAY,MAAM,CAAA,EAAE,GAC3D,EAAE,QAAQ,MAAA;AAAO,SACvB;AAAA,MACF,GAAG,OAAO;AAAA,KACZ;AAAA,EAGF,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAC,CAAA;AAE5B,EAAA,OAAOC,iCAAA,CAAgB;AAAA,IACrB,KAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA,EAAU,CAAC,IAAA,EAAM,KAAA,KAAU,UAAU,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,CAAC,IAAI,GAAG,OAAM,CAAE,CAAA;AAAA,IACrE,QAAA,EAAU,OAAO,IAAA,KAAS,GAAA,CAAI,KAAK,EAAA,EAAI,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAAA,IACzD,IAAA,EAAM,OAAO,EAAA,KAAO,GAAA,CAAI,IAAI,EAAE,MAAA,EAAQ,WAAW,CAAA;AAAA,IACjD,KAAA,EAAO,OAAO,EAAA,KAAO,GAAA,CAAI,IAAI,EAAE,MAAA,EAAQ,WAAW,CAAA;AAAA,IAClD,UAAU,CAAC,EAAA,KAAO,MAAA,CAAO,EAAE,GAAG,MAAA,KAAW;AAAA,GAC1C,CAAA;AACH;ACpEO,IAAM,yBAAA,GAA6C;AAAA,EACxD,OAAA,EAAS,SAAA;AAAA,EACT,gBAAA,EAAkB,SAAA;AAAA,EAClB,YAAA,EAAc,CAAC,KAAA,KAAU,CAAA,EAAG,KAAK,CAAA,QAAA,CAAA;AAAA,EACjC,SAAA,EAAW,CAAC,KAAA,KACV,KAAA,GAAQ,CAAA,GAAIC,6BAAA,CAAY,KAAA,EAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,CAAA,GAAI,cAAA;AAAA,EACpE,SAAS,CAAC,GAAA,EAAK,UAAU,CAAA,OAAA,EAAK,GAAG,IAAI,KAAK,CAAA,IAAA,CAAA;AAAA,EAC1C,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,SAAA;AAAA,EACT,UAAA,EAAY,aAAA;AAAA,EACZ,IAAA,EAAM,MAAA;AAAA,EACN,WAAA,EAAa,cAAA;AAAA,EACb,WAAA,EAAa,CAAC,IAAA,KAAS,CAAA,aAAA,EAAgB,IAAI,CAAA;AAC7C;AA+CA,IAAM,MAAA,GAAS,8CAAA;AAGR,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA,EAAAC,aAAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgF;AAC9E,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,yBAAA,EAA2B,GAAG,MAAA,EAAO;AACpD,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,SAAA,EAAWC,KAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MAClD,aAAA,EAAaC,0BAAA,CAAS,MAAA,IAAU,OAAA,EAAS,IAAA,EAAM,EAAE,MAAA,EAAQ,CAAA,WAAA,EAAc,IAAI,CAAA,CAAA,EAAI,CAAA;AAAA,MAC/E,WAAA,EAAU,YAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAF,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,MAAA;AAAA,YACA,eAAe,CAAA,oBACdG,cAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,8DAAA;AAAA,gBACV,IAAA,EAAK,KAAA;AAAA,gBACL,cAAY,CAAA,CAAE,gBAAA;AAAA,gBAEd,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iEAAA,EAAkE;AAAA;AAAA;AACpF,WAAA,EAEJ,CAAA;AAAA,0BACAH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,IAAA,mBACCG,cAAA;AAAA,cAACC,4BAAA;AAAA,cAAA;AAAA,gBACC,IAAA;AAAA,gBACA,QAAA;AAAA,gBACA,SAAA,EAAU,iEAAA;AAAA,gBAET,QAAA,EAAA;AAAA;AAAA,aACH,mBAEAD,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wBAAwB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,4BAE5CH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EACZ,QAAA,EAAA;AAAA,cAAA,YAAA,GAAe,oBACdG,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gDAAA,EACb,YAAE,YAAA,CAAa,YAAY,CAAA,EAC9B,CAAA,kCAEC,MAAA,EAAA,EAAK,SAAA,EAAU,yCACb,QAAA,EAAA,CAAA,CAAE,SAAA,CAAU,SAAS,CAAA,EACxB,CAAA;AAAA,cAEDJ,aAAAA,oBACCI,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EACb,QAAA,EAAA,CAAA,CAAE,OAAA,CAAQJ,aAAAA,CAAa,GAAA,EAAKA,aAAAA,CAAa,KAAK,CAAA,EACjD;AAAA,aAAA,EAEJ,CAAA;AAAA,YACC;AAAA,WAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACZ,QAAA,EAAA;AAAA,UAAA,SAAA,oBACCA,eAAA;AAAA,YAACK,SAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,SAAA,EAAW,MAAA;AAAA,cACX,OAAA,EAAS,SAAA;AAAA,cACT,aAAA,EAAaH,2BAAS,OAAA,EAAS,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAA,cAAA,EAAiB,IAAI,CAAA,CAAA,EAAI,CAAA;AAAA,cAE3E,QAAA,EAAA;AAAA,gCAAAC,cAAA,CAACG,yBAAA,EAAA,EAAc,MAAM,EAAA,EAAI,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE,CAAA,CAAE;AAAA;AAAA;AAAA,WACjC;AAAA,UAED,OAAA,oBACCN,eAAA;AAAA,YAACK,SAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,SAAA,EAAWJ,KAAA,CAAG,MAAA,EAAQ,+BAA+B,CAAA;AAAA,cACrD,OAAA,EAAS,OAAA;AAAA,cACT,aAAA,EAAaC,2BAAS,OAAA,EAAS,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAA,EAAI,CAAA;AAAA,cAE3E,QAAA,EAAA;AAAA,gCAAAC,cAAA,CAACI,eAAA,EAAA,EAAI,MAAM,EAAA,EAAI,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE,CAAA,CAAE;AAAA;AAAA;AAAA,WACvB;AAAA,UAED,YAAA,oBACCP,eAAA;AAAA,YAACK,SAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,SAAA,EAAW,MAAA;AAAA,cACX,OAAA,EAAS,YAAA;AAAA,cACT,aAAA,EAAaH,2BAAS,OAAA,EAAS,UAAA,EAAY,EAAE,MAAA,EAAQ,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAA,EAAI,CAAA;AAAA,cAElF,QAAA,EAAA;AAAA,gCAAAC,cAAA,CAACK,yBAAA,EAAA,EAAc,MAAM,EAAA,EAAI,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE,CAAA,CAAE;AAAA;AAAA;AAAA,WACjC;AAAA,UAED,MAAA,oBACCR,eAAA;AAAA,YAACK,SAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,SAAA,EAAW,MAAA;AAAA,cACX,OAAA,EAAS,MAAA;AAAA,cACT,aAAA,EAAaH,2BAAS,OAAA,EAAS,IAAA,EAAM,EAAE,MAAA,EAAQ,CAAA,WAAA,EAAc,IAAI,CAAA,CAAA,EAAI,CAAA;AAAA,cAErE,QAAA,EAAA;AAAA,gCAAAC,cAAA,CAACM,kBAAA,EAAA,EAAO,MAAM,EAAA,EAAI,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE,CAAA,CAAE;AAAA;AAAA;AAAA,WAC1B;AAAA,UAED,aAAA,oBACCT,eAAA;AAAA,YAACK,SAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,SAAA,EAAWJ,KAAA,CAAG,MAAA,EAAQ,uBAAuB,CAAA;AAAA,cAC7C,OAAA,EAAS,aAAA;AAAA,cACT,aAAA,EAAaC,2BAAS,OAAA,EAAS,WAAA,EAAa,EAAE,MAAA,EAAQ,CAAA,mBAAA,EAAsB,IAAI,CAAA,CAAA,EAAI,CAAA;AAAA,cAEpF,QAAA,EAAA;AAAA,gCAAAC,cAAA,CAACO,gBAAA,EAAA,EAAK,MAAM,EAAA,EAAI,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE,CAAA,CAAE;AAAA;AAAA;AAAA,WACxB;AAAA,UAED,QAAA,oBACCP,cAAA;AAAA,YAACE,SAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,SAAA,EAAWJ,KAAA,CAAG,MAAA,EAAQ,mDAAmD,CAAA;AAAA,cACzE,OAAA,EAAS,QAAA;AAAA,cACT,YAAA,EAAY,CAAA,CAAE,WAAA,CAAY,IAAI,CAAA;AAAA,cAC9B,aAAA,EAAaC,2BAAS,OAAA,EAAS,MAAA,EAAQ,EAAE,MAAA,EAAQ,CAAA,aAAA,EAAgB,IAAI,CAAA,CAAA,EAAI,CAAA;AAAA,cAEzE,QAAA,kBAAAC,cAAA,CAACQ,kBAAA,EAAA,EAAO,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AACpB,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;ACzNO,IAAM,4BAAA,GAAmD;AAAA,EAC9D,WAAA,EAAa,wCAAA;AAAA,EACb,UAAA,EAAY,yBAAA;AAAA,EACZ,gBAAA,EACE,qHAAA;AAAA,EACF,QAAA,EAAU,iBAAA;AAAA,EACV,QAAA,EAAU;AACZ;AAsBO,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,4BAAA,EAA8B,GAAG,MAAA,EAAO;AACvD,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,uBACER,eAAC,KAAA,EAAA,EAAI,SAAA,EAAWF,MAAG,MAAA,EAAQ,SAAS,GAClC,QAAA,kBAAAE,cAAAA;AAAA,MAACS,4BAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,8BAAA;AAAA,QACV,IAAA,EAAMC,eAAA;AAAA,QACN,OAAO,CAAA,CAAE,UAAA;AAAA,QACT,aAAa,CAAA,CAAE,gBAAA;AAAA,QACf,wBACEb,eAAAA;AAAA,UAACK,SAAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,QAAA;AAAA,YACT,SAAA,EAAU,SAAA;AAAA,YACV,eAAaH,0BAAA,CAAS,OAAA,EAAS,UAAU,EAAE,MAAA,EAAQ,mBAAmB,CAAA;AAAA,YAEtE,QAAA,EAAA;AAAA,8BAAAC,cAAAA,CAACW,oBAAA,EAAA,EAAS,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,cAAE,GAAA;AAAA,cAAE,CAAA,CAAE;AAAA;AAAA;AAAA;AAC5B;AAAA,KAEJ,EACF,CAAA;AAAA,EAEJ;AACA,EAAA,uBACEd,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EACH,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kEAAA,EACb,QAAA,EAAA;AAAA,sBAAAG,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,WAAA,IAAe,EAAE,WAAA,EAAY,CAAA;AAAA,sBACnFH,eAAAA;AAAA,QAACK,SAAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,QAAA;AAAA,UACT,SAAA,EAAU,iCAAA;AAAA,UACV,eAAaH,0BAAA,CAAS,OAAA,EAAS,cAAc,EAAE,MAAA,EAAQ,uBAAuB,CAAA;AAAA,UAE9E,QAAA,EAAA;AAAA,4BAAAC,cAAAA,CAACY,gBAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,YAAE,GAAA;AAAA,YAAE,CAAA,CAAE;AAAA;AAAA;AAAA;AACxB,KAAA,EACF,CAAA;AAAA,oBACAZ,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,4DAAA;AAAA,QACV,eAAaD,0BAAA,CAAS,OAAA,EAAS,SAAS,EAAE,MAAA,EAAQ,iBAAiB,CAAA;AAAA,QACnE,WAAA,EAAU,eAAA;AAAA,QAET;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AC3EO,IAAM,yBAAA,GAA6C;AAAA,EACxD,MAAA,EAAQ,QAAA;AAAA,EACR,WAAA,EAAa,yCAAA;AAAA,EACb,OAAA,EAAS,eAAA;AAAA,EACT,IAAA,EAAM,YAAA;AAAA,EACN,MAAA,EAAQ,cAAA;AAAA,EACR,WAAA,EAAa,cAAA;AAAA,EACb,kBAAA,EAAoB,0BAAA;AAAA,EACpB,OAAA,EAAS;AACX;AAwCO,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA,GAAa,MAAA;AAAA,EACb,OAAA,GAAU,IAAA;AAAA,EACV,IAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4F;AAC1F,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,yBAAA,EAA2B,GAAG,MAAA,EAAO;AACpD,EAAA,MAAM,WAAW,UAAA,KAAe,QAAA;AAChC,EAAA,uBACEF,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,SAAA,EAAWC,KAAAA;AAAA,QACT,2MAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA;AAAA,MACA,SAAA,EAAWe,gCAAc,OAAO,CAAA;AAAA,MAChC,iBAAA,EAAiB,IAAA;AAAA,MACjB,aAAA,EAAad,2BAAS,MAAA,IAAU,OAAA,EAAS,MAAM,EAAE,MAAA,EAAQ,cAAc,CAAA;AAAA,MACvE,WAAA,EAAU,YAAA;AAAA,MAET,QAAA,EAAA;AAAA,QAAA,IAAA,oBAAQC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAwC,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,QACrE,IAAA;AAAA;AAAA,0BAECA,eAAC,MAAA,EAAA,EAAK,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EACtC,QAAA,kBAAAH,eAAAA;AAAA,YAACI,4BAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,QAAA,EAAU,OAAA;AAAA,cACV,SAAA,EAAU,iDAAA;AAAA,cACX,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBACG;AAAA;AAAA;AAAA,WACJ,EACF;AAAA,4BAEAJ,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDAAA,EAAkD,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE;AAAA,SAAA,EAAK,CAAA;AAAA,QAE1E,QAAQ,IAAA,KAAS,UAAA,oBAAcG,cAAAA,CAACc,oCAAe,IAAA,EAAY,CAAA;AAAA,QAC3D,QAAA,oBAAYd,cAAAA,CAACe,kCAAA,EAAA,EAAiB,QAAQ,CAAA,EAAG,CAAA;AAAA,wBAC1Cf,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mHACb,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,wBACAH,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAA,EAA2C,aAAU,oBAAA,EACnE,QAAA,EAAA;AAAA,0BAAAG,cAAAA;AAAA,YAACgB,mCAAA;AAAA,YAAA;AAAA,cACC,OAAO,CAAA,CAAE,OAAA;AAAA,cACT,OAAA,EAAS,SAAA;AAAA,cACT,QAAQjB,0BAAA,CAAS,OAAA,EAAS,SAAS,EAAE,MAAA,EAAQ,wBAAwB,CAAA;AAAA,cAErE,QAAA,kBAAAC,cAAAA,CAACI,eAAAA,EAAA,EAAI,WAAU,8BAAA,EAA+B;AAAA;AAAA,WAChD;AAAA,0BACAJ,cAAAA;AAAA,YAACgB,mCAAA;AAAA,YAAA;AAAA,cACC,OAAO,CAAA,CAAE,IAAA;AAAA,cACT,OAAA,EAAS,MAAA;AAAA,cACT,QAAQjB,0BAAA,CAAS,OAAA,EAAS,MAAM,EAAE,MAAA,EAAQ,qBAAqB,CAAA;AAAA,cAE/D,QAAA,kBAAAC,cAAAA,CAACM,kBAAAA,EAAA,EAAO,WAAU,8BAAA,EAA+B;AAAA;AAAA,WACnD;AAAA,0BACAN,cAAAA;AAAA,YAACgB,mCAAA;AAAA,YAAA;AAAA,cACC,OAAO,CAAA,CAAE,MAAA;AAAA,cACT,OAAA,EAAS,QAAA;AAAA,cACT,QAAQjB,0BAAA,CAAS,OAAA,EAAS,QAAQ,EAAE,MAAA,EAAQ,uBAAuB,CAAA;AAAA,cAEnE,QAAA,kBAAAC,cAAAA,CAACiB,oBAAA,EAAA,EAAS,SAAA,EAAU,8BAAA,EAA+B;AAAA;AAAA,WACrD;AAAA,UACC,OAAA,IAAW,sCACVjB,cAAAA;AAAA,YAACgB,mCAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,QAAA,GAAW,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,OAAA;AAAA,cACpC,OAAA,EAAS,QAAA,GAAW,CAAA,CAAE,kBAAA,GAAqB,CAAA,CAAE,OAAA;AAAA,cAC7C,OAAA,EAAS,kBAAA;AAAA,cACT,MAAA,EAAQjB,0BAAA,CAAS,OAAA,EAAS,gBAAA,EAAkB;AAAA,gBAC1C,MAAA,EAAQ;AAAA,eACT,CAAA;AAAA,cAEA,QAAA,EAAA,QAAA,mBACCC,cAAAA,CAACkB,gBAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAA+B,CAAA,mBAE/ClB,cAAAA,CAACmB,iBAAA,EAAA,EAAM,SAAA,EAAU,qBAAA,EAAsB;AAAA;AAAA;AAE3C,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;ACjJO,IAAM,wBAAA,GAA2C;AAAA,EACtD,MAAA,EAAQ,QAAA;AAAA,EACR,WAAA,EAAa,yCAAA;AAAA,EACb,OAAA,EAAS,SAAA;AAAA,EACT,IAAA,EAAM,MAAA;AAAA,EACN,WAAA,EAAa,cAAA;AAAA,EACb,OAAA,EAAS,wBAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,WAAA,EAAa,CAAC,IAAA,KAAS,CAAA,QAAA,EAAW,IAAI,CAAA,cAAA;AACxC;AAwBO,SAAS,QAAA,CAAS;AAAA,EACvB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0F;AACxF,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,wBAAA,EAA0B,GAAG,MAAA,EAAO;AACnD,EAAA,uBACEtB,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,SAAA,EAAWC,KAAAA;AAAA,QACT,sKAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAS,QAAA;AAAA,MACT,SAAA,EAAWe,gCAAc,QAAQ,CAAA;AAAA,MACjC,aAAA,EAAad,2BAAS,MAAA,EAAQ,EAAE,QAAQ,CAAA,iBAAA,EAAoB,IAAI,IAAI,CAAA;AAAA,MACpE,WAAA,EAAU,WAAA;AAAA,MACV,KAAA,EAAO,CAAA,CAAE,WAAA,CAAY,IAAI,CAAA;AAAA,MAExB,QAAA,EAAA;AAAA,QAAA,IAAA,oBAAQC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAwC,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBACtEH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACZ,QAAA,EAAA;AAAA,YAAA,IAAA;AAAA;AAAA,8BAECG,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,SAAA,EAAU,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAC1D,0BAAAH,eAAAA,CAACI,4BAAA,EAAA,EAAW,MAAY,QAAA,EAAU,QAAA,EAAU,WAAU,4BAAA,EAA6B,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBAC/E;AAAA,eAAA,EACJ,CAAA,EACF;AAAA,gCAEAJ,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EAA6B,QAAA,EAAA;AAAA,cAAA,GAAA;AAAA,cAAE;AAAA,aAAA,EAAK,CAAA;AAAA,YAErD,QAAQ,IAAA,KAAS,UAAA,oBAAcG,cAAAA,CAACc,oCAAe,IAAA,EAAY,CAAA;AAAA,YAC3D,QAAA,oBAAYd,cAAAA,CAACe,kCAAA,EAAA,EAAiB,QAAQ,CAAA,EAAG;AAAA,WAAA,EAC5C,CAAA;AAAA,UACC,+BAAef,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAA0C,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EACvF,CAAA;AAAA,wBACAH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,0BAAAG,cAAAA,CAACgB,mCAAA,EAAA,EAAkB,KAAA,EAAO,CAAA,CAAE,SAAS,OAAA,EAAS,MAAM,SAAA,EAAU,EAC5D,0BAAAhB,cAAAA,CAACI,eAAAA,EAAA,EAAI,SAAA,EAAU,UAAS,CAAA,EAC1B,CAAA;AAAA,UACC,0BACCJ,cAAAA,CAACgB,mCAAA,EAAA,EAAkB,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,MAAA,IAC/C,QAAA,kBAAAhB,cAAAA,CAACM,oBAAA,EAAO,SAAA,EAAU,UAAS,CAAA,EAC7B,CAAA;AAAA,UAED,mCACCN,cAAAA;AAAA,YAACgB,mCAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,QAAA,GAAW,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,OAAA;AAAA,cACpC,OAAA,EAAS,MAAM,eAAA,EAAgB;AAAA,cAE9B,QAAA,EAAA,QAAA,mBAAWhB,cAAAA,CAACkB,gBAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA,mBAAKlB,cAAAA,CAACmB,iBAAAA,EAAA,EAAM,WAAU,qBAAA,EAAsB;AAAA;AAAA,WACnF;AAAA,UAED,4BACCnB,cAAAA,CAACgB,mCAAA,EAAA,EAAkB,KAAA,EAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,MAAM,QAAA,IACjD,QAAA,kBAAAhB,cAAAA,CAACQ,oBAAA,EAAO,SAAA,EAAU,2BAA0B,CAAA,EAC9C;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;;;ACnIO,SAAS,aAAA,CAAc,WAAmB,OAAA,EAA0B;AACzE,EAAA,MAAM,SAAA,GAAA,CAAa,OAAA,IAAW,IAAA,CAAK,GAAA,EAAI,IAAK,SAAA;AAC5C,EAAA,IAAI,YAAY,GAAA,EAAM,OAAO,GAAG,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA,EAAA,CAAA;AACrD,EAAA,IAAI,SAAA,GAAY,KAAO,OAAO,CAAA,EAAG,KAAK,KAAA,CAAM,SAAA,GAAY,GAAI,CAAC,CAAA,CAAA,CAAA;AAC7D,EAAA,IAAI,YAAY,IAAA,EAAS;AACvB,IAAA,MAAMY,QAAAA,GAAU,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,GAAK,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAO,SAAA,GAAY,MAAS,GAAI,CAAA;AACrD,IAAA,OAAO,OAAA,GAAU,IAAI,CAAA,EAAGA,QAAO,KAAK,OAAO,CAAA,CAAA,CAAA,GAAM,GAAGA,QAAO,CAAA,CAAA,CAAA;AAAA,EAC7D;AACA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,IAAO,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAO,SAAA,GAAY,OAAW,GAAK,CAAA;AACxD,EAAA,OAAO,OAAA,GAAU,IAAI,CAAA,EAAG,KAAK,KAAK,OAAO,CAAA,CAAA,CAAA,GAAM,GAAG,KAAK,CAAA,CAAA,CAAA;AACzD;ACPA,IAAM,eAAA,uBAAsB,GAAA,CAAI,CAAC,WAAW,YAAA,EAAc,UAAA,EAAY,WAAW,CAAC,CAAA;AAClF,IAAM,mCAAmB,IAAI,GAAA,CAAI,CAAC,QAAA,EAAU,GAAG,eAAe,CAAC,CAAA;AAQ/D,IAAM,KAAA,GAAoC;AAAA,EACxC,WAAW,EAAE,IAAA,EAAM,mBAAmB,GAAA,EAAK,kBAAA,EAAoB,MAAMC,iBAAA,EAAM;AAAA,EAC3E,QAAQ,EAAE,IAAA,EAAM,iBAAiB,GAAA,EAAK,gBAAA,EAAkB,MAAMC,aAAA,EAAE;AAAA,EAChE,SAAS,EAAE,IAAA,EAAM,kBAAkB,GAAA,EAAK,iBAAA,EAAmB,MAAMC,mBAAA,EAAQ;AAAA,EACzE,YAAY,EAAE,IAAA,EAAM,kBAAkB,GAAA,EAAK,iBAAA,EAAmB,MAAMA,mBAAA,EAAQ;AAAA,EAC5E,UAAU,EAAE,IAAA,EAAM,kBAAkB,GAAA,EAAK,iBAAA,EAAmB,MAAMA,mBAAA,EAAQ;AAAA,EAC1E,WAAW,EAAE,IAAA,EAAM,kBAAkB,GAAA,EAAK,iBAAA,EAAmB,MAAMA,mBAAA,EAAQ;AAAA,EAC3E,QAAQ,EAAE,IAAA,EAAM,oBAAoB,GAAA,EAAK,mBAAA,EAAqB,MAAMA,mBAAA,EAAQ;AAAA,EAC5E,SAAS,EAAE,IAAA,EAAM,kBAAkB,GAAA,EAAK,iBAAA,EAAmB,MAAMC,uBAAA,EAAY;AAAA,EAC7E,OAAO,EAAE,IAAA,EAAM,oBAAoB,GAAA,EAAK,mBAAA,EAAqB,MAAMC,iBAAA,EAAM;AAAA,EACzE,eAAe,EAAE,IAAA,EAAM,oBAAoB,GAAA,EAAK,mBAAA,EAAqB,MAAMC,yBAAA;AAC7E,CAAA;AACA,IAAM,eAA2B,EAAE,IAAA,EAAM,kBAAkB,GAAA,EAAK,iBAAA,EAAmB,MAAMH,mBAAA,EAAQ;AAa1F,IAAM,+BAAA,GAAwD;AAAA,EACnE,MAAA,EAAQ,QAAA;AAAA,EACR,WAAA,EAAa,aAAA;AAAA,EACb,QAAA,EAAU,CAAC,QAAA,KAAa,CAAA,EAAG,QAAQ,CAAA,SAAA,CAAA;AAAA,EACnC,QAAQ,CAAC,MAAA,EAAQ,OAAA,KAAY,CAAA,EAAG,OAAO,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,MAAM,OAAO,CAAA,CAAA;AAC/F;AA8BO,SAAS,cAAA,CAAe;AAAA,EAC7B,MAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,+BAAA,EAAiC,GAAG,MAAA,EAAO;AAC1D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAInC,eAAS,EAAE,CAAA;AAEzC,EAAAG,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,UAAA,CAAW,EAAE,CAAA;AACb,MAAA;AAAA,IACF;AACA,IAAA,IAAI,gBAAA,CAAiB,GAAA,CAAI,MAAM,CAAA,EAAG;AAChC,MAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,aAAA,CAAc,SAAS,CAAC,CAAA;AACtD,MAAA,IAAA,EAAK;AACL,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,IAAA,EAAM,GAAI,CAAA;AACvC,MAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,IACrC;AACA,IAAA,UAAA,CAAW,aAAA,CAAc,SAAA,EAAW,OAAO,CAAC,CAAA;AAAA,EAC9C,CAAA,EAAG,CAAC,SAAA,EAAW,OAAA,EAAS,MAAM,CAAC,CAAA;AAE/B,EAAA,MAAM,OAAA,GAAU,QAAA,GAAW,CAAA,GAAI,QAAA,GAAW,QAAA,GAAW,GAAA;AACrD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAM,CAAA,IAAK,YAAA;AAC9B,EAAA,MAAMoC,cAAa,IAAA,CAAK,IAAA;AAExB,EAAA,uBACE9B,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,KAAAA;AAAA,QACT,2EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAaC,0BAAA,CAAS,OAAA,EAAS,IAAA,GAAO,MAAM,CAAA,EAAG,EAAE,MAAA,EAAQ,CAAA,UAAA,EAAa,MAAM,CAAA,CAAA,EAAI,CAAA;AAAA,MAChF,WAAA,EAAU,kBAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACb,QAAA,EAAA;AAAA,0BAAAG,cAAAA,CAAC,SAAI,SAAA,EAAWF,KAAAA,CAAG,YAAY,IAAA,CAAK,IAAI,GACtC,QAAA,kBAAAE,cAAAA,CAAC2B,aAAA,EAAW,SAAA,EAAW7B,MAAG,QAAA,EAAU,eAAA,CAAgB,IAAI,MAAM,CAAA,IAAK,cAAc,CAAA,EAAG,CAAA,EACtF,CAAA;AAAA,UACC,4BAAYE,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAY,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,0BACjDA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,6CAAA;AAAA,cACV,KAAA,EAAO,QAAA;AAAA,cACP,aAAA,EAAaD,0BAAA,CAAS,OAAA,EAAS,QAAA,GAAW,MAAM,CAAA,EAAG,EAAE,MAAA,EAAQ,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAA,EAAI,CAAA;AAAA,cAEvF,QAAA,EAAA;AAAA;AAAA;AACH,SAAA,EACF,CAAA;AAAA,wBAEAC,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qEAAA;AAAA,YACV,aAAA,EAAaD,0BAAA,CAAS,OAAA,EAAS,WAAA,GAAc,MAAM,CAAA,EAAG;AAAA,cACpD,MAAA,EAAQ,qBAAqB,MAAM,CAAA;AAAA,aACpC,CAAA;AAAA,YACD,IAAA,EAAK,aAAA;AAAA,YACL,eAAA,EAAe,CAAA;AAAA,YACf,eAAA,EAAe,GAAA;AAAA,YACf,eAAA,EAAe,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAAA,YACjC,YAAA,EAAY,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAAA,YAE/B,QAAA,kBAAAC,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAWF,KAAAA,CAAG,wDAAA,EAA0D,IAAA,CAAK,GAAG,CAAA;AAAA,gBAChF,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA;AAAI;AAAA;AAChC;AAAA,SACF;AAAA,wBAEAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,yBAAA;AAAA,cACV,aAAA,EAAaE,0BAAA,CAAS,OAAA,EAAS,MAAA,GAAS,MAAM,CAAA,EAAG,EAAE,MAAA,EAAQ,CAAA,YAAA,EAAe,MAAM,CAAA,CAAA,EAAI,CAAA;AAAA,cAEnF,QAAA,EAAA;AAAA,gBAAA,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,gBACpC,OAAA,oBAAWF,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,4BAAA,EAA6B,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,kBAAE,OAAA;AAAA,kBAAQ;AAAA,iBAAA,EAAC;AAAA;AAAA;AAAA,WACtE;AAAA,UAEC,MAAA,KAAW,QAAA,IAAY,QAAA,oBACtBG,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,MAAM,QAAA,CAAS,MAAM,CAAA;AAAA,cAC9B,SAAA,EAAU,mGAAA;AAAA,cACV,OAAO,CAAA,CAAE,WAAA;AAAA,cACT,aAAA,EAAaD,0BAAA,CAAS,OAAA,EAAS,MAAA,GAAS,MAAM,CAAA,EAAG,EAAE,MAAA,EAAQ,CAAA,YAAA,EAAe,MAAM,CAAA,CAAA,EAAI,CAAA;AAAA,cAEnF,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA;AACL,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;ACzIO,IAAM,+BAAA,GAAwD;AAAA,EACnE,KAAA,EAAO,cAAA;AAAA,EACP,KAAA,EAAO;AACT;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA,GAAiB,IAAA;AAAA,EACjB,OAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,+BAAA,EAAiC,GAAG,MAAA,EAAO;AAC1D,EAAA,MAAM,OAAA,GAAU,SAAS,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,YAAY,OAAO,KAAA,KAAU,YAAY,KAAA,KAAU,IAAA,GAAO,QAAQ,EAAC;AACzE,EAAA,IAAI,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;AACtC,EAAA,IAAI,MAAA,EAAQ,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,KAAM,MAAA,CAAO,EAAA,EAAI,IAAI,CAAC,CAAA;AAErE,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,iCACLC,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,sCAAA;AAAA,QACV,eAAaD,0BAAA,CAAS,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,yBAAyB,CAAA;AAAA,QAExE,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA,KACL,GACE,IAAA;AAAA,EACN;AAEA,EAAA,uBACEF,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,eAAaE,0BAAA,CAAS,OAAA,EAAS,MAAM,EAAE,MAAA,EAAQ,oBAAoB,CAAA;AAAA,MACnE,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAWD,KAAAA,CAAG,8BAAA,EAAgC,SAAS,CAAA;AAAA,MAEtD,QAAA,EAAA;AAAA,QAAA,OAAA,oBACCE,cAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qCAAA;AAAA,YACV,eAAaD,0BAAA,CAAS,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,mBAAmB,CAAA;AAAA,YAElE,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,wBAEFC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,MAAA,EAAQ,IAAI,CAAA,qBACzBA,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YAEC,MAAA;AAAA,YACA,UAAU,IAAA,CAAK,QAAA;AAAA,YACf,QAAQ,IAAA,CAAK,MAAA;AAAA,YACb,UAAU,IAAA,CAAK,QAAA;AAAA,YACf,WAAW,IAAA,CAAK,SAAA;AAAA,YAChB,SAAS,IAAA,CAAK,OAAA;AAAA,YACd,QAAA,EAAU,cAAA,GAAiB,IAAA,CAAK,QAAQ,CAAA;AAAA,YACxC,QAAA;AAAA,YACA,MAAA,EAAQ,UAAA;AAAA,YACR,SAAA,EAAU;AAAA,WAAA;AAAA,UAVL;AAAA,SAYR,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AC9EO,IAAM,gCAAA,GAA0D;AAAA,EACrE,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,CAAC,KAAA,KAAU,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAA,KAAU,CAAA,GAAI,QAAA,GAAW,SAAS,CAAA,CAAA;AAAA,EAC/D,IAAA,EAAM,CAAC,KAAA,KAAU,CAAA,CAAA,EAAI,KAAK,CAAA;AAC5B;AAYO,SAAS,gBAAgB,EAAE,EAAA,EAAI,SAAS,MAAA,EAAQ,MAAA,EAAQ,QAAO,EAAyB;AAC7F,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,gCAAA,EAAkC,GAAG,MAAA,EAAO;AAC3D,EAAA,MAAM,IAAA,GAAOD,2BAAS,MAAA,EAAQ,EAAE,QAAQ,CAAA,aAAA,EAAgB,EAAE,IAAI,CAAA;AAC9D,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACpC,IAAA,uBACEC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,eAAa,IAAA,EAAM,YAAA,EAAW,MAAA,EAC3E,QAAA,EAAA,CAAA,CAAE,IAAA,EACL,CAAA;AAAA,EAEJ;AACA,EAAA,MAAM,CAAC,KAAK,CAAA,GAAI,OAAA;AAChB,EAAA,uBACEH,gBAAC+B,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA5B,cAAAA,CAAC6B,sBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAAhC,eAAAA;AAAA,MAACK,SAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,IAAA;AAAA,QACL,SAAA,EAAU,qCAAA;AAAA,QACV,YAAA,EAAY,CAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAAA,QACjC,aAAA,EAAa,IAAA;AAAA,QACb,cAAY,OAAA,CAAQ,MAAA;AAAA,QAEpB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC8B,oBAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB,eAAW,IAAA,EAAC,CAAA;AAAA,0BACpD9B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,gBAAM,IAAA,EAAK,CAAA;AAAA,UACtC,OAAA,CAAQ,MAAA,GAAS,CAAA,oBAChBA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAA,EAAkC,QAAA,EAAA,CAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,EAAE;AAAA;AAAA;AAAA,KAEjF,EACF,CAAA;AAAA,oBACAA,eAAC+B,sBAAA,EAAA,EAAoB,KAAA,EAAM,SACxB,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZlC,eAAAA;AAAA,MAACmC,mBAAA;AAAA,MAAA;AAAA,QAEC,QAAA,EAAU,MAAM,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA;AAAA,QAC3B,aAAA,EAAa,CAAA,YAAA,EAAe,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE,CAAA,CAAA;AAAA,QAEtC,QAAA,EAAA;AAAA,0BAAAhC,cAAAA,CAAC8B,oBAAA,EAAA,EAAS,SAAA,EAAU,aAAA,EAAc,eAAW,IAAA,EAAC,CAAA;AAAA,0BAC9C9B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,YAAE,IAAA,EAAK;AAAA;AAAA,OAAA;AAAA,MAL9B,CAAA,CAAE;AAAA,KAOV,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AC3CO,SAAS,cAAA,CAAe;AAAA,EAC7B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIZ,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,KAAKW,0BAAA,CAAS,MAAA,EAAQ,EAAE,MAAA,EAAQ,aAAa,CAAA;AACnD,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AACnC,EAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC,CAAC,CAAA,GAAI,OAAA;AAC7E,EAAA,MAAM,IAAA,GAAO,CAAC,QAAA,KAA4B;AACxC,IAAA,MAAA,CAAO,QAAQ,CAAA;AACf,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA;AACA,EAAA,uBACEC,cAAAA;AAAA,IAACiC,SAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,IAAI,CAAC,IAAA,EAAM,QAAA,CAAS,EAAE,CAAA;AACtB,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB,CAAA;AAAA,MAEA,QAAA,kBAAApC,gBAACqC,gBAAA,EAAA,EAAc,YAAA,EAAa,SAAQ,SAAA,EAAU,2BAAA,EAA4B,eAAa,EAAA,EACrF,QAAA,EAAA;AAAA,wBAAArC,gBAACsC,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAnC,cAAAA,CAACoC,cAAA,EAAA,EAAa,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,0BAC3BpC,cAAAA,CAACqC,oBAAA,EAAA,EAAkB,SAAA,EAAU,SAAA,EAAW,iBAAO,KAAA,EAAM;AAAA,SAAA,EACvD,CAAA;AAAA,wBACArC,cAAAA;AAAA,UAACsC,QAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,KAAA;AAAA,YACP,aAAa,MAAA,CAAO,MAAA;AAAA,YACpB,cAAY,MAAA,CAAO,MAAA;AAAA,YACnB,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,aAAA,EAAa,GAAG,EAAE,CAAA,OAAA;AAAA;AAAA,SACpB;AAAA,wBACAzC,eAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,mDAAA;AAAA,YACV,aAAA,EAAa,GAAG,EAAE,CAAA,KAAA,CAAA;AAAA,YAEjB,QAAA,EAAA;AAAA,cAAA,CAAC,CAAA,oBACAG,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA;AAAA,gBAACE,SAAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,OAAA;AAAA,kBACR,SAAA,EAAU,oDAAA;AAAA,kBACV,UAAU,CAAC,eAAA;AAAA,kBACX,OAAA,EAAS,MAAM,IAAA,CAAK,IAAI,CAAA;AAAA,kBACxB,aAAA,EAAa,GAAG,EAAE,CAAA,KAAA,CAAA;AAAA,kBAEjB,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,eACV,EACF,CAAA;AAAA,cAED,MAAM,GAAA,CAAI,CAAC,sBACVF,cAAAA,CAAC,QACC,QAAA,kBAAAH,eAAAA;AAAA,gBAACK,SAAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,OAAA;AAAA,kBACR,SAAA,EAAU,oDAAA;AAAA,kBACV,QAAA,EAAU,EAAE,EAAA,KAAO,eAAA;AAAA,kBACnB,OAAA,EAAS,MAAM,IAAA,CAAK,CAAA,CAAE,EAAE,CAAA;AAAA,kBACxB,aAAA,EAAa,CAAA,EAAG,EAAE,CAAA,QAAA,EAAW,EAAE,EAAE,CAAA,CAAA;AAAA,kBAEjC,QAAA,EAAA;AAAA,oCAAAF,cAAAA,CAACuC,2BAAA,EAAA,EAAgB,SAAA,EAAU,mBAAA,EAAoB,eAAW,IAAA,EAAC,CAAA;AAAA,oCAC3DvC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,YAAE,KAAA,EAAM;AAAA;AAAA;AAAA,eACtC,EAAA,EAVO,CAAA,CAAE,EAWX,CACD,CAAA;AAAA,cACA,KAAA,CAAM,WAAW,CAAA,oBAChBA,eAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qDAAA,EAAuD,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM;AAAA;AAAA;AAAA,SAEtF;AAAA,wBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EACb,QAAA,kBAAAA,eAACE,SAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,SAAS,MAAM,YAAA,CAAa,KAAK,CAAA,EACxD,QAAA,EAAA,MAAA,CAAO,QACV,CAAA,EACF;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;ACjEO,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA,GAAc,OAAA;AAAA,EACd,SAAA,GAAY,OAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAId,eAAS,KAAK,CAAA;AACtC,EAAA,MAAM,KAAK,IAAA,CAAK,WAAA;AAGhB,EAAA,MAAM,SAAS,MAAA,KAAW,MAAA;AAC1B,EAAA,MAAM,OAAO,MAAA,KAAW,MAAA;AACxB,EAAA,uBACES,eAAAA,CAAC+B,eAAAA,EAAA,EAAa,IAAA,EAAY,cAAc,OAAA,EACtC,QAAA,EAAA;AAAA,oBAAA5B,cAAAA,CAAC6B,sBAAAA,EAAA,EAAoB,OAAA,EAAO,MAC1B,QAAA,kBAAA7B,cAAAA;AAAA,MAACE,SAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,SAAA,EAAU,+BAAA;AAAA,QACV,cAAY,MAAA,CAAO,WAAA;AAAA,QACnB,aAAA,EAAa,aAAa,EAAE,CAAA,CAAA;AAAA,QAE5B,0BAAAF,cAAAA,CAACwC,0BAAA,EAAA,EAAe,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,KACjD,EACF,CAAA;AAAA,oBACA3C,eAAAA,CAACkC,sBAAAA,EAAA,EAAoB,OAAM,KAAA,EACxB,QAAA,EAAA;AAAA,MAAA,gBAAA,oBACC/B,cAAAA,CAACgC,mBAAAA,EAAA,EAAiB,QAAA,EAAU,gBAAA,EAAkB,aAAA,EAAa,CAAA,YAAA,EAAe,EAAE,CAAA,CAAA,EACzE,QAAA,EAAA,QAAA,GAAW,eAAA,GAAkB,aAAA,EAChC,CAAA;AAAA,MAED,OAAA,IAAW,aAAA,IAAiB,IAAA,CAAK,uBAAA,oBAChCnC,eAAAA;AAAA,QAACmC,mBAAAA;AAAA,QAAA;AAAA,UACC,QAAA,EAAU,aAAA;AAAA,UACV,aAAA,EAAa,cAAc,EAAE,CAAA,CAAA;AAAA,UAC7B,SAAA,EAAU,kBAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAhC,cAAAA,CAACyC,oBAAA,EAAA,EAAS,SAAA,EAAU,aAAA,EAAc,eAAW,IAAA,EAAC,CAAA;AAAA,YAC7C,MAAA,CAAO;AAAA;AAAA;AAAA,OACV;AAAA,MAED,UAAU,CAAC,OAAA,GACR,IAAA,GACA,IAAA,GACE,6BACE5C,eAAAA;AAAA,QAACmC,mBAAAA;AAAA,QAAA;AAAA,UACC,QAAA,EAAU,IAAA;AAAA,UACV,QAAA,EAAU,QAAA;AAAA,UACV,aAAA,EAAa,eAAe,EAAE,CAAA,CAAA;AAAA,UAE9B,QAAA,EAAA;AAAA,4BAAAhC,cAAAA,CAAC0C,qBAAA,EAAA,EAAU,SAAA,EAAU,aAAA,EAAc,eAAW,IAAA,EAAC,CAAA;AAAA,YAC9C,MAAA,CAAO;AAAA;AAAA;AAAA,OACV,GAEF,+BACE7C,eAAAA;AAAA,QAACmC,mBAAAA;AAAA,QAAA;AAAA,UACC,QAAA,EAAU,IAAA;AAAA,UACV,QAAA,EAAU,UAAA;AAAA,UACV,aAAA,EAAa,kBAAkB,EAAE,CAAA,CAAA;AAAA,UAEjC,QAAA,EAAA;AAAA,4BAAAhC,cAAAA,CAAC2C,sBAAA,EAAA,EAAW,SAAA,EAAU,aAAA,EAAc,eAAW,IAAA,EAAC,CAAA;AAAA,YAC/C,MAAA,CAAO;AAAA;AAAA;AAAA,OACV;AAAA,MAEP,CAAC,MAAA,IAAU,cAAA,oBACV9C,eAAAA,CAACmC,mBAAAA,EAAA,EAAiB,QAAA,EAAU,cAAA,EAAgB,aAAA,EAAa,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAA,EAC1E,QAAA,EAAA;AAAA,wBAAAhC,cAAAA,CAAC4C,mBAAA,EAAA,EAAQ,SAAA,EAAU,aAAA,EAAc,eAAW,IAAA,EAAC,CAAA;AAAA,QAC5C,MAAA,CAAO;AAAA,OAAA,EACV,CAAA;AAAA,MAED,OAAA,IAAW,cAAA,oBACV5C,cAAAA,CAACgC,mBAAAA,EAAA,EAAiB,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,cAAA,EACzC,QAAA,EAAA,IAAA,CAAK,SAAA,GAAY,iBAAiB,sBAAA,EACrC,CAAA;AAAA,MAED,OAAA,IAAW,YAAA,oBACVnC,eAAAA,CAACmC,mBAAAA,EAAA,EAAiB,QAAA,EAAU,YAAA,EAAc,aAAA,EAAa,CAAA,iBAAA,EAAoB,EAAE,CAAA,CAAA,EAC3E,QAAA,EAAA;AAAA,wBAAAhC,cAAAA,CAAC6C,oBAAA,EAAA,EAAS,SAAA,EAAU,aAAA,EAAc,eAAW,IAAA,EAAC,CAAA;AAAA,QAC7C,MAAA,CAAO;AAAA,OAAA,EACV,CAAA;AAAA,MAED,OAAA,IAAW,QAAA,oBACVhD,eAAAA,CAACmC,mBAAAA,EAAA,EAAiB,QAAA,EAAU,QAAA,EAAU,aAAA,EAAa,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA,EAChE,QAAA,EAAA;AAAA,wBAAAhC,eAACuC,2BAAAA,EAAA,EAAgB,SAAA,EAAU,aAAA,EAAc,eAAW,IAAA,EAAC,CAAA;AAAA,QACpD,MAAA,CAAO;AAAA,OAAA,EACV,CAAA;AAAA,MAED,OAAA,oBACC1C,eAAAA,CAACmC,mBAAAA,EAAA,EAAiB,UAAU,MAAA,EAAQ,aAAA,EAAa,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA,EAC9D,QAAA,EAAA;AAAA,wBAAAhC,eAACM,kBAAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,eAAW,IAAA,EAAC,CAAA;AAAA,QAC3C,MAAA,GAAS,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO;AAAA,OAAA,EACnC,CAAA;AAAA,MAED,OAAA,IAAW,QAAA,oBACVT,eAAAA,CAAAiD,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA9C,eAAC+C,wBAAA,EAAA,EAAsB,CAAA;AAAA,wBACvBlD,eAAAA;AAAA,UAACmC,mBAAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,QAAQ,CAAC,QAAA;AAAA,YACnB,QAAA,EAAU,QAAA;AAAA,YACV,KAAA,EAAO,QAAA,GAAW,MAAA,GAAY,MAAA,CAAO,eAAA;AAAA,YACrC,SAAA,EAAU,yCAAA;AAAA,YACV,aAAA,EAAa,eAAe,EAAE,CAAA,CAAA;AAAA,YAE9B,QAAA,EAAA;AAAA,8BAAAhC,eAACQ,kBAAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,eAAW,IAAA,EAAC,CAAA;AAAA,cAC3C,MAAA,CAAO;AAAA;AAAA;AAAA;AACV,OAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;ACxKO,IAAM,+BAAA,GAAwD;AAAA,EACnE,gBAAA,EAAkB,oBAAA;AAAA,EAClB,aAAA,EAAe,iBAAA;AAAA,EACf,MAAA,EAAQ;AACV;AAkBA,IAAM,IAAA,GAAO,QAAA;AAEb,SAAS,UAAA,CAAW,EAAE,MAAA,EAAO,EAA8B;AACzD,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,YAAA;AACH,MAAA,uBAAOR,eAACuB,mBAAAA,EAAA,EAAQ,WAAW,CAAA,EAAG,IAAI,CAAA,aAAA,CAAA,EAAiB,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,IACjE,KAAK,MAAA;AACH,MAAA,uBAAOvB,cAAAA,CAACqB,iBAAAA,EAAA,EAAM,SAAA,EAAW,IAAA,EAAM,eAAW,IAAA,EAAC,CAAA;AAAA,IAC7C,KAAK,MAAA;AACH,MAAA,uBAAOrB,cAAAA,CAACG,yBAAAA,EAAA,EAAc,SAAA,EAAW,IAAA,EAAM,eAAW,IAAA,EAAC,CAAA;AAAA,IACrD;AACE,MAAA,uBAAOH,cAAAA,CAACgD,wBAAA,EAAA,EAAa,SAAA,EAAW,IAAA,EAAM,eAAW,IAAA,EAAC,CAAA;AAAA;AAExD;AAGA,SAAS,OAAO,MAAA,EAAyB;AACvC,EAAA,MAAM,CAAC,KAAK,MAAM,CAAA,GAAI5D,eAAS,MAAM,IAAA,CAAK,KAAK,CAAA;AAC/C,EAAAG,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,KAAA,GAAQ,YAAY,MAAM,MAAA,CAAO,KAAK,GAAA,EAAK,GAAG,GAAI,CAAA;AACxD,IAAA,OAAO,MAAM,cAAc,KAAK,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,cAAA,CAAe;AAAA,EAC7B,EAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA,GAAiB,KAAA;AAAA,EACjB,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,+BAAA,EAAiC,GAAG,MAAA,EAAO;AAC1D,EAAA,MAAM,GAAA,GAAM0D,+BAAa,MAAM,CAAA;AAC/B,EAAA,MAAM,aAAa,GAAA,KAAQ,YAAA;AAC3B,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,IAAc,OAAA,CAAQ,YAAY,CAAC,CAAA;AACtD,EAAA,MAAM,OAAA,GAAU,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA,GAAI,GAAA;AAE1D,EAAA,IAAI,IAAA,GAAeC,gCAAc,GAAG,CAAA;AACpC,EAAA,IAAI,IAAA,GAAOC,8BAAY,GAAG,CAAA;AAC1B,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,IAAA,GAAO,CAAA,CAAE,gBAAA;AACT,IAAA,IAAA,GAAO,QAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,UAAA,IAAc,CAAC,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,aAAA,CAAc,OAAA,EAAS,GAAG,CAAA,GAAI,IAAA;AAErF,EAAA,uBACEtD,gBAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAmC,WAAA,EAAU,aAAA,EAAc,OAAO,IAAA,EAChF,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAACuD,2BAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,IAAA,kBAAMpD,cAAAA,CAAC,UAAA,EAAA,EAAW,QAAQ,GAAA,EAAK,CAAA;AAAA,QAC/B,aAAA,EAAa,GAAA;AAAA,QACb,aAAA,EAAaD,2BAAS,MAAA,EAAQ,EAAE,QAAQ,CAAA,YAAA,EAAe,EAAE,IAAI,CAAA;AAAA,QAE5D,QAAA,EAAA;AAAA,UAAA,IAAA;AAAA,UACA,OAAA,oBAAWF,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,yBAAA,EAA0B,QAAA,EAAA;AAAA,YAAA,OAAA;AAAA,YAAG;AAAA,WAAA,EAAQ;AAAA;AAAA;AAAA,KACnE;AAAA,IACC,SAAA,IAAa,CAAC,UAAA,oBACbA,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,KAAA;AAAA,QACL,cAAY,CAAA,CAAE,aAAA;AAAA,QACd,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,aAAa,KAAK,SAAS,CAAA,CAAA;AAAA,QACvC,SAAA,EAAU,2EAAA;AAAA,QACV,aAAA,EAAa,cAAc,EAAE,CAAA,CAAA;AAAA,QAE7B,QAAA,EAAA;AAAA,0BAAAG,cAAAA,CAACqD,uBAAA,EAAA,EAAY,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC,CAAA;AAAA,UAC7C,CAAA,CAAE;AAAA;AAAA;AAAA;AACL,GAAA,EAEJ,CAAA;AAEJ;;;AC7FO,IAAM,aAAA,GAAgB,GAAA;AAC7B,IAAM,oBAAA,GAAuB,EAAA;AAEtB,IAAM,iBAAA,GAAoB;AAAA,EAC/B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAuBA,IAAM,YAAY,MAAM,CAAA;AAMxB,SAAS,KAA4B,MAAA,EAA4C;AAC/E,EAAA,OAAO,CAAC,MAAA,KACN,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA;AACxC;AAEO,SAAS,kBACd,CAAA,EAC0B;AAC1B,EAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,QAAA,EAAU,IAAA;AAAA,IACV,UAAA,EAAY,SAAA;AAAA,IACZ,YAAA,EAAc,CAAC,KAAA,EAAgB,MAAA,EAAiB,IAAI;AAAA,GACtD;AACA,EAAA,MAAM,IAAA,GAAwC;AAAA,IAC5C,QAAA,EAAU,KAAA;AAAA,IACV,eAAA,EAAiB,IAAA;AAAA;AAAA,IAEjB,iBAAA,EAAmB,IAAA;AAAA,IACnB,SAAA,EAAW,EAAE,OAAA,EAAS,MAAA,EAAQ,YAAY,QAAA;AAAS,GACrD;AACA,EAAA,MAAM,IAAA,GAA+B;AAAA,IACnC,GAAG,IAAA;AAAA,IACH,KAAA,EAAO,MAAA;AAAA,IACP,GAAG,QAAA;AAAA,IACH,iBAAA,EAAmB,KAAA;AAAA,IACnB,YAAY,CAAA,CAAE,OAAA;AAAA,IACd,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,GAAA;AAAA,IACV,YAAA,EAAc,IAAA,CAAK,CAAA,CAAE,UAAU;AAAA,GACjC;AACA,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,GAAG,IAAA;AAAA,IACH,KAAA,EAAO,QAAA;AAAA,IACP,YAAY,CAAA,CAAE,SAAA;AAAA,IACd,eAAe,CAAA,CAAE,MAAA;AAAA,IACjB,KAAA,EAAO,EAAA;AAAA,IACP,WAAW,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,gBAAgB,QAAA,EAAS;AAAA,IAC7E,aAAa,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,KAAK,SAAA,IAAa,KAAA;AAAA,IAC9C,YAAA,EAAc,IAAA,CAAK,CAAA,CAAE,YAAY;AAAA,GACnC;AACA,EAAA,MAAM,UAAU,OAA+B;AAAA,IAC7C,GAAG,IAAA;AAAA,IACH,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY,EAAA;AAAA;AAAA,IAEZ,MAAA,EAAQ,OAAA;AAAA,IACR,UAAA,EAAY,IAAA;AAAA,IACZ,KAAA,EAAO,CAAA,CAAE,MAAA,GAAS,oBAAA,GAAuB,aAAA;AAAA,IACzC,QAAA,EAAU,oBAAA;AAAA,IACV,WAAW,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,gBAAgB,UAAA,EAAW;AAAA,IAC/E,YAAA,EAAc,IAAA,CAAK,CAAA,CAAE,aAAa;AAAA,GACpC,CAAA;AAIA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA;AAAA,MACE,GAAG,IAAA;AAAA,MACH,KAAA,EAAO,OAAA;AAAA,MACP,GAAG,QAAA;AAAA,MACH,YAAY,CAAA,CAAE,QAAA;AAAA,MACd,eAAe,CAAA,CAAE,SAAA;AAAA,MACjB,IAAA,EAAM,GAAA;AAAA,MACN,QAAA,EAAU,GAAA;AAAA,MACV,WAAA,EAAa,CAAC,CAAA,KAAO,CAAA,CAAE,OAAO,CAAA,CAAE,YAAA,CAAa,CAAA,CAAE,IAAI,CAAA,GAAI,EAAA;AAAA,MACvD,YAAA,EAAc,IAAA,CAAK,CAAA,CAAE,WAAW;AAAA,KAClC;AAAA,IACA;AAAA,MACE,GAAG,IAAA;AAAA,MACH,KAAA,EAAO,KAAA;AAAA,MACP,GAAG,QAAA;AAAA,MACH,YAAY,CAAA,CAAE,MAAA;AAAA,MACd,IAAA,EAAM,CAAA;AAAA,MACN,QAAA,EAAU,GAAA;AAAA,MACV,aAAa,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,KAAK,MAAA,IAAU,EAAA;AAAA,MAC3C,YAAA,EAAc,IAAA,CAAK,CAAA,CAAE,SAAS;AAAA,KAChC;AAAA,IACA;AAAA,MACE,GAAG,IAAA;AAAA,MACH,KAAA,EAAO,QAAA;AAAA,MACP,GAAG,QAAA;AAAA,MACH,YAAY,CAAA,CAAE,SAAA;AAAA;AAAA,MAEd,IAAA,EAAM,GAAA;AAAA,MACN,QAAA,EAAU,GAAA;AAAA,MACV,aAAa,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,KAAK,MAAA,IAAU,EAAA;AAAA,MAC3C,YAAA,EAAc,IAAA,CAAK,CAAA,CAAE,YAAY;AAAA,KACnC;AAAA,IACA,GAAI,EAAE,WAAA,GACF;AAAA,MACE;AAAA,QACE,GAAG,IAAA;AAAA,QACH,KAAA,EAAO,SAAA;AAAA,QACP,YAAY,CAAA,CAAE,UAAA;AAAA,QACd,IAAA,EAAM,GAAA;AAAA,QACN,QAAA,EAAU,GAAA;AAAA,QACV,YAAA,EAAc,IAAA,CAAK,CAAA,CAAE,aAAa;AAAA;AACpC,QAEF,EAAC;AAAA,IACL,MAAA;AAAA,IACA,OAAA;AAAQ,GACV;AACF;;;ACxJO,SAAS,qBAAA,CACd,GAAA,EACA,SAAA,EACA,KAAA,EACM;AACN,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,GAAA,CAAI,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,EAAG,GAAA,CAAI,iBAAA,CAAkB,CAAC,IAAA,CAAK,KAAK,CAAA,EAAG,SAAA,IAAa,KAAK,QAAQ,CAAA;AAAA,EAC/F;AACF;;;ACyCO,IAAM,wBAAA,GAA2C;AAAA,EACtD,SAAA,EAAW,KAAA;AAAA,EACX,UAAA,EAAY,cAAA;AAAA,EACZ,YAAA,EACE,kKAAA;AAAA,EACF,SAAA,EAAW,iBAAA;AAAA,EACX,GAAA,EAAK,CAAC,IAAA,KAAS,IAAA;AAAA,EACf,OAAA,EAAS,CAAC,IAAA,KAAS,CAAA,EAAG,IAAI,CAAA,aAAA,CAAA;AAAA,EAC1B,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,MAAA;AAAA,EACT,QAAA,EAAU,OAAA;AAAA,EACV,SAAA,EAAW,gEAAA;AAAA,EACX,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,CAAC,KAAA,KAAU,CAAA,YAAA,EAAe,KAAK,CAAA,CAAA;AAAA,EAC3C,MAAA,EAAQ,KAAA;AAAA,EACR,SAAA,EAAW,QAAA;AAAA,EACX,EAAA,EAAI,IAAA;AAAA,EACJ,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,QAAA;AAAA,EACP,SAAA,EAAW,QAAA;AAAA,EACX,MAAA,EAAQ,2BAAA;AAAA,EACR,eAAA,EAAiB,8CAAA;AAAA,EACjB,eAAA,EAAiB,qDAAA;AAAA,EACjB,SAAS,CAAC,GAAA,EAAK,UAAU,CAAA,EAAG,GAAG,IAAI,KAAK,CAAA,IAAA,CAAA;AAAA,EACxC,cAAc,CAAC,IAAA,EAAM,UAAU,CAAA,EAAG,IAAI,IAAI,KAAK,CAAA,eAAA,CAAA;AAAA,EAC/C,cAAA,EAAgB,gBAAA;AAAA,EAChB,gBAAA,EAAkB,gBAAA;AAAA,EAClB,SAAA,EAAW,kBAAA;AAAA,EACX,UAAA,EAAY,CAAC,IAAA,KAAS,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA;AAAA,EACpC,QAAA,EAAU,WAAA;AAAA,EACV,MAAA,EAAQ,QAAA;AAAA,EACR,YAAA,EAAc,WAAA;AAAA,EACd,gBAAA,EAAkB,gCAAA;AAAA,EAClB,UAAA,EAAY,QAAA;AAAA,EACZ,MAAA,EAAQ,eAAA;AAAA,EACR,QAAA,EAAU,eAAA;AAAA,EACV,YAAA,EAAc,CAAC,IAAA,KAAS,CAAA,WAAA,EAAS,IAAI,CAAA,MAAA,CAAA;AAAA,EACrC,WAAA,EAAa,cAAA;AAAA,EACb,iBAAA,EAAmB,oBAAA;AAAA,EACnB,SAAA,EAAW,YAAA;AAAA,EACX,WAAA,EAAa,cAAA;AAAA,EACb,WAAA,EAAa,CAAC,IAAA,KAAS,CAAA,WAAA,EAAS,IAAI,CAAA,eAAA,CAAA;AAAA,EACpC,UAAA,EAAY,uBAAA;AAAA,EACZ,YAAA,EAAc,oBAAA;AAAA,EACd,WAAA,EAAa,2BAAA;AAAA,EACb,YAAA,EAAc,QAAA;AAAA,EACd,gBAAA,EAAkB,CAAC,KAAA,KAAU,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAA,KAAU,CAAA,GAAI,UAAA,GAAa,WAAW,CAAA,SAAA,CAAA;AAAA,EAC/E,UAAA,EAAY,cAAA;AAAA,EACZ,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,WAAA,EAAa,2BAAA;AAAA,EACb,WAAA,EAAa,cAAA;AAAA,EACb,WAAA,EAAa,cAAA;AAAA,EACb,QAAA,EAAU,UAAA;AAAA,EACV,YAAY,CAAC,MAAA,EAAQ,QAAQ,CAAA,EAAG,MAAM,SAAM,GAAG,CAAA,CAAA;AAAA,EAC/C,QAAQ;AACV;ACFA,IAAM,UAAA,GAAa,EAAA;AAEnB,IAAM,iBAAA,GAAoB,EAAA;AAE1B,IAAM,gBAAA,GAAmB,CAAA;AAEzB,IAAM,kBAAA,GAAqB,GAAA;AAG3B,IAAM,WAAA,GAAc,GAAA;AAGpB,IAAM,WAAA,GAA0C;AAAA,EAC9C,EAAE,KAAA,EAAO,QAAA,EAAU,QAAA,EAAU,IAAA,EAAK;AAAA,EAClC,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,GAAA,EAAI;AAAA,EAC9B,EAAE,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,GAAA,EAAI;AAAA,EAClC,EAAE,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,GAAA,EAAI;AAAA,EAChC,EAAE,KAAA,EAAO,QAAA,EAAU,QAAA,EAAU,WAAA;AAC/B,CAAA;AAKA,SAAS,UAAA,CACP,MACA,GAAA,EAIoB;AACpB,EAAA,MAAM,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,EAAE,GAAI,GAAA;AACxB,EAAA,IAAI,CAAC,CAAA,CAAE,cAAA,IAAkB,CAAC,IAAA,CAAK,YAAY,OAAO,MAAA;AAClD,EAAA,MAAM,GAAA,GAAMJ,8BAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AACpC,EAAA,MAAM,OAAO,EAAE,GAAG,+BAAA,EAAiC,GAAG,EAAE,gBAAA,EAAiB;AACzE,EAAA,MAAM,QAAQ,IAAA,CAAK,uBAAA,GAA0B,IAAA,CAAK,gBAAA,GAAmBC,gCAAc,GAAG,CAAA;AACtF,EAAA,OAAO,EAAE,UAAA,CAAW,KAAA,EAAO,EAAE,cAAA,CAAe,IAAA,CAAK,UAAU,CAAC,CAAA;AAC9D;AASO,SAAS,UAAiC,KAAA,EAA0B;AACzE,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,WAAW,MAAA,EAAQ,MAAA,EAAQ,QAAO,GAAI,KAAA;AAC/D,EAAA,MAAM,CAAA,GAAoB;AAAA,IACxB,GAAG,wBAAA;AAAA,IACH,GAAG,KAAA,CAAM,MAAA;AAAA,IACT,QAAQ,EAAE,GAAGA,iCAAe,GAAG,KAAA,CAAM,QAAQ,MAAA;AAAO,GACtD;AACA,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI9D,eAAqB,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,IAAIA,cAAAA,iBAAsB,IAAI,KAAK,CAAA;AACjE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAIA,cAAAA,iBAAsB,IAAI,KAAK,CAAA;AACrE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAoE,IAAI,CAAA;AAChG,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAmB,IAAI,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,QAAA;AACd,EAAA,MAAM,MAAA,GAASE,aAA+B,IAAI,CAAA;AAElD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIF,eAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,QAAA,GAAWE,YAAAA,iBAAO,IAAI,GAAA,EAAqB,CAAA;AAEjD,EAAA,MAAM,IAAA,GAAOgE,cAAQ,MAAMC,4BAAA,CAAW,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACrD,EAAA,MAAM,WAAA,GAAcD,aAAA;AAAA,IAClB,MAAM,IAAI,GAAA,CAAA,CAAK,KAAA,CAAM,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,KAAK,CAAC,CAAC,CAAA;AAAA,IAC9D,CAAC,MAAM,MAAM;AAAA,GACf;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KACd,IAAA,CAAK,OAAO,IAAA,EAAK,IAChB,IAAA,CAAK,eAAA,IAAmB,KAAA,CAAM,aAAA,GAAgB,IAAA,CAAK,eAAe,KACnE,CAAA,CAAE,QAAA;AAEJ,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAwB;AACrC,IAAA,MAAM,EAAA,GAAKE,6BAAW,IAAI,CAAA;AAC1B,IAAA,MAAM,IAAA,GAAO,KAAK,QAAA,KAAa,KAAA;AAC/B,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,KAAA,EAAO,OAAO,CAAA,CAAE,EAAA,GAAA,CAAO,MAAM,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA,KAAM,CAAA,CAAE,OAAA;AAAA,MACvD,IAAA,EAAM;AAAA,KACR;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAAwB;AACvC,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,iBAAA,IAAqB,IAAA,CAAK,YAAA;AAC1C,IAAA,MAAM,IAAA,GAAO,KAAK,QAAA,KAAa,KAAA;AAC/B,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,KAAA,EAAO,OAAO,CAAA,CAAE,EAAA,GAAA,CAAO,MAAM,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA,KAAM,CAAA,CAAE,OAAA;AAAA,MACvD,IAAA,EAAM;AAAA,KACR;AAAA,EACF,CAAA;AACA,EAAA,MAAM,YAAA,GACJ,MAAM,YAAA,KAAiB,CAAC,2BAAuBxD,cAAAA,CAACyD,gCAAW,MAAA,EAAgB,CAAA,CAAA;AAE7E,EAAA,MAAM,CAAA,GAAA,CAAK,MAAM,IAAA,EAAK,IAAA,CAAM,MAAM,UAAA,IAAc,EAAA,EAAI,IAAA,EAAK,EAAG,WAAA,EAAY;AACxE,EAAA,MAAM,MAAA,GAASH,cAAQ,MAAM;AAC3B,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAoBI,8BAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AACnE,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,IAAA,GAAO,CAAA,EAAG,MAAA,CAAO,IAAI,CAAC,IAAI,IAAA,CAAK,WAAA,IAAe,EAAE,CAAA,CAAA,CAAG,WAAA,EAAY;AACrE,MAAA,IAAI,CAAA,IAAK,CAAC,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA,EAAG;AAC5B,MAAA,GAAA,IAAO,CAAA;AACP,MAAA,MAAM,CAAA,GAAIT,8BAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AAClC,MAAA,GAAA,CAAI,IAAI,CAAA,EAAA,CAAI,GAAA,CAAI,IAAI,CAAC,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IAClC;AACA,IAAA,GAAA,CAAI,GAAA,CAAI,OAAO,GAAG,CAAA;AAClB,IAAA,OAAO,GAAA;AAAA,EAGT,CAAA,EAAG,CAAC,KAAA,EAAO,CAAA,EAAG,MAAM,aAAA,EAAe,CAAA,CAAE,QAAQ,CAAC,CAAA;AAE9C,EAAA,MAAM,OAAA,GAAUK,cAAQ,MAAM;AAC5B,IAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAElB,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAwB;AACzC,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAA0B;AACzC,MAAA,QAAQ,KAAK,KAAA;AAAO,QAClB,KAAK,MAAA;AACH,UAAA,OAAO,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY;AAAA,QAC/B,KAAK,OAAA;AACH,UAAA,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,CAAM,WAAA,EAAY;AAAA,QACpC,KAAK,SAAA;AACH,UAAA,OAAO,EAAE,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,UAAU,CAAA,GAAI,CAAA;AAAA,QACnD,KAAK,UAAA;AACH,UAAA,OAAO,EAAE,aAAA,IAAiB,CAAA;AAAA,QAC5B,KAAK,KAAA;AACH,UAAA,OAAO,EAAE,MAAA,GAAS,IAAA,CAAK,MAAM,CAAA,CAAE,MAAM,IAAI,MAAA,CAAO,iBAAA;AAAA,QAClD;AACE,UAAA,OAAOI,8BAAA,CAAa,OAAA,CAAQT,8BAAA,CAAa,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA;AACtD,IACF,CAAA;AACA,IAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAA0B;AACrC,MAAA,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AAClB,MAAA,IAAI,MAAM,MAAA,EAAW;AACnB,QAAA,CAAA,GAAI,QAAQ,CAAC,CAAA;AACb,QAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,MACf;AACA,MAAA,OAAO,CAAA;AAAA,IACT,CAAA;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,KAAQ,KAAA,GAAQ,CAAA,GAAI,EAAA;AACtC,IAAA,OAAO,CAAC,GAAM,CAAA,KAAS;AACrB,MAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,IAAI,CAAC,CAAA,EAAG,GAAA,CAAI,CAAC,CAAC,CAAA;AAC9B,MAAA,IAAI,OAAO,MAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU,OAAA,CAAQ,IAAI,CAAA,IAAK,IAAA;AACrE,MAAA,OAAO,OAAO,CAAC,CAAA,CAAE,cAAc,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,IAAA;AAAA,IAC9C,CAAA;AAAA,EAGF,CAAA,EAAG;AAAA,IACD,IAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA,CAAM,UAAA;AAAA,IACN,KAAA,CAAM,aAAA;AAAA,IACN,CAAA,CAAE,EAAA;AAAA,IACF,CAAA,CAAE,KAAA;AAAA,IACF,CAAA,CAAE,OAAA;AAAA,IACF,CAAA,CAAE;AAAA,GACH,CAAA;AAED,EAAA,MAAM,IAAA,GAAOK,aAAA;AAAA,IACX,MACEK,+BAAA,CAAc,KAAA,EAAO,MAAA,EAAQ,WAAW,OAAA,EAAS;AAAA,MAC/C,KAAA,EAAO,KAAA,CAAM,IAAA,EAAK,IAAK,KAAA,CAAM,UAAA;AAAA,MAC7B,OAAA,EAAS,MAAA;AAAA,MACT,OAAO,QAAA,CAAS;AAAA,KACjB,CAAA;AAAA;AAAA;AAAA,IAGH,CAAC,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,aAAA,EAAe,CAAA,CAAE,QAAQ;AAAA,GAC9F;AAIA,EAAA,MAAM,YAAA,GAAeL,aAAA;AAAA,IACnB,MAAM,KAAK,MAAA,CAAO,CAAC,MAAM,WAAA,CAAY,GAAA,CAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AAAA,IACvD,CAAC,MAAM,WAAW;AAAA,GACpB;AACA,EAAA,MAAM,aAAA,GAAgBA,aAAA;AAAA,IACpB,MAAM,MAAM,MAAA,CAAO,CAAC,MAAM,WAAA,CAAY,GAAA,CAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AAAA,IACxD,CAAC,OAAO,WAAW;AAAA,GACrB;AACA,EAAA,MAAM,gBAAA,GAAmBA,aAAA;AAAA,IACvB,MACE,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM;AAC1B,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,EAAE,WAAW,CAAA;AAC9C,MAAA,OAAO,MAAA,KAAW,MAAA,IAAa,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AAAA,IACvD,CAAC,CAAA,CAAE,MAAA;AAAA,IACL,CAAC,aAAA,EAAe,WAAA,EAAa,IAAI;AAAA,GACnC;AAEA,EAAA,MAAM,WAAW,aAAA,CAAc,MAAA;AAAA,IAC7B,CAAC,CAAA,KACC,CAAA,CAAE,MAAA,IAAU,IAAA,KACX,EAAE,QAAA,KAAa,KAAA,IAAS,KAAA,CAAM,aAAA,CAAA,IAC/BM,8BAAY,CAAC,CAAA,IACbX,8BAAA,CAAa,CAAA,CAAE,MAAM,CAAA,KAAM;AAAA,GAC/B;AACA,EAAA,MAAM,SAAA,GAAY,cAAc,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,KAAA,IAAS,KAAA,CAAM,gBAAgB,CAAA;AAE5F,EAAA,MAAM,OAAA,GAAU3D,aAAO,IAAI,CAAA;AAC3B,EAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,EAAA,MAAM,qBAAA,GAAwB,CAAC,MAAA,KAAqB;AAClD,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAC,CAAA;AACjE,IAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAC,CAAA;AAC1D,IAAA,cAAA,CAAe,CAAC,IAAA,KAAS;AACvB,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,SAAS,CAAA,CAAE,MAAA,CAAO,CAAC,EAAA,KAAO,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAC,CAAA;AACzD,MAAA,MAAM,UAAU,CAAC,GAAG,IAAI,CAAA,CAAE,OAAO,CAAC,EAAA,KAAO,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,IAAK,CAAC,SAAA,CAAU,GAAA,CAAI,EAAE,CAAC,CAAA;AAC9E,MAAA,IAAI,MAAM,MAAA,KAAW,CAAA,IAAK,OAAA,CAAQ,MAAA,KAAW,GAAG,OAAO,IAAA;AACvD,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AAEzB,MAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,QAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,mBAAuB,CAAA,IAAKuE,+BAAA,CAAc,MAAM,EAAE,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AAAA,MACjE;AACA,MAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,QAAA,IAAA,CAAK,OAAO,EAAE,CAAA;AAEd,QAAA,KAAA,MAAW,KAAKA,+BAAA,CAAc,IAAA,EAAM,EAAE,CAAA,EAAG,IAAA,CAAK,OAAO,CAAC,CAAA;AAEtD,QAAA,KAAA,IAAS,EAAA,GAAK,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,EAAE,CAAA,EAAG,EAAA,EAAI,EAAA,GAAK,IAAA,CAAK,SAAS,GAAA,CAAI,EAAE,CAAA,EAAG,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,MACrF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,cAAc,CAAC,EAAA,EAAY,QAAA,KAC/B,YAAA,CAAa,CAAC,IAAA,KAAS;AACrB,IAAA,IAAI,KAAK,GAAA,CAAI,EAAE,CAAA,KAAM,CAAC,UAAU,OAAO,IAAA;AACvC,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,IAAA,IAAI,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA;AAAA,SACvB,IAAA,CAAK,IAAI,EAAE,CAAA;AAChB,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACH,EAAA,MAAM,SAAA,GAAY,MAAM,YAAA,iBAAa,IAAI,KAAK,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAc,MAAM,YAAA,CAAa,IAAI,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AAIhE,EAAA,MAAM,MAAA,GAASvE,YAAAA,CAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,MAAA,EAAQ,CAAA;AAC7F,EAAA,MAAA,CAAO,OAAA,GAAU,EAAE,KAAA,EAAO,CAAA,EAAG,OAAO,OAAA,EAAS,YAAA,EAAc,MAAA,EAAQ,WAAA,EAAa,MAAA,EAAO;AAGvF,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,aAAA,IAAiB,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAC,CAAA;AACrF,EAAA,MAAM,UAAA,GAAagE,aAAA;AAAA,IACjB,MACE,iBAAA,CAAqB;AAAA,MACnB,MAAA;AAAA,MACA,MAAA,EAAQ,CAAA;AAAA,MACR,YAAA,EAAc,CAAC,GAAA,KAAQ,MAAA,CAAO,QAAQ,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,CAAE,KAAA;AAAA,MACtD,UAAA,EAAY,CAAC,GAAA,KAAQ;AACnB,QAAA,MAAM,EAAE,GAAG,EAAA,EAAI,KAAA,EAAO,GAAG,MAAA,EAAQ,IAAA,KAAS,MAAA,CAAO,OAAA;AACjD,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAA,EAAY,UAAS,GAAI,GAAA;AAC9C,QAAA,MAAM,KAAK,IAAA,CAAK,WAAA;AAChB,QAAA,MAAM,MAAA,GAASL,8BAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AACvC,QAAA,MAAM,IAAA,GAAOrD,+BAAa,IAAI,CAAA;AAC9B,QAAA,MAAM,eAAe,IAAA,CAAK,eAAA,GAAkB,EAAE,aAAA,GAAgB,IAAA,CAAK,eAAe,CAAA,GAAI,IAAA;AACtF,QAAA,uBACEC,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,0CAAA;AAAA,YACV,KAAA,EACE,KAAA,GAAQ,CAAA,GACJ,EAAE,WAAA,EAAa,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,gBAAgB,CAAA,GAAI,GAAG,OAAM,GAC/D,MAAA;AAAA,YAEN,YAAA,EAAY,KAAA;AAAA,YACZ,cAAY,KAAA,GAAQ,CAAA;AAAA,YACpB,gBAAc,GAAA,CAAI,OAAA;AAAA,YAClB,iBAAe,GAAA,CAAI,QAAA;AAAA,YACnB,cAAA,EAAc,IAAI,OAAA,IAAW,MAAA;AAAA,YAE5B,QAAA,EAAA;AAAA,cAAA,UAAA,mBACCG,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAS,MAAM,MAAA,CAAO,QAAQ,WAAA,CAAY,EAAA,EAAI,CAAC,QAAQ,CAAA;AAAA,kBACvD,eAAA,EAAe,QAAA;AAAA,kBACf,YAAA,EAAY,QAAA,GAAW,EAAA,CAAG,gBAAA,GAAmB,EAAA,CAAG,cAAA;AAAA,kBAChD,SAAA,EAAU,qHAAA;AAAA,kBACV,aAAA,EAAa,eAAe,EAAE,CAAA,CAAA;AAAA,kBAE7B,QAAA,EAAA,QAAA,mBACCA,cAAAA,CAAC8D,uBAAA,EAAA,EAAY,WAAU,QAAA,EAAS,aAAA,EAAW,IAAA,EAAC,CAAA,mBAE5C9D,cAAAA,CAAC+D,wBAAA,EAAA,EAAa,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,eAEjD,GACE,KAAA,GAAQ,CAAA,mBACV/D,cAAAA,CAAC,UAAK,SAAA,EAAU,iBAAA,EAAkB,aAAA,EAAW,IAAA,EAAC,CAAA,GAC5C,IAAA;AAAA,8BACJH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,gCAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,kCAAAG,cAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,SAAS,MAAM,MAAA,CAAO,QAAQ,KAAA,CAAM,YAAA,CAAa,IAAI,IAAI,CAAA;AAAA,sBAEzD,KAAA,EACE,IAAA,CAAK,YAAA,GACD,EAAA,CAAG,UAAA,CAAW,CAAA,CAAE,UAAA,GAAa,IAAA,CAAK,YAAY,CAAA,IAAK,EAAA,CAAG,KAAK,CAAA,GAC3D,MAAA;AAAA,sBAEN,SAAA,EAAWF,KAAAA;AAAA;AAAA,wBAET,wHAAA;AAAA,wBACA,WAAW,MAAA,IAAU;AAAA,uBACvB;AAAA,sBACA,aAAA,EAAa,aAAa,EAAE,CAAA,CAAA;AAAA,sBAE3B,eAAK,IAAI;AAAA;AAAA,mBACZ;AAAA,kBACC,wBACCD,eAAAA;AAAA,oBAACuD,2BAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,SAAA,GAAY,SAAA;AAAA,sBAC9B,aAAA,EAAa,sBAAsB,EAAE,CAAA,CAAA;AAAA,sBAEpC,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAK,OAAO,SAAA,GAAO,EAAA;AAAA,wBACnB,EAAA,CAAG,OAAA,CAAQ,IAAA,CAAK,GAAA,EAAK,KAAK,KAAK;AAAA;AAAA;AAAA;AAClC,iBAAA,EAEJ,CAAA;AAAA,gBAEC,MAAA,CAAO,QAAQ,MAAA,oBACdpD,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UACb,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,cAAA;AAAA,kBAAA;AAAA,oBACC,EAAA;AAAA,oBACA,MAAA;AAAA,oBACA,cAAc,IAAA,CAAK,cAAA;AAAA,oBACnB,WAAW,IAAA,CAAK,UAAA;AAAA,oBAChB,cAAA,EAAgB,OAAA,CAAQ,IAAA,CAAK,uBAAuB,CAAA;AAAA,oBACpD,QAAQ,CAAA,CAAE;AAAA;AAAA,iBACZ,EACF,CAAA;AAAA,gBAAA,CAIA,IAAA,CAAK,eAAe,YAAA,IAAgB,UAAA,qBACpCH,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+DAAA,EACZ,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAK,WAAA,mBACJG,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oBAAoB,QAAA,EAAA,IAAA,CAAK,WAAA,EAAY,CAAA,GAChD,YAAA,mBACFH,eAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,0CAAA;AAAA,sBACV,aAAA,EAAa,iBAAiB,EAAE,CAAA,CAAA;AAAA,sBAEhC,QAAA,EAAA;AAAA,wCAAAG,cAAAA,CAACgE,oBAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB,eAAW,IAAA,EAAC,CAAA;AAAA,wCACpDhE,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAY,QAAA,EAAA,EAAA,CAAG,YAAA,CAAa,YAAY,CAAA,EAAE;AAAA;AAAA;AAAA,mBAC5D,GACE,IAAA;AAAA,kBACH,8BACCA,cAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,uBAAA;AAAA,sBACV,aAAA,EAAa,yBAAyB,EAAE,CAAA,CAAA;AAAA,sBAEvC,QAAA,EAAA,EAAA,CAAG,YAAA,CAAa,UAAA,CAAW,IAAA,EAAM,WAAW,KAAK;AAAA;AAAA;AACpD,iBAAA,EAEJ;AAAA,eAAA,EAEJ;AAAA;AAAA;AAAA,SACF;AAAA,MAEJ,CAAA;AAAA;AAAA,MAEA,WAAA,EAAa,CAAC,GAAA,qBACZA,eAAC,MAAA,EAAA,EAAK,aAAA,EAAa,CAAA,WAAA,EAAc,GAAA,CAAI,WAAW,CAAA,CAAA,EAAI,SAAA,EAAU,cAAA,EAC3D,iBAAO,OAAA,CAAQ,YAAA;AAAA,QACd,GAAA,CAAI,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,GAAI,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,IAAI,IAAI;AAAA,OACpF,EACF,CAAA;AAAA,MAEF,SAAA,EAAW,CAAC,GAAA,KAAQ;AAClB,QAAA,MAAM,EAAE,CAAA,EAAG,EAAA,EAAI,KAAA,EAAO,CAAA,KAAM,MAAA,CAAO,OAAA;AACnC,QAAA,MAAM,EAAE,MAAK,GAAI,GAAA;AACjB,QAAA,MAAM,QAAQ,IAAA,CAAK,MAAA,GAAS,KAAK,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,GAAA;AACtD,QAAA,MAAM,OAAA,GACJiD,8BAAA,CAAa,IAAA,CAAK,MAAM,CAAA,KAAM,MAAA,IAAU,CAAC,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,IAAK,KAAA,GAAQ,KAAK,GAAA,EAAI;AACnF,QAAA,uBACEjD,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWF,KAAAA;AAAA,cACT,kBAAA;AAAA,cACA,UAAU,2BAAA,GAA8B;AAAA,aAC1C;AAAA,YACA,aAAA,EAAa,CAAA,SAAA,EAAY,IAAA,CAAK,WAAW,CAAA,CAAA;AAAA,YACzC,cAAA,EAAc,OAAA;AAAA,YAEb,eAAK,MAAA,GACF,OAAA,GACE,GAAG,OAAA,CAAQ,CAAA,CAAE,WAAW,IAAA,CAAK,MAAM,CAAC,CAAA,GACpC,EAAA,CAAG,IAAI,CAAA,CAAE,UAAA,CAAW,KAAK,MAAM,CAAC,IAClC,EAAA,CAAG;AAAA;AAAA,SACT;AAAA,MAEJ,CAAA;AAAA,MACA,YAAA,EAAc,CAAC,GAAA,KAAQ;AACrB,QAAA,MAAM,EAAE,CAAA,EAAG,EAAA,EAAI,KAAA,EAAO,CAAA,KAAM,MAAA,CAAO,OAAA;AACnC,QAAA,MAAM,EAAE,MAAK,GAAI,GAAA;AAEjB,QAAA,IAAI,CAAC,CAAA,CAAE,cAAA,EAAgB,OAAO,IAAA;AAC9B,QAAA,uBACEE,cAAAA;AAAA,UAACiE,mBAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,aAAa,KAAA,EAAM;AAAA,YACzC,QAAA,EAAU,CAAC,WAAA,KAAgB,MAAA,CAAO,QAAQ,KAAA,CAAM,cAAA,GAAiB,MAAM,WAAW,CAAA;AAAA,YAClF,QAAA,EAAU,KAAK,QAAA,KAAa,KAAA;AAAA,YAC5B,iBAAiB,EAAA,CAAG,eAAA;AAAA,YACpB,SAAA,EAAW,KAAA;AAAA,YACX,aAAA,EAAa,CAAA,YAAA,EAAe,IAAA,CAAK,WAAW,CAAA;AAAA;AAAA,SAC9C;AAAA,MAEJ,CAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA,EAAe,CAAC,GAAA,qBACdjE,cAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,IAAI,GAAA,CAAI,WAAA;AAAA,UACR,SAAS,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,aAAA,GAAgB,IAAI,WAAW,CAAA;AAAA,UAC7D,MAAA,EAAQ,CAAC,KAAA,KAAU,MAAA,CAAO,QAAQ,KAAA,CAAM,YAAA,GAAe,KAAA,EAAO,GAAA,CAAI,IAAI,CAAA;AAAA,UACtE,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM;AAAA;AAAA,OAC/B;AAAA,MAEF,YAAA,EAAc,CAAC,GAAA,qBACbA,cAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,IAAI,GAAA,CAAI,WAAA;AAAA,UACR,MAAA,EAAQiD,8BAAA,CAAa,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA;AAAA,UACpC,YAAA,EAAc,IAAI,IAAA,CAAK,cAAA;AAAA,UACvB,SAAA,EAAW,IAAI,IAAA,CAAK,UAAA;AAAA,UACpB,cAAA,EAAgB,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,uBAAuB,CAAA;AAAA,UACxD,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,gBAAA;AAAA,UAC7B,IAAA,EAAM,UAAA,CAAW,GAAA,CAAI,IAAA,EAAM,OAAO,OAAO;AAAA;AAAA,OAC3C;AAAA,MAEF,aAAA,EAAe,CAAC,GAAA,KAAQ;AACtB,QAAA,MAAM,EAAE,CAAA,EAAG,EAAA,EAAI,KAAA,EAAO,CAAA,KAAM,MAAA,CAAO,OAAA;AACnC,QAAA,MAAM,EAAE,MAAK,GAAI,GAAA;AACjB,QAAA,MAAM,KAAK,IAAA,CAAK,WAAA;AAChB,QAAA,MAAM,MAAA,GAASA,8BAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AACvC,QAAA,MAAM,IAAA,GAAO,EAAE,MAAA,KAAW,EAAA;AAC1B,QAAA,MAAM,OAAA,GAAU,KAAK,QAAA,KAAa,KAAA;AAClC,QAAA,MAAM,OAAA,GAAU,OAAA,IAAW,OAAA,CAAQ,CAAA,CAAE,aAAa,CAAA;AAClD,QAAA,MAAM,QAAA,GAAW,OAAA,IAAW,OAAA,CAAQ,CAAA,CAAE,gBAAgB,CAAA;AACtD,QAAA,uBACEpD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACZ,QAAA,EAAA;AAAA,UAAA,CAAC,MAAA,CAAO,QAAQ,MAAA,IACf,OAAA,IACA,KAAK,uBAAA,IACL,CAAA,CAAE,iCACAA,eAAAA;AAAA,YAACK,SAAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,SAAA,EAAU,iCAAA;AAAA,cACV,OAAA,EAAS,MAAM,CAAA,CAAE,aAAA,GAAgB,IAAI,CAAA;AAAA,cACrC,aAAA,EAAa,qBAAqB,EAAE,CAAA,CAAA;AAAA,cAEpC,QAAA,EAAA;AAAA,gCAAAF,eAACyC,oBAAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC,CAAA;AAAA,gBAC1C,EAAA,CAAG;AAAA;AAAA;AAAA,WACN;AAAA,0BAEJzC,cAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,MAAA;AAAA,cACA,IAAA;AAAA,cACA,OAAA;AAAA,cACA,QAAA;AAAA,cACA,OAAA;AAAA,cACA,MAAA,EAAQ,EAAA;AAAA,cACR,UAAA,EAAY,MAAM,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA;AAAA,cACnC,QAAA,EAAU,MAAM,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA;AAAA,cAC/B,cAAc,CAAA,CAAE,YAAA,GAAe,MAAM,CAAA,CAAE,YAAA,GAAe,IAAI,CAAA,GAAI,MAAA;AAAA,cAC9D,UAAU,CAAA,CAAE,MAAA,GAAS,MAAM,SAAA,CAAU,IAAI,CAAA,GAAI,MAAA;AAAA,cAC7C,MAAA,EAAQ,MAAM,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,cAC3B,QAAA,EAAU,MAAM,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA;AAAA,cAC/B,gBAAgB,CAAA,CAAE,cAAA,GAAiB,MAAM,CAAA,CAAE,cAAA,GAAiB,IAAI,CAAA,GAAI,MAAA;AAAA,cACpE,eAAe,CAAA,CAAE,aAAA,GAAgB,MAAM,CAAA,CAAE,aAAA,GAAgB,IAAI,CAAA,GAAI;AAAA;AAAA;AACnE,SAAA,EACF,CAAA;AAAA,MAEJ;AAAA,KACD,CAAA;AAAA;AAAA;AAAA,IAGH;AAAA,MACE,CAAA,CAAE,OAAA;AAAA,MACF,CAAA,CAAE,QAAA;AAAA,MACF,CAAA,CAAE,MAAA;AAAA,MACF,CAAA,CAAE,SAAA;AAAA,MACF,CAAA,CAAE,SAAA;AAAA,MACF,CAAA,CAAE,UAAA;AAAA,MACF,CAAA,CAAE,MAAA;AAAA,MACF,WAAA;AAAA,MACA;AAAA;AACF,GACF;AAIA,EAAAT,gBAAU,MAAM;AACd,IAAA,MAAA,CAAO,OAAA,EAAS,YAAA,CAAa,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,EAC9C,CAAA,EAAG;AAAA,IACD,MAAA;AAAA,IACA,KAAA,CAAM,MAAA;AAAA,IACN,KAAA,CAAM,UAAA;AAAA,IACN,KAAA,CAAM,aAAA;AAAA,IACN,KAAA,CAAM,aAAA;AAAA,IACN,KAAA,CAAM,YAAA;AAAA,IACN,KAAA,CAAM,MAAA;AAAA,IACN,KAAA,CAAM,aAAA;AAAA,IACN,KAAA,CAAM,gBAAA;AAAA,IACN;AAAA,GACD,CAAA;AAED,EAAA,MAAM,OAAA,GAAU,KAAK,MAAA,IAAU,kBAAA;AAC/B,EAAA,MAAM,WAAA,GAAc+D,aAAA;AAAA,IAClB,OAAO;AAAA,MACL,iBAAA,EAAmB,IAAA;AAAA;AAAA;AAAA,MAGnB,iBAAA,EAAmB,KAAA;AAAA,MACnB,4BAAA,EAA8B,IAAA;AAAA,MAC9B,WAAA,EAAa,OAAA;AAAA,MACb,aAAa,CAAC,CAAA,KAAO,CAAA,CAAE,IAAA,EAAM,UAAU,YAAA,GAAe,MAAA;AAAA;AAAA,MAEtD,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,QAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,cAAA,GAAiB,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA;AAC5D,QAAA,OAAA;AAAA,UACE,MAAA,EAAQ,KAAA,GACJ,EAAE,KAAA,EAAO,MAAA,CAAO,OAA6B,GAAA,EAAK,MAAA,CAAO,IAAA,IAAQ,KAAA,EAAM,GACvE;AAAA,SACN;AAAA,MACF,CAAA;AAAA,MACA,iBAAA,EAAmB,CAAC,KAAA,KAAU;AAC5B,QAAA,qBAAA,CAAsB,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,WAAA,EAAa,WAAW,CAAA;AAC/D,QAAA,SAAA,CAAU,KAAA,CAAM,cAAc,WAAW,CAAA;AAAA,MAC3C,CAAA;AAAA,MACA,aAAA,EAAe,CAAC,KAAA,KAAoC;AAClD,QAAA,MAAM,MAAM,KAAA,CAAM,IAAA;AAClB,QAAA,MAAM,GAAA,GAAO,MAAM,KAAA,EAAgC,GAAA;AACnD,QAAA,IAAI,CAAC,GAAA,IAAO,KAAA,CAAM,MAAA,CAAO,QAAA,OAAe,MAAA,EAAQ;AAChD,QAAA,IAAI,QAAQ,YAAA,IAAgB,GAAA,CAAI,UAAA,IAAc,CAAC,IAAI,QAAA,EAAU;AAC3D,UAAA,KAAA,CAAM,OAAO,cAAA,EAAe;AAC5B,UAAA,MAAA,CAAO,OAAA,CAAQ,WAAA,CAAY,GAAA,CAAI,WAAA,EAAa,IAAI,CAAA;AAAA,QAClD,CAAA,MAAA,IAAW,QAAQ,WAAA,EAAa;AAC9B,UAAA,IAAI,GAAA,CAAI,UAAA,IAAc,GAAA,CAAI,QAAA,EAAU;AAClC,YAAA,KAAA,CAAM,OAAO,cAAA,EAAe;AAC5B,YAAA,MAAA,CAAO,OAAA,CAAQ,WAAA,CAAY,GAAA,CAAI,WAAA,EAAa,KAAK,CAAA;AAAA,UACnD,CAAA,MAAA,IAAW,IAAI,QAAA,EAAU;AACvB,YAAA,KAAA,CAAM,OAAO,cAAA,EAAe;AAC5B,YAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,UAAA,CAAW,IAAI,QAAQ,CAAA;AAChD,YAAA,IAAI,MAAA,EAAQ,YAAY,IAAA,EAAM;AAC5B,cAAA,KAAA,CAAM,GAAA,CAAI,kBAAA,CAAmB,MAAA,CAAO,QAAQ,CAAA;AAC5C,cAAA,KAAA,CAAM,GAAA,CAAI,cAAA,CAAe,MAAA,CAAO,QAAA,EAAU,MAAM,CAAA;AAAA,YAClD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,KACF,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,cAAA,GAAiB,MAAM,cAAA,iBAAe,IAAI,KAAK,CAAA;AAErD,EAAA,MAAM,UAAA,GAAc,CAAC,KAAA,EAAO,GAAGI,8BAAY,CAAA,CAAmB,MAAA;AAAA,IAC5D,CAAC,QAAQ,GAAA,KAAQ,MAAA,IAAA,CAAW,OAAO,GAAA,CAAI,GAAG,KAAK,CAAA,IAAK;AAAA,GACtD;AACA,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,CAAA;AAErC,EAAA,uBACE7D,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oCAAA;AAAA,MACV,eAAaE,0BAAA,CAAS,MAAA,EAAQ,EAAE,MAAA,EAAQ,aAAa,CAAA;AAAA,MAEpD,QAAA,EAAA;AAAA,QAAA,MAAA;AAAA,wBACDF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,0BAAAG,cAAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,SAAA,EAAU,YAAA,EAAW,cAAA,EAAe,SAAA,EAAU,wBAAA,EACrD,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,KAAQ;AACvB,YAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,IAAK,CAAA;AACjC,YAAA,MAAM,aAAa,MAAA,KAAW,GAAA;AAC9B,YAAA,uBACEH,eAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBAEC,IAAA,EAAK,QAAA;AAAA,gBACL,IAAA,EAAK,KAAA;AAAA,gBACL,eAAA,EAAe,UAAA;AAAA,gBACf,OAAA,EAAS,MAAM,SAAA,CAAU,GAAG,CAAA;AAAA,gBAC5B,SAAA,EAAWC,KAAAA;AAAA,kBACT,sMAAA;AAAA,kBACA,aACI,2CAAA,GACA;AAAA,iBACN;AAAA,gBACA,aAAA,EAAa,eAAe,GAAG,CAAA,CAAA;AAAA,gBAE9B,QAAA,EAAA;AAAA,kBAAA,GAAA,KAAQ,KAAA,GAAQ,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,OAAO,GAAG,CAAA;AAAA,kCAC3CE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAA2B,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA,eAAA;AAAA,cAd5C;AAAA,aAeP;AAAA,UAEJ,CAAC,CAAA,EACH,CAAA;AAAA,0BACAA,cAAAA;AAAA,YAACsC,QAAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,KAAA,EAAO,KAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACxC,aAAa,CAAA,CAAE,iBAAA;AAAA,cACf,cAAY,CAAA,CAAE,WAAA;AAAA,cACd,SAAA,EAAU,0CAAA;AAAA,cACV,aAAA,EAAY;AAAA;AAAA,WACd;AAAA,UACC,WAAA,oBACCzC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oBAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAAA;AAAA,cAACK,SAAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAQ,OAAA;AAAA,gBACR,IAAA,EAAK,IAAA;AAAA,gBACL,SAAA,EAAU,yCAAA;AAAA,gBACV,OAAA,EAAS,SAAA;AAAA,gBACT,aAAA,EAAY,iBAAA;AAAA,gBAEZ,QAAA,EAAA;AAAA,kCAAAF,cAAAA,CAACkE,0BAAA,EAAA,EAAe,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC,CAAA;AAAA,kBAChD,CAAA,CAAE;AAAA;AAAA;AAAA,aACL;AAAA,4BACArE,eAAAA;AAAA,cAACK,SAAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAQ,OAAA;AAAA,gBACR,IAAA,EAAK,IAAA;AAAA,gBACL,SAAA,EAAU,yCAAA;AAAA,gBACV,OAAA,EAAS,WAAA;AAAA,gBACT,aAAA,EAAY,mBAAA;AAAA,gBAEZ,QAAA,EAAA;AAAA,kCAAAF,cAAAA,CAACmE,0BAAA,EAAA,EAAe,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC,CAAA;AAAA,kBAChD,CAAA,CAAE;AAAA;AAAA;AAAA;AACL,WAAA,EACF;AAAA,SAAA,EAEJ,CAAA;AAAA,QACC,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,CAAC,4BACtBnE,cAAAA;AAAA,UAACS,4BAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM2D,oBAAA;AAAA,YACN,OAAO,CAAA,CAAE,UAAA;AAAA,YACT,aAAa,CAAA,CAAE,YAAA;AAAA,YACf,MAAA,EAAO;AAAA;AAAA,4BAGTpE,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACb,QAAA,kBAAAA,cAAAA;AAAA,UAACqE,0BAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAO,WAAA;AAAA,YACP,MAAA,EAAQ,MAAM,MAAA,IAAU,eAAA;AAAA,YACxB,KAAA,EAAO,IAAA;AAAA,YACP,UAAA;AAAA,YACA,SAAA,EAAW,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA;AAAA,YACxB,YAAA,EAAc,CAAC,GAAA,KAAQ,CAAA,SAAA,EAAY,IAAI,WAAW,CAAA,CAAA;AAAA,YAClD,SAAA;AAAA,YACA,SAAA,EAAW,KAAK,MAAA,KAAW,CAAA;AAAA,YAC3B,UAAA,EAAY,EAAE,KAAA,EAAO,CAAA,CAAE,SAAA,EAAU;AAAA,YACjC,SAAA,EAAW,SAAS,iBAAA,GAAoB,UAAA;AAAA,YACxC,MAAA,EAAO,MAAA;AAAA,YACP,WAAA,EAAa,CAAC,EAAE,GAAA,EAAI,KAAM;AACxB,cAAA,MAAA,CAAO,OAAA,GAAU,GAAA;AAAA,YACnB,CAAA;AAAA,YACA,SAAA,EAAW;AAAA,cACT,IAAA,EAAM,UAAA;AAAA,cACN,UAAA,EAAY,IAAA;AAAA,cACZ,QAAA,EAAU,YAAA;AAAA,cACV,iBAAA,EAAmB;AAAA,aACrB;AAAA,YACA;AAAA;AAAA,SACF,EACF,CAAA;AAAA,wBAEFrE,cAAAA;AAAA,UAACsE,8BAAA;AAAA,UAAA;AAAA,YACC,OAAO,aAAA,CAAc,MAAA;AAAA,YACrB,OAAA,EAAS,cAAA;AAAA,YACT,QACE,aAAA,CAAc,MAAA,GAAS,CAAA,IAAK,gBAAA,GAAmB,oBAC7CtE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,aAAA,EAAY,yBAAA,EACzD,YAAE,gBAAA,CAAiB,gBAAgB,GACtC,CAAA,GACE,MAAA;AAAA,YAGL,QAAA,EAAA,CAAC,SAAA,qBACAH,eAAAA,CAAAiD,qBAAA,EACG,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,gBAAA,GAAmB,aAAA,EAAe,SAAA,EAAW,cAAc,CAAA;AAAA,cACjE,KAAA,CAAM,kCACL9C,cAAAA;AAAA,gBAACuE,oCAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM5B,sBAAAA;AAAA,kBACN,OAAO,CAAA,CAAE,YAAA;AAAA,kBACT,SAAS,MAAM;AACb,oBAAA,KAAA,CAAM,iBAAiB,QAAQ,CAAA;AAC/B,oBAAA,cAAA,EAAe;AAAA,kBACjB,CAAA;AAAA,kBACA,QAAA,EAAU,SAAS,MAAA,KAAW,CAAA;AAAA,kBAC9B,SAAA;AAAA,kBACA,SAAS,CAAA,CAAE,gBAAA;AAAA,kBACX,MAAA,EAAO;AAAA;AAAA,eACT;AAAA,cAED,KAAA,CAAM,gCACL3C,cAAAA;AAAA,gBAACuE,oCAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM/D,kBAAAA;AAAA,kBACN,OAAO,CAAA,CAAE,UAAA;AAAA,kBACT,SAAS,MAAM;AACb,oBAAA,KAAA,CAAM,eAAe,SAAS,CAAA;AAC9B,oBAAA,cAAA,EAAe;AAAA,kBACjB,CAAA;AAAA,kBACA,QAAA,EAAU,UAAU,MAAA,KAAW,CAAA;AAAA,kBAC/B,SAAA;AAAA,kBACA,SAAA,EAAU,qEAAA;AAAA,kBACV,MAAA,EAAO;AAAA;AAAA;AACT,aAAA,EAEJ;AAAA;AAAA,SAEJ;AAAA,QACC,MAAA,IAAU,KAAA,CAAM,MAAA,oBACfR,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAI,IAAA;AAAA,YACJ,cAAc,CAAC,IAAA,KAAS,CAAC,IAAA,IAAQ,UAAU,IAAI,CAAA;AAAA,YAC/C,SAASwE,6BAAA,CAAY,KAAA,EAAO,MAAM,CAAA,CAAE,IAAI,CAAC,CAAA,MAAO,EAAE,EAAA,EAAI,EAAE,WAAA,EAAa,KAAA,EAAO,MAAA,CAAO,CAAC,GAAE,CAAE,CAAA;AAAA,YACxF,iBAAiB,MAAA,CAAO,0BAAA;AAAA,YACxB,QAAQ,CAAC,QAAA,KAAa,KAAA,CAAM,MAAA,GAAS,QAAQ,QAAQ,CAAA;AAAA,YACrD,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO,CAAA,CAAE,WAAA,CAAY,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,cACnC,MAAM,CAAA,CAAE,UAAA;AAAA,cACR,QAAQ,CAAA,CAAE,YAAA;AAAA,cACV,OAAO,CAAA,CAAE,WAAA;AAAA,cACT,QAAQ,CAAA,CAAE;AAAA;AACZ;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ;ACjxBO,SAAS,UAAiC,CAAA,EAAsB;AACrE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIpF,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,cAAAA;AAAA,IACxC,0BAAU,GAAA,CAAI,CAAC,CAAC,MAAA,EAAQ,SAAS,CAAC,CAAC;AAAA,GACrC;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,cAAc,eAAe,CAAA,GAAIA,eAAwB,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAClF,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,IAAIA,cAAAA,iBAAsB,IAAI,KAAK,CAAA;AAC/D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,IAAIA,cAAAA,iBAAsB,IAAI,KAAK,CAAA;AACjE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAmB,IAAI,CAAA;AACnD,EAAA,MAAM,IAAI,EAAE,GAAG,wBAAA,EAA0B,GAAG,EAAE,MAAA,EAAO;AACrD,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KACd,CAAA,CAAE,OAAO,IAAA,EAAK,IAAM,CAAA,CAAE,eAAA,IAAmB,CAAA,CAAE,aAAA,GAAgB,CAAA,CAAE,eAAe,KAAM,CAAA,CAAE,QAAA;AACtF,EAAA,MAAM,GAAA,GAAM,EAAE,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,IAAI,CAAA;AAClD,EAAA,MAAM,UAAA,GAAa,EAAE,UAAA,IAAc,UAAA;AACnC,EAAA,MAAM,CAAA,GAAI,UAAA,CAAW,IAAA,EAAK,CAAE,WAAA,EAAY;AACxC,EAAA,MAAM,WAAW,CAAC,GAAG,aAAa,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,SAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAA;AAC/F,EAAA,MAAM,gBAAgB,CAAC,CAAA,KACrB,cAAc,GAAA,CAAI6D,8BAAA,CAAa,EAAE,MAAM,CAAC,MAAM,SAAA,KAC7C,CAAC,SAAS,MAAA,IAAU,QAAA,CAAS,SAASA,8BAAA,CAAa,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA;AAC/D,EAAA,MAAM,OAAO,GAAA,CAAI,MAAA;AAAA,IACf,CAAC,CAAA,KACC,aAAA,CAAc,CAAC,CAAA,KACd,CAAC,CAAA,IACA;AAAA,MACE,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA,GAAI,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,WAAA,IAAe,EAAE,CAAA,CAAA,GAAK,EAAA;AAAA,MACxE,YAAA,CAAa,QAAA,CAAS,QAAQ,CAAA,IAAK,CAAA,CAAE,eAAA,GAChC,CAAA,CAAE,aAAA,GAAgB,CAAA,CAAE,eAAe,CAAA,IAAK,EAAA,GACzC;AAAA,MAEH,IAAA,CAAK,GAAG,EACR,WAAA,EAAY,CACZ,SAAS,CAAC,CAAA;AAAA,GACnB;AACA,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAC,CAAA,IAAK,CAAC,GAAG,aAAA,CAAc,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU,SAAS,IAAI,CAAA;AACzF,EAAA,MAAM,aAAA,GAAgB,IAAI,MAAA,CAAO,CAAC,MAAM,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AACnE,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAS,CAAA,CAAE,aAAa,KAAA,IAAS,OAAA,CAAQ,EAAE,aAAa,CAAA;AACzE,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAChB,CAAA,CAAE,MAAA,KAAW,MAAA,IAAU,CAAA,CAAE,MAAA,KAAW,YAAA,IAAgB,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAC,CAAA,CAAE,WAAA;AACvE,EAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,MAAA,CAAO,QAAQ,CAAA;AACnD,EAAA,MAAM,cAAA,GAAiB,cAAc,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,KAAA,IAAS,CAAA,CAAE,gBAAgB,CAAA;AAC7F,EAAA,MAAM,cAAA,GAAiB,MAAM,WAAA,iBAAY,IAAI,KAAK,CAAA;AAClD,EAAA,MAAM,SAAS,CAAC,GAAA,EAAwD,EAAA,KACtE,GAAA,CAAI,CAAC,GAAA,KAAQ;AACX,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,GAAG,CAAA;AACxB,IAAA,IAAI,KAAK,GAAA,CAAI,EAAE,CAAA,EAAG,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,SAC3B,IAAA,CAAK,IAAI,EAAE,CAAA;AAChB,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAUH,EAAqB,EAAE,YAAA,KAAiB,CAAC,0BAAUjD,cAAAA,CAACyD,4BAAA,EAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,CAAA;AAC9E,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,WAAA,EAAa,CAAC,CAAC,CAAC,CAAA;AAC3D,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAC,CAAA;AAEtD,EAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,IAAA,IAAI,KAAK,IAAA,CAAK,0BAAA;AACd,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,OAAO,EAAA,IAAM,SAAS,GAAA,CAAI,EAAE,KAAK,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AAC9C,MAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,EAAA,GAAK,QAAA,CAAS,GAAA,CAAI,EAAE,CAAA,EAAG,0BAAA;AAAA,IACzB;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,CAAC,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AAC3D,EAAA,MAAM,QAAQ,MAAA,CAAO,MAAA;AAAA,IACnB,CAAC,MAAM,CAAC,CAAA,CAAE,8BAA8B,CAAC,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,0BAA0B;AAAA,GACnF;AACA,EAAA,MAAM,aAAa,CAAA,CAAE,SAAA,IAAa,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,KAAM;AAClD,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,eAAA,KAAoB,EAAE,WAAW,CAAA;AACpE,IAAA,OAAO,IAAA,CAAK,MAAA,GAAS,CAAA,IAAM,CAAC,QAAA,CAAS,MAAA,KAAW,CAAC,CAAA,IAAK,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY,CAAE,SAAS,CAAC,CAAA,CAAA;AAAA,EACvF,CAAC,CAAA;AACD,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,SAAA,CAAU,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAC,CAAA;AAC/D,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,EAAM,CAAA,KAAS;AAC5B,IAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KACd,CAAA,CAAE,2BAA2B,CAAA,CAAE,UAAA,GAC3B,CAAA,GACA,CAAA,CAAE,WAAW,MAAA,GACX,CAAA,GACA,CAAA,CAAE,MAAA,KAAW,eACX,CAAA,GACA,CAAA;AACV,IAAA,OAAO,MAAA,CAAO,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,IAAA,CAAM,CAAA,CAAE,UAAA,IAAc,EAAA,EAAI,aAAA,CAAc,CAAA,CAAE,UAAA,IAAc,EAAE,CAAA;AAAA,EACvF,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,EAAS,KAAA,GAAQ,CAAA,KAAuB;AAC1D,IAAA,MAAM,KAAK,IAAA,CAAK,WAAA;AAChB,IAAA,MAAM,MAAA,GAASR,8BAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AACvC,IAAA,MAAM,IAAA,GAAO,EAAE,MAAA,KAAW,EAAA;AAC1B,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,0BAAA,KAA+B,EAAE,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AACrF,IAAA,MAAM,OAAA,GAAU,CAAA,CAAE,aAAA,GAAgB,EAAE,KAAK,EAAC;AAC1C,IAAA,uBACEpD,eAAAA,CAAC,IAAA,EAAA,EAAY,aAAA,EAAa,CAAA,eAAA,EAAkB,EAAE,CAAA,CAAA,EAC5C,QAAA,EAAA;AAAA,sBAAAA,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAWC,KAAAA;AAAA,YACT,gFAAA;AAAA,YACA,QAAA,CAAS,GAAA,CAAI,EAAE,CAAA,IAAK;AAAA,WACtB;AAAA,UACA,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,YAAA,IACE,CAAE,MAAM,MAAA,CAAuB,OAAA;AAAA,cAC7B;AAAA,aACF,EACA;AACA,cAAA,CAAA,CAAE,YAAA,CAAa,IAAI,IAAI,CAAA;AAAA,YACzB;AAAA,UACF,CAAA;AAAA,UACA,KAAA,EAAO,EAAE,WAAA,EAAa,CAAA,EAAG,IAAA,CAAK,IAAI,KAAA,EAAO,CAAC,CAAA,GAAI,EAAE,CAAA,EAAA,CAAA,EAAK;AAAA,UAEpD,QAAA,EAAA;AAAA,YAAA,QAAA,CAAS,MAAA,GAAS,qBACjBE,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,OAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,SAAA,EAAU,iBAAA;AAAA,gBACV,YAAA,EAAY,CAAA,EAAG,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA,GAAI,QAAA,GAAW,UAAU,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,gBACxE,OAAA,EAAS,MAAM,MAAA,CAAO,YAAA,EAAc,EAAE,CAAA;AAAA,gBAErC,oBAAU,GAAA,CAAI,EAAE,CAAA,mBACfF,eAAC+D,wBAAAA,EAAA,EAAa,SAAA,EAAU,QAAA,EAAS,oBAEjC/D,cAAAA,CAAC8D,uBAAAA,EAAA,EAAY,WAAU,QAAA,EAAS;AAAA;AAAA,aAEpC;AAAA,4BAEFjE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,8BAAAG,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAWF,KAAAA;AAAA,oBACT,4DAAA;AAAA,oBACA,WAAW,MAAA,IAAU;AAAA,mBACvB;AAAA,kBACA,aAAA,EAAa,aAAa,EAAE,CAAA,CAAA;AAAA,kBAC5B,OAAA,EAAS,MAAM,CAAA,CAAE,YAAA,CAAa,IAAI,IAAI,CAAA;AAAA,kBAErC,iBAAO,IAAI;AAAA;AAAA,eACd;AAAA,8BACAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gFAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,MAAA,KAAW,0BACVG,cAAAA;AAAA,kBAAC,cAAA;AAAA,kBAAA;AAAA,oBACC,EAAA;AAAA,oBACA,QAAQ,IAAA,CAAK,MAAA;AAAA,oBACb,cAAc,IAAA,CAAK,cAAA;AAAA,oBACnB,WAAW,IAAA,CAAK,UAAA;AAAA,oBAChB,cAAA,EAAgB,OAAA,CAAQ,IAAA,CAAK,uBAAuB;AAAA;AAAA,iBACtD;AAAA,gBAED,IAAA,CAAK,MAAA,oBAAUH,eAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,kBAAA,MAAA;AAAA,kBAAK,CAAA,CAAE,UAAA,CAAW,IAAA,CAAK,MAAM;AAAA,iBAAA,EAAE,CAAA;AAAA,gBACpD,QAAA,CAAS,MAAA,GAAS,CAAA,oBACjBA,gBAAC,MAAA,EAAA,EAEG,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,+BAA+B,EAAA,IAAM,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA,CACzE,MAAA;AAAA,kBACJ,GAAA;AAAA,kBACC,IAAI,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,0BAAA,KAA+B,EAAE,CAAA,CAAE,MAAA;AAAA,kBAAO;AAAA,iBAAA,EAClE;AAAA,eAAA,EAEJ,CAAA;AAAA,cACC,OAAA,CAAQ,MAAA,GAAS,CAAA,oBAChBG,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA4B,YAAA,EAAW,SAAA,EACnD,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,2BACZH,eAAAA;AAAA,gBAACK,SAAAA;AAAA,gBAAA;AAAA,kBAEC,OAAA,EAAQ,MAAA;AAAA,kBACR,IAAA,EAAK,IAAA;AAAA,kBACL,SAAA,EAAU,2CAAA;AAAA,kBACV,QAAA,EAAU,CAAC,CAAA,CAAE,YAAA;AAAA,kBACb,SAAS,MAAM,CAAA,CAAE,YAAA,GAAe,MAAA,CAAO,IAAI,IAAI,CAAA;AAAA,kBAC/C,aAAA,EAAa,CAAA,YAAA,EAAe,EAAE,CAAA,CAAA,EAAI,OAAO,EAAE,CAAA,CAAA;AAAA,kBAE3C,QAAA,EAAA;AAAA,oCAAAF,cAAAA,CAAC8B,oBAAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB,CAAA;AAAA,oCACxC9B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,iBAAO,IAAA,EAAK;AAAA;AAAA,iBAAA;AAAA,gBATnC,MAAA,CAAO;AAAA,eAWf,CAAA,EACH;AAAA,aAAA,EAEJ,CAAA;AAAA,4BACAH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACZ,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,2BAA2B,IAAA,CAAK,QAAA,KAAa,KAAA,IAAS,CAAA,CAAE,iCAC5DG,cAAAA;AAAA,gBAACE,SAAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,IAAA;AAAA,kBACL,OAAA,EAAQ,SAAA;AAAA,kBACR,QAAA,EAAU,IAAA;AAAA,kBACV,OAAA,EAAS,MAAM,CAAA,CAAE,aAAA,GAAgB,IAAI,CAAA;AAAA,kBACtC,QAAA,EAAA;AAAA;AAAA,eAED;AAAA,8BAEFF,cAAAA;AAAA,gBAAC,WAAA;AAAA,gBAAA;AAAA,kBACC,IAAA;AAAA,kBACA,MAAA;AAAA,kBACA,IAAA;AAAA,kBACA,OAAA,EAAS,KAAK,QAAA,KAAa,KAAA;AAAA,kBAC3B,UAAU,IAAA,CAAK,QAAA,KAAa,KAAA,IAAS,OAAA,CAAQ,EAAE,gBAAgB,CAAA;AAAA,kBAC/D,OAAA,EAAS,QAAQ,IAAI,CAAA;AAAA,kBACrB,WAAA,EAAa,SAAS,IAAI,CAAA;AAAA,kBAC1B,SAAA,EAAW,QAAQ,IAAI,CAAA;AAAA,kBACvB,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,EAAE,CAAA;AAAA,kBACzB,gBAAA,EACE,CAAA,CAAE,gBAAA,IAAoB,CAAA,CAAE,cAAA,IAAkB,CAAA,CAAE,YAAA,GACxC,MAAM,MAAA,CAAO,WAAA,EAAa,EAAE,CAAA,GAC5B,MAAA;AAAA,kBAEN,MAAA,EAAQ,CAAA;AAAA,kBACR,UAAA,EAAY,MAAM,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA;AAAA,kBACnC,UAAU,CAAA,CAAE,QAAA,GAAW,MAAM,CAAA,CAAE,QAAA,GAAW,IAAI,CAAA,GAAI,MAAA;AAAA,kBAClD,QAAA,EAAU,MAAM,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA;AAAA,kBAC/B,MAAA,EAAQ,MAAM,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,kBAC3B,cAAc,CAAA,CAAE,YAAA,GAAe,MAAM,CAAA,CAAE,YAAA,GAAe,IAAI,CAAA,GAAI,MAAA;AAAA,kBAC9D,UAAU,CAAA,CAAE,MAAA,GAAS,MAAM,SAAA,CAAU,IAAI,CAAA,GAAI,MAAA;AAAA,kBAC7C,gBAAgB,CAAA,CAAE,cAAA,GAAiB,MAAM,CAAA,CAAE,cAAA,GAAiB,IAAI,CAAA,GAAI,MAAA;AAAA,kBACpE,cAAA,EACE,CAAA,CAAE,cAAA,GAAiB,MAAM,CAAA,CAAE,iBAAiB,IAAA,EAAM,CAAC,IAAA,CAAK,SAAS,CAAA,GAAI;AAAA;AAAA;AAEzE,aAAA,EACF;AAAA;AAAA;AAAA,OACF;AAAA,MACC,QAAA,CAAS,SAAS,CAAA,IAAK,CAAC,UAAU,GAAA,CAAI,EAAE,qBACvCA,cAAAA,CAAC,QAAI,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU,UAAA,CAAW,OAAO,KAAA,GAAQ,CAAC,CAAC,CAAA,EAAE;AAAA,KAAA,EAAA,EA5HtD,EA8HT,CAAA;AAAA,EAEJ,CAAA;AACA,EAAA,uBACEH,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAA+B,aAAA,EAAa,CAAA,CAAE,UAAU,YAAA,EACrE,QAAA,EAAA;AAAA,oBAAAG,cAAAA;AAAA,MAACyE,2BAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAO,kBAAA;AAAA,QACP,IAAA,EAAM;AAAA,UACJ;AAAA,YACE,EAAA,EAAI,OAAA;AAAA,YACJ,KAAA,EAAO,EAAA;AAAA,YACP,OAAO,IAAA,CAAK,MAAA;AAAA,YACZ,cAAA,EAAgB,SAAA;AAAA,YAChB,2BAAWzE,cAAAA,CAACoE,oBAAAA,EAAA,EAAS,WAAU,UAAA,EAAW,CAAA;AAAA,YAC1C,gBAAA;AAAA,YACA,MAAA,EAAQ,WAAA;AAAA,YACR,YAAA,EAAc;AAAA;AAChB,SACF;AAAA,QACA,WAAA,EAAY,OAAA;AAAA,QACZ,aAAa,MAAM;AAAA,QAAC,CAAA;AAAA,QACpB,iCACEpE,cAAAA;AAAA,UAAC0E,6BAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,UAAA;AAAA,YACP,QAAA,EAAU,EAAE,kBAAA,IAAsB,aAAA;AAAA,YAClC,MAAA,EAAQ,YAAA;AAAA,YACR,cAAA,EAAgB,eAAA;AAAA,YAChB,MAAA,EAAQ,EAAE,UAAA,EAAY,EAAE,MAAM,MAAA,EAAQ,MAAA,EAAQ,YAAW,EAAE;AAAA,YAC3D,SAAA,EAAU,mBAAA;AAAA,YACV,OAAA,EAAS;AAAA,cACP,IAAA,EAAM,cAAA;AAAA,cACN,KAAA,EAAO,oBAAA;AAAA,cACP,YAAA,EAAc;AAAA,aAChB;AAAA,YACA,wBACE1E,cAAAA;AAAA,cAAC2E,oCAAA;AAAA,cAAA;AAAA,gBACC,MAAA,EAAO,qBAAA;AAAA,gBACP,IAAA,EAAM,UAAA;AAAA,gBACN,YAAA,EAAc,aAAA;AAAA,gBACd,YAAA,EAAc,aAAA;AAAA,gBACd,eAAA,EAAiB,gBAAA;AAAA,gBACjB,OAAA,EAAS;AAAA,kBACP;AAAA,oBACE,EAAA,EAAI,MAAA;AAAA,oBACJ,KAAA,EAAO,OAAA;AAAA,oBACP,KAAA,EAAO,IAAI,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA,CAAE;AAAA,mBAChD;AAAA,kBACA;AAAA,oBACE,EAAA,EAAI,YAAA;AAAA,oBACJ,KAAA,EAAO,YAAA;AAAA,oBACP,KAAA,EAAO,IAAI,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,YAAY,CAAA,CAAE;AAAA,mBACtD;AAAA,kBACA;AAAA,oBACE,EAAA,EAAI,MAAA;AAAA,oBACJ,KAAA,EAAO,WAAA;AAAA,oBACP,KAAA,EAAO,IAAI,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA,CAAE;AAAA;AAChD,iBACF;AAAA,gBACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,CAAC,MAAA,EAAQ,YAAA,EAAc,MAAM,CAAA,EAAG,CAAA;AAAA,gBACrE,gBAAA,EAAiB,mKAAA;AAAA,gBACjB,aAAA,EAAa,IAAA;AAAA,gBACb,gBAAA,EAAgB;AAAA;AAAA;AAClB;AAAA,SAEJ;AAAA,QAEF,cACE,CAAA,CAAE,QAAA,mBACA9E,eAAAA,CAAC+B,iBAAA,EACC,QAAA,EAAA;AAAA,0BAAA5B,cAAAA,CAAC6B,sBAAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAC1B,0BAAAhC,eAAAA,CAACK,SAAAA,EAAA,EAAO,aAAA,EAAY,iBAAA,EAClB,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAACY,gBAAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,YAAE,KAAA;AAAA,4BAEhCZ,cAAAA,CAAC8D,uBAAAA,EAAA,EAAY,WAAU,aAAA,EAAc;AAAA,WAAA,EACvC,CAAA,EACF,CAAA;AAAA,0BACAjE,eAAAA,CAACkC,sBAAAA,EAAA,EAAoB,OAAM,KAAA,EACzB,QAAA,EAAA;AAAA,4BAAA/B,eAACgC,mBAAAA,EAAA,EAAiB,QAAA,EAAU,CAAA,CAAE,UAAU,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,YAC3C,CAAA,CAAE,oCACDhC,cAAAA,CAACgC,qBAAA,EAAiB,QAAA,EAAU,CAAA,CAAE,gBAAA,EAAkB,QAAA,EAAA,gBAAA,EAAc;AAAA,WAAA,EAElE;AAAA,SAAA,EACF,IAEA,CAAA,CAAE;AAAA;AAAA,KAGR;AAAA,oBACAhC,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAiC,WAAA,EAAW,CAAA,CAAE,SAAA,EAC1D,QAAA,EAAA,CAAA,CAAE,SAAA,mBACDA,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iDAAA,EAAkD,QAAA,EAAA,oBAAA,EAAa,CAAA,GAC1E,CAAC,OAAO,MAAA,IAAU,CAAC,SAAA,CAAU,MAAA,mBAC/BA,cAAAA;AAAA,MAACS,4BAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,CAAA,GAAI,YAAA,GAAe,GAAA,CAAI,SAAS,2BAAA,GAAyB,kBAAA;AAAA,QAChE,WAAA,EAAY;AAAA;AAAA,KACd,mBAEAZ,eAAAA,CAAC,IAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM;AACpB,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,KAAoB,CAAA,CAAE,WAAW,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AAChF,QAAA,MAAM,QAAA,GAAW,CAAA,CAAE,QAAA,KAAa,KAAA,IAAS,CAAA,CAAE,aAAA;AAC3C,QAAA,uBACEA,eAAAA,CAAC,IAAA,EAAA,EAAuB,eAAa,CAAA,cAAA,EAAiB,CAAA,CAAE,WAAW,CAAA,CAAA,EACjE,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACZ,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,MAAA,GAAS,oBACbG,cAAAA;AAAA,cAACE,SAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,OAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,SAAA,EAAU,QAAA;AAAA,gBACV,YAAA,EAAY,CAAA,EAAG,SAAA,CAAU,GAAA,CAAI,CAAA,CAAE,WAAW,CAAA,GAAI,QAAA,GAAW,UAAU,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAA;AAAA,gBAC7E,OAAA,EAAS,MAAM,MAAA,CAAO,YAAA,EAAc,EAAE,WAAW,CAAA;AAAA,gBAEhD,oBAAU,GAAA,CAAI,CAAA,CAAE,WAAW,CAAA,mBAC1BF,cAAAA,CAAC+D,wBAAAA,EAAA,EAAa,SAAA,EAAU,UAAS,CAAA,mBAEjC/D,eAAC8D,uBAAAA,EAAA,EAAY,WAAU,QAAA,EAAS;AAAA;AAAA,gCAIpC9D,cAAAA,CAACgE,oBAAAA,EAAA,EAAS,WAAU,iDAAA,EAAkD,CAAA;AAAA,4BAExEnE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,8BAAAG,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,qDAAA;AAAA,kBACV,UAAU,CAAC,QAAA;AAAA,kBACX,OAAA,EAAS,MAAM,CAAA,CAAE,cAAA,GAAiB,EAAE,WAAW,CAAA;AAAA,kBAE9C,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA,eACL;AAAA,8BACAH,eAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA;AAAA,gBAAA,sBAAA;AAAA,gBAC9B,EAAE,OAAA,IAAW,iBAAA;AAAA,gBAC9B,CAAC,CAAA,CAAE,MAAA,GAAS,cAAA,GAAc,EAAA;AAAA,gBAC1B,IAAA,CAAK,MAAA,GACF,CAAA,MAAA,EAAM,IAAA,CAAK,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,KAAW,CAAA,GAAI,MAAA,GAAS,OAAO,CAAA,CAAA,GACzD;AAAA,eAAA,EACN,CAAA;AAAA,cACC,CAAA,CAAE,8BACDG,cAAAA,CAAC,OAAE,SAAA,EAAU,+BAAA,EAAiC,YAAE,UAAA,EAAW;AAAA,aAAA,EAE/D,CAAA;AAAA,4BACAH,eAAAA,CAAC+B,eAAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAA5B,cAAAA,CAAC6B,sBAAAA,EAAA,EAAoB,OAAA,EAAO,MAC1B,QAAA,kBAAA7B,cAAAA;AAAA,gBAACE,SAAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,OAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,SAAA,EAAU,QAAA;AAAA,kBACV,YAAA,EAAY,CAAA,YAAA,EAAe,CAAA,CAAE,IAAI,CAAA,CAAA;AAAA,kBAEjC,QAAA,kBAAAF,cAAAA,CAACwC,0BAAAA,EAAA,EAAe,WAAU,QAAA,EAAS;AAAA;AAAA,eACrC,EACF,CAAA;AAAA,8BACA3C,eAAAA,CAACkC,sBAAAA,EAAA,EAAoB,OAAM,KAAA,EACxB,QAAA,EAAA;AAAA,gBAAA,CAAA,CAAE,iBAAA,oBACD/B,cAAAA,CAACgC,mBAAAA,EAAA,EAAiB,QAAA,EAAU,MAAM,CAAA,CAAE,iBAAA,GAAoB,CAAA,CAAE,WAAW,CAAA,EAAG,QAAA,EAAA,aAAA,EAExE,CAAA;AAAA,gBAED,QAAA,IAAY,CAAA,CAAE,gBAAA,oBACbhC,cAAAA;AAAA,kBAACgC,mBAAAA;AAAA,kBAAA;AAAA,oBACC,QAAA,EAAU,MAAM,CAAA,CAAE,gBAAA,GAAmB,EAAE,WAAA,EAAa,CAAC,EAAE,MAAM,CAAA;AAAA,oBAE5D,QAAA,EAAA,CAAA,CAAE,SAAS,OAAA,GAAU;AAAA;AAAA,iBACxB;AAAA,gBAAA,CAEA,EAAE,QAAA,KAAa,KAAA,IAAS,EAAE,gBAAA,KAAqB,CAAA,CAAE,oCACjDhC,cAAAA,CAACgC,mBAAAA,EAAA,EAAiB,UAAU,MAAM,CAAA,CAAE,mBAAmB,CAAA,CAAE,WAAW,GAAG,QAAA,EAAA,iBAAA,EAEvE;AAAA,eAAA,EAEJ;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,UACC,CAAC,UAAU,GAAA,CAAI,CAAA,CAAE,WAAW,CAAA,IAAK,IAAA,CAAK,SAAS,CAAA,oBAC9ChC,eAAC,IAAA,EAAA,EAAI,QAAA,EAAA,IAAA,CAAK,IAAI,CAAC,CAAA,KAAM,WAAW,CAAA,EAAG,CAAC,CAAC,CAAA,EAAE;AAAA,SAAA,EAAA,EAvElC,EAAE,WAyEX,CAAA;AAAA,MAEJ,CAAC,CAAA;AAAA,MACA,KAAA,CACE,OAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,eAAA,IAAmB,CAAC,WAAA,CAAY,GAAA,CAAI,CAAA,CAAE,eAAe,CAAC,CAAA,CACvE,KAAK,KAAK,CAAA,CACV,IAAI,CAAC,CAAA,KAAM,UAAA,CAAW,CAAC,CAAC;AAAA,KAAA,EAC7B,CAAA,EAEJ,CAAA;AAAA,oBACAA,cAAAA,CAACsE,8BAAA,EAAA,EAAa,KAAA,EAAO,aAAA,CAAc,MAAA,EAAQ,OAAA,EAAS,cAAA,EACjD,QAAA,EAAA,CAAC,SAAA,qBACAzE,eAAAA,CAAAiD,qBAAA,EACG,QAAA,EAAA;AAAA,MAAA,CAAA,CAAE,gBAAA,GAAmB,aAAA,EAAe,SAAA,EAAW,cAAc,CAAA;AAAA,MAC7D,CAAA,CAAE,kCACD9C,cAAAA;AAAA,QAACuE,oCAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM5B,sBAAAA;AAAA,UACN,OAAO,CAAA,CAAE,YAAA;AAAA,UACT,SAAA;AAAA,UACA,QAAA,EAAU,CAAC,aAAA,CAAc,MAAA;AAAA,UACzB,SAAS,MAAM;AACb,YAAA,CAAA,CAAE,iBAAiB,aAAa,CAAA;AAChC,YAAA,cAAA,EAAe;AAAA,UACjB,CAAA;AAAA,UACA,MAAA,EAAO;AAAA;AAAA,OACT;AAAA,MAED,CAAA,CAAE,gCACD3C,cAAAA;AAAA,QAACuE,oCAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM/D,kBAAAA;AAAA,UACN,OAAO,CAAA,CAAE,UAAA;AAAA,UACT,SAAA;AAAA,UACA,QAAA,EAAU,CAAC,cAAA,CAAe,MAAA;AAAA,UAC1B,SAAS,MAAM;AACb,YAAA,CAAA,CAAE,eAAe,cAAc,CAAA;AAC/B,YAAA,cAAA,EAAe;AAAA,UACjB,CAAA;AAAA,UACA,SAAA,EAAU,mDAAA;AAAA,UACV,MAAA,EAAO;AAAA;AAAA;AACT,KAAA,EAEJ,CAAA,EAEJ,CAAA;AAAA,IACC,MAAA,IAAU,CAAA,CAAE,MAAA,oBACXR,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAI,IAAA;AAAA,QACJ,cAAc,CAAC,IAAA,KAAS,CAAC,IAAA,IAAQ,UAAU,IAAI,CAAA;AAAA,QAC/C,SAASwE,6BAAA,CAAY,GAAA,EAAK,MAAM,CAAA,CAAE,IAAI,CAAC,CAAA,MAAO,EAAE,EAAA,EAAI,EAAE,WAAA,EAAa,KAAA,EAAO,MAAA,CAAO,CAAC,GAAE,CAAE,CAAA;AAAA,QACtF,iBAAiB,MAAA,CAAO,0BAAA;AAAA,QACxB,QAAQ,CAAC,EAAA,KAAO,CAAA,CAAE,MAAA,GAAS,QAAQ,EAAE,CAAA;AAAA,QACrC,MAAA,EAAQ;AAAA,UACN,KAAA,EAAO,CAAA,CAAE,WAAA,CAAY,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,UACnC,MAAM,CAAA,CAAE,UAAA;AAAA,UACR,QAAQ,CAAA,CAAE,YAAA;AAAA,UACV,OAAO,CAAA,CAAE,WAAA;AAAA,UACT,QAAQ,CAAA,CAAE;AAAA;AACZ;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;ACncO,SAAS,sBAAA,CACd,eACA,KAAA,EACA,SAAA,EACA,aAA2C,SAAA,EAC3C,iBAAA,EACA,gBAA8C,IAAA,EACzC;AACL,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AACnC,EAAA,OAAO,CAAC,GAAG,aAAa,CAAA,CACrB,IAAA;AAAA,IACC,CAAC,GAAG,CAAA,KAAA,CACD,IAAA,CAAK,MAAM,CAAA,CAAE,uBAAA,IAA2B,CAAA,CAAE,UAAA,IAAc,CAAA,CAAE,UAAA,IAAc,EAAE,CAAA,IAAK,CAAA,KAC/E,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,uBAAA,IAA2B,EAAE,UAAA,IAAc,CAAA,CAAE,UAAA,IAAc,EAAE,CAAA,IAAK,CAAA;AAAA,GACpF,CACC,MAAA;AAAA,IAAO,CAAC,GAAA,KACP,UAAA,KAAe,SAAA,GACX,GAAA,CAAI,MAAA,KAAW,MAAA,GACf,UAAA,KAAe,SAAA,GACb,GAAA,CAAI,MAAA,KAAW,MAAA,GACf;AAAA,GACR,CACC,MAAA,CAAO,CAAC,GAAA,KAAQ;AACf,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,SAAA,GAAY,iBAAA,EAAmB,YAAY,iBAAA,EAAmB,EAAA;AAChF,IAAA,MAAM,WAAA,GACJ,iBAAA,EAAmB,EAAA,KAAO,SAAA,IAAa,mBAAmB,SAAA,KAAc,SAAA;AAC1E,IAAA,OAAO,KAAA,KAAU,SAAA,KAAc,CAAC,WAAA,IAAe,KAAA,KAAU,SAAA,CAAA;AAAA,EAC3D,CAAC,CAAA,CACA,MAAA;AAAA,IAAO,CAAC,GAAA,KACP,aAAA,KAAkB,SAAA,GACd,CAAC,CAAC,GAAA,CAAI,mBAAA,GACN,aAAA,KAAkB,SAAA,GAChB,CAAC,GAAA,CAAI,mBAAA,GACL;AAAA,GACR,CACC,OAAO,CAAC,GAAA,KAAQ,CAAC,CAAA,IAAK,CAAA,EAAG,IAAI,KAAA,IAAS,EAAE,IAAI,SAAA,GAAY,GAAG,KAAK,EAAE,CAAA,CAAA,CAAG,aAAY,CAAE,QAAA,CAAS,CAAC,CAAC,CAAA;AACnG;AAGO,SAAS,qBACd,CAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAYlF,aAAO,CAAC,CAAA;AAC1B,EAAA,SAAA,CAAU,OAAA,GAAU,CAAA;AACpB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIF,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,IAAIA,cAAAA,iBAAsB,IAAI,KAAK,CAAA;AAC/D,EAAA,MAAM,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,cAAc,EAAE,CAAA,CAAA,CAAG,IAAA,EAAK,CAAE,WAAA,EAAY;AAG9D,EAAA,MAAM,UAAUwF,4BAAA,EAAW;AAC3B,EAAA,MAAM,IAAA,GAAOtB,aAAAA;AAAA,IACX,MACE,sBAAA;AAAA,MACE,CAAA,CAAE,aAAA;AAAA,MACF,CAAA;AAAA,MACA,CAAA,CAAE,SAAA;AAAA,MACF,CAAA,CAAE,UAAA;AAAA,MACF,CAAA,CAAE,iBAAA;AAAA,MACF,CAAA,CAAE;AAAA,KACJ;AAAA,IACF,CAAC,CAAA,CAAE,aAAA,EAAe,CAAA,EAAG,CAAA,CAAE,SAAA,EAAW,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,iBAAA,EAAmB,CAAA,CAAE,aAAa;AAAA,GACtF;AACA,EAAA,MAAM,YAAA,GAAe,CAAA,CAAE,aAAA,CAAc,MAAA,CAAO,CAAC,MAAM,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AAC9E,EAAA,MAAM,SAAA,GAAY,CAAA,CAAE,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA,CAAE,SAAA,GAAY,CAAC,CAAC,CAAA;AAChE,EAAA,MAAM,OAAA,GAAUA,aAAAA;AAAA,IACd,MAAM;AAAA,MACJ;AAAA,QACE,KAAA,EAAO,MAAA;AAAA,QACP,UAAA,EAAY,QAAA;AAAA,QACZ,IAAA,EAAM,CAAA;AAAA,QACN,QAAA,EAAU,GAAA;AAAA,QACV,WAAA,EAAa,CAAC,EAAE,IAAA,OAAW,IAAA,EAAM,KAAA,EAAO,MAAK,IAAK,iBAAA;AAAA,QAClD,YAAA,EAAc,CAAC,EAAE,IAAA,EAAK,KACpB,wBACEzD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACb,QAAA,EAAA;AAAA,0BAAAG,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACZ,QAAA,EAAA,SAAA,CAAU,OAAA,CAAQ,YAAA,GACjB,SAAA,CAAU,OAAA,CAAQ,YAAA,CAAa,IAAI,CAAA,mBAEnCA,cAAAA;AAAA,YAAC6E,4BAAA;AAAA,YAAA;AAAA,cACC,IAAA,kBACE7E,cAAAA,CAAC8E,uBAAA,EAAA,EAAqB,QAAQ,IAAA,CAAK,SAAA,IAAa,KAAA,EAAO,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,cAE5E,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,IAAA,EAAK,IAAK,iBAAA;AAAA,cAC7B,WAAA,EAAY,mBAAA;AAAA,cACZ,aAAA,EAAc,YAAA;AAAA,cACd,OAAA,EAAS,MAAM,SAAA,CAAU,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,cAC5C,MAAA,EAAQ,CAAA,YAAA,EAAe,IAAA,CAAK,WAAW,CAAA;AAAA;AAAA,WACzC,EAEJ,CAAA;AAAA,UAAA,CAEE,IAAA,CAAK,aAAA,IAAiB,CAAA,IAAK,CAAA,oBAC3BjF,eAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,gKAAA;AAAA,cACV,KAAA,EAAO,GAAG,IAAA,CAAK,aAAa,IAAI,IAAA,CAAK,aAAA,KAAkB,CAAA,GAAI,SAAA,GAAY,UAAU,CAAA,CAAA;AAAA,cACjF,aAAA,EAAa,CAAA,gBAAA,EAAmB,IAAA,CAAK,WAAW,CAAA,CAAA;AAAA,cAEhD,QAAA,EAAA;AAAA,gCAAAG,eAACG,yBAAAA,EAAA,EAAc,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC,CAAA;AAAA,gBAC7C,IAAA,CAAK;AAAA;AAAA;AAAA,WACR;AAAA,UAAA,CAEA,KAAK,QAAA,KAAa,KAAA,IAAS,SAAA,CAAU,OAAA,CAAQ,kCAC7CH,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,cAAY,CAAA,OAAA,EAAU,IAAA,CAAK,KAAA,EAAO,IAAA,MAAU,iBAAiB,CAAA,CAAA;AAAA,cAC7D,OAAA,EAAS,MAAM,SAAA,CAAU,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,cAC9C,aAAA,EAAa,CAAA,cAAA,EAAiB,IAAA,CAAK,WAAW,CAAA,CAAA;AAAA,cAC9C,SAAA,EAAU,+GAAA;AAAA,cAEV,QAAA,kBAAAA,eAAC+E,+BAAA,EAAA,EAAc;AAAA;AAAA;AACjB,SAAA,EAEJ;AAAA,OAEN;AAAA;AAAA;AAAA,MAGA,GAAI,SAAA,CAAU,OAAA,CAAQ,YAAA,IAAgB,SAAA,IAAa,CAAC,OAAA,GAChD;AAAA,QACE;AAAA,UACE,KAAA,EAAO,QAAA;AAAA,UACP,UAAA,EAAY,QAAA;AAAA,UACZ,IAAA,EAAM,GAAA;AAAA,UACN,QAAA,EAAU,GAAA;AAAA,UACV,WAAA,EAAa,CAAC,EAAE,IAAA,EAAK,KACnB,IAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,SAAA,GAAY,IAAI,CAAA,IAAK,EAAA,GAAM,EAAA;AAAA,UACvD,YAAA,EAAc,CAAC,EAAE,IAAA,OACf,IAAA,IAAQ,SAAA,CAAU,OAAA,CAAQ,YAAA,GAAe,IAAI;AAAA;AACjD,UAEF,EAAC;AAAA,MACL;AAAA,QACE,KAAA,EAAO,QAAA;AAAA,QACP,UAAA,EAAY,QAAA;AAAA,QACZ,KAAA,EAAO,UAAU,GAAA,GAAM,GAAA;AAAA,QACvB,WAAA,EAAa,CAAC,EAAE,IAAA,OAAW,IAAA,EAAM,MAAA;AAAA,QACjC,YAAA,EAAc,CAAC,EAAE,IAAA,OACf,IAAA,KACC,SAAA,CAAU,OAAA,CAAQ,YAAA,GACjB,SAAA,CAAU,OAAA,CAAQ,YAAA,CAAa,IAAI,oBAEnC/E,cAAAA;AAAA,UAACgF,kCAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,KAAK,MAAA,KAAW,MAAA,GAAS,SAAS,IAAA,CAAK,MAAA,KAAW,SAAS,MAAA,GAAS;AAAA;AAAA,SAC7E;AAAA,OAEN;AAAA;AAAA,MAEA,GAAI,SAAA,CAAU,OAAA,CAAQ,QAAA,IAAY,SAAA,CAAU,QAAQ,WAAA,GAChD;AAAA,QACE;AAAA,UACE,KAAA,EAAO,SAAA,CAAU,OAAA,CAAQ,QAAA,GAAW,IAAA,GAAO,OAAA;AAAA,UAC3C,UAAA,EAAY,SAAA,CAAU,OAAA,CAAQ,QAAA,GAAW,IAAA,GAAO,OAAA;AAAA,UAChD,KAAA,EAAO,EAAA;AAAA,UACP,IAAA,EAAM,OAAA;AAAA,UACN,QAAA,EAAU,KAAA;AAAA,UACV,SAAA,EAAW,KAAA;AAAA,UACX,YAAA,EAAc,CAAC,EAAE,IAAA,EAAK,KACpB,IAAA,IAAA,CAAS,SAAA,CAAU,OAAA,CAAQ,QAAA,IAAY,SAAA,CAAU,OAAA,CAAQ,WAAA,IAAe,IAAI;AAAA;AAChF,UAEF,EAAC;AAAA,MACL;AAAA,QACE,KAAA,EAAO,UAAA;AAAA,QACP,WAAA,EAAa,MAAA;AAAA,QACb,UAAA,EAAY,SAAA;AAAA,QACZ,KAAA,EAAO,GAAA;AAAA,QACP,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAa,CAAC,EAAE,IAAA,EAAK,KACnB,MAAM,uBAAA,IAA2B,IAAA,EAAM,UAAA,IAAc,IAAA,EAAM,UAAA,IAAc,EAAA;AAAA,QAC3E,cAAA,EAAgB,CAAC,EAAE,KAAA,EAAM,KAAO,QAAQ,SAAA,CAAU,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,GAAI,QAAA;AAAA,QAC9E,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA;AAAA,MACE,OAAA,CAAQ,EAAE,YAAY,CAAA;AAAA,MACtB,OAAA,CAAQ,EAAE,YAAY,CAAA;AAAA,MACtB,OAAA,CAAQ,EAAE,WAAW,CAAA;AAAA,MACrB,OAAA,CAAQ,EAAE,QAAQ,CAAA;AAAA,MAClB,OAAA,CAAQ,EAAE,YAAY,CAAA;AAAA,MACtB,OAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,OAAA,GAAU1B,aAAAA;AAAA,IACd,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,SAAA,EAAW,mBAAA,EAAqB,GAAG,CAAA,EAAE,CAAE,CAAA;AAAA,IACnE,CAAC,OAAO;AAAA,GACV;AACA,EAAA,uBACEzD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAA+B,eAAY,wBAAA,EACvD,QAAA,EAAA;AAAA,IAAA,CAAA,CAAE,UAAA,KAAe,yBAChBG,cAAAA;AAAA,MAACyE,2BAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAO,oBAAA;AAAA,QACP,IAAA,EAAM;AAAA,UACJ;AAAA,YACE,EAAA,EAAI,SAAA;AAAA,YACJ,KAAA,EAAO,EAAA;AAAA,YACP,OAAO,IAAA,CAAK,MAAA;AAAA,YACZ,2BAAWzE,cAAAA,CAACG,yBAAAA,EAAA,EAAc,WAAU,UAAA,EAAW,CAAA;AAAA,YAC/C,cAAA,EAAgB,SAAA;AAAA,YAChB,YAAA,EAAc,OAAA;AAAA,YACd,gBAAA,EAAkB,CAAC,CAAC;AAAA;AACtB,SACF;AAAA,QACA,WAAA,EAAY,SAAA;AAAA,QACZ,aAAa,MAAM;AAAA,QAAC,CAAA;AAAA,QACpB,iCACEH,cAAAA;AAAA,UAAC0E,6BAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,KAAA;AAAA,YACP,eAAA,EAAe,IAAA;AAAA,YACf,SAAA,EAAU,gBAAA;AAAA,YACV,QAAA,EAAU,QAAA;AAAA,YACV,MAAA,EAAQ,CAAC,MAAM,CAAA;AAAA,YACf,gBAAgB,MAAM;AAAA,YAAC,CAAA;AAAA,YACvB,MAAA,EAAQ;AAAA,cACN,WAAA,EAAa,qBAAA;AAAA,cACb,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA;AAAS,aAC/B;AAAA,YACA,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,QAEF,cAAc,CAAA,CAAE;AAAA;AAAA,KAClB;AAAA,oBAEF1E,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACb,QAAA,kBAAAA,cAAAA;AAAA,MAACqE,0BAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAO,cAAA;AAAA,QACP,KAAA,EAAO,IAAA;AAAA,QACP,UAAA,EAAY,OAAA;AAAA,QACZ,SAAA,EAAW,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA;AAAA,QACxB,YAAA,EAAc,CAAC,GAAA,KAAQ,CAAA,WAAA,EAAc,IAAI,WAAW,CAAA,CAAA;AAAA,QACpD,YAAY,CAAA,CAAE,MAAA;AAAA,QACd,MAAA,EAAO,MAAA;AAAA,QACP,WAAW,CAAA,CAAE,SAAA;AAAA,QACb,cAAA,EAAe,uBAAA;AAAA,QACf,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,IAAI,kBAAA,GAAqB,sBAAA;AAAA,UAChC,OAAA,EAAS,CAAA,CAAE,MAAA,GACP,mDAAA,GACA;AAAA,SACN;AAAA,QACA,SAAA,EACE,EAAE,gBAAA,GACE;AAAA,UACE,IAAA,EAAM,UAAA;AAAA,UACN,UAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAU,YAAA;AAAA,UACV,iBAAA,EAAmB,CAAC,KAAA,KAClB,WAAA,CAAY,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,WAAW,CAAC,CAAC;AAAA,SAC9D,GACA,MAAA;AAAA,QAEN,WAAA,EAAa;AAAA,UACX,iBAAA,EAAmB,IAAA;AAAA,UACnB,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,YAAA,IACG,KAAA,CAAM,KAAA,EAAqC,GAAA,KAAQ,OAAA,IACpD,QAAA,IAAY,KAAA,IACZ,KAAA,CAAM,MAAA,CAAO,QAAA,EAAS,KAAM,MAAA,IAC5B,KAAA,CAAM,IAAA;AAEN,cAAA,CAAA,CAAE,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,UACvB;AAAA;AACF;AAAA,KACF,EACF,CAAA;AAAA,IACC,CAAA,CAAE,MAAA;AAAA,IACF,CAAA,CAAE,gBAAA,oBACDrE,cAAAA,CAACsE,8BAAA,EAAA,EAAa,KAAA,EAAO,YAAA,CAAa,MAAA,EAAQ,OAAA,EAAS,MAAM,WAAA,iBAAY,IAAI,GAAA,EAAK,CAAA,EAC3E,QAAA,EAAA,CAAC,OAAA,KAAY,CAAA,CAAE,gBAAA,GAAmB,YAAA,EAAc,OAAA,EAAS,MAAM,WAAA,iBAAY,IAAI,GAAA,EAAK,CAAC,CAAA,EACxF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AC7UO,IAAM,+BAAA,GAAwD;AAAA,EACnE,IAAA,EAAM,aAAA;AAAA,EACN,KAAA,EAAO,YAAA;AAAA,EACP,IAAA,EAAM;AACR;AAeO,SAAS,cAAA,CAAe;AAAA,EAC7B,EAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,+BAAA,EAAiC,GAAG,MAAA,EAAO;AAC1D,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,uBACEzE,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,8DAAA;AAAA,QACV,aAAA,EAAaE,2BAAS,MAAA,EAAQ,EAAE,QAAQ,CAAA,YAAA,EAAe,EAAE,IAAI,CAAA;AAAA,QAC7D,YAAA,EAAW,MAAA;AAAA,QAEX,QAAA,EAAA;AAAA,0BAAAC,eAACG,yBAAAA,EAAA,EAAc,SAAA,EAAU,qBAAA,EAAsB,eAAW,IAAA,EAAC,CAAA;AAAA,UAC1D,CAAA,CAAE;AAAA;AAAA;AAAA,KACL;AAAA,EAEJ;AACA,EAAA,uBACEN,eAAAA;AAAA,IAACK,SAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAWJ,KAAAA;AAAA,QACT,8CAAA;AAAA,QACA,UAAA,IAAc;AAAA,OAChB;AAAA,MACA,OAAA,EAAS,MAAM,MAAA,CAAO,cAAc,CAAA;AAAA,MACpC,aAAA,EAAaC,2BAAS,MAAA,EAAQ,EAAE,QAAQ,CAAA,YAAA,EAAe,EAAE,IAAI,CAAA;AAAA,MAC7D,YAAA,EAAY,aAAa,MAAA,GAAS,MAAA;AAAA,MAElC,QAAA,EAAA;AAAA,wBAAAF,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oDAAA,EACb,QAAA,EAAA;AAAA,UAAA,UAAA,oBACCG,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qEAAA,EAAsE,CAAA;AAAA,0BAExFA,cAAAA,CAACG,yBAAAA,EAAA,EAAc,SAAA,EAAU,mBAAA,EAAoB,eAAW,IAAA,EAAC;AAAA,SAAA,EAC3D,CAAA;AAAA,QACC,UAAA,GAAa,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE;AAAA;AAAA;AAAA,GAC5B;AAEJ;AC5DO,IAAM,2BAAA,GAAiD;AAAA,EAC5D,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS;AACX;AAWO,SAAS,aAAa,EAAE,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS,QAAO,EAAsB;AACrF,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,2BAAA,EAA6B,GAAG,MAAA,EAAO;AACtD,EAAA,MAAM,IAAA,GAAc;AAAA,IAClB;AAAA,MACE,EAAA,EAAI,OAAA;AAAA,MACJ,OAAO,CAAA,CAAE,QAAA;AAAA,MACT,sBAAMH,cAAAA,CAACoE,oBAAAA,EAAA,EAAS,WAAU,QAAA,EAAS,CAAA;AAAA,MACnC,KAAA;AAAA,MACA,QAAQrE,0BAAA,CAAS,OAAA,EAAS,KAAK,EAAE,MAAA,EAAQ,aAAa;AAAA;AACxD,GACF;AACA,EAAA,uBACEC,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EAAkC,WAAA,EAAU,iBACzD,QAAA,kBAAAA,cAAAA;AAAA,IAACyE,2BAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA,EAAY,OAAA;AAAA,MACZ,aAAa,MAAM;AAAA,MAAC,CAAA;AAAA,MACpB,8BACE5E,eAAAA;AAAA,QAACK,SAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,SAAA;AAAA,UACT,eAAaH,0BAAA,CAAS,OAAA,EAAS,SAAS,EAAE,MAAA,EAAQ,YAAY,CAAA;AAAA,UAE9D,QAAA,EAAA;AAAA,4BAAAC,eAACY,gBAAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI,WAAU,QAAA,EAAS,CAAA;AAAA,YAClC,CAAA,CAAE;AAAA;AAAA;AAAA;AACL;AAAA,GAEJ,EACF,CAAA;AAEJ;AAQO,IAAM,+BAAA,GAAyD;AAAA,EACpE,YAAA,EAAc,WAAA;AAAA,EACd,WAAA,EAAa;AACf;AAWO,SAAS,iBAAiB,EAAE,KAAA,EAAO,aAAA,EAAe,OAAA,EAAS,QAAO,EAA0B;AACjG,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,+BAAA,EAAiC,GAAG,MAAA,EAAO;AAC1D,EAAA,MAAM,IAAA,GAAc;AAAA,IAClB;AAAA,MACE,EAAA,EAAI,WAAA;AAAA,MACJ,OAAO,CAAA,CAAE,YAAA;AAAA,MACT,sBAAMZ,cAAAA,CAACgE,oBAAAA,EAAA,EAAS,WAAU,QAAA,EAAS,CAAA;AAAA,MACnC,KAAA;AAAA,MACA,QAAQjE,0BAAA,CAAS,OAAA,EAAS,KAAK,EAAE,MAAA,EAAQ,iBAAiB;AAAA;AAC5D,GACF;AACA,EAAA,uBACEC,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EAAkC,WAAA,EAAU,qBACzD,QAAA,kBAAAA,cAAAA;AAAA,IAACyE,2BAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA,EAAY,WAAA;AAAA,MACZ,aAAa,MAAM;AAAA,MAAC,CAAA;AAAA,MACpB,8BACE5E,eAAAA;AAAA,QAACK,SAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,aAAA;AAAA,UACT,eAAaH,0BAAA,CAAS,OAAA,EAAS,aAAa,EAAE,MAAA,EAAQ,gBAAgB,CAAA;AAAA,UAEtE,QAAA,EAAA;AAAA,4BAAAC,eAACY,gBAAAA,EAAA,EAAK,IAAA,EAAM,EAAA,EAAI,WAAU,QAAA,EAAS,CAAA;AAAA,YAClC,CAAA,CAAE;AAAA;AAAA;AAAA;AACL;AAAA,GAEJ,EACF,CAAA;AAEJ;AC7FO,SAAS,kBAAA,CAAmB;AAAA,EACjC,IAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIxB,cAAAA,CAAmB,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AACtD,EAAAG,gBAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,WAAA,CAAY,EAAE,CAAA;AACd,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AACT,EAAA,uBACES,cAAAA;AAAA,IAACiC,SAAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,KAAA,KAAU;AACvB,QAAA,IAAI,CAAC,IAAA,EAAM,YAAA,CAAa,KAAK,CAAA;AAAA,MAC/B,CAAA;AAAA,MAEA,0BAAApC,eAAAA,CAACqC,gBAAAA,EAAA,EAAc,SAAA,EAAU,UAAA,EAAW,eAAY,sBAAA,EAC9C,QAAA,EAAA;AAAA,wBAAAlC,cAAAA,CAACoC,cAAAA,EAAA,EAAY,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBACnBpC,cAAAA,CAACqC,oBAAAA,EAAA,EACE,QAAA,EAAA,QAAA,GACG,6CACA,2DAAA,EACN,CAAA;AAAA,wBACArC,cAAAA;AAAA,UAACsC,QAAAA;AAAA,UAAA;AAAA,YACC,YAAA,EAAW,aAAA;AAAA,YACX,WAAA,EAAY,oBAAA;AAAA,YACZ,KAAA,EAAO,KAAA;AAAA,YACP,UAAU,CAAC,KAAA,KAAU,QAAA,CAAS,KAAA,CAAM,OAAO,KAAK;AAAA;AAAA,SAClD;AAAA,wBACAzC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACZ,QAAA,EAAA;AAAA,UAAA,MAAA,CACE,OAAO,CAAC,MAAA,KAAW,MAAA,CAAO,KAAA,CAAM,aAAY,CAAE,QAAA,CAAS,KAAA,CAAM,WAAA,EAAa,CAAC,CAAA,CAC3E,GAAA,CAAI,CAAC,2BACJA,eAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAU,yEAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAG,cAAAA;AAAA,kBAACiF,WAAA;AAAA,kBAAA;AAAA,oBACC,QAAA,EAAU,IAAA;AAAA,oBACV,OAAA,EAAS,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,EAAE,CAAA;AAAA,oBACpC,eAAA,EAAiB,CAAC,OAAA,KAChB,WAAA;AAAA,sBAAY,CAAC,GAAA,KACX,OAAA,GAAU,CAAC,GAAG,GAAA,EAAK,MAAA,CAAO,EAAE,CAAA,GAAI,IAAI,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,KAAO,OAAO,EAAE;AAAA;AACrE;AAAA,iBAEJ;AAAA,gBACC,MAAA,CAAO;AAAA;AAAA,aAAA;AAAA,YAZH,MAAA,CAAO;AAAA,WAcf,CAAA;AAAA,UACF,CAAC,OAAO,MAAA,oBACPjF,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,iCAAA,EAA+B;AAAA,SAAA,EAEhF,CAAA;AAAA,QACC,KAAA,oBACCA,cAAAA,CAAC,GAAA,EAAA,EAAE,MAAK,OAAA,EAAQ,SAAA,EAAU,4BACvB,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,wBAEFA,cAAAA;AAAA,UAACE,SAAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,IAAA,IAAQ,CAAC,QAAA,CAAS,MAAA;AAAA,YAC5B,aAAA,EAAY,sBAAA;AAAA,YACZ,SAAS,YAAY;AACnB,cAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,cAAA,QAAA,CAAS,IAAI,CAAA;AACb,cAAA,IAAI;AACF,gBAAA,MAAM,SAAS,QAAQ,CAAA;AACvB,gBAAA,YAAA,CAAa,KAAK,CAAA;AAAA,cACpB,SAAS,OAAA,EAAS;AAChB,gBAAA,QAAA,CAAS,OAAA,YAAmB,KAAA,GAAQ,OAAA,CAAQ,OAAA,GAAU,yBAAyB,CAAA;AAAA,cACjF,CAAA,SAAE;AACA,gBAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,cACf;AAAA,YACF,CAAA;AAAA,YAEC,iBAAO,iBAAA,GAAe;AAAA;AAAA;AACzB,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;AC/FO,SAAS,uBAAA,CAAwB;AAAA,EACtC,IAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA,GAAe,MAAA;AAAA,EACf,eAAA,GAAkBgF,gBAAA;AAAA,EAClB,OAAA,GAAU;AACZ,CAAA,EASG;AACD,EAAA,IAAI,CAAC,MAAM,uBAAOlF,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,QAAA,EAAC,CAAA;AAC3D,EAAA,IAAI,IAAA,KAAS,eAAe,CAAC,KAAA;AAC3B,IAAA,uBACEA,cAAAA;AAAA,MAACmF,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,OAAA;AAAA,QACA,WAAA,EAAa,KAAA;AAAA,QACb,OAAA,EAAS,eAAA;AAAA,QACT,oBAAA,EAAqB,sBAAA;AAAA,QACrB,QAAA,EAAU,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA;AAAA,QAC/B,WAAA,EAAa;AAAA;AAAA,KACf;AAEJ,EAAA,IAAI,CAAC,OAAO,uBAAOnF,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,qBAAA,EAAmB,CAAA;AAC9E,EAAA,MAAM,IAAA,GAAO,MAAM,WAAA,KAAgB,aAAA;AACnC,EAAA,MAAM,WAAA,GAAc,IAAA,GAAO,KAAA,GAAQ,CAAC,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AACjG,EAAA,uBACEA,cAAAA;AAAA,IAACmF,aAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,IAAA;AAAA,MACL,OAAA;AAAA,MACA,WAAA,EAAa,KAAA;AAAA,MACb,IAAA;AAAA,MACA,OAAA,EAAS,KAAA,CAAM,WAAA,CAAY,UAAA,CAAW,MAAM,CAAA;AAAA,MAC5C,WAAA;AAAA,MACA,QAAA,EAAU,CAAA,EAAG,KAAA,CAAM,UAAA,CAAW,OAAO,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,aAAa,MAAA,CAAO,CAAC,CAAA,IAAK,EAAE,GAAG,WAAA,EAAY;AAAA,MAC3F,SAAS,KAAA,CAAM,OAAA;AAAA,MACf;AAAA;AAAA,GACF;AAEJ","file":"chunk-B426HYRI.cjs","sourcesContent":["/**\n * A stepped workflow run on screen only (the builder's preview): agent steps run one at a time,\n * the way the server does, and answer with the prompt they would send; action steps just finish.\n * No thread, no agent.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport {\n composeStepPrompt,\n initialRunInputs,\n stepPhase,\n workflowSteps,\n type StepComposeOptions,\n} from './run'\nimport type { WorkflowDefinition, WorkflowInputs, WorkflowStepState } from './types'\nimport { useWorkflowView, type WorkflowRunView } from './useWorkflowView'\n\nexport interface UseWorkflowPreviewOptions extends StepComposeOptions {\n /** What a stand-in agent step answers; `{prompt}` is replaced with the prompt it would send. */\n answer?: string\n /** How long a stand-in step takes. */\n delayMs?: number\n}\n\nexport function useWorkflowPreview(\n workflow: WorkflowDefinition,\n { answer = '{prompt}', delayMs = 400, resolveWorkflow, compose }: UseWorkflowPreviewOptions = {}\n): WorkflowRunView {\n const steps = workflowSteps(workflow)\n const [inputs, setInputs] = useState<WorkflowInputs>(() => initialRunInputs(workflow))\n const [states, setStates] = useState<Record<string, WorkflowStepState>>({})\n const set = (id: string, state: WorkflowStepState) => setStates((s) => ({ ...s, [id]: state }))\n\n // A stand-in step's timer outlives the re-render its start causes; it is cleared on unmount, and\n // a step it cut short starts again (StrictMode mounts twice).\n const timers = useRef(new Map<string, ReturnType<typeof setTimeout>>())\n useEffect(() => {\n const pending = timers.current\n return () => {\n for (const t of pending.values()) clearTimeout(t)\n pending.clear()\n setStates((s) =>\n Object.fromEntries(\n Object.entries(s).map(([id, v]) => [\n id,\n v.status === 'running' ? { status: 'pending' } : v,\n ])\n )\n )\n }\n }, [])\n\n // One turn at a time: start the first ready agent step when nothing is running.\n useEffect(() => {\n if (Object.values(states).some((s) => s.status === 'running')) return\n // An action step (a signature, an email, a review) stands in the same way, with no answer.\n const next = steps.find(\n (s) =>\n (s.kind === 'agent' || s.kind === 'action') && stepPhase(steps, states, s.id) === 'ready'\n )\n if (!next || (next.kind !== 'agent' && next.kind !== 'action')) return\n const prompt =\n next.kind === 'agent'\n ? composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose })\n : ''\n set(next.id, { status: 'running', startedAt: new Date().toISOString() })\n timers.current.set(\n next.id,\n setTimeout(() => {\n timers.current.delete(next.id)\n set(\n next.id,\n next.kind === 'agent'\n ? { status: 'done', text: answer.replace('{prompt}', prompt) }\n : { status: 'done' }\n )\n }, delayMs)\n )\n // `inputs` are read when a step starts, not watched.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [states, steps, workflow])\n\n return useWorkflowView({\n steps,\n states,\n inputs,\n setInput: (name, value) => setInputs((i) => ({ ...i, [name]: value })),\n complete: async (step) => set(step.id, { status: 'done' }),\n skip: async (id) => set(id, { status: 'skipped' }),\n retry: async (id) => set(id, { status: 'pending' }),\n isLocked: (id) => states[id]?.status === 'done',\n })\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { ClipboardList, Copy, Eye, MessageSquare, Pencil, Trash2 } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatCount } from '../../lib/format'\n\nexport interface AgentCardLabels {\n running: string\n /** Pulse indicator aria-label. */\n runningIndicator: string\n /** Chip text; receives the running count. */\n runningCount: (count: number) => string\n /** Chip text; receives the task count (0 -> none yet). */\n taskCount: (count: number) => string\n goalMet: (met: number, total: number) => string\n watch: string\n message: string\n assignTask: string\n edit: string\n copyAddress: string\n deleteAgent: (name: string) => string\n}\n\nexport const DEFAULT_AGENT_CARD_LABELS: AgentCardLabels = {\n running: 'Running',\n runningIndicator: 'Running',\n runningCount: (count) => `${count} running`,\n taskCount: (count) =>\n count > 0 ? formatCount(count, { one: 'task', other: 'tasks' }) : 'no tasks yet',\n goalMet: (met, total) => `✓ ${met}/${total} met`,\n watch: 'Watch',\n message: 'Message',\n assignTask: 'Assign task',\n edit: 'Edit',\n copyAddress: 'Copy address',\n deleteAgent: (name) => `Delete agent ${name}`,\n}\n\nexport interface AgentCardTestIds {\n root: string\n watch: string\n message: string\n assignTask: string\n edit: string\n copyAddress: string\n delete: string\n}\n\nexport interface AgentCardProps {\n /** Display name; also the key in the test ids (`agent-card-{name}`, `agent-edit-{name}`...). */\n name: string\n /** The agent's avatar (the app supplies its entity avatar). */\n avatar: ReactNode\n /** Tasks currently running for this agent; shows a pulse + chip when > 0. */\n runningCount: number\n /** All tasks assigned to this agent. */\n taskCount: number\n /** Extra content under the chips (the app shows what the agent can access). */\n details?: ReactNode\n /** Criteria progress of the agent's most recent goal task. */\n goalProgress?: { met: number; total: number } | null\n /** When set, a Watch action opens the live run. */\n onWatch?: () => void\n /** Each action is optional: the button is omitted when its handler is absent. */\n onMessage?: () => void\n onAssignTask?: () => void\n onEdit?: () => void\n /** When set, a ghost \"Copy address\" action copies the agent's address (it is not shown raw). */\n onCopyAddress?: () => void\n onDelete?: () => void\n /**\n * Destination of the agent; the name becomes a real link. `onSelect` fires on a plain click\n * (modified clicks go to the browser).\n */\n href?: string\n onSelect?: () => void\n labels?: Partial<AgentCardLabels>\n /** Overrides for the default `agent-card-{name}` / `agent-watch-run-{name}` ... ids. */\n testIds?: Partial<AgentCardTestIds>\n testId?: string\n className?: string\n}\n\nconst ACTION = 'h-9 gap-1.5 px-2 text-sm pointer-coarse:h-11'\n\n/** One agent in the gallery: avatar, live task chips, and Watch / Assign task / Edit / Delete. */\nexport function AgentCard({\n name,\n avatar,\n runningCount,\n taskCount,\n goalProgress,\n details,\n onWatch,\n onMessage,\n onAssignTask,\n onEdit,\n onCopyAddress,\n onDelete,\n href,\n onSelect,\n labels,\n testIds,\n testId,\n className,\n ...rest\n}: AgentCardProps & Omit<HTMLAttributes<HTMLDivElement>, keyof AgentCardProps>) {\n const l = { ...DEFAULT_AGENT_CARD_LABELS, ...labels }\n return (\n <div\n {...rest}\n className={cn('rounded-lg bg-muted p-4', className)}\n data-testid={testIdOr(testId ?? testIds?.root, { testId: `agent-card-${name}` })}\n data-slot=\"agent-card\"\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"relative shrink-0\">\n {avatar}\n {runningCount > 0 && (\n <span\n className=\"absolute -right-0.5 -top-0.5 size-2.5 rounded-full bg-ai-ink\"\n role=\"img\"\n aria-label={l.runningIndicator}\n >\n <span className=\"absolute inset-0 animate-ping rounded-full bg-ai-ink opacity-60\" />\n </span>\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n {href ? (\n <ActionLink\n href={href}\n onSelect={onSelect}\n className=\"block max-w-full truncate text-left font-medium hover:underline\"\n >\n {name}\n </ActionLink>\n ) : (\n <p className=\"truncate font-medium\">{name}</p>\n )}\n <div className=\"mt-1.5 flex flex-wrap gap-1 text-xs text-muted-foreground\">\n {runningCount > 0 ? (\n <span className=\"rounded-full bg-ai-soft px-2 py-px text-ai-ink\">\n {l.runningCount(runningCount)}\n </span>\n ) : (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.taskCount(taskCount)}\n </span>\n )}\n {goalProgress && (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.goalMet(goalProgress.met, goalProgress.total)}\n </span>\n )}\n </div>\n {details}\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-center gap-1 pt-1\">\n {onMessage && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onMessage}\n data-testid={testIdOr(testIds?.message, { testId: `agent-message-${name}` })}\n >\n <MessageSquare size={14} /> {l.message}\n </Button>\n )}\n {onWatch && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-ai-ink hover:text-ai-ink')}\n onClick={onWatch}\n data-testid={testIdOr(testIds?.watch, { testId: `agent-watch-run-${name}` })}\n >\n <Eye size={14} /> {l.watch}\n </Button>\n )}\n {onAssignTask && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onAssignTask}\n data-testid={testIdOr(testIds?.assignTask, { testId: `agent-assign-task-${name}` })}\n >\n <ClipboardList size={14} /> {l.assignTask}\n </Button>\n )}\n {onEdit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onEdit}\n data-testid={testIdOr(testIds?.edit, { testId: `agent-edit-${name}` })}\n >\n <Pencil size={14} /> {l.edit}\n </Button>\n )}\n {onCopyAddress && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-muted-foreground')}\n onClick={onCopyAddress}\n data-testid={testIdOr(testIds?.copyAddress, { testId: `agent-copy-address-${name}` })}\n >\n <Copy size={14} /> {l.copyAddress}\n </Button>\n )}\n {onDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'ml-auto text-muted-foreground hover:text-red-text')}\n onClick={onDelete}\n aria-label={l.deleteAgent(name)}\n data-testid={testIdOr(testIds?.delete, { testId: `agent-delete-${name}` })}\n >\n <Trash2 size={14} />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Plus, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { EmptyState } from '../../components/EmptyState'\n\nexport interface AgentGalleryLabels {\n /** Intro line next to the New agent button. */\n description: string\n emptyTitle: string\n emptyDescription: string\n emptyCta: string\n newAgent: string\n}\n\nexport const DEFAULT_AGENT_GALLERY_LABELS: AgentGalleryLabels = {\n description: 'Personas that work for you, on demand.',\n emptyTitle: 'Create your first agent',\n emptyDescription:\n 'Describe a persona, pick its tools, generate an avatar, then hand it work from an agent card and watch it converge.',\n emptyCta: 'Create an agent',\n newAgent: 'New agent',\n}\n\nexport interface AgentGalleryTestIds {\n emptyCta: string\n createButton: string\n gallery: string\n}\n\nexport interface AgentGalleryProps {\n /** Number of agents; 0 shows the first-run empty state instead of the grid. */\n count: number\n onCreate: () => void\n /** The AgentCard children. */\n children?: ReactNode\n /** Intro line next to the New agent button (wins over `labels.description`). */\n description?: string\n labels?: Partial<AgentGalleryLabels>\n testIds?: Partial<AgentGalleryTestIds>\n className?: string\n}\n\n/** Agents grid with an intro row + New agent action, or a first-run empty state. */\nexport function AgentGallery({\n count,\n onCreate,\n children,\n description,\n labels,\n testIds,\n className,\n}: AgentGalleryProps) {\n const l = { ...DEFAULT_AGENT_GALLERY_LABELS, ...labels }\n if (count === 0) {\n return (\n <div className={cn('mt-8', className)}>\n <EmptyState\n className=\"rounded-lg border-0 bg-muted\"\n icon={Bot}\n title={l.emptyTitle}\n description={l.emptyDescription}\n action={\n <Button\n onClick={onCreate}\n className=\"gap-1.5\"\n data-testid={testIdOr(testIds?.emptyCta, { testId: 'agent-empty-cta' })}\n >\n <Sparkles size={16} /> {l.emptyCta}\n </Button>\n }\n />\n </div>\n )\n }\n return (\n <div className={className}>\n <div className=\"mb-4 flex flex-wrap items-center justify-between gap-x-3 gap-y-2\">\n <p className=\"min-w-0 text-sm text-muted-foreground\">{description ?? l.description}</p>\n <Button\n size=\"sm\"\n onClick={onCreate}\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n data-testid={testIdOr(testIds?.createButton, { testId: 'agent-create-button' })}\n >\n <Plus size={16} /> {l.newAgent}\n </Button>\n </div>\n <div\n className=\"grid grid-cols-[repeat(auto-fill,minmax(16rem,1fr))] gap-4\"\n data-testid={testIdOr(testIds?.gallery, { testId: 'agent-gallery' })}\n data-slot=\"agent-gallery\"\n >\n {children}\n </div>\n </div>\n )\n}\n","import type { HTMLAttributes, MouseEvent, ReactNode } from 'react'\nimport { Download, Eye, Globe, Lock, Pencil } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n SkillActionButton,\n SkillGlobalBadge,\n SkillTypeBadge,\n activateOnKey,\n type SkillGlobalBadgeLabels,\n} from './SkillParts'\n\nexport interface SkillCardLabels extends SkillGlobalBadgeLabels {\n preview: string\n edit: string\n export: string\n makePrivate: string\n makePrivateTooltip: string\n publish: string\n}\n\nexport const DEFAULT_SKILL_CARD_LABELS: SkillCardLabels = {\n global: 'Global',\n globalTitle: 'Shared with everyone in the marketplace',\n preview: 'Preview skill',\n edit: 'Edit skill',\n export: 'Export skill',\n makePrivate: 'Make private',\n makePrivateTooltip: 'Make private (unpublish)',\n publish: 'Publish to marketplace',\n}\n\nexport interface SkillCardTestIds {\n root: string\n preview: string\n edit: string\n export: string\n toggleVisibility: string\n}\n\nexport interface SkillCardProps {\n name: string\n description: string\n /** Skill type; a small badge is shown when not `markdown`. */\n type?: string\n /** `global` shows a badge and drives the publish toggle. */\n visibility?: 'mine' | 'global'\n /** Only owners see the publish toggle. */\n isOwner?: boolean\n /** Leading icon (the app supplies its skill entity icon). */\n icon?: ReactNode\n /** Invoke the skill (row click / Enter / Space). */\n onClick: () => void\n onPreview: (e: MouseEvent) => void\n onEdit: (e: MouseEvent) => void\n onExport: (e: MouseEvent) => void\n /** Publish / unpublish. Owner-only; omit to hide. */\n onToggleVisibility?: (e: MouseEvent) => void\n /** Destination of the skill; the name becomes a real link (modified clicks go to the browser). */\n href?: string\n labels?: Partial<SkillCardLabels>\n testId?: string\n testIds?: Partial<SkillCardTestIds>\n className?: string\n}\n\n/**\n * Horizontal skill row: icon + `/name` + badges + description, with preview / edit / export /\n * publish actions. All actions are always visible (nothing is hover-only).\n */\nexport function SkillCard({\n name,\n description,\n type,\n visibility = 'mine',\n isOwner = true,\n icon,\n onClick,\n onPreview,\n onEdit,\n onExport,\n onToggleVisibility,\n href,\n labels,\n testId,\n testIds,\n className,\n ...rest\n}: SkillCardProps & Omit<HTMLAttributes<HTMLDivElement>, keyof SkillCardProps | 'onClick'>) {\n const l = { ...DEFAULT_SKILL_CARD_LABELS, ...labels }\n const isGlobal = visibility === 'global'\n return (\n <div\n {...rest}\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'flex w-full cursor-pointer flex-wrap items-center gap-x-3 gap-y-1 rounded-lg bg-muted px-4 py-3 transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className\n )}\n onClick={onClick}\n onKeyDown={activateOnKey(onClick)}\n data-skill-name={name}\n data-testid={testIdOr(testId ?? testIds?.root, { testId: 'skill-card' })}\n data-slot=\"skill-card\"\n >\n {icon && <span className=\"shrink-0 text-primary [&>svg]:size-5\">{icon}</span>}\n {href ? (\n // The link owns plain + modified clicks; stop the row handler from double-firing.\n <span onClick={(e) => e.stopPropagation()}>\n <ActionLink\n href={href}\n onSelect={onClick}\n className=\"whitespace-nowrap font-mono text-sm font-medium\"\n >\n /{name}\n </ActionLink>\n </span>\n ) : (\n <span className=\"whitespace-nowrap font-mono text-sm font-medium\">/{name}</span>\n )}\n {type && type !== 'markdown' && <SkillTypeBadge type={type} />}\n {isGlobal && <SkillGlobalBadge labels={l} />}\n <span className=\"min-w-0 text-sm text-muted-foreground max-sm:order-last max-sm:w-full max-sm:line-clamp-2 sm:flex-1 sm:truncate\">\n {description}\n </span>\n <span className=\"ml-auto flex shrink-0 items-center gap-1\" data-slot=\"skill-card-actions\">\n <SkillActionButton\n label={l.preview}\n onClick={onPreview}\n testId={testIdOr(testIds?.preview, { testId: 'preview-skill-button' })}\n >\n <Eye className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n <SkillActionButton\n label={l.edit}\n onClick={onEdit}\n testId={testIdOr(testIds?.edit, { testId: 'edit-skill-button' })}\n >\n <Pencil className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n <SkillActionButton\n label={l.export}\n onClick={onExport}\n testId={testIdOr(testIds?.export, { testId: 'export-skill-button' })}\n >\n <Download className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n {isOwner && onToggleVisibility && (\n <SkillActionButton\n label={isGlobal ? l.makePrivate : l.publish}\n tooltip={isGlobal ? l.makePrivateTooltip : l.publish}\n onClick={onToggleVisibility}\n testId={testIdOr(testIds?.toggleVisibility, {\n testId: 'toggle-skill-visibility-button',\n })}\n >\n {isGlobal ? (\n <Lock className=\"size-4 text-muted-foreground\" />\n ) : (\n <Globe className=\"size-4 text-primary\" />\n )}\n </SkillActionButton>\n )}\n </span>\n </div>\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { Eye, Globe, Lock, Pencil, Trash2 } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n SkillActionButton,\n SkillGlobalBadge,\n SkillTypeBadge,\n activateOnKey,\n type SkillGlobalBadgeLabels,\n} from './SkillParts'\n\nexport interface SkillRowLabels extends SkillGlobalBadgeLabels {\n preview: string\n edit: string\n makePrivate: string\n publish: string\n delete: string\n /** Row tooltip; receives the skill name. */\n insertTitle: (name: string) => string\n}\n\nexport const DEFAULT_SKILL_ROW_LABELS: SkillRowLabels = {\n global: 'Global',\n globalTitle: 'Shared with everyone in the marketplace',\n preview: 'Preview',\n edit: 'Edit',\n makePrivate: 'Make private',\n publish: 'Publish to marketplace',\n delete: 'Delete',\n insertTitle: (name) => `Insert /${name} into the chat`,\n}\n\nexport interface SkillRowProps {\n name: string\n description?: string\n type?: string\n isGlobal?: boolean\n icon?: ReactNode\n /** Invoke the skill (inserts `/name` into the chat). */\n onInvoke: () => void\n onPreview: () => void\n /** Owner-only actions: omit to hide. */\n onEdit?: () => void\n onTogglePublish?: () => void\n onDelete?: () => void\n /** Destination of the skill; the name becomes a real link (modified clicks go to the browser). */\n href?: string\n labels?: Partial<SkillRowLabels>\n /** Overrides the default `skills-panel-row-{name}` id. */\n testId?: string\n className?: string\n}\n\n/** Compact two-line skill row for side panels. Actions are always visible. */\nexport function SkillRow({\n name,\n description,\n type,\n isGlobal = false,\n icon,\n onInvoke,\n onPreview,\n onEdit,\n onTogglePublish,\n onDelete,\n href,\n labels,\n testId,\n className,\n ...rest\n}: SkillRowProps & Omit<HTMLAttributes<HTMLDivElement>, keyof SkillRowProps | 'onClick'>) {\n const l = { ...DEFAULT_SKILL_ROW_LABELS, ...labels }\n return (\n <div\n {...rest}\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'flex cursor-pointer items-center gap-2 px-4 py-2 hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n className\n )}\n onClick={onInvoke}\n onKeyDown={activateOnKey(onInvoke)}\n data-testid={testIdOr(testId, { testId: `skills-panel-row-${name}` })}\n data-slot=\"skill-row\"\n title={l.insertTitle(name)}\n >\n {icon && <span className=\"shrink-0 text-primary [&>svg]:size-4\">{icon}</span>}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-1.5\">\n {href ? (\n // The link owns plain + modified clicks; stop the row handler from double-firing.\n <span className=\"min-w-0\" onClick={(e) => e.stopPropagation()}>\n <ActionLink href={href} onSelect={onInvoke} className=\"truncate font-mono text-sm\">\n /{name}\n </ActionLink>\n </span>\n ) : (\n <span className=\"truncate font-mono text-sm\">/{name}</span>\n )}\n {type && type !== 'markdown' && <SkillTypeBadge type={type} />}\n {isGlobal && <SkillGlobalBadge labels={l} />}\n </div>\n {description && <div className=\"truncate text-xs text-muted-foreground\">{description}</div>}\n </div>\n <div className=\"flex shrink-0 items-center gap-0.5\">\n <SkillActionButton label={l.preview} onClick={() => onPreview()}>\n <Eye className=\"size-4\" />\n </SkillActionButton>\n {onEdit && (\n <SkillActionButton label={l.edit} onClick={() => onEdit()}>\n <Pencil className=\"size-4\" />\n </SkillActionButton>\n )}\n {onTogglePublish && (\n <SkillActionButton\n label={isGlobal ? l.makePrivate : l.publish}\n onClick={() => onTogglePublish()}\n >\n {isGlobal ? <Lock className=\"size-4\" /> : <Globe className=\"size-4 text-primary\" />}\n </SkillActionButton>\n )}\n {onDelete && (\n <SkillActionButton label={l.delete} onClick={() => onDelete()}>\n <Trash2 className=\"size-4 text-destructive\" />\n </SkillActionButton>\n )}\n </div>\n </div>\n )\n}\n","/** Compact elapsed time: 123ms, 5s, 2m 30s, 1h 15m. */\nexport function formatElapsed(startTime: number, endTime?: number): string {\n const elapsedMs = (endTime || Date.now()) - startTime\n if (elapsedMs < 1000) return `${Math.round(elapsedMs)}ms`\n if (elapsedMs < 60000) return `${Math.round(elapsedMs / 1000)}s`\n if (elapsedMs < 3600000) {\n const minutes = Math.floor(elapsedMs / 60000)\n const seconds = Math.round((elapsedMs % 60000) / 1000)\n return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`\n }\n const hours = Math.floor(elapsedMs / 3600000)\n const minutes = Math.round((elapsedMs % 3600000) / 60000)\n return minutes > 0 ? `${hours}h ${minutes}m` : `${hours}h`\n}\n","import { useEffect, useState, type ReactNode } from 'react'\nimport { AlertTriangle, Check, FileX, Loader2, SkipForward, X, type LucideIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\n\nconst ACTIVE_STATUSES = new Set(['parsing', 'encrypting', 'indexing', 'analysing'])\nconst RUNNING_STATUSES = new Set(['queued', ...ACTIVE_STATUSES])\n\ninterface StatusTone {\n text: string\n bar: string\n Icon: LucideIcon\n}\n\nconst TONES: Record<string, StatusTone> = {\n completed: { text: 'text-green-text', bar: 'bg-green-text/90', Icon: Check },\n failed: { text: 'text-red-text', bar: 'bg-red-text/90', Icon: X },\n parsing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n encrypting: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n indexing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n analysing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n queued: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: Loader2 },\n skipped: { text: 'text-gray-text', bar: 'bg-gray-text/90', Icon: SkipForward },\n empty: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: FileX },\n 'low-content': { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: AlertTriangle },\n}\nconst DEFAULT_TONE: StatusTone = { text: 'text-gray-text', bar: 'bg-blue-text/90', Icon: Loader2 }\n\nexport interface UploadTaskItemLabels {\n /** Delete action text (failed rows). */\n delete: string\n /** Delete action tooltip. */\n deleteTitle: string\n /** aria-label of the progress bar. */\n progress: (fileName: string) => string\n /** Status line text; the default capitalises the raw status. */\n status: (status: string, percent: number) => string\n}\n\nexport const DEFAULT_UPLOAD_TASK_ITEM_LABELS: UploadTaskItemLabels = {\n delete: 'Delete',\n deleteTitle: 'Delete file',\n progress: (fileName) => `${fileName} progress`,\n status: (status, percent) => `${status.charAt(0).toUpperCase() + status.slice(1)} - ${percent}%`,\n}\n\n/** Per-row test ids derived from the task id (defaults `task-item-{id}`, ...). */\nexport interface UploadTaskItemTestIds {\n item: (taskId: string) => string\n fileName: (taskId: string) => string\n progressBar: (taskId: string) => string\n status: (taskId: string) => string\n delete: (taskId: string) => string\n}\n\nexport interface UploadTaskItemProps {\n taskId: string\n fileName: string\n /** queued | parsing | encrypting | indexing | analysing | completed | failed | skipped | empty | low-content */\n status: string\n /** 0-1 fraction or 0-100 percentage. */\n progress: number\n startTime?: number\n endTime?: number\n /** File-type icon for the row (the app maps the extension). */\n fileIcon?: ReactNode\n /** Shown as a Delete action on failed tasks. */\n onDelete?: (taskId: string) => void\n testIds?: Partial<UploadTaskItemTestIds>\n labels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\n/** One document-processing row: status icon, file, progress bar, status text + elapsed time. */\nexport function UploadTaskItem({\n taskId,\n fileName,\n status,\n progress,\n startTime,\n endTime,\n fileIcon,\n onDelete,\n testIds,\n labels,\n className,\n}: UploadTaskItemProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_ITEM_LABELS, ...labels }\n const [elapsed, setElapsed] = useState('')\n\n useEffect(() => {\n if (!startTime) {\n setElapsed('')\n return\n }\n if (RUNNING_STATUSES.has(status)) {\n const tick = () => setElapsed(formatElapsed(startTime))\n tick()\n const interval = setInterval(tick, 1000)\n return () => clearInterval(interval)\n }\n setElapsed(formatElapsed(startTime, endTime))\n }, [startTime, endTime, status])\n\n const percent = progress > 1 ? progress : progress * 100\n const tone = TONES[status] ?? DEFAULT_TONE\n const StatusIcon = tone.Icon\n\n return (\n <div\n className={cn(\n 'mb-2 w-full max-w-full overflow-hidden rounded-md bg-muted p-2 box-border',\n className\n )}\n data-testid={testIdOr(testIds?.item?.(taskId), { testId: `task-item-${taskId}` })}\n data-slot=\"upload-task-item\"\n >\n <div className=\"mb-1 flex w-full max-w-full items-center gap-2 overflow-hidden\">\n <div className={cn('shrink-0', tone.text)}>\n <StatusIcon className={cn('size-4', ACTIVE_STATUSES.has(status) && 'animate-spin')} />\n </div>\n {fileIcon && <div className=\"shrink-0\">{fileIcon}</div>}\n <div\n className=\"min-w-0 flex-1 truncate text-sm font-medium\"\n title={fileName}\n data-testid={testIdOr(testIds?.fileName?.(taskId), { testId: `task-filename-${taskId}` })}\n >\n {fileName}\n </div>\n </div>\n\n <div\n className=\"mb-1 h-2 w-full max-w-full overflow-hidden rounded-md bg-background\"\n data-testid={testIdOr(testIds?.progressBar?.(taskId), {\n testId: `task-progress-bar-${taskId}`,\n })}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(percent)}\n aria-label={l.progress(fileName)}\n >\n <div\n className={cn('h-2 rounded-md transition-all duration-300 ease-in-out', tone.bar)}\n style={{ width: `${percent}%` }}\n />\n </div>\n\n <div className=\"flex w-full max-w-full items-center justify-between overflow-hidden text-sm\">\n <span\n className=\"truncate text-gray-text\"\n data-testid={testIdOr(testIds?.status?.(taskId), { testId: `task-status-${taskId}` })}\n >\n {l.status(status, Math.round(percent))}\n {elapsed && <span className=\"ml-2 text-muted-foreground\">({elapsed})</span>}\n </span>\n\n {status === 'failed' && onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(taskId)}\n className=\"shrink-0 text-sm text-red-text hover:text-red-text/80 pointer-coarse:min-h-11 pointer-coarse:px-3\"\n title={l.deleteTitle}\n data-testid={testIdOr(testIds?.delete?.(taskId), { testId: `delete-task-${taskId}` })}\n >\n {l.delete}\n </button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { UploadTaskItem, type UploadTaskItemLabels } from './UploadTaskItem'\n\nexport interface UploadTaskView {\n fileName: string\n status: string\n progress: number\n startTime?: number\n endTime?: number\n}\n\nexport interface UploadTaskListProps {\n tasks: Record<string, UploadTaskView>\n /** Include only matching tasks. */\n filter?: (taskId: string, task: UploadTaskView) => boolean\n title?: string\n onDelete?: (taskId: string) => void\n /** File-type icon per file name. */\n renderFileIcon?: (fileName: string) => ReactNode\n /** Render the \"No documents in this category\" message when empty (default true). */\n showEmptyState?: boolean\n testIds?: Partial<{ root: string; empty: string; title: string }>\n labels?: Partial<UploadTaskListLabels>\n /** Labels forwarded to every row. */\n itemLabels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\nexport interface UploadTaskListLabels {\n title: string\n empty: string\n}\n\nexport const DEFAULT_UPLOAD_TASK_LIST_LABELS: UploadTaskListLabels = {\n title: 'Active Tasks',\n empty: 'No documents in this category',\n}\n\nexport function UploadTaskList({\n tasks,\n filter,\n title,\n onDelete,\n renderFileIcon,\n showEmptyState = true,\n testIds,\n labels,\n itemLabels,\n className,\n}: UploadTaskListProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_LIST_LABELS, ...labels }\n const heading = title ?? l.title\n const safeTasks = typeof tasks === 'object' && tasks !== null ? tasks : {}\n let entries = Object.entries(safeTasks)\n if (filter) entries = entries.filter(([id, task]) => filter(id, task))\n\n if (entries.length === 0) {\n return showEmptyState ? (\n <div\n className=\"text-sm italic text-muted-foreground\"\n data-testid={testIdOr(testIds?.empty, { testId: 'task-list-empty-state' })}\n >\n {l.empty}\n </div>\n ) : null\n }\n\n return (\n <div\n data-testid={testIdOr(testIds?.root, { testId: 'task-status-list' })}\n data-slot=\"upload-task-list\"\n className={cn('box-border w-full max-w-full', className)}\n >\n {heading && (\n <h3\n className=\"mb-2 truncate text-sm font-semibold\"\n data-testid={testIdOr(testIds?.title, { testId: 'task-list-title' })}\n >\n {heading}\n </h3>\n )}\n <div className=\"box-border w-full max-w-full overflow-hidden\">\n {entries.map(([taskId, task]) => (\n <UploadTaskItem\n key={taskId}\n taskId={taskId}\n fileName={task.fileName}\n status={task.status}\n progress={task.progress}\n startTime={task.startTime}\n endTime={task.endTime}\n fileIcon={renderFileIcon?.(task.fileName)}\n onDelete={onDelete}\n labels={itemLabels}\n className=\"box-border max-w-full\"\n />\n ))}\n </div>\n </div>\n )\n}\n","import { FileText } from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** A document a task produced, as the Outputs cell needs it. */\nexport interface TaskOutput {\n id: string\n name: string\n}\n\nexport interface TaskOutputsCellLabels {\n none: string\n /** Menu trigger's accessible name. */\n open: (count: number) => string\n /** \"+2\" next to the first file name. */\n more: (count: number) => string\n}\n\nexport const DEFAULT_TASK_OUTPUTS_CELL_LABELS: TaskOutputsCellLabels = {\n none: '—',\n open: (count) => `${count} ${count === 1 ? 'output' : 'outputs'}`,\n more: (count) => `+${count}`,\n}\n\nexport interface TaskOutputsCellProps {\n /** Task id: keys the test ids (`task-outputs-{id}`, `task-output-{id}-{docId}`). */\n id: string\n outputs?: readonly TaskOutput[]\n onOpen: (documentId: string) => void\n testId?: string\n labels?: Partial<TaskOutputsCellLabels>\n}\n\n/** The documents a task generated: the first file name and a count, with a menu that opens each. */\nexport function TaskOutputsCell({ id, outputs, onOpen, testId, labels }: TaskOutputsCellProps) {\n const l = { ...DEFAULT_TASK_OUTPUTS_CELL_LABELS, ...labels }\n const base = testIdOr(testId, { testId: `task-outputs-${id}` })\n if (!outputs || outputs.length === 0) {\n return (\n <span className=\"text-xs text-muted-foreground\" data-testid={base} data-state=\"none\">\n {l.none}\n </span>\n )\n }\n const [first] = outputs\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 max-w-full gap-1.5 px-2 text-xs\"\n aria-label={l.open(outputs.length)}\n data-testid={base}\n data-count={outputs.length}\n >\n <FileText className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{first.name}</span>\n {outputs.length > 1 && (\n <span className=\"shrink-0 text-muted-foreground\">{l.more(outputs.length - 1)}</span>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {outputs.map((o) => (\n <DropdownMenuItem\n key={o.id}\n onSelect={() => onOpen(o.id)}\n data-testid={`task-output-${id}-${o.id}`}\n >\n <FileText className=\"mr-2 size-4\" aria-hidden />\n <span className=\"truncate\">{o.name}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import { useState } from 'react'\nimport { CornerDownRight } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskMoveOption {\n id: string\n label: string\n}\n\nexport interface TaskMoveDialogLabels {\n title: string\n none: string\n search: string\n empty: string\n cancel: string\n}\n\nexport interface TaskMoveDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Where the task can go (the host excludes the task itself and its descendants). */\n options: TaskMoveOption[]\n /** The task's current parent, marked in the list. */\n currentParentId?: string | null\n /** `null` moves the task to the top level. */\n onPick: (parentId: string | null) => void\n labels: TaskMoveDialogLabels\n testId?: string\n}\n\n/** A parent picker: choose the task another task becomes a sub-task of, or the top level. */\nexport function TaskMoveDialog({\n open,\n onOpenChange,\n options,\n currentParentId,\n onPick,\n labels,\n testId,\n}: TaskMoveDialogProps) {\n const [query, setQuery] = useState('')\n const id = testIdOr(testId, { testId: 'task-move' })\n const q = query.trim().toLowerCase()\n const shown = q ? options.filter((o) => o.label.toLowerCase().includes(q)) : options\n const pick = (parentId: string | null) => {\n onPick(parentId)\n onOpenChange(false)\n }\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (!next) setQuery('')\n onOpenChange(next)\n }}\n >\n <DialogContent presentation=\"sheet\" className=\"max-h-[80dvh] sm:max-w-md\" data-testid={id}>\n <DialogHeader>\n <DialogTitle>{labels.title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{labels.title}</DialogDescription>\n </DialogHeader>\n <Input\n value={query}\n placeholder={labels.search}\n aria-label={labels.search}\n onChange={(e) => setQuery(e.target.value)}\n data-testid={`${id}-search`}\n />\n <ul\n className=\"flex max-h-[50dvh] flex-col gap-1 overflow-y-auto\"\n data-testid={`${id}-list`}\n >\n {!q && (\n <li>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={!currentParentId}\n onClick={() => pick(null)}\n data-testid={`${id}-none`}\n >\n {labels.none}\n </Button>\n </li>\n )}\n {shown.map((o) => (\n <li key={o.id}>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={o.id === currentParentId}\n onClick={() => pick(o.id)}\n data-testid={`${id}-option-${o.id}`}\n >\n <CornerDownRight className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{o.label}</span>\n </Button>\n </li>\n ))}\n {shown.length === 0 && (\n <li className=\"px-2 py-4 text-center text-sm text-muted-foreground\">{labels.empty}</li>\n )}\n </ul>\n <div className=\"flex justify-end\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {labels.cancel}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useState } from 'react'\nimport {\n CheckCheck,\n KeyRound,\n CornerDownRight,\n ListPlus,\n MoreHorizontal,\n History,\n Pencil,\n RotateCcw,\n Trash2,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { isPlainTodo, type TaskListRow } from './taskRows'\nimport type { TaskStatusKey } from './taskLabels'\nimport type { TaskListLabels } from './taskTableLabels'\n\nexport interface TaskRowMenuProps {\n task: TaskListRow\n status: TaskStatusKey\n busy: boolean\n /** The viewer owns the task: only they delete it, grant its agent access, or change who sees it. */\n isOwner: boolean\n /** The viewer may change who sees it and delete it: its creator, or an owner of the workspace. */\n canAdmin: boolean\n /** The viewer can edit it: its owner, or an editor of the workspace a shared task sits in. */\n canEdit: boolean\n labels: TaskListLabels\n /** Explicit completion permission; otherwise follows the existing edit permission. */\n canMarkDone?: boolean\n /** Hide when the containing view already offers a reopen control. */\n canReopen?: boolean\n selected?: boolean\n onToggleSelected?: () => void\n onMarkDone: () => void\n onReopen: () => void\n onAddSubtask?: () => void\n onEdit: () => void\n onDelete?: () => void\n onMoveTo?: () => void\n onNotify?: () => void\n /** Open the task's activity timeline. */\n onToggleShared?: () => void\n onOpenActivity?: () => void\n /** Present only when a run is waiting for access. */\n onGrantAccess?: () => void\n}\n\nexport function TaskRowMenu({\n task,\n status,\n busy,\n isOwner,\n canAdmin,\n canEdit,\n labels,\n canMarkDone = canEdit,\n canReopen = canEdit,\n selected = false,\n onToggleSelected,\n onMarkDone,\n onReopen,\n onAddSubtask,\n onEdit,\n onDelete,\n onMoveTo,\n onOpenActivity,\n onToggleShared,\n onGrantAccess,\n}: TaskRowMenuProps) {\n const [open, setOpen] = useState(false)\n const id = task.external_id\n // An editor can do everything but delete and grant access (the owner's). A guest only reads.\n // A plain chat is not run, finished or reopened: it can be renamed, moved and deleted.\n const isChat = status === 'chat'\n const done = status === 'done'\n return (\n <DropdownMenu open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={labels.moreActions}\n data-testid={`task-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {onToggleSelected && (\n <DropdownMenuItem onSelect={onToggleSelected} data-testid={`task-select-${id}`}>\n {selected ? 'Deselect task' : 'Select task'}\n </DropdownMenuItem>\n )}\n {isOwner && onGrantAccess && task.pending_auth_request_id && (\n <DropdownMenuItem\n onSelect={onGrantAccess}\n data-testid={`task-grant-${id}`}\n className=\"text-destructive\"\n >\n <KeyRound className=\"mr-2 size-4\" aria-hidden />\n {labels.grantAccess}\n </DropdownMenuItem>\n )}\n {isChat || !canEdit\n ? null\n : done\n ? canReopen && (\n <DropdownMenuItem\n disabled={busy}\n onSelect={onReopen}\n data-testid={`task-reopen-${id}`}\n >\n <RotateCcw className=\"mr-2 size-4\" aria-hidden />\n {labels.reopen}\n </DropdownMenuItem>\n )\n : canMarkDone && (\n <DropdownMenuItem\n disabled={busy}\n onSelect={onMarkDone}\n data-testid={`task-mark-done-${id}`}\n >\n <CheckCheck className=\"mr-2 size-4\" aria-hidden />\n {labels.markDone}\n </DropdownMenuItem>\n )}\n {!isChat && onOpenActivity && (\n <DropdownMenuItem onSelect={onOpenActivity} data-testid={`task-activity-${id}`}>\n <History className=\"mr-2 size-4\" aria-hidden />\n {labels.activity}\n </DropdownMenuItem>\n )}\n {isOwner && onToggleShared && (\n <DropdownMenuItem disabled={busy} onSelect={onToggleShared}>\n {task.is_shared ? 'Make private' : 'Share with workspace'}\n </DropdownMenuItem>\n )}\n {canEdit && onAddSubtask && (\n <DropdownMenuItem onSelect={onAddSubtask} data-testid={`task-add-subtask-${id}`}>\n <ListPlus className=\"mr-2 size-4\" aria-hidden />\n {labels.addSubtask}\n </DropdownMenuItem>\n )}\n {canEdit && onMoveTo && (\n <DropdownMenuItem onSelect={onMoveTo} data-testid={`task-move-${id}`}>\n <CornerDownRight className=\"mr-2 size-4\" aria-hidden />\n {labels.moveTo}\n </DropdownMenuItem>\n )}\n {canEdit && (\n <DropdownMenuItem onSelect={onEdit} data-testid={`task-edit-${id}`}>\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {isChat ? labels.rename : labels.edit}\n </DropdownMenuItem>\n )}\n {canEdit && onDelete && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={onDelete}\n title={canAdmin ? undefined : labels.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`task-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {labels.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { AlertCircle, Check, CircleDashed, Loader2, MessageSquare } from 'lucide-react'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\nimport { STATUS_LABELS, STATUS_TONE, asTaskStatus, type TaskStatusKey } from './taskLabels'\n\nexport interface TaskStatusPillLabels {\n waitingForAccess: string\n lastRunFailed: string\n /** The visible word beside the status when the last run failed. */\n failed: string\n}\n\nexport const DEFAULT_TASK_STATUS_PILL_LABELS: TaskStatusPillLabels = {\n waitingForAccess: 'Waiting for access',\n lastRunFailed: 'Last run failed',\n failed: 'Failed',\n}\n\nexport interface TaskStatusPillProps {\n /** Task id: keys the test id (`task-status-{id}`). */\n id: string\n status: string | null | undefined\n /** When the in-flight run started (ISO); a generating pill shows a live elapsed time. */\n runStartedAt?: string | null\n /** The last run's error, shown as a danger dot with the message on hover. */\n lastError?: string | null\n /** A run is waiting for the owner to grant workspace access. */\n awaitingAccess?: boolean\n testId?: string\n labels?: Partial<TaskStatusPillLabels>\n /** Tooltip with the latest step (\"To do · 2 min ago\"). */\n hint?: string\n}\n\nconst ICON = 'size-3'\n\nfunction StatusIcon({ status }: { status: TaskStatusKey }) {\n switch (status) {\n case 'generating':\n return <Loader2 className={`${ICON} animate-spin`} aria-hidden />\n case 'done':\n return <Check className={ICON} aria-hidden />\n case 'chat':\n return <MessageSquare className={ICON} aria-hidden />\n default:\n return <CircleDashed className={ICON} aria-hidden />\n }\n}\n\n/** Ticks once a second while mounted, so a generating pill's elapsed time stays live. */\nfunction useNow(active: boolean): number {\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n if (!active) return\n const timer = setInterval(() => setNow(Date.now()), 1000)\n return () => clearInterval(timer)\n }, [active])\n return now\n}\n\n/** A task's workflow status as one tinted pill: To do, Generating (live), Done. */\nexport function TaskStatusPill({\n id,\n status,\n runStartedAt,\n lastError,\n awaitingAccess = false,\n testId,\n labels,\n hint,\n}: TaskStatusPillProps) {\n const l = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...labels }\n const key = asTaskStatus(status)\n const generating = key === 'generating'\n const now = useNow(generating && Boolean(runStartedAt))\n const started = runStartedAt ? Date.parse(runStartedAt) : NaN\n\n let text: string = STATUS_LABELS[key]\n let tone = STATUS_TONE[key]\n if (awaitingAccess) {\n text = l.waitingForAccess\n tone = 'danger'\n }\n const elapsed = generating && !Number.isNaN(started) ? formatElapsed(started, now) : null\n\n return (\n <span className=\"inline-flex items-center gap-1.5\" data-slot=\"task-status\" title={hint}>\n <ToneBadge\n tone={tone}\n icon={<StatusIcon status={key} />}\n data-status={key}\n data-testid={testIdOr(testId, { testId: `task-status-${id}` })}\n >\n {text}\n {elapsed && <span className=\"tabular-nums opacity-70\">· {elapsed}</span>}\n </ToneBadge>\n {lastError && !generating && (\n <span\n role=\"img\"\n aria-label={l.lastRunFailed}\n title={`${l.lastRunFailed}: ${lastError}`}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-medium text-red-text\"\n data-testid={`task-error-${id}`}\n >\n <AlertCircle className=\"size-3.5\" aria-hidden />\n {l.failed}\n </span>\n )}\n </span>\n )\n}\n","/**\n * Column definitions for the tasks grid. Every column has an\n * explicit `colId` (AG Grid persists column state by id: see CLAUDE.md). The table supplies behaviour and\n * the cells that need it through slots; the structure, widths and headers live here. The slots must be\n * stable functions (the table keeps the latest handlers behind them) so the definitions are built once\n * and the grid never refreshes its columns on a selection or expand.\n *\n * Every conversation is a task: Owner (who has the next step), due, shared, thread link,\n * status, outputs. Rows are `TaskGridRow`s: a task plus where it sits in the sub-task tree, so the\n * order is the tree's. A column's header still shows and reports the sort, but the grid's own sort is\n * a no-op (`keepOrder`): that would tear sub-tasks away from their parent, so the table sorts within\n * each level instead (see `buildTaskRows`).\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport type { TaskGridRow, TaskListRow } from './taskRows'\nimport type { TaskListLabels } from './taskTableLabels'\n\n/** The actions column's width: Allow access and the menu (the widest row). */\nexport const ACTIONS_WIDTH = 160\nconst NARROW_ACTIONS_WIDTH = 56\n\nexport const TASK_COLUMN_ORDER = [\n 'name',\n 'owner',\n 'due',\n 'status',\n 'outputs',\n 'shared',\n 'actions',\n] as const\n\nexport interface CreateTaskColumnsOptions<T extends TaskListRow> {\n labels: TaskListLabels\n renderName: (row: TaskGridRow<T>) => ReactNode\n /** Who has the next step. */\n renderOwner: (row: TaskGridRow<T>) => ReactNode\n renderDue: (row: TaskGridRow<T>) => ReactNode\n renderShared: (row: TaskGridRow<T>) => ReactNode\n /** The documents the task generated. */\n renderOutputs: (row: TaskGridRow<T>) => ReactNode\n /** A phone-width grid: the actions column is just the menu. */\n narrow?: boolean\n /** Whether the Outputs column is shown: only worth the room once some task has outputs. */\n showOutputs?: boolean\n renderStatus: (row: TaskGridRow<T>) => ReactNode\n /** Who is in the thread (Threads view). */\n renderActions: (row: TaskGridRow<T>) => ReactNode\n /** Plain text of the owner cell, for sorting, filters and the clipboard. */\n getOwnerName: (row: TaskGridRow<T>) => string\n}\n\n/** Grid-side comparator that keeps the table's order: the table sorts each level itself. */\nconst keepOrder = () => 0\n\n/** Columns the user can sort by, per view. */\nexport type SortableTaskColumn = 'name' | 'owner' | 'due' | 'status' | 'updated' | 'messages'\n\n/** The cell renderer for a slot: a missing row (AG Grid's loading shell) renders nothing. */\nfunction cell<T extends TaskListRow>(render: (row: TaskGridRow<T>) => ReactNode) {\n return (params: ICellRendererParams<TaskGridRow<T>>): ReactNode =>\n params.data ? render(params.data) : null\n}\n\nexport function createTaskColumns<T extends TaskListRow>(\n o: CreateTaskColumnsOptions<T>\n): ColDef<TaskGridRow<T>>[] {\n const l = o.labels\n const sortable = {\n sortable: true,\n comparator: keepOrder,\n sortingOrder: ['asc' as const, 'desc' as const, null],\n }\n const base: Partial<ColDef<TaskGridRow<T>>> = {\n sortable: false,\n suppressMovable: true,\n // Keyboard focus lands on the name cell only (arrow keys expand and collapse sub-tasks there).\n suppressNavigable: true,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n const name: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'name',\n ...sortable,\n suppressNavigable: false,\n headerName: l.colTask,\n flex: 3,\n minWidth: 200,\n cellRenderer: cell(o.renderName),\n }\n const shared: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width: 90,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'center' },\n valueGetter: (p) => p.data?.task.is_shared ?? false,\n cellRenderer: cell(o.renderShared),\n }\n const actions = (): ColDef<TaskGridRow<T>> => ({\n ...base,\n colId: 'actions',\n headerName: '',\n // Always in view, even if the rest has to scroll.\n pinned: 'right',\n lockPinned: true,\n width: o.narrow ? NARROW_ACTIONS_WIDTH : ACTIONS_WIDTH,\n minWidth: NARROW_ACTIONS_WIDTH,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end' },\n cellRenderer: cell(o.renderActions),\n })\n\n // Left to right: the title, who has the next step, when, how it stands, then who sees it and the\n // thread link, with the actions (Approve included) last, at the right edge.\n return [\n name,\n {\n ...base,\n colId: 'owner',\n ...sortable,\n headerName: l.colOwner,\n headerTooltip: l.ownerHint,\n flex: 1.4,\n minWidth: 150,\n valueGetter: (p) => (p.data ? o.getOwnerName(p.data) : ''),\n cellRenderer: cell(o.renderOwner),\n },\n {\n ...base,\n colId: 'due',\n ...sortable,\n headerName: l.colDue,\n flex: 1,\n minWidth: 140,\n valueGetter: (p) => p.data?.task.due_at ?? '',\n cellRenderer: cell(o.renderDue),\n },\n {\n ...base,\n colId: 'status',\n ...sortable,\n headerName: l.colStatus,\n // Wide enough for \"Generating\" and \"Waiting for access\" in full, with the elapsed time.\n flex: 1.3,\n minWidth: 170,\n valueGetter: (p) => p.data?.task.status ?? '',\n cellRenderer: cell(o.renderStatus),\n },\n ...(o.showOutputs\n ? [\n {\n ...base,\n colId: 'outputs',\n headerName: l.colOutputs,\n flex: 1.2,\n minWidth: 130,\n cellRenderer: cell(o.renderOutputs),\n } as ColDef<TaskGridRow<T>>,\n ]\n : []),\n shared,\n actions(),\n ]\n}\n","/**\n * Drop the least useful columns as a grid gets narrower, so the actions column (Approve, Run, the menu)\n * is never pushed off the edge. Each rule keeps its column while the grid is at least `minWidth` wide.\n */\nimport type { GridApi } from 'ag-grid-community'\n\nexport interface ColumnWidthRule {\n colId: string\n /** The narrowest grid (px) that still shows the column. */\n minWidth: number\n}\n\nexport function applyColumnWidthRules(\n api: Pick<GridApi, 'getColumn' | 'setColumnsVisible'>,\n gridWidth: number,\n rules: readonly ColumnWidthRule[]\n): void {\n for (const rule of rules) {\n if (api.getColumn(rule.colId)) api.setColumnsVisible([rule.colId], gridWidth >= rule.minWidth)\n }\n}\n","import type { TaskStatusKey } from './taskLabels'\n\nexport interface TaskListLabels {\n agent: string\n filterAll: string\n emptyTitle: string\n emptyMessage: string\n noMatches: string\n due: (when: string) => string\n overdue: (when: string) => string\n colTask: string\n colOwner: string\n ownerHint: string\n colOutputs: string\n preparedBy: (agentName: string) => string\n colDue: string\n colStatus: string\n me: string\n someone: string\n noDue: string\n colShared: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n goalMet: (met: number, total: number) => string\n subtasksDone: (done: number, total: number) => string\n expandSubtasks: string\n collapseSubtasks: string\n selectAll: string\n selectTask: (name: string) => string\n markDone: string\n reopen: string\n markDoneMany: string\n markDoneManyHint: string\n deleteMany: string\n moveTo: string\n untitled: string\n fromWorkflow: (workflowName: string) => string\n searchLabel: string\n searchPlaceholder: string\n expandAll: string\n collapseAll: string\n moveToTitle: (taskName: string) => string\n moveToNone: string\n moveToSearch: string\n moveToEmpty: string\n moveToCancel: string\n subtasksSelected: (count: number) => string\n addSubtask: string\n edit: string\n rename: string\n delete: string\n grantAccess: string\n allowAccess: string\n moreActions: string\n activity: string\n /** Status tooltip: the latest step and how long ago. */\n statusHint: (status: string, ago: string) => string\n status: Partial<Record<TaskStatusKey, string>>\n}\n\nexport const DEFAULT_TASK_LIST_LABELS: TaskListLabels = {\n filterAll: 'All',\n emptyTitle: 'No tasks yet',\n emptyMessage:\n 'Use New to add one: just type what you need, or add a due date. Automations that create tasks live on the Workflows page. You always decide when a task is done.',\n noMatches: 'No tasks match.',\n due: (when) => when,\n overdue: (when) => `${when} · overdue`,\n agent: 'Agent',\n colTask: 'Task',\n colOwner: 'Owner',\n ownerHint: 'Who created the task. They are notified when its run finishes.',\n colOutputs: 'Outputs',\n preparedBy: (agent) => `Prepared by ${agent}`,\n colDue: 'Due',\n colStatus: 'Status',\n me: 'Me',\n someone: 'Someone',\n noDue: '—',\n colShared: 'Shared',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n goalMet: (met, total) => `${met}/${total} met`,\n subtasksDone: (done, total) => `${done}/${total} sub-tasks done`,\n expandSubtasks: 'Show sub-tasks',\n collapseSubtasks: 'Hide sub-tasks',\n selectAll: 'Select all tasks',\n selectTask: (name) => `Select ${name}`,\n markDone: 'Mark done',\n reopen: 'Reopen',\n markDoneMany: 'Mark done',\n markDoneManyHint: 'Marks the selected tasks done.',\n deleteMany: 'Delete',\n moveTo: 'Move to…',\n untitled: 'Untitled task',\n fromWorkflow: (name) => `From “${name}”`,\n searchLabel: 'Search tasks',\n searchPlaceholder: 'Search tasks…',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n moveToTitle: (name) => `Move “${name}” to…`,\n moveToNone: 'No parent (top level)',\n moveToSearch: 'Search tasks…',\n moveToEmpty: 'No task to move it under.',\n moveToCancel: 'Cancel',\n subtasksSelected: (count) => `${count} ${count === 1 ? 'sub-task' : 'sub-tasks'} included`,\n addSubtask: 'Add sub-task',\n edit: 'Edit',\n rename: 'Rename',\n delete: 'Delete',\n grantAccess: 'Allow access and continue',\n allowAccess: 'Allow access',\n moreActions: 'More actions',\n activity: 'Activity',\n statusHint: (status, ago) => `${status} · ${ago}`,\n status: {},\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { CellKeyDownEvent, GridApi, GridOptions } from 'ag-grid-community'\nimport {\n ChevronDown,\n ChevronRight,\n ChevronsDownUp,\n ChevronsUpDown,\n CheckCheck,\n KeyRound,\n ListTodo,\n Trash2,\n Workflow,\n} from 'lucide-react'\nimport { Button, Input, VisibilityToggle, cn } from '@arbidocs/react/ui'\nimport { EmptyState } from '../../components/EmptyState'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskOutputsCell, type TaskOutput, type TaskOutputsCellLabels } from './TaskOutputsCell'\nimport { TaskMoveDialog } from './TaskMoveDialog'\nimport { TaskRowMenu } from './TaskRowMenu'\nimport {\n DEFAULT_TASK_STATUS_PILL_LABELS,\n TaskStatusPill,\n type TaskStatusPillLabels,\n} from './TaskStatusPill'\nimport type { TaskThreadChipLabels } from './TaskThreadChip'\nimport { createTaskColumns, type SortableTaskColumn } from './taskColumns'\nimport { applyColumnWidthRules, type ColumnWidthRule } from './gridWidth'\nimport { STATUS_LABELS, STATUS_ORDER, asTaskStatus, goalProgress } from './taskLabels'\nimport {\n buildTaskRows,\n ownerExtId,\n descendantIds,\n indexTasks,\n isPlainTodo,\n moveTargets,\n type TaskFilter,\n type TaskGridRow,\n type TaskListRow,\n} from './taskRows'\nimport { DEFAULT_TASK_LIST_LABELS, type TaskListLabels } from './taskTableLabels'\n\nexport interface TaskTableProps<T extends TaskListRow> {\n /** The workspace's tasks: the conversations that have a status (the host drops plain chats). */\n tasks: T[]\n isLoading?: boolean\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Open the task's thread (its conversation). */\n onOpenThread: (conversationId: string, task: T) => void\n /** A person marks a task done / reopens a finished one. */\n onMarkDone: (task: T) => void\n onReopen: (task: T) => void\n /** People in the workspace, by id: names the Owner column. */\n people?: { id: string; label: string }[]\n /** Agent names by id, for the Assigned to column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Workflow names by id: names a task whose title the run has not generated yet, and its origin chip. */\n workflowNames?: Record<string, string>\n /**\n * How a person appears in the Owner column. Defaults to the app's user pill from\n * `@arbidocs/react`; a host with presence and direct messages passes its own.\n */\n renderPerson?: (person: TaskPerson) => ReactNode\n /** Share a task with the workspace or make it private (the shared/private toggle appears with it). */\n onToggleShared?: (task: T, shouldShare: boolean) => void\n onEdit: (task: T) => void\n onDelete: (task: T) => void\n /** Start a new task that is a child of this one. */\n onAddSubtask?: (task: T) => void\n /** Re-parent a task (`null` = top level). With it, the row menu offers \"Move to…\". */\n onMove?: (task: T, parentId: string | null) => void\n /** Bulk actions on the selected rows (the selection bar shows only the ones provided). */\n onMarkDoneMany?: (tasks: T[]) => void\n onDeleteMany?: (tasks: T[]) => void\n /** When set, a run waiting for access shows a one-click \"allow access\" action. */\n onGrantAccess?: (task: T) => void\n /** Task id with a request in flight: its row disables its actions. */\n busyId?: string | null\n /** Slot above the table (e.g. a live-runs banner). */\n header?: ReactNode\n /**\n * Extra bulk actions for the selection bar (an export, a share): called with the selected tasks, whether\n * the bar is compact, and a function that clears the selection.\n */\n selectionActions?: (selected: T[], isCompact: boolean, clearSelection: () => void) => ReactNode\n /** Text from outside the table (a topbar filter) that narrows the rows like the search box does. */\n filterText?: string\n /**\n * The viewer edits the workspace (owner or collaborator): a row they do not own is always shared, and\n * they may then edit, run, move, mark done and add sub-tasks to it. The share toggle, Delete and Allow\n * access stay with the row's owner. A guest leaves this off and only reads.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with a row's creator, the only one who deletes it. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n labels?: Partial<TaskListLabels>\n testId?: string\n statusPillLabels?: Partial<TaskStatusPillLabels>\n threadChipLabels?: Partial<TaskThreadChipLabels>\n /** Generated documents per task id (latest versions only); a task with none shows a dash. */\n outputsByTask?: Record<string, readonly TaskOutput[]>\n /** Open one generated document (Tasks view's Outputs column). */\n onOpenOutput?: (documentId: string, task: T) => void\n outputsLabels?: Partial<TaskOutputsCellLabels>\n /** Open a task's activity timeline (row menu: \"Activity\"). */\n onOpenActivity?: (task: T) => void\n /** \"2 min ago\" for the status tooltip; without it the tooltip is left out. */\n formatRelative?: (iso: string) => string\n}\n\nconst ROW_HEIGHT = 56\n/** Taller on a phone, where the status sits under the title. */\nconst NARROW_ROW_HEIGHT = 76\n/** Sub-tasks stop indenting after this depth (the table stays readable at any nesting). */\nconst MAX_INDENT_DEPTH = 4\n/** Above this many rows the grid stops animating row changes. */\nconst ANIMATE_ROWS_UP_TO = 500\n\n/** Below this grid width the table is one column and a menu. */\nconst NARROW_GRID = 640\n\n/** What goes first as the grid narrows (the grid is the page minus the sidebar). */\nconst WIDTH_RULES: readonly ColumnWidthRule[] = [\n { colId: 'shared', minWidth: 1050 },\n { colId: 'due', minWidth: 850 },\n { colId: 'outputs', minWidth: 930 },\n { colId: 'owner', minWidth: 730 },\n { colId: 'status', minWidth: NARROW_GRID },\n]\n\ntype Row<T extends TaskListRow> = TaskGridRow<T>\n\n/** The tooltip on the status pill: the latest step and how long ago. */\nfunction statusHint<T extends TaskListRow>(\n task: T,\n ctx: {\n props: TaskTableProps<T>\n l: TaskListLabels\n }\n): string | undefined {\n const { props: p, l } = ctx\n if (!p.formatRelative || !task.updated_at) return undefined\n const key = asTaskStatus(task.status)\n const pill = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...p.statusPillLabels }\n const label = task.pending_auth_request_id ? pill.waitingForAccess : STATUS_LABELS[key]\n return l.statusHint(label, p.formatRelative(task.updated_at))\n}\n\n/**\n * The tasks of a workspace as a person's work list, in the same grid as every other list in the app:\n * what an agent is generating first, then to-dos and, last, what is done.\n * Sub-tasks sit indented under their parent. Rows are selected with the grid's checkboxes (shift-click\n * for a range; ticking a parent ticks its sub-tasks) and acted on from the selection bar. Agents prepare\n * work; only a person closes it.\n */\nexport function TaskTable<T extends TaskListRow>(props: TaskTableProps<T>) {\n const { tasks: allTasks, isLoading, busyId, header, testId } = props\n const l: TaskListLabels = {\n ...DEFAULT_TASK_LIST_LABELS,\n ...props.labels,\n status: { ...STATUS_LABELS, ...props.labels?.status },\n }\n const [filter, setFilter] = useState<TaskFilter>('all')\n const [query, setQuery] = useState('')\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set())\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set())\n const [sort, setSort] = useState<{ colId: SortableTaskColumn; dir: 'asc' | 'desc' } | null>(null)\n const [moving, setMoving] = useState<T | null>(null)\n const tasks = allTasks\n const apiRef = useRef<GridApi<Row<T>> | null>(null)\n // A phone-width grid: one column and a menu, the status under the title (see onGridSizeChanged).\n const [narrow, setNarrow] = useState(false)\n const rowCache = useRef(new Map<string, Row<T>>())\n\n const tree = useMemo(() => indexTasks(tasks), [tasks])\n const peopleNames = useMemo(\n () => new Map((props.people ?? []).map((p) => [p.id, p.label])),\n [props.people]\n )\n /** What a task is called: its title, else the workflow that made it, else \"Untitled\". */\n const nameOf = (task: T): string =>\n task.title?.trim() ||\n (task.workflow_ext_id && props.workflowNames?.[task.workflow_ext_id]) ||\n l.untitled\n /** Who owns the task: its creator. */\n const owner = (task: T): TaskPerson => {\n const id = ownerExtId(task)\n const mine = task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n /** Who started a thread. */\n const starter = (task: T): TaskPerson => {\n const id = task.created_by_ext_id ?? task.owner_ext_id\n const mine = task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n const renderPerson =\n props.renderPerson ?? ((person: TaskPerson) => <PersonPill person={person} />)\n\n const q = (query.trim() || (props.filterText ?? '').trim()).toLowerCase()\n const counts = useMemo(() => {\n const map = new Map<string, number>(STATUS_ORDER.map((s) => [s, 0]))\n let all = 0\n for (const task of tasks) {\n const text = `${nameOf(task)} ${task.description ?? ''}`.toLowerCase()\n if (q && !text.includes(q)) continue\n all += 1\n const s = asTaskStatus(task.status)\n map.set(s, (map.get(s) ?? 0) + 1)\n }\n map.set('all', all)\n return map\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks, q, props.workflowNames, l.untitled])\n\n const compare = useMemo(() => {\n if (!sort) return undefined\n // A sort key is computed once per task, not once per comparison.\n const keys = new Map<T, string | number>()\n const compute = (t: T): string | number => {\n switch (sort.colId) {\n case 'name':\n return nameOf(t).toLowerCase()\n case 'owner':\n return owner(t).label.toLowerCase()\n case 'updated':\n return t.updated_at ? Date.parse(t.updated_at) : 0\n case 'messages':\n return t.message_count ?? 0\n case 'due':\n return t.due_at ? Date.parse(t.due_at) : Number.POSITIVE_INFINITY\n default:\n return STATUS_ORDER.indexOf(asTaskStatus(t.status))\n }\n }\n const key = (t: T): string | number => {\n let k = keys.get(t)\n if (k === undefined) {\n k = compute(t)\n keys.set(t, k)\n }\n return k\n }\n const sign = sort.dir === 'asc' ? 1 : -1\n return (a: T, b: T) => {\n const [x, y] = [key(a), key(b)]\n if (typeof x === 'number' && typeof y === 'number') return (x - y) * sign\n return String(x).localeCompare(String(y)) * sign\n }\n // The name lookups close over the people, agents and workflows the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n sort,\n peopleNames,\n props.agentNames,\n props.workflowNames,\n l.me,\n l.agent,\n l.someone,\n l.untitled,\n ])\n\n const rows = useMemo(\n () =>\n buildTaskRows(tasks, filter, collapsed, compare, {\n query: query.trim() || props.filterText,\n titleOf: nameOf,\n cache: rowCache.current,\n }),\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [tasks, filter, collapsed, compare, query, props.filterText, props.workflowNames, l.untitled]\n )\n\n // Selection lives here (the grid mirrors it), so a parent can carry its sub-tasks with it, even\n // the collapsed or filtered-out ones the grid does not show.\n const selectedRows = useMemo(\n () => rows.filter((r) => selectedIds.has(r.external_id)),\n [rows, selectedIds]\n )\n const selectedTasks = useMemo(\n () => tasks.filter((t) => selectedIds.has(t.external_id)),\n [tasks, selectedIds]\n )\n const subtasksIncluded = useMemo(\n () =>\n selectedTasks.filter((t) => {\n const parent = tree.parentOf.get(t.external_id)\n return parent !== undefined && selectedIds.has(parent)\n }).length,\n [selectedTasks, selectedIds, tree]\n )\n // Only a task is marked done: a plain chat has no status to finish.\n const markable = selectedTasks.filter(\n (t) =>\n t.status != null &&\n (t.is_owner !== false || props.canEditShared) &&\n isPlainTodo(t) &&\n asTaskStatus(t.status) !== 'done'\n )\n const deletable = selectedTasks.filter((t) => t.is_owner !== false || props.isWorkspaceOwner)\n\n const rowsRef = useRef(rows)\n rowsRef.current = rows\n const handleSelectionChange = (picked: Row<T>[]) => {\n const visible = new Set(rowsRef.current.map((r) => r.external_id))\n const pickedIds = new Set(picked.map((r) => r.external_id))\n setSelectedIds((prev) => {\n const added = [...pickedIds].filter((id) => !prev.has(id))\n const removed = [...prev].filter((id) => visible.has(id) && !pickedIds.has(id))\n if (added.length === 0 && removed.length === 0) return prev\n const next = new Set(prev)\n const nested = true\n for (const id of added) {\n next.add(id)\n if (nested) for (const d of descendantIds(tree, id)) next.add(d)\n }\n for (const id of removed) {\n next.delete(id)\n if (!nested) continue\n for (const d of descendantIds(tree, id)) next.delete(d)\n // A parent is no longer fully selected once one of its sub-tasks is not.\n for (let at = tree.parentOf.get(id); at; at = tree.parentOf.get(at)) next.delete(at)\n }\n return next\n })\n }\n\n const setExpanded = (id: string, expanded: boolean) =>\n setCollapsed((prev) => {\n if (prev.has(id) === !expanded) return prev\n const next = new Set(prev)\n if (expanded) next.delete(id)\n else next.add(id)\n return next\n })\n const expandAll = () => setCollapsed(new Set())\n const collapseAll = () => setCollapsed(new Set(tree.kids.keys()))\n\n // The column definitions are built once. Their cells read the latest props and lookups through\n // this ref, so a selection, a filter or an expand never makes the grid rebuild its columns.\n const latest = useRef({ props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow })\n latest.current = { props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow }\n\n // The Outputs column earns its room once some task has produced something.\n const showOutputs = Object.values(props.outputsByTask ?? {}).some((o) => o.length > 0)\n const columnDefs = useMemo(\n () =>\n createTaskColumns<T>({\n narrow,\n labels: l,\n getOwnerName: (row) => latest.current.owner(row.task).label,\n renderName: (row) => {\n const { l: lb, props: p, nameOf: name } = latest.current\n const { task, depth, childStats, expanded } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const goal = goalProgress(task)\n const workflowName = task.workflow_ext_id ? p.workflowNames?.[task.workflow_ext_id] : null\n return (\n <div\n className=\"flex min-w-0 flex-1 items-center gap-1.5\"\n style={\n depth > 0\n ? { paddingLeft: `${Math.min(depth, MAX_INDENT_DEPTH) * 1.5}rem` }\n : undefined\n }\n data-depth={depth}\n aria-level={depth + 1}\n aria-setsize={row.setSize}\n aria-posinset={row.posInSet}\n data-context={row.context || undefined}\n >\n {childStats ? (\n <button\n type=\"button\"\n onClick={() => latest.current.setExpanded(id, !expanded)}\n aria-expanded={expanded}\n aria-label={expanded ? lb.collapseSubtasks : lb.expandSubtasks}\n className=\"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n data-testid={`task-expand-${id}`}\n >\n {expanded ? (\n <ChevronDown className=\"size-4\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-4\" aria-hidden />\n )}\n </button>\n ) : depth > 0 ? (\n <span className=\"size-5 shrink-0\" aria-hidden />\n ) : null}\n <div className=\"min-w-0 flex-1 leading-tight\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => latest.current.props.onOpenThread(id, task)}\n // The agent that prepared the work is not a column: it is named here, on hover.\n title={\n task.agent_ext_id\n ? lb.preparedBy(p.agentNames?.[task.agent_ext_id] || lb.agent)\n : undefined\n }\n className={cn(\n // The title has priority: it keeps at least 12 characters before it ellipsises.\n 'min-w-[12ch] truncate text-left text-sm font-medium hover:underline focus-visible:underline focus-visible:outline-none',\n status === 'done' && 'text-muted-foreground line-through'\n )}\n data-testid={`task-name-${id}`}\n >\n {name(task)}\n </button>\n {goal && (\n <ToneBadge\n tone={goal.done ? 'success' : 'neutral'}\n data-testid={`task-goal-progress-${id}`}\n >\n {goal.done ? '✓ ' : ''}\n {lb.goalMet(goal.met, goal.total)}\n </ToneBadge>\n )}\n </div>\n {/* A phone has no Status column: the status sits under the title. */}\n {latest.current.narrow && (\n <div className=\"pt-0.5\">\n <TaskStatusPill\n id={id}\n status={status}\n runStartedAt={task.run_started_at}\n lastError={task.last_error}\n awaitingAccess={Boolean(task.pending_auth_request_id)}\n labels={p.statusPillLabels}\n />\n </div>\n )}\n {/* Second line: what it is (or where it came from) and the sub-task count, which never\n squeezes the title above it. */}\n {(task.description || workflowName || childStats) && (\n <div className=\"flex min-w-0 items-center gap-2 text-xs text-muted-foreground\">\n {task.description ? (\n <p className=\"min-w-0 truncate\">{task.description}</p>\n ) : workflowName ? (\n <span\n className=\"inline-flex min-w-0 items-center gap-1.5\"\n data-testid={`task-workflow-${id}`}\n >\n <Workflow className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{lb.fromWorkflow(workflowName)}</span>\n </span>\n ) : null}\n {childStats && (\n <span\n className=\"shrink-0 tabular-nums\"\n data-testid={`task-subtask-progress-${id}`}\n >\n {lb.subtasksDone(childStats.done, childStats.total)}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n )\n },\n // Who has the next step: the person pill, with the \"Me\" treatment. A plain chat is its starter's.\n renderOwner: (row) => (\n <span data-testid={`task-owner-${row.external_id}`} className=\"flex min-w-0\">\n {latest.current.renderPerson(\n row.task.status ? latest.current.owner(row.task) : latest.current.starter(row.task)\n )}\n </span>\n ),\n renderDue: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const dueMs = task.due_at ? Date.parse(task.due_at) : NaN\n const overdue =\n asTaskStatus(task.status) !== 'done' && !Number.isNaN(dueMs) && dueMs < Date.now()\n return (\n <span\n className={cn(\n 'truncate text-sm',\n overdue ? 'font-medium text-red-text' : 'text-muted-foreground'\n )}\n data-testid={`task-due-${task.external_id}`}\n data-overdue={overdue}\n >\n {task.due_at\n ? overdue\n ? lb.overdue(p.formatDate(task.due_at))\n : lb.due(p.formatDate(task.due_at))\n : lb.noDue}\n </span>\n )\n },\n renderShared: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n // A teammate cannot change the owner's visibility choice.\n if (!p.onToggleShared) return null\n return (\n <VisibilityToggle\n items={{ shared: task.is_shared ?? false }}\n onToggle={(shouldShare) => latest.current.props.onToggleShared?.(task, shouldShare)}\n disabled={task.is_owner === false}\n disabledTooltip={lb.sharedOwnerOnly}\n showLabel={false}\n data-testid={`task-shared-${task.external_id}`}\n />\n )\n },\n showOutputs,\n renderOutputs: (row) => (\n <TaskOutputsCell\n id={row.external_id}\n outputs={latest.current.props.outputsByTask?.[row.external_id]}\n onOpen={(docId) => latest.current.props.onOpenOutput?.(docId, row.task)}\n labels={latest.current.props.outputsLabels}\n />\n ),\n renderStatus: (row) => (\n <TaskStatusPill\n id={row.external_id}\n status={asTaskStatus(row.task.status)}\n runStartedAt={row.task.run_started_at}\n lastError={row.task.last_error}\n awaitingAccess={Boolean(row.task.pending_auth_request_id)}\n labels={latest.current.props.statusPillLabels}\n hint={statusHint(row.task, latest.current)}\n />\n ),\n renderActions: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const busy = p.busyId === id\n const isOwner = task.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n return (\n <div className=\"flex items-center justify-end gap-2\">\n {!latest.current.narrow &&\n isOwner &&\n task.pending_auth_request_id &&\n p.onGrantAccess && (\n <Button\n size=\"sm\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n onClick={() => p.onGrantAccess?.(task)}\n data-testid={`task-allow-access-${id}`}\n >\n <KeyRound className=\"size-3.5\" aria-hidden />\n {lb.allowAccess}\n </Button>\n )}\n <TaskRowMenu\n task={task}\n status={status}\n busy={busy}\n isOwner={isOwner}\n canAdmin={canAdmin}\n canEdit={canEdit}\n labels={lb}\n onMarkDone={() => p.onMarkDone(task)}\n onReopen={() => p.onReopen(task)}\n onAddSubtask={p.onAddSubtask ? () => p.onAddSubtask?.(task) : undefined}\n onMoveTo={p.onMove ? () => setMoving(task) : undefined}\n onEdit={() => p.onEdit(task)}\n onDelete={() => p.onDelete(task)}\n onOpenActivity={p.onOpenActivity ? () => p.onOpenActivity?.(task) : undefined}\n onGrantAccess={p.onGrantAccess ? () => p.onGrantAccess?.(task) : undefined}\n />\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colTask,\n l.colOwner,\n l.colDue,\n l.colStatus,\n l.colShared,\n l.colOutputs,\n l.shared,\n showOutputs,\n narrow,\n ]\n )\n\n // Cells read their data through `latest`, so a change in the lookups they draw from (people, agents,\n // workflow names, the row in flight) redraws the cells once, rather than on every interaction.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.people,\n props.agentNames,\n props.workflowNames,\n props.outputsByTask,\n props.renderPerson,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n narrow,\n ])\n\n const animate = rows.length <= ANIMATE_ROWS_UP_TO\n const gridOptions = useMemo<Partial<GridOptions<Row<T>>>>(\n () => ({\n suppressClickEdit: true,\n // Keyboard focus lives on the name column only (the others are not navigable): ArrowRight\n // opens a task's sub-tasks and ArrowLeft closes them, or steps up to the parent.\n suppressCellFocus: false,\n suppressColumnVirtualisation: true,\n animateRows: animate,\n getRowClass: (p) => (p.data?.context ? 'opacity-60' : undefined),\n // The grid shows and reports the sort; the table orders each level (see buildTaskRows).\n onSortChanged: (event) => {\n const sorted = event.api.getColumnState().find((c) => c.sort)\n setSort(\n sorted?.colId\n ? { colId: sorted.colId as SortableTaskColumn, dir: sorted.sort ?? 'asc' }\n : null\n )\n },\n onGridSizeChanged: (event) => {\n applyColumnWidthRules(event.api, event.clientWidth, WIDTH_RULES)\n setNarrow(event.clientWidth < NARROW_GRID)\n },\n onCellKeyDown: (event: CellKeyDownEvent<Row<T>>) => {\n const row = event.data\n const key = (event.event as KeyboardEvent | null)?.key\n if (!row || event.column.getColId() !== 'name') return\n if (key === 'ArrowRight' && row.childStats && !row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, true)\n } else if (key === 'ArrowLeft') {\n if (row.childStats && row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, false)\n } else if (row.parentId) {\n event.event?.preventDefault()\n const parent = event.api.getRowNode(row.parentId)\n if (parent?.rowIndex != null) {\n event.api.ensureIndexVisible(parent.rowIndex)\n event.api.setFocusedCell(parent.rowIndex, 'name')\n }\n }\n }\n },\n }),\n [animate]\n )\n\n const clearSelection = () => setSelectedIds(new Set())\n // A Chat chip only once there is a plain chat, so the chips add up to All.\n const filterKeys = (['all', ...STATUS_ORDER] as TaskFilter[]).filter(\n (key) => key !== 'chat' || (counts.get(key) ?? 0) > 0\n )\n const hasChildren = tree.kids.size > 0\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col gap-3\"\n data-testid={testIdOr(testId, { testId: 'task-list' })}\n >\n {header}\n <div className=\"flex flex-wrap items-center gap-2\">\n <div role=\"tablist\" aria-label=\"Filter tasks\" className=\"flex flex-wrap gap-1.5\">\n {filterKeys.map((key) => {\n const count = counts.get(key) ?? 0\n const isSelected = filter === key\n return (\n <button\n key={key}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n onClick={() => setFilter(key)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11',\n isSelected\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border text-muted-foreground hover:bg-accent'\n )}\n data-testid={`task-filter-${key}`}\n >\n {key === 'all' ? l.filterAll : l.status[key]}\n <span className=\"tabular-nums opacity-70\">{count}</span>\n </button>\n )\n })}\n </div>\n <Input\n type=\"search\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={l.searchPlaceholder}\n aria-label={l.searchLabel}\n className=\"h-8 max-w-56 text-xs pointer-coarse:h-11\"\n data-testid=\"task-search\"\n />\n {hasChildren && (\n <div className=\"ml-auto flex gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={expandAll}\n data-testid=\"task-expand-all\"\n >\n <ChevronsUpDown className=\"size-3.5\" aria-hidden />\n {l.expandAll}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={collapseAll}\n data-testid=\"task-collapse-all\"\n >\n <ChevronsDownUp className=\"size-3.5\" aria-hidden />\n {l.collapseAll}\n </Button>\n </div>\n )}\n </div>\n {tasks.length === 0 && !isLoading ? (\n <EmptyState\n icon={ListTodo}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"task-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<Row<T>>\n testId=\"task-grid\"\n gridId={props.gridId ?? 'tasks-grid-v4'}\n items={rows}\n columnDefs={columnDefs}\n getItemId={(row) => row.external_id}\n getRowTestId={(row) => `task-row-${row.external_id}`}\n isLoading={isLoading}\n showEmpty={rows.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={narrow ? NARROW_ROW_HEIGHT : ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n selection={{\n mode: 'multiple',\n controlled: true,\n selected: selectedRows,\n onSelectionChange: handleSelectionChange,\n }}\n gridOptions={gridOptions}\n />\n </div>\n )}\n <SelectionBar\n count={selectedTasks.length}\n onClear={clearSelection}\n status={\n selectedTasks.length > 0 && subtasksIncluded > 0 ? (\n <span className=\"text-xs text-muted-foreground\" data-testid=\"task-selection-subtasks\">\n {l.subtasksSelected(subtasksIncluded)}\n </span>\n ) : undefined\n }\n >\n {(isCompact) => (\n <>\n {props.selectionActions?.(selectedTasks, isCompact, clearSelection)}\n {props.onMarkDoneMany && (\n <SelectionBarAction\n icon={CheckCheck}\n label={l.markDoneMany}\n onClick={() => {\n props.onMarkDoneMany?.(markable)\n clearSelection()\n }}\n disabled={markable.length === 0}\n isCompact={isCompact}\n tooltip={l.markDoneManyHint}\n testId=\"task-bulk-done\"\n />\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.deleteMany}\n onClick={() => {\n props.onDeleteMany?.(deletable)\n clearSelection()\n }}\n disabled={deletable.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"task-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n {moving && props.onMove && (\n <TaskMoveDialog\n open\n onOpenChange={(open) => !open && setMoving(null)}\n options={moveTargets(tasks, moving).map((t) => ({ id: t.external_id, label: nameOf(t) }))}\n currentParentId={moving.parent_conversation_ext_id}\n onPick={(parentId) => props.onMove?.(moving, parentId)}\n labels={{\n title: l.moveToTitle(nameOf(moving)),\n none: l.moveToNone,\n search: l.moveToSearch,\n empty: l.moveToEmpty,\n cancel: l.moveToCancel,\n }}\n />\n )}\n </div>\n )\n}\n","import { useState } from 'react'\nimport {\n CheckCheck,\n ListTodo,\n ChevronDown,\n ChevronRight,\n FileText,\n MoreHorizontal,\n Plus,\n Trash2,\n Workflow,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { FilterInput, type FilterField } from '../../shell/FilterInput'\nimport { TriStateFilterMenu, type TriState } from '../../settings/TriStateFilterMenu'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { EmptyState } from '../../components/EmptyState'\nimport { PersonPill } from './PersonPill'\nimport { TaskStatusPill } from './TaskStatusPill'\nimport { TaskRowMenu } from './TaskRowMenu'\nimport { TaskMoveDialog } from './TaskMoveDialog'\nimport { DEFAULT_TASK_LIST_LABELS } from './taskTableLabels'\nimport { asTaskStatus } from './taskLabels'\nimport { isPlainTodo, moveTargets, ownerExtId, type TaskListRow } from './taskRows'\nimport type { TaskTableProps } from './TaskTable'\n\nexport interface TaskInboxWorkflow {\n external_id: string\n name: string\n active: boolean\n is_owner?: boolean\n last_error?: string | null\n summary?: string\n next_fire_at?: string | null\n}\nexport interface TaskInboxWorkflowActions {\n workflows?: readonly TaskInboxWorkflow[]\n onEditWorkflow?: (id: string) => void\n onCreateWorkflow?: () => void\n onToggleWorkflow?: (id: string, active: boolean) => void\n onDeleteWorkflow?: (id: string) => void\n onWorkflowHistory?: (id: string) => void\n}\nexport interface TaskInboxProps<T extends TaskListRow>\n extends TaskTableProps<T>, TaskInboxWorkflowActions {\n onFilterTextChange?: (text: string) => void\n onCreate?: () => void\n onNotify?: (task: T) => void\n}\n/** Tasks and saved workflows form one list. A workflow contains its runs; a task contains its substeps. */\nexport function TaskInbox<T extends TaskListRow>(p: TaskInboxProps<T>) {\n const [filterOpen, setFilterOpen] = useState(false)\n const [statusFilters, setStatusFilters] = useState<Map<string, TriState>>(\n () => new Map([['done', 'exclude']])\n )\n const [localQuery, setLocalQuery] = useState('')\n const [searchFields, setSearchFields] = useState<FilterField[]>(['text', 'labels'])\n const [selected, setSelected] = useState<Set<string>>(new Set())\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set())\n const [moving, setMoving] = useState<T | null>(null)\n const l = { ...DEFAULT_TASK_LIST_LABELS, ...p.labels }\n const nameOf = (t: T) =>\n t.title?.trim() || (t.workflow_ext_id && p.workflowNames?.[t.workflow_ext_id]) || l.untitled\n const all = p.tasks.filter((t) => t.status != null)\n const filterText = p.filterText ?? localQuery\n const q = filterText.trim().toLowerCase()\n const included = [...statusFilters].filter(([, state]) => state === 'include').map(([id]) => id)\n const statusMatches = (t: T) =>\n statusFilters.get(asTaskStatus(t.status)) !== 'exclude' &&\n (!included.length || included.includes(asTaskStatus(t.status)))\n const rows = all.filter(\n (t) =>\n statusMatches(t) &&\n (!q ||\n [\n searchFields.includes('text') ? `${nameOf(t)} ${t.description ?? ''}` : '',\n searchFields.includes('labels') && t.workflow_ext_id\n ? (p.workflowNames?.[t.workflow_ext_id] ?? '')\n : '',\n ]\n .join(' ')\n .toLowerCase()\n .includes(q))\n )\n const hasActiveFilters = !!q || [...statusFilters.values()].some((state) => state != null)\n const selectedTasks = all.filter((t) => selected.has(t.external_id))\n const canEdit = (t: T) => t.is_owner !== false || Boolean(p.canEditShared)\n const markable = (t: T) =>\n t.status !== 'done' && t.status !== 'generating' && canEdit(t) && !t.in_progress\n const markableTasks = selectedTasks.filter(markable)\n const deletableTasks = selectedTasks.filter((t) => t.is_owner !== false || p.isWorkspaceOwner)\n const clearSelection = () => setSelected(new Set())\n const toggle = (set: React.Dispatch<React.SetStateAction<Set<string>>>, id: string) =>\n set((old) => {\n const next = new Set(old)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n const person = (t: T) => {\n const id = ownerExtId(t)\n return {\n id,\n label:\n t.is_owner !== false ? 'You' : (p.people?.find((x) => x.id === id)?.label ?? l.someone),\n isMe: t.is_owner !== false,\n }\n }\n const renderPerson = p.renderPerson ?? ((value) => <PersonPill person={value} />)\n const taskById = new Map(all.map((t) => [t.external_id, t]))\n const visible = new Set(rows.map((t) => t.external_id))\n // Keep the parent as context when only a child matches a filter.\n for (const task of rows) {\n let id = task.parent_conversation_ext_id\n const seen = new Set<string>()\n while (id && taskById.has(id) && !seen.has(id)) {\n seen.add(id)\n visible.add(id)\n id = taskById.get(id)?.parent_conversation_ext_id\n }\n }\n const listed = all.filter((t) => visible.has(t.external_id))\n const roots = listed.filter(\n (t) => !t.parent_conversation_ext_id || !visible.has(t.parent_conversation_ext_id)\n )\n const workflows = (p.workflows ?? []).filter((w) => {\n const runs = roots.filter((t) => t.workflow_ext_id === w.external_id)\n return runs.length > 0 || (!included.length && (!q || w.name.toLowerCase().includes(q)))\n })\n const workflowIds = new Set(workflows.map((w) => w.external_id))\n const order = (a: T, b: T) => {\n const weight = (t: T) =>\n t.pending_auth_request_id || t.last_error\n ? 0\n : t.status === 'todo'\n ? 1\n : t.status === 'generating'\n ? 2\n : 3\n return weight(a) - weight(b) || (b.updated_at ?? '').localeCompare(a.updated_at ?? '')\n }\n const renderTask = (task: T, depth = 0): React.ReactNode => {\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const busy = p.busyId === id\n const children = listed.filter((t) => t.parent_conversation_ext_id === id).sort(order)\n const outputs = p.outputsByTask?.[id] ?? []\n return (\n <li key={id} data-testid={`task-inbox-row-${id}`}>\n <div\n className={cn(\n 'relative flex cursor-pointer items-start gap-2 border-b py-3 hover:bg-muted/40',\n selected.has(id) && 'bg-muted/60'\n )}\n onClick={(event) => {\n if (\n !(event.target as HTMLElement).closest(\n 'button, a, input, select, textarea, [role=\"menuitem\"], [role=\"checkbox\"], [role=\"combobox\"]'\n )\n ) {\n p.onOpenThread(id, task)\n }\n }}\n style={{ paddingLeft: `${Math.min(depth, 5) * 20}px` }}\n >\n {children.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0\"\n aria-label={`${collapsed.has(id) ? 'Expand' : 'Collapse'} ${nameOf(task)}`}\n onClick={() => toggle(setCollapsed, id)}\n >\n {collapsed.has(id) ? (\n <ChevronRight className=\"size-4\" />\n ) : (\n <ChevronDown className=\"size-4\" />\n )}\n </Button>\n )}\n <div className=\"min-w-0 flex-1\">\n <button\n className={cn(\n 'block w-full text-left text-sm font-medium hover:underline',\n status === 'done' && 'text-muted-foreground'\n )}\n data-testid={`task-open-${id}`}\n onClick={() => p.onOpenThread(id, task)}\n >\n {nameOf(task)}\n </button>\n <div className=\"mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground\">\n {status !== 'todo' && (\n <TaskStatusPill\n id={id}\n status={task.status}\n runStartedAt={task.run_started_at}\n lastError={task.last_error}\n awaitingAccess={Boolean(task.pending_auth_request_id)}\n />\n )}\n {task.due_at && <span>Due {p.formatDate(task.due_at)}</span>}\n {children.length > 0 && (\n <span>\n {\n all.filter((t) => t.parent_conversation_ext_id === id && t.status === 'done')\n .length\n }\n /{all.filter((t) => t.parent_conversation_ext_id === id).length} steps complete\n </span>\n )}\n </div>\n {outputs.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-2\" aria-label=\"Outputs\">\n {outputs.map((output) => (\n <Button\n key={output.id}\n variant=\"link\"\n size=\"sm\"\n className=\"h-auto max-w-full gap-1 px-0 py-1 text-xs\"\n disabled={!p.onOpenOutput}\n onClick={() => p.onOpenOutput?.(output.id, task)}\n data-testid={`task-output-${id}-${output.id}`}\n >\n <FileText className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{output.name}</span>\n </Button>\n ))}\n </div>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {task.pending_auth_request_id && task.is_owner !== false && p.onGrantAccess && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={busy}\n onClick={() => p.onGrantAccess?.(task)}\n >\n Allow access\n </Button>\n )}\n <TaskRowMenu\n task={task}\n status={status}\n busy={busy}\n isOwner={task.is_owner !== false}\n canAdmin={task.is_owner !== false || Boolean(p.isWorkspaceOwner)}\n canEdit={canEdit(task)}\n canMarkDone={markable(task)}\n canReopen={canEdit(task)}\n selected={selected.has(id)}\n onToggleSelected={\n p.selectionActions || p.onMarkDoneMany || p.onDeleteMany\n ? () => toggle(setSelected, id)\n : undefined\n }\n labels={l}\n onMarkDone={() => p.onMarkDone(task)}\n onNotify={p.onNotify ? () => p.onNotify?.(task) : undefined}\n onReopen={() => p.onReopen(task)}\n onEdit={() => p.onEdit(task)}\n onAddSubtask={p.onAddSubtask ? () => p.onAddSubtask?.(task) : undefined}\n onMoveTo={p.onMove ? () => setMoving(task) : undefined}\n onOpenActivity={p.onOpenActivity ? () => p.onOpenActivity?.(task) : undefined}\n onToggleShared={\n p.onToggleShared ? () => p.onToggleShared?.(task, !task.is_shared) : undefined\n }\n />\n </div>\n </div>\n {children.length > 0 && !collapsed.has(id) && (\n <ul>{children.map((child) => renderTask(child, depth + 1))}</ul>\n )}\n </li>\n )\n }\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\" data-testid={p.testId ?? 'task-inbox'}>\n <TabHeader\n testId=\"tasks-tab-header\"\n tabs={[\n {\n id: 'tasks',\n label: '',\n count: rows.length,\n countPlacement: 'leading',\n countIcon: <ListTodo className=\"size-3.5\" />,\n hasActiveFilters,\n testId: 'tasks-tab',\n presentation: 'count',\n },\n ]}\n activeTabId=\"tasks\"\n onTabChange={() => {}}\n firstTabContent={\n <FilterInput\n value={filterText}\n onChange={p.onFilterTextChange ?? setLocalQuery}\n fields={searchFields}\n onFieldsChange={setSearchFields}\n labels={{ fieldNames: { text: 'Task', labels: 'Workflow' } }}\n className=\"w-44 max-w-[40vw]\"\n testIds={{\n root: 'tasks-filter',\n input: 'tasks-filter-input',\n fieldsButton: 'tasks-filter-fields',\n }}\n filter={\n <TriStateFilterMenu\n testId=\"tasks-status-filter\"\n open={filterOpen}\n onOpenChange={setFilterOpen}\n filterStates={statusFilters}\n onFiltersChange={setStatusFilters}\n options={[\n {\n id: 'todo',\n label: 'To do',\n count: all.filter((t) => t.status === 'todo').length,\n },\n {\n id: 'generating',\n label: 'Generating',\n count: all.filter((t) => t.status === 'generating').length,\n },\n {\n id: 'done',\n label: 'Completed',\n count: all.filter((t) => t.status === 'done').length,\n },\n ]}\n groups={[{ label: 'Status', options: ['todo', 'generating', 'done'] }]}\n triggerClassName=\"flex h-5 items-center gap-0.5 rounded px-1 text-muted-foreground hover:text-foreground pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n renderChevron\n disableHoverOpen\n />\n }\n />\n }\n rightContent={\n p.onCreate ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-testid=\"new-task-button\">\n <Plus className=\"mr-1 size-4\" />\n New\n <ChevronDown className=\"ml-1 size-3\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onSelect={p.onCreate}>Task</DropdownMenuItem>\n {p.onCreateWorkflow && (\n <DropdownMenuItem onSelect={p.onCreateWorkflow}>Saved workflow</DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : (\n p.header\n )\n }\n />\n <div className=\"min-h-0 flex-1 overflow-y-auto\" aria-busy={p.isLoading}>\n {p.isLoading ? (\n <p className=\"py-12 text-center text-sm text-muted-foreground\">Loading work…</p>\n ) : !listed.length && !workflows.length ? (\n <EmptyState\n title={q ? 'No matches' : all.length ? 'You’re all caught up' : 'No work here yet'}\n description=\"Create a task from a prompt or a saved workflow. Keep its drafts and outputs together.\"\n />\n ) : (\n <ul>\n {workflows.map((w) => {\n const runs = roots.filter((t) => t.workflow_ext_id === w.external_id).sort(order)\n const editable = w.is_owner !== false || p.canEditShared\n return (\n <li key={w.external_id} data-testid={`task-workflow-${w.external_id}`}>\n <div className=\"flex items-start gap-2 border-b py-3\">\n {runs.length > 0 ? (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={`${collapsed.has(w.external_id) ? 'Expand' : 'Collapse'} ${w.name}`}\n onClick={() => toggle(setCollapsed, w.external_id)}\n >\n {collapsed.has(w.external_id) ? (\n <ChevronRight className=\"size-4\" />\n ) : (\n <ChevronDown className=\"size-4\" />\n )}\n </Button>\n ) : (\n <Workflow className=\"mx-1 mt-1 size-4 shrink-0 text-muted-foreground\" />\n )}\n <div className=\"min-w-0 flex-1\">\n <button\n className=\"block text-left text-sm font-medium hover:underline\"\n disabled={!editable}\n onClick={() => p.onEditWorkflow?.(w.external_id)}\n >\n {w.name}\n </button>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Saved workflow · {w.summary ?? 'Run when needed'}\n {!w.active ? ' · Paused' : ''}\n {runs.length\n ? ` · ${runs.length} ${runs.length === 1 ? 'task' : 'tasks'}`\n : ''}\n </p>\n {w.last_error && (\n <p className=\"mt-1 text-xs text-destructive\">{w.last_error}</p>\n )}\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n aria-label={`Actions for ${w.name}`}\n >\n <MoreHorizontal className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {p.onWorkflowHistory && (\n <DropdownMenuItem onSelect={() => p.onWorkflowHistory?.(w.external_id)}>\n Run history\n </DropdownMenuItem>\n )}\n {editable && p.onToggleWorkflow && (\n <DropdownMenuItem\n onSelect={() => p.onToggleWorkflow?.(w.external_id, !w.active)}\n >\n {w.active ? 'Pause' : 'Resume'}\n </DropdownMenuItem>\n )}\n {(w.is_owner !== false || p.isWorkspaceOwner) && p.onDeleteWorkflow && (\n <DropdownMenuItem onSelect={() => p.onDeleteWorkflow?.(w.external_id)}>\n Delete workflow\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n {!collapsed.has(w.external_id) && runs.length > 0 && (\n <ul>{runs.map((t) => renderTask(t, 1))}</ul>\n )}\n </li>\n )\n })}\n {roots\n .filter((t) => !t.workflow_ext_id || !workflowIds.has(t.workflow_ext_id))\n .sort(order)\n .map((t) => renderTask(t))}\n </ul>\n )}\n </div>\n <SelectionBar count={selectedTasks.length} onClear={clearSelection}>\n {(isCompact) => (\n <>\n {p.selectionActions?.(selectedTasks, isCompact, clearSelection)}\n {p.onMarkDoneMany && (\n <SelectionBarAction\n icon={CheckCheck}\n label={l.markDoneMany}\n isCompact={isCompact}\n disabled={!markableTasks.length}\n onClick={() => {\n p.onMarkDoneMany?.(markableTasks)\n clearSelection()\n }}\n testId=\"task-bulk-done\"\n />\n )}\n {p.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.deleteMany}\n isCompact={isCompact}\n disabled={!deletableTasks.length}\n onClick={() => {\n p.onDeleteMany?.(deletableTasks)\n clearSelection()\n }}\n className=\"text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"task-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n {moving && p.onMove && (\n <TaskMoveDialog\n open\n onOpenChange={(open) => !open && setMoving(null)}\n options={moveTargets(all, moving).map((t) => ({ id: t.external_id, label: nameOf(t) }))}\n currentParentId={moving.parent_conversation_ext_id}\n onPick={(id) => p.onMove?.(moving, id)}\n labels={{\n title: l.moveToTitle(nameOf(moving)),\n none: l.moveToNone,\n search: l.moveToSearch,\n empty: l.moveToEmpty,\n cancel: l.moveToCancel,\n }}\n />\n )}\n </div>\n )\n}\n","import { useMemo, useRef, useState, type ReactNode } from 'react'\nimport { MessageSquare } from 'lucide-react'\nimport { ThreadVisibilityIcon } from '@arbidocs/react/ui'\nimport { ThreadStatusLine } from './ThreadStatusLine'\nimport { EntityChip } from '../../components/EntityChip'\nimport { CellHoverIcon } from '../../files/cells/HoverIconCell'\nimport type { ColDef, ICellRendererParams, ValueGetterParams } from 'ag-grid-community'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar } from '../../files/SelectionBar'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { FilterInput } from '../../shell/FilterInput'\nimport { useIsPhone } from '../../lib/use-media-query'\n\n/** Only fields on the conversation object: no message or participant fetches. */\nexport interface ConversationListRow {\n external_id: string\n title?: string | null\n created_at?: string | null\n updated_at?: string | null\n created_by_ext_id?: string | null\n assistant_mode?: string | null\n message_count?: number | null\n is_shared?: boolean | null\n is_owner?: boolean | null\n status?: string | null\n in_progress?: boolean | null\n last_message_role?: string | null\n last_message_updated_at?: string | null\n last_message_actor?: {\n external_id: string\n given_name: string\n family_name?: string | null\n picture?: string | null\n parent_ext_id?: string | null\n } | null\n last_message_status?: string | null\n /** Set when the thread is a call's meeting chat. */\n meeting_call_ext_id?: string | null\n}\n\nexport interface ConversationListViewProps<T extends ConversationListRow> {\n conversations: T[]\n isLoading?: boolean\n visibilityFilters?: { me: 'include' | 'exclude' | null; workspace: 'include' | 'exclude' | null }\n doneFilter?: 'include' | 'exclude' | null\n /** \"Meetings\": only (include) or no (exclude) meeting threads. */\n meetingFilter?: 'include' | 'exclude' | null\n filterText?: string\n header?: ReactNode\n /** Below the list: the launcher that starts a new thread from here. */\n footer?: ReactNode\n showHeader?: boolean\n formatDate: (iso: string) => string\n renderThread?: (conversation: T) => ReactNode\n renderBy?: (conversation: T) => ReactNode\n renderStatus?: (conversation: T) => ReactNode\n renderOwner?: (conversation: T) => ReactNode\n renderLabels?: (conversation: T) => ReactNode\n labelText?: (conversation: T) => string\n onOpen: (conversation: T) => void\n onRename: (conversation: T) => void\n onDelete: (conversation: T) => void\n canEditShared?: boolean\n isWorkspaceOwner?: boolean\n selectionActions?: (selected: T[], compact: boolean, clear: () => void) => ReactNode\n}\n\n/** Shared title/label filtering and latest-activity ordering for the header and grid. */\nexport function filterConversationRows<T extends ConversationListRow>(\n conversations: T[],\n query: string,\n labelText?: (row: T) => string,\n doneFilter: 'include' | 'exclude' | null = 'exclude',\n visibilityFilters?: { me: 'include' | 'exclude' | null; workspace: 'include' | 'exclude' | null },\n meetingFilter: 'include' | 'exclude' | null = null\n): T[] {\n const q = query.trim().toLowerCase()\n return [...conversations]\n .sort(\n (a, b) =>\n (Date.parse(b.last_message_updated_at || b.updated_at || b.created_at || '') || 0) -\n (Date.parse(a.last_message_updated_at || a.updated_at || a.created_at || '') || 0)\n )\n .filter((row) =>\n doneFilter === 'exclude'\n ? row.status !== 'done'\n : doneFilter === 'include'\n ? row.status === 'done'\n : true\n )\n .filter((row) => {\n const state = row.is_shared ? visibilityFilters?.workspace : visibilityFilters?.me\n const hasIncluded =\n visibilityFilters?.me === 'include' || visibilityFilters?.workspace === 'include'\n return state !== 'exclude' && (!hasIncluded || state === 'include')\n })\n .filter((row) =>\n meetingFilter === 'include'\n ? !!row.meeting_call_ext_id\n : meetingFilter === 'exclude'\n ? !row.meeting_call_ext_id\n : true\n )\n .filter((row) => !q || `${row.title ?? ''} ${labelText?.(row) ?? ''}`.toLowerCase().includes(q))\n}\n\n/** Conversation history ordered by activity, including conversations attached to work. */\nexport function ConversationListView<T extends ConversationListRow>(\n p: ConversationListViewProps<T>\n) {\n const liveProps = useRef(p)\n liveProps.current = p\n const [query, setQuery] = useState('')\n const [selected, setSelected] = useState<Set<string>>(new Set())\n const q = `${query} ${p.filterText ?? ''}`.trim().toLowerCase()\n // On a phone the thread name and labels stay; the other columns are hidden. Labels get a fixed\n // width there so the grid overflows and scrolls sideways instead of squeezing them into the edge.\n const isPhone = useIsPhone()\n const rows = useMemo(\n () =>\n filterConversationRows(\n p.conversations,\n q,\n p.labelText,\n p.doneFilter,\n p.visibilityFilters,\n p.meetingFilter\n ),\n [p.conversations, q, p.labelText, p.doneFilter, p.visibilityFilters, p.meetingFilter]\n )\n const selectedRows = p.conversations.filter((c) => selected.has(c.external_id))\n const hasLabels = p.conversations.some((c) => !!p.labelText?.(c))\n const columns = useMemo<ColDef<T>[]>(\n () => [\n {\n colId: 'name',\n headerName: 'Thread',\n flex: 2,\n minWidth: 200,\n valueGetter: ({ data }) => data?.title?.trim() || 'Untitled thread',\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && (\n <div className=\"group flex h-full min-w-0 items-center gap-2\">\n <div className=\"min-w-0\">\n {liveProps.current.renderThread ? (\n liveProps.current.renderThread(data)\n ) : (\n <EntityChip\n icon={\n <ThreadVisibilityIcon shared={data.is_shared ?? false} className=\"size-4\" />\n }\n label={data.title?.trim() || 'Untitled thread'}\n pillTooltip=\"Open conversation\"\n labelMaxWidth=\"max-w-full\"\n onClick={() => liveProps.current.onOpen(data)}\n testId={`thread-open-${data.external_id}`}\n />\n )}\n </div>\n {/* How long it is, beside its name (not a column of its own). */}\n {(data.message_count ?? 0) > 0 && (\n <span\n className=\"inline-flex h-5 shrink-0 items-center gap-0.5 self-center rounded-full bg-muted px-1.5 text-[10px] font-medium leading-none tabular-nums text-muted-foreground\"\n title={`${data.message_count} ${data.message_count === 1 ? 'message' : 'messages'}`}\n data-testid={`thread-messages-${data.external_id}`}\n >\n <MessageSquare className=\"size-3\" aria-hidden />\n {data.message_count}\n </span>\n )}\n {(data.is_owner !== false || liveProps.current.canEditShared) && (\n <button\n type=\"button\"\n aria-label={`Rename ${data.title?.trim() || 'Untitled thread'}`}\n onClick={() => liveProps.current.onRename(data)}\n data-testid={`thread-rename-${data.external_id}`}\n className=\"shrink-0 pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center\"\n >\n <CellHoverIcon />\n </button>\n )}\n </div>\n ),\n },\n // Labels only when a thread has some (an empty column only takes the names' room), and never\n // on a phone, where the status is what a row must say.\n ...(liveProps.current.renderLabels && hasLabels && !isPhone\n ? [\n {\n colId: 'labels',\n headerName: 'Labels',\n flex: 0.5,\n minWidth: 100,\n valueGetter: ({ data }: ValueGetterParams<T>) =>\n data ? (liveProps.current.labelText?.(data) ?? '') : '',\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && liveProps.current.renderLabels?.(data),\n },\n ]\n : []),\n {\n colId: 'status',\n headerName: 'Status',\n width: isPhone ? 170 : 240,\n valueGetter: ({ data }) => data?.status,\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data &&\n (liveProps.current.renderStatus ? (\n liveProps.current.renderStatus(data)\n ) : (\n <ThreadStatusLine\n state={data.status === 'done' ? 'done' : data.status === 'todo' ? 'todo' : 'ready'}\n />\n )),\n },\n // Who spoke last (their face) and when: the two read together, at the row's end.\n ...(liveProps.current.renderBy || liveProps.current.renderOwner\n ? [\n {\n colId: liveProps.current.renderBy ? 'by' : 'owner',\n headerName: liveProps.current.renderBy ? 'By' : 'Owner',\n width: 64,\n hide: isPhone,\n sortable: false,\n resizable: false,\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && (liveProps.current.renderBy || liveProps.current.renderOwner)?.(data),\n },\n ]\n : []),\n {\n colId: 'activity',\n initialSort: 'desc',\n headerName: 'Updated',\n width: 128,\n hide: isPhone,\n valueGetter: ({ data }) =>\n data?.last_message_updated_at || data?.updated_at || data?.created_at || '',\n valueFormatter: ({ value }) => (value ? liveProps.current.formatDate(value) : '—'),\n cellClass: 'flex items-center text-xs text-muted-foreground/80',\n },\n ],\n [\n Boolean(p.renderThread),\n Boolean(p.renderLabels),\n Boolean(p.renderOwner),\n Boolean(p.renderBy),\n Boolean(p.renderStatus),\n isPhone,\n hasLabels,\n ]\n )\n // Every cell's content sits in the middle of its row (a two-line title makes rows taller).\n const centred = useMemo(\n () => columns.map((c) => ({ cellClass: 'flex items-center', ...c })),\n [columns]\n )\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\" data-testid=\"conversation-list-view\">\n {p.showHeader !== false && (\n <TabHeader\n testId=\"threads-tab-header\"\n tabs={[\n {\n id: 'threads',\n label: '',\n count: rows.length,\n countIcon: <MessageSquare className=\"size-3.5\" />,\n countPlacement: 'leading',\n presentation: 'count',\n hasActiveFilters: !!q,\n },\n ]}\n activeTabId=\"threads\"\n onTabChange={() => {}}\n firstTabContent={\n <FilterInput\n value={query}\n hideFieldPicker\n ariaLabel=\"Search threads\"\n onChange={setQuery}\n fields={['text']}\n onFieldsChange={() => {}}\n labels={{\n placeholder: 'Find a thread…',\n fieldNames: { text: 'Thread' },\n }}\n className=\"w-44 max-w-[40vw]\"\n />\n }\n rightContent={p.header}\n />\n )}\n <div className=\"min-h-0 flex-1\">\n <GridView<T>\n testId=\"threads-grid\"\n items={rows}\n columnDefs={centred}\n getItemId={(row) => row.external_id}\n getRowTestId={(row) => `thread-row-${row.external_id}`}\n onRowClick={p.onOpen}\n height=\"100%\"\n isLoading={p.isLoading}\n loadingMessage=\"Loading threads…\"\n emptyState={{\n title: q ? 'No threads match' : 'No conversations yet',\n message: p.footer\n ? 'Type below to ask ARBI, bring in people, or both.'\n : 'Use New Task to ask ARBI, bring in people, or both.',\n }}\n selection={\n p.selectionActions\n ? {\n mode: 'multiple',\n controlled: true,\n selected: selectedRows,\n onSelectionChange: (items) =>\n setSelected(new Set(items.map((item) => item.external_id))),\n }\n : undefined\n }\n gridOptions={{\n suppressClickEdit: true,\n onCellKeyDown: (event) => {\n if (\n (event.event as KeyboardEvent | undefined)?.key === 'Enter' &&\n 'column' in event &&\n event.column.getColId() === 'name' &&\n event.data\n )\n p.onOpen(event.data)\n },\n }}\n />\n </div>\n {p.footer}\n {p.selectionActions && (\n <SelectionBar count={selectedRows.length} onClear={() => setSelected(new Set())}>\n {(compact) => p.selectionActions?.(selectedRows, compact, () => setSelected(new Set()))}\n </SelectionBar>\n )}\n </div>\n )\n}\n","import { MessageSquare } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskThreadChipLabels {\n open: string\n watch: string\n none: string\n}\n\nexport const DEFAULT_TASK_THREAD_CHIP_LABELS: TaskThreadChipLabels = {\n open: 'Open thread',\n watch: 'Watch live',\n none: 'No thread yet',\n}\n\nexport interface TaskThreadChipProps {\n /** Task id: keys the test id (`task-thread-{id}`). */\n id: string\n /** The task's conversation (a task is a conversation: its own id). */\n conversationId?: string | null\n /** An agent is writing into the thread right now. */\n generating?: boolean\n onOpen: (conversationId: string) => void\n testId?: string\n labels?: Partial<TaskThreadChipLabels>\n}\n\n/** The link from a task to its thread — live-pulsing while the agent works, muted before there is one. */\nexport function TaskThreadChip({\n id,\n conversationId,\n generating = false,\n onOpen,\n testId,\n labels,\n}: TaskThreadChipProps) {\n const l = { ...DEFAULT_TASK_THREAD_CHIP_LABELS, ...labels }\n if (!conversationId) {\n return (\n <span\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: `task-thread-${id}` })}\n data-state=\"none\"\n >\n <MessageSquare className=\"size-3.5 opacity-50\" aria-hidden />\n {l.none}\n </span>\n )\n }\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-7 gap-1.5 px-2 text-xs pointer-coarse:h-11',\n generating && 'text-ai-ink hover:text-ai-ink'\n )}\n onClick={() => onOpen(conversationId)}\n data-testid={testIdOr(testId, { testId: `task-thread-${id}` })}\n data-state={generating ? 'live' : 'idle'}\n >\n <span className=\"relative flex size-3.5 items-center justify-center\">\n {generating && (\n <span className=\"absolute inline-flex size-full animate-ping rounded-full bg-ai-soft\" />\n )}\n <MessageSquare className=\"relative size-3.5\" aria-hidden />\n </span>\n {generating ? l.watch : l.open}\n </Button>\n )\n}\n","import { ListTodo, Plus, Workflow } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { TabHeader, type Tab } from '../../shell/TabHeader'\n\n/** Fixed strings of the Tasks page chrome. */\nexport interface TasksChromeLabels {\n tasksTab: string\n newTask: string\n}\n\nexport const DEFAULT_TASKS_CHROME_LABELS: TasksChromeLabels = {\n tasksTab: 'Tasks',\n newTask: 'New task',\n}\n\nexport interface TasksToolbarProps {\n /** Number of tasks (shown on the single \"Tasks\" tab). */\n count: number\n onNewTask: () => void\n testIds?: Partial<{ tab: string; newTask: string }>\n labels?: Partial<TasksChromeLabels>\n}\n\n/** The Tasks page header: one \"Tasks\" tab with a count, and New task (the page's primary action). */\nexport function TasksToolbar({ count, onNewTask, testIds, labels }: TasksToolbarProps) {\n const l = { ...DEFAULT_TASKS_CHROME_LABELS, ...labels }\n const tabs: Tab[] = [\n {\n id: 'tasks',\n label: l.tasksTab,\n icon: <ListTodo className=\"size-4\" />,\n count,\n testId: testIdOr(testIds?.tab, { testId: 'tasks-tab' }),\n },\n ]\n return (\n <div className=\"sticky top-0 z-10 bg-background\" data-slot=\"tasks-toolbar\">\n <TabHeader\n tabs={tabs}\n activeTabId=\"tasks\"\n onTabChange={() => {}}\n rightContent={\n <Button\n onClick={onNewTask}\n data-testid={testIdOr(testIds?.newTask, { testId: 'task-new' })}\n >\n <Plus size={16} className=\"mr-1.5\" />\n {l.newTask}\n </Button>\n }\n />\n </div>\n )\n}\n\n/** Fixed strings of the Workflows page chrome. */\nexport interface WorkflowsChromeLabels {\n workflowsTab: string\n newWorkflow: string\n}\n\nexport const DEFAULT_WORKFLOWS_CHROME_LABELS: WorkflowsChromeLabels = {\n workflowsTab: 'Workflows',\n newWorkflow: 'New workflow',\n}\n\nexport interface WorkflowsToolbarProps {\n /** Number of workflows (shown on the single \"Workflows\" tab). */\n count: number\n onNewWorkflow: () => void\n testIds?: Partial<{ tab: string; newWorkflow: string }>\n labels?: Partial<WorkflowsChromeLabels>\n}\n\n/** The Workflows page header: one \"Workflows\" tab with a count, and New workflow. */\nexport function WorkflowsToolbar({ count, onNewWorkflow, testIds, labels }: WorkflowsToolbarProps) {\n const l = { ...DEFAULT_WORKFLOWS_CHROME_LABELS, ...labels }\n const tabs: Tab[] = [\n {\n id: 'workflows',\n label: l.workflowsTab,\n icon: <Workflow className=\"size-4\" />,\n count,\n testId: testIdOr(testIds?.tab, { testId: 'workflows-tab' }),\n },\n ]\n return (\n <div className=\"sticky top-0 z-10 bg-background\" data-slot=\"workflows-toolbar\">\n <TabHeader\n tabs={tabs}\n activeTabId=\"workflows\"\n onTabChange={() => {}}\n rightContent={\n <Button\n onClick={onNewWorkflow}\n data-testid={testIdOr(testIds?.newWorkflow, { testId: 'workflow-new' })}\n >\n <Plus size={16} className=\"mr-1.5\" />\n {l.newWorkflow}\n </Button>\n }\n />\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\nimport {\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\n\n/** Notifications are invitations to follow up in the thread, without assigning a review stage. */\nexport function ThreadNotifyDialog({\n open,\n onOpenChange,\n people,\n isShared,\n onNotify,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n people: readonly { id: string; label: string }[]\n isShared: boolean\n onNotify: (ids: string[]) => Promise<unknown>\n}) {\n const [selected, setSelected] = useState<string[]>([])\n const [query, setQuery] = useState('')\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n useEffect(() => {\n if (open) {\n setSelected([])\n setQuery('')\n setError(null)\n }\n }, [open])\n return (\n <Dialog\n open={open}\n onOpenChange={(value) => {\n if (!busy) onOpenChange(value)\n }}\n >\n <DialogContent className=\"max-w-sm\" data-testid=\"thread-notify-dialog\">\n <DialogTitle>Notify</DialogTitle>\n <DialogDescription>\n {isShared\n ? 'Ask someone to follow up in this thread.'\n : 'Notifying someone shares this thread with your workspace.'}\n </DialogDescription>\n <Input\n aria-label=\"Find people\"\n placeholder=\"Find someone…\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n />\n <div className=\"max-h-64 overflow-y-auto space-y-1\">\n {people\n .filter((person) => person.label.toLowerCase().includes(query.toLowerCase()))\n .map((person) => (\n <label\n key={person.id}\n className=\"flex cursor-pointer items-center gap-2 rounded px-2 py-2 hover:bg-muted\"\n >\n <Checkbox\n disabled={busy}\n checked={selected.includes(person.id)}\n onCheckedChange={(checked) =>\n setSelected((old) =>\n checked ? [...old, person.id] : old.filter((id) => id !== person.id)\n )\n }\n />\n {person.label}\n </label>\n ))}\n {!people.length && (\n <p className=\"text-sm text-muted-foreground\">No other workspace members yet.</p>\n )}\n </div>\n {error && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {error}\n </p>\n )}\n <Button\n disabled={busy || !selected.length}\n data-testid=\"thread-notify-submit\"\n onClick={async () => {\n setBusy(true)\n setError(null)\n try {\n await onNotify(selected)\n onOpenChange(false)\n } catch (failure) {\n setError(failure instanceof Error ? failure.message : 'Could not notify people')\n } finally {\n setBusy(false)\n }\n }}\n >\n {busy ? 'Notifying…' : 'Notify'}\n </Button>\n </DialogContent>\n </Dialog>\n )\n}\n","import { ARBI_MARK_SRC, UserEntity } from '@arbidocs/react/ui'\n\nexport interface TurnSpeakerProfile {\n external_id: string\n given_name: string\n family_name?: string | null\n picture?: string | null\n parent_ext_id?: string | null\n}\n\n/** A last-turn speaker, using only metadata returned with the conversation list. */\nexport function ConversationTurnSpeaker({\n role,\n actor,\n currentUserId,\n colorClass,\n platformName = 'ARBI',\n platformLogoSrc = ARBI_MARK_SRC,\n variant = 'pill',\n}: {\n role?: string | null\n actor?: TurnSpeakerProfile | null\n currentUserId?: string\n colorClass?: string\n platformName?: string\n platformLogoSrc?: string\n /** `icon`: the face alone (its name on hover), for a narrow column. */\n variant?: 'icon' | 'pill'\n}) {\n if (!role) return <span className=\"text-muted-foreground\">—</span>\n if (role === 'assistant' && !actor)\n return (\n <UserEntity\n size=\"sm\"\n variant={variant}\n interactive={false}\n picture={platformLogoSrc}\n avatarImageClassName=\"object-contain p-0.5\"\n initials={platformName.charAt(0)}\n displayName={platformName}\n />\n )\n if (!actor) return <span className=\"text-muted-foreground\">Unknown participant</span>\n const isMe = actor.external_id === currentUserId\n const displayName = isMe ? 'You' : [actor.given_name, actor.family_name].filter(Boolean).join(' ')\n return (\n <UserEntity\n size=\"sm\"\n variant={variant}\n interactive={false}\n isMe={isMe}\n isAgent={actor.external_id.startsWith('agt-')}\n displayName={displayName}\n initials={`${actor.given_name.charAt(0)}${actor.family_name?.charAt(0) ?? ''}`.toUpperCase()}\n picture={actor.picture}\n colorClass={colorClass}\n />\n )\n}\n"]}