@iris-ui-kit/react 0.2.3 → 0.3.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/dist/admin.cjs +6 -3
- package/dist/admin.cjs.map +1 -1
- package/dist/admin.js +1 -1
- package/dist/async.cjs +16 -7
- package/dist/async.cjs.map +1 -1
- package/dist/async.d.cts +7 -6
- package/dist/async.d.ts +7 -6
- package/dist/async.js +1 -1
- package/dist/chunk-3772LKJP.js +942 -0
- package/dist/chunk-3772LKJP.js.map +1 -0
- package/dist/{chunk-TO7YVSAI.js → chunk-3KYNBLRY.js} +18 -9
- package/dist/chunk-3KYNBLRY.js.map +1 -0
- package/dist/{chunk-AUA5GBT6.js → chunk-4VPCQ3U4.js} +28 -27
- package/dist/chunk-4VPCQ3U4.js.map +1 -0
- package/dist/{chunk-V3KHE2WB.js → chunk-QKDOW7FG.js} +15 -9
- package/dist/chunk-QKDOW7FG.js.map +1 -0
- package/dist/{chunk-KRFZ5KL4.js → chunk-TDVRIHE6.js} +8 -5
- package/dist/chunk-TDVRIHE6.js.map +1 -0
- package/dist/{chunk-QZJXMCRR.js → chunk-VLWZSOTH.js} +2 -2
- package/dist/chunk-VLWZSOTH.js.map +1 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.cts +2 -2
- package/dist/data.d.ts +2 -2
- package/dist/data.js +1 -1
- package/dist/grid.cjs +1007 -0
- package/dist/grid.cjs.map +1 -0
- package/dist/grid.d.cts +324 -0
- package/dist/grid.d.ts +324 -0
- package/dist/grid.js +5 -0
- package/dist/grid.js.map +1 -0
- package/dist/index.cjs +14296 -2652
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1993 -251
- package/dist/index.d.ts +1993 -251
- package/dist/index.js +13031 -2362
- package/dist/index.js.map +1 -1
- package/dist/modal-utils.cjs +26 -25
- package/dist/modal-utils.cjs.map +1 -1
- package/dist/modal-utils.js +1 -1
- package/dist/skeletons.cjs +13 -7
- package/dist/skeletons.cjs.map +1 -1
- package/dist/skeletons.js +1 -1
- package/package.json +20 -15
- package/dist/chunk-AUA5GBT6.js.map +0 -1
- package/dist/chunk-KRFZ5KL4.js.map +0 -1
- package/dist/chunk-QZJXMCRR.js.map +0 -1
- package/dist/chunk-TO7YVSAI.js.map +0 -1
- package/dist/chunk-V3KHE2WB.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/grid/useGridCore.ts","../src/grid/legacyGridOptions.ts","../src/useStore.ts","../src/grid/useGridFeature.ts","../src/grid/useGridColumns.ts","../src/grid/useGridClipboard.ts","../src/grid/useGridFiltering.ts","../src/grid/useGridEditing.ts","../src/grid/useGridExpansion.ts","../src/grid/useGridPagination.ts","../src/grid/useGridRange.ts","../src/grid/useGridSelection.ts","../src/grid/useGridRows.ts","../src/grid/useGridSorting.ts","../src/grid/useGridVirtual.ts"],"names":["React","core","createGridCore","ownership","useSyncExternalStore","React2","React3","React4","createGridColumnsFeature","React5","createGridClipboardFeature","React6","createGridFilteringFeature","mergeFormFilters","filterTableRows","React7","createGridEditingFeature","state","React8","createGridExpansionFeature","React9","createGridPaginationFeature","createGridPaginationProjection","React10","createGridRangeFeature","React11","createGridSelectionFeature","React12","createGridRowsFeature","React13","createGridSortingFeature","resolveTableColumnValue","createTableSortComparator","createTableMultiSortComparator","sortTableRows","React14","createGridVirtualFeature"],"mappings":"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","file":"grid.cjs","sourcesContent":["import * as React from 'react'\nimport {\n createGridCore,\n type GridCore,\n type GridCoreOptions,\n type GridFeature,\n} from '@iris-ui-kit/core/grid'\n\nexport interface UseGridCoreOptions<\n Row extends Record<string, unknown>,\n> extends GridCoreOptions<Row> {\n readonly features?: readonly GridFeature<Row>[]\n}\n\ninterface RenderOwnership {\n committed: boolean\n}\n\n/**\n * React lifecycle bridge for one framework-agnostic Grid Core. Features are\n * captured on the first render; use `core.use()` for an explicit late install.\n */\nexport function useGridCore<Row extends Record<string, unknown> = Record<string, unknown>>(\n options: UseGridCoreOptions<Row> = {},\n): GridCore<Row> {\n const coreRef = React.useRef<GridCore<Row> | null>(null)\n const ownershipRef = React.useRef<RenderOwnership | null>(null)\n if (coreRef.current === null) {\n const core = createGridCore(options)\n const ownership: RenderOwnership = { committed: false }\n coreRef.current = core\n ownershipRef.current = ownership\n // A render which never commits cannot receive an effect cleanup. A\n // committed render claims this ticket in the commit phase before this\n // microtask can run, while a discarded render is deterministically closed.\n queueMicrotask(() => {\n if (!ownership.committed) core.destroy()\n })\n }\n const core = coreRef.current\n const ownership = ownershipRef.current\n const lifecycleGeneration = React.useRef(0)\n\n // Insertion effects run during commit and are a safe commit marker for the\n // render ticket. Unlike a layout effect, they are also silent in SSR.\n React.useInsertionEffect(() => {\n ownership!.committed = true\n }, [core, ownership])\n\n React.useEffect(() => {\n const generation = ++lifecycleGeneration.current\n core.ready()\n return () => {\n // React Strict Mode replays effects without discarding hook state. Delay\n // teardown by one microtask so the replay can advance the generation;\n // a real unmount has no next effect and therefore destroys the core.\n queueMicrotask(() => {\n if (lifecycleGeneration.current === generation) core.destroy()\n })\n }\n }, [core])\n\n return core\n}\n","import type {\n GridExpansionKey,\n GridPaginationChange,\n GridRowKey,\n SelectionKey,\n} from '@iris-ui-kit/core/grid'\nimport type { GridFilterColumn, UseGridFilteringOptions } from './useGridFiltering'\nimport type { UseGridColumnsOptions } from './useGridColumns'\nimport type { UseGridExpansionOptions } from './useGridExpansion'\nimport type { UseGridPaginationOptions } from './useGridPagination'\nimport type { UseGridRowsOptions } from './useGridRows'\nimport type { UseGridSelectionOptions } from './useGridSelection'\nimport type { GridSortColumn, UseGridSortingOptions } from './useGridSorting'\n\nexport interface LegacyGridRowsProps<Row extends Record<string, unknown>, Meta = unknown> {\n readonly data?: Row[]\n readonly keepSource?: boolean\n readonly rowKeyField?: string\n readonly getRowKey?: (row: Row, index: number) => GridRowKey | undefined\n readonly getChildren?: UseGridRowsOptions<Row, Meta>['getChildren']\n readonly setChildren?: UseGridRowsOptions<Row, Meta>['setChildren']\n readonly beforeChange?: UseGridRowsOptions<Row, Meta>['onBeforeRowsChange']\n readonly onChange?: UseGridRowsOptions<Row, Meta>['onRowsChange']\n}\n\nexport interface LegacyGridColumnsProps {\n readonly columnVisibility?: UseGridColumnsOptions['visibility']\n readonly onColumnVisibilityChange?: UseGridColumnsOptions['onVisibilityChange']\n readonly columnOrder?: UseGridColumnsOptions['order']\n readonly onColumnOrderChange?: UseGridColumnsOptions['onOrderChange']\n readonly columnWidths?: UseGridColumnsOptions['widths']\n readonly defaultColumnWidths?: UseGridColumnsOptions['defaultWidths']\n readonly onColumnWidthsChange?: UseGridColumnsOptions['onWidthsChange']\n readonly pinnedColumns?: UseGridColumnsOptions['pinned']\n readonly onColumnPinnedChange?: UseGridColumnsOptions['onPinnedChange']\n}\n\n/** Map the four legacy column channels into one feature boundary. */\nexport function toGridColumnsOptions(props: LegacyGridColumnsProps): UseGridColumnsOptions {\n return {\n visibility: props.columnVisibility,\n visibilityControlled: true,\n onVisibilityChange: props.onColumnVisibilityChange,\n order: props.columnOrder,\n orderControlled: true,\n onOrderChange: props.onColumnOrderChange,\n widths: props.columnWidths,\n defaultWidths: props.defaultColumnWidths,\n onWidthsChange: props.onColumnWidthsChange,\n pinned: props.pinnedColumns,\n onPinnedChange: props.onColumnPinnedChange,\n }\n}\n\nexport interface LegacyGridRowsOptions<Row extends Record<string, unknown>, Meta = unknown> {\n readonly initialRows: Row[]\n readonly options: UseGridRowsOptions<Row, Meta>\n}\n\n/** Map the legacy `data` ownership contract into the rows feature boundary. */\nexport function toGridRowsOptions<Row extends Record<string, unknown>, Meta = unknown>(\n props: LegacyGridRowsProps<Row, Meta>,\n): LegacyGridRowsOptions<Row, Meta> {\n const rows = props.data ?? []\n return {\n initialRows: props.keepSource ? [...rows] : rows,\n options: {\n ...(props.rowKeyField === undefined ? {} : { rowKeyField: props.rowKeyField }),\n ...(props.getRowKey === undefined ? {} : { getRowKey: props.getRowKey }),\n ...(props.getChildren === undefined ? {} : { getChildren: props.getChildren }),\n ...(props.setChildren === undefined ? {} : { setChildren: props.setChildren }),\n onBeforeRowsChange: props.beforeChange,\n onRowsChange: props.onChange,\n },\n }\n}\n\nexport interface LegacyGridSelectionProps<K extends SelectionKey = string> {\n readonly selectable?: 'none' | 'single' | 'multi'\n readonly selection?: K[]\n readonly defaultSelection?: K[]\n readonly onSelectionChange?: (keys: K[]) => void\n}\n\n/** `none` still uses a dormant multiple model, matching the legacy Table. */\nexport function toGridSelectionOptions<K extends SelectionKey = string>(\n props: LegacyGridSelectionProps<K>,\n): UseGridSelectionOptions<K> {\n return {\n mode: props.selectable === 'single' ? 'single' : 'multiple',\n value: props.selection,\n defaultValue: props.defaultSelection,\n onChange: props.onSelectionChange,\n }\n}\n\nexport interface LegacyGridExpansionProps<K extends GridExpansionKey = string> {\n readonly defaultExpandedRowKeys?: readonly K[]\n readonly onChange?: (keys: string[]) => void\n}\n\nexport function toGridExpansionOptions<K extends GridExpansionKey = string>(\n props: LegacyGridExpansionProps<K>,\n): UseGridExpansionOptions<string> {\n return {\n mode: 'multiple',\n defaultValue: (props.defaultExpandedRowKeys ?? []).map(String),\n onChange: props.onChange,\n }\n}\n\nexport interface LegacyGridPaginationProxyConfig {\n readonly defaultPage?: number\n readonly pageSize?: number\n readonly onPageChange?: (page: number, pageSize: number) => void\n}\n\nexport interface LegacyGridPaginationState {\n readonly page: number\n readonly pageSize: number\n readonly total: number\n}\n\nexport interface LegacyGridPaginationProps {\n readonly proxyConfig?: LegacyGridPaginationProxyConfig\n readonly state?: LegacyGridPaginationState\n readonly request?: (pagination: Pick<LegacyGridPaginationState, 'page' | 'pageSize'>) => void\n}\n\n/** Map proxy pagination into a controlled feature; request policy stays outside core. */\nexport function toGridPaginationOptions(\n props: LegacyGridPaginationProps,\n): UseGridPaginationOptions {\n const state = props.state\n const onChange = state\n ? (change: GridPaginationChange) => {\n props.request?.({ page: change.page, pageSize: change.pageSize })\n props.proxyConfig?.onPageChange?.(change.page, change.pageSize)\n }\n : undefined\n return {\n page: state?.page,\n pageSize: state?.pageSize,\n total: state?.total,\n defaultPage: props.proxyConfig?.defaultPage,\n defaultPageSize: props.proxyConfig?.pageSize,\n onChange,\n }\n}\n\nexport interface LegacyGridSortingProps<Row extends Record<string, unknown>> {\n readonly columns: GridSortColumn<Row>[]\n readonly sort?: UseGridSortingOptions<Row>['sort']\n readonly defaultSort?: UseGridSortingOptions<Row>['defaultSort']\n readonly onSortChange?: UseGridSortingOptions<Row>['onSortChange']\n readonly multiSort?: boolean\n readonly multiSortState?: UseGridSortingOptions<Row>['multiSortState']\n readonly defaultMultiSort?: UseGridSortingOptions<Row>['defaultMultiSort']\n readonly onMultiSortChange?: UseGridSortingOptions<Row>['onMultiSortChange']\n readonly formulaTables?: UseGridSortingOptions<Row>['formulaTables']\n}\n\nexport function toGridSortingOptions<Row extends Record<string, unknown>>(\n props: LegacyGridSortingProps<Row>,\n): UseGridSortingOptions<Row> {\n return {\n leafColumns: props.columns,\n sort: props.sort,\n defaultSort: props.defaultSort,\n onSortChange: props.onSortChange,\n multiSort: props.multiSort,\n multiSortState: props.multiSortState,\n defaultMultiSort: props.defaultMultiSort,\n onMultiSortChange: props.onMultiSortChange,\n formulaTables: props.formulaTables,\n }\n}\n\nexport interface LegacyGridFilteringProps<\n Row extends Record<string, unknown>,\n Column extends GridFilterColumn<Row>,\n> extends Omit<UseGridFilteringOptions<Row, Column>, 'controlled' | 'proxy' | 'remote'> {\n readonly proxy?: unknown\n readonly remoteFilter?: boolean\n}\n\nexport function toGridFilteringOptions<\n Row extends Record<string, unknown>,\n Column extends GridFilterColumn<Row>,\n>(props: LegacyGridFilteringProps<Row, Column>): UseGridFilteringOptions<Row, Column> {\n return {\n columns: props.columns,\n getValue: props.getValue,\n filters: props.filters,\n defaultFilters: props.defaultFilters,\n onFiltersChange: props.onFiltersChange,\n filterValues: props.filterValues,\n defaultFilterValues: props.defaultFilterValues,\n onFilterValuesChange: props.onFilterValuesChange,\n controlled: true,\n formFilters: props.formFilters,\n query: props.query,\n proxy: Boolean(props.proxy),\n remote: props.remoteFilter,\n }\n}\n","import * as React from 'react'\nimport { useSyncExternalStore } from 'react'\nimport type { ReadonlyStore, Store } from '@iris-ui-kit/core'\n\n/**\n * Bridge a framework-agnostic `@iris-ui-kit/core` store into React reactivity.\n * Uses React 18's `useSyncExternalStore` — the contract is identical to the\n * one Vue uses via `ref + onMounted` and Solid uses via `createSignal`. The\n * **same** store can power Button, Popover, Dialog, etc. on any framework.\n */\nexport function useStore<T>(store: ReadonlyStore<T>): T {\n return useSyncExternalStore(\n store.subscribe,\n store.getState,\n store.getState, // SSR fallback — same as client snapshot in our case.\n )\n}\n\n/**\n * Subscribe to a DERIVED slice of a core store — the component re-renders only\n * when `selector(state)` changes per `isEqual` (default `Object.is`), not on\n * every store emission. Built on {@link Store.subscribeWith}. Inline closures\n * for `selector`/`isEqual` are fine (captured via refs; the subscription is not\n * re-created between renders).\n */\nexport function useStoreSelector<T, U>(\n store: Store<T>,\n selector: (state: T) => U,\n isEqual?: (a: U, b: U) => boolean,\n): U {\n const [slice, setSlice] = React.useState(() => selector(store.getState()))\n const selRef = React.useRef(selector)\n selRef.current = selector\n const eqRef = React.useRef(isEqual)\n eqRef.current = isEqual\n React.useEffect(() => {\n const read = (s: T): U => selRef.current(s)\n const eq = (a: U, b: U): boolean => (eqRef.current ?? Object.is)(a, b)\n // Re-sync in case the store moved between render and this effect.\n setSlice((prev) => {\n const next = read(store.getState())\n return eq(prev, next) ? prev : next\n })\n return store.subscribeWith(read, setSlice, eq)\n }, [store])\n return slice\n}\n","import * as React from 'react'\nimport type { GridCore, GridFeature } from '@iris-ui-kit/core/grid'\n\n/** Install one feature once per Grid Core bridge and return its model. */\nexport function useGridFeature<Row extends Record<string, unknown>, Model>(\n core: GridCore<Row>,\n name: string,\n modelMethod: string,\n create: () => GridFeature<Row>,\n): Model {\n const feature = React.useRef<GridFeature<Row> | null>(null)\n if (feature.current === null) feature.current = create()\n if (!core.hasFeature(name)) core.use(feature.current)\n return core.invoke<Model>(modelMethod)\n}\n","import * as React from 'react'\nimport {\n createGridColumnsFeature,\n type GridColumnPin,\n type GridColumnPinned,\n type GridColumnsModel,\n type GridColumnsState,\n type GridColumnVisibility,\n type GridColumnWidths,\n type GridCore,\n} from '@iris-ui-kit/core/grid'\nimport { useStore } from '../useStore'\nimport { useGridFeature } from './useGridFeature'\n\nconst EMPTY_VISIBILITY: GridColumnVisibility = {}\nconst EMPTY_ORDER: string[] = []\nconst EMPTY_WIDTHS: GridColumnWidths = {}\nconst EMPTY_PINNED: GridColumnPinned = {}\n\nfunction visibilitySignature(visibility: GridColumnVisibility | undefined): string {\n return visibility\n ? JSON.stringify(Object.keys(visibility).map((key) => [key, visibility[key]]))\n : ''\n}\n\nfunction cloneColumnsState(state: GridColumnsState): GridColumnsState {\n return {\n visibility: { ...state.visibility },\n order: [...state.order],\n widths: { ...state.widths },\n pinned: { ...state.pinned },\n }\n}\n\nexport interface UseGridColumnsOptions {\n visibility?: GridColumnVisibility\n defaultVisibility?: GridColumnVisibility\n visibilityControlled?: boolean\n onVisibilityChange?: (visibility: GridColumnVisibility) => void\n order?: string[]\n defaultOrder?: string[]\n /** Keeps the legacy `undefined` order controlled as an empty source-order override. */\n orderControlled?: boolean\n onOrderChange?: (order: string[] | undefined) => void\n widths?: GridColumnWidths\n defaultWidths?: GridColumnWidths\n onWidthsChange?: (widths: GridColumnWidths) => void\n pinned?: GridColumnPinned\n defaultPinned?: GridColumnPinned\n onPinnedChange?: (key: string, side: GridColumnPin) => void\n}\n\nexport interface UseGridColumnsResult {\n model: GridColumnsModel\n state: GridColumnsState\n controlled: {\n visibility: boolean\n order: boolean\n widths: boolean\n pinned: boolean\n }\n setVisibility(visibility: GridColumnVisibility): void\n toggleVisibility(key: string): void\n setOrder(order: string[] | undefined): void\n clearOrder(): void\n setWidths(widths: GridColumnWidths): void\n setWidth(key: string, width: number): void\n resetWidths(): void\n setPinned(key: string, side: GridColumnPin): void\n}\n\n/** Installs the four column-state channels and mirrors optional controlled props. */\nexport function useGridColumns<Row extends Record<string, unknown> = Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridColumnsOptions = {},\n): UseGridColumnsResult {\n const latest = React.useRef(options)\n latest.current = options\n\n const model = useGridFeature<Row, GridColumnsModel>(core, 'columns', 'getColumnsModel', () =>\n createGridColumnsFeature<Row>({\n defaultVisibility: options.visibility ?? options.defaultVisibility,\n defaultOrder: options.order ?? options.defaultOrder,\n defaultWidths: options.widths ?? options.defaultWidths,\n defaultPinned: options.pinned ?? options.defaultPinned,\n onVisibilityChange: (visibility) => latest.current.onVisibilityChange?.(visibility),\n onOrderChange: (order) => latest.current.onOrderChange?.(order),\n onWidthsChange: (widths) => latest.current.onWidthsChange?.(widths),\n onPinnedChange: (key, side) => latest.current.onPinnedChange?.(key, side),\n }),\n )\n const internal = useStore(model.store)\n const visibilityControlled = options.visibilityControlled ?? options.visibility !== undefined\n const orderControlled = options.orderControlled ?? options.order !== undefined\n const widthsControlled = options.widths !== undefined\n const pinnedControlled = options.pinned !== undefined\n const visibilityVersion = visibilitySignature(\n visibilityControlled ? options.visibility : undefined,\n )\n const lastUncontrolledVisibility = React.useRef<GridColumnVisibility>({\n ...(options.defaultVisibility ?? EMPTY_VISIBILITY),\n })\n const lastUncontrolledOrder = React.useRef<string[]>([...(options.defaultOrder ?? EMPTY_ORDER)])\n const lastUncontrolledWidths = React.useRef<GridColumnWidths>({\n ...(options.defaultWidths ?? EMPTY_WIDTHS),\n })\n const lastUncontrolledPinned = React.useRef<GridColumnPinned>({\n ...(options.defaultPinned ?? EMPTY_PINNED),\n })\n const wasVisibilityControlled = React.useRef(visibilityControlled)\n const wasOrderControlled = React.useRef(orderControlled)\n const wasWidthsControlled = React.useRef(widthsControlled)\n const wasPinnedControlled = React.useRef(pinnedControlled)\n const enteringVisibilityControlled = visibilityControlled && !wasVisibilityControlled.current\n const enteringOrderControlled = orderControlled && !wasOrderControlled.current\n const enteringWidthsControlled = widthsControlled && !wasWidthsControlled.current\n const enteringPinnedControlled = pinnedControlled && !wasPinnedControlled.current\n if (\n enteringVisibilityControlled ||\n enteringOrderControlled ||\n enteringWidthsControlled ||\n enteringPinnedControlled\n ) {\n // Capture all entering channels from the live Core state before the\n // controlled effects synchronize any of them.\n const liveState = model.store.getState()\n if (enteringVisibilityControlled) {\n lastUncontrolledVisibility.current = { ...liveState.visibility }\n }\n if (enteringOrderControlled) lastUncontrolledOrder.current = [...liveState.order]\n if (enteringWidthsControlled) lastUncontrolledWidths.current = { ...liveState.widths }\n if (enteringPinnedControlled) lastUncontrolledPinned.current = { ...liveState.pinned }\n }\n if (!visibilityControlled && !wasVisibilityControlled.current) {\n lastUncontrolledVisibility.current = { ...internal.visibility }\n }\n if (!orderControlled && !wasOrderControlled.current) {\n lastUncontrolledOrder.current = [...internal.order]\n }\n if (!widthsControlled && !wasWidthsControlled.current) {\n lastUncontrolledWidths.current = { ...internal.widths }\n }\n if (!pinnedControlled && !wasPinnedControlled.current) {\n lastUncontrolledPinned.current = { ...internal.pinned }\n }\n const state: GridColumnsState = cloneColumnsState({\n visibility: visibilityControlled\n ? { ...(options.visibility ?? EMPTY_VISIBILITY) }\n : wasVisibilityControlled.current\n ? lastUncontrolledVisibility.current\n : internal.visibility,\n order: orderControlled\n ? [...(options.order ?? EMPTY_ORDER)]\n : wasOrderControlled.current\n ? lastUncontrolledOrder.current\n : internal.order,\n // Removing a controlled order must restore the last uncontrolled/default\n // snapshot rather than exposing a rejected controlled proposal. Widths\n // use the same handoff policy below.\n // Removing a controlled width map must restore the last uncontrolled or\n // default snapshot immediately; otherwise one render leaks the rejected\n // controlled widths before the silent model rebase runs.\n widths: widthsControlled\n ? { ...options.widths! }\n : wasWidthsControlled.current\n ? lastUncontrolledWidths.current\n : internal.widths,\n pinned: pinnedControlled\n ? { ...options.pinned! }\n : wasPinnedControlled.current\n ? lastUncontrolledPinned.current\n : internal.pinned,\n })\n\n React.useEffect(() => {\n if (visibilityControlled) model.syncVisibility(options.visibility ?? {})\n else if (wasVisibilityControlled.current)\n model.syncVisibility(lastUncontrolledVisibility.current)\n wasVisibilityControlled.current = visibilityControlled\n }, [model, options.visibility, visibilityControlled, visibilityVersion])\n React.useEffect(() => {\n if (orderControlled) model.syncOrder(options.order ?? [])\n else if (wasOrderControlled.current) model.syncOrder(lastUncontrolledOrder.current)\n wasOrderControlled.current = orderControlled\n }, [model, options.order, orderControlled])\n React.useEffect(() => {\n if (widthsControlled) model.syncWidths(options.widths ?? {})\n else if (wasWidthsControlled.current) model.syncWidths(lastUncontrolledWidths.current)\n wasWidthsControlled.current = widthsControlled\n }, [model, options.widths, widthsControlled])\n React.useEffect(() => {\n if (pinnedControlled) model.syncPinned(options.pinned ?? {})\n else if (wasPinnedControlled.current) model.syncPinned(lastUncontrolledPinned.current)\n wasPinnedControlled.current = pinnedControlled\n }, [model, options.pinned, pinnedControlled])\n\n const rebaseVisibility = React.useCallback((): void => {\n if (latest.current.visibilityControlled ?? latest.current.visibility !== undefined) {\n model.syncVisibility(latest.current.visibility ?? {})\n } else if (wasVisibilityControlled.current) {\n model.syncVisibility(lastUncontrolledVisibility.current)\n }\n }, [model])\n const rebaseOrder = React.useCallback((): void => {\n if (latest.current.orderControlled ?? latest.current.order !== undefined) {\n model.syncOrder(latest.current.order ?? [])\n }\n }, [model])\n const rebaseWidths = React.useCallback((): void => {\n if (latest.current.widths !== undefined) model.syncWidths(latest.current.widths)\n else if (wasWidthsControlled.current) model.syncWidths(lastUncontrolledWidths.current)\n }, [model])\n const rebasePinned = React.useCallback((): void => {\n if (latest.current.pinned !== undefined) model.syncPinned(latest.current.pinned)\n else if (wasPinnedControlled.current) model.syncPinned(lastUncontrolledPinned.current)\n }, [model])\n const setVisibility = React.useCallback(\n (visibility: GridColumnVisibility): void => {\n rebaseVisibility()\n model.setVisibility(visibility)\n },\n [model, rebaseVisibility],\n )\n const toggleVisibility = React.useCallback(\n (key: string): void => {\n rebaseVisibility()\n model.toggleVisibility(key)\n },\n [model, rebaseVisibility],\n )\n const setOrder = React.useCallback(\n (order: string[] | undefined): void => {\n rebaseOrder()\n model.setOrder(order)\n },\n [model, rebaseOrder],\n )\n const clearOrder = React.useCallback((): void => {\n rebaseOrder()\n model.setOrder(undefined)\n }, [model, rebaseOrder])\n const setWidths = React.useCallback(\n (widths: GridColumnWidths): void => {\n rebaseWidths()\n model.setWidths(widths)\n },\n [model, rebaseWidths],\n )\n const setWidth = React.useCallback(\n (key: string, width: number): void => {\n rebaseWidths()\n model.setWidth(key, width)\n },\n [model, rebaseWidths],\n )\n const resetWidths = React.useCallback((): void => {\n rebaseWidths()\n model.setWidths({})\n }, [model, rebaseWidths])\n const setPinned = React.useCallback(\n (key: string, side: GridColumnPin): void => {\n rebasePinned()\n model.setPinned(key, side)\n },\n [model, rebasePinned],\n )\n\n return {\n model,\n state,\n controlled: {\n visibility: visibilityControlled,\n order: orderControlled,\n widths: widthsControlled,\n pinned: pinnedControlled,\n },\n setVisibility,\n toggleVisibility,\n setOrder,\n clearOrder,\n setWidths,\n setWidth,\n resetWidths,\n setPinned,\n }\n}\n","import * as React from 'react'\nimport {\n createGridClipboardFeature,\n type GridClipboardFeatureOptions,\n type GridClipboardModel,\n type GridCore,\n} from '@iris-ui-kit/core/grid'\nimport type {\n GridRowsCommitOptions,\n TableClipboardColumn,\n TableClipboardRange,\n TableCopyFormat,\n} from '@iris-ui-kit/core'\nimport { useGridFeature } from './useGridFeature'\n\nexport type UseGridClipboardOptions<Row extends Record<string, unknown>> =\n GridClipboardFeatureOptions<Row>\n\nexport interface UseGridClipboardResult<Row extends Record<string, unknown>> {\n core: GridCore<Row>\n model: GridClipboardModel\n serialize(format?: TableCopyFormat, copyWithFormat?: boolean): string | null\n paste(text: string, range?: TableClipboardRange): boolean\n}\n\nfunction defaultValue<Row extends Record<string, unknown>>(\n row: Row,\n column: TableClipboardColumn<Row>,\n): unknown {\n return row[(column.dataIndex ?? column.key) as keyof Row]\n}\n\nfunction defaultSetValue<Row extends Record<string, unknown>>(\n row: Row,\n column: TableClipboardColumn<Row>,\n value: unknown,\n): Row {\n return { ...row, [column.dataIndex ?? column.key]: value }\n}\n\nfunction resolveCommitOptions(\n options: GridClipboardFeatureOptions<Record<string, unknown>>['commitOptions'],\n): GridRowsCommitOptions {\n if (typeof options === 'function') return options()\n return options ?? {}\n}\n\n/** Installs clipboard pure logic while leaving system clipboard I/O in React. */\nexport function useGridClipboard<Row extends Record<string, unknown> = Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridClipboardOptions<Row>,\n): UseGridClipboardResult<Row> {\n const latest = React.useRef(options)\n latest.current = options\n\n const model = useGridFeature<Row, GridClipboardModel>(\n core,\n 'clipboard',\n 'getClipboardModel',\n () =>\n createGridClipboardFeature<Row>({\n getRows: () => latest.current.getRows?.() ?? core.invoke<Row[]>('getRows'),\n getColumns: () => latest.current.getColumns(),\n rowKeyField: latest.current.rowKeyField,\n overflowRows: (context) => latest.current.overflowRows?.(context),\n resolveValue: (row, column) => {\n const resolve = latest.current.resolveValue\n return resolve ? resolve(row, column) : defaultValue(row, column)\n },\n parseValue: (text, row, column) => {\n const parse = latest.current.parseValue\n return parse ? parse(text, row, column) : text\n },\n setValue: (row, column, value) =>\n latest.current.setValue?.(row, column, value) ?? defaultSetValue(row, column, value),\n isCellEditable: (row, column, rowIndex, columnIndex) =>\n latest.current.isCellEditable?.(row, column, rowIndex, columnIndex) ?? true,\n reconcileRows: (sourceRows, previousRows, rows) =>\n latest.current.reconcileRows?.(sourceRows, previousRows, rows) ?? rows,\n commitOptions: () => resolveCommitOptions(latest.current.commitOptions),\n onCopy: (change) => latest.current.onCopy?.(change),\n onPaste: (change) => latest.current.onPaste?.(change),\n }),\n )\n\n const serialize = React.useCallback(\n (format?: TableCopyFormat, copyWithFormat?: boolean) =>\n model.serialize(\n format ?? latest.current.copyFormat ?? 'tsv',\n copyWithFormat ?? latest.current.copyWithFormat ?? false,\n ),\n [model],\n )\n const paste = React.useCallback(\n (text: string, range?: TableClipboardRange) => model.paste(text, range),\n [model],\n )\n\n return { core, model, serialize, paste }\n}\n","import * as React from 'react'\nimport { filterTableRows, mergeFormFilters, type FilterRule } from '@iris-ui-kit/core'\nimport {\n createGridFilteringFeature,\n type GridCore,\n type GridFilteringModel,\n type GridFilterValues,\n} from '@iris-ui-kit/core/grid'\nimport { useStore } from '../useStore'\nimport { useGridFeature } from './useGridFeature'\n\nexport interface GridFilterColumn<Row> {\n key: string\n filterMethod?: (value: unknown, row: Row, filterValue: string) => boolean\n}\n\nexport interface GridFilterQuery {\n readonly filters: Readonly<Record<string, string>>\n readonly inValues: Readonly<Record<string, readonly string[]>>\n readonly rules: readonly FilterRule[]\n}\n\nexport interface UseGridFilteringOptions<\n Row,\n Column extends GridFilterColumn<Row> = GridFilterColumn<Row>,\n> {\n columns: Column[]\n getValue: (row: Row, column: Column) => unknown\n filters?: Record<string, string>\n defaultFilters?: Record<string, string>\n onFiltersChange?: (filters: Record<string, string>) => void\n filterValues?: GridFilterValues\n defaultFilterValues?: GridFilterValues\n onFilterValuesChange?: (filterValues: GridFilterValues) => void\n /** Treat missing filter props as controlled empty maps. */\n controlled?: boolean\n formFilters?: Record<string, string>\n query?: GridFilterQuery\n proxy?: boolean\n remote?: boolean\n}\n\nexport interface UseGridFilteringResult<Row> {\n core: GridCore\n model: GridFilteringModel\n filters: Record<string, string>\n filterValues: GridFilterValues\n filteredData: Row[]\n}\n\nfunction cloneFilters(\n filters: Readonly<Record<string, string>> | null | undefined,\n): Record<string, string> {\n return { ...(filters ?? {}) }\n}\n\nfunction cloneFilterValues(\n filterValues: Readonly<GridFilterValues> | null | undefined,\n): GridFilterValues {\n return Object.fromEntries(\n Object.entries(filterValues ?? {}).map(([key, values]) => [key, [...values]]),\n )\n}\n\n/** Installs filtering state in Grid Core and derives the React row view. */\nexport function useGridFiltering<\n Row extends Record<string, unknown> = Record<string, unknown>,\n Column extends GridFilterColumn<Row> = GridFilterColumn<Row>,\n>(\n core: GridCore<Row>,\n data: Row[],\n options: UseGridFilteringOptions<Row, Column>,\n): UseGridFilteringResult<Row> {\n const latest = React.useRef(options)\n latest.current = options\n const filtersControlled = options.controlled === true || options.filters !== undefined\n const valuesControlled = options.controlled === true || options.filterValues !== undefined\n\n const model = useGridFeature<Row, GridFilteringModel>(\n core,\n 'filtering',\n 'getFilteringModel',\n () =>\n createGridFilteringFeature<Row>({\n defaultFilters: filtersControlled ? (options.filters ?? {}) : options.defaultFilters,\n defaultFilterValues: valuesControlled\n ? (options.filterValues ?? {})\n : options.defaultFilterValues,\n onFiltersChange: (next) => latest.current.onFiltersChange?.(next),\n onFilterValuesChange: (next) => latest.current.onFilterValuesChange?.(next),\n }),\n )\n const internalState = useStore(model.store)\n // React dependency checks cannot observe mutations made through a stable prop\n // reference. Recompute these signatures on every render so controlled sync\n // remains content-sensitive without changing the Core model contract.\n const filtersSignature = JSON.stringify(options.filters)\n const filterValuesSignature = JSON.stringify(options.filterValues)\n const wasFiltersControlled = React.useRef(filtersControlled)\n const uncontrolledFilters = React.useRef<Record<string, string>>({})\n const hasUncontrolledFilters = React.useRef(!filtersControlled)\n const lastControlledFilters = React.useRef<Record<string, string>>(cloneFilters(options.filters))\n const wasFilterValuesControlled = React.useRef(valuesControlled)\n const uncontrolledFilterValues = React.useRef<GridFilterValues>({})\n const hasUncontrolledFilterValues = React.useRef(!valuesControlled)\n const lastControlledFilterValues = React.useRef<GridFilterValues>(\n cloneFilterValues(options.filterValues),\n )\n const leavingFiltersControlled = wasFiltersControlled.current && !filtersControlled\n const leavingFilterValuesControlled = wasFilterValuesControlled.current && !valuesControlled\n\n // Capture only genuine uncontrolled state. A rejected controlled proposal may\n // be ahead of the prop in the model, so it must not become the handoff value.\n if (!filtersControlled && !leavingFiltersControlled) {\n uncontrolledFilters.current = cloneFilters(internalState.filters)\n hasUncontrolledFilters.current = true\n }\n if (!valuesControlled && !leavingFilterValuesControlled) {\n uncontrolledFilterValues.current = cloneFilterValues(internalState.filterValues)\n hasUncontrolledFilterValues.current = true\n }\n // Capture model updates batched with the transition into controlled mode.\n if (filtersControlled && !wasFiltersControlled.current) {\n uncontrolledFilters.current = cloneFilters(internalState.filters)\n hasUncontrolledFilters.current = true\n }\n if (valuesControlled && !wasFilterValuesControlled.current) {\n uncontrolledFilterValues.current = cloneFilterValues(internalState.filterValues)\n hasUncontrolledFilterValues.current = true\n }\n if (filtersControlled) lastControlledFilters.current = cloneFilters(options.filters)\n if (valuesControlled) {\n lastControlledFilterValues.current = cloneFilterValues(options.filterValues)\n }\n\n const filters = cloneFilters(\n filtersControlled\n ? options.filters\n : leavingFiltersControlled\n ? hasUncontrolledFilters.current\n ? uncontrolledFilters.current\n : lastControlledFilters.current\n : internalState.filters,\n )\n const filterValues = cloneFilterValues(\n valuesControlled\n ? options.filterValues\n : leavingFilterValuesControlled\n ? hasUncontrolledFilterValues.current\n ? uncontrolledFilterValues.current\n : lastControlledFilterValues.current\n : internalState.filterValues,\n )\n\n React.useEffect(() => {\n if (filtersControlled) {\n const next = cloneFilters(options.filters)\n lastControlledFilters.current = cloneFilters(next)\n model.syncFilters(next)\n } else if (wasFiltersControlled.current) {\n const restore = hasUncontrolledFilters.current\n ? uncontrolledFilters.current\n : lastControlledFilters.current\n // A no-op Core sync still establishes the restored value as the next\n // uncontrolled baseline for a later controlled detour.\n uncontrolledFilters.current = cloneFilters(restore)\n hasUncontrolledFilters.current = true\n model.syncFilters(restore)\n }\n wasFiltersControlled.current = filtersControlled\n }, [filtersControlled, model, options.filters, filtersSignature])\n\n React.useEffect(() => {\n if (valuesControlled) {\n const next = cloneFilterValues(options.filterValues)\n lastControlledFilterValues.current = cloneFilterValues(next)\n model.syncFilterValues(next)\n } else if (wasFilterValuesControlled.current) {\n const restore = hasUncontrolledFilterValues.current\n ? uncontrolledFilterValues.current\n : lastControlledFilterValues.current\n // A no-op Core sync still establishes the restored value as the next\n // uncontrolled baseline for a later controlled detour.\n uncontrolledFilterValues.current = cloneFilterValues(restore)\n hasUncontrolledFilterValues.current = true\n model.syncFilterValues(restore)\n }\n wasFilterValuesControlled.current = valuesControlled\n }, [model, options.filterValues, valuesControlled, filterValuesSignature])\n\n const filteredData = React.useMemo(() => {\n if (options.remote) return data\n const merged = options.proxy\n ? { ...filters }\n : mergeFormFilters(filters, options.formFilters ?? {})\n for (const [key, value] of Object.entries(options.query?.filters ?? {})) {\n if (value !== '') merged[key] = value\n }\n return filterTableRows(data, options.columns, {\n getValue: options.getValue,\n filters: merged,\n filterValues,\n additionalFilterValues: options.query?.inValues ? [options.query.inValues] : undefined,\n filterRules: options.query?.rules,\n })\n }, [\n data,\n filterValues,\n filters,\n options.columns,\n options.formFilters,\n options.getValue,\n options.proxy,\n options.query,\n options.remote,\n ])\n\n return { core, model, filters, filterValues, filteredData }\n}\n","import * as React from 'react'\nimport {\n createGridEditingFeature,\n type GridCore,\n type GridEditingCommit,\n type GridEditingFeatureOptions,\n type GridEditingKey,\n type GridEditingModel,\n type GridEditingValidation,\n} from '@iris-ui-kit/core/grid'\nimport type { CellEditState } from '@iris-ui-kit/core'\nimport { useStoreSelector } from '../useStore'\nimport { useGridFeature } from './useGridFeature'\n\nexport interface UseGridEditingOptions<Row extends Record<string, unknown>> extends Omit<\n GridEditingFeatureOptions<Row>,\n 'onStateChange' | 'onCommit'\n> {\n onStateChange?: (state: CellEditState<GridEditingKey>) => void\n onValidation?: (validation: GridEditingValidation) => void\n onCommit?: (commit: GridEditingCommit<Row>) => void\n}\n\nexport interface UseGridEditingResult<Row extends Record<string, unknown>> {\n core: GridCore<Row>\n model: GridEditingModel\n state: CellEditState<GridEditingKey>\n startCellEdit(rowKey: GridEditingKey, columnKey: string, initialDraft?: unknown): boolean\n setCellDraft(value: unknown): void\n cancelCellEdit(): void\n commitCellEdit(value?: unknown): boolean\n isCellEditing(rowKey: GridEditingKey, columnKey: string): boolean\n}\n\n/** Installs the framework-independent editing feature and bridges its state. */\nexport function useGridEditing<Row extends Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridEditingOptions<Row>,\n): UseGridEditingResult<Row> {\n const latest = React.useRef(options)\n latest.current = options\n\n const model = useGridFeature<Row, GridEditingModel>(core, 'editing', 'getEditingModel', () =>\n createGridEditingFeature<Row>({\n getRowKey: (row, index) => latest.current.getRowKey(row, index),\n getRowIndex: (rowKey, row, rootRows) => latest.current.getRowIndex?.(rowKey, row, rootRows),\n getRules: (columnKey) => latest.current.getRules?.(columnKey),\n getValue: (row, columnKey) => {\n const getValue = latest.current.getValue\n return getValue ? getValue(row, columnKey) : row[columnKey]\n },\n setValue: (row, columnKey, value) =>\n latest.current.setValue?.(row, columnKey, value) ?? { ...row, [columnKey]: value },\n coerce: (draft, row, columnKey) => {\n const coerce = latest.current.coerce\n return coerce ? coerce(draft, row, columnKey) : draft\n },\n validate: (value, row, columnKey) => latest.current.validate?.(value, row, columnKey) ?? null,\n isEditable: (row, columnKey) => latest.current.isEditable?.(row, columnKey) ?? true,\n missingRowMessage: options.missingRowMessage,\n commitOptions: () => {\n const configured = latest.current.commitOptions\n return typeof configured === 'function' ? configured() : (configured ?? {})\n },\n onStateChange: (state) => latest.current.onStateChange?.(state),\n onValidation: (validation) => latest.current.onValidation?.(validation),\n onCommit: (commit) => latest.current.onCommit?.(commit),\n }),\n )\n const state = useStoreSelector(model.store, () => model.getState())\n\n return {\n core,\n model,\n state,\n startCellEdit: (rowKey, columnKey, initialDraft) =>\n model.start(rowKey, columnKey, initialDraft),\n setCellDraft: (value) => model.setDraft(value),\n cancelCellEdit: () => model.cancelEdit(),\n commitCellEdit: (value) => model.commitEdit(value),\n isCellEditing: (rowKey, columnKey) => model.isEditing(rowKey, columnKey),\n }\n}\n","import * as React from 'react'\nimport {\n createGridExpansionFeature,\n type ExpansionMode,\n type ExpansionModel,\n type GridCore,\n type GridExpansionKey,\n} from '@iris-ui-kit/core/grid'\nimport { useStore } from '../useStore'\nimport { useGridFeature } from './useGridFeature'\n\nexport interface UseGridExpansionOptions<K extends GridExpansionKey = string> {\n mode?: ExpansionMode\n defaultValue?: K[]\n onChange?: (keys: K[]) => void\n getKeys?: () => readonly K[]\n}\n\nexport interface UseGridExpansionResult<K extends GridExpansionKey = string> {\n core: GridCore\n model: ExpansionModel<K>\n expandedKeys: K[]\n}\n\n/** Installs one expansion feature and bridges its store into React. */\nexport function useGridExpansion<\n Row extends Record<string, unknown> = Record<string, unknown>,\n K extends GridExpansionKey = string,\n>(core: GridCore<Row>, options: UseGridExpansionOptions<K> = {}): UseGridExpansionResult<K> {\n const latest = React.useRef(options)\n latest.current = options\n\n const model = useGridFeature<Row, ExpansionModel<K>>(core, 'expansion', 'getExpansionModel', () =>\n createGridExpansionFeature<Row, K>({\n mode: options.mode,\n defaultExpanded: options.defaultValue,\n getKeys: () => latest.current.getKeys?.() ?? [],\n onChange: (keys) => latest.current.onChange?.(keys),\n }),\n )\n const expandedKeys = useStore(model.store)\n\n // The core store owns its mutable array; expose a snapshot so consumers\n // cannot mutate the controller by editing the bridge result in place.\n return { core, model, expandedKeys: [...expandedKeys] }\n}\n","import * as React from 'react'\nimport {\n createGridPaginationFeature,\n createGridPaginationProjection,\n type GridCore,\n type GridPaginationChange,\n type GridPaginationModel,\n type GridPaginationProjection,\n type GridPaginationState,\n} from '@iris-ui-kit/core/grid'\nimport { useStore } from '../useStore'\nimport { useGridFeature } from './useGridFeature'\n\nexport interface UseGridPaginationOptions {\n page?: number\n defaultPage?: number\n pageSize?: number\n defaultPageSize?: number\n total?: number\n defaultTotal?: number\n onChange?: (change: GridPaginationChange) => void\n}\n\nexport interface UseGridPaginationResult {\n model: GridPaginationModel\n pagination: GridPaginationState\n controlled: boolean\n setPage(page: number): void\n setPageSize(pageSize: number): void\n setPagination(page: number, pageSize: number): void\n}\n\nfunction controlledState(options: UseGridPaginationOptions): Partial<GridPaginationState> {\n return {\n ...(options.page !== undefined ? { page: options.page } : {}),\n ...(options.pageSize !== undefined ? { pageSize: options.pageSize } : {}),\n ...(options.total !== undefined ? { total: options.total } : {}),\n }\n}\n\n/** Installs pagination in Grid Core and mirrors optional controlled proxy state. */\nexport function useGridPagination<Row extends Record<string, unknown> = Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridPaginationOptions = {},\n): UseGridPaginationResult {\n const latest = React.useRef(options)\n latest.current = options\n\n const model = useGridFeature<Row, GridPaginationModel>(\n core,\n 'pagination',\n 'getPaginationModel',\n () =>\n createGridPaginationFeature<Row>({\n defaultPage: options.page ?? options.defaultPage,\n defaultPageSize: options.pageSize ?? options.defaultPageSize,\n defaultTotal: options.total ?? options.defaultTotal,\n onChange: (change) => latest.current.onChange?.(change),\n }),\n )\n const internal = useStore(model.store)\n const projectionRef = React.useRef<GridPaginationProjection | null>(null)\n if (projectionRef.current === null) {\n projectionRef.current = createGridPaginationProjection(model, controlledState(options))\n }\n const projection = projectionRef.current\n const controlled =\n options.page !== undefined || options.pageSize !== undefined || options.total !== undefined\n const controlledProps = controlledState(options)\n const pagination: GridPaginationState = projection.project(internal, controlledProps)\n\n React.useEffect(() => {\n projection.sync(controlledState(options))\n return () => projection.dispose()\n }, [options.page, options.pageSize, options.total, projection])\n\n const rebase = React.useCallback(() => {\n projection.sync(controlledState(latest.current))\n }, [projection])\n const setPage = React.useCallback(\n (page: number) => {\n rebase()\n model.setPage(page)\n },\n [model, rebase],\n )\n const setPageSize = React.useCallback(\n (pageSize: number) => {\n rebase()\n model.setPageSize(pageSize)\n },\n [model, rebase],\n )\n const setPagination = React.useCallback(\n (page: number, pageSize: number) => {\n rebase()\n model.set(page, pageSize)\n },\n [model, rebase],\n )\n\n return { model, pagination, controlled, setPage, setPageSize, setPagination }\n}\n","import * as React from 'react'\nimport {\n createGridRangeFeature,\n type GridCore,\n type GridRangeChange,\n type GridRangeModel,\n} from '@iris-ui-kit/core/grid'\nimport type { CellRange, CellRangeState } from '@iris-ui-kit/core'\nimport { useGridFeature } from './useGridFeature'\n\nexport interface UseGridRangeOptions {\n onChange?: (change: GridRangeChange) => void\n}\n\nexport interface UseGridRangeResult<Row extends Record<string, unknown>> {\n core: GridCore<Row>\n model: GridRangeModel\n state: CellRangeState\n range: CellRange | null\n}\n\n/** Installs the range feature and bridges its controller snapshot into React. */\nexport function useGridRange<Row extends Record<string, unknown> = Record<string, unknown>>(\n core: GridCore<Row>,\n options: UseGridRangeOptions = {},\n): UseGridRangeResult<Row> {\n const latest = React.useRef(options)\n latest.current = options\n\n const model = useGridFeature<Row, GridRangeModel>(core, 'range', 'getRangeModel', () =>\n createGridRangeFeature<Row>({\n onChange: (change) => latest.current.onChange?.(change),\n }),\n )\n const state = React.useSyncExternalStore(model.subscribe, model.getState, model.getState)\n // Keep the subscription as the render dependency, but let the Core model\n // own normalization so adapters cannot drift on inverted ranges.\n const range = React.useMemo(() => model.getRange(), [model, state])\n\n return { core, model, state, range }\n}\n","import * as React from 'react'\nimport {\n createGridSelectionFeature,\n type GridCore,\n type SelectionKey,\n type SelectionMode,\n} from '@iris-ui-kit/core/grid'\nimport type { SelectionModel } from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\nimport { useGridFeature } from './useGridFeature'\n\nfunction sameKeys<K extends SelectionKey>(left: readonly K[], right: readonly K[]): boolean {\n return (\n left.length === right.length &&\n left.every(\n (key, index) => key === right[index] || (key !== key && right[index] !== right[index]),\n )\n )\n}\n\nexport interface UseGridSelectionOptions<K extends SelectionKey = string> {\n mode?: SelectionMode\n value?: K[]\n defaultValue?: K[]\n onChange?: (keys: K[]) => void\n getKeys?: () => readonly K[]\n}\n\nexport interface UseGridSelectionResult<K extends SelectionKey = string> {\n core: GridCore\n model: SelectionModel<K>\n selection: K[]\n controlled: boolean\n /** Rebase mutations on the latest controlled prop before applying them. */\n rebase(): void\n}\n\n/** Selection feature + React controlled/uncontrolled reactivity bridge. */\nexport function useGridSelection<\n Row extends Record<string, unknown> = Record<string, unknown>,\n K extends SelectionKey = string,\n>(core: GridCore<Row>, options: UseGridSelectionOptions<K> = {}): UseGridSelectionResult<K> {\n const latest = React.useRef(options)\n latest.current = options\n\n const model = useGridFeature<Row, SelectionModel<K>>(core, 'selection', 'getSelectionModel', () =>\n createGridSelectionFeature<Row, K>({\n mode: options.mode,\n defaultSelected: options.value ?? options.defaultValue,\n getKeys: () => latest.current.getKeys?.() ?? [],\n onChange: (keys) => latest.current.onChange?.(keys),\n }),\n )\n const internalSelection = useStore(model.store)\n const controlled = options.value !== undefined\n const wasControlled = React.useRef(controlled)\n const uncontrolledSnapshot = React.useRef<K[]>([])\n const hasUncontrolledSnapshot = React.useRef(!controlled)\n const lastControlledSnapshot = React.useRef<K[]>([...(options.value ?? [])])\n const leavingControlled = wasControlled.current && !controlled\n\n // Capture only genuine uncontrolled state. A rejected controlled mutation may\n // have left the model ahead of the prop; never let that proposal become the\n // next uncontrolled snapshot during the handoff render.\n if (controlled && !wasControlled.current) {\n // Store.batch updates Core synchronously while React may still expose the\n // previous external-store snapshot during this render.\n uncontrolledSnapshot.current = [...model.store.getState()]\n hasUncontrolledSnapshot.current = true\n }\n if (!controlled && !leavingControlled) {\n uncontrolledSnapshot.current = [...internalSelection]\n hasUncontrolledSnapshot.current = true\n }\n if (controlled) lastControlledSnapshot.current = [...(options.value ?? [])]\n const uncontrolledValue = leavingControlled\n ? hasUncontrolledSnapshot.current\n ? uncontrolledSnapshot.current\n : lastControlledSnapshot.current\n : internalSelection\n\n React.useEffect(() => {\n if (controlled) {\n const next = options.value ?? []\n lastControlledSnapshot.current = [...next]\n if (!sameKeys(model.get(), next)) model.sync(next)\n } else if (wasControlled.current) {\n const next = hasUncontrolledSnapshot.current\n ? uncontrolledSnapshot.current\n : lastControlledSnapshot.current\n if (!hasUncontrolledSnapshot.current) {\n uncontrolledSnapshot.current = [...next]\n hasUncontrolledSnapshot.current = true\n }\n if (!sameKeys(model.get(), next)) model.sync(next)\n }\n wasControlled.current = controlled\n }, [controlled, model, options.value ? [...options.value] : undefined])\n\n const rebase = React.useCallback(() => {\n if (latest.current.value !== undefined) model.sync(latest.current.value)\n }, [model])\n\n return {\n core,\n model,\n selection: [...(controlled ? (options.value ?? []) : uncontrolledValue)],\n controlled,\n rebase,\n }\n}\n","import * as React from 'react'\nimport {\n createGridRowsFeature,\n type GridRowKey,\n type GridCore,\n type GridRowsModel,\n type GridRowsTransaction,\n} from '@iris-ui-kit/core/grid'\nimport { useStoreSelector } from '../useStore'\nimport { useGridFeature } from './useGridFeature'\n\nexport interface UseGridRowsOptions<Row extends Record<string, unknown>, Meta = unknown> {\n cloneDefaultRows?: boolean\n rowKeyField?: string\n getRowKey?: (row: Row, index: number) => GridRowKey | undefined\n /** Read nested rows when the source is a tree; omitted keeps flat-row semantics. */\n getChildren?: (row: Row) => readonly Row[] | undefined\n /** Replace nested rows immutably when `getChildren` is not a direct property. */\n setChildren?: (row: Row, children: Row[]) => Row\n onBeforeRowsChange?: (transaction: GridRowsTransaction<Row, Meta>) => void\n onRowsChange?: (transaction: GridRowsTransaction<Row, Meta>) => void\n}\n\nexport interface UseGridRowsResult<Row extends Record<string, unknown>, Meta = unknown> {\n model: GridRowsModel<Row, Meta>\n rows: Row[]\n}\n\n/** Installs the single Grid Core row source and bridges it to React rendering. */\nexport function useGridRows<\n Row extends Record<string, unknown> = Record<string, unknown>,\n Meta = unknown,\n>(\n core: GridCore<Row>,\n initialRows: readonly Row[],\n options: UseGridRowsOptions<Row, Meta> = {},\n): UseGridRowsResult<Row, Meta> {\n const latest = React.useRef(options)\n latest.current = options\n\n const model = useGridFeature<Row, GridRowsModel<Row, Meta>>(core, 'rows', 'getRowsModel', () =>\n createGridRowsFeature<Row, Meta>({\n defaultRows: initialRows,\n cloneDefaultRows: options.cloneDefaultRows,\n rowKeyField: options.rowKeyField,\n getRowKey: (row: Row, index: number) => latest.current.getRowKey?.(row, index),\n getChildren: options.getChildren ? (row) => latest.current.getChildren?.(row) : undefined,\n setChildren: options.setChildren\n ? (row, children) => latest.current.setChildren?.(row, children) as Row\n : undefined,\n onBeforeRowsChange: (transaction) => latest.current.onBeforeRowsChange?.(transaction),\n onRowsChange: (transaction) => latest.current.onRowsChange?.(transaction),\n }),\n )\n const rows = useStoreSelector(model.store, (current) => [...current])\n return { model, rows }\n}\n","import * as React from 'react'\nimport {\n createTableMultiSortComparator,\n createTableSortComparator,\n resolveTableColumnValue,\n sortTableRows,\n} from '@iris-ui-kit/core'\nimport {\n createGridSortingFeature,\n type GridCore,\n type GridSortingModel,\n type SortState,\n} from '@iris-ui-kit/core/grid'\nimport { useStore } from '../useStore'\nimport { useGridFeature } from './useGridFeature'\n\nexport interface GridSortColumn<Row> {\n key: string\n dataIndex?: keyof Row | string\n formula?: string\n sortable?: boolean\n sorter?: (a: Row, b: Row) => number\n sortBy?: string\n sortType?: 'number' | 'string' | 'auto'\n}\n\nexport interface UseGridSortingOptions<Row> {\n leafColumns: GridSortColumn<Row>[]\n sort?: SortState | null\n defaultSort?: SortState | null\n onSortChange?: (next: SortState | null) => void\n multiSort?: boolean\n multiSortState?: SortState[]\n defaultMultiSort?: SortState[]\n onMultiSortChange?: (next: SortState[]) => void\n formulaTables?: Record<string, Row[]>\n}\n\nexport interface UseGridSortingResult<Row> {\n core: GridCore\n model: GridSortingModel\n sortState: SortState | null\n cycleSort: (column: GridSortColumn<Row>) => void\n setSort: (next: SortState | null) => void\n sortComparator: ((a: Row, b: Row) => number) | null\n sortedData: Row[]\n multiSortState: SortState[]\n cycleMultiSort: (column: GridSortColumn<Row>) => void\n setMultiSort: (next: SortState[]) => void\n multiSortComparator: ((a: Row, b: Row) => number) | null\n}\n\nfunction cloneSort(sort: SortState | null): SortState | null {\n return sort ? { ...sort } : null\n}\n\nfunction cloneSorts(sorts: readonly SortState[]): SortState[] {\n return sorts.map((sort) => ({ ...sort }))\n}\n\n/** Installs sorting state in Grid Core and derives React column comparators. */\nexport function useGridSorting<Row extends Record<string, unknown> = Record<string, unknown>>(\n core: GridCore<Row>,\n data: Row[],\n options: UseGridSortingOptions<Row>,\n): UseGridSortingResult<Row> {\n const latest = React.useRef(options)\n latest.current = options\n\n const model = useGridFeature<Row, GridSortingModel>(core, 'sorting', 'getSortingModel', () =>\n createGridSortingFeature<Row>({\n mode: options.multiSort ? 'multiple' : 'single',\n defaultSort: options.sort !== undefined ? options.sort : options.defaultSort,\n defaultMultiSort:\n options.multiSortState !== undefined ? options.multiSortState : options.defaultMultiSort,\n onSortChange: (next) => latest.current.onSortChange?.(next),\n onMultiSortChange: (next) => latest.current.onMultiSortChange?.(next),\n }),\n )\n const internalState = useStore(model.store)\n const sortControlled = options.sort !== undefined\n const multiControlled = options.multiSortState !== undefined\n // React dependency checks cannot observe mutations made through a stable prop\n // reference. Recompute these signatures on every render so controlled sync\n // remains content-sensitive without changing the Core model contract.\n const sortSignature = JSON.stringify(options.sort)\n const multiSortSignature = JSON.stringify(options.multiSortState)\n const wasSortControlled = React.useRef(sortControlled)\n const uncontrolledSort = React.useRef<SortState | null>(null)\n const hasUncontrolledSort = React.useRef(!sortControlled)\n const lastControlledSort = React.useRef<SortState | null>(cloneSort(options.sort ?? null))\n const wasMultiSortControlled = React.useRef(multiControlled)\n const uncontrolledMultiSort = React.useRef<SortState[]>([])\n const hasUncontrolledMultiSort = React.useRef(!multiControlled)\n const lastControlledMultiSort = React.useRef<SortState[]>(\n cloneSorts(options.multiSortState ?? []),\n )\n const leavingSortControlled = wasSortControlled.current && !sortControlled\n const leavingMultiSortControlled = wasMultiSortControlled.current && !multiControlled\n const enteringSortControlled = sortControlled && !wasSortControlled.current\n const enteringMultiSortControlled = multiControlled && !wasMultiSortControlled.current\n\n // Capture only genuine uncontrolled state. A rejected controlled proposal may\n // be ahead of the prop in the model, so it must not become the handoff value.\n if (enteringSortControlled || enteringMultiSortControlled) {\n // Read once before either controlled effect can synchronize its channel.\n const liveState = model.store.getState()\n if (enteringSortControlled) {\n uncontrolledSort.current = cloneSort(liveState.sort)\n hasUncontrolledSort.current = true\n }\n if (enteringMultiSortControlled) {\n uncontrolledMultiSort.current = cloneSorts(liveState.multiSort)\n hasUncontrolledMultiSort.current = true\n }\n }\n if (!sortControlled && !leavingSortControlled) {\n uncontrolledSort.current = cloneSort(internalState.sort)\n hasUncontrolledSort.current = true\n }\n if (!multiControlled && !leavingMultiSortControlled) {\n uncontrolledMultiSort.current = cloneSorts(internalState.multiSort)\n hasUncontrolledMultiSort.current = true\n }\n if (sortControlled) lastControlledSort.current = cloneSort(options.sort ?? null)\n if (multiControlled) {\n lastControlledMultiSort.current = cloneSorts(options.multiSortState ?? [])\n }\n\n const sortState = sortControlled\n ? cloneSort(options.sort ?? null)\n : cloneSort(\n leavingSortControlled\n ? hasUncontrolledSort.current\n ? uncontrolledSort.current\n : lastControlledSort.current\n : internalState.sort,\n )\n const multiSortState = multiControlled\n ? cloneSorts(options.multiSortState ?? [])\n : cloneSorts(\n leavingMultiSortControlled\n ? hasUncontrolledMultiSort.current\n ? uncontrolledMultiSort.current\n : lastControlledMultiSort.current\n : internalState.multiSort,\n )\n\n React.useEffect(() => {\n if (sortControlled) {\n const next = options.sort ?? null\n lastControlledSort.current = cloneSort(next)\n model.syncSort(next)\n } else if (wasSortControlled.current) {\n const restore = hasUncontrolledSort.current\n ? uncontrolledSort.current\n : lastControlledSort.current\n if (!hasUncontrolledSort.current) {\n uncontrolledSort.current = cloneSort(restore)\n hasUncontrolledSort.current = true\n }\n model.syncSort(restore)\n }\n wasSortControlled.current = sortControlled\n }, [model, options.sort, sortControlled, sortSignature])\n\n React.useEffect(() => {\n if (multiControlled) {\n const next = cloneSorts(options.multiSortState ?? [])\n lastControlledMultiSort.current = cloneSorts(next)\n model.syncMultiSort(next)\n } else if (wasMultiSortControlled.current) {\n const restore = hasUncontrolledMultiSort.current\n ? uncontrolledMultiSort.current\n : lastControlledMultiSort.current\n // Preserve the handoff value as the next uncontrolled baseline even if\n // Core was already equal and therefore emitted no store notification.\n uncontrolledMultiSort.current = cloneSorts(restore)\n hasUncontrolledMultiSort.current = true\n model.syncMultiSort(restore)\n }\n wasMultiSortControlled.current = multiControlled\n }, [model, multiControlled, options.multiSortState, multiSortSignature])\n\n const setSort = React.useCallback(\n (next: SortState | null) => {\n if (latest.current.sort !== undefined) model.syncSort(latest.current.sort ?? null)\n model.setSort(next)\n },\n [model],\n )\n const cycleSort = React.useCallback(\n (column: GridSortColumn<Row>) => {\n if (!column.sortable) return\n if (latest.current.sort !== undefined) model.syncSort(latest.current.sort ?? null)\n model.cycleSort(column.key)\n },\n [model],\n )\n const setMultiSort = React.useCallback(\n (next: SortState[]) => {\n if (latest.current.multiSortState !== undefined) {\n model.syncMultiSort(latest.current.multiSortState)\n }\n model.setMultiSort(next)\n },\n [model],\n )\n const cycleMultiSort = React.useCallback(\n (column: GridSortColumn<Row>) => {\n if (!column.sortable) return\n if (latest.current.multiSortState !== undefined) {\n model.syncMultiSort(latest.current.multiSortState)\n }\n model.cycleMultiSort(column.key)\n },\n [model],\n )\n\n const getValue = React.useCallback(\n (row: Row, column: GridSortColumn<Row>): unknown => {\n if (column.sortBy !== undefined) return row[column.sortBy as keyof Row]\n return resolveTableColumnValue(row, column, options.formulaTables)\n },\n [options.formulaTables],\n )\n\n const sortComparator = React.useMemo(\n () => createTableSortComparator(sortState, options.leafColumns, getValue),\n [getValue, options.leafColumns, sortState],\n )\n\n const multiSortComparator = React.useMemo(\n () => createTableMultiSortComparator(multiSortState, options.leafColumns, getValue),\n [getValue, options.leafColumns, multiSortState],\n )\n\n const sortedData = React.useMemo(\n () =>\n sortTableRows(data, options.leafColumns, {\n mode: options.multiSort ? 'multiple' : 'single',\n sort: sortState,\n multiSort: multiSortState,\n getValue,\n }),\n [data, getValue, multiSortState, options.leafColumns, options.multiSort, sortState],\n )\n\n return {\n core,\n model,\n sortState,\n cycleSort,\n setSort,\n sortComparator,\n sortedData,\n multiSortState,\n cycleMultiSort,\n setMultiSort,\n multiSortComparator,\n }\n}\n","import * as React from 'react'\nimport {\n createGridVirtualFeature,\n type GridCore,\n type GridVirtualModel,\n type GridVirtualRangeChange,\n} from '@iris-ui-kit/core/grid'\nimport { useGridFeature } from './useGridFeature'\n\nconst useIsomorphicLayoutEffect =\n typeof window === 'undefined' || typeof document === 'undefined'\n ? React.useEffect\n : React.useLayoutEffect\n\nexport interface UseGridVirtualOptions<Item> {\n items: readonly Item[]\n estimateSize: number | ((index: number) => number)\n viewportSize?: number\n scrollOffset?: number\n buffer?: number\n getItemKey?: (item: Item, index: number) => string | number\n onRangeChange?: (change: GridVirtualRangeChange) => void\n}\n\nexport interface UseGridVirtualResult {\n model: GridVirtualModel\n}\n\n/** Installs the virtual window controller; the viewport component remains the DOM bridge. */\nexport function useGridVirtual<\n Row extends Record<string, unknown> = Record<string, unknown>,\n Item = Row,\n>(core: GridCore<Row>, options: UseGridVirtualOptions<Item>): UseGridVirtualResult {\n const latest = React.useRef(options)\n latest.current = options\n\n const model = useGridFeature<Row, GridVirtualModel>(core, 'virtual', 'getVirtualModel', () =>\n createGridVirtualFeature<Row>({\n count: options.items.length,\n estimateSize: (index) => {\n const estimate = latest.current.estimateSize\n return typeof estimate === 'function' ? estimate(index) : estimate\n },\n viewportSize: options.viewportSize,\n scrollOffset: options.scrollOffset,\n buffer: options.buffer,\n fixedSize: typeof options.estimateSize === 'number' ? options.estimateSize : null,\n getItemKey: (index) => {\n const item = latest.current.items[index]\n const keyOf = latest.current.getItemKey\n return item !== undefined && keyOf ? keyOf(item, index) : index\n },\n onRangeChange: (change) => latest.current.onRangeChange?.(change),\n }),\n )\n\n // An item identity change can be a same-length reorder. setCount intentionally\n // rebuilds the offset tree so keyed measurements are re-seated correctly.\n useIsomorphicLayoutEffect(() => {\n model.setCount(options.items.length)\n }, [model, options.items, options.getItemKey])\n\n useIsomorphicLayoutEffect(() => {\n model.setBuffer(options.buffer ?? 0)\n }, [model, options.buffer])\n\n useIsomorphicLayoutEffect(() => {\n model.setEstimateSize(\n options.estimateSize,\n typeof options.estimateSize === 'number' ? options.estimateSize : null,\n )\n }, [model, options.estimateSize])\n\n useIsomorphicLayoutEffect(() => {\n if (options.viewportSize !== undefined) model.setViewportSize(options.viewportSize)\n }, [model, options.viewportSize])\n\n useIsomorphicLayoutEffect(() => {\n if (options.scrollOffset !== undefined) model.setScroll(options.scrollOffset)\n }, [model, options.scrollOffset])\n\n return { model }\n}\n"]}
|
package/dist/grid.d.cts
ADDED
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { GridCoreOptions, GridFeature, GridCore, GridFilterValues, GridFilteringModel, GridColumnVisibility, GridColumnWidths, GridColumnPinned, GridColumnPin, GridColumnsModel, GridColumnsState, GridExpansionKey, ExpansionMode, ExpansionModel, GridPaginationChange, GridPaginationModel, GridPaginationState, GridRowKey, GridRowsTransaction, GridRowsModel, SelectionKey, SelectionMode, SortState, GridSortingModel, GridClipboardFeatureOptions, GridClipboardModel, GridEditingFeatureOptions, GridEditingKey, GridEditingValidation, GridEditingCommit, GridEditingModel, GridRangeChange, GridRangeModel, GridVirtualRangeChange, GridVirtualModel } from '@iris-ui-kit/core/grid';
|
|
2
|
+
import { FilterRule, SelectionModel, TableCopyFormat, TableClipboardRange, CellEditState, CellRangeState, CellRange } from '@iris-ui-kit/core';
|
|
3
|
+
|
|
4
|
+
interface UseGridCoreOptions<Row extends Record<string, unknown>> extends GridCoreOptions<Row> {
|
|
5
|
+
readonly features?: readonly GridFeature<Row>[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* React lifecycle bridge for one framework-agnostic Grid Core. Features are
|
|
9
|
+
* captured on the first render; use `core.use()` for an explicit late install.
|
|
10
|
+
*/
|
|
11
|
+
declare function useGridCore<Row extends Record<string, unknown> = Record<string, unknown>>(options?: UseGridCoreOptions<Row>): GridCore<Row>;
|
|
12
|
+
|
|
13
|
+
interface GridFilterColumn<Row> {
|
|
14
|
+
key: string;
|
|
15
|
+
filterMethod?: (value: unknown, row: Row, filterValue: string) => boolean;
|
|
16
|
+
}
|
|
17
|
+
interface GridFilterQuery {
|
|
18
|
+
readonly filters: Readonly<Record<string, string>>;
|
|
19
|
+
readonly inValues: Readonly<Record<string, readonly string[]>>;
|
|
20
|
+
readonly rules: readonly FilterRule[];
|
|
21
|
+
}
|
|
22
|
+
interface UseGridFilteringOptions<Row, Column extends GridFilterColumn<Row> = GridFilterColumn<Row>> {
|
|
23
|
+
columns: Column[];
|
|
24
|
+
getValue: (row: Row, column: Column) => unknown;
|
|
25
|
+
filters?: Record<string, string>;
|
|
26
|
+
defaultFilters?: Record<string, string>;
|
|
27
|
+
onFiltersChange?: (filters: Record<string, string>) => void;
|
|
28
|
+
filterValues?: GridFilterValues;
|
|
29
|
+
defaultFilterValues?: GridFilterValues;
|
|
30
|
+
onFilterValuesChange?: (filterValues: GridFilterValues) => void;
|
|
31
|
+
/** Treat missing filter props as controlled empty maps. */
|
|
32
|
+
controlled?: boolean;
|
|
33
|
+
formFilters?: Record<string, string>;
|
|
34
|
+
query?: GridFilterQuery;
|
|
35
|
+
proxy?: boolean;
|
|
36
|
+
remote?: boolean;
|
|
37
|
+
}
|
|
38
|
+
interface UseGridFilteringResult<Row> {
|
|
39
|
+
core: GridCore;
|
|
40
|
+
model: GridFilteringModel;
|
|
41
|
+
filters: Record<string, string>;
|
|
42
|
+
filterValues: GridFilterValues;
|
|
43
|
+
filteredData: Row[];
|
|
44
|
+
}
|
|
45
|
+
/** Installs filtering state in Grid Core and derives the React row view. */
|
|
46
|
+
declare function useGridFiltering<Row extends Record<string, unknown> = Record<string, unknown>, Column extends GridFilterColumn<Row> = GridFilterColumn<Row>>(core: GridCore<Row>, data: Row[], options: UseGridFilteringOptions<Row, Column>): UseGridFilteringResult<Row>;
|
|
47
|
+
|
|
48
|
+
interface UseGridColumnsOptions {
|
|
49
|
+
visibility?: GridColumnVisibility;
|
|
50
|
+
defaultVisibility?: GridColumnVisibility;
|
|
51
|
+
visibilityControlled?: boolean;
|
|
52
|
+
onVisibilityChange?: (visibility: GridColumnVisibility) => void;
|
|
53
|
+
order?: string[];
|
|
54
|
+
defaultOrder?: string[];
|
|
55
|
+
/** Keeps the legacy `undefined` order controlled as an empty source-order override. */
|
|
56
|
+
orderControlled?: boolean;
|
|
57
|
+
onOrderChange?: (order: string[] | undefined) => void;
|
|
58
|
+
widths?: GridColumnWidths;
|
|
59
|
+
defaultWidths?: GridColumnWidths;
|
|
60
|
+
onWidthsChange?: (widths: GridColumnWidths) => void;
|
|
61
|
+
pinned?: GridColumnPinned;
|
|
62
|
+
defaultPinned?: GridColumnPinned;
|
|
63
|
+
onPinnedChange?: (key: string, side: GridColumnPin) => void;
|
|
64
|
+
}
|
|
65
|
+
interface UseGridColumnsResult {
|
|
66
|
+
model: GridColumnsModel;
|
|
67
|
+
state: GridColumnsState;
|
|
68
|
+
controlled: {
|
|
69
|
+
visibility: boolean;
|
|
70
|
+
order: boolean;
|
|
71
|
+
widths: boolean;
|
|
72
|
+
pinned: boolean;
|
|
73
|
+
};
|
|
74
|
+
setVisibility(visibility: GridColumnVisibility): void;
|
|
75
|
+
toggleVisibility(key: string): void;
|
|
76
|
+
setOrder(order: string[] | undefined): void;
|
|
77
|
+
clearOrder(): void;
|
|
78
|
+
setWidths(widths: GridColumnWidths): void;
|
|
79
|
+
setWidth(key: string, width: number): void;
|
|
80
|
+
resetWidths(): void;
|
|
81
|
+
setPinned(key: string, side: GridColumnPin): void;
|
|
82
|
+
}
|
|
83
|
+
/** Installs the four column-state channels and mirrors optional controlled props. */
|
|
84
|
+
declare function useGridColumns<Row extends Record<string, unknown> = Record<string, unknown>>(core: GridCore<Row>, options?: UseGridColumnsOptions): UseGridColumnsResult;
|
|
85
|
+
|
|
86
|
+
interface UseGridExpansionOptions<K extends GridExpansionKey = string> {
|
|
87
|
+
mode?: ExpansionMode;
|
|
88
|
+
defaultValue?: K[];
|
|
89
|
+
onChange?: (keys: K[]) => void;
|
|
90
|
+
getKeys?: () => readonly K[];
|
|
91
|
+
}
|
|
92
|
+
interface UseGridExpansionResult<K extends GridExpansionKey = string> {
|
|
93
|
+
core: GridCore;
|
|
94
|
+
model: ExpansionModel<K>;
|
|
95
|
+
expandedKeys: K[];
|
|
96
|
+
}
|
|
97
|
+
/** Installs one expansion feature and bridges its store into React. */
|
|
98
|
+
declare function useGridExpansion<Row extends Record<string, unknown> = Record<string, unknown>, K extends GridExpansionKey = string>(core: GridCore<Row>, options?: UseGridExpansionOptions<K>): UseGridExpansionResult<K>;
|
|
99
|
+
|
|
100
|
+
interface UseGridPaginationOptions {
|
|
101
|
+
page?: number;
|
|
102
|
+
defaultPage?: number;
|
|
103
|
+
pageSize?: number;
|
|
104
|
+
defaultPageSize?: number;
|
|
105
|
+
total?: number;
|
|
106
|
+
defaultTotal?: number;
|
|
107
|
+
onChange?: (change: GridPaginationChange) => void;
|
|
108
|
+
}
|
|
109
|
+
interface UseGridPaginationResult {
|
|
110
|
+
model: GridPaginationModel;
|
|
111
|
+
pagination: GridPaginationState;
|
|
112
|
+
controlled: boolean;
|
|
113
|
+
setPage(page: number): void;
|
|
114
|
+
setPageSize(pageSize: number): void;
|
|
115
|
+
setPagination(page: number, pageSize: number): void;
|
|
116
|
+
}
|
|
117
|
+
/** Installs pagination in Grid Core and mirrors optional controlled proxy state. */
|
|
118
|
+
declare function useGridPagination<Row extends Record<string, unknown> = Record<string, unknown>>(core: GridCore<Row>, options?: UseGridPaginationOptions): UseGridPaginationResult;
|
|
119
|
+
|
|
120
|
+
interface UseGridRowsOptions<Row extends Record<string, unknown>, Meta = unknown> {
|
|
121
|
+
cloneDefaultRows?: boolean;
|
|
122
|
+
rowKeyField?: string;
|
|
123
|
+
getRowKey?: (row: Row, index: number) => GridRowKey | undefined;
|
|
124
|
+
/** Read nested rows when the source is a tree; omitted keeps flat-row semantics. */
|
|
125
|
+
getChildren?: (row: Row) => readonly Row[] | undefined;
|
|
126
|
+
/** Replace nested rows immutably when `getChildren` is not a direct property. */
|
|
127
|
+
setChildren?: (row: Row, children: Row[]) => Row;
|
|
128
|
+
onBeforeRowsChange?: (transaction: GridRowsTransaction<Row, Meta>) => void;
|
|
129
|
+
onRowsChange?: (transaction: GridRowsTransaction<Row, Meta>) => void;
|
|
130
|
+
}
|
|
131
|
+
interface UseGridRowsResult<Row extends Record<string, unknown>, Meta = unknown> {
|
|
132
|
+
model: GridRowsModel<Row, Meta>;
|
|
133
|
+
rows: Row[];
|
|
134
|
+
}
|
|
135
|
+
/** Installs the single Grid Core row source and bridges it to React rendering. */
|
|
136
|
+
declare function useGridRows<Row extends Record<string, unknown> = Record<string, unknown>, Meta = unknown>(core: GridCore<Row>, initialRows: readonly Row[], options?: UseGridRowsOptions<Row, Meta>): UseGridRowsResult<Row, Meta>;
|
|
137
|
+
|
|
138
|
+
interface UseGridSelectionOptions<K extends SelectionKey = string> {
|
|
139
|
+
mode?: SelectionMode;
|
|
140
|
+
value?: K[];
|
|
141
|
+
defaultValue?: K[];
|
|
142
|
+
onChange?: (keys: K[]) => void;
|
|
143
|
+
getKeys?: () => readonly K[];
|
|
144
|
+
}
|
|
145
|
+
interface UseGridSelectionResult<K extends SelectionKey = string> {
|
|
146
|
+
core: GridCore;
|
|
147
|
+
model: SelectionModel<K>;
|
|
148
|
+
selection: K[];
|
|
149
|
+
controlled: boolean;
|
|
150
|
+
/** Rebase mutations on the latest controlled prop before applying them. */
|
|
151
|
+
rebase(): void;
|
|
152
|
+
}
|
|
153
|
+
/** Selection feature + React controlled/uncontrolled reactivity bridge. */
|
|
154
|
+
declare function useGridSelection<Row extends Record<string, unknown> = Record<string, unknown>, K extends SelectionKey = string>(core: GridCore<Row>, options?: UseGridSelectionOptions<K>): UseGridSelectionResult<K>;
|
|
155
|
+
|
|
156
|
+
interface GridSortColumn<Row> {
|
|
157
|
+
key: string;
|
|
158
|
+
dataIndex?: keyof Row | string;
|
|
159
|
+
formula?: string;
|
|
160
|
+
sortable?: boolean;
|
|
161
|
+
sorter?: (a: Row, b: Row) => number;
|
|
162
|
+
sortBy?: string;
|
|
163
|
+
sortType?: 'number' | 'string' | 'auto';
|
|
164
|
+
}
|
|
165
|
+
interface UseGridSortingOptions<Row> {
|
|
166
|
+
leafColumns: GridSortColumn<Row>[];
|
|
167
|
+
sort?: SortState | null;
|
|
168
|
+
defaultSort?: SortState | null;
|
|
169
|
+
onSortChange?: (next: SortState | null) => void;
|
|
170
|
+
multiSort?: boolean;
|
|
171
|
+
multiSortState?: SortState[];
|
|
172
|
+
defaultMultiSort?: SortState[];
|
|
173
|
+
onMultiSortChange?: (next: SortState[]) => void;
|
|
174
|
+
formulaTables?: Record<string, Row[]>;
|
|
175
|
+
}
|
|
176
|
+
interface UseGridSortingResult<Row> {
|
|
177
|
+
core: GridCore;
|
|
178
|
+
model: GridSortingModel;
|
|
179
|
+
sortState: SortState | null;
|
|
180
|
+
cycleSort: (column: GridSortColumn<Row>) => void;
|
|
181
|
+
setSort: (next: SortState | null) => void;
|
|
182
|
+
sortComparator: ((a: Row, b: Row) => number) | null;
|
|
183
|
+
sortedData: Row[];
|
|
184
|
+
multiSortState: SortState[];
|
|
185
|
+
cycleMultiSort: (column: GridSortColumn<Row>) => void;
|
|
186
|
+
setMultiSort: (next: SortState[]) => void;
|
|
187
|
+
multiSortComparator: ((a: Row, b: Row) => number) | null;
|
|
188
|
+
}
|
|
189
|
+
/** Installs sorting state in Grid Core and derives React column comparators. */
|
|
190
|
+
declare function useGridSorting<Row extends Record<string, unknown> = Record<string, unknown>>(core: GridCore<Row>, data: Row[], options: UseGridSortingOptions<Row>): UseGridSortingResult<Row>;
|
|
191
|
+
|
|
192
|
+
interface LegacyGridRowsProps<Row extends Record<string, unknown>, Meta = unknown> {
|
|
193
|
+
readonly data?: Row[];
|
|
194
|
+
readonly keepSource?: boolean;
|
|
195
|
+
readonly rowKeyField?: string;
|
|
196
|
+
readonly getRowKey?: (row: Row, index: number) => GridRowKey | undefined;
|
|
197
|
+
readonly getChildren?: UseGridRowsOptions<Row, Meta>['getChildren'];
|
|
198
|
+
readonly setChildren?: UseGridRowsOptions<Row, Meta>['setChildren'];
|
|
199
|
+
readonly beforeChange?: UseGridRowsOptions<Row, Meta>['onBeforeRowsChange'];
|
|
200
|
+
readonly onChange?: UseGridRowsOptions<Row, Meta>['onRowsChange'];
|
|
201
|
+
}
|
|
202
|
+
interface LegacyGridColumnsProps {
|
|
203
|
+
readonly columnVisibility?: UseGridColumnsOptions['visibility'];
|
|
204
|
+
readonly onColumnVisibilityChange?: UseGridColumnsOptions['onVisibilityChange'];
|
|
205
|
+
readonly columnOrder?: UseGridColumnsOptions['order'];
|
|
206
|
+
readonly onColumnOrderChange?: UseGridColumnsOptions['onOrderChange'];
|
|
207
|
+
readonly columnWidths?: UseGridColumnsOptions['widths'];
|
|
208
|
+
readonly defaultColumnWidths?: UseGridColumnsOptions['defaultWidths'];
|
|
209
|
+
readonly onColumnWidthsChange?: UseGridColumnsOptions['onWidthsChange'];
|
|
210
|
+
readonly pinnedColumns?: UseGridColumnsOptions['pinned'];
|
|
211
|
+
readonly onColumnPinnedChange?: UseGridColumnsOptions['onPinnedChange'];
|
|
212
|
+
}
|
|
213
|
+
/** Map the four legacy column channels into one feature boundary. */
|
|
214
|
+
declare function toGridColumnsOptions(props: LegacyGridColumnsProps): UseGridColumnsOptions;
|
|
215
|
+
interface LegacyGridRowsOptions<Row extends Record<string, unknown>, Meta = unknown> {
|
|
216
|
+
readonly initialRows: Row[];
|
|
217
|
+
readonly options: UseGridRowsOptions<Row, Meta>;
|
|
218
|
+
}
|
|
219
|
+
/** Map the legacy `data` ownership contract into the rows feature boundary. */
|
|
220
|
+
declare function toGridRowsOptions<Row extends Record<string, unknown>, Meta = unknown>(props: LegacyGridRowsProps<Row, Meta>): LegacyGridRowsOptions<Row, Meta>;
|
|
221
|
+
interface LegacyGridSelectionProps<K extends SelectionKey = string> {
|
|
222
|
+
readonly selectable?: 'none' | 'single' | 'multi';
|
|
223
|
+
readonly selection?: K[];
|
|
224
|
+
readonly defaultSelection?: K[];
|
|
225
|
+
readonly onSelectionChange?: (keys: K[]) => void;
|
|
226
|
+
}
|
|
227
|
+
/** `none` still uses a dormant multiple model, matching the legacy Table. */
|
|
228
|
+
declare function toGridSelectionOptions<K extends SelectionKey = string>(props: LegacyGridSelectionProps<K>): UseGridSelectionOptions<K>;
|
|
229
|
+
interface LegacyGridExpansionProps<K extends GridExpansionKey = string> {
|
|
230
|
+
readonly defaultExpandedRowKeys?: readonly K[];
|
|
231
|
+
readonly onChange?: (keys: string[]) => void;
|
|
232
|
+
}
|
|
233
|
+
declare function toGridExpansionOptions<K extends GridExpansionKey = string>(props: LegacyGridExpansionProps<K>): UseGridExpansionOptions<string>;
|
|
234
|
+
interface LegacyGridPaginationProxyConfig {
|
|
235
|
+
readonly defaultPage?: number;
|
|
236
|
+
readonly pageSize?: number;
|
|
237
|
+
readonly onPageChange?: (page: number, pageSize: number) => void;
|
|
238
|
+
}
|
|
239
|
+
interface LegacyGridPaginationState {
|
|
240
|
+
readonly page: number;
|
|
241
|
+
readonly pageSize: number;
|
|
242
|
+
readonly total: number;
|
|
243
|
+
}
|
|
244
|
+
interface LegacyGridPaginationProps {
|
|
245
|
+
readonly proxyConfig?: LegacyGridPaginationProxyConfig;
|
|
246
|
+
readonly state?: LegacyGridPaginationState;
|
|
247
|
+
readonly request?: (pagination: Pick<LegacyGridPaginationState, 'page' | 'pageSize'>) => void;
|
|
248
|
+
}
|
|
249
|
+
/** Map proxy pagination into a controlled feature; request policy stays outside core. */
|
|
250
|
+
declare function toGridPaginationOptions(props: LegacyGridPaginationProps): UseGridPaginationOptions;
|
|
251
|
+
interface LegacyGridSortingProps<Row extends Record<string, unknown>> {
|
|
252
|
+
readonly columns: GridSortColumn<Row>[];
|
|
253
|
+
readonly sort?: UseGridSortingOptions<Row>['sort'];
|
|
254
|
+
readonly defaultSort?: UseGridSortingOptions<Row>['defaultSort'];
|
|
255
|
+
readonly onSortChange?: UseGridSortingOptions<Row>['onSortChange'];
|
|
256
|
+
readonly multiSort?: boolean;
|
|
257
|
+
readonly multiSortState?: UseGridSortingOptions<Row>['multiSortState'];
|
|
258
|
+
readonly defaultMultiSort?: UseGridSortingOptions<Row>['defaultMultiSort'];
|
|
259
|
+
readonly onMultiSortChange?: UseGridSortingOptions<Row>['onMultiSortChange'];
|
|
260
|
+
readonly formulaTables?: UseGridSortingOptions<Row>['formulaTables'];
|
|
261
|
+
}
|
|
262
|
+
declare function toGridSortingOptions<Row extends Record<string, unknown>>(props: LegacyGridSortingProps<Row>): UseGridSortingOptions<Row>;
|
|
263
|
+
interface LegacyGridFilteringProps<Row extends Record<string, unknown>, Column extends GridFilterColumn<Row>> extends Omit<UseGridFilteringOptions<Row, Column>, 'controlled' | 'proxy' | 'remote'> {
|
|
264
|
+
readonly proxy?: unknown;
|
|
265
|
+
readonly remoteFilter?: boolean;
|
|
266
|
+
}
|
|
267
|
+
declare function toGridFilteringOptions<Row extends Record<string, unknown>, Column extends GridFilterColumn<Row>>(props: LegacyGridFilteringProps<Row, Column>): UseGridFilteringOptions<Row, Column>;
|
|
268
|
+
|
|
269
|
+
type UseGridClipboardOptions<Row extends Record<string, unknown>> = GridClipboardFeatureOptions<Row>;
|
|
270
|
+
interface UseGridClipboardResult<Row extends Record<string, unknown>> {
|
|
271
|
+
core: GridCore<Row>;
|
|
272
|
+
model: GridClipboardModel;
|
|
273
|
+
serialize(format?: TableCopyFormat, copyWithFormat?: boolean): string | null;
|
|
274
|
+
paste(text: string, range?: TableClipboardRange): boolean;
|
|
275
|
+
}
|
|
276
|
+
/** Installs clipboard pure logic while leaving system clipboard I/O in React. */
|
|
277
|
+
declare function useGridClipboard<Row extends Record<string, unknown> = Record<string, unknown>>(core: GridCore<Row>, options: UseGridClipboardOptions<Row>): UseGridClipboardResult<Row>;
|
|
278
|
+
|
|
279
|
+
interface UseGridEditingOptions<Row extends Record<string, unknown>> extends Omit<GridEditingFeatureOptions<Row>, 'onStateChange' | 'onCommit'> {
|
|
280
|
+
onStateChange?: (state: CellEditState<GridEditingKey>) => void;
|
|
281
|
+
onValidation?: (validation: GridEditingValidation) => void;
|
|
282
|
+
onCommit?: (commit: GridEditingCommit<Row>) => void;
|
|
283
|
+
}
|
|
284
|
+
interface UseGridEditingResult<Row extends Record<string, unknown>> {
|
|
285
|
+
core: GridCore<Row>;
|
|
286
|
+
model: GridEditingModel;
|
|
287
|
+
state: CellEditState<GridEditingKey>;
|
|
288
|
+
startCellEdit(rowKey: GridEditingKey, columnKey: string, initialDraft?: unknown): boolean;
|
|
289
|
+
setCellDraft(value: unknown): void;
|
|
290
|
+
cancelCellEdit(): void;
|
|
291
|
+
commitCellEdit(value?: unknown): boolean;
|
|
292
|
+
isCellEditing(rowKey: GridEditingKey, columnKey: string): boolean;
|
|
293
|
+
}
|
|
294
|
+
/** Installs the framework-independent editing feature and bridges its state. */
|
|
295
|
+
declare function useGridEditing<Row extends Record<string, unknown>>(core: GridCore<Row>, options: UseGridEditingOptions<Row>): UseGridEditingResult<Row>;
|
|
296
|
+
|
|
297
|
+
interface UseGridRangeOptions {
|
|
298
|
+
onChange?: (change: GridRangeChange) => void;
|
|
299
|
+
}
|
|
300
|
+
interface UseGridRangeResult<Row extends Record<string, unknown>> {
|
|
301
|
+
core: GridCore<Row>;
|
|
302
|
+
model: GridRangeModel;
|
|
303
|
+
state: CellRangeState;
|
|
304
|
+
range: CellRange | null;
|
|
305
|
+
}
|
|
306
|
+
/** Installs the range feature and bridges its controller snapshot into React. */
|
|
307
|
+
declare function useGridRange<Row extends Record<string, unknown> = Record<string, unknown>>(core: GridCore<Row>, options?: UseGridRangeOptions): UseGridRangeResult<Row>;
|
|
308
|
+
|
|
309
|
+
interface UseGridVirtualOptions<Item> {
|
|
310
|
+
items: readonly Item[];
|
|
311
|
+
estimateSize: number | ((index: number) => number);
|
|
312
|
+
viewportSize?: number;
|
|
313
|
+
scrollOffset?: number;
|
|
314
|
+
buffer?: number;
|
|
315
|
+
getItemKey?: (item: Item, index: number) => string | number;
|
|
316
|
+
onRangeChange?: (change: GridVirtualRangeChange) => void;
|
|
317
|
+
}
|
|
318
|
+
interface UseGridVirtualResult {
|
|
319
|
+
model: GridVirtualModel;
|
|
320
|
+
}
|
|
321
|
+
/** Installs the virtual window controller; the viewport component remains the DOM bridge. */
|
|
322
|
+
declare function useGridVirtual<Row extends Record<string, unknown> = Record<string, unknown>, Item = Row>(core: GridCore<Row>, options: UseGridVirtualOptions<Item>): UseGridVirtualResult;
|
|
323
|
+
|
|
324
|
+
export { type GridFilterColumn, type GridFilterQuery, type GridSortColumn, type LegacyGridColumnsProps, type LegacyGridExpansionProps, type LegacyGridFilteringProps, type LegacyGridPaginationProps, type LegacyGridPaginationProxyConfig, type LegacyGridPaginationState, type LegacyGridRowsOptions, type LegacyGridRowsProps, type LegacyGridSelectionProps, type LegacyGridSortingProps, type UseGridClipboardOptions, type UseGridClipboardResult, type UseGridColumnsOptions, type UseGridColumnsResult, type UseGridCoreOptions, type UseGridEditingOptions, type UseGridEditingResult, type UseGridExpansionOptions, type UseGridExpansionResult, type UseGridFilteringOptions, type UseGridFilteringResult, type UseGridPaginationOptions, type UseGridPaginationResult, type UseGridRangeOptions, type UseGridRangeResult, type UseGridRowsOptions, type UseGridRowsResult, type UseGridSelectionOptions, type UseGridSelectionResult, type UseGridSortingOptions, type UseGridSortingResult, type UseGridVirtualOptions, type UseGridVirtualResult, toGridColumnsOptions, toGridExpansionOptions, toGridFilteringOptions, toGridPaginationOptions, toGridRowsOptions, toGridSelectionOptions, toGridSortingOptions, useGridClipboard, useGridColumns, useGridCore, useGridEditing, useGridExpansion, useGridFiltering, useGridPagination, useGridRange, useGridRows, useGridSelection, useGridSorting, useGridVirtual };
|