@dxos/react-ui-table 0.8.4-main.dedc0f3 → 0.8.4-main.e098934
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-GPZSXPSA.mjs → chunk-BBXDTWCX.mjs} +3 -3
- package/dist/lib/browser/chunk-BBXDTWCX.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +1 -1
- package/dist/lib/node-esm/{chunk-XUD6W42C.mjs → chunk-RNQDU7IQ.mjs} +3 -3
- package/dist/lib/node-esm/chunk-RNQDU7IQ.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +37 -37
- package/src/model/table-model.test.ts +6 -1
- package/src/model/table-presentation.test.ts +6 -1
- package/src/util/dynamic-table.ts +2 -2
- package/dist/lib/browser/chunk-GPZSXPSA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XUD6W42C.mjs.map +0 -7
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-63UUF4IG.mjs";
|
|
4
4
|
|
|
5
5
|
// src/util/dynamic-table.ts
|
|
6
|
-
import { Obj } from "@dxos/echo";
|
|
6
|
+
import { Filter, Obj, Query } from "@dxos/echo";
|
|
7
7
|
import { getTypename, toJsonSchema } from "@dxos/echo-schema";
|
|
8
8
|
import { ProjectionModel, createView, getSchemaFromPropertyDefinitions } from "@dxos/schema";
|
|
9
9
|
var getBaseSchema = ({ typename, properties, jsonSchema, schema }) => {
|
|
@@ -32,7 +32,7 @@ var makeDynamicTable = ({ typename, jsonSchema, properties }) => {
|
|
|
32
32
|
sizes: {}
|
|
33
33
|
});
|
|
34
34
|
const view = createView({
|
|
35
|
-
typename,
|
|
35
|
+
query: Query.select(Filter.typename(typename)),
|
|
36
36
|
jsonSchema,
|
|
37
37
|
presentation: table,
|
|
38
38
|
...properties && {
|
|
@@ -1819,4 +1819,4 @@ export {
|
|
|
1819
1819
|
useTableModel,
|
|
1820
1820
|
useAddRow
|
|
1821
1821
|
};
|
|
1822
|
-
//# sourceMappingURL=chunk-
|
|
1822
|
+
//# sourceMappingURL=chunk-BBXDTWCX.mjs.map
|
|
@@ -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 Schema } from 'effect';\n\nimport { Filter, Obj, Query } from '@dxos/echo';\nimport { getTypename, toJsonSchema } from '@dxos/echo-schema';\nimport type { JsonSchemaType } from '@dxos/echo-schema';\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 typename,\n jsonSchema,\n properties,\n}: {\n typename: string;\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.typename(typename)),\n jsonSchema,\n presentation: table,\n ...(properties && { fields: properties.map((property) => property.name) }),\n });\n\n const projection = new ProjectionModel(jsonSchema, view.projection);\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 { Schema } from 'effect';\nimport { TypeLiteral, isTypeLiteral } 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 { 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-schema';\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\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-schema';\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\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 { Obj } from '@dxos/echo';\nimport { FormatEnum, TypeEnum, getValue } from '@dxos/echo-schema';\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(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 = `<dx-anchor refId=${dxn} class=\"dx-button is-6 pli-[3px] pbe-[2px] min-bs-0 absolute inline-end-2 block-start-[.2rem]\" data-dx-grid-action=\"accessory\"><dx-icon icon=\"ph--link-simple--regular\"/></dx-anchor>`;\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 // TODO(ZaymonFC): @thure, do we need a grid version of 'currentRelated'?\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-schema';\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 Schema } from 'effect';\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", "presentation", "fields", "map", "property", "name", "projection", "ProjectionModel", "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", "TypeLiteral", "isTypeLiteral", "narrowSchema", "schema", "paths", "ast", "isTypeLiteral", "propertySignatures", "filter", "signature", "includes", "name", "toString", "length", "narrowType", "TypeLiteral", "Schema", "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", "TableSorting", "sort", "setSort", "direction", "SelectionModel", "make", "SingleSelect", "ids", "extractTagIds", "MultiSelect", "parseValue", "signal", "log", "ModalController", "state", "_state", "trigger", "_triggerRef", "_define_property", "type", "current", "setTrigger", "showRowMenu", "rowIndex", "value", "showColumnMenu", "fieldId", "showColumnCreator", "mode", "showReferencePanel", "targetId", "schemaId", "typename", "openColumnSettings", "requestAnimationFrame", "openCreateRef", "anchorCell", "initialValues", "onCreate", "warn", "close", "signal", "isNotNullable", "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
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/translations.ts":{"bytes":4073,"imports":[],"format":"esm"},"src/types/schema.ts":{"bytes":7254,"imports":[{"path":"effect","kind":"import-statement","external":true},{"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/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"format":"esm"},"src/types/index.ts":{"bytes":506,"imports":[{"path":"src/types/schema.ts","kind":"import-statement","original":"./schema"}],"format":"esm"},"src/util/dynamic-table.ts":{"bytes":9693,"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":"src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"src/util/signals.ts":{"bytes":866,"imports":[],"format":"esm"},"src/util/table-buttons.ts":{"bytes":14540,"imports":[],"format":"esm"},"src/util/table-controls.ts":{"bytes":9201,"imports":[{"path":"@dxos/lit-grid","kind":"import-statement","external":true}],"format":"esm"},"src/util/schema.ts":{"bytes":4007,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"effect/SchemaAST","kind":"import-statement","external":true}],"format":"esm"},"src/util/index.ts":{"bytes":851,"imports":[{"path":"src/util/dynamic-table.ts","kind":"import-statement","original":"./dynamic-table"},{"path":"src/util/signals.ts","kind":"import-statement","original":"./signals"},{"path":"src/util/table-buttons.ts","kind":"import-statement","original":"./table-buttons"},{"path":"src/util/table-controls.ts","kind":"import-statement","original":"./table-controls"},{"path":"src/util/schema.ts","kind":"import-statement","original":"./schema"}],"format":"esm"},"src/util/tag.ts":{"bytes":2842,"imports":[],"format":"esm"},"src/model/selection-model.ts":{"bytes":13092,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"src/model/table-sorting.ts":{"bytes":23534,"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"},"src/model/table-model.ts":{"bytes":73115,"imports":[{"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/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/util/index.ts","kind":"import-statement","original":"../util"},{"path":"src/util/tag.ts","kind":"import-statement","original":"../util/tag"},{"path":"src/model/selection-model.ts","kind":"import-statement","original":"./selection-model"},{"path":"src/model/table-sorting.ts","kind":"import-statement","original":"./table-sorting"}],"format":"esm"},"src/model/modal-controller.ts":{"bytes":9240,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/model/table-presentation.ts":{"bytes":56847,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"effect/Predicate","kind":"import-statement","external":true},{"path":"@dxos/echo","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":"src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"src/model/index.ts":{"bytes":768,"imports":[{"path":"src/model/table-model.ts","kind":"import-statement","original":"./table-model"},{"path":"src/model/modal-controller.ts","kind":"import-statement","original":"./modal-controller"},{"path":"src/model/table-presentation.ts","kind":"import-statement","original":"./table-presentation"}],"format":"esm"},"src/components/TableCellEditor/CellValidationMessage.tsx":{"bytes":4390,"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"},"src/components/TableCellEditor/FormCellEditor.tsx":{"bytes":23831,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","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-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":"@dxos/util","kind":"import-statement","external":true},{"path":"src/translations.ts","kind":"import-statement","original":"../../translations"},{"path":"src/util/index.ts","kind":"import-statement","original":"../../util"}],"format":"esm"},"src/components/TableCellEditor/TableCellEditor.tsx":{"bytes":39351,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","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-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":"src/components/TableCellEditor/CellValidationMessage.tsx","kind":"import-statement","original":"./CellValidationMessage"},{"path":"src/components/TableCellEditor/FormCellEditor.tsx","kind":"import-statement","original":"./FormCellEditor"}],"format":"esm"},"src/components/TableCellEditor/index.ts":{"bytes":499,"imports":[{"path":"src/components/TableCellEditor/TableCellEditor.tsx","kind":"import-statement","original":"./TableCellEditor"}],"format":"esm"},"src/components/Table/ColumnActionsMenu.tsx":{"bytes":8691,"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":"src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"src/components/Table/ColumnSettings.tsx":{"bytes":8958,"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"},"src/components/Table/CreateRefPanel.tsx":{"bytes":11370,"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/echo","kind":"import-statement","external":true},{"path":"@dxos/live-object","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/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"},"src/components/Table/RowActionsMenu.tsx":{"bytes":6292,"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":"src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"src/components/Table/Table.tsx":{"bytes":49171,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","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-grid","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"src/model/index.ts","kind":"import-statement","original":"../../model"},{"path":"src/util/index.ts","kind":"import-statement","original":"../../util"},{"path":"src/components/TableCellEditor/index.ts","kind":"import-statement","original":"../TableCellEditor"},{"path":"src/components/Table/ColumnActionsMenu.tsx","kind":"import-statement","original":"./ColumnActionsMenu"},{"path":"src/components/Table/ColumnSettings.tsx","kind":"import-statement","original":"./ColumnSettings"},{"path":"src/components/Table/CreateRefPanel.tsx","kind":"import-statement","original":"./CreateRefPanel"},{"path":"src/components/Table/RowActionsMenu.tsx","kind":"import-statement","original":"./RowActionsMenu"}],"format":"esm"},"src/hooks/useTableModel.ts":{"bytes":10156,"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":"src/model/index.ts","kind":"import-statement","original":"../model"}],"format":"esm"},"src/hooks/useAddRow.ts":{"bytes":3047,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/index.ts":{"bytes":565,"imports":[{"path":"src/hooks/useTableModel.ts","kind":"import-statement","original":"./useTableModel"},{"path":"src/hooks/useAddRow.ts","kind":"import-statement","original":"./useAddRow"}],"format":"esm"},"src/components/Table/DynamicTable.tsx":{"bytes":10758,"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":"src/hooks/index.ts","kind":"import-statement","original":"../../hooks"},{"path":"src/model/index.ts","kind":"import-statement","original":"../../model"},{"path":"src/util/index.ts","kind":"import-statement","original":"../../util"},{"path":"src/components/Table/Table.tsx","kind":"import-statement","original":"./Table"}],"format":"esm"},"src/components/Table/index.ts":{"bytes":563,"imports":[{"path":"src/components/Table/Table.tsx","kind":"import-statement","original":"./Table"},{"path":"src/components/Table/DynamicTable.tsx","kind":"import-statement","original":"./DynamicTable"}],"format":"esm"},"src/components/TableToolbar/TableToolbar.tsx":{"bytes":9252,"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":"src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"src/components/TableToolbar/index.ts":{"bytes":489,"imports":[{"path":"src/components/TableToolbar/TableToolbar.tsx","kind":"import-statement","original":"./TableToolbar"}],"format":"esm"},"src/components/index.ts":{"bytes":557,"imports":[{"path":"src/components/Table/index.ts","kind":"import-statement","original":"./Table"},{"path":"src/components/TableToolbar/index.ts","kind":"import-statement","original":"./TableToolbar"}],"format":"esm"},"src/index.ts":{"bytes":961,"imports":[{"path":"src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"src/model/index.ts","kind":"import-statement","original":"./model"},{"path":"src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/testing/useTestTableModel.ts":{"bytes":12840,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/plugin-search","kind":"import-statement","external":true},{"path":"@dxos/random","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/react-client/testing","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/hooks/index.ts","kind":"import-statement","original":"../hooks"},{"path":"src/model/index.ts","kind":"import-statement","original":"../model"}],"format":"esm"},"src/testing/index.ts":{"bytes":486,"imports":[{"path":"src/testing/useTestTableModel.ts","kind":"import-statement","original":"./useTestTableModel"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":88249},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-GPZSXPSA.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-63UUF4IG.mjs","kind":"import-statement"},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","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-grid","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":"@codemirror/view","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","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-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","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-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":"@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/echo","kind":"import-statement","external":true},{"path":"@dxos/live-object","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/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/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":"@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","TableToolbar","cellClassesForRowSelection","getBaseSchema","makeDynamicTable","narrowSchema","tableButtons","tableControls","touch","translations","useAddRow","useTableModel"],"entryPoint":"src/index.ts","inputs":{"src/translations.ts":{"bytesInOutput":1169},"src/components/Table/Table.tsx":{"bytesInOutput":11658},"src/components/TableCellEditor/TableCellEditor.tsx":{"bytesInOutput":10207},"src/components/TableCellEditor/CellValidationMessage.tsx":{"bytesInOutput":1117},"src/components/TableCellEditor/FormCellEditor.tsx":{"bytesInOutput":6418},"src/components/TableCellEditor/index.ts":{"bytesInOutput":0},"src/components/Table/ColumnActionsMenu.tsx":{"bytesInOutput":2329},"src/components/Table/ColumnSettings.tsx":{"bytesInOutput":2437},"src/components/Table/CreateRefPanel.tsx":{"bytesInOutput":3066},"src/components/Table/RowActionsMenu.tsx":{"bytesInOutput":1605},"src/components/Table/index.ts":{"bytesInOutput":0},"src/components/Table/DynamicTable.tsx":{"bytesInOutput":2221},"src/components/index.ts":{"bytesInOutput":0},"src/components/TableToolbar/TableToolbar.tsx":{"bytesInOutput":2088},"src/components/TableToolbar/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0}},"bytes":45649},"dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6934},"dist/lib/browser/testing/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-GPZSXPSA.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-63UUF4IG.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/plugin-search","kind":"import-statement","external":true},{"path":"@dxos/random","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/react-client/testing","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["useTestTableModel"],"entryPoint":"src/testing/index.ts","inputs":{"src/testing/useTestTableModel.ts":{"bytesInOutput":3017},"src/testing/index.ts":{"bytesInOutput":0}},"bytes":3244},"dist/lib/browser/chunk-GPZSXPSA.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":112590},"dist/lib/browser/chunk-GPZSXPSA.mjs":{"imports":[{"path":"dist/lib/browser/chunk-63UUF4IG.mjs","kind":"import-statement"},{"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":"@dxos/lit-grid","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":"@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/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","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":"@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","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":"@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":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true}],"exports":["BUTTON_IDENTIFIERS","CONTROL_IDENTIFIERS","CheckboxStory","ModalController","SwitchStory","TableModel","TablePresentation","cellClassesForRowSelection","getBaseSchema","makeDynamicTable","narrowSchema","tableButtons","tableControls","touch","useAddRow","useTableModel"],"inputs":{"src/util/dynamic-table.ts":{"bytesInOutput":2063},"src/util/signals.ts":{"bytesInOutput":30},"src/util/table-buttons.ts":{"bytesInOutput":3500},"src/util/table-controls.ts":{"bytesInOutput":2045},"src/util/schema.ts":{"bytesInOutput":486},"src/util/index.ts":{"bytesInOutput":0},"src/model/table-model.ts":{"bytesInOutput":18712},"src/util/tag.ts":{"bytesInOutput":334},"src/model/selection-model.ts":{"bytesInOutput":3596},"src/model/table-sorting.ts":{"bytesInOutput":4966},"src/model/modal-controller.ts":{"bytesInOutput":2531},"src/model/table-presentation.ts":{"bytesInOutput":14203},"src/model/index.ts":{"bytesInOutput":0},"src/hooks/useTableModel.ts":{"bytesInOutput":2224},"src/hooks/useAddRow.ts":{"bytesInOutput":389},"src/hooks/index.ts":{"bytesInOutput":0}},"bytes":55886},"dist/lib/browser/types/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/types/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-63UUF4IG.mjs","kind":"import-statement"}],"exports":["Table"],"entryPoint":"src/types/index.ts","inputs":{},"bytes":131},"dist/lib/browser/chunk-63UUF4IG.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":4065},"dist/lib/browser/chunk-63UUF4IG.mjs":{"imports":[{"path":"effect","kind":"import-statement","external":true},{"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/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["schema_exports"],"inputs":{"src/types/schema.ts":{"bytesInOutput":1560},"src/types/index.ts":{"bytesInOutput":0}},"bytes":1825}}}
|
|
1
|
+
{"inputs":{"src/translations.ts":{"bytes":4073,"imports":[],"format":"esm"},"src/types/schema.ts":{"bytes":7254,"imports":[{"path":"effect","kind":"import-statement","external":true},{"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/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"format":"esm"},"src/types/index.ts":{"bytes":506,"imports":[{"path":"src/types/schema.ts","kind":"import-statement","original":"./schema"}],"format":"esm"},"src/util/dynamic-table.ts":{"bytes":9954,"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":"src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"src/util/signals.ts":{"bytes":866,"imports":[],"format":"esm"},"src/util/table-buttons.ts":{"bytes":14540,"imports":[],"format":"esm"},"src/util/table-controls.ts":{"bytes":9201,"imports":[{"path":"@dxos/lit-grid","kind":"import-statement","external":true}],"format":"esm"},"src/util/schema.ts":{"bytes":4007,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"effect/SchemaAST","kind":"import-statement","external":true}],"format":"esm"},"src/util/index.ts":{"bytes":851,"imports":[{"path":"src/util/dynamic-table.ts","kind":"import-statement","original":"./dynamic-table"},{"path":"src/util/signals.ts","kind":"import-statement","original":"./signals"},{"path":"src/util/table-buttons.ts","kind":"import-statement","original":"./table-buttons"},{"path":"src/util/table-controls.ts","kind":"import-statement","original":"./table-controls"},{"path":"src/util/schema.ts","kind":"import-statement","original":"./schema"}],"format":"esm"},"src/util/tag.ts":{"bytes":2842,"imports":[],"format":"esm"},"src/model/selection-model.ts":{"bytes":13092,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"src/model/table-sorting.ts":{"bytes":23534,"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"},"src/model/table-model.ts":{"bytes":73115,"imports":[{"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/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/util/index.ts","kind":"import-statement","original":"../util"},{"path":"src/util/tag.ts","kind":"import-statement","original":"../util/tag"},{"path":"src/model/selection-model.ts","kind":"import-statement","original":"./selection-model"},{"path":"src/model/table-sorting.ts","kind":"import-statement","original":"./table-sorting"}],"format":"esm"},"src/model/modal-controller.ts":{"bytes":9240,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/model/table-presentation.ts":{"bytes":56847,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"effect/Predicate","kind":"import-statement","external":true},{"path":"@dxos/echo","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":"src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"src/model/index.ts":{"bytes":768,"imports":[{"path":"src/model/table-model.ts","kind":"import-statement","original":"./table-model"},{"path":"src/model/modal-controller.ts","kind":"import-statement","original":"./modal-controller"},{"path":"src/model/table-presentation.ts","kind":"import-statement","original":"./table-presentation"}],"format":"esm"},"src/components/TableCellEditor/CellValidationMessage.tsx":{"bytes":4390,"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"},"src/components/TableCellEditor/FormCellEditor.tsx":{"bytes":23831,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","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-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":"@dxos/util","kind":"import-statement","external":true},{"path":"src/translations.ts","kind":"import-statement","original":"../../translations"},{"path":"src/util/index.ts","kind":"import-statement","original":"../../util"}],"format":"esm"},"src/components/TableCellEditor/TableCellEditor.tsx":{"bytes":39351,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","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-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":"src/components/TableCellEditor/CellValidationMessage.tsx","kind":"import-statement","original":"./CellValidationMessage"},{"path":"src/components/TableCellEditor/FormCellEditor.tsx","kind":"import-statement","original":"./FormCellEditor"}],"format":"esm"},"src/components/TableCellEditor/index.ts":{"bytes":499,"imports":[{"path":"src/components/TableCellEditor/TableCellEditor.tsx","kind":"import-statement","original":"./TableCellEditor"}],"format":"esm"},"src/components/Table/ColumnActionsMenu.tsx":{"bytes":8691,"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":"src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"src/components/Table/ColumnSettings.tsx":{"bytes":8958,"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"},"src/components/Table/CreateRefPanel.tsx":{"bytes":11370,"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/echo","kind":"import-statement","external":true},{"path":"@dxos/live-object","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/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"},"src/components/Table/RowActionsMenu.tsx":{"bytes":6292,"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":"src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"src/components/Table/Table.tsx":{"bytes":49171,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","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-grid","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"src/model/index.ts","kind":"import-statement","original":"../../model"},{"path":"src/util/index.ts","kind":"import-statement","original":"../../util"},{"path":"src/components/TableCellEditor/index.ts","kind":"import-statement","original":"../TableCellEditor"},{"path":"src/components/Table/ColumnActionsMenu.tsx","kind":"import-statement","original":"./ColumnActionsMenu"},{"path":"src/components/Table/ColumnSettings.tsx","kind":"import-statement","original":"./ColumnSettings"},{"path":"src/components/Table/CreateRefPanel.tsx","kind":"import-statement","original":"./CreateRefPanel"},{"path":"src/components/Table/RowActionsMenu.tsx","kind":"import-statement","original":"./RowActionsMenu"}],"format":"esm"},"src/hooks/useTableModel.ts":{"bytes":10156,"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":"src/model/index.ts","kind":"import-statement","original":"../model"}],"format":"esm"},"src/hooks/useAddRow.ts":{"bytes":3047,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/index.ts":{"bytes":565,"imports":[{"path":"src/hooks/useTableModel.ts","kind":"import-statement","original":"./useTableModel"},{"path":"src/hooks/useAddRow.ts","kind":"import-statement","original":"./useAddRow"}],"format":"esm"},"src/components/Table/DynamicTable.tsx":{"bytes":10758,"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":"src/hooks/index.ts","kind":"import-statement","original":"../../hooks"},{"path":"src/model/index.ts","kind":"import-statement","original":"../../model"},{"path":"src/util/index.ts","kind":"import-statement","original":"../../util"},{"path":"src/components/Table/Table.tsx","kind":"import-statement","original":"./Table"}],"format":"esm"},"src/components/Table/index.ts":{"bytes":563,"imports":[{"path":"src/components/Table/Table.tsx","kind":"import-statement","original":"./Table"},{"path":"src/components/Table/DynamicTable.tsx","kind":"import-statement","original":"./DynamicTable"}],"format":"esm"},"src/components/TableToolbar/TableToolbar.tsx":{"bytes":9252,"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":"src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"src/components/TableToolbar/index.ts":{"bytes":489,"imports":[{"path":"src/components/TableToolbar/TableToolbar.tsx","kind":"import-statement","original":"./TableToolbar"}],"format":"esm"},"src/components/index.ts":{"bytes":557,"imports":[{"path":"src/components/Table/index.ts","kind":"import-statement","original":"./Table"},{"path":"src/components/TableToolbar/index.ts","kind":"import-statement","original":"./TableToolbar"}],"format":"esm"},"src/index.ts":{"bytes":961,"imports":[{"path":"src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"src/model/index.ts","kind":"import-statement","original":"./model"},{"path":"src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/testing/useTestTableModel.ts":{"bytes":12840,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/plugin-search","kind":"import-statement","external":true},{"path":"@dxos/random","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/react-client/testing","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/hooks/index.ts","kind":"import-statement","original":"../hooks"},{"path":"src/model/index.ts","kind":"import-statement","original":"../model"}],"format":"esm"},"src/testing/index.ts":{"bytes":486,"imports":[{"path":"src/testing/useTestTableModel.ts","kind":"import-statement","original":"./useTestTableModel"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":88249},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-BBXDTWCX.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-63UUF4IG.mjs","kind":"import-statement"},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","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-grid","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":"@codemirror/view","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","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-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","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-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":"@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/echo","kind":"import-statement","external":true},{"path":"@dxos/live-object","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/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/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":"@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","TableToolbar","cellClassesForRowSelection","getBaseSchema","makeDynamicTable","narrowSchema","tableButtons","tableControls","touch","translations","useAddRow","useTableModel"],"entryPoint":"src/index.ts","inputs":{"src/translations.ts":{"bytesInOutput":1169},"src/components/Table/Table.tsx":{"bytesInOutput":11658},"src/components/TableCellEditor/TableCellEditor.tsx":{"bytesInOutput":10207},"src/components/TableCellEditor/CellValidationMessage.tsx":{"bytesInOutput":1117},"src/components/TableCellEditor/FormCellEditor.tsx":{"bytesInOutput":6418},"src/components/TableCellEditor/index.ts":{"bytesInOutput":0},"src/components/Table/ColumnActionsMenu.tsx":{"bytesInOutput":2329},"src/components/Table/ColumnSettings.tsx":{"bytesInOutput":2437},"src/components/Table/CreateRefPanel.tsx":{"bytesInOutput":3066},"src/components/Table/RowActionsMenu.tsx":{"bytesInOutput":1605},"src/components/Table/index.ts":{"bytesInOutput":0},"src/components/Table/DynamicTable.tsx":{"bytesInOutput":2221},"src/components/index.ts":{"bytesInOutput":0},"src/components/TableToolbar/TableToolbar.tsx":{"bytesInOutput":2088},"src/components/TableToolbar/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0}},"bytes":45649},"dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6934},"dist/lib/browser/testing/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-BBXDTWCX.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-63UUF4IG.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/plugin-search","kind":"import-statement","external":true},{"path":"@dxos/random","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/react-client/testing","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["useTestTableModel"],"entryPoint":"src/testing/index.ts","inputs":{"src/testing/useTestTableModel.ts":{"bytesInOutput":3017},"src/testing/index.ts":{"bytesInOutput":0}},"bytes":3244},"dist/lib/browser/chunk-BBXDTWCX.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":112759},"dist/lib/browser/chunk-BBXDTWCX.mjs":{"imports":[{"path":"dist/lib/browser/chunk-63UUF4IG.mjs","kind":"import-statement"},{"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":"@dxos/lit-grid","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":"@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/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","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":"@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","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":"@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":"react","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true}],"exports":["BUTTON_IDENTIFIERS","CONTROL_IDENTIFIERS","CheckboxStory","ModalController","SwitchStory","TableModel","TablePresentation","cellClassesForRowSelection","getBaseSchema","makeDynamicTable","narrowSchema","tableButtons","tableControls","touch","useAddRow","useTableModel"],"inputs":{"src/util/dynamic-table.ts":{"bytesInOutput":2116},"src/util/signals.ts":{"bytesInOutput":30},"src/util/table-buttons.ts":{"bytesInOutput":3500},"src/util/table-controls.ts":{"bytesInOutput":2045},"src/util/schema.ts":{"bytesInOutput":486},"src/util/index.ts":{"bytesInOutput":0},"src/model/table-model.ts":{"bytesInOutput":18712},"src/util/tag.ts":{"bytesInOutput":334},"src/model/selection-model.ts":{"bytesInOutput":3596},"src/model/table-sorting.ts":{"bytesInOutput":4966},"src/model/modal-controller.ts":{"bytesInOutput":2531},"src/model/table-presentation.ts":{"bytesInOutput":14203},"src/model/index.ts":{"bytesInOutput":0},"src/hooks/useTableModel.ts":{"bytesInOutput":2224},"src/hooks/useAddRow.ts":{"bytesInOutput":389},"src/hooks/index.ts":{"bytesInOutput":0}},"bytes":55939},"dist/lib/browser/types/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/types/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-63UUF4IG.mjs","kind":"import-statement"}],"exports":["Table"],"entryPoint":"src/types/index.ts","inputs":{},"bytes":131},"dist/lib/browser/chunk-63UUF4IG.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":4065},"dist/lib/browser/chunk-63UUF4IG.mjs":{"imports":[{"path":"effect","kind":"import-statement","external":true},{"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/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["schema_exports"],"inputs":{"src/types/schema.ts":{"bytesInOutput":1560},"src/types/index.ts":{"bytesInOutput":0}},"bytes":1825}}}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-K734DJB7.mjs";
|
|
5
5
|
|
|
6
6
|
// src/util/dynamic-table.ts
|
|
7
|
-
import { Obj } from "@dxos/echo";
|
|
7
|
+
import { Filter, Obj, Query } from "@dxos/echo";
|
|
8
8
|
import { getTypename, toJsonSchema } from "@dxos/echo-schema";
|
|
9
9
|
import { ProjectionModel, createView, getSchemaFromPropertyDefinitions } from "@dxos/schema";
|
|
10
10
|
var getBaseSchema = ({ typename, properties, jsonSchema, schema }) => {
|
|
@@ -33,7 +33,7 @@ var makeDynamicTable = ({ typename, jsonSchema, properties }) => {
|
|
|
33
33
|
sizes: {}
|
|
34
34
|
});
|
|
35
35
|
const view = createView({
|
|
36
|
-
typename,
|
|
36
|
+
query: Query.select(Filter.typename(typename)),
|
|
37
37
|
jsonSchema,
|
|
38
38
|
presentation: table,
|
|
39
39
|
...properties && {
|
|
@@ -1820,4 +1820,4 @@ export {
|
|
|
1820
1820
|
useTableModel,
|
|
1821
1821
|
useAddRow
|
|
1822
1822
|
};
|
|
1823
|
-
//# sourceMappingURL=chunk-
|
|
1823
|
+
//# sourceMappingURL=chunk-RNQDU7IQ.mjs.map
|