@dxos/react-ui-table 0.8.4-main.dedc0f3 → 0.8.4-main.dfabb4ec29
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/lib/browser/chunk-FBURZBPH.mjs +70 -0
- package/dist/lib/browser/chunk-FBURZBPH.mjs.map +7 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/browser/chunk-YGC7LZJN.mjs +1695 -0
- package/dist/lib/browser/chunk-YGC7LZJN.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1139 -1193
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +33 -42
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/browser/translations.mjs +36 -0
- package/dist/lib/browser/translations.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +4 -3
- package/dist/lib/node-esm/chunk-DKKMSVKP.mjs +71 -0
- package/dist/lib/node-esm/chunk-DKKMSVKP.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-GKIWDEZ7.mjs +1697 -0
- package/dist/lib/node-esm/chunk-GKIWDEZ7.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1139 -1193
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +33 -42
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/translations.mjs +37 -0
- package/dist/lib/node-esm/translations.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +4 -3
- package/dist/types/src/components/Table/ColumnActionsMenu.d.ts +1 -2
- package/dist/types/src/components/Table/ColumnActionsMenu.d.ts.map +1 -1
- package/dist/types/src/components/Table/ColumnSettings.d.ts +2 -2
- package/dist/types/src/components/Table/ColumnSettings.d.ts.map +1 -1
- package/dist/types/src/components/Table/DynamicTable.d.ts +7 -7
- package/dist/types/src/components/Table/DynamicTable.d.ts.map +1 -1
- package/dist/types/src/components/Table/DynamicTable.stories.d.ts +23 -39
- package/dist/types/src/components/Table/DynamicTable.stories.d.ts.map +1 -1
- package/dist/types/src/components/Table/Relations.stories.d.ts +96 -29
- package/dist/types/src/components/Table/Relations.stories.d.ts.map +1 -1
- package/dist/types/src/components/Table/RowActionsMenu.d.ts.map +1 -1
- package/dist/types/src/components/Table/Table.d.ts +20 -18
- package/dist/types/src/components/Table/Table.d.ts.map +1 -1
- package/dist/types/src/components/Table/Table.stories.d.ts +96 -31
- package/dist/types/src/components/Table/Table.stories.d.ts.map +1 -1
- package/dist/types/src/components/Table/TableContent.d.ts +17 -0
- package/dist/types/src/components/Table/TableContent.d.ts.map +1 -0
- package/dist/types/src/components/Table/TableToolbar.d.ts +21 -0
- package/dist/types/src/components/Table/TableToolbar.d.ts.map +1 -0
- package/dist/types/src/components/TableCellEditor/CellValidationMessage.d.ts +1 -1
- package/dist/types/src/components/TableCellEditor/CellValidationMessage.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/FormCellEditor.d.ts +12 -12
- package/dist/types/src/components/TableCellEditor/FormCellEditor.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts +7 -7
- package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts +25 -28
- package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/index.d.ts +1 -0
- package/dist/types/src/components/TableCellEditor/index.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +0 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +23 -16
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +2 -1
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useAddRow.d.ts +5 -6
- package/dist/types/src/hooks/useAddRow.d.ts.map +1 -1
- package/dist/types/src/hooks/useProjectionModel.d.ts +6 -0
- package/dist/types/src/hooks/useProjectionModel.d.ts.map +1 -0
- package/dist/types/src/hooks/useTableModel.d.ts +9 -9
- package/dist/types/src/hooks/useTableModel.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +0 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/model/modal-controller.d.ts +5 -8
- package/dist/types/src/model/modal-controller.d.ts.map +1 -1
- package/dist/types/src/model/selection-model.d.ts +18 -9
- package/dist/types/src/model/selection-model.d.ts.map +1 -1
- package/dist/types/src/model/table-model.d.ts +106 -26
- package/dist/types/src/model/table-model.d.ts.map +1 -1
- package/dist/types/src/model/table-presentation.d.ts +3 -1
- package/dist/types/src/model/table-presentation.d.ts.map +1 -1
- package/dist/types/src/playwright/TableManager.d.ts +2 -1
- package/dist/types/src/playwright/TableManager.d.ts.map +1 -1
- package/dist/types/src/playwright/playwright.config.d.ts.map +1 -1
- package/dist/types/src/testing/useTestTableModel.d.ts +18 -15
- package/dist/types/src/testing/useTestTableModel.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +21 -23
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Table.d.ts +26 -0
- package/dist/types/src/types/Table.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/util/dynamic-table.d.ts +14 -12
- package/dist/types/src/util/dynamic-table.d.ts.map +1 -1
- package/dist/types/src/util/dynamic-table.test.d.ts +2 -0
- package/dist/types/src/util/dynamic-table.test.d.ts.map +1 -0
- package/dist/types/src/util/index.d.ts +2 -0
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/query-ast.d.ts +7 -0
- package/dist/types/src/util/query-ast.d.ts.map +1 -0
- package/dist/types/src/util/schema.d.ts +1 -1
- package/dist/types/src/util/schema.d.ts.map +1 -1
- package/dist/types/src/util/signals.d.ts.map +1 -1
- package/dist/types/src/util/sort.d.ts +12 -0
- package/dist/types/src/util/sort.d.ts.map +1 -0
- package/dist/types/src/util/table-buttons.d.ts +20 -20
- package/dist/types/src/util/table-buttons.d.ts.map +1 -1
- package/dist/types/src/util/table-controls.d.ts +4 -4
- package/dist/types/src/util/table-controls.d.ts.map +1 -1
- package/dist/types/src/util/tag.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +67 -76
- package/src/components/Table/ColumnActionsMenu.tsx +17 -12
- package/src/components/Table/ColumnSettings.tsx +8 -9
- package/src/components/Table/DynamicTable.stories.tsx +34 -33
- package/src/components/Table/DynamicTable.tsx +33 -36
- package/src/components/Table/Relations.stories.tsx +196 -48
- package/src/components/Table/RowActionsMenu.tsx +27 -17
- package/src/components/Table/Table.stories.tsx +144 -127
- package/src/components/Table/Table.tsx +43 -403
- package/src/components/Table/TableContent.tsx +421 -0
- package/src/components/Table/TableToolbar.tsx +111 -0
- package/src/components/TableCellEditor/CellValidationMessage.tsx +5 -6
- package/src/components/TableCellEditor/FormCellEditor.tsx +125 -131
- package/src/components/TableCellEditor/TableCellEditor.stories.tsx +32 -55
- package/src/components/TableCellEditor/TableCellEditor.tsx +39 -124
- package/src/components/TableCellEditor/index.ts +1 -0
- package/src/components/index.ts +0 -1
- package/src/components/testing.ts +44 -18
- package/src/hooks/index.ts +2 -1
- package/src/hooks/useAddRow.ts +8 -10
- package/src/hooks/useProjectionModel.ts +39 -0
- package/src/hooks/useTableModel.ts +36 -34
- package/src/index.ts +0 -4
- package/src/model/modal-controller.ts +23 -40
- package/src/model/selection-model.ts +75 -44
- package/src/model/table-model.test.ts +93 -56
- package/src/model/table-model.ts +437 -170
- package/src/model/table-presentation.test.ts +67 -56
- package/src/model/table-presentation.ts +45 -41
- package/src/playwright/TableManager.ts +13 -6
- package/src/playwright/playwright.config.ts +1 -1
- package/src/playwright/smoke.spec.ts +59 -13
- package/src/testing/useTestTableModel.ts +48 -39
- package/src/translations.ts +20 -22
- package/src/types/Table.ts +79 -0
- package/src/types/index.ts +1 -1
- package/src/util/dynamic-table.test.ts +70 -0
- package/src/util/dynamic-table.ts +43 -31
- package/src/util/index.ts +2 -0
- package/src/util/query-ast.ts +22 -0
- package/src/util/schema.ts +4 -4
- package/src/util/sort.ts +90 -0
- package/src/util/table-buttons.ts +1 -1
- package/src/util/table-controls.ts +2 -2
- package/dist/lib/browser/chunk-63UUF4IG.mjs +0 -66
- package/dist/lib/browser/chunk-63UUF4IG.mjs.map +0 -7
- package/dist/lib/browser/chunk-GPZSXPSA.mjs +0 -1822
- package/dist/lib/browser/chunk-GPZSXPSA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-K734DJB7.mjs +0 -67
- package/dist/lib/node-esm/chunk-K734DJB7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XUD6W42C.mjs +0 -1823
- package/dist/lib/node-esm/chunk-XUD6W42C.mjs.map +0 -7
- package/dist/types/src/components/Table/CreateRefPanel.d.ts +0 -9
- package/dist/types/src/components/Table/CreateRefPanel.d.ts.map +0 -1
- package/dist/types/src/components/TableToolbar/TableToolbar.d.ts +0 -21
- package/dist/types/src/components/TableToolbar/TableToolbar.d.ts.map +0 -1
- package/dist/types/src/components/TableToolbar/index.d.ts +0 -2
- package/dist/types/src/components/TableToolbar/index.d.ts.map +0 -1
- package/dist/types/src/model/table-sorting.d.ts +0 -52
- package/dist/types/src/model/table-sorting.d.ts.map +0 -1
- package/dist/types/src/types/schema.d.ts +0 -28
- package/dist/types/src/types/schema.d.ts.map +0 -1
- package/src/components/Table/CreateRefPanel.tsx +0 -103
- package/src/components/TableToolbar/TableToolbar.tsx +0 -102
- package/src/components/TableToolbar/index.ts +0 -5
- package/src/model/table-sorting.ts +0 -225
- package/src/types/schema.ts +0 -73
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nexport const translationKey = 'react-ui-table';\n\nexport const translations = [\n {\n 'en-US': {\n [translationKey]: {\n 'object placeholder': 'New table',\n 'create object label': 'Create table',\n 'table name placeholder': 'Table name',\n 'settings title': 'Table settings',\n 'table schema label': 'Record type',\n 'new schema': 'New record type',\n 'continue label': 'Continue',\n 'create stack section label': 'Create table',\n 'add row label': 'Add row',\n 'create comment': 'Create thread',\n 'column action sort descending': 'Sort Descending',\n 'column action sort ascending': 'Sort Ascending',\n 'column action clear sorting': 'Clear Sorting',\n 'column action settings': 'Column Settings',\n 'column action delete': 'Delete Column',\n 'delete row label': 'Delete row',\n 'bulk delete row label': 'Delete selected rows',\n 'column deleted label': 'Column deleted',\n 'new column button label': 'Create column',\n 'create new object label': 'Create new object “{{text}}”',\n 'save view label': 'Save changes to view',\n },\n },\n },\n] as const satisfies Resource[];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Schema } from 'effect/Schema';\nimport React, {\n type MouseEvent,\n type PropsWithChildren,\n type WheelEvent,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react';\n\nimport { type Client } from '@dxos/react-client';\n// TODO(wittjosiah): Remove dependency on react-client.\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n type DxGridElement,\n type DxGridPlane,\n type DxGridPlaneRange,\n type DxGridPosition,\n Grid,\n type GridContentProps,\n closestCell,\n gridSeparatorBlockEnd,\n gridSeparatorInlineEnd,\n} from '@dxos/react-ui-grid';\nimport { DxEditRequest } from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type InsertRowResult, ModalController, type TableModel, type TablePresentation } from '../../model';\nimport { tableButtons, tableControls } from '../../util';\nimport { type TableCellEditorProps, TableValueEditor } from '../TableCellEditor';\n\nimport { ColumnActionsMenu } from './ColumnActionsMenu';\nimport { ColumnSettings } from './ColumnSettings';\nimport { CreateRefPanel } from './CreateRefPanel';\nimport { RowActionsMenu } from './RowActionsMenu';\n\nconst columnDefault = { grid: { minSize: 80, maxSize: 640 } };\nconst rowDefault = { frozenRowsStart: { readonly: true, focusUnfurl: false } };\n\n//\n// Table.Root\n//\n\nexport type TableRootProps = PropsWithChildren<{ role?: string }>;\n\nconst TableRoot = ({ children, role = 'article' }: TableRootProps) => {\n return (\n <div\n role='none'\n className={mx(\n 'relative !border-separator [&_.dx-grid]:max-is-[--dx-grid-content-inline-size] [&_.dx-grid]:max-bs-[--dx-grid-content-block-size]',\n role === 'card--popover' && 'popover-card-height',\n role === 'section' && 'attention-surface',\n role === 'card--intrinsic' && '[&_.dx-grid]:bs-[--dx-grid-content-block-size]',\n ['card--popover', 'section', 'card--extrinsic'].includes(role) && 'overflow-hidden',\n ['article', 'slide'].includes(role) && 'flex flex-col [&_.dx-grid]:grow [&_.dx-grid]:bs-0',\n )}\n >\n {children}\n </div>\n );\n};\n\n//\n// Table.Main\n//\n\nexport type TableController = {\n update?: (cell?: DxGridPosition) => void;\n handleInsertRowResult?: (insertRowResult?: InsertRowResult) => void;\n};\n\nexport type TableMainProps = {\n model?: TableModel;\n presentation?: TablePresentation;\n schema?: Schema.AnyNoContext;\n client?: Client;\n // TODO(burdon): Rename since attention isn't a useful concept here? Standardize across other components. Pass property into useAttention.\n ignoreAttention?: boolean;\n onRowClick?: (row: any) => void;\n};\n\nconst TableMain = forwardRef<TableController, TableMainProps>(\n ({ model, presentation, ignoreAttention, schema, client, onRowClick }, forwardedRef) => {\n const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);\n const { hasAttention } = useAttention(model?.id ?? 'table');\n const modals = useMemo(() => new ModalController(), []);\n\n const draftRowCount = model?.getDraftRowCount() ?? 0;\n\n const handleSave = useCallback(() => {\n dxGrid?.updateCells(true);\n dxGrid?.requestUpdate();\n }, [dxGrid]);\n\n const frozen = useMemo(() => {\n const noActionColumn =\n model?.features.dataEditable === false &&\n model?.features.schemaEditable === false &&\n model.rowActions.length === 0;\n\n return {\n frozenRowsStart: 1,\n frozenRowsEnd: Math.max(1, draftRowCount),\n frozenColsStart: model?.features.selection.enabled ? 1 : 0,\n frozenColsEnd: noActionColumn ? 0 : 1,\n };\n }, [model, draftRowCount]);\n\n const getCells = useCallback<NonNullable<GridContentProps['getCells']>>(\n (range: DxGridPlaneRange, plane: DxGridPlane) => presentation?.getCells(range, plane) ?? {},\n [presentation],\n );\n\n useEffect(() => {\n if (!presentation || !dxGrid) {\n return;\n }\n dxGrid.getCells = getCells;\n }, [presentation, dxGrid, getCells]);\n\n const handleInsertRowResult = useCallback(\n (insertResult?: InsertRowResult) => {\n if (insertResult === 'draft') {\n requestAnimationFrame(() => {\n dxGrid?.setFocus({ plane: 'frozenRowsEnd', col: 0, row: 0 });\n dxGrid?.refocus();\n });\n } else {\n requestAnimationFrame(() => {\n dxGrid?.setFocus({ plane: 'grid', col: 0, row: model ? model.getRowCount() - 1 : 0 });\n dxGrid?.refocus();\n });\n }\n },\n [model, dxGrid],\n );\n\n /**\n * Provides an external controller that can be called to repaint the table.\n */\n useImperativeHandle<TableController, TableController>(forwardedRef, () => {\n if (!presentation || !dxGrid) {\n return {};\n }\n\n return {\n update: (cell) => {\n if (cell) {\n dxGrid.updateIfWithinBounds(cell, true);\n } else {\n dxGrid.updateCells(true);\n dxGrid.requestUpdate();\n }\n },\n handleInsertRowResult,\n };\n }, [presentation, dxGrid, model]);\n\n const handleSaveDraftRow = useCallback(\n (rowIndex = 0) => {\n if (model && dxGrid) {\n const didCommitSuccessfully = model.commitDraftRow(rowIndex);\n if (didCommitSuccessfully) {\n requestAnimationFrame(() => {\n dxGrid.scrollToEndRow();\n });\n }\n }\n },\n [model, dxGrid],\n );\n\n const handleGridClick = useCallback(\n (event: MouseEvent) => {\n const cell = closestCell(event.target as HTMLElement);\n if (cell) {\n const { row: rowIndex, plane } = cell;\n if (onRowClick) {\n if (plane === 'grid') {\n const row = model?.getRowAt(rowIndex);\n row && onRowClick(row);\n } else {\n onRowClick(cell);\n }\n }\n\n if (model?.features.selection.enabled && model?.selection.selectionMode === 'single') {\n model.selection.toggleSelectionForRowIndex(rowIndex);\n }\n }\n\n if (!modals) {\n return;\n }\n\n const buttonSelector = Object.values(tableButtons)\n .map((button) => `button[${button.attr}]`)\n .join(',');\n\n const tableButtonElement = (event.target as HTMLElement).closest(buttonSelector) as HTMLElement;\n if (tableButtonElement) {\n const button = Object.values(tableButtons).find((btn) => tableButtonElement.hasAttribute(btn.attr));\n if (!button) {\n return;\n }\n\n modals.setTrigger(tableButtonElement);\n const data = button.getData(tableButtonElement);\n switch (data.type) {\n case 'rowMenu': {\n modals.showRowMenu(data.rowIndex);\n break;\n }\n case 'columnSettings': {\n modals.showColumnMenu(data.fieldId);\n break;\n }\n case 'newColumn': {\n modals.showColumnCreator();\n break;\n }\n case 'sort': {\n model?.sorting?.toggleSort(data.fieldId);\n break;\n }\n case 'saveDraftRow': {\n handleSaveDraftRow();\n break;\n }\n }\n return;\n }\n\n const controlSelector = Object.values(tableControls)\n .map((control) => `input[${control.attr}]`)\n .join(',');\n\n const controlElement = (event.target as HTMLElement).closest(controlSelector) as HTMLElement;\n if (controlElement) {\n const control = Object.values(tableControls).find((ctrl) => controlElement.hasAttribute(ctrl.attr));\n if (!control) {\n return;\n }\n\n const data = control.getData(controlElement);\n switch (data.type) {\n case 'checkbox': {\n if (data.header) {\n model?.selection.setSelection(model.selection.allRowsSeleted.value ? 'none' : 'all');\n } else {\n model?.selection.toggleSelectionForRowIndex(data.rowIndex);\n }\n break;\n }\n case 'switch': {\n if (model) {\n model.updateCellData({ row: data.rowIndex, col: data.colIndex }, (value) => !value);\n }\n break;\n }\n }\n }\n },\n [model, modals, dxGrid],\n );\n\n const handleFocus = useCallback<NonNullable<TableCellEditorProps['onFocus']>>(\n (increment, delta, cell) => {\n if (dxGrid && model) {\n if (cell?.plane === 'grid' && cell?.row >= model.getRowCount() - 1) {\n handleInsertRowResult(draftRowCount < 1 ? model.insertRow() : 'final');\n } else if (cell?.plane === 'frozenRowsEnd' && increment === 'row') {\n handleSaveDraftRow(cell.row);\n handleInsertRowResult(model.insertRow());\n } else {\n dxGrid.refocus(increment, delta);\n }\n }\n },\n [dxGrid, model],\n );\n\n const handleKeyDown = useCallback<NonNullable<GridContentProps['onKeyDown']>>(\n (event) => {\n if (!model?.features.dataEditable) {\n return;\n }\n\n const cell = closestCell(event.target);\n if (!model || !cell) {\n return;\n }\n\n // Handle Meta+C (Copy) and Meta+V (Paste) commands\n if (event.metaKey || event.ctrlKey) {\n switch (event.key) {\n case 'c': {\n // Copy focused cell's text content to clipboard\n try {\n const cellData = model.getCellData(cell);\n const textContent = cellData?.toString() ?? '';\n void navigator.clipboard.writeText(textContent);\n event.preventDefault();\n } catch (error) {\n console.warn('Failed to copy cell content:', error);\n }\n break;\n }\n case 'v': {\n // Paste clipboard content to focused cell\n event.preventDefault();\n void navigator.clipboard.readText().then((clipboardText) => {\n try {\n // Attempt to set the cell's content to clipboard content\n model.setCellData(cell, clipboardText);\n handleSave();\n } catch {\n // If validation fails, emit a DxEditRequest event with initialContent from clipboard\n // TODO(thure): Should `dx-grid` expose a method like this?\n const cellElement = (event.target as HTMLElement).closest(\n '[data-dx-grid-action=\"cell\"]',\n ) as HTMLElement;\n if (cellElement) {\n const rect = cellElement.getBoundingClientRect();\n const editRequest = new DxEditRequest({\n cellIndex: `${cell.plane},${cell.col},${cell.row}`,\n cellBox: {\n insetInlineStart: rect.left,\n insetBlockStart: rect.top,\n inlineSize: rect.width,\n blockSize: rect.height,\n },\n cellElement,\n initialContent: clipboardText,\n });\n cellElement.dispatchEvent(editRequest);\n }\n }\n });\n break;\n }\n }\n }\n\n switch (event.key) {\n case 'Backspace':\n case 'Delete': {\n try {\n model.setCellData(cell, undefined);\n event.preventDefault();\n } catch {\n // Delete results in a validation error; don’t prevent default so dx-grid can emit an edit request.\n }\n break;\n }\n }\n },\n [model, dxGrid, handleSave],\n );\n\n const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(\n (event) => {\n if (event.axis === 'col') {\n const columnIndex = parseInt(event.index, 10);\n model?.setColumnWidth(columnIndex, event.size);\n }\n },\n [model],\n );\n\n const handleWheel = useCallback(\n (event: WheelEvent) => {\n if (!ignoreAttention && !hasAttention) {\n event.stopPropagation();\n }\n },\n [hasAttention, ignoreAttention],\n );\n\n const handleNewColumn = useCallback(() => {\n const columns = model?.getColumnCount();\n if (dxGrid && columns) {\n dxGrid.scrollToColumn(columns - 1);\n }\n }, [model, dxGrid]);\n\n if (!model || !modals) {\n return <span role='none' className='attention-surface' />;\n }\n\n return (\n <Grid.Root id={model.id ?? 'table-grid'}>\n <TableValueEditor\n model={model}\n modals={modals}\n schema={schema}\n onFocus={handleFocus}\n onSave={handleSave}\n client={client}\n />\n <Grid.Content\n className={mx('[--dx-grid-base:var(--baseSurface)]', gridSeparatorInlineEnd, gridSeparatorBlockEnd)}\n frozen={frozen}\n columns={model.columnMeta.value}\n columnDefault={columnDefault}\n rowDefault={rowDefault}\n limitRows={model.getRowCount() ?? 0}\n limitColumns={model.projection.fields.length}\n overscroll='trap'\n onAxisResize={handleAxisResize}\n onClick={handleGridClick}\n onKeyDownCapture={handleKeyDown}\n onWheelCapture={handleWheel}\n ref={setDxGrid}\n />\n <RowActionsMenu model={model} modals={modals} />\n <ColumnActionsMenu model={model} modals={modals} />\n <ColumnSettings model={model} modals={modals} onNewColumn={handleNewColumn} />\n <CreateRefPanel model={model} modals={modals} />\n </Grid.Root>\n );\n },\n);\n\nexport const Table = {\n Root: TableRoot,\n Main: TableMain,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Completion } from '@codemirror/autocomplete';\nimport { EditorView } from '@codemirror/view';\nimport { type Schema } from 'effect/Schema';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { debounce } from '@dxos/async';\nimport type { Client } from '@dxos/client';\nimport { FormatEnum, TypeEnum } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { type DxGridAxis, type DxGridPosition } from '@dxos/lit-grid';\nimport { createMarkdownExtensions } from '@dxos/react-ui-editor';\nimport {\n type EditorBlurHandler,\n type EditorKeyEvent,\n type EditorKeyOrBlurHandler,\n GridCellEditor,\n type GridCellEditorProps,\n type GridScopedProps,\n editorKeys,\n parseCellIndex,\n useGridContext,\n} from '@dxos/react-ui-grid';\nimport { createLinks, tagPicker } from '@dxos/react-ui-tag-picker';\nimport { type FieldProjection } from '@dxos/schema';\n\nimport { type ModalController, type TableModel } from '../../model';\n\nimport { CellValidationMessage } from './CellValidationMessage';\nimport { FormCellEditor } from './FormCellEditor';\n\n/**\n * Option to create new object/value.\n */\nexport type QueryResult = Pick<Completion, 'label'> & { data: any };\n\nexport type TableCellEditorProps = {\n model?: TableModel;\n modals?: ModalController;\n schema?: Schema.AnyNoContext;\n onFocus?: (axis?: DxGridAxis, delta?: -1 | 0 | 1, cell?: DxGridPosition) => void;\n onSave?: () => void;\n client?: Client;\n};\n\nconst adaptValidationMessage = (message: string | null) =>\n message ? (message.endsWith('is missing') ? 'Can’t be blank' : message) : null;\n\nexport const TableValueEditor = ({\n model,\n modals,\n schema,\n onFocus,\n onSave,\n client,\n __gridScope,\n}: GridScopedProps<TableCellEditorProps>) => {\n const { editing } = useGridContext('TableValueEditor', __gridScope);\n\n const fieldProjection = useMemo<FieldProjection | undefined>(() => {\n if (!model || !editing) {\n return;\n }\n\n const { col } = parseCellIndex(editing.index);\n const field = model.projection.fields[col];\n const fieldProjection = model.projection.getFieldProjection(field.id);\n invariant(fieldProjection);\n return fieldProjection;\n }, [model, editing]);\n\n if (\n fieldProjection?.props.type === TypeEnum.Array ||\n fieldProjection?.props.format === FormatEnum.SingleSelect ||\n fieldProjection?.props.format === FormatEnum.Ref\n // TODO(thure): Support `FormatEnum.MultiSelect`\n ) {\n return (\n <FormCellEditor\n fieldProjection={fieldProjection}\n model={model}\n schema={schema}\n __gridScope={__gridScope}\n onSave={onSave}\n client={client}\n modals={modals}\n />\n );\n }\n\n // For all other types, use the existing cell editor\n return <TableCellEditor model={model} modals={modals} onFocus={onFocus} onSave={onSave} __gridScope={__gridScope} />;\n};\n\nconst editorSlots = { scroll: { className: '!plb-[--dx-grid-cell-editor-padding-block]' } };\n\nexport const TableCellEditor = ({\n model,\n modals,\n onFocus,\n onSave,\n __gridScope,\n}: GridScopedProps<TableCellEditorProps>) => {\n const { editing, setEditing } = useGridContext('TableCellEditor', __gridScope);\n const suppressNextBlur = useRef(false);\n const [validationError, setValidationError] = useState<string | null>(null);\n const [validationVariant, setValidationVariant] = useState<'error' | 'warning'>('error');\n\n const fieldProjection = useMemo<FieldProjection | undefined>(() => {\n if (!model || !editing) {\n return;\n }\n\n const { col } = parseCellIndex(editing.index);\n const field = model.projection.fields[col];\n const fieldProjection = model.projection.getFieldProjection(field.id);\n invariant(fieldProjection);\n return fieldProjection;\n }, [model, editing]);\n\n const handleEnter = useCallback(\n async (value: any) => {\n if (!model || !editing) {\n return;\n }\n\n const cell = parseCellIndex(editing.index);\n const validationResult = await model.validateCellData(cell, value);\n\n if (validationResult.valid) {\n setValidationError(null);\n model.setCellData(cell, value);\n onFocus?.();\n setEditing(null);\n onSave?.();\n } else {\n setValidationError(adaptValidationMessage(validationResult.error));\n setValidationVariant('error');\n }\n },\n [model, editing, onFocus, setEditing],\n );\n\n const handleBlur = useCallback<EditorBlurHandler>(\n async (value) => {\n if (suppressNextBlur.current) {\n suppressNextBlur.current = false;\n } else if (model && editing) {\n // Save silently if validation passes\n const cell = parseCellIndex(editing.index);\n if (value !== undefined) {\n const result = await model.validateCellData(cell, value);\n if (result.valid) {\n setValidationError(null);\n model.setCellData(cell, value);\n setEditing(null);\n onSave?.();\n }\n }\n }\n },\n [model, editing],\n );\n\n const handleClose = useCallback<EditorKeyOrBlurHandler>(\n async (value, event) => {\n if (!model || !editing || !fieldProjection) {\n return;\n }\n\n const cell = parseCellIndex(editing.index);\n if (value !== undefined) {\n // Pre-commit validation check.\n const result = await model.validateCellData(cell, value);\n\n if (result.valid) {\n suppressNextBlur.current = true;\n setValidationError(null);\n model.setCellData(cell, value);\n setEditing(null);\n onSave?.();\n if (event && onFocus) {\n onFocus(determineNavigationAxis(event), determineNavigationDelta(event), cell);\n }\n } else {\n setValidationError(result.error);\n setValidationVariant('error');\n }\n } else {\n suppressNextBlur.current = true;\n setValidationError(null);\n setEditing(null);\n onSave?.();\n if (event && onFocus) {\n onFocus(determineNavigationAxis(event), determineNavigationDelta(event));\n }\n }\n },\n [model, editing, onFocus, fieldProjection, setEditing, onSave],\n );\n\n const extensions = useMemo(() => {\n if (!fieldProjection) {\n return [];\n }\n\n const extensions = [\n editorKeys({\n onClose: handleClose,\n ...(editing?.initialContent && { onNav: handleClose }),\n }),\n ];\n\n const format = fieldProjection.props.format;\n if (format === FormatEnum.SingleSelect || format === FormatEnum.MultiSelect) {\n // TODO(ZaymonFC): Reconcile this with the TagPicker component?\n const options = fieldProjection.props.options || [];\n const mode = format === FormatEnum.SingleSelect ? ('single-select' as const) : ('multi-select' as const);\n\n // Add markdown extensions needed by tag picker.\n extensions.push(createMarkdownExtensions());\n extensions.push(\n tagPicker({\n mode,\n keymap: false,\n onSearch: (text, selectedIds) => {\n return options\n .filter(\n (option) =>\n selectedIds.indexOf(option.id) === -1 &&\n (text.length === 0 || option.title.toLowerCase().includes(text.toLowerCase())),\n )\n .map((option) => ({\n id: option.id,\n label: option.title,\n hue: option.color as any,\n }));\n },\n onUpdate: (ids) => {\n if (model && editing) {\n if (ids.length === 0) {\n return;\n }\n if (mode === 'single-select') {\n void handleEnter(ids[0]);\n } else {\n void handleEnter(ids);\n }\n }\n },\n }),\n );\n }\n\n // Add validation extension to handle content changes.\n if (model && editing) {\n extensions.push(\n EditorView.updateListener.of(\n debounce((update) => {\n const content = update.state.doc.toString();\n const cell = parseCellIndex(editing.index);\n\n // Perform validation on content change.\n void model.validateCellData(cell, content).then((result) => {\n if (result.valid) {\n setValidationError(null);\n } else {\n setValidationError(result.error);\n setValidationVariant('error');\n }\n });\n }, 10),\n ),\n );\n }\n\n return extensions;\n }, [model, modals, editing, fieldProjection, handleClose]);\n\n const getCellContent = useCallback<GridCellEditorProps['getCellContent']>(() => {\n if (model && editing) {\n const cell = parseCellIndex(editing.index);\n const { col } = cell;\n const field = model.projection.fields[col];\n const fieldProjection = model.projection.getFieldProjection(field.id);\n\n if (\n fieldProjection?.props.format === FormatEnum.SingleSelect ||\n fieldProjection?.props.format === FormatEnum.MultiSelect\n ) {\n const value = model.getCellData(cell);\n if (value !== undefined) {\n const options = fieldProjection.props.options || [];\n if (fieldProjection.props.format === FormatEnum.MultiSelect) {\n const tagItems = value\n .split(',')\n .map((id: string) => {\n const option = options.find((o) => o.id === id);\n if (option) {\n return {\n id,\n label: option.title,\n hue: option.color as any,\n };\n }\n return undefined;\n })\n .filter((item: any): item is { id: any; label: string; hue: any } => item !== undefined);\n\n return createLinks(tagItems);\n } else {\n const option = options.find((o) => o.id === value);\n\n if (option) {\n const tagItem = {\n id: value,\n label: option.title,\n hue: option.color as any,\n };\n\n return createLinks([tagItem]);\n }\n }\n }\n\n return '';\n }\n\n const value = model.getCellData(cell);\n return value !== undefined ? String(value) : '';\n }\n }, [model, editing]);\n\n return (\n <>\n <CellValidationMessage validationError={validationError} variant={validationVariant} __gridScope={__gridScope} />\n <GridCellEditor extensions={extensions} getCellContent={getCellContent} onBlur={handleBlur} slots={editorSlots} />\n </>\n );\n};\n\nconst determineNavigationAxis = ({ key }: EditorKeyEvent): 'col' | 'row' | undefined => {\n switch (key) {\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Enter': {\n return 'row';\n }\n\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'Tab':\n return 'col';\n }\n};\n\nconst determineNavigationDelta = ({ key, shift }: EditorKeyEvent): -1 | 1 => {\n switch (key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n return -1;\n\n case 'ArrowDown':\n case 'ArrowRight':\n return 1;\n }\n\n return shift ? -1 : 1;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type GridScopedProps, useGridContext } from '@dxos/react-ui-grid';\n\nexport type CellValidationMessageProps = {\n validationError: string | null;\n variant?: 'error' | 'warning';\n};\n\nexport const CellValidationMessage = ({\n validationError,\n variant = 'error',\n __gridScope,\n}: GridScopedProps<CellValidationMessageProps>) => {\n const { editing, editBox: box } = useGridContext('GridSheetCellEditor', __gridScope);\n\n if (!editing || !validationError) {\n return null;\n }\n\n const bgClass = variant === 'error' ? 'bg-errorSurface' : 'bg-warningSurface';\n const textClass = variant === 'error' ? 'text-errorSurfaceText' : 'text-warningSurfaceText';\n\n return (\n <div\n role='none'\n className={`absolute ${bgClass} ${textClass} rounded-bs-sm text-xs p-1`}\n style={{\n ...{ '--dx-gridCellWidth': `${box?.inlineSize ?? 200}px` },\n zIndex: 10,\n insetBlockEnd: `calc(100% - ${box.insetBlockStart}px)`,\n insetInlineStart: box.insetInlineStart,\n inlineSize: box.inlineSize,\n }}\n >\n {validationError}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Schema } from 'effect';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Filter, Obj } from '@dxos/echo';\nimport { Ref, type TypeAnnotation, getValue } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { getSnapshot } from '@dxos/live-object';\nimport { type Client } from '@dxos/react-client';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Popover } from '@dxos/react-ui';\nimport { Form, type FormProps } from '@dxos/react-ui-form';\nimport { cellQuery, parseCellIndex, useGridContext } from '@dxos/react-ui-grid';\nimport { type FieldProjection } from '@dxos/schema';\nimport { getDeep, isNotFalsy, setDeep } from '@dxos/util';\n\nimport { type ModalController, type TableModel } from '../../model';\nimport { translationKey } from '../../translations';\nimport { narrowSchema } from '../../util';\n\ntype FormCellEditorProps = {\n fieldProjection: FieldProjection;\n model?: TableModel;\n schema?: Schema.Schema.AnyNoContext;\n onSave?: () => void;\n client?: Client;\n modals?: ModalController;\n __gridScope: any;\n} & Omit<FormProps<any>, 'values' | 'schema'>;\n\nconst createOptionLabel = ['create new object label', { ns: translationKey }] as [string, { ns: string }];\n\nexport const FormCellEditor = ({\n fieldProjection,\n model,\n schema,\n onSave,\n client,\n modals,\n __gridScope,\n ...formProps\n}: FormCellEditorProps) => {\n const { editing: contextEditing, setEditing, id: gridId } = useGridContext('ArrayEditor', __gridScope);\n const [editing, setLocalEditing] = useState(false);\n const anchorRef = useRef<HTMLButtonElement | null>(null);\n\n const getSchema = useCallback(\n (typeAnnotation: TypeAnnotation) => {\n const space = getSpace(model!.view);\n invariant(space);\n\n let schema;\n if (client) {\n schema = client.graph.schemaRegistry.getSchema(typeAnnotation.typename);\n }\n if (!schema) {\n schema = space.db.schemaRegistry.getSchema(typeAnnotation.typename);\n }\n return { space, schema };\n },\n [client, model],\n );\n\n const handleQueryRefOptions = useCallback(\n async (typeAnnotation: TypeAnnotation) => {\n const { schema, space } = getSchema(typeAnnotation);\n if (model && schema && space) {\n const { objects } = await space.db.query(Filter.type(schema)).run();\n return objects\n .map((obj) => {\n return {\n dxn: Obj.getDXN(obj),\n label: getValue(obj, fieldProjection.field.referencePath!) || obj.id.toString(),\n };\n })\n .filter(isNotFalsy);\n }\n\n return [];\n },\n [client, model],\n );\n\n const originalRow = useMemo(() => {\n if (model && contextEditing) {\n const cell = parseCellIndex(contextEditing.index);\n\n // Check if this is a draft cell and get the appropriate row data\n if (model.isDraftCell(cell)) {\n const draftRow = model.draftRows.value[cell.row];\n invariant(draftRow);\n return draftRow.data;\n } else {\n const row = model.getRowAt(cell.row);\n invariant(row);\n return row;\n }\n }\n\n return undefined;\n }, [model, contextEditing]);\n\n const handleSave = useCallback(\n (values: any) => {\n const path = fieldProjection.field.path;\n const value = getDeep(values, [path]);\n setDeep(originalRow, [path], value);\n contextEditing?.cellElement?.focus();\n setEditing(null);\n setLocalEditing(false);\n onSave?.();\n },\n [fieldProjection.field.path, onSave, contextEditing, originalRow],\n );\n\n const handleCreate = useCallback(\n (object: any) => {\n const ref = Ref.make(object);\n const path = fieldProjection.field.path;\n setDeep(originalRow, [path], ref);\n contextEditing?.cellElement?.focus();\n setEditing(null);\n setLocalEditing(false);\n onSave?.();\n },\n [fieldProjection.field.path, onSave, contextEditing, originalRow],\n );\n\n const handleCreateFromQuery = useCallback(\n async (typeAnnotation: TypeAnnotation, query: string) => {\n if (model && modals && contextEditing?.index) {\n setLocalEditing(false);\n modals.openCreateRef(\n typeAnnotation.typename,\n document.querySelector(cellQuery(contextEditing.index, gridId)),\n {\n [fieldProjection.field.referencePath!]: query,\n },\n handleCreate,\n );\n }\n },\n [model, modals, client, contextEditing?.index, gridId, fieldProjection, handleSave],\n );\n\n useEffect(() => {\n if (contextEditing && contextEditing.cellElement) {\n anchorRef.current = (contextEditing.cellElement as HTMLElement).querySelector(\n '.dx-grid__cell__content',\n ) as HTMLButtonElement;\n setLocalEditing(true);\n } else {\n anchorRef.current = null;\n setLocalEditing(false);\n }\n }, [contextEditing]);\n\n const narrowedSchema = useMemo(() => {\n if (!schema) {\n return undefined;\n }\n return narrowSchema(schema, [fieldProjection.field.path]);\n }, [JSON.stringify(schema), fieldProjection.field.path]); // TODO(burdon): Avoid stringify.\n\n // NOTE: Important to get a snapshot to eject from the live object.\n const formValues = useMemo(() => (originalRow ? getSnapshot(originalRow) : {}), [originalRow]);\n\n const handleOpenChange = useCallback((nextOpen: boolean) => {\n if (nextOpen === false) {\n setEditing(null);\n onSave?.();\n }\n setLocalEditing(nextOpen);\n }, []);\n\n if (!editing) {\n return null;\n }\n\n return (\n <Popover.Root open={editing} onOpenChange={handleOpenChange}>\n <Popover.VirtualTrigger virtualRef={anchorRef} />\n <Popover.Portal>\n <Popover.Content tabIndex={-1} classNames='popover-card-width density-fine'>\n <Popover.Arrow />\n <Popover.Viewport>\n <Form\n autoFocus\n values={formValues}\n schema={narrowedSchema as any}\n onSave={handleSave}\n {...formProps}\n onQueryRefOptions={handleQueryRefOptions}\n onCreateFromQuery={handleCreateFromQuery}\n createOptionIcon='ph--plus--regular'\n createOptionLabel={createOptionLabel}\n />\n </Popover.Viewport>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { DropdownMenu, useTranslation } from '@dxos/react-ui';\n\nimport { type ModalController, type TableModel } from '../../model';\nimport { translationKey } from '../../translations';\n\ntype ColumnActionsMenuProps = { model: TableModel; modals: ModalController };\n\nexport const ColumnActionsMenu = ({ model, modals }: ColumnActionsMenuProps) => {\n const { t } = useTranslation(translationKey);\n const state = modals.state.value;\n if (state?.type !== 'column') {\n return null;\n }\n\n const currentSort = model.sorting?.sorting;\n const isCurrentColumnSorted = currentSort?.fieldId === state.fieldId;\n\n return (\n <DropdownMenu.Root modal={false} open={true} onOpenChange={modals.close}>\n <DropdownMenu.VirtualTrigger virtualRef={modals.trigger} />\n <DropdownMenu.Portal>\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {(!isCurrentColumnSorted || currentSort?.direction === 'asc') && (\n <DropdownMenu.Item\n data-testid='column-sort-descending'\n onClick={() => model.sorting?.setSort(state.fieldId, 'desc')}\n >\n {t('column action sort descending')}\n </DropdownMenu.Item>\n )}\n {(!isCurrentColumnSorted || currentSort?.direction === 'desc') && (\n <DropdownMenu.Item\n data-testid='column-sort-ascending'\n onClick={() => model.sorting?.setSort(state.fieldId, 'asc')}\n >\n {t('column action sort ascending')}\n </DropdownMenu.Item>\n )}\n {isCurrentColumnSorted && (\n <DropdownMenu.Item data-testid='column-clear-sort' onClick={() => model.sorting?.clearSort()}>\n {t('column action clear sorting')}\n </DropdownMenu.Item>\n )}\n {model.getColumnCount() > 1 && model.features.schemaEditable && (\n <DropdownMenu.Item data-testid='column-delete' onClick={() => model.deleteColumn(state.fieldId)}>\n {t('column action delete')}\n </DropdownMenu.Item>\n )}\n {model.features.schemaEditable && (\n <DropdownMenu.Item data-testid='column-settings' onClick={() => modals.openColumnSettings()}>\n {t('column action settings')}\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\n// TODO(burdon): Remove dependency on echo-db.\nimport { type SchemaRegistry } from '@dxos/echo-db';\nimport { Popover } from '@dxos/react-ui';\nimport { FieldEditor } from '@dxos/react-ui-form';\nimport { type FieldType } from '@dxos/schema';\n\nimport { type ModalController, type TableModel } from '../../model';\n\ntype ColumnSettingsProps = {\n registry?: SchemaRegistry;\n model?: TableModel;\n modals: ModalController;\n onNewColumn: () => void;\n};\n\nexport const ColumnSettings = ({ registry, model, modals, onNewColumn }: ColumnSettingsProps) => {\n const [newField, setNewField] = useState<FieldType>();\n const state = modals.state.value;\n\n useEffect(() => {\n if (state?.type === 'columnSettings' && state.mode.type === 'create' && model?.projection) {\n setNewField(model.projection.createFieldProjection());\n requestAnimationFrame(() => {\n onNewColumn();\n });\n } else {\n setNewField(undefined);\n }\n }, [model?.projection, state]);\n\n const existingField = useMemo(() => {\n if (state?.type === 'columnSettings') {\n const { mode } = state;\n if (mode.type === 'edit') {\n return model?.projection?.fields.find((f) => f.id === mode.fieldId);\n }\n }\n return undefined;\n }, [model?.projection?.fields, state]);\n\n const field = existingField ?? newField;\n\n const handleSave = useCallback(() => {\n modals.close();\n }, [modals]);\n\n const handleCancel = useCallback(() => {\n if (state?.type === 'columnSettings' && state.mode.type === 'create' && newField) {\n model?.projection.deleteFieldProjection(newField.id);\n }\n }, [model?.projection, state, newField]);\n\n if (!model?.projection || !field) {\n return null;\n }\n\n return (\n <Popover.Root modal={false} open={state?.type === 'columnSettings'}>\n <Popover.VirtualTrigger virtualRef={modals.trigger} />\n <Popover.Portal>\n <Popover.Content classNames='md:is-64'>\n <Popover.Viewport>\n <FieldEditor\n projection={model.projection}\n field={field}\n registry={registry}\n onSave={handleSave}\n onCancel={handleCancel}\n />\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema } from 'effect';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Type } from '@dxos/echo';\nimport { live } from '@dxos/live-object';\n// TODO(wittjosiah): Remove dependency on react-client.\nimport { useClient } from '@dxos/react-client';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Popover } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { type GridScopedProps, useGridContext } from '@dxos/react-ui-grid';\n\nimport { type ModalController, type TableModel } from '../../model';\n\nexport type CreateRefPanelProps = { model?: TableModel; modals: ModalController };\n\n// TODO(burdon): Factor out Space dependency (to plugin?)\nexport const CreateRefPanel = ({ model, modals, __gridScope }: GridScopedProps<CreateRefPanelProps>) => {\n const { id: gridId } = useGridContext('TableCellEditor', __gridScope);\n const client = useClient();\n const space = model && getSpace(model?.view);\n const state = modals.state.value;\n\n const getSchema = useCallback(() => {\n if (!space || state?.type !== 'createRefPanel') {\n return;\n }\n\n const staticSchema = client.graph.schemaRegistry.schemas.find(\n (schema) => Type.getTypename(schema) === state.typename,\n );\n if (staticSchema) {\n return staticSchema;\n }\n\n const [schema] = space.db.schemaRegistry.query({ typename: state.typename }).runSync();\n return schema;\n }, [space, state]);\n\n const schema = useMemo<Schema.Schema<any> | undefined>(() => {\n const schema = getSchema();\n if (!schema) {\n return;\n }\n\n const omit = Schema.omit<any, any, ['id']>('id');\n return omit(schema);\n }, [getSchema]);\n\n const handleSave = useCallback(\n (values: any) => {\n if (!model || !space || state?.type !== 'createRefPanel') {\n return;\n }\n\n const schema = getSchema();\n if (schema) {\n const obj = space.db.add(live(schema, values));\n state.onCreate?.(obj);\n }\n void modals.close();\n },\n [model, modals, space, state],\n );\n\n const handleCancel = useCallback(() => {\n if (model) {\n modals.close();\n }\n }, [modals]);\n\n if (!model?.projection) {\n return null;\n }\n\n return (\n <Popover.Root\n modal={false}\n open={state?.type === 'createRefPanel' && !!schema}\n onOpenChange={(nextOpen) => {\n if (model && !nextOpen) {\n return modals.close();\n }\n }}\n >\n <Popover.VirtualTrigger virtualRef={modals.trigger} />\n <Popover.Portal>\n <Popover.Content classNames='md:is-64' data-grid={gridId}>\n <Popover.Viewport>\n {state?.type === 'createRefPanel' && schema && (\n <Form schema={schema} values={state.initialValues ?? {}} onSave={handleSave} onCancel={handleCancel} />\n )}\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { DropdownMenu, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { type ModalController, type TableModel } from '../../model';\nimport { translationKey } from '../../translations';\n\ntype RowActionsMenuProps = { model: TableModel; modals: ModalController };\n\nexport const RowActionsMenu = ({ model, modals }: RowActionsMenuProps) => {\n const { t } = useTranslation(translationKey);\n const hasSelection = model.selection.hasSelection.value;\n const state = modals.state.value;\n if (state?.type !== 'row') {\n return null;\n }\n return (\n <DropdownMenu.Root modal={false} open={true} onOpenChange={modals.close}>\n <DropdownMenu.VirtualTrigger virtualRef={modals.trigger} />\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {model.features.dataEditable !== false && (\n <DropdownMenu.Item data-testid='row-menu-delete' onClick={() => model.deleteRow(state.rowIndex)}>\n {t(hasSelection ? 'bulk delete row label' : 'delete row label')}\n </DropdownMenu.Item>\n )}\n {/* Custom actions */}\n {model.rowActions?.map((action) => (\n <DropdownMenu.Item\n key={action.id}\n data-testid={`row-action-${action.id}`}\n onClick={() => {\n modals.close();\n model.handleRowAction(action.id, state.rowIndex);\n }}\n >\n {toLocalizedString(action.label, t)}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Schema } from 'effect';\nimport React, { useCallback, useMemo, useRef } from 'react';\n\nimport { type JsonSchemaType } from '@dxos/echo-schema';\nimport { type ThemedClassName, useDefaultValue } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useTableModel } from '../../hooks';\nimport { type TableFeatures, TablePresentation, type TableRowAction } from '../../model';\nimport { type TablePropertyDefinition, getBaseSchema, makeDynamicTable } from '../../util';\n\nimport { Table, type TableController } from './Table';\n\ntype DynamicTableProps = ThemedClassName<{\n name?: string; // TODO(burdon): Remove?\n rows: any[];\n properties?: TablePropertyDefinition[];\n jsonSchema?: JsonSchemaType;\n schema?: Schema.Schema.AnyNoContext;\n features?: Partial<TableFeatures>;\n rowActions?: TableRowAction[];\n onRowClick?: (row: any) => void;\n onRowAction?: (actionId: string, datum: any) => void;\n}>;\n\n/**\n * Properties define both the schema and display characteristics of the table columns.\n */\n// TODO(burdon): Instead of creating component variants, create helpers/hooks that normalize the props.\n// TODO(burdon): Warning: Cannot update a component (`DynamicTable`) while rendering a different component (`DynamicTable`).\nexport const DynamicTable = ({\n classNames,\n name = 'example.com/dynamic-table', // Rmove default or make random; this will lead to type collisions.\n rows,\n properties,\n jsonSchema: _jsonSchema,\n schema,\n rowActions,\n onRowClick,\n onRowAction,\n ...props\n}: DynamicTableProps) => {\n // TODO(burdon): Remove variance from the props (should be normalized externally; possibly via hooks).\n const { typename, jsonSchema } = useMemo(\n () => getBaseSchema({ typename: name, properties, jsonSchema: _jsonSchema, schema }),\n [name, properties, _jsonSchema, schema],\n );\n\n const { projection, view } = useMemo(\n () => makeDynamicTable({ typename, jsonSchema, properties }),\n [typename, jsonSchema, properties],\n );\n\n const tableRef = useRef<TableController>(null);\n const handleCellUpdate = useCallback((cell: any) => {\n tableRef.current?.update?.(cell);\n }, []);\n\n const handleRowOrderChange = useCallback(() => {\n tableRef.current?.update?.();\n }, []);\n\n const features = useDefaultValue(\n props.features,\n () =>\n ({\n selection: { enabled: false },\n dataEditable: false,\n }) as const,\n );\n\n const model = useTableModel({\n rows,\n view,\n schema: jsonSchema,\n projection,\n features,\n rowActions,\n onCellUpdate: handleCellUpdate,\n onRowOrderChange: handleRowOrderChange,\n onRowAction,\n });\n\n const presentation = useMemo(() => {\n if (model) {\n return new TablePresentation(model);\n }\n }, [model]);\n\n // TODO(burdon): Do we need the outer divs?\n return (\n <div role='none' className={mx('is-full bs-full grow grid', classNames)}>\n <div role='none' className='grid min-bs-0 overflow-hidden'>\n <Table.Root>\n <Table.Main\n ref={tableRef}\n model={model}\n presentation={presentation}\n ignoreAttention\n onRowClick={onRowClick}\n />\n </Table.Root>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport React, { useMemo } from 'react';\n\nimport { live } from '@dxos/live-object';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport {\n type ActionGraphEdges,\n type ActionGraphNodes,\n type ActionGraphProps,\n type MenuAction,\n MenuProvider,\n ToolbarMenu,\n createGapSeparator,\n createMenuAction,\n useMenuActions,\n} from '@dxos/react-ui-menu';\nimport { rxFromSignal } from '@dxos/react-ui-menu';\n\nimport { translationKey } from '../../translations';\n\nexport type TableToolbarActionProperties = { type: TableToolbarActionType };\n\nexport type TableToolbarAction = MenuAction<TableToolbarActionProperties>;\n\nexport type TableToolbarActionType = 'add-row' | 'comment' | 'save-view';\n\ntype TableToolbarState = Partial<{ viewDirty: boolean }>;\n\nexport type TableToolbarProps = ThemedClassName<\n TableToolbarState & {\n onAdd: () => void;\n onSave: () => void;\n attendableId?: string;\n customActions?: Rx.Rx<ActionGraphProps>;\n }\n>;\n\nconst createTableToolbarActions = ({\n state,\n onAdd,\n onSave,\n customActions,\n}: {\n state: TableToolbarState;\n onAdd: () => void;\n onSave: () => void;\n customActions?: Rx.Rx<ActionGraphProps>;\n}) =>\n Rx.make((get) => {\n const add = createMenuAction<TableToolbarActionProperties>('add-row', onAdd, {\n type: 'add-row' as const,\n icon: 'ph--plus--regular',\n label: ['add row', { ns: translationKey }],\n testId: 'table.toolbar.add-row',\n });\n const save = createMenuAction<TableToolbarActionProperties>('save-view', onSave, {\n type: 'save-view' as const,\n icon: 'ph--floppy-disk--regular',\n label: ['save view label', { ns: translationKey }],\n testId: 'table.toolbar.save-view',\n iconOnly: false,\n hidden: get(rxFromSignal(() => !state.viewDirty)),\n });\n const gap = createGapSeparator();\n const nodes: ActionGraphNodes = [add, save, ...gap.nodes];\n const edges: ActionGraphEdges = nodes.map(({ id: target }) => ({ source: 'root', target }));\n if (customActions) {\n const custom = get(customActions);\n nodes.push(...custom.nodes);\n edges.push(...custom.edges);\n }\n return {\n nodes,\n edges,\n };\n });\n\nexport const TableToolbar = ({\n classNames,\n viewDirty,\n attendableId,\n onAdd,\n onSave,\n customActions,\n}: TableToolbarProps) => {\n const state = useMemo(() => live<TableToolbarState>({ viewDirty }), []);\n const actionsCreator = useMemo(\n () => createTableToolbarActions({ state, onAdd, onSave, customActions }),\n [state, onAdd, onSave, customActions],\n );\n const menu = useMenuActions(actionsCreator);\n\n return (\n <MenuProvider {...menu} attendableId={attendableId}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["translationKey", "translations", "React", "forwardRef", "useCallback", "useEffect", "useImperativeHandle", "useMemo", "useState", "useAttention", "Grid", "closestCell", "gridSeparatorBlockEnd", "gridSeparatorInlineEnd", "DxEditRequest", "mx", "EditorView", "React", "useCallback", "useMemo", "useRef", "useState", "debounce", "FormatEnum", "TypeEnum", "invariant", "createMarkdownExtensions", "GridCellEditor", "editorKeys", "parseCellIndex", "useGridContext", "createLinks", "tagPicker", "React", "useGridContext", "CellValidationMessage", "validationError", "variant", "__gridScope", "editing", "editBox", "box", "useGridContext", "bgClass", "textClass", "div", "role", "className", "style", "inlineSize", "zIndex", "insetBlockEnd", "insetBlockStart", "insetInlineStart", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Filter", "Obj", "Ref", "getValue", "invariant", "getSnapshot", "getSpace", "Popover", "Form", "cellQuery", "parseCellIndex", "useGridContext", "getDeep", "isNotFalsy", "setDeep", "createOptionLabel", "ns", "translationKey", "FormCellEditor", "fieldProjection", "model", "schema", "onSave", "client", "modals", "__gridScope", "formProps", "editing", "contextEditing", "setEditing", "id", "gridId", "useGridContext", "setLocalEditing", "useState", "anchorRef", "useRef", "getSchema", "useCallback", "typeAnnotation", "space", "getSpace", "view", "invariant", "graph", "schemaRegistry", "typename", "db", "handleQueryRefOptions", "objects", "query", "Filter", "type", "run", "map", "obj", "dxn", "Obj", "getDXN", "label", "getValue", "field", "referencePath", "toString", "filter", "isNotFalsy", "originalRow", "useMemo", "cell", "parseCellIndex", "index", "isDraftCell", "draftRow", "draftRows", "value", "row", "data", "getRowAt", "undefined", "handleSave", "values", "path", "getDeep", "setDeep", "cellElement", "focus", "handleCreate", "object", "ref", "Ref", "make", "handleCreateFromQuery", "openCreateRef", "document", "querySelector", "cellQuery", "useEffect", "current", "narrowedSchema", "narrowSchema", "JSON", "stringify", "formValues", "getSnapshot", "handleOpenChange", "nextOpen", "React", "Popover", "Root", "open", "onOpenChange", "VirtualTrigger", "virtualRef", "Portal", "Content", "tabIndex", "classNames", "Arrow", "Viewport", "Form", "autoFocus", "onQueryRefOptions", "onCreateFromQuery", "createOptionIcon", "adaptValidationMessage", "message", "endsWith", "TableValueEditor", "model", "modals", "schema", "onFocus", "onSave", "client", "__gridScope", "editing", "useGridContext", "fieldProjection", "useMemo", "col", "parseCellIndex", "index", "field", "projection", "fields", "getFieldProjection", "id", "invariant", "props", "type", "TypeEnum", "Array", "format", "FormatEnum", "SingleSelect", "Ref", "React", "FormCellEditor", "TableCellEditor", "editorSlots", "scroll", "className", "setEditing", "suppressNextBlur", "useRef", "validationError", "setValidationError", "useState", "validationVariant", "setValidationVariant", "handleEnter", "useCallback", "value", "cell", "validationResult", "validateCellData", "valid", "setCellData", "error", "handleBlur", "current", "undefined", "result", "handleClose", "event", "determineNavigationAxis", "determineNavigationDelta", "extensions", "editorKeys", "onClose", "initialContent", "onNav", "MultiSelect", "options", "mode", "push", "createMarkdownExtensions", "tagPicker", "keymap", "onSearch", "text", "selectedIds", "filter", "option", "indexOf", "length", "title", "toLowerCase", "includes", "map", "label", "hue", "color", "onUpdate", "ids", "EditorView", "updateListener", "of", "debounce", "update", "content", "state", "doc", "toString", "then", "getCellContent", "getCellData", "tagItems", "split", "find", "o", "item", "createLinks", "tagItem", "String", "CellValidationMessage", "variant", "GridCellEditor", "onBlur", "slots", "key", "shift", "React", "DropdownMenu", "useTranslation", "ColumnActionsMenu", "model", "modals", "t", "useTranslation", "translationKey", "state", "value", "type", "currentSort", "sorting", "isCurrentColumnSorted", "fieldId", "React", "DropdownMenu", "Root", "modal", "open", "onOpenChange", "close", "VirtualTrigger", "virtualRef", "trigger", "Portal", "Content", "Viewport", "direction", "Item", "data-testid", "onClick", "setSort", "clearSort", "getColumnCount", "features", "schemaEditable", "deleteColumn", "openColumnSettings", "Arrow", "React", "useCallback", "useEffect", "useMemo", "useState", "Popover", "FieldEditor", "ColumnSettings", "registry", "model", "modals", "onNewColumn", "newField", "setNewField", "useState", "state", "value", "useEffect", "type", "mode", "projection", "createFieldProjection", "requestAnimationFrame", "undefined", "existingField", "useMemo", "fields", "find", "f", "id", "fieldId", "field", "handleSave", "useCallback", "close", "handleCancel", "deleteFieldProjection", "React", "Popover", "Root", "modal", "open", "VirtualTrigger", "virtualRef", "trigger", "Portal", "Content", "classNames", "Viewport", "FieldEditor", "onSave", "onCancel", "Arrow", "Schema", "React", "useCallback", "useMemo", "Type", "live", "useClient", "getSpace", "Popover", "Form", "useGridContext", "CreateRefPanel", "model", "modals", "__gridScope", "id", "gridId", "useGridContext", "client", "useClient", "space", "getSpace", "view", "state", "value", "getSchema", "useCallback", "type", "staticSchema", "graph", "schemaRegistry", "schemas", "find", "schema", "Type", "getTypename", "typename", "db", "query", "runSync", "useMemo", "omit", "Schema", "handleSave", "values", "obj", "add", "live", "onCreate", "close", "handleCancel", "projection", "React", "Popover", "Root", "modal", "open", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "trigger", "Portal", "Content", "classNames", "data-grid", "Viewport", "Form", "initialValues", "onSave", "onCancel", "Arrow", "React", "DropdownMenu", "toLocalizedString", "useTranslation", "RowActionsMenu", "model", "modals", "t", "useTranslation", "translationKey", "hasSelection", "selection", "value", "state", "type", "React", "DropdownMenu", "Root", "modal", "open", "onOpenChange", "close", "VirtualTrigger", "virtualRef", "trigger", "Content", "Viewport", "features", "dataEditable", "Item", "data-testid", "onClick", "deleteRow", "rowIndex", "rowActions", "map", "action", "key", "id", "handleRowAction", "toLocalizedString", "label", "Arrow", "columnDefault", "grid", "minSize", "maxSize", "rowDefault", "frozenRowsStart", "readonly", "focusUnfurl", "TableRoot", "children", "role", "React", "div", "className", "mx", "includes", "TableMain", "forwardRef", "model", "presentation", "ignoreAttention", "schema", "client", "onRowClick", "forwardedRef", "dxGrid", "setDxGrid", "useState", "hasAttention", "useAttention", "id", "modals", "useMemo", "ModalController", "draftRowCount", "getDraftRowCount", "handleSave", "useCallback", "updateCells", "requestUpdate", "frozen", "noActionColumn", "features", "dataEditable", "schemaEditable", "rowActions", "length", "frozenRowsEnd", "Math", "max", "frozenColsStart", "selection", "enabled", "frozenColsEnd", "getCells", "range", "plane", "useEffect", "handleInsertRowResult", "insertResult", "requestAnimationFrame", "setFocus", "col", "row", "refocus", "getRowCount", "useImperativeHandle", "update", "cell", "updateIfWithinBounds", "handleSaveDraftRow", "rowIndex", "didCommitSuccessfully", "commitDraftRow", "scrollToEndRow", "handleGridClick", "event", "closestCell", "target", "getRowAt", "selectionMode", "toggleSelectionForRowIndex", "buttonSelector", "Object", "values", "tableButtons", "map", "button", "attr", "join", "tableButtonElement", "closest", "find", "btn", "hasAttribute", "setTrigger", "data", "getData", "type", "showRowMenu", "showColumnMenu", "fieldId", "showColumnCreator", "sorting", "toggleSort", "controlSelector", "tableControls", "control", "controlElement", "ctrl", "header", "setSelection", "allRowsSeleted", "value", "updateCellData", "colIndex", "handleFocus", "increment", "delta", "insertRow", "handleKeyDown", "metaKey", "ctrlKey", "key", "cellData", "getCellData", "textContent", "toString", "navigator", "clipboard", "writeText", "preventDefault", "error", "console", "warn", "readText", "then", "clipboardText", "setCellData", "cellElement", "rect", "getBoundingClientRect", "editRequest", "DxEditRequest", "cellIndex", "cellBox", "insetInlineStart", "left", "insetBlockStart", "top", "inlineSize", "width", "blockSize", "height", "initialContent", "dispatchEvent", "undefined", "handleAxisResize", "axis", "columnIndex", "parseInt", "index", "setColumnWidth", "size", "handleWheel", "stopPropagation", "handleNewColumn", "columns", "getColumnCount", "scrollToColumn", "span", "Grid", "Root", "TableValueEditor", "onFocus", "onSave", "Content", "gridSeparatorInlineEnd", "gridSeparatorBlockEnd", "columnMeta", "limitRows", "limitColumns", "projection", "fields", "overscroll", "onAxisResize", "onClick", "onKeyDownCapture", "onWheelCapture", "ref", "RowActionsMenu", "ColumnActionsMenu", "ColumnSettings", "onNewColumn", "CreateRefPanel", "Table", "Main", "React", "useCallback", "useMemo", "useRef", "useDefaultValue", "mx", "DynamicTable", "classNames", "name", "rows", "properties", "jsonSchema", "_jsonSchema", "schema", "rowActions", "onRowClick", "onRowAction", "props", "typename", "useMemo", "getBaseSchema", "projection", "view", "makeDynamicTable", "tableRef", "useRef", "handleCellUpdate", "useCallback", "cell", "current", "update", "handleRowOrderChange", "features", "useDefaultValue", "selection", "enabled", "dataEditable", "model", "useTableModel", "onCellUpdate", "onRowOrderChange", "presentation", "TablePresentation", "React", "div", "role", "className", "mx", "Table", "Root", "Main", "ref", "ignoreAttention", "Rx", "React", "useMemo", "live", "MenuProvider", "ToolbarMenu", "createGapSeparator", "createMenuAction", "useMenuActions", "rxFromSignal", "createTableToolbarActions", "state", "onAdd", "onSave", "customActions", "Rx", "make", "get", "add", "createMenuAction", "type", "icon", "label", "ns", "translationKey", "testId", "save", "iconOnly", "hidden", "rxFromSignal", "viewDirty", "gap", "createGapSeparator", "nodes", "edges", "map", "id", "target", "source", "custom", "push", "TableToolbar", "classNames", "attendableId", "useMemo", "live", "actionsCreator", "menu", "useMenuActions", "React", "MenuProvider", "ToolbarMenu"]
|
|
3
|
+
"sources": ["../../../src/components/Table/Table.tsx", "../../../src/components/Table/TableContent.tsx", "../../../src/util/dynamic-table.ts", "../../../src/util/signals.ts", "../../../src/util/schema.ts", "../../../src/model/modal-controller.ts", "../../../src/components/TableCellEditor/TableCellEditor.tsx", "../../../src/components/TableCellEditor/CellValidationMessage.tsx", "../../../src/components/TableCellEditor/FormCellEditor.tsx", "../../../src/components/Table/ColumnActionsMenu.tsx", "../../../src/components/Table/ColumnSettings.tsx", "../../../src/components/Table/RowActionsMenu.tsx", "../../../src/components/Table/TableToolbar.tsx", "../../../src/components/Table/DynamicTable.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, type RefObject, forwardRef, useImperativeHandle, useRef } from 'react';\n\nimport { type DxGridAxisMeta, type DxGridPosition } from '@dxos/react-ui-grid';\n\nimport { type InsertRowResult } from '../../model';\nimport { TableContent } from './TableContent';\nimport { TableToolbar } from './TableToolbar';\n\nconst columnDefault = { grid: { minSize: 80, maxSize: 640 } };\nconst rowDefault = { frozenRowsStart: { readonly: true, focusUnfurl: false } };\nconst emptyColumnMeta = Atom.make<DxGridAxisMeta>({ grid: {} });\n\n//\n// Context\n//\n\ntype TableContextValue = {\n /** Mutable ref populated by Content so Root can expose the controller. */\n controllerRef: RefObject<TableController>;\n};\n\nconst [TableContextProvider, useTableContext] = createContext<TableContextValue>('Table');\n\n//\n// Controller\n//\n\ntype TableController = {\n update?: (cell?: DxGridPosition) => void;\n handleInsertRowResult?: (insertRowResult?: InsertRowResult) => void;\n};\n\n//\n// Root\n//\n\nconst TABLE_ROOT_NAME = 'Table.Root';\n\ntype TableRootProps = PropsWithChildren;\n\nconst TableRoot = forwardRef<TableController, TableRootProps>(({ children }, forwardedRef) => {\n const controllerRef = useRef<TableController>({});\n\n useImperativeHandle(\n forwardedRef,\n () => ({\n update: (cell) => controllerRef.current?.update?.(cell),\n handleInsertRowResult: (result) => controllerRef.current?.handleInsertRowResult?.(result),\n }),\n [],\n );\n\n return <TableContextProvider controllerRef={controllerRef}>{children}</TableContextProvider>;\n});\n\nTableRoot.displayName = TABLE_ROOT_NAME;\n\n//\n// Table\n//\n\nexport const Table = {\n Root: TableRoot,\n Toolbar: TableToolbar,\n Content: TableContent,\n};\n\nexport type { TableController, TableRootProps };\n\nexport { useTableContext };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Atom, RegistryContext, useAtomValue } from '@effect-atom/atom-react';\nimport * as String from 'effect/String';\nimport React, { type MouseEvent, type WheelEvent, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { type Type } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n type DxGridAxisMeta,\n type DxGridElement,\n type DxGridPlane,\n type DxGridPlaneRange,\n Grid,\n type GridContentProps,\n closestCell,\n gridSeparatorBlockEnd,\n gridSeparatorInlineEnd,\n} from '@dxos/react-ui-grid';\nimport { DxEditRequest } from '@dxos/react-ui-grid';\nimport { composable, composableProps, mx } from '@dxos/ui-theme';\n\nimport { type InsertRowResult, ModalController, type TableModel, type TablePresentation } from '../../model';\nimport { tableButtons, tableControls } from '../../util';\nimport { type OnCreateHandler, type TableCellEditorProps, TableValueEditor } from '../TableCellEditor';\nimport { ColumnActionsMenu } from './ColumnActionsMenu';\nimport { ColumnSettings } from './ColumnSettings';\nimport { RowActionsMenu } from './RowActionsMenu';\nimport { TableController, useTableContext } from './Table';\n\nconst columnDefault = { grid: { minSize: 80, maxSize: 640 } };\nconst rowDefault = { frozenRowsStart: { readonly: true, focusUnfurl: false } };\nconst emptyColumnMeta = Atom.make<DxGridAxisMeta>({ grid: {} });\nconst emptyRowsAtom = Atom.make<unknown[]>([]);\nconst emptyCellUpdateAtom = Atom.make<number>(0);\n\n//\n// Content\n//\n\nconst TABLE_CONTENT_NAME = 'Table.Content';\n\nexport type TableContentProps = {\n schema?: Type.AnyEntity;\n model?: TableModel;\n presentation?: TablePresentation;\n // TODO(burdon): Factor out attention.\n ignoreAttention?: boolean;\n onCreate?: OnCreateHandler;\n onRowClick?: (row: any) => void;\n testId?: string;\n};\n\nexport const TableContent = composable<HTMLDivElement, TableContentProps>(\n ({ schema, model, presentation, ignoreAttention, onCreate, onRowClick, testId, ...props }, forwardedRef) => {\n const registry = useContext(RegistryContext);\n const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);\n const { hasAttention } = useAttention(model?.id ?? 'table');\n const modals = useMemo(() => new ModalController(registry), [registry]);\n const columnMeta = useAtomValue(model?.columnMeta ?? emptyColumnMeta);\n // Subscribe to rows atom to trigger re-render when rows change.\n const rows = useAtomValue(model?.rows ?? emptyRowsAtom);\n // Subscribe to cell update counter to trigger re-render when individual cells change.\n const cellUpdateCounter = useAtomValue(model?.cellUpdate ?? emptyCellUpdateAtom);\n // Derive column count from columnMeta (reactive) with fallback.\n const columnCount = Object.keys(columnMeta.grid).length || model?.projection.getFields().length || 0;\n\n const draftRowCount = model?.getDraftRowCount() ?? 0;\n\n const frozen = useMemo(() => {\n const noActionColumn =\n model?.features.dataEditable === false &&\n model?.features.schemaEditable === false &&\n model.rowActions.length === 0;\n\n return {\n frozenRowsStart: 1,\n frozenRowsEnd: Math.max(1, draftRowCount),\n frozenColsStart: model?.features.selection.enabled ? 1 : 0,\n frozenColsEnd: noActionColumn ? 0 : 1,\n };\n }, [model, draftRowCount]);\n\n const getCells = useCallback<NonNullable<GridContentProps['getCells']>>(\n (range: DxGridPlaneRange, plane: DxGridPlane) => presentation?.getCells(range, plane) ?? {},\n [presentation],\n );\n\n useEffect(() => {\n if (!dxGrid || !presentation) {\n return;\n }\n\n dxGrid.getCells = getCells;\n }, [dxGrid, presentation, getCells]);\n\n // Trigger grid update when rows or cell values change.\n useEffect(() => {\n if (!dxGrid) {\n return;\n }\n\n dxGrid.updateCells(true);\n dxGrid.requestUpdate();\n }, [dxGrid, rows, cellUpdateCounter]);\n\n const handleInsertRowResult = useCallback(\n (insertResult?: InsertRowResult) => {\n if (insertResult === 'draft') {\n requestAnimationFrame(() => {\n dxGrid?.setFocus({ plane: 'frozenRowsEnd', col: 0, row: 0 });\n dxGrid?.refocus();\n });\n } else {\n requestAnimationFrame(() => {\n dxGrid?.setFocus({ plane: 'grid', col: 0, row: model ? model.getRowCount() - 1 : 0 });\n dxGrid?.refocus();\n });\n }\n },\n [model, dxGrid],\n );\n\n const handleSave = useCallback(() => {\n dxGrid?.updateCells(true);\n dxGrid?.requestUpdate();\n }, [dxGrid]);\n\n const handleSaveDraftRow = useCallback(\n (rowIndex = 0) => {\n if (model && dxGrid) {\n const didCommitSuccessfully = model.commitDraftRow(rowIndex);\n if (didCommitSuccessfully) {\n requestAnimationFrame(() => {\n dxGrid.scrollToEndRow();\n });\n }\n }\n },\n [model, dxGrid],\n );\n\n const handleGridClick = useCallback(\n (event: MouseEvent) => {\n const cell = closestCell(event.target as HTMLElement);\n if (cell) {\n const { row: rowIndex, plane } = cell;\n if (onRowClick) {\n if (plane === 'grid') {\n const row = model?.getRowAt(rowIndex);\n row && onRowClick(row);\n } else {\n onRowClick(cell);\n }\n }\n\n if (model?.features.selection.enabled && model?.selection.selectionMode === 'single') {\n model.selection.toggleSelectionForRowIndex(rowIndex);\n }\n }\n\n if (!modals) {\n return;\n }\n\n const buttonSelector = Object.values(tableButtons)\n .map((button) => `button[${button.attr}]`)\n .join(',');\n\n const tableButtonElement = (event.target as HTMLElement).closest(buttonSelector) as HTMLElement;\n if (tableButtonElement) {\n const button = Object.values(tableButtons).find((btn) => tableButtonElement.hasAttribute(btn.attr));\n if (!button) {\n return;\n }\n\n modals.setTrigger(tableButtonElement);\n const data = button.getData(tableButtonElement);\n switch (data.type) {\n case 'rowMenu': {\n modals.showRowMenu(data.rowIndex);\n break;\n }\n case 'columnSettings': {\n modals.showColumnMenu(data.fieldId);\n break;\n }\n case 'newColumn': {\n modals.showColumnCreator();\n break;\n }\n case 'sort': {\n model?.toggleSort(data.fieldId);\n break;\n }\n case 'saveDraftRow': {\n handleSaveDraftRow();\n break;\n }\n }\n return;\n }\n\n const controlSelector = Object.values(tableControls)\n .map((control) => `input[${control.attr}]`)\n .join(',');\n\n const controlElement = (event.target as HTMLElement).closest(controlSelector) as HTMLElement;\n if (controlElement) {\n const control = Object.values(tableControls).find((ctrl) => controlElement.hasAttribute(ctrl.attr));\n if (!control) {\n return;\n }\n\n const data = control.getData(controlElement);\n switch (data.type) {\n case 'checkbox': {\n if (data.header) {\n model?.selection.setSelection(model.selection.allRowsSelected ? 'none' : 'all');\n } else {\n model?.selection.toggleSelectionForRowIndex(data.rowIndex);\n }\n break;\n }\n case 'switch': {\n if (model) {\n model.updateCellData({ row: data.rowIndex, col: data.colIndex }, (value) => !value);\n }\n break;\n }\n }\n }\n },\n [model, modals, dxGrid],\n );\n\n const handleFocus = useCallback<NonNullable<TableCellEditorProps['onFocus']>>(\n (increment, delta, cell) => {\n if (dxGrid && model) {\n if (cell?.plane === 'grid' && cell?.row >= model.getRowCount() - 1 && increment !== 'col') {\n handleInsertRowResult(draftRowCount < 1 ? model.insertRow() : 'final');\n } else if (cell?.plane === 'frozenRowsEnd' && increment === 'row') {\n handleSaveDraftRow(cell.row);\n handleInsertRowResult(model.insertRow());\n } else {\n dxGrid.refocus(increment, delta);\n }\n }\n },\n [dxGrid, model],\n );\n\n const handleKeyDown = useCallback<NonNullable<GridContentProps['onKeyDown']>>(\n (event) => {\n if (!model?.features.dataEditable) {\n return;\n }\n\n const cell = closestCell(event.target);\n if (!model || !cell) {\n return;\n }\n\n // Handle Meta+C (Copy) and Meta+V (Paste) commands\n if (event.metaKey || event.ctrlKey) {\n switch (event.key) {\n case 'c': {\n // Copy focused cell's text content to clipboard\n try {\n const cellData = model.getCellData(cell);\n const textContent = cellData?.toString() ?? '';\n void navigator.clipboard.writeText(textContent);\n event.preventDefault();\n } catch (error) {\n log.catch(error);\n }\n break;\n }\n case 'v': {\n // Paste clipboard content to focused cell\n event.preventDefault();\n void navigator.clipboard.readText().then((clipboardText) => {\n try {\n // Attempt to set the cell's content to clipboard content\n model.setCellData(cell, String.trim(clipboardText).replace(/[\\n\\r]+/, ' '));\n handleSave();\n } catch {\n // If validation fails, emit a DxEditRequest event with initialContent from clipboard\n // TODO(thure): Should `dx-grid` expose a method like this?\n const cellElement = (event.target as HTMLElement).closest(\n '[data-dx-grid-action=\"cell\"]',\n ) as HTMLElement;\n if (cellElement) {\n const rect = cellElement.getBoundingClientRect();\n const editRequest = new DxEditRequest({\n cellIndex: `${cell.plane},${cell.col},${cell.row}`,\n cellBox: {\n insetInlineStart: rect.left,\n insetBlockStart: rect.top,\n inlineSize: rect.width,\n blockSize: rect.height,\n },\n cellElement,\n initialContent: clipboardText,\n });\n cellElement.dispatchEvent(editRequest);\n }\n }\n });\n break;\n }\n }\n }\n\n switch (event.key) {\n case 'Backspace':\n case 'Delete': {\n try {\n model.setCellData(cell, undefined);\n event.preventDefault();\n handleSave();\n } catch {\n // Delete results in a validation error; don’t prevent default so dx-grid can emit an edit request.\n }\n break;\n }\n }\n },\n [model, dxGrid, handleSave],\n );\n\n const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(\n (event) => {\n if (event.axis === 'col') {\n const columnIndex = parseInt(event.index, 10);\n model?.setColumnWidth(columnIndex, event.size);\n }\n },\n [model],\n );\n\n const handleWheel = useCallback(\n (event: WheelEvent) => {\n if (!ignoreAttention && !hasAttention) {\n event.stopPropagation();\n }\n },\n [hasAttention, ignoreAttention],\n );\n\n const handleNewColumn = useCallback(() => {\n const columns = model?.getColumnCount();\n if (dxGrid && columns) {\n dxGrid.scrollToColumn(columns - 1);\n }\n }, [model, dxGrid]);\n\n // Publish controller to Root.\n const { controllerRef } = useTableContext(TABLE_CONTENT_NAME);\n controllerRef.current = useMemo<TableController>(() => {\n if (!dxGrid || !presentation) {\n return {};\n }\n\n return {\n update: (cell) => {\n if (cell) {\n dxGrid.updateIfWithinBounds(cell, true);\n } else {\n dxGrid.updateCells(true);\n dxGrid.requestUpdate();\n }\n },\n handleInsertRowResult,\n };\n }, [dxGrid, model, presentation]);\n\n if (!model || !modals) {\n return <span role='none' className='dx-attention-surface' />;\n }\n\n return (\n <div {...composableProps(props, { classNames: 'dx-container relative' })} ref={forwardedRef}>\n <Grid.Root id={model.id ?? 'table-grid'}>\n <TableValueEditor\n model={model}\n modals={modals}\n schema={schema}\n onFocus={handleFocus}\n onSave={handleSave}\n onCreate={onCreate}\n />\n <Grid.Content\n className={mx('[--dx-grid-base:var(--base-surface)]', gridSeparatorInlineEnd, gridSeparatorBlockEnd)}\n frozen={frozen}\n columns={columnMeta}\n columnDefault={columnDefault}\n rowDefault={rowDefault}\n limitRows={rows.length}\n limitColumns={columnCount}\n overscroll='trap'\n onAxisResize={handleAxisResize}\n onClick={handleGridClick}\n onKeyDownCapture={handleKeyDown}\n onWheelCapture={handleWheel}\n {...(testId && { 'data-testid': testId })}\n ref={setDxGrid}\n />\n <RowActionsMenu model={model} modals={modals} />\n <ColumnActionsMenu model={model} modals={modals} />\n <ColumnSettings model={model} modals={modals} onNewColumn={handleNewColumn} />\n </Grid.Root>\n </div>\n );\n },\n);\n\nTableContent.displayName = TABLE_CONTENT_NAME;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Registry } from '@effect-atom/atom-react';\nimport type * as Types from 'effect/Types';\n\nimport { Filter, JsonSchema, Obj, Order, Query, type QueryAST, Ref, Type } from '@dxos/echo';\nimport { type View } from '@dxos/echo';\nimport {\n ProjectionModel,\n type SchemaPropertyDefinition,\n ViewModel,\n createEchoChangeCallback,\n getSchemaFromPropertyDefinitions,\n} from '@dxos/schema';\n\nimport { Table } from '../types';\n\n// TODO(ZaymonFC): Upstream these extra fields to SchemaPropertyDefinition to enhance schema-tools schema creation.\ntype PropertyDisplayProps = {\n size: number;\n title: string;\n sort: QueryAST.OrderDirection;\n};\n\nexport type TablePropertyDefinition = SchemaPropertyDefinition & Partial<PropertyDisplayProps>;\n\n/**\n * @deprecated\n */\n// TODO(burdon): Remove variance.\nexport const getBaseSchema = ({\n schema,\n typename,\n properties,\n jsonSchema,\n}: {\n schema?: Type.AnyEntity;\n typename?: string;\n properties?: TablePropertyDefinition[];\n jsonSchema?: Types.DeepMutable<JsonSchema.JsonSchema>;\n}): { typename: string; jsonSchema: Types.DeepMutable<JsonSchema.JsonSchema> } => {\n if (typename && properties) {\n const schema = getSchemaFromPropertyDefinitions(typename, properties);\n return { typename: schema.typename, jsonSchema: JsonSchema.toJsonSchema(schema) };\n } else if (schema) {\n return { typename: Type.getTypename(schema)!, jsonSchema: JsonSchema.toJsonSchema(schema) };\n } else if (typename && jsonSchema) {\n return { typename, jsonSchema };\n } else {\n throw new Error('invalid properties');\n }\n};\n\nexport const makeDynamicTable = ({\n registry,\n jsonSchema,\n properties,\n}: {\n registry: Registry.Registry;\n jsonSchema: Types.DeepMutable<JsonSchema.JsonSchema>;\n properties?: TablePropertyDefinition[];\n}): { projection: ProjectionModel; object: Table.Table } => {\n const view = ViewModel.make({\n query: Query.select(Filter.everything()),\n jsonSchema,\n ...(properties && { fields: properties.map((property) => property.name) }),\n });\n const object = Obj.make(Table.Table, { view: Ref.make(view), sizes: {} });\n\n const projection = new ProjectionModel({\n registry,\n view,\n baseSchema: jsonSchema,\n change: createEchoChangeCallback(view, jsonSchema),\n });\n projection.normalizeView();\n if (properties && projection.getFields()) {\n setProperties(view, projection, object, properties);\n }\n\n return { projection, object };\n};\n\nconst setProperties = (\n view: View.View,\n projection: ProjectionModel,\n table: Table.Table,\n properties: TablePropertyDefinition[],\n) => {\n for (const property of properties) {\n const field = projection.getFields().find((field) => field.path === property.name);\n if (field) {\n if (property.size !== undefined) {\n Obj.update(table, (table) => {\n table.sizes[field.path] = property.size!;\n });\n }\n\n if (property.title !== undefined) {\n const fieldProjection = projection.getFieldProjection(field.id);\n projection.setFieldProjection({\n ...fieldProjection,\n props: { ...fieldProjection.props, title: property.title },\n });\n }\n\n if (property.sort) {\n // Apply sort to query instead of deprecated view.sort\n const currentQuery = Query.fromAst(Obj.getSnapshot(view).query.ast);\n // Use any type parameter since we're working with dynamic field paths\n const newQuery = currentQuery.orderBy(Order.property<any>(field.path as string, property.sort));\n Obj.update(view, (view) => {\n // Type assertion needed because Query AST types have some variance issues.\n view.query.ast = newQuery.ast as typeof view.query.ast;\n });\n }\n }\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Explicitly marks signal dependencies for tracking within effects.\n * Returns the passed value to enable inline usage.\n */\nexport const touch = <T>(value: T) => value;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\n/**\n * Creates a narrowed schema from an original schema that only includes\n * the specified paths. This allows form components to only display\n * and edit/validate specific fields rather than the entire object.\n *\n * @param schema The original schema to narrow\n * @param paths Array of field paths to extract\n * @returns A narrowed Schema instance containing only the properties at the specified paths\n */\nexport const narrowSchema = <S extends Schema.Schema.AnyNoContext>(\n schema: S,\n paths: string[],\n): Schema.Schema<unknown, unknown> | undefined => {\n const ast = (schema as any)?.ast;\n\n if (SchemaAST.isTypeLiteral(ast)) {\n // Filter property signatures that match any of the provided paths\n const propertySignatures = ast.propertySignatures.filter((signature) => paths.includes(signature.name.toString()));\n\n // If we found at least one matching property\n if (propertySignatures.length > 0) {\n // Create a new TypeLiteral with only the matching properties\n const narrowType = new SchemaAST.TypeLiteral(propertySignatures, []);\n return Schema.make(narrowType);\n }\n }\n\n return undefined;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Atom, type Registry } from '@effect-atom/atom-react';\nimport { type MutableRefObject, type RefObject } from 'react';\n\nexport type ColumnSettingsMode = { type: 'create' } | { type: 'edit'; fieldId: string };\n\nexport type ModalState =\n | { type: 'row'; rowIndex: number }\n | { type: 'column'; fieldId: string }\n | { type: 'refPanel'; targetId: string; typename: string }\n | { type: 'columnSettings'; mode: ColumnSettingsMode }\n | { type: 'closed' };\n\nexport class ModalController {\n private readonly _registry: Registry.Registry;\n private readonly _state: Atom.Writable<ModalState>;\n private readonly _triggerRef: MutableRefObject<HTMLElement> = { current: null as unknown as HTMLElement };\n\n constructor(registry: Registry.Registry) {\n this._registry = registry;\n this._state = Atom.make<ModalState>({ type: 'closed' });\n }\n\n public get state(): Atom.Atom<ModalState> {\n return this._state;\n }\n\n public get stateValue(): ModalState {\n return this._registry.get(this._state);\n }\n\n public get trigger() {\n return this._triggerRef as RefObject<HTMLButtonElement>;\n }\n\n public setTrigger = (trigger: HTMLElement) => {\n this._triggerRef.current = trigger;\n };\n\n public showRowMenu = (rowIndex: number) => {\n this._registry.set(this._state, { type: 'row', rowIndex });\n };\n\n public showColumnMenu = (fieldId: string) => {\n this._registry.set(this._state, { type: 'column', fieldId });\n };\n\n public showColumnCreator = () => {\n this._registry.set(this._state, { type: 'columnSettings', mode: { type: 'create' } });\n };\n\n public showReferencePanel = (targetId: string, schemaId: string) => {\n this._registry.set(this._state, { type: 'refPanel', targetId, typename: schemaId });\n };\n\n public openColumnSettings = () => {\n const currentState = this._registry.get(this._state);\n if (currentState.type === 'column') {\n const fieldId = currentState.fieldId;\n // Queue next render to let the column action modal close completely.\n requestAnimationFrame(() => {\n this._registry.set(this._state, {\n type: 'columnSettings',\n mode: { type: 'edit', fieldId },\n });\n });\n }\n };\n\n public close = () => {\n this._registry.set(this._state, { type: 'closed' });\n };\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Completion } from '@codemirror/autocomplete';\nimport { EditorView } from '@codemirror/view';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { debounce } from '@dxos/async';\nimport { type Type } from '@dxos/echo';\nimport { Format, TypeEnum } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { type DxGridAxis, type DxGridPosition } from '@dxos/lit-grid';\nimport {\n type EditorBlurHandler,\n type EditorKeyEvent,\n type EditorKeyOrBlurHandler,\n GridCellEditor,\n type GridCellEditorProps,\n type GridScopedProps,\n editorKeys,\n parseCellIndex,\n useGridContext,\n} from '@dxos/react-ui-grid';\nimport { type FieldProjection } from '@dxos/schema';\n\nimport { type ModalController, type TableModel } from '../../model';\nimport { CellValidationMessage } from './CellValidationMessage';\nimport { FormCellEditor, type OnCreateHandler } from './FormCellEditor';\n\n/**\n * Option to create new object/value.\n */\nexport type QueryResult = Pick<Completion, 'label'> & {\n data: any;\n};\n\nexport type TableCellEditorProps<T extends Type.AnyEntity = Type.AnyEntity> = {\n schema?: T;\n model?: TableModel;\n modals?: ModalController;\n onFocus?: (axis?: DxGridAxis, delta?: -1 | 0 | 1, cell?: DxGridPosition) => void;\n onCreate?: OnCreateHandler;\n onSave?: () => void;\n};\n\nexport const TableValueEditor = <T extends Type.AnyEntity = Type.AnyEntity>({\n __gridScope,\n schema,\n model,\n modals,\n onFocus,\n onSave,\n onCreate,\n}: GridScopedProps<TableCellEditorProps<T>>) => {\n const { editing } = useGridContext('TableValueEditor', __gridScope);\n\n const fieldProjection = useMemo<FieldProjection | undefined>(() => {\n if (!model || !editing) {\n return;\n }\n\n const { col } = parseCellIndex(editing.index);\n const field = model.projection.getFields()[col];\n const fieldProjection = model.projection.getFieldProjection(field.id);\n invariant(fieldProjection);\n return fieldProjection;\n }, [model, editing]);\n\n if (\n fieldProjection?.props.type === TypeEnum.Array ||\n fieldProjection?.props.format === Format.TypeFormat.SingleSelect ||\n fieldProjection?.props.format === Format.TypeFormat.Ref\n // TODO(thure): Support `Format.TypeFormat.MultiSelect`\n ) {\n return (\n <FormCellEditor<T>\n __gridScope={__gridScope}\n schema={schema}\n model={model}\n fieldProjection={fieldProjection}\n modals={modals}\n onSave={onSave}\n onCreate={onCreate}\n />\n );\n }\n\n // For all other types, use the existing cell editor.\n return <TableCellEditor model={model} modals={modals} onFocus={onFocus} onSave={onSave} __gridScope={__gridScope} />;\n};\n\nexport const TableCellEditor = ({\n __gridScope,\n model,\n modals,\n onFocus,\n onSave,\n}: GridScopedProps<TableCellEditorProps>) => {\n const { editing, setEditing } = useGridContext('TableCellEditor', __gridScope);\n const suppressNextBlur = useRef(false);\n const [validationError, setValidationError] = useState<string | null>(null);\n const [validationVariant, setValidationVariant] = useState<'error' | 'warning'>('error');\n\n const fieldProjection = useMemo<FieldProjection | undefined>(() => {\n if (!model || !editing) {\n return;\n }\n\n const { col } = parseCellIndex(editing.index);\n const field = model.projection.getFields()[col];\n const fieldProjection = model.projection.getFieldProjection(field.id);\n invariant(fieldProjection);\n return fieldProjection;\n }, [model, editing]);\n\n // TOOD(burdon): Attach to event handler?\n const handleEnter = useCallback(\n async (value: any) => {\n if (!model || !editing) {\n return;\n }\n\n const cell = parseCellIndex(editing.index);\n const validationResult = await model.validateCellData(cell, value);\n\n if (validationResult.valid) {\n setValidationError(null);\n model.setCellData(cell, value);\n onFocus?.();\n setEditing(null);\n onSave?.();\n } else {\n setValidationError(validationResult.error);\n setValidationVariant('error');\n }\n },\n [model, editing, onFocus, setEditing],\n );\n\n const handleBlur = useCallback<EditorBlurHandler>(\n async (value) => {\n if (suppressNextBlur.current) {\n suppressNextBlur.current = false;\n } else if (model && editing) {\n // Save silently if validation passes\n const cell = parseCellIndex(editing.index);\n if (value !== undefined) {\n const result = await model.validateCellData(cell, value);\n if (result.valid) {\n setValidationError(null);\n model.setCellData(cell, value);\n setEditing(null);\n onSave?.();\n }\n }\n }\n },\n [model, editing],\n );\n\n const handleClose = useCallback<EditorKeyOrBlurHandler>(\n async (value, event) => {\n if (!model || !editing || !fieldProjection) {\n return;\n }\n\n const cell = parseCellIndex(editing.index);\n if (value !== undefined) {\n // Pre-commit validation check.\n const result = await model.validateCellData(cell, value);\n\n if (result.valid) {\n suppressNextBlur.current = true;\n setValidationError(null);\n model.setCellData(cell, value);\n setEditing(null);\n onSave?.();\n if (event && onFocus) {\n onFocus(determineNavigationAxis(event), determineNavigationDelta(event), cell);\n }\n } else {\n setValidationError(result.error);\n setValidationVariant('error');\n }\n } else {\n suppressNextBlur.current = true;\n setValidationError(null);\n setEditing(null);\n onSave?.();\n if (event && onFocus) {\n onFocus(determineNavigationAxis(event), determineNavigationDelta(event));\n }\n }\n },\n [model, editing, onFocus, fieldProjection, setEditing, onSave],\n );\n\n const extensions = useMemo(() => {\n if (!fieldProjection) {\n return [];\n }\n\n const extensions = [\n editorKeys({\n onClose: handleClose,\n ...(editing?.initialContent && { onNav: handleClose }),\n }),\n ];\n // Add validation extension to handle content changes.\n if (model && editing) {\n extensions.push(\n EditorView.updateListener.of(\n debounce((update) => {\n const content = update.state.doc.toString();\n const cell = parseCellIndex(editing.index);\n\n // Perform validation on content change.\n void model.validateCellData(cell, content).then((result) => {\n if (result.valid) {\n setValidationError(null);\n } else {\n setValidationError(result.error);\n setValidationVariant('error');\n }\n });\n }, 10),\n ),\n );\n }\n\n return extensions;\n }, [model, modals, editing, fieldProjection, handleClose]);\n\n const getCellContent = useCallback<GridCellEditorProps['getCellContent']>(() => {\n if (model && editing) {\n const cell = parseCellIndex(editing.index);\n const value = model.getCellData(cell);\n return value !== undefined ? String(value) : '';\n }\n }, [model, editing]);\n\n return (\n <>\n <CellValidationMessage validationError={validationError} variant={validationVariant} __gridScope={__gridScope} />\n <GridCellEditor\n extensions={extensions}\n slots={{\n content: {\n className: '!py-(--dx-grid-cell-editor-padding-block)',\n },\n }}\n getCellContent={getCellContent}\n onBlur={handleBlur}\n />\n </>\n );\n};\n\nconst determineNavigationAxis = ({ key }: EditorKeyEvent): 'col' | 'row' | undefined => {\n switch (key) {\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Enter': {\n return 'row';\n }\n\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'Tab':\n return 'col';\n }\n};\n\nconst determineNavigationDelta = ({ key, shift }: EditorKeyEvent): -1 | 1 => {\n switch (key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n return -1;\n\n case 'ArrowDown':\n case 'ArrowRight':\n return 1;\n }\n\n return shift ? -1 : 1;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type GridScopedProps, useGridContext } from '@dxos/react-ui-grid';\n\nexport type CellValidationMessageProps = {\n validationError: string | null;\n variant?: 'error' | 'warning';\n};\n\nexport const CellValidationMessage = ({\n __gridScope,\n validationError,\n variant = 'error',\n}: GridScopedProps<CellValidationMessageProps>) => {\n const { editing, editBox: box } = useGridContext('GridSheetCellEditor', __gridScope);\n\n if (!editing || !validationError) {\n return null;\n }\n\n const bgClass = variant === 'error' ? 'bg-error-surface' : 'bg-warning-surface';\n const textClass = variant === 'error' ? 'text-error-surface-text' : 'text-warning-surface-text';\n\n return (\n <div\n className={`absolute ${bgClass} ${textClass} rounded-h-sm text-xs p-1`}\n style={{\n ...{ '--dx-grid-cell-width': `${box?.inlineSize ?? 200}px` },\n zIndex: 10,\n insetBlockEnd: `calc(100% - ${box.insetBlockStart}px)`,\n insetInlineStart: box.insetInlineStart,\n inlineSize: box.inlineSize,\n }}\n >\n {validationError}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Entity, type Type } from '@dxos/echo';\nimport { Ref, getValue } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { type Label, Popover } from '@dxos/react-ui';\nimport { Form, type FormRootProps, type RefFieldProps } from '@dxos/react-ui-form';\nimport { parseCellIndex, useGridContext } from '@dxos/react-ui-grid';\nimport { type FieldProjection } from '@dxos/schema';\nimport { getDeep, isTruthy, setDeep } from '@dxos/util';\n\nimport { translationKey } from '#translations';\n\nimport { type ModalController, type TableModel, type TableRow } from '../../model';\nimport { narrowSchema } from '../../util';\n\nconst createOptionLabel: Label = ['create-new-object.label', { ns: translationKey }];\n\nexport type OnCreateHandler = (schema: Type.AnyEntity, values: any) => Parameters<typeof Ref.make>[0];\n\nexport type FormCellEditorProps<T extends Type.AnyEntity = Type.AnyEntity> = {\n __gridScope: any;\n schema?: T;\n model?: TableModel;\n fieldProjection: FieldProjection;\n modals?: ModalController; // TODO(burdon): Not used. Remove?\n onSave?: () => void;\n onCreate?: OnCreateHandler;\n} & Omit<FormRootProps<any>, 'values' | 'schema' | 'onCreate'>;\n\nexport const FormCellEditor = <T extends Type.AnyEntity = Type.AnyEntity>({\n __gridScope,\n schema,\n model,\n fieldProjection,\n onSave,\n onCreate,\n ...formProps\n}: FormCellEditorProps<T>) => {\n const anchorRef = useRef<HTMLButtonElement | null>(null);\n const { id: _gridId, editing: contextEditing, setEditing } = useGridContext('ArrayEditor', __gridScope);\n const [editing, setLocalEditing] = useState(false);\n\n useEffect(() => {\n if (contextEditing && contextEditing.cellElement) {\n anchorRef.current = (contextEditing.cellElement as HTMLElement).querySelector(\n '.dx-grid__cell__content',\n ) as HTMLButtonElement;\n setLocalEditing(true);\n } else {\n anchorRef.current = null;\n setLocalEditing(false);\n }\n }, [contextEditing]);\n\n const narrowedSchema = useMemo<Schema.Schema.AnyNoContext | undefined>(() => {\n if (!schema) {\n return undefined;\n }\n\n return narrowSchema(schema, [fieldProjection.field.path]);\n }, [JSON.stringify(schema), fieldProjection.field.path]); // TODO(burdon): Avoid stringify.\n\n const originalRow = useMemo<TableRow | undefined>(() => {\n if (model && contextEditing) {\n // Check if this is a draft cell and get the appropriate row data\n const cell = parseCellIndex(contextEditing.index);\n if (model.isDraftCell(cell)) {\n const draftRow = model.getDraftRows()[cell.row];\n invariant(draftRow);\n return draftRow.data;\n } else {\n const row = model.getRowAt(cell.row);\n invariant(row);\n return row;\n }\n }\n\n return undefined;\n }, [model, contextEditing]);\n\n // NOTE: Important to get a mutable deep clone to eject from the echo object.\n // TODO(wittjosiah): Consider using something like Obj.clone for this use case.\n const initialFormValues = useMemo(() => (originalRow ? JSON.parse(JSON.stringify(originalRow)) : {}), [originalRow]);\n const [formValues, setFormValues] = useState<any>(initialFormValues);\n\n const handleValuesChanged = useCallback<NonNullable<FormRootProps<any>['onValuesChanged']>>((values) => {\n setFormValues(values);\n }, []);\n const handleOpenChange = useCallback((nextOpen: boolean) => {\n if (nextOpen === false) {\n setEditing(null);\n onSave?.();\n }\n setLocalEditing(nextOpen);\n }, []);\n\n const handleSave = useCallback<NonNullable<FormRootProps<any>['onSave']>>(\n (values) => {\n if (!originalRow) {\n return;\n }\n const path = fieldProjection.field.path;\n const value = getDeep(values, [path]);\n // Use model's changeRow for consistent mutation handling.\n if (model) {\n model.changeRow(originalRow, (mutableRow) => {\n setDeep(mutableRow, [path], value);\n });\n } else {\n setDeep(originalRow, [path], value);\n }\n contextEditing?.cellElement?.focus();\n setEditing(null);\n setLocalEditing(false);\n onSave?.();\n },\n [fieldProjection.field.path, onSave, contextEditing, originalRow, model],\n );\n\n const handleCreate = useCallback<NonNullable<FormRootProps<any>['onCreate']>>(\n (schema, values) => {\n const objectWithId = onCreate?.(schema, values);\n if (objectWithId && originalRow) {\n const ref = Ref.make(objectWithId);\n const path = fieldProjection.field.path;\n // Use model's changeRow for consistent mutation handling.\n if (model) {\n model.changeRow(originalRow, (mutableRow) => {\n setDeep(mutableRow, [path], ref);\n });\n } else {\n setDeep(originalRow, [path], ref);\n }\n }\n contextEditing?.cellElement?.focus();\n setEditing(null);\n setLocalEditing(false);\n onSave?.();\n },\n [fieldProjection.field.path, onSave, contextEditing, originalRow, onCreate, model],\n );\n\n const getOptions = useCallback<NonNullable<RefFieldProps['getOptions']>>(\n (results) =>\n results\n .map((obj) => {\n return {\n id: Entity.getDXN(obj).toString(),\n label: getValue(obj, fieldProjection.field.referencePath!) || obj.id.toString(),\n };\n })\n .filter(isTruthy),\n [fieldProjection],\n );\n\n if (!editing) {\n return null;\n }\n\n return (\n <Popover.Root open={editing} onOpenChange={handleOpenChange}>\n <Popover.VirtualTrigger virtualRef={anchorRef} />\n <Popover.Portal>\n <Popover.Content tabIndex={-1} classNames='dx-card-popover-width dx-density-fine'>\n <Popover.Arrow />\n <Popover.Viewport>\n <Form.Root\n {...formProps}\n autoFocus\n schema={narrowedSchema}\n values={formValues}\n onValuesChanged={handleValuesChanged}\n projection={model?.projection}\n createInitialValuePath={fieldProjection.field.referencePath}\n createOptionIcon='ph--plus--regular'\n createOptionLabel={createOptionLabel}\n db={model?.db}\n getOptions={getOptions}\n onCreate={handleCreate}\n onSave={handleSave}\n >\n <Form.Viewport>\n <Form.Content>\n <Form.FieldSet />\n <Form.Actions />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n </Popover.Viewport>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React from 'react';\n\nimport { DropdownMenu, useTranslation } from '@dxos/react-ui';\n\nimport { translationKey } from '#translations';\n\nimport { type ModalController, type TableModel } from '../../model';\n\nexport type ColumnActionsMenuProps = {\n model: TableModel;\n modals: ModalController;\n};\n\nexport const ColumnActionsMenu = ({ model, modals }: ColumnActionsMenuProps) => {\n const { t } = useTranslation(translationKey);\n const state = useAtomValue(modals.state);\n if (state?.type !== 'column') {\n return null;\n }\n\n const currentSort = model.getSorting();\n const isCurrentColumnSorted = currentSort?.fieldId === state.fieldId;\n\n return (\n <DropdownMenu.Root modal={false} open={true} onOpenChange={modals.close}>\n <DropdownMenu.VirtualTrigger virtualRef={modals.trigger} />\n <DropdownMenu.Portal>\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {(!isCurrentColumnSorted || currentSort?.direction === 'asc') && (\n <DropdownMenu.Item\n data-testid='column-sort-descending'\n onClick={() => model.setSort(state.fieldId, 'desc')}\n >\n {t('column-action-sort-descending.menu')}\n </DropdownMenu.Item>\n )}\n {(!isCurrentColumnSorted || currentSort?.direction === 'desc') && (\n <DropdownMenu.Item\n data-testid='column-sort-ascending'\n onClick={() => model.setSort(state.fieldId, 'asc')}\n >\n {t('column-action-sort-ascending.menu')}\n </DropdownMenu.Item>\n )}\n {isCurrentColumnSorted && (\n <DropdownMenu.Item data-testid='column-clear-sort' onClick={() => model.clearSort()}>\n {t('column-action-clear-sorting.menu')}\n </DropdownMenu.Item>\n )}\n {model.getColumnCount() > 1 && model.features.schemaEditable && (\n <DropdownMenu.Item data-testid='column-delete' onClick={() => model.deleteColumn(state.fieldId)}>\n {t('column-action-delete.menu')}\n </DropdownMenu.Item>\n )}\n {model.features.schemaEditable && (\n <DropdownMenu.Item data-testid='column-settings' onClick={() => modals.openColumnSettings()}>\n {t('column-action-settings.menu')}\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type SchemaRegistry, type View } from '@dxos/echo';\nimport { Popover } from '@dxos/react-ui';\nimport { FieldEditor } from '@dxos/react-ui-form';\n\nimport { type ModalController, type TableModel } from '../../model';\n\ntype ColumnSettingsProps = {\n registry?: SchemaRegistry.SchemaRegistry;\n model?: TableModel;\n modals: ModalController;\n onNewColumn: () => void;\n};\n\nexport const ColumnSettings = ({ registry, model, modals, onNewColumn }: ColumnSettingsProps) => {\n const [newField, setNewField] = useState<View.FieldType>();\n const state = useAtomValue(modals.state);\n\n useEffect(() => {\n if (state?.type === 'columnSettings' && state.mode.type === 'create' && model?.projection) {\n setNewField(model.projection.createFieldProjection());\n requestAnimationFrame(() => {\n onNewColumn();\n });\n } else {\n setNewField(undefined);\n }\n }, [model?.projection, state]);\n\n const existingField = useMemo(() => {\n if (state?.type === 'columnSettings') {\n const { mode } = state;\n if (mode.type === 'edit') {\n return model?.projection?.getFields().find((f) => f.id === mode.fieldId);\n }\n }\n return undefined;\n }, [model?.projection, state]);\n\n const field = existingField ?? newField;\n\n const handleSave = useCallback(() => {\n modals.close();\n }, [modals]);\n\n const handleCancel = useCallback(() => {\n if (state?.type === 'columnSettings' && state.mode.type === 'create' && newField) {\n model?.projection.deleteFieldProjection(newField.id);\n }\n }, [model?.projection, state, newField]);\n\n if (!model?.projection || !field) {\n return null;\n }\n\n return (\n <Popover.Root modal={false} open={state?.type === 'columnSettings'}>\n <Popover.VirtualTrigger virtualRef={modals.trigger} />\n <Popover.Portal>\n <Popover.Content classNames='md:w-64'>\n <Popover.Viewport>\n <FieldEditor\n projection={model.projection}\n field={field}\n registry={registry}\n onSave={handleSave}\n onCancel={handleCancel}\n />\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React from 'react';\n\nimport { DropdownMenu, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { translationKey } from '#translations';\n\nimport { type ModalController, type TableModel } from '../../model';\n\ntype RowActionsMenuProps = { model: TableModel; modals: ModalController };\n\nexport const RowActionsMenu = ({ model, modals }: RowActionsMenuProps) => {\n const { t } = useTranslation(translationKey);\n const hasSelection = model.selection.hasSelection;\n const state = useAtomValue(modals.state);\n if (state?.type !== 'row') {\n return null;\n }\n return (\n <DropdownMenu.Root modal={false} open={true} onOpenChange={modals.close}>\n <DropdownMenu.VirtualTrigger virtualRef={modals.trigger} />\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {/* Custom actions */}\n {model.rowActions?.length > 0 && (\n <>\n <DropdownMenu.Group>\n {model.rowActions?.map((action) => (\n <DropdownMenu.Item\n key={action.id}\n data-testid={`row-action-${action.id}`}\n onClick={() => {\n modals.close();\n model.handleRowAction(action.id, state.rowIndex);\n }}\n >\n {toLocalizedString(action.label, t)}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Group>\n <DropdownMenu.Separator />\n </>\n )}\n {/* Default actions */}\n {model.features.dataEditable !== false && (\n <DropdownMenu.Item data-testid='row-menu-delete' onClick={() => model.deleteRow(state.rowIndex)}>\n {t(hasSelection ? 'bulk-delete-row.label' : 'delete-row.label')}\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Atom, RegistryContext } from '@effect-atom/atom-react';\nimport React, { useContext, useEffect, useMemo } from 'react';\n\nimport {\n type ActionGraphEdges,\n type ActionGraphNodes,\n type ActionGraphProps,\n Menu,\n type MenuAction,\n MenuRootProps,\n createGapSeparator,\n createMenuAction,\n useMenuActions,\n} from '@dxos/react-ui-menu';\nimport { composable, composableProps } from '@dxos/ui-theme';\n\nimport { translationKey } from '#translations';\n\nexport type TableToolbarActionProperties = { type: TableToolbarActionType };\n\nexport type TableToolbarAction = MenuAction<TableToolbarActionProperties>;\n\nexport type TableToolbarActionType = 'add-row' | 'comment' | 'save-view';\n\ntype TableToolbarState = Partial<{ viewDirty: boolean }>;\n\nconst createTableToolbarActions = ({\n stateAtom,\n onAdd,\n onSave,\n customActions,\n}: {\n stateAtom: Atom.Atom<TableToolbarState>;\n onAdd?: () => void;\n onSave?: () => void;\n customActions?: Atom.Atom<ActionGraphProps>;\n}) =>\n Atom.make((get) => {\n const nodes: ActionGraphNodes = [];\n if (onAdd) {\n const add = createMenuAction<TableToolbarActionProperties>('add-row', onAdd, {\n type: 'add-row' as const,\n icon: 'ph--plus--regular',\n label: ['add-row.label', { ns: translationKey }],\n testId: 'table.toolbar.add-row',\n });\n nodes.push(add);\n }\n if (onSave) {\n const state = get(stateAtom);\n const save = createMenuAction<TableToolbarActionProperties>('save-view', onSave, {\n type: 'save-view' as const,\n icon: 'ph--floppy-disk--regular',\n label: ['save-view.label', { ns: translationKey }],\n testId: 'table.toolbar.save-view',\n iconOnly: false,\n hidden: !state.viewDirty,\n });\n nodes.push(save);\n }\n const gap = createGapSeparator();\n nodes.push(...gap.nodes);\n const edges: ActionGraphEdges = nodes.map(({ id: target }) => ({ source: 'root', target, relation: 'child' }));\n if (customActions) {\n const custom = get(customActions);\n nodes.push(...custom.nodes);\n edges.push(...custom.edges);\n }\n\n return {\n nodes,\n edges,\n };\n });\n\nexport type TableToolbarProps = Pick<MenuRootProps, 'attendableId'> &\n TableToolbarState & {\n onAdd?: () => void;\n onSave?: () => void;\n customActions?: Atom.Atom<ActionGraphProps>;\n };\n\nexport const TableToolbar = composable<HTMLDivElement, TableToolbarProps>(\n ({ attendableId, viewDirty, onAdd, onSave, customActions, ...props }, forwardedRef) => {\n const registry = useContext(RegistryContext);\n const stateAtom = useMemo(() => Atom.make<TableToolbarState>({ viewDirty }), []);\n\n // Update state.viewDirty when the prop changes.\n useEffect(() => {\n registry.set(stateAtom, { viewDirty });\n }, [registry, stateAtom, viewDirty]);\n\n const actionsCreator = useMemo(\n () => createTableToolbarActions({ stateAtom, onAdd, onSave, customActions }),\n [stateAtom, onAdd, onSave, customActions],\n );\n const menuActions = useMenuActions(actionsCreator);\n\n return (\n <Menu.Root {...menuActions} attendableId={attendableId}>\n <Menu.Toolbar {...composableProps(props)} ref={forwardedRef} />\n </Menu.Root>\n );\n },\n);\n\nTableToolbar.displayName = 'TableToolbar';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport type * as Types from 'effect/Types';\nimport React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { type Type } from '@dxos/echo';\nimport { type JsonSchema } from '@dxos/echo';\nimport { type ThemedClassName, useDefaultValue } from '@dxos/react-ui';\nimport { type ProjectionModel } from '@dxos/schema';\nimport { mx } from '@dxos/ui-theme';\n\nimport { useTableModel } from '../../hooks';\nimport { type TableFeatures, TablePresentation, type TableRowAction } from '../../model';\nimport { type Table as TableType } from '../../types';\nimport { type TablePropertyDefinition, getBaseSchema, makeDynamicTable } from '../../util';\nimport { Table, type TableController } from './Table';\n\nexport type DynamicTableProps<T extends Type.AnyEntity = Type.AnyEntity> = ThemedClassName<{\n schema?: T;\n name?: string; // TODO(burdon): Remove?\n rows: any[];\n properties?: TablePropertyDefinition[];\n jsonSchema?: Types.DeepMutable<JsonSchema.JsonSchema>;\n features?: Partial<TableFeatures>;\n rowActions?: TableRowAction[];\n onRowClick?: (row: any) => void;\n onRowAction?: (actionId: string, datum: any) => void;\n}>;\n\n/**\n * Properties define both the schema and display characteristics of the table columns.\n */\n// TODO(burdon): Instead of creating component variants, create helpers/hooks that normalize the props.\n// TODO(burdon): Warning: Cannot update a component (`DynamicTable`) while rendering a different component (`DynamicTable`).\nexport const DynamicTable = <T extends Type.AnyEntity = Type.AnyEntity>({\n classNames,\n schema,\n name = 'com.example.dynamicTable', // Remove default or make random; this will lead to type collisions.\n rows,\n properties,\n jsonSchema: jsonSchemaProp,\n rowActions,\n onRowClick,\n onRowAction,\n ...props\n}: DynamicTableProps<T>) => {\n const registry = useContext(RegistryContext);\n const [dynamicTable, setDynamicTable] = useState<{ object: TableType.Table; projection: ProjectionModel }>();\n\n // TODO(burdon): Remove variance from the props (should be normalized externally; possibly via hooks).\n const { jsonSchema } = useMemo(\n () => getBaseSchema({ typename: name, properties, jsonSchema: jsonSchemaProp, schema }),\n [name, properties, jsonSchemaProp, schema],\n );\n\n useEffect(() => {\n setDynamicTable(makeDynamicTable({ registry, jsonSchema, properties }));\n }, [registry, jsonSchema, properties]);\n\n const tableRef = useRef<TableController>(null);\n const handleCellUpdate = useCallback((cell: any) => {\n tableRef.current?.update?.(cell);\n }, []);\n\n const handleRowOrderChange = useCallback(() => {\n tableRef.current?.update?.();\n }, []);\n\n const features = useDefaultValue(\n props.features,\n () =>\n ({\n selection: { enabled: false },\n dataEditable: false,\n }) as const,\n );\n\n const model = useTableModel({\n rows,\n object: dynamicTable?.object,\n projection: dynamicTable?.projection,\n features,\n rowActions,\n onCellUpdate: handleCellUpdate,\n onRowOrderChange: handleRowOrderChange,\n onRowAction,\n });\n\n const presentation = useMemo(() => {\n if (model) {\n return new TablePresentation(registry, model);\n }\n }, [registry, model]);\n\n return (\n <div className={mx('dx-expander grid', classNames)}>\n <div className='grid min-h-0 overflow-hidden'>\n <Table.Root ref={tableRef}>\n <Table.Content model={model} presentation={presentation} ignoreAttention onRowClick={onRowClick} />\n </Table.Root>\n </div>\n </div>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Atom", "createContext", "React", "forwardRef", "useImperativeHandle", "useRef", "Atom", "RegistryContext", "useAtomValue", "String", "React", "useCallback", "useContext", "useEffect", "useMemo", "useState", "log", "useAttention", "Grid", "closestCell", "gridSeparatorBlockEnd", "gridSeparatorInlineEnd", "DxEditRequest", "composable", "composableProps", "mx", "Filter", "JsonSchema", "Obj", "Order", "Query", "Ref", "Type", "ProjectionModel", "ViewModel", "createEchoChangeCallback", "getSchemaFromPropertyDefinitions", "getBaseSchema", "schema", "typename", "properties", "jsonSchema", "getSchemaFromPropertyDefinitions", "JsonSchema", "toJsonSchema", "Type", "getTypename", "Error", "makeDynamicTable", "registry", "view", "ViewModel", "make", "query", "Query", "select", "Filter", "everything", "fields", "map", "property", "name", "object", "Obj", "Table", "Ref", "sizes", "projection", "ProjectionModel", "baseSchema", "change", "createEchoChangeCallback", "normalizeView", "getFields", "setProperties", "table", "field", "find", "path", "size", "undefined", "update", "title", "fieldProjection", "getFieldProjection", "id", "setFieldProjection", "props", "sort", "currentQuery", "fromAst", "getSnapshot", "ast", "newQuery", "orderBy", "Order", "touch", "value", "Schema", "SchemaAST", "narrowSchema", "schema", "paths", "ast", "isTypeLiteral", "propertySignatures", "filter", "signature", "includes", "name", "toString", "length", "narrowType", "TypeLiteral", "make", "undefined", "Atom", "ModalController", "_registry", "_state", "_triggerRef", "current", "registry", "make", "type", "state", "stateValue", "get", "trigger", "setTrigger", "showRowMenu", "rowIndex", "set", "showColumnMenu", "fieldId", "showColumnCreator", "mode", "showReferencePanel", "targetId", "schemaId", "typename", "openColumnSettings", "currentState", "requestAnimationFrame", "close", "EditorView", "React", "useCallback", "useMemo", "useRef", "useState", "debounce", "Format", "TypeEnum", "invariant", "GridCellEditor", "editorKeys", "parseCellIndex", "useGridContext", "React", "useGridContext", "CellValidationMessage", "__gridScope", "validationError", "variant", "editing", "editBox", "box", "bgClass", "textClass", "div", "className", "style", "inlineSize", "zIndex", "insetBlockEnd", "insetBlockStart", "insetInlineStart", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Entity", "Ref", "getValue", "invariant", "Popover", "Form", "parseCellIndex", "useGridContext", "getDeep", "isTruthy", "setDeep", "translationKey", "createOptionLabel", "id", "editing", "contextEditing", "setEditing", "useGridContext", "__gridScope", "setLocalEditing", "useEffect", "cellElement", "anchorRef", "current", "undefined", "narrowSchema", "JSON", "useMemo", "cell", "parseCellIndex", "draftRow", "getDraftRows", "row", "invariant", "data", "model", "setFormValues", "values", "handleOpenChange", "onSave", "useCallback", "path", "setDeep", "value", "fieldProjection", "originalRow", "objectWithId", "make", "field", "Ref", "ref", "onCreate", "Entity", "obj", "toString", "label", "filter", "isTruthy", "virtualRef", "Popover", "tabIndex", "React", "autoFocus", "schema", "formValues", "onValuesChanged", "projection", "createInitialValuePath", "createOptionIcon", "db", "getOptions", "handleCreate", "__dxlog_file", "TableValueEditor", "fieldProjection", "useMemo", "model", "editing", "projection", "getFieldProjection", "invariant", "__gridScope", "schema", "modals", "onSave", "onCreate", "onFocus", "suppressNextBlur", "useRef", "validationError", "setValidationError", "useState", "validationVariant", "setValidationVariant", "useCallback", "validationResult", "value", "setEditing", "current", "cell", "parseCellIndex", "result", "validateCellData", "setCellData", "event", "extensions", "handleClose", "onNav", "content", "index", "undefined", "React", "getCellContent", "onBlur", "determineNavigationAxis", "shift", "useAtomValue", "React", "DropdownMenu", "useTranslation", "translationKey", "ColumnActionsMenu", "model", "modals", "t", "state", "type", "currentSort", "getSorting", "isCurrentColumnSorted", "fieldId", "Root", "modal", "open", "onOpenChange", "close", "VirtualTrigger", "virtualRef", "trigger", "Portal", "Content", "Viewport", "direction", "Item", "data-testid", "onClick", "setSort", "clearSort", "getColumnCount", "features", "schemaEditable", "deleteColumn", "openColumnSettings", "Arrow", "useAtomValue", "React", "useCallback", "useEffect", "useMemo", "useState", "Popover", "FieldEditor", "ColumnSettings", "registry", "model", "modals", "onNewColumn", "newField", "setNewField", "state", "type", "mode", "projection", "createFieldProjection", "requestAnimationFrame", "undefined", "existingField", "getFields", "find", "f", "id", "fieldId", "field", "handleSave", "close", "handleCancel", "deleteFieldProjection", "Root", "modal", "open", "VirtualTrigger", "virtualRef", "trigger", "Portal", "Content", "classNames", "Viewport", "onSave", "onCancel", "Arrow", "useAtomValue", "React", "DropdownMenu", "toLocalizedString", "useTranslation", "translationKey", "RowActionsMenu", "model", "modals", "t", "hasSelection", "selection", "state", "type", "Root", "modal", "open", "onOpenChange", "close", "VirtualTrigger", "virtualRef", "trigger", "Content", "Viewport", "rowActions", "length", "Group", "map", "action", "Item", "key", "id", "data-testid", "onClick", "handleRowAction", "rowIndex", "label", "Separator", "features", "dataEditable", "deleteRow", "Arrow", "__dxlog_file", "columnDefault", "maxSize", "Atom", "emptyRowsAtom", "useContext", "dxGrid", "setDxGrid", "useState", "hasAttention", "useAttention", "model", "modals", "useMemo", "ModalController", "registry", "rows", "useAtomValue", "cellUpdateCounter", "cellUpdate", "columnCount", "Object", "columnMeta", "grid", "getFields", "frozen", "noActionColumn", "dataEditable", "frozenRowsStart", "frozenRowsEnd", "frozenColsStart", "frozenColsEnd", "useCallback", "useEffect", "getCells", "setFocus", "col", "row", "refocus", "requestAnimationFrame", "requestUpdate", "didCommitSuccessfully", "commitDraftRow", "scrollToEndRow", "plane", "cell", "onRowClick", "tableButtonElement", "values", "tableButtons", "find", "data", "controlElement", "tableControls", "ctrl", "selection", "toggleSelectionForRowIndex", "colIndex", "value", "getRowCount", "handleInsertRowResult", "increment", "handleSaveDraftRow", "delta", "navigator", "clipboard", "textContent", "event", "preventDefault", "error", "log", "catch", "cellElement", "getBoundingClientRect", "editRequest", "cellIndex", "cellBox", "insetInlineStart", "rect", "left", "insetBlockStart", "inlineSize", "width", "blockSize", "height", "initialContent", "dispatchEvent", "handleSave", "columnIndex", "index", "setColumnWidth", "stopPropagation", "columns", "scrollToColumn", "presentation", "updateIfWithinBounds", "updateCells", "React", "ref", "forwardedRef", "id", "TableValueEditor", "schema", "onFocus", "onSave", "onCreate", "className", "rowDefault", "limitRows", "limitColumns", "overscroll", "onAxisResize", "handleAxisResize", "onClick", "handleGridClick", "onKeyDownCapture", "onWheelCapture", "onNewColumn", "TableContent", "Atom", "RegistryContext", "React", "useContext", "useEffect", "useMemo", "Menu", "createGapSeparator", "createMenuAction", "useMenuActions", "composable", "composableProps", "translationKey", "createTableToolbarActions", "stateAtom", "onAdd", "onSave", "customActions", "make", "get", "nodes", "add", "type", "icon", "label", "ns", "testId", "push", "state", "save", "iconOnly", "hidden", "viewDirty", "gap", "edges", "map", "id", "target", "source", "relation", "custom", "TableToolbar", "attendableId", "props", "forwardedRef", "registry", "set", "actionsCreator", "menuActions", "Root", "Toolbar", "ref", "displayName", "emptyColumnMeta", "Atom", "make", "grid", "TableContextProvider", "useTableContext", "createContext", "TABLE_ROOT_NAME", "TableRoot", "forwardRef", "children", "forwardedRef", "controllerRef", "useRef", "useImperativeHandle", "update", "cell", "current", "handleInsertRowResult", "result", "React", "displayName", "Table", "Root", "Toolbar", "TableToolbar", "Content", "TableContent", "RegistryContext", "React", "useCallback", "useContext", "useEffect", "useMemo", "useRef", "useState", "useDefaultValue", "mx", "DynamicTable", "classNames", "schema", "name", "rows", "properties", "jsonSchema", "jsonSchemaProp", "rowActions", "onRowClick", "onRowAction", "props", "registry", "useContext", "RegistryContext", "dynamicTable", "setDynamicTable", "useState", "useMemo", "getBaseSchema", "typename", "useEffect", "makeDynamicTable", "tableRef", "useRef", "handleCellUpdate", "useCallback", "cell", "current", "update", "handleRowOrderChange", "features", "useDefaultValue", "selection", "enabled", "dataEditable", "model", "useTableModel", "object", "projection", "onCellUpdate", "onRowOrderChange", "presentation", "TablePresentation", "React", "div", "className", "mx", "Table", "Root", "ref", "Content", "ignoreAttention"]
|
|
7
7
|
}
|