@deephaven/iris-grid 1.8.1-beta.8 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/IrisGrid.d.ts +19 -0
  2. package/dist/IrisGrid.d.ts.map +1 -1
  3. package/dist/IrisGrid.js +17 -9
  4. package/dist/IrisGrid.js.map +1 -1
  5. package/dist/IrisGridMetricCalculator.d.ts +34 -1
  6. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  7. package/dist/IrisGridMetricCalculator.js +136 -1
  8. package/dist/IrisGridMetricCalculator.js.map +1 -1
  9. package/dist/LazyIrisGrid.d.ts +1 -0
  10. package/dist/LazyIrisGrid.d.ts.map +1 -1
  11. package/dist/TreeRebalanceUtil.d.ts +50 -0
  12. package/dist/TreeRebalanceUtil.d.ts.map +1 -0
  13. package/dist/TreeRebalanceUtil.js +105 -0
  14. package/dist/TreeRebalanceUtil.js.map +1 -0
  15. package/dist/sidebar/visibility-ordering-builder/SearchItem.d.ts +12 -0
  16. package/dist/sidebar/visibility-ordering-builder/SearchItem.d.ts.map +1 -0
  17. package/dist/sidebar/visibility-ordering-builder/SearchItem.js +55 -0
  18. package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -0
  19. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css +408 -0
  20. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css.map +1 -0
  21. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.d.ts +14 -0
  22. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.d.ts.map +1 -0
  23. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +235 -0
  24. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -0
  25. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +43 -43
  26. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
  27. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +427 -466
  28. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  29. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts +7 -2
  30. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -1
  31. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +7 -4
  32. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  33. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts +7 -15
  34. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts.map +1 -1
  35. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +53 -137
  36. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  37. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.d.ts +14 -0
  38. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.d.ts.map +1 -0
  39. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +245 -0
  40. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -0
  41. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts +4 -3
  42. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts.map +1 -1
  43. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +2 -1
  44. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  45. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +45 -22
  46. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -1
  47. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts +13 -14
  48. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts.map +1 -1
  49. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +9 -7
  50. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  51. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts +1 -1
  52. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts.map +1 -1
  53. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +8 -7
  54. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
  55. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +4 -4
  56. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
  57. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +5 -1
  58. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  59. package/package.json +20 -19
  60. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts +0 -21
  61. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts.map +0 -1
  62. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +0 -149
  63. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityOrderingItem.js","names":["React","forwardRef","useCallback","useRef","classNames","FontAwesomeIcon","dhEye","dhEyeSlash","vsGripper","Button","Tooltip","VisibilityOrderingGroup","jsx","_jsx","jsxs","_jsxs","emptyOnClick","VisibilityOrderingItem","props","ref","value","clone","childCount","item","onVisibilityChange","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","icon","tooltip","onDelete","onColorChange","onNameChange","validateName"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingItem.tsx"],"sourcesContent":["import React, { forwardRef, 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 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 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 <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={handleVisibilityChange}\n icon={isVisible ? dhEye : dhEyeSlash}\n tooltip=\"Toggle visibility\"\n />\n <span className={classNames('column-name', group && 'column-group')}>\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\nexport default VisibilityOrderingItem;\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","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,20 +1,12 @@
1
- import React from 'react';
2
- import type { FlattenedItem, TreeItem } from './types';
1
+ import { type TreeItemRenderFn } from './TreeItem';
2
+ import type { TreeItem as TreeItemType } from './types';
3
3
  interface Props<T> {
4
- items: TreeItem<T>[];
4
+ items: TreeItemType<T>[];
5
5
  indentationWidth?: number;
6
- indicator?: boolean;
7
- onDragStart?: (id: string) => void;
8
- onDragEnd?: (from: FlattenedItem<T>, to: FlattenedItem<T>) => void;
9
- renderItem: (props: {
10
- clone: boolean;
11
- childCount?: number;
12
- value: string;
13
- item: FlattenedItem<T>;
14
- ref: React.Ref<HTMLDivElement>;
15
- handleProps?: Record<string, unknown>;
16
- }) => JSX.Element;
6
+ renderItem: TreeItemRenderFn<T>;
7
+ isDraggable?: boolean;
8
+ withDepthMarkers?: boolean;
17
9
  }
18
- export default function SortableTree<T>({ items, indicator, indentationWidth, onDragStart, onDragEnd, renderItem, }: Props<T>): JSX.Element;
10
+ export default function SortableTree<T>({ items, indentationWidth, renderItem, isDraggable, withDepthMarkers, }: Props<T>): JSX.Element;
19
11
  export {};
20
12
  //# 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":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAkBf,OAAO,KAAK,EAAE,aAAa,EAAiB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAiBtE,UAAU,KAAK,CAAC,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACnE,UAAU,EAAE,CAAC,KAAK,EAAE;QAClB,KAAK,EAAE,OAAO,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;QACvB,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACvC,KAAK,GAAG,CAAC,OAAO,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,CAAC,EAAE,EACtC,KAAK,EACL,SAAiB,EACjB,gBAAqB,EACrB,WAAW,EACX,SAAS,EACT,UAAU,GACX,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CA2IxB"}
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,160 +1,76 @@
1
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
- import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
- import { DndContext, closestCenter, KeyboardSensor, useSensor, useSensors, MeasuringStrategy } from '@dnd-kit/core';
8
- import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';
1
+ import { useEffect, useMemo, useRef } from 'react';
2
+ import classNames from 'classnames';
3
+ import { useDndContext } from '@dnd-kit/core';
9
4
  import { flattenTree, getProjection } from "./utilities.js";
10
- import { sortableTreeKeyboardCoordinates } from "./keyboardCoordinates.js";
11
- import PointerSensorWithInteraction from "./PointerSensorWithInteraction.js";
12
- import SortableTreeInner from "./SortableTreeInner.js";
5
+ import { SortableTreeItem } from "./SortableTreeItem.js";
6
+ import { TreeItem } from "./TreeItem.js";
13
7
  import { jsx as _jsx } from "react/jsx-runtime";
14
- var MEASURING = {
15
- droppable: {
16
- strategy: MeasuringStrategy.Always
17
- }
18
- };
19
- var CONSTRAINT = {
20
- activationConstraint: {
21
- distance: 5
22
- }
23
- };
24
8
  export default function SortableTree(_ref) {
9
+ var _ref2, _dndContext$active, _ref3, _dndContext$over, _dndContext$active$re, _dndContext$active$re2, _dndContext$active$re3, _dndContext$active$re4;
25
10
  var {
26
11
  items,
27
- indicator = false,
28
12
  indentationWidth = 30,
29
- onDragStart,
30
- onDragEnd,
31
- renderItem
13
+ renderItem,
14
+ isDraggable = true,
15
+ withDepthMarkers = true
32
16
  } = _ref;
33
- var [activeId, setActiveId] = useState(null);
34
- var [overId, setOverId] = useState(null);
35
- var [offsetLeft, setOffsetLeft] = useState(0);
17
+ var dndContext = useDndContext();
18
+ var activeId = (_ref2 = (_dndContext$active = dndContext.active) === null || _dndContext$active === void 0 ? void 0 : _dndContext$active.id) !== null && _ref2 !== void 0 ? _ref2 : null;
19
+ var overId = (_ref3 = (_dndContext$over = dndContext.over) === null || _dndContext$over === void 0 ? void 0 : _dndContext$over.id) !== null && _ref3 !== void 0 ? _ref3 : null;
20
+ 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;
36
21
  var flattenedItems = useMemo(() => {
37
22
  var flattenedTree = flattenTree(items);
38
23
  if (activeId != null) {
39
- return flattenedTree.filter(_ref2 => {
24
+ return flattenedTree.filter(_ref4 => {
40
25
  var {
41
26
  id,
42
27
  selected
43
- } = _ref2;
28
+ } = _ref4;
44
29
  return id === activeId || !selected;
45
30
  });
46
31
  }
47
32
  return flattenedTree;
48
33
  }, [activeId, items]);
49
- var projected = activeId != null && overId != null ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
50
- var sensorContext = useRef({
51
- items: flattenedItems,
52
- offset: offsetLeft
53
- });
54
- var keyboardOptions = useMemo(() => ({
55
- coordinateGetter: sortableTreeKeyboardCoordinates(sensorContext, indicator, indentationWidth)
56
- }), [indentationWidth, indicator]);
57
- var sensors = useSensors(useSensor(PointerSensorWithInteraction, CONSTRAINT), useSensor(KeyboardSensor, keyboardOptions));
58
- var sortedIds = useMemo(() => flattenedItems.map(_ref3 => {
59
- var {
60
- id
61
- } = _ref3;
62
- return id;
63
- }), [flattenedItems]);
64
- useEffect(() => {
65
- sensorContext.current = {
66
- items: flattenedItems,
67
- offset: offsetLeft
68
- };
69
- }, [flattenedItems, offsetLeft]);
70
- var handleDragStart = useCallback(_ref4 => {
71
- var {
72
- active: {
73
- id: newActiveId
74
- }
75
- } = _ref4;
76
- setActiveId(newActiveId);
77
- setOverId(newActiveId);
78
- onDragStart === null || onDragStart === void 0 || onDragStart(newActiveId);
79
- document.body.style.setProperty('cursor', 'grabbing');
80
- }, [onDragStart]);
81
- var handleDragMove = useCallback(_ref5 => {
82
- var {
83
- delta
84
- } = _ref5;
85
- setOffsetLeft(delta.x);
86
- }, []);
87
- var handleDragOver = useCallback(_ref6 => {
88
- var _ref7;
89
- var {
90
- over
91
- } = _ref6;
92
- setOverId((_ref7 = over === null || over === void 0 ? void 0 : over.id) !== null && _ref7 !== void 0 ? _ref7 : null);
93
- }, []);
94
- var resetState = useCallback(() => {
95
- setOverId(null);
96
- setActiveId(null);
97
- setOffsetLeft(0);
98
- document.body.style.setProperty('cursor', '');
99
- }, []);
100
- var handleDragEnd = useCallback(_ref8 => {
101
- var {
102
- active,
103
- over
104
- } = _ref8;
105
- resetState();
106
- if (projected && over) {
34
+ var context = useDndContext();
35
+ var contextRef = useRef(context);
36
+ useEffect(function updateContextRef() {
37
+ contextRef.current = context;
38
+ }, [context]);
39
+
40
+ // Without this, animations are funky when using the move/sort buttons
41
+ // 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
+ useEffect(function remeasureContainers() {
45
+ contextRef.current.measureDroppableContainers(items.map(_ref5 => {
107
46
  var {
108
- depth,
109
- parentId
110
- } = projected;
111
- var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
112
- var overIndex = clonedItems.findIndex(_ref9 => {
113
- var {
114
- id
115
- } = _ref9;
116
- return id === over.id;
117
- });
118
- var activeIndex = clonedItems.findIndex(_ref0 => {
119
- var {
120
- id
121
- } = _ref0;
122
- return id === active.id;
123
- });
124
- var activeTreeItem = clonedItems[activeIndex];
125
- clonedItems[activeIndex] = _objectSpread(_objectSpread({}, activeTreeItem), {}, {
126
- depth,
127
- parentId
128
- });
129
- onDragEnd === null || onDragEnd === void 0 || onDragEnd(activeTreeItem, _objectSpread(_objectSpread({}, clonedItems[overIndex]), {}, {
130
- parentId: projected.parentId
131
- }));
132
- }
133
- }, [items, onDragEnd, projected, resetState]);
134
- var handleDragCancel = useCallback(() => {
135
- resetState();
136
- }, [resetState]);
137
- return /*#__PURE__*/_jsx(DndContext, {
138
- sensors: sensors,
139
- collisionDetection: closestCenter,
140
- measuring: MEASURING,
141
- onDragStart: handleDragStart,
142
- onDragMove: handleDragMove,
143
- onDragOver: handleDragOver,
144
- onDragEnd: handleDragEnd,
145
- onDragCancel: handleDragCancel,
146
- children: /*#__PURE__*/_jsx(SortableContext, {
147
- items: sortedIds,
148
- strategy: verticalListSortingStrategy,
149
- children: /*#__PURE__*/_jsx(SortableTreeInner, {
150
- items: flattenedItems,
47
+ id
48
+ } = _ref5;
49
+ return id;
50
+ }));
51
+ }, [items]);
52
+ var projected = isDraggable && activeId != null && overId != null ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
53
+ return /*#__PURE__*/_jsx("div", {
54
+ className: classNames('tree-container', activeId != null && 'marching-ants'),
55
+ children: flattenedItems.map(item => {
56
+ var {
57
+ id,
58
+ depth
59
+ } = item;
60
+ return isDraggable ? /*#__PURE__*/_jsx(SortableTreeItem, {
61
+ id: id,
62
+ value: id,
63
+ depth: id === activeId && projected ? projected.depth : depth,
64
+ item: item,
65
+ renderItem: renderItem,
66
+ withDepthMarkers: withDepthMarkers
67
+ }, id) : /*#__PURE__*/_jsx(TreeItem, {
68
+ value: id,
69
+ depth: depth,
70
+ item: item,
151
71
  renderItem: renderItem,
152
- indicator: indicator,
153
- indentationWidth: indentationWidth,
154
- activeId: activeId,
155
- overId: overId,
156
- offsetLeft: offsetLeft
157
- })
72
+ withDepthMarkers: withDepthMarkers
73
+ }, id);
158
74
  })
159
75
  });
160
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SortableTree.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","DndContext","closestCenter","KeyboardSensor","useSensor","useSensors","MeasuringStrategy","SortableContext","verticalListSortingStrategy","flattenTree","getProjection","sortableTreeKeyboardCoordinates","PointerSensorWithInteraction","SortableTreeInner","jsx","_jsx","MEASURING","droppable","strategy","Always","CONSTRAINT","activationConstraint","distance","SortableTree","_ref","items","indicator","indentationWidth","onDragStart","onDragEnd","renderItem","activeId","setActiveId","overId","setOverId","offsetLeft","setOffsetLeft","flattenedItems","flattenedTree","filter","_ref2","id","selected","projected","sensorContext","offset","keyboardOptions","coordinateGetter","sensors","sortedIds","map","_ref3","current","handleDragStart","_ref4","active","newActiveId","document","body","style","setProperty","handleDragMove","_ref5","delta","x","handleDragOver","_ref6","_ref7","over","resetState","handleDragEnd","_ref8","depth","parentId","clonedItems","JSON","parse","stringify","overIndex","findIndex","_ref9","activeIndex","_ref0","activeTreeItem","_objectSpread","handleDragCancel","collisionDetection","measuring","onDragMove","onDragOver","onDragCancel","children"],"sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n useSensor,\n useSensors,\n type DragStartEvent,\n type DragMoveEvent,\n type DragEndEvent,\n type DragOverEvent,\n MeasuringStrategy,\n} from '@dnd-kit/core';\nimport {\n SortableContext,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { flattenTree, getProjection } from './utilities';\nimport type { FlattenedItem, SensorContext, TreeItem } from './types';\nimport { sortableTreeKeyboardCoordinates } from './keyboardCoordinates';\nimport PointerSensorWithInteraction from './PointerSensorWithInteraction';\nimport SortableTreeInner from './SortableTreeInner';\n\nconst MEASURING = {\n droppable: {\n strategy: MeasuringStrategy.Always,\n },\n};\n\nconst CONSTRAINT = {\n activationConstraint: {\n distance: 5,\n },\n};\n\ninterface Props<T> {\n items: TreeItem<T>[];\n indentationWidth?: number;\n indicator?: boolean;\n onDragStart?: (id: string) => void;\n onDragEnd?: (from: FlattenedItem<T>, to: FlattenedItem<T>) => void;\n renderItem: (props: {\n clone: boolean;\n childCount?: number;\n value: string;\n item: FlattenedItem<T>;\n ref: React.Ref<HTMLDivElement>;\n handleProps?: Record<string, unknown>;\n }) => JSX.Element;\n}\n\nexport default function SortableTree<T>({\n items,\n indicator = false,\n indentationWidth = 30,\n onDragStart,\n onDragEnd,\n renderItem,\n}: Props<T>): JSX.Element {\n const [activeId, setActiveId] = useState<string | null>(null);\n const [overId, setOverId] = useState<string | null>(null);\n const [offsetLeft, setOffsetLeft] = useState(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 projected =\n activeId != null && overId != null\n ? getProjection(\n flattenedItems,\n activeId,\n overId,\n offsetLeft,\n indentationWidth\n )\n : null;\n const sensorContext: SensorContext = useRef({\n items: flattenedItems,\n offset: offsetLeft,\n });\n const keyboardOptions = useMemo(\n () => ({\n coordinateGetter: sortableTreeKeyboardCoordinates(\n sensorContext,\n indicator,\n indentationWidth\n ),\n }),\n [indentationWidth, indicator]\n );\n\n const sensors = useSensors(\n useSensor(PointerSensorWithInteraction, CONSTRAINT),\n useSensor(KeyboardSensor, keyboardOptions)\n );\n\n const sortedIds = useMemo(\n () => flattenedItems.map(({ id }) => id),\n [flattenedItems]\n );\n\n useEffect(() => {\n sensorContext.current = {\n items: flattenedItems,\n offset: offsetLeft,\n };\n }, [flattenedItems, offsetLeft]);\n\n const handleDragStart = useCallback(\n ({ active: { id: newActiveId } }: DragStartEvent) => {\n setActiveId(newActiveId as string);\n setOverId(newActiveId as string);\n onDragStart?.(newActiveId as string);\n\n document.body.style.setProperty('cursor', 'grabbing');\n },\n [onDragStart]\n );\n\n const handleDragMove = useCallback(({ delta }: DragMoveEvent) => {\n setOffsetLeft(delta.x);\n }, []);\n\n const handleDragOver = useCallback(({ over }: DragOverEvent) => {\n setOverId((over?.id as string) ?? null);\n }, []);\n\n const resetState = useCallback(() => {\n setOverId(null);\n setActiveId(null);\n setOffsetLeft(0);\n\n document.body.style.setProperty('cursor', '');\n }, []);\n\n const handleDragEnd = useCallback(\n ({ active, over }: DragEndEvent) => {\n resetState();\n\n if (projected && over) {\n const { depth, parentId } = projected;\n\n const clonedItems: FlattenedItem<T>[] = JSON.parse(\n JSON.stringify(flattenTree(items))\n );\n const overIndex = clonedItems.findIndex(({ id }) => id === over.id);\n const activeIndex = clonedItems.findIndex(({ id }) => id === active.id);\n const activeTreeItem = clonedItems[activeIndex];\n\n clonedItems[activeIndex] = { ...activeTreeItem, depth, parentId };\n\n onDragEnd?.(activeTreeItem, {\n ...clonedItems[overIndex],\n parentId: projected.parentId,\n });\n }\n },\n [items, onDragEnd, projected, resetState]\n );\n\n const handleDragCancel = useCallback(() => {\n resetState();\n }, [resetState]);\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n measuring={MEASURING}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <SortableContext items={sortedIds} strategy={verticalListSortingStrategy}>\n <SortableTreeInner\n items={flattenedItems}\n renderItem={renderItem}\n indicator={indicator}\n indentationWidth={indentationWidth}\n activeId={activeId}\n overId={overId}\n offsetLeft={offsetLeft}\n />\n </SortableContext>\n </DndContext>\n );\n}\n"],"mappings":"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","ignoreList":[]}
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":[]}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { type DragStartEvent } from '@dnd-kit/core';
3
+ import type { FlattenedItem, TreeItem as TreeItemType } from './types';
4
+ import { type TreeItemRenderFn } from './TreeItem';
5
+ type Props<T> = React.PropsWithChildren<{
6
+ items: TreeItemType<T>[];
7
+ indentationWidth?: number;
8
+ onDragStart?: (id: string, event: DragStartEvent) => void;
9
+ onDragEnd?: (from: FlattenedItem<T>, to: FlattenedItem<T>) => void;
10
+ renderItem: TreeItemRenderFn<T>;
11
+ }>;
12
+ export default function SortableTreeDndContext<T>({ items, indentationWidth, onDragStart, onDragEnd, children, renderItem, }: Props<T>): JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=SortableTreeDndContext.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,245 @@
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
+ import { createPortal } from 'react-dom';
8
+ import { DndContext, closestCenter, KeyboardSensor, useSensor, useSensors, MeasuringStrategy, DragOverlay, defaultDropAnimation } from '@dnd-kit/core';
9
+ import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';
10
+ import { CSS } from '@dnd-kit/utilities';
11
+ import { flattenTree, getChildCount, getProjection } from "./utilities.js";
12
+ import { sortableTreeKeyboardCoordinates } from "./keyboardCoordinates.js";
13
+ import PointerSensorWithInteraction from "./PointerSensorWithInteraction.js";
14
+ import { TreeItem } from "./TreeItem.js";
15
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
+ var MEASURING = {
17
+ droppable: {
18
+ strategy: MeasuringStrategy.Always
19
+ }
20
+ };
21
+ var CONSTRAINT = {
22
+ activationConstraint: {
23
+ distance: 5
24
+ }
25
+ };
26
+
27
+ // Disabling pointer events allows us to use scroll wheel while dragging
28
+ var DRAG_OVERLAY_STYLE = {
29
+ pointerEvents: 'none'
30
+ };
31
+ var dropAnimationConfig = {
32
+ keyframes(_ref) {
33
+ var {
34
+ transform
35
+ } = _ref;
36
+ return [{
37
+ opacity: 1,
38
+ transform: CSS.Transform.toString(transform.initial)
39
+ }, {
40
+ opacity: 0,
41
+ transform: CSS.Transform.toString(transform.final)
42
+ }];
43
+ },
44
+ easing: 'ease-out',
45
+ sideEffects(_ref2) {
46
+ var {
47
+ active
48
+ } = _ref2;
49
+ active.node.animate([{
50
+ opacity: 0
51
+ }, {
52
+ opacity: 1
53
+ }], {
54
+ duration: defaultDropAnimation.duration,
55
+ easing: defaultDropAnimation.easing
56
+ });
57
+ }
58
+ };
59
+
60
+ /**
61
+ * This adjusts the transform to move to the cursor if it gets shifted due to multi-select.
62
+ * With multi-select, the selected items (except dragged) are removed on drag.
63
+ * This can cause the overlay item to disconnect from the cursor in some cases.
64
+ * E.g. select first 3 items, start dragging from 3rd item.
65
+ * Without this modifier, the drag overlay will be shifted 60px up from the cursor after the items are removed.
66
+ *
67
+ * This assumes all items are the same height as the dragged item
68
+ * @param args Modifier args from dnd-kit
69
+ * @returns Transform so that the dragged item stays on the cursor
70
+ */
71
+ function adjustToCursor(args) {
72
+ var _adjustToCursor$offse;
73
+ if (adjustToCursor.offsetY == null && args.activeNodeRect && args.activatorEvent instanceof PointerEvent) {
74
+ adjustToCursor.offsetY = Math.floor((args.activatorEvent.clientY - args.activeNodeRect.top) / args.activeNodeRect.height) * args.activeNodeRect.height;
75
+ }
76
+ if (!args.activeNodeRect) {
77
+ adjustToCursor.offsetY = null;
78
+ }
79
+ return _objectSpread(_objectSpread({}, args.transform), {}, {
80
+ y: args.transform.y + ((_adjustToCursor$offse = adjustToCursor.offsetY) !== null && _adjustToCursor$offse !== void 0 ? _adjustToCursor$offse : 0)
81
+ });
82
+ }
83
+
84
+ // Used to track the offset for adjustToCursor
85
+ // Once drag starts, set this. Once it ends, null this
86
+ // Kind of hacky to store it as a property on the function,
87
+ // but avoids a singleton state or needing hooks to maintain this.
88
+ // The logic came from the dnd-kit example.
89
+ adjustToCursor.offsetY = null;
90
+ export default function SortableTreeDndContext(_ref3) {
91
+ var {
92
+ items,
93
+ indentationWidth = 30,
94
+ onDragStart,
95
+ onDragEnd,
96
+ children,
97
+ renderItem
98
+ } = _ref3;
99
+ var [activeId, setActiveId] = useState(null);
100
+ var [overId, setOverId] = useState(null);
101
+ 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 => {
116
+ var {
117
+ id
118
+ } = _ref5;
119
+ return id === activeId;
120
+ }) : null;
121
+ var projected = activeId != null && overId != null ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
122
+ var sensorContext = useRef({
123
+ items: flattenedItems,
124
+ offset: offsetLeft
125
+ });
126
+ var keyboardOptions = useMemo(() => ({
127
+ coordinateGetter: sortableTreeKeyboardCoordinates(sensorContext, indentationWidth),
128
+ keyboardCodes: {
129
+ // Default is space and enter for start/end,
130
+ // but enter is used to select items from the search list
131
+ start: ['Space'],
132
+ cancel: ['Escape'],
133
+ end: ['Space']
134
+ }
135
+ }), [indentationWidth]);
136
+ var sensors = useSensors(useSensor(PointerSensorWithInteraction, CONSTRAINT), useSensor(KeyboardSensor, keyboardOptions));
137
+ var sortedIds = useMemo(() => flattenedItems.map(_ref6 => {
138
+ var {
139
+ id
140
+ } = _ref6;
141
+ return id;
142
+ }), [flattenedItems]);
143
+ useEffect(() => {
144
+ sensorContext.current = {
145
+ items: flattenedItems,
146
+ offset: offsetLeft
147
+ };
148
+ }, [flattenedItems, offsetLeft]);
149
+ var handleDragStart = useCallback(event => {
150
+ var {
151
+ active: {
152
+ id: newActiveId
153
+ }
154
+ } = event;
155
+ setActiveId(newActiveId);
156
+ setOverId(newActiveId);
157
+ onDragStart === null || onDragStart === void 0 || onDragStart(newActiveId, event);
158
+ document.body.style.setProperty('cursor', 'grabbing');
159
+ }, [onDragStart]);
160
+ var handleDragMove = useCallback(_ref7 => {
161
+ var {
162
+ delta
163
+ } = _ref7;
164
+ setOffsetLeft(delta.x);
165
+ }, []);
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
+ var resetState = useCallback(() => {
174
+ setOverId(null);
175
+ setActiveId(null);
176
+ setOffsetLeft(0);
177
+ document.body.style.setProperty('cursor', '');
178
+ }, []);
179
+ var handleDragEnd = useCallback(_ref0 => {
180
+ var {
181
+ active,
182
+ over
183
+ } = _ref0;
184
+ if (projected && over) {
185
+ var {
186
+ depth,
187
+ parentId
188
+ } = projected;
189
+ var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
190
+ var overIndex = clonedItems.findIndex(_ref1 => {
191
+ var {
192
+ id
193
+ } = _ref1;
194
+ return id === over.id;
195
+ });
196
+ var activeIndex = clonedItems.findIndex(_ref10 => {
197
+ var {
198
+ id
199
+ } = _ref10;
200
+ return id === active.id;
201
+ });
202
+ var activeTreeItem = clonedItems[activeIndex];
203
+ clonedItems[activeIndex] = _objectSpread(_objectSpread({}, activeTreeItem), {}, {
204
+ depth,
205
+ parentId
206
+ });
207
+ onDragEnd === null || onDragEnd === void 0 || onDragEnd(activeTreeItem, _objectSpread(_objectSpread({}, clonedItems[overIndex]), {}, {
208
+ parentId: projected.parentId
209
+ }));
210
+ }
211
+ resetState();
212
+ }, [items, onDragEnd, projected, resetState]);
213
+ var handleDragCancel = useCallback(() => {
214
+ resetState();
215
+ }, [resetState]);
216
+ return /*#__PURE__*/_jsx(DndContext, {
217
+ sensors: sensors,
218
+ collisionDetection: closestCenter,
219
+ measuring: MEASURING,
220
+ onDragStart: handleDragStart,
221
+ onDragMove: handleDragMove,
222
+ onDragOver: handleDragOver,
223
+ onDragEnd: handleDragEnd,
224
+ onDragCancel: handleDragCancel,
225
+ children: /*#__PURE__*/_jsxs(SortableContext, {
226
+ items: sortedIds,
227
+ strategy: verticalListSortingStrategy,
228
+ children: [children, /*#__PURE__*/createPortal(/*#__PURE__*/_jsx(DragOverlay, {
229
+ dropAnimation: dropAnimationConfig,
230
+ modifiers: [adjustToCursor],
231
+ className: "visibility-ordering-list",
232
+ style: DRAG_OVERLAY_STYLE,
233
+ children: activeId != null && activeItem ? /*#__PURE__*/_jsx(TreeItem, {
234
+ depth: activeItem.depth,
235
+ clone: true,
236
+ childCount: getChildCount(items, activeId) + 1,
237
+ value: activeId.toString(),
238
+ renderItem: renderItem,
239
+ item: activeItem
240
+ }) : null
241
+ }), document.body)]
242
+ })
243
+ });
244
+ }
245
+ //# sourceMappingURL=SortableTreeDndContext.js.map