@noya-app/noya-file-explorer 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -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/find.js","../../../node_modules/tree-visit/lib/reduce.js","../../../node_modules/tree-visit/lib/flat.js","../../../node_modules/tree-visit/lib/flatMap.js","../../../node_modules/tree-visit/lib/map.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/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/index.ts","../src/MediaCollection.tsx","../src/utils/mediaItemTree.ts","../src/utils/files.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.accessPath = exports.access = void 0;\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}\nexports.access = access;\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\n ? {\n getRoot: () => result[0],\n getParent: () => result[result.length - 2],\n getAncestors: () => result.slice(0, -1),\n }\n : undefined;\n node = options.getChildren(node, path, context)[index];\n result.push(node);\n }\n return result;\n}\nexports.accessPath = accessPath;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sortPaths = exports.comparePathsByComponent = void 0;\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}\nexports.comparePathsByComponent = comparePathsByComponent;\nfunction sortPaths(indexPaths) {\n return [...indexPaths].sort(comparePathsByComponent);\n}\nexports.sortPaths = sortPaths;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ancestorPaths = void 0;\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}\nexports.ancestorPaths = ancestorPaths;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.boxDiagram = void 0;\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}\nexports.boxDiagram = boxDiagram;\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.prefixBlock = exports.isMultiline = exports.directoryDiagram = void 0;\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}\nexports.directoryDiagram = directoryDiagram;\nfunction isMultiline(line) {\n return line.includes('\\n');\n}\nexports.isMultiline = isMultiline;\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}\nexports.prefixBlock = prefixBlock;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.diagram = void 0;\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}\nexports.diagram = diagram;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.visit = exports.STOP = exports.SKIP = void 0;\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, onDetectCycle, getIdentifier } = options;\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(currentIndex);\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}\nexports.visit = visit;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findAllIndexPaths = exports.findIndexPath = exports.findAll = exports.find = void 0;\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}\nexports.find = find;\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}\nexports.findAll = findAll;\n/**\n * Find the `IndexPath` of a node matching a predicate function.\n */\nfunction findIndexPath(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}\nexports.findIndexPath = findIndexPath;\n/**\n * Find the `IndexPath` of all nodes matching a predicate function.\n */\nfunction findAllIndexPaths(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}\nexports.findAllIndexPaths = findAllIndexPaths;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reduce = void 0;\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}\nexports.reduce = reduce;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flat = void 0;\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}\nexports.flat = flat;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flatMap = void 0;\nconst reduce_1 = require(\"./reduce\");\n/**\n * Map each node into an array of values, which are then flattened into a single array.\n *\n * This is analogous to `Array.prototype.flatMap` for arrays.\n */\nfunction flatMap(node, options) {\n return (0, reduce_1.reduce)(node, Object.assign(Object.assign({}, options), { initialResult: [], nextResult: (result, child, indexPath) => {\n result.push(...options.transform(child, indexPath));\n return result;\n } }));\n}\nexports.flatMap = flatMap;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.map = void 0;\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 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}\nexports.map = map;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splice = exports.applyOperations = exports.getReplaceOperations = exports.getRemovalOperations = exports.getInsertionOperations = exports.replaceOperation = exports.removeOperation = exports.insertOperation = void 0;\nconst ancestors_1 = require(\"./ancestors\");\nconst map_1 = require(\"./map\");\nfunction insertOperation(index, nodes) {\n return {\n type: 'insert',\n index,\n nodes,\n };\n}\nexports.insertOperation = insertOperation;\nfunction removeOperation(indexes) {\n return {\n type: 'remove',\n indexes,\n };\n}\nexports.removeOperation = removeOperation;\nfunction replaceOperation() {\n return {\n type: 'replace',\n };\n}\nexports.replaceOperation = replaceOperation;\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}\nexports.getInsertionOperations = getInsertionOperations;\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}\nexports.getRemovalOperations = getRemovalOperations;\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}\nexports.getReplaceOperations = getReplaceOperations;\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 = operation.removeIndexes.reduce((index, removedIndex) => (removedIndex < index ? index - 1 : index), operation.insertIndex);\n return options.create(node, splice(updatedChildren, adjustedIndex, 0, ...operation.insertNodes), indexPath);\n case 'insert':\n return options.create(node, splice(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}\nexports.applyOperations = applyOperations;\nfunction splice(array, start, deleteCount, ...items) {\n return [\n ...array.slice(0, start),\n ...items,\n ...array.slice(start + deleteCount),\n ];\n}\nexports.splice = splice;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.insert = void 0;\nconst operation_1 = require(\"./operation\");\n/**\n * Insert nodes at a given `IndexPath`.\n */\nfunction insert(node, options) {\n const { nodes, at } = 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 return (0, operation_1.applyOperations)(node, state, options);\n}\nexports.insert = insert;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.move = void 0;\nconst access_1 = require(\"./access\");\nconst ancestors_1 = require(\"./ancestors\");\nconst operation_1 = require(\"./operation\");\nfunction move(node, options) {\n if (options.indexPaths.length === 0)\n return node;\n for (const indexPath of options.indexPaths) {\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.indexPaths);\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}\nexports.move = move;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.remove = void 0;\nconst operation_1 = require(\"./operation\");\n/**\n * Remove nodes at the given `IndexPath`s.\n */\nfunction remove(node, options) {\n if (options.indexPaths.length === 0)\n return node;\n for (const indexPath of options.indexPaths) {\n if (indexPath.length === 0) {\n throw new Error(`Can't remove the root node`);\n }\n }\n const operations = (0, operation_1.getRemovalOperations)(options.indexPaths);\n return (0, operation_1.applyOperations)(node, operations, options);\n}\nexports.remove = remove;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.replace = void 0;\nconst operation_1 = require(\"./operation\");\n/**\n * Replace the node at the given `IndexPath` with another.\n */\nfunction replace(node, options) {\n if (options.at.length === 0)\n return options.node;\n const operations = (0, operation_1.getReplaceOperations)(options.at, options.node);\n return (0, operation_1.applyOperations)(node, operations, options);\n}\nexports.replace = replace;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defineTree = void 0;\nconst access_1 = require(\"./access\");\nconst diagram_1 = require(\"./diagram\");\nconst find_1 = require(\"./find\");\nconst flat_1 = require(\"./flat\");\nconst flatMap_1 = require(\"./flatMap\");\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 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 * 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.findIndexPath = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.findIndexPath)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.findIndexPath)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\n this.findAllIndexPaths = (node, predicateOrOptions) => typeof predicateOrOptions === 'function'\n ? (0, find_1.findAllIndexPaths)(node, this.mergeOptions({ predicate: predicateOrOptions }))\n : (0, find_1.findAllIndexPaths)(node, this.mergeOptions(Object.assign({}, predicateOrOptions)));\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 /**\n * Map each node into an array of values, which are then flattened into a single array.\n *\n * This is analogous to `Array.prototype.flatMap` for arrays.\n */\n this.flatMap = (node, transform) => (0, flatMap_1.flatMap)(node, this.mergeOptions({ transform }));\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.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 * Remove nodes at the given `IndexPath`s.\n */\n this.remove = (node, options) => (0, remove_1.remove)(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 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}\nexports.defineTree = defineTree;\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 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\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(\"./find\"), exports);\n__exportStar(require(\"./flat\"), exports);\n__exportStar(require(\"./flatMap\"), 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(\"./visit\"), exports);\n__exportStar(require(\"./withOptions\"), exports);\n","import \"./index.css\";\nexport * from \"./MediaCollection\";\nexport * from \"./utils/files\";\nexport * from \"./utils/mediaItemTree\";\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 ListView,\n MediaThumbnail,\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 { 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 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\";\n\nconst MediaThumbnailInternal = memoGeneric(\n ({ item, selected, size }: CollectionThumbnailProps<MediaItem>) => {\n const asset = useAsset(item.kind === \"asset\" ? item.assetId : undefined);\n const isRoot = item.id === rootMediaItem.id;\n const isFolder = item.kind === \"folder\";\n return (\n <MediaThumbnail\n contentType={asset?.contentType}\n iconName={isRoot ? \"HomeIcon\" : isFolder ? \"FolderIcon\" : undefined}\n url={asset?.url}\n selected={selected}\n size={size}\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};\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 \"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} & Pick<\n CollectionProps<MediaItem, MenuAction>,\n \"size\" | \"expandable\" | \"renamable\" | \"scrollable\" | \"renderEmptyState\"\n>;\n\nexport const MediaCollection = memo(\n forwardRef<MediaCollectionRef, MediaCollectionProps>(function MediaCollection(\n {\n onSelectionChange,\n selectedIds: selectedIdsProp,\n media,\n setMedia,\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 },\n ref\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 // Handle expansion state\n const handleExpanded = 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 newMedia = deleteMediaItems({\n selectedIds,\n media,\n tree,\n });\n setSelectedIds([rootMediaItem.id]);\n setMedia({ name: \"Delete items\", timestamp: Date.now() }, newMedia);\n },\n [media, setMedia, setSelectedIds, tree]\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 handleUpload = useCallback(\n async (selectedId: string) => {\n try {\n const files = await fileOpen({ multiple: true });\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 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 }\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 sourceItemPath = tree.idToPathMap.get(sourceItem.id);\n const targetItemPath = tree.idToPathMap.get(targetItem.id);\n if (!sourceItemPath || !targetItemPath) return;\n const newMedia = moveMediaInsideFolder({\n sourceItemIds: [sourceItem.id],\n targetItemId: targetItem.id,\n media,\n tree,\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: \"Add media\",\n value: \"upload\",\n icon: <UploadIcon />,\n },\n onlySingleFolderSelected && {\n title: \"Add a 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.primaryPastel\n : \"transparent\",\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 }));\n\n return (\n <>\n <FileExplorerLayout\n title={title ?? rootMediaItemName}\n right={\n <FileExplorerUploadButton\n showUploadButton={showUploadButton}\n onUpload={() => handleUpload(rootMediaItem.id)}\n >\n {right}\n </FileExplorerUploadButton>\n }\n className={className}\n >\n <FileExplorerCollection<MediaItem, MenuAction>\n ref={collectionRef}\n scrollable={scrollable}\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 return \"Enter file name\";\n }\n }}\n getExpanded={handleExpanded}\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 onDoubleClickItem={onDoubleClickItem}\n onRename={onRename}\n renamable={renamable}\n selectedIds={selectedIds}\n renderThumbnail={(props) => <MediaThumbnailInternal {...props} />}\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 {(asset.size / 1024).toFixed(1)}KB\n </FileExplorerDetail>\n );\n }}\n renderEmptyState={() =>\n renderEmptyState?.() ?? <FileExplorerEmptyState />\n }\n itemRoleDescription=\"clickable file item\"\n getDropTargetParentIndex={(overIndex: number) => {\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: number,\n targetIndex: number,\n position: string\n ) => {\n const sourceItem = visibleItems[sourceIndex];\n const targetItem = visibleItems[targetIndex];\n\n if (position !== \"inside\" || targetItem.kind === \"asset\") {\n return false;\n }\n const sourcePath = tree.findIndexPath(\n rootMediaItem,\n (item) => item.id === sourceItem.id\n );\n const targetPath = tree.findIndexPath(\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 if (\n isDeepEqual(sourcePath, targetPath.slice(0, sourcePath.length))\n ) {\n return false;\n }\n\n return true;\n }}\n onMoveItem={(\n sourceIndex: number,\n targetIndex: number,\n position: string\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 files = Array.from(event.dataTransfer.files);\n if (files.length === 0) return;\n\n try {\n // Upload all dropped files\n const uploadPromises = files.map(async (file) => {\n const asset = await assetManager.create(file);\n return {\n asset: createMediaAsset({\n assetId: asset.id,\n }),\n name: file.name,\n };\n });\n\n const newMediaItems = await Promise.all(uploadPromises);\n const rootItemPath = tree.idToPathMap.get(rootItemId);\n if (!rootItemPath) return;\n // Add all the media file references to our state\n setMedia(\n { name: \"Add media files\", timestamp: Date.now() },\n {\n ...media,\n ...Object.fromEntries(\n newMediaItems.map((item) => [\n path.join(rootItemPath, item.name),\n item.asset,\n ])\n ),\n }\n );\n } catch (error) {\n console.error(\"Failed to upload dropped files:\", error);\n }\n }}\n />\n </FileExplorerLayout>\n </>\n );\n })\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 === \"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.findIndexPath(\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.findIndexPath(\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"],"mappings":"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","names":["exports","path","exports","exports","ancestorPaths","exports","BoxDrawing","exports","LinePrefix","exports","exports","exports","exports","exports","exports","exports","exports","node","exports","exports","exports","exports","exports","defineTree","exports","exports","exports","exports","import_noya_utils","import_imfs","import_react","import_imfs","import_tree_visit","path","item","expanded","React","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/index.ts","../src/MediaCollection.tsx","../src/utils/mediaItemTree.ts","../src/utils/files.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","import \"./index.css\";\nexport * from \"./MediaCollection\";\nexport * from \"./utils/files\";\nexport * from \"./utils/mediaItemTree\";\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 ListView,\n MediaThumbnail,\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 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\";\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 }: CollectionThumbnailProps<MediaItem> & {\n path?: string;\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 />\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};\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} & Pick<\n CollectionProps<MediaItem, MenuAction>,\n \"size\" | \"expandable\" | \"renamable\" | \"scrollable\" | \"renderEmptyState\"\n>;\n\nexport const MediaCollection = memo(\n forwardRef<MediaCollectionRef, MediaCollectionProps>(function MediaCollection(\n {\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 },\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 // Handle expansion state\n const handleExpanded = 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 newMedia = deleteMediaItems({\n selectedIds,\n media,\n tree,\n });\n setSelectedIds([rootMediaItem.id]);\n setMedia({ name: \"Delete items\", timestamp: Date.now() }, newMedia);\n },\n [media, setMedia, setSelectedIds, tree]\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 handleUpload = useCallback(\n async (selectedId: string) => {\n try {\n const files = await fileOpen({ multiple: true });\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 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 }\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 sourceItemPath = tree.idToPathMap.get(sourceItem.id);\n const targetItemPath = tree.idToPathMap.get(targetItem.id);\n if (!sourceItemPath || !targetItemPath) return;\n const newMedia = moveMediaInsideFolder({\n sourceItemIds: [sourceItem.id],\n targetItemId: targetItem.id,\n media,\n tree,\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: \"Add media\",\n value: \"upload\",\n icon: <UploadIcon />,\n },\n onlySingleFolderSelected && {\n title: \"Add a 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 }));\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 >\n {right}\n </FileExplorerUploadButton>\n )\n }\n className={className}\n >\n <FileExplorerCollection<MediaItem, MenuAction>\n ref={collectionRef}\n scrollable={scrollable}\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 return \"Enter file name\";\n }\n }}\n getExpanded={handleExpanded}\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 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 />\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 {(asset.size / 1024).toFixed(1)}KB\n </FileExplorerDetail>\n );\n }}\n renderEmptyState={() =>\n renderEmptyState?.() ?? <FileExplorerEmptyState />\n }\n itemRoleDescription=\"clickable file item\"\n getDropTargetParentIndex={(overIndex: number) => {\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: number,\n targetIndex: number,\n position: string\n ) => {\n const sourceItem = visibleItems[sourceIndex];\n const targetItem = visibleItems[targetIndex];\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 if (\n isDeepEqual(sourcePath, targetPath.slice(0, sourcePath.length))\n ) {\n return false;\n }\n\n return true;\n }}\n onMoveItem={(\n sourceIndex: number,\n targetIndex: number,\n position: string\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 files = Array.from(event.dataTransfer.files);\n if (files.length === 0) return;\n\n try {\n // Upload all dropped files\n const uploadPromises = files.map(async (file) => {\n const asset = await assetManager.create(file);\n return {\n asset: createMediaAsset({\n assetId: asset.id,\n }),\n name: file.name,\n };\n });\n\n const newMediaItems = await Promise.all(uploadPromises);\n const rootItemPath = tree.idToPathMap.get(rootItemId);\n if (!rootItemPath) return;\n // Add all the media file references to our state\n setMedia(\n { name: \"Add media files\", timestamp: Date.now() },\n {\n ...media,\n ...Object.fromEntries(\n newMediaItems.map((item) => [\n path.join(rootItemPath, item.name),\n item.asset,\n ])\n ),\n }\n );\n } catch (error) {\n console.error(\"Failed to upload dropped files:\", error);\n }\n }}\n />\n </FileExplorerLayout>\n </>\n );\n })\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 === \"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"],"mappings":"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","names":["exports","path","exports","exports","ancestorPaths","exports","BoxDrawing","exports","LinePrefix","exports","exports","node","indexPath","context","exports","exports","exports","exports","exports","node","exports","path","exports","index","node","path","exports","exports","exports","exports","exports","path","exports","defineTree","exports","exports","exports","exports","import_noya_utils","import_imfs","import_react","import_imfs","import_tree_visit","path","item","expanded","React","MediaCollection","selectedIds"]}