@hienlh/ppm 0.23.13 → 0.23.15

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 (1218) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/CLAUDE.md +19 -4
  3. package/THIRD-PARTY-NOTICES.md +1 -1
  4. package/assets/skills/ppm/SKILL.md +3 -2
  5. package/assets/skills/ppm/references/cli-reference.md +4 -4
  6. package/assets/skills/ppm/references/common-tasks.md +6 -0
  7. package/assets/skills/ppm/references/http-api.md +13 -1
  8. package/bun.lock +15 -0
  9. package/dist/web/assets/accounts-settings-section-B5YXy0vd.js +1 -0
  10. package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.br +0 -0
  11. package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.gz +0 -0
  12. package/dist/web/assets/adaptive-context-menu-C4jNSORA.js +1 -0
  13. package/dist/web/assets/adaptive-context-menu-C4jNSORA.js.br +0 -0
  14. package/dist/web/assets/adaptive-context-menu-C4jNSORA.js.gz +0 -0
  15. package/dist/web/assets/agent-session-sheet-Bj42PwCK.js +2 -0
  16. package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.br +0 -0
  17. package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.gz +0 -0
  18. package/dist/web/assets/agent-session-sheet-store-BAfLnsLX.js +1 -0
  19. package/dist/web/assets/agent-session-window-content-LqL6fVPU.js +1 -0
  20. package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.br +0 -0
  21. package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.gz +0 -0
  22. package/dist/web/assets/ai-resource-editor-jVv2nvAG.js +1 -0
  23. package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.br +0 -0
  24. package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.gz +0 -0
  25. package/dist/web/assets/ai-settings-section-C9Q-v8fY.js +1 -0
  26. package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.br +0 -0
  27. package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.gz +0 -0
  28. package/dist/web/assets/ai-settings-section-CN5BR1ZZ.js +1 -0
  29. package/dist/web/assets/android-tab-CwqiuEZP.js +2 -0
  30. package/dist/web/assets/android-tab-CwqiuEZP.js.br +0 -0
  31. package/dist/web/assets/android-tab-CwqiuEZP.js.gz +0 -0
  32. package/dist/web/assets/api-client-xQDlhUTu.js +1 -0
  33. package/dist/web/assets/api-client-xQDlhUTu.js.br +0 -0
  34. package/dist/web/assets/api-client-xQDlhUTu.js.gz +0 -0
  35. package/dist/web/assets/api-client-xR05zj6r.js +1 -0
  36. package/dist/web/assets/api-settings-VAi0LpIJ.js +1 -0
  37. package/dist/web/assets/api-settings-vmIRFNwZ.js +1 -0
  38. package/dist/web/assets/api-settings-vmIRFNwZ.js.br +0 -0
  39. package/dist/web/assets/api-settings-vmIRFNwZ.js.gz +0 -0
  40. package/dist/web/assets/api-themes-CaXofG7d.js +1 -0
  41. package/dist/web/assets/appearance-settings-section-D0JIfiRx.js +1 -0
  42. package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.br +0 -0
  43. package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.gz +0 -0
  44. package/dist/web/assets/apps-panel-Cz_KJ37M.js +1 -0
  45. package/dist/web/assets/apps-panel-Cz_KJ37M.js.br +0 -0
  46. package/dist/web/assets/apps-panel-Cz_KJ37M.js.gz +0 -0
  47. package/dist/web/assets/audio-preview-Dq7qZ_6i.js +1 -0
  48. package/dist/web/assets/audio-preview-Dq7qZ_6i.js.br +0 -0
  49. package/dist/web/assets/audio-preview-Dq7qZ_6i.js.gz +0 -0
  50. package/dist/web/assets/branch-review-tab-C3QNpsm7.js +1 -0
  51. package/dist/web/assets/branch-review-tab-C3QNpsm7.js.br +0 -0
  52. package/dist/web/assets/branch-review-tab-C3QNpsm7.js.gz +0 -0
  53. package/dist/web/assets/button-C9ZXWb3b.js +1 -0
  54. package/dist/web/assets/button-C9ZXWb3b.js.br +0 -0
  55. package/dist/web/assets/button-C9ZXWb3b.js.gz +0 -0
  56. package/dist/web/assets/chat-preparation-cache-190LLyy7.js +1 -0
  57. package/dist/web/assets/chat-preparation-cache-190LLyy7.js.br +0 -0
  58. package/dist/web/assets/chat-preparation-cache-190LLyy7.js.gz +0 -0
  59. package/dist/web/assets/chat-tab-D14CUl0J.js +1 -0
  60. package/dist/web/assets/chat-tab-D14CUl0J.js.br +0 -0
  61. package/dist/web/assets/chat-tab-D14CUl0J.js.gz +0 -0
  62. package/dist/web/assets/chat-tab-D8iAVZKV.js +16 -0
  63. package/dist/web/assets/chat-tab-D8iAVZKV.js.br +0 -0
  64. package/dist/web/assets/chat-tab-D8iAVZKV.js.gz +0 -0
  65. package/dist/web/assets/code-editor-B7gbH4-x.js +10 -0
  66. package/dist/web/assets/code-editor-B7gbH4-x.js.br +0 -0
  67. package/dist/web/assets/code-editor-B7gbH4-x.js.gz +0 -0
  68. package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js +1 -0
  69. package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js.br +0 -0
  70. package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js.gz +0 -0
  71. package/dist/web/assets/conflict-editor-ktOkrODA.js +19 -0
  72. package/dist/web/assets/conflict-editor-ktOkrODA.js.br +0 -0
  73. package/dist/web/assets/conflict-editor-ktOkrODA.js.gz +0 -0
  74. package/dist/web/assets/connection-form-tab-CxvExR7T.js +4 -0
  75. package/dist/web/assets/connection-form-tab-CxvExR7T.js.br +0 -0
  76. package/dist/web/assets/connection-form-tab-CxvExR7T.js.gz +0 -0
  77. package/dist/web/assets/context-menu-BCuZYfWC.js +1 -0
  78. package/dist/web/assets/context-menu-BCuZYfWC.js.br +0 -0
  79. package/dist/web/assets/context-menu-BCuZYfWC.js.gz +0 -0
  80. package/dist/web/assets/createLucideIcon-D9_fdOKS.js +1 -0
  81. package/dist/web/assets/createLucideIcon-D9_fdOKS.js.br +0 -0
  82. package/dist/web/assets/createLucideIcon-D9_fdOKS.js.gz +0 -0
  83. package/dist/web/assets/csv-preview-CBDMTEsF.js +10 -0
  84. package/dist/web/assets/csv-preview-CBDMTEsF.js.br +0 -0
  85. package/dist/web/assets/csv-preview-CBDMTEsF.js.gz +0 -0
  86. package/dist/web/assets/database-drivers-section-DJvU6bf5.js +1 -0
  87. package/dist/web/assets/database-drivers-section-DJvU6bf5.js.br +0 -0
  88. package/dist/web/assets/database-drivers-section-DJvU6bf5.js.gz +0 -0
  89. package/dist/web/assets/db-ai-tools-CVbbW_MZ.js +1 -0
  90. package/dist/web/assets/db-ai-tools-CVbbW_MZ.js.br +0 -0
  91. package/dist/web/assets/db-ai-tools-CVbbW_MZ.js.gz +0 -0
  92. package/dist/web/assets/db-explorer-store-BmpvDHz6.js +1 -0
  93. package/dist/web/assets/db-explorer-store-BmpvDHz6.js.br +0 -0
  94. package/dist/web/assets/db-explorer-store-BmpvDHz6.js.gz +0 -0
  95. package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js +1 -0
  96. package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js.br +0 -0
  97. package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js.gz +0 -0
  98. package/dist/web/assets/db-tab-parts-BgVpKbi6.js +1 -0
  99. package/dist/web/assets/db-tab-parts-BgVpKbi6.js.br +0 -0
  100. package/dist/web/assets/db-tab-parts-BgVpKbi6.js.gz +0 -0
  101. package/dist/web/assets/db-types-CNhENouW.js +1 -0
  102. package/dist/web/assets/design-canvas-check-BIHc2d_k.js +1 -0
  103. package/dist/web/assets/design-canvas-check-BIHc2d_k.js.br +0 -0
  104. package/dist/web/assets/design-canvas-check-BIHc2d_k.js.gz +0 -0
  105. package/dist/web/assets/design-export-client-CJ3w7Zrk.js +1 -0
  106. package/dist/web/assets/design-export-client-CJ3w7Zrk.js.br +0 -0
  107. package/dist/web/assets/design-export-client-CJ3w7Zrk.js.gz +0 -0
  108. package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js +1 -0
  109. package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js.br +0 -0
  110. package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js.gz +0 -0
  111. package/dist/web/assets/design-settings-section-DPGw61pY.js +2 -0
  112. package/dist/web/assets/design-settings-section-DPGw61pY.js.br +0 -0
  113. package/dist/web/assets/design-settings-section-DPGw61pY.js.gz +0 -0
  114. package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js +3 -0
  115. package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js.br +0 -0
  116. package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js.gz +0 -0
  117. package/dist/web/assets/design-tab-BiCqHNl3.js +57 -0
  118. package/dist/web/assets/design-tab-BiCqHNl3.js.br +0 -0
  119. package/dist/web/assets/design-tab-BiCqHNl3.js.gz +0 -0
  120. package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js +1 -0
  121. package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.br +0 -0
  122. package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.gz +0 -0
  123. package/dist/web/assets/dialog-Dn_2tuYa.js +1 -0
  124. package/dist/web/assets/dialog-Dn_2tuYa.js.br +0 -0
  125. package/dist/web/assets/dialog-Dn_2tuYa.js.gz +0 -0
  126. package/dist/web/assets/diff-viewer-CLAvyqVG.js +4 -0
  127. package/dist/web/assets/diff-viewer-CLAvyqVG.js.br +0 -0
  128. package/dist/web/assets/diff-viewer-CLAvyqVG.js.gz +0 -0
  129. package/dist/web/assets/docx-preview-XSkD2IL6.js +12 -0
  130. package/dist/web/assets/docx-preview-XSkD2IL6.js.br +0 -0
  131. package/dist/web/assets/docx-preview-XSkD2IL6.js.gz +0 -0
  132. package/dist/web/assets/dropdown-menu-BQidk_OJ.js +1 -0
  133. package/dist/web/assets/dropdown-menu-BQidk_OJ.js.br +0 -0
  134. package/dist/web/assets/dropdown-menu-BQidk_OJ.js.gz +0 -0
  135. package/dist/web/assets/edit-diff-preview-DyWUMlkI.js +7 -0
  136. package/dist/web/assets/edit-diff-preview-DyWUMlkI.js.br +0 -0
  137. package/dist/web/assets/edit-diff-preview-DyWUMlkI.js.gz +0 -0
  138. package/dist/web/assets/editor-dialog-cQvqVZAR.js +1 -0
  139. package/dist/web/assets/editor-dialog-cQvqVZAR.js.br +0 -0
  140. package/dist/web/assets/editor-dialog-cQvqVZAR.js.gz +0 -0
  141. package/dist/web/assets/editor-language-service-6-7mS6_9.js +1 -0
  142. package/dist/web/assets/editor-language-service-6-7mS6_9.js.br +0 -0
  143. package/dist/web/assets/editor-language-service-6-7mS6_9.js.gz +0 -0
  144. package/dist/web/assets/explorer-body-BlGDPmNa.js +2 -0
  145. package/dist/web/assets/explorer-body-BlGDPmNa.js.br +0 -0
  146. package/dist/web/assets/explorer-body-BlGDPmNa.js.gz +0 -0
  147. package/dist/web/assets/explorer-model-BtJN4MZ9.js +1 -0
  148. package/dist/web/assets/explorer-model-BtJN4MZ9.js.br +0 -0
  149. package/dist/web/assets/explorer-model-BtJN4MZ9.js.gz +0 -0
  150. package/dist/web/assets/explorer-window-content-BLWY8GJ_.js +1 -0
  151. package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.br +0 -0
  152. package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.gz +0 -0
  153. package/dist/web/assets/extension-manager-section-NSEt5f4z.js +1 -0
  154. package/dist/web/assets/extension-manager-section-NSEt5f4z.js.br +0 -0
  155. package/dist/web/assets/extension-manager-section-NSEt5f4z.js.gz +0 -0
  156. package/dist/web/assets/extension-webview-BkAEBWin.js +12 -0
  157. package/dist/web/assets/extension-webview-BkAEBWin.js.br +0 -0
  158. package/dist/web/assets/extension-webview-BkAEBWin.js.gz +0 -0
  159. package/dist/web/assets/file-diff-CcDhJkXB.js +1 -0
  160. package/dist/web/assets/file-icons-JInFtBVl.js +1 -0
  161. package/dist/web/assets/file-icons-JInFtBVl.js.br +0 -0
  162. package/dist/web/assets/file-icons-JInFtBVl.js.gz +0 -0
  163. package/dist/web/assets/file-store-BQ41vIs5.js +1 -0
  164. package/dist/web/assets/file-store-BQ41vIs5.js.br +0 -0
  165. package/dist/web/assets/file-store-BQ41vIs5.js.gz +0 -0
  166. package/dist/web/assets/files-settings-section-Bq7liJ_r.js +1 -0
  167. package/dist/web/assets/files-settings-section-Bq7liJ_r.js.br +0 -0
  168. package/dist/web/assets/files-settings-section-Bq7liJ_r.js.gz +0 -0
  169. package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js +1 -0
  170. package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js.br +0 -0
  171. package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js.gz +0 -0
  172. package/dist/web/assets/format-file-meta-DdYtk07C.js +1 -0
  173. package/dist/web/assets/format-file-meta-DdYtk07C.js.br +0 -0
  174. package/dist/web/assets/format-file-meta-DdYtk07C.js.gz +0 -0
  175. package/dist/web/assets/fs-api-CFtQzsIJ.js +1 -0
  176. package/dist/web/assets/fs-api-CFtQzsIJ.js.br +0 -0
  177. package/dist/web/assets/fs-api-CFtQzsIJ.js.gz +0 -0
  178. package/dist/web/assets/general-settings-section-DvHROAMa.js +1 -0
  179. package/dist/web/assets/general-settings-section-DvHROAMa.js.br +0 -0
  180. package/dist/web/assets/general-settings-section-DvHROAMa.js.gz +0 -0
  181. package/dist/web/assets/git-commit-horizontal-BPdj2L1i.js +1 -0
  182. package/dist/web/assets/git-log-panel-Cu9kK48H.js +1 -0
  183. package/dist/web/assets/git-log-panel-Cu9kK48H.js.br +0 -0
  184. package/dist/web/assets/git-log-panel-Cu9kK48H.js.gz +0 -0
  185. package/dist/web/assets/git-repo-store-CKB5fdNP.js +1 -0
  186. package/dist/web/assets/git-repo-store-CKB5fdNP.js.br +0 -0
  187. package/dist/web/assets/git-repo-store-CKB5fdNP.js.gz +0 -0
  188. package/dist/web/assets/git-review-tab-B_JT649W.js +3 -0
  189. package/dist/web/assets/git-review-tab-B_JT649W.js.br +0 -0
  190. package/dist/web/assets/git-review-tab-B_JT649W.js.gz +0 -0
  191. package/dist/web/assets/glide-data-grid-BlposOph.js +177 -0
  192. package/dist/web/assets/glide-data-grid-BlposOph.js.br +0 -0
  193. package/dist/web/assets/glide-data-grid-BlposOph.js.gz +0 -0
  194. package/dist/web/assets/grid-save-dialog-B0d0qhnN.js +2 -0
  195. package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.br +0 -0
  196. package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.gz +0 -0
  197. package/dist/web/assets/group-chat-tab-jirUsGm-.js +1 -0
  198. package/dist/web/assets/group-chat-tab-jirUsGm-.js.br +0 -0
  199. package/dist/web/assets/group-chat-tab-jirUsGm-.js.gz +0 -0
  200. package/dist/web/assets/html-preview-loads-CMWBC-iv.js +1 -0
  201. package/dist/web/assets/icons-BwyIKaTT.js +1 -0
  202. package/dist/web/assets/icons-BwyIKaTT.js.br +0 -0
  203. package/dist/web/assets/icons-BwyIKaTT.js.gz +0 -0
  204. package/dist/web/assets/image-preview-gOBK9zED.js +1 -0
  205. package/dist/web/assets/impexp-tab-HJVcOTYJ.js +1 -0
  206. package/dist/web/assets/impexp-tab-HJVcOTYJ.js.br +0 -0
  207. package/dist/web/assets/impexp-tab-HJVcOTYJ.js.gz +0 -0
  208. package/dist/web/assets/index-DLB3j_P0.js +59 -0
  209. package/dist/web/assets/index-DLB3j_P0.js.br +0 -0
  210. package/dist/web/assets/index-DLB3j_P0.js.gz +0 -0
  211. package/dist/web/assets/index-M3DUzop8.css +1 -0
  212. package/dist/web/assets/index-M3DUzop8.css.br +0 -0
  213. package/dist/web/assets/index-M3DUzop8.css.gz +0 -0
  214. package/dist/web/assets/input-C3oVNCMq.js +1 -0
  215. package/dist/web/assets/jira-watcher-section-EQvdnETB.js +1 -0
  216. package/dist/web/assets/keybindings-store-CEy-Sdcc.js +1 -0
  217. package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js +1 -0
  218. package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.br +0 -0
  219. package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.gz +0 -0
  220. package/dist/web/assets/language-servers-section-DOcZ72FJ.js +2 -0
  221. package/dist/web/assets/language-servers-section-DOcZ72FJ.js.br +0 -0
  222. package/dist/web/assets/language-servers-section-DOcZ72FJ.js.gz +0 -0
  223. package/dist/web/assets/lib-5Chotbwm.js +2 -0
  224. package/dist/web/assets/lib-5Chotbwm.js.br +0 -0
  225. package/dist/web/assets/lib-5Chotbwm.js.gz +0 -0
  226. package/dist/web/assets/logs-app-C7n9GSCn.js +13 -0
  227. package/dist/web/assets/logs-app-C7n9GSCn.js.br +0 -0
  228. package/dist/web/assets/logs-app-C7n9GSCn.js.gz +0 -0
  229. package/dist/web/assets/logs-tab-CSOiexvx.js +1 -0
  230. package/dist/web/assets/logs-window-content-C4Qs6-0q.js +1 -0
  231. package/dist/web/assets/lsp-client-DpYmPhXX.js +1 -0
  232. package/dist/web/assets/lsp-client-DpYmPhXX.js.br +0 -0
  233. package/dist/web/assets/lsp-client-DpYmPhXX.js.gz +0 -0
  234. package/dist/web/assets/markdown-renderer-CtEl6qAt.js +4 -0
  235. package/dist/web/assets/markdown-renderer-CtEl6qAt.js.br +0 -0
  236. package/dist/web/assets/markdown-renderer-CtEl6qAt.js.gz +0 -0
  237. package/dist/web/assets/markdown-renderer-Df3r-CCb.js +1 -0
  238. package/dist/web/assets/media-url-Cn2yRAxP.js +1 -0
  239. package/dist/web/assets/metric-chart-canvas-DEW16Su8.js +1 -0
  240. package/dist/web/assets/metric-chart-canvas-DEW16Su8.js.br +0 -0
  241. package/dist/web/assets/metric-chart-canvas-DEW16Su8.js.gz +0 -0
  242. package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js +1 -0
  243. package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js.br +0 -0
  244. package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js.gz +0 -0
  245. package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js +1 -0
  246. package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.br +0 -0
  247. package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.gz +0 -0
  248. package/dist/web/assets/new-design-dialog-DgztQK5R.js +1 -0
  249. package/dist/web/assets/new-design-dialog-DgztQK5R.js.br +0 -0
  250. package/dist/web/assets/new-design-dialog-DgztQK5R.js.gz +0 -0
  251. package/dist/web/assets/notification-store-B92dvP_u.js +1 -0
  252. package/dist/web/assets/notifications-settings-section-JiGvaCFx.js +1 -0
  253. package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.br +0 -0
  254. package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.gz +0 -0
  255. package/dist/web/assets/onboarding-entry-eehqBvyM.js +1 -0
  256. package/dist/web/assets/onboarding-entry-eehqBvyM.js.br +0 -0
  257. package/dist/web/assets/onboarding-entry-eehqBvyM.js.gz +0 -0
  258. package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js +1 -0
  259. package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js.br +0 -0
  260. package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js.gz +0 -0
  261. package/dist/web/assets/open-db-tabs-CtWIWHOa.js +1 -0
  262. package/dist/web/assets/open-db-tabs-CtWIWHOa.js.br +0 -0
  263. package/dist/web/assets/open-db-tabs-CtWIWHOa.js.gz +0 -0
  264. package/dist/web/assets/open-settings-EXR4zoZG.js +1 -0
  265. package/dist/web/assets/overview-panel-DEGF2DmZ.js +1 -0
  266. package/dist/web/assets/overview-panel-DEGF2DmZ.js.br +0 -0
  267. package/dist/web/assets/overview-panel-DEGF2DmZ.js.gz +0 -0
  268. package/dist/web/assets/panel-store-BJhazigC.js +1 -0
  269. package/dist/web/assets/panel-store-BJhazigC.js.br +0 -0
  270. package/dist/web/assets/panel-store-BJhazigC.js.gz +0 -0
  271. package/dist/web/assets/patch-tab-metadata-C92YkrRX.js +1 -0
  272. package/dist/web/assets/pdf-preview-C9gMtv2a.js +1 -0
  273. package/dist/web/assets/pdf-preview-C9gMtv2a.js.br +0 -0
  274. package/dist/web/assets/pdf-preview-C9gMtv2a.js.gz +0 -0
  275. package/dist/web/assets/performance-panel-TkwfKIZa.js +3 -0
  276. package/dist/web/assets/performance-panel-TkwfKIZa.js.br +0 -0
  277. package/dist/web/assets/performance-panel-TkwfKIZa.js.gz +0 -0
  278. package/dist/web/assets/portal-container-context-NBi-KGK0.js +1 -0
  279. package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js +1 -0
  280. package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.br +0 -0
  281. package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.gz +0 -0
  282. package/dist/web/assets/pptx-export-B2wCBWlV.js +111 -0
  283. package/dist/web/assets/pptx-export-B2wCBWlV.js.br +0 -0
  284. package/dist/web/assets/pptx-export-B2wCBWlV.js.gz +0 -0
  285. package/dist/web/assets/problems-panel-CDzwSJn6.js +1 -0
  286. package/dist/web/assets/problems-panel-CDzwSJn6.js.br +0 -0
  287. package/dist/web/assets/problems-panel-CDzwSJn6.js.gz +0 -0
  288. package/dist/web/assets/process-row-format-CytRH7g2.js +1 -0
  289. package/dist/web/assets/process-table-C_B39GHm.js +1 -0
  290. package/dist/web/assets/process-table-C_B39GHm.js.br +0 -0
  291. package/dist/web/assets/process-table-C_B39GHm.js.gz +0 -0
  292. package/dist/web/assets/project-framework-store-DwLxaRan.js +1 -0
  293. package/dist/web/assets/project-store-BLGl9IAO.js +1 -0
  294. package/dist/web/assets/project-store-BLGl9IAO.js.br +0 -0
  295. package/dist/web/assets/project-store-BLGl9IAO.js.gz +0 -0
  296. package/dist/web/assets/proxy-settings-section-CvaOvYIv.js +1 -0
  297. package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.br +0 -0
  298. package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.gz +0 -0
  299. package/dist/web/assets/query-audit-section-D_WDp1m-.js +1 -0
  300. package/dist/web/assets/query-audit-section-D_WDp1m-.js.br +0 -0
  301. package/dist/web/assets/query-audit-section-D_WDp1m-.js.gz +0 -0
  302. package/dist/web/assets/query-tab-B8aMpAbI.js +22 -0
  303. package/dist/web/assets/query-tab-B8aMpAbI.js.br +0 -0
  304. package/dist/web/assets/query-tab-B8aMpAbI.js.gz +0 -0
  305. package/dist/web/assets/react-BZ0kba1-.js +1 -0
  306. package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js +1 -0
  307. package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.br +0 -0
  308. package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.gz +0 -0
  309. package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js +1 -0
  310. package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.br +0 -0
  311. package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.gz +0 -0
  312. package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js +2 -0
  313. package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.br +0 -0
  314. package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.gz +0 -0
  315. package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js +1 -0
  316. package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.br +0 -0
  317. package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.gz +0 -0
  318. package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js +1 -0
  319. package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.br +0 -0
  320. package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.gz +0 -0
  321. package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js +1 -0
  322. package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js.br +0 -0
  323. package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js.gz +0 -0
  324. package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js +1 -0
  325. package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.br +0 -0
  326. package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.gz +0 -0
  327. package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js +1 -0
  328. package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.br +0 -0
  329. package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.gz +0 -0
  330. package/dist/web/assets/review-code-B4osj0k1.js +5 -0
  331. package/dist/web/assets/review-code-B4osj0k1.js.br +0 -0
  332. package/dist/web/assets/review-code-B4osj0k1.js.gz +0 -0
  333. package/dist/web/assets/run-in-terminal-button-m3i-Hcou.js +1 -0
  334. package/dist/web/assets/run-in-terminal-ujoc25vj.js +1 -0
  335. package/dist/web/assets/save-as-dialog-DpXv_f1d.js +1 -0
  336. package/dist/web/assets/save-as-dialog-DpXv_f1d.js.br +5 -0
  337. package/dist/web/assets/save-as-dialog-DpXv_f1d.js.gz +0 -0
  338. package/dist/web/assets/schedules-settings-section-BbaPbc28.js +1 -0
  339. package/dist/web/assets/schedules-settings-section-BbaPbc28.js.br +0 -0
  340. package/dist/web/assets/schedules-settings-section-BbaPbc28.js.gz +0 -0
  341. package/dist/web/assets/scroll-area-DOlQJGZp.js +1 -0
  342. package/dist/web/assets/scroll-area-DOlQJGZp.js.br +0 -0
  343. package/dist/web/assets/scroll-area-DOlQJGZp.js.gz +0 -0
  344. package/dist/web/assets/send-to-chat-CWV1qd3c.js +1 -0
  345. package/dist/web/assets/send-to-chat-CWV1qd3c.js.br +0 -0
  346. package/dist/web/assets/send-to-chat-CWV1qd3c.js.gz +0 -0
  347. package/dist/web/assets/separator-DmU9aJwq.js +1 -0
  348. package/dist/web/assets/services-panel-CZQOrvth.js +1 -0
  349. package/dist/web/assets/services-panel-CZQOrvth.js.br +0 -0
  350. package/dist/web/assets/services-panel-CZQOrvth.js.gz +0 -0
  351. package/dist/web/assets/session-changes-bar-VfS2sHuH.js +1 -0
  352. package/dist/web/assets/session-changes-bar-VfS2sHuH.js.br +0 -0
  353. package/dist/web/assets/session-changes-bar-VfS2sHuH.js.gz +0 -0
  354. package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js +1 -0
  355. package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js.br +0 -0
  356. package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js.gz +0 -0
  357. package/dist/web/assets/session-review-tab-Aq3FEooH.js +6 -0
  358. package/dist/web/assets/session-review-tab-Aq3FEooH.js.br +0 -0
  359. package/dist/web/assets/session-review-tab-Aq3FEooH.js.gz +0 -0
  360. package/dist/web/assets/settings-body-vXbOWchN.js +1 -0
  361. package/dist/web/assets/settings-body-vXbOWchN.js.br +0 -0
  362. package/dist/web/assets/settings-body-vXbOWchN.js.gz +0 -0
  363. package/dist/web/assets/settings-categories-Ajj4ui27.js +1 -0
  364. package/dist/web/assets/settings-categories-Ajj4ui27.js.br +0 -0
  365. package/dist/web/assets/settings-categories-Ajj4ui27.js.gz +0 -0
  366. package/dist/web/assets/settings-rows-DD7Gxmst.js +1 -0
  367. package/dist/web/assets/settings-rows-DD7Gxmst.js.br +0 -0
  368. package/dist/web/assets/settings-rows-DD7Gxmst.js.gz +0 -0
  369. package/dist/web/assets/settings-section-content-CVtvJ6ze.js +1 -0
  370. package/dist/web/assets/settings-section-content-DkUJFop6.js +2 -0
  371. package/dist/web/assets/settings-section-content-DkUJFop6.js.br +0 -0
  372. package/dist/web/assets/settings-section-content-DkUJFop6.js.gz +0 -0
  373. package/dist/web/assets/settings-store-B4mLp19V.js +2 -0
  374. package/dist/web/assets/settings-store-B4mLp19V.js.br +0 -0
  375. package/dist/web/assets/settings-store-B4mLp19V.js.gz +0 -0
  376. package/dist/web/assets/settings-tab-Cdv9_OIe.js +1 -0
  377. package/dist/web/assets/settings-window-content-DLa6Ph4u.js +1 -0
  378. package/dist/web/assets/share-BV49OI6q.css +2 -0
  379. package/dist/web/assets/share-BV49OI6q.css.br +0 -0
  380. package/dist/web/assets/share-BV49OI6q.css.gz +0 -0
  381. package/dist/web/assets/share-D5ufGmNI.js +9 -0
  382. package/dist/web/assets/share-D5ufGmNI.js.br +0 -0
  383. package/dist/web/assets/share-D5ufGmNI.js.gz +0 -0
  384. package/dist/web/assets/slash-command-picker-lILYDfK3.js +1 -0
  385. package/dist/web/assets/slash-command-picker-lILYDfK3.js.br +0 -0
  386. package/dist/web/assets/slash-command-picker-lILYDfK3.js.gz +0 -0
  387. package/dist/web/assets/sortable-header-DwzTFLkG.js +1 -0
  388. package/dist/web/assets/sortable-header-DwzTFLkG.js.br +0 -0
  389. package/dist/web/assets/sortable-header-DwzTFLkG.js.gz +0 -0
  390. package/dist/web/assets/split-sql-statements-DcAeXbk_.js +5 -0
  391. package/dist/web/assets/split-sql-statements-DcAeXbk_.js.br +0 -0
  392. package/dist/web/assets/split-sql-statements-DcAeXbk_.js.gz +0 -0
  393. package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js +1 -0
  394. package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js.br +0 -0
  395. package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js.gz +0 -0
  396. package/dist/web/assets/sql-object-tab-Da42SMK5.js +1 -0
  397. package/dist/web/assets/sql-object-tab-Da42SMK5.js.br +0 -0
  398. package/dist/web/assets/sql-object-tab-Da42SMK5.js.gz +0 -0
  399. package/dist/web/assets/sqlite-viewer-V3SKNukY.js +1 -0
  400. package/dist/web/assets/sqlite-viewer-V3SKNukY.js.br +0 -0
  401. package/dist/web/assets/sqlite-viewer-V3SKNukY.js.gz +0 -0
  402. package/dist/web/assets/start-ellipsis-CU8GkxaV.js +1 -0
  403. package/dist/web/assets/structure-save-dialog-B635iyPI.js +1 -0
  404. package/dist/web/assets/structure-save-dialog-B635iyPI.js.br +0 -0
  405. package/dist/web/assets/structure-save-dialog-B635iyPI.js.gz +0 -0
  406. package/dist/web/assets/structure-tab-Co9d8ktU.js +3 -0
  407. package/dist/web/assets/structure-tab-Co9d8ktU.js.br +0 -0
  408. package/dist/web/assets/structure-tab-Co9d8ktU.js.gz +0 -0
  409. package/dist/web/assets/system-monitor-body-DC0j8RqP.js +2 -0
  410. package/dist/web/assets/system-monitor-body-DC0j8RqP.js.br +0 -0
  411. package/dist/web/assets/system-monitor-body-DC0j8RqP.js.gz +0 -0
  412. package/dist/web/assets/system-monitor-tab-DA8BcdXo.js +1 -0
  413. package/dist/web/assets/system-monitor-window-content-BiuLo8XW.js +1 -0
  414. package/dist/web/assets/tab-host-window-content-Crvt1r5F.js +1 -0
  415. package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.br +0 -0
  416. package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.gz +0 -0
  417. package/dist/web/assets/tab-store-D5I52eLN.js +1 -0
  418. package/dist/web/assets/table-tab-C2cYw7a0.js +2 -0
  419. package/dist/web/assets/table-tab-C2cYw7a0.js.br +0 -0
  420. package/dist/web/assets/table-tab-C2cYw7a0.js.gz +0 -0
  421. package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js +1 -0
  422. package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.br +0 -0
  423. package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.gz +0 -0
  424. package/dist/web/assets/terminal-tab-CrKxibGC.js +3 -0
  425. package/dist/web/assets/terminal-tab-CrKxibGC.js.br +0 -0
  426. package/dist/web/assets/terminal-tab-CrKxibGC.js.gz +0 -0
  427. package/dist/web/assets/tool-cards-BRto67jM.js +15 -0
  428. package/dist/web/assets/tool-cards-BRto67jM.js.br +0 -0
  429. package/dist/web/assets/tool-cards-BRto67jM.js.gz +0 -0
  430. package/dist/web/assets/tools-settings-section-DEvZsrxq.js +1 -0
  431. package/dist/web/assets/tools-settings-section-DEvZsrxq.js.br +0 -0
  432. package/dist/web/assets/tools-settings-section-DEvZsrxq.js.gz +0 -0
  433. package/dist/web/assets/use-at-most-wide-BHsrzvv3.js +1 -0
  434. package/dist/web/assets/use-blob-url-Clm7wbB_.js +1 -0
  435. package/dist/web/assets/use-db-driver-installed-anzWkGi5.js +1 -0
  436. package/dist/web/assets/use-db-read-BCYhIrJM.js +1 -0
  437. package/dist/web/assets/use-db-read-BCYhIrJM.js.br +0 -0
  438. package/dist/web/assets/use-db-read-BCYhIrJM.js.gz +0 -0
  439. package/dist/web/assets/use-db-tab-B8LjdDb7.js +1 -0
  440. package/dist/web/assets/use-db-tab-B8LjdDb7.js.br +0 -0
  441. package/dist/web/assets/use-db-tab-B8LjdDb7.js.gz +0 -0
  442. package/dist/web/assets/use-design-canvas-check-DBsLf1At.js +1 -0
  443. package/dist/web/assets/use-design-canvas-check-DBsLf1At.js.br +0 -0
  444. package/dist/web/assets/use-design-canvas-check-DBsLf1At.js.gz +0 -0
  445. package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js +1 -0
  446. package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js.br +0 -0
  447. package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js.gz +0 -0
  448. package/dist/web/assets/use-inline-blame-CRWJU6Rq.js +16 -0
  449. package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.br +0 -0
  450. package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.gz +0 -0
  451. package/dist/web/assets/use-is-mobile-VRV9eZy1.js +1 -0
  452. package/dist/web/assets/use-lsp-B-otjr-6.js +6 -0
  453. package/dist/web/assets/use-lsp-B-otjr-6.js.br +0 -0
  454. package/dist/web/assets/use-lsp-B-otjr-6.js.gz +0 -0
  455. package/dist/web/assets/use-monaco-theme-BiDXRJ4e.js +1 -0
  456. package/dist/web/assets/use-opener-focus-CDRKhHwX.js +1 -0
  457. package/dist/web/assets/use-process-kill-BW2UW0mZ.js +1 -0
  458. package/dist/web/assets/use-process-kill-BW2UW0mZ.js.br +0 -0
  459. package/dist/web/assets/use-process-kill-BW2UW0mZ.js.gz +0 -0
  460. package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js +4 -0
  461. package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.br +0 -0
  462. package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.gz +0 -0
  463. package/dist/web/assets/use-visual-viewport-MmugpRg-.js +1 -0
  464. package/dist/web/assets/use-websocket-n3Ud9vEA.js +1 -0
  465. package/dist/web/assets/vendor-markdown-C-P1aR4p.js +291 -0
  466. package/dist/web/assets/vendor-markdown-C-P1aR4p.js.br +0 -0
  467. package/dist/web/assets/vendor-markdown-C-P1aR4p.js.gz +0 -0
  468. package/dist/web/assets/vendor-ui-BTSIXzhZ.js +45 -0
  469. package/dist/web/assets/vendor-ui-BTSIXzhZ.js.br +0 -0
  470. package/dist/web/assets/vendor-ui-BTSIXzhZ.js.gz +0 -0
  471. package/dist/web/assets/video-preview-CjB6wesi.js +1 -0
  472. package/dist/web/assets/video-preview-CjB6wesi.js.br +0 -0
  473. package/dist/web/assets/video-preview-CjB6wesi.js.gz +0 -0
  474. package/dist/web/assets/voice-settings-section-C6Wb6q5o.js +1 -0
  475. package/dist/web/assets/voice-settings-section-C6Wb6q5o.js.br +0 -0
  476. package/dist/web/assets/voice-settings-section-C6Wb6q5o.js.gz +0 -0
  477. package/dist/web/assets/web-preview-tab-doNpegW3.js +1 -0
  478. package/dist/web/assets/web-preview-tab-doNpegW3.js.br +0 -0
  479. package/dist/web/assets/web-preview-tab-doNpegW3.js.gz +0 -0
  480. package/dist/web/assets/window-store-DqX_qmkQ.js +1 -0
  481. package/dist/web/assets/window-store-DqX_qmkQ.js.br +0 -0
  482. package/dist/web/assets/window-store-DqX_qmkQ.js.gz +0 -0
  483. package/dist/web/assets/ws-auth-CbF6GqxP.js +1 -0
  484. package/dist/web/design-share-page/index.html +18 -0
  485. package/dist/web/index.html +47 -47
  486. package/dist/web/index.html.br +0 -0
  487. package/dist/web/index.html.gz +0 -0
  488. package/dist/web/sw.js +1 -1
  489. package/dist/web/sw.js.br +0 -0
  490. package/dist/web/sw.js.gz +0 -0
  491. package/docs/architecture/ai-chat-and-providers.md +258 -26
  492. package/docs/architecture/data-and-storage.md +9 -3
  493. package/docs/architecture/workspace-and-ui.md +42 -5
  494. package/docs/project-roadmap.md +5 -0
  495. package/package.json +6 -2
  496. package/scripts/gen-product-icons.ts +1 -0
  497. package/src/cli/commands/db-cmd.ts +79 -1
  498. package/src/providers/claude-agent-sdk-query-options.ts +42 -10
  499. package/src/providers/claude-agent-sdk.ts +19 -6
  500. package/src/providers/codex-app-server/codex-provider.ts +9 -3
  501. package/src/providers/codex-app-server/codex-thread-params.ts +34 -4
  502. package/src/server/index.ts +17 -5
  503. package/src/server/middleware/access-log.ts +6 -3
  504. package/src/server/routes/accounts.ts +3 -2
  505. package/src/server/routes/chat-file-changes.ts +15 -1
  506. package/src/server/routes/chat.ts +92 -18
  507. package/src/server/routes/database-query.ts +14 -5
  508. package/src/server/routes/database.ts +14 -0
  509. package/src/server/routes/debug-crash.ts +30 -0
  510. package/src/server/routes/design-comments.ts +56 -7
  511. package/src/server/routes/design-share-address.ts +20 -0
  512. package/src/server/routes/design-share-guest-comments.ts +120 -0
  513. package/src/server/routes/design-share-guest-files.ts +99 -0
  514. package/src/server/routes/design-share-guest-shared.ts +95 -0
  515. package/src/server/routes/design-share-guest.ts +77 -0
  516. package/src/server/routes/design-shares.ts +90 -0
  517. package/src/server/routes/designs.ts +2 -0
  518. package/src/server/routes/settings.ts +12 -0
  519. package/src/server/routes/static.ts +10 -2
  520. package/src/server/ws/chat.ts +113 -39
  521. package/src/server/ws/global.ts +10 -8
  522. package/src/services/account.service.ts +57 -18
  523. package/src/services/chat.service.ts +16 -6
  524. package/src/services/db-ai-tools/db-ai-connections.ts +48 -0
  525. package/src/services/db-ai-tools/db-ai-format.ts +107 -0
  526. package/src/services/db-ai-tools/db-ai-run.ts +199 -0
  527. package/src/services/db-ai-tools/db-ai-target.ts +59 -0
  528. package/src/services/db-ai-tools/db-ai-tools-endpoint.ts +225 -0
  529. package/src/services/db-ai-tools/db-ai-tools-tokens.ts +33 -0
  530. package/src/services/db-ai-tools/db-ai-tools-tool.ts +131 -0
  531. package/src/services/db-ai-tools/db-approval-broker.ts +157 -0
  532. package/src/services/db.service.ts +25 -1
  533. package/src/services/design/bridge/bridge-picker.ts +15 -5
  534. package/src/services/design/bridge/guest-bridge.ts +19 -0
  535. package/src/services/design/comments/design-comment-element-context.ts +28 -6
  536. package/src/services/design/comments/design-comment-input.ts +47 -0
  537. package/src/services/design/comments/design-comment-views.ts +146 -0
  538. package/src/services/design/comments/design-comments-revision.ts +19 -0
  539. package/src/services/design/comments/design-comments-store.ts +82 -9
  540. package/src/services/design/design-comment-replies.service.ts +126 -0
  541. package/src/services/design/design-comments.service.ts +77 -34
  542. package/src/services/design/design-restore.service.ts +6 -2
  543. package/src/services/design/design-snapshots.service.ts +8 -2
  544. package/src/services/design/design-store.service.ts +7 -1
  545. package/src/services/design/design-write-rate-limit.ts +11 -17
  546. package/src/services/design/preview/design-guest-alias.ts +64 -0
  547. package/src/services/design/preview/design-preview-html.ts +16 -3
  548. package/src/services/design/preview/design-preview-scope.ts +29 -5
  549. package/src/services/design/share/design-share-address.ts +81 -0
  550. package/src/services/design/share/design-share-changed-files.ts +74 -0
  551. package/src/services/design/share/design-share-client-key.ts +72 -0
  552. package/src/services/design/share/design-share-code.ts +116 -0
  553. package/src/services/design/share/design-share-comments.service.ts +162 -0
  554. package/src/services/design/share/design-share-guest-link.ts +109 -0
  555. package/src/services/design/share/design-share-guest-page.ts +86 -0
  556. package/src/services/design/share/design-share-link-rules.ts +83 -0
  557. package/src/services/design/share/design-share-links-store.ts +157 -0
  558. package/src/services/design/share/design-share-links.service.ts +174 -0
  559. package/src/services/design/share/design-share-notifier.ts +192 -0
  560. package/src/services/design/share/design-share-rate-limit.ts +71 -0
  561. package/src/services/design/share/design-share-resolve.ts +31 -0
  562. package/src/services/mcp-http-endpoint.ts +23 -10
  563. package/src/services/mysql.service.ts +6 -2
  564. package/src/services/notification-format.ts +10 -2
  565. package/src/services/notification-link.ts +1 -1
  566. package/src/services/notification.service.ts +47 -15
  567. package/src/services/ppm-password.ts +26 -0
  568. package/src/services/project-name-for-path.ts +18 -0
  569. package/src/services/query-audit/query-audit.service.ts +7 -4
  570. package/src/services/remote-desktop/access-unit-assembler.ts +11 -7
  571. package/src/services/remote-desktop/nal-splitter.ts +14 -1
  572. package/src/services/remote-desktop/remote-desktop-capture-wayland.ts +47 -21
  573. package/src/services/remote-desktop/remote-desktop-encoder-args.ts +5 -3
  574. package/src/services/session-file-baselines/session-file-baselines.service.ts +48 -0
  575. package/src/services/session-file-baselines/session-file-blame.ts +57 -24
  576. package/src/services/session-file-baselines/session-file-changes.service.ts +220 -22
  577. package/src/services/session-file-baselines/session-file-history.ts +5 -1
  578. package/src/services/session-file-baselines/session-file-writes.ts +28 -0
  579. package/src/services/sliding-window-limiter.ts +106 -0
  580. package/src/services/tab-tools-mcp/open-url-tool.ts +149 -0
  581. package/src/services/tab-tools-mcp/tab-open-broker.ts +12 -4
  582. package/src/services/tab-tools-mcp/tab-tools-mcp-endpoint.ts +66 -22
  583. package/src/services/tab-tools-mcp/tab-tools-mcp-tokens.ts +3 -1
  584. package/src/services/tab-tools-mcp/tab-tools-mcp-tool.ts +78 -6
  585. package/src/services/tab-tools-mcp/terminal-text.ts +45 -0
  586. package/src/services/tab-tools-mcp/terminal-tools.ts +297 -0
  587. package/src/services/terminal.service.ts +39 -4
  588. package/src/shared/db-ai-tools.ts +118 -0
  589. package/src/shared/db-query-script.ts +16 -0
  590. package/src/shared/design-comment-thread-types.ts +80 -0
  591. package/src/shared/design-comment-types.ts +53 -4
  592. package/src/shared/design-share-guest-types.ts +59 -0
  593. package/src/shared/design-share-types.ts +100 -0
  594. package/src/shared/notification-settings.ts +4 -3
  595. package/src/shared/ppm-tools.ts +39 -0
  596. package/src/shared/session-file-changes.ts +16 -0
  597. package/src/shared/tab-open-protocol.ts +50 -6
  598. package/src/shared/untrusted-text.ts +15 -1
  599. package/src/types/chat.ts +7 -1
  600. package/src/types/config.ts +5 -2
  601. package/src/types/database.ts +6 -0
  602. package/src/web/components/chat/chat-history-bar.tsx +10 -6
  603. package/src/web/components/chat/chat-tab.tsx +7 -1
  604. package/src/web/components/chat/db-execute-approval-card.tsx +100 -0
  605. package/src/web/components/chat/db-tool-card.tsx +42 -0
  606. package/src/web/components/chat/device-tool-card.tsx +45 -0
  607. package/src/web/components/chat/message-input.tsx +9 -6
  608. package/src/web/components/chat/message-list.tsx +6 -1
  609. package/src/web/components/chat/message-markdown.tsx +6 -3
  610. package/src/web/components/chat/message-user-bubble.tsx +2 -1
  611. package/src/web/components/chat/model-thinking-selector.tsx +6 -4
  612. package/src/web/components/chat/prompt-cache-chip.tsx +1 -1
  613. package/src/web/components/chat/running-agents-bar.tsx +164 -76
  614. package/src/web/components/chat/session-changes-bar.tsx +46 -13
  615. package/src/web/components/chat/tool-cards.tsx +29 -1
  616. package/src/web/components/chat/turn-change-rollup.tsx +8 -1
  617. package/src/web/components/chat/usage-badge.tsx +3 -3
  618. package/src/web/components/database/query/query-run-state.ts +11 -1
  619. package/src/web/components/database/query/query-tab.tsx +33 -7
  620. package/src/web/components/database/query/use-query-runner.ts +3 -0
  621. package/src/web/components/database/query/write-once-dialog.tsx +70 -0
  622. package/src/web/components/design/canvas/design-canvas-pane.tsx +5 -2
  623. package/src/web/components/design/comments/comment-author-label.tsx +23 -0
  624. package/src/web/components/design/comments/comment-composer.tsx +6 -14
  625. package/src/web/components/design/comments/comment-pins-overlay.tsx +8 -3
  626. package/src/web/components/design/comments/comment-thread-replies.tsx +82 -0
  627. package/src/web/components/design/comments/comment-thread-text-box.tsx +69 -0
  628. package/src/web/components/design/comments/comment-thread-view.tsx +115 -0
  629. package/src/web/components/design/comments/comments-panel.tsx +33 -10
  630. package/src/web/components/design/comments/comments-send-preview.tsx +20 -8
  631. package/src/web/components/design/comments/design-comments-layer.tsx +3 -1
  632. package/src/web/components/design/comments/use-comment-pins.ts +3 -0
  633. package/src/web/components/design/comments/use-design-comments-feature.ts +40 -25
  634. package/src/web/components/design/comments/use-design-comments.ts +44 -12
  635. package/src/web/components/design/design-split-layout.tsx +106 -10
  636. package/src/web/components/design/design-tab-context.ts +2 -0
  637. package/src/web/components/design/design-tab.tsx +5 -1
  638. package/src/web/components/design/design-toolbar.tsx +24 -4
  639. package/src/web/components/design/share/design-share-dialog.tsx +81 -0
  640. package/src/web/components/design/share/new-share-link-form.tsx +85 -0
  641. package/src/web/components/design/share/share-address-block.tsx +101 -0
  642. package/src/web/components/design/share/share-changed-files.tsx +30 -0
  643. package/src/web/components/design/share/share-expiry-picker.tsx +44 -0
  644. package/src/web/components/design/share/share-repin-panel.tsx +64 -0
  645. package/src/web/components/design/share/share-row-panel.tsx +35 -0
  646. package/src/web/components/design/share/share-version-picker.tsx +67 -0
  647. package/src/web/components/design/share/shared-link-action-panels.tsx +120 -0
  648. package/src/web/components/design/share/shared-link-row.tsx +131 -0
  649. package/src/web/components/design/share/shared-links-list.tsx +33 -0
  650. package/src/web/components/design/share/use-share-address.ts +74 -0
  651. package/src/web/components/design/share/use-share-links.ts +93 -0
  652. package/src/web/components/design/use-design-layout.ts +7 -4
  653. package/src/web/components/editor/diff-viewer.tsx +16 -12
  654. package/src/web/components/editor/docx-preview.tsx +7 -2
  655. package/src/web/components/floating-window/close-window.ts +32 -0
  656. package/src/web/components/floating-window/floating-window.tsx +65 -24
  657. package/src/web/components/floating-window/open-tab-in-pip.ts +3 -0
  658. package/src/web/components/floating-window/use-window-drag.ts +33 -7
  659. package/src/web/components/floating-window/use-window-meta.ts +138 -0
  660. package/src/web/components/floating-window/window-chrome-contract.ts +19 -2
  661. package/src/web/components/floating-window/window-dock-layout.ts +72 -0
  662. package/src/web/components/floating-window/window-dock-list.tsx +156 -0
  663. package/src/web/components/floating-window/window-dock.tsx +192 -0
  664. package/src/web/components/floating-window/window-geometry.ts +39 -1
  665. package/src/web/components/floating-window/window-layer.tsx +59 -23
  666. package/src/web/components/floating-window/window-persistence.ts +16 -3
  667. package/src/web/components/floating-window/window-store-types.ts +13 -2
  668. package/src/web/components/floating-window/window-store.ts +75 -8
  669. package/src/web/components/floating-window/window-title-identity.tsx +86 -0
  670. package/src/web/components/layout/status-bar.tsx +3 -0
  671. package/src/web/components/layout/tab-pop-out-menu-item.tsx +2 -2
  672. package/src/web/components/logs/open-logs.ts +0 -1
  673. package/src/web/components/os-explorer/actions/explorer-actions-upload.ts +2 -1
  674. package/src/web/components/os-explorer/skins/macos-window-chrome.tsx +17 -11
  675. package/src/web/components/os-explorer/skins/windows-window-chrome.tsx +14 -5
  676. package/src/web/components/remote-desktop/use-remote-desktop-readiness.ts +8 -3
  677. package/src/web/components/settings/accounts/account-add-dialog.tsx +25 -13
  678. package/src/web/components/settings/accounts/claude-accounts-section.tsx +3 -3
  679. package/src/web/components/settings/ai-settings-section.tsx +0 -20
  680. package/src/web/components/settings/design-settings-section.tsx +3 -0
  681. package/src/web/components/settings/design-window-setting.tsx +28 -0
  682. package/src/web/components/settings/settings-categories.ts +3 -0
  683. package/src/web/components/settings/settings-section-content.tsx +1 -0
  684. package/src/web/components/settings/tools-settings-section.tsx +120 -0
  685. package/src/web/components/shared/docx-html-sanitize.ts +59 -0
  686. package/src/web/components/shared/markdown-code-block.tsx +3 -1
  687. package/src/web/components/shared/markdown-renderer.tsx +15 -3
  688. package/src/web/components/shared/markdown-sanitize.ts +65 -0
  689. package/src/web/components/web-preview/web-preview-tab.tsx +6 -3
  690. package/src/web/design-share-page/index.html +17 -0
  691. package/src/web/design-share-page/main.tsx +11 -0
  692. package/src/web/design-share-page/share-api.ts +131 -0
  693. package/src/web/design-share-page/share-app.tsx +14 -0
  694. package/src/web/design-share-page/share-bottom-sheet.tsx +61 -0
  695. package/src/web/design-share-page/share-canvas.tsx +92 -0
  696. package/src/web/design-share-page/share-composer.tsx +104 -0
  697. package/src/web/design-share-page/share-entry.tsx +92 -0
  698. package/src/web/design-share-page/share-identity.ts +81 -0
  699. package/src/web/design-share-page/share-name-prompt.tsx +59 -0
  700. package/src/web/design-share-page/share-panel-content.tsx +57 -0
  701. package/src/web/design-share-page/share-pins-overlay.tsx +50 -0
  702. package/src/web/design-share-page/share-review.tsx +123 -0
  703. package/src/web/design-share-page/share-states.tsx +78 -0
  704. package/src/web/design-share-page/share-thread-model.ts +83 -0
  705. package/src/web/design-share-page/share-thread-view.tsx +61 -0
  706. package/src/web/design-share-page/share-threads-panel.tsx +103 -0
  707. package/src/web/design-share-page/share-toolbar.tsx +105 -0
  708. package/src/web/design-share-page/share-ui.ts +30 -0
  709. package/src/web/design-share-page/share.css +63 -0
  710. package/src/web/design-share-page/use-share-canvas.ts +51 -0
  711. package/src/web/design-share-page/use-share-info.ts +34 -0
  712. package/src/web/design-share-page/use-share-session.ts +75 -0
  713. package/src/web/design-share-page/use-share-threads.ts +139 -0
  714. package/src/web/hooks/use-chat.ts +5 -2
  715. package/src/web/hooks/use-design-session-redirect.ts +3 -2
  716. package/src/web/hooks/use-git-repo.ts +36 -16
  717. package/src/web/hooks/use-global-events.ts +4 -0
  718. package/src/web/hooks/use-inline-blame.ts +17 -11
  719. package/src/web/hooks/use-notification-clicks.ts +23 -5
  720. package/src/web/hooks/use-session-file-changes.ts +118 -41
  721. package/src/web/hooks/use-url-sync.ts +5 -4
  722. package/src/web/lib/api-settings.ts +2 -0
  723. package/src/web/lib/chat-attempt-lifecycle.ts +3 -1
  724. package/src/web/lib/db-tool-call.ts +57 -0
  725. package/src/web/lib/design/api-design-comments.ts +39 -9
  726. package/src/web/lib/design/api-design-shares.ts +47 -0
  727. package/src/web/lib/design/design-comments-prompt.ts +108 -23
  728. package/src/web/lib/design/design-layout-mode.ts +16 -1
  729. package/src/web/lib/design/design-share-address-state.ts +88 -0
  730. package/src/web/lib/design/design-share-expiry.ts +96 -0
  731. package/src/web/lib/design/design-share-link-status.ts +66 -0
  732. package/src/web/lib/design/design-view-prefs.ts +20 -1
  733. package/src/web/lib/design/open-design-tab.ts +54 -1
  734. package/src/web/lib/git-repo-scope.ts +60 -0
  735. package/src/web/lib/icons.generated.tsx +3 -1
  736. package/src/web/lib/model-display-name.ts +16 -0
  737. package/src/web/lib/open-ai-tab.ts +129 -19
  738. package/src/web/lib/running-agent-rows.ts +52 -0
  739. package/src/web/lib/session-file-changes-client.ts +6 -0
  740. package/src/web/lib/session-file-changes.ts +13 -0
  741. package/src/web/lib/tab-tool-call.ts +37 -1
  742. package/src/web/lib/utils.ts +4 -1
  743. package/src/web/stores/panel-store.ts +13 -1
  744. package/src/web/stores/panel-utils.ts +9 -4
  745. package/src/web/stores/settings-store.ts +14 -0
  746. package/src/web/stores/window-panel-actions.ts +21 -3
  747. package/src/web/stores/window-panel-persistence.ts +2 -1
  748. package/src/web/sw-notification-click.ts +12 -1
  749. package/templates/skill/SKILL.md.tmpl +2 -1
  750. package/templates/skill/common-tasks.md +6 -0
  751. package/vite.config.ts +10 -0
  752. package/vite.share.config.ts +43 -0
  753. package/dist/web/assets/accounts-settings-section-DU-lTifs.js +0 -1
  754. package/dist/web/assets/accounts-settings-section-DU-lTifs.js.br +0 -0
  755. package/dist/web/assets/accounts-settings-section-DU-lTifs.js.gz +0 -0
  756. package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js +0 -1
  757. package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js.br +0 -0
  758. package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js.gz +0 -0
  759. package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js +0 -2
  760. package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js.br +0 -0
  761. package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js.gz +0 -0
  762. package/dist/web/assets/agent-session-sheet-store-BoBrAw5i.js +0 -1
  763. package/dist/web/assets/agent-session-window-content-CB_uvabH.js +0 -1
  764. package/dist/web/assets/agent-session-window-content-CB_uvabH.js.br +0 -0
  765. package/dist/web/assets/agent-session-window-content-CB_uvabH.js.gz +0 -0
  766. package/dist/web/assets/ai-resource-editor-Czearm3I.js +0 -1
  767. package/dist/web/assets/ai-resource-editor-Czearm3I.js.br +0 -0
  768. package/dist/web/assets/ai-resource-editor-Czearm3I.js.gz +0 -0
  769. package/dist/web/assets/ai-settings-section-AOgAUCgH.js +0 -1
  770. package/dist/web/assets/ai-settings-section-B_OFMlrt.js +0 -1
  771. package/dist/web/assets/ai-settings-section-B_OFMlrt.js.br +0 -0
  772. package/dist/web/assets/ai-settings-section-B_OFMlrt.js.gz +0 -0
  773. package/dist/web/assets/android-tab-L7DmLfHG.js +0 -2
  774. package/dist/web/assets/android-tab-L7DmLfHG.js.br +0 -0
  775. package/dist/web/assets/android-tab-L7DmLfHG.js.gz +0 -0
  776. package/dist/web/assets/api-client-DAQfiXg0.js +0 -1
  777. package/dist/web/assets/api-client-OiA8Ida1.js +0 -1
  778. package/dist/web/assets/api-client-OiA8Ida1.js.br +0 -0
  779. package/dist/web/assets/api-client-OiA8Ida1.js.gz +0 -0
  780. package/dist/web/assets/api-settings-D2H6gjen.js +0 -1
  781. package/dist/web/assets/api-settings-D2H6gjen.js.br +0 -0
  782. package/dist/web/assets/api-settings-D2H6gjen.js.gz +0 -0
  783. package/dist/web/assets/api-settings-DHhcUHtx.js +0 -1
  784. package/dist/web/assets/api-themes-CE8gPZ3X.js +0 -1
  785. package/dist/web/assets/appearance-settings-section-s3KWKTBm.js +0 -1
  786. package/dist/web/assets/appearance-settings-section-s3KWKTBm.js.br +0 -0
  787. package/dist/web/assets/appearance-settings-section-s3KWKTBm.js.gz +0 -0
  788. package/dist/web/assets/apps-panel-DaojtUvh.js +0 -1
  789. package/dist/web/assets/apps-panel-DaojtUvh.js.br +0 -0
  790. package/dist/web/assets/apps-panel-DaojtUvh.js.gz +0 -0
  791. package/dist/web/assets/audio-preview-CWcPZqTA.js +0 -1
  792. package/dist/web/assets/audio-preview-CWcPZqTA.js.br +0 -4
  793. package/dist/web/assets/audio-preview-CWcPZqTA.js.gz +0 -0
  794. package/dist/web/assets/branch-review-tab-9UB4ccpF.js +0 -1
  795. package/dist/web/assets/branch-review-tab-9UB4ccpF.js.br +0 -0
  796. package/dist/web/assets/branch-review-tab-9UB4ccpF.js.gz +0 -0
  797. package/dist/web/assets/button-Br60hGkw.js +0 -1
  798. package/dist/web/assets/button-Br60hGkw.js.br +0 -0
  799. package/dist/web/assets/button-Br60hGkw.js.gz +0 -0
  800. package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js +0 -1
  801. package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js.br +0 -0
  802. package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js.gz +0 -0
  803. package/dist/web/assets/chat-tab-DMVb_mgx.js +0 -1
  804. package/dist/web/assets/chat-tab-DMVb_mgx.js.br +0 -0
  805. package/dist/web/assets/chat-tab-DMVb_mgx.js.gz +0 -0
  806. package/dist/web/assets/chat-tab-s7uAnh-h.js +0 -17
  807. package/dist/web/assets/chat-tab-s7uAnh-h.js.br +0 -0
  808. package/dist/web/assets/chat-tab-s7uAnh-h.js.gz +0 -0
  809. package/dist/web/assets/code-editor-JK49X9EX.js +0 -10
  810. package/dist/web/assets/code-editor-JK49X9EX.js.br +0 -0
  811. package/dist/web/assets/code-editor-JK49X9EX.js.gz +0 -0
  812. package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js +0 -1
  813. package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js.br +0 -0
  814. package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js.gz +0 -0
  815. package/dist/web/assets/conflict-editor-rOpVkK9P.js +0 -19
  816. package/dist/web/assets/conflict-editor-rOpVkK9P.js.br +0 -0
  817. package/dist/web/assets/conflict-editor-rOpVkK9P.js.gz +0 -0
  818. package/dist/web/assets/connection-form-tab-BGmb918E.js +0 -4
  819. package/dist/web/assets/connection-form-tab-BGmb918E.js.br +0 -0
  820. package/dist/web/assets/connection-form-tab-BGmb918E.js.gz +0 -0
  821. package/dist/web/assets/context-menu-BoQ6lxte.js +0 -1
  822. package/dist/web/assets/context-menu-BoQ6lxte.js.br +0 -0
  823. package/dist/web/assets/context-menu-BoQ6lxte.js.gz +0 -0
  824. package/dist/web/assets/createLucideIcon-DBXq3G0e.js +0 -1
  825. package/dist/web/assets/createLucideIcon-DBXq3G0e.js.br +0 -0
  826. package/dist/web/assets/createLucideIcon-DBXq3G0e.js.gz +0 -0
  827. package/dist/web/assets/csv-preview-CM7su92m.js +0 -10
  828. package/dist/web/assets/csv-preview-CM7su92m.js.br +0 -0
  829. package/dist/web/assets/csv-preview-CM7su92m.js.gz +0 -0
  830. package/dist/web/assets/database-drivers-section-C6ZKPWaE.js +0 -1
  831. package/dist/web/assets/database-drivers-section-C6ZKPWaE.js.br +0 -0
  832. package/dist/web/assets/database-drivers-section-C6ZKPWaE.js.gz +0 -0
  833. package/dist/web/assets/db-explorer-store-BcLxq-X0.js +0 -1
  834. package/dist/web/assets/db-explorer-store-BcLxq-X0.js.br +0 -0
  835. package/dist/web/assets/db-explorer-store-BcLxq-X0.js.gz +0 -0
  836. package/dist/web/assets/db-tab-parts-DvmnlA6V.js +0 -1
  837. package/dist/web/assets/db-tab-parts-DvmnlA6V.js.br +0 -0
  838. package/dist/web/assets/db-tab-parts-DvmnlA6V.js.gz +0 -0
  839. package/dist/web/assets/db-types-9ac-eYxf.js +0 -1
  840. package/dist/web/assets/db-types-9ac-eYxf.js.br +0 -0
  841. package/dist/web/assets/db-types-9ac-eYxf.js.gz +0 -0
  842. package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js +0 -1
  843. package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js.br +0 -0
  844. package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js.gz +0 -0
  845. package/dist/web/assets/design-export-client-ClwRg798.js +0 -1
  846. package/dist/web/assets/design-export-client-ClwRg798.js.br +0 -0
  847. package/dist/web/assets/design-export-client-ClwRg798.js.gz +0 -0
  848. package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js +0 -1
  849. package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js.br +0 -0
  850. package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js.gz +0 -0
  851. package/dist/web/assets/design-settings-section-CuxZSLAr.js +0 -2
  852. package/dist/web/assets/design-settings-section-CuxZSLAr.js.br +0 -0
  853. package/dist/web/assets/design-settings-section-CuxZSLAr.js.gz +0 -0
  854. package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js +0 -3
  855. package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js.br +0 -0
  856. package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js.gz +0 -0
  857. package/dist/web/assets/design-tab-JlKmHVkd.js +0 -57
  858. package/dist/web/assets/design-tab-JlKmHVkd.js.br +0 -0
  859. package/dist/web/assets/design-tab-JlKmHVkd.js.gz +0 -0
  860. package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js +0 -1
  861. package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js.br +0 -0
  862. package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js.gz +0 -0
  863. package/dist/web/assets/dialog-DOaEX6AK.js +0 -1
  864. package/dist/web/assets/dialog-DOaEX6AK.js.br +0 -0
  865. package/dist/web/assets/dialog-DOaEX6AK.js.gz +0 -0
  866. package/dist/web/assets/diff-viewer-FidH7Nsq.js +0 -4
  867. package/dist/web/assets/diff-viewer-FidH7Nsq.js.br +0 -0
  868. package/dist/web/assets/diff-viewer-FidH7Nsq.js.gz +0 -0
  869. package/dist/web/assets/docx-preview-ENiLGqzy.js +0 -12
  870. package/dist/web/assets/docx-preview-ENiLGqzy.js.br +0 -0
  871. package/dist/web/assets/docx-preview-ENiLGqzy.js.gz +0 -0
  872. package/dist/web/assets/dropdown-menu-DB3yyoVz.js +0 -1
  873. package/dist/web/assets/dropdown-menu-DB3yyoVz.js.br +0 -0
  874. package/dist/web/assets/dropdown-menu-DB3yyoVz.js.gz +0 -0
  875. package/dist/web/assets/edit-diff-preview-D4EqC86X.js +0 -7
  876. package/dist/web/assets/edit-diff-preview-D4EqC86X.js.br +0 -0
  877. package/dist/web/assets/edit-diff-preview-D4EqC86X.js.gz +0 -0
  878. package/dist/web/assets/editor-dialog-DC7dUWAX.js +0 -1
  879. package/dist/web/assets/editor-dialog-DC7dUWAX.js.br +0 -0
  880. package/dist/web/assets/editor-dialog-DC7dUWAX.js.gz +0 -0
  881. package/dist/web/assets/editor-language-service-0pN0TxYN.js +0 -1
  882. package/dist/web/assets/editor-language-service-0pN0TxYN.js.br +0 -0
  883. package/dist/web/assets/editor-language-service-0pN0TxYN.js.gz +0 -0
  884. package/dist/web/assets/explorer-body-tFaUp9_Q.js +0 -2
  885. package/dist/web/assets/explorer-body-tFaUp9_Q.js.br +0 -0
  886. package/dist/web/assets/explorer-body-tFaUp9_Q.js.gz +0 -0
  887. package/dist/web/assets/explorer-model-BmgFEsj1.js +0 -1
  888. package/dist/web/assets/explorer-model-BmgFEsj1.js.br +0 -0
  889. package/dist/web/assets/explorer-model-BmgFEsj1.js.gz +0 -0
  890. package/dist/web/assets/explorer-window-content-XnRTZT_X.js +0 -1
  891. package/dist/web/assets/explorer-window-content-XnRTZT_X.js.br +0 -0
  892. package/dist/web/assets/explorer-window-content-XnRTZT_X.js.gz +0 -0
  893. package/dist/web/assets/extension-manager-section-DEbwRPf1.js +0 -1
  894. package/dist/web/assets/extension-manager-section-DEbwRPf1.js.br +0 -0
  895. package/dist/web/assets/extension-manager-section-DEbwRPf1.js.gz +0 -0
  896. package/dist/web/assets/extension-webview-C9ApceLU.js +0 -12
  897. package/dist/web/assets/extension-webview-C9ApceLU.js.br +0 -0
  898. package/dist/web/assets/extension-webview-C9ApceLU.js.gz +0 -0
  899. package/dist/web/assets/file-diff-lX1a7RLF.js +0 -1
  900. package/dist/web/assets/file-icons-DpwcJLL4.js +0 -1
  901. package/dist/web/assets/file-icons-DpwcJLL4.js.br +0 -0
  902. package/dist/web/assets/file-icons-DpwcJLL4.js.gz +0 -0
  903. package/dist/web/assets/file-store-Bk1WYfdy.js +0 -1
  904. package/dist/web/assets/file-store-Bk1WYfdy.js.br +0 -0
  905. package/dist/web/assets/file-store-Bk1WYfdy.js.gz +0 -0
  906. package/dist/web/assets/files-settings-section-C8MacVFQ.js +0 -1
  907. package/dist/web/assets/files-settings-section-C8MacVFQ.js.br +0 -0
  908. package/dist/web/assets/files-settings-section-C8MacVFQ.js.gz +0 -0
  909. package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js +0 -1
  910. package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js.br +0 -0
  911. package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js.gz +0 -0
  912. package/dist/web/assets/format-file-meta-C0LKHE3e.js +0 -1
  913. package/dist/web/assets/format-file-meta-C0LKHE3e.js.br +0 -0
  914. package/dist/web/assets/format-file-meta-C0LKHE3e.js.gz +0 -0
  915. package/dist/web/assets/fs-api-BQrIEcvo.js +0 -1
  916. package/dist/web/assets/fs-api-BQrIEcvo.js.br +0 -0
  917. package/dist/web/assets/fs-api-BQrIEcvo.js.gz +0 -0
  918. package/dist/web/assets/general-settings-section-DZRRGdlQ.js +0 -1
  919. package/dist/web/assets/general-settings-section-DZRRGdlQ.js.br +0 -0
  920. package/dist/web/assets/general-settings-section-DZRRGdlQ.js.gz +0 -0
  921. package/dist/web/assets/git-commit-horizontal-BVihXafd.js +0 -1
  922. package/dist/web/assets/git-log-panel-g2pBnu6r.js +0 -1
  923. package/dist/web/assets/git-log-panel-g2pBnu6r.js.br +0 -0
  924. package/dist/web/assets/git-log-panel-g2pBnu6r.js.gz +0 -0
  925. package/dist/web/assets/git-repo-store-BOYLnV67.js +0 -1
  926. package/dist/web/assets/git-repo-store-BOYLnV67.js.br +0 -0
  927. package/dist/web/assets/git-repo-store-BOYLnV67.js.gz +0 -0
  928. package/dist/web/assets/git-review-tab-BzI5mxWd.js +0 -3
  929. package/dist/web/assets/git-review-tab-BzI5mxWd.js.br +0 -0
  930. package/dist/web/assets/git-review-tab-BzI5mxWd.js.gz +0 -0
  931. package/dist/web/assets/glide-data-grid-BxvI3ehr.js +0 -177
  932. package/dist/web/assets/glide-data-grid-BxvI3ehr.js.br +0 -0
  933. package/dist/web/assets/glide-data-grid-BxvI3ehr.js.gz +0 -0
  934. package/dist/web/assets/grid-save-dialog-D55Po6Vu.js +0 -2
  935. package/dist/web/assets/grid-save-dialog-D55Po6Vu.js.br +0 -0
  936. package/dist/web/assets/grid-save-dialog-D55Po6Vu.js.gz +0 -0
  937. package/dist/web/assets/group-chat-tab-CoMC-Fx1.js +0 -1
  938. package/dist/web/assets/group-chat-tab-CoMC-Fx1.js.br +0 -0
  939. package/dist/web/assets/group-chat-tab-CoMC-Fx1.js.gz +0 -0
  940. package/dist/web/assets/icons-JMA45Ifw.js +0 -1
  941. package/dist/web/assets/icons-JMA45Ifw.js.br +0 -0
  942. package/dist/web/assets/icons-JMA45Ifw.js.gz +0 -0
  943. package/dist/web/assets/image-preview-D7KR11Xo.js +0 -1
  944. package/dist/web/assets/impexp-tab-JF6JF8eO.js +0 -1
  945. package/dist/web/assets/impexp-tab-JF6JF8eO.js.br +0 -0
  946. package/dist/web/assets/impexp-tab-JF6JF8eO.js.gz +0 -0
  947. package/dist/web/assets/index-DyYGWFVa.css +0 -1
  948. package/dist/web/assets/index-DyYGWFVa.css.br +0 -0
  949. package/dist/web/assets/index-DyYGWFVa.css.gz +0 -0
  950. package/dist/web/assets/index-ItT-dTPV.js +0 -59
  951. package/dist/web/assets/index-ItT-dTPV.js.br +0 -0
  952. package/dist/web/assets/index-ItT-dTPV.js.gz +0 -0
  953. package/dist/web/assets/input-CKGoVpYv.js +0 -1
  954. package/dist/web/assets/jira-watcher-section-CvyXLyjO.js +0 -1
  955. package/dist/web/assets/keybindings-store-CeEtx6js.js +0 -1
  956. package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js +0 -1
  957. package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js.br +0 -0
  958. package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js.gz +0 -0
  959. package/dist/web/assets/language-servers-section-DiYURB24.js +0 -2
  960. package/dist/web/assets/language-servers-section-DiYURB24.js.br +0 -0
  961. package/dist/web/assets/language-servers-section-DiYURB24.js.gz +0 -0
  962. package/dist/web/assets/logs-app-CJlNqOdc.js +0 -13
  963. package/dist/web/assets/logs-app-CJlNqOdc.js.br +0 -0
  964. package/dist/web/assets/logs-app-CJlNqOdc.js.gz +0 -0
  965. package/dist/web/assets/logs-tab-BoAlm_8H.js +0 -1
  966. package/dist/web/assets/logs-window-content-nNm4jl1s.js +0 -1
  967. package/dist/web/assets/lsp-client-LnKiMWeG.js +0 -1
  968. package/dist/web/assets/lsp-client-LnKiMWeG.js.br +0 -0
  969. package/dist/web/assets/lsp-client-LnKiMWeG.js.gz +0 -0
  970. package/dist/web/assets/markdown-renderer-8Hef5MLx.js +0 -1
  971. package/dist/web/assets/markdown-renderer-BH_CFPJw.js +0 -5
  972. package/dist/web/assets/markdown-renderer-BH_CFPJw.js.br +0 -0
  973. package/dist/web/assets/markdown-renderer-BH_CFPJw.js.gz +0 -0
  974. package/dist/web/assets/media-url-CsdZ6q_T.js +0 -1
  975. package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js +0 -1
  976. package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js.br +0 -0
  977. package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js.gz +0 -0
  978. package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js +0 -1
  979. package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js.br +0 -0
  980. package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js.gz +0 -0
  981. package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js +0 -1
  982. package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js.br +0 -0
  983. package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js.gz +0 -0
  984. package/dist/web/assets/new-design-dialog-CgBUrVFx.js +0 -1
  985. package/dist/web/assets/new-design-dialog-CgBUrVFx.js.br +0 -0
  986. package/dist/web/assets/new-design-dialog-CgBUrVFx.js.gz +0 -0
  987. package/dist/web/assets/notification-store-CXC7u6MW.js +0 -1
  988. package/dist/web/assets/notifications-settings-section-CPbx23nU.js +0 -1
  989. package/dist/web/assets/notifications-settings-section-CPbx23nU.js.br +0 -0
  990. package/dist/web/assets/notifications-settings-section-CPbx23nU.js.gz +0 -0
  991. package/dist/web/assets/onboarding-entry--MWe4amV.js +0 -1
  992. package/dist/web/assets/onboarding-entry--MWe4amV.js.br +0 -0
  993. package/dist/web/assets/onboarding-entry--MWe4amV.js.gz +0 -0
  994. package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js +0 -1
  995. package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js.br +0 -0
  996. package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js.gz +0 -0
  997. package/dist/web/assets/open-db-tabs-CkQe49j_.js +0 -1
  998. package/dist/web/assets/open-db-tabs-CkQe49j_.js.br +0 -0
  999. package/dist/web/assets/open-db-tabs-CkQe49j_.js.gz +0 -0
  1000. package/dist/web/assets/open-settings-DsGBn73g.js +0 -1
  1001. package/dist/web/assets/overview-panel-CcUGDvnt.js +0 -1
  1002. package/dist/web/assets/overview-panel-CcUGDvnt.js.br +0 -0
  1003. package/dist/web/assets/overview-panel-CcUGDvnt.js.gz +0 -0
  1004. package/dist/web/assets/panel-store-DmP16Fo0.js +0 -1
  1005. package/dist/web/assets/panel-store-DmP16Fo0.js.br +0 -0
  1006. package/dist/web/assets/panel-store-DmP16Fo0.js.gz +0 -0
  1007. package/dist/web/assets/patch-tab-metadata-B-jH5svY.js +0 -1
  1008. package/dist/web/assets/pdf-preview-DMUIWb9B.js +0 -1
  1009. package/dist/web/assets/pdf-preview-DMUIWb9B.js.br +0 -0
  1010. package/dist/web/assets/pdf-preview-DMUIWb9B.js.gz +0 -0
  1011. package/dist/web/assets/performance-panel-CJDLUwrs.js +0 -3
  1012. package/dist/web/assets/performance-panel-CJDLUwrs.js.br +0 -0
  1013. package/dist/web/assets/performance-panel-CJDLUwrs.js.gz +0 -0
  1014. package/dist/web/assets/portal-container-context-BXAsDqrB.js +0 -1
  1015. package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js +0 -1
  1016. package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js.br +0 -0
  1017. package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js.gz +0 -0
  1018. package/dist/web/assets/pptx-export-BxmgltJ4.js +0 -111
  1019. package/dist/web/assets/pptx-export-BxmgltJ4.js.br +0 -0
  1020. package/dist/web/assets/pptx-export-BxmgltJ4.js.gz +0 -0
  1021. package/dist/web/assets/problems-panel-DX32QDH_.js +0 -1
  1022. package/dist/web/assets/problems-panel-DX32QDH_.js.br +0 -0
  1023. package/dist/web/assets/problems-panel-DX32QDH_.js.gz +0 -0
  1024. package/dist/web/assets/process-row-format-CBw-CQCx.js +0 -1
  1025. package/dist/web/assets/process-table-CX-NhOg6.js +0 -1
  1026. package/dist/web/assets/process-table-CX-NhOg6.js.br +0 -0
  1027. package/dist/web/assets/process-table-CX-NhOg6.js.gz +0 -0
  1028. package/dist/web/assets/project-framework-store-Bi5dyHdx.js +0 -1
  1029. package/dist/web/assets/project-store-CEGoLMOl.js +0 -1
  1030. package/dist/web/assets/project-store-CEGoLMOl.js.br +0 -0
  1031. package/dist/web/assets/project-store-CEGoLMOl.js.gz +0 -0
  1032. package/dist/web/assets/proxy-settings-section-BGNvFe7e.js +0 -1
  1033. package/dist/web/assets/proxy-settings-section-BGNvFe7e.js.br +0 -0
  1034. package/dist/web/assets/proxy-settings-section-BGNvFe7e.js.gz +0 -0
  1035. package/dist/web/assets/query-audit-section-DTHI5GP7.js +0 -1
  1036. package/dist/web/assets/query-audit-section-DTHI5GP7.js.br +0 -0
  1037. package/dist/web/assets/query-audit-section-DTHI5GP7.js.gz +0 -0
  1038. package/dist/web/assets/query-tab-qMlIkHRk.js +0 -22
  1039. package/dist/web/assets/query-tab-qMlIkHRk.js.br +0 -0
  1040. package/dist/web/assets/query-tab-qMlIkHRk.js.gz +0 -0
  1041. package/dist/web/assets/react-PkBxFcos.js +0 -1
  1042. package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js +0 -1
  1043. package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js.br +0 -0
  1044. package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js.gz +0 -0
  1045. package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js +0 -1
  1046. package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js.br +0 -0
  1047. package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js.gz +0 -0
  1048. package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js +0 -2
  1049. package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js.br +0 -0
  1050. package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js.gz +0 -0
  1051. package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js +0 -1
  1052. package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js.br +0 -0
  1053. package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js.gz +0 -0
  1054. package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js +0 -1
  1055. package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js.br +0 -0
  1056. package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js.gz +0 -0
  1057. package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js +0 -1
  1058. package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js.br +0 -0
  1059. package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js.gz +0 -0
  1060. package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js +0 -1
  1061. package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js.br +0 -0
  1062. package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js.gz +0 -0
  1063. package/dist/web/assets/rename-object-dialog-FSlcdUoB.js +0 -1
  1064. package/dist/web/assets/rename-object-dialog-FSlcdUoB.js.br +0 -0
  1065. package/dist/web/assets/rename-object-dialog-FSlcdUoB.js.gz +0 -0
  1066. package/dist/web/assets/review-code-CfuJeLYd.js +0 -5
  1067. package/dist/web/assets/review-code-CfuJeLYd.js.br +0 -0
  1068. package/dist/web/assets/review-code-CfuJeLYd.js.gz +0 -0
  1069. package/dist/web/assets/run-in-terminal-Bk9Bw7G1.js +0 -1
  1070. package/dist/web/assets/run-in-terminal-button-DFPQUlZs.js +0 -1
  1071. package/dist/web/assets/save-as-dialog-Bj9VpGYf.js +0 -1
  1072. package/dist/web/assets/save-as-dialog-Bj9VpGYf.js.br +0 -0
  1073. package/dist/web/assets/save-as-dialog-Bj9VpGYf.js.gz +0 -0
  1074. package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js +0 -1
  1075. package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js.br +0 -0
  1076. package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js.gz +0 -0
  1077. package/dist/web/assets/scroll-area-6Am1KMiB.js +0 -1
  1078. package/dist/web/assets/scroll-area-6Am1KMiB.js.br +0 -0
  1079. package/dist/web/assets/scroll-area-6Am1KMiB.js.gz +0 -0
  1080. package/dist/web/assets/send-to-chat-Bcm_Lcog.js +0 -1
  1081. package/dist/web/assets/send-to-chat-Bcm_Lcog.js.br +0 -0
  1082. package/dist/web/assets/send-to-chat-Bcm_Lcog.js.gz +0 -0
  1083. package/dist/web/assets/separator-BOYUIPkH.js +0 -1
  1084. package/dist/web/assets/services-panel-CBRTsROB.js +0 -1
  1085. package/dist/web/assets/services-panel-CBRTsROB.js.br +0 -0
  1086. package/dist/web/assets/services-panel-CBRTsROB.js.gz +0 -0
  1087. package/dist/web/assets/session-changes-bar-BRopa3Dh.js +0 -1
  1088. package/dist/web/assets/session-changes-bar-BRopa3Dh.js.br +0 -0
  1089. package/dist/web/assets/session-changes-bar-BRopa3Dh.js.gz +0 -0
  1090. package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js +0 -1
  1091. package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js.br +0 -0
  1092. package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js.gz +0 -0
  1093. package/dist/web/assets/session-review-tab--kNB_FKQ.js +0 -6
  1094. package/dist/web/assets/session-review-tab--kNB_FKQ.js.br +0 -0
  1095. package/dist/web/assets/session-review-tab--kNB_FKQ.js.gz +0 -0
  1096. package/dist/web/assets/settings-body-B-s0fEjc.js +0 -1
  1097. package/dist/web/assets/settings-body-B-s0fEjc.js.br +0 -0
  1098. package/dist/web/assets/settings-body-B-s0fEjc.js.gz +0 -0
  1099. package/dist/web/assets/settings-categories-CcR9eL3x.js +0 -1
  1100. package/dist/web/assets/settings-categories-CcR9eL3x.js.br +0 -0
  1101. package/dist/web/assets/settings-categories-CcR9eL3x.js.gz +0 -0
  1102. package/dist/web/assets/settings-section-content-BJ35dy5r.js +0 -1
  1103. package/dist/web/assets/settings-section-content-DckksvTg.js +0 -2
  1104. package/dist/web/assets/settings-section-content-DckksvTg.js.br +0 -0
  1105. package/dist/web/assets/settings-section-content-DckksvTg.js.gz +0 -0
  1106. package/dist/web/assets/settings-store-WeJyQVL8.js +0 -2
  1107. package/dist/web/assets/settings-store-WeJyQVL8.js.br +0 -0
  1108. package/dist/web/assets/settings-store-WeJyQVL8.js.gz +0 -0
  1109. package/dist/web/assets/settings-tab-BlX33GEN.js +0 -1
  1110. package/dist/web/assets/settings-window-content-B-7yV1_q.js +0 -1
  1111. package/dist/web/assets/slash-command-picker-BBcy6w6m.js +0 -1
  1112. package/dist/web/assets/slash-command-picker-BBcy6w6m.js.br +0 -0
  1113. package/dist/web/assets/slash-command-picker-BBcy6w6m.js.gz +0 -0
  1114. package/dist/web/assets/sortable-header-B9gfWik4.js +0 -1
  1115. package/dist/web/assets/sortable-header-B9gfWik4.js.br +0 -0
  1116. package/dist/web/assets/sortable-header-B9gfWik4.js.gz +0 -0
  1117. package/dist/web/assets/sql-completion-provider-CaTHVr1l.js +0 -5
  1118. package/dist/web/assets/sql-completion-provider-CaTHVr1l.js.br +0 -0
  1119. package/dist/web/assets/sql-completion-provider-CaTHVr1l.js.gz +0 -0
  1120. package/dist/web/assets/sql-object-tab-DVo4bxRI.js +0 -1
  1121. package/dist/web/assets/sql-object-tab-DVo4bxRI.js.br +0 -0
  1122. package/dist/web/assets/sql-object-tab-DVo4bxRI.js.gz +0 -0
  1123. package/dist/web/assets/sqlite-viewer-BGfIpl5x.js +0 -1
  1124. package/dist/web/assets/sqlite-viewer-BGfIpl5x.js.br +0 -0
  1125. package/dist/web/assets/sqlite-viewer-BGfIpl5x.js.gz +0 -0
  1126. package/dist/web/assets/start-ellipsis-rBh37k0n.js +0 -1
  1127. package/dist/web/assets/structure-save-dialog-STK_RFCK.js +0 -1
  1128. package/dist/web/assets/structure-save-dialog-STK_RFCK.js.br +0 -0
  1129. package/dist/web/assets/structure-save-dialog-STK_RFCK.js.gz +0 -0
  1130. package/dist/web/assets/structure-tab-DuLnsTC4.js +0 -3
  1131. package/dist/web/assets/structure-tab-DuLnsTC4.js.br +0 -0
  1132. package/dist/web/assets/structure-tab-DuLnsTC4.js.gz +0 -0
  1133. package/dist/web/assets/system-monitor-body-BIjW16Pb.js +0 -2
  1134. package/dist/web/assets/system-monitor-body-BIjW16Pb.js.br +0 -0
  1135. package/dist/web/assets/system-monitor-body-BIjW16Pb.js.gz +0 -0
  1136. package/dist/web/assets/system-monitor-tab-B6_tC9LO.js +0 -1
  1137. package/dist/web/assets/system-monitor-window-content-CwBzqMUe.js +0 -1
  1138. package/dist/web/assets/tab-host-window-content-CpdEjkZd.js +0 -1
  1139. package/dist/web/assets/tab-host-window-content-CpdEjkZd.js.br +0 -0
  1140. package/dist/web/assets/tab-host-window-content-CpdEjkZd.js.gz +0 -0
  1141. package/dist/web/assets/tab-store-nNzRNfVV.js +0 -1
  1142. package/dist/web/assets/table-tab-B5asfTBP.js +0 -2
  1143. package/dist/web/assets/table-tab-B5asfTBP.js.br +0 -0
  1144. package/dist/web/assets/table-tab-B5asfTBP.js.gz +0 -0
  1145. package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js +0 -1
  1146. package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js.br +0 -0
  1147. package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js.gz +0 -0
  1148. package/dist/web/assets/terminal-tab-DpMONMVB.js +0 -3
  1149. package/dist/web/assets/terminal-tab-DpMONMVB.js.br +0 -0
  1150. package/dist/web/assets/terminal-tab-DpMONMVB.js.gz +0 -0
  1151. package/dist/web/assets/tool-cards-DoDKxqN4.js +0 -14
  1152. package/dist/web/assets/tool-cards-DoDKxqN4.js.br +0 -0
  1153. package/dist/web/assets/tool-cards-DoDKxqN4.js.gz +0 -0
  1154. package/dist/web/assets/use-at-most-wide-BQFi1Sjv.js +0 -1
  1155. package/dist/web/assets/use-blob-url-D7ElNPnW.js +0 -1
  1156. package/dist/web/assets/use-db-driver-installed-BscdI-wS.js +0 -1
  1157. package/dist/web/assets/use-db-read-DYuyNA5i.js +0 -1
  1158. package/dist/web/assets/use-db-read-DYuyNA5i.js.br +0 -0
  1159. package/dist/web/assets/use-db-read-DYuyNA5i.js.gz +0 -0
  1160. package/dist/web/assets/use-db-tab-Cr4lXxwF.js +0 -1
  1161. package/dist/web/assets/use-db-tab-Cr4lXxwF.js.br +0 -0
  1162. package/dist/web/assets/use-db-tab-Cr4lXxwF.js.gz +0 -0
  1163. package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js +0 -1
  1164. package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js.br +0 -0
  1165. package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js.gz +0 -0
  1166. package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js +0 -1
  1167. package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js.br +0 -0
  1168. package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js.gz +0 -0
  1169. package/dist/web/assets/use-inline-blame-DS0HrHJ3.js +0 -16
  1170. package/dist/web/assets/use-inline-blame-DS0HrHJ3.js.br +0 -0
  1171. package/dist/web/assets/use-inline-blame-DS0HrHJ3.js.gz +0 -0
  1172. package/dist/web/assets/use-is-mobile-BXHbkfs9.js +0 -1
  1173. package/dist/web/assets/use-lsp-BTVDYrt6.js +0 -6
  1174. package/dist/web/assets/use-lsp-BTVDYrt6.js.br +0 -0
  1175. package/dist/web/assets/use-lsp-BTVDYrt6.js.gz +0 -0
  1176. package/dist/web/assets/use-monaco-theme-DqnhExsm.js +0 -1
  1177. package/dist/web/assets/use-opener-focus-C5L5UUJs.js +0 -1
  1178. package/dist/web/assets/use-process-kill-D-SGQxDn.js +0 -1
  1179. package/dist/web/assets/use-process-kill-D-SGQxDn.js.br +0 -0
  1180. package/dist/web/assets/use-process-kill-D-SGQxDn.js.gz +0 -0
  1181. package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js +0 -4
  1182. package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js.br +0 -0
  1183. package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js.gz +0 -0
  1184. package/dist/web/assets/use-visual-viewport-CQ6-A0Dt.js +0 -1
  1185. package/dist/web/assets/use-websocket-C6RnlNVJ.js +0 -1
  1186. package/dist/web/assets/vendor-markdown-QKPNiWEd.js +0 -291
  1187. package/dist/web/assets/vendor-markdown-QKPNiWEd.js.br +0 -0
  1188. package/dist/web/assets/vendor-markdown-QKPNiWEd.js.gz +0 -0
  1189. package/dist/web/assets/vendor-ui-CS1GvlOm.js +0 -45
  1190. package/dist/web/assets/vendor-ui-CS1GvlOm.js.br +0 -0
  1191. package/dist/web/assets/vendor-ui-CS1GvlOm.js.gz +0 -0
  1192. package/dist/web/assets/video-preview-CYzeUPfH.js +0 -1
  1193. package/dist/web/assets/video-preview-CYzeUPfH.js.br +0 -0
  1194. package/dist/web/assets/video-preview-CYzeUPfH.js.gz +0 -0
  1195. package/dist/web/assets/voice-settings-section-C01d-toF.js +0 -1
  1196. package/dist/web/assets/voice-settings-section-C01d-toF.js.br +0 -0
  1197. package/dist/web/assets/voice-settings-section-C01d-toF.js.gz +0 -0
  1198. package/dist/web/assets/web-preview-tab-F5C3quQs.js +0 -1
  1199. package/dist/web/assets/web-preview-tab-F5C3quQs.js.br +0 -0
  1200. package/dist/web/assets/web-preview-tab-F5C3quQs.js.gz +0 -0
  1201. package/dist/web/assets/window-pip-registry-DSoB7T3k.js +0 -1
  1202. package/dist/web/assets/window-store-zJczRsv4.js +0 -1
  1203. package/dist/web/assets/window-store-zJczRsv4.js.br +0 -0
  1204. package/dist/web/assets/window-store-zJczRsv4.js.gz +0 -0
  1205. package/dist/web/assets/ws-auth-cWeQ7_61.js +0 -1
  1206. /package/dist/web/assets/{__vite-browser-external-B4VNaaaA.js → __vite-browser-external-DL4jXWNt.js} +0 -0
  1207. /package/dist/web/assets/{clipboard-D3XnL7CB.js → clipboard-D-VCry-F.js} +0 -0
  1208. /package/dist/web/assets/{clipboard-D3XnL7CB.js.br → clipboard-D-VCry-F.js.br} +0 -0
  1209. /package/dist/web/assets/{clipboard-D3XnL7CB.js.gz → clipboard-D-VCry-F.js.gz} +0 -0
  1210. /package/dist/web/assets/{code-fence-vHZyBehL.js → code-fence-BK57HRhJ.js} +0 -0
  1211. /package/dist/web/assets/{design-system-status-label-Cus6e2Df.js → design-system-status-label-KA4ESjWe.js} +0 -0
  1212. /package/dist/web/assets/{format-bytes-B2kC4sbB.js → format-bytes-he3TR0bV.js} +0 -0
  1213. /package/dist/web/assets/{session-turns-gmrmXzeg.js → session-turns-D3QpTtCq.js} +0 -0
  1214. /package/dist/web/assets/{session-turns-gmrmXzeg.js.br → session-turns-D3QpTtCq.js.br} +0 -0
  1215. /package/dist/web/assets/{session-turns-gmrmXzeg.js.gz → session-turns-D3QpTtCq.js.gz} +0 -0
  1216. /package/dist/web/assets/{vendor-xterm-sFX94k3w.js → vendor-xterm-DRhOk3kW.js} +0 -0
  1217. /package/dist/web/assets/{vendor-xterm-sFX94k3w.js.br → vendor-xterm-DRhOk3kW.js.br} +0 -0
  1218. /package/dist/web/assets/{vendor-xterm-sFX94k3w.js.gz → vendor-xterm-DRhOk3kW.js.gz} +0 -0
@@ -0,0 +1,10 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-renderer-Df3r-CCb.js","assets/vendor-ui-BTSIXzhZ.js","assets/rolldown-runtime-C5c2KzVm.js","assets/vendor-markdown-C-P1aR4p.js","assets/lib-5Chotbwm.js","assets/markdown-renderer-CtEl6qAt.js","assets/index-DLB3j_P0.js","assets/preload-helper-CM8YhcCa.js","assets/button-C9ZXWb3b.js","assets/utils-Bslrbb-G.js","assets/createLucideIcon-D9_fdOKS.js","assets/file-diff-CcDhJkXB.js","assets/git-commit-horizontal-BPdj2L1i.js","assets/api-client-xQDlhUTu.js","assets/react-BZ0kba1-.js","assets/open-db-tabs-CtWIWHOa.js","assets/window-store-DqX_qmkQ.js","assets/panel-store-BJhazigC.js","assets/session-list-sync-triggers-DtJI5KF0.js","assets/project-store-BLGl9IAO.js","assets/project-framework-store-DwLxaRan.js","assets/explorer-model-BtJN4MZ9.js","assets/db-sidebar-reveal-_qw0CliT.js","assets/settings-store-B4mLp19V.js","assets/use-is-mobile-VRV9eZy1.js","assets/db-types-CNhENouW.js","assets/tab-store-D5I52eLN.js","assets/use-db-driver-installed-anzWkGi5.js","assets/impexp-state-BWKOuRGj.js","assets/file-store-BQ41vIs5.js","assets/sql-identifiers-DDISwQor.js","assets/db-explorer-store-BmpvDHz6.js","assets/onboarding-quick-orientation-CTHtIRib.js","assets/dialog-Dn_2tuYa.js","assets/portal-container-context-NBi-KGK0.js","assets/icons-BwyIKaTT.js","assets/format-file-meta-DdYtk07C.js","assets/fs-api-CFtQzsIJ.js","assets/open-settings-EXR4zoZG.js","assets/settings-categories-Ajj4ui27.js","assets/adaptive-context-menu-C4jNSORA.js","assets/context-menu-BCuZYfWC.js","assets/mobile-bottom-sheet-DArbIyrD.js","assets/use-visual-viewport-MmugpRg-.js","assets/dropdown-menu-BQidk_OJ.js","assets/input-C3oVNCMq.js","assets/scroll-area-DOlQJGZp.js","assets/start-ellipsis-CU8GkxaV.js","assets/chat-preparation-cache-190LLyy7.js","assets/clipboard-D-VCry-F.js","assets/file-icons-JInFtBVl.js","assets/format-date-CSHaU2wN.js","assets/git-repo-store-CKB5fdNP.js","assets/patch-tab-metadata-C92YkrRX.js","assets/ws-auth-CbF6GqxP.js","assets/apply-theme-ORrEdHKT.js","assets/resolve-theme-BqoL27BW.js","assets/index-M3DUzop8.css","assets/image-gallery-BuxSgBug.js","assets/run-in-terminal-ujoc25vj.js","assets/editor-language-service-6-7mS6_9.js","assets/use-lsp-B-otjr-6.js","assets/lsp-client-DpYmPhXX.js","assets/csv-preview-CBDMTEsF.js","assets/image-preview-gOBK9zED.js","assets/use-blob-url-Clm7wbB_.js","assets/pdf-preview-C9gMtv2a.js","assets/video-preview-CjB6wesi.js","assets/can-open-in-ppm-CwrBTXOy.js","assets/media-url-Cn2yRAxP.js","assets/audio-preview-Dq7qZ_6i.js","assets/docx-preview-XSkD2IL6.js"])))=>i.map(i=>d[i]);
2
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{A as r,Dr as i,Dt as a,Et as o,Ft as s,L as c,Lr as l,Or as u,Ot as d,Vn as f,Yr as p,_t as m,at as h,ei as ee,et as te,gt as ne,hr as re,ht as ie,li as ae,mi as g,mr as _,or as oe,pi as v,pt as se,qt as y,r as b,si as x,ut as ce,xn as S,xt as C,yt as w}from"./icons-BwyIKaTT.js";import{t as le}from"./createLucideIcon-D9_fdOKS.js";import{o as ue,r as T}from"./api-client-xQDlhUTu.js";import{t as E}from"./settings-store-B4mLp19V.js";import{t as D}from"./preload-helper-CM8YhcCa.js";import{t as O}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import{t as de}from"./panel-store-BJhazigC.js";import{i as fe}from"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import{t as pe}from"./tab-store-D5I52eLN.js";import"./context-menu-BCuZYfWC.js";import{o as k}from"./file-store-BQ41vIs5.js";import{n as me,t as he}from"./use-is-mobile-VRV9eZy1.js";import"./git-repo-store-CKB5fdNP.js";import{t as ge}from"./button-C9ZXWb3b.js";import{n as _e,o as ve,t as ye}from"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import{c as be,d as A,f as j,i as M,l as xe,m as Se,n as N,p as P,r as Ce,s as we,t as F}from"./dropdown-menu-BQidk_OJ.js";import{t as I}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import"./adaptive-context-menu-C4jNSORA.js";import"./fs-api-CFtQzsIJ.js";import"./format-file-meta-DdYtk07C.js";import"./input-C3oVNCMq.js";import{t as L}from"./db-sidebar-reveal-_qw0CliT.js";import{r as Te}from"./db-types-CNhENouW.js";import{F as Ee,n as De}from"./open-db-tabs-CtWIWHOa.js";import"./scroll-area-DOlQJGZp.js";import{J as Oe,Kn as R,Pr as ke,R as Ae,Y as je,hi as Me,oi as Ne,pi as z}from"./index-DLB3j_P0.js";import"./marked.esm-jqwIt-AK.js";import{t as Pe}from"./use-monaco-theme-BiDXRJ4e.js";import{n as Fe,t as Ie}from"./editor-font-CdxKRKX-.js";import{t as Le}from"./use-inline-blame-CRWJU6Rq.js";import{n as Re,r as ze}from"./monaco-dotenv-language-IZxwhtNA.js";import{i as Be,n as Ve,r as He,t as Ue}from"./can-open-in-ppm-CwrBTXOy.js";import{a as We,n as Ge,r as Ke,t as qe}from"./html-preview-loads-CMWBC-iv.js";import"./design-canvas-check-BIHc2d_k.js";import{n as Je,o as Ye}from"./split-sql-statements-DcAeXbk_.js";import{i as B}from"./send-to-chat-CWV1qd3c.js";import"./use-opener-focus-CDRKhHwX.js";import"./filter-dialog-frame-BkEbqBA4.js";import{t as Xe}from"./sql-completion-provider-CS-ElfgJ.js";import{t as Ze}from"./glide-data-grid-BlposOph.js";import{t as Qe}from"./save-as-dialog-DpXv_f1d.js";import{i as $e,r as et,t as tt}from"./use-design-canvas-check-DBsLf1At.js";import{t as nt}from"./code-fence-BK57HRhJ.js";var rt=le(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),V=e(t(),1),H=n();function U({projectName:e,filePath:t,tabId:n,ready:r,children:i}){let a=(0,V.useRef)(null),o=pe(e=>e.activeTabId);return(0,V.useEffect)(()=>{let i=()=>{if(!r||!e||!t||!n||o!==n)return;let i=!!a.current?.checkVisibility({checkOpacity:!0,checkVisibilityCSS:!0});i&&ke({type:`file-ready`,projectName:e,tabId:n,visible:i,isRunDocument:/^readme(?:\.[^/\\]+)?$/i.test(t.split(/[/\\]/).pop()??``)})};return i(),window.addEventListener(`ppm:onboarding-refresh`,i),()=>window.removeEventListener(`ppm:onboarding-refresh`,i)},[e,t,n,r,o]),(0,H.jsx)(`div`,{ref:a,className:`flex flex-1 min-h-0 flex-col`,children:i})}var it=[`completionItems`,`hovers`,`documentSymbols`,`definitions`,`references`,`documentHighlights`,`rename`,`diagnostics`,`documentRangeFormattingEdits`,`signatureHelp`,`onTypeFormattingEdits`,`codeActions`,`inlayHints`];function at(e){return Object.fromEntries(it.map(t=>[t,e]))}var W=at(!1),G=at(!0),K={noSemanticValidation:!0,noSyntaxValidation:!0,noSuggestionDiagnostics:!0},ot=1;function st(e,t){for(let n of[e,t])n.setModeConfiguration({...W}),n.setDiagnosticsOptions({...K})}function ct(e,t){for(let n of[e,t])n.setCompilerOptions({...n.getCompilerOptions(),jsx:ot,allowJs:!0,allowNonTsExtensions:!0}),n.setModeConfiguration({...G}),n.setDiagnosticsOptions({...K})}function lt(e,t,n){e?st(t,n):ct(t,n)}function ut({enabled:e,onToggle:t,status:n,diagnostics:r,onInstall:i}){let[a,o]=(0,V.useState)(!1),s=me();if(!e)return(0,H.jsxs)(`button`,{type:`button`,onClick:()=>t(!0),title:`Language server: off. Turn it on for completions, hover, go to definition, rename and quick fix from a real server. It runs as a process on the host.`,className:`flex items-center gap-1 rounded px-1.5 text-xs text-muted-foreground hover:bg-muted active:scale-95 transition-colors ${s?`min-h-11`:`py-0.5`}`,children:[(0,H.jsx)(g,{className:`size-3 shrink-0`}),(0,H.jsx)(`span`,{children:`LSP off`})]});if(!n)return null;let c=r.filter(e=>e.severity===1).length,l=r.filter(e=>e.severity===2).length,u=n.state===`ready`?n.server.displayName:n.state===`opening`?`Starting…`:n.server?.displayName??`No server`,d=n.state===`unavailable`&&n.reason===`not-installed`;return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(`button`,{type:`button`,onClick:()=>o(!0),title:n.state===`ready`?`${n.server.displayName} — rooted at ${n.server.rootPath}`:n.state===`unavailable`?n.message:`Starting the language server`,className:`flex items-center gap-1 rounded px-1.5 hover:bg-muted active:scale-95 transition-colors text-xs ${s?`min-h-11`:`py-0.5`} ${d?`text-amber-500`:`text-muted-foreground`}`,children:[n.state===`opening`?(0,H.jsx)(S,{className:`size-3 animate-spin shrink-0`}):d?(0,H.jsx)(b,{className:`size-3 shrink-0`}):(0,H.jsx)(v,{className:`size-3 shrink-0`}),(0,H.jsx)(`span`,{className:`max-w-24 truncate`,children:u}),c>0&&(0,H.jsx)(`span`,{className:`text-red-500`,children:c}),c===0&&l>0&&(0,H.jsx)(`span`,{className:`text-amber-500`,children:l})]}),a&&(0,H.jsx)(dt,{status:n,errors:c,warnings:l,isMobile:s,onToggle:t,onInstall:i,onClose:()=>o(!1)})]})}function dt({status:e,errors:t,warnings:n,isMobile:r,onToggle:i,onInstall:a,onClose:o}){let s=(0,H.jsx)(ft,{status:e,errors:t,warnings:n,isMobile:r,onToggle:i,onInstall:a});return r?(0,H.jsx)(I,{open:!0,onClose:o,className:`popover-solid max-h-[85dvh] flex flex-col`,children:s}):(0,H.jsx)(ye,{open:!0,onOpenChange:e=>!e&&o(),children:(0,H.jsxs)(_e,{className:`sm:max-w-lg`,children:[(0,H.jsx)(ve,{children:`Language server`}),s]})})}function ft({status:e,errors:t,warnings:n,isMobile:r,onToggle:i,onInstall:a}){return(0,H.jsxs)(`div`,{className:`p-4 space-y-4 overflow-y-auto text-sm leading-relaxed`,children:[e.state===`ready`&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(gt,{label:`Server`,value:e.server.displayName}),(0,H.jsx)(gt,{label:`Language`,value:e.languageId}),(0,H.jsx)(gt,{label:`Project root`,value:e.server.rootPath,mono:!0}),(0,H.jsx)(gt,{label:`Problems`,value:`${t} error${t===1?``:`s`}, ${n} warning${n===1?``:`s`}`}),(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Completions, hover, go to definition (F12), find references (Shift+F12), rename (F2), quick fix (Ctrl+.) and format (Shift+Alt+F) all come from this server.`})]}),e.state===`opening`&&(0,H.jsx)(`p`,{className:`text-muted-foreground`,children:`Starting the language server. A cold start reads the project's dependencies, so the first completion in a large project can take a few seconds.`}),e.state===`unavailable`&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`p`,{children:e.message}),e.server&&(0,H.jsxs)(`div`,{className:`space-y-2`,children:[e.reason===`not-installed`&&e.server.installable&&a?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:pt(e.server.installWith)}),(0,H.jsx)(ht,{server:e.server,isMobile:r,onInstall:a}),(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Or run it yourself:`})]}):(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:mt(e.server.installWith)}),(0,H.jsx)(_t,{command:e.server.installHint,isMobile:r})]}),e.reason===`no-language`&&(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No language server is registered for this file type.`})]}),(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-3 border-t border-border pt-3`,children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`p`,{className:`text-xs font-medium`,children:`Language server`}),(0,H.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`On for this device. Turning it off stops the process.`})]}),(0,H.jsx)(R,{checked:!0,onCheckedChange:e=>i(e)})]})]})}function pt(e){switch(e){case`go`:return`PPM builds it with the Go on this machine and keeps the binary in its own folder, leaving your GOBIN alone. A first build takes a minute or two.`;case`rustup`:return`PPM asks rustup to add the component to the toolchain this project uses — the same as running the command below yourself.`;case`download`:return`PPM downloads the server's own release, checks it against a pinned checksum and keeps it in its own folder. Nothing on your system changes.`;case`gem`:return`PPM installs the gem with the Ruby on this machine into its own folder, leaving your gems alone. It takes a minute or so.`;default:return`PPM downloads it from npm into its own folder. Nothing you installed globally changes, and this file picks it up without being reopened.`}}function mt(e){switch(e){case`go`:return`Install it, then reopen this file. PPM installs language servers but never toolchains, and it cannot find a Go on this host.`;case`rustup`:return`Install it, then reopen this file. PPM installs language servers but never toolchains, and it cannot find rustup on this host.`;case`gem`:return`Install it, then reopen this file. PPM installs this one with the machine's Ruby, and it cannot use one on this host.`;case`download`:return`Install it, then reopen this file. Its project publishes no build for this machine, or there is no unzip here to unpack one.`;case`bun`:return`Install it, then reopen this file. PPM installs this one with bun, and it cannot find bun on this host.`;default:return`Install it, then reopen this file.`}}function ht({server:e,isMobile:t,onInstall:n}){let[r,i]=(0,V.useState)(!1),[a,o]=(0,V.useState)(null);return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(ge,{type:`button`,disabled:r,onClick:()=>{i(!0),o(null),n(e.id).catch(e=>o(e instanceof Error?e.message:String(e))).finally(()=>i(!1))},className:`w-full ${t?`min-h-11`:``}`,children:[r?(0,H.jsx)(S,{className:`size-4 animate-spin`}):(0,H.jsx)(ie,{className:`size-4`}),r?`Installing ${e.displayName}…`:`Install ${e.displayName}`]}),a&&(0,H.jsx)(`p`,{className:`text-xs text-red-500 break-words`,children:a})]})}function gt({label:e,value:t,mono:n}){return(0,H.jsxs)(`div`,{className:`flex gap-2 items-baseline`,children:[(0,H.jsx)(`span`,{className:`text-muted-foreground shrink-0 w-24 text-xs`,children:e}),(0,H.jsx)(`span`,{className:`min-w-0 break-all ${n?`font-mono text-xs`:``}`,children:t})]})}function _t({command:e,isMobile:t}){let[n,i]=(0,V.useState)(!1);return(0,H.jsxs)(`button`,{type:`button`,onClick:()=>{navigator.clipboard?.writeText(e).then(()=>{i(!0),setTimeout(()=>i(!1),1500)})},className:`w-full flex items-center gap-2 rounded border border-border bg-muted/40 px-3 text-left font-mono text-xs hover:bg-muted active:scale-[0.99] transition ${t?`min-h-11 py-3`:`py-2`}`,children:[(0,H.jsx)(`span`,{className:`flex-1 break-all`,children:e}),n?(0,H.jsx)(r,{className:`size-3.5 shrink-0 text-green-500`}):(0,H.jsx)(ce,{className:`size-3.5 shrink-0 opacity-60`})]})}function q(e){let t=e.startsWith(`/`),n=e.split(/[/\\]/).filter(Boolean),r=e=>{let r=(t?`/`:``)+n.slice(0,e+1).join(`/`);return/^[A-Za-z]:$/.test(r)?r+`/`:r},i=t?`/`:(n[0]??``)+`/`;return n.map((e,t)=>({name:e,absPath:r(t),parentDir:t>0?r(t-1):i}))}async function vt(e){return(await T.get(`/api/fs/browse?path=${encodeURIComponent(e)}`)).entries}function yt({filePath:e,projectName:t,tabId:n,className:r}){let{updateTab:i,openTab:a}=pe(Ne(e=>({updateTab:e.updateTab,openTab:e.openTab}))),o=(0,V.useRef)(null),s=(0,V.useMemo)(()=>q(e),[e]);(0,V.useEffect)(()=>{o.current&&(o.current.scrollLeft=o.current.scrollWidth)},[s]);let l=(0,V.useCallback)((e,r)=>{let o=O(e),s={filePath:e,projectName:t};r.metaKey||r.ctrlKey?a({type:`editor`,title:o,metadata:s,projectId:t,closable:!0}):i(n,{title:o,metadata:s})},[t,n,a,i]);return(0,H.jsx)(`div`,{ref:o,className:r,children:s.map((e,t)=>(0,H.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[t>0&&(0,H.jsx)(c,{className:`size-3 text-muted-foreground shrink-0 mx-0.5`}),(0,H.jsx)(J,{segment:e,isLast:t===s.length-1,onFileClick:l})]},e.absPath))})}function J({segment:e,isLast:t,onFileClick:n}){let[r,i]=(0,V.useState)(null),[a,o]=(0,V.useState)(null);function s(t){t&&r===null&&vt(e.parentDir).then(i).catch(e=>{o(e.message||`Failed to browse`),i([])})}return(0,H.jsxs)(F,{onOpenChange:s,children:[(0,H.jsx)(Se,{asChild:!0,children:(0,H.jsx)(`button`,{type:`button`,className:`text-xs px-1 py-0.5 rounded hover:bg-muted transition-colors truncate max-w-[120px] ${t?`text-foreground font-medium`:`text-muted-foreground`}`,children:e.name})}),(0,H.jsx)(Ce,{align:`start`,className:`max-h-[300px] overflow-y-auto p-1`,children:r===null?(0,H.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):a?(0,H.jsx)(M,{disabled:!0,className:`text-xs text-destructive`,children:a}):r.length===0?(0,H.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Empty`}):r.map(t=>(0,H.jsx)(bt,{entry:t,activePath:e.absPath,onFileClick:n},t.path))})]})}function bt({entry:e,activePath:t,onFileClick:n}){let r=St(e.name,e.type===`directory`),i=e.path===t,[a,o]=(0,V.useState)(null);if(e.type===`directory`){function s(t){t&&a===null&&vt(e.path).then(o).catch(()=>o([]))}return(0,H.jsxs)(A,{onOpenChange:s,children:[(0,H.jsxs)(P,{className:`text-xs gap-1.5 ${i?`bg-muted`:``}`,children:[(0,H.jsx)(r,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`truncate`,children:e.name})]}),(0,H.jsx)(j,{className:`max-h-[300px] overflow-y-auto p-1`,children:a===null?(0,H.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):a.length===0?(0,H.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Empty`}):a.map(e=>(0,H.jsx)(bt,{entry:e,activePath:t,onFileClick:n},e.path))})]})}return(0,H.jsxs)(M,{className:`text-xs gap-1.5 cursor-pointer ${i?`bg-muted`:``}`,onClick:t=>n(e.path,t),children:[(0,H.jsx)(r,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`truncate`,children:e.name})]})}var xt={ts:C,tsx:C,js:C,jsx:C,py:C,rs:C,go:C,html:C,css:C,scss:C,json:rt,md:o,txt:o,yaml:a,yml:a};function St(e,t){return t?s:xt[e.split(`.`).pop()?.toLowerCase()??``]??w}function Ct(e,t){let n=[],r=e,i=``;for(let e=0;e<t.length;e++){let a=t[e],o=t.slice(0,e+1).join(`/`),s=r.find(e=>e.name===a);if(n.push({name:a,fullPath:o,node:s??null,siblings:r,parentPath:i}),s?.children)i=s.path,r=s.children;else{for(let r=e+1;r<t.length;r++)n.push({name:t[r],fullPath:t.slice(0,r+1).join(`/`),node:null,siblings:[],parentPath:t.slice(0,r).join(`/`)});break}}return n}function wt(e){return[...e].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1)}function Tt({filePath:e,projectName:t,tabId:n,className:r}){let i=k(e=>e.tree),{updateTab:a,openTab:o}=pe(Ne(e=>({updateTab:e.updateTab,openTab:e.openTab}))),s=fe(e=>e.projects.find(e=>e.name===t)?.path??``),l=(0,V.useRef)(null),{prefixParts:u,relativePath:d,isExternal:f}=(0,V.useMemo)(()=>{let t=e.startsWith(`/`)?e.slice(1):e,n=s.startsWith(`/`)?s.slice(1):s;if(n&&t.startsWith(n+`/`)){let e=t.slice(n.length+1);return{prefixParts:n.split(`/`),relativePath:e,isExternal:!1}}return{prefixParts:[],relativePath:t,isExternal:/^(\/|[A-Za-z]:[/\\])/.test(e)}},[e,s]),p=(0,V.useMemo)(()=>Ct(i,d.split(`/`).filter(Boolean)),[i,d]);(0,V.useEffect)(()=>{l.current&&(l.current.scrollLeft=l.current.scrollWidth)},[p]);function m(e,r){let i=O(e);r.metaKey||r.ctrlKey?o({type:`editor`,title:i,metadata:{filePath:e,projectName:t},projectId:t,closable:!0}):a(n,{title:i,metadata:{filePath:e,projectName:t}})}return f?(0,H.jsx)(yt,{filePath:e,projectName:t,tabId:n,className:r}):(0,H.jsxs)(`div`,{ref:l,className:r,children:[u.map((e,t)=>(0,H.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[t>0&&(0,H.jsx)(c,{className:`size-3 text-muted-foreground shrink-0 mx-0.5`}),(0,H.jsx)(`span`,{className:`text-xs text-muted-foreground px-1 py-0.5`,children:e})]},`prefix-${t}`)),p.map((e,n)=>(0,H.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[(n>0||u.length>0)&&(0,H.jsx)(c,{className:`size-3 text-muted-foreground shrink-0 mx-0.5`}),(0,H.jsx)(Et,{segment:e,isLast:n===p.length-1,projectName:t,onFileClick:m})]},e.fullPath))]})}function Et({segment:e,isLast:t,projectName:n,onFileClick:r}){let i=k(e=>e.loadChildren),a=k(e=>e.loadedPaths),o=(0,V.useMemo)(()=>wt(e.siblings),[e.siblings]),s=a.has(e.parentPath);function c(t){if(t&&!s){let t=e.parentPath.split(`/`).filter(Boolean);(async()=>{for(let e=0;e<=t.length;e++)await i(n,t.slice(0,e).join(`/`))})()}}return(0,H.jsxs)(F,{onOpenChange:c,children:[(0,H.jsx)(Se,{asChild:!0,children:(0,H.jsx)(`button`,{type:`button`,className:`text-xs px-1 py-0.5 rounded hover:bg-muted transition-colors truncate max-w-[120px] ${t?`text-foreground font-medium`:`text-muted-foreground`}`,children:e.name})}),(0,H.jsx)(Ce,{align:`start`,className:`max-h-[300px] p-1`,children:o.length===0?(0,H.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):o.map(t=>(0,H.jsx)(Dt,{node:t,projectName:n,activePath:e.fullPath,onFileClick:r},t.path))})]})}function Dt({node:e,projectName:t,activePath:n,onFileClick:r}){let i=St(e.name,e.type===`directory`),a=e.path===n,o=k(e=>e.loadChildren),s=k(e=>e.loadedPaths);if(e.type===`directory`){let c=e.children??[],l=s.has(e.path);function u(n){n&&!l&&o(t,e.path)}return(0,H.jsxs)(A,{onOpenChange:u,children:[(0,H.jsxs)(P,{className:`text-xs gap-1.5 ${a?`bg-muted`:``}`,children:[(0,H.jsx)(i,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`truncate`,children:e.name})]}),(0,H.jsx)(j,{className:`max-h-[300px] overflow-y-auto p-1`,children:c.length===0?(0,H.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):wt(c).map(e=>(0,H.jsx)(Dt,{node:e,projectName:t,activePath:n,onFileClick:r},e.path))})]})}return(0,H.jsxs)(M,{className:`text-xs gap-1.5 cursor-pointer ${a?`bg-muted`:``}`,onSelect:e=>{},onClick:t=>{r(e.path,t)},children:[(0,H.jsx)(i,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,H.jsx)(`span`,{className:`truncate`,children:e.name})]})}function Y({active:e,onClick:t,icon:n,label:r,title:i}){return(0,H.jsxs)(`button`,{type:`button`,title:i,onClick:t,className:`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${e?`bg-muted text-foreground`:`text-muted-foreground hover:text-foreground`}`,children:[(0,H.jsx)(n,{className:`size-3`}),(0,H.jsx)(`span`,{className:`hidden sm:inline`,children:r})]})}function Ot({ext:e,mdMode:t,onMdModeChange:n,csvMode:r,onCsvModeChange:i,wordWrap:a,onToggleWordWrap:o,inlineBlame:s,onToggleInlineBlame:c,blameStale:u,onRefresh:d,refreshing:f,filePath:p,projectName:te,className:ne}){return(0,H.jsxs)(`div`,{className:ne,children:[(e===`md`||e===`mdx`)&&n&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Y,{active:t===`edit`,onClick:()=>n(`edit`),icon:h,label:`Edit`}),(0,H.jsx)(Y,{active:t===`preview`,onClick:()=>n(`preview`),icon:m,label:`Preview`})]}),e===`csv`&&i&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Y,{active:r===`table`,onClick:()=>i(`table`),icon:l,label:`Table`}),(0,H.jsx)(Y,{active:r===`raw`,onClick:()=>i(`raw`),icon:h,label:`Raw`})]}),(0,H.jsx)(Y,{active:a,onClick:o,icon:x,label:`Wrap`}),c&&(0,H.jsx)(Y,{active:s===!0,onClick:c,icon:ee,label:`Blame`,title:s&&u?`Blame is hidden until this file is saved — the line numbers have moved`:`Inline blame (Alt+B)`}),d&&(0,H.jsxs)(`button`,{type:`button`,onClick:d,disabled:f,title:`Reload file from disk`,className:`flex items-center gap-1 px-2 py-1 rounded text-xs text-muted-foreground hover:text-foreground transition-colors disabled:opacity-50`,children:[(0,H.jsx)(re,{className:`size-3 ${f?`animate-spin`:``}`}),(0,H.jsx)(`span`,{className:`hidden sm:inline`,children:`Refresh`})]}),p&&te&&(0,H.jsx)(Y,{active:!1,onClick:()=>z(te,p),icon:ie,label:`Download`})]})}var kt=()=>{};function At({filePath:e,projectName:t,revision:n}){let[r,i]=(0,V.useState)(),[a,o]=(0,V.useState)(),s=(0,V.useRef)(null),c=(0,V.useRef)([]),l=$e(s,r?.nonce??null,kt),u=(0,V.useRef)(l);u.current=l;let d=We(t,e);return(0,V.useEffect)(()=>{let n=new AbortController;i(void 0),o(void 0);let r=setTimeout(()=>n.abort(Error(`Preview request timed out. Try Refresh.`)),3e4),a=!0;return T.post(`/api/html-preview`,{filePath:e,projectName:t},{signal:n.signal}).then(e=>{if(!a)return;c.current=[];let t=qe(d,e=>tt(u.current,{issues:c.current,frame:e.frame},{screenshot:e.screenshot}));i({url:e.url,nonce:et(),seq:t})}).catch(e=>{a&&o(e instanceof Error?e.message:`Could not open HTML preview`)}).finally(()=>clearTimeout(r)),()=>{a=!1,clearTimeout(r),n.abort()}},[e,t,n,d]),(0,V.useEffect)(()=>{if(!r)return;let{seq:e}=r;return()=>Ge(d,e)},[d,r]),(0,V.useEffect)(()=>l.on(`issue`,e=>{c.current.length<20&&c.current.push({kind:e.kind,message:e.message,source:e.source,line:e.line})}),[l.on]),a?(0,H.jsxs)(`div`,{role:`alert`,className:`p-4 text-sm text-destructive`,children:[a,`. Use Refresh to retry.`]}):r?(0,H.jsx)(`iframe`,{ref:s,title:`HTML preview`,src:`${r.url}?n=${encodeURIComponent(r.nonce)}`,sandbox:`allow-scripts`,referrerPolicy:`no-referrer`,className:`flex-1 min-h-0 w-full border-0 bg-white`,onLoad:()=>{l.frameLoaded(),Ke(d,r.seq)}}):(0,H.jsxs)(`div`,{role:`status`,className:`flex flex-1 items-center justify-center gap-2 text-sm text-muted-foreground`,children:[(0,H.jsx)(S,{className:`size-5 animate-spin`}),`Loading preview…`]})}var jt=[{id:`plaintext`,label:`Plain Text`},{id:`javascript`,label:`JavaScript`},{id:`typescript`,label:`TypeScript`},{id:`sql`,label:`SQL`},{id:`json`,label:`JSON`},{id:`xml`,label:`XML`},{id:`html`,label:`HTML`},{id:`css`,label:`CSS`},{id:`python`,label:`Python`},{id:`markdown`,label:`Markdown`},{id:`yaml`,label:`YAML`},{id:`shell`,label:`Shell`},{id:`dotenv`,label:`Dotenv`}];function Mt({value:e,onChange:t}){return(0,H.jsxs)(`div`,{className:`shrink-0 flex items-center gap-1 px-2 border-l border-border`,children:[(0,H.jsx)(C,{className:`size-3 text-muted-foreground`}),(0,H.jsx)(`select`,{value:e,onChange:e=>t(e.target.value),className:`h-5 text-[10px] bg-transparent border border-border rounded px-1 text-foreground outline-none max-w-[120px]`,title:`Select editor language`,children:jt.map(e=>(0,H.jsx)(`option`,{value:e.id,children:e.label},e.id))})]})}var Nt=`flex items-center justify-center gap-1.5 rounded px-2 min-h-11 min-w-11 md:min-h-7 md:min-w-7 text-xs text-muted-foreground hover:text-foreground hover:bg-muted`,X=`min-h-11 md:min-h-8 px-2`,Pt=`${X} pr-8 [&>span]:left-auto [&>span]:right-2`;function Ft(e){let{mode:t,onModeChange:n,onRefresh:r,unsaved:i,breadcrumb:a}=e;return(0,H.jsxs)(`div`,{className:`flex items-center gap-2 md:gap-1 border-b border-border bg-background px-2 shrink-0 h-12 md:h-8`,role:`toolbar`,"aria-label":`HTML preview`,children:[(0,H.jsx)(`div`,{className:`hidden md:flex flex-1 min-w-0 overflow-hidden`,children:a}),t===`preview`&&(0,H.jsx)(`button`,{type:`button`,onClick:r,title:`Reload the original HTML file`,"aria-label":`Refresh preview`,className:Nt,children:(0,H.jsx)(re,{className:`size-4`})}),[[`edit`,`Code`,h],[`preview`,`Preview`,m]].map(([e,r,i])=>(0,H.jsxs)(`button`,{type:`button`,"aria-pressed":t===e,onClick:()=>n(e),className:`${Nt} ${t===e?`bg-muted text-foreground`:``}`,children:[(0,H.jsx)(i,{className:`size-3.5`}),r]},e)),i&&(0,H.jsx)(`span`,{role:`status`,title:`Preview uses the saved file`,"aria-label":`Preview uses the saved file`,className:`text-amber-500 text-xs`,children:`●`}),(0,H.jsxs)(F,{children:[(0,H.jsx)(Se,{asChild:!0,children:(0,H.jsx)(`button`,{type:`button`,title:`More HTML actions`,"aria-label":`More HTML actions`,className:`${Nt} ml-auto md:ml-0`,children:(0,H.jsx)(f,{className:`size-4`})})}),(0,H.jsxs)(Ce,{align:`end`,className:`w-52`,children:[t===`edit`&&(0,H.jsxs)(M,{className:X,disabled:i||e.refreshing,onSelect:e.onReloadCode,children:[(0,H.jsx)(re,{}),`Reload code from disk`]}),(0,H.jsxs)(M,{className:X,onSelect:()=>void z(e.projectName??``,e.filePath),children:[(0,H.jsx)(ie,{}),`Download`]}),(0,H.jsx)(xe,{}),(0,H.jsxs)(N,{className:Pt,checked:e.wordWrap,onCheckedChange:e.onToggleWordWrap,children:[(0,H.jsx)(x,{className:`size-4 text-muted-foreground`}),`Word wrap`]}),e.onToggleInlineBlame&&(0,H.jsxs)(N,{className:Pt,checked:e.inlineBlame,onCheckedChange:e.onToggleInlineBlame,children:[(0,H.jsx)(ee,{className:`size-4 text-muted-foreground`}),`Inline blame`]}),e.onToggleLsp&&(0,H.jsxs)(N,{className:Pt,checked:e.lspEnabled,onCheckedChange:e.onToggleLsp,children:[(0,H.jsx)(v,{className:`size-4 text-muted-foreground`}),`Language server`]}),(0,H.jsxs)(A,{children:[(0,H.jsxs)(P,{className:`${X} gap-2`,children:[(0,H.jsx)(C,{className:`size-4 text-muted-foreground`}),`Editor language`]}),(0,H.jsx)(j,{className:`max-h-80 overflow-y-auto`,children:(0,H.jsx)(we,{value:e.language,onValueChange:e.onLanguageChange,children:jt.map(e=>(0,H.jsx)(be,{className:`min-h-11 md:min-h-8`,value:e.id,children:e.label},e.id))})})]})]})]})]})}var It=typeof window<`u`&&window.isSecureContext,Lt=[`(`,`)`,`{`,`}`,`[`,`]`,`<`,`>`,`;`,`:`,`=`,`"`,`'`,"`",`/`,`\\`,`_`,`#`],Rt=`px-2 py-1.5 rounded text-xs min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,zt=`px-3 py-1.5 rounded text-xs font-mono min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,Bt=`w-px h-5 bg-border mx-0.5 shrink-0`;function Vt({editorRef:e,readOnly:t,wrapOn:n,onToggleWrap:r}){let i=(0,V.useCallback)(()=>e.current,[e]),a=(0,V.useCallback)(e=>{let t=i();if(!t)return;t.focus();let n=t.getSelection();n&&t.executeEdits(`mobile-toolbar`,[{range:n,text:e}])},[i]),[o,s]=(0,V.useState)(!1),c=(0,V.useRef)(null),l=(0,V.useCallback)(async()=>{try{let e=await navigator.clipboard.readText();e&&a(e)}catch{}},[a]),u=(0,V.useCallback)(()=>{s(!0),requestAnimationFrame(()=>c.current?.focus())},[]),d=(0,V.useCallback)(e=>{e.preventDefault();let t=e.clipboardData.getData(`text/plain`);t&&(s(!1),a(t))},[a]),f=(0,V.useCallback)(()=>{let e=i();e&&(e.focus(),e.trigger(`mobile-toolbar`,`undo`,null))},[i]),m=(0,V.useCallback)(()=>{let e=i();e&&(e.focus(),e.trigger(`mobile-toolbar`,`redo`,null))},[i]),h=(0,V.useCallback)(()=>{let e=i();e&&(e.focus(),e.trigger(`mobile-toolbar`,`tab`,null))},[i]);return t?null:(0,H.jsxs)(`div`,{className:`shrink-0 border-t border-border bg-surface`,children:[!It&&o&&(0,H.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1.5 border-b border-border bg-muted/50`,children:[(0,H.jsx)(`textarea`,{ref:c,onPaste:d,placeholder:`Long-press here → Paste`,className:`flex-1 h-8 rounded border border-border bg-background text-foreground text-xs px-2 py-1.5 resize-none focus:outline-none focus:ring-1 focus:ring-primary`}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>s(!1),className:`p-1.5 rounded text-muted-foreground active:bg-muted transition-colors`,children:(0,H.jsx)(ae,{size:14})})]}),(0,H.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1.5 overflow-x-auto`,children:[(0,H.jsx)(`button`,{type:`button`,onClick:It?l:u,className:Rt,title:`Paste`,children:(0,H.jsx)(te,{size:14})}),(0,H.jsx)(`button`,{type:`button`,onClick:f,className:Rt,title:`Undo`,children:(0,H.jsx)(p,{size:14})}),(0,H.jsx)(`button`,{type:`button`,onClick:m,className:Rt,title:`Redo`,children:(0,H.jsx)(_,{size:14})}),(0,H.jsx)(`button`,{type:`button`,onClick:r,className:`${Rt} ${n?`text-primary`:``}`,title:n?`Wrapping long lines — tap to scroll sideways instead`:`Wrap long lines`,children:(0,H.jsx)(x,{size:14})}),(0,H.jsx)(`div`,{className:Bt}),(0,H.jsx)(`button`,{type:`button`,onClick:h,className:zt,children:`Tab`}),(0,H.jsx)(`div`,{className:Bt}),Lt.map(e=>(0,H.jsx)(`button`,{type:`button`,onClick:()=>a(e),className:zt,children:e},e))]})]})}var Ht=`ppm.selection.addToChat`,Ut=[{title:`Add to current chat`,newTab:!1},{title:`Add to new chat`,newTab:!0}];function Wt(e,t,n){if(t.startLineNumber===t.endLineNumber&&t.startColumn===t.endColumn)return null;let r=e.getValueInRange(t);if(!r.trim())return null;let i=t.endColumn===1&&t.endLineNumber>t.startLineNumber?t.endLineNumber-1:t.endLineNumber,a=`${n}:${t.startLineNumber}${i===t.startLineNumber?``:`-${i}`}`,o=nt(r);return{label:a,text:`Selected code from ${a}\n${o}${e.getLanguageId()}\n${r}\n${o}`}}function Gt({editor:e,monaco:t,filePath:n,projectName:r}){return(0,V.useEffect)(()=>{let i=t.editor.registerCommand(Ht,(e,t)=>B({...t,asContext:!0})),a=t.languages.registerCodeActionProvider(`*`,{provideCodeActions(t,i){if(t!==e.getModel())return;let a=Wt(t,i,n);if(a)return{actions:Ut.map(({title:e,newTab:t})=>({title:e,command:{id:Ht,title:e,arguments:[{...a,projectName:r,newTab:t}]}})),dispose(){}}}});return()=>{a.dispose(),i.dispose()}},[e,t,n,r]),null}var Kt=`ppm.problems.askAi`,qt=3;function Z(e,t,n,r){let i=t.filter(e=>e.severity>=r.Warning).sort((e,t)=>e.startLineNumber-t.startLineNumber||e.startColumn-t.startColumn);if(i.length===0)return null;let a=1/0,o=0;for(let e of i)a=Math.min(a,e.startLineNumber),o=Math.max(o,e.endLineNumber);let s=Math.max(1,a-qt),c=Math.min(e.getLineCount(),o+qt),l=e.getValueInRange({startLineNumber:s,startColumn:1,endLineNumber:c,endColumn:e.getLineMaxColumn(c)}),u=nt(l),d=[...i.map(e=>{let t=typeof e.code==`string`?e.code:e.code?.value,n=`${e.source??``}${t?`(${t})`:``}`,i=e.severity===r.Error?`error`:`warning`;return`- ${e.startLineNumber}:${e.startColumn} ${i}: ${e.message.replace(/\n/g,`
3
+ `)}${n?` ${n}`:``}`}),``,`Code from ${n}:${s}-${c}`,`${u}${e.getLanguageId()}`,l,u],f=i.length===1?`this problem`:`these problems`;return{markers:i,label:`Problems in ${n}:${a}`,fix:[`Fix ${f} in ${n}:`,...d].join(`
4
+ `),explain:[`Explain ${f} in ${n}, without changing any files:`,...d].join(`
5
+ `)}}function Jt({editor:e,monaco:t,filePath:n,projectName:r}){return(0,V.useEffect)(()=>{let i=t.editor.registerCommand(Kt,(e,t)=>B({...t,newTab:!0,autoSend:!0})),a=t.languages.registerCodeActionProvider(`*`,{provideCodeActions(i,a,o){if(i!==e.getModel())return;let s=Z(i,o.markers,n,t.MarkerSeverity);if(s)return{actions:[[`Fix with AI`,s.fix],[`Explain with AI`,s.explain]].map(([e,t])=>({title:e,kind:`quickfix`,isAI:!0,diagnostics:s.markers,command:{id:Kt,title:e,arguments:[{text:t,label:s.label,projectName:r}]}})),dispose(){}}}});return()=>{a.dispose(),i.dispose()}},[e,t,n,r]),null}function Yt(){let[e,t]=(0,V.useState)([]),[n,r]=(0,V.useState)(new Map),i=(0,V.useCallback)(async()=>{try{t(await T.get(`/api/db/connections`))}catch{}},[]);(0,V.useEffect)(()=>{i()},[i]);let a=(0,V.useCallback)(async(e,n)=>{let r=await T.put(`/api/db/connections/${e}`,n);t(t=>t.map(t=>t.id===e?r:t))},[]),o=(0,V.useCallback)(async e=>{let t=(await T.get(`/api/db/connections/${e}/tables`)).map(t=>({connectionId:e,tableName:t.name,schemaName:t.schema,rowCount:t.rowCount,cachedAt:new Date().toISOString()}));r(n=>new Map(n).set(e,t))},[]);return(0,V.useEffect)(()=>{let e=e=>{let{connectionId:t,refreshTables:n}=e.detail??{};i(),n&&t!==void 0&&o(t).catch(()=>{})};return window.addEventListener(L,e),()=>window.removeEventListener(L,e)},[i,o]),{connections:e,cachedTables:n,updateConnection:a,refreshTables:o}}var Xt=`ppm-lightbulb-gutter`;function Zt(e,t){e.updateOptions({extraEditorClassName:Xt});for(let n of[t.editor.GlyphMarginLane.Left,t.editor.GlyphMarginLane.Right]){let t=document.createElement(`div`);t.style.pointerEvents=`none`,e.addGlyphMarginWidget({getId:()=>`${Xt}.${n}`,getDomNode:()=>t,getPosition:()=>({lane:n,zIndex:-1,range:{startLineNumber:1,startColumn:1,endLineNumber:1,endColumn:1}})})}}var Q=(0,V.lazy)(()=>D(()=>import(`./markdown-renderer-Df3r-CCb.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59]))),Qt=(0,V.lazy)(()=>D(()=>import(`./editor-language-service-6-7mS6_9.js`).then(e=>({default:e.EditorLanguageService})),__vite__mapDeps([60,2,1,3,13,16,9,14,61,6,7,8,10,11,12,15,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,62]))),$t=(0,V.lazy)(()=>D(()=>import(`./csv-preview-CBDMTEsF.js`).then(e=>({default:e.CsvPreview})),__vite__mapDeps([63,2,6,7,1,3,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57]))),en=(0,V.lazy)(()=>D(()=>import(`./image-preview-gOBK9zED.js`).then(e=>({default:e.ImagePreview})),__vite__mapDeps([64,1,2,3,13,65,35]))),tn=(0,V.lazy)(()=>D(()=>import(`./pdf-preview-C9gMtv2a.js`).then(e=>({default:e.PdfPreview})),__vite__mapDeps([66,2,1,3,13,35]))),nn=(0,V.lazy)(()=>D(()=>import(`./video-preview-CjB6wesi.js`).then(e=>({default:e.VideoPreview})),__vite__mapDeps([67,2,1,3,8,9,13,68,44,34,35,69]))),rn=(0,V.lazy)(()=>D(()=>import(`./audio-preview-Dq7qZ_6i.js`).then(e=>({default:e.AudioPreview})),__vite__mapDeps([70,2,1,3,9,13,35,69]))),an=(0,V.lazy)(()=>D(()=>import(`./docx-preview-XSkD2IL6.js`).then(e=>({default:e.DocxPreview})),__vite__mapDeps([71,2,6,7,1,3,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,4])));function on(e){return e.split(`.`).pop()?.toLowerCase()??``}function sn(e){return{js:`javascript`,jsx:`javascript`,ts:`typescript`,tsx:`typescript`,py:`python`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,mdx:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,bash:`shell`,sql:`sql`}[on(e)]??(Re(e)?`dotenv`:`plaintext`)}var cn=(0,V.memo)(function({metadata:e,tabId:t}){let n=e?.filePath,r=e?.projectName,a=e?.inlineContent,o=e?.inlineLanguage,[s,c]=(0,V.useState)(a??null),[l,f]=(0,V.useState)(`utf-8`),[p,m]=(0,V.useState)(!0),[h,ee]=(0,V.useState)(null),[te,ne]=(0,V.useState)(null),re=pe(e=>e.activeTabId),[ie,ae]=(0,V.useState)(0);(0,V.useEffect)(()=>{let e=()=>ae(e=>e+1);return window.addEventListener(`ppm:onboarding-refresh`,e),()=>window.removeEventListener(`ppm:onboarding-refresh`,e)},[]);let[g,_]=(0,V.useState)(!1),v=(0,V.useRef)(null),y=(0,V.useRef)(``),b=(0,V.useRef)(null),[x,ce]=(0,V.useState)(null),{tabs:C,updateTab:w}=pe(Ne(e=>({tabs:e.tabs,updateTab:e.updateTab}))),{wordWrap:le,toggleWordWrap:fe,mobileWordWrap:k,toggleMobileWordWrap:ge}=E(Ne(e=>({wordWrap:e.wordWrap,toggleWordWrap:e.toggleWordWrap,mobileWordWrap:e.mobileWordWrap,toggleMobileWordWrap:e.toggleMobileWordWrap}))),_e=E(e=>e.inlineBlame),ve=E(e=>e.toggleInlineBlame),ye=E(e=>e.lspEnabled),be=E(e=>e.setLspEnabled),A=me(),j=Ae(),M=A?k:le,xe=A?ge:fe,Se=Pe(),N=e?.isUntitled===!0,P=e?.unsavedContent,[Ce,we]=(0,V.useState)(!1),F=C.find(e=>e.id===t),I=n?on(n):``,L=Ve.has(I),R=I===`pdf`,z=I===`docx`,Re=Be.has(I),We=Ue.has(I),Ge=He.has(I),Ke=I===`md`||I===`mdx`,qe=(I===`html`||I===`htm`)&&!N&&a==null,B=e?.aiView,[Ze,$e]=(0,V.useState)(B===`code`?`edit`:`preview`),[et,tt]=(0,V.useState)(0),[nt,rt]=(0,V.useState)(B===`code`),U=qe&&Ze===`preview`,it=I===`csv`,at=e?.language,W=o??at??sn(n??``),G=W===`sql`,[K,ot]=(0,V.useState)(B===`code`?`edit`:`preview`),[st,ct]=(0,V.useState)(`table`),dt=e?.aiOpenAt,ft=(0,V.useRef)(dt);(0,V.useEffect)(()=>{dt===void 0||dt===ft.current||(ft.current=dt,B===`code`?(rt(!0),$e(`edit`),ot(`edit`)):B===`preview`&&($e(`preview`),ot(`preview`),tt(e=>e+1)))},[dt,B]);let{connections:pt,cachedTables:mt,refreshTables:ht,updateConnection:gt}=Yt(),_t=n?`ppm:sql-conn:${n}`:t?`ppm:sql-conn:tab:${t}`:null,[q,vt]=(0,V.useState)(()=>{if(!_t)return null;let e=localStorage.getItem(_t);return e?Number(e):null}),yt=(0,V.useRef)(null),J=(0,V.useMemo)(()=>pt.find(e=>e.id===q)??null,[pt,q]),bt=(0,V.useRef)(`postgres`);bt.current=J?Te(J.type):`postgres`;let xt=a!=null&&(o===`json`||o===`xml`),[St,Ct]=(0,V.useState)(!1),wt=(0,V.useCallback)(()=>{if(a)if(St)c(a),Ct(!1);else{let e=a.trimStart();if(o===`json`)try{c(JSON.stringify(JSON.parse(e),null,2)),Ct(!0)}catch{}else if(o===`xml`){let t=0;c(e.replace(/(>)(<)(\/*)/g,`$1
6
+ $2$3`).split(`
7
+ `).map(e=>{let n=e.trim();n.startsWith(`</`)&&(t=Math.max(0,t-1));let r=` `.repeat(t)+n;return n.startsWith(`<`)&&!n.startsWith(`</`)&&!n.endsWith(`/>`)&&!n.includes(`</`)&&t++,r}).join(`
8
+ `)),Ct(!0)}}},[a,o,St]),Et=(0,V.useCallback)(e=>{vt(e),_t&&localStorage.setItem(_t,String(e)),ht(e).catch(()=>{})},[_t,ht]),Dt=(0,V.useCallback)(n=>{t&&w(t,{metadata:{...e,language:n}})},[t,e,w]),Y=(0,V.useMemo)(()=>{if(!G||!q)return;let e=(mt.get(q)??[]).map(e=>({name:e.tableName,schema:e.schemaName}));if(e.length!==0)return{tables:e,getColumns:async(e,t)=>T.get(`/api/db/connections/${q}/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`)}},[G,q,mt]);(0,V.useEffect)(()=>{if(!x||!Y)return;let e=x.monaco.languages.registerCompletionItemProvider(`sql`,Xe(x.monaco,Y,()=>bt.current,x.editor));return()=>e.dispose()},[x,Y]);let[kt,jt]=(0,V.useState)(null),[Nt,X]=(0,V.useState)(null),[Pt,It]=(0,V.useState)(!1),[Lt,Rt]=(0,V.useState)(``),zt=(0,V.useCallback)(async e=>{if(J){It(!0),X(null),Rt(e);try{jt(Ee(await T.post(`/api/db/connections/${J.id}/query`,{sql:e})))}catch(e){X(e.message),jt(null)}finally{It(!1)}}},[J]),Bt=(0,V.useCallback)(()=>{!J||!Lt||De({target:{kind:`connection`,connectionId:J.id},connectionName:J.name,dbType:J.type,connectionColor:J.color},Lt)},[J,Lt]),Ht=(0,V.useCallback)(()=>{if(!b.current||!J)return;let e=b.current,t=e.getSelection();zt(t&&!t.isEmpty()?e.getModel()?.getValueInRange(t)??e.getValue():e.getValue())},[J,zt]),Ut=typeof window<`u`&&`ontouchstart`in window,Wt=(0,V.useRef)(null),[Kt,qt]=(0,V.useState)(null);(0,V.useEffect)(()=>{if(!Ut)return;let e=window.visualViewport;if(!e)return;let t=()=>{let t=Wt.current;if(!t)return;let n=t.getBoundingClientRect().top;qt(e.height-Math.max(0,n))};return e.addEventListener(`resize`,t),e.addEventListener(`scroll`,t),()=>{e.removeEventListener(`resize`,t),e.removeEventListener(`scroll`,t)}},[Ut]),(0,V.useEffect)(()=>Me(Wt.current,()=>b.current?.layout()),[p,h]);let Z=(0,V.useRef)([]),Xt=(0,V.useRef)(zt);Xt.current=zt,(0,V.useEffect)(()=>()=>{Z.current.forEach(e=>e.dispose()),Z.current=[]},[]),(0,V.useEffect)(()=>{Ge&&t&&w(t,{type:`sqlite`})},[Ge,t,w]);let Q=n?/^(\/|[A-Za-z]:[/\\])/.test(n):!1;(0,V.useEffect)(()=>{if(!r||!n||!t||re!==t||p||h||!x||te!==`${r}:${n}`||a!=null||N||Ge||l===`base64`||U||L||R||z||Re||We||Ke&&K===`preview`||it&&st===`table`)return;let e=x.editor.getDomNode(),i=!!e?.isConnected&&!!e.checkVisibility({checkOpacity:!0,checkVisibilityCSS:!0});i&&ke({type:`file-ready`,projectName:r,tabId:t,visible:i,isRunDocument:/^(readme(?:\..*)?|package\.json)$/i.test(O(n))})},[ie,r,n,t,re,p,h,x,te,a,N,Ge,l,L,R,z,Re,We,Ke,K,it,st,U]),(0,V.useEffect)(()=>{if(a!=null){m(!1);return}if(N){c(P??``),y.current=P??``,m(!1),P&&_(!0);return}if(!n||!Q&&!r)return;if(L||R||z||Re||We){m(!1);return}m(!0),ee(null),ne(null);let e=!1,t=Q?`/api/fs/read?path=${encodeURIComponent(n)}`:`${ue(r)}/files/read?path=${encodeURIComponent(n)}`;return T.get(t).then(t=>{e||(c(t.content),f(t.encoding??`utf-8`),ne(`${r}:${n}`),y.current=t.content,m(!1))}).catch(t=>{e||(ee(t instanceof Error?t.message:`Failed to load file`),m(!1))}),()=>{e=!0,v.current&&clearTimeout(v.current)}},[n,r,L,R,z,Q,N]);let[cn,fn]=(0,V.useState)(!1),pn=(0,V.useCallback)(()=>{if(!n||a!=null||N||!Q&&!r)return;let e=Q?`/api/fs/read?path=${encodeURIComponent(n)}`:`${ue(r)}/files/read?path=${encodeURIComponent(n)}`;fn(!0),T.get(e).then(e=>{c(e.content),y.current=e.content,e.encoding&&f(e.encoding),_(!1),ee(null)}).catch(e=>ee(e instanceof Error?e.message:`Failed to reload file`)).finally(()=>fn(!1))},[n,r,Q,a,N]),mn=(0,V.useRef)(g);mn.current=g,(0,V.useEffect)(()=>{if(!n||!r||a!=null||N)return;let e=e=>{let t=e.detail;if(t.projectName!==r||t.path!==n||mn.current)return;let i=Q?`/api/fs/read?path=${encodeURIComponent(n)}`:`${ue(r)}/files/read?path=${encodeURIComponent(n)}`;T.get(i).then(e=>{e.content!==y.current&&(c(e.content),y.current=e.content,e.encoding&&f(e.encoding))}).catch(()=>{})};return window.addEventListener(`file:changed`,e),()=>window.removeEventListener(`file:changed`,e)},[n,r,Q,a,N]),(0,V.useEffect)(()=>{if(!F||a!=null)return;let t=N?`Untitled-${e?.untitledNumber??1}`:n?O(n):`Untitled`,r=g?`${t} \u25CF`:t;F.title!==r&&w(F.id,{title:r})},[g]);let hn=!N&&a==null&&!!n&&!!r&&!A,gn=Le({editor:x?.editor??null,monaco:x?.monaco??null,projectName:r,filePath:hn?n:void 0,enabled:_e&&hn}),_n=!N&&!Q&&a==null&&!!n&&!!r,vn=ye&&!j,yn=vn&&_n&&!U,[bn,xn]=(0,V.useState)({status:null,diagnostics:[]}),Sn=(0,V.useCallback)(e=>xn(e),[]),Cn=(0,V.useCallback)(async e=>{if(n&&!(!Q&&!r))try{Q?await T.put(`/api/fs/write`,{path:n,content:e}):await T.put(`${ue(r)}/files/write`,{path:n,content:e}),_(!1),gn.refresh(),yn&&r&&n&&D(()=>import(`./use-lsp-B-otjr-6.js`).then(t=>t.notifyLspSave(r,n,e)),__vite__mapDeps([61,2,6,7,1,3,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,62]))}catch{}},[n,r,Q,yn,gn.refresh]);function wn(n){let r=n??``;c(r),y.current=r,_(!0),v.current&&clearTimeout(v.current),N?v.current=setTimeout(()=>{t&&w(t,{metadata:{...e,unsavedContent:y.current}})},2e3):v.current=setTimeout(()=>Cn(y.current),1e3)}let Tn=(0,V.useCallback)(async(e,n)=>{try{if(v.current&&clearTimeout(v.current),await T.put(`/api/fs/write`,{path:e,content:n}),t){let{closeTab:n,openTab:r}=de.getState();n(t),r({type:`editor`,title:O(e),projectId:null,metadata:{filePath:e},closable:!0})}_(!1),we(!1)}catch{}},[t]),$=e?.lineNumber,En=e?.endLine,Dn=e?.revealAt,On=(0,V.useCallback)(()=>{let e=b.current;if(!(!e||!$||$<=0)){if(e.revealLineInCenter($),e.setPosition({lineNumber:$,column:1}),En&&En>=$){let t=e.getModel(),n=t?.getLineCount()??$,r=Math.min(En,n),i=t?.getLineMaxColumn(r)??1;e.setSelection({startLineNumber:$,startColumn:1,endLineNumber:r,endColumn:i})}e.focus()}},[$,En]),kn=(0,V.useRef)(On);kn.current=On,(0,V.useEffect)(()=>{Dn!=null&&On()},[Dn,On]),(0,V.useEffect)(()=>{let e=x?.monaco;e&&lt(vn,e.languages.typescript.typescriptDefaults,e.languages.typescript.javascriptDefaults)},[x,vn]);let An=(0,V.useCallback)((e,t)=>{if(b.current=e,yt.current=t,ce({editor:e,monaco:t}),Zt(e,t),setTimeout(()=>kn.current(),100),N&&e.addCommand(t.KeyMod.CtrlCmd|t.KeyCode.KeyS,()=>we(!0)),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyZ,()=>{let e=E.getState();he()?e.toggleMobileWordWrap():e.toggleWordWrap()}),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyB,()=>E.getState().toggleInlineBlame()),G){e.addAction({id:`run-sql-at-cursor`,label:`Run Statement at Cursor`,keybindings:[t.KeyMod.CtrlCmd|t.KeyCode.Enter],run:e=>{let t=e.getPosition();if(!t)return;let n=Je(e.getValue(),t.lineNumber,bt.current);n&&Xt.current(n)}}),Z.current.forEach(e=>e.dispose()),Z.current=[];let n=e.getModel(),r=e.addCommand(0,(e,t)=>{t&&Xt.current(t)});if(r&&n){let e=t.languages.registerCodeLensProvider(`sql`,{provideCodeLenses:e=>{if(e!==n)return{lenses:[],dispose:()=>{}};let t=[],i=(e,n,i=`▷ Run`)=>{let a=n.trim();a&&t.push({range:{startLineNumber:e,startColumn:1,endLineNumber:e,endColumn:1},command:{id:r,title:i,arguments:[a]}})},a=/^(BEGIN|COMMIT|ROLLBACK|END)(;|\s|$)/i,o=-1,s=[];for(let{sql:t,run:n,startLine:r}of Ye(e.getValue(),bt.current)){let e=/^BEGIN(;|\s|$)/i.test(t),c=/^(COMMIT|ROLLBACK|END)(;|\s|$)/i.test(t);o===-1&&e?(o=r,s=[t]):o>-1?(s.push(t),!c&&!a.test(t)&&i(r,n),c&&(i(o,s.join(`
9
+ `),`▷ Run Transaction`),o=-1,s=[])):i(r,n)}return o>-1&&s.length>1&&i(o,s.join(`
10
+ `),`▷ Run Transaction`),{lenses:t,dispose:()=>{}}}});Z.current.push(e);let i=t.languages.registerFoldingRangeProvider(`sql`,{provideFoldingRanges:e=>{if(e!==n)return[];let r=[],i=e.getLineCount(),a=[];for(let n=1;n<=i;n++){let i=e.getLineContent(n).trim();if(/^BEGIN(;|\s|$)/i.test(i))a.push(n);else if(/^(COMMIT|ROLLBACK|END)(;|\s|$)/i.test(i)&&a.length>0){let e=a.pop();r.push({start:e,end:n,kind:t.languages.FoldingRangeKind.Region})}}return r}});Z.current.push(i)}}},[G]);if(!a&&!N&&(!n||!Q&&!r))return(0,H.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:`No file selected.`});if(p)return(0,H.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-text-secondary`,children:[(0,H.jsx)(S,{className:`size-5 animate-spin`}),(0,H.jsx)(`span`,{className:`text-sm`,children:`Loading file...`})]});if(h)return(0,H.jsx)(`div`,{className:`flex items-center justify-center h-full text-error text-sm`,children:h});if(L)return(0,H.jsx)(V.Suspense,{fallback:(0,H.jsx)(un,{}),children:(0,H.jsx)(en,{filePath:n,projectName:r})});if(R)return(0,H.jsx)(V.Suspense,{fallback:(0,H.jsx)(un,{}),children:(0,H.jsx)(tn,{filePath:n,projectName:r})});if(z)return(0,H.jsx)(V.Suspense,{fallback:(0,H.jsx)(un,{}),children:(0,H.jsx)(an,{filePath:n,projectName:r})});if(Re)return(0,H.jsx)(V.Suspense,{fallback:(0,H.jsx)(un,{}),children:(0,H.jsx)(nn,{filePath:n,projectName:r})});if(We)return(0,H.jsx)(V.Suspense,{fallback:(0,H.jsx)(un,{}),children:(0,H.jsx)(rn,{filePath:n,projectName:r})});if(l===`base64`)return(0,H.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,H.jsx)(d,{className:`size-10 text-text-subtle`}),(0,H.jsx)(`p`,{className:`text-sm`,children:`This file is a binary format and cannot be displayed.`}),(0,H.jsx)(`p`,{className:`text-xs text-text-subtle`,children:n})]});let jn=G?(0,H.jsxs)(`div`,{className:`shrink-0 flex items-center gap-1 px-2 border-l border-border`,children:[(0,H.jsx)(se,{className:`size-3 text-muted-foreground`}),(0,H.jsxs)(`select`,{value:q??``,onChange:e=>{let t=Number(e.target.value);t&&Et(t)},className:`h-5 text-[10px] bg-transparent border border-border rounded px-1 text-foreground outline-none max-w-[140px]`,title:`Select connection for autocomplete`,children:[(0,H.jsx)(`option`,{value:``,children:`Connection…`}),pt.map(e=>(0,H.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,H.jsx)(`button`,{type:`button`,onClick:Ht,disabled:!J,className:`p-0.5 rounded text-muted-foreground hover:text-primary disabled:opacity-30 transition-colors`,title:`Run SQL`,children:(0,H.jsx)(oe,{className:`size-3.5`})}),J&&(0,H.jsx)(`button`,{type:`button`,onClick:()=>gt(J.id,{readonly:J.readonly?0:1}),className:`flex items-center gap-0.5 px-1 py-0.5 rounded text-[10px] transition-colors ${J.readonly?`text-muted-foreground hover:text-foreground`:`bg-destructive/15 text-destructive`}`,title:J.readonly?`Readonly — click to allow writes`:`WRITE mode — click to enable readonly`,children:J.readonly?(0,H.jsx)(i,{className:`size-3`}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(u,{className:`size-3`}),(0,H.jsx)(`span`,{className:`font-medium`,children:`WRITE`})]})})]}):null;return(0,H.jsxs)(`div`,{ref:Wt,"data-onboarding":`file`,className:`flex flex-col h-full w-full overflow-hidden`,style:Kt?{height:`${Kt}px`,maxHeight:`${Kt}px`}:void 0,children:[yn&&x&&n&&r&&(0,H.jsx)(V.Suspense,{fallback:null,children:(0,H.jsx)(Qt,{editor:x.editor,monaco:x.monaco,projectName:r,filePath:n,onState:Sn})}),a!=null&&xt&&(0,H.jsx)(`div`,{className:`flex items-center h-7 border-b border-border bg-background shrink-0 px-2 gap-2`,children:(0,H.jsx)(`button`,{type:`button`,onClick:wt,className:`text-[10px] px-2 py-0.5 rounded border border-border hover:bg-muted transition-colors text-foreground`,children:St?`Raw`:`Beautify`})}),!qe&&n&&r&&t&&(0,H.jsxs)(`div`,{className:`hidden md:flex items-center h-7 border-b border-border bg-background shrink-0`,children:[(0,H.jsx)(Tt,{filePath:n,projectName:r,tabId:t,className:`flex items-center flex-1 min-w-0 overflow-x-auto scrollbar-none px-2 gap-0.5`}),_n&&!j&&(0,H.jsx)(ut,{enabled:vn,onToggle:be,status:bn.status,diagnostics:bn.diagnostics,onInstall:bn.install}),(0,H.jsx)(Mt,{value:W,onChange:Dt}),jn,(0,H.jsx)(Ot,{ext:I,mdMode:K,onMdModeChange:ot,csvMode:st,onCsvModeChange:ct,wordWrap:M,onToggleWordWrap:xe,inlineBlame:_e,onToggleInlineBlame:hn?ve:void 0,blameStale:gn.stale,onRefresh:pn,refreshing:cn,filePath:n,projectName:r,className:`shrink-0 flex items-center gap-1 px-2`})]}),!qe&&a==null&&t&&(N||n&&!r)&&(0,H.jsxs)(`div`,{className:`hidden md:flex items-center h-7 border-b border-border bg-background shrink-0 px-2`,children:[(0,H.jsx)(`span`,{className:`text-xs text-muted-foreground truncate flex-1`,children:N?`Untitled-${e?.untitledNumber??1}`:n?O(n):`Untitled`}),(0,H.jsx)(Mt,{value:W,onChange:Dt}),jn]}),qe&&n&&(0,H.jsx)(Ft,{mode:Ze,onModeChange:e=>{e===`edit`&&rt(!0),$e(e)},onRefresh:()=>{$e(`preview`),tt(e=>e+1)},unsaved:g,onReloadCode:pn,refreshing:cn,breadcrumb:r&&t?(0,H.jsx)(Tt,{filePath:n,projectName:r,tabId:t,className:`flex items-center min-w-0 overflow-x-auto scrollbar-none gap-0.5`}):(0,H.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:O(n)}),filePath:n,projectName:r,wordWrap:M,onToggleWordWrap:xe,inlineBlame:_e,onToggleInlineBlame:hn?ve:void 0,language:W,onLanguageChange:Dt,lspEnabled:vn,onToggleLsp:_n&&!j?be:void 0}),x&&!U&&!(it&&st===`table`)&&!(Ke&&K===`preview`)&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Gt,{editor:x.editor,monaco:x.monaco,filePath:n??`Untitled`,projectName:r}),n&&(0,H.jsx)(Jt,{editor:x.editor,monaco:x.monaco,filePath:n,projectName:r})]}),U&&n&&(0,H.jsx)(At,{filePath:n,projectName:r,revision:et}),U&&!nt?null:it&&st===`table`?(0,H.jsx)(V.Suspense,{fallback:(0,H.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,H.jsx)(S,{className:`size-5 animate-spin text-text-subtle`})}),children:(0,H.jsx)($t,{content:s??``,onContentChange:wn,wordWrap:M})}):Ke&&K===`preview`?(0,H.jsx)(dn,{content:s??``,projectName:r,filePath:n,tabId:t,ready:!p&&!h&&te===`${r}:${n}`&&a==null&&!N}):(0,H.jsx)(`div`,{className:U?`hidden`:`flex-1 overflow-hidden min-h-0`,children:(0,H.jsx)(je,{height:`100%`,language:W,beforeMount:e=>{Oe(e),ze(e)},value:s??``,onChange:a==null?wn:void 0,onMount:An,theme:Se,options:{glyphMargin:!0,lineNumbersMinChars:3,fontSize:14,fontFamily:Ie,fontLigatures:Fe,wordWrap:M?`on`:`off`,minimap:{enabled:!1},scrollBeyondLastLine:!1,automaticLayout:!0,lineNumbers:`on`,folding:!0,bracketPairColorization:{enabled:!0},readOnly:a!=null,quickSuggestions:{other:!0,comments:!1,strings:!1},suggestOnTriggerCharacters:!0,acceptSuggestionOnEnter:`on`,suggestSelection:`first`,parameterHints:{enabled:!0},inlayHints:{enabled:`on`},"semanticHighlighting.enabled":!0,stickyScroll:{enabled:!Ut},peekWidgetDefaultFocus:`editor`},loading:(0,H.jsx)(S,{className:`size-5 animate-spin text-text-subtle`})},W)}),G&&(kt||Nt||Pt)&&(0,H.jsx)(ln,{result:kt,error:Nt,loading:Pt,connName:J?.name,onClose:()=>{jt(null),X(null),It(!1)},onOpenInTab:Bt}),Ut&&!U&&(0,H.jsx)(Vt,{editorRef:b,readOnly:a!=null,wrapOn:M,onToggleWrap:xe}),Ce&&(0,H.jsx)(Qe,{open:Ce,defaultName:`Untitled-${e?.untitledNumber??1}`,content:y.current,onSave:Tn,onCancel:()=>we(!1)})]})});function ln({result:e,error:t,loading:n,connName:r,onClose:i,onOpenInTab:a}){let o=(0,V.useMemo)(()=>e?.changeType===`select`&&e.rows.length>0?{columns:e.columns,rows:e.rows}:null,[e]),s=(0,V.useMemo)(()=>(e?.columns??[]).map(e=>({name:e,type:`text`,nullable:!0,pk:!1,defaultValue:null})),[e?.columns]),[c,l]=(0,V.useState)(250),u=(0,V.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=c,r=e.currentTarget.ownerDocument,i=e=>l(Math.max(80,n+(t-e.clientY))),a=()=>{r.removeEventListener(`mousemove`,i),r.removeEventListener(`mouseup`,a)};r.addEventListener(`mousemove`,i),r.addEventListener(`mouseup`,a)},[c]);return(0,H.jsxs)(`div`,{className:`shrink-0 border-t border-border flex flex-col`,style:{height:c},children:[(0,H.jsx)(`div`,{onMouseDown:u,className:`shrink-0 h-1.5 cursor-row-resize bg-border/50 hover:bg-primary/30 flex items-center justify-center transition-colors`,children:(0,H.jsx)(y,{className:`size-3 text-muted-foreground/50`})}),(0,H.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1 bg-muted/50 border-b border-border shrink-0`,children:[(0,H.jsx)(se,{className:`size-3 text-muted-foreground`}),(0,H.jsxs)(`span`,{className:`text-xs font-medium text-foreground truncate flex-1`,children:[r?`${r} · Results`:`Query Results`,e?.executionTimeMs!=null&&(0,H.jsxs)(`span`,{className:`text-muted-foreground ml-1.5 font-normal`,children:[e.executionTimeMs,`ms`]})]}),(0,H.jsxs)(`button`,{type:`button`,onClick:a,title:`Open in DB Viewer tab`,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,H.jsx)(ne,{className:`size-3`}),(0,H.jsx)(`span`,{className:`hidden sm:inline`,children:`Open in Tab`})]}),(0,H.jsx)(`button`,{type:`button`,onClick:i,title:`Close results`,className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,H.jsx)(ae,{className:`size-3`})})]}),(0,H.jsxs)(`div`,{className:`flex-1 overflow-hidden min-h-0`,children:[n&&(0,H.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,H.jsx)(S,{className:`size-4 animate-spin text-muted-foreground`})}),t&&(0,H.jsx)(`div`,{className:`px-3 py-2 text-xs text-destructive bg-destructive/5`,children:t}),e?.changeType===`modify`&&(0,H.jsxs)(`div`,{className:`px-3 py-2 text-xs text-success`,children:[e.rowsAffected,` row(s) affected`]}),o&&(0,H.jsx)(Ze,{columns:o.columns,rows:o.rows,schema:s,loading:!1,readOnly:!0,connectionName:r}),e?.changeType===`select`&&e.rows.length===0&&(0,H.jsx)(`div`,{className:`px-3 py-2 text-xs text-muted-foreground`,children:`No results`})]})]})}function un(){return(0,H.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,H.jsx)(S,{className:`size-5 animate-spin text-text-subtle`})})}function dn({content:e,...t}){return(0,H.jsx)(V.Suspense,{fallback:(0,H.jsx)(`div`,{className:`animate-pulse h-4 bg-muted rounded m-4`}),children:(0,H.jsx)(U,{...t,children:(0,H.jsx)(Q,{content:e,className:`flex-1 overflow-auto p-4`})})})}export{cn as CodeEditor};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{J as r,Kr as i,Rn as a,_t as o,gr as s,gt as c,hr as l,ht as u,li as d,ln as f,xn as p}from"./icons-BwyIKaTT.js";import{a as m,n as h,r as g}from"./api-client-xQDlhUTu.js";import{n as _}from"./use-is-mobile-VRV9eZy1.js";import{t as v}from"./button-C9ZXWb3b.js";import{a as y,i as b,n as x,o as S,r as C,t as w}from"./dialog-Dn_2tuYa.js";import{t as T}from"./mobile-bottom-sheet-DArbIyrD.js";import{t as E}from"./input-C3oVNCMq.js";import{Er as D,Gi as O,Kn as k,Ui as A,Wi as j}from"./index-DLB3j_P0.js";import{c as M,h as N,i as P,l as F,s as I,t as L,u as R}from"./api-settings-vmIRFNwZ.js";function z(e){return e>=90?`text-error`:e>=70?`text-warning`:`text-success`}function B(e){return e>=90?`bg-error`:e>=70?`bg-warning`:`bg-success`}function V(e){if(!e)return null;let t=null;if(e.resetsInMinutes!=null)t=e.resetsInMinutes;else if(e.resetsInHours!=null)t=Math.round(e.resetsInHours*60);else if(e.resetsAt){let n=new Date(e.resetsAt).getTime()-Date.now();t=n>0?Math.ceil(n/6e4):0}if(t==null)return null;if(t<=0)return`now`;let n=Math.floor(t/1440),r=Math.floor(t%1440/60),i=t%60;return n>0?i>0?`${n}d ${r}h ${i}m`:r>0?`${n}d ${r}h`:`${n}d`:r>0?i>0?`${r}h ${i}m`:`${r}h`:`${i}m`}function H(e){if(!e)return null;let t=new Date(e).getTime();return Number.isFinite(t)?new Date(t).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):null}function U(e){let t=e-Date.now();if(t<=0)return`expired`;let n=Math.ceil(t/6e4),r=Math.floor(n/60),i=Math.floor(r/24);return i>0?`${i}d ${r%24}h`:r>0?`${r}h ${n%60}m`:`${n}m`}function W(e){if(!e)return{label:`unknown`,tip:`No account info available`,color:`text-text-subtle`};if(!e.expiresAt)return{label:`key`,tip:`API key (no expiry)`,color:`text-text-subtle`};if(e.reauthRequired)return{label:`sign in again`,tip:`Anthropic rejected this account's refresh token. Sign in again to restore it.`,color:`text-error`};let t=e.expiresAt*1e3<Date.now();return t&&e.hasRefreshToken?{label:`expired`,tip:`Token expired but has refresh token — will auto-renew`,color:`text-warning`}:t?{label:`expired`,tip:`Token expired, no refresh token`,color:`text-error`}:e.hasRefreshToken?{label:`long-lived`,tip:`OAuth token with refresh — long-lived`,color:`text-success`}:{label:`temp`,tip:`Temporary token without refresh — will expire`,color:`text-warning`}}function G(e){if(!e)return null;let t=Math.round((Date.now()-e)/1e3);if(t<5)return`just now`;if(t<60)return`${t}s ago`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60),i=n%60;return r<24?i>0?`${r}h ${i}m ago`:`${r}h ago`:`${Math.floor(r/24)}d ago`}var K=n();function q({label:e,pct:t,reset:n,resetsAt:r}){let i=H(r);return(0,K.jsxs)(`div`,{className:`space-y-1`,"data-testid":`account-usage-bar`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`span`,{className:`text-xs font-medium text-text-primary`,children:e}),n&&(0,K.jsxs)(A,{children:[(0,K.jsx)(O,{asChild:!0,children:(0,K.jsxs)(`span`,{className:`text-[10px] text-text-subtle cursor-default`,children:[`↻ `,n]})}),(0,K.jsx)(j,{side:`top`,children:i?`Resets ${i}`:`Resets in`})]})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`div`,{className:`flex-1 h-2 rounded-full bg-border overflow-hidden`,children:t!=null&&(0,K.jsx)(`div`,{className:`h-full rounded-full transition-all ${B(t)}`,style:{width:`${Math.min(t,100)}%`}})}),(0,K.jsx)(`span`,{className:`text-xs font-medium tabular-nums w-10 text-right ${t==null?`text-text-subtle`:z(t)}`,children:t==null?`—`:`${t}%`})]})]})}function J({label:e,bucket:t}){return t?(0,K.jsx)(q,{label:e,pct:Math.round(t.utilization*100),reset:V(t),resetsAt:t.resetsAt}):null}function Y({hint:e,className:t,children:n,onClick:r}){return(0,K.jsxs)(A,{children:[(0,K.jsx)(O,{asChild:!0,children:(0,K.jsx)(`button`,{type:`button`,onClick:r,className:[r?`relative cursor-pointer rounded px-1 -mx-1 underline decoration-dotted underline-offset-2 hover:bg-error/10 after:absolute after:-inset-x-2 after:-inset-y-3 after:content-['']`:`cursor-help`,`text-left`,t].filter(Boolean).join(` `),children:n})}),(0,K.jsx)(j,{side:`top`,className:`max-w-[260px] text-xs leading-relaxed`,children:e})]})}function X({description:e,onRefresh:t,refreshing:n,disabled:r,actions:i}){return(0,K.jsxs)(`section`,{className:`space-y-2`,children:[(0,K.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,K.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e}),(0,K.jsx)(v,{variant:`ghost`,size:`icon`,className:`size-8 shrink-0 cursor-pointer`,onClick:t,disabled:r||n,title:`Refresh`,"aria-label":`Refresh accounts`,children:(0,K.jsx)(l,{className:`size-4 ${n?`animate-spin`:``}`})})]}),(0,K.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:i})]})}function Z({message:e,onDismiss:t}){return e?(0,K.jsxs)(`div`,{className:`flex items-start gap-2 text-xs p-2 rounded bg-muted`,role:`status`,children:[(0,K.jsx)(`span`,{className:`flex-1`,children:e}),(0,K.jsx)(`button`,{onClick:t,className:`shrink-0 text-muted-foreground hover:text-foreground cursor-pointer`,"aria-label":`Dismiss message`,children:(0,K.jsx)(d,{className:`size-3.5`})})]}):null}function ee({children:e}){return(0,K.jsx)(`div`,{className:`flex gap-2 overflow-x-auto pb-1 -mx-1 px-1 snap-x snap-mandatory scrollbar-thin`,children:e})}function Q({active:e,flash:t,dense:n,children:r,...i}){return(0,K.jsx)(`div`,{...i,className:[`rounded-md border transition-colors duration-500`,n?`p-2.5 space-y-1.5`:`p-3 space-y-2`,t?`bg-primary/10 border-primary/40`:``,e?`border-primary/30 bg-primary/5`:`border-border/50`,i.className??``].filter(Boolean).join(` `),children:r})}function te({buckets:e}){return e?.length?(0,K.jsx)(K.Fragment,{children:e.map(e=>(0,K.jsx)(J,{label:`Weekly (${e.label})`,bucket:e},e.label))}):null}function ne(e){return new Date(e).toLocaleDateString(void 0,{day:`numeric`,month:`short`})}function re({credits:e}){if(!e)return null;let t=e.available,n=t===0?`No free resets`:`${t} free reset${t===1?``:`s`}`,r=t===0?`Codex has no free rate-limit resets left for this account.`:`Codex has granted this account ${t} free rate-limit reset${t===1?``:`s`}${e.title?` (${e.title})`:``}.${e.nextExpiresAt?` The next one expires on ${new Date(e.nextExpiresAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}.`:``} A "Use reset" button appears here once a limit is reached; a reset moves the weekly reset date, so spending one earlier wastes it.`;return(0,K.jsxs)(Y,{className:`inline-flex items-center gap-1 ${t>0?`text-primary`:``}`,hint:r,children:[(0,K.jsx)(s,{className:`size-3 shrink-0`,"aria-hidden":!0}),n,t>0&&e.nextExpiresAt&&(0,K.jsxs)(`span`,{className:`text-text-subtle`,children:[`· until `,ne(e.nextExpiresAt)]})]})}var ie={readOnly:`min-w-[220px]`,withActions:`min-w-[300px]`};function ae({entry:e,isActive:t,accountInfo:n,onToggle:a,toggling:s,onDelete:c,onExport:d,onViewProfile:p,flash:m,onSelect:h,unselectableReason:g,selecting:_,planLabel:v,dailyGuard:y,onDailyGuardToggle:b,dailyGuardToggling:x,reauthHint:S,onReauth:C,resetCredits:w,resetCreditAction:T,layout:E=`list`}){let{usage:D}=e,M=D.session||D.weekly||D.weeklyOpus||D.weeklySonnet||D.weeklyScoped?.length,N=n?.status??e.accountStatus,P=!!(n&&!n.hasRefreshToken&&n.expiresAt&&n.expiresAt<Math.floor(Date.now()/1e3)),F=W(n),I=!!n?.reauthRequired||!!S,L=n?.grantExpiresAt?n.grantExpiresAt*1e3:null,R=!!L&&L-Date.now()<5*864e5,z=!!n&&(F.label===`temp`||F.label===`unknown`||F.label===`expired`&&!P&&!I),B=L?new Date(L).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):null,V=!!(a||c||d||p),H=P?`Token expired — sign in again`:I?`Sign in again to use this account`:g??null,q=E===`list`?``:E===`grid`?`flex flex-col justify-evenly overflow-hidden min-h-0`:`shrink-0 snap-start ${V?ie.withActions:ie.readOnly}`;return(0,K.jsxs)(Q,{active:t,flash:m,dense:E!==`list`,className:[q,P||I?`opacity-50`:``].filter(Boolean).join(` `)||void 0,"data-testid":`account-card`,"data-account-id":e.accountId,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`span`,{className:`text-sm font-medium truncate flex-1 min-w-0`,children:e.accountLabel??e.accountId.slice(0,8)}),t&&(0,K.jsx)(Y,{className:`text-[10px] text-primary shrink-0 font-medium`,hint:`The next turn will run on this account.`,children:`Active`}),h&&!t&&(0,K.jsxs)(A,{children:[(0,K.jsx)(O,{asChild:!0,children:(0,K.jsx)(`button`,{type:`button`,onClick:()=>h(e.accountId),disabled:_,className:[`shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors cursor-pointer disabled:cursor-wait`,H?`text-text-subtle hover:text-error hover:bg-error/10`:`text-text-secondary hover:text-foreground hover:bg-surface-elevated`].join(` `),children:_?`Switching…`:`Use`})}),(0,K.jsx)(j,{side:`top`,children:H??`Use this account for this chat`})]}),P&&(0,K.jsx)(Y,{className:`text-[10px] text-error shrink-0 font-medium`,hint:`This token has expired and carries no refresh token, so nothing can renew it. Sign in again to replace it.`,onClick:C?()=>C(e.accountId):void 0,children:`Expired`}),I&&!P&&(0,K.jsx)(Y,{className:`text-[10px] text-error shrink-0 font-medium`,hint:S??`Anthropic rejected this account's refresh token, so no turn can run on it. Signing in again is the only thing that restores it.`,onClick:C?()=>C(e.accountId):void 0,children:`Sign in again`}),!e.isOAuth&&!P&&(0,K.jsx)(Y,{className:`text-[10px] text-text-subtle shrink-0`,hint:`A static API key rather than a sign-in: nothing to expire and nothing to renew.`,children:`API key`}),v&&(0,K.jsx)(Y,{className:`text-[10px] uppercase tracking-wide text-text-subtle shrink-0`,hint:`The subscription this account is on. It decides which quota windows the account has — some plans have a weekly limit and no shorter one.`,children:v}),(0,K.jsxs)(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[!P&&p&&n?.profileData&&(0,K.jsxs)(A,{children:[(0,K.jsx)(O,{asChild:!0,children:(0,K.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-foreground hover:bg-surface-elevated transition-colors`,onClick:()=>p(n.profileData,e.accountId),"aria-label":`View profile`,children:(0,K.jsx)(o,{className:`size-4`})})}),(0,K.jsx)(j,{side:`top`,children:`View profile`})]}),!P&&d&&e.isOAuth&&(0,K.jsxs)(A,{children:[(0,K.jsx)(O,{asChild:!0,children:(0,K.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-primary hover:bg-surface-elevated transition-colors`,onClick:()=>d(e.accountId),"aria-label":`Export this account`,children:(0,K.jsx)(u,{className:`size-4`})})}),(0,K.jsx)(j,{side:`top`,children:`Export this account`})]}),!P&&a&&(0,K.jsx)(k,{checked:N!==`disabled`,onCheckedChange:()=>a(e.accountId,N),disabled:s||N===`cooldown`,"aria-label":N===`disabled`?`Enable account`:`Disable account`,className:`cursor-pointer relative before:absolute before:content-[''] before:-inset-y-3 before:-inset-x-0.5`}),c&&(0,K.jsxs)(A,{children:[(0,K.jsx)(O,{asChild:!0,children:(0,K.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-error hover:bg-surface-elevated transition-colors`,onClick:()=>c(e.accountId,e.accountLabel??e.accountId.slice(0,8)),"aria-label":`Remove account`,children:(0,K.jsx)(i,{className:`size-4`})})}),(0,K.jsx)(j,{side:`top`,children:`Remove account`})]})]})]}),M?(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(J,{label:`5-Hour Session`,bucket:D.session}),(0,K.jsx)(J,{label:`Weekly`,bucket:D.weekly}),(0,K.jsx)(J,{label:`Weekly (Opus)`,bucket:D.weeklyOpus}),(0,K.jsx)(J,{label:`Weekly (Sonnet)`,bucket:D.weeklySonnet}),(0,K.jsx)(te,{buckets:D.weeklyScoped})]}):(0,K.jsx)(`p`,{className:`text-xs text-text-subtle`,children:e.isOAuth?`No usage data yet`:`Usage tracking not available for API keys`}),y&&(0,K.jsxs)(`div`,{className:`flex min-h-12 items-center justify-between gap-3 rounded-md border px-2.5 py-1.5 ${y.enabled&&y.state.blocked?`border-error/40 bg-error/5`:`border-border/50 bg-surface/40`}`,children:[(0,K.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium ${y.enabled&&y.state.blocked?`text-error`:`text-text-secondary`}`,children:[(0,K.jsx)(`span`,{children:`Daily guard`}),(0,K.jsxs)(A,{children:[(0,K.jsx)(O,{asChild:!0,children:(0,K.jsx)(`button`,{type:`button`,"aria-label":`About Daily guard`,className:`text-text-subtle hover:text-text-primary cursor-help`,children:(0,K.jsx)(r,{className:`size-3.5`})})}),(0,K.jsx)(j,{side:`top`,className:`max-w-64 text-xs leading-relaxed`,children:`Spreads the weekly quota across five weekdays, adding 20% per weekday. Weekend slots keep the previous cap; unused allowance carries forward. Daily slots start at the reset time and use UTC weekdays.`})]})]}),(0,K.jsx)(`p`,{className:`text-[10px] tabular-nums ${y.enabled&&y.state.blocked?`text-error`:`text-text-subtle`}`,children:y.enabled&&y.state.blocked?`${Math.round(y.state.used*100)}% used / ${Math.round(y.state.cap*100)}% daily cap. New turns paused.`:`Weekday ${y.state.day}/5, ${Math.round(y.state.cap*100)}% daily cap`})]}),b&&(0,K.jsx)(k,{checked:y.enabled,onCheckedChange:b,disabled:x,"aria-label":y.enabled?`Disable Daily guard`:`Enable Daily guard`,className:`cursor-pointer shrink-0`})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 text-[10px] text-text-subtle flex-wrap`,children:[(0,K.jsx)(re,{credits:w}),T,D.lastFetchedAt&&(0,K.jsxs)(Y,{className:`inline-flex items-center gap-1`,hint:`Usage last read from Anthropic on ${new Date(D.lastFetchedAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}. The bars above are only as current as this.`,children:[(0,K.jsx)(l,{className:`size-3 shrink-0`,"aria-hidden":!0}),G(new Date(D.lastFetchedAt).getTime())]}),L&&!I&&(0,K.jsxs)(Y,{className:[`inline-flex items-center gap-1`,R?`text-warning`:``].filter(Boolean).join(` `),hint:`Sign-in stops working on ${B}. Anthropic ends every sign-in on a fixed schedule from the day it was made, whether or not the account gets used — refreshing does not extend it. After that the account fails until you sign in again.`,children:[(0,K.jsx)(f,{className:`size-3 shrink-0`,"aria-hidden":!0}),`sign-in `,U(L)]}),z&&(0,K.jsxs)(Y,{className:F.color,hint:F.tip,children:[`© `,F.label]})]})]})}var $=e(t(),1);function oe(e){let t=e.usage;return[t.session?.utilization,t.weekly?.utilization,t.weeklyOpus?.utilization,t.weeklySonnet?.utilization,...(t.weeklyScoped??[]).map(e=>`${e.label}:${e.utilization}`)].join(`|`)}function se(e=!0){let[t,n]=(0,$.useState)([]),[r,i]=(0,$.useState)([]),[a,o]=(0,$.useState)(null),[s,c]=(0,$.useState)(!0),[l,u]=(0,$.useState)(!1),[d,f]=(0,$.useState)(new Set),[p,m]=(0,$.useState)(null),h=(0,$.useRef)([]),g=(0,$.useRef)(void 0),_=(0,$.useCallback)(async()=>{let e=h.current.length>0;e?u(!0):c(!0);let[t,r,a]=await Promise.allSettled([F(),I(),M()]);if(t.status===`fulfilled`){let r=t.value;if(e){let e=new Map(h.current.map(e=>[e.accountId,oe(e)])),t=new Set(r.filter(t=>e.get(t.accountId)!==oe(t)).map(e=>e.accountId));t.size>0&&(f(t),clearTimeout(g.current),g.current=setTimeout(()=>f(new Set),1500))}h.current=r,n(r)}r.status===`fulfilled`&&i(r.value),a.status===`fulfilled`&&o(a.value?.id??null),c(!1),u(!1)},[]),v=(0,$.useCallback)(async(e,t)=>{m(e);let n=null;try{await N(e,{status:t===`disabled`?`active`:`disabled`})}catch(e){n=e.message}return m(null),await _(),n},[_]);return(0,$.useEffect)(()=>(e&&_(),()=>clearTimeout(g.current)),[e,_]),{usages:t,accounts:r,activeAccountId:a,initialLoading:s,refreshing:l,flashIds:d,reload:_,toggle:v,togglingId:p}}function ce({open:e,onOpenChange:t,onSuccess:n,signInAgainFor:r}){let[i,a]=(0,$.useState)(``),[o,s]=(0,$.useState)(``),[c,l]=(0,$.useState)(!1),[u,d]=(0,$.useState)(null),[f,m]=(0,$.useState)(null),[g,_]=(0,$.useState)(``),[T,O]=(0,$.useState)(!1),[k,A]=(0,$.useState)(`idle`);function j(){m(null),_(``),A(`idle`),d(null)}function M(){t(!1),j(),a(``),s(``),d(null)}async function N(){O(!0),d(null);try{let{url:e,state:t}=await R();m(t),A(`waiting`),window.open(e,`_blank`)}catch(e){d(e.message)}O(!1)}async function F(){if(!(!g.trim()||!f)){O(!0),d(null);try{let e=await P(g.trim(),f);M(),r&&e&&e.id!==r.id?n(`Signed in to ${e.email||e.label||e.id.slice(0,8)}, not ${r.label}. ${r.label} is still signed out — click "Sign in again" on it to fix it.`):n(e?.status===`disabled`?`Signed in. This account is still disabled — enable it to use it.`:`Account connected via OAuth!`)}catch(e){e instanceof h&&e.status===410&&j(),d(e.message)}O(!1)}}async function I(){if(i.trim()){l(!0),d(null);try{let e=await L({apiKey:i.trim(),label:o.trim()||void 0});M(),n(e?.status===`disabled`?`Token updated. This account is still disabled — enable it to use it.`:`Account added!`)}catch(e){d(e.message)}l(!1)}}let z=i.trim()?i.trim().startsWith(`sk-ant-oat`)?`OAuth token (Claude Max/Pro)`:i.trim().startsWith(`sk-ant-api`)?`API key`:`Unknown format`:``;return(0,K.jsx)(w,{open:e,onOpenChange:e=>{e||M()},children:(0,K.jsxs)(x,{className:`sm:max-w-md`,children:[(0,K.jsxs)(y,{children:[(0,K.jsx)(S,{className:`text-sm`,children:r?`Sign in again — ${r.label}`:`Add Claude Account`}),(0,K.jsx)(C,{className:`text-xs leading-relaxed`,children:r?`Log in with the same Claude account. PPM matches it by email and renews the existing card instead of adding a new one.`:`Connect via OAuth (recommended) or paste a token manually.`})]}),(0,K.jsxs)(`div`,{className:`space-y-3`,children:[(0,K.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2`,children:[(0,K.jsx)(`p`,{className:`text-[11px] font-medium`,children:`Recommended: Login with Claude`}),k===`idle`?(0,K.jsx)(v,{size:`sm`,className:`w-full h-8 text-xs`,onClick:N,disabled:T,children:T?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(p,{className:`size-3 animate-spin mr-1`}),` Opening...`]}):`Login with Claude`}):(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Authorize in the opened tab, then paste the code:`}),(0,K.jsx)(E,{placeholder:`Paste code here...`,value:g,onChange:e=>_(e.target.value),className:`text-xs h-8 font-mono`,autoFocus:!0}),(0,K.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,K.jsx)(v,{size:`sm`,className:`flex-1 h-7 text-xs`,onClick:F,disabled:!g.trim()||T,children:T?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(p,{className:`size-3 animate-spin mr-1`}),` Connecting...`]}):`Connect`}),(0,K.jsx)(v,{size:`sm`,variant:`ghost`,className:`h-7 text-xs`,onClick:j,children:`Cancel`})]})]})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`div`,{className:`flex-1 border-t`}),(0,K.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:`or paste token`}),(0,K.jsx)(`div`,{className:`flex-1 border-t`})]}),(0,K.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,K.jsx)(D,{htmlFor:`add-token`,className:`text-xs`,children:`Token`}),(0,K.jsx)(E,{id:`add-token`,type:`password`,placeholder:`sk-ant-...`,value:i,onChange:e=>a(e.target.value),className:`text-xs h-8 font-mono`}),z&&(0,K.jsxs)(`p`,{className:`text-[10px] text-muted-foreground`,children:[`Detected: `,z]})]}),(0,K.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,K.jsx)(D,{htmlFor:`add-label`,className:`text-xs`,children:`Label (optional)`}),(0,K.jsx)(E,{id:`add-label`,placeholder:`e.g. Personal, Work`,value:o,onChange:e=>s(e.target.value),className:`text-xs h-8`})]})]}),u&&(0,K.jsx)(`div`,{className:`text-[11px] p-2 rounded bg-error/10 text-error`,children:u}),(0,K.jsxs)(b,{children:[(0,K.jsx)(v,{size:`sm`,variant:`outline`,className:`text-xs h-7`,onClick:M,children:`Cancel`}),(0,K.jsx)(v,{size:`sm`,className:`text-xs h-7`,onClick:I,disabled:!i.trim()||c,children:c?`Adding...`:`Add Token`})]})]})})}function le(e){return e?.trim()?{free:`ChatGPT Free`,go:`ChatGPT Go`,plus:`ChatGPT Plus`,pro:`ChatGPT Pro`,team:`ChatGPT Team`,business:`ChatGPT Business`,self_serve_business_prolite:`ChatGPT Business`,enterprise:`ChatGPT Enterprise`,edu:`ChatGPT Edu`}[e.trim().toLowerCase()]??e:null}var ue=1440*60*1e3,de=7,fe=5;function pe(e,t=Date.now()){if(!e||e.windowHours!==168)return null;let n=new Date(e.resetsAt).getTime();if(!Number.isFinite(t)||!Number.isFinite(n)||n<=t)return null;let r=n-de*ue;if(t<r)return null;let i=Math.min(de-1,Math.floor((t-r)/ue)),a=0;for(let e=0;e<=i;e++){let t=new Date(r+e*ue).getUTCDay();t!==0&&t!==6&&a++}let o=a/fe;return{day:a,cap:o,used:e.utilization,blocked:e.utilization>=o}}var me=`Codex rejected this account's login (revoked or expired), so no turn can run on it and it is skipped. The usage shown is the last reading. Click to sign in again — the account keeps its settings and chats.`,he=2e3,ge=21e4;function _e(e){let[t,n]=(0,$.useState)([]),[r,i]=(0,$.useState)(`round-robin`),[a,o]=(0,$.useState)({}),[s,c]=(0,$.useState)(!1),[l,u]=(0,$.useState)(new Set),[d,f]=(0,$.useState)(``),[p,h]=(0,$.useState)(``),[_,v]=(0,$.useState)(!1),[y,b]=(0,$.useState)(null),[x,S]=(0,$.useState)(null),[C,w]=(0,$.useState)(!1),[T,E]=(0,$.useState)(null),[D,O]=(0,$.useState)(!1),[k,A]=(0,$.useState)(``),[j,M]=(0,$.useState)(!1),[N,P]=(0,$.useState)(``),[F,I]=(0,$.useState)(!1),[L,R]=(0,$.useState)(!1),[z,B]=(0,$.useState)(null),V=(0,$.useRef)(null),H=(0,$.useRef)(null),U=(0,$.useRef)(0),W=(0,$.useRef)(!1),G=(0,$.useRef)(!1),K=(0,$.useRef)(!1),q=(0,$.useRef)(e);q.current=e;let J=(0,$.useCallback)(async()=>{c(!0);try{let e=await g.get(`/api/codex-accounts`);n(e.accounts),i(e.strategy),g.get(`/api/codex-accounts/usage`).then(o).catch(()=>{})}finally{c(!1)}},[]);(0,$.useEffect)(()=>{J()},[J]);let Y=async()=>{if(!(!d.trim()||G.current||W.current||H.current)){G.current=!0,v(!0),b(null);try{await g.post(`/api/codex-accounts/api-key`,{apiKey:d.trim(),label:p.trim()||void 0}),f(``),h(``),e(),await J()}catch(e){b(e.message)}finally{G.current=!1,v(!1)}}},X=(0,$.useCallback)(()=>{U.current+=1,W.current=!1,K.current=!1,V.current?.(),V.current=null;let e=H.current;H.current=null,e&&g.del(`/api/codex-accounts/${e.method}-login/${e.id}`).catch(()=>{})},[]),Z=(0,$.useCallback)(()=>{X(),S(null),w(!1),E(null),O(!1),A(``),M(!1)},[X]),ee=(0,$.useCallback)((e,t)=>{let n=Date.now()+(t===`browser`?61e4:ge),r=!1,i;V.current=()=>{r=!0,clearTimeout(i)};let a=async()=>{if(r)return;let o=null;try{o=await g.get(`/api/codex-accounts/${t}-login/${e}/status`)}catch{}if(!r){if(o?.state===`done`){Z(),h(``),q.current(),await J();return}if(o?.state===`error`||Date.now()>n){Z(),b(o?.state===`error`?o.error:`${t===`browser`?`Browser`:`Device`} login timed out.`);return}i=setTimeout(a,he)}};a()},[Z,J]);(0,$.useEffect)(()=>X,[X]);let Q=async(e,t)=>{if(W.current||H.current||G.current)return;W.current=!0;let n=++U.current;O(!0),b(null);try{let r=await g.post(`/api/codex-accounts/${e}-login`,{label:p.trim()||void 0,...t?{accountId:t}:{}});if(n!==U.current){g.del(`/api/codex-accounts/${e}-login/${r.id}`).catch(()=>{});return}H.current={id:r.id,method:e},e===`device`?(S(r),w(!0)):E(r),ee(r.id,e)}catch(e){n===U.current&&b(e.message)}finally{n===U.current&&(W.current=!1,O(!1))}};return{accounts:t,strategy:r,usages:a,loading:s,apiKey:d,setApiKey:f,label:p,setLabel:h,adding:_,err:y,setErr:b,device:x,deviceWaiting:C,backupPassword:N,setBackupPassword:P,exporting:F,importing:L,msg:z,setMsg:B,toggling:l,load:J,addApiKey:Y,startDevice:e=>Q(`device`,e),startBrowser:e=>Q(`browser`,e),browser:T,loginStarting:D,callbackUrl:k,setCallbackUrl:A,submittingCallback:j,submitCallback:async()=>{let e=H.current;if(e?.method!==`browser`||!k.trim()||K.current)return;let t=U.current;K.current=!0,M(!0),b(null);let n=k.trim();A(``);try{await g.post(`/api/codex-accounts/browser-login/${e.id}/callback`,{callbackUrl:n})}catch(e){t===U.current&&b(e.message)}finally{t===U.current&&(K.current=!1,M(!1))}},cancelLogin:Z,remove:async e=>{await g.del(`/api/codex-accounts/${e}`),await J()},toggle:async(e,t)=>{let n=t===`disabled`?`active`:`disabled`;u(t=>new Set(t).add(e)),b(null);try{await g.patch(`/api/codex-accounts/${e}`,{status:n}),await J()}catch(e){b(e.message||`Could not change the account`)}finally{u(t=>{let n=new Set(t);return n.delete(e),n})}},toggleDailyGuard:async(e,t)=>{u(t=>new Set(t).add(e)),b(null);try{await g.patch(`/api/codex-accounts/${e}`,{dailyGuardEnabled:!t}),await J()}catch(e){b(e.message||`Could not change Daily guard`)}finally{u(t=>{let n=new Set(t);return n.delete(e),n})}},changeStrategy:async e=>{i(e);try{await g.put(`/api/codex-accounts/strategy`,{strategy:e})}catch{}},doExport:async()=>{if(!N.trim()){b(`Set a backup password first.`);return}I(!0),b(null),B(null);try{let t={"Content-Type":`application/json`},n=m();n&&(t.Authorization=`Bearer ${n}`);let r=await fetch(`/api/codex-accounts/export`,{method:`POST`,headers:t,body:JSON.stringify({password:N})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`Export failed: ${r.status}`)}let i=await r.text(),a=new Blob([i],{type:`application/json`}),o=document.createElement(`a`);o.href=URL.createObjectURL(a),o.download=`ppm-codex-accounts-backup.json`,o.click(),URL.revokeObjectURL(o.href),B(`Backup downloaded.`),e()}catch(e){b(e.message)}finally{I(!1)}},doImport:async t=>{if(!N.trim()){b(`Enter the backup password first.`);return}R(!0),b(null),B(null);try{let n=await t.text(),r=await g.post(`/api/codex-accounts/import`,{data:n,password:N});B(`Imported ${r.imported}${r.skipped?`, skipped ${r.skipped}`:``}.`),e(),await J()}catch(e){b(e.message)}finally{R(!1)}}}}function ve({open:e,onOpenChange:t,label:n,onLabelChange:r,apiKey:i,onApiKeyChange:o,adding:s,onAddApiKey:l,deviceWaiting:u,onStartDevice:d,device:m,error:h,browser:g,onStartBrowser:_,loginStarting:T,callbackUrl:O,onCallbackUrlChange:k,submittingCallback:A,onSubmitCallback:j,reloginLabel:M}){let N=T||u||!!g||s;return(0,K.jsx)(w,{open:e,onOpenChange:t,children:(0,K.jsxs)(x,{className:`sm:max-w-md max-h-[90dvh] overflow-y-auto`,children:[(0,K.jsxs)(y,{children:[(0,K.jsx)(S,{className:`text-sm`,children:M?`Sign in again — ${M}`:`Add Codex Account`}),(0,K.jsx)(C,{className:`text-xs leading-relaxed`,children:M?`Sign in with ChatGPT to renew this account. It keeps its name, its settings and the chats bound to it.`:`Choose browser login, a device code, or an OpenAI API key.`})]}),(0,K.jsxs)(`div`,{className:`space-y-3`,children:[!M&&(0,K.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,K.jsx)(D,{htmlFor:`codex-label`,className:`text-xs`,children:`Label (optional)`}),(0,K.jsx)(E,{id:`codex-label`,placeholder:`e.g. Personal, Work`,value:n,onChange:e=>r(e.target.value),disabled:N,className:`text-xs`})]}),(0,K.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2`,children:[(0,K.jsx)(`p`,{className:`text-[11px] font-medium`,children:`Browser login`}),(0,K.jsxs)(v,{size:`sm`,className:`w-full cursor-pointer gap-1.5`,onClick:_,disabled:N,children:[(0,K.jsx)(c,{className:`size-4`}),` Sign in with browser`]}),g&&(0,K.jsxs)(`div`,{className:`space-y-2 text-xs`,children:[(0,K.jsxs)(`a`,{href:g.authUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-primary hover:underline`,children:[(0,K.jsx)(c,{className:`size-3`}),` Open ChatGPT sign-in`]}),(0,K.jsx)(`p`,{children:`Sign in, then copy the full localhost callback URL from the address bar and paste it below. On a phone, copy it even if the page fails to load.`}),(0,K.jsx)(D,{htmlFor:`codex-callback-url`,children:`Callback URL`}),(0,K.jsx)(E,{id:`codex-callback-url`,type:`password`,autoComplete:`off`,spellCheck:!1,placeholder:`http://localhost:.../auth/callback?...`,value:O,onChange:e=>k(e.target.value),disabled:A}),(0,K.jsxs)(v,{size:`sm`,onClick:j,disabled:!O.trim()||A,children:[A&&(0,K.jsx)(p,{className:`size-3 animate-spin`}),` Submit callback URL`]}),(0,K.jsxs)(`p`,{role:`status`,className:`flex items-center gap-1.5 text-muted-foreground`,children:[(0,K.jsx)(p,{className:`size-3 animate-spin`}),` Waiting for authorization. This may complete automatically on this computer.`]})]})]}),(0,K.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2`,children:[(0,K.jsx)(`p`,{className:`text-[11px] font-medium`,children:`Device code`}),(0,K.jsx)(v,{size:`sm`,className:`w-full cursor-pointer gap-1.5`,onClick:d,disabled:N,children:u?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(p,{className:`size-4 animate-spin`}),` Waiting for authorization...`]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(a,{className:`size-4`}),` Sign in with device code`]})}),m&&(0,K.jsxs)(`div`,{className:`rounded-md border border-primary/40 bg-primary/10 p-2.5 space-y-1.5`,children:[(0,K.jsx)(`p`,{className:`text-[11px]`,children:`Enter this code to authorize:`}),(0,K.jsx)(`div`,{className:`font-mono text-lg tracking-widest`,children:m.userCode}),(0,K.jsxs)(`a`,{href:m.verificationUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-primary hover:underline text-[11px]`,children:[(0,K.jsx)(c,{className:`size-3`}),` `,m.verificationUrl]})]})]}),!M&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`div`,{className:`flex-1 border-t`}),(0,K.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:`or paste an API key`}),(0,K.jsx)(`div`,{className:`flex-1 border-t`})]}),(0,K.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,K.jsx)(D,{htmlFor:`codex-api-key`,className:`text-xs`,children:`OpenAI API key`}),(0,K.jsx)(E,{id:`codex-api-key`,type:`password`,placeholder:`sk-...`,value:i,onChange:e=>o(e.target.value),className:`text-xs font-mono`})]})]})]}),T&&(0,K.jsx)(`p`,{role:`status`,className:`text-xs`,children:`Starting login...`}),h&&(0,K.jsx)(`div`,{role:`alert`,className:`text-[11px] p-2 rounded bg-error/10 text-error`,children:h}),(0,K.jsxs)(b,{children:[(0,K.jsx)(v,{size:`sm`,variant:`outline`,className:`text-xs cursor-pointer`,onClick:()=>t(!1),children:`Cancel`}),!M&&(0,K.jsxs)(v,{size:`sm`,className:`text-xs cursor-pointer gap-1.5`,onClick:l,disabled:!i.trim()||N,children:[s?(0,K.jsx)(p,{className:`size-3.5 animate-spin`}):(0,K.jsx)(f,{className:`size-3.5`}),`Add key`]})]})]})})}function ye({account:e,onClose:t,onDone:n}){let r=_e(()=>{n(),t()});return(0,K.jsx)(ve,{open:!0,onOpenChange:e=>{e||(r.cancelLogin(),t())},reloginLabel:e.label,label:r.label,onLabelChange:r.setLabel,apiKey:``,onApiKeyChange:()=>{},adding:!1,onAddApiKey:()=>{},deviceWaiting:r.deviceWaiting,onStartDevice:()=>void r.startDevice(e.id),device:r.device,browser:r.browser,onStartBrowser:()=>void r.startBrowser(e.id),loginStarting:r.loginStarting,callbackUrl:r.callbackUrl,onCallbackUrlChange:r.setCallbackUrl,submittingCallback:r.submittingCallback,onSubmitCallback:()=>void r.submitCallback(),error:r.err})}function be(e){let t=e=>Math.round((e??0)*100)>=100;return t(e.session?.utilization)||t(e.weekly?.utilization)}function xe(e){return be(e)&&(e.resetCredits?.available??0)>0}var Se={reset:e=>`${e}: limits reset to 0%. The weekly reset date now counts from your next use.`,nothingToReset:e=>`${e}: nothing needed resetting, so the reset was kept.`,noCredit:e=>`${e} has no free reset left.`,alreadyRedeemed:e=>`${e}: that reset had already been used.`};function Ce(e){return e?new Date(e).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):null}function we({account:e,usage:t,onDone:n}){let r=_(),[i,a]=(0,$.useState)(!1),[o,c]=(0,$.useState)(!1);if(!xe(t))return null;let l=t.resetCredits;async function u(){c(!0);try{let t=await g.post(`/api/codex-accounts/${e.id}/reset-credit`);n(Se[t.outcome]?.(e.label)??`${e.label}: ${t.outcome}`)}catch(e){n(e.message||`Could not use the reset`)}finally{c(!1),a(!1)}}let d=Ce(t.weekly?.resetsAt),f=Ce(l.nextExpiresAt),m=(0,K.jsxs)(`div`,{className:`space-y-3`,"data-testid":`codex-reset-credit-confirm`,children:[(0,K.jsxs)(`p`,{className:`text-sm`,children:[`Use 1 of `,(0,K.jsx)(`span`,{className:`font-medium`,children:e.label}),`'s `,l.available,` free reset`,l.available===1?``:`s`,`?`]}),(0,K.jsxs)(`ul`,{className:`text-xs text-text-secondary space-y-1.5 list-disc pl-4`,children:[(0,K.jsxs)(`li`,{children:[l.title??`Full reset`,`: the 5-hour and weekly usage go back to 0% now.`]}),(0,K.jsxs)(`li`,{children:[`The weekly reset date moves: the next one is about 7 days after you continue using Codex`,d?`, not ${d} as now`:``,`. You do not also get that one.`]}),f&&(0,K.jsxs)(`li`,{children:[`This spends the reset that expires first (`,f,`).`]})]}),(0,K.jsxs)(`div`,{className:`flex flex-col-reverse md:flex-row gap-2 md:justify-end pt-1`,children:[(0,K.jsx)(v,{variant:`outline`,onClick:()=>a(!1),disabled:o,className:`min-h-11`,children:`Keep it`}),(0,K.jsxs)(v,{onClick:()=>void u(),disabled:o,className:`min-h-11 gap-1.5`,children:[o?(0,K.jsx)(p,{className:`size-4 animate-spin`}):(0,K.jsx)(s,{className:`size-4`}),`Use reset`]})]})]});return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(v,{size:`sm`,variant:`outline`,className:`min-h-11 md:min-h-0 md:h-7 gap-1 px-2 text-[11px] cursor-pointer border-primary/40 text-primary`,onClick:()=>a(!0),disabled:o,children:[(0,K.jsx)(s,{className:`size-3.5`}),` Use reset`]}),i&&(r?(0,K.jsx)(T,{open:!0,onClose:()=>{o||a(!1)},children:(0,K.jsxs)(`div`,{className:`px-4 pb-4`,children:[(0,K.jsx)(`h2`,{className:`text-base font-semibold mb-3`,children:`Use a free reset`}),m]})}):(0,K.jsx)(w,{open:!0,onOpenChange:e=>{!e&&!o&&a(!1)},children:(0,K.jsxs)(x,{className:`sm:max-w-sm`,children:[(0,K.jsx)(y,{children:(0,K.jsx)(S,{className:`text-sm`,children:`Use a free reset`})}),m]})}))]})}export{Y as _,_e as a,G as b,ce as c,re as d,te as f,Z as g,X as h,me as i,se as l,Q as m,ye as n,pe as o,ee as p,ve as r,le as s,we as t,ae as u,J as v,V as x,q as y};
@@ -0,0 +1,19 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{xn as r}from"./icons-BwyIKaTT.js";import{o as i,r as a}from"./api-client-xQDlhUTu.js";import{t as o}from"./settings-store-B4mLp19V.js";import{n as s}from"./use-is-mobile-VRV9eZy1.js";import{J as c,Y as l,hi as u,oi as d}from"./index-DLB3j_P0.js";import{t as f}from"./use-monaco-theme-BiDXRJ4e.js";import"./editor-font-CdxKRKX-.js";import{n as p,r as m}from"./monaco-dotenv-language-IZxwhtNA.js";var h=e(t(),1),g=n();function _(e){return{js:`javascript`,jsx:`javascript`,ts:`typescript`,tsx:`typescript`,py:`python`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,mdx:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,bash:`shell`,go:`go`,rs:`rust`,java:`java`,rb:`ruby`,php:`php`,swift:`swift`,sql:`sql`,xml:`xml`,toml:`toml`}[e.split(`.`).pop()?.toLowerCase()??``]??(p(e)?`dotenv`:`plaintext`)}function v(e){let t=e.split(`
2
+ `),n=[],r=0,i=0;for(;r<t.length;){let e=t[r];if(e.startsWith(`<<<<<<<`)){let a=r,o=e.substring(7).trim(),s=[];for(r++;r<t.length&&!t[r].startsWith(`=======`);)s.push(t[r]),r++;if(r>=t.length)break;let c=r,l=[];for(r++;r<t.length&&!t[r].startsWith(`>>>>>>>`);)l.push(t[r]),r++;if(r>=t.length)break;let u=t[r].substring(7).trim();n.push({id:i++,startLine:a+1,separatorLine:c+1,endLine:r+1,currentContent:s.join(`
3
+ `),incomingContent:l.join(`
4
+ `),currentLabel:o,incomingLabel:u})}r++}return n}function y({metadata:e}){let t=e?.filePath,n=e?.projectName,[p,y]=(0,h.useState)(null),[x,S]=(0,h.useState)(!0),[C,w]=(0,h.useState)(null),[T,E]=(0,h.useState)(0),D=(0,h.useRef)(null),O=(0,h.useRef)(null),k=(0,h.useRef)([]),A=(0,h.useRef)(null),{wordWrap:j,mobileWordWrap:M}=o(d(e=>({wordWrap:e.wordWrap,mobileWordWrap:e.mobileWordWrap}))),N=s()?M:j,P=f(),F=(0,h.useRef)(null),[I,L]=(0,h.useState)();(0,h.useEffect)(()=>{let e=F.current;if(!e)return;let t=new ResizeObserver(([e])=>{e&&L(Math.floor(e.contentRect.height))});return t.observe(e),()=>t.disconnect()},[x,C]),(0,h.useEffect)(()=>u(F.current,()=>D.current?.layout()),[x,C]),(0,h.useEffect)(()=>{!t||!n||(S(!0),a.get(`${i(n)}/files/read?path=${encodeURIComponent(t)}`).then(e=>{y(e.content),S(!1)}).catch(e=>{w(e.message||`Failed to load file`),S(!1)}))},[t,n]);let R=(0,h.useCallback)(()=>{let e=D.current,t=O.current;if(!e||!t)return;let n=v(e.getModel()?.getValue()||``);E(n.length);for(let t of k.current)e.removeContentWidget(t);if(k.current=[],A.current&&A.current.clear(),n.length===0)return;let r=[];for(let e of n)r.push({range:new t.Range(e.startLine,1,e.startLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`,glyphMarginClassName:`conflict-glyph-current`}}),r.push({range:new t.Range(e.separatorLine,1,e.separatorLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`}}),r.push({range:new t.Range(e.endLine,1,e.endLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`,glyphMarginClassName:`conflict-glyph-incoming`}}),e.separatorLine-e.startLine>1&&r.push({range:new t.Range(e.startLine+1,1,e.separatorLine-1,1),options:{isWholeLine:!0,className:`conflict-current-content`}}),e.endLine-e.separatorLine>1&&r.push({range:new t.Range(e.separatorLine+1,1,e.endLine-1,1),options:{isWholeLine:!0,className:`conflict-incoming-content`}});A.current=e.createDecorationsCollection(r);for(let r of n){let n=`conflict-widget-${r.id}`,i=document.createElement(`div`);i.className=`conflict-actions`,i.innerHTML=`<span class="conflict-label">Current Change (${b(r.currentLabel||`HEAD`)})</span><button class="conflict-btn conflict-btn-current" data-action="current">Accept Current</button><button class="conflict-btn conflict-btn-incoming" data-action="incoming">Accept Incoming</button><button class="conflict-btn conflict-btn-both" data-action="both">Accept Both</button>`,i.addEventListener(`click`,e=>{let t=e.target.closest(`[data-action]`);if(!t)return;let n=t.getAttribute(`data-action`);z(r.id,n)});let a={getId:()=>n,getDomNode:()=>i,getPosition:()=>({position:{lineNumber:r.startLine,column:1},preference:[t.editor.ContentWidgetPositionPreference.ABOVE]})};e.addContentWidget(a),k.current.push(a)}},[]),z=(0,h.useCallback)((e,t)=>{let n=D.current,r=O.current;if(!n||!r)return;let i=n.getModel();if(!i)return;let a=v(i.getValue()).find(t=>t.id===e);if(!a)return;let o;switch(t){case`current`:o=a.currentContent;break;case`incoming`:o=a.incomingContent;break;case`both`:o=a.currentContent+`
5
+ `+a.incomingContent;break}let s=new r.Range(a.startLine,1,a.endLine+1,1);i.pushEditOperations([],[{range:s,text:o+`
6
+ `}],()=>null),B(i.getValue()),setTimeout(()=>R(),50)},[R]),B=(0,h.useCallback)(async e=>{if(!(!t||!n))try{await a.put(`${i(n)}/files/write`,{path:t,content:e})}catch(e){console.error(`[conflict-editor] save failed:`,e)}},[t,n]),V=(e,t)=>{D.current=e,O.current=t;let n=e.getDomNode()?.ownerDocument??document;if(!n.getElementById(`conflict-editor-styles`)){let e=n.createElement(`style`);e.id=`conflict-editor-styles`,e.textContent=`
7
+ .conflict-current-content { background: color-mix(in srgb, var(--color-success) 10%, transparent) !important; }
8
+ .conflict-incoming-content { background: color-mix(in srgb, var(--color-primary) 10%, transparent) !important; }
9
+ .conflict-marker-line { background: rgba(100, 100, 100, 0.15) !important; font-style: italic; }
10
+ .conflict-glyph-current { background: var(--color-success) !important; }
11
+ .conflict-glyph-incoming { background: var(--color-primary) !important; }
12
+ .conflict-actions { display: flex; gap: 8px; align-items: center; padding: 2px 0; font-size: 12px; font-family: system-ui; }
13
+ .conflict-label { color: var(--color-success); font-weight: 600; margin-right: 8px; }
14
+ .conflict-btn { padding: 1px 8px; border-radius: 3px; border: none; cursor: pointer; font-size: 11px; opacity: 0.9; }
15
+ .conflict-btn:hover { opacity: 1; }
16
+ .conflict-btn-current { color: var(--color-success); background: color-mix(in srgb, var(--color-success) 15%, transparent); }
17
+ .conflict-btn-incoming { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 15%, transparent); }
18
+ .conflict-btn-both { color: #a855f7; background: rgba(168, 85, 247, 0.15); }
19
+ `,n.head?.appendChild(e)}R()},H=t?.split(/[\\/]/).pop()??`unknown`,U=_(H);return x?(0,g.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,g.jsx)(r,{className:`size-6 animate-spin text-primary`})}):C?(0,g.jsx)(`div`,{className:`flex items-center justify-center h-full text-destructive`,children:C}):(0,g.jsxs)(`div`,{className:`h-full w-full flex flex-col`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 text-xs border-b border-border bg-muted/50 flex-shrink-0`,children:[(0,g.jsx)(`span`,{className:`font-medium`,children:H}),(0,g.jsx)(`span`,{className:`text-muted-foreground`,children:`—`}),T>0?(0,g.jsxs)(`span`,{className:`text-destructive font-medium`,children:[T,` conflict`,T===1?``:`s`,` remaining`]}):(0,g.jsx)(`span`,{className:`text-success font-medium`,children:`All conflicts resolved`})]}),(0,g.jsx)(`div`,{ref:F,className:`flex-1 min-h-0`,children:p!==null&&I&&(0,g.jsx)(l,{height:I,language:U,beforeMount:e=>{c(e),m(e)},value:p,onMount:V,theme:P,options:{fontSize:14,fontFamily:`'Monaspace Argon', 'Monaspace Argon Var', Consolas, 'Cascadia Mono', Menlo, 'DejaVu Sans Mono', 'Courier New', monospace`,fontLigatures:`'calt', 'liga', 'ss01', 'ss02', 'ss03', 'ss04', 'ss05', 'ss06', 'ss07', 'ss08', 'ss09'`,wordWrap:N?`on`:`off`,glyphMargin:!0,readOnly:!1,automaticLayout:!0,scrollBeyondLastLine:!1,minimap:{enabled:!1}}})})]})}function b(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}export{y as ConflictEditor};
@@ -0,0 +1,4 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{M as r,N as i,P as a,j as o}from"./vendor-ui-BTSIXzhZ.js";import{A as s,M as c,P as l,li as u,n as d,pt as f,xn as p}from"./icons-BwyIKaTT.js";import{k as m,n as h,r as g}from"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as _}from"./utils-Bslrbb-G.js";import{n as v}from"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import{t as y}from"./tab-store-D5I52eLN.js";import{n as b}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import{t as x}from"./file-icons-JInFtBVl.js";import{t as S}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import"./fs-api-CFtQzsIJ.js";import"./format-file-meta-DdYtk07C.js";import"./input-C3oVNCMq.js";import{i as C,r as ee,t as te}from"./use-db-driver-installed-anzWkGi5.js";import{c as w,d as ne,f as T,h as re,i as ie,l as ae,m as oe,p as se,s as ce,u as le}from"./db-sidebar-reveal-_qw0CliT.js";import{n as E,r as ue,t as D}from"./db-types-CNhENouW.js";import"./scroll-area-DOlQJGZp.js";import{$n as de,_ as O,c as fe,d as k,f as A,g as j,h as M,l as N,m as P,p as F,u as I}from"./index-DLB3j_P0.js";var L=e(t(),1),R={postgres:5432,mysql:3306,mariadb:3306},pe={postgres:`postgres`,mysql:`root`,mariadb:`root`},me={postgres:`/var/run/postgresql`,mysql:`/run/mysqld/mysqld.sock`,mariadb:`/run/mysqld/mysqld.sock`},z={postgres:`postgres`,mysql:`mysql`,mariadb:`mariadb`},he={postgres:`postgres`,postgresql:`postgres`,mysql:`mysql`,mariadb:`mariadb`},ge={postgres:[`sslmode`,`ssl`],mysql:[`ssl-mode`,`sslmode`,`sslMode`,`ssl`],mariadb:[`ssl-mode`,`sslmode`,`sslMode`,`ssl`]},_e=/^([A-Za-z][A-Za-z0-9+.-]*):\/\/(.*)$/s;function ve(e){return/^file:/i.test(e)?!0:e.includes(`://`)?!1:/^(~|\/|\.{1,2}[/\\]|[A-Za-z]:[\\/])/.test(e)||/\.(db|sqlite3?|db3)$/i.test(e)}function B(e){try{return decodeURIComponent(e)}catch{return e}}var V=(e=`PPM cannot read this as a URL.`)=>({kind:`error`,error:e});function H(e){let t=String(e??``).trim();if(!t)return{kind:`empty`};if(ve(t))return{kind:`file`,path:t.replace(/^file:(\/\/)?/i,``)};let n=_e.exec(t);if(!n)return V();let r=n[1],i=he[r.toLowerCase()];if(!i)return V(`${r}:// is not a database PPM supports yet.`);let a=n[2],o=a.indexOf(`#`);o>=0&&(a=a.slice(0,o));let s=``,c=a.indexOf(`?`);c>=0&&(s=a.slice(c+1),a=a.slice(0,c));let l=a.indexOf(`/`),u=l>=0?a.slice(0,l):a,d=l>=0?a.slice(l+1):``,f=u.lastIndexOf(`@`),p=f>=0?u.slice(0,f):``,m=f>=0?u.slice(f+1):u,h=p.indexOf(`:`),g=B(h>=0?p.slice(0,h):p),_=h>=0?B(p.slice(h+1)):``,v=m,y=``;if(m.startsWith(`[`)){let e=m.indexOf(`]`);if(e<0)return V();v=m.slice(1,e);let t=m.slice(e+1);if(t&&!t.startsWith(`:`))return V();y=t.slice(1)}else if(!m.includes(`,`)){let e=m.lastIndexOf(`:`);if(e>=0&&(v=m.slice(0,e),y=m.slice(e+1)),v.includes(`:`))return V(`The server name has a colon in it. An IPv6 address goes in brackets, like [::1]:5432.`)}let b=null;if(y){let e=/^\d{1,5}$/.test(y)?Number(y):NaN;if(!(e>=1&&e<=65535))return V(`The port must be a number from 1 to 65535.`);b=e}v=B(v);let x=``;v.startsWith(`/`)&&(x=v,v=``);let S=ge[i],C=null,ee=[];for(let e of s.split(`&`)){if(!e)continue;let t=e.indexOf(`=`),n=B(t>=0?e.slice(0,t):e),r=t>=0?B(e.slice(t+1)):``,a=i===`postgres`?n===`host`&&r.startsWith(`/`):n===`socket`||n===`socketPath`;if(a&&!x)x=r;else if(a)continue;else !C&&S.includes(n)?C={name:n,value:r}:ee.push([n,r])}return x&&(v=``),{kind:`url`,parts:{type:i,scheme:r,host:v,port:b,socket:x,user:g,password:_,database:B(d.split(`/`)[0]??``),ssl:C,params:ee}}}function U(e){return!e.host&&!e.socket?`The URL has no server name.`:null}function ye(e){return encodeURIComponent(e).replace(/%2F/gi,`/`).replace(/%3A/gi,`:`)}function be(e){return e.includes(`:`)&&!e.includes(`,`)&&!e.startsWith(`[`)?`[${e}]`:e}function W(e,t={}){let n=t.password===!1?``:e.password,r=encodeURIComponent,i=e.user||n?`${r(e.user)}${n?`:${r(n)}`:``}@`:``,a=e.socket?``:`${be(e.host)}${e.port==null?``:`:${e.port}`}`,o=[];e.socket&&o.push([e.type===`postgres`?`host`:`socket`,e.socket]),e.ssl&&o.push([e.ssl.name,e.ssl.value]),o.push(...e.params);let s=o.length?`?${o.map(([e,t])=>`${ye(e)}=${ye(t)}`).join(`&`)}`:``;return`${e.scheme}://${i}${a}/${r(e.database)}${s}`}var xe=/^(require|required|verify-ca|verify_ca|verify-full|verify-identity|verify_identity|no-verify|true|1)$/i;function G(e){let t=e.ssl?.value??``,n=xe.test(t);return{useSsl:n,rejectUnauthorized:n&&/^verify/i.test(t)}}function K(e,t,n){let r=G(e);if(r.useSsl===t&&r.rejectUnauthorized===(t&&n))return e;if(!t)return{...e,ssl:null};let i=e.type===`postgres`,a=i?n?`verify-full`:`require`:n?`VERIFY_IDENTITY`:`REQUIRED`;return{...e,ssl:{name:i?`sslmode`:`ssl-mode`,value:a}}}var Se={postgres:`PostgreSQL`,mysql:`MySQL`,mariadb:`MariaDB`};function q(e){return e.socket?`socket ${e.socket}`:`${e.host||`localhost`}:${e.port??R[e.type]}`}function Ce(e){let{useSsl:t,rejectUnauthorized:n}=G(e);return[Se[e.type],q(e),e.user?`user ${e.user}`:null,e.password?`password set`:null,e.database?`database ${e.database}`:`all databases`,t?`SSL${n?`, verified`:``}`:null].filter(Boolean).join(` · `)}var we=[`general`,`ssh`,`ssl`,`advanced`],Te={general:`General`,ssh:`SSH Tunnel`,ssl:`SSL`,advanced:`Advanced`};function Ee(e){return e===`sqlite`?[`general`]:we}var De=[`sshEnabled`,`sshHost`,`sshPort`,`sshBastionHost`,`sshAuth`,`sshUser`,`sshPassword`,`sshKeyFile`,`sshPassphrase`],Oe=[`sslCa`,`sslCert`,`sslKey`,`sslKeyPassword`],ke=[`allowedDatabases`,`allowedDatabasesRegex`,`isolationLevel`,`queryTimeoutSec`];function Ae(e){return De.includes(e)?`ssh`:Oe.includes(e)?`ssl`:ke.includes(e)?`advanced`:`general`}var J=e=>e!==`sqlite`,je=(e,t)=>e===`postgres`==(t===`postgres`);function Y(e){return J(e.type)&&e.entry===`fields`?e.passwordMode:`save`}function Me(e){return T(Y(e))}function Ne(e=`postgres`){return{type:e,entry:`fields`,url:``,connMode:`host`,host:``,port:``,socket:``,user:``,password:``,passwordMode:`save`,database:``,singleDatabase:!0,path:``,readonly:!0,aiAccess:!0,name:``,folder:``,color:null,allowedDatabases:``,allowedDatabasesRegex:``,isolationLevel:``,queryTimeoutSec:``,urlExtras:null,sshEnabled:!1,sshHost:``,sshPort:``,sshBastionHost:``,sshAuth:`password`,sshUser:``,sshPassword:``,sshKeyFile:``,sshPassphrase:``,sslCa:``,sslCert:``,sslKey:``,sslKeyPassword:``}}function Pe(e,t){return{...e,connMode:t.socket?`socket`:`host`,host:t.host,port:t.port==null?``:String(t.port),socket:t.socket,user:t.user,password:t.password,database:t.database,urlExtras:{scheme:t.scheme,ssl:t.ssl,params:t.params}}}function Fe(e,t){let n={...Ne(e.type),name:e.name,folder:e.group_name??``,color:e.color,readonly:e.readonly===1,aiAccess:e.ai_access!==0},r={passwordSaved:!1,savedUrlUnreadable:!1,sshPasswordSaved:!1,sshPassphraseSaved:!1,sslKeyPasswordSaved:!1};if(t.type===`sqlite`)return{values:{...n,path:t.path},...r};let{ssh:i,ssl:a}=t,o={...n,passwordMode:t.passwordMode??`save`,singleDatabase:t.singleDatabase??!0,allowedDatabases:(t.allowedDatabases??[]).join(`
2
+ `),allowedDatabasesRegex:t.allowedDatabasesRegex??``,isolationLevel:t.isolationLevel??``,queryTimeoutSec:t.queryTimeoutSec===void 0?``:String(t.queryTimeoutSec),sshEnabled:i?.enabled??!1,sshHost:i?.host??``,sshPort:i?.port===void 0?``:String(i.port),sshBastionHost:i?.bastionHost??``,sshAuth:i?.auth??`password`,sshUser:i?.user??``,sshKeyFile:i?.keyFile??``,sslCa:a?.ca??``,sslCert:a?.cert??``,sslKey:a?.key??``},s={...r,sshPasswordSaved:!!i?.hasPassword,sshPassphraseSaved:!!i?.hasPassphrase,sslKeyPasswordSaved:!!a?.hasKeyPassword};if(t.connectionString===null)return{values:{...o,entry:`url`,url:``},...s,savedUrlUnreadable:!0};let c=T(t.passwordMode)?`fields`:t.entry??`url`,l={...o,entry:c,url:t.connectionString},u=H(t.connectionString);return{values:u.kind===`url`?Pe(l,u.parts):l,...s,passwordSaved:t.hasPassword}}function Ie(e){let t=e.trim();if(!t)return null;let n=/^\d{1,5}$/.test(t)?Number(t):NaN;return n>=1&&n<=65535?null:`A number from 1 to 65535.`}function Le(e){let t=e.type,n=e.connMode===`socket`,r=e.port.trim();return{type:t,scheme:e.urlExtras?.scheme??z[t],host:n?``:e.host.trim()||`localhost`,port:n||!r||Ie(r)?null:Number(r),socket:n?e.socket.trim():``,user:e.user.trim()||pe[t],password:e.password,database:e.database.trim(),ssl:e.urlExtras?.ssl??null,params:e.urlExtras?.params??[]}}function Re(e){let t=Le(e),n=Y(e);return T(n)&&(t.password=``),n===`askUser`&&(t.user=``),t}function ze(e,t,n){return J(e.type)?n.type===e.type||!!t.editing&&je(n.type,e.type):!1}function Be(e,t,n){let r=e.type,i=H(e.url),a=`Example: ${z[r]}://user@localhost:${R[r]}/shop`;switch(i.kind){case`empty`:return t.editing?.savedUrlUnreadable?{tone:`plain`,text:`PPM cannot read the saved URL, so it is not shown. It is kept until you enter a new one.`}:n?{tone:`bad`,text:`Enter the database URL.`}:{tone:`plain`,text:`Server, port, login, database and SSL are all read from the URL.`};case`file`:return{tone:`bad`,text:`That is a file path: pick SQLite above to open a file.`};case`error`:return{tone:`bad`,text:`${i.error} ${a}`};case`url`:{if(!ze(e,t,i.parts))return{tone:`bad`,text:`This connection is ${E[r]}; the URL is for ${E[i.parts.type]}.`};let n=U(i.parts);return n?{tone:`bad`,text:`${n} ${a}`}:{tone:`ok`,text:Ce(i.parts)}}}}function Ve(e,t,n){let r={...e,url:n};if(t.editing)return r;let i=H(n);return i.kind===`url`&&i.parts.type!==e.type?{...r,type:i.parts.type}:r}function He(e,t){if(t===e.type)return e;let n=H(e.url),r=n.kind===`url`&&n.parts.type!==t?``:e.url,i={...e,type:t,url:r,urlExtras:null},{useSsl:a,rejectUnauthorized:o}=G({ssl:e.urlExtras?.ssl??null});return e.entry===`fields`&&a&&J(t)?Ge(i,!0,o):i}var Ue=e=>e.trim()!==``;function We(e,t,n){if(n===e.entry||!J(e.type))return{values:{...e,entry:n}};if(n===`url`){let t=[e.host,e.port,e.socket,e.user,e.password,e.database].some(Ue)||!!e.urlExtras?.ssl||!!e.urlExtras?.params.length;return{values:{...e,entry:n,url:t?W(Le(e)):``}}}let r=H(e.url);if(r.kind===`empty`)return{values:{...e,entry:n}};let i=Be(e,t,!0);return r.kind!==`url`||i.tone===`bad`?{problem:{field:`url`,message:i.text}}:{values:{...Pe(e,r.parts),entry:n}}}function X(e,t){let n=H(e.url);return n.kind===`url`&&ze(e,t,n.parts)&&!U(n.parts)?n.parts:null}function Ge(e,t,n){let r=Le(e),i=K(r,t,n);return i===r?e:{...e,urlExtras:{scheme:r.scheme,ssl:i.ssl,params:r.params}}}function Ke(e,t){if(!J(e.type))return null;if(e.entry===`fields`)return G({ssl:e.urlExtras?.ssl??null});let n=X(e,t);return n?G(n):null}function qe(e,t,n,r){if(!J(e.type))return e;if(e.entry===`fields`)return Ge(e,n,r);let i=X(e,t);if(!i)return e;let a=K(i,n,r);return a===i?e:{...e,url:W(a)}}function Je(e,t){return J(e.type)?e.entry===`url`?X(e,t)?.database??``:e.database.trim():``}function Ye(e,t){if(!J(e.type))return e.path.trim();if(e.entry===`url`){let n=X(e,t);return n?q(n):``}return q(Le(e))}function Xe(e){return e.trim().split(/[\\/]/).filter(Boolean).pop()??``}function Ze(e,t){if(!J(e.type))return Xe(e.path)||`database.db`;let{host:n,user:r,database:i}={host:e.host.trim(),user:e.user.trim(),database:e.database.trim()},a=e.connMode===`socket`;if(e.entry===`url`){let o=X(e,t);({host:n,user:r,database:i}=o??{host:``,user:``,database:``}),a=!!o?.socket}Y(e)===`askUser`&&(r=``);let o=a?`localhost`:n||`localhost`;return`${i||r||pe[e.type]}@${o}`}function Qe(e,t){return e.name.trim()||Ze(e,t)}function $e(e,t){return t.takenNames.has(Qe(e,t))}function et(e){return!Me(e)}function tt(e){return/^(\/|~$|~[\\/]|[A-Za-z]:[\\/]|\\\\)/.test(e)}function nt(e,t){if(!e.sshEnabled)return null;if(e.entry===`url`?X(e,t)?.socket:e.connMode===`socket`)return e.entry===`url`?{field:`url`,message:`An SSH tunnel reaches the database by host and port. Put the host in the URL as the SSH server sees it (often localhost), or turn the tunnel off.`}:{field:`socket`,message:`An SSH tunnel reaches the database by host and port. Pick Host and port above, or turn the tunnel off.`};let n=e.sshHost.trim();if(!n)return{field:`sshHost`,message:`Enter the SSH host.`};if(/[\s/@]/.test(n))return{field:`sshHost`,message:`Enter the SSH host's name or address, like ssh.example.com. The login goes in its own field.`};let r=Ie(e.sshPort);if(r)return{field:`sshPort`,message:r};let i=e.sshBastionHost.trim();if(i){let e=oe(i);if(`error`in e)return{field:`sshBastionHost`,message:e.error}}if(e.sshAuth===`keyFile`){let t=e.sshKeyFile.trim();if(!t)return{field:`sshKeyFile`,message:`Pick the private key file.`};if(!tt(t))return{field:`sshKeyFile`,message:`Give the key file as a full path on the PPM host, not ${t}.`}}return null}var rt=[[`sslCa`,`CA certificate`],[`sslCert`,`certificate`],[`sslKey`,`key file`]];function it(e,t){if(!Ke(e,t)?.useSsl)return null;for(let[t,n]of rt){let r=e[t].trim();if(r&&!tt(r))return{field:t,message:`Give the ${n} as a full path on the PPM host, not ${r}.`}}return null}function at(e,t,n){if(!J(e.type)){if(!Ue(e.path))return{field:`path`,message:`Enter the path of the database file.`}}else if(e.entry===`url`){let n=Be(e,t,!0);if(n.tone===`bad`)return{field:`url`,message:n.text}}else if(e.connMode===`socket`){if(!Ue(e.socket))return{field:`socket`,message:`Enter the path of the socket.`}}else{let t=Ie(e.port);if(t)return{field:`port`,message:t}}return(J(e.type)?nt(e,t)??it(e,t):null)||(J(e.type)&&ne(e.allowedDatabasesRegex.trim())?{field:`allowedDatabasesRegex`,message:`Not a valid regular expression.`}:J(e.type)&&re(e.queryTimeoutSec.trim())?{field:`queryTimeoutSec`,message:`A whole number of seconds, or empty for no limit.`}:n&&$e(e,t)?{field:`name`,message:`Another connection already has this name.`}:null)}function ot(e){return e.allowedDatabases.split(`
3
+ `).map(e=>e.trim()).filter(Boolean)}function st(e){let t={enabled:e.sshEnabled,host:e.sshHost.trim(),port:e.sshPort.trim(),bastionHost:e.sshBastionHost.trim(),auth:e.sshAuth,user:e.sshUser.trim(),keyFile:e.sshKeyFile.trim()};return e.sshAuth===`password`&&e.sshPassword&&(t.password=e.sshPassword),e.sshAuth===`keyFile`&&e.sshPassphrase&&(t.passphrase=e.sshPassphrase),t}function ct(e){let t={ca:e.sslCa.trim(),cert:e.sslCert.trim(),key:e.sslKey.trim()};return e.sslKeyPassword&&(t.keyPassword=e.sslKeyPassword),t}function lt(e,t){if(!J(e.type))return{type:`sqlite`,path:e.path.trim()};let n={type:e.type,entry:e.entry,passwordMode:Y(e),allowedDatabases:ot(e),allowedDatabasesRegex:e.allowedDatabasesRegex.trim()};e.isolationLevel&&(n.isolationLevel=e.isolationLevel),e.queryTimeoutSec.trim()&&(n.queryTimeoutSec=Number(e.queryTimeoutSec.trim())),Je(e,t)&&(n.singleDatabase=e.singleDatabase),n.ssh=st(e),n.ssl=ct(e),e.entry===`url`?t.editing?.savedUrlUnreadable&&!Ue(e.url)||(n.connectionString=e.url.trim()):n.connectionString=W(Re(e));let r=t.editing;return r&&(r.passwordSaved||r.sshPasswordSaved||r.sshPassphraseSaved||r.sslKeyPasswordSaved)&&(n.keepPassword=!0),n}function ut(e,t){return{type:e.type,connectionConfig:lt(e,t),...t.editing?{connectionId:t.editing.id}:{}}}function dt(e,t){let n=e.folder.trim();return{type:e.type,name:Qe(e,t),connectionConfig:lt(e,t),groupName:n||(t.editing?null:void 0),color:e.color??(t.editing?null:void 0),readonly:e.readonly,aiAccess:e.aiAccess&&et(e)}}function Z(e,t,n=!0){if(!J(e.type))return JSON.stringify([`sqlite`,e.path.trim()]);let r;if(e.entry===`url`){let i=X(e,t);r=i?W(n?i:{...i,database:``}):e.url.trim()}else{let t=Re(e);r=W(n?t:{...t,database:``})}return JSON.stringify([e.type,Y(e),r,ft(e),pt(e,t)])}function ft(e){if(!e.sshEnabled)return null;let t=e.sshAuth===`password`?e.sshPassword:e.sshAuth===`keyFile`?[e.sshKeyFile.trim(),e.sshPassphrase]:null;return[e.sshHost.trim(),e.sshPort.trim(),e.sshBastionHost.trim(),e.sshAuth,e.sshUser.trim(),t]}function pt(e,t){return Ke(e,t)?.useSsl?[e.sslCa.trim(),e.sslCert.trim(),e.sslKey.trim(),e.sslKeyPassword]:null}function mt(e,t){return se(e,{allowedDatabases:ot(t),allowedDatabasesRegex:t.allowedDatabasesRegex.trim()})}var ht=(e,t)=>`${e} ${t}${e===1?``:`s`}`;function gt(e,t,n){let r=`${e.elapsedMs} ms`;if(!J(t.type))return`${e.target} · ${r}`;let i=Je(t,n),a=i?`database “${i}”`:ht(mt(e.databases,t).length,`database`),o=e.ssh??[],s=o[o.length-1],c=o.length>1?` via ${o.slice(0,-1).map(e=>e.host).join(`, `)}`:``;return`${a} · ${e.target}${s?` through SSH ${s.host}${c}`:``} · ${r}`}function _t(e,t){if(!J(e.type))return null;let n=e.entry===`url`?X(e,t)?.ssl:e.urlExtras?.ssl;return n?`${n.name}=${n.value}`:null}function vt(e,t,n){if(!J(t.type))return``;let r=e.ssh??[],i=r.map((e,t)=>`${t<r.length-1?`Bastion`:`SSH server`} ${e.host}, host key ${e.fingerprint}${e.firstSeen?` (first connection: PPM trusts this key from now on)`:``}`),a=_t(t,n)??`not set in the URL`,o=e.tls===void 0?``:e.tls?`on (${e.tls}) · `:`off · `;if(i.push(`SSL: ${o}${a}`),Ke(t,n)?.useSsl){let e=rt.map(([e,n])=>[n,t[e].trim()]).filter(([,e])=>e);e.length&&i.push(`Certificate files: ${e.map(([e,t])=>`${e} ${t}`).join(`, `)}`)}return i.join(`
4
+ `)}function yt(e,t){switch(e){case`connectionString`:return t.entry===`url`?`url`:t.connMode===`socket`?`socket`:`host`;case`path`:case`name`:case`type`:case`passwordMode`:case`allowedDatabases`:case`allowedDatabasesRegex`:case`isolationLevel`:case`queryTimeoutSec`:return e;default:return De.includes(e)||Oe.includes(e)?e:null}}function bt(e){return T(e)?`Not saved. PPM asks for ${e===`askUser`?`the login and password`:`the password`} when the connection opens, and keeps it in the server's memory until you disconnect or PPM restarts.`:`Encrypted on the PPM host and never sent back to the browser.`}var xt=`ssh`;function St(e){return!(e instanceof h)||e.code!==`DB_LOGIN_REQUIRED`?null:e.body.login??null}function Ct(e,t){let[n,r]=(0,L.useState)(e===null?{kind:`ready`}:{kind:`loading`}),[i,a]=(0,L.useState)(0),[o,s]=(0,L.useState)(()=>Ne()),[c,l]=(0,L.useState)(null),[u,d]=(0,L.useState)([]),[f,p]=(0,L.useState)(`general`),[_,v]=(0,L.useState)(null),[b,x]=(0,L.useState)(null),[S,w]=(0,L.useState)({kind:`idle`}),[ne,T]=(0,L.useState)(!1),[re,ae]=(0,L.useState)(null),[oe,se]=(0,L.useState)(!1),[ce,le]=(0,L.useState)(null),[E,ue]=(0,L.useState)(!1),[D,de]=(0,L.useState)(null),[O,k]=(0,L.useState)(null),A=(0,L.useRef)(null),j=(0,L.useRef)(null),M=(0,L.useRef)({});(0,L.useEffect)(()=>{let t=!1;return g.get(`/api/db/connections`).then(e=>{t||d(e)}).catch(()=>{}),e!==null&&(r(e=>e.kind===`ready`?e:{kind:`loading`}),Promise.all([g.get(`/api/db/connections/${e}`),g.get(`/api/db/connections/${e}/config`)]).then(([e,n])=>{if(t)return;let{values:i,...a}=Fe(e,n);s(i),l({id:e.id,...a}),r({kind:`ready`}),w(e=>e.kind===`running`&&e.action===`save`?{kind:`idle`}:e)}).catch(e=>{t||r({kind:`failed`,message:e.message})})),()=>{t=!0}},[e,i]);let N=(0,L.useCallback)(()=>{ee().then(de).catch(()=>{})},[]);(0,L.useEffect)(N,[N]),(0,L.useEffect)(()=>()=>A.current?.abort(),[]);let P=(0,L.useMemo)(()=>({editing:c,takenNames:new Set(u.filter(t=>t.id!==e).map(e=>e.name))}),[c,u,e]),F=(0,L.useMemo)(()=>[...new Set(u.map(e=>e.group_name).filter(e=>!!e))].sort((e,t)=>e.localeCompare(t)),[u]),I=(0,L.useCallback)(e=>{s(t=>typeof e==`function`?e(t):{...t,...e}),v(null)},[]),R=Z(o,P),me=Z(o,P,!1);(0,L.useEffect)(()=>{w(e=>(e.kind===`ok`||e.kind===`failed`)&&e.key!==R?{kind:`idle`}:e)},[R]),(0,L.useEffect)(()=>{k(null)},[o.type,o.sshEnabled]),(0,L.useEffect)(()=>{Ee(o.type).includes(f)||p(`general`)},[o.type,f]);let z=(0,L.useCallback)(e=>{v(e),p(Ae(e.field)),x(t=>({field:e.field,n:(t?.n??0)+1}))},[]);(0,L.useEffect)(()=>{b&&M.current[b.field]?.focus()},[b]);let he=(0,L.useCallback)(e=>t=>{M.current[e]=t},[]),ge=e=>{let t=We(o,P,e);`problem`in t?z(t.problem):I(t.values)},_e=e=>I(t=>Ve(t,P,e)),ve=e=>{c||I(t=>He(t,e))},B=async(e,t,n)=>{let r=ut(e,t),i=async n=>{let i=await fe({prompt:{...n,connectionId:null,name:Qe(e,t)},submit:(e,t)=>g.post(`/api/db/test`,{...r,login:e},{signal:t,dbLogin:!1})});return i&&{result:i.result,login:i.login}};if(Me(e)){let t=e.passwordMode===`askUser`,n=t?``:e.user.trim()||(e.type===`sqlite`?``:pe[e.type]);return i({connectionId:null,name:``,type:e.type,user:n,askUser:t})}try{return{result:await g.post(`/api/db/test`,r,{signal:n,dbLogin:!1}),login:null}}catch(e){let t=St(e);if(!t)throw e;return i(t)}},V=(e,t,n,r)=>{let i=C(e);if(i){j.current=r===`save`?null:r,k(i),w({kind:`idle`}),p(i.id===xt?`ssh`:`general`);return}let a=e instanceof h?yt(e.body?.field,t):null;if(a){w({kind:`idle`}),z({field:a,message:e.message});return}let o=e.message||`The request failed`;w(r===`save`?{kind:`saveFailed`,message:o}:{kind:`failed`,result:{ok:!1,error:o,details:``,elapsedMs:0},key:n})},H=async(e,n,r,i,o=[])=>{let s=dt(e,n),c;try{c=n.editing?await g.put(`/api/db/connections/${n.editing.id}`,s):await g.post(`/api/db/connections`,s)}catch(t){V(t,e,Z(e,n),`save`);return}r&&i&&await g.post(`/api/db/connections/${c.id}/login`,i).catch(e=>{m.error(`Saved “${c.name}”, but could not log in`,{description:e.message})});let l=!!n.editing;ie(c,{expand:r,refreshTables:r||!Me(e)});let u=o.map(e=>`${e.host} (${e.fingerprint})`).join(`, `);if(m.success(r?`${l?`Updated`:`Saved`} and connected “${c.name}”`:`${l?`Updated`:`Saved`} “${c.name}”`,u?{description:`First connection through SSH: PPM now trusts the host key of ${u}.`}:void 0),!t){w({kind:`idle`});return}if(r){y.getState().closeTab(t);return}y.getState().updateTab(t,{title:`Edit ${c.name}`,metadata:{connectionId:c.id,connectionName:c.name,dbType:c.type}}),l&&a(e=>e+1)},U=async e=>{if(S.kind===`running`)return;let t=o,n=P,r=at(t,n,e===`connect`);if(r){z(r);return}let i=new AbortController;A.current=i;let a=Z(t,n),s=Ye(t,n);k(null),T(!1),w(Me(t)?{kind:`idle`}:{kind:`running`,action:e,target:s});try{let r=await B(t,n,i.signal);if(i.signal.aborted)return;if(!r){w({kind:`idle`});return}let{result:o,login:c}=r;if(o.ok&&ae({key:Z(t,n,!1),names:o.databases}),!o.ok){w({kind:`failed`,result:o,key:a});return}let l=(o.ssh??[]).filter(e=>e.firstSeen);if(e===`test`){w({kind:`ok`,result:o,key:a}),l.length&&T(!0);return}w({kind:`running`,action:`connect`,target:s}),await H(t,n,!0,c,l)}catch(n){i.signal.aborted||V(n,t,a,e)}finally{A.current===i&&(A.current=null)}},ye=()=>{A.current?.abort(),A.current=null,w({kind:`idle`})},be=async()=>{if(S.kind===`running`)return;let e=o,t=P,n=at(e,t,!0);if(n){z(n);return}w({kind:`running`,action:`save`,target:Ye(e,t)}),await H(e,t,!1,null)},W=re?.key===me?mt(re.names,o):null,xe=async()=>{if(oe)return;if(W){ue(!0);return}let e=o,t=P,n=at(e,t,!1);if(n){z(n);return}let r=Z(e,t,!1);se(!0),le(null);let i=new AbortController;try{let n=await B(e,t,i.signal);if(!n)return;n.result.ok?(ae({key:r,names:n.result.databases}),ue(!0)):le({key:r,message:`Could not list the databases: ${n.result.error}`})}catch(e){let t=C(e);if(t){j.current=`list`,k(t),t.id===xt&&p(`ssh`);return}le({key:r,message:`Could not list the databases: ${e.message}`})}finally{se(!1)}},G=D?.find(e=>e.engines.includes(o.type)),K=D?.find(e=>e.id===xt),Se=(O&&O.id!==xt?O:null)??(G?.state===`missing`?{id:G.id,displayName:G.displayName}:null),q=(O?.id===xt?O:null)??(o.type!==`sqlite`&&o.sshEnabled&&K?.state===`missing`?{id:K.id,displayName:K.displayName}:null),Ce=(0,L.useRef)({runTest:U,listDatabases:xe});return Ce.current={runTest:U,listDatabases:xe},te(e=>{if(Se?.id!==e&&q?.id!==e)return;let t=O?.id===e,n=t?j.current:null;t&&(j.current=null,k(null)),de(t=>t?.map(t=>t.id===e?{...t,state:`installed`}:t)??t),N(),n===`list`?Ce.current.listDatabases():n&&Ce.current.runTest(n)}),{load:n,reload:()=>a(e=>e+1),values:o,update:I,ctx:P,editing:c,folders:F,tab:f,setTab:p,problem:_,register:he,setEntry:ge,setUrl:_e,setType:ve,run:S,detailsOpen:ne,toggleDetails:()=>T(e=>!e),test:()=>S.kind===`running`&&S.action===`test`?ye():void U(`test`),connect:()=>void U(`connect`),save:()=>void be(),databases:W,dbBusy:oe,dbError:ce?.key===me?ce.message:null,dbMenuOpen:E,setDbMenuOpen:ue,listDatabases:()=>void xe(),missingDriver:Se,missingSshDriver:q}}var Q=n(),wt=[`#ef4444`,`#f97316`,`#eab308`,`#22c55e`,`#06b6d4`,`#3b82f6`,`#8b5cf6`,`#ec4899`,`#6b7280`,`#000000`];function Tt({value:e,onChange:t,labelId:n}){let r=e&&!wt.includes(e)?[e]:[],i=[null,...wt,...r],a=e,o=(e,n)=>{let r=e.key===`ArrowRight`||e.key===`ArrowDown`?1:e.key===`ArrowLeft`||e.key===`ArrowUp`?-1:0;if(!r)return;e.preventDefault();let a=i[(i.indexOf(n)+r+i.length)%i.length];t(a),(e.currentTarget.parentElement?.querySelector(`[data-color="${a??``}"]`))?.focus()};return(0,Q.jsx)(`div`,{role:`radiogroup`,"aria-labelledby":n,className:`flex flex-wrap items-center gap-2 min-h-[30px]`,children:i.map(e=>{let n=e===a,r=e??`No color`;return(0,Q.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":n,"aria-label":r,title:r,tabIndex:n?0:-1,"data-color":e??``,onClick:()=>t(e),onKeyDown:t=>o(t,e),className:_(`grid place-items-center size-11 md:size-[22px] rounded-full`,e?`shadow-[inset_0_0_0_1px_color-mix(in_srgb,var(--color-text)_18%,transparent)]`:`border-[1.5px] border-dashed border-text-subtle text-text-subtle`,n&&`ring-2 ring-text-2 ring-offset-2 ring-offset-background`),style:e?{backgroundColor:e}:void 0,children:!e&&(0,Q.jsx)(u,{className:`size-4 md:size-3`})},r)})})}var Et={postgres:`Server · port ${R.postgres}`,mysql:`Server · port ${R.mysql}`,mariadb:`Server · port ${R.mariadb}`,sqlite:`A file, no server`};function Dt({value:e,locked:t,onPick:n,labelId:r}){let i=(0,L.useRef)({}),a=(e,r)=>{let a=e.key===`ArrowRight`||e.key===`ArrowDown`?1:e.key===`ArrowLeft`||e.key===`ArrowUp`?-1:0;if(!a||t)return;e.preventDefault();let o=D[(D.indexOf(r)+a+D.length)%D.length];n(o),i.current[o]?.focus()};return(0,Q.jsx)(`div`,{role:`radiogroup`,"aria-labelledby":r,className:`grid grid-cols-2 gap-2 @[700px]:grid-cols-4`,children:D.map(r=>{let o=r===e;return(0,Q.jsxs)(`button`,{ref:e=>{i.current[r]=e},type:`button`,role:`radio`,"aria-checked":o,"aria-disabled":t||void 0,tabIndex:o?0:-1,"data-engine":r,onClick:()=>{t||n(r)},onKeyDown:e=>a(e,r),className:_(`flex min-h-14 md:min-h-12 items-center gap-2 md:gap-2.5 rounded-lg border px-2.5 md:px-3 py-2 text-left transition-colors`,o?`border-primary bg-accent-wash shadow-[inset_0_0_0_1px_var(--color-primary)]`:`border-border bg-surface`,t?`cursor-default`:`can-hover:hover:border-primary/60`,t&&!o&&`opacity-45`),children:[(0,Q.jsx)(x,{type:r,className:`size-[26px]`}),(0,Q.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,Q.jsx)(`b`,{className:`block text-[13.5px] md:text-[12.5px] font-semibold text-text-primary`,children:E[r]}),(0,Q.jsx)(`small`,{className:`block truncate text-[11.5px] md:text-[11px] text-text-subtle`,children:Et[r]})]}),(0,Q.jsx)(c,{className:_(`hidden md:block size-3.5 shrink-0 text-primary`,!o&&`invisible`)})]},r)})})}var Ot=(0,L.forwardRef)(function({id:e,value:t,onChange:n,onKeyDown:s,invalid:c,databases:u,busy:d,open:m,onOpenChange:h,onRequestList:g,subtitle:y},x){let C=b(),ee=v(),te=e=>{n(e),h(!1)},w=(0,Q.jsxs)(`div`,{className:`flex min-w-0`,children:[(0,Q.jsx)(`input`,{ref:x,id:e,value:t,onChange:e=>n(e.target.value),onKeyDown:s,placeholder:`(not selected - optional)`,autoComplete:`off`,autoCapitalize:`off`,spellCheck:!1,"aria-invalid":c||void 0,className:_(O,`font-mono rounded-r-none`)}),(0,Q.jsx)(`button`,{type:`button`,onClick:g,disabled:d,"aria-label":`List the server's databases`,title:`List the server's databases`,"aria-haspopup":`listbox`,"aria-expanded":m,className:`grid place-items-center shrink-0 size-11 md:h-[30px] md:w-8 rounded-r-md border border-l-0 border-border bg-surface text-text-2 can-hover:hover:text-text-primary disabled:opacity-60`,children:d?(0,Q.jsx)(p,{className:`size-4 animate-spin`}):(0,Q.jsx)(l,{className:`size-4`})})]}),ne=u&&(0,Q.jsxs)(`div`,{role:`listbox`,"aria-label":`Default database`,className:`min-h-0 flex-1 overflow-y-auto py-1`,children:[(0,Q.jsx)(kt,{label:`(not selected)`,picked:!t.trim(),mobile:C,onPick:()=>te(``)}),u.map(e=>(0,Q.jsx)(kt,{label:e,mono:!0,picked:t.trim()===e,mobile:C,onPick:()=>te(e)},e))]}),T=(0,Q.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border-soft px-3 py-2 shrink-0`,children:[(0,Q.jsx)(f,{className:`size-4 shrink-0 text-text-subtle`}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`div`,{className:`text-[13px] md:text-xs font-medium text-text-primary`,children:`Default database`}),(0,Q.jsx)(`div`,{className:`truncate text-[12px] md:text-[11px] text-text-subtle`,children:y})]})]});return C?(0,Q.jsxs)(Q.Fragment,{children:[w,(0,Q.jsxs)(S,{open:m&&!!u,onClose:()=>h(!1),className:`popover-solid flex max-h-[80dvh] flex-col`,children:[T,ne]})]}):(0,Q.jsxs)(a,{open:m&&!!u,onOpenChange:h,children:[(0,Q.jsx)(o,{asChild:!0,children:w}),(0,Q.jsx)(i,{container:ee,children:(0,Q.jsxs)(r,{align:`start`,sideOffset:4,collisionPadding:8,onOpenAutoFocus:e=>e.preventDefault(),className:`popover-solid z-50 flex w-[var(--radix-popover-trigger-width)] min-w-64 flex-col overflow-hidden rounded-md border border-border text-popover-foreground shadow-lg max-h-[min(20rem,var(--radix-popover-content-available-height))]`,children:[T,ne]})})]})});function kt({label:e,mono:t,picked:n,mobile:r,onPick:i}){return(0,Q.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":n,onClick:i,className:_(`flex w-full items-center gap-2 px-3 text-left text-sm text-text-2 can-hover:hover:bg-surface-hover can-hover:hover:text-text-primary`,r?`min-h-11 py-2`:`py-1`,t&&`font-mono`),children:[(0,Q.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e}),n&&(0,Q.jsx)(s,{className:`size-3.5 shrink-0 text-primary`})]})}var At={save:`Save and encrypt`,askPassword:`Don't save, ask for password`,askUser:`Don't save, ask for login and password`};function $(e){return t=>{t.key===`Enter`&&!t.nativeEvent.isComposing&&(t.preventDefault(),e.connect())}}function jt({form:e}){let{values:t,update:n,ctx:r,editing:i,problem:a,register:o}=e,s=$(e),c=e=>a?.field===e?a.message:null,l=t.type===`sqlite`?null:t.type,u=!!l&&t.entry===`url`,d=t.passwordMode,f=d!==`save`,p=Je(t,r),m=$e(t,r),h=et(t),g=`grid grid-cols-1 gap-3 @[560px]:grid-cols-6`;return(0,Q.jsxs)(`div`,{className:`grid content-start gap-4 md:gap-[18px]`,children:[(0,Q.jsx)(I,{label:`Connection type`,labelId:`cf-type-label`,error:c(`type`),help:i?`A saved connection keeps its type.`:null,children:(0,Q.jsx)(Dt,{value:t.type,locked:!!i,onPick:e.setType,labelId:`cf-type-label`})}),e.missingDriver&&(0,Q.jsx)(de,{driver:e.missingDriver}),l&&(0,Q.jsxs)(`div`,{role:`radiogroup`,"aria-label":`How to enter the connection`,className:`flex flex-col md:flex-row md:flex-wrap md:gap-x-[22px] md:gap-y-1.5`,children:[(0,Q.jsx)(P,{name:`cf-entry`,value:`fields`,checked:t.entry===`fields`,onChange:()=>e.setEntry(`fields`),children:`Fill database connection details`}),(0,Q.jsx)(P,{name:`cf-entry`,value:`url`,checked:t.entry===`url`,onChange:()=>e.setEntry(`url`),children:`Use database URL`})]}),l&&u&&(0,Q.jsx)(I,{label:`Database URL`,htmlFor:`cf-url`,help:c(`url`)?null:Be(t,r,!1),error:c(`url`),children:(0,Q.jsx)(j,{id:`cf-url`,ref:o(`url`),mono:!0,value:t.url,invalid:!!c(`url`),onChange:t=>e.setUrl(t.target.value),onKeyDown:s,placeholder:`e.g. ${z[l]}://user:password@localhost:${R[l]}/shop`})}),l&&!u&&(0,Q.jsxs)(`div`,{className:g,children:[(0,Q.jsx)(I,{label:`Connection mode`,htmlFor:`cf-connmode`,className:`@[560px]:col-span-6`,children:(0,Q.jsxs)(M,{id:`cf-connmode`,value:t.connMode,onChange:e=>n({connMode:e.target.value}),children:[(0,Q.jsx)(`option`,{value:`host`,children:`Host and port`}),(0,Q.jsx)(`option`,{value:`socket`,children:`Socket`})]})}),t.connMode===`host`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(I,{label:`Server`,htmlFor:`cf-host`,className:`@[560px]:col-span-4`,error:c(`host`),help:t.sshEnabled?`As the SSH server sees it: often localhost.`:`Reached from the PPM host, not from this browser.`,children:(0,Q.jsx)(j,{id:`cf-host`,ref:o(`host`),mono:!0,value:t.host,invalid:!!c(`host`),placeholder:`localhost`,onChange:e=>n({host:e.target.value}),onKeyDown:s})}),(0,Q.jsx)(I,{label:`Port`,htmlFor:`cf-port`,className:`@[560px]:col-span-2`,error:c(`port`),children:(0,Q.jsx)(j,{id:`cf-port`,ref:o(`port`),mono:!0,inputMode:`numeric`,value:t.port,invalid:!!c(`port`),placeholder:String(R[l]),onChange:e=>n({port:e.target.value}),onKeyDown:s})})]}):(0,Q.jsx)(I,{label:`Socket path`,htmlFor:`cf-socket`,className:`@[560px]:col-span-6`,error:c(`socket`),help:`A Unix socket on the PPM host.`,children:(0,Q.jsx)(j,{id:`cf-socket`,ref:o(`socket`),mono:!0,value:t.socket,invalid:!!c(`socket`),placeholder:me[l],onChange:e=>n({socket:e.target.value}),onKeyDown:s})}),d!==`askUser`&&(0,Q.jsx)(I,{label:`User`,htmlFor:`cf-user`,className:d===`save`?`@[560px]:col-span-3`:`@[560px]:col-span-6`,children:(0,Q.jsx)(j,{id:`cf-user`,ref:o(`user`),mono:!0,value:t.user,placeholder:pe[l],onChange:e=>n({user:e.target.value}),onKeyDown:s})}),!f&&(0,Q.jsx)(I,{label:`Password`,htmlFor:`cf-password`,className:`@[560px]:col-span-3`,children:(0,Q.jsx)(A,{id:`cf-password`,ref:o(`password`),value:t.password,placeholder:i?.passwordSaved?`Saved on the PPM host`:``,onChange:e=>n({password:e.target.value}),onKeyDown:s})}),(0,Q.jsx)(I,{label:`Password mode`,htmlFor:`cf-passmode`,className:`@[560px]:col-span-6`,error:c(`passwordMode`),help:bt(d),children:(0,Q.jsx)(M,{id:`cf-passmode`,ref:o(`passwordMode`),value:d,onChange:e=>n({passwordMode:e.target.value}),children:ae.map(e=>(0,Q.jsx)(`option`,{value:e,children:At[e]},e))})})]}),!l&&(0,Q.jsx)(I,{label:`Database file`,htmlFor:`cf-path`,error:c(`path`),help:`A path on the PPM host. The file is opened in place, never uploaded.`,children:(0,Q.jsx)(F,{id:`cf-path`,ref:o(`path`),value:t.path,invalid:!!c(`path`),placeholder:`~/data/app.db`,onChange:e=>n({path:e.target.value}),onKeyDown:s,accept:[`.db`,`.sqlite`,`.sqlite3`,`.db3`],pickerTitle:`Choose a SQLite database`,onPick:e=>n({path:e})})}),(0,Q.jsxs)(`div`,{className:`grid gap-1 md:gap-3`,children:[(0,Q.jsx)(N,{id:`cf-readonly`,checked:t.readonly,onChange:e=>n({readonly:e}),title:`Is read only`,help:(0,Q.jsxs)(Q.Fragment,{children:[`Blocks writes inside the database, including SQL the AI runs.`,ue(t.type)===`postgres`&&` For a hard guarantee — even pg_terminate_backend() — connect as a user with only SELECT rights.`]})}),(0,Q.jsx)(N,{id:`cf-ai`,checked:t.aiAccess&&h,disabled:!h,onChange:e=>n({aiAccess:e}),title:`Available to the AI chat`,help:h?`The AI can see this connection and run SQL on it.`:`Not while PPM asks for the password: the AI's commands run on their own, with nobody to ask.`})]}),l&&(0,Q.jsxs)(`div`,{className:g,children:[!u&&(0,Q.jsx)(I,{label:`Default database`,htmlFor:`cf-database`,className:`@[560px]:col-span-6`,help:e.dbError?{tone:`bad`,text:e.dbError}:p?`Opened when you connect.`:`Leave it empty to browse every database on the server.`,children:(0,Q.jsx)(Ot,{id:`cf-database`,ref:o(`database`),value:t.database,onChange:e=>n({database:e}),onKeyDown:s,databases:e.databases,busy:e.dbBusy,open:e.dbMenuOpen,onOpenChange:e.setDbMenuOpen,onRequestList:e.listDatabases,subtitle:`${e.databases?.length??0} database${e.databases?.length===1?``:`s`} on ${Ye(t,r)}`})}),p&&(0,Q.jsx)(N,{id:`cf-single`,className:`@[560px]:col-span-6`,checked:t.singleDatabase,onChange:e=>n({singleDatabase:e}),title:`Use only database “${p}”`,help:`The tree shows this database alone, not the server's list.`})]}),(0,Q.jsxs)(`div`,{className:g,children:[(0,Q.jsx)(I,{label:`Display name`,htmlFor:`cf-name`,className:`@[560px]:col-span-4`,error:m?`Another connection already has this name.`:c(`name`),children:(0,Q.jsx)(j,{id:`cf-name`,ref:o(`name`),value:t.name,invalid:m||!!c(`name`),placeholder:Ze(t,r),onChange:e=>n({name:e.target.value}),onKeyDown:s})}),(0,Q.jsxs)(I,{label:`Folder`,htmlFor:`cf-folder`,className:`@[560px]:col-span-2`,children:[(0,Q.jsx)(j,{id:`cf-folder`,list:`cf-folders`,value:t.folder,placeholder:`No folder`,onChange:e=>n({folder:e.target.value}),onKeyDown:s}),(0,Q.jsx)(`datalist`,{id:`cf-folders`,children:e.folders.map(e=>(0,Q.jsx)(`option`,{value:e},e))})]}),(0,Q.jsx)(I,{label:`Color`,labelId:`cf-color-label`,className:`@[560px]:col-span-6`,children:(0,Q.jsx)(Tt,{value:t.color,onChange:e=>n({color:e}),labelId:`cf-color-label`})})]})]})}var Mt={password:`Username & password`,agent:`SSH agent`,keyFile:`Key file`},Nt=`m-0 min-w-0 border-0 p-0 [&:disabled_label]:text-text-subtle`;function Pt({form:e}){let{values:t,update:n,editing:r,problem:i,register:a}=e,[o,s]=(0,L.useState)(null),l=$(e),u=e=>i?.field===e?i.message:null,f=t.sshEnabled,p=t.sshAuth;return(0,L.useEffect)(()=>{let e=!1;return g.get(`/api/db/ssh/agent`).then(t=>{e||s(t)}).catch(()=>{}),()=>{e=!0}},[p===`agent`]),(0,Q.jsxs)(`div`,{className:`grid content-start gap-4 md:gap-[18px]`,children:[(0,Q.jsx)(N,{id:`cf-ssh`,checked:f,onChange:e=>n({sshEnabled:e}),title:`Use SSH tunnel`,help:`PPM opens the tunnel from its host, then connects through it.`}),e.missingSshDriver&&(0,Q.jsx)(de,{driver:e.missingSshDriver}),(0,Q.jsxs)(`fieldset`,{disabled:!f,className:_(Nt,`grid grid-cols-1 gap-3 @[560px]:grid-cols-6`),children:[(0,Q.jsx)(I,{label:`Host`,htmlFor:`cf-ssh-host`,className:`@[560px]:col-span-4`,error:u(`sshHost`),help:`The server on General is then as this host sees it: often localhost.`,children:(0,Q.jsx)(j,{id:`cf-ssh-host`,ref:a(`sshHost`),mono:!0,value:t.sshHost,invalid:!!u(`sshHost`),placeholder:`ssh.example.com`,onChange:e=>n({sshHost:e.target.value}),onKeyDown:l})}),(0,Q.jsx)(I,{label:`Port`,htmlFor:`cf-ssh-port`,className:`@[560px]:col-span-2`,error:u(`sshPort`),children:(0,Q.jsx)(j,{id:`cf-ssh-port`,ref:a(`sshPort`),mono:!0,inputMode:`numeric`,value:t.sshPort,invalid:!!u(`sshPort`),placeholder:`22`,onChange:e=>n({sshPort:e.target.value}),onKeyDown:l})}),(0,Q.jsx)(I,{label:`Bastion host (Jump host)`,htmlFor:`cf-ssh-jump`,optional:!0,className:`@[560px]:col-span-6`,error:u(`sshBastionHost`),help:`Reached first, with the same login, as ssh -J does.`,children:(0,Q.jsx)(j,{id:`cf-ssh-jump`,ref:a(`sshBastionHost`),mono:!0,value:t.sshBastionHost,invalid:!!u(`sshBastionHost`),placeholder:`user@jump.example.com`,onChange:e=>n({sshBastionHost:e.target.value}),onKeyDown:l})}),(0,Q.jsx)(I,{label:`SSH Authentication`,htmlFor:`cf-ssh-auth`,className:`@[560px]:col-span-6`,children:(0,Q.jsx)(M,{id:`cf-ssh-auth`,ref:a(`sshAuth`),value:p,onChange:e=>n({sshAuth:e.target.value}),children:le.map(e=>(0,Q.jsx)(`option`,{value:e,children:Mt[e]},e))})}),(0,Q.jsx)(I,{label:`Login`,htmlFor:`cf-ssh-login`,className:p===`password`?`@[560px]:col-span-3`:`@[560px]:col-span-6`,children:(0,Q.jsx)(j,{id:`cf-ssh-login`,ref:a(`sshUser`),mono:!0,value:t.sshUser,placeholder:o?.user??``,onChange:e=>n({sshUser:e.target.value}),onKeyDown:l})}),p===`password`&&(0,Q.jsx)(I,{label:`Password`,htmlFor:`cf-ssh-pass`,className:`@[560px]:col-span-3`,children:(0,Q.jsx)(A,{id:`cf-ssh-pass`,ref:a(`sshPassword`),value:t.sshPassword,placeholder:r?.sshPasswordSaved?`Saved on the PPM host`:``,onChange:e=>n({sshPassword:e.target.value}),onKeyDown:l})}),p===`keyFile`&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(I,{label:`Private key file`,htmlFor:`cf-ssh-key`,className:`@[560px]:col-span-3`,error:u(`sshKeyFile`),children:(0,Q.jsx)(F,{id:`cf-ssh-key`,ref:a(`sshKeyFile`),value:t.sshKeyFile,invalid:!!u(`sshKeyFile`),placeholder:`~/.ssh/id_ed25519`,onChange:e=>n({sshKeyFile:e.target.value}),onKeyDown:l,pickerTitle:`Choose the private key file`,pickerRoot:`~/.ssh`,onPick:e=>n({sshKeyFile:e})})}),(0,Q.jsx)(I,{label:`Key file passphrase`,htmlFor:`cf-ssh-keypass`,optional:!0,className:`@[560px]:col-span-3`,children:(0,Q.jsx)(A,{id:`cf-ssh-keypass`,ref:a(`sshPassphrase`),value:t.sshPassphrase,placeholder:r?.sshPassphraseSaved?`Saved on the PPM host`:``,onChange:e=>n({sshPassphrase:e.target.value}),onKeyDown:l})})]}),p===`agent`&&o&&(0,Q.jsxs)(`div`,{"data-testid":`db-ssh-agent`,"data-found":o.found,className:`@[560px]:col-span-6 flex items-start gap-2 text-[13px] md:text-[12.5px]`,children:[o.found?(0,Q.jsx)(c,{className:`mt-px size-4 shrink-0 text-success`}):(0,Q.jsx)(d,{className:`mt-px size-4 shrink-0 text-warning`}),(0,Q.jsxs)(`span`,{className:`min-w-0 break-words`,title:o.socket??void 0,children:[o.found?`SSH agent found on the PPM host`:`No SSH agent found on the PPM host.`,!o.found&&(0,Q.jsx)(`small`,{className:`block text-[12.5px] md:text-[11.5px] text-text-subtle`,children:`Start one there and add your key (ssh-add), or pick Key file.`})]})]})]})]})}function Ft({form:e}){let{values:t,update:n,ctx:r,editing:i,problem:a,register:o}=e,s=$(e),c=e=>a?.field===e?a.message:null,l=Ke(t,r),u=!!l?.useSsl,d=_t(t,r),f=(e,t)=>n(n=>qe(n,r,e,t));return(0,Q.jsxs)(`div`,{className:`grid content-start gap-4 md:gap-[18px]`,children:[(0,Q.jsx)(N,{id:`cf-ssl`,checked:u,disabled:!l,onChange:e=>f(e,l?.rejectUnauthorized??!1),title:`Use SSL`,help:l?`The certificate files below are read on the PPM host.`:`Enter a URL PPM can read on General first: SSL is set in it.`}),(0,Q.jsxs)(`fieldset`,{disabled:!u,className:_(Nt,`grid grid-cols-1 gap-3`),children:[(0,Q.jsx)(I,{label:`CA Cert`,htmlFor:`cf-ssl-ca`,optional:!0,error:c(`sslCa`),children:(0,Q.jsx)(F,{id:`cf-ssl-ca`,ref:o(`sslCa`),value:t.sslCa,invalid:!!c(`sslCa`),placeholder:`~/certs/ca.pem`,onChange:e=>n({sslCa:e.target.value}),onKeyDown:s,pickerTitle:`Choose the CA certificate`,onPick:e=>n({sslCa:e})})}),(0,Q.jsx)(I,{label:`Certificate`,htmlFor:`cf-ssl-cert`,optional:!0,error:c(`sslCert`),children:(0,Q.jsx)(F,{id:`cf-ssl-cert`,ref:o(`sslCert`),value:t.sslCert,invalid:!!c(`sslCert`),placeholder:`~/certs/client.crt`,onChange:e=>n({sslCert:e.target.value}),onKeyDown:s,pickerTitle:`Choose the client certificate`,onPick:e=>n({sslCert:e})})}),(0,Q.jsx)(I,{label:`Certificate key file password`,htmlFor:`cf-ssl-certpass`,optional:!0,children:(0,Q.jsx)(A,{id:`cf-ssl-certpass`,ref:o(`sslKeyPassword`),value:t.sslKeyPassword,placeholder:i?.sslKeyPasswordSaved?`Saved on the PPM host`:``,onChange:e=>n({sslKeyPassword:e.target.value}),onKeyDown:s})}),(0,Q.jsx)(I,{label:`Key file`,htmlFor:`cf-ssl-key`,optional:!0,error:c(`sslKey`),children:(0,Q.jsx)(F,{id:`cf-ssl-key`,ref:o(`sslKey`),value:t.sslKey,invalid:!!c(`sslKey`),placeholder:`~/certs/client.key`,onChange:e=>n({sslKey:e.target.value}),onKeyDown:s,pickerTitle:`Choose the client key file`,onPick:e=>n({sslKey:e})})}),(0,Q.jsx)(N,{id:`cf-ssl-reject`,checked:u&&!!l?.rejectUnauthorized,disabled:!u,onChange:e=>f(!0,e),title:`Reject unauthorized`,help:`Refuse a certificate that no trusted CA signed or that names another server.`})]}),l&&(0,Q.jsx)(k,{line:{tone:`plain`,text:d?`In the URL: ${d}.`:`The URL sets no SSL parameter: the connection is not encrypted.`}})]})}function It({form:e}){let{values:t,update:n,problem:r,register:i}=e,a=t.type,o=e=>r?.field===e?r.message:null;return(0,Q.jsxs)(`div`,{className:`grid content-start gap-4 md:gap-[18px]`,children:[(0,Q.jsx)(I,{label:`Allowed databases`,htmlFor:`cf-allowed`,error:o(`allowedDatabases`),help:`The tree lists only these. Empty: every database the user can see.`,children:(0,Q.jsx)(`textarea`,{id:`cf-allowed`,ref:i(`allowedDatabases`),rows:4,value:t.allowedDatabases,onChange:e=>n({allowedDatabases:e.target.value}),placeholder:`One database per line`,spellCheck:!1,autoCapitalize:`off`,className:_(O,`h-auto md:h-auto py-2 font-mono resize-y leading-normal`)})}),(0,Q.jsx)(I,{label:`Allowed databases regular expression`,htmlFor:`cf-allowed-re`,error:o(`allowedDatabasesRegex`),children:(0,Q.jsx)(j,{id:`cf-allowed-re`,ref:i(`allowedDatabasesRegex`),mono:!0,value:t.allowedDatabasesRegex,invalid:!!o(`allowedDatabasesRegex`),onChange:e=>n({allowedDatabasesRegex:e.target.value}),onKeyDown:$(e),placeholder:`^shop`})}),(0,Q.jsx)(I,{label:`Default isolation level`,htmlFor:`cf-isolation`,error:o(`isolationLevel`),help:`The transaction Save runs your changes in.`,children:(0,Q.jsxs)(M,{id:`cf-isolation`,ref:i(`isolationLevel`),value:t.isolationLevel,onChange:e=>n({isolationLevel:e.target.value}),children:[(0,Q.jsxs)(`option`,{value:``,children:[`Server default (`,ce[a],`)`]}),w.map(e=>(0,Q.jsx)(`option`,{value:e,children:e},e))]})}),(0,Q.jsx)(I,{label:`Query timeout (seconds)`,htmlFor:`cf-query-timeout`,error:o(`queryTimeoutSec`),help:`A statement the Query tab runs is stopped after this long. Empty: no limit.`,children:(0,Q.jsx)(j,{id:`cf-query-timeout`,ref:i(`queryTimeoutSec`),inputMode:`numeric`,value:t.queryTimeoutSec,invalid:!!o(`queryTimeoutSec`),onChange:e=>n({queryTimeoutSec:e.target.value}),onKeyDown:$(e),placeholder:`No limit`})})]})}function Lt({run:e,successDetail:t,successDetails:n,detailsOpen:r,onToggleDetails:i}){let a=e.kind===`idle`,o=null,s=null,l=``;if(e.kind===`running`){let t=e.action===`test`?`Testing connection…`:e.action===`connect`?`Connecting…`:`Saving…`;o=(0,Q.jsx)(p,{className:`size-4 animate-spin text-text-2`}),s=(0,Q.jsxs)(Q.Fragment,{children:[t,e.target&&(0,Q.jsx)(Rt,{children:e.target})]}),l=`${t} ${e.target}`}else e.kind===`ok`?(o=(0,Q.jsx)(c,{className:`size-4 text-success`}),s=(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`b`,{className:`font-semibold`,children:`Connected:`}),` `,e.result.version,(0,Q.jsx)(Rt,{children:t})]}),l=`Connected: ${e.result.version} · ${t}`):e.kind===`failed`?(o=(0,Q.jsx)(d,{className:`size-4 text-error`}),s=(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`b`,{className:`font-semibold text-error`,children:`Connection failed:`}),` `,e.result.error]}),l=`Connection failed: ${e.result.error}`):e.kind===`saveFailed`&&(o=(0,Q.jsx)(d,{className:`size-4 text-error`}),s=(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`b`,{className:`font-semibold text-error`,children:`Could not save:`}),` `,e.message]}),l=`Could not save: ${e.message}`);let u=e.kind===`failed`?e.result.details:e.kind===`ok`?n:``;return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{role:`status`,"aria-live":`polite`,"data-testid":`db-connection-result`,"data-state":e.kind,className:_(`order-first basis-full grow md:order-none md:basis-0 min-w-0 flex items-start md:items-center gap-2 md:ml-1.5 text-[13.5px] md:text-[12.5px] text-text-primary`,a&&`hidden md:flex md:invisible`),children:[o&&(0,Q.jsx)(`span`,{className:`grid place-items-center shrink-0 pt-0.5 md:pt-0`,children:o}),(0,Q.jsx)(`span`,{title:l,className:`min-w-0 break-words md:truncate`,children:s}),u&&(0,Q.jsx)(`button`,{type:`button`,onClick:i,"aria-expanded":r,className:`shrink-0 min-h-11 min-w-11 md:min-h-0 md:min-w-0 text-[13px] md:text-[12px] text-primary underline-offset-2 hover:underline`,children:r?`Hide details`:`Details`})]}),u&&r&&(0,Q.jsx)(`pre`,{"data-testid":`db-connection-details`,className:`order-first md:order-none basis-full m-0 max-h-[30vh] md:max-h-60 overflow-auto rounded-md border border-border-soft bg-surface px-2.5 py-2 font-mono text-[11.5px] leading-normal text-text-2 whitespace-pre-wrap break-words`,children:u})]})}function Rt({children:e}){return(0,Q.jsx)(`small`,{className:`block md:inline md:ml-1.5 mt-0.5 md:mt-0 text-[12.5px] md:text-[12px] text-text-subtle`,children:e})}var zt=`inline-flex items-center justify-center gap-1.5 h-11 md:h-8 flex-1 md:flex-none rounded-[10px] md:rounded-md px-3.5 text-[14px] md:text-[12.5px] font-medium disabled:opacity-50 disabled:cursor-not-allowed`;function Bt({metadata:e,tabId:t}){let n=typeof e?.connectionId==`number`?e.connectionId:null,r=Ct(n,t),i=(0,L.useRef)(null),a=(0,L.useRef)({}),o=Ee(r.values.type),s=typeof e?.connectionName==`string`?e.connectionName:`connection`,c=n===null?`New connection`:`Edit ${s}`,l=()=>{t&&y.getState().closeTab(t)},d=e=>{r.setTab(e),i.current?.scrollTo({top:0})},f=(e,t)=>{let n=e.key===`ArrowRight`?1:e.key===`ArrowLeft`?-1:0;if(!n)return;e.preventDefault();let r=o[(o.indexOf(t)+n+o.length)%o.length];d(r),a.current[r]?.focus()},m=(0,Q.jsxs)(`header`,{className:`md:hidden flex h-[52px] shrink-0 items-center gap-1.5 border-b border-border-soft bg-panel-2 pl-1 pr-3`,children:[(0,Q.jsx)(`button`,{type:`button`,onClick:l,"aria-label":`Close`,className:`grid size-11 place-items-center rounded-md text-text-2`,children:(0,Q.jsx)(u,{className:`size-5`})}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`b`,{className:`block truncate text-[15px] text-text-primary`,children:c}),(0,Q.jsx)(`small`,{className:`block text-xs text-text-subtle`,children:E[r.values.type]})]})]});if(r.load.kind!==`ready`)return(0,Q.jsxs)(`div`,{className:`flex h-full flex-col bg-background`,children:[m,(0,Q.jsx)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3 p-6 text-center text-sm text-text-2`,children:r.load.kind===`loading`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(p,{className:`size-5 animate-spin text-text-subtle`}),`Loading the connection…`]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`p`,{children:[`Could not open the connection: `,r.load.message]}),(0,Q.jsx)(`button`,{type:`button`,onClick:r.reload,className:_(zt,`flex-none border border-border bg-surface text-text-primary`),children:`Try again`})]})})]});let h=r.run,g=h.kind===`running`,v=g&&h.action===`test`,b=g&&h.action===`connect`;return(0,Q.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col bg-background`,"data-testid":`db-connection-tab`,children:[m,(0,Q.jsx)(`div`,{className:`shrink-0 border-b border-border bg-panel px-1 md:px-5`,children:(0,Q.jsx)(`div`,{role:`tablist`,"aria-label":`Connection settings`,className:`mx-auto flex w-full max-w-[760px] gap-0.5 overflow-x-auto`,children:o.map(e=>(0,Q.jsx)(`button`,{ref:t=>{a.current[e]=t},type:`button`,role:`tab`,id:`cft-${e}`,"aria-controls":`cfp-${e}`,"aria-selected":r.tab===e,tabIndex:r.tab===e?0:-1,onClick:()=>d(e),onKeyDown:t=>f(t,e),className:_(`h-11 md:h-[38px] shrink-0 whitespace-nowrap px-3.5 md:px-3 text-[13.5px] md:text-[12.5px]`,r.tab===e?`font-semibold text-text-primary shadow-[inset_0_-2px_0_var(--color-primary)]`:`text-text-2 can-hover:hover:text-text-primary`),children:Te[e]},e))})}),(0,Q.jsx)(`div`,{ref:i,className:`@container min-h-0 flex-1 overflow-auto px-4 pb-5 pt-4 md:px-5 md:pb-7 md:pt-[18px] md:[scrollbar-gutter:stable_both-edges]`,children:(0,Q.jsxs)(`div`,{id:`cfp-${r.tab}`,role:`tabpanel`,"aria-labelledby":`cft-${r.tab}`,className:`mx-auto w-full max-w-[760px]`,children:[r.tab===`general`&&(0,Q.jsx)(jt,{form:r}),r.tab===`ssh`&&(0,Q.jsx)(Pt,{form:r}),r.tab===`ssl`&&(0,Q.jsx)(Ft,{form:r}),r.tab===`advanced`&&(0,Q.jsx)(It,{form:r})]})}),(0,Q.jsx)(`footer`,{className:`shrink-0 border-t border-border bg-panel px-3 pt-2.5 pb-[calc(10px+env(safe-area-inset-bottom))] md:px-5 md:py-2.5`,children:(0,Q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-[760px] flex-wrap items-center gap-2`,children:[(0,Q.jsxs)(`button`,{type:`button`,onClick:r.connect,disabled:g,className:_(zt,`flex-[2] md:flex-none bg-primary text-primary-foreground can-hover:hover:bg-primary/90`),children:[b&&(0,Q.jsx)(p,{className:`size-4 animate-spin`}),b?`Connecting…`:`Connect`]}),(0,Q.jsx)(`button`,{type:`button`,onClick:r.test,disabled:g&&!v,className:_(zt,`border border-border bg-surface text-text-primary can-hover:hover:bg-surface-hover`),children:v?`Cancel test`:`Test`}),(0,Q.jsx)(`button`,{type:`button`,onClick:r.save,disabled:g,className:_(zt,`border border-border bg-surface text-text-primary can-hover:hover:bg-surface-hover`),children:`Save`}),(0,Q.jsx)(Lt,{run:h,successDetail:h.kind===`ok`?gt(h.result,r.values,r.ctx):``,successDetails:h.kind===`ok`?vt(h.result,r.values,r.ctx):``,detailsOpen:r.detailsOpen,onToggleDetails:r.toggleDetails})]})})]})}export{Bt as ConnectionFormTab};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{$ as r,Q as i,Z as a,at as o,ct as s,et as c,it as l,nt as u,ot as d,rt as f,st as p,tt as m}from"./vendor-ui-BTSIXzhZ.js";import{R as h,Y as g}from"./icons-BwyIKaTT.js";import{n as _}from"./utils-Bslrbb-G.js";import{n as v}from"./portal-container-context-NBi-KGK0.js";e(t(),1);var y=n();function b({...e}){return(0,y.jsx)(f,{"data-slot":`context-menu`,...e})}function x({...e}){return(0,y.jsx)(s,{"data-slot":`context-menu-trigger`,...e})}function S({container:e,...t}){let n=v();return(0,y.jsx)(c,{"data-slot":`context-menu-portal`,container:e??n,...t})}function C({...e}){return(0,y.jsx)(o,{"data-slot":`context-menu-sub`,...e})}function w({...e}){return(0,y.jsx)(m,{"data-slot":`context-menu-radio-group`,...e})}function T({className:e,inset:t,children:n,...r}){return(0,y.jsxs)(p,{"data-slot":`context-menu-sub-trigger`,"data-inset":t,className:_(`flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...r,children:[n,(0,y.jsx)(h,{className:`ml-auto`})]})}function E({className:e,...t}){return(0,y.jsx)(d,{"data-slot":`context-menu-sub-content`,className:_(`z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...t})}function D({className:e,...t}){return(0,y.jsx)(S,{children:(0,y.jsx)(a,{"data-slot":`context-menu-content`,className:_(`z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...t})})}function O({className:e,inset:t,variant:n=`default`,...r}){return(0,y.jsx)(i,{"data-slot":`context-menu-item`,"data-inset":t,"data-variant":n,className:_(`relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!`,e),...r})}function k({className:e,children:t,...n}){return(0,y.jsxs)(u,{"data-slot":`context-menu-radio-item`,className:_(`relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...n,children:[(0,y.jsx)(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:(0,y.jsx)(r,{children:(0,y.jsx)(g,{className:`size-2 fill-current`})})}),t]})}function A({className:e,...t}){return(0,y.jsx)(l,{"data-slot":`context-menu-separator`,className:_(`-mx-1 my-1 h-px bg-border`,e),...t})}export{k as a,E as c,w as i,T as l,D as n,A as o,O as r,C as s,b as t,x as u};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t}from"./vendor-markdown-C-P1aR4p.js";var n=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),r=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),i=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),a=e=>{let t=i(e);return t.charAt(0).toUpperCase()+t.slice(1)},o={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},s=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},c=e(t()),l=(0,c.forwardRef)(({color:e=`currentColor`,size:t=24,strokeWidth:r=2,absoluteStrokeWidth:i,className:a=``,children:l,iconNode:u,...d},f)=>(0,c.createElement)(`svg`,{ref:f,...o,width:t,height:t,stroke:e,strokeWidth:i?Number(r)*24/Number(t):r,className:n(`lucide`,a),...!l&&!s(d)&&{"aria-hidden":`true`},...d},[...u.map(([e,t])=>(0,c.createElement)(e,t)),...Array.isArray(l)?l:[l]])),u=(e,t)=>{let i=(0,c.forwardRef)(({className:i,...o},s)=>(0,c.createElement)(l,{ref:s,iconNode:t,className:n(`lucide-${r(a(e))}`,`lucide-${e}`,i),...o}));return i.displayName=a(e),i};export{u as t};
@@ -0,0 +1,10 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{g as r,o as i}from"./icons-BwyIKaTT.js";import{ai as a}from"./index-DLB3j_P0.js";var o=e(t(),1);function s(e,t){return typeof e==`function`?e(t):e}function c(e,t){return n=>{t.setState(t=>({...t,[e]:s(n,t[e])}))}}function l(e){return e instanceof Function}function u(e){return Array.isArray(e)&&e.every(e=>typeof e==`number`)}function d(e,t){let n=[],r=e=>{e.forEach(e=>{n.push(e);let i=t(e);i!=null&&i.length&&r(i)})};return r(e),n}function f(e,t,n){let r=[],i;return a=>{let o;n.key&&n.debug&&(o=Date.now());let s=e(a);if(!(s.length!==r.length||s.some((e,t)=>r[t]!==e)))return i;r=s;let c;if(n.key&&n.debug&&(c=Date.now()),i=t(...s),n==null||n.onChange==null||n.onChange(i),n.key&&n.debug&&n!=null&&n.debug()){let e=Math.round((Date.now()-o)*100)/100,t=Math.round((Date.now()-c)*100)/100,r=t/16,i=(e,t)=>{for(e=String(e);e.length<t;)e=` `+e;return e};console.info(`%c⏱ ${i(t,5)} /${i(e,5)} ms`,`
2
+ font-size: .6rem;
3
+ font-weight: bold;
4
+ color: hsl(${Math.max(0,Math.min(120-120*r,120))}deg 100% 31%);`,n?.key)}return i}}function p(e,t,n,r){return{debug:()=>e?.debugAll??e[t],key:!1,onChange:r}}function m(e,t,n,r){let i={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:()=>i.getValue()??e.options.renderFallbackValue,getContext:f(()=>[e,n,t,i],(e,t,n,r)=>({table:e,column:t,row:n,cell:r,getValue:r.getValue,renderValue:r.renderValue}),p(e.options,`debugCells`,`cell.getContext`))};return e._features.forEach(r=>{r.createCell==null||r.createCell(i,n,t,e)},{}),i}function h(e,t,n,r){let i={...e._getDefaultColumnDef(),...t},a=i.accessorKey,o=i.id??(a?typeof String.prototype.replaceAll==`function`?a.replaceAll(`.`,`_`):a.replace(/\./g,`_`):void 0)??(typeof i.header==`string`?i.header:void 0),s;if(i.accessorFn?s=i.accessorFn:a&&(s=a.includes(`.`)?e=>{let t=e;for(let e of a.split(`.`))t=t?.[e];return t}:e=>e[i.accessorKey]),!o)throw Error();let c={id:`${String(o)}`,accessorFn:s,parent:r,depth:n,columnDef:i,columns:[],getFlatColumns:f(()=>[!0],()=>[c,...c.columns?.flatMap(e=>e.getFlatColumns())],p(e.options,`debugColumns`,`column.getFlatColumns`)),getLeafColumns:f(()=>[e._getOrderColumnsFn()],e=>{var t;return(t=c.columns)!=null&&t.length?e(c.columns.flatMap(e=>e.getLeafColumns())):[c]},p(e.options,`debugColumns`,`column.getLeafColumns`))};for(let t of e._features)t.createColumn==null||t.createColumn(c,e);return c}var g=`debugHeaders`;function _(e,t,n){let r={id:n.id??t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{let e=[],t=n=>{n.subHeaders&&n.subHeaders.length&&n.subHeaders.map(t),e.push(n)};return t(r),e},getContext:()=>({table:e,header:r,column:t})};return e._features.forEach(t=>{t.createHeader==null||t.createHeader(r,e)}),r}var v={createTable:e=>{e.getHeaderGroups=f(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>{let a=r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],o=i?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],s=n.filter(e=>!(r!=null&&r.includes(e.id))&&!(i!=null&&i.includes(e.id)));return y(t,[...a,...s,...o],e)},p(e.options,g,`getHeaderGroups`)),e.getCenterHeaderGroups=f(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>(n=n.filter(e=>!(r!=null&&r.includes(e.id))&&!(i!=null&&i.includes(e.id))),y(t,n,e,`center`)),p(e.options,g,`getCenterHeaderGroups`)),e.getLeftHeaderGroups=f(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>y(t,r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],e,`left`),p(e.options,g,`getLeftHeaderGroups`)),e.getRightHeaderGroups=f(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>y(t,r?.map(e=>n.find(t=>t.id===e)).filter(Boolean)??[],e,`right`),p(e.options,g,`getRightHeaderGroups`)),e.getFooterGroups=f(()=>[e.getHeaderGroups()],e=>[...e].reverse(),p(e.options,g,`getFooterGroups`)),e.getLeftFooterGroups=f(()=>[e.getLeftHeaderGroups()],e=>[...e].reverse(),p(e.options,g,`getLeftFooterGroups`)),e.getCenterFooterGroups=f(()=>[e.getCenterHeaderGroups()],e=>[...e].reverse(),p(e.options,g,`getCenterFooterGroups`)),e.getRightFooterGroups=f(()=>[e.getRightHeaderGroups()],e=>[...e].reverse(),p(e.options,g,`getRightFooterGroups`)),e.getFlatHeaders=f(()=>[e.getHeaderGroups()],e=>e.map(e=>e.headers).flat(),p(e.options,g,`getFlatHeaders`)),e.getLeftFlatHeaders=f(()=>[e.getLeftHeaderGroups()],e=>e.map(e=>e.headers).flat(),p(e.options,g,`getLeftFlatHeaders`)),e.getCenterFlatHeaders=f(()=>[e.getCenterHeaderGroups()],e=>e.map(e=>e.headers).flat(),p(e.options,g,`getCenterFlatHeaders`)),e.getRightFlatHeaders=f(()=>[e.getRightHeaderGroups()],e=>e.map(e=>e.headers).flat(),p(e.options,g,`getRightFlatHeaders`)),e.getCenterLeafHeaders=f(()=>[e.getCenterFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),p(e.options,g,`getCenterLeafHeaders`)),e.getLeftLeafHeaders=f(()=>[e.getLeftFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),p(e.options,g,`getLeftLeafHeaders`)),e.getRightLeafHeaders=f(()=>[e.getRightFlatHeaders()],e=>e.filter(e=>{var t;return!((t=e.subHeaders)!=null&&t.length)}),p(e.options,g,`getRightLeafHeaders`)),e.getLeafHeaders=f(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(e,t,n)=>[...e[0]?.headers??[],...t[0]?.headers??[],...n[0]?.headers??[]].map(e=>e.getLeafHeaders()).flat(),p(e.options,g,`getLeafHeaders`))}};function y(e,t,n,r){let i=0,a=function(e,t){t===void 0&&(t=1),i=Math.max(i,t),e.filter(e=>e.getIsVisible()).forEach(e=>{var n;(n=e.columns)!=null&&n.length&&a(e.columns,t+1)},0)};a(e);let o=[],s=(e,t)=>{let i={depth:t,id:[r,`${t}`].filter(Boolean).join(`_`),headers:[]},a=[];e.forEach(e=>{let o=[...a].reverse()[0],s=e.column.depth===i.depth,c,l=!1;if(s&&e.column.parent?c=e.column.parent:(c=e.column,l=!0),o&&o?.column===c)o.subHeaders.push(e);else{let i=_(n,c,{id:[r,t,c.id,e?.id].filter(Boolean).join(`_`),isPlaceholder:l,placeholderId:l?`${a.filter(e=>e.column===c).length}`:void 0,depth:t,index:a.length});i.subHeaders.push(e),a.push(i)}i.headers.push(e),e.headerGroup=i}),o.push(i),t>0&&s(a,t-1)};s(t.map((e,t)=>_(n,e,{depth:i,index:t})),i-1),o.reverse();let c=e=>e.filter(e=>e.column.getIsVisible()).map(e=>{let t=0,n=0,r=[0];e.subHeaders&&e.subHeaders.length?(r=[],c(e.subHeaders).forEach(e=>{let{colSpan:n,rowSpan:i}=e;t+=n,r.push(i)})):t=1;let i=Math.min(...r);return n+=i,e.colSpan=t,e.rowSpan=n,{colSpan:t,rowSpan:n}});return c(o[0]?.headers??[]),o}var ee=(e,t,n,r,i,a,o)=>{let s={id:t,index:r,original:n,depth:i,parentId:o,_valuesCache:{},_uniqueValuesCache:{},getValue:t=>{if(s._valuesCache.hasOwnProperty(t))return s._valuesCache[t];let n=e.getColumn(t);if(n!=null&&n.accessorFn)return s._valuesCache[t]=n.accessorFn(s.original,r),s._valuesCache[t]},getUniqueValues:t=>{if(s._uniqueValuesCache.hasOwnProperty(t))return s._uniqueValuesCache[t];let n=e.getColumn(t);if(n!=null&&n.accessorFn)return n.columnDef.getUniqueValues?(s._uniqueValuesCache[t]=n.columnDef.getUniqueValues(s.original,r),s._uniqueValuesCache[t]):(s._uniqueValuesCache[t]=[s.getValue(t)],s._uniqueValuesCache[t])},renderValue:t=>s.getValue(t)??e.options.renderFallbackValue,subRows:a??[],getLeafRows:()=>d(s.subRows,e=>e.subRows),getParentRow:()=>s.parentId?e.getRow(s.parentId,!0):void 0,getParentRows:()=>{let e=[],t=s;for(;;){let n=t.getParentRow();if(!n)break;e.push(n),t=n}return e.reverse()},getAllCells:f(()=>[e.getAllLeafColumns()],t=>t.map(t=>m(e,s,t,t.id)),p(e.options,`debugRows`,`getAllCells`)),_getAllCellsByColumnId:f(()=>[s.getAllCells()],e=>e.reduce((e,t)=>(e[t.column.id]=t,e),{}),p(e.options,`debugRows`,`getAllCellsByColumnId`))};for(let t=0;t<e._features.length;t++){let n=e._features[t];n==null||n.createRow==null||n.createRow(s,e)}return s},te={createColumn:(e,t)=>{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},b=(e,t,n)=>{var r,i;let a=n==null||(r=n.toString())==null?void 0:r.toLowerCase();return!!(!((i=e.getValue(t))==null||(i=i.toString())==null||(i=i.toLowerCase())==null)&&i.includes(a))};b.autoRemove=e=>k(e);var ne=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};ne.autoRemove=e=>k(e);var x=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===n?.toLowerCase()};x.autoRemove=e=>k(e);var S=(e,t,n)=>e.getValue(t)?.includes(n);S.autoRemove=e=>k(e);var C=(e,t,n)=>!n.some(n=>{var r;return!((r=e.getValue(t))!=null&&r.includes(n))});C.autoRemove=e=>k(e)||!(e!=null&&e.length);var w=(e,t,n)=>n.some(n=>e.getValue(t)?.includes(n));w.autoRemove=e=>k(e)||!(e!=null&&e.length);var T=(e,t,n)=>e.getValue(t)===n;T.autoRemove=e=>k(e);var E=(e,t,n)=>e.getValue(t)==n;E.autoRemove=e=>k(e);var D=(e,t,n)=>{let[r,i]=n,a=e.getValue(t);return a>=r&&a<=i};D.resolveFilterValue=e=>{let[t,n]=e,r=typeof t==`number`?t:parseFloat(t),i=typeof n==`number`?n:parseFloat(n),a=t===null||Number.isNaN(r)?-1/0:r,o=n===null||Number.isNaN(i)?1/0:i;if(a>o){let e=a;a=o,o=e}return[a,o]},D.autoRemove=e=>k(e)||k(e[0])&&k(e[1]);var O={includesString:b,includesStringSensitive:ne,equalsString:x,arrIncludes:S,arrIncludesAll:C,arrIncludesSome:w,equals:T,weakEquals:E,inNumberRange:D};function k(e){return e==null||e===``}var re={getDefaultColumnDef:()=>({filterFn:`auto`}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:c(`columnFilters`,e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{let n=t.getCoreRowModel().flatRows[0]?.getValue(e.id);return typeof n==`string`?O.includesString:typeof n==`number`?O.inNumberRange:typeof n==`boolean`||typeof n==`object`&&n?O.equals:Array.isArray(n)?O.arrIncludes:O.weakEquals},e.getFilterFn=()=>l(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn===`auto`?e.getAutoFilterFn():t.options.filterFns?.[e.columnDef.filterFn]??O[e.columnDef.filterFn],e.getCanFilter=()=>(e.columnDef.enableColumnFilter??!0)&&(t.options.enableColumnFilters??!0)&&(t.options.enableFilters??!0)&&!!e.accessorFn,e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(t=>t.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>t.getState().columnFilters?.findIndex(t=>t.id===e.id)??-1,e.setFilterValue=n=>{t.setColumnFilters(t=>{let r=e.getFilterFn(),i=t?.find(t=>t.id===e.id),a=s(n,i?i.value:void 0);if(A(r,a,e))return t?.filter(t=>t.id!==e.id)??[];let o={id:e.id,value:a};return i?t?.map(t=>t.id===e.id?o:t)??[]:t!=null&&t.length?[...t,o]:[o]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{let n=e.getAllLeafColumns();e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(e=>s(t,e)?.filter(e=>{let t=n.find(t=>t.id===e.id);return!(t&&A(t.getFilterFn(),e.value,t))}))},e.resetColumnFilters=t=>{e.setColumnFilters(t?[]:e.initialState?.columnFilters??[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function A(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||t===void 0||typeof t==`string`&&!t}var j={sum:(e,t,n)=>n.reduce((t,n)=>{let r=n.getValue(e);return t+(typeof r==`number`?r:0)},0),min:(e,t,n)=>{let r;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r>n||r===void 0&&n>=n)&&(r=n)}),r},max:(e,t,n)=>{let r;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r<n||r===void 0&&n>=n)&&(r=n)}),r},extent:(e,t,n)=>{let r,i;return n.forEach(t=>{let n=t.getValue(e);n!=null&&(r===void 0?n>=n&&(r=i=n):(r>n&&(r=n),i<n&&(i=n)))}),[r,i]},mean:(e,t)=>{let n=0,r=0;if(t.forEach(t=>{let i=t.getValue(e);i!=null&&(i=+i)>=i&&(++n,r+=i)}),n)return r/n},median:(e,t)=>{if(!t.length)return;let n=t.map(t=>t.getValue(e));if(!u(n))return;if(n.length===1)return n[0];let r=Math.floor(n.length/2),i=n.sort((e,t)=>e-t);return n.length%2==0?(i[r-1]+i[r])/2:i[r]},unique:(e,t)=>Array.from(new Set(t.map(t=>t.getValue(e))).values()),uniqueCount:(e,t)=>new Set(t.map(t=>t.getValue(e))).size,count:(e,t)=>t.length},ie={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t;return((t=e.getValue())==null||t.toString==null?void 0:t.toString())??null},aggregationFn:`auto`}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:c(`grouping`,e),groupedColumnMode:`reorder`}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(t=>t!=null&&t.includes(e.id)?t.filter(t=>t!==e.id):[...t??[],e.id])},e.getCanGroup=()=>(e.columnDef.enableGrouping??!0)&&(t.options.enableGrouping??!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue),e.getIsGrouped=()=>t.getState().grouping?.includes(e.id),e.getGroupedIndex=()=>t.getState().grouping?.indexOf(e.id),e.getToggleGroupingHandler=()=>{let t=e.getCanGroup();return()=>{t&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{let n=t.getCoreRowModel().flatRows[0]?.getValue(e.id);if(typeof n==`number`)return j.sum;if(Object.prototype.toString.call(n)===`[object Date]`)return j.extent},e.getAggregationFn=()=>{if(!e)throw Error();return l(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn===`auto`?e.getAutoAggregationFn():t.options.aggregationFns?.[e.columnDef.aggregationFn]??j[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{e.setGrouping(t?[]:e.initialState?.grouping??[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];let r=t.getColumn(n);return r!=null&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var t;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((t=n.subRows)!=null&&t.length)}}};function ae(e,t,n){if(!(t!=null&&t.length)||!n)return e;let r=e.filter(e=>!t.includes(e.id));return n===`remove`?r:[...t.map(t=>e.find(e=>e.id===t)).filter(Boolean),...r]}var oe={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:c(`columnOrder`,e)}),createColumn:(e,t)=>{e.getIndex=f(e=>[L(t,e)],t=>t.findIndex(t=>t.id===e.id),p(t.options,`debugColumns`,`getIndex`)),e.getIsFirstColumn=n=>L(t,n)[0]?.id===e.id,e.getIsLastColumn=n=>{let r=L(t,n);return r[r.length-1]?.id===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{e.setColumnOrder(t?[]:e.initialState.columnOrder??[])},e._getOrderColumnsFn=f(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(e,t,n)=>r=>{let i=[];if(!(e!=null&&e.length))i=r;else{let t=[...e],n=[...r];for(;n.length&&t.length;){let e=t.shift(),r=n.findIndex(t=>t.id===e);r>-1&&i.push(n.splice(r,1)[0])}i=[...i,...n]}return ae(i,t,n)},p(e.options,`debugTable`,`_getOrderColumnsFn`))}},M=()=>({left:[],right:[]}),se={getInitialState:e=>({columnPinning:M(),...e}),getDefaultOptions:e=>({onColumnPinningChange:c(`columnPinning`,e)}),createColumn:(e,t)=>{e.pin=n=>{let r=e.getLeafColumns().map(e=>e.id).filter(Boolean);t.setColumnPinning(e=>n===`right`?{left:(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),right:[...(e?.right??[]).filter(e=>!(r!=null&&r.includes(e))),...r]}:n===`left`?{left:[...(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),...r],right:(e?.right??[]).filter(e=>!(r!=null&&r.includes(e)))}:{left:(e?.left??[]).filter(e=>!(r!=null&&r.includes(e))),right:(e?.right??[]).filter(e=>!(r!=null&&r.includes(e)))})},e.getCanPin=()=>e.getLeafColumns().some(e=>(e.columnDef.enablePinning??!0)&&(t.options.enableColumnPinning??t.options.enablePinning??!0)),e.getIsPinned=()=>{let n=e.getLeafColumns().map(e=>e.id),{left:r,right:i}=t.getState().columnPinning,a=n.some(e=>r?.includes(e)),o=n.some(e=>i?.includes(e));return a?`left`:o?`right`:!1},e.getPinnedIndex=()=>{var n;let r=e.getIsPinned();return r?((n=t.getState().columnPinning)==null||(n=n[r])==null?void 0:n.indexOf(e.id))??-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=f(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(e,t,n)=>{let r=[...t??[],...n??[]];return e.filter(e=>!r.includes(e.column.id))},p(t.options,`debugRows`,`getCenterVisibleCells`)),e.getLeftVisibleCells=f(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(e,t)=>(t??[]).map(t=>e.find(e=>e.column.id===t)).filter(Boolean).map(e=>({...e,position:`left`})),p(t.options,`debugRows`,`getLeftVisibleCells`)),e.getRightVisibleCells=f(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(e,t)=>(t??[]).map(t=>e.find(e=>e.column.id===t)).filter(Boolean).map(e=>({...e,position:`right`})),p(t.options,`debugRows`,`getRightVisibleCells`))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>e.setColumnPinning(t?M():e.initialState?.columnPinning??M()),e.getIsSomeColumnsPinned=t=>{let n=e.getState().columnPinning;return t?!!n[t]?.length:!!(n.left?.length||n.right?.length)},e.getLeftLeafColumns=f(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(e,t)=>(t??[]).map(t=>e.find(e=>e.id===t)).filter(Boolean),p(e.options,`debugColumns`,`getLeftLeafColumns`)),e.getRightLeafColumns=f(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(e,t)=>(t??[]).map(t=>e.find(e=>e.id===t)).filter(Boolean),p(e.options,`debugColumns`,`getRightLeafColumns`)),e.getCenterLeafColumns=f(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(e,t,n)=>{let r=[...t??[],...n??[]];return e.filter(e=>!r.includes(e.id))},p(e.options,`debugColumns`,`getCenterLeafColumns`))}};function ce(e){return e||(typeof document<`u`?document:null)}var N={size:150,minSize:20,maxSize:2**53-1},P=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),le={getDefaultColumnDef:()=>N,getInitialState:e=>({columnSizing:{},columnSizingInfo:P(),...e}),getDefaultOptions:e=>({columnResizeMode:`onEnd`,columnResizeDirection:`ltr`,onColumnSizingChange:c(`columnSizing`,e),onColumnSizingInfoChange:c(`columnSizingInfo`,e)}),createColumn:(e,t)=>{e.getSize=()=>{let n=t.getState().columnSizing[e.id];return Math.min(Math.max(e.columnDef.minSize??N.minSize,n??e.columnDef.size??N.size),e.columnDef.maxSize??N.maxSize)},e.getStart=f(e=>[e,L(t,e),t.getState().columnSizing],(t,n)=>n.slice(0,e.getIndex(t)).reduce((e,t)=>e+t.getSize(),0),p(t.options,`debugColumns`,`getStart`)),e.getAfter=f(e=>[e,L(t,e),t.getState().columnSizing],(t,n)=>n.slice(e.getIndex(t)+1).reduce((e,t)=>e+t.getSize(),0),p(t.options,`debugColumns`,`getAfter`)),e.resetSize=()=>{t.setColumnSizing(t=>{let{[e.id]:n,...r}=t;return r})},e.getCanResize=()=>(e.columnDef.enableResizing??!0)&&(t.options.enableColumnResizing??!0),e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let t=0,n=e=>{e.subHeaders.length?e.subHeaders.forEach(n):t+=e.column.getSize()??0};return n(e),t},e.getStart=()=>{if(e.index>0){let t=e.headerGroup.headers[e.index-1];return t.getStart()+t.getSize()}return 0},e.getResizeHandler=n=>{let r=t.getColumn(e.column.id),i=r?.getCanResize();return a=>{if(!r||!i||(a.persist==null||a.persist(),I(a)&&a.touches&&a.touches.length>1))return;let o=e.getSize(),s=e?e.getLeafHeaders().map(e=>[e.column.id,e.column.getSize()]):[[r.id,r.getSize()]],c=I(a)?Math.round(a.touches[0].clientX):a.clientX,l={},u=(e,n)=>{typeof n==`number`&&(t.setColumnSizingInfo(e=>{let r=t.options.columnResizeDirection===`rtl`?-1:1,i=(n-(e?.startOffset??0))*r,a=Math.max(i/(e?.startSize??0),-.999999);return e.columnSizingStart.forEach(e=>{let[t,n]=e;l[t]=Math.round(Math.max(n+n*a,0)*100)/100}),{...e,deltaOffset:i,deltaPercentage:a}}),(t.options.columnResizeMode===`onChange`||e===`end`)&&t.setColumnSizing(e=>({...e,...l})))},d=e=>u(`move`,e),f=e=>{u(`end`,e),t.setColumnSizingInfo(e=>({...e,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},p=ce(n),m={moveHandler:e=>d(e.clientX),upHandler:e=>{p?.removeEventListener(`mousemove`,m.moveHandler),p?.removeEventListener(`mouseup`,m.upHandler),f(e.clientX)}},h={moveHandler:e=>(e.cancelable&&(e.preventDefault(),e.stopPropagation()),d(e.touches[0].clientX),!1),upHandler:e=>{p?.removeEventListener(`touchmove`,h.moveHandler),p?.removeEventListener(`touchend`,h.upHandler),e.cancelable&&(e.preventDefault(),e.stopPropagation()),f(e.touches[0]?.clientX)}},g=ue()?{passive:!1}:!1;I(a)?(p?.addEventListener(`touchmove`,h.moveHandler,g),p?.addEventListener(`touchend`,h.upHandler,g)):(p?.addEventListener(`mousemove`,m.moveHandler,g),p?.addEventListener(`mouseup`,m.upHandler,g)),t.setColumnSizingInfo(e=>({...e,startOffset:c,startSize:o,deltaOffset:0,deltaPercentage:0,columnSizingStart:s,isResizingColumn:r.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{e.setColumnSizing(t?{}:e.initialState.columnSizing??{})},e.resetHeaderSizeInfo=t=>{e.setColumnSizingInfo(t?P():e.initialState.columnSizingInfo??P())},e.getTotalSize=()=>e.getHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getLeftTotalSize=()=>e.getLeftHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getCenterTotalSize=()=>e.getCenterHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0,e.getRightTotalSize=()=>e.getRightHeaderGroups()[0]?.headers.reduce((e,t)=>e+t.getSize(),0)??0}},F=null;function ue(){if(typeof F==`boolean`)return F;let e=!1;try{let t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener(`test`,n,t),window.removeEventListener(`test`,n)}catch{e=!1}return F=e,F}function I(e){return e.type===`touchstart`}var de={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:c(`columnVisibility`,e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(t=>({...t,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{let n=e.columns;return(n.length?n.some(e=>e.getIsVisible()):t.getState().columnVisibility?.[e.id])??!0},e.getCanHide=()=>(e.columnDef.enableHiding??!0)&&(t.options.enableHiding??!0),e.getToggleVisibilityHandler=()=>t=>{e.toggleVisibility==null||e.toggleVisibility(t.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=f(()=>[e.getAllCells(),t.getState().columnVisibility],e=>e.filter(e=>e.column.getIsVisible()),p(t.options,`debugRows`,`_getAllVisibleCells`)),e.getVisibleCells=f(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(e,t,n)=>[...e,...t,...n],p(t.options,`debugRows`,`getVisibleCells`))},createTable:e=>{let t=(t,n)=>f(()=>[n(),n().filter(e=>e.getIsVisible()).map(e=>e.id).join(`_`)],e=>e.filter(e=>e.getIsVisible==null?void 0:e.getIsVisible()),p(e.options,`debugColumns`,t));e.getVisibleFlatColumns=t(`getVisibleFlatColumns`,()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t(`getVisibleLeafColumns`,()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t(`getLeftVisibleLeafColumns`,()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t(`getRightVisibleLeafColumns`,()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t(`getCenterVisibleLeafColumns`,()=>e.getCenterLeafColumns()),e.setColumnVisibility=t=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(t),e.resetColumnVisibility=t=>{e.setColumnVisibility(t?{}:e.initialState.columnVisibility??{})},e.toggleAllColumnsVisible=t=>{t??=!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((e,n)=>({...e,[n.id]:t||!(n.getCanHide!=null&&n.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(e=>!(e.getIsVisible!=null&&e.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(e=>e.getIsVisible==null?void 0:e.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>t=>{e.toggleAllColumnsVisible(t.target?.checked)}}};function L(e,t){return t?t===`center`?e.getCenterVisibleLeafColumns():t===`left`?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}var fe={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,`__global__`),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,`__global__`),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,`__global__`),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},pe={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:c(`globalFilter`,e),globalFilterFn:`auto`,getColumnCanGlobalFilter:t=>{var n;let r=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof r==`string`||typeof r==`number`}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>(e.columnDef.enableGlobalFilter??!0)&&(t.options.enableGlobalFilter??!0)&&(t.options.enableFilters??!0)&&((t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))??!0)&&!!e.accessorFn},createTable:e=>{e.getGlobalAutoFilterFn=()=>O.includesString,e.getGlobalFilterFn=()=>{let{globalFilterFn:t}=e.options;return l(t)?t:t===`auto`?e.getGlobalAutoFilterFn():e.options.filterFns?.[t]??O[t]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},me={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:c(`expanded`,e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{if(!t){e._queue(()=>{t=!0});return}if(e.options.autoResetAll??e.options.autoResetExpanded??!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=t=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(t),e.toggleAllRowsExpanded=t=>{t??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=t=>{e.setExpanded(t?{}:e.initialState?.expanded??{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(e=>e.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>t=>{t.persist==null||t.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{let t=e.getState().expanded;return t===!0||Object.values(t).some(Boolean)},e.getIsAllRowsExpanded=()=>{let t=e.getState().expanded;return typeof t==`boolean`?t===!0:!(!Object.keys(t).length||e.getRowModel().flatRows.some(e=>!e.getIsExpanded()))},e.getExpandedDepth=()=>{let t=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(e=>{let n=e.split(`.`);t=Math.max(t,n.length)}),t},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(r=>{let i=r===!0?!0:!!(r!=null&&r[e.id]),a={};if(r===!0?Object.keys(t.getRowModel().rowsById).forEach(e=>{a[e]=!0}):a=r,n??=!i,!i&&n)return{...a,[e.id]:!0};if(i&&!n){let{[e.id]:t,...n}=a;return n}return r})},e.getIsExpanded=()=>{let n=t.getState().expanded;return!!((t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))??(n===!0||n?.[e.id]))},e.getCanExpand=()=>{var n;return(t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))??((t.options.enableExpanding??!0)&&!!((n=e.subRows)!=null&&n.length))},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{let t=e.getCanExpand();return()=>{t&&e.toggleExpanded()}}}},R=0,z=10,B=()=>({pageIndex:R,pageSize:z}),he={getInitialState:e=>({...e,pagination:{...B(),...e?.pagination}}),getDefaultOptions:e=>({onPaginationChange:c(`pagination`,e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{if(!t){e._queue(()=>{t=!0});return}if(e.options.autoResetAll??e.options.autoResetPageIndex??!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=t=>e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(e=>s(t,e)),e.resetPagination=t=>{e.setPagination(t?B():e.initialState.pagination??B())},e.setPageIndex=t=>{e.setPagination(n=>{let r=s(t,n.pageIndex),i=e.options.pageCount===void 0||e.options.pageCount===-1?2**53-1:e.options.pageCount-1;return r=Math.max(0,Math.min(r,i)),{...n,pageIndex:r}})},e.resetPageIndex=t=>{var n;e.setPageIndex(t?R:((n=e.initialState)==null||(n=n.pagination)==null?void 0:n.pageIndex)??R)},e.resetPageSize=t=>{var n;e.setPageSize(t?z:((n=e.initialState)==null||(n=n.pagination)==null?void 0:n.pageSize)??z)},e.setPageSize=t=>{e.setPagination(e=>{let n=Math.max(1,s(t,e.pageSize)),r=e.pageSize*e.pageIndex,i=Math.floor(r/n);return{...e,pageIndex:i,pageSize:n}})},e.setPageCount=t=>e.setPagination(n=>{let r=s(t,e.options.pageCount??-1);return typeof r==`number`&&(r=Math.max(-1,r)),{...n,pageCount:r}}),e.getPageOptions=f(()=>[e.getPageCount()],e=>{let t=[];return e&&e>0&&(t=[...Array(e)].fill(null).map((e,t)=>t)),t},p(e.options,`debugTable`,`getPageOptions`)),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{let{pageIndex:t}=e.getState().pagination,n=e.getPageCount();return n===-1?!0:n===0?!1:t<n-1},e.previousPage=()=>e.setPageIndex(e=>e-1),e.nextPage=()=>e.setPageIndex(e=>e+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>e.options.pageCount??Math.ceil(e.getRowCount()/e.getState().pagination.pageSize),e.getRowCount=()=>e.options.rowCount??e.getPrePaginationRowModel().rows.length}},V=()=>({top:[],bottom:[]}),ge={getInitialState:e=>({rowPinning:V(),...e}),getDefaultOptions:e=>({onRowPinningChange:c(`rowPinning`,e)}),createRow:(e,t)=>{e.pin=(n,r,i)=>{let a=r?e.getLeafRows().map(e=>{let{id:t}=e;return t}):[],o=i?e.getParentRows().map(e=>{let{id:t}=e;return t}):[],s=new Set([...o,e.id,...a]);t.setRowPinning(e=>n===`bottom`?{top:(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),bottom:[...(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e))),...Array.from(s)]}:n===`top`?{top:[...(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),...Array.from(s)],bottom:(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e)))}:{top:(e?.top??[]).filter(e=>!(s!=null&&s.has(e))),bottom:(e?.bottom??[]).filter(e=>!(s!=null&&s.has(e)))})},e.getCanPin=()=>{let{enableRowPinning:n,enablePinning:r}=t.options;return typeof n==`function`?n(e):n??r??!0},e.getIsPinned=()=>{let n=[e.id],{top:r,bottom:i}=t.getState().rowPinning,a=n.some(e=>r?.includes(e)),o=n.some(e=>i?.includes(e));return a?`top`:o?`bottom`:!1},e.getPinnedIndex=()=>{let n=e.getIsPinned();return n?((n===`top`?t.getTopRows():t.getBottomRows())?.map(e=>{let{id:t}=e;return t}))?.indexOf(e.id)??-1:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>e.setRowPinning(t?V():e.initialState?.rowPinning??V()),e.getIsSomeRowsPinned=t=>{let n=e.getState().rowPinning;return t?!!n[t]?.length:!!(n.top?.length||n.bottom?.length)},e._getPinnedRows=(t,n,r)=>(e.options.keepPinnedRows??!0?(n??[]).map(t=>{let n=e.getRow(t,!0);return n.getIsAllParentsExpanded()?n:null}):(n??[]).map(e=>t.find(t=>t.id===e))).filter(Boolean).map(e=>({...e,position:r})),e.getTopRows=f(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,`top`),p(e.options,`debugRows`,`getTopRows`)),e.getBottomRows=f(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,`bottom`),p(e.options,`debugRows`,`getBottomRows`)),e.getCenterRows=f(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(e,t,n)=>{let r=new Set([...t??[],...n??[]]);return e.filter(e=>!r.has(e.id))},p(e.options,`debugRows`,`getCenterRows`))}},_e={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:c(`rowSelection`,e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>e.setRowSelection(t?{}:e.initialState.rowSelection??{}),e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=t===void 0?!e.getIsAllRowsSelected():t;let r={...n},i=e.getPreGroupedRowModel().flatRows;return t?i.forEach(e=>{e.getCanSelect()&&(r[e.id]=!0)}):i.forEach(e=>{delete r[e.id]}),r})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{let r=t===void 0?!e.getIsAllPageRowsSelected():t,i={...n};return e.getRowModel().rows.forEach(t=>{H(i,t.id,r,!0,e)}),i}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=f(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?U(e,n):{rows:[],flatRows:[],rowsById:{}},p(e.options,`debugTable`,`getSelectedRowModel`)),e.getFilteredSelectedRowModel=f(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?U(e,n):{rows:[],flatRows:[],rowsById:{}},p(e.options,`debugTable`,`getFilteredSelectedRowModel`)),e.getGroupedSelectedRowModel=f(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?U(e,n):{rows:[],flatRows:[],rowsById:{}},p(e.options,`debugTable`,`getGroupedSelectedRowModel`)),e.getIsAllRowsSelected=()=>{let t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState(),r=!!(t.length&&Object.keys(n).length);return r&&t.some(e=>e.getCanSelect()&&!n[e.id])&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{let t=e.getPaginationRowModel().flatRows.filter(e=>e.getCanSelect()),{rowSelection:n}=e.getState(),r=!!t.length;return r&&t.some(e=>!n[e.id])&&(r=!1),r},e.getIsSomeRowsSelected=()=>{let t=Object.keys(e.getState().rowSelection??{}).length;return t>0&&t<e.getFilteredRowModel().flatRows.length},e.getIsSomePageRowsSelected=()=>{let t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(e=>e.getCanSelect()).some(e=>e.getIsSelected()||e.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{let i=e.getIsSelected();t.setRowSelection(a=>{if(n=n===void 0?!i:n,e.getCanSelect()&&i===n)return a;let o={...a};return H(o,e.id,n,r?.selectChildren??!0,t),o})},e.getIsSelected=()=>{let{rowSelection:n}=t.getState();return W(e,n)},e.getIsSomeSelected=()=>{let{rowSelection:n}=t.getState();return G(e,n)===`some`},e.getIsAllSubRowsSelected=()=>{let{rowSelection:n}=t.getState();return G(e,n)===`all`},e.getCanSelect=()=>typeof t.options.enableRowSelection==`function`?t.options.enableRowSelection(e):t.options.enableRowSelection??!0,e.getCanSelectSubRows=()=>typeof t.options.enableSubRowSelection==`function`?t.options.enableSubRowSelection(e):t.options.enableSubRowSelection??!0,e.getCanMultiSelect=()=>typeof t.options.enableMultiRowSelection==`function`?t.options.enableMultiRowSelection(e):t.options.enableMultiRowSelection??!0,e.getToggleSelectedHandler=()=>{let t=e.getCanSelect();return n=>{t&&e.toggleSelected(n.target?.checked)}}}},H=(e,t,n,r,i)=>{var a;let o=i.getRow(t,!0);n?(o.getCanMultiSelect()||Object.keys(e).forEach(t=>delete e[t]),o.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(a=o.subRows)!=null&&a.length&&o.getCanSelectSubRows()&&o.subRows.forEach(t=>H(e,t.id,n,r,i))};function U(e,t){let n=e.getState().rowSelection,r=[],i={},a=function(e,t){return e.map(e=>{var t;let o=W(e,n);if(o&&(r.push(e),i[e.id]=e),(t=e.subRows)!=null&&t.length&&(e={...e,subRows:a(e.subRows)}),o)return e}).filter(Boolean)};return{rows:a(t.rows),flatRows:r,rowsById:i}}function W(e,t){return t[e.id]??!1}function G(e,t,n){var r;if(!((r=e.subRows)!=null&&r.length))return!1;let i=!0,a=!1;return e.subRows.forEach(e=>{if(!(a&&!i)&&(e.getCanSelect()&&(W(e,t)?a=!0:i=!1),e.subRows&&e.subRows.length)){let n=G(e,t);n===`all`?a=!0:(n===`some`&&(a=!0),i=!1)}}),i?`all`:a?`some`:!1}var K=/([0-9]+)/gm,ve=(e,t,n)=>Y(J(e.getValue(n)).toLowerCase(),J(t.getValue(n)).toLowerCase()),ye=(e,t,n)=>Y(J(e.getValue(n)),J(t.getValue(n))),be=(e,t,n)=>q(J(e.getValue(n)).toLowerCase(),J(t.getValue(n)).toLowerCase()),xe=(e,t,n)=>q(J(e.getValue(n)),J(t.getValue(n))),Se=(e,t,n)=>{let r=e.getValue(n),i=t.getValue(n);return r>i?1:r<i?-1:0},Ce=(e,t,n)=>q(e.getValue(n),t.getValue(n));function q(e,t){return e===t?0:e>t?1:-1}function J(e){return typeof e==`number`?isNaN(e)||e===1/0||e===-1/0?``:String(e):typeof e==`string`?e:``}function Y(e,t){let n=e.split(K).filter(Boolean),r=t.split(K).filter(Boolean);for(;n.length&&r.length;){let e=n.shift(),t=r.shift(),i=parseInt(e,10),a=parseInt(t,10),o=[i,a].sort();if(isNaN(o[0])){if(e>t)return 1;if(t>e)return-1;continue}if(isNaN(o[1]))return isNaN(i)?-1:1;if(i>a)return 1;if(a>i)return-1}return n.length-r.length}var X={alphanumeric:ve,alphanumericCaseSensitive:ye,text:be,textCaseSensitive:xe,datetime:Se,basic:Ce},we=[v,de,oe,se,te,re,fe,pe,{getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:`auto`,sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:c(`sorting`,e),isMultiSortEvent:e=>e.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{let n=t.getFilteredRowModel().flatRows.slice(10),r=!1;for(let t of n){let n=t?.getValue(e.id);if(Object.prototype.toString.call(n)===`[object Date]`)return X.datetime;if(typeof n==`string`&&(r=!0,n.split(K).length>1))return X.alphanumeric}return r?X.text:X.basic},e.getAutoSortDir=()=>typeof t.getFilteredRowModel().flatRows[0]?.getValue(e.id)==`string`?`asc`:`desc`,e.getSortingFn=()=>{if(!e)throw Error();return l(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn===`auto`?e.getAutoSortingFn():t.options.sortingFns?.[e.columnDef.sortingFn]??X[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{let i=e.getNextSortingOrder(),a=n!=null;t.setSorting(o=>{let s=o?.find(t=>t.id===e.id),c=o?.findIndex(t=>t.id===e.id),l=[],u,d=a?n:i===`desc`;return u=o!=null&&o.length&&e.getCanMultiSort()&&r?s?`toggle`:`add`:o!=null&&o.length&&c!==o.length-1?`replace`:s?`toggle`:`replace`,u===`toggle`&&(a||i||(u=`remove`)),u===`add`?(l=[...o,{id:e.id,desc:d}],l.splice(0,l.length-(t.options.maxMultiSortColCount??2**53-1))):l=u===`toggle`?o.map(t=>t.id===e.id?{...t,desc:d}:t):u===`remove`?o.filter(t=>t.id!==e.id):[{id:e.id,desc:d}],l})},e.getFirstSortDir=()=>e.columnDef.sortDescFirst??t.options.sortDescFirst??e.getAutoSortDir()===`desc`?`desc`:`asc`,e.getNextSortingOrder=n=>{let r=e.getFirstSortDir(),i=e.getIsSorted();return i?i!==r&&(t.options.enableSortingRemoval??!0)&&(!n||(t.options.enableMultiRemove??!0))?!1:i===`desc`?`asc`:`desc`:r},e.getCanSort=()=>(e.columnDef.enableSorting??!0)&&(t.options.enableSorting??!0)&&!!e.accessorFn,e.getCanMultiSort=()=>e.columnDef.enableMultiSort??t.options.enableMultiSort??!!e.accessorFn,e.getIsSorted=()=>{let n=t.getState().sorting?.find(t=>t.id===e.id);return n?n.desc?`desc`:`asc`:!1},e.getSortIndex=()=>t.getState().sorting?.findIndex(t=>t.id===e.id)??-1,e.clearSorting=()=>{t.setSorting(t=>t!=null&&t.length?t.filter(t=>t.id!==e.id):[])},e.getToggleSortingHandler=()=>{let n=e.getCanSort();return r=>{n&&(r.persist==null||r.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(r):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{e.setSorting(t?[]:e.initialState?.sorting??[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},ie,me,he,ge,_e,le];function Te(e){let t=[...we,...e._features??[]],n={_features:t},r=n._features.reduce((e,t)=>Object.assign(e,t.getDefaultOptions==null?void 0:t.getDefaultOptions(n)),{}),i=e=>n.options.mergeOptions?n.options.mergeOptions(r,e):{...r,...e},a={...e.initialState??{}};n._features.forEach(e=>{a=(e.getInitialState==null?void 0:e.getInitialState(a))??a});let o=[],c=!1,l={_features:t,options:{...r,...e},initialState:a,_queue:e=>{o.push(e),c||(c=!0,Promise.resolve().then(()=>{for(;o.length;)o.shift()();c=!1}).catch(e=>setTimeout(()=>{throw e})))},reset:()=>{n.setState(n.initialState)},setOptions:e=>{n.options=i(s(e,n.options))},getState:()=>n.options.state,setState:e=>{n.options.onStateChange==null||n.options.onStateChange(e)},_getRowId:(e,t,r)=>(n.options.getRowId==null?void 0:n.options.getRowId(e,t,r))??`${r?[r.id,t].join(`.`):t}`,getCoreRowModel:()=>(n._getCoreRowModel||=n.options.getCoreRowModel(n),n._getCoreRowModel()),getRowModel:()=>n.getPaginationRowModel(),getRow:(e,t)=>{let r=(t?n.getPrePaginationRowModel():n.getRowModel()).rowsById[e];if(!r&&(r=n.getCoreRowModel().rowsById[e],!r))throw Error();return r},_getDefaultColumnDef:f(()=>[n.options.defaultColumn],e=>(e??={},{header:e=>{let t=e.header.column.columnDef;return t.accessorKey?t.accessorKey:t.accessorFn?t.id:null},cell:e=>{var t;return((t=e.renderValue())==null||t.toString==null?void 0:t.toString())??null},...n._features.reduce((e,t)=>Object.assign(e,t.getDefaultColumnDef==null?void 0:t.getDefaultColumnDef()),{}),...e}),p(e,`debugColumns`,`_getDefaultColumnDef`)),_getColumnDefs:()=>n.options.columns,getAllColumns:f(()=>[n._getColumnDefs()],e=>{let t=function(e,r,i){return i===void 0&&(i=0),e.map(e=>{let a=h(n,e,i,r),o=e;return a.columns=o.columns?t(o.columns,a,i+1):[],a})};return t(e)},p(e,`debugColumns`,`getAllColumns`)),getAllFlatColumns:f(()=>[n.getAllColumns()],e=>e.flatMap(e=>e.getFlatColumns()),p(e,`debugColumns`,`getAllFlatColumns`)),_getAllFlatColumnsById:f(()=>[n.getAllFlatColumns()],e=>e.reduce((e,t)=>(e[t.id]=t,e),{}),p(e,`debugColumns`,`getAllFlatColumnsById`)),getAllLeafColumns:f(()=>[n.getAllColumns(),n._getOrderColumnsFn()],(e,t)=>t(e.flatMap(e=>e.getLeafColumns())),p(e,`debugColumns`,`getAllLeafColumns`)),getColumn:e=>n._getAllFlatColumnsById()[e]};Object.assign(n,l);for(let e=0;e<n._features.length;e++){let t=n._features[e];t==null||t.createTable==null||t.createTable(n)}return n}function Ee(){return e=>f(()=>[e.options.data],t=>{let n={rows:[],flatRows:[],rowsById:{}},r=function(t,i,a){i===void 0&&(i=0);let o=[];for(let c=0;c<t.length;c++){let l=ee(e,e._getRowId(t[c],c,a),t[c],c,i,void 0,a?.id);if(n.flatRows.push(l),n.rowsById[l.id]=l,o.push(l),e.options.getSubRows){var s;l.originalSubRows=e.options.getSubRows(t[c],c),(s=l.originalSubRows)!=null&&s.length&&(l.subRows=r(l.originalSubRows,i+1,l))}}return o};return n.rows=r(t),n},p(e.options,`debugTable`,`getRowModel`,()=>e._autoResetPageIndex()))}function De(){return e=>f(()=>[e.getState().sorting,e.getPreSortedRowModel()],(t,n)=>{if(!n.rows.length||!(t!=null&&t.length))return n;let r=e.getState().sorting,i=[],a=r.filter(t=>e.getColumn(t.id)?.getCanSort()),o={};a.forEach(t=>{let n=e.getColumn(t.id);n&&(o[t.id]={sortUndefined:n.columnDef.sortUndefined,invertSorting:n.columnDef.invertSorting,sortingFn:n.getSortingFn()})});let s=e=>{let t=e.map(e=>({...e}));return t.sort((e,t)=>{for(let n=0;n<a.length;n+=1){let r=a[n],i=o[r.id],s=i.sortUndefined,c=r?.desc??!1,l=0;if(s){let n=e.getValue(r.id),i=t.getValue(r.id),a=n===void 0,o=i===void 0;if(a||o){if(s===`first`)return a?-1:1;if(s===`last`)return a?1:-1;l=a&&o?0:a?s:-s}}if(l===0&&(l=i.sortingFn(e,t,r.id)),l!==0)return c&&(l*=-1),i.invertSorting&&(l*=-1),l}return e.index-t.index}),t.forEach(e=>{var t;i.push(e),(t=e.subRows)!=null&&t.length&&(e.subRows=s(e.subRows))}),t};return{rows:s(n.rows),flatRows:i,rowsById:n.rowsById}},p(e.options,`debugTable`,`getSortedRowModel`,()=>e._autoResetPageIndex()))}function Z(e,t){return e?Oe(e)?o.createElement(e,t):e:null}function Oe(e){return ke(e)||typeof e==`function`||Ae(e)}function ke(e){return typeof e==`function`&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function Ae(e){return typeof e==`object`&&typeof e.$$typeof==`symbol`&&[`react.memo`,`react.forward_ref`].includes(e.$$typeof.description)}function je(e){let t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=o.useState(()=>({current:Te(t)})),[r,i]=o.useState(()=>n.current.initialState);return n.current.setOptions(t=>({...t,...e,state:{...r,...e.state},onStateChange:t=>{i(t),e.onStateChange==null||e.onStateChange(t)}})),n.current}var Q=function(e){return e[e.FIELD_START=0]=`FIELD_START`,e[e.UNQUOTED=1]=`UNQUOTED`,e[e.QUOTED=2]=`QUOTED`,e[e.QUOTE_IN_QUOTED=3]=`QUOTE_IN_QUOTED`,e}(Q||{});function Me(e){let t=[],n=[],r=``,i=Q.FIELD_START;for(let a=0;a<e.length;a++){let o=e[a];switch(i){case Q.FIELD_START:o===`"`?i=Q.QUOTED:o===`,`?(n.push(r),r=``):o===`\r`||(o===`
5
+ `?(n.push(r),r=``,t.push(n),n=[]):(r+=o,i=Q.UNQUOTED));break;case Q.UNQUOTED:o===`,`?(n.push(r),r=``,i=Q.FIELD_START):o===`\r`||(o===`
6
+ `?(n.push(r),r=``,t.push(n),n=[],i=Q.FIELD_START):r+=o);break;case Q.QUOTED:o===`"`?i=Q.QUOTE_IN_QUOTED:r+=o;break;case Q.QUOTE_IN_QUOTED:o===`"`?(r+=`"`,i=Q.QUOTED):o===`,`?(n.push(r),r=``,i=Q.FIELD_START):o===`\r`||(o===`
7
+ `?(n.push(r),r=``,t.push(n),n=[],i=Q.FIELD_START):(r+=o,i=Q.UNQUOTED));break}}if((r||n.length>0)&&(n.push(r),t.push(n)),t.length===0)return{headers:[],rows:[]};let a=t[0],o=t.slice(1),s=a.length;for(let e=0;e<o.length;e++){let t=o[e];if(t.length<s)for(;t.length<s;)t.push(``);else t.length>s&&(o[e]=t.slice(0,s))}return{headers:a,rows:o}}function Ne(e,t){let n=e=>e.includes(`,`)||e.includes(`"`)||e.includes(`
8
+ `)?`"${e.replace(/"/g,`""`)}"`:e,r=[e.map(n).join(`,`)];for(let e of t)r.push(e.map(n).join(`,`));return r.join(`
9
+ `)}var $=n();function Pe({content:e,onContentChange:t,wordWrap:n}){let s=(0,o.useMemo)(()=>Me(e),[e]),[c,l]=(0,o.useState)(()=>s.rows),[u,d]=(0,o.useState)([]),f=(0,o.useRef)(null),p=(0,o.useRef)(!1);(0,o.useEffect)(()=>{if(p.current){p.current=!1;return}l(s.rows)},[s.rows]);let m=s.headers,h=(0,o.useCallback)((e,n,r)=>{l(i=>{let a=i.map((t,n)=>n===e?[...t]:t);return a[e][n]=r,p.current=!0,t(Ne(m,a)),a})},[m,t]),g=je({data:c,columns:(0,o.useMemo)(()=>m.map((e,t)=>({id:`col-${t}`,header:e||`Column ${t+1}`,accessorFn:e=>e[t]??``,cell:({row:e,getValue:r})=>(0,$.jsx)(Fe,{value:r(),onSave:n=>h(e.index,t,n),wordWrap:n}),size:150,minSize:80})),[m,h,n]),state:{sorting:u},onSortingChange:d,getCoreRowModel:Ee(),getSortedRowModel:De(),enableColumnResizing:!0,columnResizeMode:`onChange`}),{rows:_}=g.getRowModel(),v=a({count:_.length,getScrollElement:()=>f.current,estimateSize:()=>32,overscan:20});return m.length===0?(0,$.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`Empty CSV file`}):(0,$.jsx)(`div`,{ref:f,className:`flex-1 overflow-auto`,children:(0,$.jsxs)(`table`,{className:`w-full text-xs font-mono border-collapse`,children:[(0,$.jsx)(`thead`,{className:`sticky top-0 bg-background z-10 border-b border-border block`,children:g.getHeaderGroups().map(e=>(0,$.jsx)(`tr`,{className:`flex w-full`,children:e.headers.map(e=>(0,$.jsxs)(`th`,{className:`relative text-left px-2 py-1.5 font-medium text-muted-foreground select-none cursor-pointer hover:bg-muted/50 border-r border-border last:border-r-0`,style:{width:e.getSize(),minWidth:e.getSize()},onClick:e.column.getToggleSortingHandler(),children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,$.jsx)(`span`,{className:`truncate`,children:Z(e.column.columnDef.header,e.getContext())}),e.column.getIsSorted()===`asc`&&(0,$.jsx)(r,{className:`size-3 shrink-0`}),e.column.getIsSorted()===`desc`&&(0,$.jsx)(i,{className:`size-3 shrink-0`})]}),(0,$.jsx)(`div`,{onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),onClick:e=>e.stopPropagation(),className:`absolute right-0 top-0 h-full w-1 cursor-col-resize hover:bg-primary/50 active:bg-primary`})]},e.id))},e.id))}),(0,$.jsx)(`tbody`,{style:{height:v.getTotalSize(),position:`relative`,display:`block`},children:v.getVirtualItems().map(e=>{let t=_[e.index];return(0,$.jsx)(`tr`,{"data-index":e.index,ref:e=>v.measureElement(e),style:{position:`absolute`,top:0,left:0,width:`100%`,transform:`translateY(${e.start}px)`,display:`flex`},children:t.getVisibleCells().map(e=>(0,$.jsx)(`td`,{className:`px-2 py-1 border-b border-border/50 border-r border-r-border/30 last:border-r-0 ${n?`whitespace-pre-wrap break-words`:`truncate`}`,style:{width:e.column.getSize(),minWidth:e.column.getSize()},children:Z(e.column.columnDef.cell,e.getContext())},e.id))},t.id)})})]})})}function Fe({value:e,onSave:t,wordWrap:n}){let[r,i]=(0,o.useState)(!1),[a,s]=(0,o.useState)(e),c=(0,o.useRef)(null),l=(0,o.useCallback)(e=>{e&&(e.style.height=`auto`,e.style.height=`${e.scrollHeight}px`)},[]);return(0,o.useEffect)(()=>{r&&c.current&&(c.current.focus(),l(c.current))},[r,l]),r?(0,$.jsx)(`textarea`,{ref:c,className:`w-full bg-transparent outline-none border border-primary/50 rounded text-xs font-mono resize-none p-0.5`,style:{minHeight:a.includes(`
10
+ `)?48:20},rows:1,value:a,onChange:e=>{s(e.target.value),l(e.target)},onBlur:()=>{i(!1),a!==e&&t(a)},onKeyDown:n=>{n.key===`Enter`&&!n.shiftKey?(n.preventDefault(),i(!1),a!==e&&t(a)):n.key===`Escape`&&(i(!1),s(e))}}):(0,$.jsx)(`span`,{className:`block cursor-text ${n?`whitespace-pre-wrap break-words`:`truncate`}`,onClick:()=>{s(e),i(!0)},children:e||`\xA0`})}export{Pe as CsvPreview};