@hienlh/ppm 0.17.57 → 0.18.0

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.
Files changed (580) hide show
  1. package/.release-run.sh +5 -0
  2. package/CHANGELOG.md +16 -0
  3. package/CLAUDE.md +4 -0
  4. package/assets/skills/ppm/SKILL.md +1 -1
  5. package/assets/skills/ppm/references/http-api.md +16 -2
  6. package/bun.lock +3 -0
  7. package/dist/web/assets/{ai-resource-editor-CXWQcx3_.js → ai-resource-editor-BLYgg033.js} +1 -1
  8. package/dist/web/assets/{angular-html-D4YJUMLP.js → angular-html-jfMqUuRd.js} +1 -1
  9. package/dist/web/assets/{angular-ts-CUvq2h3X.js → angular-ts-wytn9PMm.js} +1 -1
  10. package/dist/web/assets/{api-client-COQtP-dB.js → api-client-B9OFv3nY.js} +1 -1
  11. package/dist/web/assets/api-client-CKo60P6G.js +1 -0
  12. package/dist/web/assets/{api-settings-Do0Z0IRN.js → api-settings-DGhshDRg.js} +1 -1
  13. package/dist/web/assets/api-settings-fdkhqLSF.js +1 -0
  14. package/dist/web/assets/{api-themes-DXi8sz-9.js → api-themes-okiyhhp9.js} +1 -1
  15. package/dist/web/assets/{apl-DSANFLx0.js → apl-i-ahKx6O.js} +1 -1
  16. package/dist/web/assets/architecture-PBZL5I3N-B4J2-O8Q.js +1 -0
  17. package/dist/web/assets/{astro-CXIotiNS.js → astro-DVBCJfG6.js} +1 -1
  18. package/dist/web/assets/{audio-preview-D7jNc8mi.js → audio-preview-y8XpCNrh.js} +1 -1
  19. package/dist/web/assets/{blade-BvrP2gPd.js → blade-BHlL8SqU.js} +1 -1
  20. package/dist/web/assets/{bsl-CGf6Xuyu.js → bsl-D-UOfR1F.js} +1 -1
  21. package/dist/web/assets/{cairo-BboZ9qIf.js → cairo-Bn6rucli.js} +1 -1
  22. package/dist/web/assets/can-open-in-ppm-BzVXoV-d.js +1 -0
  23. package/dist/web/assets/chat-tab-BcR-3_6R.js +13 -0
  24. package/dist/web/assets/clock-B1CPBp2g.js +1 -0
  25. package/dist/web/assets/{cobol-D39V6ukp.js → cobol-Byn9FYKu.js} +1 -1
  26. package/dist/web/assets/code-editor-CJ8g7dqm.js +10 -0
  27. package/dist/web/assets/{coffee-DTtK7kKi.js → coffee-DjBl4gm-.js} +1 -1
  28. package/dist/web/assets/{conflict-editor-CpGcSopK.js → conflict-editor-BP7JFZzG.js} +3 -3
  29. package/dist/web/assets/context-menu-BSE5yuMG.js +1 -0
  30. package/dist/web/assets/copy-Su9m2utd.js +1 -0
  31. package/dist/web/assets/{cpp-CnU9hfBq.js → cpp-CKzic-3E.js} +1 -1
  32. package/dist/web/assets/{crystal-DMjCL--0.js → crystal-Bkg-Ly_g.js} +1 -1
  33. package/dist/web/assets/csv-preview-xAwUDNat.js +2 -0
  34. package/dist/web/assets/{data-grid-overlay-editor-Bdc80TJ1.js → data-grid-overlay-editor-DMTCHIG9.js} +1 -1
  35. package/dist/web/assets/{database-viewer-DTMmic31.js → database-viewer-BVLWYPa4.js} +1 -1
  36. package/dist/web/assets/dialog-D__LRQTn.js +1 -0
  37. package/dist/web/assets/diff-viewer-BheSOHfl.js +4 -0
  38. package/dist/web/assets/{docx-preview-CR2ZtvNP.js → docx-preview-CGlMqltP.js} +1 -1
  39. package/dist/web/assets/{edge-CTom35R_.js → edge-DVbZnd3Y.js} +1 -1
  40. package/dist/web/assets/{edit-diff-preview-D1TEK7Jz.js → edit-diff-preview-ClJAJwlL.js} +1 -1
  41. package/dist/web/assets/{elixir-BAX9HSOu.js → elixir-Dwi8Wu7W.js} +1 -1
  42. package/dist/web/assets/{elm-CpD28xsW.js → elm-DtIv-HXJ.js} +1 -1
  43. package/dist/web/assets/{erb-DHX2IIEs.js → erb-D3HEDz1x.js} +1 -1
  44. package/dist/web/assets/{erlang-B_etLcPG.js → erlang-2MjTCzGz.js} +1 -1
  45. package/dist/web/assets/{esm-PmlN1RTs.js → esm-BfqDE09P.js} +1 -1
  46. package/dist/web/assets/explorer-body-DE5339g9.js +2 -0
  47. package/dist/web/assets/explorer-window-content-BrTHAoXM.js +1 -0
  48. package/dist/web/assets/{extension-webview-BTCFWY2A.js → extension-webview-DRq1tWC1.js} +1 -1
  49. package/dist/web/assets/{fortran-fixed-form-CpR0cN7O.js → fortran-fixed-form-BLyAtyPM.js} +1 -1
  50. package/dist/web/assets/{fsharp-DxITxZW5.js → fsharp-Bxbn_gbr.js} +1 -1
  51. package/dist/web/assets/{gdresource-DJ7IvROZ.js → gdresource-sFMY4D2Q.js} +1 -1
  52. package/dist/web/assets/{git-commit-sQznNP43.js → git-commit-BzB9Lio5.js} +1 -1
  53. package/dist/web/assets/git-log-panel-pjyOjchU.js +1 -0
  54. package/dist/web/assets/{git-rebase-DkHvejAR.js → git-rebase-CKSVd848.js} +1 -1
  55. package/dist/web/assets/gitGraph-HDMCJU4V-CtQ3yXN-.js +1 -0
  56. package/dist/web/assets/{glide-data-grid-LinTYl0_.js → glide-data-grid-LX3N4SsJ.js} +9 -9
  57. package/dist/web/assets/{glimmer-js-BwJnDfL-.js → glimmer-js-BY8aExAJ.js} +1 -1
  58. package/dist/web/assets/{glimmer-ts-Coz155XK.js → glimmer-ts-Bak54dBX.js} +1 -1
  59. package/dist/web/assets/{glsl-BED7ZmUZ.js → glsl-nR2eaJQe.js} +1 -1
  60. package/dist/web/assets/{graphql-B_KyE6oz.js → graphql-CGPPFAU6.js} +1 -1
  61. package/dist/web/assets/group-chat-tab-CVQfptkT.js +1 -0
  62. package/dist/web/assets/{hack-sxywdIAQ.js → hack-CXIMX-Ol.js} +1 -1
  63. package/dist/web/assets/{haml-Dts9JlPU.js → haml-tPY-9Pfm.js} +1 -1
  64. package/dist/web/assets/{handlebars-C9HXIMtj.js → handlebars-BuW1LT7T.js} +1 -1
  65. package/dist/web/assets/{html-2p0RvXi4.js → html-bgVcwZ-t.js} +1 -1
  66. package/dist/web/assets/{html-derivative-BiTPuOba.js → html-derivative-D6-IxTgn.js} +1 -1
  67. package/dist/web/assets/{http-CHd2gYPf.js → http-CJ1zyB-h.js} +1 -1
  68. package/dist/web/assets/{hurl-boMPgDm9.js → hurl-CmoT7l3T.js} +1 -1
  69. package/dist/web/assets/{hxml-BQvjiuBt.js → hxml-CztOsL8o.js} +1 -1
  70. package/dist/web/assets/{image-preview-0SGb7_tH.js → image-preview-BDySmiim.js} +1 -1
  71. package/dist/web/assets/index-XoDY9bc0.js +52 -0
  72. package/dist/web/assets/index-YCTraslE.css +2 -0
  73. package/dist/web/assets/info-3K5VOQVL-Cg0mIJn9.js +1 -0
  74. package/dist/web/assets/{jinja-B-zKiwlp.js → jinja-B1pq3jJq.js} +1 -1
  75. package/dist/web/assets/{jison-C2vJYjbJ.js → jison-D8B5pCwA.js} +1 -1
  76. package/dist/web/assets/{julia-DJ8MrQPA.js → julia-D0K3bwpU.js} +1 -1
  77. package/dist/web/assets/{just-BvQHq7VE.js → just-B9Jlddu-.js} +1 -1
  78. package/dist/web/assets/keybindings-store-BE1jVUZW.js +1 -0
  79. package/dist/web/assets/{latex-ChNeshUC.js → latex-BPJSSE6j.js} +1 -1
  80. package/dist/web/assets/{liquid-KNJEBOwW.js → liquid-lv10fo4U.js} +1 -1
  81. package/dist/web/assets/{lua-D8NNsLbC.js → lua-PNuaIBEF.js} +1 -1
  82. package/dist/web/assets/{markdown-renderer-DSxSupDq.js → markdown-renderer-B8Kz5rvP.js} +3 -3
  83. package/dist/web/assets/markdown-renderer-Btync7yg.js +1 -0
  84. package/dist/web/assets/{marko-HGo5Qtz4.js → marko-Du3frD6X.js} +1 -1
  85. package/dist/web/assets/{mdc-omkodQB5.js → mdc-BeDVcFRl.js} +1 -1
  86. package/dist/web/assets/mobile-bottom-sheet-CzRXE6mY.js +1 -0
  87. package/dist/web/assets/mobile-explorer-sheet-CDU8xriw.js +1 -0
  88. package/dist/web/assets/{nextflow-Adq02pv-.js → nextflow-DkcXP71s.js} +1 -1
  89. package/dist/web/assets/{nginx-ByvWruGD.js → nginx-C5n8N_bt.js} +1 -1
  90. package/dist/web/assets/{nim-BrMojX4O.js → nim-CIhyfs-A.js} +1 -1
  91. package/dist/web/assets/notification-store-Bi7VHAy4.js +1 -0
  92. package/dist/web/assets/{number-overlay-editor-CunvWJnN.js → number-overlay-editor-B8P26qGC.js} +1 -1
  93. package/dist/web/assets/packet-RMMSAZCW-D79vAFR_.js +1 -0
  94. package/dist/web/assets/{panel-store-CpKvXNnm.js → panel-store-gbNJvZB_.js} +1 -1
  95. package/dist/web/assets/{pdf-preview-DEn8amrO.js → pdf-preview-CtZWvujY.js} +1 -1
  96. package/dist/web/assets/{perl-Bd_0l-b4.js → perl-Cf31sZYE.js} +1 -1
  97. package/dist/web/assets/{php-D-DLTnWJ.js → php-Dzl_MDIW.js} +1 -1
  98. package/dist/web/assets/pie-UPGHQEXC-DYUOH68U.js +1 -0
  99. package/dist/web/assets/{postgres-viewer-CjrM15gz.js → postgres-viewer-fqMUi0xS.js} +3 -3
  100. package/dist/web/assets/{project-store-D0ALup9Z.js → project-store-D1D1MN03.js} +1 -1
  101. package/dist/web/assets/{pug-D2aO-l2T.js → pug-CxSYHrB3.js} +1 -1
  102. package/dist/web/assets/{qml-CyQVzNXS.js → qml-DlEjGhwN.js} +1 -1
  103. package/dist/web/assets/radar-KQ55EAFF-B1eznNtd.js +1 -0
  104. package/dist/web/assets/{razor-8tvJXsO3.js → razor-KVt5uW14.js} +1 -1
  105. package/dist/web/assets/{rst-C4AZyQQl.js → rst-D5BwNTnw.js} +1 -1
  106. package/dist/web/assets/{ruby-O_z2NTLY.js → ruby-D5fejQwd.js} +1 -1
  107. package/dist/web/assets/{sas-BtnF4zaV.js → sas-Bj7B1CB2.js} +1 -1
  108. package/dist/web/assets/{scss-GAyp5euH.js → scss-BB0CUoCL.js} +1 -1
  109. package/dist/web/assets/settings-store-Bm7uL8VA.js +2 -0
  110. package/dist/web/assets/settings-tab-DxtBG0DW.js +1 -0
  111. package/dist/web/assets/{shaderlab-nM5YZwa5.js → shaderlab-BdjEZUMc.js} +1 -1
  112. package/dist/web/assets/{shellsession-D2OCI4Gv.js → shellsession-Bp1OA1rR.js} +1 -1
  113. package/dist/web/assets/{soy-DrLNhqfp.js → soy-DlYz3wsC.js} +1 -1
  114. package/dist/web/assets/sparkles-BvJ1EGWd.js +1 -0
  115. package/dist/web/assets/{sparql-CsM6F2Yv.js → sparql-CdfII5Jd.js} +1 -1
  116. package/dist/web/assets/{sql-query-editor-CT5M9PKQ.js → sql-query-editor-D2UxRvG7.js} +1 -1
  117. package/dist/web/assets/sqlite-viewer-CTBwzT-r.js +1 -0
  118. package/dist/web/assets/{stata-Bk3cgfXJ.js → stata-BvUA6GUW.js} +1 -1
  119. package/dist/web/assets/{surrealql-Dkz0DPK8.js → surrealql--DLNbTyI.js} +1 -1
  120. package/dist/web/assets/{svelte-23si1KV5.js → svelte-CBfSsG4n.js} +1 -1
  121. package/dist/web/assets/{system-monitor-tab-De3oz9zD.js → system-monitor-tab-Bscf6tzK.js} +1 -1
  122. package/dist/web/assets/{tab-store-BQmDVh9c.js → tab-store-DnNnaAcE.js} +1 -1
  123. package/dist/web/assets/{templ-CPxlP4vF.js → templ-Dv8zpKZW.js} +1 -1
  124. package/dist/web/assets/{terminal-tab-CciNqtMc.js → terminal-tab-CTKU5gaF.js} +3 -3
  125. package/dist/web/assets/{tex-ugJpgYPc.js → tex-CsrOiqh1.js} +1 -1
  126. package/dist/web/assets/tool-cards-xstpayaW.js +7 -0
  127. package/dist/web/assets/treemap-KZPCXAKY-SeI2TxLs.js +1 -0
  128. package/dist/web/assets/{ts-tags-BovP9TMu.js → ts-tags-3T98k4EJ.js} +1 -1
  129. package/dist/web/assets/{twig-B7VUm2Ca.js → twig-u6QZ45FH.js} +1 -1
  130. package/dist/web/assets/{use-blob-url-B3YovXF6.js → use-blob-url-BLRmhlZI.js} +1 -1
  131. package/dist/web/assets/{use-monaco-theme-k-17kQqf.js → use-monaco-theme-DxYstgYa.js} +1 -1
  132. package/dist/web/assets/{vendor-mermaid-CYOBtZtD.js → vendor-mermaid-C977xNeE.js} +1 -1
  133. package/dist/web/assets/{vendor-ui-DMRGWRuc.js → vendor-ui-CXJtBULr.js} +1 -1
  134. package/dist/web/assets/{video-preview-D-S_YnG6.js → video-preview-cfaoRxG3.js} +1 -1
  135. package/dist/web/assets/{vue-m75pWowk.js → vue-CxIsxtwn.js} +1 -1
  136. package/dist/web/assets/{vue-html-odHs7IMn.js → vue-html-BGL5qnuH.js} +1 -1
  137. package/dist/web/assets/{vue-vine-BbBB3V_G.js → vue-vine-DHPh_gMr.js} +1 -1
  138. package/dist/web/assets/{xml-BHzIcDWI.js → xml-C-vM2m7J.js} +1 -1
  139. package/dist/web/assets/{xsl-DTLhN7uu.js → xsl-DvTXNwuO.js} +1 -1
  140. package/dist/web/index.html +26 -23
  141. package/dist/web/sw.js +1 -1
  142. package/docs/codebase-summary.md +10 -1
  143. package/docs/design-guidelines.md +31 -0
  144. package/docs/project-roadmap.md +10 -0
  145. package/docs/system-architecture.md +59 -0
  146. package/package.json +2 -1
  147. package/src/server/index.ts +8 -0
  148. package/src/server/routes/files.ts +2 -2
  149. package/src/server/routes/fs-browse.ts +99 -74
  150. package/src/server/routes/fs-ops.ts +118 -0
  151. package/src/server/routes/fs-sqlite.ts +129 -0
  152. package/src/server/routes/host-info.ts +17 -0
  153. package/src/server/routes/settings.ts +2 -0
  154. package/src/services/download-token.service.ts +21 -5
  155. package/src/services/file.service.ts +8 -12
  156. package/src/services/fs-browse.service.ts +104 -161
  157. package/src/services/fs-ops/fs-content-disposition.ts +17 -0
  158. package/src/services/fs-ops/fs-core-ops.ts +149 -0
  159. package/src/services/fs-ops/fs-error-response.ts +24 -0
  160. package/src/services/fs-ops/fs-git-init.service.ts +23 -0
  161. package/src/services/fs-ops/fs-hidden-names.ts +17 -0
  162. package/src/services/fs-ops/fs-list-files.service.ts +68 -0
  163. package/src/services/fs-ops/fs-ops-copy-move.service.ts +60 -0
  164. package/src/services/fs-ops/fs-ops-mutate.service.ts +59 -0
  165. package/src/services/fs-ops/fs-ops-read-write.service.ts +70 -0
  166. package/src/services/fs-ops/fs-ops-stat.service.ts +109 -0
  167. package/src/services/fs-ops/fs-ops-trash.service.ts +111 -0
  168. package/src/services/fs-ops/fs-real-path.ts +44 -0
  169. package/src/services/fs-ops/sql-row-reader.ts +26 -0
  170. package/src/services/fs-ops/sql-statement-guard.ts +63 -0
  171. package/src/services/fs-path-guard.service.ts +196 -0
  172. package/src/services/host-info/apple-bookmark-decoder.ts +97 -0
  173. package/src/services/host-info/apple-plist-xml-parser.ts +107 -0
  174. package/src/services/host-info/concurrency-limit.ts +20 -0
  175. package/src/services/host-info/host-drives.ts +190 -0
  176. package/src/services/host-info/host-info.service.ts +171 -0
  177. package/src/services/host-info/host-known-folders.ts +180 -0
  178. package/src/services/host-info/pinned-linux-bookmarks.ts +89 -0
  179. package/src/services/host-info/pinned-macos-finder-favorites.ts +175 -0
  180. package/src/services/host-info/pinned-windows-quick-access.ts +87 -0
  181. package/src/services/host-info/spawn-runner.ts +41 -0
  182. package/src/services/sqlite-types.ts +26 -0
  183. package/src/services/sqlite.service.ts +38 -29
  184. package/src/services/subagent-transcript-merger.ts +1 -1
  185. package/src/types/system.ts +50 -0
  186. package/src/web/app.tsx +19 -3
  187. package/src/web/components/editor/code-editor.tsx +3 -9
  188. package/src/web/components/explorer/file-tree.tsx +103 -21
  189. package/src/web/components/explorer/tree-node-context-menu.tsx +6 -1
  190. package/src/web/components/explorer/tree-node.tsx +34 -93
  191. package/src/web/components/explorer/use-file-upload-drag.ts +14 -9
  192. package/src/web/components/explorer/use-tree-row-dnd.ts +206 -0
  193. package/src/web/components/floating-window/default-window-chrome.tsx +71 -0
  194. package/src/web/components/floating-window/floating-window.tsx +167 -0
  195. package/src/web/components/floating-window/use-window-drag.ts +28 -0
  196. package/src/web/components/floating-window/use-window-gesture-context.ts +44 -0
  197. package/src/web/components/floating-window/use-window-keyboard.ts +55 -0
  198. package/src/web/components/floating-window/use-window-resize.ts +30 -0
  199. package/src/web/components/floating-window/window-chrome-contract.ts +38 -0
  200. package/src/web/components/floating-window/window-content-registry.ts +51 -0
  201. package/src/web/components/floating-window/window-geometry.ts +121 -0
  202. package/src/web/components/floating-window/window-layer.tsx +92 -0
  203. package/src/web/components/floating-window/window-persistence.ts +104 -0
  204. package/src/web/components/floating-window/window-resize-handles.tsx +81 -0
  205. package/src/web/components/floating-window/window-store-types.ts +20 -0
  206. package/src/web/components/floating-window/window-store.ts +192 -0
  207. package/src/web/components/layout/command-palette.tsx +10 -0
  208. package/src/web/components/layout/mobile-drawer.tsx +11 -2
  209. package/src/web/components/layout/nav-section-rail.tsx +7 -1
  210. package/src/web/components/os-explorer/actions/explorer-actions-clipboard.ts +186 -0
  211. package/src/web/components/os-explorer/actions/explorer-actions-mutate.ts +109 -0
  212. package/src/web/components/os-explorer/actions/explorer-actions-open.ts +67 -0
  213. package/src/web/components/os-explorer/actions/explorer-actions-transfer-helpers.ts +35 -0
  214. package/src/web/components/os-explorer/actions/use-explorer-actions.ts +205 -0
  215. package/src/web/components/os-explorer/can-open-in-ppm.ts +89 -0
  216. package/src/web/components/os-explorer/dnd/drag-depth-counter.ts +36 -0
  217. package/src/web/components/os-explorer/dnd/drag-ghost.ts +44 -0
  218. package/src/web/components/os-explorer/dnd/drop-target-decision.ts +46 -0
  219. package/src/web/components/os-explorer/dnd/drop-target-style.ts +7 -0
  220. package/src/web/components/os-explorer/dnd/entry-drag-payload.ts +115 -0
  221. package/src/web/components/os-explorer/dnd/entry-drag-state.ts +35 -0
  222. package/src/web/components/os-explorer/dnd/entry-drop-executor.ts +43 -0
  223. package/src/web/components/os-explorer/dnd/use-drag-auto-scroll.ts +70 -0
  224. package/src/web/components/os-explorer/dnd/use-drop-transfer.tsx +82 -0
  225. package/src/web/components/os-explorer/dnd/use-entry-drag-source.ts +73 -0
  226. package/src/web/components/os-explorer/dnd/use-entry-drop-target.ts +150 -0
  227. package/src/web/components/os-explorer/dnd/use-entry-row-dnd.ts +66 -0
  228. package/src/web/components/os-explorer/dnd/use-path-drop-target.ts +30 -0
  229. package/src/web/components/os-explorer/explorer-body.tsx +153 -0
  230. package/src/web/components/os-explorer/explorer-breadcrumb.tsx +108 -0
  231. package/src/web/components/os-explorer/explorer-context-menu.tsx +131 -0
  232. package/src/web/components/os-explorer/explorer-dialogs.tsx +103 -0
  233. package/src/web/components/os-explorer/explorer-modal-shell.tsx +60 -0
  234. package/src/web/components/os-explorer/explorer-pins-store.ts +63 -0
  235. package/src/web/components/os-explorer/explorer-sidebar.tsx +198 -0
  236. package/src/web/components/os-explorer/explorer-sort-menu.tsx +68 -0
  237. package/src/web/components/os-explorer/explorer-status-bar.tsx +35 -0
  238. package/src/web/components/os-explorer/explorer-store.ts +179 -0
  239. package/src/web/components/os-explorer/explorer-toolbar.tsx +139 -0
  240. package/src/web/components/os-explorer/explorer-window-content.tsx +36 -0
  241. package/src/web/components/os-explorer/format-file-meta.ts +74 -0
  242. package/src/web/components/os-explorer/icons/file-type-icon-map.ts +106 -0
  243. package/src/web/components/os-explorer/icons/file-type-icon.tsx +56 -0
  244. package/src/web/components/os-explorer/icons/thumbnail-fetch-semaphore.ts +44 -0
  245. package/src/web/components/os-explorer/icons/thumbnail-image.tsx +124 -0
  246. package/src/web/components/os-explorer/mobile/mobile-bottom-toolbar.tsx +102 -0
  247. package/src/web/components/os-explorer/mobile/mobile-explorer-sheet.tsx +61 -0
  248. package/src/web/components/os-explorer/mobile/mobile-explorer-top-bar.tsx +41 -0
  249. package/src/web/components/os-explorer/mobile/mobile-more-sheet.tsx +117 -0
  250. package/src/web/components/os-explorer/mobile/mobile-places-sheet.tsx +120 -0
  251. package/src/web/components/os-explorer/mobile/mobile-places-strip.tsx +109 -0
  252. package/src/web/components/os-explorer/mobile/mobile-tap-action.ts +19 -0
  253. package/src/web/components/os-explorer/mobile/use-mobile-row-tap.ts +50 -0
  254. package/src/web/components/os-explorer/open-explorer.ts +35 -0
  255. package/src/web/components/os-explorer/properties-dialog.tsx +99 -0
  256. package/src/web/components/os-explorer/skins/explorer-skin-chrome.tsx +17 -0
  257. package/src/web/components/os-explorer/skins/folder-icon-macos.tsx +42 -0
  258. package/src/web/components/os-explorer/skins/folder-icon-windows.tsx +25 -0
  259. package/src/web/components/os-explorer/skins/macos-skin.ts +14 -0
  260. package/src/web/components/os-explorer/skins/macos-window-chrome.tsx +69 -0
  261. package/src/web/components/os-explorer/skins/skin-types.ts +40 -0
  262. package/src/web/components/os-explorer/skins/skins.css +25 -0
  263. package/src/web/components/os-explorer/skins/use-explorer-skin.ts +21 -0
  264. package/src/web/components/os-explorer/skins/windows-skin.ts +11 -0
  265. package/src/web/components/os-explorer/skins/windows-window-chrome.tsx +56 -0
  266. package/src/web/components/os-explorer/sort-and-filter-entries.ts +52 -0
  267. package/src/web/components/os-explorer/sort-options.ts +29 -0
  268. package/src/web/components/os-explorer/toolbar-icon-button.ts +18 -0
  269. package/src/web/components/os-explorer/use-coarse-long-press.ts +97 -0
  270. package/src/web/components/os-explorer/use-explorer-keyboard.ts +124 -0
  271. package/src/web/components/os-explorer/use-explorer-navigation.ts +155 -0
  272. package/src/web/components/os-explorer/use-explorer-open-state.ts +67 -0
  273. package/src/web/components/os-explorer/use-host-info.ts +85 -0
  274. package/src/web/components/os-explorer/views/column-row.tsx +126 -0
  275. package/src/web/components/os-explorer/views/column-view-column.tsx +112 -0
  276. package/src/web/components/os-explorer/views/column-view-mobile.tsx +98 -0
  277. package/src/web/components/os-explorer/views/column-view-preview.tsx +70 -0
  278. package/src/web/components/os-explorer/views/column-view.tsx +204 -0
  279. package/src/web/components/os-explorer/views/compose-interactive-row-props.ts +77 -0
  280. package/src/web/components/os-explorer/views/explorer-view-registry.tsx +55 -0
  281. package/src/web/components/os-explorer/views/icons-view-tile.tsx +158 -0
  282. package/src/web/components/os-explorer/views/icons-view.tsx +188 -0
  283. package/src/web/components/os-explorer/views/inline-name-input.tsx +60 -0
  284. package/src/web/components/os-explorer/views/list-row.tsx +162 -0
  285. package/src/web/components/os-explorer/views/list-view.tsx +177 -0
  286. package/src/web/components/os-explorer/views/use-column-view-state.ts +158 -0
  287. package/src/web/components/os-explorer/views/use-entry-selection.ts +178 -0
  288. package/src/web/components/settings/settings-tab.tsx +29 -2
  289. package/src/web/components/sqlite/sqlite-viewer.tsx +5 -2
  290. package/src/web/components/sqlite/use-sqlite.ts +7 -2
  291. package/src/web/components/ui/adaptive-context-menu.tsx +57 -1
  292. package/src/web/components/ui/file-browser-picker.tsx +1 -18
  293. package/src/web/lib/file-download.ts +6 -4
  294. package/src/web/lib/fs-api.ts +185 -0
  295. package/src/web/stores/file-store.ts +38 -1
  296. package/src/web/stores/settings-store.ts +14 -0
  297. package/src/web/styles/globals.css +1 -0
  298. package/dist/web/assets/api-client-RtNXvS0P.js +0 -1
  299. package/dist/web/assets/api-settings-De--HNHp.js +0 -1
  300. package/dist/web/assets/architecture-PBZL5I3N-DVRYSsQn.js +0 -1
  301. package/dist/web/assets/chat-tab-C5U7a_rP.js +0 -13
  302. package/dist/web/assets/code-editor-CqlzLQ7T.js +0 -10
  303. package/dist/web/assets/context-menu-DIiZdfbE.js +0 -1
  304. package/dist/web/assets/csv-preview-DD94T9ff.js +0 -2
  305. package/dist/web/assets/dialog-HHdNInEH.js +0 -1
  306. package/dist/web/assets/diff-viewer-DyQLYP7J.js +0 -4
  307. package/dist/web/assets/git-log-panel-CrUgsLY5.js +0 -1
  308. package/dist/web/assets/gitGraph-HDMCJU4V-CutkUNY_.js +0 -1
  309. package/dist/web/assets/group-chat-tab-BqNJW7y2.js +0 -1
  310. package/dist/web/assets/index-CVJmlKhp.css +0 -2
  311. package/dist/web/assets/index-I2ik0ZF7.js +0 -50
  312. package/dist/web/assets/info-3K5VOQVL-BpNjgbj9.js +0 -1
  313. package/dist/web/assets/keybindings-store-C46tNxJE.js +0 -1
  314. package/dist/web/assets/markdown-renderer-xzyhJklS.js +0 -1
  315. package/dist/web/assets/notification-store-Dek7ClI2.js +0 -1
  316. package/dist/web/assets/packet-RMMSAZCW-D5IUZ66-.js +0 -1
  317. package/dist/web/assets/pie-UPGHQEXC-CM29eKDR.js +0 -1
  318. package/dist/web/assets/radar-KQ55EAFF-QtJGaSGt.js +0 -1
  319. package/dist/web/assets/settings-store-B3LfpCPa.js +0 -2
  320. package/dist/web/assets/settings-tab-DIuR1VIc.js +0 -1
  321. package/dist/web/assets/sparkles-B3DmG8PJ.js +0 -1
  322. package/dist/web/assets/sqlite-viewer-CEObRQ7n.js +0 -1
  323. package/dist/web/assets/tool-cards-Bdx04yYD.js +0 -7
  324. package/dist/web/assets/treemap-KZPCXAKY-CjUqpVnS.js +0 -1
  325. /package/dist/web/assets/{abap-BM5PMK0-.js → abap-C1K0-wzc.js} +0 -0
  326. /package/dist/web/assets/{actionscript-3-CML-MTNy.js → actionscript-3-CJhQVjLA.js} +0 -0
  327. /package/dist/web/assets/{ada-DzO1tMqV.js → ada-Bt8r9fME.js} +0 -0
  328. /package/dist/web/assets/{andromeeda-C3nkvRhj.js → andromeeda-DF1I8qi3.js} +0 -0
  329. /package/dist/web/assets/{apache-Dg7oWQbs.js → apache-CnlleE6P.js} +0 -0
  330. /package/dist/web/assets/{apex-3O2170Ju.js → apex-j0C6Xmk6.js} +0 -0
  331. /package/dist/web/assets/{applescript-5AlzBqQO.js → applescript-DO7AnO8U.js} +0 -0
  332. /package/dist/web/assets/{apply-theme-BSJDABU3.js → apply-theme-CMQXnUAa.js} +0 -0
  333. /package/dist/web/assets/{ara-BGtOX5Hn.js → ara-i83AydZj.js} +0 -0
  334. /package/dist/web/assets/{asciidoc-CIsC4kkq.js → asciidoc-DbBA6-sF.js} +0 -0
  335. /package/dist/web/assets/{asm-p1-PUkh3.js → asm-B5S47Rgr.js} +0 -0
  336. /package/dist/web/assets/{aurora-x-BPgGL50S.js → aurora-x-De_IaSKw.js} +0 -0
  337. /package/dist/web/assets/{awk-Cj93pRL8.js → awk-CfyLHXqS.js} +0 -0
  338. /package/dist/web/assets/{ayu-dark-C50MYKhw.js → ayu-dark-DTLdZ1Si.js} +0 -0
  339. /package/dist/web/assets/{ayu-light-DyIp0Idy.js → ayu-light-DTOfkzhu.js} +0 -0
  340. /package/dist/web/assets/{ayu-mirage-BAdm8pKU.js → ayu-mirage-DsAECCMv.js} +0 -0
  341. /package/dist/web/assets/{ballerina-DUO9mwyV.js → ballerina-CumGp9A7.js} +0 -0
  342. /package/dist/web/assets/{bat-Cg8hlSct.js → bat-Ca2SBbYN.js} +0 -0
  343. /package/dist/web/assets/{beancount-f8f3BBqB.js → beancount-CqyXBwwF.js} +0 -0
  344. /package/dist/web/assets/{berry-BqVQYZZr.js → berry-yl-kJr_H.js} +0 -0
  345. /package/dist/web/assets/{bibtex-C_q8ygAM.js → bibtex-DoFFszjV.js} +0 -0
  346. /package/dist/web/assets/{bicep-DWS-2uWR.js → bicep-CWPi4nfK.js} +0 -0
  347. /package/dist/web/assets/{bird2-C0pvipi_.js → bird2-DXew-ut0.js} +0 -0
  348. /package/dist/web/assets/{bot-E9mcVZnr.js → bot-BHXjpQ7x.js} +0 -0
  349. /package/dist/web/assets/{c-BQFvJ6Ux.js → c-clbySDvd.js} +0 -0
  350. /package/dist/web/assets/{c3-Da53KeG6.js → c3-B65jvSM1.js} +0 -0
  351. /package/dist/web/assets/{cadence-B5X2vWm3.js → cadence-Cm8tQTHN.js} +0 -0
  352. /package/dist/web/assets/{catppuccin-frappe-Dm3rVY3b.js → catppuccin-frappe-DLeGslh_.js} +0 -0
  353. /package/dist/web/assets/{catppuccin-latte-ZxS-ga_K.js → catppuccin-latte-CR5GeHws.js} +0 -0
  354. /package/dist/web/assets/{catppuccin-macchiato-B0bAzXh0.js → catppuccin-macchiato-p-XgjxhP.js} +0 -0
  355. /package/dist/web/assets/{catppuccin-mocha-BeMC5hqi.js → catppuccin-mocha-B8QOAZLl.js} +0 -0
  356. /package/dist/web/assets/{chevron-right-DeUue2aK.js → chevron-right-CtcHmZg9.js} +0 -0
  357. /package/dist/web/assets/{circle-question-mark-PaJgx-3d.js → circle-question-mark-EVgisosn.js} +0 -0
  358. /package/dist/web/assets/{clarity-BRdirlsw.js → clarity-DPulbvKH.js} +0 -0
  359. /package/dist/web/assets/{clojure-pSLH-KQp.js → clojure-DFuWS20u.js} +0 -0
  360. /package/dist/web/assets/{cmake-DsZu4U4F.js → cmake-DejCqcu4.js} +0 -0
  361. /package/dist/web/assets/{code-TekEnDFM.js → code-Dupqw5Fr.js} +0 -0
  362. /package/dist/web/assets/{codeowners-CtkKTnsH.js → codeowners-BwAyqWIH.js} +0 -0
  363. /package/dist/web/assets/{codeql-BpP1PDrj.js → codeql-DgSwFjqI.js} +0 -0
  364. /package/dist/web/assets/{common-lisp-BX1XgHTt.js → common-lisp-CxIVJCtf.js} +0 -0
  365. /package/dist/web/assets/{coq-D2bX6-8g.js → coq-DLSjSnmf.js} +0 -0
  366. /package/dist/web/assets/{csharp-DcR97P0D.js → csharp-C1HHzXBp.js} +0 -0
  367. /package/dist/web/assets/{css-CIjciIIk.js → css-VXsMY--y.js} +0 -0
  368. /package/dist/web/assets/{csv-DW48Z5d-.js → csv-BEbcJdHz.js} +0 -0
  369. /package/dist/web/assets/{csv-parser-DVHBcvuE.js → csv-parser-DHvoTjMF.js} +0 -0
  370. /package/dist/web/assets/{cue-Byh1xHko.js → cue-BkDnFqUD.js} +0 -0
  371. /package/dist/web/assets/{cypher-TVlMMWma.js → cypher-1cMqojSQ.js} +0 -0
  372. /package/dist/web/assets/{d-CxaScvxf.js → d-BnYjRXtH.js} +0 -0
  373. /package/dist/web/assets/{dark-plus-sn-FFTT1.js → dark-plus-XfbaH7kZ.js} +0 -0
  374. /package/dist/web/assets/{dart-BmpakMe-.js → dart-Ca7s-8hK.js} +0 -0
  375. /package/dist/web/assets/{data-grid-types-BuMHLKXV.js → data-grid-types-DP-ZexEN.js} +0 -0
  376. /package/dist/web/assets/{database-COYAMZaw.js → database-Dj0DxgtX.js} +0 -0
  377. /package/dist/web/assets/{dax-B1aRUMXT.js → dax-CmuOw-mY.js} +0 -0
  378. /package/dist/web/assets/{desktop-C6lD62ar.js → desktop-C2gJ6Ovb.js} +0 -0
  379. /package/dist/web/assets/{diff-CupGmT1a.js → diff-BCEo1Ej7.js} +0 -0
  380. /package/dist/web/assets/{dist-Bi4gRyhr.js → dist-CipvJy9w.js} +0 -0
  381. /package/dist/web/assets/{dist-m_oJqIDk.js → dist-D__U4ZJz.js} +0 -0
  382. /package/dist/web/assets/{docker-DjDr3TJF.js → docker-DN2jlyAh.js} +0 -0
  383. /package/dist/web/assets/{dotenv-QeT1SLTv.js → dotenv-NExMY2kS.js} +0 -0
  384. /package/dist/web/assets/{dracula-yI5kpKp5.js → dracula-B9lbE01y.js} +0 -0
  385. /package/dist/web/assets/{dracula-soft-CYF6cJce.js → dracula-soft-CMBBfKF_.js} +0 -0
  386. /package/dist/web/assets/{dream-maker-TBDKiHrV.js → dream-maker-DEyDwFsd.js} +0 -0
  387. /package/dist/web/assets/{emacs-lisp-B7aZTnJ_.js → emacs-lisp-D_qP2zS6.js} +0 -0
  388. /package/dist/web/assets/{everforest-dark-CN77B1NJ.js → everforest-dark-DbHa2U-p.js} +0 -0
  389. /package/dist/web/assets/{everforest-light-CyFxGMIs.js → everforest-light-BISkJchP.js} +0 -0
  390. /package/dist/web/assets/{fennel-C6ktGUzp.js → fennel-6B22SfJR.js} +0 -0
  391. /package/dist/web/assets/{file-exclamation-point-DBEC-Kst.js → file-exclamation-point-D-ZORzYB.js} +0 -0
  392. /package/dist/web/assets/{fish-Vr62C2vP.js → fish-CubIIvJD.js} +0 -0
  393. /package/dist/web/assets/{fluent-CH3IJUki.js → fluent-DF55zQ09.js} +0 -0
  394. /package/dist/web/assets/{fortran-free-form-BN7VmmxZ.js → fortran-free-form-DvOu8jAt.js} +0 -0
  395. /package/dist/web/assets/{gdscript-BYdRNu_P.js → gdscript-DCPxdLpq.js} +0 -0
  396. /package/dist/web/assets/{gdshader-C2XOq90k.js → gdshader-CTZ381FO.js} +0 -0
  397. /package/dist/web/assets/{genie-B4hkIXNU.js → genie-C_QDtvgU.js} +0 -0
  398. /package/dist/web/assets/{gherkin-CW9NH2DW.js → gherkin-BcvK42tF.js} +0 -0
  399. /package/dist/web/assets/{github-dark-BWCf99kM.js → github-dark-C9afs_4w.js} +0 -0
  400. /package/dist/web/assets/{github-dark-default-DZ1m_6OP.js → github-dark-default-CKGVrl3Z.js} +0 -0
  401. /package/dist/web/assets/{github-dark-dimmed-CUXSQ8bS.js → github-dark-dimmed-C3dQZ_LC.js} +0 -0
  402. /package/dist/web/assets/{github-dark-high-contrast-B6BvU8H-.js → github-dark-high-contrast-DW78QukY.js} +0 -0
  403. /package/dist/web/assets/{github-light-Ch-E92cy.js → github-light-BnP2dznS.js} +0 -0
  404. /package/dist/web/assets/{github-light-default-CKFslV7i.js → github-light-default-C2fPZzPG.js} +0 -0
  405. /package/dist/web/assets/{github-light-high-contrast-DiJVeRlZ.js → github-light-high-contrast-BzIuUFR2.js} +0 -0
  406. /package/dist/web/assets/{gleam-D4dP7V5M.js → gleam-BpeKwEIO.js} +0 -0
  407. /package/dist/web/assets/{gn-DuO2D2eW.js → gn-nUb_Mit0.js} +0 -0
  408. /package/dist/web/assets/{gnuplot-Df_8pFbI.js → gnuplot-D7I0v20p.js} +0 -0
  409. /package/dist/web/assets/{go-BL16cMJO.js → go-D7Qqska7.js} +0 -0
  410. /package/dist/web/assets/{groovy-rfHeCRqy.js → groovy-DS-pne5-.js} +0 -0
  411. /package/dist/web/assets/{gruvbox-dark-hard-CLbDN-E3.js → gruvbox-dark-hard-C0W01fsq.js} +0 -0
  412. /package/dist/web/assets/{gruvbox-dark-medium-Df0L0qje.js → gruvbox-dark-medium-Bqo6fQbg.js} +0 -0
  413. /package/dist/web/assets/{gruvbox-dark-soft-DV6TAcen.js → gruvbox-dark-soft-D-XSM_fu.js} +0 -0
  414. /package/dist/web/assets/{gruvbox-light-hard-CWXUzp9b.js → gruvbox-light-hard-IVAwMJRl.js} +0 -0
  415. /package/dist/web/assets/{gruvbox-light-medium-BOHMe1-7.js → gruvbox-light-medium-38ATiG7i.js} +0 -0
  416. /package/dist/web/assets/{gruvbox-light-soft-DrrS2sdV.js → gruvbox-light-soft-DnZr3c_0.js} +0 -0
  417. /package/dist/web/assets/{haskell-DybKb9uW.js → haskell-uQcywkDH.js} +0 -0
  418. /package/dist/web/assets/{haxe-DLRwZxmt.js → haxe-c6bI4_GT.js} +0 -0
  419. /package/dist/web/assets/{hcl-CusCzwOk.js → hcl-CQXTiEXq.js} +0 -0
  420. /package/dist/web/assets/{hjson-BygWIJ-3.js → hjson-ChETf2bz.js} +0 -0
  421. /package/dist/web/assets/{hlsl-DCKvuEyZ.js → hlsl-BMC4JGoE.js} +0 -0
  422. /package/dist/web/assets/{horizon-DSOVAzyH.js → horizon-BusFlhLW.js} +0 -0
  423. /package/dist/web/assets/{horizon-bright-DKfVjGj_.js → horizon-bright-2oD0Mz7W.js} +0 -0
  424. /package/dist/web/assets/{houston-Ddm8AgpV.js → houston-DdbbjqFg.js} +0 -0
  425. /package/dist/web/assets/{hy-DzZa6alE.js → hy-D_SOuqw9.js} +0 -0
  426. /package/dist/web/assets/{image-gallery-CObzTisL.js → image-gallery-BWFpZAAP.js} +0 -0
  427. /package/dist/web/assets/{imba-aiXalPnK.js → imba-BxLOHO5I.js} +0 -0
  428. /package/dist/web/assets/{ini-CAvrVa5R.js → ini-ox-CFcg0.js} +0 -0
  429. /package/dist/web/assets/{java-PRMSQp24.js → java-Bzo8yIal.js} +0 -0
  430. /package/dist/web/assets/{javascript-DQR6GQKs.js → javascript-DHuz9VXn.js} +0 -0
  431. /package/dist/web/assets/{json-uWUKqOxq.js → json-0_y80FD5.js} +0 -0
  432. /package/dist/web/assets/{json5-R_LXJXL0.js → json5-CEQ50pGM.js} +0 -0
  433. /package/dist/web/assets/{jsonc-tC5zvrPO.js → jsonc-CfrLEAKA.js} +0 -0
  434. /package/dist/web/assets/{jsonl-BAwnWh7U.js → jsonl-fKbrANC2.js} +0 -0
  435. /package/dist/web/assets/{jsonnet-CPj4HCRm.js → jsonnet-DKbkPaQ2.js} +0 -0
  436. /package/dist/web/assets/{jssm-B7HswxOM.js → jssm-Dxxx1Hqu.js} +0 -0
  437. /package/dist/web/assets/{jsx-z4TGELE1.js → jsx-DlJL-Oj3.js} +0 -0
  438. /package/dist/web/assets/{kanagawa-dragon-BpeLlraV.js → kanagawa-dragon-CwN4SV1c.js} +0 -0
  439. /package/dist/web/assets/{kanagawa-lotus-CLnIPAGs.js → kanagawa-lotus-BHltayiE.js} +0 -0
  440. /package/dist/web/assets/{kanagawa-wave-BglPniBb.js → kanagawa-wave-D-KXPjw6.js} +0 -0
  441. /package/dist/web/assets/{kdl-B6blIqLq.js → kdl-DvtoJdFo.js} +0 -0
  442. /package/dist/web/assets/{kotlin-DVAEYiwY.js → kotlin-CTS4MLcx.js} +0 -0
  443. /package/dist/web/assets/{kusto-Ba87977j.js → kusto-HtSE_sKm.js} +0 -0
  444. /package/dist/web/assets/{laserwave-C-NuzoMp.js → laserwave-DaXZG9ge.js} +0 -0
  445. /package/dist/web/assets/{lean-CJ_KLkrJ.js → lean-BYtGUfWx.js} +0 -0
  446. /package/dist/web/assets/{less-Dfn9YC_2.js → less-BoxmU_Mk.js} +0 -0
  447. /package/dist/web/assets/{lib-DTaN9riD.js → lib-Bpbn00xM.js} +0 -0
  448. /package/dist/web/assets/{libesm-DdtEjhIi.js → libesm-tR4XlhMj.js} +0 -0
  449. /package/dist/web/assets/{light-plus-B3BLlguG.js → light-plus-Bt5CyUuo.js} +0 -0
  450. /package/dist/web/assets/{llvm-6UDP3NQb.js → llvm-CSdk9q9V.js} +0 -0
  451. /package/dist/web/assets/{log-QW3dqr1D.js → log-B-kp_3CL.js} +0 -0
  452. /package/dist/web/assets/{logo-DUinJheI.js → logo-DdIsXFDO.js} +0 -0
  453. /package/dist/web/assets/{luau-B1vcBzl8.js → luau-DUBpLlzQ.js} +0 -0
  454. /package/dist/web/assets/{make-CqNL10gS.js → make-B3JVjoW_.js} +0 -0
  455. /package/dist/web/assets/{markdown-BQNMNiYS.js → markdown-Seon0vHs.js} +0 -0
  456. /package/dist/web/assets/{material-theme-rbV8EefR.js → material-theme-Nq-ChX1P.js} +0 -0
  457. /package/dist/web/assets/{material-theme-darker-BZrskvoo.js → material-theme-darker-CPV4ayXJ.js} +0 -0
  458. /package/dist/web/assets/{material-theme-lighter-B0CBBjBw.js → material-theme-lighter-0kyjYqEd.js} +0 -0
  459. /package/dist/web/assets/{material-theme-ocean-CX_CHnQq.js → material-theme-ocean-DGpAp5co.js} +0 -0
  460. /package/dist/web/assets/{material-theme-palenight-ztiOCPbw.js → material-theme-palenight-B0AUn0NG.js} +0 -0
  461. /package/dist/web/assets/{matlab-tHQDNC9G.js → matlab-C2waytxs.js} +0 -0
  462. /package/dist/web/assets/{mdx-D4kZ6c6G.js → mdx-DAis6R6I.js} +0 -0
  463. /package/dist/web/assets/{mermaid-DlR4U4Pe.js → mermaid-_rnT2YGD.js} +0 -0
  464. /package/dist/web/assets/{min-dark-BX-xHAD2.js → min-dark-BSSjchUB.js} +0 -0
  465. /package/dist/web/assets/{min-light-Bxw0_Gqq.js → min-light-DomAFQsa.js} +0 -0
  466. /package/dist/web/assets/{mipsasm-DYyZAum-.js → mipsasm-bBgtvPyG.js} +0 -0
  467. /package/dist/web/assets/{mojo-q9wuEYKR.js → mojo-Cp9BayW0.js} +0 -0
  468. /package/dist/web/assets/{monokai-D9vrJ8JM.js → monokai-CL_9gbmn.js} +0 -0
  469. /package/dist/web/assets/{moonbit-C9roWxMb.js → moonbit-BS_fcr-P.js} +0 -0
  470. /package/dist/web/assets/{move-BvhjG2ic.js → move-C79AH45U.js} +0 -0
  471. /package/dist/web/assets/{narrat-BXGbPwG3.js → narrat-CJ5s3BDf.js} +0 -0
  472. /package/dist/web/assets/{nextflow-groovy-CMy5-Z4k.js → nextflow-groovy-ZHa4JrPJ.js} +0 -0
  473. /package/dist/web/assets/{night-owl-CBQBcbmw.js → night-owl-Jkf9zFQK.js} +0 -0
  474. /package/dist/web/assets/{night-owl-light-CC-brflp.js → night-owl-light-DRPeaG5J.js} +0 -0
  475. /package/dist/web/assets/{nix-B9EAdptu.js → nix-D2Jet9DN.js} +0 -0
  476. /package/dist/web/assets/{nord-DxASd4qG.js → nord-CREVs22j.js} +0 -0
  477. /package/dist/web/assets/{nushell-BsY59i7N.js → nushell-CAiDi_mR.js} +0 -0
  478. /package/dist/web/assets/{objective-c-CoeQAcnP.js → objective-c-CVkmJkC1.js} +0 -0
  479. /package/dist/web/assets/{objective-cpp-BysdFvND.js → objective-cpp-DIKDO1Ly.js} +0 -0
  480. /package/dist/web/assets/{ocaml-CrtQYMMK.js → ocaml-R9qtGQhs.js} +0 -0
  481. /package/dist/web/assets/{odin-B8pz4gIL.js → odin-DTYNQqVr.js} +0 -0
  482. /package/dist/web/assets/{one-dark-pro-3sSHqoqQ.js → one-dark-pro-BSLWUJn5.js} +0 -0
  483. /package/dist/web/assets/{one-light-LUZAvT8g.js → one-light-DbkRXG3t.js} +0 -0
  484. /package/dist/web/assets/{openscad-DcKia-sV.js → openscad-BlPcSnmT.js} +0 -0
  485. /package/dist/web/assets/{pascal-zM5SlmgF.js → pascal-B1Y46ZZB.js} +0 -0
  486. /package/dist/web/assets/{pkl-C_r_zLLt.js → pkl-BhJSJbFv.js} +0 -0
  487. /package/dist/web/assets/{plastic-B3cRtgKD.js → plastic-BzxsCTpi.js} +0 -0
  488. /package/dist/web/assets/{plsql-BzyjheXU.js → plsql-DBba7dyP.js} +0 -0
  489. /package/dist/web/assets/{plus-DcuJuDC3.js → plus-Dm36mgLh.js} +0 -0
  490. /package/dist/web/assets/{po-Dz4OaDNi.js → po-BvgLlnNo.js} +0 -0
  491. /package/dist/web/assets/{poimandres-BBbtYwmR.js → poimandres-DUaI_1JP.js} +0 -0
  492. /package/dist/web/assets/{polar-Che1XC2Z.js → polar-C7uILwJn.js} +0 -0
  493. /package/dist/web/assets/{postcss-DouzwG4F.js → postcss-BgJlpFdw.js} +0 -0
  494. /package/dist/web/assets/{powerquery-YOdcTZmd.js → powerquery-Dn1MIpZu.js} +0 -0
  495. /package/dist/web/assets/{powershell-8ojzYH34.js → powershell-Bo-DYzOS.js} +0 -0
  496. /package/dist/web/assets/{prisma-DCmjceML.js → prisma-CTLs5IdT.js} +0 -0
  497. /package/dist/web/assets/{prolog-ByNNz2pB.js → prolog-QRGun3eG.js} +0 -0
  498. /package/dist/web/assets/{proto-DWMt6Qu1.js → proto-B7PI7apn.js} +0 -0
  499. /package/dist/web/assets/{puppet-osfKyZp4.js → puppet-CBq0tLrP.js} +0 -0
  500. /package/dist/web/assets/{purescript-ClIblkvh.js → purescript-DFewOQb2.js} +0 -0
  501. /package/dist/web/assets/{python-Ctyr4faP.js → python-iWuxKXvT.js} +0 -0
  502. /package/dist/web/assets/{qmldir-CbNgyhnI.js → qmldir-cXiW3AsF.js} +0 -0
  503. /package/dist/web/assets/{qss-LbRHzb21.js → qss-DASwAbBL.js} +0 -0
  504. /package/dist/web/assets/{r-Dvfjp0wc.js → r-TU2eaIPw.js} +0 -0
  505. /package/dist/web/assets/{racket-DI8v8nzD.js → racket-SkRKqrLY.js} +0 -0
  506. /package/dist/web/assets/{raku-CX1q9GW0.js → raku-D31lthkZ.js} +0 -0
  507. /package/dist/web/assets/{react-8hrD3-kv.js → react-DjdYfcEe.js} +0 -0
  508. /package/dist/web/assets/{red-CSz3QEOw.js → red-CTcQZevb.js} +0 -0
  509. /package/dist/web/assets/{reg-FMjhUQE-.js → reg-D8YAsTGf.js} +0 -0
  510. /package/dist/web/assets/{regexp-CCSe1Fc4.js → regexp-CD2uvAWx.js} +0 -0
  511. /package/dist/web/assets/{rel-Ce0UO-OB.js → rel-CAaI-1fg.js} +0 -0
  512. /package/dist/web/assets/{resolve-theme-B9Mgd5GG.js → resolve-theme-B0eotaPq.js} +0 -0
  513. /package/dist/web/assets/{riscv-BFZrdZtB.js → riscv-DR-hJVIj.js} +0 -0
  514. /package/dist/web/assets/{ron-D0t4kvJG.js → ron-CuUCJ0n4.js} +0 -0
  515. /package/dist/web/assets/{rose-pine-HzwmOzHM.js → rose-pine-aFHxW48i.js} +0 -0
  516. /package/dist/web/assets/{rose-pine-dawn-CSp9xAF9.js → rose-pine-dawn-Bqz2sBRY.js} +0 -0
  517. /package/dist/web/assets/{rose-pine-moon-Cnzr2Cw0.js → rose-pine-moon-wqyh0an4.js} +0 -0
  518. /package/dist/web/assets/{rosmsg-DEJ8Snbv.js → rosmsg-CI1ywimO.js} +0 -0
  519. /package/dist/web/assets/{rust-2jBzrC0l.js → rust-p7Imk4G_.js} +0 -0
  520. /package/dist/web/assets/{sass-DD75Izu_.js → sass-C8JfaqCV.js} +0 -0
  521. /package/dist/web/assets/{save-BM4p9_9n.js → save-ignW_jk2.js} +0 -0
  522. /package/dist/web/assets/{scala-DpBKROIu.js → scala-DNxCW1By.js} +0 -0
  523. /package/dist/web/assets/{scheme-DM2jzwUK.js → scheme-BYuUPJoL.js} +0 -0
  524. /package/dist/web/assets/{sdbl-C34Cg6e7.js → sdbl-DbPeJPUr.js} +0 -0
  525. /package/dist/web/assets/{shellscript-DxfzKSgU.js → shellscript-DMiHlR3q.js} +0 -0
  526. /package/dist/web/assets/{shield-check-C3qYSU8a.js → shield-check-BSA9P3nI.js} +0 -0
  527. /package/dist/web/assets/{shield-off-D5tU7gQT.js → shield-off-Cb9J9x_n.js} +0 -0
  528. /package/dist/web/assets/{slack-dark-DIIV3bpD.js → slack-dark-C4xGcQXI.js} +0 -0
  529. /package/dist/web/assets/{slack-ochin-BTkxWjEP.js → slack-ochin-BzgRt_wm.js} +0 -0
  530. /package/dist/web/assets/{smalltalk-Bm0qg6SA.js → smalltalk-LDeL9PYH.js} +0 -0
  531. /package/dist/web/assets/{snazzy-light-ClAuuhn4.js → snazzy-light-CXE7a5j_.js} +0 -0
  532. /package/dist/web/assets/{solarized-dark-93sEWmYT.js → solarized-dark-DgUhY74x.js} +0 -0
  533. /package/dist/web/assets/{solarized-light-C74FvgcO.js → solarized-light-DD9C-H-9.js} +0 -0
  534. /package/dist/web/assets/{solidity-H9fSjkQP.js → solidity-CAbDB4D4.js} +0 -0
  535. /package/dist/web/assets/{splunk-CDTN2iAG.js → splunk-kQREPfIc.js} +0 -0
  536. /package/dist/web/assets/{sql-CoqObhgo.js → sql-CBzeNAD8.js} +0 -0
  537. /package/dist/web/assets/{ssh-config-C3Wv6qRp.js → ssh-config-L1euxrsM.js} +0 -0
  538. /package/dist/web/assets/{stylus-D0uTFXCy.js → stylus-DvBnYniP.js} +0 -0
  539. /package/dist/web/assets/{swift-DtMMgvRI.js → swift-DF5NDQp6.js} +0 -0
  540. /package/dist/web/assets/{synthwave-84-DAroyZBu.js → synthwave-84-DbBhB_Hq.js} +0 -0
  541. /package/dist/web/assets/{system-verilog-Bj7X_lq4.js → system-verilog-D8s2ZW_k.js} +0 -0
  542. /package/dist/web/assets/{systemd-CH8ApCUs.js → systemd-a5-XZJsG.js} +0 -0
  543. /package/dist/web/assets/{table-Di8pv2Y_.js → table-4P8kS7sg.js} +0 -0
  544. /package/dist/web/assets/{talonscript-70lVC3cw.js → talonscript-BLa0URTW.js} +0 -0
  545. /package/dist/web/assets/{tasl-WQR8VslV.js → tasl-DIoV4XcC.js} +0 -0
  546. /package/dist/web/assets/{tcl-caTR_frn.js → tcl-ztYAdXfQ.js} +0 -0
  547. /package/dist/web/assets/{terraform-CVRZ4SZ4.js → terraform-DvpCCiOZ.js} +0 -0
  548. /package/dist/web/assets/{tokyo-night-CDyT1jCI.js → tokyo-night-BkHlYUv0.js} +0 -0
  549. /package/dist/web/assets/{toml-B7D2mIDU.js → toml-acIrxos6.js} +0 -0
  550. /package/dist/web/assets/{tsv-2kdn5dqL.js → tsv-BJB5EVCT.js} +0 -0
  551. /package/dist/web/assets/{tsx-DJfG3fzg.js → tsx-B1MmXGT3.js} +0 -0
  552. /package/dist/web/assets/{turtle-DaQac_UT.js → turtle-DFceTiqd.js} +0 -0
  553. /package/dist/web/assets/{typescript-BLfAIchl.js → typescript-Dz9wU5Y1.js} +0 -0
  554. /package/dist/web/assets/{typespec-ymBaOi_c.js → typespec-CPuYZijj.js} +0 -0
  555. /package/dist/web/assets/{typst-DkvUYMT-.js → typst-CfsCIYv8.js} +0 -0
  556. /package/dist/web/assets/{use-is-mobile-BcuCjH19.js → use-is-mobile-K1a38BwI.js} +0 -0
  557. /package/dist/web/assets/{utils-E0yyGxXt.js → utils-B9H0d3Fh.js} +0 -0
  558. /package/dist/web/assets/{v-D4997FGs.js → v-CGo0jcXA.js} +0 -0
  559. /package/dist/web/assets/{vala-AFg9DmKE.js → vala-AsSR0hrb.js} +0 -0
  560. /package/dist/web/assets/{vb-DNUJ9fOP.js → vb-C7tvbXv1.js} +0 -0
  561. /package/dist/web/assets/{vendor-xterm-QDr0jvpJ.js → vendor-xterm-ClRVIJ-k.js} +0 -0
  562. /package/dist/web/assets/{verilog-BrnAQ3tF.js → verilog--a33ND-p.js} +0 -0
  563. /package/dist/web/assets/{vesper-DCZnFmY0.js → vesper-B_Z0h4pn.js} +0 -0
  564. /package/dist/web/assets/{vhdl-DoK4PjhE.js → vhdl-CWL5dZPN.js} +0 -0
  565. /package/dist/web/assets/{viml-D6EKG66q.js → viml-BglmT14Y.js} +0 -0
  566. /package/dist/web/assets/{vitesse-black-C6KILWdF.js → vitesse-black-RKFsSqQI.js} +0 -0
  567. /package/dist/web/assets/{vitesse-dark-BuSr6OT5.js → vitesse-dark-D7zDWNmc.js} +0 -0
  568. /package/dist/web/assets/{vitesse-light-M-eYyOoe.js → vitesse-light-MAp87W5b.js} +0 -0
  569. /package/dist/web/assets/{vyper-CwSN64Jn.js → vyper-CgCBYg1G.js} +0 -0
  570. /package/dist/web/assets/{wasm-BhQEkzil.js → wasm-BOG7ZeTT.js} +0 -0
  571. /package/dist/web/assets/{wasm-CVlf9Jwb.js → wasm-Bd258nS1.js} +0 -0
  572. /package/dist/web/assets/{wenyan-BC7irgM3.js → wenyan-DpShPKXZ.js} +0 -0
  573. /package/dist/web/assets/{wgsl-W-3UHMDO.js → wgsl-BakcCblK.js} +0 -0
  574. /package/dist/web/assets/{wikitext-T1DoFcm8.js → wikitext-NroRWVAO.js} +0 -0
  575. /package/dist/web/assets/{wit-DIrx_eCI.js → wit-B5CM2pg6.js} +0 -0
  576. /package/dist/web/assets/{wolfram-Cza4b443.js → wolfram-7MTFBJpR.js} +0 -0
  577. /package/dist/web/assets/{x-BsFLg-T8.js → x-BtzqXv1z.js} +0 -0
  578. /package/dist/web/assets/{yaml-DOZ10aZe.js → yaml-Bwr01G2K.js} +0 -0
  579. /package/dist/web/assets/{zenscript-DDAXkseY.js → zenscript-Dj8GATvi.js} +0 -0
  580. /package/dist/web/assets/{zig-CrzwMpQE.js → zig-LAE-fbS-.js} +0 -0
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-FhOqtrmT.js";import{t}from"./java-PRMSQp24.js";var n=e({default:()=>i}),r=Object.freeze(JSON.parse(`{"displayName":"XML","name":"xml","patterns":[{"begin":"(<\\\\?)\\\\s*([-0-9A-Z_a-z]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"}},"end":"(\\\\?>)","name":"meta.tag.preprocessor.xml","patterns":[{"match":" ([-A-Za-z]+)","name":"entity.other.attribute-name.xml"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"begin":"(<!)(DOCTYPE)\\\\s+([:A-Z_a-z][-.0-:A-Z_a-z]*)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.doctype.xml"},"3":{"name":"variable.language.documentroot.xml"}},"end":"\\\\s*(>)","name":"meta.tag.sgml.doctype.xml","patterns":[{"include":"#internalSubset"}]},{"include":"#comments"},{"begin":"(<)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(?=(\\\\s[^>]*)?></\\\\2>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"},"3":{"name":"entity.name.tag.namespace.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)(</)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(>)","endCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"punctuation.definition.tag.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"entity.name.tag.namespace.xml"},"5":{"name":"punctuation.separator.namespace.xml"},"6":{"name":"entity.name.tag.localname.xml"},"7":{"name":"punctuation.definition.tag.xml"}},"name":"meta.tag.no-content.xml","patterns":[{"include":"#tagStuff"}]},{"begin":"(</?)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(/?>)","name":"meta.tag.xml","patterns":[{"include":"#tagStuff"}]},{"include":"#entity"},{"include":"#bare-ampersand"},{"begin":"<%@","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java-props.embedded.xml","patterns":[{"match":"page|include|taglib","name":"keyword.other.page-props.xml"}]},{"begin":"<%[!=]?(?!--)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"(?!--)%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java.embedded.xml","patterns":[{"include":"source.java"}]},{"begin":"<!\\\\[CDATA\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"]]>","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.unquoted.cdata.xml"}],"repository":{"EntityDecl":{"begin":"(<!)(ENTITY)\\\\s+(%\\\\s+)?([:A-Z_a-z][-.0-:A-Z_a-z]*)(\\\\s+(?:SYSTEM|PUBLIC)\\\\s+)?","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.entity.xml"},"3":{"name":"punctuation.definition.entity.xml"},"4":{"name":"variable.language.entity.xml"},"5":{"name":"keyword.other.entitytype.xml"}},"end":"(>)","patterns":[{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},"bare-ampersand":{"match":"&","name":"invalid.illegal.bad-ampersand.xml"},"comments":{"patterns":[{"begin":"<%--","captures":{"0":{"name":"punctuation.definition.comment.xml"},"end":"--%>","name":"comment.block.xml"}},{"begin":"<!--","captures":{"0":{"name":"punctuation.definition.comment.xml"}},"end":"-->","name":"comment.block.xml","patterns":[{"begin":"--(?!>)","captures":{"0":{"name":"invalid.illegal.bad-comments-or-CDATA.xml"}}}]}]},"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"entity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(&)([:A-Z_a-z][-.0-:A-Z_a-z]*|#[0-9]+|#x\\\\h+)(;)","name":"constant.character.entity.xml"},"internalSubset":{"begin":"(\\\\[)","captures":{"1":{"name":"punctuation.definition.constant.xml"}},"end":"(])","name":"meta.internalsubset.xml","patterns":[{"include":"#EntityDecl"},{"include":"#parameterEntity"},{"include":"#comments"}]},"parameterEntity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(%)([:A-Z_a-z][-.0-:A-Z_a-z]*)(;)","name":"constant.character.parameter-entity.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"tagStuff":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":"(?:^|\\\\s+)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)\\\\s*="},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]}},"scopeName":"text.xml","embeddedLangs":["java"]}`)),i=[...t,r];export{n,i as t};
1
+ import{r as e}from"./rolldown-runtime-FhOqtrmT.js";import{t}from"./java-Bzo8yIal.js";var n=e({default:()=>i}),r=Object.freeze(JSON.parse(`{"displayName":"XML","name":"xml","patterns":[{"begin":"(<\\\\?)\\\\s*([-0-9A-Z_a-z]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"}},"end":"(\\\\?>)","name":"meta.tag.preprocessor.xml","patterns":[{"match":" ([-A-Za-z]+)","name":"entity.other.attribute-name.xml"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"begin":"(<!)(DOCTYPE)\\\\s+([:A-Z_a-z][-.0-:A-Z_a-z]*)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.doctype.xml"},"3":{"name":"variable.language.documentroot.xml"}},"end":"\\\\s*(>)","name":"meta.tag.sgml.doctype.xml","patterns":[{"include":"#internalSubset"}]},{"include":"#comments"},{"begin":"(<)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(?=(\\\\s[^>]*)?></\\\\2>)","beginCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.xml"},"3":{"name":"entity.name.tag.namespace.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)(</)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(>)","endCaptures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"punctuation.definition.tag.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"entity.name.tag.namespace.xml"},"5":{"name":"punctuation.separator.namespace.xml"},"6":{"name":"entity.name.tag.localname.xml"},"7":{"name":"punctuation.definition.tag.xml"}},"name":"meta.tag.no-content.xml","patterns":[{"include":"#tagStuff"}]},{"begin":"(</?)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(/?>)","name":"meta.tag.xml","patterns":[{"include":"#tagStuff"}]},{"include":"#entity"},{"include":"#bare-ampersand"},{"begin":"<%@","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java-props.embedded.xml","patterns":[{"match":"page|include|taglib","name":"keyword.other.page-props.xml"}]},{"begin":"<%[!=]?(?!--)","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.xml"}},"end":"(?!--)%>","endCaptures":{"0":{"name":"punctuation.section.embedded.end.xml"}},"name":"source.java.embedded.xml","patterns":[{"include":"source.java"}]},{"begin":"<!\\\\[CDATA\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"]]>","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.unquoted.cdata.xml"}],"repository":{"EntityDecl":{"begin":"(<!)(ENTITY)\\\\s+(%\\\\s+)?([:A-Z_a-z][-.0-:A-Z_a-z]*)(\\\\s+(?:SYSTEM|PUBLIC)\\\\s+)?","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"keyword.other.entity.xml"},"3":{"name":"punctuation.definition.entity.xml"},"4":{"name":"variable.language.entity.xml"},"5":{"name":"keyword.other.entitytype.xml"}},"end":"(>)","patterns":[{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},"bare-ampersand":{"match":"&","name":"invalid.illegal.bad-ampersand.xml"},"comments":{"patterns":[{"begin":"<%--","captures":{"0":{"name":"punctuation.definition.comment.xml"},"end":"--%>","name":"comment.block.xml"}},{"begin":"<!--","captures":{"0":{"name":"punctuation.definition.comment.xml"}},"end":"-->","name":"comment.block.xml","patterns":[{"begin":"--(?!>)","captures":{"0":{"name":"invalid.illegal.bad-comments-or-CDATA.xml"}}}]}]},"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"entity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(&)([:A-Z_a-z][-.0-:A-Z_a-z]*|#[0-9]+|#x\\\\h+)(;)","name":"constant.character.entity.xml"},"internalSubset":{"begin":"(\\\\[)","captures":{"1":{"name":"punctuation.definition.constant.xml"}},"end":"(])","name":"meta.internalsubset.xml","patterns":[{"include":"#EntityDecl"},{"include":"#parameterEntity"},{"include":"#comments"}]},"parameterEntity":{"captures":{"1":{"name":"punctuation.definition.constant.xml"},"3":{"name":"punctuation.definition.constant.xml"}},"match":"(%)([:A-Z_a-z][-.0-:A-Z_a-z]*)(;)","name":"constant.character.parameter-entity.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml","patterns":[{"include":"#entity"},{"include":"#bare-ampersand"}]},"tagStuff":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":"(?:^|\\\\s+)(?:([-.\\\\w]+)((:)))?([-.:\\\\w]+)\\\\s*="},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]}},"scopeName":"text.xml","embeddedLangs":["java"]}`)),i=[...t,r];export{n,i as t};
@@ -1 +1 @@
1
- import{t as e}from"./xml-BHzIcDWI.js";var t=Object.freeze(JSON.parse(`{"displayName":"XSL","name":"xsl","patterns":[{"begin":"(<)(xsl)((:))(template)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)","name":"meta.tag.xml.template","patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":" (?:([-0-9A-Z_a-z]+)((:)))?([-A-Za-z]+)"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"include":"text.xml"}],"repository":{"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml"}},"scopeName":"text.xml.xsl","embeddedLangs":["xml"]}`)),n=[...e,t];export{n as default};
1
+ import{t as e}from"./xml-C-vM2m7J.js";var t=Object.freeze(JSON.parse(`{"displayName":"XSL","name":"xsl","patterns":[{"begin":"(<)(xsl)((:))(template)","captures":{"1":{"name":"punctuation.definition.tag.xml"},"2":{"name":"entity.name.tag.namespace.xml"},"3":{"name":"entity.name.tag.xml"},"4":{"name":"punctuation.separator.namespace.xml"},"5":{"name":"entity.name.tag.localname.xml"}},"end":"(>)","name":"meta.tag.xml.template","patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.namespace.xml"},"2":{"name":"entity.other.attribute-name.xml"},"3":{"name":"punctuation.separator.namespace.xml"},"4":{"name":"entity.other.attribute-name.localname.xml"}},"match":" (?:([-0-9A-Z_a-z]+)((:)))?([-A-Za-z]+)"},{"include":"#doublequotedString"},{"include":"#singlequotedString"}]},{"include":"text.xml"}],"repository":{"doublequotedString":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.double.xml"},"singlequotedString":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.xml"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.xml"}},"name":"string.quoted.single.xml"}},"scopeName":"text.xml.xsl","embeddedLangs":["xml"]}`)),n=[...e,t];export{n as default};
@@ -39,33 +39,36 @@
39
39
  <link rel="preconnect" href="https://fonts.googleapis.com" />
40
40
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
41
41
  <link href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600;700&family=Geist:wght@400;500;600;700&display=swap" rel="stylesheet" />
42
- <script type="module" crossorigin src="/assets/index-I2ik0ZF7.js"></script>
42
+ <script type="module" crossorigin src="/assets/index-XoDY9bc0.js"></script>
43
43
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-FhOqtrmT.js">
44
- <link rel="modulepreload" crossorigin href="/assets/vendor-mermaid-CYOBtZtD.js">
44
+ <link rel="modulepreload" crossorigin href="/assets/vendor-mermaid-C977xNeE.js">
45
45
  <link rel="modulepreload" crossorigin href="/assets/vendor-markdown-CKTlmXbz.js">
46
- <link rel="modulepreload" crossorigin href="/assets/vendor-ui-DMRGWRuc.js">
47
- <link rel="modulepreload" crossorigin href="/assets/utils-E0yyGxXt.js">
46
+ <link rel="modulepreload" crossorigin href="/assets/vendor-ui-CXJtBULr.js">
47
+ <link rel="modulepreload" crossorigin href="/assets/utils-B9H0d3Fh.js">
48
48
  <link rel="modulepreload" crossorigin href="/assets/createLucideIcon-ConhwJnb.js">
49
- <link rel="modulepreload" crossorigin href="/assets/x-BsFLg-T8.js">
50
- <link rel="modulepreload" crossorigin href="/assets/dialog-HHdNInEH.js">
49
+ <link rel="modulepreload" crossorigin href="/assets/x-BtzqXv1z.js">
50
+ <link rel="modulepreload" crossorigin href="/assets/dialog-D__LRQTn.js">
51
51
  <link rel="modulepreload" crossorigin href="/assets/eye-off-Rq1n2-oe.js">
52
- <link rel="modulepreload" crossorigin href="/assets/bot-E9mcVZnr.js">
53
- <link rel="modulepreload" crossorigin href="/assets/chevron-right-DeUue2aK.js">
54
- <link rel="modulepreload" crossorigin href="/assets/context-menu-DIiZdfbE.js">
55
- <link rel="modulepreload" crossorigin href="/assets/use-is-mobile-BcuCjH19.js">
56
- <link rel="modulepreload" crossorigin href="/assets/sparkles-B3DmG8PJ.js">
57
- <link rel="modulepreload" crossorigin href="/assets/database-COYAMZaw.js">
58
- <link rel="modulepreload" crossorigin href="/assets/plus-DcuJuDC3.js">
59
- <link rel="modulepreload" crossorigin href="/assets/api-client-COQtP-dB.js">
60
- <link rel="modulepreload" crossorigin href="/assets/react-8hrD3-kv.js">
61
- <link rel="modulepreload" crossorigin href="/assets/api-settings-Do0Z0IRN.js">
62
- <link rel="modulepreload" crossorigin href="/assets/project-store-D0ALup9Z.js">
63
- <link rel="modulepreload" crossorigin href="/assets/panel-store-CpKvXNnm.js">
64
- <link rel="modulepreload" crossorigin href="/assets/settings-store-B3LfpCPa.js">
65
- <link rel="modulepreload" crossorigin href="/assets/tab-store-BQmDVh9c.js">
66
- <link rel="modulepreload" crossorigin href="/assets/apply-theme-BSJDABU3.js">
67
- <link rel="modulepreload" crossorigin href="/assets/resolve-theme-B9Mgd5GG.js">
68
- <link rel="stylesheet" crossorigin href="/assets/index-CVJmlKhp.css">
52
+ <link rel="modulepreload" crossorigin href="/assets/bot-BHXjpQ7x.js">
53
+ <link rel="modulepreload" crossorigin href="/assets/chevron-right-CtcHmZg9.js">
54
+ <link rel="modulepreload" crossorigin href="/assets/context-menu-BSE5yuMG.js">
55
+ <link rel="modulepreload" crossorigin href="/assets/use-is-mobile-K1a38BwI.js">
56
+ <link rel="modulepreload" crossorigin href="/assets/clock-B1CPBp2g.js">
57
+ <link rel="modulepreload" crossorigin href="/assets/sparkles-BvJ1EGWd.js">
58
+ <link rel="modulepreload" crossorigin href="/assets/copy-Su9m2utd.js">
59
+ <link rel="modulepreload" crossorigin href="/assets/database-Dj0DxgtX.js">
60
+ <link rel="modulepreload" crossorigin href="/assets/plus-Dm36mgLh.js">
61
+ <link rel="modulepreload" crossorigin href="/assets/api-client-B9OFv3nY.js">
62
+ <link rel="modulepreload" crossorigin href="/assets/react-DjdYfcEe.js">
63
+ <link rel="modulepreload" crossorigin href="/assets/mobile-bottom-sheet-CzRXE6mY.js">
64
+ <link rel="modulepreload" crossorigin href="/assets/api-settings-DGhshDRg.js">
65
+ <link rel="modulepreload" crossorigin href="/assets/project-store-D1D1MN03.js">
66
+ <link rel="modulepreload" crossorigin href="/assets/panel-store-gbNJvZB_.js">
67
+ <link rel="modulepreload" crossorigin href="/assets/settings-store-Bm7uL8VA.js">
68
+ <link rel="modulepreload" crossorigin href="/assets/tab-store-DnNnaAcE.js">
69
+ <link rel="modulepreload" crossorigin href="/assets/apply-theme-CMQXnUAa.js">
70
+ <link rel="modulepreload" crossorigin href="/assets/resolve-theme-B0eotaPq.js">
71
+ <link rel="stylesheet" crossorigin href="/assets/index-YCTraslE.css">
69
72
  <link rel="manifest" href="/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script></head>
70
73
  <body class="text-text font-sans antialiased" style="background: var(--bg)">
71
74
  <!-- FOUC guard: apply the persisted theme mode before first paint.
package/dist/web/sw.js CHANGED
@@ -1 +1 @@
1
- try{self[`workbox:core:7.3.0`]&&_()}catch{}var e=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},t=class extends Error{constructor(t,n){let r=e(t,n);super(r),this.name=t,this.details=n}},n={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},r=e=>[n.prefix,e,n.suffix].filter(e=>e&&e.length>0).join(`-`),i=e=>{for(let t of Object.keys(n))e(t)},a={updateDetails:e=>{i(t=>{typeof e[t]==`string`&&(n[t]=e[t])})},getGoogleAnalyticsName:e=>e||r(n.googleAnalytics),getPrecacheName:e=>e||r(n.precache),getPrefix:()=>n.prefix,getRuntimeName:e=>e||r(n.runtime),getSuffix:()=>n.suffix};function o(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.3.0`]&&_()}catch{}var s=`__WB_REVISION__`;function c(e){if(!e)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:n,url:r}=e;if(!r)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(!n){let e=new URL(r,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(r,location.href),a=new URL(r,location.href);return i.searchParams.set(s,n),{cacheKey:i.href,url:a.href}}var l=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},u=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function f(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function p(e,n){let r=null;if(e.url&&(r=new URL(e.url).origin),r!==self.location.origin)throw new t(`cross-origin-copy-response`,{origin:r});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=n?n(a):a,s=f()?i.body:await i.blob();return new Response(s,o)}var m=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function h(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function g(e,t,n,r){let i=h(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===h(t.url,n))return e.match(t,r)}var v=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},y=new Set;async function b(){for(let e of y)await e()}function x(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.3.0`]&&_()}catch{}function S(e){return typeof e==`string`?new Request(e):e}var C=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new v,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:n}=this,r=S(e);if(r.mode===`navigate`&&n instanceof FetchEvent&&n.preloadResponse){let e=await n.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?r.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))r=await e({request:r.clone(),event:n})}catch(e){if(e instanceof Error)throw new t(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=r.clone();try{let e;e=await fetch(r,r.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let t of this.iterateCallbacks(`fetchDidSucceed`))e=await t({event:n,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:n,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=S(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,n){let r=S(e);await x(0);let i=await this.getCacheKey(r,`write`);if(!n)throw new t(`cache-put-with-no-response`,{url:m(i.url)});let a=await this._ensureResponseSafeToCache(n);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await g(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await b(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=S(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},w=class{constructor(e={}){this.cacheName=a.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new C(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,n,r){await e.runCallbacks(`handlerWillStart`,{event:r,request:n});let i;try{if(i=await this._handle(n,e),!i||i.type===`error`)throw new t(`no-response`,{url:n.url})}catch(t){if(t instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:t,event:r,request:n}),i)break}if(!i)throw t}for(let t of e.iterateCallbacks(`handlerWillRespond`))i=await t({event:r,request:n,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},T=class e extends w{constructor(t={}){t.cacheName=a.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,n){let r,i=n.params||{};if(this._fallbackToNetwork){let t=i.integrity,a=e.integrity,o=!a||a===t;r=await n.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||t})),t&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await n.cachePut(e,r.clone()))}else throw new t(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return r}async _handleInstall(e,n){this._useDefaultCacheabilityPluginIfNeeded();let r=await n.fetch(e);if(!await n.cachePut(e,r.clone()))throw new t(`bad-precaching-response`,{url:e.url,status:r.status});return r}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};T.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},T.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await p(e):e}};var E=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new T({cacheName:a.getPrecacheName(e),plugins:[...t,new u({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let n=[];for(let r of e){typeof r==`string`?n.push(r):r&&r.revision===void 0&&n.push(r.url);let{cacheKey:e,url:i}=c(r),a=typeof r!=`string`&&r.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new t(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof r!=`string`&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new t(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,r.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),n.length>0){let e=`Workbox is precaching URLs without revision info: ${n.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return o(e,async()=>{let t=new l;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return o(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let n=this.getCacheKeyForURL(e);if(!n)throw new t(`non-precached-url`,{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:n},t.params),this.strategy.handle(t))}},D,O=()=>(D||=new E,D);try{self[`workbox:routing:7.3.0`]&&_()}catch{}var k=e=>e&&typeof e==`object`?e:{handle:e},A=class{constructor(e,t,n=`GET`){this.handler=k(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=k(e)}},j=class extends A{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&!(t.origin!==location.origin&&n.index!==0))return n.slice(1)},t,n)}},M=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,k(e))}setCatchHandler(e){this._catchHandler=k(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t(`unregister-route-but-not-found-with-method`,{method:e.method});let n=this._routes.get(e.method).indexOf(e);if(n>-1)this._routes.get(e.method).splice(n,1);else throw new t(`unregister-route-route-not-registered`)}},N,P=()=>(N||(N=new M,N.addFetchListener(),N.addCacheListener()),N);function F(e,n,r){let i;if(typeof e==`string`){let t=new URL(e,location.href);i=new A(({url:e})=>e.href===t.href,n,r)}else if(e instanceof RegExp)i=new j(e,n,r);else if(typeof e==`function`)i=new A(e,n,r);else if(e instanceof A)i=e;else throw new t(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return P().registerRoute(i),i}function I(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*L(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=I(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var R=class extends A{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of L(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function z(e){F(new R(O(),e))}function B(e){O().precache(e)}function V(e,t){B(e),z(t)}V([{"revision":"1872c500de691dce40960bb85481de07","url":"registerSW.js"},{"revision":"a54248ce8b9473064e6ff575935af857","url":"index.html"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"0797b652383bb69d817f1695b75742ec","url":"donate-qr.png"},{"revision":"5fbed3afabcee1da7a57ab9843d1708d","url":"monacoeditorwork/ts.worker.bundle.js"},{"revision":"79a27ce5c41fb45dcca0dddd989ba349","url":"monacoeditorwork/json.worker.bundle.js"},{"revision":"76b49bcdbf25f813a1cd56e57dd1a9a5","url":"monacoeditorwork/html.worker.bundle.js"},{"revision":"73b4ae87f3bd1d29e9c5144f8a014e9e","url":"monacoeditorwork/editor.worker.bundle.js"},{"revision":"cab2bd6f80662931af342deafb01efc1","url":"monacoeditorwork/css.worker.bundle.js"},{"revision":null,"url":"assets/zig-CrzwMpQE.js"},{"revision":null,"url":"assets/zenscript-DDAXkseY.js"},{"revision":null,"url":"assets/yaml-DOZ10aZe.js"},{"revision":null,"url":"assets/xsl-DTLhN7uu.js"},{"revision":null,"url":"assets/xml-BHzIcDWI.js"},{"revision":null,"url":"assets/x-BsFLg-T8.js"},{"revision":null,"url":"assets/wolfram-Cza4b443.js"},{"revision":null,"url":"assets/wit-DIrx_eCI.js"},{"revision":null,"url":"assets/wikitext-T1DoFcm8.js"},{"revision":null,"url":"assets/wgsl-W-3UHMDO.js"},{"revision":null,"url":"assets/wenyan-BC7irgM3.js"},{"revision":null,"url":"assets/wasm-CVlf9Jwb.js"},{"revision":null,"url":"assets/wasm-BhQEkzil.js"},{"revision":null,"url":"assets/vyper-CwSN64Jn.js"},{"revision":null,"url":"assets/vue-vine-BbBB3V_G.js"},{"revision":null,"url":"assets/vue-m75pWowk.js"},{"revision":null,"url":"assets/vue-html-odHs7IMn.js"},{"revision":null,"url":"assets/vitesse-light-M-eYyOoe.js"},{"revision":null,"url":"assets/vitesse-dark-BuSr6OT5.js"},{"revision":null,"url":"assets/vitesse-black-C6KILWdF.js"},{"revision":null,"url":"assets/viml-D6EKG66q.js"},{"revision":null,"url":"assets/video-preview-D-S_YnG6.js"},{"revision":null,"url":"assets/vhdl-DoK4PjhE.js"},{"revision":null,"url":"assets/vesper-DCZnFmY0.js"},{"revision":null,"url":"assets/verilog-BrnAQ3tF.js"},{"revision":null,"url":"assets/vendor-xterm-QDr0jvpJ.js"},{"revision":null,"url":"assets/vendor-xterm-DkTCHfhq.css"},{"revision":null,"url":"assets/vendor-ui-DMRGWRuc.js"},{"revision":null,"url":"assets/vendor-mermaid-CYOBtZtD.js"},{"revision":null,"url":"assets/vendor-markdown-CKTlmXbz.js"},{"revision":null,"url":"assets/vb-DNUJ9fOP.js"},{"revision":null,"url":"assets/vala-AFg9DmKE.js"},{"revision":null,"url":"assets/v-D4997FGs.js"},{"revision":null,"url":"assets/utils-E0yyGxXt.js"},{"revision":null,"url":"assets/use-monaco-theme-k-17kQqf.js"},{"revision":null,"url":"assets/use-is-mobile-BcuCjH19.js"},{"revision":null,"url":"assets/use-blob-url-B3YovXF6.js"},{"revision":null,"url":"assets/typst-DkvUYMT-.js"},{"revision":null,"url":"assets/typespec-ymBaOi_c.js"},{"revision":null,"url":"assets/typescript-BLfAIchl.js"},{"revision":null,"url":"assets/twig-B7VUm2Ca.js"},{"revision":null,"url":"assets/turtle-DaQac_UT.js"},{"revision":null,"url":"assets/tsx-DJfG3fzg.js"},{"revision":null,"url":"assets/tsv-2kdn5dqL.js"},{"revision":null,"url":"assets/ts-tags-BovP9TMu.js"},{"revision":null,"url":"assets/treemap-KZPCXAKY-CjUqpVnS.js"},{"revision":null,"url":"assets/tool-cards-Bdx04yYD.js"},{"revision":null,"url":"assets/toml-B7D2mIDU.js"},{"revision":null,"url":"assets/tokyo-night-CDyT1jCI.js"},{"revision":null,"url":"assets/tex-ugJpgYPc.js"},{"revision":null,"url":"assets/terraform-CVRZ4SZ4.js"},{"revision":null,"url":"assets/terminal-tab-CciNqtMc.js"},{"revision":null,"url":"assets/templ-CPxlP4vF.js"},{"revision":null,"url":"assets/tcl-caTR_frn.js"},{"revision":null,"url":"assets/tasl-WQR8VslV.js"},{"revision":null,"url":"assets/talonscript-70lVC3cw.js"},{"revision":null,"url":"assets/table-Di8pv2Y_.js"},{"revision":null,"url":"assets/tab-store-BQmDVh9c.js"},{"revision":null,"url":"assets/systemd-CH8ApCUs.js"},{"revision":null,"url":"assets/system-verilog-Bj7X_lq4.js"},{"revision":null,"url":"assets/system-monitor-tab-De3oz9zD.js"},{"revision":null,"url":"assets/synthwave-84-DAroyZBu.js"},{"revision":null,"url":"assets/swift-DtMMgvRI.js"},{"revision":null,"url":"assets/svelte-23si1KV5.js"},{"revision":null,"url":"assets/surrealql-Dkz0DPK8.js"},{"revision":null,"url":"assets/stylus-D0uTFXCy.js"},{"revision":null,"url":"assets/stata-Bk3cgfXJ.js"},{"revision":null,"url":"assets/ssh-config-C3Wv6qRp.js"},{"revision":null,"url":"assets/sqlite-viewer-CEObRQ7n.js"},{"revision":null,"url":"assets/sql-query-editor-CT5M9PKQ.js"},{"revision":null,"url":"assets/sql-CoqObhgo.js"},{"revision":null,"url":"assets/splunk-CDTN2iAG.js"},{"revision":null,"url":"assets/sparql-CsM6F2Yv.js"},{"revision":null,"url":"assets/sparkles-B3DmG8PJ.js"},{"revision":null,"url":"assets/soy-DrLNhqfp.js"},{"revision":null,"url":"assets/solidity-H9fSjkQP.js"},{"revision":null,"url":"assets/solarized-light-C74FvgcO.js"},{"revision":null,"url":"assets/solarized-dark-93sEWmYT.js"},{"revision":null,"url":"assets/snazzy-light-ClAuuhn4.js"},{"revision":null,"url":"assets/smalltalk-Bm0qg6SA.js"},{"revision":null,"url":"assets/slack-ochin-BTkxWjEP.js"},{"revision":null,"url":"assets/slack-dark-DIIV3bpD.js"},{"revision":null,"url":"assets/shield-off-D5tU7gQT.js"},{"revision":null,"url":"assets/shield-check-C3qYSU8a.js"},{"revision":null,"url":"assets/shellsession-D2OCI4Gv.js"},{"revision":null,"url":"assets/shellscript-DxfzKSgU.js"},{"revision":null,"url":"assets/shaderlab-nM5YZwa5.js"},{"revision":null,"url":"assets/settings-tab-DIuR1VIc.js"},{"revision":null,"url":"assets/settings-store-B3LfpCPa.js"},{"revision":null,"url":"assets/sdbl-C34Cg6e7.js"},{"revision":null,"url":"assets/scss-GAyp5euH.js"},{"revision":null,"url":"assets/scheme-DM2jzwUK.js"},{"revision":null,"url":"assets/scala-DpBKROIu.js"},{"revision":null,"url":"assets/save-BM4p9_9n.js"},{"revision":null,"url":"assets/sass-DD75Izu_.js"},{"revision":null,"url":"assets/sas-BtnF4zaV.js"},{"revision":null,"url":"assets/rust-2jBzrC0l.js"},{"revision":null,"url":"assets/ruby-O_z2NTLY.js"},{"revision":null,"url":"assets/rst-C4AZyQQl.js"},{"revision":null,"url":"assets/rosmsg-DEJ8Snbv.js"},{"revision":null,"url":"assets/rose-pine-moon-Cnzr2Cw0.js"},{"revision":null,"url":"assets/rose-pine-HzwmOzHM.js"},{"revision":null,"url":"assets/rose-pine-dawn-CSp9xAF9.js"},{"revision":null,"url":"assets/ron-D0t4kvJG.js"},{"revision":null,"url":"assets/rolldown-runtime-FhOqtrmT.js"},{"revision":null,"url":"assets/riscv-BFZrdZtB.js"},{"revision":null,"url":"assets/resolve-theme-B9Mgd5GG.js"},{"revision":null,"url":"assets/rel-Ce0UO-OB.js"},{"revision":null,"url":"assets/regexp-CCSe1Fc4.js"},{"revision":null,"url":"assets/reg-FMjhUQE-.js"},{"revision":null,"url":"assets/red-CSz3QEOw.js"},{"revision":null,"url":"assets/react-8hrD3-kv.js"},{"revision":null,"url":"assets/razor-8tvJXsO3.js"},{"revision":null,"url":"assets/raku-CX1q9GW0.js"},{"revision":null,"url":"assets/radar-KQ55EAFF-QtJGaSGt.js"},{"revision":null,"url":"assets/racket-DI8v8nzD.js"},{"revision":null,"url":"assets/r-Dvfjp0wc.js"},{"revision":null,"url":"assets/qss-LbRHzb21.js"},{"revision":null,"url":"assets/qmldir-CbNgyhnI.js"},{"revision":null,"url":"assets/qml-CyQVzNXS.js"},{"revision":null,"url":"assets/python-Ctyr4faP.js"},{"revision":null,"url":"assets/purescript-ClIblkvh.js"},{"revision":null,"url":"assets/puppet-osfKyZp4.js"},{"revision":null,"url":"assets/pug-D2aO-l2T.js"},{"revision":null,"url":"assets/proto-DWMt6Qu1.js"},{"revision":null,"url":"assets/prolog-ByNNz2pB.js"},{"revision":null,"url":"assets/project-store-D0ALup9Z.js"},{"revision":null,"url":"assets/prisma-DCmjceML.js"},{"revision":null,"url":"assets/powershell-8ojzYH34.js"},{"revision":null,"url":"assets/powerquery-YOdcTZmd.js"},{"revision":null,"url":"assets/postgres-viewer-CjrM15gz.js"},{"revision":null,"url":"assets/postcss-DouzwG4F.js"},{"revision":null,"url":"assets/polar-Che1XC2Z.js"},{"revision":null,"url":"assets/poimandres-BBbtYwmR.js"},{"revision":null,"url":"assets/po-Dz4OaDNi.js"},{"revision":null,"url":"assets/plus-DcuJuDC3.js"},{"revision":null,"url":"assets/plsql-BzyjheXU.js"},{"revision":null,"url":"assets/plastic-B3cRtgKD.js"},{"revision":null,"url":"assets/pkl-C_r_zLLt.js"},{"revision":null,"url":"assets/pie-UPGHQEXC-CM29eKDR.js"},{"revision":null,"url":"assets/php-D-DLTnWJ.js"},{"revision":null,"url":"assets/perl-Bd_0l-b4.js"},{"revision":null,"url":"assets/pdf-preview-DEn8amrO.js"},{"revision":null,"url":"assets/pascal-zM5SlmgF.js"},{"revision":null,"url":"assets/panel-store-CpKvXNnm.js"},{"revision":null,"url":"assets/packet-RMMSAZCW-D5IUZ66-.js"},{"revision":null,"url":"assets/openscad-DcKia-sV.js"},{"revision":null,"url":"assets/one-light-LUZAvT8g.js"},{"revision":null,"url":"assets/one-dark-pro-3sSHqoqQ.js"},{"revision":null,"url":"assets/odin-B8pz4gIL.js"},{"revision":null,"url":"assets/ocaml-CrtQYMMK.js"},{"revision":null,"url":"assets/objective-cpp-BysdFvND.js"},{"revision":null,"url":"assets/objective-c-CoeQAcnP.js"},{"revision":null,"url":"assets/nushell-BsY59i7N.js"},{"revision":null,"url":"assets/number-overlay-editor-CunvWJnN.js"},{"revision":null,"url":"assets/notification-store-Dek7ClI2.js"},{"revision":null,"url":"assets/nord-DxASd4qG.js"},{"revision":null,"url":"assets/nix-B9EAdptu.js"},{"revision":null,"url":"assets/nim-BrMojX4O.js"},{"revision":null,"url":"assets/night-owl-light-CC-brflp.js"},{"revision":null,"url":"assets/night-owl-CBQBcbmw.js"},{"revision":null,"url":"assets/nginx-ByvWruGD.js"},{"revision":null,"url":"assets/nextflow-groovy-CMy5-Z4k.js"},{"revision":null,"url":"assets/nextflow-Adq02pv-.js"},{"revision":null,"url":"assets/narrat-BXGbPwG3.js"},{"revision":null,"url":"assets/move-BvhjG2ic.js"},{"revision":null,"url":"assets/moonbit-C9roWxMb.js"},{"revision":null,"url":"assets/monokai-D9vrJ8JM.js"},{"revision":null,"url":"assets/mojo-q9wuEYKR.js"},{"revision":null,"url":"assets/mipsasm-DYyZAum-.js"},{"revision":null,"url":"assets/min-light-Bxw0_Gqq.js"},{"revision":null,"url":"assets/min-dark-BX-xHAD2.js"},{"revision":null,"url":"assets/mermaid-DlR4U4Pe.js"},{"revision":null,"url":"assets/mdx-D4kZ6c6G.js"},{"revision":null,"url":"assets/mdc-omkodQB5.js"},{"revision":null,"url":"assets/matlab-tHQDNC9G.js"},{"revision":null,"url":"assets/material-theme-rbV8EefR.js"},{"revision":null,"url":"assets/material-theme-palenight-ztiOCPbw.js"},{"revision":null,"url":"assets/material-theme-ocean-CX_CHnQq.js"},{"revision":null,"url":"assets/material-theme-lighter-B0CBBjBw.js"},{"revision":null,"url":"assets/material-theme-darker-BZrskvoo.js"},{"revision":null,"url":"assets/marko-HGo5Qtz4.js"},{"revision":null,"url":"assets/markdown-renderer-xzyhJklS.js"},{"revision":null,"url":"assets/markdown-renderer-DSxSupDq.js"},{"revision":null,"url":"assets/markdown-BQNMNiYS.js"},{"revision":null,"url":"assets/make-CqNL10gS.js"},{"revision":null,"url":"assets/luau-B1vcBzl8.js"},{"revision":null,"url":"assets/lua-D8NNsLbC.js"},{"revision":null,"url":"assets/logo-DUinJheI.js"},{"revision":null,"url":"assets/log-QW3dqr1D.js"},{"revision":null,"url":"assets/llvm-6UDP3NQb.js"},{"revision":null,"url":"assets/liquid-KNJEBOwW.js"},{"revision":null,"url":"assets/light-plus-B3BLlguG.js"},{"revision":null,"url":"assets/libesm-DdtEjhIi.js"},{"revision":null,"url":"assets/lib-DTaN9riD.js"},{"revision":null,"url":"assets/less-Dfn9YC_2.js"},{"revision":null,"url":"assets/lean-CJ_KLkrJ.js"},{"revision":null,"url":"assets/latex-ChNeshUC.js"},{"revision":null,"url":"assets/laserwave-C-NuzoMp.js"},{"revision":null,"url":"assets/kusto-Ba87977j.js"},{"revision":null,"url":"assets/kotlin-DVAEYiwY.js"},{"revision":null,"url":"assets/keybindings-store-C46tNxJE.js"},{"revision":null,"url":"assets/kdl-B6blIqLq.js"},{"revision":null,"url":"assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2"},{"revision":null,"url":"assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2"},{"revision":null,"url":"assets/KaTeX_Size2-Regular-Dy4dx90m.woff2"},{"revision":null,"url":"assets/KaTeX_Size1-Regular-mCD8mA8B.woff2"},{"revision":null,"url":"assets/KaTeX_Script-Regular-D3wIWfF6.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2"},{"revision":null,"url":"assets/KaTeX_Math-Italic-t53AETM-.woff2"},{"revision":null,"url":"assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Regular-B22Nviop.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Italic-NWA7e6Wa.woff2"},{"revision":null,"url":"assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Bold-Cx986IdX.woff2"},{"revision":null,"url":"assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2"},{"revision":null,"url":"assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2"},{"revision":null,"url":"assets/KaTeX_AMS-Regular-BQhdFMY1.woff2"},{"revision":null,"url":"assets/kanagawa-wave-BglPniBb.js"},{"revision":null,"url":"assets/kanagawa-lotus-CLnIPAGs.js"},{"revision":null,"url":"assets/kanagawa-dragon-BpeLlraV.js"},{"revision":null,"url":"assets/just-BvQHq7VE.js"},{"revision":null,"url":"assets/julia-DJ8MrQPA.js"},{"revision":null,"url":"assets/jsx-z4TGELE1.js"},{"revision":null,"url":"assets/jssm-B7HswxOM.js"},{"revision":null,"url":"assets/jsonnet-CPj4HCRm.js"},{"revision":null,"url":"assets/jsonl-BAwnWh7U.js"},{"revision":null,"url":"assets/jsonc-tC5zvrPO.js"},{"revision":null,"url":"assets/json5-R_LXJXL0.js"},{"revision":null,"url":"assets/json-uWUKqOxq.js"},{"revision":null,"url":"assets/jison-C2vJYjbJ.js"},{"revision":null,"url":"assets/jinja-B-zKiwlp.js"},{"revision":null,"url":"assets/javascript-DQR6GQKs.js"},{"revision":null,"url":"assets/java-PRMSQp24.js"},{"revision":null,"url":"assets/ini-CAvrVa5R.js"},{"revision":null,"url":"assets/info-3K5VOQVL-BpNjgbj9.js"},{"revision":null,"url":"assets/index-I2ik0ZF7.js"},{"revision":null,"url":"assets/index-CVJmlKhp.css"},{"revision":null,"url":"assets/imba-aiXalPnK.js"},{"revision":null,"url":"assets/image-preview-0SGb7_tH.js"},{"revision":null,"url":"assets/image-gallery-CObzTisL.js"},{"revision":null,"url":"assets/hy-DzZa6alE.js"},{"revision":null,"url":"assets/hxml-BQvjiuBt.js"},{"revision":null,"url":"assets/hurl-boMPgDm9.js"},{"revision":null,"url":"assets/http-CHd2gYPf.js"},{"revision":null,"url":"assets/html-derivative-BiTPuOba.js"},{"revision":null,"url":"assets/html-2p0RvXi4.js"},{"revision":null,"url":"assets/houston-Ddm8AgpV.js"},{"revision":null,"url":"assets/horizon-DSOVAzyH.js"},{"revision":null,"url":"assets/horizon-bright-DKfVjGj_.js"},{"revision":null,"url":"assets/hlsl-DCKvuEyZ.js"},{"revision":null,"url":"assets/hjson-BygWIJ-3.js"},{"revision":null,"url":"assets/hcl-CusCzwOk.js"},{"revision":null,"url":"assets/haxe-DLRwZxmt.js"},{"revision":null,"url":"assets/haskell-DybKb9uW.js"},{"revision":null,"url":"assets/handlebars-C9HXIMtj.js"},{"revision":null,"url":"assets/haml-Dts9JlPU.js"},{"revision":null,"url":"assets/hack-sxywdIAQ.js"},{"revision":null,"url":"assets/gruvbox-light-soft-DrrS2sdV.js"},{"revision":null,"url":"assets/gruvbox-light-medium-BOHMe1-7.js"},{"revision":null,"url":"assets/gruvbox-light-hard-CWXUzp9b.js"},{"revision":null,"url":"assets/gruvbox-dark-soft-DV6TAcen.js"},{"revision":null,"url":"assets/gruvbox-dark-medium-Df0L0qje.js"},{"revision":null,"url":"assets/gruvbox-dark-hard-CLbDN-E3.js"},{"revision":null,"url":"assets/group-chat-tab-BqNJW7y2.js"},{"revision":null,"url":"assets/groovy-rfHeCRqy.js"},{"revision":null,"url":"assets/graphql-B_KyE6oz.js"},{"revision":null,"url":"assets/go-BL16cMJO.js"},{"revision":null,"url":"assets/gnuplot-Df_8pFbI.js"},{"revision":null,"url":"assets/gn-DuO2D2eW.js"},{"revision":null,"url":"assets/glsl-BED7ZmUZ.js"},{"revision":null,"url":"assets/glimmer-ts-Coz155XK.js"},{"revision":null,"url":"assets/glimmer-js-BwJnDfL-.js"},{"revision":null,"url":"assets/glide-data-grid-nthEL3fk.css"},{"revision":null,"url":"assets/glide-data-grid-LinTYl0_.js"},{"revision":null,"url":"assets/gleam-D4dP7V5M.js"},{"revision":null,"url":"assets/github-light-high-contrast-DiJVeRlZ.js"},{"revision":null,"url":"assets/github-light-default-CKFslV7i.js"},{"revision":null,"url":"assets/github-light-Ch-E92cy.js"},{"revision":null,"url":"assets/github-dark-high-contrast-B6BvU8H-.js"},{"revision":null,"url":"assets/github-dark-dimmed-CUXSQ8bS.js"},{"revision":null,"url":"assets/github-dark-default-DZ1m_6OP.js"},{"revision":null,"url":"assets/github-dark-BWCf99kM.js"},{"revision":null,"url":"assets/gitGraph-HDMCJU4V-CutkUNY_.js"},{"revision":null,"url":"assets/git-rebase-DkHvejAR.js"},{"revision":null,"url":"assets/git-log-panel-CrUgsLY5.js"},{"revision":null,"url":"assets/git-commit-sQznNP43.js"},{"revision":null,"url":"assets/gherkin-CW9NH2DW.js"},{"revision":null,"url":"assets/genie-B4hkIXNU.js"},{"revision":null,"url":"assets/gdshader-C2XOq90k.js"},{"revision":null,"url":"assets/gdscript-BYdRNu_P.js"},{"revision":null,"url":"assets/gdresource-DJ7IvROZ.js"},{"revision":null,"url":"assets/fsharp-DxITxZW5.js"},{"revision":null,"url":"assets/fortran-free-form-BN7VmmxZ.js"},{"revision":null,"url":"assets/fortran-fixed-form-CpR0cN7O.js"},{"revision":null,"url":"assets/fluent-CH3IJUki.js"},{"revision":null,"url":"assets/fish-Vr62C2vP.js"},{"revision":null,"url":"assets/file-exclamation-point-DBEC-Kst.js"},{"revision":null,"url":"assets/fennel-C6ktGUzp.js"},{"revision":null,"url":"assets/eye-off-Rq1n2-oe.js"},{"revision":null,"url":"assets/extension-webview-BTCFWY2A.js"},{"revision":null,"url":"assets/everforest-light-CyFxGMIs.js"},{"revision":null,"url":"assets/everforest-dark-CN77B1NJ.js"},{"revision":null,"url":"assets/esm-PmlN1RTs.js"},{"revision":null,"url":"assets/erlang-B_etLcPG.js"},{"revision":null,"url":"assets/erb-DHX2IIEs.js"},{"revision":null,"url":"assets/emacs-lisp-B7aZTnJ_.js"},{"revision":null,"url":"assets/elm-CpD28xsW.js"},{"revision":null,"url":"assets/elixir-BAX9HSOu.js"},{"revision":null,"url":"assets/edit-diff-preview-D1TEK7Jz.js"},{"revision":null,"url":"assets/edge-CTom35R_.js"},{"revision":null,"url":"assets/dream-maker-TBDKiHrV.js"},{"revision":null,"url":"assets/dracula-yI5kpKp5.js"},{"revision":null,"url":"assets/dracula-soft-CYF6cJce.js"},{"revision":null,"url":"assets/dotenv-QeT1SLTv.js"},{"revision":null,"url":"assets/docx-preview-CR2ZtvNP.js"},{"revision":null,"url":"assets/docker-DjDr3TJF.js"},{"revision":null,"url":"assets/dist-m_oJqIDk.js"},{"revision":null,"url":"assets/dist-Bi4gRyhr.js"},{"revision":null,"url":"assets/diff-viewer-DyQLYP7J.js"},{"revision":null,"url":"assets/diff-CupGmT1a.js"},{"revision":null,"url":"assets/dialog-HHdNInEH.js"},{"revision":null,"url":"assets/desktop-C6lD62ar.js"},{"revision":null,"url":"assets/dax-B1aRUMXT.js"},{"revision":null,"url":"assets/database-viewer-DTMmic31.js"},{"revision":null,"url":"assets/database-COYAMZaw.js"},{"revision":null,"url":"assets/data-grid-types-BuMHLKXV.js"},{"revision":null,"url":"assets/data-grid-overlay-editor-Bdc80TJ1.js"},{"revision":null,"url":"assets/dart-BmpakMe-.js"},{"revision":null,"url":"assets/dark-plus-sn-FFTT1.js"},{"revision":null,"url":"assets/d-CxaScvxf.js"},{"revision":null,"url":"assets/cypher-TVlMMWma.js"},{"revision":null,"url":"assets/cue-Byh1xHko.js"},{"revision":null,"url":"assets/csv-preview-DD94T9ff.js"},{"revision":null,"url":"assets/csv-parser-DVHBcvuE.js"},{"revision":null,"url":"assets/csv-DW48Z5d-.js"},{"revision":null,"url":"assets/css-CIjciIIk.js"},{"revision":null,"url":"assets/csharp-DcR97P0D.js"},{"revision":null,"url":"assets/crystal-DMjCL--0.js"},{"revision":null,"url":"assets/createLucideIcon-ConhwJnb.js"},{"revision":null,"url":"assets/cpp-CnU9hfBq.js"},{"revision":null,"url":"assets/coq-D2bX6-8g.js"},{"revision":null,"url":"assets/context-menu-DIiZdfbE.js"},{"revision":null,"url":"assets/conflict-editor-CpGcSopK.js"},{"revision":null,"url":"assets/common-lisp-BX1XgHTt.js"},{"revision":null,"url":"assets/coffee-DTtK7kKi.js"},{"revision":null,"url":"assets/codeql-BpP1PDrj.js"},{"revision":null,"url":"assets/codeowners-CtkKTnsH.js"},{"revision":null,"url":"assets/code-TekEnDFM.js"},{"revision":null,"url":"assets/code-editor-CqlzLQ7T.js"},{"revision":null,"url":"assets/cobol-D39V6ukp.js"},{"revision":null,"url":"assets/cmake-DsZu4U4F.js"},{"revision":null,"url":"assets/clojure-pSLH-KQp.js"},{"revision":null,"url":"assets/clarity-BRdirlsw.js"},{"revision":null,"url":"assets/circle-question-mark-PaJgx-3d.js"},{"revision":null,"url":"assets/chevron-right-DeUue2aK.js"},{"revision":null,"url":"assets/chat-tab-C5U7a_rP.js"},{"revision":null,"url":"assets/catppuccin-mocha-BeMC5hqi.js"},{"revision":null,"url":"assets/catppuccin-macchiato-B0bAzXh0.js"},{"revision":null,"url":"assets/catppuccin-latte-ZxS-ga_K.js"},{"revision":null,"url":"assets/catppuccin-frappe-Dm3rVY3b.js"},{"revision":null,"url":"assets/cairo-BboZ9qIf.js"},{"revision":null,"url":"assets/cadence-B5X2vWm3.js"},{"revision":null,"url":"assets/c3-Da53KeG6.js"},{"revision":null,"url":"assets/c-BQFvJ6Ux.js"},{"revision":null,"url":"assets/bsl-CGf6Xuyu.js"},{"revision":null,"url":"assets/bot-E9mcVZnr.js"},{"revision":null,"url":"assets/blade-BvrP2gPd.js"},{"revision":null,"url":"assets/bird2-C0pvipi_.js"},{"revision":null,"url":"assets/bicep-DWS-2uWR.js"},{"revision":null,"url":"assets/bibtex-C_q8ygAM.js"},{"revision":null,"url":"assets/berry-BqVQYZZr.js"},{"revision":null,"url":"assets/beancount-f8f3BBqB.js"},{"revision":null,"url":"assets/bat-Cg8hlSct.js"},{"revision":null,"url":"assets/ballerina-DUO9mwyV.js"},{"revision":null,"url":"assets/ayu-mirage-BAdm8pKU.js"},{"revision":null,"url":"assets/ayu-light-DyIp0Idy.js"},{"revision":null,"url":"assets/ayu-dark-C50MYKhw.js"},{"revision":null,"url":"assets/awk-Cj93pRL8.js"},{"revision":null,"url":"assets/aurora-x-BPgGL50S.js"},{"revision":null,"url":"assets/audio-preview-D7jNc8mi.js"},{"revision":null,"url":"assets/astro-CXIotiNS.js"},{"revision":null,"url":"assets/asm-p1-PUkh3.js"},{"revision":null,"url":"assets/asciidoc-CIsC4kkq.js"},{"revision":null,"url":"assets/architecture-PBZL5I3N-DVRYSsQn.js"},{"revision":null,"url":"assets/ara-BGtOX5Hn.js"},{"revision":null,"url":"assets/apply-theme-BSJDABU3.js"},{"revision":null,"url":"assets/applescript-5AlzBqQO.js"},{"revision":null,"url":"assets/apl-DSANFLx0.js"},{"revision":null,"url":"assets/api-themes-DXi8sz-9.js"},{"revision":null,"url":"assets/api-settings-Do0Z0IRN.js"},{"revision":null,"url":"assets/api-settings-De--HNHp.js"},{"revision":null,"url":"assets/api-client-RtNXvS0P.js"},{"revision":null,"url":"assets/api-client-COQtP-dB.js"},{"revision":null,"url":"assets/apex-3O2170Ju.js"},{"revision":null,"url":"assets/apache-Dg7oWQbs.js"},{"revision":null,"url":"assets/angular-ts-CUvq2h3X.js"},{"revision":null,"url":"assets/angular-html-D4YJUMLP.js"},{"revision":null,"url":"assets/andromeeda-C3nkvRhj.js"},{"revision":null,"url":"assets/ai-resource-editor-CXWQcx3_.js"},{"revision":null,"url":"assets/ada-DzO1tMqV.js"},{"revision":null,"url":"assets/actionscript-3-CML-MTNy.js"},{"revision":null,"url":"assets/abap-BM5PMK0-.js"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"26dccd02a2ef7522892015154f5e3680","url":"manifest.webmanifest"}]);
1
+ try{self[`workbox:core:7.3.0`]&&_()}catch{}var e=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},t=class extends Error{constructor(t,n){let r=e(t,n);super(r),this.name=t,this.details=n}},n={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},r=e=>[n.prefix,e,n.suffix].filter(e=>e&&e.length>0).join(`-`),i=e=>{for(let t of Object.keys(n))e(t)},a={updateDetails:e=>{i(t=>{typeof e[t]==`string`&&(n[t]=e[t])})},getGoogleAnalyticsName:e=>e||r(n.googleAnalytics),getPrecacheName:e=>e||r(n.precache),getPrefix:()=>n.prefix,getRuntimeName:e=>e||r(n.runtime),getSuffix:()=>n.suffix};function o(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.3.0`]&&_()}catch{}var s=`__WB_REVISION__`;function c(e){if(!e)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:n,url:r}=e;if(!r)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(!n){let e=new URL(r,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(r,location.href),a=new URL(r,location.href);return i.searchParams.set(s,n),{cacheKey:i.href,url:a.href}}var l=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},u=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function f(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function p(e,n){let r=null;if(e.url&&(r=new URL(e.url).origin),r!==self.location.origin)throw new t(`cross-origin-copy-response`,{origin:r});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=n?n(a):a,s=f()?i.body:await i.blob();return new Response(s,o)}var m=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function h(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function g(e,t,n,r){let i=h(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===h(t.url,n))return e.match(t,r)}var v=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},y=new Set;async function b(){for(let e of y)await e()}function x(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.3.0`]&&_()}catch{}function S(e){return typeof e==`string`?new Request(e):e}var C=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new v,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:n}=this,r=S(e);if(r.mode===`navigate`&&n instanceof FetchEvent&&n.preloadResponse){let e=await n.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?r.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))r=await e({request:r.clone(),event:n})}catch(e){if(e instanceof Error)throw new t(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=r.clone();try{let e;e=await fetch(r,r.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let t of this.iterateCallbacks(`fetchDidSucceed`))e=await t({event:n,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:n,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=S(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,n){let r=S(e);await x(0);let i=await this.getCacheKey(r,`write`);if(!n)throw new t(`cache-put-with-no-response`,{url:m(i.url)});let a=await this._ensureResponseSafeToCache(n);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await g(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await b(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=S(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},w=class{constructor(e={}){this.cacheName=a.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new C(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,n,r){await e.runCallbacks(`handlerWillStart`,{event:r,request:n});let i;try{if(i=await this._handle(n,e),!i||i.type===`error`)throw new t(`no-response`,{url:n.url})}catch(t){if(t instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:t,event:r,request:n}),i)break}if(!i)throw t}for(let t of e.iterateCallbacks(`handlerWillRespond`))i=await t({event:r,request:n,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},T=class e extends w{constructor(t={}){t.cacheName=a.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,n){let r,i=n.params||{};if(this._fallbackToNetwork){let t=i.integrity,a=e.integrity,o=!a||a===t;r=await n.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||t})),t&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await n.cachePut(e,r.clone()))}else throw new t(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return r}async _handleInstall(e,n){this._useDefaultCacheabilityPluginIfNeeded();let r=await n.fetch(e);if(!await n.cachePut(e,r.clone()))throw new t(`bad-precaching-response`,{url:e.url,status:r.status});return r}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};T.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},T.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await p(e):e}};var E=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new T({cacheName:a.getPrecacheName(e),plugins:[...t,new u({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let n=[];for(let r of e){typeof r==`string`?n.push(r):r&&r.revision===void 0&&n.push(r.url);let{cacheKey:e,url:i}=c(r),a=typeof r!=`string`&&r.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new t(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof r!=`string`&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new t(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,r.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),n.length>0){let e=`Workbox is precaching URLs without revision info: ${n.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return o(e,async()=>{let t=new l;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return o(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let n=this.getCacheKeyForURL(e);if(!n)throw new t(`non-precached-url`,{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:n},t.params),this.strategy.handle(t))}},D,O=()=>(D||=new E,D);try{self[`workbox:routing:7.3.0`]&&_()}catch{}var k=e=>e&&typeof e==`object`?e:{handle:e},A=class{constructor(e,t,n=`GET`){this.handler=k(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=k(e)}},j=class extends A{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&!(t.origin!==location.origin&&n.index!==0))return n.slice(1)},t,n)}},M=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,k(e))}setCatchHandler(e){this._catchHandler=k(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t(`unregister-route-but-not-found-with-method`,{method:e.method});let n=this._routes.get(e.method).indexOf(e);if(n>-1)this._routes.get(e.method).splice(n,1);else throw new t(`unregister-route-route-not-registered`)}},N,P=()=>(N||(N=new M,N.addFetchListener(),N.addCacheListener()),N);function F(e,n,r){let i;if(typeof e==`string`){let t=new URL(e,location.href);i=new A(({url:e})=>e.href===t.href,n,r)}else if(e instanceof RegExp)i=new j(e,n,r);else if(typeof e==`function`)i=new A(e,n,r);else if(e instanceof A)i=e;else throw new t(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return P().registerRoute(i),i}function I(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*L(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=I(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var R=class extends A{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of L(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function z(e){F(new R(O(),e))}function B(e){O().precache(e)}function V(e,t){B(e),z(t)}V([{"revision":"1872c500de691dce40960bb85481de07","url":"registerSW.js"},{"revision":"f93a0911029d932ab3928eddf155ed01","url":"index.html"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"0797b652383bb69d817f1695b75742ec","url":"donate-qr.png"},{"revision":"5fbed3afabcee1da7a57ab9843d1708d","url":"monacoeditorwork/ts.worker.bundle.js"},{"revision":"79a27ce5c41fb45dcca0dddd989ba349","url":"monacoeditorwork/json.worker.bundle.js"},{"revision":"76b49bcdbf25f813a1cd56e57dd1a9a5","url":"monacoeditorwork/html.worker.bundle.js"},{"revision":"73b4ae87f3bd1d29e9c5144f8a014e9e","url":"monacoeditorwork/editor.worker.bundle.js"},{"revision":"cab2bd6f80662931af342deafb01efc1","url":"monacoeditorwork/css.worker.bundle.js"},{"revision":null,"url":"assets/zig-LAE-fbS-.js"},{"revision":null,"url":"assets/zenscript-Dj8GATvi.js"},{"revision":null,"url":"assets/yaml-Bwr01G2K.js"},{"revision":null,"url":"assets/xsl-DvTXNwuO.js"},{"revision":null,"url":"assets/xml-C-vM2m7J.js"},{"revision":null,"url":"assets/x-BtzqXv1z.js"},{"revision":null,"url":"assets/wolfram-7MTFBJpR.js"},{"revision":null,"url":"assets/wit-B5CM2pg6.js"},{"revision":null,"url":"assets/wikitext-NroRWVAO.js"},{"revision":null,"url":"assets/wgsl-BakcCblK.js"},{"revision":null,"url":"assets/wenyan-DpShPKXZ.js"},{"revision":null,"url":"assets/wasm-BOG7ZeTT.js"},{"revision":null,"url":"assets/wasm-Bd258nS1.js"},{"revision":null,"url":"assets/vyper-CgCBYg1G.js"},{"revision":null,"url":"assets/vue-vine-DHPh_gMr.js"},{"revision":null,"url":"assets/vue-html-BGL5qnuH.js"},{"revision":null,"url":"assets/vue-CxIsxtwn.js"},{"revision":null,"url":"assets/vitesse-light-MAp87W5b.js"},{"revision":null,"url":"assets/vitesse-dark-D7zDWNmc.js"},{"revision":null,"url":"assets/vitesse-black-RKFsSqQI.js"},{"revision":null,"url":"assets/viml-BglmT14Y.js"},{"revision":null,"url":"assets/video-preview-cfaoRxG3.js"},{"revision":null,"url":"assets/vhdl-CWL5dZPN.js"},{"revision":null,"url":"assets/vesper-B_Z0h4pn.js"},{"revision":null,"url":"assets/verilog--a33ND-p.js"},{"revision":null,"url":"assets/vendor-xterm-DkTCHfhq.css"},{"revision":null,"url":"assets/vendor-xterm-ClRVIJ-k.js"},{"revision":null,"url":"assets/vendor-ui-CXJtBULr.js"},{"revision":null,"url":"assets/vendor-mermaid-C977xNeE.js"},{"revision":null,"url":"assets/vendor-markdown-CKTlmXbz.js"},{"revision":null,"url":"assets/vb-C7tvbXv1.js"},{"revision":null,"url":"assets/vala-AsSR0hrb.js"},{"revision":null,"url":"assets/v-CGo0jcXA.js"},{"revision":null,"url":"assets/utils-B9H0d3Fh.js"},{"revision":null,"url":"assets/use-monaco-theme-DxYstgYa.js"},{"revision":null,"url":"assets/use-is-mobile-K1a38BwI.js"},{"revision":null,"url":"assets/use-blob-url-BLRmhlZI.js"},{"revision":null,"url":"assets/typst-CfsCIYv8.js"},{"revision":null,"url":"assets/typespec-CPuYZijj.js"},{"revision":null,"url":"assets/typescript-Dz9wU5Y1.js"},{"revision":null,"url":"assets/twig-u6QZ45FH.js"},{"revision":null,"url":"assets/turtle-DFceTiqd.js"},{"revision":null,"url":"assets/tsx-B1MmXGT3.js"},{"revision":null,"url":"assets/tsv-BJB5EVCT.js"},{"revision":null,"url":"assets/ts-tags-3T98k4EJ.js"},{"revision":null,"url":"assets/treemap-KZPCXAKY-SeI2TxLs.js"},{"revision":null,"url":"assets/tool-cards-xstpayaW.js"},{"revision":null,"url":"assets/toml-acIrxos6.js"},{"revision":null,"url":"assets/tokyo-night-BkHlYUv0.js"},{"revision":null,"url":"assets/tex-CsrOiqh1.js"},{"revision":null,"url":"assets/terraform-DvpCCiOZ.js"},{"revision":null,"url":"assets/terminal-tab-CTKU5gaF.js"},{"revision":null,"url":"assets/templ-Dv8zpKZW.js"},{"revision":null,"url":"assets/tcl-ztYAdXfQ.js"},{"revision":null,"url":"assets/tasl-DIoV4XcC.js"},{"revision":null,"url":"assets/talonscript-BLa0URTW.js"},{"revision":null,"url":"assets/table-4P8kS7sg.js"},{"revision":null,"url":"assets/tab-store-DnNnaAcE.js"},{"revision":null,"url":"assets/systemd-a5-XZJsG.js"},{"revision":null,"url":"assets/system-verilog-D8s2ZW_k.js"},{"revision":null,"url":"assets/system-monitor-tab-Bscf6tzK.js"},{"revision":null,"url":"assets/synthwave-84-DbBhB_Hq.js"},{"revision":null,"url":"assets/swift-DF5NDQp6.js"},{"revision":null,"url":"assets/svelte-CBfSsG4n.js"},{"revision":null,"url":"assets/surrealql--DLNbTyI.js"},{"revision":null,"url":"assets/stylus-DvBnYniP.js"},{"revision":null,"url":"assets/stata-BvUA6GUW.js"},{"revision":null,"url":"assets/ssh-config-L1euxrsM.js"},{"revision":null,"url":"assets/sqlite-viewer-CTBwzT-r.js"},{"revision":null,"url":"assets/sql-query-editor-D2UxRvG7.js"},{"revision":null,"url":"assets/sql-CBzeNAD8.js"},{"revision":null,"url":"assets/splunk-kQREPfIc.js"},{"revision":null,"url":"assets/sparql-CdfII5Jd.js"},{"revision":null,"url":"assets/sparkles-BvJ1EGWd.js"},{"revision":null,"url":"assets/soy-DlYz3wsC.js"},{"revision":null,"url":"assets/solidity-CAbDB4D4.js"},{"revision":null,"url":"assets/solarized-light-DD9C-H-9.js"},{"revision":null,"url":"assets/solarized-dark-DgUhY74x.js"},{"revision":null,"url":"assets/snazzy-light-CXE7a5j_.js"},{"revision":null,"url":"assets/smalltalk-LDeL9PYH.js"},{"revision":null,"url":"assets/slack-ochin-BzgRt_wm.js"},{"revision":null,"url":"assets/slack-dark-C4xGcQXI.js"},{"revision":null,"url":"assets/shield-off-Cb9J9x_n.js"},{"revision":null,"url":"assets/shield-check-BSA9P3nI.js"},{"revision":null,"url":"assets/shellsession-Bp1OA1rR.js"},{"revision":null,"url":"assets/shellscript-DMiHlR3q.js"},{"revision":null,"url":"assets/shaderlab-BdjEZUMc.js"},{"revision":null,"url":"assets/settings-tab-DxtBG0DW.js"},{"revision":null,"url":"assets/settings-store-Bm7uL8VA.js"},{"revision":null,"url":"assets/sdbl-DbPeJPUr.js"},{"revision":null,"url":"assets/scss-BB0CUoCL.js"},{"revision":null,"url":"assets/scheme-BYuUPJoL.js"},{"revision":null,"url":"assets/scala-DNxCW1By.js"},{"revision":null,"url":"assets/save-ignW_jk2.js"},{"revision":null,"url":"assets/sass-C8JfaqCV.js"},{"revision":null,"url":"assets/sas-Bj7B1CB2.js"},{"revision":null,"url":"assets/rust-p7Imk4G_.js"},{"revision":null,"url":"assets/ruby-D5fejQwd.js"},{"revision":null,"url":"assets/rst-D5BwNTnw.js"},{"revision":null,"url":"assets/rosmsg-CI1ywimO.js"},{"revision":null,"url":"assets/rose-pine-moon-wqyh0an4.js"},{"revision":null,"url":"assets/rose-pine-dawn-Bqz2sBRY.js"},{"revision":null,"url":"assets/rose-pine-aFHxW48i.js"},{"revision":null,"url":"assets/ron-CuUCJ0n4.js"},{"revision":null,"url":"assets/rolldown-runtime-FhOqtrmT.js"},{"revision":null,"url":"assets/riscv-DR-hJVIj.js"},{"revision":null,"url":"assets/resolve-theme-B0eotaPq.js"},{"revision":null,"url":"assets/rel-CAaI-1fg.js"},{"revision":null,"url":"assets/regexp-CD2uvAWx.js"},{"revision":null,"url":"assets/reg-D8YAsTGf.js"},{"revision":null,"url":"assets/red-CTcQZevb.js"},{"revision":null,"url":"assets/react-DjdYfcEe.js"},{"revision":null,"url":"assets/razor-KVt5uW14.js"},{"revision":null,"url":"assets/raku-D31lthkZ.js"},{"revision":null,"url":"assets/radar-KQ55EAFF-B1eznNtd.js"},{"revision":null,"url":"assets/racket-SkRKqrLY.js"},{"revision":null,"url":"assets/r-TU2eaIPw.js"},{"revision":null,"url":"assets/qss-DASwAbBL.js"},{"revision":null,"url":"assets/qmldir-cXiW3AsF.js"},{"revision":null,"url":"assets/qml-DlEjGhwN.js"},{"revision":null,"url":"assets/python-iWuxKXvT.js"},{"revision":null,"url":"assets/purescript-DFewOQb2.js"},{"revision":null,"url":"assets/puppet-CBq0tLrP.js"},{"revision":null,"url":"assets/pug-CxSYHrB3.js"},{"revision":null,"url":"assets/proto-B7PI7apn.js"},{"revision":null,"url":"assets/prolog-QRGun3eG.js"},{"revision":null,"url":"assets/project-store-D1D1MN03.js"},{"revision":null,"url":"assets/prisma-CTLs5IdT.js"},{"revision":null,"url":"assets/powershell-Bo-DYzOS.js"},{"revision":null,"url":"assets/powerquery-Dn1MIpZu.js"},{"revision":null,"url":"assets/postgres-viewer-fqMUi0xS.js"},{"revision":null,"url":"assets/postcss-BgJlpFdw.js"},{"revision":null,"url":"assets/polar-C7uILwJn.js"},{"revision":null,"url":"assets/poimandres-DUaI_1JP.js"},{"revision":null,"url":"assets/po-BvgLlnNo.js"},{"revision":null,"url":"assets/plus-Dm36mgLh.js"},{"revision":null,"url":"assets/plsql-DBba7dyP.js"},{"revision":null,"url":"assets/plastic-BzxsCTpi.js"},{"revision":null,"url":"assets/pkl-BhJSJbFv.js"},{"revision":null,"url":"assets/pie-UPGHQEXC-DYUOH68U.js"},{"revision":null,"url":"assets/php-Dzl_MDIW.js"},{"revision":null,"url":"assets/perl-Cf31sZYE.js"},{"revision":null,"url":"assets/pdf-preview-CtZWvujY.js"},{"revision":null,"url":"assets/pascal-B1Y46ZZB.js"},{"revision":null,"url":"assets/panel-store-gbNJvZB_.js"},{"revision":null,"url":"assets/packet-RMMSAZCW-D79vAFR_.js"},{"revision":null,"url":"assets/openscad-BlPcSnmT.js"},{"revision":null,"url":"assets/one-light-DbkRXG3t.js"},{"revision":null,"url":"assets/one-dark-pro-BSLWUJn5.js"},{"revision":null,"url":"assets/odin-DTYNQqVr.js"},{"revision":null,"url":"assets/ocaml-R9qtGQhs.js"},{"revision":null,"url":"assets/objective-cpp-DIKDO1Ly.js"},{"revision":null,"url":"assets/objective-c-CVkmJkC1.js"},{"revision":null,"url":"assets/nushell-CAiDi_mR.js"},{"revision":null,"url":"assets/number-overlay-editor-B8P26qGC.js"},{"revision":null,"url":"assets/notification-store-Bi7VHAy4.js"},{"revision":null,"url":"assets/nord-CREVs22j.js"},{"revision":null,"url":"assets/nix-D2Jet9DN.js"},{"revision":null,"url":"assets/nim-CIhyfs-A.js"},{"revision":null,"url":"assets/night-owl-light-DRPeaG5J.js"},{"revision":null,"url":"assets/night-owl-Jkf9zFQK.js"},{"revision":null,"url":"assets/nginx-C5n8N_bt.js"},{"revision":null,"url":"assets/nextflow-groovy-ZHa4JrPJ.js"},{"revision":null,"url":"assets/nextflow-DkcXP71s.js"},{"revision":null,"url":"assets/narrat-CJ5s3BDf.js"},{"revision":null,"url":"assets/move-C79AH45U.js"},{"revision":null,"url":"assets/moonbit-BS_fcr-P.js"},{"revision":null,"url":"assets/monokai-CL_9gbmn.js"},{"revision":null,"url":"assets/mojo-Cp9BayW0.js"},{"revision":null,"url":"assets/mobile-explorer-sheet-CDU8xriw.js"},{"revision":null,"url":"assets/mobile-bottom-sheet-CzRXE6mY.js"},{"revision":null,"url":"assets/mipsasm-bBgtvPyG.js"},{"revision":null,"url":"assets/min-light-DomAFQsa.js"},{"revision":null,"url":"assets/min-dark-BSSjchUB.js"},{"revision":null,"url":"assets/mermaid-_rnT2YGD.js"},{"revision":null,"url":"assets/mdx-DAis6R6I.js"},{"revision":null,"url":"assets/mdc-BeDVcFRl.js"},{"revision":null,"url":"assets/matlab-C2waytxs.js"},{"revision":null,"url":"assets/material-theme-palenight-B0AUn0NG.js"},{"revision":null,"url":"assets/material-theme-ocean-DGpAp5co.js"},{"revision":null,"url":"assets/material-theme-Nq-ChX1P.js"},{"revision":null,"url":"assets/material-theme-lighter-0kyjYqEd.js"},{"revision":null,"url":"assets/material-theme-darker-CPV4ayXJ.js"},{"revision":null,"url":"assets/marko-Du3frD6X.js"},{"revision":null,"url":"assets/markdown-Seon0vHs.js"},{"revision":null,"url":"assets/markdown-renderer-Btync7yg.js"},{"revision":null,"url":"assets/markdown-renderer-B8Kz5rvP.js"},{"revision":null,"url":"assets/make-B3JVjoW_.js"},{"revision":null,"url":"assets/luau-DUBpLlzQ.js"},{"revision":null,"url":"assets/lua-PNuaIBEF.js"},{"revision":null,"url":"assets/logo-DdIsXFDO.js"},{"revision":null,"url":"assets/log-B-kp_3CL.js"},{"revision":null,"url":"assets/llvm-CSdk9q9V.js"},{"revision":null,"url":"assets/liquid-lv10fo4U.js"},{"revision":null,"url":"assets/light-plus-Bt5CyUuo.js"},{"revision":null,"url":"assets/libesm-tR4XlhMj.js"},{"revision":null,"url":"assets/lib-Bpbn00xM.js"},{"revision":null,"url":"assets/less-BoxmU_Mk.js"},{"revision":null,"url":"assets/lean-BYtGUfWx.js"},{"revision":null,"url":"assets/latex-BPJSSE6j.js"},{"revision":null,"url":"assets/laserwave-DaXZG9ge.js"},{"revision":null,"url":"assets/kusto-HtSE_sKm.js"},{"revision":null,"url":"assets/kotlin-CTS4MLcx.js"},{"revision":null,"url":"assets/keybindings-store-BE1jVUZW.js"},{"revision":null,"url":"assets/kdl-DvtoJdFo.js"},{"revision":null,"url":"assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2"},{"revision":null,"url":"assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2"},{"revision":null,"url":"assets/KaTeX_Size2-Regular-Dy4dx90m.woff2"},{"revision":null,"url":"assets/KaTeX_Size1-Regular-mCD8mA8B.woff2"},{"revision":null,"url":"assets/KaTeX_Script-Regular-D3wIWfF6.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2"},{"revision":null,"url":"assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2"},{"revision":null,"url":"assets/KaTeX_Math-Italic-t53AETM-.woff2"},{"revision":null,"url":"assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Regular-B22Nviop.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Italic-NWA7e6Wa.woff2"},{"revision":null,"url":"assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2"},{"revision":null,"url":"assets/KaTeX_Main-Bold-Cx986IdX.woff2"},{"revision":null,"url":"assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2"},{"revision":null,"url":"assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2"},{"revision":null,"url":"assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2"},{"revision":null,"url":"assets/KaTeX_AMS-Regular-BQhdFMY1.woff2"},{"revision":null,"url":"assets/kanagawa-wave-D-KXPjw6.js"},{"revision":null,"url":"assets/kanagawa-lotus-BHltayiE.js"},{"revision":null,"url":"assets/kanagawa-dragon-CwN4SV1c.js"},{"revision":null,"url":"assets/just-B9Jlddu-.js"},{"revision":null,"url":"assets/julia-D0K3bwpU.js"},{"revision":null,"url":"assets/jsx-DlJL-Oj3.js"},{"revision":null,"url":"assets/jssm-Dxxx1Hqu.js"},{"revision":null,"url":"assets/jsonnet-DKbkPaQ2.js"},{"revision":null,"url":"assets/jsonl-fKbrANC2.js"},{"revision":null,"url":"assets/jsonc-CfrLEAKA.js"},{"revision":null,"url":"assets/json5-CEQ50pGM.js"},{"revision":null,"url":"assets/json-0_y80FD5.js"},{"revision":null,"url":"assets/jison-D8B5pCwA.js"},{"revision":null,"url":"assets/jinja-B1pq3jJq.js"},{"revision":null,"url":"assets/javascript-DHuz9VXn.js"},{"revision":null,"url":"assets/java-Bzo8yIal.js"},{"revision":null,"url":"assets/ini-ox-CFcg0.js"},{"revision":null,"url":"assets/info-3K5VOQVL-Cg0mIJn9.js"},{"revision":null,"url":"assets/index-YCTraslE.css"},{"revision":null,"url":"assets/index-XoDY9bc0.js"},{"revision":null,"url":"assets/imba-BxLOHO5I.js"},{"revision":null,"url":"assets/image-preview-BDySmiim.js"},{"revision":null,"url":"assets/image-gallery-BWFpZAAP.js"},{"revision":null,"url":"assets/hy-D_SOuqw9.js"},{"revision":null,"url":"assets/hxml-CztOsL8o.js"},{"revision":null,"url":"assets/hurl-CmoT7l3T.js"},{"revision":null,"url":"assets/http-CJ1zyB-h.js"},{"revision":null,"url":"assets/html-derivative-D6-IxTgn.js"},{"revision":null,"url":"assets/html-bgVcwZ-t.js"},{"revision":null,"url":"assets/houston-DdbbjqFg.js"},{"revision":null,"url":"assets/horizon-BusFlhLW.js"},{"revision":null,"url":"assets/horizon-bright-2oD0Mz7W.js"},{"revision":null,"url":"assets/hlsl-BMC4JGoE.js"},{"revision":null,"url":"assets/hjson-ChETf2bz.js"},{"revision":null,"url":"assets/hcl-CQXTiEXq.js"},{"revision":null,"url":"assets/haxe-c6bI4_GT.js"},{"revision":null,"url":"assets/haskell-uQcywkDH.js"},{"revision":null,"url":"assets/handlebars-BuW1LT7T.js"},{"revision":null,"url":"assets/haml-tPY-9Pfm.js"},{"revision":null,"url":"assets/hack-CXIMX-Ol.js"},{"revision":null,"url":"assets/gruvbox-light-soft-DnZr3c_0.js"},{"revision":null,"url":"assets/gruvbox-light-medium-38ATiG7i.js"},{"revision":null,"url":"assets/gruvbox-light-hard-IVAwMJRl.js"},{"revision":null,"url":"assets/gruvbox-dark-soft-D-XSM_fu.js"},{"revision":null,"url":"assets/gruvbox-dark-medium-Bqo6fQbg.js"},{"revision":null,"url":"assets/gruvbox-dark-hard-C0W01fsq.js"},{"revision":null,"url":"assets/group-chat-tab-CVQfptkT.js"},{"revision":null,"url":"assets/groovy-DS-pne5-.js"},{"revision":null,"url":"assets/graphql-CGPPFAU6.js"},{"revision":null,"url":"assets/go-D7Qqska7.js"},{"revision":null,"url":"assets/gnuplot-D7I0v20p.js"},{"revision":null,"url":"assets/gn-nUb_Mit0.js"},{"revision":null,"url":"assets/glsl-nR2eaJQe.js"},{"revision":null,"url":"assets/glimmer-ts-Bak54dBX.js"},{"revision":null,"url":"assets/glimmer-js-BY8aExAJ.js"},{"revision":null,"url":"assets/glide-data-grid-nthEL3fk.css"},{"revision":null,"url":"assets/glide-data-grid-LX3N4SsJ.js"},{"revision":null,"url":"assets/gleam-BpeKwEIO.js"},{"revision":null,"url":"assets/github-light-high-contrast-BzIuUFR2.js"},{"revision":null,"url":"assets/github-light-default-C2fPZzPG.js"},{"revision":null,"url":"assets/github-light-BnP2dznS.js"},{"revision":null,"url":"assets/github-dark-high-contrast-DW78QukY.js"},{"revision":null,"url":"assets/github-dark-dimmed-C3dQZ_LC.js"},{"revision":null,"url":"assets/github-dark-default-CKGVrl3Z.js"},{"revision":null,"url":"assets/github-dark-C9afs_4w.js"},{"revision":null,"url":"assets/gitGraph-HDMCJU4V-CtQ3yXN-.js"},{"revision":null,"url":"assets/git-rebase-CKSVd848.js"},{"revision":null,"url":"assets/git-log-panel-pjyOjchU.js"},{"revision":null,"url":"assets/git-commit-BzB9Lio5.js"},{"revision":null,"url":"assets/gherkin-BcvK42tF.js"},{"revision":null,"url":"assets/genie-C_QDtvgU.js"},{"revision":null,"url":"assets/gdshader-CTZ381FO.js"},{"revision":null,"url":"assets/gdscript-DCPxdLpq.js"},{"revision":null,"url":"assets/gdresource-sFMY4D2Q.js"},{"revision":null,"url":"assets/fsharp-Bxbn_gbr.js"},{"revision":null,"url":"assets/fortran-free-form-DvOu8jAt.js"},{"revision":null,"url":"assets/fortran-fixed-form-BLyAtyPM.js"},{"revision":null,"url":"assets/fluent-DF55zQ09.js"},{"revision":null,"url":"assets/fish-CubIIvJD.js"},{"revision":null,"url":"assets/file-exclamation-point-D-ZORzYB.js"},{"revision":null,"url":"assets/fennel-6B22SfJR.js"},{"revision":null,"url":"assets/eye-off-Rq1n2-oe.js"},{"revision":null,"url":"assets/extension-webview-DRq1tWC1.js"},{"revision":null,"url":"assets/explorer-window-content-BrTHAoXM.js"},{"revision":null,"url":"assets/explorer-body-DE5339g9.js"},{"revision":null,"url":"assets/everforest-light-BISkJchP.js"},{"revision":null,"url":"assets/everforest-dark-DbHa2U-p.js"},{"revision":null,"url":"assets/esm-BfqDE09P.js"},{"revision":null,"url":"assets/erlang-2MjTCzGz.js"},{"revision":null,"url":"assets/erb-D3HEDz1x.js"},{"revision":null,"url":"assets/emacs-lisp-D_qP2zS6.js"},{"revision":null,"url":"assets/elm-DtIv-HXJ.js"},{"revision":null,"url":"assets/elixir-Dwi8Wu7W.js"},{"revision":null,"url":"assets/edit-diff-preview-ClJAJwlL.js"},{"revision":null,"url":"assets/edge-DVbZnd3Y.js"},{"revision":null,"url":"assets/dream-maker-DEyDwFsd.js"},{"revision":null,"url":"assets/dracula-soft-CMBBfKF_.js"},{"revision":null,"url":"assets/dracula-B9lbE01y.js"},{"revision":null,"url":"assets/dotenv-NExMY2kS.js"},{"revision":null,"url":"assets/docx-preview-CGlMqltP.js"},{"revision":null,"url":"assets/docker-DN2jlyAh.js"},{"revision":null,"url":"assets/dist-D__U4ZJz.js"},{"revision":null,"url":"assets/dist-CipvJy9w.js"},{"revision":null,"url":"assets/diff-viewer-BheSOHfl.js"},{"revision":null,"url":"assets/diff-BCEo1Ej7.js"},{"revision":null,"url":"assets/dialog-D__LRQTn.js"},{"revision":null,"url":"assets/desktop-C2gJ6Ovb.js"},{"revision":null,"url":"assets/dax-CmuOw-mY.js"},{"revision":null,"url":"assets/database-viewer-BVLWYPa4.js"},{"revision":null,"url":"assets/database-Dj0DxgtX.js"},{"revision":null,"url":"assets/data-grid-types-DP-ZexEN.js"},{"revision":null,"url":"assets/data-grid-overlay-editor-DMTCHIG9.js"},{"revision":null,"url":"assets/dart-Ca7s-8hK.js"},{"revision":null,"url":"assets/dark-plus-XfbaH7kZ.js"},{"revision":null,"url":"assets/d-BnYjRXtH.js"},{"revision":null,"url":"assets/cypher-1cMqojSQ.js"},{"revision":null,"url":"assets/cue-BkDnFqUD.js"},{"revision":null,"url":"assets/csv-preview-xAwUDNat.js"},{"revision":null,"url":"assets/csv-parser-DHvoTjMF.js"},{"revision":null,"url":"assets/csv-BEbcJdHz.js"},{"revision":null,"url":"assets/css-VXsMY--y.js"},{"revision":null,"url":"assets/csharp-C1HHzXBp.js"},{"revision":null,"url":"assets/crystal-Bkg-Ly_g.js"},{"revision":null,"url":"assets/createLucideIcon-ConhwJnb.js"},{"revision":null,"url":"assets/cpp-CKzic-3E.js"},{"revision":null,"url":"assets/coq-DLSjSnmf.js"},{"revision":null,"url":"assets/copy-Su9m2utd.js"},{"revision":null,"url":"assets/context-menu-BSE5yuMG.js"},{"revision":null,"url":"assets/conflict-editor-BP7JFZzG.js"},{"revision":null,"url":"assets/common-lisp-CxIVJCtf.js"},{"revision":null,"url":"assets/coffee-DjBl4gm-.js"},{"revision":null,"url":"assets/codeql-DgSwFjqI.js"},{"revision":null,"url":"assets/codeowners-BwAyqWIH.js"},{"revision":null,"url":"assets/code-editor-CJ8g7dqm.js"},{"revision":null,"url":"assets/code-Dupqw5Fr.js"},{"revision":null,"url":"assets/cobol-Byn9FYKu.js"},{"revision":null,"url":"assets/cmake-DejCqcu4.js"},{"revision":null,"url":"assets/clojure-DFuWS20u.js"},{"revision":null,"url":"assets/clock-B1CPBp2g.js"},{"revision":null,"url":"assets/clarity-DPulbvKH.js"},{"revision":null,"url":"assets/circle-question-mark-EVgisosn.js"},{"revision":null,"url":"assets/chevron-right-CtcHmZg9.js"},{"revision":null,"url":"assets/chat-tab-BcR-3_6R.js"},{"revision":null,"url":"assets/catppuccin-mocha-B8QOAZLl.js"},{"revision":null,"url":"assets/catppuccin-macchiato-p-XgjxhP.js"},{"revision":null,"url":"assets/catppuccin-latte-CR5GeHws.js"},{"revision":null,"url":"assets/catppuccin-frappe-DLeGslh_.js"},{"revision":null,"url":"assets/can-open-in-ppm-BzVXoV-d.js"},{"revision":null,"url":"assets/cairo-Bn6rucli.js"},{"revision":null,"url":"assets/cadence-Cm8tQTHN.js"},{"revision":null,"url":"assets/c3-B65jvSM1.js"},{"revision":null,"url":"assets/c-clbySDvd.js"},{"revision":null,"url":"assets/bsl-D-UOfR1F.js"},{"revision":null,"url":"assets/bot-BHXjpQ7x.js"},{"revision":null,"url":"assets/blade-BHlL8SqU.js"},{"revision":null,"url":"assets/bird2-DXew-ut0.js"},{"revision":null,"url":"assets/bicep-CWPi4nfK.js"},{"revision":null,"url":"assets/bibtex-DoFFszjV.js"},{"revision":null,"url":"assets/berry-yl-kJr_H.js"},{"revision":null,"url":"assets/beancount-CqyXBwwF.js"},{"revision":null,"url":"assets/bat-Ca2SBbYN.js"},{"revision":null,"url":"assets/ballerina-CumGp9A7.js"},{"revision":null,"url":"assets/ayu-mirage-DsAECCMv.js"},{"revision":null,"url":"assets/ayu-light-DTOfkzhu.js"},{"revision":null,"url":"assets/ayu-dark-DTLdZ1Si.js"},{"revision":null,"url":"assets/awk-CfyLHXqS.js"},{"revision":null,"url":"assets/aurora-x-De_IaSKw.js"},{"revision":null,"url":"assets/audio-preview-y8XpCNrh.js"},{"revision":null,"url":"assets/astro-DVBCJfG6.js"},{"revision":null,"url":"assets/asm-B5S47Rgr.js"},{"revision":null,"url":"assets/asciidoc-DbBA6-sF.js"},{"revision":null,"url":"assets/architecture-PBZL5I3N-B4J2-O8Q.js"},{"revision":null,"url":"assets/ara-i83AydZj.js"},{"revision":null,"url":"assets/apply-theme-CMQXnUAa.js"},{"revision":null,"url":"assets/applescript-DO7AnO8U.js"},{"revision":null,"url":"assets/apl-i-ahKx6O.js"},{"revision":null,"url":"assets/api-themes-okiyhhp9.js"},{"revision":null,"url":"assets/api-settings-fdkhqLSF.js"},{"revision":null,"url":"assets/api-settings-DGhshDRg.js"},{"revision":null,"url":"assets/api-client-CKo60P6G.js"},{"revision":null,"url":"assets/api-client-B9OFv3nY.js"},{"revision":null,"url":"assets/apex-j0C6Xmk6.js"},{"revision":null,"url":"assets/apache-CnlleE6P.js"},{"revision":null,"url":"assets/angular-ts-wytn9PMm.js"},{"revision":null,"url":"assets/angular-html-jfMqUuRd.js"},{"revision":null,"url":"assets/andromeeda-DF1I8qi3.js"},{"revision":null,"url":"assets/ai-resource-editor-BLYgg033.js"},{"revision":null,"url":"assets/ada-Bt8r9fME.js"},{"revision":null,"url":"assets/actionscript-3-CJhQVjLA.js"},{"revision":null,"url":"assets/abap-C1K0-wzc.js"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"26dccd02a2ef7522892015154f5e3680","url":"manifest.webmanifest"}]);
@@ -167,7 +167,14 @@ src/
167
167
  │ │ └── jira-ticket-detail.tsx
168
168
  │ ├── database/
169
169
  │ ├── editor/
170
- │ ├── explorer/
170
+ │ ├── explorer/ # Project file tree (sidebar)
171
+ │ ├── floating-window/ # ADDED: Desktop window manager — drag/8-handle resize, z-band 30..38, persisted rects
172
+ │ ├── os-explorer/ # ADDED: OS File Explorer window body
173
+ │ │ ├── views/ # List / Icons (thumbnails) / Column (Miller) view components
174
+ │ │ ├── skins/ # Windows 11 + macOS Finder chrome, folder icons, [data-skin] CSS vars
175
+ │ │ ├── mobile/ # Full-screen bottom-sheet variant (top bar, places strip, bottom toolbar)
176
+ │ │ ├── dnd/ # Entry drag-and-drop (explorer ↔ explorer ↔ project tree)
177
+ │ │ └── actions/ # Disk mutations (cut/copy/paste/rename/trash/delete), collision prompt
171
178
  │ ├── git/
172
179
  │ ├── layout/
173
180
  │ ├── terminal/
@@ -332,6 +339,8 @@ src/
332
339
  - **AccountSelectorService** — Select active account based on config
333
340
  - **GitService** — Git commands via simple-git
334
341
  - **FileService** — File ops with path validation
342
+ - **fs-ops/** (ADDED) — Whole-disk filesystem ops for the OS Explorer window (`fs-path-guard.service.ts`, `fs-core-ops.ts`, `fs-ops-{stat,copy-move,mutate,trash,read-write}.service.ts`) — every route refuses the PPM dir/protected roots, `lstat`s links (never follows), async + bounded concurrency
343
+ - **host-info/** (ADDED) — Per-OS drives/known-folders/pinned-folders providers behind a 60s in-flight-deduped cache (`host-info.service.ts`), backing `/api/system/host`
335
344
  - **ProjectService** — Project CRUD, scanning, resolution
336
345
  - **TerminalService** — PTY lifecycle, shell spawning
337
346
  - **ClaudeUsageService** — Token tracking, cost calculation
@@ -96,6 +96,37 @@ These rules MUST be followed when creating or modifying any UI component. PPM is
96
96
 
97
97
  ---
98
98
 
99
+ ## Floating Windows
100
+
101
+ Desktop-only window manager (`src/web/components/floating-window/`), currently used by the OS
102
+ File Explorer. Any future floating-window feature must follow the same contract:
103
+
104
+ - **Z-band**: windows render at `zIndex = 30 + rank`, dense-ranked, capped at an **8-window
105
+ limit** (opening a 9th focuses the oldest window instead of spawning one). This keeps every
106
+ window strictly below the app's `z-40` click-away backdrops and `z-50` Radix layers (dropdowns,
107
+ dialogs, the command palette) — those must always stay reachable regardless of how many
108
+ windows are open.
109
+ - **Mobile fallback rule**: the window layer never mounts below the `md` breakpoint at all — not
110
+ a scaled-down window, a **separate full-screen bottom-sheet component** rendering the same
111
+ content component with a `variant="sheet"` (or equivalent) prop. Decide the desktop/mobile
112
+ branch with the same `isMobileDevice()` / `useIsMobile()` pair already used everywhere else in
113
+ the app (never a second breakpoint check).
114
+ - **Skin CSS scoping**: a skin (OS chrome, icon set, font stack) is scoped entirely through a
115
+ `data-skin="<id>"` attribute plus `[data-skin="..."] { --x-*: ... }` blocks layered over PPM's
116
+ existing semantic tokens — never a second light/dark color table. Because a window's chrome is
117
+ a sibling of its body in the DOM (not a descendant), `data-skin` must be set on **both** —
118
+ a `--x-*` var only resolves on the element that itself carries the attribute.
119
+ - **Coarse-pointer rules the explorer follows** (apply to any new window content):
120
+ - Resize/drag grab strips widen from 6/12px (edge/corner) to 12/20px under
121
+ `usePrefersCoarsePointer()` (a real `matchMedia("(pointer: coarse)")` check) — never a `md:`
122
+ breakpoint alone, since a touch laptop or iPad can be ≥768px wide with no mouse.
123
+ - `draggable` (HTML5 drag-and-drop) is never set on a coarse pointer — there is no touch
124
+ equivalent, and the guideline reserves long-press for the context menu instead.
125
+ - Row/tile height and toolbar buttons still need the 44×44px minimum on a coarse pointer even
126
+ at desktop width, gated the same way.
127
+
128
+ ---
129
+
99
130
  ## UI Framework Stack
100
131
 
101
132
  ### Tailwind CSS 4.2
@@ -10,6 +10,16 @@ PPM is the **lightest path from phone to code** — a self-hosted, BYOK, multi-d
10
10
 
11
11
  ## Completed Milestones
12
12
 
13
+ ### v0.17 — OS File Explorer Window (Released)
14
+ - Floating, OS-skinned file explorer window (Windows 11 / macOS Finder chrome, Linux → macOS skin) — drag, 8-way resize, multi-instance, persisted rect
15
+ - Browses the whole host filesystem via `/api/fs`, hardened to whole-disk scope (protected roots, PPM-dir shield, single-use path-bound download tokens)
16
+ - List / Icons (thumbnails) / Column (Miller) views; sidebar with drives, known folders, OS-pinned folders (Quick Access / Finder Favorites / GTK+KDE), PPM pins
17
+ - Double-click opens PPM-viewable files (incl. external `.db` via the host SQLite viewer) in the existing tab system; OS-style actions otherwise (Cut/Copy/Paste, Rename, Trash/Delete permanently, New, Properties)
18
+ - Mouse drag-and-drop of entries across explorer windows, sidebar, and the project tree (move / Ctrl-copy)
19
+ - Mobile: full-screen bottom-sheet variant of the same body (long-press menu, Select mode, single-column view)
20
+
21
+ *(Note: this roadmap's version-table sections below (v0.8–v1.0) predate this entry and are not kept in sync with the shipped version — see `CHANGELOG.md` for the authoritative release history.)*
22
+
13
23
  ### v0.1–v0.5 — Foundation (Released)
14
24
  - Bun runtime, Hono server, React + Vite frontend
15
25
  - File explorer, Monaco editor, xterm.js terminal
@@ -2212,3 +2212,62 @@ Would require:
2212
2212
  | **API** | No sensitive data in logs | Token masked in debug output |
2213
2213
  | **CORS** | Same-origin only | WS on same host as HTTP API |
2214
2214
 
2215
+ ---
2216
+
2217
+ ## OS File Explorer Window
2218
+
2219
+ A floating, OS-skinned window (Windows 11 / macOS Finder chrome, Linux → macOS skin) that browses
2220
+ the **whole host filesystem** — not just registered project directories — through the widened
2221
+ `/api/fs` family. This is a deliberate scope change from every other file-facing route in PPM
2222
+ (project-scoped, path-validated against one repo root): the explorer's authorization boundary is
2223
+ "the whole disk, behind PPM's existing session auth", not "one project".
2224
+
2225
+ ### FS scope = auth boundary
2226
+
2227
+ Every `/api/fs` route — including `docx-html`, `read`, `raw`, both SQLite doors — passes through
2228
+ one shared guard chain (`src/services/fs-path-guard.service.ts`) before touching disk:
2229
+
2230
+ | Protection | Mechanism |
2231
+ |---|---|
2232
+ | PPM-dir shield | `assertNotPpmDir` refuses `getPpmDir()` (config, auth token, credentials) as a source **or** destination of any read or mutation, checked at both the given path and its resolved realpath (defeats a symlink pointed at the PPM dir) |
2233
+ | Protected roots | `/`, drive roots (`C:\`), `$HOME` and the PPM dir itself refuse delete/rename/move as a source |
2234
+ | Download tokens | `/api/fs/download/token` issues a single-use, path-bound token; `/api/fs/raw` spends it on first use, rejects replay and any path mismatch |
2235
+ | Symlink safety | every op `lstat`s the entry itself (never follows to the target) so a link *to* a protected path can itself still be deleted, but nothing can read/write *through* one into the PPM dir |
2236
+ | SQL injection surface | the external-DB doors (`/api/fs/sqlite/*`) block `ATTACH`/`DETACH` by keyword scan (after stripping comments/string literals) before executing any query — the same class of guard the project-scoped `/sqlite` route also needed |
2237
+ | No event-loop blocking | every op is `fs.promises`-based with bounded concurrency and a per-entry timeout — a dead network mount or sleeping USB drive cannot stall unrelated requests, which matters once scope is the whole disk instead of one project |
2238
+
2239
+ ### API surface
2240
+
2241
+ | Method | Path | Purpose |
2242
+ |---|---|---|
2243
+ | GET | `/api/system/host` | `HostInfo`: platform, path separator, homedir, drives, known folders, OS-pinned folders (Quick Access / Finder Favorites / GTK+KDE bookmarks), warnings |
2244
+ | GET | `/api/fs/browse` | Directory listing (existing route, whitelist widened to `/`) |
2245
+ | GET | `/api/fs/stat` | Single-entry metadata |
2246
+ | POST | `/api/fs/copy` \| `/move` \| `/rename` \| `/touch` \| `/mkdir` | Mutations, collision (`EEXIST`)/self-nesting (`EINVAL`) reported for the client to resolve |
2247
+ | DELETE | `/api/fs/delete` \| `/rmdir` | `{permanent?}` — OS trash (Recycle Bin / Trash / gio) by default, permanent on request |
2248
+ | POST/GET | `/api/fs/download/token` / `/api/fs/raw` | Single-use, path-bound download |
2249
+ | GET/POST | `/api/fs/sqlite/{tables,schema,data,query}` | External `.db` viewer — same shape as the project-scoped `/sqlite` route, `path` absolute, PPM dir refused |
2250
+
2251
+ `host-info.service.ts` orchestrates three OS-specific provider sets (`src/services/host-info/`)
2252
+ behind a 60s cache with in-flight de-duplication (concurrent `?refresh=true` calls share one
2253
+ rebuild rather than spawning N PowerShell/plutil/findmnt processes).
2254
+
2255
+ ### Floating window layer
2256
+
2257
+ `src/web/components/floating-window/` — a content-agnostic window manager (zustand store):
2258
+ drag/8-handle-resize gestures write geometry straight to the DOM element (no React re-render per
2259
+ pointermove), committing to the store only on gesture end; rect + open windows persist to
2260
+ `localStorage["ppm-windows"]`, restored once per app load and re-clamped to the current viewport.
2261
+
2262
+ Windows render in a portal at **z-30..38** (`30 + rank`, capped at an 8-window dense-rank limit) —
2263
+ below the app's existing `z-40` click-away backdrops and `z-50` Radix layers, so command palette,
2264
+ dropdowns and dialogs always stay reachable above any number of open explorer windows. Below the
2265
+ `md` breakpoint the layer never mounts at all; `src/web/components/os-explorer/mobile/` renders the
2266
+ same `ExplorerBody` component inside a full-screen bottom sheet instead (`variant="sheet"`).
2267
+
2268
+ A window's titlebar is a swappable `chrome` component (`WindowChromeProps` contract) — the OS skin
2269
+ picks Windows caption buttons or macOS traffic lights from `src/web/components/os-explorer/skins/`,
2270
+ scoped entirely through `[data-skin="windows"|"macos"]` CSS variables layered over PPM's existing
2271
+ semantic theme tokens, so both PPM dark and light mode render correctly under either skin with no
2272
+ second color table.
2273
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hienlh/ppm",
3
- "version": "0.17.57",
3
+ "version": "0.18.0",
4
4
  "description": "Personal Project Manager — mobile-first web IDE with AI assistance",
5
5
  "author": "hienlh",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -53,6 +53,7 @@
53
53
  "@inquirer/prompts": "^8.3.0",
54
54
  "@monaco-editor/react": "^4.7.0",
55
55
  "@radix-ui/react-switch": "^1.2.6",
56
+ "@react-symbols/icons": "^1.4.1",
56
57
  "@skitee3000/bun-pty": "^0.3.3",
57
58
  "@tanstack/react-table": "^8.21.3",
58
59
  "@tanstack/react-virtual": "^3.14.5",
@@ -16,6 +16,8 @@ import { projectScopedRouter } from "./routes/project-scoped.ts";
16
16
  import { postgresRoutes } from "./routes/postgres.ts";
17
17
  import { databaseRoutes } from "./routes/database.ts";
18
18
  import { fsBrowseRoutes } from "./routes/fs-browse.ts";
19
+ import { fsOpsRoutes } from "./routes/fs-ops.ts";
20
+ import { fsSqliteRoutes } from "./routes/fs-sqlite.ts";
19
21
  import { accountsRoutes } from "./routes/accounts.ts";
20
22
  import { proxyRoutes } from "./routes/proxy.ts";
21
23
  import { mcpRoutes } from "./routes/mcp.ts";
@@ -152,11 +154,17 @@ app.route("/api/tunnels", tunnelRegistryRoutes);
152
154
 
153
155
  // Filesystem operations (browse, list, read, write) — consolidated in fs-browse route
154
156
  app.route("/api/fs", fsBrowseRoutes);
157
+ app.route("/api/fs", fsOpsRoutes);
158
+ app.route("/api/fs/sqlite", fsSqliteRoutes);
155
159
 
156
160
  // System resource monitoring (SSE + JSON)
157
161
  import { resourceRoutes } from "./routes/resources.ts";
158
162
  app.route("/api/system", resourceRoutes);
159
163
 
164
+ // Host OS facts for the file explorer (platform, drives, known + pinned folders)
165
+ import { hostInfoRoutes } from "./routes/host-info.ts";
166
+ app.route("/api/system", hostInfoRoutes);
167
+
160
168
  // Finishes an OAuth loopback login started from another device
161
169
  import { loopbackRoutes } from "./routes/oauth-loopback.ts";
162
170
  app.route("/api/loopback", loopbackRoutes);
@@ -2,7 +2,7 @@ import { Hono } from "hono";
2
2
  import { resolve, isAbsolute } from "node:path";
3
3
  import { existsSync, mkdirSync } from "node:fs";
4
4
  import { fileService, SecurityError, NotFoundError, ValidationError } from "../../services/file.service.ts";
5
- import { readSystemFile } from "../../services/fs-browse.service.ts";
5
+ import { readSystemFileSync } from "../../services/fs-browse.service.ts";
6
6
  import { ok, err } from "../../types/api.ts";
7
7
  import { errorStatus } from "../helpers/error-status.ts";
8
8
  import mammoth from "mammoth";
@@ -243,7 +243,7 @@ fileRoutes.get("/compare", (c) => {
243
243
  }
244
244
  // Support absolute paths (files outside project, e.g. /tmp/)
245
245
  const readSide = (p: string) =>
246
- isAbsolute(p) ? readSystemFile(p).content : fileService.readFile(projectPath, p).content;
246
+ isAbsolute(p) ? readSystemFileSync(p).content : fileService.readFile(projectPath, p).content;
247
247
  const original = readSide(file1);
248
248
  const modified = readSide(file2);
249
249
  return c.json(ok({ original, modified }));