@deephaven/iris-grid 0.43.0 → 0.44.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 (282) hide show
  1. package/dist/AdvancedFilterCreator.css +106 -0
  2. package/dist/AdvancedFilterCreator.css.map +1 -0
  3. package/dist/AdvancedFilterCreator.js +541 -0
  4. package/dist/AdvancedFilterCreator.js.map +1 -0
  5. package/dist/AdvancedFilterCreatorFilterItem.css +9 -0
  6. package/dist/AdvancedFilterCreatorFilterItem.css.map +1 -0
  7. package/dist/AdvancedFilterCreatorFilterItem.js +184 -0
  8. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -0
  9. package/dist/AdvancedFilterCreatorSelectValue.css +50 -0
  10. package/dist/AdvancedFilterCreatorSelectValue.css.map +1 -0
  11. package/dist/AdvancedFilterCreatorSelectValue.js +301 -0
  12. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -0
  13. package/dist/AdvancedFilterCreatorSelectValueList.js +272 -0
  14. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -0
  15. package/dist/ColumnHeaderGroup.js +61 -0
  16. package/dist/ColumnHeaderGroup.js.map +1 -0
  17. package/dist/ColumnStatistics.css +76 -0
  18. package/dist/ColumnStatistics.css.map +1 -0
  19. package/dist/ColumnStatistics.js +202 -0
  20. package/dist/ColumnStatistics.js.map +1 -0
  21. package/dist/CommonTypes.js +2 -0
  22. package/dist/CommonTypes.js.map +1 -0
  23. package/dist/CrossColumnSearch.css +35 -0
  24. package/dist/CrossColumnSearch.css.map +1 -0
  25. package/dist/CrossColumnSearch.js +199 -0
  26. package/dist/CrossColumnSearch.js.map +1 -0
  27. package/dist/FilterInputField.css +56 -0
  28. package/dist/FilterInputField.css.map +1 -0
  29. package/dist/FilterInputField.js +232 -0
  30. package/dist/FilterInputField.js.map +1 -0
  31. package/dist/GotoRow.css +45 -0
  32. package/dist/GotoRow.css.map +1 -0
  33. package/dist/GotoRow.js +298 -0
  34. package/dist/GotoRow.js.map +1 -0
  35. package/dist/IrisGrid.css +359 -0
  36. package/dist/IrisGrid.css.map +1 -0
  37. package/dist/IrisGrid.js +3651 -0
  38. package/dist/IrisGrid.js.map +1 -0
  39. package/dist/IrisGridBottomBar.css +85 -0
  40. package/dist/IrisGridBottomBar.css.map +1 -0
  41. package/dist/IrisGridBottomBar.js +36 -0
  42. package/dist/IrisGridBottomBar.js.map +1 -0
  43. package/dist/IrisGridCellOverflowModal.css +17 -0
  44. package/dist/IrisGridCellOverflowModal.css.map +1 -0
  45. package/dist/IrisGridCellOverflowModal.js +157 -0
  46. package/dist/IrisGridCellOverflowModal.js.map +1 -0
  47. package/dist/IrisGridCellRendererUtils.js +20 -0
  48. package/dist/IrisGridCellRendererUtils.js.map +1 -0
  49. package/dist/IrisGridCopyHandler.css +64 -0
  50. package/dist/IrisGridCopyHandler.css.map +1 -0
  51. package/dist/IrisGridCopyHandler.js +331 -0
  52. package/dist/IrisGridCopyHandler.js.map +1 -0
  53. package/dist/IrisGridDataBarCellRenderer.js +10 -0
  54. package/dist/IrisGridDataBarCellRenderer.js.map +1 -0
  55. package/dist/IrisGridIcons.js +25 -0
  56. package/dist/IrisGridIcons.js.map +1 -0
  57. package/dist/IrisGridMetricCalculator.js +33 -0
  58. package/dist/IrisGridMetricCalculator.js.map +1 -0
  59. package/dist/IrisGridModel.js +263 -0
  60. package/dist/IrisGridModel.js.map +1 -0
  61. package/dist/IrisGridModelFactory.js +27 -0
  62. package/dist/IrisGridModelFactory.js.map +1 -0
  63. package/dist/IrisGridModelUpdater.js +96 -0
  64. package/dist/IrisGridModelUpdater.js.map +1 -0
  65. package/dist/IrisGridPartitionSelector.css +48 -0
  66. package/dist/IrisGridPartitionSelector.css.map +1 -0
  67. package/dist/IrisGridPartitionSelector.js +198 -0
  68. package/dist/IrisGridPartitionSelector.js.map +1 -0
  69. package/dist/IrisGridProxyModel.js +530 -0
  70. package/dist/IrisGridProxyModel.js.map +1 -0
  71. package/dist/IrisGridRenderer.js +779 -0
  72. package/dist/IrisGridRenderer.js.map +1 -0
  73. package/dist/IrisGridShortcuts.js +59 -0
  74. package/dist/IrisGridShortcuts.js.map +1 -0
  75. package/dist/IrisGridTableModel.js +273 -0
  76. package/dist/IrisGridTableModel.js.map +1 -0
  77. package/dist/IrisGridTableModelTemplate.js +1589 -0
  78. package/dist/IrisGridTableModelTemplate.js.map +1 -0
  79. package/dist/IrisGridTestUtils.js +121 -0
  80. package/dist/IrisGridTestUtils.js.map +1 -0
  81. package/dist/IrisGridTextCellRenderer.js +139 -0
  82. package/dist/IrisGridTextCellRenderer.js.map +1 -0
  83. package/dist/IrisGridTheme.js +96 -0
  84. package/dist/IrisGridTheme.js.map +1 -0
  85. package/dist/IrisGridTheme.module.css +69 -0
  86. package/dist/IrisGridTheme.module.css.map +1 -0
  87. package/dist/IrisGridTreeTableModel.js +145 -0
  88. package/dist/IrisGridTreeTableModel.js.map +1 -0
  89. package/dist/IrisGridUtils.js +1279 -0
  90. package/dist/IrisGridUtils.js.map +1 -0
  91. package/dist/MissingKeyError.js +15 -0
  92. package/dist/MissingKeyError.js.map +1 -0
  93. package/dist/PartitionSelectorSearch.css +22 -0
  94. package/dist/PartitionSelectorSearch.css.map +1 -0
  95. package/dist/PartitionSelectorSearch.js +317 -0
  96. package/dist/PartitionSelectorSearch.js.map +1 -0
  97. package/dist/PendingDataBottomBar.css +13 -0
  98. package/dist/PendingDataBottomBar.css.map +1 -0
  99. package/dist/PendingDataBottomBar.js +98 -0
  100. package/dist/PendingDataBottomBar.js.map +1 -0
  101. package/dist/TableViewportUpdater.js +156 -0
  102. package/dist/TableViewportUpdater.js.map +1 -0
  103. package/dist/ToastBottomBar.js +42 -0
  104. package/dist/ToastBottomBar.js.map +1 -0
  105. package/dist/TreeTableViewportUpdater.js +96 -0
  106. package/dist/TreeTableViewportUpdater.js.map +1 -0
  107. package/dist/declaration.d.js +2 -0
  108. package/dist/declaration.d.js.map +1 -0
  109. package/dist/format-context-menus/CustomFormatAction.css +25 -0
  110. package/dist/format-context-menus/CustomFormatAction.css.map +1 -0
  111. package/dist/format-context-menus/CustomFormatAction.js +132 -0
  112. package/dist/format-context-menus/CustomFormatAction.js.map +1 -0
  113. package/dist/format-context-menus/DateTimeFormatContextMenu.js +53 -0
  114. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -0
  115. package/dist/format-context-menus/DecimalFormatContextMenu.js +59 -0
  116. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -0
  117. package/dist/format-context-menus/FormatContextMenuUtils.js +63 -0
  118. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -0
  119. package/dist/format-context-menus/IntegerFormatContextMenu.js +43 -0
  120. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -0
  121. package/dist/format-context-menus/index.js +4 -0
  122. package/dist/format-context-menus/index.js.map +1 -0
  123. package/dist/index.js +24 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/key-handlers/ClearFilterKeyHandler.js +21 -0
  126. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -0
  127. package/dist/key-handlers/CopyKeyHandler.js +31 -0
  128. package/dist/key-handlers/CopyKeyHandler.js.map +1 -0
  129. package/dist/key-handlers/ReverseKeyHandler.js +32 -0
  130. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -0
  131. package/dist/key-handlers/index.js +4 -0
  132. package/dist/key-handlers/index.js.map +1 -0
  133. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +175 -0
  134. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -0
  135. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +139 -0
  136. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -0
  137. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +83 -0
  138. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -0
  139. package/dist/mousehandlers/IrisGridContextMenuHandler.css +19 -0
  140. package/dist/mousehandlers/IrisGridContextMenuHandler.css.map +1 -0
  141. package/dist/mousehandlers/IrisGridContextMenuHandler.js +1220 -0
  142. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -0
  143. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +28 -0
  144. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -0
  145. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +80 -0
  146. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -0
  147. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +126 -0
  148. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -0
  149. package/dist/mousehandlers/IrisGridSortMouseHandler.js +46 -0
  150. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -0
  151. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +151 -0
  152. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -0
  153. package/dist/mousehandlers/PendingMouseHandler.js +39 -0
  154. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -0
  155. package/dist/mousehandlers/index.js +11 -0
  156. package/dist/mousehandlers/index.js.map +1 -0
  157. package/dist/sidebar/AdvancedSettings.js +6 -0
  158. package/dist/sidebar/AdvancedSettings.js.map +1 -0
  159. package/dist/sidebar/AdvancedSettingsMenu.js +29 -0
  160. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -0
  161. package/dist/sidebar/AdvancedSettingsType.js +7 -0
  162. package/dist/sidebar/AdvancedSettingsType.js.map +1 -0
  163. package/dist/sidebar/ChartBuilder.css +56 -0
  164. package/dist/sidebar/ChartBuilder.css.map +1 -0
  165. package/dist/sidebar/ChartBuilder.js +443 -0
  166. package/dist/sidebar/ChartBuilder.js.map +1 -0
  167. package/dist/sidebar/CustomColumnBuilder.css +58 -0
  168. package/dist/sidebar/CustomColumnBuilder.css.map +1 -0
  169. package/dist/sidebar/CustomColumnBuilder.js +384 -0
  170. package/dist/sidebar/CustomColumnBuilder.js.map +1 -0
  171. package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
  172. package/dist/sidebar/CustomColumnInput.js +91 -0
  173. package/dist/sidebar/CustomColumnInput.js.map +1 -0
  174. package/dist/sidebar/InputEditor.css +35 -0
  175. package/dist/sidebar/InputEditor.css.map +1 -0
  176. package/dist/sidebar/InputEditor.d.ts +4 -2
  177. package/dist/sidebar/InputEditor.d.ts.map +1 -1
  178. package/dist/sidebar/InputEditor.js +180 -0
  179. package/dist/sidebar/InputEditor.js.map +1 -0
  180. package/dist/sidebar/OptionType.js +19 -0
  181. package/dist/sidebar/OptionType.js.map +1 -0
  182. package/dist/sidebar/RollupRows.css +120 -0
  183. package/dist/sidebar/RollupRows.css.map +1 -0
  184. package/dist/sidebar/RollupRows.js +519 -0
  185. package/dist/sidebar/RollupRows.js.map +1 -0
  186. package/dist/sidebar/SelectDistinctBuilder.css +41 -0
  187. package/dist/sidebar/SelectDistinctBuilder.css.map +1 -0
  188. package/dist/sidebar/SelectDistinctBuilder.js +155 -0
  189. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -0
  190. package/dist/sidebar/TableCsvExporter.css +32 -0
  191. package/dist/sidebar/TableCsvExporter.css.map +1 -0
  192. package/dist/sidebar/TableCsvExporter.js +399 -0
  193. package/dist/sidebar/TableCsvExporter.js.map +1 -0
  194. package/dist/sidebar/TableSaver.js +487 -0
  195. package/dist/sidebar/TableSaver.js.map +1 -0
  196. package/dist/sidebar/aggregations/AggregationEdit.css +61 -0
  197. package/dist/sidebar/aggregations/AggregationEdit.css.map +1 -0
  198. package/dist/sidebar/aggregations/AggregationEdit.js +155 -0
  199. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -0
  200. package/dist/sidebar/aggregations/AggregationOperation.js +19 -0
  201. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -0
  202. package/dist/sidebar/aggregations/AggregationUtils.js +59 -0
  203. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -0
  204. package/dist/sidebar/aggregations/Aggregations.css +43 -0
  205. package/dist/sidebar/aggregations/Aggregations.css.map +1 -0
  206. package/dist/sidebar/aggregations/Aggregations.js +178 -0
  207. package/dist/sidebar/aggregations/Aggregations.js.map +1 -0
  208. package/dist/sidebar/aggregations/index.js +2 -0
  209. package/dist/sidebar/aggregations/index.js.map +1 -0
  210. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +123 -0
  211. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -0
  212. package/dist/sidebar/conditional-formatting/ConditionEditor.js +243 -0
  213. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -0
  214. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.css +22 -0
  215. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.css.map +1 -0
  216. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +109 -0
  217. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -0
  218. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +18 -0
  219. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -0
  220. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css +57 -0
  221. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css.map +1 -0
  222. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +150 -0
  223. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -0
  224. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +635 -0
  225. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -0
  226. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +122 -0
  227. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -0
  228. package/dist/sidebar/conditional-formatting/StyleEditor.css +55 -0
  229. package/dist/sidebar/conditional-formatting/StyleEditor.css.map +1 -0
  230. package/dist/sidebar/conditional-formatting/StyleEditor.js +150 -0
  231. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -0
  232. package/dist/sidebar/icons/BarIcon.js +24 -0
  233. package/dist/sidebar/icons/BarIcon.js.map +1 -0
  234. package/dist/sidebar/icons/FormatColumnWhereIcon.js +42 -0
  235. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -0
  236. package/dist/sidebar/icons/FormatRowWhereIcon.js +36 -0
  237. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -0
  238. package/dist/sidebar/icons/HistogramIcon.js +24 -0
  239. package/dist/sidebar/icons/HistogramIcon.js.map +1 -0
  240. package/dist/sidebar/icons/LineIcon.js +27 -0
  241. package/dist/sidebar/icons/LineIcon.js.map +1 -0
  242. package/dist/sidebar/icons/PieIcon.js +24 -0
  243. package/dist/sidebar/icons/PieIcon.js.map +1 -0
  244. package/dist/sidebar/icons/ScatterIcon.js +74 -0
  245. package/dist/sidebar/icons/ScatterIcon.js.map +1 -0
  246. package/dist/sidebar/icons/index.js +8 -0
  247. package/dist/sidebar/icons/index.js.map +1 -0
  248. package/dist/sidebar/index.d.ts +1 -0
  249. package/dist/sidebar/index.d.ts.map +1 -1
  250. package/dist/sidebar/index.js +19 -0
  251. package/dist/sidebar/index.js.map +1 -0
  252. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css +68 -0
  253. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +1 -0
  254. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +964 -0
  255. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -0
  256. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +132 -0
  257. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -0
  258. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css +29 -0
  259. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css.map +1 -0
  260. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +188 -0
  261. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -0
  262. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +81 -0
  263. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -0
  264. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +30 -0
  265. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -0
  266. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +158 -0
  267. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -0
  268. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +146 -0
  269. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -0
  270. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +59 -0
  271. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -0
  272. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +139 -0
  273. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -0
  274. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +44 -0
  275. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -0
  276. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +129 -0
  277. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -0
  278. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js +4 -0
  279. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -0
  280. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +261 -0
  281. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -0
  282. package/package.json +15 -15
@@ -0,0 +1,81 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ /* eslint-disable react/prop-types */
3
+ import React, { forwardRef, useCallback, useRef } from 'react';
4
+ import classNames from 'classnames';
5
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
6
+ import { dhEye, dhEyeSlash, vsGripper } from '@deephaven/icons';
7
+ import { Button, Tooltip } from '@deephaven/components';
8
+ import VisibilityOrderingGroup from "./VisibilityOrderingGroup.js";
9
+ function emptyOnClick() {
10
+ // no-op
11
+ }
12
+ var VisibilityOrderingItem = /*#__PURE__*/forwardRef(function VisibilityOrderingItem(props, ref) {
13
+ var {
14
+ value,
15
+ clone,
16
+ childCount,
17
+ item,
18
+ onVisibilityChange,
19
+ onClick,
20
+ onGroupDelete,
21
+ onGroupColorChange,
22
+ onGroupNameChange,
23
+ validateGroupName,
24
+ handleProps
25
+ } = props;
26
+ var {
27
+ group,
28
+ modelIndex,
29
+ isVisible
30
+ } = item.data;
31
+ var buttonRef = useRef(null);
32
+ var handleVisibilityChange = useCallback(e => {
33
+ if (e.buttons === 1) {
34
+ var _buttonRef$current;
35
+ onVisibilityChange([modelIndex].flat(), !isVisible);
36
+ (_buttonRef$current = buttonRef.current) === null || _buttonRef$current === void 0 ? void 0 : _buttonRef$current.focus();
37
+ }
38
+ }, [onVisibilityChange, modelIndex, isVisible]);
39
+ var handleClick = useCallback(event => {
40
+ onClick(value, event);
41
+ }, [onClick, value]);
42
+ return (
43
+ /*#__PURE__*/
44
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
45
+ React.createElement("div", _extends({
46
+ ref: ref,
47
+ className: classNames('tree-item', {
48
+ isSelected: item.selected,
49
+ 'two-dragged': childCount === 2,
50
+ 'multiple-dragged': childCount > 2
51
+ }),
52
+ onClick: handleClick
53
+ // eslint-disable-next-line react/jsx-props-no-spreading
54
+ }, handleProps), /*#__PURE__*/React.createElement(Button, {
55
+ ref: buttonRef,
56
+ kind: "ghost",
57
+ className: "px-1"
58
+ // We PropType validate onClick for Button
59
+ ,
60
+ onClick: emptyOnClick,
61
+ onMouseDown: handleVisibilityChange,
62
+ onMouseEnter: handleVisibilityChange,
63
+ icon: isVisible ? dhEye : dhEyeSlash,
64
+ tooltip: "Toggle visibility"
65
+ }), /*#__PURE__*/React.createElement("span", {
66
+ className: classNames('column-name', group && 'column-group')
67
+ }, group && !clone ? /*#__PURE__*/React.createElement(VisibilityOrderingGroup, {
68
+ group: group,
69
+ onDelete: onGroupDelete,
70
+ onColorChange: onGroupColorChange,
71
+ onNameChange: onGroupNameChange,
72
+ validateName: validateGroupName
73
+ }) : value), /*#__PURE__*/React.createElement("div", null, clone && childCount > 1 && /*#__PURE__*/React.createElement("span", {
74
+ className: "item-count"
75
+ }, childCount), /*#__PURE__*/React.createElement(Tooltip, null, "Drag to re-order"), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
76
+ icon: vsGripper
77
+ })))
78
+ );
79
+ });
80
+ export default VisibilityOrderingItem;
81
+ //# sourceMappingURL=VisibilityOrderingItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisibilityOrderingItem.js","names":["React","forwardRef","useCallback","useRef","classNames","FontAwesomeIcon","dhEye","dhEyeSlash","vsGripper","Button","Tooltip","VisibilityOrderingGroup","emptyOnClick","VisibilityOrderingItem","props","ref","value","clone","childCount","item","onVisibilityChange","onClick","onGroupDelete","onGroupColorChange","onGroupNameChange","validateGroupName","handleProps","group","modelIndex","isVisible","data","buttonRef","handleVisibilityChange","e","buttons","flat","current","focus","handleClick","event","isSelected","selected"],"sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingItem.tsx"],"sourcesContent":["/* eslint-disable react/prop-types */\nimport 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 { 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): void;\n onGroupDelete(group: ColumnHeaderGroup): void;\n onGroupColorChange(group: ColumnHeaderGroup, color: string | undefined): void;\n onGroupNameChange(group: ColumnHeaderGroup, name: string): void;\n validateGroupName(name: string): string;\n handleProps: Record<string, unknown>;\n};\n\nfunction emptyOnClick() {\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) => {\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 // 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":";AAAA;AACA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,WAAW,EAAEC,MAAM,QAAQ,OAAO;AAC9D,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,KAAK,EAAEC,UAAU,EAAEC,SAAS,QAAQ,kBAAkB;AAC/D,SAASC,MAAM,EAAEC,OAAO,QAAQ,uBAAuB;AAAC,OACjDC,uBAAuB;AAkB9B,SAASC,YAAY,GAAG;EACtB;AAAA;AAGF,IAAMC,sBAAsB,gBAAGZ,UAAU,CAGvC,SAASY,sBAAsB,CAACC,KAAK,EAAEC,GAAG,EAAE;EAC5C,IAAM;IACJC,KAAK;IACLC,KAAK;IACLC,UAAU;IACVC,IAAI;IACJC,kBAAkB;IAClBC,OAAO;IACPC,aAAa;IACbC,kBAAkB;IAClBC,iBAAiB;IACjBC,iBAAiB;IACjBC;EACF,CAAC,GAAGZ,KAAK;EACT,IAAM;IAAEa,KAAK;IAAEC,UAAU;IAAEC;EAAU,CAAC,GAAGV,IAAI,CAACW,IAAI;EAClD,IAAMC,SAAS,GAAG5B,MAAM,CAAoB,IAAI,CAAC;EAEjD,IAAM6B,sBAAsB,GAAG9B,WAAW,CACvC+B,CAAmB,IAAK;IACvB,IAAIA,CAAC,CAACC,OAAO,KAAK,CAAC,EAAE;MAAA;MACnBd,kBAAkB,CAAC,CAACQ,UAAU,CAAC,CAACO,IAAI,EAAE,EAAE,CAACN,SAAS,CAAC;MACnD,sBAAAE,SAAS,CAACK,OAAO,uDAAjB,mBAAmBC,KAAK,EAAE;IAC5B;EACF,CAAC,EACD,CAACjB,kBAAkB,EAAEQ,UAAU,EAAEC,SAAS,CAAC,CAC5C;EAED,IAAMS,WAAW,GAAGpC,WAAW,CAC5BqC,KAAuB,IAAK;IAC3BlB,OAAO,CAACL,KAAK,EAAEuB,KAAK,CAAC;EACvB,CAAC,EACD,CAAClB,OAAO,EAAEL,KAAK,CAAC,CACjB;EAED;IAAA;IACE;IACA;MACE,GAAG,EAAED,GAAI;MACT,SAAS,EAAEX,UAAU,CAAC,WAAW,EAAE;QACjCoC,UAAU,EAAErB,IAAI,CAACsB,QAAQ;QACzB,aAAa,EAAEvB,UAAU,KAAK,CAAC;QAC/B,kBAAkB,EAAEA,UAAU,GAAG;MACnC,CAAC,CAAE;MACH,OAAO,EAAEoB;MACT;IAAA,GACIZ,WAAW,gBAEf,oBAAC,MAAM;MACL,GAAG,EAAEK,SAAU;MACf,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC;MACV;MAAA;MACA,OAAO,EAAEnB,YAAa;MACtB,WAAW,EAAEoB,sBAAuB;MACpC,YAAY,EAAEA,sBAAuB;MACrC,IAAI,EAAEH,SAAS,GAAGvB,KAAK,GAAGC,UAAW;MACrC,OAAO,EAAC;IAAmB,EAC3B,eACF;MAAM,SAAS,EAAEH,UAAU,CAAC,aAAa,EAAEuB,KAAK,IAAI,cAAc;IAAE,GAEjEA,KAAK,IAAI,CAACV,KAAK,gBACd,oBAAC,uBAAuB;MACtB,KAAK,EAAEU,KAAM;MACb,QAAQ,EAAEL,aAAc;MACxB,aAAa,EAAEC,kBAAmB;MAClC,YAAY,EAAEC,iBAAkB;MAChC,YAAY,EAAEC;IAAkB,EAChC,GAEFT,KACD,CACI,eACP,iCACGC,KAAK,IAAIC,UAAU,GAAG,CAAC,iBACtB;MAAM,SAAS,EAAC;IAAY,GAAEA,UAAU,CACzC,eACD,oBAAC,OAAO,QAAC,kBAAgB,CAAU,eACnC,oBAAC,eAAe;MAAC,IAAI,EAAEV;IAAU,EAAG,CAChC;EACF;AAEV,CAAC,CAAC;AAEF,eAAeK,sBAAsB"}
@@ -0,0 +1,30 @@
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
+ import { PointerSensor } from '@dnd-kit/core';
5
+
6
+ /**
7
+ * An extended "PointerSensor" that prevent some
8
+ * interactive html element(button, input, textarea, select, option...) from dragging
9
+ */
10
+ export default class PointerSensorWithInteraction extends PointerSensor {}
11
+ _defineProperty(PointerSensorWithInteraction, "activators", [{
12
+ eventName: 'onPointerDown',
13
+ handler: _ref => {
14
+ var {
15
+ nativeEvent: event
16
+ } = _ref;
17
+ if (!event.isPrimary || event.button !== 0 || isInteractiveElement(event.target)) {
18
+ return false;
19
+ }
20
+ return true;
21
+ }
22
+ }]);
23
+ var INTERACTIVE_ELEMENTS = ['button', 'input', 'textarea', 'select', 'option'];
24
+ function isInteractiveElement(element) {
25
+ if ((element === null || element === void 0 ? void 0 : element.tagName) != null && INTERACTIVE_ELEMENTS.includes(element.tagName.toLowerCase())) {
26
+ return true;
27
+ }
28
+ return false;
29
+ }
30
+ //# sourceMappingURL=PointerSensorWithInteraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointerSensorWithInteraction.js","names":["PointerSensor","PointerSensorWithInteraction","eventName","handler","nativeEvent","event","isPrimary","button","isInteractiveElement","target","INTERACTIVE_ELEMENTS","element","tagName","includes","toLowerCase"],"sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.ts"],"sourcesContent":["import type { PointerEvent } from 'react';\nimport { PointerSensor } from '@dnd-kit/core';\n\n/**\n * An extended \"PointerSensor\" that prevent some\n * interactive html element(button, input, textarea, select, option...) from dragging\n */\nexport default class PointerSensorWithInteraction extends PointerSensor {\n static activators = [\n {\n eventName: 'onPointerDown' as const,\n handler: ({ nativeEvent: event }: PointerEvent) => {\n if (\n !event.isPrimary ||\n event.button !== 0 ||\n isInteractiveElement(event.target as Element)\n ) {\n return false;\n }\n\n return true;\n },\n },\n ];\n}\n\nconst INTERACTIVE_ELEMENTS = [\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'option',\n];\n\nfunction isInteractiveElement(element: Element | null) {\n if (\n element?.tagName != null &&\n INTERACTIVE_ELEMENTS.includes(element.tagName.toLowerCase())\n ) {\n return true;\n }\n\n return false;\n}\n"],"mappings":";;;AACA,SAASA,aAAa,QAAQ,eAAe;;AAE7C;AACA;AACA;AACA;AACA,eAAe,MAAMC,4BAA4B,SAASD,aAAa,CAAC;AAiBvE,gBAjBoBC,4BAA4B,gBAC3B,CAClB;EACEC,SAAS,EAAE,eAAwB;EACnCC,OAAO,EAAE,QAA0C;IAAA,IAAzC;MAAEC,WAAW,EAAEC;IAAoB,CAAC;IAC5C,IACE,CAACA,KAAK,CAACC,SAAS,IAChBD,KAAK,CAACE,MAAM,KAAK,CAAC,IAClBC,oBAAoB,CAACH,KAAK,CAACI,MAAM,CAAY,EAC7C;MACA,OAAO,KAAK;IACd;IAEA,OAAO,IAAI;EACb;AACF,CAAC,CACF;AAGH,IAAMC,oBAAoB,GAAG,CAC3B,QAAQ,EACR,OAAO,EACP,UAAU,EACV,QAAQ,EACR,QAAQ,CACT;AAED,SAASF,oBAAoB,CAACG,OAAuB,EAAE;EACrD,IACE,CAAAA,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,OAAO,KAAI,IAAI,IACxBF,oBAAoB,CAACG,QAAQ,CAACF,OAAO,CAACC,OAAO,CAACE,WAAW,EAAE,CAAC,EAC5D;IACA,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd"}
@@ -0,0 +1,158 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
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';
9
+ import { flattenTree, getProjection } from "./utilities.js";
10
+ import { sortableTreeKeyboardCoordinates } from "./keyboardCoordinates.js";
11
+ import PointerSensorWithInteraction from "./PointerSensorWithInteraction.js";
12
+ import SortableTreeInner from "./SortableTreeInner.js";
13
+ var MEASURING = {
14
+ droppable: {
15
+ strategy: MeasuringStrategy.Always
16
+ }
17
+ };
18
+ var CONSTRAINT = {
19
+ activationConstraint: {
20
+ distance: 5
21
+ }
22
+ };
23
+ export default function SortableTree(_ref) {
24
+ var {
25
+ items,
26
+ indicator = false,
27
+ indentationWidth = 30,
28
+ onDragStart,
29
+ onDragEnd,
30
+ renderItem
31
+ } = _ref;
32
+ var [activeId, setActiveId] = useState(null);
33
+ var [overId, setOverId] = useState(null);
34
+ var [offsetLeft, setOffsetLeft] = useState(0);
35
+ var flattenedItems = useMemo(() => {
36
+ var flattenedTree = flattenTree(items);
37
+ if (activeId != null) {
38
+ return flattenedTree.filter(_ref2 => {
39
+ var {
40
+ id,
41
+ selected
42
+ } = _ref2;
43
+ return id === activeId || !selected;
44
+ });
45
+ }
46
+ return flattenedTree;
47
+ }, [activeId, items]);
48
+ var projected = activeId != null && overId != null ? getProjection(flattenedItems, activeId, overId, offsetLeft, indentationWidth) : null;
49
+ var sensorContext = useRef({
50
+ items: flattenedItems,
51
+ offset: offsetLeft
52
+ });
53
+ var keyboardOptions = useMemo(() => ({
54
+ coordinateGetter: sortableTreeKeyboardCoordinates(sensorContext, indicator, indentationWidth)
55
+ }), [indentationWidth, indicator]);
56
+ var sensors = useSensors(useSensor(PointerSensorWithInteraction, CONSTRAINT), useSensor(KeyboardSensor, keyboardOptions));
57
+ var sortedIds = useMemo(() => flattenedItems.map(_ref3 => {
58
+ var {
59
+ id
60
+ } = _ref3;
61
+ return id;
62
+ }), [flattenedItems]);
63
+ useEffect(() => {
64
+ sensorContext.current = {
65
+ items: flattenedItems,
66
+ offset: offsetLeft
67
+ };
68
+ }, [flattenedItems, offsetLeft]);
69
+ var handleDragStart = useCallback(_ref4 => {
70
+ var {
71
+ active: {
72
+ id: newActiveId
73
+ }
74
+ } = _ref4;
75
+ setActiveId(newActiveId);
76
+ setOverId(newActiveId);
77
+ onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart(newActiveId);
78
+ document.body.style.setProperty('cursor', 'grabbing');
79
+ }, [onDragStart]);
80
+ var handleDragMove = useCallback(_ref5 => {
81
+ var {
82
+ delta
83
+ } = _ref5;
84
+ setOffsetLeft(delta.x);
85
+ }, []);
86
+ var handleDragOver = useCallback(_ref6 => {
87
+ var _ref7;
88
+ var {
89
+ over
90
+ } = _ref6;
91
+ setOverId((_ref7 = over === null || over === void 0 ? void 0 : over.id) !== null && _ref7 !== void 0 ? _ref7 : null);
92
+ }, []);
93
+ var resetState = useCallback(() => {
94
+ setOverId(null);
95
+ setActiveId(null);
96
+ setOffsetLeft(0);
97
+ document.body.style.setProperty('cursor', '');
98
+ }, []);
99
+ var handleDragEnd = useCallback(_ref8 => {
100
+ var {
101
+ active,
102
+ over
103
+ } = _ref8;
104
+ resetState();
105
+ if (projected && over) {
106
+ var {
107
+ depth,
108
+ parentId
109
+ } = projected;
110
+ var clonedItems = JSON.parse(JSON.stringify(flattenTree(items)));
111
+ var overIndex = clonedItems.findIndex(_ref9 => {
112
+ var {
113
+ id
114
+ } = _ref9;
115
+ return id === over.id;
116
+ });
117
+ var activeIndex = clonedItems.findIndex(_ref10 => {
118
+ var {
119
+ id
120
+ } = _ref10;
121
+ return id === active.id;
122
+ });
123
+ var activeTreeItem = clonedItems[activeIndex];
124
+ clonedItems[activeIndex] = _objectSpread(_objectSpread({}, activeTreeItem), {}, {
125
+ depth,
126
+ parentId
127
+ });
128
+ onDragEnd === null || onDragEnd === void 0 ? void 0 : onDragEnd(activeTreeItem, _objectSpread(_objectSpread({}, clonedItems[overIndex]), {}, {
129
+ parentId: projected.parentId
130
+ }));
131
+ }
132
+ }, [items, onDragEnd, projected, resetState]);
133
+ var handleDragCancel = useCallback(() => {
134
+ resetState();
135
+ }, [resetState]);
136
+ return /*#__PURE__*/React.createElement(DndContext, {
137
+ sensors: sensors,
138
+ collisionDetection: closestCenter,
139
+ measuring: MEASURING,
140
+ onDragStart: handleDragStart,
141
+ onDragMove: handleDragMove,
142
+ onDragOver: handleDragOver,
143
+ onDragEnd: handleDragEnd,
144
+ onDragCancel: handleDragCancel
145
+ }, /*#__PURE__*/React.createElement(SortableContext, {
146
+ items: sortedIds,
147
+ strategy: verticalListSortingStrategy
148
+ }, /*#__PURE__*/React.createElement(SortableTreeInner, {
149
+ items: flattenedItems,
150
+ renderItem: renderItem,
151
+ indicator: indicator,
152
+ indentationWidth: indentationWidth,
153
+ activeId: activeId,
154
+ overId: overId,
155
+ offsetLeft: offsetLeft
156
+ })));
157
+ }
158
+ //# sourceMappingURL=SortableTree.js.map
@@ -0,0 +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","MEASURING","droppable","strategy","Always","CONSTRAINT","activationConstraint","distance","SortableTree","items","indicator","indentationWidth","onDragStart","onDragEnd","renderItem","activeId","setActiveId","overId","setOverId","offsetLeft","setOffsetLeft","flattenedItems","flattenedTree","filter","id","selected","projected","sensorContext","offset","keyboardOptions","coordinateGetter","sensors","sortedIds","map","current","handleDragStart","active","newActiveId","document","body","style","setProperty","handleDragMove","delta","x","handleDragOver","over","resetState","handleDragEnd","depth","parentId","clonedItems","JSON","parse","stringify","overIndex","findIndex","activeIndex","activeTreeItem","handleDragCancel"],"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 DragStartEvent,\n DragMoveEvent,\n DragEndEvent,\n 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 }): 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(() => 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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"}
@@ -0,0 +1,146 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
+ import React, { useEffect, useRef } from 'react';
7
+ import { createPortal } from 'react-dom';
8
+ import classNames from 'classnames';
9
+ import { DragOverlay, defaultDropAnimation, useDndContext } from '@dnd-kit/core';
10
+ import { CSS } from '@dnd-kit/utilities';
11
+ import { getProjection, getChildCount } from "./utilities.js";
12
+ import { SortableTreeItem } from "./SortableTreeItem.js";
13
+ var dropAnimationConfig = {
14
+ keyframes(_ref) {
15
+ var {
16
+ transform
17
+ } = _ref;
18
+ return [{
19
+ opacity: 1,
20
+ transform: CSS.Transform.toString(transform.initial)
21
+ }, {
22
+ opacity: 0,
23
+ transform: CSS.Transform.toString(_objectSpread(_objectSpread({}, transform.final), {}, {
24
+ x: transform.final.x + 5,
25
+ y: transform.final.y + 5
26
+ }))
27
+ }];
28
+ },
29
+ easing: 'ease-out',
30
+ sideEffects(_ref2) {
31
+ var {
32
+ active
33
+ } = _ref2;
34
+ active.node.animate([{
35
+ opacity: 0
36
+ }, {
37
+ opacity: 1
38
+ }], {
39
+ duration: defaultDropAnimation.duration,
40
+ easing: defaultDropAnimation.easing
41
+ });
42
+ }
43
+ };
44
+
45
+ // Used to track the offset for adjustToCursor
46
+ // Once drag starts, set this. Once it ends, null this
47
+ var offsetY = null;
48
+
49
+ /**
50
+ * This adjusts the transform to move to the cursor if it gets shifted due to multi-select.
51
+ * With multi-select, the selected items (except dragged) are removed on drag.
52
+ * This can cause the overlay item to disconnect from the cursor in some cases.
53
+ * E.g. select first 3 items, start dragging from 3rd item.
54
+ * Without this modifier, the drag overlay will be shifted 60px up from the cursor after the items are removed.
55
+ *
56
+ * This assumes all items are the same height as the dragged item
57
+ * @param args Modifier args from dnd-kit
58
+ * @returns Transform so that the dragged item stays on the cursor
59
+ */
60
+ function adjustToCursor(args) {
61
+ var _offsetY;
62
+ if (offsetY == null && args.activeNodeRect && args.activatorEvent instanceof PointerEvent) {
63
+ offsetY = Math.floor((args.activatorEvent.clientY - args.activeNodeRect.top) / args.activeNodeRect.height) * args.activeNodeRect.height;
64
+ }
65
+ if (!args.activeNodeRect) {
66
+ offsetY = null;
67
+ }
68
+ return _objectSpread(_objectSpread({}, args.transform), {}, {
69
+ y: args.transform.y + ((_offsetY = offsetY) !== null && _offsetY !== void 0 ? _offsetY : 0)
70
+ });
71
+ }
72
+ export default function SortableTreeInner(_ref3) {
73
+ var {
74
+ items,
75
+ renderItem,
76
+ indentationWidth = 30,
77
+ indicator = false,
78
+ activeId,
79
+ overId,
80
+ offsetLeft
81
+ } = _ref3;
82
+ var context = useDndContext();
83
+ var contextRef = useRef(context);
84
+ useEffect(function updateContextRef() {
85
+ contextRef.current = context;
86
+ }, [context]);
87
+
88
+ // Without this, animations are funky when using the move/sort buttons
89
+ // dnd-kit only remeasures on drag/drop by default
90
+ // The context object changes while dragging (items don't)
91
+ // Using the context ref allows this to trigger properly on only items changes
92
+ useEffect(function remeasureContainers() {
93
+ contextRef.current.measureDroppableContainers(items.map(_ref4 => {
94
+ var {
95
+ id
96
+ } = _ref4;
97
+ return id;
98
+ }));
99
+ }, [items]);
100
+ var projected = activeId != null && overId != null ? getProjection(items, activeId, overId, offsetLeft, indentationWidth) : null;
101
+ var sensorContext = useRef({
102
+ items,
103
+ offset: offsetLeft
104
+ });
105
+ var activeItem = activeId != null ? items.find(_ref5 => {
106
+ var {
107
+ id
108
+ } = _ref5;
109
+ return id === activeId;
110
+ }) : null;
111
+ useEffect(() => {
112
+ sensorContext.current = {
113
+ items,
114
+ offset: offsetLeft
115
+ };
116
+ }, [items, offsetLeft]);
117
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
118
+ className: classNames('tree-container', activeId != null && 'marching-ants')
119
+ }, items.map(item => {
120
+ var {
121
+ id,
122
+ depth
123
+ } = item;
124
+ return /*#__PURE__*/React.createElement(SortableTreeItem, {
125
+ key: id,
126
+ id: id,
127
+ value: id,
128
+ depth: id === activeId && projected ? projected.depth : depth,
129
+ item: item,
130
+ renderItem: renderItem
131
+ });
132
+ })), /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(DragOverlay, {
133
+ dropAnimation: dropAnimationConfig,
134
+ modifiers: [adjustToCursor],
135
+ className: "visibility-ordering-list"
136
+ }, activeId != null && activeItem ? /*#__PURE__*/React.createElement(SortableTreeItem, {
137
+ id: activeId,
138
+ depth: activeItem.depth,
139
+ clone: true,
140
+ childCount: getChildCount(items, activeId) + 1,
141
+ value: activeId.toString(),
142
+ renderItem: renderItem,
143
+ item: activeItem
144
+ }) : null), document.body));
145
+ }
146
+ //# sourceMappingURL=SortableTreeInner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SortableTreeInner.js","names":["React","useEffect","useRef","createPortal","classNames","DragOverlay","defaultDropAnimation","useDndContext","CSS","getProjection","getChildCount","SortableTreeItem","dropAnimationConfig","keyframes","transform","opacity","Transform","toString","initial","final","x","y","easing","sideEffects","active","node","animate","duration","offsetY","adjustToCursor","args","activeNodeRect","activatorEvent","PointerEvent","Math","floor","clientY","top","height","SortableTreeInner","items","renderItem","indentationWidth","indicator","activeId","overId","offsetLeft","context","contextRef","updateContextRef","current","remeasureContainers","measureDroppableContainers","map","id","projected","sensorContext","offset","activeItem","find","item","depth","document","body"],"sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport classNames from 'classnames';\nimport {\n DragOverlay,\n DropAnimation,\n Modifier,\n defaultDropAnimation,\n useDndContext,\n} from '@dnd-kit/core';\nimport { CSS } from '@dnd-kit/utilities';\nimport { getProjection, getChildCount } from './utilities';\nimport type { FlattenedItem, SensorContext } from './types';\nimport { SortableTreeItem } from './SortableTreeItem';\n\nconst dropAnimationConfig: DropAnimation = {\n keyframes({ transform }) {\n return [\n { opacity: 1, transform: CSS.Transform.toString(transform.initial) },\n {\n opacity: 0,\n transform: CSS.Transform.toString({\n ...transform.final,\n x: transform.final.x + 5,\n y: transform.final.y + 5,\n }),\n },\n ];\n },\n easing: 'ease-out',\n sideEffects({ active }) {\n active.node.animate([{ opacity: 0 }, { opacity: 1 }], {\n duration: defaultDropAnimation.duration,\n easing: defaultDropAnimation.easing,\n });\n },\n};\n\n// Used to track the offset for adjustToCursor\n// Once drag starts, set this. Once it ends, null this\nlet offsetY: number | null = null;\n\n/**\n * This adjusts the transform to move to the cursor if it gets shifted due to multi-select.\n * With multi-select, the selected items (except dragged) are removed on drag.\n * This can cause the overlay item to disconnect from the cursor in some cases.\n * E.g. select first 3 items, start dragging from 3rd item.\n * Without this modifier, the drag overlay will be shifted 60px up from the cursor after the items are removed.\n *\n * This assumes all items are the same height as the dragged item\n * @param args Modifier args from dnd-kit\n * @returns Transform so that the dragged item stays on the cursor\n */\nfunction adjustToCursor(args: Parameters<Modifier>[0]) {\n if (\n offsetY == null &&\n args.activeNodeRect &&\n args.activatorEvent instanceof PointerEvent\n ) {\n offsetY =\n Math.floor(\n (args.activatorEvent.clientY - args.activeNodeRect.top) /\n args.activeNodeRect.height\n ) * args.activeNodeRect.height;\n }\n\n if (!args.activeNodeRect) {\n offsetY = null;\n }\n\n return { ...args.transform, y: args.transform.y + (offsetY ?? 0) };\n}\n\ninterface Props<T> {\n items: FlattenedItem<T>[];\n indentationWidth?: number;\n indicator?: boolean;\n renderItem(props: {\n clone: boolean;\n childCount?: number;\n value: string;\n item: FlattenedItem<T>;\n }): JSX.Element;\n activeId: string | null;\n overId: string | null;\n offsetLeft: number;\n}\n\nexport default function SortableTreeInner<T>({\n items,\n renderItem,\n indentationWidth = 30,\n indicator = false,\n activeId,\n overId,\n offsetLeft,\n}: Props<T>): JSX.Element {\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 activeId != null && overId != null\n ? getProjection(items, activeId, overId, offsetLeft, indentationWidth)\n : null;\n const sensorContext: SensorContext = useRef({\n items,\n offset: offsetLeft,\n });\n\n const activeItem =\n activeId != null ? items.find(({ id }) => id === activeId) : null;\n\n useEffect(() => {\n sensorContext.current = {\n items,\n offset: offsetLeft,\n };\n }, [items, offsetLeft]);\n\n return (\n <>\n <div\n className={classNames(\n 'tree-container',\n activeId != null && 'marching-ants'\n )}\n >\n {items.map(item => {\n const { id, depth } = item;\n return (\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 />\n );\n })}\n </div>\n {createPortal(\n <DragOverlay\n dropAnimation={dropAnimationConfig}\n modifiers={[adjustToCursor]}\n className=\"visibility-ordering-list\"\n >\n {activeId != null && activeItem ? (\n <SortableTreeItem\n id={activeId}\n depth={activeItem.depth}\n clone\n childCount={getChildCount(items, activeId) + 1}\n value={activeId.toString()}\n renderItem={renderItem}\n item={activeItem}\n />\n ) : null}\n </DragOverlay>,\n document.body\n )}\n </>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ var _excluded = ["id", "depth"];
2
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
7
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
8
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
9
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
10
+ /* eslint-disable import/prefer-default-export */
11
+ import React, { useMemo } from 'react';
12
+ import { useSortable } from '@dnd-kit/sortable';
13
+ import { CSS } from '@dnd-kit/utilities';
14
+ import { TreeItem } from "./TreeItem.js";
15
+ var animateLayoutChanges = _ref => {
16
+ var {
17
+ isSorting,
18
+ wasDragging
19
+ } = _ref;
20
+ return !(isSorting || wasDragging);
21
+ };
22
+ export function SortableTreeItem(_ref2) {
23
+ var {
24
+ id,
25
+ depth
26
+ } = _ref2,
27
+ props = _objectWithoutProperties(_ref2, _excluded);
28
+ var {
29
+ attributes,
30
+ isDragging,
31
+ isSorting,
32
+ listeners,
33
+ setDraggableNodeRef,
34
+ setDroppableNodeRef,
35
+ transform,
36
+ transition
37
+ } = useSortable({
38
+ id,
39
+ animateLayoutChanges
40
+ });
41
+ var transformString = CSS.Translate.toString(transform);
42
+ var style = useMemo(() => ({
43
+ transform: transformString,
44
+ transition
45
+ }), [transformString, transition]);
46
+ var handleProps = useMemo(() => _objectSpread(_objectSpread(_objectSpread({}, attributes), listeners), {}, {
47
+ style
48
+ }), [attributes, listeners, style]);
49
+ return /*#__PURE__*/React.createElement(TreeItem, _extends({
50
+ dragRef: setDraggableNodeRef,
51
+ wrapperRef: setDroppableNodeRef,
52
+ depth: depth,
53
+ ghost: isDragging,
54
+ disableInteraction: isSorting,
55
+ handleProps: handleProps
56
+ // eslint-disable-next-line react/jsx-props-no-spreading
57
+ }, props));
58
+ }
59
+ //# sourceMappingURL=SortableTreeItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SortableTreeItem.js","names":["React","useMemo","useSortable","CSS","TreeItem","animateLayoutChanges","isSorting","wasDragging","SortableTreeItem","id","depth","props","attributes","isDragging","listeners","setDraggableNodeRef","setDroppableNodeRef","transform","transition","transformString","Translate","toString","style","handleProps"],"sources":["../../../../src/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.tsx"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nimport React, { CSSProperties, useMemo } from 'react';\nimport { AnimateLayoutChanges, useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { TreeItem, Props as TreeItemProps } from './TreeItem';\n\nexport interface Props<T> extends Omit<TreeItemProps<T>, 'style'> {\n id: string;\n}\n\nconst animateLayoutChanges: AnimateLayoutChanges = ({\n isSorting,\n wasDragging,\n}) => !(isSorting || wasDragging);\n\nexport function SortableTreeItem<T>({\n id,\n depth,\n ...props\n}: Props<T>): JSX.Element {\n const {\n attributes,\n isDragging,\n isSorting,\n listeners,\n setDraggableNodeRef,\n setDroppableNodeRef,\n transform,\n transition,\n } = useSortable({\n id,\n animateLayoutChanges,\n });\n\n const transformString = CSS.Translate.toString(transform);\n\n const style: CSSProperties = useMemo(\n () => ({\n transform: transformString,\n transition,\n }),\n [transformString, transition]\n );\n\n const handleProps = useMemo(\n () => ({\n ...attributes,\n ...listeners,\n style,\n }),\n [attributes, listeners, style]\n );\n\n return (\n <TreeItem\n dragRef={setDraggableNodeRef}\n wrapperRef={setDroppableNodeRef}\n depth={depth}\n ghost={isDragging}\n disableInteraction={isSorting}\n handleProps={handleProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAAA;AACA,OAAOA,KAAK,IAAmBC,OAAO,QAAQ,OAAO;AACrD,SAA+BC,WAAW,QAAQ,mBAAmB;AACrE,SAASC,GAAG,QAAQ,oBAAoB;AAAC,SAChCC,QAAQ;AAMjB,IAAMC,oBAA0C,GAAG;EAAA,IAAC;IAClDC,SAAS;IACTC;EACF,CAAC;EAAA,OAAK,EAAED,SAAS,IAAIC,WAAW,CAAC;AAAA;AAEjC,OAAO,SAASC,gBAAgB,QAIN;EAAA,IAJU;MAClCC,EAAE;MACFC;IAEQ,CAAC;IADNC,KAAK;EAER,IAAM;IACJC,UAAU;IACVC,UAAU;IACVP,SAAS;IACTQ,SAAS;IACTC,mBAAmB;IACnBC,mBAAmB;IACnBC,SAAS;IACTC;EACF,CAAC,GAAGhB,WAAW,CAAC;IACdO,EAAE;IACFJ;EACF,CAAC,CAAC;EAEF,IAAMc,eAAe,GAAGhB,GAAG,CAACiB,SAAS,CAACC,QAAQ,CAACJ,SAAS,CAAC;EAEzD,IAAMK,KAAoB,GAAGrB,OAAO,CAClC,OAAO;IACLgB,SAAS,EAAEE,eAAe;IAC1BD;EACF,CAAC,CAAC,EACF,CAACC,eAAe,EAAED,UAAU,CAAC,CAC9B;EAED,IAAMK,WAAW,GAAGtB,OAAO,CACzB,oDACKW,UAAU,GACVE,SAAS;IACZQ;EAAK,EACL,EACF,CAACV,UAAU,EAAEE,SAAS,EAAEQ,KAAK,CAAC,CAC/B;EAED,oBACE,oBAAC,QAAQ;IACP,OAAO,EAAEP,mBAAoB;IAC7B,UAAU,EAAEC,mBAAoB;IAChC,KAAK,EAAEN,KAAM;IACb,KAAK,EAAEG,UAAW;IAClB,kBAAkB,EAAEP,SAAU;IAC9B,WAAW,EAAEiB;IACb;EAAA,GACIZ,KAAK,EACT;AAEN"}