@noya-app/noya-file-explorer 0.0.16 → 0.0.17

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/tree-visit/lib/access.js","../../../node_modules/tree-visit/lib/sort.js","../../../node_modules/tree-visit/lib/ancestors.js","../../../node_modules/tree-visit/lib/diagram/boxDiagram.js","../../../node_modules/tree-visit/lib/diagram/directoryDiagram.js","../../../node_modules/tree-visit/lib/diagram.js","../../../node_modules/tree-visit/lib/visit.js","../../../node_modules/tree-visit/lib/entries.js","../../../node_modules/tree-visit/lib/find.js","../../../node_modules/tree-visit/lib/reduce.js","../../../node_modules/tree-visit/lib/flat.js","../../../node_modules/tree-visit/lib/map.js","../../../node_modules/tree-visit/lib/transformPath.js","../../../node_modules/tree-visit/lib/operation.js","../../../node_modules/tree-visit/lib/insert.js","../../../node_modules/tree-visit/lib/move.js","../../../node_modules/tree-visit/lib/remove.js","../../../node_modules/tree-visit/lib/replace.js","../../../node_modules/tree-visit/lib/splice.js","../../../node_modules/tree-visit/lib/defineTree.js","../../../node_modules/tree-visit/lib/indexPath.js","../../../node_modules/tree-visit/lib/options.js","../../../node_modules/tree-visit/lib/withOptions.js","../../../node_modules/tree-visit/lib/index.js","../src/MediaCollection.tsx","../src/utils/mediaItemTree.ts","../src/utils/files.ts","../src/utils/handleFileDrop.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.get = get;\nexports.ancestors = ancestors;\nexports.access = access;\nexports.accessPath = accessPath;\n/**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction get(node, indexPath, options) {\n if (options.includeTraversalContext) {\n const accessed = _getPath(node, indexPath, options);\n return accessed[accessed.length - 1];\n }\n let path = indexPath.slice();\n while (path.length > 0) {\n let index = path.shift();\n const children = options.getChildren(node, path);\n const child = children[index];\n if (!child) {\n return undefined;\n }\n node = child;\n }\n return node;\n}\n/**\n * Returns an array of each node in an `IndexPath`, excluding the last node.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction ancestors(node, indexPath, options) {\n return _getPath(node, indexPath, options).slice(0, -1);\n}\nfunction _getPath(node, indexPath, options) {\n let path = indexPath.slice();\n let result = [node];\n while (path.length > 0) {\n let index = path.shift();\n const context = options.includeTraversalContext ? makeTraversalContext(result) : undefined;\n const children = options.getChildren(node, path, context);\n const child = children[index];\n if (!child) {\n return result;\n }\n node = child;\n result.push(node);\n }\n return result;\n}\n/**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction access(node, indexPath, options) {\n if (options.includeTraversalContext) {\n const accessed = accessPath(node, indexPath, options);\n return accessed[accessed.length - 1];\n }\n let path = indexPath.slice();\n while (path.length > 0) {\n let index = path.shift();\n node = options.getChildren(node, path)[index];\n }\n return node;\n}\n/**\n * Returns an array of each node in an `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction accessPath(node, indexPath, options) {\n let path = indexPath.slice();\n let result = [node];\n while (path.length > 0) {\n let index = path.shift();\n const context = options.includeTraversalContext ? makeTraversalContext(result) : undefined;\n node = options.getChildren(node, path, context)[index];\n result.push(node);\n }\n return result;\n}\nfunction makeTraversalContext(array) {\n return {\n getRoot: () => array[0],\n getParent: () => array[array.length - 2],\n getAncestors: () => array.slice(0, -1),\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.comparePathsByComponent = comparePathsByComponent;\nexports.sortPaths = sortPaths;\nfunction comparePathsByComponent(a, b) {\n for (let i = 0; i < Math.min(a.length, b.length); i++) {\n if (a[i] < b[i])\n return -1;\n if (a[i] > b[i])\n return 1;\n }\n // If all preceding components are equal, the shorter array comes first\n return a.length - b.length;\n}\nfunction sortPaths(indexPaths) {\n return [...indexPaths].sort(comparePathsByComponent);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ancestorPaths = ancestorPaths;\nconst sort_1 = require(\"./sort\");\n/**\n * This function cleans up the `indexPaths` array by\n *\n * 1. sorting the `indexPaths`\n * 2. removing any `indexPaths` that are descendants of other `indexPaths`\n * 3. removing any `indexPaths` that are duplicates\n */\nfunction ancestorPaths(paths, options) {\n var _a;\n const result = new Map();\n const compare = (_a = options === null || options === void 0 ? void 0 : options.compare) !== null && _a !== void 0 ? _a : sort_1.comparePathsByComponent;\n const sortedIndexPaths = paths.sort(compare);\n for (const indexPath of sortedIndexPaths) {\n const foundParent = indexPath.some((_, index) => {\n const parentKey = indexPath.slice(0, index).join();\n return result.has(parentKey);\n });\n if (foundParent)\n continue;\n result.set(indexPath.join(), indexPath);\n }\n return Array.from(result.values());\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.boxDiagram = boxDiagram;\nvar BoxDrawing;\n(function (BoxDrawing) {\n BoxDrawing[\"TopLeft\"] = \"\\u250C\";\n BoxDrawing[\"TopRight\"] = \"\\u2510\";\n BoxDrawing[\"BottomLeft\"] = \"\\u2514\";\n BoxDrawing[\"BottomRight\"] = \"\\u2518\";\n BoxDrawing[\"Horizontal\"] = \"\\u2500\";\n BoxDrawing[\"Vertical\"] = \"\\u2502\";\n BoxDrawing[\"BottomConnectorDown\"] = \"\\u252C\";\n BoxDrawing[\"BottomConnectorUp\"] = \"\\u2534\";\n BoxDrawing[\"TopConnectorUp\"] = \"\\u2534\";\n})(BoxDrawing || (BoxDrawing = {}));\nfunction wrapLabelInBox(label) {\n const lines = label.split('\\n');\n const length = Math.max(...lines.map((line) => line.length));\n const horizontalMargin = 1;\n const width = length + horizontalMargin * 2 + 2;\n const height = 2 + lines.length;\n const diagram = [\n [\n BoxDrawing.TopLeft,\n BoxDrawing.Horizontal.repeat(length + horizontalMargin * 2),\n BoxDrawing.TopRight,\n ],\n ...lines.map((line) => [\n BoxDrawing.Vertical,\n ' '.repeat(horizontalMargin),\n line + (line.length < length ? ' '.repeat(length - line.length) : ''),\n ' '.repeat(horizontalMargin),\n BoxDrawing.Vertical,\n ]),\n [\n BoxDrawing.BottomLeft,\n BoxDrawing.Horizontal.repeat(length + horizontalMargin * 2),\n BoxDrawing.BottomRight,\n ],\n ];\n return {\n width,\n height,\n contents: diagram.map((parts) => parts.join('')),\n };\n}\nfunction mergeBoxesHorizontal(boxes) {\n const horizontalMargin = 1;\n if (boxes.length === 0) {\n throw new Error(\"Can't merge empty array of boxes\");\n }\n return boxes.slice(1).reduce((result, box) => {\n const height = Math.max(result.height, box.height);\n const width = result.width + horizontalMargin + box.width;\n const contents = [];\n for (let i = 0; i < height; i++) {\n contents.push((result.contents[i] || ' '.repeat(result.width)) +\n ' '.repeat(horizontalMargin) +\n (box.contents[i] || ' '.repeat(box.width)));\n }\n return { height, width, contents: centerBlock(contents, width) };\n }, boxes[0]);\n}\nfunction mergeBoxesVertical(boxes) {\n const verticalMargin = 1;\n if (boxes.length === 0) {\n throw new Error(\"Can't merge empty array of boxes\");\n }\n const width = Math.max(...boxes.map((box) => box.width));\n return boxes.slice(1).reduce((result, box) => {\n const height = result.height + verticalMargin + box.height;\n const contents = [];\n for (let i = 0; i < height; i++) {\n if (i < result.height) {\n contents.push(result.contents[i]);\n }\n else if (i === result.height) {\n contents.push(' '.repeat(width));\n }\n else {\n contents.push(box.contents[i - result.height - 1]);\n }\n }\n return { height, width, contents: centerBlock(contents, width) };\n }, boxes[0]);\n}\nfunction nodeDiagram(node, indexPath, options) {\n const label = options.getLabel(node, indexPath);\n const box = wrapLabelInBox(label);\n const children = options.getChildren(node, indexPath);\n if (children.length === 0)\n return box;\n const childBoxes = children.map((child, index) => {\n const childBox = nodeDiagram(child, [...indexPath, index], options);\n // Draw top connector for each child\n childBox.contents[0] = insertSubstring(childBox.contents[0], centerIndex(childBox.contents[0].length), BoxDrawing.TopConnectorUp);\n return childBox;\n });\n const result = mergeBoxesVertical([box, mergeBoxesHorizontal(childBoxes)]);\n // Draw connectors\n const contents = result.contents;\n const mid = centerIndex(result.width);\n contents[box.height - 1] = insertSubstring(contents[box.height - 1], mid, BoxDrawing.BottomConnectorDown);\n let min = contents[box.height + 1].indexOf(BoxDrawing.TopConnectorUp);\n let max = contents[box.height + 1].lastIndexOf(BoxDrawing.TopConnectorUp);\n for (let i = min; i <= max; i++) {\n let character;\n if (i === mid) {\n character =\n childBoxes.length > 1\n ? BoxDrawing.BottomConnectorUp\n : BoxDrawing.Vertical;\n }\n else if (i === min) {\n character = BoxDrawing.TopLeft;\n }\n else if (i === max) {\n character = BoxDrawing.TopRight;\n }\n else {\n character = BoxDrawing.Horizontal;\n }\n result.contents[box.height] = insertSubstring(result.contents[box.height], i, character);\n }\n return result;\n}\nfunction boxDiagram(node, options) {\n return nodeDiagram(node, [], options).contents.join('\\n');\n}\nfunction centerIndex(width) {\n return Math.floor(width / 2);\n}\nfunction centerLine(line, width) {\n const remainder = width - line.length;\n if (remainder <= 0)\n return line;\n const prefixLength = centerIndex(remainder);\n const suffixLength = centerIndex(remainder);\n const result = ' '.repeat(prefixLength) + line + ' '.repeat(suffixLength);\n return prefixLength + suffixLength + result.length < width\n ? result + ' '\n : result;\n}\nfunction centerBlock(lines, width) {\n return lines.map((line) => centerLine(line, width));\n}\nfunction insertSubstring(string, index, substring) {\n if (index > string.length - 1)\n return string;\n return string.substring(0, index) + substring + string.substring(index + 1);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.directoryDiagram = directoryDiagram;\nexports.isMultiline = isMultiline;\nexports.prefixBlock = prefixBlock;\nvar LinePrefix;\n(function (LinePrefix) {\n LinePrefix[\"Child\"] = \"\\u251C\\u2500\\u2500 \";\n LinePrefix[\"LastChild\"] = \"\\u2514\\u2500\\u2500 \";\n LinePrefix[\"NestedChild\"] = \"\\u2502 \";\n LinePrefix[\"LastNestedChild\"] = \" \";\n})(LinePrefix || (LinePrefix = {}));\nfunction nodeDiagram(node, indexPath, options) {\n const label = options.getLabel(node, indexPath);\n const depth = indexPath.length;\n let rootLine = { label, depth, prefix: '', multilinePrefix: '' };\n const children = options.getChildren(node, indexPath);\n if (children.length === 0)\n return [rootLine];\n // Special-case nodes with a single child, collapsing their labels to a single line\n if (options.flattenSingleChildNodes &&\n children.length === 1 &&\n !isMultiline(label)) {\n const [line] = nodeDiagram(children[0], [...indexPath, 0], options);\n const hideRoot = indexPath.length === 0 && label === '';\n rootLine.label = hideRoot\n ? `/ ${line.label}`\n : `${rootLine.label} / ${line.label}`;\n return [rootLine];\n }\n const nestedLines = children.flatMap((file, index, array) => {\n const childIsLast = index === array.length - 1;\n const childLines = nodeDiagram(file, [...indexPath, index], options);\n const childPrefix = childIsLast ? LinePrefix.LastChild : LinePrefix.Child;\n const childMultilinePrefix = childIsLast\n ? LinePrefix.LastNestedChild\n : LinePrefix.NestedChild;\n childLines.forEach((line) => {\n if (line.depth === depth + 1) {\n line.prefix = childPrefix + line.prefix;\n line.multilinePrefix = childMultilinePrefix + line.multilinePrefix;\n }\n else if (childIsLast) {\n line.prefix = LinePrefix.LastNestedChild + line.prefix;\n line.multilinePrefix = LinePrefix.LastNestedChild + line.multilinePrefix;\n }\n else {\n line.prefix = LinePrefix.NestedChild + line.prefix;\n line.multilinePrefix = LinePrefix.NestedChild + line.multilinePrefix;\n }\n });\n return childLines;\n });\n return [rootLine, ...nestedLines];\n}\nfunction directoryDiagram(node, options) {\n const lines = nodeDiagram(node, [], options);\n const strings = lines.map((line) => prefixBlock(line.label, line.prefix, line.multilinePrefix));\n return strings.join('\\n');\n}\nfunction isMultiline(line) {\n return line.includes('\\n');\n}\nfunction prefixBlock(block, prefix, multilinePrefix) {\n if (!isMultiline(block))\n return prefix + block;\n return block\n .split('\\n')\n .map((line, index) => (index === 0 ? prefix : multilinePrefix) + line)\n .join('\\n');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.diagram = diagram;\nconst boxDiagram_1 = require(\"./diagram/boxDiagram\");\nconst directoryDiagram_1 = require(\"./diagram/directoryDiagram\");\n/**\n * Generate a diagram of the tree, as a string.\n */\nfunction diagram(node, options) {\n if (options.type === 'box') {\n return (0, boxDiagram_1.boxDiagram)(node, options);\n }\n return (0, directoryDiagram_1.directoryDiagram)(node, options);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.STOP = exports.SKIP = void 0;\nexports.visit = visit;\nexports.SKIP = 'skip';\nexports.STOP = 'stop';\n/**\n * Visit each node in the tree, calling an optional `onEnter` and `onLeave` for each.\n *\n * From `onEnter`:\n *\n * - return nothing or `undefined` to continue\n * - return `\"skip\"` to skip the children of that node and the subsequent `onLeave`\n * - return `\"stop\"` to end traversal\n *\n * From `onLeave`:\n *\n * - return nothing or `undefined` to continue\n * - return `\"stop\"` to end traversal\n */\nfunction visit(node, options) {\n const { onEnter, onLeave, getChildren: originalGetChildren, onDetectCycle, getIdentifier, direction = 'forward', } = options;\n const getChildren = (node, indexPath, context) => {\n const children = originalGetChildren(node, indexPath, context);\n return direction === 'forward' ? children : children.slice().reverse();\n };\n let indexPath = [];\n let stack = [{ node }];\n const visited = onDetectCycle ? new Set() : undefined;\n const context = options.includeTraversalContext\n ? {\n getRoot() {\n return node;\n },\n getParent() {\n var _a;\n return (_a = stack[stack.length - 2]) === null || _a === void 0 ? void 0 : _a.node;\n },\n getAncestors() {\n return stack.slice(0, -1).map((wrapper) => wrapper.node);\n },\n }\n : undefined;\n const getIndexPath = options.reuseIndexPath\n ? () => indexPath\n : () => indexPath.slice();\n while (stack.length > 0) {\n let wrapper = stack[stack.length - 1];\n // Visit the wrapped node\n if (wrapper.state === undefined) {\n // Add cycle detection before visiting node\n if (visited) {\n const id = getIdentifier ? getIdentifier(wrapper.node) : wrapper.node;\n if (visited.has(id)) {\n const action = typeof onDetectCycle === 'function'\n ? onDetectCycle(wrapper.node, getIndexPath(), context)\n : onDetectCycle;\n if (action === 'error') {\n throw new Error('Cycle detected in tree');\n }\n else {\n // action === 'skip'\n wrapper.state = -1; // Mark as skipped\n continue;\n }\n }\n visited.add(id);\n }\n const enterResult = onEnter === null || onEnter === void 0 ? void 0 : onEnter(wrapper.node, getIndexPath());\n if (enterResult === exports.STOP)\n return;\n wrapper.state = enterResult === exports.SKIP ? -1 : 0;\n }\n const children = wrapper.children || getChildren(wrapper.node, getIndexPath(), context);\n if (!wrapper.children) {\n wrapper.children = children;\n }\n // If the node wasn't skipped\n if (wrapper.state !== -1) {\n // Visit the next child\n if (wrapper.state < children.length) {\n let currentIndex = wrapper.state;\n indexPath.push(direction === 'forward'\n ? currentIndex\n : children.length - currentIndex - 1);\n stack.push({ node: children[currentIndex] });\n wrapper.state = currentIndex + 1;\n continue;\n }\n const leaveResult = onLeave === null || onLeave === void 0 ? void 0 : onLeave(wrapper.node, getIndexPath());\n if (leaveResult === exports.STOP)\n return;\n }\n // Remove node from visited set when leaving\n if (visited) {\n const id = getIdentifier ? getIdentifier(wrapper.node) : wrapper.node;\n visited.delete(id);\n }\n indexPath.pop();\n stack.pop();\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.entries = entries;\nconst visit_1 = require(\"./visit\");\nfunction entries(node, options) {\n let result = [];\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onEnter: (item, indexPath) => {\n result.push([indexPath, item]);\n } }));\n return result;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.find = find;\nexports.findAll = findAll;\nexports.findPath = findPath;\nexports.findAllPaths = findAllPaths;\nconst visit_1 = require(\"./visit\");\nfunction find(node, options) {\n let found;\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n found = child;\n return visit_1.STOP;\n }\n } }));\n return found;\n}\nfunction findAll(node, options) {\n let found = [];\n (0, visit_1.visit)(node, {\n onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n found.push(child);\n }\n },\n getChildren: options.getChildren,\n });\n return found;\n}\n/**\n * Find the `IndexPath` of a node matching a predicate function.\n */\nfunction findPath(node, options) {\n let found;\n (0, visit_1.visit)(node, {\n onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n // Copy the indexPath, since indexPath may be mutated\n found = [...indexPath];\n return visit_1.STOP;\n }\n },\n getChildren: options.getChildren,\n });\n return found;\n}\n/**\n * Find the `IndexPath` of all nodes matching a predicate function.\n */\nfunction findAllPaths(node, options) {\n let found = [];\n (0, visit_1.visit)(node, {\n onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n // Copy the indexPath, since indexPath may be mutated\n found.push([...indexPath]);\n }\n },\n getChildren: options.getChildren,\n });\n return found;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reduce = reduce;\nconst visit_1 = require(\"./visit\");\nfunction reduce(node, options) {\n let result = options.initialResult;\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onEnter: (child, indexPath) => {\n result = options.nextResult(result, child, indexPath);\n } }));\n return result;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flat = flat;\nconst reduce_1 = require(\"./reduce\");\n/**\n * Returns an array containing the root node and all of its descendants.\n *\n * This is analogous to `Array.prototype.flat` for flattening arrays.\n */\nfunction flat(node, options) {\n return (0, reduce_1.reduce)(node, Object.assign(Object.assign({}, options), { initialResult: [], nextResult: (result, child) => {\n result.push(child);\n return result;\n } }));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.map = map;\nexports.flatMap = flatMap;\nconst visit_1 = require(\"./visit\");\n/**\n * Map each node into a new node.\n *\n * The shape of the tree remains the same. You can omit nodes from the tree by\n * filtering them out of the `transformedChildren` argument. The root can't be omitted.\n */\nfunction map(node, options) {\n return flatMap(node, Object.assign(Object.assign({}, options), { transform: (node, transformedChildren, indexPath) => [\n options.transform(node, transformedChildren, indexPath),\n ] }));\n}\n/**\n * Map each node into an array of new nodes.\n *\n * You can omit nodes from the tree by returning an empty array from the `transform` function.\n * The first element of the returned top-level array will be the new root.\n */\nfunction flatMap(node, options) {\n const childrenMap = {};\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onLeave: (child, indexPath) => {\n var _a, _b;\n // Add a 0 so we can always slice off the last element to get a unique parent key\n const keyIndexPath = [0, ...indexPath];\n const key = keyIndexPath.join();\n const transformed = options.transform(child, (_a = childrenMap[key]) !== null && _a !== void 0 ? _a : [], indexPath);\n const parentKey = keyIndexPath.slice(0, -1).join();\n const parentChildren = (_b = childrenMap[parentKey]) !== null && _b !== void 0 ? _b : [];\n parentChildren.push(...transformed);\n childrenMap[parentKey] = parentChildren;\n } }));\n return childrenMap[''][0];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.transformPath = transformPath;\nconst sort_1 = require(\"./sort\");\nfunction commonAncestor(path, otherPath) {\n const length = Math.min(path.length, otherPath.length);\n for (let i = 0; i < length; i++) {\n if (path[i] !== otherPath[i]) {\n return path.slice(0, i);\n }\n }\n return path.slice(0, length);\n}\nfunction transformPath(path, operation, otherPath, count = 1) {\n if (otherPath.length > path.length ||\n (0, sort_1.comparePathsByComponent)(otherPath, path) > 0) {\n return path;\n }\n if (otherPath.length === 0 && operation === 'remove') {\n return undefined;\n }\n const common = commonAncestor(path, otherPath);\n const adjustmentIndex = common.length === path.length || common.length === otherPath.length\n ? common.length - 1\n : common.length;\n const pathValue = path[adjustmentIndex];\n const otherPathValue = otherPath[adjustmentIndex];\n if (operation === 'insert' && otherPathValue <= pathValue) {\n const newPath = [...path];\n newPath[adjustmentIndex] += count;\n return newPath;\n }\n else if (operation === 'remove') {\n if (otherPathValue === pathValue) {\n return undefined;\n }\n else if (otherPathValue < pathValue) {\n const newPath = [...path];\n newPath[adjustmentIndex] -= count;\n return newPath;\n }\n }\n return path;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.insertOperation = insertOperation;\nexports.removeOperation = removeOperation;\nexports.replaceOperation = replaceOperation;\nexports.getInsertionOperations = getInsertionOperations;\nexports.getRemovalOperations = getRemovalOperations;\nexports.getReplaceOperations = getReplaceOperations;\nexports.applyOperations = applyOperations;\nexports.arraySplice = arraySplice;\nexports.transformPathsByOperations = transformPathsByOperations;\nconst ancestors_1 = require(\"./ancestors\");\nconst map_1 = require(\"./map\");\nconst transformPath_1 = require(\"./transformPath\");\nfunction insertOperation(index, nodes) {\n return {\n type: 'insert',\n index,\n nodes,\n };\n}\nfunction removeOperation(indexes) {\n return {\n type: 'remove',\n indexes,\n };\n}\nfunction replaceOperation() {\n return {\n type: 'replace',\n };\n}\nfunction splitIndexPath(indexPath) {\n return [indexPath.slice(0, -1), indexPath[indexPath.length - 1]];\n}\nfunction getInsertionOperations(indexPath, nodes, operations = new Map()) {\n var _a;\n const [parentIndexPath, index] = splitIndexPath(indexPath);\n // Mark all parents for replacing\n for (let i = parentIndexPath.length - 1; i >= 0; i--) {\n const parentKey = parentIndexPath.slice(0, i).join();\n switch ((_a = operations.get(parentKey)) === null || _a === void 0 ? void 0 : _a.type) {\n case 'remove':\n continue;\n }\n operations.set(parentKey, replaceOperation());\n }\n const operation = operations.get(parentIndexPath.join());\n // Mark insertion node\n switch (operation === null || operation === void 0 ? void 0 : operation.type) {\n case 'remove':\n operations.set(parentIndexPath.join(), {\n type: 'removeThenInsert',\n removeIndexes: operation.indexes,\n insertIndex: index,\n insertNodes: nodes,\n });\n break;\n default:\n operations.set(parentIndexPath.join(), insertOperation(index, nodes));\n }\n return operations;\n}\nfunction getRemovalOperations(indexPaths) {\n var _a, _b;\n const _ancestorIndexPaths = (0, ancestors_1.ancestorPaths)(indexPaths);\n const indexesToRemove = new Map();\n for (const indexPath of _ancestorIndexPaths) {\n const parentKey = indexPath.slice(0, -1).join();\n const value = (_a = indexesToRemove.get(parentKey)) !== null && _a !== void 0 ? _a : [];\n value.push(indexPath[indexPath.length - 1]);\n indexesToRemove.set(parentKey, value);\n }\n const operations = new Map();\n // Mark all parents for replacing\n for (const indexPath of _ancestorIndexPaths) {\n for (let i = indexPath.length - 1; i >= 0; i--) {\n const parentKey = indexPath.slice(0, i).join();\n operations.set(parentKey, replaceOperation());\n }\n }\n // Mark all nodes for removal\n for (const indexPath of _ancestorIndexPaths) {\n const parentKey = indexPath.slice(0, -1).join();\n operations.set(parentKey, removeOperation((_b = indexesToRemove.get(parentKey)) !== null && _b !== void 0 ? _b : []));\n }\n return operations;\n}\nfunction getReplaceOperations(indexPath, node) {\n const operations = new Map();\n const [parentIndexPath, index] = splitIndexPath(indexPath);\n // Mark all parents for replacing\n for (let i = parentIndexPath.length - 1; i >= 0; i--) {\n const parentKey = parentIndexPath.slice(0, i).join();\n operations.set(parentKey, replaceOperation());\n }\n operations.set(parentIndexPath.join(), {\n type: 'removeThenInsert',\n removeIndexes: [index],\n insertIndex: index,\n insertNodes: [node],\n });\n return operations;\n}\nfunction adjustInsertIndex(index, removeIndexes) {\n return removeIndexes.reduce((index, removedIndex) => (removedIndex < index ? index - 1 : index), index);\n}\nfunction applyOperations(node, operations, options) {\n return (0, map_1.map)(node, Object.assign(Object.assign({}, options), { \n // Avoid calling `getChildren` for every node in the tree.\n // Return [] if we're just going to return the original node anyway.\n getChildren: (node, indexPath) => {\n const key = indexPath.join();\n const operation = operations.get(key);\n switch (operation === null || operation === void 0 ? void 0 : operation.type) {\n case 'replace':\n case 'remove':\n case 'removeThenInsert':\n case 'insert':\n return options.getChildren(node, indexPath);\n default:\n return [];\n }\n }, transform: (node, children, indexPath) => {\n const key = indexPath.join();\n const operation = operations.get(key);\n switch (operation === null || operation === void 0 ? void 0 : operation.type) {\n case 'remove':\n return options.create(node, children.filter((_, index) => !operation.indexes.includes(index)), indexPath);\n case 'removeThenInsert':\n const updatedChildren = children.filter((_, index) => !operation.removeIndexes.includes(index));\n const adjustedIndex = adjustInsertIndex(operation.insertIndex, operation.removeIndexes);\n return options.create(node, arraySplice(updatedChildren, adjustedIndex, 0, ...operation.insertNodes), indexPath);\n case 'insert':\n return options.create(node, arraySplice(children, operation.index, 0, ...operation.nodes), indexPath);\n case 'replace':\n return options.create(node, children, indexPath);\n default:\n return node;\n }\n } }));\n}\nfunction arraySplice(array, start, deleteCount, ...items) {\n return [\n ...array.slice(0, start),\n ...items,\n ...array.slice(start + deleteCount),\n ];\n}\nfunction transformPathsByOperations(paths, operations) {\n let transformedPaths = paths;\n for (const [parentKey, operation] of operations.entries()) {\n const parentPath = parentKey ? parentKey.split(',').map(Number) : [];\n transformedPaths = transformByOperation(transformedPaths, parentPath, operation);\n }\n return transformedPaths;\n}\nfunction transformByOperation(transformedPaths, parentPath, operation) {\n switch (operation.type) {\n case 'insert': {\n const otherPath = parentPath.concat(operation.index);\n return transformedPaths.map((path) => path\n ? (0, transformPath_1.transformPath)(path, 'insert', otherPath, operation.nodes.length)\n : undefined);\n }\n case 'remove': {\n const otherPaths = [...operation.indexes]\n .reverse()\n .map((index) => parentPath.concat(index));\n return transformedPaths.map((path) => {\n for (const otherPath of otherPaths) {\n path = path ? (0, transformPath_1.transformPath)(path, 'remove', otherPath) : undefined;\n }\n return path;\n });\n }\n case 'removeThenInsert': {\n const result = transformByOperation(transformedPaths, parentPath, {\n type: 'remove',\n indexes: operation.removeIndexes,\n });\n const insertIndex = adjustInsertIndex(operation.insertIndex, operation.removeIndexes);\n return transformByOperation(result, parentPath, {\n type: 'insert',\n index: insertIndex,\n nodes: operation.insertNodes,\n });\n }\n case 'replace': {\n return transformedPaths;\n }\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.insert = insert;\nexports.insertWithPathTracking = insertWithPathTracking;\nconst operation_1 = require(\"./operation\");\n/**\n * Insert nodes at a given `IndexPath`.\n */\nfunction insert(node, options) {\n return _insertWithPathTracking(node, options).node;\n}\n/**\n * Insert nodes at a given `IndexPath`.\n */\nfunction insertWithPathTracking(node, options) {\n return _insertWithPathTracking(node, options);\n}\nfunction _insertWithPathTracking(node, options) {\n const { nodes, path: at, track } = options;\n if (at.length === 0) {\n throw new Error(`Can't insert nodes at the root`);\n }\n const state = (0, operation_1.getInsertionOperations)(at, nodes);\n const transformedPaths = track ? (0, operation_1.transformPathsByOperations)(track, state) : [];\n return {\n node: (0, operation_1.applyOperations)(node, state, options),\n paths: transformedPaths,\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.move = move;\nconst access_1 = require(\"./access\");\nconst ancestors_1 = require(\"./ancestors\");\nconst operation_1 = require(\"./operation\");\nfunction move(node, options) {\n if (options.paths.length === 0)\n return node;\n for (const indexPath of options.paths) {\n if (indexPath.length === 0) {\n throw new Error(`Can't move the root node`);\n }\n }\n if (options.to.length === 0) {\n throw new Error(`Can't move nodes to the root`);\n }\n const _ancestorIndexPaths = (0, ancestors_1.ancestorPaths)(options.paths);\n const nodesToInsert = _ancestorIndexPaths.map((indexPath) => (0, access_1.access)(node, indexPath, options));\n const operations = (0, operation_1.getInsertionOperations)(options.to, nodesToInsert, (0, operation_1.getRemovalOperations)(_ancestorIndexPaths));\n return (0, operation_1.applyOperations)(node, operations, options);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.remove = remove;\nexports.removeWithPathTracking = removeWithPathTracking;\nconst operation_1 = require(\"./operation\");\n/**\n * Remove nodes at the given `IndexPath`s.\n */\nfunction remove(node, options) {\n return _removeWithPathTracking(node, options).node;\n}\n/**\n * Remove nodes at the given `IndexPath`s.\n */\nfunction removeWithPathTracking(node, options) {\n return _removeWithPathTracking(node, options);\n}\nfunction _removeWithPathTracking(node, options) {\n const { paths, track } = options;\n const operations = (0, operation_1.getRemovalOperations)(paths);\n const transformedPaths = track\n ? (0, operation_1.transformPathsByOperations)(track, operations)\n : [];\n return {\n node: (0, operation_1.applyOperations)(node, operations, options),\n paths: transformedPaths,\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.replace = replace;\nconst operation_1 = require(\"./operation\");\n/**\n * Replace the node at the given `IndexPath` with another.\n */\nfunction replace(node, options) {\n if (options.path.length === 0)\n return options.node;\n const operations = (0, operation_1.getReplaceOperations)(options.path, options.node);\n return (0, operation_1.applyOperations)(node, operations, options);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splice = splice;\nexports.spliceWithPathTracking = spliceWithPathTracking;\nconst operation_1 = require(\"./operation\");\nfunction splice(node, options) {\n return _spliceWithPathTracking(node, options).node;\n}\nfunction spliceWithPathTracking(node, options) {\n return _spliceWithPathTracking(node, options);\n}\nfunction _spliceWithPathTracking(node, options) {\n const { path, deleteCount = 0, nodes, track } = options;\n if (path.length === 0) {\n throw new Error(`Can't splice at the root`);\n }\n const pathsToRemove = getPathsToRemove(path, deleteCount);\n const operations = (0, operation_1.getInsertionOperations)(path, nodes, (0, operation_1.getRemovalOperations)(pathsToRemove));\n const transformedPaths = track\n ? (0, operation_1.transformPathsByOperations)(track, operations)\n : [];\n return {\n node: (0, operation_1.applyOperations)(node, operations, options),\n paths: transformedPaths,\n };\n}\nfunction getPathsToRemove(path, deleteCount) {\n let pathsToRemove = [];\n let parentPath = path.slice(0, -1);\n let index = path[path.length - 1];\n for (let i = 0; i < deleteCount; i++) {\n pathsToRemove.push(parentPath.concat(index + i));\n }\n return pathsToRemove;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defineTree = defineTree;\nconst access_1 = require(\"./access\");\nconst diagram_1 = require(\"./diagram\");\nconst entries_1 = require(\"./entries\");\nconst find_1 = require(\"./find\");\nconst flat_1 = require(\"./flat\");\nconst insert_1 = require(\"./insert\");\nconst map_1 = require(\"./map\");\nconst move_1 = require(\"./move\");\nconst reduce_1 = require(\"./reduce\");\nconst remove_1 = require(\"./remove\");\nconst replace_1 = require(\"./replace\");\nconst splice_1 = require(\"./splice\");\nconst visit_1 = require(\"./visit\");\nclass Tree {\n constructor(getChildrenOrBaseOptions, appliedOptions) {\n this.appliedOptions = appliedOptions;\n /**\n * Returns the node's children.\n *\n * This is the same as the `getChildren` option passed to `defineTree`, included here for convenience.\n */\n this.getChildren = (node, indexPath, context) => {\n return this._getChildren(node, indexPath, context);\n };\n this.mergeOptions = (options) => (Object.assign(Object.assign(Object.assign({}, this.baseOptions), this.appliedOptions), options));\n this.withOptions = (newOptions) => new Tree(this.baseOptions, Object.assign(Object.assign({}, this.appliedOptions), newOptions));\n /**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\n this.access = (node, indexPath) => (0, access_1.access)(node, indexPath, this.mergeOptions({}));\n /**\n * Returns an array of each node in an `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\n this.accessPath = (node, indexPath) => (0, access_1.accessPath)(node, indexPath, this.mergeOptions({}));\n /**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\n this.get = (node, indexPath) => (0, access_1.get)(node, indexPath, this.mergeOptions({}));\n /**\n * Returns the ancestors of a node.\n */\n this.ancestors = (node, indexPath) => (0, access_1.ancestors)(node, indexPath, this.mergeOptions({}));\n /**\n * Generate a diagram of the tree, as a string.\n */\n this.diagram = (node, options) => typeof options === 'function'\n ? (0, diagram_1.diagram)(node, this.mergeOptions({ getLabel: options }))\n : (0, diagram_1.diagram)(node, this.mergeOptions(options));\n this.find = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.find)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.find)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n this.findAll = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.findAll)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.findAll)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n this.findPath = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.findPath)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.findPath)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n this.findAllPaths = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.findAllPaths)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.findAllPaths)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n /**\n * Returns an array of every [IndexPath, Node] pair in the tree.\n */\n this.entries = (node) => (0, entries_1.entries)(node, this.mergeOptions({}));\n /**\n * Returns an array containing the root node and all of its descendants.\n *\n * This is analogous to `Array.prototype.flat` for flattening arrays.\n */\n this.flat = (node) => (0, flat_1.flat)(node, this.mergeOptions({}));\n this.reduce = (node, nextResult, initialResult) => (0, reduce_1.reduce)(node, this.mergeOptions({ nextResult, initialResult }));\n this.map = (node, transform) => (0, map_1.map)(node, this.mergeOptions({ transform }));\n this.flatMap = (node, transform) => (0, map_1.flatMap)(node, this.mergeOptions({ transform }));\n this.visit = (node, onEnterOrOptions) => typeof onEnterOrOptions === 'function'\n ? (0, visit_1.visit)(node, this.mergeOptions({ onEnter: onEnterOrOptions }))\n : (0, visit_1.visit)(node, this.mergeOptions(Object.assign({}, onEnterOrOptions)));\n // --- Mutations ---\n /**\n * Insert nodes at a given `IndexPath`.\n */\n this.insert = (node, options) => (0, insert_1.insert)(node, this.mergeOptions(options));\n /**\n * Insert nodes at a given `IndexPath`.\n */\n this.insertWithPathTracking = (node, options) => (0, insert_1.insertWithPathTracking)(node, this.mergeOptions(options));\n /**\n * Remove nodes at the given `IndexPath`s.\n */\n this.remove = (node, options) => (0, remove_1.remove)(node, this.mergeOptions(options));\n /**\n * Remove nodes at the given `IndexPath`s.\n */\n this.removeWithPathTracking = (node, options) => (0, remove_1.removeWithPathTracking)(node, this.mergeOptions(options));\n /**\n * Move nodes from one `IndexPath` to another.\n */\n this.move = (node, options) => (0, move_1.move)(node, this.mergeOptions(options));\n /**\n * Replace nodes at the given `IndexPath`s with another node.\n */\n this.splice = (node, options) => (0, splice_1.splice)(node, this.mergeOptions(options));\n /**\n * Replace nodes at the given `IndexPath`s with another node.\n */\n this.spliceWithPathTracking = (node, options) => (0, splice_1.spliceWithPathTracking)(node, this.mergeOptions(options));\n /**\n * Replace the node at the given `IndexPath` with another\n */\n this.replace = (node, options) => (0, replace_1.replace)(node, this.mergeOptions(options));\n this.baseOptions =\n typeof getChildrenOrBaseOptions === 'function'\n ? { getChildren: getChildrenOrBaseOptions }\n : getChildrenOrBaseOptions;\n this._getChildren = this.baseOptions.getChildren;\n }\n}\nfunction defineTree(getChildren) {\n return new Tree(getChildren, {});\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.withOptions = void 0;\nconst defineTree_1 = require(\"./defineTree\");\n/**\n * Return every tree utility function with options partially applied.\n *\n * @deprecated Use `defineTree` instead\n */\nexports.withOptions = defineTree_1.defineTree;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./access\"), exports);\n__exportStar(require(\"./ancestors\"), exports);\n__exportStar(require(\"./defineTree\"), exports);\n__exportStar(require(\"./diagram\"), exports);\n__exportStar(require(\"./entries\"), exports);\n__exportStar(require(\"./find\"), exports);\n__exportStar(require(\"./flat\"), exports);\n__exportStar(require(\"./indexPath\"), exports);\n__exportStar(require(\"./insert\"), exports);\n__exportStar(require(\"./map\"), exports);\n__exportStar(require(\"./move\"), exports);\n__exportStar(require(\"./options\"), exports);\n__exportStar(require(\"./reduce\"), exports);\n__exportStar(require(\"./remove\"), exports);\n__exportStar(require(\"./replace\"), exports);\n__exportStar(require(\"./sort\"), exports);\n__exportStar(require(\"./splice\"), exports);\n__exportStar(require(\"./transformPath\"), exports);\n__exportStar(require(\"./visit\"), exports);\n__exportStar(require(\"./withOptions\"), exports);\n","/* eslint-disable @shopify/prefer-early-return */\nimport {\n ActionMenu,\n CollectionProps,\n CollectionRef,\n CollectionRenderActionProps,\n CollectionThumbnailProps,\n CollectionViewType,\n createSectionedMenu,\n cssVars,\n FileExplorerCollection,\n FileExplorerDetail,\n FileExplorerEmptyState,\n FileExplorerLayout,\n FileExplorerUploadButton,\n formatByteSize,\n ListView,\n MediaThumbnail,\n MediaThumbnailProps,\n RelativeDropPosition,\n} from \"@noya-app/noya-designsystem\";\nimport {\n DownloadIcon,\n FolderIcon,\n InputIcon,\n OpenInNewWindowIcon,\n ResetIcon,\n TrashIcon,\n UpdateIcon,\n UploadIcon,\n} from \"@noya-app/noya-icons\";\nimport {\n MultiplayerPatchMetadata,\n useAsset,\n useAssetManager,\n useAssets,\n} from \"@noya-app/noya-multiplayer-react\";\nimport { FileMediaItem, MediaItem, MediaMap } from \"@noya-app/noya-schemas\";\nimport { groupBy, isDeepEqual } from \"@noya-app/noya-utils\";\nimport {\n downloadUrl,\n memoGeneric,\n useControlledOrUncontrolled,\n} from \"@noya-app/react-utils\";\nimport { fileOpen } from \"browser-fs-access\";\nimport {\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n createMediaAsset,\n createMediaFile,\n createMediaFolder,\n createMediaItemTree,\n MediaItemTree,\n PLACEHOLDER_ITEM_NAME,\n rootMediaItem,\n rootMediaItemName,\n} from \"./utils/mediaItemTree\";\n\nimport { path } from \"imfs\";\nimport React from \"react\";\nimport {\n deleteMediaItems,\n ExpandedMap,\n FileKindFilter,\n getDepthMap,\n getVisibleItems,\n moveMediaInsideFolder,\n moveUpAFolder,\n renameMediaItemAndDescendantPaths,\n updateExpandedMap,\n validateMediaItemRename,\n} from \"./utils/files\";\nimport { handleDataTransfer } from \"./utils/handleFileDrop\";\n\nconst extensionToContentType = {\n svg: \"image/svg+xml\",\n png: \"image/png\",\n jpeg: \"image/jpeg\",\n} as const;\n\nfunction encodeFileContentForThumbnail(\n pathProp: string,\n item: FileMediaItem\n): { contentType: string; url?: string } | undefined {\n const extension = path.extname(pathProp).slice(1);\n const contentType =\n extensionToContentType[extension as keyof typeof extensionToContentType];\n\n if (contentType) {\n if (item.encoding === \"base64\") {\n return {\n contentType,\n url: `data:${contentType};base64,${item.content}`,\n };\n } else {\n try {\n return {\n contentType,\n url: `data:${contentType},${encodeURIComponent(item.content)}`,\n };\n } catch (error) {\n console.warn(\"Failed to encode content:\", error);\n return { contentType };\n }\n }\n }\n\n return undefined;\n}\n\nconst MediaThumbnailInternal = memoGeneric(\n ({\n item,\n selected,\n size,\n path: pathProp,\n renderThumbnailIcon,\n }: CollectionThumbnailProps<MediaItem> & {\n path?: string;\n renderThumbnailIcon?: MediaThumbnailProps[\"renderThumbnailIcon\"];\n }) => {\n const asset = useAsset(item.kind === \"asset\" ? item.assetId : undefined);\n const isRoot = item.id === rootMediaItem.id;\n const isFolder = item.kind === \"folder\";\n const isFile = item.kind === \"file\";\n\n let contentType: string | undefined;\n let url: string | undefined;\n\n if (asset) {\n contentType = asset.contentType;\n url = asset.url;\n } else if (isFile && pathProp) {\n const encoded = encodeFileContentForThumbnail(pathProp, item);\n\n if (encoded) {\n contentType = encoded.contentType;\n url = encoded.url;\n }\n }\n\n const fileName = pathProp ? path.basename(pathProp) : undefined;\n\n return (\n <MediaThumbnail\n contentType={contentType}\n iconName={isRoot ? \"HomeIcon\" : isFolder ? \"FolderIcon\" : undefined}\n url={url}\n selected={selected}\n size={size}\n fileName={fileName}\n renderThumbnailIcon={renderThumbnailIcon}\n />\n );\n }\n);\n\ntype MenuAction =\n | \"preview\"\n | \"download\"\n | \"upload\"\n | \"rename\"\n | \"replace\"\n | \"delete\"\n | \"move\"\n | \"addFolder\";\n\nexport type MediaCollectionRef = {\n upload: (selectedId: string) => void;\n delete: (selectedIds: string[]) => void;\n download: (selectedItems: MediaItem[]) => void;\n rename: (selectedItemId: string) => void;\n addFolder: (currentFolderId: string) => void;\n addFile: (currentFolderId?: string) => void;\n moveUpAFolder: (selectedIds: string[]) => void;\n replace: (selectedItem: MediaItem) => void;\n preview: (selectedItems: MediaItem[]) => void;\n getItemAtIndex: (index: number) => MediaItem | undefined;\n};\n\ntype MediaCollectionProps = {\n onSelectionChange?: (\n selectedIds: string[],\n event?: ListView.ClickInfo\n ) => void;\n selectedIds?: string[];\n media: MediaMap;\n setMedia?: (\n metadata: Partial<MultiplayerPatchMetadata>,\n media: MediaMap\n ) => void;\n /** @default false */\n readOnly?: boolean;\n /** @default \"list\" */\n viewType?: CollectionViewType;\n /**\n * Whether to show assets or directories or all media items\n *\n * @default \"all\"\n * */\n fileKindFilter?: FileKindFilter;\n /**\n * Whether to show the root item\n *\n * @default false\n * */\n showRootItem?: boolean;\n /** Whether to expand all directories by default */\n initialExpanded?: ExpandedMap;\n /**\n * Callback for when an item is double-clicked\n */\n onDoubleClickItem?: (mediaItemId: string) => void;\n /**\n * If provided, only show items that are descendants of this folder\n */\n rootItemId?: string;\n title?: ReactNode;\n right?: ReactNode;\n className?: string;\n showUploadButton?: boolean;\n /**\n * If true, show all descendants of all directories within a collection\n * @default true\n * */\n showAllDescendants?: boolean;\n renderAction?: Exclude<\n CollectionProps<MediaItem, MenuAction>[\"renderAction\"],\n \"menu\"\n >;\n /** @default false */\n sortable?: boolean;\n renderThumbnailIcon?: MediaThumbnailProps[\"renderThumbnailIcon\"];\n onDidDeleteItems?: (items: [string, MediaItem][]) => void;\n} & Pick<\n CollectionProps<MediaItem, MenuAction>,\n | \"sortableId\"\n | \"size\"\n | \"expandable\"\n | \"renamable\"\n | \"scrollable\"\n | \"renderEmptyState\"\n | \"sharedDragProps\"\n | \"onClickItem\"\n>;\n\nexport const MediaCollection = memo(\n forwardRef<MediaCollectionRef, MediaCollectionProps>(function MediaCollection(\n {\n sortableId,\n onSelectionChange,\n selectedIds: selectedIdsProp,\n media,\n setMedia: setMediaProp,\n readOnly = false,\n viewType = \"list\",\n fileKindFilter = \"all\",\n showRootItem = false,\n initialExpanded,\n expandable = true,\n renamable = true,\n onDoubleClickItem,\n rootItemId = rootMediaItem.id,\n title,\n size = \"medium\",\n right,\n renderAction: renderActionProp,\n className,\n showUploadButton = true,\n showAllDescendants = true,\n scrollable = false,\n sortable = false,\n renderEmptyState,\n sharedDragProps,\n onClickItem,\n renderThumbnailIcon,\n onDidDeleteItems,\n },\n ref\n ) {\n const setMedia = useCallback(\n (...args: Parameters<Extract<typeof setMediaProp, Function>>) => {\n setMediaProp?.(...args);\n },\n [setMediaProp]\n );\n const tree = useMemo(() => createMediaItemTree(media), [media]);\n const [tempItem, setTempItem] = useState<[string, MediaItem] | undefined>(\n undefined\n );\n const mediaWithTempItem = useMemo(\n () => ({\n ...media,\n ...(tempItem ? { [tempItem[0]]: tempItem[1] } : {}),\n }),\n [media, tempItem]\n );\n const treeWithTempItem = useMemo(\n () => createMediaItemTree(mediaWithTempItem),\n [mediaWithTempItem]\n );\n const temp = useMemo(\n () => ({\n media: mediaWithTempItem,\n tree: treeWithTempItem,\n }),\n [mediaWithTempItem, treeWithTempItem]\n );\n const [selectedIds, setSelectedIds] = useControlledOrUncontrolled<string[]>(\n {\n defaultValue: [],\n value: selectedIdsProp,\n onChange: onSelectionChange,\n }\n );\n const assetManager = useAssetManager();\n const assets = useAssets();\n const [expandedMap, setExpandedMap] = useState<ExpandedMap>({});\n const visibleItems = useMemo(\n () =>\n getVisibleItems({\n expandedMap,\n fileKindFilter: fileKindFilter,\n rootItemId,\n tree: treeWithTempItem,\n showAllDescendants,\n showRootItem,\n }),\n [\n expandedMap,\n fileKindFilter,\n rootItemId,\n treeWithTempItem,\n showAllDescendants,\n showRootItem,\n ]\n );\n const depthMap = useMemo(\n () => getDepthMap(rootMediaItem, treeWithTempItem, showAllDescendants),\n [treeWithTempItem, showAllDescendants]\n );\n const collectionRef = useRef<CollectionRef>(null);\n const selectedMediaItems = useMemo(\n () =>\n treeWithTempItem.mediaItemsWithRoot.filter((item) =>\n selectedIds.includes(item.id)\n ),\n [treeWithTempItem, selectedIds]\n );\n\n const groupedItems = groupBy(selectedMediaItems, (item) => item.kind);\n const selectedAssetItems = groupedItems.asset ?? [];\n const selectedFolderItems = groupedItems.folder ?? [];\n\n const singleItemSelected = selectedMediaItems.length === 1;\n const onlyAssetsSelected =\n selectedAssetItems.length > 0 &&\n selectedAssetItems.length === selectedMediaItems.length;\n const onlyFoldersSelected =\n selectedFolderItems.length > 0 &&\n selectedFolderItems.length === selectedMediaItems.length;\n const onlySingleFolderSelected =\n onlyFoldersSelected && selectedFolderItems.length === 1;\n const onlySingleAssetSelected =\n onlyAssetsSelected && selectedAssetItems.length === 1;\n const rootSelected = selectedIds.includes(rootMediaItem.id);\n const sameParentSelected = selectedMediaItems.every((item) => {\n const itemPath = tree.idToPathMap.get(item.id);\n const firstSelectedPath = tree.idToPathMap.get(selectedIds[0]);\n if (!itemPath || !firstSelectedPath) return false;\n return itemPath.startsWith(path.dirname(firstSelectedPath));\n });\n\n useEffect(() => {\n if (initialExpanded) {\n setExpandedMap(initialExpanded);\n }\n }, [initialExpanded]);\n\n const getExpanded = useCallback(\n (item: MediaItem) => {\n if (!expandable) return undefined;\n if (item.kind !== \"folder\") return undefined;\n if (item.id === rootMediaItem.id) return undefined;\n return expandedMap[item.id] ?? false;\n },\n [expandedMap, expandable]\n );\n\n const handleDelete = useCallback(\n (selectedIds: string[]) => {\n const deletedItems = Object.entries(media).flatMap(\n ([path, item]): [string, MediaItem][] => {\n if (selectedIds.includes(item.id)) {\n return [[path, item]];\n }\n return [];\n }\n );\n\n const newMedia = deleteMediaItems({\n selectedIds,\n media,\n tree,\n });\n\n setSelectedIds([rootMediaItem.id]);\n setMedia({ name: \"Delete items\", timestamp: Date.now() }, newMedia);\n\n onDidDeleteItems?.(deletedItems);\n },\n [media, setMedia, setSelectedIds, tree, onDidDeleteItems]\n );\n\n const onRename = useCallback(\n (selectedItem: MediaItem, newName: string) => {\n if (!renamable) return;\n const selectedItemPath = treeWithTempItem.idToPathMap.get(\n selectedItem.id\n );\n if (!selectedItemPath) return;\n const renameIsValid = validateMediaItemRename({\n basename: newName,\n selectedItemPath,\n media: temp.media,\n });\n if (!renameIsValid) {\n setTempItem(undefined);\n return;\n }\n const mediaWithRenamedDescendantPaths =\n renameMediaItemAndDescendantPaths({\n newName,\n selectedItemPath,\n media: temp.media,\n tree: temp.tree,\n });\n setMedia(\n { name: \"Rename media item\", timestamp: Date.now() },\n mediaWithRenamedDescendantPaths\n );\n setTempItem(undefined);\n },\n [renamable, setMedia, temp.media, temp.tree, treeWithTempItem.idToPathMap]\n );\n\n const handleAddFolder = useCallback(\n (currentFolderId: string) => {\n const newFolder = createMediaFolder();\n const currentFolderPath = tree.idToPathMap.get(currentFolderId);\n if (!currentFolderPath) return;\n setTempItem([\n path.join(currentFolderPath, PLACEHOLDER_ITEM_NAME),\n newFolder,\n ]);\n setTimeout(() => {\n collectionRef.current?.editName(newFolder.id);\n }, 50);\n },\n [tree]\n );\n\n const handleAddFile = useCallback(\n (currentFolderId?: string) => {\n const newFile = createMediaFile({\n content: \"\",\n encoding: \"utf-8\",\n });\n const currentFolderPath = tree.idToPathMap.get(\n currentFolderId ?? rootMediaItem.id\n );\n if (!currentFolderPath) return;\n setTempItem([\n path.join(currentFolderPath, PLACEHOLDER_ITEM_NAME),\n newFile,\n ]);\n setTimeout(() => {\n collectionRef.current?.editName(newFile.id);\n }, 50);\n },\n [tree.idToPathMap]\n );\n\n const handleMoveUpAFolder = useCallback(\n (selectedIds: string[]) => {\n const newMedia = moveUpAFolder({\n tree,\n media,\n selectedIds,\n });\n if (!newMedia) return;\n setMedia({ name: \"Move items\", timestamp: Date.now() }, newMedia);\n },\n [media, tree, setMedia]\n );\n\n const [isUploading, setIsUploading] = useState(false);\n\n const handleUpload = useCallback(\n async (selectedId: string) => {\n try {\n const files = await fileOpen({ multiple: true });\n\n if (!files || !Array.isArray(files) || files.length === 0) return;\n\n const parentPath = tree.idToPathMap.get(selectedId);\n if (!parentPath) return;\n\n // Create assets in parallel for better performance\n const uploadPromises = files.map(async (file) => {\n const asset = await assetManager.create(file);\n const assetPath = path.join(parentPath, path.basename(file.name));\n return {\n assetPath,\n asset: createMediaAsset({ assetId: asset.id }),\n };\n });\n\n setIsUploading(true);\n\n const newMediaMap = await Promise.all(uploadPromises);\n\n setMedia(\n { name: \"Add media items\", timestamp: Date.now() },\n {\n ...media,\n ...Object.fromEntries(\n newMediaMap.map(({ assetPath, asset }) => [assetPath, asset])\n ),\n }\n );\n } catch (error) {\n console.error(\"Failed to upload files:\", error);\n } finally {\n setIsUploading(false);\n }\n },\n [tree.idToPathMap, setMedia, media, assetManager]\n );\n\n const handleDownload = useCallback(\n async (selectedItems: MediaItem[]) => {\n const downloadPromises = selectedItems\n .filter((item) => item.kind === \"asset\")\n .map(async (item) => {\n const asset = assets.find((a) => a.id === item.assetId);\n if (!asset?.url) return;\n return downloadUrl(asset.url, tree.getNameForId(item.id));\n });\n\n await Promise.all(downloadPromises);\n },\n [assets, tree]\n );\n\n const handlePreview = useCallback(\n async (selectedItems: MediaItem[]) => {\n const previewPromises = selectedItems\n .filter((item) => item.kind === \"asset\")\n .map(async (item) => {\n const asset = assets.find((a) => a.id === item.assetId);\n if (!asset?.url) return;\n return window?.open(asset.url, \"_blank\");\n });\n\n await Promise.all(previewPromises);\n },\n [assets]\n );\n\n const handleReplace = useCallback(\n async (selectedItem: MediaItem) => {\n try {\n const file = await fileOpen();\n if (!file) return;\n // Create the asset\n const asset = await assetManager.create(file);\n const oldFile = selectedItem;\n const oldFilePath = tree.idToPathMap.get(oldFile.id);\n if (!oldFilePath || oldFile.kind !== \"asset\") return;\n setMedia(\n { name: \"Replace media file\", timestamp: Date.now() },\n {\n ...media,\n [oldFilePath]: createMediaAsset({\n ...oldFile,\n assetId: asset.id,\n }),\n }\n );\n } catch (error) {\n console.error(\"Failed to upload file:\", error);\n }\n },\n [media, setMedia, assetManager, tree]\n );\n\n const handleRename = useCallback(\n (selectedItemId: string) => {\n collectionRef.current?.editName(selectedItemId);\n },\n [collectionRef]\n );\n\n const handleMoveMediaInsideFolder = useCallback(\n (sourceItem: MediaItem, targetItem: MediaItem) => {\n const newMedia = moveMediaInsideFolder({\n sourceItemIds: [sourceItem.id],\n targetItemId: targetItem.id,\n media,\n tree,\n });\n\n setMedia(\n {\n name: \"Move media file inside folder\",\n timestamp: Date.now(),\n },\n newMedia\n );\n },\n [media, setMedia, tree]\n );\n\n const assetContextMenuItems = useMemo(() => {\n return createSectionedMenu<MenuAction>(\n [\n !rootSelected &&\n singleItemSelected && {\n title: \"Rename\",\n value: \"rename\",\n icon: <InputIcon />,\n },\n onlySingleAssetSelected && {\n title: \"Replace\",\n value: \"replace\",\n icon: <UpdateIcon />,\n },\n !rootSelected && {\n title: \"Delete\",\n value: \"delete\",\n icon: <TrashIcon />,\n },\n ],\n [\n onlySingleFolderSelected && {\n title: \"Upload Files\",\n value: \"upload\",\n icon: <UploadIcon />,\n },\n onlySingleFolderSelected && {\n title: \"Add Folder\",\n value: \"addFolder\",\n icon: <FolderIcon />,\n },\n onlyAssetsSelected &&\n tree.mediaItemsWithRoot.length > 0 && {\n title: \"Download\",\n value: \"download\",\n icon: <DownloadIcon />,\n },\n onlySingleAssetSelected && {\n title: \"Preview\",\n value: \"preview\",\n icon: <OpenInNewWindowIcon />,\n },\n ],\n [\n !rootSelected &&\n sameParentSelected && {\n title: \"Move up a folder\",\n value: \"move\",\n icon: <ResetIcon />,\n },\n ]\n );\n }, [\n rootSelected,\n singleItemSelected,\n onlySingleAssetSelected,\n onlySingleFolderSelected,\n onlyAssetsSelected,\n tree.mediaItemsWithRoot.length,\n sameParentSelected,\n ]);\n\n const handleMenuAction = useCallback(\n async (action: MenuAction, selectedItems: MediaItem[]) => {\n if (selectedItems.length === 0) return;\n\n switch (action) {\n case \"rename\":\n handleRename(selectedItems[0].id);\n return;\n case \"delete\":\n handleDelete(selectedIds);\n return;\n case \"replace\":\n handleReplace(selectedItems[0]);\n return;\n case \"upload\":\n handleUpload(selectedItems[0].id);\n return;\n case \"addFolder\":\n handleAddFolder(selectedItems[0].id);\n return;\n case \"preview\":\n handlePreview(selectedItems);\n return;\n case \"download\":\n handleDownload(selectedItems);\n return;\n case \"move\":\n handleMoveUpAFolder(selectedIds);\n return;\n }\n },\n [\n handleRename,\n handleDelete,\n selectedIds,\n handleReplace,\n handleUpload,\n handleAddFolder,\n handlePreview,\n handleDownload,\n handleMoveUpAFolder,\n ]\n );\n\n const handleSetExpanded = useCallback(\n (item: MediaItem, expanded: boolean) => {\n setExpandedMap((prev) =>\n updateExpandedMap({\n item,\n expanded,\n expandable,\n expandedMap: prev,\n tree,\n })\n );\n },\n [expandable, tree]\n );\n\n const renderAction = useMemo(() => {\n if (renderActionProp) return renderActionProp;\n return ({\n selected,\n onOpenChange,\n }: CollectionRenderActionProps<MediaItem>) => (\n <ActionMenu\n menuItems={assetContextMenuItems}\n onSelect={(action) => handleMenuAction(action, selectedMediaItems)}\n selected={selected}\n onOpenChange={onOpenChange}\n variant={viewType === \"grid\" ? \"normal\" : \"bare\"}\n style={{\n backgroundColor: selected\n ? cssVars.colors.selectedListItemBackground\n : \"transparent\",\n color: selected ? cssVars.colors.selectedListItemText : undefined,\n }}\n />\n );\n }, [\n assetContextMenuItems,\n handleMenuAction,\n renderActionProp,\n selectedMediaItems,\n viewType,\n ]);\n\n useImperativeHandle(ref, () => ({\n upload: (selectedId: string) => handleUpload(selectedId),\n delete: handleDelete,\n download: handleDownload,\n rename: handleRename,\n addFolder: handleAddFolder,\n addFile: handleAddFile,\n moveUpAFolder: handleMoveUpAFolder,\n replace: handleReplace,\n preview: handlePreview,\n moveMediaInsideFolder: handleMoveMediaInsideFolder,\n getItemAtIndex: (index) => visibleItems[index],\n }));\n\n return (\n <>\n <FileExplorerLayout\n title={title ?? rootMediaItemName}\n right={\n !readOnly && (\n <FileExplorerUploadButton\n showUploadButton={showUploadButton}\n onUpload={() => handleUpload(rootMediaItem.id)}\n isUploading={isUploading}\n >\n {right}\n </FileExplorerUploadButton>\n )\n }\n className={className}\n >\n <FileExplorerCollection<MediaItem, MenuAction>\n ref={collectionRef}\n sortableId={sortableId}\n scrollable={scrollable}\n sharedDragProps={sharedDragProps}\n items={visibleItems}\n viewType={viewType}\n size={size}\n getId={(file) => file.id}\n getName={(file) => {\n if (file.id === tempItem?.[1].id) {\n return \"\";\n }\n return treeWithTempItem.getNameForId(file.id);\n }}\n expandable={expandable}\n sortable={sortable}\n getPlaceholder={(item) => {\n switch (item.kind) {\n case \"folder\":\n return \"Enter folder name\";\n case \"asset\":\n case \"file\":\n case \"noyaFile\":\n return \"Enter file name\";\n }\n }}\n getExpanded={getExpanded}\n setExpanded={handleSetExpanded}\n getRenamable={(item) => {\n if (item.id === rootMediaItem.id) return false;\n return true;\n }}\n getDepth={(item) => depthMap[item.id]}\n menuItems={assetContextMenuItems}\n onSelectMenuItem={handleMenuAction}\n onSelectionChange={setSelectedIds}\n onClickItem={onClickItem}\n onDoubleClickItem={onDoubleClickItem}\n onRename={onRename}\n renamable={renamable}\n selectedIds={selectedIds}\n renderThumbnail={(props) => (\n <MediaThumbnailInternal\n {...props}\n path={tree.idToPathMap.get(props.item.id)}\n renderThumbnailIcon={renderThumbnailIcon}\n />\n )}\n renderAction={renderAction}\n renderDetail={(file, selected) => {\n if (file.kind !== \"asset\") return null;\n const asset = assets.find((a) => a.id === file.assetId);\n if (!asset) return null;\n return (\n <FileExplorerDetail selected={selected} size={size}>\n {formatByteSize(asset.size)}\n </FileExplorerDetail>\n );\n }}\n renderEmptyState={() =>\n renderEmptyState?.() ?? <FileExplorerEmptyState />\n }\n itemRoleDescription=\"clickable file item\"\n getDropTargetParentIndex={(overIndex) => {\n const item = visibleItems[overIndex];\n const parentIndex = visibleItems.findIndex(\n (i) => i.id === tree.getParentIdForId(item.id)\n );\n return parentIndex === -1 ? undefined : parentIndex;\n }}\n acceptsDrop={({\n sourceIndex,\n targetIndex,\n position,\n sourceListId,\n targetListId,\n }) => {\n if (sourceListId !== targetListId) {\n return false;\n }\n\n if (sourceListId !== sortableId || targetListId !== sortableId) {\n return false;\n }\n\n const sourceItem = visibleItems[sourceIndex];\n const targetItem = visibleItems[targetIndex];\n\n return acceptsMediaItemDrop({\n position,\n sourceItem,\n targetItem,\n tree,\n });\n }}\n onMoveItem={({\n sourceListId,\n sourceIndex,\n targetListId,\n targetIndex,\n position,\n }) => {\n if (sourceListId !== sortableId || targetListId !== sortableId) {\n return;\n }\n\n const sourceItem = visibleItems[sourceIndex];\n const targetItem = visibleItems[targetIndex];\n if (position === \"inside\") {\n handleMoveMediaInsideFolder(sourceItem, targetItem);\n }\n }}\n onFilesDrop={async (event: React.DragEvent<Element>) => {\n event.preventDefault();\n\n const rootItemPath = tree.idToPathMap.get(rootItemId);\n\n if (!rootItemPath) return;\n\n const newMedia = await handleDataTransfer({\n dataTransfer: event.dataTransfer,\n rootItemPath,\n media,\n uploadAsset: (file) => assetManager.create(file),\n });\n\n if (!newMedia) return;\n\n setMedia(\n { name: \"Add media files\", timestamp: Date.now() },\n newMedia\n );\n }}\n />\n </FileExplorerLayout>\n </>\n );\n })\n);\n\nexport function acceptsMediaItemDrop(parameters: {\n position: RelativeDropPosition;\n sourceItem: MediaItem;\n targetItem: MediaItem;\n tree: MediaItemTree;\n}) {\n const { position, sourceItem, targetItem, tree } = parameters;\n\n if (position !== \"inside\" || targetItem.kind === \"asset\") {\n return false;\n }\n const sourcePath = tree.findPath(\n rootMediaItem,\n (item) => item.id === sourceItem.id\n );\n const targetPath = tree.findPath(\n rootMediaItem,\n (item) => item.id === targetItem.id\n );\n\n // Don't allow dragging into a descendant\n if (!sourcePath || !targetPath) return false;\n\n if (isDeepEqual(sourcePath, targetPath.slice(0, sourcePath.length))) {\n return false;\n }\n\n return true;\n}\n","import {\n AssetMediaItem,\n FileMediaItem,\n FolderMediaItem,\n MediaItem,\n MediaMap,\n} from \"@noya-app/noya-schemas\";\nimport { uuid } from \"@noya-app/noya-utils\";\nimport { path } from \"imfs\";\nimport { defineTree } from \"tree-visit\";\n\nexport const createMediaFolder = (\n folder?: Omit<FolderMediaItem, \"kind\" | \"id\">\n): FolderMediaItem => {\n return {\n id: uuid(),\n kind: \"folder\",\n ...folder,\n };\n};\n\nexport const createMediaAsset = (\n asset: Omit<AssetMediaItem, \"kind\" | \"id\">\n): AssetMediaItem => {\n return {\n id: uuid(),\n kind: \"asset\",\n ...asset,\n };\n};\n\nexport const createMediaFile = (\n file: Omit<FileMediaItem, \"kind\" | \"id\">\n): FileMediaItem => {\n return {\n id: uuid(),\n kind: \"file\",\n ...file,\n };\n};\n\nexport const createMediaItem = (item: MediaItem) => {\n return {\n ...item,\n };\n};\n\nexport const rootMediaItem: MediaItem = {\n id: \"root\",\n kind: \"folder\",\n};\n\nexport const rootMediaItemPath = \".\";\nexport const rootMediaItemName = \"All Files\";\nexport const PLACEHOLDER_ITEM_NAME = \"placeholder\";\n\nexport const createMediaItemTree = (mediaMap: MediaMap) => {\n const sortedMediaMap = Object.fromEntries(\n Object.entries(mediaMap).sort((a, b) => a[0].localeCompare(b[0]))\n );\n const parentToChildrenMap = new Map<string, MediaItem[]>();\n const idToPathMap = new Map<string, string>();\n idToPathMap.set(rootMediaItem.id, rootMediaItemPath);\n\n for (const [itemPath, item] of Object.entries(sortedMediaMap)) {\n const parentPath = path.dirname(itemPath);\n const children = parentToChildrenMap.get(parentPath) ?? [];\n children.push(item);\n parentToChildrenMap.set(parentPath, children);\n idToPathMap.set(item.id, itemPath);\n }\n\n const tree = defineTree<MediaItem>({\n getChildren: (item) => {\n const itemPath =\n item === rootMediaItem ? rootMediaItemPath : idToPathMap.get(item.id);\n if (!itemPath) return [];\n return parentToChildrenMap.get(itemPath) ?? [];\n },\n onDetectCycle: \"skip\",\n getIdentifier: (item) => item.id,\n });\n\n const result = tree.withOptions({\n getLabel: (item) => idToPathMap.get(item.id) ?? \"\",\n });\n\n const mediaItemsWithRoot = [...Object.values(sortedMediaMap), rootMediaItem];\n const getNameForId = (id: string) =>\n id === rootMediaItem.id\n ? rootMediaItemName\n : path.basename(idToPathMap.get(id) ?? \"\");\n const getParentIdForId = (id: string) => {\n const itemPath = idToPathMap.get(id);\n if (!itemPath) return;\n const parentPath = path.dirname(itemPath);\n return idToPathMap.get(parentPath);\n };\n\n return {\n ...result,\n idToPathMap,\n parentToChildrenMap,\n mediaItemsWithRoot,\n getParentIdForId,\n getNameForId,\n };\n};\n\nexport type MediaItemTree = ReturnType<typeof createMediaItemTree>;\n","import { MediaItem, MediaMap } from \"@noya-app/noya-schemas\";\nimport { path } from \"imfs\";\nimport { ancestorPaths } from \"tree-visit\";\nimport {\n createMediaItemTree,\n MediaItemTree,\n rootMediaItem,\n} from \"./mediaItemTree\";\n\nexport type FileKindFilter = \"assets\" | \"directories\" | \"all\";\nexport type ExpandedMap = Record<string, boolean | undefined>;\n\nexport type GetVisibleItemsOptions = {\n expandedMap: ExpandedMap;\n fileKindFilter: FileKindFilter;\n rootItemId: string;\n tree: MediaItemTree;\n showAllDescendants: boolean;\n showRootItem: boolean;\n};\n\nexport const getVisibleItems = ({\n expandedMap,\n fileKindFilter,\n rootItemId,\n tree,\n showAllDescendants,\n showRootItem,\n}: GetVisibleItemsOptions) => {\n const filteredItems: MediaItem[] = [];\n const relativeRootItem =\n tree.find(rootMediaItem, (item) => item.id === rootItemId) ?? rootMediaItem;\n\n tree.visit(relativeRootItem, (item) => {\n if (relativeRootItem.id === item.id) {\n if (showRootItem) {\n filteredItems.push(item);\n }\n return;\n }\n if (item.kind === \"noyaFile\" && fileKindFilter === \"all\") {\n filteredItems.push(item);\n }\n if (item.kind === \"file\" && fileKindFilter === \"all\") {\n filteredItems.push(item);\n }\n if (\n item.kind === \"asset\" &&\n (fileKindFilter === \"assets\" || fileKindFilter === \"all\")\n ) {\n filteredItems.push(item);\n }\n if (\n item.kind === \"folder\" &&\n (fileKindFilter === \"directories\" || fileKindFilter === \"all\")\n ) {\n filteredItems.push(item);\n }\n if (!expandedMap[item.id] || !showAllDescendants) return \"skip\";\n });\n return filteredItems;\n};\n\n/**\n * Validates if a basename follows typical file naming conventions\n * Disallows:\n * - Path separators (/ and \\)\n * - Characters typically invalid in filesystems (<, >, :, \", |, ?, *)\n * - Empty names\n */\nexport const basenameValidator = (basename: string): boolean => {\n // Check for empty string\n if (!basename || basename.trim() === \"\") return false;\n\n // Simple regex matching common invalid filesystem characters\n const invalidCharsRegex = /[/\\\\<>:\"|?*]/;\n return !invalidCharsRegex.test(basename);\n};\n\nexport const validateMediaItemRename = ({\n basename,\n selectedItemPath,\n media,\n}: {\n basename: string;\n selectedItemPath: string;\n media: MediaMap;\n}): boolean => {\n if (!basenameValidator(basename)) return false;\n const newItemPath = path.join(path.dirname(selectedItemPath), basename);\n // traverse the tree and check if there is already a path with the new name\n const newPathExists = media[newItemPath];\n if (newPathExists) return false;\n return true;\n};\n\nexport const movePathsIntoTarget = ({\n media,\n sourceItemPaths,\n targetItemPath,\n tree,\n}: {\n media: MediaMap;\n sourceItemPaths: string[];\n targetItemPath: string;\n tree: MediaItemTree;\n}) => {\n const ancestors = ancestorPaths(\n sourceItemPaths.map((path) => path.split(\"/\"))\n );\n const mediaClone = { ...media };\n for (const ancestor of ancestors) {\n const ancestorPath = ancestor.join(\"/\");\n const ancestorItem = mediaClone[ancestorPath];\n const newAncestorPath = path.join(\n targetItemPath,\n path.basename(ancestorPath)\n );\n if (!ancestorItem) continue;\n const descendantPaths = tree\n .flat(ancestorItem)\n .map((item) => tree.idToPathMap.get(item.id));\n for (const descendantPath of descendantPaths) {\n if (!descendantPath) continue;\n const newDescendantPath = descendantPath.replace(\n ancestorPath,\n newAncestorPath\n );\n const newPathIsValid = validateMediaItemRename({\n basename: path.basename(descendantPath),\n selectedItemPath: newDescendantPath,\n media,\n });\n if (newPathIsValid) {\n mediaClone[newDescendantPath] = mediaClone[descendantPath];\n delete mediaClone[descendantPath];\n }\n }\n }\n return mediaClone;\n};\n\nexport const moveUpAFolder = ({\n tree,\n media,\n selectedIds,\n}: {\n tree: MediaItemTree;\n media: MediaMap;\n selectedIds: string[];\n}) => {\n const indexPath = tree.findPath(\n rootMediaItem,\n (item) => item.id === selectedIds[0]\n );\n if (!indexPath) return;\n\n // Get the grandparent folder (where items will be moved to)\n const grandparentFolder = tree.access(\n rootMediaItem,\n indexPath.slice(0, indexPath.length - 2)\n );\n const grandparentFolderPath = tree.idToPathMap.get(grandparentFolder.id);\n if (!grandparentFolderPath) return;\n\n const sourceItemPaths = selectedIds\n .map((id) => tree.idToPathMap.get(id))\n .filter((path): path is string => Boolean(path));\n return movePathsIntoTarget({\n media,\n targetItemPath: grandparentFolderPath,\n sourceItemPaths,\n tree,\n });\n};\n\nexport const getDepthMap = (\n item: MediaItem,\n tree: MediaItemTree,\n showAllDescendants: boolean\n): Record<string, number> => {\n const depthMap: Record<string, number> = {};\n tree.visit(item, (item, indexPath) => {\n if (showAllDescendants) {\n depthMap[item.id] = Math.max(indexPath.length - 1, 0);\n } else {\n depthMap[item.id] = 0;\n }\n });\n return depthMap;\n};\n\nexport const updateExpandedMap = ({\n item,\n expanded,\n expandable,\n expandedMap,\n tree,\n}: {\n item: MediaItem;\n expanded: boolean;\n expandable: boolean;\n expandedMap: ExpandedMap;\n tree: MediaItemTree;\n}): ExpandedMap => {\n const newExpandedMap = { ...expandedMap };\n const inner = (item: MediaItem, expanded: boolean) => {\n if (!expandable) return {};\n // Don't allow toggling the fake root\n if (item.id === rootMediaItem.id) return {};\n if (!expanded) {\n // recursively collapse all children\n const children = tree.getChildren(item, []);\n children.forEach((child) => inner(child, false));\n }\n newExpandedMap[item.id] = expanded;\n };\n inner(item, expanded);\n return newExpandedMap;\n};\n\nexport const deleteMediaItems = ({\n selectedIds,\n media,\n tree,\n}: {\n selectedIds: string[];\n media: MediaMap;\n tree: MediaItemTree;\n}): MediaMap => {\n const itemsToDelete = selectedIds.flatMap((mediaItemId) => {\n const mediaItem = tree.mediaItemsWithRoot.find(\n (item) => item.id === mediaItemId\n );\n if (!mediaItem) return [];\n return tree.flat(mediaItem);\n });\n const itemKeysToDelete = new Set(\n itemsToDelete.map((item) => tree.idToPathMap.get(item.id))\n );\n\n return Object.fromEntries(\n Object.entries(media).filter(([key]) => !itemKeysToDelete.has(key))\n );\n};\n\nexport const moveMediaInsideFolder = ({\n sourceItemIds,\n targetItemId,\n media,\n tree,\n}: {\n sourceItemIds: string[];\n targetItemId: string;\n media: MediaMap;\n tree: MediaItemTree;\n}) => {\n const targetItemPath = tree.idToPathMap.get(targetItemId);\n if (!targetItemPath) return media;\n\n const sourceItemPaths = sourceItemIds\n .map((id) => tree.idToPathMap.get(id))\n .filter((path): path is string => Boolean(path));\n\n return movePathsIntoTarget({\n media,\n sourceItemPaths,\n targetItemPath,\n tree,\n });\n};\n\nexport const getParentDirectories = (mediaMap: MediaMap, folderId: string) => {\n const tree = createMediaItemTree(mediaMap);\n\n const indexPath = tree.findPath(\n rootMediaItem,\n (item) => item.id === folderId\n );\n\n if (!indexPath) return [rootMediaItem];\n\n return tree.accessPath(rootMediaItem, indexPath);\n};\n\nexport const renameMediaItemAndDescendantPaths = ({\n newName,\n selectedItemPath,\n media,\n tree,\n}: {\n newName: string;\n selectedItemPath: string;\n media: MediaMap;\n tree: MediaItemTree;\n}) => {\n const mediaClone = { ...media };\n const selectedItem = mediaClone[selectedItemPath];\n if (!selectedItem) return mediaClone;\n\n const parentPath = path.dirname(selectedItemPath);\n const newItemPath = path.join(parentPath, newName);\n\n const descendants = tree\n .flat(selectedItem)\n .map((item) => tree.idToPathMap.get(item.id));\n\n // Update all descendants' paths\n for (const descendantPath of descendants) {\n if (!descendantPath) continue;\n\n // Use the same approach as movePathsIntoTarget\n const newDescendantPath = descendantPath.replace(\n selectedItemPath,\n newItemPath\n );\n mediaClone[newDescendantPath] = mediaClone[descendantPath];\n delete mediaClone[descendantPath];\n }\n\n return mediaClone;\n};\n","import { Asset, MediaItem, MediaMap } from \"@noya-app/noya-schemas\";\nimport { path } from \"imfs\";\nimport { createMediaAsset, createMediaFolder } from \"./mediaItemTree\";\n\nfunction isDirectoryEntry(\n entry: FileSystemEntry\n): entry is FileSystemDirectoryEntry {\n return entry.isDirectory;\n}\n\nfunction isFileEntry(entry: FileSystemEntry): entry is FileSystemFileEntry {\n return entry.isFile;\n}\n\nexport async function handleDataTransfer({\n dataTransfer,\n rootItemPath,\n media,\n uploadAsset,\n}: {\n dataTransfer: DataTransfer;\n rootItemPath: string;\n media: MediaMap;\n uploadAsset: (file: File) => Promise<Asset>;\n}): Promise<MediaMap | undefined> {\n try {\n const dataTransferItems = Array.from(dataTransfer.items ?? []);\n\n const supportsEntries = dataTransferItems.some(\n (item) => typeof item?.webkitGetAsEntry === \"function\"\n );\n\n type DroppedFile = { file: File; relativePath: string };\n\n const collectFromEntry = async (\n entry: FileSystemEntry,\n basePath: string\n ): Promise<DroppedFile[]> => {\n if (!entry) return [];\n if (isFileEntry(entry)) {\n const file: File = await new Promise((resolve) =>\n (entry as FileSystemFileEntry).file((f: File) => resolve(f))\n );\n return [\n {\n file,\n relativePath: path.join(basePath, file.name),\n },\n ];\n }\n if (isDirectoryEntry(entry)) {\n const reader = entry.createReader();\n const readAll = async (): Promise<FileSystemEntry[]> => {\n const all: FileSystemEntry[] = [];\n // readEntries may return partial results; loop until empty\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const entries: FileSystemEntry[] = await new Promise((resolve) =>\n reader.readEntries((ents: FileSystemEntry[]) => resolve(ents))\n );\n if (!entries.length) break;\n all.push(...entries);\n }\n return all;\n };\n const children = await readAll();\n const results = await Promise.all(\n children.map((child) =>\n collectFromEntry(child, path.join(basePath, entry.name))\n )\n );\n return results.flat();\n }\n return [];\n };\n\n let dropped: DroppedFile[] = [];\n\n if (supportsEntries) {\n const topLevelEntries = dataTransferItems.flatMap((item) => {\n const entry = item.webkitGetAsEntry?.();\n if (!entry) return [];\n return [entry];\n });\n const nested = await Promise.all(\n topLevelEntries.map((entry) => collectFromEntry(entry, \"\"))\n );\n dropped = nested.flat();\n } else {\n const files = Array.from(dataTransfer.files);\n if (files.length === 0) return;\n dropped = files.map((file) => ({\n file,\n // Best effort: try webkitRelativePath; fall back to name\n relativePath:\n file.webkitRelativePath && file.webkitRelativePath.length > 0\n ? file.webkitRelativePath\n : file.name,\n }));\n }\n\n if (dropped.length === 0) return;\n\n const folderRelativePaths = new Set<string>();\n for (const { relativePath } of dropped) {\n const dir = path.dirname(relativePath);\n if (dir && dir !== \".\") {\n const parts = dir.split(\"/\").filter(Boolean);\n let acc = \"\";\n for (const part of parts) {\n acc = acc ? path.join(acc, part) : part;\n folderRelativePaths.add(acc);\n }\n }\n }\n\n const folderEntries: [string, MediaItem][] = Array.from(folderRelativePaths)\n .map((rel) => path.join(rootItemPath, rel))\n .filter((full) => !media[full])\n .map((full) => [full, createMediaFolder() as MediaItem]);\n\n const uploadResults = await Promise.all(\n dropped.map(\n async ({ file, relativePath }): Promise<[string, MediaItem]> => {\n const asset = await uploadAsset(file);\n\n return [\n path.join(rootItemPath, relativePath),\n createMediaAsset({ assetId: asset.id }) as MediaItem,\n ];\n }\n )\n );\n\n return {\n ...media,\n ...Object.fromEntries([...folderEntries, ...uploadResults]),\n };\n } catch (error) {\n console.error(\"Failed to upload dropped files:\", error);\n }\n}\n"],"mappings":"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","names":["path","ancestorPaths","BoxDrawing","LinePrefix","node","indexPath","context","node","path","index","node","path","path","defineTree","exports","path","import_tree_visit","path","path","item","expanded","path","path","path","MediaCollection","selectedIds"]}
1
+ {"version":3,"sources":["../../../node_modules/tree-visit/lib/access.js","../../../node_modules/tree-visit/lib/sort.js","../../../node_modules/tree-visit/lib/ancestors.js","../../../node_modules/tree-visit/lib/diagram/boxDiagram.js","../../../node_modules/tree-visit/lib/diagram/directoryDiagram.js","../../../node_modules/tree-visit/lib/diagram.js","../../../node_modules/tree-visit/lib/visit.js","../../../node_modules/tree-visit/lib/entries.js","../../../node_modules/tree-visit/lib/find.js","../../../node_modules/tree-visit/lib/reduce.js","../../../node_modules/tree-visit/lib/flat.js","../../../node_modules/tree-visit/lib/map.js","../../../node_modules/tree-visit/lib/transformPath.js","../../../node_modules/tree-visit/lib/operation.js","../../../node_modules/tree-visit/lib/insert.js","../../../node_modules/tree-visit/lib/move.js","../../../node_modules/tree-visit/lib/remove.js","../../../node_modules/tree-visit/lib/replace.js","../../../node_modules/tree-visit/lib/splice.js","../../../node_modules/tree-visit/lib/defineTree.js","../../../node_modules/tree-visit/lib/indexPath.js","../../../node_modules/tree-visit/lib/options.js","../../../node_modules/tree-visit/lib/withOptions.js","../../../node_modules/tree-visit/lib/index.js","../src/MediaCollection.tsx","../src/utils/mediaItemTree.ts","../src/utils/files.ts","../src/utils/resourceUtils.ts","../src/ResourceExplorer.tsx","../src/utils/handleFileDrop.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.get = get;\nexports.ancestors = ancestors;\nexports.access = access;\nexports.accessPath = accessPath;\n/**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction get(node, indexPath, options) {\n if (options.includeTraversalContext) {\n const accessed = _getPath(node, indexPath, options);\n return accessed[accessed.length - 1];\n }\n let path = indexPath.slice();\n while (path.length > 0) {\n let index = path.shift();\n const children = options.getChildren(node, path);\n const child = children[index];\n if (!child) {\n return undefined;\n }\n node = child;\n }\n return node;\n}\n/**\n * Returns an array of each node in an `IndexPath`, excluding the last node.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction ancestors(node, indexPath, options) {\n return _getPath(node, indexPath, options).slice(0, -1);\n}\nfunction _getPath(node, indexPath, options) {\n let path = indexPath.slice();\n let result = [node];\n while (path.length > 0) {\n let index = path.shift();\n const context = options.includeTraversalContext ? makeTraversalContext(result) : undefined;\n const children = options.getChildren(node, path, context);\n const child = children[index];\n if (!child) {\n return result;\n }\n node = child;\n result.push(node);\n }\n return result;\n}\n/**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction access(node, indexPath, options) {\n if (options.includeTraversalContext) {\n const accessed = accessPath(node, indexPath, options);\n return accessed[accessed.length - 1];\n }\n let path = indexPath.slice();\n while (path.length > 0) {\n let index = path.shift();\n node = options.getChildren(node, path)[index];\n }\n return node;\n}\n/**\n * Returns an array of each node in an `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\nfunction accessPath(node, indexPath, options) {\n let path = indexPath.slice();\n let result = [node];\n while (path.length > 0) {\n let index = path.shift();\n const context = options.includeTraversalContext ? makeTraversalContext(result) : undefined;\n node = options.getChildren(node, path, context)[index];\n result.push(node);\n }\n return result;\n}\nfunction makeTraversalContext(array) {\n return {\n getRoot: () => array[0],\n getParent: () => array[array.length - 2],\n getAncestors: () => array.slice(0, -1),\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.comparePathsByComponent = comparePathsByComponent;\nexports.sortPaths = sortPaths;\nfunction comparePathsByComponent(a, b) {\n for (let i = 0; i < Math.min(a.length, b.length); i++) {\n if (a[i] < b[i])\n return -1;\n if (a[i] > b[i])\n return 1;\n }\n // If all preceding components are equal, the shorter array comes first\n return a.length - b.length;\n}\nfunction sortPaths(indexPaths) {\n return [...indexPaths].sort(comparePathsByComponent);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ancestorPaths = ancestorPaths;\nconst sort_1 = require(\"./sort\");\n/**\n * This function cleans up the `indexPaths` array by\n *\n * 1. sorting the `indexPaths`\n * 2. removing any `indexPaths` that are descendants of other `indexPaths`\n * 3. removing any `indexPaths` that are duplicates\n */\nfunction ancestorPaths(paths, options) {\n var _a;\n const result = new Map();\n const compare = (_a = options === null || options === void 0 ? void 0 : options.compare) !== null && _a !== void 0 ? _a : sort_1.comparePathsByComponent;\n const sortedIndexPaths = paths.sort(compare);\n for (const indexPath of sortedIndexPaths) {\n const foundParent = indexPath.some((_, index) => {\n const parentKey = indexPath.slice(0, index).join();\n return result.has(parentKey);\n });\n if (foundParent)\n continue;\n result.set(indexPath.join(), indexPath);\n }\n return Array.from(result.values());\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.boxDiagram = boxDiagram;\nvar BoxDrawing;\n(function (BoxDrawing) {\n BoxDrawing[\"TopLeft\"] = \"\\u250C\";\n BoxDrawing[\"TopRight\"] = \"\\u2510\";\n BoxDrawing[\"BottomLeft\"] = \"\\u2514\";\n BoxDrawing[\"BottomRight\"] = \"\\u2518\";\n BoxDrawing[\"Horizontal\"] = \"\\u2500\";\n BoxDrawing[\"Vertical\"] = \"\\u2502\";\n BoxDrawing[\"BottomConnectorDown\"] = \"\\u252C\";\n BoxDrawing[\"BottomConnectorUp\"] = \"\\u2534\";\n BoxDrawing[\"TopConnectorUp\"] = \"\\u2534\";\n})(BoxDrawing || (BoxDrawing = {}));\nfunction wrapLabelInBox(label) {\n const lines = label.split('\\n');\n const length = Math.max(...lines.map((line) => line.length));\n const horizontalMargin = 1;\n const width = length + horizontalMargin * 2 + 2;\n const height = 2 + lines.length;\n const diagram = [\n [\n BoxDrawing.TopLeft,\n BoxDrawing.Horizontal.repeat(length + horizontalMargin * 2),\n BoxDrawing.TopRight,\n ],\n ...lines.map((line) => [\n BoxDrawing.Vertical,\n ' '.repeat(horizontalMargin),\n line + (line.length < length ? ' '.repeat(length - line.length) : ''),\n ' '.repeat(horizontalMargin),\n BoxDrawing.Vertical,\n ]),\n [\n BoxDrawing.BottomLeft,\n BoxDrawing.Horizontal.repeat(length + horizontalMargin * 2),\n BoxDrawing.BottomRight,\n ],\n ];\n return {\n width,\n height,\n contents: diagram.map((parts) => parts.join('')),\n };\n}\nfunction mergeBoxesHorizontal(boxes) {\n const horizontalMargin = 1;\n if (boxes.length === 0) {\n throw new Error(\"Can't merge empty array of boxes\");\n }\n return boxes.slice(1).reduce((result, box) => {\n const height = Math.max(result.height, box.height);\n const width = result.width + horizontalMargin + box.width;\n const contents = [];\n for (let i = 0; i < height; i++) {\n contents.push((result.contents[i] || ' '.repeat(result.width)) +\n ' '.repeat(horizontalMargin) +\n (box.contents[i] || ' '.repeat(box.width)));\n }\n return { height, width, contents: centerBlock(contents, width) };\n }, boxes[0]);\n}\nfunction mergeBoxesVertical(boxes) {\n const verticalMargin = 1;\n if (boxes.length === 0) {\n throw new Error(\"Can't merge empty array of boxes\");\n }\n const width = Math.max(...boxes.map((box) => box.width));\n return boxes.slice(1).reduce((result, box) => {\n const height = result.height + verticalMargin + box.height;\n const contents = [];\n for (let i = 0; i < height; i++) {\n if (i < result.height) {\n contents.push(result.contents[i]);\n }\n else if (i === result.height) {\n contents.push(' '.repeat(width));\n }\n else {\n contents.push(box.contents[i - result.height - 1]);\n }\n }\n return { height, width, contents: centerBlock(contents, width) };\n }, boxes[0]);\n}\nfunction nodeDiagram(node, indexPath, options) {\n const label = options.getLabel(node, indexPath);\n const box = wrapLabelInBox(label);\n const children = options.getChildren(node, indexPath);\n if (children.length === 0)\n return box;\n const childBoxes = children.map((child, index) => {\n const childBox = nodeDiagram(child, [...indexPath, index], options);\n // Draw top connector for each child\n childBox.contents[0] = insertSubstring(childBox.contents[0], centerIndex(childBox.contents[0].length), BoxDrawing.TopConnectorUp);\n return childBox;\n });\n const result = mergeBoxesVertical([box, mergeBoxesHorizontal(childBoxes)]);\n // Draw connectors\n const contents = result.contents;\n const mid = centerIndex(result.width);\n contents[box.height - 1] = insertSubstring(contents[box.height - 1], mid, BoxDrawing.BottomConnectorDown);\n let min = contents[box.height + 1].indexOf(BoxDrawing.TopConnectorUp);\n let max = contents[box.height + 1].lastIndexOf(BoxDrawing.TopConnectorUp);\n for (let i = min; i <= max; i++) {\n let character;\n if (i === mid) {\n character =\n childBoxes.length > 1\n ? BoxDrawing.BottomConnectorUp\n : BoxDrawing.Vertical;\n }\n else if (i === min) {\n character = BoxDrawing.TopLeft;\n }\n else if (i === max) {\n character = BoxDrawing.TopRight;\n }\n else {\n character = BoxDrawing.Horizontal;\n }\n result.contents[box.height] = insertSubstring(result.contents[box.height], i, character);\n }\n return result;\n}\nfunction boxDiagram(node, options) {\n return nodeDiagram(node, [], options).contents.join('\\n');\n}\nfunction centerIndex(width) {\n return Math.floor(width / 2);\n}\nfunction centerLine(line, width) {\n const remainder = width - line.length;\n if (remainder <= 0)\n return line;\n const prefixLength = centerIndex(remainder);\n const suffixLength = centerIndex(remainder);\n const result = ' '.repeat(prefixLength) + line + ' '.repeat(suffixLength);\n return prefixLength + suffixLength + result.length < width\n ? result + ' '\n : result;\n}\nfunction centerBlock(lines, width) {\n return lines.map((line) => centerLine(line, width));\n}\nfunction insertSubstring(string, index, substring) {\n if (index > string.length - 1)\n return string;\n return string.substring(0, index) + substring + string.substring(index + 1);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.directoryDiagram = directoryDiagram;\nexports.isMultiline = isMultiline;\nexports.prefixBlock = prefixBlock;\nvar LinePrefix;\n(function (LinePrefix) {\n LinePrefix[\"Child\"] = \"\\u251C\\u2500\\u2500 \";\n LinePrefix[\"LastChild\"] = \"\\u2514\\u2500\\u2500 \";\n LinePrefix[\"NestedChild\"] = \"\\u2502 \";\n LinePrefix[\"LastNestedChild\"] = \" \";\n})(LinePrefix || (LinePrefix = {}));\nfunction nodeDiagram(node, indexPath, options) {\n const label = options.getLabel(node, indexPath);\n const depth = indexPath.length;\n let rootLine = { label, depth, prefix: '', multilinePrefix: '' };\n const children = options.getChildren(node, indexPath);\n if (children.length === 0)\n return [rootLine];\n // Special-case nodes with a single child, collapsing their labels to a single line\n if (options.flattenSingleChildNodes &&\n children.length === 1 &&\n !isMultiline(label)) {\n const [line] = nodeDiagram(children[0], [...indexPath, 0], options);\n const hideRoot = indexPath.length === 0 && label === '';\n rootLine.label = hideRoot\n ? `/ ${line.label}`\n : `${rootLine.label} / ${line.label}`;\n return [rootLine];\n }\n const nestedLines = children.flatMap((file, index, array) => {\n const childIsLast = index === array.length - 1;\n const childLines = nodeDiagram(file, [...indexPath, index], options);\n const childPrefix = childIsLast ? LinePrefix.LastChild : LinePrefix.Child;\n const childMultilinePrefix = childIsLast\n ? LinePrefix.LastNestedChild\n : LinePrefix.NestedChild;\n childLines.forEach((line) => {\n if (line.depth === depth + 1) {\n line.prefix = childPrefix + line.prefix;\n line.multilinePrefix = childMultilinePrefix + line.multilinePrefix;\n }\n else if (childIsLast) {\n line.prefix = LinePrefix.LastNestedChild + line.prefix;\n line.multilinePrefix = LinePrefix.LastNestedChild + line.multilinePrefix;\n }\n else {\n line.prefix = LinePrefix.NestedChild + line.prefix;\n line.multilinePrefix = LinePrefix.NestedChild + line.multilinePrefix;\n }\n });\n return childLines;\n });\n return [rootLine, ...nestedLines];\n}\nfunction directoryDiagram(node, options) {\n const lines = nodeDiagram(node, [], options);\n const strings = lines.map((line) => prefixBlock(line.label, line.prefix, line.multilinePrefix));\n return strings.join('\\n');\n}\nfunction isMultiline(line) {\n return line.includes('\\n');\n}\nfunction prefixBlock(block, prefix, multilinePrefix) {\n if (!isMultiline(block))\n return prefix + block;\n return block\n .split('\\n')\n .map((line, index) => (index === 0 ? prefix : multilinePrefix) + line)\n .join('\\n');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.diagram = diagram;\nconst boxDiagram_1 = require(\"./diagram/boxDiagram\");\nconst directoryDiagram_1 = require(\"./diagram/directoryDiagram\");\n/**\n * Generate a diagram of the tree, as a string.\n */\nfunction diagram(node, options) {\n if (options.type === 'box') {\n return (0, boxDiagram_1.boxDiagram)(node, options);\n }\n return (0, directoryDiagram_1.directoryDiagram)(node, options);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.STOP = exports.SKIP = void 0;\nexports.visit = visit;\nexports.SKIP = 'skip';\nexports.STOP = 'stop';\n/**\n * Visit each node in the tree, calling an optional `onEnter` and `onLeave` for each.\n *\n * From `onEnter`:\n *\n * - return nothing or `undefined` to continue\n * - return `\"skip\"` to skip the children of that node and the subsequent `onLeave`\n * - return `\"stop\"` to end traversal\n *\n * From `onLeave`:\n *\n * - return nothing or `undefined` to continue\n * - return `\"stop\"` to end traversal\n */\nfunction visit(node, options) {\n const { onEnter, onLeave, getChildren: originalGetChildren, onDetectCycle, getIdentifier, direction = 'forward', } = options;\n const getChildren = (node, indexPath, context) => {\n const children = originalGetChildren(node, indexPath, context);\n return direction === 'forward' ? children : children.slice().reverse();\n };\n let indexPath = [];\n let stack = [{ node }];\n const visited = onDetectCycle ? new Set() : undefined;\n const context = options.includeTraversalContext\n ? {\n getRoot() {\n return node;\n },\n getParent() {\n var _a;\n return (_a = stack[stack.length - 2]) === null || _a === void 0 ? void 0 : _a.node;\n },\n getAncestors() {\n return stack.slice(0, -1).map((wrapper) => wrapper.node);\n },\n }\n : undefined;\n const getIndexPath = options.reuseIndexPath\n ? () => indexPath\n : () => indexPath.slice();\n while (stack.length > 0) {\n let wrapper = stack[stack.length - 1];\n // Visit the wrapped node\n if (wrapper.state === undefined) {\n // Add cycle detection before visiting node\n if (visited) {\n const id = getIdentifier ? getIdentifier(wrapper.node) : wrapper.node;\n if (visited.has(id)) {\n const action = typeof onDetectCycle === 'function'\n ? onDetectCycle(wrapper.node, getIndexPath(), context)\n : onDetectCycle;\n if (action === 'error') {\n throw new Error('Cycle detected in tree');\n }\n else {\n // action === 'skip'\n wrapper.state = -1; // Mark as skipped\n continue;\n }\n }\n visited.add(id);\n }\n const enterResult = onEnter === null || onEnter === void 0 ? void 0 : onEnter(wrapper.node, getIndexPath());\n if (enterResult === exports.STOP)\n return;\n wrapper.state = enterResult === exports.SKIP ? -1 : 0;\n }\n const children = wrapper.children || getChildren(wrapper.node, getIndexPath(), context);\n if (!wrapper.children) {\n wrapper.children = children;\n }\n // If the node wasn't skipped\n if (wrapper.state !== -1) {\n // Visit the next child\n if (wrapper.state < children.length) {\n let currentIndex = wrapper.state;\n indexPath.push(direction === 'forward'\n ? currentIndex\n : children.length - currentIndex - 1);\n stack.push({ node: children[currentIndex] });\n wrapper.state = currentIndex + 1;\n continue;\n }\n const leaveResult = onLeave === null || onLeave === void 0 ? void 0 : onLeave(wrapper.node, getIndexPath());\n if (leaveResult === exports.STOP)\n return;\n }\n // Remove node from visited set when leaving\n if (visited) {\n const id = getIdentifier ? getIdentifier(wrapper.node) : wrapper.node;\n visited.delete(id);\n }\n indexPath.pop();\n stack.pop();\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.entries = entries;\nconst visit_1 = require(\"./visit\");\nfunction entries(node, options) {\n let result = [];\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onEnter: (item, indexPath) => {\n result.push([indexPath, item]);\n } }));\n return result;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.find = find;\nexports.findAll = findAll;\nexports.findPath = findPath;\nexports.findAllPaths = findAllPaths;\nconst visit_1 = require(\"./visit\");\nfunction find(node, options) {\n let found;\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n found = child;\n return visit_1.STOP;\n }\n } }));\n return found;\n}\nfunction findAll(node, options) {\n let found = [];\n (0, visit_1.visit)(node, {\n onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n found.push(child);\n }\n },\n getChildren: options.getChildren,\n });\n return found;\n}\n/**\n * Find the `IndexPath` of a node matching a predicate function.\n */\nfunction findPath(node, options) {\n let found;\n (0, visit_1.visit)(node, {\n onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n // Copy the indexPath, since indexPath may be mutated\n found = [...indexPath];\n return visit_1.STOP;\n }\n },\n getChildren: options.getChildren,\n });\n return found;\n}\n/**\n * Find the `IndexPath` of all nodes matching a predicate function.\n */\nfunction findAllPaths(node, options) {\n let found = [];\n (0, visit_1.visit)(node, {\n onEnter: (child, indexPath) => {\n if (options.predicate(child, indexPath)) {\n // Copy the indexPath, since indexPath may be mutated\n found.push([...indexPath]);\n }\n },\n getChildren: options.getChildren,\n });\n return found;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reduce = reduce;\nconst visit_1 = require(\"./visit\");\nfunction reduce(node, options) {\n let result = options.initialResult;\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onEnter: (child, indexPath) => {\n result = options.nextResult(result, child, indexPath);\n } }));\n return result;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flat = flat;\nconst reduce_1 = require(\"./reduce\");\n/**\n * Returns an array containing the root node and all of its descendants.\n *\n * This is analogous to `Array.prototype.flat` for flattening arrays.\n */\nfunction flat(node, options) {\n return (0, reduce_1.reduce)(node, Object.assign(Object.assign({}, options), { initialResult: [], nextResult: (result, child) => {\n result.push(child);\n return result;\n } }));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.map = map;\nexports.flatMap = flatMap;\nconst visit_1 = require(\"./visit\");\n/**\n * Map each node into a new node.\n *\n * The shape of the tree remains the same. You can omit nodes from the tree by\n * filtering them out of the `transformedChildren` argument. The root can't be omitted.\n */\nfunction map(node, options) {\n return flatMap(node, Object.assign(Object.assign({}, options), { transform: (node, transformedChildren, indexPath) => [\n options.transform(node, transformedChildren, indexPath),\n ] }));\n}\n/**\n * Map each node into an array of new nodes.\n *\n * You can omit nodes from the tree by returning an empty array from the `transform` function.\n * The first element of the returned top-level array will be the new root.\n */\nfunction flatMap(node, options) {\n const childrenMap = {};\n (0, visit_1.visit)(node, Object.assign(Object.assign({}, options), { onLeave: (child, indexPath) => {\n var _a, _b;\n // Add a 0 so we can always slice off the last element to get a unique parent key\n const keyIndexPath = [0, ...indexPath];\n const key = keyIndexPath.join();\n const transformed = options.transform(child, (_a = childrenMap[key]) !== null && _a !== void 0 ? _a : [], indexPath);\n const parentKey = keyIndexPath.slice(0, -1).join();\n const parentChildren = (_b = childrenMap[parentKey]) !== null && _b !== void 0 ? _b : [];\n parentChildren.push(...transformed);\n childrenMap[parentKey] = parentChildren;\n } }));\n return childrenMap[''][0];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.transformPath = transformPath;\nconst sort_1 = require(\"./sort\");\nfunction commonAncestor(path, otherPath) {\n const length = Math.min(path.length, otherPath.length);\n for (let i = 0; i < length; i++) {\n if (path[i] !== otherPath[i]) {\n return path.slice(0, i);\n }\n }\n return path.slice(0, length);\n}\nfunction transformPath(path, operation, otherPath, count = 1) {\n if (otherPath.length > path.length ||\n (0, sort_1.comparePathsByComponent)(otherPath, path) > 0) {\n return path;\n }\n if (otherPath.length === 0 && operation === 'remove') {\n return undefined;\n }\n const common = commonAncestor(path, otherPath);\n const adjustmentIndex = common.length === path.length || common.length === otherPath.length\n ? common.length - 1\n : common.length;\n const pathValue = path[adjustmentIndex];\n const otherPathValue = otherPath[adjustmentIndex];\n if (operation === 'insert' && otherPathValue <= pathValue) {\n const newPath = [...path];\n newPath[adjustmentIndex] += count;\n return newPath;\n }\n else if (operation === 'remove') {\n if (otherPathValue === pathValue) {\n return undefined;\n }\n else if (otherPathValue < pathValue) {\n const newPath = [...path];\n newPath[adjustmentIndex] -= count;\n return newPath;\n }\n }\n return path;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.insertOperation = insertOperation;\nexports.removeOperation = removeOperation;\nexports.replaceOperation = replaceOperation;\nexports.getInsertionOperations = getInsertionOperations;\nexports.getRemovalOperations = getRemovalOperations;\nexports.getReplaceOperations = getReplaceOperations;\nexports.applyOperations = applyOperations;\nexports.arraySplice = arraySplice;\nexports.transformPathsByOperations = transformPathsByOperations;\nconst ancestors_1 = require(\"./ancestors\");\nconst map_1 = require(\"./map\");\nconst transformPath_1 = require(\"./transformPath\");\nfunction insertOperation(index, nodes) {\n return {\n type: 'insert',\n index,\n nodes,\n };\n}\nfunction removeOperation(indexes) {\n return {\n type: 'remove',\n indexes,\n };\n}\nfunction replaceOperation() {\n return {\n type: 'replace',\n };\n}\nfunction splitIndexPath(indexPath) {\n return [indexPath.slice(0, -1), indexPath[indexPath.length - 1]];\n}\nfunction getInsertionOperations(indexPath, nodes, operations = new Map()) {\n var _a;\n const [parentIndexPath, index] = splitIndexPath(indexPath);\n // Mark all parents for replacing\n for (let i = parentIndexPath.length - 1; i >= 0; i--) {\n const parentKey = parentIndexPath.slice(0, i).join();\n switch ((_a = operations.get(parentKey)) === null || _a === void 0 ? void 0 : _a.type) {\n case 'remove':\n continue;\n }\n operations.set(parentKey, replaceOperation());\n }\n const operation = operations.get(parentIndexPath.join());\n // Mark insertion node\n switch (operation === null || operation === void 0 ? void 0 : operation.type) {\n case 'remove':\n operations.set(parentIndexPath.join(), {\n type: 'removeThenInsert',\n removeIndexes: operation.indexes,\n insertIndex: index,\n insertNodes: nodes,\n });\n break;\n default:\n operations.set(parentIndexPath.join(), insertOperation(index, nodes));\n }\n return operations;\n}\nfunction getRemovalOperations(indexPaths) {\n var _a, _b;\n const _ancestorIndexPaths = (0, ancestors_1.ancestorPaths)(indexPaths);\n const indexesToRemove = new Map();\n for (const indexPath of _ancestorIndexPaths) {\n const parentKey = indexPath.slice(0, -1).join();\n const value = (_a = indexesToRemove.get(parentKey)) !== null && _a !== void 0 ? _a : [];\n value.push(indexPath[indexPath.length - 1]);\n indexesToRemove.set(parentKey, value);\n }\n const operations = new Map();\n // Mark all parents for replacing\n for (const indexPath of _ancestorIndexPaths) {\n for (let i = indexPath.length - 1; i >= 0; i--) {\n const parentKey = indexPath.slice(0, i).join();\n operations.set(parentKey, replaceOperation());\n }\n }\n // Mark all nodes for removal\n for (const indexPath of _ancestorIndexPaths) {\n const parentKey = indexPath.slice(0, -1).join();\n operations.set(parentKey, removeOperation((_b = indexesToRemove.get(parentKey)) !== null && _b !== void 0 ? _b : []));\n }\n return operations;\n}\nfunction getReplaceOperations(indexPath, node) {\n const operations = new Map();\n const [parentIndexPath, index] = splitIndexPath(indexPath);\n // Mark all parents for replacing\n for (let i = parentIndexPath.length - 1; i >= 0; i--) {\n const parentKey = parentIndexPath.slice(0, i).join();\n operations.set(parentKey, replaceOperation());\n }\n operations.set(parentIndexPath.join(), {\n type: 'removeThenInsert',\n removeIndexes: [index],\n insertIndex: index,\n insertNodes: [node],\n });\n return operations;\n}\nfunction adjustInsertIndex(index, removeIndexes) {\n return removeIndexes.reduce((index, removedIndex) => (removedIndex < index ? index - 1 : index), index);\n}\nfunction applyOperations(node, operations, options) {\n return (0, map_1.map)(node, Object.assign(Object.assign({}, options), { \n // Avoid calling `getChildren` for every node in the tree.\n // Return [] if we're just going to return the original node anyway.\n getChildren: (node, indexPath) => {\n const key = indexPath.join();\n const operation = operations.get(key);\n switch (operation === null || operation === void 0 ? void 0 : operation.type) {\n case 'replace':\n case 'remove':\n case 'removeThenInsert':\n case 'insert':\n return options.getChildren(node, indexPath);\n default:\n return [];\n }\n }, transform: (node, children, indexPath) => {\n const key = indexPath.join();\n const operation = operations.get(key);\n switch (operation === null || operation === void 0 ? void 0 : operation.type) {\n case 'remove':\n return options.create(node, children.filter((_, index) => !operation.indexes.includes(index)), indexPath);\n case 'removeThenInsert':\n const updatedChildren = children.filter((_, index) => !operation.removeIndexes.includes(index));\n const adjustedIndex = adjustInsertIndex(operation.insertIndex, operation.removeIndexes);\n return options.create(node, arraySplice(updatedChildren, adjustedIndex, 0, ...operation.insertNodes), indexPath);\n case 'insert':\n return options.create(node, arraySplice(children, operation.index, 0, ...operation.nodes), indexPath);\n case 'replace':\n return options.create(node, children, indexPath);\n default:\n return node;\n }\n } }));\n}\nfunction arraySplice(array, start, deleteCount, ...items) {\n return [\n ...array.slice(0, start),\n ...items,\n ...array.slice(start + deleteCount),\n ];\n}\nfunction transformPathsByOperations(paths, operations) {\n let transformedPaths = paths;\n for (const [parentKey, operation] of operations.entries()) {\n const parentPath = parentKey ? parentKey.split(',').map(Number) : [];\n transformedPaths = transformByOperation(transformedPaths, parentPath, operation);\n }\n return transformedPaths;\n}\nfunction transformByOperation(transformedPaths, parentPath, operation) {\n switch (operation.type) {\n case 'insert': {\n const otherPath = parentPath.concat(operation.index);\n return transformedPaths.map((path) => path\n ? (0, transformPath_1.transformPath)(path, 'insert', otherPath, operation.nodes.length)\n : undefined);\n }\n case 'remove': {\n const otherPaths = [...operation.indexes]\n .reverse()\n .map((index) => parentPath.concat(index));\n return transformedPaths.map((path) => {\n for (const otherPath of otherPaths) {\n path = path ? (0, transformPath_1.transformPath)(path, 'remove', otherPath) : undefined;\n }\n return path;\n });\n }\n case 'removeThenInsert': {\n const result = transformByOperation(transformedPaths, parentPath, {\n type: 'remove',\n indexes: operation.removeIndexes,\n });\n const insertIndex = adjustInsertIndex(operation.insertIndex, operation.removeIndexes);\n return transformByOperation(result, parentPath, {\n type: 'insert',\n index: insertIndex,\n nodes: operation.insertNodes,\n });\n }\n case 'replace': {\n return transformedPaths;\n }\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.insert = insert;\nexports.insertWithPathTracking = insertWithPathTracking;\nconst operation_1 = require(\"./operation\");\n/**\n * Insert nodes at a given `IndexPath`.\n */\nfunction insert(node, options) {\n return _insertWithPathTracking(node, options).node;\n}\n/**\n * Insert nodes at a given `IndexPath`.\n */\nfunction insertWithPathTracking(node, options) {\n return _insertWithPathTracking(node, options);\n}\nfunction _insertWithPathTracking(node, options) {\n const { nodes, path: at, track } = options;\n if (at.length === 0) {\n throw new Error(`Can't insert nodes at the root`);\n }\n const state = (0, operation_1.getInsertionOperations)(at, nodes);\n const transformedPaths = track ? (0, operation_1.transformPathsByOperations)(track, state) : [];\n return {\n node: (0, operation_1.applyOperations)(node, state, options),\n paths: transformedPaths,\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.move = move;\nconst access_1 = require(\"./access\");\nconst ancestors_1 = require(\"./ancestors\");\nconst operation_1 = require(\"./operation\");\nfunction move(node, options) {\n if (options.paths.length === 0)\n return node;\n for (const indexPath of options.paths) {\n if (indexPath.length === 0) {\n throw new Error(`Can't move the root node`);\n }\n }\n if (options.to.length === 0) {\n throw new Error(`Can't move nodes to the root`);\n }\n const _ancestorIndexPaths = (0, ancestors_1.ancestorPaths)(options.paths);\n const nodesToInsert = _ancestorIndexPaths.map((indexPath) => (0, access_1.access)(node, indexPath, options));\n const operations = (0, operation_1.getInsertionOperations)(options.to, nodesToInsert, (0, operation_1.getRemovalOperations)(_ancestorIndexPaths));\n return (0, operation_1.applyOperations)(node, operations, options);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.remove = remove;\nexports.removeWithPathTracking = removeWithPathTracking;\nconst operation_1 = require(\"./operation\");\n/**\n * Remove nodes at the given `IndexPath`s.\n */\nfunction remove(node, options) {\n return _removeWithPathTracking(node, options).node;\n}\n/**\n * Remove nodes at the given `IndexPath`s.\n */\nfunction removeWithPathTracking(node, options) {\n return _removeWithPathTracking(node, options);\n}\nfunction _removeWithPathTracking(node, options) {\n const { paths, track } = options;\n const operations = (0, operation_1.getRemovalOperations)(paths);\n const transformedPaths = track\n ? (0, operation_1.transformPathsByOperations)(track, operations)\n : [];\n return {\n node: (0, operation_1.applyOperations)(node, operations, options),\n paths: transformedPaths,\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.replace = replace;\nconst operation_1 = require(\"./operation\");\n/**\n * Replace the node at the given `IndexPath` with another.\n */\nfunction replace(node, options) {\n if (options.path.length === 0)\n return options.node;\n const operations = (0, operation_1.getReplaceOperations)(options.path, options.node);\n return (0, operation_1.applyOperations)(node, operations, options);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splice = splice;\nexports.spliceWithPathTracking = spliceWithPathTracking;\nconst operation_1 = require(\"./operation\");\nfunction splice(node, options) {\n return _spliceWithPathTracking(node, options).node;\n}\nfunction spliceWithPathTracking(node, options) {\n return _spliceWithPathTracking(node, options);\n}\nfunction _spliceWithPathTracking(node, options) {\n const { path, deleteCount = 0, nodes, track } = options;\n if (path.length === 0) {\n throw new Error(`Can't splice at the root`);\n }\n const pathsToRemove = getPathsToRemove(path, deleteCount);\n const operations = (0, operation_1.getInsertionOperations)(path, nodes, (0, operation_1.getRemovalOperations)(pathsToRemove));\n const transformedPaths = track\n ? (0, operation_1.transformPathsByOperations)(track, operations)\n : [];\n return {\n node: (0, operation_1.applyOperations)(node, operations, options),\n paths: transformedPaths,\n };\n}\nfunction getPathsToRemove(path, deleteCount) {\n let pathsToRemove = [];\n let parentPath = path.slice(0, -1);\n let index = path[path.length - 1];\n for (let i = 0; i < deleteCount; i++) {\n pathsToRemove.push(parentPath.concat(index + i));\n }\n return pathsToRemove;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defineTree = defineTree;\nconst access_1 = require(\"./access\");\nconst diagram_1 = require(\"./diagram\");\nconst entries_1 = require(\"./entries\");\nconst find_1 = require(\"./find\");\nconst flat_1 = require(\"./flat\");\nconst insert_1 = require(\"./insert\");\nconst map_1 = require(\"./map\");\nconst move_1 = require(\"./move\");\nconst reduce_1 = require(\"./reduce\");\nconst remove_1 = require(\"./remove\");\nconst replace_1 = require(\"./replace\");\nconst splice_1 = require(\"./splice\");\nconst visit_1 = require(\"./visit\");\nclass Tree {\n constructor(getChildrenOrBaseOptions, appliedOptions) {\n this.appliedOptions = appliedOptions;\n /**\n * Returns the node's children.\n *\n * This is the same as the `getChildren` option passed to `defineTree`, included here for convenience.\n */\n this.getChildren = (node, indexPath, context) => {\n return this._getChildren(node, indexPath, context);\n };\n this.mergeOptions = (options) => (Object.assign(Object.assign(Object.assign({}, this.baseOptions), this.appliedOptions), options));\n this.withOptions = (newOptions) => new Tree(this.baseOptions, Object.assign(Object.assign({}, this.appliedOptions), newOptions));\n /**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\n this.access = (node, indexPath) => (0, access_1.access)(node, indexPath, this.mergeOptions({}));\n /**\n * Returns an array of each node in an `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\n this.accessPath = (node, indexPath) => (0, access_1.accessPath)(node, indexPath, this.mergeOptions({}));\n /**\n * Returns a node by its `IndexPath`.\n *\n * The first node is implicitly included in the `IndexPath` (i.e. no need to pass a `0` first in every `IndexPath`).\n */\n this.get = (node, indexPath) => (0, access_1.get)(node, indexPath, this.mergeOptions({}));\n /**\n * Returns the ancestors of a node.\n */\n this.ancestors = (node, indexPath) => (0, access_1.ancestors)(node, indexPath, this.mergeOptions({}));\n /**\n * Generate a diagram of the tree, as a string.\n */\n this.diagram = (node, options) => typeof options === 'function'\n ? (0, diagram_1.diagram)(node, this.mergeOptions({ getLabel: options }))\n : (0, diagram_1.diagram)(node, this.mergeOptions(options));\n this.find = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.find)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.find)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n this.findAll = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.findAll)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.findAll)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n this.findPath = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.findPath)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.findPath)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n this.findAllPaths = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.findAllPaths)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.findAllPaths)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n /**\n * Returns an array of every [IndexPath, Node] pair in the tree.\n */\n this.entries = (node) => (0, entries_1.entries)(node, this.mergeOptions({}));\n /**\n * Returns an array containing the root node and all of its descendants.\n *\n * This is analogous to `Array.prototype.flat` for flattening arrays.\n */\n this.flat = (node) => (0, flat_1.flat)(node, this.mergeOptions({}));\n this.reduce = (node, nextResult, initialResult) => (0, reduce_1.reduce)(node, this.mergeOptions({ nextResult, initialResult }));\n this.map = (node, transform) => (0, map_1.map)(node, this.mergeOptions({ transform }));\n this.flatMap = (node, transform) => (0, map_1.flatMap)(node, this.mergeOptions({ transform }));\n this.visit = (node, onEnterOrOptions) => typeof onEnterOrOptions === 'function'\n ? (0, visit_1.visit)(node, this.mergeOptions({ onEnter: onEnterOrOptions }))\n : (0, visit_1.visit)(node, this.mergeOptions(Object.assign({}, onEnterOrOptions)));\n // --- Mutations ---\n /**\n * Insert nodes at a given `IndexPath`.\n */\n this.insert = (node, options) => (0, insert_1.insert)(node, this.mergeOptions(options));\n /**\n * Insert nodes at a given `IndexPath`.\n */\n this.insertWithPathTracking = (node, options) => (0, insert_1.insertWithPathTracking)(node, this.mergeOptions(options));\n /**\n * Remove nodes at the given `IndexPath`s.\n */\n this.remove = (node, options) => (0, remove_1.remove)(node, this.mergeOptions(options));\n /**\n * Remove nodes at the given `IndexPath`s.\n */\n this.removeWithPathTracking = (node, options) => (0, remove_1.removeWithPathTracking)(node, this.mergeOptions(options));\n /**\n * Move nodes from one `IndexPath` to another.\n */\n this.move = (node, options) => (0, move_1.move)(node, this.mergeOptions(options));\n /**\n * Replace nodes at the given `IndexPath`s with another node.\n */\n this.splice = (node, options) => (0, splice_1.splice)(node, this.mergeOptions(options));\n /**\n * Replace nodes at the given `IndexPath`s with another node.\n */\n this.spliceWithPathTracking = (node, options) => (0, splice_1.spliceWithPathTracking)(node, this.mergeOptions(options));\n /**\n * Replace the node at the given `IndexPath` with another\n */\n this.replace = (node, options) => (0, replace_1.replace)(node, this.mergeOptions(options));\n this.baseOptions =\n typeof getChildrenOrBaseOptions === 'function'\n ? { getChildren: getChildrenOrBaseOptions }\n : getChildrenOrBaseOptions;\n this._getChildren = this.baseOptions.getChildren;\n }\n}\nfunction defineTree(getChildren) {\n return new Tree(getChildren, {});\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.withOptions = void 0;\nconst defineTree_1 = require(\"./defineTree\");\n/**\n * Return every tree utility function with options partially applied.\n *\n * @deprecated Use `defineTree` instead\n */\nexports.withOptions = defineTree_1.defineTree;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./access\"), exports);\n__exportStar(require(\"./ancestors\"), exports);\n__exportStar(require(\"./defineTree\"), exports);\n__exportStar(require(\"./diagram\"), exports);\n__exportStar(require(\"./entries\"), exports);\n__exportStar(require(\"./find\"), exports);\n__exportStar(require(\"./flat\"), exports);\n__exportStar(require(\"./indexPath\"), exports);\n__exportStar(require(\"./insert\"), exports);\n__exportStar(require(\"./map\"), exports);\n__exportStar(require(\"./move\"), exports);\n__exportStar(require(\"./options\"), exports);\n__exportStar(require(\"./reduce\"), exports);\n__exportStar(require(\"./remove\"), exports);\n__exportStar(require(\"./replace\"), exports);\n__exportStar(require(\"./sort\"), exports);\n__exportStar(require(\"./splice\"), exports);\n__exportStar(require(\"./transformPath\"), exports);\n__exportStar(require(\"./visit\"), exports);\n__exportStar(require(\"./withOptions\"), exports);\n","/* eslint-disable @shopify/prefer-early-return */\nimport {\n ActionMenu,\n CollectionProps,\n CollectionRef,\n CollectionRenderActionProps,\n CollectionThumbnailProps,\n CollectionViewType,\n createSectionedMenu,\n cssVars,\n FileExplorerCollection,\n FileExplorerDetail,\n FileExplorerEmptyState,\n FileExplorerLayout,\n FileExplorerUploadButton,\n formatByteSize,\n ListView,\n MediaThumbnail,\n MediaThumbnailProps,\n RelativeDropPosition,\n useOpenConfirmationDialog,\n} from \"@noya-app/noya-designsystem\";\nimport {\n DownloadIcon,\n FolderIcon,\n InputIcon,\n OpenInNewWindowIcon,\n ResetIcon,\n TrashIcon,\n UpdateIcon,\n UploadIcon,\n} from \"@noya-app/noya-icons\";\nimport {\n MultiplayerPatchMetadata,\n useAsset,\n useAssetManager,\n useAssets,\n} from \"@noya-app/noya-multiplayer-react\";\nimport {\n AssetMediaItem,\n FileMediaItem,\n MediaItem,\n MediaMap,\n} from \"@noya-app/noya-schemas\";\nimport { groupBy, isDeepEqual } from \"@noya-app/noya-utils\";\nimport {\n downloadUrl,\n memoGeneric,\n useControlledOrUncontrolled,\n} from \"@noya-app/react-utils\";\nimport { fileOpen } from \"browser-fs-access\";\nimport {\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n createMediaAsset,\n createMediaFile,\n createMediaFolder,\n createMediaItemTree,\n MediaItemTree,\n PLACEHOLDER_ITEM_NAME,\n rootMediaItem,\n rootMediaItemName,\n} from \"./utils/mediaItemTree\";\n\nimport { path } from \"imfs\";\nimport React from \"react\";\nimport {\n mediaDeleteMediaItems,\n MediaExpandedMap,\n MediaFileKindFilter,\n mediaGetDepthMap,\n mediaGetVisibleItems,\n mediaMoveMediaInsideFolder,\n mediaMoveUpAFolder,\n mediaRenameMediaItemAndDescendantPaths,\n mediaUpdateExpandedMap,\n mediaValidateMediaItemRename,\n} from \"./utils/files\";\n\nconst extensionToContentType = {\n svg: \"image/svg+xml\",\n png: \"image/png\",\n jpeg: \"image/jpeg\",\n} as const;\n\nfunction encodeFileContentForThumbnail(\n pathProp: string,\n item: FileMediaItem\n): { contentType: string; url?: string } | undefined {\n const extension = path.extname(pathProp).slice(1);\n const contentType =\n extensionToContentType[extension as keyof typeof extensionToContentType];\n\n if (contentType) {\n if (item.encoding === \"base64\") {\n return {\n contentType,\n url: `data:${contentType};base64,${item.content}`,\n };\n } else {\n try {\n return {\n contentType,\n url: `data:${contentType},${encodeURIComponent(item.content)}`,\n };\n } catch (error) {\n console.warn(\"Failed to encode content:\", error);\n return { contentType };\n }\n }\n }\n\n return undefined;\n}\n\nconst MediaThumbnailInternal = memoGeneric(\n ({\n item,\n selected,\n size,\n path: pathProp,\n renderThumbnailIcon,\n }: CollectionThumbnailProps<MediaItem> & {\n path?: string;\n renderThumbnailIcon?: MediaThumbnailProps[\"renderThumbnailIcon\"];\n }) => {\n const asset = useAsset(item.kind === \"asset\" ? item.assetId : undefined);\n const isRoot = item.id === rootMediaItem.id;\n const isFolder = item.kind === \"folder\";\n const isFile = item.kind === \"file\";\n\n let contentType: string | undefined;\n let url: string | undefined;\n let width: number | undefined;\n let height: number | undefined;\n\n if (asset) {\n contentType = asset.contentType;\n url = asset.url;\n width = asset.width ?? undefined;\n height = asset.height ?? undefined;\n } else if (isFile && pathProp) {\n const encoded = encodeFileContentForThumbnail(pathProp, item);\n\n if (encoded) {\n contentType = encoded.contentType;\n url = encoded.url;\n }\n }\n\n const fileName = pathProp ? path.basename(pathProp) : undefined;\n const dimensions = width && height ? { width, height } : undefined;\n\n return (\n <MediaThumbnail\n contentType={contentType}\n iconName={isRoot ? \"HomeIcon\" : isFolder ? \"FolderIcon\" : undefined}\n url={url}\n selected={selected}\n size={size}\n fileName={fileName}\n renderThumbnailIcon={renderThumbnailIcon}\n dimensions={dimensions}\n />\n );\n }\n);\n\ntype MenuAction =\n | \"preview\"\n | \"download\"\n | \"upload\"\n | \"rename\"\n | \"replace\"\n | \"delete\"\n | \"move\"\n | \"addFolder\";\n\nexport type MediaCollectionRef = {\n upload: (selectedId: string) => void;\n delete: (selectedIds: string[]) => void;\n download: (selectedItems: MediaItem[]) => void;\n rename: (selectedItemId: string) => void;\n addFolder: (currentFolderId: string) => void;\n addFile: (currentFolderId?: string) => void;\n moveUpAFolder: (selectedIds: string[]) => void;\n replace: (selectedItem: MediaItem) => void;\n preview: (selectedItems: MediaItem[]) => void;\n getItemAtIndex: (index: number) => MediaItem | undefined;\n};\n\ntype MediaCollectionProps = {\n onSelectionChange?: (\n selectedIds: string[],\n event?: ListView.ClickInfo\n ) => void;\n selectedIds?: string[];\n media: MediaMap;\n setMedia?: (\n metadata: Partial<MultiplayerPatchMetadata>,\n media: MediaMap\n ) => void;\n /** @default false */\n readOnly?: boolean;\n /** @default \"list\" */\n viewType?: CollectionViewType;\n /**\n * Whether to show assets or directories or all media items\n *\n * @default \"all\"\n * */\n fileKindFilter?: MediaFileKindFilter;\n /**\n * Whether to show the root item\n *\n * @default false\n * */\n showRootItem?: boolean;\n /** Whether to expand all directories by default */\n initialExpanded?: MediaExpandedMap;\n /**\n * Callback for when an item is double-clicked\n */\n onDoubleClickItem?: (mediaItemId: string) => void;\n /**\n * If provided, only show items that are descendants of this folder\n */\n rootItemId?: string;\n title?: ReactNode;\n right?: ReactNode;\n className?: string;\n showUploadButton?: boolean;\n /**\n * If true, show all descendants of all directories within a collection\n * @default true\n * */\n showAllDescendants?: boolean;\n renderAction?: Exclude<\n CollectionProps<MediaItem, MenuAction>[\"renderAction\"],\n \"menu\"\n >;\n /** @default false */\n sortable?: boolean;\n renderThumbnailIcon?: MediaThumbnailProps[\"renderThumbnailIcon\"];\n onDidDeleteItems?: (items: [string, MediaItem][]) => void;\n onAssetsUploaded?: (mediaMap: Record<string, AssetMediaItem>) => void;\n} & Pick<\n CollectionProps<MediaItem, MenuAction>,\n | \"sortableId\"\n | \"size\"\n | \"expandable\"\n | \"renamable\"\n | \"scrollable\"\n | \"renderEmptyState\"\n | \"sharedDragProps\"\n | \"onClickItem\"\n>;\n\nexport const MediaCollection = memo(\n forwardRef<MediaCollectionRef, MediaCollectionProps>(function MediaCollection(\n {\n sortableId,\n onSelectionChange,\n selectedIds: selectedIdsProp,\n media,\n setMedia: setMediaProp,\n readOnly = false,\n viewType = \"list\",\n fileKindFilter = \"all\",\n showRootItem = false,\n initialExpanded,\n expandable = true,\n renamable = true,\n onDoubleClickItem,\n rootItemId = rootMediaItem.id,\n title,\n size = \"medium\",\n right,\n renderAction: renderActionProp,\n className,\n showUploadButton = true,\n showAllDescendants = true,\n scrollable = false,\n sortable = false,\n renderEmptyState,\n sharedDragProps,\n onClickItem,\n renderThumbnailIcon,\n onDidDeleteItems,\n onAssetsUploaded,\n },\n ref\n ) {\n const setMedia = useCallback(\n (...args: Parameters<Extract<typeof setMediaProp, Function>>) => {\n setMediaProp?.(...args);\n },\n [setMediaProp]\n );\n const tree = useMemo(() => createMediaItemTree(media), [media]);\n const [tempItem, setTempItem] = useState<[string, MediaItem] | undefined>(\n undefined\n );\n const mediaWithTempItem = useMemo(\n () => ({\n ...media,\n ...(tempItem ? { [tempItem[0]]: tempItem[1] } : {}),\n }),\n [media, tempItem]\n );\n const treeWithTempItem = useMemo(\n () => createMediaItemTree(mediaWithTempItem),\n [mediaWithTempItem]\n );\n const temp = useMemo(\n () => ({\n media: mediaWithTempItem,\n tree: treeWithTempItem,\n }),\n [mediaWithTempItem, treeWithTempItem]\n );\n const [selectedIds, setSelectedIds] = useControlledOrUncontrolled<string[]>(\n {\n defaultValue: [],\n value: selectedIdsProp,\n onChange: onSelectionChange,\n }\n );\n const assetManager = useAssetManager();\n const assets = useAssets();\n const [expandedMap, setExpandedMap] = useState<MediaExpandedMap>({});\n const visibleItems = useMemo(\n () =>\n mediaGetVisibleItems({\n expandedMap,\n fileKindFilter: fileKindFilter,\n rootItemId,\n tree: treeWithTempItem,\n showAllDescendants,\n showRootItem,\n }),\n [\n expandedMap,\n fileKindFilter,\n rootItemId,\n treeWithTempItem,\n showAllDescendants,\n showRootItem,\n ]\n );\n const depthMap = useMemo(\n () =>\n mediaGetDepthMap(rootMediaItem, treeWithTempItem, showAllDescendants),\n [treeWithTempItem, showAllDescendants]\n );\n const collectionRef = useRef<CollectionRef>(null);\n const selectedMediaItems = useMemo(\n () =>\n treeWithTempItem.mediaItemsWithRoot.filter((item) =>\n selectedIds.includes(item.id)\n ),\n [treeWithTempItem, selectedIds]\n );\n\n const groupedItems = groupBy(selectedMediaItems, (item) => item.kind);\n const selectedAssetItems = groupedItems.asset ?? [];\n const selectedFolderItems = groupedItems.folder ?? [];\n\n const singleItemSelected = selectedMediaItems.length === 1;\n const onlyAssetsSelected =\n selectedAssetItems.length > 0 &&\n selectedAssetItems.length === selectedMediaItems.length;\n const onlyFoldersSelected =\n selectedFolderItems.length > 0 &&\n selectedFolderItems.length === selectedMediaItems.length;\n const onlySingleFolderSelected =\n onlyFoldersSelected && selectedFolderItems.length === 1;\n const onlySingleAssetSelected =\n onlyAssetsSelected && selectedAssetItems.length === 1;\n const rootSelected = selectedIds.includes(rootMediaItem.id);\n const sameParentSelected = selectedMediaItems.every((item) => {\n const itemPath = tree.idToPathMap.get(item.id);\n const firstSelectedPath = tree.idToPathMap.get(selectedIds[0]);\n if (!itemPath || !firstSelectedPath) return false;\n return itemPath.startsWith(path.dirname(firstSelectedPath));\n });\n\n useEffect(() => {\n if (initialExpanded) {\n setExpandedMap(initialExpanded);\n }\n }, [initialExpanded]);\n\n const getExpanded = useCallback(\n (item: MediaItem) => {\n if (!expandable) return undefined;\n if (item.kind !== \"folder\") return undefined;\n if (item.id === rootMediaItem.id) return undefined;\n return expandedMap[item.id] ?? false;\n },\n [expandedMap, expandable]\n );\n\n const openConfirmationDialog = useOpenConfirmationDialog();\n\n const handleDelete = useCallback(\n async (selectedIds: string[]) => {\n const ok = await openConfirmationDialog({\n title: \"Delete items\",\n description:\n \"Are you sure you want to delete these items? This action cannot be undone.\",\n });\n\n if (!ok) return;\n\n const deletedItems = Object.entries(media).flatMap(\n ([path, item]): [string, MediaItem][] => {\n if (selectedIds.includes(item.id)) {\n return [[path, item]];\n }\n return [];\n }\n );\n\n const newMedia = mediaDeleteMediaItems({\n selectedIds,\n media,\n tree,\n });\n\n setSelectedIds([rootMediaItem.id]);\n setMedia({ name: \"Delete items\", timestamp: Date.now() }, newMedia);\n\n onDidDeleteItems?.(deletedItems);\n },\n [\n media,\n setMedia,\n setSelectedIds,\n tree,\n onDidDeleteItems,\n openConfirmationDialog,\n ]\n );\n\n const onRename = useCallback(\n (selectedItem: MediaItem, newName: string) => {\n if (!renamable) return;\n const selectedItemPath = treeWithTempItem.idToPathMap.get(\n selectedItem.id\n );\n if (!selectedItemPath) return;\n const renameIsValid = mediaValidateMediaItemRename({\n basename: newName,\n selectedItemPath,\n media: temp.media,\n });\n if (!renameIsValid) {\n setTempItem(undefined);\n return;\n }\n const mediaWithRenamedDescendantPaths =\n mediaRenameMediaItemAndDescendantPaths({\n newName,\n selectedItemPath,\n media: temp.media,\n tree: temp.tree,\n });\n setMedia(\n { name: \"Rename media item\", timestamp: Date.now() },\n mediaWithRenamedDescendantPaths\n );\n setTempItem(undefined);\n },\n [renamable, setMedia, temp.media, temp.tree, treeWithTempItem.idToPathMap]\n );\n\n const handleAddFolder = useCallback(\n (currentFolderId: string) => {\n const newFolder = createMediaFolder();\n const currentFolderPath = tree.idToPathMap.get(currentFolderId);\n if (!currentFolderPath) return;\n setTempItem([\n path.join(currentFolderPath, PLACEHOLDER_ITEM_NAME),\n newFolder,\n ]);\n setTimeout(() => {\n collectionRef.current?.editName(newFolder.id);\n }, 50);\n },\n [tree]\n );\n\n const handleAddFile = useCallback(\n (currentFolderId?: string) => {\n const newFile = createMediaFile({\n content: \"\",\n encoding: \"utf-8\",\n });\n const currentFolderPath = tree.idToPathMap.get(\n currentFolderId ?? rootMediaItem.id\n );\n if (!currentFolderPath) return;\n setTempItem([\n path.join(currentFolderPath, PLACEHOLDER_ITEM_NAME),\n newFile,\n ]);\n setTimeout(() => {\n collectionRef.current?.editName(newFile.id);\n }, 50);\n },\n [tree.idToPathMap]\n );\n\n const handleMoveUpAFolder = useCallback(\n (selectedIds: string[]) => {\n const newMedia = mediaMoveUpAFolder({\n tree,\n media,\n selectedIds,\n });\n if (!newMedia) return;\n setMedia({ name: \"Move items\", timestamp: Date.now() }, newMedia);\n },\n [media, tree, setMedia]\n );\n\n const [isUploading, setIsUploading] = useState(false);\n\n const handleUpload = useCallback(\n async (selectedId: string) => {\n try {\n const files = await fileOpen({ multiple: true });\n\n if (!files || !Array.isArray(files) || files.length === 0) return;\n\n const parentPath = tree.idToPathMap.get(selectedId);\n if (!parentPath) return;\n\n // Create assets in parallel for better performance\n const uploadPromises = files.map(async (file) => {\n const asset = await assetManager.create(file);\n const assetPath = path.join(parentPath, path.basename(file.name));\n return {\n assetPath,\n asset: createMediaAsset({ assetId: asset.id }),\n };\n });\n\n setIsUploading(true);\n\n const uploadedAssets = await Promise.all(uploadPromises);\n const newMediaMap = Object.fromEntries(\n uploadedAssets.map(({ assetPath, asset }) => [assetPath, asset])\n );\n\n setMedia(\n { name: \"Add media items\", timestamp: Date.now() },\n {\n ...media,\n ...newMediaMap,\n }\n );\n\n onAssetsUploaded?.(newMediaMap);\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n // Ignore user-cancelled file picker\n } else {\n console.error(\"Failed to upload files:\", error);\n }\n } finally {\n setIsUploading(false);\n }\n },\n [tree.idToPathMap, setMedia, media, assetManager, onAssetsUploaded]\n );\n\n const handleDownload = useCallback(\n async (selectedItems: MediaItem[]) => {\n const downloadPromises = selectedItems\n .filter((item) => item.kind === \"asset\")\n .map(async (item) => {\n const asset = assets.find((a) => a.id === item.assetId);\n if (!asset?.url) return;\n return downloadUrl(asset.url, tree.getNameForId(item.id));\n });\n\n await Promise.all(downloadPromises);\n },\n [assets, tree]\n );\n\n const handlePreview = useCallback(\n async (selectedItems: MediaItem[]) => {\n const previewPromises = selectedItems\n .filter((item) => item.kind === \"asset\")\n .map(async (item) => {\n const asset = assets.find((a) => a.id === item.assetId);\n if (!asset?.url) return;\n return window?.open(asset.url, \"_blank\");\n });\n\n await Promise.all(previewPromises);\n },\n [assets]\n );\n\n const handleReplace = useCallback(\n async (selectedItem: MediaItem) => {\n try {\n const file = await fileOpen();\n if (!file) return;\n // Create the asset\n const asset = await assetManager.create(file);\n const oldFile = selectedItem;\n const oldFilePath = tree.idToPathMap.get(oldFile.id);\n if (!oldFilePath || oldFile.kind !== \"asset\") return;\n setMedia(\n { name: \"Replace media file\", timestamp: Date.now() },\n {\n ...media,\n [oldFilePath]: createMediaAsset({\n ...oldFile,\n assetId: asset.id,\n }),\n }\n );\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n // Ignore user-cancelled file picker\n } else {\n console.error(\"Failed to upload files:\", error);\n }\n }\n },\n [media, setMedia, assetManager, tree]\n );\n\n const handleRename = useCallback(\n (selectedItemId: string) => {\n collectionRef.current?.editName(selectedItemId);\n },\n [collectionRef]\n );\n\n const handleMoveMediaInsideFolder = useCallback(\n (sourceItem: MediaItem, targetItem: MediaItem) => {\n const newMedia = mediaMoveMediaInsideFolder({\n sourceItemIds: [sourceItem.id],\n targetItemId: targetItem.id,\n media,\n tree,\n });\n\n setMedia(\n {\n name: \"Move media file inside folder\",\n timestamp: Date.now(),\n },\n newMedia\n );\n },\n [media, setMedia, tree]\n );\n\n const assetContextMenuItems = useMemo(() => {\n return createSectionedMenu<MenuAction>(\n [\n !rootSelected &&\n singleItemSelected && {\n title: \"Rename\",\n value: \"rename\",\n icon: <InputIcon />,\n },\n onlySingleAssetSelected && {\n title: \"Replace\",\n value: \"replace\",\n icon: <UpdateIcon />,\n },\n !rootSelected && {\n title: \"Delete\",\n value: \"delete\",\n icon: <TrashIcon />,\n },\n ],\n [\n onlySingleFolderSelected && {\n title: \"Upload Files\",\n value: \"upload\",\n icon: <UploadIcon />,\n },\n onlySingleFolderSelected && {\n title: \"Add Folder\",\n value: \"addFolder\",\n icon: <FolderIcon />,\n },\n onlyAssetsSelected &&\n tree.mediaItemsWithRoot.length > 0 && {\n title: \"Download\",\n value: \"download\",\n icon: <DownloadIcon />,\n },\n onlySingleAssetSelected && {\n title: \"Preview\",\n value: \"preview\",\n icon: <OpenInNewWindowIcon />,\n },\n ],\n [\n !rootSelected &&\n sameParentSelected && {\n title: \"Move up a folder\",\n value: \"move\",\n icon: <ResetIcon />,\n },\n ]\n );\n }, [\n rootSelected,\n singleItemSelected,\n onlySingleAssetSelected,\n onlySingleFolderSelected,\n onlyAssetsSelected,\n tree.mediaItemsWithRoot.length,\n sameParentSelected,\n ]);\n\n const handleMenuAction = useCallback(\n async (action: MenuAction, selectedItems: MediaItem[]) => {\n if (selectedItems.length === 0) return;\n\n switch (action) {\n case \"rename\":\n handleRename(selectedItems[0].id);\n return;\n case \"delete\":\n handleDelete(selectedIds);\n return;\n case \"replace\":\n handleReplace(selectedItems[0]);\n return;\n case \"upload\":\n handleUpload(selectedItems[0].id);\n return;\n case \"addFolder\":\n handleAddFolder(selectedItems[0].id);\n return;\n case \"preview\":\n handlePreview(selectedItems);\n return;\n case \"download\":\n handleDownload(selectedItems);\n return;\n case \"move\":\n handleMoveUpAFolder(selectedIds);\n return;\n }\n },\n [\n handleRename,\n handleDelete,\n selectedIds,\n handleReplace,\n handleUpload,\n handleAddFolder,\n handlePreview,\n handleDownload,\n handleMoveUpAFolder,\n ]\n );\n\n const handleSetExpanded = useCallback(\n (item: MediaItem, expanded: boolean) => {\n setExpandedMap((prev) =>\n mediaUpdateExpandedMap({\n item,\n expanded,\n expandable,\n expandedMap: prev,\n tree,\n })\n );\n },\n [expandable, tree]\n );\n\n const renderAction = useMemo(() => {\n if (renderActionProp) return renderActionProp;\n return ({\n selected,\n onOpenChange,\n }: CollectionRenderActionProps<MediaItem>) => (\n <ActionMenu\n menuItems={assetContextMenuItems}\n onSelect={(action) => handleMenuAction(action, selectedMediaItems)}\n selected={selected}\n onOpenChange={onOpenChange}\n variant={viewType === \"grid\" ? \"normal\" : \"bare\"}\n style={{\n backgroundColor: selected\n ? cssVars.colors.selectedListItemBackground\n : \"transparent\",\n color: selected ? cssVars.colors.selectedListItemText : undefined,\n }}\n />\n );\n }, [\n assetContextMenuItems,\n handleMenuAction,\n renderActionProp,\n selectedMediaItems,\n viewType,\n ]);\n\n useImperativeHandle(ref, () => ({\n upload: (selectedId: string) => handleUpload(selectedId),\n delete: handleDelete,\n download: handleDownload,\n rename: handleRename,\n addFolder: handleAddFolder,\n addFile: handleAddFile,\n moveUpAFolder: handleMoveUpAFolder,\n replace: handleReplace,\n preview: handlePreview,\n moveMediaInsideFolder: handleMoveMediaInsideFolder,\n getItemAtIndex: (index) => visibleItems[index],\n }));\n\n return (\n <>\n <FileExplorerLayout\n title={title ?? rootMediaItemName}\n right={\n !readOnly && (\n <FileExplorerUploadButton\n showUploadButton={showUploadButton}\n onUpload={() => handleUpload(rootMediaItem.id)}\n isUploading={isUploading}\n >\n {right}\n </FileExplorerUploadButton>\n )\n }\n className={className}\n >\n <FileExplorerCollection<MediaItem, MenuAction>\n ref={collectionRef}\n sortableId={sortableId}\n scrollable={scrollable}\n sharedDragProps={sharedDragProps}\n items={visibleItems}\n viewType={viewType}\n size={size}\n getId={(file) => file.id}\n getName={(file) => {\n if (file.id === tempItem?.[1].id) {\n return \"\";\n }\n return treeWithTempItem.getNameForId(file.id);\n }}\n expandable={expandable}\n sortable={sortable}\n getPlaceholder={(item) => {\n switch (item.kind) {\n case \"folder\":\n return \"Enter folder name\";\n case \"asset\":\n case \"file\":\n case \"noyaFile\":\n return \"Enter file name\";\n }\n }}\n getExpanded={getExpanded}\n setExpanded={handleSetExpanded}\n getRenamable={(item) => {\n if (item.id === rootMediaItem.id) return false;\n return true;\n }}\n getDepth={(item) => depthMap[item.id]}\n menuItems={assetContextMenuItems}\n onSelectMenuItem={handleMenuAction}\n onSelectionChange={setSelectedIds}\n onClickItem={onClickItem}\n onDoubleClickItem={onDoubleClickItem}\n onRename={onRename}\n renamable={renamable}\n selectedIds={selectedIds}\n renderThumbnail={(props) => (\n <MediaThumbnailInternal\n {...props}\n path={tree.idToPathMap.get(props.item.id)}\n renderThumbnailIcon={renderThumbnailIcon}\n />\n )}\n renderAction={renderAction}\n renderDetail={(file, selected) => {\n if (file.kind !== \"asset\") return null;\n const asset = assets.find((a) => a.id === file.assetId);\n if (!asset) return null;\n return (\n <FileExplorerDetail selected={selected} size={size}>\n {formatByteSize(asset.size)}\n </FileExplorerDetail>\n );\n }}\n renderEmptyState={() =>\n renderEmptyState?.() ?? <FileExplorerEmptyState />\n }\n itemRoleDescription=\"clickable file item\"\n getDropTargetParentIndex={(overIndex) => {\n const item = visibleItems[overIndex];\n const parentIndex = visibleItems.findIndex(\n (i) => i.id === tree.getParentIdForId(item.id)\n );\n return parentIndex === -1 ? undefined : parentIndex;\n }}\n acceptsDrop={({\n sourceIndex,\n targetIndex,\n position,\n sourceListId,\n targetListId,\n }) => {\n if (sourceListId !== targetListId) {\n return false;\n }\n\n if (sourceListId !== sortableId || targetListId !== sortableId) {\n return false;\n }\n\n const sourceItem = visibleItems[sourceIndex];\n const targetItem = visibleItems[targetIndex];\n\n return acceptsMediaItemDrop({\n position,\n sourceItem,\n targetItem,\n tree,\n });\n }}\n onMoveItem={({\n sourceListId,\n sourceIndex,\n targetListId,\n targetIndex,\n position,\n }) => {\n if (sourceListId !== sortableId || targetListId !== sortableId) {\n return;\n }\n\n const sourceItem = visibleItems[sourceIndex];\n const targetItem = visibleItems[targetIndex];\n if (position === \"inside\") {\n handleMoveMediaInsideFolder(sourceItem, targetItem);\n }\n }}\n />\n </FileExplorerLayout>\n </>\n );\n })\n);\n\nexport function acceptsMediaItemDrop(parameters: {\n position: RelativeDropPosition;\n sourceItem: MediaItem;\n targetItem: MediaItem;\n tree: MediaItemTree;\n}) {\n const { position, sourceItem, targetItem, tree } = parameters;\n\n if (position !== \"inside\" || targetItem.kind === \"asset\") {\n return false;\n }\n const sourcePath = tree.findPath(\n rootMediaItem,\n (item) => item.id === sourceItem.id\n );\n const targetPath = tree.findPath(\n rootMediaItem,\n (item) => item.id === targetItem.id\n );\n\n // Don't allow dragging into a descendant\n if (!sourcePath || !targetPath) return false;\n\n if (isDeepEqual(sourcePath, targetPath.slice(0, sourcePath.length))) {\n return false;\n }\n\n return true;\n}\n","import {\n AssetMediaItem,\n FileMediaItem,\n FolderMediaItem,\n MediaItem,\n MediaMap,\n} from \"@noya-app/noya-schemas\";\nimport { uuid } from \"@noya-app/noya-utils\";\nimport { path } from \"imfs\";\nimport { defineTree } from \"tree-visit\";\n\nexport const createMediaFolder = (\n folder?: Omit<FolderMediaItem, \"kind\" | \"id\">\n): FolderMediaItem => {\n return {\n id: uuid(),\n kind: \"folder\",\n ...folder,\n };\n};\n\nexport const createMediaAsset = (\n asset: Omit<AssetMediaItem, \"kind\" | \"id\">\n): AssetMediaItem => {\n return {\n id: uuid(),\n kind: \"asset\",\n ...asset,\n };\n};\n\nexport const createMediaFile = (\n file: Omit<FileMediaItem, \"kind\" | \"id\">\n): FileMediaItem => {\n return {\n id: uuid(),\n kind: \"file\",\n ...file,\n };\n};\n\nexport const createMediaItem = (item: MediaItem) => {\n return {\n ...item,\n };\n};\n\nexport const rootMediaItem: MediaItem = {\n id: \"root\",\n kind: \"folder\",\n};\n\nexport const rootMediaItemPath = \".\";\nexport const rootMediaItemName = \"All Files\";\nexport const PLACEHOLDER_ITEM_NAME = \"placeholder\";\n\nexport const createMediaItemTree = (mediaMap: MediaMap) => {\n const sortedMediaMap = Object.fromEntries(\n Object.entries(mediaMap).sort((a, b) => a[0].localeCompare(b[0]))\n );\n const parentToChildrenMap = new Map<string, MediaItem[]>();\n const idToPathMap = new Map<string, string>();\n idToPathMap.set(rootMediaItem.id, rootMediaItemPath);\n\n for (const [itemPath, item] of Object.entries(sortedMediaMap)) {\n const parentPath = path.dirname(itemPath);\n const children = parentToChildrenMap.get(parentPath) ?? [];\n children.push(item);\n parentToChildrenMap.set(parentPath, children);\n idToPathMap.set(item.id, itemPath);\n }\n\n const tree = defineTree<MediaItem>({\n getChildren: (item) => {\n const itemPath =\n item === rootMediaItem ? rootMediaItemPath : idToPathMap.get(item.id);\n if (!itemPath) return [];\n return parentToChildrenMap.get(itemPath) ?? [];\n },\n onDetectCycle: \"skip\",\n getIdentifier: (item) => item.id,\n });\n\n const result = tree.withOptions({\n getLabel: (item) => idToPathMap.get(item.id) ?? \"\",\n });\n\n const mediaItemsWithRoot = [...Object.values(sortedMediaMap), rootMediaItem];\n const getNameForId = (id: string) =>\n id === rootMediaItem.id\n ? rootMediaItemName\n : path.basename(idToPathMap.get(id) ?? \"\");\n const getParentIdForId = (id: string) => {\n const itemPath = idToPathMap.get(id);\n if (!itemPath) return;\n const parentPath = path.dirname(itemPath);\n return idToPathMap.get(parentPath);\n };\n\n return {\n ...result,\n idToPathMap,\n parentToChildrenMap,\n mediaItemsWithRoot,\n getParentIdForId,\n getNameForId,\n };\n};\n\nexport type MediaItemTree = ReturnType<typeof createMediaItemTree>;\n","import { MediaItem, MediaMap } from \"@noya-app/noya-schemas\";\nimport { path } from \"imfs\";\nimport { ancestorPaths } from \"tree-visit\";\nimport {\n createMediaItemTree,\n MediaItemTree,\n rootMediaItem,\n} from \"./mediaItemTree\";\nimport { basenameValidator } from \"./resourceUtils\";\n\nexport type MediaFileKindFilter = \"assets\" | \"directories\" | \"all\";\nexport type MediaExpandedMap = Record<string, boolean | undefined>;\n\nexport type MediaGetVisibleItemsOptions = {\n expandedMap: MediaExpandedMap;\n fileKindFilter: MediaFileKindFilter;\n rootItemId: string;\n tree: MediaItemTree;\n showAllDescendants: boolean;\n showRootItem: boolean;\n};\n\nexport const mediaGetVisibleItems = ({\n expandedMap,\n fileKindFilter,\n rootItemId,\n tree,\n showAllDescendants,\n showRootItem,\n}: MediaGetVisibleItemsOptions) => {\n const filteredItems: MediaItem[] = [];\n const relativeRootItem =\n tree.find(rootMediaItem, (item) => item.id === rootItemId) ?? rootMediaItem;\n\n tree.visit(relativeRootItem, (item) => {\n if (relativeRootItem.id === item.id) {\n if (showRootItem) {\n filteredItems.push(item);\n }\n return;\n }\n if (item.kind === \"noyaFile\" && fileKindFilter === \"all\") {\n filteredItems.push(item);\n }\n if (item.kind === \"file\" && fileKindFilter === \"all\") {\n filteredItems.push(item);\n }\n if (\n item.kind === \"asset\" &&\n (fileKindFilter === \"assets\" || fileKindFilter === \"all\")\n ) {\n filteredItems.push(item);\n }\n if (\n item.kind === \"folder\" &&\n (fileKindFilter === \"directories\" || fileKindFilter === \"all\")\n ) {\n filteredItems.push(item);\n }\n if (!expandedMap[item.id] || !showAllDescendants) return \"skip\";\n });\n return filteredItems;\n};\n\nexport const mediaValidateMediaItemRename = ({\n basename,\n selectedItemPath,\n media,\n}: {\n basename: string;\n selectedItemPath: string;\n media: MediaMap;\n}): boolean => {\n if (!basenameValidator(basename)) return false;\n const newItemPath = path.join(path.dirname(selectedItemPath), basename);\n // traverse the tree and check if there is already a path with the new name\n const newPathExists = media[newItemPath];\n if (newPathExists) return false;\n return true;\n};\n\nexport const mediaMovePathsIntoTarget = ({\n media,\n sourceItemPaths,\n targetItemPath,\n tree,\n}: {\n media: MediaMap;\n sourceItemPaths: string[];\n targetItemPath: string;\n tree: MediaItemTree;\n}) => {\n const ancestors = ancestorPaths(\n sourceItemPaths.map((path) => path.split(\"/\"))\n );\n const mediaClone = { ...media };\n for (const ancestor of ancestors) {\n const ancestorPath = ancestor.join(\"/\");\n const ancestorItem = mediaClone[ancestorPath];\n const newAncestorPath = path.join(\n targetItemPath,\n path.basename(ancestorPath)\n );\n if (!ancestorItem) continue;\n const descendantPaths = tree\n .flat(ancestorItem)\n .map((item) => tree.idToPathMap.get(item.id));\n for (const descendantPath of descendantPaths) {\n if (!descendantPath) continue;\n const newDescendantPath = descendantPath.replace(\n ancestorPath,\n newAncestorPath\n );\n const newPathIsValid = mediaValidateMediaItemRename({\n basename: path.basename(descendantPath),\n selectedItemPath: newDescendantPath,\n media,\n });\n if (newPathIsValid) {\n mediaClone[newDescendantPath] = mediaClone[descendantPath];\n delete mediaClone[descendantPath];\n }\n }\n }\n return mediaClone;\n};\n\nexport const mediaMoveUpAFolder = ({\n tree,\n media,\n selectedIds,\n}: {\n tree: MediaItemTree;\n media: MediaMap;\n selectedIds: string[];\n}) => {\n const indexPath = tree.findPath(\n rootMediaItem,\n (item) => item.id === selectedIds[0]\n );\n if (!indexPath) return;\n\n // Get the grandparent folder (where items will be moved to)\n const grandparentFolder = tree.access(\n rootMediaItem,\n indexPath.slice(0, indexPath.length - 2)\n );\n const grandparentFolderPath = tree.idToPathMap.get(grandparentFolder.id);\n if (!grandparentFolderPath) return;\n\n const sourceItemPaths = selectedIds\n .map((id) => tree.idToPathMap.get(id))\n .filter((path): path is string => Boolean(path));\n return mediaMovePathsIntoTarget({\n media,\n targetItemPath: grandparentFolderPath,\n sourceItemPaths,\n tree,\n });\n};\n\nexport const mediaGetDepthMap = (\n item: MediaItem,\n tree: MediaItemTree,\n showAllDescendants: boolean\n): Record<string, number> => {\n const depthMap: Record<string, number> = {};\n tree.visit(item, (item, indexPath) => {\n if (showAllDescendants) {\n depthMap[item.id] = Math.max(indexPath.length - 1, 0);\n } else {\n depthMap[item.id] = 0;\n }\n });\n return depthMap;\n};\n\nexport const mediaUpdateExpandedMap = ({\n item,\n expanded,\n expandable,\n expandedMap,\n tree,\n}: {\n item: MediaItem;\n expanded: boolean;\n expandable: boolean;\n expandedMap: MediaExpandedMap;\n tree: MediaItemTree;\n}): MediaExpandedMap => {\n const newExpandedMap = { ...expandedMap };\n const inner = (item: MediaItem, expanded: boolean) => {\n if (!expandable) return {};\n // Don't allow toggling the fake root\n if (item.id === rootMediaItem.id) return {};\n if (!expanded) {\n // recursively collapse all children\n const children = tree.getChildren(item, []);\n children.forEach((child) => inner(child, false));\n }\n newExpandedMap[item.id] = expanded;\n };\n inner(item, expanded);\n return newExpandedMap;\n};\n\nexport const mediaDeleteMediaItems = ({\n selectedIds,\n media,\n tree,\n}: {\n selectedIds: string[];\n media: MediaMap;\n tree: MediaItemTree;\n}): MediaMap => {\n const itemsToDelete = selectedIds.flatMap((mediaItemId) => {\n const mediaItem = tree.mediaItemsWithRoot.find(\n (item) => item.id === mediaItemId\n );\n if (!mediaItem) return [];\n return tree.flat(mediaItem);\n });\n const itemKeysToDelete = new Set(\n itemsToDelete.map((item) => tree.idToPathMap.get(item.id))\n );\n\n return Object.fromEntries(\n Object.entries(media).filter(([key]) => !itemKeysToDelete.has(key))\n );\n};\n\nexport const mediaMoveMediaInsideFolder = ({\n sourceItemIds,\n targetItemId,\n media,\n tree,\n}: {\n sourceItemIds: string[];\n targetItemId: string;\n media: MediaMap;\n tree: MediaItemTree;\n}) => {\n const targetItemPath = tree.idToPathMap.get(targetItemId);\n if (!targetItemPath) return media;\n\n const sourceItemPaths = sourceItemIds\n .map((id) => tree.idToPathMap.get(id))\n .filter((path): path is string => Boolean(path));\n\n return mediaMovePathsIntoTarget({\n media,\n sourceItemPaths,\n targetItemPath,\n tree,\n });\n};\n\nexport const mediaGetParentDirectories = (\n mediaMap: MediaMap,\n folderId: string\n) => {\n const tree = createMediaItemTree(mediaMap);\n\n const indexPath = tree.findPath(\n rootMediaItem,\n (item) => item.id === folderId\n );\n\n if (!indexPath) return [rootMediaItem];\n\n return tree.accessPath(rootMediaItem, indexPath);\n};\n\nexport const mediaRenameMediaItemAndDescendantPaths = ({\n newName,\n selectedItemPath,\n media,\n tree,\n}: {\n newName: string;\n selectedItemPath: string;\n media: MediaMap;\n tree: MediaItemTree;\n}) => {\n const mediaClone = { ...media };\n const selectedItem = mediaClone[selectedItemPath];\n if (!selectedItem) return mediaClone;\n\n const parentPath = path.dirname(selectedItemPath);\n const newItemPath = path.join(parentPath, newName);\n\n const descendants = tree\n .flat(selectedItem)\n .map((item) => tree.idToPathMap.get(item.id));\n\n // Update all descendants' paths\n for (const descendantPath of descendants) {\n if (!descendantPath) continue;\n\n // Use the same approach as movePathsIntoTarget\n const newDescendantPath = descendantPath.replace(\n selectedItemPath,\n newItemPath\n );\n mediaClone[newDescendantPath] = mediaClone[descendantPath];\n delete mediaClone[descendantPath];\n }\n\n return mediaClone;\n};\n","import {\n createResourceTree,\n Resource,\n ResourceMap,\n ResourceTree,\n rootResource,\n} from \"@noya-app/noya-schemas\";\nimport { path } from \"imfs\";\nimport { ancestorPaths } from \"tree-visit\";\n\nexport type FileKindFilter = \"assets\" | \"directories\" | \"resources\" | \"all\";\nexport type ExpandedMap = Record<string, boolean | undefined>;\n\nexport type GetVisibleItemsOptions = {\n expandedMap: ExpandedMap;\n fileKindFilter: FileKindFilter;\n rootItemId: string;\n tree: ResourceTree;\n showAllDescendants: boolean;\n showRootItem: boolean;\n};\n\nexport const getVisibleItems = ({\n expandedMap,\n fileKindFilter,\n rootItemId,\n tree,\n showAllDescendants,\n showRootItem,\n}: GetVisibleItemsOptions) => {\n const filteredItems: Resource[] = [];\n const relativeRootItem =\n tree.find(rootResource, (item) => item.id === rootItemId) ?? rootResource;\n\n tree.visit(relativeRootItem, (item) => {\n if (relativeRootItem.id === item.id) {\n if (showRootItem) {\n filteredItems.push(item);\n }\n return;\n }\n if (item.type === \"file\" && fileKindFilter === \"all\") {\n filteredItems.push(item);\n }\n if (\n item.type === \"asset\" &&\n (fileKindFilter === \"assets\" || fileKindFilter === \"all\")\n ) {\n filteredItems.push(item);\n }\n if (\n item.type === \"directory\" &&\n (fileKindFilter === \"directories\" || fileKindFilter === \"all\")\n ) {\n filteredItems.push(item);\n }\n if (\n item.type === \"resource\" &&\n (fileKindFilter === \"resources\" || fileKindFilter === \"all\")\n ) {\n filteredItems.push(item);\n }\n if (!expandedMap[item.id] || !showAllDescendants) return \"skip\";\n });\n return filteredItems;\n};\n\n/**\n * Validates if a basename follows typical file naming conventions\n * Disallows:\n * - Path separators (/ and \\)\n * - Characters typically invalid in filesystems (<, >, :, \", |, ?, *)\n * - Empty names\n */\nexport const basenameValidator = (basename: string): boolean => {\n // Check for empty string\n if (!basename || basename.trim() === \"\") return false;\n\n // Simple regex matching common invalid filesystem characters\n const invalidCharsRegex = /[/\\\\<>:\"|?*]/;\n return !invalidCharsRegex.test(basename);\n};\n\nexport const validateResourceRename = ({\n basename,\n selectedItemPath,\n media,\n}: {\n basename: string;\n selectedItemPath: string;\n media: ResourceMap;\n}): boolean => {\n if (!basenameValidator(basename)) return false;\n const newItemPath = path.join(path.dirname(selectedItemPath), basename);\n // traverse the tree and check if there is already a path with the new name\n const newPathExists = media[newItemPath];\n if (newPathExists) return false;\n return true;\n};\n\nexport const movePathsIntoTarget = ({\n media,\n sourceItemPaths,\n targetItemPath,\n tree,\n}: {\n media: ResourceMap;\n sourceItemPaths: string[];\n targetItemPath: string;\n tree: ResourceTree;\n}) => {\n const ancestors = ancestorPaths(\n sourceItemPaths.map((path) => path.split(\"/\"))\n );\n const mediaClone = { ...media };\n for (const ancestor of ancestors) {\n const ancestorPath = ancestor.join(\"/\");\n const ancestorItem = mediaClone[ancestorPath];\n const newAncestorPath = path.join(\n targetItemPath,\n path.basename(ancestorPath)\n );\n if (!ancestorItem) continue;\n const descendantPaths = tree\n .flat(ancestorItem)\n .map((item) => tree.idToPathMap.get(item.id));\n for (const descendantPath of descendantPaths) {\n if (!descendantPath) continue;\n const newDescendantPath = descendantPath.replace(\n ancestorPath,\n newAncestorPath\n );\n const newPathIsValid = validateResourceRename({\n basename: path.basename(descendantPath),\n selectedItemPath: newDescendantPath,\n media,\n });\n if (newPathIsValid) {\n mediaClone[newDescendantPath] = mediaClone[descendantPath];\n delete mediaClone[descendantPath];\n }\n }\n }\n return mediaClone;\n};\n\nexport const moveUpAFolder = ({\n tree,\n media,\n selectedIds,\n}: {\n tree: ResourceTree;\n media: ResourceMap;\n selectedIds: string[];\n}) => {\n const indexPath = tree.findPath(\n rootResource,\n (item) => item.id === selectedIds[0]\n );\n if (!indexPath) return;\n\n // Get the grandparent folder (where items will be moved to)\n const grandparentFolder = tree.access(\n rootResource,\n indexPath.slice(0, indexPath.length - 2)\n );\n const grandparentFolderPath = tree.idToPathMap.get(grandparentFolder.id);\n if (!grandparentFolderPath) return;\n\n const sourceItemPaths = selectedIds\n .map((id) => tree.idToPathMap.get(id))\n .filter((path): path is string => Boolean(path));\n return movePathsIntoTarget({\n media,\n targetItemPath: grandparentFolderPath,\n sourceItemPaths,\n tree,\n });\n};\n\nexport const getDepthMap = (\n item: Resource,\n tree: ResourceTree,\n showAllDescendants: boolean\n): Record<string, number> => {\n const depthMap: Record<string, number> = {};\n tree.visit(item, (item, indexPath) => {\n if (showAllDescendants) {\n depthMap[item.id] = Math.max(indexPath.length - 1, 0);\n } else {\n depthMap[item.id] = 0;\n }\n });\n return depthMap;\n};\n\nexport const updateExpandedMap = ({\n item,\n expanded,\n expandable,\n expandedMap,\n tree,\n}: {\n item: Resource;\n expanded: boolean;\n expandable: boolean;\n expandedMap: ExpandedMap;\n tree: ResourceTree;\n}): ExpandedMap => {\n const newExpandedMap = { ...expandedMap };\n const inner = (item: Resource, expanded: boolean) => {\n if (!expandable) return {};\n // Don't allow toggling the fake root\n if (item.id === rootResource.id) return {};\n if (!expanded) {\n // recursively collapse all children\n const children = tree.getChildren(item, []);\n children.forEach((child) => inner(child, false));\n }\n newExpandedMap[item.id] = expanded;\n };\n inner(item, expanded);\n return newExpandedMap;\n};\n\nexport const deleteResources = ({\n selectedIds,\n media,\n tree,\n}: {\n selectedIds: string[];\n media: ResourceMap;\n tree: ResourceTree;\n}): ResourceMap => {\n const itemsToDelete = selectedIds.flatMap((mediaItemId) => {\n const mediaItem = tree.resourcesWithRoot.find(\n (item) => item.id === mediaItemId\n );\n if (!mediaItem) return [];\n return tree.flat(mediaItem);\n });\n const itemKeysToDelete = new Set(\n itemsToDelete.map((item) => tree.idToPathMap.get(item.id))\n );\n\n return Object.fromEntries(\n Object.entries(media).filter(([key]) => !itemKeysToDelete.has(key))\n );\n};\n\nexport const moveMediaInsideFolder = ({\n sourceItemIds,\n targetItemId,\n media,\n tree,\n}: {\n sourceItemIds: string[];\n targetItemId: string;\n media: ResourceMap;\n tree: ResourceTree;\n}) => {\n const targetItemPath = tree.idToPathMap.get(targetItemId);\n if (!targetItemPath) return media;\n\n const sourceItemPaths = sourceItemIds\n .map((id) => tree.idToPathMap.get(id))\n .filter((path): path is string => Boolean(path));\n\n return movePathsIntoTarget({\n media,\n sourceItemPaths,\n targetItemPath,\n tree,\n });\n};\n\nexport const getParentDirectories = (\n resourceMap: ResourceMap,\n folderId: string\n) => {\n const tree = createResourceTree(resourceMap);\n\n const indexPath = tree.findPath(rootResource, (item) => item.id === folderId);\n\n if (!indexPath) return [rootResource];\n\n return tree.accessPath(rootResource, indexPath);\n};\n\nexport const renameResourceAndDescendantPaths = ({\n newName,\n selectedItemPath,\n media,\n tree,\n}: {\n newName: string;\n selectedItemPath: string;\n media: ResourceMap;\n tree: ResourceTree;\n}) => {\n const mediaClone = { ...media };\n const selectedItem = mediaClone[selectedItemPath];\n if (!selectedItem) return mediaClone;\n\n const parentPath = path.dirname(selectedItemPath);\n const newItemPath = path.join(parentPath, newName);\n\n const descendants = tree\n .flat(selectedItem)\n .map((item) => tree.idToPathMap.get(item.id));\n\n // Update all descendants' paths\n for (const descendantPath of descendants) {\n if (!descendantPath) continue;\n\n // Use the same approach as movePathsIntoTarget\n const newDescendantPath = descendantPath.replace(\n selectedItemPath,\n newItemPath\n );\n mediaClone[newDescendantPath] = {\n ...mediaClone[descendantPath],\n path: newDescendantPath,\n };\n delete mediaClone[descendantPath];\n }\n\n return mediaClone;\n};\n","/* eslint-disable @shopify/prefer-early-return */\nimport {\n ActionMenu,\n Chip,\n CollectionProps,\n CollectionRef,\n CollectionRenderActionProps,\n CollectionThumbnailProps,\n CollectionViewType,\n createSectionedMenu,\n cssVars,\n FileExplorerCollection,\n FileExplorerDetail,\n FileExplorerEmptyState,\n FileExplorerLayout,\n FileExplorerUploadButton,\n formatByteSize,\n ListView,\n MediaThumbnail,\n MediaThumbnailProps,\n RelativeDropPosition,\n useOpenConfirmationDialog,\n} from \"@noya-app/noya-designsystem\";\nimport {\n DownloadIcon,\n FolderIcon,\n InputIcon,\n OpenInNewWindowIcon,\n ResetIcon,\n TrashIcon,\n UpdateIcon,\n UploadIcon,\n} from \"@noya-app/noya-icons\";\nimport {\n MultiplayerPatchMetadata,\n useAsset,\n useAssetManager,\n useAssets,\n} from \"@noya-app/noya-multiplayer-react\";\nimport {\n AssetResourceCreate,\n createAssetResource,\n createDirectoryResource,\n createResourceTree,\n diffResourceMaps,\n PLACEHOLDER_ITEM_NAME,\n Resource,\n ResourceCreateMap,\n ResourceMap,\n ResourceTree,\n rootResource,\n rootResourceName,\n} from \"@noya-app/noya-schemas\";\nimport { Base64, groupBy, isDeepEqual, uuid } from \"@noya-app/noya-utils\";\nimport {\n AutoSizer,\n downloadUrl,\n memoGeneric,\n useControlledOrUncontrolled,\n} from \"@noya-app/react-utils\";\nimport { fileOpen } from \"browser-fs-access\";\nimport {\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { Size } from \"@noya-app/noya-geometry\";\nimport { path } from \"imfs\";\nimport React from \"react\";\nimport { handleDataTransfer } from \"./utils/handleFileDrop\";\nimport {\n deleteResources,\n ExpandedMap,\n FileKindFilter,\n getDepthMap,\n getVisibleItems,\n moveMediaInsideFolder,\n moveUpAFolder,\n renameResourceAndDescendantPaths,\n updateExpandedMap,\n validateResourceRename,\n} from \"./utils/resourceUtils\";\n\nexport const gridThumbnailDimension = {\n width: 800,\n height: 800,\n};\n\nexport const ResourceThumbnail = memoGeneric(\n ({\n item,\n selected,\n size,\n path: pathProp,\n renderThumbnailIcon,\n className,\n url: urlProp,\n contentType: contentTypeProp,\n viewType,\n }: CollectionThumbnailProps<Resource> & {\n path?: string;\n renderThumbnailIcon?: MediaThumbnailProps[\"renderThumbnailIcon\"];\n className?: string;\n url?: string;\n contentType?: string;\n viewType?: CollectionViewType;\n }) => {\n const asset = useAsset(item.type === \"asset\" ? item.assetId : undefined);\n const isRoot = item.id === rootResource.id;\n const isFolder = item.type === \"directory\";\n\n let contentType: string | undefined;\n let url: string | undefined;\n // let width: number | undefined;\n // let height: number | undefined;\n\n if (asset) {\n contentType = asset.contentType;\n // if (contentType?.startsWith(\"image/\")) {\n url = asset.url;\n // }\n // width = asset.width ?? undefined;\n // height = asset.height ?? undefined;\n } else if (urlProp) {\n url = urlProp;\n contentType = contentTypeProp;\n }\n\n const fileName = pathProp ? path.basename(pathProp) : undefined;\n // const dimensions = width && height ? { width, height } : undefined;\n\n return (\n <MediaThumbnail\n contentType={contentType}\n iconName={isRoot ? \"HomeIcon\" : isFolder ? \"FolderIcon\" : undefined}\n url={url}\n selected={selected}\n size={size}\n fileName={fileName}\n renderThumbnailIcon={renderThumbnailIcon}\n dimensions={viewType === \"grid\" ? gridThumbnailDimension : undefined}\n className={className}\n />\n );\n }\n);\n\ntype MenuAction =\n | \"preview\"\n | \"download\"\n | \"upload\"\n | \"rename\"\n | \"replace\"\n | \"delete\"\n | \"move\"\n | \"addFolder\";\n\nexport type ResourceExplorerRef = {\n upload: (selectedId: string) => void;\n delete: (selectedIds: string[]) => void;\n download: (selectedItems: Resource[]) => void;\n rename: (selectedItemId: string) => void;\n addFolder: (currentFolderId: string) => void;\n moveUpAFolder: (selectedIds: string[]) => void;\n replace: (selectedItem: Resource) => void;\n preview: (selectedItems: Resource[]) => void;\n getItemAtIndex: (index: number) => Resource | undefined;\n};\n\ntype ResourceExplorerProps = {\n parentFileId: string;\n onSelectionChange?: (\n selectedIds: string[],\n event?: ListView.ClickInfo\n ) => void;\n selectedIds?: string[];\n media: ResourceMap;\n setMedia?: (\n metadata: Partial<MultiplayerPatchMetadata>,\n media: ResourceCreateMap\n ) => void;\n /** @default false */\n readOnly?: boolean;\n /** @default \"list\" */\n viewType?: CollectionViewType;\n /**\n * Whether to show assets or directories or all media items\n *\n * @default \"all\"\n * */\n fileKindFilter?: FileKindFilter;\n /**\n * Whether to show the root item\n *\n * @default false\n * */\n showRootItem?: boolean;\n /** Whether to expand all directories by default */\n initialExpanded?: ExpandedMap;\n /**\n * Callback for when an item is double-clicked\n */\n onDoubleClickItem?: (resourceItemId: string) => void;\n /**\n * If provided, only show items that are descendants of this folder\n */\n rootItemId?: string;\n title?: ReactNode;\n right?: ReactNode;\n className?: string;\n showUploadButton?: boolean;\n /**\n * If true, show all descendants of all directories within a collection\n * @default true\n * */\n showAllDescendants?: boolean;\n renderAction?: Exclude<\n CollectionProps<Resource, MenuAction>[\"renderAction\"],\n \"menu\"\n >;\n /** @default false */\n sortable?: boolean;\n renderThumbnailIcon?: MediaThumbnailProps[\"renderThumbnailIcon\"];\n onDidDeleteItems?: (items: [string, Resource][]) => void;\n onAssetsUploaded?: (mediaMap: Record<string, AssetResourceCreate>) => void;\n\n publishedResources?: Record<string, Resource>;\n virtualized?: boolean;\n\n renderUser?: (resource: Resource) => ReactNode;\n} & Pick<\n CollectionProps<Resource, MenuAction>,\n | \"sortableId\"\n | \"size\"\n | \"expandable\"\n | \"renamable\"\n | \"scrollable\"\n | \"renderEmptyState\"\n | \"sharedDragProps\"\n | \"onClickItem\"\n | \"itemClassName\"\n | \"itemStyle\"\n>;\n\nexport const ResourceExplorer = memo(\n forwardRef<ResourceExplorerRef, ResourceExplorerProps>(\n function ResourceExplorer(\n {\n parentFileId,\n sortableId,\n onSelectionChange,\n selectedIds: selectedIdsProp,\n media,\n setMedia: setMediaProp,\n readOnly = false,\n viewType = \"list\",\n fileKindFilter = \"all\",\n showRootItem = false,\n initialExpanded,\n expandable = true,\n renamable = true,\n onDoubleClickItem,\n rootItemId = rootResource.id,\n title,\n size = \"medium\",\n right,\n renderAction: renderActionProp,\n className,\n showUploadButton = true,\n showAllDescendants = true,\n scrollable = false,\n sortable = false,\n renderEmptyState,\n sharedDragProps,\n onClickItem,\n renderThumbnailIcon,\n onDidDeleteItems,\n onAssetsUploaded,\n itemClassName,\n itemStyle,\n publishedResources,\n virtualized = false,\n renderUser,\n },\n ref\n ) {\n const setMedia = useCallback(\n (...args: Parameters<Extract<typeof setMediaProp, Function>>) => {\n setMediaProp?.(...args);\n },\n [setMediaProp]\n );\n const tree = useMemo(() => createResourceTree(media), [media]);\n const [tempItem, setTempItem] = useState<[string, Resource] | undefined>(\n undefined\n );\n const mediaWithTempItem = useMemo(\n () => ({\n ...media,\n ...(tempItem ? { [tempItem[0]]: tempItem[1] } : {}),\n }),\n [media, tempItem]\n );\n const treeWithTempItem = useMemo(\n () => createResourceTree(mediaWithTempItem),\n [mediaWithTempItem]\n );\n const temp = useMemo(\n () => ({\n media: mediaWithTempItem,\n tree: treeWithTempItem,\n }),\n [mediaWithTempItem, treeWithTempItem]\n );\n const [selectedIds, setSelectedIds] = useControlledOrUncontrolled<\n string[]\n >({\n defaultValue: [],\n value: selectedIdsProp,\n onChange: onSelectionChange,\n });\n const assetManager = useAssetManager();\n const assets = useAssets();\n const [expandedMap, setExpandedMap] = useState<ExpandedMap>({});\n const visibleItems = useMemo(\n () =>\n getVisibleItems({\n expandedMap,\n fileKindFilter: fileKindFilter,\n rootItemId,\n tree: treeWithTempItem,\n showAllDescendants,\n showRootItem,\n }),\n [\n expandedMap,\n fileKindFilter,\n rootItemId,\n treeWithTempItem,\n showAllDescendants,\n showRootItem,\n ]\n );\n const depthMap = useMemo(\n () => getDepthMap(rootResource, treeWithTempItem, showAllDescendants),\n [treeWithTempItem, showAllDescendants]\n );\n const collectionRef = useRef<CollectionRef>(null);\n const selectedResources = useMemo(\n () =>\n treeWithTempItem.resourcesWithRoot.filter((item) =>\n selectedIds.includes(item.id)\n ),\n [treeWithTempItem, selectedIds]\n );\n\n const groupedItems = groupBy(selectedResources, (item) => item.type);\n const selectedAssetItems = groupedItems.asset ?? [];\n const selectedFolderItems = groupedItems.folder ?? [];\n\n const singleItemSelected = selectedResources.length === 1;\n const onlyAssetsSelected =\n selectedAssetItems.length > 0 &&\n selectedAssetItems.length === selectedResources.length;\n const onlyFoldersSelected =\n selectedFolderItems.length > 0 &&\n selectedFolderItems.length === selectedResources.length;\n const onlySingleFolderSelected =\n onlyFoldersSelected && selectedFolderItems.length === 1;\n const onlySingleAssetSelected =\n onlyAssetsSelected && selectedAssetItems.length === 1;\n const rootSelected = selectedIds.includes(rootResource.id);\n const sameParentSelected = selectedResources.every((item) => {\n const itemPath = tree.idToPathMap.get(item.id);\n const firstSelectedPath = tree.idToPathMap.get(selectedIds[0]);\n if (!itemPath || !firstSelectedPath) return false;\n return itemPath.startsWith(path.dirname(firstSelectedPath));\n });\n\n useEffect(() => {\n if (initialExpanded) {\n setExpandedMap(initialExpanded);\n }\n }, [initialExpanded]);\n\n const getExpanded = useCallback(\n (item: Resource) => {\n if (!expandable) return undefined;\n if (item.type !== \"directory\") return undefined;\n if (item.id === rootResource.id) return undefined;\n return expandedMap[item.id] ?? false;\n },\n [expandedMap, expandable]\n );\n\n const openConfirmationDialog = useOpenConfirmationDialog();\n\n const handleDelete = useCallback(\n async (selectedIds: string[]) => {\n const ok = await openConfirmationDialog({\n title: \"Delete items\",\n description:\n \"Are you sure you want to delete these items? This action cannot be undone.\",\n });\n\n if (!ok) return;\n\n const deletedItems = Object.entries(media).flatMap(\n ([path, item]): [string, Resource][] => {\n if (selectedIds.includes(item.id)) {\n return [[path, item]];\n }\n return [];\n }\n );\n\n const newMedia = deleteResources({\n selectedIds,\n media,\n tree,\n });\n\n setSelectedIds([rootResource.id]);\n setMedia({ name: \"Delete items\", timestamp: Date.now() }, newMedia);\n\n onDidDeleteItems?.(deletedItems);\n },\n [\n media,\n setMedia,\n setSelectedIds,\n tree,\n onDidDeleteItems,\n openConfirmationDialog,\n ]\n );\n\n const onRename = useCallback(\n (selectedItem: Resource, newName: string) => {\n if (!renamable) return;\n const selectedItemPath = treeWithTempItem.idToPathMap.get(\n selectedItem.id\n );\n if (!selectedItemPath) return;\n const renameIsValid = validateResourceRename({\n basename: newName,\n selectedItemPath,\n media: temp.media,\n });\n if (!renameIsValid) {\n setTempItem(undefined);\n return;\n }\n const mediaWithRenamedDescendantPaths =\n renameResourceAndDescendantPaths({\n newName,\n selectedItemPath,\n media: temp.media,\n tree: temp.tree,\n });\n setMedia(\n { name: \"Rename media item\", timestamp: Date.now() },\n mediaWithRenamedDescendantPaths\n );\n setTempItem(undefined);\n },\n [\n renamable,\n setMedia,\n temp.media,\n temp.tree,\n treeWithTempItem.idToPathMap,\n ]\n );\n\n const handleAddFolder = useCallback(\n (currentFolderId: string) => {\n const currentFolderPath = tree.idToPathMap.get(currentFolderId);\n if (!currentFolderPath) return;\n const newFolderPath = path.join(\n currentFolderPath,\n PLACEHOLDER_ITEM_NAME\n );\n const newFolder = createDirectoryResource({\n path: newFolderPath,\n accessibleByFileId: parentFileId,\n id: newFolderPath,\n stableId: uuid(),\n });\n setTempItem([newFolderPath, newFolder]);\n setTimeout(() => {\n collectionRef.current?.editName(newFolder.id);\n }, 50);\n },\n [parentFileId, tree]\n );\n\n const handleMoveUpAFolder = useCallback(\n (selectedIds: string[]) => {\n const newMedia = moveUpAFolder({\n tree,\n media,\n selectedIds,\n });\n if (!newMedia) return;\n setMedia({ name: \"Move items\", timestamp: Date.now() }, newMedia);\n },\n [media, tree, setMedia]\n );\n\n const [isUploading, setIsUploading] = useState(false);\n\n const handleUpload = useCallback(\n async (selectedId: string) => {\n try {\n const files = await fileOpen({ multiple: true });\n\n if (!files || !Array.isArray(files) || files.length === 0) return;\n\n const parentPath = tree.idToPathMap.get(selectedId);\n\n if (!parentPath) return;\n\n const uploadPromises = files.map(async (file) => {\n const assetPath = path.join(parentPath, path.basename(file.name));\n\n return {\n assetPath,\n asset: createAssetResource({\n id: uuid(),\n asset: {\n content: Base64.encode(await file.arrayBuffer()),\n contentType: file.type,\n encoding: \"base64\",\n },\n path: assetPath,\n accessibleByFileId: parentFileId,\n stableId: uuid(),\n }),\n };\n });\n\n setIsUploading(true);\n\n const uploadedAssets = await Promise.all(uploadPromises);\n const newMediaMap = Object.fromEntries(\n uploadedAssets.map(({ assetPath, asset }) => [assetPath, asset])\n );\n\n setMedia(\n { name: \"Add media items\", timestamp: Date.now() },\n {\n ...media,\n ...newMediaMap,\n }\n );\n\n onAssetsUploaded?.(newMediaMap);\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n // Ignore user-cancelled file picker\n } else {\n console.error(\"Failed to upload files:\", error);\n }\n } finally {\n setIsUploading(false);\n }\n },\n [tree, setMedia, media, onAssetsUploaded, parentFileId]\n );\n\n const handleDownload = useCallback(\n async (selectedItems: Resource[]) => {\n const downloadPromises = selectedItems\n .filter((item) => item.type === \"asset\")\n .map(async (item) => {\n const asset = assets.find((a) => a.id === item.assetId);\n if (!asset?.url) return;\n return downloadUrl(asset.url, tree.getNameForId(item.id));\n });\n\n await Promise.all(downloadPromises);\n },\n [assets, tree]\n );\n\n const handlePreview = useCallback(\n async (selectedItems: Resource[]) => {\n const previewPromises = selectedItems\n .filter((item) => item.type === \"asset\")\n .map(async (item) => {\n const asset = assets.find((a) => a.id === item.assetId);\n if (!asset?.url) return;\n return window?.open(asset.url, \"_blank\");\n });\n\n await Promise.all(previewPromises);\n },\n [assets]\n );\n\n const handleReplace = useCallback(\n async (selectedItem: Resource) => {\n try {\n const file = await fileOpen();\n if (!file) return;\n // Create the asset\n const asset = await assetManager.create(file);\n const oldFile = selectedItem;\n const oldFilePath = tree.idToPathMap.get(oldFile.id);\n if (!oldFilePath || oldFile.type !== \"asset\") return;\n setMedia(\n { name: \"Replace media file\", timestamp: Date.now() },\n {\n ...media,\n [oldFilePath]: createAssetResource({\n ...oldFile,\n assetId: asset.id,\n }),\n }\n );\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n // Ignore user-cancelled file picker\n } else {\n console.error(\"Failed to upload files:\", error);\n }\n }\n },\n [media, setMedia, assetManager, tree]\n );\n\n const handleRename = useCallback(\n (selectedItemId: string) => {\n collectionRef.current?.editName(selectedItemId);\n },\n [collectionRef]\n );\n\n const handleMoveMediaInsideFolder = useCallback(\n (sourceItems: Resource[], targetItem: Resource) => {\n const newMedia = moveMediaInsideFolder({\n sourceItemIds: sourceItems.map((item) => item.id),\n targetItemId: targetItem.id,\n media,\n tree,\n });\n\n setMedia(\n {\n name: \"Move media file inside folder\",\n timestamp: Date.now(),\n },\n newMedia\n );\n },\n [media, setMedia, tree]\n );\n\n const assetContextMenuItems = useMemo(() => {\n return createSectionedMenu<MenuAction>(\n [\n !rootSelected &&\n singleItemSelected && {\n title: \"Rename\",\n value: \"rename\",\n icon: <InputIcon />,\n },\n onlySingleAssetSelected && {\n title: \"Replace\",\n value: \"replace\",\n icon: <UpdateIcon />,\n },\n !rootSelected && {\n title: \"Delete\",\n value: \"delete\",\n icon: <TrashIcon />,\n },\n ],\n [\n onlySingleFolderSelected && {\n title: \"Upload Files\",\n value: \"upload\",\n icon: <UploadIcon />,\n },\n onlySingleFolderSelected && {\n title: \"Add Folder\",\n value: \"addFolder\",\n icon: <FolderIcon />,\n },\n onlyAssetsSelected &&\n tree.resourcesWithRoot.length > 0 && {\n title: \"Download\",\n value: \"download\",\n icon: <DownloadIcon />,\n },\n onlySingleAssetSelected && {\n title: \"Preview\",\n value: \"preview\",\n icon: <OpenInNewWindowIcon />,\n },\n ],\n [\n !rootSelected &&\n sameParentSelected && {\n title: \"Move up a folder\",\n value: \"move\",\n icon: <ResetIcon />,\n },\n ]\n );\n }, [\n rootSelected,\n singleItemSelected,\n onlySingleAssetSelected,\n onlySingleFolderSelected,\n onlyAssetsSelected,\n tree.resourcesWithRoot.length,\n sameParentSelected,\n ]);\n\n const handleMenuAction = useCallback(\n async (action: MenuAction, selectedItems: Resource[]) => {\n if (selectedItems.length === 0) return;\n\n switch (action) {\n case \"rename\":\n handleRename(selectedItems[0].id);\n return;\n case \"delete\":\n handleDelete(selectedIds);\n return;\n case \"replace\":\n handleReplace(selectedItems[0]);\n return;\n case \"upload\":\n handleUpload(selectedItems[0].id);\n return;\n case \"addFolder\":\n handleAddFolder(selectedItems[0].id);\n return;\n case \"preview\":\n handlePreview(selectedItems);\n return;\n case \"download\":\n handleDownload(selectedItems);\n return;\n case \"move\":\n handleMoveUpAFolder(selectedIds);\n return;\n }\n },\n [\n handleRename,\n handleDelete,\n selectedIds,\n handleReplace,\n handleUpload,\n handleAddFolder,\n handlePreview,\n handleDownload,\n handleMoveUpAFolder,\n ]\n );\n\n const handleSetExpanded = useCallback(\n (item: Resource, expanded: boolean) => {\n setExpandedMap((prev) =>\n updateExpandedMap({\n item,\n expanded,\n expandable,\n expandedMap: prev,\n tree,\n })\n );\n },\n [expandable, tree]\n );\n\n const renderAction = useMemo(() => {\n if (renderActionProp) return renderActionProp;\n\n return ({\n selected,\n onOpenChange,\n }: CollectionRenderActionProps<Resource>) => (\n <div\n style={{\n minWidth: \"75px\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n }}\n >\n <ActionMenu\n menuItems={assetContextMenuItems}\n onSelect={(action) => handleMenuAction(action, selectedResources)}\n selected={selected}\n onOpenChange={onOpenChange}\n variant={viewType === \"grid\" ? \"normal\" : \"bare\"}\n style={{\n backgroundColor: selected\n ? cssVars.colors.selectedListItemBackground\n : \"transparent\",\n color: selected\n ? cssVars.colors.selectedListItemText\n : undefined,\n }}\n />\n </div>\n );\n }, [\n assetContextMenuItems,\n handleMenuAction,\n renderActionProp,\n selectedResources,\n viewType,\n ]);\n\n useImperativeHandle(ref, () => ({\n upload: (selectedId: string) => handleUpload(selectedId),\n delete: handleDelete,\n download: handleDownload,\n rename: handleRename,\n addFolder: handleAddFolder,\n moveUpAFolder: handleMoveUpAFolder,\n replace: handleReplace,\n preview: handlePreview,\n moveMediaInsideFolder: handleMoveMediaInsideFolder,\n getItemAtIndex: (index) => visibleItems[index],\n }));\n\n const diffResources = useMemo(() => {\n if (!publishedResources) return;\n\n const diff = diffResourceMaps(publishedResources, media, \"stableId\");\n\n return {\n added: new Set(\n diff.addedResources.map((resource) => resource.stableId)\n ),\n removed: new Set(\n diff.removedResources.map((resource) => resource.stableId)\n ),\n modified: new Set(\n diff.modifiedResources.map((resource) => resource.stableId)\n ),\n };\n }, [media, publishedResources]);\n\n const keyExtractor = useCallback((item: Resource) => item.id, []);\n\n const renderCollection = (virtualizedSize: Size | undefined) => (\n <FileExplorerCollection<Resource, MenuAction>\n ref={collectionRef}\n sortableId={sortableId}\n scrollable={scrollable}\n sharedDragProps={sharedDragProps}\n items={visibleItems}\n viewType={viewType}\n size={size}\n getId={keyExtractor}\n getName={(file) => {\n if (file.id === tempItem?.[1].id) {\n return \"\";\n }\n return treeWithTempItem.getNameForId(file.id);\n }}\n expandable={expandable}\n sortable={sortable}\n getPlaceholder={(item) => {\n switch (item.type) {\n case \"directory\":\n return \"Enter folder name\";\n case \"resource\":\n case \"asset\":\n case \"file\":\n return \"Enter file name\";\n }\n }}\n getExpanded={getExpanded}\n setExpanded={handleSetExpanded}\n getRenamable={(item) => {\n if (item.id === rootResource.id) return false;\n return true;\n }}\n getDepth={(item) => depthMap[item.id]}\n menuItems={assetContextMenuItems}\n onSelectMenuItem={handleMenuAction}\n onSelectionChange={setSelectedIds}\n onClickItem={onClickItem}\n onClick={() => {\n setSelectedIds([]);\n }}\n onDoubleClickItem={onDoubleClickItem}\n onRename={onRename}\n renamable={renamable}\n selectedIds={selectedIds}\n itemClassName={itemClassName}\n itemStyle={itemStyle}\n virtualized={virtualizedSize}\n renderThumbnail={(props) => (\n <ResourceThumbnail\n {...props}\n path={tree.idToPathMap.get(props.item.id)}\n renderThumbnailIcon={renderThumbnailIcon}\n viewType={viewType}\n />\n )}\n renderAction={renderAction}\n renderRight={(file) => {\n if (file.type !== \"asset\") return null;\n\n const publishStatus = getPublishStatus({\n resource: file,\n diff: diffResources,\n });\n\n return (\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: \"1.5px\" }}\n >\n {publishStatus && (\n <Chip\n colorScheme={\n publishStatus === \"Modified\"\n ? \"info\"\n : publishStatus === \"Added\"\n ? \"secondary\"\n : \"primary\"\n }\n >\n {publishStatus}\n </Chip>\n )}\n {renderUser?.(file)}\n </div>\n );\n }}\n renderDetail={(file, selected) => {\n if (file.type !== \"asset\") return null;\n\n const asset = assets.find((a) => a.id === file.assetId);\n\n if (!asset) return null;\n\n return (\n <FileExplorerDetail\n selected={selected}\n size={size}\n style={{ minWidth: \"75px\", textAlign: \"right\" }}\n >\n {formatByteSize(asset.size)}\n </FileExplorerDetail>\n );\n }}\n renderEmptyState={() =>\n renderEmptyState?.() ?? <FileExplorerEmptyState />\n }\n itemRoleDescription=\"clickable file item\"\n getDropTargetParentIndex={(overIndex) => {\n const item = visibleItems[overIndex];\n const parentIndex = visibleItems.findIndex(\n (i) => i.id === tree.getParentIdForId(item.id)\n );\n return parentIndex === -1 ? undefined : parentIndex;\n }}\n acceptsDrop={({\n sourceIndex,\n targetIndex,\n position,\n sourceListId,\n targetListId,\n }) => {\n if (sourceListId !== targetListId) {\n return false;\n }\n\n if (sourceListId !== sortableId || targetListId !== sortableId) {\n return false;\n }\n\n const sourceItem = visibleItems[sourceIndex];\n const targetItem = visibleItems[targetIndex];\n\n return acceptsResourceDrop({\n position,\n sourceItem,\n targetItem,\n tree,\n });\n }}\n onMoveItem={({\n sourceListId,\n sourceIndex,\n targetListId,\n targetIndex,\n position,\n }) => {\n if (\n sourceListId !== sortableId ||\n targetListId !== sortableId ||\n position !== \"inside\"\n ) {\n return;\n }\n\n const selectedItems = visibleItems.filter((item) =>\n selectedIds.includes(item.id)\n );\n\n const sourceItem = visibleItems[sourceIndex];\n\n // if source is selected, move the selected items, otherwise move the source item\n const itemsToMove = selectedIds.includes(sourceItem.id)\n ? selectedItems\n : [sourceItem];\n\n const targetItem = visibleItems[targetIndex];\n\n handleMoveMediaInsideFolder(itemsToMove, targetItem);\n }}\n onFilesDrop={async (event: React.DragEvent<Element>) => {\n event.preventDefault();\n\n const rootItemPath = tree.idToPathMap.get(rootItemId);\n\n if (!rootItemPath) return;\n\n const newMedia = await handleDataTransfer({\n dataTransfer: event.dataTransfer,\n rootItemPath,\n resourceMap: media,\n accessibleByFileId: parentFileId,\n });\n\n if (!newMedia) return;\n\n setMedia(\n { name: \"Add media files\", timestamp: Date.now() },\n newMedia\n );\n }}\n />\n );\n\n return (\n <FileExplorerLayout\n title={title ?? rootResourceName}\n right={\n !readOnly && (\n <FileExplorerUploadButton\n showUploadButton={showUploadButton}\n onUpload={() => handleUpload(rootResource.id)}\n isUploading={isUploading}\n >\n {right}\n </FileExplorerUploadButton>\n )\n }\n className={className}\n >\n {virtualized ? (\n <AutoSizer>\n {({ width, height }) =>\n // add 24px to account for the -mx-3 on the Collection component\n renderCollection({ width: width + 24, height })\n }\n </AutoSizer>\n ) : (\n renderCollection(undefined)\n )}\n </FileExplorerLayout>\n );\n }\n )\n);\n\nexport function acceptsResourceDrop(parameters: {\n position: RelativeDropPosition;\n sourceItem: Resource;\n targetItem: Resource;\n tree: ResourceTree;\n}) {\n const { position, sourceItem, targetItem, tree } = parameters;\n\n if (position !== \"inside\" || targetItem.type === \"asset\") {\n return false;\n }\n const sourcePath = tree.findPath(\n rootResource,\n (item) => item.id === sourceItem.id\n );\n const targetPath = tree.findPath(\n rootResource,\n (item) => item.id === targetItem.id\n );\n\n // Don't allow dragging into a descendant\n if (!sourcePath || !targetPath) return false;\n\n if (isDeepEqual(sourcePath, targetPath.slice(0, sourcePath.length))) {\n return false;\n }\n\n return true;\n}\n\nfunction getPublishStatus({\n resource,\n diff,\n}: {\n resource: Resource;\n diff:\n | {\n modified: Set<string>;\n added: Set<string>;\n removed: Set<string>;\n }\n | undefined;\n}) {\n // If no diff, nothing has been published, so we don't need to show status\n if (!diff) return undefined;\n\n return diff.modified.has(resource.stableId)\n ? \"Modified\"\n : diff.added.has(resource.stableId)\n ? \"Added\"\n : diff.removed.has(resource.stableId)\n ? \"Removed\"\n : // We don't have to check for the specific ID, since if anything had been published\n // but removed, it will be in the removed set\n \"Published\";\n}\n","import {\n createAssetResource,\n createDirectoryResource,\n Resource,\n ResourceCreate,\n ResourceCreateMap,\n ResourceMap,\n} from \"@noya-app/noya-schemas\";\nimport { Base64, uuid } from \"@noya-app/noya-utils\";\nimport { path } from \"imfs\";\n\nfunction isDirectoryEntry(\n entry: FileSystemEntry\n): entry is FileSystemDirectoryEntry {\n return entry.isDirectory;\n}\n\nfunction isFileEntry(entry: FileSystemEntry): entry is FileSystemFileEntry {\n return entry.isFile;\n}\n\nexport async function handleDataTransfer({\n accessibleByFileId,\n dataTransfer,\n rootItemPath,\n resourceMap,\n}: {\n accessibleByFileId: string;\n dataTransfer: DataTransfer;\n rootItemPath: string;\n resourceMap: ResourceMap;\n}): Promise<ResourceCreateMap | undefined> {\n try {\n const dataTransferItems = Array.from(dataTransfer.items ?? []);\n\n const supportsEntries = dataTransferItems.some(\n (item) => typeof item?.webkitGetAsEntry === \"function\"\n );\n\n type DroppedFile = { file: File; relativePath: string };\n\n const collectFromEntry = async (\n entry: FileSystemEntry,\n basePath: string\n ): Promise<DroppedFile[]> => {\n if (!entry) return [];\n if (isFileEntry(entry)) {\n const file: File = await new Promise((resolve) =>\n (entry as FileSystemFileEntry).file((f: File) => resolve(f))\n );\n return [\n {\n file,\n relativePath: path.join(basePath, file.name),\n },\n ];\n }\n if (isDirectoryEntry(entry)) {\n const reader = entry.createReader();\n const readAll = async (): Promise<FileSystemEntry[]> => {\n const all: FileSystemEntry[] = [];\n // readEntries may return partial results; loop until empty\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const entries: FileSystemEntry[] = await new Promise((resolve) =>\n reader.readEntries((ents: FileSystemEntry[]) => resolve(ents))\n );\n if (!entries.length) break;\n all.push(...entries);\n }\n return all;\n };\n const children = await readAll();\n const results = await Promise.all(\n children.map((child) =>\n collectFromEntry(child, path.join(basePath, entry.name))\n )\n );\n return results.flat();\n }\n return [];\n };\n\n let dropped: DroppedFile[] = [];\n\n if (supportsEntries) {\n const topLevelEntries = dataTransferItems.flatMap((item) => {\n const entry = item.webkitGetAsEntry?.();\n if (!entry) return [];\n return [entry];\n });\n const nested = await Promise.all(\n topLevelEntries.map((entry) => collectFromEntry(entry, \"\"))\n );\n dropped = nested.flat();\n } else {\n const files = Array.from(dataTransfer.files);\n if (files.length === 0) return;\n dropped = files.map((file) => ({\n file,\n // Best effort: try webkitRelativePath; fall back to name\n relativePath:\n file.webkitRelativePath && file.webkitRelativePath.length > 0\n ? file.webkitRelativePath\n : file.name,\n }));\n }\n\n if (dropped.length === 0) return;\n\n const folderRelativePaths = new Set<string>();\n for (const { relativePath } of dropped) {\n const dir = path.dirname(relativePath);\n if (dir && dir !== \".\") {\n const parts = dir.split(\"/\").filter(Boolean);\n let acc = \"\";\n for (const part of parts) {\n acc = acc ? path.join(acc, part) : part;\n folderRelativePaths.add(acc);\n }\n }\n }\n\n const folderEntries: [string, Resource][] = Array.from(folderRelativePaths)\n .map((rel) => path.join(rootItemPath, rel))\n .filter((full) => !resourceMap[full])\n .map((full) => [\n full,\n createDirectoryResource({\n id: uuid(),\n path: full,\n accessibleByFileId,\n stableId: uuid(),\n }) as Resource,\n ]);\n\n const uploadResults = await Promise.all(\n dropped.map(\n async ({ file, relativePath }): Promise<[string, ResourceCreate]> => {\n return [\n path.join(rootItemPath, relativePath),\n createAssetResource({\n id: uuid(),\n asset: {\n content: Base64.encode(await file.arrayBuffer()),\n contentType: file.type,\n encoding: \"base64\",\n },\n path: path.join(rootItemPath, relativePath),\n accessibleByFileId,\n stableId: uuid(),\n }) as Resource,\n ];\n }\n )\n );\n\n return {\n ...resourceMap,\n ...Object.fromEntries([...folderEntries, ...uploadResults]),\n };\n } catch (error) {\n console.error(\"Failed to upload dropped files:\", error);\n }\n}\n"],"mappings":"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","names":["path","ancestorPaths","BoxDrawing","LinePrefix","node","indexPath","context","node","path","index","node","path","path","defineTree","exports","path","import_tree_visit","path","import_tree_visit","path","item","expanded","path","item","expanded","path","MediaCollection","selectedIds","ActionMenu","createSectionedMenu","cssVars","FileExplorerCollection","FileExplorerDetail","FileExplorerEmptyState","FileExplorerLayout","FileExplorerUploadButton","formatByteSize","MediaThumbnail","useOpenConfirmationDialog","DownloadIcon","FolderIcon","InputIcon","OpenInNewWindowIcon","ResetIcon","TrashIcon","UpdateIcon","UploadIcon","useAsset","useAssetManager","useAssets","createAssetResource","createDirectoryResource","createResourceTree","PLACEHOLDER_ITEM_NAME","rootResource","Base64","groupBy","isDeepEqual","uuid","downloadUrl","memoGeneric","useControlledOrUncontrolled","fileOpen","forwardRef","memo","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","path","React","uuid","path","memoGeneric","useAsset","rootResource","path","React","MediaThumbnail","memo","forwardRef","ResourceExplorer","useCallback","useMemo","createResourceTree","useState","useControlledOrUncontrolled","useAssetManager","useAssets","useRef","groupBy","useEffect","useOpenConfirmationDialog","selectedIds","PLACEHOLDER_ITEM_NAME","createDirectoryResource","uuid","fileOpen","createAssetResource","Base64","downloadUrl","createSectionedMenu","InputIcon","UpdateIcon","TrashIcon","UploadIcon","FolderIcon","DownloadIcon","OpenInNewWindowIcon","ResetIcon","ActionMenu","cssVars","useImperativeHandle","FileExplorerCollection","FileExplorerDetail","formatByteSize","FileExplorerEmptyState","FileExplorerLayout","FileExplorerUploadButton","isDeepEqual"]}