@dxos/react-ui-table 0.8.4-main.c1de068 → 0.8.4-main.f5c0578
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-5XLSHLOG.mjs → chunk-ZAOSIG3L.mjs} +382 -319
- package/dist/lib/browser/chunk-ZAOSIG3L.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +404 -381
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +4 -2
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/{chunk-Y66YLSTC.mjs → chunk-ZOFFI3JJ.mjs} +382 -319
- package/dist/lib/node-esm/chunk-ZOFFI3JJ.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +404 -381
- 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 +4 -2
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/components/Table/ColumnActionsMenu.d.ts +1 -1
- package/dist/types/src/components/Table/ColumnActionsMenu.d.ts.map +1 -1
- package/dist/types/src/components/Table/ColumnSettings.d.ts +1 -1
- package/dist/types/src/components/Table/ColumnSettings.d.ts.map +1 -1
- package/dist/types/src/components/Table/CreateRefPanel.d.ts +1 -1
- package/dist/types/src/components/Table/CreateRefPanel.d.ts.map +1 -1
- package/dist/types/src/components/Table/DynamicTable.d.ts.map +1 -1
- package/dist/types/src/components/Table/DynamicTable.stories.d.ts +1 -1
- package/dist/types/src/components/Table/DynamicTable.stories.d.ts.map +1 -1
- package/dist/types/src/components/Table/{relations.stories.d.ts → Relations.stories.d.ts} +2 -2
- package/dist/types/src/components/Table/Relations.stories.d.ts.map +1 -0
- package/dist/types/src/components/Table/RowActionsMenu.d.ts +1 -1
- package/dist/types/src/components/Table/RowActionsMenu.d.ts.map +1 -1
- package/dist/types/src/components/Table/Table.d.ts +1 -0
- package/dist/types/src/components/Table/Table.d.ts.map +1 -1
- package/dist/types/src/components/Table/Table.stories.d.ts +1 -1
- package/dist/types/src/components/Table/Table.stories.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/CellValidationMessage.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts +5 -5
- package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/extension.d.ts.map +1 -1
- package/dist/types/src/components/TableToolbar/TableToolbar.d.ts.map +1 -1
- package/dist/types/src/hooks/useTableModel.d.ts +1 -1
- package/dist/types/src/hooks/useTableModel.d.ts.map +1 -1
- package/dist/types/src/model/modal-controller.d.ts.map +1 -1
- package/dist/types/src/model/selection-model.d.ts.map +1 -1
- package/dist/types/src/model/table-model.d.ts +3 -2
- package/dist/types/src/model/table-model.d.ts.map +1 -1
- package/dist/types/src/model/table-presentation.d.ts +2 -1
- package/dist/types/src/model/table-presentation.d.ts.map +1 -1
- package/dist/types/src/model/table-sorting.d.ts +2 -2
- package/dist/types/src/model/table-sorting.d.ts.map +1 -1
- package/dist/types/src/testing/useTestTableModel.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +2 -2
- package/dist/types/src/util/dynamic-table.d.ts.map +1 -1
- package/dist/types/src/util/table-buttons.d.ts.map +1 -1
- package/dist/types/src/util/table-controls.d.ts.map +1 -1
- package/dist/types/src/util/table.d.ts +2 -1
- package/dist/types/src/util/table.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +42 -38
- package/src/components/Table/ColumnActionsMenu.tsx +1 -1
- package/src/components/Table/ColumnSettings.tsx +1 -1
- package/src/components/Table/CreateRefPanel.tsx +1 -1
- package/src/components/Table/DynamicTable.stories.tsx +3 -2
- package/src/components/Table/DynamicTable.tsx +4 -3
- package/src/components/Table/{relations.stories.tsx → Relations.stories.tsx} +12 -4
- package/src/components/Table/RowActionsMenu.tsx +3 -3
- package/src/components/Table/Table.stories.tsx +12 -7
- package/src/components/Table/Table.tsx +56 -45
- package/src/components/TableCellEditor/CellValidationMessage.tsx +1 -1
- package/src/components/TableCellEditor/TableCellEditor.stories.tsx +4 -3
- package/src/components/TableCellEditor/TableCellEditor.tsx +16 -20
- package/src/components/TableCellEditor/extension.ts +2 -2
- package/src/components/TableToolbar/TableToolbar.tsx +2 -2
- package/src/components/testing.ts +1 -1
- package/src/hooks/useTableModel.ts +1 -1
- package/src/model/modal-controller.ts +1 -1
- package/src/model/selection-model.ts +3 -2
- package/src/model/table-model.test.ts +2 -1
- package/src/model/table-model.ts +13 -10
- package/src/model/table-presentation.test.ts +3 -2
- package/src/model/table-presentation.ts +28 -6
- package/src/model/table-sorting.ts +3 -3
- package/src/playwright/smoke.spec.ts +92 -0
- package/src/testing/useTestTableModel.ts +3 -2
- package/src/translations.ts +2 -2
- package/src/util/dynamic-table.ts +2 -2
- package/src/util/schema.ts +1 -1
- package/src/util/table-buttons.ts +2 -1
- package/src/util/table-controls.ts +4 -1
- package/src/util/table.ts +7 -3
- package/dist/lib/browser/chunk-5XLSHLOG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-Y66YLSTC.mjs.map +0 -7
- package/dist/types/src/components/Table/relations.stories.d.ts.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/translations.ts", "../../../src/components/Table/Table.tsx", "../../../src/components/
|
|
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': 'Schema',\n 'new schema': 'New schema',\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 useImperativeHandle,\n useState,\n useMemo,\n useEffect,\n} from 'react';\n\nimport { type Client } from '@dxos/client';\nimport { Filter } from '@dxos/echo';\nimport { getValue } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\n// TODO(wittjosiah): Remove dependency on react-client.\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n closestCell,\n type DxGridElement,\n type DxGridPosition,\n type GridContentProps,\n Grid,\n type DxGridPlane,\n type DxGridPlaneRange,\n gridSeparatorInlineEnd,\n gridSeparatorBlockEnd,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\nimport { isNotFalsy, safeParseInt } from '@dxos/util';\n\nimport { ColumnActionsMenu } from './ColumnActionsMenu';\nimport { ColumnSettings } from './ColumnSettings';\nimport { CreateRefPanel } from './CreateRefPanel';\nimport { RowActionsMenu } from './RowActionsMenu';\nimport { ModalController, type TableModel, type TablePresentation } from '../../model';\nimport { translationKey } from '../../translations';\nimport { tableButtons, tableControls } from '../../util';\nimport { createOption, TableValueEditor, type TableCellEditorProps } from '../TableCellEditor';\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};\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 { t } = useTranslation(translationKey);\n const modals = useMemo(() => new ModalController(), []);\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: 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 /**\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 };\n }, [presentation, dxGrid]);\n\n const handleGridClick = useCallback(\n (event: MouseEvent) => {\n const rowIndex = safeParseInt((event.target as HTMLElement).closest('[aria-rowindex]')?.ariaRowIndex ?? '');\n if (rowIndex != null) {\n if (onRowClick) {\n const row = model?.getRowAt(rowIndex);\n row && onRowClick(row);\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 if (model) {\n const didCommitSuccessfully = model.commitDraftRow(data.rowIndex);\n if (dxGrid && didCommitSuccessfully) {\n requestAnimationFrame(() => {\n dxGrid.scrollToEndRow();\n });\n }\n }\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) => {\n if (dxGrid) {\n dxGrid.refocus(increment, delta);\n }\n },\n [dxGrid],\n );\n\n const handleEnter = useCallback<NonNullable<TableCellEditorProps['onEnter']>>(\n (cell) => {\n if (!model?.features.dataEditable) {\n return;\n }\n\n // TODO(burdon): Insert row only if bottom row isn't completely blank already.\n if (model && cell.row === model.getRowCount() - 1) {\n model.insertRow();\n if (dxGrid) {\n requestAnimationFrame(() => {\n dxGrid?.scrollToRow(cell.row + 1);\n dxGrid?.refocus('row', 1);\n });\n }\n }\n },\n [model, dxGrid],\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 switch (event.key) {\n case 'Backspace':\n case 'Delete': {\n model.setCellData(cell, undefined);\n break;\n }\n }\n },\n [model],\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 // TODO(burdon): Factor out?\n // TODO(burdon): Generalize to handle other value types (e.g., enums).\n const handleQuery = useCallback<NonNullable<TableCellEditorProps['onQuery']>>(\n async ({ field, props }, text) => {\n if (model && props.referenceSchema && field.referencePath) {\n const space = getSpace(model.view);\n invariant(space);\n\n let schema;\n if (client) {\n schema = client.graph.schemaRegistry.getSchema(props.referenceSchema);\n }\n if (!schema) {\n schema = space.db.schemaRegistry.getSchema(props.referenceSchema);\n }\n\n if (schema) {\n const { objects } = await space.db.query(Filter.type(schema)).run();\n const options = objects\n .map((obj) => {\n const value = getValue(obj, field.referencePath!);\n if (!value || typeof value !== 'string') {\n return undefined;\n }\n\n return {\n label: value,\n data: obj,\n };\n })\n .filter(isNotFalsy);\n\n return [\n ...options,\n {\n label: t('create new object label', { text }),\n data: createOption(text),\n },\n ];\n }\n }\n\n return [];\n },\n [model, client, t],\n );\n\n const handleSave = useCallback(() => {\n dxGrid?.updateCells(true);\n }, [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 onEnter={handleEnter}\n onFocus={handleFocus}\n onQuery={handleQuery}\n onSave={handleSave}\n />\n <Grid.Content\n className={mx('[--dx-grid-base:var(--baseSurface)]', gridSeparatorInlineEnd, gridSeparatorBlockEnd)}\n frozen={frozen}\n columns={model.columnMeta.value}\n limitRows={model.getRowCount() ?? 0}\n limitColumns={model.projection.fields.length}\n overscroll='trap'\n onAxisResize={handleAxisResize}\n onClick={handleGridClick}\n onKeyDown={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 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { DropdownMenu, useTranslation } from '@dxos/react-ui';\n\nimport { type TableModel, type ModalController } 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 TableModel, type ModalController } 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 { live } from '@dxos/live-object';\n// TODO(wittjosiah): Remove dependency on 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 TableModel, type ModalController } 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 space = model && getSpace(model?.view);\n const state = modals.state.value;\n\n const schema = useMemo<Schema.Schema<any> | undefined>(() => {\n if (!space || state?.type !== 'createRefPanel') {\n return;\n }\n\n const [schema] = space.db.schemaRegistry.query({ typename: state.typename }).runSync();\n if (schema) {\n const omit = Schema.omit<any, any, ['id']>('id');\n return omit(schema);\n }\n }, [space, state]);\n\n const handleSave = useCallback(\n (values: any) => {\n if (!model || !space || state?.type !== 'createRefPanel') {\n return;\n }\n\n const [schema] = space.db.schemaRegistry.query({ typename: state.typename }).runSync();\n if (schema) {\n const obj = space.db.add(live(schema, values));\n state.onCreate?.(obj);\n }\n void modals.close();\n },\n [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, useTranslation } from '@dxos/react-ui';\n\nimport { type TableModel, type ModalController } 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 {t(action.translationKey)}\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 Completion } from '@codemirror/autocomplete';\nimport { type Schema } from 'effect/Schema';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { FormatEnum, TypeEnum } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { type DxGrid } from '@dxos/lit-grid';\nimport { useThemeContext } from '@dxos/react-ui';\nimport { createMarkdownExtensions } from '@dxos/react-ui-editor';\nimport {\n cellQuery,\n editorKeys,\n parseCellIndex,\n useGridContext,\n type DxGridPlanePosition,\n type EditorKeyEvent,\n type EditorKeyOrBlurHandler,\n type EditorBlurHandler,\n GridCellEditor,\n type GridCellEditorProps,\n type GridScopedProps,\n} from '@dxos/react-ui-grid';\nimport { tagPicker, createLinks } from '@dxos/react-ui-tag-picker';\nimport { type FieldProjection } from '@dxos/schema';\n\nimport { CellValidationMessage } from './CellValidationMessage';\nimport { FormCellEditor } from './FormCellEditor';\nimport { completion } from './extension';\nimport { type TableModel, type ModalController } from '../../model';\n\nconst newValue = Symbol.for('newValue');\n\n/**\n * Option to create new object/value.\n */\nexport const createOption = (text: string) => ({ [newValue]: true, text });\n\nconst isCreateOption = (data: any) => typeof data === 'object' && data[newValue];\n\nexport type QueryResult = Pick<Completion, 'label'> & { data: any };\n\nexport type TableCellEditorProps = {\n model?: TableModel;\n modals?: ModalController;\n schema?: Schema.AnyNoContext;\n onEnter?: (cell: DxGridPlanePosition) => void;\n onFocus?: DxGrid['refocus'];\n onSave?: () => void;\n onQuery?: (field: FieldProjection, text: string) => Promise<QueryResult[]>;\n};\n\nexport const TableValueEditor = ({\n model,\n modals,\n schema,\n onEnter,\n onFocus,\n onSave,\n onQuery,\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 // 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 />\n );\n }\n\n // For all other types, use the existing cell editor\n return (\n <TableCellEditor\n model={model}\n modals={modals}\n onEnter={onEnter}\n onFocus={onFocus}\n onQuery={onQuery}\n onSave={onSave}\n __gridScope={__gridScope}\n />\n );\n};\n\nconst editorSlots = { scroller: { className: '!plb-[--dx-grid-cell-editor-padding-block]' } };\n\nexport const TableCellEditor = ({\n model,\n modals,\n onEnter,\n onFocus,\n onQuery,\n onSave,\n __gridScope,\n}: GridScopedProps<TableCellEditorProps>) => {\n const { id: gridId, editing, setEditing } = useGridContext('TableCellEditor', __gridScope);\n const suppressNextBlur = useRef(false);\n const { themeMode } = useThemeContext();\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 useEffect(() => {\n // Check for existing validation errors when editing starts (for draft rows).\n if (!model || !editing || !fieldProjection) {\n setValidationError(null);\n return;\n }\n\n const cell = parseCellIndex(editing.index);\n const { row, col } = cell;\n\n if (model.isDraftCell(cell)) {\n const field = model.projection.fields[col];\n const hasValidationError = model.hasDraftRowValidationError(row, field.path);\n\n if (hasValidationError) {\n const draftRows = model.draftRows.value;\n if (row >= 0 && row < draftRows.length) {\n const draftRow = draftRows[row];\n const validationError = draftRow.validationErrors?.find((error) => error.path === field.path);\n if (validationError) {\n setValidationError(validationError.message);\n setValidationVariant('warning');\n }\n }\n } else {\n setValidationError(null);\n }\n } else {\n setValidationError(null);\n }\n }, [model, editing, fieldProjection]);\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 onEnter?.(cell);\n onFocus?.();\n setEditing(null);\n onSave?.();\n } else {\n setValidationError(validationResult.error);\n setValidationVariant('error');\n }\n },\n [model, editing, onEnter, onFocus, setEditing],\n );\n\n const handleBlur = useCallback<EditorBlurHandler>(\n async (value) => {\n if (!model || !editing) {\n return;\n }\n if (suppressNextBlur.current) {\n suppressNextBlur.current = false;\n }\n\n // Don't save on blur - let handleClose handle validation and saving\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\n if (value !== undefined) {\n // Pre-commit validation check.\n const result = await model.validateCellData(cell, value);\n\n if (result.valid) {\n setValidationError(null);\n model.setCellData(cell, value);\n setEditing(null);\n onSave?.();\n onEnter?.(cell);\n if (event && onFocus) {\n onFocus(determineNavigationAxis(event), determineNavigationDelta(event));\n }\n } else {\n setValidationError(result.error);\n setValidationVariant('error');\n }\n } else {\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, onEnter, fieldProjection, setEditing, onSave],\n );\n\n const extension = useMemo(() => {\n if (!fieldProjection) {\n return [];\n }\n\n const extension = [\n editorKeys({\n onClose: handleClose,\n ...(editing?.initialContent && { onNav: handleClose }),\n }),\n ];\n\n const format = fieldProjection.props.format;\n\n if (format === FormatEnum.SingleSelect || format === FormatEnum.MultiSelect) {\n // TODO(ZaymonFC): Reconcile this with the TagPicker component?\n // Add markdown extensions needed by tag picker.\n extension.push(createMarkdownExtensions({ themeMode }));\n\n const options = fieldProjection.props.options || [];\n\n const mode = format === FormatEnum.SingleSelect ? ('single-select' as const) : ('multi-select' as const);\n\n extension.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 if (onQuery) {\n switch (fieldProjection.props.format) {\n case FormatEnum.Ref: {\n extension.push([\n completion({\n onQuery: (text) => onQuery(fieldProjection, text),\n onMatch: (data) => {\n if (model && editing && modals) {\n if (isCreateOption(data)) {\n const { field, props } = fieldProjection;\n if (props.referenceSchema) {\n suppressNextBlur.current = true;\n modals.openCreateRef(\n props.referenceSchema,\n document.querySelector(cellQuery(editing.index, gridId)),\n {\n [field.referencePath!]: data.text,\n },\n (data) => {\n void handleEnter(data);\n },\n );\n }\n } else {\n void handleEnter(data);\n }\n }\n },\n }),\n ]);\n break;\n }\n }\n }\n\n return extension;\n }, [model, modals, editing, fieldProjection, handleClose, themeMode]);\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\n if (value !== undefined) {\n const options = fieldProjection.props.options || [];\n\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\n validationError={_validationError}\n variant={_validationVariant}\n __gridScope={__gridScope}\n />\n <GridCellEditor extension={extension} 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 { useGridContext, type GridScopedProps } 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 { getSnapshot } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { Popover } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { parseCellIndex, useGridContext } from '@dxos/react-ui-grid';\nimport { type FieldProjection } from '@dxos/schema';\nimport { getDeep, setDeep } from '@dxos/util';\n\nimport { type TableModel } from '../../model';\nimport { narrowSchema } from '../../util';\n\ntype FormCellEditorProps = {\n fieldProjection: FieldProjection;\n model?: TableModel;\n schema?: Schema.Schema.AnyNoContext;\n onSave?: () => void;\n __gridScope: any;\n};\n\nexport const FormCellEditor = ({ fieldProjection, model, schema, onSave, __gridScope }: FormCellEditorProps) => {\n const { editing: contextEditing, setEditing } = useGridContext('ArrayEditor', __gridScope);\n const [editing, setLocalEditing] = useState(false);\n const anchorRef = useRef<HTMLButtonElement | null>(null);\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 const originalRow = useMemo(() => {\n if (model && contextEditing) {\n const cell = parseCellIndex(contextEditing.index);\n const row = model.getRowAt(cell.row);\n invariant(row);\n\n return row;\n }\n\n return undefined;\n }, [model, contextEditing]);\n\n const formValues = useMemo(() => {\n if (originalRow) {\n // NOTE(ZaymonFC): Important to get a snapshot to eject from the live object.\n return getSnapshot(originalRow);\n }\n }, [originalRow]);\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 setEditing(null);\n setLocalEditing(false);\n onSave?.();\n },\n [fieldProjection.field.path, originalRow],\n );\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.Content tabIndex={-1} classNames='popover-card-width density-fine'>\n <Popover.Arrow />\n <Popover.Viewport>\n <Form values={formValues} schema={narrowedSchema as any} onSave={handleSave} />\n </Popover.Viewport>\n </Popover.Content>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n autocompletion,\n pickedCompletion,\n type CompletionContext,\n type CompletionResult,\n} from '@codemirror/autocomplete';\nimport { type Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\n\nexport type CompletionOptions = {\n debug?: boolean;\n onQuery: (text: string) => Promise<CompletionResult['options']>;\n onMatch: (data: any) => void;\n};\n\n/**\n * Autocomplete Codemirror extension.\n * https://codemirror.net/docs/ref/#autocomplete.autocompletion\n */\nexport const completion = ({ debug, onQuery, onMatch }: CompletionOptions): Extension => {\n return [\n EditorView.theme({\n '.cm-completionDialog': {\n width: 'var(--dx-gridCellWidth)',\n },\n }),\n\n autocompletion({\n icons: false,\n activateOnTyping: true,\n closeOnBlur: !debug,\n override: [\n async (context: CompletionContext): Promise<CompletionResult> => {\n const text = context.state.doc.toString();\n return {\n from: 0,\n options: await onQuery(text),\n };\n },\n ],\n\n // TODO(burdon): Consts from grid (to line-up with grid).\n tooltipClass: () => 'cm-completionDialog !mt-[8px] !-ml-[4px] [&>ul]:!max-h-[264px]',\n optionClass: () => 'flex h-[33px] items-center',\n }),\n\n // Check for accepted completion metadata in the transaction.\n EditorView.updateListener.of((update) => {\n update.transactions.forEach((tr) => {\n const completion = tr.annotation(pickedCompletion);\n if (completion) {\n onMatch((completion as any).data);\n }\n });\n }),\n ];\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Schema } from 'effect';\nimport React, { useRef, useMemo, useCallback } 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 { Table, type TableController } from './Table';\nimport { useTableModel } from '../../hooks';\nimport { type TableFeatures, TablePresentation, type TableRowAction } from '../../model';\nimport { getBaseSchema, makeDynamicTable, type TablePropertyDefinition } from '../../util';\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 createGapSeparator,\n createMenuAction,\n type MenuAction,\n MenuProvider,\n ToolbarMenu,\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", "useImperativeHandle", "useState", "useMemo", "useEffect", "Filter", "getValue", "invariant", "getSpace", "useTranslation", "useAttention", "closestCell", "Grid", "gridSeparatorInlineEnd", "gridSeparatorBlockEnd", "mx", "isNotFalsy", "safeParseInt", "React", "DropdownMenu", "useTranslation", "ColumnActionsMenu", "model", "modals", "t", "useTranslation", "translationKey", "state", "value", "type", "currentSort", "sorting", "isCurrentColumnSorted", "fieldId", "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", "live", "getSpace", "Popover", "Form", "useGridContext", "CreateRefPanel", "model", "modals", "__gridScope", "id", "gridId", "useGridContext", "space", "getSpace", "view", "state", "value", "schema", "useMemo", "type", "db", "schemaRegistry", "query", "typename", "runSync", "omit", "Schema", "handleSave", "useCallback", "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", "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", "Arrow", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "FormatEnum", "TypeEnum", "invariant", "useThemeContext", "createMarkdownExtensions", "cellQuery", "editorKeys", "parseCellIndex", "useGridContext", "GridCellEditor", "tagPicker", "createLinks", "React", "useGridContext", "CellValidationMessage", "validationError", "variant", "__gridScope", "editing", "editBox", "box", "useGridContext", "bgClass", "textClass", "React", "div", "role", "className", "style", "inlineSize", "zIndex", "insetBlockEnd", "insetBlockStart", "insetInlineStart", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "getSnapshot", "invariant", "Popover", "Form", "parseCellIndex", "useGridContext", "getDeep", "setDeep", "FormCellEditor", "fieldProjection", "model", "schema", "onSave", "__gridScope", "editing", "contextEditing", "setEditing", "useGridContext", "setLocalEditing", "useState", "anchorRef", "useRef", "useEffect", "cellElement", "current", "querySelector", "narrowedSchema", "useMemo", "undefined", "narrowSchema", "field", "path", "JSON", "stringify", "originalRow", "cell", "parseCellIndex", "index", "row", "getRowAt", "invariant", "formValues", "getSnapshot", "handleSave", "useCallback", "values", "value", "getDeep", "setDeep", "handleOpenChange", "nextOpen", "React", "Popover", "Root", "open", "onOpenChange", "VirtualTrigger", "virtualRef", "Content", "tabIndex", "classNames", "Arrow", "Viewport", "Form", "autocompletion", "pickedCompletion", "EditorView", "completion", "debug", "onQuery", "onMatch", "EditorView", "theme", "width", "autocompletion", "icons", "activateOnTyping", "closeOnBlur", "override", "context", "text", "state", "doc", "toString", "from", "options", "tooltipClass", "optionClass", "updateListener", "of", "update", "transactions", "forEach", "tr", "annotation", "pickedCompletion", "data", "newValue", "Symbol", "for", "createOption", "text", "isCreateOption", "data", "TableValueEditor", "model", "modals", "schema", "onEnter", "onFocus", "onSave", "onQuery", "__gridScope", "editing", "useGridContext", "fieldProjection", "useMemo", "col", "parseCellIndex", "index", "field", "projection", "fields", "getFieldProjection", "id", "invariant", "props", "type", "TypeEnum", "Array", "format", "FormatEnum", "SingleSelect", "React", "FormCellEditor", "TableCellEditor", "editorSlots", "scroller", "className", "gridId", "setEditing", "suppressNextBlur", "useRef", "themeMode", "useThemeContext", "_validationError", "setValidationError", "useState", "_validationVariant", "setValidationVariant", "useEffect", "cell", "row", "isDraftCell", "hasValidationError", "hasDraftRowValidationError", "path", "draftRows", "value", "length", "draftRow", "validationError", "validationErrors", "find", "error", "message", "handleEnter", "useCallback", "validationResult", "validateCellData", "valid", "setCellData", "handleBlur", "current", "handleClose", "event", "undefined", "result", "determineNavigationAxis", "determineNavigationDelta", "extension", "editorKeys", "onClose", "initialContent", "onNav", "MultiSelect", "push", "createMarkdownExtensions", "options", "mode", "tagPicker", "keymap", "onSearch", "selectedIds", "filter", "option", "indexOf", "title", "toLowerCase", "includes", "map", "label", "hue", "color", "onUpdate", "ids", "Ref", "completion", "onMatch", "referenceSchema", "openCreateRef", "document", "querySelector", "cellQuery", "referencePath", "getCellContent", "getCellData", "tagItems", "split", "o", "item", "createLinks", "tagItem", "String", "CellValidationMessage", "variant", "GridCellEditor", "onBlur", "slots", "key", "shift", "TableRoot", "children", "role", "React", "div", "className", "mx", "includes", "TableMain", "forwardRef", "model", "presentation", "ignoreAttention", "schema", "client", "onRowClick", "forwardedRef", "dxGrid", "setDxGrid", "useState", "hasAttention", "useAttention", "id", "t", "useTranslation", "translationKey", "modals", "useMemo", "ModalController", "draftRowCount", "getDraftRowCount", "frozen", "noActionColumn", "features", "dataEditable", "schemaEditable", "rowActions", "length", "frozenRowsStart", "frozenRowsEnd", "frozenColsStart", "selection", "enabled", "frozenColsEnd", "getCells", "useCallback", "range", "plane", "useEffect", "useImperativeHandle", "update", "cell", "updateIfWithinBounds", "updateCells", "requestUpdate", "handleGridClick", "event", "rowIndex", "safeParseInt", "target", "closest", "ariaRowIndex", "row", "getRowAt", "selectionMode", "toggleSelectionForRowIndex", "buttonSelector", "Object", "values", "tableButtons", "map", "button", "attr", "join", "tableButtonElement", "find", "btn", "hasAttribute", "setTrigger", "data", "getData", "type", "showRowMenu", "showColumnMenu", "fieldId", "showColumnCreator", "sorting", "toggleSort", "didCommitSuccessfully", "commitDraftRow", "requestAnimationFrame", "scrollToEndRow", "controlSelector", "tableControls", "control", "controlElement", "ctrl", "header", "setSelection", "allRowsSeleted", "value", "updateCellData", "col", "colIndex", "handleFocus", "increment", "delta", "refocus", "handleEnter", "getRowCount", "insertRow", "scrollToRow", "handleKeyDown", "closestCell", "key", "setCellData", "undefined", "handleAxisResize", "axis", "columnIndex", "parseInt", "index", "setColumnWidth", "size", "handleWheel", "stopPropagation", "handleNewColumn", "columns", "getColumnCount", "scrollToColumn", "handleQuery", "field", "props", "text", "referenceSchema", "referencePath", "space", "getSpace", "view", "invariant", "graph", "schemaRegistry", "getSchema", "db", "objects", "query", "Filter", "run", "options", "obj", "getValue", "label", "filter", "isNotFalsy", "createOption", "handleSave", "span", "Grid", "Root", "TableValueEditor", "onEnter", "onFocus", "onQuery", "onSave", "Content", "gridSeparatorInlineEnd", "gridSeparatorBlockEnd", "columnMeta", "limitRows", "limitColumns", "projection", "fields", "overscroll", "onAxisResize", "onClick", "onKeyDown", "onWheelCapture", "ref", "RowActionsMenu", "ColumnActionsMenu", "ColumnSettings", "onNewColumn", "CreateRefPanel", "Table", "Main", "React", "useRef", "useMemo", "useCallback", "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", "createGapSeparator", "createMenuAction", "MenuProvider", "ToolbarMenu", "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/translations.ts", "../../../src/components/Table/Table.tsx", "../../../src/components/TableCellEditor/TableCellEditor.tsx", "../../../src/components/TableCellEditor/CellValidationMessage.tsx", "../../../src/components/TableCellEditor/extension.ts", "../../../src/components/TableCellEditor/FormCellEditor.tsx", "../../../src/components/Table/ColumnActionsMenu.tsx", "../../../src/components/Table/ColumnSettings.tsx", "../../../src/components/Table/CreateRefPanel.tsx", "../../../src/components/Table/RowActionsMenu.tsx", "../../../src/components/Table/DynamicTable.tsx", "../../../src/components/TableToolbar/TableToolbar.tsx"],
|
|
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/client';\nimport { Filter } from '@dxos/echo';\nimport { getValue } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\n// TODO(wittjosiah): Remove dependency on react-client.\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\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 { mx } from '@dxos/react-ui-theme';\nimport { isNotFalsy, safeParseInt } from '@dxos/util';\n\nimport { ModalController, type TableModel, type TablePresentation } from '../../model';\nimport { translationKey } from '../../translations';\nimport { tableButtons, tableControls } from '../../util';\nimport { type TableCellEditorProps, TableValueEditor, createOption } from '../TableCellEditor';\n\nimport { ColumnActionsMenu } from './ColumnActionsMenu';\nimport { ColumnSettings } from './ColumnSettings';\nimport { CreateRefPanel } from './CreateRefPanel';\nimport { RowActionsMenu } from './RowActionsMenu';\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 focusDraft?: () => 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 { t } = useTranslation(translationKey);\n const modals = useMemo(() => new ModalController(), []);\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: 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 /**\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 focusDraft: () => {\n requestAnimationFrame(() => {\n dxGrid.setFocus({ plane: 'frozenRowsEnd', col: 0, row: 0 });\n dxGrid.refocus();\n });\n },\n };\n }, [presentation, 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 rowIndex = safeParseInt((event.target as HTMLElement).closest('[aria-rowindex]')?.ariaRowIndex ?? '');\n if (rowIndex != null) {\n if (onRowClick) {\n const row = model?.getRowAt(rowIndex);\n row && onRowClick(row);\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 if (draftRowCount < 1) {\n model.insertRow();\n }\n dxGrid.setFocus({ plane: 'frozenRowsEnd', col: 0, row: 0 });\n } else if (cell?.plane === 'frozenRowsEnd' && increment === 'row') {\n handleSaveDraftRow(cell.row);\n model.insertRow();\n dxGrid.setFocus({ plane: 'frozenRowsEnd', col: 0, row: 0 });\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 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],\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 // TODO(burdon): Factor out?\n // TODO(burdon): Generalize to handle other value types (e.g., enums).\n const handleQuery = useCallback<NonNullable<TableCellEditorProps['onQuery']>>(\n async ({ field, props }, text) => {\n if (model && props.referenceSchema && field.referencePath) {\n const space = getSpace(model.view);\n invariant(space);\n\n let schema;\n if (client) {\n schema = client.graph.schemaRegistry.getSchema(props.referenceSchema);\n }\n if (!schema) {\n schema = space.db.schemaRegistry.getSchema(props.referenceSchema);\n }\n\n if (schema) {\n const { objects } = await space.db.query(Filter.type(schema)).run();\n const options = objects\n .map((obj) => {\n const value = getValue(obj, field.referencePath!);\n if (!value || typeof value !== 'string') {\n return undefined;\n }\n\n return {\n label: value,\n data: obj,\n };\n })\n .filter(isNotFalsy);\n\n return [\n ...options,\n {\n label: t('create new object label', { text }),\n data: createOption(text),\n },\n ];\n }\n }\n\n return [];\n },\n [model, client, t],\n );\n\n const handleSave = useCallback(() => {\n dxGrid?.updateCells(true);\n dxGrid?.requestUpdate();\n }, [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 onQuery={handleQuery}\n onSave={handleSave}\n />\n <Grid.Content\n className={mx('[--dx-grid-base:var(--baseSurface)]', gridSeparatorInlineEnd, gridSeparatorBlockEnd)}\n frozen={frozen}\n columns={model.columnMeta.value}\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 { type Schema } from 'effect/Schema';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { FormatEnum, TypeEnum } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { type DxGridAxis, type DxGridPosition } from '@dxos/lit-grid';\nimport { useThemeContext } from '@dxos/react-ui';\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 cellQuery,\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 { completion } from './extension';\nimport { FormCellEditor } from './FormCellEditor';\n\nconst newValue = Symbol.for('newValue');\n\n/**\n * Option to create new object/value.\n */\nexport const createOption = (text: string) => ({ [newValue]: true, text });\n\nconst isCreateOption = (data: any) => typeof data === 'object' && data[newValue];\n\nexport type QueryResult = Pick<Completion, 'label'> & { data: any };\n\nexport type TableCellEditorProps = {\n model?: TableModel;\n modals?: ModalController;\n schema?: Schema.AnyNoContext;\n onEnter?: (cell: DxGridPosition) => void;\n onFocus?: (axis?: DxGridAxis, delta?: -1 | 0 | 1, cell?: DxGridPosition) => void;\n onSave?: () => void;\n onQuery?: (field: FieldProjection, text: string) => Promise<QueryResult[]>;\n};\n\nexport const TableValueEditor = ({\n model,\n modals,\n schema,\n onEnter,\n onFocus,\n onSave,\n onQuery,\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 // 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 />\n );\n }\n\n // For all other types, use the existing cell editor\n return (\n <TableCellEditor\n model={model}\n modals={modals}\n onEnter={onEnter}\n onFocus={onFocus}\n onQuery={onQuery}\n onSave={onSave}\n __gridScope={__gridScope}\n />\n );\n};\n\nconst editorSlots = { scroller: { className: '!plb-[--dx-grid-cell-editor-padding-block]' } };\n\nexport const TableCellEditor = ({\n model,\n modals,\n onEnter,\n onFocus,\n onQuery,\n onSave,\n __gridScope,\n}: GridScopedProps<TableCellEditorProps>) => {\n const { id: gridId, editing, setEditing } = useGridContext('TableCellEditor', __gridScope);\n const suppressNextBlur = useRef(false);\n const { themeMode } = useThemeContext();\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 useEffect(() => {\n // Check for existing validation errors when editing starts (for draft rows).\n if (!model || !editing || !fieldProjection) {\n setValidationError(null);\n return;\n }\n\n const cell = parseCellIndex(editing.index);\n const { row, col } = cell;\n\n if (model.isDraftCell(cell)) {\n const field = model.projection.fields[col];\n const hasValidationError = model.hasDraftRowValidationError(row, field.path);\n\n if (hasValidationError) {\n const draftRows = model.draftRows.value;\n if (row >= 0 && row < draftRows.length) {\n const draftRow = draftRows[row];\n const validationError = draftRow.validationErrors?.find((error) => error.path === field.path);\n if (validationError) {\n setValidationError(validationError.message);\n setValidationVariant('warning');\n }\n }\n } else {\n setValidationError(null);\n }\n } else {\n setValidationError(null);\n }\n }, [model, editing, fieldProjection]);\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 onEnter?.(cell);\n onFocus?.();\n setEditing(null);\n onSave?.();\n } else {\n setValidationError(validationResult.error);\n setValidationVariant('error');\n }\n },\n [model, editing, onEnter, onFocus, setEditing],\n );\n\n const handleBlur = useCallback<EditorBlurHandler>(\n async (value) => {\n if (!model || !editing) {\n return;\n }\n if (suppressNextBlur.current) {\n suppressNextBlur.current = false;\n }\n\n // Don't save on blur - let handleClose handle validation and saving\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\n if (value !== undefined) {\n // Pre-commit validation check.\n const result = await model.validateCellData(cell, value);\n\n if (result.valid) {\n setValidationError(null);\n model.setCellData(cell, value);\n setEditing(null);\n onSave?.();\n onEnter?.(cell);\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 setValidationError(null);\n setEditing(null);\n onSave?.();\n if (event && onFocus) {\n onFocus(determineNavigationAxis(event), determineNavigationDelta(event));\n }\n }\n },\n [model, editing, onFocus, onEnter, fieldProjection, setEditing, onSave],\n );\n\n const extension = useMemo(() => {\n if (!fieldProjection) {\n return [];\n }\n\n const extension = [\n editorKeys({\n onClose: handleClose,\n ...(editing?.initialContent && { onNav: handleClose }),\n }),\n ];\n\n const format = fieldProjection.props.format;\n\n if (format === FormatEnum.SingleSelect || format === FormatEnum.MultiSelect) {\n // TODO(ZaymonFC): Reconcile this with the TagPicker component?\n // Add markdown extensions needed by tag picker.\n extension.push(createMarkdownExtensions({ themeMode }));\n\n const options = fieldProjection.props.options || [];\n\n const mode = format === FormatEnum.SingleSelect ? ('single-select' as const) : ('multi-select' as const);\n\n extension.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 if (onQuery) {\n switch (fieldProjection.props.format) {\n case FormatEnum.Ref: {\n extension.push([\n completion({\n onQuery: (text) => onQuery(fieldProjection, text),\n onMatch: (data) => {\n if (model && editing && modals) {\n if (isCreateOption(data)) {\n const { field, props } = fieldProjection;\n if (props.referenceSchema) {\n suppressNextBlur.current = true;\n modals.openCreateRef(\n props.referenceSchema,\n document.querySelector(cellQuery(editing.index, gridId)),\n {\n [field.referencePath!]: data.text,\n },\n (data) => {\n void handleEnter(data);\n },\n );\n }\n } else {\n void handleEnter(data);\n }\n }\n },\n }),\n ]);\n break;\n }\n }\n }\n\n return extension;\n }, [model, modals, editing, fieldProjection, handleClose, themeMode]);\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\n if (value !== undefined) {\n const options = fieldProjection.props.options || [];\n\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 extension={extension} 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 2024 DXOS.org\n//\n\nimport {\n type CompletionContext,\n type CompletionResult,\n autocompletion,\n pickedCompletion,\n} from '@codemirror/autocomplete';\nimport { type Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\n\nexport type CompletionOptions = {\n debug?: boolean;\n onQuery: (text: string) => Promise<CompletionResult['options']>;\n onMatch: (data: any) => void;\n};\n\n/**\n * Autocomplete Codemirror extension.\n * https://codemirror.net/docs/ref/#autocomplete.autocompletion\n */\nexport const completion = ({ debug, onQuery, onMatch }: CompletionOptions): Extension => {\n return [\n EditorView.theme({\n '.cm-completionDialog': {\n width: 'var(--dx-gridCellWidth)',\n },\n }),\n\n autocompletion({\n icons: false,\n activateOnTyping: true,\n closeOnBlur: !debug,\n override: [\n async (context: CompletionContext): Promise<CompletionResult> => {\n const text = context.state.doc.toString();\n return {\n from: 0,\n options: await onQuery(text),\n };\n },\n ],\n\n // TODO(burdon): Consts from grid (to line-up with grid).\n tooltipClass: () => 'cm-completionDialog !mt-[8px] !-ml-[4px] [&>ul]:!max-h-[264px]',\n optionClass: () => 'flex h-[33px] items-center',\n }),\n\n // Check for accepted completion metadata in the transaction.\n EditorView.updateListener.of((update) => {\n update.transactions.forEach((tr) => {\n const completion = tr.annotation(pickedCompletion);\n if (completion) {\n onMatch((completion as any).data);\n }\n });\n }),\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 { getSnapshot } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { Popover } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { parseCellIndex, useGridContext } from '@dxos/react-ui-grid';\nimport { type FieldProjection } from '@dxos/schema';\nimport { getDeep, setDeep } from '@dxos/util';\n\nimport { type TableModel } from '../../model';\nimport { narrowSchema } from '../../util';\n\ntype FormCellEditorProps = {\n fieldProjection: FieldProjection;\n model?: TableModel;\n schema?: Schema.Schema.AnyNoContext;\n onSave?: () => void;\n __gridScope: any;\n};\n\nexport const FormCellEditor = ({ fieldProjection, model, schema, onSave, __gridScope }: FormCellEditorProps) => {\n const { editing: contextEditing, setEditing } = useGridContext('ArrayEditor', __gridScope);\n const [editing, setLocalEditing] = useState(false);\n const anchorRef = useRef<HTMLButtonElement | null>(null);\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 const originalRow = useMemo(() => {\n if (model && contextEditing) {\n const cell = parseCellIndex(contextEditing.index);\n const row = model.getRowAt(cell.row);\n invariant(row);\n\n return row;\n }\n\n return undefined;\n }, [model, contextEditing]);\n\n const formValues = useMemo(() => {\n if (originalRow) {\n // NOTE(ZaymonFC): Important to get a snapshot to eject from the live object.\n return getSnapshot(originalRow);\n }\n }, [originalRow]);\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 setEditing(null);\n setLocalEditing(false);\n onSave?.();\n },\n [fieldProjection.field.path, originalRow],\n );\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.Content tabIndex={-1} classNames='popover-card-width density-fine'>\n <Popover.Arrow />\n <Popover.Viewport>\n <Form values={formValues} schema={narrowedSchema as any} onSave={handleSave} />\n </Popover.Viewport>\n </Popover.Content>\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 { live } from '@dxos/live-object';\n// TODO(wittjosiah): Remove dependency on 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 space = model && getSpace(model?.view);\n const state = modals.state.value;\n\n const schema = useMemo<Schema.Schema<any> | undefined>(() => {\n if (!space || state?.type !== 'createRefPanel') {\n return;\n }\n\n const [schema] = space.db.schemaRegistry.query({ typename: state.typename }).runSync();\n if (schema) {\n const omit = Schema.omit<any, any, ['id']>('id');\n return omit(schema);\n }\n }, [space, state]);\n\n const handleSave = useCallback(\n (values: any) => {\n if (!model || !space || state?.type !== 'createRefPanel') {\n return;\n }\n\n const [schema] = space.db.schemaRegistry.query({ typename: state.typename }).runSync();\n if (schema) {\n const obj = space.db.add(live(schema, values));\n state.onCreate?.(obj);\n }\n void modals.close();\n },\n [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", "Filter", "getValue", "invariant", "getSpace", "useTranslation", "useAttention", "Grid", "closestCell", "gridSeparatorBlockEnd", "gridSeparatorInlineEnd", "mx", "isNotFalsy", "safeParseInt", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "FormatEnum", "TypeEnum", "invariant", "useThemeContext", "createMarkdownExtensions", "GridCellEditor", "cellQuery", "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", "autocompletion", "pickedCompletion", "EditorView", "completion", "debug", "onQuery", "onMatch", "EditorView", "theme", "width", "autocompletion", "icons", "activateOnTyping", "closeOnBlur", "override", "context", "text", "state", "doc", "toString", "from", "options", "tooltipClass", "optionClass", "updateListener", "of", "update", "transactions", "forEach", "tr", "annotation", "pickedCompletion", "data", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "getSnapshot", "invariant", "Popover", "Form", "parseCellIndex", "useGridContext", "getDeep", "setDeep", "FormCellEditor", "fieldProjection", "model", "schema", "onSave", "__gridScope", "editing", "contextEditing", "setEditing", "useGridContext", "setLocalEditing", "useState", "anchorRef", "useRef", "useEffect", "cellElement", "current", "querySelector", "narrowedSchema", "useMemo", "undefined", "narrowSchema", "field", "path", "JSON", "stringify", "originalRow", "cell", "parseCellIndex", "index", "row", "getRowAt", "invariant", "formValues", "getSnapshot", "handleSave", "useCallback", "values", "value", "getDeep", "setDeep", "handleOpenChange", "nextOpen", "React", "Popover", "Root", "open", "onOpenChange", "VirtualTrigger", "virtualRef", "Content", "tabIndex", "classNames", "Arrow", "Viewport", "Form", "newValue", "Symbol", "for", "createOption", "text", "isCreateOption", "data", "TableValueEditor", "model", "modals", "schema", "onEnter", "onFocus", "onSave", "onQuery", "__gridScope", "editing", "useGridContext", "fieldProjection", "useMemo", "col", "parseCellIndex", "index", "field", "projection", "fields", "getFieldProjection", "id", "invariant", "props", "type", "TypeEnum", "Array", "format", "FormatEnum", "SingleSelect", "React", "FormCellEditor", "TableCellEditor", "editorSlots", "scroller", "className", "gridId", "setEditing", "suppressNextBlur", "useRef", "themeMode", "useThemeContext", "validationError", "setValidationError", "useState", "validationVariant", "setValidationVariant", "useEffect", "cell", "row", "isDraftCell", "hasValidationError", "hasDraftRowValidationError", "path", "draftRows", "value", "length", "draftRow", "validationErrors", "find", "error", "message", "handleEnter", "useCallback", "validationResult", "validateCellData", "valid", "setCellData", "handleBlur", "current", "handleClose", "event", "undefined", "result", "determineNavigationAxis", "determineNavigationDelta", "extension", "editorKeys", "onClose", "initialContent", "onNav", "MultiSelect", "push", "createMarkdownExtensions", "options", "mode", "tagPicker", "keymap", "onSearch", "selectedIds", "filter", "option", "indexOf", "title", "toLowerCase", "includes", "map", "label", "hue", "color", "onUpdate", "ids", "Ref", "completion", "onMatch", "referenceSchema", "openCreateRef", "document", "querySelector", "cellQuery", "referencePath", "getCellContent", "getCellData", "tagItems", "split", "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", "live", "getSpace", "Popover", "Form", "useGridContext", "CreateRefPanel", "model", "modals", "__gridScope", "id", "gridId", "useGridContext", "space", "getSpace", "view", "state", "value", "schema", "useMemo", "type", "db", "schemaRegistry", "query", "typename", "runSync", "omit", "Schema", "handleSave", "useCallback", "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", "TableRoot", "children", "role", "React", "div", "className", "mx", "includes", "TableMain", "forwardRef", "model", "presentation", "ignoreAttention", "schema", "client", "onRowClick", "forwardedRef", "dxGrid", "setDxGrid", "useState", "hasAttention", "useAttention", "id", "t", "useTranslation", "translationKey", "modals", "useMemo", "ModalController", "draftRowCount", "getDraftRowCount", "frozen", "noActionColumn", "features", "dataEditable", "schemaEditable", "rowActions", "length", "frozenRowsStart", "frozenRowsEnd", "frozenColsStart", "selection", "enabled", "frozenColsEnd", "getCells", "useCallback", "range", "plane", "useEffect", "useImperativeHandle", "update", "cell", "updateIfWithinBounds", "updateCells", "requestUpdate", "focusDraft", "requestAnimationFrame", "setFocus", "col", "row", "refocus", "handleSaveDraftRow", "rowIndex", "didCommitSuccessfully", "commitDraftRow", "scrollToEndRow", "handleGridClick", "event", "safeParseInt", "target", "closest", "ariaRowIndex", "getRowAt", "selectionMode", "toggleSelectionForRowIndex", "buttonSelector", "Object", "values", "tableButtons", "map", "button", "attr", "join", "tableButtonElement", "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", "getRowCount", "insertRow", "handleKeyDown", "closestCell", "key", "setCellData", "undefined", "preventDefault", "handleAxisResize", "axis", "columnIndex", "parseInt", "index", "setColumnWidth", "size", "handleWheel", "stopPropagation", "handleNewColumn", "columns", "getColumnCount", "scrollToColumn", "handleQuery", "field", "props", "text", "referenceSchema", "referencePath", "space", "getSpace", "view", "invariant", "graph", "schemaRegistry", "getSchema", "db", "objects", "query", "Filter", "run", "options", "obj", "getValue", "label", "filter", "isNotFalsy", "createOption", "handleSave", "span", "Grid", "Root", "TableValueEditor", "onFocus", "onQuery", "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"]
|
|
7
7
|
}
|