@arbidocs/blocks 0.4.74 → 0.4.76

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 (84) hide show
  1. package/README.md +2 -1
  2. package/dist/agents/index.cjs +267 -254
  3. package/dist/agents/index.js +5 -4
  4. package/dist/agents/tasks/TaskActivityTimeline.d.ts +1 -1
  5. package/dist/agents/tasks/WorkflowThreadStrip.d.ts +38 -1
  6. package/dist/agents/tasks/index.d.ts +2 -1
  7. package/dist/agents/tasks/linkedRuns.d.ts +31 -0
  8. package/dist/agents/workflows/index.d.ts +1 -1
  9. package/dist/agents/workflows/planSteps.d.ts +3 -1
  10. package/dist/agents/workflows/types.d.ts +27 -0
  11. package/dist/{chunk-YWYVIQ7T.js → chunk-22P5KNIM.js} +24 -4
  12. package/dist/chunk-22P5KNIM.js.map +1 -0
  13. package/dist/{chunk-5LP54CWR.cjs → chunk-7FKARMA3.cjs} +175 -69
  14. package/dist/chunk-7FKARMA3.cjs.map +1 -0
  15. package/dist/{chunk-IA7RTPT3.cjs → chunk-IXALYQT7.cjs} +2 -200
  16. package/dist/chunk-IXALYQT7.cjs.map +1 -0
  17. package/dist/chunk-NUNKSZKU.js +203 -0
  18. package/dist/chunk-NUNKSZKU.js.map +1 -0
  19. package/dist/{chunk-6OL5S7MJ.cjs → chunk-NYBIKDWI.cjs} +5 -2
  20. package/dist/chunk-NYBIKDWI.cjs.map +1 -0
  21. package/dist/{chunk-D46ZAPEE.js → chunk-R3PDNQYT.js} +5 -2
  22. package/dist/chunk-R3PDNQYT.js.map +1 -0
  23. package/dist/{chunk-KOSGX3UK.js → chunk-TKB7TVMW.js} +134 -30
  24. package/dist/chunk-TKB7TVMW.js.map +1 -0
  25. package/dist/chunk-V4ISCZJ7.cjs +207 -0
  26. package/dist/chunk-V4ISCZJ7.cjs.map +1 -0
  27. package/dist/{chunk-P2RBE3FD.cjs → chunk-VYRKO3XU.cjs} +24 -3
  28. package/dist/chunk-VYRKO3XU.cjs.map +1 -0
  29. package/dist/{chunk-BUHKUKKB.js → chunk-ZPLG7QYF.js} +4 -199
  30. package/dist/chunk-ZPLG7QYF.js.map +1 -0
  31. package/dist/connect/index.cjs +9 -9
  32. package/dist/connect/index.js +2 -2
  33. package/dist/databases/DatabaseColumnDialog.d.ts +43 -0
  34. package/dist/databases/DatabaseList.d.ts +28 -0
  35. package/dist/databases/DatabaseTable.d.ts +38 -0
  36. package/dist/databases/DatabaseToolbar.d.ts +38 -0
  37. package/dist/databases/NewDatabaseDialog.d.ts +25 -0
  38. package/dist/databases/SelectCellEditor.d.ts +6 -0
  39. package/dist/databases/SelectChip.d.ts +4 -0
  40. package/dist/databases/column-types.d.ts +58 -0
  41. package/dist/databases/databaseColumns.d.ts +28 -0
  42. package/dist/databases/index.cjs +1081 -0
  43. package/dist/databases/index.cjs.map +1 -0
  44. package/dist/databases/index.d.ts +13 -0
  45. package/dist/databases/index.js +1055 -0
  46. package/dist/databases/index.js.map +1 -0
  47. package/dist/facts/index.cjs +8 -7
  48. package/dist/facts/index.cjs.map +1 -1
  49. package/dist/facts/index.js +4 -3
  50. package/dist/facts/index.js.map +1 -1
  51. package/dist/files/index.cjs +15 -14
  52. package/dist/files/index.cjs.map +1 -1
  53. package/dist/files/index.js +5 -3
  54. package/dist/files/index.js.map +1 -1
  55. package/dist/home/index.cjs +1 -1
  56. package/dist/home/index.js +1 -1
  57. package/dist/index.cjs +508 -495
  58. package/dist/index.cjs.map +1 -1
  59. package/dist/index.js +9 -8
  60. package/dist/index.js.map +1 -1
  61. package/dist/shell/ActionCluster.d.ts +3 -1
  62. package/dist/shell/index.cjs +46 -46
  63. package/dist/shell/index.js +2 -2
  64. package/dist/studio/index.cjs +1 -1
  65. package/dist/studio/index.js +1 -1
  66. package/dist/workflow-canvas/SignalsEditor.d.ts +41 -0
  67. package/dist/workflow-canvas/StepInspector.d.ts +4 -1
  68. package/dist/workflow-canvas/TriggerInspector.d.ts +11 -2
  69. package/dist/workflow-canvas/WorkflowBuilder.d.ts +7 -2
  70. package/dist/workflow-canvas/index.cjs +445 -150
  71. package/dist/workflow-canvas/index.cjs.map +1 -1
  72. package/dist/workflow-canvas/index.d.ts +2 -1
  73. package/dist/workflow-canvas/index.js +412 -124
  74. package/dist/workflow-canvas/index.js.map +1 -1
  75. package/dist/workflow-canvas/trigger.d.ts +20 -1
  76. package/package.json +9 -4
  77. package/dist/chunk-5LP54CWR.cjs.map +0 -1
  78. package/dist/chunk-6OL5S7MJ.cjs.map +0 -1
  79. package/dist/chunk-BUHKUKKB.js.map +0 -1
  80. package/dist/chunk-D46ZAPEE.js.map +0 -1
  81. package/dist/chunk-IA7RTPT3.cjs.map +0 -1
  82. package/dist/chunk-KOSGX3UK.js.map +0 -1
  83. package/dist/chunk-P2RBE3FD.cjs.map +0 -1
  84. package/dist/chunk-YWYVIQ7T.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/databases/column-types.ts","../../src/databases/SelectChip.tsx","../../src/databases/SelectCellEditor.tsx","../../src/databases/databaseColumns.tsx","../../src/databases/DatabaseTable.tsx","../../src/databases/DatabaseToolbar.tsx","../../src/databases/DatabaseColumnDialog.tsx","../../src/databases/DatabaseList.tsx","../../src/databases/NewDatabaseDialog.tsx"],"names":["jsx","cn","jsxs","Plus","useRef","useEffect","useState","Button","MoreHorizontal","Input","Trash2","SPREADSHEET_ACCEPT","FileSpreadsheet","Eye","Upload","Fragment","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Label","DialogFooter"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Databases: the shapes the blocks read, and the per-type rules for showing and editing a cell.\n *\n * A database is a user-defined table (a client database, billing records). Its columns are typed:\n * `text`, `number`, `date`, `checkbox` or `select`. The server checks and normalises every cell\n * (dates arrive as ISO `YYYY-MM-DD` or a full timestamp, numbers as numbers, a select as one of its\n * options), so the blocks only format for display and turn an editor's value into what the API takes.\n */\n\nexport type DatabaseColumnType = 'text' | 'number' | 'date' | 'checkbox' | 'select'\n\n/** Every type, in the order a type picker lists them. */\nexport const DATABASE_COLUMN_TYPES: DatabaseColumnType[] = [\n 'text',\n 'number',\n 'date',\n 'checkbox',\n 'select',\n]\n\n/** A column as the blocks read it (the API's `DatabaseColumn`). */\nexport interface DatabaseColumnView {\n id: string\n name: string\n type: DatabaseColumnType\n options?: string[] | null\n}\n\n/** A row as the blocks read it: cell values keyed by column id; an empty cell is absent. */\nexport interface DatabaseRowView {\n id: string\n values: Record<string, unknown>\n}\n\n/** A database as a list shows it (the API's `DatabaseRead`). */\nexport interface DatabaseSummaryView {\n id: string\n name: string\n description?: string | null\n columns: DatabaseColumnView[]\n row_count: number\n /** False for a database of another (public) workspace: read here, edited in its own workspace. */\n editable: boolean\n updated_at?: string | null\n}\n\nexport interface DatabaseColumnTypeLabels {\n text: string\n number: string\n date: string\n checkbox: string\n select: string\n}\n\nexport const DEFAULT_DATABASE_COLUMN_TYPE_LABELS: DatabaseColumnTypeLabels = {\n text: 'Text',\n number: 'Number',\n date: 'Date',\n checkbox: 'Checkbox',\n select: 'Select',\n}\n\n/**\n * Chip colours for select options: a stable colour per option text, so a value keeps its colour.\n * Theme tone pairs (tokens.css), so light and dark follow the host.\n */\nconst OPTION_TONES = [\n 'bg-blue-bg text-blue-text',\n 'bg-green-bg text-green-text',\n 'bg-yellow-bg text-yellow-text',\n 'bg-purple-bg text-purple-text',\n 'bg-red-bg text-red-text',\n 'bg-gray-bg text-gray-text',\n]\n\nexport function optionTone(option: string): string {\n let hash = 0\n for (const ch of option.toLowerCase()) hash = (hash * 31 + ch.charCodeAt(0)) >>> 0\n return OPTION_TONES[hash % OPTION_TONES.length]\n}\n\nconst isEmpty = (value: unknown): boolean =>\n value === null || value === undefined || (typeof value === 'string' && value.trim() === '')\n\n/**\n * A stored date for display. A bare `YYYY-MM-DD` is a calendar day: it is shown from its own\n * components, never through a time zone (which would move it a day for viewers west of UTC).\n */\nexport function formatDateValue(value: string, locale?: string): string {\n const day = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value)\n if (day) {\n const [, y, m, d] = day\n return new Date(Date.UTC(+y, +m - 1, +d)).toLocaleDateString(locale, { timeZone: 'UTC' })\n }\n const at = new Date(value)\n return Number.isNaN(at.getTime()) ? value : at.toLocaleString(locale)\n}\n\nexport function formatNumberValue(value: number, locale?: string): string {\n return value.toLocaleString(locale, { maximumFractionDigits: 6 })\n}\n\n/** A cell as text: what a cell shows, what search and copy see. Checkboxes read as Yes/No. */\nexport function formatCell(value: unknown, type: DatabaseColumnType, locale?: string): string {\n if (isEmpty(value)) return ''\n if (type === 'number' && typeof value === 'number') return formatNumberValue(value, locale)\n if (type === 'date' && typeof value === 'string') return formatDateValue(value, locale)\n if (type === 'checkbox') return value ? 'Yes' : 'No'\n return String(value)\n}\n\n/**\n * An editor's value as the API takes it. Empty becomes `null` (which empties the cell); everything\n * else goes as typed and the server checks it, so a bad value comes back as a 422 naming the column.\n */\nexport function toApiValue(value: unknown, type: DatabaseColumnType): unknown {\n if (isEmpty(value)) return null\n if (type === 'checkbox') return Boolean(value)\n if (type === 'date' && value instanceof Date) {\n const pad = (n: number) => String(n).padStart(2, '0')\n return `${value.getFullYear()}-${pad(value.getMonth() + 1)}-${pad(value.getDate())}`\n }\n if (type === 'number' && typeof value === 'string') {\n const n = Number(value.replace(/,/g, ''))\n return Number.isFinite(n) ? n : value\n }\n return value\n}\n\n/** Sort comparator for a column's stored values: empty cells last, then by type. */\nexport function compareCells(a: unknown, b: unknown, type: DatabaseColumnType): number {\n const ea = isEmpty(a)\n const eb = isEmpty(b)\n if (ea || eb) return ea === eb ? 0 : ea ? 1 : -1\n if (type === 'number' || type === 'checkbox') return Number(a) - Number(b)\n return String(a).localeCompare(String(b), undefined, { sensitivity: 'base', numeric: true })\n}\n","import { cn } from '@arbidocs/react/ui'\nimport { optionTone } from './column-types'\n\n/** A select option as a coloured chip (the same colour wherever the option appears). */\nexport function SelectChip({ value }: { value: string }) {\n return (\n <span\n className={cn(\n 'inline-flex max-w-full items-center truncate rounded-md px-2 py-0.5 text-xs font-medium',\n optionTone(value)\n )}\n >\n {value}\n </span>\n )\n}\n","/**\n * SelectCellEditor: the editor of a select column. Opening the cell shows its options straight away,\n * as the chips the cell displays (plus \"Clear\"), the way Notion and Airtable do: one click, or the\n * arrow keys and Enter, picks a value and closes; Escape or clicking away keeps the old one.\n * Used as an AG Grid popup editor (`cellEditorPopup`).\n */\nimport { useEffect, useRef, useState, type KeyboardEvent } from 'react'\nimport type { CustomCellEditorProps } from 'ag-grid-react'\nimport { Check } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { SelectChip } from './SelectChip'\n\nexport interface SelectCellEditorParams {\n options: string[]\n clearLabel?: string\n}\n\nexport function SelectCellEditor(props: CustomCellEditorProps & SelectCellEditorParams) {\n const { value, onValueChange, stopEditing, options, clearLabel = 'Clear' } = props\n const items: Array<string | null> = [...options, null]\n const [active, setActive] = useState(() => Math.max(0, options.indexOf(String(value ?? ''))))\n const list = useRef<HTMLDivElement>(null)\n\n useEffect(() => list.current?.focus(), [])\n\n const pick = (option: string | null) => {\n onValueChange(option)\n // Let the grid take the new value before the editor closes.\n setTimeout(() => stopEditing(), 0)\n }\n\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault()\n e.stopPropagation()\n const step = e.key === 'ArrowDown' ? 1 : -1\n setActive((i) => (i + step + items.length) % items.length)\n } else if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n pick(items[active])\n }\n }\n\n return (\n <div\n ref={list}\n role=\"listbox\"\n tabIndex={-1}\n onKeyDown={onKeyDown}\n data-testid=\"database-select-editor\"\n className=\"flex min-w-44 flex-col gap-0.5 rounded-md border border-border bg-popover p-1 shadow-md outline-none\"\n >\n {items.map((option, i) => (\n <button\n key={option ?? '__clear'}\n type=\"button\"\n role=\"option\"\n aria-selected={option === value}\n onMouseEnter={() => setActive(i)}\n onClick={() => pick(option)}\n data-testid={\n option === null ? 'database-select-clear' : `database-select-option-${option}`\n }\n className={cn(\n 'flex items-center gap-2 rounded px-2 py-1 text-left text-sm',\n i === active && 'bg-muted'\n )}\n >\n {option === null ? (\n <span className=\"text-muted-foreground\">{clearLabel}</span>\n ) : (\n <SelectChip value={option} />\n )}\n {option !== null && option === value && <Check className=\"ml-auto size-3.5\" />}\n </button>\n ))}\n </div>\n )\n}\n","/**\n * Column definitions for a database grid, built from the database's own (user-defined) columns.\n *\n * Each column edits in place with the editor for its type (AG Grid's for text, number, date and\n * checkbox; a chip list for select); a checkbox toggles with one click and a select shows its value\n * as a coloured chip. The\n * header carries the type's icon and a button that opens the column's settings, and a trailing\n * narrow column holds the \"add a column\" button: a Notion/Airtable-style table.\n *\n * Every column's `colId` is the database column id (`col-…`), so AG Grid's saved column state\n * (order, width) survives renames.\n */\nimport type { ReactNode } from 'react'\nimport type {\n ColDef,\n ICellRendererParams,\n ValueFormatterParams,\n ValueGetterParams,\n ValueSetterParams,\n} from 'ag-grid-community'\nimport {\n CalendarDays,\n CheckSquare,\n ChevronDown,\n Hash,\n MoreHorizontal,\n Plus,\n Type,\n} from 'lucide-react'\nimport {\n compareCells,\n formatCell,\n toApiValue,\n type DatabaseColumnType,\n type DatabaseColumnView,\n type DatabaseRowView,\n} from './column-types'\nimport { SelectChip } from './SelectChip'\nimport { SelectCellEditor } from './SelectCellEditor'\n\nexport { SelectChip }\n\nexport interface DatabaseColumnLabels {\n addColumn: string\n columnSettings: (name: string) => string\n}\n\nexport const DEFAULT_DATABASE_COLUMN_LABELS: DatabaseColumnLabels = {\n addColumn: 'Add a column',\n columnSettings: (name) => `${name} column settings`,\n}\n\n/** colId of the trailing \"add a column\" column (never a database column id). */\nexport const ADD_COLUMN_COL_ID = '__add_column'\n\nexport const COLUMN_TYPE_ICONS: Record<DatabaseColumnType, typeof Type> = {\n text: Type,\n number: Hash,\n date: CalendarDays,\n checkbox: CheckSquare,\n select: ChevronDown,\n}\n\nexport interface DatabaseColumnOptions {\n /** No editing, no column settings, no add-column button (a database of another workspace). */\n readOnly?: boolean\n /** Open a column's settings (rename, options, delete). */\n onEditColumn?: (column: DatabaseColumnView) => void\n /** Add a column (the trailing \"+\" header). */\n onAddColumn?: () => void\n /** Locale for numbers and dates. */\n locale?: string\n labels?: Partial<DatabaseColumnLabels>\n}\n\nconst WIDTHS: Record<DatabaseColumnType, number> = {\n text: 220,\n number: 130,\n date: 140,\n checkbox: 110,\n select: 160,\n}\n\nfunction HeaderLabel({\n column,\n onEdit,\n label,\n}: {\n column: DatabaseColumnView\n onEdit?: () => void\n label: string\n}) {\n const Icon = COLUMN_TYPE_ICONS[column.type]\n return (\n <span className=\"group/dbh flex min-w-0 items-center gap-1.5\">\n <Icon className=\"size-3.5 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"truncate text-[12.5px] font-medium\">{column.name}</span>\n {onEdit && (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n data-testid={`database-column-settings-${column.id}`}\n // The header sorts on click: keep the settings button's click to itself.\n onClick={(e) => {\n e.stopPropagation()\n onEdit()\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className=\"ml-auto rounded p-0.5 text-muted-foreground opacity-0 hover:bg-muted hover:text-foreground focus-visible:opacity-100 group-hover/dbh:opacity-100\"\n >\n <MoreHorizontal className=\"size-3.5\" />\n </button>\n )}\n </span>\n )\n}\n\n/** Wide enough for the type's values and for the header (icon, name, settings button). */\nexport function columnWidth(column: DatabaseColumnView): number {\n return Math.min(320, Math.max(WIDTHS[column.type], Math.round(column.name.length * 8) + 76))\n}\n\nfunction editorFor(\n column: DatabaseColumnView\n): Pick<ColDef, 'cellEditor' | 'cellEditorParams' | 'cellEditorPopup'> {\n switch (column.type) {\n case 'number':\n return { cellEditor: 'agNumberCellEditor', cellEditorParams: { showStepperButtons: false } }\n case 'date':\n return { cellEditor: 'agDateStringCellEditor' }\n case 'checkbox':\n return { cellEditor: 'agCheckboxCellEditor' }\n case 'select':\n // Options show as chips the moment the cell opens (AG Grid's own select needs a second click).\n return {\n cellEditor: SelectCellEditor,\n cellEditorPopup: true,\n cellEditorParams: { options: column.options ?? [] },\n }\n default:\n return { cellEditor: 'agTextCellEditor' }\n }\n}\n\nfunction rendererFor(\n column: DatabaseColumnView,\n locale?: string\n): Partial<ColDef<DatabaseRowView>> {\n switch (column.type) {\n case 'checkbox':\n return {\n cellRenderer: 'agCheckboxCellRenderer',\n cellClass: 'flex items-center justify-center',\n }\n case 'select':\n return {\n cellRenderer: (p: ICellRendererParams<DatabaseRowView>): ReactNode =>\n typeof p.value === 'string' && p.value ? <SelectChip value={p.value} /> : null,\n }\n case 'number':\n return {\n cellClass: 'cell-numeric',\n valueFormatter: (p: ValueFormatterParams<DatabaseRowView>) =>\n formatCell(p.value, 'number', locale),\n }\n case 'date':\n return {\n valueFormatter: (p: ValueFormatterParams<DatabaseRowView>) =>\n formatCell(p.value, 'date', locale),\n }\n default:\n return {}\n }\n}\n\n/** One grid column per database column, then the \"add a column\" column (unless read-only). */\nexport function createDatabaseColumns(\n columns: DatabaseColumnView[],\n options: DatabaseColumnOptions = {}\n): ColDef<DatabaseRowView>[] {\n const { readOnly, onEditColumn, onAddColumn, locale } = options\n const l = { ...DEFAULT_DATABASE_COLUMN_LABELS, ...options.labels }\n const defs: ColDef<DatabaseRowView>[] = columns.map((column) => ({\n colId: column.id,\n headerName: column.name,\n width: columnWidth(column),\n minWidth: 90,\n resizable: true,\n sortable: true,\n editable: !readOnly,\n // The grid's own type inference must not second-guess the database's column type.\n cellDataType: false,\n headerComponentParams: {\n innerHeaderComponent: () => (\n <HeaderLabel\n column={column}\n label={l.columnSettings(column.name)}\n onEdit={!readOnly && onEditColumn ? () => onEditColumn(column) : undefined}\n />\n ),\n },\n // An empty checkbox reads as unticked (not indeterminate).\n valueGetter: (p: ValueGetterParams<DatabaseRowView>) =>\n column.type === 'checkbox'\n ? p.data?.values[column.id] === true\n : (p.data?.values[column.id] ?? null),\n // Edits land in the row's values as the API would store them; the host saves them in\n // onCellValueChanged and puts the server's normalised row back.\n valueSetter: (p: ValueSetterParams<DatabaseRowView>) => {\n if (!p.data) return false\n const next = toApiValue(p.newValue, column.type)\n if (next === (p.oldValue ?? null)) return false\n p.data.values = { ...p.data.values, [column.id]: next }\n return true\n },\n comparator: (a: unknown, b: unknown) => compareCells(a, b, column.type),\n getQuickFilterText: (p) => formatCell(p.value, column.type, locale),\n ...editorFor(column),\n ...rendererFor(column, locale),\n }))\n if (!readOnly && onAddColumn) {\n defs.push({\n colId: ADD_COLUMN_COL_ID,\n width: 52,\n minWidth: 52,\n maxWidth: 52,\n resizable: false,\n sortable: false,\n editable: false,\n suppressMovable: true,\n // Pinned: on a wide table the add button stays in view instead of scrolling off the right.\n pinned: 'right',\n lockPinned: true,\n headerComponent: () => (\n <button\n type=\"button\"\n aria-label={l.addColumn}\n title={l.addColumn}\n data-testid=\"database-add-column\"\n onClick={onAddColumn}\n className=\"flex size-7 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Plus className=\"size-4\" />\n </button>\n ),\n valueGetter: () => null,\n })\n }\n return defs\n}\n","/**\n * DatabaseTable: a database's rows in an editable grid, Notion/Airtable style. Cells edit in place\n * (double-click or Enter; a checkbox toggles with one click), the header of each column opens its\n * settings, the trailing \"+\" header adds a column and the footer adds a row. Ticked rows are\n * reported for a bulk delete. Pure: the host owns the data and saves each edit.\n */\nimport { useEffect, useMemo, useRef } from 'react'\nimport type { CellValueChangedEvent, GridApi } from 'ag-grid-community'\nimport { Plus, Table2 } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { GridView, type GridViewProps } from '../files/GridView'\nimport { testIdOr } from '../chat/test-id'\nimport {\n DEFAULT_DATABASE_COLUMN_LABELS,\n createDatabaseColumns,\n type DatabaseColumnLabels,\n} from './databaseColumns'\nimport type { DatabaseColumnView, DatabaseRowView } from './column-types'\n\nconst escapeHtml = (text: string): string =>\n text.replace(/[&<>\"']/g, (ch) => `&#${ch.charCodeAt(0)};`)\n\nexport interface DatabaseTableLabels {\n newRow: string\n emptyTitle: string\n emptyMessage: string\n noColumnsTitle: string\n noColumnsMessage: string\n noMatches: string\n}\n\nexport const DEFAULT_DATABASE_TABLE_LABELS: DatabaseTableLabels = {\n newRow: 'New row',\n emptyTitle: 'No rows yet',\n emptyMessage: 'Add a row, or import a spreadsheet.',\n noColumnsTitle: 'No columns yet',\n noColumnsMessage: 'Add a column to start.',\n noMatches: 'No rows match your search.',\n}\n\nexport interface DatabaseTableProps {\n columns: DatabaseColumnView[]\n rows: DatabaseRowView[]\n /** An edited cell: the value is already in the API's form (`null` empties the cell). */\n onCellChange?: (row: DatabaseRowView, columnId: string, value: unknown) => void\n onAddRow?: () => void\n onAddColumn?: () => void\n onEditColumn?: (column: DatabaseColumnView) => void\n /** Ticked rows (for a bulk delete). With it, rows show a checkbox. */\n onSelectionChange?: (rows: DatabaseRowView[]) => void\n selected?: DatabaseRowView[]\n /** Read-only: a database of another (public) workspace. */\n readOnly?: boolean\n /** Rows are filtered by a search: an empty result says so instead of \"no rows yet\". */\n isFiltered?: boolean\n isLoading?: boolean\n locale?: string\n /** Saved column state key (AG Grid persists by it): one per database. */\n gridId?: string\n height?: GridViewProps<DatabaseRowView>['height']\n labels?: Partial<DatabaseTableLabels>\n columnLabels?: Partial<DatabaseColumnLabels>\n gridProps?: Partial<Omit<GridViewProps<DatabaseRowView>, 'items' | 'columnDefs' | 'getItemId'>>\n testId?: string\n}\n\nexport function DatabaseTable({\n columns,\n rows,\n onCellChange,\n onAddRow,\n onAddColumn,\n onEditColumn,\n onSelectionChange,\n selected,\n readOnly = false,\n isFiltered = false,\n isLoading,\n locale,\n gridId,\n height = '100%',\n labels,\n columnLabels,\n gridProps,\n testId,\n}: DatabaseTableProps) {\n const l = { ...DEFAULT_DATABASE_TABLE_LABELS, ...labels }\n const columnDefs = useMemo(\n () =>\n createDatabaseColumns(columns, {\n readOnly,\n onEditColumn,\n onAddColumn,\n locale,\n labels: columnLabels,\n }),\n [columns, readOnly, onEditColumn, onAddColumn, locale, columnLabels]\n )\n\n // No columns: a full empty state (there is no header to add one from). Columns but no rows: the\n // grid stays, header and all, with a no-rows overlay, so columns can still be added and resized.\n const noColumns = columns.length === 0\n const emptyState = {\n icon: <Table2 className=\"size-8 text-muted-foreground\" />,\n title: l.noColumnsTitle,\n message: readOnly ? undefined : l.noColumnsMessage,\n action:\n !readOnly && onAddColumn ? (\n <Button onClick={onAddColumn} data-testid=\"database-empty-add-column\" className=\"gap-1.5\">\n <Plus className=\"size-4\" />\n {columnLabels?.addColumn ?? DEFAULT_DATABASE_COLUMN_LABELS.addColumn}\n </Button>\n ) : undefined,\n }\n const noRowsText = isFiltered\n ? l.noMatches\n : readOnly\n ? l.emptyTitle\n : `${l.emptyTitle}. ${l.emptyMessage}`\n\n // A column just added lands at the right edge, often past the viewport: bring it into view.\n const api = useRef<GridApi<DatabaseRowView> | null>(null)\n const knownColumns = useRef<Set<string> | null>(null)\n useEffect(() => {\n const ids = new Set(columns.map((c) => c.id))\n const added = knownColumns.current\n ? columns.filter((c) => !knownColumns.current!.has(c.id))\n : []\n knownColumns.current = ids\n const last = added[added.length - 1]\n if (last && api.current) {\n const grid = api.current\n // After the grid has applied the new column definitions.\n setTimeout(() => grid.ensureColumnVisible(last.id, 'end'), 0)\n }\n }, [columns])\n\n const handleCellValueChanged = (event: CellValueChangedEvent<DatabaseRowView>) => {\n const columnId = event.column.getColId()\n if (!event.data || !onCellChange) return\n onCellChange(event.data, columnId, event.data.values[columnId] ?? null)\n }\n\n return (\n <div\n className=\"flex h-full min-h-0 flex-col\"\n data-testid={testIdOr(testId, { testId: 'database-table' })}\n >\n <div className=\"min-h-0 flex-1\">\n <GridView<DatabaseRowView>\n testId=\"database-grid\"\n items={rows}\n columnDefs={columnDefs}\n getItemId={(row) => row.id}\n getRowTestId={(row) => `database-row-${row.id}`}\n getCellTestId={(colId, row) => `database-cell-${row.id}-${colId}`}\n isLoading={isLoading}\n emptyState={emptyState}\n showEmpty={noColumns}\n gridId={gridId}\n height={height}\n rowHeight={38}\n selection={\n onSelectionChange\n ? { mode: 'multiple', selected: selected ?? [], onSelectionChange, controlled: true }\n : undefined\n }\n onCellValueChanged={handleCellValueChanged}\n {...gridProps}\n onGridReady={(params) => {\n api.current = params.api\n gridProps?.onGridReady?.(params)\n }}\n gridOptions={{\n overlayNoRowsTemplate: `<span class=\"text-sm text-muted-foreground\">${escapeHtml(noRowsText)}</span>`,\n singleClickEdit: false,\n stopEditingWhenCellsLoseFocus: true,\n enterNavigatesVerticallyAfterEdit: true,\n undoRedoCellEditing: false,\n ...gridProps?.gridOptions,\n }}\n />\n </div>\n {!readOnly && onAddRow && columns.length > 0 && (\n <div className=\"border-t border-border px-2 py-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onAddRow}\n data-testid=\"database-add-row\"\n className=\"gap-1.5 text-muted-foreground\"\n >\n <Plus className=\"size-4\" />\n {l.newRow}\n </Button>\n </div>\n )}\n </div>\n )\n}\n","/**\n * DatabaseToolbar: the header of an open database. Back to the list, the database's name (rename\n * in place), its row count, a search box, the bulk delete for ticked rows, and the import/export\n * menu. A database of another workspace is read-only here and says where to edit it.\n */\nimport { useEffect, useRef, useState, type ChangeEvent, type KeyboardEvent } from 'react'\nimport {\n ArrowLeft,\n Download,\n Eye,\n FileSpreadsheet,\n MoreHorizontal,\n Search,\n Trash2,\n Upload,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Input,\n} from '@arbidocs/react/ui'\n\nexport type DatabaseExportFormat = 'csv' | 'xlsx'\n\nexport interface DatabaseToolbarLabels {\n back: string\n rename: string\n rows: (count: number) => string\n showing: (shown: number, total: number) => string\n search: string\n deleteSelected: (count: number) => string\n more: string\n importRows: string\n exportXlsx: string\n exportCsv: string\n deleteDatabase: string\n readOnly: string\n}\n\nexport const DEFAULT_DATABASE_TOOLBAR_LABELS: DatabaseToolbarLabels = {\n back: 'All databases',\n rename: 'Rename database',\n rows: (n) => `${n.toLocaleString()} row${n === 1 ? '' : 's'}`,\n showing: (shown, total) => `Showing ${shown.toLocaleString()} of ${total.toLocaleString()}`,\n search: 'Search',\n deleteSelected: (n) => `Delete ${n} row${n === 1 ? '' : 's'}`,\n more: 'More actions',\n importRows: 'Import rows from a spreadsheet…',\n exportXlsx: 'Export to Excel (.xlsx)',\n exportCsv: 'Export to CSV',\n deleteDatabase: 'Delete database',\n readOnly: 'Read-only here: this database belongs to another workspace.',\n}\n\nexport interface DatabaseToolbarProps {\n name: string\n description?: string | null\n /** Rows matching the search (all rows without one). */\n total: number\n /** Rows loaded into the grid, when fewer than `total`. */\n shown?: number\n search: string\n onSearchChange: (text: string) => void\n onBack?: () => void\n onRename?: (name: string) => void\n selectedCount?: number\n onDeleteSelected?: () => void\n /** Append rows from a .csv / .xlsx file. */\n onImportRows?: (file: File) => void\n onExport?: (format: DatabaseExportFormat) => void\n /** Delete the whole database (the host confirms first). */\n onDeleteDatabase?: () => void\n readOnly?: boolean\n labels?: Partial<DatabaseToolbarLabels>\n}\n\nconst SPREADSHEET_ACCEPT =\n '.csv,.xlsx,text/csv,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\nexport function DatabaseToolbar({\n name,\n description,\n total,\n shown,\n search,\n onSearchChange,\n onBack,\n onRename,\n selectedCount = 0,\n onDeleteSelected,\n onImportRows,\n onExport,\n onDeleteDatabase,\n readOnly = false,\n labels,\n}: DatabaseToolbarProps) {\n const l = { ...DEFAULT_DATABASE_TOOLBAR_LABELS, ...labels }\n const [title, setTitle] = useState(name)\n const fileInput = useRef<HTMLInputElement>(null)\n useEffect(() => setTitle(name), [name])\n\n const commitTitle = () => {\n const next = title.trim()\n if (next && next !== name) onRename?.(next)\n else setTitle(name)\n }\n const onTitleKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') e.currentTarget.blur()\n if (e.key === 'Escape') {\n setTitle(name)\n e.currentTarget.blur()\n }\n }\n const onFile = (e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (file) onImportRows?.(file)\n e.target.value = ''\n }\n\n const canRename = !readOnly && Boolean(onRename)\n const hasMenu = Boolean(onExport || (!readOnly && (onImportRows || onDeleteDatabase)))\n\n return (\n <div className=\"flex flex-col gap-2 px-2 pb-2 pt-1\" data-testid=\"database-toolbar\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {onBack && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onBack}\n aria-label={l.back}\n title={l.back}\n data-testid=\"database-back\"\n >\n <ArrowLeft className=\"size-4\" />\n </Button>\n )}\n <FileSpreadsheet className=\"size-5 shrink-0 text-muted-foreground\" aria-hidden />\n {canRename ? (\n <input\n value={title}\n aria-label={l.rename}\n maxLength={200}\n onChange={(e) => setTitle(e.target.value)}\n onBlur={commitTitle}\n onKeyDown={onTitleKey}\n data-testid=\"database-title\"\n className=\"min-w-0 flex-1 truncate rounded-md bg-transparent px-1 text-xl font-semibold outline-none hover:bg-muted/60 focus:bg-muted/60\"\n />\n ) : (\n <h2\n className=\"min-w-0 flex-1 truncate px-1 text-xl font-semibold\"\n data-testid=\"database-title\"\n >\n {name}\n </h2>\n )}\n <span className=\"shrink-0 text-sm text-muted-foreground\" data-testid=\"database-row-count\">\n {shown !== undefined && shown < total ? l.showing(shown, total) : l.rows(total)}\n </span>\n </div>\n {description && <p className=\"px-1 text-sm text-muted-foreground\">{description}</p>}\n {readOnly && (\n <p\n className=\"flex items-center gap-1.5 rounded-md bg-muted px-2 py-1 text-xs text-muted-foreground\"\n data-testid=\"database-read-only\"\n >\n <Eye className=\"size-3.5\" />\n {l.readOnly}\n </p>\n )}\n <div className=\"flex items-center gap-2\">\n <div className=\"relative max-w-sm flex-1\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => onSearchChange(e.target.value)}\n placeholder={l.search}\n aria-label={l.search}\n className=\"h-8 pl-8\"\n data-testid=\"database-search\"\n />\n </div>\n <span className=\"flex-1\" />\n {!readOnly && selectedCount > 0 && onDeleteSelected && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onDeleteSelected}\n className=\"gap-1.5 text-red-text\"\n data-testid=\"database-delete-rows\"\n >\n <Trash2 className=\"size-4\" />\n {l.deleteSelected(selectedCount)}\n </Button>\n )}\n {hasMenu && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"icon\"\n aria-label={l.more}\n title={l.more}\n data-testid=\"database-menu\"\n >\n <MoreHorizontal className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-64\">\n {!readOnly && onImportRows && (\n <DropdownMenuItem\n onSelect={() => fileInput.current?.click()}\n data-testid=\"database-import-rows\"\n >\n <Upload className=\"size-4\" />\n {l.importRows}\n </DropdownMenuItem>\n )}\n {onExport && (\n <>\n <DropdownMenuItem\n onSelect={() => onExport('xlsx')}\n data-testid=\"database-export-xlsx\"\n >\n <Download className=\"size-4\" />\n {l.exportXlsx}\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => onExport('csv')}\n data-testid=\"database-export-csv\"\n >\n <Download className=\"size-4\" />\n {l.exportCsv}\n </DropdownMenuItem>\n </>\n )}\n {!readOnly && onDeleteDatabase && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onSelect={onDeleteDatabase}\n className=\"text-red-text\"\n data-testid=\"database-delete\"\n >\n <Trash2 className=\"size-4\" />\n {l.deleteDatabase}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n <input\n ref={fileInput}\n type=\"file\"\n accept={SPREADSHEET_ACCEPT}\n className=\"hidden\"\n onChange={onFile}\n data-testid=\"database-import-rows-input\"\n />\n </div>\n </div>\n )\n}\n","/**\n * DatabaseColumnDialog: add a column, or change one (rename, edit a select's options, delete).\n *\n * A column's type is chosen when it is added and fixed after (the server keeps every stored cell\n * valid for its column's type), so editing shows the type but does not offer to change it.\n */\nimport { useEffect, useState, type FormEvent, type KeyboardEvent } from 'react'\nimport { Trash2, X } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@arbidocs/react/ui'\nimport { COLUMN_TYPE_ICONS } from './databaseColumns'\nimport { SelectChip } from './SelectChip'\nimport {\n DATABASE_COLUMN_TYPES,\n DEFAULT_DATABASE_COLUMN_TYPE_LABELS,\n type DatabaseColumnType,\n type DatabaseColumnTypeLabels,\n type DatabaseColumnView,\n} from './column-types'\n\nexport interface DatabaseColumnDialogLabels {\n addTitle: string\n editTitle: string\n addDescription: string\n editDescription: string\n name: string\n namePlaceholder: string\n type: string\n typeFixed: string\n options: string\n optionPlaceholder: string\n addOption: string\n removeOption: (option: string) => string\n needsOptions: string\n cancel: string\n add: string\n save: string\n saving: string\n delete: string\n confirmDelete: string\n}\n\nexport const DEFAULT_DATABASE_COLUMN_DIALOG_LABELS: DatabaseColumnDialogLabels = {\n addTitle: 'Add a column',\n editTitle: 'Column settings',\n addDescription: 'Pick what the column holds; every cell in it is checked against its type.',\n editDescription: 'Rename the column or change its options.',\n name: 'Name',\n namePlaceholder: 'e.g. Client, Matter number, Fee',\n type: 'Type',\n typeFixed: 'A column’s type can’t be changed once it has been added.',\n options: 'Options',\n optionPlaceholder: 'Add an option and press Enter',\n addOption: 'Add',\n removeOption: (option) => `Remove ${option}`,\n needsOptions: 'A select column needs at least one option.',\n cancel: 'Cancel',\n add: 'Add column',\n save: 'Save',\n saving: 'Saving…',\n delete: 'Delete column',\n confirmDelete: 'Delete this column and every value in it?',\n}\n\nexport interface DatabaseColumnDraft {\n name: string\n type: DatabaseColumnType\n options: string[] | null\n}\n\nexport interface DatabaseColumnDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** The column being edited; omit to add one. */\n column?: DatabaseColumnView | null\n onSave: (draft: DatabaseColumnDraft) => void\n /** Delete the column (editing only). */\n onDelete?: () => void\n isSaving?: boolean\n /** The server's reason the last save failed. */\n error?: string | null\n labels?: Partial<DatabaseColumnDialogLabels>\n typeLabels?: Partial<DatabaseColumnTypeLabels>\n}\n\nexport function DatabaseColumnDialog({\n open,\n onOpenChange,\n column,\n onSave,\n onDelete,\n isSaving = false,\n error,\n labels,\n typeLabels,\n}: DatabaseColumnDialogProps) {\n const l = { ...DEFAULT_DATABASE_COLUMN_DIALOG_LABELS, ...labels }\n const tl = { ...DEFAULT_DATABASE_COLUMN_TYPE_LABELS, ...typeLabels }\n const editing = Boolean(column)\n const [name, setName] = useState('')\n const [type, setType] = useState<DatabaseColumnType>('text')\n const [options, setOptions] = useState<string[]>([])\n const [optionDraft, setOptionDraft] = useState('')\n const [confirmingDelete, setConfirmingDelete] = useState(false)\n\n useEffect(() => {\n if (!open) return\n setName(column?.name ?? '')\n setType(column?.type ?? 'text')\n setOptions(column?.options ?? [])\n setOptionDraft('')\n setConfirmingDelete(false)\n }, [open, column])\n\n const addOption = () => {\n const option = optionDraft.trim()\n if (option && !options.some((o) => o.toLowerCase() === option.toLowerCase())) {\n setOptions([...options, option])\n }\n setOptionDraft('')\n }\n\n const pendingOptions = optionDraft.trim() ? [...options, optionDraft.trim()] : options\n const missingOptions = type === 'select' && pendingOptions.length === 0\n const canSave = name.trim().length > 0 && !missingOptions && !isSaving\n\n const submit = (e: FormEvent) => {\n e.preventDefault()\n if (!canSave) return\n onSave({\n name: name.trim(),\n type,\n options: type === 'select' ? Array.from(new Set(pendingOptions)) : null,\n })\n }\n\n const onOptionKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n addOption()\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\" data-testid=\"database-column-dialog\">\n <form onSubmit={submit} className=\"flex flex-col gap-4\">\n <DialogHeader>\n <DialogTitle>{editing ? l.editTitle : l.addTitle}</DialogTitle>\n <DialogDescription>{editing ? l.editDescription : l.addDescription}</DialogDescription>\n </DialogHeader>\n\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"database-column-name\">{l.name}</Label>\n <Input\n id=\"database-column-name\"\n autoFocus\n value={name}\n maxLength={200}\n placeholder={l.namePlaceholder}\n onChange={(e) => setName(e.target.value)}\n data-testid=\"database-column-name\"\n />\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <Label>{l.type}</Label>\n <Select\n value={type}\n onValueChange={(v) => setType(v as DatabaseColumnType)}\n disabled={editing}\n >\n <SelectTrigger data-testid=\"database-column-type\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {DATABASE_COLUMN_TYPES.map((t) => {\n const Icon = COLUMN_TYPE_ICONS[t]\n return (\n <SelectItem key={t} value={t} data-testid={`database-column-type-${t}`}>\n <span className=\"flex items-center gap-2\">\n <Icon className=\"size-4 text-muted-foreground\" />\n {tl[t]}\n </span>\n </SelectItem>\n )\n })}\n </SelectContent>\n </Select>\n {editing && <p className=\"text-xs text-muted-foreground\">{l.typeFixed}</p>}\n </div>\n\n {type === 'select' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"database-column-option\">{l.options}</Label>\n {options.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\" data-testid=\"database-column-options\">\n {options.map((option) => (\n <span key={option} className=\"inline-flex items-center gap-0.5\">\n <SelectChip value={option} />\n <button\n type=\"button\"\n aria-label={l.removeOption(option)}\n onClick={() => setOptions(options.filter((o) => o !== option))}\n className=\"rounded p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <X className=\"size-3\" />\n </button>\n </span>\n ))}\n </div>\n )}\n <div className=\"flex gap-2\">\n <Input\n id=\"database-column-option\"\n value={optionDraft}\n maxLength={200}\n placeholder={l.optionPlaceholder}\n onChange={(e) => setOptionDraft(e.target.value)}\n onKeyDown={onOptionKey}\n data-testid=\"database-column-option-input\"\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={addOption}\n disabled={!optionDraft.trim()}\n >\n {l.addOption}\n </Button>\n </div>\n {missingOptions && <p className=\"text-xs text-muted-foreground\">{l.needsOptions}</p>}\n </div>\n )}\n\n {error && (\n <p role=\"alert\" className=\"text-sm text-red-text\" data-testid=\"database-column-error\">\n {error}\n </p>\n )}\n\n <DialogFooter className=\"flex-row items-center gap-2 sm:justify-between\">\n {editing && onDelete ? (\n confirmingDelete ? (\n <span className=\"flex items-center gap-2 text-sm\">\n <span className=\"text-muted-foreground\">{l.confirmDelete}</span>\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={onDelete}\n data-testid=\"database-column-delete-confirm\"\n >\n {l.delete}\n </Button>\n </span>\n ) : (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setConfirmingDelete(true)}\n className=\"gap-1.5 text-red-text\"\n data-testid=\"database-column-delete\"\n >\n <Trash2 className=\"size-4\" />\n {l.delete}\n </Button>\n )\n ) : (\n <span />\n )}\n <span className=\"flex gap-2\">\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n {l.cancel}\n </Button>\n <Button type=\"submit\" disabled={!canSave} data-testid=\"database-column-save\">\n {isSaving ? l.saving : editing ? l.save : l.add}\n </Button>\n </span>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","/**\n * DatabaseList: the databases a workspace can use, as cards. The workspace's own databases come\n * first; databases of public workspaces (a firm-wide client database, a precedent database) follow,\n * marked read-only here. New database and Import spreadsheet are the page's two ways in.\n */\nimport { useRef, type ChangeEvent } from 'react'\nimport { Eye, FileSpreadsheet, Plus, Upload } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { COLUMN_TYPE_ICONS } from './databaseColumns'\nimport type { DatabaseSummaryView } from './column-types'\n\nexport interface DatabaseListLabels {\n title: string\n subtitle: string\n newDatabase: string\n importSpreadsheet: string\n importing: string\n ownGroup: string\n sharedGroup: string\n readOnly: string\n rows: (count: number) => string\n columns: (count: number) => string\n emptyTitle: string\n emptyMessage: string\n loading: string\n}\n\nexport const DEFAULT_DATABASE_LIST_LABELS: DatabaseListLabels = {\n title: 'Databases',\n subtitle: 'Tables your team keeps and searches — a client database, billing records, precedents.',\n newDatabase: 'New database',\n importSpreadsheet: 'Import spreadsheet',\n importing: 'Importing…',\n ownGroup: 'In this workspace',\n sharedGroup: 'Shared with everyone',\n readOnly: 'Read-only',\n rows: (n) => `${n.toLocaleString()} row${n === 1 ? '' : 's'}`,\n columns: (n) => `${n} column${n === 1 ? '' : 's'}`,\n emptyTitle: 'No databases yet',\n emptyMessage:\n 'Start from a blank table, or import a spreadsheet (.xlsx or .csv) — its columns and their types come with it.',\n loading: 'Loading databases…',\n}\n\nexport interface DatabaseListProps {\n databases: DatabaseSummaryView[]\n onOpen: (database: DatabaseSummaryView) => void\n onNew?: () => void\n /** Create a database from a .csv / .xlsx file. */\n onImport?: (file: File) => void\n isImporting?: boolean\n isLoading?: boolean\n labels?: Partial<DatabaseListLabels>\n}\n\nconst SPREADSHEET_ACCEPT =\n '.csv,.xlsx,text/csv,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\nfunction DatabaseCard({\n database,\n onOpen,\n l,\n}: {\n database: DatabaseSummaryView\n onOpen: () => void\n l: DatabaseListLabels\n}) {\n return (\n <button\n type=\"button\"\n onClick={onOpen}\n data-testid={`database-card-${database.id}`}\n className={cn(\n 'flex min-h-32 flex-col gap-2 rounded-lg border border-border bg-background p-4 text-left transition-colors',\n 'hover:border-primary/40 hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n >\n <span className=\"flex w-full items-start gap-2\">\n <FileSpreadsheet className=\"mt-0.5 size-5 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"min-w-0 flex-1 truncate font-medium\">{database.name}</span>\n {!database.editable && (\n <span className=\"inline-flex shrink-0 items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-[11px] text-muted-foreground\">\n <Eye className=\"size-3\" />\n {l.readOnly}\n </span>\n )}\n </span>\n {database.description && (\n <span className=\"line-clamp-2 text-sm text-muted-foreground\">{database.description}</span>\n )}\n <span className=\"mt-auto flex w-full items-center gap-3 text-xs text-muted-foreground\">\n <span>{l.rows(database.row_count)}</span>\n <span>{l.columns(database.columns.length)}</span>\n <span className=\"ml-auto flex items-center gap-1\" aria-hidden>\n {database.columns.slice(0, 6).map((c) => {\n const Icon = COLUMN_TYPE_ICONS[c.type]\n return <Icon key={c.id} className=\"size-3.5\" />\n })}\n </span>\n </span>\n </button>\n )\n}\n\nexport function DatabaseList({\n databases,\n onOpen,\n onNew,\n onImport,\n isImporting = false,\n isLoading = false,\n labels,\n}: DatabaseListProps) {\n const l = { ...DEFAULT_DATABASE_LIST_LABELS, ...labels }\n const fileInput = useRef<HTMLInputElement>(null)\n const own = databases.filter((d) => d.editable)\n const shared = databases.filter((d) => !d.editable)\n\n const onFile = (e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (file) onImport?.(file)\n e.target.value = ''\n }\n\n const actions = (\n <span className=\"flex gap-2\">\n {onImport && (\n <Button\n variant=\"outline\"\n onClick={() => fileInput.current?.click()}\n disabled={isImporting}\n className=\"gap-1.5\"\n data-testid=\"database-import\"\n >\n <Upload className=\"size-4\" />\n {isImporting ? l.importing : l.importSpreadsheet}\n </Button>\n )}\n {onNew && (\n <Button onClick={onNew} className=\"gap-1.5\" data-testid=\"database-new\">\n <Plus className=\"size-4\" />\n {l.newDatabase}\n </Button>\n )}\n </span>\n )\n\n const grid = (items: DatabaseSummaryView[]) => (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-3\">\n {items.map((d) => (\n <DatabaseCard key={d.id} database={d} onOpen={() => onOpen(d)} l={l} />\n ))}\n </div>\n )\n\n return (\n <div className=\"flex flex-col gap-6 p-2 sm:p-4\" data-testid=\"database-list\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <h1 className=\"text-2xl font-semibold\">{l.title}</h1>\n <p className=\"text-sm text-muted-foreground\">{l.subtitle}</p>\n </div>\n {actions}\n </div>\n {isLoading ? (\n <p className=\"text-sm text-muted-foreground\">{l.loading}</p>\n ) : databases.length === 0 ? (\n <div\n className=\"flex flex-col items-center gap-2 rounded-lg border border-dashed border-border px-6 py-12 text-center\"\n data-testid=\"database-list-empty\"\n >\n <FileSpreadsheet className=\"size-8 text-muted-foreground\" />\n <h3 className=\"text-lg font-medium\">{l.emptyTitle}</h3>\n <p className=\"max-w-md text-sm text-muted-foreground\">{l.emptyMessage}</p>\n </div>\n ) : (\n <>\n {own.length > 0 && (\n <section className=\"flex flex-col gap-2\">\n {shared.length > 0 && (\n <h2 className=\"text-sm font-medium text-muted-foreground\">{l.ownGroup}</h2>\n )}\n {grid(own)}\n </section>\n )}\n {shared.length > 0 && (\n <section className=\"flex flex-col gap-2\" data-testid=\"database-list-shared\">\n <h2 className=\"text-sm font-medium text-muted-foreground\">{l.sharedGroup}</h2>\n {grid(shared)}\n </section>\n )}\n </>\n )}\n <input\n ref={fileInput}\n type=\"file\"\n accept={SPREADSHEET_ACCEPT}\n className=\"hidden\"\n onChange={onFile}\n data-testid=\"database-import-input\"\n />\n </div>\n )\n}\n","/**\n * NewDatabaseDialog: name a new, blank database. It starts with one text column (a table with no\n * columns has nothing to type into); more are added from the table's \"+\" header.\n */\nimport { useEffect, useState, type FormEvent } from 'react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n Input,\n Label,\n Textarea,\n} from '@arbidocs/react/ui'\n\nexport interface NewDatabaseDialogLabels {\n title: string\n description: string\n name: string\n namePlaceholder: string\n about: string\n aboutPlaceholder: string\n cancel: string\n create: string\n creating: string\n}\n\nexport const DEFAULT_NEW_DATABASE_DIALOG_LABELS: NewDatabaseDialogLabels = {\n title: 'New database',\n description: 'A table your workspace keeps: add columns of the kinds you need, then rows.',\n name: 'Name',\n namePlaceholder: 'e.g. Client database',\n about: 'Description',\n aboutPlaceholder: 'Optional: what it holds and who keeps it',\n cancel: 'Cancel',\n create: 'Create',\n creating: 'Creating…',\n}\n\nexport interface NewDatabaseDraft {\n name: string\n description: string | null\n}\n\nexport interface NewDatabaseDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n onCreate: (draft: NewDatabaseDraft) => void\n isCreating?: boolean\n error?: string | null\n labels?: Partial<NewDatabaseDialogLabels>\n}\n\nexport function NewDatabaseDialog({\n open,\n onOpenChange,\n onCreate,\n isCreating = false,\n error,\n labels,\n}: NewDatabaseDialogProps) {\n const l = { ...DEFAULT_NEW_DATABASE_DIALOG_LABELS, ...labels }\n const [name, setName] = useState('')\n const [about, setAbout] = useState('')\n useEffect(() => {\n if (open) {\n setName('')\n setAbout('')\n }\n }, [open])\n\n const submit = (e: FormEvent) => {\n e.preventDefault()\n if (!name.trim() || isCreating) return\n onCreate({ name: name.trim(), description: about.trim() || null })\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\" data-testid=\"new-database-dialog\">\n <form onSubmit={submit} className=\"flex flex-col gap-4\">\n <DialogHeader>\n <DialogTitle>{l.title}</DialogTitle>\n <DialogDescription>{l.description}</DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"new-database-name\">{l.name}</Label>\n <Input\n id=\"new-database-name\"\n autoFocus\n value={name}\n maxLength={200}\n placeholder={l.namePlaceholder}\n onChange={(e) => setName(e.target.value)}\n data-testid=\"new-database-name\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"new-database-about\">{l.about}</Label>\n <Textarea\n id=\"new-database-about\"\n value={about}\n maxLength={2000}\n rows={2}\n placeholder={l.aboutPlaceholder}\n onChange={(e) => setAbout(e.target.value)}\n data-testid=\"new-database-description\"\n />\n </div>\n {error && (\n <p role=\"alert\" className=\"text-sm text-red-text\">\n {error}\n </p>\n )}\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!name.trim() || isCreating}\n data-testid=\"new-database-create\"\n >\n {isCreating ? l.creating : l.create}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n"]}
@@ -2,14 +2,15 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkZPERNIMP_cjs = require('../chunk-ZPERNIMP.cjs');
5
- var chunkVPPX5XUF_cjs = require('../chunk-VPPX5XUF.cjs');
6
5
  var chunkOUW6G4O2_cjs = require('../chunk-OUW6G4O2.cjs');
6
+ var chunkVPPX5XUF_cjs = require('../chunk-VPPX5XUF.cjs');
7
7
  var chunk7RGLTF76_cjs = require('../chunk-7RGLTF76.cjs');
8
- var chunkIA7RTPT3_cjs = require('../chunk-IA7RTPT3.cjs');
8
+ var chunkV4ISCZJ7_cjs = require('../chunk-V4ISCZJ7.cjs');
9
9
  var chunk2EI7NCUA_cjs = require('../chunk-2EI7NCUA.cjs');
10
+ var chunkIXALYQT7_cjs = require('../chunk-IXALYQT7.cjs');
11
+ require('../chunk-C54XEN5T.cjs');
10
12
  require('../chunk-FX3K6LNZ.cjs');
11
13
  var chunkPPCATBOY_cjs = require('../chunk-PPCATBOY.cjs');
12
- require('../chunk-C54XEN5T.cjs');
13
14
  var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
14
15
  var chunkMHVNT4J3_cjs = require('../chunk-MHVNT4J3.cjs');
15
16
  require('../chunk-DES3K4SD.cjs');
@@ -522,7 +523,7 @@ function FactsTable({
522
523
  ]
523
524
  );
524
525
  return /* @__PURE__ */ jsxRuntime.jsx(
525
- chunkIA7RTPT3_cjs.GridView,
526
+ chunkIXALYQT7_cjs.GridView,
526
527
  {
527
528
  testId,
528
529
  items: facts,
@@ -1773,7 +1774,7 @@ function FactsBulkBar({
1773
1774
  const l = { ...DEFAULT_FACTS_BULK_BAR_LABELS, ...labels };
1774
1775
  const none = count === 0;
1775
1776
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pb-3", "data-slot": "facts-bulk-bar", children: /* @__PURE__ */ jsxRuntime.jsx(
1776
- chunkIA7RTPT3_cjs.SelectionBar,
1777
+ chunkV4ISCZJ7_cjs.SelectionBar,
1777
1778
  {
1778
1779
  count,
1779
1780
  onClear,
@@ -1791,7 +1792,7 @@ function FactsBulkBar({
1791
1792
  ) : null,
1792
1793
  children: (isCompact) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1793
1794
  /* @__PURE__ */ jsxRuntime.jsx(
1794
- chunkIA7RTPT3_cjs.SelectionBarAction,
1795
+ chunkV4ISCZJ7_cjs.SelectionBarAction,
1795
1796
  {
1796
1797
  icon: lucideReact.Paperclip,
1797
1798
  label: allSelectedInChat ? l.removeFromChat : l.addToChat,
@@ -1804,7 +1805,7 @@ function FactsBulkBar({
1804
1805
  }
1805
1806
  ),
1806
1807
  /* @__PURE__ */ jsxRuntime.jsx(
1807
- chunkIA7RTPT3_cjs.SelectionBarAction,
1808
+ chunkV4ISCZJ7_cjs.SelectionBarAction,
1808
1809
  {
1809
1810
  icon: lucideReact.Tags,
1810
1811
  label: l.label,