@noya-app/noya-file-explorer 0.0.2
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/.eslintrc.js +11 -0
- package/.turbo/turbo-build.log +24 -0
- package/CHANGELOG.md +14 -0
- package/README.md +3 -0
- package/dist/index.css +1811 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +23279 -0
- package/dist/index.d.ts +23279 -0
- package/dist/index.js +1854 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1857 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +37 -0
- package/src/MediaCollection.tsx +839 -0
- package/src/__tests__/deleteMediaItems.test.ts +125 -0
- package/src/__tests__/getDepthMap.test.ts +84 -0
- package/src/__tests__/getParentDirectories.test.ts +68 -0
- package/src/__tests__/getVisibleItems.test.ts +184 -0
- package/src/__tests__/moveMediaInsideFolder.test.ts +348 -0
- package/src/__tests__/movePathsIntoTarget.test.ts +229 -0
- package/src/__tests__/moveUpAFolder.test.ts +179 -0
- package/src/__tests__/updateExpandedMap.test.ts +157 -0
- package/src/__tests__/validateMediaItemRename.test.ts +200 -0
- package/src/index.css +1 -0
- package/src/index.ts +4 -0
- package/src/utils/files.ts +274 -0
- package/src/utils/mediaItemTree.ts +110 -0
- package/tsconfig.json +3 -0
- package/tsup.config.ts +13 -0
|
@@ -0,0 +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 updateExpandedMap,\n validateMediaItemRename,\n} from \"./utils/files\";\n\nconst MediaThumbnailInternal = memoGeneric(\n ({ item, selected }: 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 />\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 treeWithTempItem = useMemo(\n () =>\n createMediaItemTree({\n ...media,\n ...(tempItem ? { [tempItem[0]]: tempItem[1] } : {}),\n }),\n [media, tempItem]\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 // Convert size prop to grid size if in grid view\n const gridSize = useMemo(() => {\n if (viewType === \"grid\") {\n return size;\n }\n return \"medium\";\n }, [viewType, size]);\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 mediaWithTempItem = {\n ...media,\n ...(tempItem ? { [tempItem[0]]: tempItem[1] } : {}),\n };\n const renameIsValid = validateMediaItemRename({\n basename: newName,\n selectedItemPath,\n media: mediaWithTempItem,\n });\n if (!renameIsValid) {\n setTempItem(undefined);\n return;\n }\n const mediaClone = { ...media };\n delete mediaClone[selectedItemPath];\n setMedia(\n { name: \"Rename media item\", timestamp: Date.now() },\n {\n ...mediaClone,\n [path.join(path.dirname(selectedItemPath), newName)]: selectedItem,\n }\n );\n setTempItem(undefined);\n },\n [media, renamable, setMedia, tempItem, 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 style={{\n backgroundColor: selected\n ? cssVars.colors.primaryPastel\n : \"transparent\",\n }}\n />\n );\n }, [\n assetContextMenuItems,\n handleMenuAction,\n renderActionProp,\n selectedMediaItems,\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={gridSize}\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}>\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};\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};\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};\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};\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};\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};\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};\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,gDAAAA,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,aAAaA,SAAQ,SAAS;AAMtC,aAAS,OAAO,MAAM,WAAW,SAAS;AACtC,UAAI,QAAQ,yBAAyB;AACjC,cAAM,WAAW,WAAW,MAAM,WAAW,OAAO;AACpD,eAAO,SAAS,SAAS,SAAS,CAAC;AAAA,MACvC;AACA,UAAIC,QAAO,UAAU,MAAM;AAC3B,aAAOA,MAAK,SAAS,GAAG;AACpB,YAAI,QAAQA,MAAK,MAAM;AACvB,eAAO,QAAQ,YAAY,MAAMA,KAAI,EAAE,KAAK;AAAA,MAChD;AACA,aAAO;AAAA,IACX;AACA,IAAAD,SAAQ,SAAS;AAMjB,aAAS,WAAW,MAAM,WAAW,SAAS;AAC1C,UAAIC,QAAO,UAAU,MAAM;AAC3B,UAAI,SAAS,CAAC,IAAI;AAClB,aAAOA,MAAK,SAAS,GAAG;AACpB,YAAI,QAAQA,MAAK,MAAM;AACvB,cAAM,UAAU,QAAQ,0BAClB;AAAA,UACE,SAAS,MAAM,OAAO,CAAC;AAAA,UACvB,WAAW,MAAM,OAAO,OAAO,SAAS,CAAC;AAAA,UACzC,cAAc,MAAM,OAAO,MAAM,GAAG,EAAE;AAAA,QAC1C,IACE;AACN,eAAO,QAAQ,YAAY,MAAMA,OAAM,OAAO,EAAE,KAAK;AACrD,eAAO,KAAK,IAAI;AAAA,MACpB;AACA,aAAO;AAAA,IACX;AACA,IAAAD,SAAQ,aAAa;AAAA;AAAA;;;AC3CrB;AAAA,8CAAAE,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,YAAYA,SAAQ,0BAA0B;AACtD,aAAS,wBAAwB,GAAG,GAAG;AACnC,eAAS,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK;AACnD,YAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AACV,iBAAO;AACX,YAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AACV,iBAAO;AAAA,MACf;AAEA,aAAO,EAAE,SAAS,EAAE;AAAA,IACxB;AACA,IAAAA,SAAQ,0BAA0B;AAClC,aAAS,UAAU,YAAY;AAC3B,aAAO,CAAC,GAAG,UAAU,EAAE,KAAK,uBAAuB;AAAA,IACvD;AACA,IAAAA,SAAQ,YAAY;AAAA;AAAA;;;ACjBpB;AAAA,mDAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,gBAAgB;AACxB,QAAM,SAAS;AAQf,aAASC,eAAc,OAAO,SAAS;AACnC,UAAI;AACJ,YAAM,SAAS,oBAAI,IAAI;AACvB,YAAM,WAAW,KAAK,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,aAAa,QAAQ,OAAO,SAAS,KAAK,OAAO;AACjI,YAAM,mBAAmB,MAAM,KAAK,OAAO;AAC3C,iBAAW,aAAa,kBAAkB;AACtC,cAAM,cAAc,UAAU,KAAK,CAAC,GAAG,UAAU;AAC7C,gBAAM,YAAY,UAAU,MAAM,GAAG,KAAK,EAAE,KAAK;AACjD,iBAAO,OAAO,IAAI,SAAS;AAAA,QAC/B,CAAC;AACD,YAAI;AACA;AACJ,eAAO,IAAI,UAAU,KAAK,GAAG,SAAS;AAAA,MAC1C;AACA,aAAO,MAAM,KAAK,OAAO,OAAO,CAAC;AAAA,IACrC;AACA,IAAAD,SAAQ,gBAAgBC;AAAA;AAAA;;;AC3BxB;AAAA,4DAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,aAAa;AACrB,QAAI;AACJ,KAAC,SAAUC,aAAY;AACnB,MAAAA,YAAW,SAAS,IAAI;AACxB,MAAAA,YAAW,UAAU,IAAI;AACzB,MAAAA,YAAW,YAAY,IAAI;AAC3B,MAAAA,YAAW,aAAa,IAAI;AAC5B,MAAAA,YAAW,YAAY,IAAI;AAC3B,MAAAA,YAAW,UAAU,IAAI;AACzB,MAAAA,YAAW,qBAAqB,IAAI;AACpC,MAAAA,YAAW,mBAAmB,IAAI;AAClC,MAAAA,YAAW,gBAAgB,IAAI;AAAA,IACnC,GAAG,eAAe,aAAa,CAAC,EAAE;AAClC,aAAS,eAAe,OAAO;AAC3B,YAAM,QAAQ,MAAM,MAAM,IAAI;AAC9B,YAAM,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC;AAC3D,YAAM,mBAAmB;AACzB,YAAM,QAAQ,SAAS,mBAAmB,IAAI;AAC9C,YAAM,SAAS,IAAI,MAAM;AACzB,YAAM,UAAU;AAAA,QACZ;AAAA,UACI,WAAW;AAAA,UACX,WAAW,WAAW,OAAO,SAAS,mBAAmB,CAAC;AAAA,UAC1D,WAAW;AAAA,QACf;AAAA,QACA,GAAG,MAAM,IAAI,CAAC,SAAS;AAAA,UACnB,WAAW;AAAA,UACX,IAAI,OAAO,gBAAgB;AAAA,UAC3B,QAAQ,KAAK,SAAS,SAAS,IAAI,OAAO,SAAS,KAAK,MAAM,IAAI;AAAA,UAClE,IAAI,OAAO,gBAAgB;AAAA,UAC3B,WAAW;AAAA,QACf,CAAC;AAAA,QACD;AAAA,UACI,WAAW;AAAA,UACX,WAAW,WAAW,OAAO,SAAS,mBAAmB,CAAC;AAAA,UAC1D,WAAW;AAAA,QACf;AAAA,MACJ;AACA,aAAO;AAAA,QACH;AAAA,QACA;AAAA,QACA,UAAU,QAAQ,IAAI,CAAC,UAAU,MAAM,KAAK,EAAE,CAAC;AAAA,MACnD;AAAA,IACJ;AACA,aAAS,qBAAqB,OAAO;AACjC,YAAM,mBAAmB;AACzB,UAAI,MAAM,WAAW,GAAG;AACpB,cAAM,IAAI,MAAM,kCAAkC;AAAA,MACtD;AACA,aAAO,MAAM,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,QAAQ;AAC1C,cAAM,SAAS,KAAK,IAAI,OAAO,QAAQ,IAAI,MAAM;AACjD,cAAM,QAAQ,OAAO,QAAQ,mBAAmB,IAAI;AACpD,cAAM,WAAW,CAAC;AAClB,iBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,mBAAS,MAAM,OAAO,SAAS,CAAC,KAAK,IAAI,OAAO,OAAO,KAAK,KACxD,IAAI,OAAO,gBAAgB,KAC1B,IAAI,SAAS,CAAC,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE;AAAA,QAClD;AACA,eAAO,EAAE,QAAQ,OAAO,UAAU,YAAY,UAAU,KAAK,EAAE;AAAA,MACnE,GAAG,MAAM,CAAC,CAAC;AAAA,IACf;AACA,aAAS,mBAAmB,OAAO;AAC/B,YAAM,iBAAiB;AACvB,UAAI,MAAM,WAAW,GAAG;AACpB,cAAM,IAAI,MAAM,kCAAkC;AAAA,MACtD;AACA,YAAM,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;AACvD,aAAO,MAAM,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,QAAQ;AAC1C,cAAM,SAAS,OAAO,SAAS,iBAAiB,IAAI;AACpD,cAAM,WAAW,CAAC;AAClB,iBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,cAAI,IAAI,OAAO,QAAQ;AACnB,qBAAS,KAAK,OAAO,SAAS,CAAC,CAAC;AAAA,UACpC,WACS,MAAM,OAAO,QAAQ;AAC1B,qBAAS,KAAK,IAAI,OAAO,KAAK,CAAC;AAAA,UACnC,OACK;AACD,qBAAS,KAAK,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,CAAC;AAAA,UACrD;AAAA,QACJ;AACA,eAAO,EAAE,QAAQ,OAAO,UAAU,YAAY,UAAU,KAAK,EAAE;AAAA,MACnE,GAAG,MAAM,CAAC,CAAC;AAAA,IACf;AACA,aAAS,YAAY,MAAM,WAAW,SAAS;AAC3C,YAAM,QAAQ,QAAQ,SAAS,MAAM,SAAS;AAC9C,YAAM,MAAM,eAAe,KAAK;AAChC,YAAM,WAAW,QAAQ,YAAY,MAAM,SAAS;AACpD,UAAI,SAAS,WAAW;AACpB,eAAO;AACX,YAAM,aAAa,SAAS,IAAI,CAAC,OAAO,UAAU;AAC9C,cAAM,WAAW,YAAY,OAAO,CAAC,GAAG,WAAW,KAAK,GAAG,OAAO;AAElE,iBAAS,SAAS,CAAC,IAAI,gBAAgB,SAAS,SAAS,CAAC,GAAG,YAAY,SAAS,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,cAAc;AAChI,eAAO;AAAA,MACX,CAAC;AACD,YAAM,SAAS,mBAAmB,CAAC,KAAK,qBAAqB,UAAU,CAAC,CAAC;AAEzE,YAAM,WAAW,OAAO;AACxB,YAAM,MAAM,YAAY,OAAO,KAAK;AACpC,eAAS,IAAI,SAAS,CAAC,IAAI,gBAAgB,SAAS,IAAI,SAAS,CAAC,GAAG,KAAK,WAAW,mBAAmB;AACxG,UAAI,MAAM,SAAS,IAAI,SAAS,CAAC,EAAE,QAAQ,WAAW,cAAc;AACpE,UAAI,MAAM,SAAS,IAAI,SAAS,CAAC,EAAE,YAAY,WAAW,cAAc;AACxE,eAAS,IAAI,KAAK,KAAK,KAAK,KAAK;AAC7B,YAAI;AACJ,YAAI,MAAM,KAAK;AACX,sBACI,WAAW,SAAS,IACd,WAAW,oBACX,WAAW;AAAA,QACzB,WACS,MAAM,KAAK;AAChB,sBAAY,WAAW;AAAA,QAC3B,WACS,MAAM,KAAK;AAChB,sBAAY,WAAW;AAAA,QAC3B,OACK;AACD,sBAAY,WAAW;AAAA,QAC3B;AACA,eAAO,SAAS,IAAI,MAAM,IAAI,gBAAgB,OAAO,SAAS,IAAI,MAAM,GAAG,GAAG,SAAS;AAAA,MAC3F;AACA,aAAO;AAAA,IACX;AACA,aAAS,WAAW,MAAM,SAAS;AAC/B,aAAO,YAAY,MAAM,CAAC,GAAG,OAAO,EAAE,SAAS,KAAK,IAAI;AAAA,IAC5D;AACA,IAAAD,SAAQ,aAAa;AACrB,aAAS,YAAY,OAAO;AACxB,aAAO,KAAK,MAAM,QAAQ,CAAC;AAAA,IAC/B;AACA,aAAS,WAAW,MAAM,OAAO;AAC7B,YAAM,YAAY,QAAQ,KAAK;AAC/B,UAAI,aAAa;AACb,eAAO;AACX,YAAM,eAAe,YAAY,SAAS;AAC1C,YAAM,eAAe,YAAY,SAAS;AAC1C,YAAM,SAAS,IAAI,OAAO,YAAY,IAAI,OAAO,IAAI,OAAO,YAAY;AACxE,aAAO,eAAe,eAAe,OAAO,SAAS,QAC/C,SAAS,MACT;AAAA,IACV;AACA,aAAS,YAAY,OAAO,OAAO;AAC/B,aAAO,MAAM,IAAI,CAAC,SAAS,WAAW,MAAM,KAAK,CAAC;AAAA,IACtD;AACA,aAAS,gBAAgB,QAAQ,OAAO,WAAW;AAC/C,UAAI,QAAQ,OAAO,SAAS;AACxB,eAAO;AACX,aAAO,OAAO,UAAU,GAAG,KAAK,IAAI,YAAY,OAAO,UAAU,QAAQ,CAAC;AAAA,IAC9E;AAAA;AAAA;;;ACvJA;AAAA,kEAAAE,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,cAAcA,SAAQ,cAAcA,SAAQ,mBAAmB;AACvE,QAAI;AACJ,KAAC,SAAUC,aAAY;AACnB,MAAAA,YAAW,OAAO,IAAI;AACtB,MAAAA,YAAW,WAAW,IAAI;AAC1B,MAAAA,YAAW,aAAa,IAAI;AAC5B,MAAAA,YAAW,iBAAiB,IAAI;AAAA,IACpC,GAAG,eAAe,aAAa,CAAC,EAAE;AAClC,aAAS,YAAY,MAAM,WAAW,SAAS;AAC3C,YAAM,QAAQ,QAAQ,SAAS,MAAM,SAAS;AAC9C,YAAM,QAAQ,UAAU;AACxB,UAAI,WAAW,EAAE,OAAO,OAAO,QAAQ,IAAI,iBAAiB,GAAG;AAC/D,YAAM,WAAW,QAAQ,YAAY,MAAM,SAAS;AACpD,UAAI,SAAS,WAAW;AACpB,eAAO,CAAC,QAAQ;AAEpB,UAAI,QAAQ,2BACR,SAAS,WAAW,KACpB,CAAC,YAAY,KAAK,GAAG;AACrB,cAAM,CAAC,IAAI,IAAI,YAAY,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,OAAO;AAClE,cAAM,WAAW,UAAU,WAAW,KAAK,UAAU;AACrD,iBAAS,QAAQ,WACX,KAAK,KAAK,KAAK,KACf,GAAG,SAAS,KAAK,MAAM,KAAK,KAAK;AACvC,eAAO,CAAC,QAAQ;AAAA,MACpB;AACA,YAAM,cAAc,SAAS,QAAQ,CAAC,MAAM,OAAO,UAAU;AACzD,cAAM,cAAc,UAAU,MAAM,SAAS;AAC7C,cAAM,aAAa,YAAY,MAAM,CAAC,GAAG,WAAW,KAAK,GAAG,OAAO;AACnE,cAAM,cAAc,cAAc,WAAW,YAAY,WAAW;AACpE,cAAM,uBAAuB,cACvB,WAAW,kBACX,WAAW;AACjB,mBAAW,QAAQ,CAAC,SAAS;AACzB,cAAI,KAAK,UAAU,QAAQ,GAAG;AAC1B,iBAAK,SAAS,cAAc,KAAK;AACjC,iBAAK,kBAAkB,uBAAuB,KAAK;AAAA,UACvD,WACS,aAAa;AAClB,iBAAK,SAAS,WAAW,kBAAkB,KAAK;AAChD,iBAAK,kBAAkB,WAAW,kBAAkB,KAAK;AAAA,UAC7D,OACK;AACD,iBAAK,SAAS,WAAW,cAAc,KAAK;AAC5C,iBAAK,kBAAkB,WAAW,cAAc,KAAK;AAAA,UACzD;AAAA,QACJ,CAAC;AACD,eAAO;AAAA,MACX,CAAC;AACD,aAAO,CAAC,UAAU,GAAG,WAAW;AAAA,IACpC;AACA,aAAS,iBAAiB,MAAM,SAAS;AACrC,YAAM,QAAQ,YAAY,MAAM,CAAC,GAAG,OAAO;AAC3C,YAAM,UAAU,MAAM,IAAI,CAAC,SAAS,YAAY,KAAK,OAAO,KAAK,QAAQ,KAAK,eAAe,CAAC;AAC9F,aAAO,QAAQ,KAAK,IAAI;AAAA,IAC5B;AACA,IAAAD,SAAQ,mBAAmB;AAC3B,aAAS,YAAY,MAAM;AACvB,aAAO,KAAK,SAAS,IAAI;AAAA,IAC7B;AACA,IAAAA,SAAQ,cAAc;AACtB,aAAS,YAAY,OAAO,QAAQ,iBAAiB;AACjD,UAAI,CAAC,YAAY,KAAK;AAClB,eAAO,SAAS;AACpB,aAAO,MACF,MAAM,IAAI,EACV,IAAI,CAAC,MAAM,WAAW,UAAU,IAAI,SAAS,mBAAmB,IAAI,EACpE,KAAK,IAAI;AAAA,IAClB;AACA,IAAAA,SAAQ,cAAc;AAAA;AAAA;;;ACvEtB;AAAA,iDAAAE,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,UAAU;AAClB,QAAM,eAAe;AACrB,QAAM,qBAAqB;AAI3B,aAAS,QAAQ,MAAM,SAAS;AAC5B,UAAI,QAAQ,SAAS,OAAO;AACxB,gBAAQ,GAAG,aAAa,YAAY,MAAM,OAAO;AAAA,MACrD;AACA,cAAQ,GAAG,mBAAmB,kBAAkB,MAAM,OAAO;AAAA,IACjE;AACA,IAAAA,SAAQ,UAAU;AAAA;AAAA;;;ACdlB;AAAA,+CAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,QAAQA,SAAQ,OAAOA,SAAQ,OAAO;AAC9C,IAAAA,SAAQ,OAAO;AACf,IAAAA,SAAQ,OAAO;AAef,aAAS,MAAM,MAAM,SAAS;AAC1B,YAAM,EAAE,SAAS,SAAS,aAAa,eAAe,cAAc,IAAI;AACxE,UAAI,YAAY,CAAC;AACjB,UAAI,QAAQ,CAAC,EAAE,KAAK,CAAC;AACrB,YAAM,UAAU,gBAAgB,oBAAI,IAAI,IAAI;AAC5C,YAAM,UAAU,QAAQ,0BAClB;AAAA,QACE,UAAU;AACN,iBAAO;AAAA,QACX;AAAA,QACA,YAAY;AACR,cAAI;AACJ,kBAAQ,KAAK,MAAM,MAAM,SAAS,CAAC,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG;AAAA,QAClF;AAAA,QACA,eAAe;AACX,iBAAO,MAAM,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,YAAY,QAAQ,IAAI;AAAA,QAC3D;AAAA,MACJ,IACE;AACN,YAAM,eAAe,QAAQ,iBACvB,MAAM,YACN,MAAM,UAAU,MAAM;AAC5B,aAAO,MAAM,SAAS,GAAG;AACrB,YAAI,UAAU,MAAM,MAAM,SAAS,CAAC;AAEpC,YAAI,QAAQ,UAAU,QAAW;AAE7B,cAAI,SAAS;AACT,kBAAM,KAAK,gBAAgB,cAAc,QAAQ,IAAI,IAAI,QAAQ;AACjE,gBAAI,QAAQ,IAAI,EAAE,GAAG;AACjB,oBAAM,SAAS,OAAO,kBAAkB,aAClC,cAAc,QAAQ,MAAM,aAAa,GAAG,OAAO,IACnD;AACN,kBAAI,WAAW,SAAS;AACpB,sBAAM,IAAI,MAAM,wBAAwB;AAAA,cAC5C,OACK;AAED,wBAAQ,QAAQ;AAChB;AAAA,cACJ;AAAA,YACJ;AACA,oBAAQ,IAAI,EAAE;AAAA,UAClB;AACA,gBAAM,cAAc,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,QAAQ,MAAM,aAAa,CAAC;AAC1G,cAAI,gBAAgBA,SAAQ;AACxB;AACJ,kBAAQ,QAAQ,gBAAgBA,SAAQ,OAAO,KAAK;AAAA,QACxD;AACA,cAAM,WAAW,QAAQ,YAAY,YAAY,QAAQ,MAAM,aAAa,GAAG,OAAO;AACtF,YAAI,CAAC,QAAQ,UAAU;AACnB,kBAAQ,WAAW;AAAA,QACvB;AAEA,YAAI,QAAQ,UAAU,IAAI;AAEtB,cAAI,QAAQ,QAAQ,SAAS,QAAQ;AACjC,gBAAI,eAAe,QAAQ;AAC3B,sBAAU,KAAK,YAAY;AAC3B,kBAAM,KAAK,EAAE,MAAM,SAAS,YAAY,EAAE,CAAC;AAC3C,oBAAQ,QAAQ,eAAe;AAC/B;AAAA,UACJ;AACA,gBAAM,cAAc,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,QAAQ,MAAM,aAAa,CAAC;AAC1G,cAAI,gBAAgBA,SAAQ;AACxB;AAAA,QACR;AAEA,YAAI,SAAS;AACT,gBAAM,KAAK,gBAAgB,cAAc,QAAQ,IAAI,IAAI,QAAQ;AACjE,kBAAQ,OAAO,EAAE;AAAA,QACrB;AACA,kBAAU,IAAI;AACd,cAAM,IAAI;AAAA,MACd;AAAA,IACJ;AACA,IAAAA,SAAQ,QAAQ;AAAA;AAAA;;;AC/FhB;AAAA,8CAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,oBAAoBA,SAAQ,gBAAgBA,SAAQ,UAAUA,SAAQ,OAAO;AACrF,QAAM,UAAU;AAChB,aAAS,KAAK,MAAM,SAAS;AACzB,UAAI;AACJ,OAAC,GAAG,QAAQ,OAAO,MAAM,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,SAAS,CAAC,OAAO,cAAc;AAC5F,YAAI,QAAQ,UAAU,OAAO,SAAS,GAAG;AACrC,kBAAQ;AACR,iBAAO,QAAQ;AAAA,QACnB;AAAA,MACJ,EAAE,CAAC,CAAC;AACR,aAAO;AAAA,IACX;AACA,IAAAA,SAAQ,OAAO;AACf,aAAS,QAAQ,MAAM,SAAS;AAC5B,UAAI,QAAQ,CAAC;AACb,OAAC,GAAG,QAAQ,OAAO,MAAM;AAAA,QACrB,SAAS,CAAC,OAAO,cAAc;AAC3B,cAAI,QAAQ,UAAU,OAAO,SAAS,GAAG;AACrC,kBAAM,KAAK,KAAK;AAAA,UACpB;AAAA,QACJ;AAAA,QACA,aAAa,QAAQ;AAAA,MACzB,CAAC;AACD,aAAO;AAAA,IACX;AACA,IAAAA,SAAQ,UAAU;AAIlB,aAAS,cAAc,MAAM,SAAS;AAClC,UAAI;AACJ,OAAC,GAAG,QAAQ,OAAO,MAAM;AAAA,QACrB,SAAS,CAAC,OAAO,cAAc;AAC3B,cAAI,QAAQ,UAAU,OAAO,SAAS,GAAG;AAErC,oBAAQ,CAAC,GAAG,SAAS;AACrB,mBAAO,QAAQ;AAAA,UACnB;AAAA,QACJ;AAAA,QACA,aAAa,QAAQ;AAAA,MACzB,CAAC;AACD,aAAO;AAAA,IACX;AACA,IAAAA,SAAQ,gBAAgB;AAIxB,aAAS,kBAAkB,MAAM,SAAS;AACtC,UAAI,QAAQ,CAAC;AACb,OAAC,GAAG,QAAQ,OAAO,MAAM;AAAA,QACrB,SAAS,CAAC,OAAO,cAAc;AAC3B,cAAI,QAAQ,UAAU,OAAO,SAAS,GAAG;AAErC,kBAAM,KAAK,CAAC,GAAG,SAAS,CAAC;AAAA,UAC7B;AAAA,QACJ;AAAA,QACA,aAAa,QAAQ;AAAA,MACzB,CAAC;AACD,aAAO;AAAA,IACX;AACA,IAAAA,SAAQ,oBAAoB;AAAA;AAAA;;;AC9D5B;AAAA,gDAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,SAAS;AACjB,QAAM,UAAU;AAChB,aAAS,OAAO,MAAM,SAAS;AAC3B,UAAI,SAAS,QAAQ;AACrB,OAAC,GAAG,QAAQ,OAAO,MAAM,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,SAAS,CAAC,OAAO,cAAc;AAC5F,iBAAS,QAAQ,WAAW,QAAQ,OAAO,SAAS;AAAA,MACxD,EAAE,CAAC,CAAC;AACR,aAAO;AAAA,IACX;AACA,IAAAA,SAAQ,SAAS;AAAA;AAAA;;;ACXjB;AAAA,8CAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,OAAO;AACf,QAAM,WAAW;AAMjB,aAAS,KAAK,MAAM,SAAS;AACzB,cAAQ,GAAG,SAAS,QAAQ,MAAM,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,QAAQ,UAAU;AACxH,eAAO,KAAK,KAAK;AACjB,eAAO;AAAA,MACX,EAAE,CAAC,CAAC;AAAA,IACZ;AACA,IAAAA,SAAQ,OAAO;AAAA;AAAA;;;ACff;AAAA,iDAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,UAAU;AAClB,QAAM,WAAW;AAMjB,aAAS,QAAQ,MAAM,SAAS;AAC5B,cAAQ,GAAG,SAAS,QAAQ,MAAM,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,QAAQ,OAAO,cAAc;AACnI,eAAO,KAAK,GAAG,QAAQ,UAAU,OAAO,SAAS,CAAC;AAClD,eAAO;AAAA,MACX,EAAE,CAAC,CAAC;AAAA,IACZ;AACA,IAAAA,SAAQ,UAAU;AAAA;AAAA;;;ACflB;AAAA,6CAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,MAAM;AACd,QAAM,UAAU;AAOhB,aAAS,IAAI,MAAM,SAAS;AACxB,YAAM,cAAc,CAAC;AACrB,OAAC,GAAG,QAAQ,OAAO,MAAM,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,SAAS,CAAC,OAAO,cAAc;AAC5F,YAAI,IAAI;AAER,cAAM,eAAe,CAAC,GAAG,GAAG,SAAS;AACrC,cAAM,MAAM,aAAa,KAAK;AAC9B,cAAM,cAAc,QAAQ,UAAU,QAAQ,KAAK,YAAY,GAAG,OAAO,QAAQ,OAAO,SAAS,KAAK,CAAC,GAAG,SAAS;AACnH,cAAM,YAAY,aAAa,MAAM,GAAG,EAAE,EAAE,KAAK;AACjD,cAAM,kBAAkB,KAAK,YAAY,SAAS,OAAO,QAAQ,OAAO,SAAS,KAAK,CAAC;AACvF,uBAAe,KAAK,WAAW;AAC/B,oBAAY,SAAS,IAAI;AAAA,MAC7B,EAAE,CAAC,CAAC;AACR,aAAO,YAAY,EAAE,EAAE,CAAC;AAAA,IAC5B;AACA,IAAAA,SAAQ,MAAM;AAAA;AAAA;;;ACzBd;AAAA,mDAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,SAASA,SAAQ,kBAAkBA,SAAQ,uBAAuBA,SAAQ,uBAAuBA,SAAQ,yBAAyBA,SAAQ,mBAAmBA,SAAQ,kBAAkBA,SAAQ,kBAAkB;AACzN,QAAM,cAAc;AACpB,QAAM,QAAQ;AACd,aAAS,gBAAgB,OAAO,OAAO;AACnC,aAAO;AAAA,QACH,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AACA,IAAAA,SAAQ,kBAAkB;AAC1B,aAAS,gBAAgB,SAAS;AAC9B,aAAO;AAAA,QACH,MAAM;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AACA,IAAAA,SAAQ,kBAAkB;AAC1B,aAAS,mBAAmB;AACxB,aAAO;AAAA,QACH,MAAM;AAAA,MACV;AAAA,IACJ;AACA,IAAAA,SAAQ,mBAAmB;AAC3B,aAAS,eAAe,WAAW;AAC/B,aAAO,CAAC,UAAU,MAAM,GAAG,EAAE,GAAG,UAAU,UAAU,SAAS,CAAC,CAAC;AAAA,IACnE;AACA,aAAS,uBAAuB,WAAW,OAAO,aAAa,oBAAI,IAAI,GAAG;AACtE,UAAI;AACJ,YAAM,CAAC,iBAAiB,KAAK,IAAI,eAAe,SAAS;AAEzD,eAAS,IAAI,gBAAgB,SAAS,GAAG,KAAK,GAAG,KAAK;AAClD,cAAM,YAAY,gBAAgB,MAAM,GAAG,CAAC,EAAE,KAAK;AACnD,iBAAS,KAAK,WAAW,IAAI,SAAS,OAAO,QAAQ,OAAO,SAAS,SAAS,GAAG,MAAM;AAAA,UACnF,KAAK;AACD;AAAA,QACR;AACA,mBAAW,IAAI,WAAW,iBAAiB,CAAC;AAAA,MAChD;AACA,YAAM,YAAY,WAAW,IAAI,gBAAgB,KAAK,CAAC;AAEvD,cAAQ,cAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,MAAM;AAAA,QAC1E,KAAK;AACD,qBAAW,IAAI,gBAAgB,KAAK,GAAG;AAAA,YACnC,MAAM;AAAA,YACN,eAAe,UAAU;AAAA,YACzB,aAAa;AAAA,YACb,aAAa;AAAA,UACjB,CAAC;AACD;AAAA,QACJ;AACI,qBAAW,IAAI,gBAAgB,KAAK,GAAG,gBAAgB,OAAO,KAAK,CAAC;AAAA,MAC5E;AACA,aAAO;AAAA,IACX;AACA,IAAAA,SAAQ,yBAAyB;AACjC,aAAS,qBAAqB,YAAY;AACtC,UAAI,IAAI;AACR,YAAM,uBAAuB,GAAG,YAAY,eAAe,UAAU;AACrE,YAAM,kBAAkB,oBAAI,IAAI;AAChC,iBAAW,aAAa,qBAAqB;AACzC,cAAM,YAAY,UAAU,MAAM,GAAG,EAAE,EAAE,KAAK;AAC9C,cAAM,SAAS,KAAK,gBAAgB,IAAI,SAAS,OAAO,QAAQ,OAAO,SAAS,KAAK,CAAC;AACtF,cAAM,KAAK,UAAU,UAAU,SAAS,CAAC,CAAC;AAC1C,wBAAgB,IAAI,WAAW,KAAK;AAAA,MACxC;AACA,YAAM,aAAa,oBAAI,IAAI;AAE3B,iBAAW,aAAa,qBAAqB;AACzC,iBAAS,IAAI,UAAU,SAAS,GAAG,KAAK,GAAG,KAAK;AAC5C,gBAAM,YAAY,UAAU,MAAM,GAAG,CAAC,EAAE,KAAK;AAC7C,qBAAW,IAAI,WAAW,iBAAiB,CAAC;AAAA,QAChD;AAAA,MACJ;AAEA,iBAAW,aAAa,qBAAqB;AACzC,cAAM,YAAY,UAAU,MAAM,GAAG,EAAE,EAAE,KAAK;AAC9C,mBAAW,IAAI,WAAW,iBAAiB,KAAK,gBAAgB,IAAI,SAAS,OAAO,QAAQ,OAAO,SAAS,KAAK,CAAC,CAAC,CAAC;AAAA,MACxH;AACA,aAAO;AAAA,IACX;AACA,IAAAA,SAAQ,uBAAuB;AAC/B,aAAS,qBAAqB,WAAW,MAAM;AAC3C,YAAM,aAAa,oBAAI,IAAI;AAC3B,YAAM,CAAC,iBAAiB,KAAK,IAAI,eAAe,SAAS;AAEzD,eAAS,IAAI,gBAAgB,SAAS,GAAG,KAAK,GAAG,KAAK;AAClD,cAAM,YAAY,gBAAgB,MAAM,GAAG,CAAC,EAAE,KAAK;AACnD,mBAAW,IAAI,WAAW,iBAAiB,CAAC;AAAA,MAChD;AACA,iBAAW,IAAI,gBAAgB,KAAK,GAAG;AAAA,QACnC,MAAM;AAAA,QACN,eAAe,CAAC,KAAK;AAAA,QACrB,aAAa;AAAA,QACb,aAAa,CAAC,IAAI;AAAA,MACtB,CAAC;AACD,aAAO;AAAA,IACX;AACA,IAAAA,SAAQ,uBAAuB;AAC/B,aAAS,gBAAgB,MAAM,YAAY,SAAS;AAChD,cAAQ,GAAG,MAAM,KAAK,MAAM,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,OAAO,GAAG;AAAA;AAAA;AAAA,QAGlE,aAAa,CAACC,OAAM,cAAc;AAC9B,gBAAM,MAAM,UAAU,KAAK;AAC3B,gBAAM,YAAY,WAAW,IAAI,GAAG;AACpC,kBAAQ,cAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,MAAM;AAAA,YAC1E,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACD,qBAAO,QAAQ,YAAYA,OAAM,SAAS;AAAA,YAC9C;AACI,qBAAO,CAAC;AAAA,UAChB;AAAA,QACJ;AAAA,QAAG,WAAW,CAACA,OAAM,UAAU,cAAc;AACzC,gBAAM,MAAM,UAAU,KAAK;AAC3B,gBAAM,YAAY,WAAW,IAAI,GAAG;AACpC,kBAAQ,cAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,MAAM;AAAA,YAC1E,KAAK;AACD,qBAAO,QAAQ,OAAOA,OAAM,SAAS,OAAO,CAAC,GAAG,UAAU,CAAC,UAAU,QAAQ,SAAS,KAAK,CAAC,GAAG,SAAS;AAAA,YAC5G,KAAK;AACD,oBAAM,kBAAkB,SAAS,OAAO,CAAC,GAAG,UAAU,CAAC,UAAU,cAAc,SAAS,KAAK,CAAC;AAC9F,oBAAM,gBAAgB,UAAU,cAAc,OAAO,CAAC,OAAO,iBAAkB,eAAe,QAAQ,QAAQ,IAAI,OAAQ,UAAU,WAAW;AAC/I,qBAAO,QAAQ,OAAOA,OAAM,OAAO,iBAAiB,eAAe,GAAG,GAAG,UAAU,WAAW,GAAG,SAAS;AAAA,YAC9G,KAAK;AACD,qBAAO,QAAQ,OAAOA,OAAM,OAAO,UAAU,UAAU,OAAO,GAAG,GAAG,UAAU,KAAK,GAAG,SAAS;AAAA,YACnG,KAAK;AACD,qBAAO,QAAQ,OAAOA,OAAM,UAAU,SAAS;AAAA,YACnD;AACI,qBAAOA;AAAA,UACf;AAAA,QACJ;AAAA,MAAE,CAAC,CAAC;AAAA,IACZ;AACA,IAAAD,SAAQ,kBAAkB;AAC1B,aAAS,OAAO,OAAO,OAAO,gBAAgB,OAAO;AACjD,aAAO;AAAA,QACH,GAAG,MAAM,MAAM,GAAG,KAAK;AAAA,QACvB,GAAG;AAAA,QACH,GAAG,MAAM,MAAM,QAAQ,WAAW;AAAA,MACtC;AAAA,IACJ;AACA,IAAAA,SAAQ,SAAS;AAAA;AAAA;;;AChJjB;AAAA,gDAAAE,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,SAAS;AACjB,QAAM,cAAc;AAIpB,aAAS,OAAO,MAAM,SAAS;AAC3B,YAAM,EAAE,OAAO,GAAG,IAAI;AACtB,UAAI,GAAG,WAAW,GAAG;AACjB,cAAM,IAAI,MAAM,gCAAgC;AAAA,MACpD;AACA,YAAM,SAAS,GAAG,YAAY,wBAAwB,IAAI,KAAK;AAC/D,cAAQ,GAAG,YAAY,iBAAiB,MAAM,OAAO,OAAO;AAAA,IAChE;AACA,IAAAA,SAAQ,SAAS;AAAA;AAAA;;;ACfjB;AAAA,8CAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,OAAO;AACf,QAAM,WAAW;AACjB,QAAM,cAAc;AACpB,QAAM,cAAc;AACpB,aAAS,KAAK,MAAM,SAAS;AACzB,UAAI,QAAQ,WAAW,WAAW;AAC9B,eAAO;AACX,iBAAW,aAAa,QAAQ,YAAY;AACxC,YAAI,UAAU,WAAW,GAAG;AACxB,gBAAM,IAAI,MAAM,0BAA0B;AAAA,QAC9C;AAAA,MACJ;AACA,UAAI,QAAQ,GAAG,WAAW,GAAG;AACzB,cAAM,IAAI,MAAM,8BAA8B;AAAA,MAClD;AACA,YAAM,uBAAuB,GAAG,YAAY,eAAe,QAAQ,UAAU;AAC7E,YAAM,gBAAgB,oBAAoB,IAAI,CAAC,eAAe,GAAG,SAAS,QAAQ,MAAM,WAAW,OAAO,CAAC;AAC3G,YAAM,cAAc,GAAG,YAAY,wBAAwB,QAAQ,IAAI,gBAAgB,GAAG,YAAY,sBAAsB,mBAAmB,CAAC;AAChJ,cAAQ,GAAG,YAAY,iBAAiB,MAAM,YAAY,OAAO;AAAA,IACrE;AACA,IAAAA,SAAQ,OAAO;AAAA;AAAA;;;ACtBf;AAAA,gDAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,SAAS;AACjB,QAAM,cAAc;AAIpB,aAAS,OAAO,MAAM,SAAS;AAC3B,UAAI,QAAQ,WAAW,WAAW;AAC9B,eAAO;AACX,iBAAW,aAAa,QAAQ,YAAY;AACxC,YAAI,UAAU,WAAW,GAAG;AACxB,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAChD;AAAA,MACJ;AACA,YAAM,cAAc,GAAG,YAAY,sBAAsB,QAAQ,UAAU;AAC3E,cAAQ,GAAG,YAAY,iBAAiB,MAAM,YAAY,OAAO;AAAA,IACrE;AACA,IAAAA,SAAQ,SAAS;AAAA;AAAA;;;AClBjB;AAAA,iDAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,UAAU;AAClB,QAAM,cAAc;AAIpB,aAAS,QAAQ,MAAM,SAAS;AAC5B,UAAI,QAAQ,GAAG,WAAW;AACtB,eAAO,QAAQ;AACnB,YAAM,cAAc,GAAG,YAAY,sBAAsB,QAAQ,IAAI,QAAQ,IAAI;AACjF,cAAQ,GAAG,YAAY,iBAAiB,MAAM,YAAY,OAAO;AAAA,IACrE;AACA,IAAAA,SAAQ,UAAU;AAAA;AAAA;;;ACblB;AAAA,oDAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,aAAa;AACrB,QAAM,WAAW;AACjB,QAAM,YAAY;AAClB,QAAM,SAAS;AACf,QAAM,SAAS;AACf,QAAM,YAAY;AAClB,QAAM,WAAW;AACjB,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,WAAW;AACjB,QAAM,WAAW;AACjB,QAAM,YAAY;AAClB,QAAM,UAAU;AAChB,QAAM,OAAN,MAAM,MAAK;AAAA,MACP,YAAY,0BAA0B,gBAAgB;AAClD,aAAK,iBAAiB;AAMtB,aAAK,cAAc,CAAC,MAAM,WAAW,YAAY;AAC7C,iBAAO,KAAK,aAAa,MAAM,WAAW,OAAO;AAAA,QACrD;AACA,aAAK,eAAe,CAAC,YAAa,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW,GAAG,KAAK,cAAc,GAAG,OAAO;AAChI,aAAK,cAAc,CAAC,eAAe,IAAI,MAAK,KAAK,aAAa,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,KAAK,cAAc,GAAG,UAAU,CAAC;AAM/H,aAAK,SAAS,CAAC,MAAM,eAAe,GAAG,SAAS,QAAQ,MAAM,WAAW,KAAK,aAAa,CAAC,CAAC,CAAC;AAM9F,aAAK,aAAa,CAAC,MAAM,eAAe,GAAG,SAAS,YAAY,MAAM,WAAW,KAAK,aAAa,CAAC,CAAC,CAAC;AAItG,aAAK,UAAU,CAAC,MAAM,YAAY,OAAO,YAAY,cAC9C,GAAG,UAAU,SAAS,MAAM,KAAK,aAAa,EAAE,UAAU,QAAQ,CAAC,CAAC,KACpE,GAAG,UAAU,SAAS,MAAM,KAAK,aAAa,OAAO,CAAC;AAC7D,aAAK,OAAO,CAAC,MAAM,uBAAuB,OAAO,uBAAuB,cACjE,GAAG,OAAO,MAAM,MAAM,KAAK,aAAa,EAAE,WAAW,mBAAmB,CAAC,CAAC,KAC1E,GAAG,OAAO,MAAM,MAAM,KAAK,aAAa,OAAO,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;AACrF,aAAK,UAAU,CAAC,MAAM,uBAAuB,OAAO,uBAAuB,cACpE,GAAG,OAAO,SAAS,MAAM,KAAK,aAAa,EAAE,WAAW,mBAAmB,CAAC,CAAC,KAC7E,GAAG,OAAO,SAAS,MAAM,KAAK,aAAa,OAAO,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;AACxF,aAAK,gBAAgB,CAAC,MAAM,uBAAuB,OAAO,uBAAuB,cAC1E,GAAG,OAAO,eAAe,MAAM,KAAK,aAAa,EAAE,WAAW,mBAAmB,CAAC,CAAC,KACnF,GAAG,OAAO,eAAe,MAAM,KAAK,aAAa,OAAO,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;AAC9F,aAAK,oBAAoB,CAAC,MAAM,uBAAuB,OAAO,uBAAuB,cAC9E,GAAG,OAAO,mBAAmB,MAAM,KAAK,aAAa,EAAE,WAAW,mBAAmB,CAAC,CAAC,KACvF,GAAG,OAAO,mBAAmB,MAAM,KAAK,aAAa,OAAO,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;AAMlG,aAAK,OAAO,CAAC,UAAU,GAAG,OAAO,MAAM,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC;AAMlE,aAAK,UAAU,CAAC,MAAM,eAAe,GAAG,UAAU,SAAS,MAAM,KAAK,aAAa,EAAE,UAAU,CAAC,CAAC;AACjG,aAAK,SAAS,CAAC,MAAM,YAAY,mBAAmB,GAAG,SAAS,QAAQ,MAAM,KAAK,aAAa,EAAE,YAAY,cAAc,CAAC,CAAC;AAC9H,aAAK,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,KAAK,MAAM,KAAK,aAAa,EAAE,UAAU,CAAC,CAAC;AACrF,aAAK,QAAQ,CAAC,MAAM,qBAAqB,OAAO,qBAAqB,cAC9D,GAAG,QAAQ,OAAO,MAAM,KAAK,aAAa,EAAE,SAAS,iBAAiB,CAAC,CAAC,KACxE,GAAG,QAAQ,OAAO,MAAM,KAAK,aAAa,OAAO,OAAO,CAAC,GAAG,gBAAgB,CAAC,CAAC;AAKrF,aAAK,SAAS,CAAC,MAAM,aAAa,GAAG,SAAS,QAAQ,MAAM,KAAK,aAAa,OAAO,CAAC;AAItF,aAAK,SAAS,CAAC,MAAM,aAAa,GAAG,SAAS,QAAQ,MAAM,KAAK,aAAa,OAAO,CAAC;AAItF,aAAK,OAAO,CAAC,MAAM,aAAa,GAAG,OAAO,MAAM,MAAM,KAAK,aAAa,OAAO,CAAC;AAIhF,aAAK,UAAU,CAAC,MAAM,aAAa,GAAG,UAAU,SAAS,MAAM,KAAK,aAAa,OAAO,CAAC;AACzF,aAAK,cACD,OAAO,6BAA6B,aAC9B,EAAE,aAAa,yBAAyB,IACxC;AACV,aAAK,eAAe,KAAK,YAAY;AAAA,MACzC;AAAA,IACJ;AACA,aAASC,YAAW,aAAa;AAC7B,aAAO,IAAI,KAAK,aAAa,CAAC,CAAC;AAAA,IACnC;AACA,IAAAD,SAAQ,aAAaC;AAAA;AAAA;;;ACtGrB;AAAA,mDAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAAA;AAAA;;;ACD5D;AAAA,iDAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAAA;AAAA;;;ACD5D;AAAA,qDAAAC,UAAA;AAAA;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,IAAAA,SAAQ,cAAc;AACtB,QAAM,eAAe;AAMrB,IAAAA,SAAQ,cAAc,aAAa;AAAA;AAAA;;;ACTnC;AAAA,+CAAAC,UAAA;AAAA;AACA,QAAI,kBAAmBA,YAAQA,SAAK,oBAAqB,OAAO,SAAU,SAAS,GAAG,GAAG,GAAG,IAAI;AAC5F,UAAI,OAAO,OAAW,MAAK;AAC3B,aAAO,eAAe,GAAG,IAAI,EAAE,YAAY,MAAM,KAAK,WAAW;AAAE,eAAO,EAAE,CAAC;AAAA,MAAG,EAAE,CAAC;AAAA,IACvF,IAAM,SAAS,GAAG,GAAG,GAAG,IAAI;AACxB,UAAI,OAAO,OAAW,MAAK;AAC3B,QAAE,EAAE,IAAI,EAAE,CAAC;AAAA,IACf;AACA,QAAI,eAAgBA,YAAQA,SAAK,gBAAiB,SAAS,GAAGA,UAAS;AACnE,eAAS,KAAK,EAAG,KAAI,MAAM,aAAa,CAAC,OAAO,UAAU,eAAe,KAAKA,UAAS,CAAC,EAAG,iBAAgBA,UAAS,GAAG,CAAC;AAAA,IAC5H;AACA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAC5D,iBAAa,kBAAqBA,QAAO;AACzC,iBAAa,qBAAwBA,QAAO;AAC5C,iBAAa,sBAAyBA,QAAO;AAC7C,iBAAa,mBAAsBA,QAAO;AAC1C,iBAAa,gBAAmBA,QAAO;AACvC,iBAAa,gBAAmBA,QAAO;AACvC,iBAAa,mBAAsBA,QAAO;AAC1C,iBAAa,qBAAwBA,QAAO;AAC5C,iBAAa,kBAAqBA,QAAO;AACzC,iBAAa,eAAkBA,QAAO;AACtC,iBAAa,gBAAmBA,QAAO;AACvC,iBAAa,mBAAsBA,QAAO;AAC1C,iBAAa,kBAAqBA,QAAO;AACzC,iBAAa,kBAAqBA,QAAO;AACzC,iBAAa,mBAAsBA,QAAO;AAC1C,iBAAa,gBAAmBA,QAAO;AACvC,iBAAa,iBAAoBA,QAAO;AACxC,iBAAa,uBAA0BA,QAAO;AAAA;AAAA;;;AC7B9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,+BAgBO;AACP,wBASO;AACP,oCAKO;AAEP,IAAAC,qBAAqC;AACrC,yBAIO;AACP,+BAAyB;AACzB,mBAUO;;;AC7CP,wBAAqB;AACrB,kBAAqB;AACrB,wBAA2B;AAEpB,IAAM,oBAAoB,CAC/B,WACoB;AACpB,SAAO;AAAA,IACL,QAAI,wBAAK;AAAA,IACT,MAAM;AAAA,IACN,GAAG;AAAA,EACL;AACF;AAEO,IAAM,mBAAmB,CAC9B,UACmB;AACnB,SAAO;AAAA,IACL,QAAI,wBAAK;AAAA,IACT,MAAM;AAAA,IACN,GAAG;AAAA,EACL;AACF;AAEO,IAAM,kBAAkB,CAC7B,SACkB;AAClB,SAAO;AAAA,IACL,QAAI,wBAAK;AAAA,IACT,MAAM;AAAA,IACN,GAAG;AAAA,EACL;AACF;AAEO,IAAM,kBAAkB,CAAC,SAAoB;AAClD,SAAO;AAAA,IACL,GAAG;AAAA,EACL;AACF;AAEO,IAAM,gBAA2B;AAAA,EACtC,IAAI;AAAA,EACJ,MAAM;AACR;AAEO,IAAM,oBAAoB;AAC1B,IAAM,oBAAoB;AAC1B,IAAM,wBAAwB;AAE9B,IAAM,sBAAsB,CAAC,aAAuB;AACzD,QAAM,iBAAiB,OAAO;AAAA,IAC5B,OAAO,QAAQ,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;AAAA,EAClE;AACA,QAAM,sBAAsB,oBAAI,IAAyB;AACzD,QAAM,cAAc,oBAAI,IAAoB;AAC5C,cAAY,IAAI,cAAc,IAAI,iBAAiB;AAEnD,aAAW,CAAC,UAAU,IAAI,KAAK,OAAO,QAAQ,cAAc,GAAG;AAC7D,UAAM,aAAa,iBAAK,QAAQ,QAAQ;AACxC,UAAM,WAAW,oBAAoB,IAAI,UAAU,KAAK,CAAC;AACzD,aAAS,KAAK,IAAI;AAClB,wBAAoB,IAAI,YAAY,QAAQ;AAC5C,gBAAY,IAAI,KAAK,IAAI,QAAQ;AAAA,EACnC;AAEA,QAAM,WAAO,8BAAsB;AAAA,IACjC,aAAa,CAAC,SAAS;AACrB,YAAM,WACJ,SAAS,gBAAgB,oBAAoB,YAAY,IAAI,KAAK,EAAE;AACtE,UAAI,CAAC,SAAU,QAAO,CAAC;AACvB,aAAO,oBAAoB,IAAI,QAAQ,KAAK,CAAC;AAAA,IAC/C;AAAA,IACA,eAAe;AAAA,IACf,eAAe,CAAC,SAAS,KAAK;AAAA,EAChC,CAAC;AAED,QAAM,SAAS,KAAK,YAAY;AAAA,IAC9B,UAAU,CAAC,SAAS,YAAY,IAAI,KAAK,EAAE,KAAK;AAAA,EAClD,CAAC;AAED,QAAM,qBAAqB,CAAC,GAAG,OAAO,OAAO,cAAc,GAAG,aAAa;AAC3E,QAAM,eAAe,CAAC,OACpB,OAAO,cAAc,KACjB,oBACA,iBAAK,SAAS,YAAY,IAAI,EAAE,KAAK,EAAE;AAC7C,QAAM,mBAAmB,CAAC,OAAe;AACvC,UAAM,WAAW,YAAY,IAAI,EAAE;AACnC,QAAI,CAAC,SAAU;AACf,UAAM,aAAa,iBAAK,QAAQ,QAAQ;AACxC,WAAO,YAAY,IAAI,UAAU;AAAA,EACnC;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AD5CA,IAAAC,eAAqB;AACrB,IAAAC,gBAAkB;;;AE/DlB,IAAAC,eAAqB;AACrB,IAAAC,qBAA8B;AAmBvB,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA8B;AAC5B,QAAM,gBAA6B,CAAC;AACpC,QAAM,mBACJ,KAAK,KAAK,eAAe,CAAC,SAAS,KAAK,OAAO,UAAU,KAAK;AAEhE,OAAK,MAAM,kBAAkB,CAAC,SAAS;AACrC,QAAI,iBAAiB,OAAO,KAAK,IAAI;AACnC,UAAI,cAAc;AAChB,sBAAc,KAAK,IAAI;AAAA,MACzB;AACA;AAAA,IACF;AACA,QAAI,KAAK,SAAS,UAAU,mBAAmB,OAAO;AACpD,oBAAc,KAAK,IAAI;AAAA,IACzB;AACA,QACE,KAAK,SAAS,YACb,mBAAmB,YAAY,mBAAmB,QACnD;AACA,oBAAc,KAAK,IAAI;AAAA,IACzB;AACA,QACE,KAAK,SAAS,aACb,mBAAmB,iBAAiB,mBAAmB,QACxD;AACA,oBAAc,KAAK,IAAI;AAAA,IACzB;AACA,QAAI,CAAC,YAAY,KAAK,EAAE,KAAK,CAAC,mBAAoB,QAAO;AAAA,EAC3D,CAAC;AACD,SAAO;AACT;AASO,IAAM,oBAAoB,CAAC,aAA8B;AAE9D,MAAI,CAAC,YAAY,SAAS,KAAK,MAAM,GAAI,QAAO;AAGhD,QAAM,oBAAoB;AAC1B,SAAO,CAAC,kBAAkB,KAAK,QAAQ;AACzC;AAEO,IAAM,0BAA0B,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,MAIe;AACb,MAAI,CAAC,kBAAkB,QAAQ,EAAG,QAAO;AACzC,QAAM,cAAc,kBAAK,KAAK,kBAAK,QAAQ,gBAAgB,GAAG,QAAQ;AAEtE,QAAM,gBAAgB,MAAM,WAAW;AACvC,MAAI,cAAe,QAAO;AAC1B,SAAO;AACT;AACO,IAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,QAAM,gBAAY;AAAA,IAChB,gBAAgB,IAAI,CAACC,UAASA,MAAK,MAAM,GAAG,CAAC;AAAA,EAC/C;AACA,QAAM,aAAa,EAAE,GAAG,MAAM;AAC9B,aAAW,YAAY,WAAW;AAChC,UAAM,eAAe,SAAS,KAAK,GAAG;AACtC,UAAM,eAAe,WAAW,YAAY;AAC5C,UAAM,kBAAkB,kBAAK;AAAA,MAC3B;AAAA,MACA,kBAAK,SAAS,YAAY;AAAA,IAC5B;AACA,QAAI,CAAC,aAAc;AACnB,UAAM,kBAAkB,KACrB,KAAK,YAAY,EACjB,IAAI,CAAC,SAAS,KAAK,YAAY,IAAI,KAAK,EAAE,CAAC;AAC9C,eAAW,kBAAkB,iBAAiB;AAC5C,UAAI,CAAC,eAAgB;AACrB,YAAM,oBAAoB,eAAe;AAAA,QACvC;AAAA,QACA;AAAA,MACF;AACA,YAAM,iBAAiB,wBAAwB;AAAA,QAC7C,UAAU,kBAAK,SAAS,cAAc;AAAA,QACtC,kBAAkB;AAAA,QAClB;AAAA,MACF,CAAC;AACD,UAAI,gBAAgB;AAClB,mBAAW,iBAAiB,IAAI,WAAW,cAAc;AACzD,eAAO,WAAW,cAAc;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AACO,IAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,QAAM,YAAY,KAAK;AAAA,IACrB;AAAA,IACA,CAAC,SAAS,KAAK,OAAO,YAAY,CAAC;AAAA,EACrC;AACA,MAAI,CAAC,UAAW;AAGhB,QAAM,oBAAoB,KAAK;AAAA,IAC7B;AAAA,IACA,UAAU,MAAM,GAAG,UAAU,SAAS,CAAC;AAAA,EACzC;AACA,QAAM,wBAAwB,KAAK,YAAY,IAAI,kBAAkB,EAAE;AACvE,MAAI,CAAC,sBAAuB;AAE5B,QAAM,kBAAkB,YACrB,IAAI,CAAC,OAAO,KAAK,YAAY,IAAI,EAAE,CAAC,EACpC,OAAO,CAACA,UAAyB,QAAQA,KAAI,CAAC;AACjD,SAAO,oBAAoB;AAAA,IACzB;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,EACF,CAAC;AACH;AACO,IAAM,cAAc,CACzB,MACA,MACA,uBAC2B;AAC3B,QAAM,WAAmC,CAAC;AAC1C,OAAK,MAAM,MAAM,CAACC,OAAM,cAAc;AACpC,QAAI,oBAAoB;AACtB,eAASA,MAAK,EAAE,IAAI,KAAK,IAAI,UAAU,SAAS,GAAG,CAAC;AAAA,IACtD,OAAO;AACL,eAASA,MAAK,EAAE,IAAI;AAAA,IACtB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AACO,IAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMmB;AACjB,QAAM,iBAAiB,EAAE,GAAG,YAAY;AACxC,QAAM,QAAQ,CAACA,OAAiBC,cAAsB;AACpD,QAAI,CAAC,WAAY,QAAO,CAAC;AAEzB,QAAID,MAAK,OAAO,cAAc,GAAI,QAAO,CAAC;AAC1C,QAAI,CAACC,WAAU;AAEb,YAAM,WAAW,KAAK,YAAYD,OAAM,CAAC,CAAC;AAC1C,eAAS,QAAQ,CAAC,UAAU,MAAM,OAAO,KAAK,CAAC;AAAA,IACjD;AACA,mBAAeA,MAAK,EAAE,IAAIC;AAAA,EAC5B;AACA,QAAM,MAAM,QAAQ;AACpB,SAAO;AACT;AACO,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,MAIgB;AACd,QAAM,gBAAgB,YAAY,QAAQ,CAAC,gBAAgB;AACzD,UAAM,YAAY,KAAK,mBAAmB;AAAA,MACxC,CAAC,SAAS,KAAK,OAAO;AAAA,IACxB;AACA,QAAI,CAAC,UAAW,QAAO,CAAC;AACxB,WAAO,KAAK,KAAK,SAAS;AAAA,EAC5B,CAAC;AACD,QAAM,mBAAmB,IAAI;AAAA,IAC3B,cAAc,IAAI,CAAC,SAAS,KAAK,YAAY,IAAI,KAAK,EAAE,CAAC;AAAA,EAC3D;AAEA,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,iBAAiB,IAAI,GAAG,CAAC;AAAA,EACpE;AACF;AACO,IAAM,wBAAwB,CAAC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,QAAM,iBAAiB,KAAK,YAAY,IAAI,YAAY;AACxD,MAAI,CAAC,eAAgB,QAAO;AAE5B,QAAM,kBAAkB,cACrB,IAAI,CAAC,OAAO,KAAK,YAAY,IAAI,EAAE,CAAC,EACpC,OAAO,CAACF,UAAyB,QAAQA,KAAI,CAAC;AAEjD,SAAO,oBAAoB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AACO,IAAM,uBAAuB,CAAC,UAAoB,aAAqB;AAC5E,QAAM,OAAO,oBAAoB,QAAQ;AAEzC,QAAM,YAAY,KAAK;AAAA,IACrB;AAAA,IACA,CAAC,SAAS,KAAK,OAAO;AAAA,EACxB;AAEA,MAAI,CAAC,UAAW,QAAO,CAAC,aAAa;AAErC,SAAO,KAAK,WAAW,eAAe,SAAS;AACjD;;;AFpMA,IAAM,6BAAyB;AAAA,EAC7B,CAAC,EAAE,MAAM,SAAS,MAA2C;AAC3D,UAAM,YAAQ,wCAAS,KAAK,SAAS,UAAU,KAAK,UAAU,MAAS;AACvE,UAAM,SAAS,KAAK,OAAO,cAAc;AACzC,UAAM,WAAW,KAAK,SAAS;AAC/B,WACE,8BAAAG,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,aAAa,OAAO;AAAA,QACpB,UAAU,SAAS,aAAa,WAAW,eAAe;AAAA,QAC1D,KAAK,OAAO;AAAA,QACZ;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AA+EO,IAAM,sBAAkB;AAAA,MAC7B,yBAAqD,SAASC,iBAC5D;AAAA,IACE;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf;AAAA,IACA,aAAa;AAAA,IACb,YAAY;AAAA,IACZ;AAAA,IACA,aAAa,cAAc;AAAA,IAC3B;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,aAAa;AAAA,IACb,WAAW;AAAA,IACX;AAAA,EACF,GACA,KACA;AACA,UAAM,WAAO,sBAAQ,MAAM,oBAAoB,KAAK,GAAG,CAAC,KAAK,CAAC;AAC9D,UAAM,CAAC,UAAU,WAAW,QAAI;AAAA,MAC9B;AAAA,IACF;AACA,UAAM,uBAAmB;AAAA,MACvB,MACE,oBAAoB;AAAA,QAClB,GAAG;AAAA,QACH,GAAI,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,CAAC;AAAA,MACnD,CAAC;AAAA,MACH,CAAC,OAAO,QAAQ;AAAA,IAClB;AACA,UAAM,CAAC,aAAa,cAAc,QAAI;AAAA,MACpC;AAAA,QACE,cAAc,CAAC;AAAA,QACf,OAAO;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AACA,UAAM,mBAAe,+CAAgB;AACrC,UAAM,aAAS,yCAAU;AACzB,UAAM,CAAC,aAAa,cAAc,QAAI,uBAAsB,CAAC,CAAC;AAC9D,UAAM,mBAAe;AAAA,MACnB,MACE,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACH;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,UAAM,eAAW;AAAA,MACf,MAAM,YAAY,eAAe,kBAAkB,kBAAkB;AAAA,MACrE,CAAC,kBAAkB,kBAAkB;AAAA,IACvC;AACA,UAAM,oBAAgB,qBAAsB,IAAI;AAChD,UAAM,yBAAqB;AAAA,MACzB,MACE,iBAAiB,mBAAmB;AAAA,QAAO,CAAC,SAC1C,YAAY,SAAS,KAAK,EAAE;AAAA,MAC9B;AAAA,MACF,CAAC,kBAAkB,WAAW;AAAA,IAChC;AAEA,UAAM,mBAAe,4BAAQ,oBAAoB,CAAC,SAAS,KAAK,IAAI;AACpE,UAAM,qBAAqB,aAAa,SAAS,CAAC;AAClD,UAAM,sBAAsB,aAAa,UAAU,CAAC;AAEpD,UAAM,qBAAqB,mBAAmB,WAAW;AACzD,UAAM,qBACJ,mBAAmB,SAAS,KAC5B,mBAAmB,WAAW,mBAAmB;AACnD,UAAM,sBACJ,oBAAoB,SAAS,KAC7B,oBAAoB,WAAW,mBAAmB;AACpD,UAAM,2BACJ,uBAAuB,oBAAoB,WAAW;AACxD,UAAM,0BACJ,sBAAsB,mBAAmB,WAAW;AACtD,UAAM,eAAe,YAAY,SAAS,cAAc,EAAE;AAC1D,UAAM,qBAAqB,mBAAmB,MAAM,CAAC,SAAS;AAC5D,YAAM,WAAW,KAAK,YAAY,IAAI,KAAK,EAAE;AAC7C,YAAM,oBAAoB,KAAK,YAAY,IAAI,YAAY,CAAC,CAAC;AAC7D,UAAI,CAAC,YAAY,CAAC,kBAAmB,QAAO;AAC5C,aAAO,SAAS,WAAW,kBAAK,QAAQ,iBAAiB,CAAC;AAAA,IAC5D,CAAC;AAGD,UAAM,eAAW,sBAAQ,MAAM;AAC7B,UAAI,aAAa,QAAQ;AACvB,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,GAAG,CAAC,UAAU,IAAI,CAAC;AAEnB,gCAAU,MAAM;AACd,UAAI,iBAAiB;AACnB,uBAAe,eAAe;AAAA,MAChC;AAAA,IACF,GAAG,CAAC,eAAe,CAAC;AAGpB,UAAM,qBAAiB;AAAA,MACrB,CAAC,SAAoB;AACnB,YAAI,CAAC,WAAY,QAAO;AACxB,YAAI,KAAK,SAAS,SAAU,QAAO;AACnC,YAAI,KAAK,OAAO,cAAc,GAAI,QAAO;AACzC,eAAO,YAAY,KAAK,EAAE,KAAK;AAAA,MACjC;AAAA,MACA,CAAC,aAAa,UAAU;AAAA,IAC1B;AAEA,UAAM,mBAAe;AAAA,MACnB,CAACC,iBAA0B;AACzB,cAAM,WAAW,iBAAiB;AAAA,UAChC,aAAAA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,uBAAe,CAAC,cAAc,EAAE,CAAC;AACjC,iBAAS,EAAE,MAAM,gBAAgB,WAAW,KAAK,IAAI,EAAE,GAAG,QAAQ;AAAA,MACpE;AAAA,MACA,CAAC,OAAO,UAAU,gBAAgB,IAAI;AAAA,IACxC;AAEA,UAAM,eAAW;AAAA,MACf,CAAC,cAAyB,YAAoB;AAC5C,YAAI,CAAC,UAAW;AAChB,cAAM,mBAAmB,iBAAiB,YAAY;AAAA,UACpD,aAAa;AAAA,QACf;AACA,YAAI,CAAC,iBAAkB;AACvB,cAAM,oBAAoB;AAAA,UACxB,GAAG;AAAA,UACH,GAAI,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,CAAC;AAAA,QACnD;AACA,cAAM,gBAAgB,wBAAwB;AAAA,UAC5C,UAAU;AAAA,UACV;AAAA,UACA,OAAO;AAAA,QACT,CAAC;AACD,YAAI,CAAC,eAAe;AAClB,sBAAY,MAAS;AACrB;AAAA,QACF;AACA,cAAM,aAAa,EAAE,GAAG,MAAM;AAC9B,eAAO,WAAW,gBAAgB;AAClC;AAAA,UACE,EAAE,MAAM,qBAAqB,WAAW,KAAK,IAAI,EAAE;AAAA,UACnD;AAAA,YACE,GAAG;AAAA,YACH,CAAC,kBAAK,KAAK,kBAAK,QAAQ,gBAAgB,GAAG,OAAO,CAAC,GAAG;AAAA,UACxD;AAAA,QACF;AACA,oBAAY,MAAS;AAAA,MACvB;AAAA,MACA,CAAC,OAAO,WAAW,UAAU,UAAU,iBAAiB,WAAW;AAAA,IACrE;AAEA,UAAM,sBAAkB;AAAA,MACtB,CAAC,oBAA4B;AAC3B,cAAM,YAAY,kBAAkB;AACpC,cAAM,oBAAoB,KAAK,YAAY,IAAI,eAAe;AAC9D,YAAI,CAAC,kBAAmB;AACxB,oBAAY;AAAA,UACV,kBAAK,KAAK,mBAAmB,qBAAqB;AAAA,UAClD;AAAA,QACF,CAAC;AACD,mBAAW,MAAM;AACf,wBAAc,SAAS,SAAS,UAAU,EAAE;AAAA,QAC9C,GAAG,EAAE;AAAA,MACP;AAAA,MACA,CAAC,IAAI;AAAA,IACP;AAEA,UAAM,oBAAgB;AAAA,MACpB,CAAC,oBAA6B;AAC5B,cAAM,UAAU,gBAAgB;AAAA,UAC9B,SAAS;AAAA,UACT,UAAU;AAAA,QACZ,CAAC;AACD,cAAM,oBAAoB,KAAK,YAAY;AAAA,UACzC,mBAAmB,cAAc;AAAA,QACnC;AACA,YAAI,CAAC,kBAAmB;AACxB,oBAAY;AAAA,UACV,kBAAK,KAAK,mBAAmB,qBAAqB;AAAA,UAClD;AAAA,QACF,CAAC;AACD,mBAAW,MAAM;AACf,wBAAc,SAAS,SAAS,QAAQ,EAAE;AAAA,QAC5C,GAAG,EAAE;AAAA,MACP;AAAA,MACA,CAAC,KAAK,WAAW;AAAA,IACnB;AAEA,UAAM,0BAAsB;AAAA,MAC1B,CAACA,iBAA0B;AACzB,cAAM,WAAW,cAAc;AAAA,UAC7B;AAAA,UACA;AAAA,UACA,aAAAA;AAAA,QACF,CAAC;AACD,YAAI,CAAC,SAAU;AACf,iBAAS,EAAE,MAAM,cAAc,WAAW,KAAK,IAAI,EAAE,GAAG,QAAQ;AAAA,MAClE;AAAA,MACA,CAAC,OAAO,MAAM,QAAQ;AAAA,IACxB;AAEA,UAAM,mBAAe;AAAA,MACnB,OAAO,eAAuB;AAC5B,YAAI;AACF,gBAAM,QAAQ,UAAM,mCAAS,EAAE,UAAU,KAAK,CAAC;AAC/C,cAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,EAAG;AAE3D,gBAAM,aAAa,KAAK,YAAY,IAAI,UAAU;AAClD,cAAI,CAAC,WAAY;AAGjB,gBAAM,iBAAiB,MAAM,IAAI,OAAO,SAAS;AAC/C,kBAAM,QAAQ,MAAM,aAAa,OAAO,IAAI;AAC5C,kBAAM,YAAY,kBAAK,KAAK,YAAY,kBAAK,SAAS,KAAK,IAAI,CAAC;AAChE,mBAAO;AAAA,cACL;AAAA,cACA,OAAO,iBAAiB,EAAE,SAAS,MAAM,GAAG,CAAC;AAAA,YAC/C;AAAA,UACF,CAAC;AAED,gBAAM,cAAc,MAAM,QAAQ,IAAI,cAAc;AAEpD;AAAA,YACE,EAAE,MAAM,mBAAmB,WAAW,KAAK,IAAI,EAAE;AAAA,YACjD;AAAA,cACE,GAAG;AAAA,cACH,GAAG,OAAO;AAAA,gBACR,YAAY,IAAI,CAAC,EAAE,WAAW,MAAM,MAAM,CAAC,WAAW,KAAK,CAAC;AAAA,cAC9D;AAAA,YACF;AAAA,UACF;AAAA,QACF,SAAS,OAAO;AACd,kBAAQ,MAAM,2BAA2B,KAAK;AAAA,QAChD;AAAA,MACF;AAAA,MACA,CAAC,KAAK,aAAa,UAAU,OAAO,YAAY;AAAA,IAClD;AAEA,UAAM,qBAAiB;AAAA,MACrB,OAAO,kBAA+B;AACpC,cAAM,mBAAmB,cACtB,OAAO,CAAC,SAAS,KAAK,SAAS,OAAO,EACtC,IAAI,OAAO,SAAS;AACnB,gBAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO;AACtD,cAAI,CAAC,OAAO,IAAK;AACjB,qBAAO,gCAAY,MAAM,KAAK,KAAK,aAAa,KAAK,EAAE,CAAC;AAAA,QAC1D,CAAC;AAEH,cAAM,QAAQ,IAAI,gBAAgB;AAAA,MACpC;AAAA,MACA,CAAC,QAAQ,IAAI;AAAA,IACf;AAEA,UAAM,oBAAgB;AAAA,MACpB,OAAO,kBAA+B;AACpC,cAAM,kBAAkB,cACrB,OAAO,CAAC,SAAS,KAAK,SAAS,OAAO,EACtC,IAAI,OAAO,SAAS;AACnB,gBAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO;AACtD,cAAI,CAAC,OAAO,IAAK;AACjB,iBAAO,QAAQ,KAAK,MAAM,KAAK,QAAQ;AAAA,QACzC,CAAC;AAEH,cAAM,QAAQ,IAAI,eAAe;AAAA,MACnC;AAAA,MACA,CAAC,MAAM;AAAA,IACT;AAEA,UAAM,oBAAgB;AAAA,MACpB,OAAO,iBAA4B;AACjC,YAAI;AACF,gBAAM,OAAO,UAAM,mCAAS;AAC5B,cAAI,CAAC,KAAM;AAEX,gBAAM,QAAQ,MAAM,aAAa,OAAO,IAAI;AAC5C,gBAAM,UAAU;AAChB,gBAAM,cAAc,KAAK,YAAY,IAAI,QAAQ,EAAE;AACnD,cAAI,CAAC,eAAe,QAAQ,SAAS,QAAS;AAC9C;AAAA,YACE,EAAE,MAAM,sBAAsB,WAAW,KAAK,IAAI,EAAE;AAAA,YACpD;AAAA,cACE,GAAG;AAAA,cACH,CAAC,WAAW,GAAG,iBAAiB;AAAA,gBAC9B,GAAG;AAAA,gBACH,SAAS,MAAM;AAAA,cACjB,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF,SAAS,OAAO;AACd,kBAAQ,MAAM,0BAA0B,KAAK;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,CAAC,OAAO,UAAU,cAAc,IAAI;AAAA,IACtC;AAEA,UAAM,mBAAe;AAAA,MACnB,CAAC,mBAA2B;AAC1B,sBAAc,SAAS,SAAS,cAAc;AAAA,MAChD;AAAA,MACA,CAAC,aAAa;AAAA,IAChB;AAEA,UAAM,kCAA8B;AAAA,MAClC,CAAC,YAAuB,eAA0B;AAChD,cAAM,iBAAiB,KAAK,YAAY,IAAI,WAAW,EAAE;AACzD,cAAM,iBAAiB,KAAK,YAAY,IAAI,WAAW,EAAE;AACzD,YAAI,CAAC,kBAAkB,CAAC,eAAgB;AACxC,cAAM,WAAW,sBAAsB;AAAA,UACrC,eAAe,CAAC,WAAW,EAAE;AAAA,UAC7B,cAAc,WAAW;AAAA,UACzB;AAAA,UACA;AAAA,QACF,CAAC;AACD;AAAA,UACE;AAAA,YACE,MAAM;AAAA,YACN,WAAW,KAAK,IAAI;AAAA,UACtB;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAC,OAAO,UAAU,IAAI;AAAA,IACxB;AAEA,UAAM,4BAAwB,sBAAQ,MAAM;AAC1C,iBAAO;AAAA,QACL;AAAA,UACE,CAAC,gBACC,sBAAsB;AAAA,YACpB,OAAO;AAAA,YACP,OAAO;AAAA,YACP,MAAM,8BAAAF,QAAA,cAAC,iCAAU;AAAA,UACnB;AAAA,UACF,2BAA2B;AAAA,YACzB,OAAO;AAAA,YACP,OAAO;AAAA,YACP,MAAM,8BAAAA,QAAA,cAAC,kCAAW;AAAA,UACpB;AAAA,UACA,CAAC,gBAAgB;AAAA,YACf,OAAO;AAAA,YACP,OAAO;AAAA,YACP,MAAM,8BAAAA,QAAA,cAAC,iCAAU;AAAA,UACnB;AAAA,QACF;AAAA,QACA;AAAA,UACE,4BAA4B;AAAA,YAC1B,OAAO;AAAA,YACP,OAAO;AAAA,YACP,MAAM,8BAAAA,QAAA,cAAC,kCAAW;AAAA,UACpB;AAAA,UACA,4BAA4B;AAAA,YAC1B,OAAO;AAAA,YACP,OAAO;AAAA,YACP,MAAM,8BAAAA,QAAA,cAAC,kCAAW;AAAA,UACpB;AAAA,UACA,sBACE,KAAK,mBAAmB,SAAS,KAAK;AAAA,YACpC,OAAO;AAAA,YACP,OAAO;AAAA,YACP,MAAM,8BAAAA,QAAA,cAAC,oCAAa;AAAA,UACtB;AAAA,UACF,2BAA2B;AAAA,YACzB,OAAO;AAAA,YACP,OAAO;AAAA,YACP,MAAM,8BAAAA,QAAA,cAAC,2CAAoB;AAAA,UAC7B;AAAA,QACF;AAAA,QACA;AAAA,UACE,CAAC,gBACC,sBAAsB;AAAA,YACpB,OAAO;AAAA,YACP,OAAO;AAAA,YACP,MAAM,8BAAAA,QAAA,cAAC,iCAAU;AAAA,UACnB;AAAA,QACJ;AAAA,MACF;AAAA,IACF,GAAG;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK,mBAAmB;AAAA,MACxB;AAAA,IACF,CAAC;AAED,UAAM,uBAAmB;AAAA,MACvB,OAAO,QAAoB,kBAA+B;AACxD,YAAI,cAAc,WAAW,EAAG;AAEhC,gBAAQ,QAAQ;AAAA,UACd,KAAK;AACH,yBAAa,cAAc,CAAC,EAAE,EAAE;AAChC;AAAA,UACF,KAAK;AACH,yBAAa,WAAW;AACxB;AAAA,UACF,KAAK;AACH,0BAAc,cAAc,CAAC,CAAC;AAC9B;AAAA,UACF,KAAK;AACH,yBAAa,cAAc,CAAC,EAAE,EAAE;AAChC;AAAA,UACF,KAAK;AACH,4BAAgB,cAAc,CAAC,EAAE,EAAE;AACnC;AAAA,UACF,KAAK;AACH,0BAAc,aAAa;AAC3B;AAAA,UACF,KAAK;AACH,2BAAe,aAAa;AAC5B;AAAA,UACF,KAAK;AACH,gCAAoB,WAAW;AAC/B;AAAA,QACJ;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,wBAAoB;AAAA,MACxB,CAAC,MAAiB,aAAsB;AACtC;AAAA,UAAe,CAAC,SACd,kBAAkB;AAAA,YAChB;AAAA,YACA;AAAA,YACA;AAAA,YACA,aAAa;AAAA,YACb;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,CAAC,YAAY,IAAI;AAAA,IACnB;AAEA,UAAM,mBAAe,sBAAQ,MAAM;AACjC,UAAI,iBAAkB,QAAO;AAC7B,aAAO,CAAC;AAAA,QACN;AAAA,QACA;AAAA,MACF,MACE,8BAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,UAAU,CAAC,WAAW,iBAAiB,QAAQ,kBAAkB;AAAA,UACjE;AAAA,UACA;AAAA,UACA,OAAO;AAAA,YACL,iBAAiB,WACb,iCAAQ,OAAO,gBACf;AAAA,UACN;AAAA;AAAA,MACF;AAAA,IAEJ,GAAG;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,0CAAoB,KAAK,OAAO;AAAA,MAC9B,QAAQ,CAAC,eAAuB,aAAa,UAAU;AAAA,MACvD,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT,eAAe;AAAA,MACf,SAAS;AAAA,MACT,SAAS;AAAA,MACT,uBAAuB;AAAA,IACzB,EAAE;AAEF,WACE,8BAAAA,QAAA,4BAAAA,QAAA,gBACE,8BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,SAAS;AAAA,QAChB,OACE,8BAAAA,QAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,UAAU,MAAM,aAAa,cAAc,EAAE;AAAA;AAAA,UAE5C;AAAA,QACH;AAAA,QAEF;AAAA;AAAA,MAEA,8BAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA,MAAM;AAAA,UACN,OAAO,CAAC,SAAS,KAAK;AAAA,UACtB,SAAS,CAAC,SAAS;AACjB,gBAAI,KAAK,OAAO,WAAW,CAAC,EAAE,IAAI;AAChC,qBAAO;AAAA,YACT;AACA,mBAAO,iBAAiB,aAAa,KAAK,EAAE;AAAA,UAC9C;AAAA,UACA;AAAA,UACA;AAAA,UACA,gBAAgB,CAAC,SAAS;AACxB,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK;AACH,uBAAO;AAAA,cACT,KAAK;AAAA,cACL,KAAK;AACH,uBAAO;AAAA,YACX;AAAA,UACF;AAAA,UACA,aAAa;AAAA,UACb,aAAa;AAAA,UACb,cAAc,CAAC,SAAS;AACtB,gBAAI,KAAK,OAAO,cAAc,GAAI,QAAO;AACzC,mBAAO;AAAA,UACT;AAAA,UACA,UAAU,CAAC,SAAS,SAAS,KAAK,EAAE;AAAA,UACpC,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,mBAAmB;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,iBAAiB,CAAC,UAAU,8BAAAA,QAAA,cAAC,0BAAwB,GAAG,OAAO;AAAA,UAC/D;AAAA,UACA,cAAc,CAAC,MAAM,aAAa;AAChC,gBAAI,KAAK,SAAS,QAAS,QAAO;AAClC,kBAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO;AACtD,gBAAI,CAAC,MAAO,QAAO;AACnB,mBACE,8BAAAA,QAAA,cAAC,+CAAmB,aAChB,MAAM,OAAO,MAAM,QAAQ,CAAC,GAAE,IAClC;AAAA,UAEJ;AAAA,UACA,kBAAkB,MAChB,mBAAmB,KAAK,8BAAAA,QAAA,cAAC,qDAAuB;AAAA,UAElD,qBAAoB;AAAA,UACpB,0BAA0B,CAAC,cAAsB;AAC/C,kBAAM,OAAO,aAAa,SAAS;AACnC,kBAAM,cAAc,aAAa;AAAA,cAC/B,CAAC,MAAM,EAAE,OAAO,KAAK,iBAAiB,KAAK,EAAE;AAAA,YAC/C;AACA,mBAAO,gBAAgB,KAAK,SAAY;AAAA,UAC1C;AAAA,UACA,aAAa,CACX,aACA,aACA,aACG;AACH,kBAAM,aAAa,aAAa,WAAW;AAC3C,kBAAM,aAAa,aAAa,WAAW;AAE3C,gBAAI,aAAa,YAAY,WAAW,SAAS,SAAS;AACxD,qBAAO;AAAA,YACT;AACA,kBAAM,aAAa,KAAK;AAAA,cACtB;AAAA,cACA,CAAC,SAAS,KAAK,OAAO,WAAW;AAAA,YACnC;AACA,kBAAM,aAAa,KAAK;AAAA,cACtB;AAAA,cACA,CAAC,SAAS,KAAK,OAAO,WAAW;AAAA,YACnC;AAGA,gBAAI,CAAC,cAAc,CAAC,WAAY,QAAO;AACvC,oBACE,gCAAY,YAAY,WAAW,MAAM,GAAG,WAAW,MAAM,CAAC,GAC9D;AACA,qBAAO;AAAA,YACT;AAEA,mBAAO;AAAA,UACT;AAAA,UACA,YAAY,CACV,aACA,aACA,aACG;AACH,kBAAM,aAAa,aAAa,WAAW;AAC3C,kBAAM,aAAa,aAAa,WAAW;AAC3C,gBAAI,aAAa,UAAU;AACzB,0CAA4B,YAAY,UAAU;AAAA,YACpD;AAAA,UACF;AAAA,UACA,aAAa,OAAO,UAAoC;AACtD,kBAAM,eAAe;AAErB,kBAAM,QAAQ,MAAM,KAAK,MAAM,aAAa,KAAK;AACjD,gBAAI,MAAM,WAAW,EAAG;AAExB,gBAAI;AAEF,oBAAM,iBAAiB,MAAM,IAAI,OAAO,SAAS;AAC/C,sBAAM,QAAQ,MAAM,aAAa,OAAO,IAAI;AAC5C,uBAAO;AAAA,kBACL,OAAO,iBAAiB;AAAA,oBACtB,SAAS,MAAM;AAAA,kBACjB,CAAC;AAAA,kBACD,MAAM,KAAK;AAAA,gBACb;AAAA,cACF,CAAC;AAED,oBAAM,gBAAgB,MAAM,QAAQ,IAAI,cAAc;AACtD,oBAAM,eAAe,KAAK,YAAY,IAAI,UAAU;AACpD,kBAAI,CAAC,aAAc;AAEnB;AAAA,gBACE,EAAE,MAAM,mBAAmB,WAAW,KAAK,IAAI,EAAE;AAAA,gBACjD;AAAA,kBACE,GAAG;AAAA,kBACH,GAAG,OAAO;AAAA,oBACR,cAAc,IAAI,CAAC,SAAS;AAAA,sBAC1B,kBAAK,KAAK,cAAc,KAAK,IAAI;AAAA,sBACjC,KAAK;AAAA,oBACP,CAAC;AAAA,kBACH;AAAA,gBACF;AAAA,cACF;AAAA,YACF,SAAS,OAAO;AACd,sBAAQ,MAAM,mCAAmC,KAAK;AAAA,YACxD;AAAA,UACF;AAAA;AAAA,MACF;AAAA,IACF,CACF;AAAA,EAEJ,CAAC;AACH;","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"]}
|