@salt-ds/data-grid 1.0.3 → 1.0.4-alpha.0
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-cjs/packages/grid/src/Grid.js +3 -2
- package/dist-cjs/packages/grid/src/Grid.js.map +1 -1
- package/dist-cjs/packages/grid/src/NumericColumn.js +12 -0
- package/dist-cjs/packages/grid/src/NumericColumn.js.map +1 -1
- package/dist-cjs/packages/grid/src/RowSelectionCheckboxCellValue.js +2 -2
- package/dist-cjs/packages/grid/src/RowSelectionCheckboxCellValue.js.map +1 -1
- package/dist-cjs/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js +2 -2
- package/dist-cjs/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
- package/dist-cjs/packages/grid/src/RowSelectionRadioCellValue.js +2 -2
- package/dist-cjs/packages/grid/src/RowSelectionRadioCellValue.js.map +1 -1
- package/dist-cjs/packages/grid/src/RowSelectionRadioHeaderCell.js +2 -2
- package/dist-cjs/packages/grid/src/RowSelectionRadioHeaderCell.js.map +1 -1
- package/dist-cjs/packages/grid/src/TextCellEditor.js +12 -0
- package/dist-cjs/packages/grid/src/TextCellEditor.js.map +1 -1
- package/dist-es/packages/grid/src/Grid.js +3 -2
- package/dist-es/packages/grid/src/Grid.js.map +1 -1
- package/dist-es/packages/grid/src/NumericColumn.js +12 -0
- package/dist-es/packages/grid/src/NumericColumn.js.map +1 -1
- package/dist-es/packages/grid/src/RowSelectionCheckboxCellValue.js +2 -2
- package/dist-es/packages/grid/src/RowSelectionCheckboxCellValue.js.map +1 -1
- package/dist-es/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js +2 -2
- package/dist-es/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
- package/dist-es/packages/grid/src/RowSelectionRadioCellValue.js +1 -1
- package/dist-es/packages/grid/src/RowSelectionRadioCellValue.js.map +1 -1
- package/dist-es/packages/grid/src/RowSelectionRadioHeaderCell.js +1 -1
- package/dist-es/packages/grid/src/RowSelectionRadioHeaderCell.js.map +1 -1
- package/dist-es/packages/grid/src/TextCellEditor.js +12 -0
- package/dist-es/packages/grid/src/TextCellEditor.js.map +1 -1
- package/package.json +5 -4
|
@@ -342,7 +342,6 @@ const Grid = function Grid2(props) {
|
|
|
342
342
|
const rangeSelection = gridHooks.useRangeSelection(cellSelectionMode);
|
|
343
343
|
const moveCursor = react.useCallback(
|
|
344
344
|
(part, rowIdx, colIdx) => {
|
|
345
|
-
cancelEditMode();
|
|
346
345
|
if (!headerIsFocusable && part === "header") {
|
|
347
346
|
console.warn(
|
|
348
347
|
`Cannot move focus to the header. "headerIsFocusable" prop is false.`
|
|
@@ -572,8 +571,10 @@ const Grid = function Grid2(props) {
|
|
|
572
571
|
end: { rowIdx: rowData.length, colIdx: cols.length }
|
|
573
572
|
});
|
|
574
573
|
selectAll();
|
|
574
|
+
return true;
|
|
575
|
+
} else {
|
|
576
|
+
return false;
|
|
575
577
|
}
|
|
576
|
-
break;
|
|
577
578
|
default:
|
|
578
579
|
return false;
|
|
579
580
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grid.js","sources":["../src/Grid.tsx"],"sourcesContent":["import React, {\n CSSProperties,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEventHandler,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { GridColumnInfo } from \"./GridColumn\";\nimport { GridContext } from \"./GridContext\";\nimport { clsx } from \"clsx\";\nimport {\n CellMeasure,\n clamp,\n getFocusablePosition,\n LeftPart,\n MiddlePart,\n RightPart,\n Scrollable,\n ScrollableProps,\n TopLeftPart,\n TopPart,\n TopRightPart,\n useBodyVisibleAreaTop,\n useBodyVisibleColumnRange,\n useClientMidHeight,\n useClientMidWidth,\n useColumnMove,\n useColumnRange,\n useColumnRegistry,\n useColumnResize,\n useHeadVisibleColumnRange,\n useLeftScrolledOutWidth,\n useRangeSelection,\n useRowModels,\n useRowSelection,\n useScrollToCell,\n useSum,\n useSumRangeWidth,\n useSumWidth,\n useVisibleColumnGroupRange,\n useVisibleRowRange,\n} from \"./internal\";\nimport \"./Grid.css\";\nimport { SelectionContext } from \"./SelectionContext\";\nimport { SizingContext } from \"./SizingContext\";\nimport { LayoutContext } from \"./LayoutContext\";\nimport { EditorContext } from \"./EditorContext\"; // TODO remove\nimport { CursorContext, FocusedPart } from \"./CursorContext\";\nimport { ColumnGroupProps } from \"./ColumnGroup\";\nimport { ColumnDragContext } from \"./ColumnDragContext\";\nimport { ColumnGhost } from \"./internal/ColumnGhost\";\nimport { ColumnDropTarget } from \"./internal/ColumnDropTarget\";\nimport { ColumnDataContext } from \"./ColumnDataContext\";\n\nconst withBaseName = makePrefixer(\"saltGrid\");\n\nexport type ColumnSeparatorType = \"regular\" | \"none\" | \"groupEdge\" | \"pinned\";\nexport type ColumnGroupRowSeparatorType = \"first\" | \"regular\" | \"last\";\nexport type ColumnGroupColumnSeparatorType = \"regular\" | \"none\" | \"pinned\";\nexport type GridRowSelectionMode = \"single\" | \"multi\" | \"none\";\nexport type GridCellSelectionMode = \"range\" | \"none\";\n\nexport type RowKeyGetter<T> = (row: T, index: number) => string;\n\nexport type GridColumnMoveHandler = (\n columnId: string,\n fromIndex: number,\n toIndex: number\n) => void;\n\nexport interface GridProps<T = any> {\n /**\n * At least 1 children is expected, options are `ColumnGroup` or `GridColumn`.\n * */\n children: ReactNode;\n /**\n * If `true`, zebra stripes are enabled (odd/even rows have alternate colours)\n * */\n zebra?: boolean;\n /**\n * If `true`, grid header is hidden.\n * */\n hideHeader?: boolean;\n /**\n * If `true`, column separators are rendered.\n * */\n columnSeparators?: boolean;\n /**\n * If `true`, separators are rendered between pinned and unpinned columns.\n * */\n pinnedSeparators?: boolean;\n /**\n * Row data objects. Sparse arrays are supported.\n * */\n rowData: T[];\n /**\n * Should return unique string for a given row data object.\n * If rowData is sparse then this function should work with undefined row data\n * objects and create keys based on row index. `(row: T, index: number) => string`\n * */\n rowKeyGetter?: RowKeyGetter<T>;\n /**\n * Rows with these indices are selected by default.\n * */\n defaultSelectedRowIdxs?: number[];\n /**\n * Selected row indices for controlled mode.\n * */\n selectedRowIdxs?: number[];\n className?: string;\n style?: CSSProperties;\n /**\n * The variant to use. Options are `primary` and `secondary`. Default value is\n * `primary`. `secondary` variant changes grid background to reduce contrast.\n * */\n variant?: \"primary\" | \"secondary\";\n /**\n * Options are `single`, `multi` and `none`.\n * */\n rowSelectionMode?: GridRowSelectionMode;\n onRowSelected?: (selectedRowIdxs: number[]) => void;\n /**\n * If `true`, user will be able to move columns using drag and drop.\n * */\n columnMove?: boolean;\n /**\n * Accepts `(columnId: string, fromIndex: number, toIndex: number) => void`\n * */\n onColumnMoved?: GridColumnMoveHandler;\n /**\n * Options are `range` and `none`.\n * */\n cellSelectionMode?: GridCellSelectionMode;\n onVisibleRowRangeChange?: (start: number, end: number) => void;\n /**\n * If `true`, keyboard navigation is enabled for the header.\n * */\n headerIsFocusable?: boolean;\n}\n\nexport interface GridRowModel<T> {\n key: string;\n index: number;\n data: T;\n}\n\nexport interface GridColumnModel<T> {\n index: number;\n separator: ColumnSeparatorType;\n\n info: GridColumnInfo<T>;\n}\n\nexport interface GridColumnGroupModel {\n index: number;\n data: ColumnGroupProps;\n childrenIds: string[];\n rowSeparator: ColumnGroupRowSeparatorType;\n columnSeparator: ColumnGroupColumnSeparatorType;\n colSpan: number;\n}\n\nfunction defaultRowKeyGetter<T>(row: T, index: number): string {\n return `${index}`;\n}\n\nexport const Grid = function Grid<T>(props: GridProps<T>) {\n const {\n rowData,\n zebra,\n hideHeader,\n columnSeparators,\n pinnedSeparators = true,\n className,\n style,\n rowKeyGetter = defaultRowKeyGetter,\n children,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n variant = \"primary\",\n rowSelectionMode = \"multi\",\n onRowSelected,\n columnMove,\n onColumnMoved,\n cellSelectionMode = \"none\",\n onVisibleRowRangeChange,\n headerIsFocusable,\n } = props;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrollableRef = useRef<HTMLDivElement>(null);\n const middleRef = useRef<HTMLDivElement>(null);\n const topRef = useRef<HTMLDivElement>(null);\n const leftRef = useRef<HTMLDivElement>(null);\n const rightRef = useRef<HTMLDivElement>(null);\n const bottomRef = useRef<HTMLDivElement>(null);\n\n // What caused the latest scroll change. User means the UI (mouse events), table means the component initiated scrolling (scrollToCell was called for example)\n const [scrollSource, setScrollSource] = useState<\"user\" | \"table\">(\"user\");\n const [scrollLeft, setScrollLeft] = useState<number>(0);\n const [scrollTop, setScrollTop] = useState<number>(0);\n\n const [hoverRowKey, setHoverRowKey] = useState<string | undefined>(undefined);\n\n const [\n { clientWidth, clientHeight, scrollBarHeight, scrollBarWidth },\n setDimensions,\n ] = useState({\n clientWidth: 0,\n clientHeight: 0,\n scrollBarHeight: 0,\n scrollBarWidth: 0,\n });\n\n const [rowHeight, setRowHeight] = useState<number>(0);\n\n const [cursorRowIdx, setCursorRowIdx] = useState<number>(0);\n const [cursorColIdx, setCursorColIdx] = useState<number>(0);\n const [focusedPart, setFocusedPart] = useState<FocusedPart>(\n headerIsFocusable ? \"header\" : \"body\"\n );\n\n const [editMode, setEditMode] = useState<boolean>(false);\n const [initialText, setInitialText] = useState<string | undefined>(undefined);\n\n const resizeClient: ScrollableProps<T>[\"resizeClient\"] = useCallback(\n (dimensions) => {\n setDimensions(dimensions);\n },\n []\n );\n\n const {\n leftCols, // Columns pinned to left\n midCols, // Scrollable columns\n rightCols, // Columns pinned to right\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n } = useColumnRegistry(children);\n\n const midColsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n midCols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>])\n ),\n [midCols]\n );\n\n // Width of all columns pinned to left\n const leftWidth = useSumWidth(leftCols);\n // Width of all scrollable columns\n const midWidth = useSumWidth(midCols);\n // Width of all columns pinned to right\n const rightWidth = useSumWidth(rightCols);\n // Total width of all columns\n const totalWidth = useSum([leftWidth, midWidth, rightWidth]);\n\n const hasColumnGroups =\n leftGroups.length > 0 || midGroups.length > 0 || rightGroups.length > 0;\n\n const headRowCount = hideHeader ? 0 : hasColumnGroups ? 2 : 1; // TODO multiple group levels\n const rowCount = rowData.length;\n\n // Footer is not implemented yet.\n const botRowCount = 0; // TODO\n // Height of the header\n const topHeight = rowHeight * headRowCount;\n // Height of the middle part (virtual height)\n const midHeight = rowCount === 0 ? 0 : rowHeight * rowCount + 1;\n // Height of the footer\n const botHeight = botRowCount * rowHeight;\n // Total height of the grid (virtual)\n const totalHeight = useSum([topHeight, midHeight, botHeight]);\n // Client width of the middle part of the grid (viewport)\n const clientMidWidth = useClientMidWidth(clientWidth, leftWidth, rightWidth);\n // Unused width in the middle part, to be filled by an empty column with fake cells.\n const midGap = Math.max(0, Math.floor(clientMidWidth - midWidth));\n\n // Range of unpinned columns visible in the body of the grid (pinned columns are always visible).\n const bodyVisColRng = useBodyVisibleColumnRange(\n midCols,\n scrollLeft,\n clientMidWidth\n );\n\n const midGrpByColId = useMemo(() => {\n const m = new Map<string, GridColumnGroupModel>();\n for (let g of midGroups) {\n for (let c of g.childrenIds) {\n m.set(c, g);\n }\n }\n return m;\n }, [midGroups]);\n\n // Range of visible column groups.\n const visColGrpRng = useVisibleColumnGroupRange(\n bodyVisColRng,\n midCols,\n midGrpByColId,\n leftGroups.length\n );\n\n const visColGrps = useMemo(() => {\n return midGroups.slice(visColGrpRng.start, visColGrpRng.end);\n }, [visColGrpRng, midGroups]);\n\n const headVisColRng = useHeadVisibleColumnRange(\n bodyVisColRng,\n visColGrps,\n midColsById,\n leftCols.length\n );\n\n const bodyScrOutColWh = useLeftScrolledOutWidth(midCols, bodyVisColRng);\n const headScrOutColWh = useLeftScrolledOutWidth(midCols, headVisColRng);\n\n const bodyVisAreaLeft = useSum([leftWidth, bodyScrOutColWh]);\n const headVisAreaLeft = useSum([leftWidth, headScrOutColWh]);\n const clientMidHeight = useClientMidHeight(\n clientHeight,\n topHeight,\n botHeight\n );\n const visRowRng = useVisibleRowRange(\n scrollTop,\n clientMidHeight,\n rowHeight,\n rowCount\n );\n\n const bodyVisAreaTop = useBodyVisibleAreaTop(rowHeight, visRowRng, topHeight);\n\n const bodyVisibleColumns = useColumnRange(midCols, bodyVisColRng);\n const headVisibleColumns = useColumnRange(midCols, headVisColRng);\n const bodyVisColWh = useSumRangeWidth(midCols, bodyVisColRng);\n\n const headVisColWh = bodyVisColWh; // TODO implement groups\n\n const rootStyle = useMemo(\n () => ({\n ...style,\n \"--grid-total-width\": `${totalWidth}px`,\n \"--grid-total-height\": `${totalHeight}px`,\n \"--grid-topPart-height\": `${topHeight}px`,\n \"--grid-leftPart-width\": `${leftWidth}px`,\n \"--grid-rightPart-width\": `${rightWidth}px`,\n \"--grid-bodyVisibleColumns-width\": `${bodyVisColWh}px`,\n \"--grid-bodyVisibleArea-top\": `${bodyVisAreaTop}px`,\n \"--grid-bodyVisibleArea-left\": `${bodyVisAreaLeft}px`,\n \"--grid-bottomHeight\": `${botHeight}px`,\n \"--grid-headerVisibleColumns-width\": `${headVisColWh}px`,\n \"--grid-headerVisibleArea-left\": `${headVisAreaLeft}px`,\n \"--grid-scrollBar-height\": `${scrollBarHeight}px`,\n \"--grid-scrollBar-width\": `${scrollBarWidth}px`,\n }),\n [\n style,\n totalHeight,\n totalWidth,\n topHeight,\n leftWidth,\n rightWidth,\n botHeight,\n bodyVisColWh,\n bodyVisAreaLeft,\n bodyVisAreaTop,\n headVisColWh,\n headVisAreaLeft,\n scrollBarHeight,\n scrollBarWidth,\n ]\n );\n\n const onWheel: EventListener = useCallback(\n (event) => {\n let { deltaX, deltaY, shiftKey } = event as WheelEvent;\n if (deltaX === 0 && shiftKey) {\n deltaX = deltaY;\n deltaY = 0;\n }\n const s = scrollableRef.current;\n if (s) {\n s.scrollLeft += deltaX;\n s.scrollTop += deltaY;\n }\n event.preventDefault();\n event.stopPropagation();\n },\n [scrollableRef.current]\n );\n\n const cols = useMemo(\n () => [...leftCols, ...midCols, ...rightCols],\n [leftCols, midCols, rightCols]\n );\n\n const colsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n cols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>])\n ),\n [cols]\n );\n\n const getColById = useCallback(\n (id: string) => {\n return colsById.get(id);\n },\n [colsById]\n );\n\n const columnDataContext: ColumnDataContext<T> = useMemo(\n () => ({\n getColById,\n }),\n [getColById]\n );\n\n const scroll = useCallback(\n (left?: number, top?: number, source?: \"user\" | \"table\") => {\n setScrollSource(source || \"user\");\n if (left !== undefined) {\n setScrollLeft(left);\n }\n if (top !== undefined) {\n setScrollTop(top);\n }\n },\n [setScrollLeft, setScrollTop, setScrollSource]\n );\n\n const scrollToCell = useScrollToCell(\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll\n );\n\n const focusCellElement = (\n part: FocusedPart,\n rowIdx: number,\n colIdx: number\n ) => {\n setTimeout(() => {\n const selector =\n part === \"body\"\n ? `td[data-row-index=\"${rowIdx}\"][data-column-index=\"${colIdx}\"]`\n : `th[data-column-index=\"${colIdx}\"]`;\n const nodeToFocus = rootRef.current?.querySelector(selector);\n if (nodeToFocus) {\n (nodeToFocus as HTMLElement).focus({ preventScroll: true });\n } else {\n console.warn(`focusCellElement can't find the element`);\n }\n }, 0);\n };\n\n const startEditMode = (text?: string) => {\n if (editMode || cursorRowIdx == undefined || cursorColIdx == undefined) {\n return;\n }\n const r = rowData[cursorRowIdx];\n const c = cols[cursorColIdx];\n const isEditable = !!contextValue.getEditor(c.info.props.id);\n if (isEditable) {\n setInitialText(text);\n setEditMode(true);\n }\n };\n\n const endEditMode = (value: string) => {\n if (!editMode) {\n return;\n }\n if (cursorColIdx == undefined) {\n console.error(`endEditMode: cursorColIdx is undefined in edit mode`);\n return;\n }\n const c = cols[cursorColIdx];\n const handler = c.info.props.onChange;\n if (cursorRowIdx == undefined) {\n console.error(`endEditMode: cursorRowIdx is undefined in edit mode`);\n return;\n }\n if (!handler) {\n console.warn(\n `onChange is not specified for editable column \"${c.info.props.id}\".`\n );\n } else {\n handler(rowData[cursorRowIdx], cursorRowIdx, value);\n }\n setEditMode(false);\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n };\n\n const cancelEditMode = () => {\n if (!editMode) {\n return;\n }\n setEditMode(false);\n if (cursorRowIdx != null && cursorColIdx != null) {\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n }\n };\n\n const {\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectAll,\n selectRows,\n unselectAll,\n onMouseDown: onRowSelectionMouseDown,\n } = useRowSelection(\n rowKeyGetter,\n rowData,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n rowSelectionMode,\n onRowSelected\n );\n\n const rangeSelection = useRangeSelection(cellSelectionMode);\n\n const moveCursor = useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n cancelEditMode();\n if (!headerIsFocusable && part === \"header\") {\n console.warn(\n `Cannot move focus to the header. \"headerIsFocusable\" prop is false.`\n );\n return;\n }\n setFocusedPart(part);\n colIdx = clamp(colIdx, 0, cols.length - 1);\n if (part === \"body\") {\n if (rowData.length < 1 || cols.length < 1) {\n return;\n }\n rowIdx = clamp(rowIdx, 0, rowData.length - 1);\n } else if (part === \"header\") {\n rowIdx = 0; // There is only one row in the header currently\n }\n setCursorRowIdx(rowIdx);\n setCursorColIdx(colIdx);\n scrollToCell(part, rowIdx, colIdx);\n focusCellElement(part, rowIdx, colIdx);\n if (part === \"body\") {\n rangeSelection.onCursorMove({ rowIdx, colIdx });\n }\n },\n [\n setCursorRowIdx,\n setCursorColIdx,\n rowData,\n rowKeyGetter,\n cols,\n rootRef.current,\n scrollToCell,\n endEditMode,\n rangeSelection.onCursorMove,\n focusedPart,\n headerIsFocusable,\n ]\n );\n\n const rows = useRowModels(rowKeyGetter, rowData, visRowRng);\n\n const isLeftRaised = scrollLeft > 0;\n const isRightRaised = scrollLeft + clientMidWidth < midWidth;\n const isHeaderRaised = scrollTop > 0;\n\n const resizeColumn = useCallback(\n (colIdx: number, width: number) => {\n const col = cols[colIdx];\n col.info.onWidthChanged(width);\n },\n [cols]\n );\n\n const onResizeHandleMouseDown = useColumnResize(cols, resizeColumn);\n\n const sizingContext: SizingContext = useMemo(\n () => ({\n resizeColumn,\n rowHeight,\n onResizeHandleMouseDown,\n }),\n [resizeColumn, rowHeight, onResizeHandleMouseDown]\n );\n\n const layoutContext: LayoutContext = useMemo(\n () => ({\n totalHeight,\n totalWidth,\n clientWidth,\n clientHeight,\n }),\n [totalHeight, totalWidth]\n );\n\n const editorContext: EditorContext = useMemo(\n () => ({\n initialText,\n editMode,\n startEditMode,\n endEditMode,\n cancelEditMode,\n }),\n [editMode, startEditMode, endEditMode, cancelEditMode, initialText]\n );\n\n const [isFocused, setFocused] = useState<boolean>(false);\n\n const onFocus = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n setFocused(true);\n },\n [setFocused]\n );\n\n const onBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n setFocused(false);\n },\n [setFocused]\n );\n\n const cursorContext: CursorContext = useMemo(\n () => ({\n isFocused,\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n focusedPart,\n headerIsFocusable: Boolean(headerIsFocusable),\n }),\n [\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n isFocused,\n focusedPart,\n headerIsFocusable,\n ]\n );\n\n const onColumnMove: GridColumnMoveHandler = (\n columnId,\n fromIndex,\n toIndex\n ) => {\n if (onColumnMoved && fromIndex !== toIndex) {\n onColumnMoved(columnId, fromIndex, toIndex);\n }\n };\n\n const {\n dragState,\n onColumnMoveHandleMouseDown,\n activeTarget,\n onColumnMoveCancel,\n } = useColumnMove(\n columnMove,\n rootRef,\n leftCols,\n midCols,\n rightCols,\n cols,\n scrollLeft,\n clientMidWidth,\n onColumnMove\n );\n\n const columnDragContext: ColumnDragContext = useMemo(\n () => ({\n columnMove,\n onColumnMoveHandleMouseDown,\n }),\n [columnMove, onColumnMoveHandleMouseDown]\n );\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n onRowSelectionMouseDown(event);\n rangeSelection.onCellMouseDown(event);\n\n const target = event.target as HTMLElement;\n try {\n const { part, rowIndex, columnIndex } = getFocusablePosition(target);\n if (part === \"header\" && !headerIsFocusable) {\n return;\n }\n moveCursor(part, rowIndex, columnIndex);\n } catch (e) {\n // TODO\n }\n };\n\n const onKeyUp: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n const { key } = event;\n if (key === \"Shift\") {\n rangeSelection.onKeyboardRangeSelectionEnd();\n }\n },\n [rangeSelection.onKeyboardRangeSelectionEnd]\n );\n\n const editModeKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"F2\":\n case \"Enter\":\n startEditMode();\n break;\n case \"Backspace\":\n startEditMode(\"\");\n break;\n case \"Escape\":\n if (editMode) {\n cancelEditMode();\n break;\n } else {\n return false;\n }\n default:\n if (\n !editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n /^[\\w\\d ]$/.test(key)\n ) {\n startEditMode(key);\n } else {\n return false;\n }\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [startEditMode, editMode, cancelEditMode]\n );\n\n const selectionKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"Shift\":\n rangeSelection.onKeyboardRangeSelectionStart({\n rowIdx: cursorRowIdx || 0,\n colIdx: cursorColIdx || 0,\n });\n break;\n case \" \":\n if (focusedPart === \"body\") {\n if (event.ctrlKey) {\n if (cursorColIdx != undefined) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: cursorColIdx },\n end: { rowIdx: rowData.length, colIdx: cursorColIdx },\n });\n }\n } else {\n if (cursorRowIdx != undefined) {\n selectRows({\n rowIndex: cursorRowIdx,\n isRange: false,\n incremental: true,\n unselectOtherRows: !event.shiftKey,\n });\n }\n }\n break;\n } else {\n return false;\n }\n case \"a\":\n if (event.ctrlKey || event.metaKey) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: 0 },\n end: { rowIdx: rowData.length, colIdx: cols.length },\n });\n selectAll();\n }\n break;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n rangeSelection.selectRange,\n rangeSelection.onKeyboardRangeSelectionStart,\n selectRows,\n selectAll,\n cursorColIdx,\n cursorRowIdx,\n rowData.length,\n cols.length,\n focusedPart,\n ]\n );\n\n const clipboardKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (\n key === \"c\" &&\n (event.ctrlKey || event.metaKey) &&\n rangeSelection.selectedCellRange\n ) {\n const { start, end } = rangeSelection.selectedCellRange;\n const c = (x: number, y: number) => x - y;\n const [minRow, maxRow] = [start.rowIdx, end.rowIdx].sort(c);\n const [minCol, maxCol] = [start.colIdx, end.colIdx].sort(c);\n const text: string[] = [];\n for (let r = minRow; r <= maxRow; ++r) {\n const row = rowData[r];\n const rowText: string[] = [];\n for (let c = minCol; c <= maxCol; ++c) {\n const col = cols[c]!;\n const cellValue = col.info.props.getValue!(row);\n rowText.push(cellValue);\n }\n text.push(rowText.join(\"\\t\"));\n }\n navigator.clipboard.writeText(text.join(\"\\n\"));\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n [rangeSelection.selectedCellRange]\n );\n\n const pageSize = Math.max(1, visRowRng.length - 1);\n\n const navigationKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"ArrowLeft\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) - 1);\n break;\n case \"ArrowRight\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) + 1);\n break;\n case \"ArrowUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) - 1, cursorColIdx);\n }\n break;\n case \"ArrowDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) + 1, cursorColIdx);\n }\n break;\n case \"PageUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) - pageSize,\n cursorColIdx\n );\n }\n break;\n case \"PageDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) + pageSize,\n cursorColIdx\n );\n }\n break;\n case \"Home\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, 0);\n } else {\n moveCursor(focusedPart, 0, 0);\n }\n break;\n case \"End\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, cols.length - 1);\n } else {\n moveCursor(focusedPart, rowData.length - 1, cols.length - 1);\n }\n break;\n case \"Tab\":\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n editMode &&\n cursorColIdx != null &&\n cursorRowIdx != null\n ) {\n if (!event.shiftKey) {\n if (cursorColIdx < cols.length - 1) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx + 1);\n } else {\n if (cursorRowIdx < rowData.length - 1) {\n moveCursor(focusedPart, cursorRowIdx + 1, 0);\n }\n }\n } else {\n if (cursorColIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx - 1);\n } else {\n if (cursorRowIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx - 1, cols.length - 1);\n }\n }\n }\n } else {\n return false;\n }\n break;\n case \"Enter\":\n if (\n editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !event.shiftKey\n ) {\n if (cursorRowIdx == undefined) {\n moveCursor(focusedPart, 0, 0);\n } else {\n moveCursor(focusedPart, cursorRowIdx + 1, cursorColIdx);\n }\n } else {\n return false;\n }\n break;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n moveCursor,\n cursorRowIdx,\n cursorRowIdx,\n cols.length,\n rowData.length,\n headerIsFocusable,\n pageSize,\n ]\n );\n\n const columnMoveKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (key === \"Escape\") {\n onColumnMoveCancel();\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n []\n );\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (cursorColIdx != undefined && cursorRowIdx != undefined) {\n const column = cols[cursorColIdx];\n if (column.info.props.onKeyDown) {\n column.info.props.onKeyDown(event, cursorRowIdx);\n }\n }\n if (!event.isPropagationStopped()) {\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ].find((handler) => {\n return handler(event);\n });\n }\n },\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ]\n );\n\n const selectionContext: SelectionContext = useMemo(\n () => ({\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n selectedCellRange: rangeSelection?.selectedCellRange,\n }),\n [\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n rangeSelection?.selectedCellRange,\n ]\n );\n\n useEffect(() => {\n if (onVisibleRowRangeChange) {\n onVisibleRowRangeChange(visRowRng.start, visRowRng.end);\n }\n }, [onVisibleRowRangeChange, visRowRng]);\n\n return (\n <GridContext.Provider value={contextValue}>\n <LayoutContext.Provider value={layoutContext}>\n <SelectionContext.Provider value={selectionContext}>\n <ColumnDragContext.Provider value={columnDragContext}>\n <CursorContext.Provider value={cursorContext}>\n <SizingContext.Provider value={sizingContext}>\n <EditorContext.Provider value={editorContext}>\n <ColumnDataContext.Provider value={columnDataContext}>\n {props.children}\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"zebra\")]: zebra,\n [withBaseName(\"columnSeparators\")]: columnSeparators,\n [withBaseName(\"pinnedSeparators\")]: pinnedSeparators,\n [withBaseName(\"primaryBackground\")]:\n variant === \"primary\",\n [withBaseName(\"secondaryBackground\")]:\n variant === \"secondary\",\n },\n className\n )}\n style={rootStyle}\n ref={rootRef}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onMouseDown={onMouseDown}\n onFocus={onFocus}\n onBlur={onBlur}\n data-name=\"grid-root\"\n role=\"grid\"\n aria-colcount={cols.length}\n aria-rowcount={rowCount + headRowCount}\n aria-multiselectable={rowSelectionMode === \"multi\"}\n >\n <CellMeasure setRowHeight={setRowHeight} />\n <Scrollable\n resizeClient={resizeClient}\n scrollLeft={scrollLeft}\n scrollTop={scrollTop}\n scrollSource={scrollSource}\n scroll={scroll}\n scrollerRef={scrollableRef}\n topRef={topRef}\n rightRef={rightRef}\n bottomRef={bottomRef}\n leftRef={leftRef}\n middleRef={middleRef}\n />\n {!hideHeader && leftCols.length > 0 && (\n <TopLeftPart\n onWheel={onWheel}\n columns={leftCols}\n columnGroups={leftGroups}\n rightShadow={isLeftRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && (\n <TopPart\n columns={headVisibleColumns}\n columnGroups={visColGrps}\n topRef={topRef}\n onWheel={onWheel}\n midGap={midGap}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && rightCols.length > 0 && (\n <TopRightPart\n onWheel={onWheel}\n columns={rightCols}\n columnGroups={rightGroups}\n leftShadow={isRightRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {leftCols.length > 0 && (\n <LeftPart\n leftRef={leftRef}\n onWheel={onWheel}\n columns={leftCols}\n rows={rows}\n rightShadow={isLeftRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n />\n )}\n <MiddlePart\n middleRef={middleRef}\n onWheel={onWheel}\n columns={bodyVisibleColumns}\n rows={rows}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n midGap={midGap}\n zebra={zebra}\n />\n {rightCols.length > 0 && (\n <RightPart\n rightRef={rightRef}\n onWheel={onWheel}\n columns={rightCols}\n rows={rows}\n leftShadow={isRightRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n />\n )}\n <ColumnDropTarget x={activeTarget?.x} />\n <ColumnGhost\n columns={cols}\n rows={rows}\n dragState={dragState}\n zebra={zebra}\n />\n </div>\n </ColumnDataContext.Provider>\n </EditorContext.Provider>\n </SizingContext.Provider>\n </CursorContext.Provider>\n </ColumnDragContext.Provider>\n </SelectionContext.Provider>\n </LayoutContext.Provider>\n </GridContext.Provider>\n );\n};\n"],"names":["makePrefixer","Grid","useRef","useState","useCallback","useColumnRegistry","useMemo","useSumWidth","useSum","useClientMidWidth","useBodyVisibleColumnRange","useVisibleColumnGroupRange","useHeadVisibleColumnRange","useLeftScrolledOutWidth","useClientMidHeight","useVisibleRowRange","useBodyVisibleAreaTop","useColumnRange","useSumRangeWidth","useScrollToCell","useRowSelection","useRangeSelection","clamp","useRowModels","useColumnResize","useColumnMove","getFocusablePosition","c","useEffect","jsx","GridContext","LayoutContext","SelectionContext","ColumnDragContext","CursorContext","SizingContext","EditorContext","jsxs","ColumnDataContext","clsx","CellMeasure","Scrollable","TopLeftPart","TopPart","TopRightPart","LeftPart","MiddlePart","RightPart","ColumnDropTarget","ColumnGhost"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,MAAM,YAAA,GAAeA,kBAAa,UAAU,CAAA,CAAA;AA4G5C,SAAS,mBAAA,CAAuB,KAAQ,KAAuB,EAAA;AAC7D,EAAA,OAAO,CAAG,EAAA,KAAA,CAAA,CAAA,CAAA;AACZ,CAAA;AAEa,MAAA,IAAA,GAAO,SAASC,KAAAA,CAAQ,KAAqB,EAAA;AACxD,EAAM,MAAA;AAAA,IACJ,OAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAmB,GAAA,IAAA;AAAA,IACnB,SAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAe,GAAA,mBAAA;AAAA,IACf,QAAA;AAAA,IACA,sBAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAU,GAAA,SAAA;AAAA,IACV,gBAAmB,GAAA,OAAA;AAAA,IACnB,aAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAoB,GAAA,MAAA;AAAA,IACpB,uBAAA;AAAA,IACA,iBAAA;AAAA,GACE,GAAA,KAAA,CAAA;AAEJ,EAAM,MAAA,OAAA,GAAUC,aAAuB,IAAI,CAAA,CAAA;AAC3C,EAAM,MAAA,aAAA,GAAgBA,aAAuB,IAAI,CAAA,CAAA;AACjD,EAAM,MAAA,SAAA,GAAYA,aAAuB,IAAI,CAAA,CAAA;AAC7C,EAAM,MAAA,MAAA,GAASA,aAAuB,IAAI,CAAA,CAAA;AAC1C,EAAM,MAAA,OAAA,GAAUA,aAAuB,IAAI,CAAA,CAAA;AAC3C,EAAM,MAAA,QAAA,GAAWA,aAAuB,IAAI,CAAA,CAAA;AAC5C,EAAM,MAAA,SAAA,GAAYA,aAAuB,IAAI,CAAA,CAAA;AAG7C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,eAA2B,MAAM,CAAA,CAAA;AACzE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAiB,CAAC,CAAA,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAiB,CAAC,CAAA,CAAA;AAEpD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAA6B,KAAS,CAAA,CAAA,CAAA;AAE5E,EAAM,MAAA;AAAA,IACJ,EAAE,WAAA,EAAa,YAAc,EAAA,eAAA,EAAiB,cAAe,EAAA;AAAA,IAC7D,aAAA;AAAA,MACEA,cAAS,CAAA;AAAA,IACX,WAAa,EAAA,CAAA;AAAA,IACb,YAAc,EAAA,CAAA;AAAA,IACd,eAAiB,EAAA,CAAA;AAAA,IACjB,cAAgB,EAAA,CAAA;AAAA,GACjB,CAAA,CAAA;AAED,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAiB,CAAC,CAAA,CAAA;AAEpD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAiB,CAAC,CAAA,CAAA;AAC1D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAiB,CAAC,CAAA,CAAA;AAC1D,EAAM,MAAA,CAAC,WAAa,EAAA,cAAc,CAAI,GAAAA,cAAA;AAAA,IACpC,oBAAoB,QAAW,GAAA,MAAA;AAAA,GACjC,CAAA;AAEA,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAkB,KAAK,CAAA,CAAA;AACvD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAA6B,KAAS,CAAA,CAAA,CAAA;AAE5E,EAAA,MAAM,YAAmD,GAAAC,iBAAA;AAAA,IACvD,CAAC,UAAe,KAAA;AACd,MAAA,aAAA,CAAc,UAAU,CAAA,CAAA;AAAA,KAC1B;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,GACF,GAAIC,4BAAkB,QAAQ,CAAA,CAAA;AAE9B,EAAA,MAAM,WAAc,GAAAC,aAAA;AAAA,IAClB,MACE,IAAI,GAAA;AAAA,MACF,OAAA,CAAQ,GAAI,CAAA,CAAC,CAAM,KAAA,CAAC,EAAE,IAAK,CAAA,KAAA,CAAM,EAAI,EAAA,CAAC,CAAiC,CAAA;AAAA,KACzE;AAAA,IACF,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAGA,EAAM,MAAA,SAAA,GAAYC,sBAAY,QAAQ,CAAA,CAAA;AAEtC,EAAM,MAAA,QAAA,GAAWA,sBAAY,OAAO,CAAA,CAAA;AAEpC,EAAM,MAAA,UAAA,GAAaA,sBAAY,SAAS,CAAA,CAAA;AAExC,EAAA,MAAM,aAAaC,gBAAO,CAAA,CAAC,SAAW,EAAA,QAAA,EAAU,UAAU,CAAC,CAAA,CAAA;AAE3D,EAAM,MAAA,eAAA,GACJ,WAAW,MAAS,GAAA,CAAA,IAAK,UAAU,MAAS,GAAA,CAAA,IAAK,YAAY,MAAS,GAAA,CAAA,CAAA;AAExE,EAAA,MAAM,YAAe,GAAA,UAAA,GAAa,CAAI,GAAA,eAAA,GAAkB,CAAI,GAAA,CAAA,CAAA;AAC5D,EAAA,MAAM,WAAW,OAAQ,CAAA,MAAA,CAAA;AAGzB,EAAA,MAAM,WAAc,GAAA,CAAA,CAAA;AAEpB,EAAA,MAAM,YAAY,SAAY,GAAA,YAAA,CAAA;AAE9B,EAAA,MAAM,SAAY,GAAA,QAAA,KAAa,CAAI,GAAA,CAAA,GAAI,YAAY,QAAW,GAAA,CAAA,CAAA;AAE9D,EAAA,MAAM,YAAY,WAAc,GAAA,SAAA,CAAA;AAEhC,EAAA,MAAM,cAAcA,gBAAO,CAAA,CAAC,SAAW,EAAA,SAAA,EAAW,SAAS,CAAC,CAAA,CAAA;AAE5D,EAAA,MAAM,cAAiB,GAAAC,2BAAA,CAAkB,WAAa,EAAA,SAAA,EAAW,UAAU,CAAA,CAAA;AAE3E,EAAM,MAAA,MAAA,GAAS,KAAK,GAAI,CAAA,CAAA,EAAG,KAAK,KAAM,CAAA,cAAA,GAAiB,QAAQ,CAAC,CAAA,CAAA;AAGhE,EAAA,MAAM,aAAgB,GAAAC,mCAAA;AAAA,IACpB,OAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,aAAA,GAAgBJ,cAAQ,MAAM;AAClC,IAAM,MAAA,CAAA,uBAAQ,GAAkC,EAAA,CAAA;AAChD,IAAA,KAAA,IAAS,KAAK,SAAW,EAAA;AACvB,MAAS,KAAA,IAAA,CAAA,IAAK,EAAE,WAAa,EAAA;AAC3B,QAAE,CAAA,CAAA,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA;AAAA,OACZ;AAAA,KACF;AACA,IAAO,OAAA,CAAA,CAAA;AAAA,GACT,EAAG,CAAC,SAAS,CAAC,CAAA,CAAA;AAGd,EAAA,MAAM,YAAe,GAAAK,oCAAA;AAAA,IACnB,aAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAW,CAAA,MAAA;AAAA,GACb,CAAA;AAEA,EAAM,MAAA,UAAA,GAAaL,cAAQ,MAAM;AAC/B,IAAA,OAAO,SAAU,CAAA,KAAA,CAAM,YAAa,CAAA,KAAA,EAAO,aAAa,GAAG,CAAA,CAAA;AAAA,GAC1D,EAAA,CAAC,YAAc,EAAA,SAAS,CAAC,CAAA,CAAA;AAE5B,EAAA,MAAM,aAAgB,GAAAM,mCAAA;AAAA,IACpB,aAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAS,CAAA,MAAA;AAAA,GACX,CAAA;AAEA,EAAM,MAAA,eAAA,GAAkBC,iCAAwB,CAAA,OAAA,EAAS,aAAa,CAAA,CAAA;AACtE,EAAM,MAAA,eAAA,GAAkBA,iCAAwB,CAAA,OAAA,EAAS,aAAa,CAAA,CAAA;AAEtE,EAAA,MAAM,eAAkB,GAAAL,gBAAA,CAAO,CAAC,SAAA,EAAW,eAAe,CAAC,CAAA,CAAA;AAC3D,EAAA,MAAM,eAAkB,GAAAA,gBAAA,CAAO,CAAC,SAAA,EAAW,eAAe,CAAC,CAAA,CAAA;AAC3D,EAAA,MAAM,eAAkB,GAAAM,4BAAA;AAAA,IACtB,YAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,SAAY,GAAAC,4BAAA;AAAA,IAChB,SAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,cAAiB,GAAAC,+BAAA,CAAsB,SAAW,EAAA,SAAA,EAAW,SAAS,CAAA,CAAA;AAE5E,EAAM,MAAA,kBAAA,GAAqBC,wBAAe,CAAA,OAAA,EAAS,aAAa,CAAA,CAAA;AAChE,EAAM,MAAA,kBAAA,GAAqBA,wBAAe,CAAA,OAAA,EAAS,aAAa,CAAA,CAAA;AAChE,EAAM,MAAA,YAAA,GAAeC,0BAAiB,CAAA,OAAA,EAAS,aAAa,CAAA,CAAA;AAE5D,EAAA,MAAM,YAAe,GAAA,YAAA,CAAA;AAErB,EAAA,MAAM,SAAY,GAAAZ,aAAA;AAAA,IAChB,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,sBAAsB,CAAG,EAAA,UAAA,CAAA,EAAA,CAAA;AAAA,MACzB,uBAAuB,CAAG,EAAA,WAAA,CAAA,EAAA,CAAA;AAAA,MAC1B,yBAAyB,CAAG,EAAA,SAAA,CAAA,EAAA,CAAA;AAAA,MAC5B,yBAAyB,CAAG,EAAA,SAAA,CAAA,EAAA,CAAA;AAAA,MAC5B,0BAA0B,CAAG,EAAA,UAAA,CAAA,EAAA,CAAA;AAAA,MAC7B,mCAAmC,CAAG,EAAA,YAAA,CAAA,EAAA,CAAA;AAAA,MACtC,8BAA8B,CAAG,EAAA,cAAA,CAAA,EAAA,CAAA;AAAA,MACjC,+BAA+B,CAAG,EAAA,eAAA,CAAA,EAAA,CAAA;AAAA,MAClC,uBAAuB,CAAG,EAAA,SAAA,CAAA,EAAA,CAAA;AAAA,MAC1B,qCAAqC,CAAG,EAAA,YAAA,CAAA,EAAA,CAAA;AAAA,MACxC,iCAAiC,CAAG,EAAA,eAAA,CAAA,EAAA,CAAA;AAAA,MACpC,2BAA2B,CAAG,EAAA,eAAA,CAAA,EAAA,CAAA;AAAA,MAC9B,0BAA0B,CAAG,EAAA,cAAA,CAAA,EAAA,CAAA;AAAA,KAC/B,CAAA;AAAA,IACA;AAAA,MACE,KAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,cAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,OAAyB,GAAAF,iBAAA;AAAA,IAC7B,CAAC,KAAU,KAAA;AACT,MAAA,IAAI,EAAE,MAAA,EAAQ,MAAQ,EAAA,QAAA,EAAa,GAAA,KAAA,CAAA;AACnC,MAAI,IAAA,MAAA,KAAW,KAAK,QAAU,EAAA;AAC5B,QAAS,MAAA,GAAA,MAAA,CAAA;AACT,QAAS,MAAA,GAAA,CAAA,CAAA;AAAA,OACX;AACA,MAAA,MAAM,IAAI,aAAc,CAAA,OAAA,CAAA;AACxB,MAAA,IAAI,CAAG,EAAA;AACL,QAAA,CAAA,CAAE,UAAc,IAAA,MAAA,CAAA;AAChB,QAAA,CAAA,CAAE,SAAa,IAAA,MAAA,CAAA;AAAA,OACjB;AACA,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,KACxB;AAAA,IACA,CAAC,cAAc,OAAO,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,MAAM,IAAO,GAAAE,aAAA;AAAA,IACX,MAAM,CAAC,GAAG,UAAU,GAAG,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,IAC5C,CAAC,QAAU,EAAA,OAAA,EAAS,SAAS,CAAA;AAAA,GAC/B,CAAA;AAEA,EAAA,MAAM,QAAW,GAAAA,aAAA;AAAA,IACf,MACE,IAAI,GAAA;AAAA,MACF,IAAA,CAAK,GAAI,CAAA,CAAC,CAAM,KAAA,CAAC,EAAE,IAAK,CAAA,KAAA,CAAM,EAAI,EAAA,CAAC,CAAiC,CAAA;AAAA,KACtE;AAAA,IACF,CAAC,IAAI,CAAA;AAAA,GACP,CAAA;AAEA,EAAA,MAAM,UAAa,GAAAF,iBAAA;AAAA,IACjB,CAAC,EAAe,KAAA;AACd,MAAO,OAAA,QAAA,CAAS,IAAI,EAAE,CAAA,CAAA;AAAA,KACxB;AAAA,IACA,CAAC,QAAQ,CAAA;AAAA,GACX,CAAA;AAEA,EAAA,MAAM,iBAA0C,GAAAE,aAAA;AAAA,IAC9C,OAAO;AAAA,MACL,UAAA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,MAAM,MAAS,GAAAF,iBAAA;AAAA,IACb,CAAC,IAAe,EAAA,GAAA,EAAc,MAA8B,KAAA;AAC1D,MAAA,eAAA,CAAgB,UAAU,MAAM,CAAA,CAAA;AAChC,MAAA,IAAI,SAAS,KAAW,CAAA,EAAA;AACtB,QAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AAAA,OACpB;AACA,MAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AACrB,QAAA,YAAA,CAAa,GAAG,CAAA,CAAA;AAAA,OAClB;AAAA,KACF;AAAA,IACA,CAAC,aAAe,EAAA,YAAA,EAAc,eAAe,CAAA;AAAA,GAC/C,CAAA;AAEA,EAAA,MAAM,YAAe,GAAAe,yBAAA;AAAA,IACnB,SAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,gBAAmB,GAAA,CACvB,IACA,EAAA,MAAA,EACA,MACG,KAAA;AACH,IAAA,UAAA,CAAW,MAAM;AAvcrB,MAAA,IAAA,EAAA,CAAA;AAwcM,MAAA,MAAM,WACJ,IAAS,KAAA,MAAA,GACL,CAAsB,mBAAA,EAAA,MAAA,CAAA,sBAAA,EAA+B,aACrD,CAAyB,sBAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA;AAC/B,MAAA,MAAM,WAAc,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,OAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,aAAc,CAAA,QAAA,CAAA,CAAA;AACnD,MAAA,IAAI,WAAa,EAAA;AACf,QAAC,WAA4B,CAAA,KAAA,CAAM,EAAE,aAAA,EAAe,MAAM,CAAA,CAAA;AAAA,OACrD,MAAA;AACL,QAAA,OAAA,CAAQ,KAAK,CAAyC,uCAAA,CAAA,CAAA,CAAA;AAAA,OACxD;AAAA,OACC,CAAC,CAAA,CAAA;AAAA,GACN,CAAA;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,IAAkB,KAAA;AACvC,IAAA,IAAI,QAAY,IAAA,YAAA,IAAgB,KAAa,CAAA,IAAA,YAAA,IAAgB,KAAW,CAAA,EAAA;AACtE,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,MAAM,IAAI,IAAK,CAAA,YAAA,CAAA,CAAA;AACf,IAAM,MAAA,UAAA,GAAa,CAAC,CAAC,YAAA,CAAa,UAAU,CAAE,CAAA,IAAA,CAAK,MAAM,EAAE,CAAA,CAAA;AAC3D,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,cAAA,CAAe,IAAI,CAAA,CAAA;AACnB,MAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,KAClB;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,KAAkB,KAAA;AACrC,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,OAAA;AAAA,KACF;AACA,IAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,MAAA,OAAA,CAAQ,MAAM,CAAqD,mDAAA,CAAA,CAAA,CAAA;AACnE,MAAA,OAAA;AAAA,KACF;AACA,IAAA,MAAM,IAAI,IAAK,CAAA,YAAA,CAAA,CAAA;AACf,IAAM,MAAA,OAAA,GAAU,CAAE,CAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAA;AAC7B,IAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,MAAA,OAAA,CAAQ,MAAM,CAAqD,mDAAA,CAAA,CAAA,CAAA;AACnE,MAAA,OAAA;AAAA,KACF;AACA,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAQ,OAAA,CAAA,IAAA;AAAA,QACN,CAAA,+CAAA,EAAkD,CAAE,CAAA,IAAA,CAAK,KAAM,CAAA,EAAA,CAAA,EAAA,CAAA;AAAA,OACjE,CAAA;AAAA,KACK,MAAA;AACL,MAAQ,OAAA,CAAA,OAAA,CAAQ,YAAe,CAAA,EAAA,YAAA,EAAc,KAAK,CAAA,CAAA;AAAA,KACpD;AACA,IAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AACjB,IAAiB,gBAAA,CAAA,WAAA,EAAa,cAAc,YAAY,CAAA,CAAA;AAAA,GAC1D,CAAA;AAEA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,OAAA;AAAA,KACF;AACA,IAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AACjB,IAAI,IAAA,YAAA,IAAgB,IAAQ,IAAA,YAAA,IAAgB,IAAM,EAAA;AAChD,MAAiB,gBAAA,CAAA,WAAA,EAAa,cAAc,YAAY,CAAA,CAAA;AAAA,KAC1D;AAAA,GACF,CAAA;AAEA,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAa,EAAA,uBAAA;AAAA,GACX,GAAAC,yBAAA;AAAA,IACF,YAAA;AAAA,IACA,OAAA;AAAA,IACA,sBAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,cAAA,GAAiBC,4BAAkB,iBAAiB,CAAA,CAAA;AAE1D,EAAA,MAAM,UAAa,GAAAjB,iBAAA;AAAA,IACjB,CAAC,IAAmB,EAAA,MAAA,EAAgB,MAAmB,KAAA;AACrD,MAAe,cAAA,EAAA,CAAA;AACf,MAAI,IAAA,CAAC,iBAAqB,IAAA,IAAA,KAAS,QAAU,EAAA;AAC3C,QAAQ,OAAA,CAAA,IAAA;AAAA,UACN,CAAA,mEAAA,CAAA;AAAA,SACF,CAAA;AACA,QAAA,OAAA;AAAA,OACF;AACA,MAAA,cAAA,CAAe,IAAI,CAAA,CAAA;AACnB,MAAA,MAAA,GAASkB,WAAM,CAAA,MAAA,EAAQ,CAAG,EAAA,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA;AACzC,MAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,QAAA,IAAI,OAAQ,CAAA,MAAA,GAAS,CAAK,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACzC,UAAA,OAAA;AAAA,SACF;AACA,QAAA,MAAA,GAASA,WAAM,CAAA,MAAA,EAAQ,CAAG,EAAA,OAAA,CAAQ,SAAS,CAAC,CAAA,CAAA;AAAA,OAC9C,MAAA,IAAW,SAAS,QAAU,EAAA;AAC5B,QAAS,MAAA,GAAA,CAAA,CAAA;AAAA,OACX;AACA,MAAA,eAAA,CAAgB,MAAM,CAAA,CAAA;AACtB,MAAA,eAAA,CAAgB,MAAM,CAAA,CAAA;AACtB,MAAa,YAAA,CAAA,IAAA,EAAM,QAAQ,MAAM,CAAA,CAAA;AACjC,MAAiB,gBAAA,CAAA,IAAA,EAAM,QAAQ,MAAM,CAAA,CAAA;AACrC,MAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,QAAA,cAAA,CAAe,YAAa,CAAA,EAAE,MAAQ,EAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,OAChD;AAAA,KACF;AAAA,IACA;AAAA,MACE,eAAA;AAAA,MACA,eAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAQ,CAAA,OAAA;AAAA,MACR,YAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAe,CAAA,YAAA;AAAA,MACf,WAAA;AAAA,MACA,iBAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,IAAO,GAAAC,sBAAA,CAAa,YAAc,EAAA,OAAA,EAAS,SAAS,CAAA,CAAA;AAE1D,EAAA,MAAM,eAAe,UAAa,GAAA,CAAA,CAAA;AAClC,EAAM,MAAA,aAAA,GAAgB,aAAa,cAAiB,GAAA,QAAA,CAAA;AACpD,EAAA,MAAM,iBAAiB,SAAY,GAAA,CAAA,CAAA;AAEnC,EAAA,MAAM,YAAe,GAAAnB,iBAAA;AAAA,IACnB,CAAC,QAAgB,KAAkB,KAAA;AACjC,MAAA,MAAM,MAAM,IAAK,CAAA,MAAA,CAAA,CAAA;AACjB,MAAI,GAAA,CAAA,IAAA,CAAK,eAAe,KAAK,CAAA,CAAA;AAAA,KAC/B;AAAA,IACA,CAAC,IAAI,CAAA;AAAA,GACP,CAAA;AAEA,EAAM,MAAA,uBAAA,GAA0BoB,yBAAgB,CAAA,IAAA,EAAM,YAAY,CAAA,CAAA;AAElE,EAAA,MAAM,aAA+B,GAAAlB,aAAA;AAAA,IACnC,OAAO;AAAA,MACL,YAAA;AAAA,MACA,SAAA;AAAA,MACA,uBAAA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,YAAc,EAAA,SAAA,EAAW,uBAAuB,CAAA;AAAA,GACnD,CAAA;AAEA,EAAA,MAAM,aAA+B,GAAAA,aAAA;AAAA,IACnC,OAAO;AAAA,MACL,WAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,aAAa,UAAU,CAAA;AAAA,GAC1B,CAAA;AAEA,EAAA,MAAM,aAA+B,GAAAA,aAAA;AAAA,IACnC,OAAO;AAAA,MACL,WAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,aAAe,EAAA,WAAA,EAAa,gBAAgB,WAAW,CAAA;AAAA,GACpE,CAAA;AAEA,EAAA,MAAM,CAAC,SAAA,EAAW,UAAU,CAAA,GAAIH,eAAkB,KAAK,CAAA,CAAA;AAEvD,EAAA,MAAM,OAAU,GAAAC,iBAAA;AAAA,IACd,CAAC,KAA4C,KAAA;AAC3C,MAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,KACjB;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,MAAM,MAAS,GAAAA,iBAAA;AAAA,IACb,CAAC,KAA4C,KAAA;AAC3C,MAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAAA,KAClB;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,MAAM,aAA+B,GAAAE,aAAA;AAAA,IACnC,OAAO;AAAA,MACL,SAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA,EAAmB,QAAQ,iBAAiB,CAAA;AAAA,KAC9C,CAAA;AAAA,IACA;AAAA,MACE,YAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,YAAsC,GAAA,CAC1C,QACA,EAAA,SAAA,EACA,OACG,KAAA;AACH,IAAI,IAAA,aAAA,IAAiB,cAAc,OAAS,EAAA;AAC1C,MAAc,aAAA,CAAA,QAAA,EAAU,WAAW,OAAO,CAAA,CAAA;AAAA,KAC5C;AAAA,GACF,CAAA;AAEA,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,2BAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,GACE,GAAAmB,uBAAA;AAAA,IACF,UAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,iBAAuC,GAAAnB,aAAA;AAAA,IAC3C,OAAO;AAAA,MACL,UAAA;AAAA,MACA,2BAAA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,YAAY,2BAA2B,CAAA;AAAA,GAC1C,CAAA;AAEA,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,uBAAA,CAAwB,KAAK,CAAA,CAAA;AAC7B,IAAA,cAAA,CAAe,gBAAgB,KAAK,CAAA,CAAA;AAEpC,IAAA,MAAM,SAAS,KAAM,CAAA,MAAA,CAAA;AACrB,IAAI,IAAA;AACF,MAAA,MAAM,EAAE,IAAM,EAAA,QAAA,EAAU,WAAY,EAAA,GAAIoB,2BAAqB,MAAM,CAAA,CAAA;AACnE,MAAI,IAAA,IAAA,KAAS,QAAY,IAAA,CAAC,iBAAmB,EAAA;AAC3C,QAAA,OAAA;AAAA,OACF;AACA,MAAW,UAAA,CAAA,IAAA,EAAM,UAAU,WAAW,CAAA,CAAA;AAAA,aAC/B,CAAP,EAAA;AAAA,KAEF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,OAAgD,GAAAtB,iBAAA;AAAA,IACpD,CAAC,KAAU,KAAA;AACT,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,QAAA,cAAA,CAAe,2BAA4B,EAAA,CAAA;AAAA,OAC7C;AAAA,KACF;AAAA,IACA,CAAC,eAAe,2BAA2B,CAAA;AAAA,GAC7C,CAAA;AAEA,EAAA,MAAM,kBAAqB,GAAAA,iBAAA;AAAA,IACzB,CAAC,KAAyC,KAAA;AACxC,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAQ,QAAA,GAAA;AAAA,QACD,KAAA,IAAA,CAAA;AAAA,QACA,KAAA,OAAA;AACH,UAAc,aAAA,EAAA,CAAA;AACd,UAAA,MAAA;AAAA,QACG,KAAA,WAAA;AACH,UAAA,aAAA,CAAc,EAAE,CAAA,CAAA;AAChB,UAAA,MAAA;AAAA,QACG,KAAA,QAAA;AACH,UAAA,IAAI,QAAU,EAAA;AACZ,YAAe,cAAA,EAAA,CAAA;AACf,YAAA,MAAA;AAAA,WACK,MAAA;AACL,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AAAA,QAAA;AAEA,UAAA,IACE,CAAC,QAAA,IACD,CAAC,KAAA,CAAM,WACP,CAAC,KAAA,CAAM,OACP,IAAA,CAAC,KAAM,CAAA,MAAA,IACP,WAAY,CAAA,IAAA,CAAK,GAAG,CACpB,EAAA;AACA,YAAA,aAAA,CAAc,GAAG,CAAA,CAAA;AAAA,WACZ,MAAA;AACL,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AAAA,OAAA;AAEJ,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,IACA,CAAC,aAAe,EAAA,QAAA,EAAU,cAAc,CAAA;AAAA,GAC1C,CAAA;AAEA,EAAA,MAAM,mBAAsB,GAAAA,iBAAA;AAAA,IAC1B,CAAC,KAAyC,KAAA;AACxC,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAQ,QAAA,GAAA;AAAA,QACD,KAAA,OAAA;AACH,UAAA,cAAA,CAAe,6BAA8B,CAAA;AAAA,YAC3C,QAAQ,YAAgB,IAAA,CAAA;AAAA,YACxB,QAAQ,YAAgB,IAAA,CAAA;AAAA,WACzB,CAAA,CAAA;AACD,UAAA,MAAA;AAAA,QACG,KAAA,GAAA;AACH,UAAA,IAAI,gBAAgB,MAAQ,EAAA;AAC1B,YAAA,IAAI,MAAM,OAAS,EAAA;AACjB,cAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,gBAAA,cAAA,CAAe,WAAY,CAAA;AAAA,kBACzB,KAAO,EAAA,EAAE,MAAQ,EAAA,CAAA,EAAG,QAAQ,YAAa,EAAA;AAAA,kBACzC,KAAK,EAAE,MAAA,EAAQ,OAAQ,CAAA,MAAA,EAAQ,QAAQ,YAAa,EAAA;AAAA,iBACrD,CAAA,CAAA;AAAA,eACH;AAAA,aACK,MAAA;AACL,cAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,gBAAW,UAAA,CAAA;AAAA,kBACT,QAAU,EAAA,YAAA;AAAA,kBACV,OAAS,EAAA,KAAA;AAAA,kBACT,WAAa,EAAA,IAAA;AAAA,kBACb,iBAAA,EAAmB,CAAC,KAAM,CAAA,QAAA;AAAA,iBAC3B,CAAA,CAAA;AAAA,eACH;AAAA,aACF;AACA,YAAA,MAAA;AAAA,WACK,MAAA;AACL,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AAAA,QACG,KAAA,GAAA;AACH,UAAI,IAAA,KAAA,CAAM,OAAW,IAAA,KAAA,CAAM,OAAS,EAAA;AAClC,YAAA,cAAA,CAAe,WAAY,CAAA;AAAA,cACzB,KAAO,EAAA,EAAE,MAAQ,EAAA,CAAA,EAAG,QAAQ,CAAE,EAAA;AAAA,cAC9B,KAAK,EAAE,MAAA,EAAQ,QAAQ,MAAQ,EAAA,MAAA,EAAQ,KAAK,MAAO,EAAA;AAAA,aACpD,CAAA,CAAA;AACD,YAAU,SAAA,EAAA,CAAA;AAAA,WACZ;AACA,UAAA,MAAA;AAAA,QAAA;AAEA,UAAO,OAAA,KAAA,CAAA;AAAA,OAAA;AAEX,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,cAAe,CAAA,WAAA;AAAA,MACf,cAAe,CAAA,6BAAA;AAAA,MACf,UAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAQ,CAAA,MAAA;AAAA,MACR,IAAK,CAAA,MAAA;AAAA,MACL,WAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,mBAAsB,GAAAA,iBAAA;AAAA,IAC1B,CAAC,KAAyC,KAAA;AACxC,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAA,IACE,QAAQ,GACP,KAAA,KAAA,CAAM,WAAW,KAAM,CAAA,OAAA,CAAA,IACxB,eAAe,iBACf,EAAA;AACA,QAAA,MAAM,EAAE,KAAA,EAAO,GAAI,EAAA,GAAI,cAAe,CAAA,iBAAA,CAAA;AACtC,QAAA,MAAM,CAAI,GAAA,CAAC,CAAW,EAAA,CAAA,KAAc,CAAI,GAAA,CAAA,CAAA;AACxC,QAAM,MAAA,CAAC,MAAQ,EAAA,MAAM,CAAI,GAAA,CAAC,KAAM,CAAA,MAAA,EAAQ,GAAI,CAAA,MAAM,CAAE,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAC1D,QAAM,MAAA,CAAC,MAAQ,EAAA,MAAM,CAAI,GAAA,CAAC,KAAM,CAAA,MAAA,EAAQ,GAAI,CAAA,MAAM,CAAE,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAC1D,QAAA,MAAM,OAAiB,EAAC,CAAA;AACxB,QAAA,KAAA,IAAS,CAAI,GAAA,MAAA,EAAQ,CAAK,IAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACrC,UAAA,MAAM,MAAM,OAAQ,CAAA,CAAA,CAAA,CAAA;AACpB,UAAA,MAAM,UAAoB,EAAC,CAAA;AAC3B,UAAA,KAAA,IAASuB,EAAI,GAAA,MAAA,EAAQA,EAAK,IAAA,MAAA,EAAQ,EAAEA,EAAG,EAAA;AACrC,YAAA,MAAM,MAAM,IAAKA,CAAAA,EAAAA,CAAAA,CAAAA;AACjB,YAAA,MAAM,SAAY,GAAA,GAAA,CAAI,IAAK,CAAA,KAAA,CAAM,SAAU,GAAG,CAAA,CAAA;AAC9C,YAAA,OAAA,CAAQ,KAAK,SAAS,CAAA,CAAA;AAAA,WACxB;AACA,UAAA,IAAA,CAAK,IAAK,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,SAC9B;AACA,QAAA,SAAA,CAAU,SAAU,CAAA,SAAA,CAAU,IAAK,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAC7C,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AACA,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,IACA,CAAC,eAAe,iBAAiB,CAAA;AAAA,GACnC,CAAA;AAEA,EAAA,MAAM,WAAW,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,SAAA,CAAU,SAAS,CAAC,CAAA,CAAA;AAEjD,EAAA,MAAM,oBAAuB,GAAAvB,iBAAA;AAAA,IAC3B,CAAC,KAAyC,KAAA;AACxC,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAQ,QAAA,GAAA;AAAA,QACD,KAAA,WAAA;AACH,UAAA,UAAA,CAAW,WAAa,EAAA,YAAA,EAAA,CAAe,YAAgB,IAAA,CAAA,IAAK,CAAC,CAAA,CAAA;AAC7D,UAAA,MAAA;AAAA,QACG,KAAA,YAAA;AACH,UAAA,UAAA,CAAW,WAAa,EAAA,YAAA,EAAA,CAAe,YAAgB,IAAA,CAAA,IAAK,CAAC,CAAA,CAAA;AAC7D,UAAA,MAAA;AAAA,QACG,KAAA,SAAA;AACH,UAAI,IAAA,YAAA,KAAiB,KAAK,iBAAmB,EAAA;AAC3C,YAAW,UAAA,CAAA,QAAA,EAAU,GAAG,YAAY,CAAA,CAAA;AAAA,WAC/B,MAAA;AACL,YAAA,UAAA,CAAW,WAAc,EAAA,CAAA,YAAA,IAAgB,CAAK,IAAA,CAAA,EAAG,YAAY,CAAA,CAAA;AAAA,WAC/D;AACA,UAAA,MAAA;AAAA,QACG,KAAA,WAAA;AACH,UAAA,IAAI,gBAAgB,QAAU,EAAA;AAC5B,YAAW,UAAA,CAAA,MAAA,EAAQ,GAAG,YAAY,CAAA,CAAA;AAAA,WAC7B,MAAA;AACL,YAAA,UAAA,CAAW,WAAc,EAAA,CAAA,YAAA,IAAgB,CAAK,IAAA,CAAA,EAAG,YAAY,CAAA,CAAA;AAAA,WAC/D;AACA,UAAA,MAAA;AAAA,QACG,KAAA,QAAA;AACH,UAAI,IAAA,YAAA,KAAiB,KAAK,iBAAmB,EAAA;AAC3C,YAAW,UAAA,CAAA,QAAA,EAAU,GAAG,YAAY,CAAA,CAAA;AAAA,WAC/B,MAAA;AACL,YAAA,UAAA;AAAA,cACE,WAAA;AAAA,cAAA,CACC,gBAAgB,CAAK,IAAA,QAAA;AAAA,cACtB,YAAA;AAAA,aACF,CAAA;AAAA,WACF;AACA,UAAA,MAAA;AAAA,QACG,KAAA,UAAA;AACH,UAAA,IAAI,gBAAgB,QAAU,EAAA;AAC5B,YAAW,UAAA,CAAA,MAAA,EAAQ,GAAG,YAAY,CAAA,CAAA;AAAA,WAC7B,MAAA;AACL,YAAA,UAAA;AAAA,cACE,WAAA;AAAA,cAAA,CACC,gBAAgB,CAAK,IAAA,QAAA;AAAA,cACtB,YAAA;AAAA,aACF,CAAA;AAAA,WACF;AACA,UAAA,MAAA;AAAA,QACG,KAAA,MAAA;AACH,UAAI,IAAA,CAAC,MAAM,OAAS,EAAA;AAClB,YAAW,UAAA,CAAA,WAAA,EAAa,cAAc,CAAC,CAAA,CAAA;AAAA,WAClC,MAAA;AACL,YAAW,UAAA,CAAA,WAAA,EAAa,GAAG,CAAC,CAAA,CAAA;AAAA,WAC9B;AACA,UAAA,MAAA;AAAA,QACG,KAAA,KAAA;AACH,UAAI,IAAA,CAAC,MAAM,OAAS,EAAA;AAClB,YAAA,UAAA,CAAW,WAAa,EAAA,YAAA,EAAc,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAAA,WAChD,MAAA;AACL,YAAA,UAAA,CAAW,aAAa,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA;AAAA,WAC7D;AACA,UAAA,MAAA;AAAA,QACG,KAAA,KAAA;AACH,UAAA,IACE,CAAC,KAAA,CAAM,OACP,IAAA,CAAC,KAAM,CAAA,OAAA,IACP,CAAC,KAAA,CAAM,MACP,IAAA,QAAA,IACA,YAAgB,IAAA,IAAA,IAChB,gBAAgB,IAChB,EAAA;AACA,YAAI,IAAA,CAAC,MAAM,QAAU,EAAA;AACnB,cAAI,IAAA,YAAA,GAAe,IAAK,CAAA,MAAA,GAAS,CAAG,EAAA;AAClC,gBAAW,UAAA,CAAA,WAAA,EAAa,YAAc,EAAA,YAAA,GAAe,CAAC,CAAA,CAAA;AAAA,eACjD,MAAA;AACL,gBAAI,IAAA,YAAA,GAAe,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA;AACrC,kBAAW,UAAA,CAAA,WAAA,EAAa,YAAe,GAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,iBAC7C;AAAA,eACF;AAAA,aACK,MAAA;AACL,cAAA,IAAI,eAAe,CAAG,EAAA;AACpB,gBAAW,UAAA,CAAA,WAAA,EAAa,YAAc,EAAA,YAAA,GAAe,CAAC,CAAA,CAAA;AAAA,eACjD,MAAA;AACL,gBAAA,IAAI,eAAe,CAAG,EAAA;AACpB,kBAAA,UAAA,CAAW,WAAa,EAAA,YAAA,GAAe,CAAG,EAAA,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA;AAAA,iBAC3D;AAAA,eACF;AAAA,aACF;AAAA,WACK,MAAA;AACL,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AACA,UAAA,MAAA;AAAA,QACG,KAAA,OAAA;AACH,UAAA,IACE,QACA,IAAA,CAAC,KAAM,CAAA,OAAA,IACP,CAAC,KAAA,CAAM,OACP,IAAA,CAAC,KAAM,CAAA,MAAA,IACP,CAAC,KAAA,CAAM,QACP,EAAA;AACA,YAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,cAAW,UAAA,CAAA,WAAA,EAAa,GAAG,CAAC,CAAA,CAAA;AAAA,aACvB,MAAA;AACL,cAAW,UAAA,CAAA,WAAA,EAAa,YAAe,GAAA,CAAA,EAAG,YAAY,CAAA,CAAA;AAAA,aACxD;AAAA,WACK,MAAA;AACL,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AACA,UAAA,MAAA;AAAA,QAAA;AAEA,UAAO,OAAA,KAAA,CAAA;AAAA,OAAA;AAEX,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,UAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAK,CAAA,MAAA;AAAA,MACL,OAAQ,CAAA,MAAA;AAAA,MACR,iBAAA;AAAA,MACA,QAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,oBAAuB,GAAAA,iBAAA;AAAA,IAC3B,CAAC,KAAyC,KAAA;AACxC,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,QAAmB,kBAAA,EAAA,CAAA;AACnB,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AACA,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,SAAkD,GAAAA,iBAAA;AAAA,IACtD,CAAC,KAAU,KAAA;AACT,MAAI,IAAA,YAAA,IAAgB,KAAa,CAAA,IAAA,YAAA,IAAgB,KAAW,CAAA,EAAA;AAC1D,QAAA,MAAM,SAAS,IAAK,CAAA,YAAA,CAAA,CAAA;AACpB,QAAI,IAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,SAAW,EAAA;AAC/B,UAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,SAAU,CAAA,KAAA,EAAO,YAAY,CAAA,CAAA;AAAA,SACjD;AAAA,OACF;AACA,MAAI,IAAA,CAAC,KAAM,CAAA,oBAAA,EAAwB,EAAA;AACjC,QAAA;AAAA,UACE,oBAAA;AAAA,UACA,mBAAA;AAAA,UACA,mBAAA;AAAA,UACA,kBAAA;AAAA,UACA,oBAAA;AAAA,SACF,CAAE,IAAK,CAAA,CAAC,OAAY,KAAA;AAClB,UAAA,OAAO,QAAQ,KAAK,CAAA,CAAA;AAAA,SACrB,CAAA,CAAA;AAAA,OACH;AAAA,KACF;AAAA,IACA;AAAA,MACE,oBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,kBAAA;AAAA,MACA,oBAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,gBAAqC,GAAAE,aAAA;AAAA,IACzC,OAAO;AAAA,MACL,UAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,mBAAmB,cAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,iBAAA;AAAA,KACrC,CAAA;AAAA,IACA;AAAA,MACE,UAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,iBAAA;AAAA,KAClB;AAAA,GACF,CAAA;AAEA,EAAAsB,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,uBAAyB,EAAA;AAC3B,MAAwB,uBAAA,CAAA,SAAA,CAAU,KAAO,EAAA,SAAA,CAAU,GAAG,CAAA,CAAA;AAAA,KACxD;AAAA,GACC,EAAA,CAAC,uBAAyB,EAAA,SAAS,CAAC,CAAA,CAAA;AAEvC,EACE,uBAAAC,cAAA,CAACC,wBAAY,QAAZ,EAAA;AAAA,IAAqB,KAAO,EAAA,YAAA;AAAA,IAC3B,QAAA,kBAAAD,cAAA,CAACE,4BAAc,QAAd,EAAA;AAAA,MAAuB,KAAO,EAAA,aAAA;AAAA,MAC7B,QAAA,kBAAAF,cAAA,CAACG,kCAAiB,QAAjB,EAAA;AAAA,QAA0B,KAAO,EAAA,gBAAA;AAAA,QAChC,QAAA,kBAAAH,cAAA,CAACI,oCAAkB,QAAlB,EAAA;AAAA,UAA2B,KAAO,EAAA,iBAAA;AAAA,UACjC,QAAA,kBAAAJ,cAAA,CAACK,4BAAc,QAAd,EAAA;AAAA,YAAuB,KAAO,EAAA,aAAA;AAAA,YAC7B,QAAA,kBAAAL,cAAA,CAACM,4BAAc,QAAd,EAAA;AAAA,cAAuB,KAAO,EAAA,aAAA;AAAA,cAC7B,QAAA,kBAAAN,cAAA,CAACO,4BAAc,QAAd,EAAA;AAAA,gBAAuB,KAAO,EAAA,aAAA;AAAA,gBAC7B,QAAA,kBAAAC,eAAA,CAACC,oCAAkB,QAAlB,EAAA;AAAA,kBAA2B,KAAO,EAAA,iBAAA;AAAA,kBAChC,QAAA,EAAA;AAAA,oBAAM,KAAA,CAAA,QAAA;AAAA,oCACND,eAAA,CAAA,KAAA,EAAA;AAAA,sBACC,SAAW,EAAAE,SAAA;AAAA,wBACT,YAAa,EAAA;AAAA,wBACb;AAAA,0BACE,CAAC,YAAa,CAAA,OAAO,CAAI,GAAA,KAAA;AAAA,0BACzB,CAAC,YAAa,CAAA,kBAAkB,CAAI,GAAA,gBAAA;AAAA,0BACpC,CAAC,YAAa,CAAA,kBAAkB,CAAI,GAAA,gBAAA;AAAA,0BACpC,CAAC,YAAA,CAAa,mBAAmB,CAAA,GAC/B,OAAY,KAAA,SAAA;AAAA,0BACd,CAAC,YAAA,CAAa,qBAAqB,CAAA,GACjC,OAAY,KAAA,WAAA;AAAA,yBAChB;AAAA,wBACA,SAAA;AAAA,uBACF;AAAA,sBACA,KAAO,EAAA,SAAA;AAAA,sBACP,GAAK,EAAA,OAAA;AAAA,sBACL,SAAA;AAAA,sBACA,OAAA;AAAA,sBACA,WAAA;AAAA,sBACA,OAAA;AAAA,sBACA,MAAA;AAAA,sBACA,WAAU,EAAA,WAAA;AAAA,sBACV,IAAK,EAAA,MAAA;AAAA,sBACL,iBAAe,IAAK,CAAA,MAAA;AAAA,sBACpB,iBAAe,QAAW,GAAA,YAAA;AAAA,sBAC1B,wBAAsB,gBAAqB,KAAA,OAAA;AAAA,sBAE3C,QAAA,EAAA;AAAA,wCAACV,cAAA,CAAAW,uBAAA,EAAA;AAAA,0BAAY,YAAA;AAAA,yBAA4B,CAAA;AAAA,wCACxCX,cAAA,CAAAY,qBAAA,EAAA;AAAA,0BACC,YAAA;AAAA,0BACA,UAAA;AAAA,0BACA,SAAA;AAAA,0BACA,YAAA;AAAA,0BACA,MAAA;AAAA,0BACA,WAAa,EAAA,aAAA;AAAA,0BACb,MAAA;AAAA,0BACA,QAAA;AAAA,0BACA,SAAA;AAAA,0BACA,OAAA;AAAA,0BACA,SAAA;AAAA,yBACF,CAAA;AAAA,wBACC,CAAC,UAAA,IAAc,QAAS,CAAA,MAAA,GAAS,qBAC/BZ,cAAA,CAAAa,uBAAA,EAAA;AAAA,0BACC,OAAA;AAAA,0BACA,OAAS,EAAA,QAAA;AAAA,0BACT,YAAc,EAAA,UAAA;AAAA,0BACd,WAAa,EAAA,YAAA;AAAA,0BACb,YAAc,EAAA,cAAA;AAAA,yBAChB,CAAA;AAAA,wBAED,CAAC,8BACCb,cAAA,CAAAc,eAAA,EAAA;AAAA,0BACC,OAAS,EAAA,kBAAA;AAAA,0BACT,YAAc,EAAA,UAAA;AAAA,0BACd,MAAA;AAAA,0BACA,OAAA;AAAA,0BACA,MAAA;AAAA,0BACA,YAAc,EAAA,cAAA;AAAA,yBAChB,CAAA;AAAA,wBAED,CAAC,UAAA,IAAc,SAAU,CAAA,MAAA,GAAS,qBAChCd,cAAA,CAAAe,yBAAA,EAAA;AAAA,0BACC,OAAA;AAAA,0BACA,OAAS,EAAA,SAAA;AAAA,0BACT,YAAc,EAAA,WAAA;AAAA,0BACd,UAAY,EAAA,aAAA;AAAA,0BACZ,YAAc,EAAA,cAAA;AAAA,yBAChB,CAAA;AAAA,wBAED,QAAA,CAAS,MAAS,GAAA,CAAA,oBAChBf,cAAA,CAAAgB,iBAAA,EAAA;AAAA,0BACC,OAAA;AAAA,0BACA,OAAA;AAAA,0BACA,OAAS,EAAA,QAAA;AAAA,0BACT,IAAA;AAAA,0BACA,WAAa,EAAA,YAAA;AAAA,0BACb,eAAiB,EAAA,WAAA;AAAA,0BACjB,kBAAoB,EAAA,cAAA;AAAA,0BACpB,KAAA;AAAA,yBACF,CAAA;AAAA,wCAEDhB,cAAA,CAAAiB,qBAAA,EAAA;AAAA,0BACC,SAAA;AAAA,0BACA,OAAA;AAAA,0BACA,OAAS,EAAA,kBAAA;AAAA,0BACT,IAAA;AAAA,0BACA,eAAiB,EAAA,WAAA;AAAA,0BACjB,kBAAoB,EAAA,cAAA;AAAA,0BACpB,MAAA;AAAA,0BACA,KAAA;AAAA,yBACF,CAAA;AAAA,wBACC,SAAA,CAAU,MAAS,GAAA,CAAA,oBACjBjB,cAAA,CAAAkB,mBAAA,EAAA;AAAA,0BACC,QAAA;AAAA,0BACA,OAAA;AAAA,0BACA,OAAS,EAAA,SAAA;AAAA,0BACT,IAAA;AAAA,0BACA,UAAY,EAAA,aAAA;AAAA,0BACZ,eAAiB,EAAA,WAAA;AAAA,0BACjB,kBAAoB,EAAA,cAAA;AAAA,0BACpB,KAAA;AAAA,yBACF,CAAA;AAAA,wCAEDlB,cAAA,CAAAmB,iCAAA,EAAA;AAAA,0BAAiB,GAAG,YAAc,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,CAAA;AAAA,yBAAG,CAAA;AAAA,wCACrCnB,cAAA,CAAAoB,uBAAA,EAAA;AAAA,0BACC,OAAS,EAAA,IAAA;AAAA,0BACT,IAAA;AAAA,0BACA,SAAA;AAAA,0BACA,KAAA;AAAA,yBACF,CAAA;AAAA,uBAAA;AAAA,qBACF,CAAA;AAAA,mBAAA;AAAA,iBACF,CAAA;AAAA,eACF,CAAA;AAAA,aACF,CAAA;AAAA,WACF,CAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"Grid.js","sources":["../src/Grid.tsx"],"sourcesContent":["import React, {\n CSSProperties,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEventHandler,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { GridColumnInfo } from \"./GridColumn\";\nimport { GridContext } from \"./GridContext\";\nimport { clsx } from \"clsx\";\nimport {\n CellMeasure,\n clamp,\n getFocusablePosition,\n LeftPart,\n MiddlePart,\n RightPart,\n Scrollable,\n ScrollableProps,\n TopLeftPart,\n TopPart,\n TopRightPart,\n useBodyVisibleAreaTop,\n useBodyVisibleColumnRange,\n useClientMidHeight,\n useClientMidWidth,\n useColumnMove,\n useColumnRange,\n useColumnRegistry,\n useColumnResize,\n useHeadVisibleColumnRange,\n useLeftScrolledOutWidth,\n useRangeSelection,\n useRowModels,\n useRowSelection,\n useScrollToCell,\n useSum,\n useSumRangeWidth,\n useSumWidth,\n useVisibleColumnGroupRange,\n useVisibleRowRange,\n} from \"./internal\";\nimport \"./Grid.css\";\nimport { SelectionContext } from \"./SelectionContext\";\nimport { SizingContext } from \"./SizingContext\";\nimport { LayoutContext } from \"./LayoutContext\";\nimport { EditorContext } from \"./EditorContext\"; // TODO remove\nimport { CursorContext, FocusedPart } from \"./CursorContext\";\nimport { ColumnGroupProps } from \"./ColumnGroup\";\nimport { ColumnDragContext } from \"./ColumnDragContext\";\nimport { ColumnGhost } from \"./internal/ColumnGhost\";\nimport { ColumnDropTarget } from \"./internal/ColumnDropTarget\";\nimport { ColumnDataContext } from \"./ColumnDataContext\";\n\nconst withBaseName = makePrefixer(\"saltGrid\");\n\nexport type ColumnSeparatorType = \"regular\" | \"none\" | \"groupEdge\" | \"pinned\";\nexport type ColumnGroupRowSeparatorType = \"first\" | \"regular\" | \"last\";\nexport type ColumnGroupColumnSeparatorType = \"regular\" | \"none\" | \"pinned\";\nexport type GridRowSelectionMode = \"single\" | \"multi\" | \"none\";\nexport type GridCellSelectionMode = \"range\" | \"none\";\n\nexport type RowKeyGetter<T> = (row: T, index: number) => string;\n\nexport type GridColumnMoveHandler = (\n columnId: string,\n fromIndex: number,\n toIndex: number\n) => void;\n\nexport interface GridProps<T = any> {\n /**\n * At least 1 children is expected, options are `ColumnGroup` or `GridColumn`.\n * */\n children: ReactNode;\n /**\n * If `true`, zebra stripes are enabled (odd/even rows have alternate colours)\n * */\n zebra?: boolean;\n /**\n * If `true`, grid header is hidden.\n * */\n hideHeader?: boolean;\n /**\n * If `true`, column separators are rendered.\n * */\n columnSeparators?: boolean;\n /**\n * If `true`, separators are rendered between pinned and unpinned columns.\n * */\n pinnedSeparators?: boolean;\n /**\n * Row data objects. Sparse arrays are supported.\n * */\n rowData: T[];\n /**\n * Should return unique string for a given row data object.\n * If rowData is sparse then this function should work with undefined row data\n * objects and create keys based on row index. `(row: T, index: number) => string`\n * */\n rowKeyGetter?: RowKeyGetter<T>;\n /**\n * Rows with these indices are selected by default.\n * */\n defaultSelectedRowIdxs?: number[];\n /**\n * Selected row indices for controlled mode.\n * */\n selectedRowIdxs?: number[];\n className?: string;\n style?: CSSProperties;\n /**\n * The variant to use. Options are `primary` and `secondary`. Default value is\n * `primary`. `secondary` variant changes grid background to reduce contrast.\n * */\n variant?: \"primary\" | \"secondary\";\n /**\n * Options are `single`, `multi` and `none`.\n * */\n rowSelectionMode?: GridRowSelectionMode;\n onRowSelected?: (selectedRowIdxs: number[]) => void;\n /**\n * If `true`, user will be able to move columns using drag and drop.\n * */\n columnMove?: boolean;\n /**\n * Accepts `(columnId: string, fromIndex: number, toIndex: number) => void`\n * */\n onColumnMoved?: GridColumnMoveHandler;\n /**\n * Options are `range` and `none`.\n * */\n cellSelectionMode?: GridCellSelectionMode;\n onVisibleRowRangeChange?: (start: number, end: number) => void;\n /**\n * If `true`, keyboard navigation is enabled for the header.\n * */\n headerIsFocusable?: boolean;\n}\n\nexport interface GridRowModel<T> {\n key: string;\n index: number;\n data: T;\n}\n\nexport interface GridColumnModel<T> {\n index: number;\n separator: ColumnSeparatorType;\n\n info: GridColumnInfo<T>;\n}\n\nexport interface GridColumnGroupModel {\n index: number;\n data: ColumnGroupProps;\n childrenIds: string[];\n rowSeparator: ColumnGroupRowSeparatorType;\n columnSeparator: ColumnGroupColumnSeparatorType;\n colSpan: number;\n}\n\nfunction defaultRowKeyGetter<T>(row: T, index: number): string {\n return `${index}`;\n}\n\nexport const Grid = function Grid<T>(props: GridProps<T>) {\n const {\n rowData,\n zebra,\n hideHeader,\n columnSeparators,\n pinnedSeparators = true,\n className,\n style,\n rowKeyGetter = defaultRowKeyGetter,\n children,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n variant = \"primary\",\n rowSelectionMode = \"multi\",\n onRowSelected,\n columnMove,\n onColumnMoved,\n cellSelectionMode = \"none\",\n onVisibleRowRangeChange,\n headerIsFocusable,\n } = props;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrollableRef = useRef<HTMLDivElement>(null);\n const middleRef = useRef<HTMLDivElement>(null);\n const topRef = useRef<HTMLDivElement>(null);\n const leftRef = useRef<HTMLDivElement>(null);\n const rightRef = useRef<HTMLDivElement>(null);\n const bottomRef = useRef<HTMLDivElement>(null);\n\n // What caused the latest scroll change. User means the UI (mouse events), table means the component initiated scrolling (scrollToCell was called for example)\n const [scrollSource, setScrollSource] = useState<\"user\" | \"table\">(\"user\");\n const [scrollLeft, setScrollLeft] = useState<number>(0);\n const [scrollTop, setScrollTop] = useState<number>(0);\n\n const [hoverRowKey, setHoverRowKey] = useState<string | undefined>(undefined);\n\n const [\n { clientWidth, clientHeight, scrollBarHeight, scrollBarWidth },\n setDimensions,\n ] = useState({\n clientWidth: 0,\n clientHeight: 0,\n scrollBarHeight: 0,\n scrollBarWidth: 0,\n });\n\n const [rowHeight, setRowHeight] = useState<number>(0);\n\n const [cursorRowIdx, setCursorRowIdx] = useState<number>(0);\n const [cursorColIdx, setCursorColIdx] = useState<number>(0);\n const [focusedPart, setFocusedPart] = useState<FocusedPart>(\n headerIsFocusable ? \"header\" : \"body\"\n );\n\n const [editMode, setEditMode] = useState<boolean>(false);\n const [initialText, setInitialText] = useState<string | undefined>(undefined);\n\n const resizeClient: ScrollableProps<T>[\"resizeClient\"] = useCallback(\n (dimensions) => {\n setDimensions(dimensions);\n },\n []\n );\n\n const {\n leftCols, // Columns pinned to left\n midCols, // Scrollable columns\n rightCols, // Columns pinned to right\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n } = useColumnRegistry(children);\n\n const midColsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n midCols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>])\n ),\n [midCols]\n );\n\n // Width of all columns pinned to left\n const leftWidth = useSumWidth(leftCols);\n // Width of all scrollable columns\n const midWidth = useSumWidth(midCols);\n // Width of all columns pinned to right\n const rightWidth = useSumWidth(rightCols);\n // Total width of all columns\n const totalWidth = useSum([leftWidth, midWidth, rightWidth]);\n\n const hasColumnGroups =\n leftGroups.length > 0 || midGroups.length > 0 || rightGroups.length > 0;\n\n const headRowCount = hideHeader ? 0 : hasColumnGroups ? 2 : 1; // TODO multiple group levels\n const rowCount = rowData.length;\n\n // Footer is not implemented yet.\n const botRowCount = 0; // TODO\n // Height of the header\n const topHeight = rowHeight * headRowCount;\n // Height of the middle part (virtual height)\n const midHeight = rowCount === 0 ? 0 : rowHeight * rowCount + 1;\n // Height of the footer\n const botHeight = botRowCount * rowHeight;\n // Total height of the grid (virtual)\n const totalHeight = useSum([topHeight, midHeight, botHeight]);\n // Client width of the middle part of the grid (viewport)\n const clientMidWidth = useClientMidWidth(clientWidth, leftWidth, rightWidth);\n // Unused width in the middle part, to be filled by an empty column with fake cells.\n const midGap = Math.max(0, Math.floor(clientMidWidth - midWidth));\n\n // Range of unpinned columns visible in the body of the grid (pinned columns are always visible).\n const bodyVisColRng = useBodyVisibleColumnRange(\n midCols,\n scrollLeft,\n clientMidWidth\n );\n\n const midGrpByColId = useMemo(() => {\n const m = new Map<string, GridColumnGroupModel>();\n for (let g of midGroups) {\n for (let c of g.childrenIds) {\n m.set(c, g);\n }\n }\n return m;\n }, [midGroups]);\n\n // Range of visible column groups.\n const visColGrpRng = useVisibleColumnGroupRange(\n bodyVisColRng,\n midCols,\n midGrpByColId,\n leftGroups.length\n );\n\n const visColGrps = useMemo(() => {\n return midGroups.slice(visColGrpRng.start, visColGrpRng.end);\n }, [visColGrpRng, midGroups]);\n\n const headVisColRng = useHeadVisibleColumnRange(\n bodyVisColRng,\n visColGrps,\n midColsById,\n leftCols.length\n );\n\n const bodyScrOutColWh = useLeftScrolledOutWidth(midCols, bodyVisColRng);\n const headScrOutColWh = useLeftScrolledOutWidth(midCols, headVisColRng);\n\n const bodyVisAreaLeft = useSum([leftWidth, bodyScrOutColWh]);\n const headVisAreaLeft = useSum([leftWidth, headScrOutColWh]);\n const clientMidHeight = useClientMidHeight(\n clientHeight,\n topHeight,\n botHeight\n );\n const visRowRng = useVisibleRowRange(\n scrollTop,\n clientMidHeight,\n rowHeight,\n rowCount\n );\n\n const bodyVisAreaTop = useBodyVisibleAreaTop(rowHeight, visRowRng, topHeight);\n\n const bodyVisibleColumns = useColumnRange(midCols, bodyVisColRng);\n const headVisibleColumns = useColumnRange(midCols, headVisColRng);\n const bodyVisColWh = useSumRangeWidth(midCols, bodyVisColRng);\n\n const headVisColWh = bodyVisColWh; // TODO implement groups\n\n const rootStyle = useMemo(\n () => ({\n ...style,\n \"--grid-total-width\": `${totalWidth}px`,\n \"--grid-total-height\": `${totalHeight}px`,\n \"--grid-topPart-height\": `${topHeight}px`,\n \"--grid-leftPart-width\": `${leftWidth}px`,\n \"--grid-rightPart-width\": `${rightWidth}px`,\n \"--grid-bodyVisibleColumns-width\": `${bodyVisColWh}px`,\n \"--grid-bodyVisibleArea-top\": `${bodyVisAreaTop}px`,\n \"--grid-bodyVisibleArea-left\": `${bodyVisAreaLeft}px`,\n \"--grid-bottomHeight\": `${botHeight}px`,\n \"--grid-headerVisibleColumns-width\": `${headVisColWh}px`,\n \"--grid-headerVisibleArea-left\": `${headVisAreaLeft}px`,\n \"--grid-scrollBar-height\": `${scrollBarHeight}px`,\n \"--grid-scrollBar-width\": `${scrollBarWidth}px`,\n }),\n [\n style,\n totalHeight,\n totalWidth,\n topHeight,\n leftWidth,\n rightWidth,\n botHeight,\n bodyVisColWh,\n bodyVisAreaLeft,\n bodyVisAreaTop,\n headVisColWh,\n headVisAreaLeft,\n scrollBarHeight,\n scrollBarWidth,\n ]\n );\n\n const onWheel: EventListener = useCallback(\n (event) => {\n let { deltaX, deltaY, shiftKey } = event as WheelEvent;\n if (deltaX === 0 && shiftKey) {\n deltaX = deltaY;\n deltaY = 0;\n }\n const s = scrollableRef.current;\n if (s) {\n s.scrollLeft += deltaX;\n s.scrollTop += deltaY;\n }\n event.preventDefault();\n event.stopPropagation();\n },\n [scrollableRef.current]\n );\n\n const cols = useMemo(\n () => [...leftCols, ...midCols, ...rightCols],\n [leftCols, midCols, rightCols]\n );\n\n const colsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n cols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>])\n ),\n [cols]\n );\n\n const getColById = useCallback(\n (id: string) => {\n return colsById.get(id);\n },\n [colsById]\n );\n\n const columnDataContext: ColumnDataContext<T> = useMemo(\n () => ({\n getColById,\n }),\n [getColById]\n );\n\n const scroll = useCallback(\n (left?: number, top?: number, source?: \"user\" | \"table\") => {\n setScrollSource(source || \"user\");\n if (left !== undefined) {\n setScrollLeft(left);\n }\n if (top !== undefined) {\n setScrollTop(top);\n }\n },\n [setScrollLeft, setScrollTop, setScrollSource]\n );\n\n const scrollToCell = useScrollToCell(\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll\n );\n\n const focusCellElement = (\n part: FocusedPart,\n rowIdx: number,\n colIdx: number\n ) => {\n setTimeout(() => {\n const selector =\n part === \"body\"\n ? `td[data-row-index=\"${rowIdx}\"][data-column-index=\"${colIdx}\"]`\n : `th[data-column-index=\"${colIdx}\"]`;\n const nodeToFocus = rootRef.current?.querySelector(selector);\n if (nodeToFocus) {\n (nodeToFocus as HTMLElement).focus({ preventScroll: true });\n } else {\n console.warn(`focusCellElement can't find the element`);\n }\n }, 0);\n };\n\n const startEditMode = (text?: string) => {\n if (editMode || cursorRowIdx == undefined || cursorColIdx == undefined) {\n return;\n }\n const r = rowData[cursorRowIdx];\n const c = cols[cursorColIdx];\n const isEditable = !!contextValue.getEditor(c.info.props.id);\n if (isEditable) {\n setInitialText(text);\n setEditMode(true);\n }\n };\n\n const endEditMode = (value: string) => {\n if (!editMode) {\n return;\n }\n if (cursorColIdx == undefined) {\n console.error(`endEditMode: cursorColIdx is undefined in edit mode`);\n return;\n }\n const c = cols[cursorColIdx];\n const handler = c.info.props.onChange;\n if (cursorRowIdx == undefined) {\n console.error(`endEditMode: cursorRowIdx is undefined in edit mode`);\n return;\n }\n if (!handler) {\n console.warn(\n `onChange is not specified for editable column \"${c.info.props.id}\".`\n );\n } else {\n handler(rowData[cursorRowIdx], cursorRowIdx, value);\n }\n setEditMode(false);\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n };\n\n const cancelEditMode = () => {\n if (!editMode) {\n return;\n }\n setEditMode(false);\n if (cursorRowIdx != null && cursorColIdx != null) {\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n }\n };\n\n const {\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectAll,\n selectRows,\n unselectAll,\n onMouseDown: onRowSelectionMouseDown,\n } = useRowSelection(\n rowKeyGetter,\n rowData,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n rowSelectionMode,\n onRowSelected\n );\n\n const rangeSelection = useRangeSelection(cellSelectionMode);\n\n const moveCursor = useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n if (!headerIsFocusable && part === \"header\") {\n console.warn(\n `Cannot move focus to the header. \"headerIsFocusable\" prop is false.`\n );\n return;\n }\n setFocusedPart(part);\n colIdx = clamp(colIdx, 0, cols.length - 1);\n if (part === \"body\") {\n if (rowData.length < 1 || cols.length < 1) {\n return;\n }\n rowIdx = clamp(rowIdx, 0, rowData.length - 1);\n } else if (part === \"header\") {\n rowIdx = 0; // There is only one row in the header currently\n }\n setCursorRowIdx(rowIdx);\n setCursorColIdx(colIdx);\n scrollToCell(part, rowIdx, colIdx);\n focusCellElement(part, rowIdx, colIdx);\n if (part === \"body\") {\n rangeSelection.onCursorMove({ rowIdx, colIdx });\n }\n },\n [\n setCursorRowIdx,\n setCursorColIdx,\n rowData,\n rowKeyGetter,\n cols,\n rootRef.current,\n scrollToCell,\n endEditMode,\n rangeSelection.onCursorMove,\n focusedPart,\n headerIsFocusable,\n ]\n );\n\n const rows = useRowModels(rowKeyGetter, rowData, visRowRng);\n\n const isLeftRaised = scrollLeft > 0;\n const isRightRaised = scrollLeft + clientMidWidth < midWidth;\n const isHeaderRaised = scrollTop > 0;\n\n const resizeColumn = useCallback(\n (colIdx: number, width: number) => {\n const col = cols[colIdx];\n col.info.onWidthChanged(width);\n },\n [cols]\n );\n\n const onResizeHandleMouseDown = useColumnResize(cols, resizeColumn);\n\n const sizingContext: SizingContext = useMemo(\n () => ({\n resizeColumn,\n rowHeight,\n onResizeHandleMouseDown,\n }),\n [resizeColumn, rowHeight, onResizeHandleMouseDown]\n );\n\n const layoutContext: LayoutContext = useMemo(\n () => ({\n totalHeight,\n totalWidth,\n clientWidth,\n clientHeight,\n }),\n [totalHeight, totalWidth]\n );\n\n const editorContext: EditorContext = useMemo(\n () => ({\n initialText,\n editMode,\n startEditMode,\n endEditMode,\n cancelEditMode,\n }),\n [editMode, startEditMode, endEditMode, cancelEditMode, initialText]\n );\n\n const [isFocused, setFocused] = useState<boolean>(false);\n\n const onFocus = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n setFocused(true);\n },\n [setFocused]\n );\n\n const onBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n setFocused(false);\n },\n [setFocused]\n );\n\n const cursorContext: CursorContext = useMemo(\n () => ({\n isFocused,\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n focusedPart,\n headerIsFocusable: Boolean(headerIsFocusable),\n }),\n [\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n isFocused,\n focusedPart,\n headerIsFocusable,\n ]\n );\n\n const onColumnMove: GridColumnMoveHandler = (\n columnId,\n fromIndex,\n toIndex\n ) => {\n if (onColumnMoved && fromIndex !== toIndex) {\n onColumnMoved(columnId, fromIndex, toIndex);\n }\n };\n\n const {\n dragState,\n onColumnMoveHandleMouseDown,\n activeTarget,\n onColumnMoveCancel,\n } = useColumnMove(\n columnMove,\n rootRef,\n leftCols,\n midCols,\n rightCols,\n cols,\n scrollLeft,\n clientMidWidth,\n onColumnMove\n );\n\n const columnDragContext: ColumnDragContext = useMemo(\n () => ({\n columnMove,\n onColumnMoveHandleMouseDown,\n }),\n [columnMove, onColumnMoveHandleMouseDown]\n );\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n onRowSelectionMouseDown(event);\n rangeSelection.onCellMouseDown(event);\n\n const target = event.target as HTMLElement;\n try {\n const { part, rowIndex, columnIndex } = getFocusablePosition(target);\n if (part === \"header\" && !headerIsFocusable) {\n return;\n }\n moveCursor(part, rowIndex, columnIndex);\n } catch (e) {\n // TODO\n }\n };\n\n const onKeyUp: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n const { key } = event;\n if (key === \"Shift\") {\n rangeSelection.onKeyboardRangeSelectionEnd();\n }\n },\n [rangeSelection.onKeyboardRangeSelectionEnd]\n );\n\n const editModeKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"F2\":\n case \"Enter\":\n startEditMode();\n break;\n case \"Backspace\":\n startEditMode(\"\");\n break;\n case \"Escape\":\n if (editMode) {\n cancelEditMode();\n break;\n } else {\n return false;\n }\n default:\n if (\n !editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n /^[\\w\\d ]$/.test(key)\n ) {\n startEditMode(key);\n } else {\n return false;\n }\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [startEditMode, editMode, cancelEditMode]\n );\n\n const selectionKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"Shift\":\n rangeSelection.onKeyboardRangeSelectionStart({\n rowIdx: cursorRowIdx || 0,\n colIdx: cursorColIdx || 0,\n });\n break;\n case \" \":\n if (focusedPart === \"body\") {\n if (event.ctrlKey) {\n if (cursorColIdx != undefined) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: cursorColIdx },\n end: { rowIdx: rowData.length, colIdx: cursorColIdx },\n });\n }\n } else {\n if (cursorRowIdx != undefined) {\n selectRows({\n rowIndex: cursorRowIdx,\n isRange: false,\n incremental: true,\n unselectOtherRows: !event.shiftKey,\n });\n }\n }\n break;\n } else {\n return false;\n }\n case \"a\":\n if (event.ctrlKey || event.metaKey) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: 0 },\n end: { rowIdx: rowData.length, colIdx: cols.length },\n });\n selectAll();\n return true;\n } else {\n return false;\n }\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n rangeSelection.selectRange,\n rangeSelection.onKeyboardRangeSelectionStart,\n selectRows,\n selectAll,\n cursorColIdx,\n cursorRowIdx,\n rowData.length,\n cols.length,\n focusedPart,\n ]\n );\n\n const clipboardKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (\n key === \"c\" &&\n (event.ctrlKey || event.metaKey) &&\n rangeSelection.selectedCellRange\n ) {\n const { start, end } = rangeSelection.selectedCellRange;\n const c = (x: number, y: number) => x - y;\n const [minRow, maxRow] = [start.rowIdx, end.rowIdx].sort(c);\n const [minCol, maxCol] = [start.colIdx, end.colIdx].sort(c);\n const text: string[] = [];\n for (let r = minRow; r <= maxRow; ++r) {\n const row = rowData[r];\n const rowText: string[] = [];\n for (let c = minCol; c <= maxCol; ++c) {\n const col = cols[c]!;\n const cellValue = col.info.props.getValue!(row);\n rowText.push(cellValue);\n }\n text.push(rowText.join(\"\\t\"));\n }\n navigator.clipboard.writeText(text.join(\"\\n\"));\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n [rangeSelection.selectedCellRange]\n );\n\n const pageSize = Math.max(1, visRowRng.length - 1);\n\n const navigationKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"ArrowLeft\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) - 1);\n break;\n case \"ArrowRight\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) + 1);\n break;\n case \"ArrowUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) - 1, cursorColIdx);\n }\n break;\n case \"ArrowDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) + 1, cursorColIdx);\n }\n break;\n case \"PageUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) - pageSize,\n cursorColIdx\n );\n }\n break;\n case \"PageDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) + pageSize,\n cursorColIdx\n );\n }\n break;\n case \"Home\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, 0);\n } else {\n moveCursor(focusedPart, 0, 0);\n }\n break;\n case \"End\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, cols.length - 1);\n } else {\n moveCursor(focusedPart, rowData.length - 1, cols.length - 1);\n }\n break;\n case \"Tab\":\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n editMode &&\n cursorColIdx != null &&\n cursorRowIdx != null\n ) {\n if (!event.shiftKey) {\n if (cursorColIdx < cols.length - 1) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx + 1);\n } else {\n if (cursorRowIdx < rowData.length - 1) {\n moveCursor(focusedPart, cursorRowIdx + 1, 0);\n }\n }\n } else {\n if (cursorColIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx - 1);\n } else {\n if (cursorRowIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx - 1, cols.length - 1);\n }\n }\n }\n } else {\n return false;\n }\n break;\n case \"Enter\":\n if (\n editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !event.shiftKey\n ) {\n if (cursorRowIdx == undefined) {\n moveCursor(focusedPart, 0, 0);\n } else {\n moveCursor(focusedPart, cursorRowIdx + 1, cursorColIdx);\n }\n } else {\n return false;\n }\n break;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n moveCursor,\n cursorRowIdx,\n cursorRowIdx,\n cols.length,\n rowData.length,\n headerIsFocusable,\n pageSize,\n ]\n );\n\n const columnMoveKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (key === \"Escape\") {\n onColumnMoveCancel();\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n []\n );\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (cursorColIdx != undefined && cursorRowIdx != undefined) {\n const column = cols[cursorColIdx];\n if (column.info.props.onKeyDown) {\n column.info.props.onKeyDown(event, cursorRowIdx);\n }\n }\n if (!event.isPropagationStopped()) {\n // each handler returns true or false\n // if the event is handled and should not be handled by anything else return true\n // if the event is not handled and we should keep trying other handlers return false\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ].find((handler) => {\n return handler(event);\n });\n }\n },\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ]\n );\n\n const selectionContext: SelectionContext = useMemo(\n () => ({\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n selectedCellRange: rangeSelection?.selectedCellRange,\n }),\n [\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n rangeSelection?.selectedCellRange,\n ]\n );\n\n useEffect(() => {\n if (onVisibleRowRangeChange) {\n onVisibleRowRangeChange(visRowRng.start, visRowRng.end);\n }\n }, [onVisibleRowRangeChange, visRowRng]);\n\n return (\n <GridContext.Provider value={contextValue}>\n <LayoutContext.Provider value={layoutContext}>\n <SelectionContext.Provider value={selectionContext}>\n <ColumnDragContext.Provider value={columnDragContext}>\n <CursorContext.Provider value={cursorContext}>\n <SizingContext.Provider value={sizingContext}>\n <EditorContext.Provider value={editorContext}>\n <ColumnDataContext.Provider value={columnDataContext}>\n {props.children}\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"zebra\")]: zebra,\n [withBaseName(\"columnSeparators\")]: columnSeparators,\n [withBaseName(\"pinnedSeparators\")]: pinnedSeparators,\n [withBaseName(\"primaryBackground\")]:\n variant === \"primary\",\n [withBaseName(\"secondaryBackground\")]:\n variant === \"secondary\",\n },\n className\n )}\n style={rootStyle}\n ref={rootRef}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onMouseDown={onMouseDown}\n onFocus={onFocus}\n onBlur={onBlur}\n data-name=\"grid-root\"\n role=\"grid\"\n aria-colcount={cols.length}\n aria-rowcount={rowCount + headRowCount}\n aria-multiselectable={rowSelectionMode === \"multi\"}\n >\n <CellMeasure setRowHeight={setRowHeight} />\n <Scrollable\n resizeClient={resizeClient}\n scrollLeft={scrollLeft}\n scrollTop={scrollTop}\n scrollSource={scrollSource}\n scroll={scroll}\n scrollerRef={scrollableRef}\n topRef={topRef}\n rightRef={rightRef}\n bottomRef={bottomRef}\n leftRef={leftRef}\n middleRef={middleRef}\n />\n {!hideHeader && leftCols.length > 0 && (\n <TopLeftPart\n onWheel={onWheel}\n columns={leftCols}\n columnGroups={leftGroups}\n rightShadow={isLeftRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && (\n <TopPart\n columns={headVisibleColumns}\n columnGroups={visColGrps}\n topRef={topRef}\n onWheel={onWheel}\n midGap={midGap}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && rightCols.length > 0 && (\n <TopRightPart\n onWheel={onWheel}\n columns={rightCols}\n columnGroups={rightGroups}\n leftShadow={isRightRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {leftCols.length > 0 && (\n <LeftPart\n leftRef={leftRef}\n onWheel={onWheel}\n columns={leftCols}\n rows={rows}\n rightShadow={isLeftRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n />\n )}\n <MiddlePart\n middleRef={middleRef}\n onWheel={onWheel}\n columns={bodyVisibleColumns}\n rows={rows}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n midGap={midGap}\n zebra={zebra}\n />\n {rightCols.length > 0 && (\n <RightPart\n rightRef={rightRef}\n onWheel={onWheel}\n columns={rightCols}\n rows={rows}\n leftShadow={isRightRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n />\n )}\n <ColumnDropTarget x={activeTarget?.x} />\n <ColumnGhost\n columns={cols}\n rows={rows}\n dragState={dragState}\n zebra={zebra}\n />\n </div>\n </ColumnDataContext.Provider>\n </EditorContext.Provider>\n </SizingContext.Provider>\n </CursorContext.Provider>\n </ColumnDragContext.Provider>\n </SelectionContext.Provider>\n </LayoutContext.Provider>\n </GridContext.Provider>\n );\n};\n"],"names":["makePrefixer","Grid","useRef","useState","useCallback","useColumnRegistry","useMemo","useSumWidth","useSum","useClientMidWidth","useBodyVisibleColumnRange","useVisibleColumnGroupRange","useHeadVisibleColumnRange","useLeftScrolledOutWidth","useClientMidHeight","useVisibleRowRange","useBodyVisibleAreaTop","useColumnRange","useSumRangeWidth","useScrollToCell","useRowSelection","useRangeSelection","clamp","useRowModels","useColumnResize","useColumnMove","getFocusablePosition","c","useEffect","jsx","GridContext","LayoutContext","SelectionContext","ColumnDragContext","CursorContext","SizingContext","EditorContext","jsxs","ColumnDataContext","clsx","CellMeasure","Scrollable","TopLeftPart","TopPart","TopRightPart","LeftPart","MiddlePart","RightPart","ColumnDropTarget","ColumnGhost"],"mappings":"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"}
|
|
@@ -74,6 +74,18 @@ function NumericCellEditor(props) {
|
|
|
74
74
|
initialSelectionRef.current = true;
|
|
75
75
|
}
|
|
76
76
|
}, [inputRef.current]);
|
|
77
|
+
react.useEffect(() => {
|
|
78
|
+
const input = inputRef.current;
|
|
79
|
+
const focusOut = (event) => {
|
|
80
|
+
if (!(input == null ? void 0 : input.contains(event.target))) {
|
|
81
|
+
endEditMode(editorText);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
document == null ? void 0 : document.addEventListener("mousedown", focusOut, true);
|
|
85
|
+
return () => {
|
|
86
|
+
document == null ? void 0 : document.removeEventListener("mousedown", focusOut, true);
|
|
87
|
+
};
|
|
88
|
+
}, [endEditMode, editorText]);
|
|
77
89
|
return /* @__PURE__ */ jsxRuntime.jsxs(Cell.Cell, {
|
|
78
90
|
separator: column == null ? void 0 : column.separator,
|
|
79
91
|
className: "saltGridNumericCellEditor",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumericColumn.js","sources":["../src/NumericColumn.tsx"],"sourcesContent":["import { GridCellValueProps, GridColumn, GridColumnProps } from \"./GridColumn\";\nimport \"./NumericColumn.css\";\nimport { GridColumnModel, GridRowModel } from \"./Grid\";\nimport {\n ChangeEventHandler,\n KeyboardEventHandler,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useEditorContext } from \"./EditorContext\";\nimport { CornerTag } from \"./CornerTag\";\nimport { Cell } from \"./internal\";\n\nexport interface NumericColumnProps<T> extends GridColumnProps<T> {\n precision: number;\n}\n\nfunction isNumber(value: any): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function NumericCellValue<T>(props: GridCellValueProps<T>) {\n const { column, value } = props;\n const columnProps = column.info.props as NumericColumnProps<T>;\n const { precision } = columnProps;\n const text = isNumber(value) ? value.toFixed(precision) : \"\";\n return <div className=\"saltGridNumericCellValue\">{text}</div>;\n}\n\nexport interface NumericEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n children?: ReactNode;\n}\n\nexport function NumericCellEditor<T>(props: NumericEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data)\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n return (\n <Cell separator={column?.separator} className=\"saltGridNumericCellEditor\">\n <div className=\"saltGridNumericCellEditor-inputContainer\">\n <input\n ref={inputRef}\n data-testid=\"grid-cell-editor-input\"\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </Cell>\n );\n}\n\nexport function NumericColumn<T>(props: NumericColumnProps<T>) {\n return (\n <GridColumn\n {...props}\n align={\"right\"}\n cellValueComponent={NumericCellValue}\n >\n {props.children}\n </GridColumn>\n );\n}\n"],"names":["jsx","useRef","useEditorContext","useState","useEffect","jsxs","Cell","CornerTag","GridColumn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NumericColumn.js","sources":["../src/NumericColumn.tsx"],"sourcesContent":["import { GridCellValueProps, GridColumn, GridColumnProps } from \"./GridColumn\";\nimport \"./NumericColumn.css\";\nimport { GridColumnModel, GridRowModel } from \"./Grid\";\nimport {\n ChangeEventHandler,\n KeyboardEventHandler,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useEditorContext } from \"./EditorContext\";\nimport { CornerTag } from \"./CornerTag\";\nimport { Cell } from \"./internal\";\n\nexport interface NumericColumnProps<T> extends GridColumnProps<T> {\n precision: number;\n}\n\nfunction isNumber(value: any): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function NumericCellValue<T>(props: GridCellValueProps<T>) {\n const { column, value } = props;\n const columnProps = column.info.props as NumericColumnProps<T>;\n const { precision } = columnProps;\n const text = isNumber(value) ? value.toFixed(precision) : \"\";\n return <div className=\"saltGridNumericCellValue\">{text}</div>;\n}\n\nexport interface NumericEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n children?: ReactNode;\n}\n\nexport function NumericCellEditor<T>(props: NumericEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data)\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <Cell separator={column?.separator} className=\"saltGridNumericCellEditor\">\n <div className=\"saltGridNumericCellEditor-inputContainer\">\n <input\n ref={inputRef}\n data-testid=\"grid-cell-editor-input\"\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </Cell>\n );\n}\n\nexport function NumericColumn<T>(props: NumericColumnProps<T>) {\n return (\n <GridColumn\n {...props}\n align={\"right\"}\n cellValueComponent={NumericCellValue}\n >\n {props.children}\n </GridColumn>\n );\n}\n"],"names":["jsx","useRef","useEditorContext","useState","useEffect","jsxs","Cell","CornerTag","GridColumn"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
var
|
|
6
|
+
var core = require('@salt-ds/core');
|
|
7
7
|
var SelectionContext = require('./SelectionContext.js');
|
|
8
8
|
require('./CheckboxCell.css.js');
|
|
9
9
|
var CursorContext = require('./CursorContext.js');
|
|
@@ -22,7 +22,7 @@ function RowSelectionCheckboxCellValue(props) {
|
|
|
22
22
|
return /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
23
23
|
className: "saltGridCheckboxContainer",
|
|
24
24
|
onMouseDown,
|
|
25
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
25
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(core.Checkbox, {
|
|
26
26
|
"data-testid": "grid-row-selection-checkbox",
|
|
27
27
|
inputProps: {
|
|
28
28
|
"aria-label": "Select Row",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowSelectionCheckboxCellValue.js","sources":["../src/RowSelectionCheckboxCellValue.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"RowSelectionCheckboxCellValue.js","sources":["../src/RowSelectionCheckboxCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\nimport \"./CheckboxCell.css\";\nimport { MouseEventHandler } from \"react\";\nimport { useCursorContext } from \"./CursorContext\";\n\nexport function RowSelectionCheckboxCellValue<T>(props: GridCellValueProps<T>) {\n const { row, column, isFocused } = props;\n const { selRowIdxs, selectRows } = useSelectionContext();\n const { moveCursor } = useCursorContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n selectRows({ rowIndex: row.index, incremental: true });\n moveCursor(\"body\", row.index, column.index);\n event.preventDefault();\n event.stopPropagation();\n };\n\n return (\n <div className=\"saltGridCheckboxContainer\" onMouseDown={onMouseDown}>\n <Checkbox\n data-testid=\"grid-row-selection-checkbox\"\n inputProps={{\n \"aria-label\": \"Select Row\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isSelected}\n />\n </div>\n );\n}\n"],"names":["useSelectionContext","useCursorContext","jsx","Checkbox"],"mappings":";;;;;;;;;;AAOO,SAAS,8BAAiC,KAA8B,EAAA;AAC7E,EAAA,MAAM,EAAE,GAAA,EAAK,MAAQ,EAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AACnC,EAAA,MAAM,EAAE,UAAA,EAAY,UAAW,EAAA,GAAIA,oCAAoB,EAAA,CAAA;AACvD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,8BAAiB,EAAA,CAAA;AAExC,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAE3C,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,UAAA,CAAW,EAAE,QAAU,EAAA,GAAA,CAAI,KAAO,EAAA,WAAA,EAAa,MAAM,CAAA,CAAA;AACrD,IAAA,UAAA,CAAW,MAAQ,EAAA,GAAA,CAAI,KAAO,EAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAC1C,IAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,2BAAA;AAAA,IAA4B,WAAA;AAAA,IACzC,QAAC,kBAAAA,cAAA,CAAAC,aAAA,EAAA;AAAA,MACC,aAAY,EAAA,6BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA,UAAA;AAAA,KACX,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var SelectionContext = require('./SelectionContext.js');
|
|
7
|
-
var
|
|
7
|
+
var core = require('@salt-ds/core');
|
|
8
8
|
require('./CheckboxCell.css.js');
|
|
9
9
|
|
|
10
10
|
function RowSelectionCheckboxHeaderCellValue(props) {
|
|
@@ -32,7 +32,7 @@ function RowSelectionCheckboxHeaderCellValue(props) {
|
|
|
32
32
|
onMouseDown: onMousedown,
|
|
33
33
|
className: "saltGridCheckboxContainer",
|
|
34
34
|
onKeyDown,
|
|
35
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
35
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(core.Checkbox, {
|
|
36
36
|
"data-testid": "grid-row-select-all-checkbox",
|
|
37
37
|
inputProps: {
|
|
38
38
|
"aria-label": "Select All",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowSelectionCheckboxHeaderCellValue.js","sources":["../src/RowSelectionCheckboxHeaderCellValue.tsx"],"sourcesContent":["import { useSelectionContext } from \"./SelectionContext\";\nimport { KeyboardEventHandler, MouseEventHandler } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"RowSelectionCheckboxHeaderCellValue.js","sources":["../src/RowSelectionCheckboxHeaderCellValue.tsx"],"sourcesContent":["import { useSelectionContext } from \"./SelectionContext\";\nimport { KeyboardEventHandler, MouseEventHandler } from \"react\";\nimport { Checkbox } from \"@salt-ds/core\";\nimport \"./CheckboxCell.css\";\nimport { GridHeaderValueProps } from \"./GridColumn\";\n\nexport function RowSelectionCheckboxHeaderCellValue<T>(\n props: GridHeaderValueProps<T>\n) {\n const { isFocused } = props;\n\n const { selectAll, unselectAll, isAllSelected, isAnySelected } =\n useSelectionContext();\n\n const onMousedown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \" \") {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n return (\n <div\n onMouseDown={onMousedown}\n className=\"saltGridCheckboxContainer\"\n onKeyDown={onKeyDown}\n >\n <Checkbox\n data-testid=\"grid-row-select-all-checkbox\"\n inputProps={{\n \"aria-label\": \"Select All\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isAllSelected}\n indeterminate={!isAllSelected && isAnySelected}\n />\n </div>\n );\n}\n"],"names":["useSelectionContext","jsx","Checkbox"],"mappings":";;;;;;;;;AAMO,SAAS,oCACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA,CAAA;AAEtB,EAAA,MAAM,EAAE,SAAW,EAAA,WAAA,EAAa,aAAe,EAAA,aAAA,KAC7CA,oCAAoB,EAAA,CAAA;AAEtB,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,IAAI,aAAe,EAAA;AACjB,MAAY,WAAA,EAAA,CAAA;AAAA,KACP,MAAA;AACL,MAAU,SAAA,EAAA,CAAA;AAAA,KACZ;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,SAAA,GAAkD,CAAC,KAAU,KAAA;AACjE,IAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,MAAA,IAAI,aAAe,EAAA;AACjB,QAAY,WAAA,EAAA,CAAA;AAAA,OACP,MAAA;AACL,QAAU,SAAA,EAAA,CAAA;AAAA,OACZ;AACA,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,KACxB;AAAA,GACF,CAAA;AAEA,EAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,IACC,WAAa,EAAA,WAAA;AAAA,IACb,SAAU,EAAA,2BAAA;AAAA,IACV,SAAA;AAAA,IAEA,QAAC,kBAAAA,cAAA,CAAAC,aAAA,EAAA;AAAA,MACC,aAAY,EAAA,8BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA,aAAA;AAAA,MACT,aAAA,EAAe,CAAC,aAAiB,IAAA,aAAA;AAAA,KACnC,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
var
|
|
6
|
+
var core = require('@salt-ds/core');
|
|
7
7
|
var SelectionContext = require('./SelectionContext.js');
|
|
8
8
|
require('./CheckboxCell.css.js');
|
|
9
9
|
|
|
@@ -13,7 +13,7 @@ function RowSelectionRadioCellValue(props) {
|
|
|
13
13
|
const isSelected = selRowIdxs.has(row.index);
|
|
14
14
|
return /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
15
15
|
className: "saltGridCheckboxContainer",
|
|
16
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
16
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(core.RadioButton, {
|
|
17
17
|
checked: isSelected,
|
|
18
18
|
"data-testid": "grid-row-selection-radiobox",
|
|
19
19
|
tabIndex: isFocused ? 0 : -1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowSelectionRadioCellValue.js","sources":["../src/RowSelectionRadioCellValue.tsx"],"sourcesContent":["import { RadioButton } from \"@salt-ds/
|
|
1
|
+
{"version":3,"file":"RowSelectionRadioCellValue.js","sources":["../src/RowSelectionRadioCellValue.tsx"],"sourcesContent":["import { RadioButton } from \"@salt-ds/core\";\nimport { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\nimport \"./CheckboxCell.css\";\n\nexport function RowSelectionRadioCellValue<T>(props: GridCellValueProps<T>) {\n const { row, isFocused } = props;\n const { selRowIdxs } = useSelectionContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n return (\n <div className=\"saltGridCheckboxContainer\">\n <RadioButton\n checked={isSelected}\n data-testid=\"grid-row-selection-radiobox\"\n tabIndex={isFocused ? 0 : -1}\n />\n </div>\n );\n}\n"],"names":["useSelectionContext","jsx","RadioButton"],"mappings":";;;;;;;;;AAKO,SAAS,2BAA8B,KAA8B,EAAA;AAC1E,EAAM,MAAA,EAAE,GAAK,EAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAC3B,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIA,oCAAoB,EAAA,CAAA;AAE3C,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAE3C,EAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,2BAAA;AAAA,IACb,QAAC,kBAAAA,cAAA,CAAAC,gBAAA,EAAA;AAAA,MACC,OAAS,EAAA,UAAA;AAAA,MACT,aAAY,EAAA,6BAAA;AAAA,MACZ,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,KAC5B,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var HeaderCell = require('./HeaderCell.js');
|
|
7
|
-
var
|
|
7
|
+
var core = require('@salt-ds/core');
|
|
8
8
|
require('./CheckboxCell.css.js');
|
|
9
9
|
var clsx = require('clsx');
|
|
10
10
|
|
|
@@ -13,7 +13,7 @@ function RowSelectionRadioHeaderCell(props) {
|
|
|
13
13
|
...props,
|
|
14
14
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
15
15
|
className: clsx.clsx("saltGridCheckboxContainer", "saltGrid-hidden"),
|
|
16
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
16
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(core.RadioButtonIcon, {})
|
|
17
17
|
})
|
|
18
18
|
});
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowSelectionRadioHeaderCell.js","sources":["../src/RowSelectionRadioHeaderCell.tsx"],"sourcesContent":["import { AutoSizeHeaderCell } from \"./HeaderCell\";\nimport { RadioButtonIcon } from \"@salt-ds/
|
|
1
|
+
{"version":3,"file":"RowSelectionRadioHeaderCell.js","sources":["../src/RowSelectionRadioHeaderCell.tsx"],"sourcesContent":["import { AutoSizeHeaderCell } from \"./HeaderCell\";\nimport { RadioButtonIcon } from \"@salt-ds/core\";\nimport \"./CheckboxCell.css\";\nimport { clsx } from \"clsx\";\nimport { HeaderCellProps } from \"./GridColumn\";\n\nexport function RowSelectionRadioHeaderCell<T>(props: HeaderCellProps<T>) {\n return (\n <AutoSizeHeaderCell {...props}>\n <div className={clsx(\"saltGridCheckboxContainer\", \"saltGrid-hidden\")}>\n <RadioButtonIcon />\n </div>\n </AutoSizeHeaderCell>\n );\n}\n"],"names":["jsx","AutoSizeHeaderCell","clsx","RadioButtonIcon"],"mappings":";;;;;;;;;;AAMO,SAAS,4BAA+B,KAA2B,EAAA;AACxE,EAAA,uBACGA,cAAA,CAAAC,6BAAA,EAAA;AAAA,IAAoB,GAAG,KAAA;AAAA,IACtB,QAAC,kBAAAD,cAAA,CAAA,KAAA,EAAA;AAAA,MAAI,SAAA,EAAWE,SAAK,CAAA,2BAAA,EAA6B,iBAAiB,CAAA;AAAA,MACjE,yCAACC,oBAAgB,EAAA,EAAA,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -61,6 +61,18 @@ function TextCellEditor(props) {
|
|
|
61
61
|
initialSelectionRef.current = true;
|
|
62
62
|
}
|
|
63
63
|
}, [inputRef.current]);
|
|
64
|
+
react.useEffect(() => {
|
|
65
|
+
const input = inputRef.current;
|
|
66
|
+
const focusOut = (event) => {
|
|
67
|
+
if (!(input == null ? void 0 : input.contains(event.target))) {
|
|
68
|
+
endEditMode(editorText);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
document == null ? void 0 : document.addEventListener("mousedown", focusOut, true);
|
|
72
|
+
return () => {
|
|
73
|
+
document == null ? void 0 : document.removeEventListener("mousedown", focusOut, true);
|
|
74
|
+
};
|
|
75
|
+
}, [endEditMode, editorText]);
|
|
64
76
|
return /* @__PURE__ */ jsxRuntime.jsxs(Cell.Cell, {
|
|
65
77
|
separator: column == null ? void 0 : column.separator,
|
|
66
78
|
className: withBaseName(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextCellEditor.js","sources":["../src/TextCellEditor.tsx"],"sourcesContent":["import {\n ChangeEventHandler,\n KeyboardEventHandler,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport \"./TextCellEditor.css\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { useEditorContext } from \"./EditorContext\";\nimport { GridColumnModel, GridRowModel } from \"./Grid\";\nimport { CornerTag } from \"./CornerTag\";\nimport { Cell } from \"./internal\";\n\nconst withBaseName = makePrefixer(\"saltGridTextCellEditor\");\n\nexport interface TextCellEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function TextCellEditor<T>(props: TextCellEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data)\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n return (\n <Cell separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"inputContainer\")}>\n <input\n data-testid=\"grid-cell-editor-input\"\n ref={inputRef}\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </Cell>\n );\n}\n"],"names":["makePrefixer","useRef","useEditorContext","useState","useEffect","jsxs","Cell","jsx","CornerTag"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAM,YAAA,GAAeA,kBAAa,wBAAwB,CAAA,CAAA;AAOnD,SAAS,eAAkB,KAA+B,EAAA;AAC/D,EAAM,MAAA,EAAE,MAAQ,EAAA,GAAA,EAAQ,GAAA,KAAA,CAAA;AACxB,EAAM,MAAA,QAAA,GAAWC,aAAyB,IAAI,CAAA,CAAA;AAE9C,EAAA,MAAM,EAAE,WAAA,EAAa,cAAgB,EAAA,WAAA,KAAgBC,8BAAiB,EAAA,CAAA;AAEtE,EAAM,MAAA,CAAC,UAAY,EAAA,aAAa,CAAI,GAAAC,cAAA;AAAA,IAClC,WAAA,IAAe,OAAO,WAAc,GAAA,MAAA,CAAQ,KAAK,KAAM,CAAA,QAAA,CAAU,IAAK,IAAI,CAAA;AAAA,GAC5E,CAAA;AAEA,EAAA,MAAM,mBAAsB,GAAAF,YAAA,CAAO,CAAC,CAAC,WAAW,CAAA,CAAA;AAEhD,EAAM,MAAA,QAAA,GAAiD,CAAC,CAAM,KAAA;AAC5D,IAAc,aAAA,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAM,MAAA,SAAA,GAAoD,CAAC,KAAU,KAAA;AACnE,IAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,MAAA,WAAA,CAAY,UAAU,CAAA,CAAA;AACtB,MAAA,OAAA;AAAA,KACF;AACA,IAAI,IAAA,KAAA,CAAM,QAAQ,QAAU,EAAA;AAC1B,MAAe,cAAA,EAAA,CAAA;AACf,MAAA,OAAA;AAAA,KACF;AACA,IAAI,IAAA,KAAA,CAAM,QAAQ,KAAO,EAAA;AACvB,MAAA,WAAA,CAAY,UAAU,CAAA,CAAA;AACtB,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,OAAA;AAAA,KACF;AACA,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAAG,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAS,CAAA,OAAA,IAAW,CAAC,mBAAA,CAAoB,OAAS,EAAA;AACpD,MAAA,QAAA,CAAS,QAAQ,MAAO,EAAA,CAAA;AACxB,MAAA,mBAAA,CAAoB,OAAU,GAAA,IAAA,CAAA;AAAA,KAChC;AAAA,GACC,EAAA,CAAC,QAAS,CAAA,OAAO,CAAC,CAAA,CAAA;AAErB,EAAA,uBACGC,eAAA,CAAAC,SAAA,EAAA;AAAA,IAAK,WAAW,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,SAAA;AAAA,IAAW,WAAW,YAAa,EAAA;AAAA,IAC1D,QAAA,EAAA;AAAA,sBAACC,cAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAA,EAAW,aAAa,gBAAgB,CAAA;AAAA,QAC3C,QAAC,kBAAAA,cAAA,CAAA,OAAA,EAAA;AAAA,UACC,aAAY,EAAA,wBAAA;AAAA,UACZ,GAAK,EAAA,QAAA;AAAA,UACL,SAAW,EAAA,IAAA;AAAA,UACX,KAAO,EAAA,UAAA;AAAA,UACP,QAAA;AAAA,UACA,SAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,qCACCC,mBAAU,EAAA,EAAA,CAAA;AAAA,KAAA;AAAA,GACb,CAAA,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"TextCellEditor.js","sources":["../src/TextCellEditor.tsx"],"sourcesContent":["import {\n ChangeEventHandler,\n KeyboardEventHandler,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport \"./TextCellEditor.css\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { useEditorContext } from \"./EditorContext\";\nimport { GridColumnModel, GridRowModel } from \"./Grid\";\nimport { CornerTag } from \"./CornerTag\";\nimport { Cell } from \"./internal\";\n\nconst withBaseName = makePrefixer(\"saltGridTextCellEditor\");\n\nexport interface TextCellEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function TextCellEditor<T>(props: TextCellEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data)\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <Cell separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"inputContainer\")}>\n <input\n data-testid=\"grid-cell-editor-input\"\n ref={inputRef}\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </Cell>\n );\n}\n"],"names":["makePrefixer","useRef","useEditorContext","useState","useEffect","jsxs","Cell","jsx","CornerTag"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAM,YAAA,GAAeA,kBAAa,wBAAwB,CAAA,CAAA;AAOnD,SAAS,eAAkB,KAA+B,EAAA;AAC/D,EAAM,MAAA,EAAE,MAAQ,EAAA,GAAA,EAAQ,GAAA,KAAA,CAAA;AACxB,EAAM,MAAA,QAAA,GAAWC,aAAyB,IAAI,CAAA,CAAA;AAE9C,EAAA,MAAM,EAAE,WAAA,EAAa,cAAgB,EAAA,WAAA,KAAgBC,8BAAiB,EAAA,CAAA;AAEtE,EAAM,MAAA,CAAC,UAAY,EAAA,aAAa,CAAI,GAAAC,cAAA;AAAA,IAClC,WAAA,IAAe,OAAO,WAAc,GAAA,MAAA,CAAQ,KAAK,KAAM,CAAA,QAAA,CAAU,IAAK,IAAI,CAAA;AAAA,GAC5E,CAAA;AAEA,EAAA,MAAM,mBAAsB,GAAAF,YAAA,CAAO,CAAC,CAAC,WAAW,CAAA,CAAA;AAEhD,EAAM,MAAA,QAAA,GAAiD,CAAC,CAAM,KAAA;AAC5D,IAAc,aAAA,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAM,MAAA,SAAA,GAAoD,CAAC,KAAU,KAAA;AACnE,IAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,MAAA,WAAA,CAAY,UAAU,CAAA,CAAA;AACtB,MAAA,OAAA;AAAA,KACF;AACA,IAAI,IAAA,KAAA,CAAM,QAAQ,QAAU,EAAA;AAC1B,MAAe,cAAA,EAAA,CAAA;AACf,MAAA,OAAA;AAAA,KACF;AACA,IAAI,IAAA,KAAA,CAAM,QAAQ,KAAO,EAAA;AACvB,MAAA,WAAA,CAAY,UAAU,CAAA,CAAA;AACtB,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,OAAA;AAAA,KACF;AACA,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAAG,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAS,CAAA,OAAA,IAAW,CAAC,mBAAA,CAAoB,OAAS,EAAA;AACpD,MAAA,QAAA,CAAS,QAAQ,MAAO,EAAA,CAAA;AACxB,MAAA,mBAAA,CAAoB,OAAU,GAAA,IAAA,CAAA;AAAA,KAChC;AAAA,GACC,EAAA,CAAC,QAAS,CAAA,OAAO,CAAC,CAAA,CAAA;AAErB,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,QAAQ,QAAS,CAAA,OAAA,CAAA;AACvB,IAAM,MAAA,QAAA,GAAW,CAAC,KAAsB,KAAA;AACtC,MAAA,IAAI,EAAC,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,QAAS,CAAA,KAAA,CAAM,MAAiB,CAAA,CAAA,EAAA;AAC1C,QAAA,WAAA,CAAY,UAAU,CAAA,CAAA;AAAA,OACxB;AAAA,KACF,CAAA;AAGA,IAAU,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,gBAAA,CAAiB,aAAa,QAAU,EAAA,IAAA,CAAA,CAAA;AAElD,IAAA,OAAO,MAAM;AACX,MAAU,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,mBAAA,CAAoB,aAAa,QAAU,EAAA,IAAA,CAAA,CAAA;AAAA,KACvD,CAAA;AAAA,GACC,EAAA,CAAC,WAAa,EAAA,UAAU,CAAC,CAAA,CAAA;AAE5B,EAAA,uBACGC,eAAA,CAAAC,SAAA,EAAA;AAAA,IAAK,WAAW,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,SAAA;AAAA,IAAW,WAAW,YAAa,EAAA;AAAA,IAC1D,QAAA,EAAA;AAAA,sBAACC,cAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAA,EAAW,aAAa,gBAAgB,CAAA;AAAA,QAC3C,QAAC,kBAAAA,cAAA,CAAA,OAAA,EAAA;AAAA,UACC,aAAY,EAAA,wBAAA;AAAA,UACZ,GAAK,EAAA,QAAA;AAAA,UACL,SAAW,EAAA,IAAA;AAAA,UACX,KAAO,EAAA,UAAA;AAAA,UACP,QAAA;AAAA,UACA,SAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,qCACCC,mBAAU,EAAA,EAAA,CAAA;AAAA,KAAA;AAAA,GACb,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -338,7 +338,6 @@ const Grid = function Grid2(props) {
|
|
|
338
338
|
const rangeSelection = useRangeSelection(cellSelectionMode);
|
|
339
339
|
const moveCursor = useCallback(
|
|
340
340
|
(part, rowIdx, colIdx) => {
|
|
341
|
-
cancelEditMode();
|
|
342
341
|
if (!headerIsFocusable && part === "header") {
|
|
343
342
|
console.warn(
|
|
344
343
|
`Cannot move focus to the header. "headerIsFocusable" prop is false.`
|
|
@@ -568,8 +567,10 @@ const Grid = function Grid2(props) {
|
|
|
568
567
|
end: { rowIdx: rowData.length, colIdx: cols.length }
|
|
569
568
|
});
|
|
570
569
|
selectAll();
|
|
570
|
+
return true;
|
|
571
|
+
} else {
|
|
572
|
+
return false;
|
|
571
573
|
}
|
|
572
|
-
break;
|
|
573
574
|
default:
|
|
574
575
|
return false;
|
|
575
576
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grid.js","sources":["../src/Grid.tsx"],"sourcesContent":["import React, {\n CSSProperties,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEventHandler,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { GridColumnInfo } from \"./GridColumn\";\nimport { GridContext } from \"./GridContext\";\nimport { clsx } from \"clsx\";\nimport {\n CellMeasure,\n clamp,\n getFocusablePosition,\n LeftPart,\n MiddlePart,\n RightPart,\n Scrollable,\n ScrollableProps,\n TopLeftPart,\n TopPart,\n TopRightPart,\n useBodyVisibleAreaTop,\n useBodyVisibleColumnRange,\n useClientMidHeight,\n useClientMidWidth,\n useColumnMove,\n useColumnRange,\n useColumnRegistry,\n useColumnResize,\n useHeadVisibleColumnRange,\n useLeftScrolledOutWidth,\n useRangeSelection,\n useRowModels,\n useRowSelection,\n useScrollToCell,\n useSum,\n useSumRangeWidth,\n useSumWidth,\n useVisibleColumnGroupRange,\n useVisibleRowRange,\n} from \"./internal\";\nimport \"./Grid.css\";\nimport { SelectionContext } from \"./SelectionContext\";\nimport { SizingContext } from \"./SizingContext\";\nimport { LayoutContext } from \"./LayoutContext\";\nimport { EditorContext } from \"./EditorContext\"; // TODO remove\nimport { CursorContext, FocusedPart } from \"./CursorContext\";\nimport { ColumnGroupProps } from \"./ColumnGroup\";\nimport { ColumnDragContext } from \"./ColumnDragContext\";\nimport { ColumnGhost } from \"./internal/ColumnGhost\";\nimport { ColumnDropTarget } from \"./internal/ColumnDropTarget\";\nimport { ColumnDataContext } from \"./ColumnDataContext\";\n\nconst withBaseName = makePrefixer(\"saltGrid\");\n\nexport type ColumnSeparatorType = \"regular\" | \"none\" | \"groupEdge\" | \"pinned\";\nexport type ColumnGroupRowSeparatorType = \"first\" | \"regular\" | \"last\";\nexport type ColumnGroupColumnSeparatorType = \"regular\" | \"none\" | \"pinned\";\nexport type GridRowSelectionMode = \"single\" | \"multi\" | \"none\";\nexport type GridCellSelectionMode = \"range\" | \"none\";\n\nexport type RowKeyGetter<T> = (row: T, index: number) => string;\n\nexport type GridColumnMoveHandler = (\n columnId: string,\n fromIndex: number,\n toIndex: number\n) => void;\n\nexport interface GridProps<T = any> {\n /**\n * At least 1 children is expected, options are `ColumnGroup` or `GridColumn`.\n * */\n children: ReactNode;\n /**\n * If `true`, zebra stripes are enabled (odd/even rows have alternate colours)\n * */\n zebra?: boolean;\n /**\n * If `true`, grid header is hidden.\n * */\n hideHeader?: boolean;\n /**\n * If `true`, column separators are rendered.\n * */\n columnSeparators?: boolean;\n /**\n * If `true`, separators are rendered between pinned and unpinned columns.\n * */\n pinnedSeparators?: boolean;\n /**\n * Row data objects. Sparse arrays are supported.\n * */\n rowData: T[];\n /**\n * Should return unique string for a given row data object.\n * If rowData is sparse then this function should work with undefined row data\n * objects and create keys based on row index. `(row: T, index: number) => string`\n * */\n rowKeyGetter?: RowKeyGetter<T>;\n /**\n * Rows with these indices are selected by default.\n * */\n defaultSelectedRowIdxs?: number[];\n /**\n * Selected row indices for controlled mode.\n * */\n selectedRowIdxs?: number[];\n className?: string;\n style?: CSSProperties;\n /**\n * The variant to use. Options are `primary` and `secondary`. Default value is\n * `primary`. `secondary` variant changes grid background to reduce contrast.\n * */\n variant?: \"primary\" | \"secondary\";\n /**\n * Options are `single`, `multi` and `none`.\n * */\n rowSelectionMode?: GridRowSelectionMode;\n onRowSelected?: (selectedRowIdxs: number[]) => void;\n /**\n * If `true`, user will be able to move columns using drag and drop.\n * */\n columnMove?: boolean;\n /**\n * Accepts `(columnId: string, fromIndex: number, toIndex: number) => void`\n * */\n onColumnMoved?: GridColumnMoveHandler;\n /**\n * Options are `range` and `none`.\n * */\n cellSelectionMode?: GridCellSelectionMode;\n onVisibleRowRangeChange?: (start: number, end: number) => void;\n /**\n * If `true`, keyboard navigation is enabled for the header.\n * */\n headerIsFocusable?: boolean;\n}\n\nexport interface GridRowModel<T> {\n key: string;\n index: number;\n data: T;\n}\n\nexport interface GridColumnModel<T> {\n index: number;\n separator: ColumnSeparatorType;\n\n info: GridColumnInfo<T>;\n}\n\nexport interface GridColumnGroupModel {\n index: number;\n data: ColumnGroupProps;\n childrenIds: string[];\n rowSeparator: ColumnGroupRowSeparatorType;\n columnSeparator: ColumnGroupColumnSeparatorType;\n colSpan: number;\n}\n\nfunction defaultRowKeyGetter<T>(row: T, index: number): string {\n return `${index}`;\n}\n\nexport const Grid = function Grid<T>(props: GridProps<T>) {\n const {\n rowData,\n zebra,\n hideHeader,\n columnSeparators,\n pinnedSeparators = true,\n className,\n style,\n rowKeyGetter = defaultRowKeyGetter,\n children,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n variant = \"primary\",\n rowSelectionMode = \"multi\",\n onRowSelected,\n columnMove,\n onColumnMoved,\n cellSelectionMode = \"none\",\n onVisibleRowRangeChange,\n headerIsFocusable,\n } = props;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrollableRef = useRef<HTMLDivElement>(null);\n const middleRef = useRef<HTMLDivElement>(null);\n const topRef = useRef<HTMLDivElement>(null);\n const leftRef = useRef<HTMLDivElement>(null);\n const rightRef = useRef<HTMLDivElement>(null);\n const bottomRef = useRef<HTMLDivElement>(null);\n\n // What caused the latest scroll change. User means the UI (mouse events), table means the component initiated scrolling (scrollToCell was called for example)\n const [scrollSource, setScrollSource] = useState<\"user\" | \"table\">(\"user\");\n const [scrollLeft, setScrollLeft] = useState<number>(0);\n const [scrollTop, setScrollTop] = useState<number>(0);\n\n const [hoverRowKey, setHoverRowKey] = useState<string | undefined>(undefined);\n\n const [\n { clientWidth, clientHeight, scrollBarHeight, scrollBarWidth },\n setDimensions,\n ] = useState({\n clientWidth: 0,\n clientHeight: 0,\n scrollBarHeight: 0,\n scrollBarWidth: 0,\n });\n\n const [rowHeight, setRowHeight] = useState<number>(0);\n\n const [cursorRowIdx, setCursorRowIdx] = useState<number>(0);\n const [cursorColIdx, setCursorColIdx] = useState<number>(0);\n const [focusedPart, setFocusedPart] = useState<FocusedPart>(\n headerIsFocusable ? \"header\" : \"body\"\n );\n\n const [editMode, setEditMode] = useState<boolean>(false);\n const [initialText, setInitialText] = useState<string | undefined>(undefined);\n\n const resizeClient: ScrollableProps<T>[\"resizeClient\"] = useCallback(\n (dimensions) => {\n setDimensions(dimensions);\n },\n []\n );\n\n const {\n leftCols, // Columns pinned to left\n midCols, // Scrollable columns\n rightCols, // Columns pinned to right\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n } = useColumnRegistry(children);\n\n const midColsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n midCols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>])\n ),\n [midCols]\n );\n\n // Width of all columns pinned to left\n const leftWidth = useSumWidth(leftCols);\n // Width of all scrollable columns\n const midWidth = useSumWidth(midCols);\n // Width of all columns pinned to right\n const rightWidth = useSumWidth(rightCols);\n // Total width of all columns\n const totalWidth = useSum([leftWidth, midWidth, rightWidth]);\n\n const hasColumnGroups =\n leftGroups.length > 0 || midGroups.length > 0 || rightGroups.length > 0;\n\n const headRowCount = hideHeader ? 0 : hasColumnGroups ? 2 : 1; // TODO multiple group levels\n const rowCount = rowData.length;\n\n // Footer is not implemented yet.\n const botRowCount = 0; // TODO\n // Height of the header\n const topHeight = rowHeight * headRowCount;\n // Height of the middle part (virtual height)\n const midHeight = rowCount === 0 ? 0 : rowHeight * rowCount + 1;\n // Height of the footer\n const botHeight = botRowCount * rowHeight;\n // Total height of the grid (virtual)\n const totalHeight = useSum([topHeight, midHeight, botHeight]);\n // Client width of the middle part of the grid (viewport)\n const clientMidWidth = useClientMidWidth(clientWidth, leftWidth, rightWidth);\n // Unused width in the middle part, to be filled by an empty column with fake cells.\n const midGap = Math.max(0, Math.floor(clientMidWidth - midWidth));\n\n // Range of unpinned columns visible in the body of the grid (pinned columns are always visible).\n const bodyVisColRng = useBodyVisibleColumnRange(\n midCols,\n scrollLeft,\n clientMidWidth\n );\n\n const midGrpByColId = useMemo(() => {\n const m = new Map<string, GridColumnGroupModel>();\n for (let g of midGroups) {\n for (let c of g.childrenIds) {\n m.set(c, g);\n }\n }\n return m;\n }, [midGroups]);\n\n // Range of visible column groups.\n const visColGrpRng = useVisibleColumnGroupRange(\n bodyVisColRng,\n midCols,\n midGrpByColId,\n leftGroups.length\n );\n\n const visColGrps = useMemo(() => {\n return midGroups.slice(visColGrpRng.start, visColGrpRng.end);\n }, [visColGrpRng, midGroups]);\n\n const headVisColRng = useHeadVisibleColumnRange(\n bodyVisColRng,\n visColGrps,\n midColsById,\n leftCols.length\n );\n\n const bodyScrOutColWh = useLeftScrolledOutWidth(midCols, bodyVisColRng);\n const headScrOutColWh = useLeftScrolledOutWidth(midCols, headVisColRng);\n\n const bodyVisAreaLeft = useSum([leftWidth, bodyScrOutColWh]);\n const headVisAreaLeft = useSum([leftWidth, headScrOutColWh]);\n const clientMidHeight = useClientMidHeight(\n clientHeight,\n topHeight,\n botHeight\n );\n const visRowRng = useVisibleRowRange(\n scrollTop,\n clientMidHeight,\n rowHeight,\n rowCount\n );\n\n const bodyVisAreaTop = useBodyVisibleAreaTop(rowHeight, visRowRng, topHeight);\n\n const bodyVisibleColumns = useColumnRange(midCols, bodyVisColRng);\n const headVisibleColumns = useColumnRange(midCols, headVisColRng);\n const bodyVisColWh = useSumRangeWidth(midCols, bodyVisColRng);\n\n const headVisColWh = bodyVisColWh; // TODO implement groups\n\n const rootStyle = useMemo(\n () => ({\n ...style,\n \"--grid-total-width\": `${totalWidth}px`,\n \"--grid-total-height\": `${totalHeight}px`,\n \"--grid-topPart-height\": `${topHeight}px`,\n \"--grid-leftPart-width\": `${leftWidth}px`,\n \"--grid-rightPart-width\": `${rightWidth}px`,\n \"--grid-bodyVisibleColumns-width\": `${bodyVisColWh}px`,\n \"--grid-bodyVisibleArea-top\": `${bodyVisAreaTop}px`,\n \"--grid-bodyVisibleArea-left\": `${bodyVisAreaLeft}px`,\n \"--grid-bottomHeight\": `${botHeight}px`,\n \"--grid-headerVisibleColumns-width\": `${headVisColWh}px`,\n \"--grid-headerVisibleArea-left\": `${headVisAreaLeft}px`,\n \"--grid-scrollBar-height\": `${scrollBarHeight}px`,\n \"--grid-scrollBar-width\": `${scrollBarWidth}px`,\n }),\n [\n style,\n totalHeight,\n totalWidth,\n topHeight,\n leftWidth,\n rightWidth,\n botHeight,\n bodyVisColWh,\n bodyVisAreaLeft,\n bodyVisAreaTop,\n headVisColWh,\n headVisAreaLeft,\n scrollBarHeight,\n scrollBarWidth,\n ]\n );\n\n const onWheel: EventListener = useCallback(\n (event) => {\n let { deltaX, deltaY, shiftKey } = event as WheelEvent;\n if (deltaX === 0 && shiftKey) {\n deltaX = deltaY;\n deltaY = 0;\n }\n const s = scrollableRef.current;\n if (s) {\n s.scrollLeft += deltaX;\n s.scrollTop += deltaY;\n }\n event.preventDefault();\n event.stopPropagation();\n },\n [scrollableRef.current]\n );\n\n const cols = useMemo(\n () => [...leftCols, ...midCols, ...rightCols],\n [leftCols, midCols, rightCols]\n );\n\n const colsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n cols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>])\n ),\n [cols]\n );\n\n const getColById = useCallback(\n (id: string) => {\n return colsById.get(id);\n },\n [colsById]\n );\n\n const columnDataContext: ColumnDataContext<T> = useMemo(\n () => ({\n getColById,\n }),\n [getColById]\n );\n\n const scroll = useCallback(\n (left?: number, top?: number, source?: \"user\" | \"table\") => {\n setScrollSource(source || \"user\");\n if (left !== undefined) {\n setScrollLeft(left);\n }\n if (top !== undefined) {\n setScrollTop(top);\n }\n },\n [setScrollLeft, setScrollTop, setScrollSource]\n );\n\n const scrollToCell = useScrollToCell(\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll\n );\n\n const focusCellElement = (\n part: FocusedPart,\n rowIdx: number,\n colIdx: number\n ) => {\n setTimeout(() => {\n const selector =\n part === \"body\"\n ? `td[data-row-index=\"${rowIdx}\"][data-column-index=\"${colIdx}\"]`\n : `th[data-column-index=\"${colIdx}\"]`;\n const nodeToFocus = rootRef.current?.querySelector(selector);\n if (nodeToFocus) {\n (nodeToFocus as HTMLElement).focus({ preventScroll: true });\n } else {\n console.warn(`focusCellElement can't find the element`);\n }\n }, 0);\n };\n\n const startEditMode = (text?: string) => {\n if (editMode || cursorRowIdx == undefined || cursorColIdx == undefined) {\n return;\n }\n const r = rowData[cursorRowIdx];\n const c = cols[cursorColIdx];\n const isEditable = !!contextValue.getEditor(c.info.props.id);\n if (isEditable) {\n setInitialText(text);\n setEditMode(true);\n }\n };\n\n const endEditMode = (value: string) => {\n if (!editMode) {\n return;\n }\n if (cursorColIdx == undefined) {\n console.error(`endEditMode: cursorColIdx is undefined in edit mode`);\n return;\n }\n const c = cols[cursorColIdx];\n const handler = c.info.props.onChange;\n if (cursorRowIdx == undefined) {\n console.error(`endEditMode: cursorRowIdx is undefined in edit mode`);\n return;\n }\n if (!handler) {\n console.warn(\n `onChange is not specified for editable column \"${c.info.props.id}\".`\n );\n } else {\n handler(rowData[cursorRowIdx], cursorRowIdx, value);\n }\n setEditMode(false);\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n };\n\n const cancelEditMode = () => {\n if (!editMode) {\n return;\n }\n setEditMode(false);\n if (cursorRowIdx != null && cursorColIdx != null) {\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n }\n };\n\n const {\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectAll,\n selectRows,\n unselectAll,\n onMouseDown: onRowSelectionMouseDown,\n } = useRowSelection(\n rowKeyGetter,\n rowData,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n rowSelectionMode,\n onRowSelected\n );\n\n const rangeSelection = useRangeSelection(cellSelectionMode);\n\n const moveCursor = useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n cancelEditMode();\n if (!headerIsFocusable && part === \"header\") {\n console.warn(\n `Cannot move focus to the header. \"headerIsFocusable\" prop is false.`\n );\n return;\n }\n setFocusedPart(part);\n colIdx = clamp(colIdx, 0, cols.length - 1);\n if (part === \"body\") {\n if (rowData.length < 1 || cols.length < 1) {\n return;\n }\n rowIdx = clamp(rowIdx, 0, rowData.length - 1);\n } else if (part === \"header\") {\n rowIdx = 0; // There is only one row in the header currently\n }\n setCursorRowIdx(rowIdx);\n setCursorColIdx(colIdx);\n scrollToCell(part, rowIdx, colIdx);\n focusCellElement(part, rowIdx, colIdx);\n if (part === \"body\") {\n rangeSelection.onCursorMove({ rowIdx, colIdx });\n }\n },\n [\n setCursorRowIdx,\n setCursorColIdx,\n rowData,\n rowKeyGetter,\n cols,\n rootRef.current,\n scrollToCell,\n endEditMode,\n rangeSelection.onCursorMove,\n focusedPart,\n headerIsFocusable,\n ]\n );\n\n const rows = useRowModels(rowKeyGetter, rowData, visRowRng);\n\n const isLeftRaised = scrollLeft > 0;\n const isRightRaised = scrollLeft + clientMidWidth < midWidth;\n const isHeaderRaised = scrollTop > 0;\n\n const resizeColumn = useCallback(\n (colIdx: number, width: number) => {\n const col = cols[colIdx];\n col.info.onWidthChanged(width);\n },\n [cols]\n );\n\n const onResizeHandleMouseDown = useColumnResize(cols, resizeColumn);\n\n const sizingContext: SizingContext = useMemo(\n () => ({\n resizeColumn,\n rowHeight,\n onResizeHandleMouseDown,\n }),\n [resizeColumn, rowHeight, onResizeHandleMouseDown]\n );\n\n const layoutContext: LayoutContext = useMemo(\n () => ({\n totalHeight,\n totalWidth,\n clientWidth,\n clientHeight,\n }),\n [totalHeight, totalWidth]\n );\n\n const editorContext: EditorContext = useMemo(\n () => ({\n initialText,\n editMode,\n startEditMode,\n endEditMode,\n cancelEditMode,\n }),\n [editMode, startEditMode, endEditMode, cancelEditMode, initialText]\n );\n\n const [isFocused, setFocused] = useState<boolean>(false);\n\n const onFocus = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n setFocused(true);\n },\n [setFocused]\n );\n\n const onBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n setFocused(false);\n },\n [setFocused]\n );\n\n const cursorContext: CursorContext = useMemo(\n () => ({\n isFocused,\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n focusedPart,\n headerIsFocusable: Boolean(headerIsFocusable),\n }),\n [\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n isFocused,\n focusedPart,\n headerIsFocusable,\n ]\n );\n\n const onColumnMove: GridColumnMoveHandler = (\n columnId,\n fromIndex,\n toIndex\n ) => {\n if (onColumnMoved && fromIndex !== toIndex) {\n onColumnMoved(columnId, fromIndex, toIndex);\n }\n };\n\n const {\n dragState,\n onColumnMoveHandleMouseDown,\n activeTarget,\n onColumnMoveCancel,\n } = useColumnMove(\n columnMove,\n rootRef,\n leftCols,\n midCols,\n rightCols,\n cols,\n scrollLeft,\n clientMidWidth,\n onColumnMove\n );\n\n const columnDragContext: ColumnDragContext = useMemo(\n () => ({\n columnMove,\n onColumnMoveHandleMouseDown,\n }),\n [columnMove, onColumnMoveHandleMouseDown]\n );\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n onRowSelectionMouseDown(event);\n rangeSelection.onCellMouseDown(event);\n\n const target = event.target as HTMLElement;\n try {\n const { part, rowIndex, columnIndex } = getFocusablePosition(target);\n if (part === \"header\" && !headerIsFocusable) {\n return;\n }\n moveCursor(part, rowIndex, columnIndex);\n } catch (e) {\n // TODO\n }\n };\n\n const onKeyUp: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n const { key } = event;\n if (key === \"Shift\") {\n rangeSelection.onKeyboardRangeSelectionEnd();\n }\n },\n [rangeSelection.onKeyboardRangeSelectionEnd]\n );\n\n const editModeKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"F2\":\n case \"Enter\":\n startEditMode();\n break;\n case \"Backspace\":\n startEditMode(\"\");\n break;\n case \"Escape\":\n if (editMode) {\n cancelEditMode();\n break;\n } else {\n return false;\n }\n default:\n if (\n !editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n /^[\\w\\d ]$/.test(key)\n ) {\n startEditMode(key);\n } else {\n return false;\n }\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [startEditMode, editMode, cancelEditMode]\n );\n\n const selectionKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"Shift\":\n rangeSelection.onKeyboardRangeSelectionStart({\n rowIdx: cursorRowIdx || 0,\n colIdx: cursorColIdx || 0,\n });\n break;\n case \" \":\n if (focusedPart === \"body\") {\n if (event.ctrlKey) {\n if (cursorColIdx != undefined) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: cursorColIdx },\n end: { rowIdx: rowData.length, colIdx: cursorColIdx },\n });\n }\n } else {\n if (cursorRowIdx != undefined) {\n selectRows({\n rowIndex: cursorRowIdx,\n isRange: false,\n incremental: true,\n unselectOtherRows: !event.shiftKey,\n });\n }\n }\n break;\n } else {\n return false;\n }\n case \"a\":\n if (event.ctrlKey || event.metaKey) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: 0 },\n end: { rowIdx: rowData.length, colIdx: cols.length },\n });\n selectAll();\n }\n break;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n rangeSelection.selectRange,\n rangeSelection.onKeyboardRangeSelectionStart,\n selectRows,\n selectAll,\n cursorColIdx,\n cursorRowIdx,\n rowData.length,\n cols.length,\n focusedPart,\n ]\n );\n\n const clipboardKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (\n key === \"c\" &&\n (event.ctrlKey || event.metaKey) &&\n rangeSelection.selectedCellRange\n ) {\n const { start, end } = rangeSelection.selectedCellRange;\n const c = (x: number, y: number) => x - y;\n const [minRow, maxRow] = [start.rowIdx, end.rowIdx].sort(c);\n const [minCol, maxCol] = [start.colIdx, end.colIdx].sort(c);\n const text: string[] = [];\n for (let r = minRow; r <= maxRow; ++r) {\n const row = rowData[r];\n const rowText: string[] = [];\n for (let c = minCol; c <= maxCol; ++c) {\n const col = cols[c]!;\n const cellValue = col.info.props.getValue!(row);\n rowText.push(cellValue);\n }\n text.push(rowText.join(\"\\t\"));\n }\n navigator.clipboard.writeText(text.join(\"\\n\"));\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n [rangeSelection.selectedCellRange]\n );\n\n const pageSize = Math.max(1, visRowRng.length - 1);\n\n const navigationKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"ArrowLeft\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) - 1);\n break;\n case \"ArrowRight\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) + 1);\n break;\n case \"ArrowUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) - 1, cursorColIdx);\n }\n break;\n case \"ArrowDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) + 1, cursorColIdx);\n }\n break;\n case \"PageUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) - pageSize,\n cursorColIdx\n );\n }\n break;\n case \"PageDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) + pageSize,\n cursorColIdx\n );\n }\n break;\n case \"Home\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, 0);\n } else {\n moveCursor(focusedPart, 0, 0);\n }\n break;\n case \"End\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, cols.length - 1);\n } else {\n moveCursor(focusedPart, rowData.length - 1, cols.length - 1);\n }\n break;\n case \"Tab\":\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n editMode &&\n cursorColIdx != null &&\n cursorRowIdx != null\n ) {\n if (!event.shiftKey) {\n if (cursorColIdx < cols.length - 1) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx + 1);\n } else {\n if (cursorRowIdx < rowData.length - 1) {\n moveCursor(focusedPart, cursorRowIdx + 1, 0);\n }\n }\n } else {\n if (cursorColIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx - 1);\n } else {\n if (cursorRowIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx - 1, cols.length - 1);\n }\n }\n }\n } else {\n return false;\n }\n break;\n case \"Enter\":\n if (\n editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !event.shiftKey\n ) {\n if (cursorRowIdx == undefined) {\n moveCursor(focusedPart, 0, 0);\n } else {\n moveCursor(focusedPart, cursorRowIdx + 1, cursorColIdx);\n }\n } else {\n return false;\n }\n break;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n moveCursor,\n cursorRowIdx,\n cursorRowIdx,\n cols.length,\n rowData.length,\n headerIsFocusable,\n pageSize,\n ]\n );\n\n const columnMoveKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (key === \"Escape\") {\n onColumnMoveCancel();\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n []\n );\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (cursorColIdx != undefined && cursorRowIdx != undefined) {\n const column = cols[cursorColIdx];\n if (column.info.props.onKeyDown) {\n column.info.props.onKeyDown(event, cursorRowIdx);\n }\n }\n if (!event.isPropagationStopped()) {\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ].find((handler) => {\n return handler(event);\n });\n }\n },\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ]\n );\n\n const selectionContext: SelectionContext = useMemo(\n () => ({\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n selectedCellRange: rangeSelection?.selectedCellRange,\n }),\n [\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n rangeSelection?.selectedCellRange,\n ]\n );\n\n useEffect(() => {\n if (onVisibleRowRangeChange) {\n onVisibleRowRangeChange(visRowRng.start, visRowRng.end);\n }\n }, [onVisibleRowRangeChange, visRowRng]);\n\n return (\n <GridContext.Provider value={contextValue}>\n <LayoutContext.Provider value={layoutContext}>\n <SelectionContext.Provider value={selectionContext}>\n <ColumnDragContext.Provider value={columnDragContext}>\n <CursorContext.Provider value={cursorContext}>\n <SizingContext.Provider value={sizingContext}>\n <EditorContext.Provider value={editorContext}>\n <ColumnDataContext.Provider value={columnDataContext}>\n {props.children}\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"zebra\")]: zebra,\n [withBaseName(\"columnSeparators\")]: columnSeparators,\n [withBaseName(\"pinnedSeparators\")]: pinnedSeparators,\n [withBaseName(\"primaryBackground\")]:\n variant === \"primary\",\n [withBaseName(\"secondaryBackground\")]:\n variant === \"secondary\",\n },\n className\n )}\n style={rootStyle}\n ref={rootRef}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onMouseDown={onMouseDown}\n onFocus={onFocus}\n onBlur={onBlur}\n data-name=\"grid-root\"\n role=\"grid\"\n aria-colcount={cols.length}\n aria-rowcount={rowCount + headRowCount}\n aria-multiselectable={rowSelectionMode === \"multi\"}\n >\n <CellMeasure setRowHeight={setRowHeight} />\n <Scrollable\n resizeClient={resizeClient}\n scrollLeft={scrollLeft}\n scrollTop={scrollTop}\n scrollSource={scrollSource}\n scroll={scroll}\n scrollerRef={scrollableRef}\n topRef={topRef}\n rightRef={rightRef}\n bottomRef={bottomRef}\n leftRef={leftRef}\n middleRef={middleRef}\n />\n {!hideHeader && leftCols.length > 0 && (\n <TopLeftPart\n onWheel={onWheel}\n columns={leftCols}\n columnGroups={leftGroups}\n rightShadow={isLeftRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && (\n <TopPart\n columns={headVisibleColumns}\n columnGroups={visColGrps}\n topRef={topRef}\n onWheel={onWheel}\n midGap={midGap}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && rightCols.length > 0 && (\n <TopRightPart\n onWheel={onWheel}\n columns={rightCols}\n columnGroups={rightGroups}\n leftShadow={isRightRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {leftCols.length > 0 && (\n <LeftPart\n leftRef={leftRef}\n onWheel={onWheel}\n columns={leftCols}\n rows={rows}\n rightShadow={isLeftRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n />\n )}\n <MiddlePart\n middleRef={middleRef}\n onWheel={onWheel}\n columns={bodyVisibleColumns}\n rows={rows}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n midGap={midGap}\n zebra={zebra}\n />\n {rightCols.length > 0 && (\n <RightPart\n rightRef={rightRef}\n onWheel={onWheel}\n columns={rightCols}\n rows={rows}\n leftShadow={isRightRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n />\n )}\n <ColumnDropTarget x={activeTarget?.x} />\n <ColumnGhost\n columns={cols}\n rows={rows}\n dragState={dragState}\n zebra={zebra}\n />\n </div>\n </ColumnDataContext.Provider>\n </EditorContext.Provider>\n </SizingContext.Provider>\n </CursorContext.Provider>\n </ColumnDragContext.Provider>\n </SelectionContext.Provider>\n </LayoutContext.Provider>\n </GridContext.Provider>\n );\n};\n"],"names":["Grid","c"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Grid.js","sources":["../src/Grid.tsx"],"sourcesContent":["import React, {\n CSSProperties,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEventHandler,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { GridColumnInfo } from \"./GridColumn\";\nimport { GridContext } from \"./GridContext\";\nimport { clsx } from \"clsx\";\nimport {\n CellMeasure,\n clamp,\n getFocusablePosition,\n LeftPart,\n MiddlePart,\n RightPart,\n Scrollable,\n ScrollableProps,\n TopLeftPart,\n TopPart,\n TopRightPart,\n useBodyVisibleAreaTop,\n useBodyVisibleColumnRange,\n useClientMidHeight,\n useClientMidWidth,\n useColumnMove,\n useColumnRange,\n useColumnRegistry,\n useColumnResize,\n useHeadVisibleColumnRange,\n useLeftScrolledOutWidth,\n useRangeSelection,\n useRowModels,\n useRowSelection,\n useScrollToCell,\n useSum,\n useSumRangeWidth,\n useSumWidth,\n useVisibleColumnGroupRange,\n useVisibleRowRange,\n} from \"./internal\";\nimport \"./Grid.css\";\nimport { SelectionContext } from \"./SelectionContext\";\nimport { SizingContext } from \"./SizingContext\";\nimport { LayoutContext } from \"./LayoutContext\";\nimport { EditorContext } from \"./EditorContext\"; // TODO remove\nimport { CursorContext, FocusedPart } from \"./CursorContext\";\nimport { ColumnGroupProps } from \"./ColumnGroup\";\nimport { ColumnDragContext } from \"./ColumnDragContext\";\nimport { ColumnGhost } from \"./internal/ColumnGhost\";\nimport { ColumnDropTarget } from \"./internal/ColumnDropTarget\";\nimport { ColumnDataContext } from \"./ColumnDataContext\";\n\nconst withBaseName = makePrefixer(\"saltGrid\");\n\nexport type ColumnSeparatorType = \"regular\" | \"none\" | \"groupEdge\" | \"pinned\";\nexport type ColumnGroupRowSeparatorType = \"first\" | \"regular\" | \"last\";\nexport type ColumnGroupColumnSeparatorType = \"regular\" | \"none\" | \"pinned\";\nexport type GridRowSelectionMode = \"single\" | \"multi\" | \"none\";\nexport type GridCellSelectionMode = \"range\" | \"none\";\n\nexport type RowKeyGetter<T> = (row: T, index: number) => string;\n\nexport type GridColumnMoveHandler = (\n columnId: string,\n fromIndex: number,\n toIndex: number\n) => void;\n\nexport interface GridProps<T = any> {\n /**\n * At least 1 children is expected, options are `ColumnGroup` or `GridColumn`.\n * */\n children: ReactNode;\n /**\n * If `true`, zebra stripes are enabled (odd/even rows have alternate colours)\n * */\n zebra?: boolean;\n /**\n * If `true`, grid header is hidden.\n * */\n hideHeader?: boolean;\n /**\n * If `true`, column separators are rendered.\n * */\n columnSeparators?: boolean;\n /**\n * If `true`, separators are rendered between pinned and unpinned columns.\n * */\n pinnedSeparators?: boolean;\n /**\n * Row data objects. Sparse arrays are supported.\n * */\n rowData: T[];\n /**\n * Should return unique string for a given row data object.\n * If rowData is sparse then this function should work with undefined row data\n * objects and create keys based on row index. `(row: T, index: number) => string`\n * */\n rowKeyGetter?: RowKeyGetter<T>;\n /**\n * Rows with these indices are selected by default.\n * */\n defaultSelectedRowIdxs?: number[];\n /**\n * Selected row indices for controlled mode.\n * */\n selectedRowIdxs?: number[];\n className?: string;\n style?: CSSProperties;\n /**\n * The variant to use. Options are `primary` and `secondary`. Default value is\n * `primary`. `secondary` variant changes grid background to reduce contrast.\n * */\n variant?: \"primary\" | \"secondary\";\n /**\n * Options are `single`, `multi` and `none`.\n * */\n rowSelectionMode?: GridRowSelectionMode;\n onRowSelected?: (selectedRowIdxs: number[]) => void;\n /**\n * If `true`, user will be able to move columns using drag and drop.\n * */\n columnMove?: boolean;\n /**\n * Accepts `(columnId: string, fromIndex: number, toIndex: number) => void`\n * */\n onColumnMoved?: GridColumnMoveHandler;\n /**\n * Options are `range` and `none`.\n * */\n cellSelectionMode?: GridCellSelectionMode;\n onVisibleRowRangeChange?: (start: number, end: number) => void;\n /**\n * If `true`, keyboard navigation is enabled for the header.\n * */\n headerIsFocusable?: boolean;\n}\n\nexport interface GridRowModel<T> {\n key: string;\n index: number;\n data: T;\n}\n\nexport interface GridColumnModel<T> {\n index: number;\n separator: ColumnSeparatorType;\n\n info: GridColumnInfo<T>;\n}\n\nexport interface GridColumnGroupModel {\n index: number;\n data: ColumnGroupProps;\n childrenIds: string[];\n rowSeparator: ColumnGroupRowSeparatorType;\n columnSeparator: ColumnGroupColumnSeparatorType;\n colSpan: number;\n}\n\nfunction defaultRowKeyGetter<T>(row: T, index: number): string {\n return `${index}`;\n}\n\nexport const Grid = function Grid<T>(props: GridProps<T>) {\n const {\n rowData,\n zebra,\n hideHeader,\n columnSeparators,\n pinnedSeparators = true,\n className,\n style,\n rowKeyGetter = defaultRowKeyGetter,\n children,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n variant = \"primary\",\n rowSelectionMode = \"multi\",\n onRowSelected,\n columnMove,\n onColumnMoved,\n cellSelectionMode = \"none\",\n onVisibleRowRangeChange,\n headerIsFocusable,\n } = props;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrollableRef = useRef<HTMLDivElement>(null);\n const middleRef = useRef<HTMLDivElement>(null);\n const topRef = useRef<HTMLDivElement>(null);\n const leftRef = useRef<HTMLDivElement>(null);\n const rightRef = useRef<HTMLDivElement>(null);\n const bottomRef = useRef<HTMLDivElement>(null);\n\n // What caused the latest scroll change. User means the UI (mouse events), table means the component initiated scrolling (scrollToCell was called for example)\n const [scrollSource, setScrollSource] = useState<\"user\" | \"table\">(\"user\");\n const [scrollLeft, setScrollLeft] = useState<number>(0);\n const [scrollTop, setScrollTop] = useState<number>(0);\n\n const [hoverRowKey, setHoverRowKey] = useState<string | undefined>(undefined);\n\n const [\n { clientWidth, clientHeight, scrollBarHeight, scrollBarWidth },\n setDimensions,\n ] = useState({\n clientWidth: 0,\n clientHeight: 0,\n scrollBarHeight: 0,\n scrollBarWidth: 0,\n });\n\n const [rowHeight, setRowHeight] = useState<number>(0);\n\n const [cursorRowIdx, setCursorRowIdx] = useState<number>(0);\n const [cursorColIdx, setCursorColIdx] = useState<number>(0);\n const [focusedPart, setFocusedPart] = useState<FocusedPart>(\n headerIsFocusable ? \"header\" : \"body\"\n );\n\n const [editMode, setEditMode] = useState<boolean>(false);\n const [initialText, setInitialText] = useState<string | undefined>(undefined);\n\n const resizeClient: ScrollableProps<T>[\"resizeClient\"] = useCallback(\n (dimensions) => {\n setDimensions(dimensions);\n },\n []\n );\n\n const {\n leftCols, // Columns pinned to left\n midCols, // Scrollable columns\n rightCols, // Columns pinned to right\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n } = useColumnRegistry(children);\n\n const midColsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n midCols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>])\n ),\n [midCols]\n );\n\n // Width of all columns pinned to left\n const leftWidth = useSumWidth(leftCols);\n // Width of all scrollable columns\n const midWidth = useSumWidth(midCols);\n // Width of all columns pinned to right\n const rightWidth = useSumWidth(rightCols);\n // Total width of all columns\n const totalWidth = useSum([leftWidth, midWidth, rightWidth]);\n\n const hasColumnGroups =\n leftGroups.length > 0 || midGroups.length > 0 || rightGroups.length > 0;\n\n const headRowCount = hideHeader ? 0 : hasColumnGroups ? 2 : 1; // TODO multiple group levels\n const rowCount = rowData.length;\n\n // Footer is not implemented yet.\n const botRowCount = 0; // TODO\n // Height of the header\n const topHeight = rowHeight * headRowCount;\n // Height of the middle part (virtual height)\n const midHeight = rowCount === 0 ? 0 : rowHeight * rowCount + 1;\n // Height of the footer\n const botHeight = botRowCount * rowHeight;\n // Total height of the grid (virtual)\n const totalHeight = useSum([topHeight, midHeight, botHeight]);\n // Client width of the middle part of the grid (viewport)\n const clientMidWidth = useClientMidWidth(clientWidth, leftWidth, rightWidth);\n // Unused width in the middle part, to be filled by an empty column with fake cells.\n const midGap = Math.max(0, Math.floor(clientMidWidth - midWidth));\n\n // Range of unpinned columns visible in the body of the grid (pinned columns are always visible).\n const bodyVisColRng = useBodyVisibleColumnRange(\n midCols,\n scrollLeft,\n clientMidWidth\n );\n\n const midGrpByColId = useMemo(() => {\n const m = new Map<string, GridColumnGroupModel>();\n for (let g of midGroups) {\n for (let c of g.childrenIds) {\n m.set(c, g);\n }\n }\n return m;\n }, [midGroups]);\n\n // Range of visible column groups.\n const visColGrpRng = useVisibleColumnGroupRange(\n bodyVisColRng,\n midCols,\n midGrpByColId,\n leftGroups.length\n );\n\n const visColGrps = useMemo(() => {\n return midGroups.slice(visColGrpRng.start, visColGrpRng.end);\n }, [visColGrpRng, midGroups]);\n\n const headVisColRng = useHeadVisibleColumnRange(\n bodyVisColRng,\n visColGrps,\n midColsById,\n leftCols.length\n );\n\n const bodyScrOutColWh = useLeftScrolledOutWidth(midCols, bodyVisColRng);\n const headScrOutColWh = useLeftScrolledOutWidth(midCols, headVisColRng);\n\n const bodyVisAreaLeft = useSum([leftWidth, bodyScrOutColWh]);\n const headVisAreaLeft = useSum([leftWidth, headScrOutColWh]);\n const clientMidHeight = useClientMidHeight(\n clientHeight,\n topHeight,\n botHeight\n );\n const visRowRng = useVisibleRowRange(\n scrollTop,\n clientMidHeight,\n rowHeight,\n rowCount\n );\n\n const bodyVisAreaTop = useBodyVisibleAreaTop(rowHeight, visRowRng, topHeight);\n\n const bodyVisibleColumns = useColumnRange(midCols, bodyVisColRng);\n const headVisibleColumns = useColumnRange(midCols, headVisColRng);\n const bodyVisColWh = useSumRangeWidth(midCols, bodyVisColRng);\n\n const headVisColWh = bodyVisColWh; // TODO implement groups\n\n const rootStyle = useMemo(\n () => ({\n ...style,\n \"--grid-total-width\": `${totalWidth}px`,\n \"--grid-total-height\": `${totalHeight}px`,\n \"--grid-topPart-height\": `${topHeight}px`,\n \"--grid-leftPart-width\": `${leftWidth}px`,\n \"--grid-rightPart-width\": `${rightWidth}px`,\n \"--grid-bodyVisibleColumns-width\": `${bodyVisColWh}px`,\n \"--grid-bodyVisibleArea-top\": `${bodyVisAreaTop}px`,\n \"--grid-bodyVisibleArea-left\": `${bodyVisAreaLeft}px`,\n \"--grid-bottomHeight\": `${botHeight}px`,\n \"--grid-headerVisibleColumns-width\": `${headVisColWh}px`,\n \"--grid-headerVisibleArea-left\": `${headVisAreaLeft}px`,\n \"--grid-scrollBar-height\": `${scrollBarHeight}px`,\n \"--grid-scrollBar-width\": `${scrollBarWidth}px`,\n }),\n [\n style,\n totalHeight,\n totalWidth,\n topHeight,\n leftWidth,\n rightWidth,\n botHeight,\n bodyVisColWh,\n bodyVisAreaLeft,\n bodyVisAreaTop,\n headVisColWh,\n headVisAreaLeft,\n scrollBarHeight,\n scrollBarWidth,\n ]\n );\n\n const onWheel: EventListener = useCallback(\n (event) => {\n let { deltaX, deltaY, shiftKey } = event as WheelEvent;\n if (deltaX === 0 && shiftKey) {\n deltaX = deltaY;\n deltaY = 0;\n }\n const s = scrollableRef.current;\n if (s) {\n s.scrollLeft += deltaX;\n s.scrollTop += deltaY;\n }\n event.preventDefault();\n event.stopPropagation();\n },\n [scrollableRef.current]\n );\n\n const cols = useMemo(\n () => [...leftCols, ...midCols, ...rightCols],\n [leftCols, midCols, rightCols]\n );\n\n const colsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n cols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>])\n ),\n [cols]\n );\n\n const getColById = useCallback(\n (id: string) => {\n return colsById.get(id);\n },\n [colsById]\n );\n\n const columnDataContext: ColumnDataContext<T> = useMemo(\n () => ({\n getColById,\n }),\n [getColById]\n );\n\n const scroll = useCallback(\n (left?: number, top?: number, source?: \"user\" | \"table\") => {\n setScrollSource(source || \"user\");\n if (left !== undefined) {\n setScrollLeft(left);\n }\n if (top !== undefined) {\n setScrollTop(top);\n }\n },\n [setScrollLeft, setScrollTop, setScrollSource]\n );\n\n const scrollToCell = useScrollToCell(\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll\n );\n\n const focusCellElement = (\n part: FocusedPart,\n rowIdx: number,\n colIdx: number\n ) => {\n setTimeout(() => {\n const selector =\n part === \"body\"\n ? `td[data-row-index=\"${rowIdx}\"][data-column-index=\"${colIdx}\"]`\n : `th[data-column-index=\"${colIdx}\"]`;\n const nodeToFocus = rootRef.current?.querySelector(selector);\n if (nodeToFocus) {\n (nodeToFocus as HTMLElement).focus({ preventScroll: true });\n } else {\n console.warn(`focusCellElement can't find the element`);\n }\n }, 0);\n };\n\n const startEditMode = (text?: string) => {\n if (editMode || cursorRowIdx == undefined || cursorColIdx == undefined) {\n return;\n }\n const r = rowData[cursorRowIdx];\n const c = cols[cursorColIdx];\n const isEditable = !!contextValue.getEditor(c.info.props.id);\n if (isEditable) {\n setInitialText(text);\n setEditMode(true);\n }\n };\n\n const endEditMode = (value: string) => {\n if (!editMode) {\n return;\n }\n if (cursorColIdx == undefined) {\n console.error(`endEditMode: cursorColIdx is undefined in edit mode`);\n return;\n }\n const c = cols[cursorColIdx];\n const handler = c.info.props.onChange;\n if (cursorRowIdx == undefined) {\n console.error(`endEditMode: cursorRowIdx is undefined in edit mode`);\n return;\n }\n if (!handler) {\n console.warn(\n `onChange is not specified for editable column \"${c.info.props.id}\".`\n );\n } else {\n handler(rowData[cursorRowIdx], cursorRowIdx, value);\n }\n setEditMode(false);\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n };\n\n const cancelEditMode = () => {\n if (!editMode) {\n return;\n }\n setEditMode(false);\n if (cursorRowIdx != null && cursorColIdx != null) {\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n }\n };\n\n const {\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectAll,\n selectRows,\n unselectAll,\n onMouseDown: onRowSelectionMouseDown,\n } = useRowSelection(\n rowKeyGetter,\n rowData,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n rowSelectionMode,\n onRowSelected\n );\n\n const rangeSelection = useRangeSelection(cellSelectionMode);\n\n const moveCursor = useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n if (!headerIsFocusable && part === \"header\") {\n console.warn(\n `Cannot move focus to the header. \"headerIsFocusable\" prop is false.`\n );\n return;\n }\n setFocusedPart(part);\n colIdx = clamp(colIdx, 0, cols.length - 1);\n if (part === \"body\") {\n if (rowData.length < 1 || cols.length < 1) {\n return;\n }\n rowIdx = clamp(rowIdx, 0, rowData.length - 1);\n } else if (part === \"header\") {\n rowIdx = 0; // There is only one row in the header currently\n }\n setCursorRowIdx(rowIdx);\n setCursorColIdx(colIdx);\n scrollToCell(part, rowIdx, colIdx);\n focusCellElement(part, rowIdx, colIdx);\n if (part === \"body\") {\n rangeSelection.onCursorMove({ rowIdx, colIdx });\n }\n },\n [\n setCursorRowIdx,\n setCursorColIdx,\n rowData,\n rowKeyGetter,\n cols,\n rootRef.current,\n scrollToCell,\n endEditMode,\n rangeSelection.onCursorMove,\n focusedPart,\n headerIsFocusable,\n ]\n );\n\n const rows = useRowModels(rowKeyGetter, rowData, visRowRng);\n\n const isLeftRaised = scrollLeft > 0;\n const isRightRaised = scrollLeft + clientMidWidth < midWidth;\n const isHeaderRaised = scrollTop > 0;\n\n const resizeColumn = useCallback(\n (colIdx: number, width: number) => {\n const col = cols[colIdx];\n col.info.onWidthChanged(width);\n },\n [cols]\n );\n\n const onResizeHandleMouseDown = useColumnResize(cols, resizeColumn);\n\n const sizingContext: SizingContext = useMemo(\n () => ({\n resizeColumn,\n rowHeight,\n onResizeHandleMouseDown,\n }),\n [resizeColumn, rowHeight, onResizeHandleMouseDown]\n );\n\n const layoutContext: LayoutContext = useMemo(\n () => ({\n totalHeight,\n totalWidth,\n clientWidth,\n clientHeight,\n }),\n [totalHeight, totalWidth]\n );\n\n const editorContext: EditorContext = useMemo(\n () => ({\n initialText,\n editMode,\n startEditMode,\n endEditMode,\n cancelEditMode,\n }),\n [editMode, startEditMode, endEditMode, cancelEditMode, initialText]\n );\n\n const [isFocused, setFocused] = useState<boolean>(false);\n\n const onFocus = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n setFocused(true);\n },\n [setFocused]\n );\n\n const onBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n setFocused(false);\n },\n [setFocused]\n );\n\n const cursorContext: CursorContext = useMemo(\n () => ({\n isFocused,\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n focusedPart,\n headerIsFocusable: Boolean(headerIsFocusable),\n }),\n [\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n isFocused,\n focusedPart,\n headerIsFocusable,\n ]\n );\n\n const onColumnMove: GridColumnMoveHandler = (\n columnId,\n fromIndex,\n toIndex\n ) => {\n if (onColumnMoved && fromIndex !== toIndex) {\n onColumnMoved(columnId, fromIndex, toIndex);\n }\n };\n\n const {\n dragState,\n onColumnMoveHandleMouseDown,\n activeTarget,\n onColumnMoveCancel,\n } = useColumnMove(\n columnMove,\n rootRef,\n leftCols,\n midCols,\n rightCols,\n cols,\n scrollLeft,\n clientMidWidth,\n onColumnMove\n );\n\n const columnDragContext: ColumnDragContext = useMemo(\n () => ({\n columnMove,\n onColumnMoveHandleMouseDown,\n }),\n [columnMove, onColumnMoveHandleMouseDown]\n );\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n onRowSelectionMouseDown(event);\n rangeSelection.onCellMouseDown(event);\n\n const target = event.target as HTMLElement;\n try {\n const { part, rowIndex, columnIndex } = getFocusablePosition(target);\n if (part === \"header\" && !headerIsFocusable) {\n return;\n }\n moveCursor(part, rowIndex, columnIndex);\n } catch (e) {\n // TODO\n }\n };\n\n const onKeyUp: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n const { key } = event;\n if (key === \"Shift\") {\n rangeSelection.onKeyboardRangeSelectionEnd();\n }\n },\n [rangeSelection.onKeyboardRangeSelectionEnd]\n );\n\n const editModeKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"F2\":\n case \"Enter\":\n startEditMode();\n break;\n case \"Backspace\":\n startEditMode(\"\");\n break;\n case \"Escape\":\n if (editMode) {\n cancelEditMode();\n break;\n } else {\n return false;\n }\n default:\n if (\n !editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n /^[\\w\\d ]$/.test(key)\n ) {\n startEditMode(key);\n } else {\n return false;\n }\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [startEditMode, editMode, cancelEditMode]\n );\n\n const selectionKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"Shift\":\n rangeSelection.onKeyboardRangeSelectionStart({\n rowIdx: cursorRowIdx || 0,\n colIdx: cursorColIdx || 0,\n });\n break;\n case \" \":\n if (focusedPart === \"body\") {\n if (event.ctrlKey) {\n if (cursorColIdx != undefined) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: cursorColIdx },\n end: { rowIdx: rowData.length, colIdx: cursorColIdx },\n });\n }\n } else {\n if (cursorRowIdx != undefined) {\n selectRows({\n rowIndex: cursorRowIdx,\n isRange: false,\n incremental: true,\n unselectOtherRows: !event.shiftKey,\n });\n }\n }\n break;\n } else {\n return false;\n }\n case \"a\":\n if (event.ctrlKey || event.metaKey) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: 0 },\n end: { rowIdx: rowData.length, colIdx: cols.length },\n });\n selectAll();\n return true;\n } else {\n return false;\n }\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n rangeSelection.selectRange,\n rangeSelection.onKeyboardRangeSelectionStart,\n selectRows,\n selectAll,\n cursorColIdx,\n cursorRowIdx,\n rowData.length,\n cols.length,\n focusedPart,\n ]\n );\n\n const clipboardKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (\n key === \"c\" &&\n (event.ctrlKey || event.metaKey) &&\n rangeSelection.selectedCellRange\n ) {\n const { start, end } = rangeSelection.selectedCellRange;\n const c = (x: number, y: number) => x - y;\n const [minRow, maxRow] = [start.rowIdx, end.rowIdx].sort(c);\n const [minCol, maxCol] = [start.colIdx, end.colIdx].sort(c);\n const text: string[] = [];\n for (let r = minRow; r <= maxRow; ++r) {\n const row = rowData[r];\n const rowText: string[] = [];\n for (let c = minCol; c <= maxCol; ++c) {\n const col = cols[c]!;\n const cellValue = col.info.props.getValue!(row);\n rowText.push(cellValue);\n }\n text.push(rowText.join(\"\\t\"));\n }\n navigator.clipboard.writeText(text.join(\"\\n\"));\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n [rangeSelection.selectedCellRange]\n );\n\n const pageSize = Math.max(1, visRowRng.length - 1);\n\n const navigationKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"ArrowLeft\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) - 1);\n break;\n case \"ArrowRight\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) + 1);\n break;\n case \"ArrowUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) - 1, cursorColIdx);\n }\n break;\n case \"ArrowDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) + 1, cursorColIdx);\n }\n break;\n case \"PageUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) - pageSize,\n cursorColIdx\n );\n }\n break;\n case \"PageDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) + pageSize,\n cursorColIdx\n );\n }\n break;\n case \"Home\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, 0);\n } else {\n moveCursor(focusedPart, 0, 0);\n }\n break;\n case \"End\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, cols.length - 1);\n } else {\n moveCursor(focusedPart, rowData.length - 1, cols.length - 1);\n }\n break;\n case \"Tab\":\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n editMode &&\n cursorColIdx != null &&\n cursorRowIdx != null\n ) {\n if (!event.shiftKey) {\n if (cursorColIdx < cols.length - 1) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx + 1);\n } else {\n if (cursorRowIdx < rowData.length - 1) {\n moveCursor(focusedPart, cursorRowIdx + 1, 0);\n }\n }\n } else {\n if (cursorColIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx - 1);\n } else {\n if (cursorRowIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx - 1, cols.length - 1);\n }\n }\n }\n } else {\n return false;\n }\n break;\n case \"Enter\":\n if (\n editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !event.shiftKey\n ) {\n if (cursorRowIdx == undefined) {\n moveCursor(focusedPart, 0, 0);\n } else {\n moveCursor(focusedPart, cursorRowIdx + 1, cursorColIdx);\n }\n } else {\n return false;\n }\n break;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n moveCursor,\n cursorRowIdx,\n cursorRowIdx,\n cols.length,\n rowData.length,\n headerIsFocusable,\n pageSize,\n ]\n );\n\n const columnMoveKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (key === \"Escape\") {\n onColumnMoveCancel();\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n []\n );\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (cursorColIdx != undefined && cursorRowIdx != undefined) {\n const column = cols[cursorColIdx];\n if (column.info.props.onKeyDown) {\n column.info.props.onKeyDown(event, cursorRowIdx);\n }\n }\n if (!event.isPropagationStopped()) {\n // each handler returns true or false\n // if the event is handled and should not be handled by anything else return true\n // if the event is not handled and we should keep trying other handlers return false\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ].find((handler) => {\n return handler(event);\n });\n }\n },\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ]\n );\n\n const selectionContext: SelectionContext = useMemo(\n () => ({\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n selectedCellRange: rangeSelection?.selectedCellRange,\n }),\n [\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n rangeSelection?.selectedCellRange,\n ]\n );\n\n useEffect(() => {\n if (onVisibleRowRangeChange) {\n onVisibleRowRangeChange(visRowRng.start, visRowRng.end);\n }\n }, [onVisibleRowRangeChange, visRowRng]);\n\n return (\n <GridContext.Provider value={contextValue}>\n <LayoutContext.Provider value={layoutContext}>\n <SelectionContext.Provider value={selectionContext}>\n <ColumnDragContext.Provider value={columnDragContext}>\n <CursorContext.Provider value={cursorContext}>\n <SizingContext.Provider value={sizingContext}>\n <EditorContext.Provider value={editorContext}>\n <ColumnDataContext.Provider value={columnDataContext}>\n {props.children}\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"zebra\")]: zebra,\n [withBaseName(\"columnSeparators\")]: columnSeparators,\n [withBaseName(\"pinnedSeparators\")]: pinnedSeparators,\n [withBaseName(\"primaryBackground\")]:\n variant === \"primary\",\n [withBaseName(\"secondaryBackground\")]:\n variant === \"secondary\",\n },\n className\n )}\n style={rootStyle}\n ref={rootRef}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onMouseDown={onMouseDown}\n onFocus={onFocus}\n onBlur={onBlur}\n data-name=\"grid-root\"\n role=\"grid\"\n aria-colcount={cols.length}\n aria-rowcount={rowCount + headRowCount}\n aria-multiselectable={rowSelectionMode === \"multi\"}\n >\n <CellMeasure setRowHeight={setRowHeight} />\n <Scrollable\n resizeClient={resizeClient}\n scrollLeft={scrollLeft}\n scrollTop={scrollTop}\n scrollSource={scrollSource}\n scroll={scroll}\n scrollerRef={scrollableRef}\n topRef={topRef}\n rightRef={rightRef}\n bottomRef={bottomRef}\n leftRef={leftRef}\n middleRef={middleRef}\n />\n {!hideHeader && leftCols.length > 0 && (\n <TopLeftPart\n onWheel={onWheel}\n columns={leftCols}\n columnGroups={leftGroups}\n rightShadow={isLeftRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && (\n <TopPart\n columns={headVisibleColumns}\n columnGroups={visColGrps}\n topRef={topRef}\n onWheel={onWheel}\n midGap={midGap}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && rightCols.length > 0 && (\n <TopRightPart\n onWheel={onWheel}\n columns={rightCols}\n columnGroups={rightGroups}\n leftShadow={isRightRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {leftCols.length > 0 && (\n <LeftPart\n leftRef={leftRef}\n onWheel={onWheel}\n columns={leftCols}\n rows={rows}\n rightShadow={isLeftRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n />\n )}\n <MiddlePart\n middleRef={middleRef}\n onWheel={onWheel}\n columns={bodyVisibleColumns}\n rows={rows}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n midGap={midGap}\n zebra={zebra}\n />\n {rightCols.length > 0 && (\n <RightPart\n rightRef={rightRef}\n onWheel={onWheel}\n columns={rightCols}\n rows={rows}\n leftShadow={isRightRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n />\n )}\n <ColumnDropTarget x={activeTarget?.x} />\n <ColumnGhost\n columns={cols}\n rows={rows}\n dragState={dragState}\n zebra={zebra}\n />\n </div>\n </ColumnDataContext.Provider>\n </EditorContext.Provider>\n </SizingContext.Provider>\n </CursorContext.Provider>\n </ColumnDragContext.Provider>\n </SelectionContext.Provider>\n </LayoutContext.Provider>\n </GridContext.Provider>\n );\n};\n"],"names":["Grid","c"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,MAAM,YAAA,GAAe,aAAa,UAAU,CAAA,CAAA;AA4G5C,SAAS,mBAAA,CAAuB,KAAQ,KAAuB,EAAA;AAC7D,EAAA,OAAO,CAAG,EAAA,KAAA,CAAA,CAAA,CAAA;AACZ,CAAA;AAEa,MAAA,IAAA,GAAO,SAASA,KAAAA,CAAQ,KAAqB,EAAA;AACxD,EAAM,MAAA;AAAA,IACJ,OAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAmB,GAAA,IAAA;AAAA,IACnB,SAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAe,GAAA,mBAAA;AAAA,IACf,QAAA;AAAA,IACA,sBAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAU,GAAA,SAAA;AAAA,IACV,gBAAmB,GAAA,OAAA;AAAA,IACnB,aAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAoB,GAAA,MAAA;AAAA,IACpB,uBAAA;AAAA,IACA,iBAAA;AAAA,GACE,GAAA,KAAA,CAAA;AAEJ,EAAM,MAAA,OAAA,GAAU,OAAuB,IAAI,CAAA,CAAA;AAC3C,EAAM,MAAA,aAAA,GAAgB,OAAuB,IAAI,CAAA,CAAA;AACjD,EAAM,MAAA,SAAA,GAAY,OAAuB,IAAI,CAAA,CAAA;AAC7C,EAAM,MAAA,MAAA,GAAS,OAAuB,IAAI,CAAA,CAAA;AAC1C,EAAM,MAAA,OAAA,GAAU,OAAuB,IAAI,CAAA,CAAA;AAC3C,EAAM,MAAA,QAAA,GAAW,OAAuB,IAAI,CAAA,CAAA;AAC5C,EAAM,MAAA,SAAA,GAAY,OAAuB,IAAI,CAAA,CAAA;AAG7C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAA2B,MAAM,CAAA,CAAA;AACzE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAiB,CAAC,CAAA,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAiB,CAAC,CAAA,CAAA;AAEpD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAA6B,KAAS,CAAA,CAAA,CAAA;AAE5E,EAAM,MAAA;AAAA,IACJ,EAAE,WAAA,EAAa,YAAc,EAAA,eAAA,EAAiB,cAAe,EAAA;AAAA,IAC7D,aAAA;AAAA,MACE,QAAS,CAAA;AAAA,IACX,WAAa,EAAA,CAAA;AAAA,IACb,YAAc,EAAA,CAAA;AAAA,IACd,eAAiB,EAAA,CAAA;AAAA,IACjB,cAAgB,EAAA,CAAA;AAAA,GACjB,CAAA,CAAA;AAED,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAiB,CAAC,CAAA,CAAA;AAEpD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAiB,CAAC,CAAA,CAAA;AAC1D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAiB,CAAC,CAAA,CAAA;AAC1D,EAAM,MAAA,CAAC,WAAa,EAAA,cAAc,CAAI,GAAA,QAAA;AAAA,IACpC,oBAAoB,QAAW,GAAA,MAAA;AAAA,GACjC,CAAA;AAEA,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAkB,KAAK,CAAA,CAAA;AACvD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAA6B,KAAS,CAAA,CAAA,CAAA;AAE5E,EAAA,MAAM,YAAmD,GAAA,WAAA;AAAA,IACvD,CAAC,UAAe,KAAA;AACd,MAAA,aAAA,CAAc,UAAU,CAAA,CAAA;AAAA,KAC1B;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,GACF,GAAI,kBAAkB,QAAQ,CAAA,CAAA;AAE9B,EAAA,MAAM,WAAc,GAAA,OAAA;AAAA,IAClB,MACE,IAAI,GAAA;AAAA,MACF,OAAA,CAAQ,GAAI,CAAA,CAAC,CAAM,KAAA,CAAC,EAAE,IAAK,CAAA,KAAA,CAAM,EAAI,EAAA,CAAC,CAAiC,CAAA;AAAA,KACzE;AAAA,IACF,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAGA,EAAM,MAAA,SAAA,GAAY,YAAY,QAAQ,CAAA,CAAA;AAEtC,EAAM,MAAA,QAAA,GAAW,YAAY,OAAO,CAAA,CAAA;AAEpC,EAAM,MAAA,UAAA,GAAa,YAAY,SAAS,CAAA,CAAA;AAExC,EAAA,MAAM,aAAa,MAAO,CAAA,CAAC,SAAW,EAAA,QAAA,EAAU,UAAU,CAAC,CAAA,CAAA;AAE3D,EAAM,MAAA,eAAA,GACJ,WAAW,MAAS,GAAA,CAAA,IAAK,UAAU,MAAS,GAAA,CAAA,IAAK,YAAY,MAAS,GAAA,CAAA,CAAA;AAExE,EAAA,MAAM,YAAe,GAAA,UAAA,GAAa,CAAI,GAAA,eAAA,GAAkB,CAAI,GAAA,CAAA,CAAA;AAC5D,EAAA,MAAM,WAAW,OAAQ,CAAA,MAAA,CAAA;AAGzB,EAAA,MAAM,WAAc,GAAA,CAAA,CAAA;AAEpB,EAAA,MAAM,YAAY,SAAY,GAAA,YAAA,CAAA;AAE9B,EAAA,MAAM,SAAY,GAAA,QAAA,KAAa,CAAI,GAAA,CAAA,GAAI,YAAY,QAAW,GAAA,CAAA,CAAA;AAE9D,EAAA,MAAM,YAAY,WAAc,GAAA,SAAA,CAAA;AAEhC,EAAA,MAAM,cAAc,MAAO,CAAA,CAAC,SAAW,EAAA,SAAA,EAAW,SAAS,CAAC,CAAA,CAAA;AAE5D,EAAA,MAAM,cAAiB,GAAA,iBAAA,CAAkB,WAAa,EAAA,SAAA,EAAW,UAAU,CAAA,CAAA;AAE3E,EAAM,MAAA,MAAA,GAAS,KAAK,GAAI,CAAA,CAAA,EAAG,KAAK,KAAM,CAAA,cAAA,GAAiB,QAAQ,CAAC,CAAA,CAAA;AAGhE,EAAA,MAAM,aAAgB,GAAA,yBAAA;AAAA,IACpB,OAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAM,MAAA,CAAA,uBAAQ,GAAkC,EAAA,CAAA;AAChD,IAAA,KAAA,IAAS,KAAK,SAAW,EAAA;AACvB,MAAS,KAAA,IAAA,CAAA,IAAK,EAAE,WAAa,EAAA;AAC3B,QAAE,CAAA,CAAA,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA;AAAA,OACZ;AAAA,KACF;AACA,IAAO,OAAA,CAAA,CAAA;AAAA,GACT,EAAG,CAAC,SAAS,CAAC,CAAA,CAAA;AAGd,EAAA,MAAM,YAAe,GAAA,0BAAA;AAAA,IACnB,aAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAW,CAAA,MAAA;AAAA,GACb,CAAA;AAEA,EAAM,MAAA,UAAA,GAAa,QAAQ,MAAM;AAC/B,IAAA,OAAO,SAAU,CAAA,KAAA,CAAM,YAAa,CAAA,KAAA,EAAO,aAAa,GAAG,CAAA,CAAA;AAAA,GAC1D,EAAA,CAAC,YAAc,EAAA,SAAS,CAAC,CAAA,CAAA;AAE5B,EAAA,MAAM,aAAgB,GAAA,yBAAA;AAAA,IACpB,aAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAS,CAAA,MAAA;AAAA,GACX,CAAA;AAEA,EAAM,MAAA,eAAA,GAAkB,uBAAwB,CAAA,OAAA,EAAS,aAAa,CAAA,CAAA;AACtE,EAAM,MAAA,eAAA,GAAkB,uBAAwB,CAAA,OAAA,EAAS,aAAa,CAAA,CAAA;AAEtE,EAAA,MAAM,eAAkB,GAAA,MAAA,CAAO,CAAC,SAAA,EAAW,eAAe,CAAC,CAAA,CAAA;AAC3D,EAAA,MAAM,eAAkB,GAAA,MAAA,CAAO,CAAC,SAAA,EAAW,eAAe,CAAC,CAAA,CAAA;AAC3D,EAAA,MAAM,eAAkB,GAAA,kBAAA;AAAA,IACtB,YAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,SAAY,GAAA,kBAAA;AAAA,IAChB,SAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,cAAiB,GAAA,qBAAA,CAAsB,SAAW,EAAA,SAAA,EAAW,SAAS,CAAA,CAAA;AAE5E,EAAM,MAAA,kBAAA,GAAqB,cAAe,CAAA,OAAA,EAAS,aAAa,CAAA,CAAA;AAChE,EAAM,MAAA,kBAAA,GAAqB,cAAe,CAAA,OAAA,EAAS,aAAa,CAAA,CAAA;AAChE,EAAM,MAAA,YAAA,GAAe,gBAAiB,CAAA,OAAA,EAAS,aAAa,CAAA,CAAA;AAE5D,EAAA,MAAM,YAAe,GAAA,YAAA,CAAA;AAErB,EAAA,MAAM,SAAY,GAAA,OAAA;AAAA,IAChB,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,sBAAsB,CAAG,EAAA,UAAA,CAAA,EAAA,CAAA;AAAA,MACzB,uBAAuB,CAAG,EAAA,WAAA,CAAA,EAAA,CAAA;AAAA,MAC1B,yBAAyB,CAAG,EAAA,SAAA,CAAA,EAAA,CAAA;AAAA,MAC5B,yBAAyB,CAAG,EAAA,SAAA,CAAA,EAAA,CAAA;AAAA,MAC5B,0BAA0B,CAAG,EAAA,UAAA,CAAA,EAAA,CAAA;AAAA,MAC7B,mCAAmC,CAAG,EAAA,YAAA,CAAA,EAAA,CAAA;AAAA,MACtC,8BAA8B,CAAG,EAAA,cAAA,CAAA,EAAA,CAAA;AAAA,MACjC,+BAA+B,CAAG,EAAA,eAAA,CAAA,EAAA,CAAA;AAAA,MAClC,uBAAuB,CAAG,EAAA,SAAA,CAAA,EAAA,CAAA;AAAA,MAC1B,qCAAqC,CAAG,EAAA,YAAA,CAAA,EAAA,CAAA;AAAA,MACxC,iCAAiC,CAAG,EAAA,eAAA,CAAA,EAAA,CAAA;AAAA,MACpC,2BAA2B,CAAG,EAAA,eAAA,CAAA,EAAA,CAAA;AAAA,MAC9B,0BAA0B,CAAG,EAAA,cAAA,CAAA,EAAA,CAAA;AAAA,KAC/B,CAAA;AAAA,IACA;AAAA,MACE,KAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,cAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,OAAyB,GAAA,WAAA;AAAA,IAC7B,CAAC,KAAU,KAAA;AACT,MAAA,IAAI,EAAE,MAAA,EAAQ,MAAQ,EAAA,QAAA,EAAa,GAAA,KAAA,CAAA;AACnC,MAAI,IAAA,MAAA,KAAW,KAAK,QAAU,EAAA;AAC5B,QAAS,MAAA,GAAA,MAAA,CAAA;AACT,QAAS,MAAA,GAAA,CAAA,CAAA;AAAA,OACX;AACA,MAAA,MAAM,IAAI,aAAc,CAAA,OAAA,CAAA;AACxB,MAAA,IAAI,CAAG,EAAA;AACL,QAAA,CAAA,CAAE,UAAc,IAAA,MAAA,CAAA;AAChB,QAAA,CAAA,CAAE,SAAa,IAAA,MAAA,CAAA;AAAA,OACjB;AACA,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,KACxB;AAAA,IACA,CAAC,cAAc,OAAO,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,MAAM,IAAO,GAAA,OAAA;AAAA,IACX,MAAM,CAAC,GAAG,UAAU,GAAG,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,IAC5C,CAAC,QAAU,EAAA,OAAA,EAAS,SAAS,CAAA;AAAA,GAC/B,CAAA;AAEA,EAAA,MAAM,QAAW,GAAA,OAAA;AAAA,IACf,MACE,IAAI,GAAA;AAAA,MACF,IAAA,CAAK,GAAI,CAAA,CAAC,CAAM,KAAA,CAAC,EAAE,IAAK,CAAA,KAAA,CAAM,EAAI,EAAA,CAAC,CAAiC,CAAA;AAAA,KACtE;AAAA,IACF,CAAC,IAAI,CAAA;AAAA,GACP,CAAA;AAEA,EAAA,MAAM,UAAa,GAAA,WAAA;AAAA,IACjB,CAAC,EAAe,KAAA;AACd,MAAO,OAAA,QAAA,CAAS,IAAI,EAAE,CAAA,CAAA;AAAA,KACxB;AAAA,IACA,CAAC,QAAQ,CAAA;AAAA,GACX,CAAA;AAEA,EAAA,MAAM,iBAA0C,GAAA,OAAA;AAAA,IAC9C,OAAO;AAAA,MACL,UAAA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,MAAM,MAAS,GAAA,WAAA;AAAA,IACb,CAAC,IAAe,EAAA,GAAA,EAAc,MAA8B,KAAA;AAC1D,MAAA,eAAA,CAAgB,UAAU,MAAM,CAAA,CAAA;AAChC,MAAA,IAAI,SAAS,KAAW,CAAA,EAAA;AACtB,QAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AAAA,OACpB;AACA,MAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AACrB,QAAA,YAAA,CAAa,GAAG,CAAA,CAAA;AAAA,OAClB;AAAA,KACF;AAAA,IACA,CAAC,aAAe,EAAA,YAAA,EAAc,eAAe,CAAA;AAAA,GAC/C,CAAA;AAEA,EAAA,MAAM,YAAe,GAAA,eAAA;AAAA,IACnB,SAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,gBAAmB,GAAA,CACvB,IACA,EAAA,MAAA,EACA,MACG,KAAA;AACH,IAAA,UAAA,CAAW,MAAM;AAvcrB,MAAA,IAAA,EAAA,CAAA;AAwcM,MAAA,MAAM,WACJ,IAAS,KAAA,MAAA,GACL,CAAsB,mBAAA,EAAA,MAAA,CAAA,sBAAA,EAA+B,aACrD,CAAyB,sBAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA;AAC/B,MAAA,MAAM,WAAc,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,OAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,aAAc,CAAA,QAAA,CAAA,CAAA;AACnD,MAAA,IAAI,WAAa,EAAA;AACf,QAAC,WAA4B,CAAA,KAAA,CAAM,EAAE,aAAA,EAAe,MAAM,CAAA,CAAA;AAAA,OACrD,MAAA;AACL,QAAA,OAAA,CAAQ,KAAK,CAAyC,uCAAA,CAAA,CAAA,CAAA;AAAA,OACxD;AAAA,OACC,CAAC,CAAA,CAAA;AAAA,GACN,CAAA;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,IAAkB,KAAA;AACvC,IAAA,IAAI,QAAY,IAAA,YAAA,IAAgB,KAAa,CAAA,IAAA,YAAA,IAAgB,KAAW,CAAA,EAAA;AACtE,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,MAAM,IAAI,IAAK,CAAA,YAAA,CAAA,CAAA;AACf,IAAM,MAAA,UAAA,GAAa,CAAC,CAAC,YAAA,CAAa,UAAU,CAAE,CAAA,IAAA,CAAK,MAAM,EAAE,CAAA,CAAA;AAC3D,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,cAAA,CAAe,IAAI,CAAA,CAAA;AACnB,MAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,KAClB;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,KAAkB,KAAA;AACrC,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,OAAA;AAAA,KACF;AACA,IAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,MAAA,OAAA,CAAQ,MAAM,CAAqD,mDAAA,CAAA,CAAA,CAAA;AACnE,MAAA,OAAA;AAAA,KACF;AACA,IAAA,MAAM,IAAI,IAAK,CAAA,YAAA,CAAA,CAAA;AACf,IAAM,MAAA,OAAA,GAAU,CAAE,CAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAA;AAC7B,IAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,MAAA,OAAA,CAAQ,MAAM,CAAqD,mDAAA,CAAA,CAAA,CAAA;AACnE,MAAA,OAAA;AAAA,KACF;AACA,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAQ,OAAA,CAAA,IAAA;AAAA,QACN,CAAA,+CAAA,EAAkD,CAAE,CAAA,IAAA,CAAK,KAAM,CAAA,EAAA,CAAA,EAAA,CAAA;AAAA,OACjE,CAAA;AAAA,KACK,MAAA;AACL,MAAQ,OAAA,CAAA,OAAA,CAAQ,YAAe,CAAA,EAAA,YAAA,EAAc,KAAK,CAAA,CAAA;AAAA,KACpD;AACA,IAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AACjB,IAAiB,gBAAA,CAAA,WAAA,EAAa,cAAc,YAAY,CAAA,CAAA;AAAA,GAC1D,CAAA;AAEA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,OAAA;AAAA,KACF;AACA,IAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AACjB,IAAI,IAAA,YAAA,IAAgB,IAAQ,IAAA,YAAA,IAAgB,IAAM,EAAA;AAChD,MAAiB,gBAAA,CAAA,WAAA,EAAa,cAAc,YAAY,CAAA,CAAA;AAAA,KAC1D;AAAA,GACF,CAAA;AAEA,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAa,EAAA,uBAAA;AAAA,GACX,GAAA,eAAA;AAAA,IACF,YAAA;AAAA,IACA,OAAA;AAAA,IACA,sBAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,cAAA,GAAiB,kBAAkB,iBAAiB,CAAA,CAAA;AAE1D,EAAA,MAAM,UAAa,GAAA,WAAA;AAAA,IACjB,CAAC,IAAmB,EAAA,MAAA,EAAgB,MAAmB,KAAA;AACrD,MAAI,IAAA,CAAC,iBAAqB,IAAA,IAAA,KAAS,QAAU,EAAA;AAC3C,QAAQ,OAAA,CAAA,IAAA;AAAA,UACN,CAAA,mEAAA,CAAA;AAAA,SACF,CAAA;AACA,QAAA,OAAA;AAAA,OACF;AACA,MAAA,cAAA,CAAe,IAAI,CAAA,CAAA;AACnB,MAAA,MAAA,GAAS,KAAM,CAAA,MAAA,EAAQ,CAAG,EAAA,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA;AACzC,MAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,QAAA,IAAI,OAAQ,CAAA,MAAA,GAAS,CAAK,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACzC,UAAA,OAAA;AAAA,SACF;AACA,QAAA,MAAA,GAAS,KAAM,CAAA,MAAA,EAAQ,CAAG,EAAA,OAAA,CAAQ,SAAS,CAAC,CAAA,CAAA;AAAA,OAC9C,MAAA,IAAW,SAAS,QAAU,EAAA;AAC5B,QAAS,MAAA,GAAA,CAAA,CAAA;AAAA,OACX;AACA,MAAA,eAAA,CAAgB,MAAM,CAAA,CAAA;AACtB,MAAA,eAAA,CAAgB,MAAM,CAAA,CAAA;AACtB,MAAa,YAAA,CAAA,IAAA,EAAM,QAAQ,MAAM,CAAA,CAAA;AACjC,MAAiB,gBAAA,CAAA,IAAA,EAAM,QAAQ,MAAM,CAAA,CAAA;AACrC,MAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,QAAA,cAAA,CAAe,YAAa,CAAA,EAAE,MAAQ,EAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,OAChD;AAAA,KACF;AAAA,IACA;AAAA,MACE,eAAA;AAAA,MACA,eAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAQ,CAAA,OAAA;AAAA,MACR,YAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAe,CAAA,YAAA;AAAA,MACf,WAAA;AAAA,MACA,iBAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,IAAO,GAAA,YAAA,CAAa,YAAc,EAAA,OAAA,EAAS,SAAS,CAAA,CAAA;AAE1D,EAAA,MAAM,eAAe,UAAa,GAAA,CAAA,CAAA;AAClC,EAAM,MAAA,aAAA,GAAgB,aAAa,cAAiB,GAAA,QAAA,CAAA;AACpD,EAAA,MAAM,iBAAiB,SAAY,GAAA,CAAA,CAAA;AAEnC,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,QAAgB,KAAkB,KAAA;AACjC,MAAA,MAAM,MAAM,IAAK,CAAA,MAAA,CAAA,CAAA;AACjB,MAAI,GAAA,CAAA,IAAA,CAAK,eAAe,KAAK,CAAA,CAAA;AAAA,KAC/B;AAAA,IACA,CAAC,IAAI,CAAA;AAAA,GACP,CAAA;AAEA,EAAM,MAAA,uBAAA,GAA0B,eAAgB,CAAA,IAAA,EAAM,YAAY,CAAA,CAAA;AAElE,EAAA,MAAM,aAA+B,GAAA,OAAA;AAAA,IACnC,OAAO;AAAA,MACL,YAAA;AAAA,MACA,SAAA;AAAA,MACA,uBAAA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,YAAc,EAAA,SAAA,EAAW,uBAAuB,CAAA;AAAA,GACnD,CAAA;AAEA,EAAA,MAAM,aAA+B,GAAA,OAAA;AAAA,IACnC,OAAO;AAAA,MACL,WAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,aAAa,UAAU,CAAA;AAAA,GAC1B,CAAA;AAEA,EAAA,MAAM,aAA+B,GAAA,OAAA;AAAA,IACnC,OAAO;AAAA,MACL,WAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,aAAe,EAAA,WAAA,EAAa,gBAAgB,WAAW,CAAA;AAAA,GACpE,CAAA;AAEA,EAAA,MAAM,CAAC,SAAA,EAAW,UAAU,CAAA,GAAI,SAAkB,KAAK,CAAA,CAAA;AAEvD,EAAA,MAAM,OAAU,GAAA,WAAA;AAAA,IACd,CAAC,KAA4C,KAAA;AAC3C,MAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,KACjB;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,MAAM,MAAS,GAAA,WAAA;AAAA,IACb,CAAC,KAA4C,KAAA;AAC3C,MAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAAA,KAClB;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,MAAM,aAA+B,GAAA,OAAA;AAAA,IACnC,OAAO;AAAA,MACL,SAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA,EAAmB,QAAQ,iBAAiB,CAAA;AAAA,KAC9C,CAAA;AAAA,IACA;AAAA,MACE,YAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,YAAsC,GAAA,CAC1C,QACA,EAAA,SAAA,EACA,OACG,KAAA;AACH,IAAI,IAAA,aAAA,IAAiB,cAAc,OAAS,EAAA;AAC1C,MAAc,aAAA,CAAA,QAAA,EAAU,WAAW,OAAO,CAAA,CAAA;AAAA,KAC5C;AAAA,GACF,CAAA;AAEA,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,2BAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,GACE,GAAA,aAAA;AAAA,IACF,UAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,iBAAuC,GAAA,OAAA;AAAA,IAC3C,OAAO;AAAA,MACL,UAAA;AAAA,MACA,2BAAA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,YAAY,2BAA2B,CAAA;AAAA,GAC1C,CAAA;AAEA,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,uBAAA,CAAwB,KAAK,CAAA,CAAA;AAC7B,IAAA,cAAA,CAAe,gBAAgB,KAAK,CAAA,CAAA;AAEpC,IAAA,MAAM,SAAS,KAAM,CAAA,MAAA,CAAA;AACrB,IAAI,IAAA;AACF,MAAA,MAAM,EAAE,IAAM,EAAA,QAAA,EAAU,WAAY,EAAA,GAAI,qBAAqB,MAAM,CAAA,CAAA;AACnE,MAAI,IAAA,IAAA,KAAS,QAAY,IAAA,CAAC,iBAAmB,EAAA;AAC3C,QAAA,OAAA;AAAA,OACF;AACA,MAAW,UAAA,CAAA,IAAA,EAAM,UAAU,WAAW,CAAA,CAAA;AAAA,aAC/B,CAAP,EAAA;AAAA,KAEF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,OAAgD,GAAA,WAAA;AAAA,IACpD,CAAC,KAAU,KAAA;AACT,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,QAAA,cAAA,CAAe,2BAA4B,EAAA,CAAA;AAAA,OAC7C;AAAA,KACF;AAAA,IACA,CAAC,eAAe,2BAA2B,CAAA;AAAA,GAC7C,CAAA;AAEA,EAAA,MAAM,kBAAqB,GAAA,WAAA;AAAA,IACzB,CAAC,KAAyC,KAAA;AACxC,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAQ,QAAA,GAAA;AAAA,QACD,KAAA,IAAA,CAAA;AAAA,QACA,KAAA,OAAA;AACH,UAAc,aAAA,EAAA,CAAA;AACd,UAAA,MAAA;AAAA,QACG,KAAA,WAAA;AACH,UAAA,aAAA,CAAc,EAAE,CAAA,CAAA;AAChB,UAAA,MAAA;AAAA,QACG,KAAA,QAAA;AACH,UAAA,IAAI,QAAU,EAAA;AACZ,YAAe,cAAA,EAAA,CAAA;AACf,YAAA,MAAA;AAAA,WACK,MAAA;AACL,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AAAA,QAAA;AAEA,UAAA,IACE,CAAC,QAAA,IACD,CAAC,KAAA,CAAM,WACP,CAAC,KAAA,CAAM,OACP,IAAA,CAAC,KAAM,CAAA,MAAA,IACP,WAAY,CAAA,IAAA,CAAK,GAAG,CACpB,EAAA;AACA,YAAA,aAAA,CAAc,GAAG,CAAA,CAAA;AAAA,WACZ,MAAA;AACL,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AAAA,OAAA;AAEJ,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,IACA,CAAC,aAAe,EAAA,QAAA,EAAU,cAAc,CAAA;AAAA,GAC1C,CAAA;AAEA,EAAA,MAAM,mBAAsB,GAAA,WAAA;AAAA,IAC1B,CAAC,KAAyC,KAAA;AACxC,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAQ,QAAA,GAAA;AAAA,QACD,KAAA,OAAA;AACH,UAAA,cAAA,CAAe,6BAA8B,CAAA;AAAA,YAC3C,QAAQ,YAAgB,IAAA,CAAA;AAAA,YACxB,QAAQ,YAAgB,IAAA,CAAA;AAAA,WACzB,CAAA,CAAA;AACD,UAAA,MAAA;AAAA,QACG,KAAA,GAAA;AACH,UAAA,IAAI,gBAAgB,MAAQ,EAAA;AAC1B,YAAA,IAAI,MAAM,OAAS,EAAA;AACjB,cAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,gBAAA,cAAA,CAAe,WAAY,CAAA;AAAA,kBACzB,KAAO,EAAA,EAAE,MAAQ,EAAA,CAAA,EAAG,QAAQ,YAAa,EAAA;AAAA,kBACzC,KAAK,EAAE,MAAA,EAAQ,OAAQ,CAAA,MAAA,EAAQ,QAAQ,YAAa,EAAA;AAAA,iBACrD,CAAA,CAAA;AAAA,eACH;AAAA,aACK,MAAA;AACL,cAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,gBAAW,UAAA,CAAA;AAAA,kBACT,QAAU,EAAA,YAAA;AAAA,kBACV,OAAS,EAAA,KAAA;AAAA,kBACT,WAAa,EAAA,IAAA;AAAA,kBACb,iBAAA,EAAmB,CAAC,KAAM,CAAA,QAAA;AAAA,iBAC3B,CAAA,CAAA;AAAA,eACH;AAAA,aACF;AACA,YAAA,MAAA;AAAA,WACK,MAAA;AACL,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AAAA,QACG,KAAA,GAAA;AACH,UAAI,IAAA,KAAA,CAAM,OAAW,IAAA,KAAA,CAAM,OAAS,EAAA;AAClC,YAAA,cAAA,CAAe,WAAY,CAAA;AAAA,cACzB,KAAO,EAAA,EAAE,MAAQ,EAAA,CAAA,EAAG,QAAQ,CAAE,EAAA;AAAA,cAC9B,KAAK,EAAE,MAAA,EAAQ,QAAQ,MAAQ,EAAA,MAAA,EAAQ,KAAK,MAAO,EAAA;AAAA,aACpD,CAAA,CAAA;AACD,YAAU,SAAA,EAAA,CAAA;AACV,YAAO,OAAA,IAAA,CAAA;AAAA,WACF,MAAA;AACL,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AAAA,QAAA;AAEA,UAAO,OAAA,KAAA,CAAA;AAAA,OAAA;AAEX,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,cAAe,CAAA,WAAA;AAAA,MACf,cAAe,CAAA,6BAAA;AAAA,MACf,UAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAQ,CAAA,MAAA;AAAA,MACR,IAAK,CAAA,MAAA;AAAA,MACL,WAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,mBAAsB,GAAA,WAAA;AAAA,IAC1B,CAAC,KAAyC,KAAA;AACxC,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAA,IACE,QAAQ,GACP,KAAA,KAAA,CAAM,WAAW,KAAM,CAAA,OAAA,CAAA,IACxB,eAAe,iBACf,EAAA;AACA,QAAA,MAAM,EAAE,KAAA,EAAO,GAAI,EAAA,GAAI,cAAe,CAAA,iBAAA,CAAA;AACtC,QAAA,MAAM,CAAI,GAAA,CAAC,CAAW,EAAA,CAAA,KAAc,CAAI,GAAA,CAAA,CAAA;AACxC,QAAM,MAAA,CAAC,MAAQ,EAAA,MAAM,CAAI,GAAA,CAAC,KAAM,CAAA,MAAA,EAAQ,GAAI,CAAA,MAAM,CAAE,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAC1D,QAAM,MAAA,CAAC,MAAQ,EAAA,MAAM,CAAI,GAAA,CAAC,KAAM,CAAA,MAAA,EAAQ,GAAI,CAAA,MAAM,CAAE,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAC1D,QAAA,MAAM,OAAiB,EAAC,CAAA;AACxB,QAAA,KAAA,IAAS,CAAI,GAAA,MAAA,EAAQ,CAAK,IAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACrC,UAAA,MAAM,MAAM,OAAQ,CAAA,CAAA,CAAA,CAAA;AACpB,UAAA,MAAM,UAAoB,EAAC,CAAA;AAC3B,UAAA,KAAA,IAASC,EAAI,GAAA,MAAA,EAAQA,EAAK,IAAA,MAAA,EAAQ,EAAEA,EAAG,EAAA;AACrC,YAAA,MAAM,MAAM,IAAKA,CAAAA,EAAAA,CAAAA,CAAAA;AACjB,YAAA,MAAM,SAAY,GAAA,GAAA,CAAI,IAAK,CAAA,KAAA,CAAM,SAAU,GAAG,CAAA,CAAA;AAC9C,YAAA,OAAA,CAAQ,KAAK,SAAS,CAAA,CAAA;AAAA,WACxB;AACA,UAAA,IAAA,CAAK,IAAK,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,SAC9B;AACA,QAAA,SAAA,CAAU,SAAU,CAAA,SAAA,CAAU,IAAK,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAC7C,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AACA,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,IACA,CAAC,eAAe,iBAAiB,CAAA;AAAA,GACnC,CAAA;AAEA,EAAA,MAAM,WAAW,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,SAAA,CAAU,SAAS,CAAC,CAAA,CAAA;AAEjD,EAAA,MAAM,oBAAuB,GAAA,WAAA;AAAA,IAC3B,CAAC,KAAyC,KAAA;AACxC,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAQ,QAAA,GAAA;AAAA,QACD,KAAA,WAAA;AACH,UAAA,UAAA,CAAW,WAAa,EAAA,YAAA,EAAA,CAAe,YAAgB,IAAA,CAAA,IAAK,CAAC,CAAA,CAAA;AAC7D,UAAA,MAAA;AAAA,QACG,KAAA,YAAA;AACH,UAAA,UAAA,CAAW,WAAa,EAAA,YAAA,EAAA,CAAe,YAAgB,IAAA,CAAA,IAAK,CAAC,CAAA,CAAA;AAC7D,UAAA,MAAA;AAAA,QACG,KAAA,SAAA;AACH,UAAI,IAAA,YAAA,KAAiB,KAAK,iBAAmB,EAAA;AAC3C,YAAW,UAAA,CAAA,QAAA,EAAU,GAAG,YAAY,CAAA,CAAA;AAAA,WAC/B,MAAA;AACL,YAAA,UAAA,CAAW,WAAc,EAAA,CAAA,YAAA,IAAgB,CAAK,IAAA,CAAA,EAAG,YAAY,CAAA,CAAA;AAAA,WAC/D;AACA,UAAA,MAAA;AAAA,QACG,KAAA,WAAA;AACH,UAAA,IAAI,gBAAgB,QAAU,EAAA;AAC5B,YAAW,UAAA,CAAA,MAAA,EAAQ,GAAG,YAAY,CAAA,CAAA;AAAA,WAC7B,MAAA;AACL,YAAA,UAAA,CAAW,WAAc,EAAA,CAAA,YAAA,IAAgB,CAAK,IAAA,CAAA,EAAG,YAAY,CAAA,CAAA;AAAA,WAC/D;AACA,UAAA,MAAA;AAAA,QACG,KAAA,QAAA;AACH,UAAI,IAAA,YAAA,KAAiB,KAAK,iBAAmB,EAAA;AAC3C,YAAW,UAAA,CAAA,QAAA,EAAU,GAAG,YAAY,CAAA,CAAA;AAAA,WAC/B,MAAA;AACL,YAAA,UAAA;AAAA,cACE,WAAA;AAAA,cAAA,CACC,gBAAgB,CAAK,IAAA,QAAA;AAAA,cACtB,YAAA;AAAA,aACF,CAAA;AAAA,WACF;AACA,UAAA,MAAA;AAAA,QACG,KAAA,UAAA;AACH,UAAA,IAAI,gBAAgB,QAAU,EAAA;AAC5B,YAAW,UAAA,CAAA,MAAA,EAAQ,GAAG,YAAY,CAAA,CAAA;AAAA,WAC7B,MAAA;AACL,YAAA,UAAA;AAAA,cACE,WAAA;AAAA,cAAA,CACC,gBAAgB,CAAK,IAAA,QAAA;AAAA,cACtB,YAAA;AAAA,aACF,CAAA;AAAA,WACF;AACA,UAAA,MAAA;AAAA,QACG,KAAA,MAAA;AACH,UAAI,IAAA,CAAC,MAAM,OAAS,EAAA;AAClB,YAAW,UAAA,CAAA,WAAA,EAAa,cAAc,CAAC,CAAA,CAAA;AAAA,WAClC,MAAA;AACL,YAAW,UAAA,CAAA,WAAA,EAAa,GAAG,CAAC,CAAA,CAAA;AAAA,WAC9B;AACA,UAAA,MAAA;AAAA,QACG,KAAA,KAAA;AACH,UAAI,IAAA,CAAC,MAAM,OAAS,EAAA;AAClB,YAAA,UAAA,CAAW,WAAa,EAAA,YAAA,EAAc,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAAA,WAChD,MAAA;AACL,YAAA,UAAA,CAAW,aAAa,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA;AAAA,WAC7D;AACA,UAAA,MAAA;AAAA,QACG,KAAA,KAAA;AACH,UAAA,IACE,CAAC,KAAA,CAAM,OACP,IAAA,CAAC,KAAM,CAAA,OAAA,IACP,CAAC,KAAA,CAAM,MACP,IAAA,QAAA,IACA,YAAgB,IAAA,IAAA,IAChB,gBAAgB,IAChB,EAAA;AACA,YAAI,IAAA,CAAC,MAAM,QAAU,EAAA;AACnB,cAAI,IAAA,YAAA,GAAe,IAAK,CAAA,MAAA,GAAS,CAAG,EAAA;AAClC,gBAAW,UAAA,CAAA,WAAA,EAAa,YAAc,EAAA,YAAA,GAAe,CAAC,CAAA,CAAA;AAAA,eACjD,MAAA;AACL,gBAAI,IAAA,YAAA,GAAe,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA;AACrC,kBAAW,UAAA,CAAA,WAAA,EAAa,YAAe,GAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,iBAC7C;AAAA,eACF;AAAA,aACK,MAAA;AACL,cAAA,IAAI,eAAe,CAAG,EAAA;AACpB,gBAAW,UAAA,CAAA,WAAA,EAAa,YAAc,EAAA,YAAA,GAAe,CAAC,CAAA,CAAA;AAAA,eACjD,MAAA;AACL,gBAAA,IAAI,eAAe,CAAG,EAAA;AACpB,kBAAA,UAAA,CAAW,WAAa,EAAA,YAAA,GAAe,CAAG,EAAA,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA;AAAA,iBAC3D;AAAA,eACF;AAAA,aACF;AAAA,WACK,MAAA;AACL,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AACA,UAAA,MAAA;AAAA,QACG,KAAA,OAAA;AACH,UAAA,IACE,QACA,IAAA,CAAC,KAAM,CAAA,OAAA,IACP,CAAC,KAAA,CAAM,OACP,IAAA,CAAC,KAAM,CAAA,MAAA,IACP,CAAC,KAAA,CAAM,QACP,EAAA;AACA,YAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,cAAW,UAAA,CAAA,WAAA,EAAa,GAAG,CAAC,CAAA,CAAA;AAAA,aACvB,MAAA;AACL,cAAW,UAAA,CAAA,WAAA,EAAa,YAAe,GAAA,CAAA,EAAG,YAAY,CAAA,CAAA;AAAA,aACxD;AAAA,WACK,MAAA;AACL,YAAO,OAAA,KAAA,CAAA;AAAA,WACT;AACA,UAAA,MAAA;AAAA,QAAA;AAEA,UAAO,OAAA,KAAA,CAAA;AAAA,OAAA;AAEX,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,UAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAK,CAAA,MAAA;AAAA,MACL,OAAQ,CAAA,MAAA;AAAA,MACR,iBAAA;AAAA,MACA,QAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,oBAAuB,GAAA,WAAA;AAAA,IAC3B,CAAC,KAAyC,KAAA;AACxC,MAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,MAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,QAAmB,kBAAA,EAAA,CAAA;AACnB,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AACA,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,SAAkD,GAAA,WAAA;AAAA,IACtD,CAAC,KAAU,KAAA;AACT,MAAI,IAAA,YAAA,IAAgB,KAAa,CAAA,IAAA,YAAA,IAAgB,KAAW,CAAA,EAAA;AAC1D,QAAA,MAAM,SAAS,IAAK,CAAA,YAAA,CAAA,CAAA;AACpB,QAAI,IAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,SAAW,EAAA;AAC/B,UAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,SAAU,CAAA,KAAA,EAAO,YAAY,CAAA,CAAA;AAAA,SACjD;AAAA,OACF;AACA,MAAI,IAAA,CAAC,KAAM,CAAA,oBAAA,EAAwB,EAAA;AAIjC,QAAA;AAAA,UACE,oBAAA;AAAA,UACA,mBAAA;AAAA,UACA,mBAAA;AAAA,UACA,kBAAA;AAAA,UACA,oBAAA;AAAA,SACF,CAAE,IAAK,CAAA,CAAC,OAAY,KAAA;AAClB,UAAA,OAAO,QAAQ,KAAK,CAAA,CAAA;AAAA,SACrB,CAAA,CAAA;AAAA,OACH;AAAA,KACF;AAAA,IACA;AAAA,MACE,oBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,kBAAA;AAAA,MACA,oBAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,gBAAqC,GAAA,OAAA;AAAA,IACzC,OAAO;AAAA,MACL,UAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,mBAAmB,cAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,iBAAA;AAAA,KACrC,CAAA;AAAA,IACA;AAAA,MACE,UAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,iBAAA;AAAA,KAClB;AAAA,GACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,uBAAyB,EAAA;AAC3B,MAAwB,uBAAA,CAAA,SAAA,CAAU,KAAO,EAAA,SAAA,CAAU,GAAG,CAAA,CAAA;AAAA,KACxD;AAAA,GACC,EAAA,CAAC,uBAAyB,EAAA,SAAS,CAAC,CAAA,CAAA;AAEvC,EACE,uBAAA,GAAA,CAAC,YAAY,QAAZ,EAAA;AAAA,IAAqB,KAAO,EAAA,YAAA;AAAA,IAC3B,QAAA,kBAAA,GAAA,CAAC,cAAc,QAAd,EAAA;AAAA,MAAuB,KAAO,EAAA,aAAA;AAAA,MAC7B,QAAA,kBAAA,GAAA,CAAC,iBAAiB,QAAjB,EAAA;AAAA,QAA0B,KAAO,EAAA,gBAAA;AAAA,QAChC,QAAA,kBAAA,GAAA,CAAC,kBAAkB,QAAlB,EAAA;AAAA,UAA2B,KAAO,EAAA,iBAAA;AAAA,UACjC,QAAA,kBAAA,GAAA,CAAC,cAAc,QAAd,EAAA;AAAA,YAAuB,KAAO,EAAA,aAAA;AAAA,YAC7B,QAAA,kBAAA,GAAA,CAAC,cAAc,QAAd,EAAA;AAAA,cAAuB,KAAO,EAAA,aAAA;AAAA,cAC7B,QAAA,kBAAA,GAAA,CAAC,cAAc,QAAd,EAAA;AAAA,gBAAuB,KAAO,EAAA,aAAA;AAAA,gBAC7B,QAAA,kBAAA,IAAA,CAAC,kBAAkB,QAAlB,EAAA;AAAA,kBAA2B,KAAO,EAAA,iBAAA;AAAA,kBAChC,QAAA,EAAA;AAAA,oBAAM,KAAA,CAAA,QAAA;AAAA,oCACN,IAAA,CAAA,KAAA,EAAA;AAAA,sBACC,SAAW,EAAA,IAAA;AAAA,wBACT,YAAa,EAAA;AAAA,wBACb;AAAA,0BACE,CAAC,YAAa,CAAA,OAAO,CAAI,GAAA,KAAA;AAAA,0BACzB,CAAC,YAAa,CAAA,kBAAkB,CAAI,GAAA,gBAAA;AAAA,0BACpC,CAAC,YAAa,CAAA,kBAAkB,CAAI,GAAA,gBAAA;AAAA,0BACpC,CAAC,YAAA,CAAa,mBAAmB,CAAA,GAC/B,OAAY,KAAA,SAAA;AAAA,0BACd,CAAC,YAAA,CAAa,qBAAqB,CAAA,GACjC,OAAY,KAAA,WAAA;AAAA,yBAChB;AAAA,wBACA,SAAA;AAAA,uBACF;AAAA,sBACA,KAAO,EAAA,SAAA;AAAA,sBACP,GAAK,EAAA,OAAA;AAAA,sBACL,SAAA;AAAA,sBACA,OAAA;AAAA,sBACA,WAAA;AAAA,sBACA,OAAA;AAAA,sBACA,MAAA;AAAA,sBACA,WAAU,EAAA,WAAA;AAAA,sBACV,IAAK,EAAA,MAAA;AAAA,sBACL,iBAAe,IAAK,CAAA,MAAA;AAAA,sBACpB,iBAAe,QAAW,GAAA,YAAA;AAAA,sBAC1B,wBAAsB,gBAAqB,KAAA,OAAA;AAAA,sBAE3C,QAAA,EAAA;AAAA,wCAAC,GAAA,CAAA,WAAA,EAAA;AAAA,0BAAY,YAAA;AAAA,yBAA4B,CAAA;AAAA,wCACxC,GAAA,CAAA,UAAA,EAAA;AAAA,0BACC,YAAA;AAAA,0BACA,UAAA;AAAA,0BACA,SAAA;AAAA,0BACA,YAAA;AAAA,0BACA,MAAA;AAAA,0BACA,WAAa,EAAA,aAAA;AAAA,0BACb,MAAA;AAAA,0BACA,QAAA;AAAA,0BACA,SAAA;AAAA,0BACA,OAAA;AAAA,0BACA,SAAA;AAAA,yBACF,CAAA;AAAA,wBACC,CAAC,UAAA,IAAc,QAAS,CAAA,MAAA,GAAS,qBAC/B,GAAA,CAAA,WAAA,EAAA;AAAA,0BACC,OAAA;AAAA,0BACA,OAAS,EAAA,QAAA;AAAA,0BACT,YAAc,EAAA,UAAA;AAAA,0BACd,WAAa,EAAA,YAAA;AAAA,0BACb,YAAc,EAAA,cAAA;AAAA,yBAChB,CAAA;AAAA,wBAED,CAAC,8BACC,GAAA,CAAA,OAAA,EAAA;AAAA,0BACC,OAAS,EAAA,kBAAA;AAAA,0BACT,YAAc,EAAA,UAAA;AAAA,0BACd,MAAA;AAAA,0BACA,OAAA;AAAA,0BACA,MAAA;AAAA,0BACA,YAAc,EAAA,cAAA;AAAA,yBAChB,CAAA;AAAA,wBAED,CAAC,UAAA,IAAc,SAAU,CAAA,MAAA,GAAS,qBAChC,GAAA,CAAA,YAAA,EAAA;AAAA,0BACC,OAAA;AAAA,0BACA,OAAS,EAAA,SAAA;AAAA,0BACT,YAAc,EAAA,WAAA;AAAA,0BACd,UAAY,EAAA,aAAA;AAAA,0BACZ,YAAc,EAAA,cAAA;AAAA,yBAChB,CAAA;AAAA,wBAED,QAAA,CAAS,MAAS,GAAA,CAAA,oBAChB,GAAA,CAAA,QAAA,EAAA;AAAA,0BACC,OAAA;AAAA,0BACA,OAAA;AAAA,0BACA,OAAS,EAAA,QAAA;AAAA,0BACT,IAAA;AAAA,0BACA,WAAa,EAAA,YAAA;AAAA,0BACb,eAAiB,EAAA,WAAA;AAAA,0BACjB,kBAAoB,EAAA,cAAA;AAAA,0BACpB,KAAA;AAAA,yBACF,CAAA;AAAA,wCAED,GAAA,CAAA,UAAA,EAAA;AAAA,0BACC,SAAA;AAAA,0BACA,OAAA;AAAA,0BACA,OAAS,EAAA,kBAAA;AAAA,0BACT,IAAA;AAAA,0BACA,eAAiB,EAAA,WAAA;AAAA,0BACjB,kBAAoB,EAAA,cAAA;AAAA,0BACpB,MAAA;AAAA,0BACA,KAAA;AAAA,yBACF,CAAA;AAAA,wBACC,SAAA,CAAU,MAAS,GAAA,CAAA,oBACjB,GAAA,CAAA,SAAA,EAAA;AAAA,0BACC,QAAA;AAAA,0BACA,OAAA;AAAA,0BACA,OAAS,EAAA,SAAA;AAAA,0BACT,IAAA;AAAA,0BACA,UAAY,EAAA,aAAA;AAAA,0BACZ,eAAiB,EAAA,WAAA;AAAA,0BACjB,kBAAoB,EAAA,cAAA;AAAA,0BACpB,KAAA;AAAA,yBACF,CAAA;AAAA,wCAED,GAAA,CAAA,gBAAA,EAAA;AAAA,0BAAiB,GAAG,YAAc,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,CAAA;AAAA,yBAAG,CAAA;AAAA,wCACrC,GAAA,CAAA,WAAA,EAAA;AAAA,0BACC,OAAS,EAAA,IAAA;AAAA,0BACT,IAAA;AAAA,0BACA,SAAA;AAAA,0BACA,KAAA;AAAA,yBACF,CAAA;AAAA,uBAAA;AAAA,qBACF,CAAA;AAAA,mBAAA;AAAA,iBACF,CAAA;AAAA,eACF,CAAA;AAAA,aACF,CAAA;AAAA,WACF,CAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -70,6 +70,18 @@ function NumericCellEditor(props) {
|
|
|
70
70
|
initialSelectionRef.current = true;
|
|
71
71
|
}
|
|
72
72
|
}, [inputRef.current]);
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
const input = inputRef.current;
|
|
75
|
+
const focusOut = (event) => {
|
|
76
|
+
if (!(input == null ? void 0 : input.contains(event.target))) {
|
|
77
|
+
endEditMode(editorText);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
document == null ? void 0 : document.addEventListener("mousedown", focusOut, true);
|
|
81
|
+
return () => {
|
|
82
|
+
document == null ? void 0 : document.removeEventListener("mousedown", focusOut, true);
|
|
83
|
+
};
|
|
84
|
+
}, [endEditMode, editorText]);
|
|
73
85
|
return /* @__PURE__ */ jsxs(Cell, {
|
|
74
86
|
separator: column == null ? void 0 : column.separator,
|
|
75
87
|
className: "saltGridNumericCellEditor",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumericColumn.js","sources":["../src/NumericColumn.tsx"],"sourcesContent":["import { GridCellValueProps, GridColumn, GridColumnProps } from \"./GridColumn\";\nimport \"./NumericColumn.css\";\nimport { GridColumnModel, GridRowModel } from \"./Grid\";\nimport {\n ChangeEventHandler,\n KeyboardEventHandler,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useEditorContext } from \"./EditorContext\";\nimport { CornerTag } from \"./CornerTag\";\nimport { Cell } from \"./internal\";\n\nexport interface NumericColumnProps<T> extends GridColumnProps<T> {\n precision: number;\n}\n\nfunction isNumber(value: any): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function NumericCellValue<T>(props: GridCellValueProps<T>) {\n const { column, value } = props;\n const columnProps = column.info.props as NumericColumnProps<T>;\n const { precision } = columnProps;\n const text = isNumber(value) ? value.toFixed(precision) : \"\";\n return <div className=\"saltGridNumericCellValue\">{text}</div>;\n}\n\nexport interface NumericEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n children?: ReactNode;\n}\n\nexport function NumericCellEditor<T>(props: NumericEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data)\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n return (\n <Cell separator={column?.separator} className=\"saltGridNumericCellEditor\">\n <div className=\"saltGridNumericCellEditor-inputContainer\">\n <input\n ref={inputRef}\n data-testid=\"grid-cell-editor-input\"\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </Cell>\n );\n}\n\nexport function NumericColumn<T>(props: NumericColumnProps<T>) {\n return (\n <GridColumn\n {...props}\n align={\"right\"}\n cellValueComponent={NumericCellValue}\n >\n {props.children}\n </GridColumn>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NumericColumn.js","sources":["../src/NumericColumn.tsx"],"sourcesContent":["import { GridCellValueProps, GridColumn, GridColumnProps } from \"./GridColumn\";\nimport \"./NumericColumn.css\";\nimport { GridColumnModel, GridRowModel } from \"./Grid\";\nimport {\n ChangeEventHandler,\n KeyboardEventHandler,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useEditorContext } from \"./EditorContext\";\nimport { CornerTag } from \"./CornerTag\";\nimport { Cell } from \"./internal\";\n\nexport interface NumericColumnProps<T> extends GridColumnProps<T> {\n precision: number;\n}\n\nfunction isNumber(value: any): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function NumericCellValue<T>(props: GridCellValueProps<T>) {\n const { column, value } = props;\n const columnProps = column.info.props as NumericColumnProps<T>;\n const { precision } = columnProps;\n const text = isNumber(value) ? value.toFixed(precision) : \"\";\n return <div className=\"saltGridNumericCellValue\">{text}</div>;\n}\n\nexport interface NumericEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n children?: ReactNode;\n}\n\nexport function NumericCellEditor<T>(props: NumericEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data)\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <Cell separator={column?.separator} className=\"saltGridNumericCellEditor\">\n <div className=\"saltGridNumericCellEditor-inputContainer\">\n <input\n ref={inputRef}\n data-testid=\"grid-cell-editor-input\"\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </Cell>\n );\n}\n\nexport function NumericColumn<T>(props: NumericColumnProps<T>) {\n return (\n <GridColumn\n {...props}\n align={\"right\"}\n cellValueComponent={NumericCellValue}\n >\n {props.children}\n </GridColumn>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
2
|
+
import { Checkbox } from '@salt-ds/core';
|
|
3
3
|
import { useSelectionContext } from './SelectionContext.js';
|
|
4
4
|
import './CheckboxCell.css.js';
|
|
5
5
|
import { useCursorContext } from './CursorContext.js';
|
|
@@ -18,7 +18,7 @@ function RowSelectionCheckboxCellValue(props) {
|
|
|
18
18
|
return /* @__PURE__ */ jsx("div", {
|
|
19
19
|
className: "saltGridCheckboxContainer",
|
|
20
20
|
onMouseDown,
|
|
21
|
-
children: /* @__PURE__ */ jsx(
|
|
21
|
+
children: /* @__PURE__ */ jsx(Checkbox, {
|
|
22
22
|
"data-testid": "grid-row-selection-checkbox",
|
|
23
23
|
inputProps: {
|
|
24
24
|
"aria-label": "Select Row",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowSelectionCheckboxCellValue.js","sources":["../src/RowSelectionCheckboxCellValue.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"RowSelectionCheckboxCellValue.js","sources":["../src/RowSelectionCheckboxCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\nimport \"./CheckboxCell.css\";\nimport { MouseEventHandler } from \"react\";\nimport { useCursorContext } from \"./CursorContext\";\n\nexport function RowSelectionCheckboxCellValue<T>(props: GridCellValueProps<T>) {\n const { row, column, isFocused } = props;\n const { selRowIdxs, selectRows } = useSelectionContext();\n const { moveCursor } = useCursorContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n selectRows({ rowIndex: row.index, incremental: true });\n moveCursor(\"body\", row.index, column.index);\n event.preventDefault();\n event.stopPropagation();\n };\n\n return (\n <div className=\"saltGridCheckboxContainer\" onMouseDown={onMouseDown}>\n <Checkbox\n data-testid=\"grid-row-selection-checkbox\"\n inputProps={{\n \"aria-label\": \"Select Row\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isSelected}\n />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;AAOO,SAAS,8BAAiC,KAA8B,EAAA;AAC7E,EAAA,MAAM,EAAE,GAAA,EAAK,MAAQ,EAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AACnC,EAAA,MAAM,EAAE,UAAA,EAAY,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AACvD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,gBAAiB,EAAA,CAAA;AAExC,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAE3C,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,UAAA,CAAW,EAAE,QAAU,EAAA,GAAA,CAAI,KAAO,EAAA,WAAA,EAAa,MAAM,CAAA,CAAA;AACrD,IAAA,UAAA,CAAW,MAAQ,EAAA,GAAA,CAAI,KAAO,EAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAC1C,IAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,2BAAA;AAAA,IAA4B,WAAA;AAAA,IACzC,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,MACC,aAAY,EAAA,6BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA,UAAA;AAAA,KACX,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useSelectionContext } from './SelectionContext.js';
|
|
3
|
-
import {
|
|
3
|
+
import { Checkbox } from '@salt-ds/core';
|
|
4
4
|
import './CheckboxCell.css.js';
|
|
5
5
|
|
|
6
6
|
function RowSelectionCheckboxHeaderCellValue(props) {
|
|
@@ -28,7 +28,7 @@ function RowSelectionCheckboxHeaderCellValue(props) {
|
|
|
28
28
|
onMouseDown: onMousedown,
|
|
29
29
|
className: "saltGridCheckboxContainer",
|
|
30
30
|
onKeyDown,
|
|
31
|
-
children: /* @__PURE__ */ jsx(
|
|
31
|
+
children: /* @__PURE__ */ jsx(Checkbox, {
|
|
32
32
|
"data-testid": "grid-row-select-all-checkbox",
|
|
33
33
|
inputProps: {
|
|
34
34
|
"aria-label": "Select All",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowSelectionCheckboxHeaderCellValue.js","sources":["../src/RowSelectionCheckboxHeaderCellValue.tsx"],"sourcesContent":["import { useSelectionContext } from \"./SelectionContext\";\nimport { KeyboardEventHandler, MouseEventHandler } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"RowSelectionCheckboxHeaderCellValue.js","sources":["../src/RowSelectionCheckboxHeaderCellValue.tsx"],"sourcesContent":["import { useSelectionContext } from \"./SelectionContext\";\nimport { KeyboardEventHandler, MouseEventHandler } from \"react\";\nimport { Checkbox } from \"@salt-ds/core\";\nimport \"./CheckboxCell.css\";\nimport { GridHeaderValueProps } from \"./GridColumn\";\n\nexport function RowSelectionCheckboxHeaderCellValue<T>(\n props: GridHeaderValueProps<T>\n) {\n const { isFocused } = props;\n\n const { selectAll, unselectAll, isAllSelected, isAnySelected } =\n useSelectionContext();\n\n const onMousedown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \" \") {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n return (\n <div\n onMouseDown={onMousedown}\n className=\"saltGridCheckboxContainer\"\n onKeyDown={onKeyDown}\n >\n <Checkbox\n data-testid=\"grid-row-select-all-checkbox\"\n inputProps={{\n \"aria-label\": \"Select All\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isAllSelected}\n indeterminate={!isAllSelected && isAnySelected}\n />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;AAMO,SAAS,oCACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA,CAAA;AAEtB,EAAA,MAAM,EAAE,SAAW,EAAA,WAAA,EAAa,aAAe,EAAA,aAAA,KAC7C,mBAAoB,EAAA,CAAA;AAEtB,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,IAAI,aAAe,EAAA;AACjB,MAAY,WAAA,EAAA,CAAA;AAAA,KACP,MAAA;AACL,MAAU,SAAA,EAAA,CAAA;AAAA,KACZ;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,SAAA,GAAkD,CAAC,KAAU,KAAA;AACjE,IAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,MAAA,IAAI,aAAe,EAAA;AACjB,QAAY,WAAA,EAAA,CAAA;AAAA,OACP,MAAA;AACL,QAAU,SAAA,EAAA,CAAA;AAAA,OACZ;AACA,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,KACxB;AAAA,GACF,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IACC,WAAa,EAAA,WAAA;AAAA,IACb,SAAU,EAAA,2BAAA;AAAA,IACV,SAAA;AAAA,IAEA,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,MACC,aAAY,EAAA,8BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA,aAAA;AAAA,MACT,aAAA,EAAe,CAAC,aAAiB,IAAA,aAAA;AAAA,KACnC,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowSelectionRadioCellValue.js","sources":["../src/RowSelectionRadioCellValue.tsx"],"sourcesContent":["import { RadioButton } from \"@salt-ds/
|
|
1
|
+
{"version":3,"file":"RowSelectionRadioCellValue.js","sources":["../src/RowSelectionRadioCellValue.tsx"],"sourcesContent":["import { RadioButton } from \"@salt-ds/core\";\nimport { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\nimport \"./CheckboxCell.css\";\n\nexport function RowSelectionRadioCellValue<T>(props: GridCellValueProps<T>) {\n const { row, isFocused } = props;\n const { selRowIdxs } = useSelectionContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n return (\n <div className=\"saltGridCheckboxContainer\">\n <RadioButton\n checked={isSelected}\n data-testid=\"grid-row-selection-radiobox\"\n tabIndex={isFocused ? 0 : -1}\n />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;AAKO,SAAS,2BAA8B,KAA8B,EAAA;AAC1E,EAAM,MAAA,EAAE,GAAK,EAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAC3B,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AAE3C,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAE3C,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,2BAAA;AAAA,IACb,QAAC,kBAAA,GAAA,CAAA,WAAA,EAAA;AAAA,MACC,OAAS,EAAA,UAAA;AAAA,MACT,aAAY,EAAA,6BAAA;AAAA,MACZ,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,KAC5B,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowSelectionRadioHeaderCell.js","sources":["../src/RowSelectionRadioHeaderCell.tsx"],"sourcesContent":["import { AutoSizeHeaderCell } from \"./HeaderCell\";\nimport { RadioButtonIcon } from \"@salt-ds/
|
|
1
|
+
{"version":3,"file":"RowSelectionRadioHeaderCell.js","sources":["../src/RowSelectionRadioHeaderCell.tsx"],"sourcesContent":["import { AutoSizeHeaderCell } from \"./HeaderCell\";\nimport { RadioButtonIcon } from \"@salt-ds/core\";\nimport \"./CheckboxCell.css\";\nimport { clsx } from \"clsx\";\nimport { HeaderCellProps } from \"./GridColumn\";\n\nexport function RowSelectionRadioHeaderCell<T>(props: HeaderCellProps<T>) {\n return (\n <AutoSizeHeaderCell {...props}>\n <div className={clsx(\"saltGridCheckboxContainer\", \"saltGrid-hidden\")}>\n <RadioButtonIcon />\n </div>\n </AutoSizeHeaderCell>\n );\n}\n"],"names":[],"mappings":";;;;;;AAMO,SAAS,4BAA+B,KAA2B,EAAA;AACxE,EAAA,uBACG,GAAA,CAAA,kBAAA,EAAA;AAAA,IAAoB,GAAG,KAAA;AAAA,IACtB,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,MAAI,SAAA,EAAW,IAAK,CAAA,2BAAA,EAA6B,iBAAiB,CAAA;AAAA,MACjE,8BAAC,eAAgB,EAAA,EAAA,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -57,6 +57,18 @@ function TextCellEditor(props) {
|
|
|
57
57
|
initialSelectionRef.current = true;
|
|
58
58
|
}
|
|
59
59
|
}, [inputRef.current]);
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
const input = inputRef.current;
|
|
62
|
+
const focusOut = (event) => {
|
|
63
|
+
if (!(input == null ? void 0 : input.contains(event.target))) {
|
|
64
|
+
endEditMode(editorText);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
document == null ? void 0 : document.addEventListener("mousedown", focusOut, true);
|
|
68
|
+
return () => {
|
|
69
|
+
document == null ? void 0 : document.removeEventListener("mousedown", focusOut, true);
|
|
70
|
+
};
|
|
71
|
+
}, [endEditMode, editorText]);
|
|
60
72
|
return /* @__PURE__ */ jsxs(Cell, {
|
|
61
73
|
separator: column == null ? void 0 : column.separator,
|
|
62
74
|
className: withBaseName(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextCellEditor.js","sources":["../src/TextCellEditor.tsx"],"sourcesContent":["import {\n ChangeEventHandler,\n KeyboardEventHandler,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport \"./TextCellEditor.css\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { useEditorContext } from \"./EditorContext\";\nimport { GridColumnModel, GridRowModel } from \"./Grid\";\nimport { CornerTag } from \"./CornerTag\";\nimport { Cell } from \"./internal\";\n\nconst withBaseName = makePrefixer(\"saltGridTextCellEditor\");\n\nexport interface TextCellEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function TextCellEditor<T>(props: TextCellEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data)\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n return (\n <Cell separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"inputContainer\")}>\n <input\n data-testid=\"grid-cell-editor-input\"\n ref={inputRef}\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </Cell>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAM,YAAA,GAAe,aAAa,wBAAwB,CAAA,CAAA;AAOnD,SAAS,eAAkB,KAA+B,EAAA;AAC/D,EAAM,MAAA,EAAE,MAAQ,EAAA,GAAA,EAAQ,GAAA,KAAA,CAAA;AACxB,EAAM,MAAA,QAAA,GAAW,OAAyB,IAAI,CAAA,CAAA;AAE9C,EAAA,MAAM,EAAE,WAAA,EAAa,cAAgB,EAAA,WAAA,KAAgB,gBAAiB,EAAA,CAAA;AAEtE,EAAM,MAAA,CAAC,UAAY,EAAA,aAAa,CAAI,GAAA,QAAA;AAAA,IAClC,WAAA,IAAe,OAAO,WAAc,GAAA,MAAA,CAAQ,KAAK,KAAM,CAAA,QAAA,CAAU,IAAK,IAAI,CAAA;AAAA,GAC5E,CAAA;AAEA,EAAA,MAAM,mBAAsB,GAAA,MAAA,CAAO,CAAC,CAAC,WAAW,CAAA,CAAA;AAEhD,EAAM,MAAA,QAAA,GAAiD,CAAC,CAAM,KAAA;AAC5D,IAAc,aAAA,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAM,MAAA,SAAA,GAAoD,CAAC,KAAU,KAAA;AACnE,IAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,MAAA,WAAA,CAAY,UAAU,CAAA,CAAA;AACtB,MAAA,OAAA;AAAA,KACF;AACA,IAAI,IAAA,KAAA,CAAM,QAAQ,QAAU,EAAA;AAC1B,MAAe,cAAA,EAAA,CAAA;AACf,MAAA,OAAA;AAAA,KACF;AACA,IAAI,IAAA,KAAA,CAAM,QAAQ,KAAO,EAAA;AACvB,MAAA,WAAA,CAAY,UAAU,CAAA,CAAA;AACtB,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,OAAA;AAAA,KACF;AACA,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAS,CAAA,OAAA,IAAW,CAAC,mBAAA,CAAoB,OAAS,EAAA;AACpD,MAAA,QAAA,CAAS,QAAQ,MAAO,EAAA,CAAA;AACxB,MAAA,mBAAA,CAAoB,OAAU,GAAA,IAAA,CAAA;AAAA,KAChC;AAAA,GACC,EAAA,CAAC,QAAS,CAAA,OAAO,CAAC,CAAA,CAAA;AAErB,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA;AAAA,IAAK,WAAW,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,SAAA;AAAA,IAAW,WAAW,YAAa,EAAA;AAAA,IAC1D,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAA,EAAW,aAAa,gBAAgB,CAAA;AAAA,QAC3C,QAAC,kBAAA,GAAA,CAAA,OAAA,EAAA;AAAA,UACC,aAAY,EAAA,wBAAA;AAAA,UACZ,GAAK,EAAA,QAAA;AAAA,UACL,SAAW,EAAA,IAAA;AAAA,UACX,KAAO,EAAA,UAAA;AAAA,UACP,QAAA;AAAA,UACA,SAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,0BACC,SAAU,EAAA,EAAA,CAAA;AAAA,KAAA;AAAA,GACb,CAAA,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"TextCellEditor.js","sources":["../src/TextCellEditor.tsx"],"sourcesContent":["import {\n ChangeEventHandler,\n KeyboardEventHandler,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport \"./TextCellEditor.css\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { useEditorContext } from \"./EditorContext\";\nimport { GridColumnModel, GridRowModel } from \"./Grid\";\nimport { CornerTag } from \"./CornerTag\";\nimport { Cell } from \"./internal\";\n\nconst withBaseName = makePrefixer(\"saltGridTextCellEditor\");\n\nexport interface TextCellEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function TextCellEditor<T>(props: TextCellEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data)\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <Cell separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"inputContainer\")}>\n <input\n data-testid=\"grid-cell-editor-input\"\n ref={inputRef}\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </Cell>\n );\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salt-ds/data-grid",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4-alpha.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist-cjs/packages/grid/src/index.js",
|
|
6
6
|
"sideEffects": [
|
|
@@ -18,14 +18,15 @@
|
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"publishConfig": {
|
|
21
|
-
"directory": "../../dist/salt-ds-data-grid"
|
|
21
|
+
"directory": "../../dist/salt-ds-data-grid",
|
|
22
|
+
"tag": "next"
|
|
22
23
|
},
|
|
23
24
|
"module": "dist-es/packages/grid/src/index.js",
|
|
24
25
|
"typings": "dist-types/index.d.ts",
|
|
25
26
|
"dependencies": {
|
|
26
27
|
"clsx": "^1.2.1",
|
|
27
|
-
"@salt-ds/core": "1.
|
|
28
|
-
"@salt-ds/lab": "1.0.0-alpha.
|
|
28
|
+
"@salt-ds/core": "1.5.0",
|
|
29
|
+
"@salt-ds/lab": "1.0.0-alpha.5"
|
|
29
30
|
},
|
|
30
31
|
"files": [
|
|
31
32
|
"dist-cjs",
|