comins-table 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","names":[],"sources":["../src/core.ts"],"sourcesContent":["import type React from \"react\";\n\nexport type CominsRowId = string | number;\n\nexport type CominsTableDensity = \"comfortable\" | \"compact\" | \"spacious\";\n\nexport type CominsTableTheme = {\n className?: string;\n density?: CominsTableDensity;\n style?: React.CSSProperties;\n};\n\nexport type CominsSortDirection = \"asc\" | \"desc\";\n\nexport type CominsSortState = {\n columnId: string;\n direction: CominsSortDirection;\n};\n\nexport type CominsCellFormatParams<TData, TValue = unknown> = {\n column: CominsTableRuntimeColumn<TData, TValue>;\n row: TData;\n rowId: CominsRowId;\n value: TValue;\n};\n\nexport type CominsColumnValueResolver<TData, TValue> =\n | TValue\n | ((params: CominsCellFormatParams<TData, TValue>) => TValue);\n\nexport type CominsComponentPrimitiveValue = string | number | boolean;\nexport type CominsComponentAlign = \"center\" | \"end\" | \"start\";\nexport type CominsComponentDirection = \"left\" | \"right\";\n\nexport type CominsComponentPlacement = {\n align?: CominsComponentAlign;\n direction?: CominsComponentDirection;\n id?: string;\n};\n\nexport type CominsTableComponentOption = {\n disabled?: boolean;\n label: React.ReactNode;\n value: CominsComponentPrimitiveValue;\n};\n\nexport type CominsVirtualListItem<TItem = unknown> = {\n data?: TItem;\n disabled?: boolean;\n label: React.ReactNode;\n searchText?: string;\n value: CominsComponentPrimitiveValue;\n};\n\nexport type CominsTableMenuItem =\n | {\n disabled?: boolean;\n label: React.ReactNode;\n type?: \"item\";\n value: CominsComponentPrimitiveValue;\n }\n | {\n label: React.ReactNode;\n type: \"label\";\n }\n | {\n type: \"divider\";\n };\n\nexport type CominsComponentColumnPayload<TData, TValue = unknown> = {\n definition: CominsTableRuntimeColumn<TData, TValue>;\n field: string;\n id: string;\n index: number;\n label: React.ReactNode;\n};\n\nexport type CominsComponentRowPayload<TData> = {\n data: TData;\n dataIndex: number;\n disabled: boolean;\n id: CominsRowId;\n index: number;\n selected: boolean;\n};\n\nexport type CominsCellComponentPayload<TData, TValue = unknown> = {\n column: CominsComponentColumnPayload<TData, TValue>;\n row: CominsComponentRowPayload<TData>;\n selection: {\n selectedRowCount: number;\n };\n value: TValue;\n};\n\nexport type CominsHeaderComponentPayload<TData, TValue = unknown> = {\n column: CominsComponentColumnPayload<TData, TValue>;\n layout: {\n hidden: boolean;\n width?: number;\n };\n sort: {\n direction: CominsSortDirection | null;\n enabled: boolean;\n };\n};\n\nexport type CominsClipboardGuard<TData, TValue = unknown> =\n | boolean\n | ((params: CominsCellComponentPayload<TData, TValue>) => boolean);\n\nexport type CominsColumnProps<TData, TValue = unknown> = {\n className?: string | ((params: CominsCellComponentPayload<TData, TValue>) => string | undefined);\n copyable?: CominsClipboardGuard<TData, TValue>;\n disabled?: CominsClipboardGuard<TData, TValue>;\n pasteable?: CominsClipboardGuard<TData, TValue>;\n style?: React.CSSProperties | ((params: CominsCellComponentPayload<TData, TValue>) => React.CSSProperties | undefined);\n};\n\nexport type CominsTableComponentProps<TPayload, TProps> = TProps | ((payload: TPayload) => TProps);\n\nexport type CominsTableOptions<TPayload> =\n | CominsTableComponentOption[]\n | ((payload: TPayload) => CominsTableComponentOption[]);\n\nexport type CominsTableMenuItems<TPayload> =\n | CominsTableMenuItem[]\n | ((payload: TPayload) => CominsTableMenuItem[]);\n\nexport type CominsVirtualListItems<TPayload> =\n | Array<CominsVirtualListItem>\n | ((payload: TPayload) => Array<CominsVirtualListItem>);\n\nexport type CominsButtonComponentConfig<TPayload> = {\n onClick?: (payload: TPayload & { event: React.MouseEvent<HTMLButtonElement> }) => void;\n props?: CominsTableComponentProps<TPayload, React.ButtonHTMLAttributes<HTMLButtonElement>>;\n type: \"button\";\n};\n\nexport type CominsInputCommitEvent =\n | React.ChangeEvent<HTMLInputElement>\n | React.FocusEvent<HTMLInputElement>\n | React.KeyboardEvent<HTMLInputElement>;\n\nexport type CominsInputComponentConfig<TPayload> = {\n onChange?: (payload: TPayload & { event: CominsInputCommitEvent; value: string }) => void;\n onValueChange?: (payload: TPayload & { value: string }) => void;\n props?: CominsTableComponentProps<TPayload, React.InputHTMLAttributes<HTMLInputElement>>;\n type: \"input\";\n};\n\nexport type CominsCheckboxComponentConfig<TPayload> = {\n onCheckedChange?: (payload: TPayload & { checked: boolean }) => void;\n props?: CominsTableComponentProps<TPayload, React.InputHTMLAttributes<HTMLInputElement>>;\n type: \"checkbox\";\n};\n\nexport type CominsRadioComponentConfig<TPayload> = {\n onValueChange?: (payload: TPayload & { value: string }) => void;\n options: CominsTableOptions<TPayload>;\n props?: CominsTableComponentProps<\n TPayload,\n React.HTMLAttributes<HTMLDivElement> & { value?: CominsComponentPrimitiveValue }\n >;\n type: \"radio\";\n};\n\nexport type CominsSelectComponentConfig<TPayload> = {\n onValueChange?: (payload: TPayload & { value: string }) => void;\n options: CominsTableOptions<TPayload>;\n props?: CominsTableComponentProps<TPayload, React.SelectHTMLAttributes<HTMLSelectElement>>;\n type: \"select\";\n};\n\nexport type CominsToggleComponentConfig<TPayload> = {\n onCheckedChange?: (payload: TPayload & { checked: boolean }) => void;\n props?: CominsTableComponentProps<\n TPayload,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { checked?: boolean }\n >;\n type: \"toggle\";\n};\n\nexport type CominsProgressComponentConfig<TPayload> = {\n props?: CominsTableComponentProps<\n TPayload,\n React.HTMLAttributes<HTMLDivElement> & { max?: number; value?: number }\n >;\n type: \"progress\";\n};\n\nexport type CominsMenuComponentConfig<TPayload> = {\n items: CominsTableMenuItems<TPayload>;\n onBeforeChange?: (\n payload: TPayload & { event?: Event | React.SyntheticEvent; open: boolean },\n ) => boolean | void;\n onOpenChange?: (payload: TPayload & { event?: Event | React.SyntheticEvent; open: boolean }) => void;\n onSelect?: (\n payload: TPayload & {\n event: React.MouseEvent<HTMLButtonElement>;\n item: Extract<CominsTableMenuItem, { value: CominsComponentPrimitiveValue }>;\n value: CominsComponentPrimitiveValue;\n },\n ) => void;\n props?: CominsTableComponentProps<TPayload, React.ButtonHTMLAttributes<HTMLButtonElement>>;\n type: \"menu\";\n};\n\nexport type CominsVirtualListSearchFilterPayload = {\n item: CominsVirtualListItem;\n itemIndex: number;\n value: string;\n};\n\nexport type CominsVirtualListComponentConfig<TPayload> = {\n items: CominsVirtualListItems<TPayload>;\n onClickItem?: (\n payload: TPayload & {\n event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>;\n item: CominsVirtualListItem;\n itemIndex: number;\n value: CominsComponentPrimitiveValue;\n },\n ) => void;\n onContextMenuItem?: (\n payload: TPayload & {\n event: React.MouseEvent<HTMLButtonElement>;\n item: CominsVirtualListItem;\n itemIndex: number;\n value: CominsComponentPrimitiveValue;\n },\n ) => void;\n props?: CominsTableComponentProps<\n TPayload,\n React.HTMLAttributes<HTMLDivElement> & {\n height?: number | string;\n itemHeight?: number;\n limit?: number;\n more?: boolean;\n searchable?: boolean;\n }\n >;\n searchFilter?: (payload: CominsVirtualListSearchFilterPayload) => boolean;\n type: \"virtual-list\";\n};\n\nexport type CominsHeaderComponentConfig<TData, TValue = unknown> =\n | CominsButtonComponentConfig<CominsHeaderComponentPayload<TData, TValue>>\n | CominsInputComponentConfig<CominsHeaderComponentPayload<TData, TValue>>\n | CominsCheckboxComponentConfig<CominsHeaderComponentPayload<TData, TValue>>\n | CominsRadioComponentConfig<CominsHeaderComponentPayload<TData, TValue>>\n | CominsSelectComponentConfig<CominsHeaderComponentPayload<TData, TValue>>\n | CominsToggleComponentConfig<CominsHeaderComponentPayload<TData, TValue>>\n | CominsProgressComponentConfig<CominsHeaderComponentPayload<TData, TValue>>\n | CominsMenuComponentConfig<CominsHeaderComponentPayload<TData, TValue>>;\n\nexport type CominsCellComponentConfig<TData, TValue = unknown> =\n | CominsButtonComponentConfig<CominsCellComponentPayload<TData, TValue>>\n | CominsInputComponentConfig<CominsCellComponentPayload<TData, TValue>>\n | CominsCheckboxComponentConfig<CominsCellComponentPayload<TData, TValue>>\n | CominsRadioComponentConfig<CominsCellComponentPayload<TData, TValue>>\n | CominsSelectComponentConfig<CominsCellComponentPayload<TData, TValue>>\n | CominsToggleComponentConfig<CominsCellComponentPayload<TData, TValue>>\n | CominsProgressComponentConfig<CominsCellComponentPayload<TData, TValue>>\n | CominsVirtualListComponentConfig<CominsCellComponentPayload<TData, TValue>>;\n\nexport type CominsHeaderComponent<TData, TValue = unknown> = CominsComponentPlacement &\n CominsHeaderComponentConfig<TData, TValue>;\n\nexport type CominsCellComponent<TData, TValue = unknown> = CominsComponentPlacement &\n CominsCellComponentConfig<TData, TValue>;\n\nexport type CominsTableCellConfig<TData, TValue = unknown> = {\n components?: Array<CominsCellComponent<TData, TValue>>;\n format?: (params: CominsCellComponentPayload<TData, TValue>) => React.ReactNode;\n props?:\n | CominsColumnProps<TData, TValue>\n | ((params: CominsCellComponentPayload<TData, TValue>) => CominsColumnProps<TData, TValue>);\n renderer?: (params: CominsCellComponentPayload<TData, TValue>) => React.ReactNode;\n tooltip?: string | ((params: CominsCellComponentPayload<TData, TValue>) => React.ReactNode);\n};\n\nexport type CominsTableHeaderConfig<TData, TValue = unknown> = {\n components?: Array<CominsHeaderComponent<TData, TValue>>;\n props?: React.ThHTMLAttributes<HTMLTableCellElement>;\n renderer?: (params: CominsHeaderComponentPayload<TData, TValue>) => React.ReactNode;\n};\n\nexport type CominsTableColumn<TData, TValue = unknown> = {\n cell?: CominsTableCellConfig<TData, TValue>;\n field: string;\n header?: CominsTableHeaderConfig<TData, TValue>;\n hidden?: boolean;\n id?: string;\n label: React.ReactNode;\n maxWidth?: number;\n minWidth?: number;\n sort?: boolean | ((left: TValue, right: TValue, leftRow: TData, rightRow: TData) => number);\n width?: number;\n};\n\nexport type CominsTableColumnGroup = {\n children: string[];\n hidden?: boolean;\n id: string;\n label: React.ReactNode;\n};\n\nexport type CominsTableRuntimeColumn<TData, TValue = unknown> = Omit<\n CominsTableColumn<TData, TValue>,\n \"id\"\n> & {\n id: string;\n};\n\nexport type CominsTableRuntimeColumnGroup = Omit<CominsTableColumnGroup, \"children\"> & {\n children: string[];\n};\n\nexport type CominsEventColumn<TData, TValue = unknown> = {\n definition: CominsTableRuntimeColumn<TData, TValue>;\n field: string;\n id: string;\n index: number;\n label: React.ReactNode;\n};\n\nexport type CominsColumnRuntimeState = {\n hidden?: boolean;\n width?: number;\n};\n\nexport type CominsColumnGroupRuntimeState = {\n hidden?: boolean;\n};\n\nexport type CominsColumnLayout = {\n columns: Record<string, CominsColumnRuntimeState>;\n groups?: Record<string, CominsColumnGroupRuntimeState>;\n order: string[];\n};\n\nexport type CominsPaginationState = {\n pageIndex: number;\n pageSize: number;\n};\n\nexport type CominsSelectionState = {\n cell: CominsCellAddress | null;\n range: CominsCellRange | null;\n rowIds: CominsRowId[];\n};\n\nexport type CominsTableState<TData> = {\n columnOrder: string[];\n columnGroups: CominsTableRuntimeColumnGroup[];\n columnGroupState: Record<string, CominsColumnGroupRuntimeState>;\n columns: Array<CominsTableRuntimeColumn<TData>>;\n columnState: Record<string, CominsColumnRuntimeState>;\n getRowId: (row: TData, index: number) => CominsRowId;\n pagination: CominsPaginationState;\n rowIds: CominsRowId[];\n rows: TData[];\n selection: CominsSelectionState;\n showHeader: boolean;\n sort: CominsSortState | null;\n theme: CominsTableTheme;\n};\n\nexport type CominsTableStateInput<TData> = {\n columnLayout?: Partial<CominsColumnLayout>;\n columnGroups?: ReadonlyArray<CominsTableColumnGroup>;\n columns: ReadonlyArray<CominsTableColumn<TData>>;\n getRowId?: (row: TData, index: number) => CominsRowId;\n pagination?: Partial<CominsPaginationState>;\n rows: readonly TData[];\n showHeader?: boolean;\n sort?: CominsSortState | null;\n theme?: CominsTableTheme;\n};\n\nexport type CominsRowUpdate<TData> = {\n id: CominsRowId;\n patch: Partial<TData> | ((row: TData) => TData);\n};\n\nexport type CominsVirtualRowsOptions = {\n overscan?: number;\n rowHeight: number;\n scrollTop: number;\n viewportHeight: number;\n};\n\nexport type CominsVirtualRows<TData> = {\n bottomSpacerHeight: number;\n endIndex: number;\n rows: TData[];\n startIndex: number;\n topSpacerHeight: number;\n totalHeight: number;\n};\n\nexport type CominsHeaderColumnCell<TData> = {\n colSpan: 1;\n column: CominsTableRuntimeColumn<TData>;\n columnId: string;\n groupId?: string;\n kind: \"column\";\n rowSpan: 1 | 2;\n};\n\nexport type CominsHeaderGroupCell = {\n colSpan: number;\n group: CominsTableRuntimeColumnGroup;\n groupId: string;\n kind: \"group\";\n rowSpan: 1;\n};\n\nexport type CominsHeaderCell<TData> = CominsHeaderColumnCell<TData> | CominsHeaderGroupCell;\n\nexport type CominsCopiedRow<TData> = {\n kind: \"row\";\n row: TData;\n text: string;\n};\n\nexport type CominsCopiedCell = {\n kind: \"cell\";\n text: string;\n value: unknown;\n};\n\nexport type CominsCopiedCellRangeCell = {\n columnId: string;\n text: string;\n value: unknown;\n} | null;\n\nexport type CominsCopiedCellRange = {\n kind: \"cell-range\";\n rows: CominsCopiedCellRangeCell[][];\n text: string;\n};\n\nexport type CominsExportFormat = \"csv\" | \"json\";\n\nexport type CominsExportValueSource = \"formatted\" | \"raw\";\n\nexport type CominsExportColumn<TData> = {\n format?: (row: TData, rowIndex: number) => unknown;\n id?: string;\n label?: string;\n value: (row: TData, rowIndex: number) => unknown;\n};\n\nexport type CominsExportRowsOptions<TData> = {\n columnOrder?: string[];\n columns: Array<CominsExportColumn<TData>>;\n headerOverrides?: Record<string, string>;\n rows: readonly TData[];\n valueSource?: CominsExportValueSource;\n};\n\nexport type CominsCellAddress = {\n columnId: string;\n rowId: CominsRowId;\n};\n\nexport type CominsCellRange = {\n anchor: CominsCellAddress;\n focus: CominsCellAddress;\n};\n\nexport type CominsPasteRowOptions<TData> =\n | {\n getNewRowId?: (row: TData) => CominsRowId;\n mode: \"append\";\n }\n | {\n getPastedRowId?: (row: TData) => CominsRowId;\n mode: \"insert-after\";\n targetRowId: CominsRowId;\n }\n | {\n mode: \"overwrite\" | \"replace\";\n targetRowId: CominsRowId;\n };\n\nexport type CominsRowSelectionOptions = {\n multi?: boolean;\n toggle?: boolean;\n};\n\nexport type CominsFillCellRangeOptions = {\n source: CominsCellAddress;\n target: CominsCellRange;\n};\n\nconst COMINS_MIN_COLUMN_WIDTH = 50;\n\nfunction defaultGetRowId<TData>(_row: TData, index: number) {\n return index;\n}\n\nfunction useRowsReference<TData>(rows: readonly TData[]) {\n return rows as TData[];\n}\n\nfunction normalizeColumns<TData>(columns: ReadonlyArray<CominsTableColumn<TData>>) {\n return columns.map((column) => ({\n ...column,\n id: column.id ?? column.field,\n }));\n}\n\nfunction normalizeColumnGroups<TData>(\n columns: ReadonlyArray<CominsTableRuntimeColumn<TData>>,\n columnGroups: ReadonlyArray<CominsTableColumnGroup> = [],\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: CominsTableRuntimeColumnGroup[] = [];\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\nfunction 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 width: layout?.columns?.[column.id]?.width ?? column.width,\n };\n }\n\n return state;\n}\n\nfunction 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 };\n }\n\n return state;\n}\n\nfunction 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\nfunction findColumnGroupById(\n columnGroups: ReadonlyArray<CominsTableRuntimeColumnGroup>,\n groupId: string,\n) {\n return columnGroups.find((group) => group.id === groupId);\n}\n\nfunction 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\n if (columnGroups.length === 0) {\n return flatOrder;\n }\n\n const groupIdByColumnId = getColumnGroupIdMap(columnGroups);\n const groupById = new Map(columnGroups.map((group) => [group.id, group]));\n const emittedGroups = new Set<string>();\n const nextOrder: string[] = [];\n\n for (const columnId of flatOrder) {\n const groupId = groupIdByColumnId.get(columnId);\n\n if (!groupId) {\n nextOrder.push(columnId);\n continue;\n }\n\n if (emittedGroups.has(groupId)) {\n continue;\n }\n\n const group = groupById.get(groupId);\n\n if (!group) {\n nextOrder.push(columnId);\n continue;\n }\n\n const groupChildrenInOrder = flatOrder.filter((currentId) => group.children.includes(currentId));\n nextOrder.push(...groupChildrenInOrder);\n emittedGroups.add(groupId);\n }\n\n return nextOrder;\n}\n\nfunction createEmptySelection(): CominsSelectionState {\n return {\n cell: null,\n range: null,\n rowIds: [],\n };\n}\n\nfunction areRowIdsEqual(left: readonly CominsRowId[], right: readonly CominsRowId[]) {\n return left.length === right.length && left.every((id, index) => id === right[index]);\n}\n\nfunction 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\nfunction findRowIndex<TData>(state: CominsTableState<TData>, rowId: CominsRowId) {\n return state.rowIds.findIndex((id) => id === rowId);\n}\n\nfunction findColumn<TData>(state: CominsTableState<TData>, columnId: string) {\n return state.columns.find((column) => column.id === columnId);\n}\n\nfunction 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\nfunction 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\nfunction createCellComponentParams<TData>(\n state: CominsTableState<TData>,\n row: TData,\n rowId: CominsRowId,\n column: CominsTableRuntimeColumn<TData>,\n): CominsCellComponentPayload<TData> {\n const rowIndex = state.rowIds.indexOf(rowId);\n\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\nfunction 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\nfunction resolveCellProps<TData>(\n state: CominsTableState<TData>,\n row: TData,\n rowId: CominsRowId,\n column: CominsTableRuntimeColumn<TData>,\n) {\n const params = createCellComponentParams(state, row, rowId, column);\n const props = column.cell?.props;\n\n return typeof props === \"function\" ? props(params) : props;\n}\n\nfunction getCellRangeBounds<TData>(state: CominsTableState<TData>, range: CominsCellRange) {\n const visibleColumns = getCominsVisibleColumns(state);\n const anchorRowIndex = findRowIndex(state, range.anchor.rowId);\n const focusRowIndex = findRowIndex(state, 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 rowStart: Math.min(anchorRowIndex, focusRowIndex),\n visibleColumns,\n };\n}\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\nfunction canUseCellClipboard<TData>(\n state: CominsTableState<TData>,\n row: TData | undefined,\n rowId: CominsRowId,\n column: CominsTableRuntimeColumn<TData>,\n kind: \"copy\" | \"paste\",\n) {\n if (row === undefined) {\n return false;\n }\n\n const params = createCellComponentParams(state, row, rowId, column);\n const props = resolveCellProps(state, row, rowId, column);\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\nfunction 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 theme = {},\n}: CominsTableStateInput<TData>): CominsTableState<TData> {\n const nextRows = useRowsReference(rows);\n const nextColumns = normalizeColumns(columns);\n const nextColumnGroups = normalizeColumnGroups(nextColumns, columnGroups);\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,\n theme,\n };\n}\n\nexport function queryCominsRows<TData>(\n state: CominsTableState<TData>,\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 setCominsTableTheme<TData>(state: CominsTableState<TData>, theme: CominsTableTheme) {\n return {\n ...state,\n theme: { ...state.theme, ...theme },\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 {\n ...state,\n sort,\n };\n}\n\nexport function clearCominsSortState<TData>(state: CominsTableState<TData>) {\n return setCominsSortState(state, null);\n}\n\nexport function setCominsColumnWidth<TData>(\n state: CominsTableState<TData>,\n columnId: string,\n width: number,\n) {\n return {\n ...state,\n columnState: {\n ...state.columnState,\n [columnId]: {\n ...state.columnState[columnId],\n width,\n },\n },\n };\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\nfunction getColumnWidth<TData>(\n state: CominsTableState<TData>,\n column: CominsTableRuntimeColumn<TData>,\n) {\n return state.columnState[column.id]?.width ?? column.width ?? 100;\n}\n\nfunction getColumnMinWidth<TData>(column: CominsTableRuntimeColumn<TData>) {\n return Math.max(COMINS_MIN_COLUMN_WIDTH, column.minWidth ?? COMINS_MIN_COLUMN_WIDTH);\n}\n\nfunction getColumnMaxWidth<TData>(column: CominsTableRuntimeColumn<TData>) {\n return column.maxWidth ?? Number.POSITIVE_INFINITY;\n}\n\nfunction clampWidth(width: number, minWidth: number, maxWidth: number) {\n return Math.min(maxWidth, Math.max(minWidth, width));\n}\n\nfunction 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 moveCominsColumn<TData>(\n state: CominsTableState<TData>,\n columnId: string,\n targetIndex: number,\n) {\n const groupIdByColumnId = getColumnGroupIdMap(state.columnGroups);\n const sourceGroupId = groupIdByColumnId.get(columnId);\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 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 (!group) {\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 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 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 selectCell<TData>(state: CominsTableState<TData>, cell: CominsCellAddress) {\n return {\n ...state,\n selection: {\n ...state.selection,\n cell,\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 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: CominsTableState<TData>, rowId: CominsRowId) {\n return state.selection.rowIds.includes(rowId);\n}\n\nexport function isCominsCellSelected<TData>(state: CominsTableState<TData>, cell: CominsCellAddress) {\n return state.selection.cell?.rowId === cell.rowId && state.selection.cell.columnId === cell.columnId;\n}\n\nexport function getCominsSelectedCellRange<TData>(\n state: CominsTableState<TData>,\n range: CominsCellRange | null = state.selection.range,\n) {\n if (!range) {\n return [];\n }\n\n const visibleColumns = getCominsVisibleColumns(state);\n const bounds = getCellRangeBounds(state, range);\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 = state.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>(state: CominsTableState<TData>, cell: CominsCellAddress) {\n return getCominsSelectedCellRange(state).some(\n (selected) => selected.rowId === cell.rowId && selected.columnId === cell.columnId,\n );\n}\n\nexport function getCominsVisibleColumns<TData>(state: CominsTableState<TData>) {\n const groupIdByColumnId = getColumnGroupIdMap(state.columnGroups);\n\n return state.columnOrder\n .map((columnId) => findColumn(state, columnId))\n .filter((column): column is CominsTableRuntimeColumn<TData> => Boolean(column))\n .filter((column) => {\n const groupId = groupIdByColumnId.get(column.id);\n\n return state.columnState[column.id]?.hidden !== true && (!groupId || state.columnGroupState[groupId]?.hidden !== true);\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 columnId of state.columnOrder) {\n if (!visibleColumnIds.has(columnId)) {\n continue;\n }\n\n const column = findColumn(state, columnId);\n\n if (!column) {\n continue;\n }\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 = state.columnOrder\n .filter((currentId) => group.children.includes(currentId) && visibleColumnIds.has(currentId))\n .map((currentId) => findColumn(state, currentId))\n .filter((currentColumn): currentColumn is CominsTableRuntimeColumn<TData> => Boolean(currentColumn));\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\nexport function getCominsSortedRowIndexes<TData>(state: CominsTableState<TData>) {\n const indexes = state.rows.map((_row, index) => index);\n\n if (!state.sort) {\n return indexes;\n }\n\n const column = findColumn(state, state.sort.columnId);\n\n if (!column || !column.sort) {\n return indexes;\n }\n\n return [...indexes].sort((leftIndex, rightIndex) => {\n const leftRow = state.rows[leftIndex]!;\n const rightRow = state.rows[rightIndex]!;\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 return state.sort?.direction === \"desc\" ? result * -1 : result;\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 getCominsCellValue<TData>(\n state: CominsTableState<TData>,\n row: TData,\n columnId: string,\n) {\n const column = findColumn(state, columnId);\n\n return column ? getNestedFieldValue(row, column.field) : undefined;\n}\n\nexport function formatCominsCellValue<TData>(\n state: CominsTableState<TData>,\n row: TData,\n rowId: CominsRowId,\n column: CominsTableRuntimeColumn<TData>,\n) {\n const value = getCominsCellValue(state, row, column.id);\n\n if (column.cell?.format) {\n return column.cell.format(createCellComponentParams(state, row, rowId, column));\n }\n\n return value == null ? \"\" : String(value);\n}\n\nexport function isCominsCellDisabled<TData>(\n state: CominsTableState<TData>,\n row: TData,\n rowId: CominsRowId,\n column: CominsTableRuntimeColumn<TData>,\n) {\n const props = resolveCellProps(state, row, rowId, column);\n\n return props?.disabled !== undefined && resolveGuard(props.disabled, createCellComponentParams(state, row, rowId, column)) === true;\n}\n\nexport function getCominsCellClassName<TData>(\n state: CominsTableState<TData>,\n row: TData,\n rowId: CominsRowId,\n column: CominsTableRuntimeColumn<TData>,\n) {\n const params = createCellComponentParams(state, row, rowId, column);\n const className = resolveCellProps(state, row, rowId, column)?.className;\n\n return typeof className === \"function\" ? className(params) : className;\n}\n\nexport function getCominsCellStyle<TData>(\n state: CominsTableState<TData>,\n row: TData,\n rowId: CominsRowId,\n column: CominsTableRuntimeColumn<TData>,\n) {\n const params = createCellComponentParams(state, row, rowId, column);\n const style = resolveCellProps(state, row, rowId, column)?.style;\n\n return typeof style === \"function\" ? style(params) : style;\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 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\nexport function copyCominsCellRange<TData>(\n state: CominsTableState<TData>,\n range: CominsCellRange | null = state.selection.range,\n): CominsCopiedCellRange | null {\n if (!range) {\n return null;\n }\n\n const bounds = getCellRangeBounds(state, range);\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 row = state.rows[rowIndex];\n const rowId = state.rowIds[rowIndex];\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) {\n if (!copied) {\n return state;\n }\n\n const visibleColumns = getCominsVisibleColumns(state);\n const targetRowIndex = findRowIndex(state, 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 rowIndex = targetRowIndex + rowOffset;\n const row = rows[rowIndex];\n const rowId = state.rowIds[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 fillCominsCellRange<TData>(\n state: CominsTableState<TData>,\n { source, target }: CominsFillCellRangeOptions,\n) {\n const copied = copyCominsCell(state, source);\n\n if (!copied) {\n return state;\n }\n\n return getCominsSelectedCellRange(state, target).reduce(\n (currentState, cell) => pasteCominsCell(currentState, cell, copied),\n state,\n );\n}\n\nfunction normalizeCominsExportColumns<TData>({\n columnOrder,\n columns,\n}: Pick<CominsExportRowsOptions<TData>, \"columnOrder\" | \"columns\">) {\n if (!columnOrder?.length) {\n return columns;\n }\n\n const columnsById = new Map(columns.map((column) => [column.id, column]));\n\n return columnOrder\n .map((id) => columnsById.get(id))\n .filter((column): column is CominsExportColumn<TData> => Boolean(column));\n}\n\nfunction stringifyCominsExportValue(value: unknown) {\n if (value === null || value === undefined) {\n return \"\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n\n return JSON.stringify(value);\n}\n\nfunction escapeCominsCsvCell(value: unknown) {\n const text = stringifyCominsExportValue(value);\n\n return /[\",\\r\\n]/u.test(text) ? `\"${text.replaceAll('\"', '\"\"')}\"` : text;\n}\n\nfunction getCominsExportHeader<TData>(column: CominsExportColumn<TData>, headerOverrides?: Record<string, string>) {\n if (column.id && headerOverrides?.[column.id] !== undefined) {\n return headerOverrides[column.id];\n }\n\n return column.label ?? column.id ?? \"\";\n}\n\nfunction getCominsExportValue<TData>(\n column: CominsExportColumn<TData>,\n row: TData,\n rowIndex: number,\n valueSource: CominsExportValueSource,\n) {\n if (valueSource === \"formatted\" && column.format) {\n return column.format(row, rowIndex);\n }\n\n return column.value(row, rowIndex);\n}\n\nexport function exportCominsRowsToCsv<TData>({\n columnOrder,\n columns,\n headerOverrides,\n rows,\n valueSource = \"raw\",\n}: CominsExportRowsOptions<TData>) {\n const exportColumns = normalizeCominsExportColumns({ columnOrder, columns });\n const lines = [\n exportColumns.map((column) => escapeCominsCsvCell(getCominsExportHeader(column, headerOverrides))).join(\",\"),\n ...rows.map((row, rowIndex) =>\n exportColumns.map((column) => escapeCominsCsvCell(getCominsExportValue(column, row, rowIndex, valueSource))).join(\",\"),\n ),\n ];\n\n return lines.join(\"\\n\");\n}\n\nexport function exportCominsRowsToJson<TData>({\n columnOrder,\n columns,\n headerOverrides,\n rows,\n valueSource = \"raw\",\n}: CominsExportRowsOptions<TData>) {\n const exportColumns = normalizeCominsExportColumns({ columnOrder, columns });\n const data = rows.map((row, rowIndex) =>\n Object.fromEntries(\n exportColumns.map((column) => [\n getCominsExportHeader(column, headerOverrides),\n getCominsExportValue(column, row, rowIndex, valueSource),\n ]),\n ),\n );\n\n return JSON.stringify(data, null, 2);\n}\n"],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import type React from "react";
2
+ export * from "./core";
3
+ export * from "./summary";
4
+ export * from "./tree";
5
+ import type { CominsTableSummaryConfig } from "./summary";
6
+ import type { CominsTreeNode } from "./tree";
7
+ import type { CominsColumnLayout, CominsTableColumn, CominsTableColumnGroup, CominsTableTheme, CominsEventColumn, CominsPaginationState, CominsRowId, CominsSelectionState, CominsSortState } from "./core";
8
+ type CominsClassValue = string | Record<string, boolean> | undefined;
9
+ type CominsRowPropValue<TData, TValue> = TValue | ((row: TData, index: number) => TValue);
10
+ export type CominsTableRowProps<TData> = {
11
+ className?: CominsRowPropValue<TData, CominsClassValue>;
12
+ disabled?: CominsRowPropValue<TData, boolean | undefined>;
13
+ draggable?: CominsRowPropValue<TData, boolean | undefined>;
14
+ style?: CominsRowPropValue<TData, React.CSSProperties | undefined>;
15
+ };
16
+ export type CominsEventRow<TData> = {
17
+ data: TData;
18
+ dataIndex: number;
19
+ id: CominsRowId;
20
+ index: number;
21
+ };
22
+ export type CominsRowEventPayload<TData, TEvent = React.MouseEvent<HTMLTableRowElement>> = {
23
+ event: TEvent;
24
+ index: number;
25
+ row: CominsEventRow<TData>;
26
+ };
27
+ export type CominsCellEventPayload<TData, TValue = unknown, TEvent = React.MouseEvent<HTMLTableCellElement>> = {
28
+ column: CominsEventColumn<TData, TValue>;
29
+ event: TEvent;
30
+ index: number;
31
+ row: CominsEventRow<TData>;
32
+ value: TValue;
33
+ };
34
+ export type CominsRowKeyboardEventPayload<TData> = CominsRowEventPayload<TData, React.KeyboardEvent<HTMLTableRowElement>>;
35
+ export type CominsCellKeyboardEventPayload<TData, TValue = unknown> = CominsCellEventPayload<TData, TValue, React.KeyboardEvent<HTMLTableCellElement>>;
36
+ export type CominsTableRef<TData = unknown> = {
37
+ clearSort: () => void;
38
+ getColumnLayout: () => CominsColumnLayout;
39
+ getSortState: () => CominsSortState | null;
40
+ setColumnLayout: (layout: CominsColumnLayout) => void;
41
+ setMoveTargetRow: (targetIdx: number, sourceIdx: number) => void;
42
+ setSelectedRow: (index: number) => void;
43
+ setSelectedRows: (indexes: number[]) => void;
44
+ setSortState: (sort: CominsSortState | null) => void;
45
+ };
46
+ export type CominsLazyLoadReason = "initial" | "scroll" | "refresh";
47
+ export type CominsLazyLoadRequest = {
48
+ limit: number;
49
+ offset: number;
50
+ reason: CominsLazyLoadReason;
51
+ signal: AbortSignal;
52
+ };
53
+ export type CominsLazyLoadResult<TData> = {
54
+ rows: readonly TData[];
55
+ total?: number;
56
+ };
57
+ export type CominsTableProps<TData> = {
58
+ "buffer-size"?: number;
59
+ cellSelection?: boolean;
60
+ className?: string;
61
+ columnGroups?: Array<CominsTableColumnGroup>;
62
+ columns: Array<CominsTableColumn<TData>>;
63
+ data: readonly TData[];
64
+ "data-testid"?: string;
65
+ emptyComponent?: React.ReactNode;
66
+ getRowId?: (row: TData, index: number) => CominsRowId;
67
+ hasMoreRows?: boolean;
68
+ infiniteScroll?: boolean;
69
+ infiniteScrollThreshold?: number;
70
+ lazyLoad?: boolean;
71
+ lazyLoadBatchSize?: number;
72
+ lazyLoadMode?: "append";
73
+ lazyLoadThreshold?: number;
74
+ loading?: boolean;
75
+ loadingComponent?: React.ReactNode;
76
+ loadingMore?: boolean;
77
+ onChangeColumnLayout?: (layout: CominsColumnLayout) => void;
78
+ onChangeData?: (data: TData[]) => void;
79
+ onChangeSelection?: (selection: CominsSelectionState) => void;
80
+ onChangeSort?: (sort: CominsSortState | null) => void;
81
+ onClickCell?: (payload: CominsCellEventPayload<TData>) => void;
82
+ onClickRow?: (payload: CominsRowEventPayload<TData>) => void;
83
+ onContextMenuCell?: (payload: CominsCellEventPayload<TData>) => void;
84
+ onContextMenuRow?: (payload: CominsRowEventPayload<TData>) => void;
85
+ onDoubleClickCell?: (payload: CominsCellEventPayload<TData>) => void;
86
+ onDoubleClickRow?: (payload: CominsRowEventPayload<TData>) => void;
87
+ onKeyDownCell?: (payload: CominsCellKeyboardEventPayload<TData>) => void;
88
+ onKeyDownRow?: (payload: CominsRowKeyboardEventPayload<TData>) => void;
89
+ onLazyLoad?: (request: CominsLazyLoadRequest) => Promise<CominsLazyLoadResult<TData>>;
90
+ onLoadMore?: () => void;
91
+ pagination?: Partial<CominsPaginationState>;
92
+ persistHeaderWhenEmpty?: boolean;
93
+ rowHeight?: number;
94
+ rowProps?: CominsTableRowProps<TData>;
95
+ showHeader?: boolean;
96
+ skeletonRowCount?: number;
97
+ style?: React.CSSProperties;
98
+ summary?: CominsTableSummaryConfig<TData>;
99
+ theme?: CominsTableTheme;
100
+ tree?: false;
101
+ virtualized?: boolean;
102
+ };
103
+ export type CominsTreeTableProps<TData> = Omit<CominsTableProps<TData>, "data" | "getRowId" | "hasMoreRows" | "infiniteScroll" | "infiniteScrollThreshold" | "lazyLoad" | "lazyLoadBatchSize" | "lazyLoadMode" | "lazyLoadThreshold" | "loadingMore" | "onChangeData" | "onLazyLoad" | "onLoadMore" | "pagination" | "rowProps" | "tree"> & {
104
+ data: readonly CominsTreeNode<TData>[];
105
+ getRowId: (item: TData, index: number) => CominsRowId;
106
+ hasMoreRows?: never;
107
+ infiniteScroll?: never;
108
+ infiniteScrollThreshold?: never;
109
+ lazyLoad?: never;
110
+ lazyLoadBatchSize?: never;
111
+ lazyLoadMode?: never;
112
+ lazyLoadThreshold?: never;
113
+ loadingMore?: never;
114
+ onChangeData?: (data: CominsTreeNode<TData>[]) => void;
115
+ onLazyLoad?: never;
116
+ onLoadMore?: never;
117
+ pagination?: never;
118
+ rowProps?: Omit<CominsTableRowProps<TData>, "draggable"> & {
119
+ draggable?: never;
120
+ };
121
+ tree: true;
122
+ };
123
+ export declare const CominsTable: <TData>(props: (CominsTableProps<TData> | CominsTreeTableProps<TData>) & React.RefAttributes<CominsTableRef<TData>>) => React.ReactElement | null;
124
+ export declare const cominsTablePackage = "comins-table";
125
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}