@hienlh/ppm 0.23.17 → 0.23.18

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 (434) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/assets/skills/ppm/SKILL.md +1 -1
  3. package/assets/skills/ppm/references/http-api.md +1 -1
  4. package/dist/web/assets/{accounts-settings-section-BqsI4Ixj.js → accounts-settings-section-BES4EFGQ.js} +1 -1
  5. package/dist/web/assets/accounts-settings-section-BES4EFGQ.js.br +0 -0
  6. package/dist/web/assets/accounts-settings-section-BES4EFGQ.js.gz +0 -0
  7. package/dist/web/assets/{agent-session-sheet-BmoNB8BG.js → agent-session-sheet-BlZmcb40.js} +2 -2
  8. package/dist/web/assets/agent-session-sheet-BlZmcb40.js.br +0 -0
  9. package/dist/web/assets/agent-session-sheet-BlZmcb40.js.gz +0 -0
  10. package/dist/web/assets/{agent-session-window-content-rlCrYBYv.js → agent-session-window-content-zCzFZ0XT.js} +1 -1
  11. package/dist/web/assets/agent-session-window-content-zCzFZ0XT.js.br +0 -0
  12. package/dist/web/assets/agent-session-window-content-zCzFZ0XT.js.gz +0 -0
  13. package/dist/web/assets/{ai-resource-editor-CUOR9Xtf.js → ai-resource-editor-Dh8sQhL2.js} +1 -1
  14. package/dist/web/assets/ai-resource-editor-Dh8sQhL2.js.br +0 -0
  15. package/dist/web/assets/ai-resource-editor-Dh8sQhL2.js.gz +0 -0
  16. package/dist/web/assets/{ai-settings-section-CNdbcCaI.js → ai-settings-section-C6NKrktb.js} +1 -1
  17. package/dist/web/assets/ai-settings-section-C6NKrktb.js.br +0 -0
  18. package/dist/web/assets/ai-settings-section-C6NKrktb.js.gz +0 -0
  19. package/dist/web/assets/{ai-settings-section-aXXTb0dN.js → ai-settings-section-Ck_0ArV1.js} +1 -1
  20. package/dist/web/assets/{android-tab-BsuTMKJw.js → android-tab-BLxZKtMP.js} +1 -1
  21. package/dist/web/assets/android-tab-BLxZKtMP.js.br +0 -0
  22. package/dist/web/assets/android-tab-BLxZKtMP.js.gz +0 -0
  23. package/dist/web/assets/{appearance-settings-section-Dk6d_fTo.js → appearance-settings-section-DFJdBUZ8.js} +1 -1
  24. package/dist/web/assets/appearance-settings-section-DFJdBUZ8.js.br +0 -0
  25. package/dist/web/assets/appearance-settings-section-DFJdBUZ8.js.gz +0 -0
  26. package/dist/web/assets/{apps-panel-C20ys4Cy.js → apps-panel-C2dyMFVy.js} +1 -1
  27. package/dist/web/assets/apps-panel-C2dyMFVy.js.br +0 -0
  28. package/dist/web/assets/apps-panel-C2dyMFVy.js.gz +0 -0
  29. package/dist/web/assets/{branch-review-tab-CcvkQMRA.js → branch-review-tab-BIpjOgOQ.js} +1 -1
  30. package/dist/web/assets/branch-review-tab-BIpjOgOQ.js.br +0 -0
  31. package/dist/web/assets/branch-review-tab-BIpjOgOQ.js.gz +0 -0
  32. package/dist/web/assets/{chat-tab-BAh37UwG.js → chat-tab-CADhIdsz.js} +1 -1
  33. package/dist/web/assets/chat-tab-CADhIdsz.js.br +2 -0
  34. package/dist/web/assets/chat-tab-CADhIdsz.js.gz +0 -0
  35. package/dist/web/assets/{chat-tab-D-cl4yMo.js → chat-tab-WbP7BIUp.js} +3 -3
  36. package/dist/web/assets/chat-tab-WbP7BIUp.js.br +0 -0
  37. package/dist/web/assets/chat-tab-WbP7BIUp.js.gz +0 -0
  38. package/dist/web/assets/{code-editor-DIGsPNPS.js → code-editor-BEjBAz0q.js} +4 -4
  39. package/dist/web/assets/code-editor-BEjBAz0q.js.br +0 -0
  40. package/dist/web/assets/code-editor-BEjBAz0q.js.gz +0 -0
  41. package/dist/web/assets/{codex-reset-credit-button-C0a2svAw.js → codex-reset-credit-button-Qths4oQl.js} +1 -1
  42. package/dist/web/assets/codex-reset-credit-button-Qths4oQl.js.br +0 -0
  43. package/dist/web/assets/codex-reset-credit-button-Qths4oQl.js.gz +0 -0
  44. package/dist/web/assets/{conflict-editor-zORSNMk6.js → conflict-editor-DwFgcGGr.js} +1 -1
  45. package/dist/web/assets/conflict-editor-DwFgcGGr.js.br +0 -0
  46. package/dist/web/assets/conflict-editor-DwFgcGGr.js.gz +0 -0
  47. package/dist/web/assets/{connection-form-tab-BkE7wACA.js → connection-form-tab-DJ3Lxpzd.js} +1 -1
  48. package/dist/web/assets/connection-form-tab-DJ3Lxpzd.js.br +0 -0
  49. package/dist/web/assets/connection-form-tab-DJ3Lxpzd.js.gz +0 -0
  50. package/dist/web/assets/{csv-preview-CDUY0I94.js → csv-preview-BMF0HuuN.js} +1 -1
  51. package/dist/web/assets/csv-preview-BMF0HuuN.js.br +0 -0
  52. package/dist/web/assets/csv-preview-BMF0HuuN.js.gz +0 -0
  53. package/dist/web/assets/{db-tab-parts-tgVIgcs5.js → db-tab-parts-BbNfuvwC.js} +1 -1
  54. package/dist/web/assets/db-tab-parts-BbNfuvwC.js.br +0 -0
  55. package/dist/web/assets/db-tab-parts-BbNfuvwC.js.gz +0 -0
  56. package/dist/web/assets/{design-settings-section-CqFPwhis.js → design-settings-section-BVcBTBdz.js} +1 -1
  57. package/dist/web/assets/design-settings-section-BVcBTBdz.js.br +0 -0
  58. package/dist/web/assets/design-settings-section-BVcBTBdz.js.gz +0 -0
  59. package/dist/web/assets/{design-tab-CVTzge3p.js → design-tab-msL92Mgr.js} +1 -1
  60. package/dist/web/assets/design-tab-msL92Mgr.js.br +0 -0
  61. package/dist/web/assets/design-tab-msL92Mgr.js.gz +0 -0
  62. package/dist/web/assets/{designs-sidebar-panel-DKTSE1LS.js → designs-sidebar-panel-hLIuDsDd.js} +1 -1
  63. package/dist/web/assets/designs-sidebar-panel-hLIuDsDd.js.br +0 -0
  64. package/dist/web/assets/designs-sidebar-panel-hLIuDsDd.js.gz +0 -0
  65. package/dist/web/assets/{diff-viewer-3VDHcDag.js → diff-viewer-BLYGfIik.js} +1 -1
  66. package/dist/web/assets/diff-viewer-BLYGfIik.js.br +0 -0
  67. package/dist/web/assets/diff-viewer-BLYGfIik.js.gz +0 -0
  68. package/dist/web/assets/{docx-preview-FgE_WU6t.js → docx-preview-D0ORQkvI.js} +1 -1
  69. package/dist/web/assets/docx-preview-D0ORQkvI.js.br +0 -0
  70. package/dist/web/assets/docx-preview-D0ORQkvI.js.gz +0 -0
  71. package/dist/web/assets/{editor-dialog-BhK77FSu.js → editor-dialog-BdkAgK-M.js} +1 -1
  72. package/dist/web/assets/editor-dialog-BdkAgK-M.js.br +0 -0
  73. package/dist/web/assets/editor-dialog-BdkAgK-M.js.gz +0 -0
  74. package/dist/web/assets/{editor-language-service-BIN7M57r.js → editor-language-service-B2TYY2sw.js} +1 -1
  75. package/dist/web/assets/editor-language-service-B2TYY2sw.js.br +0 -0
  76. package/dist/web/assets/editor-language-service-B2TYY2sw.js.gz +0 -0
  77. package/dist/web/assets/{explorer-body-DNsWiVO3.js → explorer-body-B-67PDYd.js} +1 -1
  78. package/dist/web/assets/explorer-body-B-67PDYd.js.br +0 -0
  79. package/dist/web/assets/explorer-body-B-67PDYd.js.gz +0 -0
  80. package/dist/web/assets/{explorer-window-content-DnOJYhRX.js → explorer-window-content-ndGjHH-i.js} +1 -1
  81. package/dist/web/assets/explorer-window-content-ndGjHH-i.js.br +0 -0
  82. package/dist/web/assets/explorer-window-content-ndGjHH-i.js.gz +0 -0
  83. package/dist/web/assets/{extension-manager-section-CJtRpUUs.js → extension-manager-section-C3Z99hLd.js} +1 -1
  84. package/dist/web/assets/extension-manager-section-C3Z99hLd.js.br +0 -0
  85. package/dist/web/assets/extension-manager-section-C3Z99hLd.js.gz +0 -0
  86. package/dist/web/assets/{extension-webview-Bza7cPL1.js → extension-webview-oBN-quI3.js} +1 -1
  87. package/dist/web/assets/extension-webview-oBN-quI3.js.br +0 -0
  88. package/dist/web/assets/extension-webview-oBN-quI3.js.gz +0 -0
  89. package/dist/web/assets/{files-settings-section-8rWMj1Oi.js → files-settings-section-pzPZEYe2.js} +1 -1
  90. package/dist/web/assets/files-settings-section-pzPZEYe2.js.br +0 -0
  91. package/dist/web/assets/{files-settings-section-8rWMj1Oi.js.gz → files-settings-section-pzPZEYe2.js.gz} +0 -0
  92. package/dist/web/assets/{general-settings-section-joWQEgIn.js → general-settings-section-BxNNbh5b.js} +1 -1
  93. package/dist/web/assets/general-settings-section-BxNNbh5b.js.br +0 -0
  94. package/dist/web/assets/general-settings-section-BxNNbh5b.js.gz +0 -0
  95. package/dist/web/assets/{git-log-panel-BxYYWEiU.js → git-log-panel-CEAF4ST-.js} +1 -1
  96. package/dist/web/assets/git-log-panel-CEAF4ST-.js.br +0 -0
  97. package/dist/web/assets/git-log-panel-CEAF4ST-.js.gz +0 -0
  98. package/dist/web/assets/{git-review-tab-Btnvgk1e.js → git-review-tab-Cp5DYE5b.js} +1 -1
  99. package/dist/web/assets/git-review-tab-Cp5DYE5b.js.br +0 -0
  100. package/dist/web/assets/git-review-tab-Cp5DYE5b.js.gz +0 -0
  101. package/dist/web/assets/{glide-data-grid-lCwaM1Gy.js → glide-data-grid-BrwKKQhc.js} +1 -1
  102. package/dist/web/assets/glide-data-grid-BrwKKQhc.js.br +0 -0
  103. package/dist/web/assets/glide-data-grid-BrwKKQhc.js.gz +0 -0
  104. package/dist/web/assets/{grid-save-dialog-DoEEQ1vM.js → grid-save-dialog-inaY39lZ.js} +1 -1
  105. package/dist/web/assets/grid-save-dialog-inaY39lZ.js.br +0 -0
  106. package/dist/web/assets/grid-save-dialog-inaY39lZ.js.gz +0 -0
  107. package/dist/web/assets/{group-chat-tab-B7Dwx9uL.js → group-chat-tab-DpvHkXCK.js} +1 -1
  108. package/dist/web/assets/group-chat-tab-DpvHkXCK.js.br +0 -0
  109. package/dist/web/assets/group-chat-tab-DpvHkXCK.js.gz +0 -0
  110. package/dist/web/assets/{impexp-tab-BtEDbQSn.js → impexp-tab-CDgODpaL.js} +1 -1
  111. package/dist/web/assets/impexp-tab-CDgODpaL.js.br +0 -0
  112. package/dist/web/assets/impexp-tab-CDgODpaL.js.gz +0 -0
  113. package/dist/web/assets/{index-CPBujJc_.js → index-EznfgwH9.js} +5 -5
  114. package/dist/web/assets/index-EznfgwH9.js.br +0 -0
  115. package/dist/web/assets/index-EznfgwH9.js.gz +0 -0
  116. package/dist/web/assets/{jira-watcher-section-mnly-maX.js → jira-watcher-section-CvxfscZl.js} +1 -1
  117. package/dist/web/assets/{keybindings-store-BSPTMRiv.js → keybindings-store-BqXn-D3b.js} +1 -1
  118. package/dist/web/assets/{keyboard-shortcuts-section-DULhEWPg.js → keyboard-shortcuts-section-HaqDDilx.js} +1 -1
  119. package/dist/web/assets/keyboard-shortcuts-section-HaqDDilx.js.br +0 -0
  120. package/dist/web/assets/keyboard-shortcuts-section-HaqDDilx.js.gz +0 -0
  121. package/dist/web/assets/{language-servers-section-CwBJsJ31.js → language-servers-section-B2mGPtGX.js} +2 -2
  122. package/dist/web/assets/language-servers-section-B2mGPtGX.js.br +0 -0
  123. package/dist/web/assets/language-servers-section-B2mGPtGX.js.gz +0 -0
  124. package/dist/web/assets/{logs-app-DatfI2Up.js → logs-app-Cv2fsZxf.js} +1 -1
  125. package/dist/web/assets/logs-app-Cv2fsZxf.js.br +0 -0
  126. package/dist/web/assets/logs-app-Cv2fsZxf.js.gz +0 -0
  127. package/dist/web/assets/{logs-tab-an_9ujcz.js → logs-tab-D9orkAwZ.js} +1 -1
  128. package/dist/web/assets/{logs-window-content-Usr3JTmE.js → logs-window-content-DygG8-n0.js} +1 -1
  129. package/dist/web/assets/{lsp-client-tCCcXWsR.js → lsp-client-DpKk7qms.js} +1 -1
  130. package/dist/web/assets/lsp-client-DpKk7qms.js.br +0 -0
  131. package/dist/web/assets/lsp-client-DpKk7qms.js.gz +0 -0
  132. package/dist/web/assets/{markdown-renderer-DdzxNveP.js → markdown-renderer-YDuDxTPt.js} +1 -1
  133. package/dist/web/assets/{markdown-renderer-D0YUMQLE.js → markdown-renderer-zuzkV4A5.js} +1 -1
  134. package/dist/web/assets/markdown-renderer-zuzkV4A5.js.br +0 -0
  135. package/dist/web/assets/markdown-renderer-zuzkV4A5.js.gz +0 -0
  136. package/dist/web/assets/{mobile-explorer-sheet-Bo27IRye.js → mobile-explorer-sheet-DrQaPEZo.js} +1 -1
  137. package/dist/web/assets/mobile-explorer-sheet-DrQaPEZo.js.br +0 -0
  138. package/dist/web/assets/mobile-explorer-sheet-DrQaPEZo.js.gz +0 -0
  139. package/dist/web/assets/{new-design-dialog-DIOCWZW1.js → new-design-dialog-C00L2Ei1.js} +1 -1
  140. package/dist/web/assets/new-design-dialog-C00L2Ei1.js.br +0 -0
  141. package/dist/web/assets/new-design-dialog-C00L2Ei1.js.gz +0 -0
  142. package/dist/web/assets/{notification-store-CRPOp-6B.js → notification-store-BHQjJkNC.js} +1 -1
  143. package/dist/web/assets/{notifications-settings-section-DSSCTkfX.js → notifications-settings-section-DHx7YbrU.js} +1 -1
  144. package/dist/web/assets/notifications-settings-section-DHx7YbrU.js.br +0 -0
  145. package/dist/web/assets/notifications-settings-section-DHx7YbrU.js.gz +0 -0
  146. package/dist/web/assets/{ppmbot-settings-section-BIYSlZu5.js → ppmbot-settings-section-8OxZnTeE.js} +1 -1
  147. package/dist/web/assets/ppmbot-settings-section-8OxZnTeE.js.br +0 -0
  148. package/dist/web/assets/ppmbot-settings-section-8OxZnTeE.js.gz +0 -0
  149. package/dist/web/assets/{problems-panel-CH-00nA7.js → problems-panel-uCMYh7nY.js} +1 -1
  150. package/dist/web/assets/problems-panel-uCMYh7nY.js.br +0 -0
  151. package/dist/web/assets/problems-panel-uCMYh7nY.js.gz +0 -0
  152. package/dist/web/assets/{process-table-DQO0g5do.js → process-table-D6fDra-t.js} +1 -1
  153. package/dist/web/assets/process-table-D6fDra-t.js.br +0 -0
  154. package/dist/web/assets/process-table-D6fDra-t.js.gz +0 -0
  155. package/dist/web/assets/{proxy-settings-section-Buo3hvQ4.js → proxy-settings-section-B8vjc9n-.js} +1 -1
  156. package/dist/web/assets/proxy-settings-section-B8vjc9n-.js.br +0 -0
  157. package/dist/web/assets/proxy-settings-section-B8vjc9n-.js.gz +0 -0
  158. package/dist/web/assets/{query-tab-CU0QVZpj.js → query-tab-BaIWJrsN.js} +1 -1
  159. package/dist/web/assets/query-tab-BaIWJrsN.js.br +0 -0
  160. package/dist/web/assets/query-tab-BaIWJrsN.js.gz +0 -0
  161. package/dist/web/assets/{remote-access-settings-section-vlHMJPdY.js → remote-access-settings-section-DIrFElKv.js} +1 -1
  162. package/dist/web/assets/remote-access-settings-section-DIrFElKv.js.br +0 -0
  163. package/dist/web/assets/remote-access-settings-section-DIrFElKv.js.gz +0 -0
  164. package/dist/web/assets/{remote-desktop-clipboard-notice-DNqX7d1L.js → remote-desktop-clipboard-notice-Cg2Z-66K.js} +1 -1
  165. package/dist/web/assets/remote-desktop-clipboard-notice-Cg2Z-66K.js.br +0 -0
  166. package/dist/web/assets/remote-desktop-clipboard-notice-Cg2Z-66K.js.gz +0 -0
  167. package/dist/web/assets/{remote-desktop-mobile-sheet-Dz7tctpc.js → remote-desktop-mobile-sheet-CPkPaOeS.js} +2 -2
  168. package/dist/web/assets/remote-desktop-mobile-sheet-CPkPaOeS.js.br +0 -0
  169. package/dist/web/assets/remote-desktop-mobile-sheet-CPkPaOeS.js.gz +0 -0
  170. package/dist/web/assets/{remote-desktop-mobile-view-BqhQdShH.js → remote-desktop-mobile-view-CFyOCkms.js} +1 -1
  171. package/dist/web/assets/remote-desktop-mobile-view-CFyOCkms.js.br +0 -0
  172. package/dist/web/assets/remote-desktop-mobile-view-CFyOCkms.js.gz +0 -0
  173. package/dist/web/assets/{remote-desktop-readiness-gate-rnTq4ZQS.js → remote-desktop-readiness-gate-CBAZK0-B.js} +1 -1
  174. package/dist/web/assets/remote-desktop-readiness-gate-CBAZK0-B.js.br +0 -0
  175. package/dist/web/assets/remote-desktop-readiness-gate-CBAZK0-B.js.gz +0 -0
  176. package/dist/web/assets/{remote-desktop-window-content-TqjHt0_5.js → remote-desktop-window-content-CNk7SS-W.js} +1 -1
  177. package/dist/web/assets/remote-desktop-window-content-CNk7SS-W.js.br +0 -0
  178. package/dist/web/assets/remote-desktop-window-content-CNk7SS-W.js.gz +0 -0
  179. package/dist/web/assets/{rename-object-dialog-D0YpY40E.js → rename-object-dialog-MhvD2boE.js} +1 -1
  180. package/dist/web/assets/rename-object-dialog-MhvD2boE.js.br +0 -0
  181. package/dist/web/assets/rename-object-dialog-MhvD2boE.js.gz +0 -0
  182. package/dist/web/assets/{review-code-DsF9921h.js → review-code-B9zXrfyG.js} +1 -1
  183. package/dist/web/assets/review-code-B9zXrfyG.js.br +0 -0
  184. package/dist/web/assets/review-code-B9zXrfyG.js.gz +0 -0
  185. package/dist/web/assets/{save-as-dialog-niU7kVMJ.js → save-as-dialog-5yBgewV3.js} +1 -1
  186. package/dist/web/assets/save-as-dialog-5yBgewV3.js.br +0 -0
  187. package/dist/web/assets/save-as-dialog-5yBgewV3.js.gz +0 -0
  188. package/dist/web/assets/{schedules-settings-section-Heuv2Kj4.js → schedules-settings-section-BD3-tlU-.js} +1 -1
  189. package/dist/web/assets/schedules-settings-section-BD3-tlU-.js.br +0 -0
  190. package/dist/web/assets/schedules-settings-section-BD3-tlU-.js.gz +0 -0
  191. package/dist/web/assets/{session-review-tab-Dob0FLvA.js → session-review-tab-DYJFhsGk.js} +1 -1
  192. package/dist/web/assets/session-review-tab-DYJFhsGk.js.br +0 -0
  193. package/dist/web/assets/session-review-tab-DYJFhsGk.js.gz +0 -0
  194. package/dist/web/assets/{settings-body-5t6SQbLx.js → settings-body-CWBVeKKg.js} +1 -1
  195. package/dist/web/assets/settings-body-CWBVeKKg.js.br +4 -0
  196. package/dist/web/assets/settings-body-CWBVeKKg.js.gz +0 -0
  197. package/dist/web/assets/{settings-rows-B0w15zot.js → settings-rows-B7fyQuu_.js} +1 -1
  198. package/dist/web/assets/settings-rows-B7fyQuu_.js.br +0 -0
  199. package/dist/web/assets/settings-rows-B7fyQuu_.js.gz +0 -0
  200. package/dist/web/assets/settings-section-content-BPQN6KdN.js +1 -0
  201. package/dist/web/assets/{settings-section-content-D41IJ62x.js → settings-section-content-CoJcm6JM.js} +2 -2
  202. package/dist/web/assets/settings-section-content-CoJcm6JM.js.br +0 -0
  203. package/dist/web/assets/settings-section-content-CoJcm6JM.js.gz +0 -0
  204. package/dist/web/assets/{settings-tab-DGU5FVbO.js → settings-tab-DWzU1RkL.js} +1 -1
  205. package/dist/web/assets/{settings-window-content-Da5PY5MZ.js → settings-window-content-CAThkpa8.js} +1 -1
  206. package/dist/web/assets/{slash-command-picker-DpZsPuNf.js → slash-command-picker-dDl9riKP.js} +1 -1
  207. package/dist/web/assets/slash-command-picker-dDl9riKP.js.br +0 -0
  208. package/dist/web/assets/slash-command-picker-dDl9riKP.js.gz +0 -0
  209. package/dist/web/assets/{sql-object-tab-BTS8aHGO.js → sql-object-tab-DND9osIv.js} +1 -1
  210. package/dist/web/assets/sql-object-tab-DND9osIv.js.br +0 -0
  211. package/dist/web/assets/sql-object-tab-DND9osIv.js.gz +0 -0
  212. package/dist/web/assets/{sqlite-viewer-CVo5eqWj.js → sqlite-viewer-P7UpXmyZ.js} +1 -1
  213. package/dist/web/assets/sqlite-viewer-P7UpXmyZ.js.br +0 -0
  214. package/dist/web/assets/sqlite-viewer-P7UpXmyZ.js.gz +0 -0
  215. package/dist/web/assets/{structure-save-dialog-B9Q-Rhgj.js → structure-save-dialog-DX1H1Qy2.js} +1 -1
  216. package/dist/web/assets/structure-save-dialog-DX1H1Qy2.js.br +0 -0
  217. package/dist/web/assets/structure-save-dialog-DX1H1Qy2.js.gz +0 -0
  218. package/dist/web/assets/{structure-tab-_cQn0KG7.js → structure-tab-1QhNP2ob.js} +1 -1
  219. package/dist/web/assets/structure-tab-1QhNP2ob.js.br +0 -0
  220. package/dist/web/assets/structure-tab-1QhNP2ob.js.gz +0 -0
  221. package/dist/web/assets/{system-monitor-body-YS3i1PUs.js → system-monitor-body-CPAAjIdT.js} +2 -2
  222. package/dist/web/assets/system-monitor-body-CPAAjIdT.js.br +0 -0
  223. package/dist/web/assets/system-monitor-body-CPAAjIdT.js.gz +0 -0
  224. package/dist/web/assets/{system-monitor-tab-D63xmd8U.js → system-monitor-tab-D_1PBGwv.js} +1 -1
  225. package/dist/web/assets/{system-monitor-window-content-DkCsK8Ed.js → system-monitor-window-content-dVxWFqHP.js} +1 -1
  226. package/dist/web/assets/{tab-host-window-content-CrASOMX8.js → tab-host-window-content-BBsg5_fz.js} +1 -1
  227. package/dist/web/assets/tab-host-window-content-BBsg5_fz.js.br +0 -0
  228. package/dist/web/assets/tab-host-window-content-BBsg5_fz.js.gz +0 -0
  229. package/dist/web/assets/{table-tab-JlfqyPZR.js → table-tab-BO-q-hSc.js} +1 -1
  230. package/dist/web/assets/table-tab-BO-q-hSc.js.br +0 -0
  231. package/dist/web/assets/table-tab-BO-q-hSc.js.gz +0 -0
  232. package/dist/web/assets/{telegram-bot-token-field-ctRa2529.js → telegram-bot-token-field-BVYWBpX_.js} +1 -1
  233. package/dist/web/assets/telegram-bot-token-field-BVYWBpX_.js.br +0 -0
  234. package/dist/web/assets/telegram-bot-token-field-BVYWBpX_.js.gz +0 -0
  235. package/dist/web/assets/{terminal-tab-BsXBBru0.js → terminal-tab-DjPXnuO8.js} +1 -1
  236. package/dist/web/assets/terminal-tab-DjPXnuO8.js.br +0 -0
  237. package/dist/web/assets/terminal-tab-DjPXnuO8.js.gz +0 -0
  238. package/dist/web/assets/{tool-cards-BDzK03U4.js → tool-cards-DXV9SEE8.js} +2 -2
  239. package/dist/web/assets/tool-cards-DXV9SEE8.js.br +0 -0
  240. package/dist/web/assets/tool-cards-DXV9SEE8.js.gz +0 -0
  241. package/dist/web/assets/{tools-settings-section-DCG74pbd.js → tools-settings-section-Cc5YKOB6.js} +1 -1
  242. package/dist/web/assets/tools-settings-section-Cc5YKOB6.js.br +0 -0
  243. package/dist/web/assets/tools-settings-section-Cc5YKOB6.js.gz +0 -0
  244. package/dist/web/assets/{use-inline-blame-BOn_m8f-.js → use-inline-blame-f6WMZkEv.js} +1 -1
  245. package/dist/web/assets/use-inline-blame-f6WMZkEv.js.br +0 -0
  246. package/dist/web/assets/use-inline-blame-f6WMZkEv.js.gz +0 -0
  247. package/dist/web/assets/{use-lsp-D144ftsf.js → use-lsp-B_fmU9ja.js} +1 -1
  248. package/dist/web/assets/use-lsp-B_fmU9ja.js.br +0 -0
  249. package/dist/web/assets/use-lsp-B_fmU9ja.js.gz +0 -0
  250. package/dist/web/assets/{use-monaco-theme-ArU1f9T6.js → use-monaco-theme-nu5Fogu3.js} +1 -1
  251. package/dist/web/assets/{use-process-kill-BdmXHMFE.js → use-process-kill-B8Mf4_Yy.js} +1 -1
  252. package/dist/web/assets/use-process-kill-B8Mf4_Yy.js.br +0 -0
  253. package/dist/web/assets/use-process-kill-B8Mf4_Yy.js.gz +0 -0
  254. package/dist/web/assets/{use-sql-schema-info-BQXSMw6p.js → use-sql-schema-info-Dp6TCir5.js} +1 -1
  255. package/dist/web/assets/use-sql-schema-info-Dp6TCir5.js.br +0 -0
  256. package/dist/web/assets/use-sql-schema-info-Dp6TCir5.js.gz +0 -0
  257. package/dist/web/assets/{use-websocket-rWdrMWa8.js → use-websocket-RuENPZ_x.js} +1 -1
  258. package/dist/web/assets/web-preview-tab-ClOiV3BO.js +1 -0
  259. package/dist/web/assets/web-preview-tab-ClOiV3BO.js.br +0 -0
  260. package/dist/web/assets/web-preview-tab-ClOiV3BO.js.gz +0 -0
  261. package/dist/web/index.html +1 -1
  262. package/dist/web/index.html.br +0 -0
  263. package/dist/web/index.html.gz +0 -0
  264. package/dist/web/sw.js +1 -1
  265. package/dist/web/sw.js.br +0 -0
  266. package/dist/web/sw.js.gz +0 -0
  267. package/docs/architecture/workspace-and-ui.md +11 -0
  268. package/package.json +1 -1
  269. package/src/services/port-forward/forward-hop.ts +20 -5
  270. package/src/services/port-forward/preview-navigation.ts +45 -0
  271. package/src/web/components/web-preview/web-preview-tab.tsx +38 -5
  272. package/dist/web/assets/accounts-settings-section-BqsI4Ixj.js.br +0 -0
  273. package/dist/web/assets/accounts-settings-section-BqsI4Ixj.js.gz +0 -0
  274. package/dist/web/assets/agent-session-sheet-BmoNB8BG.js.br +0 -0
  275. package/dist/web/assets/agent-session-sheet-BmoNB8BG.js.gz +0 -0
  276. package/dist/web/assets/agent-session-window-content-rlCrYBYv.js.br +0 -0
  277. package/dist/web/assets/agent-session-window-content-rlCrYBYv.js.gz +0 -0
  278. package/dist/web/assets/ai-resource-editor-CUOR9Xtf.js.br +0 -0
  279. package/dist/web/assets/ai-resource-editor-CUOR9Xtf.js.gz +0 -0
  280. package/dist/web/assets/ai-settings-section-CNdbcCaI.js.br +0 -0
  281. package/dist/web/assets/ai-settings-section-CNdbcCaI.js.gz +0 -0
  282. package/dist/web/assets/android-tab-BsuTMKJw.js.br +0 -0
  283. package/dist/web/assets/android-tab-BsuTMKJw.js.gz +0 -0
  284. package/dist/web/assets/appearance-settings-section-Dk6d_fTo.js.br +0 -0
  285. package/dist/web/assets/appearance-settings-section-Dk6d_fTo.js.gz +0 -0
  286. package/dist/web/assets/apps-panel-C20ys4Cy.js.br +0 -0
  287. package/dist/web/assets/apps-panel-C20ys4Cy.js.gz +0 -0
  288. package/dist/web/assets/branch-review-tab-CcvkQMRA.js.br +0 -0
  289. package/dist/web/assets/branch-review-tab-CcvkQMRA.js.gz +0 -0
  290. package/dist/web/assets/chat-tab-BAh37UwG.js.br +0 -0
  291. package/dist/web/assets/chat-tab-BAh37UwG.js.gz +0 -0
  292. package/dist/web/assets/chat-tab-D-cl4yMo.js.br +0 -0
  293. package/dist/web/assets/chat-tab-D-cl4yMo.js.gz +0 -0
  294. package/dist/web/assets/code-editor-DIGsPNPS.js.br +0 -0
  295. package/dist/web/assets/code-editor-DIGsPNPS.js.gz +0 -0
  296. package/dist/web/assets/codex-reset-credit-button-C0a2svAw.js.br +0 -0
  297. package/dist/web/assets/codex-reset-credit-button-C0a2svAw.js.gz +0 -0
  298. package/dist/web/assets/conflict-editor-zORSNMk6.js.br +0 -0
  299. package/dist/web/assets/conflict-editor-zORSNMk6.js.gz +0 -0
  300. package/dist/web/assets/connection-form-tab-BkE7wACA.js.br +0 -0
  301. package/dist/web/assets/connection-form-tab-BkE7wACA.js.gz +0 -0
  302. package/dist/web/assets/csv-preview-CDUY0I94.js.br +0 -0
  303. package/dist/web/assets/csv-preview-CDUY0I94.js.gz +0 -0
  304. package/dist/web/assets/db-tab-parts-tgVIgcs5.js.br +0 -0
  305. package/dist/web/assets/db-tab-parts-tgVIgcs5.js.gz +0 -0
  306. package/dist/web/assets/design-settings-section-CqFPwhis.js.br +0 -0
  307. package/dist/web/assets/design-settings-section-CqFPwhis.js.gz +0 -0
  308. package/dist/web/assets/design-tab-CVTzge3p.js.br +0 -0
  309. package/dist/web/assets/design-tab-CVTzge3p.js.gz +0 -0
  310. package/dist/web/assets/designs-sidebar-panel-DKTSE1LS.js.br +0 -0
  311. package/dist/web/assets/designs-sidebar-panel-DKTSE1LS.js.gz +0 -0
  312. package/dist/web/assets/diff-viewer-3VDHcDag.js.br +0 -0
  313. package/dist/web/assets/diff-viewer-3VDHcDag.js.gz +0 -0
  314. package/dist/web/assets/docx-preview-FgE_WU6t.js.br +0 -0
  315. package/dist/web/assets/docx-preview-FgE_WU6t.js.gz +0 -0
  316. package/dist/web/assets/editor-dialog-BhK77FSu.js.br +0 -0
  317. package/dist/web/assets/editor-dialog-BhK77FSu.js.gz +0 -0
  318. package/dist/web/assets/editor-language-service-BIN7M57r.js.br +0 -4
  319. package/dist/web/assets/editor-language-service-BIN7M57r.js.gz +0 -0
  320. package/dist/web/assets/explorer-body-DNsWiVO3.js.br +0 -0
  321. package/dist/web/assets/explorer-body-DNsWiVO3.js.gz +0 -0
  322. package/dist/web/assets/explorer-window-content-DnOJYhRX.js.br +0 -0
  323. package/dist/web/assets/explorer-window-content-DnOJYhRX.js.gz +0 -0
  324. package/dist/web/assets/extension-manager-section-CJtRpUUs.js.br +0 -0
  325. package/dist/web/assets/extension-manager-section-CJtRpUUs.js.gz +0 -0
  326. package/dist/web/assets/extension-webview-Bza7cPL1.js.br +0 -0
  327. package/dist/web/assets/extension-webview-Bza7cPL1.js.gz +0 -0
  328. package/dist/web/assets/files-settings-section-8rWMj1Oi.js.br +0 -0
  329. package/dist/web/assets/general-settings-section-joWQEgIn.js.br +0 -0
  330. package/dist/web/assets/general-settings-section-joWQEgIn.js.gz +0 -0
  331. package/dist/web/assets/git-log-panel-BxYYWEiU.js.br +0 -0
  332. package/dist/web/assets/git-log-panel-BxYYWEiU.js.gz +0 -0
  333. package/dist/web/assets/git-review-tab-Btnvgk1e.js.br +0 -0
  334. package/dist/web/assets/git-review-tab-Btnvgk1e.js.gz +0 -0
  335. package/dist/web/assets/glide-data-grid-lCwaM1Gy.js.br +0 -0
  336. package/dist/web/assets/glide-data-grid-lCwaM1Gy.js.gz +0 -0
  337. package/dist/web/assets/grid-save-dialog-DoEEQ1vM.js.br +0 -0
  338. package/dist/web/assets/grid-save-dialog-DoEEQ1vM.js.gz +0 -0
  339. package/dist/web/assets/group-chat-tab-B7Dwx9uL.js.br +0 -0
  340. package/dist/web/assets/group-chat-tab-B7Dwx9uL.js.gz +0 -0
  341. package/dist/web/assets/impexp-tab-BtEDbQSn.js.br +0 -0
  342. package/dist/web/assets/impexp-tab-BtEDbQSn.js.gz +0 -0
  343. package/dist/web/assets/index-CPBujJc_.js.br +0 -0
  344. package/dist/web/assets/index-CPBujJc_.js.gz +0 -0
  345. package/dist/web/assets/keyboard-shortcuts-section-DULhEWPg.js.br +0 -0
  346. package/dist/web/assets/keyboard-shortcuts-section-DULhEWPg.js.gz +0 -0
  347. package/dist/web/assets/language-servers-section-CwBJsJ31.js.br +0 -0
  348. package/dist/web/assets/language-servers-section-CwBJsJ31.js.gz +0 -0
  349. package/dist/web/assets/logs-app-DatfI2Up.js.br +0 -0
  350. package/dist/web/assets/logs-app-DatfI2Up.js.gz +0 -0
  351. package/dist/web/assets/lsp-client-tCCcXWsR.js.br +0 -0
  352. package/dist/web/assets/lsp-client-tCCcXWsR.js.gz +0 -0
  353. package/dist/web/assets/markdown-renderer-D0YUMQLE.js.br +0 -0
  354. package/dist/web/assets/markdown-renderer-D0YUMQLE.js.gz +0 -0
  355. package/dist/web/assets/mobile-explorer-sheet-Bo27IRye.js.br +0 -0
  356. package/dist/web/assets/mobile-explorer-sheet-Bo27IRye.js.gz +0 -0
  357. package/dist/web/assets/new-design-dialog-DIOCWZW1.js.br +0 -0
  358. package/dist/web/assets/new-design-dialog-DIOCWZW1.js.gz +0 -0
  359. package/dist/web/assets/notifications-settings-section-DSSCTkfX.js.br +0 -0
  360. package/dist/web/assets/notifications-settings-section-DSSCTkfX.js.gz +0 -0
  361. package/dist/web/assets/ppmbot-settings-section-BIYSlZu5.js.br +0 -0
  362. package/dist/web/assets/ppmbot-settings-section-BIYSlZu5.js.gz +0 -0
  363. package/dist/web/assets/problems-panel-CH-00nA7.js.br +0 -0
  364. package/dist/web/assets/problems-panel-CH-00nA7.js.gz +0 -0
  365. package/dist/web/assets/process-table-DQO0g5do.js.br +0 -0
  366. package/dist/web/assets/process-table-DQO0g5do.js.gz +0 -0
  367. package/dist/web/assets/proxy-settings-section-Buo3hvQ4.js.br +0 -0
  368. package/dist/web/assets/proxy-settings-section-Buo3hvQ4.js.gz +0 -0
  369. package/dist/web/assets/query-tab-CU0QVZpj.js.br +0 -0
  370. package/dist/web/assets/query-tab-CU0QVZpj.js.gz +0 -0
  371. package/dist/web/assets/remote-access-settings-section-vlHMJPdY.js.br +0 -0
  372. package/dist/web/assets/remote-access-settings-section-vlHMJPdY.js.gz +0 -0
  373. package/dist/web/assets/remote-desktop-clipboard-notice-DNqX7d1L.js.br +0 -0
  374. package/dist/web/assets/remote-desktop-clipboard-notice-DNqX7d1L.js.gz +0 -0
  375. package/dist/web/assets/remote-desktop-mobile-sheet-Dz7tctpc.js.br +0 -0
  376. package/dist/web/assets/remote-desktop-mobile-sheet-Dz7tctpc.js.gz +0 -0
  377. package/dist/web/assets/remote-desktop-mobile-view-BqhQdShH.js.br +0 -0
  378. package/dist/web/assets/remote-desktop-mobile-view-BqhQdShH.js.gz +0 -0
  379. package/dist/web/assets/remote-desktop-readiness-gate-rnTq4ZQS.js.br +0 -0
  380. package/dist/web/assets/remote-desktop-readiness-gate-rnTq4ZQS.js.gz +0 -0
  381. package/dist/web/assets/remote-desktop-window-content-TqjHt0_5.js.br +0 -0
  382. package/dist/web/assets/remote-desktop-window-content-TqjHt0_5.js.gz +0 -0
  383. package/dist/web/assets/rename-object-dialog-D0YpY40E.js.br +0 -0
  384. package/dist/web/assets/rename-object-dialog-D0YpY40E.js.gz +0 -0
  385. package/dist/web/assets/review-code-DsF9921h.js.br +0 -0
  386. package/dist/web/assets/review-code-DsF9921h.js.gz +0 -0
  387. package/dist/web/assets/save-as-dialog-niU7kVMJ.js.br +0 -0
  388. package/dist/web/assets/save-as-dialog-niU7kVMJ.js.gz +0 -0
  389. package/dist/web/assets/schedules-settings-section-Heuv2Kj4.js.br +0 -0
  390. package/dist/web/assets/schedules-settings-section-Heuv2Kj4.js.gz +0 -0
  391. package/dist/web/assets/session-review-tab-Dob0FLvA.js.br +0 -0
  392. package/dist/web/assets/session-review-tab-Dob0FLvA.js.gz +0 -0
  393. package/dist/web/assets/settings-body-5t6SQbLx.js.br +0 -0
  394. package/dist/web/assets/settings-body-5t6SQbLx.js.gz +0 -0
  395. package/dist/web/assets/settings-rows-B0w15zot.js.br +0 -0
  396. package/dist/web/assets/settings-rows-B0w15zot.js.gz +0 -0
  397. package/dist/web/assets/settings-section-content-D41IJ62x.js.br +0 -0
  398. package/dist/web/assets/settings-section-content-D41IJ62x.js.gz +0 -0
  399. package/dist/web/assets/settings-section-content-DuVO6erO.js +0 -1
  400. package/dist/web/assets/slash-command-picker-DpZsPuNf.js.br +0 -0
  401. package/dist/web/assets/slash-command-picker-DpZsPuNf.js.gz +0 -0
  402. package/dist/web/assets/sql-object-tab-BTS8aHGO.js.br +0 -0
  403. package/dist/web/assets/sql-object-tab-BTS8aHGO.js.gz +0 -0
  404. package/dist/web/assets/sqlite-viewer-CVo5eqWj.js.br +0 -0
  405. package/dist/web/assets/sqlite-viewer-CVo5eqWj.js.gz +0 -0
  406. package/dist/web/assets/structure-save-dialog-B9Q-Rhgj.js.br +0 -0
  407. package/dist/web/assets/structure-save-dialog-B9Q-Rhgj.js.gz +0 -0
  408. package/dist/web/assets/structure-tab-_cQn0KG7.js.br +0 -0
  409. package/dist/web/assets/structure-tab-_cQn0KG7.js.gz +0 -0
  410. package/dist/web/assets/system-monitor-body-YS3i1PUs.js.br +0 -0
  411. package/dist/web/assets/system-monitor-body-YS3i1PUs.js.gz +0 -0
  412. package/dist/web/assets/tab-host-window-content-CrASOMX8.js.br +0 -0
  413. package/dist/web/assets/tab-host-window-content-CrASOMX8.js.gz +0 -0
  414. package/dist/web/assets/table-tab-JlfqyPZR.js.br +0 -0
  415. package/dist/web/assets/table-tab-JlfqyPZR.js.gz +0 -0
  416. package/dist/web/assets/telegram-bot-token-field-ctRa2529.js.br +0 -0
  417. package/dist/web/assets/telegram-bot-token-field-ctRa2529.js.gz +0 -0
  418. package/dist/web/assets/terminal-tab-BsXBBru0.js.br +0 -0
  419. package/dist/web/assets/terminal-tab-BsXBBru0.js.gz +0 -0
  420. package/dist/web/assets/tool-cards-BDzK03U4.js.br +0 -0
  421. package/dist/web/assets/tool-cards-BDzK03U4.js.gz +0 -0
  422. package/dist/web/assets/tools-settings-section-DCG74pbd.js.br +0 -0
  423. package/dist/web/assets/tools-settings-section-DCG74pbd.js.gz +0 -0
  424. package/dist/web/assets/use-inline-blame-BOn_m8f-.js.br +0 -0
  425. package/dist/web/assets/use-inline-blame-BOn_m8f-.js.gz +0 -0
  426. package/dist/web/assets/use-lsp-D144ftsf.js.br +0 -0
  427. package/dist/web/assets/use-lsp-D144ftsf.js.gz +0 -0
  428. package/dist/web/assets/use-process-kill-BdmXHMFE.js.br +0 -0
  429. package/dist/web/assets/use-process-kill-BdmXHMFE.js.gz +0 -0
  430. package/dist/web/assets/use-sql-schema-info-BQXSMw6p.js.br +0 -0
  431. package/dist/web/assets/use-sql-schema-info-BQXSMw6p.js.gz +0 -0
  432. package/dist/web/assets/web-preview-tab-B2OSrnl9.js +0 -1
  433. package/dist/web/assets/web-preview-tab-B2OSrnl9.js.br +0 -0
  434. package/dist/web/assets/web-preview-tab-B2OSrnl9.js.gz +0 -0
@@ -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{xn as r}from"./icons-BwyIKaTT.js";import{k as i,r as a}from"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as o}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import{et as s}from"./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"./tab-store-D5I52eLN.js";import{n as c}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import{t as l}from"./button-C9ZXWb3b.js";import{a as u,n as d,o as f,r as p,t as m}from"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import{t as h}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"./use-db-driver-installed-anzWkGi5.js";import"./db-sidebar-reveal-_qw0CliT.js";import"./db-explorer-store-BmpvDHz6.js";import{n as g}from"./open-db-tabs-CtWIWHOa.js";import"./scroll-area-DOlQJGZp.js";import{l as _,o as v}from"./index-CPBujJc_.js";import"./use-monaco-theme-ArU1f9T6.js";import"./use-db-tab-B8LjdDb7.js";import"./use-db-read-BCYhIrJM.js";import"./db-tab-parts-tgVIgcs5.js";import{ReadOnlySql as y}from"./sql-object-tab-BTS8aHGO.js";import{t as b}from"./use-opener-focus-CDRKhHwX.js";var x=e(t(),1);function S(e){return`${e.schema??``}.${e.table}`}function C(e,t,n){return t?e.references.filter(e=>!n.has(S(e))):[]}function w(e,t){return[...t.map(e=>e.script),e.script].filter(e=>e.length>0).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"./vendor-ui-BTSIXzhZ.js";import{xn as r}from"./icons-BwyIKaTT.js";import{k as i,r as a}from"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as o}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import{et as s}from"./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"./tab-store-D5I52eLN.js";import{n as c}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import{t as l}from"./button-C9ZXWb3b.js";import{a as u,n as d,o as f,r as p,t as m}from"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import{t as h}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"./use-db-driver-installed-anzWkGi5.js";import"./db-sidebar-reveal-_qw0CliT.js";import"./db-explorer-store-BmpvDHz6.js";import{n as g}from"./open-db-tabs-CtWIWHOa.js";import"./scroll-area-DOlQJGZp.js";import{l as _,o as v}from"./index-EznfgwH9.js";import"./use-monaco-theme-nu5Fogu3.js";import"./use-db-tab-B8LjdDb7.js";import"./use-db-read-BCYhIrJM.js";import"./db-tab-parts-BbNfuvwC.js";import{ReadOnlySql as y}from"./sql-object-tab-DND9osIv.js";import{t as b}from"./use-opener-focus-CDRKhHwX.js";var x=e(t(),1);function S(e){return`${e.schema??``}.${e.table}`}function C(e,t,n){return t?e.references.filter(e=>!n.has(S(e))):[]}function w(e,t){return[...t.map(e=>e.script),e.script].filter(e=>e.length>0).join(`
2
2
  `)}function T(e,t){return e.schema&&e.schema!==t?`${e.schema}.${e.table}`:e.table}function E(e){return e.paths.map(e=>e.join(` → `))}function D(e){let t=e.inserted+e.updated+e.deleted+e.cascaded;return`${t} change${t===1?``:`s`} saved in one transaction · ${e.executionTimeMs} ms`}var O=`ppm-db-save-dont-ask`;function k(){try{return localStorage.getItem(O)!==`1`}catch{return!0}}function A(){try{localStorage.setItem(O,`1`)}catch{}}var j=n();function M({request:e,seq:t}){let[n,o]=(0,x.useState)({step:`reading`}),[c,l]=(0,x.useState)(k),[u,d]=(0,x.useState)(!1),[f,p]=(0,x.useState)(new Set),[m,h]=(0,x.useState)(!1),b=(0,x.useId)(),O=(0,x.useMemo)(()=>({table:e.table,schema:e.schema,...e.changes}),[e]),M=()=>v(t,null),P=async(n,r)=>{let c=C(n,u,f);o({step:`applying`,preview:n});let d;try{d=await a.post(s(e.target,`/changeset/apply`),{...O,...c.length>0?{cascade:c.map(e=>({schema:e.schema,table:e.table}))}:{}})}catch(e){l(!0),o({step:`confirm`,preview:n,error:e.message});return}r||A(),i.success(D(d)),v(t,d)};if((0,x.useEffect)(()=>{let t=!1;return a.post(s(e.target,`/changeset/preview`),O).then(e=>{if(!t){if(!c&&e.references.length===0){P(e,!0);return}l(!0),o({step:`confirm`,preview:e})}}).catch(e=>{t||(l(!0),o({step:`unreadable`,message:e.message}))}),()=>{t=!0}},[O]),!c)return null;let F=n.step===`confirm`||n.step===`applying`?n.preview:null,L=n.step===`applying`,R=F?C(F,u,f):[],z=F?w(F,R):``,B=F&&!L?()=>void P(F,!m):void 0,V=e.place&&F&&!L?()=>{let t=e.place;M(),g(t,z)}:void 0,H=n.step===`confirm`?n.error:void 0,U=(0,j.jsxs)(j.Fragment,{children:[H&&(0,j.jsx)(`p`,{role:`alert`,className:`whitespace-pre-wrap break-words rounded-md border border-error/40 bg-error/10 px-3 py-2 text-[12.5px] text-text-primary`,children:H}),n.step===`unreadable`?(0,j.jsx)(`p`,{role:`alert`,className:`whitespace-pre-wrap break-words text-[13px] text-error`,children:n.message}):(0,j.jsx)(`div`,{className:`h-[min(20rem,40dvh)] shrink-0 overflow-hidden rounded-md border border-border bg-panel-2`,children:F?(0,j.jsx)(y,{sql:z}):(0,j.jsx)(`div`,{className:`grid h-full place-items-center text-text-subtle`,role:`status`,"aria-label":`Reading the script`,children:(0,j.jsx)(r,{className:`size-5 animate-spin`})})}),F&&F.references.length>0&&(0,j.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,j.jsx)(_,{id:`${b}-cascade`,title:`Delete references CASCADE`,checked:u,disabled:L,onChange:d,help:`Other tables can hold rows that point at the rows being deleted. Tick to delete those rows first.`}),u&&(0,j.jsxs)(`div`,{className:`grid gap-1.5 pl-6 max-md:pl-7`,children:[(0,j.jsxs)(`div`,{className:`flex gap-4`,children:[(0,j.jsx)(N,{disabled:L,onClick:()=>p(new Set),children:`Check all`}),(0,j.jsx)(N,{disabled:L,onClick:()=>p(new Set(F.references.map(S))),children:`Uncheck all`})]}),(0,j.jsx)(`ul`,{"aria-label":`Tables to delete from first`,className:`grid gap-1.5`,children:F.references.map(t=>{let n=S(t);return(0,j.jsx)(`li`,{children:(0,j.jsx)(_,{id:`${b}-ref-${n}`,checked:!f.has(n),disabled:L,title:(0,j.jsx)(`span`,{className:`font-mono`,children:T(t,e.schema||null)}),help:[...E(t),...t.cascadesInDb?[`ON DELETE CASCADE in the database already`]:[]].join(` · `),onChange:e=>p(t=>{let r=new Set(t);return e?r.delete(n):r.add(n),r})})},n)})})]})]}),F&&F.references.length===0&&(0,j.jsx)(_,{id:`${b}-dont-ask`,title:`Don't ask again`,checked:m,disabled:L,onChange:h})]});return(0,j.jsx)(I,{onOk:B,okLabel:L?`Saving…`:`OK`,onClose:L?void 0:M,onOpenScript:V,showOpenScript:!!e.place,children:U})}function N({onClick:e,disabled:t,children:n}){return(0,j.jsx)(`button`,{type:`button`,onClick:e,disabled:t,className:`text-[12.5px] text-primary select-none can-hover:hover:underline disabled:opacity-55 max-md:min-h-11 max-md:text-sm`,children:n})}var P=`Save changes`,F=`The script that writes the changes, to read before it runs`;function I({onOk:e,okLabel:t,onClose:n,onOpenScript:r,showOpenScript:i,children:a}){let s=c(),g=(0,x.useId)(),_=b(),v=()=>n?.(),y=t=>{t.key!==`Enter`||t.shiftKey||t.ctrlKey||t.metaKey||t.altKey||t.nativeEvent.isComposing||!e||t.target.closest(`button, textarea, .monaco-editor`)||(t.preventDefault(),e())},S=s?`h-11 flex-1 text-sm`:void 0,C=(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(l,{type:`button`,size:`sm`,disabled:!e,onClick:e,className:o(s&&`h-11 flex-[2] text-sm`),children:t}),(0,j.jsx)(l,{type:`button`,size:`sm`,variant:`outline`,disabled:!n,onClick:v,className:S,children:`Close`}),i&&(0,j.jsx)(l,{type:`button`,size:`sm`,variant:`outline`,disabled:!r,onClick:r,className:S,children:`Open script`})]});return s?(0,j.jsx)(h,{open:!0,onClose:v,className:`popover-solid`,children:(0,j.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":g,onKeyDown:y,className:`flex max-h-[calc(var(--sheet-vh,100dvh)*0.9)] flex-col`,children:[(0,j.jsx)(`h2`,{id:g,className:`px-4 pb-2 pt-1 text-base font-semibold`,children:P}),(0,j.jsx)(`div`,{className:`grid min-h-0 grid-cols-[minmax(0,1fr)] content-start gap-3 overflow-y-auto px-4 pb-3`,children:a}),(0,j.jsx)(`div`,{className:`flex gap-2 border-t border-border-soft px-3 pt-2.5`,children:C})]})}):(0,j.jsx)(m,{open:!0,onOpenChange:e=>{e||v()},children:(0,j.jsxs)(d,{onKeyDown:y,onOpenAutoFocus:e=>{e.preventDefault(),e.target.focus()},onCloseAutoFocus:_,className:`max-h-[calc(100dvh-4rem)] grid-rows-[auto_minmax(0,1fr)_auto] gap-3 p-5 sm:max-w-3xl`,children:[(0,j.jsxs)(u,{children:[(0,j.jsx)(f,{className:`text-base`,children:P}),(0,j.jsx)(p,{className:`sr-only`,children:F})]}),(0,j.jsx)(`div`,{className:`-mx-1 grid grid-cols-[minmax(0,1fr)] content-start gap-3 overflow-y-auto px-1 py-0.5`,children:a}),(0,j.jsx)(`div`,{className:`flex flex-wrap justify-end gap-2`,children:C})]})})}export{M as GridSaveDialog};
@@ -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{$r as r,E as i,Kr as a,L as o,Mr as s,Sr as c,br as l,or as u,ti as d,tr as f,wr as p,xn as m}from"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as h}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import"./panel-store-BJhazigC.js";import{i as g}from"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import"./context-menu-BCuZYfWC.js";import"./file-store-BQ41vIs5.js";import{n as _}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import"./git-repo-store-CKB5fdNP.js";import{t as v}from"./button-C9ZXWb3b.js";import{a as y,n as b,o as x,t as S}from"./dialog-Dn_2tuYa.js";import{t as C}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{n as w,r as T,t as E,u as D}from"./adaptive-context-menu-C4jNSORA.js";import"./fs-api-CFtQzsIJ.js";import"./ws-auth-CbF6GqxP.js";import{_n as O,bn as k,dn as A,fn as j,gn as ee,hn as M,mn as te,oi as ne,pn as N,vn as P,xn as re,yn as F}from"./index-CPBujJc_.js";import"./agent-session-sheet-store-BAfLnsLX.js";import"./libesm-B6LsX5wH.js";import{n as I}from"./tool-cards-BDzK03U4.js";import"./use-blob-url-Clm7wbB_.js";import"./design-canvas-check-BIHc2d_k.js";import"./db-ai-tools-CVbbW_MZ.js";import{t as L}from"./use-websocket-rWdrMWa8.js";import"./lib-5Chotbwm.js";import{t as R}from"./markdown-renderer-D0YUMQLE.js";import"./run-in-terminal-ujoc25vj.js";var z=e(t(),1),B=8e3;function ie(e,t){let[n,r]=(0,z.useState)([]),[i,a]=(0,z.useState)([]),[o,s]=(0,z.useState)(`idle`),[c,l]=(0,z.useState)({}),[u,d]=(0,z.useState)(!1),[f,p]=(0,z.useState)(!1),[m,h]=(0,z.useState)(!1),[g,_]=(0,z.useState)(null),v=(0,z.useRef)(new Map),y=(0,z.useCallback)(e=>{l(t=>{if(!t[e])return t;let n={...t};return delete n[e],n})},[]),b=(0,z.useCallback)(e=>{let t;try{t=JSON.parse(e.data)}catch{return}switch(t.type){case`ping`:return;case`group_state`:p(!0),s(t.status),a(t.members),h(t.status===`active`);return;case`group_message`:y(t.message.fromMember),r(e=>e.some(e=>e.id===t.message.id)?e:[...e,t.message]);return;case`member_status`:a(e=>e.map(e=>e.id===t.memberId?{...e,status:t.status}:e));return;case`typing`:{l(e=>({...e,[t.member]:!0}));let e=v.current,n=e.get(t.member);n&&clearTimeout(n),e.set(t.member,setTimeout(()=>y(t.member),B));return}case`turn_done`:return;case`group_done`:h(!1),s(`idle`),l({});return;case`error`:_(t.message),h(!1);return}},[y]),{send:x}=L({url:e&&t?`/ws/project/${encodeURIComponent(t)}/group/${encodeURIComponent(e)}`:``,onMessage:b,autoConnect:!!e&&!!t});return(0,z.useEffect)(()=>{let t=!1;r([]),a([]),l({}),s(`idle`),h(!1),_(null),p(!1);for(let e of v.current.values())clearTimeout(e);if(v.current.clear(),e)return d(!0),N(e,{limit:200}).then(e=>{t||r(t=>{let n=new Set(e.messages.map(e=>e.id)),r=t.filter(e=>!n.has(e.id));return[...e.messages,...r]})}).catch(e=>{t||_(e instanceof Error?e.message:`Failed to load feed`)}).finally(()=>{t||d(!1)}),()=>{t=!0}},[e]),{messages:n,members:i,status:o,typing:c,loading:u,isConnected:f,isRunning:m,error:g,sendMessage:(0,z.useCallback)(t=>{let n=t.trim();!n||!e||(_(null),h(!0),f?x(JSON.stringify({type:`message`,content:n})):P(e,n).catch(e=>{_(e instanceof Error?e.message:`Failed to send message`),h(!1)}))},[e,f,x]),stop:(0,z.useCallback)(()=>{e&&(f?x(JSON.stringify({type:`stop`})):F(e).catch(()=>{}),s(`paused`),h(!1))},[e,f,x]),resume:(0,z.useCallback)(()=>{e&&O(e).then(()=>{s(`active`),h(!0)}).catch(e=>_(e instanceof Error?e.message:`Failed to resume`))},[e])}}var V=n();function H(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function U(e){try{let t=e<0xe8d4a51000?e*1e3:e;return new Date(t).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}catch{return``}}function W(e,t){return e.split(/(@[\p{L}\p{N}_]+)/gu).map((e,n)=>{if(e.startsWith(`@`)&&e.length>1){let r=t(e.slice(1));return(0,V.jsx)(`span`,{className:h(`font-semibold`,!r&&`text-primary`),style:r?{color:r}:void 0,children:e},n)}return e})}var ae=(0,z.memo)(function({message:e,colorFor:t,isLeader:n,onViewFull:r}){let i=e.fromMember===`user`,a=i?`You`:e.fromMember,o=i?`var(--color-primary)`:t(e.fromMember)??`var(--accent)`,s=!i&&n(e.fromMember),c=e.summary??``,u=e.toMember&&e.toMember!==`all`?e.toMember:null,d=(0,V.jsxs)(`div`,{className:h(`group relative flex gap-2.5 px-3 py-2 transition-colors hover:bg-surface-elevated/50`,i&&`bg-primary/5`),style:{boxShadow:`inset 3px 0 0 0 ${o}`},children:[e.fullSessionRef&&(0,V.jsx)(`button`,{type:`button`,onClick:()=>r(e),title:`View full transcript (AI's raw thinking / debug)`,"aria-label":`View full transcript`,className:`absolute right-1.5 top-1.5 hidden items-center rounded p-1 text-text-subtle/60 hover:bg-surface-elevated hover:text-text-secondary can-hover:group-hover:inline-flex`,children:(0,V.jsx)(l,{className:`size-3.5`})}),(0,V.jsx)(`div`,{className:`mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-full text-[11px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:o},"aria-hidden":!0,children:H(a)}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1 can-hover:pr-6`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5`,children:[(0,V.jsx)(`span`,{className:`text-sm font-semibold`,style:{color:i?`var(--color-foreground)`:o},children:a}),s&&(0,V.jsx)(`span`,{className:`rounded bg-surface-elevated px-1.5 py-px text-[10px] font-medium text-text-secondary`,children:`leader`}),u&&(0,V.jsxs)(`span`,{className:`text-[11px] text-text-subtle`,children:[`→ `,u]}),(0,V.jsx)(`span`,{className:`text-[11px] text-text-subtle`,children:U(e.createdAt)})]}),(0,V.jsx)(`div`,{className:`mt-0.5 whitespace-pre-wrap break-words text-sm leading-relaxed text-text-secondary`,children:W(c,t)})]})]});return e.fullSessionRef?(0,V.jsxs)(E,{children:[(0,V.jsx)(D,{asChild:!0,children:d}),(0,V.jsx)(w,{children:(0,V.jsxs)(T,{onClick:()=>r(e),children:[(0,V.jsx)(l,{className:`size-4`}),` View full transcript`]})})]}):d}),G={idle:`bg-text-subtle`,working:`bg-primary animate-pulse`,done:`bg-emerald-500`,error:`bg-destructive`},K={idle:`Idle`,working:`Working`,done:`Done`,error:`Error`},q=(0,z.memo)(function({members:e,liveStatus:t,typing:n,busy:i,onAdd:o,onEdit:s,onRemove:c}){return(0,V.jsxs)(`div`,{className:`flex flex-col gap-0.5 p-2`,children:[e.map(e=>{let r=n[e.name],o=t.get(e.id)??e.status;return(0,V.jsxs)(`div`,{className:`group flex items-center gap-2 rounded-md px-2 py-1.5`,children:[(0,V.jsx)(`span`,{className:`flex size-6 shrink-0 items-center justify-center rounded-full text-[10px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:e.color??`var(--accent)`},"aria-hidden":!0,children:e.name.slice(0,1).toUpperCase()}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.jsx)(`span`,{className:`truncate text-xs font-medium`,style:{color:e.color??`var(--color-foreground)`},children:e.name}),e.role===`leader`&&(0,V.jsx)(`span`,{className:`rounded-sm bg-accent-wash px-1 text-[9px] font-semibold uppercase text-primary`,children:`lead`})]}),(0,V.jsx)(`span`,{className:`block truncate text-[10px] text-text-subtle`,children:r?`typing…`:e.persona||K[o]})]}),(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 can-hover:opacity-0 can-hover:group-hover:opacity-100`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>s(e),disabled:i,"aria-label":`Edit ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground active:bg-surface-elevated disabled:opacity-40`,children:(0,V.jsx)(f,{className:`size-3.5`})}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>c(e),disabled:i,"aria-label":`Remove ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-destructive active:bg-surface-elevated disabled:opacity-40`,children:(0,V.jsx)(a,{className:`size-3.5`})})]}),(0,V.jsx)(`span`,{className:h(`size-2 shrink-0 rounded-full`,G[o]),title:K[o],"aria-hidden":!0})]},e.id)}),(0,V.jsxs)(`button`,{type:`button`,onClick:o,disabled:i,className:`mt-1 flex items-center gap-2 rounded-md px-2 py-2 text-xs font-medium text-primary hover:bg-surface-elevated active:bg-surface-elevated disabled:opacity-40`,children:[(0,V.jsx)(r,{className:`size-4`}),` Add member`]})]})}),J=`w-full min-h-[40px] rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`;function oe({open:e,member:t,projectName:n,providerId:r=`claude`,onSubmit:i,onClose:a}){let o=_(),[s,c]=(0,z.useState)(t?.name??``),[l,u]=(0,z.useState)(t?.persona??``),[d,f]=(0,z.useState)(t?.model??null),[p,h]=(0,z.useState)(t?.role===`leader`),[g,w]=(0,z.useState)(!1),[T,E]=(0,z.useState)(null),D=(0,z.useCallback)(async()=>{let e=s.trim();if(!e){E(`Name is required`);return}w(!0),E(null);try{await i({name:e,persona:l.trim()||null,model:d,role:p?`leader`:`member`}),a()}catch(e){E(e instanceof Error?e.message:`Failed to save member`),w(!1)}},[s,l,d,p,i,a]),O=t?.role===`leader`,k=(0,V.jsxs)(`div`,{className:`flex flex-col gap-3 px-1 py-1`,children:[(0,V.jsx)(`input`,{className:J,value:s,onChange:e=>c(e.target.value),placeholder:`Member name`,autoFocus:!0}),(0,V.jsx)(`input`,{className:J,value:l,onChange:e=>u(e.target.value),placeholder:`Persona (optional)`}),(0,V.jsx)(A,{value:d,onChange:f,projectName:n,providerId:r}),(0,V.jsxs)(`label`,{className:Y(O),children:[(0,V.jsx)(`input`,{type:`checkbox`,className:`size-4 accent-[var(--color-primary)]`,checked:p,disabled:O,onChange:e=>h(e.target.checked)}),(0,V.jsx)(`span`,{children:O?`Leader (reassign from another member)`:`Set as leader`})]}),T&&(0,V.jsx)(`p`,{className:`text-xs text-destructive`,children:T}),(0,V.jsxs)(`div`,{className:`flex justify-end gap-2 pt-1`,children:[(0,V.jsx)(v,{variant:`outline`,onClick:a,disabled:g,children:`Cancel`}),(0,V.jsxs)(v,{onClick:D,disabled:g,children:[g&&(0,V.jsx)(m,{className:`mr-1.5 size-4 animate-spin`}),t?`Save`:`Add member`]})]})]});if(!e)return null;let j=t?`Edit member`:`Add member`;return o?(0,V.jsx)(C,{open:!0,onClose:a,className:`flex max-h-[90vh] flex-col`,children:(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-col px-4 pb-2`,children:[(0,V.jsx)(`h2`,{className:`mb-2 text-base font-semibold text-foreground`,children:j}),k]})}):(0,V.jsx)(S,{open:!0,onOpenChange:e=>{e||a()},children:(0,V.jsxs)(b,{className:`flex flex-col sm:max-w-md`,children:[(0,V.jsx)(y,{children:(0,V.jsx)(x,{children:j})}),k]})})}function Y(e){return`flex items-center gap-2 text-sm text-text-secondary ${e?`opacity-60`:``}`}function X({messages:e,config:t,projectName:n}){return(0,V.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[t&&(0,V.jsx)(ce,{config:t}),e.map(e=>(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`span`,{className:`text-[10px] font-semibold uppercase tracking-wide text-text-subtle`,children:e.role===`user`?`User`:e.role===`assistant`?`Assistant`:e.role}),(0,V.jsx)(Z,{message:e,projectName:n})]},e.id)),e.length===0&&(0,V.jsx)(`p`,{className:`py-6 text-center text-sm text-text-subtle`,children:`Transcript is empty.`})]})}function Z({message:e,projectName:t}){let n=e.events??[];if(n.length===0)return e.content.trim()?(0,V.jsx)(R,{content:e.content}):null;let r=new Map;for(let e of n)e.type===`tool_result`&&e.toolUseId&&r.set(e.toolUseId,e);return(0,V.jsx)(`div`,{className:`flex flex-col gap-2`,children:n.map((e,n)=>{if(e.type===`text`)return e.content.trim()?(0,V.jsx)(R,{content:e.content},n):null;if(e.type===`thinking`)return(0,V.jsx)(se,{content:e.content},n);if(e.type===`tool_use`){let i=e.toolUseId?r.get(e.toolUseId):void 0;return(0,V.jsx)(I,{tool:e,result:i,completed:!!i,projectName:t},n)}return null})})}function se({content:e}){let[t,n]=(0,z.useState)(!1);return(0,V.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs text-text-subtle hover:text-text-secondary`,children:[(0,V.jsx)(o,{className:h(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,V.jsx)(i,{className:`size-3.5`}),(0,V.jsx)(`span`,{children:`Thinking`})]}),t&&(0,V.jsx)(`div`,{className:`border-t border-border px-3 py-2 text-xs leading-relaxed text-text-secondary`,children:(0,V.jsx)(R,{content:e})})]})}function ce({config:e}){let[t,n]=(0,z.useState)(!1),r=[[`Model`,e.model],[`Permission`,e.permissionMode],[`CWD`,e.cwd],[`Git branch`,e.gitBranch],[`CLI version`,e.version]].filter(([,e])=>e);return r.length===0?null:(0,V.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-text-secondary hover:text-foreground`,children:[(0,V.jsx)(o,{className:h(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,V.jsx)(p,{className:`size-3.5`}),(0,V.jsx)(`span`,{children:`Input config`})]}),t&&(0,V.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 border-t border-border px-3 py-2 text-xs`,children:r.map(([e,t])=>(0,V.jsxs)(`div`,{className:`contents`,children:[(0,V.jsx)(`dt`,{className:`text-text-subtle`,children:e}),(0,V.jsx)(`dd`,{className:`break-all font-mono text-text-secondary`,children:t})]},e))})]})}function le({groupId:e,message:t,onClose:n}){let r=_(),[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(!1),[c,l]=(0,z.useState)(null),u=t?.fullSessionRef??null;if((0,z.useEffect)(()=>{if(!t||!u)return;let n=!1;return a(null),l(null),s(!0),M(e,u).then(e=>{n||a(e)}).catch(e=>{n||l(e instanceof Error?e.message:`Failed to load transcript`)}).finally(()=>{n||s(!1)}),()=>{n=!0}},[e,u,t]),!t)return null;let d=(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[o&&(0,V.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,V.jsx)(m,{className:`size-5 animate-spin text-primary`})}),c&&(0,V.jsxs)(`div`,{className:`px-1 py-4 text-sm text-text-secondary`,children:[(0,V.jsx)(`p`,{className:`mb-2 font-medium text-foreground`,children:`Full transcript unavailable`}),(0,V.jsx)(`p`,{className:`text-xs text-text-subtle`,children:c}),t.summary&&(0,V.jsx)(`pre`,{className:`mt-4 whitespace-pre-wrap break-words rounded-md bg-surface-elevated p-3 text-xs leading-relaxed text-text-secondary`,children:t.summary})]}),!o&&!c&&i!=null&&(0,V.jsx)(`div`,{className:`px-1 py-1`,children:(0,V.jsx)(X,{messages:i.messages,config:i.config})})]}),f=`${t.fromMember} — full transcript`;return r?(0,V.jsx)(C,{open:!0,onClose:n,className:`max-h-[85vh] flex flex-col`,children:(0,V.jsxs)(`div`,{className:`flex flex-col min-h-0 px-4 pb-2`,children:[(0,V.jsx)(`h2`,{className:`mb-2 text-sm font-semibold text-foreground`,children:f}),d]})}):(0,V.jsx)(S,{open:!0,onOpenChange:e=>{e||n()},children:(0,V.jsxs)(b,{className:`flex max-h-[80vh] flex-col sm:max-w-2xl`,children:[(0,V.jsx)(y,{children:(0,V.jsx)(x,{className:`text-sm`,children:f})}),d]})})}function Q({metadata:e}){let t=e?.groupId??null,{activeProject:n}=g(ne(e=>({activeProject:e.activeProject}))),r=e?.projectName??n?.name??``,i=_(),{messages:a,members:o,status:l,typing:f,loading:p,isRunning:y,error:b,sendMessage:x,stop:S,resume:w}=ie(t,r),[T,E]=(0,z.useState)(``),[D,O]=(0,z.useState)(null),[A,M]=(0,z.useState)(!1),N=(0,z.useRef)(null),[P,F]=(0,z.useState)([]),[I,L]=(0,z.useState)(null),[R,B]=(0,z.useState)(!1),[H,U]=(0,z.useState)(null),[W,G]=(0,z.useState)(null),K=(0,z.useCallback)(async()=>{if(t)try{let e=await te(t);F(e.members),L(e.maxTurns)}catch{}},[t]),J=(0,z.useCallback)(async e=>{if(!t)return;let n=Math.max(1,Math.min(50,Math.floor(e)||1));L(n);try{await re(t,{maxTurns:n})}catch{K()}},[t,K]);(0,z.useEffect)(()=>{F([]),K()},[t,K]),(0,z.useEffect)(()=>{N.current?.scrollIntoView({block:`end`})},[a.length,f]);let Y=(0,z.useMemo)(()=>new Map(o.map(e=>[e.id,e.status])),[o]),X=P.length?P:o,Z=(0,z.useMemo)(()=>{let e=new Map(X.map(e=>[e.name,e.color]));return t=>e.get(t)??null},[X]),se=(0,z.useMemo)(()=>{let e=new Set(X.filter(e=>e.role===`leader`).map(e=>e.name));return t=>e.has(t)},[X]),ce=(0,z.useCallback)(async e=>{t&&(W?.member?await k(t,W.member.id,e):await j(t,e),await K())},[t,W,K]),Q=(0,z.useCallback)(async e=>{if(t){B(!0),U(null);try{await ee(t,e.id),await K()}catch(e){U(e instanceof Error?e.message:`Failed to remove member`)}finally{B(!1)}}},[t,K]),ue=(0,z.useCallback)(()=>{let e=T.trim();e&&(x(e),E(``))},[T,x]),$=Object.keys(f).filter(e=>f[e]);return t?(0,V.jsxs)(`div`,{className:`flex h-full min-h-0`,children:[(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,V.jsxs)(`div`,{className:`flex h-11 shrink-0 items-center justify-between border-b border-border px-3`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-foreground`,children:[(0,V.jsx)(`span`,{className:h(`size-2 rounded-full`,l===`active`?`bg-primary animate-pulse`:l===`paused`?`bg-amber-500`:`bg-text-subtle`)}),(0,V.jsx)(`span`,{className:`capitalize`,children:l})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[y?(0,V.jsxs)(v,{size:`sm`,variant:`outline`,onClick:S,className:`h-8`,children:[(0,V.jsx)(s,{className:`mr-1 size-3.5`}),` Stop`]}):l===`paused`?(0,V.jsxs)(v,{size:`sm`,variant:`outline`,onClick:w,className:`h-8`,children:[(0,V.jsx)(u,{className:`mr-1 size-3.5`}),` Resume`]}):null,(0,V.jsx)(`button`,{type:`button`,onClick:()=>M(e=>!e),className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground`,"aria-label":`Toggle roster`,children:(0,V.jsx)(d,{className:`size-4`})})]})]}),(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:p?(0,V.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,V.jsx)(m,{className:`size-5 animate-spin text-primary`})}):a.length===0?(0,V.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-center text-sm text-text-subtle`,children:`Send a message to start the group.`}):(0,V.jsxs)(`div`,{className:`flex flex-col py-2`,children:[a.map(e=>(0,V.jsx)(ae,{message:e,colorFor:Z,isLeader:se,onViewFull:O},e.id)),$.length>0&&(0,V.jsxs)(`div`,{className:`px-3 py-1.5 text-xs italic text-text-subtle`,children:[$.join(`, `),` `,$.length===1?`is`:`are`,` typing…`]}),(0,V.jsx)(`div`,{ref:N})]})}),b&&(0,V.jsx)(`div`,{className:`shrink-0 border-t border-border bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:b}),(0,V.jsx)(`div`,{className:`shrink-0 border-t border-border p-2`,children:(0,V.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,V.jsx)(`textarea`,{value:T,onChange:e=>E(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!i&&(e.preventDefault(),ue())},rows:1,placeholder:`Message the group…`,className:`max-h-32 min-h-[44px] flex-1 resize-none rounded-md border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`}),(0,V.jsx)(v,{onClick:ue,disabled:!T.trim(),className:`size-11 shrink-0 p-0`,"aria-label":`Send`,children:(0,V.jsx)(c,{className:`size-4`})})]})})]}),i?(0,V.jsxs)(C,{open:A,onClose:()=>M(!1),className:`flex max-h-[72vh] flex-col`,children:[(0,V.jsx)(`div`,{className:`flex h-11 shrink-0 items-center px-4 text-sm font-medium text-foreground`,children:`Members`}),(0,V.jsxs)(`div`,{className:`min-h-0 overflow-y-auto`,children:[I!==null&&(0,V.jsxs)(`label`,{className:`flex items-center gap-2 px-4 py-2 text-xs text-text-secondary`,children:[(0,V.jsx)(`span`,{children:`Reply cap`}),(0,V.jsx)(`input`,{type:`number`,min:1,max:50,value:I,onChange:e=>J(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,V.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),H&&(0,V.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:H}),(0,V.jsx)(q,{members:P,liveStatus:Y,typing:f,busy:R,onAdd:()=>G({member:null}),onEdit:e=>G({member:e}),onRemove:Q})]})]}):A&&(0,V.jsxs)(`div`,{className:`flex w-60 shrink-0 flex-col border-l border-border bg-panel`,children:[(0,V.jsx)(`div`,{className:`flex h-11 shrink-0 items-center border-b border-border px-3 text-sm font-medium text-foreground`,children:`Members`}),(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[I!==null&&(0,V.jsxs)(`label`,{className:`flex items-center gap-2 px-3 py-2 text-xs text-text-secondary`,children:[(0,V.jsx)(`span`,{children:`Reply cap`}),(0,V.jsx)(`input`,{type:`number`,min:1,max:50,value:I,onChange:e=>J(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,V.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),H&&(0,V.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:H}),(0,V.jsx)(q,{members:P,liveStatus:Y,typing:f,busy:R,onAdd:()=>G({member:null}),onEdit:e=>G({member:e}),onRemove:Q})]})]}),W&&(0,V.jsx)(oe,{open:!0,member:W.member,projectName:r,onSubmit:ce,onClose:()=>G(null)},W.member?.id??`add`),(0,V.jsx)(le,{groupId:t,message:D,onClose:()=>O(null)})]}):(0,V.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-sm text-text-subtle`,children:`No group selected.`})}export{Q as GroupChatTab};
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{$r as r,E as i,Kr as a,L as o,Mr as s,Sr as c,br as l,or as u,ti as d,tr as f,wr as p,xn as m}from"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as h}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import"./panel-store-BJhazigC.js";import{i as g}from"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import"./context-menu-BCuZYfWC.js";import"./file-store-BQ41vIs5.js";import{n as _}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import"./git-repo-store-CKB5fdNP.js";import{t as v}from"./button-C9ZXWb3b.js";import{a as y,n as b,o as x,t as S}from"./dialog-Dn_2tuYa.js";import{t as C}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{n as w,r as T,t as E,u as D}from"./adaptive-context-menu-C4jNSORA.js";import"./fs-api-CFtQzsIJ.js";import"./ws-auth-CbF6GqxP.js";import{_n as O,bn as k,dn as A,fn as j,gn as ee,hn as M,mn as te,oi as ne,pn as N,vn as P,xn as re,yn as F}from"./index-EznfgwH9.js";import"./agent-session-sheet-store-BAfLnsLX.js";import"./libesm-B6LsX5wH.js";import{n as I}from"./tool-cards-DXV9SEE8.js";import"./use-blob-url-Clm7wbB_.js";import"./design-canvas-check-BIHc2d_k.js";import"./db-ai-tools-CVbbW_MZ.js";import{t as L}from"./use-websocket-RuENPZ_x.js";import"./lib-5Chotbwm.js";import{t as R}from"./markdown-renderer-zuzkV4A5.js";import"./run-in-terminal-ujoc25vj.js";var z=e(t(),1),B=8e3;function ie(e,t){let[n,r]=(0,z.useState)([]),[i,a]=(0,z.useState)([]),[o,s]=(0,z.useState)(`idle`),[c,l]=(0,z.useState)({}),[u,d]=(0,z.useState)(!1),[f,p]=(0,z.useState)(!1),[m,h]=(0,z.useState)(!1),[g,_]=(0,z.useState)(null),v=(0,z.useRef)(new Map),y=(0,z.useCallback)(e=>{l(t=>{if(!t[e])return t;let n={...t};return delete n[e],n})},[]),b=(0,z.useCallback)(e=>{let t;try{t=JSON.parse(e.data)}catch{return}switch(t.type){case`ping`:return;case`group_state`:p(!0),s(t.status),a(t.members),h(t.status===`active`);return;case`group_message`:y(t.message.fromMember),r(e=>e.some(e=>e.id===t.message.id)?e:[...e,t.message]);return;case`member_status`:a(e=>e.map(e=>e.id===t.memberId?{...e,status:t.status}:e));return;case`typing`:{l(e=>({...e,[t.member]:!0}));let e=v.current,n=e.get(t.member);n&&clearTimeout(n),e.set(t.member,setTimeout(()=>y(t.member),B));return}case`turn_done`:return;case`group_done`:h(!1),s(`idle`),l({});return;case`error`:_(t.message),h(!1);return}},[y]),{send:x}=L({url:e&&t?`/ws/project/${encodeURIComponent(t)}/group/${encodeURIComponent(e)}`:``,onMessage:b,autoConnect:!!e&&!!t});return(0,z.useEffect)(()=>{let t=!1;r([]),a([]),l({}),s(`idle`),h(!1),_(null),p(!1);for(let e of v.current.values())clearTimeout(e);if(v.current.clear(),e)return d(!0),N(e,{limit:200}).then(e=>{t||r(t=>{let n=new Set(e.messages.map(e=>e.id)),r=t.filter(e=>!n.has(e.id));return[...e.messages,...r]})}).catch(e=>{t||_(e instanceof Error?e.message:`Failed to load feed`)}).finally(()=>{t||d(!1)}),()=>{t=!0}},[e]),{messages:n,members:i,status:o,typing:c,loading:u,isConnected:f,isRunning:m,error:g,sendMessage:(0,z.useCallback)(t=>{let n=t.trim();!n||!e||(_(null),h(!0),f?x(JSON.stringify({type:`message`,content:n})):P(e,n).catch(e=>{_(e instanceof Error?e.message:`Failed to send message`),h(!1)}))},[e,f,x]),stop:(0,z.useCallback)(()=>{e&&(f?x(JSON.stringify({type:`stop`})):F(e).catch(()=>{}),s(`paused`),h(!1))},[e,f,x]),resume:(0,z.useCallback)(()=>{e&&O(e).then(()=>{s(`active`),h(!0)}).catch(e=>_(e instanceof Error?e.message:`Failed to resume`))},[e])}}var V=n();function H(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function U(e){try{let t=e<0xe8d4a51000?e*1e3:e;return new Date(t).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}catch{return``}}function W(e,t){return e.split(/(@[\p{L}\p{N}_]+)/gu).map((e,n)=>{if(e.startsWith(`@`)&&e.length>1){let r=t(e.slice(1));return(0,V.jsx)(`span`,{className:h(`font-semibold`,!r&&`text-primary`),style:r?{color:r}:void 0,children:e},n)}return e})}var ae=(0,z.memo)(function({message:e,colorFor:t,isLeader:n,onViewFull:r}){let i=e.fromMember===`user`,a=i?`You`:e.fromMember,o=i?`var(--color-primary)`:t(e.fromMember)??`var(--accent)`,s=!i&&n(e.fromMember),c=e.summary??``,u=e.toMember&&e.toMember!==`all`?e.toMember:null,d=(0,V.jsxs)(`div`,{className:h(`group relative flex gap-2.5 px-3 py-2 transition-colors hover:bg-surface-elevated/50`,i&&`bg-primary/5`),style:{boxShadow:`inset 3px 0 0 0 ${o}`},children:[e.fullSessionRef&&(0,V.jsx)(`button`,{type:`button`,onClick:()=>r(e),title:`View full transcript (AI's raw thinking / debug)`,"aria-label":`View full transcript`,className:`absolute right-1.5 top-1.5 hidden items-center rounded p-1 text-text-subtle/60 hover:bg-surface-elevated hover:text-text-secondary can-hover:group-hover:inline-flex`,children:(0,V.jsx)(l,{className:`size-3.5`})}),(0,V.jsx)(`div`,{className:`mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-full text-[11px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:o},"aria-hidden":!0,children:H(a)}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1 can-hover:pr-6`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5`,children:[(0,V.jsx)(`span`,{className:`text-sm font-semibold`,style:{color:i?`var(--color-foreground)`:o},children:a}),s&&(0,V.jsx)(`span`,{className:`rounded bg-surface-elevated px-1.5 py-px text-[10px] font-medium text-text-secondary`,children:`leader`}),u&&(0,V.jsxs)(`span`,{className:`text-[11px] text-text-subtle`,children:[`→ `,u]}),(0,V.jsx)(`span`,{className:`text-[11px] text-text-subtle`,children:U(e.createdAt)})]}),(0,V.jsx)(`div`,{className:`mt-0.5 whitespace-pre-wrap break-words text-sm leading-relaxed text-text-secondary`,children:W(c,t)})]})]});return e.fullSessionRef?(0,V.jsxs)(E,{children:[(0,V.jsx)(D,{asChild:!0,children:d}),(0,V.jsx)(w,{children:(0,V.jsxs)(T,{onClick:()=>r(e),children:[(0,V.jsx)(l,{className:`size-4`}),` View full transcript`]})})]}):d}),G={idle:`bg-text-subtle`,working:`bg-primary animate-pulse`,done:`bg-emerald-500`,error:`bg-destructive`},K={idle:`Idle`,working:`Working`,done:`Done`,error:`Error`},q=(0,z.memo)(function({members:e,liveStatus:t,typing:n,busy:i,onAdd:o,onEdit:s,onRemove:c}){return(0,V.jsxs)(`div`,{className:`flex flex-col gap-0.5 p-2`,children:[e.map(e=>{let r=n[e.name],o=t.get(e.id)??e.status;return(0,V.jsxs)(`div`,{className:`group flex items-center gap-2 rounded-md px-2 py-1.5`,children:[(0,V.jsx)(`span`,{className:`flex size-6 shrink-0 items-center justify-center rounded-full text-[10px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:e.color??`var(--accent)`},"aria-hidden":!0,children:e.name.slice(0,1).toUpperCase()}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.jsx)(`span`,{className:`truncate text-xs font-medium`,style:{color:e.color??`var(--color-foreground)`},children:e.name}),e.role===`leader`&&(0,V.jsx)(`span`,{className:`rounded-sm bg-accent-wash px-1 text-[9px] font-semibold uppercase text-primary`,children:`lead`})]}),(0,V.jsx)(`span`,{className:`block truncate text-[10px] text-text-subtle`,children:r?`typing…`:e.persona||K[o]})]}),(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 can-hover:opacity-0 can-hover:group-hover:opacity-100`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>s(e),disabled:i,"aria-label":`Edit ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground active:bg-surface-elevated disabled:opacity-40`,children:(0,V.jsx)(f,{className:`size-3.5`})}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>c(e),disabled:i,"aria-label":`Remove ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-destructive active:bg-surface-elevated disabled:opacity-40`,children:(0,V.jsx)(a,{className:`size-3.5`})})]}),(0,V.jsx)(`span`,{className:h(`size-2 shrink-0 rounded-full`,G[o]),title:K[o],"aria-hidden":!0})]},e.id)}),(0,V.jsxs)(`button`,{type:`button`,onClick:o,disabled:i,className:`mt-1 flex items-center gap-2 rounded-md px-2 py-2 text-xs font-medium text-primary hover:bg-surface-elevated active:bg-surface-elevated disabled:opacity-40`,children:[(0,V.jsx)(r,{className:`size-4`}),` Add member`]})]})}),J=`w-full min-h-[40px] rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`;function oe({open:e,member:t,projectName:n,providerId:r=`claude`,onSubmit:i,onClose:a}){let o=_(),[s,c]=(0,z.useState)(t?.name??``),[l,u]=(0,z.useState)(t?.persona??``),[d,f]=(0,z.useState)(t?.model??null),[p,h]=(0,z.useState)(t?.role===`leader`),[g,w]=(0,z.useState)(!1),[T,E]=(0,z.useState)(null),D=(0,z.useCallback)(async()=>{let e=s.trim();if(!e){E(`Name is required`);return}w(!0),E(null);try{await i({name:e,persona:l.trim()||null,model:d,role:p?`leader`:`member`}),a()}catch(e){E(e instanceof Error?e.message:`Failed to save member`),w(!1)}},[s,l,d,p,i,a]),O=t?.role===`leader`,k=(0,V.jsxs)(`div`,{className:`flex flex-col gap-3 px-1 py-1`,children:[(0,V.jsx)(`input`,{className:J,value:s,onChange:e=>c(e.target.value),placeholder:`Member name`,autoFocus:!0}),(0,V.jsx)(`input`,{className:J,value:l,onChange:e=>u(e.target.value),placeholder:`Persona (optional)`}),(0,V.jsx)(A,{value:d,onChange:f,projectName:n,providerId:r}),(0,V.jsxs)(`label`,{className:Y(O),children:[(0,V.jsx)(`input`,{type:`checkbox`,className:`size-4 accent-[var(--color-primary)]`,checked:p,disabled:O,onChange:e=>h(e.target.checked)}),(0,V.jsx)(`span`,{children:O?`Leader (reassign from another member)`:`Set as leader`})]}),T&&(0,V.jsx)(`p`,{className:`text-xs text-destructive`,children:T}),(0,V.jsxs)(`div`,{className:`flex justify-end gap-2 pt-1`,children:[(0,V.jsx)(v,{variant:`outline`,onClick:a,disabled:g,children:`Cancel`}),(0,V.jsxs)(v,{onClick:D,disabled:g,children:[g&&(0,V.jsx)(m,{className:`mr-1.5 size-4 animate-spin`}),t?`Save`:`Add member`]})]})]});if(!e)return null;let j=t?`Edit member`:`Add member`;return o?(0,V.jsx)(C,{open:!0,onClose:a,className:`flex max-h-[90vh] flex-col`,children:(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-col px-4 pb-2`,children:[(0,V.jsx)(`h2`,{className:`mb-2 text-base font-semibold text-foreground`,children:j}),k]})}):(0,V.jsx)(S,{open:!0,onOpenChange:e=>{e||a()},children:(0,V.jsxs)(b,{className:`flex flex-col sm:max-w-md`,children:[(0,V.jsx)(y,{children:(0,V.jsx)(x,{children:j})}),k]})})}function Y(e){return`flex items-center gap-2 text-sm text-text-secondary ${e?`opacity-60`:``}`}function X({messages:e,config:t,projectName:n}){return(0,V.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[t&&(0,V.jsx)(ce,{config:t}),e.map(e=>(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`span`,{className:`text-[10px] font-semibold uppercase tracking-wide text-text-subtle`,children:e.role===`user`?`User`:e.role===`assistant`?`Assistant`:e.role}),(0,V.jsx)(Z,{message:e,projectName:n})]},e.id)),e.length===0&&(0,V.jsx)(`p`,{className:`py-6 text-center text-sm text-text-subtle`,children:`Transcript is empty.`})]})}function Z({message:e,projectName:t}){let n=e.events??[];if(n.length===0)return e.content.trim()?(0,V.jsx)(R,{content:e.content}):null;let r=new Map;for(let e of n)e.type===`tool_result`&&e.toolUseId&&r.set(e.toolUseId,e);return(0,V.jsx)(`div`,{className:`flex flex-col gap-2`,children:n.map((e,n)=>{if(e.type===`text`)return e.content.trim()?(0,V.jsx)(R,{content:e.content},n):null;if(e.type===`thinking`)return(0,V.jsx)(se,{content:e.content},n);if(e.type===`tool_use`){let i=e.toolUseId?r.get(e.toolUseId):void 0;return(0,V.jsx)(I,{tool:e,result:i,completed:!!i,projectName:t},n)}return null})})}function se({content:e}){let[t,n]=(0,z.useState)(!1);return(0,V.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs text-text-subtle hover:text-text-secondary`,children:[(0,V.jsx)(o,{className:h(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,V.jsx)(i,{className:`size-3.5`}),(0,V.jsx)(`span`,{children:`Thinking`})]}),t&&(0,V.jsx)(`div`,{className:`border-t border-border px-3 py-2 text-xs leading-relaxed text-text-secondary`,children:(0,V.jsx)(R,{content:e})})]})}function ce({config:e}){let[t,n]=(0,z.useState)(!1),r=[[`Model`,e.model],[`Permission`,e.permissionMode],[`CWD`,e.cwd],[`Git branch`,e.gitBranch],[`CLI version`,e.version]].filter(([,e])=>e);return r.length===0?null:(0,V.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-text-secondary hover:text-foreground`,children:[(0,V.jsx)(o,{className:h(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,V.jsx)(p,{className:`size-3.5`}),(0,V.jsx)(`span`,{children:`Input config`})]}),t&&(0,V.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 border-t border-border px-3 py-2 text-xs`,children:r.map(([e,t])=>(0,V.jsxs)(`div`,{className:`contents`,children:[(0,V.jsx)(`dt`,{className:`text-text-subtle`,children:e}),(0,V.jsx)(`dd`,{className:`break-all font-mono text-text-secondary`,children:t})]},e))})]})}function le({groupId:e,message:t,onClose:n}){let r=_(),[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(!1),[c,l]=(0,z.useState)(null),u=t?.fullSessionRef??null;if((0,z.useEffect)(()=>{if(!t||!u)return;let n=!1;return a(null),l(null),s(!0),M(e,u).then(e=>{n||a(e)}).catch(e=>{n||l(e instanceof Error?e.message:`Failed to load transcript`)}).finally(()=>{n||s(!1)}),()=>{n=!0}},[e,u,t]),!t)return null;let d=(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[o&&(0,V.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,V.jsx)(m,{className:`size-5 animate-spin text-primary`})}),c&&(0,V.jsxs)(`div`,{className:`px-1 py-4 text-sm text-text-secondary`,children:[(0,V.jsx)(`p`,{className:`mb-2 font-medium text-foreground`,children:`Full transcript unavailable`}),(0,V.jsx)(`p`,{className:`text-xs text-text-subtle`,children:c}),t.summary&&(0,V.jsx)(`pre`,{className:`mt-4 whitespace-pre-wrap break-words rounded-md bg-surface-elevated p-3 text-xs leading-relaxed text-text-secondary`,children:t.summary})]}),!o&&!c&&i!=null&&(0,V.jsx)(`div`,{className:`px-1 py-1`,children:(0,V.jsx)(X,{messages:i.messages,config:i.config})})]}),f=`${t.fromMember} — full transcript`;return r?(0,V.jsx)(C,{open:!0,onClose:n,className:`max-h-[85vh] flex flex-col`,children:(0,V.jsxs)(`div`,{className:`flex flex-col min-h-0 px-4 pb-2`,children:[(0,V.jsx)(`h2`,{className:`mb-2 text-sm font-semibold text-foreground`,children:f}),d]})}):(0,V.jsx)(S,{open:!0,onOpenChange:e=>{e||n()},children:(0,V.jsxs)(b,{className:`flex max-h-[80vh] flex-col sm:max-w-2xl`,children:[(0,V.jsx)(y,{children:(0,V.jsx)(x,{className:`text-sm`,children:f})}),d]})})}function Q({metadata:e}){let t=e?.groupId??null,{activeProject:n}=g(ne(e=>({activeProject:e.activeProject}))),r=e?.projectName??n?.name??``,i=_(),{messages:a,members:o,status:l,typing:f,loading:p,isRunning:y,error:b,sendMessage:x,stop:S,resume:w}=ie(t,r),[T,E]=(0,z.useState)(``),[D,O]=(0,z.useState)(null),[A,M]=(0,z.useState)(!1),N=(0,z.useRef)(null),[P,F]=(0,z.useState)([]),[I,L]=(0,z.useState)(null),[R,B]=(0,z.useState)(!1),[H,U]=(0,z.useState)(null),[W,G]=(0,z.useState)(null),K=(0,z.useCallback)(async()=>{if(t)try{let e=await te(t);F(e.members),L(e.maxTurns)}catch{}},[t]),J=(0,z.useCallback)(async e=>{if(!t)return;let n=Math.max(1,Math.min(50,Math.floor(e)||1));L(n);try{await re(t,{maxTurns:n})}catch{K()}},[t,K]);(0,z.useEffect)(()=>{F([]),K()},[t,K]),(0,z.useEffect)(()=>{N.current?.scrollIntoView({block:`end`})},[a.length,f]);let Y=(0,z.useMemo)(()=>new Map(o.map(e=>[e.id,e.status])),[o]),X=P.length?P:o,Z=(0,z.useMemo)(()=>{let e=new Map(X.map(e=>[e.name,e.color]));return t=>e.get(t)??null},[X]),se=(0,z.useMemo)(()=>{let e=new Set(X.filter(e=>e.role===`leader`).map(e=>e.name));return t=>e.has(t)},[X]),ce=(0,z.useCallback)(async e=>{t&&(W?.member?await k(t,W.member.id,e):await j(t,e),await K())},[t,W,K]),Q=(0,z.useCallback)(async e=>{if(t){B(!0),U(null);try{await ee(t,e.id),await K()}catch(e){U(e instanceof Error?e.message:`Failed to remove member`)}finally{B(!1)}}},[t,K]),ue=(0,z.useCallback)(()=>{let e=T.trim();e&&(x(e),E(``))},[T,x]),$=Object.keys(f).filter(e=>f[e]);return t?(0,V.jsxs)(`div`,{className:`flex h-full min-h-0`,children:[(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,V.jsxs)(`div`,{className:`flex h-11 shrink-0 items-center justify-between border-b border-border px-3`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-foreground`,children:[(0,V.jsx)(`span`,{className:h(`size-2 rounded-full`,l===`active`?`bg-primary animate-pulse`:l===`paused`?`bg-amber-500`:`bg-text-subtle`)}),(0,V.jsx)(`span`,{className:`capitalize`,children:l})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[y?(0,V.jsxs)(v,{size:`sm`,variant:`outline`,onClick:S,className:`h-8`,children:[(0,V.jsx)(s,{className:`mr-1 size-3.5`}),` Stop`]}):l===`paused`?(0,V.jsxs)(v,{size:`sm`,variant:`outline`,onClick:w,className:`h-8`,children:[(0,V.jsx)(u,{className:`mr-1 size-3.5`}),` Resume`]}):null,(0,V.jsx)(`button`,{type:`button`,onClick:()=>M(e=>!e),className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground`,"aria-label":`Toggle roster`,children:(0,V.jsx)(d,{className:`size-4`})})]})]}),(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:p?(0,V.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,V.jsx)(m,{className:`size-5 animate-spin text-primary`})}):a.length===0?(0,V.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-center text-sm text-text-subtle`,children:`Send a message to start the group.`}):(0,V.jsxs)(`div`,{className:`flex flex-col py-2`,children:[a.map(e=>(0,V.jsx)(ae,{message:e,colorFor:Z,isLeader:se,onViewFull:O},e.id)),$.length>0&&(0,V.jsxs)(`div`,{className:`px-3 py-1.5 text-xs italic text-text-subtle`,children:[$.join(`, `),` `,$.length===1?`is`:`are`,` typing…`]}),(0,V.jsx)(`div`,{ref:N})]})}),b&&(0,V.jsx)(`div`,{className:`shrink-0 border-t border-border bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:b}),(0,V.jsx)(`div`,{className:`shrink-0 border-t border-border p-2`,children:(0,V.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,V.jsx)(`textarea`,{value:T,onChange:e=>E(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!i&&(e.preventDefault(),ue())},rows:1,placeholder:`Message the group…`,className:`max-h-32 min-h-[44px] flex-1 resize-none rounded-md border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`}),(0,V.jsx)(v,{onClick:ue,disabled:!T.trim(),className:`size-11 shrink-0 p-0`,"aria-label":`Send`,children:(0,V.jsx)(c,{className:`size-4`})})]})})]}),i?(0,V.jsxs)(C,{open:A,onClose:()=>M(!1),className:`flex max-h-[72vh] flex-col`,children:[(0,V.jsx)(`div`,{className:`flex h-11 shrink-0 items-center px-4 text-sm font-medium text-foreground`,children:`Members`}),(0,V.jsxs)(`div`,{className:`min-h-0 overflow-y-auto`,children:[I!==null&&(0,V.jsxs)(`label`,{className:`flex items-center gap-2 px-4 py-2 text-xs text-text-secondary`,children:[(0,V.jsx)(`span`,{children:`Reply cap`}),(0,V.jsx)(`input`,{type:`number`,min:1,max:50,value:I,onChange:e=>J(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,V.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),H&&(0,V.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:H}),(0,V.jsx)(q,{members:P,liveStatus:Y,typing:f,busy:R,onAdd:()=>G({member:null}),onEdit:e=>G({member:e}),onRemove:Q})]})]}):A&&(0,V.jsxs)(`div`,{className:`flex w-60 shrink-0 flex-col border-l border-border bg-panel`,children:[(0,V.jsx)(`div`,{className:`flex h-11 shrink-0 items-center border-b border-border px-3 text-sm font-medium text-foreground`,children:`Members`}),(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[I!==null&&(0,V.jsxs)(`label`,{className:`flex items-center gap-2 px-3 py-2 text-xs text-text-secondary`,children:[(0,V.jsx)(`span`,{children:`Reply cap`}),(0,V.jsx)(`input`,{type:`number`,min:1,max:50,value:I,onChange:e=>J(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,V.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),H&&(0,V.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:H}),(0,V.jsx)(q,{members:P,liveStatus:Y,typing:f,busy:R,onAdd:()=>G({member:null}),onEdit:e=>G({member:e}),onRemove:Q})]})]}),W&&(0,V.jsx)(oe,{open:!0,member:W.member,projectName:r,onSubmit:ce,onClose:()=>G(null)},W.member?.id??`add`),(0,V.jsx)(le,{groupId:t,message:D,onClose:()=>O(null)})]}):(0,V.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-sm text-text-subtle`,children:`No group selected.`})}export{Q as GroupChatTab};
@@ -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{M as r,N as i,P as a,j as o}from"./vendor-ui-BTSIXzhZ.js";import{Jt as s,Kr as c,Lr as l,M as u,Mr as d,P as f,Zr as p,c as m,li as h,m as g,n as _,on as v,or as y,r as b,tt as x,xn as S,y as C}from"./icons-BwyIKaTT.js";import{a as w,k as T,n as ee,r as E}from"./api-client-xQDlhUTu.js";import{t as D}from"./settings-store-B4mLp19V.js";import{n as O}from"./utils-Bslrbb-G.js";import{n as k}from"./portal-container-context-NBi-KGK0.js";import{K as A,et as te}from"./window-store-DqX_qmkQ.js";import{t as ne}from"./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 re}from"./tab-store-D5I52eLN.js";import{n as ie}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import{t as j}from"./button-C9ZXWb3b.js";import{a as ae,n as oe,o as M,r as se,t as N}from"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import{i as P,m as F,r as I,t as L}from"./dropdown-menu-BQidk_OJ.js";import"./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"./use-db-driver-installed-anzWkGi5.js";import"./db-sidebar-reveal-_qw0CliT.js";import{r as ce}from"./db-types-CNhENouW.js";import{E as le,S as ue,b as de,c as fe,g as pe,h as me,k as he,n as ge,p as _e}from"./explorer-model-BtJN4MZ9.js";import{L as R,h as ve,x as ye}from"./db-explorer-store-BmpvDHz6.js";import{A as be,B as xe,C as Se,D as Ce,E as we,F as Te,G as Ee,H as De,I as Oe,L as ke,M as z,N as Ae,O as je,P as Me,R as B,S as Ne,T as Pe,U as Fe,V as Ie,W as Le,_ as Re,a as ze,b as Be,c as Ve,d as He,f as Ue,h as We,j as Ge,k as Ke,n as qe,o as Je,r as Ye,s as Xe,t as Ze,u as Qe,v as V,w as $e,x as et,y as tt,z as nt}from"./impexp-state-BWKOuRGj.js";import"./scroll-area-DOlQJGZp.js";import{$n as rt,ar as it,d as at,g as H,h as U,ir as ot,mi as st,rr as ct,u as W}from"./index-CPBujJc_.js";import"./use-monaco-theme-ArU1f9T6.js";import{t as lt}from"./use-db-read-BCYhIrJM.js";import{i as ut,n as dt,r as ft}from"./db-tab-parts-tgVIgcs5.js";import"./use-opener-focus-CDRKhHwX.js";import{r as pt,t as mt}from"./filter-dialog-frame-BkEbqBA4.js";import"./sql-completion-provider-CS-ElfgJ.js";import{n as ht,t as gt}from"./use-sql-schema-info-BQXSMw6p.js";import{n as _t}from"./format-bytes-he3TR0bV.js";var G=e(t(),1);function vt(e,t){let n=JSON.stringify(e.target),r=(0,G.useMemo)(()=>JSON.parse(n),[n]),i=r?.kind===`connection`?r.connectionId:null,a=R(e=>i===null?void 0:e.connections.find(e=>e.id===i)),o=R(e=>e.loaded);(0,G.useEffect)(()=>{o||ve()},[o]);let s=a&&!pe(a)?{kind:`connection`,connectionId:a.id}:null,c=lt(s,s?`/databases`:null,t),l=a&&c.data?[...he(a,c.data)].sort((e,t)=>e.localeCompare(t)):null,u=s?{...c,data:l}:null,d=lt(r,r?`/objects`:null,t),f=!!a&&_e(a.type),p=(0,G.useMemo)(()=>f&&d.data?ue(d.data):[],[f,d.data]),m=r?.kind===`connection`&&a?{conn:a.id,database:r.database??de(a)}:null,h=D(e=>m?e.dbExplorerView.schemas[fe(m)]:void 0),g=f?e.schema??me(p,h):null,_=(0,G.useMemo)(()=>(d.data?.objects??[]).filter(e=>ge.has(e.kind)&&(g===null||e.schema===g)),[d.data,g]),v=r?.kind===`file`?`sqlite`:a?.type,y=r?.kind===`file`?A(r.path):r?r.database??(a?de(a)??a.name:null):null;return{target:r,conn:a,readonly:a?.readonly===1,dbType:v,dialect:v?ce(v):void 0,name:y,databases:u,objects:d,schemas:p.map(e=>e.schema),schema:g,relations:_}}var yt=(e,t=``)=>`/api/db/impexp/jobs/${encodeURIComponent(e)}${t}`;function bt(e,t){let[n,r]=(0,G.useState)(null),[i,a]=(0,G.useState)([]),[o,s]=(0,G.useState)([]),[c,l]=(0,G.useState)(!1),u=(0,G.useRef)(t);u.current=t;let d=(0,G.useRef)(o);d.current=o;let f=(0,G.useRef)(e?.id??null),p=e?.id??null;(0,G.useEffect)(()=>{if(!p)return;f.current=p;let e=new AbortController,t=0,n,i=async()=>{try{let a=await E.get(yt(p,`?since=${t}`),{signal:e.signal});if(e.signal.aborted||f.current!==p)return;t=a.messageCount,r(a),a.messages.length&&s(e=>[...e,...a.messages]),a.state===`running`&&(n=setTimeout(i,Fe))}catch(t){if(e.signal.aborted||f.current!==p)return;if(t instanceof ee&&t.status===404){r(null),s(e=>[...e,{level:`warning`,text:t.message,time:Date.now()}]),u.current(null);return}n=setTimeout(i,Fe*2)}};return i(),()=>{e.abort(),clearTimeout(n)}},[p]);let m=(0,G.useCallback)(async(e,t,n,i,o)=>{l(!0);try{let{jobId:c}=await E.post(e,t);f.current=c;let l=d.current;a(e=>o?[...e,...l]:[]),s([]),r(Oe(c,n,i,Date.now())),u.current({id:c,kind:n,rows:i})}catch(e){T.error(n===`export`?`The export did not start`:`The import did not start`,{description:e.message})}finally{l(!1)}},[]),h=(0,G.useCallback)(()=>{let e=f.current;e&&E.post(yt(e,`/stop`)).then(t=>{f.current===e&&r(t)}).catch(e=>T.error(`Could not stop the job`,{description:e.message}))},[]),g=(0,G.useCallback)(e=>{let t=f.current;t&&E.post(yt(t,`/download`),{name:e}).then(e=>st(pt(e.ticket),e.fileName)).catch(t=>T.error(`Could not download ${e}`,{description:t.message}))},[]);return{status:n,messages:i.length?[...i,...o]:o,busy:c||n?.state===`running`,start:m,stop:h,download:g}}function xt(e,t,n){return new Promise((r,i)=>{if(n.aborted){i(new DOMException(`Upload aborted`,`AbortError`));return}let a=new XMLHttpRequest;a.open(`PUT`,`/api/db/impexp/uploads?name=${encodeURIComponent(e.name)}`);let o=w();o&&a.setRequestHeader(`Authorization`,`Bearer ${o}`),a.setRequestHeader(`x-ppm-client`,`web`),a.upload.onprogress=e=>{e.lengthComputable&&t({loaded:e.loaded,total:e.total})};let s=()=>a.abort();n.addEventListener(`abort`,s);let c=()=>n.removeEventListener(`abort`,s);a.onload=()=>{c();let e={};try{e=JSON.parse(a.responseText)}catch{}a.status>=200&&a.status<300&&e.ok!==!1&&e.data?r(e.data):i(Error(e.error??`The server answered HTTP ${a.status}`))},a.onerror=()=>{c(),i(Error(`The connection to PPM was lost during the upload`))},a.onabort=()=>{c(),i(new DOMException(`Upload aborted`,`AbortError`))},a.send(e)})}function St(e){E.del(`/api/db/impexp/uploads/${encodeURIComponent(e)}`).catch(()=>{})}var K=n(),q=`inline-flex h-[26px] shrink-0 items-center gap-1.5 rounded-[5px] border border-border bg-surface px-2.5 text-xs text-text-primary can-hover:hover:bg-surface-hover disabled:cursor-not-allowed disabled:opacity-50`,Ct=`h-[26px] w-full min-w-0 rounded-[5px] border border-border bg-surface px-2 text-xs text-text-primary placeholder:text-text-subtle focus:border-ring focus:outline-none`;function wt({icon:e,children:t}){return(0,K.jsxs)(`h3`,{className:`my-2.5 flex items-center justify-center gap-2 text-[17px] font-normal text-text-primary`,children:[(0,K.jsx)(e,{className:`size-5 shrink-0 text-text-2`}),t]})}function J({checked:e,onChange:t,label:n,disabled:r}){return(0,K.jsxs)(`label`,{className:O(`flex min-w-0 items-center gap-2 text-xs text-text-primary`,r?`cursor-not-allowed opacity-55`:`cursor-pointer`),children:[(0,K.jsx)(`input`,{type:`checkbox`,checked:e,disabled:r,onChange:e=>t(e.target.checked),className:`size-[15px] shrink-0 accent-primary`}),(0,K.jsx)(`span`,{className:`min-w-0`,children:n})]})}function Tt({title:e,collapsed:t,onToggle:n,className:r,children:i}){return(0,K.jsxs)(`section`,{"aria-label":e,className:O(`flex min-h-0 flex-col border-b border-border last:border-b-0`,t?`shrink-0`:r),children:[(0,K.jsx)(ot,{title:e,collapsed:t,onToggle:n}),!t&&(0,K.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:i})]})}function Et({title:e,message:t,onClose:n}){return(0,K.jsx)(N,{open:!0,onOpenChange:e=>{e||n()},children:(0,K.jsxs)(oe,{className:`max-h-[calc(100dvh-4rem)] grid-rows-[auto_minmax(0,1fr)_auto] gap-3 p-5 sm:max-w-[560px]`,children:[(0,K.jsxs)(ae,{children:[(0,K.jsx)(M,{className:`text-[15px]`,children:e}),(0,K.jsx)(se,{className:`sr-only`,children:`The error the row stopped with`})]}),(0,K.jsx)(`pre`,{className:`min-h-0 overflow-auto rounded-md border border-border bg-panel-2 p-3 font-mono text-xs break-words whitespace-pre-wrap text-text-primary`,children:t}),(0,K.jsx)(`div`,{className:`flex justify-end`,children:(0,K.jsx)(j,{type:`button`,size:`sm`,variant:`outline`,onClick:n,children:`Close`})})]})})}var Dt=`(not selected)`;function Ot({importing:e,onPick:t}){let n=D(e=>e.dbExplorerView.current),r=R(e=>n?e.connections.find(e=>e.id===n.conn):void 0);if(!n||!r)return null;let i=e&&r.readonly===1,a=le(n,r),o=n.database?`${r.name} / ${n.database}`:r.name;return(0,K.jsx)(`button`,{type:`button`,disabled:i,className:q,title:i?`${r.name} is read only: nothing can be imported into it`:o,onClick:()=>t({target:{kind:`connection`,connectionId:r.id,...a?{database:a}:{}},schema:null}),children:`Current DB`})}function kt({db:e,ctx:t,importing:n,showSchema:r,onChange:i}){let a=(0,G.useId)(),o=R(e=>e.connections),s=(0,G.useMemo)(()=>[...o].sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`})),[o]),c=e.target,l=t.conn,u=e=>{e===`file`||!e||i({target:{kind:`connection`,connectionId:Number(e)},schema:null})},d=l?de(l):null,f=c?.kind===`connection`?c.database??d:null,p=t.databases?.data??null,m=p?f&&!p.includes(f)?[f,...p]:p:f?[f]:[],h=e=>{if(!l)return;let t=e?le({conn:l.id,database:e},l):void 0;i({target:{kind:`connection`,connectionId:l.id,...t?{database:t}:{}},schema:null})},g=t.objects;return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(W,{label:`Server`,htmlFor:`${a}-server`,children:(0,K.jsxs)(U,{id:`${a}-server`,value:c?.kind===`file`?`file`:c?String(c.connectionId):``,onChange:e=>u(e.target.value),children:[!c&&(0,K.jsx)(`option`,{value:``,children:Dt}),c?.kind===`file`&&(0,K.jsx)(`option`,{value:`file`,children:A(c.path)}),s.map(e=>{let t=n&&e.readonly===1;return(0,K.jsx)(`option`,{value:e.id,disabled:t,children:t?`${e.name} (read only)`:e.name},e.id)})]})}),l&&!pe(l)&&(0,K.jsx)(W,{label:`Database`,htmlFor:`${a}-database`,error:t.databases?.error,children:(0,K.jsxs)(U,{id:`${a}-database`,value:f??``,onChange:e=>h(e.target.value),children:[!f&&(0,K.jsx)(`option`,{value:``,children:Dt}),m.map(e=>(0,K.jsx)(`option`,{value:e,children:e},e))]})}),r&&t.schemas.length>0&&(0,K.jsx)(W,{label:`Schema`,htmlFor:`${a}-schema`,children:(0,K.jsx)(U,{id:`${a}-schema`,value:t.schema??``,onChange:t=>i({...e,schema:t.target.value||null}),children:t.schemas.map(e=>(0,K.jsx)(`option`,{value:e,children:e},e))})}),c&&g.driver&&(0,K.jsx)(rt,{driver:g.driver}),c&&!g.driver&&g.error&&(0,K.jsx)(at,{line:{tone:`bad`,text:g.error}})]})}function Y({id:e,list:t,value:n,onChange:r}){let i=t.findIndex(e=>e.value===n);return(0,K.jsx)(U,{id:e,value:String(Math.max(i,0)),onChange:e=>r(t[Number(e.target.value)].value),children:t.map((e,t)=>(0,K.jsx)(`option`,{value:t,children:e.label},e.label))})}var At=[{value:`array`,label:`Array`},{value:`object`,label:`Object`}];function jt({id:e,options:t,onChange:n}){return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(W,{label:`JSON style`,htmlFor:`${e}-style`,children:(0,K.jsx)(Y,{id:`${e}-style`,list:At,value:t.style,onChange:e=>n({...t,style:e})})}),(0,K.jsx)(W,{label:`Key field (only for "Object" style)`,htmlFor:`${e}-key`,children:(0,K.jsx)(H,{id:`${e}-key`,value:t.keyField,placeholder:`_key`,onChange:e=>n({...t,keyField:e.target.value})})}),(0,K.jsx)(W,{label:`Root field`,htmlFor:`${e}-root`,children:(0,K.jsx)(H,{id:`${e}-root`,value:t.rootField,onChange:e=>n({...t,rootField:e.target.value})})})]})}function Mt({format:e,options:t,onChange:n,zip:r,zipName:i,onZip:a}){let o=(0,G.useId)(),s=t.csv,c=e=>n({...t,csv:{...s,...e}});return(0,K.jsxs)(K.Fragment,{children:[e===`csv`&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(W,{label:`Delimiter`,htmlFor:`${o}-delimiter`,children:(0,K.jsx)(Y,{id:`${o}-delimiter`,list:Ie,value:s.delimiter,onChange:e=>c({delimiter:e})})}),(0,K.jsx)(J,{label:`Quoted`,checked:s.quoted,onChange:e=>c({quoted:e})}),(0,K.jsx)(J,{label:`Has header row`,checked:s.header,onChange:e=>c({header:e})}),(0,K.jsx)(J,{label:`Write BOM (Byte Order Mark)`,checked:s.bom,onChange:e=>c({bom:e})}),(0,K.jsx)(W,{label:`Record Delimiter`,htmlFor:`${o}-record`,children:(0,K.jsx)(Y,{id:`${o}-record`,list:De,value:s.recordDelimiter,onChange:e=>c({recordDelimiter:e})})}),(0,K.jsx)(W,{label:`Boolean Format`,htmlFor:`${o}-boolean`,children:(0,K.jsx)(Y,{id:`${o}-boolean`,list:xe,value:s.booleanFormat,onChange:e=>c({booleanFormat:e})})})]}),e===`json`&&(0,K.jsx)(jt,{id:o,options:t.json,onChange:e=>n({...t,json:e})}),e===`xml`&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(W,{label:`Root element name`,htmlFor:`${o}-xml-root`,children:(0,K.jsx)(H,{id:`${o}-xml-root`,value:t.xml.rootElement,placeholder:`root`,onChange:e=>n({...t,xml:{...t.xml,rootElement:e.target.value}})})}),(0,K.jsx)(W,{label:`Item element name`,htmlFor:`${o}-xml-item`,children:(0,K.jsx)(H,{id:`${o}-xml-item`,value:t.xml.itemElement,placeholder:`row`,onChange:e=>n({...t,xml:{...t.xml,itemElement:e.target.value}})})})]}),e===`xlsx`&&(0,K.jsx)(J,{label:`Create single file`,checked:t.xlsxSingleFile,onChange:e=>n({...t,xlsxSingleFile:e})}),(0,K.jsx)(J,{label:`Export to ZIP file`,checked:r,onChange:e=>a(e,i)}),r&&(0,K.jsx)(W,{label:`Output ZIP archive`,htmlFor:`${o}-zip`,children:(0,K.jsx)(H,{id:`${o}-zip`,value:i,placeholder:`zip-archive-yyyy-mm-dd-hh-mm-ss.zip`,onChange:e=>a(!0,e.target.value)})})]})}var Nt=[{value:``,label:`Auto-detect`},...Ie];function Pt({format:e,options:t,onChange:n}){let r=(0,G.useId)();if(e===`csv`){let e=t.csv;return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(W,{label:`Delimiter`,htmlFor:`${r}-delimiter`,children:(0,K.jsx)(Y,{id:`${r}-delimiter`,list:Nt,value:e.delimiter,onChange:r=>n({...t,csv:{...e,delimiter:r}})})}),(0,K.jsx)(J,{label:`Has header row`,checked:e.header,onChange:r=>n({...t,csv:{...e,header:r}})})]})}return e===`json`?(0,K.jsx)(jt,{id:r,options:t.json,onChange:e=>n({...t,json:e})}):null}var Ft=e=>e.dataTransfer.types.includes(`Files`);function It({onUploaded:e}){let[t,n]=(0,G.useState)([]),[r,i]=(0,G.useState)(!1),a=(0,G.useRef)(null),o=(0,G.useRef)(e);o.current=e;let s=(0,G.useRef)(Promise.resolve()),c=(0,G.useRef)(0),l=(0,G.useRef)(null);(0,G.useEffect)(()=>{let e=new AbortController;return l.current=e,()=>e.abort()},[]);let u=e=>{for(let t of e){let e=nt(t);if(e){T.error(e);continue}let r=++c.current;n(e=>[...e,{key:r,name:t.name,loaded:0,total:t.size}]),s.current=s.current.then(async()=>{let e=l.current?.signal;if(!(!e||e.aborted))try{let i=await xt(t,e=>n(t=>t.map(t=>t.key===r?{...t,loaded:e.loaded}:t)),e);o.current(i)}catch(n){e.aborted||T.error(`Could not upload ${t.name}`,{description:n.message})}finally{n(e=>e.filter(e=>e.key!==r))}})}};return(0,K.jsxs)(`div`,{className:`grid min-w-0 gap-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex`,children:[(0,K.jsxs)(`button`,{type:`button`,className:q,onClick:()=>a.current?.click(),children:[(0,K.jsx)(p,{className:`size-3.5`}),`Upload file`]}),(0,K.jsx)(`input`,{ref:a,type:`file`,multiple:!0,hidden:!0,"aria-hidden":!0,tabIndex:-1,onChange:e=>{u([...e.target.files??[]]),e.target.value=``}})]}),(0,K.jsx)(`div`,{onDragOver:e=>{Ft(e)&&(e.preventDefault(),e.dataTransfer.dropEffect=`copy`,i(!0))},onDragLeave:()=>i(!1),onDrop:e=>{Ft(e)&&(e.preventDefault(),i(!1),u([...e.dataTransfer.files]))},className:O(`rounded-md border border-dashed border-border bg-panel-2 px-3 py-2.5 text-xs text-text-2`,r&&`border-primary bg-surface-hover text-text-primary`),children:`Drag & drop imported files here`}),t.map((e,t)=>{let n=e.total?Math.floor(e.loaded/e.total*100):0;return(0,K.jsxs)(`div`,{className:`grid gap-1 text-xs text-text-2`,role:`status`,children:[(0,K.jsxs)(`div`,{className:`flex min-w-0 justify-between gap-2`,children:[(0,K.jsx)(`span`,{className:`truncate`,children:e.name}),(0,K.jsx)(`span`,{className:`shrink-0 tabular-nums`,children:t===0?`${n}%`:`Waiting`})]}),(0,K.jsx)(`div`,{className:`h-1 overflow-hidden rounded bg-surface-hover`,children:(0,K.jsx)(`div`,{className:`h-full bg-primary transition-[width]`,style:{width:`${t===0?n:0}%`}})})]},e.key)})]})}var Lt=300,Rt=[{kind:`table`,label:`All tables`},{kind:`view`,label:`All views`},{kind:`matview`,label:`All matviews`}];function zt({relations:e,value:t,loading:n,onChange:s,onAdd:c}){let l=(0,G.useId)(),u=k(),d=(0,G.useRef)(null),f=(0,G.useRef)(null),p=(0,G.useRef)(null),[m,g]=(0,G.useState)(``),[_,v]=(0,G.useState)(!1),[y,b]=(0,G.useState)(0),x=(0,G.useMemo)(()=>{let n=new Set(t),r=m.trim().toLowerCase();return e.filter(e=>!n.has(e.name)&&(!r||e.name.toLowerCase().includes(r)))},[e,t,m]),S=x.slice(0,Lt),C=e=>{s([...t,e]),g(``),b(0),d.current?.focus()},w=e=>s(t.filter(t=>t!==e)),T=e=>{if(S.length===0)return;let t=(y+e+S.length)%S.length;b(t),p.current?.querySelector(`[data-index="${t}"]`)?.scrollIntoView({block:`nearest`})},ee=e=>{if(!e.nativeEvent.isComposing)if(e.key===`ArrowDown`||e.key===`ArrowUp`)e.preventDefault(),_?T(e.key===`ArrowDown`?1:-1):v(!0);else if(e.key===`Enter`){let t=_?S[y]:void 0;t&&(e.preventDefault(),C(t.name))}else e.key===`Escape`&&_?(e.preventDefault(),e.stopPropagation(),v(!1)):e.key===`Backspace`&&!m&&t.length>0&&w(t[t.length-1])},E=new Set(e.map(e=>e.kind));return(0,K.jsxs)(`div`,{className:`grid min-w-0 gap-[5px]`,children:[(0,K.jsx)(`label`,{htmlFor:`${l}-input`,className:`text-xs font-medium text-text-2`,children:`Tables / views`}),(0,K.jsxs)(a,{open:_,onOpenChange:v,children:[(0,K.jsx)(o,{asChild:!0,children:(0,K.jsxs)(`div`,{ref:f,onMouseDown:e=>{e.target!==d.current&&(e.preventDefault(),d.current?.focus(),v(!0))},className:`flex max-h-[132px] min-h-[30px] w-full min-w-0 cursor-text flex-wrap content-start items-center gap-1 overflow-y-auto rounded-md border border-border bg-surface px-1.5 py-[3px] focus-within:border-ring`,children:[t.map(e=>(0,K.jsxs)(`span`,{className:`flex h-[22px] max-w-full min-w-0 items-center gap-0.5 rounded bg-surface-hover pr-0.5 pl-1.5 text-xs text-text-primary`,children:[(0,K.jsx)(`span`,{className:`truncate`,title:e,children:e}),(0,K.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,title:`Remove ${e}`,onMouseDown:e=>e.stopPropagation(),onClick:()=>w(e),className:`grid size-[18px] shrink-0 place-items-center rounded text-text-subtle can-hover:hover:bg-surface-hover can-hover:hover:text-text-primary`,children:(0,K.jsx)(h,{className:`size-3`})})]},e)),(0,K.jsx)(`input`,{ref:d,id:`${l}-input`,value:m,autoComplete:`off`,spellCheck:!1,role:`combobox`,"aria-expanded":_,"aria-controls":`${l}-list`,"aria-autocomplete":`list`,"aria-activedescendant":_&&S[y]?`${l}-option-${y}`:void 0,placeholder:t.length?``:`Choose tables or views`,onChange:e=>{g(e.target.value),b(0),v(!0)},onFocus:()=>v(!0),onKeyDown:ee,className:`h-[22px] min-w-[90px] flex-1 border-0 bg-transparent px-1 text-xs text-text-primary outline-none placeholder:text-text-subtle`})]})}),(0,K.jsx)(i,{container:u,children:(0,K.jsx)(r,{align:`start`,sideOffset:3,collisionPadding:8,onOpenAutoFocus:e=>e.preventDefault(),onCloseAutoFocus:e=>e.preventDefault(),onInteractOutside:e=>{f.current?.contains(e.target)&&e.preventDefault()},className:`z-50 w-[var(--radix-popover-trigger-width)] min-w-[220px] rounded-md border border-border bg-popover p-1 text-xs text-popover-foreground shadow-md`,children:(0,K.jsxs)(`div`,{ref:p,id:`${l}-list`,role:`listbox`,"aria-label":`Tables and views`,"aria-multiselectable":!0,className:`max-h-[260px] overflow-y-auto`,children:[S.map((e,t)=>(0,K.jsxs)(`div`,{id:`${l}-option-${t}`,"data-index":t,role:`option`,"aria-selected":t===y,onMouseDown:e=>e.preventDefault(),onMouseMove:()=>b(t),onClick:()=>C(e.name),className:O(`flex cursor-pointer items-center gap-2 rounded px-2 py-1`,t===y&&`bg-surface-hover`),children:[(0,K.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.name}),e.kind!==`table`&&(0,K.jsx)(`span`,{className:`shrink-0 text-[11px] text-text-subtle`,children:e.kind===`view`?`view`:`matview`})]},`${e.kind}:${e.name}`)),S.length===0&&(0,K.jsx)(`div`,{className:`px-2 py-1.5 text-text-subtle`,children:n?`Reading the tables…`:e.length===0?`This database has no tables or views`:m.trim()?`Nothing matches “${m.trim()}”`:`Every one is chosen`}),x.length>S.length&&(0,K.jsxs)(`div`,{className:`px-2 py-1.5 text-text-subtle`,children:[x.length-S.length,` more: type to narrow the list`]})]})})})]}),(0,K.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[Rt.filter(e=>E.has(e.kind)).map(t=>(0,K.jsx)(`button`,{type:`button`,className:q,onClick:()=>c(e.filter(e=>e.kind===t.kind).map(e=>e.name)),children:t.label},t.kind)),(0,K.jsx)(`button`,{type:`button`,className:q,disabled:t.length===0,onClick:()=>s([]),children:`Remove all`})]})]})}function Bt({form:e,ctx:t,onForm:n,onUploaded:r}){return(0,K.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] gap-x-1 px-2`,children:[(0,K.jsx)(Vt,{form:e,ctx:t,onForm:n,onUploaded:r}),(0,K.jsx)(g,{"aria-hidden":!0,className:`size-8 self-center text-primary`}),(0,K.jsx)(Ut,{form:e,ctx:t,onForm:n})]})}function Vt({form:e,ctx:t,onForm:n,onUploaded:r}){let i=(0,G.useId)(),a=e.sourceType,o=a===`database`||a===`query`,s=e=>n(t=>z(t,e));return(0,K.jsxs)(`section`,{"aria-label":`Source configuration`,className:`min-w-0 p-2`,children:[(0,K.jsx)(wt,{icon:m,children:`Source configuration`}),(0,K.jsxs)(`div`,{className:`grid gap-3`,children:[(0,K.jsx)(`div`,{className:`flex flex-wrap gap-1.5 empty:hidden`,children:(0,K.jsx)(Ot,{importing:!1,onPick:e=>n(t=>z(Ae(t,`database`),e))})}),(0,K.jsx)(W,{label:`Storage type`,htmlFor:`${i}-type`,children:(0,K.jsx)(U,{id:`${i}-type`,value:a,onChange:e=>n(t=>Ae(t,e.target.value)),children:Ye.map(e=>(0,K.jsx)(`option`,{value:e.value,children:e.label},e.value))})}),o&&(0,K.jsx)(kt,{db:e.db,ctx:t,importing:!1,showSchema:a===`database`,onChange:s}),a===`database`&&e.db.target&&(0,K.jsx)(zt,{relations:t.relations,value:e.rows.map(e=>e.source),loading:t.objects.loading,onChange:e=>n(t=>Me(t,e)),onAdd:e=>n(t=>ze(t,e))}),a===`query`&&(0,K.jsx)(Ht,{form:e,ctx:t,onForm:n}),V(a)&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(It,{onUploaded:r}),(0,K.jsx)(Pt,{format:a,options:e.importOptions,onChange:e=>n(t=>({...t,importOptions:e}))})]})]})]})}function Ht({form:e,ctx:t,onForm:n}){let r=gt(t.target),i=(0,G.useMemo)(()=>e.sql,[]);return(0,K.jsxs)(`div`,{className:`grid min-w-0 gap-[5px]`,children:[(0,K.jsx)(`span`,{className:`text-xs font-medium text-text-2`,children:`Query`}),(0,K.jsx)(`div`,{className:`h-[140px] min-w-0 overflow-hidden rounded-md border border-border`,children:(0,K.jsx)(ht,{onExecute:()=>{},loading:!1,defaultValue:i,persistedSql:i,onSqlChange:e=>n(t=>t.sql===e?t:{...t,sql:e}),schemaInfo:r,dialect:t.dialect})})]})}function Ut({form:e,ctx:t,onForm:n}){let r=(0,G.useId)(),i=V(e.sourceType),a=e.targetType;return(0,K.jsxs)(`section`,{"aria-label":`Target configuration`,className:`min-w-0 p-2`,children:[(0,K.jsx)(wt,{icon:C,children:`Target configuration`}),(0,K.jsxs)(`div`,{className:`grid gap-3`,children:[i&&(0,K.jsx)(`div`,{className:`flex flex-wrap gap-1.5 empty:hidden`,children:(0,K.jsx)(Ot,{importing:!0,onPick:e=>n(t=>z(t,e))})}),(0,K.jsx)(W,{label:`Storage type`,htmlFor:`${r}-type`,children:(0,K.jsx)(U,{id:`${r}-type`,value:a,onChange:e=>n(t=>Te(t,e.target.value)),children:ke(e.sourceType).map(e=>(0,K.jsx)(`option`,{value:e.value,children:e.label},e.value))})}),a===`database`?(0,K.jsx)(kt,{db:e.db,ctx:t,importing:!0,showSchema:!0,onChange:e=>n(t=>z(t,e))}):(0,K.jsx)(Mt,{format:a,options:e.exportOptions,onChange:e=>n(t=>({...t,exportOptions:e})),zip:e.zip,zipName:e.zipName,onZip:(e,t)=>n(n=>({...n,zip:e,zipName:t}))})]})]})}var X=`h-7 border border-border bg-panel-2 px-2 text-left text-xs font-medium whitespace-nowrap text-text-2`,Z=`h-[34px] border border-border px-2 py-1 align-middle text-xs text-text-primary`;function Wt({form:e,items:t,existingTables:n,preview:r,onPreview:i,onForm:a,onColumns:o,onError:s}){let c=V(e.sourceType),u=3+(c?2:0)+(t?1:0);return(0,K.jsxs)(`section`,{"aria-label":`Map source tables/files`,className:`px-4 pb-4`,children:[(0,K.jsx)(wt,{icon:l,children:`Map source tables/files`}),(0,K.jsxs)(`table`,{className:`w-full border-collapse`,children:[(0,K.jsx)(`thead`,{children:(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`th`,{className:X,children:`Source`}),c&&(0,K.jsx)(`th`,{className:O(X,`w-[170px]`),children:`Action`}),(0,K.jsx)(`th`,{className:X,children:`Target`}),c&&(0,K.jsx)(`th`,{className:O(X,`w-[64px]`),children:`Preview`}),t&&(0,K.jsx)(`th`,{className:O(X,`w-[150px]`),children:`Status`}),(0,K.jsx)(`th`,{className:O(X,`w-[130px]`),children:`Columns`})]})}),(0,K.jsxs)(`tbody`,{children:[e.rows.map(l=>(0,K.jsx)(Gt,{form:e,row:l,importing:c,item:t?t.get(l.source)??null:void 0,existingTables:n,previewed:r===l.source,onPreview:i,onForm:a,onColumns:o,onError:s},l.source)),e.rows.length===0&&(0,K.jsx)(`tr`,{children:(0,K.jsx)(`td`,{colSpan:u,className:O(Z,`text-center text-text-subtle`),children:c?`Upload the files to import`:`Choose the tables or views to export`})})]})]})]})}function Gt({form:e,row:t,importing:n,item:r,existingTables:i,previewed:a,onPreview:o,onForm:s,onColumns:l,onError:u}){let d=je(t),p=t.source===`__TEMPLATE__`?`the row with no file yet`:d;return(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`td`,{className:Z,children:(0,K.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-1.5`,children:[(0,K.jsx)(`span`,{className:O(`min-w-0 truncate`,t.source===`__TEMPLATE__`&&`text-text-subtle italic`),title:t.upload?`${t.upload.name} (${_t(t.upload.size)})`:d,children:d}),(0,K.jsx)(`button`,{type:`button`,"aria-label":`Remove ${p}`,title:`Remove`,onClick:()=>s(e=>we(e,t.source)),className:`grid size-6 shrink-0 place-items-center rounded text-primary can-hover:hover:bg-surface-hover`,children:(0,K.jsx)(c,{className:`size-3.5`})})]})}),n&&(0,K.jsx)(`td`,{className:Z,children:(0,K.jsx)(`select`,{"aria-label":`Action for ${p}`,value:t.action??`createTable`,onChange:e=>s(n=>B(n,t.source,{action:e.target.value})),className:O(`h-[26px] w-full min-w-0 rounded-[5px] border border-border bg-surface px-2 text-xs text-text-primary placeholder:text-text-subtle focus:border-ring focus:outline-none`,`cursor-pointer pr-1`),children:Le.map(e=>(0,K.jsx)(`option`,{value:e.id,children:e.label},e.id))})}),(0,K.jsx)(`td`,{className:Z,children:(0,K.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1`,children:[(0,K.jsx)(`input`,{"aria-label":`Target of ${p}`,value:t.target??Qe(e,t),spellCheck:!1,autoComplete:`off`,onChange:e=>s(n=>B(n,t.source,{target:e.target.value})),className:Ct}),n&&i.length>0&&(0,K.jsxs)(L,{children:[(0,K.jsx)(F,{asChild:!0,children:(0,K.jsx)(`button`,{type:`button`,"aria-label":`Choose a table for ${p}`,title:`Choose a table`,className:`grid h-[26px] w-6 shrink-0 place-items-center rounded-[5px] border border-border text-text-2 can-hover:hover:bg-surface-hover`,children:(0,K.jsx)(f,{className:`size-3.5`})})}),(0,K.jsx)(I,{align:`end`,className:`max-h-72 overflow-y-auto`,children:i.map(e=>(0,K.jsx)(P,{onSelect:()=>s(n=>B(n,t.source,{target:e})),children:e},e))})]})]})}),n&&(0,K.jsx)(`td`,{className:O(Z,`text-center`),children:t.upload&&(0,K.jsx)(`input`,{type:`checkbox`,"aria-label":`Preview ${p}`,checked:a,onChange:e=>o(e.target.checked?t.source:null),className:`size-[15px] accent-primary`})}),r!==void 0&&(0,K.jsx)(`td`,{className:Z,children:r&&(0,K.jsx)(Kt,{item:r,onError:u})}),(0,K.jsx)(`td`,{className:Z,children:(0,K.jsx)(`button`,{type:`button`,className:O(it,`text-xs`),onClick:()=>l(t.source),children:Xe(t.columns)})})]})}function Kt({item:e,onError:t}){let n={queued:x,running:S,done:u,error:_,stopped:d}[e.state];return(0,K.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,K.jsx)(n,{"aria-hidden":!0,className:O(`size-3.5 shrink-0`,e.state===`running`&&`animate-spin text-text-2`,e.state===`done`&&`text-success`,e.state===`error`&&`text-destructive`,(e.state===`queued`||e.state===`stopped`)&&`text-text-subtle`)}),(0,K.jsx)(`span`,{className:`truncate tabular-nums`,children:tt(e)}),e.state===`error`&&e.error&&(0,K.jsx)(`button`,{type:`button`,"aria-label":`Show the error`,title:e.error,onClick:()=>t(e),className:`grid size-5 shrink-0 place-items-center rounded text-info can-hover:hover:bg-surface-hover`,children:(0,K.jsx)(v,{className:`size-3.5`})})]})}async function qt(e,t,n){let r=async(e,t)=>{let r=e.toLowerCase(),i=n.relations.find(e=>e.name.toLowerCase()===r&&(!t||e.kind===`table`));if(!i||!n.target)return null;let a=i.schema?`&schema=${encodeURIComponent(i.schema)}`:``;return(await E.get(te(n.target,`/schema?table=${encodeURIComponent(i.name)}${a}`))).map(e=>e.name)},i=e=>e.catch(()=>null);if(!V(e.sourceType))return{source:await i(r(t.source,!1)),target:null};let[a,o]=await Promise.all([t.upload?i(E.post(`/api/db/impexp/uploads/${encodeURIComponent(t.upload.id)}/preview`,{format:e.sourceType,options:e.importOptions}).then(e=>e.columns)):Promise.resolve(null),i(r(Ke(e,t),!0))]);return{source:a,target:o}}function Jt({form:e,row:t,ctx:n,onConfirm:r,onClose:i}){let[a,o]=(0,G.useState)(null),[s,c]=(0,G.useState)([]);(0,G.useEffect)(()=>{let r=!0;return qt(e,t,n).then(e=>{r&&(o(e),c(t.columns?.length?t.columns:Ce(e.source,e.target)))}),()=>{r=!1}},[]);let l=a?Ce(a.source,a.target):[],u=a?Ee(s):null,d=!Ge(s,l),f=(e,t)=>c(n=>n.map((n,r)=>r===e?{...n,...t}:n));return(0,K.jsx)(mt,{title:`Configure columns`,description:`Which columns of ${t.source} are written, and under what names`,okDisabled:!a||!!u,onOk:()=>{r(Ve(s,l)),i()},onClose:i,className:`sm:max-w-[640px]`,extraButton:e=>(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(j,{type:`button`,size:`sm`,variant:`outline`,className:e,disabled:!a,onClick:()=>c(e=>[...e,{src:``,dst:``}]),children:`Add column`}),(0,K.jsx)(j,{type:`button`,size:`sm`,variant:`outline`,className:e,disabled:!a||!d,onClick:()=>c(l),children:`Reset`})]}),children:a?(0,K.jsxs)(K.Fragment,{children:[l.length===0&&(0,K.jsx)(`p`,{className:`text-xs text-text-2`,children:`When no columns are defined in this mapping, source row is copied to target without any modifications`}),(0,K.jsxs)(`table`,{className:`w-full border-collapse text-xs`,children:[(0,K.jsx)(`thead`,{children:(0,K.jsx)(`tr`,{children:[`Use`,`Source column`,`Target column`,``].map((e,t)=>(0,K.jsx)(`th`,{className:O(`h-7 border border-border bg-panel-2 px-2 text-left font-medium text-text-2`,t===0&&`w-12`,t===3&&`w-20`),children:e},t))})}),(0,K.jsxs)(`tbody`,{children:[s.map((e,t)=>(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`td`,{className:`border border-border px-2 text-center`,children:(0,K.jsx)(`input`,{type:`checkbox`,checked:!e.skip,"aria-label":`Use ${e.src||`row ${t+1}`}`,className:`size-[15px] accent-primary`,onChange:e=>f(t,{skip:!e.target.checked})})}),(0,K.jsx)(`td`,{className:`border border-border px-1.5 py-1`,children:(0,K.jsx)(Yt,{label:`Source column of row ${t+1}`,value:e.src,known:a.source,onChange:e=>f(t,{src:e})})}),(0,K.jsx)(`td`,{className:`border border-border px-1.5 py-1`,children:(0,K.jsx)(Yt,{label:`Target column of row ${t+1}`,value:e.dst,known:a.target,onChange:e=>f(t,{dst:e})})}),(0,K.jsx)(`td`,{className:`border border-border px-2`,children:(0,K.jsx)(`button`,{type:`button`,className:O(it,`text-xs`),onClick:()=>c(e=>e.filter((e,n)=>n!==t)),children:`Remove`})})]},t)),s.length===0&&(0,K.jsx)(`tr`,{children:(0,K.jsx)(`td`,{colSpan:4,className:`h-8 border border-border px-2 text-center text-text-subtle`,children:`No transform defined`})})]})]}),u&&(0,K.jsxs)(`p`,{role:`alert`,className:`flex items-start gap-1.5 text-xs text-error`,children:[(0,K.jsx)(_,{className:`mt-px size-3.5 shrink-0`}),u]})]}):(0,K.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-6 text-xs text-text-subtle`,role:`status`,children:[(0,K.jsx)(S,{className:`size-4 animate-spin`}),`Reading the columns…`]})})}function Yt({label:e,value:t,known:n,onChange:r}){return(0,K.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1`,children:[(0,K.jsx)(`input`,{"aria-label":e,value:t,spellCheck:!1,autoComplete:`off`,onChange:e=>r(e.target.value),className:Ct}),n&&n.length>0&&(0,K.jsxs)(L,{children:[(0,K.jsx)(F,{asChild:!0,children:(0,K.jsx)(`button`,{type:`button`,"aria-label":`Choose the ${e.toLowerCase()}`,className:`grid h-[26px] w-6 shrink-0 place-items-center rounded-[5px] border border-border text-text-2 can-hover:hover:bg-surface-hover`,children:(0,K.jsx)(f,{className:`size-3.5`})})}),(0,K.jsx)(I,{align:`end`,className:`max-h-72 overflow-y-auto`,onKeyDown:e=>e.stopPropagation(),children:n.map(e=>(0,K.jsx)(P,{onSelect:()=>r(e),children:e},e))})]})]})}var Q=`sticky top-0 h-6 border-b border-border bg-panel-2 px-2 text-left text-[11px] font-medium whitespace-nowrap text-text-2`,$=`border-b border-border-soft px-2 py-1 align-top text-xs text-text-primary`;function Xt({children:e}){return(0,K.jsx)(`p`,{className:`px-3 py-2 text-xs text-text-subtle`,children:e})}function Zt({files:e,onDownload:t}){return e.length===0?(0,K.jsx)(Xt,{children:`No output files`}):(0,K.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,K.jsxs)(`table`,{className:`w-full border-collapse`,children:[(0,K.jsx)(`thead`,{children:(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`th`,{className:Q,children:`Name`}),(0,K.jsx)(`th`,{className:O(Q,`w-20 text-right`),children:`Size`}),(0,K.jsx)(`th`,{className:O(Q,`w-20`)})]})}),(0,K.jsx)(`tbody`,{children:e.map(e=>(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`td`,{className:O($,`break-all`),children:e.name}),(0,K.jsx)(`td`,{className:O($,`text-right whitespace-nowrap tabular-nums`),children:_t(e.size)}),(0,K.jsx)(`td`,{className:$,children:(0,K.jsx)(`button`,{type:`button`,className:O(it,`text-xs`),"aria-label":`Download ${e.name}`,onClick:()=>t(e.name),children:`download`})})]},e.name))})]})})}function Qt({messages:e,preserveLogs:t,onPreserveLogs:n}){let[r,i]=(0,G.useState)(Ze),[a,o]=(0,G.useState)(``),s=et(e),c=Se(e,r,a),l=e=>i(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]);return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-1.5 border-b border-border px-2 py-1.5`,children:[qe.map(({level:e,label:t})=>(0,K.jsxs)(`button`,{type:`button`,"aria-pressed":r.includes(e),onClick:()=>l(e),className:O(`h-6 rounded-[5px] border px-2 text-[11px] tabular-nums`,r.includes(e)?`border-primary bg-primary/10 text-text-primary`:`border-border text-text-subtle can-hover:hover:bg-surface-hover`),children:[t,` (`,s[e],`)`]},e)),(0,K.jsx)(J,{label:`Preserve Logs`,checked:t,onChange:n})]}),(0,K.jsx)(`div`,{className:`flex shrink-0 px-2 py-1.5`,children:(0,K.jsx)(ct,{value:a,onChange:o,placeholder:`Filter log messages`})}),c.length===0?(0,K.jsx)(Xt,{children:`No messages`}):(0,K.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,K.jsxs)(`table`,{className:`w-full border-collapse`,children:[(0,K.jsx)(`thead`,{children:(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`th`,{className:O(Q,`w-10 text-right`),children:`Number`}),(0,K.jsx)(`th`,{className:Q,children:`Message`}),(0,K.jsx)(`th`,{className:O(Q,`w-16`),children:`Time`}),(0,K.jsx)(`th`,{className:O(Q,`w-14 text-right`),children:`Delta`}),(0,K.jsx)(`th`,{className:O(Q,`w-16 text-right`),children:`Duration`})]})}),(0,K.jsx)(`tbody`,{children:c.map(e=>(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`td`,{className:O($,`text-right text-text-subtle tabular-nums`),children:e.number}),(0,K.jsx)(`td`,{className:O($,`break-words whitespace-pre-wrap`,e.level===`error`&&`text-destructive`,e.level===`warning`&&`text-warning`,e.level===`debug`&&`text-text-subtle`),children:e.text}),(0,K.jsx)(`td`,{className:O($,`whitespace-nowrap tabular-nums`),children:Ne(e.time)}),(0,K.jsx)(`td`,{className:O($,`text-right whitespace-nowrap tabular-nums`),children:e.delta}),(0,K.jsx)(`td`,{className:O($,`text-right whitespace-nowrap tabular-nums`),children:e.duration})]},e.number))})]})})]})}var $t=300;function en(e){return e==null?`(NULL)`:typeof e==`object`?JSON.stringify(e):String(e)}function tn({row:e,format:t,options:n}){let[r,i]=(0,G.useState)(null),[a,o]=(0,G.useState)(null),[s,c]=(0,G.useState)(!0),l=e.upload?.id??null,u=JSON.stringify({format:t,options:n,...e.columns?{columns:e.columns}:{}});return(0,G.useEffect)(()=>{if(!l)return;let e=new AbortController;c(!0);let t=setTimeout(()=>{E.post(`/api/db/impexp/uploads/${encodeURIComponent(l)}/preview`,JSON.parse(u),{signal:e.signal}).then(e=>{i(e),o(null)}).catch(t=>{e.signal.aborted||(i(null),o(t.message))}).finally(()=>{e.signal.aborted||c(!1)})},$t);return()=>{clearTimeout(t),e.abort()}},[l,u]),s&&!r?(0,K.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-text-subtle`,role:`status`,"aria-label":`Reading the file`,children:(0,K.jsx)(S,{className:`size-4 animate-spin`})}):a?(0,K.jsx)(`p`,{role:`alert`,className:`px-3 py-2 text-xs break-words text-destructive`,children:a}):r?(0,K.jsxs)(`div`,{className:O(`flex min-h-0 flex-1 flex-col`,s&&`opacity-60`),"aria-busy":s,children:[r.warnings.map(e=>(0,K.jsxs)(`p`,{className:`flex shrink-0 items-start gap-1.5 border-b border-border-soft px-2 py-1 text-xs text-warning`,children:[(0,K.jsx)(b,{className:`mt-px size-3.5 shrink-0`}),e]},e)),r.columns.length===0?(0,K.jsx)(Xt,{children:`The file has no rows`}):(0,K.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,K.jsxs)(`table`,{className:`border-collapse`,children:[(0,K.jsx)(`thead`,{children:(0,K.jsx)(`tr`,{children:r.columns.map((e,t)=>(0,K.jsx)(`th`,{className:Q,children:e},t))})}),(0,K.jsx)(`tbody`,{children:r.rows.map((e,t)=>(0,K.jsx)(`tr`,{children:r.columns.map((t,n)=>(0,K.jsx)(`td`,{className:O($,`max-w-[240px] truncate whitespace-nowrap`,(e[n]===null||e[n]===void 0)&&`text-text-subtle italic`),children:en(e[n])},n))},t))})]})})]}):null}var nn=.7,rn=.4,an=.85,on=.02;function sn(e){for(let t of Object.values(ne.getState().panels)){let n=t.tabs.find(t=>t.id===e);if(n)return n}}function cn({metadata:e,tabId:t}){let n=ie(),r=(0,G.useCallback)(e=>{if(!t)return;let n={...sn(t)?.metadata??{},...e};for(let[t,r]of Object.entries(e))r===void 0&&delete n[t];re.getState().updateTab(t,{metadata:n})},[t]),[i,a]=(0,G.useState)(()=>$e(e?.impexp)),o=(0,G.useRef)(i),c=(0,G.useCallback)(e=>{let t=o.current,n=e(t);if(n!==t){o.current=n,a(n);for(let e of He(t,n))St(e);r({impexp:n})}},[r]),l=vt(i.db,t),u=V(i.sourceType)?i.sourceType:null,f=u!==null,[p,m]=(0,G.useState)(()=>Pe(e?.impexpJob)),h=bt(p,(0,G.useCallback)(e=>{m(e),r({impexpJob:e??void 0})},[r])),[g,_]=(0,G.useState)(!1),v=We(i,l.name),b=!!l.target&&l.name===null;(0,G.useEffect)(()=>{!t||b||sn(t)?.title===v||re.getState().updateTab(t,{title:v})},[t,v,b]);let x=(0,G.useRef)(null),C=h.status?.state;(0,G.useEffect)(()=>{if(C===`running`||!x.current)return;let e=x.current;x.current=null,ye(e)},[C]);let w=(0,G.useCallback)(e=>{let t=Je(o.current,[e]);t.rows.some(t=>t.upload?.id===e.id)||St(e.id),c(()=>t)},[c]),T=be(i,l.readonly),ee=()=>{if(!(T||!l.target||h.busy))if(f){let{request:e,rows:t}=Re(i,l.schema);x.current=l.target,h.start(te(l.target,`/impexp/import`),e,`import`,t,g)}else{let{request:e,rows:t}=Ue(i,l.schema,new Date);h.start(te(l.target,`/impexp/export`),e,`export`,t,g)}},E=(0,G.useMemo)(()=>{let e=h.status;return!e||!p||e.id!==p.id||p.kind!==(f?`import`:`export`)?null:Be(p,e.items)},[h.status,p,f]),[D,O]=(0,G.useState)(null),k=f?i.rows.find(e=>e.source===D&&e.upload):void 0,[A,ne]=(0,G.useState)(null),j=A===null?void 0:i.rows.find(e=>e.source===A),[ae,oe]=(0,G.useState)(null),[M,se]=(0,G.useState)({files:!1,messages:!1,preview:!1}),N=e=>se(t=>({...t,[e]:!t[e]})),[P,F]=(0,G.useState)(nn),I=(0,G.useRef)(null),L=e=>Math.min(an,Math.max(rn,e)),ce=e=>{e.preventDefault();let t=I.current?.getBoundingClientRect();if(!t||t.width===0)return;let n=e=>F(L((e.clientX-t.left)/t.width)),r=()=>{window.removeEventListener(`pointermove`,n),window.removeEventListener(`pointerup`,r)};window.addEventListener(`pointermove`,n),window.addEventListener(`pointerup`,r)},le=e=>{let t=e.key===`ArrowLeft`?-on:e.key===`ArrowRight`?on:0;if(e.key===`Home`||e.key===`End`)F(e.key===`Home`?rn:an);else if(t)F(e=>L(e+t));else return;e.preventDefault()};return n?(0,K.jsx)(dt,{empty:`Import/Export needs a wider screen. Open this tab on a computer.`}):(0,K.jsxs)(`div`,{className:`flex h-full w-full flex-col overflow-hidden`,children:[(0,K.jsx)(ut,{label:`Import/Export`,children:h.busy?(0,K.jsx)(ft,{icon:d,label:`Stop`,title:`Stop the job: what is finished stays`,onClick:h.stop,disabled:!h.status}):(0,K.jsx)(ft,{icon:y,label:`Run`,title:T??(f?`Run the import`:`Run the export`),onClick:ee,disabled:!!T})}),(0,K.jsxs)(`div`,{ref:I,className:`flex min-h-0 flex-1 overflow-hidden`,children:[(0,K.jsxs)(`div`,{className:`relative min-w-0 shrink-0`,style:{width:`${P*100}%`},children:[(0,K.jsxs)(`div`,{className:`h-full overflow-y-auto`,inert:h.busy||void 0,children:[(0,K.jsx)(Bt,{form:i,ctx:l,onForm:c,onUploaded:w}),(0,K.jsx)(Wt,{form:i,items:E,existingTables:l.relations.filter(e=>e.kind===`table`).map(e=>e.name),preview:k?k.source:null,onPreview:O,onForm:c,onColumns:ne,onError:oe})]}),h.busy&&(0,K.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center bg-background/70`,role:`status`,children:(0,K.jsxs)(`span`,{className:`flex items-center gap-2 rounded-md border border-border bg-panel px-3 py-2 text-xs text-text-primary shadow-sm`,children:[(0,K.jsx)(S,{className:`size-4 animate-spin`}),`Processing import/export ...`]})})]}),(0,K.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize the configuration`,"aria-valuemin":rn*100,"aria-valuemax":an*100,"aria-valuenow":Math.round(P*100),tabIndex:0,onPointerDown:ce,onKeyDown:le,className:`flex w-1.5 shrink-0 cursor-col-resize touch-none items-center justify-center bg-border/50 can-hover:hover:bg-primary/30 focus-visible:bg-primary/30 focus-visible:outline-none`,children:(0,K.jsx)(s,{className:`size-3 text-text-subtle/50`})}),(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col overflow-hidden border-l border-border`,children:[(0,K.jsx)(Tt,{title:`Output files`,collapsed:M.files,onToggle:()=>N(`files`),className:`h-[20%] shrink-0`,children:(0,K.jsx)(Zt,{files:h.status?.files??[],onDownload:h.download})}),(0,K.jsx)(Tt,{title:`Messages`,collapsed:M.messages,onToggle:()=>N(`messages`),className:`min-h-0 flex-1`,children:(0,K.jsx)(Qt,{messages:h.messages,preserveLogs:g,onPreserveLogs:_})}),k&&u&&(0,K.jsx)(Tt,{title:`Preview`,collapsed:M.preview,onToggle:()=>N(`preview`),className:`min-h-0 flex-1`,children:(0,K.jsx)(tn,{row:k,format:u,options:i.importOptions})})]})]}),j&&(0,K.jsx)(Jt,{form:i,row:j,ctx:l,onClose:()=>ne(null),onConfirm:e=>c(t=>B(t,j.source,{columns:e}))},j.source),ae?.error&&(0,K.jsx)(Et,{title:`Error`,message:ae.error,onClose:()=>oe(null)})]})}export{cn as ImpExpTab};
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{Jt as s,Kr as c,Lr as l,M as u,Mr as d,P as f,Zr as p,c as m,li as h,m as g,n as _,on as v,or as y,r as b,tt as x,xn as S,y as C}from"./icons-BwyIKaTT.js";import{a as w,k as T,n as ee,r as E}from"./api-client-xQDlhUTu.js";import{t as D}from"./settings-store-B4mLp19V.js";import{n as O}from"./utils-Bslrbb-G.js";import{n as k}from"./portal-container-context-NBi-KGK0.js";import{K as A,et as te}from"./window-store-DqX_qmkQ.js";import{t as ne}from"./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 re}from"./tab-store-D5I52eLN.js";import{n as ie}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import{t as j}from"./button-C9ZXWb3b.js";import{a as ae,n as oe,o as M,r as se,t as N}from"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import{i as P,m as F,r as I,t as L}from"./dropdown-menu-BQidk_OJ.js";import"./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"./use-db-driver-installed-anzWkGi5.js";import"./db-sidebar-reveal-_qw0CliT.js";import{r as ce}from"./db-types-CNhENouW.js";import{E as le,S as ue,b as de,c as fe,g as pe,h as me,k as he,n as ge,p as _e}from"./explorer-model-BtJN4MZ9.js";import{L as R,h as ve,x as ye}from"./db-explorer-store-BmpvDHz6.js";import{A as be,B as xe,C as Se,D as Ce,E as we,F as Te,G as Ee,H as De,I as Oe,L as ke,M as z,N as Ae,O as je,P as Me,R as B,S as Ne,T as Pe,U as Fe,V as Ie,W as Le,_ as Re,a as ze,b as Be,c as Ve,d as He,f as Ue,h as We,j as Ge,k as Ke,n as qe,o as Je,r as Ye,s as Xe,t as Ze,u as Qe,v as V,w as $e,x as et,y as tt,z as nt}from"./impexp-state-BWKOuRGj.js";import"./scroll-area-DOlQJGZp.js";import{$n as rt,ar as it,d as at,g as H,h as U,ir as ot,mi as st,rr as ct,u as W}from"./index-EznfgwH9.js";import"./use-monaco-theme-nu5Fogu3.js";import{t as lt}from"./use-db-read-BCYhIrJM.js";import{i as ut,n as dt,r as ft}from"./db-tab-parts-BbNfuvwC.js";import"./use-opener-focus-CDRKhHwX.js";import{r as pt,t as mt}from"./filter-dialog-frame-BkEbqBA4.js";import"./sql-completion-provider-CS-ElfgJ.js";import{n as ht,t as gt}from"./use-sql-schema-info-Dp6TCir5.js";import{n as _t}from"./format-bytes-he3TR0bV.js";var G=e(t(),1);function vt(e,t){let n=JSON.stringify(e.target),r=(0,G.useMemo)(()=>JSON.parse(n),[n]),i=r?.kind===`connection`?r.connectionId:null,a=R(e=>i===null?void 0:e.connections.find(e=>e.id===i)),o=R(e=>e.loaded);(0,G.useEffect)(()=>{o||ve()},[o]);let s=a&&!pe(a)?{kind:`connection`,connectionId:a.id}:null,c=lt(s,s?`/databases`:null,t),l=a&&c.data?[...he(a,c.data)].sort((e,t)=>e.localeCompare(t)):null,u=s?{...c,data:l}:null,d=lt(r,r?`/objects`:null,t),f=!!a&&_e(a.type),p=(0,G.useMemo)(()=>f&&d.data?ue(d.data):[],[f,d.data]),m=r?.kind===`connection`&&a?{conn:a.id,database:r.database??de(a)}:null,h=D(e=>m?e.dbExplorerView.schemas[fe(m)]:void 0),g=f?e.schema??me(p,h):null,_=(0,G.useMemo)(()=>(d.data?.objects??[]).filter(e=>ge.has(e.kind)&&(g===null||e.schema===g)),[d.data,g]),v=r?.kind===`file`?`sqlite`:a?.type,y=r?.kind===`file`?A(r.path):r?r.database??(a?de(a)??a.name:null):null;return{target:r,conn:a,readonly:a?.readonly===1,dbType:v,dialect:v?ce(v):void 0,name:y,databases:u,objects:d,schemas:p.map(e=>e.schema),schema:g,relations:_}}var yt=(e,t=``)=>`/api/db/impexp/jobs/${encodeURIComponent(e)}${t}`;function bt(e,t){let[n,r]=(0,G.useState)(null),[i,a]=(0,G.useState)([]),[o,s]=(0,G.useState)([]),[c,l]=(0,G.useState)(!1),u=(0,G.useRef)(t);u.current=t;let d=(0,G.useRef)(o);d.current=o;let f=(0,G.useRef)(e?.id??null),p=e?.id??null;(0,G.useEffect)(()=>{if(!p)return;f.current=p;let e=new AbortController,t=0,n,i=async()=>{try{let a=await E.get(yt(p,`?since=${t}`),{signal:e.signal});if(e.signal.aborted||f.current!==p)return;t=a.messageCount,r(a),a.messages.length&&s(e=>[...e,...a.messages]),a.state===`running`&&(n=setTimeout(i,Fe))}catch(t){if(e.signal.aborted||f.current!==p)return;if(t instanceof ee&&t.status===404){r(null),s(e=>[...e,{level:`warning`,text:t.message,time:Date.now()}]),u.current(null);return}n=setTimeout(i,Fe*2)}};return i(),()=>{e.abort(),clearTimeout(n)}},[p]);let m=(0,G.useCallback)(async(e,t,n,i,o)=>{l(!0);try{let{jobId:c}=await E.post(e,t);f.current=c;let l=d.current;a(e=>o?[...e,...l]:[]),s([]),r(Oe(c,n,i,Date.now())),u.current({id:c,kind:n,rows:i})}catch(e){T.error(n===`export`?`The export did not start`:`The import did not start`,{description:e.message})}finally{l(!1)}},[]),h=(0,G.useCallback)(()=>{let e=f.current;e&&E.post(yt(e,`/stop`)).then(t=>{f.current===e&&r(t)}).catch(e=>T.error(`Could not stop the job`,{description:e.message}))},[]),g=(0,G.useCallback)(e=>{let t=f.current;t&&E.post(yt(t,`/download`),{name:e}).then(e=>st(pt(e.ticket),e.fileName)).catch(t=>T.error(`Could not download ${e}`,{description:t.message}))},[]);return{status:n,messages:i.length?[...i,...o]:o,busy:c||n?.state===`running`,start:m,stop:h,download:g}}function xt(e,t,n){return new Promise((r,i)=>{if(n.aborted){i(new DOMException(`Upload aborted`,`AbortError`));return}let a=new XMLHttpRequest;a.open(`PUT`,`/api/db/impexp/uploads?name=${encodeURIComponent(e.name)}`);let o=w();o&&a.setRequestHeader(`Authorization`,`Bearer ${o}`),a.setRequestHeader(`x-ppm-client`,`web`),a.upload.onprogress=e=>{e.lengthComputable&&t({loaded:e.loaded,total:e.total})};let s=()=>a.abort();n.addEventListener(`abort`,s);let c=()=>n.removeEventListener(`abort`,s);a.onload=()=>{c();let e={};try{e=JSON.parse(a.responseText)}catch{}a.status>=200&&a.status<300&&e.ok!==!1&&e.data?r(e.data):i(Error(e.error??`The server answered HTTP ${a.status}`))},a.onerror=()=>{c(),i(Error(`The connection to PPM was lost during the upload`))},a.onabort=()=>{c(),i(new DOMException(`Upload aborted`,`AbortError`))},a.send(e)})}function St(e){E.del(`/api/db/impexp/uploads/${encodeURIComponent(e)}`).catch(()=>{})}var K=n(),q=`inline-flex h-[26px] shrink-0 items-center gap-1.5 rounded-[5px] border border-border bg-surface px-2.5 text-xs text-text-primary can-hover:hover:bg-surface-hover disabled:cursor-not-allowed disabled:opacity-50`,Ct=`h-[26px] w-full min-w-0 rounded-[5px] border border-border bg-surface px-2 text-xs text-text-primary placeholder:text-text-subtle focus:border-ring focus:outline-none`;function wt({icon:e,children:t}){return(0,K.jsxs)(`h3`,{className:`my-2.5 flex items-center justify-center gap-2 text-[17px] font-normal text-text-primary`,children:[(0,K.jsx)(e,{className:`size-5 shrink-0 text-text-2`}),t]})}function J({checked:e,onChange:t,label:n,disabled:r}){return(0,K.jsxs)(`label`,{className:O(`flex min-w-0 items-center gap-2 text-xs text-text-primary`,r?`cursor-not-allowed opacity-55`:`cursor-pointer`),children:[(0,K.jsx)(`input`,{type:`checkbox`,checked:e,disabled:r,onChange:e=>t(e.target.checked),className:`size-[15px] shrink-0 accent-primary`}),(0,K.jsx)(`span`,{className:`min-w-0`,children:n})]})}function Tt({title:e,collapsed:t,onToggle:n,className:r,children:i}){return(0,K.jsxs)(`section`,{"aria-label":e,className:O(`flex min-h-0 flex-col border-b border-border last:border-b-0`,t?`shrink-0`:r),children:[(0,K.jsx)(ot,{title:e,collapsed:t,onToggle:n}),!t&&(0,K.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:i})]})}function Et({title:e,message:t,onClose:n}){return(0,K.jsx)(N,{open:!0,onOpenChange:e=>{e||n()},children:(0,K.jsxs)(oe,{className:`max-h-[calc(100dvh-4rem)] grid-rows-[auto_minmax(0,1fr)_auto] gap-3 p-5 sm:max-w-[560px]`,children:[(0,K.jsxs)(ae,{children:[(0,K.jsx)(M,{className:`text-[15px]`,children:e}),(0,K.jsx)(se,{className:`sr-only`,children:`The error the row stopped with`})]}),(0,K.jsx)(`pre`,{className:`min-h-0 overflow-auto rounded-md border border-border bg-panel-2 p-3 font-mono text-xs break-words whitespace-pre-wrap text-text-primary`,children:t}),(0,K.jsx)(`div`,{className:`flex justify-end`,children:(0,K.jsx)(j,{type:`button`,size:`sm`,variant:`outline`,onClick:n,children:`Close`})})]})})}var Dt=`(not selected)`;function Ot({importing:e,onPick:t}){let n=D(e=>e.dbExplorerView.current),r=R(e=>n?e.connections.find(e=>e.id===n.conn):void 0);if(!n||!r)return null;let i=e&&r.readonly===1,a=le(n,r),o=n.database?`${r.name} / ${n.database}`:r.name;return(0,K.jsx)(`button`,{type:`button`,disabled:i,className:q,title:i?`${r.name} is read only: nothing can be imported into it`:o,onClick:()=>t({target:{kind:`connection`,connectionId:r.id,...a?{database:a}:{}},schema:null}),children:`Current DB`})}function kt({db:e,ctx:t,importing:n,showSchema:r,onChange:i}){let a=(0,G.useId)(),o=R(e=>e.connections),s=(0,G.useMemo)(()=>[...o].sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`})),[o]),c=e.target,l=t.conn,u=e=>{e===`file`||!e||i({target:{kind:`connection`,connectionId:Number(e)},schema:null})},d=l?de(l):null,f=c?.kind===`connection`?c.database??d:null,p=t.databases?.data??null,m=p?f&&!p.includes(f)?[f,...p]:p:f?[f]:[],h=e=>{if(!l)return;let t=e?le({conn:l.id,database:e},l):void 0;i({target:{kind:`connection`,connectionId:l.id,...t?{database:t}:{}},schema:null})},g=t.objects;return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(W,{label:`Server`,htmlFor:`${a}-server`,children:(0,K.jsxs)(U,{id:`${a}-server`,value:c?.kind===`file`?`file`:c?String(c.connectionId):``,onChange:e=>u(e.target.value),children:[!c&&(0,K.jsx)(`option`,{value:``,children:Dt}),c?.kind===`file`&&(0,K.jsx)(`option`,{value:`file`,children:A(c.path)}),s.map(e=>{let t=n&&e.readonly===1;return(0,K.jsx)(`option`,{value:e.id,disabled:t,children:t?`${e.name} (read only)`:e.name},e.id)})]})}),l&&!pe(l)&&(0,K.jsx)(W,{label:`Database`,htmlFor:`${a}-database`,error:t.databases?.error,children:(0,K.jsxs)(U,{id:`${a}-database`,value:f??``,onChange:e=>h(e.target.value),children:[!f&&(0,K.jsx)(`option`,{value:``,children:Dt}),m.map(e=>(0,K.jsx)(`option`,{value:e,children:e},e))]})}),r&&t.schemas.length>0&&(0,K.jsx)(W,{label:`Schema`,htmlFor:`${a}-schema`,children:(0,K.jsx)(U,{id:`${a}-schema`,value:t.schema??``,onChange:t=>i({...e,schema:t.target.value||null}),children:t.schemas.map(e=>(0,K.jsx)(`option`,{value:e,children:e},e))})}),c&&g.driver&&(0,K.jsx)(rt,{driver:g.driver}),c&&!g.driver&&g.error&&(0,K.jsx)(at,{line:{tone:`bad`,text:g.error}})]})}function Y({id:e,list:t,value:n,onChange:r}){let i=t.findIndex(e=>e.value===n);return(0,K.jsx)(U,{id:e,value:String(Math.max(i,0)),onChange:e=>r(t[Number(e.target.value)].value),children:t.map((e,t)=>(0,K.jsx)(`option`,{value:t,children:e.label},e.label))})}var At=[{value:`array`,label:`Array`},{value:`object`,label:`Object`}];function jt({id:e,options:t,onChange:n}){return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(W,{label:`JSON style`,htmlFor:`${e}-style`,children:(0,K.jsx)(Y,{id:`${e}-style`,list:At,value:t.style,onChange:e=>n({...t,style:e})})}),(0,K.jsx)(W,{label:`Key field (only for "Object" style)`,htmlFor:`${e}-key`,children:(0,K.jsx)(H,{id:`${e}-key`,value:t.keyField,placeholder:`_key`,onChange:e=>n({...t,keyField:e.target.value})})}),(0,K.jsx)(W,{label:`Root field`,htmlFor:`${e}-root`,children:(0,K.jsx)(H,{id:`${e}-root`,value:t.rootField,onChange:e=>n({...t,rootField:e.target.value})})})]})}function Mt({format:e,options:t,onChange:n,zip:r,zipName:i,onZip:a}){let o=(0,G.useId)(),s=t.csv,c=e=>n({...t,csv:{...s,...e}});return(0,K.jsxs)(K.Fragment,{children:[e===`csv`&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(W,{label:`Delimiter`,htmlFor:`${o}-delimiter`,children:(0,K.jsx)(Y,{id:`${o}-delimiter`,list:Ie,value:s.delimiter,onChange:e=>c({delimiter:e})})}),(0,K.jsx)(J,{label:`Quoted`,checked:s.quoted,onChange:e=>c({quoted:e})}),(0,K.jsx)(J,{label:`Has header row`,checked:s.header,onChange:e=>c({header:e})}),(0,K.jsx)(J,{label:`Write BOM (Byte Order Mark)`,checked:s.bom,onChange:e=>c({bom:e})}),(0,K.jsx)(W,{label:`Record Delimiter`,htmlFor:`${o}-record`,children:(0,K.jsx)(Y,{id:`${o}-record`,list:De,value:s.recordDelimiter,onChange:e=>c({recordDelimiter:e})})}),(0,K.jsx)(W,{label:`Boolean Format`,htmlFor:`${o}-boolean`,children:(0,K.jsx)(Y,{id:`${o}-boolean`,list:xe,value:s.booleanFormat,onChange:e=>c({booleanFormat:e})})})]}),e===`json`&&(0,K.jsx)(jt,{id:o,options:t.json,onChange:e=>n({...t,json:e})}),e===`xml`&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(W,{label:`Root element name`,htmlFor:`${o}-xml-root`,children:(0,K.jsx)(H,{id:`${o}-xml-root`,value:t.xml.rootElement,placeholder:`root`,onChange:e=>n({...t,xml:{...t.xml,rootElement:e.target.value}})})}),(0,K.jsx)(W,{label:`Item element name`,htmlFor:`${o}-xml-item`,children:(0,K.jsx)(H,{id:`${o}-xml-item`,value:t.xml.itemElement,placeholder:`row`,onChange:e=>n({...t,xml:{...t.xml,itemElement:e.target.value}})})})]}),e===`xlsx`&&(0,K.jsx)(J,{label:`Create single file`,checked:t.xlsxSingleFile,onChange:e=>n({...t,xlsxSingleFile:e})}),(0,K.jsx)(J,{label:`Export to ZIP file`,checked:r,onChange:e=>a(e,i)}),r&&(0,K.jsx)(W,{label:`Output ZIP archive`,htmlFor:`${o}-zip`,children:(0,K.jsx)(H,{id:`${o}-zip`,value:i,placeholder:`zip-archive-yyyy-mm-dd-hh-mm-ss.zip`,onChange:e=>a(!0,e.target.value)})})]})}var Nt=[{value:``,label:`Auto-detect`},...Ie];function Pt({format:e,options:t,onChange:n}){let r=(0,G.useId)();if(e===`csv`){let e=t.csv;return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(W,{label:`Delimiter`,htmlFor:`${r}-delimiter`,children:(0,K.jsx)(Y,{id:`${r}-delimiter`,list:Nt,value:e.delimiter,onChange:r=>n({...t,csv:{...e,delimiter:r}})})}),(0,K.jsx)(J,{label:`Has header row`,checked:e.header,onChange:r=>n({...t,csv:{...e,header:r}})})]})}return e===`json`?(0,K.jsx)(jt,{id:r,options:t.json,onChange:e=>n({...t,json:e})}):null}var Ft=e=>e.dataTransfer.types.includes(`Files`);function It({onUploaded:e}){let[t,n]=(0,G.useState)([]),[r,i]=(0,G.useState)(!1),a=(0,G.useRef)(null),o=(0,G.useRef)(e);o.current=e;let s=(0,G.useRef)(Promise.resolve()),c=(0,G.useRef)(0),l=(0,G.useRef)(null);(0,G.useEffect)(()=>{let e=new AbortController;return l.current=e,()=>e.abort()},[]);let u=e=>{for(let t of e){let e=nt(t);if(e){T.error(e);continue}let r=++c.current;n(e=>[...e,{key:r,name:t.name,loaded:0,total:t.size}]),s.current=s.current.then(async()=>{let e=l.current?.signal;if(!(!e||e.aborted))try{let i=await xt(t,e=>n(t=>t.map(t=>t.key===r?{...t,loaded:e.loaded}:t)),e);o.current(i)}catch(n){e.aborted||T.error(`Could not upload ${t.name}`,{description:n.message})}finally{n(e=>e.filter(e=>e.key!==r))}})}};return(0,K.jsxs)(`div`,{className:`grid min-w-0 gap-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex`,children:[(0,K.jsxs)(`button`,{type:`button`,className:q,onClick:()=>a.current?.click(),children:[(0,K.jsx)(p,{className:`size-3.5`}),`Upload file`]}),(0,K.jsx)(`input`,{ref:a,type:`file`,multiple:!0,hidden:!0,"aria-hidden":!0,tabIndex:-1,onChange:e=>{u([...e.target.files??[]]),e.target.value=``}})]}),(0,K.jsx)(`div`,{onDragOver:e=>{Ft(e)&&(e.preventDefault(),e.dataTransfer.dropEffect=`copy`,i(!0))},onDragLeave:()=>i(!1),onDrop:e=>{Ft(e)&&(e.preventDefault(),i(!1),u([...e.dataTransfer.files]))},className:O(`rounded-md border border-dashed border-border bg-panel-2 px-3 py-2.5 text-xs text-text-2`,r&&`border-primary bg-surface-hover text-text-primary`),children:`Drag & drop imported files here`}),t.map((e,t)=>{let n=e.total?Math.floor(e.loaded/e.total*100):0;return(0,K.jsxs)(`div`,{className:`grid gap-1 text-xs text-text-2`,role:`status`,children:[(0,K.jsxs)(`div`,{className:`flex min-w-0 justify-between gap-2`,children:[(0,K.jsx)(`span`,{className:`truncate`,children:e.name}),(0,K.jsx)(`span`,{className:`shrink-0 tabular-nums`,children:t===0?`${n}%`:`Waiting`})]}),(0,K.jsx)(`div`,{className:`h-1 overflow-hidden rounded bg-surface-hover`,children:(0,K.jsx)(`div`,{className:`h-full bg-primary transition-[width]`,style:{width:`${t===0?n:0}%`}})})]},e.key)})]})}var Lt=300,Rt=[{kind:`table`,label:`All tables`},{kind:`view`,label:`All views`},{kind:`matview`,label:`All matviews`}];function zt({relations:e,value:t,loading:n,onChange:s,onAdd:c}){let l=(0,G.useId)(),u=k(),d=(0,G.useRef)(null),f=(0,G.useRef)(null),p=(0,G.useRef)(null),[m,g]=(0,G.useState)(``),[_,v]=(0,G.useState)(!1),[y,b]=(0,G.useState)(0),x=(0,G.useMemo)(()=>{let n=new Set(t),r=m.trim().toLowerCase();return e.filter(e=>!n.has(e.name)&&(!r||e.name.toLowerCase().includes(r)))},[e,t,m]),S=x.slice(0,Lt),C=e=>{s([...t,e]),g(``),b(0),d.current?.focus()},w=e=>s(t.filter(t=>t!==e)),T=e=>{if(S.length===0)return;let t=(y+e+S.length)%S.length;b(t),p.current?.querySelector(`[data-index="${t}"]`)?.scrollIntoView({block:`nearest`})},ee=e=>{if(!e.nativeEvent.isComposing)if(e.key===`ArrowDown`||e.key===`ArrowUp`)e.preventDefault(),_?T(e.key===`ArrowDown`?1:-1):v(!0);else if(e.key===`Enter`){let t=_?S[y]:void 0;t&&(e.preventDefault(),C(t.name))}else e.key===`Escape`&&_?(e.preventDefault(),e.stopPropagation(),v(!1)):e.key===`Backspace`&&!m&&t.length>0&&w(t[t.length-1])},E=new Set(e.map(e=>e.kind));return(0,K.jsxs)(`div`,{className:`grid min-w-0 gap-[5px]`,children:[(0,K.jsx)(`label`,{htmlFor:`${l}-input`,className:`text-xs font-medium text-text-2`,children:`Tables / views`}),(0,K.jsxs)(a,{open:_,onOpenChange:v,children:[(0,K.jsx)(o,{asChild:!0,children:(0,K.jsxs)(`div`,{ref:f,onMouseDown:e=>{e.target!==d.current&&(e.preventDefault(),d.current?.focus(),v(!0))},className:`flex max-h-[132px] min-h-[30px] w-full min-w-0 cursor-text flex-wrap content-start items-center gap-1 overflow-y-auto rounded-md border border-border bg-surface px-1.5 py-[3px] focus-within:border-ring`,children:[t.map(e=>(0,K.jsxs)(`span`,{className:`flex h-[22px] max-w-full min-w-0 items-center gap-0.5 rounded bg-surface-hover pr-0.5 pl-1.5 text-xs text-text-primary`,children:[(0,K.jsx)(`span`,{className:`truncate`,title:e,children:e}),(0,K.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,title:`Remove ${e}`,onMouseDown:e=>e.stopPropagation(),onClick:()=>w(e),className:`grid size-[18px] shrink-0 place-items-center rounded text-text-subtle can-hover:hover:bg-surface-hover can-hover:hover:text-text-primary`,children:(0,K.jsx)(h,{className:`size-3`})})]},e)),(0,K.jsx)(`input`,{ref:d,id:`${l}-input`,value:m,autoComplete:`off`,spellCheck:!1,role:`combobox`,"aria-expanded":_,"aria-controls":`${l}-list`,"aria-autocomplete":`list`,"aria-activedescendant":_&&S[y]?`${l}-option-${y}`:void 0,placeholder:t.length?``:`Choose tables or views`,onChange:e=>{g(e.target.value),b(0),v(!0)},onFocus:()=>v(!0),onKeyDown:ee,className:`h-[22px] min-w-[90px] flex-1 border-0 bg-transparent px-1 text-xs text-text-primary outline-none placeholder:text-text-subtle`})]})}),(0,K.jsx)(i,{container:u,children:(0,K.jsx)(r,{align:`start`,sideOffset:3,collisionPadding:8,onOpenAutoFocus:e=>e.preventDefault(),onCloseAutoFocus:e=>e.preventDefault(),onInteractOutside:e=>{f.current?.contains(e.target)&&e.preventDefault()},className:`z-50 w-[var(--radix-popover-trigger-width)] min-w-[220px] rounded-md border border-border bg-popover p-1 text-xs text-popover-foreground shadow-md`,children:(0,K.jsxs)(`div`,{ref:p,id:`${l}-list`,role:`listbox`,"aria-label":`Tables and views`,"aria-multiselectable":!0,className:`max-h-[260px] overflow-y-auto`,children:[S.map((e,t)=>(0,K.jsxs)(`div`,{id:`${l}-option-${t}`,"data-index":t,role:`option`,"aria-selected":t===y,onMouseDown:e=>e.preventDefault(),onMouseMove:()=>b(t),onClick:()=>C(e.name),className:O(`flex cursor-pointer items-center gap-2 rounded px-2 py-1`,t===y&&`bg-surface-hover`),children:[(0,K.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.name}),e.kind!==`table`&&(0,K.jsx)(`span`,{className:`shrink-0 text-[11px] text-text-subtle`,children:e.kind===`view`?`view`:`matview`})]},`${e.kind}:${e.name}`)),S.length===0&&(0,K.jsx)(`div`,{className:`px-2 py-1.5 text-text-subtle`,children:n?`Reading the tables…`:e.length===0?`This database has no tables or views`:m.trim()?`Nothing matches “${m.trim()}”`:`Every one is chosen`}),x.length>S.length&&(0,K.jsxs)(`div`,{className:`px-2 py-1.5 text-text-subtle`,children:[x.length-S.length,` more: type to narrow the list`]})]})})})]}),(0,K.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[Rt.filter(e=>E.has(e.kind)).map(t=>(0,K.jsx)(`button`,{type:`button`,className:q,onClick:()=>c(e.filter(e=>e.kind===t.kind).map(e=>e.name)),children:t.label},t.kind)),(0,K.jsx)(`button`,{type:`button`,className:q,disabled:t.length===0,onClick:()=>s([]),children:`Remove all`})]})]})}function Bt({form:e,ctx:t,onForm:n,onUploaded:r}){return(0,K.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] gap-x-1 px-2`,children:[(0,K.jsx)(Vt,{form:e,ctx:t,onForm:n,onUploaded:r}),(0,K.jsx)(g,{"aria-hidden":!0,className:`size-8 self-center text-primary`}),(0,K.jsx)(Ut,{form:e,ctx:t,onForm:n})]})}function Vt({form:e,ctx:t,onForm:n,onUploaded:r}){let i=(0,G.useId)(),a=e.sourceType,o=a===`database`||a===`query`,s=e=>n(t=>z(t,e));return(0,K.jsxs)(`section`,{"aria-label":`Source configuration`,className:`min-w-0 p-2`,children:[(0,K.jsx)(wt,{icon:m,children:`Source configuration`}),(0,K.jsxs)(`div`,{className:`grid gap-3`,children:[(0,K.jsx)(`div`,{className:`flex flex-wrap gap-1.5 empty:hidden`,children:(0,K.jsx)(Ot,{importing:!1,onPick:e=>n(t=>z(Ae(t,`database`),e))})}),(0,K.jsx)(W,{label:`Storage type`,htmlFor:`${i}-type`,children:(0,K.jsx)(U,{id:`${i}-type`,value:a,onChange:e=>n(t=>Ae(t,e.target.value)),children:Ye.map(e=>(0,K.jsx)(`option`,{value:e.value,children:e.label},e.value))})}),o&&(0,K.jsx)(kt,{db:e.db,ctx:t,importing:!1,showSchema:a===`database`,onChange:s}),a===`database`&&e.db.target&&(0,K.jsx)(zt,{relations:t.relations,value:e.rows.map(e=>e.source),loading:t.objects.loading,onChange:e=>n(t=>Me(t,e)),onAdd:e=>n(t=>ze(t,e))}),a===`query`&&(0,K.jsx)(Ht,{form:e,ctx:t,onForm:n}),V(a)&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(It,{onUploaded:r}),(0,K.jsx)(Pt,{format:a,options:e.importOptions,onChange:e=>n(t=>({...t,importOptions:e}))})]})]})]})}function Ht({form:e,ctx:t,onForm:n}){let r=gt(t.target),i=(0,G.useMemo)(()=>e.sql,[]);return(0,K.jsxs)(`div`,{className:`grid min-w-0 gap-[5px]`,children:[(0,K.jsx)(`span`,{className:`text-xs font-medium text-text-2`,children:`Query`}),(0,K.jsx)(`div`,{className:`h-[140px] min-w-0 overflow-hidden rounded-md border border-border`,children:(0,K.jsx)(ht,{onExecute:()=>{},loading:!1,defaultValue:i,persistedSql:i,onSqlChange:e=>n(t=>t.sql===e?t:{...t,sql:e}),schemaInfo:r,dialect:t.dialect})})]})}function Ut({form:e,ctx:t,onForm:n}){let r=(0,G.useId)(),i=V(e.sourceType),a=e.targetType;return(0,K.jsxs)(`section`,{"aria-label":`Target configuration`,className:`min-w-0 p-2`,children:[(0,K.jsx)(wt,{icon:C,children:`Target configuration`}),(0,K.jsxs)(`div`,{className:`grid gap-3`,children:[i&&(0,K.jsx)(`div`,{className:`flex flex-wrap gap-1.5 empty:hidden`,children:(0,K.jsx)(Ot,{importing:!0,onPick:e=>n(t=>z(t,e))})}),(0,K.jsx)(W,{label:`Storage type`,htmlFor:`${r}-type`,children:(0,K.jsx)(U,{id:`${r}-type`,value:a,onChange:e=>n(t=>Te(t,e.target.value)),children:ke(e.sourceType).map(e=>(0,K.jsx)(`option`,{value:e.value,children:e.label},e.value))})}),a===`database`?(0,K.jsx)(kt,{db:e.db,ctx:t,importing:!0,showSchema:!0,onChange:e=>n(t=>z(t,e))}):(0,K.jsx)(Mt,{format:a,options:e.exportOptions,onChange:e=>n(t=>({...t,exportOptions:e})),zip:e.zip,zipName:e.zipName,onZip:(e,t)=>n(n=>({...n,zip:e,zipName:t}))})]})]})}var X=`h-7 border border-border bg-panel-2 px-2 text-left text-xs font-medium whitespace-nowrap text-text-2`,Z=`h-[34px] border border-border px-2 py-1 align-middle text-xs text-text-primary`;function Wt({form:e,items:t,existingTables:n,preview:r,onPreview:i,onForm:a,onColumns:o,onError:s}){let c=V(e.sourceType),u=3+(c?2:0)+(t?1:0);return(0,K.jsxs)(`section`,{"aria-label":`Map source tables/files`,className:`px-4 pb-4`,children:[(0,K.jsx)(wt,{icon:l,children:`Map source tables/files`}),(0,K.jsxs)(`table`,{className:`w-full border-collapse`,children:[(0,K.jsx)(`thead`,{children:(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`th`,{className:X,children:`Source`}),c&&(0,K.jsx)(`th`,{className:O(X,`w-[170px]`),children:`Action`}),(0,K.jsx)(`th`,{className:X,children:`Target`}),c&&(0,K.jsx)(`th`,{className:O(X,`w-[64px]`),children:`Preview`}),t&&(0,K.jsx)(`th`,{className:O(X,`w-[150px]`),children:`Status`}),(0,K.jsx)(`th`,{className:O(X,`w-[130px]`),children:`Columns`})]})}),(0,K.jsxs)(`tbody`,{children:[e.rows.map(l=>(0,K.jsx)(Gt,{form:e,row:l,importing:c,item:t?t.get(l.source)??null:void 0,existingTables:n,previewed:r===l.source,onPreview:i,onForm:a,onColumns:o,onError:s},l.source)),e.rows.length===0&&(0,K.jsx)(`tr`,{children:(0,K.jsx)(`td`,{colSpan:u,className:O(Z,`text-center text-text-subtle`),children:c?`Upload the files to import`:`Choose the tables or views to export`})})]})]})]})}function Gt({form:e,row:t,importing:n,item:r,existingTables:i,previewed:a,onPreview:o,onForm:s,onColumns:l,onError:u}){let d=je(t),p=t.source===`__TEMPLATE__`?`the row with no file yet`:d;return(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`td`,{className:Z,children:(0,K.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-1.5`,children:[(0,K.jsx)(`span`,{className:O(`min-w-0 truncate`,t.source===`__TEMPLATE__`&&`text-text-subtle italic`),title:t.upload?`${t.upload.name} (${_t(t.upload.size)})`:d,children:d}),(0,K.jsx)(`button`,{type:`button`,"aria-label":`Remove ${p}`,title:`Remove`,onClick:()=>s(e=>we(e,t.source)),className:`grid size-6 shrink-0 place-items-center rounded text-primary can-hover:hover:bg-surface-hover`,children:(0,K.jsx)(c,{className:`size-3.5`})})]})}),n&&(0,K.jsx)(`td`,{className:Z,children:(0,K.jsx)(`select`,{"aria-label":`Action for ${p}`,value:t.action??`createTable`,onChange:e=>s(n=>B(n,t.source,{action:e.target.value})),className:O(`h-[26px] w-full min-w-0 rounded-[5px] border border-border bg-surface px-2 text-xs text-text-primary placeholder:text-text-subtle focus:border-ring focus:outline-none`,`cursor-pointer pr-1`),children:Le.map(e=>(0,K.jsx)(`option`,{value:e.id,children:e.label},e.id))})}),(0,K.jsx)(`td`,{className:Z,children:(0,K.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1`,children:[(0,K.jsx)(`input`,{"aria-label":`Target of ${p}`,value:t.target??Qe(e,t),spellCheck:!1,autoComplete:`off`,onChange:e=>s(n=>B(n,t.source,{target:e.target.value})),className:Ct}),n&&i.length>0&&(0,K.jsxs)(L,{children:[(0,K.jsx)(F,{asChild:!0,children:(0,K.jsx)(`button`,{type:`button`,"aria-label":`Choose a table for ${p}`,title:`Choose a table`,className:`grid h-[26px] w-6 shrink-0 place-items-center rounded-[5px] border border-border text-text-2 can-hover:hover:bg-surface-hover`,children:(0,K.jsx)(f,{className:`size-3.5`})})}),(0,K.jsx)(I,{align:`end`,className:`max-h-72 overflow-y-auto`,children:i.map(e=>(0,K.jsx)(P,{onSelect:()=>s(n=>B(n,t.source,{target:e})),children:e},e))})]})]})}),n&&(0,K.jsx)(`td`,{className:O(Z,`text-center`),children:t.upload&&(0,K.jsx)(`input`,{type:`checkbox`,"aria-label":`Preview ${p}`,checked:a,onChange:e=>o(e.target.checked?t.source:null),className:`size-[15px] accent-primary`})}),r!==void 0&&(0,K.jsx)(`td`,{className:Z,children:r&&(0,K.jsx)(Kt,{item:r,onError:u})}),(0,K.jsx)(`td`,{className:Z,children:(0,K.jsx)(`button`,{type:`button`,className:O(it,`text-xs`),onClick:()=>l(t.source),children:Xe(t.columns)})})]})}function Kt({item:e,onError:t}){let n={queued:x,running:S,done:u,error:_,stopped:d}[e.state];return(0,K.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,K.jsx)(n,{"aria-hidden":!0,className:O(`size-3.5 shrink-0`,e.state===`running`&&`animate-spin text-text-2`,e.state===`done`&&`text-success`,e.state===`error`&&`text-destructive`,(e.state===`queued`||e.state===`stopped`)&&`text-text-subtle`)}),(0,K.jsx)(`span`,{className:`truncate tabular-nums`,children:tt(e)}),e.state===`error`&&e.error&&(0,K.jsx)(`button`,{type:`button`,"aria-label":`Show the error`,title:e.error,onClick:()=>t(e),className:`grid size-5 shrink-0 place-items-center rounded text-info can-hover:hover:bg-surface-hover`,children:(0,K.jsx)(v,{className:`size-3.5`})})]})}async function qt(e,t,n){let r=async(e,t)=>{let r=e.toLowerCase(),i=n.relations.find(e=>e.name.toLowerCase()===r&&(!t||e.kind===`table`));if(!i||!n.target)return null;let a=i.schema?`&schema=${encodeURIComponent(i.schema)}`:``;return(await E.get(te(n.target,`/schema?table=${encodeURIComponent(i.name)}${a}`))).map(e=>e.name)},i=e=>e.catch(()=>null);if(!V(e.sourceType))return{source:await i(r(t.source,!1)),target:null};let[a,o]=await Promise.all([t.upload?i(E.post(`/api/db/impexp/uploads/${encodeURIComponent(t.upload.id)}/preview`,{format:e.sourceType,options:e.importOptions}).then(e=>e.columns)):Promise.resolve(null),i(r(Ke(e,t),!0))]);return{source:a,target:o}}function Jt({form:e,row:t,ctx:n,onConfirm:r,onClose:i}){let[a,o]=(0,G.useState)(null),[s,c]=(0,G.useState)([]);(0,G.useEffect)(()=>{let r=!0;return qt(e,t,n).then(e=>{r&&(o(e),c(t.columns?.length?t.columns:Ce(e.source,e.target)))}),()=>{r=!1}},[]);let l=a?Ce(a.source,a.target):[],u=a?Ee(s):null,d=!Ge(s,l),f=(e,t)=>c(n=>n.map((n,r)=>r===e?{...n,...t}:n));return(0,K.jsx)(mt,{title:`Configure columns`,description:`Which columns of ${t.source} are written, and under what names`,okDisabled:!a||!!u,onOk:()=>{r(Ve(s,l)),i()},onClose:i,className:`sm:max-w-[640px]`,extraButton:e=>(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(j,{type:`button`,size:`sm`,variant:`outline`,className:e,disabled:!a,onClick:()=>c(e=>[...e,{src:``,dst:``}]),children:`Add column`}),(0,K.jsx)(j,{type:`button`,size:`sm`,variant:`outline`,className:e,disabled:!a||!d,onClick:()=>c(l),children:`Reset`})]}),children:a?(0,K.jsxs)(K.Fragment,{children:[l.length===0&&(0,K.jsx)(`p`,{className:`text-xs text-text-2`,children:`When no columns are defined in this mapping, source row is copied to target without any modifications`}),(0,K.jsxs)(`table`,{className:`w-full border-collapse text-xs`,children:[(0,K.jsx)(`thead`,{children:(0,K.jsx)(`tr`,{children:[`Use`,`Source column`,`Target column`,``].map((e,t)=>(0,K.jsx)(`th`,{className:O(`h-7 border border-border bg-panel-2 px-2 text-left font-medium text-text-2`,t===0&&`w-12`,t===3&&`w-20`),children:e},t))})}),(0,K.jsxs)(`tbody`,{children:[s.map((e,t)=>(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`td`,{className:`border border-border px-2 text-center`,children:(0,K.jsx)(`input`,{type:`checkbox`,checked:!e.skip,"aria-label":`Use ${e.src||`row ${t+1}`}`,className:`size-[15px] accent-primary`,onChange:e=>f(t,{skip:!e.target.checked})})}),(0,K.jsx)(`td`,{className:`border border-border px-1.5 py-1`,children:(0,K.jsx)(Yt,{label:`Source column of row ${t+1}`,value:e.src,known:a.source,onChange:e=>f(t,{src:e})})}),(0,K.jsx)(`td`,{className:`border border-border px-1.5 py-1`,children:(0,K.jsx)(Yt,{label:`Target column of row ${t+1}`,value:e.dst,known:a.target,onChange:e=>f(t,{dst:e})})}),(0,K.jsx)(`td`,{className:`border border-border px-2`,children:(0,K.jsx)(`button`,{type:`button`,className:O(it,`text-xs`),onClick:()=>c(e=>e.filter((e,n)=>n!==t)),children:`Remove`})})]},t)),s.length===0&&(0,K.jsx)(`tr`,{children:(0,K.jsx)(`td`,{colSpan:4,className:`h-8 border border-border px-2 text-center text-text-subtle`,children:`No transform defined`})})]})]}),u&&(0,K.jsxs)(`p`,{role:`alert`,className:`flex items-start gap-1.5 text-xs text-error`,children:[(0,K.jsx)(_,{className:`mt-px size-3.5 shrink-0`}),u]})]}):(0,K.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-6 text-xs text-text-subtle`,role:`status`,children:[(0,K.jsx)(S,{className:`size-4 animate-spin`}),`Reading the columns…`]})})}function Yt({label:e,value:t,known:n,onChange:r}){return(0,K.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1`,children:[(0,K.jsx)(`input`,{"aria-label":e,value:t,spellCheck:!1,autoComplete:`off`,onChange:e=>r(e.target.value),className:Ct}),n&&n.length>0&&(0,K.jsxs)(L,{children:[(0,K.jsx)(F,{asChild:!0,children:(0,K.jsx)(`button`,{type:`button`,"aria-label":`Choose the ${e.toLowerCase()}`,className:`grid h-[26px] w-6 shrink-0 place-items-center rounded-[5px] border border-border text-text-2 can-hover:hover:bg-surface-hover`,children:(0,K.jsx)(f,{className:`size-3.5`})})}),(0,K.jsx)(I,{align:`end`,className:`max-h-72 overflow-y-auto`,onKeyDown:e=>e.stopPropagation(),children:n.map(e=>(0,K.jsx)(P,{onSelect:()=>r(e),children:e},e))})]})]})}var Q=`sticky top-0 h-6 border-b border-border bg-panel-2 px-2 text-left text-[11px] font-medium whitespace-nowrap text-text-2`,$=`border-b border-border-soft px-2 py-1 align-top text-xs text-text-primary`;function Xt({children:e}){return(0,K.jsx)(`p`,{className:`px-3 py-2 text-xs text-text-subtle`,children:e})}function Zt({files:e,onDownload:t}){return e.length===0?(0,K.jsx)(Xt,{children:`No output files`}):(0,K.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,K.jsxs)(`table`,{className:`w-full border-collapse`,children:[(0,K.jsx)(`thead`,{children:(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`th`,{className:Q,children:`Name`}),(0,K.jsx)(`th`,{className:O(Q,`w-20 text-right`),children:`Size`}),(0,K.jsx)(`th`,{className:O(Q,`w-20`)})]})}),(0,K.jsx)(`tbody`,{children:e.map(e=>(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`td`,{className:O($,`break-all`),children:e.name}),(0,K.jsx)(`td`,{className:O($,`text-right whitespace-nowrap tabular-nums`),children:_t(e.size)}),(0,K.jsx)(`td`,{className:$,children:(0,K.jsx)(`button`,{type:`button`,className:O(it,`text-xs`),"aria-label":`Download ${e.name}`,onClick:()=>t(e.name),children:`download`})})]},e.name))})]})})}function Qt({messages:e,preserveLogs:t,onPreserveLogs:n}){let[r,i]=(0,G.useState)(Ze),[a,o]=(0,G.useState)(``),s=et(e),c=Se(e,r,a),l=e=>i(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]);return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-1.5 border-b border-border px-2 py-1.5`,children:[qe.map(({level:e,label:t})=>(0,K.jsxs)(`button`,{type:`button`,"aria-pressed":r.includes(e),onClick:()=>l(e),className:O(`h-6 rounded-[5px] border px-2 text-[11px] tabular-nums`,r.includes(e)?`border-primary bg-primary/10 text-text-primary`:`border-border text-text-subtle can-hover:hover:bg-surface-hover`),children:[t,` (`,s[e],`)`]},e)),(0,K.jsx)(J,{label:`Preserve Logs`,checked:t,onChange:n})]}),(0,K.jsx)(`div`,{className:`flex shrink-0 px-2 py-1.5`,children:(0,K.jsx)(ct,{value:a,onChange:o,placeholder:`Filter log messages`})}),c.length===0?(0,K.jsx)(Xt,{children:`No messages`}):(0,K.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,K.jsxs)(`table`,{className:`w-full border-collapse`,children:[(0,K.jsx)(`thead`,{children:(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`th`,{className:O(Q,`w-10 text-right`),children:`Number`}),(0,K.jsx)(`th`,{className:Q,children:`Message`}),(0,K.jsx)(`th`,{className:O(Q,`w-16`),children:`Time`}),(0,K.jsx)(`th`,{className:O(Q,`w-14 text-right`),children:`Delta`}),(0,K.jsx)(`th`,{className:O(Q,`w-16 text-right`),children:`Duration`})]})}),(0,K.jsx)(`tbody`,{children:c.map(e=>(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`td`,{className:O($,`text-right text-text-subtle tabular-nums`),children:e.number}),(0,K.jsx)(`td`,{className:O($,`break-words whitespace-pre-wrap`,e.level===`error`&&`text-destructive`,e.level===`warning`&&`text-warning`,e.level===`debug`&&`text-text-subtle`),children:e.text}),(0,K.jsx)(`td`,{className:O($,`whitespace-nowrap tabular-nums`),children:Ne(e.time)}),(0,K.jsx)(`td`,{className:O($,`text-right whitespace-nowrap tabular-nums`),children:e.delta}),(0,K.jsx)(`td`,{className:O($,`text-right whitespace-nowrap tabular-nums`),children:e.duration})]},e.number))})]})})]})}var $t=300;function en(e){return e==null?`(NULL)`:typeof e==`object`?JSON.stringify(e):String(e)}function tn({row:e,format:t,options:n}){let[r,i]=(0,G.useState)(null),[a,o]=(0,G.useState)(null),[s,c]=(0,G.useState)(!0),l=e.upload?.id??null,u=JSON.stringify({format:t,options:n,...e.columns?{columns:e.columns}:{}});return(0,G.useEffect)(()=>{if(!l)return;let e=new AbortController;c(!0);let t=setTimeout(()=>{E.post(`/api/db/impexp/uploads/${encodeURIComponent(l)}/preview`,JSON.parse(u),{signal:e.signal}).then(e=>{i(e),o(null)}).catch(t=>{e.signal.aborted||(i(null),o(t.message))}).finally(()=>{e.signal.aborted||c(!1)})},$t);return()=>{clearTimeout(t),e.abort()}},[l,u]),s&&!r?(0,K.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-text-subtle`,role:`status`,"aria-label":`Reading the file`,children:(0,K.jsx)(S,{className:`size-4 animate-spin`})}):a?(0,K.jsx)(`p`,{role:`alert`,className:`px-3 py-2 text-xs break-words text-destructive`,children:a}):r?(0,K.jsxs)(`div`,{className:O(`flex min-h-0 flex-1 flex-col`,s&&`opacity-60`),"aria-busy":s,children:[r.warnings.map(e=>(0,K.jsxs)(`p`,{className:`flex shrink-0 items-start gap-1.5 border-b border-border-soft px-2 py-1 text-xs text-warning`,children:[(0,K.jsx)(b,{className:`mt-px size-3.5 shrink-0`}),e]},e)),r.columns.length===0?(0,K.jsx)(Xt,{children:`The file has no rows`}):(0,K.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,K.jsxs)(`table`,{className:`border-collapse`,children:[(0,K.jsx)(`thead`,{children:(0,K.jsx)(`tr`,{children:r.columns.map((e,t)=>(0,K.jsx)(`th`,{className:Q,children:e},t))})}),(0,K.jsx)(`tbody`,{children:r.rows.map((e,t)=>(0,K.jsx)(`tr`,{children:r.columns.map((t,n)=>(0,K.jsx)(`td`,{className:O($,`max-w-[240px] truncate whitespace-nowrap`,(e[n]===null||e[n]===void 0)&&`text-text-subtle italic`),children:en(e[n])},n))},t))})]})})]}):null}var nn=.7,rn=.4,an=.85,on=.02;function sn(e){for(let t of Object.values(ne.getState().panels)){let n=t.tabs.find(t=>t.id===e);if(n)return n}}function cn({metadata:e,tabId:t}){let n=ie(),r=(0,G.useCallback)(e=>{if(!t)return;let n={...sn(t)?.metadata??{},...e};for(let[t,r]of Object.entries(e))r===void 0&&delete n[t];re.getState().updateTab(t,{metadata:n})},[t]),[i,a]=(0,G.useState)(()=>$e(e?.impexp)),o=(0,G.useRef)(i),c=(0,G.useCallback)(e=>{let t=o.current,n=e(t);if(n!==t){o.current=n,a(n);for(let e of He(t,n))St(e);r({impexp:n})}},[r]),l=vt(i.db,t),u=V(i.sourceType)?i.sourceType:null,f=u!==null,[p,m]=(0,G.useState)(()=>Pe(e?.impexpJob)),h=bt(p,(0,G.useCallback)(e=>{m(e),r({impexpJob:e??void 0})},[r])),[g,_]=(0,G.useState)(!1),v=We(i,l.name),b=!!l.target&&l.name===null;(0,G.useEffect)(()=>{!t||b||sn(t)?.title===v||re.getState().updateTab(t,{title:v})},[t,v,b]);let x=(0,G.useRef)(null),C=h.status?.state;(0,G.useEffect)(()=>{if(C===`running`||!x.current)return;let e=x.current;x.current=null,ye(e)},[C]);let w=(0,G.useCallback)(e=>{let t=Je(o.current,[e]);t.rows.some(t=>t.upload?.id===e.id)||St(e.id),c(()=>t)},[c]),T=be(i,l.readonly),ee=()=>{if(!(T||!l.target||h.busy))if(f){let{request:e,rows:t}=Re(i,l.schema);x.current=l.target,h.start(te(l.target,`/impexp/import`),e,`import`,t,g)}else{let{request:e,rows:t}=Ue(i,l.schema,new Date);h.start(te(l.target,`/impexp/export`),e,`export`,t,g)}},E=(0,G.useMemo)(()=>{let e=h.status;return!e||!p||e.id!==p.id||p.kind!==(f?`import`:`export`)?null:Be(p,e.items)},[h.status,p,f]),[D,O]=(0,G.useState)(null),k=f?i.rows.find(e=>e.source===D&&e.upload):void 0,[A,ne]=(0,G.useState)(null),j=A===null?void 0:i.rows.find(e=>e.source===A),[ae,oe]=(0,G.useState)(null),[M,se]=(0,G.useState)({files:!1,messages:!1,preview:!1}),N=e=>se(t=>({...t,[e]:!t[e]})),[P,F]=(0,G.useState)(nn),I=(0,G.useRef)(null),L=e=>Math.min(an,Math.max(rn,e)),ce=e=>{e.preventDefault();let t=I.current?.getBoundingClientRect();if(!t||t.width===0)return;let n=e=>F(L((e.clientX-t.left)/t.width)),r=()=>{window.removeEventListener(`pointermove`,n),window.removeEventListener(`pointerup`,r)};window.addEventListener(`pointermove`,n),window.addEventListener(`pointerup`,r)},le=e=>{let t=e.key===`ArrowLeft`?-on:e.key===`ArrowRight`?on:0;if(e.key===`Home`||e.key===`End`)F(e.key===`Home`?rn:an);else if(t)F(e=>L(e+t));else return;e.preventDefault()};return n?(0,K.jsx)(dt,{empty:`Import/Export needs a wider screen. Open this tab on a computer.`}):(0,K.jsxs)(`div`,{className:`flex h-full w-full flex-col overflow-hidden`,children:[(0,K.jsx)(ut,{label:`Import/Export`,children:h.busy?(0,K.jsx)(ft,{icon:d,label:`Stop`,title:`Stop the job: what is finished stays`,onClick:h.stop,disabled:!h.status}):(0,K.jsx)(ft,{icon:y,label:`Run`,title:T??(f?`Run the import`:`Run the export`),onClick:ee,disabled:!!T})}),(0,K.jsxs)(`div`,{ref:I,className:`flex min-h-0 flex-1 overflow-hidden`,children:[(0,K.jsxs)(`div`,{className:`relative min-w-0 shrink-0`,style:{width:`${P*100}%`},children:[(0,K.jsxs)(`div`,{className:`h-full overflow-y-auto`,inert:h.busy||void 0,children:[(0,K.jsx)(Bt,{form:i,ctx:l,onForm:c,onUploaded:w}),(0,K.jsx)(Wt,{form:i,items:E,existingTables:l.relations.filter(e=>e.kind===`table`).map(e=>e.name),preview:k?k.source:null,onPreview:O,onForm:c,onColumns:ne,onError:oe})]}),h.busy&&(0,K.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center bg-background/70`,role:`status`,children:(0,K.jsxs)(`span`,{className:`flex items-center gap-2 rounded-md border border-border bg-panel px-3 py-2 text-xs text-text-primary shadow-sm`,children:[(0,K.jsx)(S,{className:`size-4 animate-spin`}),`Processing import/export ...`]})})]}),(0,K.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize the configuration`,"aria-valuemin":rn*100,"aria-valuemax":an*100,"aria-valuenow":Math.round(P*100),tabIndex:0,onPointerDown:ce,onKeyDown:le,className:`flex w-1.5 shrink-0 cursor-col-resize touch-none items-center justify-center bg-border/50 can-hover:hover:bg-primary/30 focus-visible:bg-primary/30 focus-visible:outline-none`,children:(0,K.jsx)(s,{className:`size-3 text-text-subtle/50`})}),(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col overflow-hidden border-l border-border`,children:[(0,K.jsx)(Tt,{title:`Output files`,collapsed:M.files,onToggle:()=>N(`files`),className:`h-[20%] shrink-0`,children:(0,K.jsx)(Zt,{files:h.status?.files??[],onDownload:h.download})}),(0,K.jsx)(Tt,{title:`Messages`,collapsed:M.messages,onToggle:()=>N(`messages`),className:`min-h-0 flex-1`,children:(0,K.jsx)(Qt,{messages:h.messages,preserveLogs:g,onPreserveLogs:_})}),k&&u&&(0,K.jsx)(Tt,{title:`Preview`,collapsed:M.preview,onToggle:()=>N(`preview`),className:`min-h-0 flex-1`,children:(0,K.jsx)(tn,{row:k,format:u,options:i.importOptions})})]})]}),j&&(0,K.jsx)(Jt,{form:i,row:j,ctx:l,onClose:()=>ne(null),onConfirm:e=>c(t=>B(t,j.source,{columns:e}))},j.source),ae?.error&&(0,K.jsx)(Et,{title:`Error`,message:ae.error,onClose:()=>oe(null)})]})}export{cn as ImpExpTab};