@arbidocs/blocks 0.4.84 → 0.4.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/MailBodyEditor-5PIQLYVY.js +217 -0
- package/dist/MailBodyEditor-5PIQLYVY.js.map +1 -0
- package/dist/MailBodyEditor-D7MGJMLH.cjs +223 -0
- package/dist/MailBodyEditor-D7MGJMLH.cjs.map +1 -0
- package/dist/agents/index.cjs +281 -280
- package/dist/agents/index.js +6 -5
- package/dist/agents/workflows/StepBarFrame.d.ts +3 -1
- package/dist/agents/workflows/WorkflowRunner.d.ts +10 -1
- package/dist/agents/workflows/run.d.ts +24 -3
- package/dist/agents/workflows/stepWindow.d.ts +4 -2
- package/dist/agents/workflows/types.d.ts +5 -0
- package/dist/agents/workflows/useWorkflowView.d.ts +16 -1
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/chunk-3R6XBYL7.cjs +576 -0
- package/dist/chunk-3R6XBYL7.cjs.map +1 -0
- package/dist/{chunk-CKB64Z4R.js → chunk-4XJZ6AAY.js} +6 -245
- package/dist/chunk-4XJZ6AAY.js.map +1 -0
- package/dist/{chunk-SB5ZKOYN.js → chunk-7C35WXYB.js} +4 -63
- package/dist/chunk-7C35WXYB.js.map +1 -0
- package/dist/chunk-7RJTEWYM.js +362 -0
- package/dist/chunk-7RJTEWYM.js.map +1 -0
- package/dist/chunk-AFSOUS5X.cjs +253 -0
- package/dist/chunk-AFSOUS5X.cjs.map +1 -0
- package/dist/{chunk-F4RUCUXF.cjs → chunk-C2HRZSAT.cjs} +2 -63
- package/dist/chunk-C2HRZSAT.cjs.map +1 -0
- package/dist/{chunk-RX35SMPR.js → chunk-FHOZMT5P.js} +7 -6
- package/dist/chunk-FHOZMT5P.js.map +1 -0
- package/dist/{chunk-CONIA2ZA.js → chunk-KHY4PYU7.js} +246 -146
- package/dist/chunk-KHY4PYU7.js.map +1 -0
- package/dist/chunk-LGX6UFYG.js +557 -0
- package/dist/chunk-LGX6UFYG.js.map +1 -0
- package/dist/chunk-O4YPVYPO.cjs +373 -0
- package/dist/chunk-O4YPVYPO.cjs.map +1 -0
- package/dist/chunk-R26OHONI.js +250 -0
- package/dist/chunk-R26OHONI.js.map +1 -0
- package/dist/{chunk-RYYYHPFU.cjs → chunk-RZUMQM7W.cjs} +246 -146
- package/dist/chunk-RZUMQM7W.cjs.map +1 -0
- package/dist/{chunk-YJQVLVBJ.cjs → chunk-S5HZBXZA.cjs} +2 -243
- package/dist/chunk-S5HZBXZA.cjs.map +1 -0
- package/dist/{chunk-ZQYE7J3J.cjs → chunk-WRSBM6QN.cjs} +332 -94
- package/dist/chunk-WRSBM6QN.cjs.map +1 -0
- package/dist/{chunk-RSKSXEPW.js → chunk-X23U6QEJ.js} +324 -88
- package/dist/chunk-X23U6QEJ.js.map +1 -0
- package/dist/{chunk-XA5S4776.cjs → chunk-Z7YUCYI6.cjs} +51 -50
- package/dist/chunk-Z7YUCYI6.cjs.map +1 -0
- package/dist/collaboration/index.cjs +100 -49
- package/dist/collaboration/index.js +4 -1
- package/dist/collaboration/mail/MailBodyEditor.d.ts +7 -0
- package/dist/collaboration/mail/MailDeliveryList.d.ts +8 -0
- package/dist/collaboration/mail/MailDocumentPicker.d.ts +15 -0
- package/dist/collaboration/mail/MailGrid.d.ts +17 -0
- package/dist/collaboration/mail/MailMessageView.d.ts +27 -0
- package/dist/collaboration/mail/PlainMailBodyEditor.d.ts +12 -0
- package/dist/collaboration/mail/index.d.ts +6 -0
- package/dist/collaboration/mail/mailCompose.d.ts +24 -0
- package/dist/connect/index.cjs +1647 -65
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +2 -1
- package/dist/connect/index.js +1631 -55
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedTagTable.d.ts +32 -0
- package/dist/connection/mail/ConnectedMailAccounts.d.ts +21 -0
- package/dist/connection/mail/ConnectedMailComposer.d.ts +40 -0
- package/dist/connection/mail/ConnectedMailSetup.d.ts +16 -0
- package/dist/connection/mail/ConnectedMailbox.d.ts +65 -0
- package/dist/connection/mail/MailComposerForm.d.ts +25 -0
- package/dist/connection/mail/attachments.d.ts +13 -0
- package/dist/connection/mail/index.d.ts +6 -0
- package/dist/connection/mail/mailbox.d.ts +6 -0
- package/dist/connection/mail/types.d.ts +92 -0
- package/dist/connection/useConnectedWorkNotifications.d.ts +6 -0
- package/dist/connection/useWorkflowThread.d.ts +7 -2
- package/dist/facts/index.cjs +2 -2
- package/dist/facts/index.js +2 -2
- package/dist/files/index.cjs +47 -367
- package/dist/files/index.cjs.map +1 -1
- package/dist/files/index.js +10 -360
- package/dist/files/index.js.map +1 -1
- package/dist/index.cjs +450 -391
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +21 -18
- package/dist/index.js.map +1 -1
- package/dist/settings/index.cjs +10 -9
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.js +2 -1
- package/dist/settings/index.js.map +1 -1
- package/dist/shell/index.cjs +1 -1
- package/dist/shell/index.js +1 -1
- package/dist/tags/TagColumnsEditor.d.ts +34 -0
- package/dist/tags/TagDetail.d.ts +13 -11
- package/dist/tags/TagTable.d.ts +99 -0
- package/dist/tags/TagsNav.d.ts +2 -2
- package/dist/tags/index.d.ts +7 -5
- package/dist/tags/{tagMatrixDocx.d.ts → tagTableDocx.d.ts} +12 -12
- package/dist/tags/tagTableModel.d.ts +47 -0
- package/dist/workflow-canvas/index.cjs +49 -48
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +6 -5
- package/dist/workflow-canvas/index.js.map +1 -1
- package/package.json +29 -4
- package/dist/chunk-CKB64Z4R.js.map +0 -1
- package/dist/chunk-CONIA2ZA.js.map +0 -1
- package/dist/chunk-F4RUCUXF.cjs.map +0 -1
- package/dist/chunk-RSKSXEPW.js.map +0 -1
- package/dist/chunk-RX35SMPR.js.map +0 -1
- package/dist/chunk-RYYYHPFU.cjs.map +0 -1
- package/dist/chunk-SB5ZKOYN.js.map +0 -1
- package/dist/chunk-XA5S4776.cjs.map +0 -1
- package/dist/chunk-YJQVLVBJ.cjs.map +0 -1
- package/dist/chunk-ZQYE7J3J.cjs.map +0 -1
- package/dist/connection/ConnectedTagMatrix.d.ts +0 -23
- package/dist/tags/TagMatrix.d.ts +0 -87
- package/dist/tags/tagMatrixModel.d.ts +0 -43
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tags/tagTableModel.ts","../src/tags/TagColumnsEditor.tsx","../src/tags/TagTable.tsx","../src/tags/tagTableDocx.ts"],"names":["useState","jsx","jsxs","cn","count","Button","Loader2","Input","Plus"],"mappings":"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","file":"chunk-X23U6QEJ.js","sourcesContent":["/**\n * A table of tags as data: the rows are tags (every issue, every person, a label's children) with\n * their values and links, the columns their kind's fields in the workspace (its issue fields …),\n * and each row's linked documents, facts and threads its evidence. Pure helpers for `TagTable`: a\n * row's value, the gaps, and the snapshot as a Markdown document.\n */\n\nimport type { components } from '@arbidocs/client'\n\n/** A column: one of the kind's fields. */\nexport type TagTableField = components['schemas']['FieldDefinition']\nexport type TagTableFieldType = TagTableField['type']\n/** A field as written back to the kind (`id` keeps it and its values). */\nexport type TagTableFieldWrite = components['schemas']['FieldDefinitionWrite']\n/** A row: a tag, with its links (`include=links` on the list). */\nexport type TagTableRow = components['schemas']['TagResponse']\nexport type TagTableLinks = components['schemas']['TagLinks']\n\n/** What a table shows: the kind's fields as columns, and its tags as rows. */\nexport interface TagTableData {\n columns: TagTableField[]\n rows: TagTableRow[]\n}\n\nconst NO_LINKS: TagTableLinks = {\n docs: [],\n facts: [],\n threads: [],\n doc_count: 0,\n fact_count: 0,\n thread_count: 0,\n}\n\n/** A row's links (none when the list was read without them). */\nexport const rowLinks = (row: TagTableRow): TagTableLinks => row.links ?? NO_LINKS\n\n/** A row's value for a column (values are keyed by field id). */\nexport const cellValue = (row: TagTableRow, column: TagTableField): unknown =>\n row.field_values?.[column.id]\n\n/** A row with nothing behind it: no linked document, fact or thread. */\nexport const isGap = (row: TagTableRow): boolean => {\n const l = rowLinks(row)\n return l.doc_count + l.fact_count + l.thread_count === 0\n}\n\n/** A value as text (a person by name, a checkbox as yes or no, blank as empty). */\nexport function cellText(\n value: unknown,\n column: Pick<TagTableField, 'type'>,\n nameOf?: (id: string) => string | undefined\n): string {\n if (value === undefined || value === null || value === '') return ''\n if (column.type === 'checkbox') return value ? 'Yes' : 'No'\n if (column.type === 'person' && typeof value === 'string') return nameOf?.(value) ?? value\n if (Array.isArray(value)) return value.map(String).join(', ')\n return String(value)\n}\n\n/** A typed input's text back as the value to store (`null` clears it). */\nexport function parseCell(text: string, type: TagTableFieldType): unknown {\n const t = text.trim()\n if (t === '') return null\n if (type === 'number') {\n const n = Number(t)\n return Number.isNaN(n) ? null : n\n }\n return t\n}\n\n/** The kind's fields as definitions to write back, every one kept by id. */\nexport const fieldWrites = (columns: readonly TagTableField[]): TagTableFieldWrite[] =>\n columns.map((c) => ({ id: c.id, name: c.name, type: c.type, options: c.options ?? null }))\n\nconst escapeCell = (text: string) => text.replace(/\\|/g, '\\\\|').replace(/\\n+/g, ' ')\n\nexport interface TagTableMarkdownOptions {\n title: string\n /** The evidence column's heading. */\n evidence?: string\n /** The row column's heading. */\n rowHeading?: string\n nameOf?: (id: string) => string | undefined\n /** When the snapshot was taken (ISO); default now. */\n at?: string\n}\n\n/**\n * The table as a Markdown document: a heading, when it was taken, and one table (a row per tag, a\n * column per field, then the evidence counts). What a host files or has signed.\n */\nexport function tagTableMarkdown(table: TagTableData, options: TagTableMarkdownOptions): string {\n const { columns } = table\n const heads = [\n options.rowHeading ?? 'Item',\n ...columns.map((c) => c.name),\n options.evidence ?? 'Evidence',\n ]\n const lines = [\n `# ${options.title}`,\n '',\n `_Snapshot taken ${new Date(options.at ?? Date.now()).toISOString().slice(0, 16).replace('T', ' ')} UTC_`,\n '',\n `| ${heads.map(escapeCell).join(' | ')} |`,\n `| ${heads.map(() => '---').join(' | ')} |`,\n ]\n for (const row of table.rows) {\n const l = rowLinks(row)\n const evidence = [\n `${l.doc_count} document${l.doc_count === 1 ? '' : 's'}`,\n `${l.fact_count} fact${l.fact_count === 1 ? '' : 's'}`,\n ...(l.thread_count ? [`${l.thread_count} thread${l.thread_count === 1 ? '' : 's'}`] : []),\n ].join(', ')\n const cells = [\n row.name,\n ...columns.map((c) => cellText(cellValue(row, c), c, options.nameOf)),\n evidence,\n ]\n lines.push(`| ${cells.map(escapeCell).join(' | ')} |`)\n }\n return `${lines.join('\\n')}\\n`\n}\n","/**\n * The columns of a table of tags — the fields of their kind in the workspace (its issue fields …) —\n * edited as one list: rename, reorder by position, add, remove, and a choice field's options. A kept\n * column keeps its id, so its values stay (its type is fixed once created). Saved in full through\n * the host (`onSave`); data-free.\n */\n\nimport { useState } from 'react'\nimport { ArrowDown, ArrowUp, Loader2, Plus, X } from 'lucide-react'\nimport { Button, Input, cn } from '@arbidocs/react/ui'\nimport type { TagTableField, TagTableFieldType, TagTableFieldWrite } from './tagTableModel'\n\nexport interface TagColumnsEditorLabels {\n title: string\n addColumn: string\n name: string\n type: string\n options: string\n optionsPlaceholder: string\n remove: string\n moveUp: string\n moveDown: string\n save: string\n saving: string\n cancel: string\n empty: string\n types: Record<TagTableFieldType, string>\n}\n\nexport const DEFAULT_TAG_COLUMNS_EDITOR_LABELS: TagColumnsEditorLabels = {\n title: 'Columns',\n addColumn: 'Add column',\n name: 'Column name',\n type: 'Type',\n options: 'Choices',\n optionsPlaceholder: 'Choices, comma-separated',\n remove: 'Remove column',\n moveUp: 'Move up',\n moveDown: 'Move down',\n save: 'Save columns',\n saving: 'Saving…',\n cancel: 'Cancel',\n empty: 'No columns.',\n types: {\n text: 'Text',\n number: 'Number',\n date: 'Date',\n checkbox: 'Yes / no',\n select: 'Choice',\n person: 'Person',\n document: 'Document',\n relation: 'Relation',\n lookup: 'Lookup',\n rollup: 'Rollup',\n },\n}\n\n/** The types a tag's field can have. */\nconst TYPES: TagTableFieldType[] = ['text', 'number', 'date', 'checkbox', 'select', 'person']\n\ninterface Draft {\n id?: string\n name: string\n type: TagTableFieldType\n options: string\n}\n\nconst toDraft = (f: TagTableField): Draft => ({\n id: f.id,\n name: f.name,\n type: f.type,\n options: (f.options ?? []).join(', '),\n})\n\nconst toWrite = (d: Draft): TagTableFieldWrite => ({\n ...(d.id ? { id: d.id } : {}),\n name: d.name.trim(),\n type: d.type,\n options:\n d.type === 'select'\n ? d.options\n .split(',')\n .map((o) => o.trim())\n .filter(Boolean)\n : null,\n})\n\nexport interface TagColumnsEditorProps {\n columns: TagTableField[]\n /** Save the columns in full; a rejection (e.g. two columns of one name) stays on screen. */\n onSave: (fields: TagTableFieldWrite[]) => void | Promise<unknown>\n onCancel: () => void\n labels?: Partial<TagColumnsEditorLabels>\n className?: string\n testId?: string\n}\n\nexport function TagColumnsEditor({\n columns,\n onSave,\n onCancel,\n labels,\n className,\n testId = 'tag-columns',\n}: TagColumnsEditorProps) {\n const l = { ...DEFAULT_TAG_COLUMNS_EDITOR_LABELS, ...labels }\n const [drafts, setDrafts] = useState<Draft[]>(() => columns.map(toDraft))\n const [saving, setSaving] = useState(false)\n const patch = (i: number, change: Partial<Draft>) =>\n setDrafts((ds) => ds.map((d, j) => (j === i ? { ...d, ...change } : d)))\n const move = (i: number, by: number) =>\n setDrafts((ds) => {\n const next = [...ds]\n const [d] = next.splice(i, 1)\n next.splice(i + by, 0, d)\n return next\n })\n const valid = drafts.every(\n (d) => d.name.trim() && (d.type !== 'select' || toWrite(d).options?.length)\n )\n const input =\n 'h-8 rounded-md border border-input bg-background px-2 text-sm focus:outline-none focus:ring-1 focus:ring-ring'\n\n return (\n <form\n className={cn('space-y-2 rounded-lg border border-border p-3', className)}\n onSubmit={async (e) => {\n e.preventDefault()\n if (!valid) return\n setSaving(true)\n try {\n await onSave(drafts.map(toWrite))\n } finally {\n setSaving(false)\n }\n }}\n data-testid={testId}\n >\n <h3 className=\"text-sm font-semibold\">{l.title}</h3>\n {drafts.length === 0 && <p className=\"text-sm text-muted-foreground\">{l.empty}</p>}\n <ul className=\"space-y-2\">\n {drafts.map((d, i) => (\n <li\n key={d.id ?? `new-${i}`}\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={`${testId}-column-${i}`}\n >\n <Input\n className=\"h-8 w-48\"\n value={d.name}\n placeholder={l.name}\n aria-label={l.name}\n onChange={(e) => patch(i, { name: e.target.value })}\n data-testid={`${testId}-name-${i}`}\n />\n <select\n className={cn(input, 'w-32')}\n value={d.type}\n // A column's type is fixed once it exists: its values were written for it.\n disabled={!!d.id}\n aria-label={l.type}\n onChange={(e) => patch(i, { type: e.target.value as TagTableFieldType })}\n data-testid={`${testId}-type-${i}`}\n >\n {(TYPES.includes(d.type) ? TYPES : [d.type, ...TYPES]).map((t) => (\n <option key={t} value={t}>\n {l.types[t]}\n </option>\n ))}\n </select>\n {d.type === 'select' && (\n <Input\n className=\"h-8 min-w-48 flex-1\"\n value={d.options}\n placeholder={l.optionsPlaceholder}\n aria-label={l.options}\n onChange={(e) => patch(i, { options: e.target.value })}\n data-testid={`${testId}-options-${i}`}\n />\n )}\n <div className=\"ml-auto flex items-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n disabled={i === 0}\n aria-label={l.moveUp}\n onClick={() => move(i, -1)}\n >\n <ArrowUp className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n disabled={i === drafts.length - 1}\n aria-label={l.moveDown}\n onClick={() => move(i, 1)}\n >\n <ArrowDown className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.remove}\n onClick={() => setDrafts((ds) => ds.filter((_, j) => j !== i))}\n data-testid={`${testId}-remove-${i}`}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n </li>\n ))}\n </ul>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setDrafts((ds) => [...ds, { name: '', type: 'text', options: '' }])}\n data-testid={`${testId}-add`}\n >\n <Plus className=\"size-4\" /> {l.addColumn}\n </Button>\n <div className=\"ml-auto flex items-center gap-2\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!valid || saving}\n data-testid={`${testId}-save`}\n >\n {saving && <Loader2 className=\"size-4 animate-spin\" />}\n {saving ? l.saving : l.save}\n </Button>\n </div>\n </div>\n </form>\n )\n}\n","/**\n * A table of tags (every issue, every person, a label's children): one row per tag, a column per\n * field of their kind in the workspace, editable in place by type (text, number, date, checkbox,\n * choice, person), and the evidence behind each row (its linked documents, facts and threads, with\n * counts). Rows with no evidence are marked as gaps. Rows and columns can be added (the columns are\n * the kind's fields, edited as one list), and the table exported as a Word document snapshot (filed\n * in the workspace) or downloaded.\n * The data and every write come from the host (`ConnectedTagTable` binds them to ARBI).\n */\n\nimport { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport {\n AlertTriangle,\n Download,\n FileDown,\n FileText,\n Lightbulb,\n Loader2,\n MessagesSquare,\n Plus,\n SlidersHorizontal,\n} from 'lucide-react'\nimport { Button, Checkbox, Input, cn } from '@arbidocs/react/ui'\nimport {\n cellText,\n cellValue,\n isGap,\n parseCell,\n rowLinks,\n type TagTableData,\n type TagTableField,\n type TagTableFieldWrite,\n type TagTableRow,\n} from './tagTableModel'\nimport { TagColumnsEditor, type TagColumnsEditorLabels } from './TagColumnsEditor'\n\nexport interface TagTableLabels {\n row: string\n evidence: string\n /** `{count}` documents linked. */\n documents: string\n /** `{count}` facts linked. */\n facts: string\n /** `{count}` threads linked. */\n threads: string\n /** One document, one fact, one thread. */\n document: string\n fact: string\n thread: string\n /** A thread without a title. */\n untitledThread: string\n /** `{count}` more links than shown. */\n more: string\n gap: string\n gapsOnly: string\n /** `{count}` rows without evidence. */\n gapCount: string\n addRow: string\n addRowPlaceholder: string\n add: string\n export: string\n exporting: string\n download: string\n empty: string\n loading: string\n noColumns: string\n choose: string\n yes: string\n /** Opens the column editor. */\n editColumns: string\n /** The column editor's own labels. */\n columns?: Partial<TagColumnsEditorLabels>\n}\n\nexport const DEFAULT_TAG_TABLE_LABELS: TagTableLabels = {\n row: 'Item',\n evidence: 'Evidence',\n documents: '{count} documents',\n facts: '{count} facts',\n threads: '{count} threads',\n document: '1 document',\n fact: '1 fact',\n thread: '1 thread',\n untitledThread: 'Untitled thread',\n more: '+{count} more',\n gap: 'No evidence',\n gapsOnly: 'Show gaps only',\n gapCount: '{count} without evidence',\n addRow: 'Add row',\n addRowPlaceholder: 'Name of the new row',\n add: 'Add',\n export: 'Export as Word document',\n download: 'Download .docx',\n exporting: 'Exporting…',\n empty: 'No rows yet.',\n loading: 'Loading…',\n noColumns: 'No columns yet: add one to give each row a value.',\n choose: '—',\n yes: 'Yes',\n editColumns: 'Columns',\n}\n\nexport interface TagTableProps {\n /** The kind's fields (the columns) and its tags (the rows, with their links). */\n table: TagTableData | undefined\n isLoading?: boolean\n /** Change one cell (`null` clears it). Absent: read only. */\n onChangeValue?: (tagId: string, fieldId: string, value: unknown) => void | Promise<unknown>\n /** Add a row (a new tag of the kind). Absent: no \"Add row\". */\n onAddRow?: (name: string) => void | Promise<unknown>\n /**\n * Set the columns (the kind's fields) in full: a kept column has its `id`. Absent: the columns\n * are fixed.\n */\n onChangeColumns?: (fields: TagTableFieldWrite[]) => void | Promise<unknown>\n /** Open a linked document. */\n onOpenDocument?: (documentId: string) => void\n /** Open a linked fact. */\n onOpenFact?: (factId: string) => void\n /** Open a linked thread (conversation). */\n onOpenThread?: (conversationId: string) => void\n /** Open a row's tag (all its evidence). */\n onOpenRow?: (tagId: string) => void\n /** Export the table as it stands (filed as a document). Absent: no export button. */\n onExport?: () => void | Promise<unknown>\n /** Download the table as it stands as a file. Absent: no download button. */\n onDownload?: () => void | Promise<unknown>\n /** Who a person column offers. */\n people?: ReadonlyArray<{ value: string; label: string }>\n /** Extra controls in the toolbar. */\n actions?: ReactNode\n labels?: Partial<TagTableLabels>\n className?: string\n testId?: string\n}\n\n/**\n * The row-label (\"Item\") column: wide enough for a legal issue's name to read, never so wide the\n * fields are pushed out of view. Long names wrap inside it (cut after three lines, in full in the\n * tooltip), so a label never runs into the next column.\n */\nconst ROW_LABEL_WIDTH = 'w-[18rem] min-w-[12rem] max-w-[18rem]'\nconst ROW_LABEL = 'line-clamp-3 whitespace-normal break-words'\n\n/**\n * One editable field value of a tag, by its type: committed on blur or Enter (a checkbox and a\n * choice at once). A table cell, and a field of a single tag's form (`TagDetail`).\n */\nexport function TagTableCell({\n row,\n column,\n people,\n onChange,\n l,\n testId,\n}: {\n row: TagTableRow\n column: TagTableField\n people?: TagTableProps['people']\n onChange?: TagTableProps['onChangeValue']\n l: TagTableLabels\n testId: string\n}) {\n const value = cellValue(row, column)\n const nameOf = (id: string) => people?.find((p) => p.value === id)?.label\n const shown = cellText(value, column, nameOf)\n const [draft, setDraft] = useState(shown)\n useEffect(() => setDraft(cellText(value, column)), [value, column])\n const set = (next: unknown) => void onChange?.(row.external_id, column.id, next)\n\n if (!onChange)\n return (\n <span className=\"block truncate\" title={shown} data-testid={testId}>\n {shown || <span className=\"text-muted-foreground\">{l.choose}</span>}\n </span>\n )\n const field =\n 'h-8 w-full min-w-24 rounded-md border border-transparent bg-transparent px-1.5 text-sm hover:border-input focus:border-input focus:bg-background focus:outline-none'\n switch (column.type) {\n case 'checkbox':\n return (\n <Checkbox\n checked={value === true}\n onCheckedChange={(v) => set(v === true)}\n aria-label={`${row.name}: ${column.name}`}\n data-testid={testId}\n />\n )\n case 'select':\n case 'person': {\n const options =\n column.type === 'select'\n ? (column.options ?? []).map((o) => ({ value: o, label: o }))\n : (people ?? [])\n return (\n <select\n className={cn(field, 'min-w-32 pr-6')}\n value={typeof value === 'string' ? value : ''}\n onChange={(e) => set(e.target.value || null)}\n aria-label={`${row.name}: ${column.name}`}\n data-testid={testId}\n >\n <option value=\"\">{l.choose}</option>\n {options.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n {typeof value === 'string' && value && !options.some((o) => o.value === value) && (\n <option value={value}>{value}</option>\n )}\n </select>\n )\n }\n default: {\n const commit = () => {\n if (draft !== cellText(value, column)) set(parseCell(draft, column.type))\n }\n return (\n <input\n className={cn(field, 'min-w-32 pr-6')}\n type={column.type === 'number' ? 'number' : column.type === 'date' ? 'date' : 'text'}\n value={column.type === 'date' ? draft.slice(0, 10) : draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') (e.target as HTMLInputElement).blur()\n if (e.key === 'Escape') setDraft(cellText(value, column))\n }}\n aria-label={`${row.name}: ${column.name}`}\n data-testid={testId}\n />\n )\n }\n }\n}\n\n/** A count as a phrase: \"1 document\", \"3 facts\", or nothing for none. */\nconst countText = (count: number, one: string, many: string) =>\n count === 1 ? one : count ? many.replace('{count}', String(count)) : null\n\n/** What backs a row: its documents, facts and threads as links, with counts and \"+N more\". */\nfunction Evidence({\n row,\n l,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n onOpenRow,\n testId,\n}: {\n row: TagTableRow\n l: TagTableLabels\n onOpenDocument?: (id: string) => void\n onOpenFact?: (id: string) => void\n onOpenThread?: (id: string) => void\n onOpenRow?: (id: string) => void\n testId: string\n}) {\n if (isGap(row))\n return (\n <span\n className=\"inline-flex items-center gap-1 rounded-full bg-amber-500/15 px-2 py-0.5 text-xs font-medium text-amber-700 dark:text-amber-300\"\n data-testid={`${testId}-gap`}\n >\n <AlertTriangle className=\"size-3\" /> {l.gap}\n </span>\n )\n const links = rowLinks(row)\n const docs = links.docs ?? []\n const facts = links.facts ?? []\n const threads = links.threads ?? []\n const more =\n links.doc_count -\n docs.length +\n (links.fact_count - facts.length) +\n (links.thread_count - threads.length)\n const chip =\n 'inline-flex max-w-44 items-center gap-1 truncate rounded-md border border-border px-1.5 py-0.5 text-xs hover:border-primary/40 hover:text-primary disabled:hover:border-border disabled:hover:text-inherit'\n return (\n <div className=\"flex flex-wrap items-center gap-1\" data-testid={testId}>\n <span className=\"mr-1 text-xs text-muted-foreground\">\n {[\n countText(links.doc_count, l.document, l.documents),\n countText(links.fact_count, l.fact, l.facts),\n countText(links.thread_count, l.thread, l.threads),\n ]\n .filter(Boolean)\n .join(' · ')}\n </span>\n {docs.map((d) => (\n <button\n key={d.doc_ext_id}\n type=\"button\"\n className={chip}\n title={d.note ? `${d.file_name}: ${d.note}` : d.file_name}\n disabled={!onOpenDocument}\n onClick={() => onOpenDocument?.(d.doc_ext_id)}\n data-testid={`${testId}-doc-${d.doc_ext_id}`}\n >\n <FileText className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{d.file_name}</span>\n </button>\n ))}\n {facts.map((f) => (\n <button\n key={f.fact_ext_id}\n type=\"button\"\n className={chip}\n title={f.text}\n disabled={!onOpenFact}\n onClick={() => onOpenFact?.(f.fact_ext_id)}\n data-testid={`${testId}-fact-${f.fact_ext_id}`}\n >\n <Lightbulb className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{f.text}</span>\n </button>\n ))}\n {threads.map((t) => (\n <button\n key={t.conversation_ext_id}\n type=\"button\"\n className={chip}\n title={t.title || l.untitledThread}\n disabled={!onOpenThread}\n onClick={() => onOpenThread?.(t.conversation_ext_id)}\n data-testid={`${testId}-thread-${t.conversation_ext_id}`}\n >\n <MessagesSquare className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{t.title || l.untitledThread}</span>\n </button>\n ))}\n {more > 0 &&\n (onOpenRow ? (\n <button\n type=\"button\"\n className=\"text-xs text-primary hover:underline\"\n onClick={() => onOpenRow(row.external_id)}\n data-testid={`${testId}-more`}\n >\n {l.more.replace('{count}', String(more))}\n </button>\n ) : (\n <span className=\"text-xs text-muted-foreground\" data-testid={`${testId}-more`}>\n {l.more.replace('{count}', String(more))}\n </span>\n ))}\n </div>\n )\n}\n\nexport function TagTable({\n table,\n isLoading,\n onChangeValue,\n onAddRow,\n onChangeColumns,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n onOpenRow,\n onExport,\n onDownload,\n people,\n actions,\n labels,\n className,\n testId = 'tag-table',\n}: TagTableProps) {\n const l = { ...DEFAULT_TAG_TABLE_LABELS, ...labels }\n const columns = useMemo(() => table?.columns ?? [], [table])\n const rows = table?.rows ?? []\n const [editingColumns, setEditingColumns] = useState(false)\n const gaps = rows.filter(isGap).length\n const [gapsOnly, setGapsOnly] = useState(false)\n const [name, setName] = useState('')\n const [adding, setAdding] = useState(false)\n const [exporting, setExporting] = useState(false)\n const shown = gapsOnly ? rows.filter(isGap) : rows\n\n const add = async () => {\n const n = name.trim()\n if (!n || !onAddRow) return\n setAdding(true)\n try {\n await onAddRow(n)\n setName('')\n } finally {\n setAdding(false)\n }\n }\n\n return (\n <div className={cn('space-y-3', className)} data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {gaps > 0 && (\n <label className=\"flex items-center gap-2 text-sm\">\n <Checkbox\n checked={gapsOnly}\n onCheckedChange={(v) => setGapsOnly(v === true)}\n data-testid={`${testId}-gaps-only`}\n />\n {l.gapsOnly}\n <span className=\"text-xs text-amber-700 dark:text-amber-300\">\n ({l.gapCount.replace('{count}', String(gaps))})\n </span>\n </label>\n )}\n <div className=\"ml-auto flex flex-wrap items-center gap-2\">\n {actions}\n {onChangeColumns && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-pressed={editingColumns}\n onClick={() => setEditingColumns((v) => !v)}\n data-testid={`${testId}-edit-columns`}\n >\n <SlidersHorizontal className=\"size-4\" />\n {l.editColumns}\n </Button>\n )}\n {onDownload && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={rows.length === 0}\n onClick={() => void onDownload()}\n data-testid={`${testId}-download`}\n >\n <Download className=\"size-4\" />\n {l.download}\n </Button>\n )}\n {onExport && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={exporting || rows.length === 0}\n onClick={async () => {\n setExporting(true)\n try {\n await onExport()\n } finally {\n setExporting(false)\n }\n }}\n data-testid={`${testId}-export`}\n >\n {exporting ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <FileDown className=\"size-4\" />\n )}\n {exporting ? l.exporting : l.export}\n </Button>\n )}\n </div>\n </div>\n\n {editingColumns && onChangeColumns && (\n <TagColumnsEditor\n columns={columns}\n labels={l.columns}\n onCancel={() => setEditingColumns(false)}\n onSave={async (fields) => {\n await onChangeColumns(fields)\n setEditingColumns(false)\n }}\n testId={`${testId}-columns`}\n />\n )}\n\n {isLoading ? (\n <p className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {l.loading}\n </p>\n ) : (\n <div className=\"overflow-x-auto rounded-lg border border-border\">\n <table className=\"w-full border-collapse text-sm\" data-testid={`${testId}-table`}>\n <thead className=\"bg-muted/40\">\n <tr>\n <th\n className={cn(\n ROW_LABEL_WIDTH,\n 'sticky left-0 z-10 bg-muted/40 px-3 py-2 text-left font-medium'\n )}\n >\n {l.row}\n </th>\n {columns.map((c) => (\n <th\n key={c.id}\n className=\"px-3 py-2 text-left font-medium\"\n data-testid={`${testId}-column-${c.id}`}\n >\n {c.name}\n </th>\n ))}\n <th className=\"px-3 py-2 text-left font-medium\">{l.evidence}</th>\n </tr>\n </thead>\n <tbody>\n {shown.map((row) => {\n const id = row.external_id\n const gap = isGap(row)\n return (\n <tr\n key={id}\n className={cn('border-t border-border align-top', gap && 'bg-amber-500/5')}\n data-gap={gap || undefined}\n data-testid={`${testId}-row-${id}`}\n >\n <th\n scope=\"row\"\n className={cn(\n ROW_LABEL_WIDTH,\n 'sticky left-0 z-10 px-3 py-2 text-left font-medium',\n gap ? 'bg-amber-50 dark:bg-amber-950' : 'bg-background',\n gap && 'border-l-2 border-l-amber-500'\n )}\n >\n {onOpenRow ? (\n <button\n type=\"button\"\n className={cn(ROW_LABEL, 'text-left hover:text-primary hover:underline')}\n title={row.name}\n onClick={() => onOpenRow(id)}\n data-testid={`${testId}-row-${id}-label`}\n >\n {row.name}\n </button>\n ) : (\n <span\n className={ROW_LABEL}\n title={row.name}\n data-testid={`${testId}-row-${id}-label`}\n >\n {row.name}\n </span>\n )}\n </th>\n {columns.map((c) => (\n <td key={c.id} className=\"px-1.5 py-1\">\n <TagTableCell\n row={row}\n column={c}\n people={people}\n onChange={onChangeValue}\n l={l}\n testId={`${testId}-cell-${id}-${c.id}`}\n />\n </td>\n ))}\n <td className=\"px-3 py-2\">\n <Evidence\n row={row}\n l={l}\n onOpenDocument={onOpenDocument}\n onOpenFact={onOpenFact}\n onOpenThread={onOpenThread}\n onOpenRow={onOpenRow}\n testId={`${testId}-evidence-${id}`}\n />\n </td>\n </tr>\n )\n })}\n {shown.length === 0 && (\n <tr>\n <td\n colSpan={columns.length + 2}\n className=\"px-3 py-6 text-center text-sm text-muted-foreground\"\n >\n {l.empty}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n {columns.length === 0 && rows.length > 0 && (\n <p className=\"border-t border-border px-3 py-2 text-xs text-muted-foreground\">\n {l.noColumns}\n </p>\n )}\n </div>\n )}\n\n {onAddRow && (\n <form\n className=\"flex max-w-md items-center gap-2\"\n onSubmit={(e) => {\n e.preventDefault()\n void add()\n }}\n >\n <Input\n value={name}\n placeholder={l.addRowPlaceholder}\n aria-label={l.addRow}\n onChange={(e) => setName(e.target.value)}\n data-testid={`${testId}-add-name`}\n />\n <Button\n type=\"submit\"\n size=\"sm\"\n variant=\"outline\"\n disabled={!name.trim() || adding}\n data-testid={`${testId}-add`}\n >\n <Plus className=\"size-4\" /> {l.addRow}\n </Button>\n </form>\n )}\n </div>\n )\n}\n","/**\n * A table of tags as a Word document: a title, when the snapshot was taken, then one table with a\n * row per tag, a column per field of its kind, the evidence behind it (linked document names and fact\n * excerpts) and its gaps. Written straight as WordprocessingML and zipped with `fflate` (already a\n * dependency, and what `docx/export.ts` uses), so the result opens in the native Word editor and\n * in Word without pulling the editor engine into the tags module.\n */\n\nimport { strToU8, zipSync } from 'fflate'\nimport {\n cellText,\n cellValue,\n isGap,\n rowLinks,\n type TagTableData,\n type TagTableField,\n type TagTableRow,\n} from './tagTableModel'\n\nexport const DOCX_MIME_TYPE =\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n\n/** More table columns than this (item, fields, evidence, gaps) turn the page to landscape. */\nexport const TAG_TABLE_DOCX_LANDSCAPE_AFTER = 6\n\nexport interface TagTableDocxLabels {\n /** The row column's heading. */\n row: string\n evidence: string\n gaps: string\n /** `{at}` is the snapshot time, `YYYY-MM-DD HH:MM UTC`. */\n takenAt: string\n /** A row with no linked document, fact or thread. */\n noEvidence: string\n /** `{fields}`: the row's empty fields. */\n missing: string\n /** `{count}` more links than listed. */\n more: string\n document: string\n documents: string\n fact: string\n facts: string\n thread: string\n threads: string\n untitledThread: string\n empty: string\n}\n\nexport const DEFAULT_TAG_TABLE_DOCX_LABELS: TagTableDocxLabels = {\n row: 'Item',\n evidence: 'Evidence',\n gaps: 'Gaps',\n takenAt: 'Snapshot taken {at}',\n noEvidence: 'No evidence',\n missing: 'Missing: {fields}',\n more: '+{count} more',\n document: '1 document',\n documents: '{count} documents',\n fact: '1 fact',\n facts: '{count} facts',\n thread: '1 thread',\n threads: '{count} threads',\n untitledThread: 'Untitled thread',\n empty: 'No rows.',\n}\n\nexport interface TagTableDocxOptions {\n title: string\n nameOf?: (id: string) => string | undefined\n /** When the snapshot was taken (ISO); default now. */\n at?: string\n labels?: Partial<TagTableDocxLabels>\n}\n\n// Text that is not allowed in XML 1.0 at all (control characters) is dropped, not escaped.\n// eslint-disable-next-line no-control-regex\nconst INVALID_XML = /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F]/g\nconst esc = (text: string) =>\n text\n .replace(INVALID_XML, '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n\ninterface Run {\n text: string\n bold?: boolean\n italic?: boolean\n muted?: boolean\n}\n\nconst run = ({ text, bold, italic, muted }: Run) => {\n const props = [bold && '<w:b/>', italic && '<w:i/>', muted && '<w:color w:val=\"595959\"/>']\n .filter(Boolean)\n .join('')\n // Line breaks inside a value become Word line breaks rather than being lost.\n const body = text\n .split(/\\r?\\n/)\n .map((line) => `<w:t xml:space=\"preserve\">${esc(line)}</w:t>`)\n .join('<w:br/>')\n return `<w:r>${props ? `<w:rPr>${props}</w:rPr>` : ''}${body}</w:r>`\n}\n\nconst paragraph = (runs: Run[], style?: string) =>\n `<w:p>${style ? `<w:pPr><w:pStyle w:val=\"${style}\"/></w:pPr>` : ''}${runs.map(run).join('')}</w:p>`\n\n/** A table cell: its paragraphs (a cell must hold at least one), shaded when given a fill. */\nconst cell = (paragraphs: string[], width: number, fill?: string) =>\n `<w:tc><w:tcPr><w:tcW w:w=\"${width}\" w:type=\"dxa\"/>${\n fill ? `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${fill}\"/>` : ''\n }</w:tcPr>${paragraphs.length ? paragraphs.join('') : '<w:p/>'}</w:tc>`\n\nconst count = (n: number, one: string, many: string) =>\n n === 1 ? one : many.replace('{count}', String(n))\n\nfunction evidenceParagraphs(row: TagTableRow, l: TagTableDocxLabels): string[] {\n if (isGap(row)) return []\n const links = rowLinks(row)\n const docs = links.docs ?? []\n const facts = links.facts ?? []\n const threads = links.threads ?? []\n const more =\n links.doc_count -\n docs.length +\n (links.fact_count - facts.length) +\n (links.thread_count - threads.length)\n return [\n paragraph(\n [\n {\n text: [\n links.doc_count ? count(links.doc_count, l.document, l.documents) : null,\n links.fact_count ? count(links.fact_count, l.fact, l.facts) : null,\n links.thread_count ? count(links.thread_count, l.thread, l.threads) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n muted: true,\n },\n ],\n 'TagTableCell'\n ),\n ...docs.map((d) =>\n paragraph(\n [{ text: d.file_name, bold: true }, ...(d.note ? [{ text: ` — ${d.note}` }] : [])],\n 'TagTableCell'\n )\n ),\n ...facts.map((f) => paragraph([{ text: `“${f.text}”`, italic: true }], 'TagTableCell')),\n ...threads.map((t) => paragraph([{ text: t.title || l.untitledThread }], 'TagTableCell')),\n ...(more > 0\n ? [\n paragraph(\n [{ text: l.more.replace('{count}', String(more)), muted: true }],\n 'TagTableCell'\n ),\n ]\n : []),\n ]\n}\n\nfunction gapParagraphs(\n row: TagTableRow,\n columns: TagTableField[],\n l: TagTableDocxLabels\n): string[] {\n const missing = columns\n .filter((c) => c.type !== 'checkbox' && cellText(cellValue(row, c), c) === '')\n .map((c) => c.name)\n return [\n ...(isGap(row) ? [paragraph([{ text: l.noEvidence, bold: true }], 'TagTableCell')] : []),\n ...(missing.length\n ? [paragraph([{ text: l.missing.replace('{fields}', missing.join(', ')) }], 'TagTableCell')]\n : []),\n ]\n}\n\n/** Page geometry in twips (A4), turned for landscape. */\nfunction page(landscape: boolean) {\n const [short, long] = [11906, 16838]\n const margin = landscape ? 1080 : 1440\n const width = landscape ? long : short\n return {\n margin,\n textWidth: width - 2 * margin,\n sectPr: `<w:sectPr><w:pgSz w:w=\"${landscape ? long : short}\" w:h=\"${landscape ? short : long}\"${\n landscape ? ' w:orient=\"landscape\"' : ''\n }/><w:pgMar w:top=\"${margin}\" w:right=\"${margin}\" w:bottom=\"${margin}\" w:left=\"${margin}\" w:header=\"708\" w:footer=\"708\" w:gutter=\"0\"/></w:sectPr>`,\n }\n}\n\n/** `word/document.xml` for the table (exposed for tests and for hosts that assemble their own package). */\nexport function tagTableDocumentXml(table: TagTableData, options: TagTableDocxOptions): string {\n const l = { ...DEFAULT_TAG_TABLE_DOCX_LABELS, ...options.labels }\n const { columns, rows } = table\n const heads = [l.row, ...columns.map((c) => c.name), l.evidence, l.gaps]\n const landscape = heads.length > TAG_TABLE_DOCX_LANDSCAPE_AFTER\n const { textWidth, sectPr } = page(landscape)\n // Relative widths: the item and evidence get room to read, each field and the gaps a share.\n const weights = [2, ...columns.map(() => 1), 3, 1.5]\n const total = weights.reduce((a, b) => a + b, 0)\n const widths = weights.map((w) => Math.floor((textWidth * w) / total))\n const at = new Date(options.at ?? Date.now()).toISOString().slice(0, 16).replace('T', ' ')\n\n const header = `<w:tr><w:trPr><w:tblHeader/><w:cantSplit/></w:trPr>${heads\n .map((h, i) =>\n cell([paragraph([{ text: h, bold: true }], 'TagTableCell')], widths[i], 'E7E6E6')\n )\n .join('')}</w:tr>`\n const body = rows.map((row) => {\n const fill = isGap(row) ? 'FFF2CC' : undefined\n const cells = [\n cell([paragraph([{ text: row.name, bold: true }], 'TagTableCell')], widths[0], fill),\n ...columns.map((c, i) => {\n const text = cellText(cellValue(row, c), c, options.nameOf)\n return cell(text ? [paragraph([{ text }], 'TagTableCell')] : [], widths[i + 1], fill)\n }),\n cell(evidenceParagraphs(row, l), widths[columns.length + 1], fill),\n cell(gapParagraphs(row, columns, l), widths[columns.length + 2], fill),\n ]\n return `<w:tr><w:trPr><w:cantSplit/></w:trPr>${cells.join('')}</w:tr>`\n })\n\n const grid = `<w:tbl><w:tblPr><w:tblStyle w:val=\"TagTableGrid\"/><w:tblW w:w=\"${textWidth}\" w:type=\"dxa\"/><w:tblLayout w:type=\"fixed\"/><w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:firstColumn=\"1\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/></w:tblPr><w:tblGrid>${widths\n .map((w) => `<w:gridCol w:w=\"${w}\"/>`)\n .join('')}</w:tblGrid>${header}${body.join('')}</w:tbl>`\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:document xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"><w:body>${paragraph(\n [{ text: options.title }],\n 'Title'\n )}${paragraph([{ text: l.takenAt.replace('{at}', `${at} UTC`), muted: true }])}${grid}${\n rows.length ? '' : paragraph([{ text: l.empty, muted: true }])\n }<w:p/>${sectPr}</w:body></w:document>`\n}\n\nconst STYLES = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:styles xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:ascii=\"Calibri\" w:hAnsi=\"Calibri\" w:eastAsia=\"Calibri\" w:cs=\"Calibri\"/><w:sz w:val=\"22\"/><w:szCs w:val=\"22\"/><w:lang w:val=\"en-GB\"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after=\"160\" w:line=\"259\" w:lineRule=\"auto\"/></w:pPr></w:pPrDefault></w:docDefaults><w:style w:type=\"paragraph\" w:default=\"1\" w:styleId=\"Normal\"><w:name w:val=\"Normal\"/><w:qFormat/></w:style><w:style w:type=\"paragraph\" w:styleId=\"Title\"><w:name w:val=\"Title\"/><w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:qFormat/><w:pPr><w:spacing w:after=\"80\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:rPr><w:sz w:val=\"48\"/><w:szCs w:val=\"48\"/></w:rPr></w:style><w:style w:type=\"paragraph\" w:customStyle=\"1\" w:styleId=\"TagTableCell\"><w:name w:val=\"Tag Table Cell\"/><w:basedOn w:val=\"Normal\"/><w:qFormat/><w:pPr><w:spacing w:after=\"40\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:rPr><w:sz w:val=\"18\"/><w:szCs w:val=\"18\"/></w:rPr></w:style><w:style w:type=\"table\" w:default=\"1\" w:styleId=\"TableNormal\"><w:name w:val=\"Normal Table\"/><w:tblPr><w:tblInd w:w=\"0\" w:type=\"dxa\"/><w:tblCellMar><w:top w:w=\"0\" w:type=\"dxa\"/><w:left w:w=\"108\" w:type=\"dxa\"/><w:bottom w:w=\"0\" w:type=\"dxa\"/><w:right w:w=\"108\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr></w:style><w:style w:type=\"table\" w:customStyle=\"1\" w:styleId=\"TagTableGrid\"><w:name w:val=\"Tag Table\"/><w:basedOn w:val=\"TableNormal\"/><w:tblPr><w:tblBorders><w:top w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:left w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:bottom w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:right w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:insideH w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:insideV w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/></w:tblBorders><w:tblCellMar><w:top w:w=\"60\" w:type=\"dxa\"/><w:left w:w=\"100\" w:type=\"dxa\"/><w:bottom w:w=\"60\" w:type=\"dxa\"/><w:right w:w=\"100\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr></w:style></w:styles>`\n\nconst CONTENT_TYPES = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Override PartName=\"/word/document.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/><Override PartName=\"/word/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\"/><Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/></Types>`\n\nconst ROOT_RELS = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"word/document.xml\"/><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/></Relationships>`\n\nconst DOCUMENT_RELS = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/></Relationships>`\n\nconst coreXml = (\n title: string,\n at: string\n) => `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><dc:title>${esc(\n title\n)}</dc:title><dcterms:created xsi:type=\"dcterms:W3CDTF\">${at}</dcterms:created><dcterms:modified xsi:type=\"dcterms:W3CDTF\">${at}</dcterms:modified></cp:coreProperties>`\n\n/** The table as `.docx` bytes. */\nexport function tagTableDocx(table: TagTableData, options: TagTableDocxOptions): Uint8Array {\n const at = new Date(options.at ?? Date.now()).toISOString().replace(/\\.\\d{3}Z$/, 'Z')\n return zipSync({\n '[Content_Types].xml': strToU8(CONTENT_TYPES),\n '_rels/.rels': strToU8(ROOT_RELS),\n 'docProps/core.xml': strToU8(coreXml(options.title, at)),\n 'word/document.xml': strToU8(tagTableDocumentXml(table, { ...options, at })),\n 'word/styles.xml': strToU8(STYLES),\n 'word/_rels/document.xml.rels': strToU8(DOCUMENT_RELS),\n })\n}\n"]}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkS5HZBXZA_cjs = require('./chunk-S5HZBXZA.cjs');
|
|
5
5
|
var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
|
|
6
|
-
var
|
|
6
|
+
var chunkRZUMQM7W_cjs = require('./chunk-RZUMQM7W.cjs');
|
|
7
|
+
var chunkAFSOUS5X_cjs = require('./chunk-AFSOUS5X.cjs');
|
|
7
8
|
var chunk7RGLTF76_cjs = require('./chunk-7RGLTF76.cjs');
|
|
8
9
|
var chunk3AFWGEDJ_cjs = require('./chunk-3AFWGEDJ.cjs');
|
|
9
10
|
var chunkVFUWWH52_cjs = require('./chunk-VFUWWH52.cjs');
|
|
10
11
|
var chunkV4ISCZJ7_cjs = require('./chunk-V4ISCZJ7.cjs');
|
|
11
12
|
var chunk2EI7NCUA_cjs = require('./chunk-2EI7NCUA.cjs');
|
|
12
|
-
var chunkIXALYQT7_cjs = require('./chunk-IXALYQT7.cjs');
|
|
13
13
|
var chunkZ5VUZ6YD_cjs = require('./chunk-Z5VUZ6YD.cjs');
|
|
14
14
|
var chunk7D737FLE_cjs = require('./chunk-7D737FLE.cjs');
|
|
15
15
|
var chunkOB5F4577_cjs = require('./chunk-OB5F4577.cjs');
|
|
16
16
|
var chunkB4SRYJLM_cjs = require('./chunk-B4SRYJLM.cjs');
|
|
17
17
|
var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
|
|
18
|
-
var chunkFX3K6LNZ_cjs = require('./chunk-FX3K6LNZ.cjs');
|
|
19
18
|
var chunkC54XEN5T_cjs = require('./chunk-C54XEN5T.cjs');
|
|
20
19
|
var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
|
|
21
20
|
var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
|
|
21
|
+
var chunkIXALYQT7_cjs = require('./chunk-IXALYQT7.cjs');
|
|
22
|
+
var chunkFX3K6LNZ_cjs = require('./chunk-FX3K6LNZ.cjs');
|
|
22
23
|
var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
|
|
23
24
|
var react = require('react');
|
|
24
25
|
var ui = require('@arbidocs/react/ui');
|
|
@@ -145,7 +146,7 @@ function WorkflowConfigDialog({
|
|
|
145
146
|
}) {
|
|
146
147
|
const l = { ...DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, ...labels };
|
|
147
148
|
const initialKey = JSON.stringify(initialInputs ?? {});
|
|
148
|
-
const seedKey = JSON.stringify({ ...
|
|
149
|
+
const seedKey = JSON.stringify({ ...chunkRZUMQM7W_cjs.defaultInputs(workflow), ...JSON.parse(initialKey) });
|
|
149
150
|
const seed = react.useMemo(() => JSON.parse(seedKey), [seedKey]);
|
|
150
151
|
const [inputs, setInputs] = useControllableState(inputsProp, seed, onInputsChange);
|
|
151
152
|
const [agentId, setAgentId] = useControllableState(
|
|
@@ -157,7 +158,7 @@ function WorkflowConfigDialog({
|
|
|
157
158
|
if (open && inputsProp === void 0) setInputs(seed);
|
|
158
159
|
}, [open, seed]);
|
|
159
160
|
const setField = (name, value) => setInputs({ ...inputs, [name]: value });
|
|
160
|
-
const errors =
|
|
161
|
+
const errors = chunkRZUMQM7W_cjs.validateInputs(workflow, inputs);
|
|
161
162
|
const valid = Object.keys(errors).length === 0;
|
|
162
163
|
const visibleErrors = Object.fromEntries(
|
|
163
164
|
Object.entries(errors).filter(([, e]) => e !== "required")
|
|
@@ -170,7 +171,7 @@ function WorkflowConfigDialog({
|
|
|
170
171
|
const blockedByScope = matchedCount !== null && matchedCount === 0 && Boolean(workflow.requiresFiles);
|
|
171
172
|
const showAgent = workflow.run.kind === "prompt" && workflow.options?.agent !== false && agents !== void 0 && agents.length > 0;
|
|
172
173
|
const launch = (values) => {
|
|
173
|
-
Promise.resolve(onLaunch(
|
|
174
|
+
Promise.resolve(onLaunch(chunkRZUMQM7W_cjs.buildLaunch(workflow, values, agentId))).catch(() => {
|
|
174
175
|
});
|
|
175
176
|
};
|
|
176
177
|
const submit = () => {
|
|
@@ -248,7 +249,7 @@ function WorkflowConfigDialog({
|
|
|
248
249
|
}
|
|
249
250
|
) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
250
251
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
251
|
-
|
|
252
|
+
chunkRZUMQM7W_cjs.SchemaForm,
|
|
252
253
|
{
|
|
253
254
|
fields,
|
|
254
255
|
values: inputs,
|
|
@@ -326,7 +327,7 @@ function resolveScopeInputs(workflow, inputs, scopeSource) {
|
|
|
326
327
|
for (const field of workflow.inputs) {
|
|
327
328
|
if (field.type !== "scope") continue;
|
|
328
329
|
const raw = inputs[field.name];
|
|
329
|
-
const scope =
|
|
330
|
+
const scope = chunkRZUMQM7W_cjs.isWorkflowScope(raw) ? raw : { folders: [], labels: [] };
|
|
330
331
|
next[field.name] = { ...scope, documents: scopeSource.resolveDocuments(scope) };
|
|
331
332
|
}
|
|
332
333
|
return next;
|
|
@@ -368,9 +369,9 @@ function WorkflowLauncher({
|
|
|
368
369
|
};
|
|
369
370
|
const select = (workflow) => {
|
|
370
371
|
if (workflow.run.kind === "operation" && workflow.inputs.length === 0) {
|
|
371
|
-
const inputs =
|
|
372
|
-
if (Object.keys(
|
|
373
|
-
Promise.resolve(onLaunch(
|
|
372
|
+
const inputs = chunkRZUMQM7W_cjs.defaultInputs(workflow);
|
|
373
|
+
if (Object.keys(chunkRZUMQM7W_cjs.validateInputs(workflow, inputs)).length === 0) {
|
|
374
|
+
Promise.resolve(onLaunch(chunkRZUMQM7W_cjs.buildLaunch(workflow, inputs, void 0))).catch(() => {
|
|
374
375
|
});
|
|
375
376
|
return;
|
|
376
377
|
}
|
|
@@ -474,7 +475,7 @@ function WorkflowDocumentsField({
|
|
|
474
475
|
const set = (documents2) => onChange({ ...value, documents: documents2 });
|
|
475
476
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": `workflow-documents-${field.name}`, className: "space-y-2", children: [
|
|
476
477
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
477
|
-
|
|
478
|
+
chunkS5HZBXZA_cjs.DocumentPicker,
|
|
478
479
|
{
|
|
479
480
|
groups: [{ id: "workspace", docs: documents }],
|
|
480
481
|
value: ids[0] ?? "",
|
|
@@ -520,7 +521,7 @@ function workflowToSkillMarkdown(workflow) {
|
|
|
520
521
|
if (workflow.landing !== "chat") lines.push(`landing: ${workflow.landing}`);
|
|
521
522
|
if (workflow.requiresFiles) lines.push("requires_files: true");
|
|
522
523
|
if (workflow.inputs.length > 0) {
|
|
523
|
-
lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(
|
|
524
|
+
lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(chunkRZUMQM7W_cjs.fieldToFrontmatter))}`);
|
|
524
525
|
}
|
|
525
526
|
lines.push("---", "", run.promptTemplate.trim(), "");
|
|
526
527
|
return lines.join("\n");
|
|
@@ -542,11 +543,11 @@ function workflowFromSkillMarkdown(id, text2) {
|
|
|
542
543
|
} else if (value === "true" || value === "false") frontmatter[key] = value === "true";
|
|
543
544
|
else frontmatter[key] = value;
|
|
544
545
|
}
|
|
545
|
-
return
|
|
546
|
+
return chunkRZUMQM7W_cjs.workflowFromFrontmatter(id, frontmatter, body);
|
|
546
547
|
}
|
|
547
548
|
function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, resolveWorkflow, compose } = {}) {
|
|
548
|
-
const steps =
|
|
549
|
-
const [inputs, setInputs] = react.useState(() =>
|
|
549
|
+
const steps = chunkRZUMQM7W_cjs.workflowSteps(workflow);
|
|
550
|
+
const [inputs, setInputs] = react.useState(() => chunkRZUMQM7W_cjs.initialRunInputs(workflow));
|
|
550
551
|
const [states, setStates] = react.useState({});
|
|
551
552
|
const set = (id, state) => setStates((s) => ({ ...s, [id]: state }));
|
|
552
553
|
const timers = react.useRef(/* @__PURE__ */ new Map());
|
|
@@ -568,10 +569,10 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
|
|
|
568
569
|
react.useEffect(() => {
|
|
569
570
|
if (Object.values(states).some((s) => s.status === "running")) return;
|
|
570
571
|
const next = steps.find(
|
|
571
|
-
(s) => (s.kind === "agent" || s.kind === "action") &&
|
|
572
|
+
(s) => (s.kind === "agent" || s.kind === "action") && chunkRZUMQM7W_cjs.stepPhase(steps, states, s.id) === "ready"
|
|
572
573
|
);
|
|
573
574
|
if (!next || next.kind !== "agent" && next.kind !== "action") return;
|
|
574
|
-
const prompt = next.kind === "agent" ?
|
|
575
|
+
const prompt = next.kind === "agent" ? chunkRZUMQM7W_cjs.composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose }) : "";
|
|
575
576
|
set(next.id, { status: "running", startedAt: (/* @__PURE__ */ new Date()).toISOString() });
|
|
576
577
|
timers.current.set(
|
|
577
578
|
next.id,
|
|
@@ -584,7 +585,7 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
|
|
|
584
585
|
}, delayMs)
|
|
585
586
|
);
|
|
586
587
|
}, [states, steps, workflow]);
|
|
587
|
-
return
|
|
588
|
+
return chunkRZUMQM7W_cjs.useWorkflowView({
|
|
588
589
|
steps,
|
|
589
590
|
states,
|
|
590
591
|
inputs,
|
|
@@ -4199,7 +4200,7 @@ function TaskInbox(p) {
|
|
|
4199
4200
|
fieldsButton: "tasks-filter-fields"
|
|
4200
4201
|
},
|
|
4201
4202
|
filter: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4202
|
-
|
|
4203
|
+
chunkAFSOUS5X_cjs.TriStateFilterMenu,
|
|
4203
4204
|
{
|
|
4204
4205
|
testId: "tasks-status-filter",
|
|
4205
4206
|
open: filterOpen,
|
|
@@ -4997,7 +4998,7 @@ function workflowTaskFields(workflow, inputs, name, context) {
|
|
|
4997
4998
|
}
|
|
4998
4999
|
const typed = name?.trim();
|
|
4999
5000
|
if (workflow.options?.agent === false) {
|
|
5000
|
-
const message =
|
|
5001
|
+
const message = chunkRZUMQM7W_cjs.composeWorkflowPrompt(workflow, inputs, context);
|
|
5001
5002
|
return { name: typed || message, prompt: "", skill_ref: null, skill_inputs: null };
|
|
5002
5003
|
}
|
|
5003
5004
|
const derived = typed || deriveWorkflowName(workflow, inputs);
|
|
@@ -5011,7 +5012,7 @@ function workflowTaskFields(workflow, inputs, name, context) {
|
|
|
5011
5012
|
}
|
|
5012
5013
|
return {
|
|
5013
5014
|
name: derived,
|
|
5014
|
-
prompt:
|
|
5015
|
+
prompt: chunkRZUMQM7W_cjs.composeWorkflowPrompt(workflow, inputs, context),
|
|
5015
5016
|
skill_ref: null,
|
|
5016
5017
|
// The files a run is bound to travel in the saved inputs, whatever the template: the server binds
|
|
5017
5018
|
// the run to the ids listed under any input's `documents`.
|
|
@@ -6069,7 +6070,7 @@ function WorkflowsTable(props) {
|
|
|
6069
6070
|
ariaLabel: l.searchLabel,
|
|
6070
6071
|
testIds: { input: "workflow-search" },
|
|
6071
6072
|
filter: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6072
|
-
|
|
6073
|
+
chunkAFSOUS5X_cjs.TriStateFilterMenu,
|
|
6073
6074
|
{
|
|
6074
6075
|
testId: "automations-filter-button",
|
|
6075
6076
|
open: filterOpen,
|
|
@@ -6270,15 +6271,15 @@ function TaskActivityTimeline({
|
|
|
6270
6271
|
case "step_skipped":
|
|
6271
6272
|
return { headline: "Step skipped" };
|
|
6272
6273
|
case "step_waiting": {
|
|
6273
|
-
const documents =
|
|
6274
|
+
const documents = chunkRZUMQM7W_cjs.eventWaitingDocuments(detail);
|
|
6274
6275
|
return {
|
|
6275
|
-
headline: documents ?
|
|
6276
|
+
headline: documents ? chunkRZUMQM7W_cjs.waitingForDocumentsText(documents.length) : "Waiting on people"
|
|
6276
6277
|
};
|
|
6277
6278
|
}
|
|
6278
6279
|
case "step_progress": {
|
|
6279
|
-
const documents =
|
|
6280
|
+
const documents = chunkRZUMQM7W_cjs.eventWaitingDocuments(detail);
|
|
6280
6281
|
return {
|
|
6281
|
-
headline: documents ?
|
|
6282
|
+
headline: documents ? chunkRZUMQM7W_cjs.waitingForDocumentsText(documents.length) : detail.signed ? "Signed" : "Step moved on"
|
|
6282
6283
|
};
|
|
6283
6284
|
}
|
|
6284
6285
|
case "step_sent_back":
|
|
@@ -6517,7 +6518,7 @@ function groupThreadActivity(steps, items) {
|
|
|
6517
6518
|
continue;
|
|
6518
6519
|
}
|
|
6519
6520
|
if (current === void 0) out.before.push(item);
|
|
6520
|
-
else if (
|
|
6521
|
+
else if (chunkRZUMQM7W_cjs.isRunFinished(steps, states)) out.after.push(item);
|
|
6521
6522
|
else {
|
|
6522
6523
|
const status = states[current]?.status;
|
|
6523
6524
|
const at = status === "done" || status === "skipped" ? steps.find((s) => !["done", "skipped"].includes(states[s.id]?.status ?? ""))?.id ?? current : current;
|
|
@@ -6635,13 +6636,13 @@ function WorkflowThreadStrip({
|
|
|
6635
6636
|
const chevron = /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-3 shrink-0 text-muted-foreground" });
|
|
6636
6637
|
const [selected, setSelected] = react.useState(null);
|
|
6637
6638
|
const [open, setOpen] = react.useState(null);
|
|
6638
|
-
const phaseOf = (id) =>
|
|
6639
|
+
const phaseOf = (id) => chunkRZUMQM7W_cjs.stepPhase(steps, states, id);
|
|
6639
6640
|
const iconOf = (step) => step.icon && renderIcon ? renderIcon(step.icon) : void 0;
|
|
6640
6641
|
const waitingOf = (id) => {
|
|
6641
6642
|
const step = steps.find((s) => s.id === id);
|
|
6642
6643
|
const phase = phaseOf(id);
|
|
6643
|
-
const documents =
|
|
6644
|
-
if (documents.length) return
|
|
6644
|
+
const documents = chunkRZUMQM7W_cjs.waitingDocuments(states[id]);
|
|
6645
|
+
if (documents.length) return chunkRZUMQM7W_cjs.waitingForDocumentsText(documents.length);
|
|
6645
6646
|
const name = step && (phase === "ready" || phase === "waiting") ? assigneeOf?.(step) : void 0;
|
|
6646
6647
|
return name ? l.waitingFor.replace("{name}", name) : void 0;
|
|
6647
6648
|
};
|
|
@@ -6656,14 +6657,14 @@ function WorkflowThreadStrip({
|
|
|
6656
6657
|
"button",
|
|
6657
6658
|
{
|
|
6658
6659
|
type: "button",
|
|
6659
|
-
className: ui.cn(
|
|
6660
|
+
className: ui.cn(chunkRZUMQM7W_cjs.STEP_PILL, "py-0.5", chunkRZUMQM7W_cjs.stepPillTone(phase, isCurrent)),
|
|
6660
6661
|
"aria-current": isCurrent ? "step" : void 0,
|
|
6661
6662
|
title: waiting ? `${step.title} \xB7 ${waiting}` : step.title,
|
|
6662
6663
|
"data-phase": phase,
|
|
6663
6664
|
"data-testid": `workflow-thread-step-${step.id}`,
|
|
6664
6665
|
children: [
|
|
6665
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6666
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: isCurrent ?
|
|
6666
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkRZUMQM7W_cjs.PhaseMark, { phase, icon: iconOf(step) }),
|
|
6667
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: isCurrent ? chunkRZUMQM7W_cjs.STEP_LABEL_CURRENT : ui.cn(chunkRZUMQM7W_cjs.STEP_LABEL, chunkRZUMQM7W_cjs.STEP_LABEL_MAX), children: step.title }),
|
|
6667
6668
|
sentBack && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6668
6669
|
lucideReact.CornerUpLeft,
|
|
6669
6670
|
{
|
|
@@ -6675,7 +6676,7 @@ function WorkflowThreadStrip({
|
|
|
6675
6676
|
assignee && isCurrent && !narrow && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6676
6677
|
"span",
|
|
6677
6678
|
{
|
|
6678
|
-
className: ui.cn(
|
|
6679
|
+
className: ui.cn(chunkRZUMQM7W_cjs.STEP_EXTRA, "flex max-w-[12rem] items-center gap-0.5"),
|
|
6679
6680
|
title: waiting,
|
|
6680
6681
|
"data-testid": `workflow-thread-step-${step.id}-assignee`,
|
|
6681
6682
|
children: [
|
|
@@ -6734,9 +6735,9 @@ function WorkflowThreadStrip({
|
|
|
6734
6735
|
strays.map((s) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: "flex shrink-0 items-center gap-1", children: /* @__PURE__ */ jsxRuntime.jsx(SignalPill, { signal: s, l }) }, `${s.step}-${s.signal}`))
|
|
6735
6736
|
] }) : null;
|
|
6736
6737
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("min-w-0 flex-1", className), "data-testid": "workflow-thread-strip", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6737
|
-
|
|
6738
|
+
chunkRZUMQM7W_cjs.StepBarFrame,
|
|
6738
6739
|
{
|
|
6739
|
-
levels:
|
|
6740
|
+
levels: chunkRZUMQM7W_cjs.stepLevels(steps),
|
|
6740
6741
|
phaseOf,
|
|
6741
6742
|
current: selected,
|
|
6742
6743
|
onSelect: (id) => {
|
|
@@ -6821,10 +6822,10 @@ function compactThreadActivity(events) {
|
|
|
6821
6822
|
const count = Math.max(1, entry.recipients.length);
|
|
6822
6823
|
entry.label = `Notified ${count} ${count === 1 ? "user" : "users"}`;
|
|
6823
6824
|
} else if (STEP_LABELS[event.kind]) {
|
|
6824
|
-
const documents =
|
|
6825
|
+
const documents = chunkRZUMQM7W_cjs.eventWaitingDocuments(event.detail);
|
|
6825
6826
|
result.push({
|
|
6826
6827
|
event,
|
|
6827
|
-
label: documents ?
|
|
6828
|
+
label: documents ? chunkRZUMQM7W_cjs.waitingForDocumentsText(documents.length) : STEP_LABELS[event.kind],
|
|
6828
6829
|
recipients: []
|
|
6829
6830
|
});
|
|
6830
6831
|
} else if (["artifact_created", "artifact_edited", "document_added", "document_removed"].includes(
|
|
@@ -7223,7 +7224,7 @@ function defaultTaskComposerValues(workflows, initial) {
|
|
|
7223
7224
|
return {
|
|
7224
7225
|
assignee: "me",
|
|
7225
7226
|
workflowId,
|
|
7226
|
-
inputs: workflow ? { ...
|
|
7227
|
+
inputs: workflow ? { ...chunkRZUMQM7W_cjs.defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },
|
|
7227
7228
|
when: "manual",
|
|
7228
7229
|
runAt: "",
|
|
7229
7230
|
rrule: "",
|
|
@@ -7332,7 +7333,7 @@ function WorkflowComposer({
|
|
|
7332
7333
|
return !docs?.length;
|
|
7333
7334
|
})
|
|
7334
7335
|
);
|
|
7335
|
-
const whatMissing = !workflow || Object.keys(
|
|
7336
|
+
const whatMissing = !workflow || Object.keys(chunkRZUMQM7W_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0;
|
|
7336
7337
|
const runAtPast = values.when === "once" && values.runAt !== "" && values.runAt !== initialValues?.runAt && new Date(values.runAt).getTime() <= Date.now();
|
|
7337
7338
|
const whenMissing = missingWhen(values, runAtPast);
|
|
7338
7339
|
const scheduled = values.when !== "now" && values.when !== "manual";
|
|
@@ -7344,7 +7345,7 @@ function WorkflowComposer({
|
|
|
7344
7345
|
setValues({
|
|
7345
7346
|
...values,
|
|
7346
7347
|
workflowId: next,
|
|
7347
|
-
inputs: def ?
|
|
7348
|
+
inputs: def ? chunkRZUMQM7W_cjs.defaultInputs(def) : {},
|
|
7348
7349
|
...def?.documentAction ? { access: "standing" } : {}
|
|
7349
7350
|
});
|
|
7350
7351
|
};
|
|
@@ -7482,7 +7483,7 @@ function WorkflowComposer({
|
|
|
7482
7483
|
}
|
|
7483
7484
|
),
|
|
7484
7485
|
!noFiles && workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7485
|
-
|
|
7486
|
+
chunkRZUMQM7W_cjs.SchemaForm,
|
|
7486
7487
|
{
|
|
7487
7488
|
fields,
|
|
7488
7489
|
values: values.inputs,
|
|
@@ -7921,7 +7922,7 @@ function WorkTaskComposer({
|
|
|
7921
7922
|
}, [open]);
|
|
7922
7923
|
const workflow = workflows.find((w) => w.id === values.workflowId);
|
|
7923
7924
|
const fields = workflow?.inputs ?? [];
|
|
7924
|
-
const errors = workflow ?
|
|
7925
|
+
const errors = workflow ? chunkRZUMQM7W_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs) : {};
|
|
7925
7926
|
const hasWork = configOpen && Boolean(workflow) && Object.keys(errors).length === 0;
|
|
7926
7927
|
const unattended = hasWork && values.when !== "now" && values.when !== "manual";
|
|
7927
7928
|
const canConfigure = !isEdit || seed.assignee === "agent";
|
|
@@ -7929,7 +7930,7 @@ function WorkTaskComposer({
|
|
|
7929
7930
|
const set = (key, value) => setValues({ ...values, [key]: value });
|
|
7930
7931
|
const pickWorkflow = (id2) => {
|
|
7931
7932
|
const next = workflows.find((w) => w.id === id2);
|
|
7932
|
-
setValues({ ...values, workflowId: id2, inputs: next ?
|
|
7933
|
+
setValues({ ...values, workflowId: id2, inputs: next ? chunkRZUMQM7W_cjs.defaultInputs(next) : {} });
|
|
7933
7934
|
};
|
|
7934
7935
|
const openConfigure = () => {
|
|
7935
7936
|
setConfigOpen(true);
|
|
@@ -8115,7 +8116,7 @@ function WorkTaskComposer({
|
|
|
8115
8116
|
)
|
|
8116
8117
|
] }),
|
|
8117
8118
|
workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8118
|
-
|
|
8119
|
+
chunkRZUMQM7W_cjs.SchemaForm,
|
|
8119
8120
|
{
|
|
8120
8121
|
fields,
|
|
8121
8122
|
values: values.inputs,
|
|
@@ -10058,7 +10059,7 @@ function AgentCreateView({
|
|
|
10058
10059
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-normal text-muted-foreground", children: l.optional })
|
|
10059
10060
|
] }),
|
|
10060
10061
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10061
|
-
|
|
10062
|
+
chunkS5HZBXZA_cjs.MultiSelect,
|
|
10062
10063
|
{
|
|
10063
10064
|
data: workspaces.map((ws) => ({ label: ws.name, value: ws.id })),
|
|
10064
10065
|
value: selectedWorkspaces,
|
|
@@ -10298,5 +10299,5 @@ exports.workflowToComposerValues = workflowToComposerValues;
|
|
|
10298
10299
|
exports.workflowToSkillMarkdown = workflowToSkillMarkdown;
|
|
10299
10300
|
exports.workflowTriggerType = workflowTriggerType;
|
|
10300
10301
|
exports.workflowWhen = workflowWhen;
|
|
10301
|
-
//# sourceMappingURL=chunk-
|
|
10302
|
-
//# sourceMappingURL=chunk-
|
|
10302
|
+
//# sourceMappingURL=chunk-Z7YUCYI6.cjs.map
|
|
10303
|
+
//# sourceMappingURL=chunk-Z7YUCYI6.cjs.map
|