@dxos/react-ui-table 0.8.4-main.e098934 → 0.8.4-main.ead640a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/lib/browser/{chunk-63UUF4IG.mjs → chunk-4K7JPALT.mjs} +5 -5
  2. package/dist/lib/browser/chunk-4K7JPALT.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-BBXDTWCX.mjs → chunk-OZTXLZGM.mjs} +24 -42
  4. package/dist/lib/browser/chunk-OZTXLZGM.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +123 -269
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/testing/index.mjs +8 -6
  9. package/dist/lib/browser/testing/index.mjs.map +3 -3
  10. package/dist/lib/browser/types/index.mjs +1 -1
  11. package/dist/lib/node-esm/{chunk-K734DJB7.mjs → chunk-MK6OVUF6.mjs} +5 -5
  12. package/dist/lib/node-esm/chunk-MK6OVUF6.mjs.map +7 -0
  13. package/dist/lib/node-esm/{chunk-RNQDU7IQ.mjs → chunk-S56Z4V4X.mjs} +24 -42
  14. package/dist/lib/node-esm/chunk-S56Z4V4X.mjs.map +7 -0
  15. package/dist/lib/node-esm/index.mjs +123 -269
  16. package/dist/lib/node-esm/index.mjs.map +4 -4
  17. package/dist/lib/node-esm/meta.json +1 -1
  18. package/dist/lib/node-esm/testing/index.mjs +8 -6
  19. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  20. package/dist/lib/node-esm/types/index.mjs +1 -1
  21. package/dist/types/src/components/Table/DynamicTable.d.ts +2 -2
  22. package/dist/types/src/components/Table/DynamicTable.d.ts.map +1 -1
  23. package/dist/types/src/components/Table/DynamicTable.stories.d.ts +3 -3
  24. package/dist/types/src/components/Table/DynamicTable.stories.d.ts.map +1 -1
  25. package/dist/types/src/components/Table/Relations.stories.d.ts +71 -7
  26. package/dist/types/src/components/Table/Relations.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/Table/Table.d.ts +5 -2
  28. package/dist/types/src/components/Table/Table.d.ts.map +1 -1
  29. package/dist/types/src/components/Table/Table.stories.d.ts +5 -6
  30. package/dist/types/src/components/Table/Table.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/TableCellEditor/FormCellEditor.d.ts +7 -5
  32. package/dist/types/src/components/TableCellEditor/FormCellEditor.d.ts.map +1 -1
  33. package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts +5 -3
  34. package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts.map +1 -1
  35. package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts +1 -2
  36. package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts.map +1 -1
  37. package/dist/types/src/components/TableCellEditor/index.d.ts +1 -0
  38. package/dist/types/src/components/TableCellEditor/index.d.ts.map +1 -1
  39. package/dist/types/src/components/testing.d.ts +3 -3
  40. package/dist/types/src/components/testing.d.ts.map +1 -1
  41. package/dist/types/src/hooks/useAddRow.d.ts +1 -1
  42. package/dist/types/src/hooks/useAddRow.d.ts.map +1 -1
  43. package/dist/types/src/hooks/useTableModel.d.ts +1 -1
  44. package/dist/types/src/hooks/useTableModel.d.ts.map +1 -1
  45. package/dist/types/src/model/modal-controller.d.ts +0 -7
  46. package/dist/types/src/model/modal-controller.d.ts.map +1 -1
  47. package/dist/types/src/model/table-model.d.ts +1 -1
  48. package/dist/types/src/model/table-model.d.ts.map +1 -1
  49. package/dist/types/src/model/table-presentation.d.ts.map +1 -1
  50. package/dist/types/src/testing/useTestTableModel.d.ts +1 -1
  51. package/dist/types/src/testing/useTestTableModel.d.ts.map +1 -1
  52. package/dist/types/src/types/schema.d.ts +3 -3
  53. package/dist/types/src/types/schema.d.ts.map +1 -1
  54. package/dist/types/src/util/dynamic-table.d.ts +3 -4
  55. package/dist/types/src/util/dynamic-table.d.ts.map +1 -1
  56. package/dist/types/src/util/schema.d.ts +1 -1
  57. package/dist/types/src/util/schema.d.ts.map +1 -1
  58. package/dist/types/tsconfig.tsbuildinfo +1 -1
  59. package/package.json +50 -50
  60. package/src/components/Table/DynamicTable.stories.tsx +8 -7
  61. package/src/components/Table/DynamicTable.tsx +4 -7
  62. package/src/components/Table/Relations.stories.tsx +126 -11
  63. package/src/components/Table/Table.stories.tsx +33 -32
  64. package/src/components/Table/Table.tsx +13 -9
  65. package/src/components/TableCellEditor/FormCellEditor.tsx +51 -41
  66. package/src/components/TableCellEditor/TableCellEditor.stories.tsx +17 -45
  67. package/src/components/TableCellEditor/TableCellEditor.tsx +7 -94
  68. package/src/components/TableCellEditor/index.ts +1 -0
  69. package/src/components/testing.ts +2 -2
  70. package/src/hooks/useAddRow.ts +1 -1
  71. package/src/hooks/useTableModel.ts +1 -1
  72. package/src/model/modal-controller.ts +0 -28
  73. package/src/model/table-model.test.ts +10 -5
  74. package/src/model/table-model.ts +2 -1
  75. package/src/model/table-presentation.test.ts +13 -16
  76. package/src/model/table-presentation.ts +4 -5
  77. package/src/model/table-sorting.ts +1 -1
  78. package/src/testing/useTestTableModel.ts +6 -4
  79. package/src/types/schema.ts +4 -4
  80. package/src/util/dynamic-table.ts +5 -6
  81. package/src/util/schema.ts +4 -4
  82. package/dist/lib/browser/chunk-63UUF4IG.mjs.map +0 -7
  83. package/dist/lib/browser/chunk-BBXDTWCX.mjs.map +0 -7
  84. package/dist/lib/node-esm/chunk-K734DJB7.mjs.map +0 -7
  85. package/dist/lib/node-esm/chunk-RNQDU7IQ.mjs.map +0 -7
  86. package/dist/types/src/components/Table/CreateRefPanel.d.ts +0 -9
  87. package/dist/types/src/components/Table/CreateRefPanel.d.ts.map +0 -1
  88. package/src/components/Table/CreateRefPanel.tsx +0 -103
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/util/dynamic-table.ts", "../../../src/util/signals.ts", "../../../src/util/table-buttons.ts", "../../../src/util/table-controls.ts", "../../../src/util/schema.ts", "../../../src/model/table-model.ts", "../../../src/util/tag.ts", "../../../src/model/selection-model.ts", "../../../src/model/table-sorting.ts", "../../../src/model/modal-controller.ts", "../../../src/model/table-presentation.ts", "../../../src/hooks/useTableModel.ts", "../../../src/hooks/useAddRow.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { Filter, Obj, Query } from '@dxos/echo';\nimport { getTypename, toJsonSchema } from '@dxos/echo/internal';\nimport type { JsonSchemaType } from '@dxos/echo/internal';\nimport {\n type DataType,\n ProjectionModel,\n type SchemaPropertyDefinition,\n type SortDirectionType,\n createView,\n getSchemaFromPropertyDefinitions,\n} from '@dxos/schema';\n\nimport { Table } from '../types';\n\n// TODO(ZaymonFC): Upstream these extra fields to SchemaPropertyDefinition to enhance schema-tools schema creation.\ntype PropertyDisplayProps = {\n size: number;\n title: string;\n sort: 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 jsonSchema,\n properties,\n}: {\n jsonSchema: JsonSchemaType;\n properties?: TablePropertyDefinition[];\n}): { projection: ProjectionModel; view: DataType.View } => {\n const table = Obj.make(Table.Table, { sizes: {} });\n const view = createView({\n query: Query.select(Filter.everything()),\n jsonSchema,\n presentation: table,\n ...(properties && { fields: properties.map((property) => property.name) }),\n });\n\n const projection = new ProjectionModel(jsonSchema, view.projection);\n projection.normalizeView();\n if (properties && projection.fields) {\n setProperties(view, projection, table, properties);\n }\n\n return { projection, view };\n};\n\nconst setProperties = (\n view: DataType.View,\n projection: ProjectionModel,\n table: Table.Table,\n properties: TablePropertyDefinition[],\n) => {\n for (const property of properties) {\n const field = projection.fields.find((field) => field.path === property.name);\n if (field) {\n if (property.size !== undefined) {\n table.sizes[field.path] = 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.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\nexport type TableButton = 'columnSettings' | 'rowMenu' | 'newColumn' | 'referencedCell' | 'sort' | 'saveDraftRow';\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 saveDraftRow: 'data-table-save-draft-row-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: 'saveDraftRow'; rowIndex: number; disabled?: boolean }\n | { type: 'sort'; fieldId: string; direction?: 'asc' | 'desc' };\n\nconst createButton = ({\n attr,\n data,\n disabled = false,\n icon,\n testId,\n type: _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 return `<button ${attr} data-testid=\"${testId}\" class=\"dx-button is-6 aspect-square pli-0.5 min-bs-0\" ${dataAttrs} ${disabled ? 'disabled' : ''} data-dx-grid-action=\"accessory\"><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 'data-variant': 'ghost',\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\nconst saveDraftRowButton = {\n attr: BUTTON_IDENTIFIERS.saveDraftRow,\n icon: 'ph--floppy-disk--regular',\n render: ({ rowIndex, disabled }: Omit<Extract<ButtonData, { type: 'saveDraftRow' }>, 'type'>) => {\n return createButton({\n attr: BUTTON_IDENTIFIERS.saveDraftRow,\n icon: saveDraftRowButton.icon,\n disabled,\n data: {\n 'data-row-index': rowIndex.toString(),\n 'data-variant': 'primary',\n },\n testId: 'table-save-draft-row-button',\n });\n },\n getData: (el: HTMLElement): Extract<ButtonData, { type: 'saveDraftRow' }> => ({\n type: 'saveDraftRow',\n rowIndex: Number(el.getAttribute('data-row-index')!),\n }),\n} as const;\n\nexport const tableButtons = {\n addColumn: addColumnButton,\n columnSettings: columnSettingsButton,\n rowMenu: rowMenuButton,\n saveDraftRow: saveDraftRowButton,\n sort: sortButton,\n} as const;\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// Core types.\nimport { accessoryHandlesPointerdownAttrs } from '@dxos/lit-grid';\n\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}\" data-dx-grid-action=\"accessory\"/>`;\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 ...accessoryHandlesPointerdownAttrs,\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 * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\n/**\n * Creates a narrowed schema from an original schema that only includes\n * the specified paths. This allows form components to only display\n * and edit/validate specific fields rather than the entire object.\n *\n * @param schema The original schema to narrow\n * @param paths Array of field paths to extract\n * @returns A narrowed Schema instance containing only the properties at the specified paths\n */\nexport const narrowSchema = <S extends Schema.Schema.AnyNoContext>(\n schema: S,\n paths: string[],\n): Schema.Schema<unknown, unknown> | undefined => {\n const ast = (schema as any)?.ast;\n\n if (SchemaAST.isTypeLiteral(ast)) {\n // Filter property signatures that match any of the provided paths\n const propertySignatures = ast.propertySignatures.filter((signature) => paths.includes(signature.name.toString()));\n\n // If we found at least one matching property\n if (propertySignatures.length > 0) {\n // Create a new TypeLiteral with only the matching properties\n const narrowType = new SchemaAST.TypeLiteral(propertySignatures, []);\n return Schema.make(narrowType);\n }\n }\n\n return undefined;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ReadonlySignal, computed, effect, signal } from '@preact/signals-core';\n\nimport { Resource } from '@dxos/context';\nimport { Obj, Ref } from '@dxos/echo';\nimport {\n FormatEnum,\n type JsonProp,\n type JsonSchemaType,\n getSchema,\n getValue,\n setValue,\n toEffectSchema,\n} from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { ObjectId } from '@dxos/keys';\nimport { getSnapshot, isLiveObject } from '@dxos/live-object';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type Label } from '@dxos/react-ui';\nimport { formatForEditing, parseValue } from '@dxos/react-ui-form';\nimport {\n type DxGridAxisMeta,\n type DxGridPlanePosition,\n type DxGridPlaneRange,\n type DxGridPosition,\n} from '@dxos/react-ui-grid';\nimport {\n type DataType,\n type FieldSortType,\n ProjectionModel,\n type PropertyType,\n type ValidationError,\n validateSchema,\n} from '@dxos/schema';\n\nimport { Table } from '../types';\nimport { touch } from '../util';\nimport { extractTagIds } from '../util/tag';\n\nimport { type SelectionMode, SelectionModel } from './selection-model';\nimport { TableSorting } from './table-sorting';\n\n// Domain types for cell classification\nexport type TableCellType = 'standard' | 'draft' | 'header';\n\n// TODO(ZaymonFC): Use a common type?\nexport type ValidationResult = { valid: true } | { valid: false; error: string };\n\nexport type DraftRow<T extends TableRow = TableRow> = {\n data: T;\n valid: boolean;\n validationErrors: ValidationError[];\n};\n\n// TODO(burdon): Use schema types.\nexport type TableRow = Record<JsonProp, any> & { id: string };\n\nexport type TableRowAction = {\n id: string;\n label: Label;\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 InsertRowResult = 'draft' | 'final';\n\nexport type TableModelProps<T extends TableRow = TableRow> = {\n view: DataType.View;\n schema: JsonSchemaType;\n projection?: ProjectionModel;\n features?: Partial<TableFeatures>;\n sorting?: FieldSortType[];\n initialSelection?: string[];\n pinnedRows?: { top: number[]; bottom: number[] };\n rowActions?: TableRowAction[];\n onResolveSchema?: (typename: string) => Promise<JsonSchemaType>;\n onInsertRow?: (data?: any) => InsertRowResult;\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 _view: DataType.View;\n private readonly _projection: ProjectionModel;\n private _table?: Table.Table;\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?: (data?: any) => InsertRowResult;\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 _draftRows = signal<DraftRow<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 view,\n schema,\n projection,\n features = {},\n sorting = [],\n initialSelection = [],\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._view = view;\n this._projection = projection ?? new ProjectionModel(schema, view.projection);\n this._projection.normalizeView();\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, this._projection);\n\n if (sorting.length > 0) {\n const [sort] = sorting;\n this._sorting.setSort(sort.fieldId, sort.direction);\n }\n\n this._selection = new SelectionModel(\n this._sorting.sortedRows,\n this._features.selection.mode ?? 'multiple',\n initialSelection,\n () => this._onRowOrderChange?.(),\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(): string {\n return fullyQualifiedId(this._view);\n }\n\n public get view(): DataType.View {\n return this._view;\n }\n\n public get table(): Table.Table {\n invariant(this._table, 'Model not initialized');\n return this._table;\n }\n\n public get projection(): ProjectionModel {\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> {\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 const presentation = this._view.presentation.target ?? (await this._view.presentation.load());\n invariant(Obj.instanceOf(Table.Table, presentation));\n this._table = presentation;\n\n this.initializeColumnMeta();\n this.initializeEffects();\n await this._selection.open(this._ctx);\n }\n\n private initializeColumnMeta(): void {\n this._columnMeta = computed(() => {\n const fields = this._projection?.fields ?? [];\n const meta = Object.fromEntries(\n fields.map((field, index: number) => [index, { size: this.table.sizes[field.path] ?? 256, resizeable: true }]),\n );\n\n return {\n grid: meta,\n frozenColsStart: { 0: { size: 30, resizeable: false } },\n frozenColsEnd: { 0: { size: 32, 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._projection?.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 const draftRowsWatcher = effect(() => {\n touch(this._draftRows.value);\n // Notify grid that draft rows have changed\n this._onRowOrderChange?.();\n });\n this._ctx.onDispose(draftRowsWatcher);\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 /**\n * @reactive\n */\n public getDraftRowCount = (): number => this._draftRows.value.length;\n\n // TODO(ZaymonFC): Return .value instead of exposing the signal.\n public get draftRows(): ReadonlySignal<DraftRow<T>[]> {\n return this._draftRows;\n }\n\n /**\n * Checks if a specific field path has validation errors for a given draft row.\n * @param draftRowIndex - The index of the draft row to check\n * @param fieldPath - The path of the field to check for validation errors\n * @returns true if the field has validation errors, false otherwise\n */\n public hasDraftRowValidationError(draftRowIndex: number, fieldPath: string): boolean {\n if (draftRowIndex < 0 || draftRowIndex >= this._draftRows.value.length) {\n return false;\n }\n\n const draftRow = this._draftRows.value[draftRowIndex];\n const validationErrors = draftRow.validationErrors || [];\n return validationErrors.some((error) => error.path === fieldPath);\n }\n\n public getColumnCount = (): number => this._projection?.fields.length ?? 0;\n\n public insertRow = (): InsertRowResult => {\n const result = this._onInsertRow?.();\n if (result === 'draft' && this._draftRows.value.length === 0) {\n this.createDraftRow();\n }\n return result ?? 'final';\n };\n\n private createDraftRow(): void {\n if (!this._projection) {\n return;\n }\n\n // NOTE(ZaymonFC): This is initialized with id because it's required in all schemata?\n const draftData = { id: ObjectId.random() } as any as T;\n const validationErrors = this.validateDraftRowData(draftData);\n\n const draftRow: DraftRow<T> = {\n data: draftData,\n valid: validationErrors.length === 0,\n validationErrors,\n };\n\n this._draftRows.value = [...this._draftRows.value, draftRow];\n }\n\n private validateDraftRow(draftRowIndex: number): void {\n if (draftRowIndex < 0 || draftRowIndex >= this._draftRows.value.length) {\n return;\n }\n\n const draftRow = this._draftRows.value[draftRowIndex];\n const validationErrors = this.validateDraftRowData(draftRow.data);\n\n const updatedDraftRow = {\n ...draftRow,\n valid: validationErrors.length === 0,\n validationErrors,\n };\n\n const newDraftRows = [...this._draftRows.value];\n newDraftRows[draftRowIndex] = updatedDraftRow;\n this._draftRows.value = newDraftRows;\n }\n\n private validateDraftRowData(data: T): ValidationError[] {\n const schema = toEffectSchema(this._projection.baseSchema);\n return validateSchema(schema, data) || [];\n }\n\n public commitDraftRow = (draftRowIndex: number): boolean => {\n if (draftRowIndex < 0 || draftRowIndex >= this._draftRows.value.length) {\n return false;\n }\n\n const draftRow = this._draftRows.value[draftRowIndex];\n if (!draftRow.valid) {\n return false;\n }\n\n const insertRowResult = this._onInsertRow?.(draftRow.data);\n\n if (insertRowResult === 'final') {\n const newDraftRows = this._draftRows.value.filter((_, index) => index !== draftRowIndex);\n this._draftRows.value = newDraftRows;\n }\n\n return insertRowResult === 'final';\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 = (cell: DxGridPosition): any => {\n const { col, row, plane } = cell;\n const fields = this._projection?.fields ?? [];\n if (col < 0 || col >= fields.length) {\n return undefined;\n }\n\n const field = fields[col];\n let value: any;\n\n if (plane === 'frozenRowsEnd') {\n // Get data from draft row\n if (row >= 0 && row < this._draftRows.value.length) {\n value = getValue(this._draftRows.value[row].data, field.path);\n } else {\n return undefined;\n }\n } else {\n // Get data from regular row\n const dataIndex = this._sorting.getDataIndex(row);\n value = getValue(this._rows.value[dataIndex], field.path);\n }\n\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, plane }: DxGridPosition, value: any): Promise<ValidationResult> => {\n const fields = this._projection?.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 const transformedValue = editorTextToCellValue(props, value);\n\n const isDraftRow = plane === 'frozenRowsEnd';\n\n if (isDraftRow) {\n const isInvalidDraftRowIndex = row < 0 || row >= this._draftRows.value.length;\n if (isInvalidDraftRowIndex) {\n return { valid: false, error: 'Invalid draft row index' };\n }\n\n const draftRow = this._draftRows.value[row];\n const snapshot = { ...draftRow.data };\n setValue(snapshot, field.path, transformedValue);\n\n const validationErrors = this.validateDraftRowData(snapshot);\n // TODO(thure): These errors sometimes result in a useless message like “is missing” (what is missing?)\n if (validationErrors.length > 0) {\n const error = validationErrors.find((err) => err.path === field.path);\n if (error) {\n return { valid: false, error: error.message };\n }\n }\n return { valid: true };\n } else {\n const rowIdx = this._sorting.getDataIndex(row);\n const currentRow = this._rows.value[rowIdx];\n invariant(currentRow, 'Invalid row index');\n\n const snapshot = getSnapshot(currentRow);\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\n public setCellData = (cell: DxGridPosition, value: any): void => {\n const { col, row, plane } = cell;\n const fields = this._projection?.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 return;\n }\n\n if (plane === 'frozenRowsEnd') {\n // Update draft row data\n if (row >= 0 && row < this._draftRows.value.length) {\n setValue(this._draftRows.value[row].data, field.path, transformedValue);\n // Re-validate the draft row after the update\n this.validateDraftRow(row);\n }\n } else {\n // Update regular row data\n const rowIdx = this._sorting.getDataIndex(row);\n setValue(this._rows.value[rowIdx], field.path, transformedValue);\n }\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._projection?.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 * Gets the domain-appropriate cell type for a given cell position.\n * This abstracts away the low-level grid plane concepts and provides domain-specific types.\n * @param cell - The cell position to classify\n * @returns The domain-appropriate cell type\n */\n public getCellType(cell: DxGridPosition): TableCellType {\n switch (cell.plane) {\n case 'frozenRowsEnd':\n return 'draft';\n case 'frozenRowsStart':\n return 'header';\n case 'grid':\n default:\n return 'standard';\n }\n }\n\n /**\n * Convenience method to check if a cell is a draft cell.\n * @param cell - The cell position to check\n * @returns true if the cell is a draft cell, false otherwise\n */\n public isDraftCell(cell: DxGridPosition): boolean {\n return this.getCellType(cell) === 'draft';\n }\n\n //\n // Column Operations\n //\n\n public deleteColumn(fieldId: string): void {\n if (!this._projection) {\n return;\n }\n\n const field = this._projection?.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._projection?.fields ?? [];\n if (columnIndex < fields.length) {\n const newWidth = Math.max(0, width);\n const field = fields[columnIndex];\n if (field) {\n this.table.sizes[field.path] = 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\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 Ref.make(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 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 { type ReadonlySignal, type Signal, computed, effect, signal } from '@preact/signals-core';\n\nimport { Resource } from '@dxos/context';\n\nimport { touch } from '../util';\n\nimport { type TableRow } from './table-model';\n\nexport type SelectionMode = 'single' | 'multiple';\n\nexport class SelectionModel<T extends TableRow> extends Resource {\n private readonly _selection: Signal<Set<string>>;\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 _initialSelection: string[],\n private readonly _onSelectionChanged?: () => void,\n ) {\n super();\n this._selection = signal(new Set(this._initialSelection));\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 ReadonlySignal, type Signal, computed, signal } from '@preact/signals-core';\nimport orderBy from 'lodash.orderby';\n\nimport { FormatEnum, TypeEnum, getValue } from '@dxos/echo/internal';\nimport { formatForDisplay } from '@dxos/react-ui-form';\nimport type {\n DataType,\n FieldSortType,\n FieldType,\n ProjectionModel,\n PropertyType,\n SortDirectionType,\n} from '@dxos/schema';\n\nimport { type TableRow } from './table-model';\n\n// TODO(wittjosiah): Remove. Use ordering in queries instead.\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: DataType.View,\n private readonly _projection: ProjectionModel,\n ) {\n this._rows = rows;\n this._isDirty = computed(() => {\n const local = this._localSort.value;\n const viewSort = this._view.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.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.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._localSort.value !== undefined) {\n if (this._localSort.value.type === 'active') {\n this._view.sort = [this._localSort.value.sort];\n } else {\n this._view.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) {\n return this._rows.value;\n }\n\n const field = this._projection.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 2024 DXOS.org\n//\n\nimport { signal } from '@preact/signals-core';\nimport { type MutableRefObject, type RefObject } from 'react';\n\nexport type ColumnSettingsMode = { type: 'create' } | { type: 'edit'; fieldId: string };\n\nexport type ModalState =\n | { type: 'row'; rowIndex: number }\n | { type: 'column'; fieldId: string }\n | { type: 'refPanel'; targetId: string; typename: string }\n | { type: 'columnSettings'; mode: ColumnSettingsMode }\n | { type: 'closed' };\n\nexport class ModalController {\n private readonly _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 close = () => {\n this._state.value = { type: 'closed' };\n };\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { signal } from '@preact/signals-core';\nimport * as Predicate from 'effect/Predicate';\n\nimport { Obj } from '@dxos/echo';\nimport { FormatEnum, TypeEnum, getValue } from '@dxos/echo/internal';\nimport { cellClassesForFieldType, formatForDisplay } from '@dxos/react-ui-form';\nimport {\n type DxGridCellValue,\n type DxGridPlane,\n type DxGridPlaneCells,\n type DxGridPlaneRange,\n toPlaneCellIndex,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\nimport { type FieldType, VIEW_FIELD_LIMIT } from '@dxos/schema';\n\nimport { tableButtons, tableControls } from '../util';\n\nimport { type SelectionMode } from './selection-model';\nimport { type TableModel, type TableRow } from './table-model';\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 private fieldProjectionCache = new Map<string, ReturnType<typeof this.model.projection.getFieldProjection>>();\n\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 // Clear cache at the start of each render pass\n this.fieldProjectionCache.clear();\n\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 case 'frozenRowsEnd':\n cells = this.getDraftRowCells(range);\n break;\n case 'fixedEndStart':\n cells = this.getDraftIconCells(range);\n break;\n case 'fixedEndEnd':\n cells = this.getDraftActionCells(range);\n break;\n default:\n cells = {};\n }\n\n if (plane === 'grid' && this.model.features.dataEditable === false) {\n Object.values<DxGridCellValue>(cells).forEach((cell) => {\n cell.readonly = 'text-select';\n });\n }\n\n return cells;\n }\n\n /**\n * Gets a field projection, using cache if available within the current render pass.\n */\n private getFieldProjection(fieldId: string) {\n let projection = this.fieldProjectionCache.get(fieldId);\n if (!projection) {\n projection = this.model.projection.getFieldProjection(fieldId);\n this.fieldProjectionCache.set(fieldId, projection);\n }\n return projection;\n }\n\n private createDataCell(\n cells: DxGridPlaneCells,\n obj: T,\n field: FieldType,\n colIndex: number,\n displayIndex: number,\n ): void {\n const { props } = this.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(props);\n\n if (formatClasses) {\n classes.push(formatClasses);\n }\n\n const rowSelectionClasses = cellClassesForRowSelection(\n this.model.selection.isObjectSelected(obj),\n this.model.selection.selectionMode,\n );\n\n if (rowSelectionClasses) {\n classes.push(rowSelectionClasses);\n }\n\n cell.className = mx(classes);\n\n // Arrays.\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(Predicate.isNotNullable)\n .map((title) => {\n return `<span class=\"dx-tag\" 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 // References.\n if (props.format === FormatEnum.Ref && props.referenceSchema) {\n const targetObj = getValue(obj, field.path)?.target;\n if (targetObj) {\n const dxn = Obj.getDXN(targetObj)?.toString();\n cell.accessoryHtml = `<div role=\"none\" class=\"absolute inline-end-0 inset-block-0 p-[--dx-grid-cell-content-padding-block]\"><dx-anchor refId=${dxn} class=\"dx-button is-6 aspect-square min-bs-0\" data-dx-grid-action=\"accessory\"><dx-icon icon=\"ph--link-simple--regular\"/></dx-anchor></div>`;\n }\n }\n\n // Booleans.\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 // Single-Selects.\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 // Multi-Selects.\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 = tags;\n }\n }\n }\n\n const idx = toPlaneCellIndex({ col: colIndex, row: displayIndex });\n cells[idx] = cell;\n }\n\n private getMainGridCells(range: DxGridPlaneRange): DxGridPlaneCells {\n const cells: DxGridPlaneCells = {};\n const fields = this.model.projection?.fields ?? [];\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 this.createDataCell(cells, this.model.rows.value[row], field, col, row);\n }\n }\n\n return cells;\n }\n\n private getDraftRowCells(range: DxGridPlaneRange): DxGridPlaneCells {\n const cells: DxGridPlaneCells = {};\n const fields = this.model.projection?.fields ?? [];\n const draftRows = this.model.draftRows.value;\n\n // Return cells of the CTA row if no draft row is active\n if (draftRows.length === 0) {\n for (let col = range.start.col; col <= range.end.col && col < fields.length; col++) {\n cells[toPlaneCellIndex({ col, row: 0 })] = {\n value: '',\n readonly: true,\n className: 'dx-grid__row--cta__cell',\n };\n }\n } else {\n for (let row = range.start.row; row <= range.end.row && row < draftRows.length; row++) {\n const draftRow = draftRows[row];\n for (let col = range.start.col; col <= range.end.col && col < fields.length; col++) {\n const cellIndex = toPlaneCellIndex({ col, row });\n const field = fields[col];\n if (!field) {\n continue;\n }\n\n this.createDataCell(cells, draftRow.data, field, col, row);\n\n if (this.model.hasDraftRowValidationError(row, field.path)) {\n const cellValue = cells[cellIndex];\n if (cellValue) {\n const existingClasses = cellValue.className || '';\n const draftClasses = 'dx-grid__cell--flagged';\n cellValue.className = existingClasses ? `${existingClasses} ${draftClasses}` : draftClasses;\n }\n }\n }\n }\n }\n\n return cells;\n }\n\n private getHeaderCells(range: DxGridPlaneRange): DxGridPlaneCells {\n const cells: DxGridPlaneCells = {};\n const fields = this.model.projection?.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: '',\n resizeHandle: 'col',\n accessoryHtml: `\n <span class=\"grow min-is-0 truncate\">${props.title ?? field.path}</span>\n ${direction !== undefined ? tableButtons.sort.render({ fieldId: field.id, direction }) : ''}\n ${tableButtons.columnSettings.render({ fieldId: field.id })}\n `,\n className: '!bg-toolbarSurface !text-description [&>div]:flex [&>div]:items-stretch',\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.projection?.fields?.length ?? 0) >= VIEW_FIELD_LIMIT,\n })\n : undefined,\n className: '!bg-toolbarSurface',\n readonly: true,\n value: '',\n },\n };\n }\n\n private getDraftActionCells(range: DxGridPlaneRange): DxGridPlaneCells {\n const cells: DxGridPlaneCells = {};\n const draftRows = this.model.draftRows.value;\n\n // Return cells of the CTA row if no draft row is active\n if (draftRows.length === 0) {\n cells[toPlaneCellIndex({ col: 0, row: 0 })] = {\n value: '',\n className: 'dx-grid__row--cta__cell',\n readonly: true,\n };\n } else {\n for (let row = range.start.row; row <= range.end.row && row < draftRows.length; row++) {\n const draftRow = draftRows[row];\n const disabled = !draftRow.valid;\n\n cells[toPlaneCellIndex({ col: 0, row })] = {\n value: '',\n readonly: true,\n accessoryHtml: tableButtons.saveDraftRow.render({ rowIndex: row, disabled }),\n };\n }\n }\n\n return cells;\n }\n\n private getDraftIconCells(range: DxGridPlaneRange): DxGridPlaneCells {\n const cells: DxGridPlaneCells = {};\n const draftRows = this.model.draftRows.value;\n\n for (let row = range.start.row; row <= range.end.row; row++) {\n cells[toPlaneCellIndex({ col: 0, row })] = {\n value: '',\n readonly: true,\n accessoryHtml: '<dx-icon icon=\"ph--plus--regular\" class=\"contents\"></dx-icon>',\n className: mx('[&>div]:grid [&>div]:place-content-center', draftRows.length < 1 && 'dx-grid__row--cta__cell'),\n };\n }\n\n return cells;\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 return ['!bg-currentRelated dx-grid__cell--no-focus-unfurl hover:bg-hoverSurface !cursor-pointer'];\n case 'multiple':\n return ['!bg-gridCellSelected'];\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { effect } from '@preact/signals-core';\nimport orderBy from 'lodash.orderby';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { type JsonSchemaType } from '@dxos/echo/internal';\nimport { type Live } from '@dxos/live-object';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { useSelected, useSelectionActions } from '@dxos/react-ui-attention';\nimport { type DataType, type ProjectionModel } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { TableModel, type TableModelProps, type TableRow, type TableRowAction } from '../model';\n\nexport type UseTableModelParams<T extends TableRow = TableRow> = {\n view?: DataType.View;\n schema?: JsonSchemaType;\n projection?: ProjectionModel;\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 view,\n schema,\n projection,\n rows,\n rowActions,\n features,\n onSelectionChanged,\n onRowAction,\n ...props\n}: UseTableModelParams<T>): TableModel<T> | undefined => {\n const selected = useSelected(view && fullyQualifiedId(view), 'multi');\n const initialSelection = useMemo(() => selected, [view]);\n\n const [model, setModel] = useState<TableModel<T>>();\n useEffect(() => {\n if (!view || !schema) {\n return;\n }\n\n let model: TableModel<T> | undefined;\n const t = setTimeout(async () => {\n model = new TableModel<T>({\n view,\n schema,\n projection,\n features,\n rowActions,\n initialSelection,\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 }, [view, schema, projection, features, rowActions, initialSelection]); // 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([model?.id].filter(isNonNullable));\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 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport { useCallback } from 'react';\n\nimport { type Space } from '@dxos/client/echo';\nimport { Obj } from '@dxos/echo';\n\nimport { type InsertRowResult } from '../model';\n\nexport type UseAddRowParams = {\n space?: Space;\n schema?: Schema.Schema.AnyNoContext;\n};\n\n/**\n * Hook that provides a safe row creation function that handles schema validation failures.\n * Returns a callback that attempts to create an object and returns boolean success/failure.\n * Can accept optional data to create objects with specific content (used for committing draft rows).\n */\nexport const useAddRow = ({ space, schema }: UseAddRowParams) => {\n return useCallback(\n (data?: any): InsertRowResult => {\n if (space && schema) {\n try {\n space.db.add(Obj.make(schema, data ?? {}));\n return 'final';\n } catch (error) {\n return 'draft';\n }\n }\n return 'final';\n },\n [space, schema],\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Filter", "Obj", "Query", "getTypename", "toJsonSchema", "ProjectionModel", "createView", "getSchemaFromPropertyDefinitions", "getBaseSchema", "typename", "properties", "jsonSchema", "schema", "getSchemaFromPropertyDefinitions", "getTypename", "toJsonSchema", "Error", "makeDynamicTable", "table", "Obj", "make", "Table", "sizes", "view", "createView", "query", "Query", "select", "Filter", "everything", "presentation", "fields", "map", "property", "name", "projection", "ProjectionModel", "normalizeView", "setProperties", "field", "find", "path", "size", "undefined", "title", "fieldProjection", "getFieldProjection", "id", "setFieldProjection", "props", "sort", "fieldId", "direction", "touch", "value", "BUTTON_IDENTIFIERS", "columnSettings", "newColumn", "referencedCell", "rowMenu", "saveDraftRow", "sort", "createButton", "attr", "data", "disabled", "icon", "testId", "type", "_type", "dataAttrs", "Object", "entries", "map", "k", "v", "join", "addColumnButton", "render", "getData", "_el", "columnSettingsButton", "fieldId", "el", "getAttribute", "rowMenuButton", "rowIndex", "toString", "Number", "sortButton", "direction", "saveDraftRowButton", "tableButtons", "addColumn", "accessoryHandlesPointerdownAttrs", "CONTROL_IDENTIFIERS", "checkbox", "switch", "BASE_CLASSES", "renderAttributes", "data", "Object", "entries", "map", "k", "v", "join", "renderInput", "baseClass", "attrs", "checked", "disabled", "preventToggle", "testId", "CheckboxStory", "rowIndex", "header", "toString", "SwitchStory", "colIndex", "accessoryHandlesPointerdownAttrs", "tableControls", "attr", "render", "getData", "el", "type", "Number", "getAttribute", "hasAttribute", "Schema", "SchemaAST", "narrowSchema", "schema", "paths", "ast", "isTypeLiteral", "propertySignatures", "filter", "signature", "includes", "name", "toString", "length", "narrowType", "TypeLiteral", "make", "undefined", "computed", "effect", "signal", "Resource", "Obj", "Ref", "FormatEnum", "getSchema", "getValue", "setValue", "toEffectSchema", "invariant", "ObjectId", "getSnapshot", "isLiveObject", "fullyQualifiedId", "formatForEditing", "parseValue", "ProjectionModel", "validateSchema", "TAG_PATTERN_REGEX", "extractTagIds", "value", "undefined", "ids", "match", "exec", "push", "length", "computed", "effect", "signal", "Resource", "SelectionModel", "Resource", "_open", "selectionWatcher", "effect", "touch", "_selection", "value", "_onSelectionChanged", "_ctx", "onDispose", "selection", "hasSelection", "_hasSelection", "allRowsSeleted", "_allSelected", "selectionMode", "_selectionMode", "_rows", "_initialSelection", "_validSelectedIds", "getSelectedRows", "isRowIndexSelected", "isObjectSelected", "toggleSelectionForRowIndex", "setSelection", "computed", "rows", "Set", "validIds", "map", "row", "id", "filter", "has", "size", "length", "every", "selectedIds", "rowIndex", "object", "newSelection", "delete", "clear", "add", "mode", "signal", "computed", "signal", "orderBy", "FormatEnum", "TypeEnum", "getValue", "formatForDisplay", "TableSorting", "sorting", "local", "_localSort", "value", "type", "undefined", "sort", "_view", "isDirty", "_isDirty", "getDataIndex", "displayIndex", "_displayToDataIndex", "get", "setSort", "fieldId", "direction", "toggleSort", "clearSort", "save", "initialiseSortedRows", "computed", "clear", "_rows", "field", "_projection", "fields", "find", "f", "id", "props", "getFieldProjection", "dataWithIndices", "map", "item", "index", "sortValue", "getSortValue", "isEmpty", "TypeEnum", "Boolean", "ordered", "orderBy", "forEach", "dataIndex", "set", "format", "getValue", "path", "Number", "FormatEnum", "SingleSelect", "options", "option", "indexOf", "Ref", "referencePath", "refValue", "target", "formatForDisplay", "rows", "_define_property", "sortedRows", "Map", "signal", "viewSort", "defaultFeatures", "selection", "enabled", "mode", "dataEditable", "schemaEditable", "TableModel", "Resource", "id", "fullyQualifiedId", "_view", "view", "table", "invariant", "_table", "projection", "_projection", "rows", "sorting", "sortedRows", "features", "_features", "_sorting", "getRowAt", "displayIndex", "value", "length", "undefined", "pinnedRows", "_pinnedRows", "columnMeta", "_columnMeta", "_selection", "isViewDirty", "isDirty", "rowActions", "_rowActions", "_open", "presentation", "target", "load", "Obj", "instanceOf", "Table", "initializeColumnMeta", "initializeEffects", "open", "_ctx", "computed", "fields", "meta", "Object", "fromEntries", "map", "field", "index", "size", "sizes", "path", "resizeable", "grid", "frozenColsStart", "frozenColsEnd", "rowOrderWatcher", "effect", "touch", "_onRowOrderChange", "onDispose", "rowEffectManager", "start", "end", "_visibleRange", "rowEffects", "row", "push", "obj", "forEach", "getValue", "_onCellUpdate", "col", "plane", "cleanup", "draftRowsWatcher", "_draftRows", "draftRows", "hasDraftRowValidationError", "draftRowIndex", "fieldPath", "draftRow", "validationErrors", "some", "error", "createDraftRow", "draftData", "ObjectId", "random", "validateDraftRowData", "data", "valid", "validateDraftRow", "updatedDraftRow", "newDraftRows", "schema", "toEffectSchema", "baseSchema", "validateSchema", "updateCellData", "update", "dataRow", "getDataIndex", "_rows", "updatedValue", "setValue", "getCellType", "cell", "isDraftCell", "deleteColumn", "fieldId", "find", "_onDeleteColumn", "setColumnWidth", "columnIndex", "width", "newWidth", "Math", "max", "pinRow", "rowIndex", "side", "unpinRow", "top", "filter", "bottom", "saveView", "save", "initialSelection", "onCellUpdate", "onDeleteColumn", "onDeleteRows", "onInsertRow", "onRowOrderChange", "onRowAction", "_define_property", "signal", "_onInsertRow", "_onDeleteRows", "_onRowAction", "setRows", "getRowCount", "getDraftRowCount", "getColumnCount", "insertRow", "result", "commitDraftRow", "insertRowResult", "_", "deleteRow", "objectsToDelete", "hasSelection", "selectedRows", "getSelectedRows", "handleRowAction", "actionId", "getCellData", "dataIndex", "props", "getFieldProjection", "format", "FormatEnum", "Ref", "referencePath", "formatForEditing", "type", "validateCellData", "transformedValue", "editorTextToCellValue", "isDraftRow", "isInvalidDraftRowIndex", "snapshot", "err", "message", "rowIdx", "currentRow", "getSnapshot", "getSchema", "validationResult", "setCellData", "isLiveObject", "ProjectionModel", "normalizeView", "TableSorting", "sort", "setSort", "direction", "SelectionModel", "make", "SingleSelect", "ids", "extractTagIds", "MultiSelect", "parseValue", "signal", "ModalController", "state", "_state", "trigger", "_triggerRef", "_define_property", "signal", "type", "current", "setTrigger", "showRowMenu", "rowIndex", "value", "showColumnMenu", "fieldId", "showColumnCreator", "mode", "showReferencePanel", "targetId", "schemaId", "typename", "openColumnSettings", "requestAnimationFrame", "close", "signal", "Predicate", "Obj", "FormatEnum", "TypeEnum", "getValue", "cellClassesForFieldType", "formatForDisplay", "toPlaneCellIndex", "mx", "VIEW_FIELD_LIMIT", "TablePresentation", "getCells", "range", "plane", "fieldProjectionCache", "clear", "cells", "_visibleRange", "value", "getMainGridCells", "getHeaderCells", "getSelectionColumnCells", "getActionColumnCells", "getSelectAllCell", "getNewColumnCell", "getDraftRowCells", "getDraftIconCells", "getDraftActionCells", "model", "features", "dataEditable", "Object", "values", "forEach", "cell", "readonly", "getFieldProjection", "fieldId", "projection", "get", "set", "createDataCell", "obj", "field", "colIndex", "displayIndex", "props", "id", "getValue", "path", "type", "format", "FormatEnum", "Boolean", "SingleSelect", "MultiSelect", "Ref", "referencePath", "target", "formatForDisplay", "classes", "formatClasses", "cellClassesForFieldType", "push", "rowSelectionClasses", "cellClassesForRowSelection", "selection", "isObjectSelected", "selectionMode", "className", "mx", "TypeEnum", "Array", "targetArray", "isArray", "getLabel", "undefined", "String", "name", "tags", "map", "filter", "isNotNullable", "title", "join", "accessoryHtml", "referenceSchema", "targetObj", "dxn", "Obj", "getDXN", "toString", "tableControls", "switch", "render", "rowIndex", "checked", "options", "option", "find", "o", "color", "length", "idx", "toPlaneCellIndex", "col", "row", "fields", "start", "end", "getRowCount", "rows", "draftRows", "draftRow", "cellIndex", "data", "hasDraftRowValidationError", "cellValue", "existingClasses", "draftClasses", "sorting", "direction", "resizeHandle", "tableButtons", "sort", "columnSettings", "isSelected", "isRowIndexSelected", "checkbox", "rowMenu", "enabled", "header", "allRowsSeleted", "schemaEditable", "addColumn", "disabled", "VIEW_FIELD_LIMIT", "valid", "saveDraftRow", "signal", "_define_property", "Map", "selected", "effect", "orderBy", "useEffect", "useMemo", "useState", "fullyQualifiedId", "useSelected", "useSelectionActions", "isNonNullable", "useTableModel", "view", "schema", "projection", "rows", "rowActions", "features", "onSelectionChanged", "onRowAction", "props", "selected", "useSelected", "fullyQualifiedId", "initialSelection", "useMemo", "model", "setModel", "useState", "useEffect", "t", "setTimeout", "TableModel", "open", "clearTimeout", "close", "sortedRows", "orderBy", "row", "String", "id", "setRows", "multiSelect", "clear", "useSelectionActions", "filter", "isNonNullable", "unsubscribe", "effect", "selectedItems", "selection", "value", "useCallback", "Obj", "useAddRow", "space", "schema", "useCallback", "data", "db", "add", "Obj", "make", "error"]
7
+ }