UNPKG

sandpack-file-explorer

Version:

A file explorer for Codesandbox's 'sandpack' code editor

1,403 lines (1,372 loc) 473 kB
'use strict'; var sandpackReact = require('@codesandbox/sandpack-react'); var React4 = require('react'); var jsxRuntime = require('react/jsx-runtime'); function _interopNamespaceDefault(e) { var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n.default = e; return Object.freeze(n); } var React4__namespace = /*#__PURE__*/_interopNamespaceDefault(React4); var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; }; var __commonJS = (cb2, mod) => function __require() { return mod || (0, cb2[__getOwnPropNames(cb2)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // node_modules/tslib/tslib.js var require_tslib = __commonJS({ "node_modules/tslib/tslib.js"(exports, module) { var __extends2; var __assign3; var __rest2; var __decorate2; var __param2; var __metadata2; var __awaiter2; var __generator2; var __exportStar2; var __values2; var __read2; var __spread2; var __spreadArrays2; var __spreadArray3; var __await2; var __asyncGenerator2; var __asyncDelegator2; var __asyncValues2; var __makeTemplateObject2; var __importStar2; var __importDefault2; var __classPrivateFieldGet2; var __classPrivateFieldSet2; var __classPrivateFieldIn2; var __createBinding2; (function(factory) { var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; if (typeof define === "function" && define.amd) { define("tslib", ["exports"], function(exports2) { factory(createExporter(root, createExporter(exports2))); }); } else if (typeof module === "object" && typeof module.exports === "object") { factory(createExporter(root, createExporter(module.exports))); } else { factory(createExporter(root)); } function createExporter(exports2, previous) { if (exports2 !== root) { if (typeof Object.create === "function") { Object.defineProperty(exports2, "__esModule", { value: true }); } else { exports2.__esModule = true; } } return function(id2, v) { return exports2[id2] = previous ? previous(id2, v) : v; }; } })(function(exporter) { var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d, b2) { d.__proto__ = b2; } || function(d, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d[p] = b2[p]; }; __extends2 = function(d, b2) { if (typeof b2 !== "function" && b2 !== null) throw new TypeError("Class extends value " + String(b2) + " is not a constructor or null"); extendStatics(d, b2); function __() { this.constructor = d; } d.prototype = b2 === null ? Object.create(b2) : (__.prototype = b2.prototype, new __()); }; __assign3 = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; __rest2 = function(s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; __decorate2 = function(decorators, target, key, desc) { var c2 = arguments.length, r = c2 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c2 < 3 ? d(r) : c2 > 3 ? d(target, key, r) : d(target, key)) || r; return c2 > 3 && r && Object.defineProperty(target, key, r), r; }; __param2 = function(paramIndex, decorator) { return function(target, key) { decorator(target, key, paramIndex); }; }; __metadata2 = function(metadataKey, metadataValue) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); }; __awaiter2 = function(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function(resolve) { resolve(value); }); } return new (P || (P = Promise))(function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; __generator2 = function(thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function(v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; __exportStar2 = function(m, o) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding2(o, m, p); }; __createBinding2 = Object.create ? function(o, m, k, k2) { if (k2 === void 0) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); } : function(o, m, k, k2) { if (k2 === void 0) k2 = k; o[k2] = m[k]; }; __values2 = function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function() { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; __read2 = function(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; __spread2 = function() { for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read2(arguments[i])); return ar; }; __spreadArrays2 = function() { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a2 = arguments[i], j = 0, jl = a2.length; j < jl; j++, k++) r[k] = a2[j]; return r; }; __spreadArray3 = function(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; __await2 = function(v) { return this instanceof __await2 ? (this.v = v, this) : new __await2(v); }; __asyncGenerator2 = function(thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { return this; }, i; function verb(n) { if (g[n]) i[n] = function(v) { return new Promise(function(a2, b2) { q.push([n, v, a2, b2]) > 1 || resume(n, v); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } function step(r) { r.value instanceof __await2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; __asyncDelegator2 = function(o) { var i, p; return i = {}, verb("next"), verb("throw", function(e) { throw e; }), verb("return"), i[Symbol.iterator] = function() { return this; }, i; function verb(n, f) { i[n] = o[n] ? function(v) { return (p = !p) ? { value: __await2(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } }; __asyncValues2 = function(o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; return m ? m.call(o) : (o = typeof __values2 === "function" ? __values2(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { return this; }, i); function verb(n) { i[n] = o[n] && function(v) { return new Promise(function(resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v2) { resolve({ value: v2, done: d }); }, reject); } }; __makeTemplateObject2 = function(cooked, raw) { if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } return cooked; }; var __setModuleDefault = Object.create ? function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); } : function(o, v) { o["default"] = v; }; __importStar2 = function(mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) { for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding2(result, mod, k); } __setModuleDefault(result, mod); return result; }; __importDefault2 = function(mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; __classPrivateFieldGet2 = function(receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; __classPrivateFieldSet2 = function(receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value; }; __classPrivateFieldIn2 = function(state, receiver) { if (receiver === null || typeof receiver !== "object" && typeof receiver !== "function") throw new TypeError("Cannot use 'in' operator on non-object"); return typeof state === "function" ? receiver === state : state.has(receiver); }; exporter("__extends", __extends2); exporter("__assign", __assign3); exporter("__rest", __rest2); exporter("__decorate", __decorate2); exporter("__param", __param2); exporter("__metadata", __metadata2); exporter("__awaiter", __awaiter2); exporter("__generator", __generator2); exporter("__exportStar", __exportStar2); exporter("__createBinding", __createBinding2); exporter("__values", __values2); exporter("__read", __read2); exporter("__spread", __spread2); exporter("__spreadArrays", __spreadArrays2); exporter("__spreadArray", __spreadArray3); exporter("__await", __await2); exporter("__asyncGenerator", __asyncGenerator2); exporter("__asyncDelegator", __asyncDelegator2); exporter("__asyncValues", __asyncValues2); exporter("__makeTemplateObject", __makeTemplateObject2); exporter("__importStar", __importStar2); exporter("__importDefault", __importDefault2); exporter("__classPrivateFieldGet", __classPrivateFieldGet2); exporter("__classPrivateFieldSet", __classPrivateFieldSet2); exporter("__classPrivateFieldIn", __classPrivateFieldIn2); }); } }); // node_modules/@emotion/memoize/dist/memoize.esm.js function memoize2(fn) { var cache2 = {}; return function(arg) { if (cache2[arg] === void 0) cache2[arg] = fn(arg); return cache2[arg]; }; } var memoize_esm_default; var init_memoize_esm = __esm({ "node_modules/@emotion/memoize/dist/memoize.esm.js"() { memoize_esm_default = memoize2; } }); // node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js var is_prop_valid_esm_exports = {}; __export(is_prop_valid_esm_exports, { default: () => is_prop_valid_esm_default }); var reactPropsRegex, index, is_prop_valid_esm_default; var init_is_prop_valid_esm = __esm({ "node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js"() { init_memoize_esm(); reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; index = memoize_esm_default( function(prop) { return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111 && prop.charCodeAt(1) === 110 && prop.charCodeAt(2) < 91; } ); is_prop_valid_esm_default = index; } }); // node_modules/debounce/index.js var require_debounce = __commonJS({ "node_modules/debounce/index.js"(exports, module) { function debounce(func, wait, immediate) { var timeout, args, context, timestamp, result; if (null == wait) wait = 100; function later() { var last = Date.now() - timestamp; if (last < wait && last >= 0) { timeout = setTimeout(later, wait - last); } else { timeout = null; if (!immediate) { result = func.apply(context, args); context = args = null; } } } var debounced = function() { context = this; args = arguments; timestamp = Date.now(); var callNow = immediate && !timeout; if (!timeout) timeout = setTimeout(later, wait); if (callNow) { result = func.apply(context, args); context = args = null; } return result; }; debounced.clear = function() { if (timeout) { clearTimeout(timeout); timeout = null; } }; debounced.flush = function() { if (timeout) { result = func.apply(context, args); context = args = null; clearTimeout(timeout); timeout = null; } }; return debounced; } debounce.debounce = debounce; module.exports = debounce; } }); // node_modules/fast-deep-equal/index.js var require_fast_deep_equal = __commonJS({ "node_modules/fast-deep-equal/index.js"(exports, module) { module.exports = function equal2(a2, b2) { if (a2 === b2) return true; if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") { if (a2.constructor !== b2.constructor) return false; var length, i, keys2; if (Array.isArray(a2)) { length = a2.length; if (length != b2.length) return false; for (i = length; i-- !== 0; ) if (!equal2(a2[i], b2[i])) return false; return true; } if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags; if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf(); if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString(); keys2 = Object.keys(a2); length = keys2.length; if (length !== Object.keys(b2).length) return false; for (i = length; i-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(b2, keys2[i])) return false; for (i = length; i-- !== 0; ) { var key = keys2[i]; if (!equal2(a2[key], b2[key])) return false; } return true; } return a2 !== a2 && b2 !== b2; }; } }); // src/utils/arrayToObject.tsx function arrayToObject(arr) { return arr.reduceRight( (prev, current) => ({ [current]: prev }), null ); } // src/utils/deepMerge.tsx function deepMerge(files, obj1, obj2, path) { var _a, _b, _c, _d, _e, _f; const result = Object.assign({}, obj1); for (const prop in obj2) { if (!result[prop]) { result[prop] = {}; } if (typeof obj2[prop] === "object") { if (((_a = Object.keys((obj1 == null ? void 0 : obj1[prop]) || {})) == null ? void 0 : _a.length) === 0 && ((_b = Object.keys((obj2 == null ? void 0 : obj2[prop]) || {})) == null ? void 0 : _b.length) === 0) { result[prop] = (_c = files[`${prop}`]) == null ? void 0 : _c.code; } else { if (((_d = Object.keys((obj1 == null ? void 0 : obj1[prop]) || {})) == null ? void 0 : _d.length) === 0) { result[prop] = Object.entries(obj2[prop]).reduce( (acc, [key, value]) => { var _a2; if (value !== null) { acc[key] = deepMerge(files, result[prop], value, path); } else { acc[key] = (_a2 = files[`${prop}/${key}`]) == null ? void 0 : _a2.code; } return acc; }, {} ); } else if (((_e = Object.keys((obj2 == null ? void 0 : obj2[prop]) || {})) == null ? void 0 : _e.length) === 0) { result[prop] = obj1[prop]; } else { result[prop] = deepMerge(files, result[prop], obj2[prop], path); } } } else { result[prop] = (_f = files[`${path}`]) == null ? void 0 : _f.code; } } return result; } // src/utils/deleteKeys.tsx var deleteKeys = (obj, keysToDelete) => { return Object.fromEntries( Object.entries(obj).filter(([key]) => !keysToDelete.includes(key)) ); }; // src/utils/directoryFileMap.tsx var directoryFileMap = (files, overrides = {}) => { const _overrides = typeof overrides === "string" ? { [overrides]: "" } : overrides ?? {}; const _files = Object.keys({ ...files, ..._overrides }).reduce( (acc, current) => { const split = current.split("/").splice(1); const dirTree = arrayToObject(split); acc = deepMerge(files, acc, dirTree, current); return acc; }, {} ); return _files; }; // src/utils/buildPath.tsx var buildPath = (item, arr) => { let path = ""; let parent = arr.find(({ id: id2 }) => id2 === item.parent); if (parent) { path = `${buildPath(parent, arr)}/${path}`; } path += `${item.text}`; return path; }; // src/utils/toHierarchicalArray.tsx var toHierarchicalArray = (obj, parentId = "/", arr = []) => { for (let key in obj) { if (obj.hasOwnProperty(key)) { const text = key; let builtPath = buildPath( { id: "", parent: parentId, text, droppable: false, data: { path: "" } }, arr ); const item = { id: builtPath, parent: parentId, text, data: { path: `/${builtPath}` }, droppable: false }; if (typeof obj[key] === "object" && obj[key] !== null) { item.droppable = true; arr.push(item); toHierarchicalArray(obj[key], builtPath, arr); } else { arr.push(item); } } } return arr; }; // src/utils/getEntryFile.tsx var getEntryFile = (files) => { var _a, _b, _c; let entryFile = ""; try { entryFile = (_b = JSON.parse((_a = files["/package.json"]) == null ? void 0 : _a.code)) == null ? void 0 : _b.main; } catch { const entryRegex = /\"main\"\s*:\s*\"([^"]+)\"/; const match = entryRegex.exec((_c = files["/package.json"]) == null ? void 0 : _c.code); const mainValue = (match == null ? void 0 : match[1]) ?? ""; entryFile = mainValue; } return entryFile; }; // src/utils/getRemovedKeys.tsx function getRemovedKeys(original, updated) { const removedKeys = []; for (let key in original) { if (original.hasOwnProperty(key) && !updated.hasOwnProperty(key)) { removedKeys.push(key); } } return removedKeys; } // src/utils/mergeHierarchicalArray.tsx function mergeHierarchicalArray(sandpackFiles, arr) { let obj = {}; for (let i = 0; i < (arr == null ? void 0 : arr.length); i++) { let item = arr[i]; let builtPath = buildPath(item, arr); obj[`/${builtPath}`] = sandpackFiles[`${item.data.path}`]; if (item.droppable && !obj[`/${builtPath}`]) { obj[`/${builtPath}`] = { code: ".emptyDir", hidden: true }; obj[`/${builtPath}/`] = { code: ".emptyDir", hidden: true }; } item.data.path = `/${builtPath}`; } return obj; } var CustomSandpackContext = React4.createContext(null); var useSandpackFiles = () => { const context = React4.useContext(CustomSandpackContext); if (!context) { throw Error( "<SandpackFileTree/> must be used inside a <SandpackFilesProvider>, you may be looking for <SandpackFileExplorer/>?" ); } return context; }; var SandpackFilesProvider = ({ children, onMoveFile }) => { const { sandpack } = sandpackReact.useSandpack(); const [treeData, setTreeData] = React4.useState( () => toHierarchicalArray(directoryFileMap({ ...sandpack.files })) ); const [openDirs, setOpenDirs] = React4.useState([]); const deleteFile = async (file) => { var _a, _b; const entryFile = (_b = JSON.parse((_a = sandpack.files["/package.json"]) == null ? void 0 : _a.code)) == null ? void 0 : _b.main; const files = typeof file === "string" ? [file] : file; if (files.includes(entryFile)) { return; } const sandpackFilesCopy = { ...sandpack.files }; const getAllChildrenOfDir = (dir, arr) => { const children2 = []; const childrenOfDir = arr == null ? void 0 : arr.filter(({ parent }) => parent === dir); childrenOfDir.forEach((child) => { children2.push(buildPath(child, arr)); if (child.id !== "/" && child.id !== dir) { children2.push(...getAllChildrenOfDir(child.id, arr)); } }); return children2; }; const deleteFilePromises = files.map(async (key) => { const isDir = key.endsWith("/"); if (isDir) { const dirId = key.substring(0, key.length - 1); const parentId = dirId.substring(1); sandpack.deleteFile(`${dirId}`); delete sandpackFilesCopy[dirId]; const childrenOfDir = getAllChildrenOfDir(parentId, treeData); childrenOfDir.forEach((child) => { sandpack.deleteFile(`/${child}`); delete sandpackFilesCopy[`/${child}`]; }); } sandpack.deleteFile(key); delete sandpackFilesCopy[key]; }); await Promise.all(deleteFilePromises); const newFiles = deleteKeys(sandpackFilesCopy, files); setTreeData(toHierarchicalArray(directoryFileMap(newFiles))); }; const addFile = async (files) => { for (let id2 in files) { if (sandpack.files[id2] || sandpack.files[id2.endsWith("/") ? id2.substring(0, id2.length - 1) : `${id2}/`]) { delete files[id2]; } } sandpack.addFile(files); const tempAddNodes = Object.keys(sandpack.files).filter( (key) => key.includes("addDir") || key.includes("addFile") ); const fileKeys = Object.keys(files); const isAnInputNode = fileKeys.filter( (id2) => id2.includes("addDir") || id2.includes("addFile") ).length; if (!isAnInputNode) { await deleteFile(tempAddNodes); const newFiles = deleteKeys({ ...sandpack.files }, tempAddNodes); setTreeData(toHierarchicalArray(directoryFileMap(newFiles, files))); fileKeys.forEach((id2) => { if (!id2.endsWith("/")) sandpack.openFile(id2); }); } else { const newTree = toHierarchicalArray( directoryFileMap({ ...sandpack.files }, files) ); setTreeData(newTree); const key = Object.keys(files)[0].substring(1); const directoryIds = getAllParentDirs({ childId: key, tree: newTree }); setOpenDirs((prev) => Array.from(/* @__PURE__ */ new Set([...prev, ...directoryIds]))); } }; const getAllParentDirs = ({ childId, tree }) => { var _a; const ids = []; const itemParent = (_a = tree.find(({ id: id2 }) => id2 === childId)) == null ? void 0 : _a.parent; if (!itemParent || itemParent === "/") { return ids; } ids.push(`${itemParent}`); ids.push(...getAllParentDirs({ childId: itemParent, tree })); return ids; }; const onFileMoved = async ({ node, newTree }) => { const filesCopy = { ...sandpack.files }; const prev = mergeHierarchicalArray(filesCopy, treeData); const neww = mergeHierarchicalArray(filesCopy, newTree); const removedKeys = getRemovedKeys(prev, neww); const deleteFilePromises = removedKeys.map((key) => { deleteFile(key); }); await Promise.all(deleteFilePromises); sandpack.addFile(neww); const movedFileMap = removedKeys.reduce((acc, id2) => { var _a, _b, _c, _d, _e; const newPath = `/${buildPath( { parent: ((_a = node.dropTarget) == null ? void 0 : _a.id) ?? "/", text: (_b = node == null ? void 0 : node.dragSource) == null ? void 0 : _b.text }, newTree )}`; acc[id2] = `${newPath}${id2.substring( id2.indexOf((_c = node == null ? void 0 : node.dragSource) == null ? void 0 : _c.id) + ((_e = (_d = node == null ? void 0 : node.dragSource) == null ? void 0 : _d.id) == null ? void 0 : _e.length) )}`; return acc; }, {}); onMoveFile == null ? void 0 : onMoveFile(movedFileMap); const currentActiveFile = sandpack.activeFile; let newActiveFile = sandpack.activeFile; sandpack.visibleFiles.forEach((file) => { if (movedFileMap[file]) { sandpack.openFile(movedFileMap[file]); if (currentActiveFile === file) { newActiveFile = movedFileMap[file]; } } }); sandpack.setActiveFile(newActiveFile); }; const moveFiles = async (fileMap) => { const filesCopy = { ...sandpack.files }; for (let file in fileMap) { if (filesCopy[file]) { filesCopy[fileMap[file]] = filesCopy[file]; } } const deleteFilePromises = Object.keys(fileMap).map((key) => { if (filesCopy[key]) { delete filesCopy[key]; deleteFile(key); } }); await Promise.all(deleteFilePromises); sandpack.addFile(filesCopy); const currentActiveFile = sandpack.activeFile; let newActiveFile = sandpack.activeFile; sandpack.visibleFiles.forEach((file) => { if (fileMap[file]) { sandpack.openFile(fileMap[file]); if (currentActiveFile === file) { newActiveFile = file; } } }); sandpack.setActiveFile(newActiveFile); const array = toHierarchicalArray(directoryFileMap({ ...filesCopy })); setTreeData(array); }; const value = { addFile, treeData, setTreeData, buildPath, deleteFile, onFileMoved, moveFiles, openDirs, setOpenDirs }; return /* @__PURE__ */ jsxRuntime.jsx(CustomSandpackContext.Provider, { value, children }); }; // node_modules/react-dnd-html5-backend/dist/utils/js_utils.js function memoize(fn) { let result = null; const memoized = () => { if (result == null) { result = fn(); } return result; }; return memoized; } function without(items, item) { return items.filter( (i) => i !== item ); } function union(itemsA, itemsB) { const set = /* @__PURE__ */ new Set(); const insertItem = (item) => set.add(item); itemsA.forEach(insertItem); itemsB.forEach(insertItem); const result = []; set.forEach( (key) => result.push(key) ); return result; } // node_modules/react-dnd-html5-backend/dist/EnterLeaveCounter.js var EnterLeaveCounter = class { enter(enteringNode) { const previousLength = this.entered.length; const isNodeEntered = (node) => this.isNodeInDocument(node) && (!node.contains || node.contains(enteringNode)); this.entered = union(this.entered.filter(isNodeEntered), [ enteringNode ]); return previousLength === 0 && this.entered.length > 0; } leave(leavingNode) { const previousLength = this.entered.length; this.entered = without(this.entered.filter(this.isNodeInDocument), leavingNode); return previousLength > 0 && this.entered.length === 0; } reset() { this.entered = []; } constructor(isNodeInDocument) { this.entered = []; this.isNodeInDocument = isNodeInDocument; } }; // node_modules/react-dnd-html5-backend/dist/NativeDragSources/NativeDragSource.js var NativeDragSource = class { initializeExposedProperties() { Object.keys(this.config.exposeProperties).forEach((property) => { Object.defineProperty(this.item, property, { configurable: true, enumerable: true, get() { console.warn(`Browser doesn't allow reading "${property}" until the drop event.`); return null; } }); }); } loadDataTransfer(dataTransfer) { if (dataTransfer) { const newProperties = {}; Object.keys(this.config.exposeProperties).forEach((property) => { const propertyFn = this.config.exposeProperties[property]; if (propertyFn != null) { newProperties[property] = { value: propertyFn(dataTransfer, this.config.matchesTypes), configurable: true, enumerable: true }; } }); Object.defineProperties(this.item, newProperties); } } canDrag() { return true; } beginDrag() { return this.item; } isDragging(monitor, handle) { return handle === monitor.getSourceId(); } endDrag() { } constructor(config) { this.config = config; this.item = {}; this.initializeExposedProperties(); } }; // node_modules/react-dnd-html5-backend/dist/NativeTypes.js var NativeTypes_exports = {}; __export(NativeTypes_exports, { FILE: () => FILE, HTML: () => HTML, TEXT: () => TEXT, URL: () => URL }); var FILE = "__NATIVE_FILE__"; var URL = "__NATIVE_URL__"; var TEXT = "__NATIVE_TEXT__"; var HTML = "__NATIVE_HTML__"; // node_modules/react-dnd-html5-backend/dist/NativeDragSources/getDataFromDataTransfer.js function getDataFromDataTransfer(dataTransfer, typesToTry, defaultValue) { const result = typesToTry.reduce( (resultSoFar, typeToTry) => resultSoFar || dataTransfer.getData(typeToTry), "" ); return result != null ? result : defaultValue; } // node_modules/react-dnd-html5-backend/dist/NativeDragSources/nativeTypesConfig.js var nativeTypesConfig = { [FILE]: { exposeProperties: { files: (dataTransfer) => Array.prototype.slice.call(dataTransfer.files), items: (dataTransfer) => dataTransfer.items, dataTransfer: (dataTransfer) => dataTransfer }, matchesTypes: [ "Files" ] }, [HTML]: { exposeProperties: { html: (dataTransfer, matchesTypes) => getDataFromDataTransfer(dataTransfer, matchesTypes, ""), dataTransfer: (dataTransfer) => dataTransfer }, matchesTypes: [ "Html", "text/html" ] }, [URL]: { exposeProperties: { urls: (dataTransfer, matchesTypes) => getDataFromDataTransfer(dataTransfer, matchesTypes, "").split("\n"), dataTransfer: (dataTransfer) => dataTransfer }, matchesTypes: [ "Url", "text/uri-list" ] }, [TEXT]: { exposeProperties: { text: (dataTransfer, matchesTypes) => getDataFromDataTransfer(dataTransfer, matchesTypes, ""), dataTransfer: (dataTransfer) => dataTransfer }, matchesTypes: [ "Text", "text/plain" ] } }; // node_modules/react-dnd-html5-backend/dist/NativeDragSources/index.js function createNativeDragSource(type, dataTransfer) { const config = nativeTypesConfig[type]; if (!config) { throw new Error(`native type ${type} has no configuration`); } const result = new NativeDragSource(config); result.loadDataTransfer(dataTransfer); return result; } function matchNativeItemType(dataTransfer) { if (!dataTransfer) { return null; } const dataTransferTypes = Array.prototype.slice.call(dataTransfer.types || []); return Object.keys(nativeTypesConfig).filter((nativeItemType) => { const typeConfig = nativeTypesConfig[nativeItemType]; if (!(typeConfig === null || typeConfig === void 0 ? void 0 : typeConfig.matchesTypes)) { return false; } return typeConfig.matchesTypes.some( (t) => dataTransferTypes.indexOf(t) > -1 ); })[0] || null; } // node_modules/react-dnd-html5-backend/dist/BrowserDetector.js var isFirefox = memoize( () => /firefox/i.test(navigator.userAgent) ); var isSafari = memoize( () => Boolean(window.safari) ); // node_modules/react-dnd-html5-backend/dist/MonotonicInterpolant.js var MonotonicInterpolant = class { interpolate(x) { const { xs, ys, c1s, c2s, c3s } = this; let i = xs.length - 1; if (x === xs[i]) { return ys[i]; } let low = 0; let high = c3s.length - 1; let mid; while (low <= high) { mid = Math.floor(0.5 * (low + high)); const xHere = xs[mid]; if (xHere < x) { low = mid + 1; } else if (xHere > x) { high = mid - 1; } else { return ys[mid]; } } i = Math.max(0, high); const diff = x - xs[i]; const diffSq = diff * diff; return ys[i] + c1s[i] * diff + c2s[i] * diffSq + c3s[i] * diff * diffSq; } constructor(xs, ys) { const { length } = xs; const indexes = []; for (let i = 0; i < length; i++) { indexes.push(i); } indexes.sort( (a2, b2) => xs[a2] < xs[b2] ? -1 : 1 ); const dxs = []; const ms = []; let dx; let dy; for (let i1 = 0; i1 < length - 1; i1++) { dx = xs[i1 + 1] - xs[i1]; dy = ys[i1 + 1] - ys[i1]; dxs.push(dx); ms.push(dy / dx); } const c1s = [ ms[0] ]; for (let i2 = 0; i2 < dxs.length - 1; i2++) { const m2 = ms[i2]; const mNext = ms[i2 + 1]; if (m2 * mNext <= 0) { c1s.push(0); } else { dx = dxs[i2]; const dxNext = dxs[i2 + 1]; const common = dx + dxNext; c1s.push(3 * common / ((common + dxNext) / m2 + (common + dx) / mNext)); } } c1s.push(ms[ms.length - 1]); const c2s = []; const c3s = []; let m; for (let i3 = 0; i3 < c1s.length - 1; i3++) { m = ms[i3]; const c1 = c1s[i3]; const invDx = 1 / dxs[i3]; const common = c1 + c1s[i3 + 1] - m - m; c2s.push((m - c1 - common) * invDx); c3s.push(common * invDx * invDx); } this.xs = xs; this.ys = ys; this.c1s = c1s; this.c2s = c2s; this.c3s = c3s; } }; // node_modules/react-dnd-html5-backend/dist/OffsetUtils.js var ELEMENT_NODE = 1; function getNodeClientOffset(node) { const el = node.nodeType === ELEMENT_NODE ? node : node.parentElement; if (!el) { return null; } const { top, left } = el.getBoundingClientRect(); return { x: left, y: top }; } function getEventClientOffset(e) { return { x: e.clientX, y: e.clientY }; } function isImageNode(node) { var ref; return node.nodeName === "IMG" && (isFirefox() || !((ref = document.documentElement) === null || ref === void 0 ? void 0 : ref.contains(node))); } function getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight) { let dragPreviewWidth = isImage ? dragPreview.width : sourceWidth; let dragPreviewHeight = isImage ? dragPreview.height : sourceHeight; if (isSafari() && isImage) { dragPreviewHeight /= window.devicePixelRatio; dragPreviewWidth /= window.devicePixelRatio; } return { dragPreviewWidth, dragPreviewHeight }; } function getDragPreviewOffset(sourceNode, dragPreview, clientOffset, anchorPoint, offsetPoint) { const isImage = isImageNode(dragPreview); const dragPreviewNode = isImage ? sourceNode : dragPreview; const dragPreviewNodeOffsetFromClient = getNodeClientOffset(dragPreviewNode); const offsetFromDragPreview = { x: clientOffset.x - dragPreviewNodeOffsetFromClient.x, y: clientOffset.y - dragPreviewNodeOffsetFromClient.y }; const { offsetWidth: sourceWidth, offsetHeight: sourceHeight } = sourceNode; const { anchorX, anchorY } = anchorPoint; const { dragPreviewWidth, dragPreviewHeight } = getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight); const calculateYOffset = () => { const interpolantY = new MonotonicInterpolant([ 0, 0.5, 1 ], [ offsetFromDragPreview.y, offsetFromDragPreview.y / sourceHeight * dragPreviewHeight, offsetFromDragPreview.y + dragPreviewHeight - sourceHeight ]); let y = interpolantY.interpolate(anchorY); if (isSafari() && isImage) { y += (window.devicePixelRatio - 1) * dragPreviewHeight; } return y; }; const calculateXOffset = () => { const interpolantX = new MonotonicInterpolant([ 0, 0.5, 1 ], [ offsetFromDragPreview.x, offsetFromDragPreview.x / sourceWidth * dragPreviewWidth, offsetFromDragPreview.x + dragPreviewWidth - sourceWidth ]); return interpolantX.interpolate(anchorX); }; const { offsetX, offsetY } = offsetPoint; const isManualOffsetX = offsetX === 0 || offsetX; const isManualOffsetY = offsetY === 0 || offsetY; return { x: isManualOffsetX ? offsetX : calculateXOffset(), y: isManualOffsetY ? offsetY : calculateYOffset() }; } // node_modules/react-dnd-html5-backend/dist/OptionsReader.js var OptionsReader = class { get window() { if (this.globalContext) { return this.globalContext; } else if (typeof window !== "undefined") { return window; } return void 0; } get document() { var ref; if ((ref = this.globalContext) === null || ref === void 0 ? void 0 : ref.document) { return this.globalContext.document; } else if (this.window) { return this.window.document; } else { return void 0; } } get rootElement() { var ref; return ((ref = this.optionsArgs) === null || ref === void 0 ? void 0 : ref.rootElement) || this.window; } constructor(globalContext, options) { this.ownerDocument = null; this.globalContext = globalContext; this.optionsArgs = options; } }; // node_modules/react-dnd-html5-backend/dist/HTML5BackendImpl.js function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function(key) { _defineProperty(target, key, source[key]); }); } return target; } var HTML5BackendImpl = class { profile() { var ref, ref1; return { sourcePreviewNodes: this.sourcePreviewNodes.size, sourcePreviewNodeOptions: this.sourcePreviewNodeOptions.size,