@dxos/react-ui-table 0.8.3 → 0.8.4-main.f9ba587
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-TL7CKQQV.mjs → chunk-Q5QQXJUO.mjs} +2 -2
- package/dist/lib/browser/index.mjs +552 -227
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node-esm/{chunk-GBT6GD4G.mjs → chunk-ZNOU6LHG.mjs} +2 -2
- package/dist/lib/node-esm/index.mjs +552 -227
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/types/index.mjs +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/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/Table/relations.stories.d.ts +1 -1
- package/dist/types/src/components/Table/relations.stories.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/CellValidationMessage.d.ts +2 -1
- package/dist/types/src/components/TableCellEditor/CellValidationMessage.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts.map +1 -1
- package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts +1 -1
- package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +2 -2
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useAddRow.d.ts +13 -0
- package/dist/types/src/hooks/useAddRow.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/model/table-model.d.ts +42 -6
- package/dist/types/src/model/table-model.d.ts.map +1 -1
- package/dist/types/src/model/table-presentation.d.ts +8 -0
- package/dist/types/src/model/table-presentation.d.ts.map +1 -1
- package/dist/types/src/playwright/playwright.config.d.ts +3 -0
- package/dist/types/src/playwright/playwright.config.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +3 -4
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/table.d.ts +4 -4
- package/dist/types/src/util/table-buttons.d.ts +15 -1
- package/dist/types/src/util/table-buttons.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +38 -40
- package/src/components/Table/DynamicTable.stories.tsx +2 -2
- package/src/components/Table/Table.stories.tsx +18 -12
- package/src/components/Table/Table.tsx +17 -4
- package/src/components/Table/relations.stories.tsx +4 -5
- package/src/components/TableCellEditor/CellValidationMessage.tsx +6 -1
- package/src/components/TableCellEditor/TableCellEditor.stories.tsx +3 -3
- package/src/components/TableCellEditor/TableCellEditor.tsx +54 -15
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useAddRow.ts +36 -0
- package/src/index.ts +1 -1
- package/src/model/table-model.ts +220 -34
- package/src/model/table-presentation.ts +213 -130
- package/src/playwright/playwright.config.ts +17 -0
- package/src/playwright/smoke.spec.ts +9 -7
- package/src/translations.ts +5 -3
- package/src/util/table-buttons.ts +24 -1
- package/dist/lib/node/chunk-O2VPBNS5.cjs +0 -50
- package/dist/lib/node/chunk-O2VPBNS5.cjs.map +0 -7
- package/dist/lib/node/index.cjs +0 -2739
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node/types/index.cjs +0 -31
- package/dist/lib/node/types/index.cjs.map +0 -7
- package/src/playwright/playwright.config.cts +0 -18
- /package/dist/lib/browser/{chunk-TL7CKQQV.mjs.map → chunk-Q5QQXJUO.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-GBT6GD4G.mjs.map → chunk-ZNOU6LHG.mjs.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/translations.ts", "../../../src/components/Table/Table.tsx", "../../../src/components/Table/ColumnActionsMenu.tsx", "../../../src/components/Table/ColumnSettings.tsx", "../../../src/components/Table/CreateRefPanel.tsx", "../../../src/components/Table/RowActionsMenu.tsx", "../../../src/model/table-model.ts", "../../../src/model/selection-model.ts", "../../../src/util/dynamic-table.ts", "../../../src/util/signals.ts", "../../../src/util/table.ts", "../../../src/util/table-buttons.ts", "../../../src/util/table-controls.ts", "../../../src/util/schema.ts", "../../../src/model/table-sorting.ts", "../../../src/util/tag.ts", "../../../src/model/modal-controller.ts", "../../../src/model/table-presentation.ts", "../../../src/components/TableCellEditor/TableCellEditor.tsx", "../../../src/components/TableCellEditor/CellValidationMessage.tsx", "../../../src/components/TableCellEditor/FormCellEditor.tsx", "../../../src/components/TableCellEditor/extension.ts", "../../../src/components/Table/DynamicTable.tsx", "../../../src/hooks/useTableModel.ts", "../../../src/components/TableToolbar/TableToolbar.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'table';\n\nexport default [\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;\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 { getValue } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { Filter } 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 }: TableRootProps) => {\n return (\n <div\n role='none'\n className={mx(\n 'relative !border-separator',\n role === 'section' // TODO(burdon): This leaks composer plugin concepts? Standardize for react-ui?\n ? 'attention-surface overflow-hidden [&_.dx-grid]:max-is-[--dx-grid-content-inline-size]'\n : 'flex flex-col [&_.dx-grid]:grow [&_.dx-grid]:max-is-[--dx-grid-content-inline-size] [&_.dx-grid]:bs-0 [&_.dx-grid]:max-bs-[--dx-grid-content-block-size]',\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 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 frozenColsStart: model?.features.selection.enabled ? 1 : 0,\n frozenColsEnd: noActionColumn ? 0 : 1,\n };\n }, [model]);\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>(\n forwardedRef,\n () => {\n if (!presentation || !dxGrid) {\n return {};\n }\n\n return {\n update: (cell) => {\n if (cell) {\n dxGrid.updateIfWithinBounds(cell);\n } else {\n dxGrid.updateCells(true);\n dxGrid.requestUpdate();\n }\n },\n };\n },\n [presentation, dxGrid],\n );\n\n const handleGridClick = useCallback(\n (event: MouseEvent) => {\n const rowIndex = safeParseInt((event.target as HTMLElement).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 }\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],\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(cell.row);\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 = model.space;\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 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 />\n <Grid.Content\n className={mx('[--dx-grid-base:var(--baseSurface)]', gridSeparatorInlineEnd, gridSeparatorBlockEnd)}\n frozen={frozen}\n // getCells={getCells}\n columns={model.columnMeta.value}\n limitRows={model.getRowCount() ?? 0}\n limitColumns={model.view?.fields?.length ?? 0}\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\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 = { model?: TableModel; modals: ModalController; onNewColumn: () => void };\n\nexport const ColumnSettings = ({ model, modals, onNewColumn }: ColumnSettingsProps) => {\n const [newField, setNewField] = useState<FieldType>();\n const state = modals.state.value;\n\n const space = model?.space;\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?.view?.fields.find((f) => f.id === mode.fieldId);\n }\n }\n return undefined;\n }, [model?.view?.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?.view || !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 view={model.view!}\n projection={model.projection}\n field={field}\n registry={space?.db.schemaRegistry}\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/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?.space;\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?.view || !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 { computed, effect, signal, type ReadonlySignal } from '@preact/signals-core';\n\nimport { type Space } from '@dxos/client/echo';\nimport { Resource } from '@dxos/context';\nimport {\n type FieldSortType,\n FormatEnum,\n getValue,\n setValue,\n type JsonProp,\n getSnapshot,\n getSchema,\n} from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { isLiveObject, makeRef } from '@dxos/live-object';\nimport { formatForEditing, parseValue } from '@dxos/react-ui-form';\nimport {\n type DxGridAxisMeta,\n type DxGridPlaneRange,\n type DxGridPlanePosition,\n type DxGridPosition,\n} from '@dxos/react-ui-grid';\nimport { type ViewType, type ViewProjection, type PropertyType, validateSchema } from '@dxos/schema';\n\nimport { type SelectionMode, SelectionModel } from './selection-model';\nimport { TableSorting } from './table-sorting';\nimport { touch } from '../util';\nimport { extractTagIds } from '../util/tag';\n\n// TODO(ZaymonFC): Use a common type?\nexport type ValidationResult = { valid: true } | { valid: false; error: string };\n\n// TODO(burdon): Use schema types.\nexport type TableRow = Record<JsonProp, any> & { id: string };\n\nexport type TableRowAction = {\n id: string;\n translationKey: string;\n};\n\nexport type TableFeatures = {\n selection: { enabled: boolean; mode?: SelectionMode };\n dataEditable: boolean;\n schemaEditable: boolean;\n};\n\nconst defaultFeatures: TableFeatures = {\n selection: { enabled: true, mode: 'multiple' },\n dataEditable: false,\n schemaEditable: false,\n};\n\nexport type TableModelProps<T extends TableRow = TableRow> = {\n id?: string;\n space?: Space;\n view?: ViewType;\n projection: ViewProjection;\n features?: Partial<TableFeatures>;\n sorting?: FieldSortType[];\n pinnedRows?: { top: number[]; bottom: number[] };\n rowActions?: TableRowAction[];\n onInsertRow?: (index?: number) => void;\n onDeleteRows?: (index: number, obj: T[]) => void;\n onDeleteColumn?: (fieldId: string) => void;\n onCellUpdate?: (cell: DxGridPosition) => void;\n onRowOrderChange?: () => void;\n onRowAction?: (actionId: string, data: T) => void;\n};\n\nexport class TableModel<T extends TableRow = TableRow> extends Resource {\n private readonly _id: string | undefined;\n private readonly _space: Space | undefined;\n private readonly _view: ViewType | undefined;\n private readonly _projection: ViewProjection;\n\n private readonly _visibleRange = signal<DxGridPlaneRange>({\n start: { row: 0, col: 0 },\n end: { row: 0, col: 0 },\n });\n\n private readonly _onInsertRow?: TableModelProps<T>['onInsertRow'];\n private readonly _onDeleteRows?: TableModelProps<T>['onDeleteRows'];\n private readonly _onDeleteColumn?: TableModelProps<T>['onDeleteColumn'];\n private readonly _onCellUpdate?: TableModelProps<T>['onCellUpdate'];\n private readonly _onRowOrderChange?: TableModelProps<T>['onRowOrderChange'];\n private readonly _onRowAction?: TableModelProps<T>['onRowAction'];\n private readonly _rowActions: TableRowAction[];\n private readonly _features: TableFeatures;\n\n private readonly _rows = signal<T[]>([]);\n private readonly _sorting: TableSorting<T>;\n\n private _pinnedRows: NonNullable<TableModelProps<T>['pinnedRows']>;\n private _selection!: SelectionModel<T>;\n private _columnMeta?: ReadonlySignal<DxGridAxisMeta>;\n\n constructor({\n id,\n space,\n view,\n projection,\n features = {},\n sorting = [],\n pinnedRows = { top: [], bottom: [] },\n rowActions = [],\n onCellUpdate,\n onDeleteColumn,\n onDeleteRows,\n onInsertRow,\n onRowOrderChange,\n onRowAction,\n }: TableModelProps<T>) {\n super();\n this._id = id;\n this._space = space;\n this._view = view;\n this._projection = projection;\n\n // TODO(ZaymonFC): Use our more robust config merging module?\n this._features = { ...defaultFeatures, ...features };\n\n invariant(\n !(this._features.dataEditable && this._features.selection.enabled && this._features.selection.mode === 'single'),\n 'Single selection is not compatible with editable tables.',\n );\n\n this._sorting = new TableSorting(this._rows, this._view, projection);\n\n if (sorting.length > 0) {\n const [sort] = sorting;\n this._sorting.setSort(sort.fieldId, sort.direction);\n }\n\n this._pinnedRows = pinnedRows;\n this._rowActions = rowActions;\n this._onInsertRow = onInsertRow;\n this._onDeleteRows = onDeleteRows;\n this._onDeleteColumn = onDeleteColumn;\n this._onCellUpdate = onCellUpdate;\n this._onRowOrderChange = onRowOrderChange;\n this._onRowAction = onRowAction;\n }\n\n public get id() {\n return this._id;\n }\n\n public get space() {\n return this._space;\n }\n\n public get view() {\n return this._view;\n }\n\n public get projection() {\n return this._projection;\n }\n\n public get rows(): ReadonlySignal<T[]> {\n return this._sorting.sortedRows;\n }\n\n public get features(): TableFeatures {\n return this._features;\n }\n\n /**\n * @reactive\n */\n public get sorting(): TableSorting<T> | undefined {\n return this._sorting;\n }\n\n /**\n * Gets the row data at the specified display index.\n */\n public getRowAt(displayIndex: number): T | undefined {\n if (displayIndex < 0 || displayIndex >= this._sorting.sortedRows.value.length) {\n return undefined;\n }\n\n return this._sorting.sortedRows.value[displayIndex];\n }\n\n public get pinnedRows(): NonNullable<TableModelProps<T>['pinnedRows']> {\n return this._pinnedRows;\n }\n\n public get columnMeta(): ReadonlySignal<DxGridAxisMeta> {\n invariant(this._columnMeta);\n return this._columnMeta;\n }\n\n public get selection() {\n return this._selection;\n }\n\n /** @reactive */\n public get isViewDirty(): boolean {\n return this._sorting.isDirty;\n }\n\n public get rowActions(): TableRowAction[] {\n return this._rowActions;\n }\n\n //\n // Initialisation\n //\n\n protected override async _open(): Promise<void> {\n this.initializeColumnMeta();\n this.initializeEffects();\n this._selection = new SelectionModel(this._sorting.sortedRows, this._features.selection.mode ?? 'multiple', () =>\n this._onRowOrderChange?.(),\n );\n await this._selection.open(this._ctx);\n }\n\n private initializeColumnMeta(): void {\n this._columnMeta = computed(() => {\n const fields = this._view?.fields ?? [];\n const meta = Object.fromEntries(\n fields.map((field, index: number) => [index, { size: field?.size ?? 256, resizeable: true }]),\n );\n\n return {\n grid: meta,\n frozenColsStart: { 0: { size: 30, resizeable: false } },\n frozenColsEnd: { 0: { size: 40, resizeable: false } },\n };\n });\n }\n\n private initializeEffects(): void {\n const rowOrderWatcher = effect(() => {\n touch(this._sorting.sortedRows.value);\n this._onRowOrderChange?.();\n });\n this._ctx.onDispose(rowOrderWatcher);\n\n /**\n * Creates reactive effects for each row in the visible range.\n * Subscribes to changes in the visible range, recreating row effects when it changes.\n * When a row's data changes, invokes onCellUpdate to notify subscribers and trigger UI updates.\n */\n const rowEffectManager = effect(() => {\n const { start, end } = touch(this._visibleRange.value);\n const rowEffects: ReturnType<typeof effect>[] = [];\n for (let row = start.row; row <= end.row; row++) {\n rowEffects.push(\n effect(() => {\n const obj = this._sorting.sortedRows.value[row];\n this._view?.fields.forEach((field) => touch(getValue(obj, field.path)));\n this._onCellUpdate?.({ row, col: start.col, plane: 'grid' });\n }),\n );\n }\n\n return () => rowEffects.forEach((cleanup) => cleanup());\n });\n this._ctx.onDispose(rowEffectManager);\n }\n\n //\n // Data\n //\n\n public setRows = (obj: T[]): void => {\n this._rows.value = obj;\n };\n\n public getRowCount = (): number => this._rows.value.length;\n\n public getColumnCount = (): number => this._view?.fields.length ?? 0;\n\n public insertRow = (rowIndex?: number): void => {\n const row = rowIndex !== undefined ? this._sorting.getDataIndex(rowIndex) : this._rows.value.length;\n this._onInsertRow?.(row);\n };\n\n public deleteRow = (rowIndex: number): void => {\n const row = this._sorting.getDataIndex(rowIndex);\n const obj = this._rows.value[row];\n const objectsToDelete = [];\n\n if (this.features.selection.enabled && this._selection.hasSelection.value) {\n const selectedRows = this._selection.getSelectedRows();\n objectsToDelete.push(...selectedRows);\n } else {\n objectsToDelete.push(obj);\n }\n\n this._onDeleteRows?.(row, objectsToDelete);\n };\n\n public handleRowAction = (actionId: string, rowIndex: number): void => {\n if (!this._onRowAction) {\n return;\n }\n\n const row = this._sorting.getDataIndex(rowIndex);\n const data = this._rows.value[row];\n\n if (data) {\n this._onRowAction(actionId, data);\n }\n };\n\n public getCellData = ({ col, row }: DxGridPlanePosition): any => {\n const fields = this._view?.fields ?? [];\n if (col < 0 || col >= fields.length) {\n return undefined;\n }\n\n const field = fields[col];\n const dataIndex = this._sorting.getDataIndex(row);\n const value = getValue(this._rows.value[dataIndex], field.path);\n if (value == null) {\n return '';\n }\n\n const { props } = this._projection.getFieldProjection(field.id);\n switch (props.format) {\n case FormatEnum.Ref: {\n if (!field.referencePath) {\n return ''; // TODO(burdon): Show error.\n }\n\n return getValue(value.target, field.referencePath);\n }\n\n default: {\n return formatForEditing({ type: props.type, format: props.format, value });\n }\n }\n };\n\n public validateCellData = async ({ col, row }: DxGridPlanePosition, value: any): Promise<ValidationResult> => {\n const rowIdx = this._sorting.getDataIndex(row);\n const fields = this._view?.fields ?? [];\n if (col < 0 || col >= fields.length) {\n return { valid: false, error: 'Invalid column index' };\n }\n\n const field = fields[col];\n const { props } = this._projection.getFieldProjection(field.id);\n\n const currentRow = this._rows.value[rowIdx];\n invariant(currentRow, 'Invalid row index');\n\n // Get a snapshot of the current object.\n const snapshot = getSnapshot(currentRow);\n const transformedValue = editorTextToCellValue(props, value);\n\n // Set the proposed value.\n setValue(snapshot, field.path, transformedValue);\n\n const schema = getSchema(currentRow);\n invariant(schema);\n\n const validationResult = validateSchema(schema, snapshot);\n if (validationResult && validationResult.length > 0) {\n const error = validationResult[0];\n invariant(error.path === field.path);\n return { valid: false, error: error.message };\n }\n\n return { valid: true };\n };\n\n public setCellData = ({ col, row }: DxGridPlanePosition, value: any): void => {\n const rowIdx = this._sorting.getDataIndex(row);\n const fields = this._view?.fields ?? [];\n if (col < 0 || col >= fields.length) {\n return;\n }\n\n const field = fields[col];\n const { props } = this._projection.getFieldProjection(field.id);\n const transformedValue = editorTextToCellValue(props, value);\n\n // Special handling for Ref format to preserve existing behavior\n if (props.format === FormatEnum.Ref && !isLiveObject(value)) {\n // TODO(ZaymonFC): This get's called an additional time by the cell editor onBlur, but with the cell editors\n // plain string value. Maybe onBlur should be called with the actual value?\n return;\n }\n\n setValue(this._rows.value[rowIdx], field.path, transformedValue);\n };\n\n /**\n * Updates a cell's value using a transform function.\n * @param {DxGridPlanePosition} position - The position of the cell to update.\n * @param {(value: any) => any} update - A function that takes the current value and returns the updated value.\n */\n public updateCellData({ col, row }: DxGridPlanePosition, update: (value: any) => any): void {\n const dataRow = this._sorting.getDataIndex(row);\n const fields = this._view?.fields ?? [];\n const field = fields[col];\n\n const value = getValue(this._rows.value[dataRow], field.path);\n const updatedValue = update(value);\n setValue(this._rows.value[dataRow], field.path, updatedValue);\n }\n\n //\n // Column Operations\n //\n\n public deleteColumn(fieldId: string): void {\n if (!this._view) {\n return;\n }\n\n const field = this._view?.fields.find((field) => field.id === fieldId);\n if (field && this._onDeleteColumn) {\n this._onDeleteColumn(field.id);\n }\n }\n\n //\n // Resize\n //\n\n public setColumnWidth(columnIndex: number, width: number): void {\n const fields = this._view?.fields ?? [];\n if (columnIndex < fields.length) {\n const newWidth = Math.max(0, width);\n const field = fields[columnIndex];\n if (field) {\n field.size = newWidth;\n }\n }\n }\n\n //\n // Pinning\n //\n\n // TODO(burdon): Change to setPinned(on/off).\n public pinRow(rowIndex: number, side: 'top' | 'bottom'): void {\n this._pinnedRows[side].push(rowIndex);\n }\n\n public unpinRow(rowIndex: number): void {\n this._pinnedRows.top = this._pinnedRows.top.filter((index: number) => index !== rowIndex);\n this._pinnedRows.bottom = this._pinnedRows.bottom.filter((index: number) => index !== rowIndex);\n }\n\n //\n // View operations\n //\n public saveView(): void {\n this._sorting.save();\n }\n}\n\nconst editorTextToCellValue = (props: PropertyType, value: any): any => {\n switch (props.format) {\n case FormatEnum.Ref: {\n if (isLiveObject(value)) {\n return makeRef(value);\n } else {\n return value;\n }\n }\n\n case FormatEnum.SingleSelect: {\n const ids = extractTagIds(value);\n if (ids && ids.length > 0) {\n return ids[0];\n } else {\n return value;\n }\n }\n\n case FormatEnum.MultiSelect: {\n const ids = extractTagIds(value);\n return ids || value;\n }\n\n default: {\n return parseValue({\n type: props.type,\n format: props.format,\n value,\n });\n }\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { computed, effect, signal, type ReadonlySignal } from '@preact/signals-core';\n\nimport { Resource } from '@dxos/context';\n\nimport { type TableRow } from './table-model';\nimport { touch } from '../util';\n\nexport type SelectionMode = 'single' | 'multiple';\n\nexport class SelectionModel<T extends TableRow> extends Resource {\n private readonly _selection = signal<Set<string>>(new Set());\n\n private readonly _validSelectedIds = computed<Set<string>>(() => {\n const rows = this._rows.value;\n if (!rows) {\n return new Set<string>();\n }\n\n const validIds = new Set(rows.map((row) => row.id));\n return new Set([...this._selection.value].filter((id) => validIds.has(id)));\n });\n\n private readonly _hasSelection = computed<boolean>(() => this._validSelectedIds.value.size > 0);\n\n private readonly _allSelected = computed<boolean>(() => {\n const rows = this._rows.value;\n if (rows.length === 0) {\n return false;\n }\n\n return rows.every((row) => this._selection.value.has(row.id));\n });\n\n constructor(\n private readonly _rows: ReadonlySignal<T[]>,\n private readonly _selectionMode: SelectionMode,\n private readonly _onSelectionChanged?: () => void,\n ) {\n super();\n }\n\n protected override async _open(): Promise<void> {\n const selectionWatcher = effect(() => {\n touch(this._selection.value);\n this._onSelectionChanged?.();\n });\n this._ctx.onDispose(selectionWatcher);\n }\n\n //\n // Getters\n //\n\n public get selection(): ReadonlySignal<Set<string>> {\n return this._selection;\n }\n\n public get hasSelection(): ReadonlySignal<boolean> {\n return this._hasSelection;\n }\n\n public get allRowsSeleted(): ReadonlySignal<boolean> {\n return this._allSelected;\n }\n\n public get selectionMode(): SelectionMode {\n return this._selectionMode;\n }\n\n public getSelectedRows = (): T[] => {\n const selectedIds = this._validSelectedIds.value;\n return this._rows.value.filter((row) => selectedIds.has(row.id));\n };\n\n public isRowIndexSelected = (rowIndex: number): boolean => {\n const row = this._rows.value[rowIndex];\n return this._selection.value.has(row.id);\n };\n\n public isObjectSelected = (object: T): boolean => {\n return this._selection.value.has(object.id);\n };\n\n //\n // Manipulation\n //\n\n public toggleSelectionForRowIndex = (rowIndex: number): void => {\n const row = this._rows.value[rowIndex];\n const newSelection = new Set(this._selection.value);\n\n if (newSelection.has(row.id)) {\n newSelection.delete(row.id);\n } else {\n if (this._selectionMode === 'single') {\n newSelection.clear();\n }\n newSelection.add(row.id);\n }\n\n this._selection.value = newSelection;\n };\n\n public setSelection = (mode: 'all' | 'none'): void => {\n switch (mode) {\n case 'all': {\n this._selection.value = new Set(this._rows.value.map((row) => row.id));\n break;\n }\n case 'none': {\n this._selection.value = new Set();\n break;\n }\n }\n };\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Schema } from 'effect';\n\nimport { Obj, Ref } from '@dxos/echo';\nimport { getTypename, toJsonSchema } from '@dxos/echo-schema';\nimport type { JsonSchemaType, SortDirectionType } from '@dxos/echo-schema';\nimport {\n createView,\n getSchemaFromPropertyDefinitions,\n ViewProjection,\n type ViewType,\n type SchemaPropertyDefinition,\n} from '@dxos/schema';\n\nimport { TableType } from '../types';\n\n// TODO(ZaymonFC): Upstream these extra fields to SchemaPropertyDefinition to enhance schema-tools schema creation.\ntype PropertyDisplayProps = {\n size: number;\n title: string;\n sort: SortDirectionType;\n};\n\nexport type TablePropertyDefinition = SchemaPropertyDefinition & Partial<PropertyDisplayProps>;\n\n/**\n * @deprecated\n */\n// TODO(burdon): Remove variance.\nexport const getBaseSchema = ({\n typename,\n properties,\n jsonSchema,\n schema,\n}: {\n typename?: string;\n properties?: TablePropertyDefinition[];\n jsonSchema?: JsonSchemaType;\n schema?: Schema.Schema.AnyNoContext;\n}): { typename: string; jsonSchema: JsonSchemaType } => {\n if (typename && properties) {\n const schema = getSchemaFromPropertyDefinitions(typename, properties);\n return { typename: schema.typename, jsonSchema: schema.jsonSchema };\n } else if (schema) {\n return { typename: getTypename(schema)!, jsonSchema: toJsonSchema(schema) };\n } else if (typename && jsonSchema) {\n return { typename, jsonSchema };\n } else {\n throw new Error('invalid properties');\n }\n};\n\nexport const makeDynamicTable = ({\n typename,\n jsonSchema,\n properties,\n}: {\n typename: string;\n jsonSchema: JsonSchemaType;\n properties?: TablePropertyDefinition[];\n}): { table: TableType; projection: ViewProjection } => {\n const view = createView({\n name: 'dynamic-table',\n typename,\n jsonSchema,\n ...(properties && { fields: properties.map((property) => property.name) }),\n });\n\n const table = Obj.make(TableType, { name: 'dynamic-table', view: Ref.make(view) });\n const projection = new ViewProjection(jsonSchema, view);\n if (properties && view.fields) {\n setProperties(view, projection, properties);\n }\n\n return {\n table,\n projection,\n };\n};\n\nconst setProperties = (view: ViewType, projection: ViewProjection, properties: TablePropertyDefinition[]) => {\n for (const property of properties) {\n const field = view.fields.find((field) => field.path === property.name);\n if (field) {\n if (property.size !== undefined) {\n field.size = property.size;\n }\n\n if (property.title !== undefined) {\n const fieldProjection = projection.getFieldProjection(field.id);\n projection.setFieldProjection({\n ...fieldProjection,\n props: { ...fieldProjection.props, title: property.title },\n });\n }\n\n if (property.sort) {\n const fieldId = field.id;\n view.query.sort = [{ fieldId, direction: property.sort }];\n }\n }\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Explicitly marks signal dependencies for tracking within effects.\n * Returns the passed value to enable inline usage.\n */\nexport const touch = <T>(value: T) => value;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport {\n type EchoSchema,\n Format,\n FormatEnum,\n type JsonPath,\n type JsonProp,\n Ref,\n TypedObject,\n TypeEnum,\n} from '@dxos/echo-schema';\nimport { type Client, PublicKey } from '@dxos/react-client';\nimport { live, type Space } from '@dxos/react-client/echo';\nimport { createFieldId, createView, getSchemaProperties, ViewProjection, type ViewType } from '@dxos/schema';\n\nimport { type TableType } from '../types';\n\n// TODO(ZaymonFC): We don't need the client anymore.\ntype InitialiseTableProps = {\n client: Client;\n space: Space;\n table: TableType;\n typename?: string;\n initialRow?: boolean;\n};\n\nexport const initializeTable = async ({\n client,\n space,\n table,\n typename,\n initialRow = true,\n}: InitialiseTableProps): Promise<Schema.Schema.AnyNoContext> => {\n if (typename) {\n const schema = await space.db.graph.getSchemaByTypename(typename, space.db);\n if (!schema) {\n throw new Error(`Schema not found: ${typename}`);\n }\n\n const fields = getSchemaProperties(schema.ast).map((prop) => prop.name);\n\n table.view = Ref.make(\n createView({\n // TODO(ZaymonFC): Don't hardcode name?\n name: 'View',\n typename: schema.typename,\n jsonSchema: schema.jsonSchema,\n fields,\n }),\n );\n\n return schema;\n } else {\n const [schema] = await space.db.schemaRegistry.register([createContactSchema()]);\n const fields = ContactFields;\n\n table.view = Ref.make(\n createView({\n name: 'View',\n typename: schema.typename,\n jsonSchema: schema.jsonSchema,\n fields,\n }),\n );\n\n createProjection(schema, table.view.target!);\n\n if (initialRow) {\n // TODO(burdon): Last (first) row should not be in db and should be managed by the model.\n space.db.add(live(schema, {}));\n }\n\n return schema;\n }\n};\n\nconst createContactSchema = () =>\n TypedObject({\n typename: `example.com/type/${PublicKey.random().truncate()}`,\n version: '0.1.0',\n })({\n name: Schema.optional(Schema.String).annotations({ title: 'Name' }),\n active: Schema.optional(Schema.Boolean).annotations({ title: 'Active' }),\n email: Schema.optional(Format.Email),\n salary: Schema.optional(Format.Currency()).annotations({ title: 'Salary' }),\n });\n\nconst ContactFields = ['name', 'email', 'salary', 'active'];\n\nconst createProjection = (schema: EchoSchema, view: ViewType): ViewProjection => {\n const projection = new ViewProjection(schema.jsonSchema, view);\n projection.setFieldProjection({\n field: {\n id: view.fields.find((f) => f.path === 'salary')!.id,\n path: 'salary' as JsonPath,\n size: 150,\n },\n });\n projection.setFieldProjection({\n field: {\n id: view.fields.find((f) => f.path === 'active')!.id,\n path: 'active' as JsonPath,\n size: 100,\n },\n });\n projection.setFieldProjection({\n field: {\n id: createFieldId(),\n path: 'manager' as JsonPath,\n referencePath: 'name' as JsonPath,\n },\n props: {\n property: 'manager' as JsonProp,\n type: TypeEnum.Ref,\n format: FormatEnum.Ref,\n referenceSchema: schema.typename,\n title: 'Manager',\n },\n });\n\n return projection;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport type TableButton = 'columnSettings' | 'rowMenu' | 'newColumn' | 'referencedCell' | 'sort';\n\nexport const BUTTON_IDENTIFIERS: { [K in TableButton]: string } = {\n columnSettings: 'data-table-column-settings-button',\n newColumn: 'data-table-new-column-button',\n referencedCell: 'data-table-ref-cell-button',\n rowMenu: 'data-table-row-menu-button',\n sort: 'data-table-sort-button',\n} as const;\n\ntype ButtonData =\n | { type: 'columnSettings'; fieldId: string }\n | { type: 'newColumn'; disabled?: boolean }\n | { type: 'rowMenu'; rowIndex: number }\n | { type: 'sort'; fieldId: string; direction?: 'asc' | 'desc' };\n\nconst createButton = ({\n attr,\n data,\n disabled = false,\n icon,\n testId,\n type = 'primary',\n}: {\n attr: string;\n data: Record<string, string>;\n disabled?: boolean;\n icon: string;\n testId: string;\n type?: 'primary' | 'secondary';\n}) => {\n const dataAttrs = Object.entries(data)\n .map(([k, v]) => `${k}=\"${v}\"`)\n .join(' ');\n\n const positionClass = type === 'primary' ? 'inline-end-2' : 'inline-end-9';\n return `<button ${attr} data-testid=\"${testId}\" class=\"dx-button is-6 pli-0.5 min-bs-0 absolute inset-block-1 ${positionClass}\" ${dataAttrs} ${disabled ? 'disabled' : ''}><svg data-size=\"4\"><use href=\"/icons.svg#${icon}\"/></svg></button>`;\n};\n\nconst addColumnButton = {\n attr: BUTTON_IDENTIFIERS.newColumn,\n icon: 'ph--plus--regular',\n render: ({ disabled }: Omit<Extract<ButtonData, { type: 'newColumn' }>, 'type'>) => {\n return createButton({\n attr: BUTTON_IDENTIFIERS.newColumn,\n icon: addColumnButton.icon,\n disabled,\n data: {},\n testId: 'table-new-column-button',\n });\n },\n getData: (_el: HTMLElement): Extract<ButtonData, { type: 'newColumn' }> => ({ type: 'newColumn' }),\n} as const;\n\nconst columnSettingsButton = {\n attr: BUTTON_IDENTIFIERS.columnSettings,\n icon: 'ph--caret-down--regular',\n render: ({ fieldId }: Omit<Extract<ButtonData, { type: 'columnSettings' }>, 'type'>) => {\n return createButton({\n attr: BUTTON_IDENTIFIERS.columnSettings,\n icon: columnSettingsButton.icon,\n data: {\n 'data-field-id': fieldId,\n },\n testId: 'table-column-settings-button',\n });\n },\n getData: (el: HTMLElement): Extract<ButtonData, { type: 'columnSettings' }> => ({\n type: 'columnSettings',\n fieldId: el.getAttribute('data-field-id')!,\n }),\n} as const;\n\nconst rowMenuButton = {\n attr: BUTTON_IDENTIFIERS.rowMenu,\n icon: 'ph--dots-three--regular',\n render: ({ rowIndex }: Omit<Extract<ButtonData, { type: 'rowMenu' }>, 'type'>) => {\n return createButton({\n attr: BUTTON_IDENTIFIERS.rowMenu,\n icon: rowMenuButton.icon,\n data: {\n 'data-row-index': rowIndex.toString(),\n },\n testId: 'table-row-menu-button',\n });\n },\n getData: (el: HTMLElement): Extract<ButtonData, { type: 'rowMenu' }> => ({\n type: 'rowMenu',\n rowIndex: Number(el.getAttribute('data-row-index')!),\n }),\n} as const;\n\nconst sortButton = {\n attr: BUTTON_IDENTIFIERS.sort,\n icon: 'ph--sort-ascending--regular',\n render: ({ fieldId, direction }: Omit<Extract<ButtonData, { type: 'sort' }>, 'type'>) => {\n return createButton({\n attr: BUTTON_IDENTIFIERS.sort,\n icon: direction === 'desc' ? 'ph--sort-descending--regular' : 'ph--sort-ascending--regular',\n data: {\n 'data-field-id': fieldId,\n 'data-direction': direction ?? '',\n },\n testId: 'table-sort-button',\n // TODO(ZaymonFC): All buttons should be rendered into an absolutely positioned flex container.\n // This is a bit hacky.\n type: 'secondary',\n });\n },\n getData: (el: HTMLElement): Extract<ButtonData, { type: 'sort' }> => ({\n type: 'sort',\n fieldId: el.getAttribute('data-field-id')!,\n direction: el.getAttribute('data-direction') as 'asc' | 'desc' | undefined,\n }),\n} as const;\n\nexport const tableButtons = {\n addColumn: addColumnButton,\n columnSettings: columnSettingsButton,\n rowMenu: rowMenuButton,\n sort: sortButton,\n} as const;\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// Core types.\nexport type TableControl = 'checkbox' | 'switch';\n\nexport type ControlData =\n | { type: 'checkbox'; rowIndex: number; header?: boolean }\n | { type: 'switch'; colIndex: number; rowIndex: number };\n\ntype CommonRenderProps = {\n checked?: boolean;\n disabled?: boolean;\n};\n\nexport type RenderCheckboxProps = CommonRenderProps & Omit<Extract<ControlData, { type: 'checkbox' }>, 'type'>;\nexport type RenderSwitchProps = CommonRenderProps & Omit<Extract<ControlData, { type: 'switch' }>, 'type'>;\n\nexport const CONTROL_IDENTIFIERS = {\n checkbox: 'data-table-checkbox',\n switch: 'data-table-switch',\n} as const;\n\nconst BASE_CLASSES = {\n checkbox: 'absolute inset-block-[.375rem] inline-end-[.375rem] dx-checkbox',\n switch: 'absolute inset-block-[.25rem] inline-end-[.25rem] dx-checkbox--switch',\n} as const;\n\nconst renderAttributes = (data: Record<string, string>) => {\n return Object.entries(data)\n .map(([k, v]) => `${k}=\"${v}\"`)\n .join(' ');\n};\n\nconst renderInput = (\n baseClass: string,\n attrs: Record<string, string>,\n checked = false,\n disabled = false,\n preventToggle = false,\n testId: string,\n) => {\n return `<input type=\"checkbox\" class=\"${baseClass}\" ${renderAttributes(attrs)} ${checked ? 'checked' : ''} ${preventToggle ? 'onclick=\"return false\"' : ''} ${disabled ? 'disabled' : ''} data-testid=\"${testId}\"/>`;\n};\n\nexport const CheckboxStory = ({\n rowIndex,\n header = false,\n checked = false,\n disabled = false,\n}: RenderCheckboxProps): string => {\n const attrs = {\n [CONTROL_IDENTIFIERS.checkbox]: '',\n 'data-row-index': rowIndex.toString(),\n ...(header && { 'data-header': '' }),\n };\n\n return renderInput(BASE_CLASSES.checkbox, attrs, checked, disabled, true, 'table-selection');\n};\n\nexport const SwitchStory = ({ colIndex, rowIndex, checked = false, disabled = false }: RenderSwitchProps): string => {\n const attrs = {\n [CONTROL_IDENTIFIERS.switch]: '',\n 'data-row-index': rowIndex.toString(),\n 'data-col-index': colIndex.toString(),\n };\n\n return renderInput(BASE_CLASSES.switch, attrs, checked, disabled, true, 'table-switch');\n};\n\nexport const tableControls = {\n checkbox: {\n attr: CONTROL_IDENTIFIERS.checkbox,\n render: CheckboxStory,\n getData: (el: HTMLElement): Extract<ControlData, { type: 'checkbox' }> => ({\n type: 'checkbox',\n rowIndex: Number(el.getAttribute('data-row-index')),\n header: el.hasAttribute('data-header'),\n }),\n },\n switch: {\n attr: CONTROL_IDENTIFIERS.switch,\n render: SwitchStory,\n getData: (el: HTMLElement): Extract<ControlData, { type: 'switch' }> => ({\n type: 'switch',\n rowIndex: Number(el.getAttribute('data-row-index')),\n colIndex: Number(el.getAttribute('data-col-index')),\n }),\n },\n} as const;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\nimport { isTypeLiteral, TypeLiteral } from 'effect/SchemaAST';\n\n/**\n * Creates a narrowed schema from an original schema that only includes\n * the specified paths. This allows form components to only display\n * and edit/validate specific fields rather than the entire object.\n *\n * @param schema The original schema to narrow\n * @param paths Array of field paths to extract\n * @returns A narrowed Schema instance containing only the properties at the specified paths\n */\nexport const narrowSchema = <S extends Schema.Schema.AnyNoContext>(\n schema: S,\n paths: string[],\n): Schema.Schema<unknown, unknown> | undefined => {\n const ast = (schema as any)?.ast;\n\n if (isTypeLiteral(ast)) {\n // Filter property signatures that match any of the provided paths\n const propertySignatures = ast.propertySignatures.filter((signature) => paths.includes(signature.name.toString()));\n\n // If we found at least one matching property\n if (propertySignatures.length > 0) {\n // Create a new TypeLiteral with only the matching properties\n const narrowType = new TypeLiteral(propertySignatures, []);\n return Schema.make(narrowType);\n }\n }\n\n return undefined;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { computed, signal, type Signal, type ReadonlySignal } from '@preact/signals-core';\nimport orderBy from 'lodash.orderby';\n\nimport { getValue, FormatEnum, TypeEnum, type SortDirectionType, type FieldSortType } from '@dxos/echo-schema';\nimport { formatForDisplay } from '@dxos/react-ui-form';\nimport type { PropertyType, FieldType, ViewProjection, ViewType } from '@dxos/schema';\n\nimport { type TableRow } from './table-model';\n\n/**\n * Represents the local sort state.\n * - undefined: No local sort set, fallback to view sort.\n * - cleared: Sort explicitly cleared by user.\n * - active: Active local sort with sort configuration.\n */\ntype LocalSort = { type: 'cleared' } | { type: 'active'; sort: FieldSortType } | undefined;\n\n/**\n * Manages table sorting functionality through display and data index mapping.\n *\n * When a table is sorted, rows visually reorder but we need to maintain references\n * to the original data positions. This is handled through two types of indices:\n *\n * - Display indices: The visual positions after sorting\n * - Data indices: The original positions in the source data\n *\n * The _displayToDataIndex map maintains these relationships, enabling lookups\n * between visual and source positions.\n *\n * Example mapping between display and data indices:\n *\n * Original Data: Sorted Display: Mapping: (Display → Data)\n * ┌──────────────┐ ┌──────────────┐ ┌────────┐\n * │ 0: \"Banana\" │ => │ 0: \"Apple\" │ => │ 0 => 1 │\n * │ 1: \"Apple\" │ => │ 1: \"Banana\" │ => │ 1 => 0 │\n * │ 2: \"Cherry\" │ => │ 2: \"Cherry\" │ => │ 2 => 2 │\n * └──────────────┘ └──────────────┘ └────────┘\n */\nexport class TableSorting<T extends TableRow> {\n private readonly _displayToDataIndex = new Map<number, number>();\n private readonly _rows: Signal<T[]>;\n private readonly _localSort = signal<LocalSort>(undefined);\n private readonly _isDirty: ReadonlySignal<boolean>;\n public readonly sortedRows: ReadonlySignal<T[]>;\n\n constructor(\n rows: Signal<T[]>,\n private readonly _view: ViewType | undefined,\n private readonly _projection: ViewProjection,\n ) {\n this._rows = rows;\n this._isDirty = computed(() => {\n const local = this._localSort.value;\n const viewSort = this._view?.query.sort?.[0];\n if (local?.type === 'cleared') {\n return viewSort !== undefined;\n }\n if (local?.type === 'active') {\n if (!viewSort) {\n return true;\n }\n return local.sort.fieldId !== viewSort.fieldId || local.sort.direction !== viewSort.direction;\n }\n return false;\n });\n this.sortedRows = this.initialiseSortedRows();\n }\n\n /**\n * @reactive\n * @returns Local sort if present, falls back to view sort.\n */\n public get sorting(): FieldSortType | undefined {\n const local = this._localSort.value;\n if (local?.type === 'cleared') {\n return undefined;\n }\n if (local?.type === 'active') {\n return local.sort;\n }\n\n return this._view?.query.sort?.[0];\n }\n\n /**\n * @reactive\n * @returns Whether local sort differs from view sort.\n */\n public get isDirty(): boolean {\n return this._isDirty.value;\n }\n\n public getDataIndex(displayIndex: number): number {\n return this._displayToDataIndex.get(displayIndex) ?? displayIndex;\n }\n\n public setSort(fieldId: string, direction: SortDirectionType): void {\n this._localSort.value = {\n type: 'active',\n sort: { fieldId, direction },\n };\n }\n\n public toggleSort(fieldId: string): void {\n if (!this._view || !this.sorting || this.sorting.fieldId !== fieldId) {\n return;\n }\n\n switch (this.sorting.direction) {\n case 'asc': {\n this.setSort(fieldId, 'desc');\n break;\n }\n case 'desc': {\n this.setSort(fieldId, 'asc');\n break;\n }\n }\n }\n\n public clearSort(): void {\n this._localSort.value = { type: 'cleared' };\n }\n\n public save(): void {\n if (this._view && this._localSort.value !== undefined) {\n if (this._localSort.value.type === 'active') {\n this._view.query.sort = [this._localSort.value.sort];\n } else {\n this._view.query.sort = [];\n }\n this._localSort.value = undefined;\n }\n }\n\n //\n // Initialisation.\n //\n\n private initialiseSortedRows(): ReadonlySignal<T[]> {\n return computed(() => {\n this._displayToDataIndex.clear();\n const sort = this.sorting;\n if (!sort || !this._view) {\n return this._rows.value;\n }\n\n const field = this._view.fields.find((f) => f.id === sort.fieldId);\n if (!field) {\n return this._rows.value;\n }\n\n const { props } = this._projection.getFieldProjection(field.id);\n\n const dataWithIndices = this._rows.value.map((item, index) => {\n const sortValue = this.getSortValue(props, field, item);\n const isEmpty = !(props.type === TypeEnum.Boolean) && (sortValue == null || sortValue === '');\n\n return { item, index, value: sortValue, isEmpty };\n });\n\n const ordered = orderBy(dataWithIndices, ['isEmpty', 'value'], ['asc', sort.direction]);\n\n ordered.forEach(({ index: dataIndex }, displayIndex) => {\n if (displayIndex !== dataIndex) {\n this._displayToDataIndex.set(displayIndex, dataIndex);\n }\n });\n\n return ordered.map(({ item }) => item);\n });\n }\n\n private getSortValue(props: PropertyType, field: FieldType, item: T) {\n const { type, format } = props;\n const value = getValue(item, field.path);\n\n if (type === TypeEnum.Boolean) {\n return !!value; // Coerce null/undefined to false for booleans.\n }\n if (type === TypeEnum.Number) {\n return value;\n }\n if (value == null) {\n return value;\n }\n\n /**\n * For single select fields, the sort value is determined by the index of the option in the\n * options array. This ensures sort order matches the configured option order.\n */\n if (format === FormatEnum.SingleSelect) {\n const options = props.options;\n if (!options) {\n return undefined;\n }\n\n const option = options.find((option) => option.id === value);\n return option ? options.indexOf(option) : undefined;\n }\n\n // TODO(ZaymonFC): Should we format this returned value for display based on the referenced prop format?\n // Right now we're going to be sorting based on the raw values.\n // Maybe we need to recurse this function with the referenced prop format and field?\n if (format === FormatEnum.Ref && field.referencePath) {\n const refValue = getValue(value.target, field.referencePath);\n return refValue;\n }\n\n return formatForDisplay({ type, format, value });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// TODO(ZaymonFC): Push this into the tag picker module.\n\n/**\n * Regex pattern for matching tags in the format [Label](id)\n */\nexport const TAG_PATTERN_REGEX = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g;\n\n/**\n * Extracts tag IDs from a string in the format [Label](id)\n * @param value The string to extract IDs from\n * @returns Array of extracted IDs or undefined if no matches or value is not a string\n */\nexport const extractTagIds = (value: unknown): string[] | undefined => {\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const ids: string[] = [];\n let match;\n\n // Use the global regex to find all matches\n while ((match = TAG_PATTERN_REGEX.exec(value)) !== null) {\n if (match[2]) {\n ids.push(match[2]);\n }\n }\n\n return ids.length > 0 ? ids : undefined;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { signal } from '@preact/signals-core';\nimport { type RefObject, type MutableRefObject } from 'react';\n\nimport { type Live } from '@dxos/live-object';\nimport { log } from '@dxos/log';\n\nexport type ColumnSettingsMode = { type: 'create' } | { type: 'edit'; fieldId: string };\n\nexport type ModalState =\n | { type: 'row'; rowIndex: number }\n | { type: 'column'; fieldId: string }\n | { type: 'refPanel'; targetId: string; typename: string }\n | {\n type: 'createRefPanel';\n typename: string;\n initialValues?: Record<string, string>;\n onCreate?: (obj: Live<any>) => void;\n }\n | { type: 'columnSettings'; mode: ColumnSettingsMode }\n | { type: 'closed' };\n\nexport class ModalController {\n private readonly _state = signal<ModalState>({ type: 'closed' });\n private readonly _triggerRef: MutableRefObject<HTMLElement> = { current: null as unknown as HTMLElement };\n\n public get state() {\n return this._state;\n }\n\n public get trigger() {\n return this._triggerRef as RefObject<HTMLButtonElement>;\n }\n\n public setTrigger = (trigger: HTMLElement) => {\n this._triggerRef.current = trigger;\n };\n\n public showRowMenu = (rowIndex: number) => {\n this._state.value = { type: 'row', rowIndex };\n };\n\n public showColumnMenu = (fieldId: string) => {\n this._state.value = { type: 'column', fieldId };\n };\n\n public showColumnCreator = () => {\n this._state.value = { type: 'columnSettings', mode: { type: 'create' } };\n };\n\n public showReferencePanel = (targetId: string, schemaId: string) => {\n this._state.value = { type: 'refPanel', targetId, typename: schemaId };\n };\n\n public openColumnSettings = () => {\n if (this._state.value.type === 'column') {\n const fieldId = this._state.value.fieldId;\n // Queue next render to let the column action modal close completely.\n requestAnimationFrame(() => {\n this._state.value = {\n type: 'columnSettings',\n mode: { type: 'edit', fieldId },\n };\n });\n }\n };\n\n public openCreateRef = (\n typename: string,\n anchorCell: Element | null,\n initialValues?: Record<string, string>,\n onCreate?: (obj: Live<any>) => void,\n ) => {\n if (anchorCell) {\n this._triggerRef.current = anchorCell as HTMLElement;\n this._state.value = {\n type: 'createRefPanel',\n typename,\n initialValues,\n onCreate,\n };\n } else {\n log.warn('anchor cell not found while creating new ref');\n }\n };\n\n public close = () => {\n this._state.value = { type: 'closed' };\n };\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { signal } from '@preact/signals-core';\nimport { isNotNullable } from 'effect/Predicate';\n\nimport { FormatEnum, getObjectDXN, getValue, TypeEnum } from '@dxos/echo-schema';\nimport { cellClassesForFieldType, formatForDisplay } from '@dxos/react-ui-form';\nimport {\n type DxGridPlane,\n type DxGridPlaneCells,\n type DxGridPlaneRange,\n type DxGridCellValue,\n toPlaneCellIndex,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\nimport { VIEW_FIELD_LIMIT, type FieldType } from '@dxos/schema';\n\nimport { type SelectionMode } from './selection-model';\nimport { type TableRow, type TableModel } from './table-model';\nimport { tableButtons, tableControls } from '../util';\n\n/**\n * Presentation layer for a table component, handling cell rendering and grid display logic.\n * Manages rendering of table cells, headers, selection columns, and action columns across\n * different grid planes.\n */\nexport class TablePresentation<T extends TableRow = TableRow> {\n constructor(\n private readonly model: TableModel<T>,\n private readonly _visibleRange = signal<DxGridPlaneRange>({\n start: { row: 0, col: 0 },\n end: { row: 0, col: 0 },\n }),\n ) {}\n\n public getCells(range: DxGridPlaneRange, plane: DxGridPlane): DxGridPlaneCells {\n let cells: DxGridPlaneCells;\n\n switch (plane) {\n case 'grid':\n this._visibleRange.value = range;\n cells = this.getMainGridCells(range);\n break;\n case 'frozenRowsStart':\n cells = this.getHeaderCells(range);\n break;\n case 'frozenColsStart':\n cells = this.getSelectionColumnCells(range);\n break;\n case 'frozenColsEnd':\n cells = this.getActionColumnCells(range);\n break;\n case 'fixedStartStart':\n cells = this.getSelectAllCell();\n break;\n case 'fixedStartEnd':\n cells = this.getNewColumnCell();\n break;\n default:\n cells = {};\n }\n\n if (plane === 'grid' && this.model.features.dataEditable === false) {\n Object.values(cells).forEach((cell) => {\n cell.readonly = 'text-select';\n });\n }\n\n return cells;\n }\n\n private getMainGridCells(range: DxGridPlaneRange): DxGridPlaneCells {\n const cells: DxGridPlaneCells = {};\n const fields = this.model.view?.fields ?? [];\n\n const addCell = (obj: T, field: FieldType, colIndex: number, displayIndex: number): void => {\n const { props } = this.model.projection.getFieldProjection(field.id);\n\n const cell: DxGridCellValue = {\n get value() {\n const value = getValue(obj, field.path);\n if (value == null) {\n return '';\n }\n\n if (props.type === 'array') {\n return '';\n }\n\n switch (props.format) {\n case FormatEnum.Boolean:\n case FormatEnum.SingleSelect:\n case FormatEnum.MultiSelect: {\n return '';\n }\n case FormatEnum.Ref: {\n if (!field.referencePath) {\n return ''; // TODO(burdon): Show error.\n }\n\n return getValue(value.target, field.referencePath);\n }\n\n default: {\n return formatForDisplay({ type: props.type, format: props.format, value });\n }\n }\n },\n };\n\n const classes = [];\n const formatClasses = cellClassesForFieldType({ type: props.type, format: props.format });\n if (formatClasses) {\n classes.push(formatClasses);\n }\n const rowSelectionClasses = cellClassesForRowSelection(\n this.model.selection.isObjectSelected(obj),\n this.model.selection.selectionMode,\n );\n if (rowSelectionClasses) {\n classes.push(rowSelectionClasses);\n }\n if (classes.length > 0) {\n cell.className = mx(classes.flat());\n }\n\n if (props.type === TypeEnum.Array) {\n const targetArray = getValue(obj, field.path);\n if (targetArray && Array.isArray(targetArray)) {\n // TODO(ZaymonFC): For arrays of objects, objects should have a 'label' annotation on the field\n // that can be used to render tags.\n // TODO(ZaymonFC): Move to util.\n const getLabel = (value: any) => {\n // If the value is falsy, return undefined\n // If the object is an array, check for 'name' property\n // If the object is a primitive type (string, number, boolean) stringify\n // If the object is an array return 'Array'\n if (!value) {\n return undefined;\n }\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (Array.isArray(value)) {\n return 'Array';\n }\n if (typeof value === 'object' && value.name) {\n return value.name;\n }\n if (typeof value === 'object' && value.value) {\n return `${value.value}`;\n }\n return 'Object';\n };\n\n const tags = targetArray\n .map(getLabel)\n .filter(isNotNullable)\n .map((title) => {\n return `<span class=\"dx-tag rounded-xl\" data-hue=\"neutral\">${title}</span>`;\n })\n .join('');\n\n cell.accessoryHtml = `<div role='none' class=\"flex flex-row gap-1 overflow-x-auto\">${tags}</div>`;\n }\n }\n\n if (props.format === FormatEnum.Ref && props.referenceSchema) {\n const targetObj = getValue(obj, field.path)?.target;\n if (targetObj) {\n const dxn = getObjectDXN(targetObj)?.toString();\n cell.accessoryHtml = `<dx-ref-tag refId=${dxn} class=\"dx-button is-6 pli-[3px] pbe-[2px] min-bs-0 absolute inline-end-1\"><dx-icon icon=\"ph--link-simple--regular\"/></dx-ref-tag>`;\n }\n }\n\n if (props.format === FormatEnum.Boolean) {\n const value = getValue(obj, field.path);\n cell.accessoryHtml = tableControls.switch.render({\n colIndex,\n rowIndex: displayIndex,\n checked: value ?? false,\n });\n cell.readonly = 'no-text-select';\n }\n\n if (props.format === FormatEnum.SingleSelect) {\n const value = getValue(obj, field.path);\n const options = this.model.projection.getFieldProjection(field.id).props.options;\n if (options) {\n const option = options.find((o) => o.id === value);\n if (option) {\n cell.accessoryHtml = `<span class=\"dx-tag\" data-hue=\"${option.color}\">${option.title}</span>`;\n }\n }\n }\n\n if (props.format === FormatEnum.MultiSelect) {\n const values = getValue(obj, field.path) as string[] | undefined;\n const options = this.model.projection.getFieldProjection(field.id).props.options;\n if (options && values && values.length > 0) {\n const tags = values\n .map((value) => {\n const option = options.find((o) => o.id === value);\n if (option) {\n return `<span class=\"dx-tag\" data-hue=\"${option.color}\">${option.title}</span>`;\n }\n return null;\n })\n .filter(Boolean)\n .join(' ');\n\n if (tags) {\n cell.accessoryHtml = `<div role='none' class=\"flex flex-row gap-1\">${tags}</div>`;\n }\n }\n }\n\n const idx = toPlaneCellIndex({ col: colIndex, row: displayIndex });\n cells[idx] = cell;\n };\n\n for (let row = range.start.row; row <= range.end.row && row < this.model.getRowCount(); row++) {\n for (let col = range.start.col; col <= range.end.col && col < fields.length; col++) {\n const field = fields[col];\n if (!field) {\n continue;\n }\n\n addCell(this.model.rows.value[row], field, col, row);\n }\n }\n\n return cells;\n }\n\n private getHeaderCells(range: DxGridPlaneRange): DxGridPlaneCells {\n const cells: DxGridPlaneCells = {};\n const fields = this.model.view?.fields ?? [];\n for (let col = range.start.col; col <= range.end.col && col < fields.length; col++) {\n const { field, props } = this.model.projection.getFieldProjection(fields[col].id);\n const sorting = this.model.sorting?.sorting;\n const direction = sorting?.fieldId === field.id ? sorting.direction : undefined;\n\n cells[toPlaneCellIndex({ col, row: 0 })] = {\n // TODO(burdon): Use same logic as form for fallback title.\n value: props.title ?? field.path,\n readonly: true,\n resizeHandle: 'col',\n accessoryHtml: `\n ${direction !== undefined ? tableButtons.sort.render({ fieldId: field.id, direction }) : ''}\n ${tableButtons.columnSettings.render({ fieldId: field.id })}\n `,\n className: '!bg-toolbarSurface',\n };\n }\n\n return cells;\n }\n\n private getSelectionColumnCells(range: DxGridPlaneRange): DxGridPlaneCells {\n const cells: DxGridPlaneCells = {};\n for (let row = range.start.row; row <= range.end.row && row < this.model.getRowCount(); row++) {\n const isSelected = this.model.selection.isRowIndexSelected(row);\n const classes = cellClassesForRowSelection(isSelected, this.model.selection.selectionMode);\n cells[toPlaneCellIndex({ col: 0, row })] = {\n value: '',\n readonly: 'no-text-select',\n className: classes ? mx(classes) : undefined,\n accessoryHtml: tableControls.checkbox.render({ rowIndex: row, checked: isSelected }),\n };\n }\n\n return cells;\n }\n\n private getActionColumnCells(range: DxGridPlaneRange): DxGridPlaneCells {\n const cells: DxGridPlaneCells = {};\n for (let row = range.start.row; row <= range.end.row && row < this.model.getRowCount(); row++) {\n const isSelected = this.model.selection.isRowIndexSelected(row);\n const classes = cellClassesForRowSelection(isSelected, this.model.selection.selectionMode);\n cells[toPlaneCellIndex({ col: 0, row })] = {\n value: '',\n readonly: true,\n className: classes ? mx(classes) : undefined,\n accessoryHtml: tableButtons.rowMenu.render({ rowIndex: row }),\n };\n }\n\n return cells;\n }\n\n private getSelectAllCell(): DxGridPlaneCells {\n if (!this.model.features.selection.enabled || this.model.selection.selectionMode === 'single') {\n return {\n [toPlaneCellIndex({ col: 0, row: 0 })]: {\n className: '!bg-toolbarSurface',\n readonly: true,\n value: '',\n },\n };\n }\n\n return {\n [toPlaneCellIndex({ col: 0, row: 0 })]: {\n accessoryHtml: tableControls.checkbox.render({\n rowIndex: 0,\n header: true,\n checked: this.model.selection.allRowsSeleted.value,\n }),\n className: '!bg-toolbarSurface',\n readonly: true,\n value: '',\n },\n };\n }\n\n private getNewColumnCell(): DxGridPlaneCells {\n return {\n [toPlaneCellIndex({ col: 0, row: 0 })]: {\n accessoryHtml: this.model.features.schemaEditable\n ? tableButtons.addColumn.render({\n disabled: (this.model.view?.fields?.length ?? 0) >= VIEW_FIELD_LIMIT,\n })\n : undefined,\n className: '!bg-toolbarSurface',\n readonly: true,\n value: '',\n },\n };\n }\n}\n\nexport const cellClassesForRowSelection = (selected: boolean, selectionMode: SelectionMode) => {\n if (!selected) {\n if (selectionMode === 'single') {\n return ['!cursor-pointer'];\n } else {\n return undefined;\n }\n }\n\n switch (selectionMode) {\n case 'single':\n // TODO(ZaymonFC): @thure, do we need a grid version of 'currentRelated'?\n return ['!bg-currentRelated hover:bg-hoverSurface', '!cursor-pointer'];\n case 'multiple':\n return ['!bg-gridCellSelected'];\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, 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 { tagPickerExtension, 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 onQuery?: (field: FieldProjection, text: string) => Promise<QueryResult[]>;\n};\n\nexport const TableValueEditor = ({\n model,\n modals,\n schema,\n onEnter,\n onFocus,\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.view.fields[col];\n const fieldProjection = model.projection.getFieldProjection(field.id);\n invariant(fieldProjection);\n return fieldProjection;\n }, [model, editing]);\n\n if (fieldProjection?.props.type === TypeEnum.Array) {\n return <FormCellEditor fieldProjection={fieldProjection} model={model} schema={schema} __gridScope={__gridScope} />;\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 __gridScope={__gridScope}\n />\n );\n};\n\nexport const TableCellEditor = ({\n model,\n modals,\n onEnter,\n onFocus,\n onQuery,\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\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.view.fields[col];\n const fieldProjection = model.projection.getFieldProjection(field.id);\n invariant(fieldProjection);\n return fieldProjection;\n }, [model, editing]);\n\n const handleEnter = useCallback(\n async (value: any) => {\n if (!model || !editing) {\n return;\n }\n\n const cell = parseCellIndex(editing.index);\n\n // Validate the value\n const result = await model.validateCellData(cell, value);\n\n if (result.valid) {\n setValidationError(null);\n model.setCellData(cell, value);\n onEnter?.(cell);\n onFocus?.();\n setEditing(null);\n } else {\n setValidationError(result.error);\n // Editor stays open on validation failure\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 onEnter?.(cell);\n if (event && onFocus) {\n onFocus(determineNavigationAxis(event), determineNavigationDelta(event));\n }\n } else {\n setValidationError(result.error);\n }\n } else {\n setValidationError(null);\n setEditing(null);\n if (event && onFocus) {\n onFocus(determineNavigationAxis(event), determineNavigationDelta(event));\n }\n }\n },\n [model, editing, onFocus, onEnter, fieldProjection, setEditing],\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 tagPickerExtension({\n mode,\n inGrid: true,\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.view.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 && Array.isArray(value)) {\n const tagItems = value\n .map((id) => {\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): 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} __gridScope={__gridScope} />\n <GridCellEditor extension={extension} getCellContent={getCellContent} onBlur={handleBlur} />\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};\n\nexport const CellValidationMessage = ({\n validationError,\n __gridScope,\n}: GridScopedProps<CellValidationMessageProps>) => {\n const { editing, editBox: box } = useGridContext('GridSheetCellEditor', __gridScope);\n\n if (!editing || !validationError) {\n return null;\n }\n\n return (\n <div\n role='none'\n className='absolute bg-errorSurface text-errorSurfaceText 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 } 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 __gridScope: any;\n};\n\nexport const FormCellEditor = ({ fieldProjection, model, schema, __gridScope }: FormCellEditorProps) => {\n const { editing, setEditing } = useGridContext('ArrayEditor', __gridScope);\n const cellRef = useRef<HTMLButtonElement | null>(null);\n\n useEffect(() => {\n if (editing && editing.cellElement) {\n cellRef.current = editing.cellElement as HTMLButtonElement;\n }\n }, [editing?.cellElement]);\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 && editing) {\n const cell = parseCellIndex(editing.index);\n const row = model.getRowAt(cell.row);\n invariant(row);\n\n return row;\n }\n\n return undefined;\n }, [model, editing]);\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 },\n [fieldProjection.field.path, originalRow],\n );\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (nextOpen === false) {\n setEditing(null);\n }\n },\n [setEditing],\n );\n\n if (!editing) {\n return null;\n }\n\n return (\n <Popover.Root open={editing !== null} onOpenChange={handleOpenChange}>\n <Popover.VirtualTrigger virtualRef={cellRef} />\n <Popover.Content tabIndex={-1} classNames='popover-card-width'>\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,\n schema,\n rowActions,\n onRowClick,\n onRowAction,\n ...props\n}: DynamicTableProps) => {\n const { table, projection } = useMemo(() => {\n // TODO(burdon): Remove variance from the props (should be normalized externally; possibly via hooks).\n const props = getBaseSchema({ typename: name, properties, jsonSchema, schema });\n return makeDynamicTable({ ...props, properties });\n }, [name, properties, schema, jsonSchema]);\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 table,\n rows,\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 { effect } from '@preact/signals-core';\nimport orderBy from 'lodash.orderby';\nimport { useEffect, useState } from 'react';\n\nimport { fullyQualifiedId, getSpace, type Live } from '@dxos/react-client/echo';\nimport { useSelectionActions } from '@dxos/react-ui-attention';\nimport { type ViewProjection } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type TableRow, TableModel, type TableModelProps, type TableRowAction } from '../model';\nimport { type TableType } from '../types';\n\nexport type UseTableModelParams<T extends TableRow = TableRow> = {\n table?: TableType;\n projection?: ViewProjection;\n rows?: Live<T>[];\n rowActions?: TableRowAction[];\n onSelectionChanged?: (selection: string[]) => void;\n onRowAction?: (actionId: string, data: T) => void;\n} & Pick<\n TableModelProps<T>,\n 'features' | 'onInsertRow' | 'onDeleteRows' | 'onDeleteColumn' | 'onCellUpdate' | 'onRowOrderChange'\n>;\n\nexport const useTableModel = <T extends TableRow = TableRow>({\n table,\n projection,\n rows,\n rowActions,\n features,\n onSelectionChanged,\n onRowAction,\n ...props\n}: UseTableModelParams<T>): TableModel<T> | undefined => {\n const [model, setModel] = useState<TableModel<T>>();\n useEffect(() => {\n if (!table || !projection) {\n return;\n }\n\n let model: TableModel<T> | undefined;\n const t = setTimeout(async () => {\n model = new TableModel<T>({\n id: fullyQualifiedId(table),\n space: getSpace(table),\n view: table.view?.target,\n projection,\n features,\n rowActions,\n onRowAction,\n ...props,\n });\n await model.open();\n setModel(model);\n });\n\n return () => {\n clearTimeout(t);\n void model?.close();\n };\n }, [table, projection, table?.view?.target, features, rowActions]); // TODO(burdon): Trigger if callbacks change?\n\n // Update data.\n useEffect(() => {\n if (rows) {\n // TODO(ZaymonFC): Remove this workaround once unstable query ordering issue is resolved\n /*\n * Sort all objects by string id field as a temporary workaround for query ordering issues\n * Reference: https://github.com/dxos/dxos/pull/9409\n */\n const sortedRows = orderBy(rows, [(row) => String(row.id)], ['asc']);\n model?.setRows(sortedRows);\n }\n }, [model, rows]);\n\n const { multiSelect, clear } = useSelectionActions(\n [table?.id, table?.view?.target?.query.typename].filter(isNonNullable),\n );\n\n useEffect(() => {\n if (!model) {\n return;\n }\n\n const unsubscribe = effect(() => {\n const selectedItems = [...model.selection.selection.value];\n multiSelect(selectedItems);\n onSelectionChanged?.(selectedItems);\n });\n\n // Maybe clear the selection here?\n return () => {\n clear();\n unsubscribe();\n };\n }, [model, onSelectionChanged]);\n\n return model;\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": ["import_react", "import_react_ui", "import_echo", "import_react_ui_form", "import_react_ui_grid", "import_echo_schema", "import_invariant", "import_signals_core", "import_context", "import_schema", "import_effect", "import_react_ui_theme", "import_util", "import_lodash", "import_react_ui_attention", "import_live_object", "import_react_ui_menu", "translationKey", "ColumnActionsMenu", "model", "modals", "t", "useTranslation", "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", "ColumnSettings", "onNewColumn", "newField", "setNewField", "useState", "space", "useEffect", "mode", "projection", "createFieldProjection", "requestAnimationFrame", "undefined", "existingField", "useMemo", "view", "fields", "find", "f", "id", "field", "handleSave", "useCallback", "handleCancel", "deleteFieldProjection", "Popover", "classNames", "FieldEditor", "registry", "db", "schemaRegistry", "onSave", "onCancel", "CreateRefPanel", "__gridScope", "gridId", "useGridContext", "schema", "query", "typename", "runSync", "omit", "Schema", "values", "obj", "add", "live", "onCreate", "nextOpen", "data-grid", "Form", "initialValues", "RowActionsMenu", "hasSelection", "selection", "dataEditable", "deleteRow", "rowIndex", "rowActions", "map", "action", "key", "handleRowAction", "getBaseSchema", "properties", "jsonSchema", "getSchemaFromPropertyDefinitions", "getTypename", "toJsonSchema", "Error", "makeDynamicTable", "createView", "name", "property", "table", "Obj", "make", "TableType", "Ref", "ViewProjection", "setProperties", "path", "size", "title", "fieldProjection", "getFieldProjection", "setFieldProjection", "props", "sort", "touch", "initializeTable", "client", "initialRow", "graph", "getSchemaByTypename", "getSchemaProperties", "ast", "prop", "register", "createContactSchema", "ContactFields", "createProjection", "target", "TypedObject", "PublicKey", "random", "truncate", "version", "optional", "String", "annotations", "active", "Boolean", "email", "Format", "Email", "salary", "Currency", "createFieldId", "referencePath", "TypeEnum", "format", "FormatEnum", "referenceSchema", "BUTTON_IDENTIFIERS", "columnSettings", "newColumn", "referencedCell", "rowMenu", "createButton", "attr", "data", "disabled", "icon", "testId", "dataAttrs", "Object", "entries", "k", "v", "join", "positionClass", "addColumnButton", "render", "getData", "_el", "columnSettingsButton", "el", "getAttribute", "rowMenuButton", "toString", "Number", "sortButton", "tableButtons", "addColumn", "CONTROL_IDENTIFIERS", "checkbox", "switch", "BASE_CLASSES", "renderAttributes", "renderInput", "baseClass", "attrs", "checked", "preventToggle", "CheckboxStory", "header", "SwitchStory", "colIndex", "tableControls", "hasAttribute", "narrowSchema", "paths", "isTypeLiteral", "propertySignatures", "filter", "signature", "includes", "length", "narrowType", "TypeLiteral", "SelectionModel", "Resource", "_rows", "_selectionMode", "_onSelectionChanged", "_selection", "signal", "Set", "_validSelectedIds", "computed", "rows", "validIds", "row", "has", "_hasSelection", "_allSelected", "every", "getSelectedRows", "selectedIds", "isRowIndexSelected", "isObjectSelected", "object", "toggleSelectionForRowIndex", "newSelection", "delete", "clear", "setSelection", "_open", "selectionWatcher", "effect", "_ctx", "onDispose", "allRowsSeleted", "selectionMode", "TableSorting", "_view", "_projection", "_displayToDataIndex", "Map", "_localSort", "_isDirty", "local", "viewSort", "sortedRows", "initialiseSortedRows", "isDirty", "getDataIndex", "displayIndex", "get", "toggleSort", "save", "dataWithIndices", "item", "index", "sortValue", "getSortValue", "isEmpty", "ordered", "orderBy", "forEach", "dataIndex", "set", "getValue", "SingleSelect", "options", "option", "indexOf", "refValue", "formatForDisplay", "TAG_PATTERN_REGEX", "extractTagIds", "ids", "match", "exec", "push", "defaultFeatures", "enabled", "TableModel", "pinnedRows", "top", "bottom", "onCellUpdate", "onDeleteColumn", "onDeleteRows", "onInsertRow", "onRowOrderChange", "onRowAction", "_visibleRange", "start", "col", "end", "getRowCount", "insertRow", "_sorting", "_onInsertRow", "objectsToDelete", "selectedRows", "_onDeleteRows", "actionId", "_onRowAction", "getCellData", "formatForEditing", "validateCellData", "rowIdx", "valid", "error", "currentRow", "invariant", "snapshot", "getSnapshot", "transformedValue", "editorTextToCellValue", "setValue", "getSchema", "validationResult", "validateSchema", "message", "setCellData", "isLiveObject", "_id", "_space", "_features", "_pinnedRows", "_rowActions", "_onDeleteColumn", "_onCellUpdate", "_onRowOrderChange", "getRowAt", "columnMeta", "_columnMeta", "isViewDirty", "initializeColumnMeta", "initializeEffects", "meta", "fromEntries", "resizeable", "grid", "frozenColsStart", "frozenColsEnd", "rowOrderWatcher", "rowEffectManager", "rowEffects", "plane", "cleanup", "updateCellData", "update", "dataRow", "updatedValue", "setColumnWidth", "columnIndex", "width", "newWidth", "Math", "max", "pinRow", "side", "unpinRow", "saveView", "makeRef", "MultiSelect", "parseValue", "ModalController", "_state", "_triggerRef", "current", "setTrigger", "showRowMenu", "showColumnMenu", "showColumnCreator", "showReferencePanel", "targetId", "schemaId", "openCreateRef", "anchorCell", "log", "warn", "TablePresentation", "getCells", "range", "cells", "getMainGridCells", "getHeaderCells", "getSelectionColumnCells", "getActionColumnCells", "getSelectAllCell", "getNewColumnCell", "cell", "readonly", "addCell", "classes", "formatClasses", "cellClassesForFieldType", "rowSelectionClasses", "cellClassesForRowSelection", "className", "mx", "flat", "Array", "targetArray", "isArray", "getLabel", "tags", "isNotNullable", "accessoryHtml", "targetObj", "dxn", "getObjectDXN", "o", "color", "idx", "toPlaneCellIndex", "resizeHandle", "isSelected", "VIEW_FIELD_LIMIT", "selected", "CellValidationMessage", "validationError", "editing", "editBox", "box", "div", "role", "style", "inlineSize", "zIndex", "insetBlockEnd", "insetBlockStart", "insetInlineStart", "FormCellEditor", "setEditing", "cellRef", "useRef", "cellElement", "narrowedSchema", "JSON", "stringify", "originalRow", "parseCellIndex", "formValues", "getDeep", "setDeep", "handleOpenChange", "tabIndex", "completion", "debug", "onQuery", "onMatch", "EditorView", "theme", "autocompletion", "icons", "activateOnTyping", "closeOnBlur", "override", "context", "text", "doc", "from", "tooltipClass", "optionClass", "updateListener", "of", "transactions", "tr", "annotation", "pickedCompletion", "newValue", "Symbol", "for", "createOption", "isCreateOption", "TableValueEditor", "onEnter", "onFocus", "TableCellEditor", "suppressNextBlur", "themeMode", "useThemeContext", "_validationError", "setValidationError", "handleEnter", "result", "handleBlur", "handleClose", "event", "determineNavigationAxis", "determineNavigationDelta", "extension", "editorKeys", "onClose", "initialContent", "onNav", "createMarkdownExtensions", "tagPickerExtension", "inGrid", "onSearch", "toLowerCase", "label", "hue", "onUpdate", "document", "querySelector", "cellQuery", "getCellContent", "tagItems", "createLinks", "tagItem", "GridCellEditor", "onBlur", "shift", "TableRoot", "children", "TableMain", "forwardRef", "presentation", "ignoreAttention", "onRowClick", "forwardedRef", "dxGrid", "setDxGrid", "hasAttention", "useAttention", "frozen", "noActionColumn", "frozenRowsStart", "useImperativeHandle", "updateIfWithinBounds", "updateCells", "requestUpdate", "handleGridClick", "safeParseInt", "ariaRowIndex", "buttonSelector", "button", "tableButtonElement", "closest", "btn", "controlSelector", "control", "controlElement", "ctrl", "handleFocus", "increment", "delta", "refocus", "scrollToRow", "handleKeyDown", "closestCell", "handleAxisResize", "axis", "parseInt", "handleWheel", "stopPropagation", "handleNewColumn", "columns", "scrollToColumn", "handleQuery", "objects", "Filter", "run", "isNotFalsy", "span", "Grid", "gridSeparatorInlineEnd", "gridSeparatorBlockEnd", "limitRows", "limitColumns", "overscroll", "onAxisResize", "onKeyDown", "onWheelCapture", "ref", "Table", "Main", "useTableModel", "onSelectionChanged", "setModel", "setTimeout", "fullyQualifiedId", "getSpace", "clearTimeout", "setRows", "multiSelect", "useSelectionActions", "isNonNullable", "unsubscribe", "selectedItems", "DynamicTable", "tableRef", "handleCellUpdate", "handleRowOrderChange", "useDefaultValue", "createTableToolbarActions", "onAdd", "customActions", "Rx", "createMenuAction", "ns", "iconOnly", "hidden", "rxFromSignal", "viewDirty", "gap", "createGapSeparator", "nodes", "edges", "source", "custom", "TableToolbar", "attendableId", "actionsCreator", "menu", "useMenuActions", "MenuProvider", "ToolbarMenu"]
|
|
7
|
-
}
|
package/dist/lib/node/meta.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"inputs":{"packages/ui/react-ui-table/src/translations.ts":{"bytes":3874,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/ColumnActionsMenu.tsx":{"bytes":8704,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/ColumnSettings.tsx":{"bytes":9111,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/CreateRefPanel.tsx":{"bytes":9680,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/RowActionsMenu.tsx":{"bytes":6172,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/types/table.ts":{"bytes":3173,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/types/index.ts":{"bytes":465,"imports":[{"path":"packages/ui/react-ui-table/src/types/table.ts","kind":"import-statement","original":"./table"}],"format":"esm"},"packages/ui/react-ui-table/src/util/dynamic-table.ts":{"bytes":9648,"imports":[{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/ui/react-ui-table/src/util/signals.ts":{"bytes":879,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/util/table.ts":{"bytes":11612,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/util/table-buttons.ts":{"bytes":12236,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/util/table-controls.ts":{"bytes":8758,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/util/schema.ts":{"bytes":4020,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"effect/SchemaAST","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/util/index.ts":{"bytes":945,"imports":[{"path":"packages/ui/react-ui-table/src/util/dynamic-table.ts","kind":"import-statement","original":"./dynamic-table"},{"path":"packages/ui/react-ui-table/src/util/signals.ts","kind":"import-statement","original":"./signals"},{"path":"packages/ui/react-ui-table/src/util/table.ts","kind":"import-statement","original":"./table"},{"path":"packages/ui/react-ui-table/src/util/table-buttons.ts","kind":"import-statement","original":"./table-buttons"},{"path":"packages/ui/react-ui-table/src/util/table-controls.ts","kind":"import-statement","original":"./table-controls"},{"path":"packages/ui/react-ui-table/src/util/schema.ts","kind":"import-statement","original":"./schema"}],"format":"esm"},"packages/ui/react-ui-table/src/model/selection-model.ts":{"bytes":11816,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/ui/react-ui-table/src/model/table-sorting.ts":{"bytes":23070,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"lodash.orderby","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/util/tag.ts":{"bytes":2855,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/model/table-model.ts":{"bytes":49415,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/model/selection-model.ts","kind":"import-statement","original":"./selection-model"},{"path":"packages/ui/react-ui-table/src/model/table-sorting.ts","kind":"import-statement","original":"./table-sorting"},{"path":"packages/ui/react-ui-table/src/util/index.ts","kind":"import-statement","original":"../util"},{"path":"packages/ui/react-ui-table/src/util/tag.ts","kind":"import-statement","original":"../util/tag"}],"format":"esm"},"packages/ui/react-ui-table/src/model/modal-controller.ts":{"bytes":8327,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/model/table-presentation.ts":{"bytes":43266,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"effect/Predicate","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/ui/react-ui-table/src/model/index.ts":{"bytes":781,"imports":[{"path":"packages/ui/react-ui-table/src/model/table-model.ts","kind":"import-statement","original":"./table-model"},{"path":"packages/ui/react-ui-table/src/model/modal-controller.ts","kind":"import-statement","original":"./modal-controller"},{"path":"packages/ui/react-ui-table/src/model/table-presentation.ts","kind":"import-statement","original":"./table-presentation"}],"format":"esm"},"packages/ui/react-ui-table/src/components/TableCellEditor/CellValidationMessage.tsx":{"bytes":3686,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/TableCellEditor/FormCellEditor.tsx":{"bytes":10777,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/util/index.ts","kind":"import-statement","original":"../../util"}],"format":"esm"},"packages/ui/react-ui-table/src/components/TableCellEditor/extension.ts":{"bytes":5454,"imports":[{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/TableCellEditor/TableCellEditor.tsx":{"bytes":39198,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true},{"path":"@dxos/react-ui-tag-picker","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/TableCellEditor/CellValidationMessage.tsx","kind":"import-statement","original":"./CellValidationMessage"},{"path":"packages/ui/react-ui-table/src/components/TableCellEditor/FormCellEditor.tsx","kind":"import-statement","original":"./FormCellEditor"},{"path":"packages/ui/react-ui-table/src/components/TableCellEditor/extension.ts","kind":"import-statement","original":"./extension"}],"format":"esm"},"packages/ui/react-ui-table/src/components/TableCellEditor/index.ts":{"bytes":512,"imports":[{"path":"packages/ui/react-ui-table/src/components/TableCellEditor/TableCellEditor.tsx","kind":"import-statement","original":"./TableCellEditor"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/Table.tsx":{"bytes":40877,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/ColumnActionsMenu.tsx","kind":"import-statement","original":"./ColumnActionsMenu"},{"path":"packages/ui/react-ui-table/src/components/Table/ColumnSettings.tsx","kind":"import-statement","original":"./ColumnSettings"},{"path":"packages/ui/react-ui-table/src/components/Table/CreateRefPanel.tsx","kind":"import-statement","original":"./CreateRefPanel"},{"path":"packages/ui/react-ui-table/src/components/Table/RowActionsMenu.tsx","kind":"import-statement","original":"./RowActionsMenu"},{"path":"packages/ui/react-ui-table/src/model/index.ts","kind":"import-statement","original":"../../model"},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../../translations"},{"path":"packages/ui/react-ui-table/src/util/index.ts","kind":"import-statement","original":"../../util"},{"path":"packages/ui/react-ui-table/src/components/TableCellEditor/index.ts","kind":"import-statement","original":"../TableCellEditor"}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/useTableModel.ts":{"bytes":9818,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"lodash.orderby","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/model/index.ts","kind":"import-statement","original":"../model"}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/index.ts":{"bytes":489,"imports":[{"path":"packages/ui/react-ui-table/src/hooks/useTableModel.ts","kind":"import-statement","original":"./useTableModel"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/DynamicTable.tsx":{"bytes":10300,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/Table.tsx","kind":"import-statement","original":"./Table"},{"path":"packages/ui/react-ui-table/src/hooks/index.ts","kind":"import-statement","original":"../../hooks"},{"path":"packages/ui/react-ui-table/src/model/index.ts","kind":"import-statement","original":"../../model"},{"path":"packages/ui/react-ui-table/src/util/index.ts","kind":"import-statement","original":"../../util"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytes":576,"imports":[{"path":"packages/ui/react-ui-table/src/components/Table/Table.tsx","kind":"import-statement","original":"./Table"},{"path":"packages/ui/react-ui-table/src/components/Table/DynamicTable.tsx","kind":"import-statement","original":"./DynamicTable"}],"format":"esm"},"packages/ui/react-ui-table/src/components/TableToolbar/TableToolbar.tsx":{"bytes":9265,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@effect-rx/rx-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/react-ui-menu","kind":"import-statement","external":true},{"path":"@dxos/react-ui-menu","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/components/TableToolbar/index.ts":{"bytes":502,"imports":[{"path":"packages/ui/react-ui-table/src/components/TableToolbar/TableToolbar.tsx","kind":"import-statement","original":"./TableToolbar"}],"format":"esm"},"packages/ui/react-ui-table/src/components/index.ts":{"bytes":570,"imports":[{"path":"packages/ui/react-ui-table/src/components/Table/index.ts","kind":"import-statement","original":"./Table"},{"path":"packages/ui/react-ui-table/src/components/TableToolbar/index.ts","kind":"import-statement","original":"./TableToolbar"}],"format":"esm"},"packages/ui/react-ui-table/src/index.ts":{"bytes":1043,"imports":[{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/ui/react-ui-table/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-table/src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-table/src/model/index.ts","kind":"import-statement","original":"./model"},{"path":"packages/ui/react-ui-table/src/types/index.ts","kind":"import-statement","original":"./types"},{"path":"packages/ui/react-ui-table/src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-table/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":175714},"packages/ui/react-ui-table/dist/lib/node/index.cjs":{"imports":[{"path":"packages/ui/react-ui-table/dist/lib/node/chunk-O2VPBNS5.cjs","kind":"import-statement"},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"effect/SchemaAST","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"lodash.orderby","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"effect/Predicate","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true},{"path":"@dxos/react-ui-tag-picker","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-grid","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"lodash.orderby","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@effect-rx/rx-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/react-ui-menu","kind":"import-statement","external":true},{"path":"@dxos/react-ui-menu","kind":"import-statement","external":true}],"exports":["BUTTON_IDENTIFIERS","CONTROL_IDENTIFIERS","CheckboxStory","DynamicTable","ModalController","SwitchStory","Table","TableModel","TablePresentation","TableSchema","TableToolbar","TableType","cellClassesForRowSelection","getBaseSchema","initializeTable","makeDynamicTable","narrowSchema","tableButtons","tableControls","touch","translations","useTableModel"],"entryPoint":"packages/ui/react-ui-table/src/index.ts","inputs":{"packages/ui/react-ui-table/src/translations.ts":{"bytesInOutput":1158},"packages/ui/react-ui-table/src/components/Table/Table.tsx":{"bytesInOutput":9863},"packages/ui/react-ui-table/src/components/Table/ColumnActionsMenu.tsx":{"bytesInOutput":2315},"packages/ui/react-ui-table/src/components/Table/ColumnSettings.tsx":{"bytesInOutput":2435},"packages/ui/react-ui-table/src/components/Table/CreateRefPanel.tsx":{"bytesInOutput":2582},"packages/ui/react-ui-table/src/components/Table/RowActionsMenu.tsx":{"bytesInOutput":1576},"packages/ui/react-ui-table/src/model/table-model.ts":{"bytesInOutput":11503},"packages/ui/react-ui-table/src/model/selection-model.ts":{"bytesInOutput":2579},"packages/ui/react-ui-table/src/util/dynamic-table.ts":{"bytesInOutput":2052},"packages/ui/react-ui-table/src/util/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/util/signals.ts":{"bytesInOutput":30},"packages/ui/react-ui-table/src/util/table.ts":{"bytesInOutput":2618},"packages/ui/react-ui-table/src/util/table-buttons.ts":{"bytesInOutput":2903},"packages/ui/react-ui-table/src/util/table-controls.ts":{"bytesInOutput":1905},"packages/ui/react-ui-table/src/util/schema.ts":{"bytesInOutput":498},"packages/ui/react-ui-table/src/model/table-sorting.ts":{"bytesInOutput":4459},"packages/ui/react-ui-table/src/util/tag.ts":{"bytesInOutput":334},"packages/ui/react-ui-table/src/model/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/model/modal-controller.ts":{"bytesInOutput":2085},"packages/ui/react-ui-table/src/model/table-presentation.ts":{"bytesInOutput":10501},"packages/ui/react-ui-table/src/components/TableCellEditor/TableCellEditor.tsx":{"bytesInOutput":10093},"packages/ui/react-ui-table/src/components/TableCellEditor/CellValidationMessage.tsx":{"bytesInOutput":956},"packages/ui/react-ui-table/src/components/TableCellEditor/FormCellEditor.tsx":{"bytesInOutput":3102},"packages/ui/react-ui-table/src/components/TableCellEditor/extension.ts":{"bytesInOutput":1145},"packages/ui/react-ui-table/src/components/TableCellEditor/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Table/DynamicTable.tsx":{"bytesInOutput":2101},"packages/ui/react-ui-table/src/hooks/useTableModel.ts":{"bytesInOutput":2152},"packages/ui/react-ui-table/src/hooks/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/TableToolbar/TableToolbar.tsx":{"bytesInOutput":2088},"packages/ui/react-ui-table/src/components/TableToolbar/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/index.ts":{"bytesInOutput":0}},"bytes":85472},"packages/ui/react-ui-table/dist/lib/node/types/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/ui/react-ui-table/dist/lib/node/types/index.cjs":{"imports":[{"path":"packages/ui/react-ui-table/dist/lib/node/chunk-O2VPBNS5.cjs","kind":"import-statement"}],"exports":["TableSchema","TableType"],"entryPoint":"packages/ui/react-ui-table/src/types/index.ts","inputs":{},"bytes":142},"packages/ui/react-ui-table/dist/lib/node/chunk-O2VPBNS5.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1689},"packages/ui/react-ui-table/dist/lib/node/chunk-O2VPBNS5.cjs":{"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["TableSchema","TableType"],"inputs":{"packages/ui/react-ui-table/src/types/table.ts":{"bytesInOutput":605},"packages/ui/react-ui-table/src/types/index.ts":{"bytesInOutput":0}},"bytes":738}}}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var types_exports = {};
|
|
20
|
-
__export(types_exports, {
|
|
21
|
-
TableSchema: () => import_chunk_O2VPBNS5.TableSchema,
|
|
22
|
-
TableType: () => import_chunk_O2VPBNS5.TableType
|
|
23
|
-
});
|
|
24
|
-
module.exports = __toCommonJS(types_exports);
|
|
25
|
-
var import_chunk_O2VPBNS5 = require("../chunk-O2VPBNS5.cjs");
|
|
26
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
27
|
-
0 && (module.exports = {
|
|
28
|
-
TableSchema,
|
|
29
|
-
TableType
|
|
30
|
-
});
|
|
31
|
-
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["index.cjs"],
|
|
4
|
-
"sourcesContent": ["import {\n TableSchema,\n TableType\n} from \"../chunk-O2VPBNS5.cjs\";\nexport {\n TableSchema,\n TableType\n};\n//# sourceMappingURL=index.cjs.map\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAGO;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|