@jchinkle/react-arborist
Version:
1,517 lines (1,414 loc) • 82.5 kB
JavaScript
var $8zHUo$reactjsxruntime = require("react/jsx-runtime");
var $8zHUo$react = require("react");
var $8zHUo$usesyncexternalstoreshim = require("use-sync-external-store/shim");
var $8zHUo$reactdndhtml5backend = require("react-dnd-html5-backend");
var $8zHUo$reactdnd = require("react-dnd");
var $8zHUo$redux = require("redux");
var $8zHUo$reactwindow = require("react-window");
function $parcel$exportWildcard(dest, source) {
Object.keys(source).forEach(function(key) {
if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {
return;
}
Object.defineProperty(dest, key, {
enumerable: true,
get: function get() {
return source[key];
}
});
});
return dest;
}
function $parcel$export(e, n, v, s) {
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
}
function $parcel$interopDefault(a) {
return a && a.__esModule ? a.default : a;
}
$parcel$export(module.exports, "Tree", () => $4e2fcf2ca763d051$export$7fbedc92909ed28e);
/* The Public Api */
const $53e78f2af9ed7736$export$feef243b04ff4151 = (0, $8zHUo$react.createContext)(null);
function $53e78f2af9ed7736$export$367b0f2231a90ba0() {
const value = (0, $8zHUo$react.useContext)($53e78f2af9ed7736$export$feef243b04ff4151);
if (value === null) throw new Error("No Tree Api Provided");
return value;
}
const $53e78f2af9ed7736$export$f6d467aa8b3786af = (0, $8zHUo$react.createContext)(null);
function $53e78f2af9ed7736$export$fd23f19d5d8f3033() {
const value = (0, $8zHUo$react.useContext)($53e78f2af9ed7736$export$f6d467aa8b3786af);
if (value === null) throw new Error("Provide a NodesContext");
return value;
}
const $53e78f2af9ed7736$export$2d5c5ceac203fc1e = (0, $8zHUo$react.createContext)(null);
function $53e78f2af9ed7736$export$4930f6bf413be70e() {
const value = (0, $8zHUo$react.useContext)($53e78f2af9ed7736$export$2d5c5ceac203fc1e);
if (value === null) throw new Error("Provide a DnDContext");
return value;
}
const $53e78f2af9ed7736$export$d0c71bc5e3e2d897 = (0, $8zHUo$react.createContext)(0);
function $53e78f2af9ed7736$export$83a4f9dc3b36edb8() {
(0, $8zHUo$react.useContext)($53e78f2af9ed7736$export$d0c71bc5e3e2d897);
}
var $c0491d23d353beb3$exports = {};
$parcel$export($c0491d23d353beb3$exports, "TreeApi", () => $c0491d23d353beb3$export$e2da3477247342d1);
var $9ba0f9a5c47c04f2$exports = {};
$parcel$export($9ba0f9a5c47c04f2$exports, "bound", () => $9ba0f9a5c47c04f2$export$adf7c0fe6059d774);
$parcel$export($9ba0f9a5c47c04f2$exports, "isItem", () => $9ba0f9a5c47c04f2$export$5318634f2ee07019);
$parcel$export($9ba0f9a5c47c04f2$exports, "isClosed", () => $9ba0f9a5c47c04f2$export$4210f5ea57fbae57);
$parcel$export($9ba0f9a5c47c04f2$exports, "isDecendent", () => $9ba0f9a5c47c04f2$export$1e38f72c6c546f70);
$parcel$export($9ba0f9a5c47c04f2$exports, "indexOf", () => $9ba0f9a5c47c04f2$export$305f7d4e9d4624f2);
$parcel$export($9ba0f9a5c47c04f2$exports, "noop", () => $9ba0f9a5c47c04f2$export$8793edee2d425525);
$parcel$export($9ba0f9a5c47c04f2$exports, "dfs", () => $9ba0f9a5c47c04f2$export$51b654aff22fc5a6);
$parcel$export($9ba0f9a5c47c04f2$exports, "walk", () => $9ba0f9a5c47c04f2$export$588732934346abbf);
$parcel$export($9ba0f9a5c47c04f2$exports, "focusNextElement", () => $9ba0f9a5c47c04f2$export$3b0237e8566c8d65);
$parcel$export($9ba0f9a5c47c04f2$exports, "focusPrevElement", () => $9ba0f9a5c47c04f2$export$33b47db07a82b2fb);
$parcel$export($9ba0f9a5c47c04f2$exports, "access", () => $9ba0f9a5c47c04f2$export$9bb0e144ba4929ca);
$parcel$export($9ba0f9a5c47c04f2$exports, "identifyNull", () => $9ba0f9a5c47c04f2$export$611823266272db76);
$parcel$export($9ba0f9a5c47c04f2$exports, "identify", () => $9ba0f9a5c47c04f2$export$65e5b62a4c490288);
$parcel$export($9ba0f9a5c47c04f2$exports, "mergeRefs", () => $9ba0f9a5c47c04f2$export$c9058316764c140e);
$parcel$export($9ba0f9a5c47c04f2$exports, "safeRun", () => $9ba0f9a5c47c04f2$export$c6d63370cef03886);
$parcel$export($9ba0f9a5c47c04f2$exports, "waitFor", () => $9ba0f9a5c47c04f2$export$9bbfceb27f687c1b);
$parcel$export($9ba0f9a5c47c04f2$exports, "getInsertIndex", () => $9ba0f9a5c47c04f2$export$e12bf2314d0bc2a9);
$parcel$export($9ba0f9a5c47c04f2$exports, "getInsertParentId", () => $9ba0f9a5c47c04f2$export$58fe32731f07ed56);
function $9ba0f9a5c47c04f2$export$adf7c0fe6059d774(n, min, max) {
return Math.max(Math.min(n, max), min);
}
function $9ba0f9a5c47c04f2$export$5318634f2ee07019(node) {
return node && node.isLeaf;
}
function $9ba0f9a5c47c04f2$export$4210f5ea57fbae57(node) {
return node && node.isInternal && !node.isOpen;
}
const $9ba0f9a5c47c04f2$export$1e38f72c6c546f70 = (a, b)=>{
let n = a;
while(n){
if (n.id === b.id) return true;
n = n.parent;
}
return false;
};
const $9ba0f9a5c47c04f2$export$305f7d4e9d4624f2 = (node)=>{
if (!node.parent) throw Error("Node does not have a parent");
return node.parent.children.findIndex((c)=>c.id === node.id);
};
function $9ba0f9a5c47c04f2$export$8793edee2d425525() {}
function $9ba0f9a5c47c04f2$export$51b654aff22fc5a6(node, id) {
if (!node) return null;
if (node.id === id) return node;
if (node.children) for (let child of node.children){
const result = $9ba0f9a5c47c04f2$export$51b654aff22fc5a6(child, id);
if (result) return result;
}
return null;
}
function $9ba0f9a5c47c04f2$export$588732934346abbf(node, fn) {
fn(node);
if (node.children) for (let child of node.children)$9ba0f9a5c47c04f2$export$588732934346abbf(child, fn);
}
function $9ba0f9a5c47c04f2$export$3b0237e8566c8d65(target) {
const elements = $9ba0f9a5c47c04f2$var$getFocusable(target);
let next;
for(let i = 0; i < elements.length; ++i){
const item = elements[i];
if (item === target) {
next = $9ba0f9a5c47c04f2$var$nextItem(elements, i);
break;
}
}
// @ts-ignore ??
next?.focus();
}
function $9ba0f9a5c47c04f2$export$33b47db07a82b2fb(target) {
const elements = $9ba0f9a5c47c04f2$var$getFocusable(target);
let next;
for(let i = 0; i < elements.length; ++i){
const item = elements[i];
if (item === target) {
next = $9ba0f9a5c47c04f2$var$prevItem(elements, i);
break;
}
}
// @ts-ignore
next?.focus();
}
function $9ba0f9a5c47c04f2$var$nextItem(list, index) {
if (index + 1 < list.length) return list[index + 1];
else return list[0];
}
function $9ba0f9a5c47c04f2$var$prevItem(list, index) {
if (index - 1 >= 0) return list[index - 1];
else return list[list.length - 1];
}
function $9ba0f9a5c47c04f2$var$getFocusable(target) {
return Array.from(document.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"]):not([disabled]), details:not([disabled]), summary:not(:disabled)')).filter((e)=>e === target || !target.contains(e));
}
function $9ba0f9a5c47c04f2$export$9bb0e144ba4929ca(obj, accessor) {
if (typeof accessor === "boolean") return accessor;
if (typeof accessor === "string") return obj[accessor];
return accessor(obj);
}
function $9ba0f9a5c47c04f2$export$611823266272db76(obj) {
if (obj === null) return null;
else return $9ba0f9a5c47c04f2$export$65e5b62a4c490288(obj);
}
function $9ba0f9a5c47c04f2$export$65e5b62a4c490288(obj) {
return typeof obj === "string" ? obj : obj.id;
}
function $9ba0f9a5c47c04f2$export$c9058316764c140e(...refs) {
return (instance)=>{
refs.forEach((ref)=>{
if (typeof ref === "function") ref(instance);
else if (ref != null) ref.current = instance;
});
};
}
function $9ba0f9a5c47c04f2$export$c6d63370cef03886(fn, ...args) {
if (fn) return fn(...args);
}
function $9ba0f9a5c47c04f2$export$9bbfceb27f687c1b(fn) {
return new Promise((resolve, reject)=>{
let tries = 0;
function check() {
tries += 1;
if (tries === 100) reject();
if (fn()) resolve();
else setTimeout(check, 10);
}
check();
});
}
function $9ba0f9a5c47c04f2$export$e12bf2314d0bc2a9(tree) {
const focus = tree.focusedNode;
if (!focus) return tree.root.children?.length ?? 0;
if (focus.isOpen) return 0;
if (focus.parent) return focus.childIndex + 1;
return 0;
}
function $9ba0f9a5c47c04f2$export$58fe32731f07ed56(tree) {
const focus = tree.focusedNode;
if (!focus) return null;
if (focus.isOpen) return focus.id;
if (focus.parent && !focus.parent.isRoot) return focus.parent.id;
return null;
}
const $cef5e4428309da5a$var$placeholderStyle = {
display: "flex",
alignItems: "center",
zIndex: 1
};
const $cef5e4428309da5a$var$lineStyle = {
flex: 1,
height: "2px",
background: "#4B91E2",
borderRadius: "1px"
};
const $cef5e4428309da5a$var$circleStyle = {
width: "4px",
height: "4px",
boxShadow: "0 0 0 3px #4B91E2",
borderRadius: "50%"
};
const $cef5e4428309da5a$export$6cb3c16721363d11 = /*#__PURE__*/ (0, ($parcel$interopDefault($8zHUo$react))).memo(function DefaultCursor({ top: top , left: left , indent: indent }) {
const style = {
position: "absolute",
pointerEvents: "none",
top: top - 2 + "px",
left: left + "px",
right: indent + "px"
};
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsxs)("div", {
style: {
...$cef5e4428309da5a$var$placeholderStyle,
...style
},
children: [
/*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("div", {
style: {
...$cef5e4428309da5a$var$circleStyle
}
}),
/*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("div", {
style: {
...$cef5e4428309da5a$var$lineStyle
}
})
]
});
});
function $f8cb92545200caa8$export$f9c541e71856c524({ node: node , attrs: attrs , innerRef: innerRef , children: children }) {
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("div", {
...attrs,
ref: innerRef,
onFocus: (e)=>e.stopPropagation(),
onClick: node.handleClick,
children: children
});
}
function $7b23ad5b674e8347$export$909e23cbfbbd3351(props) {
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsxs)("div", {
ref: props.dragHandle,
style: props.style,
children: [
/*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("span", {
onClick: (e)=>{
e.stopPropagation();
props.node.toggle();
},
children: props.node.isLeaf ? "\uD83C\uDF33" : props.node.isOpen ? "\uD83D\uDDC1" : "\uD83D\uDDC0"
}),
" ",
props.node.isEditing ? /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)($7b23ad5b674e8347$var$Edit, {
...props
}) : /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)($7b23ad5b674e8347$var$Show, {
...props
})
]
});
}
function $7b23ad5b674e8347$var$Show(props) {
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)((0, $8zHUo$reactjsxruntime.Fragment), {
children: /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("span", {
children: props.node.data.name
})
});
}
function $7b23ad5b674e8347$var$Edit({ node: node }) {
const input = (0, $8zHUo$react.useRef)();
(0, $8zHUo$react.useEffect)(()=>{
input.current?.focus();
input.current?.select();
}, []);
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("input", {
ref: input,
// @ts-ignore
defaultValue: node.data.name,
onBlur: ()=>node.reset(),
onKeyDown: (e)=>{
if (e.key === "Escape") node.reset();
if (e.key === "Enter") node.submit(input.current?.value || "");
}
});
}
/* Types */ function $19606728da91aedd$export$e1a8e267487c59d1(id) {
return {
type: "EDIT",
id: id
};
}
function $19606728da91aedd$export$1650419e431d3ba3(state = {
id: null
}, action) {
if (action.type === "EDIT") return {
...state,
id: action.id
};
else return state;
}
/* Types */ function $a95e14a2a021f1d6$export$d7ddd398f22d79ef(id) {
return {
type: "FOCUS",
id: id
};
}
function $a95e14a2a021f1d6$export$6b6c976e46a06288() {
return {
type: "TREE_BLUR"
};
}
function $a95e14a2a021f1d6$export$1650419e431d3ba3(state = {
id: null,
treeFocused: false
}, action) {
if (action.type === "FOCUS") return {
...state,
id: action.id,
treeFocused: true
};
else if (action.type === "TREE_BLUR") return {
...state,
treeFocused: false
};
else return state;
}
var $a037376675af076f$exports = {};
$parcel$export($a037376675af076f$exports, "NodeApi", () => $a037376675af076f$export$d4b903da0f522dc8);
class $a037376675af076f$export$d4b903da0f522dc8 {
constructor(params){
this.handleClick = (e)=>{
if (e.metaKey && !this.tree.props.disableMultiSelection) this.isSelected ? this.deselect() : this.selectMulti();
else if (e.shiftKey && !this.tree.props.disableMultiSelection) this.selectContiguous();
else {
this.select();
this.activate();
}
};
this.tree = params.tree;
this.id = params.id;
this.data = params.data;
this.level = params.level;
this.children = params.children;
this.parent = params.parent;
this.isDraggable = params.isDraggable;
this.rowIndex = params.rowIndex;
}
get isRoot() {
return this.id === (0, $b4b29088977a3260$export$ec71a3379b43ae5c);
}
get isLeaf() {
return !Array.isArray(this.children);
}
get isInternal() {
return !this.isLeaf;
}
get isOpen() {
return this.isLeaf ? false : this.tree.isOpen(this.id);
}
get isClosed() {
return this.isLeaf ? false : !this.tree.isOpen(this.id);
}
get isEditable() {
return this.tree.isEditable(this.data);
}
get isEditing() {
return this.tree.editingId === this.id;
}
get isSelected() {
return this.tree.isSelected(this.id);
}
get isOnlySelection() {
return this.isSelected && this.tree.hasOneSelection;
}
get isSelectedStart() {
return this.isSelected && !this.prev?.isSelected;
}
get isSelectedEnd() {
return this.isSelected && !this.next?.isSelected;
}
get isFocused() {
return this.tree.isFocused(this.id);
}
get isDragging() {
return this.tree.isDragging(this.id);
}
get willReceiveDrop() {
return this.tree.willReceiveDrop(this.id);
}
get state() {
return {
isClosed: this.isClosed,
isDragging: this.isDragging,
isEditing: this.isEditing,
isFocused: this.isFocused,
isInternal: this.isInternal,
isLeaf: this.isLeaf,
isOpen: this.isOpen,
isSelected: this.isSelected,
isSelectedEnd: this.isSelectedEnd,
isSelectedStart: this.isSelectedStart,
willReceiveDrop: this.willReceiveDrop
};
}
get childIndex() {
if (this.parent && this.parent.children) return this.parent.children.findIndex((child)=>child.id === this.id);
else return -1;
}
get next() {
if (this.rowIndex === null) return null;
return this.tree.at(this.rowIndex + 1);
}
get prev() {
if (this.rowIndex === null) return null;
return this.tree.at(this.rowIndex - 1);
}
get nextSibling() {
const i = this.childIndex;
return this.parent?.children[i + 1] ?? null;
}
select() {
this.tree.select(this);
}
deselect() {
this.tree.deselect(this);
}
selectMulti() {
this.tree.selectMulti(this);
}
selectContiguous() {
this.tree.selectContiguous(this);
}
activate() {
this.tree.activate(this);
}
focus() {
this.tree.focus(this);
}
toggle() {
this.tree.toggle(this);
}
open() {
this.tree.open(this);
}
openParents() {
this.tree.openParents(this);
}
close() {
this.tree.close(this);
}
submit(value) {
this.tree.submit(this, value);
}
reset() {
this.tree.reset();
}
clone() {
return new $a037376675af076f$export$d4b903da0f522dc8({
...this
});
}
edit() {
return this.tree.edit(this);
}
}
const $b4b29088977a3260$export$ec71a3379b43ae5c = "__REACT_ARBORIST_INTERNAL_ROOT__";
function $b4b29088977a3260$export$882461b6382ed46c(tree) {
function visitSelfAndChildren(data, level, parent) {
const id = tree.accessId(data);
const node = new (0, $a037376675af076f$export$d4b903da0f522dc8)({
tree: tree,
data: data,
level: level,
parent: parent,
id: id,
children: null,
isDraggable: tree.isDraggable(data),
rowIndex: null
});
const children = tree.accessChildren(data);
if (children) node.children = children.map((child)=>visitSelfAndChildren(child, level + 1, node));
return node;
}
const root = new (0, $a037376675af076f$export$d4b903da0f522dc8)({
tree: tree,
id: $b4b29088977a3260$export$ec71a3379b43ae5c,
// @ts-ignore
data: {
id: $b4b29088977a3260$export$ec71a3379b43ae5c
},
level: -1,
parent: null,
children: null,
isDraggable: true,
rowIndex: null
});
const data = tree.props.data ?? [];
root.children = data.map((child)=>{
return visitSelfAndChildren(child, 0, root);
});
return root;
}
const $9b3f76f5baa4c1e3$export$e324594224ef24da = {
open (id, filtered) {
return {
type: "VISIBILITY_OPEN",
id: id,
filtered: filtered
};
},
close (id, filtered) {
return {
type: "VISIBILITY_CLOSE",
id: id,
filtered: filtered
};
},
toggle (id, filtered) {
return {
type: "VISIBILITY_TOGGLE",
id: id,
filtered: filtered
};
},
clear (filtered) {
return {
type: "VISIBILITY_CLEAR",
filtered: filtered
};
}
};
/* Reducer */ function $9b3f76f5baa4c1e3$var$openMapReducer(state = {}, action) {
if (action.type === "VISIBILITY_OPEN") return {
...state,
[action.id]: true
};
else if (action.type === "VISIBILITY_CLOSE") return {
...state,
[action.id]: false
};
else if (action.type === "VISIBILITY_TOGGLE") {
const prev = state[action.id];
return {
...state,
[action.id]: !prev
};
} else if (action.type === "VISIBILITY_CLEAR") return {};
else return state;
}
function $9b3f76f5baa4c1e3$export$1650419e431d3ba3(state = {
filtered: {},
unfiltered: {}
}, action) {
if (!action.type.startsWith("VISIBILITY")) return state;
if (action.filtered) return {
...state,
filtered: $9b3f76f5baa4c1e3$var$openMapReducer(state.filtered, action)
};
else return {
...state,
unfiltered: $9b3f76f5baa4c1e3$var$openMapReducer(state.unfiltered, action)
};
}
const $8a51f8cf5a68a06f$export$d4c72bab9d6cc13a = (props)=>({
nodes: {
// Changes together
open: {
filtered: {},
unfiltered: props?.initialOpenState ?? {}
},
focus: {
id: null,
treeFocused: false
},
edit: {
id: null
},
drag: {
id: null,
idWillReceiveDrop: null
},
selection: {
ids: new Set(),
anchor: null,
mostRecent: null
}
},
dnd: {
cursor: {
type: "none"
},
dragId: null,
dragIds: [],
parentId: null,
index: -1
}
});
const $817c2f134e791dac$export$e324594224ef24da = {
clear: ()=>({
type: "SELECTION_CLEAR"
}),
only: (id)=>({
type: "SELECTION_ONLY",
id: (0, $9ba0f9a5c47c04f2$export$65e5b62a4c490288)(id)
}),
add: (id)=>({
type: "SELECTION_ADD",
ids: (Array.isArray(id) ? id : [
id
]).map((0, $9ba0f9a5c47c04f2$export$65e5b62a4c490288))
}),
remove: (id)=>({
type: "SELECTION_REMOVE",
ids: (Array.isArray(id) ? id : [
id
]).map((0, $9ba0f9a5c47c04f2$export$65e5b62a4c490288))
}),
set: (ids)=>({
type: "SELECTION_SET",
ids: ids
}),
mostRecent: (id)=>({
type: "SELECTION_MOST_RECENT",
id: id === null ? null : (0, $9ba0f9a5c47c04f2$export$65e5b62a4c490288)(id)
}),
anchor: (id)=>({
type: "SELECTION_ANCHOR",
id: id === null ? null : (0, $9ba0f9a5c47c04f2$export$65e5b62a4c490288)(id)
})
};
function $817c2f134e791dac$export$1650419e431d3ba3(state = (0, $8a51f8cf5a68a06f$export$d4c72bab9d6cc13a)()["nodes"]["selection"], action) {
const ids = state.ids;
switch(action.type){
case "SELECTION_CLEAR":
return {
...state,
ids: new Set()
};
case "SELECTION_ONLY":
return {
...state,
ids: new Set([
action.id
])
};
case "SELECTION_ADD":
if (action.ids.length === 0) return state;
action.ids.forEach((id)=>ids.add(id));
return {
...state,
ids: new Set(ids)
};
case "SELECTION_REMOVE":
if (action.ids.length === 0) return state;
action.ids.forEach((id)=>ids.delete(id));
return {
...state,
ids: new Set(ids)
};
case "SELECTION_SET":
return {
...state,
ids: new Set(action.ids)
};
case "SELECTION_MOST_RECENT":
return {
...state,
mostRecent: action.id
};
case "SELECTION_ANCHOR":
return {
...state,
anchor: action.id
};
default:
return state;
}
}
const $21a3cfea9624f26e$export$e324594224ef24da = {
cursor (cursor) {
return {
type: "DND_CURSOR",
cursor: cursor
};
},
dragStart (id, dragIds) {
return {
type: "DND_DRAG_START",
id: id,
dragIds: dragIds
};
},
dragEnd () {
return {
type: "DND_DRAG_END"
};
},
hovering (parentId, index) {
return {
type: "DND_HOVERING",
parentId: parentId,
index: index
};
}
};
function $21a3cfea9624f26e$export$1650419e431d3ba3(state = (0, $8a51f8cf5a68a06f$export$d4c72bab9d6cc13a)()["dnd"], action) {
switch(action.type){
case "DND_CURSOR":
return {
...state,
cursor: action.cursor
};
case "DND_DRAG_START":
return {
...state,
dragId: action.id,
dragIds: action.dragIds
};
case "DND_DRAG_END":
return (0, $8a51f8cf5a68a06f$export$d4c72bab9d6cc13a)()["dnd"];
case "DND_HOVERING":
return {
...state,
parentId: action.parentId,
index: action.index
};
default:
return state;
}
}
const $41defe7a4d688623$var$layerStyles = {
position: "fixed",
pointerEvents: "none",
zIndex: 100,
left: 0,
top: 0,
width: "100%",
height: "100%"
};
const $41defe7a4d688623$var$getStyle = (offset)=>{
if (!offset) return {
display: "none"
};
const { x: x , y: y } = offset;
return {
transform: `translate(${x}px, ${y}px)`
};
};
const $41defe7a4d688623$var$getCountStyle = (offset)=>{
if (!offset) return {
display: "none"
};
const { x: x , y: y } = offset;
return {
transform: `translate(${x + 10}px, ${y + 10}px)`
};
};
function $41defe7a4d688623$export$84e211ad8431a387({ offset: offset , mouse: mouse , id: id , dragIds: dragIds , isDragging: isDragging }) {
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsxs)($41defe7a4d688623$var$Overlay, {
isDragging: isDragging,
children: [
/*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)($41defe7a4d688623$var$Position, {
offset: offset,
children: /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)($41defe7a4d688623$var$PreviewNode, {
id: id,
dragIds: dragIds
})
}),
/*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)($41defe7a4d688623$var$Count, {
mouse: mouse,
count: dragIds.length
})
]
});
}
const $41defe7a4d688623$var$Overlay = /*#__PURE__*/ (0, $8zHUo$react.memo)(function Overlay(props) {
if (!props.isDragging) return null;
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("div", {
style: $41defe7a4d688623$var$layerStyles,
children: props.children
});
});
function $41defe7a4d688623$var$Position(props) {
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("div", {
className: "row preview",
style: $41defe7a4d688623$var$getStyle(props.offset),
children: props.children
});
}
function $41defe7a4d688623$var$Count(props) {
const { count: count , mouse: mouse } = props;
if (count > 1) return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("div", {
className: "selected-count",
style: $41defe7a4d688623$var$getCountStyle(mouse),
children: count
});
else return null;
}
const $41defe7a4d688623$var$PreviewNode = /*#__PURE__*/ (0, $8zHUo$react.memo)(function PreviewNode(props) {
const tree = (0, $53e78f2af9ed7736$export$367b0f2231a90ba0)();
const node = tree.get(props.id);
if (!node) return null;
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)(tree.renderNode, {
preview: true,
node: node,
style: {
paddingLeft: node.level * tree.indent,
opacity: 0.2,
background: "transparent"
},
tree: tree
});
});
function $46d1b12ad07fe17a$export$b6a79797ad180576() {
const tree = (0, $53e78f2af9ed7736$export$367b0f2231a90ba0)();
const state = (0, $53e78f2af9ed7736$export$4930f6bf413be70e)();
const cursor = state.cursor;
if (!cursor || cursor.type !== "line") return null;
const indent = tree.indent;
const top = tree.rowHeight * cursor.index + (tree.props.padding ?? tree.props.paddingTop ?? 0);
const left = indent * cursor.level;
const Cursor = tree.renderCursor;
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)(Cursor, {
top: top,
left: left,
indent: indent
});
}
const $9fdccc56066cac30$export$70c2b8898b86d3ad = /*#__PURE__*/ (0, $8zHUo$react.forwardRef)(function Outer(props, ref) {
const { children: children , ...rest } = props;
const tree = (0, $53e78f2af9ed7736$export$367b0f2231a90ba0)();
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsxs)("div", {
// @ts-ignore
ref: ref,
...rest,
onClick: (e)=>{
if (e.currentTarget === e.target) tree.deselectAll();
},
children: [
/*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)($9fdccc56066cac30$var$DropContainer, {}),
children
]
});
});
const $9fdccc56066cac30$var$DropContainer = ()=>{
const tree = (0, $53e78f2af9ed7736$export$367b0f2231a90ba0)();
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("div", {
style: {
height: tree.visibleNodes.length * tree.rowHeight,
width: "100%",
position: "absolute",
left: "0",
right: "0"
},
children: /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)((0, $46d1b12ad07fe17a$export$b6a79797ad180576), {})
});
};
const $8bd8023a7fac5385$export$a9af0da3ae60cd00 = /*#__PURE__*/ (0, $8zHUo$react.forwardRef)(function InnerElement({ style: style , ...rest }, ref) {
const tree = (0, $53e78f2af9ed7736$export$367b0f2231a90ba0)();
const paddingTop = tree.props.padding ?? tree.props.paddingTop ?? 0;
const paddingBottom = tree.props.padding ?? tree.props.paddingBottom ?? 0;
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("div", {
ref: ref,
style: {
...style,
height: `${parseFloat(style.height) + paddingTop + paddingBottom}px`
},
...rest
});
});
function $007f9a2edf7eef1c$export$715c0d031ede7907(node) {
const tree = (0, $53e78f2af9ed7736$export$367b0f2231a90ba0)();
const ids = tree.selectedIds;
const [_, ref, preview] = (0, $8zHUo$reactdnd.useDrag)(()=>({
canDrag: ()=>node.isDraggable,
type: "NODE",
item: ()=>{
// This is fired once at the begging of a drag operation
const dragIds = tree.isSelected(node.id) ? Array.from(ids) : [
node.id
];
tree.dispatch((0, $21a3cfea9624f26e$export$e324594224ef24da).dragStart(node.id, dragIds));
return {
id: node.id
};
},
end: ()=>{
tree.hideCursor();
let { parentId: parentId , index: index , dragIds: dragIds } = tree.state.dnd;
// If they held down meta, we need to create a copy
// if (drop.dropEffect === "copy")
if (tree.canDrop()) {
(0, $9ba0f9a5c47c04f2$export$c6d63370cef03886)(tree.props.onMove, {
dragIds: dragIds,
parentId: parentId === (0, $b4b29088977a3260$export$ec71a3379b43ae5c) ? null : parentId,
index: index,
dragNodes: tree.dragNodes,
parentNode: tree.get(parentId)
});
tree.open(parentId);
}
tree.dispatch((0, $21a3cfea9624f26e$export$e324594224ef24da).dragEnd());
}
}), [
ids,
node
]);
(0, $8zHUo$react.useEffect)(()=>{
preview((0, $8zHUo$reactdndhtml5backend.getEmptyImage)());
}, [
preview
]);
return ref;
}
function $8ded640590393a1a$var$measureHover(el, offset) {
const rect = el.getBoundingClientRect();
const x = offset.x - Math.round(rect.x);
const y = offset.y - Math.round(rect.y);
const height = rect.height;
const inTopHalf = y < height / 2;
const inBottomHalf = !inTopHalf;
const pad = height / 4;
const inMiddle = y > pad && y < height - pad;
const atTop = !inMiddle && inTopHalf;
const atBottom = !inMiddle && inBottomHalf;
return {
x: x,
inTopHalf: inTopHalf,
inBottomHalf: inBottomHalf,
inMiddle: inMiddle,
atTop: atTop,
atBottom: atBottom
};
}
function $8ded640590393a1a$var$getNodesAroundCursor(node, prev, next, hover) {
if (!node) // We're hoving over the empty part of the list, not over an item,
// Put the cursor below the last item which is "prev"
return [
prev,
null
];
if (node.isInternal) {
if (hover.atTop) return [
prev,
node
];
else if (hover.inMiddle) return [
node,
node
];
else return [
node,
next
];
} else {
if (hover.inTopHalf) return [
prev,
node
];
else return [
node,
next
];
}
}
function $8ded640590393a1a$var$getDropLevel(hovering, aboveCursor, belowCursor, indent) {
const hoverLevel = Math.round(Math.max(0, hovering.x - indent) / indent);
let min, max;
if (!aboveCursor) {
max = 0;
min = 0;
} else if (!belowCursor) {
max = aboveCursor.level;
min = 0;
} else {
max = aboveCursor.level;
min = belowCursor.level;
}
return (0, $9ba0f9a5c47c04f2$export$adf7c0fe6059d774)(hoverLevel, min, max);
}
function $8ded640590393a1a$var$dropAt(parentId, index) {
return {
parentId: parentId || null,
index: index
};
}
function $8ded640590393a1a$var$lineCursor(index, level) {
return {
type: "line",
index: index,
level: level
};
}
function $8ded640590393a1a$var$noCursor() {
return {
type: "none"
};
}
function $8ded640590393a1a$var$highlightCursor(id) {
return {
type: "highlight",
id: id
};
}
function $8ded640590393a1a$var$walkUpFrom(node, level) {
let drop = node;
while(drop.parent && drop.level > level)drop = drop.parent;
const parentId = drop.parent?.id || null;
const index = (0, $9ba0f9a5c47c04f2$export$305f7d4e9d4624f2)(drop) + 1;
return {
parentId: parentId,
index: index
};
}
function $8ded640590393a1a$export$f502ca02ebb85a1c(args) {
const hover = $8ded640590393a1a$var$measureHover(args.element, args.offset);
const { node: node , nextNode: nextNode , prevNode: prevNode } = args;
const [above, below] = $8ded640590393a1a$var$getNodesAroundCursor(node, prevNode, nextNode, hover);
/* Hovering over the middle of any node */ if (node && hover.inMiddle) return {
drop: $8ded640590393a1a$var$dropAt(node.id, 0),
cursor: $8ded640590393a1a$var$highlightCursor(node.id)
};
/* At the top of the list */ if (!above) return {
drop: $8ded640590393a1a$var$dropAt(below?.parent?.id, 0),
cursor: $8ded640590393a1a$var$lineCursor(0, 0)
};
/* The above node is an item or a closed folder or an open folder with no children */ if ((0, $9ba0f9a5c47c04f2$export$5318634f2ee07019)(above) || (0, $9ba0f9a5c47c04f2$export$4210f5ea57fbae57)(above) || (above?.children || []).length === 0) {
const level = $8ded640590393a1a$var$getDropLevel(hover, above, below, args.indent);
return {
drop: $8ded640590393a1a$var$walkUpFrom(above, level),
cursor: $8ded640590393a1a$var$lineCursor(above.rowIndex + 1, level)
};
}
/* The above node is an open folder */ return {
drop: $8ded640590393a1a$var$dropAt(above?.id, 0),
cursor: $8ded640590393a1a$var$lineCursor(above.rowIndex + 1, above.level + 1)
};
}
function $c3ca8fbf6c41abd1$export$57afafec4637d997(el, node) {
const tree = (0, $53e78f2af9ed7736$export$367b0f2231a90ba0)();
const [_, dropRef] = (0, $8zHUo$reactdnd.useDrop)(()=>({
accept: "NODE",
canDrop: ()=>tree.canDrop(),
hover: (_item, m)=>{
const offset = m.getClientOffset();
if (!el.current || !offset) return;
const { cursor: cursor , drop: drop } = (0, $8ded640590393a1a$export$f502ca02ebb85a1c)({
element: el.current,
offset: offset,
indent: tree.indent,
node: node,
prevNode: node.prev,
nextNode: node.next
});
if (drop) tree.dispatch((0, $21a3cfea9624f26e$export$e324594224ef24da).hovering(drop.parentId, drop.index));
if (m.canDrop()) {
if (cursor) tree.showCursor(cursor);
} else tree.hideCursor();
},
drop: (_, m)=>{
if (!m.canDrop()) return null;
}
}), [
node,
el.current,
tree.props
]);
return dropRef;
}
function $52e970fa2827423c$export$d75ab90b05ebbfaa(index) {
const tree = (0, $53e78f2af9ed7736$export$367b0f2231a90ba0)();
const original = tree.at(index);
if (!original) throw new Error(`Could not find node for index: ${index}`);
return (0, $8zHUo$react.useMemo)(()=>{
const fresh = original.clone();
tree.visibleNodes[index] = fresh; // sneaky
return fresh;
// Return a fresh instance if the state values change
}, [
...Object.values(original.state),
original
]);
}
const $9907179f220391dc$export$a9754b3c8daa5172 = /*#__PURE__*/ (0, ($parcel$interopDefault($8zHUo$react))).memo(function RowContainer({ index: index , style: style }) {
/* When will the <Row> will re-render.
*
* The row component is memo'd so it will only render
* when a new instance of the NodeApi class is passed
* to it.
*
* The TreeApi instance is stable. It does not
* change when the internal state changes.
*
* The TreeApi has all the references to the nodes.
* We need to clone the nodes when their state
* changes. The node class contains no state itself,
* It always checks the tree for state. The tree's
* state will always be up to date.
*/ (0, $53e78f2af9ed7736$export$83a4f9dc3b36edb8)(); // Re-render when tree props or visability changes
const _ = (0, $53e78f2af9ed7736$export$fd23f19d5d8f3033)(); // So that we re-render appropriately
const tree = (0, $53e78f2af9ed7736$export$367b0f2231a90ba0)(); // Tree already has the fresh state
const node = (0, $52e970fa2827423c$export$d75ab90b05ebbfaa)(index);
const el = (0, $8zHUo$react.useRef)(null);
const dragRef = (0, $007f9a2edf7eef1c$export$715c0d031ede7907)(node);
const dropRef = (0, $c3ca8fbf6c41abd1$export$57afafec4637d997)(el, node);
const innerRef = (0, $8zHUo$react.useCallback)((n)=>{
el.current = n;
dropRef(n);
}, [
dropRef
]);
const indent = tree.indent * node.level;
const nodeStyle = (0, $8zHUo$react.useMemo)(()=>({
paddingLeft: indent
}), [
indent
]);
const rowStyle = (0, $8zHUo$react.useMemo)(()=>({
...style,
top: parseFloat(style.top) + (tree.props.padding ?? tree.props.paddingTop ?? 0)
}), [
style,
tree.props.padding,
tree.props.paddingTop
]);
const rowAttrs = {
role: "treeitem",
"aria-level": node.level,
"aria-selected": node.isSelected,
style: rowStyle,
tabIndex: -1,
className: tree.props.rowClassName
};
(0, $8zHUo$react.useEffect)(()=>{
if (!node.isEditing && node.isFocused) el.current?.focus({
preventScroll: true
});
}, [
node.isEditing,
node.isFocused,
el.current
]);
const Node = tree.renderNode;
const Row = tree.renderRow;
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)(Row, {
node: node,
innerRef: innerRef,
attrs: rowAttrs,
children: /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)(Node, {
node: node,
tree: tree,
style: nodeStyle,
dragHandle: dragRef
})
});
});
let $c937fea98c8ffb92$var$focusSearchTerm = "";
let $c937fea98c8ffb92$var$timeoutId = null;
function $c937fea98c8ffb92$export$ff4858a4110d9246() {
(0, $53e78f2af9ed7736$export$83a4f9dc3b36edb8)();
const tree = (0, $53e78f2af9ed7736$export$367b0f2231a90ba0)();
return /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)("div", {
style: {
height: tree.height,
width: tree.width,
minHeight: 0,
minWidth: 0
},
onContextMenu: tree.props.onContextMenu,
onClick: tree.props.onClick,
tabIndex: 0,
onFocus: (e)=>{
if (!e.currentTarget.contains(e.relatedTarget)) tree.onFocus();
},
onBlur: (e)=>{
if (!e.currentTarget.contains(e.relatedTarget)) tree.onBlur();
},
onKeyDown: (e)=>{
if (tree.isEditing) return;
if (e.key === "Backspace") {
if (!tree.props.onDelete) return;
const ids = Array.from(tree.selectedIds);
if (ids.length > 1) {
let nextFocus = tree.mostRecentNode;
while(nextFocus && nextFocus.isSelected)nextFocus = nextFocus.nextSibling;
if (!nextFocus) nextFocus = tree.lastNode;
tree.focus(nextFocus, {
scroll: false
});
tree.delete(Array.from(ids));
} else {
const node = tree.focusedNode;
if (node) {
const sib = node.nextSibling;
const parent = node.parent;
tree.focus(sib || parent, {
scroll: false
});
tree.delete(node);
}
}
return;
}
if (e.key === "Tab" && !e.shiftKey) {
e.preventDefault();
(0, $9ba0f9a5c47c04f2$export$3b0237e8566c8d65)(e.currentTarget);
return;
}
if (e.key === "Tab" && e.shiftKey) {
e.preventDefault();
(0, $9ba0f9a5c47c04f2$export$33b47db07a82b2fb)(e.currentTarget);
return;
}
if (e.key === "ArrowDown") {
e.preventDefault();
const next = tree.nextNode;
if (e.metaKey) {
tree.select(tree.focusedNode);
tree.activate(tree.focusedNode);
return;
} else if (!e.shiftKey || tree.props.disableMultiSelection) {
tree.focus(next);
return;
} else {
if (!next) return;
const current = tree.focusedNode;
if (!current) tree.focus(tree.firstNode);
else if (current.isSelected) tree.selectContiguous(next);
else tree.selectMulti(next);
return;
}
}
if (e.key === "ArrowUp") {
e.preventDefault();
const prev = tree.prevNode;
if (!e.shiftKey || tree.props.disableMultiSelection) {
tree.focus(prev);
return;
} else {
if (!prev) return;
const current = tree.focusedNode;
if (!current) tree.focus(tree.lastNode); // ?
else if (current.isSelected) tree.selectContiguous(prev);
else tree.selectMulti(prev);
return;
}
}
if (e.key === "ArrowRight") {
const node = tree.focusedNode;
if (!node) return;
if (node.isInternal && node.isOpen) tree.focus(tree.nextNode);
else if (node.isInternal) tree.open(node.id);
return;
}
if (e.key === "ArrowLeft") {
const node = tree.focusedNode;
if (!node || node.isRoot) return;
if (node.isInternal && node.isOpen) tree.close(node.id);
else if (!node.parent?.isRoot) tree.focus(node.parent);
return;
}
if (e.key === "a" && e.metaKey && !tree.props.disableMultiSelection) {
e.preventDefault();
tree.selectAll();
return;
}
if (e.key === "a" && !e.metaKey && tree.props.onCreate) {
tree.createLeaf();
return;
}
if (e.key === "A" && !e.metaKey) {
if (!tree.props.onCreate) return;
tree.createInternal();
return;
}
if (e.key === "Home") {
// add shift keys
e.preventDefault();
tree.focus(tree.firstNode);
return;
}
if (e.key === "End") {
// add shift keys
e.preventDefault();
tree.focus(tree.lastNode);
return;
}
if (e.key === "Enter") {
const node = tree.focusedNode;
if (!node) return;
if (!node.isEditable || !tree.props.onRename) return;
setTimeout(()=>{
if (node) tree.edit(node);
});
return;
}
if (e.key === " ") {
e.preventDefault();
const node = tree.focusedNode;
if (!node) return;
if (node.isLeaf) {
node.select();
node.activate();
} else node.toggle();
return;
}
if (e.key === "*") {
const node = tree.focusedNode;
if (!node) return;
tree.openSiblings(node);
return;
}
if (e.key === "PageUp") {
e.preventDefault();
tree.pageUp();
return;
}
if (e.key === "PageDown") {
e.preventDefault();
tree.pageDown();
}
// If they type a sequence of characters
// collect them. Reset them after a timeout.
// Use it to search the tree for a node, then focus it.
// Clean this up a bit later
clearTimeout($c937fea98c8ffb92$var$timeoutId);
$c937fea98c8ffb92$var$focusSearchTerm += e.key;
$c937fea98c8ffb92$var$timeoutId = setTimeout(()=>{
$c937fea98c8ffb92$var$focusSearchTerm = "";
}, 600);
const node = tree.visibleNodes.find((n)=>{
// @ts-ignore
const name = n.data.name;
if (typeof name === "string") return name.toLowerCase().startsWith($c937fea98c8ffb92$var$focusSearchTerm);
else return false;
});
if (node) tree.focus(node.id);
},
children: /*#__PURE__*/ (0, $8zHUo$reactjsxruntime.jsx)((0, $8zHUo$reactwindow.FixedSizeList), {
className: tree.props.className,
outerRef: tree.listEl,
itemCount: tree.visibleNodes.length,
height: tree.height,
width: tree.width,
itemSize: tree.rowHeight,
overscanCount: tree.overscanCount,
itemKey: (index)=>tree.visibleNodes[index]?.id || index,
outerElementType: (0, $9fdccc56066cac30$export$70c2b8898b86d3ad),
innerElementType: (0, $8bd8023a7fac5385$export$a9af0da3ae60cd00),
onScroll: tree.props.onScroll,
onItemsRendered: tree.onItemsRendered.bind(tree),
ref: tree.list,
children: (0, $9907179f220391dc$export$a9754b3c8daa5172)
})
});
}
function $619fcdbdc1238c29$export$5897d8d7c7a3d871(tree) {
if (tree.isFiltered) return $619fcdbdc1238c29$var$flattenAndFilterTree(tree.root, tree.isMatch.bind(tree));
else return $619fcdbdc1238c29$var$flattenTree(tree.root);
}
function $619fcdbdc1238c29$var$flattenTree(root) {
const list = [];
function collect(node) {
if (node.level >= 0) list.push(node);
if (node.isOpen) node.children?.forEach(collect);
}
collect(root);
list.forEach($619fcdbdc1238c29$var$assignRowIndex);
return list;
}
function $619fcdbdc1238c29$var$flattenAndFilterTree(root, isMatch) {
const matches = {};
const list = [];
function markMatch(node) {
const yes = !node.isRoot && isMatch(node);
if (yes) {
matches[node.id] = true;
let parent = node.parent;
while(parent){
matches[parent.id] = true;
parent = parent.parent;
}
}
if (node.children) for (let child of node.children)markMatch(child);
}
function collect(node) {
if (node.level >= 0 && matches[node.id]) list.push(node);
if (node.isOpen) node.children?.forEach(collect);
}
markMatch(root);
collect(root);
list.forEach($619fcdbdc1238c29$var$assignRowIndex);
return list;
}
function $619fcdbdc1238c29$var$assignRowIndex(node, index) {
node.rowIndex = index;
}
const $6f261e3463b2c9f6$export$c6d108d7c8095f19 = (nodes)=>{
return nodes.reduce((map, node, index)=>{
map[node.id] = index;
return map;
}, {});
};
const { safeRun: $c0491d23d353beb3$var$safeRun , identify: $c0491d23d353beb3$var$identify , identifyNull: $c0491d23d353beb3$var$identifyNull } = $9ba0f9a5c47c04f2$exports;
class $c0491d23d353beb3$export$e2da3477247342d1 {
constructor(store, props, list, listEl){
this.store = store;
this.props = props;