flashts 1.0.2 → 1.0.3
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/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to FlashTS will be documented in this file.
|
|
4
4
|
|
|
5
|
-
## 1.0.
|
|
5
|
+
## [1.0.3] - 2026-01-22
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **Global Path Resolution**: Resolved issue where the CLI would fail when run globally by using absolute package paths (`import.meta.dir`).
|
|
10
|
+
- **Active File Execution**: Fixed a bug where the "Run" button always executed the first file instead of the currently active tab.
|
|
11
|
+
|
|
12
|
+
## [1.0.0] - 2026-01-22
|
|
6
13
|
|
|
7
14
|
Initial release of the FlashTS CLI and Unified Playground.
|
|
8
15
|
|
package/CONTRIBUTING.md
CHANGED
package/README.md
CHANGED
|
@@ -10,14 +10,15 @@ FlashTS is an ultra-fast, modern playground that brings a professional IDE-like
|
|
|
10
10
|
|
|
11
11
|
## Quick Start (via NPM)
|
|
12
12
|
|
|
13
|
-
The fastest way to experience FlashTS is via
|
|
13
|
+
The fastest way to experience FlashTS is via the CLI.
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
# Run without installing
|
|
17
|
-
bunx flashts
|
|
18
|
-
|
|
19
|
-
# Or install globally
|
|
20
16
|
bun install -g flashts
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Open it with:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
21
22
|
flashts
|
|
22
23
|
```
|
|
23
24
|
|
|
@@ -32,9 +33,21 @@ flashts
|
|
|
32
33
|
## Key Features
|
|
33
34
|
|
|
34
35
|
- **Blazing Fast**: Powered by **Bun**, the all-in-one JavaScript runtime.
|
|
36
|
+
|
|
37
|
+
<img width="1596" height="705" alt="image" src="https://github.com/user-attachments/assets/e0bdc737-532d-4414-b08d-0ce40e16de29" />
|
|
38
|
+
|
|
35
39
|
- **Multi-file Workspace**: Work on complex projects with relative imports (`import { x } from "./utils"`).
|
|
40
|
+
|
|
41
|
+
<img width="1596" height="716" alt="image" src="https://github.com/user-attachments/assets/19966998-1d3e-4c1c-8101-ca9f0f1be71c" />
|
|
42
|
+
|
|
36
43
|
- **Smart IntelliSense**: Real-time type definitions for your NPM dependencies.
|
|
44
|
+
|
|
45
|
+
<img width="922" height="707" alt="image" src="https://github.com/user-attachments/assets/927171ae-85c9-4854-9849-b78fe25dc3bc" />
|
|
46
|
+
|
|
37
47
|
- **NPM Management**: Search and install packages directly from the UI.
|
|
48
|
+
|
|
49
|
+
<img width="1599" height="717" alt="image" src="https://github.com/user-attachments/assets/43a9b37d-c6c9-4558-808d-5eaf105030b1" />
|
|
50
|
+
|
|
38
51
|
- **Instant Sharing**: Generate public links to share your playground with others.
|
|
39
52
|
- **Premium UI**: Dark mode, responsive design, and smooth animations.
|
|
40
53
|
|
|
@@ -54,4 +67,4 @@ FlashTS is open-source software licensed under the [MIT License](LICENSE).
|
|
|
54
67
|
|
|
55
68
|
Interested in how FlashTS works or want to contribute? Check out our [CONTRIBUTING.md](./CONTRIBUTING.md) for architecture details and local setup instructions.
|
|
56
69
|
|
|
57
|
-
Built by **ZMDev** because all online options are
|
|
70
|
+
Built by **ZMDev** because all online options are paid, not open source or doesn't support npm modules correctly.
|
|
@@ -18,4 +18,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
18
18
|
For more please check the link https://github.com/suren-atoyan/monaco-loader#config
|
|
19
19
|
`},Ke=Be(We)(Ge),qe={config:He},Je=function(){var e=[...arguments];return function(t){return e.reduceRight(function(e,t){return t(e)},t)}};function Ye(e,t){return Object.keys(t).forEach(function(n){t[n]instanceof Object&&e[n]&&Object.assign(t[n],Ye(e[n],t[n]))}),fe(fe({},e),t)}var Xe={type:`cancelation`,msg:`operation is manually canceled`};function Ze(e){var t=!1,n=new Promise(function(n,r){e.then(function(e){return t?r(Xe):n(e)}),e.catch(r)});return n.cancel=function(){return t=!0},n}var Qe=[`monaco`],$e=me(Re.create({config:ze,isInitialized:!1,resolve:null,reject:null,monaco:null}),2),et=$e[0],tt=$e[1];function nt(e){var t=qe.config(e),n=t.monaco,r=A(t,Qe);tt(function(e){return{config:Ye(e.config,r),monaco:n}})}function rt(){var e=et(function(e){return{monaco:e.monaco,isInitialized:e.isInitialized,resolve:e.resolve}});if(!e.isInitialized){if(tt({isInitialized:!0}),e.monaco)return e.resolve(e.monaco),Ze(ut);if(window.monaco&&window.monaco.editor)return ct(window.monaco),e.resolve(window.monaco),Ze(ut);Je(it,ot)(st)}return Ze(ut)}function it(e){return document.body.appendChild(e)}function at(e){var t=document.createElement(`script`);return e&&(t.src=e),t}function ot(e){var t=et(function(e){return{config:e.config,reject:e.reject}}),n=at(`${t.config.paths.vs}/loader.js`);return n.onload=function(){return e()},n.onerror=t.reject,n}function st(){var e=et(function(e){return{config:e.config,resolve:e.resolve,reject:e.reject}}),t=window.require;t.config(e.config),t([`vs/editor/editor.main`],function(t){var n=t.m||t;ct(n),e.resolve(n)},function(t){e.reject(t)})}function ct(e){et().monaco||tt({monaco:e})}function lt(){return et(function(e){return e.monaco})}var ut=new Promise(function(e,t){return tt({resolve:e,reject:t})}),dt={config:nt,init:rt,__getMonacoInstance:lt},ft={wrapper:{display:`flex`,position:`relative`,textAlign:`initial`},fullWidth:{width:`100%`},hide:{display:`none`}},pt={container:{display:`flex`,height:`100%`,width:`100%`,justifyContent:`center`,alignItems:`center`}};function mt({children:e}){return l.createElement(`div`,{style:pt.container},e)}var ht=mt;function gt({width:e,height:t,isEditorReady:n,loading:r,_ref:i,className:a,wrapperProps:o}){return l.createElement(`section`,{style:{...ft.wrapper,width:e,height:t},...o},!n&&l.createElement(ht,null,r),l.createElement(`div`,{ref:i,style:{...ft.fullWidth,...!n&&ft.hide},className:a}))}var _t=(0,l.memo)(gt);function vt(e){(0,l.useEffect)(e,[])}var yt=vt;function bt(e,t,n=!0){let r=(0,l.useRef)(!0);(0,l.useEffect)(r.current||!n?()=>{r.current=!1}:e,t)}var xt=bt;function St(){}function Ct(e,t,n,r){return wt(e,r)||Tt(e,t,n,r)}function wt(e,t){return e.editor.getModel(Et(e,t))}function Tt(e,t,n,r){return e.editor.createModel(t,n,r?Et(e,r):void 0)}function Et(e,t){return e.Uri.parse(t)}function Dt({original:e,modified:t,language:n,originalLanguage:r,modifiedLanguage:i,originalModelPath:a,modifiedModelPath:o,keepCurrentOriginalModel:s=!1,keepCurrentModifiedModel:c=!1,theme:u=`light`,loading:d=`Loading...`,options:f={},height:p=`100%`,width:m=`100%`,className:h,wrapperProps:g={},beforeMount:_=St,onMount:v=St}){let[y,b]=(0,l.useState)(!1),[x,S]=(0,l.useState)(!0),C=(0,l.useRef)(null),w=(0,l.useRef)(null),ee=(0,l.useRef)(null),T=(0,l.useRef)(v),E=(0,l.useRef)(_),D=(0,l.useRef)(!1);yt(()=>{let e=dt.init();return e.then(e=>(w.current=e)&&S(!1)).catch(e=>e?.type!==`cancelation`&&console.error(`Monaco initialization: error:`,e)),()=>C.current?re():e.cancel()}),xt(()=>{if(C.current&&w.current){let t=C.current.getOriginalEditor(),i=Ct(w.current,e||``,r||n||`text`,a||``);i!==t.getModel()&&t.setModel(i)}},[a],y),xt(()=>{if(C.current&&w.current){let e=C.current.getModifiedEditor(),r=Ct(w.current,t||``,i||n||`text`,o||``);r!==e.getModel()&&e.setModel(r)}},[o],y),xt(()=>{let e=C.current.getModifiedEditor();e.getOption(w.current.editor.EditorOption.readOnly)?e.setValue(t||``):t!==e.getValue()&&(e.executeEdits(``,[{range:e.getModel().getFullModelRange(),text:t||``,forceMoveMarkers:!0}]),e.pushUndoStop())},[t],y),xt(()=>{C.current?.getModel()?.original.setValue(e||``)},[e],y),xt(()=>{let{original:e,modified:t}=C.current.getModel();w.current.editor.setModelLanguage(e,r||n||`text`),w.current.editor.setModelLanguage(t,i||n||`text`)},[n,r,i],y),xt(()=>{w.current?.editor.setTheme(u)},[u],y),xt(()=>{C.current?.updateOptions(f)},[f],y);let te=(0,l.useCallback)(()=>{if(!w.current)return;E.current(w.current);let s=Ct(w.current,e||``,r||n||`text`,a||``),c=Ct(w.current,t||``,i||n||`text`,o||``);C.current?.setModel({original:s,modified:c})},[n,t,i,e,r,a,o]),ne=(0,l.useCallback)(()=>{!D.current&&ee.current&&(C.current=w.current.editor.createDiffEditor(ee.current,{automaticLayout:!0,...f}),te(),w.current?.editor.setTheme(u),b(!0),D.current=!0)},[f,u,te]);(0,l.useEffect)(()=>{y&&T.current(C.current,w.current)},[y]),(0,l.useEffect)(()=>{!x&&!y&&ne()},[x,y,ne]);function re(){let e=C.current?.getModel();s||e?.original?.dispose(),c||e?.modified?.dispose(),C.current?.dispose()}return l.createElement(_t,{width:m,height:p,isEditorReady:y,loading:d,_ref:ee,className:h,wrapperProps:g})}(0,l.memo)(Dt);function Ot(e){let t=(0,l.useRef)();return(0,l.useEffect)(()=>{t.current=e},[e]),t.current}var kt=Ot,At=new Map;function jt({defaultValue:e,defaultLanguage:t,defaultPath:n,value:r,language:i,path:a,theme:o=`light`,line:s,loading:c=`Loading...`,options:u={},overrideServices:d={},saveViewState:f=!0,keepCurrentModel:p=!1,width:m=`100%`,height:h=`100%`,className:g,wrapperProps:_={},beforeMount:v=St,onMount:y=St,onChange:b,onValidate:x=St}){let[S,C]=(0,l.useState)(!1),[w,ee]=(0,l.useState)(!0),T=(0,l.useRef)(null),E=(0,l.useRef)(null),D=(0,l.useRef)(null),te=(0,l.useRef)(y),ne=(0,l.useRef)(v),re=(0,l.useRef)(),ie=(0,l.useRef)(r),ae=kt(a),oe=(0,l.useRef)(!1),se=(0,l.useRef)(!1);yt(()=>{let e=dt.init();return e.then(e=>(T.current=e)&&ee(!1)).catch(e=>e?.type!==`cancelation`&&console.error(`Monaco initialization: error:`,e)),()=>E.current?k():e.cancel()}),xt(()=>{let o=Ct(T.current,e||r||``,t||i||``,a||n||``);o!==E.current?.getModel()&&(f&&At.set(ae,E.current?.saveViewState()),E.current?.setModel(o),f&&E.current?.restoreViewState(At.get(a)))},[a],S),xt(()=>{E.current?.updateOptions(u)},[u],S),xt(()=>{!E.current||r===void 0||(E.current.getOption(T.current.editor.EditorOption.readOnly)?E.current.setValue(r):r!==E.current.getValue()&&(se.current=!0,E.current.executeEdits(``,[{range:E.current.getModel().getFullModelRange(),text:r,forceMoveMarkers:!0}]),E.current.pushUndoStop(),se.current=!1))},[r],S),xt(()=>{let e=E.current?.getModel();e&&i&&T.current?.editor.setModelLanguage(e,i)},[i],S),xt(()=>{s!==void 0&&E.current?.revealLine(s)},[s],S),xt(()=>{T.current?.editor.setTheme(o)},[o],S);let O=(0,l.useCallback)(()=>{if(!(!D.current||!T.current)&&!oe.current){ne.current(T.current);let c=a||n,l=Ct(T.current,r||e||``,t||i||``,c||``);E.current=T.current?.editor.create(D.current,{model:l,automaticLayout:!0,...u},d),f&&E.current.restoreViewState(At.get(c)),T.current.editor.setTheme(o),s!==void 0&&E.current.revealLine(s),C(!0),oe.current=!0}},[e,t,n,r,i,a,u,d,f,o,s]);(0,l.useEffect)(()=>{S&&te.current(E.current,T.current)},[S]),(0,l.useEffect)(()=>{!w&&!S&&O()},[w,S,O]),ie.current=r,(0,l.useEffect)(()=>{S&&b&&(re.current?.dispose(),re.current=E.current?.onDidChangeModelContent(e=>{se.current||b(E.current.getValue(),e)}))},[S,b]),(0,l.useEffect)(()=>{if(S){let e=T.current.editor.onDidChangeMarkers(e=>{let t=E.current.getModel()?.uri;if(t&&e.find(e=>e.path===t.path)){let e=T.current.editor.getModelMarkers({resource:t});x?.(e)}});return()=>{e?.dispose()}}return()=>{}},[S,x]);function k(){re.current?.dispose(),p?f&&At.set(a,E.current.saveViewState()):E.current.getModel()?.dispose(),E.current.dispose()}return l.createElement(_t,{width:m,height:h,isEditorReady:S,loading:c,_ref:D,className:g,wrapperProps:_})}var Mt=(0,l.memo)(jt);function Nt(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`)if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=Nt(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n);return r}function Pt(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=Nt(e))&&(r&&(r+=` `),r+=t);return r}var Ft=Pt,It=e((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),j=e(((e,t)=>{t.exports=It()}))();const Lt=({code:e,onChange:t,dependencies:n,fileName:r,files:i,className:a})=>{let[o,s]=(0,l.useState)(null),c=(0,l.useRef)(null),u=(0,l.useRef)({}),d=(0,l.useRef)({}),f=e=>e.endsWith(`.tsx`)||e.endsWith(`.ts`)?`typescript`:e.endsWith(`.jsx`)||e.endsWith(`.js`)?`javascript`:e.endsWith(`.json`)?`json`:`typescript`;return(0,l.useEffect)(()=>{if(!o)return;let e=o;Object.values(d.current).forEach(e=>e.dispose()),d.current={},i.forEach(t=>{let n=e.Uri.parse(`file:///${t.name}`),r=e.editor.getModel(n);r?r.getValue()!==t.content&&r.setValue(t.content):r=e.editor.createModel(t.content,f(t.name),n);let i=f(t.name);r.getLanguageId()!==i&&e.editor.setModelLanguage(r,i),d.current[t.id]=e.languages.typescript.typescriptDefaults.addExtraLib(t.content,n.toString())});let t=new Set(i.map(e=>`file:///${e.name}`));e.editor.getModels().forEach(e=>{let n=e.uri.toString();n.startsWith(`file:///`)&&!n.includes(`node_modules`)&&!t.has(n)&&e.dispose()})},[i,o]),(0,l.useEffect)(()=>{o&&(async()=>{let e=o,t=Object.keys(n);if(t.length!==0){for(let n of t)if(!u.current[n])try{let t=await fetch(`/package-types/${encodeURIComponent(n)}`);if(!t.ok)continue;let{tree:r}=await t.json(),i=[],a=r;for(let[t,r]of Object.entries(a)){let a=`file:///node_modules/${n}/${t}`;i.push(e.languages.typescript.typescriptDefaults.addExtraLib(r,a))}u.current[n]={dispose:()=>i.forEach(e=>e.dispose())}}catch(e){console.error(`Error injecting types for ${n}:`,e)}for(let e in u.current)n[e]||(u.current[e].dispose(),delete u.current[e])}})()},[n,o]),(0,j.jsx)(`div`,{className:Ft(`h-full w-full overflow-hidden relative`,a),children:(0,j.jsx)(Mt,{path:`file:///${r}`,height:`100%`,defaultLanguage:f(r),language:f(r),value:e,onChange:t,onMount:(e,t)=>{c.current=e,s(t),t.editor.defineTheme(`flashts-dark`,{base:`vs-dark`,inherit:!0,rules:[{token:``,foreground:`d4d4d8`},{token:`comment`,foreground:`71717a`,fontStyle:`italic`},{token:`keyword`,foreground:`f59e0b`,fontStyle:`bold`},{token:`operator`,foreground:`f97316`},{token:`string`,foreground:`a3e635`},{token:`function`,foreground:`fcd34d`},{token:`type`,foreground:`fbbf24`}],colors:{"editor.background":`#09090b`,"editor.foreground":`#d4d4d8`,"editor.lineHighlightBackground":`#18181b`,"editorCursor.foreground":`#f59e0b`,"editor.selectionBackground":`#f59e0b33`}}),t.editor.setTheme(`flashts-dark`),t.languages.typescript.typescriptDefaults.setCompilerOptions({target:t.languages.typescript.ScriptTarget.ESNext,moduleResolution:100,module:t.languages.typescript.ModuleKind.ESNext,allowImportingTsExtensions:!0,allowNonTsExtensions:!0,noEmit:!0,esModuleInterop:!0,jsx:t.languages.typescript.JsxEmit.ReactJSX,reactNamespace:`React`,allowJs:!0,baseUrl:`file:///`,rootDirs:[`file:///`],typeRoots:[`file:///node_modules/@types`],lib:[`esnext`,`dom`],paths:{react:[`node_modules/@types/react`],"react/*":[`node_modules/@types/react/*`],"*":[`*`,`node_modules/*`]}}),t.languages.typescript.typescriptDefaults.setDiagnosticsOptions({noSemanticValidation:!1,noSyntaxValidation:!1}),t.languages.typescript.typescriptDefaults.addExtraLib(`declare module 'react/jsx-runtime' { export namespace JSX { interface IntrinsicElements { [e: string]: any; } } }`,`file:///node_modules/@types/react/jsx-runtime.d.ts`)},theme:`vs-dark`,options:{minimap:{enabled:!1},fontSize:14,fontFamily:`JetBrains Mono, monospace`,scrollBeyondLastLine:!1,smoothScrolling:!0,padding:{top:16,bottom:16},fixedOverflowWidgets:!0,automaticLayout:!0}})})},Rt=({output:e,isLoading:t,className:n})=>t?(0,j.jsxs)(`div`,{className:Ft(`h-full w-full flex-center flex-col text-sm text-text-secondary gap-2`,n),children:[(0,j.jsx)(`div`,{className:`animate-spin h-6 w-6 border-2 border-accent-primary border-t-transparent rounded-full`}),(0,j.jsx)(`span`,{children:`Executing via Bun...`})]}):e?(0,j.jsxs)(`div`,{className:Ft(`h-full w-full flex flex-col font-mono text-sm overflow-auto p-4`,n),children:[e.stdout&&(0,j.jsxs)(`div`,{className:`mb-4`,children:[(0,j.jsx)(`div`,{className:`text-text-secondary text-xs mb-1 uppercase tracking-wider`,children:`stdout`}),(0,j.jsx)(`pre`,{className:`text-text-primary whitespace-pre-wrap`,children:e.stdout})]}),e.stderr&&(0,j.jsxs)(`div`,{className:`mb-4`,children:[(0,j.jsx)(`div`,{className:`text-red-400 text-xs mb-1 uppercase tracking-wider`,children:`stderr`}),(0,j.jsx)(`pre`,{className:`text-red-400 whitespace-pre-wrap`,children:e.stderr})]}),!e.stdout&&!e.stderr&&(0,j.jsx)(`div`,{className:`text-text-secondary italic opacity-50`,children:`No output`})]}):(0,j.jsxs)(`div`,{className:Ft(`h-full w-full flex-center flex-col text-sm text-text-secondary opacity-50`,n),children:[(0,j.jsx)(ie,{size:32,className:`mb-2`}),(0,j.jsx)(`span`,{children:`Ready to execute`})]}),zt=({size:e=24,className:t=``})=>(0,j.jsxs)(`svg`,{width:e,height:e,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,className:t,children:[(0,j.jsx)(`path`,{d:`M13 3L4 14H11L9 21L18 10H11L13 3Z`,stroke:`url(#paint0_linear)`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`url(#paint0_linear)`,fillOpacity:`0.2`}),(0,j.jsx)(`defs`,{children:(0,j.jsxs)(`linearGradient`,{id:`paint0_linear`,x1:`4`,y1:`3`,x2:`18`,y2:`21`,gradientUnits:`userSpaceOnUse`,children:[(0,j.jsx)(`stop`,{stopColor:`#facc15`}),` `,(0,j.jsx)(`stop`,{offset:`1`,stopColor:`#fb923c`}),` `]})})]});var Bt=o(),Vt=[`hono`,`react`,`@types/react`];function Ht({dependencies:e,onRefresh:t}){let[n,r]=(0,l.useState)(!1),[i,a]=(0,l.useState)(``),[o,s]=(0,l.useState)([]),[c,u]=(0,l.useState)(!1),[d,f]=(0,l.useState)(null),[p,m]=(0,l.useState)(null),[h,g]=(0,l.useState)(0),_=(0,l.useRef)(null),y=(0,l.useRef)(null);(0,l.useEffect)(()=>{n?(setTimeout(()=>_.current?.focus(),50),t()):(a(``),s([]))},[n]),(0,l.useEffect)(()=>{if(!i){s([]);return}let e=setTimeout(async()=>{u(!0);try{s((await(await fetch(`/search?q=${encodeURIComponent(i)}`)).json()).objects||[]),g(0)}catch(e){console.error(e)}finally{u(!1)}},300);return()=>clearTimeout(e)},[i]),(0,l.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.shiftKey&&(e.key===`l`||e.key===`L`)&&(e.preventDefault(),r(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,l.useEffect)(()=>{if(!n)return;let e=e=>{e.key===`ArrowDown`?(g(e=>Math.min(e+1,o.length-1)),e.preventDefault()):e.key===`ArrowUp`?(g(e=>Math.max(e-1,0)),e.preventDefault()):e.key===`Enter`?o[h]&&b(o[h].package.name):e.key===`Escape`&&r(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n,o,h]);let b=async e=>{if(!d){f(e);try{let n=await(await fetch(`/install`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({package:e})})).json();n.success?(await t(),r(!1)):alert(`Failed to install ${e}: ${n.output}`)}catch{alert(`Installation request failed`)}finally{f(null)}}},S=async e=>{if(!p){m(e);try{let n=await(await fetch(`/uninstall`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({package:e})})).json();n.success?await t():alert(`Failed to uninstall ${e}: ${n.output}`)}catch{alert(`Uninstallation request failed`)}finally{m(null)}}};return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`button`,{onClick:()=>r(!0),className:`flex items-center gap-2 px-3 py-1.5 hover:bg-white/10 rounded-lg text-text-secondary hover:text-accent-primary transition-all active:scale-95 outline-none`,title:`Install NPM Package (Ctrl + Shift + L)`,children:[(0,j.jsx)(E,{size:18}),(0,j.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-wider`,children:`NPM Packages`})]}),n&&(0,Bt.createPortal)((0,j.jsx)(`div`,{className:`fixed inset-0 z-[9999] flex items-start justify-center pt-24 bg-black/50 backdrop-blur-sm`,onClick:()=>r(!1),children:(0,j.jsxs)(`div`,{className:`w-[600px] bg-[#1e1e20] border border-border-color rounded-xl shadow-2xl overflow-hidden flex flex-col max-h-[500px]`,onClick:e=>e.stopPropagation(),children:[(0,j.jsxs)(`div`,{className:`p-4 border-b border-white/5 flex items-center gap-3`,children:[(0,j.jsx)(ne,{className:`text-text-secondary`,size:20}),(0,j.jsx)(`input`,{ref:_,type:`text`,className:`bg-transparent border-none outline-none text-white flex-1 text-lg placeholder:text-white/20`,placeholder:`Search NPM packages...`,value:i,onChange:e=>a(e.target.value)}),c&&(0,j.jsx)(T,{className:`animate-spin text-accent-primary`,size:20}),(0,j.jsx)(`button`,{onClick:()=>r(!1),className:`text-text-secondary hover:text-white`,children:(0,j.jsx)(oe,{size:20})})]}),(0,j.jsxs)(`div`,{className:`flex-1 overflow-y-auto p-2`,ref:y,children:[i&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`div`,{className:`px-3 py-2 text-xs font-bold text-text-secondary uppercase tracking-wider`,children:`Search Results`}),o.length===0&&!c&&(0,j.jsx)(`div`,{className:`text-center py-4 text-text-secondary`,children:`No packages found`}),o.map((t,n)=>(0,j.jsxs)(`div`,{className:Ft(`p-3 rounded-lg flex items-center justify-between cursor-pointer group transition-all`,n===h?`bg-accent-primary text-white`:`hover:bg-white/5 text-text-primary`),onMouseEnter:()=>g(n),onClick:()=>!e[t.package.name]&&b(t.package.name),children:[(0,j.jsxs)(`div`,{className:`flex-1 min-w-0 mr-4`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-2 font-medium`,children:[(0,j.jsx)(`span`,{children:t.package.name}),(0,j.jsxs)(`span`,{className:Ft(`text-xs px-1.5 py-0.5 rounded bg-black/20`,n===h?`text-white/80`:`text-text-secondary`),children:[`v`,t.package.version]})]}),(0,j.jsx)(`p`,{className:Ft(`text-sm truncate`,n===h?`text-white/80`:`text-text-secondary`),children:t.package.description})]}),d===t.package.name?(0,j.jsx)(`div`,{className:Ft(`p-2 rounded-md`,n===h?`bg-white/20`:`bg-white/10`),children:(0,j.jsx)(T,{className:`animate-spin`,size:18})}):e[t.package.name]?(0,j.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,j.jsx)(v,{size:16,className:Ft(n===h?`text-white`:`text-green-500`)}),(0,j.jsx)(`span`,{className:Ft(`text-[10px] font-bold uppercase tracking-wider px-2 py-1 rounded`,n===h?`bg-white/20 text-white`:`bg-white/5 text-text-secondary`),children:`Installed`})]}):(0,j.jsx)(`button`,{onClick:e=>{e.stopPropagation(),b(t.package.name)},className:Ft(`p-2 rounded-md transition-colors`,`opacity-0 group-hover:opacity-100`,n===h?`bg-white/20 hover:bg-white/30`:`bg-white/10 hover:bg-white/20`),children:(0,j.jsx)(x,{size:18})})]},t.package.name)),(0,j.jsx)(`div`,{className:`h-px bg-white/5 my-2`})]}),(0,j.jsx)(`div`,{className:`px-3 py-2 text-xs font-bold text-text-secondary uppercase tracking-wider`,children:`Installed Packages`}),Object.keys(e).length===0?(0,j.jsx)(`div`,{className:`text-center py-4 text-xs text-text-secondary`,children:`No packages installed`}):Object.entries(e).map(([e,t])=>(0,j.jsxs)(`div`,{className:`p-3 rounded-lg flex items-center justify-between hover:bg-white/5 text-text-primary group transition-all`,children:[(0,j.jsx)(`div`,{className:`flex-1 min-w-0 mr-4`,children:(0,j.jsxs)(`div`,{className:`flex items-center gap-2 font-medium`,children:[(0,j.jsx)(`span`,{children:e}),(0,j.jsx)(`span`,{className:`text-xs px-1.5 py-0.5 rounded bg-black/20 text-text-secondary`,children:typeof t==`string`?t:`latest`})]})}),Vt.includes(e)?(0,j.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1 rounded bg-white/5`,children:[(0,j.jsx)(re,{size:12,className:`text-accent-primary/60`}),(0,j.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-tight text-text-secondary opacity-60`,children:`Core`})]}):(0,j.jsx)(`button`,{onClick:()=>S(e),disabled:!!p,className:`p-2 rounded-md bg-red-500/10 hover:bg-red-500/20 text-red-500 opacity-0 group-hover:opacity-100 transition-all disabled:opacity-50`,title:`Uninstall`,children:p===e?(0,j.jsx)(T,{className:`animate-spin`,size:18}):(0,j.jsx)(ae,{size:18})})]},e))]}),(0,j.jsxs)(`div`,{className:`p-2 border-t border-white/5 bg-black/20 flex justify-between px-4 text-xs text-text-secondary`,children:[(0,j.jsxs)(`span`,{children:[(0,j.jsx)(`span`,{className:`font-bold`,children:`Enter`}),` to install`]}),(0,j.jsxs)(`span`,{children:[(0,j.jsx)(`span`,{className:`font-bold`,children:`↑↓`}),` to navigate`]})]})]})}),document.body)]})}var Ut=o();function Wt({files:e,activeFileId:t,onSelect:n,onAdd:r,onClose:i,onRename:a}){let[o,s]=(0,l.useState)(null),[c,u]=(0,l.useState)(``),[d,f]=(0,l.useState)(!1),[p,m]=(0,l.useState)(``),h=(0,l.useRef)(null),g=(0,l.useRef)(null),_=(0,l.useRef)(null),v=e.find(e=>e.id===t),b=v?.name.endsWith(`.ts`)||v?.name.endsWith(`.tsx`)?`TypeScript`:`JavaScript`,x=(e,t)=>{e.stopPropagation(),s(t.id),u(t.name)},S=()=>{if(o&&c.trim()){let e=c.trim();e.includes(`.`)||(e+=`.ts`),a(o,e)}s(null)},ee=()=>{if(p.trim()){let e=p.trim();e.includes(`.`)||(e+=`.ts`),r(e)}f(!1),m(``)},T=(e,t)=>{e.key===`Enter`&&(t===`rename`?S():ee()),e.key===`Escape`&&(t===`rename`?s(null):f(!1))};return(0,l.useEffect)(()=>{o&&h.current&&(h.current.focus(),h.current.select())},[o]),(0,l.useEffect)(()=>{d&&g.current&&g.current.focus()},[d]),(0,j.jsxs)(`div`,{className:`flex items-center bg-bg-secondary w-full border-b border-border-color h-11 group/tabs overflow-hidden`,children:[(0,j.jsxs)(`div`,{ref:_,className:`flex items-center overflow-x-auto no-scrollbar flex-1 h-full scroll-smooth select-none px-2 gap-1`,children:[e.map(r=>(0,j.jsxs)(`div`,{"data-id":r.id,onClick:()=>n(r.id),onDoubleClick:e=>x(e,r),className:Ft(`flex items-center gap-2 px-3 h-8 rounded-t-lg cursor-pointer transition-[background-color,color] relative group flex-shrink-0 mt-2 outline-none select-none`,r.id===t?`bg-bg-primary text-accent-primary border-x border-t border-border-color`:`text-text-secondary hover:bg-white/5 hover:text-text-primary border-x border-t border-transparent`),children:[r.name.endsWith(`.json`)?(0,j.jsx)(C,{size:14,className:`opacity-70`}):(0,j.jsx)(w,{size:14,className:`opacity-70`}),o===r.id?(0,j.jsx)(`input`,{ref:h,value:c,onChange:e=>u(e.target.value),onBlur:S,onKeyDown:e=>T(e,`rename`),className:`bg-bg-tertiary text-white text-xs px-1 rounded outline-none w-24 border border-accent-primary/50`,onClick:e=>e.stopPropagation()}):(0,j.jsx)(`span`,{className:`text-xs font-medium truncate max-w-[120px]`,children:r.name}),e.length>1&&(0,j.jsx)(`button`,{onClick:e=>{e.stopPropagation(),i(r.id)},className:Ft(`p-0.5 hover:bg-red-500/20 rounded text-text-secondary hover:text-red-400 transition-opacity`,r.id===t?`opacity-100`:`opacity-0 group-hover:opacity-100`),title:`Close file`,children:(0,j.jsx)(oe,{size:12})})]},r.id)),(0,j.jsx)(`button`,{onClick:()=>f(!0),className:`p-1.5 ml-1 rounded-lg text-text-secondary hover:text-accent-primary hover:bg-white/5 transition-colors mt-2`,title:`New File`,children:(0,j.jsx)(te,{size:16})})]}),(0,j.jsx)(`div`,{className:`px-4 h-full flex items-center border-l border-border-color bg-bg-secondary hidden md:flex`,children:(0,j.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-widest text-text-secondary opacity-50`,children:b})}),d&&(0,Ut.createPortal)((0,j.jsx)(`div`,{className:`fixed inset-0 z-[10000] flex items-center justify-center bg-black/60 backdrop-blur-sm`,onClick:()=>f(!1),children:(0,j.jsxs)(`div`,{className:`w-full max-w-sm bg-bg-secondary border border-border-color rounded-xl shadow-2xl p-6 overflow-hidden`,onClick:e=>e.stopPropagation(),children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-3 mb-4`,children:[(0,j.jsx)(`div`,{className:`p-2 rounded-lg bg-accent-primary/10 text-accent-primary`,children:(0,j.jsx)(y,{size:24})}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h3`,{className:`text-lg font-bold text-white`,children:`Create New File`}),(0,j.jsx)(`p`,{className:`text-xs text-text-secondary`,children:`Enter a name ending in .ts or .js`})]})]}),(0,j.jsx)(`input`,{ref:g,type:`text`,placeholder:`e.g. utils.ts`,className:`w-full bg-bg-primary border border-border-color rounded-lg px-4 py-3 text-white outline-none focus:border-accent-primary transition-colors mb-6`,value:p,onChange:e=>m(e.target.value),onKeyDown:e=>T(e,`add`)}),(0,j.jsxs)(`div`,{className:`flex gap-3`,children:[(0,j.jsx)(`button`,{onClick:()=>f(!1),className:`flex-1 px-4 py-2 rounded-lg bg-white/5 hover:bg-white/10 text-white font-medium transition-colors`,children:`Cancel`}),(0,j.jsx)(`button`,{onClick:ee,className:`flex-1 btn-primary justify-center`,children:`Create`})]})]})}),document.body)]})}var Gt=o();function Kt({isOpen:e,onClose:t,showOnStartup:n,onToggleStartup:r}){return e?(0,Gt.createPortal)((0,j.jsxs)(`div`,{className:`fixed inset-0 z-[20000] flex items-center justify-center p-4 md:p-6 overflow-y-auto`,children:[(0,j.jsx)(`div`,{className:`fixed inset-0 bg-black/80 backdrop-blur-md transition-opacity`,onClick:t}),(0,j.jsxs)(`div`,{className:Ft(`relative w-full max-w-2xl bg-[#09090b] border border-border-color rounded-2xl shadow-2xl overflow-hidden`,`animate-modal my-auto flex flex-col max-h-[90vh] md:max-h-none`),children:[(0,j.jsx)(`div`,{className:`absolute top-0 inset-x-0 h-1 bg-gradient-to-r from-transparent via-accent-primary to-transparent opacity-50`}),(0,j.jsxs)(`div`,{className:`p-5 md:p-8 flex flex-col h-full overflow-y-auto no-scrollbar`,children:[(0,j.jsxs)(`div`,{className:`flex justify-between items-start mb-6 md:mb-8`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-3 md:gap-4`,children:[(0,j.jsx)(`div`,{className:`h-10 w-10 md:h-14 md:w-14 rounded-xl md:rounded-2xl bg-accent-primary/10 flex-center text-accent-primary shrink-0 transition-transform hover:scale-110`,children:(0,j.jsx)(se,{size:24,className:`md:w-8 md:h-8`})}),(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`h2`,{className:`text-xl md:text-3xl font-black tracking-tight text-white leading-tight`,children:[`Welcome to `,(0,j.jsx)(`span`,{className:`text-accent-primary`,children:`FlashTS`})]}),(0,j.jsx)(`p`,{className:`text-text-secondary text-xs md:text-sm`,children:`Ultra-fast JavaScript/TypeScript Playground`})]})]}),(0,j.jsx)(`button`,{onClick:t,className:`p-2 hover:bg-white/5 rounded-full text-text-secondary hover:text-white transition-colors shrink-0`,children:(0,j.jsx)(oe,{size:20,className:`md:w-6 md:h-6`})})]}),(0,j.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-3 md:gap-6 mb-6 md:mb-8`,children:[(0,j.jsx)(qt,{icon:(0,j.jsx)(se,{size:18}),title:`Bun Powered`,desc:`Instant execution with Bun's runtime.`,color:`blue`}),(0,j.jsx)(qt,{icon:(0,j.jsx)(b,{size:18}),title:`Multi-File`,desc:`Full project with tabbed imports.`,color:`orange`}),(0,j.jsx)(qt,{icon:(0,j.jsx)(Yt,{size:18}),title:`IntelliSense`,desc:`Pro autocomplete for NPM packages.`,color:`green`}),(0,j.jsx)(qt,{icon:(0,j.jsx)(S,{size:18}),title:`Zero Config`,desc:`Auto-setup for maximum speed.`,color:`purple`})]}),(0,j.jsxs)(`div`,{className:`bg-bg-secondary/50 rounded-xl p-4 border border-border-color mb-6 md:mb-8 hidden xs:block`,children:[(0,j.jsx)(`h4`,{className:`text-[10px] md:text-xs font-bold text-text-secondary uppercase tracking-widest mb-3`,children:`Key Shortcuts`}),(0,j.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-2`,children:[(0,j.jsx)(Jt,{label:`Run Project`,keys:`Ctrl + Shift + F`}),(0,j.jsx)(Jt,{label:`NPM Manager`,keys:`Ctrl + Shift + L`})]})]}),(0,j.jsxs)(`div`,{className:`flex flex-col sm:flex-row items-center justify-between gap-4 mt-auto pt-4 border-t border-white/5`,children:[(0,j.jsx)(`div`,{className:`flex items-center gap-3 w-full sm:w-auto`,children:(0,j.jsxs)(`label`,{className:`flex items-center gap-3 cursor-pointer group`,children:[(0,j.jsx)(`div`,{onClick:()=>r(!n),className:Ft(`w-10 h-5 md:w-12 md:h-6 rounded-full transition-all relative`,n?`bg-accent-primary`:`bg-bg-tertiary`),children:(0,j.jsx)(`div`,{className:Ft(`absolute top-1 left-1 w-3 h-3 md:w-4 md:h-4 rounded-full bg-white shadow-sm transition-transform`,n?`translate-x-5 md:translate-x-6`:`translate-x-0`)})}),(0,j.jsx)(`span`,{className:`text-xs text-text-secondary group-hover:text-text-primary transition-colors font-medium select-none`,children:`Show on startup`})]})}),(0,j.jsx)(`button`,{onClick:t,className:`w-full sm:w-32 py-2.5 md:py-3 btn-primary text-sm font-bold shadow-lg shadow-accent-primary/10`,children:`Get Started`})]})]})]})]}),document.body):null}function qt({icon:e,title:t,desc:n,color:r}){return(0,j.jsxs)(`div`,{className:`p-3 md:p-4 rounded-xl bg-white/5 border border-white/5 flex items-start gap-3 hover:bg-white/[0.08] transition-colors group`,children:[(0,j.jsx)(`div`,{className:Ft(`p-2 rounded-lg shrink-0 group-hover:scale-110 transition-transform`,{blue:`bg-blue-500/10 text-blue-400`,orange:`bg-orange-500/10 text-orange-400`,green:`bg-green-500/10 text-green-400`,purple:`bg-purple-500/10 text-purple-400`}[r]),children:e}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h4`,{className:`font-bold text-white text-sm md:text-base mb-0.5`,children:t}),(0,j.jsx)(`p`,{className:`text-[10px] md:text-xs text-text-secondary leading-relaxed`,children:n})]})]})}function Jt({label:e,keys:t}){return(0,j.jsxs)(`div`,{className:`flex justify-between items-center px-3 py-2 bg-black/20 rounded-lg hover:bg-black/30 transition-colors`,children:[(0,j.jsx)(`span`,{className:`text-[10px] md:text-xs text-text-primary font-medium`,children:e}),(0,j.jsx)(`kbd`,{className:`text-[9px] md:text-[10px] bg-bg-tertiary px-1.5 py-0.5 rounded border border-white/10 font-mono text-text-secondary shadow-sm lowercase`,children:t})]})}function Yt({size:e,className:t}){return(0,j.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`,className:t,children:(0,j.jsx)(`polyline`,{points:`20 6 9 17 4 12`})})}function M(e,t=`Assertion error`){if(!e)throw Error(t)}function Xt({group:e}){let{orientation:t,panels:n}=e;return n.reduce((e,n)=>(e+=t===`horizontal`?n.element.offsetWidth:n.element.offsetHeight,e),0)}function Zt(e,t){return t.sort(e===`horizontal`?Qt:$t)}function Qt(e,t){let n=e.element.offsetLeft-t.element.offsetLeft;return n===0?e.element.offsetWidth-t.element.offsetWidth:n}function $t(e,t){let n=e.element.offsetTop-t.element.offsetTop;return n===0?e.element.offsetHeight-t.element.offsetHeight:n}function en(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.ELEMENT_NODE}function tn(e,t){return{x:e.x>=t.left&&e.x<=t.right?0:Math.min(Math.abs(e.x-t.left),Math.abs(e.x-t.right)),y:e.y>=t.top&&e.y<=t.bottom?0:Math.min(Math.abs(e.y-t.top),Math.abs(e.y-t.bottom))}}function nn({orientation:e,rects:t,targetRect:n}){let r={x:n.x+n.width/2,y:n.y+n.height/2},i,a=Number.MAX_VALUE;for(let n of t){let{x:t,y:o}=tn(r,n),s=e===`horizontal`?t:o;s<a&&(a=s,i=n)}return M(i,`No rect found`),i}function rn(e){let{element:t,orientation:n,panels:r,separators:i}=e,a=Zt(n,Array.from(t.children).filter(en).map(e=>({element:e}))).map(({element:e})=>e),o=[],s=!1,c,l=[];for(let t of a)if(t.hasAttribute(`data-panel`)){let i=r.find(e=>e.element===t);if(i){if(c){let r=c.element.getBoundingClientRect(),a=t.getBoundingClientRect(),u;if(s){let e=n===`horizontal`?new DOMRect(r.right,r.top,0,r.height):new DOMRect(r.left,r.bottom,r.width,0),t=n===`horizontal`?new DOMRect(a.left,a.top,0,a.height):new DOMRect(a.left,a.top,a.width,0);switch(l.length){case 0:u=[e,t];break;case 1:{let i=l[0];u=[i,nn({orientation:n,rects:[r,a],targetRect:i.element.getBoundingClientRect()})===r?t:e];break}default:u=l;break}}else u=l.length?l:[n===`horizontal`?new DOMRect(r.right,a.top,a.left-r.right,a.height):new DOMRect(a.left,r.bottom,a.width,a.top-r.bottom)];for(let t of u)o.push({group:e,groupSize:Xt({group:e}),panels:[c,i],separator:`width`in t?void 0:t,rect:`width`in t?t:t.element.getBoundingClientRect()})}s=!1,c=i,l=[]}}else if(t.hasAttribute(`data-separator`)){let e=i.find(e=>e.element===t);e?l.push(e):(c=void 0,l=[])}else s=!0;return o}function an(e,t){let n=getComputedStyle(e);return t*parseFloat(n.fontSize)}function on(e,t){let n=getComputedStyle(e.ownerDocument.body);return t*parseFloat(n.fontSize)}function sn(e){return e/100*window.innerHeight}function cn(e){return e/100*window.innerWidth}function ln(e){switch(typeof e){case`number`:return[e,`px`];case`string`:{let t=parseFloat(e);return e.endsWith(`%`)?[t,`%`]:e.endsWith(`px`)?[t,`px`]:e.endsWith(`rem`)?[t,`rem`]:e.endsWith(`em`)?[t,`em`]:e.endsWith(`vh`)?[t,`vh`]:e.endsWith(`vw`)?[t,`vw`]:[t,`%`]}}}function un({groupSize:e,panelElement:t,styleProp:n}){let r,[i,a]=ln(n);switch(a){case`%`:r=i/100*e;break;case`px`:r=i;break;case`rem`:r=on(t,i);break;case`em`:r=an(t,i);break;case`vh`:r=sn(i);break;case`vw`:r=cn(i);break}return r}function dn(e){return parseFloat(e.toFixed(3))}function fn(e){let{panels:t}=e,n=Xt({group:e});return n===0?t.map(e=>({collapsedSize:0,collapsible:e.panelConstraints.collapsible===!0,defaultSize:void 0,minSize:0,maxSize:100,panelId:e.id})):t.map(e=>{let{element:t,panelConstraints:r}=e,i=0;r.collapsedSize!==void 0&&(i=dn(un({groupSize:n,panelElement:t,styleProp:r.collapsedSize})/n*100));let a;r.defaultSize!==void 0&&(a=dn(un({groupSize:n,panelElement:t,styleProp:r.defaultSize})/n*100));let o=0;r.minSize!==void 0&&(o=dn(un({groupSize:n,panelElement:t,styleProp:r.minSize})/n*100));let s=100;return r.maxSize!==void 0&&(s=dn(un({groupSize:n,panelElement:t,styleProp:r.maxSize})/n*100)),{collapsedSize:i,collapsible:r.collapsible===!0,defaultSize:a,minSize:o,maxSize:s,panelId:e.id}})}var pn=class{#e={};addListener(e,t){let n=this.#e[e];return n===void 0?this.#e[e]=[t]:n.includes(t)||n.push(t),()=>{this.removeListener(e,t)}}emit(e,t){let n=this.#e[e];if(n!==void 0)if(n.length===1)n[0].call(null,t);else{let e=!1,r=null,i=Array.from(n);for(let n=0;n<i.length;n++){let a=i[n];try{a.call(null,t)}catch(t){r===null&&(e=!0,r=t)}}if(e)throw r}}removeAllListeners(){this.#e={}}removeListener(e,t){let n=this.#e[e];if(n!==void 0){let e=n.indexOf(t);e>=0&&n.splice(e,1)}}};function mn(e,t,n=0){return Math.abs(dn(e)-dn(t))<=n}var N={cursorFlags:0,interactionState:{state:`inactive`},mountedGroups:new Map},hn=new pn;function gn(){return N}function P(e){let t=typeof e==`function`?e(N):e;if(N===t)return N;let n=N;return N={...N,...t},t.cursorFlags!==void 0&&hn.emit(`cursorFlagsChange`,N.cursorFlags),t.interactionState!==void 0&&hn.emit(`interactionStateChange`,N.interactionState),t.mountedGroups!==void 0&&(N.mountedGroups.forEach((e,t)=>{e.derivedPanelConstraints.forEach(r=>{if(r.collapsible){let{layout:i}=n.mountedGroups.get(t)??{};if(i){let n=mn(r.collapsedSize,e.layout[r.panelId]),a=mn(r.collapsedSize,i[r.panelId]);n&&!a&&(t.inMemoryLastExpandedPanelSizes[r.panelId]=i[r.panelId])}}})}),hn.emit(`mountedGroupsChange`,N.mountedGroups)),N}function _n(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0}function vn(e,t){return mn(e,t)?0:e>t?1:-1}function yn({panelConstraints:e,size:t}){let{collapsedSize:n=0,collapsible:r,maxSize:i=100,minSize:a=0}=e;if(vn(t,a)<0)if(r){let e=(n+a)/2;t=vn(t,e)<0?n:a}else t=a;return t=Math.min(i,t),t=dn(t),t}function bn({delta:e,initialLayout:t,panelConstraints:n,pivotIndices:r,prevLayout:i,trigger:a}){if(mn(e,0))return t;let o=Object.values(t),s=Object.values(i),c=[...o],[l,u]=r;M(l!=null,`Invalid first pivot index`),M(u!=null,`Invalid second pivot index`);let d=0;if(a===`keyboard`){{let t=e<0?u:l,r=n[t];M(r,`Panel constraints not found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:s=0}=r;if(a){let n=o[t];if(M(n!=null,`Previous layout not found for panel index ${t}`),mn(n,i)){let t=s-n;vn(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}{let t=e<0?l:u,r=n[t];M(r,`No panel constraints found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:s=0}=r;if(a){let n=o[t];if(M(n!=null,`Previous layout not found for panel index ${t}`),mn(n,s)){let t=n-i;vn(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}}{let t=e<0?1:-1,r=e<0?u:l,i=0;for(;;){let e=o[r];M(e!=null,`Previous layout not found for panel index ${r}`);let a=yn({panelConstraints:n[r],size:100})-e;if(i+=a,r+=t,r<0||r>=n.length)break}let a=Math.min(Math.abs(e),Math.abs(i));e=e<0?0-a:a}{let t=e<0?l:u;for(;t>=0&&t<n.length;){let r=Math.abs(e)-Math.abs(d),i=o[t];M(i!=null,`Previous layout not found for panel index ${t}`);let a=i-r,s=yn({panelConstraints:n[t],size:a});if(!mn(i,s)&&(d+=i-s,c[t]=s,d.toFixed(3).localeCompare(Math.abs(e).toFixed(3),void 0,{numeric:!0})>=0))break;e<0?t--:t++}}if(_n(s,c))return i;{let t=e<0?u:l,r=o[t];M(r!=null,`Previous layout not found for panel index ${t}`);let i=r+d,a=yn({panelConstraints:n[t],size:i});if(c[t]=a,!mn(a,i)){let t=i-a,r=e<0?u:l;for(;r>=0&&r<n.length;){let i=c[r];M(i!=null,`Previous layout not found for panel index ${r}`);let a=i+t,o=yn({panelConstraints:n[r],size:a});if(mn(i,o)||(t-=o-i,c[r]=o),mn(t,0))break;e>0?r--:r++}}}if(!mn(Object.values(c).reduce((e,t)=>t+e,0),100,.1))return i;let f=Object.keys(i);return c.reduce((e,t,n)=>(e[f[n]]=t,e),{})}function xn(e){let{mountedGroups:t}=gn();for(let[n]of t)if(n.separators.some(t=>t.element===e))return n;throw Error(`Could not find parent Group for separator element`)}function Sn(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(t[n]===void 0||vn(e[n],t[n])!==0)return!1;return!0}function F({layout:e,panelConstraints:t}){let n=[...Object.values(e)],r=n.reduce((e,t)=>e+t,0);if(n.length!==t.length)throw Error(`Invalid ${t.length} panel layout: ${n.map(e=>`${e}%`).join(`, `)}`);if(!mn(r,100)&&n.length>0)for(let e=0;e<t.length;e++){let t=n[e];M(t!=null,`No layout data found for index ${e}`),n[e]=100/r*t}let i=0;for(let e=0;e<t.length;e++){let r=n[e];M(r!=null,`No layout data found for index ${e}`);let a=yn({panelConstraints:t[e],size:r});r!=a&&(i+=r-a,n[e]=a)}if(!mn(i,0))for(let e=0;e<t.length;e++){let r=n[e];M(r!=null,`No layout data found for index ${e}`);let a=r+i,o=yn({panelConstraints:t[e],size:a});if(r!==o&&(i-=o-r,n[e]=o,mn(i,0)))break}let a=Object.keys(e);return n.reduce((e,t,n)=>(e[a[n]]=t,e),{})}function Cn({groupId:e}){let t=()=>{let{mountedGroups:t}=gn();for(let[n,r]of t)if(n.id===e)return{group:n,...r};throw Error(`Could not find Group with id "${e}"`)};return{getLayout(){let{defaultLayoutDeferred:e,layout:n}=t();return e?{}:n},setLayout(e){let{defaultLayoutDeferred:n,derivedPanelConstraints:r,group:i,layout:a,separatorToPanels:o}=t(),s=F({layout:e,panelConstraints:r});return n?a:(Sn(a,s)||P(e=>({mountedGroups:new Map(e.mountedGroups).set(i,{defaultLayoutDeferred:n,derivedPanelConstraints:r,layout:s,separatorToPanels:o})})),s)}}}function wn(e){let{mountedGroups:t}=gn(),n=t.get(e);return M(n,`Mounted Group ${e.id} not found`),n}function Tn(e,t){let n=xn(e),r=wn(n),i=n.separators.find(t=>t.element===e);M(i,`Matching separator not found`);let a=r.separatorToPanels.get(i);M(a,`Matching panels not found`);let o=a.map(e=>n.panels.indexOf(e)),s=Cn({groupId:n.id}).getLayout(),c=F({layout:bn({delta:t,initialLayout:s,panelConstraints:r.derivedPanelConstraints,pivotIndices:o,prevLayout:s,trigger:`keyboard`}),panelConstraints:r.derivedPanelConstraints});Sn(s,c)||P(e=>({mountedGroups:new Map(e.mountedGroups).set(n,{defaultLayoutDeferred:r.defaultLayoutDeferred,derivedPanelConstraints:r.derivedPanelConstraints,layout:c,separatorToPanels:r.separatorToPanels})}))}function En(e){if(e.defaultPrevented)return;let t=e.currentTarget,n=xn(t);if(!n.disabled)switch(e.key){case`ArrowDown`:e.preventDefault(),n.orientation===`vertical`&&Tn(t,5);break;case`ArrowLeft`:e.preventDefault(),n.orientation===`horizontal`&&Tn(t,-5);break;case`ArrowRight`:e.preventDefault(),n.orientation===`horizontal`&&Tn(t,5);break;case`ArrowUp`:e.preventDefault(),n.orientation===`vertical`&&Tn(t,-5);break;case`End`:e.preventDefault(),Tn(t,100);break;case`Enter`:{e.preventDefault();let n=xn(t),{derivedPanelConstraints:r,layout:i,separatorToPanels:a}=wn(n),o=n.separators.find(e=>e.element===t);M(o,`Matching separator not found`);let s=a.get(o);M(s,`Matching panels not found`);let c=s[0],l=r.find(e=>e.panelId===c.id);if(M(l,`Panel metadata not found`),l.collapsible){let e=i[c.id];Tn(t,(l.collapsedSize===e?n.inMemoryLastExpandedPanelSizes[c.id]??l.minSize:l.collapsedSize)-e)}break}case`F6`:{e.preventDefault();let n=xn(t).separators.map(e=>e.element),r=Array.from(n).findIndex(t=>t===e.currentTarget);M(r!==null,`Index not found`),n[e.shiftKey?r>0?r-1:n.length-1:r+1<n.length?r+1:0].focus();break}case`Home`:e.preventDefault(),Tn(t,-100);break}}var Dn=e=>e,On=()=>{},kn=1,An=2,jn=4,Mn=8,Nn={coarse:10,precise:5};function Pn(e,t,n){let r,i={x:1/0,y:1/0};for(let a of t){let t=tn(n,a.rect);switch(e){case`horizontal`:t.x<=i.x&&(r=a,i=t);break;case`vertical`:t.y<=i.y&&(r=a,i=t);break}}return r?{distance:i,hitRegion:r}:void 0}var Fn;function In(){return Fn===void 0&&(Fn=typeof matchMedia==`function`?!!matchMedia(`(pointer:coarse)`).matches:!1),Fn}function Ln(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function Rn(e,t){if(e===t)throw Error(`Cannot compare node with itself`);let n={a:Wn(e),b:Wn(t)},r;for(;n.a.at(-1)===n.b.at(-1);)e=n.a.pop(),t=n.b.pop(),r=e;M(r,`Stacking order can only be calculated for elements with a common ancestor`);let i={a:Un(Hn(n.a)),b:Un(Hn(n.b))};if(i.a===i.b){let e=r.childNodes,t={a:n.a.at(-1),b:n.b.at(-1)},i=e.length;for(;i--;){let n=e[i];if(n===t.a)return 1;if(n===t.b)return-1}}return Math.sign(i.a-i.b)}var zn=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function Bn(e){let t=getComputedStyle(Gn(e)??e).display;return t===`flex`||t===`inline-flex`}function Vn(e){let t=getComputedStyle(e);return!!(t.position===`fixed`||t.zIndex!==`auto`&&(t.position!==`static`||Bn(e))||+t.opacity<1||`transform`in t&&t.transform!==`none`||`webkitTransform`in t&&t.webkitTransform!==`none`||`mixBlendMode`in t&&t.mixBlendMode!==`normal`||`filter`in t&&t.filter!==`none`||`webkitFilter`in t&&t.webkitFilter!==`none`||`isolation`in t&&t.isolation===`isolate`||zn.test(t.willChange)||t.webkitOverflowScrolling===`touch`)}function Hn(e){let t=e.length;for(;t--;){let n=e[t];if(M(n,`Missing node`),Vn(n))return n}return null}function Un(e){return e&&Number(getComputedStyle(e).zIndex)||0}function Wn(e){let t=[];for(;e;)t.push(e),e=Gn(e);return t}function Gn(e){let{parentNode:t}=e;return Ln(t)?t.host:t}function Kn(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function qn({groupElement:e,hitRegion:t,pointerEventTarget:n}){if(!en(n)||n.contains(e)||e.contains(n))return!0;if(Rn(n,e)>0){let r=n;for(;r;){if(r.contains(e))return!0;if(Kn(r.getBoundingClientRect(),t))return!1;r=r.parentElement}}return!0}function Jn(e,t){let n=[];return t.forEach((t,r)=>{if(r.disabled)return;let i=In()?Nn.coarse:Nn.precise,a=rn(r),o=Pn(r.orientation,a,{x:e.clientX,y:e.clientY});o&&o.distance.x<=i&&o.distance.y<=i&&qn({groupElement:r.element,hitRegion:o.hitRegion.rect,pointerEventTarget:e.target})&&n.push(o.hitRegion)}),n}function Yn(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let{mountedGroups:t}=gn(),n=Jn(e,t),r=new Set,i=new Set,a=new Set,o=new Map,s=!1;n.forEach(e=>{r.add(e.group),e.panels.forEach(e=>{i.add(e)}),e.separator&&(a.add(e.separator),s||(s=!0,e.separator.element.focus()));let n=t.get(e.group);n&&o.set(e.group,n.layout)}),P({interactionState:{hitRegions:n,initialLayoutMap:o,pointerDownAtPoint:{x:e.clientX,y:e.clientY},state:`active`}}),n.length&&e.preventDefault()}function Xn({cursorFlags:e,groups:t,state:n}){let r=0,i=0;switch(n){case`active`:case`hover`:t.forEach(e=>{if(!e.disableCursor)switch(e.orientation){case`horizontal`:r++;break;case`vertical`:i++;break}})}if(r===0&&i===0)return null;switch(n){case`active`:{let t=(e&kn)!==0,n=(e&An)!==0,r=(e&jn)!==0,i=(e&Mn)!==0;if(e){if(t)return r?`se-resize`:i?`ne-resize`:`e-resize`;if(n)return r?`sw-resize`:i?`nw-resize`:`w-resize`;if(r)return`s-resize`;if(i)return`n-resize`}break}}return r>0&&i>0?`move`:r>0?`ew-resize`:`ns-resize`}var Zn=new WeakMap;function Qn(e){if(e.defaultView===null||e.defaultView===void 0)return;let{prevStyle:t,styleSheet:n}=Zn.get(e)??{};n===void 0&&(n=new e.defaultView.CSSStyleSheet,e.adoptedStyleSheets=[n]);let{cursorFlags:r,interactionState:i}=gn();switch(i.state){case`active`:case`hover`:{let e=Xn({cursorFlags:r,groups:i.hitRegions.map(e=>e.group),state:i.state}),a=`*{cursor: ${e} !important; ${i.state===`active`?`touch-action: none;`:``} }`;if(t===a)return;t=a,e?n.cssRules.length===0?n.insertRule(a):n.replaceSync(a):n.cssRules.length===1&&n.deleteRule(0);break}case`inactive`:t=void 0,n.cssRules.length===1&&n.deleteRule(0);break}Zn.set(e,{prevStyle:t,styleSheet:n})}function $n({document:e,event:t,hitRegions:n,initialLayoutMap:r,mountedGroups:i,pointerDownAtPoint:a}){let o=0,s=new Map(i);n.forEach(e=>{let{group:n,groupSize:c}=e,{disableCursor:l,orientation:u,panels:d}=n,f=0;f=a?u===`horizontal`?(t.clientX-a.x)/c*100:(t.clientY-a.y)/c*100:u===`horizontal`?t.clientX<0?-100:100:t.clientY<0?-100:100;let p=r.get(n),{defaultLayoutDeferred:m,derivedPanelConstraints:h,layout:g,separatorToPanels:_}=i.get(n)??{defaultLayoutDeferred:!1};if(h&&p&&g&&_){let t=bn({delta:f,initialLayout:p,panelConstraints:h,pivotIndices:e.panels.map(e=>d.indexOf(e)),prevLayout:g,trigger:`mouse-or-touch`});if(Sn(t,g)){if(f!==0&&!l)switch(u){case`horizontal`:o|=f<0?kn:An;break;case`vertical`:o|=f<0?jn:Mn;break}}else{s.set(e.group,{defaultLayoutDeferred:m,derivedPanelConstraints:h,layout:t,separatorToPanels:_});let n=e.group.panels.map(({id:e})=>e).join(`,`);e.group.inMemoryLayouts[n]=t}}}),P({cursorFlags:o,mountedGroups:s}),Qn(e)}function er(e){let{interactionState:t,mountedGroups:n}=gn();switch(t.state){case`active`:$n({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:n})}}function tr(e){if(e.defaultPrevented)return;let{interactionState:t,mountedGroups:n}=gn();switch(t.state){case`active`:if(e.buttons===0){P(e=>e.interactionState.state===`inactive`?e:{cursorFlags:0,interactionState:{state:`inactive`}}),P(e=>({mountedGroups:new Map(e.mountedGroups)}));return}$n({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:n,pointerDownAtPoint:t.pointerDownAtPoint});break;default:{let r=Jn(e,n);r.length===0?t.state!==`inactive`&&P({interactionState:{state:`inactive`}}):P({interactionState:{hitRegions:r,state:`hover`}}),Qn(e.currentTarget);break}}}function nr(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let{interactionState:t}=gn();switch(t.state){case`active`:P({cursorFlags:0,interactionState:{state:`inactive`}}),t.hitRegions.length>0&&(Qn(e.currentTarget),P(e=>({mountedGroups:new Map(e.mountedGroups)})),e.preventDefault())}}function rr(e){let t=0,n=0,r={};for(let i of e)if(i.defaultSize!==void 0){t++;let e=dn(i.defaultSize);n+=e,r[i.panelId]=e}else r[i.panelId]=void 0;let i=e.length-t;if(i!==0){let t=dn((100-n)/i);for(let n of e)n.defaultSize===void 0&&(r[n.panelId]=t)}return r}function ir(e,t,n){if(!n[0])return;let r=e.panels.find(e=>e.element===t);if(!r||!r.onResize)return;let i=Xt({group:e}),a=e.orientation===`horizontal`?r.element.offsetWidth:r.element.offsetHeight,o=r.mutableValues.prevSize,s={asPercentage:dn(a/i*100),inPixels:a};r.mutableValues.prevSize=s,r.onResize(s,r.id,o)}function ar(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function or(e,t){let n=e.map(e=>e.id),r=Object.keys(t);if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}var sr=new Map;function cr(e){let t=!0;M(e.element.ownerDocument.defaultView,`Cannot register an unmounted Group`);let n=e.element.ownerDocument.defaultView.ResizeObserver,r=new Set,i=new Set,a=new n(n=>{for(let r of n){let{borderBoxSize:n,target:i}=r;if(i===e.element){if(t){if(Xt({group:e})===0)return;P(t=>{let n=t.mountedGroups.get(e);if(n){let r=fn(e),i=n.defaultLayoutDeferred?rr(r):n.layout,a=F({layout:i,panelConstraints:r});return!n.defaultLayoutDeferred&&Sn(i,a)&&ar(n.derivedPanelConstraints,r)?t:{mountedGroups:new Map(t.mountedGroups).set(e,{defaultLayoutDeferred:!1,derivedPanelConstraints:r,layout:a,separatorToPanels:n.separatorToPanels})}}return t})}}else ir(e,i,n)}});a.observe(e.element),e.panels.forEach(e=>{M(!r.has(e.id),`Panel ids must be unique; id "${e.id}" was used more than once`),r.add(e.id),e.onResize&&a.observe(e.element)});let o=Xt({group:e}),s=fn(e),c=e.panels.map(({id:e})=>e).join(`,`),l=e.defaultLayout;l&&(or(e.panels,l)||(l=void 0));let u=F({layout:e.inMemoryLayouts[c]??l??rr(s),panelConstraints:s}),d=rn(e),f=e.element.ownerDocument;return P(t=>{let n=new Map;return sr.set(f,(sr.get(f)??0)+1),d.forEach(e=>{e.separator&&n.set(e.separator,e.panels)}),{mountedGroups:new Map(t.mountedGroups).set(e,{defaultLayoutDeferred:o===0,derivedPanelConstraints:s,layout:u,separatorToPanels:n})}}),e.separators.forEach(e=>{M(!i.has(e.id),`Separator ids must be unique; id "${e.id}" was used more than once`),i.add(e.id),e.element.addEventListener(`keydown`,En)}),sr.get(f)===1&&(f.addEventListener(`pointerdown`,Yn,!0),f.addEventListener(`pointerleave`,er),f.addEventListener(`pointermove`,tr),f.addEventListener(`pointerup`,nr,!0)),function(){t=!1,sr.set(f,Math.max(0,(sr.get(f)??0)-1)),P(t=>{let n=new Map(t.mountedGroups);return n.delete(e),{mountedGroups:n}}),e.separators.forEach(e=>{e.element.removeEventListener(`keydown`,En)}),sr.get(f)||(f.removeEventListener(`pointerdown`,Yn,!0),f.removeEventListener(`pointerleave`,er),f.removeEventListener(`pointermove`,tr),f.removeEventListener(`pointerup`,nr,!0)),a.disconnect()}}function lr(){let[e,t]=(0,l.useState)({});return[e,(0,l.useCallback)(()=>t({}),[])]}function ur(e){let t=(0,l.useId)();return`${e??t}`}var dr=typeof window<`u`?l.useLayoutEffect:l.useEffect;function fr(e){let t=(0,l.useRef)(e);return dr(()=>{t.current=e},[e]),(0,l.useCallback)((...e)=>t.current?.(...e),[t])}function pr(...e){return fr(t=>{e.forEach(e=>{if(e)switch(typeof e){case`function`:e(t);break;case`object`:e.current=t;break}})})}function mr(e){let t=(0,l.useRef)({...e});return dr(()=>{for(let n in e)t.current[n]=e[n]},[e]),t.current}var hr=(0,l.createContext)(null);function gr(e,t){let n=(0,l.useRef)({getLayout:()=>({}),setLayout:Dn});(0,l.useImperativeHandle)(t,()=>n.current,[]),dr(()=>{Object.assign(n.current,Cn({groupId:e}))})}function _r({children:e,className:t,defaultLayout:n,disableCursor:r,disabled:i,elementRef:a,groupRef:o,id:s,onLayoutChange:c,onLayoutChanged:u,orientation:d=`horizontal`,style:f,...p}){let m=(0,l.useRef)({onLayoutChange:{},onLayoutChanged:{}}),h=fr(e=>{Sn(m.current.onLayoutChange,e)||(m.current.onLayoutChange=e,c?.(e))}),g=fr(e=>{Sn(m.current.onLayoutChanged,e)||(m.current.onLayoutChanged=e,u?.(e))}),_=ur(s),v=(0,l.useRef)(null),[y,b]=lr(),x=(0,l.useRef)({lastExpandedPanelSizes:{},layouts:{},panels:[],separators:[]}),S=pr(v,a);gr(_,o);let C=fr((e,t)=>{let{interactionState:r,mountedGroups:i}=gn();for(let n of i.keys())if(n.id===e){let e=i.get(n);if(e){let i=!1;switch(r.state){case`active`:i=r.hitRegions.some(e=>e.group===n);break}return{flexGrow:e.layout[t]??1,pointerEvents:i?`none`:void 0}}}return{flexGrow:n?.[t]??1}}),w=(0,l.useMemo)(()=>({getPanelStyles:C,id:_,orientation:d,registerPanel:e=>{let t=x.current;return t.panels=Zt(d,[...t.panels,e]),b(),()=>{t.panels=t.panels.filter(t=>t!==e),b()}},registerSeparator:e=>{let t=x.current;return t.separators=Zt(d,[...t.separators,e]),b(),()=>{t.separators=t.separators.filter(t=>t!==e),b()}}}),[C,_,b,d]),ee=mr({defaultLayout:n,disableCursor:r}),T=(0,l.useRef)(null);return dr(()=>{let e=v.current;if(e===null)return;let t=x.current,n={defaultLayout:ee.defaultLayout,disableCursor:!!ee.disableCursor,disabled:!!i,element:e,id:_,inMemoryLastExpandedPanelSizes:x.current.lastExpandedPanelSizes,inMemoryLayouts:x.current.layouts,orientation:d,panels:t.panels,separators:t.separators};T.current=n;let r=cr(n),a=gn().mountedGroups.get(n);if(a){let{defaultLayoutDeferred:e,derivedPanelConstraints:n,layout:r}=a;!e&&n.length>0&&(h(r),g(r),t.panels.forEach(e=>{e.scheduleUpdate()}))}let o=hn.addListener(`interactionStateChange`,()=>{t.panels.forEach(e=>{e.scheduleUpdate()})}),s=hn.addListener(`mountedGroupsChange`,e=>{let r=e.get(n);if(r){let{defaultLayoutDeferred:e,derivedPanelConstraints:n,layout:i}=r;if(e||n.length===0)return;let{interactionState:a}=gn(),o=a.state!==`active`;h(i),o&&g(i),t.panels.forEach(e=>{e.scheduleUpdate()})}});return()=>{T.current=null,r(),o(),s()}},[i,_,g,h,d,y,ee]),(0,l.useEffect)(()=>{let e=T.current;e&&(e.defaultLayout=n,e.disableCursor=!!r)}),(0,j.jsx)(hr.Provider,{value:w,children:(0,j.jsx)(`div`,{...p,"aria-orientation":d,className:t,"data-group":!0,"data-testid":_,id:_,ref:S,style:{height:`100%`,width:`100%`,overflow:`hidden`,...f,display:`flex`,flexDirection:d===`horizontal`?`row`:`column`,flexWrap:`nowrap`},children:e})})}_r.displayName=`Group`;function vr(){let e=(0,l.useContext)(hr);return M(e,`Group Context not found; did you render a Panel or Separator outside of a Group?`),e}function yr({groupId:e,panelId:t}){let n=()=>{let{mountedGroups:t}=gn();for(let[n,{defaultLayoutDeferred:r,derivedPanelConstraints:i,layout:a,separatorToPanels:o}]of t)if(n.id===e)return{defaultLayoutDeferred:r,derivedPanelConstraints:i,group:n,layout:a,separatorToPanels:o};throw Error(`Group ${e} not found`)},r=()=>{let e=n().derivedPanelConstraints.find(e=>e.panelId===t);if(e!==void 0)return e;throw Error(`Panel constraints not found for Panel ${t}`)},i=()=>{let e=n().group.panels.find(e=>e.id===t);if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},a=()=>{let e=n().layout[t];if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},o=e=>{let r=a();if(e===r)return;let{defaultLayoutDeferred:i,derivedPanelConstraints:o,group:s,layout:c,separatorToPanels:l}=n(),u=s.panels.findIndex(e=>e.id===t),d=u===s.panels.length-1,f=F({layout:bn({delta:d?r-e:e-r,initialLayout:c,panelConstraints:o,pivotIndices:d?[u-1,u]:[u,u+1],prevLayout:c,trigger:`imperative-api`}),panelConstraints:o});Sn(c,f)||P(e=>({mountedGroups:new Map(e.mountedGroups).set(s,{defaultLayoutDeferred:i,derivedPanelConstraints:o,layout:f,separatorToPanels:l})}))};return{collapse:()=>{let{collapsible:e,collapsedSize:t}=r(),{mutableValues:n}=i(),s=a();e&&s!==t&&(n.expandToSize=s,o(t))},expand:()=>{let{collapsible:e,collapsedSize:t,minSize:n}=r(),{mutableValues:s}=i(),c=a();if(e&&c===t){let e=s.expandToSize??n;e===0&&(e=1),o(e)}},getSize:()=>{let{group:e}=n(),t=a(),{element:r}=i();return{asPercentage:t,inPixels:e.orientation===`horizontal`?r.offsetWidth:r.offsetHeight}},isCollapsed:()=>{let{collapsible:e,collapsedSize:t}=r(),n=a();return e&&mn(t,n)},resize:e=>{if(a()!==e){let t;switch(typeof e){case`number`:{let{group:r}=n();t=dn(e/Xt({group:r})*100);break}case`string`:t=parseFloat(e);break}o(t)}}}}function br(e,t){let{id:n}=vr(),r=(0,l.useRef)({collapse:On,expand:On,getSize:()=>({asPercentage:0,inPixels:0}),isCollapsed:()=>!1,resize:On});(0,l.useImperativeHandle)(t,()=>r.current,[]),dr(()=>{Object.assign(r.current,yr({groupId:n,panelId:e}))})}function xr({children:e,className:t,collapsedSize:n=`0%`,collapsible:r=!1,defaultSize:i,elementRef:a,id:o,maxSize:s=`100%`,minSize:c=`0%`,onResize:u,panelRef:d,style:f,...p}){let m=!!o,h=ur(o),g=(0,l.useRef)(null),_=pr(g,a),[,v]=lr(),{getPanelStyles:y,id:b,registerPanel:x}=vr(),S=u!==null,C=fr((e,t,n)=>{u?.(e,o,n)});dr(()=>{let e=g.current;if(e!==null)return x({element:e,id:h,idIsStable:m,mutableValues:{expandToSize:void 0,prevSize:void 0},onResize:S?C:void 0,panelConstraints:{collapsedSize:n,collapsible:r,defaultSize:i,maxSize:s,minSize:c},scheduleUpdate:v})},[n,r,i,v,S,h,m,s,c,C,x]),br(h,d);let w=y(b,h);return(0,j.jsx)(`div`,{...p,"data-panel":!0,"data-testid":h,id:h,ref:_,style:{...Sr,flexBasis:0,flexShrink:1,overflow:`hidden`,...w},children:(0,j.jsx)(`div`,{className:t,style:{width:`100%`,height:`100%`,...f},children:e})})}xr.displayName=`Panel`;var Sr={minHeight:0,maxHeight:`100%`,height:`auto`,minWidth:0,maxWidth:`100%`,width:`auto`,border:`none`,borderWidth:0,padding:0,margin:0};function Cr({layout:e,panelConstraints:t,panelId:n,panelIndex:r}){let i,a,o=e[n],s=t.find(e=>e.panelId===n);if(s){let c=s.maxSize,l=a=s.collapsible?s.collapsedSize:s.minSize,u=[r,r+1];a=F({layout:bn({delta:l-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e,trigger:`keyboard`}),panelConstraints:t})[n],i=F({layout:bn({delta:c-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e,trigger:`keyboard`}),panelConstraints:t})[n]}return{valueControls:n,valueMax:i,valueMin:a,valueNow:o}}function wr({children:e,className:t,elementRef:n,id:r,style:i,...a}){let o=ur(r),[s,c]=(0,l.useState)({}),[u,d]=(0,l.useState)(`inactive`),f=(0,l.useRef)(null),p=pr(f,n),{id:m,orientation:h,registerSeparator:g}=vr(),_=h===`horizontal`?`vertical`:`horizontal`;return dr(()=>{let e=f.current;if(e!==null){let t={element:e,id:o},n=g(t),r=hn.addListener(`interactionStateChange`,e=>{d(e.state!==`inactive`&&e.hitRegions.some(e=>e.separator===t)?e.state:`inactive`)}),i=hn.addListener(`mountedGroupsChange`,e=>{e.forEach(({derivedPanelConstraints:e,layout:n,separatorToPanels:r},i)=>{if(i.id===m){let a=r.get(t);if(a){let t=a[0],r=i.panels.indexOf(t);c(Cr({layout:n,panelConstraints:e,panelId:t.id,panelIndex:r}))}}})});return()=>{r(),i(),n()}}},[m,o,g]),(0,j.jsx)(`div`,{...a,"aria-controls":s.valueControls,"aria-orientation":_,"aria-valuemax":s.valueMax,"aria-valuemin":s.valueMin,"aria-valuenow":s.valueNow,children:e,className:t,"data-separator":u,"data-testid":o,id:o,ref:p,role:`separator`,style:{flexBasis:`auto`,...i,flexGrow:0,flexShrink:0},tabIndex:0})}wr.displayName=`Separator`;function Tr(){let[e,t]=(0,l.useState)([{id:`main`,name:`main.ts`,content:`// Welcome to FlashTS!
|
|
20
20
|
console.log("Hello from main.ts");
|
|
21
|
-
`}]),[n,r]=(0,l.useState)(`main`),[i,a]=(0,l.useState)(null),[o,s]=(0,l.useState)(!1),[c,u]=(0,l.useState)(!1),[d,f]=(0,l.useState)({}),[p,m]=(0,l.useState)(()=>{let e=localStorage.getItem(`flashts_show_welcome`);return e===null?!0:e===`true`}),[h,g]=(0,l.useState)(p),_=(0,l.useMemo)(()=>e.find(e=>e.id===n)||e[0],[e,n]),v=async()=>{try{f(await(await fetch(`/dependencies`)).json())}catch(e){console.error(`Failed to fetch dependencies:`,e)}};(0,l.useEffect)(()=>{
|
|
21
|
+
`}]),[n,r]=(0,l.useState)(`main`),[i,a]=(0,l.useState)(null),[o,s]=(0,l.useState)(!1),[c,u]=(0,l.useState)(!1),[d,f]=(0,l.useState)({}),[p,m]=(0,l.useState)(()=>{let e=localStorage.getItem(`flashts_show_welcome`);return e===null?!0:e===`true`}),[h,g]=(0,l.useState)(p),_=(0,l.useMemo)(()=>e.find(e=>e.id===n)||e[0],[e,n]),v=(0,l.useCallback)(async()=>{s(!0);try{let t={files:e.reduce((e,t)=>({...e,[t.name]:t.content}),{}),entryPoint:_.name};console.log(`🚀 Executing:`,t.entryPoint),a(await(await fetch(`/execute`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)})).json())}catch(e){a({stdout:``,stderr:`Failed to connect to server: `+String(e),exitCode:1})}finally{s(!1)}},[e,_]),y=(0,l.useCallback)(e=>{let n=crypto.randomUUID(),i={id:n,name:e,content:``};t(e=>[...e,i]),r(n)},[]),b=(0,l.useCallback)(e=>{t(t=>{if(t.length===1)return t;let i=t.filter(t=>t.id!==e);return n===e&&r(i[i.length-1].id),i})},[n]),x=(0,l.useCallback)((e,n)=>{t(t=>t.map(t=>t.id===e?{...t,name:n}:t))},[]),S=(0,l.useCallback)(e=>{t(t=>t.map(t=>t.id===n?{...t,content:e||``}:t))},[n]),C=(0,l.useCallback)(async()=>{try{f(await(await fetch(`/dependencies`)).json())}catch(e){console.error(`Failed to fetch dependencies:`,e)}},[]);return(0,l.useEffect)(()=>{C();let e=setTimeout(C,1500);return()=>clearTimeout(e)},[C]),(0,l.useEffect)(()=>{let e=()=>u(window.innerWidth<768);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),(0,l.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.shiftKey&&(e.key===`F`||e.key===`f`)&&(e.preventDefault(),v())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[v]),(0,j.jsxs)(`div`,{className:`h-screen w-screen flex flex-col bg-bg-primary text-text-primary overflow-hidden`,children:[(0,j.jsxs)(`header`,{className:`h-14 border-b border-border-color flex items-center justify-between px-4 md:px-6 bg-bg-secondary/50 glass z-50 shrink-0`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,j.jsx)(zt,{size:20}),(0,j.jsx)(`h1`,{className:`font-bold text-lg tracking-tight bg-gradient-to-r from-yellow-100 to-orange-100 bg-clip-text text-transparent hidden md:block`,children:`FlashTS`})]}),(0,j.jsxs)(`div`,{className:`flex items-center gap-2 md:gap-4 h-full`,children:[(0,j.jsxs)(`button`,{onClick:()=>g(!0),className:`hidden sm:flex items-center gap-2 px-3 py-1.5 hover:bg-white/10 rounded-lg text-text-secondary hover:text-white transition-all active:scale-95 outline-none font-medium`,title:`How it works`,children:[(0,j.jsx)(ee,{size:18}),(0,j.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-wider`,children:`How it works`})]}),(0,j.jsx)(`div`,{className:`h-4 w-px bg-border-color hidden sm:block mx-1`}),(0,j.jsx)(Ht,{dependencies:d,onRefresh:C}),(0,j.jsxs)(`button`,{onClick:v,disabled:o,className:Ft(`btn-primary ml-1`,o&&`opacity-75 cursor-wait`),title:`Run Active File (Ctrl + Shift + F)`,children:[o?(0,j.jsx)(`div`,{className:`animate-spin h-4 w-4 border-2 border-white/50 border-t-white rounded-full`}):(0,j.jsx)(D,{size:18,fill:`currentColor`}),`Run`]})]})]}),(0,j.jsx)(Kt,{isOpen:h,onClose:()=>g(!1),showOnStartup:p,onToggleStartup:e=>{m(e),localStorage.setItem(`flashts_show_welcome`,String(e))}}),(0,j.jsx)(`main`,{className:`flex-1 relative overflow-hidden`,children:(0,j.jsxs)(_r,{orientation:c?`vertical`:`horizontal`,children:[(0,j.jsxs)(xr,{defaultSize:60,minSize:20,className:`flex flex-col min-h-0`,children:[(0,j.jsx)(`div`,{className:`panel-header shrink-0 !h-auto !p-0`,children:(0,j.jsx)(Wt,{files:e,activeFileId:n,onSelect:r,onAdd:y,onClose:b,onRename:x})}),(0,j.jsx)(`div`,{className:`flex-1 relative min-h-0`,children:(0,j.jsx)(Lt,{code:_.content,fileName:_.name,files:e,onChange:S,dependencies:d})})]}),(0,j.jsx)(wr,{className:`w-2 h-2 md:w-1 md:h-auto bg-bg-primary hover:bg-accent-primary transition-colors flex-center z-10 touch-none`,children:(0,j.jsx)(`div`,{className:`w-8 h-1 md:w-1 md:h-8 bg-border-color rounded-full opacity-50`})}),(0,j.jsxs)(xr,{defaultSize:40,minSize:20,className:`flex flex-col min-h-0`,children:[(0,j.jsxs)(`div`,{className:`panel-header shrink-0`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,j.jsx)(ie,{size:16}),`Console`]}),(0,j.jsxs)(`div`,{className:`flex items-center gap-2`,children:[i&&(0,j.jsxs)(`span`,{className:`text-xs text-text-secondary mr-2`,children:[`Exit: `,i.exitCode]}),(0,j.jsx)(`button`,{onClick:()=>a(null),disabled:!i,className:`p-1 hover:bg-white/10 rounded text-text-secondary hover:text-white disabled:opacity-30 disabled:hover:bg-transparent`,title:`Clear Console`,children:(0,j.jsx)(ae,{size:14})})]})]}),(0,j.jsx)(`div`,{className:`flex-1 bg-[#0c0c0e] relative min-h-0 overflow-hidden`,children:(0,j.jsx)(Rt,{output:i,isLoading:o})})]})]})})]})}var Er=Tr;(0,c.createRoot)(document.getElementById(`root`)).render((0,j.jsx)(l.StrictMode,{children:(0,j.jsx)(Er,{})}));
|
package/client/dist/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>FlashTS Playground</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-Brg0Cnup.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/assets/index-BAlIRq-u.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|