react-arborist 1.0.0 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,219 @@
1
+ ![Logo](https://user-images.githubusercontent.com/3460638/161630636-3512fe81-41c2-4ee5-8f7e-adaad07033b6.svg)
2
+
3
+ <h1>React Arborist</h1>
4
+
5
+ A full-featured tree component for React.
6
+
7
+ Demo: https://react-arborist.netlify.app/
8
+
9
+ The tree UI is ubiquitous in software applications. There are many tree component libraries for React, but none were full-featured enough to stand on their own.
10
+
11
+ This library provides all the common features expected in a tree. You can select one or many nodes to drag and drop into new positions, open and close folders, render an inline form for renaming, efficiently show thousands of items, and provide your own node renderer to control the style.
12
+
13
+ ![Demo](https://user-images.githubusercontent.com/3460638/131920177-c47c34e5-d3e3-4826-937d-b366f527cdfe.gif)
14
+
15
+ ## Installation
16
+
17
+ ```
18
+ yarn add react-arborist
19
+ ```
20
+
21
+ ```
22
+ npm install react-arborist
23
+ ```
24
+
25
+ ## Example
26
+
27
+ Render the tree data structure.
28
+
29
+ ```jsx
30
+ const data = {
31
+ id: "A",
32
+ name: "Root"
33
+ children: [
34
+ { id: "B", name: "Node 1" },
35
+ { id: "C", name: "Node 2" },
36
+ ],
37
+ };
38
+
39
+ function App() {
40
+ return <Tree data={data}>{Node}</Tree>;
41
+ }
42
+
43
+ function Node({ ref, styles, data }) {
44
+ return (
45
+ <div ref={ref} style={styles.row}>
46
+ <div style={styles.indent}>{data.name}</div>
47
+ </div>
48
+ );
49
+ }
50
+ ```
51
+
52
+ #### Contents
53
+
54
+ - [Expected Data Structure](#expected-data-structure)
55
+ - [Tree Component API](#tree-component)
56
+ - [Node Renderer API](#node-renderer-component)
57
+ - [Styles Prop](#styles-prop)
58
+ - [State Prop](#state-prop)
59
+ - [Handlers Prop](#handlers-prop)
60
+ - [Tree Prop](#tree-prop)
61
+ - [Accessing the Tree Api from the Parent](#accessing-the-tree-api-from-the-parent)
62
+
63
+ ## Expected Data Structure
64
+
65
+ The Tree component expects the data prop to be a tree-like data structure with the following type:
66
+
67
+ ```ts
68
+ type Data = {
69
+ id: string, /* Required */
70
+ children?: Data[]
71
+ isOpen?: boolean
72
+ ...rest /* Any other data you wish to provide */
73
+ }
74
+ ```
75
+
76
+ If your data does not look like this, you can provide a `childrenAccessor` prop. You can also provide `isOpenAccessor`. The value can be a string or a function.
77
+
78
+ ```ts
79
+ <Tree childrenAccessor="items" ...
80
+ // Or
81
+ <Tree childrenAccessor={(node) => node.items} ...
82
+ ```
83
+
84
+ ## Tree Component
85
+
86
+ Unlike other Tree Components, react-arborist is designed as a [controlled component](https://reactjs.org/docs/forms.html#controlled-components). This means the consumer will provide the tree data and the handlers to update it. The only state managed internally is for drag and drop, selection, and editing.
87
+
88
+ | Prop | Default | Description |
89
+ | ---------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
90
+ | data | (required) | The tree data structure to render as described above. |
91
+ | width | 300 | The width of the tree. |
92
+ | height | 500 | The height of the tree. To dynamically fill it's container, use a [hook](https://github.com/ZeeCoder/use-resize-observer) or [component](https://github.com/bvaughn/react-virtualized-auto-sizer) to gather the width and height of the Tree's parent. |
93
+ | rowHeight | 24 | The height of each row. |
94
+ | indent | 24 | The number of pixels to indent child nodes. |
95
+ | hideRoot | false | Hide the root node so that the first set of children appear as the roots. |
96
+ | onToggle | noop | Handler called when a node is opened or closed. This and the subsequent functions should update the `data` prop for the tree to re-render. |
97
+ | onMove | noop | Handler called when a user moves one or more nodes by dragging and dropping. |
98
+ | onEdit | noop | Handler called when a user performs an inline edit of the node. |
99
+ | childrenAccessor | "children" | Used to get a node's children if they exist on a property other than "children". |
100
+ | isOpenAccessor | "isOpen" | Used to get a node's openness state if it exists on a property other than "isOpen". |
101
+ | openByDefault | true | Choose if the node should be open or closed when it has an undefined openness state. |
102
+ | className | undefined | Adds a class to the containing div. |
103
+
104
+ The only child of the Tree Component must be a NodeRenderer function as described below.
105
+
106
+ ```jsx
107
+ const NodeRenderer = ({
108
+ innerRef, data, styles, handlers, state, tree
109
+ }) => ...
110
+
111
+ const MyApp = () =>
112
+ <Tree>
113
+ {NodeRenderer}
114
+ </Tree>
115
+ ```
116
+
117
+ ## Node Renderer Component
118
+
119
+ The Node Renderer is where you get to make the tree your own. You completely own the style and functionality. The props passed to it should enable you to do whatever you need.
120
+
121
+ The most basic node renderer will look like this:
122
+
123
+ ```jsx
124
+ function NodeRenderer({ innerRef, styles, data, state, handlers, tree }) {
125
+ return (
126
+ <div ref={innerRef} style={styles.row}>
127
+ <div style={styles.indent}>{data.id}</div>
128
+ </div>
129
+ );
130
+ }
131
+ ```
132
+
133
+ The function above is passed data for this individual node, the DOM ref used for drag and drop, the styles to position the row in the virtualized list and the styles to indent the current node according to its level in the tree.
134
+
135
+ | Prop | Type | Description |
136
+ | -------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
137
+ | data | Node | A single node from the tree data structure provided. |
138
+ | innerRef | Ref | Must be attached to the root element returned by the NodeRenderer. This is needed for drag and drop to work. |
139
+ | [styles](#styles-prop) | object | This is an object that contains styles for the position of the row, and the level of indentation. Each key is described below. |
140
+ | [state](#state-prop) | object | An handful of boolean values that indicate the current state of this node. See below for details. |
141
+ | [handlers](#handlers-prop) | object | A collection of handlers to attach to the DOM, that provide selectable and toggle-able behaviors. Each handler is described below. |
142
+ | [tree](#tree-prop) | TreeMonitor | This object can be used to get at the internal state of the whole tree component. For example, `tree.getSelectedNodes()`. All the methods are listed below in the Tree Prop section. |
143
+
144
+ ### Styles Prop
145
+
146
+ These are the properties on the styles object passed to the NodeRenderer.
147
+
148
+ | Name | Type | Description |
149
+ | ------ | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
150
+ | row | CSSProperties | Since the tree only renders the rows that are currently visible, all the rows are absolutely positioned with a fixed top and left. Those styles are in this property. |
151
+ | indent | CSSProperties | This is simply a left padding set to the level of the tree multiplied by the tree indent prop. |
152
+
153
+ ### State Prop
154
+
155
+ These are the properties on the state object passed to the NodeRenderer.
156
+
157
+ | Name | Type | Description |
158
+ | ------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
159
+ | isOpen | boolean | True if this node has children and the children are visible. Use this to display some type a open or closed icon. |
160
+ | isSelected | boolean | True if this node is selected. Use this to show a "selected" state. Maybe a different background? |
161
+ | isHoveringOverChild | boolean | True if the user is dragging n node, and the node is hovering over one of this node's direct children. This can be used to indicate which folder the user is dragging an item into. |
162
+ | isDragging | boolean | True if this node is being dragged. |
163
+ | isSelectedStart | boolean | True if this is the first of a contiguous group of selected rows. This can be used to tastefully style a group of selected items. Maybe a different border radius on the first and last rows? |
164
+ | isSelectedEnd | boolean | True if this is the last of a contiguous group of selected rows. |
165
+ | isEditing | boolean | True if this row is being edited. When true, the renderer should return some type of form input. |
166
+
167
+ ### Handlers Prop
168
+
169
+ These are the properties on the handlers object passed to the NodeRenderer.
170
+
171
+ | Name | Type | Description |
172
+ | ------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
173
+ | select | MouseEventHandler | Attach this to the element that tiggers selection. Maybe you want to add it to the outermost div. <br /> `<div onClick={handlers.select}>` |
174
+ | toggle | MouseEventHandler | Attach this to the element that opens and closes the node. Maybe you want to add it to the `+`/`-` icon. <br />`<icon onClick={handlers.toggle}>` |
175
+ | edit | `() => void` | Makes this node editable. This will re-render the Node with the `state.isEditing` prop set to `true`. |
176
+ | submit | `(update: string) => void` | Sends the update to the `onEdit` handler in the Tree component, and sets the `state.isEditing` prop to `false`. |
177
+ | reset | `() => void` | Re-renders with the `state.isEditing` prop set to `false`. |
178
+
179
+ ### Tree Prop
180
+
181
+ The tree monitor provides methods to get and change the tree's internal state. A use case might be in a right click menu.
182
+
183
+ ```jsx
184
+ // In your node renderer
185
+ onContextMenu={() => {
186
+ // Do something with all the selected nodes
187
+ tree.getSelectedIds()
188
+ }}
189
+ ```
190
+
191
+ | Methods | Returns | Description |
192
+ | ----------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
193
+ | `getSelectedIds()` | `string[]` | Get the the ids of all currently selected nodes. |
194
+ | `edit(id: string)` | `Promise<{cancelled: boolean, value: string \| undefined}>` | Edit a node programatically. Resolves when the edit is finished or cancelled. |
195
+ | `submit(id: string, value: string)` | void | Submit the edit. |
196
+ | `reset(id: string)` | void | Cancel the edit. |
197
+ | `select(index: number, meta = false, shift = false)` | `void` | Select a node by it's visible index in the tree. The meta flag, when true, will allow multiple items to be selected. The shift flag, when true, will select all nodes between the last one selected, and this one. |
198
+ | `selectById(id: string, meta = false, shift = false)` | `void` | Same as above but selects by id. If the id is not present (in a collapsed folder), nothing will happen. First use the `scrollToId` function which will open all the parents and scroll to the id. |
199
+ | `scrollToId(id: string)` | void | Scroll to the id opening all it's parents if needed. |
200
+
201
+ [Full Tree API Implementation](https://github.com/brimdata/react-arborist/blob/main/packages/react-arborist/src/tree-api.ts)
202
+
203
+ ### Accessing the Tree API from the Parent
204
+
205
+ You may need to access the tree from the parent component. This can be done by passing a ref.
206
+
207
+ ```jsx
208
+ function MySection() {
209
+ const tree = useRef(null)
210
+
211
+ useEffect(() => {
212
+ tree.current.scrollToId("B")
213
+ }, [])
214
+
215
+ return <Tree ref={ref} ... />
216
+ }
217
+ ```
218
+
219
+ Authored by [James Kerr](https://twitter.com/specialCaseDev)
package/dist/index.js CHANGED
@@ -763,12 +763,12 @@ class $f02bc7cefcb30793$export$e2da3477247342d1 {
763
763
  scrollToId(id) {
764
764
  if (!this.list) return;
765
765
  const index1 = this.idToIndex[id];
766
- if (index1) this.list.scrollToItem(index1, "start");
766
+ if (index1) this.list.scrollToItem(index1);
767
767
  else {
768
768
  this.openParents(id);
769
769
  ($parcel$interopDefault($foSVk$reactdom)).flushSync(()=>{
770
770
  const index = this.idToIndex[id];
771
- if (index) this.list?.scrollToItem(index, "start");
771
+ if (index) this.list?.scrollToItem(index);
772
772
  });
773
773
  }
774
774
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-arborist/src/index.ts","packages/react-arborist/src/components/tree.tsx","packages/react-arborist/src/context.tsx","packages/react-arborist/src/selection/selection.ts","packages/react-arborist/src/selection/range.ts","packages/react-arborist/src/data/enrich-tree.ts","packages/react-arborist/src/dnd/outer-drop-hook.ts","packages/react-arborist/src/dnd/compute-drop.ts","packages/react-arborist/src/utils.ts","packages/react-arborist/src/provider.tsx","packages/react-arborist/src/reducer.ts","packages/react-arborist/src/selection/selection-hook.ts","packages/react-arborist/src/tree-api-hook.ts","packages/react-arborist/src/tree-api.ts","packages/react-arborist/src/data/flatten-tree.ts","packages/react-arborist/src/components/drop-cursor.tsx","packages/react-arborist/src/components/preview.tsx","packages/react-arborist/src/components/row.tsx","packages/react-arborist/src/dnd/drag-hook.ts","packages/react-arborist/src/dnd/drop-hook.ts"],"sourcesContent":["import { Tree } from \"./components/tree\";\nimport { TreeApi } from \"./tree-api\";\nimport type { NodeRenderer, NodeState, NodeHandlers } from \"./types\";\n\nexport { Tree, TreeApi, NodeRenderer, NodeState, NodeHandlers };\n","import { forwardRef, MouseEventHandler, ReactElement, useMemo, useRef } from \"react\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { FixedSizeList } from \"react-window\";\nimport { useStaticContext } from \"../context\";\nimport { enrichTree } from \"../data/enrich-tree\";\nimport { useOuterDrop } from \"../dnd/outer-drop-hook\";\nimport { TreeViewProvider } from \"../provider\";\nimport { TreeApi } from \"../tree-api\";\nimport { IdObj, Node, TreeProps } from \"../types\";\nimport { noop } from \"../utils\";\nimport { DropCursor } from \"./drop-cursor\";\nimport { Preview } from \"./preview\";\nimport { Row } from \"./row\";\n\nconst OuterElement = forwardRef(function Outer(\n props: React.HTMLProps<HTMLDivElement>,\n ref\n) {\n const { children, ...rest } = props;\n const tree = useStaticContext();\n return (\n // @ts-ignore\n <div ref={ref} {...rest} onClick={tree.onClick} onContextMenu={tree.onContextMenu}>\n <div\n style={{\n height: tree.api.visibleNodes.length * tree.rowHeight,\n width: \"100%\",\n overflow: \"hidden\",\n position: \"absolute\",\n left: \"0\",\n right: \"0\",\n }}\n >\n <DropCursor />\n </div>\n {children}\n </div>\n );\n});\n\nfunction List(props: { className?: string}) {\n const tree = useStaticContext();\n return (\n <div style={{ height: tree.height, width: tree.width, overflow: \"hidden\" }}>\n <FixedSizeList\n className={props.className}\n outerRef={tree.listEl}\n itemCount={tree.api.visibleNodes.length}\n height={tree.height}\n width={tree.width}\n itemSize={tree.rowHeight}\n itemKey={(index) => tree.api.visibleNodes[index]?.id || index}\n outerElementType={OuterElement}\n // @ts-ignore\n ref={tree.list}\n >\n {Row}\n </FixedSizeList>\n </div>\n );\n}\n\nfunction OuterDrop(props: { children: ReactElement }) {\n useOuterDrop();\n return props.children;\n}\n\nexport const Tree = forwardRef(function Tree<T extends IdObj>(\n props: TreeProps<T>,\n ref: React.Ref<TreeApi<T>>\n) {\n const root = useMemo<Node<T>>(\n () =>\n enrichTree<T>(\n props.data,\n props.hideRoot,\n props.getChildren,\n props.isOpen,\n props.disableDrag,\n props.disableDrop,\n props.openByDefault\n ),\n [\n props.data,\n props.hideRoot,\n props.getChildren,\n props.isOpen,\n props.disableDrag,\n props.disableDrop,\n props.openByDefault,\n ]\n );\n return (\n <TreeViewProvider\n imperativeHandle={ref}\n root={root}\n listEl={useRef<HTMLDivElement | null>(null)}\n renderer={props.children}\n width={props.width === undefined ? 300 : props.width}\n height={props.height === undefined ? 500 : props.height}\n indent={props.indent === undefined ? 24 : props.indent}\n rowHeight={props.rowHeight === undefined ? 24 : props.rowHeight}\n onMove={props.onMove || noop}\n onToggle={props.onToggle || noop}\n onEdit={props.onEdit || noop}\n onClick={props.onClick}\n onContextMenu={props.onContextMenu}\n >\n <DndProvider backend={HTML5Backend}>\n <OuterDrop>\n <List className={props.className}/>\n </OuterDrop>\n <Preview />\n </DndProvider>\n </TreeViewProvider>\n );\n});\n","import { createContext, useContext, useMemo } from \"react\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { Selection } from \"./selection/selection\";\nimport { IdObj, SelectionState, StaticContext } from \"./types\";\n\nexport const CursorParentId = createContext<string | null>(null);\nexport function useCursorParentId() {\n return useContext(CursorParentId);\n}\n\nexport const IsCursorOverFolder = createContext<boolean>(false);\nexport function useIsCursorOverFolder() {\n return useContext(IsCursorOverFolder);\n}\n\nexport const CursorLocationContext = createContext<Cursor | null>(null);\nexport function useCursorLocation() {\n return useContext(CursorLocationContext);\n}\n\nexport const Static = createContext<StaticContext<IdObj> | null>(null);\nexport function useStaticContext() {\n const value = useContext(Static);\n if (!value) throw new Error(\"Context must be in a provider\");\n return value;\n}\n\nexport const DispatchContext = createContext(null);\nexport function useDispatch() {\n const dispatch = useContext(DispatchContext);\n if (!dispatch) throw new Error(\"No dispatch provided\");\n return dispatch;\n}\n\nexport const SelectionContext = createContext<SelectionState | null>(null);\nexport function useSelectedIds(): string[] {\n const value = useContext(SelectionContext);\n if (!value) throw new Error(\"Must provide selection context\");\n return value.ids;\n}\n\nexport function useIsSelected(): (index: number | null) => boolean {\n const value = useContext(SelectionContext);\n if (!value) throw new Error(\"Must provide selection context\");\n const s = useMemo(() => Selection.parse(value.data, []), [value.data]);\n return (i) => s.contains(i);\n}\n\nexport const EditingIdContext = createContext<string | null>(null);\nexport function useEditingId(): string | null {\n return useContext(EditingIdContext);\n}\n","import { Range } from \"./range\";\n\ntype SelectionDirection = \"forward\" | \"backward\" | \"none\";\n\nexport type SelectionData = {\n ranges: [number, number][];\n currentIndex: number | null;\n direction: SelectionDirection;\n};\n\nexport class Selection {\n ranges: Range[] = [];\n currentIndex: number | null;\n direction: SelectionDirection = \"none\";\n items: any[];\n\n static parse(data: SelectionData | null, items: any[]) {\n if (data) {\n return new Selection(\n data.ranges,\n data.currentIndex,\n data.direction,\n items\n );\n } else {\n return new Selection();\n }\n }\n\n constructor(\n ranges: [number, number][] = [],\n currentIndex: number | null = ranges.length ? ranges.length - 1 : null,\n direction: SelectionDirection = \"none\",\n items: any[] = []\n ) {\n ranges.forEach(([s, e]) => this.addRange(s, e));\n this.currentIndex = currentIndex;\n this.direction = direction;\n this.items = items;\n }\n\n get current() {\n if (this.currentIndex === null) return null;\n const range = this.ranges[this.currentIndex];\n if (!range) {\n return null;\n } else {\n return range;\n }\n }\n\n select(n: number) {\n if (n < 0 || n >= this.items.length) return;\n this.clear();\n this.currentIndex = this.addRange(n, n);\n }\n\n multiSelect(n: number) {\n if (n < 0 || n >= this.items.length) return;\n if (this.contains(n)) return;\n this.currentIndex = this.addRange(n, n);\n this.compact(n);\n }\n\n deselect(n: number) {\n if (n < 0 || n >= this.items.length) return;\n const r = this.ranges.find((r) => r.contains(n));\n if (!r) return;\n else if (r.size === 1) this.removeRange(r);\n else if (r.start === n) r.start++;\n else if (r.end === n) r.end--;\n else {\n this.removeRange(r);\n this.addRange(r.start, n - 1);\n this.currentIndex = this.addRange(n + 1, r.end);\n }\n }\n\n getSelectedItems<T>(): T[] {\n return this.ranges.flatMap((range) =>\n range.map((index) => this.items[index])\n );\n }\n\n extend(n: number) {\n if (n < 0 || n >= this.items.length) return;\n if (this.isEmpty()) {\n this.select(n);\n } else {\n const anchor = this.getAnchor();\n if (anchor !== null && this.current) {\n const [start, end] = [n, anchor].sort((a, b) => a - b);\n this.current.start = start;\n this.current.end = end;\n this.compact(n);\n }\n }\n }\n\n contains(n: number | null) {\n if (n === null) return false;\n return this.ranges.some((r) => r.contains(n));\n }\n\n getRanges() {\n return this.ranges.map((r) => r.serialize());\n }\n\n clear() {\n this.ranges = [];\n this.currentIndex = null;\n this.direction = \"none\";\n }\n\n serialize(): SelectionData {\n return {\n ranges: this.getRanges(),\n currentIndex: this.currentIndex,\n direction: this.direction,\n };\n }\n\n isEqual(other: Selection) {\n if (other.ranges.length !== this.ranges.length) return false;\n\n for (let i = 0; i < this.ranges.length; ++i) {\n if (!this.ranges[i].isEqual(other.ranges[i])) return false;\n }\n return true;\n }\n\n private addRange(start: number, end: number) {\n const r = new Range(start, end);\n // Keep ranges sorted by start\n const index = this.ranges.findIndex((r) => r.start >= start);\n if (index === -1) this.ranges.push(r);\n else this.ranges.splice(index, 0, r);\n return index === -1 ? this.ranges.length - 1 : index;\n }\n\n private removeRange(r: Range) {\n const index = this.ranges.indexOf(r);\n this.ranges.splice(index, 1);\n if (this.isEmpty()) {\n this.currentIndex = null;\n } else if (index === this.currentIndex) {\n this.currentIndex = this.ranges.length - 1;\n }\n }\n\n private isEmpty() {\n return this.ranges.length === 0;\n }\n\n getAnchor() {\n if (!this.current) return null;\n return this.direction === \"backward\"\n ? this.current.end\n : this.current.start;\n }\n\n getFocus() {\n if (!this.current) return -1;\n return this.direction === \"backward\"\n ? this.current.start\n : this.current.end;\n }\n\n private compact(focus: number) {\n const removals = [];\n const current = this.current;\n for (let r of this.ranges) {\n if (!this.current || r === this.current) continue;\n if (this.current.overlaps(r)) {\n this.current.combine(r);\n removals.push(r);\n }\n }\n removals.forEach((r) => this.removeRange(r));\n if (current) this.currentIndex = this.ranges.indexOf(current);\n if (!this.current) return;\n if (this.current.start < focus) this.direction = \"forward\";\n else if (this.current.end > focus) this.direction = \"backward\";\n else this.direction = \"none\";\n }\n}\n","export class Range {\n constructor(public start: number, public end: number) {\n if (this.start > this.end)\n throw new Error(\"Invalid range: start larger than end\");\n }\n\n serialize(): [number, number] {\n return [this.start, this.end];\n }\n\n contains(n: number) {\n return n >= this.start && n <= this.end;\n }\n\n overlaps(r: Range) {\n return this.contains(r.start - 1) || this.contains(r.end + 1);\n }\n\n combine(r: Range) {\n this.start = Math.min(r.start, this.start);\n this.end = Math.max(r.end, this.end);\n }\n\n get size() {\n return this.end - this.start + 1;\n }\n\n clone() {\n return new Range(this.start, this.end);\n }\n\n map(fn: (index: any) => string): any {\n let returns = [];\n for (let i = this.start; i <= this.end; i++) returns.push(fn(i));\n return returns;\n }\n\n isEqual(other: Range) {\n return this.start === other.start && this.end === other.end;\n }\n}\n","import { TreeProps, IdObj, Node } from \"../types\";\n\nfunction createNode<T extends IdObj>(\n model: T,\n level: number,\n parent: Node<T> | null,\n children: Node<T>[] | null,\n isOpen: boolean,\n isDraggable: boolean,\n isDroppable: boolean\n): Node<T> {\n return {\n id: model.id,\n level,\n parent,\n children,\n isOpen,\n isDraggable,\n isDroppable,\n model,\n rowIndex: null,\n };\n}\n\nfunction access(obj: any, accessor: string | boolean | Function) {\n if (typeof accessor === \"boolean\") {\n return accessor;\n }\n\n if (typeof accessor === \"string\") {\n return obj[accessor];\n }\n\n return accessor(obj);\n}\n\nexport function enrichTree<T extends IdObj>(\n model: T,\n hideRoot: boolean = false,\n getChildren: TreeProps<T>[\"getChildren\"] = \"children\",\n isOpen: TreeProps<T>[\"isOpen\"] = \"isOpen\",\n disableDrag: TreeProps<T>[\"disableDrag\"] = false,\n disableDrop: TreeProps<T>[\"disableDrop\"] = false,\n openByDefault: boolean = true\n): Node<T> {\n function visitSelfAndChildren(\n model: T,\n level: number,\n parent: Node<T> | null\n ) {\n const open = access(model, isOpen) as boolean;\n const draggable = !access(model, disableDrag) as boolean;\n const droppable = !access(model, disableDrop) as boolean;\n const node = createNode<T>(\n model,\n level,\n parent,\n null,\n open === undefined ? openByDefault : open,\n draggable,\n droppable\n );\n const children = access(model, getChildren) as T[];\n\n if (children) {\n node.children = children.map((child: T) =>\n visitSelfAndChildren(child, level + 1, node)\n );\n }\n return node;\n }\n\n return visitSelfAndChildren(model, hideRoot ? -1 : 0, null);\n}\n","import { useDrop } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem } from \"../types\";\nimport { computeDrop } from \"./compute-drop\";\nimport { DropResult } from \"./drop-hook\";\n\nexport function useOuterDrop() {\n const tree = useStaticContext();\n\n // In case we drop an item at the bottom of the list\n const [, drop] = useDrop<DragItem, DropResult | null, { isOver: boolean }>(\n () => ({\n accept: \"NODE\",\n hover: (item, m) => {\n if (!m.isOver({ shallow: true })) return;\n const offset = m.getClientOffset();\n if (!tree.listEl.current || !offset) return;\n const { cursor } = computeDrop({\n element: tree.listEl.current,\n offset: offset,\n indent: tree.indent,\n node: null,\n prevNode: tree.api.visibleNodes[tree.api.visibleNodes.length - 1],\n nextNode: null,\n });\n if (cursor) tree.api.showCursor(cursor);\n },\n canDrop: (item, m) => {\n return m.isOver({ shallow: true });\n },\n drop: (item, m) => {\n if (m.didDrop()) return;\n const offset = m.getClientOffset();\n if (!tree.listEl.current || !offset) return;\n const { drop } = computeDrop({\n element: tree.listEl.current,\n offset: offset,\n indent: tree.indent,\n node: null,\n prevNode: tree.api.visibleNodes[tree.api.visibleNodes.length - 1],\n nextNode: null,\n });\n return drop;\n },\n }),\n [tree]\n );\n\n drop(tree.listEl);\n}\n","import { XYCoord } from \"react-dnd\";\nimport { Node } from \"../types\";\nimport { bound, indexOf, isClosed, isFolder, isItem } from \"../utils\";\nimport { DropResult } from \"./drop-hook\";\n\nfunction measureHover(el: HTMLElement, offset: XYCoord) {\n const rect = el.getBoundingClientRect();\n const x = offset.x - Math.round(rect.x);\n const y = offset.y - Math.round(rect.y);\n const height = rect.height;\n const inTopHalf = y < height / 2;\n const inBottomHalf = !inTopHalf;\n const pad = height / 4;\n const inMiddle = y > pad && y < height - pad;\n const atTop = !inMiddle && inTopHalf;\n const atBottom = !inMiddle && inBottomHalf;\n return { x, inTopHalf, inBottomHalf, inMiddle, atTop, atBottom };\n}\n\ntype HoverData = ReturnType<typeof measureHover>;\n\nfunction getNodesAroundCursor(\n node: Node | null,\n prev: Node | null,\n next: Node | null,\n hover: HoverData\n): [Node | null, Node | null] {\n if (!node) {\n // We're hoving over the empty part of the list, not over an item,\n // Put the cursor below the last item which is \"prev\"\n return [prev, null];\n }\n if (isFolder(node)) {\n if (hover.atTop) {\n return [prev, node];\n } else if (hover.inMiddle) {\n return [node, node];\n } else {\n return [node, next];\n }\n } else {\n if (hover.inTopHalf) {\n return [prev, node];\n } else {\n return [node, next];\n }\n }\n}\n\ntype Args = {\n element: HTMLElement;\n offset: XYCoord;\n indent: number;\n node: Node | null;\n prevNode: Node | null;\n nextNode: Node | null;\n};\n\nfunction getDropLevel(\n hovering: HoverData,\n aboveCursor: Node | null,\n belowCursor: Node | null,\n indent: number\n) {\n const hoverLevel = Math.round(Math.max(0, hovering.x - indent) / indent);\n let min, max;\n if (!aboveCursor) {\n max = 0;\n min = 0;\n } else if (!belowCursor) {\n max = aboveCursor.level;\n min = 0;\n } else {\n max = aboveCursor.level;\n min = belowCursor.level;\n }\n\n return bound(hoverLevel, min, max);\n}\n\nfunction canDrop(above: Node | null, below: Node | null) {\n if (!above) {\n return true;\n }\n\n let n: Node | null = above;\n if (isClosed(above) && above !== below) n = above.parent;\n\n while (n) {\n if (!n.isDroppable) return false;\n n = n.parent;\n }\n return true;\n}\n\nexport type ComputedDrop = {\n drop: DropResult | null;\n cursor: Cursor | null;\n};\n\nfunction dropAt(parentId: string | undefined, index: number): DropResult {\n return { parentId: parentId || null, index };\n}\n\nfunction lineCursor(index: number, level: number) {\n return {\n type: \"line\" as \"line\",\n index,\n level,\n };\n}\n\nfunction noCursor() {\n return {\n type: \"none\" as \"none\",\n };\n}\n\nfunction highlightCursor(id: string) {\n return {\n type: \"highlight\" as \"highlight\",\n id,\n };\n}\n\nfunction walkUpFrom(node: Node, level: number) {\n let drop = node;\n while (drop.parent && drop.level > level) {\n drop = drop.parent;\n }\n const parentId = drop.parent?.id || null;\n const index = indexOf(drop) + 1;\n return { parentId, index };\n}\n\nexport type LineCursor = ReturnType<typeof lineCursor>;\nexport type NoCursor = ReturnType<typeof noCursor>;\nexport type HighlightCursor = ReturnType<typeof highlightCursor>;\nexport type Cursor = LineCursor | NoCursor | HighlightCursor;\n\n/**\n * This is the most complex, tricky function in the whole repo.\n * It could be simplified and made more understandable.\n */\nexport function computeDrop(args: Args): ComputedDrop {\n const hover = measureHover(args.element, args.offset);\n const { node, nextNode, prevNode } = args;\n const [above, below] = getNodesAroundCursor(node, prevNode, nextNode, hover);\n\n if (!canDrop(above, below)) {\n return { drop: null, cursor: noCursor() };\n }\n\n /* Hovering over the middle of a folder */\n if (node && isFolder(node) && hover.inMiddle) {\n return {\n drop: dropAt(node.id, 0),\n cursor: highlightCursor(node.id),\n };\n }\n\n /* At the top of the list */\n if (!above) {\n return {\n drop: dropAt(below?.parent?.id, 0),\n cursor: lineCursor(0, 0),\n };\n }\n\n /* The above node is an item or a closed folder */\n if (isItem(above) || isClosed(above)) {\n const level = getDropLevel(hover, above, below, args.indent);\n return {\n drop: walkUpFrom(above, level),\n cursor: lineCursor(above.rowIndex! + 1, level),\n };\n }\n\n /* The above node is an open folder */\n return {\n drop: dropAt(above?.id, 0),\n cursor: lineCursor(above.rowIndex! + 1, above.level + 1),\n };\n}\n","import { Node } from \"./types\";\n\nexport function bound(n: number, min: number, max: number) {\n return Math.max(Math.min(n, max), min);\n}\n\nexport const isFolder = (node: Node<any>) => !!node.children;\n\nexport function isItem(node: Node | null) {\n return node && !isFolder(node);\n}\n\nexport function isClosed(node: Node | null) {\n return node && isFolder(node) && !node.isOpen;\n}\n\n/**\n * Is first param a decendent of the second param\n */\nexport const isDecendent = (a: Node, b: Node) => {\n let n: Node | null = a;\n while (n) {\n if (n.id === b.id) return true;\n n = n.parent;\n }\n return false;\n};\n\nexport const indexOf = (node: Node) => {\n // This should probably not throw an error, but instead return null\n if (!node.parent) throw Error(\"Node does not have a parent\");\n return node.parent.children!.findIndex((c) => c.id === node.id);\n};\n\nexport function noop() {}\n","import { useImperativeHandle, useMemo, useReducer, useRef } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport {\n CursorLocationContext,\n CursorParentId,\n EditingIdContext,\n IsCursorOverFolder,\n SelectionContext,\n Static,\n} from \"./context\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { initState, reducer } from \"./reducer\";\nimport { useSelectionKeys } from \"./selection/selection-hook\";\nimport { useTreeApi } from \"./tree-api-hook\";\nimport { StateContext, StaticContext, TreeProviderProps } from \"./types\";\n\nexport function TreeViewProvider<T>(props: TreeProviderProps<T>) {\n const [state, dispatch] = useReducer(reducer, initState());\n const list = useRef<FixedSizeList>();\n const api = useTreeApi<T>(state, dispatch, props, list.current);\n\n useImperativeHandle(props.imperativeHandle, () => api);\n useSelectionKeys(props.listEl, api);\n const staticValue = useMemo<StaticContext<T>>(\n () => ({ ...props, api, list }),\n [props, api, list]\n );\n\n /**\n * This context pattern is ridiculous, next time use redux.\n */\n return (\n // @ts-ignore\n <Static.Provider value={staticValue}>\n <EditingIdContext.Provider value={state.editingId}>\n <SelectionContext.Provider value={state.selection}>\n <CursorParentId.Provider value={getParentId(state.cursor)}>\n <IsCursorOverFolder.Provider value={isOverFolder(state)}>\n <CursorLocationContext.Provider value={state.cursor}>\n {props.children}\n </CursorLocationContext.Provider>\n </IsCursorOverFolder.Provider>\n </CursorParentId.Provider>\n </SelectionContext.Provider>\n </EditingIdContext.Provider>\n </Static.Provider>\n );\n}\n\nfunction getParentId(cursor: Cursor) {\n switch (cursor.type) {\n case \"highlight\":\n return cursor.id;\n default:\n return null;\n }\n}\n\nfunction isOverFolder(state: StateContext) {\n return state.cursor.type === \"highlight\";\n}\n","import { Cursor } from \"./dnd/compute-drop\";\nimport { Selection } from \"./selection/selection\";\nimport { StateContext } from \"./types\";\n\nexport const initState = (): StateContext => ({\n visibleIds: [],\n cursor: { type: \"none\" } as Cursor,\n editingId: null,\n selection: {\n data: null,\n ids: [],\n },\n});\n\nexport const actions = {\n setCursorLocation: (cursor: Cursor) => ({\n type: \"SET_CURSOR_LOCATION\" as \"SET_CURSOR_LOCATION\",\n cursor,\n }),\n\n setVisibleIds: (\n ids: string[], // index to id\n idMap: { [id: string]: number } // id to index\n ) => ({\n type: \"SET_VISIBLE_IDS\" as \"SET_VISIBLE_IDS\",\n ids,\n idMap,\n }),\n\n select: (index: number | null, meta: boolean, shift: boolean) => ({\n type: \"SELECT\" as \"SELECT\",\n index,\n meta,\n shift,\n }),\n\n selectId: (id: string) => ({\n type: \"SELECT_ID\" as \"SELECT_ID\",\n id,\n }),\n\n edit: (id: string | null) => ({\n type: \"EDIT\" as \"EDIT\",\n id,\n }),\n\n stepUp: (shift: boolean, ids: string[]) => ({\n type: \"STEP_UP\" as \"STEP_UP\",\n shift,\n }),\n\n stepDown: (shift: boolean, ids: string[]) => ({\n type: \"STEP_DOWN\" as \"STEP_DOWN\",\n shift,\n }),\n};\n\ntype ActionObj = {\n [Prop in keyof typeof actions]: ReturnType<typeof actions[Prop]>;\n};\nexport type Action = ActionObj[keyof ActionObj];\n\nexport function reducer(state: StateContext, action: Action): StateContext {\n switch (action.type) {\n case \"EDIT\":\n return {\n ...state,\n editingId: action.id,\n };\n case \"SET_CURSOR_LOCATION\":\n if (equal(state.cursor, action.cursor)) {\n return state;\n } else {\n return { ...state, cursor: action.cursor };\n }\n case \"SELECT\":\n var s = Selection.parse(state.selection.data, state.visibleIds);\n if (action.index === null) {\n s.clear();\n } else if (action.meta) {\n if (s.contains(action.index)) {\n s.deselect(action.index);\n } else {\n s.multiSelect(action.index);\n }\n } else if (action.shift) {\n s.extend(action.index);\n } else {\n s.select(action.index);\n }\n return {\n ...state,\n selection: {\n data: s.serialize(),\n ids: s.getSelectedItems(),\n },\n };\n case \"SELECT_ID\":\n return {\n ...state,\n selection: {\n ...state.selection,\n ids: [action.id],\n },\n };\n case \"STEP_UP\":\n var s3 = Selection.parse(state.selection.data, state.visibleIds);\n var f = s3.getFocus();\n if (action.shift) {\n s3.extend(f - 1);\n } else {\n s3.select(f - 1);\n }\n return {\n ...state,\n selection: {\n data: s3.serialize(),\n ids: s3.getSelectedItems(),\n },\n };\n case \"STEP_DOWN\":\n var s6 = Selection.parse(state.selection.data, state.visibleIds);\n var f2 = s6.getFocus();\n if (action.shift) {\n s6.extend(f2 + 1);\n } else {\n s6.select(f2 + 1);\n }\n return {\n ...state,\n selection: {\n data: s6.serialize(),\n ids: s6.getSelectedItems(),\n },\n };\n case \"SET_VISIBLE_IDS\":\n // The visible ids changed\n var ids = state.selection.ids;\n // Start with a blank selection\n var s2 = new Selection([], null, \"none\", state.visibleIds);\n // Add each of the old selected ids to this new selection\n for (let id of ids) {\n if (id in action.idMap) s2.multiSelect(action.idMap[id]);\n }\n return {\n ...state,\n visibleIds: action.ids,\n selection: {\n ids,\n data: s2.serialize(),\n },\n };\n default:\n return state;\n }\n}\n\nfunction equal(a: Cursor | null, b: Cursor | null) {\n if (a === null || b === null) return false;\n return JSON.stringify(a) === JSON.stringify(b);\n}\n","import { MutableRefObject, useEffect } from \"react\";\nimport { TreeApi } from \"../tree-api\";\n\nexport function useSelectionKeys<T>(\n ref: MutableRefObject<HTMLDivElement | null>,\n api: TreeApi<T>\n) {\n useEffect(() => {\n const el = ref.current;\n const cb = (e: KeyboardEvent) => {\n if (e.code === \"ArrowDown\") {\n e.preventDefault();\n api.selectDownwards(e.shiftKey);\n } else if (e.code === \"ArrowUp\") {\n e.preventDefault();\n api.selectUpwards(e.shiftKey);\n }\n };\n el?.addEventListener(\"keydown\", cb);\n return () => {\n el?.removeEventListener(\"keydown\", cb);\n };\n }, [ref, api]);\n}\n","import { Dispatch, useLayoutEffect, useMemo } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport { Action, actions } from \"./reducer\";\nimport { TreeApi } from \"./tree-api\";\nimport { StateContext, TreeProviderProps } from \"./types\";\n\nexport function useTreeApi<T>(\n state: StateContext,\n dispatch: Dispatch<Action>,\n props: TreeProviderProps<T>,\n list: FixedSizeList | undefined\n) {\n /**\n * We only ever want one instance of the api object\n * It will get updated as the props change, but the\n * reference will not.\n */\n const api = useMemo(\n () => new TreeApi<T>(dispatch, state, props, list),\n // eslint-disable-next-line\n []\n );\n api.assign(dispatch, state, props, list);\n\n /**\n * This ensures that the selection remains correct even\n * after opening and closing a folders\n */\n useLayoutEffect(() => {\n dispatch(actions.setVisibleIds(api.visibleIds, api.idToIndex));\n }, [dispatch, api, props.root]);\n\n return api;\n}\n","import memoizeOne from \"memoize-one\";\nimport { Dispatch } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport { flattenTree } from \"./data/flatten-tree\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { Action, actions } from \"./reducer\";\nimport { Node, StateContext, TreeProviderProps, EditResult } from \"./types\";\nimport ReactDOM from \"react-dom\";\n\nexport class TreeApi<T = unknown> {\n private edits = new Map<string, (args: EditResult) => void>();\n\n constructor(\n public dispatch: Dispatch<Action>,\n public state: StateContext,\n public props: TreeProviderProps<T>,\n public list: FixedSizeList | undefined\n ) {}\n\n assign(\n dispatch: Dispatch<Action>,\n state: StateContext,\n props: TreeProviderProps<T>,\n list: FixedSizeList | undefined\n ) {\n this.dispatch = dispatch;\n this.state = state;\n this.props = props;\n this.list = list;\n }\n\n getNode(id: string): Node<unknown> | null {\n if (id in this.idToIndex)\n return this.visibleNodes[this.idToIndex[id]] || null;\n else return null;\n }\n\n getSelectedIds() {\n return this.state.selection.ids;\n }\n\n edit(id: string | number): Promise<EditResult> {\n const sid = id.toString();\n this.resolveEdit(sid, { cancelled: true });\n this.scrollToId(sid);\n this.dispatch(actions.edit(sid));\n return new Promise((resolve) => this.edits.set(sid, resolve));\n }\n\n submit(id: string | number, value: string) {\n const sid = id.toString();\n this.props.onEdit(sid, value);\n this.dispatch(actions.edit(null));\n this.resolveEdit(sid, { cancelled: false, value });\n }\n\n reset(id: string | number) {\n const sid = id.toString();\n this.dispatch(actions.edit(null));\n this.resolveEdit(sid, { cancelled: true });\n }\n\n private resolveEdit(id: string, value: EditResult) {\n const resolve = this.edits.get(id.toString());\n if (resolve) resolve(value);\n this.edits.delete(id);\n }\n\n select(index: number | null, meta = false, shift = false) {\n this.dispatch(actions.select(index, meta, shift));\n }\n\n selectById(id: string | number, meta = false, shift = false) {\n const index = this.idToIndex[id];\n this.select(index, meta, shift);\n }\n\n selectUpwards(shiftKey: boolean) {\n this.dispatch(actions.stepUp(shiftKey, this.visibleIds));\n }\n\n selectDownwards(shiftKey: boolean) {\n this.dispatch(actions.stepDown(shiftKey, this.visibleIds));\n }\n\n hideCursor() {\n this.dispatch(actions.setCursorLocation({ type: \"none\" }));\n }\n\n showCursor(cursor: Cursor) {\n this.dispatch(actions.setCursorLocation(cursor));\n }\n\n scrollToId(id: string) {\n if (!this.list) return;\n const index = this.idToIndex[id];\n if (index) {\n this.list.scrollToItem(index, \"start\");\n } else {\n this.openParents(id);\n ReactDOM.flushSync(() => {\n const index = this.idToIndex[id];\n if (index) {\n this.list?.scrollToItem(index, \"start\");\n }\n });\n }\n }\n\n open(id: string) {\n this.props.onToggle(id, true);\n }\n\n openParents(id: string) {\n const node = dfs(this.props.root, id);\n let parent = node?.parent;\n\n while (parent) {\n this.open(parent.id);\n parent = parent.parent;\n }\n }\n\n get visibleIds() {\n return getIds(this.visibleNodes);\n }\n\n get idToIndex() {\n return createIndex(this.visibleNodes);\n }\n\n get visibleNodes() {\n return createList(this.props.root);\n }\n}\n\nconst getIds = memoizeOne((nodes: Node[]) => nodes.map((n) => n.id));\nconst createIndex = memoizeOne((nodes: Node[]) => {\n return nodes.reduce<{ [id: string]: number }>((map, node, index) => {\n map[node.id] = index;\n return map;\n }, {});\n});\nconst createList = memoizeOne(flattenTree);\n\nfunction dfs(node: Node<unknown>, id: string): Node<unknown> | null {\n if (!node) return null;\n if (node.id === id) return node;\n if (node.children) {\n for (let child of node.children) {\n const result = dfs(child, id);\n if (result) return result;\n }\n }\n return null;\n}\n","import { Node } from \"../types\";\n\nexport function flattenTree<T>(root: Node<T>): Node<T>[] {\n const list: Node<T>[] = [];\n let index = 0;\n function collect(node: Node<T>) {\n if (node.level >= 0) {\n node.rowIndex = index++;\n list.push(node);\n }\n if (node.isOpen) {\n node.children?.forEach(collect);\n }\n }\n collect(root);\n return list;\n}\n","import React, { CSSProperties } from \"react\";\nimport { useCursorLocation, useStaticContext } from \"../context\";\n\nexport function DropCursor() {\n const treeView = useStaticContext();\n const cursor = useCursorLocation();\n if (!cursor || cursor.type !== \"line\") return null;\n const top = treeView.rowHeight * cursor.index;\n const left = treeView.indent * cursor.level;\n const style: CSSProperties = {\n position: \"absolute\",\n pointerEvents: \"none\",\n top: top - 2 + \"px\",\n left: treeView.indent + left + \"px\",\n right: treeView.indent + \"px\",\n };\n\n return <DefaultCursor style={style} />;\n}\n\nconst placeholderStyle = {\n display: \"flex\",\n alignItems: \"center\",\n};\n\nconst lineStyle = {\n flex: 1,\n height: \"2px\",\n background: \"#4B91E2\",\n borderRadius: \"1px\",\n};\n\nconst circleStyle = {\n width: \"4px\",\n height: \"4px\",\n boxShadow: \"0 0 0 3px #4B91E2\",\n borderRadius: \"50%\",\n};\n\nfunction DefaultCursor({ style }: { style: CSSProperties }) {\n return (\n <div style={{ ...placeholderStyle, ...style }}>\n <div style={{ ...circleStyle }}></div>\n <div style={{ ...lineStyle }}></div>\n </div>\n );\n}\n","import React, { CSSProperties, memo } from \"react\";\nimport { useDragLayer, XYCoord } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem } from \"../types\";\n\nconst layerStyles: CSSProperties = {\n position: \"fixed\",\n pointerEvents: \"none\",\n zIndex: 100,\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n};\n\nconst getStyle = (offset: XYCoord | null) => {\n if (!offset) return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x}px, ${y}px)` };\n};\n\nconst getCountStyle = (offset: XYCoord | null) => {\n if (!offset) return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x + 10}px, ${y + 10}px)` };\n};\n\nexport function Preview() {\n const { offset, mouse, item, isDragging } = useDragLayer((m) => ({\n offset: m.getSourceClientOffset(),\n mouse: m.getClientOffset(),\n item: m.getItem(),\n isDragging: m.isDragging(),\n }));\n\n return (\n <Overlay isDragging={isDragging}>\n <Position offset={offset}>\n <PreviewNode item={item} />\n </Position>\n <Count mouse={mouse} item={item} />\n </Overlay>\n );\n}\n\nconst Overlay = memo(function Overlay(props: {\n children: JSX.Element[];\n isDragging: boolean;\n}) {\n if (!props.isDragging) return null;\n return <div style={layerStyles}>{props.children}</div>;\n});\n\nfunction Position(props: { children: JSX.Element; offset: XYCoord | null }) {\n return (\n <div className=\"row preview\" style={getStyle(props.offset)}>\n {props.children}\n </div>\n );\n}\n\nfunction Count(props: { item: DragItem; mouse: XYCoord | null }) {\n const { item, mouse } = props;\n if (item?.dragIds?.length > 1)\n return (\n <div className=\"selected-count\" style={getCountStyle(mouse)}>\n {item.dragIds.length}\n </div>\n );\n else return null;\n}\n\nconst PreviewNode = memo(function PreviewNode(props: {\n item: DragItem | null;\n}) {\n const tree = useStaticContext();\n if (!props.item) return null;\n const node = tree.api.getNode(props.item.id);\n if (!node) return null;\n return (\n <tree.renderer\n preview\n innerRef={() => {}}\n data={node.model}\n styles={{\n row: {},\n indent: { paddingLeft: node.level * tree.indent },\n }}\n tree={tree.api}\n state={{\n isDragging: false,\n isEditing: false,\n isSelected: false,\n isSelectedStart: false,\n isSelectedEnd: false,\n isHoveringOverChild: false,\n isOpen: node.isOpen,\n }}\n handlers={{\n edit: () => Promise.resolve({ cancelled: true }),\n select: () => {},\n toggle: () => {},\n submit: () => {},\n reset: () => {},\n }}\n />\n );\n});\n","import React, { useCallback, useMemo, useRef } from \"react\";\nimport {\n useCursorParentId,\n useEditingId,\n useIsCursorOverFolder,\n useIsSelected,\n useStaticContext,\n} from \"../context\";\nimport { useDragHook } from \"../dnd/drag-hook\";\nimport { useDropHook } from \"../dnd/drop-hook\";\n\ntype Props = {\n style: React.CSSProperties;\n index: number;\n};\n\nexport const Row = React.memo(function Row({ index, style }: Props) {\n const tree = useStaticContext();\n const selected = useIsSelected();\n const node = tree.api.visibleNodes[index];\n const next = tree.api.visibleNodes[index + 1] || null;\n const prev = tree.api.visibleNodes[index - 1] || null;\n const cursorParentId = useCursorParentId();\n const cursorOverFolder = useIsCursorOverFolder();\n const el = useRef<HTMLDivElement | null>(null);\n const [{ isDragging }, dragRef] = useDragHook(node);\n const [, dropRef] = useDropHook(el, node, prev, next);\n const isEditing = node.id === useEditingId();\n const isSelected = selected(index);\n const nextSelected = next && selected(index + 1);\n const prevSelected = prev && selected(index - 1);\n const isHoveringOverChild = node.id === cursorParentId;\n const isOverFolder = node.id === cursorParentId && cursorOverFolder;\n const isOpen = node.isOpen;\n const indent = tree.indent * node.level;\n const state = useMemo(() => {\n return {\n isEditing,\n isDragging,\n isSelectedStart: isSelected && !prevSelected,\n isSelectedEnd: isSelected && !nextSelected,\n isSelected,\n isHoveringOverChild,\n isOpen,\n isOverFolder,\n };\n }, [\n isEditing,\n isSelected,\n prevSelected,\n nextSelected,\n isHoveringOverChild,\n isOpen,\n isDragging,\n isOverFolder,\n ]);\n\n const ref = useCallback(\n (n: HTMLDivElement | null) => {\n el.current = n;\n dragRef(dropRef(n));\n },\n [dragRef, dropRef]\n );\n\n const styles = useMemo(\n () => ({\n row: { ...style },\n indent: { paddingLeft: indent },\n }),\n [indent, style]\n );\n\n const handlers = useMemo(() => {\n return {\n select: (\n e: React.MouseEvent,\n args: { selectOnClick: boolean } = { selectOnClick: true }\n ) => {\n if (node.rowIndex === null) return;\n if (args.selectOnClick || e.metaKey || e.shiftKey) {\n tree.api.select(node.rowIndex, e.metaKey, e.shiftKey);\n } else {\n tree.api.select(null, false, false);\n }\n },\n toggle: (e: React.MouseEvent) => {\n e.stopPropagation();\n tree.onToggle(node.id, !node.isOpen);\n },\n edit: () => tree.api.edit(node.id),\n submit: (name: string) => {\n name.trim() ? tree.api.submit(node.id, name) : tree.api.reset(node.id);\n },\n reset: () => tree.api.reset(node.id),\n };\n }, [tree, node]);\n\n const Renderer = useMemo(() => {\n return React.memo(tree.renderer);\n }, [tree.renderer]);\n\n return (\n <Renderer\n innerRef={ref}\n data={node.model}\n styles={styles}\n state={state}\n handlers={handlers}\n preview={false}\n tree={tree.api}\n />\n );\n});\n","import { useEffect } from \"react\";\nimport { ConnectDragSource, useDrag } from \"react-dnd\";\nimport { getEmptyImage } from \"react-dnd-html5-backend\";\nimport { useIsSelected, useSelectedIds, useStaticContext } from \"../context\";\nimport { DragItem, Node } from \"../types\";\nimport { DropResult } from \"./drop-hook\";\n\ntype CollectedProps = { isDragging: boolean };\n\nexport function useDragHook(\n node: Node\n): [{ isDragging: boolean }, ConnectDragSource] {\n const tree = useStaticContext();\n const isSelected = useIsSelected();\n const ids = useSelectedIds();\n const [{ isDragging }, ref, preview] = useDrag<\n DragItem,\n DropResult,\n CollectedProps\n >(\n () => ({\n canDrag: () => node.isDraggable,\n type: \"NODE\",\n item: () => ({\n id: node.id,\n dragIds: isSelected(node.rowIndex) ? ids : [node.id],\n }),\n collect: (m) => ({\n isDragging: m.isDragging(),\n }),\n end: (item, monitor) => {\n tree.api.hideCursor();\n const drop = monitor.getDropResult();\n if (drop && drop.parentId) {\n tree.onMove(item.dragIds, drop.parentId, drop.index);\n tree.onToggle(drop.parentId, true);\n }\n },\n }),\n [ids, node]\n );\n\n useEffect(() => {\n preview(getEmptyImage());\n }, [preview]);\n\n return [{ isDragging }, ref];\n}\n","import { RefObject } from \"react\";\nimport { ConnectDropTarget, useDrop } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem, Node } from \"../types\";\nimport { isDecendent, isFolder } from \"../utils\";\nimport { computeDrop } from \"./compute-drop\";\n\nexport type DropResult = {\n parentId: string | null;\n index: number;\n};\n\nexport type CollectedProps = undefined;\n\nexport function useDropHook(\n el: RefObject<HTMLElement | null>,\n node: Node,\n prev: Node | null,\n next: Node | null\n): [CollectedProps, ConnectDropTarget] {\n const tree = useStaticContext();\n return useDrop<DragItem, DropResult | null, CollectedProps>(\n () => ({\n accept: \"NODE\",\n canDrop: (item) => {\n for (let id of item.dragIds) {\n const drag = tree.api.getNode(id);\n if (!drag) return false;\n if (isFolder(drag) && isDecendent(node, drag)) return false;\n }\n return true;\n },\n hover: (item, m) => {\n if (m.canDrop()) {\n const offset = m.getClientOffset();\n if (!el.current || !offset) return;\n const { cursor } = computeDrop({\n element: el.current,\n offset: offset,\n indent: tree.indent,\n node: node,\n prevNode: prev,\n nextNode: next,\n });\n if (cursor) tree.api.showCursor(cursor);\n } else {\n tree.api.hideCursor();\n }\n },\n drop: (item, m): DropResult | undefined | null => {\n const offset = m.getClientOffset();\n if (!el.current || !offset) return;\n const { drop } = computeDrop({\n element: el.current,\n offset: offset,\n indent: tree.indent,\n node: node,\n prevNode: prev,\n nextNode: next,\n });\n return drop;\n },\n }),\n [node, prev, el, tree]\n );\n}\n"],"names":[],"version":3,"file":"index.js.map"}
1
+ {"mappings":"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","sources":["packages/react-arborist/src/index.ts","packages/react-arborist/src/components/tree.tsx","packages/react-arborist/src/context.tsx","packages/react-arborist/src/selection/selection.ts","packages/react-arborist/src/selection/range.ts","packages/react-arborist/src/data/enrich-tree.ts","packages/react-arborist/src/dnd/outer-drop-hook.ts","packages/react-arborist/src/dnd/compute-drop.ts","packages/react-arborist/src/utils.ts","packages/react-arborist/src/provider.tsx","packages/react-arborist/src/reducer.ts","packages/react-arborist/src/selection/selection-hook.ts","packages/react-arborist/src/tree-api-hook.ts","packages/react-arborist/src/tree-api.ts","packages/react-arborist/src/data/flatten-tree.ts","packages/react-arborist/src/components/drop-cursor.tsx","packages/react-arborist/src/components/preview.tsx","packages/react-arborist/src/components/row.tsx","packages/react-arborist/src/dnd/drag-hook.ts","packages/react-arborist/src/dnd/drop-hook.ts"],"sourcesContent":["import { Tree } from \"./components/tree\";\nimport { TreeApi } from \"./tree-api\";\nimport type { NodeRenderer, NodeState, NodeHandlers } from \"./types\";\n\nexport { Tree, TreeApi, NodeRenderer, NodeState, NodeHandlers };\n","import { forwardRef, MouseEventHandler, ReactElement, useMemo, useRef } from \"react\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { FixedSizeList } from \"react-window\";\nimport { useStaticContext } from \"../context\";\nimport { enrichTree } from \"../data/enrich-tree\";\nimport { useOuterDrop } from \"../dnd/outer-drop-hook\";\nimport { TreeViewProvider } from \"../provider\";\nimport { TreeApi } from \"../tree-api\";\nimport { IdObj, Node, TreeProps } from \"../types\";\nimport { noop } from \"../utils\";\nimport { DropCursor } from \"./drop-cursor\";\nimport { Preview } from \"./preview\";\nimport { Row } from \"./row\";\n\nconst OuterElement = forwardRef(function Outer(\n props: React.HTMLProps<HTMLDivElement>,\n ref\n) {\n const { children, ...rest } = props;\n const tree = useStaticContext();\n return (\n // @ts-ignore\n <div ref={ref} {...rest} onClick={tree.onClick} onContextMenu={tree.onContextMenu}>\n <div\n style={{\n height: tree.api.visibleNodes.length * tree.rowHeight,\n width: \"100%\",\n overflow: \"hidden\",\n position: \"absolute\",\n left: \"0\",\n right: \"0\",\n }}\n >\n <DropCursor />\n </div>\n {children}\n </div>\n );\n});\n\nfunction List(props: { className?: string}) {\n const tree = useStaticContext();\n return (\n <div style={{ height: tree.height, width: tree.width, overflow: \"hidden\" }}>\n <FixedSizeList\n className={props.className}\n outerRef={tree.listEl}\n itemCount={tree.api.visibleNodes.length}\n height={tree.height}\n width={tree.width}\n itemSize={tree.rowHeight}\n itemKey={(index) => tree.api.visibleNodes[index]?.id || index}\n outerElementType={OuterElement}\n // @ts-ignore\n ref={tree.list}\n >\n {Row}\n </FixedSizeList>\n </div>\n );\n}\n\nfunction OuterDrop(props: { children: ReactElement }) {\n useOuterDrop();\n return props.children;\n}\n\nexport const Tree = forwardRef(function Tree<T extends IdObj>(\n props: TreeProps<T>,\n ref: React.Ref<TreeApi<T>>\n) {\n const root = useMemo<Node<T>>(\n () =>\n enrichTree<T>(\n props.data,\n props.hideRoot,\n props.getChildren,\n props.isOpen,\n props.disableDrag,\n props.disableDrop,\n props.openByDefault\n ),\n [\n props.data,\n props.hideRoot,\n props.getChildren,\n props.isOpen,\n props.disableDrag,\n props.disableDrop,\n props.openByDefault,\n ]\n );\n return (\n <TreeViewProvider\n imperativeHandle={ref}\n root={root}\n listEl={useRef<HTMLDivElement | null>(null)}\n renderer={props.children}\n width={props.width === undefined ? 300 : props.width}\n height={props.height === undefined ? 500 : props.height}\n indent={props.indent === undefined ? 24 : props.indent}\n rowHeight={props.rowHeight === undefined ? 24 : props.rowHeight}\n onMove={props.onMove || noop}\n onToggle={props.onToggle || noop}\n onEdit={props.onEdit || noop}\n onClick={props.onClick}\n onContextMenu={props.onContextMenu}\n >\n <DndProvider backend={HTML5Backend}>\n <OuterDrop>\n <List className={props.className}/>\n </OuterDrop>\n <Preview />\n </DndProvider>\n </TreeViewProvider>\n );\n});\n","import { createContext, useContext, useMemo } from \"react\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { Selection } from \"./selection/selection\";\nimport { IdObj, SelectionState, StaticContext } from \"./types\";\n\nexport const CursorParentId = createContext<string | null>(null);\nexport function useCursorParentId() {\n return useContext(CursorParentId);\n}\n\nexport const IsCursorOverFolder = createContext<boolean>(false);\nexport function useIsCursorOverFolder() {\n return useContext(IsCursorOverFolder);\n}\n\nexport const CursorLocationContext = createContext<Cursor | null>(null);\nexport function useCursorLocation() {\n return useContext(CursorLocationContext);\n}\n\nexport const Static = createContext<StaticContext<IdObj> | null>(null);\nexport function useStaticContext() {\n const value = useContext(Static);\n if (!value) throw new Error(\"Context must be in a provider\");\n return value;\n}\n\nexport const DispatchContext = createContext(null);\nexport function useDispatch() {\n const dispatch = useContext(DispatchContext);\n if (!dispatch) throw new Error(\"No dispatch provided\");\n return dispatch;\n}\n\nexport const SelectionContext = createContext<SelectionState | null>(null);\nexport function useSelectedIds(): string[] {\n const value = useContext(SelectionContext);\n if (!value) throw new Error(\"Must provide selection context\");\n return value.ids;\n}\n\nexport function useIsSelected(): (index: number | null) => boolean {\n const value = useContext(SelectionContext);\n if (!value) throw new Error(\"Must provide selection context\");\n const s = useMemo(() => Selection.parse(value.data, []), [value.data]);\n return (i) => s.contains(i);\n}\n\nexport const EditingIdContext = createContext<string | null>(null);\nexport function useEditingId(): string | null {\n return useContext(EditingIdContext);\n}\n","import { Range } from \"./range\";\n\ntype SelectionDirection = \"forward\" | \"backward\" | \"none\";\n\nexport type SelectionData = {\n ranges: [number, number][];\n currentIndex: number | null;\n direction: SelectionDirection;\n};\n\nexport class Selection {\n ranges: Range[] = [];\n currentIndex: number | null;\n direction: SelectionDirection = \"none\";\n items: any[];\n\n static parse(data: SelectionData | null, items: any[]) {\n if (data) {\n return new Selection(\n data.ranges,\n data.currentIndex,\n data.direction,\n items\n );\n } else {\n return new Selection();\n }\n }\n\n constructor(\n ranges: [number, number][] = [],\n currentIndex: number | null = ranges.length ? ranges.length - 1 : null,\n direction: SelectionDirection = \"none\",\n items: any[] = []\n ) {\n ranges.forEach(([s, e]) => this.addRange(s, e));\n this.currentIndex = currentIndex;\n this.direction = direction;\n this.items = items;\n }\n\n get current() {\n if (this.currentIndex === null) return null;\n const range = this.ranges[this.currentIndex];\n if (!range) {\n return null;\n } else {\n return range;\n }\n }\n\n select(n: number) {\n if (n < 0 || n >= this.items.length) return;\n this.clear();\n this.currentIndex = this.addRange(n, n);\n }\n\n multiSelect(n: number) {\n if (n < 0 || n >= this.items.length) return;\n if (this.contains(n)) return;\n this.currentIndex = this.addRange(n, n);\n this.compact(n);\n }\n\n deselect(n: number) {\n if (n < 0 || n >= this.items.length) return;\n const r = this.ranges.find((r) => r.contains(n));\n if (!r) return;\n else if (r.size === 1) this.removeRange(r);\n else if (r.start === n) r.start++;\n else if (r.end === n) r.end--;\n else {\n this.removeRange(r);\n this.addRange(r.start, n - 1);\n this.currentIndex = this.addRange(n + 1, r.end);\n }\n }\n\n getSelectedItems<T>(): T[] {\n return this.ranges.flatMap((range) =>\n range.map((index) => this.items[index])\n );\n }\n\n extend(n: number) {\n if (n < 0 || n >= this.items.length) return;\n if (this.isEmpty()) {\n this.select(n);\n } else {\n const anchor = this.getAnchor();\n if (anchor !== null && this.current) {\n const [start, end] = [n, anchor].sort((a, b) => a - b);\n this.current.start = start;\n this.current.end = end;\n this.compact(n);\n }\n }\n }\n\n contains(n: number | null) {\n if (n === null) return false;\n return this.ranges.some((r) => r.contains(n));\n }\n\n getRanges() {\n return this.ranges.map((r) => r.serialize());\n }\n\n clear() {\n this.ranges = [];\n this.currentIndex = null;\n this.direction = \"none\";\n }\n\n serialize(): SelectionData {\n return {\n ranges: this.getRanges(),\n currentIndex: this.currentIndex,\n direction: this.direction,\n };\n }\n\n isEqual(other: Selection) {\n if (other.ranges.length !== this.ranges.length) return false;\n\n for (let i = 0; i < this.ranges.length; ++i) {\n if (!this.ranges[i].isEqual(other.ranges[i])) return false;\n }\n return true;\n }\n\n private addRange(start: number, end: number) {\n const r = new Range(start, end);\n // Keep ranges sorted by start\n const index = this.ranges.findIndex((r) => r.start >= start);\n if (index === -1) this.ranges.push(r);\n else this.ranges.splice(index, 0, r);\n return index === -1 ? this.ranges.length - 1 : index;\n }\n\n private removeRange(r: Range) {\n const index = this.ranges.indexOf(r);\n this.ranges.splice(index, 1);\n if (this.isEmpty()) {\n this.currentIndex = null;\n } else if (index === this.currentIndex) {\n this.currentIndex = this.ranges.length - 1;\n }\n }\n\n private isEmpty() {\n return this.ranges.length === 0;\n }\n\n getAnchor() {\n if (!this.current) return null;\n return this.direction === \"backward\"\n ? this.current.end\n : this.current.start;\n }\n\n getFocus() {\n if (!this.current) return -1;\n return this.direction === \"backward\"\n ? this.current.start\n : this.current.end;\n }\n\n private compact(focus: number) {\n const removals = [];\n const current = this.current;\n for (let r of this.ranges) {\n if (!this.current || r === this.current) continue;\n if (this.current.overlaps(r)) {\n this.current.combine(r);\n removals.push(r);\n }\n }\n removals.forEach((r) => this.removeRange(r));\n if (current) this.currentIndex = this.ranges.indexOf(current);\n if (!this.current) return;\n if (this.current.start < focus) this.direction = \"forward\";\n else if (this.current.end > focus) this.direction = \"backward\";\n else this.direction = \"none\";\n }\n}\n","export class Range {\n constructor(public start: number, public end: number) {\n if (this.start > this.end)\n throw new Error(\"Invalid range: start larger than end\");\n }\n\n serialize(): [number, number] {\n return [this.start, this.end];\n }\n\n contains(n: number) {\n return n >= this.start && n <= this.end;\n }\n\n overlaps(r: Range) {\n return this.contains(r.start - 1) || this.contains(r.end + 1);\n }\n\n combine(r: Range) {\n this.start = Math.min(r.start, this.start);\n this.end = Math.max(r.end, this.end);\n }\n\n get size() {\n return this.end - this.start + 1;\n }\n\n clone() {\n return new Range(this.start, this.end);\n }\n\n map(fn: (index: any) => string): any {\n let returns = [];\n for (let i = this.start; i <= this.end; i++) returns.push(fn(i));\n return returns;\n }\n\n isEqual(other: Range) {\n return this.start === other.start && this.end === other.end;\n }\n}\n","import { TreeProps, IdObj, Node } from \"../types\";\n\nfunction createNode<T extends IdObj>(\n model: T,\n level: number,\n parent: Node<T> | null,\n children: Node<T>[] | null,\n isOpen: boolean,\n isDraggable: boolean,\n isDroppable: boolean\n): Node<T> {\n return {\n id: model.id,\n level,\n parent,\n children,\n isOpen,\n isDraggable,\n isDroppable,\n model,\n rowIndex: null,\n };\n}\n\nfunction access(obj: any, accessor: string | boolean | Function) {\n if (typeof accessor === \"boolean\") {\n return accessor;\n }\n\n if (typeof accessor === \"string\") {\n return obj[accessor];\n }\n\n return accessor(obj);\n}\n\nexport function enrichTree<T extends IdObj>(\n model: T,\n hideRoot: boolean = false,\n getChildren: TreeProps<T>[\"getChildren\"] = \"children\",\n isOpen: TreeProps<T>[\"isOpen\"] = \"isOpen\",\n disableDrag: TreeProps<T>[\"disableDrag\"] = false,\n disableDrop: TreeProps<T>[\"disableDrop\"] = false,\n openByDefault: boolean = true\n): Node<T> {\n function visitSelfAndChildren(\n model: T,\n level: number,\n parent: Node<T> | null\n ) {\n const open = access(model, isOpen) as boolean;\n const draggable = !access(model, disableDrag) as boolean;\n const droppable = !access(model, disableDrop) as boolean;\n const node = createNode<T>(\n model,\n level,\n parent,\n null,\n open === undefined ? openByDefault : open,\n draggable,\n droppable\n );\n const children = access(model, getChildren) as T[];\n\n if (children) {\n node.children = children.map((child: T) =>\n visitSelfAndChildren(child, level + 1, node)\n );\n }\n return node;\n }\n\n return visitSelfAndChildren(model, hideRoot ? -1 : 0, null);\n}\n","import { useDrop } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem } from \"../types\";\nimport { computeDrop } from \"./compute-drop\";\nimport { DropResult } from \"./drop-hook\";\n\nexport function useOuterDrop() {\n const tree = useStaticContext();\n\n // In case we drop an item at the bottom of the list\n const [, drop] = useDrop<DragItem, DropResult | null, { isOver: boolean }>(\n () => ({\n accept: \"NODE\",\n hover: (item, m) => {\n if (!m.isOver({ shallow: true })) return;\n const offset = m.getClientOffset();\n if (!tree.listEl.current || !offset) return;\n const { cursor } = computeDrop({\n element: tree.listEl.current,\n offset: offset,\n indent: tree.indent,\n node: null,\n prevNode: tree.api.visibleNodes[tree.api.visibleNodes.length - 1],\n nextNode: null,\n });\n if (cursor) tree.api.showCursor(cursor);\n },\n canDrop: (item, m) => {\n return m.isOver({ shallow: true });\n },\n drop: (item, m) => {\n if (m.didDrop()) return;\n const offset = m.getClientOffset();\n if (!tree.listEl.current || !offset) return;\n const { drop } = computeDrop({\n element: tree.listEl.current,\n offset: offset,\n indent: tree.indent,\n node: null,\n prevNode: tree.api.visibleNodes[tree.api.visibleNodes.length - 1],\n nextNode: null,\n });\n return drop;\n },\n }),\n [tree]\n );\n\n drop(tree.listEl);\n}\n","import { XYCoord } from \"react-dnd\";\nimport { Node } from \"../types\";\nimport { bound, indexOf, isClosed, isFolder, isItem } from \"../utils\";\nimport { DropResult } from \"./drop-hook\";\n\nfunction measureHover(el: HTMLElement, offset: XYCoord) {\n const rect = el.getBoundingClientRect();\n const x = offset.x - Math.round(rect.x);\n const y = offset.y - Math.round(rect.y);\n const height = rect.height;\n const inTopHalf = y < height / 2;\n const inBottomHalf = !inTopHalf;\n const pad = height / 4;\n const inMiddle = y > pad && y < height - pad;\n const atTop = !inMiddle && inTopHalf;\n const atBottom = !inMiddle && inBottomHalf;\n return { x, inTopHalf, inBottomHalf, inMiddle, atTop, atBottom };\n}\n\ntype HoverData = ReturnType<typeof measureHover>;\n\nfunction getNodesAroundCursor(\n node: Node | null,\n prev: Node | null,\n next: Node | null,\n hover: HoverData\n): [Node | null, Node | null] {\n if (!node) {\n // We're hoving over the empty part of the list, not over an item,\n // Put the cursor below the last item which is \"prev\"\n return [prev, null];\n }\n if (isFolder(node)) {\n if (hover.atTop) {\n return [prev, node];\n } else if (hover.inMiddle) {\n return [node, node];\n } else {\n return [node, next];\n }\n } else {\n if (hover.inTopHalf) {\n return [prev, node];\n } else {\n return [node, next];\n }\n }\n}\n\ntype Args = {\n element: HTMLElement;\n offset: XYCoord;\n indent: number;\n node: Node | null;\n prevNode: Node | null;\n nextNode: Node | null;\n};\n\nfunction getDropLevel(\n hovering: HoverData,\n aboveCursor: Node | null,\n belowCursor: Node | null,\n indent: number\n) {\n const hoverLevel = Math.round(Math.max(0, hovering.x - indent) / indent);\n let min, max;\n if (!aboveCursor) {\n max = 0;\n min = 0;\n } else if (!belowCursor) {\n max = aboveCursor.level;\n min = 0;\n } else {\n max = aboveCursor.level;\n min = belowCursor.level;\n }\n\n return bound(hoverLevel, min, max);\n}\n\nfunction canDrop(above: Node | null, below: Node | null) {\n if (!above) {\n return true;\n }\n\n let n: Node | null = above;\n if (isClosed(above) && above !== below) n = above.parent;\n\n while (n) {\n if (!n.isDroppable) return false;\n n = n.parent;\n }\n return true;\n}\n\nexport type ComputedDrop = {\n drop: DropResult | null;\n cursor: Cursor | null;\n};\n\nfunction dropAt(parentId: string | undefined, index: number): DropResult {\n return { parentId: parentId || null, index };\n}\n\nfunction lineCursor(index: number, level: number) {\n return {\n type: \"line\" as \"line\",\n index,\n level,\n };\n}\n\nfunction noCursor() {\n return {\n type: \"none\" as \"none\",\n };\n}\n\nfunction highlightCursor(id: string) {\n return {\n type: \"highlight\" as \"highlight\",\n id,\n };\n}\n\nfunction walkUpFrom(node: Node, level: number) {\n let drop = node;\n while (drop.parent && drop.level > level) {\n drop = drop.parent;\n }\n const parentId = drop.parent?.id || null;\n const index = indexOf(drop) + 1;\n return { parentId, index };\n}\n\nexport type LineCursor = ReturnType<typeof lineCursor>;\nexport type NoCursor = ReturnType<typeof noCursor>;\nexport type HighlightCursor = ReturnType<typeof highlightCursor>;\nexport type Cursor = LineCursor | NoCursor | HighlightCursor;\n\n/**\n * This is the most complex, tricky function in the whole repo.\n * It could be simplified and made more understandable.\n */\nexport function computeDrop(args: Args): ComputedDrop {\n const hover = measureHover(args.element, args.offset);\n const { node, nextNode, prevNode } = args;\n const [above, below] = getNodesAroundCursor(node, prevNode, nextNode, hover);\n\n if (!canDrop(above, below)) {\n return { drop: null, cursor: noCursor() };\n }\n\n /* Hovering over the middle of a folder */\n if (node && isFolder(node) && hover.inMiddle) {\n return {\n drop: dropAt(node.id, 0),\n cursor: highlightCursor(node.id),\n };\n }\n\n /* At the top of the list */\n if (!above) {\n return {\n drop: dropAt(below?.parent?.id, 0),\n cursor: lineCursor(0, 0),\n };\n }\n\n /* The above node is an item or a closed folder */\n if (isItem(above) || isClosed(above)) {\n const level = getDropLevel(hover, above, below, args.indent);\n return {\n drop: walkUpFrom(above, level),\n cursor: lineCursor(above.rowIndex! + 1, level),\n };\n }\n\n /* The above node is an open folder */\n return {\n drop: dropAt(above?.id, 0),\n cursor: lineCursor(above.rowIndex! + 1, above.level + 1),\n };\n}\n","import { Node } from \"./types\";\n\nexport function bound(n: number, min: number, max: number) {\n return Math.max(Math.min(n, max), min);\n}\n\nexport const isFolder = (node: Node<any>) => !!node.children;\n\nexport function isItem(node: Node | null) {\n return node && !isFolder(node);\n}\n\nexport function isClosed(node: Node | null) {\n return node && isFolder(node) && !node.isOpen;\n}\n\n/**\n * Is first param a decendent of the second param\n */\nexport const isDecendent = (a: Node, b: Node) => {\n let n: Node | null = a;\n while (n) {\n if (n.id === b.id) return true;\n n = n.parent;\n }\n return false;\n};\n\nexport const indexOf = (node: Node) => {\n // This should probably not throw an error, but instead return null\n if (!node.parent) throw Error(\"Node does not have a parent\");\n return node.parent.children!.findIndex((c) => c.id === node.id);\n};\n\nexport function noop() {}\n","import { useImperativeHandle, useMemo, useReducer, useRef } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport {\n CursorLocationContext,\n CursorParentId,\n EditingIdContext,\n IsCursorOverFolder,\n SelectionContext,\n Static,\n} from \"./context\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { initState, reducer } from \"./reducer\";\nimport { useSelectionKeys } from \"./selection/selection-hook\";\nimport { useTreeApi } from \"./tree-api-hook\";\nimport { StateContext, StaticContext, TreeProviderProps } from \"./types\";\n\nexport function TreeViewProvider<T>(props: TreeProviderProps<T>) {\n const [state, dispatch] = useReducer(reducer, initState());\n const list = useRef<FixedSizeList>();\n const api = useTreeApi<T>(state, dispatch, props, list.current);\n\n useImperativeHandle(props.imperativeHandle, () => api);\n useSelectionKeys(props.listEl, api);\n const staticValue = useMemo<StaticContext<T>>(\n () => ({ ...props, api, list }),\n [props, api, list]\n );\n\n /**\n * This context pattern is ridiculous, next time use redux.\n */\n return (\n // @ts-ignore\n <Static.Provider value={staticValue}>\n <EditingIdContext.Provider value={state.editingId}>\n <SelectionContext.Provider value={state.selection}>\n <CursorParentId.Provider value={getParentId(state.cursor)}>\n <IsCursorOverFolder.Provider value={isOverFolder(state)}>\n <CursorLocationContext.Provider value={state.cursor}>\n {props.children}\n </CursorLocationContext.Provider>\n </IsCursorOverFolder.Provider>\n </CursorParentId.Provider>\n </SelectionContext.Provider>\n </EditingIdContext.Provider>\n </Static.Provider>\n );\n}\n\nfunction getParentId(cursor: Cursor) {\n switch (cursor.type) {\n case \"highlight\":\n return cursor.id;\n default:\n return null;\n }\n}\n\nfunction isOverFolder(state: StateContext) {\n return state.cursor.type === \"highlight\";\n}\n","import { Cursor } from \"./dnd/compute-drop\";\nimport { Selection } from \"./selection/selection\";\nimport { StateContext } from \"./types\";\n\nexport const initState = (): StateContext => ({\n visibleIds: [],\n cursor: { type: \"none\" } as Cursor,\n editingId: null,\n selection: {\n data: null,\n ids: [],\n },\n});\n\nexport const actions = {\n setCursorLocation: (cursor: Cursor) => ({\n type: \"SET_CURSOR_LOCATION\" as \"SET_CURSOR_LOCATION\",\n cursor,\n }),\n\n setVisibleIds: (\n ids: string[], // index to id\n idMap: { [id: string]: number } // id to index\n ) => ({\n type: \"SET_VISIBLE_IDS\" as \"SET_VISIBLE_IDS\",\n ids,\n idMap,\n }),\n\n select: (index: number | null, meta: boolean, shift: boolean) => ({\n type: \"SELECT\" as \"SELECT\",\n index,\n meta,\n shift,\n }),\n\n selectId: (id: string) => ({\n type: \"SELECT_ID\" as \"SELECT_ID\",\n id,\n }),\n\n edit: (id: string | null) => ({\n type: \"EDIT\" as \"EDIT\",\n id,\n }),\n\n stepUp: (shift: boolean, ids: string[]) => ({\n type: \"STEP_UP\" as \"STEP_UP\",\n shift,\n }),\n\n stepDown: (shift: boolean, ids: string[]) => ({\n type: \"STEP_DOWN\" as \"STEP_DOWN\",\n shift,\n }),\n};\n\ntype ActionObj = {\n [Prop in keyof typeof actions]: ReturnType<typeof actions[Prop]>;\n};\nexport type Action = ActionObj[keyof ActionObj];\n\nexport function reducer(state: StateContext, action: Action): StateContext {\n switch (action.type) {\n case \"EDIT\":\n return {\n ...state,\n editingId: action.id,\n };\n case \"SET_CURSOR_LOCATION\":\n if (equal(state.cursor, action.cursor)) {\n return state;\n } else {\n return { ...state, cursor: action.cursor };\n }\n case \"SELECT\":\n var s = Selection.parse(state.selection.data, state.visibleIds);\n if (action.index === null) {\n s.clear();\n } else if (action.meta) {\n if (s.contains(action.index)) {\n s.deselect(action.index);\n } else {\n s.multiSelect(action.index);\n }\n } else if (action.shift) {\n s.extend(action.index);\n } else {\n s.select(action.index);\n }\n return {\n ...state,\n selection: {\n data: s.serialize(),\n ids: s.getSelectedItems(),\n },\n };\n case \"SELECT_ID\":\n return {\n ...state,\n selection: {\n ...state.selection,\n ids: [action.id],\n },\n };\n case \"STEP_UP\":\n var s3 = Selection.parse(state.selection.data, state.visibleIds);\n var f = s3.getFocus();\n if (action.shift) {\n s3.extend(f - 1);\n } else {\n s3.select(f - 1);\n }\n return {\n ...state,\n selection: {\n data: s3.serialize(),\n ids: s3.getSelectedItems(),\n },\n };\n case \"STEP_DOWN\":\n var s6 = Selection.parse(state.selection.data, state.visibleIds);\n var f2 = s6.getFocus();\n if (action.shift) {\n s6.extend(f2 + 1);\n } else {\n s6.select(f2 + 1);\n }\n return {\n ...state,\n selection: {\n data: s6.serialize(),\n ids: s6.getSelectedItems(),\n },\n };\n case \"SET_VISIBLE_IDS\":\n // The visible ids changed\n var ids = state.selection.ids;\n // Start with a blank selection\n var s2 = new Selection([], null, \"none\", state.visibleIds);\n // Add each of the old selected ids to this new selection\n for (let id of ids) {\n if (id in action.idMap) s2.multiSelect(action.idMap[id]);\n }\n return {\n ...state,\n visibleIds: action.ids,\n selection: {\n ids,\n data: s2.serialize(),\n },\n };\n default:\n return state;\n }\n}\n\nfunction equal(a: Cursor | null, b: Cursor | null) {\n if (a === null || b === null) return false;\n return JSON.stringify(a) === JSON.stringify(b);\n}\n","import { MutableRefObject, useEffect } from \"react\";\nimport { TreeApi } from \"../tree-api\";\n\nexport function useSelectionKeys<T>(\n ref: MutableRefObject<HTMLDivElement | null>,\n api: TreeApi<T>\n) {\n useEffect(() => {\n const el = ref.current;\n const cb = (e: KeyboardEvent) => {\n if (e.code === \"ArrowDown\") {\n e.preventDefault();\n api.selectDownwards(e.shiftKey);\n } else if (e.code === \"ArrowUp\") {\n e.preventDefault();\n api.selectUpwards(e.shiftKey);\n }\n };\n el?.addEventListener(\"keydown\", cb);\n return () => {\n el?.removeEventListener(\"keydown\", cb);\n };\n }, [ref, api]);\n}\n","import { Dispatch, useLayoutEffect, useMemo } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport { Action, actions } from \"./reducer\";\nimport { TreeApi } from \"./tree-api\";\nimport { StateContext, TreeProviderProps } from \"./types\";\n\nexport function useTreeApi<T>(\n state: StateContext,\n dispatch: Dispatch<Action>,\n props: TreeProviderProps<T>,\n list: FixedSizeList | undefined\n) {\n /**\n * We only ever want one instance of the api object\n * It will get updated as the props change, but the\n * reference will not.\n */\n const api = useMemo(\n () => new TreeApi<T>(dispatch, state, props, list),\n // eslint-disable-next-line\n []\n );\n api.assign(dispatch, state, props, list);\n\n /**\n * This ensures that the selection remains correct even\n * after opening and closing a folders\n */\n useLayoutEffect(() => {\n dispatch(actions.setVisibleIds(api.visibleIds, api.idToIndex));\n }, [dispatch, api, props.root]);\n\n return api;\n}\n","import memoizeOne from \"memoize-one\";\nimport { Dispatch } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport { flattenTree } from \"./data/flatten-tree\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { Action, actions } from \"./reducer\";\nimport { Node, StateContext, TreeProviderProps, EditResult } from \"./types\";\nimport ReactDOM from \"react-dom\";\n\nexport class TreeApi<T = unknown> {\n private edits = new Map<string, (args: EditResult) => void>();\n\n constructor(\n public dispatch: Dispatch<Action>,\n public state: StateContext,\n public props: TreeProviderProps<T>,\n public list: FixedSizeList | undefined\n ) {}\n\n assign(\n dispatch: Dispatch<Action>,\n state: StateContext,\n props: TreeProviderProps<T>,\n list: FixedSizeList | undefined\n ) {\n this.dispatch = dispatch;\n this.state = state;\n this.props = props;\n this.list = list;\n }\n\n getNode(id: string): Node<unknown> | null {\n if (id in this.idToIndex)\n return this.visibleNodes[this.idToIndex[id]] || null;\n else return null;\n }\n\n getSelectedIds() {\n return this.state.selection.ids;\n }\n\n edit(id: string | number): Promise<EditResult> {\n const sid = id.toString();\n this.resolveEdit(sid, { cancelled: true });\n this.scrollToId(sid);\n this.dispatch(actions.edit(sid));\n return new Promise((resolve) => this.edits.set(sid, resolve));\n }\n\n submit(id: string | number, value: string) {\n const sid = id.toString();\n this.props.onEdit(sid, value);\n this.dispatch(actions.edit(null));\n this.resolveEdit(sid, { cancelled: false, value });\n }\n\n reset(id: string | number) {\n const sid = id.toString();\n this.dispatch(actions.edit(null));\n this.resolveEdit(sid, { cancelled: true });\n }\n\n private resolveEdit(id: string, value: EditResult) {\n const resolve = this.edits.get(id.toString());\n if (resolve) resolve(value);\n this.edits.delete(id);\n }\n\n select(index: number | null, meta = false, shift = false) {\n this.dispatch(actions.select(index, meta, shift));\n }\n\n selectById(id: string | number, meta = false, shift = false) {\n const index = this.idToIndex[id];\n this.select(index, meta, shift);\n }\n\n selectUpwards(shiftKey: boolean) {\n this.dispatch(actions.stepUp(shiftKey, this.visibleIds));\n }\n\n selectDownwards(shiftKey: boolean) {\n this.dispatch(actions.stepDown(shiftKey, this.visibleIds));\n }\n\n hideCursor() {\n this.dispatch(actions.setCursorLocation({ type: \"none\" }));\n }\n\n showCursor(cursor: Cursor) {\n this.dispatch(actions.setCursorLocation(cursor));\n }\n\n scrollToId(id: string) {\n if (!this.list) return;\n const index = this.idToIndex[id];\n if (index) {\n this.list.scrollToItem(index);\n } else {\n this.openParents(id);\n ReactDOM.flushSync(() => {\n const index = this.idToIndex[id];\n if (index) {\n this.list?.scrollToItem(index);\n }\n });\n }\n }\n\n open(id: string) {\n this.props.onToggle(id, true);\n }\n\n openParents(id: string) {\n const node = dfs(this.props.root, id);\n let parent = node?.parent;\n\n while (parent) {\n this.open(parent.id);\n parent = parent.parent;\n }\n }\n\n get visibleIds() {\n return getIds(this.visibleNodes);\n }\n\n get idToIndex() {\n return createIndex(this.visibleNodes);\n }\n\n get visibleNodes() {\n return createList(this.props.root);\n }\n}\n\nconst getIds = memoizeOne((nodes: Node[]) => nodes.map((n) => n.id));\nconst createIndex = memoizeOne((nodes: Node[]) => {\n return nodes.reduce<{ [id: string]: number }>((map, node, index) => {\n map[node.id] = index;\n return map;\n }, {});\n});\nconst createList = memoizeOne(flattenTree);\n\nfunction dfs(node: Node<unknown>, id: string): Node<unknown> | null {\n if (!node) return null;\n if (node.id === id) return node;\n if (node.children) {\n for (let child of node.children) {\n const result = dfs(child, id);\n if (result) return result;\n }\n }\n return null;\n}\n","import { Node } from \"../types\";\n\nexport function flattenTree<T>(root: Node<T>): Node<T>[] {\n const list: Node<T>[] = [];\n let index = 0;\n function collect(node: Node<T>) {\n if (node.level >= 0) {\n node.rowIndex = index++;\n list.push(node);\n }\n if (node.isOpen) {\n node.children?.forEach(collect);\n }\n }\n collect(root);\n return list;\n}\n","import React, { CSSProperties } from \"react\";\nimport { useCursorLocation, useStaticContext } from \"../context\";\n\nexport function DropCursor() {\n const treeView = useStaticContext();\n const cursor = useCursorLocation();\n if (!cursor || cursor.type !== \"line\") return null;\n const top = treeView.rowHeight * cursor.index;\n const left = treeView.indent * cursor.level;\n const style: CSSProperties = {\n position: \"absolute\",\n pointerEvents: \"none\",\n top: top - 2 + \"px\",\n left: treeView.indent + left + \"px\",\n right: treeView.indent + \"px\",\n };\n\n return <DefaultCursor style={style} />;\n}\n\nconst placeholderStyle = {\n display: \"flex\",\n alignItems: \"center\",\n};\n\nconst lineStyle = {\n flex: 1,\n height: \"2px\",\n background: \"#4B91E2\",\n borderRadius: \"1px\",\n};\n\nconst circleStyle = {\n width: \"4px\",\n height: \"4px\",\n boxShadow: \"0 0 0 3px #4B91E2\",\n borderRadius: \"50%\",\n};\n\nfunction DefaultCursor({ style }: { style: CSSProperties }) {\n return (\n <div style={{ ...placeholderStyle, ...style }}>\n <div style={{ ...circleStyle }}></div>\n <div style={{ ...lineStyle }}></div>\n </div>\n );\n}\n","import React, { CSSProperties, memo } from \"react\";\nimport { useDragLayer, XYCoord } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem } from \"../types\";\n\nconst layerStyles: CSSProperties = {\n position: \"fixed\",\n pointerEvents: \"none\",\n zIndex: 100,\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n};\n\nconst getStyle = (offset: XYCoord | null) => {\n if (!offset) return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x}px, ${y}px)` };\n};\n\nconst getCountStyle = (offset: XYCoord | null) => {\n if (!offset) return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x + 10}px, ${y + 10}px)` };\n};\n\nexport function Preview() {\n const { offset, mouse, item, isDragging } = useDragLayer((m) => ({\n offset: m.getSourceClientOffset(),\n mouse: m.getClientOffset(),\n item: m.getItem(),\n isDragging: m.isDragging(),\n }));\n\n return (\n <Overlay isDragging={isDragging}>\n <Position offset={offset}>\n <PreviewNode item={item} />\n </Position>\n <Count mouse={mouse} item={item} />\n </Overlay>\n );\n}\n\nconst Overlay = memo(function Overlay(props: {\n children: JSX.Element[];\n isDragging: boolean;\n}) {\n if (!props.isDragging) return null;\n return <div style={layerStyles}>{props.children}</div>;\n});\n\nfunction Position(props: { children: JSX.Element; offset: XYCoord | null }) {\n return (\n <div className=\"row preview\" style={getStyle(props.offset)}>\n {props.children}\n </div>\n );\n}\n\nfunction Count(props: { item: DragItem; mouse: XYCoord | null }) {\n const { item, mouse } = props;\n if (item?.dragIds?.length > 1)\n return (\n <div className=\"selected-count\" style={getCountStyle(mouse)}>\n {item.dragIds.length}\n </div>\n );\n else return null;\n}\n\nconst PreviewNode = memo(function PreviewNode(props: {\n item: DragItem | null;\n}) {\n const tree = useStaticContext();\n if (!props.item) return null;\n const node = tree.api.getNode(props.item.id);\n if (!node) return null;\n return (\n <tree.renderer\n preview\n innerRef={() => {}}\n data={node.model}\n styles={{\n row: {},\n indent: { paddingLeft: node.level * tree.indent },\n }}\n tree={tree.api}\n state={{\n isDragging: false,\n isEditing: false,\n isSelected: false,\n isSelectedStart: false,\n isSelectedEnd: false,\n isHoveringOverChild: false,\n isOpen: node.isOpen,\n }}\n handlers={{\n edit: () => Promise.resolve({ cancelled: true }),\n select: () => {},\n toggle: () => {},\n submit: () => {},\n reset: () => {},\n }}\n />\n );\n});\n","import React, { useCallback, useMemo, useRef } from \"react\";\nimport {\n useCursorParentId,\n useEditingId,\n useIsCursorOverFolder,\n useIsSelected,\n useStaticContext,\n} from \"../context\";\nimport { useDragHook } from \"../dnd/drag-hook\";\nimport { useDropHook } from \"../dnd/drop-hook\";\n\ntype Props = {\n style: React.CSSProperties;\n index: number;\n};\n\nexport const Row = React.memo(function Row({ index, style }: Props) {\n const tree = useStaticContext();\n const selected = useIsSelected();\n const node = tree.api.visibleNodes[index];\n const next = tree.api.visibleNodes[index + 1] || null;\n const prev = tree.api.visibleNodes[index - 1] || null;\n const cursorParentId = useCursorParentId();\n const cursorOverFolder = useIsCursorOverFolder();\n const el = useRef<HTMLDivElement | null>(null);\n const [{ isDragging }, dragRef] = useDragHook(node);\n const [, dropRef] = useDropHook(el, node, prev, next);\n const isEditing = node.id === useEditingId();\n const isSelected = selected(index);\n const nextSelected = next && selected(index + 1);\n const prevSelected = prev && selected(index - 1);\n const isHoveringOverChild = node.id === cursorParentId;\n const isOverFolder = node.id === cursorParentId && cursorOverFolder;\n const isOpen = node.isOpen;\n const indent = tree.indent * node.level;\n const state = useMemo(() => {\n return {\n isEditing,\n isDragging,\n isSelectedStart: isSelected && !prevSelected,\n isSelectedEnd: isSelected && !nextSelected,\n isSelected,\n isHoveringOverChild,\n isOpen,\n isOverFolder,\n };\n }, [\n isEditing,\n isSelected,\n prevSelected,\n nextSelected,\n isHoveringOverChild,\n isOpen,\n isDragging,\n isOverFolder,\n ]);\n\n const ref = useCallback(\n (n: HTMLDivElement | null) => {\n el.current = n;\n dragRef(dropRef(n));\n },\n [dragRef, dropRef]\n );\n\n const styles = useMemo(\n () => ({\n row: { ...style },\n indent: { paddingLeft: indent },\n }),\n [indent, style]\n );\n\n const handlers = useMemo(() => {\n return {\n select: (\n e: React.MouseEvent,\n args: { selectOnClick: boolean } = { selectOnClick: true }\n ) => {\n if (node.rowIndex === null) return;\n if (args.selectOnClick || e.metaKey || e.shiftKey) {\n tree.api.select(node.rowIndex, e.metaKey, e.shiftKey);\n } else {\n tree.api.select(null, false, false);\n }\n },\n toggle: (e: React.MouseEvent) => {\n e.stopPropagation();\n tree.onToggle(node.id, !node.isOpen);\n },\n edit: () => tree.api.edit(node.id),\n submit: (name: string) => {\n name.trim() ? tree.api.submit(node.id, name) : tree.api.reset(node.id);\n },\n reset: () => tree.api.reset(node.id),\n };\n }, [tree, node]);\n\n const Renderer = useMemo(() => {\n return React.memo(tree.renderer);\n }, [tree.renderer]);\n\n return (\n <Renderer\n innerRef={ref}\n data={node.model}\n styles={styles}\n state={state}\n handlers={handlers}\n preview={false}\n tree={tree.api}\n />\n );\n});\n","import { useEffect } from \"react\";\nimport { ConnectDragSource, useDrag } from \"react-dnd\";\nimport { getEmptyImage } from \"react-dnd-html5-backend\";\nimport { useIsSelected, useSelectedIds, useStaticContext } from \"../context\";\nimport { DragItem, Node } from \"../types\";\nimport { DropResult } from \"./drop-hook\";\n\ntype CollectedProps = { isDragging: boolean };\n\nexport function useDragHook(\n node: Node\n): [{ isDragging: boolean }, ConnectDragSource] {\n const tree = useStaticContext();\n const isSelected = useIsSelected();\n const ids = useSelectedIds();\n const [{ isDragging }, ref, preview] = useDrag<\n DragItem,\n DropResult,\n CollectedProps\n >(\n () => ({\n canDrag: () => node.isDraggable,\n type: \"NODE\",\n item: () => ({\n id: node.id,\n dragIds: isSelected(node.rowIndex) ? ids : [node.id],\n }),\n collect: (m) => ({\n isDragging: m.isDragging(),\n }),\n end: (item, monitor) => {\n tree.api.hideCursor();\n const drop = monitor.getDropResult();\n if (drop && drop.parentId) {\n tree.onMove(item.dragIds, drop.parentId, drop.index);\n tree.onToggle(drop.parentId, true);\n }\n },\n }),\n [ids, node]\n );\n\n useEffect(() => {\n preview(getEmptyImage());\n }, [preview]);\n\n return [{ isDragging }, ref];\n}\n","import { RefObject } from \"react\";\nimport { ConnectDropTarget, useDrop } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem, Node } from \"../types\";\nimport { isDecendent, isFolder } from \"../utils\";\nimport { computeDrop } from \"./compute-drop\";\n\nexport type DropResult = {\n parentId: string | null;\n index: number;\n};\n\nexport type CollectedProps = undefined;\n\nexport function useDropHook(\n el: RefObject<HTMLElement | null>,\n node: Node,\n prev: Node | null,\n next: Node | null\n): [CollectedProps, ConnectDropTarget] {\n const tree = useStaticContext();\n return useDrop<DragItem, DropResult | null, CollectedProps>(\n () => ({\n accept: \"NODE\",\n canDrop: (item) => {\n for (let id of item.dragIds) {\n const drag = tree.api.getNode(id);\n if (!drag) return false;\n if (isFolder(drag) && isDecendent(node, drag)) return false;\n }\n return true;\n },\n hover: (item, m) => {\n if (m.canDrop()) {\n const offset = m.getClientOffset();\n if (!el.current || !offset) return;\n const { cursor } = computeDrop({\n element: el.current,\n offset: offset,\n indent: tree.indent,\n node: node,\n prevNode: prev,\n nextNode: next,\n });\n if (cursor) tree.api.showCursor(cursor);\n } else {\n tree.api.hideCursor();\n }\n },\n drop: (item, m): DropResult | undefined | null => {\n const offset = m.getClientOffset();\n if (!el.current || !offset) return;\n const { drop } = computeDrop({\n element: el.current,\n offset: offset,\n indent: tree.indent,\n node: node,\n prevNode: prev,\n nextNode: next,\n });\n return drop;\n },\n }),\n [node, prev, el, tree]\n );\n}\n"],"names":[],"version":3,"file":"index.js.map"}
package/dist/module.js CHANGED
@@ -754,12 +754,12 @@ class $40fcfa3e17312481$export$e2da3477247342d1 {
754
754
  scrollToId(id) {
755
755
  if (!this.list) return;
756
756
  const index1 = this.idToIndex[id];
757
- if (index1) this.list.scrollToItem(index1, "start");
757
+ if (index1) this.list.scrollToItem(index1);
758
758
  else {
759
759
  this.openParents(id);
760
760
  $g00cZ$reactdom.flushSync(()=>{
761
761
  const index = this.idToIndex[id];
762
- if (index) this.list?.scrollToItem(index, "start");
762
+ if (index) this.list?.scrollToItem(index);
763
763
  });
764
764
  }
765
765
  }
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-arborist/src/index.ts","packages/react-arborist/src/components/tree.tsx","packages/react-arborist/src/context.tsx","packages/react-arborist/src/selection/selection.ts","packages/react-arborist/src/selection/range.ts","packages/react-arborist/src/data/enrich-tree.ts","packages/react-arborist/src/dnd/outer-drop-hook.ts","packages/react-arborist/src/dnd/compute-drop.ts","packages/react-arborist/src/utils.ts","packages/react-arborist/src/provider.tsx","packages/react-arborist/src/reducer.ts","packages/react-arborist/src/selection/selection-hook.ts","packages/react-arborist/src/tree-api-hook.ts","packages/react-arborist/src/tree-api.ts","packages/react-arborist/src/data/flatten-tree.ts","packages/react-arborist/src/components/drop-cursor.tsx","packages/react-arborist/src/components/preview.tsx","packages/react-arborist/src/components/row.tsx","packages/react-arborist/src/dnd/drag-hook.ts","packages/react-arborist/src/dnd/drop-hook.ts"],"sourcesContent":["import { Tree } from \"./components/tree\";\nimport { TreeApi } from \"./tree-api\";\nimport type { NodeRenderer, NodeState, NodeHandlers } from \"./types\";\n\nexport { Tree, TreeApi, NodeRenderer, NodeState, NodeHandlers };\n","import { forwardRef, MouseEventHandler, ReactElement, useMemo, useRef } from \"react\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { FixedSizeList } from \"react-window\";\nimport { useStaticContext } from \"../context\";\nimport { enrichTree } from \"../data/enrich-tree\";\nimport { useOuterDrop } from \"../dnd/outer-drop-hook\";\nimport { TreeViewProvider } from \"../provider\";\nimport { TreeApi } from \"../tree-api\";\nimport { IdObj, Node, TreeProps } from \"../types\";\nimport { noop } from \"../utils\";\nimport { DropCursor } from \"./drop-cursor\";\nimport { Preview } from \"./preview\";\nimport { Row } from \"./row\";\n\nconst OuterElement = forwardRef(function Outer(\n props: React.HTMLProps<HTMLDivElement>,\n ref\n) {\n const { children, ...rest } = props;\n const tree = useStaticContext();\n return (\n // @ts-ignore\n <div ref={ref} {...rest} onClick={tree.onClick} onContextMenu={tree.onContextMenu}>\n <div\n style={{\n height: tree.api.visibleNodes.length * tree.rowHeight,\n width: \"100%\",\n overflow: \"hidden\",\n position: \"absolute\",\n left: \"0\",\n right: \"0\",\n }}\n >\n <DropCursor />\n </div>\n {children}\n </div>\n );\n});\n\nfunction List(props: { className?: string}) {\n const tree = useStaticContext();\n return (\n <div style={{ height: tree.height, width: tree.width, overflow: \"hidden\" }}>\n <FixedSizeList\n className={props.className}\n outerRef={tree.listEl}\n itemCount={tree.api.visibleNodes.length}\n height={tree.height}\n width={tree.width}\n itemSize={tree.rowHeight}\n itemKey={(index) => tree.api.visibleNodes[index]?.id || index}\n outerElementType={OuterElement}\n // @ts-ignore\n ref={tree.list}\n >\n {Row}\n </FixedSizeList>\n </div>\n );\n}\n\nfunction OuterDrop(props: { children: ReactElement }) {\n useOuterDrop();\n return props.children;\n}\n\nexport const Tree = forwardRef(function Tree<T extends IdObj>(\n props: TreeProps<T>,\n ref: React.Ref<TreeApi<T>>\n) {\n const root = useMemo<Node<T>>(\n () =>\n enrichTree<T>(\n props.data,\n props.hideRoot,\n props.getChildren,\n props.isOpen,\n props.disableDrag,\n props.disableDrop,\n props.openByDefault\n ),\n [\n props.data,\n props.hideRoot,\n props.getChildren,\n props.isOpen,\n props.disableDrag,\n props.disableDrop,\n props.openByDefault,\n ]\n );\n return (\n <TreeViewProvider\n imperativeHandle={ref}\n root={root}\n listEl={useRef<HTMLDivElement | null>(null)}\n renderer={props.children}\n width={props.width === undefined ? 300 : props.width}\n height={props.height === undefined ? 500 : props.height}\n indent={props.indent === undefined ? 24 : props.indent}\n rowHeight={props.rowHeight === undefined ? 24 : props.rowHeight}\n onMove={props.onMove || noop}\n onToggle={props.onToggle || noop}\n onEdit={props.onEdit || noop}\n onClick={props.onClick}\n onContextMenu={props.onContextMenu}\n >\n <DndProvider backend={HTML5Backend}>\n <OuterDrop>\n <List className={props.className}/>\n </OuterDrop>\n <Preview />\n </DndProvider>\n </TreeViewProvider>\n );\n});\n","import { createContext, useContext, useMemo } from \"react\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { Selection } from \"./selection/selection\";\nimport { IdObj, SelectionState, StaticContext } from \"./types\";\n\nexport const CursorParentId = createContext<string | null>(null);\nexport function useCursorParentId() {\n return useContext(CursorParentId);\n}\n\nexport const IsCursorOverFolder = createContext<boolean>(false);\nexport function useIsCursorOverFolder() {\n return useContext(IsCursorOverFolder);\n}\n\nexport const CursorLocationContext = createContext<Cursor | null>(null);\nexport function useCursorLocation() {\n return useContext(CursorLocationContext);\n}\n\nexport const Static = createContext<StaticContext<IdObj> | null>(null);\nexport function useStaticContext() {\n const value = useContext(Static);\n if (!value) throw new Error(\"Context must be in a provider\");\n return value;\n}\n\nexport const DispatchContext = createContext(null);\nexport function useDispatch() {\n const dispatch = useContext(DispatchContext);\n if (!dispatch) throw new Error(\"No dispatch provided\");\n return dispatch;\n}\n\nexport const SelectionContext = createContext<SelectionState | null>(null);\nexport function useSelectedIds(): string[] {\n const value = useContext(SelectionContext);\n if (!value) throw new Error(\"Must provide selection context\");\n return value.ids;\n}\n\nexport function useIsSelected(): (index: number | null) => boolean {\n const value = useContext(SelectionContext);\n if (!value) throw new Error(\"Must provide selection context\");\n const s = useMemo(() => Selection.parse(value.data, []), [value.data]);\n return (i) => s.contains(i);\n}\n\nexport const EditingIdContext = createContext<string | null>(null);\nexport function useEditingId(): string | null {\n return useContext(EditingIdContext);\n}\n","import { Range } from \"./range\";\n\ntype SelectionDirection = \"forward\" | \"backward\" | \"none\";\n\nexport type SelectionData = {\n ranges: [number, number][];\n currentIndex: number | null;\n direction: SelectionDirection;\n};\n\nexport class Selection {\n ranges: Range[] = [];\n currentIndex: number | null;\n direction: SelectionDirection = \"none\";\n items: any[];\n\n static parse(data: SelectionData | null, items: any[]) {\n if (data) {\n return new Selection(\n data.ranges,\n data.currentIndex,\n data.direction,\n items\n );\n } else {\n return new Selection();\n }\n }\n\n constructor(\n ranges: [number, number][] = [],\n currentIndex: number | null = ranges.length ? ranges.length - 1 : null,\n direction: SelectionDirection = \"none\",\n items: any[] = []\n ) {\n ranges.forEach(([s, e]) => this.addRange(s, e));\n this.currentIndex = currentIndex;\n this.direction = direction;\n this.items = items;\n }\n\n get current() {\n if (this.currentIndex === null) return null;\n const range = this.ranges[this.currentIndex];\n if (!range) {\n return null;\n } else {\n return range;\n }\n }\n\n select(n: number) {\n if (n < 0 || n >= this.items.length) return;\n this.clear();\n this.currentIndex = this.addRange(n, n);\n }\n\n multiSelect(n: number) {\n if (n < 0 || n >= this.items.length) return;\n if (this.contains(n)) return;\n this.currentIndex = this.addRange(n, n);\n this.compact(n);\n }\n\n deselect(n: number) {\n if (n < 0 || n >= this.items.length) return;\n const r = this.ranges.find((r) => r.contains(n));\n if (!r) return;\n else if (r.size === 1) this.removeRange(r);\n else if (r.start === n) r.start++;\n else if (r.end === n) r.end--;\n else {\n this.removeRange(r);\n this.addRange(r.start, n - 1);\n this.currentIndex = this.addRange(n + 1, r.end);\n }\n }\n\n getSelectedItems<T>(): T[] {\n return this.ranges.flatMap((range) =>\n range.map((index) => this.items[index])\n );\n }\n\n extend(n: number) {\n if (n < 0 || n >= this.items.length) return;\n if (this.isEmpty()) {\n this.select(n);\n } else {\n const anchor = this.getAnchor();\n if (anchor !== null && this.current) {\n const [start, end] = [n, anchor].sort((a, b) => a - b);\n this.current.start = start;\n this.current.end = end;\n this.compact(n);\n }\n }\n }\n\n contains(n: number | null) {\n if (n === null) return false;\n return this.ranges.some((r) => r.contains(n));\n }\n\n getRanges() {\n return this.ranges.map((r) => r.serialize());\n }\n\n clear() {\n this.ranges = [];\n this.currentIndex = null;\n this.direction = \"none\";\n }\n\n serialize(): SelectionData {\n return {\n ranges: this.getRanges(),\n currentIndex: this.currentIndex,\n direction: this.direction,\n };\n }\n\n isEqual(other: Selection) {\n if (other.ranges.length !== this.ranges.length) return false;\n\n for (let i = 0; i < this.ranges.length; ++i) {\n if (!this.ranges[i].isEqual(other.ranges[i])) return false;\n }\n return true;\n }\n\n private addRange(start: number, end: number) {\n const r = new Range(start, end);\n // Keep ranges sorted by start\n const index = this.ranges.findIndex((r) => r.start >= start);\n if (index === -1) this.ranges.push(r);\n else this.ranges.splice(index, 0, r);\n return index === -1 ? this.ranges.length - 1 : index;\n }\n\n private removeRange(r: Range) {\n const index = this.ranges.indexOf(r);\n this.ranges.splice(index, 1);\n if (this.isEmpty()) {\n this.currentIndex = null;\n } else if (index === this.currentIndex) {\n this.currentIndex = this.ranges.length - 1;\n }\n }\n\n private isEmpty() {\n return this.ranges.length === 0;\n }\n\n getAnchor() {\n if (!this.current) return null;\n return this.direction === \"backward\"\n ? this.current.end\n : this.current.start;\n }\n\n getFocus() {\n if (!this.current) return -1;\n return this.direction === \"backward\"\n ? this.current.start\n : this.current.end;\n }\n\n private compact(focus: number) {\n const removals = [];\n const current = this.current;\n for (let r of this.ranges) {\n if (!this.current || r === this.current) continue;\n if (this.current.overlaps(r)) {\n this.current.combine(r);\n removals.push(r);\n }\n }\n removals.forEach((r) => this.removeRange(r));\n if (current) this.currentIndex = this.ranges.indexOf(current);\n if (!this.current) return;\n if (this.current.start < focus) this.direction = \"forward\";\n else if (this.current.end > focus) this.direction = \"backward\";\n else this.direction = \"none\";\n }\n}\n","export class Range {\n constructor(public start: number, public end: number) {\n if (this.start > this.end)\n throw new Error(\"Invalid range: start larger than end\");\n }\n\n serialize(): [number, number] {\n return [this.start, this.end];\n }\n\n contains(n: number) {\n return n >= this.start && n <= this.end;\n }\n\n overlaps(r: Range) {\n return this.contains(r.start - 1) || this.contains(r.end + 1);\n }\n\n combine(r: Range) {\n this.start = Math.min(r.start, this.start);\n this.end = Math.max(r.end, this.end);\n }\n\n get size() {\n return this.end - this.start + 1;\n }\n\n clone() {\n return new Range(this.start, this.end);\n }\n\n map(fn: (index: any) => string): any {\n let returns = [];\n for (let i = this.start; i <= this.end; i++) returns.push(fn(i));\n return returns;\n }\n\n isEqual(other: Range) {\n return this.start === other.start && this.end === other.end;\n }\n}\n","import { TreeProps, IdObj, Node } from \"../types\";\n\nfunction createNode<T extends IdObj>(\n model: T,\n level: number,\n parent: Node<T> | null,\n children: Node<T>[] | null,\n isOpen: boolean,\n isDraggable: boolean,\n isDroppable: boolean\n): Node<T> {\n return {\n id: model.id,\n level,\n parent,\n children,\n isOpen,\n isDraggable,\n isDroppable,\n model,\n rowIndex: null,\n };\n}\n\nfunction access(obj: any, accessor: string | boolean | Function) {\n if (typeof accessor === \"boolean\") {\n return accessor;\n }\n\n if (typeof accessor === \"string\") {\n return obj[accessor];\n }\n\n return accessor(obj);\n}\n\nexport function enrichTree<T extends IdObj>(\n model: T,\n hideRoot: boolean = false,\n getChildren: TreeProps<T>[\"getChildren\"] = \"children\",\n isOpen: TreeProps<T>[\"isOpen\"] = \"isOpen\",\n disableDrag: TreeProps<T>[\"disableDrag\"] = false,\n disableDrop: TreeProps<T>[\"disableDrop\"] = false,\n openByDefault: boolean = true\n): Node<T> {\n function visitSelfAndChildren(\n model: T,\n level: number,\n parent: Node<T> | null\n ) {\n const open = access(model, isOpen) as boolean;\n const draggable = !access(model, disableDrag) as boolean;\n const droppable = !access(model, disableDrop) as boolean;\n const node = createNode<T>(\n model,\n level,\n parent,\n null,\n open === undefined ? openByDefault : open,\n draggable,\n droppable\n );\n const children = access(model, getChildren) as T[];\n\n if (children) {\n node.children = children.map((child: T) =>\n visitSelfAndChildren(child, level + 1, node)\n );\n }\n return node;\n }\n\n return visitSelfAndChildren(model, hideRoot ? -1 : 0, null);\n}\n","import { useDrop } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem } from \"../types\";\nimport { computeDrop } from \"./compute-drop\";\nimport { DropResult } from \"./drop-hook\";\n\nexport function useOuterDrop() {\n const tree = useStaticContext();\n\n // In case we drop an item at the bottom of the list\n const [, drop] = useDrop<DragItem, DropResult | null, { isOver: boolean }>(\n () => ({\n accept: \"NODE\",\n hover: (item, m) => {\n if (!m.isOver({ shallow: true })) return;\n const offset = m.getClientOffset();\n if (!tree.listEl.current || !offset) return;\n const { cursor } = computeDrop({\n element: tree.listEl.current,\n offset: offset,\n indent: tree.indent,\n node: null,\n prevNode: tree.api.visibleNodes[tree.api.visibleNodes.length - 1],\n nextNode: null,\n });\n if (cursor) tree.api.showCursor(cursor);\n },\n canDrop: (item, m) => {\n return m.isOver({ shallow: true });\n },\n drop: (item, m) => {\n if (m.didDrop()) return;\n const offset = m.getClientOffset();\n if (!tree.listEl.current || !offset) return;\n const { drop } = computeDrop({\n element: tree.listEl.current,\n offset: offset,\n indent: tree.indent,\n node: null,\n prevNode: tree.api.visibleNodes[tree.api.visibleNodes.length - 1],\n nextNode: null,\n });\n return drop;\n },\n }),\n [tree]\n );\n\n drop(tree.listEl);\n}\n","import { XYCoord } from \"react-dnd\";\nimport { Node } from \"../types\";\nimport { bound, indexOf, isClosed, isFolder, isItem } from \"../utils\";\nimport { DropResult } from \"./drop-hook\";\n\nfunction measureHover(el: HTMLElement, offset: XYCoord) {\n const rect = el.getBoundingClientRect();\n const x = offset.x - Math.round(rect.x);\n const y = offset.y - Math.round(rect.y);\n const height = rect.height;\n const inTopHalf = y < height / 2;\n const inBottomHalf = !inTopHalf;\n const pad = height / 4;\n const inMiddle = y > pad && y < height - pad;\n const atTop = !inMiddle && inTopHalf;\n const atBottom = !inMiddle && inBottomHalf;\n return { x, inTopHalf, inBottomHalf, inMiddle, atTop, atBottom };\n}\n\ntype HoverData = ReturnType<typeof measureHover>;\n\nfunction getNodesAroundCursor(\n node: Node | null,\n prev: Node | null,\n next: Node | null,\n hover: HoverData\n): [Node | null, Node | null] {\n if (!node) {\n // We're hoving over the empty part of the list, not over an item,\n // Put the cursor below the last item which is \"prev\"\n return [prev, null];\n }\n if (isFolder(node)) {\n if (hover.atTop) {\n return [prev, node];\n } else if (hover.inMiddle) {\n return [node, node];\n } else {\n return [node, next];\n }\n } else {\n if (hover.inTopHalf) {\n return [prev, node];\n } else {\n return [node, next];\n }\n }\n}\n\ntype Args = {\n element: HTMLElement;\n offset: XYCoord;\n indent: number;\n node: Node | null;\n prevNode: Node | null;\n nextNode: Node | null;\n};\n\nfunction getDropLevel(\n hovering: HoverData,\n aboveCursor: Node | null,\n belowCursor: Node | null,\n indent: number\n) {\n const hoverLevel = Math.round(Math.max(0, hovering.x - indent) / indent);\n let min, max;\n if (!aboveCursor) {\n max = 0;\n min = 0;\n } else if (!belowCursor) {\n max = aboveCursor.level;\n min = 0;\n } else {\n max = aboveCursor.level;\n min = belowCursor.level;\n }\n\n return bound(hoverLevel, min, max);\n}\n\nfunction canDrop(above: Node | null, below: Node | null) {\n if (!above) {\n return true;\n }\n\n let n: Node | null = above;\n if (isClosed(above) && above !== below) n = above.parent;\n\n while (n) {\n if (!n.isDroppable) return false;\n n = n.parent;\n }\n return true;\n}\n\nexport type ComputedDrop = {\n drop: DropResult | null;\n cursor: Cursor | null;\n};\n\nfunction dropAt(parentId: string | undefined, index: number): DropResult {\n return { parentId: parentId || null, index };\n}\n\nfunction lineCursor(index: number, level: number) {\n return {\n type: \"line\" as \"line\",\n index,\n level,\n };\n}\n\nfunction noCursor() {\n return {\n type: \"none\" as \"none\",\n };\n}\n\nfunction highlightCursor(id: string) {\n return {\n type: \"highlight\" as \"highlight\",\n id,\n };\n}\n\nfunction walkUpFrom(node: Node, level: number) {\n let drop = node;\n while (drop.parent && drop.level > level) {\n drop = drop.parent;\n }\n const parentId = drop.parent?.id || null;\n const index = indexOf(drop) + 1;\n return { parentId, index };\n}\n\nexport type LineCursor = ReturnType<typeof lineCursor>;\nexport type NoCursor = ReturnType<typeof noCursor>;\nexport type HighlightCursor = ReturnType<typeof highlightCursor>;\nexport type Cursor = LineCursor | NoCursor | HighlightCursor;\n\n/**\n * This is the most complex, tricky function in the whole repo.\n * It could be simplified and made more understandable.\n */\nexport function computeDrop(args: Args): ComputedDrop {\n const hover = measureHover(args.element, args.offset);\n const { node, nextNode, prevNode } = args;\n const [above, below] = getNodesAroundCursor(node, prevNode, nextNode, hover);\n\n if (!canDrop(above, below)) {\n return { drop: null, cursor: noCursor() };\n }\n\n /* Hovering over the middle of a folder */\n if (node && isFolder(node) && hover.inMiddle) {\n return {\n drop: dropAt(node.id, 0),\n cursor: highlightCursor(node.id),\n };\n }\n\n /* At the top of the list */\n if (!above) {\n return {\n drop: dropAt(below?.parent?.id, 0),\n cursor: lineCursor(0, 0),\n };\n }\n\n /* The above node is an item or a closed folder */\n if (isItem(above) || isClosed(above)) {\n const level = getDropLevel(hover, above, below, args.indent);\n return {\n drop: walkUpFrom(above, level),\n cursor: lineCursor(above.rowIndex! + 1, level),\n };\n }\n\n /* The above node is an open folder */\n return {\n drop: dropAt(above?.id, 0),\n cursor: lineCursor(above.rowIndex! + 1, above.level + 1),\n };\n}\n","import { Node } from \"./types\";\n\nexport function bound(n: number, min: number, max: number) {\n return Math.max(Math.min(n, max), min);\n}\n\nexport const isFolder = (node: Node<any>) => !!node.children;\n\nexport function isItem(node: Node | null) {\n return node && !isFolder(node);\n}\n\nexport function isClosed(node: Node | null) {\n return node && isFolder(node) && !node.isOpen;\n}\n\n/**\n * Is first param a decendent of the second param\n */\nexport const isDecendent = (a: Node, b: Node) => {\n let n: Node | null = a;\n while (n) {\n if (n.id === b.id) return true;\n n = n.parent;\n }\n return false;\n};\n\nexport const indexOf = (node: Node) => {\n // This should probably not throw an error, but instead return null\n if (!node.parent) throw Error(\"Node does not have a parent\");\n return node.parent.children!.findIndex((c) => c.id === node.id);\n};\n\nexport function noop() {}\n","import { useImperativeHandle, useMemo, useReducer, useRef } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport {\n CursorLocationContext,\n CursorParentId,\n EditingIdContext,\n IsCursorOverFolder,\n SelectionContext,\n Static,\n} from \"./context\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { initState, reducer } from \"./reducer\";\nimport { useSelectionKeys } from \"./selection/selection-hook\";\nimport { useTreeApi } from \"./tree-api-hook\";\nimport { StateContext, StaticContext, TreeProviderProps } from \"./types\";\n\nexport function TreeViewProvider<T>(props: TreeProviderProps<T>) {\n const [state, dispatch] = useReducer(reducer, initState());\n const list = useRef<FixedSizeList>();\n const api = useTreeApi<T>(state, dispatch, props, list.current);\n\n useImperativeHandle(props.imperativeHandle, () => api);\n useSelectionKeys(props.listEl, api);\n const staticValue = useMemo<StaticContext<T>>(\n () => ({ ...props, api, list }),\n [props, api, list]\n );\n\n /**\n * This context pattern is ridiculous, next time use redux.\n */\n return (\n // @ts-ignore\n <Static.Provider value={staticValue}>\n <EditingIdContext.Provider value={state.editingId}>\n <SelectionContext.Provider value={state.selection}>\n <CursorParentId.Provider value={getParentId(state.cursor)}>\n <IsCursorOverFolder.Provider value={isOverFolder(state)}>\n <CursorLocationContext.Provider value={state.cursor}>\n {props.children}\n </CursorLocationContext.Provider>\n </IsCursorOverFolder.Provider>\n </CursorParentId.Provider>\n </SelectionContext.Provider>\n </EditingIdContext.Provider>\n </Static.Provider>\n );\n}\n\nfunction getParentId(cursor: Cursor) {\n switch (cursor.type) {\n case \"highlight\":\n return cursor.id;\n default:\n return null;\n }\n}\n\nfunction isOverFolder(state: StateContext) {\n return state.cursor.type === \"highlight\";\n}\n","import { Cursor } from \"./dnd/compute-drop\";\nimport { Selection } from \"./selection/selection\";\nimport { StateContext } from \"./types\";\n\nexport const initState = (): StateContext => ({\n visibleIds: [],\n cursor: { type: \"none\" } as Cursor,\n editingId: null,\n selection: {\n data: null,\n ids: [],\n },\n});\n\nexport const actions = {\n setCursorLocation: (cursor: Cursor) => ({\n type: \"SET_CURSOR_LOCATION\" as \"SET_CURSOR_LOCATION\",\n cursor,\n }),\n\n setVisibleIds: (\n ids: string[], // index to id\n idMap: { [id: string]: number } // id to index\n ) => ({\n type: \"SET_VISIBLE_IDS\" as \"SET_VISIBLE_IDS\",\n ids,\n idMap,\n }),\n\n select: (index: number | null, meta: boolean, shift: boolean) => ({\n type: \"SELECT\" as \"SELECT\",\n index,\n meta,\n shift,\n }),\n\n selectId: (id: string) => ({\n type: \"SELECT_ID\" as \"SELECT_ID\",\n id,\n }),\n\n edit: (id: string | null) => ({\n type: \"EDIT\" as \"EDIT\",\n id,\n }),\n\n stepUp: (shift: boolean, ids: string[]) => ({\n type: \"STEP_UP\" as \"STEP_UP\",\n shift,\n }),\n\n stepDown: (shift: boolean, ids: string[]) => ({\n type: \"STEP_DOWN\" as \"STEP_DOWN\",\n shift,\n }),\n};\n\ntype ActionObj = {\n [Prop in keyof typeof actions]: ReturnType<typeof actions[Prop]>;\n};\nexport type Action = ActionObj[keyof ActionObj];\n\nexport function reducer(state: StateContext, action: Action): StateContext {\n switch (action.type) {\n case \"EDIT\":\n return {\n ...state,\n editingId: action.id,\n };\n case \"SET_CURSOR_LOCATION\":\n if (equal(state.cursor, action.cursor)) {\n return state;\n } else {\n return { ...state, cursor: action.cursor };\n }\n case \"SELECT\":\n var s = Selection.parse(state.selection.data, state.visibleIds);\n if (action.index === null) {\n s.clear();\n } else if (action.meta) {\n if (s.contains(action.index)) {\n s.deselect(action.index);\n } else {\n s.multiSelect(action.index);\n }\n } else if (action.shift) {\n s.extend(action.index);\n } else {\n s.select(action.index);\n }\n return {\n ...state,\n selection: {\n data: s.serialize(),\n ids: s.getSelectedItems(),\n },\n };\n case \"SELECT_ID\":\n return {\n ...state,\n selection: {\n ...state.selection,\n ids: [action.id],\n },\n };\n case \"STEP_UP\":\n var s3 = Selection.parse(state.selection.data, state.visibleIds);\n var f = s3.getFocus();\n if (action.shift) {\n s3.extend(f - 1);\n } else {\n s3.select(f - 1);\n }\n return {\n ...state,\n selection: {\n data: s3.serialize(),\n ids: s3.getSelectedItems(),\n },\n };\n case \"STEP_DOWN\":\n var s6 = Selection.parse(state.selection.data, state.visibleIds);\n var f2 = s6.getFocus();\n if (action.shift) {\n s6.extend(f2 + 1);\n } else {\n s6.select(f2 + 1);\n }\n return {\n ...state,\n selection: {\n data: s6.serialize(),\n ids: s6.getSelectedItems(),\n },\n };\n case \"SET_VISIBLE_IDS\":\n // The visible ids changed\n var ids = state.selection.ids;\n // Start with a blank selection\n var s2 = new Selection([], null, \"none\", state.visibleIds);\n // Add each of the old selected ids to this new selection\n for (let id of ids) {\n if (id in action.idMap) s2.multiSelect(action.idMap[id]);\n }\n return {\n ...state,\n visibleIds: action.ids,\n selection: {\n ids,\n data: s2.serialize(),\n },\n };\n default:\n return state;\n }\n}\n\nfunction equal(a: Cursor | null, b: Cursor | null) {\n if (a === null || b === null) return false;\n return JSON.stringify(a) === JSON.stringify(b);\n}\n","import { MutableRefObject, useEffect } from \"react\";\nimport { TreeApi } from \"../tree-api\";\n\nexport function useSelectionKeys<T>(\n ref: MutableRefObject<HTMLDivElement | null>,\n api: TreeApi<T>\n) {\n useEffect(() => {\n const el = ref.current;\n const cb = (e: KeyboardEvent) => {\n if (e.code === \"ArrowDown\") {\n e.preventDefault();\n api.selectDownwards(e.shiftKey);\n } else if (e.code === \"ArrowUp\") {\n e.preventDefault();\n api.selectUpwards(e.shiftKey);\n }\n };\n el?.addEventListener(\"keydown\", cb);\n return () => {\n el?.removeEventListener(\"keydown\", cb);\n };\n }, [ref, api]);\n}\n","import { Dispatch, useLayoutEffect, useMemo } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport { Action, actions } from \"./reducer\";\nimport { TreeApi } from \"./tree-api\";\nimport { StateContext, TreeProviderProps } from \"./types\";\n\nexport function useTreeApi<T>(\n state: StateContext,\n dispatch: Dispatch<Action>,\n props: TreeProviderProps<T>,\n list: FixedSizeList | undefined\n) {\n /**\n * We only ever want one instance of the api object\n * It will get updated as the props change, but the\n * reference will not.\n */\n const api = useMemo(\n () => new TreeApi<T>(dispatch, state, props, list),\n // eslint-disable-next-line\n []\n );\n api.assign(dispatch, state, props, list);\n\n /**\n * This ensures that the selection remains correct even\n * after opening and closing a folders\n */\n useLayoutEffect(() => {\n dispatch(actions.setVisibleIds(api.visibleIds, api.idToIndex));\n }, [dispatch, api, props.root]);\n\n return api;\n}\n","import memoizeOne from \"memoize-one\";\nimport { Dispatch } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport { flattenTree } from \"./data/flatten-tree\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { Action, actions } from \"./reducer\";\nimport { Node, StateContext, TreeProviderProps, EditResult } from \"./types\";\nimport ReactDOM from \"react-dom\";\n\nexport class TreeApi<T = unknown> {\n private edits = new Map<string, (args: EditResult) => void>();\n\n constructor(\n public dispatch: Dispatch<Action>,\n public state: StateContext,\n public props: TreeProviderProps<T>,\n public list: FixedSizeList | undefined\n ) {}\n\n assign(\n dispatch: Dispatch<Action>,\n state: StateContext,\n props: TreeProviderProps<T>,\n list: FixedSizeList | undefined\n ) {\n this.dispatch = dispatch;\n this.state = state;\n this.props = props;\n this.list = list;\n }\n\n getNode(id: string): Node<unknown> | null {\n if (id in this.idToIndex)\n return this.visibleNodes[this.idToIndex[id]] || null;\n else return null;\n }\n\n getSelectedIds() {\n return this.state.selection.ids;\n }\n\n edit(id: string | number): Promise<EditResult> {\n const sid = id.toString();\n this.resolveEdit(sid, { cancelled: true });\n this.scrollToId(sid);\n this.dispatch(actions.edit(sid));\n return new Promise((resolve) => this.edits.set(sid, resolve));\n }\n\n submit(id: string | number, value: string) {\n const sid = id.toString();\n this.props.onEdit(sid, value);\n this.dispatch(actions.edit(null));\n this.resolveEdit(sid, { cancelled: false, value });\n }\n\n reset(id: string | number) {\n const sid = id.toString();\n this.dispatch(actions.edit(null));\n this.resolveEdit(sid, { cancelled: true });\n }\n\n private resolveEdit(id: string, value: EditResult) {\n const resolve = this.edits.get(id.toString());\n if (resolve) resolve(value);\n this.edits.delete(id);\n }\n\n select(index: number | null, meta = false, shift = false) {\n this.dispatch(actions.select(index, meta, shift));\n }\n\n selectById(id: string | number, meta = false, shift = false) {\n const index = this.idToIndex[id];\n this.select(index, meta, shift);\n }\n\n selectUpwards(shiftKey: boolean) {\n this.dispatch(actions.stepUp(shiftKey, this.visibleIds));\n }\n\n selectDownwards(shiftKey: boolean) {\n this.dispatch(actions.stepDown(shiftKey, this.visibleIds));\n }\n\n hideCursor() {\n this.dispatch(actions.setCursorLocation({ type: \"none\" }));\n }\n\n showCursor(cursor: Cursor) {\n this.dispatch(actions.setCursorLocation(cursor));\n }\n\n scrollToId(id: string) {\n if (!this.list) return;\n const index = this.idToIndex[id];\n if (index) {\n this.list.scrollToItem(index, \"start\");\n } else {\n this.openParents(id);\n ReactDOM.flushSync(() => {\n const index = this.idToIndex[id];\n if (index) {\n this.list?.scrollToItem(index, \"start\");\n }\n });\n }\n }\n\n open(id: string) {\n this.props.onToggle(id, true);\n }\n\n openParents(id: string) {\n const node = dfs(this.props.root, id);\n let parent = node?.parent;\n\n while (parent) {\n this.open(parent.id);\n parent = parent.parent;\n }\n }\n\n get visibleIds() {\n return getIds(this.visibleNodes);\n }\n\n get idToIndex() {\n return createIndex(this.visibleNodes);\n }\n\n get visibleNodes() {\n return createList(this.props.root);\n }\n}\n\nconst getIds = memoizeOne((nodes: Node[]) => nodes.map((n) => n.id));\nconst createIndex = memoizeOne((nodes: Node[]) => {\n return nodes.reduce<{ [id: string]: number }>((map, node, index) => {\n map[node.id] = index;\n return map;\n }, {});\n});\nconst createList = memoizeOne(flattenTree);\n\nfunction dfs(node: Node<unknown>, id: string): Node<unknown> | null {\n if (!node) return null;\n if (node.id === id) return node;\n if (node.children) {\n for (let child of node.children) {\n const result = dfs(child, id);\n if (result) return result;\n }\n }\n return null;\n}\n","import { Node } from \"../types\";\n\nexport function flattenTree<T>(root: Node<T>): Node<T>[] {\n const list: Node<T>[] = [];\n let index = 0;\n function collect(node: Node<T>) {\n if (node.level >= 0) {\n node.rowIndex = index++;\n list.push(node);\n }\n if (node.isOpen) {\n node.children?.forEach(collect);\n }\n }\n collect(root);\n return list;\n}\n","import React, { CSSProperties } from \"react\";\nimport { useCursorLocation, useStaticContext } from \"../context\";\n\nexport function DropCursor() {\n const treeView = useStaticContext();\n const cursor = useCursorLocation();\n if (!cursor || cursor.type !== \"line\") return null;\n const top = treeView.rowHeight * cursor.index;\n const left = treeView.indent * cursor.level;\n const style: CSSProperties = {\n position: \"absolute\",\n pointerEvents: \"none\",\n top: top - 2 + \"px\",\n left: treeView.indent + left + \"px\",\n right: treeView.indent + \"px\",\n };\n\n return <DefaultCursor style={style} />;\n}\n\nconst placeholderStyle = {\n display: \"flex\",\n alignItems: \"center\",\n};\n\nconst lineStyle = {\n flex: 1,\n height: \"2px\",\n background: \"#4B91E2\",\n borderRadius: \"1px\",\n};\n\nconst circleStyle = {\n width: \"4px\",\n height: \"4px\",\n boxShadow: \"0 0 0 3px #4B91E2\",\n borderRadius: \"50%\",\n};\n\nfunction DefaultCursor({ style }: { style: CSSProperties }) {\n return (\n <div style={{ ...placeholderStyle, ...style }}>\n <div style={{ ...circleStyle }}></div>\n <div style={{ ...lineStyle }}></div>\n </div>\n );\n}\n","import React, { CSSProperties, memo } from \"react\";\nimport { useDragLayer, XYCoord } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem } from \"../types\";\n\nconst layerStyles: CSSProperties = {\n position: \"fixed\",\n pointerEvents: \"none\",\n zIndex: 100,\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n};\n\nconst getStyle = (offset: XYCoord | null) => {\n if (!offset) return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x}px, ${y}px)` };\n};\n\nconst getCountStyle = (offset: XYCoord | null) => {\n if (!offset) return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x + 10}px, ${y + 10}px)` };\n};\n\nexport function Preview() {\n const { offset, mouse, item, isDragging } = useDragLayer((m) => ({\n offset: m.getSourceClientOffset(),\n mouse: m.getClientOffset(),\n item: m.getItem(),\n isDragging: m.isDragging(),\n }));\n\n return (\n <Overlay isDragging={isDragging}>\n <Position offset={offset}>\n <PreviewNode item={item} />\n </Position>\n <Count mouse={mouse} item={item} />\n </Overlay>\n );\n}\n\nconst Overlay = memo(function Overlay(props: {\n children: JSX.Element[];\n isDragging: boolean;\n}) {\n if (!props.isDragging) return null;\n return <div style={layerStyles}>{props.children}</div>;\n});\n\nfunction Position(props: { children: JSX.Element; offset: XYCoord | null }) {\n return (\n <div className=\"row preview\" style={getStyle(props.offset)}>\n {props.children}\n </div>\n );\n}\n\nfunction Count(props: { item: DragItem; mouse: XYCoord | null }) {\n const { item, mouse } = props;\n if (item?.dragIds?.length > 1)\n return (\n <div className=\"selected-count\" style={getCountStyle(mouse)}>\n {item.dragIds.length}\n </div>\n );\n else return null;\n}\n\nconst PreviewNode = memo(function PreviewNode(props: {\n item: DragItem | null;\n}) {\n const tree = useStaticContext();\n if (!props.item) return null;\n const node = tree.api.getNode(props.item.id);\n if (!node) return null;\n return (\n <tree.renderer\n preview\n innerRef={() => {}}\n data={node.model}\n styles={{\n row: {},\n indent: { paddingLeft: node.level * tree.indent },\n }}\n tree={tree.api}\n state={{\n isDragging: false,\n isEditing: false,\n isSelected: false,\n isSelectedStart: false,\n isSelectedEnd: false,\n isHoveringOverChild: false,\n isOpen: node.isOpen,\n }}\n handlers={{\n edit: () => Promise.resolve({ cancelled: true }),\n select: () => {},\n toggle: () => {},\n submit: () => {},\n reset: () => {},\n }}\n />\n );\n});\n","import React, { useCallback, useMemo, useRef } from \"react\";\nimport {\n useCursorParentId,\n useEditingId,\n useIsCursorOverFolder,\n useIsSelected,\n useStaticContext,\n} from \"../context\";\nimport { useDragHook } from \"../dnd/drag-hook\";\nimport { useDropHook } from \"../dnd/drop-hook\";\n\ntype Props = {\n style: React.CSSProperties;\n index: number;\n};\n\nexport const Row = React.memo(function Row({ index, style }: Props) {\n const tree = useStaticContext();\n const selected = useIsSelected();\n const node = tree.api.visibleNodes[index];\n const next = tree.api.visibleNodes[index + 1] || null;\n const prev = tree.api.visibleNodes[index - 1] || null;\n const cursorParentId = useCursorParentId();\n const cursorOverFolder = useIsCursorOverFolder();\n const el = useRef<HTMLDivElement | null>(null);\n const [{ isDragging }, dragRef] = useDragHook(node);\n const [, dropRef] = useDropHook(el, node, prev, next);\n const isEditing = node.id === useEditingId();\n const isSelected = selected(index);\n const nextSelected = next && selected(index + 1);\n const prevSelected = prev && selected(index - 1);\n const isHoveringOverChild = node.id === cursorParentId;\n const isOverFolder = node.id === cursorParentId && cursorOverFolder;\n const isOpen = node.isOpen;\n const indent = tree.indent * node.level;\n const state = useMemo(() => {\n return {\n isEditing,\n isDragging,\n isSelectedStart: isSelected && !prevSelected,\n isSelectedEnd: isSelected && !nextSelected,\n isSelected,\n isHoveringOverChild,\n isOpen,\n isOverFolder,\n };\n }, [\n isEditing,\n isSelected,\n prevSelected,\n nextSelected,\n isHoveringOverChild,\n isOpen,\n isDragging,\n isOverFolder,\n ]);\n\n const ref = useCallback(\n (n: HTMLDivElement | null) => {\n el.current = n;\n dragRef(dropRef(n));\n },\n [dragRef, dropRef]\n );\n\n const styles = useMemo(\n () => ({\n row: { ...style },\n indent: { paddingLeft: indent },\n }),\n [indent, style]\n );\n\n const handlers = useMemo(() => {\n return {\n select: (\n e: React.MouseEvent,\n args: { selectOnClick: boolean } = { selectOnClick: true }\n ) => {\n if (node.rowIndex === null) return;\n if (args.selectOnClick || e.metaKey || e.shiftKey) {\n tree.api.select(node.rowIndex, e.metaKey, e.shiftKey);\n } else {\n tree.api.select(null, false, false);\n }\n },\n toggle: (e: React.MouseEvent) => {\n e.stopPropagation();\n tree.onToggle(node.id, !node.isOpen);\n },\n edit: () => tree.api.edit(node.id),\n submit: (name: string) => {\n name.trim() ? tree.api.submit(node.id, name) : tree.api.reset(node.id);\n },\n reset: () => tree.api.reset(node.id),\n };\n }, [tree, node]);\n\n const Renderer = useMemo(() => {\n return React.memo(tree.renderer);\n }, [tree.renderer]);\n\n return (\n <Renderer\n innerRef={ref}\n data={node.model}\n styles={styles}\n state={state}\n handlers={handlers}\n preview={false}\n tree={tree.api}\n />\n );\n});\n","import { useEffect } from \"react\";\nimport { ConnectDragSource, useDrag } from \"react-dnd\";\nimport { getEmptyImage } from \"react-dnd-html5-backend\";\nimport { useIsSelected, useSelectedIds, useStaticContext } from \"../context\";\nimport { DragItem, Node } from \"../types\";\nimport { DropResult } from \"./drop-hook\";\n\ntype CollectedProps = { isDragging: boolean };\n\nexport function useDragHook(\n node: Node\n): [{ isDragging: boolean }, ConnectDragSource] {\n const tree = useStaticContext();\n const isSelected = useIsSelected();\n const ids = useSelectedIds();\n const [{ isDragging }, ref, preview] = useDrag<\n DragItem,\n DropResult,\n CollectedProps\n >(\n () => ({\n canDrag: () => node.isDraggable,\n type: \"NODE\",\n item: () => ({\n id: node.id,\n dragIds: isSelected(node.rowIndex) ? ids : [node.id],\n }),\n collect: (m) => ({\n isDragging: m.isDragging(),\n }),\n end: (item, monitor) => {\n tree.api.hideCursor();\n const drop = monitor.getDropResult();\n if (drop && drop.parentId) {\n tree.onMove(item.dragIds, drop.parentId, drop.index);\n tree.onToggle(drop.parentId, true);\n }\n },\n }),\n [ids, node]\n );\n\n useEffect(() => {\n preview(getEmptyImage());\n }, [preview]);\n\n return [{ isDragging }, ref];\n}\n","import { RefObject } from \"react\";\nimport { ConnectDropTarget, useDrop } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem, Node } from \"../types\";\nimport { isDecendent, isFolder } from \"../utils\";\nimport { computeDrop } from \"./compute-drop\";\n\nexport type DropResult = {\n parentId: string | null;\n index: number;\n};\n\nexport type CollectedProps = undefined;\n\nexport function useDropHook(\n el: RefObject<HTMLElement | null>,\n node: Node,\n prev: Node | null,\n next: Node | null\n): [CollectedProps, ConnectDropTarget] {\n const tree = useStaticContext();\n return useDrop<DragItem, DropResult | null, CollectedProps>(\n () => ({\n accept: \"NODE\",\n canDrop: (item) => {\n for (let id of item.dragIds) {\n const drag = tree.api.getNode(id);\n if (!drag) return false;\n if (isFolder(drag) && isDecendent(node, drag)) return false;\n }\n return true;\n },\n hover: (item, m) => {\n if (m.canDrop()) {\n const offset = m.getClientOffset();\n if (!el.current || !offset) return;\n const { cursor } = computeDrop({\n element: el.current,\n offset: offset,\n indent: tree.indent,\n node: node,\n prevNode: prev,\n nextNode: next,\n });\n if (cursor) tree.api.showCursor(cursor);\n } else {\n tree.api.hideCursor();\n }\n },\n drop: (item, m): DropResult | undefined | null => {\n const offset = m.getClientOffset();\n if (!el.current || !offset) return;\n const { drop } = computeDrop({\n element: el.current,\n offset: offset,\n indent: tree.indent,\n node: node,\n prevNode: prev,\n nextNode: next,\n });\n return drop;\n },\n }),\n [node, prev, el, tree]\n );\n}\n"],"names":[],"version":3,"file":"module.js.map"}
1
+ {"mappings":"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","sources":["packages/react-arborist/src/index.ts","packages/react-arborist/src/components/tree.tsx","packages/react-arborist/src/context.tsx","packages/react-arborist/src/selection/selection.ts","packages/react-arborist/src/selection/range.ts","packages/react-arborist/src/data/enrich-tree.ts","packages/react-arborist/src/dnd/outer-drop-hook.ts","packages/react-arborist/src/dnd/compute-drop.ts","packages/react-arborist/src/utils.ts","packages/react-arborist/src/provider.tsx","packages/react-arborist/src/reducer.ts","packages/react-arborist/src/selection/selection-hook.ts","packages/react-arborist/src/tree-api-hook.ts","packages/react-arborist/src/tree-api.ts","packages/react-arborist/src/data/flatten-tree.ts","packages/react-arborist/src/components/drop-cursor.tsx","packages/react-arborist/src/components/preview.tsx","packages/react-arborist/src/components/row.tsx","packages/react-arborist/src/dnd/drag-hook.ts","packages/react-arborist/src/dnd/drop-hook.ts"],"sourcesContent":["import { Tree } from \"./components/tree\";\nimport { TreeApi } from \"./tree-api\";\nimport type { NodeRenderer, NodeState, NodeHandlers } from \"./types\";\n\nexport { Tree, TreeApi, NodeRenderer, NodeState, NodeHandlers };\n","import { forwardRef, MouseEventHandler, ReactElement, useMemo, useRef } from \"react\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { FixedSizeList } from \"react-window\";\nimport { useStaticContext } from \"../context\";\nimport { enrichTree } from \"../data/enrich-tree\";\nimport { useOuterDrop } from \"../dnd/outer-drop-hook\";\nimport { TreeViewProvider } from \"../provider\";\nimport { TreeApi } from \"../tree-api\";\nimport { IdObj, Node, TreeProps } from \"../types\";\nimport { noop } from \"../utils\";\nimport { DropCursor } from \"./drop-cursor\";\nimport { Preview } from \"./preview\";\nimport { Row } from \"./row\";\n\nconst OuterElement = forwardRef(function Outer(\n props: React.HTMLProps<HTMLDivElement>,\n ref\n) {\n const { children, ...rest } = props;\n const tree = useStaticContext();\n return (\n // @ts-ignore\n <div ref={ref} {...rest} onClick={tree.onClick} onContextMenu={tree.onContextMenu}>\n <div\n style={{\n height: tree.api.visibleNodes.length * tree.rowHeight,\n width: \"100%\",\n overflow: \"hidden\",\n position: \"absolute\",\n left: \"0\",\n right: \"0\",\n }}\n >\n <DropCursor />\n </div>\n {children}\n </div>\n );\n});\n\nfunction List(props: { className?: string}) {\n const tree = useStaticContext();\n return (\n <div style={{ height: tree.height, width: tree.width, overflow: \"hidden\" }}>\n <FixedSizeList\n className={props.className}\n outerRef={tree.listEl}\n itemCount={tree.api.visibleNodes.length}\n height={tree.height}\n width={tree.width}\n itemSize={tree.rowHeight}\n itemKey={(index) => tree.api.visibleNodes[index]?.id || index}\n outerElementType={OuterElement}\n // @ts-ignore\n ref={tree.list}\n >\n {Row}\n </FixedSizeList>\n </div>\n );\n}\n\nfunction OuterDrop(props: { children: ReactElement }) {\n useOuterDrop();\n return props.children;\n}\n\nexport const Tree = forwardRef(function Tree<T extends IdObj>(\n props: TreeProps<T>,\n ref: React.Ref<TreeApi<T>>\n) {\n const root = useMemo<Node<T>>(\n () =>\n enrichTree<T>(\n props.data,\n props.hideRoot,\n props.getChildren,\n props.isOpen,\n props.disableDrag,\n props.disableDrop,\n props.openByDefault\n ),\n [\n props.data,\n props.hideRoot,\n props.getChildren,\n props.isOpen,\n props.disableDrag,\n props.disableDrop,\n props.openByDefault,\n ]\n );\n return (\n <TreeViewProvider\n imperativeHandle={ref}\n root={root}\n listEl={useRef<HTMLDivElement | null>(null)}\n renderer={props.children}\n width={props.width === undefined ? 300 : props.width}\n height={props.height === undefined ? 500 : props.height}\n indent={props.indent === undefined ? 24 : props.indent}\n rowHeight={props.rowHeight === undefined ? 24 : props.rowHeight}\n onMove={props.onMove || noop}\n onToggle={props.onToggle || noop}\n onEdit={props.onEdit || noop}\n onClick={props.onClick}\n onContextMenu={props.onContextMenu}\n >\n <DndProvider backend={HTML5Backend}>\n <OuterDrop>\n <List className={props.className}/>\n </OuterDrop>\n <Preview />\n </DndProvider>\n </TreeViewProvider>\n );\n});\n","import { createContext, useContext, useMemo } from \"react\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { Selection } from \"./selection/selection\";\nimport { IdObj, SelectionState, StaticContext } from \"./types\";\n\nexport const CursorParentId = createContext<string | null>(null);\nexport function useCursorParentId() {\n return useContext(CursorParentId);\n}\n\nexport const IsCursorOverFolder = createContext<boolean>(false);\nexport function useIsCursorOverFolder() {\n return useContext(IsCursorOverFolder);\n}\n\nexport const CursorLocationContext = createContext<Cursor | null>(null);\nexport function useCursorLocation() {\n return useContext(CursorLocationContext);\n}\n\nexport const Static = createContext<StaticContext<IdObj> | null>(null);\nexport function useStaticContext() {\n const value = useContext(Static);\n if (!value) throw new Error(\"Context must be in a provider\");\n return value;\n}\n\nexport const DispatchContext = createContext(null);\nexport function useDispatch() {\n const dispatch = useContext(DispatchContext);\n if (!dispatch) throw new Error(\"No dispatch provided\");\n return dispatch;\n}\n\nexport const SelectionContext = createContext<SelectionState | null>(null);\nexport function useSelectedIds(): string[] {\n const value = useContext(SelectionContext);\n if (!value) throw new Error(\"Must provide selection context\");\n return value.ids;\n}\n\nexport function useIsSelected(): (index: number | null) => boolean {\n const value = useContext(SelectionContext);\n if (!value) throw new Error(\"Must provide selection context\");\n const s = useMemo(() => Selection.parse(value.data, []), [value.data]);\n return (i) => s.contains(i);\n}\n\nexport const EditingIdContext = createContext<string | null>(null);\nexport function useEditingId(): string | null {\n return useContext(EditingIdContext);\n}\n","import { Range } from \"./range\";\n\ntype SelectionDirection = \"forward\" | \"backward\" | \"none\";\n\nexport type SelectionData = {\n ranges: [number, number][];\n currentIndex: number | null;\n direction: SelectionDirection;\n};\n\nexport class Selection {\n ranges: Range[] = [];\n currentIndex: number | null;\n direction: SelectionDirection = \"none\";\n items: any[];\n\n static parse(data: SelectionData | null, items: any[]) {\n if (data) {\n return new Selection(\n data.ranges,\n data.currentIndex,\n data.direction,\n items\n );\n } else {\n return new Selection();\n }\n }\n\n constructor(\n ranges: [number, number][] = [],\n currentIndex: number | null = ranges.length ? ranges.length - 1 : null,\n direction: SelectionDirection = \"none\",\n items: any[] = []\n ) {\n ranges.forEach(([s, e]) => this.addRange(s, e));\n this.currentIndex = currentIndex;\n this.direction = direction;\n this.items = items;\n }\n\n get current() {\n if (this.currentIndex === null) return null;\n const range = this.ranges[this.currentIndex];\n if (!range) {\n return null;\n } else {\n return range;\n }\n }\n\n select(n: number) {\n if (n < 0 || n >= this.items.length) return;\n this.clear();\n this.currentIndex = this.addRange(n, n);\n }\n\n multiSelect(n: number) {\n if (n < 0 || n >= this.items.length) return;\n if (this.contains(n)) return;\n this.currentIndex = this.addRange(n, n);\n this.compact(n);\n }\n\n deselect(n: number) {\n if (n < 0 || n >= this.items.length) return;\n const r = this.ranges.find((r) => r.contains(n));\n if (!r) return;\n else if (r.size === 1) this.removeRange(r);\n else if (r.start === n) r.start++;\n else if (r.end === n) r.end--;\n else {\n this.removeRange(r);\n this.addRange(r.start, n - 1);\n this.currentIndex = this.addRange(n + 1, r.end);\n }\n }\n\n getSelectedItems<T>(): T[] {\n return this.ranges.flatMap((range) =>\n range.map((index) => this.items[index])\n );\n }\n\n extend(n: number) {\n if (n < 0 || n >= this.items.length) return;\n if (this.isEmpty()) {\n this.select(n);\n } else {\n const anchor = this.getAnchor();\n if (anchor !== null && this.current) {\n const [start, end] = [n, anchor].sort((a, b) => a - b);\n this.current.start = start;\n this.current.end = end;\n this.compact(n);\n }\n }\n }\n\n contains(n: number | null) {\n if (n === null) return false;\n return this.ranges.some((r) => r.contains(n));\n }\n\n getRanges() {\n return this.ranges.map((r) => r.serialize());\n }\n\n clear() {\n this.ranges = [];\n this.currentIndex = null;\n this.direction = \"none\";\n }\n\n serialize(): SelectionData {\n return {\n ranges: this.getRanges(),\n currentIndex: this.currentIndex,\n direction: this.direction,\n };\n }\n\n isEqual(other: Selection) {\n if (other.ranges.length !== this.ranges.length) return false;\n\n for (let i = 0; i < this.ranges.length; ++i) {\n if (!this.ranges[i].isEqual(other.ranges[i])) return false;\n }\n return true;\n }\n\n private addRange(start: number, end: number) {\n const r = new Range(start, end);\n // Keep ranges sorted by start\n const index = this.ranges.findIndex((r) => r.start >= start);\n if (index === -1) this.ranges.push(r);\n else this.ranges.splice(index, 0, r);\n return index === -1 ? this.ranges.length - 1 : index;\n }\n\n private removeRange(r: Range) {\n const index = this.ranges.indexOf(r);\n this.ranges.splice(index, 1);\n if (this.isEmpty()) {\n this.currentIndex = null;\n } else if (index === this.currentIndex) {\n this.currentIndex = this.ranges.length - 1;\n }\n }\n\n private isEmpty() {\n return this.ranges.length === 0;\n }\n\n getAnchor() {\n if (!this.current) return null;\n return this.direction === \"backward\"\n ? this.current.end\n : this.current.start;\n }\n\n getFocus() {\n if (!this.current) return -1;\n return this.direction === \"backward\"\n ? this.current.start\n : this.current.end;\n }\n\n private compact(focus: number) {\n const removals = [];\n const current = this.current;\n for (let r of this.ranges) {\n if (!this.current || r === this.current) continue;\n if (this.current.overlaps(r)) {\n this.current.combine(r);\n removals.push(r);\n }\n }\n removals.forEach((r) => this.removeRange(r));\n if (current) this.currentIndex = this.ranges.indexOf(current);\n if (!this.current) return;\n if (this.current.start < focus) this.direction = \"forward\";\n else if (this.current.end > focus) this.direction = \"backward\";\n else this.direction = \"none\";\n }\n}\n","export class Range {\n constructor(public start: number, public end: number) {\n if (this.start > this.end)\n throw new Error(\"Invalid range: start larger than end\");\n }\n\n serialize(): [number, number] {\n return [this.start, this.end];\n }\n\n contains(n: number) {\n return n >= this.start && n <= this.end;\n }\n\n overlaps(r: Range) {\n return this.contains(r.start - 1) || this.contains(r.end + 1);\n }\n\n combine(r: Range) {\n this.start = Math.min(r.start, this.start);\n this.end = Math.max(r.end, this.end);\n }\n\n get size() {\n return this.end - this.start + 1;\n }\n\n clone() {\n return new Range(this.start, this.end);\n }\n\n map(fn: (index: any) => string): any {\n let returns = [];\n for (let i = this.start; i <= this.end; i++) returns.push(fn(i));\n return returns;\n }\n\n isEqual(other: Range) {\n return this.start === other.start && this.end === other.end;\n }\n}\n","import { TreeProps, IdObj, Node } from \"../types\";\n\nfunction createNode<T extends IdObj>(\n model: T,\n level: number,\n parent: Node<T> | null,\n children: Node<T>[] | null,\n isOpen: boolean,\n isDraggable: boolean,\n isDroppable: boolean\n): Node<T> {\n return {\n id: model.id,\n level,\n parent,\n children,\n isOpen,\n isDraggable,\n isDroppable,\n model,\n rowIndex: null,\n };\n}\n\nfunction access(obj: any, accessor: string | boolean | Function) {\n if (typeof accessor === \"boolean\") {\n return accessor;\n }\n\n if (typeof accessor === \"string\") {\n return obj[accessor];\n }\n\n return accessor(obj);\n}\n\nexport function enrichTree<T extends IdObj>(\n model: T,\n hideRoot: boolean = false,\n getChildren: TreeProps<T>[\"getChildren\"] = \"children\",\n isOpen: TreeProps<T>[\"isOpen\"] = \"isOpen\",\n disableDrag: TreeProps<T>[\"disableDrag\"] = false,\n disableDrop: TreeProps<T>[\"disableDrop\"] = false,\n openByDefault: boolean = true\n): Node<T> {\n function visitSelfAndChildren(\n model: T,\n level: number,\n parent: Node<T> | null\n ) {\n const open = access(model, isOpen) as boolean;\n const draggable = !access(model, disableDrag) as boolean;\n const droppable = !access(model, disableDrop) as boolean;\n const node = createNode<T>(\n model,\n level,\n parent,\n null,\n open === undefined ? openByDefault : open,\n draggable,\n droppable\n );\n const children = access(model, getChildren) as T[];\n\n if (children) {\n node.children = children.map((child: T) =>\n visitSelfAndChildren(child, level + 1, node)\n );\n }\n return node;\n }\n\n return visitSelfAndChildren(model, hideRoot ? -1 : 0, null);\n}\n","import { useDrop } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem } from \"../types\";\nimport { computeDrop } from \"./compute-drop\";\nimport { DropResult } from \"./drop-hook\";\n\nexport function useOuterDrop() {\n const tree = useStaticContext();\n\n // In case we drop an item at the bottom of the list\n const [, drop] = useDrop<DragItem, DropResult | null, { isOver: boolean }>(\n () => ({\n accept: \"NODE\",\n hover: (item, m) => {\n if (!m.isOver({ shallow: true })) return;\n const offset = m.getClientOffset();\n if (!tree.listEl.current || !offset) return;\n const { cursor } = computeDrop({\n element: tree.listEl.current,\n offset: offset,\n indent: tree.indent,\n node: null,\n prevNode: tree.api.visibleNodes[tree.api.visibleNodes.length - 1],\n nextNode: null,\n });\n if (cursor) tree.api.showCursor(cursor);\n },\n canDrop: (item, m) => {\n return m.isOver({ shallow: true });\n },\n drop: (item, m) => {\n if (m.didDrop()) return;\n const offset = m.getClientOffset();\n if (!tree.listEl.current || !offset) return;\n const { drop } = computeDrop({\n element: tree.listEl.current,\n offset: offset,\n indent: tree.indent,\n node: null,\n prevNode: tree.api.visibleNodes[tree.api.visibleNodes.length - 1],\n nextNode: null,\n });\n return drop;\n },\n }),\n [tree]\n );\n\n drop(tree.listEl);\n}\n","import { XYCoord } from \"react-dnd\";\nimport { Node } from \"../types\";\nimport { bound, indexOf, isClosed, isFolder, isItem } from \"../utils\";\nimport { DropResult } from \"./drop-hook\";\n\nfunction measureHover(el: HTMLElement, offset: XYCoord) {\n const rect = el.getBoundingClientRect();\n const x = offset.x - Math.round(rect.x);\n const y = offset.y - Math.round(rect.y);\n const height = rect.height;\n const inTopHalf = y < height / 2;\n const inBottomHalf = !inTopHalf;\n const pad = height / 4;\n const inMiddle = y > pad && y < height - pad;\n const atTop = !inMiddle && inTopHalf;\n const atBottom = !inMiddle && inBottomHalf;\n return { x, inTopHalf, inBottomHalf, inMiddle, atTop, atBottom };\n}\n\ntype HoverData = ReturnType<typeof measureHover>;\n\nfunction getNodesAroundCursor(\n node: Node | null,\n prev: Node | null,\n next: Node | null,\n hover: HoverData\n): [Node | null, Node | null] {\n if (!node) {\n // We're hoving over the empty part of the list, not over an item,\n // Put the cursor below the last item which is \"prev\"\n return [prev, null];\n }\n if (isFolder(node)) {\n if (hover.atTop) {\n return [prev, node];\n } else if (hover.inMiddle) {\n return [node, node];\n } else {\n return [node, next];\n }\n } else {\n if (hover.inTopHalf) {\n return [prev, node];\n } else {\n return [node, next];\n }\n }\n}\n\ntype Args = {\n element: HTMLElement;\n offset: XYCoord;\n indent: number;\n node: Node | null;\n prevNode: Node | null;\n nextNode: Node | null;\n};\n\nfunction getDropLevel(\n hovering: HoverData,\n aboveCursor: Node | null,\n belowCursor: Node | null,\n indent: number\n) {\n const hoverLevel = Math.round(Math.max(0, hovering.x - indent) / indent);\n let min, max;\n if (!aboveCursor) {\n max = 0;\n min = 0;\n } else if (!belowCursor) {\n max = aboveCursor.level;\n min = 0;\n } else {\n max = aboveCursor.level;\n min = belowCursor.level;\n }\n\n return bound(hoverLevel, min, max);\n}\n\nfunction canDrop(above: Node | null, below: Node | null) {\n if (!above) {\n return true;\n }\n\n let n: Node | null = above;\n if (isClosed(above) && above !== below) n = above.parent;\n\n while (n) {\n if (!n.isDroppable) return false;\n n = n.parent;\n }\n return true;\n}\n\nexport type ComputedDrop = {\n drop: DropResult | null;\n cursor: Cursor | null;\n};\n\nfunction dropAt(parentId: string | undefined, index: number): DropResult {\n return { parentId: parentId || null, index };\n}\n\nfunction lineCursor(index: number, level: number) {\n return {\n type: \"line\" as \"line\",\n index,\n level,\n };\n}\n\nfunction noCursor() {\n return {\n type: \"none\" as \"none\",\n };\n}\n\nfunction highlightCursor(id: string) {\n return {\n type: \"highlight\" as \"highlight\",\n id,\n };\n}\n\nfunction walkUpFrom(node: Node, level: number) {\n let drop = node;\n while (drop.parent && drop.level > level) {\n drop = drop.parent;\n }\n const parentId = drop.parent?.id || null;\n const index = indexOf(drop) + 1;\n return { parentId, index };\n}\n\nexport type LineCursor = ReturnType<typeof lineCursor>;\nexport type NoCursor = ReturnType<typeof noCursor>;\nexport type HighlightCursor = ReturnType<typeof highlightCursor>;\nexport type Cursor = LineCursor | NoCursor | HighlightCursor;\n\n/**\n * This is the most complex, tricky function in the whole repo.\n * It could be simplified and made more understandable.\n */\nexport function computeDrop(args: Args): ComputedDrop {\n const hover = measureHover(args.element, args.offset);\n const { node, nextNode, prevNode } = args;\n const [above, below] = getNodesAroundCursor(node, prevNode, nextNode, hover);\n\n if (!canDrop(above, below)) {\n return { drop: null, cursor: noCursor() };\n }\n\n /* Hovering over the middle of a folder */\n if (node && isFolder(node) && hover.inMiddle) {\n return {\n drop: dropAt(node.id, 0),\n cursor: highlightCursor(node.id),\n };\n }\n\n /* At the top of the list */\n if (!above) {\n return {\n drop: dropAt(below?.parent?.id, 0),\n cursor: lineCursor(0, 0),\n };\n }\n\n /* The above node is an item or a closed folder */\n if (isItem(above) || isClosed(above)) {\n const level = getDropLevel(hover, above, below, args.indent);\n return {\n drop: walkUpFrom(above, level),\n cursor: lineCursor(above.rowIndex! + 1, level),\n };\n }\n\n /* The above node is an open folder */\n return {\n drop: dropAt(above?.id, 0),\n cursor: lineCursor(above.rowIndex! + 1, above.level + 1),\n };\n}\n","import { Node } from \"./types\";\n\nexport function bound(n: number, min: number, max: number) {\n return Math.max(Math.min(n, max), min);\n}\n\nexport const isFolder = (node: Node<any>) => !!node.children;\n\nexport function isItem(node: Node | null) {\n return node && !isFolder(node);\n}\n\nexport function isClosed(node: Node | null) {\n return node && isFolder(node) && !node.isOpen;\n}\n\n/**\n * Is first param a decendent of the second param\n */\nexport const isDecendent = (a: Node, b: Node) => {\n let n: Node | null = a;\n while (n) {\n if (n.id === b.id) return true;\n n = n.parent;\n }\n return false;\n};\n\nexport const indexOf = (node: Node) => {\n // This should probably not throw an error, but instead return null\n if (!node.parent) throw Error(\"Node does not have a parent\");\n return node.parent.children!.findIndex((c) => c.id === node.id);\n};\n\nexport function noop() {}\n","import { useImperativeHandle, useMemo, useReducer, useRef } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport {\n CursorLocationContext,\n CursorParentId,\n EditingIdContext,\n IsCursorOverFolder,\n SelectionContext,\n Static,\n} from \"./context\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { initState, reducer } from \"./reducer\";\nimport { useSelectionKeys } from \"./selection/selection-hook\";\nimport { useTreeApi } from \"./tree-api-hook\";\nimport { StateContext, StaticContext, TreeProviderProps } from \"./types\";\n\nexport function TreeViewProvider<T>(props: TreeProviderProps<T>) {\n const [state, dispatch] = useReducer(reducer, initState());\n const list = useRef<FixedSizeList>();\n const api = useTreeApi<T>(state, dispatch, props, list.current);\n\n useImperativeHandle(props.imperativeHandle, () => api);\n useSelectionKeys(props.listEl, api);\n const staticValue = useMemo<StaticContext<T>>(\n () => ({ ...props, api, list }),\n [props, api, list]\n );\n\n /**\n * This context pattern is ridiculous, next time use redux.\n */\n return (\n // @ts-ignore\n <Static.Provider value={staticValue}>\n <EditingIdContext.Provider value={state.editingId}>\n <SelectionContext.Provider value={state.selection}>\n <CursorParentId.Provider value={getParentId(state.cursor)}>\n <IsCursorOverFolder.Provider value={isOverFolder(state)}>\n <CursorLocationContext.Provider value={state.cursor}>\n {props.children}\n </CursorLocationContext.Provider>\n </IsCursorOverFolder.Provider>\n </CursorParentId.Provider>\n </SelectionContext.Provider>\n </EditingIdContext.Provider>\n </Static.Provider>\n );\n}\n\nfunction getParentId(cursor: Cursor) {\n switch (cursor.type) {\n case \"highlight\":\n return cursor.id;\n default:\n return null;\n }\n}\n\nfunction isOverFolder(state: StateContext) {\n return state.cursor.type === \"highlight\";\n}\n","import { Cursor } from \"./dnd/compute-drop\";\nimport { Selection } from \"./selection/selection\";\nimport { StateContext } from \"./types\";\n\nexport const initState = (): StateContext => ({\n visibleIds: [],\n cursor: { type: \"none\" } as Cursor,\n editingId: null,\n selection: {\n data: null,\n ids: [],\n },\n});\n\nexport const actions = {\n setCursorLocation: (cursor: Cursor) => ({\n type: \"SET_CURSOR_LOCATION\" as \"SET_CURSOR_LOCATION\",\n cursor,\n }),\n\n setVisibleIds: (\n ids: string[], // index to id\n idMap: { [id: string]: number } // id to index\n ) => ({\n type: \"SET_VISIBLE_IDS\" as \"SET_VISIBLE_IDS\",\n ids,\n idMap,\n }),\n\n select: (index: number | null, meta: boolean, shift: boolean) => ({\n type: \"SELECT\" as \"SELECT\",\n index,\n meta,\n shift,\n }),\n\n selectId: (id: string) => ({\n type: \"SELECT_ID\" as \"SELECT_ID\",\n id,\n }),\n\n edit: (id: string | null) => ({\n type: \"EDIT\" as \"EDIT\",\n id,\n }),\n\n stepUp: (shift: boolean, ids: string[]) => ({\n type: \"STEP_UP\" as \"STEP_UP\",\n shift,\n }),\n\n stepDown: (shift: boolean, ids: string[]) => ({\n type: \"STEP_DOWN\" as \"STEP_DOWN\",\n shift,\n }),\n};\n\ntype ActionObj = {\n [Prop in keyof typeof actions]: ReturnType<typeof actions[Prop]>;\n};\nexport type Action = ActionObj[keyof ActionObj];\n\nexport function reducer(state: StateContext, action: Action): StateContext {\n switch (action.type) {\n case \"EDIT\":\n return {\n ...state,\n editingId: action.id,\n };\n case \"SET_CURSOR_LOCATION\":\n if (equal(state.cursor, action.cursor)) {\n return state;\n } else {\n return { ...state, cursor: action.cursor };\n }\n case \"SELECT\":\n var s = Selection.parse(state.selection.data, state.visibleIds);\n if (action.index === null) {\n s.clear();\n } else if (action.meta) {\n if (s.contains(action.index)) {\n s.deselect(action.index);\n } else {\n s.multiSelect(action.index);\n }\n } else if (action.shift) {\n s.extend(action.index);\n } else {\n s.select(action.index);\n }\n return {\n ...state,\n selection: {\n data: s.serialize(),\n ids: s.getSelectedItems(),\n },\n };\n case \"SELECT_ID\":\n return {\n ...state,\n selection: {\n ...state.selection,\n ids: [action.id],\n },\n };\n case \"STEP_UP\":\n var s3 = Selection.parse(state.selection.data, state.visibleIds);\n var f = s3.getFocus();\n if (action.shift) {\n s3.extend(f - 1);\n } else {\n s3.select(f - 1);\n }\n return {\n ...state,\n selection: {\n data: s3.serialize(),\n ids: s3.getSelectedItems(),\n },\n };\n case \"STEP_DOWN\":\n var s6 = Selection.parse(state.selection.data, state.visibleIds);\n var f2 = s6.getFocus();\n if (action.shift) {\n s6.extend(f2 + 1);\n } else {\n s6.select(f2 + 1);\n }\n return {\n ...state,\n selection: {\n data: s6.serialize(),\n ids: s6.getSelectedItems(),\n },\n };\n case \"SET_VISIBLE_IDS\":\n // The visible ids changed\n var ids = state.selection.ids;\n // Start with a blank selection\n var s2 = new Selection([], null, \"none\", state.visibleIds);\n // Add each of the old selected ids to this new selection\n for (let id of ids) {\n if (id in action.idMap) s2.multiSelect(action.idMap[id]);\n }\n return {\n ...state,\n visibleIds: action.ids,\n selection: {\n ids,\n data: s2.serialize(),\n },\n };\n default:\n return state;\n }\n}\n\nfunction equal(a: Cursor | null, b: Cursor | null) {\n if (a === null || b === null) return false;\n return JSON.stringify(a) === JSON.stringify(b);\n}\n","import { MutableRefObject, useEffect } from \"react\";\nimport { TreeApi } from \"../tree-api\";\n\nexport function useSelectionKeys<T>(\n ref: MutableRefObject<HTMLDivElement | null>,\n api: TreeApi<T>\n) {\n useEffect(() => {\n const el = ref.current;\n const cb = (e: KeyboardEvent) => {\n if (e.code === \"ArrowDown\") {\n e.preventDefault();\n api.selectDownwards(e.shiftKey);\n } else if (e.code === \"ArrowUp\") {\n e.preventDefault();\n api.selectUpwards(e.shiftKey);\n }\n };\n el?.addEventListener(\"keydown\", cb);\n return () => {\n el?.removeEventListener(\"keydown\", cb);\n };\n }, [ref, api]);\n}\n","import { Dispatch, useLayoutEffect, useMemo } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport { Action, actions } from \"./reducer\";\nimport { TreeApi } from \"./tree-api\";\nimport { StateContext, TreeProviderProps } from \"./types\";\n\nexport function useTreeApi<T>(\n state: StateContext,\n dispatch: Dispatch<Action>,\n props: TreeProviderProps<T>,\n list: FixedSizeList | undefined\n) {\n /**\n * We only ever want one instance of the api object\n * It will get updated as the props change, but the\n * reference will not.\n */\n const api = useMemo(\n () => new TreeApi<T>(dispatch, state, props, list),\n // eslint-disable-next-line\n []\n );\n api.assign(dispatch, state, props, list);\n\n /**\n * This ensures that the selection remains correct even\n * after opening and closing a folders\n */\n useLayoutEffect(() => {\n dispatch(actions.setVisibleIds(api.visibleIds, api.idToIndex));\n }, [dispatch, api, props.root]);\n\n return api;\n}\n","import memoizeOne from \"memoize-one\";\nimport { Dispatch } from \"react\";\nimport { FixedSizeList } from \"react-window\";\nimport { flattenTree } from \"./data/flatten-tree\";\nimport { Cursor } from \"./dnd/compute-drop\";\nimport { Action, actions } from \"./reducer\";\nimport { Node, StateContext, TreeProviderProps, EditResult } from \"./types\";\nimport ReactDOM from \"react-dom\";\n\nexport class TreeApi<T = unknown> {\n private edits = new Map<string, (args: EditResult) => void>();\n\n constructor(\n public dispatch: Dispatch<Action>,\n public state: StateContext,\n public props: TreeProviderProps<T>,\n public list: FixedSizeList | undefined\n ) {}\n\n assign(\n dispatch: Dispatch<Action>,\n state: StateContext,\n props: TreeProviderProps<T>,\n list: FixedSizeList | undefined\n ) {\n this.dispatch = dispatch;\n this.state = state;\n this.props = props;\n this.list = list;\n }\n\n getNode(id: string): Node<unknown> | null {\n if (id in this.idToIndex)\n return this.visibleNodes[this.idToIndex[id]] || null;\n else return null;\n }\n\n getSelectedIds() {\n return this.state.selection.ids;\n }\n\n edit(id: string | number): Promise<EditResult> {\n const sid = id.toString();\n this.resolveEdit(sid, { cancelled: true });\n this.scrollToId(sid);\n this.dispatch(actions.edit(sid));\n return new Promise((resolve) => this.edits.set(sid, resolve));\n }\n\n submit(id: string | number, value: string) {\n const sid = id.toString();\n this.props.onEdit(sid, value);\n this.dispatch(actions.edit(null));\n this.resolveEdit(sid, { cancelled: false, value });\n }\n\n reset(id: string | number) {\n const sid = id.toString();\n this.dispatch(actions.edit(null));\n this.resolveEdit(sid, { cancelled: true });\n }\n\n private resolveEdit(id: string, value: EditResult) {\n const resolve = this.edits.get(id.toString());\n if (resolve) resolve(value);\n this.edits.delete(id);\n }\n\n select(index: number | null, meta = false, shift = false) {\n this.dispatch(actions.select(index, meta, shift));\n }\n\n selectById(id: string | number, meta = false, shift = false) {\n const index = this.idToIndex[id];\n this.select(index, meta, shift);\n }\n\n selectUpwards(shiftKey: boolean) {\n this.dispatch(actions.stepUp(shiftKey, this.visibleIds));\n }\n\n selectDownwards(shiftKey: boolean) {\n this.dispatch(actions.stepDown(shiftKey, this.visibleIds));\n }\n\n hideCursor() {\n this.dispatch(actions.setCursorLocation({ type: \"none\" }));\n }\n\n showCursor(cursor: Cursor) {\n this.dispatch(actions.setCursorLocation(cursor));\n }\n\n scrollToId(id: string) {\n if (!this.list) return;\n const index = this.idToIndex[id];\n if (index) {\n this.list.scrollToItem(index);\n } else {\n this.openParents(id);\n ReactDOM.flushSync(() => {\n const index = this.idToIndex[id];\n if (index) {\n this.list?.scrollToItem(index);\n }\n });\n }\n }\n\n open(id: string) {\n this.props.onToggle(id, true);\n }\n\n openParents(id: string) {\n const node = dfs(this.props.root, id);\n let parent = node?.parent;\n\n while (parent) {\n this.open(parent.id);\n parent = parent.parent;\n }\n }\n\n get visibleIds() {\n return getIds(this.visibleNodes);\n }\n\n get idToIndex() {\n return createIndex(this.visibleNodes);\n }\n\n get visibleNodes() {\n return createList(this.props.root);\n }\n}\n\nconst getIds = memoizeOne((nodes: Node[]) => nodes.map((n) => n.id));\nconst createIndex = memoizeOne((nodes: Node[]) => {\n return nodes.reduce<{ [id: string]: number }>((map, node, index) => {\n map[node.id] = index;\n return map;\n }, {});\n});\nconst createList = memoizeOne(flattenTree);\n\nfunction dfs(node: Node<unknown>, id: string): Node<unknown> | null {\n if (!node) return null;\n if (node.id === id) return node;\n if (node.children) {\n for (let child of node.children) {\n const result = dfs(child, id);\n if (result) return result;\n }\n }\n return null;\n}\n","import { Node } from \"../types\";\n\nexport function flattenTree<T>(root: Node<T>): Node<T>[] {\n const list: Node<T>[] = [];\n let index = 0;\n function collect(node: Node<T>) {\n if (node.level >= 0) {\n node.rowIndex = index++;\n list.push(node);\n }\n if (node.isOpen) {\n node.children?.forEach(collect);\n }\n }\n collect(root);\n return list;\n}\n","import React, { CSSProperties } from \"react\";\nimport { useCursorLocation, useStaticContext } from \"../context\";\n\nexport function DropCursor() {\n const treeView = useStaticContext();\n const cursor = useCursorLocation();\n if (!cursor || cursor.type !== \"line\") return null;\n const top = treeView.rowHeight * cursor.index;\n const left = treeView.indent * cursor.level;\n const style: CSSProperties = {\n position: \"absolute\",\n pointerEvents: \"none\",\n top: top - 2 + \"px\",\n left: treeView.indent + left + \"px\",\n right: treeView.indent + \"px\",\n };\n\n return <DefaultCursor style={style} />;\n}\n\nconst placeholderStyle = {\n display: \"flex\",\n alignItems: \"center\",\n};\n\nconst lineStyle = {\n flex: 1,\n height: \"2px\",\n background: \"#4B91E2\",\n borderRadius: \"1px\",\n};\n\nconst circleStyle = {\n width: \"4px\",\n height: \"4px\",\n boxShadow: \"0 0 0 3px #4B91E2\",\n borderRadius: \"50%\",\n};\n\nfunction DefaultCursor({ style }: { style: CSSProperties }) {\n return (\n <div style={{ ...placeholderStyle, ...style }}>\n <div style={{ ...circleStyle }}></div>\n <div style={{ ...lineStyle }}></div>\n </div>\n );\n}\n","import React, { CSSProperties, memo } from \"react\";\nimport { useDragLayer, XYCoord } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem } from \"../types\";\n\nconst layerStyles: CSSProperties = {\n position: \"fixed\",\n pointerEvents: \"none\",\n zIndex: 100,\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n};\n\nconst getStyle = (offset: XYCoord | null) => {\n if (!offset) return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x}px, ${y}px)` };\n};\n\nconst getCountStyle = (offset: XYCoord | null) => {\n if (!offset) return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x + 10}px, ${y + 10}px)` };\n};\n\nexport function Preview() {\n const { offset, mouse, item, isDragging } = useDragLayer((m) => ({\n offset: m.getSourceClientOffset(),\n mouse: m.getClientOffset(),\n item: m.getItem(),\n isDragging: m.isDragging(),\n }));\n\n return (\n <Overlay isDragging={isDragging}>\n <Position offset={offset}>\n <PreviewNode item={item} />\n </Position>\n <Count mouse={mouse} item={item} />\n </Overlay>\n );\n}\n\nconst Overlay = memo(function Overlay(props: {\n children: JSX.Element[];\n isDragging: boolean;\n}) {\n if (!props.isDragging) return null;\n return <div style={layerStyles}>{props.children}</div>;\n});\n\nfunction Position(props: { children: JSX.Element; offset: XYCoord | null }) {\n return (\n <div className=\"row preview\" style={getStyle(props.offset)}>\n {props.children}\n </div>\n );\n}\n\nfunction Count(props: { item: DragItem; mouse: XYCoord | null }) {\n const { item, mouse } = props;\n if (item?.dragIds?.length > 1)\n return (\n <div className=\"selected-count\" style={getCountStyle(mouse)}>\n {item.dragIds.length}\n </div>\n );\n else return null;\n}\n\nconst PreviewNode = memo(function PreviewNode(props: {\n item: DragItem | null;\n}) {\n const tree = useStaticContext();\n if (!props.item) return null;\n const node = tree.api.getNode(props.item.id);\n if (!node) return null;\n return (\n <tree.renderer\n preview\n innerRef={() => {}}\n data={node.model}\n styles={{\n row: {},\n indent: { paddingLeft: node.level * tree.indent },\n }}\n tree={tree.api}\n state={{\n isDragging: false,\n isEditing: false,\n isSelected: false,\n isSelectedStart: false,\n isSelectedEnd: false,\n isHoveringOverChild: false,\n isOpen: node.isOpen,\n }}\n handlers={{\n edit: () => Promise.resolve({ cancelled: true }),\n select: () => {},\n toggle: () => {},\n submit: () => {},\n reset: () => {},\n }}\n />\n );\n});\n","import React, { useCallback, useMemo, useRef } from \"react\";\nimport {\n useCursorParentId,\n useEditingId,\n useIsCursorOverFolder,\n useIsSelected,\n useStaticContext,\n} from \"../context\";\nimport { useDragHook } from \"../dnd/drag-hook\";\nimport { useDropHook } from \"../dnd/drop-hook\";\n\ntype Props = {\n style: React.CSSProperties;\n index: number;\n};\n\nexport const Row = React.memo(function Row({ index, style }: Props) {\n const tree = useStaticContext();\n const selected = useIsSelected();\n const node = tree.api.visibleNodes[index];\n const next = tree.api.visibleNodes[index + 1] || null;\n const prev = tree.api.visibleNodes[index - 1] || null;\n const cursorParentId = useCursorParentId();\n const cursorOverFolder = useIsCursorOverFolder();\n const el = useRef<HTMLDivElement | null>(null);\n const [{ isDragging }, dragRef] = useDragHook(node);\n const [, dropRef] = useDropHook(el, node, prev, next);\n const isEditing = node.id === useEditingId();\n const isSelected = selected(index);\n const nextSelected = next && selected(index + 1);\n const prevSelected = prev && selected(index - 1);\n const isHoveringOverChild = node.id === cursorParentId;\n const isOverFolder = node.id === cursorParentId && cursorOverFolder;\n const isOpen = node.isOpen;\n const indent = tree.indent * node.level;\n const state = useMemo(() => {\n return {\n isEditing,\n isDragging,\n isSelectedStart: isSelected && !prevSelected,\n isSelectedEnd: isSelected && !nextSelected,\n isSelected,\n isHoveringOverChild,\n isOpen,\n isOverFolder,\n };\n }, [\n isEditing,\n isSelected,\n prevSelected,\n nextSelected,\n isHoveringOverChild,\n isOpen,\n isDragging,\n isOverFolder,\n ]);\n\n const ref = useCallback(\n (n: HTMLDivElement | null) => {\n el.current = n;\n dragRef(dropRef(n));\n },\n [dragRef, dropRef]\n );\n\n const styles = useMemo(\n () => ({\n row: { ...style },\n indent: { paddingLeft: indent },\n }),\n [indent, style]\n );\n\n const handlers = useMemo(() => {\n return {\n select: (\n e: React.MouseEvent,\n args: { selectOnClick: boolean } = { selectOnClick: true }\n ) => {\n if (node.rowIndex === null) return;\n if (args.selectOnClick || e.metaKey || e.shiftKey) {\n tree.api.select(node.rowIndex, e.metaKey, e.shiftKey);\n } else {\n tree.api.select(null, false, false);\n }\n },\n toggle: (e: React.MouseEvent) => {\n e.stopPropagation();\n tree.onToggle(node.id, !node.isOpen);\n },\n edit: () => tree.api.edit(node.id),\n submit: (name: string) => {\n name.trim() ? tree.api.submit(node.id, name) : tree.api.reset(node.id);\n },\n reset: () => tree.api.reset(node.id),\n };\n }, [tree, node]);\n\n const Renderer = useMemo(() => {\n return React.memo(tree.renderer);\n }, [tree.renderer]);\n\n return (\n <Renderer\n innerRef={ref}\n data={node.model}\n styles={styles}\n state={state}\n handlers={handlers}\n preview={false}\n tree={tree.api}\n />\n );\n});\n","import { useEffect } from \"react\";\nimport { ConnectDragSource, useDrag } from \"react-dnd\";\nimport { getEmptyImage } from \"react-dnd-html5-backend\";\nimport { useIsSelected, useSelectedIds, useStaticContext } from \"../context\";\nimport { DragItem, Node } from \"../types\";\nimport { DropResult } from \"./drop-hook\";\n\ntype CollectedProps = { isDragging: boolean };\n\nexport function useDragHook(\n node: Node\n): [{ isDragging: boolean }, ConnectDragSource] {\n const tree = useStaticContext();\n const isSelected = useIsSelected();\n const ids = useSelectedIds();\n const [{ isDragging }, ref, preview] = useDrag<\n DragItem,\n DropResult,\n CollectedProps\n >(\n () => ({\n canDrag: () => node.isDraggable,\n type: \"NODE\",\n item: () => ({\n id: node.id,\n dragIds: isSelected(node.rowIndex) ? ids : [node.id],\n }),\n collect: (m) => ({\n isDragging: m.isDragging(),\n }),\n end: (item, monitor) => {\n tree.api.hideCursor();\n const drop = monitor.getDropResult();\n if (drop && drop.parentId) {\n tree.onMove(item.dragIds, drop.parentId, drop.index);\n tree.onToggle(drop.parentId, true);\n }\n },\n }),\n [ids, node]\n );\n\n useEffect(() => {\n preview(getEmptyImage());\n }, [preview]);\n\n return [{ isDragging }, ref];\n}\n","import { RefObject } from \"react\";\nimport { ConnectDropTarget, useDrop } from \"react-dnd\";\nimport { useStaticContext } from \"../context\";\nimport { DragItem, Node } from \"../types\";\nimport { isDecendent, isFolder } from \"../utils\";\nimport { computeDrop } from \"./compute-drop\";\n\nexport type DropResult = {\n parentId: string | null;\n index: number;\n};\n\nexport type CollectedProps = undefined;\n\nexport function useDropHook(\n el: RefObject<HTMLElement | null>,\n node: Node,\n prev: Node | null,\n next: Node | null\n): [CollectedProps, ConnectDropTarget] {\n const tree = useStaticContext();\n return useDrop<DragItem, DropResult | null, CollectedProps>(\n () => ({\n accept: \"NODE\",\n canDrop: (item) => {\n for (let id of item.dragIds) {\n const drag = tree.api.getNode(id);\n if (!drag) return false;\n if (isFolder(drag) && isDecendent(node, drag)) return false;\n }\n return true;\n },\n hover: (item, m) => {\n if (m.canDrop()) {\n const offset = m.getClientOffset();\n if (!el.current || !offset) return;\n const { cursor } = computeDrop({\n element: el.current,\n offset: offset,\n indent: tree.indent,\n node: node,\n prevNode: prev,\n nextNode: next,\n });\n if (cursor) tree.api.showCursor(cursor);\n } else {\n tree.api.hideCursor();\n }\n },\n drop: (item, m): DropResult | undefined | null => {\n const offset = m.getClientOffset();\n if (!el.current || !offset) return;\n const { drop } = computeDrop({\n element: el.current,\n offset: offset,\n indent: tree.indent,\n node: node,\n prevNode: prev,\n nextNode: next,\n });\n return drop;\n },\n }),\n [node, prev, el, tree]\n );\n}\n"],"names":[],"version":3,"file":"module.js.map"}
package/package.json CHANGED
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "name": "react-arborist",
3
- "version": "1.0.0",
3
+ "version": "1.0.4",
4
4
  "license": "MIT",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/module.js",
8
8
  "types": "dist/index.d.ts",
9
+ "repository": "github:brimdata/react-arborist",
10
+ "homepage": "https://react-arborist.netlify.app",
9
11
  "dependencies": {
10
12
  "memoize-one": "^6.0.0",
11
13
  "react-dnd": "^14.0.3",
package/src/tree-api.ts CHANGED
@@ -95,13 +95,13 @@ export class TreeApi<T = unknown> {
95
95
  if (!this.list) return;
96
96
  const index = this.idToIndex[id];
97
97
  if (index) {
98
- this.list.scrollToItem(index, "start");
98
+ this.list.scrollToItem(index);
99
99
  } else {
100
100
  this.openParents(id);
101
101
  ReactDOM.flushSync(() => {
102
102
  const index = this.idToIndex[id];
103
103
  if (index) {
104
- this.list?.scrollToItem(index, "start");
104
+ this.list?.scrollToItem(index);
105
105
  }
106
106
  });
107
107
  }