comins-table 0.1.11 → 0.2.1
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/CHANGELOG.md +37 -1
- package/README.md +42 -338
- package/dist/browser/clipboard.d.ts +4 -0
- package/dist/browser/clipboard.d.ts.map +1 -0
- package/dist/browser/measurements.d.ts +28 -0
- package/dist/browser/measurements.d.ts.map +1 -0
- package/dist/browser/pointer.d.ts +25 -0
- package/dist/browser/pointer.d.ts.map +1 -0
- package/dist/browser/scroll.d.ts +9 -0
- package/dist/browser/scroll.d.ts.map +1 -0
- package/dist/browser/table-transfer.d.ts +38 -0
- package/dist/browser/table-transfer.d.ts.map +1 -0
- package/dist/browser/viewport-requests.d.ts +27 -0
- package/dist/browser/viewport-requests.d.ts.map +1 -0
- package/dist/cell-fill.d.ts +1 -1
- package/dist/cell-fill.d.ts.map +1 -1
- package/dist/clipboard-CNrbmDue.js +959 -0
- package/dist/clipboard-CNrbmDue.js.map +1 -0
- package/dist/clipboard.d.ts +2 -2
- package/dist/clipboard.d.ts.map +1 -1
- package/dist/clipboard.js +3 -2
- package/dist/column-layout.d.ts +24 -0
- package/dist/column-layout.d.ts.map +1 -0
- package/dist/component-renderer.d.ts +1 -1
- package/dist/component-renderer.d.ts.map +1 -1
- package/dist/core/editing/cells.d.ts +9 -0
- package/dist/core/editing/cells.d.ts.map +1 -0
- package/dist/core/editing/clipboard.d.ts +8 -0
- package/dist/core/editing/clipboard.d.ts.map +1 -0
- package/dist/core/editing/export-structure.d.ts +6 -0
- package/dist/core/editing/export-structure.d.ts.map +1 -0
- package/dist/core/editing/export.d.ts +4 -0
- package/dist/core/editing/export.d.ts.map +1 -0
- package/dist/core/editing/import.d.ts +4 -0
- package/dist/core/editing/import.d.ts.map +1 -0
- package/dist/core/layout/columns.d.ts +69 -0
- package/dist/core/layout/columns.d.ts.map +1 -0
- package/dist/core/layout/row-height.d.ts +25 -0
- package/dist/core/layout/row-height.d.ts.map +1 -0
- package/dist/core/layout/viewport.d.ts +21 -0
- package/dist/core/layout/viewport.d.ts.map +1 -0
- package/dist/core/layout/virtual.d.ts +119 -0
- package/dist/core/layout/virtual.d.ts.map +1 -0
- package/dist/core/model.d.ts +128 -0
- package/dist/core/model.d.ts.map +1 -0
- package/dist/core/rows/filtering.d.ts +45 -0
- package/dist/core/rows/filtering.d.ts.map +1 -0
- package/dist/core/rows/grouping.d.ts +97 -0
- package/dist/core/rows/grouping.d.ts.map +1 -0
- package/dist/core/rows/projection.d.ts +73 -0
- package/dist/core/rows/projection.d.ts.map +1 -0
- package/dist/core/rows/summary.d.ts +3 -0
- package/dist/core/rows/summary.d.ts.map +1 -0
- package/dist/core/selection/navigation.d.ts +49 -0
- package/dist/core/selection/navigation.d.ts.map +1 -0
- package/dist/core/selection/state.d.ts +131 -0
- package/dist/core/selection/state.d.ts.map +1 -0
- package/dist/core/state/access.d.ts +11 -0
- package/dist/core/state/access.d.ts.map +1 -0
- package/dist/core/state/changes.d.ts +14 -0
- package/dist/core/state/changes.d.ts.map +1 -0
- package/dist/core/state/reconcile.d.ts +18 -0
- package/dist/core/state/reconcile.d.ts.map +1 -0
- package/dist/core/state/table.d.ts +77 -0
- package/dist/core/state/table.d.ts.map +1 -0
- package/dist/core/transfer/policy.d.ts +116 -0
- package/dist/core/transfer/policy.d.ts.map +1 -0
- package/dist/core/viewport/data.d.ts +70 -0
- package/dist/core/viewport/data.d.ts.map +1 -0
- package/dist/core/viewport/requests.d.ts +19 -0
- package/dist/core/viewport/requests.d.ts.map +1 -0
- package/dist/core-compat-B4I2OHGY.js +391 -0
- package/dist/core-compat-B4I2OHGY.js.map +1 -0
- package/dist/core.d.ts +11 -714
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +3 -2
- package/dist/export-structure-Dy2zOqbj.js +166 -0
- package/dist/export-structure-Dy2zOqbj.js.map +1 -0
- package/dist/filtering.d.ts +8 -9
- package/dist/filtering.d.ts.map +1 -1
- package/dist/grouping.d.ts +11 -21
- package/dist/grouping.d.ts.map +1 -1
- package/dist/index.d.ts +26 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3162 -2624
- package/dist/index.js.map +1 -1
- package/dist/model.d.ts +170 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/react/core-compat.d.ts +141 -0
- package/dist/react/core-compat.d.ts.map +1 -0
- package/dist/react/edit-policy.d.ts +9 -0
- package/dist/react/edit-policy.d.ts.map +1 -0
- package/dist/react/model.d.ts +14 -0
- package/dist/react/model.d.ts.map +1 -0
- package/dist/react/rows.d.ts +6 -0
- package/dist/react/rows.d.ts.map +1 -0
- package/dist/react/state.d.ts +43 -0
- package/dist/react/state.d.ts.map +1 -0
- package/dist/react/table-transfer.d.ts +55 -0
- package/dist/react/table-transfer.d.ts.map +1 -0
- package/dist/react/viewport.d.ts +10 -0
- package/dist/react/viewport.d.ts.map +1 -0
- package/dist/react-types.d.ts +292 -0
- package/dist/react-types.d.ts.map +1 -0
- package/dist/row-detail.d.ts +2 -0
- package/dist/row-detail.d.ts.map +1 -1
- package/dist/row-height.d.ts +1 -24
- package/dist/row-height.d.ts.map +1 -1
- package/dist/row-value.d.ts +2 -0
- package/dist/row-value.d.ts.map +1 -0
- package/dist/selection-data.d.ts +2 -1
- package/dist/selection-data.d.ts.map +1 -1
- package/dist/selection.d.ts +2 -2
- package/dist/selection.d.ts.map +1 -1
- package/dist/selection.js +2 -2
- package/dist/summary.d.ts +1 -1
- package/dist/summary.d.ts.map +1 -1
- package/dist/table-state.d.ts +24 -0
- package/dist/table-state.d.ts.map +1 -0
- package/dist/table-transfer.d.ts +1 -152
- package/dist/table-transfer.d.ts.map +1 -1
- package/dist/tree-drag.d.ts.map +1 -1
- package/dist/tree.d.ts +1 -1
- package/dist/tree.d.ts.map +1 -1
- package/dist/use-viewport.d.ts.map +1 -1
- package/dist/viewport-data.d.ts +8 -71
- package/dist/viewport-data.d.ts.map +1 -1
- package/dist/viewport-layout.d.ts +1 -20
- package/dist/viewport-layout.d.ts.map +1 -1
- package/dist/viewport-requests.d.ts +1 -8
- package/dist/viewport-requests.d.ts.map +1 -1
- package/dist/virtual-layout.d.ts +1 -118
- package/dist/virtual-layout.d.ts.map +1 -1
- package/package.json +5 -2
- package/styles.css +31 -0
- package/dist/core-C1tlvY8Q.js +0 -963
- package/dist/core-C1tlvY8Q.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard-CNrbmDue.js","names":[],"sources":["../src/clipboard-text.ts","../src/core/state/access.ts","../src/column-layout.ts","../src/column-pinning.ts","../src/core/layout/columns.ts","../src/core/selection/state.ts","../src/core/state/table.ts","../src/core/editing/cells.ts","../src/core/editing/clipboard.ts"],"sourcesContent":["// Limits apply before allocating a matrix or invoking application parsers.\nexport const MAX_CLIPBOARD_CHARACTERS = 1_000_000;\nexport const MAX_CLIPBOARD_CELLS = 100_000;\n\n/** Parse plain-text TSV, including spreadsheet quoted tabs, newlines and quotes. */\nexport function parseCominsClipboardText(text: string): string[][] {\n if (text.length > MAX_CLIPBOARD_CHARACTERS) throw new Error(\"Clipboard text exceeds 1000000 characters.\");\n const rows: string[][] = [];\n let row: string[] = [], value = \"\", quoted = false, closed = false, count = 0;\n const cell = () => {\n if (++count > MAX_CLIPBOARD_CELLS) throw new Error(\"Clipboard exceeds 100000 cells.\");\n row.push(value); value = \"\"; closed = false;\n };\n for (let index = 0; index < text.length; index++) {\n const char = text[index]!;\n if (quoted) {\n if (char === '\"') {\n if (text[index + 1] === '\"') { value += '\"'; index++; }\n else { quoted = false; closed = true; }\n } else value += char;\n } else if (char === \"\\t\" || char === \"\\r\" || char === \"\\n\") {\n cell();\n if (char !== \"\\t\") {\n rows.push(row); row = [];\n if (char === \"\\r\" && text[index + 1] === \"\\n\") index++;\n // A terminal spreadsheet record separator is not an extra empty Row.\n if (index === text.length - 1) return rows;\n }\n } else if (closed) {\n throw new Error(\"Unexpected text after a quoted clipboard cell.\");\n } else if (char === '\"' && value === \"\") quoted = true;\n else value += char;\n }\n if (quoted) throw new Error(\"Unclosed quoted clipboard cell.\");\n cell(); rows.push(row);\n return rows;\n}\n","import type { CominsRowId } from \"../model\";\n\nexport function findRowIndex(state: { rowIds: readonly CominsRowId[] }, rowId: CominsRowId) {\n return state.rowIds.findIndex((id) => id === rowId);\n}\n\nexport function findColumn<TColumn extends { id: string }>(state: { columns: readonly TColumn[] }, columnId: string) {\n return state.columns.find((column) => column.id === columnId);\n}\n\nexport function getNestedFieldValue(row: unknown, field: string): unknown {\n return field.split(\".\").reduce<unknown>((value, key) => {\n if (value == null || typeof value !== \"object\") {\n return undefined;\n }\n\n return (value as Record<string, unknown>)[key];\n }, row);\n}\n","import type { CominsColumnRuntimeState, CominsColumnGroupRuntimeState } from \"./model\";\n\n// Minimal inputs keep layout calculations independent of renderers and table state.\nexport type CominsWidthColumn = {\n id: string;\n width?: number;\n minWidth?: number;\n maxWidth?: number;\n};\nexport type CominsColumnWidthState = {\n columns: CominsWidthColumn[];\n columnGroups: Array<{ id: string; children: string[] }>;\n columnState: Record<string, CominsColumnRuntimeState>;\n columnGroupState: Record<string, CominsColumnGroupRuntimeState>;\n};\nconst COMINS_MIN_COLUMN_WIDTH = 88;\n\nexport function setColumnWidth<TState extends Pick<CominsColumnWidthState, \"columnState\">>(\n state: TState,\n columnId: string,\n width: number,\n): TState {\n return {\n ...state,\n columnState: {\n ...state.columnState,\n [columnId]: { ...state.columnState[columnId], width },\n },\n };\n}\n\nexport function getEffectiveColumnMinWidth(column: CominsWidthColumn) {\n return Math.max(COMINS_MIN_COLUMN_WIDTH, column.minWidth ?? COMINS_MIN_COLUMN_WIDTH);\n}\n\nexport function getEffectiveColumnMaxWidth(column: CominsWidthColumn) {\n return column.maxWidth ?? Number.POSITIVE_INFINITY;\n}\n\nexport function getRuntimeColumnWidth(\n state: CominsColumnWidthState,\n column: CominsWidthColumn,\n) {\n return state.columnState[column.id]?.width ?? column.width ?? 100;\n}\n\nexport function clampColumnWidth(width: number, minWidth: number, maxWidth: number) {\n return Math.min(maxWidth, Math.max(minWidth, width));\n}\n\nexport function distributeRuntimeColumnWidths(\n state: CominsColumnWidthState,\n columns: Array<CominsWidthColumn>,\n targetWidth: number,\n) {\n const widths = columns.map((column) =>\n clampColumnWidth(getRuntimeColumnWidth(state, column), getEffectiveColumnMinWidth(column), getEffectiveColumnMaxWidth(column)),\n );\n const active = new Set(columns.map((_column, index) => index));\n const minWidths = columns.map(getEffectiveColumnMinWidth);\n const maxWidths = columns.map(getEffectiveColumnMaxWidth);\n const boundedTargetWidth = clampColumnWidth(\n targetWidth,\n minWidths.reduce((sum, width) => sum + width, 0),\n maxWidths.reduce((sum, width) => sum + width, 0),\n );\n\n while (active.size > 0) {\n const currentTotal = widths.reduce((sum, width) => sum + width, 0);\n const delta = boundedTargetWidth - currentTotal;\n\n if (Math.abs(delta) < 0.001) {\n break;\n }\n\n const activeIndexes = [...active];\n const activeWeight = activeIndexes.reduce((sum, index) => sum + Math.max(widths[index] ?? 0, 0), 0);\n let clamped = false;\n\n for (const index of activeIndexes) {\n const width = widths[index] ?? 0;\n const weight = activeWeight > 0 ? width / activeWeight : 1 / activeIndexes.length;\n const nextWidth = width + delta * weight;\n const clampedWidth = clampColumnWidth(nextWidth, minWidths[index] ?? 0, maxWidths[index] ?? Number.POSITIVE_INFINITY);\n\n widths[index] = clampedWidth;\n\n if (Math.abs(clampedWidth - nextWidth) > 0.001) {\n active.delete(index);\n clamped = true;\n }\n }\n\n if (!clamped) {\n break;\n }\n }\n\n return widths;\n}\n\nexport function setColumnWidthInsideParentGroup<TState extends CominsColumnWidthState>(\n state: TState,\n columnId: string,\n width: number,\n) {\n const group = state.columnGroups.find((candidate) => candidate.children.includes(columnId));\n\n if (!group || state.columnGroupState[group.id]?.hidden === true) {\n return setColumnWidth(state, columnId, width);\n }\n\n const childColumns = group.children\n .map((childId) => state.columns.find((column) => column.id === childId))\n .filter((column): column is CominsWidthColumn => Boolean(column))\n .filter((column) => state.columnState[column.id]?.hidden !== true);\n const targetColumn = childColumns.find((column) => column.id === columnId);\n\n if (!targetColumn) {\n return setColumnWidth(state, columnId, width);\n }\n\n const siblingColumns = childColumns.filter((column) => column.id !== columnId);\n\n if (siblingColumns.length === 0) {\n const currentGroupWidth = getRuntimeColumnWidth(state, targetColumn);\n\n return setColumnWidth(\n state,\n columnId,\n clampColumnWidth(width, getEffectiveColumnMinWidth(targetColumn), Math.min(getEffectiveColumnMaxWidth(targetColumn), currentGroupWidth)),\n );\n }\n\n const currentGroupWidth = childColumns.reduce((sum, column) => sum + getRuntimeColumnWidth(state, column), 0);\n const siblingMinWidth = siblingColumns.reduce((sum, column) => sum + getEffectiveColumnMinWidth(column), 0);\n const siblingMaxWidth = siblingColumns.reduce((sum, column) => sum + getEffectiveColumnMaxWidth(column), 0);\n const minWidth = Math.max(getEffectiveColumnMinWidth(targetColumn), currentGroupWidth - siblingMaxWidth);\n const maxWidth = Math.max(minWidth, Math.min(getEffectiveColumnMaxWidth(targetColumn), currentGroupWidth - siblingMinWidth));\n const nextTargetWidth = clampColumnWidth(width, minWidth, maxWidth);\n const nextSiblingWidths = distributeRuntimeColumnWidths(state, siblingColumns, currentGroupWidth - nextTargetWidth);\n let next = setColumnWidth(state, columnId, nextTargetWidth);\n\n siblingColumns.forEach((column, index) => {\n next = setColumnWidth(next, column.id, nextSiblingWidths[index] ?? getRuntimeColumnWidth(next, column));\n });\n\n return next;\n}\n","export type CominsColumnPinned = \"left\" | \"right\";\n\nexport type CominsColumnPinningBlock = {\n columnIds: readonly string[];\n columnWidths: readonly number[];\n id: string;\n pinned?: CominsColumnPinned;\n};\n\nexport type CominsResolvedPinnedColumn = {\n boundary?: boolean;\n offset?: number;\n pinned?: CominsColumnPinned;\n};\n\nexport type CominsResolvedColumnPinning = {\n columns: ReadonlyMap<string, CominsResolvedPinnedColumn>;\n orderedColumnIds: readonly string[];\n};\n\nexport type CominsColumnPinningSpanFragment = CominsResolvedPinnedColumn & {\n colSpan: number;\n startIndex: number;\n};\n\nexport function normalizeCominsColumnPinned(value: unknown): CominsColumnPinned | undefined {\n return value === \"left\" || value === \"right\" ? value : undefined;\n}\n\nexport function resolveCominsColumnPinning(\n blocks: readonly CominsColumnPinningBlock[],\n containerWidth: number,\n): CominsResolvedColumnPinning {\n const left = blocks.filter((block) => block.pinned === \"left\");\n const center = blocks.filter((block) => block.pinned === undefined);\n const right = blocks.filter((block) => block.pinned === \"right\");\n const demotedLeft: CominsColumnPinningBlock[] = [];\n const demotedRight: CominsColumnPinningBlock[] = [];\n const effectiveLeft = [...left];\n const effectiveRight = [...right];\n const safeContainerWidth = Number.isFinite(containerWidth) ? Math.max(0, containerWidth) : 0;\n const pinnedBudget = safeContainerWidth < 48 ? 0 : safeContainerWidth - 48;\n const totalWidth = (current: readonly CominsColumnPinningBlock[]) =>\n current.reduce(\n (sum, block) =>\n sum + block.columnWidths.reduce((blockSum, width) => blockSum + Math.max(0, width), 0),\n 0,\n );\n\n while (totalWidth(effectiveLeft) + totalWidth(effectiveRight) > pinnedBudget) {\n const leftWidth = totalWidth(effectiveLeft);\n const rightWidth = totalWidth(effectiveRight);\n\n if (leftWidth > rightWidth && effectiveLeft.length > 0) {\n demotedLeft.unshift(effectiveLeft.pop()!);\n } else if (effectiveRight.length > 0) {\n demotedRight.push(effectiveRight.shift()!);\n } else if (effectiveLeft.length > 0) {\n demotedLeft.unshift(effectiveLeft.pop()!);\n } else {\n break;\n }\n }\n\n const effectiveBlocks = [\n ...effectiveLeft,\n ...demotedLeft,\n ...center,\n ...demotedRight,\n ...effectiveRight,\n ];\n const columns = new Map<string, CominsResolvedPinnedColumn>();\n let leftOffset = 0;\n\n for (const block of effectiveLeft) {\n for (let index = 0; index < block.columnIds.length; index += 1) {\n const columnId = block.columnIds[index]!;\n columns.set(columnId, { offset: leftOffset, pinned: \"left\" });\n leftOffset += Math.max(0, block.columnWidths[index] ?? 0);\n }\n }\n\n const lastLeftColumnId = effectiveLeft.at(-1)?.columnIds.at(-1);\n\n if (lastLeftColumnId) {\n columns.set(lastLeftColumnId, { ...columns.get(lastLeftColumnId), boundary: true });\n }\n\n let rightOffset = 0;\n\n for (let blockIndex = effectiveRight.length - 1; blockIndex >= 0; blockIndex -= 1) {\n const block = effectiveRight[blockIndex]!;\n\n for (let columnIndex = block.columnIds.length - 1; columnIndex >= 0; columnIndex -= 1) {\n const columnId = block.columnIds[columnIndex]!;\n columns.set(columnId, { offset: rightOffset, pinned: \"right\" });\n rightOffset += Math.max(0, block.columnWidths[columnIndex] ?? 0);\n }\n }\n\n const firstRightColumnId = effectiveRight[0]?.columnIds[0];\n\n if (firstRightColumnId) {\n columns.set(firstRightColumnId, { ...columns.get(firstRightColumnId), boundary: true });\n }\n\n for (const block of [...demotedLeft, ...center, ...demotedRight]) {\n for (const columnId of block.columnIds) {\n columns.set(columnId, {});\n }\n }\n\n return {\n columns,\n orderedColumnIds: effectiveBlocks.flatMap((block) => [...block.columnIds]),\n };\n}\n\nexport function getCominsPinnedBlockResizeMaxWidth(\n blocks: readonly CominsColumnPinningBlock[],\n resolved: CominsResolvedColumnPinning,\n blockId: string,\n containerWidth: number,\n minimumCenterWidth = 48,\n): number | undefined {\n const target = blocks.find((block) => block.id === blockId);\n\n if (\n !target?.pinned ||\n target.columnIds.length === 0 ||\n target.columnIds.some((columnId) => resolved.columns.get(columnId)?.pinned !== target.pinned)\n ) {\n return undefined;\n }\n\n const otherPinnedWidth = blocks.reduce((total, block) => {\n if (\n block.id === target.id ||\n !block.pinned ||\n block.columnIds.some((columnId) => resolved.columns.get(columnId)?.pinned !== block.pinned)\n ) {\n return total;\n }\n\n return total + block.columnWidths.reduce(\n (blockTotal, width) => blockTotal + (Number.isFinite(width) ? Math.max(0, width) : 0),\n 0,\n );\n }, 0);\n const safeContainerWidth = Number.isFinite(containerWidth) ? Math.max(0, containerWidth) : 0;\n const safeMinimumCenterWidth = Number.isFinite(minimumCenterWidth)\n ? Math.max(0, minimumCenterWidth)\n : 48;\n\n return Math.max(0, safeContainerWidth - safeMinimumCenterWidth - otherPinnedWidth);\n}\n\nexport function getCominsColumnPinningSpanFragments(\n resolved: CominsResolvedColumnPinning,\n startIndex: number,\n colSpan: number,\n): CominsColumnPinningSpanFragment[] {\n const endIndex = Math.min(\n resolved.orderedColumnIds.length,\n Math.max(startIndex, startIndex + Math.max(1, Math.floor(colSpan))),\n );\n const fragments: CominsColumnPinningSpanFragment[] = [];\n\n for (let index = Math.max(0, startIndex); index < endIndex; index += 1) {\n const columnId = resolved.orderedColumnIds[index];\n const pin = columnId ? resolved.columns.get(columnId) ?? {} : {};\n const previous = fragments.at(-1);\n\n if (previous && previous.pinned === pin.pinned) {\n previous.colSpan += 1;\n\n if (pin.pinned === \"right\") {\n previous.offset = pin.offset;\n }\n continue;\n }\n\n fragments.push({\n boundary: pin.boundary,\n colSpan: 1,\n offset: pin.offset,\n pinned: pin.pinned,\n startIndex: index,\n });\n }\n\n return fragments;\n}\n","import type {\n CominsColumnPinned,\n CominsColumnRuntimeState,\n CominsColumnGroupRuntimeState,\n CominsColumnLayout,\n CominsTableRuntimeColumn,\n CominsTableRuntimeColumnGroup,\n CominsTableState,\n CominsHeaderCell,\n} from \"../model\";\nimport {\n setColumnWidth,\n} from \"../../column-layout\";\nimport {\n normalizeCominsColumnPinned,\n} from \"../../column-pinning\";\nimport {\n findColumn,\n} from \"../state/access\";\nconst COMINS_MIN_COLUMN_WIDTH = 88;\n\nexport function normalizeColumns<TColumn extends { id?: string; field: string }>(columns: readonly TColumn[]) {\n return columns.map((column) => ({\n ...column,\n id: column.id ?? column.field,\n }));\n}\n\nexport function normalizeColumnGroups<TGroup extends { id: string; children: string[] }>(\n columns: readonly { id: string }[],\n columnGroups: readonly TGroup[] = [],\n) {\n const knownColumnIds = new Set(columns.map((column) => column.id));\n const usedColumnIds = new Set<string>();\n const usedGroupIds = new Set<string>();\n const groups: TGroup[] = [];\n\n for (const group of columnGroups) {\n if (usedGroupIds.has(group.id)) {\n continue;\n }\n\n const children = group.children.filter((columnId) => {\n if (!knownColumnIds.has(columnId) || usedColumnIds.has(columnId)) {\n return false;\n }\n\n usedColumnIds.add(columnId);\n return true;\n });\n\n usedGroupIds.add(group.id);\n\n if (children.length === 0) {\n continue;\n }\n\n groups.push({\n ...group,\n children,\n });\n }\n\n return groups;\n}\n\nexport function normalizeColumnState<TData>(\n columns: ReadonlyArray<CominsTableRuntimeColumn<TData>>,\n layout?: Partial<CominsColumnLayout>,\n) {\n const state: Record<string, CominsColumnRuntimeState> = {};\n\n for (const column of columns) {\n state[column.id] = {\n hidden: layout?.columns?.[column.id]?.hidden ?? column.hidden,\n pinned: normalizeCominsColumnPinned(\n layout === undefined ? column.pinned : layout.columns?.[column.id]?.pinned,\n ),\n width: layout?.columns?.[column.id]?.width ?? column.width,\n };\n }\n\n return state;\n}\n\nexport function normalizeColumnGroupState(\n columnGroups: ReadonlyArray<CominsTableRuntimeColumnGroup>,\n layout?: Partial<CominsColumnLayout>,\n) {\n const state: Record<string, CominsColumnGroupRuntimeState> = {};\n\n for (const group of columnGroups) {\n state[group.id] = {\n hidden: layout?.groups?.[group.id]?.hidden ?? group.hidden,\n pinned: normalizeCominsColumnPinned(\n layout === undefined ? group.pinned : layout.groups?.[group.id]?.pinned,\n ),\n };\n }\n\n return state;\n}\n\nexport function getColumnGroupIdMap(columnGroups: ReadonlyArray<CominsTableRuntimeColumnGroup>) {\n const map = new Map<string, string>();\n\n for (const group of columnGroups) {\n for (const columnId of group.children) {\n map.set(columnId, group.id);\n }\n }\n\n return map;\n}\n\nexport function findColumnGroupById(\n columnGroups: ReadonlyArray<CominsTableRuntimeColumnGroup>,\n groupId: string,\n) {\n return columnGroups.find((group) => group.id === groupId);\n}\n\nexport function normalizeColumnOrder<TData>(\n columns: ReadonlyArray<CominsTableRuntimeColumn<TData>>,\n layout?: Partial<CominsColumnLayout>,\n columnGroups: ReadonlyArray<CominsTableRuntimeColumnGroup> = [],\n) {\n const knownIds = new Set(columns.map((column) => column.id));\n const ordered = (layout?.order ?? []).filter((id) => knownIds.has(id));\n const missing = columns.map((column) => column.id).filter((id) => !ordered.includes(id));\n const flatOrder = [...ordered, ...missing];\n const columnById = new Map(columns.map((column) => [column.id, column]));\n const groupIdByColumnId = getColumnGroupIdMap(columnGroups);\n const groupById = new Map(columnGroups.map((group) => [group.id, group]));\n const isColumnPinned = (columnId: string) =>\n !groupIdByColumnId.has(columnId) &&\n normalizeCominsColumnPinned(\n layout === undefined\n ? columnById.get(columnId)?.pinned\n : layout.columns?.[columnId]?.pinned,\n ) !== undefined;\n const isGroupPinned = (groupId: string) =>\n normalizeCominsColumnPinned(\n layout === undefined\n ? groupById.get(groupId)?.pinned\n : layout.groups?.[groupId]?.pinned,\n ) !== undefined;\n type ColumnOrderEntity = {\n columnIds: string[];\n key: string;\n locked: boolean;\n };\n const createEntities = (order: readonly string[]) => {\n const emittedGroups = new Set<string>();\n const entities: ColumnOrderEntity[] = [];\n\n for (const columnId of order) {\n const groupId = groupIdByColumnId.get(columnId);\n\n if (!groupId) {\n entities.push({\n columnIds: [columnId],\n key: `column:${columnId}`,\n locked:\n columnById.get(columnId)?.lockPosition === true ||\n isColumnPinned(columnId),\n });\n continue;\n }\n\n if (emittedGroups.has(groupId)) {\n continue;\n }\n\n const group = groupById.get(groupId);\n\n if (!group) {\n entities.push({\n columnIds: [columnId],\n key: `column:${columnId}`,\n locked:\n columnById.get(columnId)?.lockPosition === true ||\n isColumnPinned(columnId),\n });\n continue;\n }\n\n const groupChildrenInOrder = order.filter((currentId) => group.children.includes(currentId));\n entities.push({\n columnIds: groupChildrenInOrder,\n key: `group:${groupId}`,\n locked:\n group.lockPosition ||\n isGroupPinned(groupId) ||\n groupChildrenInOrder.some((currentId) => columnById.get(currentId)?.lockPosition === true),\n });\n emittedGroups.add(groupId);\n }\n\n return entities;\n };\n const declaredEntities = createEntities(columns.map((column) => column.id));\n const proposedEntities = createEntities(flatOrder);\n const declaredEntityByKey = new Map(declaredEntities.map((entity) => [entity.key, entity]));\n const declaredSegmentByKey = new Map<string, number>();\n let segmentCount = 0;\n\n for (const entity of declaredEntities) {\n declaredSegmentByKey.set(entity.key, segmentCount);\n\n if (entity.locked) {\n segmentCount += 1;\n }\n }\n\n const movableEntitiesBySegment = Array.from(\n { length: segmentCount + 1 },\n () => [] as ColumnOrderEntity[],\n );\n const proposedEntityByKey = new Map(proposedEntities.map((entity) => [entity.key, entity]));\n\n for (const entity of proposedEntities) {\n const declaredEntity = declaredEntityByKey.get(entity.key);\n\n if (!declaredEntity || declaredEntity.locked) {\n continue;\n }\n\n const segment = declaredSegmentByKey.get(entity.key) ?? 0;\n movableEntitiesBySegment[segment]?.push(entity);\n }\n\n const normalizedEntities: ColumnOrderEntity[] = [];\n let currentSegment = 0;\n\n for (const entity of declaredEntities) {\n if (!entity.locked) {\n continue;\n }\n\n normalizedEntities.push(...(movableEntitiesBySegment[currentSegment] ?? []));\n normalizedEntities.push(proposedEntityByKey.get(entity.key) ?? entity);\n currentSegment += 1;\n }\n\n normalizedEntities.push(...(movableEntitiesBySegment[currentSegment] ?? []));\n\n return normalizedEntities.flatMap((entity) => {\n const declaredEntity = declaredEntityByKey.get(entity.key);\n\n if (!declaredEntity || entity.columnIds.length === 1) {\n return entity.columnIds;\n }\n\n const lockedChildIds = new Set(\n declaredEntity.columnIds.filter((columnId) => columnById.get(columnId)?.lockPosition),\n );\n\n if (lockedChildIds.size === 0) {\n return entity.columnIds;\n }\n\n const declaredChildSegmentById = new Map<string, number>();\n let childSegmentCount = 0;\n\n for (const columnId of declaredEntity.columnIds) {\n declaredChildSegmentById.set(columnId, childSegmentCount);\n\n if (lockedChildIds.has(columnId)) {\n childSegmentCount += 1;\n }\n }\n\n const movableChildrenBySegment = Array.from(\n { length: childSegmentCount + 1 },\n () => [] as string[],\n );\n\n for (const columnId of entity.columnIds) {\n if (lockedChildIds.has(columnId)) {\n continue;\n }\n\n const segment = declaredChildSegmentById.get(columnId) ?? 0;\n movableChildrenBySegment[segment]?.push(columnId);\n }\n\n const normalizedChildren: string[] = [];\n let currentChildSegment = 0;\n\n for (const columnId of declaredEntity.columnIds) {\n if (!lockedChildIds.has(columnId)) {\n continue;\n }\n\n normalizedChildren.push(...(movableChildrenBySegment[currentChildSegment] ?? []));\n normalizedChildren.push(columnId);\n currentChildSegment += 1;\n }\n\n normalizedChildren.push(...(movableChildrenBySegment[currentChildSegment] ?? []));\n return normalizedChildren;\n });\n}\n\nexport function setCominsColumnWidth<TData>(\n state: CominsTableState<TData>,\n columnId: string,\n width: number,\n) {\n return setColumnWidth(state, columnId, width);\n}\n\nexport function setCominsColumnHidden<TData>(\n state: CominsTableState<TData>,\n columnId: string,\n hidden: boolean,\n) {\n return {\n ...state,\n columnState: {\n ...state.columnState,\n [columnId]: {\n ...state.columnState[columnId],\n hidden,\n },\n },\n };\n}\n\nexport function setCominsColumnGroupHidden<TData>(\n state: CominsTableState<TData>,\n groupId: string,\n hidden: boolean,\n) {\n if (!findColumnGroupById(state.columnGroups, groupId)) {\n return state;\n }\n\n return {\n ...state,\n columnGroupState: {\n ...state.columnGroupState,\n [groupId]: {\n ...state.columnGroupState[groupId],\n hidden,\n },\n },\n };\n}\n\nexport function getColumnWidth<TData>(\n state: CominsTableState<TData>,\n column: CominsTableRuntimeColumn<TData>,\n) {\n return state.columnState[column.id]?.width ?? column.width ?? 100;\n}\n\nexport function getColumnMinWidth<TData>(column: CominsTableRuntimeColumn<TData>) {\n return Math.max(COMINS_MIN_COLUMN_WIDTH, column.minWidth ?? COMINS_MIN_COLUMN_WIDTH);\n}\n\nexport function getColumnMaxWidth<TData>(column: CominsTableRuntimeColumn<TData>) {\n return column.maxWidth ?? Number.POSITIVE_INFINITY;\n}\n\nexport function clampWidth(width: number, minWidth: number, maxWidth: number) {\n return Math.min(maxWidth, Math.max(minWidth, width));\n}\n\nexport function distributeColumnGroupWidths<TData>(\n state: CominsTableState<TData>,\n columns: Array<CominsTableRuntimeColumn<TData>>,\n targetWidth: number,\n) {\n const widths = columns.map((column) =>\n clampWidth(getColumnWidth(state, column), getColumnMinWidth(column), getColumnMaxWidth(column)),\n );\n const active = new Set(columns.map((_column, index) => index));\n const minWidths = columns.map(getColumnMinWidth);\n const maxWidths = columns.map(getColumnMaxWidth);\n const boundedTargetWidth = clampWidth(\n targetWidth,\n minWidths.reduce((sum, width) => sum + width, 0),\n maxWidths.reduce((sum, width) => sum + width, 0),\n );\n\n while (active.size > 0) {\n const currentTotal = widths.reduce((sum, width) => sum + width, 0);\n const delta = boundedTargetWidth - currentTotal;\n\n if (Math.abs(delta) < 0.001) {\n break;\n }\n\n const activeIndexes = [...active];\n const activeWeight = activeIndexes.reduce((sum, index) => sum + Math.max(widths[index] ?? 0, 0), 0);\n let clamped = false;\n\n for (const index of activeIndexes) {\n const width = widths[index] ?? 0;\n const weight = activeWeight > 0 ? width / activeWeight : 1 / activeIndexes.length;\n const nextWidth = width + delta * weight;\n const clampedWidth = clampWidth(nextWidth, minWidths[index] ?? 0, maxWidths[index] ?? Number.POSITIVE_INFINITY);\n\n widths[index] = clampedWidth;\n\n if (Math.abs(clampedWidth - nextWidth) > 0.001) {\n active.delete(index);\n clamped = true;\n }\n }\n\n if (!clamped) {\n break;\n }\n }\n\n return widths;\n}\n\nexport function setCominsColumnGroupWidth<TData>(\n state: CominsTableState<TData>,\n groupId: string,\n width: number,\n) {\n const group = findColumnGroupById(state.columnGroups, groupId);\n\n if (!group || state.columnGroupState[group.id]?.hidden === true) {\n return state;\n }\n\n const childColumns = group.children\n .map((columnId) => findColumn(state, columnId))\n .filter((column): column is CominsTableRuntimeColumn<TData> => Boolean(column))\n .filter((column) => state.columnState[column.id]?.hidden !== true);\n\n if (childColumns.length === 0) {\n return state;\n }\n\n const widths = distributeColumnGroupWidths(state, childColumns, width);\n const columnState = { ...state.columnState };\n\n childColumns.forEach((column, index) => {\n columnState[column.id] = {\n ...columnState[column.id],\n width: widths[index],\n };\n });\n\n return {\n ...state,\n columnState,\n };\n}\n\nexport function doesColumnMoveChangeLockedPositions<TData>(\n state: CominsTableState<TData>,\n nextOrder: readonly string[],\n) {\n const currentIndexByColumnId = new Map(\n state.columnOrder.map((columnId, index) => [columnId, index] as const),\n );\n const nextIndexByColumnId = new Map(\n nextOrder.map((columnId, index) => [columnId, index] as const),\n );\n\n const groupIdByColumnId = getColumnGroupIdMap(state.columnGroups);\n\n for (const column of state.columns) {\n if (\n (\n column.lockPosition ||\n (!groupIdByColumnId.has(column.id) && state.columnState[column.id]?.pinned !== undefined)\n ) &&\n currentIndexByColumnId.get(column.id) !== nextIndexByColumnId.get(column.id)\n ) {\n return true;\n }\n }\n\n for (const group of state.columnGroups) {\n if (!group.lockPosition && state.columnGroupState[group.id]?.pinned === undefined) {\n continue;\n }\n\n const currentPositions = group.children\n .map((columnId) => currentIndexByColumnId.get(columnId))\n .filter((index): index is number => index !== undefined)\n .sort((left, right) => left - right);\n const nextPositions = group.children\n .map((columnId) => nextIndexByColumnId.get(columnId))\n .filter((index): index is number => index !== undefined)\n .sort((left, right) => left - right);\n\n if (\n currentPositions.length !== nextPositions.length ||\n currentPositions.some((index, position) => index !== nextPositions[position])\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function moveCominsColumn<TData>(\n state: CominsTableState<TData>,\n columnId: string,\n targetIndex: number,\n) {\n const sourceColumn = findColumn(state, columnId);\n const sourceGroupId = getColumnGroupIdMap(state.columnGroups).get(columnId);\n\n if (\n !sourceColumn ||\n sourceColumn.lockPosition ||\n (!sourceGroupId && state.columnState[columnId]?.pinned !== undefined)\n ) {\n return state;\n }\n\n const groupIdByColumnId = getColumnGroupIdMap(state.columnGroups);\n\n const current = state.columnOrder.filter((id) => id !== columnId);\n\n if (current.length === state.columnOrder.length) {\n return state;\n }\n\n const nextIndex = Math.max(0, Math.min(targetIndex, current.length));\n\n if (sourceGroupId) {\n const sourceGroup = findColumnGroupById(state.columnGroups, sourceGroupId);\n\n if (!sourceGroup) {\n return state;\n }\n\n const groupChildrenInCurrent = current.filter((id) => sourceGroup.children.includes(id));\n const groupStart = current.findIndex((id) => sourceGroup.children.includes(id));\n const groupEnd = groupStart + groupChildrenInCurrent.length;\n\n if (nextIndex < groupStart || nextIndex > groupEnd) {\n return state;\n }\n } else if (state.columnGroups.length > 0) {\n for (const group of state.columnGroups) {\n const groupChildrenInCurrent = current.filter((id) => group.children.includes(id));\n\n if (groupChildrenInCurrent.length === 0) {\n continue;\n }\n\n const groupStart = current.findIndex((id) => group.children.includes(id));\n const groupEnd = groupStart + groupChildrenInCurrent.length;\n\n if (nextIndex > groupStart && nextIndex < groupEnd) {\n return state;\n }\n }\n }\n\n current.splice(nextIndex, 0, columnId);\n\n if (doesColumnMoveChangeLockedPositions(state, current)) {\n return state;\n }\n\n if (current.every((id, index) => id === state.columnOrder[index])) {\n return state;\n }\n\n return { ...state, columnOrder: current };\n}\n\nexport function moveCominsColumnGroup<TData>(\n state: CominsTableState<TData>,\n groupId: string,\n targetIndex: number,\n) {\n const group = findColumnGroupById(state.columnGroups, groupId);\n\n if (\n !group ||\n group.lockPosition ||\n state.columnGroupState[groupId]?.pinned !== undefined\n ) {\n return state;\n }\n\n const groupChildren = state.columnOrder.filter((id) => group.children.includes(id));\n\n if (groupChildren.length === 0) {\n return state;\n }\n\n const current = state.columnOrder.filter((id) => !group.children.includes(id));\n const nextIndex = Math.max(0, Math.min(targetIndex, current.length));\n const nextOrder = [...current.slice(0, nextIndex), ...groupChildren, ...current.slice(nextIndex)];\n\n if (doesColumnMoveChangeLockedPositions(state, nextOrder)) {\n return state;\n }\n\n if (nextOrder.every((id, index) => id === state.columnOrder[index])) {\n return state;\n }\n\n return { ...state, columnOrder: nextOrder };\n}\n\nexport function serializeCominsColumnLayout<TData>(state: CominsTableState<TData>): CominsColumnLayout {\n const groups =\n state.columnGroups.length === 0\n ? undefined\n : Object.fromEntries(state.columnGroups.map((group) => [group.id, { ...state.columnGroupState[group.id] }]));\n\n return {\n columns: { ...state.columnState },\n ...(groups ? { groups } : {}),\n order: [...state.columnOrder],\n };\n}\n\nexport function applyCominsColumnLayout<TData>(state: CominsTableState<TData>, layout: CominsColumnLayout) {\n return {\n ...state,\n columnOrder: normalizeColumnOrder(state.columns, layout, state.columnGroups),\n columnGroupState: normalizeColumnGroupState(state.columnGroups, layout),\n columnState: normalizeColumnState(state.columns, layout),\n };\n}\n\nexport function getCominsVisibleColumns<TData>(state: CominsTableState<TData>) {\n const groupIdByColumnId = getColumnGroupIdMap(state.columnGroups);\n const groupById = new Map(state.columnGroups.map((group) => [group.id, group]));\n const emittedGroups = new Set<string>();\n const blocks: Array<{\n columns: Array<CominsTableRuntimeColumn<TData>>;\n pinned?: CominsColumnPinned;\n }> = [];\n\n for (const columnId of state.columnOrder) {\n const column = findColumn(state, columnId);\n\n if (!column || state.columnState[column.id]?.hidden === true) {\n continue;\n }\n\n const groupId = groupIdByColumnId.get(column.id);\n\n if (!groupId) {\n blocks.push({ columns: [column], pinned: state.columnState[column.id]?.pinned });\n continue;\n }\n\n if (emittedGroups.has(groupId) || state.columnGroupState[groupId]?.hidden === true) {\n continue;\n }\n\n const group = groupById.get(groupId);\n\n if (!group) {\n continue;\n }\n\n const columns = state.columnOrder\n .filter((currentId) => group.children.includes(currentId))\n .map((currentId) => findColumn(state, currentId))\n .filter((current): current is CominsTableRuntimeColumn<TData> =>\n Boolean(current) && state.columnState[current!.id]?.hidden !== true,\n );\n\n if (columns.length > 0) {\n blocks.push({ columns, pinned: state.columnGroupState[groupId]?.pinned });\n }\n\n emittedGroups.add(groupId);\n }\n\n return [\"left\", undefined, \"right\"].flatMap((pinned) =>\n blocks\n .filter((block) => block.pinned === pinned)\n .flatMap((block) => block.columns),\n );\n}\n\nexport function getCominsHeaderRows<TData>(state: CominsTableState<TData>): Array<Array<CominsHeaderCell<TData>>> {\n const visibleColumns = getCominsVisibleColumns(state);\n\n if (state.columnGroups.length === 0) {\n return [\n visibleColumns.map((column) => ({\n colSpan: 1,\n column,\n columnId: column.id,\n kind: \"column\",\n rowSpan: 1,\n })),\n ];\n }\n\n const visibleColumnIds = new Set(visibleColumns.map((column) => column.id));\n const groupIdByColumnId = getColumnGroupIdMap(state.columnGroups);\n const groupById = new Map(state.columnGroups.map((group) => [group.id, group]));\n const emittedGroups = new Set<string>();\n const parentRow: Array<CominsHeaderCell<TData>> = [];\n const childRow: Array<CominsHeaderCell<TData>> = [];\n\n for (const column of visibleColumns) {\n const columnId = column.id;\n\n const groupId = groupIdByColumnId.get(columnId);\n\n if (!groupId) {\n parentRow.push({\n colSpan: 1,\n column,\n columnId: column.id,\n kind: \"column\",\n rowSpan: 2,\n });\n continue;\n }\n\n if (emittedGroups.has(groupId)) {\n continue;\n }\n\n const group = groupById.get(groupId);\n\n if (!group) {\n continue;\n }\n\n const visibleGroupColumns = visibleColumns.filter((currentColumn) =>\n group.children.includes(currentColumn.id),\n );\n\n if (visibleGroupColumns.length === 0) {\n emittedGroups.add(groupId);\n continue;\n }\n\n parentRow.push({\n colSpan: visibleGroupColumns.length,\n group,\n groupId,\n kind: \"group\",\n rowSpan: 1,\n });\n childRow.push(\n ...visibleGroupColumns.map((currentColumn) => ({\n colSpan: 1 as const,\n column: currentColumn,\n columnId: currentColumn.id,\n groupId,\n kind: \"column\" as const,\n rowSpan: 1 as const,\n })),\n );\n emittedGroups.add(groupId);\n }\n\n return [parentRow, childRow];\n}\n","import type {\n CominsRowId,\n CominsSelectionState,\n CominsCellAddress,\n CominsCellRange,\n CominsRowSelectionOptions,\n CominsCellSelectionOptions,\n CominsTableState,\n} from \"../model\";\nimport {\n getCominsVisibleColumns,\n} from \"../layout/columns\";\n\nexport function createEmptySelection(): CominsSelectionState {\n return {\n cell: null,\n cells: [],\n range: null,\n rowIds: [],\n };\n}\n\nexport function getCellRangeBounds<TData>(\n state: CominsTableState<TData>,\n range: CominsCellRange,\n rowIds: readonly CominsRowId[] = state.rowIds,\n) {\n const visibleColumns = getCominsVisibleColumns(state);\n const anchorRowIndex = rowIds.indexOf(range.anchor.rowId);\n const focusRowIndex = rowIds.indexOf(range.focus.rowId);\n const anchorColumnIndex = visibleColumns.findIndex((column) => column.id === range.anchor.columnId);\n const focusColumnIndex = visibleColumns.findIndex((column) => column.id === range.focus.columnId);\n\n if (anchorRowIndex < 0 || focusRowIndex < 0 || anchorColumnIndex < 0 || focusColumnIndex < 0) {\n return null;\n }\n\n return {\n columnEnd: Math.max(anchorColumnIndex, focusColumnIndex),\n columnStart: Math.min(anchorColumnIndex, focusColumnIndex),\n rowEnd: Math.max(anchorRowIndex, focusRowIndex),\n rowIds,\n rowStart: Math.min(anchorRowIndex, focusRowIndex),\n visibleColumns,\n };\n}\n\nexport function selectRow<TData>(\n state: CominsTableState<TData>,\n rowId: CominsRowId,\n options: CominsRowSelectionOptions = {},\n) {\n const current = state.selection.rowIds;\n const selected = current.includes(rowId);\n const rowIds = options.multi\n ? options.toggle && selected\n ? current.filter((id) => id !== rowId)\n : selected\n ? current\n : [...current, rowId]\n : options.toggle && selected\n ? []\n : [rowId];\n\n return {\n ...state,\n selection: {\n ...state.selection,\n rowIds,\n },\n };\n}\n\nexport function selectRows<TData>(state: CominsTableState<TData>, rowIds: readonly CominsRowId[]) {\n return {\n ...state,\n selection: {\n ...state.selection,\n rowIds: [...rowIds],\n },\n };\n}\n\nexport function areCellAddressesEqual(left: CominsCellAddress, right: CominsCellAddress) {\n return left.rowId === right.rowId && left.columnId === right.columnId;\n}\n\nexport function selectCell<TData>(\n state: CominsTableState<TData>,\n cell: CominsCellAddress,\n options: CominsCellSelectionOptions = {},\n) {\n const current = state.selection.cells ?? (state.selection.cell ? [state.selection.cell] : []);\n const selected = current.some((candidate) => areCellAddressesEqual(candidate, cell));\n const cells = options.multi\n ? options.toggle && selected\n ? current.filter((candidate) => !areCellAddressesEqual(candidate, cell))\n : selected\n ? current\n : [...current, cell]\n : options.toggle && selected\n ? []\n : [cell];\n const activeCell = cells.some((candidate) => areCellAddressesEqual(candidate, cell))\n ? cell\n : (cells.at(-1) ?? null);\n\n return {\n ...state,\n selection: {\n ...state.selection,\n cell: activeCell,\n cells,\n range: null,\n },\n };\n}\n\nexport function selectCellRange<TData>(state: CominsTableState<TData>, range: CominsCellRange) {\n return {\n ...state,\n selection: {\n ...state.selection,\n cell: range.focus,\n cells: [],\n range,\n },\n };\n}\n\nexport function clearCominsCellRange<TData>(state: CominsTableState<TData>) {\n return {\n ...state,\n selection: {\n ...state.selection,\n range: null,\n },\n };\n}\n\nexport function clearCominsSelection<TData>(state: CominsTableState<TData>) {\n return {\n ...state,\n selection: createEmptySelection(),\n };\n}\n\nexport function isCominsRowSelected<TData>(state: Pick<CominsTableState<TData>, \"selection\">, rowId: CominsRowId) {\n return state.selection.rowIds.includes(rowId);\n}\n\nexport function isCominsCellSelected<TData>(state: Pick<CominsTableState<TData>, \"selection\">, cell: CominsCellAddress) {\n const selectedCells = state.selection.cells;\n\n if (selectedCells && selectedCells.length > 0) {\n return selectedCells.some((candidate) => areCellAddressesEqual(candidate, cell));\n }\n\n return state.selection.cell !== null && areCellAddressesEqual(state.selection.cell, cell);\n}\n\nexport function getCominsSelectedCellRange<TData>(\n state: CominsTableState<TData>,\n range: CominsCellRange | null = state.selection.range,\n rowIds: readonly CominsRowId[] = state.rowIds,\n) {\n if (!range) {\n return [];\n }\n\n const visibleColumns = getCominsVisibleColumns(state);\n const bounds = getCellRangeBounds(state, range, rowIds);\n\n if (!bounds) {\n return [];\n }\n\n const cells: CominsCellAddress[] = [];\n\n for (let rowIndex = bounds.rowStart; rowIndex <= bounds.rowEnd; rowIndex += 1) {\n const rowId = bounds.rowIds[rowIndex];\n\n if (rowId === undefined) {\n continue;\n }\n\n for (let columnIndex = bounds.columnStart; columnIndex <= bounds.columnEnd; columnIndex += 1) {\n const column = visibleColumns[columnIndex];\n\n if (column) {\n cells.push({ columnId: column.id, rowId });\n }\n }\n }\n\n return cells;\n}\n\nexport function isCominsCellInSelectedRange<TData>(\n state: CominsTableState<TData>,\n cell: CominsCellAddress,\n rowIds: readonly CominsRowId[] = state.rowIds,\n) {\n return getCominsSelectedCellRange(state, state.selection.range, rowIds).some(\n (selected) => selected.rowId === cell.rowId && selected.columnId === cell.columnId,\n );\n}\n","import type {\n CominsRowId,\n CominsSortState,\n CominsSortModel,\n CominsPaginationState,\n CominsRowUpdate,\n CominsVirtualRowsOptions,\n CominsVirtualRows,\n CominsTableRuntimeColumn,\n CominsTableState,\n CominsTableStateInput,\n} from \"../model\";\nimport {\n normalizeColumns,\n normalizeColumnGroups,\n normalizeColumnState,\n normalizeColumnGroupState,\n normalizeColumnOrder,\n} from \"../layout/columns\";\nimport {\n createEmptySelection,\n} from \"../selection/state\";\nimport {\n findRowIndex,\n findColumn,\n getNestedFieldValue,\n} from \"./access\";\n\nexport type CominsRowGroupMoveOptions<TData> = {\n getRowGroupId: (row: TData, dataIndex: number) => CominsRowId;\n setRowGroupId?: (params: {\n fromGroupId: CominsRowId;\n row: TData;\n rowId: CominsRowId;\n toGroupId: CominsRowId;\n }) => TData;\n sourceRowId: CominsRowId;\n targetGroupId: CominsRowId;\n targetRowId?: CominsRowId;\n};\n\nexport function defaultGetRowId<TData>(_row: TData, index: number) {\n return index;\n}\n\nexport function useRowsReference<TData>(rows: readonly TData[]) {\n return rows as TData[];\n}\n\nexport function areRowIdsEqual(left: readonly CominsRowId[], right: readonly CominsRowId[]) {\n return left.length === right.length && left.every((id, index) => id === right[index]);\n}\n\nexport function withRows<TData>(\n state: CominsTableState<TData>,\n rows: TData[],\n options: { resetSelection?: boolean } = {},\n): CominsTableState<TData> {\n const rowIds = rows.map(state.getRowId);\n const shouldResetSelection = options.resetSelection === true || !areRowIdsEqual(state.rowIds, rowIds);\n\n return {\n ...state,\n rowIds,\n rows,\n selection: shouldResetSelection ? createEmptySelection() : state.selection,\n };\n}\n\nexport function areSortModelsEqual(left: CominsSortModel, right: CominsSortModel) {\n return (\n left.length === right.length &&\n left.every(\n (rule, index) => rule.columnId === right[index]?.columnId && rule.direction === right[index]?.direction,\n )\n );\n}\n\nexport function normalizeSortModel<TData>(\n columns: ReadonlyArray<CominsTableRuntimeColumn<TData>>,\n sortModel: CominsSortModel,\n): CominsSortState[] {\n const sortableColumnIds = new Set(columns.filter((column) => Boolean(column.sort)).map((column) => column.id));\n const usedColumnIds = new Set<string>();\n const normalized: CominsSortState[] = [];\n\n for (const rule of sortModel) {\n if (\n !sortableColumnIds.has(rule.columnId) ||\n usedColumnIds.has(rule.columnId) ||\n (rule.direction !== \"asc\" && rule.direction !== \"desc\")\n ) {\n continue;\n }\n\n usedColumnIds.add(rule.columnId);\n normalized.push({ columnId: rule.columnId, direction: rule.direction });\n }\n\n return normalized;\n}\n\nexport function defaultCompare(left: unknown, right: unknown) {\n if (typeof left === \"number\" && typeof right === \"number\") {\n return left - right;\n }\n\n return String(left ?? \"\").localeCompare(String(right ?? \"\"));\n}\n\nexport function createCominsTableState<TData>({\n columnLayout,\n columnGroups,\n columns,\n getRowId = defaultGetRowId,\n pagination,\n rows,\n showHeader = true,\n sort = null,\n sortModel,\n}: CominsTableStateInput<TData>): CominsTableState<TData> {\n const nextRows = useRowsReference(rows);\n const nextColumns = normalizeColumns(columns);\n const nextColumnGroups = normalizeColumnGroups(nextColumns, columnGroups);\n const nextSortModel = normalizeSortModel(nextColumns, sortModel ?? (sort ? [sort] : []));\n\n return {\n columnOrder: normalizeColumnOrder(nextColumns, columnLayout, nextColumnGroups),\n columnGroups: nextColumnGroups,\n columnGroupState: normalizeColumnGroupState(nextColumnGroups, columnLayout),\n columns: nextColumns,\n columnState: normalizeColumnState(nextColumns, columnLayout),\n getRowId,\n pagination: {\n pageIndex: pagination?.pageIndex ?? 0,\n pageSize: pagination?.pageSize ?? Math.max(nextRows.length, 1),\n },\n rowIds: nextRows.map(getRowId),\n rows: nextRows,\n selection: createEmptySelection(),\n showHeader,\n sort: nextSortModel[0] ?? null,\n sortModel: nextSortModel,\n };\n}\n\nexport function queryCominsRows<TData>(\n state: Pick<CominsTableState<TData>, \"rows\">,\n predicate?: (row: TData, index: number) => boolean,\n) {\n return predicate ? state.rows.filter(predicate) : [...state.rows];\n}\n\nexport function replaceCominsRows<TData>(state: CominsTableState<TData>, rows: readonly TData[]) {\n return withRows(state, useRowsReference(rows), { resetSelection: true });\n}\n\nexport function addCominsRows<TData>(state: CominsTableState<TData>, rows: readonly TData[]) {\n return withRows(state, [...state.rows, ...rows]);\n}\n\nexport function updateCominsRows<TData>(\n state: CominsTableState<TData>,\n updates: ReadonlyArray<CominsRowUpdate<TData>>,\n) {\n const updateMap = new Map(updates.map((update) => [update.id, update.patch]));\n const rows = state.rows.map((row, index) => {\n const rowId = state.rowIds[index];\n const patch = rowId === undefined ? undefined : updateMap.get(rowId);\n\n if (!patch) {\n return row;\n }\n\n return typeof patch === \"function\" ? patch(row) : { ...row, ...patch };\n });\n\n return withRows(state, rows);\n}\n\nexport function deleteCominsRows<TData>(state: CominsTableState<TData>, rowIds: readonly CominsRowId[]) {\n const deleteIds = new Set(rowIds);\n\n return withRows(\n state,\n state.rows.filter((_row, index) => {\n const rowId = state.rowIds[index];\n\n return rowId === undefined || !deleteIds.has(rowId);\n }),\n );\n}\n\nexport function setCominsHeaderVisible<TData>(state: CominsTableState<TData>, showHeader: boolean) {\n return {\n ...state,\n showHeader,\n };\n}\n\nexport function setCominsPagination<TData>(\n state: CominsTableState<TData>,\n pagination: Partial<CominsPaginationState>,\n) {\n return {\n ...state,\n pagination: {\n pageIndex: pagination.pageIndex ?? state.pagination.pageIndex,\n pageSize: pagination.pageSize ?? state.pagination.pageSize,\n },\n };\n}\n\nexport function setCominsSortState<TData>(\n state: CominsTableState<TData>,\n sort: CominsSortState | null,\n) {\n return setCominsSortModel(state, sort ? [sort] : []);\n}\n\nexport function setCominsSortModel<TData>(\n state: CominsTableState<TData>,\n sortModel: CominsSortModel,\n) {\n const nextSortModel = normalizeSortModel(state.columns, sortModel);\n const nextSort = nextSortModel[0] ?? null;\n\n if (areSortModelsEqual(state.sortModel, nextSortModel)) {\n return state;\n }\n\n return {\n ...state,\n sort: nextSort,\n sortModel: nextSortModel,\n };\n}\n\nexport function clearCominsSortState<TData>(state: CominsTableState<TData>) {\n return setCominsSortModel(state, []);\n}\n\nexport function getCominsSortedRowIndexes<TData>(\n state: CominsTableState<TData>,\n sourceIndexes: readonly number[] = state.rows.map((_row, index) => index),\n) {\n const indexes = [...sourceIndexes];\n\n if (state.sortModel.length === 0) {\n return indexes;\n }\n\n return [...indexes].sort((leftIndex, rightIndex) => {\n const leftRow = state.rows[leftIndex]!;\n const rightRow = state.rows[rightIndex]!;\n\n for (const rule of state.sortModel) {\n const column = findColumn(state, rule.columnId);\n\n if (!column?.sort) {\n continue;\n }\n\n const leftValue = getCominsCellValue(state, leftRow, column.id);\n const rightValue = getCominsCellValue(state, rightRow, column.id);\n const result =\n typeof column.sort === \"function\"\n ? column.sort(leftValue, rightValue, leftRow, rightRow)\n : defaultCompare(leftValue, rightValue);\n\n if (result !== 0) {\n return rule.direction === \"desc\" ? result * -1 : result;\n }\n }\n\n return leftIndex - rightIndex;\n });\n}\n\nexport function sortCominsRows<TData>(\n state: CominsTableState<TData>,\n sort: CominsSortState | null,\n) {\n const sortedState = setCominsSortState(state, sort);\n const indexes = getCominsSortedRowIndexes(sortedState);\n const rows = indexes.map((index) => sortedState.rows[index]!);\n\n return withRows(sortedState, rows);\n}\n\nexport function getCominsPageRows<TData>(\n state: CominsTableState<TData>,\n pagination: Partial<CominsPaginationState> = {},\n) {\n const pageIndex = pagination.pageIndex ?? state.pagination.pageIndex;\n const pageSize = pagination.pageSize ?? state.pagination.pageSize;\n const start = Math.max(0, pageIndex) * Math.max(1, pageSize);\n const indexes = getCominsSortedRowIndexes(state).slice(start, start + Math.max(1, pageSize));\n\n return indexes.map((index) => state.rows[index]!);\n}\n\nexport function getCominsVirtualRows<TData>(\n state: CominsTableState<TData>,\n { overscan = 2, rowHeight, scrollTop, viewportHeight }: CominsVirtualRowsOptions,\n): CominsVirtualRows<TData> {\n const safeRowHeight = Math.max(1, rowHeight);\n const rowIndexes = getCominsSortedRowIndexes(state);\n const totalRows = rowIndexes.length;\n const totalHeight = totalRows * safeRowHeight;\n const startIndex = Math.max(0, Math.floor(Math.max(0, scrollTop) / safeRowHeight) - Math.max(0, overscan));\n const endIndex = Math.min(\n totalRows,\n Math.ceil((Math.max(0, scrollTop) + Math.max(0, viewportHeight)) / safeRowHeight) + Math.max(0, overscan),\n );\n const topSpacerHeight = startIndex * safeRowHeight;\n\n return {\n bottomSpacerHeight: Math.max(0, totalHeight - topSpacerHeight - (endIndex - startIndex) * safeRowHeight),\n endIndex,\n rows: rowIndexes.slice(startIndex, endIndex).map((index) => state.rows[index]!),\n startIndex,\n topSpacerHeight,\n totalHeight,\n };\n}\n\nexport function moveCominsRow<TData>(\n state: CominsTableState<TData>,\n rowId: CominsRowId,\n targetIndex: number,\n) {\n const currentIndex = findRowIndex(state, rowId);\n\n if (currentIndex < 0) {\n return state;\n }\n\n const rows = [...state.rows];\n const [row] = rows.splice(currentIndex, 1);\n\n if (row === undefined) {\n return state;\n }\n\n rows.splice(Math.max(0, Math.min(targetIndex, rows.length)), 0, row);\n\n return withRows(state, rows);\n}\n\nexport function moveCominsRowToGroup<TData>(\n state: CominsTableState<TData>,\n options: CominsRowGroupMoveOptions<TData>,\n) {\n const sourceIndex = findRowIndex(state, options.sourceRowId);\n const targetRowIndex = options.targetRowId === undefined\n ? -1\n : findRowIndex(state, options.targetRowId);\n\n if (\n sourceIndex < 0 ||\n options.targetRowId === options.sourceRowId ||\n (options.targetRowId !== undefined && targetRowIndex < 0)\n ) {\n return state;\n }\n\n const sourceRow = state.rows[sourceIndex];\n\n if (sourceRow === undefined) {\n return state;\n }\n\n const fromGroupId = options.getRowGroupId(sourceRow, sourceIndex);\n const membershipChanged = fromGroupId !== options.targetGroupId;\n\n if (membershipChanged && typeof options.setRowGroupId !== \"function\") {\n return state;\n }\n\n if (targetRowIndex >= 0) {\n const targetRow = state.rows[targetRowIndex];\n\n if (\n targetRow === undefined ||\n options.getRowGroupId(targetRow, targetRowIndex) !== options.targetGroupId\n ) {\n return state;\n }\n }\n\n const movedRow = membershipChanged\n ? options.setRowGroupId!({\n fromGroupId,\n row: sourceRow,\n rowId: options.sourceRowId,\n toGroupId: options.targetGroupId,\n })\n : sourceRow;\n const rows = [...state.rows];\n rows.splice(sourceIndex, 1);\n let targetIndex: number;\n\n if (options.targetRowId !== undefined) {\n targetIndex = Math.max(0, Math.min(targetRowIndex, rows.length));\n } else {\n let lastTargetIndex = -1;\n\n rows.forEach((row, index) => {\n if (options.getRowGroupId(row, index) === options.targetGroupId) {\n lastTargetIndex = index;\n }\n });\n targetIndex = lastTargetIndex < 0 ? rows.length : lastTargetIndex + 1;\n }\n\n rows.splice(targetIndex, 0, movedRow);\n\n return withRows(state, rows);\n}\n\nexport function getCominsCellValue<TData>(\n state: { columns: readonly { id: string; field: string }[] },\n row: TData,\n columnId: string,\n) {\n const column = findColumn(state, columnId);\n\n return column ? getNestedFieldValue(row, column.field) : undefined;\n}\n","import type {\n CominsTableState, CominsRowId, CominsTableRuntimeColumn,\n CominsCellComponentPayload, CominsClipboardGuard, CominsCellAddress, CominsCopiedCell,\n} from \"../model\";\nimport { findColumn, findRowIndex } from \"../state/access\";\nimport { getCominsCellValue, updateCominsRows } from \"../state/table\";\n\nexport function setNestedFieldValue<TData>(row: TData, field: string, value: unknown): TData {\n if (!row || typeof row !== \"object\") {\n return row;\n }\n\n const keys = field.split(\".\");\n const [firstKey] = keys;\n\n if (!firstKey) {\n return row;\n }\n\n if (keys.length === 1) {\n return { ...row, [firstKey]: value };\n }\n\n const root = { ...(row as Record<string, unknown>) };\n let current: Record<string, unknown> = root;\n\n keys.slice(0, -1).forEach((key, index) => {\n const nextKey = keys[index + 1];\n const existing = current[key];\n const next =\n existing && typeof existing === \"object\" && !Array.isArray(existing)\n ? { ...(existing as Record<string, unknown>) }\n : {};\n\n current[key] = next;\n\n if (nextKey) {\n current = next;\n }\n });\n\n current[keys.at(-1)!] = value;\n\n return root as TData;\n}\n\nexport function createCellComponentParams<TData>(\n state: CominsTableState<TData>,\n row: TData,\n rowId: CominsRowId,\n column: CominsTableRuntimeColumn<TData>,\n rowIndex = state.rowIds.indexOf(rowId),\n): CominsCellComponentPayload<TData> {\n return {\n column: {\n definition: column,\n field: column.field,\n id: column.id,\n index: state.columns.findIndex((current) => current.id === column.id),\n label: column.label,\n },\n row: {\n data: row,\n dataIndex: rowIndex,\n disabled: false,\n id: rowId,\n index: rowIndex,\n selected: state.selection.rowIds.includes(rowId),\n },\n selection: {\n selectedRowCount: state.selection.rowIds.length,\n },\n value: getCominsCellValue(state, row, column.id),\n };\n}\n\nexport function resolveGuard<TData>(\n guard: CominsClipboardGuard<TData> | undefined,\n params: CominsCellComponentPayload<TData>,\n) {\n if (guard === undefined) {\n return true;\n }\n\n return typeof guard === \"boolean\" ? guard : guard(params);\n}\n\nexport function canUseCellClipboard<TData>(\n state: CominsTableState<TData>,\n row: TData | undefined,\n rowId: CominsRowId,\n column: CominsTableRuntimeColumn<TData>,\n kind: \"copy\" | \"paste\",\n rowIndex = state.rowIds.indexOf(rowId),\n) {\n if (row === undefined) {\n return false;\n }\n\n const params = createCellComponentParams(state, row, rowId, column, rowIndex);\n const props = column.cell;\n\n if (props?.disabled !== undefined && resolveGuard(props.disabled, params) === true) {\n return false;\n }\n\n return resolveGuard(kind === \"copy\" ? props?.copyable : props?.pasteable, params);\n}\n\nexport function isCominsCellDisabled<TData>(\n state: CominsTableState<TData>, row: TData, rowId: CominsRowId, column: CominsTableRuntimeColumn<TData>,\n) {\n const disabled = column.cell?.disabled;\n return disabled !== undefined && resolveGuard(disabled, createCellComponentParams(state, row, rowId, column)) === true;\n}\n\nexport function copyCominsCell<TData>(\n state: CominsTableState<TData>,\n { columnId, rowId }: CominsCellAddress,\n): CominsCopiedCell | null {\n const row = state.rows[findRowIndex(state, rowId)];\n const column = findColumn(state, columnId);\n\n if (!column || !canUseCellClipboard(state, row, rowId, column, \"copy\")) {\n return null;\n }\n\n const value = getCominsCellValue(state, row!, columnId);\n\n return {\n kind: \"cell\",\n text: value == null ? \"\" : String(value),\n value,\n };\n}\n\nexport function pasteCominsCell<TData>(\n state: CominsTableState<TData>,\n { columnId, rowId }: CominsCellAddress,\n copied: CominsCopiedCell | null,\n) {\n const column = findColumn(state, columnId);\n const row = state.rows[findRowIndex(state, rowId)];\n\n if (!copied || !column || !canUseCellClipboard(state, row, rowId, column, \"paste\")) {\n return state;\n }\n\n return updateCominsRows(state, [\n {\n id: rowId,\n patch: (currentRow) => setNestedFieldValue(currentRow, column.field, copied.value),\n },\n ]);\n}\n","import type {\n CominsTableState, CominsRowId, CominsTableRuntimeColumn, CominsCopiedRow, CominsPasteRowOptions,\n CominsCellAddress, CominsCellRange, CominsCopiedCellRange, CominsCopiedCellRangeCell, CominsFillCellRangeOptions,\n} from \"../model\";\nimport { addCominsRows, updateCominsRows, withRows, getCominsCellValue } from \"../state/table\";\nimport { findRowIndex, getNestedFieldValue } from \"../state/access\";\nimport { getCominsVisibleColumns } from \"../layout/columns\";\nimport { getCellRangeBounds } from \"../selection/state\";\nimport { parseCominsClipboardText, MAX_CLIPBOARD_CELLS } from \"../../clipboard-text\";\nimport { canUseCellClipboard, createCellComponentParams, setNestedFieldValue } from \"./cells\";\n\nfunction assignGeneratedRowId<TData>(row: TData, rowId: CominsRowId) {\n if (row && typeof row === \"object\" && \"id\" in row) {\n return { ...row, id: rowId } as TData;\n }\n\n return row;\n}\n\nfunction createCopiedRowId(existingIds: readonly CominsRowId[], sourceRowId: CominsRowId) {\n let index = 1;\n let nextId = `${String(sourceRowId)}-copy-${index}`;\n const ids = new Set(existingIds.map(String));\n\n while (ids.has(nextId)) {\n index += 1;\n nextId = `${String(sourceRowId)}-copy-${index}`;\n }\n\n return nextId;\n}\n\nexport function copyCominsRow<TData>(state: CominsTableState<TData>, rowId: CominsRowId): CominsCopiedRow<TData> {\n const row = state.rows[findRowIndex(state, rowId)];\n\n if (row === undefined) {\n throw new Error(`Cannot copy missing row: ${String(rowId)}`);\n }\n\n return {\n kind: \"row\",\n row,\n text: JSON.stringify(row),\n };\n}\n\nexport function pasteCominsRow<TData>(\n state: CominsTableState<TData>,\n copied: CominsCopiedRow<TData>,\n options: CominsPasteRowOptions<TData>,\n) {\n if (options.mode === \"append\") {\n const rowId = options.getNewRowId?.(copied.row);\n const row = rowId === undefined ? copied.row : assignGeneratedRowId(copied.row, rowId);\n\n return addCominsRows(state, [row]);\n }\n\n if (options.mode === \"insert-after\") {\n const targetIndex = findRowIndex(state, options.targetRowId);\n\n if (targetIndex < 0) {\n return state;\n }\n\n const sourceRowId = state.getRowId(copied.row, targetIndex);\n const rowId = options.getPastedRowId?.(copied.row) ?? createCopiedRowId(state.rowIds, sourceRowId);\n const row = assignGeneratedRowId(copied.row, rowId);\n const rows = [...state.rows];\n rows.splice(targetIndex + 1, 0, row);\n\n return withRows(state, rows);\n }\n\n return updateCominsRows(state, [\n {\n id: options.targetRowId,\n patch: assignGeneratedRowId(copied.row, options.targetRowId) as Partial<TData>,\n },\n ]);\n}\n\nexport function copyCominsCellRange<TData>(\n state: CominsTableState<TData>,\n range: CominsCellRange | null = state.selection.range,\n rowIds: readonly CominsRowId[] = state.rowIds,\n): CominsCopiedCellRange | null {\n if (!range) {\n return null;\n }\n\n const bounds = getCellRangeBounds(state, range, rowIds);\n\n if (!bounds) {\n return null;\n }\n\n const copiedRows: CominsCopiedCellRangeCell[][] = [];\n\n for (let rowIndex = bounds.rowStart; rowIndex <= bounds.rowEnd; rowIndex += 1) {\n const rowId = bounds.rowIds[rowIndex];\n const dataIndex = rowId === undefined ? -1 : findRowIndex(state, rowId);\n const row = state.rows[dataIndex];\n const copiedCells: CominsCopiedCellRangeCell[] = [];\n\n for (let columnIndex = bounds.columnStart; columnIndex <= bounds.columnEnd; columnIndex += 1) {\n const column = bounds.visibleColumns[columnIndex];\n\n if (row === undefined || rowId === undefined || !column || !canUseCellClipboard(state, row, rowId, column, \"copy\")) {\n copiedCells.push(null);\n continue;\n }\n\n const value = getCominsCellValue(state, row, column.id);\n copiedCells.push({\n columnId: column.id,\n text: value == null ? \"\" : String(value),\n value,\n });\n }\n\n copiedRows.push(copiedCells);\n }\n\n return {\n kind: \"cell-range\",\n rows: copiedRows,\n text: copiedRows.map((row) => row.map((cell) => cell?.text ?? \"\").join(\"\\t\")).join(\"\\n\"),\n };\n}\n\nexport function pasteCominsCellRange<TData>(\n state: CominsTableState<TData>,\n target: CominsCellAddress,\n copied: CominsCopiedCellRange | null,\n rowIds: readonly CominsRowId[] = state.rowIds,\n) {\n if (!copied) {\n return state;\n }\n\n const visibleColumns = getCominsVisibleColumns(state);\n const targetRowIndex = rowIds.indexOf(target.rowId);\n const targetColumnIndex = visibleColumns.findIndex((column) => column.id === target.columnId);\n const rows = [...state.rows];\n\n if (targetRowIndex < 0 || targetColumnIndex < 0) {\n return state;\n }\n\n let changed = false;\n\n copied.rows.forEach((copiedRow, rowOffset) => {\n const rowId = rowIds[targetRowIndex + rowOffset];\n const rowIndex = rowId === undefined ? -1 : findRowIndex(state, rowId);\n const row = rows[rowIndex];\n\n if (row === undefined || rowId === undefined) {\n return;\n }\n\n copiedRow.forEach((copiedCell, columnOffset) => {\n const column = visibleColumns[targetColumnIndex + columnOffset];\n\n if (!copiedCell || !column || !canUseCellClipboard(state, row, rowId, column, \"paste\")) {\n return;\n }\n\n rows[rowIndex] = setNestedFieldValue(rows[rowIndex]!, column.field, copiedCell.value);\n changed = true;\n });\n });\n\n return changed ? withRows(state, rows) : state;\n}\n\nexport function pasteCominsText<TData>(\n state: CominsTableState<TData>,\n target: CominsCellAddress,\n text: string,\n rowIds: readonly CominsRowId[] = state.rowIds,\n) {\n const matrix = parseCominsClipboardText(text);\n const columns = getCominsVisibleColumns(state);\n const firstRow = rowIds.indexOf(target.rowId), firstColumn = columns.findIndex(column => column.id === target.columnId);\n if (firstRow < 0 || firstColumn < 0) return state;\n return applyClipboardMatrix(state, rowIds, firstRow, firstColumn, matrix.length,\n matrix.reduce((max, row) => Math.max(max, row.length), 0), (rowOffset, columnOffset, column, row, rowId, rowIndex) => {\n const value = matrix[rowOffset]?.[columnOffset];\n if (value === undefined) return null;\n const params = createCellComponentParams(state, row, rowId, column, rowIndex);\n return { value: column.cell?.parseClipboard ? column.cell.parseClipboard({ ...params, text: value }) : value };\n });\n}\n\nfunction applyClipboardMatrix<TData>(\n state: CominsTableState<TData>, rowIds: readonly CominsRowId[], rowStart: number, columnStart: number,\n height: number, width: number,\n read: (rowOffset: number, columnOffset: number, column: CominsTableRuntimeColumn<TData>, row: TData, rowId: CominsRowId, rowIndex: number) => { value: unknown } | null,\n) {\n if (height * width > MAX_CLIPBOARD_CELLS) throw new Error(\"Clipboard exceeds 100000 cells.\");\n const columns = getCominsVisibleColumns(state);\n const indexes = new Map(state.rowIds.map((id, index) => [id, index]));\n const rows = [...state.rows];\n let changed = false;\n for (let y = 0; y < height && rowStart + y < rowIds.length; y++) {\n const rowId = rowIds[rowStart + y]!;\n const index = indexes.get(rowId), row = index === undefined ? undefined : state.rows[index];\n if (index === undefined || row === undefined) continue;\n for (let x = 0; x < width && columnStart + x < columns.length; x++) {\n const column = columns[columnStart + x]!;\n if (!canUseCellClipboard(state, row, rowId, column, \"paste\", index)) continue;\n const cell = read(y, x, column, row, rowId, index);\n if (!cell || Object.is(getNestedFieldValue(rows[index], column.field), cell.value)) continue;\n rows[index] = setNestedFieldValue(rows[index]!, column.field, cell.value);\n changed = true;\n }\n }\n // Parsing and guards finish before publishing any changes; a thrown parser is atomic.\n return changed ? withRows(state, rows) : state;\n}\n\nexport function fillCominsCellRange<TData>(\n state: CominsTableState<TData>,\n { source, target }: CominsFillCellRangeOptions,\n rowIds: readonly CominsRowId[] = state.rowIds,\n) {\n const sourceRange = \"anchor\" in source ? source : { anchor: source, focus: source };\n const from = getCellRangeBounds(state, sourceRange, rowIds), to = getCellRangeBounds(state, target, rowIds);\n if (!from || !to) return state;\n const height = from.rowEnd - from.rowStart + 1, width = from.columnEnd - from.columnStart + 1;\n if (height * width > MAX_CLIPBOARD_CELLS) throw new Error(\"Clipboard exceeds 100000 cells.\");\n const indexes = new Map(state.rowIds.map((id, index) => [id, index]));\n const pattern = Array.from({ length: height }, (_, y) => {\n const id = rowIds[from.rowStart + y]!, index = indexes.get(id), row = index === undefined ? undefined : state.rows[index];\n return Array.from({ length: width }, (_, x) => {\n const column = from.visibleColumns[from.columnStart + x]!;\n return row === undefined || !canUseCellClipboard(state, row, id, column, \"copy\", index)\n ? null : { value: getNestedFieldValue(row, column.field) };\n });\n });\n const mod = (value: number, size: number) => ((value % size) + size) % size;\n return applyClipboardMatrix(state, rowIds, to.rowStart, to.columnStart,\n to.rowEnd - to.rowStart + 1, to.columnEnd - to.columnStart + 1,\n (y, x, column, row, rowId, rowIndex) => {\n const cell = pattern[mod(to.rowStart + y - from.rowStart, height)]![mod(to.columnStart + x - from.columnStart, width)]!;\n if (cell && !Object.is(getNestedFieldValue(row, column.field), cell.value) && column.cell?.validateFill) {\n const params = createCellComponentParams(state, row, rowId, column, rowIndex);\n if (column.cell.validateFill({ ...params, value: cell.value }) === false) {\n throw new Error(`Fill rejected for column \"${column.id}\".`);\n }\n }\n return cell;\n });\n}\n"],"mappings":"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"}
|
package/dist/clipboard.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { copyCominsCell, copyCominsCellRange, copyCominsRow, fillCominsCellRange, pasteCominsCell, pasteCominsCellRange, pasteCominsRow, pasteCominsText, parseCominsClipboardText, } from "./core";
|
|
2
|
-
export type { CominsClipboardGuard, CominsCopiedCell, CominsCopiedCellRange, CominsCopiedCellRangeCell, CominsCopiedRow, CominsFillCellRangeOptions, CominsPasteRowOptions, } from "./core";
|
|
1
|
+
export { copyCominsCell, copyCominsCellRange, copyCominsRow, fillCominsCellRange, pasteCominsCell, pasteCominsCellRange, pasteCominsRow, pasteCominsText, parseCominsClipboardText, } from "./react/core-compat";
|
|
2
|
+
export type { CominsClipboardGuard, CominsCopiedCell, CominsCopiedCellRange, CominsCopiedCellRangeCell, CominsCopiedRow, CominsFillCellRangeOptions, CominsPasteRowOptions, } from "./react/core-compat";
|
|
3
3
|
//# sourceMappingURL=clipboard.d.ts.map
|
package/dist/clipboard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,wBAAwB,GACzB,MAAM,
|
|
1
|
+
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EACf,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,qBAAqB,CAAC"}
|
package/dist/clipboard.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { it as e } from "./clipboard-CNrbmDue.js";
|
|
2
|
+
import { A as t, M as n, N as r, c as i, d as a, j as o, o as s, s as c } from "./core-compat-B4I2OHGY.js";
|
|
3
|
+
export { s as copyCominsCell, c as copyCominsCellRange, i as copyCominsRow, a as fillCominsCellRange, e as parseCominsClipboardText, t as pasteCominsCell, o as pasteCominsCellRange, n as pasteCominsRow, r as pasteCominsText };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CominsColumnRuntimeState, CominsColumnGroupRuntimeState } from "./model";
|
|
2
|
+
export type CominsWidthColumn = {
|
|
3
|
+
id: string;
|
|
4
|
+
width?: number;
|
|
5
|
+
minWidth?: number;
|
|
6
|
+
maxWidth?: number;
|
|
7
|
+
};
|
|
8
|
+
export type CominsColumnWidthState = {
|
|
9
|
+
columns: CominsWidthColumn[];
|
|
10
|
+
columnGroups: Array<{
|
|
11
|
+
id: string;
|
|
12
|
+
children: string[];
|
|
13
|
+
}>;
|
|
14
|
+
columnState: Record<string, CominsColumnRuntimeState>;
|
|
15
|
+
columnGroupState: Record<string, CominsColumnGroupRuntimeState>;
|
|
16
|
+
};
|
|
17
|
+
export declare function setColumnWidth<TState extends Pick<CominsColumnWidthState, "columnState">>(state: TState, columnId: string, width: number): TState;
|
|
18
|
+
export declare function getEffectiveColumnMinWidth(column: CominsWidthColumn): number;
|
|
19
|
+
export declare function getEffectiveColumnMaxWidth(column: CominsWidthColumn): number;
|
|
20
|
+
export declare function getRuntimeColumnWidth(state: CominsColumnWidthState, column: CominsWidthColumn): number;
|
|
21
|
+
export declare function clampColumnWidth(width: number, minWidth: number, maxWidth: number): number;
|
|
22
|
+
export declare function distributeRuntimeColumnWidths(state: CominsColumnWidthState, columns: Array<CominsWidthColumn>, targetWidth: number): number[];
|
|
23
|
+
export declare function setColumnWidthInsideParentGroup<TState extends CominsColumnWidthState>(state: TState, columnId: string, width: number): TState;
|
|
24
|
+
//# sourceMappingURL=column-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-layout.d.ts","sourceRoot":"","sources":["../src/column-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAGvF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,YAAY,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACxD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACtD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;CACjE,CAAC;AAGF,wBAAgB,cAAc,CAAC,MAAM,SAAS,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,EACvF,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CAQR;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,UAEnE;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,UAEnE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,iBAAiB,UAG1B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAEjF;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,EACjC,WAAW,EAAE,MAAM,YA8CpB;AAED,wBAAgB,+BAA+B,CAAC,MAAM,SAAS,sBAAsB,EACnF,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,UA4Cd"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type React from "react";
|
|
2
|
-
import type { CominsCellComponentConfig, CominsCellComponentPayload, CominsHeaderComponentConfig, CominsHeaderComponentPayload } from "./core";
|
|
2
|
+
import type { CominsCellComponentConfig, CominsCellComponentPayload, CominsHeaderComponentConfig, CominsHeaderComponentPayload } from "./react/core-compat";
|
|
3
3
|
export type CominsBuiltInComponentInteraction = {
|
|
4
4
|
requestRowSelection?: (request: {
|
|
5
5
|
event: React.KeyboardEvent<HTMLButtonElement> | React.MouseEvent<HTMLButtonElement>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-renderer.d.ts","sourceRoot":"","sources":["../src/component-renderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAG1B,2BAA2B,EAC3B,4BAA4B,EAE7B,MAAM,
|
|
1
|
+
{"version":3,"file":"component-renderer.d.ts","sourceRoot":"","sources":["../src/component-renderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAG1B,2BAA2B,EAC3B,4BAA4B,EAE7B,MAAM,qBAAqB,CAAC;AAmwB7B,MAAM,MAAM,iCAAiC,GAAG;IAC9C,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE;QAC9B,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACpF,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC;KACjC,KAAK,OAAO,CAAC;CACf,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,EACxD,SAAS,EAAE,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,EACnD,OAAO,EAAE,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,EAClD,WAAW,CAAC,EAAE,iCAAiC,GAC9C,KAAK,CAAC,SAAS,CAAC;AACnB,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,EACxD,SAAS,EAAE,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,EACrD,OAAO,EAAE,4BAA4B,CAAC,KAAK,EAAE,MAAM,CAAC,EACpD,WAAW,CAAC,EAAE,iCAAiC,GAC9C,KAAK,CAAC,SAAS,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CominsTableState, CominsRowId, CominsTableRuntimeColumn, CominsCellComponentPayload, CominsClipboardGuard, CominsCellAddress, CominsCopiedCell } from "../model";
|
|
2
|
+
export declare function setNestedFieldValue<TData>(row: TData, field: string, value: unknown): TData;
|
|
3
|
+
export declare function createCellComponentParams<TData>(state: CominsTableState<TData>, row: TData, rowId: CominsRowId, column: CominsTableRuntimeColumn<TData>, rowIndex?: number): CominsCellComponentPayload<TData>;
|
|
4
|
+
export declare function resolveGuard<TData>(guard: CominsClipboardGuard<TData> | undefined, params: CominsCellComponentPayload<TData>): boolean;
|
|
5
|
+
export declare function canUseCellClipboard<TData>(state: CominsTableState<TData>, row: TData | undefined, rowId: CominsRowId, column: CominsTableRuntimeColumn<TData>, kind: "copy" | "paste", rowIndex?: number): boolean;
|
|
6
|
+
export declare function isCominsCellDisabled<TData>(state: CominsTableState<TData>, row: TData, rowId: CominsRowId, column: CominsTableRuntimeColumn<TData>): boolean;
|
|
7
|
+
export declare function copyCominsCell<TData>(state: CominsTableState<TData>, { columnId, rowId }: CominsCellAddress): CominsCopiedCell | null;
|
|
8
|
+
export declare function pasteCominsCell<TData>(state: CominsTableState<TData>, { columnId, rowId }: CominsCellAddress, copied: CominsCopiedCell | null): CominsTableState<TData>;
|
|
9
|
+
//# sourceMappingURL=cells.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cells.d.ts","sourceRoot":"","sources":["../../../src/core/editing/cells.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAAE,WAAW,EAAE,wBAAwB,EACvD,0BAA0B,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EACtF,MAAM,UAAU,CAAC;AAIlB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAqC3F;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAC7C,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,GAAG,EAAE,KAAK,EACV,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,EACvC,QAAQ,SAA8B,GACrC,0BAA0B,CAAC,KAAK,CAAC,CAsBnC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAChC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,GAAG,SAAS,EAC9C,MAAM,EAAE,0BAA0B,CAAC,KAAK,CAAC,WAO1C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,GAAG,EAAE,KAAK,GAAG,SAAS,EACtB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,EACvC,IAAI,EAAE,MAAM,GAAG,OAAO,EACtB,QAAQ,SAA8B,WAcvC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EACxC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,WAIxG;AAED,wBAAgB,cAAc,CAAC,KAAK,EAClC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,iBAAiB,GACrC,gBAAgB,GAAG,IAAI,CAezB;AAED,wBAAgB,eAAe,CAAC,KAAK,EACnC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,iBAAiB,EACtC,MAAM,EAAE,gBAAgB,GAAG,IAAI,2BAehC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CominsTableState, CominsRowId, CominsCopiedRow, CominsPasteRowOptions, CominsCellAddress, CominsCellRange, CominsCopiedCellRange, CominsFillCellRangeOptions } from "../model";
|
|
2
|
+
export declare function copyCominsRow<TData>(state: CominsTableState<TData>, rowId: CominsRowId): CominsCopiedRow<TData>;
|
|
3
|
+
export declare function pasteCominsRow<TData>(state: CominsTableState<TData>, copied: CominsCopiedRow<TData>, options: CominsPasteRowOptions<TData>): CominsTableState<TData>;
|
|
4
|
+
export declare function copyCominsCellRange<TData>(state: CominsTableState<TData>, range?: CominsCellRange | null, rowIds?: readonly CominsRowId[]): CominsCopiedCellRange | null;
|
|
5
|
+
export declare function pasteCominsCellRange<TData>(state: CominsTableState<TData>, target: CominsCellAddress, copied: CominsCopiedCellRange | null, rowIds?: readonly CominsRowId[]): CominsTableState<TData>;
|
|
6
|
+
export declare function pasteCominsText<TData>(state: CominsTableState<TData>, target: CominsCellAddress, text: string, rowIds?: readonly CominsRowId[]): CominsTableState<TData>;
|
|
7
|
+
export declare function fillCominsCellRange<TData>(state: CominsTableState<TData>, { source, target }: CominsFillCellRangeOptions, rowIds?: readonly CominsRowId[]): CominsTableState<TData>;
|
|
8
|
+
//# sourceMappingURL=clipboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../../src/core/editing/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAAE,WAAW,EAA4B,eAAe,EAAE,qBAAqB,EAC/F,iBAAiB,EAAE,eAAe,EAAE,qBAAqB,EAA6B,0BAA0B,EACjH,MAAM,UAAU,CAAC;AA6BlB,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAY/G;AAED,wBAAgB,cAAc,CAAC,KAAK,EAClC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,EAC9B,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC,2BA+BtC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,KAAK,GAAE,eAAe,GAAG,IAA4B,EACrD,MAAM,GAAE,SAAS,WAAW,EAAiB,GAC5C,qBAAqB,GAAG,IAAI,CA2C9B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EACxC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,qBAAqB,GAAG,IAAI,EACpC,MAAM,GAAE,SAAS,WAAW,EAAiB,2BAuC9C;AAED,wBAAgB,eAAe,CAAC,KAAK,EACnC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,SAAS,WAAW,EAAiB,2BAa9C;AA6BD,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,0BAA0B,EAC9C,MAAM,GAAE,SAAS,WAAW,EAAiB,2BA6B9C"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CominsExportGroupedOptions, CominsExportRowsOptions, CominsExportTreeOptions } from "../model";
|
|
2
|
+
/** Export every supplied node in preorder, independently of disclosure state. */
|
|
3
|
+
export declare function createCominsTreeExportOptions<TData>({ nodes, getRowId, ...options }: CominsExportTreeOptions<TData>): CominsExportRowsOptions<TData>;
|
|
4
|
+
/** Group order follows groups; member order follows the supplied rows. Empty groups add no data row. */
|
|
5
|
+
export declare function createCominsGroupedExportOptions<TData, TGroup>({ rows, groups, getGroupId, getRowGroupId, getRowId, ...options }: CominsExportGroupedOptions<TData, TGroup>): CominsExportRowsOptions<TData>;
|
|
6
|
+
//# sourceMappingURL=export-structure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-structure.d.ts","sourceRoot":"","sources":["../../../src/core/editing/export-structure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,uBAAuB,EAAe,MAAM,UAAU,CAAC;AAQ1H,iFAAiF;AACjF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EAAE,uBAAuB,CAAC,KAAK,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,CA2BpJ;AAED,wGAAwG;AACxG,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EAAE,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAsB5M"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CominsExportRowsOptions } from "../model";
|
|
2
|
+
export declare function exportCominsRowsToCsv<TData>({ columnOrder, columns, headerOverrides, rows, metadata, valueSource, }: CominsExportRowsOptions<TData>): string;
|
|
3
|
+
export declare function exportCominsRowsToJson<TData>({ columnOrder, columns, headerOverrides, rows, metadata, valueSource, }: CominsExportRowsOptions<TData>): string;
|
|
4
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/core/editing/export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,uBAAuB,EAAiD,MAAM,UAAU,CAAC;AAqE3H,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,EAC3C,WAAW,EACX,OAAO,EACP,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,WAAmB,GACpB,EAAE,uBAAuB,CAAC,KAAK,CAAC,UAahC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,EAC5C,WAAW,EACX,OAAO,EACP,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,WAAmB,GACpB,EAAE,uBAAuB,CAAC,KAAK,CAAC,UAahC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CominsCsvImportOptions } from "../model";
|
|
2
|
+
/** Parse and validate the complete CSV before mapping any application-owned rows. */
|
|
3
|
+
export declare function importCominsRowsFromCsv<TData>({ text, mapRow, hasHeader, maxCharacters, maxCells, }: CominsCsvImportOptions<TData>): TData[];
|
|
4
|
+
//# sourceMappingURL=import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/core/editing/import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAQvD,qFAAqF;AACrF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,EAC7C,IAAI,EACJ,MAAM,EACN,SAAgB,EAChB,aAAyB,EACzB,QAAkB,GACnB,EAAE,sBAAsB,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,CA0DzC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { CominsColumnPinned, CominsColumnRuntimeState, CominsColumnGroupRuntimeState, CominsColumnLayout, CominsTableRuntimeColumn, CominsTableRuntimeColumnGroup, CominsTableState, CominsHeaderCell } from "../model";
|
|
2
|
+
export declare function normalizeColumns<TColumn extends {
|
|
3
|
+
id?: string;
|
|
4
|
+
field: string;
|
|
5
|
+
}>(columns: readonly TColumn[]): (TColumn & {
|
|
6
|
+
id: string;
|
|
7
|
+
})[];
|
|
8
|
+
export declare function normalizeColumnGroups<TGroup extends {
|
|
9
|
+
id: string;
|
|
10
|
+
children: string[];
|
|
11
|
+
}>(columns: readonly {
|
|
12
|
+
id: string;
|
|
13
|
+
}[], columnGroups?: readonly TGroup[]): TGroup[];
|
|
14
|
+
export declare function normalizeColumnState<TData>(columns: ReadonlyArray<CominsTableRuntimeColumn<TData>>, layout?: Partial<CominsColumnLayout>): Record<string, CominsColumnRuntimeState>;
|
|
15
|
+
export declare function normalizeColumnGroupState(columnGroups: ReadonlyArray<CominsTableRuntimeColumnGroup>, layout?: Partial<CominsColumnLayout>): Record<string, CominsColumnGroupRuntimeState>;
|
|
16
|
+
export declare function getColumnGroupIdMap(columnGroups: ReadonlyArray<CominsTableRuntimeColumnGroup>): Map<string, string>;
|
|
17
|
+
export declare function findColumnGroupById(columnGroups: ReadonlyArray<CominsTableRuntimeColumnGroup>, groupId: string): import("../model").CominsTableColumnGroup | undefined;
|
|
18
|
+
export declare function normalizeColumnOrder<TData>(columns: ReadonlyArray<CominsTableRuntimeColumn<TData>>, layout?: Partial<CominsColumnLayout>, columnGroups?: ReadonlyArray<CominsTableRuntimeColumnGroup>): string[];
|
|
19
|
+
export declare function setCominsColumnWidth<TData>(state: CominsTableState<TData>, columnId: string, width: number): CominsTableState<TData>;
|
|
20
|
+
export declare function setCominsColumnHidden<TData>(state: CominsTableState<TData>, columnId: string, hidden: boolean): {
|
|
21
|
+
columnOrder: string[];
|
|
22
|
+
columnGroups: CominsTableRuntimeColumnGroup[];
|
|
23
|
+
columnGroupState: Record<string, CominsColumnGroupRuntimeState>;
|
|
24
|
+
columns: CominsTableRuntimeColumn<TData, unknown>[];
|
|
25
|
+
getRowId: (row: TData, index: number) => import("../model").CominsRowId;
|
|
26
|
+
pagination: import("../model").CominsPaginationState;
|
|
27
|
+
rowIds: import("../model").CominsRowId[];
|
|
28
|
+
rows: TData[];
|
|
29
|
+
selection: import("../model").CominsSelectionState;
|
|
30
|
+
showHeader: boolean;
|
|
31
|
+
sort: import("../model").CominsSortState | null;
|
|
32
|
+
sortModel: import("../model").CominsSortModel;
|
|
33
|
+
columnState: {
|
|
34
|
+
[x: string]: CominsColumnRuntimeState | {
|
|
35
|
+
pinned?: CominsColumnPinned;
|
|
36
|
+
width?: number;
|
|
37
|
+
hidden: boolean;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
export declare function setCominsColumnGroupHidden<TData>(state: CominsTableState<TData>, groupId: string, hidden: boolean): CominsTableState<TData>;
|
|
42
|
+
export declare function getColumnWidth<TData>(state: CominsTableState<TData>, column: CominsTableRuntimeColumn<TData>): number;
|
|
43
|
+
export declare function getColumnMinWidth<TData>(column: CominsTableRuntimeColumn<TData>): number;
|
|
44
|
+
export declare function getColumnMaxWidth<TData>(column: CominsTableRuntimeColumn<TData>): number;
|
|
45
|
+
export declare function clampWidth(width: number, minWidth: number, maxWidth: number): number;
|
|
46
|
+
export declare function distributeColumnGroupWidths<TData>(state: CominsTableState<TData>, columns: Array<CominsTableRuntimeColumn<TData>>, targetWidth: number): number[];
|
|
47
|
+
export declare function setCominsColumnGroupWidth<TData>(state: CominsTableState<TData>, groupId: string, width: number): CominsTableState<TData>;
|
|
48
|
+
export declare function doesColumnMoveChangeLockedPositions<TData>(state: CominsTableState<TData>, nextOrder: readonly string[]): boolean;
|
|
49
|
+
export declare function moveCominsColumn<TData>(state: CominsTableState<TData>, columnId: string, targetIndex: number): CominsTableState<TData>;
|
|
50
|
+
export declare function moveCominsColumnGroup<TData>(state: CominsTableState<TData>, groupId: string, targetIndex: number): CominsTableState<TData>;
|
|
51
|
+
export declare function serializeCominsColumnLayout<TData>(state: CominsTableState<TData>): CominsColumnLayout;
|
|
52
|
+
export declare function applyCominsColumnLayout<TData>(state: CominsTableState<TData>, layout: CominsColumnLayout): {
|
|
53
|
+
columnGroups: CominsTableRuntimeColumnGroup[];
|
|
54
|
+
columns: CominsTableRuntimeColumn<TData, unknown>[];
|
|
55
|
+
getRowId: (row: TData, index: number) => import("../model").CominsRowId;
|
|
56
|
+
pagination: import("../model").CominsPaginationState;
|
|
57
|
+
rowIds: import("../model").CominsRowId[];
|
|
58
|
+
rows: TData[];
|
|
59
|
+
selection: import("../model").CominsSelectionState;
|
|
60
|
+
showHeader: boolean;
|
|
61
|
+
sort: import("../model").CominsSortState | null;
|
|
62
|
+
sortModel: import("../model").CominsSortModel;
|
|
63
|
+
columnOrder: string[];
|
|
64
|
+
columnGroupState: Record<string, CominsColumnGroupRuntimeState>;
|
|
65
|
+
columnState: Record<string, CominsColumnRuntimeState>;
|
|
66
|
+
};
|
|
67
|
+
export declare function getCominsVisibleColumns<TData>(state: CominsTableState<TData>): CominsTableRuntimeColumn<TData>[];
|
|
68
|
+
export declare function getCominsHeaderRows<TData>(state: CominsTableState<TData>): Array<Array<CominsHeaderCell<TData>>>;
|
|
69
|
+
//# sourceMappingURL=columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../../src/core/layout/columns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACxB,6BAA6B,EAC7B,kBAAkB,EAClB,wBAAwB,EACxB,6BAA6B,EAC7B,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAYlB,wBAAgB,gBAAgB,CAAC,OAAO,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,SAAS,OAAO,EAAE;;KAK3G;AAED,wBAAgB,qBAAqB,CAAC,MAAM,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,EACrF,OAAO,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,EAClC,YAAY,GAAE,SAAS,MAAM,EAAO,YAkCrC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EACxC,OAAO,EAAE,aAAa,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,EACvD,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,4CAerC;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,aAAa,CAAC,6BAA6B,CAAC,EAC1D,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,iDAcrC;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,aAAa,CAAC,6BAA6B,CAAC,uBAU7F;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,aAAa,CAAC,6BAA6B,CAAC,EAC1D,OAAO,EAAE,MAAM,yDAGhB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EACxC,OAAO,EAAE,aAAa,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,EACvD,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACpC,YAAY,GAAE,aAAa,CAAC,6BAA6B,CAAM,YAkLhE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EACxC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,2BAGd;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EACzC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;EAYhB;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAC9C,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,2BAgBhB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAClC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,UAGxC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,UAE/E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,UAE/E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAE3E;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAC/C,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,OAAO,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,EAC/C,WAAW,EAAE,MAAM,YA8CpB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAC7C,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,2BA+Bd;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EACvD,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,SAAS,EAAE,SAAS,MAAM,EAAE,WA8C7B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EACpC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,2BAiEpB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EACzC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,2BA+BpB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAWrG;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,kBAAkB;;;;;;;;;;;;;;EAOxG;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,qCAoD5E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CA8EhH"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CominsEventRow } from "../model";
|
|
2
|
+
export type CominsRowHeight = number | "auto";
|
|
3
|
+
export type CominsRowHeightParams<TData> = {
|
|
4
|
+
row: CominsEventRow<TData>;
|
|
5
|
+
};
|
|
6
|
+
export type CominsRowMeasurement<TData> = {
|
|
7
|
+
row: TData;
|
|
8
|
+
layoutKey: string;
|
|
9
|
+
contentRevision?: object;
|
|
10
|
+
height: number;
|
|
11
|
+
};
|
|
12
|
+
export declare function normalizeCominsRowHeight(value: number | undefined, fallback?: number): number;
|
|
13
|
+
export declare function resolveCominsRowHeight<TData>(input: {
|
|
14
|
+
value: CominsRowHeight | undefined;
|
|
15
|
+
rowHeight: number;
|
|
16
|
+
estimate?: number;
|
|
17
|
+
measurement?: CominsRowMeasurement<TData>;
|
|
18
|
+
row: TData;
|
|
19
|
+
layoutKey: string;
|
|
20
|
+
contentRevision?: object;
|
|
21
|
+
}): {
|
|
22
|
+
auto: boolean;
|
|
23
|
+
height: number;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=row-height.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"row-height.d.ts","sourceRoot":"","sources":["../../../src/core/layout/row-height.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;AAC9C,MAAM,MAAM,qBAAqB,CAAC,KAAK,IAAI;IAAE,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;CAAE,CAAC;AAC1E,MAAM,MAAM,oBAAoB,CAAC,KAAK,IAAI;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,SAAK,UAEhF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE;IACnD,KAAK,EAAE,eAAe,GAAG,SAAS,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,EAAE,KAAK,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;;;EAWA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CominsViewportRange } from "../viewport/data";
|
|
2
|
+
/** Sparse measured blocks only: storage does not depend on total dataset length. */
|
|
3
|
+
export declare class CominsViewportHeightIndex {
|
|
4
|
+
readonly rowCount: number;
|
|
5
|
+
readonly estimate: number;
|
|
6
|
+
readonly blockSize: number;
|
|
7
|
+
readonly maxBlocks: number;
|
|
8
|
+
private blocks;
|
|
9
|
+
private deltas;
|
|
10
|
+
constructor(rowCount: number, estimate: number, blockSize?: number, maxBlocks?: number);
|
|
11
|
+
clone(): CominsViewportHeightIndex;
|
|
12
|
+
get measuredBlockCount(): number;
|
|
13
|
+
get measuredRowCount(): number;
|
|
14
|
+
getHeight(index: number): number;
|
|
15
|
+
getPrefixHeight(endExclusive: number): number;
|
|
16
|
+
getTotalHeight(): number;
|
|
17
|
+
findIndexAtOffset(offset: number): number;
|
|
18
|
+
updateHeight(index: number, value: number): number;
|
|
19
|
+
retain(range: CominsViewportRange): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=viewport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../../../src/core/layout/viewport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,oFAAoF;AACpF,qBAAa,yBAAyB;IAGxB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAAE,QAAQ,CAAC,SAAS;IAAQ,QAAQ,CAAC,SAAS;IAF9G,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,MAAM,CAA6B;IAC3C,YAAqB,QAAQ,EAAE,MAAM,EAAW,QAAQ,EAAE,MAAM,EAAW,SAAS,SAAM,EAAW,SAAS,SAAK,EAAI;IACvH,KAAK,8BAKJ;IACD,IAAI,kBAAkB,WAA+B;IACrD,IAAI,gBAAgB,WAAsF;IAC1G,SAAS,CAAC,KAAK,EAAE,MAAM,UAA8F;IACrH,eAAe,CAAC,YAAY,EAAE,MAAM,UAQnC;IACD,cAAc,WAAkD;IAChE,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAW/B;IACD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAYxC;IACD,MAAM,CAAC,KAAK,EAAE,mBAAmB,QAShC;CACF"}
|