alinea
Version:
Headless git-based CMS
1,216 lines (1,202 loc) • 58.4 kB
JavaScript
import {
dist_default
} from "../../chunks/chunk-A5O3N2GS.js";
import {
useAtomValue
} from "../../chunks/chunk-TOJF2G3X.js";
import "../../chunks/chunk-WJ67RR7S.js";
import "../../chunks/chunk-NZLE2WMY.js";
// node_modules/@headless-tree/core/lib/esm/utils.js
function functionalUpdate(updater, input) {
return typeof updater === "function" ? updater(input) : updater;
}
function makeStateUpdater(key, instance) {
return (updater) => {
instance.setState((old) => {
return Object.assign(Object.assign({}, old), { [key]: functionalUpdate(updater, old[key]) });
});
};
}
var poll = (fn, interval = 100, timeout = 1e3) => new Promise((resolve) => {
let clear;
const i = setInterval(() => {
if (fn()) {
resolve();
clearInterval(i);
clearTimeout(clear);
}
}, interval);
clear = setTimeout(() => {
clearInterval(i);
}, timeout);
});
// node_modules/@headless-tree/core/lib/esm/features/tree/feature.js
var __awaiter = function(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function(resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function(resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var treeFeature = {
key: "tree",
getInitialState: (initialState) => Object.assign({ expandedItems: [], focusedItem: null }, initialState),
getDefaultConfig: (defaultConfig, tree) => Object.assign({ setExpandedItems: makeStateUpdater("expandedItems", tree), setFocusedItem: makeStateUpdater("focusedItem", tree) }, defaultConfig),
stateHandlerNames: {
expandedItems: "setExpandedItems",
focusedItem: "setFocusedItem"
},
treeInstance: {
getItemsMeta: ({ tree }) => {
const { rootItemId } = tree.getConfig();
const { expandedItems } = tree.getState();
const flatItems = [];
const expandedItemsSet = new Set(expandedItems);
const recursiveAdd = (itemId, parentId, level, setSize, posInSet) => {
var _a;
flatItems.push({
itemId,
level,
index: flatItems.length,
parentId,
setSize,
posInSet
});
if (expandedItemsSet.has(itemId)) {
const children2 = (_a = tree.retrieveChildrenIds(itemId)) !== null && _a !== void 0 ? _a : [];
let i2 = 0;
for (const childId of children2) {
recursiveAdd(childId, itemId, level + 1, children2.length, i2++);
}
}
};
const children = tree.retrieveChildrenIds(rootItemId);
let i = 0;
for (const itemId of children) {
recursiveAdd(itemId, rootItemId, 0, children.length, i++);
}
return flatItems;
},
// TODO memo
getFocusedItem: ({ tree }) => {
var _a, _b;
return (_b = tree.getItemInstance((_a = tree.getState().focusedItem) !== null && _a !== void 0 ? _a : "")) !== null && _b !== void 0 ? _b : tree.getItems()[0];
},
focusNextItem: ({ tree }) => {
var _a;
const { index } = tree.getFocusedItem().getItemMeta();
const nextIndex = Math.min(index + 1, tree.getItems().length - 1);
(_a = tree.getItems()[nextIndex]) === null || _a === void 0 ? void 0 : _a.setFocused();
},
focusPreviousItem: ({ tree }) => {
var _a;
const { index } = tree.getFocusedItem().getItemMeta();
const nextIndex = Math.max(index - 1, 0);
(_a = tree.getItems()[nextIndex]) === null || _a === void 0 ? void 0 : _a.setFocused();
},
updateDomFocus: ({ tree }) => {
setTimeout(() => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b;
const focusedItem = tree.getFocusedItem();
(_b = (_a = tree.getConfig()).scrollToItem) === null || _b === void 0 ? void 0 : _b.call(_a, focusedItem);
yield poll(() => focusedItem.getElement() !== null, 20);
const focusedElement = focusedItem.getElement();
if (!focusedElement)
return;
focusedElement.focus();
}));
},
// TODO add label parameter
getContainerProps: ({ prev, tree }, treeLabel) => Object.assign(Object.assign({}, prev === null || prev === void 0 ? void 0 : prev()), { role: "tree", "aria-label": treeLabel !== null && treeLabel !== void 0 ? treeLabel : "", ref: tree.registerElement }),
// relevant for hotkeys of this feature
isSearchOpen: () => false
},
itemInstance: {
scrollTo: (_a, scrollIntoViewArg_1) => __awaiter(void 0, [_a, scrollIntoViewArg_1], void 0, function* ({ tree, item }, scrollIntoViewArg) {
var _b, _c, _d;
(_c = (_b = tree.getConfig()).scrollToItem) === null || _c === void 0 ? void 0 : _c.call(_b, item);
yield poll(() => item.getElement() !== null, 20);
(_d = item.getElement()) === null || _d === void 0 ? void 0 : _d.scrollIntoView(scrollIntoViewArg);
}),
getId: ({ itemId }) => itemId,
getProps: ({ item, prev }) => {
const itemMeta = item.getItemMeta();
return Object.assign(Object.assign({}, prev === null || prev === void 0 ? void 0 : prev()), { ref: item.registerElement, role: "treeitem", "aria-setsize": itemMeta.setSize, "aria-posinset": itemMeta.posInSet, "aria-selected": "false", "aria-label": item.getItemName(), "aria-level": itemMeta.level, tabIndex: item.isFocused() ? 0 : -1, onClick: (e) => {
item.setFocused();
item.primaryAction();
if (e.ctrlKey || e.shiftKey || e.metaKey) {
return;
}
if (!item.isFolder()) {
return;
}
if (item.isExpanded()) {
item.collapse();
} else {
item.expand();
}
} });
},
expand: ({ tree, item, itemId }) => {
var _a;
if (!item.isFolder()) {
return;
}
if ((_a = tree.getState().loadingItemChildrens) === null || _a === void 0 ? void 0 : _a.includes(itemId)) {
return;
}
tree.applySubStateUpdate("expandedItems", (expandedItems) => [
...expandedItems,
itemId
]);
tree.rebuildTree();
},
collapse: ({ tree, item, itemId }) => {
if (!item.isFolder()) {
return;
}
tree.applySubStateUpdate("expandedItems", (expandedItems) => expandedItems.filter((id) => id !== itemId));
tree.rebuildTree();
},
getItemData: ({ tree, itemId }) => tree.retrieveItemData(itemId),
equals: ({ item }, other) => item.getId() === (other === null || other === void 0 ? void 0 : other.getId()),
isExpanded: ({ tree, itemId }) => tree.getState().expandedItems.includes(itemId),
isDescendentOf: ({ item }, parentId) => {
const parent = item.getParent();
return Boolean((parent === null || parent === void 0 ? void 0 : parent.getId()) === parentId || (parent === null || parent === void 0 ? void 0 : parent.isDescendentOf(parentId)));
},
isFocused: ({ tree, item, itemId }) => tree.getState().focusedItem === itemId || tree.getState().focusedItem === null && item.getItemMeta().index === 0,
isFolder: ({ tree, item }) => item.getItemMeta().level === -1 || tree.getConfig().isItemFolder(item),
getItemName: ({ tree, item }) => {
const config = tree.getConfig();
return config.getItemName(item);
},
setFocused: ({ tree, itemId }) => {
tree.applySubStateUpdate("focusedItem", itemId);
},
primaryAction: ({ tree, item }) => {
var _a, _b;
return (_b = (_a = tree.getConfig()).onPrimaryAction) === null || _b === void 0 ? void 0 : _b.call(_a, item);
},
getParent: ({ tree, item }) => item.getItemMeta().parentId ? tree.getItemInstance(item.getItemMeta().parentId) : void 0,
getIndexInParent: ({ item }) => item.getItemMeta().posInSet,
getChildren: ({ tree, itemId }) => tree.retrieveChildrenIds(itemId).map((id) => tree.getItemInstance(id)),
getTree: ({ tree }) => tree,
getItemAbove: ({ tree, item }) => tree.getItems()[item.getItemMeta().index - 1],
getItemBelow: ({ tree, item }) => tree.getItems()[item.getItemMeta().index + 1]
},
hotkeys: {
focusNextItem: {
hotkey: "ArrowDown",
canRepeat: true,
preventDefault: true,
isEnabled: (tree) => {
var _a, _b;
return !((_b = (_a = tree.isSearchOpen) === null || _a === void 0 ? void 0 : _a.call(tree)) !== null && _b !== void 0 ? _b : false) && !tree.getState().dnd;
},
// TODO what happens when the feature doesnt exist? proxy method still claims to exist
handler: (e, tree) => {
tree.focusNextItem();
tree.updateDomFocus();
}
},
focusPreviousItem: {
hotkey: "ArrowUp",
canRepeat: true,
preventDefault: true,
isEnabled: (tree) => {
var _a, _b;
return !((_b = (_a = tree.isSearchOpen) === null || _a === void 0 ? void 0 : _a.call(tree)) !== null && _b !== void 0 ? _b : false) && !tree.getState().dnd;
},
handler: (e, tree) => {
tree.focusPreviousItem();
tree.updateDomFocus();
}
},
expandOrDown: {
hotkey: "ArrowRight",
canRepeat: true,
handler: (e, tree) => {
const item = tree.getFocusedItem();
if (item.isExpanded() || !item.isFolder()) {
tree.focusNextItem();
tree.updateDomFocus();
} else {
item.expand();
}
}
},
collapseOrUp: {
hotkey: "ArrowLeft",
canRepeat: true,
handler: (e, tree) => {
var _a;
const item = tree.getFocusedItem();
if ((!item.isExpanded() || !item.isFolder()) && item.getItemMeta().level !== 0) {
(_a = item.getParent()) === null || _a === void 0 ? void 0 : _a.setFocused();
tree.updateDomFocus();
} else {
item.collapse();
}
}
},
focusFirstItem: {
hotkey: "Home",
handler: (e, tree) => {
var _a;
(_a = tree.getItems()[0]) === null || _a === void 0 ? void 0 : _a.setFocused();
tree.updateDomFocus();
}
},
focusLastItem: {
hotkey: "End",
handler: (e, tree) => {
var _a;
(_a = tree.getItems()[tree.getItems().length - 1]) === null || _a === void 0 ? void 0 : _a.setFocused();
tree.updateDomFocus();
}
}
}
};
// node_modules/@headless-tree/core/lib/esm/core/build-static-instance.js
var buildStaticInstance = (features, instanceType, buildOpts) => {
const instance = {};
const finalize = () => {
const opts = buildOpts(instance);
featureLoop: for (let i = 0; i < features.length; i++) {
const definition = features[i][instanceType];
if (!definition)
continue featureLoop;
methodLoop: for (const [key, method] of Object.entries(definition)) {
if (!method)
continue methodLoop;
const prev = instance[key];
instance[key] = (...args) => {
return method(Object.assign(Object.assign({}, opts), { prev }), ...args);
};
}
}
};
return [instance, finalize];
};
// node_modules/@headless-tree/core/lib/esm/utilities/errors.js
var throwError = (message) => Error(`Headless Tree: ${message}`);
// node_modules/@headless-tree/core/lib/esm/core/create-tree.js
var verifyFeatures = (features) => {
var _a;
const loadedFeatures = features === null || features === void 0 ? void 0 : features.map((feature) => feature.key);
for (const feature of features !== null && features !== void 0 ? features : []) {
const missingDependency = (_a = feature.deps) === null || _a === void 0 ? void 0 : _a.find((dep) => !(loadedFeatures === null || loadedFeatures === void 0 ? void 0 : loadedFeatures.includes(dep)));
if (missingDependency) {
throw throwError(`${feature.key} needs ${missingDependency}`);
}
}
};
var compareFeatures = (originalOrder) => (feature1, feature2) => {
var _a, _b;
if (feature2.key && ((_a = feature1.overwrites) === null || _a === void 0 ? void 0 : _a.includes(feature2.key))) {
return 1;
}
if (feature1.key && ((_b = feature2.overwrites) === null || _b === void 0 ? void 0 : _b.includes(feature1.key))) {
return -1;
}
return originalOrder.indexOf(feature1) - originalOrder.indexOf(feature2);
};
var sortFeatures = (features = []) => features.sort(compareFeatures(features));
var createTree = (initialConfig) => {
var _a, _b, _c, _d;
const buildInstance = (_a = initialConfig.instanceBuilder) !== null && _a !== void 0 ? _a : buildStaticInstance;
const additionalFeatures = [
treeFeature,
...sortFeatures(initialConfig.features)
];
verifyFeatures(additionalFeatures);
const features = [...additionalFeatures];
const [treeInstance, finalizeTree] = buildInstance(features, "treeInstance", (tree) => ({ tree }));
let state = additionalFeatures.reduce((acc, feature) => {
var _a2, _b2;
return (_b2 = (_a2 = feature.getInitialState) === null || _a2 === void 0 ? void 0 : _a2.call(feature, acc, treeInstance)) !== null && _b2 !== void 0 ? _b2 : acc;
}, (_c = (_b = initialConfig.initialState) !== null && _b !== void 0 ? _b : initialConfig.state) !== null && _c !== void 0 ? _c : {});
let config = additionalFeatures.reduce((acc, feature) => {
var _a2, _b2;
return (_b2 = (_a2 = feature.getDefaultConfig) === null || _a2 === void 0 ? void 0 : _a2.call(feature, acc, treeInstance)) !== null && _b2 !== void 0 ? _b2 : acc;
}, initialConfig);
const stateHandlerNames = additionalFeatures.reduce((acc, feature) => Object.assign(Object.assign({}, acc), feature.stateHandlerNames), {});
let treeElement;
const treeDataRef = { current: {} };
const itemInstancesMap = {};
let itemInstances = [];
const itemElementsMap = {};
const itemDataRefs = {};
let itemMetaMap = {};
const hotkeyPresets = {};
const rebuildItemMeta = () => {
itemInstances = [];
itemMetaMap = {};
const [rootInstance, finalizeRootInstance] = buildInstance(features, "itemInstance", (item) => ({ item, tree: treeInstance, itemId: config.rootItemId }));
finalizeRootInstance();
itemInstancesMap[config.rootItemId] = rootInstance;
itemMetaMap[config.rootItemId] = {
itemId: config.rootItemId,
index: -1,
parentId: null,
level: -1,
posInSet: 0,
setSize: 1
};
for (const item of treeInstance.getItemsMeta()) {
itemMetaMap[item.itemId] = item;
if (!itemInstancesMap[item.itemId]) {
const [instance, finalizeInstance] = buildInstance(features, "itemInstance", (instance2) => ({
item: instance2,
tree: treeInstance,
itemId: item.itemId
}));
finalizeInstance();
itemInstancesMap[item.itemId] = instance;
itemInstances.push(instance);
} else {
itemInstances.push(itemInstancesMap[item.itemId]);
}
}
};
const eachFeature = (fn) => {
for (const feature of additionalFeatures) {
fn(feature);
}
};
const mainFeature = {
key: "main",
treeInstance: {
getState: () => state,
setState: ({}, updater) => {
var _a2;
(_a2 = config.setState) === null || _a2 === void 0 ? void 0 : _a2.call(config, state);
},
applySubStateUpdate: ({}, stateName, updater) => {
state[stateName] = typeof updater === "function" ? updater(state[stateName]) : updater;
const externalStateSetter = config[stateHandlerNames[stateName]];
externalStateSetter === null || externalStateSetter === void 0 ? void 0 : externalStateSetter(state[stateName]);
},
// TODO rebuildSubTree: (itemId: string) => void;
rebuildTree: () => {
var _a2;
rebuildItemMeta();
(_a2 = config.setState) === null || _a2 === void 0 ? void 0 : _a2.call(config, state);
},
getConfig: () => config,
setConfig: (_, updater) => {
var _a2, _b2, _c2;
const newConfig = typeof updater === "function" ? updater(config) : updater;
const hasChangedExpandedItems = ((_a2 = newConfig.state) === null || _a2 === void 0 ? void 0 : _a2.expandedItems) && ((_b2 = newConfig.state) === null || _b2 === void 0 ? void 0 : _b2.expandedItems) !== state.expandedItems;
config = newConfig;
if (newConfig.state) {
state = Object.assign(Object.assign({}, state), newConfig.state);
}
if (hasChangedExpandedItems) {
rebuildItemMeta();
(_c2 = config.setState) === null || _c2 === void 0 ? void 0 : _c2.call(config, state);
}
},
getItemInstance: ({}, itemId) => itemInstancesMap[itemId],
getItems: () => itemInstances,
registerElement: ({}, element) => {
if (treeElement === element) {
return;
}
if (treeElement && !element) {
eachFeature((feature) => {
var _a2;
return (_a2 = feature.onTreeUnmount) === null || _a2 === void 0 ? void 0 : _a2.call(feature, treeInstance, treeElement);
});
} else if (!treeElement && element) {
eachFeature((feature) => {
var _a2;
return (_a2 = feature.onTreeMount) === null || _a2 === void 0 ? void 0 : _a2.call(feature, treeInstance, element);
});
}
treeElement = element;
},
getElement: () => treeElement,
getDataRef: () => treeDataRef,
getHotkeyPresets: () => hotkeyPresets
},
itemInstance: {
registerElement: ({ itemId, item }, element) => {
if (itemElementsMap[itemId] === element) {
return;
}
const oldElement = itemElementsMap[itemId];
if (oldElement && !element) {
eachFeature((feature) => {
var _a2;
return (_a2 = feature.onItemUnmount) === null || _a2 === void 0 ? void 0 : _a2.call(feature, item, oldElement, treeInstance);
});
} else if (!oldElement && element) {
eachFeature((feature) => {
var _a2;
return (_a2 = feature.onItemMount) === null || _a2 === void 0 ? void 0 : _a2.call(feature, item, element, treeInstance);
});
}
itemElementsMap[itemId] = element;
},
getElement: ({ itemId }) => itemElementsMap[itemId],
// eslint-disable-next-line no-return-assign
getDataRef: ({ itemId }) => {
var _a2;
return (_a2 = itemDataRefs[itemId]) !== null && _a2 !== void 0 ? _a2 : itemDataRefs[itemId] = { current: {} };
},
getItemMeta: ({ itemId }) => itemMetaMap[itemId]
}
};
features.unshift(mainFeature);
for (const feature of features) {
Object.assign(hotkeyPresets, (_d = feature.hotkeys) !== null && _d !== void 0 ? _d : {});
}
finalizeTree();
rebuildItemMeta();
return treeInstance;
};
// node_modules/@headless-tree/core/lib/esm/features/selection/feature.js
var selectionFeature = {
key: "selection",
getInitialState: (initialState) => Object.assign({ selectedItems: [] }, initialState),
getDefaultConfig: (defaultConfig, tree) => Object.assign({ setSelectedItems: makeStateUpdater("selectedItems", tree) }, defaultConfig),
stateHandlerNames: {
selectedItems: "setSelectedItems"
},
treeInstance: {
setSelectedItems: ({ tree }, selectedItems) => {
tree.applySubStateUpdate("selectedItems", selectedItems);
},
getSelectedItems: ({ tree }) => {
return tree.getState().selectedItems.map(tree.getItemInstance);
}
},
itemInstance: {
select: ({ tree, itemId }) => {
const { selectedItems } = tree.getState();
tree.setSelectedItems(selectedItems.includes(itemId) ? selectedItems : [...selectedItems, itemId]);
},
deselect: ({ tree, itemId }) => {
const { selectedItems } = tree.getState();
tree.setSelectedItems(selectedItems.filter((id) => id !== itemId));
},
isSelected: ({ tree, item }) => {
const { selectedItems } = tree.getState();
return selectedItems.includes(item.getItemMeta().itemId);
},
selectUpTo: ({ tree, item }, ctrl) => {
const indexA = item.getItemMeta().index;
const indexB = tree.getFocusedItem().getItemMeta().index;
const [a, b] = indexA < indexB ? [indexA, indexB] : [indexB, indexA];
const newSelectedItems = tree.getItems().slice(a, b + 1).map((treeItem) => treeItem.getItemMeta().itemId);
if (!ctrl) {
tree.setSelectedItems(newSelectedItems);
return;
}
const { selectedItems } = tree.getState();
const uniqueSelectedItems = [
.../* @__PURE__ */ new Set([...selectedItems, ...newSelectedItems])
];
tree.setSelectedItems(uniqueSelectedItems);
},
toggleSelect: ({ item }) => {
if (item.isSelected()) {
item.deselect();
} else {
item.select();
}
},
getProps: ({ tree, item, prev }) => Object.assign(Object.assign({}, prev === null || prev === void 0 ? void 0 : prev()), { "aria-selected": item.isSelected() ? "true" : "false", onClick: (e) => {
var _a, _b;
if (e.shiftKey) {
item.selectUpTo(e.ctrlKey || e.metaKey);
} else if (e.ctrlKey || e.metaKey) {
item.toggleSelect();
} else {
tree.setSelectedItems([item.getItemMeta().itemId]);
}
(_b = (_a = prev === null || prev === void 0 ? void 0 : prev()) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a, e);
} })
},
hotkeys: {
// setSelectedItem: {
// hotkey: "space",
// handler: (e, tree) => {
// tree.setSelectedItems([tree.getFocusedItem().getId()]);
// },
// },
toggleSelectedItem: {
hotkey: "Control+Space",
preventDefault: true,
handler: (_, tree) => {
tree.getFocusedItem().toggleSelect();
}
},
selectUpwards: {
hotkey: "Shift+ArrowUp",
handler: (e, tree) => {
const focused = tree.getFocusedItem();
const above = focused.getItemAbove();
if (!above)
return;
if (focused.isSelected() && above.isSelected()) {
focused.deselect();
} else {
above.select();
}
above.setFocused();
tree.updateDomFocus();
}
},
selectDownwards: {
hotkey: "Shift+ArrowDown",
handler: (e, tree) => {
const focused = tree.getFocusedItem();
const below = focused.getItemBelow();
if (!below)
return;
if (focused.isSelected() && below.isSelected()) {
focused.deselect();
} else {
below.select();
}
below.setFocused();
tree.updateDomFocus();
}
},
selectAll: {
hotkey: "Control+a",
preventDefault: true,
handler: (e, tree) => {
tree.setSelectedItems(tree.getItems().map((item) => item.getId()));
}
}
}
};
// node_modules/@headless-tree/core/lib/esm/features/async-data-loader/feature.js
var __awaiter2 = function(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function(resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function(resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var asyncDataLoaderFeature = {
key: "async-data-loader",
getInitialState: (initialState) => Object.assign({ loadingItemData: [], loadingItemChildrens: [] }, initialState),
getDefaultConfig: (defaultConfig, tree) => Object.assign({ setLoadingItemData: makeStateUpdater("loadingItemData", tree), setLoadingItemChildrens: makeStateUpdater("loadingItemChildrens", tree) }, defaultConfig),
stateHandlerNames: {
loadingItemData: "setLoadingItemData",
loadingItemChildrens: "setLoadingItemChildrens"
},
treeInstance: {
waitForItemDataLoaded: (_a, itemId_1) => __awaiter2(void 0, [_a, itemId_1], void 0, function* ({ tree }, itemId) {
tree.retrieveItemData(itemId);
if (!tree.getState().loadingItemData.includes(itemId)) {
return;
}
yield new Promise((resolve) => {
var _a2, _b;
var _c, _d;
const dataRef = tree.getDataRef();
(_a2 = (_c = dataRef.current).awaitingItemDataLoading) !== null && _a2 !== void 0 ? _a2 : _c.awaitingItemDataLoading = {};
(_b = (_d = dataRef.current.awaitingItemDataLoading)[itemId]) !== null && _b !== void 0 ? _b : _d[itemId] = [];
dataRef.current.awaitingItemDataLoading[itemId].push(resolve);
});
}),
waitForItemChildrenLoaded: (_a, itemId_1) => __awaiter2(void 0, [_a, itemId_1], void 0, function* ({ tree }, itemId) {
tree.retrieveChildrenIds(itemId);
if (!tree.getState().loadingItemChildrens.includes(itemId)) {
return;
}
yield new Promise((resolve) => {
var _a2, _b;
var _c, _d;
const dataRef = tree.getDataRef();
(_a2 = (_c = dataRef.current).awaitingItemChildrensLoading) !== null && _a2 !== void 0 ? _a2 : _c.awaitingItemChildrensLoading = {};
(_b = (_d = dataRef.current.awaitingItemChildrensLoading)[itemId]) !== null && _b !== void 0 ? _b : _d[itemId] = [];
dataRef.current.awaitingItemChildrensLoading[itemId].push(resolve);
});
}),
retrieveItemData: ({ tree }, itemId) => {
var _a, _b, _c, _d;
var _e, _f;
const config = tree.getConfig();
const dataRef = tree.getDataRef();
(_a = (_e = dataRef.current).itemData) !== null && _a !== void 0 ? _a : _e.itemData = {};
(_b = (_f = dataRef.current).childrenIds) !== null && _b !== void 0 ? _b : _f.childrenIds = {};
if (dataRef.current.itemData[itemId]) {
return dataRef.current.itemData[itemId];
}
if (!tree.getState().loadingItemData.includes(itemId)) {
tree.applySubStateUpdate("loadingItemData", (loadingItemData) => [
...loadingItemData,
itemId
]);
(() => __awaiter2(void 0, void 0, void 0, function* () {
var _a2, _b2, _c2;
const item = yield config.dataLoader.getItem(itemId);
dataRef.current.itemData[itemId] = item;
(_a2 = config.onLoadedItem) === null || _a2 === void 0 ? void 0 : _a2.call(config, itemId, item);
tree.applySubStateUpdate("loadingItemData", (loadingItemData) => loadingItemData.filter((id) => id !== itemId));
(_b2 = dataRef.current.awaitingItemDataLoading) === null || _b2 === void 0 ? void 0 : _b2[itemId].forEach((cb) => cb());
(_c2 = dataRef.current.awaitingItemDataLoading) === null || _c2 === void 0 ? true : delete _c2[itemId];
}))();
}
return (_d = (_c = config.createLoadingItemData) === null || _c === void 0 ? void 0 : _c.call(config)) !== null && _d !== void 0 ? _d : null;
},
retrieveChildrenIds: ({ tree }, itemId) => {
var _a;
var _b;
const config = tree.getConfig();
const dataRef = tree.getDataRef();
(_a = (_b = dataRef.current).childrenIds) !== null && _a !== void 0 ? _a : _b.childrenIds = {};
if (dataRef.current.childrenIds[itemId]) {
return dataRef.current.childrenIds[itemId];
}
if (tree.getState().loadingItemChildrens.includes(itemId)) {
return [];
}
tree.applySubStateUpdate("loadingItemChildrens", (loadingItemChildrens) => [...loadingItemChildrens, itemId]);
(() => __awaiter2(void 0, void 0, void 0, function* () {
var _a2, _b2, _c, _d;
const childrenIds = yield config.dataLoader.getChildren(itemId);
dataRef.current.childrenIds[itemId] = childrenIds;
(_a2 = config.onLoadedChildren) === null || _a2 === void 0 ? void 0 : _a2.call(config, itemId, childrenIds);
tree.applySubStateUpdate("loadingItemChildrens", (loadingItemChildrens) => loadingItemChildrens.filter((id) => id !== itemId));
tree.rebuildTree();
(_c = (_b2 = dataRef.current.awaitingItemChildrensLoading) === null || _b2 === void 0 ? void 0 : _b2[itemId]) === null || _c === void 0 ? void 0 : _c.forEach((cb) => cb());
(_d = dataRef.current.awaitingItemChildrensLoading) === null || _d === void 0 ? true : delete _d[itemId];
}))();
return [];
}
},
itemInstance: {
isLoading: ({ tree, item }) => tree.getState().loadingItemData.includes(item.getItemMeta().itemId) || tree.getState().loadingItemChildrens.includes(item.getItemMeta().itemId),
invalidateItemData: ({ tree, itemId }) => {
var _a;
const dataRef = tree.getDataRef();
(_a = dataRef.current.itemData) === null || _a === void 0 ? true : delete _a[itemId];
tree.retrieveItemData(itemId);
},
invalidateChildrenIds: ({ tree, itemId }) => {
var _a;
const dataRef = tree.getDataRef();
(_a = dataRef.current.childrenIds) === null || _a === void 0 ? true : delete _a[itemId];
tree.retrieveChildrenIds(itemId);
},
updateCachedChildrenIds: ({ tree, itemId }, childrenIds) => {
const dataRef = tree.getDataRef();
dataRef.current.childrenIds[itemId] = childrenIds;
tree.rebuildTree();
}
}
};
// node_modules/@headless-tree/core/lib/esm/features/drag-and-drop/utils.js
var ItemDropCategory;
(function(ItemDropCategory2) {
ItemDropCategory2[ItemDropCategory2["Item"] = 0] = "Item";
ItemDropCategory2[ItemDropCategory2["ExpandedFolder"] = 1] = "ExpandedFolder";
ItemDropCategory2[ItemDropCategory2["LastInGroup"] = 2] = "LastInGroup";
})(ItemDropCategory || (ItemDropCategory = {}));
var PlacementType;
(function(PlacementType2) {
PlacementType2[PlacementType2["ReorderAbove"] = 0] = "ReorderAbove";
PlacementType2[PlacementType2["ReorderBelow"] = 1] = "ReorderBelow";
PlacementType2[PlacementType2["MakeChild"] = 2] = "MakeChild";
PlacementType2[PlacementType2["Reparent"] = 3] = "Reparent";
})(PlacementType || (PlacementType = {}));
var canDrop = (dataTransfer, target, tree) => {
var _a, _b, _c;
const draggedItems = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems;
const config = tree.getConfig();
if (draggedItems && !((_c = (_b = config.canDrop) === null || _b === void 0 ? void 0 : _b.call(config, draggedItems, target)) !== null && _c !== void 0 ? _c : true)) {
return false;
}
if (draggedItems && draggedItems.some((draggedItem) => target.item.getId() === draggedItem.getId() || target.item.isDescendentOf(draggedItem.getId()))) {
return false;
}
if (!draggedItems && dataTransfer && config.canDropForeignDragObject && !config.canDropForeignDragObject(dataTransfer, target)) {
return false;
}
return true;
};
var getItemDropCategory = (item) => {
if (item.isExpanded()) {
return ItemDropCategory.ExpandedFolder;
}
const parent = item.getParent();
if (parent && item.getIndexInParent() === item.getItemMeta().setSize - 1) {
return ItemDropCategory.LastInGroup;
}
return ItemDropCategory.Item;
};
var getInsertionIndex = (children, childIndex, draggedItems) => {
var _a;
const numberOfDragItemsBeforeTarget = (_a = children.slice(0, childIndex).reduce((counter, child) => child && (draggedItems === null || draggedItems === void 0 ? void 0 : draggedItems.some((i) => i.getId() === child.getId())) ? ++counter : counter, 0)) !== null && _a !== void 0 ? _a : 0;
return childIndex - numberOfDragItemsBeforeTarget;
};
var getTargetPlacement = (e, item, tree, canMakeChild) => {
var _a, _b, _c, _d, _e;
const config = tree.getConfig();
if (!config.canReorder) {
return canMakeChild ? { type: PlacementType.MakeChild } : { type: PlacementType.ReorderBelow };
}
const bb = (_a = item.getElement()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
const topPercent = bb ? (e.clientY - bb.top) / bb.height : 0.5;
const leftPixels = bb ? e.clientX - bb.left : 0;
const targetDropCategory = getItemDropCategory(item);
const reorderAreaPercentage = !canMakeChild ? 0.5 : (_b = config.reorderAreaPercentage) !== null && _b !== void 0 ? _b : 0.3;
const indent = (_c = config.indent) !== null && _c !== void 0 ? _c : 20;
const makeChildType = canMakeChild ? PlacementType.MakeChild : PlacementType.ReorderBelow;
if (targetDropCategory === ItemDropCategory.ExpandedFolder) {
if (topPercent < reorderAreaPercentage) {
return { type: PlacementType.ReorderAbove };
}
return { type: makeChildType };
}
if (targetDropCategory === ItemDropCategory.LastInGroup) {
if (leftPixels < item.getItemMeta().level * indent) {
if (topPercent < 0.5) {
return { type: PlacementType.ReorderAbove };
}
const minLevel = (_e = (_d = item.getItemBelow()) === null || _d === void 0 ? void 0 : _d.getItemMeta().level) !== null && _e !== void 0 ? _e : 0;
return {
type: PlacementType.Reparent,
reparentLevel: Math.max(minLevel, Math.floor(leftPixels / indent))
};
}
}
if (topPercent < reorderAreaPercentage) {
return { type: PlacementType.ReorderAbove };
}
if (topPercent > 1 - reorderAreaPercentage) {
return { type: PlacementType.ReorderBelow };
}
return { type: makeChildType };
};
var getDragCode = (e, item, tree) => {
const placement = getTargetPlacement(e, item, tree, true);
return [
item.getId(),
placement.type,
placement.type === PlacementType.Reparent ? placement.reparentLevel : 0
].join("__");
};
var getNthParent = (item, n) => {
if (n === item.getItemMeta().level) {
return item;
}
return getNthParent(item.getParent(), n);
};
var getReparentTarget = (item, reparentLevel, draggedItems) => {
const itemMeta = item.getItemMeta();
const reparentedTarget = getNthParent(item, reparentLevel - 1);
const targetItemAbove = getNthParent(item, reparentLevel);
const targetIndex = targetItemAbove.getIndexInParent() + 1;
return {
item: reparentedTarget,
childIndex: targetIndex,
insertionIndex: getInsertionIndex(reparentedTarget.getChildren(), targetIndex, draggedItems),
dragLineIndex: itemMeta.index + 1,
dragLineLevel: reparentLevel
};
};
var getDragTarget = (e, item, tree, canReorder = tree.getConfig().canReorder) => {
var _a;
const draggedItems = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems;
const itemMeta = item.getItemMeta();
const parent = item.getParent();
const itemTarget = { item };
const parentTarget = parent ? { item: parent } : null;
const canBecomeSibling = parentTarget && canDrop(e.dataTransfer, parentTarget, tree);
const canMakeChild = canDrop(e.dataTransfer, itemTarget, tree);
const placement = getTargetPlacement(e, item, tree, canMakeChild);
if (!canReorder && parent && canBecomeSibling && placement.type !== PlacementType.MakeChild) {
return parentTarget;
}
if (!canReorder && parent && !canBecomeSibling) {
return getDragTarget(e, parent, tree, false);
}
if (!parent) {
return itemTarget;
}
if (placement.type === PlacementType.MakeChild) {
return itemTarget;
}
if (!canBecomeSibling) {
return getDragTarget(e, parent, tree, false);
}
if (placement.type === PlacementType.Reparent) {
return getReparentTarget(item, placement.reparentLevel, draggedItems);
}
const maybeAddOneForBelow = placement.type === PlacementType.ReorderAbove ? 0 : 1;
const childIndex = item.getIndexInParent() + maybeAddOneForBelow;
return {
item: parent,
dragLineIndex: itemMeta.index + maybeAddOneForBelow,
dragLineLevel: itemMeta.level,
childIndex,
// TODO performance could be improved by computing this only when dragcode changed
insertionIndex: getInsertionIndex(parent.getChildren(), childIndex, draggedItems)
};
};
// node_modules/@headless-tree/core/lib/esm/features/drag-and-drop/feature.js
var __awaiter3 = function(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function(resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function(resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var dragAndDropFeature = {
key: "drag-and-drop",
deps: ["selection"],
getDefaultConfig: (defaultConfig, tree) => Object.assign({ canDrop: (_, target) => target.item.isFolder(), canDropForeignDragObject: () => false, setDndState: makeStateUpdater("dnd", tree), canReorder: true }, defaultConfig),
stateHandlerNames: {
dnd: "setDndState"
},
treeInstance: {
getDragTarget: ({ tree }) => {
var _a, _b;
return (_b = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.dragTarget) !== null && _b !== void 0 ? _b : null;
},
getDragLineData: ({ tree }) => {
var _a, _b, _c, _d, _e, _f;
const target = tree.getDragTarget();
const indent = ((_a = target === null || target === void 0 ? void 0 : target.item.getItemMeta().level) !== null && _a !== void 0 ? _a : 0) + 1;
const treeBb = (_b = tree.getElement()) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect();
if (!target || !treeBb || !("childIndex" in target))
return null;
const leftOffset = target.dragLineLevel * ((_c = tree.getConfig().indent) !== null && _c !== void 0 ? _c : 1);
const targetItem = tree.getItems()[target.dragLineIndex];
if (!targetItem) {
const bb2 = (_e = (_d = tree.getItems()[target.dragLineIndex - 1]) === null || _d === void 0 ? void 0 : _d.getElement()) === null || _e === void 0 ? void 0 : _e.getBoundingClientRect();
if (bb2) {
return {
indent,
top: bb2.bottom - treeBb.top,
left: bb2.left + leftOffset - treeBb.left,
width: bb2.width - leftOffset
};
}
}
const bb = (_f = targetItem.getElement()) === null || _f === void 0 ? void 0 : _f.getBoundingClientRect();
if (bb) {
return {
indent,
top: bb.top - treeBb.top,
left: bb.left + leftOffset - treeBb.left,
width: bb.width - leftOffset
};
}
return null;
},
getDragLineStyle: ({ tree }, topOffset = -1, leftOffset = -8) => {
const dragLine = tree.getDragLineData();
return dragLine ? {
top: `${dragLine.top + topOffset}px`,
left: `${dragLine.left + leftOffset}px`,
width: `${dragLine.width - leftOffset}px`,
pointerEvents: "none"
// important to prevent capturing drag events
} : { display: "none" };
},
getContainerProps: ({ prev }, treeLabel) => {
const prevProps = prev === null || prev === void 0 ? void 0 : prev(treeLabel);
return Object.assign(Object.assign({}, prevProps), { style: Object.assign(Object.assign({}, prevProps === null || prevProps === void 0 ? void 0 : prevProps.style), { position: "relative" }) });
}
},
itemInstance: {
getProps: ({ tree, item, prev }) => Object.assign(Object.assign({}, prev === null || prev === void 0 ? void 0 : prev()), { draggable: true, onDragStart: (e) => {
var _a, _b, _c;
const selectedItems = tree.getSelectedItems();
const items = selectedItems.includes(item) ? selectedItems : [item];
const config = tree.getConfig();
if (!selectedItems.includes(item)) {
tree.setSelectedItems([item.getItemMeta().itemId]);
}
if (!((_b = (_a = config.canDrag) === null || _a === void 0 ? void 0 : _a.call(config, items)) !== null && _b !== void 0 ? _b : true)) {
e.preventDefault();
return;
}
if (config.createForeignDragObject) {
const { format, data } = config.createForeignDragObject(items);
(_c = e.dataTransfer) === null || _c === void 0 ? void 0 : _c.setData(format, data);
}
tree.applySubStateUpdate("dnd", {
draggedItems: items,
draggingOverItem: tree.getFocusedItem()
});
}, onDragOver: (e) => {
var _a, _b, _c;
const dataRef = tree.getDataRef();
const nextDragCode = getDragCode(e, item, tree);
if (nextDragCode === dataRef.current.lastDragCode) {
if (dataRef.current.lastAllowDrop) {
e.preventDefault();
}
return;
}
dataRef.current.lastDragCode = nextDragCode;
const target = getDragTarget(e, item, tree);
if (!((_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems) && (!e.dataTransfer || !((_c = (_b = tree.getConfig()).canDropForeignDragObject) === null || _c === void 0 ? void 0 : _c.call(_b, e.dataTransfer, target)))) {
dataRef.current.lastAllowDrop = false;
return;
}
if (!canDrop(e.dataTransfer, target, tree)) {
dataRef.current.lastAllowDrop = false;
return;
}
tree.applySubStateUpdate("dnd", (state) => Object.assign(Object.assign({}, state), { dragTarget: target, draggingOverItem: item }));
dataRef.current.lastAllowDrop = true;
e.preventDefault();
}, onDragLeave: () => {
const dataRef = tree.getDataRef();
dataRef.current.lastDragCode = "no-drag";
tree.applySubStateUpdate("dnd", (state) => Object.assign(Object.assign({}, state), { draggingOverItem: void 0, dragTarget: void 0 }));
}, onDragEnd: (e) => {
var _a, _b, _c, _d;
const draggedItems = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems;
tree.applySubStateUpdate("dnd", null);
if (((_b = e.dataTransfer) === null || _b === void 0 ? void 0 : _b.dropEffect) === "none" || !draggedItems) {
return;
}
(_d = (_c = tree.getConfig()).onCompleteForeignDrop) === null || _d === void 0 ? void 0 : _d.call(_c, draggedItems);
}, onDrop: (e) => __awaiter3(void 0, void 0, void 0, function* () {
var _a, _b, _c;
const dataRef = tree.getDataRef();
const target = getDragTarget(e, item, tree);
if (!canDrop(e.dataTransfer, target, tree)) {
return;
}
e.preventDefault();
const config = tree.getConfig();
const draggedItems = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems;
dataRef.current.lastDragCode = void 0;
tree.applySubStateUpdate("dnd", null);
if (draggedItems) {
yield (_b = config.onDrop) === null || _b === void 0 ? void 0 : _b.call(config, draggedItems, target);
} else if (e.dataTransfer) {
yield (_c = config.onDropForeignDragObject) === null || _c === void 0 ? void 0 : _c.call(config, e.dataTransfer, target);
}
}) }),
isDragTarget: ({ tree, item }) => {
const target = tree.getDragTarget();
return target ? target.item.getId() === item.getId() : false;
},
isDragTargetAbove: ({ tree, item }) => {
const target = tree.getDragTarget();
if (!target || !("childIndex" in target) || target.item !== item.getParent())
return false;
return target.childIndex === item.getItemMeta().posInSet;
},
isDragTargetBelow: ({ tree, item }) => {
const target = tree.getDragTarget();
if (!target || !("childIndex" in target) || target.item !== item.getParent())
return false;
return target.childIndex - 1 === item.getItemMeta().posInSet;
},
isDraggingOver: ({ tree, item }) => {
var _a, _b;
return ((_b = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggingOverItem) === null || _b === void 0 ? void 0 : _b.getId()) === item.getId();
}
}
};
// node_modules/@headless-tree/core/lib/esm/features/prop-memoization/feature.js
var memoize = (props, dataRef) => {
var _a;
(_a = dataRef.memoizedProps) !== null && _a !== void 0 ? _a : dataRef.memoizedProps = {};
for (const key in props) {
if (typeof props[key] === "function") {
if (key in dataRef.memoizedProps) {
props[key] = dataRef.memoizedProps[key];
} else {
dataRef.memoizedProps[key] = props[key];
}
}
}
return props;
};
var propMemoizationFeature = {
key: "prop-memoization",
overwrites: [
"main",
"async-data-loader",
"sync-data-loader",
"drag-and-drop",
"expand-all",
"hotkeys-core",
"renaming",
"search",
"selection"
],
treeInstance: {
getContainerProps: ({ tree, prev }, treeLabel) => {
var _a;
const dataRef = tree.getDataRef();
const props = (_a = prev === null || prev === void 0 ? void 0 : prev(treeLabel)) !== null && _a !== void 0 ? _a : {};
return memoize(props, dataRef.current);
}
},
itemInstance: {
getProps: ({ item, prev }) => {
var _a;
const dataRef = item.getDataRef();
const props = (_a = prev === null || prev === void 0 ? void 0 : prev()) !== null && _a !== void 0 ? _a : {};
return memoize(props, dataRef.current);
}
}
};
// node_modules/@headless-tree/react/lib/esm/use-tree.js
import { useState } from "react";
var useTree = (config) => {
const [tree] = useState(() => ({ current: createTree(config) }));
const [state, setState] = useState(() => tree.current.getState());
tree.current.setConfig((prev) => Object.assign(Object.assign(Object.assign({}, prev), config), { state: Object.assign(Object.assign({}, state), config.state), setState: (state2) => {
var _a;
setState(state2);
(_a = config.setState) === null || _a === void 0 ? void 0 : _a.call(config, state2);
} }));
return tree.current;
};
// src/dashboard/view/EntryTree.tsx
import { IndexEvent } from "alinea/core/db/IndexEvent";
import { getType } from "alinea/core/Internal";
import { assert } from "alinea/core/util/Assert";
import { debounce } from "alinea/core/util/Debounce";
import { Icon, px } from "alinea/ui";
import { IcOutlineArchive } from "alinea/ui/icons/IcOutlineArchive";
import { IcRoundEdit } from "alinea/ui/icons/IcRoundEdit";
import { IcRoundKeyboardArrowDown } from "alinea/ui/icons/IcRoundKeyboardArrowDown";
import { IcRoundKeyboardArrowRight } from "alinea/ui/icons/IcRoundKeyboardArrowRight";
import { IcRoundTranslate } from "alinea/ui/icons/IcRoundTranslate";
import { IcTwotoneDescription } from "alinea/ui/icons/IcTwotoneDescription";
import { IcTwotoneFolder } from "alinea/ui/icons/IcTwotoneFolder";
import { RiFlashlightFill } from "alinea/ui/icons/RiFlashlightFill";
import {
forwardRef,
memo,
useEffect,
useLayoutEffect,
useMemo,
useRef
} from "react";
import { dbAtom } from "../atoms/DbAtoms.js";
import {
ROOT_ID,
useEntryTreeProvider
} from "../atoms/EntryAtoms.js";
import { useConfig } from "../hook/UseConfig.js";
import { useLocale } from "../hook/UseLocale.js";
import { useNav } from "../hook/UseNav.js";
import { useRoot } from "../hook/UseRoot.js";
import { useNavigate } from "../util/HashRouter.js";
// src/dashboard/view/EntryTree.module.scss
var EntryTree_module_default = {
"tree": "alinea-EntryTree-tree",
"tree-item": "alinea-EntryTree-tree-item",
"treeItem": "alinea-EntryTree-tree-item",
"tree-item-icon": "alinea-EntryTree-tree-item-icon",
"treeItemIcon": "alinea-EntryTree-tree-item-icon",
"is-drop": "alinea-EntryTree-is-drop",
"isDrop": "alinea-EntryTree-is-drop",
"is-dropAbove": "alinea-EntryTree-is-dropAbove",
"isDropAbove": "alinea-EntryTree-is-dropAbove",
"is-dropBelow": "alinea-EntryTree-is-dropBelow",
"isDropBelow": "alinea-EntryTree-is-dropBelow",
"is-selected": "alinea-EntryTree-is-selected",
"isSelected": "alinea-EntryTree-is-selected",
"tree-item-label-itemName": "alinea-EntryTree-tree-item-label-itemName",
"treeItemLabelItemName": "alinea-EntryTree-tree-item-label-itemName",
"is-parentSelected": "alinea-EntryTree-is-parentSelected",
"isParentSelected": "alinea-EntryTree-is-parentSelected",
"is-archived": "alinea-EntryTree-is-archived",
"isArchived": "alinea-EntryTree-is-archived",
"is-unpublished": "alinea-EntryTree-is-unpublished",
"isUnpublished": "alinea-EntryTree-is-unpublished",
"is-untranslated": "alinea-EntryTree-is-untranslated",
"isUntranslated": "alinea-EntryTree-is-untranslated",
"tree-item-label": "alinea-EntryTree-tree-item-label",
"treeItemLabel": "alinea-EntryTree-tree-item-label",
"tree-item-arrow": "alinea-EntryTree-tree-item-arrow",
"treeItemArrow": "alinea-EntryTree-tree-item-arrow",
"tree-title": "alinea-EntryTree-tree-title",
"treeTitle": "alinea-EntryTree-tree-title",
"tree-status": "alinea-EntryTree-tree-status",
"treeStatus": "alinea-EntryTree-tree-status",
"is-draft": "alinea-EntryTree-is-draft",
"isDraft": "alinea-EntryTree-is-draft",
"is-children": "alinea-EntryTree-is-children",
"isChildren": "alinea-EntryTree-is-children"
};
// src/dashboard/view/EntryTree.tsx
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
import { createElement } from "react";
var styles = dist_default(EntryTree_module_default);
function selectedEntry(locale, item) {
return item.entries.find((entry) => entry.locale === locale) ?? item.entries[0];
}
var TreeItem