@deephaven/iris-grid 1.9.1-beta.0 → 1.9.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/sidebar/RollupRows.css +14 -1
  2. package/dist/sidebar/RollupRows.css.map +1 -1
  3. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  4. package/dist/sidebar/RollupRows.js +4 -5
  5. package/dist/sidebar/RollupRows.js.map +1 -1
  6. package/dist/sidebar/visibility-ordering-builder/SearchItem.d.ts +2 -2
  7. package/dist/sidebar/visibility-ordering-builder/SearchItem.d.ts.map +1 -1
  8. package/dist/sidebar/visibility-ordering-builder/SearchItem.js +4 -4
  9. package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
  10. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css +7 -2
  11. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css.map +1 -1
  12. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.d.ts +3 -3
  13. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.d.ts.map +1 -1
  14. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +13 -11
  15. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
  16. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css +1 -3
  17. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +1 -1
  18. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +20 -7
  19. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
  20. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +101 -76
  21. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  22. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts +1 -1
  23. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts.map +1 -1
  24. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +5 -23
  25. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
  26. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -1
  27. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +7 -5
  28. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  29. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts +6 -3
  30. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts.map +1 -1
  31. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +69 -23
  32. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  33. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.d.ts +2 -2
  34. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.d.ts.map +1 -1
  35. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +52 -47
  36. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
  37. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts +8 -1
  38. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts.map +1 -1
  39. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +12 -5
  40. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  41. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +1 -0
  42. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -1
  43. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts +1 -2
  44. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts.map +1 -1
  45. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +9 -4
  46. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  47. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.d.ts +1 -1
  48. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.d.ts.map +1 -1
  49. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -1
  50. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +1 -1
  51. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
  52. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +46 -20
  53. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  54. package/package.json +17 -16
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityOrderingBuilderUtils.js","names":["GridUtils","clamp","ColumnHeaderGroup","moveItemsFromDrop","from","to","movedColumns","columnHeaderGroups","flattenedItems","selectedParentItems","firstMovableIndex","lastMovableIndex","treeItems","map","item","i","_objectSpread","index","newMoves","newGroups","firstVisibleIndex","data","visibleIndex","fromItemIndex","findIndex","_ref","id","toItemIndex","_ref2","toIndex","Array","isArray","moveToGroup","parentId","length","moveItemOrRange","selectedRange","originalDropIndex","dropIndex","getVisibleIndex","children","groups","concat","toName","columnGroups","group","newGroupMap","Map","name","fromGroup","find","g","toGroup","movedGroup","filter","_parent","deleteNames","Set","parent","parentName","get","removeChildren","_parent$parent","_parent2","add","nextParentName","nextParent","_ref3","has","addChildren","setParent","undefined"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.ts"],"sourcesContent":["import { GridUtils, type MoveOperation } from '@deephaven/grid';\nimport clamp from 'lodash.clamp';\nimport ColumnHeaderGroup from '../../ColumnHeaderGroup';\nimport { type FlattenedItem } from './sortable-tree/types';\nimport { type FlattenedIrisGridTreeItem } from './sortable-tree/utilities';\n\n/**\n * Moves an item as the result of drag and drop in the visibility ordering builder\n * This is extracted from the component mostly for testing purposes\n * Drag and drop interactions are not easily testable\n *\n * @param from The item being dragged\n * @param to The item being dropped on\n * @param movedColumns The existing moved columns\n * @param columnHeaderGroups The column header groups pre-drag\n * @param flattenedItems Flattened tree items representing the list\n * @param selectedParentItems The user selected items in tree order. Should not include items if their parent item is selected\n * @param firstMovableIndex The first visible index that can be moved\n * @param lastMovableIndex The last visible index that can be moved\n * @returns Object containing the updated column header groups and updated movedColumns array\n * The movedColumns returned is complete and does not need to be combined with the existing movedColumns\n */\nexport function moveItemsFromDrop(\n from: FlattenedIrisGridTreeItem,\n to: FlattenedIrisGridTreeItem,\n movedColumns: readonly MoveOperation[],\n columnHeaderGroups: readonly ColumnHeaderGroup[],\n flattenedItems: readonly FlattenedIrisGridTreeItem[],\n selectedParentItems: readonly FlattenedIrisGridTreeItem[],\n firstMovableIndex: number,\n lastMovableIndex: number\n): {\n groups: readonly ColumnHeaderGroup[];\n movedColumns: readonly MoveOperation[];\n} {\n const treeItems = flattenedItems.map((item, i) => ({\n ...item,\n index: i,\n }));\n\n let newMoves = [] as MoveOperation[];\n let newGroups = columnHeaderGroups;\n\n const firstVisibleIndex = selectedParentItems[0].data.visibleIndex;\n\n const fromItemIndex = treeItems.findIndex(({ id }) => id === from.id);\n const toItemIndex = treeItems.findIndex(({ id }) => id === to.id);\n\n let toIndex = Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[1] + 1\n : firstVisibleIndex + 1;\n\n newGroups = moveToGroup(selectedParentItems[0], to.parentId, newGroups);\n\n // Move the items after to all after the first selected item\n for (let i = 1; i < selectedParentItems.length; i += 1) {\n const {\n data: { visibleIndex },\n } = selectedParentItems[i];\n\n newMoves = GridUtils.moveItemOrRange(visibleIndex, toIndex, newMoves, true);\n\n toIndex += Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n\n newGroups = moveToGroup(selectedParentItems[i], to.parentId, newGroups);\n }\n\n const selectedRange = [\n Array.isArray(firstVisibleIndex) ? firstVisibleIndex[0] : firstVisibleIndex,\n toIndex - 1,\n ] as [number, number];\n\n const originalDropIndex = Array.isArray(to.data.visibleIndex)\n ? to.data.visibleIndex[0]\n : to.data.visibleIndex;\n let dropIndex = GridUtils.getVisibleIndex(originalDropIndex, newMoves);\n\n // When moving up from multi-select\n // And the items caused the drop index to shift (disjoint multi-select)\n // The drop index will be off by 1\n if (fromItemIndex > toItemIndex && dropIndex > originalDropIndex) {\n dropIndex -= 1;\n }\n // Dropping as first item in a group\n // Need to adjust visible index if dragging from before this group or it is off by 1\n if (\n to.children.length > 0 &&\n (Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[0]\n : firstVisibleIndex) < dropIndex\n ) {\n dropIndex -= 1;\n }\n\n if (selectedRange[0] < dropIndex) {\n dropIndex -= selectedRange[1] - selectedRange[0];\n }\n\n newMoves = GridUtils.moveItemOrRange(\n selectedRange,\n clamp(dropIndex, firstMovableIndex, lastMovableIndex),\n newMoves\n );\n\n return {\n groups: newGroups,\n movedColumns:\n newMoves.length > 0 ? movedColumns.concat(newMoves) : movedColumns,\n };\n}\n\nexport function moveToGroup<T>(\n item: FlattenedItem<T>,\n toName: string | null,\n columnGroups: readonly ColumnHeaderGroup[]\n): readonly ColumnHeaderGroup[] {\n if (item.parentId === toName) {\n // Don't need to move an item if it is already in the group\n return columnGroups;\n }\n\n let newGroups = columnGroups.map(group => new ColumnHeaderGroup(group));\n const newGroupMap = new Map(newGroups.map(group => [group.name, group]));\n const fromGroup = newGroups.find(g => g.name === item.parentId);\n const toGroup = newGroups.find(g => g.name === toName);\n const movedGroup = newGroups.find(g => g.name === item.id);\n\n if (fromGroup != null) {\n // Moved out of a group\n fromGroup.children = fromGroup.children.filter(name => name !== item.id);\n\n // Moved all children out of a group\n if (fromGroup.children.length === 0) {\n const deleteNames = new Set([fromGroup.name]);\n const { parent: parentName = '' } = fromGroup;\n let parent = newGroupMap.get(parentName);\n parent?.removeChildren([fromGroup.name]);\n\n // Might need to delete parents if their only child is the now empty group\n while (parent && parent.children.length === 0) {\n deleteNames.add(parent.name);\n const nextParentName = parent?.parent ?? '';\n const nextParent = newGroupMap.get(nextParentName);\n nextParent?.removeChildren([parent.name]);\n parent = nextParent;\n }\n\n // Delete all groups that are now empty\n newGroups = newGroups.filter(({ name }) => !deleteNames.has(name));\n }\n }\n\n if (toGroup != null) {\n // Moved into a group\n toGroup.addChildren([item.id]);\n }\n\n movedGroup?.setParent(toName ?? undefined);\n\n return newGroups;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VisibilityOrderingBuilderUtils.js","names":["GridUtils","clamp","ColumnHeaderGroup","moveItemsFromDrop","from","to","movedColumns","columnHeaderGroups","selectedParentItems","firstMovableIndex","lastMovableIndex","newMoves","newGroups","firstVisibleIndex","data","visibleIndex","fromItemIndex","index","toItemIndex","toIndex","Array","isArray","moveToGroup","parentId","i","length","moveItemOrRange","selectedRange","originalDropIndex","dropIndex","getVisibleIndex","children","groups","concat","item","toName","columnGroups","map","group","newGroupMap","Map","name","fromGroup","find","g","toGroup","movedGroup","id","filter","_parent","deleteNames","Set","parent","parentName","get","removeChildren","_parent$parent","_parent2","add","nextParentName","nextParent","_ref","has","addChildren","setParent","undefined"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.ts"],"sourcesContent":["import { GridUtils, type MoveOperation } from '@deephaven/grid';\nimport clamp from 'lodash.clamp';\nimport ColumnHeaderGroup from '../../ColumnHeaderGroup';\nimport { type FlattenedItem } from './sortable-tree/types';\nimport { type FlattenedIrisGridTreeItem } from './sortable-tree/utilities';\n\n/**\n * Moves an item as the result of drag and drop in the visibility ordering builder\n * This is extracted from the component mostly for testing purposes\n * Drag and drop interactions are not easily testable\n *\n * @param from The item being dragged\n * @param to The item being dropped on\n * @param movedColumns The existing moved columns\n * @param columnHeaderGroups The column header groups pre-drag\n * @param flattenedItems Flattened tree items representing the list\n * @param selectedParentItems The user selected items in tree order. Should not include items if their parent item is selected\n * @param firstMovableIndex The first visible index that can be moved\n * @param lastMovableIndex The last visible index that can be moved\n * @returns Object containing the updated column header groups and updated movedColumns array\n * The movedColumns returned is complete and does not need to be combined with the existing movedColumns\n */\nexport function moveItemsFromDrop(\n from: FlattenedIrisGridTreeItem,\n to: FlattenedIrisGridTreeItem,\n movedColumns: readonly MoveOperation[],\n columnHeaderGroups: readonly ColumnHeaderGroup[],\n selectedParentItems: readonly FlattenedIrisGridTreeItem[],\n firstMovableIndex: number,\n lastMovableIndex: number\n): {\n groups: readonly ColumnHeaderGroup[];\n movedColumns: readonly MoveOperation[];\n} {\n let newMoves = [] as MoveOperation[];\n let newGroups = columnHeaderGroups;\n\n const firstVisibleIndex = selectedParentItems[0].data.visibleIndex;\n\n const fromItemIndex = from.index;\n const toItemIndex = to.index;\n\n let toIndex = Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[1] + 1\n : firstVisibleIndex + 1;\n\n newGroups = moveToGroup(selectedParentItems[0], to.parentId, newGroups);\n\n // Move the items after to all after the first selected item\n for (let i = 1; i < selectedParentItems.length; i += 1) {\n const {\n data: { visibleIndex },\n } = selectedParentItems[i];\n\n newMoves = GridUtils.moveItemOrRange(visibleIndex, toIndex, newMoves, true);\n\n toIndex += Array.isArray(visibleIndex)\n ? visibleIndex[1] - visibleIndex[0] + 1\n : 1;\n\n newGroups = moveToGroup(selectedParentItems[i], to.parentId, newGroups);\n }\n\n const selectedRange = [\n Array.isArray(firstVisibleIndex) ? firstVisibleIndex[0] : firstVisibleIndex,\n toIndex - 1,\n ] as [number, number];\n\n const originalDropIndex = Array.isArray(to.data.visibleIndex)\n ? to.data.visibleIndex[0]\n : to.data.visibleIndex;\n let dropIndex = GridUtils.getVisibleIndex(originalDropIndex, newMoves);\n\n // When moving up from multi-select\n // And the items caused the drop index to shift (disjoint multi-select)\n // The drop index will be off by 1\n if (fromItemIndex > toItemIndex && dropIndex > originalDropIndex) {\n dropIndex -= 1;\n }\n // Dropping as first item in a group\n // Need to adjust visible index if dragging from before this group or it is off by 1\n if (\n to.children.length > 0 &&\n (Array.isArray(firstVisibleIndex)\n ? firstVisibleIndex[0]\n : firstVisibleIndex) < dropIndex\n ) {\n dropIndex -= 1;\n }\n\n if (selectedRange[0] < dropIndex) {\n dropIndex -= selectedRange[1] - selectedRange[0];\n }\n\n newMoves = GridUtils.moveItemOrRange(\n selectedRange,\n clamp(dropIndex, firstMovableIndex, lastMovableIndex),\n newMoves\n );\n\n return {\n groups: newGroups,\n movedColumns:\n newMoves.length > 0 ? movedColumns.concat(newMoves) : movedColumns,\n };\n}\n\nexport function moveToGroup<T>(\n item: FlattenedItem<T>,\n toName: string | null,\n columnGroups: readonly ColumnHeaderGroup[]\n): readonly ColumnHeaderGroup[] {\n if (item.parentId === toName) {\n // Don't need to move an item if it is already in the group\n return columnGroups;\n }\n\n let newGroups = columnGroups.map(group => new ColumnHeaderGroup(group));\n const newGroupMap = new Map(newGroups.map(group => [group.name, group]));\n const fromGroup = newGroups.find(g => g.name === item.parentId);\n const toGroup = newGroups.find(g => g.name === toName);\n const movedGroup = newGroups.find(g => g.name === item.id);\n\n if (fromGroup != null) {\n // Moved out of a group\n fromGroup.children = fromGroup.children.filter(name => name !== item.id);\n\n // Moved all children out of a group\n if (fromGroup.children.length === 0) {\n const deleteNames = new Set([fromGroup.name]);\n const { parent: parentName = '' } = fromGroup;\n let parent = newGroupMap.get(parentName);\n parent?.removeChildren([fromGroup.name]);\n\n // Might need to delete parents if their only child is the now empty group\n while (parent && parent.children.length === 0) {\n deleteNames.add(parent.name);\n const nextParentName = parent?.parent ?? '';\n const nextParent = newGroupMap.get(nextParentName);\n nextParent?.removeChildren([parent.name]);\n parent = nextParent;\n }\n\n // Delete all groups that are now empty\n newGroups = newGroups.filter(({ name }) => !deleteNames.has(name));\n }\n }\n\n if (toGroup != null) {\n // Moved into a group\n toGroup.addChildren([item.id]);\n }\n\n movedGroup?.setParent(toName ?? undefined);\n\n return newGroups;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityOrderingItem.d.ts","sourceRoot":"","sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgD,MAAM,OAAO,CAAC;AAMrE,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAE7D,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,yBAAyB,CAAC;IAChC,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACzE;;;OAGG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACtE,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,kBAAkB,EAAE,CAClB,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,MAAM,GAAG,SAAS,KACtB,IAAI,CAAC;IACV,iBAAiB,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,CAAC;AAqGF,QAAA,MAAM,8BAA8B,+HAA+B,CAAC;AAEpE,eAAe,8BAA8B,CAAC"}
1
+ {"version":3,"file":"VisibilityOrderingItem.d.ts","sourceRoot":"","sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgD,MAAM,OAAO,CAAC;AAMrE,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAE7D,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,yBAAyB,CAAC;IAChC,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACzE;;;OAGG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACtE,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,kBAAkB,EAAE,CAClB,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,MAAM,GAAG,SAAS,KACtB,IAAI,CAAC;IACV,iBAAiB,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,CAAC;AAyGF,QAAA,MAAM,8BAA8B,+HAA+B,CAAC;AAEpE,eAAe,8BAA8B,CAAC"}
@@ -9,7 +9,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
9
  import { dhEye, dhEyeSlash, vsGripper } from '@deephaven/icons';
10
10
  import { Button, Tooltip } from '@deephaven/components';
11
11
  import VisibilityOrderingGroup from "./VisibilityOrderingGroup.js";
12
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  function emptyOnClick() {
14
14
  // no-op
15
15
  }
@@ -83,10 +83,12 @@ var VisibilityOrderingItem = /*#__PURE__*/forwardRef(function VisibilityOrdering
83
83
  children: [clone && childCount > 1 && /*#__PURE__*/_jsx("span", {
84
84
  className: "item-count",
85
85
  children: childCount
86
- }), /*#__PURE__*/_jsx(Tooltip, {
87
- children: "Drag to re-order"
88
- }), /*#__PURE__*/_jsx(FontAwesomeIcon, {
89
- icon: vsGripper
86
+ }), !clone && /*#__PURE__*/_jsxs(_Fragment, {
87
+ children: [/*#__PURE__*/_jsx(Tooltip, {
88
+ children: "Drag to re-order"
89
+ }), /*#__PURE__*/_jsx(FontAwesomeIcon, {
90
+ icon: vsGripper
91
+ })]
90
92
  })]
91
93
  })]
92
94
  }))
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityOrderingItem.js","names":["React","forwardRef","memo","useCallback","useRef","classNames","FontAwesomeIcon","dhEye","dhEyeSlash","vsGripper","Button","Tooltip","VisibilityOrderingGroup","jsx","_jsx","jsxs","_jsxs","emptyOnClick","VisibilityOrderingItem","props","ref","value","clone","childCount","item","onVisibilityChange","visibilityClickAndDrag","onClick","onGroupDelete","onGroupColorChange","onGroupNameChange","validateGroupName","handleProps","group","modelIndex","isVisible","data","buttonRef","handleVisibilityChange","e","buttons","_buttonRef$current","flat","current","focus","handleClick","event","_objectSpread","className","isSelected","selected","index","children","kind","onMouseDown","onMouseEnter","undefined","icon","tooltip","title","onDelete","onColorChange","onNameChange","validateName","MemoizedVisibilityOrderingItem"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingItem.tsx"],"sourcesContent":["import React, { forwardRef, memo, useCallback, useRef } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhEye, dhEyeSlash, vsGripper } from '@deephaven/icons';\nimport { Button, Tooltip } from '@deephaven/components';\nimport VisibilityOrderingGroup from './VisibilityOrderingGroup';\nimport { type FlattenedIrisGridTreeItem } from './sortable-tree/utilities';\nimport type ColumnHeaderGroup from '../../ColumnHeaderGroup';\n\ntype VisibilityOrderingItemProps = {\n value: string;\n clone: boolean;\n childCount: number;\n item: FlattenedIrisGridTreeItem;\n onVisibilityChange: (modelIndexes: number[], isVisible: boolean) => void;\n /**\n * If true, allows changing visibility by clicking and dragging over multiple item\n * visibility buttons.\n */\n visibilityClickAndDrag: boolean;\n onClick: (name: string, event: React.MouseEvent<HTMLElement>) => void;\n onGroupDelete: (group: ColumnHeaderGroup) => void;\n onGroupColorChange: (\n group: ColumnHeaderGroup,\n color: string | undefined\n ) => void;\n onGroupNameChange: (group: ColumnHeaderGroup, name: string) => void;\n validateGroupName: (name: string) => string;\n handleProps?: Record<string, unknown>;\n};\n\nfunction emptyOnClick(): void {\n // no-op\n}\n\nconst VisibilityOrderingItem = forwardRef<\n HTMLDivElement,\n VisibilityOrderingItemProps\n>(function VisibilityOrderingItem(props, ref) {\n const {\n value,\n clone,\n childCount,\n item,\n onVisibilityChange,\n visibilityClickAndDrag,\n onClick,\n onGroupDelete,\n onGroupColorChange,\n onGroupNameChange,\n validateGroupName,\n handleProps,\n } = props;\n const { group, modelIndex, isVisible } = item.data;\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handleVisibilityChange = useCallback(\n (e: React.MouseEvent) => {\n if (e.buttons === 1) {\n onVisibilityChange([modelIndex].flat(), !isVisible);\n buttonRef.current?.focus();\n }\n },\n [onVisibilityChange, modelIndex, isVisible]\n );\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n onClick(value, event);\n },\n [onClick, value]\n );\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n ref={ref}\n className={classNames('tree-item', {\n isSelected: item.selected,\n 'two-dragged': childCount === 2,\n 'multiple-dragged': childCount > 2,\n })}\n onClick={handleClick}\n data-index={item.index}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...handleProps}\n >\n {!clone && (\n <Button\n ref={buttonRef}\n kind=\"ghost\"\n className=\"px-1\"\n // We PropType validate onClick for Button\n onClick={emptyOnClick}\n onMouseDown={handleVisibilityChange}\n onMouseEnter={\n visibilityClickAndDrag ? handleVisibilityChange : undefined\n }\n icon={isVisible ? dhEye : dhEyeSlash}\n tooltip=\"Toggle visibility\"\n />\n )}\n <span\n title={value}\n className={classNames('column-name', group && 'column-group')}\n >\n {/* Display a normal item if this is the drag overlay clone, even if it's a group */}\n {group && !clone ? (\n <VisibilityOrderingGroup\n group={group}\n onDelete={onGroupDelete}\n onColorChange={onGroupColorChange}\n onNameChange={onGroupNameChange}\n validateName={validateGroupName}\n />\n ) : (\n value\n )}\n </span>\n <div>\n {clone && childCount > 1 && (\n <span className=\"item-count\">{childCount}</span>\n )}\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n </div>\n );\n});\n\nconst MemoizedVisibilityOrderingItem = memo(VisibilityOrderingItem);\n\nexport default MemoizedVisibilityOrderingItem;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VisibilityOrderingItem.js","names":["React","forwardRef","memo","useCallback","useRef","classNames","FontAwesomeIcon","dhEye","dhEyeSlash","vsGripper","Button","Tooltip","VisibilityOrderingGroup","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","emptyOnClick","VisibilityOrderingItem","props","ref","value","clone","childCount","item","onVisibilityChange","visibilityClickAndDrag","onClick","onGroupDelete","onGroupColorChange","onGroupNameChange","validateGroupName","handleProps","group","modelIndex","isVisible","data","buttonRef","handleVisibilityChange","e","buttons","_buttonRef$current","flat","current","focus","handleClick","event","_objectSpread","className","isSelected","selected","index","children","kind","onMouseDown","onMouseEnter","undefined","icon","tooltip","title","onDelete","onColorChange","onNameChange","validateName","MemoizedVisibilityOrderingItem"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingItem.tsx"],"sourcesContent":["import React, { forwardRef, memo, useCallback, useRef } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhEye, dhEyeSlash, vsGripper } from '@deephaven/icons';\nimport { Button, Tooltip } from '@deephaven/components';\nimport VisibilityOrderingGroup from './VisibilityOrderingGroup';\nimport { type FlattenedIrisGridTreeItem } from './sortable-tree/utilities';\nimport type ColumnHeaderGroup from '../../ColumnHeaderGroup';\n\ntype VisibilityOrderingItemProps = {\n value: string;\n clone: boolean;\n childCount: number;\n item: FlattenedIrisGridTreeItem;\n onVisibilityChange: (modelIndexes: number[], isVisible: boolean) => void;\n /**\n * If true, allows changing visibility by clicking and dragging over multiple item\n * visibility buttons.\n */\n visibilityClickAndDrag: boolean;\n onClick: (name: string, event: React.MouseEvent<HTMLElement>) => void;\n onGroupDelete: (group: ColumnHeaderGroup) => void;\n onGroupColorChange: (\n group: ColumnHeaderGroup,\n color: string | undefined\n ) => void;\n onGroupNameChange: (group: ColumnHeaderGroup, name: string) => void;\n validateGroupName: (name: string) => string;\n handleProps?: Record<string, unknown>;\n};\n\nfunction emptyOnClick(): void {\n // no-op\n}\n\nconst VisibilityOrderingItem = forwardRef<\n HTMLDivElement,\n VisibilityOrderingItemProps\n>(function VisibilityOrderingItem(props, ref) {\n const {\n value,\n clone,\n childCount,\n item,\n onVisibilityChange,\n visibilityClickAndDrag,\n onClick,\n onGroupDelete,\n onGroupColorChange,\n onGroupNameChange,\n validateGroupName,\n handleProps,\n } = props;\n const { group, modelIndex, isVisible } = item.data;\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handleVisibilityChange = useCallback(\n (e: React.MouseEvent) => {\n if (e.buttons === 1) {\n onVisibilityChange([modelIndex].flat(), !isVisible);\n buttonRef.current?.focus();\n }\n },\n [onVisibilityChange, modelIndex, isVisible]\n );\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n onClick(value, event);\n },\n [onClick, value]\n );\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n ref={ref}\n className={classNames('tree-item', {\n isSelected: item.selected,\n 'two-dragged': childCount === 2,\n 'multiple-dragged': childCount > 2,\n })}\n onClick={handleClick}\n data-index={item.index}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...handleProps}\n >\n {!clone && (\n <Button\n ref={buttonRef}\n kind=\"ghost\"\n className=\"px-1\"\n // We PropType validate onClick for Button\n onClick={emptyOnClick}\n onMouseDown={handleVisibilityChange}\n onMouseEnter={\n visibilityClickAndDrag ? handleVisibilityChange : undefined\n }\n icon={isVisible ? dhEye : dhEyeSlash}\n tooltip=\"Toggle visibility\"\n />\n )}\n <span\n title={value}\n className={classNames('column-name', group && 'column-group')}\n >\n {/* Display a normal item if this is the drag overlay clone, even if it's a group */}\n {group && !clone ? (\n <VisibilityOrderingGroup\n group={group}\n onDelete={onGroupDelete}\n onColorChange={onGroupColorChange}\n onNameChange={onGroupNameChange}\n validateName={validateGroupName}\n />\n ) : (\n value\n )}\n </span>\n <div>\n {clone && childCount > 1 && (\n <span className=\"item-count\">{childCount}</span>\n )}\n {!clone && (\n <>\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </>\n )}\n </div>\n </div>\n );\n});\n\nconst MemoizedVisibilityOrderingItem = memo(VisibilityOrderingItem);\n\nexport default MemoizedVisibilityOrderingItem;\n"],"mappings":"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","ignoreList":[]}
@@ -1,12 +1,15 @@
1
+ import React from 'react';
2
+ import { type Virtualizer } from '@tanstack/react-virtual';
1
3
  import { type TreeItemRenderFn } from './TreeItem';
2
- import type { TreeItem as TreeItemType } from './types';
4
+ import type { FlattenedItem } from './types';
3
5
  interface Props<T> {
4
- items: TreeItemType<T>[];
6
+ items: readonly FlattenedItem<T>[];
5
7
  indentationWidth?: number;
6
8
  renderItem: TreeItemRenderFn<T>;
7
9
  isDraggable?: boolean;
8
10
  withDepthMarkers?: boolean;
11
+ virtualizerRef?: React.Ref<Virtualizer<HTMLElement, Element>>;
9
12
  }
10
- export default function SortableTree<T>({ items, indentationWidth, renderItem, isDraggable, withDepthMarkers, }: Props<T>): JSX.Element;
13
+ export default function SortableTree<T>({ items, indentationWidth, renderItem, isDraggable, withDepthMarkers, virtualizerRef, }: Props<T>): JSX.Element;
11
14
  export {};
12
15
  //# sourceMappingURL=SortableTree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SortableTree.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAY,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD,UAAU,KAAK,CAAC,CAAC;IACf,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,CAAC,EAAE,EACtC,KAAK,EACL,gBAAqB,EACrB,UAAU,EACV,WAAkB,EAClB,gBAAuB,GACxB,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAqFxB"}
1
+ {"version":3,"file":"SortableTree.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAGf,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAY,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,UAAU,KAAK,CAAC,CAAC;IACf,KAAK,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;CAC/D;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,CAAC,EAAE,EACtC,KAAK,EACL,gBAAqB,EACrB,UAAU,EACV,WAAkB,EAClB,gBAAuB,EACvB,cAAc,GACf,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CA+HxB"}
@@ -1,7 +1,8 @@
1
- import { useEffect, useMemo, useRef } from 'react';
1
+ import React, { useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import { useDndContext } from '@dnd-kit/core';
4
- import { flattenTree, getProjection } from "./utilities.js";
4
+ import { defaultRangeExtractor, useVirtualizer } from '@tanstack/react-virtual';
5
+ import { getProjection } from "./utilities.js";
5
6
  import { SortableTreeItem } from "./SortableTreeItem.js";
6
7
  import { TreeItem } from "./TreeItem.js";
7
8
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -12,16 +13,16 @@ export default function SortableTree(_ref) {
12
13
  indentationWidth = 30,
13
14
  renderItem,
14
15
  isDraggable = true,
15
- withDepthMarkers = true
16
+ withDepthMarkers = true,
17
+ virtualizerRef
16
18
  } = _ref;
17
19
  var dndContext = useDndContext();
18
20
  var activeId = (_ref2 = (_dndContext$active = dndContext.active) === null || _dndContext$active === void 0 ? void 0 : _dndContext$active.id) !== null && _ref2 !== void 0 ? _ref2 : null;
19
21
  var overId = (_ref3 = (_dndContext$over = dndContext.over) === null || _dndContext$over === void 0 ? void 0 : _dndContext$over.id) !== null && _ref3 !== void 0 ? _ref3 : null;
20
22
  var offsetLeft = dndContext.active ? ((_dndContext$active$re = (_dndContext$active$re2 = dndContext.active.rect.current.translated) === null || _dndContext$active$re2 === void 0 ? void 0 : _dndContext$active$re2.left) !== null && _dndContext$active$re !== void 0 ? _dndContext$active$re : 0) - ((_dndContext$active$re3 = (_dndContext$active$re4 = dndContext.active.rect.current.initial) === null || _dndContext$active$re4 === void 0 ? void 0 : _dndContext$active$re4.left) !== null && _dndContext$active$re3 !== void 0 ? _dndContext$active$re3 : 0) : 0;
21
- var flattenedItems = useMemo(() => {
22
- var flattenedTree = flattenTree(items);
23
+ var filteredItems = useMemo(() => {
23
24
  if (activeId != null) {
24
- return flattenedTree.filter(_ref4 => {
25
+ return items.filter(_ref4 => {
25
26
  var {
26
27
  id,
27
28
  selected
@@ -29,30 +30,69 @@ export default function SortableTree(_ref) {
29
30
  return id === activeId || !selected;
30
31
  });
31
32
  }
32
- return flattenedTree;
33
+ return items;
33
34
  }, [activeId, items]);
34
- var context = useDndContext();
35
- var contextRef = useRef(context);
36
- useEffect(function updateContextRef() {
37
- contextRef.current = context;
38
- }, [context]);
35
+ var activeIndex = useMemo(() => filteredItems.findIndex(_ref5 => {
36
+ var {
37
+ id
38
+ } = _ref5;
39
+ return id === activeId;
40
+ }), [activeId, filteredItems]);
41
+
42
+ // Add the active index to the range so it is always rendered
43
+ var rangeExtractor = useCallback(range => {
44
+ var extractedRange = defaultRangeExtractor(range);
45
+ if (activeIndex >= 0 && (activeIndex < extractedRange[0] || activeIndex > extractedRange[extractedRange.length - 1])) {
46
+ extractedRange.push(activeIndex);
47
+ }
48
+ return extractedRange;
49
+ }, [activeIndex]);
50
+ var getScrollElement = useCallback(() => {
51
+ var _containerRef$current, _containerRef$current2;
52
+ return (_containerRef$current = (_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 ? void 0 : _containerRef$current2.parentElement) !== null && _containerRef$current !== void 0 ? _containerRef$current : null;
53
+ }, []);
54
+ var estimateSize = useCallback(() => 30, []);
55
+ var containerRef = useRef(null);
56
+ var virtualizer = useVirtualizer({
57
+ count: filteredItems.length,
58
+ getScrollElement,
59
+ estimateSize,
60
+ rangeExtractor,
61
+ overscan: 10,
62
+ gap: 1 // We set a 1px bottom margin before we virtualized this list
63
+ });
64
+
65
+ // Expose the virtualizer via ref
66
+ useImperativeHandle(virtualizerRef, () => virtualizer, [virtualizer]);
67
+ var virtualizedItems = virtualizer.getVirtualItems();
68
+ var {
69
+ measureDroppableContainers
70
+ } = useDndContext();
39
71
 
40
72
  // Without this, animations are funky when using the move/sort buttons
41
73
  // dnd-kit only remeasures on drag/drop by default
42
- // The context object changes while dragging (items don't)
43
- // Using the context ref allows this to trigger properly on only items changes
44
74
  useEffect(function remeasureContainers() {
45
- contextRef.current.measureDroppableContainers(items.map(_ref5 => {
75
+ measureDroppableContainers(virtualizedItems.map(_ref6 => {
46
76
  var {
47
- id
48
- } = _ref5;
49
- return id;
77
+ index
78
+ } = _ref6;
79
+ return filteredItems[index].id;
50
80
  }));
51
- }, [items]);
52
- var projected = isDraggable && activeId != null && overId != null ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
81
+ }, [filteredItems, measureDroppableContainers, virtualizedItems]);
82
+ var projected = isDraggable && activeId != null && overId != null ? getProjection(filteredItems, activeId, overId, offsetLeft, indentationWidth) : null;
53
83
  return /*#__PURE__*/_jsx("div", {
54
84
  className: classNames('tree-container', activeId != null && 'marching-ants'),
55
- children: flattenedItems.map(item => {
85
+ style: {
86
+ height: "".concat(virtualizer.getTotalSize(), "px"),
87
+ position: 'relative'
88
+ },
89
+ ref: containerRef,
90
+ children: virtualizer.getVirtualItems().map(_ref7 => {
91
+ var {
92
+ index,
93
+ start
94
+ } = _ref7;
95
+ var item = filteredItems[index];
56
96
  var {
57
97
  id,
58
98
  depth
@@ -63,13 +103,19 @@ export default function SortableTree(_ref) {
63
103
  depth: id === activeId && projected ? projected.depth : depth,
64
104
  item: item,
65
105
  renderItem: renderItem,
66
- withDepthMarkers: withDepthMarkers
106
+ withDepthMarkers: withDepthMarkers,
107
+ top: start
108
+ // This allows the group items to expand when editing the name and shift the list correctly
109
+ ,
110
+ measureElement: virtualizer.measureElement
67
111
  }, id) : /*#__PURE__*/_jsx(TreeItem, {
68
112
  value: id,
69
113
  depth: depth,
70
114
  item: item,
71
115
  renderItem: renderItem,
72
- withDepthMarkers: withDepthMarkers
116
+ withDepthMarkers: withDepthMarkers,
117
+ top: start,
118
+ wrapperRef: virtualizer.measureElement
73
119
  }, id);
74
120
  })
75
121
  });
@@ -1 +1 @@
1
- {"version":3,"file":"SortableTree.js","names":["useEffect","useMemo","useRef","classNames","useDndContext","flattenTree","getProjection","SortableTreeItem","TreeItem","jsx","_jsx","SortableTree","_ref","_ref2","_dndContext$active","_ref3","_dndContext$over","_dndContext$active$re","_dndContext$active$re2","_dndContext$active$re3","_dndContext$active$re4","items","indentationWidth","renderItem","isDraggable","withDepthMarkers","dndContext","activeId","active","id","overId","over","offsetLeft","rect","current","translated","left","initial","flattenedItems","flattenedTree","filter","_ref4","selected","context","contextRef","updateContextRef","remeasureContainers","measureDroppableContainers","map","_ref5","projected","className","children","item","depth","value"],"sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react';\nimport classNames from 'classnames';\nimport { useDndContext } from '@dnd-kit/core';\nimport { flattenTree, getProjection } from './utilities';\nimport { SortableTreeItem } from './SortableTreeItem';\nimport { TreeItem, type TreeItemRenderFn } from './TreeItem';\nimport type { TreeItem as TreeItemType } from './types';\n\ninterface Props<T> {\n items: TreeItemType<T>[];\n indentationWidth?: number;\n renderItem: TreeItemRenderFn<T>;\n isDraggable?: boolean;\n withDepthMarkers?: boolean;\n}\n\nexport default function SortableTree<T>({\n items,\n indentationWidth = 30,\n renderItem,\n isDraggable = true,\n withDepthMarkers = true,\n}: Props<T>): JSX.Element {\n const dndContext = useDndContext();\n const activeId = (dndContext.active?.id as string) ?? null;\n const overId = (dndContext.over?.id as string) ?? null;\n const offsetLeft = dndContext.active\n ? (dndContext.active.rect.current.translated?.left ?? 0) -\n (dndContext.active.rect.current.initial?.left ?? 0)\n : 0;\n\n const flattenedItems = useMemo(() => {\n const flattenedTree = flattenTree(items);\n\n if (activeId != null) {\n return flattenedTree.filter(\n ({ id, selected }) => id === activeId || !selected\n );\n }\n\n return flattenedTree;\n }, [activeId, items]);\n\n const context = useDndContext();\n const contextRef = useRef(context);\n\n useEffect(\n function updateContextRef() {\n contextRef.current = context;\n },\n [context]\n );\n\n // Without this, animations are funky when using the move/sort buttons\n // dnd-kit only remeasures on drag/drop by default\n // The context object changes while dragging (items don't)\n // Using the context ref allows this to trigger properly on only items changes\n useEffect(\n function remeasureContainers() {\n contextRef.current.measureDroppableContainers(items.map(({ id }) => id));\n },\n [items]\n );\n\n const projected =\n isDraggable && activeId != null && overId != null\n ? getProjection(\n flattenedItems,\n activeId,\n overId,\n offsetLeft,\n indentationWidth\n )\n : null;\n\n return (\n <div\n className={classNames(\n 'tree-container',\n activeId != null && 'marching-ants'\n )}\n >\n {flattenedItems.map(item => {\n const { id, depth } = item;\n return isDraggable ? (\n <SortableTreeItem\n key={id}\n id={id}\n value={id}\n depth={id === activeId && projected ? projected.depth : depth}\n item={item}\n renderItem={renderItem}\n withDepthMarkers={withDepthMarkers}\n />\n ) : (\n <TreeItem\n key={id}\n value={id}\n depth={depth}\n item={item}\n renderItem={renderItem}\n withDepthMarkers={withDepthMarkers}\n />\n );\n })}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SortableTree.js","names":["React","useCallback","useEffect","useImperativeHandle","useMemo","useRef","classNames","useDndContext","defaultRangeExtractor","useVirtualizer","getProjection","SortableTreeItem","TreeItem","jsx","_jsx","SortableTree","_ref","_ref2","_dndContext$active","_ref3","_dndContext$over","_dndContext$active$re","_dndContext$active$re2","_dndContext$active$re3","_dndContext$active$re4","items","indentationWidth","renderItem","isDraggable","withDepthMarkers","virtualizerRef","dndContext","activeId","active","id","overId","over","offsetLeft","rect","current","translated","left","initial","filteredItems","filter","_ref4","selected","activeIndex","findIndex","_ref5","rangeExtractor","range","extractedRange","length","push","getScrollElement","_containerRef$current","_containerRef$current2","containerRef","parentElement","estimateSize","virtualizer","count","overscan","gap","virtualizedItems","getVirtualItems","measureDroppableContainers","remeasureContainers","map","_ref6","index","projected","className","style","height","concat","getTotalSize","position","ref","children","_ref7","start","item","depth","value","top","measureElement","wrapperRef"],"sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport classNames from 'classnames';\nimport { useDndContext } from '@dnd-kit/core';\nimport {\n defaultRangeExtractor,\n type Range,\n useVirtualizer,\n type Virtualizer,\n} from '@tanstack/react-virtual';\nimport { getProjection } from './utilities';\nimport { SortableTreeItem } from './SortableTreeItem';\nimport { TreeItem, type TreeItemRenderFn } from './TreeItem';\nimport type { FlattenedItem } from './types';\n\ninterface Props<T> {\n items: readonly FlattenedItem<T>[];\n indentationWidth?: number;\n renderItem: TreeItemRenderFn<T>;\n isDraggable?: boolean;\n withDepthMarkers?: boolean;\n virtualizerRef?: React.Ref<Virtualizer<HTMLElement, Element>>;\n}\n\nexport default function SortableTree<T>({\n items,\n indentationWidth = 30,\n renderItem,\n isDraggable = true,\n withDepthMarkers = true,\n virtualizerRef,\n}: Props<T>): JSX.Element {\n const dndContext = useDndContext();\n const activeId = (dndContext.active?.id as string) ?? null;\n const overId = (dndContext.over?.id as string) ?? null;\n const offsetLeft = dndContext.active\n ? (dndContext.active.rect.current.translated?.left ?? 0) -\n (dndContext.active.rect.current.initial?.left ?? 0)\n : 0;\n\n const filteredItems = useMemo(() => {\n if (activeId != null) {\n return items.filter(({ id, selected }) => id === activeId || !selected);\n }\n\n return items;\n }, [activeId, items]);\n\n const activeIndex = useMemo(\n () => filteredItems.findIndex(({ id }) => id === activeId),\n [activeId, filteredItems]\n );\n\n // Add the active index to the range so it is always rendered\n const rangeExtractor = useCallback(\n (range: Range) => {\n const extractedRange = defaultRangeExtractor(range);\n if (\n activeIndex >= 0 &&\n (activeIndex < extractedRange[0] ||\n activeIndex > extractedRange[extractedRange.length - 1])\n ) {\n extractedRange.push(activeIndex);\n }\n return extractedRange;\n },\n [activeIndex]\n );\n\n const getScrollElement = useCallback(\n () => containerRef.current?.parentElement ?? null,\n []\n );\n\n const estimateSize = useCallback(() => 30, []);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const virtualizer = useVirtualizer({\n count: filteredItems.length,\n getScrollElement,\n estimateSize,\n rangeExtractor,\n overscan: 10,\n gap: 1, // We set a 1px bottom margin before we virtualized this list\n });\n\n // Expose the virtualizer via ref\n useImperativeHandle(virtualizerRef, () => virtualizer, [virtualizer]);\n\n const virtualizedItems = virtualizer.getVirtualItems();\n\n const { measureDroppableContainers } = useDndContext();\n\n // Without this, animations are funky when using the move/sort buttons\n // dnd-kit only remeasures on drag/drop by default\n useEffect(\n function remeasureContainers() {\n measureDroppableContainers(\n virtualizedItems.map(({ index }) => filteredItems[index].id)\n );\n },\n [filteredItems, measureDroppableContainers, virtualizedItems]\n );\n\n const projected =\n isDraggable && activeId != null && overId != null\n ? getProjection(\n filteredItems,\n activeId,\n overId,\n offsetLeft,\n indentationWidth\n )\n : null;\n\n return (\n <div\n className={classNames(\n 'tree-container',\n activeId != null && 'marching-ants'\n )}\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n position: 'relative',\n }}\n ref={containerRef}\n >\n {virtualizer.getVirtualItems().map(({ index, start }) => {\n const item = filteredItems[index];\n const { id, depth } = item;\n return isDraggable ? (\n <SortableTreeItem\n key={id}\n id={id}\n value={id}\n depth={id === activeId && projected ? projected.depth : depth}\n item={item}\n renderItem={renderItem}\n withDepthMarkers={withDepthMarkers}\n top={start}\n // This allows the group items to expand when editing the name and shift the list correctly\n measureElement={virtualizer.measureElement}\n />\n ) : (\n <TreeItem\n key={id}\n value={id}\n depth={depth}\n item={item}\n renderItem={renderItem}\n withDepthMarkers={withDepthMarkers}\n top={start}\n wrapperRef={virtualizer.measureElement}\n />\n );\n })}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { type DragStartEvent } from '@dnd-kit/core';
3
- import type { FlattenedItem, TreeItem as TreeItemType } from './types';
3
+ import type { FlattenedItem } from './types';
4
4
  import { type TreeItemRenderFn } from './TreeItem';
5
5
  type Props<T> = React.PropsWithChildren<{
6
- items: TreeItemType<T>[];
6
+ items: readonly FlattenedItem<T>[];
7
7
  indentationWidth?: number;
8
8
  onDragStart?: (id: string, event: DragStartEvent) => void;
9
9
  onDragEnd?: (from: FlattenedItem<T>, to: FlattenedItem<T>) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"SortableTreeDndContext.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAEf,OAAO,EAOL,KAAK,cAAc,EASpB,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,EACV,aAAa,EAEb,QAAQ,IAAI,YAAY,EACzB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAY,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA+E7D,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC;IACtC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACnE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,CAAC,EAAE,EAChD,KAAK,EACL,gBAAqB,EACrB,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,GACX,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAmKxB"}
1
+ {"version":3,"file":"SortableTreeDndContext.d.ts","sourceRoot":"","sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAEf,OAAO,EAOL,KAAK,cAAc,EASpB,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,SAAS,CAAC;AAG5D,OAAO,EAAY,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAuG7D,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC;IACtC,KAAK,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACnE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,CAAC,EAAE,EAChD,KAAK,EACL,gBAAqB,EACrB,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,GACX,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CA4IxB"}
@@ -8,7 +8,7 @@ import { createPortal } from 'react-dom';
8
8
  import { DndContext, closestCenter, KeyboardSensor, useSensor, useSensors, MeasuringStrategy, DragOverlay, defaultDropAnimation } from '@dnd-kit/core';
9
9
  import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';
10
10
  import { CSS } from '@dnd-kit/utilities';
11
- import { flattenTree, getChildCount, getProjection } from "./utilities.js";
11
+ import { getProjection } from "./utilities.js";
12
12
  import { sortableTreeKeyboardCoordinates } from "./keyboardCoordinates.js";
13
13
  import PointerSensorWithInteraction from "./PointerSensorWithInteraction.js";
14
14
  import { TreeItem } from "./TreeItem.js";
@@ -87,6 +87,35 @@ function adjustToCursor(args) {
87
87
  // but avoids a singleton state or needing hooks to maintain this.
88
88
  // The logic came from the dnd-kit example.
89
89
  adjustToCursor.offsetY = null;
90
+
91
+ // From https://github.com/clauderic/dnd-kit/pull/334
92
+ var fixCursorSnapOffset = args => {
93
+ // Bail out if keyboard activated
94
+ if (!args.pointerCoordinates) {
95
+ return closestCenter(args);
96
+ }
97
+ var {
98
+ x,
99
+ y
100
+ } = args.pointerCoordinates;
101
+ var {
102
+ width,
103
+ height
104
+ } = args.collisionRect;
105
+ var updated = _objectSpread(_objectSpread({}, args), {}, {
106
+ // The collision rectangle is broken when using adjustToCursor. Reset
107
+ // the collision rectangle based on pointer location and overlay size.
108
+ collisionRect: {
109
+ width,
110
+ height,
111
+ bottom: y + height / 2,
112
+ left: x - width / 2,
113
+ right: x + width / 2,
114
+ top: y - height / 2
115
+ }
116
+ });
117
+ return closestCenter(updated);
118
+ };
90
119
  export default function SortableTreeDndContext(_ref3) {
91
120
  var {
92
121
  items,
@@ -97,30 +126,15 @@ export default function SortableTreeDndContext(_ref3) {
97
126
  renderItem
98
127
  } = _ref3;
99
128
  var [activeId, setActiveId] = useState(null);
100
- var [overId, setOverId] = useState(null);
101
129
  var [offsetLeft, setOffsetLeft] = useState(0);
102
- var flattenedItems = useMemo(() => {
103
- var flattenedTree = flattenTree(items);
104
- if (activeId != null) {
105
- return flattenedTree.filter(_ref4 => {
106
- var {
107
- id,
108
- selected
109
- } = _ref4;
110
- return id === activeId || !selected;
111
- });
112
- }
113
- return flattenedTree;
114
- }, [activeId, items]);
115
- var activeItem = activeId != null ? flattenedItems.find(_ref5 => {
130
+ var activeItem = activeId != null ? items.find(_ref4 => {
116
131
  var {
117
132
  id
118
- } = _ref5;
133
+ } = _ref4;
119
134
  return id === activeId;
120
135
  }) : null;
121
- var projected = activeId != null && overId != null ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
122
136
  var sensorContext = useRef({
123
- items: flattenedItems,
137
+ items,
124
138
  offset: offsetLeft
125
139
  });
126
140
  var keyboardOptions = useMemo(() => ({
@@ -134,18 +148,18 @@ export default function SortableTreeDndContext(_ref3) {
134
148
  }
135
149
  }), [indentationWidth]);
136
150
  var sensors = useSensors(useSensor(PointerSensorWithInteraction, CONSTRAINT), useSensor(KeyboardSensor, keyboardOptions));
137
- var sortedIds = useMemo(() => flattenedItems.map(_ref6 => {
151
+ var sortedIds = useMemo(() => items.map(_ref5 => {
138
152
  var {
139
153
  id
140
- } = _ref6;
154
+ } = _ref5;
141
155
  return id;
142
- }), [flattenedItems]);
156
+ }), [items]);
143
157
  useEffect(() => {
144
158
  sensorContext.current = {
145
- items: flattenedItems,
159
+ items,
146
160
  offset: offsetLeft
147
161
  };
148
- }, [flattenedItems, offsetLeft]);
162
+ }, [items, offsetLeft]);
149
163
  var handleDragStart = useCallback(event => {
150
164
  var {
151
165
  active: {
@@ -153,50 +167,43 @@ export default function SortableTreeDndContext(_ref3) {
153
167
  }
154
168
  } = event;
155
169
  setActiveId(newActiveId);
156
- setOverId(newActiveId);
157
170
  onDragStart === null || onDragStart === void 0 || onDragStart(newActiveId, event);
158
171
  document.body.style.setProperty('cursor', 'grabbing');
159
172
  }, [onDragStart]);
160
- var handleDragMove = useCallback(_ref7 => {
173
+ var handleDragMove = useCallback(_ref6 => {
161
174
  var {
162
175
  delta
163
- } = _ref7;
176
+ } = _ref6;
164
177
  setOffsetLeft(delta.x);
165
178
  }, []);
166
- var handleDragOver = useCallback(_ref8 => {
167
- var _ref9;
168
- var {
169
- over
170
- } = _ref8;
171
- setOverId((_ref9 = over === null || over === void 0 ? void 0 : over.id) !== null && _ref9 !== void 0 ? _ref9 : null);
172
- }, []);
173
179
  var resetState = useCallback(() => {
174
- setOverId(null);
175
180
  setActiveId(null);
176
181
  setOffsetLeft(0);
177
182
  document.body.style.setProperty('cursor', '');
178
183
  }, []);
179
- var handleDragEnd = useCallback(_ref0 => {
184
+ var handleDragEnd = useCallback(_ref7 => {
185
+ var _active$rect$current$, _active$rect$current$2, _active$rect$current$3, _active$rect$current$4;
180
186
  var {
181
187
  active,
182
188
  over
183
- } = _ref0;
189
+ } = _ref7;
190
+ var projected = active.id != null && (over === null || over === void 0 ? void 0 : over.id) != null ? getProjection(items, active.id, over.id, ((_active$rect$current$ = (_active$rect$current$2 = active.rect.current.translated) === null || _active$rect$current$2 === void 0 ? void 0 : _active$rect$current$2.left) !== null && _active$rect$current$ !== void 0 ? _active$rect$current$ : 0) - ((_active$rect$current$3 = (_active$rect$current$4 = active.rect.current.initial) === null || _active$rect$current$4 === void 0 ? void 0 : _active$rect$current$4.left) !== null && _active$rect$current$3 !== void 0 ? _active$rect$current$3 : 0), indentationWidth) : null;
184
191
  if (projected && over) {
185
192
  var {
186
193
  depth,
187
194
  parentId
188
195
  } = projected;
189
- var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
190
- var overIndex = clonedItems.findIndex(_ref1 => {
196
+ var clonedItems = JSON.parse(JSON.stringify(items));
197
+ var overIndex = clonedItems.findIndex(_ref8 => {
191
198
  var {
192
199
  id
193
- } = _ref1;
200
+ } = _ref8;
194
201
  return id === over.id;
195
202
  });
196
- var activeIndex = clonedItems.findIndex(_ref10 => {
203
+ var activeIndex = clonedItems.findIndex(_ref9 => {
197
204
  var {
198
205
  id
199
- } = _ref10;
206
+ } = _ref9;
200
207
  return id === active.id;
201
208
  });
202
209
  var activeTreeItem = clonedItems[activeIndex];
@@ -209,17 +216,16 @@ export default function SortableTreeDndContext(_ref3) {
209
216
  }));
210
217
  }
211
218
  resetState();
212
- }, [items, onDragEnd, projected, resetState]);
219
+ }, [items, indentationWidth, onDragEnd, resetState]);
213
220
  var handleDragCancel = useCallback(() => {
214
221
  resetState();
215
222
  }, [resetState]);
216
223
  return /*#__PURE__*/_jsx(DndContext, {
217
224
  sensors: sensors,
218
- collisionDetection: closestCenter,
225
+ collisionDetection: fixCursorSnapOffset,
219
226
  measuring: MEASURING,
220
227
  onDragStart: handleDragStart,
221
228
  onDragMove: handleDragMove,
222
- onDragOver: handleDragOver,
223
229
  onDragEnd: handleDragEnd,
224
230
  onDragCancel: handleDragCancel,
225
231
  children: /*#__PURE__*/_jsxs(SortableContext, {
@@ -233,8 +239,7 @@ export default function SortableTreeDndContext(_ref3) {
233
239
  children: activeId != null && activeItem ? /*#__PURE__*/_jsx(TreeItem, {
234
240
  depth: activeItem.depth,
235
241
  clone: true,
236
- childCount: getChildCount(items, activeId) + 1,
237
- value: activeId.toString(),
242
+ value: activeId,
238
243
  renderItem: renderItem,
239
244
  item: activeItem
240
245
  }) : null