@hienlh/ppm 0.22.11 → 0.23.1

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 (887) hide show
  1. package/CHANGELOG.md +24 -1
  2. package/CLAUDE.md +14 -0
  3. package/THIRD-PARTY-NOTICES.md +1 -1
  4. package/assets/skills/ppm/SKILL.md +1 -1
  5. package/assets/skills/ppm/references/http-api.md +1 -1
  6. package/bun.lock +17 -0
  7. package/dist/web/assets/__vite-browser-external-CHpXvvmW.js +1 -0
  8. package/dist/web/assets/accounts-settings-section-BR7t8CEk.js +1 -0
  9. package/dist/web/assets/ai-resource-editor-BFVg2d2a.js +1 -0
  10. package/dist/web/assets/ai-settings-section-BJw7E_lM.js +1 -0
  11. package/dist/web/assets/ai-settings-section-CO-i3ghA.js +1 -0
  12. package/dist/web/assets/angular-html-D-rbk4zq.js +1 -0
  13. package/dist/web/assets/angular-ts-B_ldKah2.js +1 -0
  14. package/dist/web/assets/api-client-BgedDTvo.js +1 -0
  15. package/dist/web/assets/api-client-c8YOpTlT.js +1 -0
  16. package/dist/web/assets/api-settings-0s1Rfgcu.js +1 -0
  17. package/dist/web/assets/api-settings-Bnp28Ysw.js +1 -0
  18. package/dist/web/assets/api-themes-Pp-AZvwV.js +1 -0
  19. package/dist/web/assets/apl-19Dr02g6.js +1 -0
  20. package/dist/web/assets/appearance-settings-section-Ck_FPs9g.js +1 -0
  21. package/dist/web/assets/architecture-PBZL5I3N-B_n8ddB4.js +1 -0
  22. package/dist/web/assets/astro-1q5o0N64.js +1 -0
  23. package/dist/web/assets/audio-preview-DXtE1Lpz.js +1 -0
  24. package/dist/web/assets/blade-BNgXZCCk.js +1 -0
  25. package/dist/web/assets/branch-review-tab-CNVxMRuo.js +1 -0
  26. package/dist/web/assets/bsl-C5u8-gEq.js +1 -0
  27. package/dist/web/assets/button-CBehaXpV.js +1 -0
  28. package/dist/web/assets/c-Dko4ZphN.js +1 -0
  29. package/dist/web/assets/cairo-CrhmfCJH.js +1 -0
  30. package/dist/web/assets/chat-tab-DqLqcBci.js +1 -0
  31. package/dist/web/assets/chat-tab-MdU9Jr3F.js +15 -0
  32. package/dist/web/assets/cobol-BgRxrYyZ.js +1 -0
  33. package/dist/web/assets/code-editor-wEeCvvMR.js +7 -0
  34. package/dist/web/assets/codex-daily-guard-B21M4m-P.js +1 -0
  35. package/dist/web/assets/coffee-9hmEOIYs.js +1 -0
  36. package/dist/web/assets/conflict-editor-Cu-z_LdX.js +19 -0
  37. package/dist/web/assets/context-menu-CjYTq8DI.js +1 -0
  38. package/dist/web/assets/cpp-BntsLe3X.js +1 -0
  39. package/dist/web/assets/createLucideIcon-DBXq3G0e.js +1 -0
  40. package/dist/web/assets/crystal-CoXN2Gj8.js +1 -0
  41. package/dist/web/assets/css-DKuKlxIj.js +1 -0
  42. package/dist/web/assets/csv-preview-DHbBIqUu.js +2 -0
  43. package/dist/web/assets/data-grid-overlay-editor-2ERlh7_N.js +1 -0
  44. package/dist/web/assets/data-grid-types-DatI2Wee.js +1 -0
  45. package/dist/web/assets/database-viewer-_McYjRzc.js +1 -0
  46. package/dist/web/assets/design-export-client-SWCbGwwU.js +1 -0
  47. package/dist/web/assets/design-responsive-dialog-CcJETHO2.js +1 -0
  48. package/dist/web/assets/design-tab-C0TUD5g-.js +33 -0
  49. package/dist/web/assets/designs-sidebar-panel-XCAwSNtg.js +1 -0
  50. package/dist/web/assets/dialog-tzBRkGeW.js +1 -0
  51. package/dist/web/assets/diff-viewer-C4z-_68x.js +4 -0
  52. package/dist/web/assets/dist-CgtN5c7X.js +1 -0
  53. package/dist/web/assets/dist-wmDsBD_Z.js +1 -0
  54. package/dist/web/assets/docx-preview-C-UKGMXR.js +12 -0
  55. package/dist/web/assets/edge-gf7weBFr.js +1 -0
  56. package/dist/web/assets/edit-diff-preview-8nIct7kS.js +7 -0
  57. package/dist/web/assets/editor-language-service-D8hW_eew.js +1 -0
  58. package/dist/web/assets/elixir-DOEwBYus.js +1 -0
  59. package/dist/web/assets/elm-7yx1A5qt.js +1 -0
  60. package/dist/web/assets/erb-Bm_J_rBw.js +1 -0
  61. package/dist/web/assets/erlang-DgkAVj5y.js +1 -0
  62. package/dist/web/assets/esm-wquH4IhX.js +2 -0
  63. package/dist/web/assets/explorer-body-CdxolRQG.js +2 -0
  64. package/dist/web/assets/explorer-window-content-D1fkI_cL.js +1 -0
  65. package/dist/web/assets/extension-manager-section-CAaSoAuG.js +1 -0
  66. package/dist/web/assets/extension-webview-DmBZun_i.js +12 -0
  67. package/dist/web/assets/file-icons-BlOxPo3P.js +1 -0
  68. package/dist/web/assets/file-store-CTlJqj2m.js +1 -0
  69. package/dist/web/assets/files-settings-section-BFIzSuBh.js +1 -0
  70. package/dist/web/assets/format-date-BMtvCeb9.js +1 -0
  71. package/dist/web/assets/format-file-meta-DLaHgkdx.js +1 -0
  72. package/dist/web/assets/fortran-fixed-form-s8lQifxM.js +1 -0
  73. package/dist/web/assets/fs-api-RVc5RtTA.js +1 -0
  74. package/dist/web/assets/fsharp-D6bmDjka.js +1 -0
  75. package/dist/web/assets/gdresource-wPII3GWW.js +1 -0
  76. package/dist/web/assets/general-settings-section-BLLUvdhX.js +1 -0
  77. package/dist/web/assets/git-commit-DqLhxK6K.js +1 -0
  78. package/dist/web/assets/git-log-panel-Lq2Vkm8w.js +1 -0
  79. package/dist/web/assets/git-rebase-Cy0Mp9W1.js +1 -0
  80. package/dist/web/assets/git-repo-store-DFTJ5ngK.js +1 -0
  81. package/dist/web/assets/gitGraph-HDMCJU4V-w1WApLyy.js +1 -0
  82. package/dist/web/assets/glide-data-grid-CHdKFqis.js +141 -0
  83. package/dist/web/assets/glimmer-js-CmHFqq4N.js +1 -0
  84. package/dist/web/assets/glimmer-ts-vLmZC1JJ.js +1 -0
  85. package/dist/web/assets/glsl-DArPh0ws.js +1 -0
  86. package/dist/web/assets/graphql-B-_Ilekp.js +1 -0
  87. package/dist/web/assets/group-chat-tab-D2bluLme.js +1 -0
  88. package/dist/web/assets/hack-4KVRpwwM.js +1 -0
  89. package/dist/web/assets/haml-DoK94C5G.js +1 -0
  90. package/dist/web/assets/handlebars-D0_6yNlK.js +1 -0
  91. package/dist/web/assets/html-BOqZwhzR.js +1 -0
  92. package/dist/web/assets/html-derivative-If_2xbJ8.js +1 -0
  93. package/dist/web/assets/http-B6pQhqN4.js +1 -0
  94. package/dist/web/assets/hurl-BjW79rql.js +1 -0
  95. package/dist/web/assets/hxml-B1Yl76u6.js +1 -0
  96. package/dist/web/assets/icons-CO_II6D-.js +1 -0
  97. package/dist/web/assets/image-preview-78Fguk1f.js +1 -0
  98. package/dist/web/assets/index-CzYrKDUF.css +1 -0
  99. package/dist/web/assets/index-DSbUqWiH.js +52 -0
  100. package/dist/web/assets/info-3K5VOQVL-Bv1wKdPY.js +1 -0
  101. package/dist/web/assets/input-CP31LZnN.js +1 -0
  102. package/dist/web/assets/java-DPqGHyuh.js +1 -0
  103. package/dist/web/assets/javascript-D8x_R8ev.js +1 -0
  104. package/dist/web/assets/jinja-DOkXV84k.js +1 -0
  105. package/dist/web/assets/jira-watcher-section-BOe_ztas.js +1 -0
  106. package/dist/web/assets/jison-CGzlyBWT.js +1 -0
  107. package/dist/web/assets/json-kcFjaEWA.js +1 -0
  108. package/dist/web/assets/jsx-BzlJCumN.js +1 -0
  109. package/dist/web/assets/julia-CZrbm1Fa.js +1 -0
  110. package/dist/web/assets/just-bRG6zWI_.js +1 -0
  111. package/dist/web/assets/keybindings-store-DFPJBiXT.js +1 -0
  112. package/dist/web/assets/keyboard-shortcuts-section-CJubMhMq.js +1 -0
  113. package/dist/web/assets/latex-CZHLEkde.js +1 -0
  114. package/dist/web/assets/lib-KePrAxj7.js +4 -0
  115. package/dist/web/assets/liquid-Dcfq3Ccc.js +1 -0
  116. package/dist/web/assets/lua-Ggfu9EYp.js +1 -0
  117. package/dist/web/assets/markdown-renderer-6oU-L6RN.js +5 -0
  118. package/dist/web/assets/markdown-renderer-DxSQ4aqW.js +1 -0
  119. package/dist/web/assets/marko-BUwN_Iax.js +1 -0
  120. package/dist/web/assets/mdc-CIifdeNY.js +1 -0
  121. package/dist/web/assets/media-url-GqzhazJS.js +1 -0
  122. package/dist/web/assets/mobile-bottom-sheet-Cf4kV1hS.js +1 -0
  123. package/dist/web/assets/mobile-explorer-sheet-D0968cuP.js +1 -0
  124. package/dist/web/assets/monaco-dotenv-language-COsgiuQg.js +1 -0
  125. package/dist/web/assets/new-chat-provider-CJx_waY3.js +1 -0
  126. package/dist/web/assets/new-design-dialog-CbrMbKum.js +1 -0
  127. package/dist/web/assets/nextflow-DufnRZW1.js +1 -0
  128. package/dist/web/assets/nginx-DtUJGfad.js +1 -0
  129. package/dist/web/assets/nim-BeBPwibr.js +1 -0
  130. package/dist/web/assets/notification-store-BO3RInEL.js +1 -0
  131. package/dist/web/assets/notifications-settings-section-Bfxqz65i.js +1 -0
  132. package/dist/web/assets/number-overlay-editor-xzM7GhYV.js +9 -0
  133. package/dist/web/assets/onboarding-entry-CcvySZ_l.js +1 -0
  134. package/dist/web/assets/onboarding-quick-orientation-CT4PylG0.js +1 -0
  135. package/dist/web/assets/overview-panel-DshAIz6C.js +1 -0
  136. package/dist/web/assets/packet-RMMSAZCW-Scl5HE6U.js +1 -0
  137. package/dist/web/assets/panel-store-BUQ-CPsd.js +1 -0
  138. package/dist/web/assets/pdf-preview-BWim6mu1.js +1 -0
  139. package/dist/web/assets/perl-hV0EoLCp.js +1 -0
  140. package/dist/web/assets/php-N1YBqBhK.js +1 -0
  141. package/dist/web/assets/pie-UPGHQEXC-sY83O9qJ.js +1 -0
  142. package/dist/web/assets/portal-container-context-NFSuymMu.js +1 -0
  143. package/dist/web/assets/postgres-viewer-HwlL1UTJ.js +3 -0
  144. package/dist/web/assets/ppmbot-settings-section-CHr2FIDj.js +1 -0
  145. package/dist/web/assets/pptx-export-D6DOknBD.js +111 -0
  146. package/dist/web/assets/problems-panel-41z59l78.js +1 -0
  147. package/dist/web/assets/process-table-CVMEMJqQ.js +1 -0
  148. package/dist/web/assets/project-framework-store-XxFXcUpb.js +1 -0
  149. package/dist/web/assets/project-store-C5gJXkvb.js +1 -0
  150. package/dist/web/assets/proxy-settings-section-B4dkvCCx.js +1 -0
  151. package/dist/web/assets/pug-IMA1knL7.js +1 -0
  152. package/dist/web/assets/qml-DuwVuXga.js +1 -0
  153. package/dist/web/assets/query-audit-section-Cn11xqgz.js +1 -0
  154. package/dist/web/assets/r-DsXT2lmn.js +1 -0
  155. package/dist/web/assets/radar-KQ55EAFF-CNhm_kzj.js +1 -0
  156. package/dist/web/assets/razor-Be4LE-G0.js +1 -0
  157. package/dist/web/assets/react-CzUPVyyG.js +1 -0
  158. package/dist/web/assets/regexp-ztLDvplH.js +1 -0
  159. package/dist/web/assets/remote-desktop-clipboard-notice-Co4vEiiB.js +1 -0
  160. package/dist/web/assets/remote-desktop-mobile-sheet-Cv4yo7K4.js +2 -0
  161. package/dist/web/assets/remote-desktop-mobile-view-CcuulHIu.js +1 -0
  162. package/dist/web/assets/remote-desktop-readiness-gate-ouPRvBlu.js +1 -0
  163. package/dist/web/assets/remote-desktop-window-content-DmH3jBuG.js +1 -0
  164. package/dist/web/assets/rolldown-runtime-C5c2KzVm.js +1 -0
  165. package/dist/web/assets/rst-BdtOZUlL.js +1 -0
  166. package/dist/web/assets/ruby-DTna6e9n.js +1 -0
  167. package/dist/web/assets/run-in-terminal-SU9cwoZ4.js +1 -0
  168. package/dist/web/assets/sas-X50YKLBX.js +1 -0
  169. package/dist/web/assets/schedules-settings-section-Dy6hARk0.js +1 -0
  170. package/dist/web/assets/scroll-area-xAtds1T-.js +1 -0
  171. package/dist/web/assets/scss-cQk9zuqD.js +1 -0
  172. package/dist/web/assets/send-to-chat-TSKk3fI9.js +1 -0
  173. package/dist/web/assets/separator-D8SNZI6E.js +1 -0
  174. package/dist/web/assets/settings-body-CZSwxG0i.js +2 -0
  175. package/dist/web/assets/settings-store-DXmQug0m.js +2 -0
  176. package/dist/web/assets/settings-tab-B_WPC-y7.js +1 -0
  177. package/dist/web/assets/settings-window-content-CSWdwQn1.js +1 -0
  178. package/dist/web/assets/shaderlab-CSeOcwk6.js +1 -0
  179. package/dist/web/assets/shellscript-Dtzjnpp9.js +1 -0
  180. package/dist/web/assets/shellsession-AqADqsjv.js +1 -0
  181. package/dist/web/assets/soy-DeMex-y3.js +1 -0
  182. package/dist/web/assets/sparql-CDZTYDwx.js +1 -0
  183. package/dist/web/assets/sql-BS_vTOM8.js +1 -0
  184. package/dist/web/assets/sql-query-editor-6Ee_Zn5j.js +1 -0
  185. package/dist/web/assets/sqlite-viewer-Cj0S_m9V.js +1 -0
  186. package/dist/web/assets/stata-PkjbLwNy.js +1 -0
  187. package/dist/web/assets/surrealql-BJ6bKPXV.js +1 -0
  188. package/dist/web/assets/svelte-D4u1sGpe.js +1 -0
  189. package/dist/web/assets/system-monitor-body-PQqXdK4a.js +2 -0
  190. package/dist/web/assets/system-monitor-tab-BEjvgQuQ.js +1 -0
  191. package/dist/web/assets/system-monitor-window-content-DZwvvN-M.js +1 -0
  192. package/dist/web/assets/tab-host-window-content-CnV4Z4Yt.js +1 -0
  193. package/dist/web/assets/tab-store-DqeaGhhE.js +1 -0
  194. package/dist/web/assets/team-member-sheet-8EVCTM-X.js +2 -0
  195. package/dist/web/assets/team-member-window-content-Bc0ydBAn.js +1 -0
  196. package/dist/web/assets/templ-vtFoIgGG.js +1 -0
  197. package/dist/web/assets/terminal-tab-0b63-txz.js +3 -0
  198. package/dist/web/assets/tex-o6JLe3Qo.js +1 -0
  199. package/dist/web/assets/tool-cards-C09WknHl.js +9 -0
  200. package/dist/web/assets/treemap-KZPCXAKY-CfpX4ULx.js +1 -0
  201. package/dist/web/assets/ts-tags-DkmPnhIx.js +1 -0
  202. package/dist/web/assets/tsx-BUq9xm2T.js +1 -0
  203. package/dist/web/assets/twig-I9ja_Rk_.js +1 -0
  204. package/dist/web/assets/typescript-CP3RLBKz.js +1 -0
  205. package/dist/web/assets/use-blob-url-mZfScQdx.js +1 -0
  206. package/dist/web/assets/use-inline-blame-BuAc9IXE.js +16 -0
  207. package/dist/web/assets/use-is-mobile-CkO33jqU.js +1 -0
  208. package/dist/web/assets/use-lsp-DAtq1G0M.js +6 -0
  209. package/dist/web/assets/use-monaco-theme-Ch_znquJ.js +1 -0
  210. package/dist/web/assets/use-open-team-member-DHzZiJZw.js +1 -0
  211. package/dist/web/assets/use-visual-viewport-C307OVeV.js +1 -0
  212. package/dist/web/assets/use-websocket-DGEOad8p.js +1 -0
  213. package/dist/web/assets/vendor-markdown-QKPNiWEd.js +291 -0
  214. package/dist/web/assets/vendor-mermaid-eg2XWIjK.js +2921 -0
  215. package/dist/web/assets/vendor-ui-BHh12_0v.js +45 -0
  216. package/dist/web/assets/video-preview-DH3RtwVT.js +1 -0
  217. package/dist/web/assets/vue-DJf-APPD.js +1 -0
  218. package/dist/web/assets/vue-html-DUJ89Ycn.js +1 -0
  219. package/dist/web/assets/vue-vine-CWUFwuRE.js +1 -0
  220. package/dist/web/assets/window-pip-registry-DH07f_8k.js +1 -0
  221. package/dist/web/assets/window-store-B4cbZ5rr.js +1 -0
  222. package/dist/web/assets/ws-auth-B_y5rMfZ.js +1 -0
  223. package/dist/web/assets/xml-DshhaDKq.js +1 -0
  224. package/dist/web/assets/xsl-BlRNlmF7.js +1 -0
  225. package/dist/web/assets/yaml-seUOGdyI.js +1 -0
  226. package/dist/web/index.html +37 -36
  227. package/dist/web/sw.js +1 -1
  228. package/docs/architecture/workspace-and-ui.md +47 -0
  229. package/docs/project-roadmap.md +16 -0
  230. package/docs/system-architecture.md +11 -1
  231. package/package.json +4 -1
  232. package/scripts/gen-product-icons.ts +10 -0
  233. package/src/providers/claude-agent-sdk-query-options.ts +68 -1
  234. package/src/providers/claude-agent-sdk.ts +44 -15
  235. package/src/providers/codex-app-server/codex-event-mapper.ts +18 -1
  236. package/src/providers/codex-app-server/codex-jsonrpc-client.ts +4 -3
  237. package/src/providers/codex-app-server/codex-permission-map.ts +11 -1
  238. package/src/providers/codex-app-server/codex-protocol.ts +5 -0
  239. package/src/providers/codex-app-server/codex-provider.ts +32 -15
  240. package/src/providers/codex-app-server/codex-thread-params.ts +96 -0
  241. package/src/server/helpers/preview-asset-guard.ts +36 -0
  242. package/src/server/index.ts +15 -0
  243. package/src/server/routes/chat.ts +41 -4
  244. package/src/server/routes/design-check.ts +48 -0
  245. package/src/server/routes/design-comments.ts +63 -0
  246. package/src/server/routes/design-export.ts +84 -0
  247. package/src/server/routes/design-preview.ts +159 -0
  248. package/src/server/routes/design-route-helpers.ts +25 -0
  249. package/src/server/routes/design-style.ts +28 -0
  250. package/src/server/routes/design-tweaks.ts +38 -0
  251. package/src/server/routes/design-undo.ts +27 -0
  252. package/src/server/routes/designs.ts +101 -0
  253. package/src/server/routes/html-preview.ts +4 -24
  254. package/src/server/routes/project-scoped.ts +2 -0
  255. package/src/server/ws/chat.ts +8 -1
  256. package/src/server/ws/global.ts +22 -1
  257. package/src/services/chat.service.ts +64 -1
  258. package/src/services/db.service.ts +73 -4
  259. package/src/services/design/bridge/bridge-anchor-resolve.ts +96 -0
  260. package/src/services/design/bridge/bridge-core.ts +205 -0
  261. package/src/services/design/bridge/bridge-element-info.ts +180 -0
  262. package/src/services/design/bridge/bridge-extract-blocks.ts +115 -0
  263. package/src/services/design/bridge/bridge-extract-images.ts +96 -0
  264. package/src/services/design/bridge/bridge-extract-slides.ts +169 -0
  265. package/src/services/design/bridge/bridge-extract-text.ts +187 -0
  266. package/src/services/design/bridge/bridge-layout-boxes.ts +137 -0
  267. package/src/services/design/bridge/bridge-layout-check.ts +99 -0
  268. package/src/services/design/bridge/bridge-layout-grid.ts +165 -0
  269. package/src/services/design/bridge/bridge-layout-screenshot.ts +106 -0
  270. package/src/services/design/bridge/bridge-nav-guard.ts +61 -0
  271. package/src/services/design/bridge/bridge-picker-overlay.ts +54 -0
  272. package/src/services/design/bridge/bridge-picker.ts +174 -0
  273. package/src/services/design/bridge/bridge-pins.ts +157 -0
  274. package/src/services/design/bridge/bridge-script.ts +104 -0
  275. package/src/services/design/bridge/bridge-transform-math.ts +104 -0
  276. package/src/services/design/bridge/bridge-transform-overlay.ts +94 -0
  277. package/src/services/design/bridge/bridge-transform-style.ts +78 -0
  278. package/src/services/design/bridge/bridge-transform.ts +201 -0
  279. package/src/services/design/bridge/bridge-tweaks.ts +118 -0
  280. package/src/services/design/check/design-canvas-check-broker.ts +77 -0
  281. package/src/services/design/comments/design-comment-element-context.ts +81 -0
  282. package/src/services/design/comments/design-comments-store.ts +81 -0
  283. package/src/services/design/design-comments.service.ts +140 -0
  284. package/src/services/design/design-edit-undo-journal.ts +125 -0
  285. package/src/services/design/design-error.ts +19 -0
  286. package/src/services/design/design-events.ts +46 -0
  287. package/src/services/design/design-fs.ts +67 -0
  288. package/src/services/design/design-instructions.ts +97 -0
  289. package/src/services/design/design-lock.ts +74 -0
  290. package/src/services/design/design-manifest.ts +92 -0
  291. package/src/services/design/design-paths.ts +97 -0
  292. package/src/services/design/design-restore-journal.ts +143 -0
  293. package/src/services/design/design-restore.service.ts +77 -0
  294. package/src/services/design/design-safe-walk.ts +114 -0
  295. package/src/services/design/design-slug.ts +35 -0
  296. package/src/services/design/design-snapshot-history.ts +159 -0
  297. package/src/services/design/design-snapshots.service.ts +161 -0
  298. package/src/services/design/design-starter-template.ts +100 -0
  299. package/src/services/design/design-store.service.ts +156 -0
  300. package/src/services/design/design-style-patch.service.ts +83 -0
  301. package/src/services/design/design-tool-policy.ts +111 -0
  302. package/src/services/design/design-turn-snapshot.ts +80 -0
  303. package/src/services/design/design-tweaks-commit.service.ts +138 -0
  304. package/src/services/design/design-write-rate-limit.ts +51 -0
  305. package/src/services/design/export/css-url-inline.ts +130 -0
  306. package/src/services/design/export/design-export-asset-reader.ts +57 -0
  307. package/src/services/design/export/design-export-entry.ts +33 -0
  308. package/src/services/design/export/design-standalone-html.ts +167 -0
  309. package/src/services/design/export/design-zip-export.ts +106 -0
  310. package/src/services/design/mcp/design-mcp-access.ts +16 -0
  311. package/src/services/design/mcp/design-mcp-endpoint.ts +118 -0
  312. package/src/services/design/mcp/design-mcp-tokens.ts +82 -0
  313. package/src/services/design/mcp/design-mcp-tool.ts +41 -0
  314. package/src/services/design/preview/design-csp.ts +31 -0
  315. package/src/services/design/preview/design-preview-html.ts +98 -0
  316. package/src/services/design/preview/design-preview-scope.ts +66 -0
  317. package/src/services/design/preview/design-preview-tokens.ts +137 -0
  318. package/src/services/design/preview/expired-page.ts +30 -0
  319. package/src/services/design/preview/html-instrument.ts +119 -0
  320. package/src/services/design/preview/print-view.ts +62 -0
  321. package/src/services/design/source/css-root-selector.ts +20 -0
  322. package/src/services/design/source/css-root-vars-patch.ts +202 -0
  323. package/src/services/design/source/design-source-file.ts +62 -0
  324. package/src/services/design/source/design-style-sources.ts +101 -0
  325. package/src/services/design/source/element-source-range.ts +65 -0
  326. package/src/services/design/source/html-style-blocks.ts +87 -0
  327. package/src/services/design/source/inline-style-declarations.ts +131 -0
  328. package/src/services/design/source/inline-style-patch.ts +79 -0
  329. package/src/services/design/source/tweak-patch-plan.ts +143 -0
  330. package/src/services/file-watcher/ignore-rules.ts +9 -1
  331. package/src/services/server-listen-address.ts +25 -0
  332. package/src/shared/design-bridge-messages-check.ts +44 -0
  333. package/src/shared/design-bridge-messages-picker.ts +142 -0
  334. package/src/shared/design-bridge-messages-slides.ts +37 -0
  335. package/src/shared/design-bridge-messages-transform.ts +121 -0
  336. package/src/shared/design-bridge-messages-tweaks.ts +65 -0
  337. package/src/shared/design-bridge-protocol.ts +158 -0
  338. package/src/shared/design-canvas-check-format.ts +69 -0
  339. package/src/shared/design-canvas-check.ts +148 -0
  340. package/src/shared/design-cdn-hosts.ts +17 -0
  341. package/src/shared/design-comment-types.ts +111 -0
  342. package/src/shared/design-slide-doc-parse.ts +140 -0
  343. package/src/shared/design-slide-doc.ts +91 -0
  344. package/src/shared/design-system-init-prompt.ts +35 -0
  345. package/src/shared/design-tweaks.ts +175 -0
  346. package/src/shared/design-types.ts +63 -0
  347. package/src/shared/untrusted-text.ts +15 -0
  348. package/src/types/chat.ts +22 -0
  349. package/src/types/config.ts +1 -1
  350. package/src/web/components/chat/chat-history-bar.tsx +18 -15
  351. package/src/web/components/chat/chat-history-panel.tsx +3 -9
  352. package/src/web/components/chat/chat-tab.tsx +74 -40
  353. package/src/web/components/chat/message-input.tsx +11 -4
  354. package/src/web/components/chat/session-history-list.tsx +5 -9
  355. package/src/web/components/design/canvas/canvas-geometry.ts +47 -0
  356. package/src/web/components/design/canvas/design-canvas-pane.tsx +192 -0
  357. package/src/web/components/design/canvas/design-issues-badge.tsx +71 -0
  358. package/src/web/components/design/canvas/device-frame-presets.ts +37 -0
  359. package/src/web/components/design/canvas/use-design-bridge.ts +169 -0
  360. package/src/web/components/design/canvas/use-design-canvas-check.ts +110 -0
  361. package/src/web/components/design/canvas/use-design-canvas.ts +107 -0
  362. package/src/web/components/design/canvas/use-design-live-reload.ts +86 -0
  363. package/src/web/components/design/canvas/use-design-preview-url.ts +74 -0
  364. package/src/web/components/design/canvas/use-expanded-canvas-escape.ts +29 -0
  365. package/src/web/components/design/comments/comment-composer.tsx +107 -0
  366. package/src/web/components/design/comments/comment-overlay-geometry.ts +50 -0
  367. package/src/web/components/design/comments/comment-pins-overlay.tsx +70 -0
  368. package/src/web/components/design/comments/comments-panel.tsx +118 -0
  369. package/src/web/components/design/comments/comments-send-preview.tsx +43 -0
  370. package/src/web/components/design/comments/design-comments-layer.tsx +73 -0
  371. package/src/web/components/design/comments/element-action-bar.tsx +105 -0
  372. package/src/web/components/design/comments/use-comment-pins.ts +118 -0
  373. package/src/web/components/design/comments/use-design-comments-feature.ts +124 -0
  374. package/src/web/components/design/comments/use-design-comments.ts +89 -0
  375. package/src/web/components/design/comments/use-element-picker.ts +87 -0
  376. package/src/web/components/design/design-chat-pane.tsx +51 -0
  377. package/src/web/components/design/design-layout-controls.tsx +84 -0
  378. package/src/web/components/design/design-mobile-layout.tsx +34 -0
  379. package/src/web/components/design/design-split-layout.tsx +99 -0
  380. package/src/web/components/design/design-tab-context.ts +44 -0
  381. package/src/web/components/design/design-tab.tsx +116 -0
  382. package/src/web/components/design/design-toolbar-list.tsx +36 -0
  383. package/src/web/components/design/design-toolbar.tsx +200 -0
  384. package/src/web/components/design/designs-sidebar-panel.tsx +117 -0
  385. package/src/web/components/design/dialogs/delete-design-dialog.tsx +69 -0
  386. package/src/web/components/design/dialogs/design-responsive-dialog.tsx +48 -0
  387. package/src/web/components/design/dialogs/new-design-dialog.tsx +113 -0
  388. package/src/web/components/design/dialogs/rename-design-dialog.tsx +56 -0
  389. package/src/web/components/design/export/export-menu.tsx +108 -0
  390. package/src/web/components/design/export/export-warnings-sheet.tsx +35 -0
  391. package/src/web/components/design/export/pptx-export.ts +38 -0
  392. package/src/web/components/design/export/use-design-export.ts +142 -0
  393. package/src/web/components/design/history/design-history-panel.tsx +119 -0
  394. package/src/web/components/design/transform/design-undo-stack.ts +90 -0
  395. package/src/web/components/design/transform/transform-readout.tsx +50 -0
  396. package/src/web/components/design/transform/use-canvas-transform.ts +181 -0
  397. package/src/web/components/design/tweaks/tweak-control.tsx +94 -0
  398. package/src/web/components/design/tweaks/tweaks-panel.tsx +99 -0
  399. package/src/web/components/design/tweaks/use-design-tweaks.ts +151 -0
  400. package/src/web/components/design/use-design-auto-check.ts +94 -0
  401. package/src/web/components/design/use-design-layout.ts +55 -0
  402. package/src/web/components/design/use-design-summary.ts +63 -0
  403. package/src/web/components/layout/command-palette-design-commands.tsx +75 -0
  404. package/src/web/components/layout/command-palette.tsx +12 -4
  405. package/src/web/components/layout/editor-panel.tsx +4 -10
  406. package/src/web/components/layout/mobile-drawer.tsx +9 -2
  407. package/src/web/components/layout/mobile-nav.tsx +3 -2
  408. package/src/web/components/layout/mobile-tab-switcher-sheet.tsx +4 -5
  409. package/src/web/components/layout/sidebar.tsx +8 -1
  410. package/src/web/components/layout/tab-bar.tsx +3 -2
  411. package/src/web/components/layout/tab-content.tsx +5 -0
  412. package/src/web/components/layout/tab-pool.tsx +1 -0
  413. package/src/web/components/onboarding/onboarding-quick-orientation.tsx +1 -0
  414. package/src/web/hooks/use-chat.ts +8 -4
  415. package/src/web/hooks/use-design-session-redirect.ts +39 -0
  416. package/src/web/hooks/use-design-session-state.ts +94 -0
  417. package/src/web/hooks/use-global-events.ts +4 -1
  418. package/src/web/hooks/use-session-history.ts +4 -10
  419. package/src/web/hooks/use-url-sync.ts +10 -2
  420. package/src/web/lib/design/api-design-comments.ts +42 -0
  421. package/src/web/lib/design/api-design-edits.ts +62 -0
  422. package/src/web/lib/design/api-design-tweaks.ts +64 -0
  423. package/src/web/lib/design/api-designs.ts +81 -0
  424. package/src/web/lib/design/deliver-to-design-chat.ts +63 -0
  425. package/src/web/lib/design/design-auto-check-rounds.ts +32 -0
  426. package/src/web/lib/design/design-change-filter.ts +27 -0
  427. package/src/web/lib/design/design-comments-prompt.ts +55 -0
  428. package/src/web/lib/design/design-export-client.ts +101 -0
  429. package/src/web/lib/design/design-handoff-prompt.ts +48 -0
  430. package/src/web/lib/design/design-layout-mode.ts +79 -0
  431. package/src/web/lib/design/design-tab-metadata.ts +41 -0
  432. package/src/web/lib/design/design-transform-proposal.ts +62 -0
  433. package/src/web/lib/design/design-tweaks-model.ts +76 -0
  434. package/src/web/lib/design/design-ui-events.ts +25 -0
  435. package/src/web/lib/design/design-view-prefs.ts +90 -0
  436. package/src/web/lib/design/open-design-tab.ts +78 -0
  437. package/src/web/lib/design/pptx-slide-mapper.ts +118 -0
  438. package/src/web/lib/feature-badges.ts +2 -0
  439. package/src/web/lib/fluent-icon.tsx +38 -2
  440. package/src/web/lib/icons.generated.tsx +17 -1
  441. package/src/web/lib/patch-tab-metadata.ts +30 -0
  442. package/src/web/lib/send-to-chat.ts +16 -2
  443. package/src/web/lib/sidebar-tabs/tab-registry.ts +2 -0
  444. package/src/web/lib/tab-session-id.ts +16 -0
  445. package/src/web/lib/tab-type-icons.ts +2 -1
  446. package/src/web/stores/panel-store.ts +29 -1
  447. package/src/web/stores/panel-utils.ts +8 -1
  448. package/src/web/stores/settings-store.ts +2 -2
  449. package/src/web/stores/tab-store.ts +2 -1
  450. package/src/web/stores/window-panel-persistence.ts +1 -0
  451. package/dist/web/assets/accounts-settings-section-BDXYG6tT.js +0 -1
  452. package/dist/web/assets/ai-resource-editor-C3rKcZKN.js +0 -1
  453. package/dist/web/assets/ai-settings-section-ArqD8Nlg.js +0 -1
  454. package/dist/web/assets/ai-settings-section-DeWoAdLc.js +0 -1
  455. package/dist/web/assets/angular-html-DnrsWZqK.js +0 -1
  456. package/dist/web/assets/angular-ts-BXEqA9t1.js +0 -1
  457. package/dist/web/assets/api-client-Jn3njtNw.js +0 -1
  458. package/dist/web/assets/api-client-rSFnnCj4.js +0 -1
  459. package/dist/web/assets/api-settings-BZFSteM_.js +0 -1
  460. package/dist/web/assets/api-themes-CvKtX6Hd.js +0 -1
  461. package/dist/web/assets/apl-DUQ6Oyth.js +0 -1
  462. package/dist/web/assets/appearance-settings-section-K5o_Di4V.js +0 -1
  463. package/dist/web/assets/architecture-PBZL5I3N-B9M_VqZI.js +0 -1
  464. package/dist/web/assets/astro-CakOjJ6X.js +0 -1
  465. package/dist/web/assets/audio-preview-CwCDCN-_.js +0 -1
  466. package/dist/web/assets/blade-C903KM82.js +0 -1
  467. package/dist/web/assets/branch-review-tab-BNpYiUhC.js +0 -1
  468. package/dist/web/assets/bsl-slfcE_kB.js +0 -1
  469. package/dist/web/assets/button-B9CTrsEf.js +0 -1
  470. package/dist/web/assets/c-BWO-aeyf.js +0 -1
  471. package/dist/web/assets/cairo-DRwEaH6w.js +0 -1
  472. package/dist/web/assets/chat-tab-CC8KANoK.js +0 -15
  473. package/dist/web/assets/cobol--n4m6b70.js +0 -1
  474. package/dist/web/assets/code-editor-Ccf0Egrc.js +0 -7
  475. package/dist/web/assets/codex-daily-guard-CKk2WFlV.js +0 -1
  476. package/dist/web/assets/coffee-CjyFmw8_.js +0 -1
  477. package/dist/web/assets/conflict-editor-BCKbdpXy.js +0 -19
  478. package/dist/web/assets/context-menu-C6pIsf83.js +0 -1
  479. package/dist/web/assets/cpp-D18jdQPZ.js +0 -1
  480. package/dist/web/assets/createLucideIcon-DoiEKeJ_.js +0 -1
  481. package/dist/web/assets/crystal-CySzfH-7.js +0 -1
  482. package/dist/web/assets/css-Ca_hTmU6.js +0 -1
  483. package/dist/web/assets/csv-preview-I3a2lGUx.js +0 -2
  484. package/dist/web/assets/data-grid-overlay-editor-BD9eJweQ.js +0 -1
  485. package/dist/web/assets/data-grid-types-C6UX8kgh.js +0 -1
  486. package/dist/web/assets/database-viewer-DCuBR-bZ.js +0 -1
  487. package/dist/web/assets/dialog-B84_DJQ8.js +0 -1
  488. package/dist/web/assets/diff-viewer-DGaBe_Ln.js +0 -4
  489. package/dist/web/assets/dist-BD2gbdy0.js +0 -1
  490. package/dist/web/assets/docx-preview-CeH6p2Oi.js +0 -12
  491. package/dist/web/assets/edge-B6b5FHmU.js +0 -1
  492. package/dist/web/assets/edit-diff-preview-BG5DsLJG.js +0 -7
  493. package/dist/web/assets/editor-language-service-BaocEaLc.js +0 -1
  494. package/dist/web/assets/elixir-Dpo1rvn2.js +0 -1
  495. package/dist/web/assets/elm-D9CNOsWT.js +0 -1
  496. package/dist/web/assets/erb-sY7Yee1W.js +0 -1
  497. package/dist/web/assets/erlang-CfyrBxyF.js +0 -1
  498. package/dist/web/assets/esm-5AhGJcV8.js +0 -2
  499. package/dist/web/assets/explorer-body-2GYIYmUh.js +0 -2
  500. package/dist/web/assets/explorer-window-content-CYQSEX-g.js +0 -1
  501. package/dist/web/assets/extension-manager-section-BFAGdy3G.js +0 -1
  502. package/dist/web/assets/extension-webview-D5TXIBMf.js +0 -12
  503. package/dist/web/assets/file-icons-wS-OmEVu.js +0 -1
  504. package/dist/web/assets/file-store-Ds3qJ4hC.js +0 -1
  505. package/dist/web/assets/files-settings-section-BE6o-oHu.js +0 -1
  506. package/dist/web/assets/format-file-meta-eKLstbCL.js +0 -1
  507. package/dist/web/assets/fortran-fixed-form-N67gM_wp.js +0 -1
  508. package/dist/web/assets/fs-api-orca76dV.js +0 -1
  509. package/dist/web/assets/fsharp-Dq0K01wX.js +0 -1
  510. package/dist/web/assets/gdresource-DkFbszqY.js +0 -1
  511. package/dist/web/assets/general-settings-section-mQiXM537.js +0 -1
  512. package/dist/web/assets/git-commit-Ddt_nerD.js +0 -1
  513. package/dist/web/assets/git-log-panel-DqbcM9eC.js +0 -1
  514. package/dist/web/assets/git-rebase-CVK5OA7i.js +0 -1
  515. package/dist/web/assets/git-repo-store-BCEPfUGT.js +0 -1
  516. package/dist/web/assets/gitGraph-HDMCJU4V-D3RB33aA.js +0 -1
  517. package/dist/web/assets/glide-data-grid-BjEF7M5i.js +0 -141
  518. package/dist/web/assets/glimmer-js-51jbYnyY.js +0 -1
  519. package/dist/web/assets/glimmer-ts-C5L1J32J.js +0 -1
  520. package/dist/web/assets/glsl-BcsfmwJZ.js +0 -1
  521. package/dist/web/assets/graphql-dv4wuJsK.js +0 -1
  522. package/dist/web/assets/group-chat-tab-aX2GEnkD.js +0 -1
  523. package/dist/web/assets/hack-DLE5d3bx.js +0 -1
  524. package/dist/web/assets/haml-CoKfcM3E.js +0 -1
  525. package/dist/web/assets/handlebars-Bn0jy8pD.js +0 -1
  526. package/dist/web/assets/html-DXzY5Cew.js +0 -1
  527. package/dist/web/assets/html-derivative-DhcVfYuw.js +0 -1
  528. package/dist/web/assets/http-DepeIWQ1.js +0 -1
  529. package/dist/web/assets/hurl-CfsP4sCj.js +0 -1
  530. package/dist/web/assets/hxml-IfVkY3HL.js +0 -1
  531. package/dist/web/assets/icons-DQjqk0lJ.js +0 -1
  532. package/dist/web/assets/image-preview-CWncz5iI.js +0 -1
  533. package/dist/web/assets/index-BoaecXhu.js +0 -52
  534. package/dist/web/assets/index-aXJy_SvC.css +0 -1
  535. package/dist/web/assets/info-3K5VOQVL-DDX-2VB7.js +0 -1
  536. package/dist/web/assets/input-QNG_gTHh.js +0 -1
  537. package/dist/web/assets/java-JWdrzVo8.js +0 -1
  538. package/dist/web/assets/javascript-5aQKJRxB.js +0 -1
  539. package/dist/web/assets/jinja-DcCmNDQ8.js +0 -1
  540. package/dist/web/assets/jira-watcher-section-BKn3A8zI.js +0 -1
  541. package/dist/web/assets/jison-Bt-5cKVZ.js +0 -1
  542. package/dist/web/assets/json-BOq7QblK.js +0 -1
  543. package/dist/web/assets/jsx-BSLWViGE.js +0 -1
  544. package/dist/web/assets/julia-DewYVRtE.js +0 -1
  545. package/dist/web/assets/just-CLT_ggBy.js +0 -1
  546. package/dist/web/assets/keybindings-store-Brz0qepi.js +0 -1
  547. package/dist/web/assets/keyboard-shortcuts-section-Ck8KIbJ8.js +0 -1
  548. package/dist/web/assets/latex-DXmcayW1.js +0 -1
  549. package/dist/web/assets/lib-BWyA9SvU.js +0 -4
  550. package/dist/web/assets/liquid-BVcHf0IA.js +0 -1
  551. package/dist/web/assets/lua-BYupsB1B.js +0 -1
  552. package/dist/web/assets/markdown-renderer-BGuM2PBI.js +0 -5
  553. package/dist/web/assets/markdown-renderer-Ddz8tPbb.js +0 -1
  554. package/dist/web/assets/marko-CsD0R5tv.js +0 -1
  555. package/dist/web/assets/mdc-DP2tC4Kc.js +0 -1
  556. package/dist/web/assets/media-url-CVO4m4zr.js +0 -1
  557. package/dist/web/assets/mobile-bottom-sheet-C3TniEP-.js +0 -1
  558. package/dist/web/assets/mobile-explorer-sheet-DpKfB6iF.js +0 -1
  559. package/dist/web/assets/monaco-dotenv-language-DD8_UQG7.js +0 -1
  560. package/dist/web/assets/nextflow-FQM6iZO2.js +0 -1
  561. package/dist/web/assets/nginx-Bg0TK_a9.js +0 -1
  562. package/dist/web/assets/nim-D1kSCHdq.js +0 -1
  563. package/dist/web/assets/notification-store-ByCdTvCC.js +0 -1
  564. package/dist/web/assets/notifications-settings-section-C5v8FoH9.js +0 -1
  565. package/dist/web/assets/number-overlay-editor-Bsr04yCI.js +0 -9
  566. package/dist/web/assets/onboarding-entry-C81awoR5.js +0 -1
  567. package/dist/web/assets/onboarding-quick-orientation-Dqmis-E5.js +0 -1
  568. package/dist/web/assets/overview-panel-9OdBcYJC.js +0 -1
  569. package/dist/web/assets/packet-RMMSAZCW-B0ZSm6VM.js +0 -1
  570. package/dist/web/assets/panel-store-D20Zuf3i.js +0 -1
  571. package/dist/web/assets/pdf-preview-DuR07OfN.js +0 -1
  572. package/dist/web/assets/perl-B6QNc69s.js +0 -1
  573. package/dist/web/assets/php-Bvwf1t96.js +0 -1
  574. package/dist/web/assets/pie-UPGHQEXC-DKM0oPn7.js +0 -1
  575. package/dist/web/assets/portal-container-context-BarKmT4S.js +0 -1
  576. package/dist/web/assets/postgres-viewer-CGf7_g6Z.js +0 -3
  577. package/dist/web/assets/ppmbot-settings-section-DeTFU1b-.js +0 -1
  578. package/dist/web/assets/problems-panel-Bgkcge5_.js +0 -1
  579. package/dist/web/assets/process-table-DH7pnH5I.js +0 -1
  580. package/dist/web/assets/project-framework-store-ViZgce6y.js +0 -1
  581. package/dist/web/assets/project-store-hNvwfqX3.js +0 -1
  582. package/dist/web/assets/proxy-settings-section-DMGMRHH-.js +0 -1
  583. package/dist/web/assets/pug-I8oitXP4.js +0 -1
  584. package/dist/web/assets/qml-LKb7CHg-.js +0 -1
  585. package/dist/web/assets/query-audit-section-CpiXQVcS.js +0 -1
  586. package/dist/web/assets/r-DHu15BOo.js +0 -1
  587. package/dist/web/assets/radar-KQ55EAFF-DKhtzXmy.js +0 -1
  588. package/dist/web/assets/razor-CIPT897U.js +0 -1
  589. package/dist/web/assets/react-Bghu0NUO.js +0 -1
  590. package/dist/web/assets/regexp-Vdt2OEkk.js +0 -1
  591. package/dist/web/assets/remote-desktop-clipboard-notice-Bj5FtU0O.js +0 -1
  592. package/dist/web/assets/remote-desktop-mobile-sheet-BhwVrKxv.js +0 -2
  593. package/dist/web/assets/remote-desktop-mobile-view-B1oAqbjG.js +0 -1
  594. package/dist/web/assets/remote-desktop-readiness-gate-2LE86aTu.js +0 -1
  595. package/dist/web/assets/remote-desktop-window-content-u8HwuzyN.js +0 -1
  596. package/dist/web/assets/rolldown-runtime-FhOqtrmT.js +0 -1
  597. package/dist/web/assets/rst-BpcmfJFA.js +0 -1
  598. package/dist/web/assets/ruby-Cx413jgE.js +0 -1
  599. package/dist/web/assets/run-in-terminal-BFR70TLU.js +0 -1
  600. package/dist/web/assets/sas-B3ui_NHy.js +0 -1
  601. package/dist/web/assets/schedules-settings-section-C8XNDdi9.js +0 -1
  602. package/dist/web/assets/scroll-area-C0fQWNnx.js +0 -1
  603. package/dist/web/assets/scss-V4NlXnGi.js +0 -1
  604. package/dist/web/assets/send-to-chat-C8l7AcV4.js +0 -1
  605. package/dist/web/assets/separator-DwDoQpxS.js +0 -1
  606. package/dist/web/assets/settings-body-DelxmiKf.js +0 -2
  607. package/dist/web/assets/settings-store-m6qOXoy4.js +0 -2
  608. package/dist/web/assets/settings-tab-Cb_dFdA6.js +0 -1
  609. package/dist/web/assets/settings-window-content-5EQQfC1t.js +0 -1
  610. package/dist/web/assets/shaderlab-Cf7qZ4DR.js +0 -1
  611. package/dist/web/assets/shellscript-DRxJLgrx.js +0 -1
  612. package/dist/web/assets/shellsession-BfA8Fmhb.js +0 -1
  613. package/dist/web/assets/soy-CGKN9rxg.js +0 -1
  614. package/dist/web/assets/sparql-CArCsIdI.js +0 -1
  615. package/dist/web/assets/sql-ljEiM8nf.js +0 -1
  616. package/dist/web/assets/sql-query-editor-B3wrPR6K.js +0 -1
  617. package/dist/web/assets/sqlite-viewer-iQXNp0kH.js +0 -1
  618. package/dist/web/assets/stata-CplvndbA.js +0 -1
  619. package/dist/web/assets/surrealql-DwX1PCpP.js +0 -1
  620. package/dist/web/assets/svelte-DYCNmQjy.js +0 -1
  621. package/dist/web/assets/system-monitor-body-5grJyA7C.js +0 -2
  622. package/dist/web/assets/system-monitor-tab-CJr797F8.js +0 -1
  623. package/dist/web/assets/system-monitor-window-content-OGAhFXXo.js +0 -1
  624. package/dist/web/assets/tab-host-window-content-C-eEo8I7.js +0 -1
  625. package/dist/web/assets/tab-store-krAuHQ6_.js +0 -1
  626. package/dist/web/assets/team-member-sheet-CRvJUtdh.js +0 -2
  627. package/dist/web/assets/team-member-window-content-C97N4RXb.js +0 -1
  628. package/dist/web/assets/templ-b_h2-Z9l.js +0 -1
  629. package/dist/web/assets/terminal-tab-eZwpkvEe.js +0 -3
  630. package/dist/web/assets/tex-022M3-MR.js +0 -1
  631. package/dist/web/assets/tool-cards-Bg4vjDYu.js +0 -9
  632. package/dist/web/assets/treemap-KZPCXAKY-CxqsD_6n.js +0 -1
  633. package/dist/web/assets/ts-tags-BUl0AdO6.js +0 -1
  634. package/dist/web/assets/tsx-CKaH7SzK.js +0 -1
  635. package/dist/web/assets/twig-CMzYUcSa.js +0 -1
  636. package/dist/web/assets/typescript-DZozDFsi.js +0 -1
  637. package/dist/web/assets/use-blob-url-C0VR6Uhh.js +0 -1
  638. package/dist/web/assets/use-inline-blame-CzR8CnOZ.js +0 -16
  639. package/dist/web/assets/use-is-mobile-TkcwP1Gx.js +0 -1
  640. package/dist/web/assets/use-lsp-BAoOSc-L.js +0 -6
  641. package/dist/web/assets/use-monaco-theme-Gd8cpt9n.js +0 -1
  642. package/dist/web/assets/use-open-team-member-y9sVhaNr.js +0 -1
  643. package/dist/web/assets/use-visual-viewport-Lp878uzs.js +0 -1
  644. package/dist/web/assets/use-websocket-CDfXkXo3.js +0 -1
  645. package/dist/web/assets/vendor-markdown-CuWCHIVb.js +0 -291
  646. package/dist/web/assets/vendor-mermaid-D6lgjvVE.js +0 -2921
  647. package/dist/web/assets/vendor-ui-DmZ-Mb-H.js +0 -45
  648. package/dist/web/assets/video-preview-BYJ3aVo1.js +0 -1
  649. package/dist/web/assets/vue-D83SsURi.js +0 -1
  650. package/dist/web/assets/vue-html-BGU-OYYb.js +0 -1
  651. package/dist/web/assets/vue-vine-1sHE1gZn.js +0 -1
  652. package/dist/web/assets/window-pip-registry-D1oXq-Dq.js +0 -1
  653. package/dist/web/assets/window-store-UC1jJeLM.js +0 -1
  654. package/dist/web/assets/ws-auth-CaxV807E.js +0 -1
  655. package/dist/web/assets/xml-bWQJszMK.js +0 -1
  656. package/dist/web/assets/xsl-DTMc1Tsm.js +0 -1
  657. package/dist/web/assets/yaml-4pzZq5KT.js +0 -1
  658. /package/dist/web/assets/{abap-DrxZXLHj.js → abap-DWbETETF.js} +0 -0
  659. /package/dist/web/assets/{actionscript-3-DOPR4pRC.js → actionscript-3-C278tgAF.js} +0 -0
  660. /package/dist/web/assets/{ada-DkqjEnDr.js → ada-C_5J29IC.js} +0 -0
  661. /package/dist/web/assets/{andromeeda-BSZjevw2.js → andromeeda-Ct0fb9Zo.js} +0 -0
  662. /package/dist/web/assets/{apache-DYwdQ5F_.js → apache-oMwCqc2o.js} +0 -0
  663. /package/dist/web/assets/{apex-Dohu7DfB.js → apex-n6XQQudq.js} +0 -0
  664. /package/dist/web/assets/{applescript-CdfGIVqp.js → applescript-QDMA6blY.js} +0 -0
  665. /package/dist/web/assets/{apply-theme-CbR31K6I.js → apply-theme-aVoqSG0I.js} +0 -0
  666. /package/dist/web/assets/{ara-i3_3TMnI.js → ara-D6rg_rTp.js} +0 -0
  667. /package/dist/web/assets/{asciidoc-DJFM-7vl.js → asciidoc-DVeBWv0S.js} +0 -0
  668. /package/dist/web/assets/{asm-bMFssizQ.js → asm-DzHQzzqu.js} +0 -0
  669. /package/dist/web/assets/{aurora-x-CetC7M8b.js → aurora-x-pJESoXa6.js} +0 -0
  670. /package/dist/web/assets/{awk-FFWx9ZrE.js → awk-BwfK4mzn.js} +0 -0
  671. /package/dist/web/assets/{ayu-dark-D4ION2wO.js → ayu-dark-CG-9c7ej.js} +0 -0
  672. /package/dist/web/assets/{ayu-light-BZN99P5A.js → ayu-light-BGUfMG6m.js} +0 -0
  673. /package/dist/web/assets/{ayu-mirage-B-IpsKiL.js → ayu-mirage-CMD89qy6.js} +0 -0
  674. /package/dist/web/assets/{ballerina-DhyJcKkq.js → ballerina-CP5gYaiB.js} +0 -0
  675. /package/dist/web/assets/{bat-GOVQY81F.js → bat-DCRdiK45.js} +0 -0
  676. /package/dist/web/assets/{beancount-BO749Rhc.js → beancount-DHkDiOKO.js} +0 -0
  677. /package/dist/web/assets/{berry-CHYYKXmK.js → berry-B6TPldKS.js} +0 -0
  678. /package/dist/web/assets/{bibtex-BnYiDnxT.js → bibtex-DIor8yh9.js} +0 -0
  679. /package/dist/web/assets/{bicep-kljgR_G3.js → bicep-BbIdLZZ_.js} +0 -0
  680. /package/dist/web/assets/{bird2-DnLtJGhV.js → bird2-C76TmOG1.js} +0 -0
  681. /package/dist/web/assets/{c3-fc_jio6D.js → c3-CqZ77xXr.js} +0 -0
  682. /package/dist/web/assets/{cadence-DopRCrdB.js → cadence-BlaAb6F6.js} +0 -0
  683. /package/dist/web/assets/{can-open-in-ppm-CUW3vVJg.js → can-open-in-ppm-D8T6Xca-.js} +0 -0
  684. /package/dist/web/assets/{catppuccin-frappe-DL6iCUa8.js → catppuccin-frappe-BuV7Zg67.js} +0 -0
  685. /package/dist/web/assets/{catppuccin-latte-DNF7n3uY.js → catppuccin-latte-B7HXEZf7.js} +0 -0
  686. /package/dist/web/assets/{catppuccin-macchiato-ByMic_k0.js → catppuccin-macchiato-B0KctcoC.js} +0 -0
  687. /package/dist/web/assets/{catppuccin-mocha-DcrJtZtv.js → catppuccin-mocha-Bofr5rzo.js} +0 -0
  688. /package/dist/web/assets/{clarity-0cRLlvQe.js → clarity-CerfZ3dW.js} +0 -0
  689. /package/dist/web/assets/{clojure-DPqZAcpI.js → clojure-BCEG1uj6.js} +0 -0
  690. /package/dist/web/assets/{cmake-Bx26bw5u.js → cmake-CRxSSKSr.js} +0 -0
  691. /package/dist/web/assets/{codeowners-BpgxIgxr.js → codeowners-BqW6DYSk.js} +0 -0
  692. /package/dist/web/assets/{codeql-TRoWjo5g.js → codeql-DlnOpgWF.js} +0 -0
  693. /package/dist/web/assets/{common-lisp-Ctohamsb.js → common-lisp-DgIX9jkq.js} +0 -0
  694. /package/dist/web/assets/{coq-BO6TJSED.js → coq-CFeLOER-.js} +0 -0
  695. /package/dist/web/assets/{csharp-DSy4nlrl.js → csharp-BGFGcV8G.js} +0 -0
  696. /package/dist/web/assets/{csv-DND7YJXD.js → csv-Cx126-fo.js} +0 -0
  697. /package/dist/web/assets/{csv-parser-DZ_75eCb.js → csv-parser-BXeH-yzY.js} +0 -0
  698. /package/dist/web/assets/{cue-BUnWK221.js → cue-Cd0PEGFL.js} +0 -0
  699. /package/dist/web/assets/{cypher-CInm9Etl.js → cypher-QS9S-1Nu.js} +0 -0
  700. /package/dist/web/assets/{d-BbsB8r6R.js → d-Bx6zK6J7.js} +0 -0
  701. /package/dist/web/assets/{dark-plus-DkzIiuQX.js → dark-plus-DLqXEd2I.js} +0 -0
  702. /package/dist/web/assets/{dart-BG2nw7Se.js → dart-BL2C2Z6E.js} +0 -0
  703. /package/dist/web/assets/{dax-j4h6VhlV.js → dax-ClxUDxvY.js} +0 -0
  704. /package/dist/web/assets/{desktop-Dg34JDlS.js → desktop-DLEkw1UR.js} +0 -0
  705. /package/dist/web/assets/{diff-CRrKo-mH.js → diff-Dlp9KQSL.js} +0 -0
  706. /package/dist/web/assets/{dist-D39GQICe.js → dist-CDpxSUMU.js} +0 -0
  707. /package/dist/web/assets/{docker-DAtcxZjt.js → docker-DVBsQYb-.js} +0 -0
  708. /package/dist/web/assets/{dotenv-DNUcgQCn.js → dotenv-DjBB7S8B.js} +0 -0
  709. /package/dist/web/assets/{dracula-bhhaShNC.js → dracula-Cu055q9D.js} +0 -0
  710. /package/dist/web/assets/{dracula-soft-CeHAoi-D.js → dracula-soft-BiX_luwV.js} +0 -0
  711. /package/dist/web/assets/{dream-maker-BMH1JI2G.js → dream-maker-S6ie6kFg.js} +0 -0
  712. /package/dist/web/assets/{editor-font-D_4aaSCa.js → editor-font-BOjGgYeg.js} +0 -0
  713. /package/dist/web/assets/{emacs-lisp-BaAYIdWN.js → emacs-lisp-DpOda430.js} +0 -0
  714. /package/dist/web/assets/{everforest-dark-Cs91gPa_.js → everforest-dark-BAfSXdLG.js} +0 -0
  715. /package/dist/web/assets/{everforest-light-lTkE6qWA.js → everforest-light-Dp59kp4R.js} +0 -0
  716. /package/dist/web/assets/{fennel-CmhYEhcM.js → fennel-CNaNUmMo.js} +0 -0
  717. /package/dist/web/assets/{fish-p1jauFum.js → fish-C8Z04ic7.js} +0 -0
  718. /package/dist/web/assets/{fluent-BsH-lUh2.js → fluent-Bugk01mf.js} +0 -0
  719. /package/dist/web/assets/{format-bytes-amUJ8Js8.js → format-bytes-DBBzVCYA.js} +0 -0
  720. /package/dist/web/assets/{fortran-free-form-CB6SdVKB.js → fortran-free-form-csIz6MQj.js} +0 -0
  721. /package/dist/web/assets/{gdscript--YoKuvEA.js → gdscript-fdzYQLfk.js} +0 -0
  722. /package/dist/web/assets/{gdshader-BRtMwf5z.js → gdshader-CfsEtDeZ.js} +0 -0
  723. /package/dist/web/assets/{genie-wrzVG2Z8.js → genie-CtHN5N2Q.js} +0 -0
  724. /package/dist/web/assets/{gherkin-HnpURN27.js → gherkin-gSp2ZJTf.js} +0 -0
  725. /package/dist/web/assets/{github-dark-XlZ3pGhn.js → github-dark-D7O9efii.js} +0 -0
  726. /package/dist/web/assets/{github-dark-default-D_R0hfJe.js → github-dark-default-Bv2wIhqD.js} +0 -0
  727. /package/dist/web/assets/{github-dark-dimmed-BHQgHLnK.js → github-dark-dimmed-BuY_SpCX.js} +0 -0
  728. /package/dist/web/assets/{github-dark-high-contrast-Pbl4mEFe.js → github-dark-high-contrast-Chv0f5Wu.js} +0 -0
  729. /package/dist/web/assets/{github-light-0P0VANJn.js → github-light-DV8f-W2f.js} +0 -0
  730. /package/dist/web/assets/{github-light-default-DTfsnyDq.js → github-light-default-CNBSU3dB.js} +0 -0
  731. /package/dist/web/assets/{github-light-high-contrast-DKITR-5Y.js → github-light-high-contrast-sg94tHwU.js} +0 -0
  732. /package/dist/web/assets/{gleam-refSZtkM.js → gleam-w7270-PJ.js} +0 -0
  733. /package/dist/web/assets/{gn-BZ9cGckR.js → gn-yo_iE_A_.js} +0 -0
  734. /package/dist/web/assets/{gnuplot-CMHqDcTW.js → gnuplot-DSBPrzl4.js} +0 -0
  735. /package/dist/web/assets/{go-bFdCrzvY.js → go-D1S7g97D.js} +0 -0
  736. /package/dist/web/assets/{groovy-Dvz5tluQ.js → groovy-C7xW-5IV.js} +0 -0
  737. /package/dist/web/assets/{gruvbox-dark-hard-D0Z-pclr.js → gruvbox-dark-hard-BZald7Z_.js} +0 -0
  738. /package/dist/web/assets/{gruvbox-dark-medium-BG6oIRQR.js → gruvbox-dark-medium-v6W4PZne.js} +0 -0
  739. /package/dist/web/assets/{gruvbox-dark-soft-ILJ-3tU6.js → gruvbox-dark-soft-CN5mIGkw.js} +0 -0
  740. /package/dist/web/assets/{gruvbox-light-hard-Bl95khkz.js → gruvbox-light-hard-D3NIGRxd.js} +0 -0
  741. /package/dist/web/assets/{gruvbox-light-medium-CdislFOh.js → gruvbox-light-medium-m4ShuCnD.js} +0 -0
  742. /package/dist/web/assets/{gruvbox-light-soft-CTcEyxlX.js → gruvbox-light-soft-BEEYNyk-.js} +0 -0
  743. /package/dist/web/assets/{haskell-D9jfkQuH.js → haskell-CgtdXIH3.js} +0 -0
  744. /package/dist/web/assets/{haxe-Ckfl4osD.js → haxe-D7HQqtIx.js} +0 -0
  745. /package/dist/web/assets/{hcl-t03N4k5N.js → hcl-C-YHDaXH.js} +0 -0
  746. /package/dist/web/assets/{hjson-B_TIVRki.js → hjson-BrgEMvJK.js} +0 -0
  747. /package/dist/web/assets/{hlsl-BBCTeANz.js → hlsl-BsDumu1j.js} +0 -0
  748. /package/dist/web/assets/{horizon-CRY-xdGU.js → horizon-D9Kre3KQ.js} +0 -0
  749. /package/dist/web/assets/{horizon-bright-BpUM2C5u.js → horizon-bright-DJq8c_Yq.js} +0 -0
  750. /package/dist/web/assets/{houston-RVyAGlyS.js → houston-B9tnxzX8.js} +0 -0
  751. /package/dist/web/assets/{hy-BHFJHuHd.js → hy-DUYVvXOj.js} +0 -0
  752. /package/dist/web/assets/{image-gallery-DdQblMAe.js → image-gallery-DvAgPQ3L.js} +0 -0
  753. /package/dist/web/assets/{image-preview-geometry-BFKR37Pj.js → image-preview-geometry-B-SdD7_D.js} +0 -0
  754. /package/dist/web/assets/{imba-DyG0_0MS.js → imba-CGW-TsRm.js} +0 -0
  755. /package/dist/web/assets/{ini-CsCTH-_o.js → ini-PqgYiEAV.js} +0 -0
  756. /package/dist/web/assets/{json5-g3g-IFTV.js → json5-sbkvqHou.js} +0 -0
  757. /package/dist/web/assets/{jsonc-DQHBJwib.js → jsonc-pnywfpws.js} +0 -0
  758. /package/dist/web/assets/{jsonl-zFLDm4eB.js → jsonl-ZPOQ0pRn.js} +0 -0
  759. /package/dist/web/assets/{jsonnet-DgNm2IGn.js → jsonnet-B_Q7j1YF.js} +0 -0
  760. /package/dist/web/assets/{jssm-BErkU0In.js → jssm-K-xYeQyp.js} +0 -0
  761. /package/dist/web/assets/{kanagawa-dragon-Dgymfjca.js → kanagawa-dragon-DAdLBtU8.js} +0 -0
  762. /package/dist/web/assets/{kanagawa-lotus-CWZEYd27.js → kanagawa-lotus-5BwvVGu8.js} +0 -0
  763. /package/dist/web/assets/{kanagawa-wave-CQg17ecf.js → kanagawa-wave-C0h9fsDT.js} +0 -0
  764. /package/dist/web/assets/{kdl-DY4GHmJC.js → kdl-DXSsFcms.js} +0 -0
  765. /package/dist/web/assets/{kotlin-DeGTz7bl.js → kotlin-BXNIvloo.js} +0 -0
  766. /package/dist/web/assets/{kusto-BN-OqpQj.js → kusto-wM3eio5V.js} +0 -0
  767. /package/dist/web/assets/{laserwave-bAqiAiOp.js → laserwave-FcbxdP2A.js} +0 -0
  768. /package/dist/web/assets/{lean-CAypLWCf.js → lean-RenzGeoM.js} +0 -0
  769. /package/dist/web/assets/{less-ikHAUlPb.js → less-CcUdtNJi.js} +0 -0
  770. /package/dist/web/assets/{libesm-cUHvIIuW.js → libesm-DMnQ3WlF.js} +0 -0
  771. /package/dist/web/assets/{light-plus-BamuTcT9.js → light-plus-BsMoOZJR.js} +0 -0
  772. /package/dist/web/assets/{llvm-CddObVkW.js → llvm-CyylMBuq.js} +0 -0
  773. /package/dist/web/assets/{log-CWbfGTTc.js → log-BOi0GB58.js} +0 -0
  774. /package/dist/web/assets/{logo-AHyhxX3Z.js → logo-BQUr3X2Y.js} +0 -0
  775. /package/dist/web/assets/{luau-y7she9L3.js → luau-3YZRDIsh.js} +0 -0
  776. /package/dist/web/assets/{make-DP3sQaP3.js → make-DEkKRDRU.js} +0 -0
  777. /package/dist/web/assets/{markdown-9Nuxib8a.js → markdown-BmFN0-A1.js} +0 -0
  778. /package/dist/web/assets/{material-theme-DDpm-uS7.js → material-theme-DqLHjEZ8.js} +0 -0
  779. /package/dist/web/assets/{material-theme-darker-CHk91wbm.js → material-theme-darker-DhbvULnI.js} +0 -0
  780. /package/dist/web/assets/{material-theme-lighter-LkmOI8KM.js → material-theme-lighter-C_aA4yVe.js} +0 -0
  781. /package/dist/web/assets/{material-theme-ocean-PpkUhB4-.js → material-theme-ocean-Pk5JltJS.js} +0 -0
  782. /package/dist/web/assets/{material-theme-palenight-DZAigXgW.js → material-theme-palenight-DNi3VguV.js} +0 -0
  783. /package/dist/web/assets/{matlab-CexKVVPc.js → matlab-BqUtv2ml.js} +0 -0
  784. /package/dist/web/assets/{mdx-BrcepHfI.js → mdx-DFMrnHBn.js} +0 -0
  785. /package/dist/web/assets/{mermaid-CNFhZZaG.js → mermaid-BpyuE0L_.js} +0 -0
  786. /package/dist/web/assets/{min-dark-hd3nbDV4.js → min-dark-DVfCMEPW.js} +0 -0
  787. /package/dist/web/assets/{min-light-AqA5jmks.js → min-light-B96aMADV.js} +0 -0
  788. /package/dist/web/assets/{mipsasm-B3x4L8Zk.js → mipsasm-DHhEcvKr.js} +0 -0
  789. /package/dist/web/assets/{mojo-CvfXy3YL.js → mojo-BQ6HsVIQ.js} +0 -0
  790. /package/dist/web/assets/{monokai-CdxwmnU_.js → monokai-amcXAKGG.js} +0 -0
  791. /package/dist/web/assets/{moonbit-6Z_VCO0_.js → moonbit-CGSXXQJI.js} +0 -0
  792. /package/dist/web/assets/{move-B2__B6Po.js → move-BOa4mq0q.js} +0 -0
  793. /package/dist/web/assets/{narrat-D6vL6wL-.js → narrat-dBYNSnhr.js} +0 -0
  794. /package/dist/web/assets/{nextflow-groovy-L-FBME4e.js → nextflow-groovy-Dm2Y_qgn.js} +0 -0
  795. /package/dist/web/assets/{night-owl-DjKrkDjv.js → night-owl-Dy9ibYHN.js} +0 -0
  796. /package/dist/web/assets/{night-owl-light-CeGjPuUQ.js → night-owl-light-DamYjQKi.js} +0 -0
  797. /package/dist/web/assets/{nix-dr279CcA.js → nix-C1LyoszC.js} +0 -0
  798. /package/dist/web/assets/{nord-Dxn-_H_Y.js → nord-LtGRYAFI.js} +0 -0
  799. /package/dist/web/assets/{nushell-DgeAQO7j.js → nushell-BMoOkt47.js} +0 -0
  800. /package/dist/web/assets/{objective-c-CO0-Pacn.js → objective-c-CILaOZJu.js} +0 -0
  801. /package/dist/web/assets/{objective-cpp-SkrjegYw.js → objective-cpp-D5Fo-SoM.js} +0 -0
  802. /package/dist/web/assets/{ocaml-CAihtkib.js → ocaml-D1TCTCEJ.js} +0 -0
  803. /package/dist/web/assets/{odin-D0XZbUDB.js → odin-CjdYcmpW.js} +0 -0
  804. /package/dist/web/assets/{one-dark-pro-BUMNMxjX.js → one-dark-pro-GpsZUGZl.js} +0 -0
  805. /package/dist/web/assets/{one-light-C0Ui69Bx.js → one-light-DlketcS4.js} +0 -0
  806. /package/dist/web/assets/{openscad-fZ9ggqM-.js → openscad-BoT8wwuI.js} +0 -0
  807. /package/dist/web/assets/{pascal-DvZm-eun.js → pascal-Cqy403Sf.js} +0 -0
  808. /package/dist/web/assets/{pkl-CQSIp_z8.js → pkl-D6gRI9qQ.js} +0 -0
  809. /package/dist/web/assets/{plastic-CMspsouJ.js → plastic-DgvX8DXX.js} +0 -0
  810. /package/dist/web/assets/{plsql-B_HL7UfT.js → plsql-CTDnCVE3.js} +0 -0
  811. /package/dist/web/assets/{po-DxAfbdfe.js → po-DDnzm7AQ.js} +0 -0
  812. /package/dist/web/assets/{poimandres-JGmqmwux.js → poimandres-C4HQwFp-.js} +0 -0
  813. /package/dist/web/assets/{polar-_mNmplk8.js → polar-WBTQdMzX.js} +0 -0
  814. /package/dist/web/assets/{postcss-GpU0Sjqc.js → postcss-CWxogTg1.js} +0 -0
  815. /package/dist/web/assets/{powerquery-B1IP1lCQ.js → powerquery-DVtReIRR.js} +0 -0
  816. /package/dist/web/assets/{powershell-BiSO9XmG.js → powershell-Cb_RNzSh.js} +0 -0
  817. /package/dist/web/assets/{prisma-4QqDYSnH.js → prisma-nKLUh3DY.js} +0 -0
  818. /package/dist/web/assets/{prolog-BNjvyRqT.js → prolog-BD9orEy4.js} +0 -0
  819. /package/dist/web/assets/{proto-RNOumnkw.js → proto-B-AFoz75.js} +0 -0
  820. /package/dist/web/assets/{puppet-CDfv5o8f.js → puppet-DDW6wWm4.js} +0 -0
  821. /package/dist/web/assets/{purescript-YTjSoifd.js → purescript-DXy49AJg.js} +0 -0
  822. /package/dist/web/assets/{python-Mh7JD25U.js → python-BQnvDlc7.js} +0 -0
  823. /package/dist/web/assets/{qmldir-Da_ZrqZy.js → qmldir-CboMQXQW.js} +0 -0
  824. /package/dist/web/assets/{qss-DANVkyhy.js → qss-8XaprLEt.js} +0 -0
  825. /package/dist/web/assets/{racket-CwPOn4T1.js → racket-ChcVp15M.js} +0 -0
  826. /package/dist/web/assets/{raku-B04lBsXd.js → raku-dEgEXW0A.js} +0 -0
  827. /package/dist/web/assets/{red-MW6Zm5pd.js → red-hmwjontD.js} +0 -0
  828. /package/dist/web/assets/{reg-44SURM-E.js → reg-CIkOufh2.js} +0 -0
  829. /package/dist/web/assets/{rel-Gu5Erhpm.js → rel-NXKKDiTi.js} +0 -0
  830. /package/dist/web/assets/{resolve-theme-BNubecVz.js → resolve-theme-B87m6l4i.js} +0 -0
  831. /package/dist/web/assets/{riscv-DZDP0Ce7.js → riscv-BEIzhPcg.js} +0 -0
  832. /package/dist/web/assets/{ron-BwLObbl6.js → ron-CW2Bt8rN.js} +0 -0
  833. /package/dist/web/assets/{rose-pine-Bz6ToXok.js → rose-pine-DhnBfr5a.js} +0 -0
  834. /package/dist/web/assets/{rose-pine-dawn-LyFogzAh.js → rose-pine-dawn-Jyj59rVs.js} +0 -0
  835. /package/dist/web/assets/{rose-pine-moon-CpjkefjD.js → rose-pine-moon-BMulxhJC.js} +0 -0
  836. /package/dist/web/assets/{rosmsg-BldDLaz1.js → rosmsg-DuctJm-Q.js} +0 -0
  837. /package/dist/web/assets/{rust-74skZ8CC.js → rust-FbJ2fCp9.js} +0 -0
  838. /package/dist/web/assets/{sass-CitUFDWl.js → sass-Dfxwdu2h.js} +0 -0
  839. /package/dist/web/assets/{scala-D2kl5ghT.js → scala-ClsSR0wG.js} +0 -0
  840. /package/dist/web/assets/{scheme-DZqhC9Xs.js → scheme-Jj_Cc-8H.js} +0 -0
  841. /package/dist/web/assets/{sdbl-D6a8sHP9.js → sdbl-Bi8D_DGN.js} +0 -0
  842. /package/dist/web/assets/{slack-dark-DrlPLUB_.js → slack-dark-B7gbmJT9.js} +0 -0
  843. /package/dist/web/assets/{slack-ochin-Djgychog.js → slack-ochin-O7j_c76D.js} +0 -0
  844. /package/dist/web/assets/{smalltalk-CYQHXftK.js → smalltalk-BD5-U3JK.js} +0 -0
  845. /package/dist/web/assets/{snazzy-light-BQAdF14K.js → snazzy-light-BbiRB69_.js} +0 -0
  846. /package/dist/web/assets/{solarized-dark-JDtJfY-g.js → solarized-dark-2OWHYEBu.js} +0 -0
  847. /package/dist/web/assets/{solarized-light-DHzVPLDD.js → solarized-light-Cew4YqT3.js} +0 -0
  848. /package/dist/web/assets/{solidity-CYCEiPu1.js → solidity-Bpbne2Tx.js} +0 -0
  849. /package/dist/web/assets/{splunk-B7RHmJY2.js → splunk-Dq86L1_O.js} +0 -0
  850. /package/dist/web/assets/{ssh-config-B74-n00O.js → ssh-config-j5hsMvbs.js} +0 -0
  851. /package/dist/web/assets/{stylus-xlRhcbpN.js → stylus-DWhCIBg0.js} +0 -0
  852. /package/dist/web/assets/{swift-DTFwWJtu.js → swift-29fG5ztW.js} +0 -0
  853. /package/dist/web/assets/{synthwave-84-BuCpuX2E.js → synthwave-84-DraIUmiw.js} +0 -0
  854. /package/dist/web/assets/{system-verilog-CgxJCrOK.js → system-verilog-DqcJAWq_.js} +0 -0
  855. /package/dist/web/assets/{systemd-D0x7_XYJ.js → systemd-BUPJrx1D.js} +0 -0
  856. /package/dist/web/assets/{talonscript-B50aQRuc.js → talonscript-BGYbnAKh.js} +0 -0
  857. /package/dist/web/assets/{tasl-Byv8gHCL.js → tasl-CwbSJqng.js} +0 -0
  858. /package/dist/web/assets/{tcl-CzMjCzWo.js → tcl-Ba9376wa.js} +0 -0
  859. /package/dist/web/assets/{terraform-D6GH4CXG.js → terraform-ChSasWu8.js} +0 -0
  860. /package/dist/web/assets/{tokyo-night-CQ4rTpHY.js → tokyo-night-Bbw1Yguv.js} +0 -0
  861. /package/dist/web/assets/{toml-D9W-BuJE.js → toml-CYb7zi5B.js} +0 -0
  862. /package/dist/web/assets/{tsv-BddanT8p.js → tsv-P2eVmwf9.js} +0 -0
  863. /package/dist/web/assets/{turtle-BddVklvD.js → turtle-DIoQTATC.js} +0 -0
  864. /package/dist/web/assets/{typespec-D60I2kfB.js → typespec-Dpr1bC2k.js} +0 -0
  865. /package/dist/web/assets/{typst-Bxvc-9ID.js → typst-D4WMCDMn.js} +0 -0
  866. /package/dist/web/assets/{utils-Bmf_8h7Y.js → utils-btZ8C8-R.js} +0 -0
  867. /package/dist/web/assets/{v-kVYZE10o.js → v-B1wY-VFU.js} +0 -0
  868. /package/dist/web/assets/{vala-B3zj44PV.js → vala-BKqhrirP.js} +0 -0
  869. /package/dist/web/assets/{vb-CHgWrFTj.js → vb-S9PHCa7-.js} +0 -0
  870. /package/dist/web/assets/{vendor-xterm-_yyu5n32.js → vendor-xterm-BHKF_Nsf.js} +0 -0
  871. /package/dist/web/assets/{verilog-zIMuE3hE.js → verilog-CrztYl3V.js} +0 -0
  872. /package/dist/web/assets/{vesper-BjqPTQr0.js → vesper-C5KfcyFv.js} +0 -0
  873. /package/dist/web/assets/{vhdl-Q2EtgpQN.js → vhdl-D0qMeIJu.js} +0 -0
  874. /package/dist/web/assets/{viml-CrtDZkFz.js → viml-Dsv9mRPK.js} +0 -0
  875. /package/dist/web/assets/{vitesse-black-D2VWO3oN.js → vitesse-black-rJvNN5GN.js} +0 -0
  876. /package/dist/web/assets/{vitesse-dark-lleZmHBJ.js → vitesse-dark-CYp0WWjf.js} +0 -0
  877. /package/dist/web/assets/{vitesse-light-utUY298S.js → vitesse-light-BczSAvzE.js} +0 -0
  878. /package/dist/web/assets/{vyper-LQ1KxOUo.js → vyper-DM7bKz7E.js} +0 -0
  879. /package/dist/web/assets/{wasm-CJ9U4zWg.js → wasm-BXCHhbrz.js} +0 -0
  880. /package/dist/web/assets/{wasm-B-mpMVDM.js → wasm-CAJoqhGc.js} +0 -0
  881. /package/dist/web/assets/{wenyan-LqMyA7px.js → wenyan-NQ8fdbEq.js} +0 -0
  882. /package/dist/web/assets/{wgsl-eI4U21sm.js → wgsl-C88C7vmC.js} +0 -0
  883. /package/dist/web/assets/{wikitext-CuWC2dfS.js → wikitext-D92r7uX8.js} +0 -0
  884. /package/dist/web/assets/{wit-CCPY0MNz.js → wit-DNvTfQjW.js} +0 -0
  885. /package/dist/web/assets/{wolfram-CXhjyJun.js → wolfram-CNS5lCGj.js} +0 -0
  886. /package/dist/web/assets/{zenscript-BzHPI08Q.js → zenscript-B_rGi-H_.js} +0 -0
  887. /package/dist/web/assets/{zig-CBuhKUve.js → zig-BRi9UYQa.js} +0 -0
@@ -0,0 +1,78 @@
1
+ import { usePanelStore } from "@/stores/panel-store";
2
+ import { currentTabMetadata, patchTabMetadata } from "@/lib/patch-tab-metadata";
3
+ import { designTabMetadata } from "./design-tab-metadata";
4
+
5
+ export interface OpenDesignTabInput {
6
+ projectName: string;
7
+ slug: string;
8
+ title?: string;
9
+ /** Open the design on this session (history, a notification) instead of its current one. */
10
+ sessionId?: string;
11
+ providerId?: string;
12
+ /** The panel to open in when the design is not open yet. */
13
+ panelId?: string;
14
+ /** Just created: skip looking up its latest session, it has none. */
15
+ fresh?: boolean;
16
+ }
17
+
18
+ /**
19
+ * Open (or focus) a design's tab. There is one tab per design; opening it again focuses
20
+ * the existing tab, and asking for a particular session switches that tab to it.
21
+ */
22
+ export function openDesignTab(input: OpenDesignTabInput): string {
23
+ const { projectName, slug, title, sessionId, providerId, panelId, fresh } = input;
24
+ const id = usePanelStore.getState().openTab({
25
+ type: "design",
26
+ title: title || slug,
27
+ projectId: projectName,
28
+ closable: true,
29
+ metadata: designTabMetadata({ projectName, designSlug: slug, sessionId, providerId, fresh }),
30
+ }, panelId);
31
+ if (!id || !sessionId) return id;
32
+
33
+ // The tab already existed, so the panel store focused it and ignored the metadata above.
34
+ // Bumping the epoch remounts its chat on the requested session.
35
+ const current = currentTabMetadata(id);
36
+ if (current && current.sessionId !== sessionId) {
37
+ patchTabMetadata(id, {
38
+ sessionId,
39
+ ...(providerId ? { providerId, providerPending: undefined } : {}),
40
+ pendingMessage: undefined,
41
+ designChatEpoch: nextChatEpoch(current),
42
+ });
43
+ }
44
+ return id;
45
+ }
46
+
47
+ /** The epoch after the one `metadata` carries; the design tab keys its chat on it. */
48
+ export function nextChatEpoch(metadata: Record<string, unknown> | undefined): number {
49
+ const epoch = metadata?.designChatEpoch;
50
+ return (typeof epoch === "number" && Number.isFinite(epoch) ? epoch : 0) + 1;
51
+ }
52
+
53
+ export interface SessionToOpen {
54
+ id: string;
55
+ providerId?: string;
56
+ title?: string;
57
+ designSlug?: string | null;
58
+ }
59
+
60
+ /**
61
+ * Open a session from a history list in the tab it belongs to: a design session in its
62
+ * design tab, anything else as a chat tab. The panel store also focuses an already-open
63
+ * design tab for a session opened as a chat, but only this can open one that is closed.
64
+ */
65
+ export function openSessionInItsTab(session: SessionToOpen, projectName: string, panelId?: string): string {
66
+ if (session.designSlug) {
67
+ return openDesignTab({
68
+ projectName, slug: session.designSlug, sessionId: session.id, providerId: session.providerId, panelId,
69
+ });
70
+ }
71
+ return usePanelStore.getState().openTab({
72
+ type: "chat",
73
+ title: session.title || "Chat",
74
+ projectId: projectName,
75
+ metadata: { projectName, sessionId: session.id, ...(session.providerId ? { providerId: session.providerId } : {}) },
76
+ closable: true,
77
+ }, panelId);
78
+ }
@@ -0,0 +1,118 @@
1
+ import type { SlideColor, SlideDoc, SlideItem, SlideTextItem } from "../../../shared/design-slide-doc";
2
+
3
+ /**
4
+ * A measured deck ({@link SlideDoc}, CSS px) as the calls the PowerPoint writer makes, in
5
+ * inches and points. Pure, so the unit maths is tested without pptxgenjs in the process; the
6
+ * lazy `pptx-export` module only replays the plan.
7
+ *
8
+ * `px → in` is `/96` and `px → pt` is `* 0.75`, so a 1280x720 deck is exactly
9
+ * `LAYOUT_WIDE` (13.333 x 7.5 in). Text boxes are placed on the element's content box with
10
+ * no inner margin, so text starts where the browser drew it. Fonts are referenced by name;
11
+ * PowerPoint substitutes a face it does not have, which the warnings say.
12
+ */
13
+
14
+ export type PptxColor = { color: string; transparency?: number };
15
+
16
+ export interface PptxRunOptions {
17
+ bold?: boolean;
18
+ italic?: boolean;
19
+ underline?: { style: "sng" };
20
+ color?: string;
21
+ transparency?: number;
22
+ fontSize?: number;
23
+ fontFace?: string;
24
+ breakLine?: boolean;
25
+ bullet?: boolean | { type: "number" };
26
+ }
27
+
28
+ export interface PptxBox {
29
+ x: number;
30
+ y: number;
31
+ w: number;
32
+ h: number;
33
+ rotate?: number;
34
+ }
35
+
36
+ export type PptxOp =
37
+ | { kind: "text"; runs: Array<{ text: string; options: PptxRunOptions }>; options: PptxBox & {
38
+ align: "left" | "center" | "right" | "justify"; valign: "top" | "middle" | "bottom";
39
+ margin: number; lineSpacing?: number; fit: "none"; wrap: true; isTextBox: true;
40
+ } }
41
+ | { kind: "shape"; shape: "rect" | "roundRect"; options: PptxBox & {
42
+ fill?: PptxColor; line?: PptxColor & { width: number }; rectRadius?: number;
43
+ } }
44
+ | { kind: "image"; options: PptxBox & { data: string } };
45
+
46
+ export interface PptxPlan {
47
+ layout: "LAYOUT_WIDE" | { name: string; width: number; height: number };
48
+ slides: Array<{ background?: PptxColor; ops: PptxOp[] }>;
49
+ warnings: string[];
50
+ }
51
+
52
+ const round = (n: number, places: number): number => Math.round(n * 10 ** places) / 10 ** places;
53
+ export const pxToIn = (px: number): number => round(px / 96, 4);
54
+ export const pxToPt = (px: number): number => round(px * 0.75, 2);
55
+
56
+ /** Hex plus pptxgenjs's `transparency` (0-100), omitted when opaque. */
57
+ export function pptxColor(c: SlideColor): PptxColor {
58
+ const transparency = Math.round((1 - c.alpha) * 100);
59
+ return transparency > 0 ? { color: c.hex, transparency } : { color: c.hex };
60
+ }
61
+
62
+ function box(item: SlideItem): PptxBox {
63
+ const b: PptxBox = { x: pxToIn(item.x), y: pxToIn(item.y), w: pxToIn(item.w), h: pxToIn(item.h) };
64
+ if (item.rotation) b.rotate = round(item.rotation, 2);
65
+ return b;
66
+ }
67
+
68
+ function textOp(item: SlideTextItem): PptxOp {
69
+ let paragraphStart = true;
70
+ const runs = item.runs.map((run) => {
71
+ const options: PptxRunOptions = {};
72
+ if (run.bold) options.bold = true;
73
+ if (run.italic) options.italic = true;
74
+ if (run.underline) options.underline = { style: "sng" };
75
+ if (run.color) Object.assign(options, pptxColor(run.color));
76
+ if (run.sizePx) options.fontSize = Math.max(1, Math.min(4000, pxToPt(run.sizePx)));
77
+ if (run.font) options.fontFace = run.font;
78
+ if (run.breakLine) options.breakLine = true;
79
+ // A bullet belongs to a paragraph, which in the run list starts after each break.
80
+ if (item.bullet && paragraphStart) options.bullet = item.bullet === "number" ? { type: "number" } : true;
81
+ paragraphStart = !!run.breakLine;
82
+ return { text: run.text, options };
83
+ });
84
+ const options: Extract<PptxOp, { kind: "text" }>["options"] = {
85
+ ...box(item), align: item.align, valign: item.valign, margin: 0, fit: "none", wrap: true, isTextBox: true,
86
+ };
87
+ if (item.lineHeightPx) options.lineSpacing = pxToPt(item.lineHeightPx);
88
+ return { kind: "text", runs, options };
89
+ }
90
+
91
+ function itemOp(item: SlideItem): PptxOp {
92
+ if (item.kind === "text") return textOp(item);
93
+ if (item.kind === "image") return { kind: "image", options: { ...box(item), data: item.data } };
94
+ const options: Extract<PptxOp, { kind: "shape" }>["options"] = { ...box(item) };
95
+ if (item.fill) options.fill = pptxColor(item.fill);
96
+ if (item.border) options.line = { ...pptxColor(item.border.color), width: pxToPt(item.border.widthPx) };
97
+ // pptxgenjs 4 takes the corner radius in inches and writes it as OOXML's fraction of the
98
+ // shorter side, which PowerPoint caps at one half — hence the clamp.
99
+ if (item.radiusPx) options.rectRadius = pxToIn(Math.min(item.radiusPx, item.w / 2, item.h / 2));
100
+ return { kind: "shape", shape: item.radiusPx ? "roundRect" : "rect", options };
101
+ }
102
+
103
+ export function mapSlideDocToPptx(doc: SlideDoc): PptxPlan {
104
+ const layout: PptxPlan["layout"] = doc.width === 1280 && doc.height === 720
105
+ ? "LAYOUT_WIDE"
106
+ : { name: "PPM_DESIGN", width: pxToIn(doc.width), height: pxToIn(doc.height) };
107
+ const fonts = new Set<string>();
108
+ const slides = doc.slides.map((slide) => {
109
+ for (const item of slide.items) if (item.kind === "text") for (const run of item.runs) if (run.font) fonts.add(run.font);
110
+ return { ...(slide.background ? { background: pptxColor(slide.background) } : {}), ops: slide.items.map(itemOp) };
111
+ });
112
+ const warnings = [...doc.warnings];
113
+ if (fonts.size) {
114
+ const list = [...fonts].slice(0, 8).join(", ");
115
+ warnings.push(`Fonts are referenced by name (${list}${fonts.size > 8 ? ", …" : ""}); PowerPoint substitutes any it does not have.`);
116
+ }
117
+ return { layout, slides, warnings };
118
+ }
@@ -14,6 +14,8 @@ export const FEATURE_BADGES = {
14
14
  "os-explorer": "new",
15
15
  /** Remote Desktop — stream + control the host desktop in a floating window. */
16
16
  "remote-desktop": "beta",
17
+ /** Design mode (Designs sidebar tab): design chat beside a live canvas, shipped in 0.23.0. */
18
+ designs: "new",
17
19
  } as const satisfies Record<string, FeatureBadgeKind>;
18
20
 
19
21
  export type FeatureBadgeId = keyof typeof FEATURE_BADGES;
@@ -28,12 +28,46 @@ export interface ProductIconProps extends Omit<SVGProps<SVGSVGElement>, "ref"> {
28
28
 
29
29
  export type ProductIcon = ReturnType<typeof fluentIcon>;
30
30
 
31
+ /**
32
+ * Utilities that describe the box an icon occupies rather than the glyph drawn in
33
+ * it: where it sits, its margins, how it behaves as a flex item — and the spin.
34
+ */
35
+ const BOX_UTILITY =
36
+ /^(?:animate-spin$|-?m[trblxyse]?-|absolute$|relative$|fixed$|sticky$|-?inset-|-?top-|-?right-|-?bottom-|-?left-|-?translate-|z-|shrink|grow|self-|order-|pointer-events-)/;
37
+
38
+ /**
39
+ * A spinning icon's classes, split between a wrapping span and the svg — or null
40
+ * when the icon does not spin.
41
+ *
42
+ * Chrome never hands an animation on an SVG element to the compositor, not even
43
+ * on an outer `<svg>`, so `animate-spin` on one recalculates style and repaints on
44
+ * the main thread every frame. Measured on a live tab, one spinner cost ~22% of a
45
+ * core; the same glyph inside a spinning span cost nothing measurable. A running
46
+ * tool card shows one for as long as the tool runs, which is most of a chat turn.
47
+ *
48
+ * The rotation moves to the span along with whatever positions the box, so a
49
+ * margin sits outside the rotating box instead of pulling its centre off the
50
+ * glyph, and an `absolute` spinner keeps its place. Size and colour stay on the
51
+ * svg, which is what lets a parent's `[&_svg:not([class*='size-'])]` rule keep
52
+ * sizing an icon that carries no size class of its own.
53
+ */
54
+ export function splitSpinClasses(className: string): { box: string; glyph: string | undefined } | null {
55
+ const tokens = className.split(/\s+/).filter(Boolean);
56
+ const base = (t: string) => t.slice(t.lastIndexOf(":") + 1);
57
+ if (!tokens.some((t) => base(t) === "animate-spin")) return null;
58
+ const box = ["inline-flex"];
59
+ const glyph: string[] = [];
60
+ for (const t of tokens) (BOX_UTILITY.test(base(t)) ? box : glyph).push(t);
61
+ return { box: box.join(" "), glyph: glyph.length ? glyph.join(" ") : undefined };
62
+ }
63
+
31
64
  export function fluentIcon(name: string, paths: readonly string[]) {
32
65
  const Icon = forwardRef<SVGSVGElement, ProductIconProps>(function Icon(
33
- { size = 24, strokeWidth: _sw, absoluteStrokeWidth: _asw, ...rest },
66
+ { size = 24, strokeWidth: _sw, absoluteStrokeWidth: _asw, className, ...rest },
34
67
  ref,
35
68
  ) {
36
- return (
69
+ const spin = typeof className === "string" ? splitSpinClasses(className) : null;
70
+ const svg = (
37
71
  <svg
38
72
  ref={ref}
39
73
  xmlns="http://www.w3.org/2000/svg"
@@ -50,12 +84,14 @@ export function fluentIcon(name: string, paths: readonly string[]) {
50
84
  // offering a class name for stylesheets to start depending on.
51
85
  data-icon={name}
52
86
  {...rest}
87
+ className={spin ? spin.glyph : className}
53
88
  >
54
89
  {paths.map((d) => (
55
90
  <path key={d} d={d} />
56
91
  ))}
57
92
  </svg>
58
93
  );
94
+ return spin ? <span className={spin.box}>{svg}</span> : svg;
59
95
  });
60
96
  Icon.displayName = name;
61
97
  return Icon;
@@ -25,6 +25,7 @@ const D: Record<string, readonly string[]> = {
25
25
  "arrow-left": ["M9.159 16.867a.5.5 0 1 0 .674-.739l-6.168-5.63h13.831a.5.5 0 0 0 0-1H3.668l6.165-5.629a.5.5 0 0 0-.674-.738L2.243 9.445a.75.75 0 0 0-.24.631a.75.75 0 0 0 .24.477z"],
26
26
  "arrow-maximize": ["M15.5 4a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V5.707L5.707 15H10.5a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5v-6a.5.5 0 0 1 1 0v4.793L14.293 5H9.5a.5.5 0 0 1 0-1z"],
27
27
  "arrow-minimize": ["M8.5 11a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-1 0v-3.793l-5.146 5.147a.5.5 0 0 1-.708-.707L7.293 12H3.5a.5.5 0 0 1 0-1zm8.647-8.854a.5.5 0 1 1 .707.708L12.707 8H16.5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5v-5a.5.5 0 0 1 1 0v3.793z"],
28
+ "arrow-move": ["M10.354 2.146a.5.5 0 0 0-.708 0l-2.5 2.5a.5.5 0 1 0 .708.708L9.5 3.707V7.5a.5.5 0 0 0 1 0V3.707l1.646 1.647a.5.5 0 0 0 .708-.708zm-8.208 7.5a.5.5 0 0 0 0 .708l2.5 2.5a.5.5 0 0 0 .708-.708L3.707 10.5H7.5a.5.5 0 0 0 0-1H3.707l1.647-1.646a.5.5 0 1 0-.708-.708zM10 18a.5.5 0 0 1-.354-.146l-2.5-2.5a.5.5 0 0 1 .708-.708L9.5 16.293V12.5a.5.5 0 0 1 1 0v3.793l1.646-1.647a.5.5 0 0 1 .708.708l-2.5 2.5A.5.5 0 0 1 10 18m7.854-7.646a.5.5 0 0 0 0-.708l-2.5-2.5a.5.5 0 0 0-.708.708L16.293 9.5H12.5a.5.5 0 0 0 0 1h3.793l-1.647 1.646a.5.5 0 0 0 .708.708z"],
28
29
  "arrow-redo": ["M15.003 2.5a.5.5 0 0 1 1 0v4.9a.6.6 0 0 1-.6.6h-4.9a.5.5 0 0 1 0-1h3.594l-3.473-3.019a4 4 0 1 0-5.248 6.038l8.172 7.104a.5.5 0 1 1-.656.754L4.72 10.774a5 5 0 1 1 6.56-7.547l3.723 3.236z"],
29
30
  "arrow-right": ["M10.837 3.13a.5.5 0 0 0-.674.74L16.33 9.5H2.5a.5.5 0 0 0 0 1h13.828l-6.165 5.628a.5.5 0 0 0 .674.739l6.916-6.314a.747.747 0 0 0 0-1.108z"],
30
31
  "arrow-sort": ["M2.354 7.354L4.998 4.71V16.5a.5.5 0 0 0 1 0V4.705l2.649 2.65a.5.5 0 0 0 .707-.708l-3.49-3.49l-.01-.01A.5.5 0 0 0 5.5 3h-.002a.5.5 0 0 0-.383.179L1.646 6.647a.5.5 0 1 0 .708.707m15.293 5.292l-2.644 2.644V3.5a.5.5 0 0 0-1 0v11.795l-2.65-2.65a.5.5 0 0 0-.707.708l3.49 3.49l.01.01a.5.5 0 0 0 .355.147h.002a.5.5 0 0 0 .383-.179l3.468-3.468a.5.5 0 1 0-.707-.707"],
@@ -41,6 +42,7 @@ const D: Record<string, readonly string[]> = {
41
42
  "calendar-cancel": ["M14.5 3A2.5 2.5 0 0 1 17 5.5v4.1a5.5 5.5 0 0 0-1-.393V7H4v7.5A1.5 1.5 0 0 0 5.5 16h3.707q.149.524.393 1H5.5A2.5 2.5 0 0 1 3 14.5v-9A2.5 2.5 0 0 1 5.5 3zm0 1h-9A1.5 1.5 0 0 0 4 5.5V6h12v-.5A1.5 1.5 0 0 0 14.5 4M19 14.5a4.5 4.5 0 1 1-9 0a4.5 4.5 0 0 1 9 0m-4.5.707l1.146 1.147a.5.5 0 0 0 .708-.708L15.207 14.5l1.147-1.146a.5.5 0 0 0-.708-.708L14.5 13.793l-1.146-1.147a.5.5 0 0 0-.708.708l1.147 1.146l-1.147 1.146a.5.5 0 0 0 .708.708z"],
42
43
  "calendar-clock": ["M17 5.5A2.5 2.5 0 0 0 14.5 3h-9A2.5 2.5 0 0 0 3 5.5v9A2.5 2.5 0 0 0 5.5 17h4.1a5.5 5.5 0 0 1-.393-1H5.5A1.5 1.5 0 0 1 4 14.5V7h12v2.207q.524.149 1 .393zM5.5 4h9A1.5 1.5 0 0 1 16 5.5V6H4v-.5A1.5 1.5 0 0 1 5.5 4m9 15a4.5 4.5 0 1 0 0-9a4.5 4.5 0 0 0 0 9m-.5-6.5a.5.5 0 0 1 1 0V14h1a.5.5 0 0 1 0 1h-1.5a.5.5 0 0 1-.5-.5z"],
43
44
  "chat": ["M10 2a8 8 0 1 1-3.613 15.14l-.121-.065l-3.645.91a.5.5 0 0 1-.62-.441v-.082l.014-.083l.91-3.644l-.063-.12a8 8 0 0 1-.83-2.887l-.025-.382L2 10a8 8 0 0 1 8-8m0 1a7 7 0 0 0-6.106 10.425a.5.5 0 0 1 .063.272l-.014.094l-.756 3.021l3.024-.754a.5.5 0 0 1 .188-.01l.091.021l.087.039A7 7 0 1 0 10 3m.5 8a.5.5 0 0 1 .09.992L10.5 12h-3a.5.5 0 0 1-.09-.992L7.5 11zm2-3a.5.5 0 0 1 .09.992L12.5 9h-5a.5.5 0 0 1-.09-.992L7.5 8z"],
45
+ "chat-add": ["M6.5 9.5a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3v-3a.5.5 0 0 0-1 0v3zM18 10a8 8 0 1 0-16 0l.007.346l.026.382a8 8 0 0 0 .829 2.887l.063.12l-.91 3.644l-.014.083v.082a.5.5 0 0 0 .62.441l3.645-.91l.12.064A8 8 0 0 0 18 10M3 10a7 7 0 1 1 3.577 6.108l-.087-.039l-.091-.021a.5.5 0 0 0-.188.01l-3.024.754l.756-3.02l.014-.095a.5.5 0 0 0-.063-.272A6.97 6.97 0 0 1 3 10"],
44
46
  "chat-empty": ["M10 2a8 8 0 1 1-3.613 15.14l-.121-.065l-3.645.91a.5.5 0 0 1-.62-.441v-.082l.014-.083l.91-3.644l-.063-.12a8 8 0 0 1-.83-2.887l-.025-.382L2 10a8 8 0 0 1 8-8m0 1a7 7 0 0 0-6.106 10.425a.5.5 0 0 1 .063.272l-.014.094l-.756 3.021l3.024-.754a.5.5 0 0 1 .188-.01l.091.021l.087.039A7 7 0 1 0 10 3"],
45
47
  "checkmark": ["M3.374 10.168a.5.5 0 0 0-.748.664l4 4.5a.5.5 0 0 0 .728.022l10.5-10.5a.5.5 0 0 0-.707-.708L7.02 14.271z"],
46
48
  "checkmark-circle": ["M10 2a8 8 0 1 1 0 16a8 8 0 0 1 0-16m0 1a7 7 0 1 0 0 14a7 7 0 0 0 0-14m3.358 4.646a.5.5 0 0 1 .058.638l-.058.07l-4.004 4.004a.5.5 0 0 1-.638.058l-.07-.058l-2-2a.5.5 0 0 1 .638-.765l.07.058L9 11.298l3.651-3.652a.5.5 0 0 1 .707 0"],
@@ -64,6 +66,7 @@ const D: Record<string, readonly string[]> = {
64
66
  "color": ["M10 2a8 8 0 0 1 3.388 15.249a3.77 3.77 0 0 1-3.291-.059c-.974-.503-1.696-1.467-1.648-2.731c.017-.445.082-.867.143-1.243c.063-.387.118-.712.136-1.015c.018-.297-.004-.533-.078-.732c-.07-.191-.2-.381-.45-.569c-.313-.235-.58-.275-.845-.237c-.3.043-.614.188-1.014.387c-.735.365-1.776.942-2.974.332c-1.102-.562-1.424-1.868-1.22-2.917A8 8 0 0 1 10 2m0 1a7 7 0 0 0-6.871 5.655c-.153.788.126 1.547.691 1.835c.684.348 1.251.074 2.076-.336c.38-.188.834-.412 1.318-.481c.52-.075 1.054.028 1.586.427c.39.292.645.634.788 1.021c.14.379.162.768.14 1.14c-.022.366-.09.753-.149 1.116a9 9 0 0 0-.13 1.12c-.032.812.418 1.448 1.108 1.805a2.77 2.77 0 0 0 2.407.042A7.002 7.002 0 0 0 10 3m2.5 10a1 1 0 1 1 0 2a1 1 0 0 1 0-2m2-2.5a1 1 0 1 1 0 2a1 1 0 0 1 0-2m0-3a1 1 0 1 1 0 2a1 1 0 0 1 0-2m-2-2.5a1 1 0 1 1 0 2a1 1 0 0 1 0-2m-3-.5a1 1 0 1 1 0 2a1 1 0 0 1 0-2"],
65
67
  "copy": ["M7 7H5.5A1.5 1.5 0 0 0 4 8.5v6A1.5 1.5 0 0 0 5.5 16h4a1.5 1.5 0 0 0 1.413-1h1.037a2.5 2.5 0 0 1-2.45 2h-4A2.5 2.5 0 0 1 3 14.5v-6A2.5 2.5 0 0 1 5.5 6H7zm7.5-4A2.5 2.5 0 0 1 17 5.5v6a2.5 2.5 0 0 1-2.5 2.5h-4A2.5 2.5 0 0 1 8 11.5v-6A2.5 2.5 0 0 1 10.5 3zm-4 1A1.5 1.5 0 0 0 9 5.5v6a1.5 1.5 0 0 0 1.5 1.5h4a1.5 1.5 0 0 0 1.5-1.5v-6A1.5 1.5 0 0 0 14.5 4z"],
66
68
  "cursor": ["M5 3.059a1 1 0 0 1 1.636-.772l11.006 9.062c.724.596.302 1.772-.636 1.772h-5.592a1.5 1.5 0 0 0-1.134.518l-3.524 4.073c-.606.7-1.756.271-1.756-.655zm12.006 9.062L6 3.059v13.998l3.524-4.072a2.5 2.5 0 0 1 1.89-.864z"],
69
+ "cursor-click": ["M7.5 2a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2a.5.5 0 0 1 .5-.5M3.61 3.61a.5.5 0 0 1 .708 0l1.414 1.415a.5.5 0 1 1-.707.707L3.611 4.318a.5.5 0 0 1 0-.707m7.78 0a.5.5 0 0 1 0 .708L9.974 5.732a.5.5 0 1 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0M2 7.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m6.64-.2A1 1 0 0 0 7 8.067v9.101c0 .924 1.145 1.354 1.753.659l2.026-2.316A1.5 1.5 0 0 1 11.908 15h3.211c.935 0 1.359-1.17.64-1.768zM8 17.17V8.067L15.119 14h-3.211a2.5 2.5 0 0 0-1.882.854z"],
67
70
  "cut": ["M5.92 2.228a.5.5 0 0 0-.84.544L9.405 9.43L7.48 12.39a3 3 0 1 0 .779.636L10 10.348l1.74 2.68a3 3 0 1 0 .779-.636zM14 17a2 2 0 1 1 0-4a2 2 0 0 1 0 4M4 15a2 2 0 1 1 4 0a2 2 0 0 1-4 0m7.192-6.489l-.596-.918l3.485-5.365a.5.5 0 0 1 .838.544z"],
68
71
  "database": ["M4 5c0-1.007.875-1.755 1.904-2.223C6.978 2.289 8.427 2 10 2s3.022.289 4.096.777C15.125 3.245 16 3.993 16 5v10c0 1.007-.875 1.755-1.904 2.223C13.022 17.71 11.573 18 10 18s-3.022-.289-4.096-.777C4.875 16.755 4 16.007 4 15zm1 0c0 .374.356.875 1.318 1.313C7.234 6.729 8.536 7 10 7s2.766-.27 3.682-.687C14.644 5.875 15 5.373 15 5c0-.374-.356-.875-1.318-1.313C12.766 3.271 11.464 3 10 3s-2.766.27-3.682.687C5.356 4.125 5 4.627 5 5m10 1.698a5 5 0 0 1-.904.525C13.022 7.711 11.573 8 10 8s-3.022-.289-4.096-.777A5 5 0 0 1 5 6.698V15c0 .374.356.875 1.318 1.313c.916.416 2.218.687 3.682.687s2.766-.27 3.682-.687C14.644 15.875 15 15.373 15 15z"],
69
72
  "database-lightning": ["M4 5c0-1.007.875-1.755 1.9-2.223A10.2 10.2 0 0 1 10 2a10.2 10.2 0 0 1 4.1.777C15.125 3.245 16 3.993 16 5v4h-1V6.7q-.421.31-.9.525A10.2 10.2 0 0 1 10 8a10.2 10.2 0 0 1-4.1-.777A5 5 0 0 1 5 6.7V15c0 .374.356.875 1.318 1.313A9.2 9.2 0 0 0 10 17q.748.015 1.486-.09q.24.088.516.09h.469l-.197.787c-.746.156-1.508.228-2.274.213a10.2 10.2 0 0 1-4.1-.777C4.875 16.755 4 16.007 4 15zm1 0c0 .374.356.875 1.318 1.313A9.2 9.2 0 0 0 10 7a9.2 9.2 0 0 0 3.682-.687C14.644 5.875 15 5.373 15 5c0-.374-.356-.875-1.318-1.313A9.2 9.2 0 0 0 10 3a9.2 9.2 0 0 0-3.682.687C5.356 4.125 5 4.626 5 5m8.112 11a.5.5 0 0 1 .485.621l-.434 1.738c-.121.483.462.827.826.487l4.872-4.548A.75.75 0 0 0 18.35 13h-.404a.5.5 0 0 1-.474-.658l.561-1.684A.5.5 0 0 0 17.56 10h-3.473a.5.5 0 0 0-.462.308l-2.083 5a.5.5 0 0 0 .461.692z"],
@@ -94,6 +97,7 @@ const D: Record<string, readonly string[]> = {
94
97
  "folder-link": ["M4.5 3A2.5 2.5 0 0 0 2 5.5v9A2.5 2.5 0 0 0 4.5 17h4.837a3.5 3.5 0 0 1-.302-1H4.5A1.5 1.5 0 0 1 3 14.5V8h4.086a1.5 1.5 0 0 0 1.06-.44L9.707 6H15.5A1.5 1.5 0 0 1 17 7.5v4.535c.353.05.69.154 1 .302V7.5A2.5 2.5 0 0 0 15.5 5H9.707L8.22 3.513A1.75 1.75 0 0 0 6.982 3zM3 5.5A1.5 1.5 0 0 1 4.5 4h2.482a.75.75 0 0 1 .53.22l1.28 1.28L7.44 6.854A.5.5 0 0 1 7.086 7H3zm9.5 7.5a2.5 2.5 0 0 0 0 5h.5a.5.5 0 0 0 0-1h-.5a1.5 1.5 0 0 1 0-3h.5a.5.5 0 0 0 0-1zm3.5 0a.5.5 0 0 0 0 1h.5a1.5 1.5 0 0 1 0 3H16a.5.5 0 0 0 0 1h.5a2.5 2.5 0 0 0 0-5zm-4 2.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1-.5-.5"],
95
98
  "folder-open": ["M3 5.5v6.604l1.5-2.6a3 3 0 0 1 2.599-1.5H15V7.5A1.5 1.5 0 0 0 13.5 6h-4a.5.5 0 0 1-.353-.146L7.44 4.146A.5.5 0 0 0 7.086 4H4.5A1.5 1.5 0 0 0 3 5.5m1.284 10.485q.106.015.22.015H13.9a2 2 0 0 0 1.732-1l2.163-3.745a1.5 1.5 0 0 0-1.3-2.25H7.1a2 2 0 0 0-1.732 1L3.205 13.75a1.5 1.5 0 0 0 1.079 2.235M2 14.46V5.5A2.5 2.5 0 0 1 4.5 3h2.586a1.5 1.5 0 0 1 1.06.44L9.708 5H13.5A2.5 2.5 0 0 1 16 7.5v.505h.496c1.925 0 3.128 2.083 2.166 3.75L16.499 15.5a3 3 0 0 1-2.598 1.5h-9.4q-.095 0-.186-.007a2.46 2.46 0 0 1-1.438-.592A2.5 2.5 0 0 1 2 14.461"],
96
99
  "folder-search": ["M2 5.5A2.5 2.5 0 0 1 4.5 3h2.482c.464 0 .91.184 1.238.513L9.707 5H15.5A2.5 2.5 0 0 1 18 7.5V12h-.027A4.5 4.5 0 0 0 17 9.671V7.5A1.5 1.5 0 0 0 15.5 6H9.707l-1.56 1.56A1.5 1.5 0 0 1 7.085 8H3v6.5A1.5 1.5 0 0 0 4.5 16h6.171a4.5 4.5 0 0 0 2.329.973V17H4.5A2.5 2.5 0 0 1 2 14.5zM4.5 4A1.5 1.5 0 0 0 3 5.5V7h4.086a.5.5 0 0 0 .353-.146L8.793 5.5l-1.28-1.28a.75.75 0 0 0-.53-.22zm9 12c.786 0 1.512-.26 2.096-.697l2.55 2.55a.5.5 0 1 0 .708-.707l-2.55-2.55A3.5 3.5 0 1 0 13.5 16m0-1a2.5 2.5 0 1 1 0-5a2.5 2.5 0 0 1 0 5"],
100
+ "folder-zip": ["M6.982 3c.464 0 .91.185 1.238.513L9.707 5H15.5A2.5 2.5 0 0 1 18 7.5v7a2.5 2.5 0 0 1-2.5 2.5H15v.538a.46.46 0 0 1-.462.462h-3.076l-.094-.01a.46.46 0 0 1-.368-.452V17H4.5A2.5 2.5 0 0 1 2 14.5v-9A2.5 2.5 0 0 1 4.5 3zM13 13a1 1 0 0 0-1 1v3h2v-3a1 1 0 0 0-1-1M8.146 7.56a1.5 1.5 0 0 1-1.06.44H3v6.5A1.5 1.5 0 0 0 4.5 16H11v-2a2 2 0 1 1 4 0v2h.5a1.5 1.5 0 0 0 1.5-1.5v-7A1.5 1.5 0 0 0 15.5 6H9.707zM13 12h-1.5a.5.5 0 0 1 0-1H13zm1.5-2a.5.5 0 0 1 0 1H13v-1zM13 10h-1.5a.5.5 0 0 1 0-1H13zm1.5-2a.5.5 0 0 1 0 1H13V8zM13 8h-1.5a.5.5 0 0 1 0-1H13zM4.5 4A1.5 1.5 0 0 0 3 5.5V7h4.086a.5.5 0 0 0 .353-.146L8.793 5.5l-1.28-1.28a.75.75 0 0 0-.53-.22z"],
97
101
  "full-screen-maximize": ["M3 5a2 2 0 0 1 2-2h2a.5.5 0 0 1 0 1H5a1 1 0 0 0-1 1v2a.5.5 0 0 1-1 0zm9.5-1.5A.5.5 0 0 1 13 3h2a2 2 0 0 1 2 2v2a.5.5 0 0 1-1 0V5a1 1 0 0 0-1-1h-2a.5.5 0 0 1-.5-.5m-9 9a.5.5 0 0 1 .5.5v2a1 1 0 0 0 1 1h2a.5.5 0 0 1 0 1H5a2 2 0 0 1-2-2v-2a.5.5 0 0 1 .5-.5m13 0a.5.5 0 0 1 .5.5v2a2 2 0 0 1-2 2h-2a.5.5 0 0 1 0-1h2a1 1 0 0 0 1-1v-2a.5.5 0 0 1 .5-.5"],
98
102
  "full-screen-minimize": ["M14 5a1 1 0 0 0 1 1h2a.5.5 0 0 1 0 1h-2a2 2 0 0 1-2-2V3a.5.5 0 0 1 1 0zM6 15a1 1 0 0 0-1-1H3a.5.5 0 0 1 0-1h2a2 2 0 0 1 2 2v2a.5.5 0 0 1-1 0zm8 0a1 1 0 0 1 1-1h2a.5.5 0 0 0 0-1h-2a2 2 0 0 0-2 2v2a.5.5 0 0 0 1 0zM5 6a1 1 0 0 0 1-1V3a.5.5 0 0 1 1 0v2a2 2 0 0 1-2 2H3a.5.5 0 0 1 0-1z"],
99
103
  "gauge": ["M12.466 5.057a.5.5 0 0 1-.647.284a5.001 5.001 0 0 0-5.355 8.195a.5.5 0 1 1-.707.707a6 6 0 0 1 6.425-9.834a.5.5 0 0 1 .284.648m2.478 2.477a.5.5 0 0 1 .647.285a6 6 0 0 1-1.348 6.424a.5.5 0 1 1-.707-.707a5 5 0 0 0 1.123-5.354a.5.5 0 0 1 .284-.648m-.859-1.715a.5.5 0 0 0-.635-.011l-.177.14a335 335 0 0 0-1.91 1.531c-.532.431-1.078.877-1.513 1.242c-.218.182-.41.346-.56.478a4 4 0 0 0-.344.328a1.5 1.5 0 1 0 2.282 1.948c.072-.084.17-.232.27-.39c.107-.17.239-.385.385-.628c.292-.488.646-1.096.989-1.69a301 301 0 0 0 1.213-2.126l.111-.196a.5.5 0 0 0-.11-.626M10 18a8 8 0 1 0 0-16a8 8 0 0 0 0 16m0-1a7 7 0 1 1 0-14a7 7 0 0 1 0 14"],
@@ -124,6 +128,7 @@ const D: Record<string, readonly string[]> = {
124
128
  "music-note-2": ["M14.702 2.226A1 1 0 0 1 16 3.18V13.5a2.5 2.5 0 1 1-1-2V6.18L8 8.368V15.5a2.5 2.5 0 1 1-1-2V5.368a1 1 0 0 1 .702-.955zM8 7.32l7-2.187V3.18L8 5.368zM5.5 14a1.5 1.5 0 1 0 0 3a1.5 1.5 0 0 0 0-3m6.5-.5a1.5 1.5 0 1 0 3 0a1.5 1.5 0 0 0-3 0"],
125
129
  "navigation": ["M2 4.5a.5.5 0 0 1 .5-.5h15a.5.5 0 0 1 0 1h-15a.5.5 0 0 1-.5-.5m0 5a.5.5 0 0 1 .5-.5h15a.5.5 0 0 1 0 1h-15a.5.5 0 0 1-.5-.5m.5 4.5a.5.5 0 0 0 0 1h15a.5.5 0 0 0 0-1z"],
126
130
  "open": ["M6 4a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2.5a.5.5 0 0 1 1 0V14a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h2.5a.5.5 0 0 1 0 1zm5-.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-1 0V4.707l-4.146 4.147a.5.5 0 0 1-.708-.708L15.293 4H11.5a.5.5 0 0 1-.5-.5"],
131
+ "options": ["M14.95 5a2.5 2.5 0 0 0-4.9 0H2.5a.5.5 0 0 0 0 1h7.55a2.5 2.5 0 0 0 4.9 0h2.55a.5.5 0 0 0 0-1zM12.5 7a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3m-2.55 7a2.5 2.5 0 0 0-4.9 0H2.5a.5.5 0 0 0 0 1h2.55a2.5 2.5 0 0 0 4.9 0h7.55a.5.5 0 0 0 0-1zM7.5 16a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3"],
127
132
  "panel-bottom": ["M5 3a3 3 0 0 0-3 3v7a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V6a3 3 0 0 0-3-3zM3 6a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v5H3zm0 6h14v1a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"],
128
133
  "panel-left": ["M15 4a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3zM8.5 15H15a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2H8.5zM5 5a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2.5V5z"],
129
134
  "panel-left-expand": ["m13.179 10.5l-.998.874a.5.5 0 0 0 .658.752l2-1.75a.5.5 0 0 0 0-.752l-2-1.75a.5.5 0 1 0-.659.752l1 .874H9.5a.5.5 0 0 0 0 1zM2 14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2zm2 1a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h3v10zm4 0V5h8a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1z"],
@@ -140,6 +145,7 @@ const D: Record<string, readonly string[]> = {
140
145
  "play": ["M17.22 8.687a1.498 1.498 0 0 1 0 2.626l-9.997 5.499A1.5 1.5 0 0 1 5 15.499V4.501a1.5 1.5 0 0 1 2.223-1.313zm-.482 1.75a.5.5 0 0 0 0-.875L6.741 4.063A.5.5 0 0 0 6 4.501v10.998a.5.5 0 0 0 .741.438z"],
141
146
  "plug-connected": ["M17.854 2.854a.5.5 0 0 0-.708-.708l-2.668 2.669a4.036 4.036 0 0 0-5.332.331l-.3.3a1.49 1.49 0 0 0 0 2.108l3.6 3.6a1.49 1.49 0 0 0 2.107 0l.3-.3a4.036 4.036 0 0 0 .332-5.332zm-4.008 7.592a.49.49 0 0 1-.693 0l-3.6-3.6a.49.49 0 0 1 0-.692l.3-.3a3.036 3.036 0 0 1 4.293 4.292zm-6.292-1.6a1.49 1.49 0 0 0-2.107 0l-.3.3a4.036 4.036 0 0 0-.332 5.332l-2.669 2.668a.5.5 0 0 0 .708.708l2.668-2.669a4.036 4.036 0 0 0 5.332-.332l.3-.3a1.49 1.49 0 0 0 0-2.107zm-1.4.708a.49.49 0 0 1 .693 0l3.6 3.6a.49.49 0 0 1 0 .692l-.3.3a3.035 3.035 0 1 1-4.293-4.292z"],
142
147
  "power": ["M10.5 2.5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0zM13.743 4a.5.5 0 1 0-.499.867a6.5 6.5 0 1 1-6.494.004a.5.5 0 1 0-.5-.866A7.5 7.5 0 1 0 13.743 4"],
148
+ "print": ["M5 4.5A1.5 1.5 0 0 1 6.5 3h7A1.5 1.5 0 0 1 15 4.5V5h.5A2.5 2.5 0 0 1 18 7.5v5a1.5 1.5 0 0 1-1.5 1.5H15v1.5a1.5 1.5 0 0 1-1.5 1.5h-7A1.5 1.5 0 0 1 5 15.5V14H3.5A1.5 1.5 0 0 1 2 12.5v-5A2.5 2.5 0 0 1 4.5 5H5zM6 5h8v-.5a.5.5 0 0 0-.5-.5h-7a.5.5 0 0 0-.5.5zm-1 8v-1.5A1.5 1.5 0 0 1 6.5 10h7a1.5 1.5 0 0 1 1.5 1.5V13h1.5a.5.5 0 0 0 .5-.5v-5A1.5 1.5 0 0 0 15.5 6h-11A1.5 1.5 0 0 0 3 7.5v5a.5.5 0 0 0 .5.5zm1.5-2a.5.5 0 0 0-.5.5v4a.5.5 0 0 0 .5.5h7a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 0-.5-.5z"],
143
149
  "pulse": ["M7.004 3a.5.5 0 0 1 .479.37l3.043 11.303l2.495-8.317a.5.5 0 0 1 .947-.032L15.347 10H17.5a.5.5 0 0 1 0 1H15a.5.5 0 0 1-.468-.324l-.98-2.612l-2.573 8.58a.5.5 0 0 1-.962-.014L6.986 5.37L5.48 10.637A.5.5 0 0 1 5 11H2.5a.5.5 0 0 1 0-1h2.123l1.896-6.637A.5.5 0 0 1 7.004 3"],
144
150
  "puzzle-piece": ["M11 3c-.69 0-1.25.56-1.25 1.25V5H6.5a.5.5 0 0 0-.5.5v3.25h-.75a1.25 1.25 0 1 0 0 2.5H6v3.25a.5.5 0 0 0 .5.5h3.25v.75a1.25 1.25 0 1 0 2.5 0V15h3.25a.5.5 0 0 0 .5-.5v-2.25h-.75a2.25 2.25 0 0 1 0-4.5H16V5.5a.5.5 0 0 0-.5-.5h-3.25v-.75C12.25 3.56 11.69 3 11 3M8.764 4a2.25 2.25 0 0 1 4.472 0H15.5A1.5 1.5 0 0 1 17 5.5v3.25h-1.75a1.25 1.25 0 1 0 0 2.5H17v3.25a1.5 1.5 0 0 1-1.5 1.5h-2.264a2.25 2.25 0 0 1-4.472 0H6.5A1.5 1.5 0 0 1 5 14.5v-2.264a2.25 2.25 0 0 1 0-4.472V5.5A1.5 1.5 0 0 1 6.5 4z"],
145
151
  "qr-code": ["M11 15h2v2h-2zm4 0h2v2h-2zm-4-4h2v2h-2zm2 2h2v2h-2zm2-2h2v2h-2zM3 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1zm0 1h2v2H5zm-2 8a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm0 1h2v2H5zm6-8a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-2a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1zm0 1h2v2h-2z"],
@@ -158,6 +164,7 @@ const D: Record<string, readonly string[]> = {
158
164
  "shield-dismiss": ["M7.854 7.146a.5.5 0 1 0-.708.708L9.293 10l-2.147 2.146a.5.5 0 0 0 .708.708L10 10.707l2.146 2.147a.5.5 0 0 0 .708-.708L10.707 10l2.147-2.146a.5.5 0 0 0-.708-.708L10 9.293zm2.423-5.062a.5.5 0 0 0-.554 0a15.05 15.05 0 0 1-6.294 2.421A.5.5 0 0 0 3 5v4.5c0 3.891 2.307 6.73 6.82 8.467a.5.5 0 0 0 .36 0C14.693 16.23 17 13.39 17 9.5V5a.5.5 0 0 0-.43-.495a15.05 15.05 0 0 1-6.293-2.421M4 5.428a16 16 0 0 0 5.6-2.082l.4-.249l.4.249A16 16 0 0 0 16 5.428V9.5c0 3.392-1.968 5.863-6 7.463c-4.032-1.6-6-4.071-6-7.463z"],
159
165
  "shield-error": ["M10 6a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-1 0v-5A.5.5 0 0 1 10 6m0 8.5a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5M9.723 2.084a.5.5 0 0 1 .554 0a15.05 15.05 0 0 0 6.294 2.421A.5.5 0 0 1 17 5v4.5c0 3.891-2.307 6.73-6.82 8.467a.5.5 0 0 1-.36 0C5.308 16.23 3 13.39 3 9.5V5a.5.5 0 0 1 .43-.495a15.05 15.05 0 0 0 6.293-2.421m-.124 1.262A16 16 0 0 1 4 5.428V9.5c0 3.392 1.968 5.863 6 7.463c4.032-1.6 6-4.071 6-7.463V5.428a16 16 0 0 1-5.6-2.082l-.4-.249z"],
160
166
  "sign-out": ["M8.5 11.25a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5M11 3.5a.5.5 0 0 0-.576-.494l-7 1.07A.5.5 0 0 0 3 4.57v10.86a.5.5 0 0 0 .424.494l7 1.071a.5.5 0 0 0 .576-.494V10h5.172l-.997.874a.5.5 0 0 0 .658.752l1.996-1.75a.5.5 0 0 0 0-.752l-1.996-1.75a.499.499 0 1 0-.658.752l.997.874H11zm-1 .582V15.92L4 15V4.999zM12.5 16H12v-5h1v4.5a.5.5 0 0 1-.5.5M12 8V4h.5a.5.5 0 0 1 .5.5V8z"],
167
+ "slide-text": ["M5.5 7a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1zm0 2.5a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1zm-.5 3a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5M4.5 4A2.5 2.5 0 0 0 2 6.5v7A2.5 2.5 0 0 0 4.5 16h11a2.5 2.5 0 0 0 2.5-2.5v-7A2.5 2.5 0 0 0 15.5 4zM3 6.5A1.5 1.5 0 0 1 4.5 5h11A1.5 1.5 0 0 1 17 6.5v7a1.5 1.5 0 0 1-1.5 1.5h-11A1.5 1.5 0 0 1 3 13.5z"],
161
168
  "sparkle": ["M7.398 12.809a1.04 1.04 0 0 0 1.204-.003c.178-.13.313-.31.387-.518l.447-1.373a2.34 2.34 0 0 1 1.477-1.479l1.391-.45a1.045 1.045 0 0 0-.044-1.98l-1.375-.448a2.34 2.34 0 0 1-1.48-1.477l-.452-1.388a1.044 1.044 0 0 0-1.973.017l-.457 1.4a2.34 2.34 0 0 1-1.44 1.45l-1.39.447a1.045 1.045 0 0 0 .016 1.974l1.374.445a2.33 2.33 0 0 1 1.481 1.488l.452 1.391c.072.204.206.38.382.504m.085-7.415l.527-1.377l.44 1.377a3.33 3.33 0 0 0 2.117 2.114l1.406.53l-1.382.447a3.34 3.34 0 0 0-2.115 2.117l-.523 1.378l-.449-1.379a3.34 3.34 0 0 0-.8-1.31a3.4 3.4 0 0 0-1.312-.812l-1.378-.522l1.386-.45a3.36 3.36 0 0 0 1.29-.813a3.4 3.4 0 0 0 .793-1.3m6.052 11.457a.806.806 0 0 0 1.226-.398l.248-.762a1.1 1.1 0 0 1 .26-.42c.118-.12.262-.208.42-.26l.772-.252a.8.8 0 0 0-.023-1.52l-.764-.25a1.08 1.08 0 0 1-.68-.678l-.252-.773a.8.8 0 0 0-1.518.01l-.247.762a1.07 1.07 0 0 1-.665.679l-.773.252a.8.8 0 0 0 .008 1.518l.763.247c.16.054.304.143.422.261c.119.119.207.263.258.422l.253.774a.8.8 0 0 0 .292.388m-.913-2.793L12.443 14l.184-.064a2.11 2.11 0 0 0 1.3-1.317l.058-.178l.06.181a2.08 2.08 0 0 0 1.316 1.316l.195.063l-.18.06a2.08 2.08 0 0 0-1.317 1.32l-.059.181l-.058-.18a2.08 2.08 0 0 0-1.32-1.323"],
162
169
  "speaker-1": ["M11.996 3.006c0-.873-1.04-1.327-1.68-.733L6.444 5.866a.5.5 0 0 1-.34.134H3.496a1.5 1.5 0 0 0-1.5 1.5v5a1.5 1.5 0 0 0 1.5 1.5h2.608a.5.5 0 0 1 .34.133l3.872 3.594c.64.593 1.68.14 1.68-.733zM7.124 6.599l3.872-3.593v13.988L7.124 13.4a1.5 1.5 0 0 0-1.02-.4H3.496a.5.5 0 0 1-.5-.5v-5a.5.5 0 0 1 .5-.5h2.608a1.5 1.5 0 0 0 1.02-.4m6.956 6.334a.5.5 0 0 1-.183-.683a4.5 4.5 0 0 0 0-4.5a.5.5 0 1 1 .865-.5a5.5 5.5 0 0 1 .001 5.5a.5.5 0 0 1-.683.183"],
163
170
  "speaker-2": ["M11.996 3.006c0-.873-1.04-1.327-1.68-.733L6.444 5.866a.5.5 0 0 1-.34.134H3.496a1.5 1.5 0 0 0-1.5 1.5v5a1.5 1.5 0 0 0 1.5 1.5h2.608a.5.5 0 0 1 .34.133l3.872 3.594c.64.593 1.68.14 1.68-.733zM7.124 6.599l3.872-3.593v13.988L7.124 13.4a1.5 1.5 0 0 0-1.02-.4H3.496a.5.5 0 0 1-.5-.5v-5a.5.5 0 0 1 .5-.5h2.608a1.5 1.5 0 0 0 1.02-.4m8.132-1.972a.5.5 0 0 1 .706.04a8 8 0 0 1 0 10.666a.5.5 0 0 1-.745-.667a7 7 0 0 0 0-9.333a.5.5 0 0 1 .039-.706m-1.176 8.306a.5.5 0 0 1-.183-.683a4.5 4.5 0 0 0 0-4.5a.5.5 0 1 1 .865-.5a5.5 5.5 0 0 1 .001 5.5a.5.5 0 0 1-.683.183"],
@@ -167,6 +174,7 @@ const D: Record<string, readonly string[]> = {
167
174
  "square-dismiss": ["M6 3a3 3 0 0 0-3 3v8a3 3 0 0 0 3 3h3.6a5.5 5.5 0 0 1-.393-1H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v3.207q.524.149 1 .393V6a3 3 0 0 0-3-3zm8.5 16a4.5 4.5 0 1 0 0-9a4.5 4.5 0 0 0 0 9m1.854-6.354a.5.5 0 0 1 0 .708L15.207 14.5l1.147 1.146a.5.5 0 0 1-.708.708L14.5 15.207l-1.146 1.147a.5.5 0 0 1-.708-.708l1.147-1.146l-1.147-1.146a.5.5 0 0 1 .708-.708l1.146 1.147l1.146-1.147a.5.5 0 0 1 .708 0"],
168
175
  "subtract": ["M3 10a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 0 1h-13A.5.5 0 0 1 3 10"],
169
176
  "table": ["M17 5.5A2.5 2.5 0 0 0 14.5 3h-9A2.5 2.5 0 0 0 3 5.5v9A2.5 2.5 0 0 0 5.5 17h9a2.5 2.5 0 0 0 2.5-2.5zm-13 9V13h3v3H5.5l-.144-.007A1.5 1.5 0 0 1 4 14.5m8-1.5v3H8v-3zm2.5 3H13v-3h3v1.5l-.007.145A1.5 1.5 0 0 1 14.5 16M12 8v4H8V8zm1 0h3v4h-3zm-1-4v3H8V4zm1 0h1.5l.145.007A1.5 1.5 0 0 1 16 5.5V7h-3zM7 4v3H4V5.5l.007-.144A1.5 1.5 0 0 1 5.5 4zm0 4v4H4V8z"],
177
+ "tablet": ["M8.5 12a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1zM4 4a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zM3 6a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1z"],
170
178
  "tag": ["M14 7a1 1 0 1 0 0-2a1 1 0 0 0 0 2m-2.87-5a2 2 0 0 0-1.426.584L3.022 9.249a2 2 0 0 0-.002 2.83l4.949 4.948a2 2 0 0 0 2.828 0l6.631-6.63a2 2 0 0 0 .586-1.418l-.008-4.95a2 2 0 0 0-1.986-1.997zm-.72 1.292A1 1 0 0 1 11.123 3l4.89.032a1 1 0 0 1 .993.999l.008 4.95a1 1 0 0 1-.293.708l-6.63 6.631a1 1 0 0 1-1.415 0l-4.949-4.948a1 1 0 0 1 .001-1.415z"],
171
179
  "tag-multiple": ["M13.5 6.5a1 1 0 1 0 0-2a1 1 0 0 0 0 2M9.207 2.586A2 2 0 0 1 10.621 2h4.452a2 2 0 0 1 2 2v4.374a2 2 0 0 1-.593 1.422l-5.818 5.76a2 2 0 0 1-2.82-.008l-4.385-4.384a2 2 0 0 1 0-2.828zM10.621 3a1 1 0 0 0-.707.293l-5.75 5.75a1 1 0 0 0 0 1.414l4.384 4.384a1 1 0 0 0 1.41.004l5.819-5.76a1 1 0 0 0 .296-.71V4a1 1 0 0 0-1-1zm-7.624 8.8a2 2 0 0 0 .46 2.114l2.977 2.977a4 4 0 0 0 5.642.014l4.404-4.36a2 2 0 0 0 .593-1.42v-.573l-4.997 4.953a4 4 0 0 1-.147.14l-.556.55a3 3 0 0 1-4.232-.01l-.499-.5a4 4 0 0 1-.208-.194l-2.977-2.977a2 2 0 0 1-.46-.714"],
172
180
  "target": ["M10 11.5a1.5 1.5 0 1 0 0-3a1.5 1.5 0 0 0 0 3M5 10a5 5 0 1 1 10 0a5 5 0 0 1-10 0m5-4a4 4 0 1 0 0 8a4 4 0 0 0 0-8m-8 4a8 8 0 1 1 16 0a8 8 0 0 1-16 0m8-7a7 7 0 1 0 0 14a7 7 0 0 0 0-14"],
@@ -192,7 +200,7 @@ const D: Record<string, readonly string[]> = {
192
200
  export const ICON_VIEW_BOX = "0 0 20 20";
193
201
 
194
202
  /** Which names this module draws with Fluent, for the coverage test. */
195
- export const FLUENT_NAMES: readonly string[] = ["Activity","AlertCircle","AlertTriangle","AppWindow","ArrowDown","ArrowDownAZ","ArrowDownToLine","ArrowDownUp","ArrowLeft","ArrowRight","ArrowUp","ArrowUpCircle","ArrowUpDown","ArrowUpFromLine","Bell","BellOff","BellRing","Bot","BotMessageSquare","Brain","Bug","CalendarClock","CalendarX2","Check","CheckCircle","CheckCircle2","CheckIcon","ChevronDown","ChevronDownIcon","ChevronLeft","ChevronRight","ChevronRightIcon","ChevronUp","ChevronUpIcon","ChevronsDown","ChevronsDownUp","ChevronsRight","ChevronsUpDown","Circle","CircleCheckIcon","CircleHelp","CircleIcon","CircleX","Clipboard","ClipboardCheck","ClipboardList","ClipboardPaste","Clock","Cloud","CloudOff","Code","Coffee","Columns","Columns2","Columns3","Copy","Cpu","Crosshair","Database","DatabaseZap","Download","ExternalLink","Eye","EyeOff","File","FileCode","FilePen","FilePlus","FilePlus2","FileSearch","FileText","FileType","FileWarning","Filter","FlaskConical","FlipHorizontal","FlipHorizontal2","FlipVertical","FlipVertical2","Folder","FolderOpen","FolderPlus","FolderSearch","FolderSymlink","FolderTree","Gauge","GitBranch","Globe","Grid2x2","GripHorizontal","GripVertical","Hand","HardDrive","Heart","HelpCircle","History","Home","Image","ImageOff","ImagePlus","Info","InfoIcon","Key","KeyRound","Keyboard","Layers","LayoutGrid","Lightbulb","Link","Link2","Link2Off","List","ListChecks","ListFilter","ListOrdered","ListTodo","Loader2","Loader2Icon","Lock","LogIn","LogOut","Maximize","Maximize2","Menu","MessageCircle","MessageSquare","Mic","MicOff","Minimize","Minimize2","Minus","Monitor","MonitorSmartphone","MonitorX","Moon","MoreHorizontal","MoreVertical","MousePointer2","Music","OctagonXIcon","Palette","PanelBottom","PanelLeft","PanelLeftOpen","PanelRight","Paperclip","Pause","Pencil","PencilLine","PictureInPicture2","Pin","PinOff","Play","Plug","Plus","Power","Puzzle","QrCode","Redo2","RefreshCw","RotateCcw","RotateCw","Save","Scissors","ScrollText","Search","Send","Settings","Settings2","Share2","ShieldAlert","ShieldCheck","ShieldOff","Smartphone","Sparkles","Square","SquareDashedMousePointer","SquareTerminal","Sun","Table","Tag","Tags","Terminal","TerminalSquare","TextSelect","Trash2","TriangleAlert","TriangleAlertIcon","Undo2","Unlink","Upload","Usb","UserPlus","UserRound","Users","Volume1","Volume2","VolumeX","Wifi","WifiOff","WrapText","X","XCircle","XIcon","XSquare","Zap","ZapOff","ZoomIn","ZoomOut"];
203
+ export const FLUENT_NAMES: readonly string[] = ["Activity","AlertCircle","AlertTriangle","AppWindow","ArrowDown","ArrowDownAZ","ArrowDownToLine","ArrowDownUp","ArrowLeft","ArrowRight","ArrowUp","ArrowUpCircle","ArrowUpDown","ArrowUpFromLine","Bell","BellOff","BellRing","Bot","BotMessageSquare","Brain","Bug","CalendarClock","CalendarX2","Check","CheckCircle","CheckCircle2","CheckIcon","ChevronDown","ChevronDownIcon","ChevronLeft","ChevronRight","ChevronRightIcon","ChevronUp","ChevronUpIcon","ChevronsDown","ChevronsDownUp","ChevronsRight","ChevronsUpDown","Circle","CircleCheckIcon","CircleHelp","CircleIcon","CircleX","Clipboard","ClipboardCheck","ClipboardList","ClipboardPaste","Clock","Cloud","CloudOff","Code","Coffee","Columns","Columns2","Columns3","Copy","Cpu","Crosshair","Database","DatabaseZap","Download","ExternalLink","Eye","EyeOff","File","FileArchive","FileCode","FilePen","FilePlus","FilePlus2","FileSearch","FileText","FileType","FileWarning","Filter","FlaskConical","FlipHorizontal","FlipHorizontal2","FlipVertical","FlipVertical2","Folder","FolderOpen","FolderPlus","FolderSearch","FolderSymlink","FolderTree","Gauge","GitBranch","Globe","Grid2x2","GripHorizontal","GripVertical","Hand","HardDrive","Heart","HelpCircle","History","Home","Image","ImageOff","ImagePlus","Info","InfoIcon","Key","KeyRound","Keyboard","Layers","LayoutGrid","Lightbulb","Link","Link2","Link2Off","List","ListChecks","ListFilter","ListOrdered","ListTodo","Loader2","Loader2Icon","Lock","LogIn","LogOut","Maximize","Maximize2","Menu","MessageCircle","MessageSquare","MessageSquarePlus","Mic","MicOff","Minimize","Minimize2","Minus","Monitor","MonitorSmartphone","MonitorX","Moon","MoreHorizontal","MoreVertical","MousePointer2","MousePointerClick","Move","Music","OctagonXIcon","Palette","PanelBottom","PanelLeft","PanelLeftOpen","PanelRight","Paperclip","Pause","Pencil","PencilLine","PictureInPicture2","Pin","PinOff","Play","Plug","Plus","Power","Presentation","Printer","Puzzle","QrCode","Redo2","RefreshCw","RotateCcw","RotateCw","Save","Scissors","ScrollText","Search","Send","Settings","Settings2","Share2","ShieldAlert","ShieldCheck","ShieldOff","SlidersHorizontal","Smartphone","Sparkles","Square","SquareDashedMousePointer","SquareTerminal","Sun","Table","Tablet","Tag","Tags","Terminal","TerminalSquare","TextSelect","Trash2","TriangleAlert","TriangleAlertIcon","Undo2","Unlink","Upload","Usb","UserPlus","UserRound","Users","Volume1","Volume2","VolumeX","Wifi","WifiOff","WrapText","X","XCircle","XIcon","XSquare","Zap","ZapOff","ZoomIn","ZoomOut"];
196
204
 
197
205
  /** Which names deliberately stay on lucide, and are asserted to be a short list. */
198
206
  export const LUCIDE_NAMES: readonly string[] = ["CaseSensitive","FileDiff","FileJson","FolderGit2","GitCommitHorizontal","Github","Hexagon","Network","PowerOff","Regex","ReplaceAll","Scan","ServerOff","Slash","WholeWord"];
@@ -282,6 +290,7 @@ export const ExternalLink = fluentIcon("ExternalLink", D["open"]!);
282
290
  export const Eye = fluentIcon("Eye", D["eye"]!);
283
291
  export const EyeOff = fluentIcon("EyeOff", D["eye-off"]!);
284
292
  export const File = fluentIcon("File", D["document"]!);
293
+ export const FileArchive = fluentIcon("FileArchive", D["folder-zip"]!);
285
294
  export const FileCode = fluentIcon("FileCode", D["code"]!);
286
295
  export const FilePen = fluentIcon("FilePen", D["document-edit"]!);
287
296
  export const FilePlus = fluentIcon("FilePlus", D["document-add"]!);
@@ -343,6 +352,7 @@ export const Maximize2 = fluentIcon("Maximize2", D["arrow-maximize"]!);
343
352
  export const Menu = fluentIcon("Menu", D["navigation"]!);
344
353
  export const MessageCircle = fluentIcon("MessageCircle", D["chat-empty"]!);
345
354
  export const MessageSquare = fluentIcon("MessageSquare", D["chat"]!);
355
+ export const MessageSquarePlus = fluentIcon("MessageSquarePlus", D["chat-add"]!);
346
356
  export const Mic = fluentIcon("Mic", D["mic"]!);
347
357
  export const MicOff = fluentIcon("MicOff", D["mic-off"]!);
348
358
  export const Minimize = fluentIcon("Minimize", D["full-screen-minimize"]!);
@@ -355,6 +365,8 @@ export const Moon = fluentIcon("Moon", D["weather-moon"]!);
355
365
  export const MoreHorizontal = fluentIcon("MoreHorizontal", D["more-horizontal"]!);
356
366
  export const MoreVertical = fluentIcon("MoreVertical", D["more-vertical"]!);
357
367
  export const MousePointer2 = fluentIcon("MousePointer2", D["cursor"]!);
368
+ export const MousePointerClick = fluentIcon("MousePointerClick", D["cursor-click"]!);
369
+ export const Move = fluentIcon("Move", D["arrow-move"]!);
358
370
  export const Music = fluentIcon("Music", D["music-note-2"]!);
359
371
  export const OctagonXIcon = fluentIcon("OctagonXIcon", D["dismiss-circle"]!);
360
372
  export const Palette = fluentIcon("Palette", D["color"]!);
@@ -373,6 +385,8 @@ export const Play = fluentIcon("Play", D["play"]!);
373
385
  export const Plug = fluentIcon("Plug", D["plug-connected"]!);
374
386
  export const Plus = fluentIcon("Plus", D["add"]!);
375
387
  export const Power = fluentIcon("Power", D["power"]!);
388
+ export const Presentation = fluentIcon("Presentation", D["slide-text"]!);
389
+ export const Printer = fluentIcon("Printer", D["print"]!);
376
390
  export const Puzzle = fluentIcon("Puzzle", D["puzzle-piece"]!);
377
391
  export const QrCode = fluentIcon("QrCode", D["qr-code"]!);
378
392
  export const Redo2 = fluentIcon("Redo2", D["arrow-redo"]!);
@@ -390,6 +404,7 @@ export const Share2 = fluentIcon("Share2", D["share"]!);
390
404
  export const ShieldAlert = fluentIcon("ShieldAlert", D["shield-error"]!);
391
405
  export const ShieldCheck = fluentIcon("ShieldCheck", D["shield-checkmark"]!);
392
406
  export const ShieldOff = fluentIcon("ShieldOff", D["shield-dismiss"]!);
407
+ export const SlidersHorizontal = fluentIcon("SlidersHorizontal", D["options"]!);
393
408
  export const Smartphone = fluentIcon("Smartphone", D["phone"]!);
394
409
  export const Sparkles = fluentIcon("Sparkles", D["sparkle"]!);
395
410
  export const Square = fluentIcon("Square", D["square"]!);
@@ -397,6 +412,7 @@ export const SquareDashedMousePointer = fluentIcon("SquareDashedMousePointer", D
397
412
  export const SquareTerminal = fluentIcon("SquareTerminal", D["window-console"]!);
398
413
  export const Sun = fluentIcon("Sun", D["weather-sunny"]!);
399
414
  export const Table = fluentIcon("Table", D["table"]!);
415
+ export const Tablet = fluentIcon("Tablet", D["tablet"]!);
400
416
  export const Tag = fluentIcon("Tag", D["tag"]!);
401
417
  export const Tags = fluentIcon("Tags", D["tag-multiple"]!);
402
418
  export const Terminal = fluentIcon("Terminal", D["window-console"]!);
@@ -0,0 +1,30 @@
1
+ import { usePanelStore } from "@/stores/panel-store";
2
+
3
+ /**
4
+ * Write some keys of a tab's metadata, keeping every other key as the store has it *now*.
5
+ *
6
+ * Tab components receive their metadata as a prop, and a prop captured by an effect or a
7
+ * callback is a snapshot of whatever was current when it last rendered. Spreading that
8
+ * snapshot back into the store (`{ ...metadata, sessionId }`) silently reverts anything
9
+ * written since — by another component hosting the same tab, by the panel store's own
10
+ * activation stamp, or by a second effect in the same commit. Reading at write time is what
11
+ * makes two writers to one tab safe.
12
+ */
13
+ export function patchTabMetadata(tabId: string, patch: Record<string, unknown>): void {
14
+ const store = usePanelStore.getState();
15
+ const current = store.getPanelForTab(tabId)?.tabs.find((t) => t.id === tabId)?.metadata;
16
+ store.updateTab(tabId, { metadata: mergeTabMetadata(current, patch) });
17
+ }
18
+
19
+ /** The pure half: `patch` wins, everything else in `current` is kept. */
20
+ export function mergeTabMetadata(
21
+ current: Record<string, unknown> | undefined,
22
+ patch: Record<string, unknown>,
23
+ ): Record<string, unknown> {
24
+ return { ...current, ...patch };
25
+ }
26
+
27
+ /** The tab's metadata as the store holds it now, or undefined when the tab is gone. */
28
+ export function currentTabMetadata(tabId: string): Record<string, unknown> | undefined {
29
+ return usePanelStore.getState().getPanelForTab(tabId)?.tabs.find((t) => t.id === tabId)?.metadata;
30
+ }
@@ -18,6 +18,16 @@ export interface SendToChatDetail {
18
18
  projectName?: string | null;
19
19
  /** Only the chat tab with this id may consume the event. */
20
20
  targetTabId?: string;
21
+ /**
22
+ * Send the text as a message right away when the addressed composer is idle and empty;
23
+ * otherwise it becomes a chip as usual. Only honoured together with `targetTabId`.
24
+ */
25
+ autoSend?: boolean;
26
+ }
27
+
28
+ /** Detail of the ack a composer answers with; `sent` says the text went out as a message. */
29
+ export interface SendToChatAck {
30
+ sent?: boolean;
21
31
  }
22
32
 
23
33
  /** Wall-clock activation stamp written by the panel store on every tab activation. */
@@ -81,12 +91,16 @@ export function resolveSelectedChatTabId(projectName?: string | null): string |
81
91
  *
82
92
  * Falls back through: live tab answers the event → tab exists but is not mounted
83
93
  * yet, so hand the text over as `pendingMessage` → no chat open at all, open one.
94
+ *
95
+ * `newTab` skips the first two: the text always starts a fresh, plain chat as an editable
96
+ * draft. For a brief that must not land in whatever conversation (or design session) the
97
+ * user happened to select last.
84
98
  */
85
- export function sendToChat(opts: { text: string; label?: string; projectName?: string | null }): void {
99
+ export function sendToChat(opts: { text: string; label?: string; projectName?: string | null; newTab?: boolean }): void {
86
100
  const { text, label, projectName } = opts;
87
101
  if (!text.trim()) return;
88
102
 
89
- const targetTabId = resolveSelectedChatTabId(projectName);
103
+ const targetTabId = opts.newTab ? null : resolveSelectedChatTabId(projectName);
90
104
  const store = usePanelStore.getState();
91
105
 
92
106
  if (targetTabId) {
@@ -9,6 +9,7 @@ import {
9
9
  BotMessageSquare,
10
10
  Globe,
11
11
  Users,
12
+ Palette,
12
13
  } from "@/lib/icons";
13
14
  import type { SidebarActiveTab } from "@/stores/settings-store";
14
15
  import type { FeatureBadgeId } from "@/lib/feature-badges";
@@ -35,6 +36,7 @@ export interface SidebarTabDef {
35
36
  export const BUILTIN_SIDEBAR_TABS: SidebarTabDef[] = [
36
37
  { id: "history", label: "Chat History", shortLabel: "History", icon: BotMessageSquare },
37
38
  { id: "teams", label: "Teams", icon: Users, badge: "teams" },
39
+ { id: "designs", label: "Designs", icon: Palette, badge: "designs" },
38
40
  { id: "explorer", label: "Explorer", icon: FolderOpen },
39
41
  { id: "search", label: "Search", icon: Search },
40
42
  { id: "git", label: "Git", icon: GitBranch },
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The chat session a tab is showing, for every tab type that hosts one.
3
+ *
4
+ * A design tab embeds a chat session exactly as a chat tab does, so anything that asks
5
+ * "which tab is this session in?" — focusing an already-open session, unread badges, the
6
+ * streaming dots, notification clearing — has to ask this instead of testing
7
+ * `type === "chat"`. A check written against `chat` alone makes a design session look
8
+ * unopened, and re-opening it then starts a plain chat tab outside design mode.
9
+ */
10
+ const SESSION_TAB_TYPES: ReadonlySet<string> = new Set(["chat", "design"]);
11
+
12
+ export function tabSessionId(tab: { type: string; metadata?: Record<string, unknown> } | null | undefined): string | undefined {
13
+ if (!tab || !SESSION_TAB_TYPES.has(tab.type)) return undefined;
14
+ const id = tab.metadata?.sessionId;
15
+ return typeof id === "string" && id ? id : undefined;
16
+ }
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import {
9
9
  Terminal, MessageSquare, FileCode, Database, FileDiff, Settings, Puzzle, Sparkles, Users, CircleX,
10
- GitCommitHorizontal,
10
+ GitCommitHorizontal, Palette,
11
11
  type LucideIcon,
12
12
  } from "@/lib/icons";
13
13
  import type { ElementType } from "react";
@@ -35,6 +35,7 @@ export const TAB_TYPE_ICONS: Record<TabType, LucideIcon> = {
35
35
  "ai-resource": Sparkles,
36
36
  group: Users,
37
37
  problems: CircleX,
38
+ design: Palette,
38
39
  };
39
40
 
40
41
  /** Resolve the icon for a tab type, falling back to a generic glyph. */
@@ -28,6 +28,7 @@ import {
28
28
  } from "./window-panel-actions";
29
29
  import { saveWindowPanels } from "./window-panel-persistence";
30
30
  import { useWindowStore } from "@/components/floating-window/window-store";
31
+ import { tabSessionId } from "@/lib/tab-session-id";
31
32
  import {
32
33
  makeToggleDock,
33
34
  makeSetDockVisible,
@@ -509,10 +510,14 @@ export const usePanelStore = create<PanelStore>()((set, get) => {
509
510
  // (chat-tab only rewrites metadata, not the tab id), so deriveTabId's
510
511
  // chat:{provider}/{sessionId} never matches the live tab. Match on the real
511
512
  // sessionId instead so re-opening from history focuses the tab, not a dupe.
513
+ //
514
+ // A design tab hosts a chat session too, and it is the session's real home: opening a
515
+ // design session from history or a notification must focus its design tab, never
516
+ // start a plain chat that has left design mode.
512
517
  if (tabDef.type === "chat" && tabDef.metadata?.sessionId) {
513
518
  const sid = tabDef.metadata.sessionId;
514
519
  for (const p of Object.values(get().panels)) {
515
- const existing = p.tabs.find((t) => t.type === "chat" && t.metadata?.sessionId === sid);
520
+ const existing = p.tabs.find((t) => tabSessionId(t) === sid);
516
521
  if (existing) {
517
522
  rememberChatProvider(existing);
518
523
  set((s) => ({
@@ -528,6 +533,29 @@ export const usePanelStore = create<PanelStore>()((set, get) => {
528
533
  }
529
534
  }
530
535
 
536
+ // One tab per design, across ALL panels. Matched by slug *and* project, because the
537
+ // panels map also holds the keep-alive layouts of other projects, whose designs can
538
+ // share a slug with this one.
539
+ if (tabDef.type === "design") {
540
+ const slug = tabDef.metadata?.designSlug;
541
+ const project = tabDef.projectId ?? tabDef.metadata?.projectName;
542
+ for (const p of Object.values(get().panels)) {
543
+ const existing = p.tabs.find((t) => t.type === "design" && t.metadata?.designSlug === slug
544
+ && (t.projectId ?? t.metadata?.projectName) === project);
545
+ if (existing) {
546
+ set((s) => ({
547
+ focusedPanelId: focusAfterActivate(p.id),
548
+ panels: {
549
+ ...s.panels,
550
+ [p.id]: { ...p, tabs: stampActive(p.tabs, existing.id), activeTabId: existing.id, tabHistory: pushHistory(p.tabHistory, existing.id) },
551
+ },
552
+ }));
553
+ persist();
554
+ return existing.id;
555
+ }
556
+ }
557
+ }
558
+
531
559
  // Singleton check — focus existing across ALL panels
532
560
  if (SINGLETON_TYPES.has(tabDef.type)) {
533
561
  for (const p of Object.values(get().panels)) {
@@ -41,8 +41,12 @@ export const DOCK_ALLOWED_TAB_TYPES = new Set<TabType>(["terminal", "system-moni
41
41
  * Single source for both enforcement points: the action that performs the detach, and the
42
42
  * context-menu item that offers it. Split across two files, adding a window kind meant
43
43
  * remembering both, and one of them was always the one that got forgotten.
44
+ *
45
+ * `design` is here for a different reason: its canvas accepts bridge messages only from an
46
+ * iframe whose parent is the main window, and a pop-out would make the iframe's parent the
47
+ * picture-in-picture window instead.
44
48
  */
45
- export const NON_POPPABLE_TAB_TYPES = new Set<TabType>(["system-monitor", "settings", "problems"]);
49
+ export const NON_POPPABLE_TAB_TYPES = new Set<TabType>(["system-monitor", "settings", "problems", "design"]);
46
50
 
47
51
  /**
48
52
  * Prefix of the reserved panel IDs that host tabs detached into a floating window.
@@ -232,6 +236,9 @@ export function deriveTabId(type: TabType, metadata?: Record<string, unknown>):
232
236
  return "problems";
233
237
  case "group":
234
238
  return `group:${metadata?.groupId ?? "unknown"}`;
239
+ // One tab per design: the chat, the canvas and its history all belong to the design.
240
+ case "design":
241
+ return `design:${metadata?.designSlug ?? "unknown"}`;
235
242
  default:
236
243
  return `${type}:${randomId()}`;
237
244
  }