@hienlh/ppm 0.23.15 → 0.23.16

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 (443) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/CLAUDE.md +1 -0
  3. package/assets/skills/ppm/SKILL.md +1 -1
  4. package/assets/skills/ppm/references/http-api.md +1 -1
  5. package/dist/web/assets/{accounts-settings-section-B5YXy0vd.js → accounts-settings-section-DhzuFkDO.js} +1 -1
  6. package/dist/web/assets/accounts-settings-section-DhzuFkDO.js.br +0 -0
  7. package/dist/web/assets/accounts-settings-section-DhzuFkDO.js.gz +0 -0
  8. package/dist/web/assets/{agent-session-sheet-Bj42PwCK.js → agent-session-sheet-CZAmOwSU.js} +2 -2
  9. package/dist/web/assets/agent-session-sheet-CZAmOwSU.js.br +0 -0
  10. package/dist/web/assets/agent-session-sheet-CZAmOwSU.js.gz +0 -0
  11. package/dist/web/assets/{agent-session-window-content-LqL6fVPU.js → agent-session-window-content-CwokWtJq.js} +1 -1
  12. package/dist/web/assets/agent-session-window-content-CwokWtJq.js.br +0 -0
  13. package/dist/web/assets/agent-session-window-content-CwokWtJq.js.gz +0 -0
  14. package/dist/web/assets/{ai-resource-editor-jVv2nvAG.js → ai-resource-editor-CT1JCaRQ.js} +1 -1
  15. package/dist/web/assets/ai-resource-editor-CT1JCaRQ.js.br +0 -0
  16. package/dist/web/assets/ai-resource-editor-CT1JCaRQ.js.gz +0 -0
  17. package/dist/web/assets/{ai-settings-section-CN5BR1ZZ.js → ai-settings-section-CBlS1FZK.js} +1 -1
  18. package/dist/web/assets/{ai-settings-section-C9Q-v8fY.js → ai-settings-section-Ct9-lNqA.js} +1 -1
  19. package/dist/web/assets/ai-settings-section-Ct9-lNqA.js.br +0 -0
  20. package/dist/web/assets/ai-settings-section-Ct9-lNqA.js.gz +0 -0
  21. package/dist/web/assets/{android-tab-CwqiuEZP.js → android-tab-CUPQN2M4.js} +1 -1
  22. package/dist/web/assets/android-tab-CUPQN2M4.js.br +0 -0
  23. package/dist/web/assets/android-tab-CUPQN2M4.js.gz +0 -0
  24. package/dist/web/assets/{appearance-settings-section-D0JIfiRx.js → appearance-settings-section-DpYcNqXH.js} +1 -1
  25. package/dist/web/assets/appearance-settings-section-DpYcNqXH.js.br +0 -0
  26. package/dist/web/assets/appearance-settings-section-DpYcNqXH.js.gz +0 -0
  27. package/dist/web/assets/{apps-panel-Cz_KJ37M.js → apps-panel-BqF_CkKy.js} +1 -1
  28. package/dist/web/assets/apps-panel-BqF_CkKy.js.br +0 -0
  29. package/dist/web/assets/apps-panel-BqF_CkKy.js.gz +0 -0
  30. package/dist/web/assets/{branch-review-tab-C3QNpsm7.js → branch-review-tab-BEZqFSlw.js} +1 -1
  31. package/dist/web/assets/branch-review-tab-BEZqFSlw.js.br +0 -0
  32. package/dist/web/assets/branch-review-tab-BEZqFSlw.js.gz +0 -0
  33. package/dist/web/assets/{chat-tab-D14CUl0J.js → chat-tab-N1B-Yv0P.js} +1 -1
  34. package/dist/web/assets/chat-tab-N1B-Yv0P.js.br +0 -0
  35. package/dist/web/assets/chat-tab-N1B-Yv0P.js.gz +0 -0
  36. package/dist/web/assets/chat-tab-kk-mAF05.js +16 -0
  37. package/dist/web/assets/chat-tab-kk-mAF05.js.br +0 -0
  38. package/dist/web/assets/chat-tab-kk-mAF05.js.gz +0 -0
  39. package/dist/web/assets/{code-editor-B7gbH4-x.js → code-editor-d1CXl2WL.js} +4 -4
  40. package/dist/web/assets/code-editor-d1CXl2WL.js.br +0 -0
  41. package/dist/web/assets/code-editor-d1CXl2WL.js.gz +0 -0
  42. package/dist/web/assets/{codex-reset-credit-button-DQDtyvnd.js → codex-reset-credit-button-CwSSBK6P.js} +1 -1
  43. package/dist/web/assets/codex-reset-credit-button-CwSSBK6P.js.br +0 -0
  44. package/dist/web/assets/{codex-reset-credit-button-DQDtyvnd.js.gz → codex-reset-credit-button-CwSSBK6P.js.gz} +0 -0
  45. package/dist/web/assets/{conflict-editor-ktOkrODA.js → conflict-editor-BucKz-uE.js} +1 -1
  46. package/dist/web/assets/conflict-editor-BucKz-uE.js.br +0 -0
  47. package/dist/web/assets/conflict-editor-BucKz-uE.js.gz +0 -0
  48. package/dist/web/assets/{connection-form-tab-CxvExR7T.js → connection-form-tab-DIc25Bko.js} +1 -1
  49. package/dist/web/assets/connection-form-tab-DIc25Bko.js.br +0 -0
  50. package/dist/web/assets/connection-form-tab-DIc25Bko.js.gz +0 -0
  51. package/dist/web/assets/{csv-preview-CBDMTEsF.js → csv-preview-CqDaGV5N.js} +1 -1
  52. package/dist/web/assets/csv-preview-CqDaGV5N.js.br +0 -0
  53. package/dist/web/assets/csv-preview-CqDaGV5N.js.gz +0 -0
  54. package/dist/web/assets/{db-tab-parts-BgVpKbi6.js → db-tab-parts-lp8ROGQB.js} +1 -1
  55. package/dist/web/assets/db-tab-parts-lp8ROGQB.js.br +0 -0
  56. package/dist/web/assets/db-tab-parts-lp8ROGQB.js.gz +0 -0
  57. package/dist/web/assets/{design-settings-section-DPGw61pY.js → design-settings-section-DxWEBH1L.js} +1 -1
  58. package/dist/web/assets/design-settings-section-DxWEBH1L.js.br +0 -0
  59. package/dist/web/assets/design-settings-section-DxWEBH1L.js.gz +0 -0
  60. package/dist/web/assets/{design-tab-BiCqHNl3.js → design-tab-Cl0CMAUx.js} +1 -1
  61. package/dist/web/assets/design-tab-Cl0CMAUx.js.br +0 -0
  62. package/dist/web/assets/design-tab-Cl0CMAUx.js.gz +0 -0
  63. package/dist/web/assets/{designs-sidebar-panel-pcJ2Rx5G.js → designs-sidebar-panel-aCr-EGfj.js} +1 -1
  64. package/dist/web/assets/designs-sidebar-panel-aCr-EGfj.js.br +0 -0
  65. package/dist/web/assets/designs-sidebar-panel-aCr-EGfj.js.gz +0 -0
  66. package/dist/web/assets/{diff-viewer-CLAvyqVG.js → diff-viewer-XyJgWKwe.js} +1 -1
  67. package/dist/web/assets/diff-viewer-XyJgWKwe.js.br +0 -0
  68. package/dist/web/assets/diff-viewer-XyJgWKwe.js.gz +0 -0
  69. package/dist/web/assets/{docx-preview-XSkD2IL6.js → docx-preview-KJaj2YGN.js} +1 -1
  70. package/dist/web/assets/docx-preview-KJaj2YGN.js.br +0 -0
  71. package/dist/web/assets/docx-preview-KJaj2YGN.js.gz +0 -0
  72. package/dist/web/assets/{editor-dialog-cQvqVZAR.js → editor-dialog-9tW6c9mu.js} +1 -1
  73. package/dist/web/assets/editor-dialog-9tW6c9mu.js.br +0 -0
  74. package/dist/web/assets/editor-dialog-9tW6c9mu.js.gz +0 -0
  75. package/dist/web/assets/{editor-language-service-6-7mS6_9.js → editor-language-service-CkdO9ih8.js} +1 -1
  76. package/dist/web/assets/editor-language-service-CkdO9ih8.js.br +0 -0
  77. package/dist/web/assets/editor-language-service-CkdO9ih8.js.gz +0 -0
  78. package/dist/web/assets/{explorer-body-BlGDPmNa.js → explorer-body-B8AkNO5o.js} +1 -1
  79. package/dist/web/assets/explorer-body-B8AkNO5o.js.br +0 -0
  80. package/dist/web/assets/explorer-body-B8AkNO5o.js.gz +0 -0
  81. package/dist/web/assets/{explorer-window-content-BLWY8GJ_.js → explorer-window-content-D174CXKz.js} +1 -1
  82. package/dist/web/assets/explorer-window-content-D174CXKz.js.br +0 -0
  83. package/dist/web/assets/explorer-window-content-D174CXKz.js.gz +0 -0
  84. package/dist/web/assets/{extension-manager-section-NSEt5f4z.js → extension-manager-section-CQsqXsPF.js} +1 -1
  85. package/dist/web/assets/extension-manager-section-CQsqXsPF.js.br +0 -0
  86. package/dist/web/assets/extension-manager-section-CQsqXsPF.js.gz +0 -0
  87. package/dist/web/assets/{extension-webview-BkAEBWin.js → extension-webview-AfaxC7PL.js} +1 -1
  88. package/dist/web/assets/extension-webview-AfaxC7PL.js.br +0 -0
  89. package/dist/web/assets/extension-webview-AfaxC7PL.js.gz +0 -0
  90. package/dist/web/assets/{files-settings-section-Bq7liJ_r.js → files-settings-section-CC0aJryq.js} +1 -1
  91. package/dist/web/assets/files-settings-section-CC0aJryq.js.br +0 -0
  92. package/dist/web/assets/files-settings-section-CC0aJryq.js.gz +0 -0
  93. package/dist/web/assets/{general-settings-section-DvHROAMa.js → general-settings-section-DQTr20G_.js} +1 -1
  94. package/dist/web/assets/general-settings-section-DQTr20G_.js.br +0 -0
  95. package/dist/web/assets/general-settings-section-DQTr20G_.js.gz +0 -0
  96. package/dist/web/assets/{git-log-panel-Cu9kK48H.js → git-log-panel-CisEJPJz.js} +1 -1
  97. package/dist/web/assets/git-log-panel-CisEJPJz.js.br +0 -0
  98. package/dist/web/assets/git-log-panel-CisEJPJz.js.gz +0 -0
  99. package/dist/web/assets/{git-review-tab-B_JT649W.js → git-review-tab-DpWEy03w.js} +1 -1
  100. package/dist/web/assets/git-review-tab-DpWEy03w.js.br +0 -0
  101. package/dist/web/assets/git-review-tab-DpWEy03w.js.gz +0 -0
  102. package/dist/web/assets/{glide-data-grid-BlposOph.js → glide-data-grid-hOML-uXP.js} +1 -1
  103. package/dist/web/assets/glide-data-grid-hOML-uXP.js.br +0 -0
  104. package/dist/web/assets/glide-data-grid-hOML-uXP.js.gz +0 -0
  105. package/dist/web/assets/{grid-save-dialog-B0d0qhnN.js → grid-save-dialog-Bx61akzH.js} +1 -1
  106. package/dist/web/assets/grid-save-dialog-Bx61akzH.js.br +0 -0
  107. package/dist/web/assets/grid-save-dialog-Bx61akzH.js.gz +0 -0
  108. package/dist/web/assets/{group-chat-tab-jirUsGm-.js → group-chat-tab-eQdJHa8d.js} +1 -1
  109. package/dist/web/assets/group-chat-tab-eQdJHa8d.js.br +0 -0
  110. package/dist/web/assets/group-chat-tab-eQdJHa8d.js.gz +0 -0
  111. package/dist/web/assets/{impexp-tab-HJVcOTYJ.js → impexp-tab-BjIDxYTj.js} +1 -1
  112. package/dist/web/assets/impexp-tab-BjIDxYTj.js.br +0 -0
  113. package/dist/web/assets/impexp-tab-BjIDxYTj.js.gz +0 -0
  114. package/dist/web/assets/index-BACBJm4i.css +1 -0
  115. package/dist/web/assets/index-BACBJm4i.css.br +0 -0
  116. package/dist/web/assets/index-BACBJm4i.css.gz +0 -0
  117. package/dist/web/assets/{index-DLB3j_P0.js → index-COwBji1t.js} +5 -5
  118. package/dist/web/assets/index-COwBji1t.js.br +0 -0
  119. package/dist/web/assets/index-COwBji1t.js.gz +0 -0
  120. package/dist/web/assets/{jira-watcher-section-EQvdnETB.js → jira-watcher-section-dzpmNZA2.js} +1 -1
  121. package/dist/web/assets/{keybindings-store-CEy-Sdcc.js → keybindings-store-DRjk8512.js} +1 -1
  122. package/dist/web/assets/{keyboard-shortcuts-section-DN21gB-T.js → keyboard-shortcuts-section-BhyalK8A.js} +1 -1
  123. package/dist/web/assets/keyboard-shortcuts-section-BhyalK8A.js.br +0 -0
  124. package/dist/web/assets/keyboard-shortcuts-section-BhyalK8A.js.gz +0 -0
  125. package/dist/web/assets/{language-servers-section-DOcZ72FJ.js → language-servers-section-BXLaicUY.js} +2 -2
  126. package/dist/web/assets/language-servers-section-BXLaicUY.js.br +0 -0
  127. package/dist/web/assets/language-servers-section-BXLaicUY.js.gz +0 -0
  128. package/dist/web/assets/{logs-app-C7n9GSCn.js → logs-app-BnjU6CRy.js} +1 -1
  129. package/dist/web/assets/logs-app-BnjU6CRy.js.br +0 -0
  130. package/dist/web/assets/{logs-app-C7n9GSCn.js.gz → logs-app-BnjU6CRy.js.gz} +0 -0
  131. package/dist/web/assets/{logs-tab-CSOiexvx.js → logs-tab-7uyD7gKW.js} +1 -1
  132. package/dist/web/assets/{logs-window-content-C4Qs6-0q.js → logs-window-content-B78a6oM2.js} +1 -1
  133. package/dist/web/assets/{lsp-client-DpYmPhXX.js → lsp-client-DOHnxEUE.js} +1 -1
  134. package/dist/web/assets/lsp-client-DOHnxEUE.js.br +0 -0
  135. package/dist/web/assets/lsp-client-DOHnxEUE.js.gz +0 -0
  136. package/dist/web/assets/{markdown-renderer-Df3r-CCb.js → markdown-renderer-B_hL6lRL.js} +1 -1
  137. package/dist/web/assets/{markdown-renderer-CtEl6qAt.js → markdown-renderer-Dz0ZcxNo.js} +1 -1
  138. package/dist/web/assets/markdown-renderer-Dz0ZcxNo.js.br +0 -0
  139. package/dist/web/assets/markdown-renderer-Dz0ZcxNo.js.gz +0 -0
  140. package/dist/web/assets/{mobile-explorer-sheet-B-rcKEL9.js → mobile-explorer-sheet-C_3dq99D.js} +1 -1
  141. package/dist/web/assets/mobile-explorer-sheet-C_3dq99D.js.br +0 -0
  142. package/dist/web/assets/mobile-explorer-sheet-C_3dq99D.js.gz +0 -0
  143. package/dist/web/assets/{new-design-dialog-DgztQK5R.js → new-design-dialog-CaubNbMT.js} +1 -1
  144. package/dist/web/assets/new-design-dialog-CaubNbMT.js.br +0 -0
  145. package/dist/web/assets/new-design-dialog-CaubNbMT.js.gz +0 -0
  146. package/dist/web/assets/{notification-store-B92dvP_u.js → notification-store-BTk3PZAj.js} +1 -1
  147. package/dist/web/assets/{notifications-settings-section-JiGvaCFx.js → notifications-settings-section-CJJ1l5cL.js} +1 -1
  148. package/dist/web/assets/notifications-settings-section-CJJ1l5cL.js.br +0 -0
  149. package/dist/web/assets/notifications-settings-section-CJJ1l5cL.js.gz +0 -0
  150. package/dist/web/assets/{ppmbot-settings-section-XfrZ8VoC.js → ppmbot-settings-section-BFniAm3D.js} +1 -1
  151. package/dist/web/assets/ppmbot-settings-section-BFniAm3D.js.br +0 -0
  152. package/dist/web/assets/ppmbot-settings-section-BFniAm3D.js.gz +0 -0
  153. package/dist/web/assets/{problems-panel-CDzwSJn6.js → problems-panel-CIxaCYJw.js} +1 -1
  154. package/dist/web/assets/problems-panel-CIxaCYJw.js.br +0 -0
  155. package/dist/web/assets/problems-panel-CIxaCYJw.js.gz +0 -0
  156. package/dist/web/assets/{process-table-C_B39GHm.js → process-table-l1fVcESX.js} +1 -1
  157. package/dist/web/assets/process-table-l1fVcESX.js.br +0 -0
  158. package/dist/web/assets/process-table-l1fVcESX.js.gz +0 -0
  159. package/dist/web/assets/{proxy-settings-section-CvaOvYIv.js → proxy-settings-section-Di5nBuy6.js} +1 -1
  160. package/dist/web/assets/proxy-settings-section-Di5nBuy6.js.br +0 -0
  161. package/dist/web/assets/proxy-settings-section-Di5nBuy6.js.gz +0 -0
  162. package/dist/web/assets/{query-tab-B8aMpAbI.js → query-tab-hyKnRZr3.js} +1 -1
  163. package/dist/web/assets/query-tab-hyKnRZr3.js.br +0 -0
  164. package/dist/web/assets/query-tab-hyKnRZr3.js.gz +0 -0
  165. package/dist/web/assets/{remote-access-settings-section-Bv0eawR4.js → remote-access-settings-section-HpZAP0Al.js} +1 -1
  166. package/dist/web/assets/remote-access-settings-section-HpZAP0Al.js.br +0 -0
  167. package/dist/web/assets/remote-access-settings-section-HpZAP0Al.js.gz +0 -0
  168. package/dist/web/assets/{remote-desktop-clipboard-notice-BpDakRY0.js → remote-desktop-clipboard-notice-DY7tWgjf.js} +1 -1
  169. package/dist/web/assets/remote-desktop-clipboard-notice-DY7tWgjf.js.br +0 -0
  170. package/dist/web/assets/remote-desktop-clipboard-notice-DY7tWgjf.js.gz +0 -0
  171. package/dist/web/assets/{remote-desktop-mobile-sheet-C5GQ3kzY.js → remote-desktop-mobile-sheet-CX9mDRle.js} +2 -2
  172. package/dist/web/assets/remote-desktop-mobile-sheet-CX9mDRle.js.br +0 -0
  173. package/dist/web/assets/remote-desktop-mobile-sheet-CX9mDRle.js.gz +0 -0
  174. package/dist/web/assets/{remote-desktop-mobile-view-CZb5EMEK.js → remote-desktop-mobile-view-DNg0EpbV.js} +1 -1
  175. package/dist/web/assets/remote-desktop-mobile-view-DNg0EpbV.js.br +0 -0
  176. package/dist/web/assets/remote-desktop-mobile-view-DNg0EpbV.js.gz +0 -0
  177. package/dist/web/assets/{remote-desktop-readiness-gate-CipNtLX5.js → remote-desktop-readiness-gate-BTTLlVDc.js} +1 -1
  178. package/dist/web/assets/remote-desktop-readiness-gate-BTTLlVDc.js.br +0 -0
  179. package/dist/web/assets/remote-desktop-readiness-gate-BTTLlVDc.js.gz +0 -0
  180. package/dist/web/assets/{remote-desktop-window-content-B7OXXvAM.js → remote-desktop-window-content-CqxnhSu0.js} +1 -1
  181. package/dist/web/assets/remote-desktop-window-content-CqxnhSu0.js.br +0 -0
  182. package/dist/web/assets/remote-desktop-window-content-CqxnhSu0.js.gz +0 -0
  183. package/dist/web/assets/{rename-object-dialog-B4W6S7Xg.js → rename-object-dialog-CnhMsNbT.js} +1 -1
  184. package/dist/web/assets/rename-object-dialog-CnhMsNbT.js.br +0 -0
  185. package/dist/web/assets/rename-object-dialog-CnhMsNbT.js.gz +0 -0
  186. package/dist/web/assets/{review-code-B4osj0k1.js → review-code-CunYhmcC.js} +1 -1
  187. package/dist/web/assets/review-code-CunYhmcC.js.br +0 -0
  188. package/dist/web/assets/review-code-CunYhmcC.js.gz +0 -0
  189. package/dist/web/assets/{save-as-dialog-DpXv_f1d.js → save-as-dialog-BtGSwTKZ.js} +1 -1
  190. package/dist/web/assets/save-as-dialog-BtGSwTKZ.js.br +0 -0
  191. package/dist/web/assets/save-as-dialog-BtGSwTKZ.js.gz +0 -0
  192. package/dist/web/assets/{schedules-settings-section-BbaPbc28.js → schedules-settings-section-CvlcMyEz.js} +1 -1
  193. package/dist/web/assets/schedules-settings-section-CvlcMyEz.js.br +0 -0
  194. package/dist/web/assets/schedules-settings-section-CvlcMyEz.js.gz +0 -0
  195. package/dist/web/assets/{session-review-tab-Aq3FEooH.js → session-review-tab-C3HuIPD2.js} +1 -1
  196. package/dist/web/assets/session-review-tab-C3HuIPD2.js.br +0 -0
  197. package/dist/web/assets/session-review-tab-C3HuIPD2.js.gz +0 -0
  198. package/dist/web/assets/{settings-body-vXbOWchN.js → settings-body-DCHEAh2_.js} +1 -1
  199. package/dist/web/assets/settings-body-DCHEAh2_.js.br +0 -0
  200. package/dist/web/assets/settings-body-DCHEAh2_.js.gz +0 -0
  201. package/dist/web/assets/{settings-rows-DD7Gxmst.js → settings-rows-D8Y9o1ZD.js} +1 -1
  202. package/dist/web/assets/settings-rows-D8Y9o1ZD.js.br +0 -0
  203. package/dist/web/assets/settings-rows-D8Y9o1ZD.js.gz +0 -0
  204. package/dist/web/assets/settings-section-content-BXPg2H0N.js +1 -0
  205. package/dist/web/assets/{settings-section-content-DkUJFop6.js → settings-section-content-Dluhkh-u.js} +2 -2
  206. package/dist/web/assets/settings-section-content-Dluhkh-u.js.br +0 -0
  207. package/dist/web/assets/settings-section-content-Dluhkh-u.js.gz +0 -0
  208. package/dist/web/assets/{settings-tab-Cdv9_OIe.js → settings-tab-Cj1GkYi3.js} +1 -1
  209. package/dist/web/assets/{settings-window-content-DLa6Ph4u.js → settings-window-content-1fweMynB.js} +1 -1
  210. package/dist/web/assets/{slash-command-picker-lILYDfK3.js → slash-command-picker-BdKd_AiS.js} +1 -1
  211. package/dist/web/assets/slash-command-picker-BdKd_AiS.js.br +0 -0
  212. package/dist/web/assets/slash-command-picker-BdKd_AiS.js.gz +0 -0
  213. package/dist/web/assets/{sql-object-tab-Da42SMK5.js → sql-object-tab-DkdF_7Jz.js} +1 -1
  214. package/dist/web/assets/sql-object-tab-DkdF_7Jz.js.br +0 -0
  215. package/dist/web/assets/sql-object-tab-DkdF_7Jz.js.gz +0 -0
  216. package/dist/web/assets/{sqlite-viewer-V3SKNukY.js → sqlite-viewer-BoQMjJHj.js} +1 -1
  217. package/dist/web/assets/sqlite-viewer-BoQMjJHj.js.br +0 -0
  218. package/dist/web/assets/sqlite-viewer-BoQMjJHj.js.gz +0 -0
  219. package/dist/web/assets/{structure-save-dialog-B635iyPI.js → structure-save-dialog-DGHxHJ4T.js} +1 -1
  220. package/dist/web/assets/structure-save-dialog-DGHxHJ4T.js.br +0 -0
  221. package/dist/web/assets/structure-save-dialog-DGHxHJ4T.js.gz +0 -0
  222. package/dist/web/assets/{structure-tab-Co9d8ktU.js → structure-tab-DuuX1e9c.js} +1 -1
  223. package/dist/web/assets/structure-tab-DuuX1e9c.js.br +0 -0
  224. package/dist/web/assets/structure-tab-DuuX1e9c.js.gz +0 -0
  225. package/dist/web/assets/{system-monitor-body-DC0j8RqP.js → system-monitor-body-CZVoh652.js} +2 -2
  226. package/dist/web/assets/system-monitor-body-CZVoh652.js.br +0 -0
  227. package/dist/web/assets/system-monitor-body-CZVoh652.js.gz +0 -0
  228. package/dist/web/assets/{system-monitor-tab-DA8BcdXo.js → system-monitor-tab-eGta1jpw.js} +1 -1
  229. package/dist/web/assets/{system-monitor-window-content-BiuLo8XW.js → system-monitor-window-content-BUG72ffC.js} +1 -1
  230. package/dist/web/assets/{tab-host-window-content-Crvt1r5F.js → tab-host-window-content-BTYuY43x.js} +1 -1
  231. package/dist/web/assets/tab-host-window-content-BTYuY43x.js.br +0 -0
  232. package/dist/web/assets/tab-host-window-content-BTYuY43x.js.gz +0 -0
  233. package/dist/web/assets/{table-tab-C2cYw7a0.js → table-tab-BsfgtqFE.js} +1 -1
  234. package/dist/web/assets/table-tab-BsfgtqFE.js.br +0 -0
  235. package/dist/web/assets/table-tab-BsfgtqFE.js.gz +0 -0
  236. package/dist/web/assets/{telegram-bot-token-field-BqNtOo5n.js → telegram-bot-token-field-CA8DEKRL.js} +1 -1
  237. package/dist/web/assets/telegram-bot-token-field-CA8DEKRL.js.br +0 -0
  238. package/dist/web/assets/telegram-bot-token-field-CA8DEKRL.js.gz +0 -0
  239. package/dist/web/assets/{terminal-tab-CrKxibGC.js → terminal-tab-CoT5KIfe.js} +1 -1
  240. package/dist/web/assets/terminal-tab-CoT5KIfe.js.br +0 -0
  241. package/dist/web/assets/terminal-tab-CoT5KIfe.js.gz +0 -0
  242. package/dist/web/assets/{tool-cards-BRto67jM.js → tool-cards-oZ6cptRr.js} +2 -2
  243. package/dist/web/assets/tool-cards-oZ6cptRr.js.br +0 -0
  244. package/dist/web/assets/tool-cards-oZ6cptRr.js.gz +0 -0
  245. package/dist/web/assets/{tools-settings-section-DEvZsrxq.js → tools-settings-section-CtcD-iTk.js} +1 -1
  246. package/dist/web/assets/tools-settings-section-CtcD-iTk.js.br +0 -0
  247. package/dist/web/assets/tools-settings-section-CtcD-iTk.js.gz +0 -0
  248. package/dist/web/assets/{use-inline-blame-CRWJU6Rq.js → use-inline-blame-BUuJj1Ru.js} +1 -1
  249. package/dist/web/assets/use-inline-blame-BUuJj1Ru.js.br +0 -0
  250. package/dist/web/assets/use-inline-blame-BUuJj1Ru.js.gz +0 -0
  251. package/dist/web/assets/{use-lsp-B-otjr-6.js → use-lsp-Bo4z4gLx.js} +1 -1
  252. package/dist/web/assets/use-lsp-Bo4z4gLx.js.br +0 -0
  253. package/dist/web/assets/use-lsp-Bo4z4gLx.js.gz +0 -0
  254. package/dist/web/assets/{use-monaco-theme-BiDXRJ4e.js → use-monaco-theme-1ANtPWqA.js} +1 -1
  255. package/dist/web/assets/{use-process-kill-BW2UW0mZ.js → use-process-kill-CvlXPal4.js} +1 -1
  256. package/dist/web/assets/use-process-kill-CvlXPal4.js.br +0 -0
  257. package/dist/web/assets/use-process-kill-CvlXPal4.js.gz +0 -0
  258. package/dist/web/assets/{use-sql-schema-info-D_Kc2FI7.js → use-sql-schema-info-DQzUqb7q.js} +1 -1
  259. package/dist/web/assets/use-sql-schema-info-DQzUqb7q.js.br +0 -0
  260. package/dist/web/assets/use-sql-schema-info-DQzUqb7q.js.gz +0 -0
  261. package/dist/web/assets/{use-websocket-n3Ud9vEA.js → use-websocket-QCAD3F5b.js} +1 -1
  262. package/dist/web/assets/{web-preview-tab-doNpegW3.js → web-preview-tab-Cp0LuL0T.js} +1 -1
  263. package/dist/web/assets/web-preview-tab-Cp0LuL0T.js.br +0 -0
  264. package/dist/web/assets/web-preview-tab-Cp0LuL0T.js.gz +0 -0
  265. package/dist/web/index.html +2 -2
  266. package/dist/web/index.html.br +0 -0
  267. package/dist/web/index.html.gz +0 -0
  268. package/dist/web/sw.js +1 -1
  269. package/dist/web/sw.js.br +0 -0
  270. package/dist/web/sw.js.gz +0 -0
  271. package/package.json +1 -1
  272. package/src/providers/claude-agent-sdk.ts +37 -7
  273. package/src/server/ws/chat-token-rotation.ts +150 -0
  274. package/src/server/ws/chat.ts +28 -0
  275. package/src/services/account.service.ts +14 -0
  276. package/src/web/components/chat/chat-reconnect-banner.tsx +54 -0
  277. package/src/web/components/chat/chat-tab.tsx +10 -13
  278. package/src/web/hooks/use-reconnect-indicator.ts +49 -0
  279. package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.br +0 -0
  280. package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.gz +0 -0
  281. package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.br +0 -0
  282. package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.gz +0 -0
  283. package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.br +0 -0
  284. package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.gz +0 -0
  285. package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.br +0 -0
  286. package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.gz +0 -0
  287. package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.br +0 -0
  288. package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.gz +0 -0
  289. package/dist/web/assets/android-tab-CwqiuEZP.js.br +0 -0
  290. package/dist/web/assets/android-tab-CwqiuEZP.js.gz +0 -0
  291. package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.br +0 -0
  292. package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.gz +0 -0
  293. package/dist/web/assets/apps-panel-Cz_KJ37M.js.br +0 -0
  294. package/dist/web/assets/apps-panel-Cz_KJ37M.js.gz +0 -0
  295. package/dist/web/assets/branch-review-tab-C3QNpsm7.js.br +0 -0
  296. package/dist/web/assets/branch-review-tab-C3QNpsm7.js.gz +0 -0
  297. package/dist/web/assets/chat-tab-D14CUl0J.js.br +0 -0
  298. package/dist/web/assets/chat-tab-D14CUl0J.js.gz +0 -0
  299. package/dist/web/assets/chat-tab-D8iAVZKV.js +0 -16
  300. package/dist/web/assets/chat-tab-D8iAVZKV.js.br +0 -0
  301. package/dist/web/assets/chat-tab-D8iAVZKV.js.gz +0 -0
  302. package/dist/web/assets/code-editor-B7gbH4-x.js.br +0 -0
  303. package/dist/web/assets/code-editor-B7gbH4-x.js.gz +0 -0
  304. package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js.br +0 -0
  305. package/dist/web/assets/conflict-editor-ktOkrODA.js.br +0 -0
  306. package/dist/web/assets/conflict-editor-ktOkrODA.js.gz +0 -0
  307. package/dist/web/assets/connection-form-tab-CxvExR7T.js.br +0 -0
  308. package/dist/web/assets/connection-form-tab-CxvExR7T.js.gz +0 -0
  309. package/dist/web/assets/csv-preview-CBDMTEsF.js.br +0 -0
  310. package/dist/web/assets/csv-preview-CBDMTEsF.js.gz +0 -0
  311. package/dist/web/assets/db-tab-parts-BgVpKbi6.js.br +0 -0
  312. package/dist/web/assets/db-tab-parts-BgVpKbi6.js.gz +0 -0
  313. package/dist/web/assets/design-settings-section-DPGw61pY.js.br +0 -0
  314. package/dist/web/assets/design-settings-section-DPGw61pY.js.gz +0 -0
  315. package/dist/web/assets/design-tab-BiCqHNl3.js.br +0 -0
  316. package/dist/web/assets/design-tab-BiCqHNl3.js.gz +0 -0
  317. package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.br +0 -0
  318. package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.gz +0 -0
  319. package/dist/web/assets/diff-viewer-CLAvyqVG.js.br +0 -0
  320. package/dist/web/assets/diff-viewer-CLAvyqVG.js.gz +0 -0
  321. package/dist/web/assets/docx-preview-XSkD2IL6.js.br +0 -0
  322. package/dist/web/assets/docx-preview-XSkD2IL6.js.gz +0 -0
  323. package/dist/web/assets/editor-dialog-cQvqVZAR.js.br +0 -0
  324. package/dist/web/assets/editor-dialog-cQvqVZAR.js.gz +0 -0
  325. package/dist/web/assets/editor-language-service-6-7mS6_9.js.br +0 -0
  326. package/dist/web/assets/editor-language-service-6-7mS6_9.js.gz +0 -0
  327. package/dist/web/assets/explorer-body-BlGDPmNa.js.br +0 -0
  328. package/dist/web/assets/explorer-body-BlGDPmNa.js.gz +0 -0
  329. package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.br +0 -0
  330. package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.gz +0 -0
  331. package/dist/web/assets/extension-manager-section-NSEt5f4z.js.br +0 -0
  332. package/dist/web/assets/extension-manager-section-NSEt5f4z.js.gz +0 -0
  333. package/dist/web/assets/extension-webview-BkAEBWin.js.br +0 -0
  334. package/dist/web/assets/extension-webview-BkAEBWin.js.gz +0 -0
  335. package/dist/web/assets/files-settings-section-Bq7liJ_r.js.br +0 -0
  336. package/dist/web/assets/files-settings-section-Bq7liJ_r.js.gz +0 -0
  337. package/dist/web/assets/general-settings-section-DvHROAMa.js.br +0 -0
  338. package/dist/web/assets/general-settings-section-DvHROAMa.js.gz +0 -0
  339. package/dist/web/assets/git-log-panel-Cu9kK48H.js.br +0 -0
  340. package/dist/web/assets/git-log-panel-Cu9kK48H.js.gz +0 -0
  341. package/dist/web/assets/git-review-tab-B_JT649W.js.br +0 -0
  342. package/dist/web/assets/git-review-tab-B_JT649W.js.gz +0 -0
  343. package/dist/web/assets/glide-data-grid-BlposOph.js.br +0 -0
  344. package/dist/web/assets/glide-data-grid-BlposOph.js.gz +0 -0
  345. package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.br +0 -0
  346. package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.gz +0 -0
  347. package/dist/web/assets/group-chat-tab-jirUsGm-.js.br +0 -0
  348. package/dist/web/assets/group-chat-tab-jirUsGm-.js.gz +0 -0
  349. package/dist/web/assets/impexp-tab-HJVcOTYJ.js.br +0 -0
  350. package/dist/web/assets/impexp-tab-HJVcOTYJ.js.gz +0 -0
  351. package/dist/web/assets/index-DLB3j_P0.js.br +0 -0
  352. package/dist/web/assets/index-DLB3j_P0.js.gz +0 -0
  353. package/dist/web/assets/index-M3DUzop8.css +0 -1
  354. package/dist/web/assets/index-M3DUzop8.css.br +0 -0
  355. package/dist/web/assets/index-M3DUzop8.css.gz +0 -0
  356. package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.br +0 -0
  357. package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.gz +0 -0
  358. package/dist/web/assets/language-servers-section-DOcZ72FJ.js.br +0 -0
  359. package/dist/web/assets/language-servers-section-DOcZ72FJ.js.gz +0 -0
  360. package/dist/web/assets/logs-app-C7n9GSCn.js.br +0 -0
  361. package/dist/web/assets/lsp-client-DpYmPhXX.js.br +0 -0
  362. package/dist/web/assets/lsp-client-DpYmPhXX.js.gz +0 -0
  363. package/dist/web/assets/markdown-renderer-CtEl6qAt.js.br +0 -0
  364. package/dist/web/assets/markdown-renderer-CtEl6qAt.js.gz +0 -0
  365. package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.br +0 -0
  366. package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.gz +0 -0
  367. package/dist/web/assets/new-design-dialog-DgztQK5R.js.br +0 -0
  368. package/dist/web/assets/new-design-dialog-DgztQK5R.js.gz +0 -0
  369. package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.br +0 -0
  370. package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.gz +0 -0
  371. package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.br +0 -0
  372. package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.gz +0 -0
  373. package/dist/web/assets/problems-panel-CDzwSJn6.js.br +0 -0
  374. package/dist/web/assets/problems-panel-CDzwSJn6.js.gz +0 -0
  375. package/dist/web/assets/process-table-C_B39GHm.js.br +0 -0
  376. package/dist/web/assets/process-table-C_B39GHm.js.gz +0 -0
  377. package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.br +0 -0
  378. package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.gz +0 -0
  379. package/dist/web/assets/query-tab-B8aMpAbI.js.br +0 -0
  380. package/dist/web/assets/query-tab-B8aMpAbI.js.gz +0 -0
  381. package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.br +0 -0
  382. package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.gz +0 -0
  383. package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.br +0 -0
  384. package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.gz +0 -0
  385. package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.br +0 -0
  386. package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.gz +0 -0
  387. package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.br +0 -0
  388. package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.gz +0 -0
  389. package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.br +0 -0
  390. package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.gz +0 -0
  391. package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.br +0 -0
  392. package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.gz +0 -0
  393. package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.br +0 -0
  394. package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.gz +0 -0
  395. package/dist/web/assets/review-code-B4osj0k1.js.br +0 -0
  396. package/dist/web/assets/review-code-B4osj0k1.js.gz +0 -0
  397. package/dist/web/assets/save-as-dialog-DpXv_f1d.js.br +0 -5
  398. package/dist/web/assets/save-as-dialog-DpXv_f1d.js.gz +0 -0
  399. package/dist/web/assets/schedules-settings-section-BbaPbc28.js.br +0 -0
  400. package/dist/web/assets/schedules-settings-section-BbaPbc28.js.gz +0 -0
  401. package/dist/web/assets/session-review-tab-Aq3FEooH.js.br +0 -0
  402. package/dist/web/assets/session-review-tab-Aq3FEooH.js.gz +0 -0
  403. package/dist/web/assets/settings-body-vXbOWchN.js.br +0 -0
  404. package/dist/web/assets/settings-body-vXbOWchN.js.gz +0 -0
  405. package/dist/web/assets/settings-rows-DD7Gxmst.js.br +0 -0
  406. package/dist/web/assets/settings-rows-DD7Gxmst.js.gz +0 -0
  407. package/dist/web/assets/settings-section-content-CVtvJ6ze.js +0 -1
  408. package/dist/web/assets/settings-section-content-DkUJFop6.js.br +0 -0
  409. package/dist/web/assets/settings-section-content-DkUJFop6.js.gz +0 -0
  410. package/dist/web/assets/slash-command-picker-lILYDfK3.js.br +0 -0
  411. package/dist/web/assets/slash-command-picker-lILYDfK3.js.gz +0 -0
  412. package/dist/web/assets/sql-object-tab-Da42SMK5.js.br +0 -0
  413. package/dist/web/assets/sql-object-tab-Da42SMK5.js.gz +0 -0
  414. package/dist/web/assets/sqlite-viewer-V3SKNukY.js.br +0 -0
  415. package/dist/web/assets/sqlite-viewer-V3SKNukY.js.gz +0 -0
  416. package/dist/web/assets/structure-save-dialog-B635iyPI.js.br +0 -0
  417. package/dist/web/assets/structure-save-dialog-B635iyPI.js.gz +0 -0
  418. package/dist/web/assets/structure-tab-Co9d8ktU.js.br +0 -0
  419. package/dist/web/assets/structure-tab-Co9d8ktU.js.gz +0 -0
  420. package/dist/web/assets/system-monitor-body-DC0j8RqP.js.br +0 -0
  421. package/dist/web/assets/system-monitor-body-DC0j8RqP.js.gz +0 -0
  422. package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.br +0 -0
  423. package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.gz +0 -0
  424. package/dist/web/assets/table-tab-C2cYw7a0.js.br +0 -0
  425. package/dist/web/assets/table-tab-C2cYw7a0.js.gz +0 -0
  426. package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.br +0 -0
  427. package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.gz +0 -0
  428. package/dist/web/assets/terminal-tab-CrKxibGC.js.br +0 -0
  429. package/dist/web/assets/terminal-tab-CrKxibGC.js.gz +0 -0
  430. package/dist/web/assets/tool-cards-BRto67jM.js.br +0 -0
  431. package/dist/web/assets/tool-cards-BRto67jM.js.gz +0 -0
  432. package/dist/web/assets/tools-settings-section-DEvZsrxq.js.br +0 -0
  433. package/dist/web/assets/tools-settings-section-DEvZsrxq.js.gz +0 -0
  434. package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.br +0 -0
  435. package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.gz +0 -0
  436. package/dist/web/assets/use-lsp-B-otjr-6.js.br +0 -0
  437. package/dist/web/assets/use-lsp-B-otjr-6.js.gz +0 -0
  438. package/dist/web/assets/use-process-kill-BW2UW0mZ.js.br +0 -0
  439. package/dist/web/assets/use-process-kill-BW2UW0mZ.js.gz +0 -0
  440. package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.br +0 -0
  441. package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.gz +0 -0
  442. package/dist/web/assets/web-preview-tab-doNpegW3.js.br +0 -0
  443. package/dist/web/assets/web-preview-tab-doNpegW3.js.gz +0 -0
@@ -1,4 +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(`
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-COwBji1t.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
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
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
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};
@@ -1,4 +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"./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`,`
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-COwBji1t.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
2
  font-size: .6rem;
3
3
  font-weight: bold;
4
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===`
@@ -1 +1 @@
1
- import{E as e}from"./vendor-markdown-C-P1aR4p.js";import{b as t,li as n,n as r,xn as i}from"./icons-BwyIKaTT.js";import{n as a}from"./utils-Bslrbb-G.js";import{$n as o}from"./index-DLB3j_P0.js";var s=e();function c({label:e,children:t,className:n}){return(0,s.jsx)(`div`,{role:`toolbar`,"aria-label":e,className:a(`flex h-9 shrink-0 items-center gap-0.5 overflow-x-auto border-b border-border bg-background px-2`,`max-md:h-[52px] max-md:gap-1`,n),children:t})}var l=a(`flex h-7 shrink-0 items-center gap-1.5 rounded px-2 text-xs text-text-2 can-hover:hover:bg-surface-hover can-hover:hover:text-text-primary`,`disabled:pointer-events-none disabled:opacity-40`,`max-md:h-11 max-md:min-w-11 max-md:justify-center max-md:px-2.5`);function u({icon:e,label:n,title:r,onClick:i,opensTab:o,disabled:c,className:u,labelClassName:d=`max-md:hidden`,arrowClassName:f=`max-md:hidden`}){return(0,s.jsxs)(`button`,{type:`button`,onClick:i,disabled:c,title:r??n,"aria-label":n,className:a(l,u),children:[(0,s.jsx)(e,{className:`size-4 shrink-0`}),(0,s.jsx)(`span`,{className:d,children:n}),o&&(0,s.jsx)(t,{"aria-hidden":!0,className:a(`-ml-1 size-3 shrink-0 text-text-subtle`,f)})]})}function d({title:e,subtitle:t,color:r,onClose:i,children:a}){return(0,s.jsxs)(`header`,{className:`flex h-[52px] shrink-0 items-center gap-1 border-b border-border-soft bg-panel-2 pl-3 pr-1 md:hidden`,children:[(0,s.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,s.jsx)(`b`,{className:`block truncate text-[15px] text-text-primary`,children:e}),(0,s.jsxs)(`small`,{className:`flex min-w-0 items-center gap-1.5 text-xs text-text-subtle`,children:[r&&(0,s.jsx)(`span`,{"aria-hidden":!0,className:`size-2 shrink-0 rounded-full`,style:{backgroundColor:r}}),(0,s.jsx)(`span`,{className:`truncate`,children:t})]})]}),a,i&&(0,s.jsx)(`button`,{type:`button`,onClick:i,"aria-label":`Close this tab`,className:`grid size-11 shrink-0 place-items-center rounded-md text-text-2`,children:(0,s.jsx)(n,{className:`size-5`})})]})}function f({loading:e,error:t,driver:n,empty:a}){if(n)return(0,s.jsx)(`div`,{className:`flex h-full justify-center overflow-y-auto p-4`,children:(0,s.jsx)(o,{driver:n,className:`h-fit w-full max-w-md`})});if(e)return(0,s.jsx)(`div`,{className:`flex h-full items-center justify-center text-text-subtle`,role:`status`,"aria-label":`Loading`,children:(0,s.jsx)(i,{className:`size-5 animate-spin`})});let c=t??a;return c?(0,s.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-2 p-6 text-center text-sm text-text-2`,children:[t&&(0,s.jsx)(r,{className:`size-6 text-destructive`}),(0,s.jsx)(`p`,{className:`max-w-md break-words`,children:c})]}):null}export{l as a,c as i,f as n,u as r,d as t};
1
+ import{E as e}from"./vendor-markdown-C-P1aR4p.js";import{b as t,li as n,n as r,xn as i}from"./icons-BwyIKaTT.js";import{n as a}from"./utils-Bslrbb-G.js";import{$n as o}from"./index-COwBji1t.js";var s=e();function c({label:e,children:t,className:n}){return(0,s.jsx)(`div`,{role:`toolbar`,"aria-label":e,className:a(`flex h-9 shrink-0 items-center gap-0.5 overflow-x-auto border-b border-border bg-background px-2`,`max-md:h-[52px] max-md:gap-1`,n),children:t})}var l=a(`flex h-7 shrink-0 items-center gap-1.5 rounded px-2 text-xs text-text-2 can-hover:hover:bg-surface-hover can-hover:hover:text-text-primary`,`disabled:pointer-events-none disabled:opacity-40`,`max-md:h-11 max-md:min-w-11 max-md:justify-center max-md:px-2.5`);function u({icon:e,label:n,title:r,onClick:i,opensTab:o,disabled:c,className:u,labelClassName:d=`max-md:hidden`,arrowClassName:f=`max-md:hidden`}){return(0,s.jsxs)(`button`,{type:`button`,onClick:i,disabled:c,title:r??n,"aria-label":n,className:a(l,u),children:[(0,s.jsx)(e,{className:`size-4 shrink-0`}),(0,s.jsx)(`span`,{className:d,children:n}),o&&(0,s.jsx)(t,{"aria-hidden":!0,className:a(`-ml-1 size-3 shrink-0 text-text-subtle`,f)})]})}function d({title:e,subtitle:t,color:r,onClose:i,children:a}){return(0,s.jsxs)(`header`,{className:`flex h-[52px] shrink-0 items-center gap-1 border-b border-border-soft bg-panel-2 pl-3 pr-1 md:hidden`,children:[(0,s.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,s.jsx)(`b`,{className:`block truncate text-[15px] text-text-primary`,children:e}),(0,s.jsxs)(`small`,{className:`flex min-w-0 items-center gap-1.5 text-xs text-text-subtle`,children:[r&&(0,s.jsx)(`span`,{"aria-hidden":!0,className:`size-2 shrink-0 rounded-full`,style:{backgroundColor:r}}),(0,s.jsx)(`span`,{className:`truncate`,children:t})]})]}),a,i&&(0,s.jsx)(`button`,{type:`button`,onClick:i,"aria-label":`Close this tab`,className:`grid size-11 shrink-0 place-items-center rounded-md text-text-2`,children:(0,s.jsx)(n,{className:`size-5`})})]})}function f({loading:e,error:t,driver:n,empty:a}){if(n)return(0,s.jsx)(`div`,{className:`flex h-full justify-center overflow-y-auto p-4`,children:(0,s.jsx)(o,{driver:n,className:`h-fit w-full max-w-md`})});if(e)return(0,s.jsx)(`div`,{className:`flex h-full items-center justify-center text-text-subtle`,role:`status`,"aria-label":`Loading`,children:(0,s.jsx)(i,{className:`size-5 animate-spin`})});let c=t??a;return c?(0,s.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-2 p-6 text-center text-sm text-text-2`,children:[t&&(0,s.jsx)(r,{className:`size-6 text-destructive`}),(0,s.jsx)(`p`,{className:`max-w-md break-words`,children:c})]}):null}export{l as a,c as i,f as n,u as r,d as t};
@@ -1,2 +1,2 @@
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{A as r,Ar as i,Jn as a,Kr as o,cr as s,jr as c,r as l,tr as u,xn as d}from"./icons-BwyIKaTT.js";import{k as f}from"./api-client-xQDlhUTu.js";import{t as p}from"./settings-store-B4mLp19V.js";import{n as m}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import{i as h}from"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./use-is-mobile-VRV9eZy1.js";import{t as g}from"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{Kn as _,b as v}from"./index-DLB3j_P0.js";import{n as y,r as b,t as x}from"./slash-command-picker-lILYDfK3.js";import{c as S,i as C,n as w,r as T,s as E,t as D}from"./design-responsive-dialog-MAFgVOmv.js";import{t as O}from"./design-system-status-label-KA4ESjWe.js";import{a as k,c as A,d as j,i as M,l as N,o as P,r as F,s as I,t as L,u as R}from"./design-skill-suggestion-Dmmg_ap5.js";var z=e(t(),1),B=n();function V({value:e,onChange:t,skills:n,disabled:r}){let i=(0,z.useRef)(null),[a,o]=(0,z.useState)(null),s=e=>{o(b(e.value.slice(0,e.selectionStart??e.value.length)))},l=(e,n)=>{t(e),requestAnimationFrame(()=>{let e=i.current;e&&(e.focus(),e.selectionStart=e.selectionEnd=n)})},u=t=>{let n=i.current;if(!n)return;let r=n.selectionStart??e.length,a=y(e.slice(0,r),`${t.invokeSigil??`/`}${t.name}`);o(null),l(a+e.slice(r),a.length)},d=()=>{let t=i.current?.selectionStart??e.length,n=e.slice(0,t),r=n===``||/\s$/.test(n)?`/`:` /`;o(``),l(n+r+e.slice(t),t+r.length)};return(0,B.jsxs)(`div`,{className:`overflow-hidden rounded-md border border-border bg-background focus-within:ring-1 focus-within:ring-primary`,children:[(0,B.jsx)(`div`,{onMouseDown:e=>e.preventDefault(),children:(0,B.jsx)(x,{items:n,filter:a??``,visible:a!==null&&!r,onSelect:u,onClose:()=>o(null)})}),(0,B.jsx)(`textarea`,{ref:i,"aria-label":`Design instructions`,value:e,disabled:r,rows:8,placeholder:`e.g. Before designing, use /ui-ux-pro-max to pick a palette.
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{A as r,Ar as i,Jn as a,Kr as o,cr as s,jr as c,r as l,tr as u,xn as d}from"./icons-BwyIKaTT.js";import{k as f}from"./api-client-xQDlhUTu.js";import{t as p}from"./settings-store-B4mLp19V.js";import{n as m}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import{i as h}from"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./use-is-mobile-VRV9eZy1.js";import{t as g}from"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{Kn as _,b as v}from"./index-COwBji1t.js";import{n as y,r as b,t as x}from"./slash-command-picker-BdKd_AiS.js";import{c as S,i as C,n as w,r as T,s as E,t as D}from"./design-responsive-dialog-MAFgVOmv.js";import{t as O}from"./design-system-status-label-KA4ESjWe.js";import{a as k,c as A,d as j,i as M,l as N,o as P,r as F,s as I,t as L,u as R}from"./design-skill-suggestion-Dmmg_ap5.js";var z=e(t(),1),B=n();function V({value:e,onChange:t,skills:n,disabled:r}){let i=(0,z.useRef)(null),[a,o]=(0,z.useState)(null),s=e=>{o(b(e.value.slice(0,e.selectionStart??e.value.length)))},l=(e,n)=>{t(e),requestAnimationFrame(()=>{let e=i.current;e&&(e.focus(),e.selectionStart=e.selectionEnd=n)})},u=t=>{let n=i.current;if(!n)return;let r=n.selectionStart??e.length,a=y(e.slice(0,r),`${t.invokeSigil??`/`}${t.name}`);o(null),l(a+e.slice(r),a.length)},d=()=>{let t=i.current?.selectionStart??e.length,n=e.slice(0,t),r=n===``||/\s$/.test(n)?`/`:` /`;o(``),l(n+r+e.slice(t),t+r.length)};return(0,B.jsxs)(`div`,{className:`overflow-hidden rounded-md border border-border bg-background focus-within:ring-1 focus-within:ring-primary`,children:[(0,B.jsx)(`div`,{onMouseDown:e=>e.preventDefault(),children:(0,B.jsx)(x,{items:n,filter:a??``,visible:a!==null&&!r,onSelect:u,onClose:()=>o(null)})}),(0,B.jsx)(`textarea`,{ref:i,"aria-label":`Design instructions`,value:e,disabled:r,rows:8,placeholder:`e.g. Before designing, use /ui-ux-pro-max to pick a palette.
2
2
  Prefer generous whitespace and a single accent colour.`,onChange:e=>{t(e.target.value),s(e.target)},onSelect:e=>s(e.currentTarget),onBlur:()=>o(null),className:`block min-h-40 w-full resize-y bg-transparent px-3 py-2 text-sm leading-relaxed text-foreground placeholder:text-text-subtle focus:outline-none`}),(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-t border-border px-2 py-1`,children:[(0,B.jsx)(`span`,{className:`text-xs text-text-subtle`,children:n.length?`Type / to name an installed skill.`:`No installed skills found.`}),(0,B.jsxs)(`button`,{type:`button`,onMouseDown:e=>e.preventDefault(),onClick:d,disabled:r||!n.length,className:`flex min-h-11 items-center gap-1.5 rounded-md px-3 text-xs text-text-secondary hover:bg-surface-hover disabled:opacity-50 md:min-h-8`,children:[(0,B.jsx)(c,{className:`size-3.5`}),` Insert skill`]})]})]})}function H({mentions:e,providers:t}){return!e.length||!t.length?null:(0,B.jsxs)(`section`,{"aria-label":`Skills named in the instructions`,className:`space-y-1.5`,children:[(0,B.jsx)(`p`,{className:`text-xs font-medium`,children:`Skills named`}),(0,B.jsx)(`ul`,{className:`space-y-1.5`,children:e.map(e=>{let n=t.map(t=>({provider:t,skill:I(e,t.items)})),i=n.every(e=>!e.skill&&e.provider.available);return(0,B.jsx)(`li`,{"data-mention":e,className:`rounded-md border border-border px-2 py-1.5 text-xs`,children:(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1`,children:[(0,B.jsxs)(`code`,{className:`font-mono text-foreground`,children:[`/`,e]}),i?(0,B.jsxs)(`span`,{className:`flex items-center gap-1 text-warning`,children:[(0,B.jsx)(l,{className:`size-3.5`}),` Not an installed skill. Design chats read it as plain text.`]}):n.map(({provider:e,skill:t})=>(0,B.jsxs)(`span`,{className:t?`flex items-center gap-1 text-text-secondary`:`text-text-subtle`,children:[t&&(0,B.jsx)(r,{className:`size-3.5 text-success`}),e.name,`: `,t?t.name:e.available?`not installed`:`skill list unavailable`]},e.id))]})},e)})})]})}var U=[{id:`web`,label:`Web`},{id:`mobile`,label:`Mobile`}];function W({projectName:e,editing:t,onClose:n,onSaved:r}){let[i,a]=(0,z.useState)(t?.label??``),[o,s]=(0,z.useState)(t?.root??``),[c,l]=(0,z.useState)(t?.platform??`web`),[u,f]=(0,z.useState)(!1),[p,h]=(0,z.useState)(null),_=i.trim(),v=t?.id===`default`,y=!!_&&(v||!!o.trim())&&!u,b=async()=>{if(y){f(!0),h(null);try{t?await S(e,t.id,{label:_,root:o.trim(),platform:c}):await w(e,{label:_,root:o.trim()||`.`,platform:c}),r()}catch(e){h(e.message||`Could not save this app`),f(!1)}}};return(0,B.jsx)(D,{open:!0,onClose:()=>{u||n()},title:t?`Edit "${t.label}"`:`Add an app`,description:`A folder under this project with its own design system — a separate frontend in a monorepo, or a mobile app.`,footer:(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(g,{variant:`outline`,onClick:n,disabled:u,children:`Cancel`}),(0,B.jsxs)(g,{onClick:()=>void b(),disabled:!y,children:[u&&(0,B.jsx)(d,{className:`size-4 animate-spin`}),` Save`]})]}),children:(0,B.jsxs)(`form`,{className:`flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),b()},children:[(0,B.jsxs)(`label`,{className:`flex flex-col gap-1 text-xs font-medium text-text-secondary`,children:[`Label`,(0,B.jsx)(`input`,{autoFocus:!0,value:i,maxLength:80,onChange:e=>a(e.target.value),placeholder:`e.g. Payroll frontend`,className:`min-h-11 w-full rounded-md border border-border bg-background px-3 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary md:min-h-9`})]}),!v&&(0,B.jsxs)(`label`,{className:`flex flex-col gap-1 text-xs font-medium text-text-secondary`,children:[`Folder (relative to the project)`,(0,B.jsx)(`input`,{value:o,onChange:e=>s(e.target.value),spellCheck:!1,autoComplete:`off`,placeholder:`e.g. payroll-fe`,className:`min-h-11 w-full rounded-md border border-border bg-background px-3 font-mono text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary md:min-h-9`})]}),(0,B.jsx)(`div`,{role:`radiogroup`,"aria-label":`Platform`,className:`grid grid-cols-2 gap-2`,children:U.map(e=>(0,B.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":c===e.id,onClick:()=>l(e.id),className:m(`min-h-11 rounded-md border px-3 text-sm md:min-h-9`,c===e.id?`border-primary text-foreground`:`border-border text-text-subtle`),children:e.label},e.id))}),p&&(0,B.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:p})]})})}function G({projectName:e,system:t,onClose:n,onRemoved:r}){let[i,a]=(0,z.useState)(!1),[o,s]=(0,z.useState)(!1),[c,l]=(0,z.useState)(null),u=async()=>{s(!0),l(null);try{await T(e,t.id,i),r()}catch(e){l(e.message||`Could not remove this app`),s(!1)}};return(0,B.jsxs)(D,{open:!0,onClose:()=>{o||n()},title:`Remove "${t.label}"?`,description:`Designs already made for it keep working; it just stops being offered as an app.`,footer:(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(g,{variant:`outline`,onClick:n,disabled:o,children:`Cancel`}),(0,B.jsxs)(g,{variant:`destructive`,onClick:()=>void u(),disabled:o,children:[o&&(0,B.jsx)(d,{className:`size-4 animate-spin`}),` Remove`]})]}),children:[(0,B.jsxs)(`label`,{className:`flex min-h-11 items-center gap-2 text-sm text-text-secondary`,children:[(0,B.jsx)(`input`,{type:`checkbox`,checked:i,onChange:e=>a(e.target.checked),className:`size-4`}),`Also delete its design-system files (DESIGN.md, tokens.css, kit/)`]}),c&&(0,B.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:c})]})}function K({projectName:e,system:t,onEdit:n,onRemove:r}){let[s,c]=(0,z.useState)(null);return(0,z.useEffect)(()=>{let n=!1;if(t.builtFrom)return C(e,t.id).then(e=>{n||c(e)}).catch(()=>void 0),()=>{n=!0}},[e,t.id,t.builtFrom?.commit]),(0,B.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border border-border p-2`,children:[t.platform===`mobile`?(0,B.jsx)(i,{className:`size-4 shrink-0 text-text-subtle`}):(0,B.jsx)(a,{className:`size-4 shrink-0 text-text-subtle`}),(0,B.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,B.jsx)(`p`,{className:`truncate text-sm text-text-secondary`,children:t.label}),(0,B.jsxs)(`p`,{className:`truncate text-xs text-text-subtle`,children:[t.root===`.`?`Project root`:t.root,` · `,O(t,s)]})]}),(0,B.jsx)(`button`,{type:`button`,onClick:n,"aria-label":`Edit ${t.label}`,className:`flex size-11 shrink-0 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground md:size-8`,children:(0,B.jsx)(u,{className:`size-4`})}),t.id!==`default`&&(0,B.jsx)(`button`,{type:`button`,onClick:r,"aria-label":`Remove ${t.label}`,className:`flex size-11 shrink-0 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-destructive md:size-8`,children:(0,B.jsx)(o,{className:`size-4`})})]})}function q({projectName:e}){let[t,n]=(0,z.useState)(null),[r,i]=(0,z.useState)(null),[a,o]=(0,z.useState)(null),[c,l]=(0,z.useState)(null),u=(0,z.useCallback)(()=>{E(e).then(e=>{n(e),i(null)}).catch(e=>i(e.message||`Could not load this project's apps`))},[e]);(0,z.useEffect)(()=>{n(null),u()},[e,u]);let p=()=>{o(null),l(null),u(),v(e),f.success(`Saved`)};return(0,B.jsxs)(`div`,{className:`space-y-2`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsx)(`p`,{className:`text-sm font-medium`,children:`Apps in this project`}),(0,B.jsxs)(g,{size:`sm`,variant:`outline`,className:`min-h-9 gap-1 text-xs`,onClick:()=>o(`new`),children:[(0,B.jsx)(s,{className:`size-3.5`}),` Add app`]})]}),(0,B.jsx)(`p`,{className:`text-xs leading-relaxed text-text-subtle`,children:`One design system per app — a separate frontend in a monorepo, or a mobile app. A project with none declared uses one default app at its own root.`}),r?(0,B.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:r}):t===null?(0,B.jsx)(`div`,{className:`flex justify-center py-4`,children:(0,B.jsx)(d,{className:`size-4 animate-spin text-primary`})}):(0,B.jsx)(`div`,{className:`space-y-2`,children:t.map(t=>(0,B.jsx)(K,{projectName:e,system:t,onEdit:()=>o(t),onRemove:()=>l(t)},t.id))}),a&&(0,B.jsx)(W,{projectName:e,editing:a===`new`?null:a,onClose:()=>o(null),onSaved:p}),c&&(0,B.jsx)(G,{projectName:e,system:c,onClose:()=>l(null),onRemoved:p})]})}function J(){let e=p(e=>e.designWindows);return(0,B.jsxs)(`label`,{className:`flex min-h-11 cursor-pointer items-center justify-between gap-4`,children:[(0,B.jsxs)(`span`,{className:`space-y-1`,children:[(0,B.jsx)(`span`,{className:`block text-sm font-medium`,children:`Open designs in a window`}),(0,B.jsx)(`span`,{className:`block text-xs leading-relaxed text-text-subtle`,children:`A design floats over your panels, where you can move it, snap it to the right half or minimize it to the status bar. Off: designs open as tabs. On a phone a design is always full screen.`})]}),(0,B.jsx)(_,{checked:e,onCheckedChange:e=>p.getState().setDesignWindows(e),"aria-label":`Open designs in a window`})]})}function Y(e){let t=new Set,n=[];for(let r of e.providers)for(let e of r.items)t.has(e.name)||(t.add(e.name),n.push(e));return n}function X(){let e=h(e=>e.activeProject?.name),[t,n]=(0,z.useState)(null),[r,i]=(0,z.useState)(``),[a,o]=(0,z.useState)(!1),[s,c]=(0,z.useState)(null),l=(0,z.useRef)(null),u=(0,z.useRef)(r);u.current=r,(0,z.useEffect)(()=>{let t=!1;return c(null),N(e,{fresh:!0}).then(e=>{if(t)return;let r=l.current;l.current=e.instructions,n(e),i(t=>r===null||t.trim()===r?e.instructions:t)}).catch(e=>{t||c(e.message||`Could not load design settings`)}),()=>{t=!0}},[e]);let p=(0,z.useMemo)(()=>t?Y(t):[],[t]),m=(0,z.useMemo)(()=>P(r),[r]),_=(0,z.useMemo)(()=>A(r.trim()),[r]);if(s)return(0,B.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:s});if(!t)return(0,B.jsx)(`div`,{className:`flex items-center justify-center py-8 text-muted-foreground`,children:(0,B.jsx)(d,{className:`size-4 animate-spin`})});let v=_>t.maxBytes,y=r.trim()!==t.instructions,b=R(t),x=b.length>0&&M(r,b);return(0,B.jsxs)(`div`,{className:`space-y-4`,children:[(0,B.jsx)(J,{}),(0,B.jsx)(`div`,{className:`h-px bg-border`}),e&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(q,{projectName:e}),(0,B.jsx)(`div`,{className:`h-px bg-border`})]}),(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsx)(`p`,{className:`text-sm font-medium`,children:`Design instructions`}),(0,B.jsxs)(`p`,{className:`text-xs leading-relaxed text-text-subtle`,children:[`Added to every design chat, in every project, after PPM's own design rules — which still come first. Name an installed skill with `,(0,B.jsx)(`code`,{children:`/`}),` and the AI is told to use it before designing. Changes apply to design chats started after saving; a chat that is already open may keep the old instructions until it is reopened.`]})]}),(0,B.jsx)(V,{value:r,onChange:i,skills:p,disabled:a}),(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,B.jsxs)(`span`,{className:v?`text-xs text-destructive`:`text-xs text-text-subtle`,children:[_.toLocaleString(),` / `,t.maxBytes.toLocaleString(),` bytes`]}),(0,B.jsx)(g,{size:`sm`,className:`min-h-11 px-4 text-xs md:min-h-8`,disabled:!y||v||a,onClick:async()=>{o(!0);try{let e=await j(r);l.current=e,n({...t,instructions:e}),i(e),f.success(`Design instructions saved`)}catch(e){f.error(`Could not save`,{description:e.message})}finally{o(!1)}},children:a?(0,B.jsx)(d,{className:`size-3.5 animate-spin`}):`Save`})]}),(0,B.jsx)(H,{mentions:m,providers:t.providers}),!t.providers.length&&(0,B.jsx)(`p`,{className:`text-xs text-text-subtle`,children:`No configured provider can run design chats. Enable Claude or Codex in AI Provider.`}),x&&(0,B.jsx)(L,{providerNames:t.providers.map(e=>e.name),onInstalled:async({results:t,python:r})=>{let a=F.name,o=u.current,s=k(o),c=`Design chats started from now on will use it.`;if(s===null)c=`Name /${a} in the instructions to use it.`;else if(s!==o&&o.trim()!==l.current)i(s),c=`Added /${a} to the instructions. Press Save to use it.`;else if(s!==o)try{let e=await j(s);l.current=e,i(e),c=`Added /${a} to the instructions; design chats started from now on will use it.`}catch(e){i(s),c=`Added /${a} to the instructions, but saving failed (${e.message}). Press Save to try again.`}let d=t.every(e=>!e.installed);f.success(d?`${a} was already installed`:`Installed ${a}`,{description:c}),r||f.warning(`Python 3 was not found on this machine`,{description:`${a}'s search scripts need it. The AI asks before installing anything.`}),N(e,{fresh:!0}).then(e=>{l.current=e.instructions,n(e)}).catch(()=>{})}})]})}export{X as DesignSettingsSection};
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pptx-export-B2wCBWlV.js","assets/rolldown-runtime-C5c2KzVm.js","assets/preload-helper-CM8YhcCa.js","assets/vendor-ui-BTSIXzhZ.js","assets/vendor-markdown-C-P1aR4p.js","assets/api-client-xQDlhUTu.js","assets/design-export-client-CJ3w7Zrk.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,An as i,Ar as a,Cn as o,Dn as s,Fn as c,Gn as l,Gt as u,Jn as d,Kr as f,L as p,Ln as m,P as h,Sr as g,Tr as _,Vn as v,Wn as y,Yr as b,bt as x,ct as S,dn as C,dr as w,en as T,g as E,gr as D,gt as O,hr as k,ht as A,j,jn as M,jr as N,kr as P,li as F,ln as ee,qr as te,r as ne,tr as re,u as ie,ur as ae,ut as oe,xn as I,xt as se,zr as ce}from"./icons-BwyIKaTT.js";import{t as le}from"./chat-tab-D8iAVZKV.js";import{a as ue,k as L,o as de,r as R}from"./api-client-xQDlhUTu.js";import{t as fe}from"./settings-store-B4mLp19V.js";import{t as pe}from"./preload-helper-CM8YhcCa.js";import{n as z}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import{I as me}from"./window-store-DqX_qmkQ.js";import{n as he,t as ge}from"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import{t as _e}from"./format-date-CSHaU2wN.js";import"./context-menu-BCuZYfWC.js";import"./chat-preparation-cache-190LLyy7.js";import"./file-store-BQ41vIs5.js";import{n as ve}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import{t as ye}from"./open-settings-EXR4zoZG.js";import{u as be}from"./onboarding-quick-orientation-CTHtIRib.js";import{r as xe}from"./clipboard-D-VCry-F.js";import{t as B}from"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import{n as Se}from"./patch-tab-metadata-C92YkrRX.js";import{a as Ce,c as we,i as Te,l as Ee,m as De,r as Oe,s as ke,t as Ae}from"./dropdown-menu-BQidk_OJ.js";import{t as je}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{n as Me,o as Ne,r as V,t as Pe,u as Fe}from"./adaptive-context-menu-C4jNSORA.js";import"./fs-api-CFtQzsIJ.js";import{o as Ie}from"./format-file-meta-DdYtk07C.js";import{t as Le}from"./input-C3oVNCMq.js";import"./start-ellipsis-CU8GkxaV.js";import"./ws-auth-CbF6GqxP.js";import{A as Re,Bi as ze,Cn as Be,E as Ve,Hi as He,T as Ue,Vi as We,ci as Ge,k as Ke,kn as qe,si as Je,w as Ye,y as Xe}from"./index-DLB3j_P0.js";import"./agent-session-sheet-store-BAfLnsLX.js";import"./libesm-B6LsX5wH.js";import"./tool-cards-BRto67jM.js";import"./use-blob-url-Clm7wbB_.js";import{r as Ze}from"./design-canvas-check-BIHc2d_k.js";import"./db-ai-tools-CVbbW_MZ.js";import"./use-websocket-n3Ud9vEA.js";import{a as Qe}from"./api-settings-vmIRFNwZ.js";import"./session-changes-bar-VfS2sHuH.js";import"./onboarding-entry-eehqBvyM.js";import{i as $e,n as et,t as tt}from"./send-to-chat-CWV1qd3c.js";import"./slash-command-picker-lILYDfK3.js";import"./ai-settings-section-C9Q-v8fY.js";import"./codex-reset-credit-button-DQDtyvnd.js";import{a as nt,i as rt,o as it,t as at}from"./design-responsive-dialog-MAFgVOmv.js";import{a as ot,i as st,n as ct,r as lt}from"./design-export-client-CJ3w7Zrk.js";import{a as ut,c as dt,d as ft,f as pt,i as mt,l as H,n as ht,o as gt,p as _t,r as vt,s as yt,t as bt,u as xt}from"./use-design-canvas-check-DBsLf1At.js";var U=e(t(),1),St=200;function Ct(e,t){let[n,r]=(0,U.useState)(`resolving`),[i,a]=(0,U.useState)(0),o=String(t.projectName??``),s=String(t.designSlug??``),c=typeof t.sessionId==`string`?t.sessionId:void 0,l=t.designSessionChecked===!0,u=t.providerPending===!0||typeof t.providerId!=`string`,d=typeof t.designChatEpoch==`number`?t.designChatEpoch:0;(0,U.useEffect)(()=>{if(!o||!s)return;let t=!1;return r(e=>e===`ready`&&!u&&(c||l)?e:`resolving`),(async()=>{if(!c&&!l){let n=new URLSearchParams({limit:String(St),offset:`0`}),r=await R.get(`${de(o)}/chat/sessions?${n}`);if(t)return;let i=r.sessions.find(e=>e.designSlug===s);Se(e,{designSessionChecked:!0,...i?{sessionId:i.id,providerId:i.providerId,providerPending:void 0,designChatEpoch:d+1}:{}});return}if(u){let[n,i]=await Promise.all([Qe(),Ve(o)]);if(t)return;let a=he(n),s=i.find(e=>e.id===a)??i[0];if(!s){r(`no-provider`);return}Se(e,{providerId:s.id,providerPending:void 0});return}r(`ready`)})().catch(e=>{console.warn(`[design] could not prepare the chat for ${s}: ${e.message}`),t||r(`error`)}),()=>{t=!0}},[e,o,s,c,l,u,i]);let f=(0,U.useCallback)(()=>a(e=>e+1),[]),p=(0,U.useCallback)(t=>{Se(e,{sessionId:void 0,pendingMessage:void 0,clearedFrom:t,designSessionChecked:!0,designChatEpoch:Je({designChatEpoch:d})})},[e,d]),m=(0,U.useCallback)(t=>{Se(e,{sessionId:t.sessionId,providerId:t.providerId,pendingMessage:t.pendingMessage,designChatEpoch:Je({designChatEpoch:d})})},[e,d]);return{status:n,retry:f,epoch:d,sessionId:c??null,startNewSession:p,adoptFork:m}}var wt=`ppm:design-show-chat`;function Tt(e,t,n){if(!e||!t.trim())return;let r=!1,i=()=>{r=!0};window.addEventListener(tt,i);try{window.dispatchEvent(new CustomEvent(et,{detail:{text:t,label:n,targetTabId:e}}))}finally{window.removeEventListener(tt,i)}r||Se(e,{pendingMessage:t}),Dt(e)}function Et(e,t,n){if(!e||!t.trim())return`none`;let r=`none`,i=e=>{r=e.detail?.sent?`sent`:`chip`};window.addEventListener(tt,i);try{window.dispatchEvent(new CustomEvent(et,{detail:{text:t,label:n,targetTabId:e,autoSend:!0}}))}finally{window.removeEventListener(tt,i)}return r}function Dt(e){window.dispatchEvent(new CustomEvent(wt,{detail:{tabId:e}}))}var Ot=(0,U.createContext)(null);function kt(){let e=(0,U.useContext)(Ot);if(!e)throw Error(`useDesignTab() used outside a design tab`);return e}var W=n();function At({tabId:e,metadata:t,session:n}){return n.status===`no-provider`?(0,W.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-center text-sm text-text-subtle`,role:`status`,children:`No configured AI provider can run design sessions. Enable Claude or Codex in Settings → AI Provider.`}):n.status===`error`?(0,W.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-2 p-4 text-sm text-text-subtle`,role:`status`,children:[`Could not prepare this design's chat.`,(0,W.jsx)(`button`,{type:`button`,onClick:n.retry,className:`min-h-11 px-3 text-primary underline`,children:`Retry`})]}):n.status===`ready`?(0,W.jsx)(le,{tabId:e,metadata:t,onNewSession:n.startNewSession,onFork:n.adoptFork,historyFilter:String(t.designSlug)},n.epoch):(0,W.jsxs)(`div`,{className:`flex h-full items-center justify-center gap-2 text-sm text-text-subtle`,role:`status`,children:[(0,W.jsx)(I,{className:`size-4 animate-spin`}),` Preparing chat…`]})}var jt=`default`;function Mt(e){let t=e.root===`.`?`this project`:`\`${e.root}/\` in this project`,n=e.id===jt?`designs/`:`designs/systems/${e.id}/`,r=`designs/system-${e.id}/`,i=`../systems/${e.id}`,a=e.platform===`mobile`?`This app is mobile (React Native or similar): make the tokens and recipes emulate its native components rather than HTML form controls, and build the showcase page to be viewed in the phone frame.`:``;return`Set up the design system for "${e.label}" (${t}) so every design for this app matches it.
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,An as i,Ar as a,Cn as o,Dn as s,Fn as c,Gn as l,Gt as u,Jn as d,Kr as f,L as p,Ln as m,P as h,Sr as g,Tr as _,Vn as v,Wn as y,Yr as b,bt as x,ct as S,dn as C,dr as w,en as T,g as E,gr as D,gt as O,hr as k,ht as A,j,jn as M,jr as N,kr as P,li as F,ln as ee,qr as te,r as ne,tr as re,u as ie,ur as ae,ut as oe,xn as I,xt as se,zr as ce}from"./icons-BwyIKaTT.js";import{t as le}from"./chat-tab-kk-mAF05.js";import{a as ue,k as L,o as de,r as R}from"./api-client-xQDlhUTu.js";import{t as fe}from"./settings-store-B4mLp19V.js";import{t as pe}from"./preload-helper-CM8YhcCa.js";import{n as z}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import{I as me}from"./window-store-DqX_qmkQ.js";import{n as he,t as ge}from"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import{t as _e}from"./format-date-CSHaU2wN.js";import"./context-menu-BCuZYfWC.js";import"./chat-preparation-cache-190LLyy7.js";import"./file-store-BQ41vIs5.js";import{n as ve}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import{t as ye}from"./open-settings-EXR4zoZG.js";import{u as be}from"./onboarding-quick-orientation-CTHtIRib.js";import{r as xe}from"./clipboard-D-VCry-F.js";import{t as B}from"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import{n as Se}from"./patch-tab-metadata-C92YkrRX.js";import{a as Ce,c as we,i as Te,l as Ee,m as De,r as Oe,s as ke,t as Ae}from"./dropdown-menu-BQidk_OJ.js";import{t as je}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{n as Me,o as Ne,r as V,t as Pe,u as Fe}from"./adaptive-context-menu-C4jNSORA.js";import"./fs-api-CFtQzsIJ.js";import{o as Ie}from"./format-file-meta-DdYtk07C.js";import{t as Le}from"./input-C3oVNCMq.js";import"./start-ellipsis-CU8GkxaV.js";import"./ws-auth-CbF6GqxP.js";import{A as Re,Bi as ze,Cn as Be,E as Ve,Hi as He,T as Ue,Vi as We,ci as Ge,k as Ke,kn as qe,si as Je,w as Ye,y as Xe}from"./index-COwBji1t.js";import"./agent-session-sheet-store-BAfLnsLX.js";import"./libesm-B6LsX5wH.js";import"./tool-cards-oZ6cptRr.js";import"./use-blob-url-Clm7wbB_.js";import{r as Ze}from"./design-canvas-check-BIHc2d_k.js";import"./db-ai-tools-CVbbW_MZ.js";import"./use-websocket-QCAD3F5b.js";import{a as Qe}from"./api-settings-vmIRFNwZ.js";import"./session-changes-bar-VfS2sHuH.js";import"./onboarding-entry-eehqBvyM.js";import{i as $e,n as et,t as tt}from"./send-to-chat-CWV1qd3c.js";import"./slash-command-picker-BdKd_AiS.js";import"./ai-settings-section-Ct9-lNqA.js";import"./codex-reset-credit-button-CwSSBK6P.js";import{a as nt,i as rt,o as it,t as at}from"./design-responsive-dialog-MAFgVOmv.js";import{a as ot,i as st,n as ct,r as lt}from"./design-export-client-CJ3w7Zrk.js";import{a as ut,c as dt,d as ft,f as pt,i as mt,l as H,n as ht,o as gt,p as _t,r as vt,s as yt,t as bt,u as xt}from"./use-design-canvas-check-DBsLf1At.js";var U=e(t(),1),St=200;function Ct(e,t){let[n,r]=(0,U.useState)(`resolving`),[i,a]=(0,U.useState)(0),o=String(t.projectName??``),s=String(t.designSlug??``),c=typeof t.sessionId==`string`?t.sessionId:void 0,l=t.designSessionChecked===!0,u=t.providerPending===!0||typeof t.providerId!=`string`,d=typeof t.designChatEpoch==`number`?t.designChatEpoch:0;(0,U.useEffect)(()=>{if(!o||!s)return;let t=!1;return r(e=>e===`ready`&&!u&&(c||l)?e:`resolving`),(async()=>{if(!c&&!l){let n=new URLSearchParams({limit:String(St),offset:`0`}),r=await R.get(`${de(o)}/chat/sessions?${n}`);if(t)return;let i=r.sessions.find(e=>e.designSlug===s);Se(e,{designSessionChecked:!0,...i?{sessionId:i.id,providerId:i.providerId,providerPending:void 0,designChatEpoch:d+1}:{}});return}if(u){let[n,i]=await Promise.all([Qe(),Ve(o)]);if(t)return;let a=he(n),s=i.find(e=>e.id===a)??i[0];if(!s){r(`no-provider`);return}Se(e,{providerId:s.id,providerPending:void 0});return}r(`ready`)})().catch(e=>{console.warn(`[design] could not prepare the chat for ${s}: ${e.message}`),t||r(`error`)}),()=>{t=!0}},[e,o,s,c,l,u,i]);let f=(0,U.useCallback)(()=>a(e=>e+1),[]),p=(0,U.useCallback)(t=>{Se(e,{sessionId:void 0,pendingMessage:void 0,clearedFrom:t,designSessionChecked:!0,designChatEpoch:Je({designChatEpoch:d})})},[e,d]),m=(0,U.useCallback)(t=>{Se(e,{sessionId:t.sessionId,providerId:t.providerId,pendingMessage:t.pendingMessage,designChatEpoch:Je({designChatEpoch:d})})},[e,d]);return{status:n,retry:f,epoch:d,sessionId:c??null,startNewSession:p,adoptFork:m}}var wt=`ppm:design-show-chat`;function Tt(e,t,n){if(!e||!t.trim())return;let r=!1,i=()=>{r=!0};window.addEventListener(tt,i);try{window.dispatchEvent(new CustomEvent(et,{detail:{text:t,label:n,targetTabId:e}}))}finally{window.removeEventListener(tt,i)}r||Se(e,{pendingMessage:t}),Dt(e)}function Et(e,t,n){if(!e||!t.trim())return`none`;let r=`none`,i=e=>{r=e.detail?.sent?`sent`:`chip`};window.addEventListener(tt,i);try{window.dispatchEvent(new CustomEvent(et,{detail:{text:t,label:n,targetTabId:e,autoSend:!0}}))}finally{window.removeEventListener(tt,i)}return r}function Dt(e){window.dispatchEvent(new CustomEvent(wt,{detail:{tabId:e}}))}var Ot=(0,U.createContext)(null);function kt(){let e=(0,U.useContext)(Ot);if(!e)throw Error(`useDesignTab() used outside a design tab`);return e}var W=n();function At({tabId:e,metadata:t,session:n}){return n.status===`no-provider`?(0,W.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-center text-sm text-text-subtle`,role:`status`,children:`No configured AI provider can run design sessions. Enable Claude or Codex in Settings → AI Provider.`}):n.status===`error`?(0,W.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-2 p-4 text-sm text-text-subtle`,role:`status`,children:[`Could not prepare this design's chat.`,(0,W.jsx)(`button`,{type:`button`,onClick:n.retry,className:`min-h-11 px-3 text-primary underline`,children:`Retry`})]}):n.status===`ready`?(0,W.jsx)(le,{tabId:e,metadata:t,onNewSession:n.startNewSession,onFork:n.adoptFork,historyFilter:String(t.designSlug)},n.epoch):(0,W.jsxs)(`div`,{className:`flex h-full items-center justify-center gap-2 text-sm text-text-subtle`,role:`status`,children:[(0,W.jsx)(I,{className:`size-4 animate-spin`}),` Preparing chat…`]})}var jt=`default`;function Mt(e){let t=e.root===`.`?`this project`:`\`${e.root}/\` in this project`,n=e.id===jt?`designs/`:`designs/systems/${e.id}/`,r=`designs/system-${e.id}/`,i=`../systems/${e.id}`,a=e.platform===`mobile`?`This app is mobile (React Native or similar): make the tokens and recipes emulate its native components rather than HTML form controls, and build the showcase page to be viewed in the phone frame.`:``;return`Set up the design system for "${e.label}" (${t}) so every design for this app matches it.
3
3
 
4
4
  1. Read ${t}'s codebase once to learn its visual language: global stylesheets, theme and
5
5
  token files (CSS custom properties, Tailwind config, theme objects), the font setup, and a
@@ -1 +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"./vendor-ui-BTSIXzhZ.js";import{Ar as r,Cr as i,Jn as a,Kr as o,cr as s,tr as c,ur as l,xn as u,xt as d}from"./icons-BwyIKaTT.js";import{k as f}from"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import{t as p}from"./panel-store-BJhazigC.js";import{i as m}from"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import{t as h}from"./format-date-CSHaU2wN.js";import"./context-menu-BCuZYfWC.js";import"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import{t as g}from"./open-settings-EXR4zoZG.js";import{t as _}from"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./patch-tab-metadata-C92YkrRX.js";import"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{n as v,o as y,r as b,t as x,u as S}from"./adaptive-context-menu-C4jNSORA.js";import{C,D as w,O as T,b as E,ci as D,x as O,y as k}from"./index-DLB3j_P0.js";import{a as A,i as j,t as M}from"./design-responsive-dialog-MAFgVOmv.js";import{t as N}from"./design-system-status-label-KA4ESjWe.js";var P=e(t(),1),F=n();function I({projectName:e,design:t,onClose:n}){let[r,i]=(0,P.useState)(t.title),[a,o]=(0,P.useState)(!1),[s,c]=(0,P.useState)(null),l=r.trim(),d=!!l&&l!==t.title&&!a,f=async()=>{if(d){o(!0),c(null);try{await T(e,t.slug,l),E(e),n()}catch(e){c(e.message||`Could not rename the design`),o(!1)}}};return(0,F.jsx)(M,{open:!0,onClose:()=>{a||n()},title:`Rename design`,description:`The folder stays designs/${t.slug}/.`,footer:(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(_,{variant:`outline`,onClick:n,disabled:a,children:`Cancel`}),(0,F.jsxs)(_,{onClick:f,disabled:!d,children:[a&&(0,F.jsx)(u,{className:`size-4 animate-spin`}),` Rename`]})]}),children:(0,F.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),f()},className:`flex flex-col gap-2`,children:[(0,F.jsx)(`input`,{autoFocus:!0,value:r,maxLength:120,onChange:e=>i(e.target.value),"aria-label":`Title`,className:`min-h-11 w-full rounded-md border border-border bg-background px-3 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-primary md:min-h-9`}),s&&(0,F.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:s})]})})}function L({projectName:e,design:t,onClose:n}){let[r,i]=(0,P.useState)(``),[a,o]=(0,P.useState)(!1),[s,c]=(0,P.useState)(null),l=r.trim()===t.slug,d=async()=>{if(!(!l||a)){o(!0),c(null);try{await C(e,t.slug);let r=p.getState();for(let n of Object.values(r.panels))for(let i of n.tabs)i.type===`design`&&i.metadata?.designSlug===t.slug&&(i.projectId??i.metadata?.projectName)===e&&r.closeTab(i.id,n.id);E(e),n()}catch(e){c(e.message||`Could not delete the design`),o(!1)}}};return(0,F.jsx)(M,{open:!0,onClose:()=>{a||n()},title:`Delete “${t.title}”?`,description:`This deletes designs/${t.slug}/ and its version history. It cannot be undone.`,footer:(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(_,{variant:`outline`,onClick:n,disabled:a,children:`Cancel`}),(0,F.jsxs)(_,{variant:`destructive`,onClick:d,disabled:!l||a,children:[a&&(0,F.jsx)(u,{className:`size-4 animate-spin`}),` Delete`]})]}),children:(0,F.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),d()},className:`flex flex-col gap-2`,children:[(0,F.jsxs)(`label`,{className:`text-xs text-text-secondary`,children:[`Type `,(0,F.jsx)(`span`,{className:`font-mono font-semibold`,children:t.slug}),` to confirm`,(0,F.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),autoComplete:`off`,spellCheck:!1,className:`mt-1 min-h-11 w-full rounded-md border border-border bg-background px-3 font-mono text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-destructive md:min-h-9`})]}),s&&(0,F.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:s})]})})}function R({projectName:e,system:t,onNavigate:n}){let[i,o]=(0,P.useState)(null),[s,c]=(0,P.useState)(!1);(0,P.useEffect)(()=>{let n=!1;if(t.builtFrom)return j(e,t.id).then(e=>{n||o(e)}).catch(()=>{}),()=>{n=!0}},[e,t.id,t.builtFrom?.commit]);let l=async()=>{if(!s){c(!0);try{let r=await A(e,t.id);D({projectName:e,slug:r.slug,title:r.title}),n?.()}catch(e){f.error(`Could not open the showcase`,{description:e.message})}finally{c(!1)}}};return(0,F.jsxs)(`button`,{type:`button`,onClick:()=>void l(),disabled:s,className:`flex w-full min-h-11 select-none items-center gap-2 rounded-md px-2 py-1.5 text-left hover:bg-surface-elevated disabled:opacity-60 md:min-h-9`,children:[s?(0,F.jsx)(u,{className:`size-4 shrink-0 animate-spin text-text-subtle`}):t.platform===`mobile`?(0,F.jsx)(r,{className:`size-4 shrink-0 text-text-subtle`}):(0,F.jsx)(a,{className:`size-4 shrink-0 text-text-subtle`}),(0,F.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,F.jsx)(`span`,{className:`block truncate text-sm text-text-secondary`,children:t.label}),(0,F.jsx)(`span`,{className:`block truncate text-xs text-text-subtle`,children:N(t,i)})]})]})}function z({projectName:e,systems:t,onNavigate:n}){return t.length===0?null:(0,F.jsxs)(`div`,{className:`mt-2 border-t border-border pt-2`,children:[(0,F.jsx)(`p`,{className:`px-2 pb-1 text-xs font-semibold uppercase tracking-wide text-text-subtle`,children:`Design systems`}),t.map(t=>(0,F.jsx)(R,{projectName:e,system:t,onNavigate:n},t.id))]})}var B=`flex size-11 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground md:size-7`;function V(e){return e.designs.filter(e=>!e.showcaseFor)}function H({onNavigate:e}){let t=m(e=>e.activeProject?.name??``),[n,r]=(0,P.useState)(null),[f,p]=(0,P.useState)(null),[_,C]=(0,P.useState)(null),[T,E]=(0,P.useState)(null),A=(0,P.useCallback)(()=>{t&&w(t).then(e=>{r(e),p(null)}).catch(e=>p(e.message||`Could not load designs`))},[t]);(0,P.useEffect)(()=>{r(null),A();let e=null,n=()=>{e&&clearTimeout(e),e=setTimeout(A,500)},i=e=>{let r=e.detail,i=r.path??``,a=/^designs\/[^/]+(\/(design\.json|index\.html))?$/.test(i),o=/^designs\/systems\/[^/]+(\/.*)?$/.test(i);r?.projectName===t&&(a||o)&&n()},a=e=>{e.detail?.projectName===t&&A()};return window.addEventListener(`file:changed`,i),window.addEventListener(k,a),()=>{e&&clearTimeout(e),window.removeEventListener(`file:changed`,i),window.removeEventListener(k,a)}},[t,A]);let j=n=>{D({projectName:t,slug:n.slug,title:n.title}),e?.()};return t?(0,F.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,F.jsxs)(`div`,{className:`flex h-9 shrink-0 items-center justify-between border-b border-border px-2`,children:[(0,F.jsx)(`span`,{className:`text-xs font-semibold uppercase tracking-wide text-text-secondary`,children:`Designs`}),(0,F.jsxs)(`span`,{className:`flex items-center gap-0.5`,children:[(0,F.jsx)(`button`,{type:`button`,onClick:()=>{g(`design`),e?.()},"aria-label":`Design settings`,title:`Design settings`,className:B,children:(0,F.jsx)(i,{className:`size-4`})}),(0,F.jsx)(`button`,{type:`button`,onClick:()=>{O(t),e?.()},"aria-label":`New design`,title:`New design`,className:B,children:(0,F.jsx)(s,{className:`size-4`})})]})]}),(0,F.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-1`,children:[f?(0,F.jsx)(`p`,{className:`px-2 py-3 text-xs text-destructive`,children:f}):n===null?(0,F.jsx)(`div`,{className:`flex justify-center py-6`,children:(0,F.jsx)(u,{className:`size-4 animate-spin text-primary`})}):V(n).length===0?(0,F.jsxs)(`div`,{className:`flex flex-col items-center gap-2 px-3 py-6 text-center text-xs text-text-subtle`,children:[(0,F.jsx)(a,{className:`size-6`}),`No designs yet. Start one and describe what you want; the AI builds it beside a live preview.`,(0,F.jsx)(`button`,{type:`button`,onClick:()=>O(t),className:`min-h-11 px-3 text-sm text-primary underline`,children:`New design`})]}):V(n).map(e=>(0,F.jsxs)(x,{children:[(0,F.jsx)(S,{asChild:!0,children:(0,F.jsxs)(`button`,{type:`button`,onClick:()=>j(e),className:`flex w-full min-h-11 select-none items-center gap-2 rounded-md px-2 py-1.5 text-left hover:bg-surface-elevated md:min-h-9`,children:[(0,F.jsx)(e.kind===`slides`?l:d,{className:`size-4 shrink-0 text-text-subtle`}),(0,F.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,F.jsx)(`span`,{className:`block truncate text-sm text-text-secondary`,children:e.title}),(0,F.jsx)(`span`,{className:`block truncate text-xs text-text-subtle`,children:h(e.updatedAt)})]})]})}),(0,F.jsxs)(v,{children:[(0,F.jsxs)(b,{onClick:()=>j(e),children:[(0,F.jsx)(a,{className:`size-4`}),` Open`]}),(0,F.jsxs)(b,{onClick:()=>C(e),children:[(0,F.jsx)(c,{className:`size-4`}),` Rename`]}),(0,F.jsx)(y,{}),(0,F.jsxs)(b,{variant:`destructive`,onClick:()=>E(e),children:[(0,F.jsx)(o,{className:`size-4`}),` Delete`]})]})]},e.slug)),n&&(0,F.jsx)(z,{projectName:t,systems:n.systems,onNavigate:e})]}),_&&(0,F.jsx)(I,{projectName:t,design:_,onClose:()=>C(null)}),T&&(0,F.jsx)(L,{projectName:t,design:T,onClose:()=>E(null)})]}):(0,F.jsx)(`p`,{className:`p-4 text-center text-xs text-text-subtle`,children:`Select a project to see its designs`})}export{H as DesignsSidebarPanel};
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{Ar as r,Cr as i,Jn as a,Kr as o,cr as s,tr as c,ur as l,xn as u,xt as d}from"./icons-BwyIKaTT.js";import{k as f}from"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import{t as p}from"./panel-store-BJhazigC.js";import{i as m}from"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import{t as h}from"./format-date-CSHaU2wN.js";import"./context-menu-BCuZYfWC.js";import"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import{t as g}from"./open-settings-EXR4zoZG.js";import{t as _}from"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./patch-tab-metadata-C92YkrRX.js";import"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{n as v,o as y,r as b,t as x,u as S}from"./adaptive-context-menu-C4jNSORA.js";import{C,D as w,O as T,b as E,ci as D,x as O,y as k}from"./index-COwBji1t.js";import{a as A,i as j,t as M}from"./design-responsive-dialog-MAFgVOmv.js";import{t as N}from"./design-system-status-label-KA4ESjWe.js";var P=e(t(),1),F=n();function I({projectName:e,design:t,onClose:n}){let[r,i]=(0,P.useState)(t.title),[a,o]=(0,P.useState)(!1),[s,c]=(0,P.useState)(null),l=r.trim(),d=!!l&&l!==t.title&&!a,f=async()=>{if(d){o(!0),c(null);try{await T(e,t.slug,l),E(e),n()}catch(e){c(e.message||`Could not rename the design`),o(!1)}}};return(0,F.jsx)(M,{open:!0,onClose:()=>{a||n()},title:`Rename design`,description:`The folder stays designs/${t.slug}/.`,footer:(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(_,{variant:`outline`,onClick:n,disabled:a,children:`Cancel`}),(0,F.jsxs)(_,{onClick:f,disabled:!d,children:[a&&(0,F.jsx)(u,{className:`size-4 animate-spin`}),` Rename`]})]}),children:(0,F.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),f()},className:`flex flex-col gap-2`,children:[(0,F.jsx)(`input`,{autoFocus:!0,value:r,maxLength:120,onChange:e=>i(e.target.value),"aria-label":`Title`,className:`min-h-11 w-full rounded-md border border-border bg-background px-3 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-primary md:min-h-9`}),s&&(0,F.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:s})]})})}function L({projectName:e,design:t,onClose:n}){let[r,i]=(0,P.useState)(``),[a,o]=(0,P.useState)(!1),[s,c]=(0,P.useState)(null),l=r.trim()===t.slug,d=async()=>{if(!(!l||a)){o(!0),c(null);try{await C(e,t.slug);let r=p.getState();for(let n of Object.values(r.panels))for(let i of n.tabs)i.type===`design`&&i.metadata?.designSlug===t.slug&&(i.projectId??i.metadata?.projectName)===e&&r.closeTab(i.id,n.id);E(e),n()}catch(e){c(e.message||`Could not delete the design`),o(!1)}}};return(0,F.jsx)(M,{open:!0,onClose:()=>{a||n()},title:`Delete “${t.title}”?`,description:`This deletes designs/${t.slug}/ and its version history. It cannot be undone.`,footer:(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(_,{variant:`outline`,onClick:n,disabled:a,children:`Cancel`}),(0,F.jsxs)(_,{variant:`destructive`,onClick:d,disabled:!l||a,children:[a&&(0,F.jsx)(u,{className:`size-4 animate-spin`}),` Delete`]})]}),children:(0,F.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),d()},className:`flex flex-col gap-2`,children:[(0,F.jsxs)(`label`,{className:`text-xs text-text-secondary`,children:[`Type `,(0,F.jsx)(`span`,{className:`font-mono font-semibold`,children:t.slug}),` to confirm`,(0,F.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),autoComplete:`off`,spellCheck:!1,className:`mt-1 min-h-11 w-full rounded-md border border-border bg-background px-3 font-mono text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-destructive md:min-h-9`})]}),s&&(0,F.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:s})]})})}function R({projectName:e,system:t,onNavigate:n}){let[i,o]=(0,P.useState)(null),[s,c]=(0,P.useState)(!1);(0,P.useEffect)(()=>{let n=!1;if(t.builtFrom)return j(e,t.id).then(e=>{n||o(e)}).catch(()=>{}),()=>{n=!0}},[e,t.id,t.builtFrom?.commit]);let l=async()=>{if(!s){c(!0);try{let r=await A(e,t.id);D({projectName:e,slug:r.slug,title:r.title}),n?.()}catch(e){f.error(`Could not open the showcase`,{description:e.message})}finally{c(!1)}}};return(0,F.jsxs)(`button`,{type:`button`,onClick:()=>void l(),disabled:s,className:`flex w-full min-h-11 select-none items-center gap-2 rounded-md px-2 py-1.5 text-left hover:bg-surface-elevated disabled:opacity-60 md:min-h-9`,children:[s?(0,F.jsx)(u,{className:`size-4 shrink-0 animate-spin text-text-subtle`}):t.platform===`mobile`?(0,F.jsx)(r,{className:`size-4 shrink-0 text-text-subtle`}):(0,F.jsx)(a,{className:`size-4 shrink-0 text-text-subtle`}),(0,F.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,F.jsx)(`span`,{className:`block truncate text-sm text-text-secondary`,children:t.label}),(0,F.jsx)(`span`,{className:`block truncate text-xs text-text-subtle`,children:N(t,i)})]})]})}function z({projectName:e,systems:t,onNavigate:n}){return t.length===0?null:(0,F.jsxs)(`div`,{className:`mt-2 border-t border-border pt-2`,children:[(0,F.jsx)(`p`,{className:`px-2 pb-1 text-xs font-semibold uppercase tracking-wide text-text-subtle`,children:`Design systems`}),t.map(t=>(0,F.jsx)(R,{projectName:e,system:t,onNavigate:n},t.id))]})}var B=`flex size-11 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground md:size-7`;function V(e){return e.designs.filter(e=>!e.showcaseFor)}function H({onNavigate:e}){let t=m(e=>e.activeProject?.name??``),[n,r]=(0,P.useState)(null),[f,p]=(0,P.useState)(null),[_,C]=(0,P.useState)(null),[T,E]=(0,P.useState)(null),A=(0,P.useCallback)(()=>{t&&w(t).then(e=>{r(e),p(null)}).catch(e=>p(e.message||`Could not load designs`))},[t]);(0,P.useEffect)(()=>{r(null),A();let e=null,n=()=>{e&&clearTimeout(e),e=setTimeout(A,500)},i=e=>{let r=e.detail,i=r.path??``,a=/^designs\/[^/]+(\/(design\.json|index\.html))?$/.test(i),o=/^designs\/systems\/[^/]+(\/.*)?$/.test(i);r?.projectName===t&&(a||o)&&n()},a=e=>{e.detail?.projectName===t&&A()};return window.addEventListener(`file:changed`,i),window.addEventListener(k,a),()=>{e&&clearTimeout(e),window.removeEventListener(`file:changed`,i),window.removeEventListener(k,a)}},[t,A]);let j=n=>{D({projectName:t,slug:n.slug,title:n.title}),e?.()};return t?(0,F.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,F.jsxs)(`div`,{className:`flex h-9 shrink-0 items-center justify-between border-b border-border px-2`,children:[(0,F.jsx)(`span`,{className:`text-xs font-semibold uppercase tracking-wide text-text-secondary`,children:`Designs`}),(0,F.jsxs)(`span`,{className:`flex items-center gap-0.5`,children:[(0,F.jsx)(`button`,{type:`button`,onClick:()=>{g(`design`),e?.()},"aria-label":`Design settings`,title:`Design settings`,className:B,children:(0,F.jsx)(i,{className:`size-4`})}),(0,F.jsx)(`button`,{type:`button`,onClick:()=>{O(t),e?.()},"aria-label":`New design`,title:`New design`,className:B,children:(0,F.jsx)(s,{className:`size-4`})})]})]}),(0,F.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-1`,children:[f?(0,F.jsx)(`p`,{className:`px-2 py-3 text-xs text-destructive`,children:f}):n===null?(0,F.jsx)(`div`,{className:`flex justify-center py-6`,children:(0,F.jsx)(u,{className:`size-4 animate-spin text-primary`})}):V(n).length===0?(0,F.jsxs)(`div`,{className:`flex flex-col items-center gap-2 px-3 py-6 text-center text-xs text-text-subtle`,children:[(0,F.jsx)(a,{className:`size-6`}),`No designs yet. Start one and describe what you want; the AI builds it beside a live preview.`,(0,F.jsx)(`button`,{type:`button`,onClick:()=>O(t),className:`min-h-11 px-3 text-sm text-primary underline`,children:`New design`})]}):V(n).map(e=>(0,F.jsxs)(x,{children:[(0,F.jsx)(S,{asChild:!0,children:(0,F.jsxs)(`button`,{type:`button`,onClick:()=>j(e),className:`flex w-full min-h-11 select-none items-center gap-2 rounded-md px-2 py-1.5 text-left hover:bg-surface-elevated md:min-h-9`,children:[(0,F.jsx)(e.kind===`slides`?l:d,{className:`size-4 shrink-0 text-text-subtle`}),(0,F.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,F.jsx)(`span`,{className:`block truncate text-sm text-text-secondary`,children:e.title}),(0,F.jsx)(`span`,{className:`block truncate text-xs text-text-subtle`,children:h(e.updatedAt)})]})]})}),(0,F.jsxs)(v,{children:[(0,F.jsxs)(b,{onClick:()=>j(e),children:[(0,F.jsx)(a,{className:`size-4`}),` Open`]}),(0,F.jsxs)(b,{onClick:()=>C(e),children:[(0,F.jsx)(c,{className:`size-4`}),` Rename`]}),(0,F.jsx)(y,{}),(0,F.jsxs)(b,{variant:`destructive`,onClick:()=>E(e),children:[(0,F.jsx)(o,{className:`size-4`}),` Delete`]})]})]},e.slug)),n&&(0,F.jsx)(z,{projectName:t,systems:n.systems,onNavigate:e})]}),_&&(0,F.jsx)(I,{projectName:t,design:_,onClose:()=>C(null)}),T&&(0,F.jsx)(L,{projectName:t,design:T,onClose:()=>E(null)})]}):(0,F.jsx)(`p`,{className:`p-4 text-center text-xs text-text-subtle`,children:`Select a project to see its designs`})}export{H as DesignsSidebarPanel};
@@ -1,4 +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"./vendor-ui-BTSIXzhZ.js";import{Ot as r,ei as i,r as a,si as ee,xn as o,xt as te}from"./icons-BwyIKaTT.js";import{a as s,o as c,r as l}from"./api-client-xQDlhUTu.js";import{t as u}from"./settings-store-B4mLp19V.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./git-repo-store-CKB5fdNP.js";import{t as d}from"./button-C9ZXWb3b.js";import{J as ne,X as f,hi as p,ii as re,oi as ie}from"./index-DLB3j_P0.js";import{t as ae}from"./use-monaco-theme-BiDXRJ4e.js";import{n as oe,t as se}from"./editor-font-CdxKRKX-.js";import{t as m}from"./use-inline-blame-CRWJU6Rq.js";import{n as h,r as ce}from"./monaco-dotenv-language-IZxwhtNA.js";import{n as g,o as _}from"./can-open-in-ppm-CwrBTXOy.js";import{r as v}from"./image-preview-geometry-CCq8rio7.js";var y=e(t(),1),b=n();function x(e){return g.has(_(e))}function S(e){return/^[0-9a-f]{40}$/i.test(e)?e.slice(0,7):e}function C({mode:e,onChange:t}){return(0,b.jsxs)(`select`,{value:e,onChange:e=>t(e.target.value),title:`Show this file as an image or as text`,"aria-label":`Reopen editor with`,className:`h-11 rounded border border-border bg-transparent px-1 text-xs text-foreground outline-none md:h-6`,children:[(0,b.jsx)(`option`,{value:`preview`,children:`Image Preview`}),(0,b.jsx)(`option`,{value:`text`,children:`Text Editor`})]})}function le({filePath:e,mode:t,original:n,modified:r,onOpenAnyway:i}){if(t===`text`||!x(e))return(0,b.jsx)(w,{onOpenAnyway:i});let a=[n,r].filter(e=>e.url!==null);if(a.length<2){let e=a[0];return e?(0,b.jsx)(T,{side:e}):(0,b.jsx)(w,{onOpenAnyway:i})}return(0,b.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col md:flex-row`,children:[(0,b.jsx)(T,{side:a[0]}),(0,b.jsx)(`div`,{className:`shrink-0 border-b border-border md:border-b-0 md:border-r`}),(0,b.jsx)(T,{side:a[1]})]})}function w({onOpenAnyway:e}){return(0,b.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-4 p-6 text-center`,children:[(0,b.jsx)(a,{className:`size-10 text-warning`}),(0,b.jsx)(`p`,{className:`max-w-md text-sm leading-relaxed text-text-secondary`,children:`The file is not displayed in the text editor because it is either binary or uses an unsupported text encoding.`}),(0,b.jsx)(d,{onClick:e,className:`mt-auto h-11 w-full max-w-xs md:mt-0 md:w-auto md:px-5`,children:`Open Anyway`})]})}function T({side:e}){return(0,b.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,b.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-border px-3 py-1.5`,children:[(0,b.jsx)(`span`,{className:`truncate text-xs font-medium text-text-secondary`,children:e.label}),e.size!==null&&(0,b.jsx)(`span`,{className:`shrink-0 text-xs text-text-subtle`,children:v(e.size)})]}),(0,b.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center overflow-auto bg-surface p-4`,children:(0,b.jsx)(E,{url:e.url})})]})}function E({url:e}){let{blobUrl:t,failed:n}=D(e);return n?(0,b.jsxs)(`div`,{className:`flex flex-col items-center gap-2 text-text-subtle`,children:[(0,b.jsx)(r,{className:`size-8`}),(0,b.jsx)(`p`,{className:`text-xs`,children:`Failed to load.`})]}):t?(0,b.jsx)(`img`,{src:t,alt:``,className:`max-h-full max-w-full object-contain`}):(0,b.jsx)(o,{className:`size-5 animate-spin text-text-subtle`})}function D(e){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(!1),a=(0,y.useRef)(null);return(0,y.useEffect)(()=>{let t=!1;i(!1);let r=s();return fetch(e,{headers:r?{Authorization:`Bearer ${r}`}:{}}).then(e=>{if(!e.ok)throw Error(String(e.status));return e.blob()}).then(e=>{if(t)return;let r=URL.createObjectURL(e);a.current&&URL.revokeObjectURL(a.current),a.current=r,n(r)}).catch(()=>{t||i(!0)}),()=>{t=!0}},[e]),(0,y.useEffect)(()=>()=>{a.current&&URL.revokeObjectURL(a.current)},[]),{blobUrl:t,failed:r}}function ue({onMount:e,...t}){let n=(0,y.useRef)(null);return(0,y.useLayoutEffect)(()=>()=>{let e=n.current;if(!e)return;let t=e.getModel();e.setModel(null),t?.original.dispose(),t?.modified.dispose()},[]),(0,b.jsx)(f,{...t,onMount:(t,r)=>{n.current=t,e?.(t,r)}})}function de(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`}[e.split(`.`).pop()?.toLowerCase()??``]??(h(e)?`dotenv`:`plaintext`)}function O({metadata:e}){let t=e?.filePath,n=e?.projectName,r=e?.ref1,a=e?.ref2,s=e?.file1,d=e?.file2,f=e?.original,h=e?.modified,g=f!=null||h!=null,_=!!(s&&d),[v,w]=(0,y.useState)(null),[T,E]=(0,y.useState)(null),[D,O]=(0,y.useState)(null),[k,A]=(0,y.useState)(`preview`),[j,M]=(0,y.useState)(!1),N=e=>{A(e),e===`preview`&&M(!1)},[P,F]=(0,y.useState)(!g),[I,L]=(0,y.useState)(null),{wordWrap:pe,toggleWordWrap:R,mobileWordWrap:z,toggleMobileWordWrap:me}=u(ie(e=>({wordWrap:e.wordWrap,toggleWordWrap:e.toggleWordWrap,mobileWordWrap:e.mobileWordWrap,toggleMobileWordWrap:e.toggleMobileWordWrap}))),he=ae(),B=re(n),V=(0,y.useRef)(null),H=(0,y.useRef)(null),[ge,_e]=(0,y.useState)(!1),[U,ve]=(0,y.useState)(null),[W,G]=(0,y.useState)(`modified`),[K,ye]=(0,y.useState)();(0,y.useEffect)(()=>{let e=V.current;if(!e)return;let t=new ResizeObserver(([e])=>{e&&ye(Math.floor(e.contentRect.height))});return t.observe(e),()=>t.disconnect()},[P,I]),(0,y.useEffect)(()=>p(V.current,()=>H.current?.layout()),[P,I]),(0,y.useEffect)(()=>{if(g||!n)return;if(F(!0),L(null),O(null),E(null),w(null),s&&d){let e=new URLSearchParams({file1:s,file2:d});l.get(`${c(n)}/files/compare?${e}`).then(e=>{E(e),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to compare files`),F(!1)});return}if(t){let e=B.fileScope(t);if(e===void 0)return;if(e===null){F(!1);return}let n=new URLSearchParams({file:e.path});r&&n.set(`ref`,r),a&&n.set(`ref2`,a),j&&n.set(`text`,`1`),l.get(B.fileGitUrl(`/file-full-diff?${n}`,e.repo)).then(e=>{O(e),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to load diff`),F(!1)});return}let e;if(r||a){let t=new URLSearchParams;r&&t.set(`ref1`,r),a&&t.set(`ref2`,a),e=B.gitUrl(`/diff?${t}`)}else e=B.gitUrl(`/diff`);l.get(e).then(e=>{w(e.diff),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to load diff`),F(!1)})},[t,n,r,a,s,d,g,B,j]),(0,y.useEffect)(()=>{M(!1),A(`preview`)},[t,r,a]);let{original:q,modified:J}=(0,y.useMemo)(()=>g?{original:f??``,modified:h??``}:_&&T?T:D||(v?fe(v):{original:``,modified:``}),[v,g,f,h,_,T,D]),be=(0,y.useMemo)(()=>{let e=t??d??s;return e?de(e):`plaintext`},[t,s,d]),Y=u(e=>e.inlineBlame),xe=u(e=>e.toggleInlineBlame),X=typeof window<`u`&&window.innerWidth<768,Z=X?z:pe,Se=X?me:R,Q=!!(n&&t&&D)&&!X;m({editor:U?.original??null,monaco:U?.monaco??null,projectName:n,filePath:Q?t:void 0,rev:r||`HEAD`,enabled:Y&&Q&&W===`original`,readOnly:!0}),m({editor:U?.modified??null,monaco:U?.monaco??null,projectName:n,filePath:Q?t:void 0,rev:a,enabled:Y&&Q&&W===`modified`,readOnly:!0});let $=!X;if((0,y.useEffect)(()=>{let e=H.current;if(!e)return;let t=Z?`on`:`off`;e.updateOptions({diffWordWrap:t}),e.getOriginalEditor().updateOptions({wordWrapOverride2:$?t:`off`}),e.getModifiedEditor().updateOptions({wordWrapOverride2:t})},[Z,ge,$]),!n&&!g)return(0,b.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`No project selected.`});if(P)return(0,b.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,b.jsx)(o,{className:`size-5 animate-spin`}),(0,b.jsx)(`span`,{className:`text-sm`,children:`Loading diff...`})]});if(I)return(0,b.jsx)(`div`,{className:`flex items-center justify-center h-full text-destructive text-sm`,children:I});if(D?.binary&&!j&&t&&n){let e=B.fileScope(t),i=t=>e==null?null:B.fileGitUrl(`/file-blob?file=${encodeURIComponent(e.path)}&ref=${encodeURIComponent(t)}`,e.repo);return(0,b.jsxs)(`div`,{className:`flex flex-col h-full`,children:[x(t)&&(0,b.jsx)(`div`,{className:`flex items-center justify-end gap-0.5 px-2 py-0.5 border-b border-border shrink-0`,children:(0,b.jsx)(C,{mode:k,onChange:N})}),(0,b.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,b.jsx)(le,{filePath:t,mode:k,original:{url:D.originalSize===null?null:i(r||`HEAD`),label:S(r||`HEAD`),size:D.originalSize},modified:{url:D.modifiedSize===null?null:a?i(a):`${c(n)}/files/raw?path=${encodeURIComponent(t)}`,label:a?S(a):`Working Tree`,size:D.modifiedSize},onOpenAnyway:()=>M(!0)})})]})}return!g&&!_&&!D&&!q&&!J?(0,b.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,b.jsx)(te,{className:`size-8`}),(0,b.jsx)(`p`,{className:`text-sm`,children:`No content changes`}),t&&(0,b.jsx)(`p`,{className:`text-xs font-mono`,children:t})]}):(0,b.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,b.jsxs)(`div`,{className:`flex items-center justify-end gap-0.5 px-2 py-0.5 border-b border-border shrink-0`,children:[D?.binary&&t&&x(t)&&(0,b.jsx)(C,{mode:`text`,onChange:N}),Q&&(0,b.jsx)(`button`,{type:`button`,onClick:xe,title:`Inline blame (Alt+B) — who last touched the cursor's line. Click a pane to annotate that side.`,className:`flex items-center justify-center rounded hover:bg-muted active:scale-95 transition-colors p-1 ${Y?`bg-muted text-foreground`:``}`,children:(0,b.jsx)(i,{className:`size-3.5`})}),(0,b.jsx)(`button`,{type:`button`,onClick:Se,title:Z?`Wrapping long lines — tap to scroll sideways instead`:`Toggle word wrap`,className:`flex items-center justify-center rounded hover:bg-muted active:scale-95 transition-colors ${X?`size-11`:`p-1`} ${Z?`bg-muted text-foreground`:``}`,children:(0,b.jsx)(ee,{className:`size-3.5`})})]}),(0,b.jsx)(`div`,{ref:V,className:`flex-1 overflow-hidden`,children:K&&K>0?(0,b.jsx)(ue,{height:K,language:be,beforeMount:e=>{ne(e),ce(e)},original:q,modified:J,theme:he,onMount:(e,t)=>{H.current=e,_e(!0);let n=e.getOriginalEditor(),r=e.getModifiedEditor();ve({monaco:t,original:n,modified:r}),n.onDidFocusEditorText(()=>G(`original`)),r.onDidFocusEditorText(()=>G(`modified`)),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyB,()=>u.getState().toggleInlineBlame())},options:{fontSize:X?11:14,fontFamily:se,fontLigatures:oe,diffWordWrap:Z?`on`:`off`,renderSideBySide:$,useInlineViewWhenSpaceIsLimited:!1,readOnly:!0,automaticLayout:!0,scrollBeyondLastLine:!1},loading:(0,b.jsx)(o,{className:`size-5 animate-spin text-muted-foreground`})}):(0,b.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,b.jsx)(o,{className:`size-5 animate-spin text-muted-foreground`})})})]})}function fe(e){let t=e.split(`
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{Ot as r,ei as i,r as a,si as ee,xn as o,xt as te}from"./icons-BwyIKaTT.js";import{a as s,o as c,r as l}from"./api-client-xQDlhUTu.js";import{t as u}from"./settings-store-B4mLp19V.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./git-repo-store-CKB5fdNP.js";import{t as d}from"./button-C9ZXWb3b.js";import{J as ne,X as f,hi as p,ii as re,oi as ie}from"./index-COwBji1t.js";import{t as ae}from"./use-monaco-theme-1ANtPWqA.js";import{n as oe,t as se}from"./editor-font-CdxKRKX-.js";import{t as m}from"./use-inline-blame-BUuJj1Ru.js";import{n as h,r as ce}from"./monaco-dotenv-language-IZxwhtNA.js";import{n as g,o as _}from"./can-open-in-ppm-CwrBTXOy.js";import{r as v}from"./image-preview-geometry-CCq8rio7.js";var y=e(t(),1),b=n();function x(e){return g.has(_(e))}function S(e){return/^[0-9a-f]{40}$/i.test(e)?e.slice(0,7):e}function C({mode:e,onChange:t}){return(0,b.jsxs)(`select`,{value:e,onChange:e=>t(e.target.value),title:`Show this file as an image or as text`,"aria-label":`Reopen editor with`,className:`h-11 rounded border border-border bg-transparent px-1 text-xs text-foreground outline-none md:h-6`,children:[(0,b.jsx)(`option`,{value:`preview`,children:`Image Preview`}),(0,b.jsx)(`option`,{value:`text`,children:`Text Editor`})]})}function le({filePath:e,mode:t,original:n,modified:r,onOpenAnyway:i}){if(t===`text`||!x(e))return(0,b.jsx)(w,{onOpenAnyway:i});let a=[n,r].filter(e=>e.url!==null);if(a.length<2){let e=a[0];return e?(0,b.jsx)(T,{side:e}):(0,b.jsx)(w,{onOpenAnyway:i})}return(0,b.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col md:flex-row`,children:[(0,b.jsx)(T,{side:a[0]}),(0,b.jsx)(`div`,{className:`shrink-0 border-b border-border md:border-b-0 md:border-r`}),(0,b.jsx)(T,{side:a[1]})]})}function w({onOpenAnyway:e}){return(0,b.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-4 p-6 text-center`,children:[(0,b.jsx)(a,{className:`size-10 text-warning`}),(0,b.jsx)(`p`,{className:`max-w-md text-sm leading-relaxed text-text-secondary`,children:`The file is not displayed in the text editor because it is either binary or uses an unsupported text encoding.`}),(0,b.jsx)(d,{onClick:e,className:`mt-auto h-11 w-full max-w-xs md:mt-0 md:w-auto md:px-5`,children:`Open Anyway`})]})}function T({side:e}){return(0,b.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[(0,b.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-border px-3 py-1.5`,children:[(0,b.jsx)(`span`,{className:`truncate text-xs font-medium text-text-secondary`,children:e.label}),e.size!==null&&(0,b.jsx)(`span`,{className:`shrink-0 text-xs text-text-subtle`,children:v(e.size)})]}),(0,b.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center overflow-auto bg-surface p-4`,children:(0,b.jsx)(E,{url:e.url})})]})}function E({url:e}){let{blobUrl:t,failed:n}=D(e);return n?(0,b.jsxs)(`div`,{className:`flex flex-col items-center gap-2 text-text-subtle`,children:[(0,b.jsx)(r,{className:`size-8`}),(0,b.jsx)(`p`,{className:`text-xs`,children:`Failed to load.`})]}):t?(0,b.jsx)(`img`,{src:t,alt:``,className:`max-h-full max-w-full object-contain`}):(0,b.jsx)(o,{className:`size-5 animate-spin text-text-subtle`})}function D(e){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(!1),a=(0,y.useRef)(null);return(0,y.useEffect)(()=>{let t=!1;i(!1);let r=s();return fetch(e,{headers:r?{Authorization:`Bearer ${r}`}:{}}).then(e=>{if(!e.ok)throw Error(String(e.status));return e.blob()}).then(e=>{if(t)return;let r=URL.createObjectURL(e);a.current&&URL.revokeObjectURL(a.current),a.current=r,n(r)}).catch(()=>{t||i(!0)}),()=>{t=!0}},[e]),(0,y.useEffect)(()=>()=>{a.current&&URL.revokeObjectURL(a.current)},[]),{blobUrl:t,failed:r}}function ue({onMount:e,...t}){let n=(0,y.useRef)(null);return(0,y.useLayoutEffect)(()=>()=>{let e=n.current;if(!e)return;let t=e.getModel();e.setModel(null),t?.original.dispose(),t?.modified.dispose()},[]),(0,b.jsx)(f,{...t,onMount:(t,r)=>{n.current=t,e?.(t,r)}})}function de(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`}[e.split(`.`).pop()?.toLowerCase()??``]??(h(e)?`dotenv`:`plaintext`)}function O({metadata:e}){let t=e?.filePath,n=e?.projectName,r=e?.ref1,a=e?.ref2,s=e?.file1,d=e?.file2,f=e?.original,h=e?.modified,g=f!=null||h!=null,_=!!(s&&d),[v,w]=(0,y.useState)(null),[T,E]=(0,y.useState)(null),[D,O]=(0,y.useState)(null),[k,A]=(0,y.useState)(`preview`),[j,M]=(0,y.useState)(!1),N=e=>{A(e),e===`preview`&&M(!1)},[P,F]=(0,y.useState)(!g),[I,L]=(0,y.useState)(null),{wordWrap:pe,toggleWordWrap:R,mobileWordWrap:z,toggleMobileWordWrap:me}=u(ie(e=>({wordWrap:e.wordWrap,toggleWordWrap:e.toggleWordWrap,mobileWordWrap:e.mobileWordWrap,toggleMobileWordWrap:e.toggleMobileWordWrap}))),he=ae(),B=re(n),V=(0,y.useRef)(null),H=(0,y.useRef)(null),[ge,_e]=(0,y.useState)(!1),[U,ve]=(0,y.useState)(null),[W,G]=(0,y.useState)(`modified`),[K,ye]=(0,y.useState)();(0,y.useEffect)(()=>{let e=V.current;if(!e)return;let t=new ResizeObserver(([e])=>{e&&ye(Math.floor(e.contentRect.height))});return t.observe(e),()=>t.disconnect()},[P,I]),(0,y.useEffect)(()=>p(V.current,()=>H.current?.layout()),[P,I]),(0,y.useEffect)(()=>{if(g||!n)return;if(F(!0),L(null),O(null),E(null),w(null),s&&d){let e=new URLSearchParams({file1:s,file2:d});l.get(`${c(n)}/files/compare?${e}`).then(e=>{E(e),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to compare files`),F(!1)});return}if(t){let e=B.fileScope(t);if(e===void 0)return;if(e===null){F(!1);return}let n=new URLSearchParams({file:e.path});r&&n.set(`ref`,r),a&&n.set(`ref2`,a),j&&n.set(`text`,`1`),l.get(B.fileGitUrl(`/file-full-diff?${n}`,e.repo)).then(e=>{O(e),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to load diff`),F(!1)});return}let e;if(r||a){let t=new URLSearchParams;r&&t.set(`ref1`,r),a&&t.set(`ref2`,a),e=B.gitUrl(`/diff?${t}`)}else e=B.gitUrl(`/diff`);l.get(e).then(e=>{w(e.diff),F(!1)}).catch(e=>{L(e instanceof Error?e.message:`Failed to load diff`),F(!1)})},[t,n,r,a,s,d,g,B,j]),(0,y.useEffect)(()=>{M(!1),A(`preview`)},[t,r,a]);let{original:q,modified:J}=(0,y.useMemo)(()=>g?{original:f??``,modified:h??``}:_&&T?T:D||(v?fe(v):{original:``,modified:``}),[v,g,f,h,_,T,D]),be=(0,y.useMemo)(()=>{let e=t??d??s;return e?de(e):`plaintext`},[t,s,d]),Y=u(e=>e.inlineBlame),xe=u(e=>e.toggleInlineBlame),X=typeof window<`u`&&window.innerWidth<768,Z=X?z:pe,Se=X?me:R,Q=!!(n&&t&&D)&&!X;m({editor:U?.original??null,monaco:U?.monaco??null,projectName:n,filePath:Q?t:void 0,rev:r||`HEAD`,enabled:Y&&Q&&W===`original`,readOnly:!0}),m({editor:U?.modified??null,monaco:U?.monaco??null,projectName:n,filePath:Q?t:void 0,rev:a,enabled:Y&&Q&&W===`modified`,readOnly:!0});let $=!X;if((0,y.useEffect)(()=>{let e=H.current;if(!e)return;let t=Z?`on`:`off`;e.updateOptions({diffWordWrap:t}),e.getOriginalEditor().updateOptions({wordWrapOverride2:$?t:`off`}),e.getModifiedEditor().updateOptions({wordWrapOverride2:t})},[Z,ge,$]),!n&&!g)return(0,b.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`No project selected.`});if(P)return(0,b.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,b.jsx)(o,{className:`size-5 animate-spin`}),(0,b.jsx)(`span`,{className:`text-sm`,children:`Loading diff...`})]});if(I)return(0,b.jsx)(`div`,{className:`flex items-center justify-center h-full text-destructive text-sm`,children:I});if(D?.binary&&!j&&t&&n){let e=B.fileScope(t),i=t=>e==null?null:B.fileGitUrl(`/file-blob?file=${encodeURIComponent(e.path)}&ref=${encodeURIComponent(t)}`,e.repo);return(0,b.jsxs)(`div`,{className:`flex flex-col h-full`,children:[x(t)&&(0,b.jsx)(`div`,{className:`flex items-center justify-end gap-0.5 px-2 py-0.5 border-b border-border shrink-0`,children:(0,b.jsx)(C,{mode:k,onChange:N})}),(0,b.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,b.jsx)(le,{filePath:t,mode:k,original:{url:D.originalSize===null?null:i(r||`HEAD`),label:S(r||`HEAD`),size:D.originalSize},modified:{url:D.modifiedSize===null?null:a?i(a):`${c(n)}/files/raw?path=${encodeURIComponent(t)}`,label:a?S(a):`Working Tree`,size:D.modifiedSize},onOpenAnyway:()=>M(!0)})})]})}return!g&&!_&&!D&&!q&&!J?(0,b.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,b.jsx)(te,{className:`size-8`}),(0,b.jsx)(`p`,{className:`text-sm`,children:`No content changes`}),t&&(0,b.jsx)(`p`,{className:`text-xs font-mono`,children:t})]}):(0,b.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,b.jsxs)(`div`,{className:`flex items-center justify-end gap-0.5 px-2 py-0.5 border-b border-border shrink-0`,children:[D?.binary&&t&&x(t)&&(0,b.jsx)(C,{mode:`text`,onChange:N}),Q&&(0,b.jsx)(`button`,{type:`button`,onClick:xe,title:`Inline blame (Alt+B) — who last touched the cursor's line. Click a pane to annotate that side.`,className:`flex items-center justify-center rounded hover:bg-muted active:scale-95 transition-colors p-1 ${Y?`bg-muted text-foreground`:``}`,children:(0,b.jsx)(i,{className:`size-3.5`})}),(0,b.jsx)(`button`,{type:`button`,onClick:Se,title:Z?`Wrapping long lines — tap to scroll sideways instead`:`Toggle word wrap`,className:`flex items-center justify-center rounded hover:bg-muted active:scale-95 transition-colors ${X?`size-11`:`p-1`} ${Z?`bg-muted text-foreground`:``}`,children:(0,b.jsx)(ee,{className:`size-3.5`})})]}),(0,b.jsx)(`div`,{ref:V,className:`flex-1 overflow-hidden`,children:K&&K>0?(0,b.jsx)(ue,{height:K,language:be,beforeMount:e=>{ne(e),ce(e)},original:q,modified:J,theme:he,onMount:(e,t)=>{H.current=e,_e(!0);let n=e.getOriginalEditor(),r=e.getModifiedEditor();ve({monaco:t,original:n,modified:r}),n.onDidFocusEditorText(()=>G(`original`)),r.onDidFocusEditorText(()=>G(`modified`)),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyB,()=>u.getState().toggleInlineBlame())},options:{fontSize:X?11:14,fontFamily:se,fontLigatures:oe,diffWordWrap:Z?`on`:`off`,renderSideBySide:$,useInlineViewWhenSpaceIsLimited:!1,readOnly:!0,automaticLayout:!0,scrollBeyondLastLine:!1},loading:(0,b.jsx)(o,{className:`size-5 animate-spin text-muted-foreground`})}):(0,b.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,b.jsx)(o,{className:`size-5 animate-spin text-muted-foreground`})})})]})}function fe(e){let t=e.split(`
2
2
  `),n=[],r=[],i=!1;for(let e of t)if(!(e.startsWith(`diff --git`)||e.startsWith(`diff --no-index`)||e.startsWith(`index `)||e.startsWith(`new file`)||e.startsWith(`deleted file`)||e.startsWith(`old mode`)||e.startsWith(`new mode`)||e.startsWith(`---`)||e.startsWith(`+++`)||e.startsWith(`Binary files`)||e.startsWith(`\\ No newline`))){if(e.startsWith(`@@`)){i=!0;continue}if(i)if(e.startsWith(`-`))n.push(e.slice(1));else if(e.startsWith(`+`))r.push(e.slice(1));else{let t=e.startsWith(` `)?e.slice(1):e;n.push(t),r.push(t)}}return{original:n.join(`
3
3
  `),modified:r.join(`
4
4
  `)}}export{O as DiffViewer};