@vuu-ui/vuu-table 0.9.2 → 0.9.3

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.
Files changed (165) hide show
  1. package/cjs/CellFocusState.js +1 -1
  2. package/cjs/CellFocusState.js.map +1 -1
  3. package/cjs/Row.js.map +1 -1
  4. package/cjs/Table.css.js +1 -1
  5. package/cjs/Table.js +28 -0
  6. package/cjs/Table.js.map +1 -1
  7. package/cjs/VirtualColSpan.js.map +1 -1
  8. package/cjs/bulk-edit/{BulkEditPanelDialog.js → BulkEditDialog.js} +13 -8
  9. package/cjs/bulk-edit/BulkEditDialog.js.map +1 -0
  10. package/cjs/bulk-edit/BulkEditPanel.js.map +1 -1
  11. package/cjs/bulk-edit/BulkEditRow.js.map +1 -1
  12. package/cjs/bulk-edit/useBulkEditPanel.js +12 -8
  13. package/cjs/bulk-edit/useBulkEditPanel.js.map +1 -1
  14. package/cjs/bulk-edit/useBulkEditRow.js.map +1 -1
  15. package/cjs/cell-block/CellBlock.js.map +1 -1
  16. package/cjs/cell-block/cellblock-utils.js.map +1 -1
  17. package/cjs/cell-block/useCellBlockSelection.js.map +1 -1
  18. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -1
  19. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +1 -1
  20. package/cjs/cell-renderers/input-cell/InputCell.js.map +1 -1
  21. package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +1 -1
  22. package/cjs/column-header-pill/ColumnHeaderPill.css.js +1 -1
  23. package/cjs/column-header-pill/ColumnHeaderPill.js.map +1 -1
  24. package/cjs/column-header-pill/GroupColumnPill.js.map +1 -1
  25. package/cjs/column-header-pill/SortIndicator.js.map +1 -1
  26. package/cjs/column-menu/ColumnMenu.js.map +1 -1
  27. package/cjs/column-resizing/ColumnResizer.js.map +1 -1
  28. package/cjs/column-resizing/useTableColumnResize.js.map +1 -1
  29. package/cjs/context-menu/buildContextMenuDescriptors.js.map +1 -1
  30. package/cjs/context-menu/useHandleTableContextMenu.js.map +1 -1
  31. package/cjs/header-cell/GroupHeaderCell.js.map +1 -1
  32. package/cjs/header-cell/HeaderCell.js.map +1 -1
  33. package/cjs/index.js +2 -2
  34. package/cjs/moving-window.js +1 -1
  35. package/cjs/moving-window.js.map +1 -1
  36. package/cjs/pagination/PaginationControl.js.map +1 -1
  37. package/cjs/pagination/usePagination.js.map +1 -1
  38. package/cjs/table-cell/TableCell.js.map +1 -1
  39. package/cjs/table-cell/TableGroupCell.css.js +1 -1
  40. package/cjs/table-cell/TableGroupCell.js +1 -1
  41. package/cjs/table-cell/TableGroupCell.js.map +1 -1
  42. package/cjs/table-config.js.map +1 -1
  43. package/cjs/table-dom-utils.js.map +1 -1
  44. package/cjs/table-header/HeaderProvider.js.map +1 -1
  45. package/cjs/table-header/TableHeader.js +6 -9
  46. package/cjs/table-header/TableHeader.js.map +1 -1
  47. package/cjs/table-header/useTableHeader.js.map +1 -1
  48. package/cjs/useCell.js.map +1 -1
  49. package/cjs/useCellEditing.js.map +1 -1
  50. package/cjs/useCellFocus.js.map +1 -1
  51. package/cjs/useControlledTableNavigation.js.map +1 -1
  52. package/cjs/useDataSource.js +22 -3
  53. package/cjs/useDataSource.js.map +1 -1
  54. package/cjs/useEditableCell.js.map +1 -1
  55. package/cjs/useKeyboardNavigation.js.map +1 -1
  56. package/cjs/useMeasuredHeight.js.map +1 -1
  57. package/cjs/useRowClassNameGenerators.js.map +1 -1
  58. package/cjs/useSelection.js +2 -1
  59. package/cjs/useSelection.js.map +1 -1
  60. package/cjs/useTable.js +14 -7
  61. package/cjs/useTable.js.map +1 -1
  62. package/cjs/useTableAndColumnSettings.js.map +1 -1
  63. package/cjs/useTableContextMenu.js.map +1 -1
  64. package/cjs/useTableModel.js +8 -5
  65. package/cjs/useTableModel.js.map +1 -1
  66. package/cjs/useTableScroll.js.map +1 -1
  67. package/cjs/useTableViewport.js.map +1 -1
  68. package/esm/CellFocusState.js +1 -1
  69. package/esm/CellFocusState.js.map +1 -1
  70. package/esm/Row.js.map +1 -1
  71. package/esm/Table.css.js +1 -1
  72. package/esm/Table.js +28 -0
  73. package/esm/Table.js.map +1 -1
  74. package/esm/VirtualColSpan.js.map +1 -1
  75. package/esm/bulk-edit/{BulkEditPanelDialog.js → BulkEditDialog.js} +14 -9
  76. package/esm/bulk-edit/BulkEditDialog.js.map +1 -0
  77. package/esm/bulk-edit/BulkEditPanel.js.map +1 -1
  78. package/esm/bulk-edit/BulkEditRow.js.map +1 -1
  79. package/esm/bulk-edit/useBulkEditPanel.js +12 -8
  80. package/esm/bulk-edit/useBulkEditPanel.js.map +1 -1
  81. package/esm/bulk-edit/useBulkEditRow.js.map +1 -1
  82. package/esm/cell-block/CellBlock.js.map +1 -1
  83. package/esm/cell-block/cellblock-utils.js.map +1 -1
  84. package/esm/cell-block/useCellBlockSelection.js.map +1 -1
  85. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -1
  86. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +1 -1
  87. package/esm/cell-renderers/input-cell/InputCell.js.map +1 -1
  88. package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +1 -1
  89. package/esm/column-header-pill/ColumnHeaderPill.css.js +1 -1
  90. package/esm/column-header-pill/ColumnHeaderPill.js.map +1 -1
  91. package/esm/column-header-pill/GroupColumnPill.js.map +1 -1
  92. package/esm/column-header-pill/SortIndicator.js.map +1 -1
  93. package/esm/column-menu/ColumnMenu.js.map +1 -1
  94. package/esm/column-resizing/ColumnResizer.js.map +1 -1
  95. package/esm/column-resizing/useTableColumnResize.js.map +1 -1
  96. package/esm/context-menu/buildContextMenuDescriptors.js.map +1 -1
  97. package/esm/context-menu/useHandleTableContextMenu.js.map +1 -1
  98. package/esm/header-cell/GroupHeaderCell.js.map +1 -1
  99. package/esm/header-cell/HeaderCell.js.map +1 -1
  100. package/esm/index.js +1 -1
  101. package/esm/moving-window.js +1 -1
  102. package/esm/moving-window.js.map +1 -1
  103. package/esm/pagination/PaginationControl.js.map +1 -1
  104. package/esm/pagination/usePagination.js.map +1 -1
  105. package/esm/table-cell/TableCell.js.map +1 -1
  106. package/esm/table-cell/TableGroupCell.css.js +1 -1
  107. package/esm/table-cell/TableGroupCell.js +1 -1
  108. package/esm/table-cell/TableGroupCell.js.map +1 -1
  109. package/esm/table-config.js.map +1 -1
  110. package/esm/table-dom-utils.js.map +1 -1
  111. package/esm/table-header/HeaderProvider.js.map +1 -1
  112. package/esm/table-header/TableHeader.js +6 -9
  113. package/esm/table-header/TableHeader.js.map +1 -1
  114. package/esm/table-header/useTableHeader.js.map +1 -1
  115. package/esm/useCell.js.map +1 -1
  116. package/esm/useCellEditing.js.map +1 -1
  117. package/esm/useCellFocus.js.map +1 -1
  118. package/esm/useControlledTableNavigation.js.map +1 -1
  119. package/esm/useDataSource.js +22 -3
  120. package/esm/useDataSource.js.map +1 -1
  121. package/esm/useEditableCell.js.map +1 -1
  122. package/esm/useKeyboardNavigation.js.map +1 -1
  123. package/esm/useMeasuredHeight.js.map +1 -1
  124. package/esm/useRowClassNameGenerators.js.map +1 -1
  125. package/esm/useSelection.js +2 -1
  126. package/esm/useSelection.js.map +1 -1
  127. package/esm/useTable.js +14 -7
  128. package/esm/useTable.js.map +1 -1
  129. package/esm/useTableAndColumnSettings.js.map +1 -1
  130. package/esm/useTableContextMenu.js.map +1 -1
  131. package/esm/useTableModel.js +8 -5
  132. package/esm/useTableModel.js.map +1 -1
  133. package/esm/useTableScroll.js.map +1 -1
  134. package/esm/useTableViewport.js.map +1 -1
  135. package/package.json +10 -10
  136. package/types/Row.d.ts +2 -3
  137. package/types/Table.d.ts +40 -2
  138. package/types/VirtualColSpan.d.ts +0 -1
  139. package/types/bulk-edit/BulkEditDialog.d.ts +9 -0
  140. package/types/bulk-edit/BulkEditRow.d.ts +1 -1
  141. package/types/bulk-edit/index.d.ts +1 -1
  142. package/types/cell-renderers/checkbox-cell/CheckboxCell.d.ts +1 -2
  143. package/types/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.d.ts +0 -1
  144. package/types/cell-renderers/input-cell/InputCell.d.ts +1 -2
  145. package/types/cell-renderers/toggle-cell/ToggleCell.d.ts +0 -1
  146. package/types/column-header-pill/ColumnHeaderPill.d.ts +1 -1
  147. package/types/column-header-pill/GroupColumnPill.d.ts +1 -2
  148. package/types/column-header-pill/SortIndicator.d.ts +1 -2
  149. package/types/column-menu/ColumnMenu.d.ts +1 -1
  150. package/types/column-resizing/ColumnResizer.d.ts +1 -2
  151. package/types/header-cell/GroupHeaderCell.d.ts +1 -2
  152. package/types/header-cell/HeaderCell.d.ts +1 -2
  153. package/types/table-cell/TableCell.d.ts +1 -2
  154. package/types/table-cell/TableGroupCell.d.ts +1 -2
  155. package/types/table-header/TableHeader.d.ts +1 -2
  156. package/types/table-header/useTableHeader.d.ts +0 -1
  157. package/types/useCell.d.ts +0 -1
  158. package/types/useControlledTableNavigation.d.ts +1 -1
  159. package/types/useDataSource.d.ts +4 -6
  160. package/types/useSelection.d.ts +3 -4
  161. package/types/useTable.d.ts +12 -12
  162. package/types/useTableModel.d.ts +6 -6
  163. package/cjs/bulk-edit/BulkEditPanelDialog.js.map +0 -1
  164. package/esm/bulk-edit/BulkEditPanelDialog.js.map +0 -1
  165. package/types/bulk-edit/BulkEditPanelDialog.d.ts +0 -10
@@ -1 +1 @@
1
- {"version":3,"file":"useCellBlockSelection.js","sources":["../../src/cell-block/useCellBlockSelection.tsx"],"sourcesContent":["import { isArrowKey, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport {\n KeyboardEventHandler,\n MouseEventHandler,\n ReactElement,\n RefCallback,\n RefObject,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n getAriaCellPos,\n getNextCellPos,\n getTableCell,\n} from \"../table-dom-utils\";\nimport { CellBlock } from \"./CellBlock\";\nimport {\n PosTuple,\n RefState,\n TableCellBlock,\n getTableCellBlock,\n getTextFromCells,\n isNullCellBox,\n outsideBox,\n refState,\n setElementBox,\n updateCellBlockClassName,\n} from \"./cellblock-utils\";\n\nconst clone = (posTuple: PosTuple) => posTuple.slice() as PosTuple;\n\ntype NativeKeyboardHandler = (evt: KeyboardEvent) => void;\ntype NativeMouseHandler = (evt: MouseEvent) => void;\ntype MouseHandlers = {\n mouseMove: NativeMouseHandler;\n mouseMovePreDrag: NativeMouseHandler;\n mouseUp: NativeMouseHandler;\n mouseUpPreDrag: NativeMouseHandler;\n};\n\nconst NullHandler = () => console.error(\"no handler installed\");\nconst mouseHandlers: MouseHandlers = {\n mouseMove: NullHandler,\n mouseMovePreDrag: NullHandler,\n mouseUp: NullHandler,\n mouseUpPreDrag: NullHandler,\n};\n\ntype MouseOperation = keyof typeof mouseHandlers;\n\nconst mouseType = (name: string) =>\n name.startsWith(\"mouseMove\") ? \"mousemove\" : \"mouseup\";\n\nconst DRAG_THRESHOLD = 5;\n\nexport interface CellblockSelectionHookProps {\n allowCellBlockSelection?: boolean;\n columnCount?: number;\n containerRef: RefObject<HTMLElement>;\n onSelectCellBlock?: (cellBlock: TableCellBlock) => void;\n rowCount?: number;\n}\n\nexport const useCellBlockSelection = ({\n allowCellBlockSelection,\n columnCount = 0,\n containerRef,\n onSelectCellBlock,\n rowCount = 0,\n}: CellblockSelectionHookProps) => {\n const [cellBlock, setCellBlock] = useState<ReactElement | null>(null);\n const stateRef = useRef<RefState>(refState);\n const handlersRef = useRef<MouseHandlers>(mouseHandlers);\n\n const handleCopy = useCallback(async () => {\n const { startCell, endCell } = stateRef.current;\n if (startCell && endCell) {\n const tsvText = getTextFromCells(startCell, endCell);\n const type = \"text/plain\";\n const blob = new Blob([tsvText], { type });\n const data = [new ClipboardItem({ [type]: blob })];\n await navigator.clipboard.write(data);\n }\n }, []);\n\n const cellBlockRef = useCallback<RefCallback<HTMLDivElement>>((el) => {\n stateRef.current.cellBlock = el;\n }, []);\n\n const createCellBlock = useCallback(\n (method: \"mouse\" | \"keyboard\" = \"mouse\") => {\n const { startBox, startCell } = stateRef.current;\n if (startCell) {\n const table = queryClosest<HTMLDivElement>(startCell, \".vuuTable\");\n if (table) {\n table.classList.add(`vuu-cellblock-select-in-progress-${method}`);\n }\n setElementBox(startCell, startBox);\n startCell.classList.add(\"vuu-cellblock-start\");\n setCellBlock(<CellBlock onCopy={handleCopy} ref={cellBlockRef} />);\n }\n },\n [cellBlockRef, handleCopy],\n );\n\n const initializeStateRef = useCallback(() => {\n const { cellBlock, cellBlockClassName, startCell, endCell } =\n stateRef.current;\n if (startCell) {\n startCell.classList.remove(\"vuu-cellblock-start\");\n }\n if (endCell) {\n endCell.classList.remove(\"vuu-cellblock-end\");\n }\n if (cellBlock?.classList.contains(cellBlockClassName)) {\n cellBlock.classList.remove(cellBlockClassName);\n }\n\n const { endBox, startBox } = refState;\n\n stateRef.current = {\n ...refState,\n cellBlock,\n endBox: { ...endBox },\n endPos: [-1, -1],\n startBox: { ...startBox },\n startPos: [-1, -1],\n };\n }, []);\n\n const addMouseListener = useCallback(\n (mouseOperation: MouseOperation, handler: NativeMouseHandler) => {\n window.addEventListener(mouseType(mouseOperation), handler);\n handlersRef.current[mouseOperation] = handler;\n },\n [],\n );\n\n const removeMouseListener = useCallback((name: MouseOperation) => {\n window.removeEventListener(mouseType(name), handlersRef.current[name]);\n }, []);\n\n handlersRef.current.mouseMove = useCallback((evt: MouseEvent) => {\n const { clientX: x, clientY: y } = evt;\n const { endBox, startBox } = stateRef.current;\n if (outsideBox(startBox, x, y) && outsideBox(endBox, x, y)) {\n const cell = queryClosest<HTMLDivElement>(\n evt.target,\n \".vuuTableCell, .vuuCellBlock\",\n );\n if (cell?.classList.contains(\"vuuTableCell\")) {\n setElementBox(cell, endBox);\n stateRef.current.endCell = cell;\n updateCellBlockClassName(stateRef.current);\n }\n }\n }, []);\n\n handlersRef.current.mouseUp = useCallback(\n (evt: MouseEvent) => {\n removeMouseListener(\"mouseMove\");\n removeMouseListener(\"mouseUp\");\n\n const { cellBlock, endCell, startCell } = stateRef.current;\n\n const table = queryClosest<HTMLDivElement>(evt.target, \".vuuTable\");\n endCell?.classList.add(\"vuu-cellblock-end\");\n if (table) {\n table.classList.remove(\"vuu-cellblock-select-in-progress-mouse\");\n }\n\n if (startCell && endCell) {\n const tableCellBlock = getTableCellBlock(startCell, endCell);\n onSelectCellBlock?.(tableCellBlock);\n }\n\n if (cellBlock) {\n cellBlock.focus();\n }\n },\n [onSelectCellBlock, removeMouseListener],\n );\n\n handlersRef.current.mouseMovePreDrag = useCallback(\n (evt: MouseEvent) => {\n const { current: state } = stateRef;\n const { mouseStartX, mouseStartY } = state;\n\n const x = (state.mousePosX = evt.clientX);\n const y = (state.mousePosY = evt.clientY);\n\n const distance = Math.max(\n Math.abs(x - mouseStartX),\n Math.abs(y - mouseStartY),\n );\n\n if (distance > DRAG_THRESHOLD) {\n createCellBlock(\"mouse\");\n\n const { mouseMove, mouseUp } = handlersRef.current;\n removeMouseListener(\"mouseMovePreDrag\");\n removeMouseListener(\"mouseUpPreDrag\");\n addMouseListener(\"mouseMove\", mouseMove);\n addMouseListener(\"mouseUp\", mouseUp);\n }\n },\n [addMouseListener, createCellBlock, removeMouseListener],\n );\n\n handlersRef.current.mouseUpPreDrag = useCallback(() => {\n removeMouseListener(\"mouseMovePreDrag\");\n removeMouseListener(\"mouseUpPreDrag\");\n }, [removeMouseListener]);\n\n const handleNativeMouseOver = useCallback((evt: MouseEvent) => {\n const cell = queryClosest<HTMLDivElement>(evt.target, \".vuuTableCell\");\n if (cell) {\n stateRef.current.endPos = getAriaCellPos(cell);\n stateRef.current.endCell?.classList.remove(\"vuu-cellblock-end\");\n stateRef.current.endCell = cell;\n setElementBox(cell, stateRef.current.endBox);\n updateCellBlockClassName(stateRef.current);\n\n cell?.classList.add(\"vuu-cellblock-end\");\n }\n }, []);\n\n const handleNativeMouseUp = useCallback(() => {\n window.removeEventListener(\"mouseover\", handleNativeMouseOver);\n }, [handleNativeMouseOver]);\n\n const handleMouseDown = useCallback<MouseEventHandler>(\n (evt) => {\n if (evt.button === 0) {\n initializeStateRef();\n const { current: state } = stateRef;\n const cell = queryClosest<HTMLDivElement>(evt.target, \".vuuTableCell\");\n if (cell) {\n state.startCell = cell;\n state.mouseStartX = evt.clientX;\n state.mouseStartY = evt.clientY;\n\n const { mouseMovePreDrag, mouseUpPreDrag } = handlersRef.current;\n addMouseListener(\"mouseMovePreDrag\", mouseMovePreDrag);\n addMouseListener(\"mouseUpPreDrag\", mouseUpPreDrag);\n console.log(\"register mouse enter\");\n window.addEventListener(\"mouseover\", handleNativeMouseOver);\n window.addEventListener(\"mouseup\", handleNativeMouseUp);\n }\n }\n },\n [\n addMouseListener,\n handleNativeMouseOver,\n handleNativeMouseUp,\n initializeStateRef,\n ],\n );\n\n const nativeKeyDownHandlerRef = useRef<NativeKeyboardHandler>(NullHandler);\n\n const handleNativeKeyUp = useCallback((evt: KeyboardEvent) => {\n if (evt.key === \"Shift\") {\n const { endCell } = stateRef.current;\n const table = queryClosest<HTMLDivElement>(evt.target, \".vuuTable\");\n endCell?.classList.add(\"vuu-cellblock-end\");\n if (table) {\n table.classList.remove(\"vuu-cellblock-select-in-progress-keyboard\");\n }\n\n window.removeEventListener(\"keydown\", nativeKeyDownHandlerRef.current, {\n capture: true,\n });\n window.removeEventListener(\"keyup\", handleNativeKeyUp, {\n capture: true,\n });\n }\n }, []);\n\n const handleNativeKeyDown = (nativeKeyDownHandlerRef.current = useCallback(\n ({ key }: KeyboardEvent) => {\n if (isArrowKey(key)) {\n const { endBox, endPos, startBox } = stateRef.current;\n if (isNullCellBox(startBox)) {\n createCellBlock(\"keyboard\");\n }\n const nextCell = getNextCellPos(key, endPos, columnCount, rowCount);\n stateRef.current.endPos = nextCell;\n const cell = getTableCell(containerRef, nextCell);\n stateRef.current.endCell = cell as HTMLDivElement;\n setElementBox(cell, endBox);\n updateCellBlockClassName(stateRef.current);\n }\n },\n [columnCount, containerRef, createCellBlock, rowCount],\n ));\n const handleKeyDown = useCallback<KeyboardEventHandler>(\n (evt) => {\n if (evt.key === \"Shift\") {\n initializeStateRef();\n const cell = queryClosest<HTMLDivElement>(evt.target, \".vuuTableCell\");\n if (cell) {\n const startPos = getAriaCellPos(cell);\n stateRef.current.startPos = startPos;\n stateRef.current.endPos = clone(startPos);\n const { current: state } = stateRef;\n state.startCell = cell;\n\n window.addEventListener(\"keydown\", handleNativeKeyDown, {\n capture: true,\n });\n window.addEventListener(\"keyup\", handleNativeKeyUp, {\n capture: true,\n });\n\n evt.preventDefault();\n }\n }\n },\n [handleNativeKeyDown, handleNativeKeyUp, initializeStateRef],\n );\n\n return {\n cellBlock,\n onKeyDown: allowCellBlockSelection ? handleKeyDown : undefined,\n onMouseDown: allowCellBlockSelection ? handleMouseDown : undefined,\n };\n};\n"],"names":["cellBlock"],"mappings":"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"}
1
+ {"version":3,"file":"useCellBlockSelection.js","sources":["../../src/cell-block/useCellBlockSelection.tsx"],"sourcesContent":["import { isArrowKey, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport {\n KeyboardEventHandler,\n MouseEventHandler,\n ReactElement,\n RefCallback,\n RefObject,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n getAriaCellPos,\n getNextCellPos,\n getTableCell,\n} from \"../table-dom-utils\";\nimport { CellBlock } from \"./CellBlock\";\nimport {\n PosTuple,\n RefState,\n TableCellBlock,\n getTableCellBlock,\n getTextFromCells,\n isNullCellBox,\n outsideBox,\n refState,\n setElementBox,\n updateCellBlockClassName,\n} from \"./cellblock-utils\";\n\nconst clone = (posTuple: PosTuple) => posTuple.slice() as PosTuple;\n\ntype NativeKeyboardHandler = (evt: KeyboardEvent) => void;\ntype NativeMouseHandler = (evt: MouseEvent) => void;\ntype MouseHandlers = {\n mouseMove: NativeMouseHandler;\n mouseMovePreDrag: NativeMouseHandler;\n mouseUp: NativeMouseHandler;\n mouseUpPreDrag: NativeMouseHandler;\n};\n\nconst NullHandler = () => console.error(\"no handler installed\");\nconst mouseHandlers: MouseHandlers = {\n mouseMove: NullHandler,\n mouseMovePreDrag: NullHandler,\n mouseUp: NullHandler,\n mouseUpPreDrag: NullHandler,\n};\n\ntype MouseOperation = keyof typeof mouseHandlers;\n\nconst mouseType = (name: string) =>\n name.startsWith(\"mouseMove\") ? \"mousemove\" : \"mouseup\";\n\nconst DRAG_THRESHOLD = 5;\n\nexport interface CellblockSelectionHookProps {\n allowCellBlockSelection?: boolean;\n columnCount?: number;\n containerRef: RefObject<HTMLElement>;\n onSelectCellBlock?: (cellBlock: TableCellBlock) => void;\n rowCount?: number;\n}\n\nexport const useCellBlockSelection = ({\n allowCellBlockSelection,\n columnCount = 0,\n containerRef,\n onSelectCellBlock,\n rowCount = 0,\n}: CellblockSelectionHookProps) => {\n const [cellBlock, setCellBlock] = useState<ReactElement | null>(null);\n const stateRef = useRef<RefState>(refState);\n const handlersRef = useRef<MouseHandlers>(mouseHandlers);\n\n const handleCopy = useCallback(async () => {\n const { startCell, endCell } = stateRef.current;\n if (startCell && endCell) {\n const tsvText = getTextFromCells(startCell, endCell);\n const type = \"text/plain\";\n const blob = new Blob([tsvText], { type });\n const data = [new ClipboardItem({ [type]: blob })];\n await navigator.clipboard.write(data);\n }\n }, []);\n\n const cellBlockRef = useCallback<RefCallback<HTMLDivElement>>((el) => {\n stateRef.current.cellBlock = el;\n }, []);\n\n const createCellBlock = useCallback(\n (method: \"mouse\" | \"keyboard\" = \"mouse\") => {\n const { startBox, startCell } = stateRef.current;\n if (startCell) {\n const table = queryClosest<HTMLDivElement>(startCell, \".vuuTable\");\n if (table) {\n table.classList.add(`vuu-cellblock-select-in-progress-${method}`);\n }\n setElementBox(startCell, startBox);\n startCell.classList.add(\"vuu-cellblock-start\");\n setCellBlock(<CellBlock onCopy={handleCopy} ref={cellBlockRef} />);\n }\n },\n [cellBlockRef, handleCopy],\n );\n\n const initializeStateRef = useCallback(() => {\n const { cellBlock, cellBlockClassName, startCell, endCell } =\n stateRef.current;\n if (startCell) {\n startCell.classList.remove(\"vuu-cellblock-start\");\n }\n if (endCell) {\n endCell.classList.remove(\"vuu-cellblock-end\");\n }\n if (cellBlock?.classList.contains(cellBlockClassName)) {\n cellBlock.classList.remove(cellBlockClassName);\n }\n\n const { endBox, startBox } = refState;\n\n stateRef.current = {\n ...refState,\n cellBlock,\n endBox: { ...endBox },\n endPos: [-1, -1],\n startBox: { ...startBox },\n startPos: [-1, -1],\n };\n }, []);\n\n const addMouseListener = useCallback(\n (mouseOperation: MouseOperation, handler: NativeMouseHandler) => {\n window.addEventListener(mouseType(mouseOperation), handler);\n handlersRef.current[mouseOperation] = handler;\n },\n [],\n );\n\n const removeMouseListener = useCallback((name: MouseOperation) => {\n window.removeEventListener(mouseType(name), handlersRef.current[name]);\n }, []);\n\n handlersRef.current.mouseMove = useCallback((evt: MouseEvent) => {\n const { clientX: x, clientY: y } = evt;\n const { endBox, startBox } = stateRef.current;\n if (outsideBox(startBox, x, y) && outsideBox(endBox, x, y)) {\n const cell = queryClosest<HTMLDivElement>(\n evt.target,\n \".vuuTableCell, .vuuCellBlock\",\n );\n if (cell?.classList.contains(\"vuuTableCell\")) {\n setElementBox(cell, endBox);\n stateRef.current.endCell = cell;\n updateCellBlockClassName(stateRef.current);\n }\n }\n }, []);\n\n handlersRef.current.mouseUp = useCallback(\n (evt: MouseEvent) => {\n removeMouseListener(\"mouseMove\");\n removeMouseListener(\"mouseUp\");\n\n const { cellBlock, endCell, startCell } = stateRef.current;\n\n const table = queryClosest<HTMLDivElement>(evt.target, \".vuuTable\");\n endCell?.classList.add(\"vuu-cellblock-end\");\n if (table) {\n table.classList.remove(\"vuu-cellblock-select-in-progress-mouse\");\n }\n\n if (startCell && endCell) {\n const tableCellBlock = getTableCellBlock(startCell, endCell);\n onSelectCellBlock?.(tableCellBlock);\n }\n\n if (cellBlock) {\n cellBlock.focus();\n }\n },\n [onSelectCellBlock, removeMouseListener],\n );\n\n handlersRef.current.mouseMovePreDrag = useCallback(\n (evt: MouseEvent) => {\n const { current: state } = stateRef;\n const { mouseStartX, mouseStartY } = state;\n\n const x = (state.mousePosX = evt.clientX);\n const y = (state.mousePosY = evt.clientY);\n\n const distance = Math.max(\n Math.abs(x - mouseStartX),\n Math.abs(y - mouseStartY),\n );\n\n if (distance > DRAG_THRESHOLD) {\n createCellBlock(\"mouse\");\n\n const { mouseMove, mouseUp } = handlersRef.current;\n removeMouseListener(\"mouseMovePreDrag\");\n removeMouseListener(\"mouseUpPreDrag\");\n addMouseListener(\"mouseMove\", mouseMove);\n addMouseListener(\"mouseUp\", mouseUp);\n }\n },\n [addMouseListener, createCellBlock, removeMouseListener],\n );\n\n handlersRef.current.mouseUpPreDrag = useCallback(() => {\n removeMouseListener(\"mouseMovePreDrag\");\n removeMouseListener(\"mouseUpPreDrag\");\n }, [removeMouseListener]);\n\n const handleNativeMouseOver = useCallback((evt: MouseEvent) => {\n const cell = queryClosest<HTMLDivElement>(evt.target, \".vuuTableCell\");\n if (cell) {\n stateRef.current.endPos = getAriaCellPos(cell);\n stateRef.current.endCell?.classList.remove(\"vuu-cellblock-end\");\n stateRef.current.endCell = cell;\n setElementBox(cell, stateRef.current.endBox);\n updateCellBlockClassName(stateRef.current);\n\n cell?.classList.add(\"vuu-cellblock-end\");\n }\n }, []);\n\n const handleNativeMouseUp = useCallback(() => {\n window.removeEventListener(\"mouseover\", handleNativeMouseOver);\n }, [handleNativeMouseOver]);\n\n const handleMouseDown = useCallback<MouseEventHandler>(\n (evt) => {\n if (evt.button === 0) {\n initializeStateRef();\n const { current: state } = stateRef;\n const cell = queryClosest<HTMLDivElement>(evt.target, \".vuuTableCell\");\n if (cell) {\n state.startCell = cell;\n state.mouseStartX = evt.clientX;\n state.mouseStartY = evt.clientY;\n\n const { mouseMovePreDrag, mouseUpPreDrag } = handlersRef.current;\n addMouseListener(\"mouseMovePreDrag\", mouseMovePreDrag);\n addMouseListener(\"mouseUpPreDrag\", mouseUpPreDrag);\n console.log(\"register mouse enter\");\n window.addEventListener(\"mouseover\", handleNativeMouseOver);\n window.addEventListener(\"mouseup\", handleNativeMouseUp);\n }\n }\n },\n [\n addMouseListener,\n handleNativeMouseOver,\n handleNativeMouseUp,\n initializeStateRef,\n ],\n );\n\n const nativeKeyDownHandlerRef = useRef<NativeKeyboardHandler>(NullHandler);\n\n const handleNativeKeyUp = useCallback((evt: KeyboardEvent) => {\n if (evt.key === \"Shift\") {\n const { endCell } = stateRef.current;\n const table = queryClosest<HTMLDivElement>(evt.target, \".vuuTable\");\n endCell?.classList.add(\"vuu-cellblock-end\");\n if (table) {\n table.classList.remove(\"vuu-cellblock-select-in-progress-keyboard\");\n }\n\n window.removeEventListener(\"keydown\", nativeKeyDownHandlerRef.current, {\n capture: true,\n });\n window.removeEventListener(\"keyup\", handleNativeKeyUp, {\n capture: true,\n });\n }\n }, []);\n\n const handleNativeKeyDown = (nativeKeyDownHandlerRef.current = useCallback(\n ({ key }: KeyboardEvent) => {\n if (isArrowKey(key)) {\n const { endBox, endPos, startBox } = stateRef.current;\n if (isNullCellBox(startBox)) {\n createCellBlock(\"keyboard\");\n }\n const nextCell = getNextCellPos(key, endPos, columnCount, rowCount);\n stateRef.current.endPos = nextCell;\n const cell = getTableCell(containerRef, nextCell);\n stateRef.current.endCell = cell as HTMLDivElement;\n setElementBox(cell, endBox);\n updateCellBlockClassName(stateRef.current);\n }\n },\n [columnCount, containerRef, createCellBlock, rowCount],\n ));\n const handleKeyDown = useCallback<KeyboardEventHandler>(\n (evt) => {\n if (evt.key === \"Shift\") {\n initializeStateRef();\n const cell = queryClosest<HTMLDivElement>(evt.target, \".vuuTableCell\");\n if (cell) {\n const startPos = getAriaCellPos(cell);\n stateRef.current.startPos = startPos;\n stateRef.current.endPos = clone(startPos);\n const { current: state } = stateRef;\n state.startCell = cell;\n\n window.addEventListener(\"keydown\", handleNativeKeyDown, {\n capture: true,\n });\n window.addEventListener(\"keyup\", handleNativeKeyUp, {\n capture: true,\n });\n\n evt.preventDefault();\n }\n }\n },\n [handleNativeKeyDown, handleNativeKeyUp, initializeStateRef],\n );\n\n return {\n cellBlock,\n onKeyDown: allowCellBlockSelection ? handleKeyDown : undefined,\n onMouseDown: allowCellBlockSelection ? handleMouseDown : undefined,\n };\n};\n"],"names":["cellBlock"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxCell.js","sources":["../../../src/cell-renderers/checkbox-cell/CheckboxCell.tsx"],"sourcesContent":["import { MouseEvent, KeyboardEventHandler, memo, useCallback } from \"react\";\nimport { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { Checkbox } from \"@salt-ds/core\";\nimport {\n dataColumnAndKeyUnchanged,\n dispatchCustomEvent,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nconst classBase = \"vuuCheckboxCell\";\n\nexport const CheckboxCell = memo(\n ({ column, columnMap, onEdit, row }: TableCellRendererProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const dataIdx = columnMap[column.name];\n const isChecked = !!row[dataIdx];\n\n const handleCommit = useCallback(\n (value) => async (evt: MouseEvent) => {\n const res = await onEdit?.(\n { previousValue: isChecked, value },\n \"commit\",\n );\n if (res === true) {\n dispatchCustomEvent(evt.target as HTMLElement, \"vuu-commit\");\n }\n return res;\n },\n [isChecked, onEdit],\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler>(\n async (evt) => {\n if (evt.key === \"Enter\") {\n const res = await onEdit?.(\n { previousValue: isChecked, value: !isChecked },\n \"commit\",\n );\n if (res === true) {\n dispatchCustomEvent(evt.target as HTMLElement, \"vuu-commit\");\n }\n }\n },\n [isChecked, onEdit],\n );\n\n const className = `${classBase}-checkbox`;\n\n return column.editable ? (\n <Checkbox\n checked={isChecked}\n className={className}\n onClick={handleCommit(!isChecked)}\n onKeyDown={handleKeyDown}\n />\n ) : (\n <Checkbox checked={isChecked} className={className} disabled={true} />\n );\n },\n dataColumnAndKeyUnchanged,\n);\nCheckboxCell.displayName = \"CheckboxCell\";\n\nregisterComponent(\"checkbox-cell\", CheckboxCell, \"cell-renderer\", {\n serverDataType: \"boolean\",\n});\n"],"names":[],"mappings":";;;;;;;;AAaA,MAAM,SAAY,GAAA,iBAAA,CAAA;AAEX,MAAM,YAAe,GAAA,IAAA;AAAA,EAC1B,CAAC,EAAE,MAAA,EAAQ,SAAW,EAAA,MAAA,EAAQ,KAAkC,KAAA;AAC9D,IAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,mBAAA;AAAA,MACR,GAAK,EAAA,eAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACrC,IAAA,MAAM,SAAY,GAAA,CAAC,CAAC,GAAA,CAAI,OAAO,CAAA,CAAA;AAE/B,IAAA,MAAM,YAAe,GAAA,WAAA;AAAA,MACnB,CAAC,KAAU,KAAA,OAAO,GAAoB,KAAA;AACpC,QAAA,MAAM,MAAM,MAAM,MAAA;AAAA,UAChB,EAAE,aAAe,EAAA,SAAA,EAAW,KAAM,EAAA;AAAA,UAClC,QAAA;AAAA,SACF,CAAA;AACA,QAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,UAAoB,mBAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA,CAAA;AAAA,SAC7D;AACA,QAAO,OAAA,GAAA,CAAA;AAAA,OACT;AAAA,MACA,CAAC,WAAW,MAAM,CAAA;AAAA,KACpB,CAAA;AAEA,IAAA,MAAM,aAAgB,GAAA,WAAA;AAAA,MACpB,OAAO,GAAQ,KAAA;AACb,QAAI,IAAA,GAAA,CAAI,QAAQ,OAAS,EAAA;AACvB,UAAA,MAAM,MAAM,MAAM,MAAA;AAAA,YAChB,EAAE,aAAA,EAAe,SAAW,EAAA,KAAA,EAAO,CAAC,SAAU,EAAA;AAAA,YAC9C,QAAA;AAAA,WACF,CAAA;AACA,UAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,YAAoB,mBAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA,CAAA;AAAA,WAC7D;AAAA,SACF;AAAA,OACF;AAAA,MACA,CAAC,WAAW,MAAM,CAAA;AAAA,KACpB,CAAA;AAEA,IAAM,MAAA,SAAA,GAAY,GAAG,SAAS,CAAA,SAAA,CAAA,CAAA;AAE9B,IAAA,OAAO,OAAO,QACZ,mBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAS,EAAA,SAAA;AAAA,QACT,SAAA;AAAA,QACA,OAAA,EAAS,YAAa,CAAA,CAAC,SAAS,CAAA;AAAA,QAChC,SAAW,EAAA,aAAA;AAAA,OAAA;AAAA,wBAGZ,GAAA,CAAA,QAAA,EAAA,EAAS,SAAS,SAAW,EAAA,SAAA,EAAsB,UAAU,IAAM,EAAA,CAAA,CAAA;AAAA,GAExE;AAAA,EACA,yBAAA;AACF,EAAA;AACA,YAAA,CAAa,WAAc,GAAA,cAAA,CAAA;AAE3B,iBAAkB,CAAA,eAAA,EAAiB,cAAc,eAAiB,EAAA;AAAA,EAChE,cAAgB,EAAA,SAAA;AAClB,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"CheckboxCell.js","sources":["../../../src/cell-renderers/checkbox-cell/CheckboxCell.tsx"],"sourcesContent":["import { MouseEvent, KeyboardEventHandler, memo, useCallback } from \"react\";\nimport { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { Checkbox } from \"@salt-ds/core\";\nimport {\n dataColumnAndKeyUnchanged,\n dispatchCustomEvent,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nconst classBase = \"vuuCheckboxCell\";\n\nexport const CheckboxCell = memo(\n ({ column, columnMap, onEdit, row }: TableCellRendererProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const dataIdx = columnMap[column.name];\n const isChecked = !!row[dataIdx];\n\n const handleCommit = useCallback(\n (value) => async (evt: MouseEvent) => {\n const res = await onEdit?.(\n { previousValue: isChecked, value },\n \"commit\",\n );\n if (res === true) {\n dispatchCustomEvent(evt.target as HTMLElement, \"vuu-commit\");\n }\n return res;\n },\n [isChecked, onEdit],\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler>(\n async (evt) => {\n if (evt.key === \"Enter\") {\n const res = await onEdit?.(\n { previousValue: isChecked, value: !isChecked },\n \"commit\",\n );\n if (res === true) {\n dispatchCustomEvent(evt.target as HTMLElement, \"vuu-commit\");\n }\n }\n },\n [isChecked, onEdit],\n );\n\n const className = `${classBase}-checkbox`;\n\n return column.editable ? (\n <Checkbox\n checked={isChecked}\n className={className}\n onClick={handleCommit(!isChecked)}\n onKeyDown={handleKeyDown}\n />\n ) : (\n <Checkbox checked={isChecked} className={className} disabled={true} />\n );\n },\n dataColumnAndKeyUnchanged,\n);\nCheckboxCell.displayName = \"CheckboxCell\";\n\nregisterComponent(\"checkbox-cell\", CheckboxCell, \"cell-renderer\", {\n serverDataType: \"boolean\",\n});\n"],"names":[],"mappings":";;;;;;;;AAaA,MAAM,SAAY,GAAA,iBAAA;AAEX,MAAM,YAAe,GAAA,IAAA;AAAA,EAC1B,CAAC,EAAE,MAAA,EAAQ,SAAW,EAAA,MAAA,EAAQ,KAAkC,KAAA;AAC9D,IAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,mBAAA;AAAA,MACR,GAAK,EAAA,eAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA;AACrC,IAAA,MAAM,SAAY,GAAA,CAAC,CAAC,GAAA,CAAI,OAAO,CAAA;AAE/B,IAAA,MAAM,YAAe,GAAA,WAAA;AAAA,MACnB,CAAC,KAAU,KAAA,OAAO,GAAoB,KAAA;AACpC,QAAA,MAAM,MAAM,MAAM,MAAA;AAAA,UAChB,EAAE,aAAe,EAAA,SAAA,EAAW,KAAM,EAAA;AAAA,UAClC;AAAA,SACF;AACA,QAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,UAAoB,mBAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA;AAAA;AAE7D,QAAO,OAAA,GAAA;AAAA,OACT;AAAA,MACA,CAAC,WAAW,MAAM;AAAA,KACpB;AAEA,IAAA,MAAM,aAAgB,GAAA,WAAA;AAAA,MACpB,OAAO,GAAQ,KAAA;AACb,QAAI,IAAA,GAAA,CAAI,QAAQ,OAAS,EAAA;AACvB,UAAA,MAAM,MAAM,MAAM,MAAA;AAAA,YAChB,EAAE,aAAA,EAAe,SAAW,EAAA,KAAA,EAAO,CAAC,SAAU,EAAA;AAAA,YAC9C;AAAA,WACF;AACA,UAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,YAAoB,mBAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA;AAAA;AAC7D;AACF,OACF;AAAA,MACA,CAAC,WAAW,MAAM;AAAA,KACpB;AAEA,IAAM,MAAA,SAAA,GAAY,GAAG,SAAS,CAAA,SAAA,CAAA;AAE9B,IAAA,OAAO,OAAO,QACZ,mBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAS,EAAA,SAAA;AAAA,QACT,SAAA;AAAA,QACA,OAAA,EAAS,YAAa,CAAA,CAAC,SAAS,CAAA;AAAA,QAChC,SAAW,EAAA;AAAA;AAAA,wBAGZ,GAAA,CAAA,QAAA,EAAA,EAAS,SAAS,SAAW,EAAA,SAAA,EAAsB,UAAU,IAAM,EAAA,CAAA;AAAA,GAExE;AAAA,EACA;AACF;AACA,YAAA,CAAa,WAAc,GAAA,cAAA;AAE3B,iBAAkB,CAAA,eAAA,EAAiB,cAAc,eAAiB,EAAA;AAAA,EAChE,cAAgB,EAAA;AAClB,CAAC,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxRowSelectorCell.js","sources":["../../../src/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.tsx"],"sourcesContent":["import { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { isRowSelected, registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport checkboxRowSelectorCss from \"./CheckboxRowSelectorCell.css\";\n\nexport const CheckboxRowSelectorCell: React.FC<TableCellRendererProps> = ({\n row,\n}) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-checkbox-row-selector-cell\",\n css: checkboxRowSelectorCss,\n window: targetWindow,\n });\n\n const isChecked = isRowSelected(row);\n\n return <Checkbox checked={isChecked} className=\"vuuCheckboxRowSelector\" />;\n};\nCheckboxRowSelectorCell.displayName = \"CheckboxCell\";\n\nregisterComponent(\n \"checkbox-row-selector-cell\",\n CheckboxRowSelectorCell,\n \"cell-renderer\",\n {\n serverDataType: \"boolean\",\n },\n);\n"],"names":[],"mappings":";;;;;;;AAQO,MAAM,0BAA4D,CAAC;AAAA,EACxE,GAAA;AACF,CAAM,KAAA;AACJ,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gCAAA;AAAA,IACR,GAAK,EAAA,sBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,SAAA,GAAY,cAAc,GAAG,CAAA,CAAA;AAEnC,EAAA,uBAAQ,GAAA,CAAA,QAAA,EAAA,EAAS,OAAS,EAAA,SAAA,EAAW,WAAU,wBAAyB,EAAA,CAAA,CAAA;AAC1E,EAAA;AACA,uBAAA,CAAwB,WAAc,GAAA,cAAA,CAAA;AAEtC,iBAAA;AAAA,EACE,4BAAA;AAAA,EACA,uBAAA;AAAA,EACA,eAAA;AAAA,EACA;AAAA,IACE,cAAgB,EAAA,SAAA;AAAA,GAClB;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"CheckboxRowSelectorCell.js","sources":["../../../src/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.tsx"],"sourcesContent":["import { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { isRowSelected, registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport checkboxRowSelectorCss from \"./CheckboxRowSelectorCell.css\";\n\nexport const CheckboxRowSelectorCell: React.FC<TableCellRendererProps> = ({\n row,\n}) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-checkbox-row-selector-cell\",\n css: checkboxRowSelectorCss,\n window: targetWindow,\n });\n\n const isChecked = isRowSelected(row);\n\n return <Checkbox checked={isChecked} className=\"vuuCheckboxRowSelector\" />;\n};\nCheckboxRowSelectorCell.displayName = \"CheckboxCell\";\n\nregisterComponent(\n \"checkbox-row-selector-cell\",\n CheckboxRowSelectorCell,\n \"cell-renderer\",\n {\n serverDataType: \"boolean\",\n },\n);\n"],"names":[],"mappings":";;;;;;;AAQO,MAAM,0BAA4D,CAAC;AAAA,EACxE;AACF,CAAM,KAAA;AACJ,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gCAAA;AAAA,IACR,GAAK,EAAA,sBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,SAAA,GAAY,cAAc,GAAG,CAAA;AAEnC,EAAA,uBAAQ,GAAA,CAAA,QAAA,EAAA,EAAS,OAAS,EAAA,SAAA,EAAW,WAAU,wBAAyB,EAAA,CAAA;AAC1E;AACA,uBAAA,CAAwB,WAAc,GAAA,cAAA;AAEtC,iBAAA;AAAA,EACE,4BAAA;AAAA,EACA,uBAAA;AAAA,EACA,eAAA;AAAA,EACA;AAAA,IACE,cAAgB,EAAA;AAAA;AAEpB,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"InputCell.js","sources":["../../../src/cell-renderers/input-cell/InputCell.tsx"],"sourcesContent":["import { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { Input } from \"@salt-ds/core\";\nimport { useEditableText } from \"@vuu-ui/vuu-ui-controls\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport inputCellCss from \"./InputCell.css\";\n\nconst classBase = \"vuuTableInputCell\";\n\nexport const InputCell = ({\n column,\n columnMap,\n onEdit,\n row,\n}: TableCellRendererProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-input-cell\",\n css: inputCellCss,\n window: targetWindow,\n });\n\n const dataIdx = columnMap[column.name];\n const dataValue = row[dataIdx] as number | string;\n const { align = \"left\", clientSideEditValidationCheck } = column;\n\n const { warningMessage, ...editProps } = useEditableText({\n value: dataValue,\n onEdit,\n clientSideEditValidationCheck,\n });\n\n const endAdornment =\n warningMessage && align === \"left\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n const startAdornment =\n warningMessage && align === \"right\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n return (\n <Input\n {...editProps}\n className={cx(classBase, {\n [`${classBase}-error`]: warningMessage !== undefined,\n })}\n endAdornment={endAdornment}\n startAdornment={startAdornment}\n />\n );\n};\n\nregisterComponent(\"input-cell\", InputCell, \"cell-renderer\", {\n userCanAssign: false,\n});\n"],"names":[],"mappings":";;;;;;;;;AAUA,MAAM,SAAY,GAAA,mBAAA,CAAA;AAEX,MAAM,YAAY,CAAC;AAAA,EACxB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AACF,CAA8B,KAAA;AAC5B,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACrC,EAAM,MAAA,SAAA,GAAY,IAAI,OAAO,CAAA,CAAA;AAC7B,EAAA,MAAM,EAAE,KAAA,GAAQ,MAAQ,EAAA,6BAAA,EAAkC,GAAA,MAAA,CAAA;AAE1D,EAAA,MAAM,EAAE,cAAA,EAAgB,GAAG,SAAA,KAAc,eAAgB,CAAA;AAAA,IACvD,KAAO,EAAA,SAAA;AAAA,IACP,MAAA;AAAA,IACA,6BAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,YACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,MAAA,mBACzB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA,CAAA;AAEN,EAAA,MAAM,cACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,OAAA,mBACzB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA,CAAA;AAEN,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,SAAA,EAAW,GAAG,SAAW,EAAA;AAAA,QACvB,CAAC,CAAA,EAAG,SAAS,CAAA,MAAA,CAAQ,GAAG,cAAmB,KAAA,KAAA,CAAA;AAAA,OAC5C,CAAA;AAAA,MACD,YAAA;AAAA,MACA,cAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ,EAAA;AAEA,iBAAkB,CAAA,YAAA,EAAc,WAAW,eAAiB,EAAA;AAAA,EAC1D,aAAe,EAAA,KAAA;AACjB,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"InputCell.js","sources":["../../../src/cell-renderers/input-cell/InputCell.tsx"],"sourcesContent":["import { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { Input } from \"@salt-ds/core\";\nimport { useEditableText } from \"@vuu-ui/vuu-ui-controls\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport inputCellCss from \"./InputCell.css\";\n\nconst classBase = \"vuuTableInputCell\";\n\nexport const InputCell = ({\n column,\n columnMap,\n onEdit,\n row,\n}: TableCellRendererProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-input-cell\",\n css: inputCellCss,\n window: targetWindow,\n });\n\n const dataIdx = columnMap[column.name];\n const dataValue = row[dataIdx] as number | string;\n const { align = \"left\", clientSideEditValidationCheck } = column;\n\n const { warningMessage, ...editProps } = useEditableText({\n value: dataValue,\n onEdit,\n clientSideEditValidationCheck,\n });\n\n const endAdornment =\n warningMessage && align === \"left\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n const startAdornment =\n warningMessage && align === \"right\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n return (\n <Input\n {...editProps}\n className={cx(classBase, {\n [`${classBase}-error`]: warningMessage !== undefined,\n })}\n endAdornment={endAdornment}\n startAdornment={startAdornment}\n />\n );\n};\n\nregisterComponent(\"input-cell\", InputCell, \"cell-renderer\", {\n userCanAssign: false,\n});\n"],"names":[],"mappings":";;;;;;;;;AAUA,MAAM,SAAY,GAAA,mBAAA;AAEX,MAAM,YAAY,CAAC;AAAA,EACxB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAA8B,KAAA;AAC5B,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA;AACrC,EAAM,MAAA,SAAA,GAAY,IAAI,OAAO,CAAA;AAC7B,EAAA,MAAM,EAAE,KAAA,GAAQ,MAAQ,EAAA,6BAAA,EAAkC,GAAA,MAAA;AAE1D,EAAA,MAAM,EAAE,cAAA,EAAgB,GAAG,SAAA,KAAc,eAAgB,CAAA;AAAA,IACvD,KAAO,EAAA,SAAA;AAAA,IACP,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,YACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,MAAA,mBACzB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA;AAEN,EAAA,MAAM,cACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,OAAA,mBACzB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA;AAEN,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,SAAA,EAAW,GAAG,SAAW,EAAA;AAAA,QACvB,CAAC,CAAA,EAAG,SAAS,CAAA,MAAA,CAAQ,GAAG,cAAmB,KAAA,KAAA;AAAA,OAC5C,CAAA;AAAA,MACD,YAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAEA,iBAAkB,CAAA,YAAA,EAAc,WAAW,eAAiB,EAAA;AAAA,EAC1D,aAAe,EAAA;AACjB,CAAC,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleCell.js","sources":["../../../src/cell-renderers/toggle-cell/ToggleCell.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n TableCellRendererProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n dataColumnAndKeyUnchanged,\n dispatchCustomEvent,\n isTypeDescriptor,\n isValueListRenderer,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport { memo, useCallback } from \"react\";\nimport { CycleStateButton } from \"@vuu-ui/vuu-ui-controls\";\n\nimport toggleCellCss from \"./ToggleCell.css\";\n\nconst classBase = \"vuuTableToggleCell\";\n\nconst getValueList = ({ name, type }: ColumnDescriptor) => {\n if (isTypeDescriptor(type) && isValueListRenderer(type.renderer)) {\n return type.renderer.values;\n } else {\n throw Error(\n `useLookupValues column ${name} has not been configured with a values list`,\n );\n }\n};\n\nexport const ToggleCell = memo(function ToggleCell({\n column,\n columnMap,\n onEdit,\n row,\n}: TableCellRendererProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-toggle-cell\",\n css: toggleCellCss,\n window: targetWindow,\n });\n\n const values = getValueList(column);\n const dataIdx = columnMap[column.name];\n const value = row[dataIdx] as string;\n\n const handleCommit = useCallback(\n async (evt, newValue) => {\n const res = await onEdit?.(\n { previousValue: value, value: newValue },\n \"commit\",\n );\n if (res === true) {\n dispatchCustomEvent(evt.target as HTMLElement, \"vuu-commit\");\n }\n return res;\n },\n [onEdit, value],\n );\n\n return (\n <CycleStateButton\n className={cx(classBase, `${classBase}-${column.name}`)}\n onCommit={handleCommit}\n value={value}\n values={values}\n variant=\"cta\"\n >\n {value}\n </CycleStateButton>\n );\n}, dataColumnAndKeyUnchanged);\n\nregisterComponent(\"toggle-cell\", ToggleCell, \"cell-renderer\", {\n userCanAssign: false,\n});\n"],"names":["ToggleCell"],"mappings":";;;;;;;;;AAoBA,MAAM,SAAY,GAAA,oBAAA,CAAA;AAElB,MAAM,YAAe,GAAA,CAAC,EAAE,IAAA,EAAM,MAA6B,KAAA;AACzD,EAAA,IAAI,iBAAiB,IAAI,CAAA,IAAK,mBAAoB,CAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AAChE,IAAA,OAAO,KAAK,QAAS,CAAA,MAAA,CAAA;AAAA,GAChB,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,0BAA0B,IAAI,CAAA,2CAAA,CAAA;AAAA,KAChC,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEa,MAAA,UAAA,GAAa,IAAK,CAAA,SAASA,WAAW,CAAA;AAAA,EACjD,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AACF,CAA2B,EAAA;AACzB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAA,aAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,MAAA,GAAS,aAAa,MAAM,CAAA,CAAA;AAClC,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACrC,EAAM,MAAA,KAAA,GAAQ,IAAI,OAAO,CAAA,CAAA;AAEzB,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,OAAO,KAAK,QAAa,KAAA;AACvB,MAAA,MAAM,MAAM,MAAM,MAAA;AAAA,QAChB,EAAE,aAAA,EAAe,KAAO,EAAA,KAAA,EAAO,QAAS,EAAA;AAAA,QACxC,QAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,QAAoB,mBAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA,CAAA;AAAA,OAC7D;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACT;AAAA,IACA,CAAC,QAAQ,KAAK,CAAA;AAAA,GAChB,CAAA;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAG,SAAW,EAAA,CAAA,EAAG,SAAS,CAAI,CAAA,EAAA,MAAA,CAAO,IAAI,CAAE,CAAA,CAAA;AAAA,MACtD,QAAU,EAAA,YAAA;AAAA,MACV,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAQ,EAAA,KAAA;AAAA,MAEP,QAAA,EAAA,KAAA;AAAA,KAAA;AAAA,GACH,CAAA;AAEJ,CAAA,EAAG,yBAAyB,EAAA;AAE5B,iBAAkB,CAAA,aAAA,EAAe,YAAY,eAAiB,EAAA;AAAA,EAC5D,aAAe,EAAA,KAAA;AACjB,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"ToggleCell.js","sources":["../../../src/cell-renderers/toggle-cell/ToggleCell.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n TableCellRendererProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n dataColumnAndKeyUnchanged,\n dispatchCustomEvent,\n isTypeDescriptor,\n isValueListRenderer,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport { memo, useCallback } from \"react\";\nimport { CycleStateButton } from \"@vuu-ui/vuu-ui-controls\";\n\nimport toggleCellCss from \"./ToggleCell.css\";\n\nconst classBase = \"vuuTableToggleCell\";\n\nconst getValueList = ({ name, type }: ColumnDescriptor) => {\n if (isTypeDescriptor(type) && isValueListRenderer(type.renderer)) {\n return type.renderer.values;\n } else {\n throw Error(\n `useLookupValues column ${name} has not been configured with a values list`,\n );\n }\n};\n\nexport const ToggleCell = memo(function ToggleCell({\n column,\n columnMap,\n onEdit,\n row,\n}: TableCellRendererProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-toggle-cell\",\n css: toggleCellCss,\n window: targetWindow,\n });\n\n const values = getValueList(column);\n const dataIdx = columnMap[column.name];\n const value = row[dataIdx] as string;\n\n const handleCommit = useCallback(\n async (evt, newValue) => {\n const res = await onEdit?.(\n { previousValue: value, value: newValue },\n \"commit\",\n );\n if (res === true) {\n dispatchCustomEvent(evt.target as HTMLElement, \"vuu-commit\");\n }\n return res;\n },\n [onEdit, value],\n );\n\n return (\n <CycleStateButton\n className={cx(classBase, `${classBase}-${column.name}`)}\n onCommit={handleCommit}\n value={value}\n values={values}\n variant=\"cta\"\n >\n {value}\n </CycleStateButton>\n );\n}, dataColumnAndKeyUnchanged);\n\nregisterComponent(\"toggle-cell\", ToggleCell, \"cell-renderer\", {\n userCanAssign: false,\n});\n"],"names":["ToggleCell"],"mappings":";;;;;;;;;AAoBA,MAAM,SAAY,GAAA,oBAAA;AAElB,MAAM,YAAe,GAAA,CAAC,EAAE,IAAA,EAAM,MAA6B,KAAA;AACzD,EAAA,IAAI,iBAAiB,IAAI,CAAA,IAAK,mBAAoB,CAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AAChE,IAAA,OAAO,KAAK,QAAS,CAAA,MAAA;AAAA,GAChB,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,0BAA0B,IAAI,CAAA,2CAAA;AAAA,KAChC;AAAA;AAEJ,CAAA;AAEa,MAAA,UAAA,GAAa,IAAK,CAAA,SAASA,WAAW,CAAA;AAAA,EACjD,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAA2B,EAAA;AACzB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAA,aAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,MAAA,GAAS,aAAa,MAAM,CAAA;AAClC,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA;AACrC,EAAM,MAAA,KAAA,GAAQ,IAAI,OAAO,CAAA;AAEzB,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,OAAO,KAAK,QAAa,KAAA;AACvB,MAAA,MAAM,MAAM,MAAM,MAAA;AAAA,QAChB,EAAE,aAAA,EAAe,KAAO,EAAA,KAAA,EAAO,QAAS,EAAA;AAAA,QACxC;AAAA,OACF;AACA,MAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,QAAoB,mBAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA;AAAA;AAE7D,MAAO,OAAA,GAAA;AAAA,KACT;AAAA,IACA,CAAC,QAAQ,KAAK;AAAA,GAChB;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAG,SAAW,EAAA,CAAA,EAAG,SAAS,CAAI,CAAA,EAAA,MAAA,CAAO,IAAI,CAAE,CAAA,CAAA;AAAA,MACtD,QAAU,EAAA,YAAA;AAAA,MACV,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAQ,EAAA,KAAA;AAAA,MAEP,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ,CAAA,EAAG,yBAAyB;AAE5B,iBAAkB,CAAA,aAAA,EAAe,YAAY,eAAiB,EAAA;AAAA,EAC5D,aAAe,EAAA;AACjB,CAAC,CAAA;;;;"}
@@ -1,4 +1,4 @@
1
- var columnHeaderPillCss = ".vuuColumnHeaderPill {\n --vuu-icon-size: 14px;\n --menu-item-icon-color: black;\n --vuu-icon-color: var(--salt-actionable-primary-foreground);\n --vuu-icon-height: 12px;\n --vuu-icon-width: 12px;\n align-items: center;\n background: var(--salt-actionable-primary-background);\n color: var(--salt-actionable-primary-foreground);\n border-radius: 4px;\n flex: var(--vuuColumnHeaderPill-flex, none);\n font-size: 11px;\n gap: 4px;\n height: 16px;\n display: flex;\n margin: var(--vuuColumnHeaderPill-margin, 0);\n padding: 0 6px;\n position: relative; \n}\n\n.vuuColumnHeaderPill:hover {\n --vuu-icon-color: var(--salt-actionable-primary-foreground-hover);\n background-color: var(--salt-actionable-primary-background-hover);\n color: var(--salt-actionable-primary-foreground-hover);\n \n}\n\n.vuuColumnHeaderPill-removeButton {\n cursor: pointer;\n}";
1
+ var columnHeaderPillCss = ".vuuColumnHeaderPill {\n --vuu-icon-size: 14px;\n --menu-item-icon-color: black;\n --vuu-icon-color: var(--salt-actionable-bold-foreground);\n --vuu-icon-height: 12px;\n --vuu-icon-width: 12px;\n align-items: center;\n background: var(--salt-actionable-bold-background);\n color: var(--salt-actionable-bold-foreground);\n border-radius: 4px;\n flex: var(--vuuColumnHeaderPill-flex, none);\n font-size: 11px;\n gap: 4px;\n height: 16px;\n display: flex;\n margin: var(--vuuColumnHeaderPill-margin, 0);\n padding: 0 6px;\n position: relative;\n}\n\n.vuuColumnHeaderPill:hover {\n --vuu-icon-color: var(--salt-actionable-bold-foreground-hover);\n background-color: var(--salt-actionable-bold-background-hover);\n color: var(--salt-actionable-bold-foreground-hover);\n}\n\n.vuuColumnHeaderPill-removeButton {\n cursor: pointer;\n}\n";
2
2
 
3
3
  export { columnHeaderPillCss as default };
4
4
  //# sourceMappingURL=ColumnHeaderPill.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnHeaderPill.js","sources":["../../src/column-header-pill/ColumnHeaderPill.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes, MouseEvent, useCallback } from \"react\";\n\nimport columnHeaderPillCss from \"./ColumnHeaderPill.css\";\n\nexport interface ColumnHeaderPillProps extends HTMLAttributes<HTMLDivElement> {\n column: RuntimeColumnDescriptor;\n removable?: boolean;\n onRemove?: (column: RuntimeColumnDescriptor) => void;\n}\n\nconst classBase = \"vuuColumnHeaderPill\";\n\nexport const ColumnHeaderPill = ({\n children,\n className,\n column,\n onRemove,\n removable,\n ...htmlAttributes\n}: ColumnHeaderPillProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-header-pill\",\n css: columnHeaderPillCss,\n window: targetWindow,\n });\n\n if (removable && typeof onRemove !== \"function\") {\n throw Error(\n \"ColumnHeaderPill onRemove prop must be provided if Pill is removable\",\n );\n }\n\n const handleClickRemove = useCallback(\n (evt: MouseEvent<HTMLSpanElement>) => {\n evt.preventDefault();\n evt.stopPropagation();\n onRemove?.(column);\n },\n [column, onRemove],\n );\n\n return (\n <div {...htmlAttributes} className={cx(classBase, className)} tabIndex={-1}>\n {children}\n {removable ? (\n <span\n className={`${classBase}-removeButton`}\n role=\"button\"\n data-icon=\"cross\"\n onClick={handleClickRemove}\n />\n ) : null}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAcA,MAAM,SAAY,GAAA,qBAAA,CAAA;AAEX,MAAM,mBAAmB,CAAC;AAAA,EAC/B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG,cAAA;AACL,CAA6B,KAAA;AAC3B,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAA,mBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAI,IAAA,SAAA,IAAa,OAAO,QAAA,KAAa,UAAY,EAAA;AAC/C,IAAM,MAAA,KAAA;AAAA,MACJ,sEAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAA,MAAM,iBAAoB,GAAA,WAAA;AAAA,IACxB,CAAC,GAAqC,KAAA;AACpC,MAAA,GAAA,CAAI,cAAe,EAAA,CAAA;AACnB,MAAA,GAAA,CAAI,eAAgB,EAAA,CAAA;AACpB,MAAA,QAAA,GAAW,MAAM,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,CAAC,QAAQ,QAAQ,CAAA;AAAA,GACnB,CAAA;AAEA,EACE,uBAAA,IAAA,CAAC,KAAK,EAAA,EAAA,GAAG,cAAgB,EAAA,SAAA,EAAW,GAAG,SAAW,EAAA,SAAS,CAAG,EAAA,QAAA,EAAU,CACrE,CAAA,EAAA,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,SACC,mBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,SAAS,CAAA,aAAA,CAAA;AAAA,QACvB,IAAK,EAAA,QAAA;AAAA,QACL,WAAU,EAAA,OAAA;AAAA,QACV,OAAS,EAAA,iBAAA;AAAA,OAAA;AAAA,KAET,GAAA,IAAA;AAAA,GACN,EAAA,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ColumnHeaderPill.js","sources":["../../src/column-header-pill/ColumnHeaderPill.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes, MouseEvent, useCallback } from \"react\";\n\nimport columnHeaderPillCss from \"./ColumnHeaderPill.css\";\n\nexport interface ColumnHeaderPillProps extends HTMLAttributes<HTMLDivElement> {\n column: RuntimeColumnDescriptor;\n removable?: boolean;\n onRemove?: (column: RuntimeColumnDescriptor) => void;\n}\n\nconst classBase = \"vuuColumnHeaderPill\";\n\nexport const ColumnHeaderPill = ({\n children,\n className,\n column,\n onRemove,\n removable,\n ...htmlAttributes\n}: ColumnHeaderPillProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-header-pill\",\n css: columnHeaderPillCss,\n window: targetWindow,\n });\n\n if (removable && typeof onRemove !== \"function\") {\n throw Error(\n \"ColumnHeaderPill onRemove prop must be provided if Pill is removable\",\n );\n }\n\n const handleClickRemove = useCallback(\n (evt: MouseEvent<HTMLSpanElement>) => {\n evt.preventDefault();\n evt.stopPropagation();\n onRemove?.(column);\n },\n [column, onRemove],\n );\n\n return (\n <div {...htmlAttributes} className={cx(classBase, className)} tabIndex={-1}>\n {children}\n {removable ? (\n <span\n className={`${classBase}-removeButton`}\n role=\"button\"\n data-icon=\"cross\"\n onClick={handleClickRemove}\n />\n ) : null}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAcA,MAAM,SAAY,GAAA,qBAAA;AAEX,MAAM,mBAAmB,CAAC;AAAA,EAC/B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAA6B,KAAA;AAC3B,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAA,mBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAI,IAAA,SAAA,IAAa,OAAO,QAAA,KAAa,UAAY,EAAA;AAC/C,IAAM,MAAA,KAAA;AAAA,MACJ;AAAA,KACF;AAAA;AAGF,EAAA,MAAM,iBAAoB,GAAA,WAAA;AAAA,IACxB,CAAC,GAAqC,KAAA;AACpC,MAAA,GAAA,CAAI,cAAe,EAAA;AACnB,MAAA,GAAA,CAAI,eAAgB,EAAA;AACpB,MAAA,QAAA,GAAW,MAAM,CAAA;AAAA,KACnB;AAAA,IACA,CAAC,QAAQ,QAAQ;AAAA,GACnB;AAEA,EACE,uBAAA,IAAA,CAAC,KAAK,EAAA,EAAA,GAAG,cAAgB,EAAA,SAAA,EAAW,GAAG,SAAW,EAAA,SAAS,CAAG,EAAA,QAAA,EAAU,CACrE,CAAA,EAAA,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,SACC,mBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,SAAS,CAAA,aAAA,CAAA;AAAA,QACvB,IAAK,EAAA,QAAA;AAAA,QACL,WAAU,EAAA,OAAA;AAAA,QACV,OAAS,EAAA;AAAA;AAAA,KAET,GAAA;AAAA,GACN,EAAA,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupColumnPill.js","sources":["../../src/column-header-pill/GroupColumnPill.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { ColumnHeaderPill, ColumnHeaderPillProps } from \"./ColumnHeaderPill\";\n\nimport groupColumnPillCss from \"./GroupColumnPill.css\";\n\nexport interface GroupColumnPillProps extends ColumnHeaderPillProps {\n column: RuntimeColumnDescriptor;\n}\n\nexport const GroupColumnPill = ({\n column,\n ...columnHeaderProps\n}: GroupColumnPillProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-group-column-pill\",\n css: groupColumnPillCss,\n window: targetWindow,\n });\n\n const { name, sorted } = column;\n const icon =\n typeof sorted === \"number\"\n ? sorted < 0\n ? \"arrow-down\"\n : \"arrow-up\"\n : sorted === \"A\"\n ? \"arrow-up\"\n : sorted === \"D\"\n ? \"arrow-down\"\n : undefined;\n\n return (\n <ColumnHeaderPill {...columnHeaderProps} column={column}>\n <span className=\"vuuGroupColumnPill-label\">{name}</span>\n {icon !== undefined ? <span data-icon={icon} /> : null}\n {typeof sorted === \"number\" ? (\n <span className={\"vuuSortPosition\"}>{Math.abs(sorted)}</span>\n ) : null}\n </ColumnHeaderPill>\n );\n};\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,MAAA;AAAA,EACA,GAAG,iBAAA;AACL,CAA4B,KAAA;AAC1B,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,uBAAA;AAAA,IACR,GAAK,EAAA,kBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,EAAE,IAAM,EAAA,MAAA,EAAW,GAAA,MAAA,CAAA;AACzB,EAAA,MAAM,IACJ,GAAA,OAAO,MAAW,KAAA,QAAA,GACd,MAAS,GAAA,CAAA,GACP,YACA,GAAA,UAAA,GACF,MAAW,KAAA,GAAA,GACT,UACA,GAAA,MAAA,KAAW,MACT,YACA,GAAA,KAAA,CAAA,CAAA;AAEV,EAAA,uBACG,IAAA,CAAA,gBAAA,EAAA,EAAkB,GAAG,iBAAA,EAAmB,MACvC,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,0BAAA,EAA4B,QAAK,EAAA,IAAA,EAAA,CAAA;AAAA,IAChD,SAAS,KAAY,CAAA,mBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,WAAA,EAAW,MAAM,CAAK,GAAA,IAAA;AAAA,IACjD,OAAO,MAAW,KAAA,QAAA,mBAChB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,iBAAA,EAAoB,QAAK,EAAA,IAAA,CAAA,GAAA,CAAI,MAAM,CAAA,EAAE,CACpD,GAAA,IAAA;AAAA,GACN,EAAA,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"GroupColumnPill.js","sources":["../../src/column-header-pill/GroupColumnPill.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { ColumnHeaderPill, ColumnHeaderPillProps } from \"./ColumnHeaderPill\";\n\nimport groupColumnPillCss from \"./GroupColumnPill.css\";\n\nexport interface GroupColumnPillProps extends ColumnHeaderPillProps {\n column: RuntimeColumnDescriptor;\n}\n\nexport const GroupColumnPill = ({\n column,\n ...columnHeaderProps\n}: GroupColumnPillProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-group-column-pill\",\n css: groupColumnPillCss,\n window: targetWindow,\n });\n\n const { name, sorted } = column;\n const icon =\n typeof sorted === \"number\"\n ? sorted < 0\n ? \"arrow-down\"\n : \"arrow-up\"\n : sorted === \"A\"\n ? \"arrow-up\"\n : sorted === \"D\"\n ? \"arrow-down\"\n : undefined;\n\n return (\n <ColumnHeaderPill {...columnHeaderProps} column={column}>\n <span className=\"vuuGroupColumnPill-label\">{name}</span>\n {icon !== undefined ? <span data-icon={icon} /> : null}\n {typeof sorted === \"number\" ? (\n <span className={\"vuuSortPosition\"}>{Math.abs(sorted)}</span>\n ) : null}\n </ColumnHeaderPill>\n );\n};\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,MAAA;AAAA,EACA,GAAG;AACL,CAA4B,KAAA;AAC1B,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,uBAAA;AAAA,IACR,GAAK,EAAA,kBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,EAAE,IAAM,EAAA,MAAA,EAAW,GAAA,MAAA;AACzB,EAAA,MAAM,IACJ,GAAA,OAAO,MAAW,KAAA,QAAA,GACd,MAAS,GAAA,CAAA,GACP,YACA,GAAA,UAAA,GACF,MAAW,KAAA,GAAA,GACT,UACA,GAAA,MAAA,KAAW,MACT,YACA,GAAA,KAAA,CAAA;AAEV,EAAA,uBACG,IAAA,CAAA,gBAAA,EAAA,EAAkB,GAAG,iBAAA,EAAmB,MACvC,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,0BAAA,EAA4B,QAAK,EAAA,IAAA,EAAA,CAAA;AAAA,IAChD,SAAS,KAAY,CAAA,mBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,WAAA,EAAW,MAAM,CAAK,GAAA,IAAA;AAAA,IACjD,OAAO,MAAW,KAAA,QAAA,mBAChB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,iBAAA,EAAoB,QAAK,EAAA,IAAA,CAAA,GAAA,CAAI,MAAM,CAAA,EAAE,CACpD,GAAA;AAAA,GACN,EAAA,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SortIndicator.js","sources":["../../src/column-header-pill/SortIndicator.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ColumnHeaderPill } from \"./ColumnHeaderPill\";\n\nimport sortIndicatorCss from \"./SortIndicator.css\";\n\nexport interface SortIndicatorProps {\n column: RuntimeColumnDescriptor;\n}\n\nexport const SortIndicator = ({ column }: SortIndicatorProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-sort-indicator\",\n css: sortIndicatorCss,\n window: targetWindow,\n });\n\n if (!column.sorted) {\n return null;\n }\n\n const icon =\n typeof column.sorted === \"number\"\n ? column.sorted < 0\n ? \"arrow-down\"\n : \"arrow-up\"\n : column.sorted === \"A\"\n ? \"arrow-up\"\n : \"arrow-down\";\n\n return (\n <ColumnHeaderPill column={column}>\n <span data-icon={icon} />\n {typeof column.sorted === \"number\" ? (\n <span className={\"vuuSortPosition\"}>{Math.abs(column.sorted)}</span>\n ) : null}\n </ColumnHeaderPill>\n );\n};\n"],"names":[],"mappings":";;;;;;AAWO,MAAM,aAAgB,GAAA,CAAC,EAAE,MAAA,EAAiC,KAAA;AAC/D,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,0BAAA;AAAA,IACR,GAAK,EAAA,gBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAI,IAAA,CAAC,OAAO,MAAQ,EAAA;AAClB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,IACJ,GAAA,OAAO,MAAO,CAAA,MAAA,KAAW,QACrB,GAAA,MAAA,CAAO,MAAS,GAAA,CAAA,GACd,YACA,GAAA,UAAA,GACF,MAAO,CAAA,MAAA,KAAW,MAChB,UACA,GAAA,YAAA,CAAA;AAER,EACE,uBAAA,IAAA,CAAC,oBAAiB,MAChB,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,MAAA,EAAA,EAAK,aAAW,IAAM,EAAA,CAAA;AAAA,IACtB,OAAO,MAAA,CAAO,MAAW,KAAA,QAAA,mBACvB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,iBAAA,EAAoB,QAAK,EAAA,IAAA,CAAA,GAAA,CAAI,MAAO,CAAA,MAAM,GAAE,CAC3D,GAAA,IAAA;AAAA,GACN,EAAA,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"SortIndicator.js","sources":["../../src/column-header-pill/SortIndicator.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ColumnHeaderPill } from \"./ColumnHeaderPill\";\n\nimport sortIndicatorCss from \"./SortIndicator.css\";\n\nexport interface SortIndicatorProps {\n column: RuntimeColumnDescriptor;\n}\n\nexport const SortIndicator = ({ column }: SortIndicatorProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-sort-indicator\",\n css: sortIndicatorCss,\n window: targetWindow,\n });\n\n if (!column.sorted) {\n return null;\n }\n\n const icon =\n typeof column.sorted === \"number\"\n ? column.sorted < 0\n ? \"arrow-down\"\n : \"arrow-up\"\n : column.sorted === \"A\"\n ? \"arrow-up\"\n : \"arrow-down\";\n\n return (\n <ColumnHeaderPill column={column}>\n <span data-icon={icon} />\n {typeof column.sorted === \"number\" ? (\n <span className={\"vuuSortPosition\"}>{Math.abs(column.sorted)}</span>\n ) : null}\n </ColumnHeaderPill>\n );\n};\n"],"names":[],"mappings":";;;;;;AAWO,MAAM,aAAgB,GAAA,CAAC,EAAE,MAAA,EAAiC,KAAA;AAC/D,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,0BAAA;AAAA,IACR,GAAK,EAAA,gBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAI,IAAA,CAAC,OAAO,MAAQ,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,MAAM,IACJ,GAAA,OAAO,MAAO,CAAA,MAAA,KAAW,QACrB,GAAA,MAAA,CAAO,MAAS,GAAA,CAAA,GACd,YACA,GAAA,UAAA,GACF,MAAO,CAAA,MAAA,KAAW,MAChB,UACA,GAAA,YAAA;AAER,EACE,uBAAA,IAAA,CAAC,oBAAiB,MAChB,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,MAAA,EAAA,EAAK,aAAW,IAAM,EAAA,CAAA;AAAA,IACtB,OAAO,MAAA,CAAO,MAAW,KAAA,QAAA,mBACvB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,iBAAA,EAAoB,QAAK,EAAA,IAAA,CAAA,GAAA,CAAI,MAAO,CAAA,MAAM,GAAE,CAC3D,GAAA;AAAA,GACN,EAAA,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnMenu.js","sources":["../../src/column-menu/ColumnMenu.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { PopupMenu } from \"@vuu-ui/vuu-popups\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes } from \"react\";\nimport cx from \"clsx\";\n\nimport columnMenuCss from \"./ColumnMenu.css\";\n\nconst classBase = \"vuuColumnMenu\";\nexport interface ColumnMenuProps extends HTMLAttributes<HTMLSpanElement> {\n column: RuntimeColumnDescriptor;\n}\n\nexport const ColumnMenu = ({ className, column }: ColumnMenuProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-menu\",\n css: columnMenuCss,\n window: targetWindow,\n });\n\n return (\n <PopupMenu\n className={cx(classBase, className)}\n data-embedded\n menuLocation=\"column-menu\"\n menuOptions={{ column }}\n tabIndex={-1}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AASA,MAAM,SAAY,GAAA,eAAA,CAAA;AAKX,MAAM,UAAa,GAAA,CAAC,EAAE,SAAA,EAAW,QAA8B,KAAA;AACpE,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAA,aAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,eAAa,EAAA,IAAA;AAAA,MACb,YAAa,EAAA,aAAA;AAAA,MACb,WAAA,EAAa,EAAE,MAAO,EAAA;AAAA,MACtB,QAAU,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GACZ,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ColumnMenu.js","sources":["../../src/column-menu/ColumnMenu.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { PopupMenu } from \"@vuu-ui/vuu-popups\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes } from \"react\";\nimport cx from \"clsx\";\n\nimport columnMenuCss from \"./ColumnMenu.css\";\n\nconst classBase = \"vuuColumnMenu\";\nexport interface ColumnMenuProps extends HTMLAttributes<HTMLSpanElement> {\n column: RuntimeColumnDescriptor;\n}\n\nexport const ColumnMenu = ({ className, column }: ColumnMenuProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-menu\",\n css: columnMenuCss,\n window: targetWindow,\n });\n\n return (\n <PopupMenu\n className={cx(classBase, className)}\n data-embedded\n menuLocation=\"column-menu\"\n menuOptions={{ column }}\n tabIndex={-1}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AASA,MAAM,SAAY,GAAA,eAAA;AAKX,MAAM,UAAa,GAAA,CAAC,EAAE,SAAA,EAAW,QAA8B,KAAA;AACpE,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAA,aAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,eAAa,EAAA,IAAA;AAAA,MACb,YAAa,EAAA,aAAA;AAAA,MACb,WAAA,EAAa,EAAE,MAAO,EAAA;AAAA,MACtB,QAAU,EAAA,CAAA;AAAA;AAAA,GACZ;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnResizer.js","sources":["../../src/column-resizing/ColumnResizer.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useCallback, useRef } from \"react\";\n\nimport columnResizerCss from \"./ColumnResizer.css\";\n\nconst NOOP = () => undefined;\n\nconst baseClass = \"vuuColumnResizer\";\nexport interface TableColumnResizerProps {\n onDrag: (evt: MouseEvent, moveBy: number, totalDistanceMoved: number) => void;\n onDragEnd: (evt: MouseEvent, totalDistanceMoved: number) => void;\n onDragStart: (evt: React.MouseEvent) => void;\n}\n\nexport const ColumnResizer = ({\n onDrag,\n onDragEnd = NOOP,\n onDragStart = NOOP,\n}: TableColumnResizerProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-resizer\",\n css: columnResizerCss,\n window: targetWindow,\n });\n\n const positionRef = useRef({ start: 0, now: 0 });\n\n const onMouseMove = useCallback(\n (e: MouseEvent) => {\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n\n const { current: position } = positionRef;\n\n const x = Math.round(e.clientX);\n const moveBy = x - position.now;\n const distanceMoved = position.now - position.start;\n\n positionRef.current.now = x;\n\n if (moveBy !== 0) {\n onDrag(e, moveBy, distanceMoved);\n }\n },\n [onDrag]\n );\n\n const onMouseUp = useCallback(\n (e: MouseEvent) => {\n window.removeEventListener(\"mouseup\", onMouseUp);\n window.removeEventListener(\"mousemove\", onMouseMove);\n\n const { current: position } = positionRef;\n const distanceMoved = position.now - position.start;\n onDragEnd(e, distanceMoved);\n },\n [onDragEnd, onMouseMove]\n );\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n const { current: position } = positionRef;\n onDragStart(e);\n position.now = position.start = Math.round(e.clientX);\n\n window.addEventListener(\"mouseup\", onMouseUp);\n window.addEventListener(\"mousemove\", onMouseMove);\n\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n },\n [onDragStart, onMouseMove, onMouseUp]\n );\n\n return <div className={baseClass} onMouseDown={handleMouseDown} />;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ColumnResizer.js","sources":["../../src/column-resizing/ColumnResizer.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useCallback, useRef } from \"react\";\n\nimport columnResizerCss from \"./ColumnResizer.css\";\n\nconst NOOP = () => undefined;\n\nconst baseClass = \"vuuColumnResizer\";\nexport interface TableColumnResizerProps {\n onDrag: (evt: MouseEvent, moveBy: number, totalDistanceMoved: number) => void;\n onDragEnd: (evt: MouseEvent, totalDistanceMoved: number) => void;\n onDragStart: (evt: React.MouseEvent) => void;\n}\n\nexport const ColumnResizer = ({\n onDrag,\n onDragEnd = NOOP,\n onDragStart = NOOP,\n}: TableColumnResizerProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-resizer\",\n css: columnResizerCss,\n window: targetWindow,\n });\n\n const positionRef = useRef({ start: 0, now: 0 });\n\n const onMouseMove = useCallback(\n (e: MouseEvent) => {\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n\n const { current: position } = positionRef;\n\n const x = Math.round(e.clientX);\n const moveBy = x - position.now;\n const distanceMoved = position.now - position.start;\n\n positionRef.current.now = x;\n\n if (moveBy !== 0) {\n onDrag(e, moveBy, distanceMoved);\n }\n },\n [onDrag]\n );\n\n const onMouseUp = useCallback(\n (e: MouseEvent) => {\n window.removeEventListener(\"mouseup\", onMouseUp);\n window.removeEventListener(\"mousemove\", onMouseMove);\n\n const { current: position } = positionRef;\n const distanceMoved = position.now - position.start;\n onDragEnd(e, distanceMoved);\n },\n [onDragEnd, onMouseMove]\n );\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n const { current: position } = positionRef;\n onDragStart(e);\n position.now = position.start = Math.round(e.clientX);\n\n window.addEventListener(\"mouseup\", onMouseUp);\n window.addEventListener(\"mousemove\", onMouseMove);\n\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n },\n [onDragStart, onMouseMove, onMouseUp]\n );\n\n return <div className={baseClass} onMouseDown={handleMouseDown} />;\n};\n"],"names":[],"mappings":";;;;;;AAMA,MAAM,OAAO,MAAM,KAAA,CAAA;AAEnB,MAAM,SAAY,GAAA,kBAAA;AAOX,MAAM,gBAAgB,CAAC;AAAA,EAC5B,MAAA;AAAA,EACA,SAAY,GAAA,IAAA;AAAA,EACZ,WAAc,GAAA;AAChB,CAA+B,KAAA;AAC7B,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAA,gBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,cAAc,MAAO,CAAA,EAAE,OAAO,CAAG,EAAA,GAAA,EAAK,GAAG,CAAA;AAE/C,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,CAAkB,KAAA;AACjB,MAAA,IAAI,EAAE,eAAiB,EAAA;AACrB,QAAA,CAAA,CAAE,eAAgB,EAAA;AAAA;AAGpB,MAAA,IAAI,EAAE,cAAgB,EAAA;AACpB,QAAA,CAAA,CAAE,cAAe,EAAA;AAAA;AAGnB,MAAM,MAAA,EAAE,OAAS,EAAA,QAAA,EAAa,GAAA,WAAA;AAE9B,MAAA,MAAM,CAAI,GAAA,IAAA,CAAK,KAAM,CAAA,CAAA,CAAE,OAAO,CAAA;AAC9B,MAAM,MAAA,MAAA,GAAS,IAAI,QAAS,CAAA,GAAA;AAC5B,MAAM,MAAA,aAAA,GAAgB,QAAS,CAAA,GAAA,GAAM,QAAS,CAAA,KAAA;AAE9C,MAAA,WAAA,CAAY,QAAQ,GAAM,GAAA,CAAA;AAE1B,MAAA,IAAI,WAAW,CAAG,EAAA;AAChB,QAAO,MAAA,CAAA,CAAA,EAAG,QAAQ,aAAa,CAAA;AAAA;AACjC,KACF;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,CAAkB,KAAA;AACjB,MAAO,MAAA,CAAA,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAC/C,MAAO,MAAA,CAAA,mBAAA,CAAoB,aAAa,WAAW,CAAA;AAEnD,MAAM,MAAA,EAAE,OAAS,EAAA,QAAA,EAAa,GAAA,WAAA;AAC9B,MAAM,MAAA,aAAA,GAAgB,QAAS,CAAA,GAAA,GAAM,QAAS,CAAA,KAAA;AAC9C,MAAA,SAAA,CAAU,GAAG,aAAa,CAAA;AAAA,KAC5B;AAAA,IACA,CAAC,WAAW,WAAW;AAAA,GACzB;AAEA,EAAA,MAAM,eAAkB,GAAA,WAAA;AAAA,IACtB,CAAC,CAAwB,KAAA;AACvB,MAAM,MAAA,EAAE,OAAS,EAAA,QAAA,EAAa,GAAA,WAAA;AAC9B,MAAA,WAAA,CAAY,CAAC,CAAA;AACb,MAAA,QAAA,CAAS,MAAM,QAAS,CAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,CAAM,EAAE,OAAO,CAAA;AAEpD,MAAO,MAAA,CAAA,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC5C,MAAO,MAAA,CAAA,gBAAA,CAAiB,aAAa,WAAW,CAAA;AAEhD,MAAA,IAAI,EAAE,eAAiB,EAAA;AACrB,QAAA,CAAA,CAAE,eAAgB,EAAA;AAAA;AAGpB,MAAA,IAAI,EAAE,cAAgB,EAAA;AACpB,QAAA,CAAA,CAAE,cAAe,EAAA;AAAA;AACnB,KACF;AAAA,IACA,CAAC,WAAa,EAAA,WAAA,EAAa,SAAS;AAAA,GACtC;AAEA,EAAA,uBAAQ,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,SAAA,EAAW,aAAa,eAAiB,EAAA,CAAA;AAClE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTableColumnResize.js","sources":["../../src/column-resizing/useTableColumnResize.tsx"],"sourcesContent":["import {\n Heading,\n ResizePhase,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { RefObject, useCallback, useRef, useState } from \"react\";\n\nexport type ResizeHandler = (evt: MouseEvent, moveBy: number) => void;\nexport interface CellResizeHookProps {\n column: RuntimeColumnDescriptor | Heading;\n onResize?: (phase: ResizePhase, columnName: string, width?: number) => void;\n rootRef: RefObject<HTMLDivElement>;\n}\n\nexport interface CellResizeHookResult {\n isResizing: boolean;\n onDrag: (evt: MouseEvent, moveBy: number, totalDistanceMoved: number) => void;\n onDragStart: (evt: React.MouseEvent) => void;\n onDragEnd: (evt: MouseEvent) => void;\n}\n\nexport const useTableColumnResize = ({\n column,\n onResize,\n rootRef,\n}: CellResizeHookProps): CellResizeHookResult => {\n const widthRef = useRef({ start: 0, now: 0 });\n\n const [isResizing, setResizing] = useState(false);\n const { name } = column;\n\n const handleResizeStart = useCallback(() => {\n if (onResize && rootRef.current) {\n const { current: width } = widthRef;\n const { width: measuredWidth } = rootRef.current.getBoundingClientRect();\n width.start = width.now = Math.round(measuredWidth);\n setResizing(true);\n onResize?.(\"begin\", name);\n }\n }, [name, onResize, rootRef]);\n\n const handleResize = useCallback(\n (_evt: MouseEvent, moveBy: number, totalDistanceMoved) => {\n if (rootRef.current) {\n if (onResize) {\n const { current: width } = widthRef;\n const newWidth = width.start + totalDistanceMoved;\n if (newWidth !== width.now && newWidth > 0) {\n onResize(\"resize\", name, newWidth);\n width.now = newWidth;\n }\n }\n }\n },\n [name, onResize, rootRef],\n );\n\n const handleResizeEnd = useCallback(() => {\n if (onResize) {\n const { current: width } = widthRef;\n onResize(\"end\", name, width.now);\n setTimeout(() => {\n // clickHandler in HeaderCell checks isResizing before firing. Because onMouseUp\n // fires before click, we need to delay setting isResizing back to false, just\n // long enough that the click ghandler will have fired.\n setResizing(false);\n }, 80);\n }\n }, [name, onResize]);\n\n return {\n isResizing,\n onDrag: handleResize,\n onDragStart: handleResizeStart,\n onDragEnd: handleResizeEnd,\n };\n};\n"],"names":[],"mappings":";;AAqBO,MAAM,uBAAuB,CAAC;AAAA,EACnC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AACF,CAAiD,KAAA;AAC/C,EAAA,MAAM,WAAW,MAAO,CAAA,EAAE,OAAO,CAAG,EAAA,GAAA,EAAK,GAAG,CAAA,CAAA;AAE5C,EAAA,MAAM,CAAC,UAAA,EAAY,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAChD,EAAM,MAAA,EAAE,MAAS,GAAA,MAAA,CAAA;AAEjB,EAAM,MAAA,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAI,IAAA,QAAA,IAAY,QAAQ,OAAS,EAAA;AAC/B,MAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,QAAA,CAAA;AAC3B,MAAA,MAAM,EAAE,KAAO,EAAA,aAAA,EAAkB,GAAA,OAAA,CAAQ,QAAQ,qBAAsB,EAAA,CAAA;AACvE,MAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAM,GAAM,GAAA,IAAA,CAAK,MAAM,aAAa,CAAA,CAAA;AAClD,MAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAChB,MAAA,QAAA,GAAW,SAAS,IAAI,CAAA,CAAA;AAAA,KAC1B;AAAA,GACC,EAAA,CAAC,IAAM,EAAA,QAAA,EAAU,OAAO,CAAC,CAAA,CAAA;AAE5B,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,IAAkB,EAAA,MAAA,EAAgB,kBAAuB,KAAA;AACxD,MAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,QAAA,IAAI,QAAU,EAAA;AACZ,UAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,QAAA,CAAA;AAC3B,UAAM,MAAA,QAAA,GAAW,MAAM,KAAQ,GAAA,kBAAA,CAAA;AAC/B,UAAA,IAAI,QAAa,KAAA,KAAA,CAAM,GAAO,IAAA,QAAA,GAAW,CAAG,EAAA;AAC1C,YAAS,QAAA,CAAA,QAAA,EAAU,MAAM,QAAQ,CAAA,CAAA;AACjC,YAAA,KAAA,CAAM,GAAM,GAAA,QAAA,CAAA;AAAA,WACd;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,IAAM,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA,GAC1B,CAAA;AAEA,EAAM,MAAA,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,QAAA,CAAA;AAC3B,MAAS,QAAA,CAAA,KAAA,EAAO,IAAM,EAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC/B,MAAA,UAAA,CAAW,MAAM;AAIf,QAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AAAA,SAChB,EAAE,CAAA,CAAA;AAAA,KACP;AAAA,GACC,EAAA,CAAC,IAAM,EAAA,QAAQ,CAAC,CAAA,CAAA;AAEnB,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,MAAQ,EAAA,YAAA;AAAA,IACR,WAAa,EAAA,iBAAA;AAAA,IACb,SAAW,EAAA,eAAA;AAAA,GACb,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"useTableColumnResize.js","sources":["../../src/column-resizing/useTableColumnResize.tsx"],"sourcesContent":["import {\n Heading,\n ResizePhase,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { RefObject, useCallback, useRef, useState } from \"react\";\n\nexport type ResizeHandler = (evt: MouseEvent, moveBy: number) => void;\nexport interface CellResizeHookProps {\n column: RuntimeColumnDescriptor | Heading;\n onResize?: (phase: ResizePhase, columnName: string, width?: number) => void;\n rootRef: RefObject<HTMLDivElement>;\n}\n\nexport interface CellResizeHookResult {\n isResizing: boolean;\n onDrag: (evt: MouseEvent, moveBy: number, totalDistanceMoved: number) => void;\n onDragStart: (evt: React.MouseEvent) => void;\n onDragEnd: (evt: MouseEvent) => void;\n}\n\nexport const useTableColumnResize = ({\n column,\n onResize,\n rootRef,\n}: CellResizeHookProps): CellResizeHookResult => {\n const widthRef = useRef({ start: 0, now: 0 });\n\n const [isResizing, setResizing] = useState(false);\n const { name } = column;\n\n const handleResizeStart = useCallback(() => {\n if (onResize && rootRef.current) {\n const { current: width } = widthRef;\n const { width: measuredWidth } = rootRef.current.getBoundingClientRect();\n width.start = width.now = Math.round(measuredWidth);\n setResizing(true);\n onResize?.(\"begin\", name);\n }\n }, [name, onResize, rootRef]);\n\n const handleResize = useCallback(\n (_evt: MouseEvent, moveBy: number, totalDistanceMoved) => {\n if (rootRef.current) {\n if (onResize) {\n const { current: width } = widthRef;\n const newWidth = width.start + totalDistanceMoved;\n if (newWidth !== width.now && newWidth > 0) {\n onResize(\"resize\", name, newWidth);\n width.now = newWidth;\n }\n }\n }\n },\n [name, onResize, rootRef],\n );\n\n const handleResizeEnd = useCallback(() => {\n if (onResize) {\n const { current: width } = widthRef;\n onResize(\"end\", name, width.now);\n setTimeout(() => {\n // clickHandler in HeaderCell checks isResizing before firing. Because onMouseUp\n // fires before click, we need to delay setting isResizing back to false, just\n // long enough that the click ghandler will have fired.\n setResizing(false);\n }, 80);\n }\n }, [name, onResize]);\n\n return {\n isResizing,\n onDrag: handleResize,\n onDragStart: handleResizeStart,\n onDragEnd: handleResizeEnd,\n };\n};\n"],"names":[],"mappings":";;AAqBO,MAAM,uBAAuB,CAAC;AAAA,EACnC,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAiD,KAAA;AAC/C,EAAA,MAAM,WAAW,MAAO,CAAA,EAAE,OAAO,CAAG,EAAA,GAAA,EAAK,GAAG,CAAA;AAE5C,EAAA,MAAM,CAAC,UAAA,EAAY,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAM,MAAA,EAAE,MAAS,GAAA,MAAA;AAEjB,EAAM,MAAA,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAI,IAAA,QAAA,IAAY,QAAQ,OAAS,EAAA;AAC/B,MAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,QAAA;AAC3B,MAAA,MAAM,EAAE,KAAO,EAAA,aAAA,EAAkB,GAAA,OAAA,CAAQ,QAAQ,qBAAsB,EAAA;AACvE,MAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAM,GAAM,GAAA,IAAA,CAAK,MAAM,aAAa,CAAA;AAClD,MAAA,WAAA,CAAY,IAAI,CAAA;AAChB,MAAA,QAAA,GAAW,SAAS,IAAI,CAAA;AAAA;AAC1B,GACC,EAAA,CAAC,IAAM,EAAA,QAAA,EAAU,OAAO,CAAC,CAAA;AAE5B,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,CAAC,IAAkB,EAAA,MAAA,EAAgB,kBAAuB,KAAA;AACxD,MAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,QAAA,IAAI,QAAU,EAAA;AACZ,UAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,QAAA;AAC3B,UAAM,MAAA,QAAA,GAAW,MAAM,KAAQ,GAAA,kBAAA;AAC/B,UAAA,IAAI,QAAa,KAAA,KAAA,CAAM,GAAO,IAAA,QAAA,GAAW,CAAG,EAAA;AAC1C,YAAS,QAAA,CAAA,QAAA,EAAU,MAAM,QAAQ,CAAA;AACjC,YAAA,KAAA,CAAM,GAAM,GAAA,QAAA;AAAA;AACd;AACF;AACF,KACF;AAAA,IACA,CAAC,IAAM,EAAA,QAAA,EAAU,OAAO;AAAA,GAC1B;AAEA,EAAM,MAAA,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,QAAA;AAC3B,MAAS,QAAA,CAAA,KAAA,EAAO,IAAM,EAAA,KAAA,CAAM,GAAG,CAAA;AAC/B,MAAA,UAAA,CAAW,MAAM;AAIf,QAAA,WAAA,CAAY,KAAK,CAAA;AAAA,SAChB,EAAE,CAAA;AAAA;AACP,GACC,EAAA,CAAC,IAAM,EAAA,QAAQ,CAAC,CAAA;AAEnB,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,MAAQ,EAAA,YAAA;AAAA,IACR,WAAa,EAAA,iBAAA;AAAA,IACb,SAAW,EAAA;AAAA,GACb;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildContextMenuDescriptors.js","sources":["../../src/context-menu/buildContextMenuDescriptors.ts"],"sourcesContent":["import {\n ContextMenuItemDescriptor,\n DataSource,\n MenuBuilder,\n} from \"@vuu-ui/vuu-data-types\";\nimport { RuntimeColumnDescriptor, PinLocation } from \"@vuu-ui/vuu-table-types\";\nimport { isNumericColumn } from \"@vuu-ui/vuu-utils\";\n\nexport type ContextMenuLocation = \"header\" | \"filter\" | \"grid\";\n\ntype MaybeColumn = { column?: RuntimeColumnDescriptor };\n\nexport const buildContextMenuDescriptors =\n (dataSource?: DataSource): MenuBuilder =>\n (location, options) => {\n const descriptors: ContextMenuItemDescriptor[] = [];\n if (dataSource === undefined) {\n return descriptors;\n }\n //TODO which should it be ?\n if (location === \"header\" || location === \"column-menu\") {\n descriptors.push(\n ...buildSortMenuItems(options as MaybeColumn, dataSource),\n );\n descriptors.push(\n ...buildGroupMenuItems(options as MaybeColumn, dataSource),\n );\n descriptors.push(\n ...buildAggregationMenuItems(options as MaybeColumn, dataSource),\n );\n descriptors.push(...buildColumnDisplayMenuItems(options as MaybeColumn));\n descriptors.push({\n action: \"column-settings\",\n icon: \"settings\",\n label: `Column Settings ...`,\n options,\n });\n descriptors.push({\n action: \"table-settings\",\n icon: \"settings\",\n label: `DataGrid Settings ...`,\n options,\n });\n }\n\n // if (options?.selectedRowCount){\n // // TODO pass the table name\n // const rpcActions = getRpcActions();\n // for (let {label, method} of rpcActions){\n // descriptors.push({action: Action.RpcCall, label, options: {method}})\n // }\n // }\n\n return descriptors;\n };\n\nfunction buildSortMenuItems(\n options: MaybeColumn,\n { sort: { sortDefs } }: DataSource,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n const menuItems: ContextMenuItemDescriptor[] = [];\n if (column === undefined) {\n return menuItems;\n }\n\n const hasSort = sortDefs.length > 0;\n\n if (column.sorted === \"A\") {\n menuItems.push({\n label: \"Reverse Sort (DSC)\",\n action: \"sort-dsc\",\n options,\n });\n } else if (column.sorted === \"D\") {\n menuItems.push({\n label: \"Reverse Sort (ASC)\",\n action: \"sort-asc\",\n options,\n });\n } else if (typeof column.sorted === \"number\") {\n if (column.sorted > 0) {\n menuItems.push({\n label: \"Reverse Sort (DSC)\",\n action: \"sort-add-dsc\",\n options,\n });\n } else {\n menuItems.push({\n label: \"Reverse Sort (ASC)\",\n action: \"sort-add-asc\",\n options,\n });\n }\n\n // removing the last column from a sort would be a no-op, so pointless\n if (hasSort && Math.abs(column.sorted) < sortDefs.length) {\n menuItems.push({\n label: \"Remove from sort\",\n action: \"sort-remove\",\n options,\n });\n }\n\n menuItems.push({\n label: \"New Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n } else if (hasSort) {\n menuItems.push({\n label: \"Add to sort\",\n children: [\n { label: \"Ascending\", action: \"sort-add-asc\", options },\n { label: \"Descending\", action: \"sort-add-dsc\", options },\n ],\n });\n menuItems.push({\n label: \"New Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n } else {\n menuItems.push({\n label: \"Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n }\n return menuItems;\n}\n\nfunction buildAggregationMenuItems(\n options: MaybeColumn,\n dataSource: DataSource,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n if (column === undefined || dataSource.groupBy?.length === 0) {\n return [];\n }\n const { name, label = name } = column;\n\n return [\n {\n label: `Aggregate ${label}`,\n children: [\n { label: \"Count\", action: \"agg-count\", options },\n { label: \"Distinct\", action: \"agg-distinct\", options },\n ].concat(\n isNumericColumn(column)\n ? [\n { label: \"Sum\", action: \"agg-sum\", options },\n { label: \"Avg\", action: \"agg-avg\", options },\n { label: \"High\", action: \"agg-high\", options },\n { label: \"Low\", action: \"agg-low\", options },\n ]\n : [],\n ),\n },\n ];\n}\n\nconst pinColumn = (options: unknown, pinLocation: PinLocation) =>\n ({\n label: `Pin ${pinLocation}`,\n action: `column-pin-${pinLocation}`,\n options,\n }) as ContextMenuItemDescriptor;\n\nconst pinLeft = (options: unknown) => pinColumn(options, \"left\");\nconst pinFloating = (options: unknown) => pinColumn(options, \"floating\");\nconst pinRight = (options: unknown) => pinColumn(options, \"right\");\n\nfunction buildColumnDisplayMenuItems(\n options: MaybeColumn,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n if (column === undefined) {\n return [];\n }\n const { pin } = column;\n\n const menuItems: ContextMenuItemDescriptor[] = [\n {\n label: `Hide column`,\n action: \"column-hide\",\n options,\n },\n {\n label: `Remove column`,\n action: \"column-remove\",\n options,\n },\n ];\n\n if (pin === undefined) {\n menuItems.push({\n label: `Pin column`,\n children: [pinLeft(options), pinFloating(options), pinRight(options)],\n });\n } else if (pin === \"left\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinFloating(options), pinRight(options)],\n },\n );\n } else if (pin === \"right\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinLeft(options), pinFloating(options)],\n },\n );\n } else if (pin === \"floating\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinLeft(options), pinRight(options)],\n },\n );\n }\n\n return menuItems;\n}\n\nfunction buildGroupMenuItems(\n options: MaybeColumn,\n { groupBy }: DataSource,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n const menuItems: ContextMenuItemDescriptor[] = [];\n if (column === undefined) {\n return menuItems;\n }\n\n const { name, label = name } = column;\n\n if (groupBy?.length === 0) {\n menuItems.push({\n label: `Group by ${label}`,\n action: \"group\",\n options,\n });\n } else {\n menuItems.push({\n label: `Add ${label} to group by`,\n action: \"group-add\",\n options,\n });\n }\n\n return menuItems;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildContextMenuDescriptors.js","sources":["../../src/context-menu/buildContextMenuDescriptors.ts"],"sourcesContent":["import {\n ContextMenuItemDescriptor,\n DataSource,\n MenuBuilder,\n} from \"@vuu-ui/vuu-data-types\";\nimport { RuntimeColumnDescriptor, PinLocation } from \"@vuu-ui/vuu-table-types\";\nimport { isNumericColumn } from \"@vuu-ui/vuu-utils\";\n\nexport type ContextMenuLocation = \"header\" | \"filter\" | \"grid\";\n\ntype MaybeColumn = { column?: RuntimeColumnDescriptor };\n\nexport const buildContextMenuDescriptors =\n (dataSource?: DataSource): MenuBuilder =>\n (location, options) => {\n const descriptors: ContextMenuItemDescriptor[] = [];\n if (dataSource === undefined) {\n return descriptors;\n }\n //TODO which should it be ?\n if (location === \"header\" || location === \"column-menu\") {\n descriptors.push(\n ...buildSortMenuItems(options as MaybeColumn, dataSource),\n );\n descriptors.push(\n ...buildGroupMenuItems(options as MaybeColumn, dataSource),\n );\n descriptors.push(\n ...buildAggregationMenuItems(options as MaybeColumn, dataSource),\n );\n descriptors.push(...buildColumnDisplayMenuItems(options as MaybeColumn));\n descriptors.push({\n action: \"column-settings\",\n icon: \"settings\",\n label: `Column Settings ...`,\n options,\n });\n descriptors.push({\n action: \"table-settings\",\n icon: \"settings\",\n label: `DataGrid Settings ...`,\n options,\n });\n }\n\n // if (options?.selectedRowCount){\n // // TODO pass the table name\n // const rpcActions = getRpcActions();\n // for (let {label, method} of rpcActions){\n // descriptors.push({action: Action.RpcCall, label, options: {method}})\n // }\n // }\n\n return descriptors;\n };\n\nfunction buildSortMenuItems(\n options: MaybeColumn,\n { sort: { sortDefs } }: DataSource,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n const menuItems: ContextMenuItemDescriptor[] = [];\n if (column === undefined) {\n return menuItems;\n }\n\n const hasSort = sortDefs.length > 0;\n\n if (column.sorted === \"A\") {\n menuItems.push({\n label: \"Reverse Sort (DSC)\",\n action: \"sort-dsc\",\n options,\n });\n } else if (column.sorted === \"D\") {\n menuItems.push({\n label: \"Reverse Sort (ASC)\",\n action: \"sort-asc\",\n options,\n });\n } else if (typeof column.sorted === \"number\") {\n if (column.sorted > 0) {\n menuItems.push({\n label: \"Reverse Sort (DSC)\",\n action: \"sort-add-dsc\",\n options,\n });\n } else {\n menuItems.push({\n label: \"Reverse Sort (ASC)\",\n action: \"sort-add-asc\",\n options,\n });\n }\n\n // removing the last column from a sort would be a no-op, so pointless\n if (hasSort && Math.abs(column.sorted) < sortDefs.length) {\n menuItems.push({\n label: \"Remove from sort\",\n action: \"sort-remove\",\n options,\n });\n }\n\n menuItems.push({\n label: \"New Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n } else if (hasSort) {\n menuItems.push({\n label: \"Add to sort\",\n children: [\n { label: \"Ascending\", action: \"sort-add-asc\", options },\n { label: \"Descending\", action: \"sort-add-dsc\", options },\n ],\n });\n menuItems.push({\n label: \"New Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n } else {\n menuItems.push({\n label: \"Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n }\n return menuItems;\n}\n\nfunction buildAggregationMenuItems(\n options: MaybeColumn,\n dataSource: DataSource,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n if (column === undefined || dataSource.groupBy?.length === 0) {\n return [];\n }\n const { name, label = name } = column;\n\n return [\n {\n label: `Aggregate ${label}`,\n children: [\n { label: \"Count\", action: \"agg-count\", options },\n { label: \"Distinct\", action: \"agg-distinct\", options },\n ].concat(\n isNumericColumn(column)\n ? [\n { label: \"Sum\", action: \"agg-sum\", options },\n { label: \"Avg\", action: \"agg-avg\", options },\n { label: \"High\", action: \"agg-high\", options },\n { label: \"Low\", action: \"agg-low\", options },\n ]\n : [],\n ),\n },\n ];\n}\n\nconst pinColumn = (options: unknown, pinLocation: PinLocation) =>\n ({\n label: `Pin ${pinLocation}`,\n action: `column-pin-${pinLocation}`,\n options,\n }) as ContextMenuItemDescriptor;\n\nconst pinLeft = (options: unknown) => pinColumn(options, \"left\");\nconst pinFloating = (options: unknown) => pinColumn(options, \"floating\");\nconst pinRight = (options: unknown) => pinColumn(options, \"right\");\n\nfunction buildColumnDisplayMenuItems(\n options: MaybeColumn,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n if (column === undefined) {\n return [];\n }\n const { pin } = column;\n\n const menuItems: ContextMenuItemDescriptor[] = [\n {\n label: `Hide column`,\n action: \"column-hide\",\n options,\n },\n {\n label: `Remove column`,\n action: \"column-remove\",\n options,\n },\n ];\n\n if (pin === undefined) {\n menuItems.push({\n label: `Pin column`,\n children: [pinLeft(options), pinFloating(options), pinRight(options)],\n });\n } else if (pin === \"left\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinFloating(options), pinRight(options)],\n },\n );\n } else if (pin === \"right\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinLeft(options), pinFloating(options)],\n },\n );\n } else if (pin === \"floating\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinLeft(options), pinRight(options)],\n },\n );\n }\n\n return menuItems;\n}\n\nfunction buildGroupMenuItems(\n options: MaybeColumn,\n { groupBy }: DataSource,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n const menuItems: ContextMenuItemDescriptor[] = [];\n if (column === undefined) {\n return menuItems;\n }\n\n const { name, label = name } = column;\n\n if (groupBy?.length === 0) {\n menuItems.push({\n label: `Group by ${label}`,\n action: \"group\",\n options,\n });\n } else {\n menuItems.push({\n label: `Add ${label} to group by`,\n action: \"group-add\",\n options,\n });\n }\n\n return menuItems;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useHandleTableContextMenu.js","sources":["../../src/context-menu/useHandleTableContextMenu.ts"],"sourcesContent":["/* eslint-disable no-sequences */\nimport { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { removeColumnFromFilter } from \"@vuu-ui/vuu-utils\";\nimport { VuuFilter } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n DataSource,\n DataSourceFilter,\n MenuActionHandler,\n} from \"@vuu-ui/vuu-data-types\";\nimport { PersistentColumnAction } from \"../useTableModel\";\nimport {\n addGroupColumn,\n addSortColumn,\n AggregationType,\n setAggregations,\n setSortColumn,\n} from \"@vuu-ui/vuu-utils\";\n\nexport interface ContextMenuOptions {\n column?: RuntimeColumnDescriptor;\n filter?: Filter;\n sort?: VuuFilter;\n}\nexport interface ContextMenuHookProps {\n dataSource?: DataSource;\n /**\n * A persistent Column Operation is any manipulation of a table column that should be\n * persisted across user sessions. e.g. if user pins a column, column should still be\n * pinned next time user opens app.\n */\n onPersistentColumnOperation: (action: PersistentColumnAction) => void;\n}\n\nconst removeFilterColumn = (\n dataSourceFilter: DataSourceFilter,\n column: RuntimeColumnDescriptor,\n) => {\n if (dataSourceFilter.filterStruct && column) {\n const [filterStruct, filter] = removeColumnFromFilter(\n column,\n dataSourceFilter.filterStruct,\n );\n return {\n filter,\n filterStruct,\n };\n } else {\n return dataSourceFilter;\n }\n};\n\nconst { Average, Count, Distinct, High, Low, Sum } = AggregationType;\n\nexport const useHandleTableContextMenu = ({\n dataSource,\n onPersistentColumnOperation,\n}: ContextMenuHookProps) => {\n /** return {boolean} used by caller to determine whether to forward to additional installed context menu handlers */\n const handleContextMenuAction: MenuActionHandler = (action): boolean => {\n const gridOptions = action.options as ContextMenuOptions;\n if (gridOptions.column && dataSource) {\n const { column } = gridOptions;\n // prettier-ignore\n switch(action.menuId){\n case \"sort-asc\": return (dataSource.sort = setSortColumn(dataSource.sort, column, \"A\")), true;\n case \"sort-dsc\": return (dataSource.sort = setSortColumn(dataSource.sort, column, \"D\")), true;\n case \"sort-add-asc\": return (dataSource.sort = addSortColumn(dataSource.sort, column, \"A\")), true;\n case \"sort-add-dsc\": return (dataSource.sort = addSortColumn(dataSource.sort, column, \"D\")), true;\n case \"group\": return (dataSource.groupBy = addGroupColumn(dataSource.groupBy ?? [], column)), true;\n case \"group-add\": return (dataSource.groupBy = addGroupColumn(dataSource.groupBy ?? [], column)), true;\n case \"column-hide\": return onPersistentColumnOperation({type: \"hideColumns\", columns: [column]}), true;\n case \"column-remove\": return (dataSource.columns = dataSource.columns.filter(name => name !== column.name)), true\n case \"filter-remove-column\": return (dataSource.filter = removeFilterColumn(dataSource.filter, column)), true;\n case \"remove-filters\": return (dataSource.filter = {filter:\"\"}), true;\n case \"agg-avg\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Average)), true;\n case \"agg-high\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, High)), true;\n case \"agg-low\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Low)), true;\n case \"agg-count\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Count)), true;\n case \"agg-distinct\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Distinct)), true;\n case \"agg-sum\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Sum)), true;\n case \"column-pin-floating\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: \"floating\"}), true;\n case \"column-pin-left\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: \"left\"}), true;\n case \"column-pin-right\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: \"right\"}), true;\n case \"column-unpin\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: undefined}), true\n case \"column-settings\": return onPersistentColumnOperation({type: \"columnSettings\", column}), true\n case \"table-settings\": return onPersistentColumnOperation({type: \"tableSettings\"}), true\n default:\n }\n }\n return false;\n };\n\n return handleContextMenuAction;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useHandleTableContextMenu.js","sources":["../../src/context-menu/useHandleTableContextMenu.ts"],"sourcesContent":["/* eslint-disable no-sequences */\nimport { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { removeColumnFromFilter } from \"@vuu-ui/vuu-utils\";\nimport { VuuFilter } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n DataSource,\n DataSourceFilter,\n MenuActionHandler,\n} from \"@vuu-ui/vuu-data-types\";\nimport { PersistentColumnAction } from \"../useTableModel\";\nimport {\n addGroupColumn,\n addSortColumn,\n AggregationType,\n setAggregations,\n setSortColumn,\n} from \"@vuu-ui/vuu-utils\";\n\nexport interface ContextMenuOptions {\n column?: RuntimeColumnDescriptor;\n filter?: Filter;\n sort?: VuuFilter;\n}\nexport interface ContextMenuHookProps {\n dataSource?: DataSource;\n /**\n * A persistent Column Operation is any manipulation of a table column that should be\n * persisted across user sessions. e.g. if user pins a column, column should still be\n * pinned next time user opens app.\n */\n onPersistentColumnOperation: (action: PersistentColumnAction) => void;\n}\n\nconst removeFilterColumn = (\n dataSourceFilter: DataSourceFilter,\n column: RuntimeColumnDescriptor,\n) => {\n if (dataSourceFilter.filterStruct && column) {\n const [filterStruct, filter] = removeColumnFromFilter(\n column,\n dataSourceFilter.filterStruct,\n );\n return {\n filter,\n filterStruct,\n };\n } else {\n return dataSourceFilter;\n }\n};\n\nconst { Average, Count, Distinct, High, Low, Sum } = AggregationType;\n\nexport const useHandleTableContextMenu = ({\n dataSource,\n onPersistentColumnOperation,\n}: ContextMenuHookProps) => {\n /** return {boolean} used by caller to determine whether to forward to additional installed context menu handlers */\n const handleContextMenuAction: MenuActionHandler = (action): boolean => {\n const gridOptions = action.options as ContextMenuOptions;\n if (gridOptions.column && dataSource) {\n const { column } = gridOptions;\n // prettier-ignore\n switch(action.menuId){\n case \"sort-asc\": return (dataSource.sort = setSortColumn(dataSource.sort, column, \"A\")), true;\n case \"sort-dsc\": return (dataSource.sort = setSortColumn(dataSource.sort, column, \"D\")), true;\n case \"sort-add-asc\": return (dataSource.sort = addSortColumn(dataSource.sort, column, \"A\")), true;\n case \"sort-add-dsc\": return (dataSource.sort = addSortColumn(dataSource.sort, column, \"D\")), true;\n case \"group\": return (dataSource.groupBy = addGroupColumn(dataSource.groupBy ?? [], column)), true;\n case \"group-add\": return (dataSource.groupBy = addGroupColumn(dataSource.groupBy ?? [], column)), true;\n case \"column-hide\": return onPersistentColumnOperation({type: \"hideColumns\", columns: [column]}), true;\n case \"column-remove\": return (dataSource.columns = dataSource.columns.filter(name => name !== column.name)), true\n case \"filter-remove-column\": return (dataSource.filter = removeFilterColumn(dataSource.filter, column)), true;\n case \"remove-filters\": return (dataSource.filter = {filter:\"\"}), true;\n case \"agg-avg\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Average)), true;\n case \"agg-high\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, High)), true;\n case \"agg-low\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Low)), true;\n case \"agg-count\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Count)), true;\n case \"agg-distinct\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Distinct)), true;\n case \"agg-sum\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Sum)), true;\n case \"column-pin-floating\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: \"floating\"}), true;\n case \"column-pin-left\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: \"left\"}), true;\n case \"column-pin-right\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: \"right\"}), true;\n case \"column-unpin\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: undefined}), true\n case \"column-settings\": return onPersistentColumnOperation({type: \"columnSettings\", column}), true\n case \"table-settings\": return onPersistentColumnOperation({type: \"tableSettings\"}), true\n default:\n }\n }\n return false;\n };\n\n return handleContextMenuAction;\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupHeaderCell.js","sources":["../../src/header-cell/GroupHeaderCell.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n GroupColumnDescriptor,\n HeaderCellProps,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { OverflowContainer } from \"@vuu-ui/vuu-ui-controls\";\nimport { useLayoutEffectSkipFirst } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n KeyboardEventHandler,\n MouseEventHandler,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { ColumnHeaderPill, GroupColumnPill } from \"../column-header-pill\";\nimport { ColumnResizer, useTableColumnResize } from \"../column-resizing\";\nimport { useCell } from \"../useCell\";\n\nimport headerCellCss from \"./GroupHeaderCell.css\";\n\nconst classBase = \"vuuTableGroupHeaderCell\";\n\nconst switchIfChanged = (\n columns: RuntimeColumnDescriptor[],\n newColumns: RuntimeColumnDescriptor[],\n) => {\n if (columns === newColumns) {\n return columns;\n } else {\n return newColumns;\n }\n};\n\nexport interface GroupHeaderCellProps\n extends Omit<HeaderCellProps, \"onDragStart\" | \"onDrag\" | \"onDragEnd\"> {\n column: GroupColumnDescriptor;\n onMoveColumn?: (columns: ColumnDescriptor[]) => void;\n onRemoveColumn: (column: RuntimeColumnDescriptor) => void;\n}\n\nexport const GroupHeaderCell = ({\n column: groupColumn,\n className: classNameProp,\n onMoveColumn,\n onRemoveColumn,\n onResize,\n ...htmlAttributes\n}: GroupHeaderCellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-group-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLTableCellElement>(null);\n const { isResizing, ...resizeProps } = useTableColumnResize({\n column: groupColumn,\n onResize,\n rootRef,\n });\n\n const [columns, setColumns] = useState(groupColumn.columns);\n const { className, style } = useCell(groupColumn, classBase, true);\n const columnPillProps =\n columns.length > 1\n ? {\n removable: true,\n onRemove: onRemoveColumn,\n }\n : undefined;\n\n const handleMoveItem = useCallback(\n (fromIndex, toIndex) => {\n setColumns((cols) => {\n const newCols = cols.slice();\n const [tab] = newCols.splice(fromIndex, 1);\n if (toIndex === -1) {\n const result = newCols.concat(tab);\n requestAnimationFrame(() => onMoveColumn?.(result));\n return result;\n } else {\n newCols.splice(toIndex, 0, tab);\n requestAnimationFrame(() => onMoveColumn?.(newCols));\n return newCols;\n }\n });\n },\n [onMoveColumn],\n );\n\n useLayoutEffectSkipFirst(() => {\n setColumns((cols) => switchIfChanged(cols, groupColumn.columns));\n }, [groupColumn.columns]);\n\n const handleClick = useCallback<MouseEventHandler<HTMLSpanElement>>(() => {\n console.log(\"click\");\n }, []);\n const handleKeyDown = useCallback<\n KeyboardEventHandler<HTMLSpanElement>\n >(() => {\n console.log(\"keydown\");\n }, []);\n\n return (\n <div\n {...htmlAttributes}\n aria-colindex={groupColumn.ariaColIndex}\n className={cx(className, classNameProp, {\n [`${classBase}-pending`]: groupColumn.groupConfirmed === false,\n })}\n ref={rootRef}\n role=\"columnheader\"\n style={style}\n >\n <OverflowContainer\n allowDragDrop\n className={`${classBase}-inner`}\n onMoveItem={handleMoveItem}\n overflowPosition=\"start\"\n >\n {columns.map((column) => {\n return (\n <GroupColumnPill\n {...columnPillProps}\n column={column}\n key={column.name}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n />\n );\n })}\n </OverflowContainer>\n <ColumnHeaderPill\n className={`${classBase}-removeAll`}\n column={groupColumn}\n removable\n onRemove={onRemoveColumn}\n />\n\n {groupColumn.resizeable !== false ? (\n <ColumnResizer {...resizeProps} />\n ) : null}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GroupHeaderCell.js","sources":["../../src/header-cell/GroupHeaderCell.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n GroupColumnDescriptor,\n HeaderCellProps,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { OverflowContainer } from \"@vuu-ui/vuu-ui-controls\";\nimport { useLayoutEffectSkipFirst } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n KeyboardEventHandler,\n MouseEventHandler,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { ColumnHeaderPill, GroupColumnPill } from \"../column-header-pill\";\nimport { ColumnResizer, useTableColumnResize } from \"../column-resizing\";\nimport { useCell } from \"../useCell\";\n\nimport headerCellCss from \"./GroupHeaderCell.css\";\n\nconst classBase = \"vuuTableGroupHeaderCell\";\n\nconst switchIfChanged = (\n columns: RuntimeColumnDescriptor[],\n newColumns: RuntimeColumnDescriptor[],\n) => {\n if (columns === newColumns) {\n return columns;\n } else {\n return newColumns;\n }\n};\n\nexport interface GroupHeaderCellProps\n extends Omit<HeaderCellProps, \"onDragStart\" | \"onDrag\" | \"onDragEnd\"> {\n column: GroupColumnDescriptor;\n onMoveColumn?: (columns: ColumnDescriptor[]) => void;\n onRemoveColumn: (column: RuntimeColumnDescriptor) => void;\n}\n\nexport const GroupHeaderCell = ({\n column: groupColumn,\n className: classNameProp,\n onMoveColumn,\n onRemoveColumn,\n onResize,\n ...htmlAttributes\n}: GroupHeaderCellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-group-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLTableCellElement>(null);\n const { isResizing, ...resizeProps } = useTableColumnResize({\n column: groupColumn,\n onResize,\n rootRef,\n });\n\n const [columns, setColumns] = useState(groupColumn.columns);\n const { className, style } = useCell(groupColumn, classBase, true);\n const columnPillProps =\n columns.length > 1\n ? {\n removable: true,\n onRemove: onRemoveColumn,\n }\n : undefined;\n\n const handleMoveItem = useCallback(\n (fromIndex, toIndex) => {\n setColumns((cols) => {\n const newCols = cols.slice();\n const [tab] = newCols.splice(fromIndex, 1);\n if (toIndex === -1) {\n const result = newCols.concat(tab);\n requestAnimationFrame(() => onMoveColumn?.(result));\n return result;\n } else {\n newCols.splice(toIndex, 0, tab);\n requestAnimationFrame(() => onMoveColumn?.(newCols));\n return newCols;\n }\n });\n },\n [onMoveColumn],\n );\n\n useLayoutEffectSkipFirst(() => {\n setColumns((cols) => switchIfChanged(cols, groupColumn.columns));\n }, [groupColumn.columns]);\n\n const handleClick = useCallback<MouseEventHandler<HTMLSpanElement>>(() => {\n console.log(\"click\");\n }, []);\n const handleKeyDown = useCallback<\n KeyboardEventHandler<HTMLSpanElement>\n >(() => {\n console.log(\"keydown\");\n }, []);\n\n return (\n <div\n {...htmlAttributes}\n aria-colindex={groupColumn.ariaColIndex}\n className={cx(className, classNameProp, {\n [`${classBase}-pending`]: groupColumn.groupConfirmed === false,\n })}\n ref={rootRef}\n role=\"columnheader\"\n style={style}\n >\n <OverflowContainer\n allowDragDrop\n className={`${classBase}-inner`}\n onMoveItem={handleMoveItem}\n overflowPosition=\"start\"\n >\n {columns.map((column) => {\n return (\n <GroupColumnPill\n {...columnPillProps}\n column={column}\n key={column.name}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n />\n );\n })}\n </OverflowContainer>\n <ColumnHeaderPill\n className={`${classBase}-removeAll`}\n column={groupColumn}\n removable\n onRemove={onRemoveColumn}\n />\n\n {groupColumn.resizeable !== false ? (\n <ColumnResizer {...resizeProps} />\n ) : null}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderCell.js","sources":["../../src/header-cell/HeaderCell.tsx"],"sourcesContent":["import { useContextMenu } from \"@vuu-ui/vuu-popups\";\nimport { HeaderCellProps } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n KeyboardEventHandler,\n MouseEvent,\n MouseEventHandler,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport { SortIndicator } from \"../column-header-pill\";\nimport { ColumnMenu } from \"../column-menu\";\nimport { ColumnResizer, useTableColumnResize } from \"../column-resizing\";\nimport { useCell } from \"../useCell\";\n\nimport headerCellCss from \"./HeaderCell.css\";\n\nconst classBase = \"vuuTableHeaderCell\";\n\nexport const HeaderCell = ({\n className: classNameProp,\n column,\n onClick,\n onResize,\n showMenu = true,\n ...htmlAttributes\n}: HeaderCellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const { HeaderCellContentRenderer, HeaderCellLabelRenderer } = column;\n const rootRef = useRef<HTMLDivElement>(null);\n const { isResizing, ...resizeProps } = useTableColumnResize({\n column,\n onResize,\n rootRef,\n });\n\n const [showContextMenu] = useContextMenu();\n\n const handleContextMenu = useMemo(() => {\n if (showMenu) {\n return undefined;\n } else {\n return (e: MouseEvent) => showContextMenu(e, \"column-menu\", { column });\n }\n }, [column, showContextMenu, showMenu]);\n\n const headerItems = useMemo(() => {\n const sortIndicator = <SortIndicator column={column} />;\n const columnLabel = HeaderCellLabelRenderer ? (\n <HeaderCellLabelRenderer\n className={`${classBase}-label`}\n column={column}\n />\n ) : (\n <div className={`${classBase}-label`}>{column.label ?? column.name}</div>\n );\n const columnContent = HeaderCellContentRenderer\n ? [<HeaderCellContentRenderer column={column} key=\"content\" />]\n : [];\n\n if (showMenu) {\n const columnMenu = <ColumnMenu column={column} />;\n\n if (column.align === \"right\") {\n return [sortIndicator, columnLabel, columnContent, columnMenu];\n } else {\n return [columnMenu, columnLabel, sortIndicator, columnContent];\n }\n } else {\n if (column.align === \"right\") {\n return [sortIndicator, columnLabel, columnContent];\n } else {\n return [columnLabel, sortIndicator, columnContent];\n }\n }\n }, [HeaderCellContentRenderer, HeaderCellLabelRenderer, column, showMenu]);\n\n const handleClick = useCallback<MouseEventHandler<HTMLDivElement>>(\n (evt) => {\n !isResizing && onClick?.(evt);\n },\n [isResizing, onClick],\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (evt) => {\n if (evt.key === \"Enter\") {\n onClick?.(evt);\n }\n },\n [onClick],\n );\n\n const { className, style } = useCell(column, classBase, true);\n\n return (\n <div\n {...htmlAttributes}\n aria-colindex={column.ariaColIndex}\n className={cx(className, classNameProp, {\n [`${classBase}-resizing`]: isResizing,\n [`${classBase}-noMenu`]: showMenu === false,\n })}\n onClick={handleClick}\n onContextMenu={handleContextMenu}\n onKeyDown={handleKeyDown}\n ref={rootRef}\n role=\"columnheader\"\n style={style}\n >\n {...headerItems}\n {column.resizeable !== false ? <ColumnResizer {...resizeProps} /> : null}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HeaderCell.js","sources":["../../src/header-cell/HeaderCell.tsx"],"sourcesContent":["import { useContextMenu } from \"@vuu-ui/vuu-popups\";\nimport { HeaderCellProps } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n KeyboardEventHandler,\n MouseEvent,\n MouseEventHandler,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport { SortIndicator } from \"../column-header-pill\";\nimport { ColumnMenu } from \"../column-menu\";\nimport { ColumnResizer, useTableColumnResize } from \"../column-resizing\";\nimport { useCell } from \"../useCell\";\n\nimport headerCellCss from \"./HeaderCell.css\";\n\nconst classBase = \"vuuTableHeaderCell\";\n\nexport const HeaderCell = ({\n className: classNameProp,\n column,\n onClick,\n onResize,\n showMenu = true,\n ...htmlAttributes\n}: HeaderCellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const { HeaderCellContentRenderer, HeaderCellLabelRenderer } = column;\n const rootRef = useRef<HTMLDivElement>(null);\n const { isResizing, ...resizeProps } = useTableColumnResize({\n column,\n onResize,\n rootRef,\n });\n\n const [showContextMenu] = useContextMenu();\n\n const handleContextMenu = useMemo(() => {\n if (showMenu) {\n return undefined;\n } else {\n return (e: MouseEvent) => showContextMenu(e, \"column-menu\", { column });\n }\n }, [column, showContextMenu, showMenu]);\n\n const headerItems = useMemo(() => {\n const sortIndicator = <SortIndicator column={column} />;\n const columnLabel = HeaderCellLabelRenderer ? (\n <HeaderCellLabelRenderer\n className={`${classBase}-label`}\n column={column}\n />\n ) : (\n <div className={`${classBase}-label`}>{column.label ?? column.name}</div>\n );\n const columnContent = HeaderCellContentRenderer\n ? [<HeaderCellContentRenderer column={column} key=\"content\" />]\n : [];\n\n if (showMenu) {\n const columnMenu = <ColumnMenu column={column} />;\n\n if (column.align === \"right\") {\n return [sortIndicator, columnLabel, columnContent, columnMenu];\n } else {\n return [columnMenu, columnLabel, sortIndicator, columnContent];\n }\n } else {\n if (column.align === \"right\") {\n return [sortIndicator, columnLabel, columnContent];\n } else {\n return [columnLabel, sortIndicator, columnContent];\n }\n }\n }, [HeaderCellContentRenderer, HeaderCellLabelRenderer, column, showMenu]);\n\n const handleClick = useCallback<MouseEventHandler<HTMLDivElement>>(\n (evt) => {\n !isResizing && onClick?.(evt);\n },\n [isResizing, onClick],\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (evt) => {\n if (evt.key === \"Enter\") {\n onClick?.(evt);\n }\n },\n [onClick],\n );\n\n const { className, style } = useCell(column, classBase, true);\n\n return (\n <div\n {...htmlAttributes}\n aria-colindex={column.ariaColIndex}\n className={cx(className, classNameProp, {\n [`${classBase}-resizing`]: isResizing,\n [`${classBase}-noMenu`]: showMenu === false,\n })}\n onClick={handleClick}\n onContextMenu={handleContextMenu}\n onKeyDown={handleKeyDown}\n ref={rootRef}\n role=\"columnheader\"\n style={style}\n >\n {...headerItems}\n {column.resizeable !== false ? <ColumnResizer {...resizeProps} /> : null}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
+ export { BulkEditDialog } from './bulk-edit/BulkEditDialog.js';
1
2
  export { BulkEditPanel } from './bulk-edit/BulkEditPanel.js';
2
- export { BulkEditPanelDialog } from './bulk-edit/BulkEditPanelDialog.js';
3
3
  export { useBulkEditPanel } from './bulk-edit/useBulkEditPanel.js';
4
4
  export { useBulkEditRow } from './bulk-edit/useBulkEditRow.js';
5
5
  export { CheckboxCell } from './cell-renderers/checkbox-cell/CheckboxCell.js';
@@ -9,7 +9,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
9
9
  var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
10
10
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
11
11
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
12
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
12
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
13
13
  var _range;
14
14
  const { SELECTED } = metadataKeys;
15
15
  class MovingWindow {
@@ -1 +1 @@
1
- {"version":3,"file":"moving-window.js","sources":["../src/moving-window.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n isRowSelectedLast,\n metadataKeys,\n WindowRange,\n} from \"@vuu-ui/vuu-utils\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst { SELECTED } = metadataKeys;\n\nexport class MovingWindow {\n public data: DataSourceRow[];\n public rowCount = 0;\n #range: WindowRange;\n\n constructor({ from, to }: VuuRange) {\n this.#range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(Math.max(0, to - from));\n this.rowCount = 0;\n }\n\n setRowCount = (rowCount: number) => {\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n\n this.rowCount = rowCount;\n };\n\n add(data: DataSourceRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.#range.from;\n this.data[internalIndex] = data;\n\n // Hack until we can deal with this more elegantly. When we have a block\n // select operation, first row is selected (and updated via server), then\n // remaining rows are selected when we select the block-end row. We get an\n // update for all rows except first. Because we're extending the select status\n // on the client, we have to adjust the first row selected (its still selected\n // but is no longer the 'last selected row in block')\n // Maybe answer is to apply ALL the selection status code here, not in Viewport\n if (data[SELECTED]) {\n const previousRow = this.data[internalIndex - 1];\n if (isRowSelectedLast(previousRow)) {\n this.data[internalIndex - 1] = previousRow.slice() as DataSourceRow;\n this.data[internalIndex - 1][SELECTED] -= 4;\n }\n }\n }\n }\n\n getAtIndex(index: number) {\n return this.#range.isWithin(index) &&\n this.data[index - this.#range.from] != null\n ? this.data[index - this.#range.from]\n : undefined;\n }\n\n isWithinRange(index: number) {\n return this.#range.isWithin(index);\n }\n\n setRange({ from, to }: VuuRange) {\n if (from !== this.#range.from || to !== this.#range.to) {\n const [overlapFrom, overlapTo] = this.#range.overlap(from, to);\n const newData = new Array(Math.max(0, to - from));\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.#range.from = from;\n this.#range.to = to;\n }\n }\n\n getSelectedRows() {\n return this.data.filter((row) => row[SELECTED] !== 0);\n }\n\n get range() {\n return this.#range;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"moving-window.js","sources":["../src/moving-window.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n isRowSelectedLast,\n metadataKeys,\n WindowRange,\n} from \"@vuu-ui/vuu-utils\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst { SELECTED } = metadataKeys;\n\nexport class MovingWindow {\n public data: DataSourceRow[];\n public rowCount = 0;\n #range: WindowRange;\n\n constructor({ from, to }: VuuRange) {\n this.#range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(Math.max(0, to - from));\n this.rowCount = 0;\n }\n\n setRowCount = (rowCount: number) => {\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n\n this.rowCount = rowCount;\n };\n\n add(data: DataSourceRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.#range.from;\n this.data[internalIndex] = data;\n\n // Hack until we can deal with this more elegantly. When we have a block\n // select operation, first row is selected (and updated via server), then\n // remaining rows are selected when we select the block-end row. We get an\n // update for all rows except first. Because we're extending the select status\n // on the client, we have to adjust the first row selected (its still selected\n // but is no longer the 'last selected row in block')\n // Maybe answer is to apply ALL the selection status code here, not in Viewport\n if (data[SELECTED]) {\n const previousRow = this.data[internalIndex - 1];\n if (isRowSelectedLast(previousRow)) {\n this.data[internalIndex - 1] = previousRow.slice() as DataSourceRow;\n this.data[internalIndex - 1][SELECTED] -= 4;\n }\n }\n }\n }\n\n getAtIndex(index: number) {\n return this.#range.isWithin(index) &&\n this.data[index - this.#range.from] != null\n ? this.data[index - this.#range.from]\n : undefined;\n }\n\n isWithinRange(index: number) {\n return this.#range.isWithin(index);\n }\n\n setRange({ from, to }: VuuRange) {\n if (from !== this.#range.from || to !== this.#range.to) {\n const [overlapFrom, overlapTo] = this.#range.overlap(from, to);\n const newData = new Array(Math.max(0, to - from));\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.#range.from = from;\n this.#range.to = to;\n }\n }\n\n getSelectedRows() {\n return this.data.filter((row) => row[SELECTED] !== 0);\n }\n\n get range() {\n return this.#range;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PaginationControl.js","sources":["../../src/pagination/PaginationControl.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { GoToInput, Pagination, Paginator } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { usePagination } from \"./usePagination\";\n\nimport paginationControlCss from \"./PaginationControl.css\";\nimport { HtmlHTMLAttributes, forwardRef } from \"react\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\n\nconst classBase = \"vuuPaginationControl\";\n\nexport interface PaginationControlProps\n extends HtmlHTMLAttributes<HTMLDivElement> {\n dataSource: DataSource;\n}\n\nexport const PaginationControl = forwardRef<\n HTMLDivElement,\n PaginationControlProps\n>(function PaginationControl(\n { className, dataSource, ...htmlAttributes },\n forwardedRef,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table\",\n css: paginationControlCss,\n window: targetWindow,\n });\n\n const { onPageChange, pageCount } = usePagination({\n dataSource,\n });\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardedRef}\n >\n <Pagination count={pageCount} onPageChange={onPageChange}>\n <GoToInput />\n <Paginator />\n </Pagination>\n </div>\n );\n});\n"],"names":["PaginationControl"],"mappings":";;;;;;;;;AAUA,MAAM,SAAY,GAAA,sBAAA,CAAA;AAOL,MAAA,iBAAA,GAAoB,UAG/B,CAAA,SAASA,kBACT,CAAA,EAAE,WAAW,UAAY,EAAA,GAAG,cAAe,EAAA,EAC3C,YACA,EAAA;AACA,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,WAAA;AAAA,IACR,GAAK,EAAA,oBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,YAAA,EAAc,SAAU,EAAA,GAAI,aAAc,CAAA;AAAA,IAChD,UAAA;AAAA,GACD,CAAA,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAK,EAAA,YAAA;AAAA,MAEL,QAAC,kBAAA,IAAA,CAAA,UAAA,EAAA,EAAW,KAAO,EAAA,SAAA,EAAW,YAC5B,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAU,EAAA,EAAA,CAAA;AAAA,4BACV,SAAU,EAAA,EAAA,CAAA;AAAA,OACb,EAAA,CAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"PaginationControl.js","sources":["../../src/pagination/PaginationControl.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { GoToInput, Pagination, Paginator } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { usePagination } from \"./usePagination\";\n\nimport paginationControlCss from \"./PaginationControl.css\";\nimport { HtmlHTMLAttributes, forwardRef } from \"react\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\n\nconst classBase = \"vuuPaginationControl\";\n\nexport interface PaginationControlProps\n extends HtmlHTMLAttributes<HTMLDivElement> {\n dataSource: DataSource;\n}\n\nexport const PaginationControl = forwardRef<\n HTMLDivElement,\n PaginationControlProps\n>(function PaginationControl(\n { className, dataSource, ...htmlAttributes },\n forwardedRef,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table\",\n css: paginationControlCss,\n window: targetWindow,\n });\n\n const { onPageChange, pageCount } = usePagination({\n dataSource,\n });\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardedRef}\n >\n <Pagination count={pageCount} onPageChange={onPageChange}>\n <GoToInput />\n <Paginator />\n </Pagination>\n </div>\n );\n});\n"],"names":["PaginationControl"],"mappings":";;;;;;;;;AAUA,MAAM,SAAY,GAAA,sBAAA;AAOL,MAAA,iBAAA,GAAoB,UAG/B,CAAA,SAASA,kBACT,CAAA,EAAE,WAAW,UAAY,EAAA,GAAG,cAAe,EAAA,EAC3C,YACA,EAAA;AACA,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,WAAA;AAAA,IACR,GAAK,EAAA,oBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,YAAA,EAAc,SAAU,EAAA,GAAI,aAAc,CAAA;AAAA,IAChD;AAAA,GACD,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAK,EAAA,YAAA;AAAA,MAEL,QAAC,kBAAA,IAAA,CAAA,UAAA,EAAA,EAAW,KAAO,EAAA,SAAA,EAAW,YAC5B,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAU,EAAA,EAAA,CAAA;AAAA,4BACV,SAAU,EAAA,EAAA;AAAA,OACb,EAAA;AAAA;AAAA,GACF;AAEJ,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePagination.js","sources":["../../src/pagination/usePagination.ts"],"sourcesContent":["import { SyntheticEvent, useCallback, useMemo, useState } from \"react\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\n\nexport interface PaginationHookProps {\n dataSource: DataSource;\n}\n\nconst getPageCount = (dataSource: DataSource) => {\n const { range, size } = dataSource;\n const pageSize = range.to - range.from;\n if (pageSize > 0) {\n return Math.ceil(size / pageSize);\n } else {\n return 0;\n }\n};\n\nexport const usePagination = ({ dataSource }: PaginationHookProps) => {\n const [pageCount, setPageCount] = useState<number>(getPageCount(dataSource));\n\n useMemo(() => {\n dataSource.on(\"page-count\", (n: number) => setPageCount(n));\n }, [dataSource]);\n\n const handlePageChange = useCallback(\n (_evt: SyntheticEvent, page: number) => {\n const { range } = dataSource;\n const pageSize = range.to - range.from;\n const firstRow = pageSize * (page - 1);\n console.log(\n `set range ${JSON.stringify({ from: firstRow, to: firstRow + pageSize })}`,\n );\n dataSource.range = { from: firstRow, to: firstRow + pageSize };\n },\n [dataSource],\n );\n\n return {\n onPageChange: handlePageChange,\n pageCount,\n };\n};\n"],"names":[],"mappings":";;AAOA,MAAM,YAAA,GAAe,CAAC,UAA2B,KAAA;AAC/C,EAAM,MAAA,EAAE,KAAO,EAAA,IAAA,EAAS,GAAA,UAAA,CAAA;AACxB,EAAM,MAAA,QAAA,GAAW,KAAM,CAAA,EAAA,GAAK,KAAM,CAAA,IAAA,CAAA;AAClC,EAAA,IAAI,WAAW,CAAG,EAAA;AAChB,IAAO,OAAA,IAAA,CAAK,IAAK,CAAA,IAAA,GAAO,QAAQ,CAAA,CAAA;AAAA,GAC3B,MAAA;AACL,IAAO,OAAA,CAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAEO,MAAM,aAAgB,GAAA,CAAC,EAAE,UAAA,EAAsC,KAAA;AACpE,EAAA,MAAM,CAAC,SAAW,EAAA,YAAY,IAAI,QAAiB,CAAA,YAAA,CAAa,UAAU,CAAC,CAAA,CAAA;AAE3E,EAAA,OAAA,CAAQ,MAAM;AACZ,IAAA,UAAA,CAAW,GAAG,YAAc,EAAA,CAAC,CAAc,KAAA,YAAA,CAAa,CAAC,CAAC,CAAA,CAAA;AAAA,GAC5D,EAAG,CAAC,UAAU,CAAC,CAAA,CAAA;AAEf,EAAA,MAAM,gBAAmB,GAAA,WAAA;AAAA,IACvB,CAAC,MAAsB,IAAiB,KAAA;AACtC,MAAM,MAAA,EAAE,OAAU,GAAA,UAAA,CAAA;AAClB,MAAM,MAAA,QAAA,GAAW,KAAM,CAAA,EAAA,GAAK,KAAM,CAAA,IAAA,CAAA;AAClC,MAAM,MAAA,QAAA,GAAW,YAAY,IAAO,GAAA,CAAA,CAAA,CAAA;AACpC,MAAQ,OAAA,CAAA,GAAA;AAAA,QACN,CAAA,UAAA,EAAa,IAAK,CAAA,SAAA,CAAU,EAAE,IAAA,EAAM,UAAU,EAAI,EAAA,QAAA,GAAW,QAAS,EAAC,CAAC,CAAA,CAAA;AAAA,OAC1E,CAAA;AACA,MAAA,UAAA,CAAW,QAAQ,EAAE,IAAA,EAAM,QAAU,EAAA,EAAA,EAAI,WAAW,QAAS,EAAA,CAAA;AAAA,KAC/D;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,YAAc,EAAA,gBAAA;AAAA,IACd,SAAA;AAAA,GACF,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"usePagination.js","sources":["../../src/pagination/usePagination.ts"],"sourcesContent":["import { SyntheticEvent, useCallback, useMemo, useState } from \"react\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\n\nexport interface PaginationHookProps {\n dataSource: DataSource;\n}\n\nconst getPageCount = (dataSource: DataSource) => {\n const { range, size } = dataSource;\n const pageSize = range.to - range.from;\n if (pageSize > 0) {\n return Math.ceil(size / pageSize);\n } else {\n return 0;\n }\n};\n\nexport const usePagination = ({ dataSource }: PaginationHookProps) => {\n const [pageCount, setPageCount] = useState<number>(getPageCount(dataSource));\n\n useMemo(() => {\n dataSource.on(\"page-count\", (n: number) => setPageCount(n));\n }, [dataSource]);\n\n const handlePageChange = useCallback(\n (_evt: SyntheticEvent, page: number) => {\n const { range } = dataSource;\n const pageSize = range.to - range.from;\n const firstRow = pageSize * (page - 1);\n console.log(\n `set range ${JSON.stringify({ from: firstRow, to: firstRow + pageSize })}`,\n );\n dataSource.range = { from: firstRow, to: firstRow + pageSize };\n },\n [dataSource],\n );\n\n return {\n onPageChange: handlePageChange,\n pageCount,\n };\n};\n"],"names":[],"mappings":";;AAOA,MAAM,YAAA,GAAe,CAAC,UAA2B,KAAA;AAC/C,EAAM,MAAA,EAAE,KAAO,EAAA,IAAA,EAAS,GAAA,UAAA;AACxB,EAAM,MAAA,QAAA,GAAW,KAAM,CAAA,EAAA,GAAK,KAAM,CAAA,IAAA;AAClC,EAAA,IAAI,WAAW,CAAG,EAAA;AAChB,IAAO,OAAA,IAAA,CAAK,IAAK,CAAA,IAAA,GAAO,QAAQ,CAAA;AAAA,GAC3B,MAAA;AACL,IAAO,OAAA,CAAA;AAAA;AAEX,CAAA;AAEO,MAAM,aAAgB,GAAA,CAAC,EAAE,UAAA,EAAsC,KAAA;AACpE,EAAA,MAAM,CAAC,SAAW,EAAA,YAAY,IAAI,QAAiB,CAAA,YAAA,CAAa,UAAU,CAAC,CAAA;AAE3E,EAAA,OAAA,CAAQ,MAAM;AACZ,IAAA,UAAA,CAAW,GAAG,YAAc,EAAA,CAAC,CAAc,KAAA,YAAA,CAAa,CAAC,CAAC,CAAA;AAAA,GAC5D,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,gBAAmB,GAAA,WAAA;AAAA,IACvB,CAAC,MAAsB,IAAiB,KAAA;AACtC,MAAM,MAAA,EAAE,OAAU,GAAA,UAAA;AAClB,MAAM,MAAA,QAAA,GAAW,KAAM,CAAA,EAAA,GAAK,KAAM,CAAA,IAAA;AAClC,MAAM,MAAA,QAAA,GAAW,YAAY,IAAO,GAAA,CAAA,CAAA;AACpC,MAAQ,OAAA,CAAA,GAAA;AAAA,QACN,CAAA,UAAA,EAAa,IAAK,CAAA,SAAA,CAAU,EAAE,IAAA,EAAM,UAAU,EAAI,EAAA,QAAA,GAAW,QAAS,EAAC,CAAC,CAAA;AAAA,OAC1E;AACA,MAAA,UAAA,CAAW,QAAQ,EAAE,IAAA,EAAM,QAAU,EAAA,EAAA,EAAI,WAAW,QAAS,EAAA;AAAA,KAC/D;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAO,OAAA;AAAA,IACL,YAAc,EAAA,gBAAA;AAAA,IACd;AAAA,GACF;AACF;;;;"}