@hienlh/ppm 0.18.13 → 0.18.14
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 +5 -0
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/cli-reference.md +4 -4
- package/assets/skills/ppm/references/http-api.md +1 -1
- package/dist/web/assets/{adaptive-context-menu-CbgPYQmj.js → adaptive-context-menu-DCZtgOL7.js} +1 -1
- package/dist/web/assets/{ai-resource-editor-unM2HNmg.js → ai-resource-editor-D5CPBg06.js} +1 -1
- package/dist/web/assets/{ai-settings-section-CdktdrwF.js → ai-settings-section-DY-t1bK8.js} +1 -1
- package/dist/web/assets/{angular-html-DcpbdcNG.js → angular-html-CTvM4ulF.js} +1 -1
- package/dist/web/assets/{angular-ts-Bv_WIk34.js → angular-ts-B_vSkjco.js} +1 -1
- package/dist/web/assets/{api-settings-DfXViPKz.js → api-settings-DRF9oYkn.js} +1 -1
- package/dist/web/assets/{apl-D5_lLszu.js → apl-DywzTry0.js} +1 -1
- package/dist/web/assets/architecture-PBZL5I3N-nw5-j_I_.js +1 -0
- package/dist/web/assets/{astro-CBHwddYL.js → astro-1JaRgaSb.js} +1 -1
- package/dist/web/assets/{audio-preview-BD1iDovf.js → audio-preview-DAuGvOiK.js} +1 -1
- package/dist/web/assets/{blade-DGe1d2Pq.js → blade-CDeeJWBb.js} +1 -1
- package/dist/web/assets/{bsl-2lyAzRJA.js → bsl-BfgoPVYR.js} +1 -1
- package/dist/web/assets/{cairo-DjzZeJrq.js → cairo-C26gNwWW.js} +1 -1
- package/dist/web/assets/chat-tab-IcnU3nqQ.js +15 -0
- package/dist/web/assets/{cobol-cC3XIuAJ.js → cobol-D92nBnON.js} +1 -1
- package/dist/web/assets/code-editor-Dno5Srkm.js +10 -0
- package/dist/web/assets/{coffee-4eGboVoU.js → coffee-CIWH40R1.js} +1 -1
- package/dist/web/assets/{conflict-editor-DdJag4QK.js → conflict-editor-CDp0I3mD.js} +1 -1
- package/dist/web/assets/{cpp-DF9_G-OU.js → cpp-DOrBqXCn.js} +1 -1
- package/dist/web/assets/{crystal-OavZlzcm.js → crystal-BNKqmHux.js} +1 -1
- package/dist/web/assets/{csv-preview-DnXwouF3.js → csv-preview-D4svNDAq.js} +1 -1
- package/dist/web/assets/{data-grid-overlay-editor-B9Gpjm3l.js → data-grid-overlay-editor-BqV0AxZg.js} +1 -1
- package/dist/web/assets/{database-viewer-Dk8oGyZx.js → database-viewer-BCvv_Bwf.js} +1 -1
- package/dist/web/assets/{dialog-B-l2ZxVm.js → dialog-DcLGDwaX.js} +1 -1
- package/dist/web/assets/diff-viewer-D41fCFAi.js +4 -0
- package/dist/web/assets/{edge-TzYh8OlN.js → edge-Dbjp42Pt.js} +1 -1
- package/dist/web/assets/{edit-diff-preview-DlwP3UIU.js → edit-diff-preview-BqcUuFCc.js} +1 -1
- package/dist/web/assets/{elixir-Cy3RhKKH.js → elixir-na3b1pYy.js} +1 -1
- package/dist/web/assets/{elm-BTBZdweK.js → elm-_Nalil1R.js} +1 -1
- package/dist/web/assets/{erb-dv1mI0y4.js → erb-CW_7dubf.js} +1 -1
- package/dist/web/assets/{erlang-DjeiDrkl.js → erlang-DmZ7Zzb0.js} +1 -1
- package/dist/web/assets/{esm-FRwvcesu.js → esm-CwyBetO1.js} +1 -1
- package/dist/web/assets/{explorer-body-DkCkSVrN.js → explorer-body-DB1L30pa.js} +2 -2
- package/dist/web/assets/explorer-window-content-Cwlt3C3I.js +1 -0
- package/dist/web/assets/{fortran-fixed-form-BCH9DAIJ.js → fortran-fixed-form-DB2A8L4-.js} +1 -1
- package/dist/web/assets/{fsharp-C93NYKYD.js → fsharp-BYHrti7z.js} +1 -1
- package/dist/web/assets/{gdresource-BcIEE2eX.js → gdresource-D5GBin40.js} +1 -1
- package/dist/web/assets/{git-commit-BVjlXEy8.js → git-commit-CUiOBoIL.js} +1 -1
- package/dist/web/assets/{git-log-panel-2_4HuP47.js → git-log-panel-C1QDkmgl.js} +1 -1
- package/dist/web/assets/{git-rebase-Bj_21B1V.js → git-rebase-DOxGnpdw.js} +1 -1
- package/dist/web/assets/gitGraph-HDMCJU4V-C1xf87gN.js +1 -0
- package/dist/web/assets/{glide-data-grid-B0IY6n_Q.js → glide-data-grid-Dz8lx6n2.js} +4 -4
- package/dist/web/assets/{glimmer-js-C20yj4Zv.js → glimmer-js-Begy4UT7.js} +1 -1
- package/dist/web/assets/{glimmer-ts-ipbYC7kh.js → glimmer-ts-rPApRY8N.js} +1 -1
- package/dist/web/assets/{glsl-Dovazu3t.js → glsl-wrbPvrBL.js} +1 -1
- package/dist/web/assets/{graphql-DpMlM7hC.js → graphql-Cu4-NR__.js} +1 -1
- package/dist/web/assets/group-chat-tab-DFwr-pig.js +1 -0
- package/dist/web/assets/{hack-gc7LCBuV.js → hack-Ddo93XKD.js} +1 -1
- package/dist/web/assets/{haml-vtlFm9gm.js → haml-BFX_1i8j.js} +1 -1
- package/dist/web/assets/{handlebars-DGKhpCji.js → handlebars-5gFKA4H5.js} +1 -1
- package/dist/web/assets/{html-DvfhQbXb.js → html-C06I-zeO.js} +1 -1
- package/dist/web/assets/{html-derivative-C3oTSSCN.js → html-derivative-e5JLAFZF.js} +1 -1
- package/dist/web/assets/{http-SG6zLTo7.js → http-CrAAhSU7.js} +1 -1
- package/dist/web/assets/{hurl-BWXsYlqW.js → hurl-T1V3SX9T.js} +1 -1
- package/dist/web/assets/{hxml-DUdMzaoh.js → hxml-B056LLKN.js} +1 -1
- package/dist/web/assets/{image-preview-DxgFOV1T.js → image-preview-DWyuCYT3.js} +1 -1
- package/dist/web/assets/index-oUKV5nIA.js +52 -0
- package/dist/web/assets/info-3K5VOQVL-C2z7FTDe.js +1 -0
- package/dist/web/assets/{jinja-955w9RKM.js → jinja-DGdtRh43.js} +1 -1
- package/dist/web/assets/{jison-WWfqPo50.js → jison-Ah6QobPS.js} +1 -1
- package/dist/web/assets/{julia-BFrfnaNl.js → julia-BJeGOK0K.js} +1 -1
- package/dist/web/assets/{just-BrZdyR_I.js → just-iw9oRs7j.js} +1 -1
- package/dist/web/assets/{latex-CwtPPASD.js → latex-DHjj5hyN.js} +1 -1
- package/dist/web/assets/{liquid-CYZuvDDd.js → liquid-B-FFecDc.js} +1 -1
- package/dist/web/assets/{lua-BV095ZyY.js → lua-DDianJp_.js} +1 -1
- package/dist/web/assets/{markdown-renderer-CnRcKK3d.js → markdown-renderer-BHiUhQN8.js} +3 -3
- package/dist/web/assets/{markdown-renderer-BTS8ifdu.js → markdown-renderer-CnE36_gd.js} +1 -1
- package/dist/web/assets/{marko-CNeljZ1C.js → marko-BW5SBVng.js} +1 -1
- package/dist/web/assets/{mdc-JfGapShy.js → mdc-B9gL9bjl.js} +1 -1
- package/dist/web/assets/mobile-explorer-sheet-BzjlS1Xn.js +1 -0
- package/dist/web/assets/{nextflow-DD5C8nqX.js → nextflow-dTluY6qy.js} +1 -1
- package/dist/web/assets/{nginx-Ca7B__x_.js → nginx-DlwghGI-.js} +1 -1
- package/dist/web/assets/{nim-B8FogsDw.js → nim-N9jddb5D.js} +1 -1
- package/dist/web/assets/{notification-store-Yvy1I8gd.js → notification-store-C7UBqxYP.js} +1 -1
- package/dist/web/assets/{number-overlay-editor-DG9xJwEG.js → number-overlay-editor-BVXM7aAs.js} +1 -1
- package/dist/web/assets/{overview-panel-s53bnl0q.js → overview-panel-DCCDmtCQ.js} +1 -1
- package/dist/web/assets/packet-RMMSAZCW-DQUxN0wU.js +1 -0
- package/dist/web/assets/{perl-BR78hS8R.js → perl-CkmpYKa_.js} +1 -1
- package/dist/web/assets/{php-DXBOMC9z.js → php-BwZ3KDPo.js} +1 -1
- package/dist/web/assets/pie-UPGHQEXC-BOr9ek4Q.js +1 -0
- package/dist/web/assets/{postgres-viewer-BvoWSuoZ.js → postgres-viewer--CRN1fvO.js} +3 -3
- package/dist/web/assets/{process-table-BYwKigiD.js → process-table-CXC10GSy.js} +1 -1
- package/dist/web/assets/{pug-CvTwVVKV.js → pug-B3rBPqQo.js} +1 -1
- package/dist/web/assets/{qml-CPSoZ1-B.js → qml-BfDbWFmg.js} +1 -1
- package/dist/web/assets/radar-KQ55EAFF-DSErxZFb.js +1 -0
- package/dist/web/assets/{razor-BUA1YKtF.js → razor-B1ww1r38.js} +1 -1
- package/dist/web/assets/{rst-BJsq7ISz.js → rst-C0MSq6m-.js} +1 -1
- package/dist/web/assets/{ruby-DSDMeYf5.js → ruby-ClIZ1wb3.js} +1 -1
- package/dist/web/assets/{sas-B1nJOjbN.js → sas-DR0j3o4_.js} +1 -1
- package/dist/web/assets/{scss-BZFyRiQn.js → scss-Vh3JLayR.js} +1 -1
- package/dist/web/assets/{settings-store-GV5pkkke.js → settings-store-OLJE7dPH.js} +2 -2
- package/dist/web/assets/{settings-tab-BePvIcjd.js → settings-tab-B1rvHFc6.js} +1 -1
- package/dist/web/assets/settings-tab-BUlmPJ2w.js +1 -0
- package/dist/web/assets/{shaderlab-laINRXBo.js → shaderlab-0rHRnQ18.js} +1 -1
- package/dist/web/assets/{shellsession-BpOOvWVR.js → shellsession-Dxdw6D8c.js} +1 -1
- package/dist/web/assets/{soy-BW4d91Sa.js → soy-BHlSNj1y.js} +1 -1
- package/dist/web/assets/{sparql-BsvvyoHn.js → sparql-B2QaPpni.js} +1 -1
- package/dist/web/assets/{sql-query-editor-qQce5QJ6.js → sql-query-editor-R_iKjPP9.js} +1 -1
- package/dist/web/assets/{sqlite-viewer-yhc0YNvu.js → sqlite-viewer-b2onA0SP.js} +1 -1
- package/dist/web/assets/{stata-K-dZInUt.js → stata-CwIxjsEJ.js} +1 -1
- package/dist/web/assets/{surrealql-CpNp2sgf.js → surrealql-C6vo-rp-.js} +1 -1
- package/dist/web/assets/{svelte-BG6iBA8R.js → svelte-LLdJ6rlH.js} +1 -1
- package/dist/web/assets/system-monitor-body-DPYQlBEt.js +2 -0
- package/dist/web/assets/system-monitor-tab-CPQdWv27.js +1 -0
- package/dist/web/assets/{system-monitor-window-content-CaOhD0AU.js → system-monitor-window-content-BPif0azo.js} +1 -1
- package/dist/web/assets/tab-host-window-content-BnAN6m4K.js +1 -0
- package/dist/web/assets/team-member-sheet-Bu2wG1sm.js +2 -0
- package/dist/web/assets/{team-member-window-content-B1jkKkDi.js → team-member-window-content-BSyU-5Uc.js} +1 -1
- package/dist/web/assets/{templ-gxNKXmt3.js → templ-CJGvhEP5.js} +1 -1
- package/dist/web/assets/{terminal-tab-UvwM0sty.js → terminal-tab-Ncor0Rfu.js} +3 -3
- package/dist/web/assets/{tex-C0ON27g5.js → tex-psXWhc4t.js} +1 -1
- package/dist/web/assets/{tool-cards-jB7GT-wj.js → tool-cards-DdVP1wrD.js} +3 -3
- package/dist/web/assets/treemap-KZPCXAKY-C17p0LQw.js +1 -0
- package/dist/web/assets/{ts-tags-BX_CTVgQ.js → ts-tags-D5Ar_ZCO.js} +1 -1
- package/dist/web/assets/{twig-CwL7XnU0.js → twig-vJgGC-qY.js} +1 -1
- package/dist/web/assets/use-monaco-theme-BshnLXoY.js +1 -0
- package/dist/web/assets/{use-open-team-member-1hRsHLKg.js → use-open-team-member-CY3wOdWL.js} +1 -1
- package/dist/web/assets/{use-websocket-rxJLbFqy.js → use-websocket-B7xjNsyD.js} +1 -1
- package/dist/web/assets/{vendor-mermaid-CHTa6D69.js → vendor-mermaid-999ksD45.js} +1 -1
- package/dist/web/assets/{video-preview-DMhnf2Gi.js → video-preview-7F72sRwf.js} +1 -1
- package/dist/web/assets/{vue-Bykm6wSS.js → vue-BWngFyav.js} +1 -1
- package/dist/web/assets/{vue-html-CETdK_iV.js → vue-html-BN5ZLu-H.js} +1 -1
- package/dist/web/assets/{vue-vine-DiJb6fO5.js → vue-vine-BZHnO8yV.js} +1 -1
- package/dist/web/assets/window-pip-registry-BnYU83LE.js +1 -0
- package/dist/web/assets/{xml-BNw8J5YW.js → xml-DS2beZHp.js} +1 -1
- package/dist/web/assets/{xsl-CsG9L31b.js → xsl-Ciiku1Bq.js} +1 -1
- package/dist/web/index.html +19 -18
- package/dist/web/sw.js +1 -1
- package/docs/architecture/workspace-and-ui.md +8 -0
- package/docs/design-guidelines.md +3 -2
- package/package.json +1 -1
- package/src/services/edge-forwarder.ts +191 -191
- package/src/services/windows-process-tree.ts +351 -351
- package/src/web/components/floating-window/floating-window.tsx +8 -1
- package/src/web/components/floating-window/open-tab-in-pip.ts +78 -0
- package/src/web/components/floating-window/window-pip-registry.ts +46 -0
- package/src/web/components/layout/tab-pop-out-menu-item.tsx +25 -2
- package/dist/web/assets/architecture-PBZL5I3N-BzFm9ELu.js +0 -1
- package/dist/web/assets/chat-tab-DzK8LGti.js +0 -15
- package/dist/web/assets/code-editor-CuMfPN9X.js +0 -10
- package/dist/web/assets/diff-viewer-eaUBjLCH.js +0 -4
- package/dist/web/assets/explorer-window-content-MsnTVngu.js +0 -1
- package/dist/web/assets/gitGraph-HDMCJU4V-B72vcb2r.js +0 -1
- package/dist/web/assets/group-chat-tab-DRLDHOp6.js +0 -1
- package/dist/web/assets/index-CBn4SOoT.js +0 -52
- package/dist/web/assets/info-3K5VOQVL-3irPxRK_.js +0 -1
- package/dist/web/assets/mobile-explorer-sheet-BqK2-WuN.js +0 -1
- package/dist/web/assets/packet-RMMSAZCW-Z5jWjFCV.js +0 -1
- package/dist/web/assets/pie-UPGHQEXC-Bq7UMi8P.js +0 -1
- package/dist/web/assets/radar-KQ55EAFF-BLo4BOTD.js +0 -1
- package/dist/web/assets/settings-tab-Br-lJSPa.js +0 -1
- package/dist/web/assets/system-monitor-body-D8Z5QXBB.js +0 -2
- package/dist/web/assets/system-monitor-tab-BclYXFTe.js +0 -1
- package/dist/web/assets/tab-host-window-content-f_Rc5rJK.js +0 -1
- package/dist/web/assets/team-member-sheet-QDHoYCs0.js +0 -2
- package/dist/web/assets/treemap-KZPCXAKY-dyrE6SW2.js +0 -1
- package/dist/web/assets/use-monaco-theme--9tOOkDA.js +0 -1
- package/packages/vscode-compat/node_modules/.bin/tsc.bunx +0 -0
- package/packages/vscode-compat/node_modules/.bin/tsc.exe +0 -0
- package/packages/vscode-compat/node_modules/.bin/tsserver.bunx +0 -0
- package/packages/vscode-compat/node_modules/.bin/tsserver.exe +0 -0
- /package/dist/web/assets/{abap-DGlrX_8G.js → abap-CjzrhAS2.js} +0 -0
- /package/dist/web/assets/{actionscript-3-CUqRtUJE.js → actionscript-3-B59Kbl-9.js} +0 -0
- /package/dist/web/assets/{ada-CY3Spa33.js → ada-B7gItKAE.js} +0 -0
- /package/dist/web/assets/{andromeeda-Lxs2TJn7.js → andromeeda-Dy5zcy0Q.js} +0 -0
- /package/dist/web/assets/{apache-DfxgGdgM.js → apache-B6T9jrc0.js} +0 -0
- /package/dist/web/assets/{apex-QVDF1dnI.js → apex-CTsIxDQw.js} +0 -0
- /package/dist/web/assets/{api-settings-BdCtex9i.js → api-settings-B2iNXQ0c.js} +0 -0
- /package/dist/web/assets/{api-themes-pRRoLvgD.js → api-themes-DrWnJbhs.js} +0 -0
- /package/dist/web/assets/{applescript-pwJ8QXh-.js → applescript-DuycKmmb.js} +0 -0
- /package/dist/web/assets/{apply-theme-B_bMVL6a.js → apply-theme-r8tKDrCR.js} +0 -0
- /package/dist/web/assets/{ara-mPjeX5YX.js → ara-CISL3599.js} +0 -0
- /package/dist/web/assets/{asciidoc-Bf7LsDkI.js → asciidoc-BXyE2Lpr.js} +0 -0
- /package/dist/web/assets/{asm-rRKC1OUx.js → asm-y258phtP.js} +0 -0
- /package/dist/web/assets/{aurora-x-DwQr0DkG.js → aurora-x-Dq3Jc78M.js} +0 -0
- /package/dist/web/assets/{awk-Bpt768fN.js → awk-DxL6XSJv.js} +0 -0
- /package/dist/web/assets/{ayu-dark-D9lwQHMs.js → ayu-dark-DjoK6Evo.js} +0 -0
- /package/dist/web/assets/{ayu-light-B4-ptrU5.js → ayu-light-CKKXBLMI.js} +0 -0
- /package/dist/web/assets/{ayu-mirage-DAyRzH5Q.js → ayu-mirage-DGXSrrXB.js} +0 -0
- /package/dist/web/assets/{ballerina-Cgdpj1HC.js → ballerina-DZSXFmUf.js} +0 -0
- /package/dist/web/assets/{bat-4FrN36S2.js → bat-BNsZk6nY.js} +0 -0
- /package/dist/web/assets/{beancount-DkcxQER3.js → beancount-cPl4gJct.js} +0 -0
- /package/dist/web/assets/{berry-Dnuut-Ml.js → berry-DGAodERk.js} +0 -0
- /package/dist/web/assets/{bibtex-CCDwmbuA.js → bibtex-DftVoRif.js} +0 -0
- /package/dist/web/assets/{bicep-BC0ryoGM.js → bicep-Suioyyzh.js} +0 -0
- /package/dist/web/assets/{bird2-C50V_A-0.js → bird2-DjU24I2P.js} +0 -0
- /package/dist/web/assets/{button-2WCAS8dI.js → button-tNy0ba3y.js} +0 -0
- /package/dist/web/assets/{c-Ddorhq0U.js → c-DFi8Y_nN.js} +0 -0
- /package/dist/web/assets/{c3-DdIf5r9E.js → c3-1eSHnH5V.js} +0 -0
- /package/dist/web/assets/{cadence-s9pd1Wng.js → cadence-DLLsFwQP.js} +0 -0
- /package/dist/web/assets/{can-open-in-ppm-C6hZV1OP.js → can-open-in-ppm-in727eFQ.js} +0 -0
- /package/dist/web/assets/{catppuccin-frappe-CzJNTyu-.js → catppuccin-frappe-DDj0JEiY.js} +0 -0
- /package/dist/web/assets/{catppuccin-latte-BNpt-m7s.js → catppuccin-latte-DPyANHyR.js} +0 -0
- /package/dist/web/assets/{catppuccin-macchiato-FYGkfsJ5.js → catppuccin-macchiato-CO-h8VTT.js} +0 -0
- /package/dist/web/assets/{catppuccin-mocha-it2g5D1q.js → catppuccin-mocha-BCmbN2IZ.js} +0 -0
- /package/dist/web/assets/{clarity-BVFBTjMe.js → clarity-C0pYsZjs.js} +0 -0
- /package/dist/web/assets/{clipboard-BWznymz7.js → clipboard-DBLGKMrH.js} +0 -0
- /package/dist/web/assets/{clojure-BSYvXMI8.js → clojure-JFr6s8iZ.js} +0 -0
- /package/dist/web/assets/{cmake-DGEqH-Np.js → cmake-EEcLEgVy.js} +0 -0
- /package/dist/web/assets/{codeowners-D8FCOxWg.js → codeowners-Deh3Lx0u.js} +0 -0
- /package/dist/web/assets/{codeql-COV0eluG.js → codeql-C317igT5.js} +0 -0
- /package/dist/web/assets/{common-lisp-xHnZUlgt.js → common-lisp-DepbATZs.js} +0 -0
- /package/dist/web/assets/{coq-Cs_2i3Xg.js → coq-MxgxU5ya.js} +0 -0
- /package/dist/web/assets/{csharp-B1ONB4PT.js → csharp-eEFXdsAq.js} +0 -0
- /package/dist/web/assets/{css-BgGQbvrZ.js → css-Db-syWW9.js} +0 -0
- /package/dist/web/assets/{csv-CNHmQBzs.js → csv-DHeYcbaq.js} +0 -0
- /package/dist/web/assets/{csv-parser-DWR24J17.js → csv-parser-_JWMLGl3.js} +0 -0
- /package/dist/web/assets/{cue-ZXAKzwIy.js → cue-BmUNowrt.js} +0 -0
- /package/dist/web/assets/{cypher-4PL5bmT5.js → cypher-XjXHgCNS.js} +0 -0
- /package/dist/web/assets/{d-CEsV3RT2.js → d-BWJnZtig.js} +0 -0
- /package/dist/web/assets/{dark-plus-NtFnYSDz.js → dark-plus-Db7umas1.js} +0 -0
- /package/dist/web/assets/{dart-CKHn4mDf.js → dart-DSI4HYh1.js} +0 -0
- /package/dist/web/assets/{data-grid-types-CxU8oo-j.js → data-grid-types-CfVHh9gv.js} +0 -0
- /package/dist/web/assets/{dax-Cmkj1I_M.js → dax-yw1JsAni.js} +0 -0
- /package/dist/web/assets/{desktop-DJLalvPQ.js → desktop-C2QO4RvD.js} +0 -0
- /package/dist/web/assets/{diff-BnS2wpj6.js → diff-Drt8aEyp.js} +0 -0
- /package/dist/web/assets/{dist-uYjs3Wv6.js → dist-DNRvhVdz.js} +0 -0
- /package/dist/web/assets/{dist-CuIdRyUB.js → dist-VBxOHLmN.js} +0 -0
- /package/dist/web/assets/{docker-CovNy7ml.js → docker-ByDKbmLl.js} +0 -0
- /package/dist/web/assets/{docx-preview-DAdHPlhZ.js → docx-preview-DfaQn9v7.js} +0 -0
- /package/dist/web/assets/{dotenv-Gh4w3I6B.js → dotenv-BkfOLytR.js} +0 -0
- /package/dist/web/assets/{dracula-NF0tAHXl.js → dracula-DAmrm-Un.js} +0 -0
- /package/dist/web/assets/{dracula-soft-Cj_qBurK.js → dracula-soft-BUOEnKqR.js} +0 -0
- /package/dist/web/assets/{dream-maker-CRuZPcl7.js → dream-maker-DQBIfSiO.js} +0 -0
- /package/dist/web/assets/{emacs-lisp-BACmC9qj.js → emacs-lisp-Blh5kBD3.js} +0 -0
- /package/dist/web/assets/{everforest-dark-Dd9av4QG.js → everforest-dark-CEzhDxHq.js} +0 -0
- /package/dist/web/assets/{everforest-light-C-jsss-B.js → everforest-light-CPk_5Khm.js} +0 -0
- /package/dist/web/assets/{extension-webview-W0qRfaAU.js → extension-webview-BW_mccb3.js} +0 -0
- /package/dist/web/assets/{fennel-BJA9XnL8.js → fennel-B1MT_EBZ.js} +0 -0
- /package/dist/web/assets/{fish-CKlhNSc2.js → fish-C_HGcewt.js} +0 -0
- /package/dist/web/assets/{fluent-wfglRk5D.js → fluent-Dp1Iclmx.js} +0 -0
- /package/dist/web/assets/{format-bytes-utwHMTry.js → format-bytes-53WBtyi2.js} +0 -0
- /package/dist/web/assets/{fortran-free-form-BlXCdid3.js → fortran-free-form-B_-UA4XC.js} +0 -0
- /package/dist/web/assets/{gdscript-BwAVG6Et.js → gdscript-Bm_JpjS_.js} +0 -0
- /package/dist/web/assets/{gdshader-DPc_T7ib.js → gdshader-C_PNmfYU.js} +0 -0
- /package/dist/web/assets/{genie-B-zZSLCX.js → genie-B5rmR2TF.js} +0 -0
- /package/dist/web/assets/{gherkin-CJ0ajpGs.js → gherkin-BTJ34TJ9.js} +0 -0
- /package/dist/web/assets/{github-dark-Dz8ZkzSP.js → github-dark-DOkNVj9H.js} +0 -0
- /package/dist/web/assets/{github-dark-default-CNUYo_kp.js → github-dark-default-DTsmiyVo.js} +0 -0
- /package/dist/web/assets/{github-dark-dimmed-241z_Ycx.js → github-dark-dimmed-CjbxAe9s.js} +0 -0
- /package/dist/web/assets/{github-dark-high-contrast-7r6yZZYH.js → github-dark-high-contrast-r_M8F_k7.js} +0 -0
- /package/dist/web/assets/{github-light-C8gmZn-D.js → github-light-BzfxyMyb.js} +0 -0
- /package/dist/web/assets/{github-light-default-GAEgq1eA.js → github-light-default-BOqiBIy5.js} +0 -0
- /package/dist/web/assets/{github-light-high-contrast-3z91352E.js → github-light-high-contrast-DQzBrDM4.js} +0 -0
- /package/dist/web/assets/{gleam-C7vxW5zd.js → gleam-BWmuAtD8.js} +0 -0
- /package/dist/web/assets/{gn-CyJIXwHP.js → gn-CNQPjiZW.js} +0 -0
- /package/dist/web/assets/{gnuplot-CqLbGgPd.js → gnuplot-BlHjcPMe.js} +0 -0
- /package/dist/web/assets/{go-DdDcK9aX.js → go-Bn8Ba9uz.js} +0 -0
- /package/dist/web/assets/{groovy-UYHggEqH.js → groovy-C1Y1_F4V.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-hard-B4ierkJn.js → gruvbox-dark-hard-DueOsHav.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-medium-DYwkDSZ6.js → gruvbox-dark-medium-DaQjD538.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-soft-CVL4P-Lz.js → gruvbox-dark-soft-CbbX2WOm.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-hard-BJ0LewUZ.js → gruvbox-light-hard-E2M70ljZ.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-medium-CaqqjeGJ.js → gruvbox-light-medium-B_DDLY6h.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-soft-ByKMoVNr.js → gruvbox-light-soft-2SZmyC1F.js} +0 -0
- /package/dist/web/assets/{haskell-BilYRVPp.js → haskell-D8DeoXtG.js} +0 -0
- /package/dist/web/assets/{haxe-Brs9Bj1s.js → haxe-BmZm7B0W.js} +0 -0
- /package/dist/web/assets/{hcl-ClrZpol-.js → hcl-CKnBM3ng.js} +0 -0
- /package/dist/web/assets/{hjson-9PvHnYMX.js → hjson-Ct9t4-ci.js} +0 -0
- /package/dist/web/assets/{hlsl-BbBk4vqV.js → hlsl-BZSASBqS.js} +0 -0
- /package/dist/web/assets/{horizon-E5Py0cny.js → horizon-CzX1AZ08.js} +0 -0
- /package/dist/web/assets/{horizon-bright-DVCsNGEk.js → horizon-bright-CCVNeRIP.js} +0 -0
- /package/dist/web/assets/{houston-JdFEax9Y.js → houston-DBlJN7xc.js} +0 -0
- /package/dist/web/assets/{hy-W_W3tLKT.js → hy-Dyc6h6Xb.js} +0 -0
- /package/dist/web/assets/{image-gallery-5IURd6db.js → image-gallery-DujlrjOC.js} +0 -0
- /package/dist/web/assets/{imba-CfAqJz7T.js → imba-Bauru7s2.js} +0 -0
- /package/dist/web/assets/{ini-C_3gvKWs.js → ini-SjdwtaTp.js} +0 -0
- /package/dist/web/assets/{input-DuAF-Stj.js → input-DouJ9Zvt.js} +0 -0
- /package/dist/web/assets/{java-CKqtXZ-j.js → java-D2r0ocpf.js} +0 -0
- /package/dist/web/assets/{javascript-C7gSEfae.js → javascript-y-lof7iP.js} +0 -0
- /package/dist/web/assets/{json-BoN6e11T.js → json-DO4LSx5A.js} +0 -0
- /package/dist/web/assets/{json5-CgE7C8HW.js → json5-BEwWf-W3.js} +0 -0
- /package/dist/web/assets/{jsonc-DjyoattY.js → jsonc-OBEFv7gP.js} +0 -0
- /package/dist/web/assets/{jsonl-lI82wGSw.js → jsonl-DOyW4Mg3.js} +0 -0
- /package/dist/web/assets/{jsonnet-CszEI8va.js → jsonnet-BL5R2CpP.js} +0 -0
- /package/dist/web/assets/{jssm-CZXDlszb.js → jssm-ksPusAyg.js} +0 -0
- /package/dist/web/assets/{jsx-BeRz0eEz.js → jsx-B6XEu6O-.js} +0 -0
- /package/dist/web/assets/{kanagawa-dragon-BOmnUiyd.js → kanagawa-dragon-JBVe_ji_.js} +0 -0
- /package/dist/web/assets/{kanagawa-lotus-ffU_P5w-.js → kanagawa-lotus-ChprO68_.js} +0 -0
- /package/dist/web/assets/{kanagawa-wave-DKTJZrMu.js → kanagawa-wave-D_uB_R0Q.js} +0 -0
- /package/dist/web/assets/{kdl-BWECJveH.js → kdl-pf5B8N_m.js} +0 -0
- /package/dist/web/assets/{kotlin-DpVwBCSt.js → kotlin-BdF0METC.js} +0 -0
- /package/dist/web/assets/{kusto-BgVqjUZA.js → kusto-BneVP-OU.js} +0 -0
- /package/dist/web/assets/{laserwave-CEVCi8em.js → laserwave-C4-UPIyG.js} +0 -0
- /package/dist/web/assets/{lean-CGyfRhLJ.js → lean-BN6Jdymq.js} +0 -0
- /package/dist/web/assets/{less-B0_H10Ku.js → less-Cx-fdlDC.js} +0 -0
- /package/dist/web/assets/{lib-hrC3bruJ.js → lib-CMuBa85c.js} +0 -0
- /package/dist/web/assets/{libesm-DVpFmwJu.js → libesm-BB74PRsH.js} +0 -0
- /package/dist/web/assets/{light-plus-DqzMqPID.js → light-plus-DFnnn_iL.js} +0 -0
- /package/dist/web/assets/{llvm-9ucnfNiF.js → llvm-BGxtW0Nw.js} +0 -0
- /package/dist/web/assets/{log-m6A2dOSj.js → log-kQb4eJnj.js} +0 -0
- /package/dist/web/assets/{logo-ByPcsC9P.js → logo-DqAzaq7s.js} +0 -0
- /package/dist/web/assets/{luau-DFCo8nBn.js → luau-Dc2cp-zS.js} +0 -0
- /package/dist/web/assets/{make-C90w3MeA.js → make-DYg9dwaJ.js} +0 -0
- /package/dist/web/assets/{markdown-DT0uywZG.js → markdown-O4EPpS3K.js} +0 -0
- /package/dist/web/assets/{material-theme-BVUO93tJ.js → material-theme-ClP8yfQ2.js} +0 -0
- /package/dist/web/assets/{material-theme-darker-xXgGDwnF.js → material-theme-darker-LOK55hGu.js} +0 -0
- /package/dist/web/assets/{material-theme-lighter-BjStPzWB.js → material-theme-lighter-j72tzZqi.js} +0 -0
- /package/dist/web/assets/{material-theme-ocean-wFmSiKjy.js → material-theme-ocean-C19LKClA.js} +0 -0
- /package/dist/web/assets/{material-theme-palenight-e-0CtRoe.js → material-theme-palenight-DJ5tN2ax.js} +0 -0
- /package/dist/web/assets/{matlab-BNaNQAUH.js → matlab-DQNZ_NU8.js} +0 -0
- /package/dist/web/assets/{mdx-DfpVWAqO.js → mdx-CJayB7XK.js} +0 -0
- /package/dist/web/assets/{media-url-Bm4PsduE.js → media-url-DUK-k0bB.js} +0 -0
- /package/dist/web/assets/{mermaid-Bpq7wFCP.js → mermaid-Cb0TRX92.js} +0 -0
- /package/dist/web/assets/{min-dark-CL2Y0WH6.js → min-dark-CWM8Bo-m.js} +0 -0
- /package/dist/web/assets/{min-light-DOgr_IdP.js → min-light-BBR1sjS2.js} +0 -0
- /package/dist/web/assets/{mipsasm-C9ie2zlB.js → mipsasm-Jc7u7YSS.js} +0 -0
- /package/dist/web/assets/{mobile-bottom-sheet-M5iZDX7y.js → mobile-bottom-sheet-CJ7ApOkI.js} +0 -0
- /package/dist/web/assets/{mojo-Md2A2sJy.js → mojo-CTB0cutd.js} +0 -0
- /package/dist/web/assets/{monokai-nbXIEySB.js → monokai-CvM_YNKx.js} +0 -0
- /package/dist/web/assets/{moonbit-CJ-T-s4A.js → moonbit-CbFEfYYM.js} +0 -0
- /package/dist/web/assets/{move-DwEehLIK.js → move-BT38p0kT.js} +0 -0
- /package/dist/web/assets/{narrat-CuF4sIKr.js → narrat-55QZ_kOG.js} +0 -0
- /package/dist/web/assets/{nextflow-groovy-1dYhfPfq.js → nextflow-groovy-Bg8peyqg.js} +0 -0
- /package/dist/web/assets/{night-owl-gZS5mfzY.js → night-owl-DzS77iPK.js} +0 -0
- /package/dist/web/assets/{night-owl-light-DDAster5.js → night-owl-light-DER7fGnx.js} +0 -0
- /package/dist/web/assets/{nix-BlbEYs2c.js → nix-BSI8YesN.js} +0 -0
- /package/dist/web/assets/{nord-BRiPb8Vy.js → nord-9bn7iNWo.js} +0 -0
- /package/dist/web/assets/{nushell-DgWicB1i.js → nushell-qDVZn_lw.js} +0 -0
- /package/dist/web/assets/{objective-c-D8mPZ42Y.js → objective-c-Blf-ATos.js} +0 -0
- /package/dist/web/assets/{objective-cpp-B0pNXzuj.js → objective-cpp-Bz8bAq47.js} +0 -0
- /package/dist/web/assets/{ocaml-lQd7aK5d.js → ocaml-B9heAsc3.js} +0 -0
- /package/dist/web/assets/{odin-CxtIOBjm.js → odin-BaFYnOwO.js} +0 -0
- /package/dist/web/assets/{one-dark-pro-T_UFnWfe.js → one-dark-pro-D6B_hSe-.js} +0 -0
- /package/dist/web/assets/{one-light-LBVqwyV-.js → one-light-Ba-f0wyk.js} +0 -0
- /package/dist/web/assets/{openscad-C5dnS6J7.js → openscad-UvYyL2MK.js} +0 -0
- /package/dist/web/assets/{pascal-CmWCWQML.js → pascal-B4-qvEoG.js} +0 -0
- /package/dist/web/assets/{pdf-preview-DYt3aBzM.js → pdf-preview-D7yLmAZW.js} +0 -0
- /package/dist/web/assets/{pkl-BWWOtDQk.js → pkl-B146nqGx.js} +0 -0
- /package/dist/web/assets/{plastic-ekhupckF.js → plastic-L38t-Id3.js} +0 -0
- /package/dist/web/assets/{plsql-BPsDHXx4.js → plsql-ItOG5Cca.js} +0 -0
- /package/dist/web/assets/{po-BX2FiuW2.js → po-imiCTaNX.js} +0 -0
- /package/dist/web/assets/{poimandres-DzXOdZcN.js → poimandres-Bu6sIba9.js} +0 -0
- /package/dist/web/assets/{polar-DDRXgJzG.js → polar-CTeGoFxV.js} +0 -0
- /package/dist/web/assets/{postcss-BHW6XBhx.js → postcss-jvFe6GNE.js} +0 -0
- /package/dist/web/assets/{powerquery-B89c2NBb.js → powerquery-D9Dw1hJp.js} +0 -0
- /package/dist/web/assets/{powershell-Dvxrd3Tu.js → powershell-CZqvYQtg.js} +0 -0
- /package/dist/web/assets/{prisma-lMK8EFLU.js → prisma-B4D2nO_7.js} +0 -0
- /package/dist/web/assets/{prolog-D0YrtMG4.js → prolog-CQbyUcCF.js} +0 -0
- /package/dist/web/assets/{proto-J0mM25aw.js → proto-Cwpo0cW1.js} +0 -0
- /package/dist/web/assets/{puppet-CUT0xkhh.js → puppet-CKxCwBod.js} +0 -0
- /package/dist/web/assets/{purescript-CoJWSGRp.js → purescript-B-MyXMMp.js} +0 -0
- /package/dist/web/assets/{python-BBrmuz6P.js → python-D6QbSR2S.js} +0 -0
- /package/dist/web/assets/{qmldir-CUtzs4Q7.js → qmldir-BpTSVcw_.js} +0 -0
- /package/dist/web/assets/{qss-Dm1RZ8aL.js → qss-DBc4gbpe.js} +0 -0
- /package/dist/web/assets/{r-BGP7qZTe.js → r-i9jMMi0s.js} +0 -0
- /package/dist/web/assets/{racket-K_6U1lqJ.js → racket-BWNaxU7C.js} +0 -0
- /package/dist/web/assets/{raku-bNSiZeW_.js → raku-fqTZLn7L.js} +0 -0
- /package/dist/web/assets/{red-uVeIEF0f.js → red-D-JEcuzA.js} +0 -0
- /package/dist/web/assets/{reg-DSm9GWjh.js → reg-BbirlU1S.js} +0 -0
- /package/dist/web/assets/{regexp-CljRm_j_.js → regexp-D8VTFrtg.js} +0 -0
- /package/dist/web/assets/{rel-d3JcopZg.js → rel-ByQGKiNM.js} +0 -0
- /package/dist/web/assets/{resolve-theme-DLKmm-lE.js → resolve-theme-Cqb9zWYc.js} +0 -0
- /package/dist/web/assets/{riscv-CJmaELjT.js → riscv-B5nqCfLE.js} +0 -0
- /package/dist/web/assets/{ron-D0g9B1rW.js → ron-DOVh_iZR.js} +0 -0
- /package/dist/web/assets/{rose-pine-dawn-CzZQ-LCF.js → rose-pine-dawn-B7hkmmWy.js} +0 -0
- /package/dist/web/assets/{rose-pine-DOrD2BSH.js → rose-pine-jp51ZUzi.js} +0 -0
- /package/dist/web/assets/{rose-pine-moon-CdmsYp7C.js → rose-pine-moon-Ff063yLj.js} +0 -0
- /package/dist/web/assets/{rosmsg-CmDth6pO.js → rosmsg-Cyk7Il8z.js} +0 -0
- /package/dist/web/assets/{run-in-terminal-C9xpskFn.js → run-in-terminal-4efbW2Xv.js} +0 -0
- /package/dist/web/assets/{rust-DGdP6jiR.js → rust-DRNM5epF.js} +0 -0
- /package/dist/web/assets/{sass-Dkgt2FKZ.js → sass-D_cB0-M1.js} +0 -0
- /package/dist/web/assets/{scala-BQLTON6C.js → scala-Crl-1kKS.js} +0 -0
- /package/dist/web/assets/{scheme-DKlxUGCi.js → scheme-DCaWyEJ0.js} +0 -0
- /package/dist/web/assets/{scroll-area-DBcG1fQo.js → scroll-area-ZP8wcwTI.js} +0 -0
- /package/dist/web/assets/{sdbl-C3iZJQeZ.js → sdbl-BbXNqwtX.js} +0 -0
- /package/dist/web/assets/{send-to-chat-BIg70MUZ.js → send-to-chat-BNrEpAyC.js} +0 -0
- /package/dist/web/assets/{shallow-jwPzEunk.js → shallow-4zAfs2KW.js} +0 -0
- /package/dist/web/assets/{shellscript-BRu-ZQAx.js → shellscript-BAgksBhW.js} +0 -0
- /package/dist/web/assets/{slack-dark-qkm_u2zz.js → slack-dark-GB-ElUW_.js} +0 -0
- /package/dist/web/assets/{slack-ochin-BP8_8e4m.js → slack-ochin-tU6CFD3S.js} +0 -0
- /package/dist/web/assets/{smalltalk-Bnz4gt07.js → smalltalk-DSVGUbtL.js} +0 -0
- /package/dist/web/assets/{snazzy-light-fbPZg5io.js → snazzy-light-DZhi3PoS.js} +0 -0
- /package/dist/web/assets/{solarized-dark-CM0vTRoi.js → solarized-dark-D6AMCco7.js} +0 -0
- /package/dist/web/assets/{solarized-light-C4_W9mvs.js → solarized-light-DepuTWSE.js} +0 -0
- /package/dist/web/assets/{solidity-Bz6v1PoD.js → solidity-CsxN618l.js} +0 -0
- /package/dist/web/assets/{splunk-DyNxu-0i.js → splunk-CF1m0Kkv.js} +0 -0
- /package/dist/web/assets/{sql-DXRL1gw1.js → sql-DvyMDgrB.js} +0 -0
- /package/dist/web/assets/{ssh-config-2z1QHuOG.js → ssh-config-a8sDo-Q8.js} +0 -0
- /package/dist/web/assets/{stylus-D4I-VaeY.js → stylus-DCJ-6AjT.js} +0 -0
- /package/dist/web/assets/{swift-C_2G-tIc.js → swift-c-ZFxyPP.js} +0 -0
- /package/dist/web/assets/{switch-_NcrktLe.js → switch-DV-BDjyk.js} +0 -0
- /package/dist/web/assets/{synthwave-84-osBjChRP.js → synthwave-84-9NPgBcuv.js} +0 -0
- /package/dist/web/assets/{system-verilog-zQP2qPNU.js → system-verilog-DPD02IOo.js} +0 -0
- /package/dist/web/assets/{systemd-UGfjRSBM.js → systemd-BUr5HRtU.js} +0 -0
- /package/dist/web/assets/{talonscript-C1XrFPwo.js → talonscript-BNBQV5YJ.js} +0 -0
- /package/dist/web/assets/{tasl-B5raVn43.js → tasl-BETjpSyu.js} +0 -0
- /package/dist/web/assets/{tcl-3-vbeMIc.js → tcl-Clp_AZiC.js} +0 -0
- /package/dist/web/assets/{terraform-a8VXZDm9.js → terraform-B0kZ0lim.js} +0 -0
- /package/dist/web/assets/{tokyo-night-4SRhf-Hz.js → tokyo-night-oOJ0a7Dk.js} +0 -0
- /package/dist/web/assets/{toml-B4N0i8wT.js → toml-DOPCSumy.js} +0 -0
- /package/dist/web/assets/{tsv-DA5k9Lvw.js → tsv-D6qUGf84.js} +0 -0
- /package/dist/web/assets/{tsx-D9SZ8owC.js → tsx-B6qYhT6O.js} +0 -0
- /package/dist/web/assets/{turtle-BTHTvyY_.js → turtle-C0Rjzw73.js} +0 -0
- /package/dist/web/assets/{typescript-DYzV9p5L.js → typescript-BiydShEu.js} +0 -0
- /package/dist/web/assets/{typespec-BC15eh7F.js → typespec-DjmF6Aww.js} +0 -0
- /package/dist/web/assets/{typst-BJUqzA6D.js → typst-CPuscfcL.js} +0 -0
- /package/dist/web/assets/{use-blob-url-DcRcjNTE.js → use-blob-url-BOVGWg9F.js} +0 -0
- /package/dist/web/assets/{use-is-mobile-DFWViA4S.js → use-is-mobile-b94q8RvF.js} +0 -0
- /package/dist/web/assets/{v-50Lps6oA.js → v-DE4vpLLQ.js} +0 -0
- /package/dist/web/assets/{vala-8wiUvvrD.js → vala-CmUF2pS5.js} +0 -0
- /package/dist/web/assets/{vb-BlgPLt6B.js → vb-BvcRoX4b.js} +0 -0
- /package/dist/web/assets/{vendor-xterm-BZOrwF_F.js → vendor-xterm-K8kpLxdb.js} +0 -0
- /package/dist/web/assets/{verilog-CD9pVW5p.js → verilog-BGIzyH3R.js} +0 -0
- /package/dist/web/assets/{vesper-BrivW4PT.js → vesper-CG7IrHQQ.js} +0 -0
- /package/dist/web/assets/{vhdl-Bunxfa7N.js → vhdl-DMSumomw.js} +0 -0
- /package/dist/web/assets/{viml-DndUb2qM.js → viml-Drt7AEmU.js} +0 -0
- /package/dist/web/assets/{vitesse-black-BurZSkxW.js → vitesse-black-DmsjfN0b.js} +0 -0
- /package/dist/web/assets/{vitesse-dark-8UShspzC.js → vitesse-dark-Dl55_WeJ.js} +0 -0
- /package/dist/web/assets/{vitesse-light-DghCAZ90.js → vitesse-light-Crbv9aGg.js} +0 -0
- /package/dist/web/assets/{vyper-b-Clr-8u.js → vyper-CB7psEJj.js} +0 -0
- /package/dist/web/assets/{wasm-C5v2T06Y.js → wasm-BY1tuM5m.js} +0 -0
- /package/dist/web/assets/{wasm-CpcKStkw.js → wasm-Dck8KPgP.js} +0 -0
- /package/dist/web/assets/{wenyan-Dz2srLZR.js → wenyan-DhewQ68b.js} +0 -0
- /package/dist/web/assets/{wgsl-CeD1-dRb.js → wgsl-DlmiP456.js} +0 -0
- /package/dist/web/assets/{wikitext-CyeS-9FH.js → wikitext-cQCnqNgE.js} +0 -0
- /package/dist/web/assets/{wit-Kr-q-qBQ.js → wit-S5MaCngB.js} +0 -0
- /package/dist/web/assets/{wolfram-BKm8bmln.js → wolfram-Bh8n_9zr.js} +0 -0
- /package/dist/web/assets/{yaml-2XSxomjM.js → yaml-BoK_17l9.js} +0 -0
- /package/dist/web/assets/{zenscript-CKIS34vf.js → zenscript-DB3ZFwNJ.js} +0 -0
- /package/dist/web/assets/{zig-DdHGNllX.js → zig-Bv1BWmfT.js} +0 -0
|
@@ -19,6 +19,7 @@ import { PortalContainerProvider } from "@/components/ui/portal-container-contex
|
|
|
19
19
|
import { TITLEBAR_HEIGHT } from "./window-chrome-contract";
|
|
20
20
|
import { useWindowBodyElement } from "./use-window-body-element";
|
|
21
21
|
import { WindowPipPlaceholder } from "./window-pip-placeholder";
|
|
22
|
+
import { isPipOnlyWindow } from "./window-pip-registry";
|
|
22
23
|
import { WindowSkinChrome } from "./window-skin-chrome";
|
|
23
24
|
import { windowZIndex, type Bounds, type Rect } from "./window-geometry";
|
|
24
25
|
import { useWindowStore, type WindowRuntimeState } from "./window-store";
|
|
@@ -120,6 +121,8 @@ export function FloatingWindow({
|
|
|
120
121
|
movable: !maximized,
|
|
121
122
|
});
|
|
122
123
|
|
|
124
|
+
const hiddenHost = Boolean(pip) && isPipOnlyWindow(win.id);
|
|
125
|
+
|
|
123
126
|
return (
|
|
124
127
|
<div
|
|
125
128
|
ref={rootRef}
|
|
@@ -135,6 +138,10 @@ export function FloatingWindow({
|
|
|
135
138
|
focused ? "shadow-2xl shadow-black/40" : "shadow-lg shadow-black/20",
|
|
136
139
|
// Transitions are for maximize/restore only; during a gesture they would lag the pointer.
|
|
137
140
|
gesturing ? "transition-none" : "transition-[transform,width,height] duration-150 motion-reduce:transition-none",
|
|
141
|
+
// A window opened only to carry a tab into PiP is never shown: the user asked for a
|
|
142
|
+
// PiP, not a window. `hidden` and not an unmount — the body must stay connected, or
|
|
143
|
+
// the PiP host has nowhere to put the tab back.
|
|
144
|
+
hiddenHost && "hidden",
|
|
138
145
|
)}
|
|
139
146
|
>
|
|
140
147
|
<WindowSkinChrome
|
|
@@ -158,7 +165,7 @@ export function FloatingWindow({
|
|
|
158
165
|
onClose={close}
|
|
159
166
|
/>
|
|
160
167
|
|
|
161
|
-
{pip && <WindowPipPlaceholder pip={pip} minimized={minimized} />}
|
|
168
|
+
{pip && !hiddenHost && <WindowPipPlaceholder pip={pip} minimized={minimized} />}
|
|
162
169
|
|
|
163
170
|
{!maximized && !minimized && (
|
|
164
171
|
<WindowResizeHandles bind={(handle) => bindResize(handle) as Record<string, unknown>} />
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Send a tab straight into picture-in-picture, without the user ever seeing a window.
|
|
3
|
+
*
|
|
4
|
+
* A PiP window can only adopt an element that is already in the page, and it needs somewhere
|
|
5
|
+
* to put it back. The floating window is that element and that home — so one still opens
|
|
6
|
+
* here, it is simply never shown: the frame keeps a pip-only window off screen, and closing
|
|
7
|
+
* PiP closes it, which re-docks the tab into the panel it came from.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { usePanelStore } from "@/stores/panel-store";
|
|
11
|
+
import { focusPipDocument } from "./pip/pip-focus-target";
|
|
12
|
+
import { attachPipHost } from "./pip/pip-host";
|
|
13
|
+
import { TITLEBAR_HEIGHT } from "./window-chrome-contract";
|
|
14
|
+
import {
|
|
15
|
+
clearPipOnlyWindow,
|
|
16
|
+
markPipOnlyWindow,
|
|
17
|
+
setWindowPip,
|
|
18
|
+
whenWindowSlot,
|
|
19
|
+
} from "./window-pip-registry";
|
|
20
|
+
import { useWindowStore } from "./window-store";
|
|
21
|
+
|
|
22
|
+
export type OpenTabInPipResult = "opened" | "window-cap" | "cancelled";
|
|
23
|
+
|
|
24
|
+
/** Drop the host window; its own teardown hands the tab back to the panel it came from. */
|
|
25
|
+
function discard(windowId: string): void {
|
|
26
|
+
clearPipOnlyWindow(windowId);
|
|
27
|
+
useWindowStore.getState().close(windowId);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Detach a tab into a hidden window and adopt it into a PiP window.
|
|
32
|
+
*
|
|
33
|
+
* Rejects when the browser refuses the request (no support, or the click's activation was
|
|
34
|
+
* already spent); the caller reports that. Call it from a click handler with nothing awaited
|
|
35
|
+
* before it — the one await inside is a React commit, which leaves the activation valid.
|
|
36
|
+
*/
|
|
37
|
+
export async function openTabInPip(tabId: string, panelId: string): Promise<OpenTabInPipResult> {
|
|
38
|
+
const windowId = usePanelStore.getState().popOutTab(tabId, panelId);
|
|
39
|
+
if (!windowId) return "window-cap";
|
|
40
|
+
markPipOnlyWindow(windowId);
|
|
41
|
+
|
|
42
|
+
// The window exists in the store, but its body is created by the frame's layout effect —
|
|
43
|
+
// one commit away.
|
|
44
|
+
const slot = await whenWindowSlot(windowId);
|
|
45
|
+
if (!slot) {
|
|
46
|
+
discard(windowId);
|
|
47
|
+
return "cancelled";
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const rect = useWindowStore.getState().windows[windowId]?.rect;
|
|
51
|
+
let handle;
|
|
52
|
+
try {
|
|
53
|
+
handle = await attachPipHost(slot, {
|
|
54
|
+
// A zero falls through to the host's minimum size rather than a magic default.
|
|
55
|
+
width: rect?.w ?? 0,
|
|
56
|
+
height: rect ? rect.h - TITLEBAR_HEIGHT : 0,
|
|
57
|
+
onDetach: () => {
|
|
58
|
+
setWindowPip(windowId, null);
|
|
59
|
+
// Closing PiP means "done with this tab out here", not "give me a window instead":
|
|
60
|
+
// the tab goes back to its strip.
|
|
61
|
+
discard(windowId);
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
} catch (err) {
|
|
65
|
+
discard(windowId);
|
|
66
|
+
throw err;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Null means the window went away while the request was in flight; the host already
|
|
70
|
+
// restored what it had and called onDetach.
|
|
71
|
+
if (!handle) return "cancelled";
|
|
72
|
+
|
|
73
|
+
setWindowPip(windowId, handle);
|
|
74
|
+
// A DOM move carries no focus with it: without this the tab is visible in PiP but swallows
|
|
75
|
+
// nothing until the user clicks it.
|
|
76
|
+
focusPipDocument(handle.pipWindow.document);
|
|
77
|
+
return "opened";
|
|
78
|
+
}
|
|
@@ -24,6 +24,52 @@ const listeners = new Set<() => void>();
|
|
|
24
24
|
export function publishWindowSlot(windowId: string, el: HTMLElement | null): void {
|
|
25
25
|
if (el) slots.set(windowId, el);
|
|
26
26
|
else slots.delete(windowId);
|
|
27
|
+
for (const notify of listeners) notify();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Resolve once a window has published its body, or `null` if it never does.
|
|
32
|
+
*
|
|
33
|
+
* A window opened to host a picture-in-picture request exists in the store before React has
|
|
34
|
+
* mounted its frame, so the element the PiP host needs does not exist yet in the click
|
|
35
|
+
* handler that created it. Waiting is safe: transient activation survives a commit, it is
|
|
36
|
+
* consuming it twice that the browser refuses.
|
|
37
|
+
*/
|
|
38
|
+
export function whenWindowSlot(windowId: string, timeoutMs = 2000): Promise<HTMLElement | null> {
|
|
39
|
+
const existing = windowSlot(windowId);
|
|
40
|
+
if (existing) return Promise.resolve(existing);
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
const settle = (el: HTMLElement | null) => {
|
|
43
|
+
listeners.delete(check);
|
|
44
|
+
clearTimeout(timer);
|
|
45
|
+
resolve(el);
|
|
46
|
+
};
|
|
47
|
+
const check = () => {
|
|
48
|
+
const el = windowSlot(windowId);
|
|
49
|
+
if (el) settle(el);
|
|
50
|
+
};
|
|
51
|
+
const timer = setTimeout(() => settle(null), timeoutMs);
|
|
52
|
+
listeners.add(check);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Windows that exist only to carry a tab into picture-in-picture: the frame keeps them off
|
|
58
|
+
* screen while PiP is up, and closing PiP closes the window, so the tab goes straight back
|
|
59
|
+
* to its tab strip instead of stranding an empty window the user never asked for.
|
|
60
|
+
*/
|
|
61
|
+
const pipOnly = new Set<string>();
|
|
62
|
+
|
|
63
|
+
export function markPipOnlyWindow(windowId: string): void {
|
|
64
|
+
pipOnly.add(windowId);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function isPipOnlyWindow(windowId: string): boolean {
|
|
68
|
+
return pipOnly.has(windowId);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function clearPipOnlyWindow(windowId: string): void {
|
|
72
|
+
pipOnly.delete(windowId);
|
|
27
73
|
}
|
|
28
74
|
|
|
29
75
|
/** The body element of a mounted window, or null. */
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* "Open in window" — detaches a tab
|
|
2
|
+
* "Open in window" / "Open in picture-in-picture" — detaches a tab, keeping it live.
|
|
3
|
+
*
|
|
4
|
+
* The PiP route skips the window entirely from the user's point of view: a host window is
|
|
5
|
+
* opened and hidden, and closing PiP closes it, so the tab lands back in this strip.
|
|
3
6
|
*
|
|
4
7
|
* Desktop only: the window layer renders nothing below the md breakpoint, so on a phone
|
|
5
8
|
* the item would move a tab somewhere the user cannot see (a scaled-down window is never
|
|
6
9
|
* the answer — see the mobile-first UI rules).
|
|
7
10
|
*/
|
|
8
|
-
import { ExternalLink } from "lucide-react";
|
|
11
|
+
import { ExternalLink, PictureInPicture2 } from "lucide-react";
|
|
9
12
|
import { toast } from "sonner";
|
|
13
|
+
import { openTabInPip } from "@/components/floating-window/open-tab-in-pip";
|
|
14
|
+
import { isDocumentPipSupported } from "@/components/floating-window/pip/pip-support";
|
|
10
15
|
import { ContextMenuItem, ContextMenuSeparator } from "@/components/ui/context-menu";
|
|
11
16
|
import { useIsMobile } from "@/hooks/use-is-mobile";
|
|
12
17
|
import { usePanelStore } from "@/stores/panel-store";
|
|
@@ -36,6 +41,24 @@ export function TabPopOutMenuItem({ tab, panelId }: TabPopOutMenuItemProps) {
|
|
|
36
41
|
<ExternalLink className="size-3.5 mr-2" />
|
|
37
42
|
Open in window
|
|
38
43
|
</ContextMenuItem>
|
|
44
|
+
{isDocumentPipSupported() && (
|
|
45
|
+
<ContextMenuItem
|
|
46
|
+
onClick={() => {
|
|
47
|
+
// Nothing awaited before this call: it spends the click's activation on the PiP
|
|
48
|
+
// request, and the browser grants that only to a live gesture.
|
|
49
|
+
void openTabInPip(tab.id, panelId)
|
|
50
|
+
.then((result) => {
|
|
51
|
+
if (result === "window-cap") toast.error("Too many windows open — close one first");
|
|
52
|
+
})
|
|
53
|
+
.catch(() => {
|
|
54
|
+
toast.error("Could not open the picture-in-picture window");
|
|
55
|
+
});
|
|
56
|
+
}}
|
|
57
|
+
>
|
|
58
|
+
<PictureInPicture2 className="size-3.5 mr-2" />
|
|
59
|
+
Open in picture-in-picture
|
|
60
|
+
</ContextMenuItem>
|
|
61
|
+
)}
|
|
39
62
|
<ContextMenuSeparator />
|
|
40
63
|
</>
|
|
41
64
|
);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{K as e}from"./vendor-mermaid-CHTa6D69.js";export{e as createArchitectureServices};
|