@vuu-ui/vuu-table 2.1.18 → 2.1.19-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +12 -14
- package/types/VirtualColSpan.d.ts +2 -2
- package/types/cell-renderers/toggle-cell/ToggleCell.d.ts +1 -1
- package/types/useTable.d.ts +3 -3
- package/cjs/CellFocusState.js +0 -45
- package/cjs/CellFocusState.js.map +0 -1
- package/cjs/Row.js +0 -116
- package/cjs/Row.js.map +0 -1
- package/cjs/Table.css.js +0 -6
- package/cjs/Table.css.js.map +0 -1
- package/cjs/Table.js +0 -455
- package/cjs/Table.js.map +0 -1
- package/cjs/VirtualColSpan.js +0 -19
- package/cjs/VirtualColSpan.js.map +0 -1
- package/cjs/applyHighlighting.js +0 -33
- package/cjs/applyHighlighting.js.map +0 -1
- package/cjs/bulk-edit/BulkEditPanel.css.js +0 -6
- package/cjs/bulk-edit/BulkEditPanel.css.js.map +0 -1
- package/cjs/bulk-edit/BulkEditPanel.js +0 -107
- package/cjs/bulk-edit/BulkEditPanel.js.map +0 -1
- package/cjs/bulk-edit/ColumnCascadingUpdateEditor.css.js +0 -6
- package/cjs/bulk-edit/ColumnCascadingUpdateEditor.css.js.map +0 -1
- package/cjs/bulk-edit/ColumnCascadingUpdateEditor.js +0 -80
- package/cjs/bulk-edit/ColumnCascadingUpdateEditor.js.map +0 -1
- package/cjs/bulk-edit/InsertNewRowEditor.css.js +0 -6
- package/cjs/bulk-edit/InsertNewRowEditor.css.js.map +0 -1
- package/cjs/bulk-edit/InsertNewRowEditor.js +0 -80
- package/cjs/bulk-edit/InsertNewRowEditor.js.map +0 -1
- package/cjs/bulk-edit/useBulkEditPanel.js +0 -70
- package/cjs/bulk-edit/useBulkEditPanel.js.map +0 -1
- package/cjs/bulk-edit/useColumnCascadingEditor.js +0 -143
- package/cjs/bulk-edit/useColumnCascadingEditor.js.map +0 -1
- package/cjs/cell-block/CellBlock.css.js +0 -6
- package/cjs/cell-block/CellBlock.css.js.map +0 -1
- package/cjs/cell-block/CellBlock.js +0 -45
- package/cjs/cell-block/CellBlock.js.map +0 -1
- package/cjs/cell-block/cellblock-utils.js +0 -125
- package/cjs/cell-block/cellblock-utils.js.map +0 -1
- package/cjs/cell-block/useCellBlockSelection.js +0 -257
- package/cjs/cell-block/useCellBlockSelection.js.map +0 -1
- package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -6
- package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
- package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +0 -67
- package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
- package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -6
- package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
- package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -51
- package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
- package/cjs/cell-renderers/input-cell/InputCell.css.js +0 -6
- package/cjs/cell-renderers/input-cell/InputCell.css.js.map +0 -1
- package/cjs/cell-renderers/input-cell/InputCell.js +0 -63
- package/cjs/cell-renderers/input-cell/InputCell.js.map +0 -1
- package/cjs/cell-renderers/input-cell/useInputCell.js +0 -211
- package/cjs/cell-renderers/input-cell/useInputCell.js.map +0 -1
- package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js +0 -6
- package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
- package/cjs/cell-renderers/toggle-cell/ToggleCell.js +0 -66
- package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
- package/cjs/column-header-pill/ColumnHeaderPill.css.js +0 -6
- package/cjs/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
- package/cjs/column-header-pill/ColumnHeaderPill.js +0 -53
- package/cjs/column-header-pill/ColumnHeaderPill.js.map +0 -1
- package/cjs/column-header-pill/GroupColumnPill.css.js +0 -6
- package/cjs/column-header-pill/GroupColumnPill.css.js.map +0 -1
- package/cjs/column-header-pill/GroupColumnPill.js +0 -29
- package/cjs/column-header-pill/GroupColumnPill.js.map +0 -1
- package/cjs/column-header-pill/SortIndicator.css.js +0 -6
- package/cjs/column-header-pill/SortIndicator.css.js.map +0 -1
- package/cjs/column-header-pill/SortIndicator.js +0 -27
- package/cjs/column-header-pill/SortIndicator.js.map +0 -1
- package/cjs/column-resizing/ColumnResizer.css.js +0 -6
- package/cjs/column-resizing/ColumnResizer.css.js.map +0 -1
- package/cjs/column-resizing/ColumnResizer.js +0 -82
- package/cjs/column-resizing/ColumnResizer.js.map +0 -1
- package/cjs/column-resizing/useTableColumnResize.js +0 -55
- package/cjs/column-resizing/useTableColumnResize.js.map +0 -1
- package/cjs/data-row/DataRow.js +0 -262
- package/cjs/data-row/DataRow.js.map +0 -1
- package/cjs/header-cell/GroupHeaderCell.css.js +0 -6
- package/cjs/header-cell/GroupHeaderCell.css.js.map +0 -1
- package/cjs/header-cell/GroupHeaderCell.js +0 -127
- package/cjs/header-cell/GroupHeaderCell.js.map +0 -1
- package/cjs/header-cell/HeaderCell.css.js +0 -6
- package/cjs/header-cell/HeaderCell.css.js.map +0 -1
- package/cjs/header-cell/HeaderCell.js +0 -139
- package/cjs/header-cell/HeaderCell.js.map +0 -1
- package/cjs/index.js +0 -64
- package/cjs/index.js.map +0 -1
- package/cjs/pagination/PaginationControl.css.js +0 -6
- package/cjs/pagination/PaginationControl.css.js.map +0 -1
- package/cjs/pagination/PaginationControl.js +0 -38
- package/cjs/pagination/PaginationControl.js.map +0 -1
- package/cjs/pagination/usePagination.js +0 -36
- package/cjs/pagination/usePagination.js.map +0 -1
- package/cjs/table-cell/TableCell.css.js +0 -6
- package/cjs/table-cell/TableCell.css.js.map +0 -1
- package/cjs/table-cell/TableCell.js +0 -75
- package/cjs/table-cell/TableCell.js.map +0 -1
- package/cjs/table-cell/TableGroupCell.css.js +0 -6
- package/cjs/table-cell/TableGroupCell.css.js.map +0 -1
- package/cjs/table-cell/TableGroupCell.js +0 -65
- package/cjs/table-cell/TableGroupCell.js.map +0 -1
- package/cjs/table-config/useTableConfig.js +0 -67
- package/cjs/table-config/useTableConfig.js.map +0 -1
- package/cjs/table-config.js +0 -35
- package/cjs/table-config.js.map +0 -1
- package/cjs/table-data-source/DataRowMovingWindow.js +0 -99
- package/cjs/table-data-source/DataRowMovingWindow.js.map +0 -1
- package/cjs/table-data-source/useDataSource.js +0 -236
- package/cjs/table-data-source/useDataSource.js.map +0 -1
- package/cjs/table-dom-utils.js +0 -206
- package/cjs/table-dom-utils.js.map +0 -1
- package/cjs/table-header/HeaderProvider.js +0 -18
- package/cjs/table-header/HeaderProvider.js.map +0 -1
- package/cjs/table-header/TableHeader.js +0 -180
- package/cjs/table-header/TableHeader.js.map +0 -1
- package/cjs/table-header/useTableHeader.js +0 -87
- package/cjs/table-header/useTableHeader.js.map +0 -1
- package/cjs/useCell.js +0 -26
- package/cjs/useCell.js.map +0 -1
- package/cjs/useCellEditing.js +0 -77
- package/cjs/useCellEditing.js.map +0 -1
- package/cjs/useCellFocus.js +0 -119
- package/cjs/useCellFocus.js.map +0 -1
- package/cjs/useControlledTableNavigation.js +0 -46
- package/cjs/useControlledTableNavigation.js.map +0 -1
- package/cjs/useEditableCell.js +0 -27
- package/cjs/useEditableCell.js.map +0 -1
- package/cjs/useKeyboardNavigation.js +0 -323
- package/cjs/useKeyboardNavigation.js.map +0 -1
- package/cjs/useMeasuredHeight.js +0 -51
- package/cjs/useMeasuredHeight.js.map +0 -1
- package/cjs/useRowClassNameGenerators.js +0 -34
- package/cjs/useRowClassNameGenerators.js.map +0 -1
- package/cjs/useSelection.js +0 -130
- package/cjs/useSelection.js.map +0 -1
- package/cjs/useTable.js +0 -742
- package/cjs/useTable.js.map +0 -1
- package/cjs/useTableContextMenu.js +0 -76
- package/cjs/useTableContextMenu.js.map +0 -1
- package/cjs/useTableModel.js +0 -421
- package/cjs/useTableModel.js.map +0 -1
- package/cjs/useTableScroll.js +0 -464
- package/cjs/useTableScroll.js.map +0 -1
- package/cjs/useTableViewport.js +0 -137
- package/cjs/useTableViewport.js.map +0 -1
- package/esm/CellFocusState.js +0 -43
- package/esm/CellFocusState.js.map +0 -1
- package/esm/Row.js +0 -114
- package/esm/Row.js.map +0 -1
- package/esm/Table.css.js +0 -4
- package/esm/Table.css.js.map +0 -1
- package/esm/Table.js +0 -453
- package/esm/Table.js.map +0 -1
- package/esm/VirtualColSpan.js +0 -17
- package/esm/VirtualColSpan.js.map +0 -1
- package/esm/applyHighlighting.js +0 -31
- package/esm/applyHighlighting.js.map +0 -1
- package/esm/bulk-edit/BulkEditPanel.css.js +0 -4
- package/esm/bulk-edit/BulkEditPanel.css.js.map +0 -1
- package/esm/bulk-edit/BulkEditPanel.js +0 -105
- package/esm/bulk-edit/BulkEditPanel.js.map +0 -1
- package/esm/bulk-edit/ColumnCascadingUpdateEditor.css.js +0 -4
- package/esm/bulk-edit/ColumnCascadingUpdateEditor.css.js.map +0 -1
- package/esm/bulk-edit/ColumnCascadingUpdateEditor.js +0 -78
- package/esm/bulk-edit/ColumnCascadingUpdateEditor.js.map +0 -1
- package/esm/bulk-edit/InsertNewRowEditor.css.js +0 -4
- package/esm/bulk-edit/InsertNewRowEditor.css.js.map +0 -1
- package/esm/bulk-edit/InsertNewRowEditor.js +0 -78
- package/esm/bulk-edit/InsertNewRowEditor.js.map +0 -1
- package/esm/bulk-edit/useBulkEditPanel.js +0 -68
- package/esm/bulk-edit/useBulkEditPanel.js.map +0 -1
- package/esm/bulk-edit/useColumnCascadingEditor.js +0 -141
- package/esm/bulk-edit/useColumnCascadingEditor.js.map +0 -1
- package/esm/cell-block/CellBlock.css.js +0 -4
- package/esm/cell-block/CellBlock.css.js.map +0 -1
- package/esm/cell-block/CellBlock.js +0 -43
- package/esm/cell-block/CellBlock.js.map +0 -1
- package/esm/cell-block/cellblock-utils.js +0 -116
- package/esm/cell-block/cellblock-utils.js.map +0 -1
- package/esm/cell-block/useCellBlockSelection.js +0 -255
- package/esm/cell-block/useCellBlockSelection.js.map +0 -1
- package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -4
- package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
- package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +0 -65
- package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
- package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -4
- package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
- package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -49
- package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
- package/esm/cell-renderers/input-cell/InputCell.css.js +0 -4
- package/esm/cell-renderers/input-cell/InputCell.css.js.map +0 -1
- package/esm/cell-renderers/input-cell/InputCell.js +0 -61
- package/esm/cell-renderers/input-cell/InputCell.js.map +0 -1
- package/esm/cell-renderers/input-cell/useInputCell.js +0 -209
- package/esm/cell-renderers/input-cell/useInputCell.js.map +0 -1
- package/esm/cell-renderers/toggle-cell/ToggleCell.css.js +0 -4
- package/esm/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
- package/esm/cell-renderers/toggle-cell/ToggleCell.js +0 -64
- package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
- package/esm/column-header-pill/ColumnHeaderPill.css.js +0 -4
- package/esm/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
- package/esm/column-header-pill/ColumnHeaderPill.js +0 -51
- package/esm/column-header-pill/ColumnHeaderPill.js.map +0 -1
- package/esm/column-header-pill/GroupColumnPill.css.js +0 -4
- package/esm/column-header-pill/GroupColumnPill.css.js.map +0 -1
- package/esm/column-header-pill/GroupColumnPill.js +0 -27
- package/esm/column-header-pill/GroupColumnPill.js.map +0 -1
- package/esm/column-header-pill/SortIndicator.css.js +0 -4
- package/esm/column-header-pill/SortIndicator.css.js.map +0 -1
- package/esm/column-header-pill/SortIndicator.js +0 -25
- package/esm/column-header-pill/SortIndicator.js.map +0 -1
- package/esm/column-resizing/ColumnResizer.css.js +0 -4
- package/esm/column-resizing/ColumnResizer.css.js.map +0 -1
- package/esm/column-resizing/ColumnResizer.js +0 -80
- package/esm/column-resizing/ColumnResizer.js.map +0 -1
- package/esm/column-resizing/useTableColumnResize.js +0 -53
- package/esm/column-resizing/useTableColumnResize.js.map +0 -1
- package/esm/data-row/DataRow.js +0 -260
- package/esm/data-row/DataRow.js.map +0 -1
- package/esm/header-cell/GroupHeaderCell.css.js +0 -4
- package/esm/header-cell/GroupHeaderCell.css.js.map +0 -1
- package/esm/header-cell/GroupHeaderCell.js +0 -125
- package/esm/header-cell/GroupHeaderCell.js.map +0 -1
- package/esm/header-cell/HeaderCell.css.js +0 -4
- package/esm/header-cell/HeaderCell.css.js.map +0 -1
- package/esm/header-cell/HeaderCell.js +0 -137
- package/esm/header-cell/HeaderCell.js.map +0 -1
- package/esm/index.js +0 -27
- package/esm/index.js.map +0 -1
- package/esm/pagination/PaginationControl.css.js +0 -4
- package/esm/pagination/PaginationControl.css.js.map +0 -1
- package/esm/pagination/PaginationControl.js +0 -36
- package/esm/pagination/PaginationControl.js.map +0 -1
- package/esm/pagination/usePagination.js +0 -34
- package/esm/pagination/usePagination.js.map +0 -1
- package/esm/table-cell/TableCell.css.js +0 -4
- package/esm/table-cell/TableCell.css.js.map +0 -1
- package/esm/table-cell/TableCell.js +0 -73
- package/esm/table-cell/TableCell.js.map +0 -1
- package/esm/table-cell/TableGroupCell.css.js +0 -4
- package/esm/table-cell/TableGroupCell.css.js.map +0 -1
- package/esm/table-cell/TableGroupCell.js +0 -63
- package/esm/table-cell/TableGroupCell.js.map +0 -1
- package/esm/table-config/useTableConfig.js +0 -65
- package/esm/table-config/useTableConfig.js.map +0 -1
- package/esm/table-config.js +0 -33
- package/esm/table-config.js.map +0 -1
- package/esm/table-data-source/DataRowMovingWindow.js +0 -97
- package/esm/table-data-source/DataRowMovingWindow.js.map +0 -1
- package/esm/table-data-source/useDataSource.js +0 -234
- package/esm/table-data-source/useDataSource.js.map +0 -1
- package/esm/table-dom-utils.js +0 -188
- package/esm/table-dom-utils.js.map +0 -1
- package/esm/table-header/HeaderProvider.js +0 -15
- package/esm/table-header/HeaderProvider.js.map +0 -1
- package/esm/table-header/TableHeader.js +0 -178
- package/esm/table-header/TableHeader.js.map +0 -1
- package/esm/table-header/useTableHeader.js +0 -85
- package/esm/table-header/useTableHeader.js.map +0 -1
- package/esm/useCell.js +0 -24
- package/esm/useCell.js.map +0 -1
- package/esm/useCellEditing.js +0 -75
- package/esm/useCellEditing.js.map +0 -1
- package/esm/useCellFocus.js +0 -117
- package/esm/useCellFocus.js.map +0 -1
- package/esm/useControlledTableNavigation.js +0 -43
- package/esm/useControlledTableNavigation.js.map +0 -1
- package/esm/useEditableCell.js +0 -25
- package/esm/useEditableCell.js.map +0 -1
- package/esm/useKeyboardNavigation.js +0 -319
- package/esm/useKeyboardNavigation.js.map +0 -1
- package/esm/useMeasuredHeight.js +0 -49
- package/esm/useMeasuredHeight.js.map +0 -1
- package/esm/useRowClassNameGenerators.js +0 -32
- package/esm/useRowClassNameGenerators.js.map +0 -1
- package/esm/useSelection.js +0 -128
- package/esm/useSelection.js.map +0 -1
- package/esm/useTable.js +0 -740
- package/esm/useTable.js.map +0 -1
- package/esm/useTableContextMenu.js +0 -73
- package/esm/useTableContextMenu.js.map +0 -1
- package/esm/useTableModel.js +0 -419
- package/esm/useTableModel.js.map +0 -1
- package/esm/useTableScroll.js +0 -461
- package/esm/useTableScroll.js.map +0 -1
- package/esm/useTableViewport.js +0 -135
- package/esm/useTableViewport.js.map +0 -1
package/cjs/useTable.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useTable.js","sources":["../../../packages/vuu-table/src/useTable.ts"],"sourcesContent":["import type {\n DataSourceConfigChangeHandler,\n DataSourceSubscribedMessage,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDisplayActionHandler,\n useColumnActions,\n} from \"@vuu-ui/vuu-table-extras\";\nimport type {\n ColumnPinAction,\n ColumnDescriptor,\n ColumnMoveHandler,\n RuntimeColumnDescriptor,\n SelectionChangeHandler,\n TableColumnResizeHandler,\n TableConfig,\n TableConfigChangeType,\n TableRowClickHandlerInternal,\n TableRowSelectHandlerInternal,\n TableSelectionModel,\n DataRow,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n DragStartHandler,\n MeasuredProps,\n MeasuredSize,\n useDragDrop,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport {\n getAllCellsInColumn,\n getAriaRowIndex,\n getPinStateFromElement,\n isGroupColumn,\n isJsonGroup,\n isValidNumber,\n logUnhandledMessage,\n metadataKeys,\n PinState,\n toggleOrApplySort,\n updateColumn,\n useEditSession,\n useLayoutEffectSkipFirst,\n useStableReference,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEvent,\n KeyboardEvent,\n MouseEventHandler,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { TableCellBlock } from \"./cell-block/cellblock-utils\";\nimport { useCellBlockSelection } from \"./cell-block/useCellBlockSelection\";\nimport { CellFocusState } from \"./CellFocusState\";\nimport { TableProps } from \"./Table\";\nimport { updateTableConfig } from \"./table-config\";\nimport { getHeaderCell } from \"./table-dom-utils\";\nimport { useCellEditing } from \"./useCellEditing\";\nimport { FocusCell, useCellFocus } from \"./useCellFocus\";\nimport { useDataSource } from \"./table-data-source/useDataSource\";\nimport {\n GroupToggleHandler,\n useKeyboardNavigation,\n} from \"./useKeyboardNavigation\";\nimport { useRowClassNameGenerators } from \"./useRowClassNameGenerators\";\nimport { useSelection } from \"./useSelection\";\nimport { useTableContextMenu } from \"./useTableContextMenu\";\nimport {\n ColumnActionHide,\n ColumnActionRemove,\n useTableModel,\n} from \"./useTableModel\";\nimport { ScrollRequestHandler, useTableScroll } from \"./useTableScroll\";\nimport { useTableViewport } from \"./useTableViewport\";\n\ntype HeaderState = {\n height: number;\n count: number;\n};\n\ntype CellResizeState = {\n cells: HTMLDivElement[];\n startWidth: number;\n pinState?: PinState;\n};\n\nconst nullHeaderState = {\n height: -1,\n count: -1,\n};\nconst zeroHeaderState = {\n height: 0,\n count: 0,\n};\n\nexport interface TableHookProps\n extends MeasuredProps,\n Pick<\n TableProps,\n | \"allowCellBlockSelection\"\n | \"allowDragDrop\"\n | \"allowSelectCheckboxRow\"\n | \"autoSelectFirstRow\"\n | \"autoSelectRowKey\"\n | \"config\"\n | \"dataSource\"\n | \"disableFocus\"\n | \"highlightedIndex\"\n | \"id\"\n | \"navigationStyle\"\n | \"onConfigChange\"\n // | \"onDataEdited\"\n | \"onDragStart\"\n | \"onDrop\"\n | \"onHighlight\"\n | \"onSelect\"\n | \"onSelectCellBlock\"\n | \"onSelectionChange\"\n | \"onRowClick\"\n | \"renderBufferSize\"\n | \"revealSelected\"\n | \"scrollingApiRef\"\n | \"showColumnHeaders\"\n | \"showPaginationControls\"\n > {\n // colHeaderRowHeight: number;\n containerRef: RefObject<HTMLDivElement | null>;\n rowHeight: number;\n selectionModel: TableSelectionModel;\n size: MeasuredSize;\n}\n\nconst { IS_EXPANDED, IS_LEAF } = metadataKeys;\n\nconst NULL_DRAG_DROP = {\n draggable: undefined,\n onMouseDown: undefined,\n};\nconst useNullDragDrop = () => NULL_DRAG_DROP;\n\nexport const useTable = ({\n allowCellBlockSelection,\n allowSelectCheckboxRow,\n allowDragDrop = false,\n autoSelectFirstRow,\n autoSelectRowKey,\n // colHeaderRowHeight,\n config,\n containerRef,\n dataSource,\n disableFocus,\n highlightedIndex: highlightedIndexProp,\n id,\n navigationStyle = \"cell\",\n onConfigChange,\n // onDataEdited: onDataEditedProp,\n onDragStart,\n onDrop,\n onHighlight,\n onRowClick: onRowClickProp,\n onSelect,\n onSelectCellBlock,\n onSelectionChange,\n renderBufferSize = 0,\n revealSelected,\n rowHeight,\n scrollingApiRef,\n selectionModel,\n showColumnHeaders,\n showPaginationControls,\n size,\n}: TableHookProps) => {\n const tableConfigRef = useRef<TableConfig>(config);\n // We need scrollTop from the scrolling hook, just to detect when we need to scroll after a config change\n const scrollTopRef = useRef(0);\n // avoids a hook dependency on requestScroll, important to avoid re-registering config handler\n const requestScrollRef = useRef<ScrollRequestHandler | undefined>(undefined);\n useMemo(() => {\n tableConfigRef.current = config;\n }, [config]);\n\n const editSession = useEditSession();\n\n // state is mutated, so make every component gets a fresh copy\n const initialState = useMemo(() => new CellFocusState(), []);\n\n const cellFocusStateRef = useRef<CellFocusState>(initialState);\n // Needed to avoid circular dependency between useTableScroll and useCellFocus\n const focusCellRef = useRef<FocusCell>(undefined);\n\n const [headerState, setHeaderState] = useState<HeaderState>(\n showColumnHeaders ? nullHeaderState : zeroHeaderState,\n );\n\n const [rowCount, setRowCount] = useState<number>(dataSource.size);\n if (dataSource === undefined) {\n throw Error(\"no data source provided to Vuu Table\");\n }\n\n const onDataRowcountChange = useCallback((size: number) => {\n setRowCount(size);\n }, []);\n\n const { selectionBookendWidth = 4 } = config;\n const virtualContentHeight = rowHeight * rowCount;\n const viewportBodyHeight =\n size.height - (headerState.height === -1 ? 0 : headerState.height);\n const verticalScrollbarWidth =\n virtualContentHeight > viewportBodyHeight ? 10 : 0;\n const availableWidth =\n size.width - (verticalScrollbarWidth + 2 * selectionBookendWidth);\n\n const rowClassNameGenerator = useRowClassNameGenerators(config);\n\n const useRowDragDrop = allowDragDrop ? useDragDrop : useNullDragDrop;\n\n const {\n columns,\n dispatchTableModelAction,\n headings,\n tableAttributes,\n tableConfig,\n } = useTableModel({ config, dataSource, selectionModel, availableWidth });\n\n const columnsRef = useStableReference(columns);\n\n // this is really here to capture changes to available Width - typically when we get\n // rowcount so add allowance for vertical scrollbar, reducing available width\n // including dataSource is causing us to do unnecessary work in useTableModel\n // split this into multiple effects\n useLayoutEffectSkipFirst(() => {\n dispatchTableModelAction({\n availableWidth,\n selectionModel,\n type: \"init\",\n tableConfig: tableConfigRef.current,\n dataSource,\n });\n }, [\n availableWidth,\n config,\n dataSource,\n dispatchTableModelAction,\n selectionModel,\n ]);\n\n const applyTableConfigChange = useCallback(\n (config: TableConfig, changeType: TableConfigChangeType) => {\n dispatchTableModelAction({\n availableWidth,\n selectionModel,\n type: \"init\",\n tableConfig: config,\n dataSource,\n });\n tableConfigRef.current = config;\n onConfigChange?.(config, changeType);\n },\n [\n availableWidth,\n dataSource,\n dispatchTableModelAction,\n onConfigChange,\n selectionModel,\n ],\n );\n\n const handleSelectionChange: SelectionChangeHandler =\n useCallback<SelectionChangeHandler>(\n (selectRequest) => {\n dataSource.select?.(selectRequest);\n onSelectionChange?.(selectRequest);\n },\n [dataSource, onSelectionChange],\n );\n\n const handleSelect = useCallback<TableRowSelectHandlerInternal>(\n (dataRow) => {\n if (onSelect) {\n onSelect(dataRow);\n }\n },\n [onSelect],\n );\n\n const onSubscribed = useCallback(\n ({ tableSchema }: DataSourceSubscribedMessage) => {\n if (tableSchema) {\n dispatchTableModelAction({\n type: \"setTableSchema\",\n tableSchema,\n });\n } else {\n console.log(\"subscription message with no schema\");\n }\n },\n [dispatchTableModelAction],\n );\n\n const {\n getRowAtPosition,\n getRowOffset,\n setInSituRowOffset: viewportHookSetInSituRowOffset,\n setScrollTop: viewportHookSetScrollTop,\n ...viewportMeasurements\n } = useTableViewport({\n columns,\n headerHeight: headerState.height,\n rowCount,\n rowHeight,\n selectionEndSize: selectionBookendWidth,\n size: size,\n showPaginationControls,\n });\n\n const {\n dataRows,\n dataRowsRef,\n getSelectedRows,\n range,\n // removeColumnDataFromCache,\n setRange,\n } = useDataSource({\n autoSelectFirstRow,\n autoSelectRowKey,\n dataSource,\n renderBufferSize,\n revealSelected,\n onSelect: handleSelect,\n onSizeChange: onDataRowcountChange,\n onSubscribed,\n selectionModel,\n });\n\n const { requestScroll, scrollTop, ...scrollProps } = useTableScroll({\n cellFocusStateRef,\n columns,\n getRowAtPosition,\n rowHeight,\n scrollingApiRef,\n setRange,\n showPaginationControls,\n onVerticalScroll: viewportHookSetScrollTop,\n onVerticalScrollInSitu: viewportHookSetInSituRowOffset,\n viewportMeasurements,\n });\n // to avoid invalidating the dependencies of consumers of scrollTp every time we scroll\n scrollTopRef.current = scrollTop;\n // avoids a hook dependency on requestScroll, important to avoid re-registering config handler\n requestScrollRef.current = requestScroll;\n\n const handleConfigChange = useCallback<DataSourceConfigChangeHandler>(\n (config, _range, confirmed, changes) => {\n const scrollSensitiveChanges =\n changes?.filterChanged || changes?.groupByChanged;\n if (scrollSensitiveChanges && scrollTopRef.current > 0) {\n // don't wait for the scroll event to fire and trigger a range change,\n //we might miss data in the meantime\n setRange(range.reset);\n requestScrollRef.current?.({\n type: \"scroll-top\",\n scrollPos: 0,\n instant: true,\n });\n }\n dispatchTableModelAction({\n type: \"tableConfig\",\n ...config,\n confirmed,\n });\n },\n [dispatchTableModelAction, range, setRange],\n );\n\n useEffect(() => {\n dataSource.on(\"config\", handleConfigChange);\n return () => {\n dataSource.removeListener(\"config\", handleConfigChange);\n };\n }, [dataSource, dispatchTableModelAction, handleConfigChange]);\n\n //TODO careful with autoSubscribeColumns\n const removeColumn = useCallback(\n (action: ColumnActionRemove) => {\n const { column } = action;\n const newTableConfig = {\n ...tableConfig,\n columns: tableConfig.columns.filter((col) => col.name !== column.name),\n };\n // this will not trigger a render, simply splice the removed column from cached row arrays\n // removeColumnDataFromCache(column.name);\n // this will trigger a render and will render with the correct data, even before\n // we receive refresh from server\n applyTableConfigChange(newTableConfig, {\n type: \"column-removed\",\n column,\n });\n },\n [applyTableConfigChange, tableConfig],\n );\n\n const hideColumns = useCallback(\n (action: ColumnActionHide) => {\n const { columns } = action;\n const hiddenColumns = columns.map((c) => c.name);\n const newTableConfig = {\n ...tableConfig,\n columns: tableConfig.columns.map((col) =>\n hiddenColumns.includes(col.name) ? { ...col, hidden: true } : col,\n ),\n };\n applyTableConfigChange(newTableConfig, {\n type: \"columns-hidden\",\n columns,\n });\n },\n [tableConfig, applyTableConfigChange],\n );\n\n const pinColumn = useCallback(\n ({ column, pin }: ColumnPinAction) => {\n applyTableConfigChange(\n {\n ...tableConfig,\n columns: updateColumn(tableConfig.columns, {\n ...column,\n pin,\n }),\n },\n {\n type: \"column-pinned\",\n column,\n },\n );\n },\n [tableConfig, applyTableConfigChange],\n );\n\n const handleColumnDisplayAction = useCallback<ColumnDisplayActionHandler>(\n (action) => {\n const { type } = action;\n switch (type) {\n case \"hideColumn\":\n return hideColumns({\n type: \"hideColumns\",\n columns: [action.column],\n });\n case \"removeColumn\":\n return removeColumn({\n type: \"removeColumn\",\n column: action.column,\n });\n case \"pinColumn\":\n return pinColumn(action);\n default:\n logUnhandledMessage(type, \"[vuu-table] handleColumnDisplayAction\");\n }\n // }\n },\n [hideColumns, pinColumn, removeColumn],\n );\n\n const handleColumnAction = useColumnActions({\n dataSource,\n onColumnDisplayAction: handleColumnDisplayAction,\n });\n\n const handleSort = useCallback(\n (column: ColumnDescriptor, extendSort = false, sortType?: VuuSortType) => {\n if (dataSource) {\n dataSource.sort = toggleOrApplySort(\n dataSource.sort,\n column,\n extendSort,\n sortType,\n );\n }\n },\n [dataSource],\n );\n\n const cellResizeState = useRef<CellResizeState | undefined>(undefined);\n\n const onResizeColumn: TableColumnResizeHandler = useCallback(\n (phase, columnName, width = 0) => {\n if (phase === \"resize\") {\n cellResizeState.current?.cells.forEach((cell) => {\n cell.style.width = `${width}px`;\n });\n if (cellResizeState.current?.pinState) {\n const { pinState, startWidth } = cellResizeState.current;\n const { cell: pinnedCell, pinnedWidth } = pinState;\n const diff = width - startWidth;\n\n if (pinState.pinnedCells) {\n pinState.pinnedCells.forEach((cell) => {\n cell.style.left = `${parseInt(cell.style.left) + diff}px`;\n });\n }\n\n pinnedCell.style.setProperty(\n \"--pin-width\",\n `${pinnedWidth + diff}px`,\n );\n }\n } else {\n const column = columnsRef.current.find(\n (column) => column.name === columnName,\n );\n\n if (column) {\n if (phase === \"end\") {\n cellResizeState.current = undefined;\n if (isValidNumber(width)) {\n dispatchTableModelAction({\n type: \"resizeColumn\",\n phase,\n column,\n width,\n });\n onConfigChange?.(\n updateTableConfig(tableConfig, {\n type: \"col-size\",\n column,\n columns,\n width,\n }),\n {\n type: \"column-resized\",\n column,\n width,\n },\n );\n }\n } else if (phase === \"begin\") {\n // Store a list of the cells that will be affected by resize operation, so we do not\n // incur this cost on every resize.\n cellResizeState.current = {\n cells: getAllCellsInColumn(\n containerRef.current,\n column.ariaColIndex,\n ),\n startWidth: column.width,\n };\n\n const [headerCell] = cellResizeState.current.cells;\n cellResizeState.current.pinState =\n getPinStateFromElement(headerCell);\n\n dispatchTableModelAction({\n type: \"resizeColumn\",\n phase,\n column,\n width,\n });\n onConfigChange?.(\n updateTableConfig(tableConfig, {\n type: \"col-size\",\n column,\n columns,\n width,\n }),\n {\n type: \"column-resized\",\n column,\n width,\n },\n );\n }\n } else {\n throw Error(\n `useDataTable.handleColumnResize, column ${columnName} not found`,\n );\n }\n }\n },\n [\n columnsRef,\n dispatchTableModelAction,\n onConfigChange,\n tableConfig,\n columns,\n containerRef,\n ],\n );\n\n const onToggleGroup = useCallback(\n (dataRow: DataRow, column: RuntimeColumnDescriptor) => {\n const isJson = isJsonGroup(column, dataRow);\n const { key } = dataRow;\n\n if (dataRow.isExpanded) {\n dataSource.closeTreeNode(key, true);\n if (isJson) {\n // TODO could this be instigated by an event emitted by the JsonDataSOurce ? \"hide-columns\" ?\n const idx = columns.indexOf(column);\n const rows = dataSource.getRowsAtDepth?.(idx + 1);\n if (rows && !rows.some((row) => row[IS_EXPANDED] || row[IS_LEAF])) {\n dispatchTableModelAction({\n type: \"hideColumns\",\n columns: columns.slice(idx + 2),\n });\n }\n }\n } else {\n dataSource.openTreeNode(key);\n if (isJson) {\n const childRows = dataSource.getChildRows?.(key);\n const idx = columns.indexOf(column) + 1;\n const columnsToShow = [columns[idx]];\n if (childRows && childRows.some((row) => row[IS_LEAF])) {\n columnsToShow.push(columns[idx + 1]);\n }\n if (columnsToShow.some((col) => col.hidden)) {\n dispatchTableModelAction({\n type: \"showColumns\",\n columns: columnsToShow,\n });\n }\n }\n }\n },\n [columns, dataSource, dispatchTableModelAction],\n );\n\n // TODO combine with aboue\n const handleToggleGroup = useCallback<GroupToggleHandler>(\n (treeNodeOperation, rowIdx) => {\n if (treeNodeOperation === \"expand\") {\n dataSource.openTreeNode(rowIdx);\n } else {\n dataSource.closeTreeNode(rowIdx);\n }\n },\n [dataSource],\n );\n\n const {\n focusCell,\n focusCellPlaceholderKeyDown,\n focusCellPlaceholderRef,\n setTableBodyRef: tableBodyRef,\n } = useCellFocus({\n cellFocusStateRef,\n containerRef,\n disableFocus,\n requestScroll,\n });\n\n focusCellRef.current = focusCell;\n\n const columnCount = columns.filter((c) => c.hidden !== true).length;\n\n const {\n highlightedIndexRef,\n navigateCell: navigate,\n onFocus: navigationFocus,\n onKeyDown: navigationKeyDown,\n ...containerProps\n } = useKeyboardNavigation({\n cellFocusStateRef,\n columnCount,\n containerRef,\n disableFocus,\n editSessionInProgress: editSession?.inEditMode,\n focusCell,\n headerCount: headerState.count,\n highlightedIndex: highlightedIndexProp,\n navigationStyle,\n requestScroll,\n rowCount,\n onHighlight,\n onToggleGroup: handleToggleGroup,\n viewportRange: range,\n viewportRowCount: viewportMeasurements.rowCount,\n });\n\n const {\n onBlur: editingBlur,\n onDoubleClick: editingDoubleClick,\n onKeyDown: editingKeyDown,\n onFocus: editingFocus,\n } = useCellEditing({\n navigate,\n });\n\n const handleFocus = useCallback(\n (e: FocusEvent<HTMLElement>) => {\n // console.log(`[useTable] handleFocus`);\n navigationFocus();\n // navigationFocus does not call preventDefault\n if (!e.defaultPrevented) {\n editingFocus(e);\n }\n },\n [editingFocus, navigationFocus],\n );\n\n const onContextMenu = useTableContextMenu({\n columns,\n dataRows,\n dataSource,\n getSelectedRows,\n headerCount: headerState.count,\n });\n\n const onMoveGroupColumn = useCallback(\n (columns: ColumnDescriptor[]) => {\n dataSource.groupBy = columns.map((col) => col.name);\n },\n [dataSource],\n );\n\n const onRemoveGroupColumn = useCallback(\n (column: RuntimeColumnDescriptor) => {\n if (isGroupColumn(column)) {\n dataSource.groupBy = [];\n } else {\n if (dataSource && dataSource.groupBy?.includes(column.name)) {\n dataSource.groupBy = dataSource.groupBy.filter(\n (columnName) => columnName !== column.name,\n );\n }\n }\n },\n [dataSource],\n );\n\n const {\n allRowsSelected,\n onCheckBoxColumnHeaderClick,\n onKeyDown: selectionHookKeyDown,\n onRowClick: selectionHookOnRowClick,\n } = useSelection({\n allowSelectCheckboxRow,\n containerRef,\n dataSource,\n highlightedIndexRef,\n onSelect: handleSelect,\n onSelectionChange: handleSelectionChange,\n selectionModel,\n });\n\n const handleSelectCellBlock = useCallback(\n (cellBlock: TableCellBlock) => {\n handleSelectionChange({\n type: \"DESELECT_ALL\",\n });\n onSelectCellBlock?.(cellBlock);\n },\n [handleSelectionChange, onSelectCellBlock],\n );\n\n const {\n onMouseDown: cellBlockHookMouseDown,\n cellBlock,\n onKeyDown: cellBlockSelectionKeyDown,\n } = useCellBlockSelection({\n allowCellBlockSelection,\n columnCount,\n containerRef,\n onSelectCellBlock: handleSelectCellBlock,\n rowCount,\n });\n\n const handleRowClick = useCallback<TableRowClickHandlerInternal>(\n (evt, dataRow, rangeSelect, keepExistingSelection) => {\n selectionHookOnRowClick?.(\n evt,\n dataRow,\n rangeSelect,\n keepExistingSelection,\n );\n onRowClickProp?.(evt, dataRow);\n },\n [onRowClickProp, selectionHookOnRowClick],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>) => {\n // console.log(`[useTable] handleKeyDown, delegates to ...`);\n\n cellBlockSelectionKeyDown?.(e);\n if (!e.defaultPrevented) {\n navigationKeyDown(e);\n }\n if (!e.defaultPrevented) {\n editingKeyDown(e);\n }\n if (!e.defaultPrevented) {\n selectionHookKeyDown(e);\n }\n },\n [\n cellBlockSelectionKeyDown,\n navigationKeyDown,\n editingKeyDown,\n selectionHookKeyDown,\n ],\n );\n\n const onMoveColumn = useCallback<ColumnMoveHandler>(\n (columnName, columns) => {\n const newTableConfig = {\n ...tableConfig,\n columns,\n };\n\n tableConfigRef.current = newTableConfig;\n\n dispatchTableModelAction({\n availableWidth,\n type: \"init\",\n tableConfig: newTableConfig,\n dataSource,\n });\n onConfigChange?.(newTableConfig, {\n columnName,\n columns,\n type: \"column-moved\",\n });\n\n setTimeout(() => {\n const headerCell = getHeaderCell(containerRef, columnName);\n if (headerCell) {\n const { ariaColIndex } = headerCell;\n const { ariaRowIndex } = headerCell.parentElement as HTMLDivElement;\n const col = parseInt(ariaColIndex ?? \"-1\");\n const row = parseInt(ariaRowIndex ?? \"-1\");\n if (!isNaN(col) && col !== -1 && !isNaN(row) && row !== -1) {\n focusCell([row, col]);\n }\n }\n }, 300);\n },\n [\n availableWidth,\n containerRef,\n dataSource,\n dispatchTableModelAction,\n focusCell,\n onConfigChange,\n tableConfig,\n ],\n );\n\n const handleDropRow = useCallback(\n // TODO - this should be GlobalDropHandler\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (dragDropState: any) => {\n onDrop?.(dragDropState);\n },\n [onDrop],\n );\n\n // const handleDataEdited = useCallback(\n // async (editState: DataCellEditEvent): Promise<RpcResult | undefined> => {\n // const {\n // editType = \"commit\",\n // isValid = true,\n // dataRow,\n // columnName,\n // previousValue = \"\",\n // value,\n // } = editState;\n // if (editType === \"commit\") {\n // if (editSession && dataRow && columnName) {\n // return editSession.commit(dataRow.key, columnName, value, isValid);\n // } else {\n // throw Error(\n // `[useTable] handleDataEdited, no editSession installed and datasource does not support RPC`,\n // );\n // }\n // } else {\n // if (editSession && dataRow && columnName) {\n // editSession.edit(dataRow.key, columnName, previousValue, value);\n // } else {\n // onDataEditedProp?.(editState);\n // }\n // }\n // },\n // [editSession, onDataEditedProp],\n // );\n\n const handleDragStartRow = useCallback<DragStartHandler>(\n (dragDropState) => {\n const { initialDragElement } = dragDropState;\n const rowIndex =\n getAriaRowIndex(initialDragElement) - headerState.count - 1;\n const row = dataRowsRef.current.find((row) => row.index === rowIndex);\n if (row) {\n dragDropState.setPayload(row);\n } else {\n // should we abort the operation ?\n }\n onDragStart?.(dragDropState);\n },\n [dataRowsRef, headerState.count, onDragStart],\n );\n\n const onHeaderHeightMeasured = useCallback(\n (height: number, count: number) => {\n setHeaderState({ height, count });\n },\n [],\n );\n\n // Drag Drop rows\n const { onMouseDown: rowDragMouseDown, draggable: draggableRow } =\n useRowDragDrop({\n allowDragDrop,\n containerRef,\n draggableClassName: `vuuTable`,\n id,\n onDragStart: handleDragStartRow,\n onDrop: handleDropRow,\n orientation: \"vertical\",\n itemQuery: \".vuuTableRow\",\n });\n\n const handleMouseDown = useCallback<MouseEventHandler>(\n (evt) => {\n rowDragMouseDown?.(evt);\n if (!evt.isPropagationStopped()) {\n cellBlockHookMouseDown?.(evt);\n }\n },\n [rowDragMouseDown, cellBlockHookMouseDown],\n );\n\n return {\n ...containerProps,\n allRowsSelected,\n \"aria-rowcount\": dataSource.size,\n cellBlock,\n columns,\n dataRows,\n draggableRow,\n editSessionInProgress: editSession?.inEditMode,\n focusCellPlaceholderKeyDown,\n focusCellPlaceholderRef,\n getRowOffset,\n handleColumnAction,\n headerState,\n headings,\n highlightedIndex: highlightedIndexRef.current,\n onBlur: editingBlur,\n onCheckBoxColumnHeaderClick,\n onDoubleClick: editingDoubleClick,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n onMouseDown: handleMouseDown,\n onContextMenu,\n // onDataEdited: handleDataEdited,\n onHeaderHeightMeasured,\n onMoveColumn,\n onMoveGroupColumn,\n onRemoveGroupColumn,\n onRowClick: handleRowClick,\n onSortColumn: handleSort,\n onResizeColumn,\n onToggleGroup,\n rowClassNameGenerator,\n scrollProps,\n // TODO don't think we need these ...\n tableAttributes,\n tableBodyRef,\n tableConfig,\n viewportMeasurements,\n };\n};\n"],"names":["metadataKeys","useRef","useMemo","useEditSession","CellFocusState","useState","useCallback","size","useRowClassNameGenerators","useDragDrop","tableConfig","useTableModel","useStableReference","useLayoutEffectSkipFirst","config","useTableViewport","useDataSource","useTableScroll","useEffect","columns","updateColumn","logUnhandledMessage","useColumnActions","toggleOrApplySort","column","isValidNumber","updateTableConfig","getAllCellsInColumn","getPinStateFromElement","isJsonGroup","useCellFocus","useKeyboardNavigation","useCellEditing","useTableContextMenu","isGroupColumn","useSelection","cellBlock","useCellBlockSelection","getHeaderCell","getAriaRowIndex","row"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2FA,MAAM,eAAkB,GAAA;AAAA,EACtB,MAAQ,EAAA,CAAA,CAAA;AAAA,EACR,KAAO,EAAA,CAAA;AACT,CAAA;AACA,MAAM,eAAkB,GAAA;AAAA,EACtB,MAAQ,EAAA,CAAA;AAAA,EACR,KAAO,EAAA;AACT,CAAA;AAuCA,MAAM,EAAE,WAAa,EAAA,OAAA,EAAY,GAAAA,qBAAA;AAEjC,MAAM,cAAiB,GAAA;AAAA,EACrB,SAAW,EAAA,KAAA,CAAA;AAAA,EACX,WAAa,EAAA,KAAA;AACf,CAAA;AACA,MAAM,kBAAkB,MAAM,cAAA;AAEvB,MAAM,WAAW,CAAC;AAAA,EACvB,uBAAA;AAAA,EACA,sBAAA;AAAA,EACA,aAAgB,GAAA,KAAA;AAAA,EAChB,kBAAA;AAAA,EACA,gBAAA;AAAA;AAAA,EAEA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAkB,EAAA,oBAAA;AAAA,EAClB,EAAA;AAAA,EACA,eAAkB,GAAA,MAAA;AAAA,EAClB,cAAA;AAAA;AAAA,EAEA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAY,EAAA,cAAA;AAAA,EACZ,QAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAmB,GAAA,CAAA;AAAA,EACnB,cAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAsB,KAAA;AACpB,EAAM,MAAA,cAAA,GAAiBC,aAAoB,MAAM,CAAA;AAEjD,EAAM,MAAA,YAAA,GAAeA,aAAO,CAAC,CAAA;AAE7B,EAAM,MAAA,gBAAA,GAAmBA,aAAyC,KAAS,CAAA,CAAA;AAC3E,EAAAC,aAAA,CAAQ,MAAM;AACZ,IAAA,cAAA,CAAe,OAAU,GAAA,MAAA;AAAA,GAC3B,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,cAAcC,uBAAe,EAAA;AAGnC,EAAA,MAAM,eAAeD,aAAQ,CAAA,MAAM,IAAIE,6BAAe,EAAA,EAAG,EAAE,CAAA;AAE3D,EAAM,MAAA,iBAAA,GAAoBH,aAAuB,YAAY,CAAA;AAE7D,EAAM,MAAA,YAAA,GAAeA,aAAkB,KAAS,CAAA,CAAA;AAEhD,EAAM,MAAA,CAAC,WAAa,EAAA,cAAc,CAAI,GAAAI,cAAA;AAAA,IACpC,oBAAoB,eAAkB,GAAA;AAAA,GACxC;AAEA,EAAA,MAAM,CAAC,QAAU,EAAA,WAAW,CAAI,GAAAA,cAAA,CAAiB,WAAW,IAAI,CAAA;AAChE,EAAA,IAAI,eAAe,KAAW,CAAA,EAAA;AAC5B,IAAA,MAAM,MAAM,sCAAsC,CAAA;AAAA;AAGpD,EAAM,MAAA,oBAAA,GAAuBC,iBAAY,CAAA,CAACC,KAAiB,KAAA;AACzD,IAAA,WAAA,CAAYA,KAAI,CAAA;AAAA,GAClB,EAAG,EAAE,CAAA;AAEL,EAAM,MAAA,EAAE,qBAAwB,GAAA,CAAA,EAAM,GAAA,MAAA;AACtC,EAAA,MAAM,uBAAuB,SAAY,GAAA,QAAA;AACzC,EAAA,MAAM,qBACJ,IAAK,CAAA,MAAA,IAAU,YAAY,MAAW,KAAA,CAAA,CAAA,GAAK,IAAI,WAAY,CAAA,MAAA,CAAA;AAC7D,EAAM,MAAA,sBAAA,GACJ,oBAAuB,GAAA,kBAAA,GAAqB,EAAK,GAAA,CAAA;AACnD,EAAA,MAAM,cACJ,GAAA,IAAA,CAAK,KAAS,IAAA,sBAAA,GAAyB,CAAI,GAAA,qBAAA,CAAA;AAE7C,EAAM,MAAA,qBAAA,GAAwBC,oDAA0B,MAAM,CAAA;AAE9D,EAAM,MAAA,cAAA,GAAiB,gBAAgBC,yBAAc,GAAA,eAAA;AAErD,EAAM,MAAA;AAAA,IACJ,OAAA;AAAA,IACA,wBAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,iBACAC;AAAA,MACEC,2BAAc,CAAA,EAAE,QAAQ,UAAY,EAAA,cAAA,EAAgB,gBAAgB,CAAA;AAExE,EAAM,MAAA,UAAA,GAAaC,4BAAmB,OAAO,CAAA;AAM7C,EAAAC,iCAAA,CAAyB,MAAM;AAC7B,IAAyB,wBAAA,CAAA;AAAA,MACvB,cAAA;AAAA,MACA,cAAA;AAAA,MACA,IAAM,EAAA,MAAA;AAAA,MACN,aAAa,cAAe,CAAA,OAAA;AAAA,MAC5B;AAAA,KACD,CAAA;AAAA,GACA,EAAA;AAAA,IACD,cAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,wBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,sBAAyB,GAAAP,iBAAA;AAAA,IAC7B,CAACQ,SAAqB,UAAsC,KAAA;AAC1D,MAAyB,wBAAA,CAAA;AAAA,QACvB,cAAA;AAAA,QACA,cAAA;AAAA,QACA,IAAM,EAAA,MAAA;AAAA,QACN,WAAaA,EAAAA,OAAAA;AAAA,QACb;AAAA,OACD,CAAA;AACD,MAAA,cAAA,CAAe,OAAUA,GAAAA,OAAAA;AACzB,MAAA,cAAA,GAAiBA,SAAQ,UAAU,CAAA;AAAA,KACrC;AAAA,IACA;AAAA,MACE,cAAA;AAAA,MACA,UAAA;AAAA,MACA,wBAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,qBACJ,GAAAR,iBAAA;AAAA,IACE,CAAC,aAAkB,KAAA;AACjB,MAAA,UAAA,CAAW,SAAS,aAAa,CAAA;AACjC,MAAA,iBAAA,GAAoB,aAAa,CAAA;AAAA,KACnC;AAAA,IACA,CAAC,YAAY,iBAAiB;AAAA,GAChC;AAEF,EAAA,MAAM,YAAe,GAAAA,iBAAA;AAAA,IACnB,CAAC,OAAY,KAAA;AACX,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,QAAA,CAAS,OAAO,CAAA;AAAA;AAClB,KACF;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,YAAe,GAAAA,iBAAA;AAAA,IACnB,CAAC,EAAE,WAAA,EAA+C,KAAA;AAChD,MAAA,IAAI,WAAa,EAAA;AACf,QAAyB,wBAAA,CAAA;AAAA,UACvB,IAAM,EAAA,gBAAA;AAAA,UACN;AAAA,SACD,CAAA;AAAA,OACI,MAAA;AACL,QAAA,OAAA,CAAQ,IAAI,qCAAqC,CAAA;AAAA;AACnD,KACF;AAAA,IACA,CAAC,wBAAwB;AAAA,GAC3B;AAEA,EAAM,MAAA;AAAA,IACJ,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAoB,EAAA,8BAAA;AAAA,IACpB,YAAc,EAAA,wBAAA;AAAA,IACd,GAAG;AAAA,MACDS,iCAAiB,CAAA;AAAA,IACnB,OAAA;AAAA,IACA,cAAc,WAAY,CAAA,MAAA;AAAA,IAC1B,QAAA;AAAA,IACA,SAAA;AAAA,IACA,gBAAkB,EAAA,qBAAA;AAAA,IAClB,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,KAAA;AAAA;AAAA,IAEA;AAAA,MACEC,2BAAc,CAAA;AAAA,IAChB,kBAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,YAAc,EAAA,oBAAA;AAAA,IACd,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,EAAE,aAAe,EAAA,SAAA,EAAW,GAAG,WAAA,KAAgBC,6BAAe,CAAA;AAAA,IAClE,iBAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,sBAAA;AAAA,IACA,gBAAkB,EAAA,wBAAA;AAAA,IAClB,sBAAwB,EAAA,8BAAA;AAAA,IACxB;AAAA,GACD,CAAA;AAED,EAAA,YAAA,CAAa,OAAU,GAAA,SAAA;AAEvB,EAAA,gBAAA,CAAiB,OAAU,GAAA,aAAA;AAE3B,EAAA,MAAM,kBAAqB,GAAAX,iBAAA;AAAA,IACzB,CAACQ,OAAAA,EAAQ,MAAQ,EAAA,SAAA,EAAW,OAAY,KAAA;AACtC,MAAM,MAAA,sBAAA,GACJ,OAAS,EAAA,aAAA,IAAiB,OAAS,EAAA,cAAA;AACrC,MAAI,IAAA,sBAAA,IAA0B,YAAa,CAAA,OAAA,GAAU,CAAG,EAAA;AAGtD,QAAA,QAAA,CAAS,MAAM,KAAK,CAAA;AACpB,QAAA,gBAAA,CAAiB,OAAU,GAAA;AAAA,UACzB,IAAM,EAAA,YAAA;AAAA,UACN,SAAW,EAAA,CAAA;AAAA,UACX,OAAS,EAAA;AAAA,SACV,CAAA;AAAA;AAEH,MAAyB,wBAAA,CAAA;AAAA,QACvB,IAAM,EAAA,aAAA;AAAA,QACN,GAAGA,OAAAA;AAAA,QACH;AAAA,OACD,CAAA;AAAA,KACH;AAAA,IACA,CAAC,wBAA0B,EAAA,KAAA,EAAO,QAAQ;AAAA,GAC5C;AAEA,EAAAI,eAAA,CAAU,MAAM;AACd,IAAW,UAAA,CAAA,EAAA,CAAG,UAAU,kBAAkB,CAAA;AAC1C,IAAA,OAAO,MAAM;AACX,MAAW,UAAA,CAAA,cAAA,CAAe,UAAU,kBAAkB,CAAA;AAAA,KACxD;AAAA,GACC,EAAA,CAAC,UAAY,EAAA,wBAAA,EAA0B,kBAAkB,CAAC,CAAA;AAG7D,EAAA,MAAM,YAAe,GAAAZ,iBAAA;AAAA,IACnB,CAAC,MAA+B,KAAA;AAC9B,MAAM,MAAA,EAAE,QAAW,GAAA,MAAA;AACnB,MAAA,MAAM,cAAiB,GAAA;AAAA,QACrB,GAAGI,aAAA;AAAA,QACH,OAAA,EAASA,cAAY,OAAQ,CAAA,MAAA,CAAO,CAAC,GAAQ,KAAA,GAAA,CAAI,IAAS,KAAA,MAAA,CAAO,IAAI;AAAA,OACvE;AAKA,MAAA,sBAAA,CAAuB,cAAgB,EAAA;AAAA,QACrC,IAAM,EAAA,gBAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,KACH;AAAA,IACA,CAAC,wBAAwBA,aAAW;AAAA,GACtC;AAEA,EAAA,MAAM,WAAc,GAAAJ,iBAAA;AAAA,IAClB,CAAC,MAA6B,KAAA;AAC5B,MAAM,MAAA,EAAE,OAAAa,EAAAA,QAAAA,EAAY,GAAA,MAAA;AACpB,MAAA,MAAM,gBAAgBA,QAAQ,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC/C,MAAA,MAAM,cAAiB,GAAA;AAAA,QACrB,GAAGT,aAAA;AAAA,QACH,OAAA,EAASA,cAAY,OAAQ,CAAA,GAAA;AAAA,UAAI,CAAC,GAAA,KAChC,aAAc,CAAA,QAAA,CAAS,GAAI,CAAA,IAAI,CAAI,GAAA,EAAE,GAAG,GAAA,EAAK,MAAQ,EAAA,IAAA,EAAS,GAAA;AAAA;AAChE,OACF;AACA,MAAA,sBAAA,CAAuB,cAAgB,EAAA;AAAA,QACrC,IAAM,EAAA,gBAAA;AAAA,QACN,OAAAS,EAAAA;AAAA,OACD,CAAA;AAAA,KACH;AAAA,IACA,CAACT,eAAa,sBAAsB;AAAA,GACtC;AAEA,EAAA,MAAM,SAAY,GAAAJ,iBAAA;AAAA,IAChB,CAAC,EAAE,MAAQ,EAAA,GAAA,EAA2B,KAAA;AACpC,MAAA,sBAAA;AAAA,QACE;AAAA,UACE,GAAGI,aAAA;AAAA,UACH,OAAA,EAASU,qBAAa,CAAAV,aAAA,CAAY,OAAS,EAAA;AAAA,YACzC,GAAG,MAAA;AAAA,YACH;AAAA,WACD;AAAA,SACH;AAAA,QACA;AAAA,UACE,IAAM,EAAA,eAAA;AAAA,UACN;AAAA;AACF,OACF;AAAA,KACF;AAAA,IACA,CAACA,eAAa,sBAAsB;AAAA,GACtC;AAEA,EAAA,MAAM,yBAA4B,GAAAJ,iBAAA;AAAA,IAChC,CAAC,MAAW,KAAA;AACV,MAAM,MAAA,EAAE,MAAS,GAAA,MAAA;AACjB,MAAA,QAAQ,IAAM;AAAA,QACZ,KAAK,YAAA;AACH,UAAA,OAAO,WAAY,CAAA;AAAA,YACjB,IAAM,EAAA,aAAA;AAAA,YACN,OAAA,EAAS,CAAC,MAAA,CAAO,MAAM;AAAA,WACxB,CAAA;AAAA,QACH,KAAK,cAAA;AACH,UAAA,OAAO,YAAa,CAAA;AAAA,YAClB,IAAM,EAAA,cAAA;AAAA,YACN,QAAQ,MAAO,CAAA;AAAA,WAChB,CAAA;AAAA,QACH,KAAK,WAAA;AACH,UAAA,OAAO,UAAU,MAAM,CAAA;AAAA,QACzB;AACE,UAAAe,4BAAA,CAAoB,MAAM,uCAAuC,CAAA;AAAA;AACrE,KAEF;AAAA,IACA,CAAC,WAAa,EAAA,SAAA,EAAW,YAAY;AAAA,GACvC;AAEA,EAAA,MAAM,qBAAqBC,+BAAiB,CAAA;AAAA,IAC1C,UAAA;AAAA,IACA,qBAAuB,EAAA;AAAA,GACxB,CAAA;AAED,EAAA,MAAM,UAAa,GAAAhB,iBAAA;AAAA,IACjB,CAAC,MAAA,EAA0B,UAAa,GAAA,KAAA,EAAO,QAA2B,KAAA;AACxE,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,UAAA,CAAW,IAAO,GAAAiB,0BAAA;AAAA,UAChB,UAAW,CAAA,IAAA;AAAA,UACX,MAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA,SACF;AAAA;AACF,KACF;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAM,MAAA,eAAA,GAAkBtB,aAAoC,KAAS,CAAA,CAAA;AAErE,EAAA,MAAM,cAA2C,GAAAK,iBAAA;AAAA,IAC/C,CAAC,KAAA,EAAO,UAAY,EAAA,KAAA,GAAQ,CAAM,KAAA;AAChC,MAAA,IAAI,UAAU,QAAU,EAAA;AACtB,QAAA,eAAA,CAAgB,OAAS,EAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,IAAS,KAAA;AAC/C,UAAK,IAAA,CAAA,KAAA,CAAM,KAAQ,GAAA,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AAAA,SAC5B,CAAA;AACD,QAAI,IAAA,eAAA,CAAgB,SAAS,QAAU,EAAA;AACrC,UAAA,MAAM,EAAE,QAAA,EAAU,UAAW,EAAA,GAAI,eAAgB,CAAA,OAAA;AACjD,UAAA,MAAM,EAAE,IAAA,EAAM,UAAY,EAAA,WAAA,EAAgB,GAAA,QAAA;AAC1C,UAAA,MAAM,OAAO,KAAQ,GAAA,UAAA;AAErB,UAAA,IAAI,SAAS,WAAa,EAAA;AACxB,YAAS,QAAA,CAAA,WAAA,CAAY,OAAQ,CAAA,CAAC,IAAS,KAAA;AACrC,cAAK,IAAA,CAAA,KAAA,CAAM,OAAO,CAAG,EAAA,QAAA,CAAS,KAAK,KAAM,CAAA,IAAI,IAAI,IAAI,CAAA,EAAA,CAAA;AAAA,aACtD,CAAA;AAAA;AAGH,UAAA,UAAA,CAAW,KAAM,CAAA,WAAA;AAAA,YACf,aAAA;AAAA,YACA,CAAA,EAAG,cAAc,IAAI,CAAA,EAAA;AAAA,WACvB;AAAA;AACF,OACK,MAAA;AACL,QAAM,MAAA,MAAA,GAAS,WAAW,OAAQ,CAAA,IAAA;AAAA,UAChC,CAACkB,OAAWA,KAAAA,OAAAA,CAAO,IAAS,KAAA;AAAA,SAC9B;AAEA,QAAA,IAAI,MAAQ,EAAA;AACV,UAAA,IAAI,UAAU,KAAO,EAAA;AACnB,YAAA,eAAA,CAAgB,OAAU,GAAA,KAAA,CAAA;AAC1B,YAAI,IAAAC,sBAAA,CAAc,KAAK,CAAG,EAAA;AACxB,cAAyB,wBAAA,CAAA;AAAA,gBACvB,IAAM,EAAA,cAAA;AAAA,gBACN,KAAA;AAAA,gBACA,MAAA;AAAA,gBACA;AAAA,eACD,CAAA;AACD,cAAA,cAAA;AAAA,gBACEC,8BAAkBhB,aAAa,EAAA;AAAA,kBAC7B,IAAM,EAAA,UAAA;AAAA,kBACN,MAAA;AAAA,kBACA,OAAA;AAAA,kBACA;AAAA,iBACD,CAAA;AAAA,gBACD;AAAA,kBACE,IAAM,EAAA,gBAAA;AAAA,kBACN,MAAA;AAAA,kBACA;AAAA;AACF,eACF;AAAA;AACF,WACF,MAAA,IAAW,UAAU,OAAS,EAAA;AAG5B,YAAA,eAAA,CAAgB,OAAU,GAAA;AAAA,cACxB,KAAO,EAAAiB,4BAAA;AAAA,gBACL,YAAa,CAAA,OAAA;AAAA,gBACb,MAAO,CAAA;AAAA,eACT;AAAA,cACA,YAAY,MAAO,CAAA;AAAA,aACrB;AAEA,YAAA,MAAM,CAAC,UAAU,CAAI,GAAA,eAAA,CAAgB,OAAQ,CAAA,KAAA;AAC7C,YAAgB,eAAA,CAAA,OAAA,CAAQ,QACtB,GAAAC,+BAAA,CAAuB,UAAU,CAAA;AAEnC,YAAyB,wBAAA,CAAA;AAAA,cACvB,IAAM,EAAA,cAAA;AAAA,cACN,KAAA;AAAA,cACA,MAAA;AAAA,cACA;AAAA,aACD,CAAA;AACD,YAAA,cAAA;AAAA,cACEF,8BAAkBhB,aAAa,EAAA;AAAA,gBAC7B,IAAM,EAAA,UAAA;AAAA,gBACN,MAAA;AAAA,gBACA,OAAA;AAAA,gBACA;AAAA,eACD,CAAA;AAAA,cACD;AAAA,gBACE,IAAM,EAAA,gBAAA;AAAA,gBACN,MAAA;AAAA,gBACA;AAAA;AACF,aACF;AAAA;AACF,SACK,MAAA;AACL,UAAM,MAAA,KAAA;AAAA,YACJ,2CAA2C,UAAU,CAAA,UAAA;AAAA,WACvD;AAAA;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,UAAA;AAAA,MACA,wBAAA;AAAA,MACA,cAAA;AAAA,MACAA,aAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,aAAgB,GAAAJ,iBAAA;AAAA,IACpB,CAAC,SAAkB,MAAoC,KAAA;AACrD,MAAM,MAAA,MAAA,GAASuB,oBAAY,CAAA,MAAA,EAAQ,OAAO,CAAA;AAC1C,MAAM,MAAA,EAAE,KAAQ,GAAA,OAAA;AAEhB,MAAA,IAAI,QAAQ,UAAY,EAAA;AACtB,QAAW,UAAA,CAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AAClC,QAAA,IAAI,MAAQ,EAAA;AAEV,UAAM,MAAA,GAAA,GAAM,OAAQ,CAAA,OAAA,CAAQ,MAAM,CAAA;AAClC,UAAA,MAAM,IAAO,GAAA,UAAA,CAAW,cAAiB,GAAA,GAAA,GAAM,CAAC,CAAA;AAChD,UAAA,IAAI,IAAQ,IAAA,CAAC,IAAK,CAAA,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAI,CAAA,WAAW,CAAK,IAAA,GAAA,CAAI,OAAO,CAAC,CAAG,EAAA;AACjE,YAAyB,wBAAA,CAAA;AAAA,cACvB,IAAM,EAAA,aAAA;AAAA,cACN,OAAS,EAAA,OAAA,CAAQ,KAAM,CAAA,GAAA,GAAM,CAAC;AAAA,aAC/B,CAAA;AAAA;AACH;AACF,OACK,MAAA;AACL,QAAA,UAAA,CAAW,aAAa,GAAG,CAAA;AAC3B,QAAA,IAAI,MAAQ,EAAA;AACV,UAAM,MAAA,SAAA,GAAY,UAAW,CAAA,YAAA,GAAe,GAAG,CAAA;AAC/C,UAAA,MAAM,GAAM,GAAA,OAAA,CAAQ,OAAQ,CAAA,MAAM,CAAI,GAAA,CAAA;AACtC,UAAA,MAAM,aAAgB,GAAA,CAAC,OAAQ,CAAA,GAAG,CAAC,CAAA;AACnC,UAAI,IAAA,SAAA,IAAa,UAAU,IAAK,CAAA,CAAC,QAAQ,GAAI,CAAA,OAAO,CAAC,CAAG,EAAA;AACtD,YAAA,aAAA,CAAc,IAAK,CAAA,OAAA,CAAQ,GAAM,GAAA,CAAC,CAAC,CAAA;AAAA;AAErC,UAAA,IAAI,cAAc,IAAK,CAAA,CAAC,GAAQ,KAAA,GAAA,CAAI,MAAM,CAAG,EAAA;AAC3C,YAAyB,wBAAA,CAAA;AAAA,cACvB,IAAM,EAAA,aAAA;AAAA,cACN,OAAS,EAAA;AAAA,aACV,CAAA;AAAA;AACH;AACF;AACF,KACF;AAAA,IACA,CAAC,OAAS,EAAA,UAAA,EAAY,wBAAwB;AAAA,GAChD;AAGA,EAAA,MAAM,iBAAoB,GAAAvB,iBAAA;AAAA,IACxB,CAAC,mBAAmB,MAAW,KAAA;AAC7B,MAAA,IAAI,sBAAsB,QAAU,EAAA;AAClC,QAAA,UAAA,CAAW,aAAa,MAAM,CAAA;AAAA,OACzB,MAAA;AACL,QAAA,UAAA,CAAW,cAAc,MAAM,CAAA;AAAA;AACjC,KACF;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,2BAAA;AAAA,IACA,uBAAA;AAAA,IACA,eAAiB,EAAA;AAAA,MACfwB,yBAAa,CAAA;AAAA,IACf,iBAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,YAAA,CAAa,OAAU,GAAA,SAAA;AAEvB,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAO,CAAA,CAAC,MAAM,CAAE,CAAA,MAAA,KAAW,IAAI,CAAE,CAAA,MAAA;AAE7D,EAAM,MAAA;AAAA,IACJ,mBAAA;AAAA,IACA,YAAc,EAAA,QAAA;AAAA,IACd,OAAS,EAAA,eAAA;AAAA,IACT,SAAW,EAAA,iBAAA;AAAA,IACX,GAAG;AAAA,MACDC,2CAAsB,CAAA;AAAA,IACxB,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,uBAAuB,WAAa,EAAA,UAAA;AAAA,IACpC,SAAA;AAAA,IACA,aAAa,WAAY,CAAA,KAAA;AAAA,IACzB,gBAAkB,EAAA,oBAAA;AAAA,IAClB,eAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAe,EAAA,iBAAA;AAAA,IACf,aAAe,EAAA,KAAA;AAAA,IACf,kBAAkB,oBAAqB,CAAA;AAAA,GACxC,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,MAAQ,EAAA,WAAA;AAAA,IACR,aAAe,EAAA,kBAAA;AAAA,IACf,SAAW,EAAA,cAAA;AAAA,IACX,OAAS,EAAA;AAAA,MACPC,6BAAe,CAAA;AAAA,IACjB;AAAA,GACD,CAAA;AAED,EAAA,MAAM,WAAc,GAAA1B,iBAAA;AAAA,IAClB,CAAC,CAA+B,KAAA;AAE9B,MAAgB,eAAA,EAAA;AAEhB,MAAI,IAAA,CAAC,EAAE,gBAAkB,EAAA;AACvB,QAAA,YAAA,CAAa,CAAC,CAAA;AAAA;AAChB,KACF;AAAA,IACA,CAAC,cAAc,eAAe;AAAA,GAChC;AAEA,EAAA,MAAM,gBAAgB2B,uCAAoB,CAAA;AAAA,IACxC,OAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAa,WAAY,CAAA;AAAA,GAC1B,CAAA;AAED,EAAA,MAAM,iBAAoB,GAAA3B,iBAAA;AAAA,IACxB,CAACa,QAAgC,KAAA;AAC/B,MAAA,UAAA,CAAW,UAAUA,QAAQ,CAAA,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAI,IAAI,CAAA;AAAA,KACpD;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,mBAAsB,GAAAb,iBAAA;AAAA,IAC1B,CAAC,MAAoC,KAAA;AACnC,MAAI,IAAA4B,sBAAA,CAAc,MAAM,CAAG,EAAA;AACzB,QAAA,UAAA,CAAW,UAAU,EAAC;AAAA,OACjB,MAAA;AACL,QAAA,IAAI,cAAc,UAAW,CAAA,OAAA,EAAS,QAAS,CAAA,MAAA,CAAO,IAAI,CAAG,EAAA;AAC3D,UAAW,UAAA,CAAA,OAAA,GAAU,WAAW,OAAQ,CAAA,MAAA;AAAA,YACtC,CAAC,UAAe,KAAA,UAAA,KAAe,MAAO,CAAA;AAAA,WACxC;AAAA;AACF;AACF,KACF;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAM,MAAA;AAAA,IACJ,eAAA;AAAA,IACA,2BAAA;AAAA,IACA,SAAW,EAAA,oBAAA;AAAA,IACX,UAAY,EAAA;AAAA,MACVC,yBAAa,CAAA;AAAA,IACf,sBAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,mBAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,iBAAmB,EAAA,qBAAA;AAAA,IACnB;AAAA,GACD,CAAA;AAED,EAAA,MAAM,qBAAwB,GAAA7B,iBAAA;AAAA,IAC5B,CAAC8B,UAA8B,KAAA;AAC7B,MAAsB,qBAAA,CAAA;AAAA,QACpB,IAAM,EAAA;AAAA,OACP,CAAA;AACD,MAAA,iBAAA,GAAoBA,UAAS,CAAA;AAAA,KAC/B;AAAA,IACA,CAAC,uBAAuB,iBAAiB;AAAA,GAC3C;AAEA,EAAM,MAAA;AAAA,IACJ,WAAa,EAAA,sBAAA;AAAA,IACb,SAAA;AAAA,IACA,SAAW,EAAA;AAAA,MACTC,2CAAsB,CAAA;AAAA,IACxB,uBAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAmB,EAAA,qBAAA;AAAA,IACnB;AAAA,GACD,CAAA;AAED,EAAA,MAAM,cAAiB,GAAA/B,iBAAA;AAAA,IACrB,CAAC,GAAA,EAAK,OAAS,EAAA,WAAA,EAAa,qBAA0B,KAAA;AACpD,MAAA,uBAAA;AAAA,QACE,GAAA;AAAA,QACA,OAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,cAAA,GAAiB,KAAK,OAAO,CAAA;AAAA,KAC/B;AAAA,IACA,CAAC,gBAAgB,uBAAuB;AAAA,GAC1C;AAEA,EAAA,MAAM,aAAgB,GAAAA,iBAAA;AAAA,IACpB,CAAC,CAAkC,KAAA;AAGjC,MAAA,yBAAA,GAA4B,CAAC,CAAA;AAC7B,MAAI,IAAA,CAAC,EAAE,gBAAkB,EAAA;AACvB,QAAA,iBAAA,CAAkB,CAAC,CAAA;AAAA;AAErB,MAAI,IAAA,CAAC,EAAE,gBAAkB,EAAA;AACvB,QAAA,cAAA,CAAe,CAAC,CAAA;AAAA;AAElB,MAAI,IAAA,CAAC,EAAE,gBAAkB,EAAA;AACvB,QAAA,oBAAA,CAAqB,CAAC,CAAA;AAAA;AACxB,KACF;AAAA,IACA;AAAA,MACE,yBAAA;AAAA,MACA,iBAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,YAAe,GAAAA,iBAAA;AAAA,IACnB,CAAC,YAAYa,QAAY,KAAA;AACvB,MAAA,MAAM,cAAiB,GAAA;AAAA,QACrB,GAAGT,aAAA;AAAA,QACH,OAAAS,EAAAA;AAAA,OACF;AAEA,MAAA,cAAA,CAAe,OAAU,GAAA,cAAA;AAEzB,MAAyB,wBAAA,CAAA;AAAA,QACvB,cAAA;AAAA,QACA,IAAM,EAAA,MAAA;AAAA,QACN,WAAa,EAAA,cAAA;AAAA,QACb;AAAA,OACD,CAAA;AACD,MAAA,cAAA,GAAiB,cAAgB,EAAA;AAAA,QAC/B,UAAA;AAAA,QACA,OAAAA,EAAAA,QAAAA;AAAA,QACA,IAAM,EAAA;AAAA,OACP,CAAA;AAED,MAAA,UAAA,CAAW,MAAM;AACf,QAAM,MAAA,UAAA,GAAamB,2BAAc,CAAA,YAAA,EAAc,UAAU,CAAA;AACzD,QAAA,IAAI,UAAY,EAAA;AACd,UAAM,MAAA,EAAE,cAAiB,GAAA,UAAA;AACzB,UAAM,MAAA,EAAE,YAAa,EAAA,GAAI,UAAW,CAAA,aAAA;AACpC,UAAM,MAAA,GAAA,GAAM,QAAS,CAAA,YAAA,IAAgB,IAAI,CAAA;AACzC,UAAM,MAAA,GAAA,GAAM,QAAS,CAAA,YAAA,IAAgB,IAAI,CAAA;AACzC,UAAI,IAAA,CAAC,KAAM,CAAA,GAAG,CAAK,IAAA,GAAA,KAAQ,CAAM,CAAA,IAAA,CAAC,KAAM,CAAA,GAAG,CAAK,IAAA,GAAA,KAAQ,CAAI,CAAA,EAAA;AAC1D,YAAU,SAAA,CAAA,CAAC,GAAK,EAAA,GAAG,CAAC,CAAA;AAAA;AACtB;AACF,SACC,GAAG,CAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,cAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,wBAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA5B;AAAA;AACF,GACF;AAEA,EAAA,MAAM,aAAgB,GAAAJ,iBAAA;AAAA;AAAA;AAAA,IAGpB,CAAC,aAAuB,KAAA;AACtB,MAAA,MAAA,GAAS,aAAa,CAAA;AAAA,KACxB;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AA+BA,EAAA,MAAM,kBAAqB,GAAAA,iBAAA;AAAA,IACzB,CAAC,aAAkB,KAAA;AACjB,MAAM,MAAA,EAAE,oBAAuB,GAAA,aAAA;AAC/B,MAAA,MAAM,QACJ,GAAAiC,wBAAA,CAAgB,kBAAkB,CAAA,GAAI,YAAY,KAAQ,GAAA,CAAA;AAC5D,MAAM,MAAA,GAAA,GAAM,YAAY,OAAQ,CAAA,IAAA,CAAK,CAACC,IAAQA,KAAAA,IAAAA,CAAI,UAAU,QAAQ,CAAA;AACpE,MAAA,IAAI,GAAK,EAAA;AACP,QAAA,aAAA,CAAc,WAAW,GAAG,CAAA;AAAA;AAI9B,MAAA,WAAA,GAAc,aAAa,CAAA;AAAA,KAC7B;AAAA,IACA,CAAC,WAAA,EAAa,WAAY,CAAA,KAAA,EAAO,WAAW;AAAA,GAC9C;AAEA,EAAA,MAAM,sBAAyB,GAAAlC,iBAAA;AAAA,IAC7B,CAAC,QAAgB,KAAkB,KAAA;AACjC,MAAe,cAAA,CAAA,EAAE,MAAQ,EAAA,KAAA,EAAO,CAAA;AAAA,KAClC;AAAA,IACA;AAAC,GACH;AAGA,EAAA,MAAM,EAAE,WAAa,EAAA,gBAAA,EAAkB,SAAW,EAAA,YAAA,KAChD,cAAe,CAAA;AAAA,IACb,aAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAoB,EAAA,CAAA,QAAA,CAAA;AAAA,IACpB,EAAA;AAAA,IACA,WAAa,EAAA,kBAAA;AAAA,IACb,MAAQ,EAAA,aAAA;AAAA,IACR,WAAa,EAAA,UAAA;AAAA,IACb,SAAW,EAAA;AAAA,GACZ,CAAA;AAEH,EAAA,MAAM,eAAkB,GAAAA,iBAAA;AAAA,IACtB,CAAC,GAAQ,KAAA;AACP,MAAA,gBAAA,GAAmB,GAAG,CAAA;AACtB,MAAI,IAAA,CAAC,GAAI,CAAA,oBAAA,EAAwB,EAAA;AAC/B,QAAA,sBAAA,GAAyB,GAAG,CAAA;AAAA;AAC9B,KACF;AAAA,IACA,CAAC,kBAAkB,sBAAsB;AAAA,GAC3C;AAEA,EAAO,OAAA;AAAA,IACL,GAAG,cAAA;AAAA,IACH,eAAA;AAAA,IACA,iBAAiB,UAAW,CAAA,IAAA;AAAA,IAC5B,SAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,uBAAuB,WAAa,EAAA,UAAA;AAAA,IACpC,2BAAA;AAAA,IACA,uBAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,kBAAkB,mBAAoB,CAAA,OAAA;AAAA,IACtC,MAAQ,EAAA,WAAA;AAAA,IACR,2BAAA;AAAA,IACA,aAAe,EAAA,kBAAA;AAAA,IACf,OAAS,EAAA,WAAA;AAAA,IACT,SAAW,EAAA,aAAA;AAAA,IACX,WAAa,EAAA,eAAA;AAAA,IACb,aAAA;AAAA;AAAA,IAEA,sBAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,UAAY,EAAA,cAAA;AAAA,IACZ,YAAc,EAAA,UAAA;AAAA,IACd,cAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,WAAA;AAAA;AAAA,IAEA,eAAA;AAAA,IACA,YAAA;AAAA,iBACAI,aAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuContextMenu = require('@vuu-ui/vuu-context-menu');
|
|
4
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
-
var react = require('react');
|
|
6
|
-
|
|
7
|
-
const NO_ROWS = [];
|
|
8
|
-
const isTableLocation = (location) => ["grid", "header", "filter"].includes(location);
|
|
9
|
-
const getDataSourceRow = (dataRows, rowIndex) => {
|
|
10
|
-
const row = dataRows.find((dataRow) => dataRow.index === rowIndex);
|
|
11
|
-
if (row) {
|
|
12
|
-
return row;
|
|
13
|
-
} else {
|
|
14
|
-
throw Error(
|
|
15
|
-
`useTableContextMenu data row not found for rowIndex ${rowIndex}`
|
|
16
|
-
);
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
const useTableContextMenu = ({
|
|
20
|
-
allowContextMenu = true,
|
|
21
|
-
columns,
|
|
22
|
-
dataRows,
|
|
23
|
-
dataSource,
|
|
24
|
-
getSelectedRows,
|
|
25
|
-
headerCount = 1
|
|
26
|
-
}) => {
|
|
27
|
-
const showContextMenu = vuuContextMenu.useContextMenu();
|
|
28
|
-
const onContextMenu = react.useCallback(
|
|
29
|
-
(evt) => {
|
|
30
|
-
const target = evt.target;
|
|
31
|
-
const cellEl = target?.closest("div[role='cell']");
|
|
32
|
-
const rowEl = target?.closest("div[role='row']");
|
|
33
|
-
if (cellEl && rowEl) {
|
|
34
|
-
const { selectedRowsCount } = dataSource;
|
|
35
|
-
const rowIndex = vuuUtils.getAriaRowIndex(rowEl) - headerCount - 1;
|
|
36
|
-
const ariaColIndex = vuuUtils.getAriaColIndex(cellEl);
|
|
37
|
-
const dataRow = getDataSourceRow(dataRows, rowIndex);
|
|
38
|
-
const column = vuuUtils.columnByAriaIndex(
|
|
39
|
-
columns,
|
|
40
|
-
ariaColIndex
|
|
41
|
-
);
|
|
42
|
-
if (!column.isSystemColumn) {
|
|
43
|
-
const menuOptions = {
|
|
44
|
-
column,
|
|
45
|
-
columns,
|
|
46
|
-
dataRow,
|
|
47
|
-
selectedRows: selectedRowsCount === 0 ? NO_ROWS : getSelectedRows(),
|
|
48
|
-
viewport: dataSource.viewport
|
|
49
|
-
};
|
|
50
|
-
const menuShowing = showContextMenu(evt, "grid", menuOptions, {
|
|
51
|
-
onOpenChange: (isOpen) => {
|
|
52
|
-
console.log(`[useTableContextMenu] onOpenChange ${isOpen}`);
|
|
53
|
-
cellEl.classList.remove("ContextOpen");
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
if (menuShowing) {
|
|
57
|
-
cellEl.classList.add("ContextOpen");
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
[
|
|
63
|
-
columns,
|
|
64
|
-
dataRows,
|
|
65
|
-
dataSource,
|
|
66
|
-
getSelectedRows,
|
|
67
|
-
headerCount,
|
|
68
|
-
showContextMenu
|
|
69
|
-
]
|
|
70
|
-
);
|
|
71
|
-
return allowContextMenu ? onContextMenu : void 0;
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
exports.isTableLocation = isTableLocation;
|
|
75
|
-
exports.useTableContextMenu = useTableContextMenu;
|
|
76
|
-
//# sourceMappingURL=useTableContextMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useTableContextMenu.js","sources":["../../../packages/vuu-table/src/useTableContextMenu.ts"],"sourcesContent":["import { useContextMenu } from \"@vuu-ui/vuu-context-menu\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n DataRow,\n RuntimeColumnDescriptor,\n TableContextMenuOptions,\n TableMenuLocation,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n columnByAriaIndex,\n getAriaColIndex,\n getAriaRowIndex,\n} from \"@vuu-ui/vuu-utils\";\nimport { MouseEvent, useCallback } from \"react\";\n\nexport interface TableContextMenuHookProps {\n allowContextMenu?: boolean;\n columns: ColumnDescriptor[];\n dataRows: DataRow[];\n dataSource: DataSource;\n getSelectedRows: () => DataRow[];\n // TODO can we eliminate this it is only needed to convert aria row index to actual row index\n headerCount?: number;\n}\n\nconst NO_ROWS: DataRow[] = [] as const;\n\nexport const isTableLocation = (\n location: string,\n): location is TableMenuLocation =>\n [\"grid\", \"header\", \"filter\"].includes(location);\n\nconst getDataSourceRow = (dataRows: DataRow[], rowIndex: number) => {\n const row = dataRows.find((dataRow) => dataRow.index === rowIndex);\n if (row) {\n return row;\n } else {\n throw Error(\n `useTableContextMenu data row not found for rowIndex ${rowIndex}`,\n );\n }\n};\n\nexport const useTableContextMenu = ({\n allowContextMenu = true,\n columns,\n dataRows,\n dataSource,\n getSelectedRows,\n headerCount = 1,\n}: TableContextMenuHookProps) => {\n const showContextMenu = useContextMenu();\n\n const onContextMenu = useCallback(\n (evt: MouseEvent<HTMLElement>) => {\n const target = evt.target as HTMLElement;\n const cellEl = target?.closest<HTMLElement>(\"div[role='cell']\");\n const rowEl = target?.closest<HTMLElement>(\"div[role='row']\");\n if (cellEl && rowEl) {\n const { selectedRowsCount } = dataSource;\n const rowIndex = getAriaRowIndex(rowEl) - headerCount - 1;\n const ariaColIndex = getAriaColIndex(cellEl);\n const dataRow = getDataSourceRow(dataRows, rowIndex);\n const column = columnByAriaIndex(\n columns as RuntimeColumnDescriptor[],\n ariaColIndex,\n );\n\n if (!column.isSystemColumn) {\n // TODO does it really make sense to collect selected rows ?\n // We only have access to rows in local cache\n const menuOptions: TableContextMenuOptions = {\n column,\n columns,\n dataRow,\n selectedRows: selectedRowsCount === 0 ? NO_ROWS : getSelectedRows(),\n viewport: dataSource.viewport,\n };\n\n const menuShowing = showContextMenu(evt, \"grid\", menuOptions, {\n onOpenChange: (isOpen: boolean) => {\n console.log(`[useTableContextMenu] onOpenChange ${isOpen}`);\n cellEl.classList.remove(\"ContextOpen\");\n },\n });\n if (menuShowing) {\n cellEl.classList.add(\"ContextOpen\");\n }\n }\n }\n },\n [\n columns,\n dataRows,\n dataSource,\n getSelectedRows,\n headerCount,\n showContextMenu,\n ],\n );\n\n return allowContextMenu ? onContextMenu : undefined;\n};\n"],"names":["useContextMenu","useCallback","getAriaRowIndex","getAriaColIndex","columnByAriaIndex"],"mappings":";;;;;;AA0BA,MAAM,UAAqB,EAAC;AAEf,MAAA,eAAA,GAAkB,CAC7B,QAEA,KAAA,CAAC,QAAQ,QAAU,EAAA,QAAQ,CAAE,CAAA,QAAA,CAAS,QAAQ;AAEhD,MAAM,gBAAA,GAAmB,CAAC,QAAA,EAAqB,QAAqB,KAAA;AAClE,EAAA,MAAM,MAAM,QAAS,CAAA,IAAA,CAAK,CAAC,OAAY,KAAA,OAAA,CAAQ,UAAU,QAAQ,CAAA;AACjE,EAAA,IAAI,GAAK,EAAA;AACP,IAAO,OAAA,GAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,uDAAuD,QAAQ,CAAA;AAAA,KACjE;AAAA;AAEJ,CAAA;AAEO,MAAM,sBAAsB,CAAC;AAAA,EAClC,gBAAmB,GAAA,IAAA;AAAA,EACnB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAc,GAAA;AAChB,CAAiC,KAAA;AAC/B,EAAA,MAAM,kBAAkBA,6BAAe,EAAA;AAEvC,EAAA,MAAM,aAAgB,GAAAC,iBAAA;AAAA,IACpB,CAAC,GAAiC,KAAA;AAChC,MAAA,MAAM,SAAS,GAAI,CAAA,MAAA;AACnB,MAAM,MAAA,MAAA,GAAS,MAAQ,EAAA,OAAA,CAAqB,kBAAkB,CAAA;AAC9D,MAAM,MAAA,KAAA,GAAQ,MAAQ,EAAA,OAAA,CAAqB,iBAAiB,CAAA;AAC5D,MAAA,IAAI,UAAU,KAAO,EAAA;AACnB,QAAM,MAAA,EAAE,mBAAsB,GAAA,UAAA;AAC9B,QAAA,MAAM,QAAW,GAAAC,wBAAA,CAAgB,KAAK,CAAA,GAAI,WAAc,GAAA,CAAA;AACxD,QAAM,MAAA,YAAA,GAAeC,yBAAgB,MAAM,CAAA;AAC3C,QAAM,MAAA,OAAA,GAAU,gBAAiB,CAAA,QAAA,EAAU,QAAQ,CAAA;AACnD,QAAA,MAAM,MAAS,GAAAC,0BAAA;AAAA,UACb,OAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAI,IAAA,CAAC,OAAO,cAAgB,EAAA;AAG1B,UAAA,MAAM,WAAuC,GAAA;AAAA,YAC3C,MAAA;AAAA,YACA,OAAA;AAAA,YACA,OAAA;AAAA,YACA,YAAc,EAAA,iBAAA,KAAsB,CAAI,GAAA,OAAA,GAAU,eAAgB,EAAA;AAAA,YAClE,UAAU,UAAW,CAAA;AAAA,WACvB;AAEA,UAAA,MAAM,WAAc,GAAA,eAAA,CAAgB,GAAK,EAAA,MAAA,EAAQ,WAAa,EAAA;AAAA,YAC5D,YAAA,EAAc,CAAC,MAAoB,KAAA;AACjC,cAAQ,OAAA,CAAA,GAAA,CAAI,CAAsC,mCAAA,EAAA,MAAM,CAAE,CAAA,CAAA;AAC1D,cAAO,MAAA,CAAA,SAAA,CAAU,OAAO,aAAa,CAAA;AAAA;AACvC,WACD,CAAA;AACD,UAAA,IAAI,WAAa,EAAA;AACf,YAAO,MAAA,CAAA,SAAA,CAAU,IAAI,aAAa,CAAA;AAAA;AACpC;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,OAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,OAAO,mBAAmB,aAAgB,GAAA,KAAA,CAAA;AAC5C;;;;;"}
|
package/cjs/useTableModel.js
DELETED
|
@@ -1,421 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuDataReact = require('@vuu-ui/vuu-data-react');
|
|
4
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
-
var react = require('react');
|
|
6
|
-
|
|
7
|
-
const { info } = vuuUtils.logger("useTableModel");
|
|
8
|
-
const DEFAULT_COLUMN_WIDTH = 100;
|
|
9
|
-
const columnWithoutDataType = ({ serverDataType }) => serverDataType === void 0;
|
|
10
|
-
const getDataType = (column, tableSchema) => {
|
|
11
|
-
const schemaColumn = tableSchema?.columns.find(
|
|
12
|
-
({ name }) => name === column.name
|
|
13
|
-
);
|
|
14
|
-
if (schemaColumn) {
|
|
15
|
-
return schemaColumn.serverDataType;
|
|
16
|
-
} else {
|
|
17
|
-
return column.serverDataType;
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
const CheckboxColumnDescriptor = (selectionModel, width = 25) => ({
|
|
21
|
-
allowColumnHeaderMenu: false,
|
|
22
|
-
className: selectionModel === "checkbox-disabled" ? "vuuDisabled" : void 0,
|
|
23
|
-
label: "",
|
|
24
|
-
name: "",
|
|
25
|
-
width,
|
|
26
|
-
resizeable: false,
|
|
27
|
-
sortable: false,
|
|
28
|
-
isSystemColumn: true,
|
|
29
|
-
type: {
|
|
30
|
-
name: "checkbox",
|
|
31
|
-
renderer: {
|
|
32
|
-
name: "checkbox-row-selector-cell"
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
const PinnedCheckboxColumnDescriptor = (selectionModel, width) => ({
|
|
37
|
-
...CheckboxColumnDescriptor(selectionModel, width),
|
|
38
|
-
pin: "left"
|
|
39
|
-
});
|
|
40
|
-
const getDefaultAlignment = (serverDataType) => serverDataType === void 0 ? void 0 : vuuUtils.isNumericType(serverDataType) ? "right" : "left";
|
|
41
|
-
const tableModelReducer = (state, action) => {
|
|
42
|
-
info?.(`TableModelReducer ${action.type}`);
|
|
43
|
-
switch (action.type) {
|
|
44
|
-
case "init": {
|
|
45
|
-
if (state.tableConfig.columnLayout === "manual" && action.tableConfig.columnLayout === "fit") {
|
|
46
|
-
return init({
|
|
47
|
-
...action,
|
|
48
|
-
tableConfig: vuuUtils.applyRuntimeColumnWidthsToConfig(
|
|
49
|
-
action.tableConfig,
|
|
50
|
-
state.columns
|
|
51
|
-
)
|
|
52
|
-
});
|
|
53
|
-
} else {
|
|
54
|
-
return init(action, state);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
case "moveColumn":
|
|
58
|
-
return moveColumn(state, action);
|
|
59
|
-
case "resizeColumn":
|
|
60
|
-
return resizeColumn(state, action);
|
|
61
|
-
case "setTableSchema":
|
|
62
|
-
return setTableSchema(state, action);
|
|
63
|
-
case "hideColumns":
|
|
64
|
-
return hideColumns(state, action);
|
|
65
|
-
case "showColumns":
|
|
66
|
-
return showColumns(state, action);
|
|
67
|
-
case "updateColumnProp":
|
|
68
|
-
return updateColumnProp(state, action);
|
|
69
|
-
case "tableConfig":
|
|
70
|
-
return updateTableConfig(state, action);
|
|
71
|
-
default:
|
|
72
|
-
console.log(`unhandled action ${action.type}`);
|
|
73
|
-
return state;
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
const useTableModel = ({
|
|
77
|
-
config: tableConfigProp,
|
|
78
|
-
dataSource,
|
|
79
|
-
selectionModel,
|
|
80
|
-
availableWidth
|
|
81
|
-
}) => {
|
|
82
|
-
const [state, dispatchTableModelAction] = react.useReducer(
|
|
83
|
-
tableModelReducer,
|
|
84
|
-
{
|
|
85
|
-
availableWidth,
|
|
86
|
-
tableConfig: tableConfigProp,
|
|
87
|
-
dataSource,
|
|
88
|
-
selectionModel
|
|
89
|
-
},
|
|
90
|
-
init
|
|
91
|
-
);
|
|
92
|
-
const { columns, headings, tableConfig, ...tableAttributes } = state;
|
|
93
|
-
return {
|
|
94
|
-
columns,
|
|
95
|
-
dispatchTableModelAction,
|
|
96
|
-
headings,
|
|
97
|
-
tableAttributes,
|
|
98
|
-
tableConfig
|
|
99
|
-
};
|
|
100
|
-
};
|
|
101
|
-
function init({ availableWidth, dataSource, selectionModel, tableConfig }, previousConfig) {
|
|
102
|
-
const { checkboxColumnWidth = 25, columns, ...tableAttributes } = tableConfig;
|
|
103
|
-
const { config: dataSourceConfig, tableSchema } = dataSource;
|
|
104
|
-
const toRuntimeColumnDescriptor = columnDescriptorToRuntimeColumDescriptor(
|
|
105
|
-
tableAttributes,
|
|
106
|
-
tableSchema
|
|
107
|
-
);
|
|
108
|
-
const runtimeColumns = [];
|
|
109
|
-
let colIndex = selectionModel?.startsWith("checkbox") ? 2 : 1;
|
|
110
|
-
vuuUtils.assertAllColumnsAreIncludedInSubscription(columns, dataSourceConfig.columns);
|
|
111
|
-
for (const column of columns) {
|
|
112
|
-
runtimeColumns.push(
|
|
113
|
-
toRuntimeColumnDescriptor(column, column.hidden ? -1 : colIndex)
|
|
114
|
-
);
|
|
115
|
-
if (!column.hidden) {
|
|
116
|
-
colIndex += 1;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (selectionModel?.startsWith("checkbox")) {
|
|
120
|
-
const somePinnedLeft = runtimeColumns.some((col) => col.pin === "left");
|
|
121
|
-
runtimeColumns.splice(
|
|
122
|
-
0,
|
|
123
|
-
0,
|
|
124
|
-
toRuntimeColumnDescriptor(
|
|
125
|
-
somePinnedLeft ? PinnedCheckboxColumnDescriptor(selectionModel, checkboxColumnWidth) : CheckboxColumnDescriptor(selectionModel, checkboxColumnWidth),
|
|
126
|
-
1
|
|
127
|
-
)
|
|
128
|
-
);
|
|
129
|
-
}
|
|
130
|
-
const { columnLayout = "static", selectionBookendWidth = 4 } = tableConfig;
|
|
131
|
-
const runtimeColumnsWithLayout = vuuUtils.applyWidthToColumns(runtimeColumns, {
|
|
132
|
-
availableWidth,
|
|
133
|
-
columnLayout
|
|
134
|
-
});
|
|
135
|
-
const columnsInRenderOrder = runtimeColumnsWithLayout.some(vuuUtils.isPinned) ? vuuUtils.sortPinnedColumns(runtimeColumnsWithLayout, selectionBookendWidth) : runtimeColumnsWithLayout;
|
|
136
|
-
let state = {
|
|
137
|
-
availableWidth,
|
|
138
|
-
columns: columnsInRenderOrder,
|
|
139
|
-
headings: vuuUtils.getTableHeadings(columnsInRenderOrder),
|
|
140
|
-
tableConfig,
|
|
141
|
-
...tableAttributes
|
|
142
|
-
};
|
|
143
|
-
if (dataSourceConfig) {
|
|
144
|
-
const { columns: _, ...rest } = dataSourceConfig;
|
|
145
|
-
state = updateTableConfig(state, {
|
|
146
|
-
type: "tableConfig",
|
|
147
|
-
...rest,
|
|
148
|
-
confirmed: vuuUtils.checkConfirmationPending(previousConfig)
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
return state;
|
|
152
|
-
}
|
|
153
|
-
const getLabel = (label, columnFormatHeader) => {
|
|
154
|
-
if (columnFormatHeader === "uppercase") {
|
|
155
|
-
return label.toUpperCase();
|
|
156
|
-
} else if (columnFormatHeader === "capitalize") {
|
|
157
|
-
return label[0].toUpperCase() + label.slice(1).toLowerCase();
|
|
158
|
-
}
|
|
159
|
-
return label;
|
|
160
|
-
};
|
|
161
|
-
const columnDescriptorToRuntimeColumDescriptor = (tableAttributes, tableSchema) => (column, ariaColIndex) => {
|
|
162
|
-
const { columnDefaultWidth = DEFAULT_COLUMN_WIDTH, columnFormatHeader } = tableAttributes;
|
|
163
|
-
const serverDataType = getDataType(column, tableSchema);
|
|
164
|
-
const {
|
|
165
|
-
align = getDefaultAlignment(serverDataType),
|
|
166
|
-
name,
|
|
167
|
-
label = vuuUtils.getColumnLabel(column),
|
|
168
|
-
source = "server",
|
|
169
|
-
width = columnDefaultWidth,
|
|
170
|
-
...rest
|
|
171
|
-
} = column;
|
|
172
|
-
const runtimeColumnWithDefaults = {
|
|
173
|
-
...rest,
|
|
174
|
-
align,
|
|
175
|
-
ariaColIndex,
|
|
176
|
-
CellRenderer: vuuUtils.getCellRenderer(column),
|
|
177
|
-
HeaderCellContentRenderer: vuuUtils.getColumnHeaderContentRenderer(column),
|
|
178
|
-
HeaderCellLabelRenderer: vuuUtils.getColumnHeaderLabelRenderer(column),
|
|
179
|
-
clientSideEditValidationCheck: vuuUtils.hasValidationRules(column.type) ? vuuDataReact.buildValidationChecker(column.type.rules) : void 0,
|
|
180
|
-
label: getLabel(label, columnFormatHeader),
|
|
181
|
-
name,
|
|
182
|
-
originalIdx: ariaColIndex,
|
|
183
|
-
serverDataType,
|
|
184
|
-
source,
|
|
185
|
-
valueFormatter: vuuUtils.getValueFormatter(column, serverDataType),
|
|
186
|
-
width
|
|
187
|
-
};
|
|
188
|
-
if (vuuUtils.isGroupColumn(runtimeColumnWithDefaults)) {
|
|
189
|
-
runtimeColumnWithDefaults.columns = runtimeColumnWithDefaults.columns.map(
|
|
190
|
-
(col) => columnDescriptorToRuntimeColumDescriptor(tableAttributes)(col, -1)
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
return runtimeColumnWithDefaults;
|
|
194
|
-
};
|
|
195
|
-
function moveColumn(state, { column, moveBy }) {
|
|
196
|
-
const { columns } = state;
|
|
197
|
-
if (typeof moveBy === "number") {
|
|
198
|
-
const idx = columns.indexOf(column);
|
|
199
|
-
const newColumns = columns.slice();
|
|
200
|
-
const [movedColumns] = newColumns.splice(idx, 1);
|
|
201
|
-
newColumns.splice(idx + moveBy, 0, movedColumns);
|
|
202
|
-
return {
|
|
203
|
-
...state,
|
|
204
|
-
columns: newColumns
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
return state;
|
|
208
|
-
}
|
|
209
|
-
function hideColumns(state, { columns }) {
|
|
210
|
-
console.log(`[useTableModel] hideColumns ${JSON.stringify(columns)}`);
|
|
211
|
-
if (columns.some((col) => col.hidden !== true)) {
|
|
212
|
-
return columns.reduce((s, c) => {
|
|
213
|
-
if (c.hidden !== true) {
|
|
214
|
-
return updateColumnProp(s, {
|
|
215
|
-
type: "updateColumnProp",
|
|
216
|
-
column: c,
|
|
217
|
-
hidden: true
|
|
218
|
-
});
|
|
219
|
-
} else {
|
|
220
|
-
return s;
|
|
221
|
-
}
|
|
222
|
-
}, state);
|
|
223
|
-
} else {
|
|
224
|
-
return state;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
function showColumns(state, { columns }) {
|
|
228
|
-
if (columns.some((col) => col.hidden)) {
|
|
229
|
-
return columns.reduce((s, c) => {
|
|
230
|
-
if (c.hidden) {
|
|
231
|
-
return updateColumnProp(s, {
|
|
232
|
-
type: "updateColumnProp",
|
|
233
|
-
column: c,
|
|
234
|
-
hidden: false
|
|
235
|
-
});
|
|
236
|
-
} else {
|
|
237
|
-
return s;
|
|
238
|
-
}
|
|
239
|
-
}, state);
|
|
240
|
-
} else {
|
|
241
|
-
return state;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
function resizeColumn(state, { column, phase, width }) {
|
|
245
|
-
const type = "updateColumnProp";
|
|
246
|
-
const resizing = phase !== "end";
|
|
247
|
-
switch (phase) {
|
|
248
|
-
case "begin":
|
|
249
|
-
return updateColumnProp(state, { type, column, resizing });
|
|
250
|
-
case "end": {
|
|
251
|
-
const { tableConfig } = state;
|
|
252
|
-
const isFit = tableConfig.columnLayout === "fit";
|
|
253
|
-
let newState = isFit ? {
|
|
254
|
-
...state,
|
|
255
|
-
tableConfig: vuuUtils.applyRuntimeColumnWidthsToConfig(
|
|
256
|
-
tableConfig,
|
|
257
|
-
state.columns
|
|
258
|
-
)
|
|
259
|
-
} : state;
|
|
260
|
-
if (column.pin && !column.pinnedWidth && width) {
|
|
261
|
-
newState = adjustPinOffsets(newState, column, width);
|
|
262
|
-
}
|
|
263
|
-
return updateColumnProp(newState, { type, column, resizing, width });
|
|
264
|
-
}
|
|
265
|
-
case "resize":
|
|
266
|
-
return updateColumnProp(state, { type, column, width });
|
|
267
|
-
default:
|
|
268
|
-
throw Error(`useTableModel.resizeColumn, invalid resizePhase ${phase}`);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
function setTableSchema(state, { tableSchema }) {
|
|
272
|
-
const { columns } = state;
|
|
273
|
-
if (columns.some(columnWithoutDataType)) {
|
|
274
|
-
const cols = columns.map((column) => {
|
|
275
|
-
const serverDataType = getDataType(column, tableSchema);
|
|
276
|
-
return {
|
|
277
|
-
...column,
|
|
278
|
-
align: column.align ?? getDefaultAlignment(serverDataType),
|
|
279
|
-
serverDataType
|
|
280
|
-
};
|
|
281
|
-
});
|
|
282
|
-
return {
|
|
283
|
-
...state,
|
|
284
|
-
columns: cols
|
|
285
|
-
};
|
|
286
|
-
} else {
|
|
287
|
-
return state;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
function adjustPinOffsets(state, column, width) {
|
|
291
|
-
const newColumns = state.columns.slice();
|
|
292
|
-
if (column.pin === "left") {
|
|
293
|
-
const diff = width - column.width;
|
|
294
|
-
const colIndex = newColumns.findIndex((col) => col.name === column.name);
|
|
295
|
-
for (let i = colIndex + 1; i < newColumns.length; i++) {
|
|
296
|
-
const pinnedColumn = newColumns.at(i);
|
|
297
|
-
if (pinnedColumn?.pin === "left" && typeof pinnedColumn?.pinnedOffset === "number") {
|
|
298
|
-
newColumns[i] = {
|
|
299
|
-
...newColumns[i],
|
|
300
|
-
pinnedOffset: pinnedColumn.pinnedOffset + diff
|
|
301
|
-
};
|
|
302
|
-
if (pinnedColumn.pinnedWidth) {
|
|
303
|
-
newColumns[i] = {
|
|
304
|
-
...newColumns[i],
|
|
305
|
-
pinnedWidth: pinnedColumn.pinnedWidth + diff
|
|
306
|
-
};
|
|
307
|
-
break;
|
|
308
|
-
}
|
|
309
|
-
} else {
|
|
310
|
-
throw Error(
|
|
311
|
-
`[useTableModel] adjustPinOffsets, invalid column pin, no endPin following pinned column`
|
|
312
|
-
);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
} else if (column.pin === "right") {
|
|
316
|
-
throw "whoaaargh";
|
|
317
|
-
} else {
|
|
318
|
-
throw Error(
|
|
319
|
-
`[useTableModel] adjustPinOffsets, invalid param, column is not pinned `
|
|
320
|
-
);
|
|
321
|
-
}
|
|
322
|
-
return {
|
|
323
|
-
...state,
|
|
324
|
-
columns: newColumns
|
|
325
|
-
};
|
|
326
|
-
}
|
|
327
|
-
function updateColumnProp(state, action) {
|
|
328
|
-
let { columns, tableConfig } = state;
|
|
329
|
-
const { align, column, hidden, label, resizing, width } = action;
|
|
330
|
-
const targetColumn = columns.find((col) => col.name === column.name);
|
|
331
|
-
if (targetColumn) {
|
|
332
|
-
if (align === "left" || align === "right") {
|
|
333
|
-
columns = vuuUtils.replaceColumn(columns, { ...targetColumn, align });
|
|
334
|
-
}
|
|
335
|
-
if (typeof label === "string") {
|
|
336
|
-
columns = vuuUtils.replaceColumn(columns, { ...targetColumn, label });
|
|
337
|
-
}
|
|
338
|
-
if (typeof resizing === "boolean") {
|
|
339
|
-
columns = vuuUtils.replaceColumn(columns, { ...targetColumn, resizing });
|
|
340
|
-
}
|
|
341
|
-
if (typeof hidden === "boolean") {
|
|
342
|
-
columns = vuuUtils.replaceColumn(columns, { ...targetColumn, hidden });
|
|
343
|
-
}
|
|
344
|
-
if (typeof width === "number") {
|
|
345
|
-
columns = vuuUtils.replaceColumn(columns, { ...targetColumn, width });
|
|
346
|
-
const targetConfigColumn = tableConfig.columns.find(
|
|
347
|
-
(col) => col.name === column.name
|
|
348
|
-
);
|
|
349
|
-
if (targetConfigColumn) {
|
|
350
|
-
tableConfig = {
|
|
351
|
-
...tableConfig,
|
|
352
|
-
columns: vuuUtils.replaceColumn(tableConfig.columns, {
|
|
353
|
-
...targetConfigColumn,
|
|
354
|
-
width
|
|
355
|
-
})
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
return {
|
|
361
|
-
...state,
|
|
362
|
-
columns,
|
|
363
|
-
tableConfig
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
function updateTableConfig(state, {
|
|
367
|
-
confirmed,
|
|
368
|
-
filterSpec,
|
|
369
|
-
groupBy,
|
|
370
|
-
sort
|
|
371
|
-
}) {
|
|
372
|
-
let result = state;
|
|
373
|
-
const { availableWidth, columnLayout = "static" } = state;
|
|
374
|
-
if (groupBy.length > 0) {
|
|
375
|
-
const groupedColumns = vuuUtils.applyGroupByToColumns({
|
|
376
|
-
columns: result.columns,
|
|
377
|
-
groupBy,
|
|
378
|
-
confirmed,
|
|
379
|
-
availableWidth
|
|
380
|
-
});
|
|
381
|
-
const columns = vuuUtils.applyWidthToColumns(groupedColumns, {
|
|
382
|
-
availableWidth,
|
|
383
|
-
columnLayout
|
|
384
|
-
});
|
|
385
|
-
result = {
|
|
386
|
-
...state,
|
|
387
|
-
columns
|
|
388
|
-
};
|
|
389
|
-
} else if (result.columns.length > 0 && vuuUtils.isGroupColumn(result.columns[0]) && confirmed) {
|
|
390
|
-
result = {
|
|
391
|
-
...state,
|
|
392
|
-
columns: vuuUtils.flattenColumnGroup(result.columns)
|
|
393
|
-
};
|
|
394
|
-
}
|
|
395
|
-
if (sort.sortDefs.length > 0) {
|
|
396
|
-
result = {
|
|
397
|
-
...state,
|
|
398
|
-
columns: vuuUtils.applySortToColumns(result.columns, sort)
|
|
399
|
-
};
|
|
400
|
-
} else if (vuuUtils.existingSort(result.columns)) {
|
|
401
|
-
result = {
|
|
402
|
-
...state,
|
|
403
|
-
columns: vuuUtils.removeSort(result.columns)
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
if (filterSpec.filter.length > 0) {
|
|
407
|
-
result = {
|
|
408
|
-
...state,
|
|
409
|
-
columns: vuuUtils.applyFilterToColumns(result.columns, filterSpec)
|
|
410
|
-
};
|
|
411
|
-
} else if (result.columns.some(vuuUtils.isFilteredColumn)) {
|
|
412
|
-
result = {
|
|
413
|
-
...state,
|
|
414
|
-
columns: vuuUtils.stripFilterFromColumns(result.columns)
|
|
415
|
-
};
|
|
416
|
-
}
|
|
417
|
-
return result;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
exports.useTableModel = useTableModel;
|
|
421
|
-
//# sourceMappingURL=useTableModel.js.map
|