@wp-playground/components 3.1.44 → 3.1.46
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/FilePickerTree/index.d.ts +6 -0
- package/PlaygroundFileEditor/file-explorer-sidebar.d.ts +9 -1
- package/PlaygroundFileEditor/file-explorer-sidebar.spec.d.ts +1 -0
- package/PlaygroundFileEditor/file-utils.d.ts +20 -0
- package/PlaygroundFileEditor/playground-file-editor.d.ts +4 -7
- package/PlaygroundFileEditor/playground-file-editor.spec.d.ts +1 -0
- package/e2e-harnesses/file-editor-entry.d.ts +1 -0
- package/e2e-harnesses/file-editor-harness.d.ts +19 -0
- package/e2e-harnesses/file-picker-tree-harness.d.ts +32 -0
- package/index.cjs +10 -10
- package/index.cjs.map +1 -1
- package/index.js +1871 -1535
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/style.css +1 -1
|
@@ -7,6 +7,8 @@ export type FileNode = {
|
|
|
7
7
|
};
|
|
8
8
|
export type FilePickerTreeProps = {
|
|
9
9
|
withContextMenu?: boolean;
|
|
10
|
+
/** Disables filesystem mutations while preserving selection and previews. */
|
|
11
|
+
readOnly?: boolean;
|
|
10
12
|
filesystem: AsyncWritableFilesystem;
|
|
11
13
|
root?: string;
|
|
12
14
|
initialSelectedPath?: string;
|
|
@@ -26,6 +28,10 @@ export type FilePickerTreeHandle = {
|
|
|
26
28
|
remapPath: (from: string, to: string) => void;
|
|
27
29
|
createFile: (absSelectedPath?: string) => Promise<void>;
|
|
28
30
|
createFolder: (absSelectedPath?: string) => Promise<void>;
|
|
31
|
+
/** Imports captured file-input entries into an existing tree directory. */
|
|
32
|
+
importFiles: (files: readonly File[], destinationDir: string) => Promise<void>;
|
|
33
|
+
/** Imports a drop payload into an existing tree directory. */
|
|
34
|
+
importDataTransfer: (dataTransfer: DataTransfer, destinationDir: string) => Promise<void>;
|
|
29
35
|
};
|
|
30
36
|
export declare const FilePickerTree: React.ForwardRefExoticComponent<FilePickerTreeProps & React.RefAttributes<FilePickerTreeHandle>>;
|
|
31
37
|
export default FilePickerTree;
|
|
@@ -9,5 +9,13 @@ export type FileExplorerSidebarProps = {
|
|
|
9
9
|
onSelectionCleared: () => Promise<void> | void;
|
|
10
10
|
onShowMessage: (path: string | null, message: string | JSX.Element) => Promise<void> | void;
|
|
11
11
|
documentRoot: string;
|
|
12
|
+
readOnly?: boolean;
|
|
13
|
+
title?: string;
|
|
14
|
+
showBinaryPreviewHeader?: boolean;
|
|
15
|
+
dockPresentation?: boolean;
|
|
16
|
+
useWordPressTooltips?: boolean;
|
|
12
17
|
};
|
|
13
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Renders the file explorer and opens selected files in the editor preview area.
|
|
20
|
+
*/
|
|
21
|
+
export declare function FileExplorerSidebar({ filesystem, currentPath, selectedDirPath, setSelectedDirPath, onFileOpened, onSelectionCleared, onShowMessage, documentRoot, readOnly, title, showBinaryPreviewHeader, dockPresentation, useWordPressTooltips, }: FileExplorerSidebarProps): React.JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -12,6 +12,25 @@ export declare const createDownloadUrl: (data: Uint8Array, filename: string) =>
|
|
|
12
12
|
url: string;
|
|
13
13
|
filename: string;
|
|
14
14
|
};
|
|
15
|
+
export type InlineFilePreviewReadResult = {
|
|
16
|
+
type: 'inline';
|
|
17
|
+
data: Uint8Array;
|
|
18
|
+
} | {
|
|
19
|
+
type: 'too-large';
|
|
20
|
+
};
|
|
21
|
+
type BrowserReadableFile = {
|
|
22
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
23
|
+
stream?: () => ReadableStream<Uint8Array>;
|
|
24
|
+
size?: number;
|
|
25
|
+
filesize?: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Classifies a file as inline-editable or too large for the editor.
|
|
29
|
+
*
|
|
30
|
+
* Uses known size metadata before reading when it is available. Stream-backed
|
|
31
|
+
* files without a known size are read only until they cross the inline limit.
|
|
32
|
+
*/
|
|
33
|
+
export declare function readFileForInlinePreview(file: BrowserReadableFile, maxInlineBytes?: number): Promise<InlineFilePreviewReadResult>;
|
|
15
34
|
/**
|
|
16
35
|
* Gets the MIME type for a filename based on its extension.
|
|
17
36
|
*/
|
|
@@ -21,3 +40,4 @@ export declare const getMimeType: (filename: string) => string;
|
|
|
21
40
|
* (images, videos, audio).
|
|
22
41
|
*/
|
|
23
42
|
export declare const isPreviewableBinary: (mimeType: string) => boolean;
|
|
43
|
+
export {};
|
|
@@ -6,16 +6,13 @@ export type PlaygroundFileEditorProps = {
|
|
|
6
6
|
documentRoot: string;
|
|
7
7
|
initialPath?: string | null;
|
|
8
8
|
placeholderText?: string;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
* any pending saves to the old filesystem.
|
|
13
|
-
*/
|
|
14
|
-
onBeforeFilesystemChange?: (oldFilesystem: AsyncWritableFilesystem) => Promise<void>;
|
|
9
|
+
dockPresentation?: boolean;
|
|
10
|
+
/** Mobile Dock title row where the current path should be rendered. */
|
|
11
|
+
mobileHeaderTarget?: Element | null;
|
|
15
12
|
};
|
|
16
13
|
/**
|
|
17
14
|
* A reusable file browser component with a file tree on the left and
|
|
18
15
|
* a code editor on the right. Supports auto-save with debouncing,
|
|
19
16
|
* cursor position preservation, and binary file handling.
|
|
20
17
|
*/
|
|
21
|
-
export declare function PlaygroundFileEditor({ filesystem, isVisible, documentRoot, initialPath, placeholderText,
|
|
18
|
+
export declare function PlaygroundFileEditor({ filesystem, isVisible, documentRoot, initialPath, placeholderText, dockPresentation, mobileHeaderTarget, }: PlaygroundFileEditorProps): React.JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { AsyncWritableFilesystem } from '../../../storage/src/index.ts';
|
|
3
|
+
type FilesystemName = 'a' | 'b';
|
|
4
|
+
declare global {
|
|
5
|
+
interface Window {
|
|
6
|
+
__fileEditorHarness?: {
|
|
7
|
+
filesystems: Record<FilesystemName, AsyncWritableFilesystem>;
|
|
8
|
+
readFileAsText: (filesystem: FilesystemName, path: string) => Promise<string>;
|
|
9
|
+
switchFilesystem: (filesystem: FilesystemName) => void;
|
|
10
|
+
mountEditor: () => void;
|
|
11
|
+
unmountEditor: () => void;
|
|
12
|
+
delayNextWrite: () => void;
|
|
13
|
+
releaseDelayedWrite: () => void;
|
|
14
|
+
isWriteDelayed: () => boolean;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export declare function FileEditorHarness(): React.JSX.Element;
|
|
19
|
+
export {};
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { AsyncWritableFilesystem } from '../../../storage/src/index.ts';
|
|
3
|
+
type DirNode = {
|
|
4
|
+
type: 'dir';
|
|
5
|
+
children: Record<string, FsEntry>;
|
|
6
|
+
};
|
|
7
|
+
type FileNodeEntry = {
|
|
8
|
+
type: 'file';
|
|
9
|
+
content: string;
|
|
10
|
+
};
|
|
11
|
+
type FsEntry = DirNode | FileNodeEntry;
|
|
3
12
|
declare global {
|
|
4
13
|
interface Window {
|
|
5
14
|
__filePickerHarness?: {
|
|
@@ -10,4 +19,27 @@ declare global {
|
|
|
10
19
|
};
|
|
11
20
|
}
|
|
12
21
|
}
|
|
22
|
+
declare class InMemoryFilesystem extends EventTarget implements AsyncWritableFilesystem {
|
|
23
|
+
private root;
|
|
24
|
+
constructor(snapshot: DirNode);
|
|
25
|
+
private resolve;
|
|
26
|
+
private resolveDir;
|
|
27
|
+
private resolveParent;
|
|
28
|
+
listFiles(path: string): Promise<string[]>;
|
|
29
|
+
isDir(path: string): Promise<boolean>;
|
|
30
|
+
fileExists(path: string): Promise<boolean>;
|
|
31
|
+
read(path: string): Promise<{
|
|
32
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
33
|
+
}>;
|
|
34
|
+
readFileAsText(path: string): Promise<string>;
|
|
35
|
+
writeFile(path: string, data: Uint8Array | string): Promise<void>;
|
|
36
|
+
mkdir(path: string): Promise<void>;
|
|
37
|
+
rmdir(path: string, options?: {
|
|
38
|
+
recursive?: boolean;
|
|
39
|
+
}): Promise<void>;
|
|
40
|
+
mv(source: string, destination: string): Promise<void>;
|
|
41
|
+
unlink(path: string): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
export declare const createFilesystem: () => InMemoryFilesystem;
|
|
13
44
|
export declare function FilePickerTreeHarness(): React.JSX.Element;
|
|
45
|
+
export {};
|
package/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var Jt=Object.create;var Nt=Object.defineProperty;var Xt=Object.getOwnPropertyDescriptor;var Qt=Object.getOwnPropertyNames;var er=Object.getPrototypeOf,tr=Object.prototype.hasOwnProperty;var rr=(n,s,f,l)=>{if(s&&typeof s=="object"||typeof s=="function")for(let C of Qt(s))!tr.call(n,C)&&C!==f&&Nt(n,C,{get:()=>s[C],enumerable:!(l=Xt(s,C))||l.enumerable});return n};var nt=(n,s,f)=>(f=n!=null?Jt(er(n)):{},rr(s||!n||!n.__esModule?Nt(f,"default",{value:n,enumerable:!0}):f,n));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react"),H=require("@php-wasm/util"),X=require("@wordpress/components"),De=require("classnames"),vt=require("@wordpress/element"),nr=require("clsx"),Oe=require("@codemirror/state"),Se=require("@codemirror/view"),pt=require("@codemirror/commands"),It=require("@codemirror/search"),ht=require("@codemirror/autocomplete"),Ke=require("@codemirror/language"),it=require("@codemirror/lang-php"),Lt=require("@wp-playground/components"),Je=require("@php-wasm/logger"),Mt=require("@php-wasm/universal/mime-types"),ar=require("react-dom"),or=n=>e.createElement("svg",{width:"32",height:"32",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",...n},e.createElement("rect",{width:"10.4176",height:"10.4176",rx:"3.86258",transform:"matrix(0.829038 -0.559193 0.838671 0.544639 7.45703 24.1775)",stroke:"white",strokeWidth:"0.965644"}),e.createElement("rect",{width:"13.2346",height:"13.2346",rx:"3.86258",transform:"matrix(0.829038 -0.559193 0.838671 0.544639 5.0918 18.9934)",stroke:"white",strokeWidth:"1.44847"}),e.createElement("rect",{width:"17.451",height:"17.451",rx:"3.86258",transform:"matrix(0.829038 -0.559193 0.838671 0.544639 1.55371 11.6099)",stroke:"white",strokeWidth:"1.93129"})),ir=n=>e.createElement("svg",{width:"16",height:"17",viewBox:"0 0 16 17",fill:"none",xmlns:"http://www.w3.org/2000/svg",...n},e.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8 15C4.41015 15 1.5 12.0899 1.5 8.5C1.5 4.91015 4.41015 2 8 2C11.5899 2 14.5 4.91015 14.5 8.5C14.5 12.0899 11.5899 15 8 15ZM0 8.5C0 4.08172 3.58172 0.5 8 0.5C12.4183 0.5 16 4.08172 16 8.5C16 12.9183 12.4183 16.5 8 16.5C3.58172 16.5 0 12.9183 0 8.5ZM9 9.5V4.5H7.5V8H5.5V9.5H9Z",fill:"#949494"})),sr=n=>e.createElement("svg",{width:"20",height:"21",viewBox:"0 0 20 21",fill:"none",xmlns:"http://www.w3.org/2000/svg",...n},e.createElement("path",{d:"M20 10.5C20 4.99 15.51 0.5 10 0.5C4.48 0.5 0 4.99 0 10.5C0 16.02 4.48 20.5 10 20.5C15.51 20.5 20 16.02 20 10.5ZM7.78 15.87L4.37 6.72C4.92 6.7 5.54 6.64 5.54 6.64C6.04 6.58 5.98 5.51 5.48 5.53C5.48 5.53 4.03 5.64 3.11 5.64C2.93 5.64 2.74 5.64 2.53 5.63C4.12 3.19 6.87 1.61 10 1.61C12.33 1.61 14.45 2.48 16.05 3.95C15.37 3.84 14.4 4.34 14.4 5.53C14.4 6.27 14.85 6.89 15.3 7.63C15.65 8.24 15.85 8.99 15.85 10.09C15.85 11.58 14.45 15.09 14.45 15.09L11.42 6.72C11.96 6.7 12.24 6.55 12.24 6.55C12.74 6.5 12.68 5.3 12.18 5.33C12.18 5.33 10.74 5.45 9.8 5.45C8.93 5.45 7.47 5.33 7.47 5.33C6.97 5.3 6.91 6.53 7.41 6.55L8.33 6.63L9.59 10.04L7.78 15.87ZM17.41 10.5C17.65 9.86 18.15 8.63 17.84 6.25C18.54 7.54 18.89 8.96 18.89 10.5C18.89 13.79 17.16 16.74 14.49 18.28C15.46 15.69 16.43 13.08 17.41 10.5ZM6.1 18.59C3.12 17.15 1.11 14.03 1.11 10.5C1.11 9.2 1.34 8.02 1.83 6.91C3.25 10.8 4.67 14.7 6.1 18.59ZM10.13 11.96L12.71 18.94C11.85 19.23 10.95 19.39 10 19.39C9.21 19.39 8.43 19.28 7.71 19.06C8.52 16.68 9.33 14.32 10.13 11.96Z",fill:"#ffffff"})),zt=e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"15",height:"14",viewBox:"0 0 15 14",fill:"none"},e.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.59196 3.59524L6.77745 1.96623C6.70755 1.82641 6.56464 1.7381 6.40832 1.7381H1.65079C1.42287 1.7381 1.2381 1.92287 1.2381 2.15079V11.8492C1.2381 12.0771 1.42287 12.2619 1.65079 12.2619H13.2063C13.4343 12.2619 13.619 12.0771 13.619 11.8492V4.00794C13.619 3.78001 13.4343 3.59524 13.2063 3.59524H7.59196ZM8.35714 2.35714L7.88484 1.41254C7.60521 0.853274 7.0336 0.5 6.40832 0.5H1.65079C0.739085 0.5 0 1.23909 0 2.15079V11.8492C0 12.7609 0.739085 13.5 1.65079 13.5H13.2063C14.1181 13.5 14.8571 12.7609 14.8571 11.8492V4.00794C14.8571 3.09623 14.1181 2.35714 13.2063 2.35714H8.35714Z"})),$t=e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"currentColor",className:"bi bi-file-earmark",viewBox:"0 0 16 16"},e.createElement("path",{d:"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z"})),lr=n=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 14 14",fill:"none",...n},e.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7 12.6875C3.85888 12.6875 1.3125 10.1411 1.3125 7C1.3125 3.85888 3.85888 1.3125 7 1.3125C10.1411 1.3125 12.6875 3.85888 12.6875 7C12.6875 10.1411 10.1411 12.6875 7 12.6875ZM0 7C0 3.13401 3.13401 0 7 0C10.866 0 14 3.13401 14 7C14 10.866 10.866 14 7 14C3.13401 14 0 10.866 0 7ZM7.875 7.875V3.5H6.5625V6.5625H4.8125V7.875H7.875Z",fill:"#949494"})),cr=e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 14 14",fill:"none"},e.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.25 1.3125H1.75C1.50838 1.3125 1.3125 1.50838 1.3125 1.75V4.37495H12.6875V1.75C12.6875 1.50837 12.4916 1.3125 12.25 1.3125ZM12.6875 5.68745H5.25003V12.6875H12.25C12.4916 12.6875 12.6875 12.4916 12.6875 12.25V5.68745ZM3.93753 5.68745H1.3125V12.25C1.3125 12.4916 1.50837 12.6875 1.75 12.6875H3.93753L3.93753 5.68745ZM1.75 0H12.25C13.2165 0 14 0.783502 14 1.75V12.25C14 13.2165 13.2165 14 12.25 14H1.75C0.783502 14 0 13.2165 0 12.25V1.75C0 0.783502 0.783502 0 1.75 0Z",fill:"#949494"}));function ur(n){return`data:${n.mime};base64,${n.data}`}function fr({size:n=24,sidebarActive:s=!1}){return e.createElement("svg",{width:n,height:n,viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},e.createElement("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"}),s?e.createElement("rect",{x:"3",y:"3",width:"7",height:"18",rx:"2",ry:"2",fill:"currentColor"}):e.createElement("rect",{x:"3",y:"3",width:"8",height:"18",rx:"2",ry:"2",fill:"none",stroke:"currentColor",strokeWidth:"2"}))}const Bt=vt.forwardRef(({icon:n,size:s=24,...f},l)=>vt.cloneElement(n,{width:s,height:s,...f,ref:l}));var Tt={exports:{}},at={};/**
|
|
2
2
|
* @license React
|
|
3
3
|
* react-jsx-runtime.production.min.js
|
|
4
4
|
*
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/var
|
|
9
|
+
*/var jt;function dr(){if(jt)return at;jt=1;var n=e,s=Symbol.for("react.element"),f=Symbol.for("react.fragment"),l=Object.prototype.hasOwnProperty,C=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,d={key:!0,ref:!0,__self:!0,__source:!0};function k(A,F,h){var _,D={},P=null,z=null;h!==void 0&&(P=""+h),F.key!==void 0&&(P=""+F.key),F.ref!==void 0&&(z=F.ref);for(_ in F)l.call(F,_)&&!d.hasOwnProperty(_)&&(D[_]=F[_]);if(A&&A.defaultProps)for(_ in F=A.defaultProps,F)D[_]===void 0&&(D[_]=F[_]);return{$$typeof:s,type:A,key:P,ref:z,props:D,_owner:C.current}}return at.Fragment=f,at.jsx=k,at.jsxs=k,at}var ot={};/**
|
|
10
10
|
* @license React
|
|
11
11
|
* react-jsx-runtime.development.js
|
|
12
12
|
*
|
|
@@ -14,18 +14,18 @@
|
|
|
14
14
|
*
|
|
15
15
|
* This source code is licensed under the MIT license found in the
|
|
16
16
|
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/var
|
|
18
|
-
`+
|
|
19
|
-
`),
|
|
20
|
-
`),
|
|
21
|
-
`+
|
|
17
|
+
*/var Ot;function mr(){return Ot||(Ot=1,process.env.NODE_ENV!=="production"&&function(){var n=e,s=Symbol.for("react.element"),f=Symbol.for("react.portal"),l=Symbol.for("react.fragment"),C=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),k=Symbol.for("react.provider"),A=Symbol.for("react.context"),F=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),_=Symbol.for("react.suspense_list"),D=Symbol.for("react.memo"),P=Symbol.for("react.lazy"),z=Symbol.for("react.offscreen"),Z=Symbol.iterator,S="@@iterator";function q(t){if(t===null||typeof t!="object")return null;var c=Z&&t[Z]||t[S];return typeof c=="function"?c:null}var w=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function R(t){{for(var c=arguments.length,m=new Array(c>1?c-1:0),x=1;x<c;x++)m[x-1]=arguments[x];U("error",t,m)}}function U(t,c,m){{var x=w.ReactDebugCurrentFrame,W=x.getStackAddendum();W!==""&&(c+="%s",m=m.concat([W]));var Y=m.map(function(B){return String(B)});Y.unshift("Warning: "+c),Function.prototype.apply.call(console[t],console,Y)}}var J=!1,ne=!1,y=!1,j=!1,O=!1,V;V=Symbol.for("react.module.reference");function p(t){return!!(typeof t=="string"||typeof t=="function"||t===l||t===d||O||t===C||t===h||t===_||j||t===z||J||ne||y||typeof t=="object"&&t!==null&&(t.$$typeof===P||t.$$typeof===D||t.$$typeof===k||t.$$typeof===A||t.$$typeof===F||t.$$typeof===V||t.getModuleId!==void 0))}function N(t,c,m){var x=t.displayName;if(x)return x;var W=c.displayName||c.name||"";return W!==""?m+"("+W+")":m}function le(t){return t.displayName||"Context"}function G(t){if(t==null)return null;if(typeof t.tag=="number"&&R("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case l:return"Fragment";case f:return"Portal";case d:return"Profiler";case C:return"StrictMode";case h:return"Suspense";case _:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case A:var c=t;return le(c)+".Consumer";case k:var m=t;return le(m._context)+".Provider";case F:return N(t,t.render,"ForwardRef");case D:var x=t.displayName||null;return x!==null?x:G(t.type)||"Memo";case P:{var W=t,Y=W._payload,B=W._init;try{return G(B(Y))}catch{return null}}}return null}var M=Object.assign,ae=0,Q,he,pe,Fe,ke,ee,Le;function te(){}te.__reactDisabledLog=!0;function Be(){{if(ae===0){Q=console.log,he=console.info,pe=console.warn,Fe=console.error,ke=console.group,ee=console.groupCollapsed,Le=console.groupEnd;var t={configurable:!0,enumerable:!0,value:te,writable:!0};Object.defineProperties(console,{info:t,log:t,warn:t,error:t,group:t,groupCollapsed:t,groupEnd:t})}ae++}}function ge(){{if(ae--,ae===0){var t={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:M({},t,{value:Q}),info:M({},t,{value:he}),warn:M({},t,{value:pe}),error:M({},t,{value:Fe}),group:M({},t,{value:ke}),groupCollapsed:M({},t,{value:ee}),groupEnd:M({},t,{value:Le})})}ae<0&&R("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var xe=w.ReactCurrentDispatcher,Ne;function Pe(t,c,m){{if(Ne===void 0)try{throw Error()}catch(W){var x=W.stack.trim().match(/\n( *(at )?)/);Ne=x&&x[1]||""}return`
|
|
18
|
+
`+Ne+t}}var fe=!1,$;{var E=typeof WeakMap=="function"?WeakMap:Map;$=new E}function me(t,c){if(!t||fe)return"";{var m=$.get(t);if(m!==void 0)return m}var x;fe=!0;var W=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var Y;Y=xe.current,xe.current=null,Be();try{if(c){var B=function(){throw Error()};if(Object.defineProperty(B.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(B,[])}catch(be){x=be}Reflect.construct(t,[],B)}else{try{B.call()}catch(be){x=be}t.call(B.prototype)}}else{try{throw Error()}catch(be){x=be}t()}}catch(be){if(be&&x&&typeof be.stack=="string"){for(var I=be.stack.split(`
|
|
19
|
+
`),Ee=x.stack.split(`
|
|
20
|
+
`),se=I.length-1,ue=Ee.length-1;se>=1&&ue>=0&&I[se]!==Ee[ue];)ue--;for(;se>=1&&ue>=0;se--,ue--)if(I[se]!==Ee[ue]){if(se!==1||ue!==1)do if(se--,ue--,ue<0||I[se]!==Ee[ue]){var Te=`
|
|
21
|
+
`+I[se].replace(" at new "," at ");return t.displayName&&Te.includes("<anonymous>")&&(Te=Te.replace("<anonymous>",t.displayName)),typeof t=="function"&&$.set(t,Te),Te}while(se>=1&&ue>=0);break}}}finally{fe=!1,xe.current=Y,ge(),Error.prepareStackTrace=W}var Ze=t?t.displayName||t.name:"",$e=Ze?Pe(Ze):"";return typeof t=="function"&&$.set(t,$e),$e}function de(t,c,m){return me(t,!1)}function ve(t){var c=t.prototype;return!!(c&&c.isReactComponent)}function b(t,c,m){if(t==null)return"";if(typeof t=="function")return me(t,ve(t));if(typeof t=="string")return Pe(t);switch(t){case h:return Pe("Suspense");case _:return Pe("SuspenseList")}if(typeof t=="object")switch(t.$$typeof){case F:return de(t.render);case D:return b(t.type,c,m);case P:{var x=t,W=x._payload,Y=x._init;try{return b(Y(W),c,m)}catch{}}}return""}var T=Object.prototype.hasOwnProperty,oe={},ie=w.ReactDebugCurrentFrame;function ce(t){if(t){var c=t._owner,m=b(t.type,t._source,c?c.type:null);ie.setExtraStackFrame(m)}else ie.setExtraStackFrame(null)}function ye(t,c,m,x,W){{var Y=Function.call.bind(T);for(var B in t)if(Y(t,B)){var I=void 0;try{if(typeof t[B]!="function"){var Ee=Error((x||"React class")+": "+m+" type `"+B+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof t[B]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw Ee.name="Invariant Violation",Ee}I=t[B](c,B,x,m,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(se){I=se}I&&!(I instanceof Error)&&(ce(W),R("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",x||"React class",m,B,typeof I),ce(null)),I instanceof Error&&!(I.message in oe)&&(oe[I.message]=!0,ce(W),R("Failed %s type: %s",m,I.message),ce(null))}}}var Ve=Array.isArray;function we(t){return Ve(t)}function Ie(t){{var c=typeof Symbol=="function"&&Symbol.toStringTag,m=c&&t[Symbol.toStringTag]||t.constructor.name||"Object";return m}}function tt(t){try{return He(t),!1}catch{return!0}}function He(t){return""+t}function st(t){if(tt(t))return R("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",Ie(t)),He(t)}var lt=w.ReactCurrentOwner,wt={key:!0,ref:!0,__self:!0,__source:!0},ct,ze;function Ue(t){if(T.call(t,"ref")){var c=Object.getOwnPropertyDescriptor(t,"ref").get;if(c&&c.isReactWarning)return!1}return t.ref!==void 0}function Et(t){if(T.call(t,"key")){var c=Object.getOwnPropertyDescriptor(t,"key").get;if(c&&c.isReactWarning)return!1}return t.key!==void 0}function gt(t,c){typeof t.ref=="string"&<.current}function yt(t,c){{var m=function(){ct||(ct=!0,R("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",c))};m.isReactWarning=!0,Object.defineProperty(t,"key",{get:m,configurable:!0})}}function _t(t,c){{var m=function(){ze||(ze=!0,R("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",c))};m.isReactWarning=!0,Object.defineProperty(t,"ref",{get:m,configurable:!0})}}var bt=function(t,c,m,x,W,Y,B){var I={$$typeof:s,type:t,key:c,ref:m,props:B,_owner:Y};return I._store={},Object.defineProperty(I._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(I,"_self",{configurable:!1,enumerable:!1,writable:!1,value:x}),Object.defineProperty(I,"_source",{configurable:!1,enumerable:!1,writable:!1,value:W}),Object.freeze&&(Object.freeze(I.props),Object.freeze(I)),I};function ut(t,c,m,x,W){{var Y,B={},I=null,Ee=null;m!==void 0&&(st(m),I=""+m),Et(c)&&(st(c.key),I=""+c.key),Ue(c)&&(Ee=c.ref,gt(c,W));for(Y in c)T.call(c,Y)&&!wt.hasOwnProperty(Y)&&(B[Y]=c[Y]);if(t&&t.defaultProps){var se=t.defaultProps;for(Y in se)B[Y]===void 0&&(B[Y]=se[Y])}if(I||Ee){var ue=typeof t=="function"?t.displayName||t.name||"Unknown":t;I&&yt(B,ue),Ee&&_t(B,ue)}return bt(t,I,Ee,W,x,lt.current,B)}}var qe=w.ReactCurrentOwner,rt=w.ReactDebugCurrentFrame;function je(t){if(t){var c=t._owner,m=b(t.type,t._source,c?c.type:null);rt.setExtraStackFrame(m)}else rt.setExtraStackFrame(null)}var Ge;Ge=!1;function Ye(t){return typeof t=="object"&&t!==null&&t.$$typeof===s}function ft(){{if(qe.current){var t=G(qe.current.type);if(t)return`
|
|
22
22
|
|
|
23
|
-
Check the render method of \``+
|
|
23
|
+
Check the render method of \``+t+"`."}return""}}function Ct(t){return""}var dt={};function Rt(t){{var c=ft();if(!c){var m=typeof t=="string"?t:t.displayName||t.name;m&&(c=`
|
|
24
24
|
|
|
25
|
-
Check the top-level render call using <`+
|
|
25
|
+
Check the top-level render call using <`+m+">.")}return c}}function mt(t,c){{if(!t._store||t._store.validated||t.key!=null)return;t._store.validated=!0;var m=Rt(c);if(dt[m])return;dt[m]=!0;var x="";t&&t._owner&&t._owner!==qe.current&&(x=" It was passed a child from "+G(t._owner.type)+"."),je(t),R('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',m,x),je(null)}}function r(t,c){{if(typeof t!="object")return;if(we(t))for(var m=0;m<t.length;m++){var x=t[m];Ye(x)&&mt(x,c)}else if(Ye(t))t._store&&(t._store.validated=!0);else if(t){var W=q(t);if(typeof W=="function"&&W!==t.entries)for(var Y=W.call(t),B;!(B=Y.next()).done;)Ye(B.value)&&mt(B.value,c)}}}function a(t){{var c=t.type;if(c==null||typeof c=="string")return;var m;if(typeof c=="function")m=c.propTypes;else if(typeof c=="object"&&(c.$$typeof===F||c.$$typeof===D))m=c.propTypes;else return;if(m){var x=G(c);ye(m,t.props,"prop",x,t)}else if(c.PropTypes!==void 0&&!Ge){Ge=!0;var W=G(c);R("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",W||"Unknown")}typeof c.getDefaultProps=="function"&&!c.getDefaultProps.isReactClassApproved&&R("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function o(t){{for(var c=Object.keys(t.props),m=0;m<c.length;m++){var x=c[m];if(x!=="children"&&x!=="key"){je(t),R("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",x),je(null);break}}t.ref!==null&&(je(t),R("Invalid attribute `ref` supplied to `React.Fragment`."),je(null))}}var i={};function u(t,c,m,x,W,Y){{var B=p(t);if(!B){var I="";(t===void 0||typeof t=="object"&&t!==null&&Object.keys(t).length===0)&&(I+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var Ee=Ct();Ee?I+=Ee:I+=ft();var se;t===null?se="null":we(t)?se="array":t!==void 0&&t.$$typeof===s?(se="<"+(G(t.type)||"Unknown")+" />",I=" Did you accidentally export a JSX literal instead of a component?"):se=typeof t,R("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",se,I)}var ue=ut(t,c,m,W,Y);if(ue==null)return ue;if(B){var Te=c.children;if(Te!==void 0)if(x)if(we(Te)){for(var Ze=0;Ze<Te.length;Ze++)r(Te[Ze],t);Object.freeze&&Object.freeze(Te)}else R("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else r(Te,t)}if(T.call(c,"key")){var $e=G(t),be=Object.keys(c).filter(function(Kt){return Kt!=="key"}),xt=be.length>0?"{key: someKey, "+be.join(": ..., ")+": ...}":"{key: someKey}";if(!i[$e+xt]){var Zt=be.length>0?"{"+be.join(": ..., ")+": ...}":"{}";R(`A props object containing a "key" prop is being spread into JSX:
|
|
26
26
|
let props = %s;
|
|
27
27
|
<%s {...props} />
|
|
28
28
|
React keys must be passed directly to JSX without using spread:
|
|
29
29
|
let props = %s;
|
|
30
|
-
<%s key={someKey} {...props} />`,Rt,Ie,Zt,Ie),g[Ie+Rt]=!0}}return e===m?i(ae):s(ae),ae}}function R(e,u,f){return d(e,u,f,!0)}function K(e,u,f){return d(e,u,f,!1)}var ke=K,Ge=R;Xe.Fragment=m,Xe.jsx=ke,Xe.jsxs=Ge}()),Xe}process.env.NODE_ENV==="production"?Pt.exports=ur():Pt.exports=fr();var Re=Pt.exports,tt=n=>mt.createElement("path",n),rt=mt.forwardRef(({className:n,isPressed:c,...l},m)=>{const p={...l,className:rr(n,{"is-pressed":c})||void 0,"aria-hidden":!0,focusable:!1};return Re.jsx("svg",{...p,ref:m})});rt.displayName="SVG";const dr=Re.jsx(rt,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:Re.jsx(tt,{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"})}),mr=Re.jsx(rt,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:Re.jsx(tt,{d:"M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z"})}),pr=Re.jsx(rt,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:Re.jsx(tt,{fillRule:"evenodd",clipRule:"evenodd",d:"M12.848 8a1 1 0 0 1-.914-.594l-.723-1.63a.5.5 0 0 0-.447-.276H5a.5.5 0 0 0-.5.5v11.5a.5.5 0 0 0 .5.5h14a.5.5 0 0 0 .5-.5v-9A.5.5 0 0 0 19 8h-6.152Zm.612-1.5a.5.5 0 0 1-.462-.31l-.445-1.084A2 2 0 0 0 10.763 4H5a2 2 0 0 0-2 2v11.5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2h-5.54Z"})}),hr=Re.jsxs(rt,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:[Re.jsx(tt,{d:"M15.5 7.5h-7V9h7V7.5Zm-7 3.5h7v1.5h-7V11Zm7 3.5h-7V16h7v-1.5Z"}),Re.jsx(tt,{d:"M17 4H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2ZM7 5.5h10a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H7a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 .5-.5Z"})]}),wr="_file-picker-tree_3rwm2_1",gr="_file-node-button_3rwm2_17",vr="_selected_3rwm2_53",Er="_focused_3rwm2_65",yr="_dropTarget_3rwm2_70",_r="_dropTargetInvalid_3rwm2_79",br="_renaming_3rwm2_88",Cr="_renameInput_3rwm2_93",Rr="_file-name_3rwm2_108",he={filePickerTree:wr,fileNodeButton:gr,selected:vr,focused:Er,dropTarget:yr,dropTargetInvalid:_r,renaming:br,renameInput:Cr,fileName:Rr};function xt(n){if(!n)return[];const c=n.replaceAll(/\\+/g,"/").replace(/\/{2,}/g,"/").replace(/\/$/,"")||n,l=c.startsWith("/"),m=c.split("/").filter(Boolean),p=[];let E=l?"/":"";l&&p.push("/");for(const P of m)!E||E==="/"?E=E==="/"?`/${P}`:P:E=`${E}/${P}`,p.push(E);return p}function xr(n,c){if(!n||!c||n===c)return!1;const l=n==="/"?"/":n.replace(/\/{2,}/g,"/"),m=c.replace(/\/{2,}/g,"/");return l==="/"?m.startsWith("/")&&m!=="/":m.startsWith(`${l}/`)}function St(n,c,l){return n&&(n===c?l:n.startsWith(c==="/"?"/":`${c}/`)?l+n.slice(c.length):n)}const $t=t.forwardRef(function({withContextMenu:c=!0,filesystem:l,root:m="/wordpress",initialSelectedPath:p,onSelect:E=()=>{},onDoubleClickFile:P},j){const S=t.useMemo(()=>{let r=(m||"/").replace(/\\+/g,"/");return r.startsWith("/")||(r=`/${r}`),r=r.replace(/\/{2,}/g,"/"),r.length>1&&r.endsWith("/")&&(r=r.slice(0,-1)),r||"/"},[m]),y=r=>!r||r==="."||r===".."?!1:!/[\\/]/.test(r),[v,N]=t.useState(()=>{if(!p)return{};const r={};for(const a of xt(p))r[a]=!0;return r}),[T,I]=t.useState(()=>p??null),[U,A]=t.useState(()=>p??null),[D,h]=t.useState({}),[b,Z]=t.useState({}),[V,q]=t.useState(null),[J,B]=t.useState(null),L=t.useRef({}),X=t.useRef(!1),_=t.useRef(null),$=t.useRef(null),fe=t.useRef(b),te=t.useRef(D),Q=()=>{for(const r of Object.keys(L.current))clearTimeout(L.current[r]),delete L.current[r]},ce=r=>{const a=L.current[r];a&&(clearTimeout(a),delete L.current[r])};t.useEffect(()=>{fe.current=b},[b]),t.useEffect(()=>{te.current=D},[D]);const re=r=>{var o;const a=(o=_.current)==null?void 0:o.querySelector(`[data-path="${r}"]`);a&&typeof a.focus=="function"&&(a.focus(),a.scrollIntoView({behavior:"smooth",block:"nearest"}))},be=(r,a="")=>(a?`${a}/${r.name}`:r.name).replaceAll(/\\+/g,"/").replace(/\/{2,}/g,"/"),xe=(r,a)=>r.children?r.children:D[a],Se=async(r,a)=>{const o=await r.listFiles(a),s=[];for(const i of o){const g=a==="/"?`/${i}`:`${a}/${i}`,d=await r.isDir(g);s.push({name:i,type:d?"folder":"file"})}return s.sort((i,g)=>{var ke;if(i.type!==g.type)return i.type==="folder"?-1:1;const d=a==="/"?`/${i.name}`:`${a}/${i.name}`,R=a==="/"?`/${g.name}`:`${a}/${g.name}`,K=(ke=ye.current)==null?void 0:ke.tempPath;if(K){if(d===K)return-1;if(R===K)return 1}return i.name.localeCompare(g.name)}),s},Te=async r=>await Se(l,r),oe=(r,a)=>{if(a.type!=="folder")return a.children;const o=a.children??te.current[r];return o||fe.current[r]?o:(Z(s=>({...s,[r]:!0})),new Promise(s=>{Te(r).then(i=>{h(g=>({...g,[r]:i??[]})),s(i??[])}).catch(()=>{s([])}).finally(()=>{Z(i=>{const g={...i};return delete g[r],g})})}))},k=(r,a)=>{a.type==="folder"&&(typeof window>"u"||L.current[r]||(L.current[r]=window.setTimeout(()=>{N(o=>o[r]?o:{...o,[r]:!0}),oe(r,a),delete L.current[r]},600)))},C=r=>(Z(a=>({...a,[r]:!0})),new Promise(a=>{Te(r).then(o=>{h(s=>({...s,[r]:o??[]})),a(o??[])}).catch(()=>{a([])}).finally(()=>{Z(o=>{const s={...o};return delete s[r],s})})})),G=(r,a,o)=>{N(s=>({...s,[r]:o})),o?oe(r,a):h(s=>{if(s[r]===void 0)return s;const i={...s};return delete i[r],i})},W=async r=>{if(!r)return;const a=xt(r);if(a.length===0)return;N(i=>{const g={...i};for(const d of a)g[d]=!0;return g});let o=[{name:S,type:"folder"}],s="";for(const i of a){const g=o==null?void 0:o.find(R=>be(R,s)===i);if(!g||g.type!=="folder"){s=i,o=[];continue}o=await oe(i,g)??te.current[i],s=i}},ne=(r,a)=>{if(!r||!a||r===a)return;const o=r==="/"?"/":`${r}/`,s=i=>i===r?a:i.startsWith(o)?a+i.slice(r.length):null;N(i=>{let g=!1;const d={...i};for(const R of Object.keys(i)){const K=s(R);K&&K!==R&&(d[K]=i[R],delete d[R],g=!0)}return g?d:i}),h(i=>{let g=!1;const d={...i};for(const R of Object.keys(i)){const K=s(R);K&&K!==R&&(d[K]=i[R],delete d[R],g=!0)}return g?d:i}),I(i=>i&&(s(i)??i)),A(i=>i&&(s(i)??i))},Ee=()=>{q(null),B(null),Q()},we=(r,a=!0)=>{I(r),a&&E(r)},ie=t.useMemo(()=>[{name:S,type:"folder"}],[S]),[H,w]=t.useState(null),[ge,de]=t.useState(null),ye=t.useRef(null),Pe=ge;t.useImperativeHandle(j,()=>({focusPath:(r,a={})=>{if(!r)return;const{select:o=!0,domFocus:s=!0,notify:i=!1}=a;o&&we(r,i),A(r),s&&re(r)},selectPath:r=>{r&&(we(r),A(r),re(r))},getSelectedPath:()=>T,expandToPath:async r=>await W(r),refresh:async r=>await C(r),remapPath:ne,createFile:async r=>{await Ve(r,"file","untitled.php")},createFolder:async r=>{await Ve(r,"folder","New Folder")}}),[T,C,ne,W]);const Ne=t.useRef(!1),Ae=t.useRef(p??null),ze=t.useRef(p);t.useEffect(()=>{X.current=!1},[S]),t.useEffect(()=>{p&&p!==ze.current?Ae.current=p:p||(Ae.current=null),ze.current=p},[p]),t.useEffect(()=>{if(!p||Ne.current)return;Ne.current=!0;const r=xt(p);N(o=>{const s={...o};for(const i of r)s[i]=!0;return s});const a=r[r.length-1]||p;A(a),I(a),W(p)},[p,W]),t.useEffect(()=>{const r=Ae.current;!r||ie.length===0||(Ae.current=null,W(r))},[ie,W]),t.useEffect(()=>{if(!U){if(ie.length>0){const r=be(ie[0]);A(r)}return}Pe&&Pe===U||re(U)},[ie,U,Pe]),t.useEffect(()=>{if(ie.length===0)return;const r=ie[0];if((r==null?void 0:r.type)!=="folder"||X.current)return;const a=r.name;X.current=!0,N(o=>o[a]?o:{...o,[a]:!0}),!te.current[a]&&!fe.current[a]&&oe(a,r)},[ie,oe,S]),t.useEffect(()=>()=>{$.current&&clearTimeout($.current),Q()},[]),t.useEffect(()=>{H&&setTimeout(()=>{const r=document.querySelector('[role="menu"] [role="menuitem"]');r&&typeof r.focus=="function"&&r.focus()},0)},[H]);const[Me,Ue]=t.useState(""),pt=(r,a)=>{if(r.type==="folder")return a;const o=se.dirname(a);return o&&o||"/"},Le=(r,a,o)=>{const s=pt(r,a);if(!s)return{allowed:!1,state:"invalid",destination:null};if(o){if(s===o)return{allowed:!1,state:"invalid",destination:null};if(xr(o,s))return{allowed:!1,state:"invalid",destination:null}}return{allowed:!0,state:"valid",destination:s}},ht=(r,a,o)=>{a.type!=="folder"&&a.type!=="file"||(q(o),B(null),r.dataTransfer&&(r.dataTransfer.effectAllowed="move",r.dataTransfer.setData("application/x-wp-playground-path",o),r.dataTransfer.setData("text/plain",o)))},wt=()=>{Ee()},nt=(r,a,o)=>{const s=Le(a,o,V);s.allowed&&a.type==="folder"&&k(o,a),B(i=>(i==null?void 0:i.path)===o&&i.state===s.state?i:{path:o,state:s.state})},at=(r,a,o)=>{const s=Le(a,o,V);s.allowed&&s.destination?(r.preventDefault(),r.dataTransfer&&(r.dataTransfer.dropEffect=V?"move":"copy"),a.type==="folder"&&k(o,a),B(i=>(i==null?void 0:i.path)===o&&i.state===s.state?i:{path:o,state:s.state})):(r.dataTransfer&&(r.dataTransfer.dropEffect="none"),ce(o),B(i=>(i==null?void 0:i.path)===o&&i.state==="invalid"?i:{path:o,state:"invalid"}))},ot=(r,a,o)=>{ce(o);const s=r.relatedTarget;s&&r.currentTarget.contains(s)||B(i=>(i==null?void 0:i.path)===o?null:i)},gt=async(r,a,o)=>{const s=V,i=Le(a,o,s);if(!i.allowed||!i.destination){Ee();return}r.preventDefault(),r.stopPropagation(),ce(o),B(null);try{s?await yt(s,i.destination):await De(r,i.destination)}finally{Ee()}},it=(r,a,o)=>{c&&(r.preventDefault(),r.stopPropagation(),de(null),w({absPath:o,type:a.type,x:r.clientX,y:r.clientY}))},Fe=async(r,a)=>{let o=a,s=0;const i=d=>{const R=d.lastIndexOf(".");return R>0?{stem:d.slice(0,R),ext:d.slice(R)}:{stem:d,ext:""}},g=r==="/"?"":r;for(;await(l==null?void 0:l.fileExists(`${g}/${o}`))||await(l==null?void 0:l.isDir(`${g}/${o}`));){s+=1;const{stem:d,ext:R}=i(a);o=`${d} (${s})${R}`}return o},Ve=async(r,a,o)=>{if(!l)return;let s=r||T||S;try{await l.isDir(s)||(s=se.dirname(s))}catch{s=se.dirname(s)}const i=s,g=await Fe(i,o),d=se.joinPaths(i,g);a==="folder"?await l.mkdir(d):await l.writeFile(d,""),ye.current={type:a,tempPath:d},de(d),await C(i),setTimeout(()=>{A(d),re(d)},0)},vt=async r=>{if(!l)return!1;try{if(await l.fileExists(r))return!0}catch{}try{if(await l.isDir(r))return!0}catch{}return!1},Et=async r=>{if(l)try{await l.mkdir(r)}catch(a){if(!await l.isDir(r).catch(()=>!1))throw a}},yt=async(r,a)=>{if(!l)return;const o=se.basename(r),s=se.joinPaths(a,o);if(s===r||await vt(s))return;const i=se.dirname(r);try{await l.mv(r,s),ne(r,s);const g=St(T,r,s);T&&(T===r||T.startsWith(`${r}/`))&&E(g),A(d=>St(d,r,s)),N(d=>({...d,[a]:!0})),await Promise.all([C(i),C(a)]),I(d=>St(d,r,s)),re(s)}catch{}},_t=r=>{const a=r;return a.webkitGetAsEntry?a.webkitGetAsEntry():null},bt=r=>new Promise((a,o)=>{r.file(a,o)}),st=async(r,a)=>{if(!l)return;const o=r.name||"untitled",s=await Fe(a,o),i=se.joinPaths(a,s),g=new Uint8Array(await r.arrayBuffer());await l.writeFile(i,g)},Be=async(r,a)=>{const o=await bt(r);await st(o,a)},qe=async(r,a)=>{const o=await Fe(a,r.name||"New Folder"),s=se.joinPaths(a,o);await Et(s);const i=r.createReader(),g=()=>new Promise((d,R)=>{i.readEntries(K=>d(Array.from(K)),R)});for(;;){const d=await g();if(!d.length)break;for(const R of d)R.isFile?await Be(R,s):R.isDirectory&&await qe(R,s)}},De=async(r,a)=>{var i,g;if(!l)return;const s=((i=r.dataTransfer)!=null&&i.items?Array.from(r.dataTransfer.items):[]).filter(d=>d.kind==="file").map(d=>_t(d)).filter(d=>!!d);if(s.length>0)for(const d of s)d.isFile?await Be(d,a):d.isDirectory&&await qe(d,a);else{const d=(g=r.dataTransfer)!=null&&g.files?Array.from(r.dataTransfer.files):[];for(const R of d)await st(R,a)}await C(a),N(d=>({...d,[a]:!0}))},Ye=async(r,a)=>{if(!l)return;const o=r;w(null);try{a==="folder"?await l.rmdir(o,{recursive:!0}):await l.unlink(o)}catch{}finally{de(null);const s=se.dirname(o);await C(s),T&&(T===o||T.startsWith(`${o}/`))&&E(null)}},Ze=async r=>{if(l)try{const o=await(await l.read(r)).arrayBuffer(),s=new Blob([o]),i=URL.createObjectURL(s),g=document.createElement("a");g.href=i,g.download=se.basename(r)||"download",document.body.appendChild(g),g.click(),document.body.removeChild(g),setTimeout(()=>URL.revokeObjectURL(i),6e4)}catch(a){console.error("Failed to download file",a)}},lt=r=>{var a;if(!ge)if(r.key.length===1&&r.key.match(/\S/)){const o=Me+r.key.toLowerCase();if(Ue(o),$.current&&clearTimeout($.current),$.current=setTimeout(()=>{Ue("")},1e3),!_.current)return;const s=Array.from(_.current.querySelectorAll(".file-node-button")),i=document.activeElement;let g=0;i&&s.includes(i)&&(g=s.indexOf(i));for(let d=0;d<s.length;d++){const R=(g+d)%s.length,K=s[R];if((a=K.textContent)!=null&&a.toLowerCase().trim().startsWith(o)){K.focus();const ke=K.getAttribute("data-path");ke&&A(ke);break}}}else Ue(""),$.current&&clearTimeout($.current)},Ct=async(r,a)=>{const o=ye.current,s=(o==null?void 0:o.tempPath)===r,i=se.dirname(r),g=(a||"").trim();if(!y(g)){if(s){try{o.type==="folder"?await l.rmdir(r,{recursive:!0}):await l.unlink(r)}catch{}ye.current=null}de(s?null:r);return}let d=se.joinPaths(i,g),R=d;if(R===r){de(null);const e=s&&(o==null?void 0:o.type)==="file";s&&(ye.current=null),setTimeout(()=>{A(R),re(R),e&&P&&P(R)},0);return}const K=await l.fileExists(R),ke=await l.isDir(R);if((K||ke)&&R!==r)if(s)try{const e=await Fe(i==="/"?"/":i,g);d=se.joinPaths(i,e),R=d}catch{}else{de(r);return}let Ge=(o==null?void 0:o.type)==="folder";try{await l.mv(r,d),o||(Ge=await l.isDir(d)),Ge&&ne(r,R),T===r&&E(R),await C(i),A(R),re(R),s&&!Ge&&P&&P(R)}catch{if(s)try{(o==null?void 0:o.type)==="folder"?await l.rmdir(r,{recursive:!0}):await l.unlink(r)}catch{}}finally{ye.current=null,de(null)}},ct=async r=>{const a=ye.current;if(!l||(a==null?void 0:a.tempPath)!==r){de(s=>s===r?null:s);return}try{a.type==="folder"?await l.rmdir(r,{recursive:!0}):await l.unlink(r)}catch{}ye.current=null,de(null);const o=se.dirname(r);await C(o),A(o),re(o)};return t.createElement("div",{onKeyDown:lt,ref:_},t.createElement(le.__experimentalTreeGrid,{className:he.filePickerTree},ie.map((r,a)=>t.createElement(Wt,{key:r.name,node:r,level:0,position:a+1,setSize:ie.length,expandedNodePaths:v,onToggle:G,selectedNode:T,focusPath:o=>A(o),focusedNode:U,selectPath:we,generatePath:be,getChildren:xe,onContextMenu:it,renamingPath:Pe,onRename:Ct,onRenameCancel:ct,dropIndicator:J,onDragStart:ht,onDragEnd:wt,onDragEnter:nt,onDragOver:at,onDragLeave:ot,onDrop:gt,rootPath:S,onDoubleClickFile:P}))),H&&t.createElement(le.Popover,{placement:"bottom-start",onClose:()=>w(null),anchor:{getBoundingClientRect:()=>({x:H.x,y:H.y,width:0,height:0,top:H.y,left:H.x,right:H.x,bottom:H.y,toJSON:()=>({})}),ownerDocument:document},noArrow:!0,resize:!1,focusOnMount:"firstElement"},t.createElement(le.NavigableMenu,{role:"menu"},H.type==="folder"&&t.createElement(le.MenuItem,{role:"menuitem",onClick:async()=>{w(null),await Ve(H.absPath,"file","untitled.php")}},"Create file"),H.type==="folder"&&t.createElement(le.MenuItem,{role:"menuitem",onClick:async()=>{w(null),await Ve(H.absPath,"folder","New Folder")}},"Create directory"),t.createElement(le.MenuItem,{role:"menuitem",onClick:()=>{w(null),de(H.absPath)}},"Rename"),H.type==="file"&&t.createElement(le.MenuItem,{role:"menuitem",onClick:async()=>{w(null),await Ze(H.absPath)}},"Download"),t.createElement(le.MenuItem,{role:"menuitem",onClick:()=>Ye(H.absPath,H.type)},"Delete"))))}),Wt=({node:n,level:c,position:l,setSize:m,expandedNodePaths:p,onToggle:E,selectedNode:P,focusPath:j,focusedNode:S,selectPath:y,generatePath:v,getChildren:N,onContextMenu:T,renamingPath:I,onRename:U,onRenameCancel:A,parentPath:D="",dropIndicator:h,onDragStart:b,onDragEnd:Z,onDragEnter:V,onDragOver:q,onDragLeave:J,onDrop:B,rootPath:L,onDoubleClickFile:X})=>{const _=v(n,D),$=p[_],fe=I===_,te=t.useRef(null),[Q,ce]=t.useState(n.name),re=t.useRef(!1),be=(h==null?void 0:h.path)===_,xe=be&&(h==null?void 0:h.state)==="valid",Se=be&&(h==null?void 0:h.state)==="invalid",Te=!fe&&_!==L,oe=t.useRef(null),k={onDragEnter:w=>V==null?void 0:V(w,n,_),onDragOver:w=>q==null?void 0:q(w,n,_),onDragLeave:w=>J==null?void 0:J(w,n,_),onDrop:w=>B==null?void 0:B(w,n,_)},C=N(n,_)??[];t.useEffect(()=>{var w;fe?(ce(n.name),re.current=!1,typeof window<"u"&&requestAnimationFrame?requestAnimationFrame(()=>{var ge;(ge=te.current)==null||ge.select()}):(w=te.current)==null||w.select()):re.current=!1},[fe,n.name]);const G=()=>{n.type==="folder"&&E(_,n,!$)},W=w=>{var ge,de;if(w.key==="ArrowLeft")$?G():(ge=document.querySelector(`[data-path="${D}"]`))==null||ge.focus(),w.preventDefault(),w.stopPropagation();else if(w.key==="ArrowRight"){if($){if(C!=null&&C.length){const ye=v(C[0],_);(de=document.querySelector(`[data-path="${ye}"]`))==null||de.focus()}}else G();w.preventDefault(),w.stopPropagation()}else w.key===" "||w.key==="Space"||w.key==="Spacebar"?(n.type==="folder"&&E(_,n,!$),w.preventDefault()):w.key==="Enter"&&(n.type==="folder"?E(_,n,!$):(y(_,!1),j(_),X?X(_):y(_,!0)),w.preventDefault())},ne=w=>{T==null||T(w,n,_)},Ee=w=>{w.preventDefault(),re.current=!0,U==null||U(_,Q.trim())},we=w=>{if(w.key==="Escape"){w.preventDefault(),w.stopPropagation(),re.current=!0,A==null||A(_);return}(w.key==="ArrowLeft"||w.key==="ArrowRight"||w.key==="ArrowUp"||w.key==="ArrowDown")&&w.stopPropagation()},ie=()=>{re.current||A==null||A(_),re.current=!1},H=()=>{if(n.type==="folder"){G(),y(_),j(_);return}const w=oe.current!==null;if(w&&oe.current&&clearTimeout(oe.current),oe.current=null,w){X?X(_):y(_,!0);return}y(_,!1),j(_),y(_,!0),oe.current=window.setTimeout(()=>{oe.current=null},300)};return t.useEffect(()=>()=>{oe.current!==null&&typeof window<"u"&&clearTimeout(oe.current)},[]),t.createElement(t.Fragment,null,t.createElement(le.__experimentalTreeGridRow,{level:c,positionInSet:l,setSize:m},t.createElement(le.__experimentalTreeGridCell,null,()=>t.createElement(t.Fragment,null,fe?t.createElement("form",{onSubmit:Ee,className:Qe(he.fileNodeButton,he.renaming,"file-node-button",{[he.selected]:P===_,[he.focused]:S===_,[he.dropTarget]:xe,[he.dropTargetInvalid]:Se}),"data-path":_,onContextMenu:ne,...k},t.createElement(Mt,{node:n,isOpen:n.type==="folder"&&$,level:c,hideName:!0}),t.createElement("input",{ref:te,className:he.renameInput,value:Q,onChange:w=>ce(w.target.value),onBlur:ie,onFocus:()=>j(_),onKeyDown:we})):t.createElement(le.Button,{...k,draggable:Te,onDragStart:w=>b==null?void 0:b(w,n,_),onDragEnd:w=>Z==null?void 0:Z(w,n,_),onClick:H,onKeyDown:W,onFocus:()=>{j(_)},onContextMenu:ne,className:Qe(he.fileNodeButton,"file-node-button",{[he.selected]:P===_,[he.focused]:S===_,[he.dropTarget]:xe,[he.dropTargetInvalid]:Se}),"data-path":_,"data-expanded":$?"true":"false"},t.createElement(Mt,{node:n,isOpen:n.type==="folder"&&$,level:c}))))),$&&C&&C.map((w,ge)=>t.createElement(Wt,{key:w.name,node:w,level:c+1,position:ge+1,setSize:C.length,expandedNodePaths:p,onToggle:E,selectedNode:P,focusPath:j,focusedNode:S,selectPath:y,generatePath:v,getChildren:N,onContextMenu:T,renamingPath:I,onRename:U,onRenameCancel:A,parentPath:_,dropIndicator:h,onDragStart:b,onDragEnd:Z,onDragEnter:V,onDragOver:q,onDragLeave:J,onDrop:B,rootPath:L,onDoubleClickFile:X})))},Mt=({node:n,level:c,isOpen:l,hideName:m=!1})=>{const p=[];for(let E=0;E<c;E++)p.push(" ");return t.createElement(t.Fragment,null,t.createElement("span",{"aria-hidden":"true",dangerouslySetInnerHTML:{__html:p.join("")}}),n.type==="folder"?t.createElement(Ft,{width:16,icon:l?dr:mr}):t.createElement("div",{style:{width:16}}," "),t.createElement(Ft,{width:16,icon:n.type==="folder"?Vt:Bt}),!m&&t.createElement("span",{className:he.fileName},n.name))},Sr="_control_kp9d9_1",Tr="_browse-label_kp9d9_11",Pr="_path-preview_kp9d9_37",kr="_modal_kp9d9_43",Nr="_modal-footer_kp9d9_48",He={control:Sr,browseLabel:Tr,pathPreview:Pr,modal:kr,modalFooter:Nr};function Dr({path:n}){if(!n)return t.createElement("div",{className:He.pathPreview},t.createElement("i",null,"Select a path"));const c=n.split("/");let l=(c.length>2?"/":"")+c.pop();l.length>10&&(l=l.substring(l.length-10));const m=n.substring(0,n.length-l.length);return t.createElement("div",{className:He.pathPreview,"data-content-start":m,"data-content-end":l})}function Or({value:n="",onChange:c,filesystem:l}){const[m,p]=t.useState(!1),E=()=>p(!0),P=()=>p(!1),[j,S]=t.useState(n||null);function y(v){v==null||v.preventDefault(),c(j||""),P()}return t.createElement(t.Fragment,null,t.createElement(le.Button,{variant:"tertiary",className:He.control,onClick:E},t.createElement("span",{className:He.browseLabel},"Browse"),t.createElement(Dr,{path:n||""})),m&&t.createElement(le.Modal,{title:"Select a path ",onRequestClose:P,className:He.modal},t.createElement("form",{onSubmit:y},t.createElement($t,{filesystem:l,initialSelectedPath:n,onSelect:S}),t.createElement("div",{className:He.modalFooter},t.createElement(le.Button,{type:"submit",variant:"primary"},"Select Path")))))}const Ar="_container_1h0az_1",Lr="_header_1h0az_9",Fr="_filename_1h0az_18",Ir="_downloadLink_1h0az_26",jr="_previewArea_1h0az_38",Mr="_imagePreview_1h0az_51",Vr="_videoPreview_1h0az_57",Br="_audioPreview_1h0az_64",$r="_unsupportedMessage_1h0az_68",Wr="_actions_1h0az_74",Ce={container:Ar,header:Lr,filename:Fr,downloadLink:Ir,previewArea:jr,imagePreview:Mr,videoPreview:Vr,audioPreview:Br,unsupportedMessage:$r,actions:Wr},Hr=n=>{if(!n)return{isImage:!1,isVideo:!1,isAudio:!1};const c=n.toLowerCase();return{isImage:c.startsWith("image/"),isVideo:c.startsWith("video/"),isAudio:c.startsWith("audio/")}};function zr({filename:n,mimeType:c,dataUrl:l,downloadUrl:m,showHeader:p=!0}){const{isImage:E,isVideo:P,isAudio:j}=Hr(c),S=p!==!1,y=!!(m&&n),v=()=>y?t.createElement("a",{className:Ce.downloadLink,href:m,download:n},"Download"):null,N=()=>E?t.createElement("img",{className:Ce.imagePreview,src:l,alt:n||"Preview"}):P?t.createElement("video",{className:Ce.videoPreview,controls:!0,preload:"metadata"},t.createElement("source",{src:l,type:c}),"Your browser does not support the video tag."):j?t.createElement("audio",{className:Ce.audioPreview,controls:!0},t.createElement("source",{src:l,type:c}),"Your browser does not support the audio tag."):t.createElement("div",{className:Ce.unsupportedMessage},t.createElement("p",null,"Preview unavailable for this file type."),y?t.createElement("p",null,v()):t.createElement("p",null,"Download the file to inspect its contents."));return t.createElement("div",{className:Ce.container},S&&t.createElement("div",{className:Ce.header},t.createElement("span",{className:Ce.filename,title:n},n),v()),t.createElement("div",{className:Ce.previewArea},N()),!S&&y&&t.createElement("div",{className:Ce.actions},v()))}const Tt=new Map,Ur=async n=>{var p;if(!n)return et.php();const c=(p=n.split(".").pop())==null?void 0:p.toLowerCase();if(!c||c==="php")return et.php();const l=n;if(Tt.has(l))return Tt.get(l);let m;switch(c){case"css":m=await import("@codemirror/lang-css").then(E=>E.css());break;case"js":case"jsx":case"ts":case"tsx":m=await import("@codemirror/lang-javascript").then(E=>E.javascript({jsx:c==="jsx"||c==="tsx",typescript:c==="ts"||c==="tsx"}));break;case"json":m=await import("@codemirror/lang-json").then(E=>E.json());break;case"html":case"htm":m=await import("@codemirror/lang-html").then(E=>E.html());break;case"md":case"markdown":m=await import("@codemirror/lang-markdown").then(E=>E.markdown());break;default:m=et.php()}return Tt.set(l,m),m};class qr{constructor(c){this.view=c,this.handleClick=this.handleClick.bind(this),this.view.dom.addEventListener("mousedown",this.handleClick)}handleClick(c){const l=c.target;if((l.classList.contains("cm-scroller")||l.classList.contains("cm-content"))&&this.view.posAtCoords({x:c.clientX,y:c.clientY})===null){const p=this.view.state.doc.length,E=Oe.EditorSelection.create([Oe.EditorSelection.range(p,p)]);this.view.dispatch({selection:E,effects:ve.EditorView.scrollIntoView(p,{y:"center"})}),this.view.focus(),c.preventDefault()}}destroy(){this.view.dom.removeEventListener("mousedown",this.handleClick)}}const Yr=ve.ViewPlugin.define(n=>new qr(n)),Nt=t.forwardRef(function({code:c,onChange:l,currentPath:m,className:p,onSaveShortcut:E,readOnly:P=!1,additionalExtensions:j},S){const y=t.useRef(null),v=t.useRef(null),N=t.useRef(new Oe.Compartment),T=t.useRef(new Oe.Compartment),I=t.useRef(new Oe.Compartment),U=t.useRef(c),A=t.useRef(l),D=t.useRef(!1);return t.useImperativeHandle(S,()=>({focus:()=>{var h;(h=v.current)==null||h.focus()},blur:()=>{const h=v.current;h&&h.contentDOM.blur()},getCursorPosition:()=>v.current?v.current.state.selection.main.anchor:null,setCursorPosition:h=>{if(!v.current)return;const b=Math.min(h,v.current.state.doc.length),Z=Oe.EditorSelection.create([Oe.EditorSelection.range(b,b)]);v.current.dispatch({selection:Z,scrollIntoView:!0})}})),t.useEffect(()=>{U.current=c},[c]),t.useEffect(()=>{A.current=l},[l]),t.useEffect(()=>{if(v.current)return;const h=y.current;if(!h)return;const b=Oe.EditorState.create({doc:c,extensions:[I.current.of(j??[]),ve.lineNumbers(),ve.highlightActiveLineGutter(),ve.highlightActiveLine(),We.foldGutter(),ve.dropCursor(),ve.rectangularSelection(),ve.crosshairCursor(),Yr,N.current.of(et.php()),T.current.of(ve.EditorView.editable.of(!P)),We.syntaxHighlighting(We.defaultHighlightStyle),We.indentOnInput(),We.bracketMatching(),ft.closeBrackets(),ut.history(),Ot.highlightSelectionMatches(),ft.autocompletion(),ve.EditorView.updateListener.of(V=>{if(!V.docChanged)return;const q=V.state.doc.toString();q!==U.current&&(U.current=q,A.current(q))}),ve.keymap.of([{key:"Mod-s",preventDefault:!0,run:()=>(E==null||E(),!0)},...ft.closeBracketsKeymap,...ft.completionKeymap,...We.foldKeymap,...Ot.searchKeymap,...ut.historyKeymap,...ut.defaultKeymap,ut.indentWithTab])]}),Z=new ve.EditorView({state:b,parent:h});return v.current=Z,()=>{Z.destroy(),v.current=null}},[]),t.useEffect(()=>{const h=v.current;h&&h.dispatch({effects:I.current.reconfigure(j??[])})},[j]),t.useEffect(()=>{const h=v.current;if(!h)return;const b=h.state.doc.toString();c!==b&&h.dispatch({changes:{from:0,to:h.state.doc.length,insert:c}})},[c]),t.useEffect(()=>{var q;const h=v.current;if(!h)return;const b=(q=m==null?void 0:m.split(".").pop())==null?void 0:q.toLowerCase();(!b||b==="php")&&h.dispatch({effects:N.current.reconfigure(et.php())});let V=!1;return Ur(m).then(J=>{V||!v.current||v.current.dispatch({effects:N.current.reconfigure(J)})}),()=>{V=!0}},[m]),t.useEffect(()=>{const h=v.current;h&&(h.hasFocus&&(D.current=!0),h.dispatch({effects:T.current.reconfigure(ve.EditorView.editable.of(!P))}))},[P]),t.useLayoutEffect(()=>{const h=v.current;h&&D.current&&!h.hasFocus&&(h.focus(),D.current=!1)},[m,P]),t.createElement("div",{ref:y,className:p})});Nt.displayName="CodeEditor";const Zr="_fileExplorerContainer_1m4t6_1",Gr="_fileExplorerHeader_1m4t6_14",Kr="_fileExplorerTitle_1m4t6_23",Jr="_fileExplorerActions_1m4t6_31",Xr="_fileExplorerButton_1m4t6_37",Qr="_fileExplorerTree_1m4t6_84",je={fileExplorerContainer:Zr,fileExplorerHeader:Gr,fileExplorerTitle:Kr,fileExplorerActions:Jr,fileExplorerButton:Xr,fileExplorerTree:Qr},Ht=1024*1024,zt=n=>{const c=n.byteLength;for(let l=0;l<Math.min(c,4096);l++)if(n[l]===0)return!0;try{return new TextDecoder("utf-8",{fatal:!0}).decode(n),!1}catch{return!0}},kt=(n,c)=>{const l=new Blob([n]),m=URL.createObjectURL(l);return setTimeout(()=>URL.revokeObjectURL(m),6e4),{url:m,filename:c}},Ut=n=>{const c=n.split(".").pop();return Lt[c]||Lt._default},qt=n=>n.startsWith("image/")||n.startsWith("video/")||n.startsWith("audio/");function Yt({filesystem:n,currentPath:c,selectedDirPath:l,setSelectedDirPath:m,onFileOpened:p,onSelectionCleared:E,onShowMessage:P,documentRoot:j}){const S=t.useRef(null),y=t.useMemo(()=>se.normalizePath(c?se.dirname(se.normalizePath(c)):l??j),[c,j]),[v,N]=t.useState(null),T=async(I,U)=>{try{const A=await n.read(I),D=new Uint8Array(await A.arrayBuffer()),h=D.byteLength,b=I.split("/").pop()||"download";if(h>Ht){const{url:V,filename:q}=kt(D,b);await P(I,t.createElement(t.Fragment,null,t.createElement("p",null,"File too large to open (>1MB)."),t.createElement("p",null,t.createElement("a",{href:V,download:q},"Download ",q))));return}if(zt(D)){const V=Ut(b),{url:q,filename:J}=kt(D,b);if(qt(V)){const B=new Blob([D],{type:V}),L=URL.createObjectURL(B);await P(I,t.createElement(At.BinaryFilePreview,{filename:J,mimeType:V,dataUrl:L,downloadUrl:q}));return}await P(I,t.createElement(t.Fragment,null,t.createElement("p",null,"Binary file. Cannot be edited."),t.createElement("p",null,t.createElement("a",{href:q,download:J},"Download ",J))));return}const Z=new TextDecoder("utf-8").decode(D);await p(I,Z,U)}catch(A){dt.logger.error("Could not open file",A),await P(null,"Could not open file.")}};return t.createElement("div",{className:je.fileExplorerContainer},t.createElement("div",{className:je.fileExplorerHeader},t.createElement("span",{className:je.fileExplorerTitle},"Files"),t.createElement("div",{className:je.fileExplorerActions},t.createElement("button",{className:je.fileExplorerButton,type:"button",onClick:()=>{S.current&&S.current.createFile(v??void 0)},title:"Create new file"},t.createElement(le.Icon,{icon:hr,size:16}),"New File"),t.createElement("button",{className:je.fileExplorerButton,type:"button",onClick:()=>{S.current&&S.current.createFolder(v??void 0)},title:"Create new folder"},t.createElement(le.Icon,{icon:pr,size:16}),"New Folder"))),t.createElement("div",{className:je.fileExplorerTree},t.createElement(At.FilePickerTree,{ref:S,filesystem:n,root:j,initialSelectedPath:y,onSelect:async I=>{if(N(I),!I){await E();return}try{if(await n.isDir(I)){m(I);return}}catch{}await T(I,!1)},onDoubleClickFile:async I=>{await T(I,!0)}})))}const en="_container_15o5h_1",tn="_content_15o5h_9",rn="_sidebarWrapper_15o5h_17",nn="_editorWrapper_15o5h_28",an="_editorHeader_15o5h_37",on="_editorPath_15o5h_49",sn="_editorPathPlaceholder_15o5h_60",ln="_saveStatus_15o5h_71",cn="_saveStatusSaving_15o5h_78",un="_saveStatusPending_15o5h_79",fn="_saveStatusError_15o5h_83",dn="_editor_15o5h_28",mn="_placeholder_15o5h_105",pn="_messageArea_15o5h_116",hn="_mobileToggle_15o5h_152",wn="_mobileOverlay_15o5h_156",gn="_sidebarOpen_15o5h_171",ue={container:en,content:tn,sidebarWrapper:rn,editorWrapper:nn,editorHeader:an,editorPath:on,editorPathPlaceholder:sn,saveStatus:ln,saveStatusSaving:cn,saveStatusPending:un,saveStatusError:fn,editor:dn,placeholder:mn,messageArea:pn,mobileToggle:hn,mobileOverlay:wn,sidebarOpen:gn},vn=1500,Y={IDLE:"idle",PENDING:"pending",SAVING:"saving",SAVED:"saved",ERROR:"error"};function En({filesystem:n,isVisible:c=!0,documentRoot:l,initialPath:m=null,placeholderText:p="Select a file to view or edit its contents.",onSaveFile:E,onBeforeFilesystemChange:P}){const[j,S]=t.useState(l),[y,v]=t.useState(null),[N,T]=t.useState(""),[I,U]=t.useState(!0),[A,D]=t.useState(Y.IDLE),[h,b]=t.useState(null),[Z,V]=t.useState(!1),[q,J]=t.useState(null),B=t.useRef(null),L=t.useRef(null),X=t.useRef(!1),_=t.useRef(N),$=t.useRef(y),fe=t.useRef(n),te=t.useRef(null),Q=t.useRef(new Map),ce=t.useRef(!1);t.useEffect(()=>{_.current=N},[N]),t.useEffect(()=>{$.current=y},[y]),t.useEffect(()=>{fe.current=n},[n]),t.useEffect(()=>{const k=te.current;k&&k!==n&&P&&P(k),te.current=n},[n,P]),t.useEffect(()=>{n||(X.current=!0,T(""),v(null),U(!0),D(Y.IDLE),b(null),V(!1),J(null),ce.current=!1)},[n]),t.useEffect(()=>{if(!n||!m||ce.current)return;(async()=>{try{if(await n.fileExists(m)){const G=await n.readFileAsText(m);X.current=!0,v(m),T(G),U(!1),D(Y.IDLE),b(null),setTimeout(()=>{var W;(W=B.current)==null||W.focus()},100)}}catch(C){dt.logger.debug("Could not auto-open initial path:",C)}finally{ce.current=!0}})()},[n,m]),t.useEffect(()=>{S(l),v(null),T(""),U(!0),D(Y.IDLE),b(null),X.current=!0,J(null),ce.current=!1},[l]),t.useEffect(()=>()=>{L.current!==null&&(window.clearTimeout(L.current),L.current=null)},[]),t.useEffect(()=>{const k=fe.current;if(!k||!y){L.current!==null&&(window.clearTimeout(L.current),L.current=null),y||D(Y.IDLE);return}if(X.current){X.current=!1;return}L.current!==null&&(window.clearTimeout(L.current),L.current=null),D(Y.PENDING);const C=window.setTimeout(async()=>{L.current=null,D(Y.SAVING);try{const G=$.current,W=_.current;E?await E(G,W):await k.writeFile(G,W),D(Y.SAVED),b(null)}catch(G){dt.logger.error("Failed to save file",G),D(Y.ERROR),b("Could not save changes. Try again.")}},vn);return L.current=C,()=>{L.current===C&&(window.clearTimeout(C),L.current=null)}},[N,y,E]),t.useEffect(()=>{if(A!==Y.SAVED)return;const k=window.setTimeout(()=>{D(C=>C===Y.SAVED?Y.IDLE:C)},2e3);return()=>window.clearTimeout(k)},[A]);const re=t.useCallback(async(k,C,G=!0)=>{var ne;const W=(ne=B.current)==null?void 0:ne.getCursorPosition();W!=null&&$.current&&Q.current.set($.current,W),X.current=!0,v(k),T(C),J(null),U(!1),D(Y.IDLE),b(null),V(!1),setTimeout(()=>{var we,ie,H;const Ee=Q.current.get(k);Ee!==void 0&&((we=B.current)==null||we.setCursorPosition(Ee)),G?(ie=B.current)==null||ie.focus():(H=B.current)==null||H.blur()},50)},[]);t.useEffect(()=>{var G;if(!y)return;const k=setInterval(()=>{var ne;const W=(ne=B.current)==null?void 0:ne.getCursorPosition();W!=null&&Q.current.set(y,W)},1e3),C=(G=B.current)==null?void 0:G.getCursorPosition();return C!=null&&Q.current.set(y,C),()=>{var ne;clearInterval(k);const W=(ne=B.current)==null?void 0:ne.getCursorPosition();W!=null&&Q.current.set(y,W)}},[y]),t.useEffect(()=>{if(!c||!y)return;const k=setTimeout(()=>{var G;const C=Q.current.get(y);C!==void 0&&((G=B.current)==null||G.setCursorPosition(C))},100);return()=>clearTimeout(k)},[c,y]);const be=t.useCallback(async()=>{var C;const k=(C=B.current)==null?void 0:C.getCursorPosition();k!=null&&$.current&&Q.current.set($.current,k),X.current=!0,v(null),T(""),J(null),U(!0),D(Y.IDLE),b(null)},[]),xe=t.useCallback(async(k,C)=>{X.current=!0,v(null),typeof C=="string"?(T(C),J(null)):(T(""),J(C)),U(!0),D(Y.IDLE),b(null),V(!1)},[]),Se=t.useCallback(async()=>{if(L.current!==null){if(!fe.current||!$.current){window.clearTimeout(L.current),L.current=null;return}window.clearTimeout(L.current),L.current=null,D(Y.SAVING);try{const k=$.current,C=_.current;E?await E(k,C):await fe.current.writeFile(k,C),D(Y.SAVED),b(null)}catch(k){dt.logger.error("Failed to save file",k),D(Y.ERROR),b("Could not save changes. Try again.")}}},[E]),Te=yn(A,h),oe=_n(A,ue);return n?t.createElement("div",{className:ue.container},t.createElement("div",{className:Qe(ue.content,{[ue.sidebarOpen]:Z})},t.createElement("div",{className:ue.mobileOverlay,onClick:()=>V(!1)}),t.createElement("aside",{className:ue.sidebarWrapper},t.createElement(Yt,{filesystem:n,currentPath:y,selectedDirPath:j,setSelectedDirPath:S,onFileOpened:re,onSelectionCleared:be,onShowMessage:xe,documentRoot:l})),t.createElement("section",{className:ue.editorWrapper},t.createElement("div",{className:ue.editorHeader},t.createElement(le.Button,{className:ue.mobileToggle,variant:"secondary",onClick:()=>V(k=>!k)},Z?"Hide files":"Browse files"),t.createElement("div",{className:Qe(ue.editorPath,{[ue.editorPathPlaceholder]:!(y!=null&&y.length)})},y!=null&&y.length?y:`Browse files under ${l}`),t.createElement("div",{className:Qe(ue.saveStatus,oe)},Te)),h?t.createElement("div",{style:{padding:"8px 16px"}},t.createElement(le.Notice,{status:"error",isDismissible:!1},h)):null,y||N||q?q?t.createElement("div",{className:ue.messageArea},q):t.createElement(Nt,{ref:B,code:N,onChange:T,currentPath:y,className:ue.editor,onSaveShortcut:Se,readOnly:I}):t.createElement("div",{className:ue.placeholder},p)))):t.createElement("div",{className:ue.container},t.createElement("div",{className:ue.placeholder},p))}function yn(n,c){switch(n){case Y.PENDING:case Y.SAVING:return"Saving…";case Y.SAVED:return"Saved";case Y.ERROR:return c??"Save failed";default:return""}}function _n(n,c){switch(n){case Y.PENDING:return c.saveStatusPending;case Y.SAVING:return c.saveStatusSaving;case Y.ERROR:return c.saveStatusError;default:return}}exports.BinaryFilePreview=zr;exports.ClockIcon=ir;exports.CodeEditor=Nt;exports.FileExplorerSidebar=Yt;exports.FilePickerControl=Or;exports.FilePickerTree=$t;exports.MAX_INLINE_FILE_BYTES=Ht;exports.PlaygroundFileEditor=En;exports.SiteManagerIcon=cr;exports.WordPressIcon=or;exports.createDownloadUrl=kt;exports.file=Bt;exports.folder=Vt;exports.getLogoDataURL=lr;exports.getMimeType=Ut;exports.isPreviewableBinary=qt;exports.layout=sr;exports.playgroundLogo=nr;exports.seemsLikeBinary=zt;exports.temporaryStorage=ar;
|
|
30
|
+
<%s key={someKey} {...props} />`,xt,$e,Zt,$e),i[$e+xt]=!0}}return t===l?o(ue):a(ue),ue}}function v(t,c,m){return u(t,c,m,!0)}function g(t,c,m){return u(t,c,m,!1)}var re=g,_e=v;ot.Fragment=l,ot.jsx=re,ot.jsxs=_e}()),ot}process.env.NODE_ENV==="production"?Tt.exports=dr():Tt.exports=mr();var Ae=Tt.exports,Qe=n=>vt.createElement("path",n),et=vt.forwardRef(({className:n,isPressed:s,...f},l)=>{const C={...f,className:nr(n,{"is-pressed":s})||void 0,"aria-hidden":!0,focusable:!1};return Ae.jsx("svg",{...C,ref:l})});et.displayName="SVG";const pr=Ae.jsx(et,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:Ae.jsx(Qe,{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"})}),hr=Ae.jsx(et,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:Ae.jsx(Qe,{d:"M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z"})}),vr=Ae.jsx(et,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:Ae.jsx(Qe,{fillRule:"evenodd",clipRule:"evenodd",d:"M12.848 8a1 1 0 0 1-.914-.594l-.723-1.63a.5.5 0 0 0-.447-.276H5a.5.5 0 0 0-.5.5v11.5a.5.5 0 0 0 .5.5h14a.5.5 0 0 0 .5-.5v-9A.5.5 0 0 0 19 8h-6.152Zm.612-1.5a.5.5 0 0 1-.462-.31l-.445-1.084A2 2 0 0 0 10.763 4H5a2 2 0 0 0-2 2v11.5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2h-5.54Z"})}),wr=Ae.jsxs(et,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:[Ae.jsx(Qe,{d:"M15.5 7.5h-7V9h7V7.5Zm-7 3.5h7v1.5h-7V11Zm7 3.5h-7V16h7v-1.5Z"}),Ae.jsx(Qe,{d:"M17 4H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2ZM7 5.5h10a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H7a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 .5-.5Z"})]}),Er=Ae.jsx(et,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:Ae.jsx(Qe,{d:"M18.5 15v3.5H13V6.7l4.5 4.1 1-1.1-6.2-5.8-5.8 5.8 1 1.1 4-4v11.7h-6V15H4v5h16v-5z"})}),gr="_file-picker-tree_ad9od_1",yr="_file-node-button_ad9od_17",_r="_selected_ad9od_56",br="_focused_ad9od_75",Cr="_dropTarget_ad9od_83",Rr="_dropTargetInvalid_ad9od_95",xr="_renaming_ad9od_104",Sr="_renameInput_ad9od_109",kr="_file-name_ad9od_124",Re={filePickerTree:gr,fileNodeButton:yr,selected:_r,focused:br,dropTarget:Cr,dropTargetInvalid:Rr,renaming:xr,renameInput:Sr,fileName:kr};function St(n){if(!n)return[];const s=H.normalizePath(n),f=s.startsWith("/"),l=s.split("/").filter(Boolean),C=[];let d=f?"/":"";f&&C.push("/");for(const k of l)!d||d==="/"?d=d==="/"?`/${k}`:k:d=`${d}/${k}`,C.push(d);return C}function We(n,s,f){return n&&(n===s?f:n.startsWith(s==="/"?"/":`${s}/`)?f+n.slice(s.length):n)}const Wt=e.forwardRef(function({withContextMenu:s=!0,readOnly:f=!1,filesystem:l,root:C="/wordpress",initialSelectedPath:d,onSelect:k=()=>{},onDoubleClickFile:A},F){const h=e.useMemo(()=>H.joinPaths("/",C||"/"),[C]),[_,D]=e.useState(()=>{if(!d)return{};const r={};for(const a of St(d))r[a]=!0;return r}),[P,z]=e.useState(()=>d??null),[Z,S]=e.useState(()=>d??null),[q,w]=e.useState({}),[R,U]=e.useState({}),[J,ne]=e.useState(null),[y,j]=e.useState(null),O=e.useRef({}),V=e.useRef(!1),p=e.useRef(null),N=e.useRef(null),le=e.useRef(R),G=e.useRef(q),M=()=>{for(const r of Object.keys(O.current))clearTimeout(O.current[r]),delete O.current[r]},ae=r=>{const a=O.current[r];a&&(clearTimeout(a),delete O.current[r])};e.useEffect(()=>{le.current=R},[R]),e.useEffect(()=>{G.current=q},[q]);const Q=r=>{var o;const a=(o=p.current)==null?void 0:o.querySelector(`[data-path="${CSS.escape(r)}"]`);a&&typeof a.focus=="function"&&(a.focus(),a.scrollIntoView({behavior:"smooth",block:"nearest"}))},he=(r,a="")=>a?H.joinPaths(a,r.name):H.joinPaths("/",r.name),pe=(r,a)=>r.children?r.children:q[a],Fe=async(r,a)=>{const o=await r.listFiles(a),i=[];for(const u of o){const v=a==="/"?`/${u}`:`${a}/${u}`,g=await r.isDir(v);i.push({name:u,type:g?"folder":"file"})}return i.sort((u,v)=>{var t;if(u.type!==v.type)return u.type==="folder"?-1:1;const g=a==="/"?`/${u.name}`:`${a}/${u.name}`,re=a==="/"?`/${v.name}`:`${a}/${v.name}`,_e=(t=ve.current)==null?void 0:t.tempPath;if(_e){if(g===_e)return-1;if(re===_e)return 1}return u.name.localeCompare(v.name)}),i},ke=async r=>await Fe(l,r),ee=(r,a)=>{if(a.type!=="folder")return a.children;const o=a.children??G.current[r];return o||le.current[r]?o:(U(i=>({...i,[r]:!0})),new Promise(i=>{ke(r).then(u=>{w(v=>({...v,[r]:u??[]})),i(u??[])}).catch(()=>{i([])}).finally(()=>{U(u=>{const v={...u};return delete v[r],v})})}))},Le=(r,a)=>{a.type==="folder"&&(typeof window>"u"||O.current[r]||(O.current[r]=window.setTimeout(()=>{D(o=>o[r]?o:{...o,[r]:!0}),ee(r,a),delete O.current[r]},600)))},te=r=>(U(a=>({...a,[r]:!0})),new Promise(a=>{ke(r).then(o=>{w(i=>({...i,[r]:o??[]})),a(o??[])}).catch(()=>{a([])}).finally(()=>{U(o=>{const i={...o};return delete i[r],i})})})),Be=(r,a,o)=>{D(i=>({...i,[r]:o})),o?ee(r,a):w(i=>{if(i[r]===void 0)return i;const u={...i};return delete u[r],u})},ge=async r=>{if(!r)return;const a=St(r);if(a.length===0)return;D(u=>{const v={...u};for(const g of a)v[g]=!0;return v});let o=[{name:h,type:"folder"}],i="";for(const u of a){const v=o==null?void 0:o.find(re=>he(re,i)===u);if(!v||v.type!=="folder"){i=u,o=[];continue}o=await ee(u,v)??G.current[u],i=u}},xe=(r,a)=>{!r||!a||r===a||(D(o=>{let i=!1;const u={...o};for(const v of Object.keys(o)){const g=We(v,r,a);g&&g!==v&&(u[g]=o[v],delete u[v],i=!0)}return i?u:o}),w(o=>{let i=!1;const u={...o};for(const v of Object.keys(o)){const g=We(v,r,a);g&&g!==v&&(u[g]=o[v],delete u[v],i=!0)}return i?u:o}),z(o=>We(o,r,a)),S(o=>We(o,r,a)))},Ne=()=>{ne(null),j(null),M()},Pe=(r,a=!0)=>{z(r),a&&k(r)},fe=e.useMemo(()=>[{name:h,type:"folder"}],[h]),[$,E]=e.useState(null),[me,de]=e.useState(null),ve=e.useRef(null),b=f?null:me;e.useImperativeHandle(F,()=>({focusPath:(r,a={})=>{if(!r)return;const{select:o=!0,domFocus:i=!0,notify:u=!1}=a;o&&Pe(r,u),S(r),i&&Q(r)},selectPath:r=>{r&&(Pe(r),S(r),Q(r))},getSelectedPath:()=>P,expandToPath:async r=>await ge(r),refresh:async r=>await te(r),remapPath:xe,createFile:async r=>{f||await Ue(r,"file","untitled.php")},createFolder:async r=>{f||await Ue(r,"folder","New Folder")},importFiles:async(r,a)=>{f||await je(r,a)},importDataTransfer:async(r,a)=>{f||await Ge(r,a)}}),[P,te,xe,ge,f]);const T=e.useRef(!1),oe=e.useRef(d??null),ie=e.useRef(d);e.useEffect(()=>{V.current=!1},[h]),e.useEffect(()=>{d&&d!==ie.current?oe.current=d:d||(oe.current=null),ie.current=d},[d]),e.useEffect(()=>{if(!d||T.current)return;T.current=!0;const r=St(d);D(o=>{const i={...o};for(const u of r)i[u]=!0;return i});const a=r[r.length-1]||d;S(a),z(a),ge(d)},[d,ge]),e.useEffect(()=>{const r=oe.current;!r||fe.length===0||(oe.current=null,ge(r))},[fe,ge]),e.useEffect(()=>{if(!Z){if(fe.length>0){const r=he(fe[0]);S(r)}return}b&&b===Z||Q(Z)},[fe,Z,b]),e.useEffect(()=>{if(fe.length===0)return;const r=fe[0];if((r==null?void 0:r.type)!=="folder"||V.current)return;const a=r.name;V.current=!0,D(o=>o[a]?o:{...o,[a]:!0}),!G.current[a]&&!le.current[a]&&ee(a,r)},[fe,ee,h]),e.useEffect(()=>()=>{N.current&&clearTimeout(N.current),M()},[]),e.useEffect(()=>{$&&setTimeout(()=>{const r=document.querySelector('[role="menu"] [role="menuitem"]');r&&typeof r.focus=="function"&&r.focus()},0)},[$]);const[ce,ye]=e.useState(""),Ve=(r,a)=>{if(r.type==="folder")return a;const o=H.dirname(a);return o&&o||"/"},we=(r,a,o)=>{const i=Ve(r,a);return i?o&&H.isParentOf(o,i)?{allowed:!1,state:"invalid",destination:null}:{allowed:!0,state:"valid",destination:i}:{allowed:!1,state:"invalid",destination:null}},Ie=(r,a,o)=>{a.type!=="folder"&&a.type!=="file"||(ne(o),j(null),r.dataTransfer&&(r.dataTransfer.effectAllowed="move",r.dataTransfer.setData("application/x-wp-playground-path",o),r.dataTransfer.setData("text/plain",o)))},tt=()=>{Ne()},He=(r,a,o)=>{const i=we(a,o,J);i.allowed&&a.type==="folder"&&Le(o,a),j(u=>(u==null?void 0:u.path)===o&&u.state===i.state?u:{path:o,state:i.state})},st=(r,a,o)=>{const i=we(a,o,J);i.allowed&&i.destination?(r.preventDefault(),r.dataTransfer&&(r.dataTransfer.dropEffect=J?"move":"copy"),a.type==="folder"&&Le(o,a),j(u=>(u==null?void 0:u.path)===o&&u.state===i.state?u:{path:o,state:i.state})):(r.dataTransfer&&(r.dataTransfer.dropEffect="none"),ae(o),j(u=>(u==null?void 0:u.path)===o&&u.state==="invalid"?u:{path:o,state:"invalid"}))},lt=(r,a,o)=>{ae(o);const i=r.relatedTarget;i&&r.currentTarget.contains(i)||j(u=>(u==null?void 0:u.path)===o?null:u)},wt=async(r,a,o)=>{const i=J,u=we(a,o,i);if(!u.allowed||!u.destination){Ne();return}r.preventDefault(),r.stopPropagation(),ae(o),j(null);try{i?await yt(i,u.destination):await Ge(r.dataTransfer,u.destination)}finally{Ne()}},ct=(r,a,o)=>{s&&(r.preventDefault(),r.stopPropagation(),de(null),E({absPath:o,type:a.type,x:r.clientX,y:r.clientY}))},ze=async(r,a)=>{let o=a,i=0;const u=g=>{const re=g.lastIndexOf(".");return re>0?{stem:g.slice(0,re),ext:g.slice(re)}:{stem:g,ext:""}},v=r==="/"?"":r;for(;await(l==null?void 0:l.fileExists(`${v}/${o}`))||await(l==null?void 0:l.isDir(`${v}/${o}`));){i+=1;const{stem:g,ext:re}=u(a);o=`${g} (${i})${re}`}return o},Ue=async(r,a,o)=>{if(!l)return;let i=r||P||h;try{await l.isDir(i)||(i=H.dirname(i))}catch{i=H.dirname(i)}const u=i,v=await ze(u,o),g=H.joinPaths(u,v);a==="folder"?await l.mkdir(g):await l.writeFile(g,""),ve.current={type:a,tempPath:g},de(g),await te(u),setTimeout(()=>{S(g),Q(g)},0)},Et=async r=>{if(!l)return!1;try{if(await l.fileExists(r))return!0}catch{}try{if(await l.isDir(r))return!0}catch{}return!1},gt=async r=>{if(l)try{await l.mkdir(r)}catch(a){if(!await l.isDir(r).catch(()=>!1))throw a}},yt=async(r,a)=>{if(!l)return;const o=H.basename(r),i=H.joinPaths(a,o);if(i===r||await Et(i))return;const u=H.dirname(r);try{await l.mv(r,i),xe(r,i);const v=We(P,r,i);P&&(P===r||P.startsWith(`${r}/`))&&k(v),S(g=>We(g,r,i)),D(g=>({...g,[a]:!0})),await Promise.all([te(u),te(a)]),z(g=>We(g,r,i)),Q(i)}catch{}},_t=r=>{const a=r;return a.webkitGetAsEntry?a.webkitGetAsEntry():null},bt=r=>new Promise((a,o)=>{r.file(a,o)}),ut=async(r,a)=>{if(!l)return;const o=r.name||"untitled",i=await ze(a,o),u=H.joinPaths(a,i),v=new Uint8Array(await r.arrayBuffer());await l.writeFile(u,v)},qe=async(r,a)=>{const o=await bt(r);await ut(o,a)},rt=async(r,a)=>{const o=await ze(a,r.name||"New Folder"),i=H.joinPaths(a,o);await gt(i);const u=r.createReader(),v=()=>new Promise((g,re)=>{u.readEntries(_e=>g(Array.from(_e)),re)});for(;;){const g=await v();if(!g.length)break;for(const re of g)re.isFile?await qe(re,i):re.isDirectory&&await rt(re,i)}},je=(r,a)=>Ye([],r,a),Ge=(r,a)=>{const i=Array.from(r.items).filter(v=>v.kind==="file").map(v=>_t(v)).filter(v=>!!v),u=Array.from(r.files);return Ye(i,u,a)},Ye=async(r,a,o)=>{if(l){if(r.length>0)for(const i of r)i.isFile?await qe(i,o):i.isDirectory&&await rt(i,o);else for(const i of a)await ut(i,o);await te(o),D(i=>({...i,[o]:!0}))}},ft=async(r,a)=>{if(!l)return;const o=r;E(null);try{a==="folder"?await l.rmdir(o,{recursive:!0}):await l.unlink(o)}catch{}finally{de(null);const i=H.dirname(o);await te(i),P&&(P===o||P.startsWith(`${o}/`))&&k(null)}},Ct=async r=>{if(l)try{const o=await(await l.read(r)).arrayBuffer(),i=new Blob([o]),u=URL.createObjectURL(i),v=document.createElement("a");v.href=u,v.download=H.basename(r)||"download",document.body.appendChild(v),v.click(),document.body.removeChild(v),setTimeout(()=>URL.revokeObjectURL(u),6e4)}catch(a){console.error("Failed to download file",a)}},dt=r=>{var a;if(!me)if(r.key.length===1&&r.key.match(/\S/)){const o=ce+r.key.toLowerCase();if(ye(o),N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{ye("")},1e3),!p.current)return;const i=Array.from(p.current.querySelectorAll(".file-node-button")),u=document.activeElement;let v=0;u&&i.includes(u)&&(v=i.indexOf(u));for(let g=0;g<i.length;g++){const re=(v+g)%i.length,_e=i[re];if((a=_e.textContent)!=null&&a.toLowerCase().trim().startsWith(o)){_e.focus();const t=_e.getAttribute("data-path");t&&S(t);break}}}else ye(""),N.current&&clearTimeout(N.current)},Rt=async(r,a)=>{if(f)return;const o=ve.current,i=(o==null?void 0:o.tempPath)===r,u=H.dirname(r);if(!a||a==="."||a===".."||H.basename(a)!==a){if(i){try{o.type==="folder"?await l.rmdir(r,{recursive:!0}):await l.unlink(r)}catch{}ve.current=null}de(i?null:r);return}let v=H.joinPaths(u,a),g=v;if(g===r){de(null);const c=i&&(o==null?void 0:o.type)==="file";i&&(ve.current=null),setTimeout(()=>{S(g),Q(g),c&&A&&A(g)},0);return}const re=await l.fileExists(g),_e=await l.isDir(g);if((re||_e)&&g!==r)if(i)try{const c=await ze(u==="/"?"/":u,a);v=H.joinPaths(u,c),g=v}catch{}else{de(r);return}let t=(o==null?void 0:o.type)==="folder";try{await l.mv(r,v),o||(t=await l.isDir(v)),t&&xe(r,g),P===r&&k(g),await te(u),S(g),Q(g),i&&!t&&A&&A(g)}catch{if(i)try{(o==null?void 0:o.type)==="folder"?await l.rmdir(r,{recursive:!0}):await l.unlink(r)}catch{}}finally{ve.current=null,de(null)}},mt=async r=>{const a=ve.current;if(!l||(a==null?void 0:a.tempPath)!==r){de(i=>i===r?null:i);return}try{a.type==="folder"?await l.rmdir(r,{recursive:!0}):await l.unlink(r)}catch{}ve.current=null,de(null);const o=H.dirname(r);await te(o),S(o),Q(o)};return e.createElement("div",{onKeyDown:dt,ref:p},e.createElement(X.__experimentalTreeGrid,{className:Re.filePickerTree},fe.map((r,a)=>e.createElement(Ht,{key:r.name,node:r,level:0,position:a+1,setSize:fe.length,expandedNodePaths:_,onToggle:Be,selectedNode:P,focusPath:o=>S(o),focusedNode:Z,selectPath:Pe,generatePath:he,getChildren:pe,onContextMenu:f?void 0:ct,renamingPath:b,onRename:Rt,onRenameCancel:mt,dropIndicator:y,onDragStart:f?void 0:Ie,onDragEnd:f?void 0:tt,onDragEnter:f?void 0:He,onDragOver:f?void 0:st,onDragLeave:f?void 0:lt,onDrop:f?void 0:wt,rootPath:h,onDoubleClickFile:A}))),!f&&$&&e.createElement(X.Popover,{placement:"bottom-start",onClose:()=>E(null),anchor:{getBoundingClientRect:()=>({x:$.x,y:$.y,width:0,height:0,top:$.y,left:$.x,right:$.x,bottom:$.y,toJSON:()=>({})}),ownerDocument:document},noArrow:!0,resize:!1,focusOnMount:"firstElement"},e.createElement(X.NavigableMenu,{role:"menu"},$.type==="folder"&&e.createElement(X.MenuItem,{role:"menuitem",onClick:async()=>{E(null),await Ue($.absPath,"file","untitled.php")}},"Create file"),$.type==="folder"&&e.createElement(X.MenuItem,{role:"menuitem",onClick:async()=>{E(null),await Ue($.absPath,"folder","New Folder")}},"Create directory"),e.createElement(X.MenuItem,{role:"menuitem",onClick:()=>{E(null),de($.absPath)}},"Rename"),$.type==="file"&&e.createElement(X.MenuItem,{role:"menuitem",onClick:async()=>{E(null),await Ct($.absPath)}},"Download"),e.createElement(X.MenuItem,{role:"menuitem",onClick:()=>ft($.absPath,$.type)},"Delete"))))}),Ht=({node:n,level:s,position:f,setSize:l,expandedNodePaths:C,onToggle:d,selectedNode:k,focusPath:A,focusedNode:F,selectPath:h,generatePath:_,getChildren:D,onContextMenu:P,renamingPath:z,onRename:Z,onRenameCancel:S,parentPath:q="",dropIndicator:w,onDragStart:R,onDragEnd:U,onDragEnter:J,onDragOver:ne,onDragLeave:y,onDrop:j,rootPath:O,onDoubleClickFile:V})=>{const p=_(n,q),N=C[p],le=z===p,G=e.useRef(null),[M,ae]=e.useState(n.name),Q=e.useRef(!1),he=(w==null?void 0:w.path)===p,pe=he&&(w==null?void 0:w.state)==="valid",Fe=he&&(w==null?void 0:w.state)==="invalid",ke=!!R&&!le&&p!==O,ee=e.useRef(null),Le={onDragEnter:E=>J==null?void 0:J(E,n,p),onDragOver:E=>ne==null?void 0:ne(E,n,p),onDragLeave:E=>y==null?void 0:y(E,n,p),onDrop:E=>j==null?void 0:j(E,n,p)},te=D(n,p)??[];e.useEffect(()=>{var E;le?(ae(n.name),Q.current=!1,typeof window<"u"&&requestAnimationFrame?requestAnimationFrame(()=>{var me;(me=G.current)==null||me.select()}):(E=G.current)==null||E.select()):Q.current=!1},[le,n.name]);const Be=()=>{n.type==="folder"&&d(p,n,!N)},ge=E=>{var me,de;if(E.key==="ArrowLeft")N?Be():(me=document.querySelector(`[data-path="${CSS.escape(q)}"]`))==null||me.focus(),E.preventDefault(),E.stopPropagation();else if(E.key==="ArrowRight"){if(N){if(te!=null&&te.length){const ve=_(te[0],p);(de=document.querySelector(`[data-path="${CSS.escape(ve)}"]`))==null||de.focus()}}else Be();E.preventDefault(),E.stopPropagation()}else E.key===" "||E.key==="Space"||E.key==="Spacebar"?(n.type==="folder"&&d(p,n,!N),E.preventDefault()):E.key==="Enter"&&(n.type==="folder"?d(p,n,!N):(h(p,!1),A(p),V?V(p):h(p,!0)),E.preventDefault())},xe=E=>{P==null||P(E,n,p)},Ne=E=>{E.preventDefault(),Q.current=!0,Z==null||Z(p,M)},Pe=E=>{if(E.key==="Escape"){E.preventDefault(),E.stopPropagation(),Q.current=!0,S==null||S(p);return}(E.key==="ArrowLeft"||E.key==="ArrowRight"||E.key==="ArrowUp"||E.key==="ArrowDown")&&E.stopPropagation()},fe=()=>{Q.current||S==null||S(p),Q.current=!1},$=()=>{if(n.type==="folder"){Be(),h(p),A(p);return}const E=ee.current!==null;if(E&&ee.current&&clearTimeout(ee.current),ee.current=null,E){V?V(p):h(p,!0);return}h(p,!1),A(p),h(p,!0),ee.current=window.setTimeout(()=>{ee.current=null},300)};return e.useEffect(()=>()=>{ee.current!==null&&typeof window<"u"&&clearTimeout(ee.current)},[]),e.createElement(e.Fragment,null,e.createElement(X.__experimentalTreeGridRow,{level:s,positionInSet:f,setSize:l},e.createElement(X.__experimentalTreeGridCell,null,()=>e.createElement(e.Fragment,null,le?e.createElement("form",{onSubmit:Ne,className:De(Re.fileNodeButton,Re.renaming,"file-node-button",{[Re.selected]:k===p,[Re.focused]:F===p,[Re.dropTarget]:pe,[Re.dropTargetInvalid]:Fe}),"data-path":p,onContextMenu:xe,...Le},e.createElement(Vt,{node:n,isOpen:n.type==="folder"&&N,level:s,hideName:!0}),e.createElement("input",{ref:G,className:Re.renameInput,value:M,onChange:E=>ae(E.target.value),onBlur:fe,onFocus:()=>A(p),onKeyDown:Pe})):e.createElement(X.Button,{...Le,draggable:ke,onDragStart:E=>R==null?void 0:R(E,n,p),onDragEnd:E=>U==null?void 0:U(E,n,p),onClick:$,onKeyDown:ge,onFocus:()=>{A(p)},onContextMenu:xe,className:De(Re.fileNodeButton,"file-node-button",{[Re.selected]:k===p,[Re.focused]:F===p,[Re.dropTarget]:pe,[Re.dropTargetInvalid]:Fe}),"data-path":p,"data-expanded":N?"true":"false"},e.createElement(Vt,{node:n,isOpen:n.type==="folder"&&N,level:s}))))),N&&te&&te.map((E,me)=>e.createElement(Ht,{key:E.name,node:E,level:s+1,position:me+1,setSize:te.length,expandedNodePaths:C,onToggle:d,selectedNode:k,focusPath:A,focusedNode:F,selectPath:h,generatePath:_,getChildren:D,onContextMenu:P,renamingPath:z,onRename:Z,onRenameCancel:S,parentPath:p,dropIndicator:w,onDragStart:R,onDragEnd:U,onDragEnter:J,onDragOver:ne,onDragLeave:y,onDrop:j,rootPath:O,onDoubleClickFile:V})))},Vt=({node:n,level:s,isOpen:f,hideName:l=!1})=>{const C=[];for(let d=0;d<s;d++)C.push(" ");return e.createElement(e.Fragment,null,e.createElement("span",{"aria-hidden":"true",dangerouslySetInnerHTML:{__html:C.join("")}}),n.type==="folder"?e.createElement(Bt,{width:16,icon:f?pr:hr}):e.createElement("div",{style:{width:16}}," "),e.createElement(Bt,{width:16,icon:n.type==="folder"?zt:$t}),!l&&e.createElement("span",{className:Re.fileName},n.name))},Pr="_control_kp9d9_1",Tr="_browse-label_kp9d9_11",Dr="_path-preview_kp9d9_37",Ar="_modal_kp9d9_43",Fr="_modal-footer_kp9d9_48",Xe={control:Pr,browseLabel:Tr,pathPreview:Dr,modal:Ar,modalFooter:Fr};function Nr({path:n}){if(!n)return e.createElement("div",{className:Xe.pathPreview},e.createElement("i",null,"Select a path"));const s=n.split("/");let f=(s.length>2?"/":"")+s.pop();f.length>10&&(f=f.substring(f.length-10));const l=n.substring(0,n.length-f.length);return e.createElement("div",{className:Xe.pathPreview,"data-content-start":l,"data-content-end":f})}function Ir({value:n="",onChange:s,filesystem:f}){const[l,C]=e.useState(!1),d=()=>C(!0),k=()=>C(!1),[A,F]=e.useState(n||null);function h(_){_==null||_.preventDefault(),s(A||""),k()}return e.createElement(e.Fragment,null,e.createElement(X.Button,{variant:"tertiary",className:Xe.control,onClick:d},e.createElement("span",{className:Xe.browseLabel},"Browse"),e.createElement(Nr,{path:n||""})),l&&e.createElement(X.Modal,{title:"Select a path ",onRequestClose:k,className:Xe.modal},e.createElement("form",{onSubmit:h},e.createElement(Wt,{filesystem:f,initialSelectedPath:n,onSelect:F}),e.createElement("div",{className:Xe.modalFooter},e.createElement(X.Button,{type:"submit",variant:"primary"},"Select Path")))))}const Lr="_container_1h0az_1",Mr="_header_1h0az_9",Br="_filename_1h0az_18",jr="_downloadLink_1h0az_26",Or="_previewArea_1h0az_38",Vr="_imagePreview_1h0az_51",zr="_videoPreview_1h0az_57",$r="_audioPreview_1h0az_64",Wr="_unsupportedMessage_1h0az_68",Hr="_actions_1h0az_74",Me={container:Lr,header:Mr,filename:Br,downloadLink:jr,previewArea:Or,imagePreview:Vr,videoPreview:zr,audioPreview:$r,unsupportedMessage:Wr,actions:Hr},Ur=n=>{if(!n)return{isImage:!1,isVideo:!1,isAudio:!1};const s=n.toLowerCase();return{isImage:s.startsWith("image/"),isVideo:s.startsWith("video/"),isAudio:s.startsWith("audio/")}};function qr({filename:n,mimeType:s,dataUrl:f,downloadUrl:l,showHeader:C=!0}){const{isImage:d,isVideo:k,isAudio:A}=Ur(s),F=C!==!1,h=!!(l&&n),_=()=>h?e.createElement("a",{className:Me.downloadLink,href:l,download:n},"Download"):null,D=()=>d?e.createElement("img",{className:Me.imagePreview,src:f,alt:n||"Preview"}):k?e.createElement("video",{className:Me.videoPreview,controls:!0,preload:"metadata"},e.createElement("source",{src:f,type:s}),"Your browser does not support the video tag."):A?e.createElement("audio",{className:Me.audioPreview,controls:!0},e.createElement("source",{src:f,type:s}),"Your browser does not support the audio tag."):e.createElement("div",{className:Me.unsupportedMessage},e.createElement("p",null,"Preview unavailable for this file type."),h?e.createElement("p",null,_()):e.createElement("p",null,"Download the file to inspect its contents."));return e.createElement("div",{className:Me.container},F&&e.createElement("div",{className:Me.header},e.createElement("span",{className:Me.filename,title:n},n),_()),e.createElement("div",{className:Me.previewArea},D()),!F&&h&&e.createElement("div",{className:Me.actions},_()))}const kt=new Map,Gr=async n=>{var C;if(!n)return it.php();const s=(C=n.split(".").pop())==null?void 0:C.toLowerCase();if(!s||s==="php")return it.php();const f=n;if(kt.has(f))return kt.get(f);let l;switch(s){case"css":l=await import("@codemirror/lang-css").then(d=>d.css());break;case"js":case"jsx":case"ts":case"tsx":l=await import("@codemirror/lang-javascript").then(d=>d.javascript({jsx:s==="jsx"||s==="tsx",typescript:s==="ts"||s==="tsx"}));break;case"json":l=await import("@codemirror/lang-json").then(d=>d.json());break;case"html":case"htm":l=await import("@codemirror/lang-html").then(d=>d.html());break;case"md":case"markdown":l=await import("@codemirror/lang-markdown").then(d=>d.markdown());break;default:l=it.php()}return kt.set(f,l),l};class Yr{constructor(s){this.view=s,this.handleClick=this.handleClick.bind(this),this.view.dom.addEventListener("mousedown",this.handleClick)}handleClick(s){const f=s.target;if((f.classList.contains("cm-scroller")||f.classList.contains("cm-content"))&&this.view.posAtCoords({x:s.clientX,y:s.clientY})===null){const C=this.view.state.doc.length,d=Oe.EditorSelection.create([Oe.EditorSelection.range(C,C)]);this.view.dispatch({selection:d,effects:Se.EditorView.scrollIntoView(C,{y:"center"})}),this.view.focus(),s.preventDefault()}}destroy(){this.view.dom.removeEventListener("mousedown",this.handleClick)}}const Zr=Se.ViewPlugin.define(n=>new Yr(n)),At=e.forwardRef(function({code:s,onChange:f,currentPath:l,className:C,onSaveShortcut:d,readOnly:k=!1,additionalExtensions:A},F){const h=e.useRef(null),_=e.useRef(null),D=e.useRef(new Oe.Compartment),P=e.useRef(new Oe.Compartment),z=e.useRef(new Oe.Compartment),Z=e.useRef(s),S=e.useRef(f),q=e.useRef(!1);return e.useImperativeHandle(F,()=>({focus:()=>{var w;(w=_.current)==null||w.focus()},blur:()=>{const w=_.current;w&&w.contentDOM.blur()},getCursorPosition:()=>_.current?_.current.state.selection.main.anchor:null,setCursorPosition:w=>{if(!_.current)return;const R=Math.min(w,_.current.state.doc.length),U=Oe.EditorSelection.create([Oe.EditorSelection.range(R,R)]);_.current.dispatch({selection:U,scrollIntoView:!0})}})),e.useEffect(()=>{Z.current=s},[s]),e.useEffect(()=>{S.current=f},[f]),e.useEffect(()=>{if(_.current)return;const w=h.current;if(!w)return;const R=Oe.EditorState.create({doc:s,extensions:[z.current.of(A??[]),Se.lineNumbers(),Se.highlightActiveLineGutter(),Se.highlightActiveLine(),Ke.foldGutter(),Se.dropCursor(),Se.rectangularSelection(),Se.crosshairCursor(),Zr,D.current.of(it.php()),P.current.of(Se.EditorView.editable.of(!k)),Ke.syntaxHighlighting(Ke.defaultHighlightStyle),Ke.indentOnInput(),Ke.bracketMatching(),ht.closeBrackets(),pt.history(),It.highlightSelectionMatches(),ht.autocompletion(),Se.EditorView.updateListener.of(J=>{if(!J.docChanged)return;const ne=J.state.doc.toString();ne!==Z.current&&(Z.current=ne,S.current(ne))}),Se.keymap.of([{key:"Mod-s",preventDefault:!0,run:()=>(d==null||d(),!0)},...ht.closeBracketsKeymap,...ht.completionKeymap,...Ke.foldKeymap,...It.searchKeymap,...pt.historyKeymap,...pt.defaultKeymap,pt.indentWithTab])]}),U=new Se.EditorView({state:R,parent:w});return _.current=U,()=>{U.destroy(),_.current=null}},[]),e.useEffect(()=>{const w=_.current;w&&w.dispatch({effects:z.current.reconfigure(A??[])})},[A]),e.useEffect(()=>{const w=_.current;if(!w)return;const R=w.state.doc.toString();s!==R&&w.dispatch({changes:{from:0,to:w.state.doc.length,insert:s}})},[s]),e.useEffect(()=>{var ne;const w=_.current;if(!w)return;const R=(ne=l==null?void 0:l.split(".").pop())==null?void 0:ne.toLowerCase();(!R||R==="php")&&w.dispatch({effects:D.current.reconfigure(it.php())});let J=!1;return Gr(l).then(y=>{J||!_.current||_.current.dispatch({effects:D.current.reconfigure(y)})}),()=>{J=!0}},[l]),e.useEffect(()=>{const w=_.current;w&&(w.hasFocus&&(q.current=!0),w.dispatch({effects:P.current.reconfigure(Se.EditorView.editable.of(!k))}))},[k]),e.useLayoutEffect(()=>{const w=_.current;w&&q.current&&!w.hasFocus&&(w.focus(),q.current=!1)},[l,k]),e.createElement("div",{ref:h,className:C})});At.displayName="CodeEditor";const Kr="_fileExplorerContainer_8eol9_1",Jr="_dropActive_8eol9_9",Xr="_fileExplorerHeader_8eol9_14",Qr="_fileExplorerTitle_8eol9_23",en="_fileExplorerActions_8eol9_31",tn="_fileExplorerButton_8eol9_37",rn="_fileExplorerIconButton_8eol9_67",nn="_fileExplorerTree_8eol9_79",an="_dockPresentation_8eol9_88",on="_fileExplorerUploadButton_8eol9_148",Ce={fileExplorerContainer:Kr,dropActive:Jr,fileExplorerHeader:Xr,fileExplorerTitle:Qr,fileExplorerActions:en,fileExplorerButton:tn,fileExplorerIconButton:rn,fileExplorerTree:nn,dockPresentation:an,fileExplorerUploadButton:on},Ft=1024*1024,Ut=n=>{const s=n.byteLength;for(let f=0;f<Math.min(s,4096);f++)if(n[f]===0)return!0;try{return new TextDecoder("utf-8",{fatal:!0}).decode(n),!1}catch{return!0}},Dt=(n,s)=>{const f=new Blob([n]),l=URL.createObjectURL(f);return setTimeout(()=>URL.revokeObjectURL(l),6e4),{url:l,filename:s}};async function sn(n,s=Ft){const f=ln(n);if(f!==void 0&&f>s)return{type:"too-large"};if(typeof n.stream=="function")return cn(n,s);const l=new Uint8Array(await n.arrayBuffer());return l.byteLength>s?{type:"too-large"}:{type:"inline",data:l}}function ln(n){if(typeof n.filesize=="number")return n.filesize;if(typeof n.size=="number")return n.size}async function cn(n,s){const f=n.stream().getReader(),l=[];let C=0;try{for(;;){const{done:d,value:k}=await f.read();if(d)return{type:"inline",data:H.concatUint8Arrays(l)};if(k){if(C+=k.byteLength,C>s)return await f.cancel().catch(()=>{}),{type:"too-large"};l.push(k)}}}finally{f.releaseLock()}}const qt=n=>{const s=n.split(".").pop();return Mt[s]||Mt._default},Gt=n=>n.startsWith("image/")||n.startsWith("video/")||n.startsWith("audio/");function Yt({filesystem:n,currentPath:s,selectedDirPath:f,setSelectedDirPath:l,onFileOpened:C,onSelectionCleared:d,onShowMessage:k,documentRoot:A,readOnly:F=!1,title:h="Files",showBinaryPreviewHeader:_=!0,dockPresentation:D=!1,useWordPressTooltips:P=!1}){const z=e.useRef(null),Z=e.useRef(null),S=e.useMemo(()=>s?H.dirname(s):f??A,[s,A]),[q,w]=e.useState(!1);e.useEffect(()=>{!s||!z.current||(l(H.dirname(s)),z.current.focusPath(s,{select:!0,domFocus:!1,notify:!1}),z.current.expandToPath(s))},[s,l]);const R=async(y,j)=>{try{const O=await n.read(y),V=await sn(O);if(V.type==="too-large"){const G=Ft/1024/1024;if(!D){await k(y,e.createElement(e.Fragment,null,e.createElement("p",null,`File too large to open (>${G}MB).`),e.createElement("p",null,"Open or download it outside the in-browser editor.")));return}const M=H.basename(y)||"download";await k(y,e.createElement(e.Fragment,null,e.createElement("p",null,`File too large to open (>${G}MB).`),e.createElement("p",null,e.createElement(X.Button,{type:"button",variant:"link",onClick:()=>{U(y,M)}},"Download ",M))));return}const p=V.data,N=H.basename(y)||"download";if(Ut(p)){const G=qt(N),{url:M,filename:ae}=Dt(p,N);if(Gt(G)){const Q=new Blob([p],{type:G}),he=URL.createObjectURL(Q);await k(y,e.createElement(Lt.BinaryFilePreview,{filename:ae,mimeType:G,dataUrl:he,downloadUrl:M,showHeader:_}));return}await k(y,e.createElement(e.Fragment,null,e.createElement("p",null,"Binary file. Cannot be edited."),e.createElement("p",null,e.createElement("a",{href:M,download:ae},"Download ",ae))));return}const le=new TextDecoder("utf-8").decode(p);await C(y,le,j)}catch(O){Je.logger.error("Could not open file",O),await k(null,"Could not open file.")}},U=async(y,j)=>{try{const O=await n.read(y),V=new Uint8Array(await O.arrayBuffer()),{url:p}=Dt(V,j),N=document.createElement("a");N.href=p,N.download=j,document.body.appendChild(N),N.click(),document.body.removeChild(N)}catch(O){Je.logger.error("Could not download file",O),await k(y,"Could not download file.")}},J=y=>{var O;const j=Array.from(y.target.files??[]);y.target.value="",j.length!==0&&((O=z.current)==null||O.importFiles(j,f??A).catch(V=>Je.logger.error("Failed to import files",V)))},ne=y=>{var j;y.dataTransfer.types.includes("application/x-wp-playground-path")||(y.preventDefault(),!F&&((j=z.current)==null||j.importDataTransfer(y.dataTransfer,f??A).catch(O=>Je.logger.error("Failed to import dropped files",O))))};return e.createElement("div",{className:De(Ce.fileExplorerContainer,{[Ce.dropActive]:q,[Ce.dockPresentation]:D}),onDragEnter:y=>{y.dataTransfer.types.includes("application/x-wp-playground-path")||(y.preventDefault(),F||w(!0))},onDragOver:y=>{y.dataTransfer.types.includes("application/x-wp-playground-path")||(y.preventDefault(),y.dataTransfer.dropEffect=F?"none":"copy")},onDragLeave:y=>{const j=y.relatedTarget;(!j||!y.currentTarget.contains(j))&&w(!1)},onDropCapture:()=>w(!1),onDrop:ne},e.createElement("div",{className:Ce.fileExplorerHeader},e.createElement("span",{className:Ce.fileExplorerTitle},h),F?null:e.createElement("div",{className:Ce.fileExplorerActions},e.createElement(Pt,{label:"Create new file",useWordPressTooltip:P},e.createElement("button",{className:De(Ce.fileExplorerButton,Ce.fileExplorerIconButton),type:"button",onClick:()=>{z.current&&z.current.createFile()},"aria-label":"Create new file",title:P?void 0:"Create new file"},D?e.createElement(un,null):e.createElement(X.Icon,{icon:wr,size:20}))),e.createElement(Pt,{label:"Create new folder",useWordPressTooltip:P},e.createElement("button",{className:De(Ce.fileExplorerButton,Ce.fileExplorerIconButton),type:"button",onClick:()=>{z.current&&z.current.createFolder()},"aria-label":"Create new folder",title:P?void 0:"Create new folder"},D?e.createElement(fn,null):e.createElement(X.Icon,{icon:vr,size:20}))),e.createElement(Pt,{label:"Upload files",useWordPressTooltip:P},e.createElement("button",{className:De(Ce.fileExplorerButton,Ce.fileExplorerIconButton,Ce.fileExplorerUploadButton),type:"button",onClick:()=>{var y;return(y=Z.current)==null?void 0:y.click()},"aria-label":"Upload files",title:P?void 0:"Upload files"},e.createElement(X.Icon,{icon:Er,size:D?16:20}))),e.createElement("input",{ref:Z,type:"file",multiple:!0,style:{display:"none"},onChange:J}))),e.createElement("div",{className:Ce.fileExplorerTree},e.createElement(Lt.FilePickerTree,{ref:z,readOnly:F,filesystem:n,root:A,initialSelectedPath:S,onSelect:async y=>{if(!y){l(A),await d();return}try{if(await n.isDir(y)){l(y);return}}catch{}l(H.dirname(y)),await R(y,!1)},onDoubleClickFile:async y=>{await R(y,!0)}})))}function Pt({label:n,useWordPressTooltip:s,children:f}){return s?e.createElement(X.Tooltip,{text:n,delay:0,placement:"top"},f):f}const un=()=>e.createElement("svg",{viewBox:"0 0 32 32",width:"24",height:"24","aria-hidden":"true"},e.createElement("path",{d:"M11 6h7l5 5v12a2 2 0 0 1-2 2H11a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinejoin:"round"}),e.createElement("path",{d:"M18 6v5h5",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinejoin:"round"}),e.createElement("g",{transform:"translate(19 19)"},e.createElement("circle",{cx:"5",cy:"5",r:"8",fill:"var(--paper-2, #fff)"}),e.createElement("path",{d:"M5 1.5v7M1.5 5h7",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"}))),fn=()=>e.createElement("svg",{viewBox:"0 0 32 32",width:"24",height:"24","aria-hidden":"true"},e.createElement("path",{d:"M6 9h7l3 3h10v11a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V9z",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinejoin:"round"}),e.createElement("path",{d:"M6 9V8a2 2 0 0 1 2-2h5l3 3",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinejoin:"round"}),e.createElement("g",{transform:"translate(19 19)"},e.createElement("circle",{cx:"5",cy:"5",r:"8",fill:"var(--paper-2, #fff)"}),e.createElement("path",{d:"M5 1.5v7M1.5 5h7",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"}))),dn="_container_18l2z_1",mn="_content_18l2z_9",pn="_sidebarWrapper_18l2z_17",hn="_editorWrapper_18l2z_28",vn="_editorHeader_18l2z_37",wn="_editorPath_18l2z_49",En="_editorPathDirectory_18l2z_61",gn="_editorPathFilename_18l2z_68",yn="_editorPathPlaceholder_18l2z_73",_n="_editorPathPortaled_18l2z_77",bn="_editorHeaderActions_18l2z_83",Cn="_saveStatus_18l2z_90",Rn="_saveStatusSaving_18l2z_97",xn="_saveStatusPending_18l2z_98",Sn="_saveStatusError_18l2z_102",kn="_editor_18l2z_28",Pn="_placeholder_18l2z_124",Tn="_messageArea_18l2z_135",Dn="_mobileToggle_18l2z_171",An="_mobileOverlay_18l2z_175",Fn="_dockPresentation_18l2z_181",Nn="_dockDirtyIndicator_18l2z_205",In="_dockSaveButton_18l2z_214",Ln="_sidebarOpen_18l2z_269",Mn="_editorHeaderPathPortaled_18l2z_367",K={container:dn,content:mn,sidebarWrapper:pn,editorWrapper:hn,editorHeader:vn,editorPath:wn,editorPathDirectory:En,editorPathFilename:gn,editorPathPlaceholder:yn,editorPathPortaled:_n,editorHeaderActions:bn,saveStatus:Cn,saveStatusSaving:Rn,saveStatusPending:xn,saveStatusError:Sn,editor:kn,placeholder:Pn,messageArea:Tn,mobileToggle:Dn,mobileOverlay:An,dockPresentation:Fn,dockDirtyIndicator:Nn,dockSaveButton:In,sidebarOpen:Ln,editorHeaderPathPortaled:Mn},Bn=1500,jn=700,On=1e3,L={IDLE:"idle",PENDING:"pending",SAVING:"saving",SAVED:"saved",ERROR:"error"};function Vn({filesystem:n,isVisible:s=!0,documentRoot:f,initialPath:l=null,placeholderText:C="Select a file to view or edit its contents.",dockPresentation:d=!1,mobileHeaderTarget:k=null}){const[A,F]=e.useState(f),[h,_]=e.useState(null),[D,P]=e.useState(""),[z,Z]=e.useState(!0),[S,q]=e.useState(L.IDLE),[w,R]=e.useState(null),[U,J]=e.useState("idle"),[ne,y]=e.useState(!1),[j,O]=e.useState(null),V=e.useRef(null),p=e.useRef(null),N=e.useRef(!1),le=e.useRef(h),G=e.useRef(n),M=e.useRef(null),ae=e.useRef(null),Q=e.useRef(new WeakMap),he=e.useRef(!0),pe=e.useRef(new Map),Fe=e.useRef(!1);G.current=n,e.useEffect(()=>{le.current=h},[h]);const ke=e.useCallback(async b=>{const{filesystem:T,path:oe,content:ie}=b,ce=ae.current===b,ye=Q.current,we=(ye.get(T)??Promise.resolve()).catch(()=>{}).then(()=>T.writeFile(oe,ie));ye.set(T,we);let Ie=!1;try{await we}catch(He){Ie=!0,Je.logger.error("Failed to save file",He)}const tt=he.current&&ye.get(T)===we&&G.current===T&&le.current===oe&&M.current===null;ye.get(T)===we&&ye.delete(T),ae.current===b&&(ae.current=null),tt&&(q(Ie?L.ERROR:L.SAVED),R(Ie?"Could not save changes. Try again.":null),ce&&J(Ie?"idle":"saved"))},[]),ee=e.useCallback(()=>{const b=M.current;b&&(p.current!==null&&(window.clearTimeout(p.current),p.current=null),M.current=null,ke(b))},[ke]);e.useEffect(()=>(he.current=!0,()=>{he.current=!1}),[]),e.useEffect(()=>()=>{var b;((b=M.current)==null?void 0:b.filesystem)===n&&ee()},[f,n,ee]),e.useEffect(()=>{N.current=!0,F(f),P(""),_(null),Z(!0),q(L.IDLE),R(null),y(!1),O(null),pe.current.clear(),Fe.current=!1},[f,n]),e.useEffect(()=>{if(!n||!l||Fe.current)return;let b=!1;return(async()=>{try{if(await n.fileExists(l)&&!b){const ie=await n.readFileAsText(l);if(b)return;N.current=!0,_(l),P(ie),Z(!1),q(L.IDLE),R(null),setTimeout(()=>{var ce;(ce=V.current)==null||ce.focus()},100)}}catch(oe){Je.logger.debug("Could not auto-open initial path:",oe)}finally{b||(Fe.current=!0)}})(),()=>{b=!0}},[n,l]),e.useEffect(()=>{if(!n||!h){p.current!==null&&(window.clearTimeout(p.current),p.current=null),M.current=null,h||q(L.IDLE);return}if(N.current){N.current=!1,M.current=null;return}p.current!==null&&(window.clearTimeout(p.current),p.current=null),q(L.PENDING);const b={filesystem:n,path:h,content:D};M.current=b;const T=window.setTimeout(()=>{M.current===b&&(p.current=null,M.current=null,q(L.SAVING),ke(b))},Bn);return p.current=T,()=>{p.current===T&&(window.clearTimeout(T),p.current=null)}},[D,h,n,ke]),e.useEffect(()=>{if(S!==L.SAVED)return;const b=window.setTimeout(()=>{q(T=>T===L.SAVED?L.IDLE:T)},2e3);return()=>window.clearTimeout(b)},[S]),e.useEffect(()=>{U==="idle"||S===L.SAVING||S===L.SAVED||J("idle")},[U,S]),e.useEffect(()=>{if(U!=="saved")return;const b=window.setTimeout(()=>J("idle"),On);return()=>window.clearTimeout(b)},[U]),e.useEffect(()=>{if(U!=="waiting")return;const b=window.setTimeout(()=>J(T=>T==="waiting"?"saving":T),jn);return()=>window.clearTimeout(b)},[U]);const Le=e.useCallback(async(b,T,oe=!0)=>{var ce;const ie=(ce=V.current)==null?void 0:ce.getCursorPosition();ie!=null&&le.current&&pe.current.set(le.current,ie),N.current=!0,_(b),P(T),O(null),Z(!1),q(L.IDLE),R(null),y(!1),setTimeout(()=>{var Ve,we,Ie;const ye=pe.current.get(b);ye!==void 0&&((Ve=V.current)==null||Ve.setCursorPosition(ye)),oe?(we=V.current)==null||we.focus():(Ie=V.current)==null||Ie.blur()},50)},[]);e.useEffect(()=>{var oe;if(!h)return;const b=setInterval(()=>{var ce;const ie=(ce=V.current)==null?void 0:ce.getCursorPosition();ie!=null&&pe.current.set(h,ie)},1e3),T=(oe=V.current)==null?void 0:oe.getCursorPosition();return T!=null&&pe.current.set(h,T),()=>{var ce;clearInterval(b);const ie=(ce=V.current)==null?void 0:ce.getCursorPosition();ie!=null&&pe.current.set(h,ie)}},[h]),e.useEffect(()=>{if(!s||!h)return;const b=setTimeout(()=>{var oe;const T=pe.current.get(h);T!==void 0&&((oe=V.current)==null||oe.setCursorPosition(T))},100);return()=>clearTimeout(b)},[s,h]);const te=e.useCallback(async()=>{var T;const b=(T=V.current)==null?void 0:T.getCursorPosition();b!=null&&le.current&&pe.current.set(le.current,b),N.current=!0,_(null),P(""),O(null),Z(!0),q(L.IDLE),R(null)},[]),Be=e.useCallback(async(b,T)=>{N.current=!0,_(null),typeof T=="string"?(P(T),O(null)):(P(""),O(T)),Z(!0),q(L.IDLE),R(null),y(!1)},[]),ge=e.useCallback(()=>{M.current&&(ae.current=M.current,J("waiting"),q(L.SAVING),ee())},[ee]),xe=e.useCallback(()=>{!M.current&&S===L.ERROR&&n&&h&&(M.current={filesystem:n,path:h,content:D}),M.current&&(R(null),ge())},[D,h,n,ge,S]),Ne=zn(S,w),Pe=$n(S,K),fe=Wn(S);let $="Save";S===L.ERROR?$="Retry":S===L.SAVED&&U==="saved"?$="Saved":S===L.SAVING&&U==="saving"&&($="Saving…");const E=S===L.PENDING||S===L.SAVING||S===L.ERROR;if(!n)return e.createElement("div",{className:De(K.container,{[K.dockPresentation]:d})},e.createElement("div",{className:K.placeholder},C));const me=h?H.dirname(h):null,de=h?H.basename(h):null,ve=e.createElement("div",{className:De(K.editorPath,{[K.editorPathPlaceholder]:!(h!=null&&h.length),[K.editorPathPortaled]:k}),title:h??void 0},me&&de?e.createElement(e.Fragment,null,e.createElement("span",{className:K.editorPathDirectory},me==="/"?"":me),e.createElement("span",{className:K.editorPathFilename},"/",de)):`Browse files under ${f}`);return e.createElement("div",{className:De(K.container,{[K.dockPresentation]:d})},e.createElement("div",{className:De(K.content,{[K.sidebarOpen]:ne})},e.createElement("div",{className:K.mobileOverlay,onClick:()=>y(!1)}),e.createElement("aside",{className:K.sidebarWrapper},e.createElement(Yt,{filesystem:n,currentPath:h,selectedDirPath:A,setSelectedDirPath:F,onFileOpened:Le,onSelectionCleared:te,onShowMessage:Be,documentRoot:f,dockPresentation:d,useWordPressTooltips:d})),e.createElement("section",{className:K.editorWrapper},e.createElement("div",{className:De(K.editorHeader,{[K.editorHeaderPathPortaled]:k})},e.createElement(X.Button,{className:K.mobileToggle,variant:"secondary",onClick:()=>y(b=>!b)},ne?"Hide files":"Browse files"),k?ar.createPortal(ve,k):ve,d&&!z&&h?e.createElement("div",{className:K.editorHeaderActions},E?e.createElement("span",{className:K.dockDirtyIndicator,"aria-hidden":"true"}):null,e.createElement(X.Tooltip,{text:fe,placement:"top"},e.createElement(X.Button,{variant:"secondary",className:K.dockSaveButton,isDestructive:S===L.ERROR,onClick:xe},$))):d?null:e.createElement("div",{className:De(K.saveStatus,Pe)},Ne),d&&!z&&h?e.createElement(X.VisuallyHidden,{role:"status","aria-live":"polite"},fe):null),w?e.createElement("div",{style:{padding:"8px 16px"}},e.createElement(X.Notice,{status:"error",isDismissible:!1},w)):null,h||D||j?j?e.createElement("div",{className:K.messageArea},j):e.createElement(At,{ref:V,code:D,onChange:P,currentPath:h,className:K.editor,onSaveShortcut:ge,readOnly:z}):e.createElement("div",{className:K.placeholder},C))))}function zn(n,s){switch(n){case L.PENDING:case L.SAVING:return"Saving…";case L.SAVED:return"Saved";case L.ERROR:return s??"Save failed";default:return""}}function $n(n,s){switch(n){case L.PENDING:return s.saveStatusPending;case L.SAVING:return s.saveStatusSaving;case L.ERROR:return s.saveStatusError;default:return}}function Wn(n){switch(n){case L.PENDING:return"Unsaved changes. Click to save now.";case L.SAVING:return"Saving changes…";case L.ERROR:return"Saving failed. Click to retry.";default:return"All changes saved."}}exports.BinaryFilePreview=qr;exports.ClockIcon=lr;exports.CodeEditor=At;exports.FileExplorerSidebar=Yt;exports.FilePickerControl=Ir;exports.FilePickerTree=Wt;exports.MAX_INLINE_FILE_BYTES=Ft;exports.PlaygroundFileEditor=Vn;exports.SiteManagerIcon=fr;exports.WordPressIcon=sr;exports.createDownloadUrl=Dt;exports.file=$t;exports.folder=zt;exports.getLogoDataURL=ur;exports.getMimeType=qt;exports.isPreviewableBinary=Gt;exports.layout=cr;exports.playgroundLogo=or;exports.seemsLikeBinary=Ut;exports.temporaryStorage=ir;
|
|
31
31
|
//# sourceMappingURL=index.cjs.map
|