@vuu-ui/vuu-table 2.1.18 → 2.1.19-beta.2
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 +13 -16
- package/src/CellFocusState.mjs +25 -0
- package/src/Row.mjs +83 -0
- package/src/Table.css.js +441 -0
- package/src/Table.mjs +297 -0
- package/src/VirtualColSpan.mjs +12 -0
- package/src/applyHighlighting.mjs +28 -0
- package/src/bulk-edit/BulkEditPanel.css.js +27 -0
- package/src/bulk-edit/BulkEditPanel.mjs +77 -0
- package/src/bulk-edit/ColumnCascadingUpdateEditor.css.js +86 -0
- package/src/bulk-edit/ColumnCascadingUpdateEditor.mjs +59 -0
- package/src/bulk-edit/InsertNewRowEditor.css.js +86 -0
- package/src/bulk-edit/InsertNewRowEditor.mjs +59 -0
- package/src/bulk-edit/useBulkEditPanel.mjs +61 -0
- package/src/bulk-edit/useColumnCascadingEditor.mjs +124 -0
- package/src/cell-block/CellBlock.css.js +95 -0
- package/src/cell-block/CellBlock.mjs +32 -0
- package/src/cell-block/cellblock-utils.mjs +114 -0
- package/src/cell-block/useCellBlockSelection.mjs +245 -0
- package/src/cell-renderers/checkbox-cell/CheckboxCell.css.js +16 -0
- package/src/cell-renderers/checkbox-cell/CheckboxCell.mjs +56 -0
- package/src/cell-renderers/checkbox-cell/index.mjs +1 -0
- package/src/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +19 -0
- package/src/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.mjs +34 -0
- package/src/cell-renderers/checkbox-row-selector/index.mjs +1 -0
- package/src/cell-renderers/index.mjs +4 -0
- package/src/cell-renderers/input-cell/InputCell.css.js +81 -0
- package/src/cell-renderers/input-cell/InputCell.mjs +73 -0
- package/src/cell-renderers/input-cell/index.mjs +1 -0
- package/src/cell-renderers/input-cell/useInputCell.mjs +199 -0
- package/src/cell-renderers/toggle-cell/ToggleCell.css.js +31 -0
- package/src/cell-renderers/toggle-cell/ToggleCell.mjs +47 -0
- package/src/cell-renderers/toggle-cell/index.mjs +1 -0
- package/src/column-header-pill/ColumnHeaderPill.css.js +34 -0
- package/src/column-header-pill/ColumnHeaderPill.mjs +39 -0
- package/src/column-header-pill/GroupColumnPill.css.js +10 -0
- package/src/column-header-pill/GroupColumnPill.mjs +33 -0
- package/src/column-header-pill/SortIndicator.css.js +15 -0
- package/src/column-header-pill/SortIndicator.mjs +29 -0
- package/src/column-header-pill/index.mjs +3 -0
- package/src/column-resizing/ColumnResizer.css.js +32 -0
- package/src/column-resizing/ColumnResizer.mjs +69 -0
- package/src/column-resizing/index.mjs +2 -0
- package/src/column-resizing/useTableColumnResize.mjs +57 -0
- package/src/data-row/DataRow.mjs +298 -0
- package/src/header-cell/GroupHeaderCell.css.js +91 -0
- package/src/header-cell/GroupHeaderCell.mjs +98 -0
- package/src/header-cell/HeaderCell.css.js +182 -0
- package/src/header-cell/HeaderCell.mjs +126 -0
- package/src/header-cell/index.mjs +2 -0
- package/src/index.mjs +20 -0
- package/src/pagination/PaginationControl.css.js +18 -0
- package/src/pagination/PaginationControl.mjs +34 -0
- package/src/pagination/index.mjs +1 -0
- package/src/pagination/usePagination.mjs +29 -0
- package/src/table-cell/TableCell.css.js +67 -0
- package/src/table-cell/TableCell.mjs +54 -0
- package/src/table-cell/TableGroupCell.css.js +91 -0
- package/src/table-cell/TableGroupCell.mjs +61 -0
- package/src/table-cell/index.mjs +2 -0
- package/src/table-config/useTableConfig.mjs +49 -0
- package/src/table-config.mjs +38 -0
- package/src/table-data-source/DataRowMovingWindow.mjs +66 -0
- package/src/table-data-source/useDataSource.mjs +177 -0
- package/src/table-dom-utils.mjs +162 -0
- package/src/table-header/HeaderProvider.mjs +14 -0
- package/src/table-header/TableHeader.mjs +182 -0
- package/src/table-header/index.mjs +2 -0
- package/src/table-header/useTableHeader.mjs +69 -0
- package/src/useCell.mjs +22 -0
- package/src/useCellEditing.mjs +58 -0
- package/src/useCellFocus.mjs +112 -0
- package/src/useControlledTableNavigation.mjs +34 -0
- package/src/useEditableCell.mjs +18 -0
- package/src/useInitialValue.mjs +6 -0
- package/src/useKeyboardNavigation.mjs +275 -0
- package/src/useMeasuredHeight.mjs +44 -0
- package/src/useResizeObserver.mjs +118 -0
- package/src/useRowClassNameGenerators.mjs +21 -0
- package/src/useSelection.mjs +101 -0
- package/src/useTable.mjs +588 -0
- package/src/useTableContextMenu.mjs +54 -0
- package/src/useTableModel.mjs +344 -0
- package/src/useTableScroll.mjs +382 -0
- package/src/useTableViewport.mjs +120 -0
- 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
|
@@ -1,143 +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
|
-
var useEditableCell = require('../useEditableCell.js');
|
|
7
|
-
|
|
8
|
-
const getValidationChecker = (descriptor, editPhase) => {
|
|
9
|
-
const rules = vuuDataReact.getEditValidationRules(descriptor, editPhase);
|
|
10
|
-
return vuuDataReact.buildValidationChecker(rules);
|
|
11
|
-
};
|
|
12
|
-
const nextValidationState = (state, dataDescriptor, value) => {
|
|
13
|
-
const check = getValidationChecker(dataDescriptor, "change");
|
|
14
|
-
const result = check(value, "change");
|
|
15
|
-
const { name } = dataDescriptor;
|
|
16
|
-
const { ok: wasOk, messages: existingMessages } = state;
|
|
17
|
-
if (result.ok) {
|
|
18
|
-
if (!wasOk) {
|
|
19
|
-
const fieldsInError = Object.keys(existingMessages);
|
|
20
|
-
if (fieldsInError.includes(name)) {
|
|
21
|
-
if (fieldsInError.length === 1) {
|
|
22
|
-
return { ok: true, messages: {} };
|
|
23
|
-
} else {
|
|
24
|
-
const messages = { ...existingMessages };
|
|
25
|
-
delete messages[name];
|
|
26
|
-
return { ok: false, messages };
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
} else {
|
|
31
|
-
return {
|
|
32
|
-
ok: false,
|
|
33
|
-
messages: {
|
|
34
|
-
...existingMessages,
|
|
35
|
-
[name]: result.messages.join("\n")
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
return state;
|
|
40
|
-
};
|
|
41
|
-
function find(descriptors, fieldname) {
|
|
42
|
-
const d = descriptors.find(({ name }) => name === fieldname);
|
|
43
|
-
if (d) {
|
|
44
|
-
return d;
|
|
45
|
-
}
|
|
46
|
-
throw Error(`DataValueDescriptor not found for field ${fieldname}`);
|
|
47
|
-
}
|
|
48
|
-
const getField = (target) => {
|
|
49
|
-
const fieldElement = vuuUtils.queryClosest(target, "[data-field]");
|
|
50
|
-
if (fieldElement) {
|
|
51
|
-
return fieldElement.dataset.field;
|
|
52
|
-
} else {
|
|
53
|
-
throw Error("no field ");
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
const useBulkEditRow = ({
|
|
57
|
-
descriptors,
|
|
58
|
-
onBulkChange,
|
|
59
|
-
onRowChange
|
|
60
|
-
}) => {
|
|
61
|
-
const formFieldsContainerRef = react.useRef(null);
|
|
62
|
-
const focusedFieldRef = react.useRef("");
|
|
63
|
-
const [, forceUpdate] = react.useState({});
|
|
64
|
-
const validationStateRef = react.useRef({
|
|
65
|
-
ok: true,
|
|
66
|
-
messages: {}
|
|
67
|
-
});
|
|
68
|
-
const bulkRowValidationState = react.useCallback(
|
|
69
|
-
(state) => {
|
|
70
|
-
validationStateRef.current = state;
|
|
71
|
-
onRowChange(state.ok);
|
|
72
|
-
forceUpdate({});
|
|
73
|
-
},
|
|
74
|
-
[onRowChange]
|
|
75
|
-
);
|
|
76
|
-
const handleFocus = react.useCallback((evt) => {
|
|
77
|
-
if (formFieldsContainerRef.current?.contains(evt.target)) {
|
|
78
|
-
const fieldName = getField(evt.target);
|
|
79
|
-
if (fieldName) {
|
|
80
|
-
if (fieldName) {
|
|
81
|
-
focusedFieldRef.current = fieldName;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}, []);
|
|
86
|
-
const handleChange = react.useCallback(
|
|
87
|
-
(evt) => {
|
|
88
|
-
const { current: fieldName } = focusedFieldRef;
|
|
89
|
-
if (fieldName) {
|
|
90
|
-
const input = vuuUtils.queryClosest(evt.target, "input", true);
|
|
91
|
-
const dataDescriptor = find(descriptors, fieldName);
|
|
92
|
-
const value = input.value;
|
|
93
|
-
const { current: state } = validationStateRef;
|
|
94
|
-
const newState = nextValidationState(state, dataDescriptor, value);
|
|
95
|
-
if (newState !== state) {
|
|
96
|
-
bulkRowValidationState(newState);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
[descriptors, bulkRowValidationState]
|
|
101
|
-
);
|
|
102
|
-
const {
|
|
103
|
-
current: { messages: errorMessages }
|
|
104
|
-
} = validationStateRef;
|
|
105
|
-
const handleCommit = react.useCallback(
|
|
106
|
-
(evt, value) => {
|
|
107
|
-
if (typeof value === "string" && value.trim() !== "") {
|
|
108
|
-
const columnName = focusedFieldRef.current;
|
|
109
|
-
if (columnName) {
|
|
110
|
-
const column = descriptors.find((c) => c.name === columnName);
|
|
111
|
-
if (column && errorMessages[columnName] === void 0) {
|
|
112
|
-
const { serverDataType = "string" } = column;
|
|
113
|
-
const typedValue = vuuUtils.getTypedValue(value, serverDataType, true);
|
|
114
|
-
onBulkChange(column, typedValue);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
[descriptors, errorMessages, onBulkChange]
|
|
120
|
-
);
|
|
121
|
-
const InputProps2 = react.useMemo(
|
|
122
|
-
() => ({
|
|
123
|
-
inputProps: {
|
|
124
|
-
placeholder: "Enter value"
|
|
125
|
-
},
|
|
126
|
-
onChange: handleChange,
|
|
127
|
-
variant: "primary"
|
|
128
|
-
}),
|
|
129
|
-
[handleChange]
|
|
130
|
-
);
|
|
131
|
-
const onKeyDown = useEditableCell.useEditableCell();
|
|
132
|
-
return {
|
|
133
|
-
errorMessages,
|
|
134
|
-
formFieldsContainerRef,
|
|
135
|
-
InputProps: InputProps2,
|
|
136
|
-
onCommit: handleCommit,
|
|
137
|
-
onFocus: handleFocus,
|
|
138
|
-
onKeyDown
|
|
139
|
-
};
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
exports.useBulkEditRow = useBulkEditRow;
|
|
143
|
-
//# sourceMappingURL=useColumnCascadingEditor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnCascadingEditor.js","sources":["../../../../packages/vuu-table/src/bulk-edit/useColumnCascadingEditor.tsx"],"sourcesContent":["import {\n buildValidationChecker,\n getEditValidationRules,\n} from \"@vuu-ui/vuu-data-react\";\nimport { DataValueDescriptor, EditPhase } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { CommitHandler, getTypedValue, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { InputProps } from \"@salt-ds/core\";\nimport {\n FocusEventHandler,\n SyntheticEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useEditableCell } from \"../useEditableCell\";\n\nexport type EditValueChangeHandler = (\n column: ColumnDescriptor,\n value: VuuRowDataItemType,\n) => void;\n\nexport interface EditableBulkHookProps {\n descriptors: DataValueDescriptor[];\n onBulkChange: EditValueChangeHandler;\n onRowChange: (isValid: boolean) => void;\n}\ntype ValidationState = {\n ok: boolean;\n messages: Record<string, string>;\n};\n\nconst getValidationChecker = (\n descriptor: DataValueDescriptor,\n editPhase: EditPhase | \"*\",\n) => {\n const rules = getEditValidationRules(descriptor, editPhase);\n return buildValidationChecker(rules);\n};\n\nconst nextValidationState = (\n state: ValidationState,\n dataDescriptor: DataValueDescriptor,\n value: VuuRowDataItemType,\n): ValidationState => {\n const check = getValidationChecker(dataDescriptor, \"change\");\n const result = check(value, \"change\");\n const { name } = dataDescriptor;\n\n const { ok: wasOk, messages: existingMessages } = state;\n\n if (result.ok) {\n if (!wasOk) {\n // if this field was the only one in error, the overall state\n // will now be ok, but not if there is still one or more other\n // field still in error.\n const fieldsInError = Object.keys(existingMessages);\n if (fieldsInError.includes(name)) {\n if (fieldsInError.length === 1) {\n return { ok: true, messages: {} };\n } else {\n const messages = { ...existingMessages };\n delete messages[name];\n return { ok: false, messages };\n }\n }\n }\n } else {\n return {\n ok: false,\n messages: {\n ...existingMessages,\n [name]: result.messages.join(\"\\n\"),\n },\n };\n }\n\n return state;\n};\n\nfunction find(descriptors: DataValueDescriptor[], fieldname: string) {\n const d = descriptors.find(({ name }) => name === fieldname);\n if (d) {\n return d;\n }\n throw Error(`DataValueDescriptor not found for field ${fieldname}`);\n}\n\nconst getField = (target: EventTarget | HTMLElement) => {\n const fieldElement = queryClosest(target, \"[data-field]\");\n if (fieldElement) {\n return fieldElement.dataset.field as string;\n } else {\n throw Error(\"no field \");\n }\n};\n\nexport const useBulkEditRow = ({\n descriptors,\n onBulkChange,\n onRowChange,\n}: EditableBulkHookProps) => {\n const formFieldsContainerRef = useRef<HTMLDivElement>(null);\n const focusedFieldRef = useRef(\"\");\n const [, forceUpdate] = useState({});\n const validationStateRef = useRef<ValidationState>({\n ok: true,\n messages: {},\n });\n\n const bulkRowValidationState = useCallback(\n (state: ValidationState) => {\n validationStateRef.current = state;\n onRowChange(state.ok);\n forceUpdate({});\n },\n [onRowChange],\n );\n\n const handleFocus = useCallback<FocusEventHandler>((evt) => {\n // Ignore focus on popup Calendars, Lists etc\n if (formFieldsContainerRef.current?.contains(evt.target)) {\n const fieldName = getField(evt.target);\n if (fieldName) {\n if (fieldName) {\n focusedFieldRef.current = fieldName;\n }\n }\n }\n }, []);\n\n const handleChange = useCallback(\n (evt: SyntheticEvent<HTMLInputElement>) => {\n const { current: fieldName } = focusedFieldRef;\n if (fieldName) {\n const input = queryClosest<HTMLInputElement>(evt.target, \"input\", true);\n const dataDescriptor = find(descriptors, fieldName);\n const value = input.value as string;\n const { current: state } = validationStateRef;\n const newState = nextValidationState(state, dataDescriptor, value);\n if (newState !== state) {\n bulkRowValidationState(newState);\n }\n }\n },\n [descriptors, bulkRowValidationState],\n );\n\n const {\n current: { messages: errorMessages },\n } = validationStateRef;\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (evt, value) => {\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const columnName = focusedFieldRef.current;\n if (columnName) {\n const column = descriptors.find((c) => c.name === columnName);\n if (column && errorMessages[columnName] === undefined) {\n const { serverDataType = \"string\" } = column;\n const typedValue = getTypedValue(value, serverDataType, true);\n onBulkChange(column, typedValue);\n }\n }\n }\n },\n [descriptors, errorMessages, onBulkChange],\n );\n\n const InputProps = useMemo<Partial<InputProps>>(\n () => ({\n inputProps: {\n placeholder: \"Enter value\",\n },\n onChange: handleChange,\n variant: \"primary\",\n }),\n [handleChange],\n );\n\n const onKeyDown = useEditableCell();\n\n return {\n errorMessages,\n formFieldsContainerRef,\n InputProps,\n onCommit: handleCommit,\n onFocus: handleFocus,\n onKeyDown,\n };\n};\n"],"names":["getEditValidationRules","buildValidationChecker","queryClosest","useRef","useState","useCallback","getTypedValue","InputProps","useMemo","useEditableCell"],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var cellBlockCss = ".vuuCellBlock {\n background-color: #00bdff;\n opacity: 0.3;\n border: solid blue 1px;\n position: absolute;\n\n bottom: anchor(--cellblock-start bottom);\n left: anchor(--cellblock-start left);\n right: anchor(--cellblock-start right);\n top: anchor(--cellblock-start top);\n\n &.cellblock-direction-n {\n bottom: anchor(--cellblock-start bottom);\n left: anchor(--cellblock-start left);\n right: anchor(--cellblock-start right);\n top: anchor(--cellblock-end top);\n }\n\n &.cellblock-direction-ne {\n bottom: anchor(--cellblock-start bottom);\n left: anchor(--cellblock-start left);\n right: anchor(--cellblock-end right);\n top: anchor(--cellblock-end top);\n }\n\n &.cellblock-direction-e {\n bottom: anchor(--cellblock-start bottom);\n left: anchor(--cellblock-start left);\n right: anchor(--cellblock-end right);\n top: anchor(--cellblock-start top);\n }\n\n &.cellblock-direction-se {\n bottom: anchor(--cellblock-end bottom);\n left: anchor(--cellblock-start left);\n right: anchor(--cellblock-end right);\n top: anchor(--cellblock-start top);\n }\n\n &.cellblock-direction-s {\n bottom: anchor(--cellblock-end bottom);\n left: anchor(--cellblock-start left);\n right: anchor(--cellblock-start right);\n top: anchor(--cellblock-start top);\n }\n\n &.cellblock-direction-sw {\n bottom: anchor(--cellblock-end bottom);\n left: anchor(--cellblock-end left);\n right: anchor(--cellblock-start right);\n top: anchor(--cellblock-start top);\n }\n\n &.cellblock-direction-w {\n bottom: anchor(--cellblock-start bottom);\n left: anchor(--cellblock-end left);\n right: anchor(--cellblock-start right);\n top: anchor(--cellblock-start top);\n }\n\n &.cellblock-direction-nw {\n bottom: anchor(--cellblock-start bottom);\n left: anchor(--cellblock-end left);\n right: anchor(--cellblock-start right);\n top: anchor(--cellblock-end top);\n }\n}\n\n.vuu-cellblock-start {\n anchor-name: --cellblock-start;\n}\n\n.vuuTable.vuu-cellblock-select-in-progress-keyboard {\n .vuuTableCell:focus {\n anchor-name: --cellblock-end;\n }\n .vuuCellBlock {\n pointer-events: none;\n }\n}\n.vuuTable.vuu-cellblock-select-in-progress-mouse {\n .vuuCellBlock {\n pointer-events: none;\n }\n}\n.vuu-cellblock-end {\n anchor-name: --cellblock-end;\n}\n";
|
|
4
|
-
|
|
5
|
-
module.exports = cellBlockCss;
|
|
6
|
-
//# sourceMappingURL=CellBlock.css.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CellBlock.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var react = require('react');
|
|
5
|
-
var cx = require('clsx');
|
|
6
|
-
var styles = require('@salt-ds/styles');
|
|
7
|
-
var window = require('@salt-ds/window');
|
|
8
|
-
var CellBlock$1 = require('./CellBlock.css.js');
|
|
9
|
-
|
|
10
|
-
const classBase = "vuuCellBlock";
|
|
11
|
-
const CellBlock = react.forwardRef(
|
|
12
|
-
function CellBlock2({ className, onCopy, ...htmlAttributes }, forwardedRef) {
|
|
13
|
-
const targetWindow = window.useWindow();
|
|
14
|
-
styles.useComponentCssInjection({
|
|
15
|
-
testId: "vuu-cell-block",
|
|
16
|
-
css: CellBlock$1,
|
|
17
|
-
window: targetWindow
|
|
18
|
-
});
|
|
19
|
-
const handleKeyDown = react.useCallback(
|
|
20
|
-
async (evt) => {
|
|
21
|
-
if (evt.metaKey && evt.key === "c") {
|
|
22
|
-
onCopy?.();
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
[onCopy]
|
|
26
|
-
);
|
|
27
|
-
const onContextMenu = react.useCallback(() => {
|
|
28
|
-
console.log("on cvontext menu");
|
|
29
|
-
}, []);
|
|
30
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
31
|
-
"div",
|
|
32
|
-
{
|
|
33
|
-
...htmlAttributes,
|
|
34
|
-
className: cx(classBase, className),
|
|
35
|
-
ref: forwardedRef,
|
|
36
|
-
onContextMenu,
|
|
37
|
-
onKeyDown: handleKeyDown,
|
|
38
|
-
tabIndex: 0
|
|
39
|
-
}
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
exports.CellBlock = CellBlock;
|
|
45
|
-
//# sourceMappingURL=CellBlock.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CellBlock.js","sources":["../../../../packages/vuu-table/src/cell-block/CellBlock.tsx"],"sourcesContent":["import {\n HTMLAttributes,\n KeyboardEventHandler,\n MouseEventHandler,\n forwardRef,\n useCallback,\n} from \"react\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport cellBlockCss from \"./CellBlock.css\";\n\nconst classBase = \"vuuCellBlock\";\n\nexport interface CellBlockProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onCopy\"> {\n debugName?: string;\n onCopy?: () => void;\n}\n\nexport const CellBlock = forwardRef<HTMLDivElement, CellBlockProps>(\n function CellBlock({ className, onCopy, ...htmlAttributes }, forwardedRef) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-cell-block\",\n css: cellBlockCss,\n window: targetWindow,\n });\n\n const handleKeyDown = useCallback<KeyboardEventHandler>(\n async (evt) => {\n if (evt.metaKey && evt.key === \"c\") {\n onCopy?.();\n }\n },\n [onCopy],\n );\n\n const onContextMenu = useCallback<MouseEventHandler>(() => {\n console.log(\"on cvontext menu\");\n }, []);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardedRef}\n onContextMenu={onContextMenu}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n />\n );\n },\n);\n"],"names":["forwardRef","CellBlock","useWindow","useComponentCssInjection","cellBlockCss","useCallback","jsx"],"mappings":";;;;;;;;;AAaA,MAAM,SAAY,GAAA,cAAA;AAQX,MAAM,SAAY,GAAAA,gBAAA;AAAA,EACvB,SAASC,WAAU,EAAE,SAAA,EAAW,QAAQ,GAAG,cAAA,IAAkB,YAAc,EAAA;AACzE,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,gBAAA;AAAA,MACR,GAAK,EAAAC,WAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAA,MAAM,aAAgB,GAAAC,iBAAA;AAAA,MACpB,OAAO,GAAQ,KAAA;AACb,QAAA,IAAI,GAAI,CAAA,OAAA,IAAW,GAAI,CAAA,GAAA,KAAQ,GAAK,EAAA;AAClC,UAAS,MAAA,IAAA;AAAA;AACX,OACF;AAAA,MACA,CAAC,MAAM;AAAA,KACT;AAEA,IAAM,MAAA,aAAA,GAAgBA,kBAA+B,MAAM;AACzD,MAAA,OAAA,CAAQ,IAAI,kBAAkB,CAAA;AAAA,KAChC,EAAG,EAAE,CAAA;AAEL,IACE,uBAAAC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,cAAA;AAAA,QACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,QAClC,GAAK,EAAA,YAAA;AAAA,QACL,aAAA;AAAA,QACA,SAAW,EAAA,aAAA;AAAA,QACX,QAAU,EAAA;AAAA;AAAA,KACZ;AAAA;AAGN;;;;"}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
-
var tableDomUtils = require('../table-dom-utils.js');
|
|
5
|
-
|
|
6
|
-
const isNullCellBox = ({ bottom, left, right, top }) => {
|
|
7
|
-
return bottom === -1 && left === -1 && right === -1 && top === -1;
|
|
8
|
-
};
|
|
9
|
-
const Hi = Number.MAX_SAFE_INTEGER;
|
|
10
|
-
const getEndCellDirection = (startBox, endBox) => {
|
|
11
|
-
const { bottom: sBottom, left: sLeft, right: sRight, top: sTop } = startBox;
|
|
12
|
-
const { bottom: eBottom, left: eLeft, right: eRight, top: eTop } = endBox;
|
|
13
|
-
const north = eTop < sTop;
|
|
14
|
-
const east = eRight > sRight;
|
|
15
|
-
const south = eBottom > sBottom;
|
|
16
|
-
const west = eLeft < sLeft;
|
|
17
|
-
if (north && east) return "ne";
|
|
18
|
-
else if (south && east) return "se";
|
|
19
|
-
else if (south && west) return "sw";
|
|
20
|
-
else if (north && west) return "nw";
|
|
21
|
-
else if (north) return "n";
|
|
22
|
-
else if (east) return "e";
|
|
23
|
-
else if (south) return "s";
|
|
24
|
-
else if (west) return "w";
|
|
25
|
-
else return "self";
|
|
26
|
-
};
|
|
27
|
-
const setElementBox = (el, box) => {
|
|
28
|
-
const { bottom, left, right, top } = el.getBoundingClientRect();
|
|
29
|
-
box.bottom = bottom;
|
|
30
|
-
box.left = left;
|
|
31
|
-
box.right = right;
|
|
32
|
-
box.top = top;
|
|
33
|
-
};
|
|
34
|
-
const outsideBox = ({ bottom, left, right, top }, x, y) => x < left || x > right || y < top || y > bottom;
|
|
35
|
-
const getRowIndex = (cell) => vuuUtils.getAriaRowIndex(vuuUtils.queryClosest(cell, ".vuuTableRow"));
|
|
36
|
-
const getTableCellBlock = (startCell, endCell) => {
|
|
37
|
-
const colStart = vuuUtils.getAriaColIndex(startCell);
|
|
38
|
-
const colEnd = vuuUtils.getAriaColIndex(endCell);
|
|
39
|
-
const rowStart = getRowIndex(startCell);
|
|
40
|
-
const rowEnd = getRowIndex(endCell);
|
|
41
|
-
const columnRange = {
|
|
42
|
-
from: Math.min(colStart, colEnd),
|
|
43
|
-
to: Math.max(colStart, colEnd)
|
|
44
|
-
};
|
|
45
|
-
const rowRange = {
|
|
46
|
-
from: Math.min(rowStart, rowEnd),
|
|
47
|
-
to: Math.max(rowStart, rowEnd)
|
|
48
|
-
};
|
|
49
|
-
return {
|
|
50
|
-
columnRange,
|
|
51
|
-
rowRange
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
const refState = {
|
|
55
|
-
cellBlock: null,
|
|
56
|
-
cellBlockClassName: "",
|
|
57
|
-
dragState: "pending",
|
|
58
|
-
endBox: { bottom: -1, left: Hi, right: -1, top: Hi },
|
|
59
|
-
endCell: null,
|
|
60
|
-
endPos: [-1, -1],
|
|
61
|
-
mousePosX: -1,
|
|
62
|
-
mousePosY: -1,
|
|
63
|
-
mouseStartX: -1,
|
|
64
|
-
mouseStartY: -1,
|
|
65
|
-
startBox: { bottom: -1, left: -1, right: -1, top: -1 },
|
|
66
|
-
startCell: null,
|
|
67
|
-
startPos: [-1, -1]
|
|
68
|
-
};
|
|
69
|
-
const updateCellBlockClassName = (state) => {
|
|
70
|
-
const { cellBlock, cellBlockClassName, startBox, endBox } = state;
|
|
71
|
-
const endBlockDirection = getEndCellDirection(startBox, endBox);
|
|
72
|
-
const newCellBlockClassName = `cellblock-direction-${endBlockDirection}`;
|
|
73
|
-
if (newCellBlockClassName !== cellBlockClassName) {
|
|
74
|
-
if (cellBlockClassName) {
|
|
75
|
-
cellBlock?.classList.replace(cellBlockClassName, newCellBlockClassName);
|
|
76
|
-
} else {
|
|
77
|
-
cellBlock?.classList.add(newCellBlockClassName);
|
|
78
|
-
}
|
|
79
|
-
state.cellBlockClassName = newCellBlockClassName;
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
const getTextFromCells = (startCell, endCell) => {
|
|
83
|
-
const tableBody = vuuUtils.queryClosest(
|
|
84
|
-
startCell,
|
|
85
|
-
".vuuTable-body",
|
|
86
|
-
true
|
|
87
|
-
);
|
|
88
|
-
const [startRow, startCol] = tableDomUtils.getAriaCellPos(startCell);
|
|
89
|
-
const [endRow, endCol] = tableDomUtils.getAriaCellPos(endCell);
|
|
90
|
-
const rowRange = {
|
|
91
|
-
from: Math.min(startRow, endRow),
|
|
92
|
-
to: Math.max(startRow, endRow)
|
|
93
|
-
};
|
|
94
|
-
const colRange = {
|
|
95
|
-
from: Math.min(startCol, endCol),
|
|
96
|
-
to: Math.max(startCol, endCol)
|
|
97
|
-
};
|
|
98
|
-
const results = [];
|
|
99
|
-
for (let rowIdx = rowRange.from; rowIdx <= rowRange.to; rowIdx++) {
|
|
100
|
-
const row = tableBody.querySelector(
|
|
101
|
-
`.vuuTableRow[aria-rowindex='${rowIdx}']`
|
|
102
|
-
);
|
|
103
|
-
const rowData = [];
|
|
104
|
-
for (let colIdx = colRange.from; colIdx <= colRange.to; colIdx++) {
|
|
105
|
-
const cell = row?.querySelector(
|
|
106
|
-
`.vuuTableCell[aria-colindex='${colIdx}']`
|
|
107
|
-
);
|
|
108
|
-
if (cell) {
|
|
109
|
-
rowData.push(cell.textContent ?? "");
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
results.push(rowData);
|
|
113
|
-
}
|
|
114
|
-
return results.map((r) => r.join(" ")).join("\n");
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
exports.getEndCellDirection = getEndCellDirection;
|
|
118
|
-
exports.getTableCellBlock = getTableCellBlock;
|
|
119
|
-
exports.getTextFromCells = getTextFromCells;
|
|
120
|
-
exports.isNullCellBox = isNullCellBox;
|
|
121
|
-
exports.outsideBox = outsideBox;
|
|
122
|
-
exports.refState = refState;
|
|
123
|
-
exports.setElementBox = setElementBox;
|
|
124
|
-
exports.updateCellBlockClassName = updateCellBlockClassName;
|
|
125
|
-
//# sourceMappingURL=cellblock-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cellblock-utils.js","sources":["../../../../packages/vuu-table/src/cell-block/cellblock-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n queryClosest,\n getAriaColIndex,\n getAriaRowIndex,\n} from \"@vuu-ui/vuu-utils\";\nimport { getAriaCellPos } from \"../table-dom-utils\";\n\nexport type TableCellBlock = {\n columnRange: VuuRange;\n rowRange: VuuRange;\n};\n\nexport type CellBox = {\n bottom: number;\n left: number;\n right: number;\n top: number;\n};\n\nexport const isNullCellBox = ({ bottom, left, right, top }: CellBox) => {\n return bottom === -1 && left === -1 && right === -1 && top === -1;\n};\n\nconst Hi = Number.MAX_SAFE_INTEGER;\n\ntype EndCellDirection =\n | \"self\"\n | \"n\"\n | \"ne\"\n | \"e\"\n | \"se\"\n | \"s\"\n | \"sw\"\n | \"w\"\n | \"nw\";\n\nexport const getEndCellDirection = (\n startBox: CellBox,\n endBox: CellBox,\n): EndCellDirection => {\n const { bottom: sBottom, left: sLeft, right: sRight, top: sTop } = startBox;\n const { bottom: eBottom, left: eLeft, right: eRight, top: eTop } = endBox;\n const north = eTop < sTop;\n const east = eRight > sRight;\n const south = eBottom > sBottom;\n const west = eLeft < sLeft;\n\n if (north && east) return \"ne\";\n else if (south && east) return \"se\";\n else if (south && west) return \"sw\";\n else if (north && west) return \"nw\";\n else if (north) return \"n\";\n else if (east) return \"e\";\n else if (south) return \"s\";\n else if (west) return \"w\";\n else return \"self\";\n};\n\nexport const setElementBox = (el: HTMLElement, box: CellBox) => {\n const { bottom, left, right, top } = el.getBoundingClientRect();\n box.bottom = bottom;\n box.left = left;\n box.right = right;\n box.top = top;\n};\n\nexport const outsideBox = (\n { bottom, left, right, top }: CellBox,\n x: number,\n y: number,\n) => x < left || x > right || y < top || y > bottom;\n\nconst getRowIndex = (cell: HTMLDivElement) =>\n getAriaRowIndex(queryClosest<HTMLDivElement>(cell, \".vuuTableRow\"));\n\nexport const getTableCellBlock = (\n startCell: HTMLDivElement,\n endCell: HTMLDivElement,\n): TableCellBlock => {\n const colStart = getAriaColIndex(startCell);\n const colEnd = getAriaColIndex(endCell);\n const rowStart = getRowIndex(startCell);\n const rowEnd = getRowIndex(endCell);\n\n const columnRange = {\n from: Math.min(colStart, colEnd),\n to: Math.max(colStart, colEnd),\n };\n const rowRange = {\n from: Math.min(rowStart, rowEnd),\n to: Math.max(rowStart, rowEnd),\n };\n\n return {\n columnRange,\n rowRange,\n };\n};\n\nexport type RefState = {\n dragState: \"pending\" | \"active\";\n cellBlock: HTMLDivElement | null;\n cellBlockClassName: string;\n endBox: CellBox;\n endCell: HTMLDivElement | null;\n endPos: PosTuple; // used during keyboard operation\n mousePosX: number;\n mousePosY: number;\n mouseStartX: number;\n mouseStartY: number;\n startCell: HTMLDivElement | null;\n startBox: CellBox;\n startPos: PosTuple; // used during keyboard operation\n};\n\nexport type PosTuple = [number, number];\n\nexport const refState: RefState = {\n cellBlock: null,\n cellBlockClassName: \"\",\n dragState: \"pending\",\n endBox: { bottom: -1, left: Hi, right: -1, top: Hi },\n endCell: null,\n endPos: [-1, -1],\n mousePosX: -1,\n mousePosY: -1,\n mouseStartX: -1,\n mouseStartY: -1,\n startBox: { bottom: -1, left: -1, right: -1, top: -1 },\n startCell: null,\n startPos: [-1, -1],\n} as const;\n\nexport const updateCellBlockClassName = (state: RefState) => {\n const { cellBlock, cellBlockClassName, startBox, endBox } = state;\n const endBlockDirection = getEndCellDirection(startBox, endBox);\n const newCellBlockClassName = `cellblock-direction-${endBlockDirection}`;\n if (newCellBlockClassName !== cellBlockClassName) {\n if (cellBlockClassName) {\n cellBlock?.classList.replace(cellBlockClassName, newCellBlockClassName);\n } else {\n cellBlock?.classList.add(newCellBlockClassName);\n }\n state.cellBlockClassName = newCellBlockClassName;\n }\n};\n\nexport const getTextFromCells = (\n startCell: HTMLDivElement,\n endCell: HTMLDivElement,\n) => {\n const tableBody = queryClosest<HTMLDivElement>(\n startCell,\n \".vuuTable-body\",\n true,\n );\n const [startRow, startCol] = getAriaCellPos(startCell);\n const [endRow, endCol] = getAriaCellPos(endCell);\n\n const rowRange = {\n from: Math.min(startRow, endRow),\n to: Math.max(startRow, endRow),\n };\n\n const colRange = {\n from: Math.min(startCol, endCol),\n to: Math.max(startCol, endCol),\n };\n\n const results: string[][] = [];\n for (let rowIdx = rowRange.from; rowIdx <= rowRange.to; rowIdx++) {\n const row = tableBody.querySelector(\n `.vuuTableRow[aria-rowindex='${rowIdx}']`,\n );\n const rowData = [];\n for (let colIdx = colRange.from; colIdx <= colRange.to; colIdx++) {\n const cell = row?.querySelector(\n `.vuuTableCell[aria-colindex='${colIdx}']`,\n );\n if (cell) {\n rowData.push(cell.textContent ?? \"\");\n }\n }\n results.push(rowData);\n }\n return results.map((r) => r.join(\"\\t\")).join(\"\\n\");\n};\n"],"names":["getAriaRowIndex","queryClosest","getAriaColIndex","getAriaCellPos"],"mappings":"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"}
|
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
-
var react = require('react');
|
|
6
|
-
var tableDomUtils = require('../table-dom-utils.js');
|
|
7
|
-
var CellBlock = require('./CellBlock.js');
|
|
8
|
-
var cellblockUtils = require('./cellblock-utils.js');
|
|
9
|
-
|
|
10
|
-
const clone = (posTuple) => posTuple.slice();
|
|
11
|
-
const NullHandler = () => console.error("no handler installed");
|
|
12
|
-
const mouseHandlers = {
|
|
13
|
-
mouseMove: NullHandler,
|
|
14
|
-
mouseMovePreDrag: NullHandler,
|
|
15
|
-
mouseUp: NullHandler,
|
|
16
|
-
mouseUpPreDrag: NullHandler
|
|
17
|
-
};
|
|
18
|
-
const mouseType = (name) => name.startsWith("mouseMove") ? "mousemove" : "mouseup";
|
|
19
|
-
const DRAG_THRESHOLD = 5;
|
|
20
|
-
const useCellBlockSelection = ({
|
|
21
|
-
allowCellBlockSelection,
|
|
22
|
-
columnCount = 0,
|
|
23
|
-
containerRef,
|
|
24
|
-
onSelectCellBlock,
|
|
25
|
-
rowCount = 0
|
|
26
|
-
}) => {
|
|
27
|
-
const [cellBlock, setCellBlock] = react.useState(null);
|
|
28
|
-
const stateRef = react.useRef(cellblockUtils.refState);
|
|
29
|
-
const handlersRef = react.useRef(mouseHandlers);
|
|
30
|
-
const handleCopy = react.useCallback(async () => {
|
|
31
|
-
const { startCell, endCell } = stateRef.current;
|
|
32
|
-
if (startCell && endCell) {
|
|
33
|
-
const tsvText = cellblockUtils.getTextFromCells(startCell, endCell);
|
|
34
|
-
const type = "text/plain";
|
|
35
|
-
const blob = new Blob([tsvText], { type });
|
|
36
|
-
const data = [new ClipboardItem({ [type]: blob })];
|
|
37
|
-
await navigator.clipboard.write(data);
|
|
38
|
-
}
|
|
39
|
-
}, []);
|
|
40
|
-
const cellBlockRef = react.useCallback((el) => {
|
|
41
|
-
stateRef.current.cellBlock = el;
|
|
42
|
-
}, []);
|
|
43
|
-
const createCellBlock = react.useCallback(
|
|
44
|
-
(method = "mouse") => {
|
|
45
|
-
const { startBox, startCell } = stateRef.current;
|
|
46
|
-
if (startCell) {
|
|
47
|
-
const table = vuuUtils.queryClosest(startCell, ".vuuTable");
|
|
48
|
-
if (table) {
|
|
49
|
-
table.classList.add(`vuu-cellblock-select-in-progress-${method}`);
|
|
50
|
-
}
|
|
51
|
-
cellblockUtils.setElementBox(startCell, startBox);
|
|
52
|
-
startCell.classList.add("vuu-cellblock-start");
|
|
53
|
-
setCellBlock(/* @__PURE__ */ jsxRuntime.jsx(CellBlock.CellBlock, { onCopy: handleCopy, ref: cellBlockRef }));
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
[cellBlockRef, handleCopy]
|
|
57
|
-
);
|
|
58
|
-
const initializeStateRef = react.useCallback(() => {
|
|
59
|
-
const { cellBlock: cellBlock2, cellBlockClassName, startCell, endCell } = stateRef.current;
|
|
60
|
-
if (startCell) {
|
|
61
|
-
startCell.classList.remove("vuu-cellblock-start");
|
|
62
|
-
}
|
|
63
|
-
if (endCell) {
|
|
64
|
-
endCell.classList.remove("vuu-cellblock-end");
|
|
65
|
-
}
|
|
66
|
-
if (cellBlock2?.classList.contains(cellBlockClassName)) {
|
|
67
|
-
cellBlock2.classList.remove(cellBlockClassName);
|
|
68
|
-
}
|
|
69
|
-
const { endBox, startBox } = cellblockUtils.refState;
|
|
70
|
-
stateRef.current = {
|
|
71
|
-
...cellblockUtils.refState,
|
|
72
|
-
cellBlock: cellBlock2,
|
|
73
|
-
endBox: { ...endBox },
|
|
74
|
-
endPos: [-1, -1],
|
|
75
|
-
startBox: { ...startBox },
|
|
76
|
-
startPos: [-1, -1]
|
|
77
|
-
};
|
|
78
|
-
}, []);
|
|
79
|
-
const addMouseListener = react.useCallback(
|
|
80
|
-
(mouseOperation, handler) => {
|
|
81
|
-
window.addEventListener(mouseType(mouseOperation), handler);
|
|
82
|
-
handlersRef.current[mouseOperation] = handler;
|
|
83
|
-
},
|
|
84
|
-
[]
|
|
85
|
-
);
|
|
86
|
-
const removeMouseListener = react.useCallback((name) => {
|
|
87
|
-
window.removeEventListener(mouseType(name), handlersRef.current[name]);
|
|
88
|
-
}, []);
|
|
89
|
-
handlersRef.current.mouseMove = react.useCallback((evt) => {
|
|
90
|
-
const { clientX: x, clientY: y } = evt;
|
|
91
|
-
const { endBox, startBox } = stateRef.current;
|
|
92
|
-
if (cellblockUtils.outsideBox(startBox, x, y) && cellblockUtils.outsideBox(endBox, x, y)) {
|
|
93
|
-
const cell = vuuUtils.queryClosest(
|
|
94
|
-
evt.target,
|
|
95
|
-
".vuuTableCell, .vuuCellBlock"
|
|
96
|
-
);
|
|
97
|
-
if (cell?.classList.contains("vuuTableCell")) {
|
|
98
|
-
cellblockUtils.setElementBox(cell, endBox);
|
|
99
|
-
stateRef.current.endCell = cell;
|
|
100
|
-
cellblockUtils.updateCellBlockClassName(stateRef.current);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}, []);
|
|
104
|
-
handlersRef.current.mouseUp = react.useCallback(
|
|
105
|
-
(evt) => {
|
|
106
|
-
removeMouseListener("mouseMove");
|
|
107
|
-
removeMouseListener("mouseUp");
|
|
108
|
-
const { cellBlock: cellBlock2, endCell, startCell } = stateRef.current;
|
|
109
|
-
const table = vuuUtils.queryClosest(evt.target, ".vuuTable");
|
|
110
|
-
endCell?.classList.add("vuu-cellblock-end");
|
|
111
|
-
if (table) {
|
|
112
|
-
table.classList.remove("vuu-cellblock-select-in-progress-mouse");
|
|
113
|
-
}
|
|
114
|
-
if (startCell && endCell) {
|
|
115
|
-
const tableCellBlock = cellblockUtils.getTableCellBlock(startCell, endCell);
|
|
116
|
-
onSelectCellBlock?.(tableCellBlock);
|
|
117
|
-
}
|
|
118
|
-
if (cellBlock2) {
|
|
119
|
-
cellBlock2.focus();
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
[onSelectCellBlock, removeMouseListener]
|
|
123
|
-
);
|
|
124
|
-
handlersRef.current.mouseMovePreDrag = react.useCallback(
|
|
125
|
-
(evt) => {
|
|
126
|
-
const { current: state } = stateRef;
|
|
127
|
-
const { mouseStartX, mouseStartY } = state;
|
|
128
|
-
const x = state.mousePosX = evt.clientX;
|
|
129
|
-
const y = state.mousePosY = evt.clientY;
|
|
130
|
-
const distance = Math.max(
|
|
131
|
-
Math.abs(x - mouseStartX),
|
|
132
|
-
Math.abs(y - mouseStartY)
|
|
133
|
-
);
|
|
134
|
-
if (distance > DRAG_THRESHOLD) {
|
|
135
|
-
createCellBlock("mouse");
|
|
136
|
-
const { mouseMove, mouseUp } = handlersRef.current;
|
|
137
|
-
removeMouseListener("mouseMovePreDrag");
|
|
138
|
-
removeMouseListener("mouseUpPreDrag");
|
|
139
|
-
addMouseListener("mouseMove", mouseMove);
|
|
140
|
-
addMouseListener("mouseUp", mouseUp);
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
[addMouseListener, createCellBlock, removeMouseListener]
|
|
144
|
-
);
|
|
145
|
-
handlersRef.current.mouseUpPreDrag = react.useCallback(() => {
|
|
146
|
-
removeMouseListener("mouseMovePreDrag");
|
|
147
|
-
removeMouseListener("mouseUpPreDrag");
|
|
148
|
-
}, [removeMouseListener]);
|
|
149
|
-
const handleNativeMouseOver = react.useCallback((evt) => {
|
|
150
|
-
const cell = vuuUtils.queryClosest(evt.target, ".vuuTableCell");
|
|
151
|
-
if (cell) {
|
|
152
|
-
stateRef.current.endPos = tableDomUtils.getAriaCellPos(cell);
|
|
153
|
-
stateRef.current.endCell?.classList.remove("vuu-cellblock-end");
|
|
154
|
-
stateRef.current.endCell = cell;
|
|
155
|
-
cellblockUtils.setElementBox(cell, stateRef.current.endBox);
|
|
156
|
-
cellblockUtils.updateCellBlockClassName(stateRef.current);
|
|
157
|
-
cell?.classList.add("vuu-cellblock-end");
|
|
158
|
-
}
|
|
159
|
-
}, []);
|
|
160
|
-
const handleNativeMouseUp = react.useCallback(() => {
|
|
161
|
-
window.removeEventListener("mouseover", handleNativeMouseOver);
|
|
162
|
-
}, [handleNativeMouseOver]);
|
|
163
|
-
const handleMouseDown = react.useCallback(
|
|
164
|
-
(evt) => {
|
|
165
|
-
if (evt.button === 0) {
|
|
166
|
-
initializeStateRef();
|
|
167
|
-
const { current: state } = stateRef;
|
|
168
|
-
const cell = vuuUtils.queryClosest(evt.target, ".vuuTableCell");
|
|
169
|
-
if (cell) {
|
|
170
|
-
state.startCell = cell;
|
|
171
|
-
state.mouseStartX = evt.clientX;
|
|
172
|
-
state.mouseStartY = evt.clientY;
|
|
173
|
-
const { mouseMovePreDrag, mouseUpPreDrag } = handlersRef.current;
|
|
174
|
-
addMouseListener("mouseMovePreDrag", mouseMovePreDrag);
|
|
175
|
-
addMouseListener("mouseUpPreDrag", mouseUpPreDrag);
|
|
176
|
-
console.log("register mouse enter");
|
|
177
|
-
window.addEventListener("mouseover", handleNativeMouseOver);
|
|
178
|
-
window.addEventListener("mouseup", handleNativeMouseUp);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
},
|
|
182
|
-
[
|
|
183
|
-
addMouseListener,
|
|
184
|
-
handleNativeMouseOver,
|
|
185
|
-
handleNativeMouseUp,
|
|
186
|
-
initializeStateRef
|
|
187
|
-
]
|
|
188
|
-
);
|
|
189
|
-
const nativeKeyDownHandlerRef = react.useRef(NullHandler);
|
|
190
|
-
const handleNativeKeyUp = react.useCallback((evt) => {
|
|
191
|
-
if (evt.key === "Shift") {
|
|
192
|
-
const { endCell } = stateRef.current;
|
|
193
|
-
const table = vuuUtils.queryClosest(evt.target, ".vuuTable");
|
|
194
|
-
endCell?.classList.add("vuu-cellblock-end");
|
|
195
|
-
if (table) {
|
|
196
|
-
table.classList.remove("vuu-cellblock-select-in-progress-keyboard");
|
|
197
|
-
}
|
|
198
|
-
window.removeEventListener("keydown", nativeKeyDownHandlerRef.current, {
|
|
199
|
-
capture: true
|
|
200
|
-
});
|
|
201
|
-
window.removeEventListener("keyup", handleNativeKeyUp, {
|
|
202
|
-
capture: true
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
}, []);
|
|
206
|
-
const handleNativeKeyDown = nativeKeyDownHandlerRef.current = react.useCallback(
|
|
207
|
-
({ key }) => {
|
|
208
|
-
if (vuuUtils.isArrowKey(key)) {
|
|
209
|
-
const { endBox, endPos, startBox } = stateRef.current;
|
|
210
|
-
if (cellblockUtils.isNullCellBox(startBox)) {
|
|
211
|
-
createCellBlock("keyboard");
|
|
212
|
-
}
|
|
213
|
-
const nextCell = tableDomUtils.getNextCellPos(key, endPos, columnCount, rowCount);
|
|
214
|
-
stateRef.current.endPos = nextCell;
|
|
215
|
-
const cell = tableDomUtils.getTableCell(containerRef, nextCell);
|
|
216
|
-
stateRef.current.endCell = cell;
|
|
217
|
-
cellblockUtils.setElementBox(cell, endBox);
|
|
218
|
-
cellblockUtils.updateCellBlockClassName(stateRef.current);
|
|
219
|
-
}
|
|
220
|
-
},
|
|
221
|
-
[columnCount, containerRef, createCellBlock, rowCount]
|
|
222
|
-
);
|
|
223
|
-
const handleKeyDown = react.useCallback(
|
|
224
|
-
(evt) => {
|
|
225
|
-
console.log(
|
|
226
|
-
`[useCellBlockSelection] handleKeyDown (only interested in Shift key)`
|
|
227
|
-
);
|
|
228
|
-
if (evt.key === "Shift") {
|
|
229
|
-
initializeStateRef();
|
|
230
|
-
const cell = vuuUtils.queryClosest(evt.target, ".vuuTableCell");
|
|
231
|
-
if (cell) {
|
|
232
|
-
const startPos = tableDomUtils.getAriaCellPos(cell);
|
|
233
|
-
stateRef.current.startPos = startPos;
|
|
234
|
-
stateRef.current.endPos = clone(startPos);
|
|
235
|
-
const { current: state } = stateRef;
|
|
236
|
-
state.startCell = cell;
|
|
237
|
-
window.addEventListener("keydown", handleNativeKeyDown, {
|
|
238
|
-
capture: true
|
|
239
|
-
});
|
|
240
|
-
window.addEventListener("keyup", handleNativeKeyUp, {
|
|
241
|
-
capture: true
|
|
242
|
-
});
|
|
243
|
-
evt.preventDefault();
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
},
|
|
247
|
-
[handleNativeKeyDown, handleNativeKeyUp, initializeStateRef]
|
|
248
|
-
);
|
|
249
|
-
return {
|
|
250
|
-
cellBlock,
|
|
251
|
-
onKeyDown: allowCellBlockSelection ? handleKeyDown : void 0,
|
|
252
|
-
onMouseDown: allowCellBlockSelection ? handleMouseDown : void 0
|
|
253
|
-
};
|
|
254
|
-
};
|
|
255
|
-
|
|
256
|
-
exports.useCellBlockSelection = useCellBlockSelection;
|
|
257
|
-
//# sourceMappingURL=useCellBlockSelection.js.map
|