@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,3 +1,3 @@
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{Kr as r,L as i,Lr as a,P as o,at as s,cn as c,cr as l,gr as u,j as d,mn as f,on as p,ut as m,vr as h,xn as g,yn as _}from"./icons-BwyIKaTT.js";import{k as v}from"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as y}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import{Ct as b,Et as x,Q as S,St as C,Tt as w,_t as T,at as E,bt as D,ct as O,dt as k,ft as ee,gt as te,ht as A,lt as j,mt as ne,ot as re,pt as ie,rt as ae,st as oe,tt as se,ut as ce,vt as le,wt as ue,yt as de}from"./window-store-DqX_qmkQ.js";import{t as M}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 fe}from"./tab-store-D5I52eLN.js";import"./context-menu-BCuZYfWC.js";import{n as pe}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import{r as me}from"./clipboard-D-VCry-F.js";import"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import"./dropdown-menu-BQidk_OJ.js";import"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{t as he,u as ge}from"./adaptive-context-menu-C4jNSORA.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{i as _e,o as ve,s as ye}from"./open-db-tabs-CtWIWHOa.js";import{t as be}from"./sql-identifiers-DDISwQor.js";import"./scroll-area-DOlQJGZp.js";import{Ti as xe,Xn as Se,Yn as Ce,er as we,g as N,h as P,l as F,sr as Te,u as I,v as Ee}from"./index-CPBujJc_.js";import{t as De}from"./use-db-tab-B8LjdDb7.js";import{t as L}from"./use-db-read-BCYhIrJM.js";import{i as Oe,n as ke,r as R,t as Ae}from"./db-tab-parts-tgVIgcs5.js";import{n as je,t as Me}from"./editor-dialog-BhK77FSu.js";var z=e(t(),1);function Ne(e){let t=new Set(e.primaryKey?.columns??[]),n=new Set(e.foreignKeys.flatMap(e=>e.columns));return e.columns.map((e,r)=>({ordinal:r+1,name:e.name,role:t.has(e.name)?`pk`:n.has(e.name)?`fk`:null,notNull:!e.nullable,type:e.type,defaultValue:e.defaultValue??``,computedExpression:e.computedExpression??``,comment:e.comment??``}))}var Pe=(e,t,n)=>e&&e!==n?`${e}.${t}`:t;function Fe(e,t){return{name:e.name,baseColumns:e.columns.join(`, `),refTable:Pe(e.refSchema,e.refTable,t),refColumns:e.refColumns.join(`, `),onUpdate:e.onUpdate,onDelete:e.onDelete,holder:Pe(e.schema,e.table,t)}}function Ie(e){return e.join(`, `)}function Le(e,t){return e.map(e=>Re(e,t)).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{Kr as r,L as i,Lr as a,P as o,at as s,cn as c,cr as l,gr as u,j as d,mn as f,on as p,ut as m,vr as h,xn as g,yn as _}from"./icons-BwyIKaTT.js";import{k as v}from"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as y}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import{Ct as b,Et as x,Q as S,St as C,Tt as w,_t as T,at as E,bt as D,ct as O,dt as k,ft as ee,gt as te,ht as A,lt as j,mt as ne,ot as re,pt as ie,rt as ae,st as oe,tt as se,ut as ce,vt as le,wt as ue,yt as de}from"./window-store-DqX_qmkQ.js";import{t as M}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 fe}from"./tab-store-D5I52eLN.js";import"./context-menu-BCuZYfWC.js";import{n as pe}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import{r as me}from"./clipboard-D-VCry-F.js";import"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import"./dropdown-menu-BQidk_OJ.js";import"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{t as he,u as ge}from"./adaptive-context-menu-C4jNSORA.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{i as _e,o as ve,s as ye}from"./open-db-tabs-CtWIWHOa.js";import{t as be}from"./sql-identifiers-DDISwQor.js";import"./scroll-area-DOlQJGZp.js";import{Ti as xe,Xn as Se,Yn as Ce,er as we,g as N,h as P,l as F,sr as Te,u as I,v as Ee}from"./index-EznfgwH9.js";import{t as De}from"./use-db-tab-B8LjdDb7.js";import{t as L}from"./use-db-read-BCYhIrJM.js";import{i as Oe,n as ke,r as R,t as Ae}from"./db-tab-parts-BbNfuvwC.js";import{n as je,t as Me}from"./editor-dialog-BdkAgK-M.js";var z=e(t(),1);function Ne(e){let t=new Set(e.primaryKey?.columns??[]),n=new Set(e.foreignKeys.flatMap(e=>e.columns));return e.columns.map((e,r)=>({ordinal:r+1,name:e.name,role:t.has(e.name)?`pk`:n.has(e.name)?`fk`:null,notNull:!e.nullable,type:e.type,defaultValue:e.defaultValue??``,computedExpression:e.computedExpression??``,comment:e.comment??``}))}var Pe=(e,t,n)=>e&&e!==n?`${e}.${t}`:t;function Fe(e,t){return{name:e.name,baseColumns:e.columns.join(`, `),refTable:Pe(e.refSchema,e.refTable,t),refColumns:e.refColumns.join(`, `),onUpdate:e.onUpdate,onDelete:e.onDelete,holder:Pe(e.schema,e.table,t)}}function Ie(e){return e.join(`, `)}function Le(e,t){return e.map(e=>Re(e,t)).join(`,
2
2
  `)}function Re(e,t){let n=[be(e.name,t),e.type];return e.generated&&e.computedExpression&&n.push(`GENERATED ALWAYS AS (${e.computedExpression})${t===`postgres`?` STORED`:``}`),e.nullable||n.push(`NOT NULL`),e.defaultValue!==null&&!e.generated&&n.push(`DEFAULT ${e.defaultValue}`),e.autoIncrement&&t===`mysql`&&n.push(`AUTO_INCREMENT`),e.autoIncrement&&t===`postgres`&&e.defaultValue===null&&n.push(`GENERATED BY DEFAULT AS IDENTITY`),n.join(` `)}var ze={postgres:`bigint.bigserial.bit.varbit.boolean.box.bytea.char(20).varchar(250).cidr.circle.date.double precision.inet.int.interval.json.jsonb.line.lseg.macaddr.macaddr8.money.decimal.numeric(10,2).path.pg_lsn.pg_snapshot.point.polygon.real.smallint.smallserial.serial.text.time.timetz.timestamp.timestamptz.tsquery.tsvector.txid_snapshot.uuid.xml`.split(`.`),mysql:`char(20).varchar(250).binary(250).varbinary(250).tinyblob.tinytext.text(1000).blob(1000).mediumtext.mediumblob.longtext.longblob.enum('val1','val2','val3').set('val1','val2','val3').bit(32).tinyint.bool.smallint.mediumint.int.bigint.float.double.decimal.date.datetime.timestamp.time.year`.split(`.`),sqlite:[`INTEGER`,`REAL`,`TEXT`,`BLOB`,`NUMERIC`]};function Be(e){return ze[e]}var Ve={mysql:[`InnoDB`,`MyISAM`,`MEMORY`,`CSV`,`ARCHIVE`,`BLACKHOLE`,`FEDERATED`,`MRG_MYISAM`,`NDB`,`EXAMPLE`,`PERFORMANCE_SCHEMA`,`SEQUENCE`,`SPIDER`,`ROCKSDB`,`TokuDB`],mariadb:[`InnoDB`,`Aria`,`MyISAM`,`MEMORY`,`CSV`,`ARCHIVE`,`BLACKHOLE`,`FEDERATED`,`MRG_MyISAM`,`SEQUENCE`,`SphinxSE`,`SPIDER`,`TokuDB`,`RocksDB`,`CONNECT`,`OQGRAPH`,`ColumnStore`,`Mroonga`,`S3`,`XtraDB`]};function He(e){return Ve[e]??[]}function Ue(e){return e===`postgres`}function We(e){let t=new Set(e.primaryKey?.columns??[]),n=new Set(e.foreignKeys.flatMap(e=>e.columns));return e.columns.map((e,r)=>({id:e.id,ordinal:r+1,name:e.name,role:t.has(e.id)?`pk`:n.has(e.id)?`fk`:null,notNull:e.notNull,type:e.type,defaultValue:e.defaultValue??``,computedExpression:e.computedExpression??``,comment:e.comment??``,unsigned:e.unsigned,zerofill:e.zerofill}))}var Ge=(e,t)=>t.map(t=>k(e,t)).join(`, `);function Ke(e,t){return t.columnId===null?t.expression??``:k(e,t.columnId)}function qe(e){let t=e.primaryKey;return t?{id:t.id,name:t.name,columns:Ge(e,t.columns)}:null}function Je(e){return e.uniques.map(t=>({id:t.id,name:t.name,columns:Ge(e,t.columns)}))}function Ye(e){return e.indexes.map(t=>({id:t.id,name:t.name||null,columns:t.columns.map(t=>Ke(e,t)).join(`, `),unique:t.unique}))}function Xe(e,t){return e.refSchema&&e.refSchema!==t?`${e.refSchema}.${e.refTable}`:e.refTable}function Ze(e){return e.foreignKeys.map(t=>({id:t.id,name:t.name,baseColumns:Ge(e,t.columns),refTable:Xe(t,e.schema),refColumns:t.refColumns.join(`, `),onUpdate:t.onUpdate??``,onDelete:t.onDelete??``}))}function Qe(e,t){return{name:e.name,type:ie(e,t),nullable:!e.notNull,defaultValue:e.defaultValue,comment:e.comment,autoIncrement:e.autoIncrement,generated:!!e.computedExpression,computedExpression:e.computedExpression}}function $e(e,t,n){return e.columns.filter(e=>t.has(e.id)).map(e=>Re(Qe(e,n),n)).join(`,
3
3
  `)}function et(e,t){return e.columns.filter(e=>t.has(e.id)).map(e=>e.name).join(`, `)}var tt={"NO ACTION":`No Action`,CASCADE:`Cascade`,RESTRICT:`Restrict`,"SET NULL":`Set Null`,"SET DEFAULT":`Set Default`};function nt(e){return[{value:null,label:`(not selected)`},...[`NO ACTION`,`CASCADE`,`RESTRICT`,`SET NULL`,...e===`SET DEFAULT`?[`SET DEFAULT`]:[]].map(e=>({value:e,label:tt[e]}))]}function rt(e){return e.method?e.method.toLowerCase():e.unique?`unique`:`normal`}function it(e){let t=[{value:`normal`,label:`Normal`},{value:`unique`,label:`Unique`},{value:`fulltext`,label:`Fulltext`}],n=rt(e);return t.some(e=>e.value===n)?t:[...t,{value:n,label:n[0].toUpperCase()+n.slice(1)}]}function at(e,t){return t===rt(e)?e:t===`normal`?{...e,unique:!1,method:null}:t===`unique`?{...e,unique:!0,method:null}:{...e,unique:!1,method:t}}function ot(e){return e.objects.filter(e=>e.kind===`table`).map(e=>({schema:e.schema,name:e.name,label:e.schema?`${e.schema}.${e.name}`:e.name})).sort((e,t)=>(e.schema??``).localeCompare(t.schema??``)||e.name.localeCompare(t.name))}function B(e){return`${e.schema??``}\u0000${e.name}`}function st(e){return e.columns.length+1}function V(e,t){let n={...e,...t};return{...n,foreignKeys:e.foreignKeys.map(t=>te(e,t)?{...t,refTable:n.name,refSchema:n.schema}:t)}}var H=n();function ct({model:e,dialect:t,dbType:n,editable:r,isNew:i,references:a,schemas:o,onChange:s,openDialog:l}){let[u,p]=(0,z.useState)(new Set),m=e=>({collapsed:u.has(e),onToggle:()=>p(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}),h=qe(e),g=(0,z.useMemo)(()=>Ye(e),[e]),v=(0,z.useMemo)(()=>Je(e),[e]),y=(0,z.useMemo)(()=>Ze(e),[e]),b=(0,z.useMemo)(()=>a.map(t=>Fe(t,e.schema)),[a,e.schema]),x=e.columns.length>0,S=e=>r||e>0,C=(e,t)=>s(n=>ue(n,e,t)),w=Ue(t);return(0,H.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)] content-start gap-[18px] px-[18px] pt-3.5 pb-7`,children:[(0,H.jsx)(dt,{model:e,dbType:n,dialect:t,editable:r,isNew:i,schemas:o,onChange:s}),(0,H.jsx)(ft,{model:e,dialect:t,editable:r,onChange:s,openDialog:l,...m(`columns`)}),S(h?1:0)&&(0,H.jsx)(G,{title:`Primary key`,...m(`pk`),onAddNew:r&&!h&&x?()=>l({kind:`key`,keyKind:`primaryKey`,id:null}):void 0,empty:h?null:`No primary key defined`,head:[...w?[`Name`]:[],`Columns`,...r?[``]:[]],children:h&&(0,H.jsxs)(K,{onOpen:()=>l({kind:`key`,keyKind:`primaryKey`,id:h.id}),label:`Primary key on ${h.columns}`,children:[w&&(0,H.jsx)(`td`,{className:W,children:(0,H.jsx)(J,{icon:(0,H.jsx)(c,{className:`size-[15px] shrink-0 text-warning`,"aria-hidden":!0}),name:h.name})}),(0,H.jsx)(`td`,{className:W,children:w?h.columns:(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,H.jsx)(c,{className:`size-[15px] shrink-0 text-warning`,"aria-hidden":!0}),h.columns]})}),r&&(0,H.jsx)(q,{onRemove:()=>C(`primaryKey`,h.id)})]})}),S(g.length)&&(0,H.jsx)(G,{title:`Indexes (${g.length})`,...m(`indexes`),onAddNew:r&&x?()=>l({kind:`key`,keyKind:`index`,id:null}):void 0,empty:g.length===0?`No index defined`:null,head:[`Name`,`Columns`,`Unique`,...r?[``]:[]],children:g.map(e=>(0,H.jsxs)(K,{onOpen:()=>l({kind:`key`,keyKind:`index`,id:e.id}),label:`Index ${e.name??e.columns}`,children:[(0,H.jsx)(`td`,{className:W,children:(0,H.jsx)(J,{icon:(0,H.jsx)(_,{className:`size-[15px] shrink-0 text-text-subtle`,"aria-hidden":!0}),name:e.name})}),(0,H.jsx)(`td`,{className:W,children:e.columns}),(0,H.jsx)(`td`,{className:W,children:e.unique?`YES`:`NO`}),r&&(0,H.jsx)(q,{onRemove:()=>C(`indexes`,e.id)})]},e.id))}),S(v.length)&&(0,H.jsx)(G,{title:`Unique constraints (${v.length})`,...m(`uniques`),onAddNew:r&&x?()=>l({kind:`key`,keyKind:`unique`,id:null}):void 0,empty:v.length===0?`No unique defined`:null,head:[`Name`,`Columns`,...r?[``]:[]],children:v.map(e=>(0,H.jsxs)(K,{onOpen:()=>l({kind:`key`,keyKind:`unique`,id:e.id}),label:`Unique constraint ${e.name??e.columns}`,children:[(0,H.jsx)(`td`,{className:W,children:(0,H.jsx)(J,{icon:(0,H.jsx)(d,{className:`size-[15px] shrink-0 text-text-subtle`,"aria-hidden":!0}),name:e.name})}),(0,H.jsx)(`td`,{className:W,children:e.columns}),r&&(0,H.jsx)(q,{onRemove:()=>C(`uniques`,e.id)})]},e.id))}),S(y.length)&&(0,H.jsx)(G,{title:`Foreign keys (${y.length})`,...m(`fks`),onAddNew:r&&x?()=>l({kind:`foreignKey`,id:null}):void 0,empty:y.length===0?`No foreign key defined`:null,head:[...ut,...r?[``]:[]],children:y.map(e=>(0,H.jsxs)(K,{onOpen:()=>l({kind:`foreignKey`,id:e.id}),label:`Foreign key ${e.name??e.baseColumns}`,children:[(0,H.jsx)(`td`,{className:W,children:(0,H.jsx)(J,{icon:(0,H.jsx)(f,{className:`size-[15px] shrink-0 text-info`,"aria-hidden":!0}),name:e.name})}),(0,H.jsx)(`td`,{className:W,children:e.baseColumns}),(0,H.jsx)(`td`,{className:W,children:e.refTable}),(0,H.jsx)(`td`,{className:W,children:e.refColumns}),(0,H.jsx)(`td`,{className:W,children:e.onUpdate}),(0,H.jsx)(`td`,{className:W,children:e.onDelete}),r&&(0,H.jsx)(q,{onRemove:()=>C(`foreignKeys`,e.id)})]},e.id))}),b.length>0&&(0,H.jsx)(G,{title:`Dependencies (${b.length})`,...m(`deps`),empty:null,head:ut,children:b.map((e,t)=>(0,H.jsxs)(`tr`,{className:U,children:[(0,H.jsx)(`td`,{className:W,children:(0,H.jsx)(J,{icon:(0,H.jsx)(f,{className:`size-[15px] shrink-0 text-info`,"aria-hidden":!0}),name:e.name,title:`${e.holder} (${e.baseColumns}) → ${e.refTable} (${e.refColumns})`})}),(0,H.jsx)(`td`,{className:W,children:e.baseColumns}),(0,H.jsx)(`td`,{className:W,children:e.refTable}),(0,H.jsx)(`td`,{className:W,children:e.refColumns}),(0,H.jsx)(`td`,{className:W,children:e.onUpdate}),(0,H.jsx)(`td`,{className:W,children:e.onDelete})]},`${e.holder}\u0000${e.name??t}`))})]})}var U=`can-hover:hover:bg-surface-hover`,W=`whitespace-nowrap border-b border-border-soft px-2.5 py-1.5`,lt=`font-mono text-[11.5px]`,ut=[`Name`,`Base columns`,`Referenced table`,`Referenced columns`,`ON UPDATE`,`ON DELETE`];function G({title:e,collapsed:t,onToggle:n,onAddNew:r,actions:a,empty:s,head:c,children:u,wrapBox:d}){let f=(0,H.jsx)(`div`,{className:`overflow-x-auto rounded-md border border-border bg-panel-2`,children:(0,H.jsxs)(`table`,{className:`w-full border-collapse text-[12.5px]`,children:[(0,H.jsx)(`thead`,{children:(0,H.jsx)(`tr`,{children:c.map((e,t)=>(0,H.jsx)(`th`,{scope:`col`,className:`whitespace-nowrap border-b border-border-soft bg-panel px-2.5 py-1.5 text-left text-[11px] font-semibold text-text-subtle`,children:e},t))})}),(0,H.jsx)(`tbody`,{className:`[&>tr:last-child>td]:border-b-0`,children:u})]})});return(0,H.jsxs)(`section`,{"aria-label":e,children:[(0,H.jsxs)(`div`,{className:`mb-1.5 flex min-h-6 flex-wrap items-center gap-x-3 gap-y-1`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:n,"aria-expanded":!t,className:`-ml-1 flex items-center gap-1 rounded px-1 text-[12.5px] font-semibold text-text-primary can-hover:hover:bg-surface-hover`,children:[t?(0,H.jsx)(i,{className:`size-3.5 text-text-subtle`,"aria-hidden":!0}):(0,H.jsx)(o,{className:`size-3.5 text-text-subtle`,"aria-hidden":!0}),(0,H.jsx)(`h3`,{children:e})]}),r&&(0,H.jsxs)(`button`,{type:`button`,onClick:r,className:`flex items-center gap-1 rounded px-1 text-xs text-primary underline-offset-2 can-hover:hover:underline`,children:[(0,H.jsx)(l,{className:`size-3.5`,"aria-hidden":!0}),` Add new`]}),a]}),s?(0,H.jsx)(`p`,{className:`ml-0.5 text-xs italic text-text-subtle`,children:s}):!t&&(d?d(f):f)]})}function K({onOpen:e,label:t,children:n}){return(0,H.jsx)(`tr`,{tabIndex:0,"aria-label":t,onClick:e,onKeyDown:t=>{t.key===`Enter`&&t.target===t.currentTarget&&(t.preventDefault(),e())},className:y(U,`cursor-pointer select-none outline-none focus-visible:bg-accent-wash`),children:n})}function q({onRemove:e}){return(0,H.jsx)(`td`,{className:y(W,`w-px text-right`),children:(0,H.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),e()},onKeyDown:e=>e.stopPropagation(),className:`rounded px-1 text-xs text-primary underline-offset-2 can-hover:hover:underline`,children:`Remove`})})}function J({icon:e,name:t,title:n}){return(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,title:n,children:[e,t??(0,H.jsx)(`span`,{className:`italic text-text-dim`,children:`unnamed`})]})}function dt({model:e,dbType:t,dialect:n,editable:r,isNew:i,schemas:a,onChange:o}){let s=n===`mysql`;if(!i&&!s)return null;let c=!r,l=a&&e.schema&&!a.includes(e.schema)?[e.schema,...a]:a;return(0,H.jsxs)(`section`,{"aria-label":`Table properties`,className:`grid gap-2`,children:[(0,H.jsx)(`h3`,{className:`ml-0.5 text-[12.5px] font-semibold text-text-primary`,children:`Table properties`}),(0,H.jsxs)(`div`,{className:`grid max-w-3xl grid-cols-[repeat(auto-fill,minmax(14rem,1fr))] gap-3 rounded-md border border-border bg-panel-2 p-3`,children:[i&&n===`postgres`&&(0,H.jsx)(I,{label:`Schema`,htmlFor:`table-prop-schema`,children:l?(0,H.jsx)(P,{id:`table-prop-schema`,value:e.schema??``,disabled:c,onChange:e=>o(t=>V(t,{schema:e.target.value||null})),children:l.map(e=>(0,H.jsx)(`option`,{value:e,children:e},e))}):(0,H.jsx)(N,{id:`table-prop-schema`,value:e.schema??``,disabled:c,mono:!0,onChange:e=>o(t=>V(t,{schema:e.target.value||null}))})}),i&&(0,H.jsx)(I,{label:`Table name`,htmlFor:`table-prop-name`,children:(0,H.jsx)(N,{id:`table-prop-name`,value:e.name,disabled:c,mono:!0,onChange:e=>o(t=>V(t,{name:e.target.value}))})}),s&&(0,H.jsx)(I,{label:`Engine`,htmlFor:`table-prop-engine`,children:(0,H.jsx)(je,{id:`table-prop-engine`,value:e.engine??``,options:He(t),disabled:c,listLabel:`Choose an engine`,onChange:e=>o(t=>({...t,engine:e.trim()===``?null:e}))})}),s&&(0,H.jsx)(I,{label:`Comment`,htmlFor:`table-prop-comment`,children:(0,H.jsx)(N,{id:`table-prop-comment`,value:e.comment??``,disabled:c,onChange:e=>o(t=>({...t,comment:e.target.value===``?null:e.target.value}))})})]})]})}function ft({model:e,dialect:t,editable:n,onChange:r,openDialog:i,collapsed:a,onToggle:o}){let s=(0,z.useMemo)(()=>We(e),[e]),[l,u]=(0,z.useState)(new Set),[d,p]=(0,z.useState)(null),h=(0,z.useRef)(null);(0,z.useEffect)(()=>{u(e=>Array.from(e).every(e=>s.some(t=>t.id===e))?e:new Set(Array.from(e).filter(e=>s.some(t=>t.id===e))))},[s]),(0,z.useEffect)(()=>{let e=()=>{h.current=null};return window.addEventListener(`mouseup`,e),()=>window.removeEventListener(`mouseup`,e)},[]);let g=(e,t)=>new Set(s.slice(Math.min(e,t),Math.max(e,t)+1).map(e=>e.id)),_=(e,t)=>{t.button!==0||t.shiftKey||t.ctrlKey||t.metaKey||(h.current=e)},v=(e,t)=>{h.current===null||!(t.buttons&1)||e===h.current||(u(g(h.current,e)),p(s[h.current].id))},x=(e,t,n)=>{if(n.shiftKey&&d){u(g(s.findIndex(e=>e.id===d),t));return}if(n.ctrlKey||n.metaKey){let t=new Set(l);t.has(e)?t.delete(e):t.add(e),u(t),p(e);return}u(new Set([e])),p(e),i({kind:`column`,id:e})},S=(e,t)=>{t.key===`Enter`&&t.target===t.currentTarget&&(t.preventDefault(),u(new Set([e])),p(e),i({kind:`column`,id:e}))},C=e=>{r(t=>b(t,Array.from(e))),u(new Set)},w=e=>l.has(e)?l:new Set([e]),T=we(n=>{if(!n||!s.some(e=>e.id===n))return null;let r=w(n);return[{kind:`item`,label:`Copy names`,icon:m,onSelect:()=>void Y(et(e,r))},{kind:`item`,label:`Copy definitions`,icon:m,onSelect:()=>void Y($e(e,r,t))}]},e=>{l.has(e)||(u(new Set([e])),p(e))}),E=l.size,D=E>0&&(0,H.jsxs)(`span`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1`,children:[n&&(0,H.jsxs)(pt,{onClick:()=>C(l),children:[`Remove (`,E,`)`]}),(0,H.jsxs)(pt,{onClick:()=>void Y(et(e,l)),children:[`Copy names (`,E,`)`]}),(0,H.jsxs)(pt,{onClick:()=>void Y($e(e,l,t)),children:[`Copy definitions (`,E,`)`]})]}),O=t===`mysql`;return(0,H.jsx)(G,{title:`Columns (${s.length})`,collapsed:a,onToggle:o,onAddNew:n?()=>i({kind:`column`,id:null}):void 0,actions:D,empty:s.length===0?`No columns defined`:null,head:[``,`Name`,`Nullability`,`Data type`,`Default value`,`Computed Expression`,`Comment`,...O?[`Unsigned`,`Zero fill`]:[],...n?[``]:[]],wrapBox:e=>(0,H.jsxs)(he,{children:[(0,H.jsx)(ge,{asChild:!0,children:(0,z.cloneElement)(e,T.listProps)}),T.entries&&(0,H.jsx)(Te,{entries:T.entries})]}),children:s.map((e,t)=>(0,H.jsxs)(`tr`,{"data-row-key":e.id,tabIndex:0,"aria-selected":l.has(e.id),"aria-label":`Column ${e.name}`,onMouseDown:e=>_(t,e),onMouseEnter:e=>v(t,e),onClick:n=>x(e.id,t,n),onKeyDown:t=>S(e.id,t),className:y(U,`cursor-pointer select-none outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-ring`,l.has(e.id)&&`bg-accent-wash can-hover:hover:bg-accent-wash`),children:[(0,H.jsx)(`td`,{className:y(W,`w-9 font-mono text-[11px] text-text-subtle`),children:e.ordinal}),(0,H.jsx)(`td`,{className:W,children:(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[e.role===`pk`?(0,H.jsx)(c,{className:`size-[15px] shrink-0 text-warning`,"aria-label":`Primary key`}):e.role===`fk`?(0,H.jsx)(f,{className:`size-[15px] shrink-0 text-info`,"aria-label":`Foreign key`}):(0,H.jsx)(`span`,{"aria-hidden":!0,className:`grid w-[15px] shrink-0 place-items-center`,children:(0,H.jsx)(`span`,{className:`size-1 rounded-full bg-text-subtle opacity-60`})}),(0,H.jsx)(`span`,{className:e.notNull?`font-semibold`:`font-normal`,children:e.name})]})}),(0,H.jsx)(`td`,{className:W,children:e.notNull?`NOT NULL`:`NULL`}),(0,H.jsx)(`td`,{className:y(W,lt),children:e.type}),(0,H.jsx)(`td`,{className:y(W,lt),children:e.defaultValue}),(0,H.jsx)(`td`,{className:y(W,lt),children:e.computedExpression}),(0,H.jsx)(`td`,{className:W,children:e.comment}),O&&(0,H.jsx)(`td`,{className:W,children:e.unsigned?`YES`:`NO`}),O&&(0,H.jsx)(`td`,{className:W,children:e.zerofill?`YES`:`NO`}),n&&(0,H.jsx)(q,{onRemove:()=>{r(t=>b(t,[e.id])),u(t=>{let n=new Set(t);return n.delete(e.id),n})}})]},e.id))})}function pt({onClick:e,children:t}){return(0,H.jsx)(`button`,{type:`button`,onClick:e,className:`rounded px-1 text-xs text-primary underline-offset-2 can-hover:hover:underline`,children:t})}async function Y(e){await me(e)?v.success(`Copied`):v.error(`The clipboard is not available here`)}var mt=`Default value. Please use valid SQL expression, eg. 'Hello World' for string value, '' for empty string`,ht=e=>e.trim()===``?null:e;function gt({model:e,columnId:t,dialect:n,editable:r,onChange:i,onClose:a}){let o=t?ce(e,t)??null:null,[s,c]=(0,z.useState)(()=>o??j(D(e))),[l,u]=(0,z.useState)(()=>o?A(e,o.id):!1),[d,f]=(0,z.useState)(()=>st(e)),[p,m]=(0,z.useState)(!1),h=o===null,g=(e,t)=>c(n=>({...n,[e]:t})),_=()=>({...s,name:s.name===o?.name?s.name:s.name.trim(),type:s.type===o?.type?s.type:s.type.trim()}),v=(0,z.useMemo)(()=>ee(e,_(),n),[e,s,n]),y=()=>{if(m(!0),v.length>0)return null;let t=_(),n=w(e,t,l);return i(e=>w(e,t,l)),n},x=()=>{y()&&a()},S=()=>{let e=y();e&&(c(j(D(e))),u(!1),f(st(e)),m(!1))},C=r?h?[{label:`Save and next`,onClick:S,variant:`default`},{label:`Save`,onClick:x},{label:`Close`,onClick:a}]:[{label:`Save`,onClick:x,variant:`default`},{label:`Close`,onClick:a},{label:`Remove`,onClick:()=>{o&&(i(e=>b(e,[o.id])),a())},variant:`destructive`}]:[{label:`Close`,onClick:a}],T=e=>`table-column-${e}`,E=!r;return(0,H.jsxs)(Me,{title:h?`Add column ${d}`:`Edit column`,description:h?`A new column of the table`:`The column ${o.name}`,onClose:a,onSubmit:r?h?S:x:void 0,problems:p?v:[],buttons:C,children:[(0,H.jsx)(I,{label:`Column name`,htmlFor:T(`name`),children:(0,H.jsx)(N,{id:T(`name`),value:s.name,disabled:E,autoFocus:r,mono:!0,onChange:e=>g(`name`,e.target.value)})}),(0,H.jsx)(I,{label:`Data type`,htmlFor:T(`type`),children:(0,H.jsx)(je,{id:T(`type`),value:s.type,onChange:e=>g(`type`,e),options:Be(n),disabled:E,listLabel:`Choose a data type`,mono:!0})}),(0,H.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4 gap-y-1`,children:[(0,H.jsx)(F,{id:T(`not-null`),title:`NOT NULL`,checked:s.notNull,disabled:E,onChange:e=>g(`notNull`,e)}),(0,H.jsx)(F,{id:T(`pk`),title:`Is Primary Key`,checked:l,disabled:E,onChange:u}),(0,H.jsx)(F,{id:T(`auto`),title:`Is Autoincrement`,checked:s.autoIncrement,disabled:E,onChange:e=>c(t=>({...t,autoIncrement:e,notNull:e?!0:t.notNull}))}),n===`mysql`&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(F,{id:T(`unsigned`),title:`Unsigned`,checked:s.unsigned,disabled:E,onChange:e=>g(`unsigned`,e)}),(0,H.jsx)(F,{id:T(`zerofill`),title:`Zero fill`,checked:s.zerofill,disabled:E,onChange:e=>g(`zerofill`,e)})]})]}),(0,H.jsx)(I,{label:mt,htmlFor:T(`default`),children:(0,H.jsx)(N,{id:T(`default`),value:s.defaultValue??``,disabled:E,mono:!0,onChange:e=>g(`defaultValue`,ht(e.target.value))})}),(0,H.jsx)(I,{label:`Computed expression`,htmlFor:T(`computed`),children:(0,H.jsx)(N,{id:T(`computed`),value:s.computedExpression??``,disabled:E,mono:!0,onChange:e=>g(`computedExpression`,ht(e.target.value))})}),n===`mysql`&&(0,H.jsx)(I,{label:`Comment`,htmlFor:T(`comment`),children:(0,H.jsx)(N,{id:T(`comment`),value:s.comment??``,disabled:E,onChange:e=>g(`comment`,ht(e.target.value))})})]})}function _t(e){return`/structure?table=${encodeURIComponent(e.name)}${e.schema?`&schema=${encodeURIComponent(e.schema)}`:``}`}function vt({model:e,itemId:t,dialect:n,target:i,editable:a,onChange:o,onClose:s}){let c=t?e.foreignKeys.find(e=>e.id===t)??null:null,[u,d]=(0,z.useState)(()=>c??{id:D(e),name:null,columns:[],refSchema:e.schema,refTable:``,refColumns:[],onUpdate:null,onDelete:null}),[f,p]=(0,z.useState)(!1),[m,h]=(0,z.useState)(!1),_=L(i,`/objects`,void 0),v=u.refTable!==``&&te(e,u),y=L(i,u.refTable&&!v?_t({schema:u.refSchema,name:u.refTable}):null,void 0),b=v?e.columns.map(e=>e.name):y.data?y.data.columns.map(e=>e.name):null,S=(0,z.useMemo)(()=>{let t=_.data?ot(_.data):[],n=[{schema:e.schema,name:e.name,label:e.schema?`${e.schema}.${e.name}`:e.name},...c?.refTable?[{schema:c.refSchema,name:c.refTable,label:c.refSchema?`${c.refSchema}.${c.refTable}`:c.refTable}]:[]];for(let e of n)e.name&&!t.some(t=>B(t)===B(e))&&t.push(e);return t},[_.data,e.schema,e.name,c]);(0,z.useEffect)(()=>{if(!m)return;let t=v?e.primaryKey?.columns.map(t=>e.columns.find(e=>e.id===t)?.name??``):y.data?.primaryKey?.columns;!v&&!y.data||(h(!1),t&&t.length>0&&d(e=>e.columns.length>0?e:{...e,columns:t.map(()=>``),refColumns:[...t]}))},[m,v,y.data,e]);let C=(0,z.useMemo)(()=>{let t=ne(e,u);T(e,u.id,u.name??``,n)&&t.push(`Another key or index is named ${u.name.trim()}`);let r=b?u.refColumns.filter(e=>e&&!b.includes(e)):[];return r.length>0&&t.push(`${u.refTable} has no column ${r.join(`, `)}`),t},[e,u,n,b]),w=e=>d(t=>({...t,...e})),E=(e,t,n)=>d(r=>({...r,[t]:r[t].map((t,r)=>r===e?n:t)})),O=t=>{let n=S.find(e=>B(e)===t);w({refSchema:n?.schema??e.schema,refTable:n?.name??``}),n&&u.columns.length===0&&h(!0)},k=()=>{if(p(!0),C.length>0)return;let e={...u,name:u.name?.trim()||null};o(t=>x(t,`foreignKeys`,e)),s()},ee=a?[{label:`Save`,onClick:k,variant:`default`},{label:`Close`,onClick:s},...c?[{label:`Remove`,onClick:()=>{c&&(o(e=>ue(e,`foreignKeys`,c.id)),s())},variant:`destructive`}]:[]]:[{label:`Close`,onClick:s}],A=e=>`table-fk-${e}`,j=!a,re=u.refTable?B({schema:u.refSchema,name:u.refTable}):``,ie=(e,t)=>(0,H.jsx)(I,{label:t,htmlFor:A(e),children:(0,H.jsx)(P,{id:A(e),value:u[e]??``,disabled:j,onChange:t=>w({[e]:t.target.value||null}),children:nt(u[e]).map(e=>(0,H.jsx)(`option`,{value:e.value??``,children:e.label},e.label))})});return(0,H.jsxs)(Me,{title:c?`Edit foreign key`:`Add foreign key`,description:`The table this key points at, and the columns that point`,onClose:s,onSubmit:a?k:void 0,problems:f?C:[],buttons:ee,wide:!0,children:[(0,H.jsx)(I,{label:`Constraint name`,htmlFor:A(`name`),children:(0,H.jsx)(N,{id:A(`name`),value:u.name??``,disabled:j,mono:!0,onChange:e=>w({name:e.target.value})})}),(0,H.jsx)(I,{label:`Referenced table`,htmlFor:A(`table`),error:_.error,children:(0,H.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,H.jsxs)(P,{id:A(`table`),value:re,disabled:j,className:`font-mono`,onChange:e=>O(e.target.value),children:[(0,H.jsx)(`option`,{value:``,children:`(not selected)`}),S.map(e=>(0,H.jsx)(`option`,{value:B(e),children:e.label},B(e)))]}),(_.loading||y.loading)&&(0,H.jsx)(g,{"aria-label":`Loading`,className:`size-4 shrink-0 animate-spin text-text-subtle`})]})}),(0,H.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[ie(`onUpdate`,`On update action`),ie(`onDelete`,`On delete action`)]}),(0,H.jsxs)(`div`,{role:`group`,"aria-label":`Columns`,className:`grid gap-1.5`,children:[(0,H.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_minmax(0,1fr)_30px] gap-1.5 text-xs font-medium text-text-2`,children:[(0,H.jsxs)(`span`,{className:`truncate`,children:[`Base column - `,e.name]}),(0,H.jsxs)(`span`,{className:`truncate`,children:[`Ref column - `,u.refTable||`(table not set)`]})]}),u.columns.map((t,n)=>(0,H.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_minmax(0,1fr)_30px] items-center gap-1.5`,children:[(0,H.jsxs)(P,{"aria-label":`Base column ${n+1}`,value:t,disabled:j,className:`font-mono`,onChange:e=>E(n,`columns`,e.target.value),children:[(0,H.jsx)(`option`,{value:``,children:`(not selected)`}),e.columns.map(e=>(0,H.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,H.jsxs)(P,{"aria-label":`Ref column ${n+1}`,value:u.refColumns[n]??``,disabled:j,className:`font-mono`,onChange:e=>E(n,`refColumns`,e.target.value),children:[(0,H.jsx)(`option`,{value:``,children:`(not selected)`}),[...new Set([...b??[],...u.refColumns[n]?[u.refColumns[n]]:[]])].map(e=>(0,H.jsx)(`option`,{value:e,children:e},e))]}),a?(0,H.jsx)(`button`,{type:`button`,"aria-label":`Delete column ${n+1}`,title:`Delete`,onClick:()=>w({columns:u.columns.filter((e,t)=>t!==n),refColumns:u.refColumns.filter((e,t)=>t!==n)}),className:`grid size-[30px] place-items-center rounded-md text-text-subtle can-hover:hover:bg-surface-hover can-hover:hover:text-error`,children:(0,H.jsx)(r,{className:`size-4`})}):(0,H.jsx)(`span`,{})]},n)),a&&(0,H.jsxs)(`button`,{type:`button`,onClick:()=>w({columns:[...u.columns,``],refColumns:[...u.refColumns,``]}),className:`flex h-[30px] w-fit items-center gap-1.5 rounded-md px-2 text-[12.5px] text-primary can-hover:hover:bg-surface-hover`,children:[(0,H.jsx)(l,{className:`size-3.5`}),` Add column`]})]})]})}var yt={primaryKey:`primary key`,unique:`unique`,index:`index`},bt=e=>({columnId:e,expression:null,descending:!1});function xt(e,t,n){if(t===`primaryKey`&&e.primaryKey&&(n===null||e.primaryKey.id===n)){let t=e.primaryKey;return{exists:!0,draft:{id:t.id,name:t.name??``,parts:t.columns.map(bt),unique:!0,method:null,where:``}}}if(t===`unique`){let t=e.uniques.find(e=>e.id===n);if(t)return{exists:!0,draft:{id:t.id,name:t.name??``,parts:t.columns.map(bt),unique:!0,method:null,where:``}}}if(t===`index`){let t=e.indexes.find(e=>e.id===n);if(t)return{exists:!0,draft:{id:t.id,name:t.name,parts:t.columns.map(e=>({...e})),unique:t.unique,method:t.method,where:t.where??``}}}return{exists:!1,draft:{id:D(e),name:``,parts:[],unique:!1,method:null,where:``}}}function St(e,t,n,r){let i=n.parts.flatMap(e=>e.columnId===null?[]:[e.columnId]);if(t===`primaryKey`){let t=Ue(r)?n.name.trim()||null:e.primaryKey?.name??null;return{...e,primaryKey:{id:n.id,name:t,columns:i}}}return t===`unique`?x(e,`uniques`,{id:n.id,name:n.name.trim()||null,columns:i}):x(e,`indexes`,{id:n.id,name:n.name.trim(),columns:n.parts,unique:n.unique,method:n.method,where:n.where.trim()||null})}function Ct({kind:e,model:t,itemId:n,dialect:i,editable:a,onChange:o,onClose:s}){let[{draft:c,exists:l}]=(0,z.useState)(()=>xt(t,e,n)),[u,d]=(0,z.useState)(c),[f,p]=(0,z.useState)(!1),m=e!==`primaryKey`||Ue(i),h=(0,z.useMemo)(()=>{let n=le(t,u.parts.map(e=>e.columnId),e);return m&&T(t,u.id,u.name,i)&&n.push(`Another key or index is named ${u.name.trim()}`),n},[t,u,e,m,i]),g=e=>d(t=>({...t,...e})),_=(e,t)=>g({parts:u.parts.map((n,r)=>r===e?{...n,...t}:n)}),v=()=>{p(!0),!(h.length>0)&&(o(t=>St(t,e,u,i)),s())},y=a?[{label:`Save`,onClick:v,variant:`default`},{label:`Close`,onClick:s},...l?[{label:`Remove`,onClick:()=>{o(t=>ue(t,e===`primaryKey`?`primaryKey`:e===`unique`?`uniques`:`indexes`,u.id)),s()},variant:`destructive`}]:[]]:[{label:`Close`,onClick:s}],b=new Set(u.parts.map(e=>e.columnId)),x=t.columns.filter(e=>!b.has(e.id)),S=u.parts.map(e=>e.columnId===null?``:k(t,e.columnId)).filter(Boolean),C=O(e===`primaryKey`?`PK`:e===`unique`?`UQ`:`IX`,t.name,S),w=e=>`table-key-${e}`,E=!a;return(0,H.jsxs)(Me,{title:`${l?`Edit`:`Add`} ${yt[e]}`,description:`The columns of the ${yt[e]}`,onClose:s,onSubmit:a?v:void 0,problems:f?h:[],buttons:y,children:[m&&(0,H.jsx)(I,{label:e===`index`?`Index name`:`Constraint name`,htmlFor:w(`name`),children:(0,H.jsx)(N,{id:w(`name`),value:u.name,disabled:E,mono:!0,placeholder:a?C:void 0,onChange:e=>g({name:e.target.value})})}),e===`index`&&i===`mysql`&&(0,H.jsx)(I,{label:`Index type`,htmlFor:w(`type`),children:(0,H.jsx)(P,{id:w(`type`),value:rt(u),disabled:E,onChange:e=>d(t=>at(t,e.target.value)),children:it(u).map(e=>(0,H.jsx)(`option`,{value:e.value,children:e.label},e.value))})}),e===`index`&&i!==`mysql`&&(0,H.jsx)(F,{id:w(`unique`),title:`Is unique index`,checked:u.unique,disabled:E,onChange:e=>g({unique:e})}),(0,H.jsxs)(`div`,{role:`group`,"aria-labelledby":w(`columns`),className:`grid gap-1.5`,children:[(0,H.jsx)(`span`,{id:w(`columns`),className:`text-xs font-medium text-text-2`,children:`Columns`}),u.parts.map((n,i)=>(0,H.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[n.columnId===null?(0,H.jsx)(N,{"aria-label":`Expression ${i+1}`,value:n.expression??``,disabled:!0,mono:!0,title:`An expression, which the editor keeps as it is written`}):(0,H.jsx)(P,{"aria-label":`Column ${i+1}`,value:n.columnId,disabled:E,className:`font-mono`,onChange:e=>_(i,{columnId:e.target.value}),children:t.columns.filter(e=>e.id===n.columnId||!b.has(e.id)).map(e=>(0,H.jsx)(`option`,{value:e.id,children:e.name},e.id))}),e===`index`&&(0,H.jsxs)(P,{"aria-label":`Order of column ${i+1}`,value:n.descending?`desc`:`asc`,disabled:E,className:`w-24 shrink-0`,onChange:e=>_(i,{descending:e.target.value===`desc`}),children:[(0,H.jsx)(`option`,{value:`asc`,children:`ASC`}),(0,H.jsx)(`option`,{value:`desc`,children:`DESC`})]}),a&&(0,H.jsx)(`button`,{type:`button`,"aria-label":`Delete column ${i+1}`,title:`Delete`,onClick:()=>g({parts:u.parts.filter((e,t)=>t!==i)}),className:`grid size-[30px] shrink-0 place-items-center rounded-md text-text-subtle can-hover:hover:bg-surface-hover can-hover:hover:text-error`,children:(0,H.jsx)(r,{className:`size-4`})})]},n.columnId??`expr-${i}`)),a&&x.length>0&&(0,H.jsxs)(P,{"aria-label":`Add new column`,value:``,onChange:e=>{e.target.value&&g({parts:[...u.parts,bt(e.target.value)]})},children:[(0,H.jsx)(`option`,{value:``,children:`Add new column — Choose column`}),x.map(e=>(0,H.jsx)(`option`,{value:e.id,children:e.name},e.id))]})]}),e===`index`&&i!==`mysql`&&(0,H.jsx)(I,{label:`Filtered index condition`,htmlFor:w(`where`),children:(0,H.jsx)(N,{id:w(`where`),value:u.where,disabled:E,mono:!0,onChange:e=>g({where:e.target.value})})})]})}function wt({dialog:e,model:t,dialect:n,target:r,editable:i,onChange:a,onClose:o}){if(!e)return null;let s={model:t,dialect:n,editable:i,onChange:a,onClose:o};switch(e.kind){case`column`:return(0,H.jsx)(gt,{columnId:e.id,...s},`column:${e.id??`new`}`);case`key`:return(0,H.jsx)(Ct,{kind:e.keyKind,itemId:e.id,...s},`${e.keyKind}:${e.id??`new`}`);case`foreignKey`:return(0,H.jsx)(vt,{itemId:e.id,target:r,...s},`fk:${e.id??`new`}`)}}function Tt(e){return M.getState().getPanelForTab(e)?.tabs.find(t=>t.id===e)?.metadata}function Et(e){let t=M.getState();return t.panels[t.focusedPanelId]?.activeTabId===e}function Dt({tabId:e,metadata:t,tab:n,live:r,reload:i,mobile:a}){let o=n.dialect??`postgres`,s=(0,z.useMemo)(()=>E(t),[t]),c=s?.isNew===!0,l=(0,z.useMemo)(()=>r?de(r,o):null,[r,o]),u=s?.current??l,d=n.target?.kind===`file`||!!n.conn,f=!!e&&!a&&d&&!n.readonly&&(c||r?.kind===`table`),p=se(t),m=f&&(c||p),[h,g]=(0,z.useState)(null),_=(0,z.useRef)(r);_.current=r;let v=(0,z.useCallback)(t=>{if(!e)return;let n=Tt(e),r=ae(E(n),_.current,o,t);M.getState().updateTab(e,{metadata:oe(n,r)})},[e,o]),y=(0,z.useCallback)(()=>{if(!e)return;let t=Tt(e);M.getState().updateTab(e,{metadata:oe(t,null)})},[e]),b=(0,z.useCallback)(()=>{if(!e)return;let t=Tt(e);M.getState().updateTab(e,{metadata:oe(t,re(E(t)))})},[e]),x=()=>{if(!m||!e||!n.target||!n.place||!s)return;let t=n.place,r=c?V(s.current,{name:s.current.name.trim()}):s.current,a=c?{kind:`create`,current:r}:{kind:`alter`,base:s.base,current:s.current};Ce({target:n.target,place:t,change:a,onSaved:c?()=>ve(e,t,{schema:r.schema,name:r.name,kind:`table`}):()=>{i().finally(y)}})},S=(0,z.useRef)(x);S.current=x,(0,z.useEffect)(()=>{if(!f||!e)return;let t=t=>{!xe.getState().matchesEvent(t,`save-prevent`)||!Et(e)||Se.getState().request||t.target?.closest?.(`[role="dialog"], [role="alertdialog"]`)||(t.preventDefault(),S.current())};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[f,e]);let C=M(t=>!!e&&t.panels[t.focusedPanelId]?.activeTabId===e),w=(u?.columns.length??0)>0,T=!!u?.primaryKey;return(0,z.useEffect)(()=>{if(!(!C||!f||!e))return Ee(e,[{id:`add-column`,label:`Add column`,run:()=>g({kind:`column`,id:null})},...w?[{id:`add-index`,label:`Add index`,run:()=>g({kind:`key`,keyKind:`index`,id:null})},...T?[]:[{id:`add-primary-key`,label:`Add primary key`,run:()=>g({kind:`key`,keyKind:`primaryKey`,id:null})}],{id:`add-foreign-key`,label:`Add foreign key`,run:()=>g({kind:`foreignKey`,id:null})},{id:`add-unique`,label:`Add unique`,run:()=>g({kind:`key`,keyKind:`unique`,id:null})}]:[]])},[C,f,e,w,T]),{model:u,isNew:c,editable:f,dirty:p,canSave:m,save:x,reset:b,change:v,dialog:h,openDialog:g,closeDialog:(0,z.useCallback)(()=>g(null),[])}}var Ot=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent)?`⌘S`:`Ctrl+S`;function kt({metadata:e,tabId:t}){let n=De(e,t),r=pe(),i=typeof e?.tableName==`string`?e.tableName:``,o=typeof e?.schemaName==`string`?e.schemaName:``,c=e?.objectKind,d=i?`/structure?table=${encodeURIComponent(i)}${o?`&schema=${encodeURIComponent(o)}`:``}`:null,f=L(n.missing?null:n.target,d,t),m=f.data,g=Dt({tabId:t,metadata:e,tab:n,live:m,reload:f.reload,mobile:r}),v=n.dialect??`postgres`,y=L(g.isNew&&g.editable&&v===`postgres`?n.target:null,`/objects`,t),b=g.isNew?g.model?.name??``:i,x={schema:o||null,name:i,...c?{kind:c}:{}},C=()=>{n.place&&ye(n.place,x)},w=()=>{n.place&&_e(n.place,{schema:x.schema,name:i,kind:c??`table`})},T=t?()=>fe.getState().closeTab(t):void 0,{model:E,editable:D}=g;if(n.missing)return(0,H.jsx)(ke,{empty:`This connection no longer exists.`});let O=r&&g.isNew?`This table is not created yet. Open this tab on a larger screen to set it up and create it.`:r&&g.dirty?`This tab holds changes to the table that are not saved. Open it on a larger screen to review and save them.`:null;return(0,H.jsxs)(`div`,{className:`flex h-full w-full flex-col overflow-hidden`,children:[(0,H.jsx)(Ae,{title:b,subtitle:[S(n.target,n.name),g.isNew?E?.schema??``:o,`structure`].filter(Boolean).join(` · `),color:n.conn?.color??e?.connectionColor,onClose:T}),!(r&&g.isNew)&&(0,H.jsxs)(Oe,{label:`${b} structure`,children:[!g.isNew&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(R,{icon:a,label:`Data`,title:`Open the data of ${b}`,onClick:C,opensTab:!0,disabled:!n.place}),(0,H.jsx)(R,{icon:s,label:`SQL`,title:`Open the SQL of ${b} in its own tab`,onClick:w,opensTab:!0,disabled:!n.place})]}),D&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(R,{icon:h,label:g.isNew?`Create table`:`Alter table`,title:`Save changes to the database (${Ot})`,onClick:g.save,disabled:!g.canSave}),(0,H.jsx)(R,{icon:u,label:`Reset changes`,onClick:g.reset,disabled:!g.dirty}),(0,H.jsx)(R,{icon:l,label:`Add column`,onClick:()=>g.openDialog({kind:`column`,id:null})}),(0,H.jsx)(R,{icon:_,label:`Add index`,onClick:()=>g.openDialog({kind:`key`,keyKind:`index`,id:null}),disabled:!E||E.columns.length===0})]})]}),O&&(0,H.jsxs)(`p`,{role:`status`,className:`flex shrink-0 items-start gap-2 border-b border-border-soft bg-panel-2 px-3 py-2.5 text-[13px] text-text-2`,children:[(0,H.jsx)(p,{className:`mt-0.5 size-4 shrink-0 text-info`,"aria-hidden":!0}),O]}),(0,H.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:!r&&E&&n.dbType?(0,H.jsx)(ct,{model:E,dialect:v,dbType:n.dbType,editable:D,isNew:g.isNew,references:m?.references??[],schemas:y.data?.schemas??null,onChange:g.change,openDialog:g.openDialog}):m?(0,H.jsx)(At,{s:m,dialect:v}):!(r&&g.isNew)&&(0,H.jsx)(ke,{loading:f.loading||!f.error&&!f.driver,error:f.error,driver:f.driver})}),!r&&E&&n.target&&(0,H.jsx)(wt,{dialog:g.dialog,model:E,dialect:v,target:n.target,editable:D,onChange:g.change,onClose:g.closeDialog})]})}function At({s:e,dialect:t}){let n=(0,z.useMemo)(()=>Ne(e),[e]),r=(0,z.useMemo)(()=>C(e),[e]),i=(0,z.useMemo)(()=>e.foreignKeys.map(t=>Fe(t,e.schema)),[e]),a=(0,z.useMemo)(()=>e.references.map(t=>Fe(t,e.schema)),[e]);return(0,H.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)] content-start gap-[18px] px-[18px] pt-3.5 pb-7 max-md:gap-3.5 max-md:p-3`,children:[(0,H.jsx)(Pt,{s:e,rows:n,dialect:t}),e.primaryKey&&(0,H.jsx)(Q,{title:`Primary key`,head:[`Name`,`Columns`],children:(0,H.jsxs)(`tr`,{className:X,children:[(0,H.jsx)(`td`,{className:Z,children:(0,H.jsx)($,{icon:(0,H.jsx)(c,{className:`size-[15px] shrink-0 text-warning`,"aria-hidden":!0}),name:e.primaryKey.name})}),(0,H.jsx)(`td`,{className:Z,children:e.primaryKey.columns.join(`, `)})]})}),r.length>0&&(0,H.jsx)(Q,{title:`Indexes (${r.length})`,head:[`Name`,`Columns`,`Unique`],children:r.map(e=>(0,H.jsxs)(`tr`,{className:X,children:[(0,H.jsx)(`td`,{className:Z,children:(0,H.jsx)($,{icon:(0,H.jsx)(_,{className:`size-[15px] shrink-0 text-text-subtle`,"aria-hidden":!0}),name:e.name})}),(0,H.jsx)(`td`,{className:Z,children:e.columns.join(`, `)}),(0,H.jsx)(`td`,{className:Z,children:e.unique?`YES`:`NO`})]},e.name))}),e.uniques.length>0&&(0,H.jsx)(Q,{title:`Unique constraints (${e.uniques.length})`,head:[`Name`,`Columns`],children:e.uniques.map((e,t)=>(0,H.jsxs)(`tr`,{className:X,children:[(0,H.jsx)(`td`,{className:Z,children:(0,H.jsx)($,{icon:(0,H.jsx)(d,{className:`size-[15px] shrink-0 text-text-subtle`,"aria-hidden":!0}),name:e.name})}),(0,H.jsx)(`td`,{className:Z,children:e.columns.join(`, `)})]},e.name??`#${t}`))}),i.length>0&&(0,H.jsx)(Nt,{title:`Foreign keys (${i.length})`,rows:i}),a.length>0&&(0,H.jsx)(Nt,{title:`Dependencies (${a.length})`,rows:a,dependencies:!0})]})}var X=`can-hover:hover:bg-surface-hover`,Z=`whitespace-nowrap border-b border-border-soft px-2.5 py-1.5 max-md:p-2.5`,jt=`font-mono text-[11.5px]`;function Q({title:e,head:t,children:n,wrapBox:r}){let i=(0,H.jsx)(`div`,{className:`overflow-x-auto rounded-md border border-border bg-panel-2`,children:(0,H.jsxs)(`table`,{className:`w-full border-collapse text-[12.5px] max-md:text-[13px]`,children:[(0,H.jsx)(`thead`,{children:(0,H.jsx)(`tr`,{children:t.map((e,t)=>(0,H.jsx)(`th`,{scope:`col`,className:`whitespace-nowrap border-b border-border-soft bg-panel px-2.5 py-1.5 text-left text-[11px] font-semibold text-text-subtle`,children:e},t))})}),(0,H.jsx)(`tbody`,{className:`[&>tr:last-child>td]:border-b-0`,children:n})]})});return(0,H.jsxs)(`section`,{"aria-label":e,children:[(0,H.jsx)(`h3`,{className:`mb-1.5 ml-0.5 text-[12.5px] font-semibold text-text-primary`,children:e}),r?r(i):i]})}function $({icon:e,name:t,title:n}){return(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,title:n,children:[e,t??(0,H.jsx)(`span`,{className:`italic text-text-dim`,children:`unnamed`})]})}var Mt=[`Name`,`Base columns`,`Referenced table`,`Referenced columns`,`ON UPDATE`,`ON DELETE`];function Nt({title:e,rows:t,dependencies:n}){return(0,H.jsx)(Q,{title:e,head:Mt,children:t.map((e,t)=>(0,H.jsxs)(`tr`,{className:X,children:[(0,H.jsx)(`td`,{className:Z,children:(0,H.jsx)($,{icon:(0,H.jsx)(f,{className:`size-[15px] shrink-0 text-info`,"aria-hidden":!0}),name:e.name,title:n?`${e.holder} (${e.baseColumns}) → ${e.refTable} (${e.refColumns})`:void 0})}),(0,H.jsx)(`td`,{className:Z,children:e.baseColumns}),(0,H.jsx)(`td`,{className:Z,children:e.refTable}),(0,H.jsx)(`td`,{className:Z,children:e.refColumns}),(0,H.jsx)(`td`,{className:Z,children:e.onUpdate}),(0,H.jsx)(`td`,{className:Z,children:e.onDelete})]},`${e.holder}\u0000${e.name??t}`))})}function Pt({s:e,rows:t,dialect:n}){let[r,i]=(0,z.useState)(new Set),[a,o]=(0,z.useState)(null),s=(e,n)=>{if(n.shiftKey&&a){let n=t.findIndex(e=>e.name===a),r=t.findIndex(t=>t.name===e),[o,s]=n<r?[n,r]:[r,n];i(new Set(t.slice(o,s+1).map(e=>e.name)));return}if(n.ctrlKey||n.metaKey){let t=new Set(r);t.has(e)?t.delete(e):t.add(e),i(t)}else i(new Set([e]));o(e)},l=e=>r.has(e)?t.filter(e=>r.has(e.name)).map(e=>e.name):[e],u=we(r=>{if(!r||!t.some(e=>e.name===r))return null;let i=l(r),a=e.columns.filter(e=>i.includes(e.name));return[{kind:`item`,label:`Copy names`,icon:m,onSelect:()=>void Ft(Ie(i))},{kind:`item`,label:`Copy definitions`,icon:m,onSelect:()=>void Ft(Le(a,n))}]},e=>{r.has(e)||(i(new Set([e])),o(e))});return(0,H.jsx)(Q,{title:`Columns (${t.length})`,head:[``,`Name`,`Nullability`,`Data type`,`Default value`,`Computed Expression`,`Comment`],wrapBox:e=>(0,H.jsxs)(he,{children:[(0,H.jsx)(ge,{asChild:!0,children:(0,z.cloneElement)(e,u.listProps)}),u.entries&&(0,H.jsx)(Te,{entries:u.entries})]}),children:t.map(e=>(0,H.jsxs)(`tr`,{"data-row-key":e.name,"aria-selected":r.has(e.name),onClick:t=>s(e.name,t),className:y(X,`cursor-default select-none`,r.has(e.name)&&`bg-accent-wash can-hover:hover:bg-accent-wash`),children:[(0,H.jsx)(`td`,{className:y(Z,`w-9 font-mono text-[11px] text-text-subtle`),children:e.ordinal}),(0,H.jsx)(`td`,{className:Z,children:(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[e.role===`pk`?(0,H.jsx)(c,{className:`size-[15px] shrink-0 text-warning`,"aria-label":`Primary key`}):e.role===`fk`?(0,H.jsx)(f,{className:`size-[15px] shrink-0 text-info`,"aria-label":`Foreign key`}):(0,H.jsx)(`span`,{"aria-hidden":!0,className:`grid w-[15px] shrink-0 place-items-center`,children:(0,H.jsx)(`span`,{className:`size-1 rounded-full bg-text-subtle opacity-60`})}),(0,H.jsx)(`span`,{className:e.notNull?`font-semibold`:`font-normal`,children:e.name})]})}),(0,H.jsx)(`td`,{className:Z,children:e.notNull?`NOT NULL`:`NULL`}),(0,H.jsx)(`td`,{className:y(Z,jt),children:e.type}),(0,H.jsx)(`td`,{className:y(Z,jt),children:e.defaultValue}),(0,H.jsx)(`td`,{className:y(Z,jt),children:e.computedExpression}),(0,H.jsx)(`td`,{className:Z,children:e.comment})]},e.name))})}async function Ft(e){await me(e)?v.success(`Copied`):v.error(`The clipboard is not available here`)}export{kt as StructureTab};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/overview-panel-DEGF2DmZ.js","assets/rolldown-runtime-C5c2KzVm.js","assets/vendor-markdown-C-P1aR4p.js","assets/utils-Bslrbb-G.js","assets/metric-chart-canvas-DEW16Su8.js","assets/format-bytes-he3TR0bV.js","assets/performance-panel-TkwfKIZa.js","assets/vendor-ui-BTSIXzhZ.js","assets/api-client-xQDlhUTu.js","assets/settings-store-B4mLp19V.js","assets/preload-helper-CM8YhcCa.js","assets/react-BZ0kba1-.js","assets/adaptive-context-menu-C4jNSORA.js","assets/context-menu-BCuZYfWC.js","assets/portal-container-context-NBi-KGK0.js","assets/icons-BwyIKaTT.js","assets/mobile-bottom-sheet-DArbIyrD.js","assets/use-visual-viewport-MmugpRg-.js","assets/use-is-mobile-VRV9eZy1.js","assets/apps-panel-C20ys4Cy.js","assets/button-C9ZXWb3b.js","assets/use-process-kill-BdmXHMFE.js","assets/index-CPBujJc_.js","assets/createLucideIcon-D9_fdOKS.js","assets/file-diff-CcDhJkXB.js","assets/git-commit-horizontal-BPdj2L1i.js","assets/open-db-tabs-CtWIWHOa.js","assets/window-store-DqX_qmkQ.js","assets/panel-store-BJhazigC.js","assets/session-list-sync-triggers-DtJI5KF0.js","assets/project-store-BLGl9IAO.js","assets/project-framework-store-DwLxaRan.js","assets/explorer-model-BtJN4MZ9.js","assets/db-sidebar-reveal-_qw0CliT.js","assets/db-types-CNhENouW.js","assets/tab-store-D5I52eLN.js","assets/use-db-driver-installed-anzWkGi5.js","assets/impexp-state-BWKOuRGj.js","assets/file-store-BQ41vIs5.js","assets/sql-identifiers-DDISwQor.js","assets/db-explorer-store-BmpvDHz6.js","assets/onboarding-quick-orientation-CTHtIRib.js","assets/dialog-Dn_2tuYa.js","assets/format-file-meta-DdYtk07C.js","assets/fs-api-CFtQzsIJ.js","assets/open-settings-EXR4zoZG.js","assets/settings-categories-Ajj4ui27.js","assets/dropdown-menu-BQidk_OJ.js","assets/input-C3oVNCMq.js","assets/scroll-area-DOlQJGZp.js","assets/start-ellipsis-CU8GkxaV.js","assets/chat-preparation-cache-190LLyy7.js","assets/clipboard-D-VCry-F.js","assets/file-icons-JInFtBVl.js","assets/format-date-CSHaU2wN.js","assets/git-repo-store-CKB5fdNP.js","assets/patch-tab-metadata-C92YkrRX.js","assets/ws-auth-CbF6GqxP.js","assets/apply-theme-ORrEdHKT.js","assets/resolve-theme-BqoL27BW.js","assets/index-BACBJm4i.css","assets/process-row-format-CytRH7g2.js","assets/process-table-DQO0g5do.js","assets/sortable-header-DwzTFLkG.js","assets/services-panel-CZQOrvth.js"])))=>i.map(i=>d[i]);
2
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{Cr as r,ai as i,oi as a}from"./icons-BwyIKaTT.js";import{t as o}from"./settings-store-B4mLp19V.js";import{t as s}from"./preload-helper-CM8YhcCa.js";import{n as c}from"./utils-Bslrbb-G.js";import{ht as l}from"./index-CPBujJc_.js";var u=n(),d=[{id:`c`,label:`°C`},{id:`f`,label:`°F`}];function f(){let e=o(e=>e.sysmonTempUnit),t=o(e=>e.setSysmonTempUnit),n=o(e=>e.sysmonKernelTimes),r=o(e=>e.setSysmonKernelTimes);return(0,u.jsxs)(`div`,{className:`shrink-0 border-b border-border bg-surface-hover/30 px-3 py-2 space-y-2`,"data-testid":`sysmon-preferences`,children:[(0,u.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,u.jsx)(`span`,{className:`text-xs text-text-secondary`,children:`Temperature unit`}),(0,u.jsx)(`div`,{className:`flex items-center gap-1`,role:`radiogroup`,"aria-label":`Temperature unit`,children:d.map(n=>(0,u.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":e===n.id,onClick:()=>t(n.id),"data-testid":`sysmon-pref-temp-${n.id}`,className:c(`min-h-11 md:min-h-8 px-3 text-xs rounded-md border transition-colors`,e===n.id?`border-primary bg-primary/10 text-primary`:`border-border hover:bg-surface-hover`),children:n.label},n.id))})]}),(0,u.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,u.jsx)(`label`,{htmlFor:`sysmon-pref-kernel`,className:`text-xs text-text-secondary`,children:`Show kernel times on the CPU graph`}),(0,u.jsx)(`button`,{id:`sysmon-pref-kernel`,type:`button`,role:`switch`,"aria-checked":n,onClick:()=>r(!n),"data-testid":`sysmon-pref-kernel`,className:c(`min-h-11 md:min-h-8 px-3 text-xs rounded-md border transition-colors`,n?`border-primary bg-primary/10 text-primary`:`border-border hover:bg-surface-hover`),children:n?`On`:`Off`})]}),(0,u.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:`These apply to this device only — the machine being watched is the same for everyone.`})]})}var p=e(t(),1),m=(0,p.lazy)(()=>s(()=>import(`./overview-panel-DEGF2DmZ.js`).then(e=>({default:e.OverviewPanel})),__vite__mapDeps([0,1,2,3,4,5]))),h=(0,p.lazy)(()=>s(()=>import(`./performance-panel-TkwfKIZa.js`).then(e=>({default:e.PerformancePanel})),__vite__mapDeps([6,1,7,2,3,8,9,10,11,4,12,13,14,15,16,17,18,5]))),g=(0,p.lazy)(()=>s(()=>import(`./apps-panel-C20ys4Cy.js`).then(e=>({default:e.AppsPanel})),__vite__mapDeps([19,1,7,2,20,3,8,21,22,10,23,24,25,11,26,27,28,29,30,31,32,33,9,18,34,35,36,37,38,39,40,41,42,14,15,43,44,45,46,12,13,16,17,47,48,49,50,51,52,53,54,55,56,57,58,59,60,5,61]))),_=(0,p.lazy)(()=>s(()=>import(`./process-table-DQO0g5do.js`).then(e=>({default:e.ProcessTable})),__vite__mapDeps([62,1,22,10,7,2,20,3,23,24,25,8,11,26,27,28,29,30,31,32,33,9,18,34,35,36,37,38,39,40,41,42,14,15,43,44,45,46,12,13,16,17,47,48,49,50,51,52,53,54,55,56,57,58,59,60,21,5,61,63]))),v=(0,p.lazy)(()=>s(()=>import(`./services-panel-CZQOrvth.js`).then(e=>({default:e.ServicesPanel})),__vite__mapDeps([64,1,7,2,20,3,8,61,5,63,15,12,13,14,16,17,18,42]))),y=[`overview`,`performance`,`apps`,`processes`,`services`],b={overview:`Overview`,performance:`Performance`,apps:`Apps`,processes:`Processes`,services:`Services`};function x(e){return y.includes(e)?e:`overview`}function S({isConnected:e,elapsed:t,tickCount:n}){return(0,u.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[10px] text-text-subtle`,"data-testid":`sysmon-connection`,"data-tick-count":n,children:[e?(0,u.jsx)(i,{className:`size-3 text-success`}):(0,u.jsx)(a,{className:`size-3 text-error`}),(0,u.jsx)(`span`,{children:e?`Updated ${t}s ago`:`Disconnected`})]})}var C=(0,p.memo)(function({initialTab:e=`overview`,onTabChange:t,variant:n=`tab`}){let{latest:i,history:a,isConnected:o,tickCount:s}=l({processes:!0}),[d,x]=(0,p.useState)(e),[C,w]=(0,p.useState)(!1),[T,E]=(0,p.useState)(null),D=e=>{x(e),t?.(e)},O=e=>{E(e),D(`performance`)},k=i?Math.round((Date.now()-i.ts)/1e3):0,A=i?.warnings??[];return(0,u.jsxs)(`div`,{className:`h-full flex flex-col overflow-hidden`,"data-testid":`system-monitor-window`,children:[n===`tab`&&(0,u.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[(0,u.jsx)(`h2`,{className:`text-sm font-medium`,children:`System Monitor`}),(0,u.jsx)(S,{isConnected:o,elapsed:k,tickCount:s})]}),A.length>0&&(0,u.jsx)(`div`,{className:`px-3 py-1.5 text-[11px] text-warning bg-warning/10 border-b border-border shrink-0 space-y-0.5`,"data-testid":`sysmon-warnings`,children:A.map((e,t)=>(0,u.jsx)(`div`,{children:e},t))}),(0,u.jsxs)(`div`,{className:`flex items-center border-b border-border shrink-0 overflow-x-auto`,role:`tablist`,children:[y.map(e=>(0,u.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":d===e,"data-testid":`sysmon-tab-${e}`,onClick:()=>D(e),className:c(`shrink-0 min-h-11 px-4 text-sm font-medium transition-colors`,d===e?`text-text-primary border-b-2 border-primary -mb-px`:`text-text-subtle hover:text-text-secondary`),children:b[e]},e)),(0,u.jsxs)(`div`,{className:`ml-auto flex items-center gap-2 pl-3 pr-1 shrink-0`,children:[n===`window`&&(0,u.jsx)(S,{isConnected:o,elapsed:k,tickCount:s}),(0,u.jsx)(`button`,{type:`button`,"aria-label":`System Monitor preferences`,"aria-expanded":C,onClick:()=>w(e=>!e),"data-testid":`sysmon-prefs-toggle`,className:c(`flex items-center justify-center size-11 md:size-8 rounded transition-colors`,C?`text-primary bg-primary/10`:`text-text-subtle hover:text-text-secondary hover:bg-surface-hover`),children:(0,u.jsx)(r,{className:`size-4`})})]})]}),C&&(0,u.jsx)(f,{}),(0,u.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto`,children:(0,u.jsx)(p.Suspense,{fallback:(0,u.jsx)(`div`,{className:`p-4 text-xs text-text-subtle`,children:`Loading…`}),children:d===`services`?(0,u.jsx)(v,{active:!0,metrics:i}):i?d===`overview`?(0,u.jsx)(m,{system:i.system,history:a,onOpenDevice:O}):d===`performance`?(0,u.jsx)(h,{system:i.system,history:a,device:T,onDeviceChange:E,platform:i.platform}):d===`apps`?(0,u.jsx)(g,{snapshot:i}):(0,u.jsx)(_,{snapshot:i}):(0,u.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-subtle text-sm p-4`,children:o?`Waiting for data…`:`Connecting to resource monitor…`})})})]})});export{x as n,C as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/overview-panel-DEGF2DmZ.js","assets/rolldown-runtime-C5c2KzVm.js","assets/vendor-markdown-C-P1aR4p.js","assets/utils-Bslrbb-G.js","assets/metric-chart-canvas-DEW16Su8.js","assets/format-bytes-he3TR0bV.js","assets/performance-panel-TkwfKIZa.js","assets/vendor-ui-BTSIXzhZ.js","assets/api-client-xQDlhUTu.js","assets/settings-store-B4mLp19V.js","assets/preload-helper-CM8YhcCa.js","assets/react-BZ0kba1-.js","assets/adaptive-context-menu-C4jNSORA.js","assets/context-menu-BCuZYfWC.js","assets/portal-container-context-NBi-KGK0.js","assets/icons-BwyIKaTT.js","assets/mobile-bottom-sheet-DArbIyrD.js","assets/use-visual-viewport-MmugpRg-.js","assets/use-is-mobile-VRV9eZy1.js","assets/apps-panel-C2dyMFVy.js","assets/button-C9ZXWb3b.js","assets/use-process-kill-B8Mf4_Yy.js","assets/index-EznfgwH9.js","assets/createLucideIcon-D9_fdOKS.js","assets/file-diff-CcDhJkXB.js","assets/git-commit-horizontal-BPdj2L1i.js","assets/open-db-tabs-CtWIWHOa.js","assets/window-store-DqX_qmkQ.js","assets/panel-store-BJhazigC.js","assets/session-list-sync-triggers-DtJI5KF0.js","assets/project-store-BLGl9IAO.js","assets/project-framework-store-DwLxaRan.js","assets/explorer-model-BtJN4MZ9.js","assets/db-sidebar-reveal-_qw0CliT.js","assets/db-types-CNhENouW.js","assets/tab-store-D5I52eLN.js","assets/use-db-driver-installed-anzWkGi5.js","assets/impexp-state-BWKOuRGj.js","assets/file-store-BQ41vIs5.js","assets/sql-identifiers-DDISwQor.js","assets/db-explorer-store-BmpvDHz6.js","assets/onboarding-quick-orientation-CTHtIRib.js","assets/dialog-Dn_2tuYa.js","assets/format-file-meta-DdYtk07C.js","assets/fs-api-CFtQzsIJ.js","assets/open-settings-EXR4zoZG.js","assets/settings-categories-Ajj4ui27.js","assets/dropdown-menu-BQidk_OJ.js","assets/input-C3oVNCMq.js","assets/scroll-area-DOlQJGZp.js","assets/start-ellipsis-CU8GkxaV.js","assets/chat-preparation-cache-190LLyy7.js","assets/clipboard-D-VCry-F.js","assets/file-icons-JInFtBVl.js","assets/format-date-CSHaU2wN.js","assets/git-repo-store-CKB5fdNP.js","assets/patch-tab-metadata-C92YkrRX.js","assets/ws-auth-CbF6GqxP.js","assets/apply-theme-ORrEdHKT.js","assets/resolve-theme-BqoL27BW.js","assets/index-BACBJm4i.css","assets/process-row-format-CytRH7g2.js","assets/process-table-D6fDra-t.js","assets/sortable-header-DwzTFLkG.js","assets/services-panel-CZQOrvth.js"])))=>i.map(i=>d[i]);
2
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{Cr as r,ai as i,oi as a}from"./icons-BwyIKaTT.js";import{t as o}from"./settings-store-B4mLp19V.js";import{t as s}from"./preload-helper-CM8YhcCa.js";import{n as c}from"./utils-Bslrbb-G.js";import{ht as l}from"./index-EznfgwH9.js";var u=n(),d=[{id:`c`,label:`°C`},{id:`f`,label:`°F`}];function f(){let e=o(e=>e.sysmonTempUnit),t=o(e=>e.setSysmonTempUnit),n=o(e=>e.sysmonKernelTimes),r=o(e=>e.setSysmonKernelTimes);return(0,u.jsxs)(`div`,{className:`shrink-0 border-b border-border bg-surface-hover/30 px-3 py-2 space-y-2`,"data-testid":`sysmon-preferences`,children:[(0,u.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,u.jsx)(`span`,{className:`text-xs text-text-secondary`,children:`Temperature unit`}),(0,u.jsx)(`div`,{className:`flex items-center gap-1`,role:`radiogroup`,"aria-label":`Temperature unit`,children:d.map(n=>(0,u.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":e===n.id,onClick:()=>t(n.id),"data-testid":`sysmon-pref-temp-${n.id}`,className:c(`min-h-11 md:min-h-8 px-3 text-xs rounded-md border transition-colors`,e===n.id?`border-primary bg-primary/10 text-primary`:`border-border hover:bg-surface-hover`),children:n.label},n.id))})]}),(0,u.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,u.jsx)(`label`,{htmlFor:`sysmon-pref-kernel`,className:`text-xs text-text-secondary`,children:`Show kernel times on the CPU graph`}),(0,u.jsx)(`button`,{id:`sysmon-pref-kernel`,type:`button`,role:`switch`,"aria-checked":n,onClick:()=>r(!n),"data-testid":`sysmon-pref-kernel`,className:c(`min-h-11 md:min-h-8 px-3 text-xs rounded-md border transition-colors`,n?`border-primary bg-primary/10 text-primary`:`border-border hover:bg-surface-hover`),children:n?`On`:`Off`})]}),(0,u.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:`These apply to this device only — the machine being watched is the same for everyone.`})]})}var p=e(t(),1),m=(0,p.lazy)(()=>s(()=>import(`./overview-panel-DEGF2DmZ.js`).then(e=>({default:e.OverviewPanel})),__vite__mapDeps([0,1,2,3,4,5]))),h=(0,p.lazy)(()=>s(()=>import(`./performance-panel-TkwfKIZa.js`).then(e=>({default:e.PerformancePanel})),__vite__mapDeps([6,1,7,2,3,8,9,10,11,4,12,13,14,15,16,17,18,5]))),g=(0,p.lazy)(()=>s(()=>import(`./apps-panel-C2dyMFVy.js`).then(e=>({default:e.AppsPanel})),__vite__mapDeps([19,1,7,2,20,3,8,21,22,10,23,24,25,11,26,27,28,29,30,31,32,33,9,18,34,35,36,37,38,39,40,41,42,14,15,43,44,45,46,12,13,16,17,47,48,49,50,51,52,53,54,55,56,57,58,59,60,5,61]))),_=(0,p.lazy)(()=>s(()=>import(`./process-table-D6fDra-t.js`).then(e=>({default:e.ProcessTable})),__vite__mapDeps([62,1,22,10,7,2,20,3,23,24,25,8,11,26,27,28,29,30,31,32,33,9,18,34,35,36,37,38,39,40,41,42,14,15,43,44,45,46,12,13,16,17,47,48,49,50,51,52,53,54,55,56,57,58,59,60,21,5,61,63]))),v=(0,p.lazy)(()=>s(()=>import(`./services-panel-CZQOrvth.js`).then(e=>({default:e.ServicesPanel})),__vite__mapDeps([64,1,7,2,20,3,8,61,5,63,15,12,13,14,16,17,18,42]))),y=[`overview`,`performance`,`apps`,`processes`,`services`],b={overview:`Overview`,performance:`Performance`,apps:`Apps`,processes:`Processes`,services:`Services`};function x(e){return y.includes(e)?e:`overview`}function S({isConnected:e,elapsed:t,tickCount:n}){return(0,u.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[10px] text-text-subtle`,"data-testid":`sysmon-connection`,"data-tick-count":n,children:[e?(0,u.jsx)(i,{className:`size-3 text-success`}):(0,u.jsx)(a,{className:`size-3 text-error`}),(0,u.jsx)(`span`,{children:e?`Updated ${t}s ago`:`Disconnected`})]})}var C=(0,p.memo)(function({initialTab:e=`overview`,onTabChange:t,variant:n=`tab`}){let{latest:i,history:a,isConnected:o,tickCount:s}=l({processes:!0}),[d,x]=(0,p.useState)(e),[C,w]=(0,p.useState)(!1),[T,E]=(0,p.useState)(null),D=e=>{x(e),t?.(e)},O=e=>{E(e),D(`performance`)},k=i?Math.round((Date.now()-i.ts)/1e3):0,A=i?.warnings??[];return(0,u.jsxs)(`div`,{className:`h-full flex flex-col overflow-hidden`,"data-testid":`system-monitor-window`,children:[n===`tab`&&(0,u.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[(0,u.jsx)(`h2`,{className:`text-sm font-medium`,children:`System Monitor`}),(0,u.jsx)(S,{isConnected:o,elapsed:k,tickCount:s})]}),A.length>0&&(0,u.jsx)(`div`,{className:`px-3 py-1.5 text-[11px] text-warning bg-warning/10 border-b border-border shrink-0 space-y-0.5`,"data-testid":`sysmon-warnings`,children:A.map((e,t)=>(0,u.jsx)(`div`,{children:e},t))}),(0,u.jsxs)(`div`,{className:`flex items-center border-b border-border shrink-0 overflow-x-auto`,role:`tablist`,children:[y.map(e=>(0,u.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":d===e,"data-testid":`sysmon-tab-${e}`,onClick:()=>D(e),className:c(`shrink-0 min-h-11 px-4 text-sm font-medium transition-colors`,d===e?`text-text-primary border-b-2 border-primary -mb-px`:`text-text-subtle hover:text-text-secondary`),children:b[e]},e)),(0,u.jsxs)(`div`,{className:`ml-auto flex items-center gap-2 pl-3 pr-1 shrink-0`,children:[n===`window`&&(0,u.jsx)(S,{isConnected:o,elapsed:k,tickCount:s}),(0,u.jsx)(`button`,{type:`button`,"aria-label":`System Monitor preferences`,"aria-expanded":C,onClick:()=>w(e=>!e),"data-testid":`sysmon-prefs-toggle`,className:c(`flex items-center justify-center size-11 md:size-8 rounded transition-colors`,C?`text-primary bg-primary/10`:`text-text-subtle hover:text-text-secondary hover:bg-surface-hover`),children:(0,u.jsx)(r,{className:`size-4`})})]})]}),C&&(0,u.jsx)(f,{}),(0,u.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto`,children:(0,u.jsx)(p.Suspense,{fallback:(0,u.jsx)(`div`,{className:`p-4 text-xs text-text-subtle`,children:`Loading…`}),children:d===`services`?(0,u.jsx)(v,{active:!0,metrics:i}):i?d===`overview`?(0,u.jsx)(m,{system:i.system,history:a,onOpenDevice:O}):d===`performance`?(0,u.jsx)(h,{system:i.system,history:a,device:T,onDeviceChange:E,platform:i.platform}):d===`apps`?(0,u.jsx)(g,{snapshot:i}):(0,u.jsx)(_,{snapshot:i}):(0,u.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-subtle text-sm p-4`,children:o?`Waiting for data…`:`Connecting to resource monitor…`})})})]})});export{x as n,C as t};
@@ -1 +1 @@
1
- import{E as e}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{t}from"./system-monitor-body-YS3i1PUs.js";var n=e(),r=()=>(0,n.jsx)(t,{});export{r as SystemMonitorTab};
1
+ import{E as e}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{t}from"./system-monitor-body-CPAAjIdT.js";var n=e(),r=()=>(0,n.jsx)(t,{});export{r as SystemMonitorTab};
@@ -1 +1 @@
1
- import{E as e}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as t}from"./window-store-DqX_qmkQ.js";import{n,t as r}from"./system-monitor-body-YS3i1PUs.js";var i=e();function a({id:e,payload:a}){let o=t(e=>e.setPayload);return(0,i.jsx)(r,{initialTab:n(a?.tab),onTabChange:t=>o(e,{tab:t}),variant:`window`})}export{a as default};
1
+ import{E as e}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as t}from"./window-store-DqX_qmkQ.js";import{n,t as r}from"./system-monitor-body-CPAAjIdT.js";var i=e();function a({id:e,payload:a}){let o=t(e=>e.setPayload);return(0,i.jsx)(r,{initialTab:n(a?.tab),onTabChange:t=>o(e,{tab:t}),variant:`window`})}export{a as default};
@@ -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"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./portal-container-context-NBi-KGK0.js";import{U as r}from"./window-store-DqX_qmkQ.js";import{t as i}from"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./use-is-mobile-VRV9eZy1.js";import{di as a}from"./index-CPBujJc_.js";var o=e(t(),1),s=n();function c({id:e,payload:t}){let n=r(e),c=(i(e=>e.panels[n])?.tabs.length??0)>0,l=(0,o.useRef)(!1);c&&(l.current=!0);let u=typeof t?.originPanelId==`string`?t.originPanelId:null,d=(0,o.useRef)(u);d.current=u;let f=(0,o.useCallback)(e=>a(n,e),[n]),p=(0,o.useRef)(null);return(0,o.useLayoutEffect)(()=>(p.current=null,()=>{let t={};p.current=t,queueMicrotask(()=>{p.current===t&&(p.current=null,i.getState().redockFromWindow(e,d.current))})}),[e]),(0,s.jsxs)(`div`,{className:`relative h-full w-full`,children:[(0,s.jsx)(`div`,{ref:f,className:`absolute inset-0`}),!c&&!l.current&&(0,s.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center text-xs text-text-2 pointer-events-none`,children:`Loading…`})]})}export{c as default};
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"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./portal-container-context-NBi-KGK0.js";import{U as r}from"./window-store-DqX_qmkQ.js";import{t as i}from"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./use-is-mobile-VRV9eZy1.js";import{di as a}from"./index-EznfgwH9.js";var o=e(t(),1),s=n();function c({id:e,payload:t}){let n=r(e),c=(i(e=>e.panels[n])?.tabs.length??0)>0,l=(0,o.useRef)(!1);c&&(l.current=!0);let u=typeof t?.originPanelId==`string`?t.originPanelId:null,d=(0,o.useRef)(u);d.current=u;let f=(0,o.useCallback)(e=>a(n,e),[n]),p=(0,o.useRef)(null);return(0,o.useLayoutEffect)(()=>(p.current=null,()=>{let t={};p.current=t,queueMicrotask(()=>{p.current===t&&(p.current=null,i.getState().redockFromWindow(e,d.current))})}),[e]),(0,s.jsxs)(`div`,{className:`relative h-full w-full`,children:[(0,s.jsx)(`div`,{ref:f,className:`absolute inset-0`}),!c&&!l.current&&(0,s.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center text-xs text-text-2 pointer-events-none`,children:`Loading…`})]})}export{c as default};
@@ -1,2 +1,2 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{A as r,Bt as i,Dr as a,Gr as o,Hn as s,I as c,In as l,L as u,Lr as d,Or as f,P as p,Qn as m,Rr as h,Vn as g,Vt as _,Yr as v,Zt as y,at as b,c as x,cn as S,cr as C,f as w,g as ee,gt as te,h as T,hr as E,kt as D,li as O,lt as k,mn as A,mr as j,o as M,p as N,r as ne,st as re,ut as P,v as F,vr as I,vt as ie}from"./icons-BwyIKaTT.js";import{k as L,n as ae,r as R}from"./api-client-xQDlhUTu.js";import{t as oe}from"./settings-store-B4mLp19V.js";import{n as z}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import{Q as B,Z as se,et as ce}from"./window-store-DqX_qmkQ.js";import{t as le}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 ue}from"./tab-store-D5I52eLN.js";import"./context-menu-BCuZYfWC.js";import{n as de}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import{r as fe}from"./clipboard-D-VCry-F.js";import{t as pe}from"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import{i as me,l as he,m as ge,r as V,t as _e,u as ve}from"./dropdown-menu-BQidk_OJ.js";import{t as ye}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import"./adaptive-context-menu-C4jNSORA.js";import"./fs-api-CFtQzsIJ.js";import"./format-file-meta-DdYtk07C.js";import"./input-C3oVNCMq.js";import{i as be,t as xe}from"./use-db-driver-installed-anzWkGi5.js";import"./db-sidebar-reveal-_qw0CliT.js";import{D as Se}from"./db-explorer-store-BmpvDHz6.js";import{A as Ce,C as we,D as H,E as Te,I as Ee,N as De,O as U,P as Oe,S as ke,T as Ae,a as je,b as Me,g as W,h as Ne,i as Pe,j as Fe,k as Ie,m as Le,n as Re,r as ze,s as Be,u as Ve,w as He,x as Ue,y as We}from"./open-db-tabs-CtWIWHOa.js";import{m as Ge}from"./impexp-state-BWKOuRGj.js";import"./scroll-area-DOlQJGZp.js";import{Di as Ke,Qn as qe,Si as G,Zn as Je,_ as Ye,ar as Xe,ct as Ze,g as Qe,ir as $e,m as et,mi as tt,nr as nt,rr as rt,s as it,tr as at}from"./index-CPBujJc_.js";import"./marked.esm-jqwIt-AK.js";import{t as ot}from"./use-db-tab-B8LjdDb7.js";import{t as st}from"./use-db-read-BCYhIrJM.js";import{a as K,i as q,n as ct,r as J,t as lt}from"./db-tab-parts-tgVIgcs5.js";import"./use-opener-focus-CDRKhHwX.js";import{i as ut,n as dt,r as ft,t as pt}from"./filter-dialog-frame-BkEbqBA4.js";import{t as mt}from"./use-at-most-wide-BHsrzvv3.js";import{C as ht,S as gt,_ as _t,a as vt,b as yt,c as bt,d as xt,f as St,g as Ct,h as wt,i as Tt,l as Et,m as Dt,o as Ot,p as kt,r as At,s as jt,t as Mt,u as Nt,v as Pt,w as Ft,x as It,y as Lt}from"./glide-data-grid-lCwaM1Gy.js";var Y=e(t(),1),X={filters:[],anyColumn:[]};function Rt(e,t,n){return`ppm-db-${e}-${n}.${t}-p1`}var zt=(e,t)=>`/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`;function Bt(e,t,n){try{let r=sessionStorage.getItem(Rt(e,t,n)),i=r?JSON.parse(r):null;return i&&typeof i.data?.hasMore==`boolean`?i:null}catch{return null}}function Z(e,t,n,r,i){try{sessionStorage.setItem(Rt(e,t,n),JSON.stringify({data:r,cols:i}))}catch{}}var Vt=e=>e.toLocaleString();function Ht(e,t){if(!e)return null;let n=e.rows.length;if(!e.hasMore)return{text:`Rows: ${Vt(n)}`,counting:!1,canCountExactly:!1,total:{kind:`exact`,count:n}};let r=t?.key===e.countKey?t:null;if(r?.count!=null){let e=Math.max(r.count,n);return{text:`Rows: ${Vt(e)}`,counting:!1,canCountExactly:!1,total:{kind:`exact`,count:e}}}let i=r?.estimate!=null&&r.estimate>n?r.estimate:null;return r&&!r.pending&&(r.timedOut||r.failed)?{text:i===null?`Rows: Many`:`Rows: ~${Vt(i)}`,counting:!1,canCountExactly:!0,title:r.failed?`The rows could not be counted: ${r.failed}. Click to try again.`:`Counting took too long, so this is not exact. Click to count every row.`,total:i===null?{kind:`many`}:{kind:`estimate`,count:i}}:{text:i===null?`Rows: ${Vt(n)}+`:`Rows: ~${Vt(i)}`,counting:!!r?.pending,canCountExactly:!1,title:i===null?`Rows loaded so far, until they are counted`:`The database's estimate, until the rows are counted`,total:i===null?{kind:`atLeast`,count:n}:{kind:`estimate`,count:i}}}function Ut(e){let t=(0,Y.useCallback)(t=>e?ce(e,t):``,[e]),n=e?se(e):``,[r,i]=(0,Y.useState)(null),[a,o]=(0,Y.useState)(``),s=(0,Y.useRef)(null),[c,l]=(0,Y.useState)(null),u=(0,Y.useRef)(null),[d,f]=(0,Y.useState)([]),p=(0,Y.useRef)(null),[m,h]=(0,Y.useState)(!1),[g,_]=(0,Y.useState)(!1),[v,y]=(0,Y.useState)(null),[b,x]=(0,Y.useState)(null),[S,C]=(0,Y.useState)(null),w=(0,Y.useRef)(null),[ee,te]=(0,Y.useState)([]),T=(0,Y.useRef)([]),E=(0,Y.useRef)(X),D=(0,Y.useRef)(0),O=(0,Y.useRef)(Promise.resolve()),k=(0,Y.useRef)(null),[A,j]=(0,Y.useState)(null),M=(0,Y.useRef)(null),N=(0,Y.useRef)(0),[ne,re]=(0,Y.useState)(0),P=(0,Y.useCallback)(e=>{u.current=e,l(e)},[]),F=(0,Y.useCallback)(e=>{M.current=e,j(e)},[]),I=(0,Y.useCallback)(e=>{N.current++,e.countKey&&F({key:e.countKey,count:e.rows.length,estimate:null,pending:!1})},[F]),ie=(0,Y.useCallback)((e,n)=>{let r=++N.current,i=M.current?.key===n?M.current:null;F({key:n,count:null,estimate:i?.estimate??null,pending:!0}),R.post(t(`/grid/count`),{table:e.table,schema:e.schema,filters:e.filters,anyColumn:e.anyColumn,...e.exact?{exact:!0}:{}}).then(e=>{r===N.current&&F({key:n,count:e.count,estimate:e.estimate,pending:!1,timedOut:e.timedOut})}).catch(e=>{r===N.current&&F({key:n,count:null,estimate:i?.estimate??null,pending:!1,failed:e.message})})},[t,F]),ae=(0,Y.useCallback)((e,t,n=s.current,r=T.current)=>{if(!n)return null;let{filters:i,anyColumn:a}=E.current;return{table:n.table,schema:n.schema,filters:i,anyColumn:a,sort:r,offset:e,limit:t}},[]),oe=(0,Y.useCallback)((e,n)=>{let r=s.current;if(!r)return Promise.resolve(null);let{filters:i,anyColumn:a}=E.current;return R.post(t(`/grid/export`),{table:r.table,schema:r.schema,filters:i,anyColumn:a,sort:T.current,columns:n,format:e})},[t]),z=(0,Y.useCallback)((e,n,r)=>{let i=s.current;return i?R.post(t(`/grid/cell`),{table:i.table,schema:i.schema,column:e,key:n,fileName:r}):Promise.resolve(null)},[t]),B=(0,Y.useCallback)(async(r={})=>{let i=r.table===void 0?s.current:{table:r.table,schema:r.tableSchema??``};if(!i||!e)return null;let a=++D.current;k.current=null,y(null),r.silent||h(!0);let o=r.sort??T.current,c=u.current?.rows.length??0,l=r.keepLoaded?Math.min(Math.max(c,100),Oe):100,d=ae(0,l,i,o),{filters:m,anyColumn:g}=E.current,_=JSON.stringify([i.table,i.schema,m,g]),v=JSON.stringify([i.table,i.schema]),b=r.structure||p.current!==v;try{let[e,s]=await Promise.all([R.post(t(`/grid`),d),b?R.get(t(zt(i.table,i.schema))):Promise.resolve(null)]);if(a!==D.current)return null;C(null),x(null);let{keys:c,records:u}=Ee(e.columns,e.rows),h={columns:c,rows:u,hasMore:e.hasMore,sql:e.sql,countKey:_,rowKey:e.rowKey};return P(h),r.keepLoaded||re(e=>e+1),s&&(f(s),p.current=v),m.length===0&&g.length===0&&o.length===0&&l===100&&s&&Z(n,i.table,i.schema,h,s),e.hasMore?(r.recount||M.current?.key!==_)&&ie(d,_):I(h),null}catch(e){if(a!==D.current)return null;if(r.silent)return e;x(e.message);let t=be(e);return C(t),w.current=t?()=>{B({...r,table:i.table,tableSchema:i.schema})}:null,e}finally{a===D.current&&h(!1)}},[t,e,n,ae,P,I,ie]),le=(0,Y.useCallback)(async(e,n)=>{let r=u.current;if(e!==D.current||!r?.hasMore)return!1;let i=ae(r.rows.length,n);if(!i)return!1;let a=await R.post(t(`/grid`),i),o=u.current;if(e!==D.current||!o)return!1;let{records:s}=Ee(a.columns,a.rows),c={...o,rows:[...o.rows,...s],hasMore:a.hasMore};return P(c),a.hasMore||I(c),!0},[t,ae,P,I]),ue=(0,Y.useCallback)(e=>{let t=O.current.then(e);return O.current=t.catch(()=>{}),t},[]),de=(0,Y.useCallback)(()=>{let e=D.current;!u.current?.hasMore||k.current===e||(k.current=e,_(!0),ue(async()=>{try{await le(e,100)}catch(t){e===D.current&&L.error(`Could not load more rows`,{description:t.message})}finally{k.current===e&&(k.current=null,_(!1))}}))},[ue,le]),fe=(0,Y.useCallback)(()=>{let e=D.current;if(!u.current?.hasMore)return Promise.resolve(null);y(u.current.rows.length);let t=null;return ue(async()=>{try{for(;e===D.current&&u.current?.hasMore&&await le(e,5e3);)e===D.current&&y(u.current?.rows.length??0);e===D.current&&u.current&&!u.current.hasMore&&(t=u.current)}catch(t){e===D.current&&L.error(`Fetch all stopped`,{description:t.message})}finally{e===D.current&&y(null)}}).then(()=>t)},[ue,le]),pe=(0,Y.useCallback)(()=>{let e=u.current,t=ae(0,100);!e?.countKey||!t||ie({...t,exact:!0},e.countKey)},[ae,ie]),me=(0,Y.useCallback)(e=>(E.current=e,B()),[B]),he=(0,Y.useCallback)(async(e,r=``,a)=>{s.current={table:e,schema:r},i(e),o(r),E.current=X,T.current=[],te([]);let c=Bt(n,e,r);if(a){let n=c?.cols??await R.get(t(zt(e,r))).catch(()=>null),i=n?a(n):X;if(n&&(i.filters.length>0||i.anyColumn.length>0))return f(n),p.current=JSON.stringify([e,r]),E.current=i,B({table:e,tableSchema:r})}return c&&(P(c.data),f(c.cols),h(!1)),B({table:e,tableSchema:r,structure:!0})},[t,n,B,P]);xe(e=>{if(S?.id!==e)return;let t=w.current;w.current=null,t?.()});let ge=(0,Y.useCallback)(async(t,n)=>{let r=s.current;!r||!e||(await it({target:e,place:n,table:r.table,schema:r.schema,changes:t}),B({keepLoaded:!0,recount:!0}))},[e,B]),V=(0,Y.useCallback)(e=>(T.current=e,te(e),B({sort:e})),[B]),_e=(0,Y.useCallback)((e={})=>B({structure:e.structure,recount:!0,...e.keepPlace?{keepLoaded:!0}:{}}),[B]),ve=(0,Y.useCallback)(()=>B({silent:!0,keepLoaded:!0}),[B]);return{selectedTable:r,selectedSchema:a,selectTable:he,tableData:c,schema:d,loading:m,loadingMore:g,fetchingAll:v,error:b,driverMissing:S,rowCount:(0,Y.useMemo)(()=>Ht(c,A),[c,A]),countExactly:pe,viewKey:ne,sort:ee,setSort:V,loadMore:de,fetchAll:fe,startExport:oe,startCellDownload:z,saveChanges:ge,reload:_e,refreshQuietly:ve,applyFilters:me}}var Q=n();function Wt(e,t,n,r){let[i,a]=(0,Y.useState)(!1),o=(0,Y.useRef)(!1);return{run:(0,Y.useCallback)(async n=>{if(o.current)return;o.current=!0,a(!0);let r=L.loading(`Exporting ${ut(t,n)}…`);try{let t=await e(n);if(!t){L.dismiss(r);return}tt(ft(t.ticket),t.fileName),L.success(`Downloading ${t.fileName}`,{id:r})}catch(e){L.error(`Export failed`,{id:r,description:e.message})}finally{o.current=!1,a(!1)}},[e,t]),busy:i,unavailable:n,advanced:r}}function Gt({exporter:e,labelClassName:t}){return(0,Q.jsxs)(_e,{children:[(0,Q.jsx)(ge,{asChild:!0,children:(0,Q.jsxs)(`button`,{type:`button`,disabled:!!e.unavailable,"aria-label":`Export`,title:e.unavailable??`Export every row the filters select`,className:K,children:[(0,Q.jsx)(T,{className:`size-4 shrink-0`}),(0,Q.jsx)(`span`,{className:t,children:`Export`}),(0,Q.jsx)(p,{className:`-ml-0.5 size-3 shrink-0`,"aria-hidden":!0})]})}),(0,Q.jsxs)(V,{align:`start`,className:`min-w-56`,children:[e.advanced&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(me,{onSelect:e.advanced,children:[`Export advanced...`,(0,Q.jsx)(ve,{className:`tracking-normal`,children:G(`Mod+E`)})]}),e.run&&(0,Q.jsx)(he,{})]}),e.run&&dt.map(t=>(0,Q.jsx)(me,{disabled:e.busy,onSelect:()=>void e.run?.(t.id),children:t.label},t.id))]})]})}function Kt(e){let t=new Map;for(let n of e){if(n==null||xt(n))continue;let e=_t(n);t.has(e)||t.set(e,n)}return[...t.values()]}function qt(e,t,n){let r=Kt(n);if(!r.length)return null;let i=Ct(t,r),a=De(i,t);return!a.ok||a.anyOf.length===0?null:{text:i,group:{column:e,anyOf:a.anyOf}}}function Jt(e,t,n){return n==null||xt(n)?null:H(W,e,Pt(t,n))}function Yt(e){return e.columns.length===0||e.columns.length!==e.refColumns.length?null:e.columns.map((t,n)=>({column:t,ref:e.refColumns[n]}))}function Xt(e){return{out:e.foreignKeys.flatMap(e=>{let t=Yt(e);return t?[{direction:`out`,schema:e.refSchema,table:e.refTable,name:e.name,keyColumns:e.columns,columns:t.map(e=>({detail:e.ref,master:e.column}))}]:[]}),in:e.references.flatMap(e=>{let t=Yt(e);return t?[{direction:`in`,schema:e.schema,table:e.table,name:e.name,keyColumns:e.columns,columns:t.map(e=>({detail:e.column,master:e.ref}))}]:[]})}}function Zt(e){return!!e&&e.out.length+e.in.length>0}function Qt(e){return[e.direction,e.schema??``,e.table,e.name??``,...e.columns.flatMap(e=>[e.detail,e.master])].join(`\0`)}function $t(e,t){let n=t.trim().toLowerCase();if(!n)return e;let r=e=>e.table.toLowerCase().includes(n)||e.keyColumns.join(`, `).toLowerCase().includes(n);return{out:e.out.filter(r),in:e.in.filter(r)}}function en(e){return{table:e.table,detail:e.columns.map(e=>e.detail).join(`, `),master:e.columns.map(e=>e.master).join(`, `)}}function tn(e,t,n){let r=[];for(let{detail:i,master:a}of e.columns){let e=qt(i,n(i),t.map(e=>e[a]));if(!e)return null;r.push(e.group)}return r}function nn({table:e,references:t,open:n,onOpen:r,sheet:i=!1,grow:a=!0,collapsed:o,onCollapsedChange:s}){let[c,l]=(0,Y.useState)(``),u=$t(t,c),f=n?Qt(n):null,p=(e,t)=>t.length>0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:z(`px-3 pt-1.5 pb-0.5 text-[10.5px] font-semibold tracking-[0.05em] whitespace-nowrap text-text-3 uppercase`,i&&`px-4 pt-2.5 pb-1 text-[11px]`),children:[e,` (`,t.length,`)`]}),t.map(e=>{let t=Qt(e),n=t===f;return(0,Q.jsx)(`div`,{role:`listitem`,children:(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>r(e),"aria-pressed":n,title:`Show ${e.table} below the grid, following the selected row`,className:z(`mx-1 flex h-[26px] w-[calc(100%-8px)] items-center gap-[5px] rounded-[5px] pr-1.5 pl-0.5 text-left text-xs whitespace-nowrap text-text-2 select-none can-hover:hover:bg-surface-hover can-hover:hover:text-text`,i&&`mx-1.5 h-11 w-[calc(100%-12px)] gap-2.5 px-2.5 text-sm`,n&&`bg-accent-wash text-text can-hover:hover:bg-accent-wash`),children:[(0,Q.jsx)(d,{className:z(`shrink-0`,i?`size-[18px]`:`size-[15px]`,n?`text-primary`:`text-text-3`),"aria-hidden":!0}),(0,Q.jsxs)(`span`,{className:`min-w-0 truncate`,children:[(0,Q.jsx)(nt,{text:e.table,query:c}),` `,(0,Q.jsxs)(`span`,{className:`font-mono text-[10.5px] text-text-3`,children:[`(`,e.keyColumns.join(`, `),`)`]})]})]})},t)})]});return(0,Q.jsxs)(`section`,{"aria-label":`References`,className:z(`flex min-h-0 flex-col`,a&&!o&&`flex-1`),children:[(0,Q.jsx)($e,{title:`References`,collapsed:o,onToggle:()=>s(!o)}),!o&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`flex shrink-0 items-center pr-1.5 pb-1.5 pl-2`,children:(0,Q.jsx)(rt,{value:c,onChange:l,placeholder:`Search references`})}),(0,Q.jsxs)(`div`,{role:`list`,"aria-label":`References of ${e}`,className:z(`min-h-0 pb-2.5`,a&&`flex-1 overflow-auto`),children:[p(`References tables`,u.out),p(`Dependent tables`,u.in),u.out.length+u.in.length===0&&(0,Q.jsxs)(at,{children:[`No reference matches “`,c.trim(),`”.`]})]})]})]})}var rn=[{mode:`is`,label:`Is one of line`},{mode:`isNot`,label:`Is not one of line`},{mode:`contains`,label:`Contains`},{mode:`begins`,label:`Begins`},{mode:`ends`,label:`Ends`}];function an({onSubmit:e,onClose:t,returnFocus:n}){let[r,i]=(0,Y.useState)(``),[a,o]=(0,Y.useState)(`is`),s=(0,Y.useId)();return(0,Q.jsxs)(pt,{title:`Filter multiple values`,description:`One value per line. OK writes them into the filter box as one filter.`,onOk:()=>{let n=He(a,r);t(),n&&e(n)},onClose:t,returnFocus:n,children:[(0,Q.jsx)(`textarea`,{value:r,onChange:e=>i(e.target.value),"aria-label":`One value per line`,rows:10,autoFocus:!0,spellCheck:!1,autoComplete:`off`,autoCapitalize:`off`,className:z(Ye,`h-auto min-h-[190px] resize-y py-2 font-mono leading-normal md:h-auto md:text-xs`)}),(0,Q.jsx)(`div`,{role:`radiogroup`,"aria-label":`Match`,className:`flex flex-wrap gap-x-[18px] max-md:flex-col md:gap-y-1.5`,children:rn.map(e=>(0,Q.jsx)(et,{name:s,value:e.mode,checked:a===e.mode,onChange:()=>o(e.mode),children:e.label},e.mode))})]})}function on({request:e,onSubmit:t,onClose:n,returnFocus:r}){let i=It(e.kind),[a,o]=(0,Y.useState)({op:e.first,value:``}),[s,c]=(0,Y.useState)({op:e.second,value:``}),[l,u]=(0,Y.useState)(`and`),d=(0,Y.useId)();return(0,Q.jsxs)(pt,{title:`Set filter`,description:`Two conditions joined with And or Or. OK writes them into the filter box.`,onOk:()=>{let r=ht(e.kind,a,l,s);n(),r&&t(r)},onClose:n,returnFocus:r,children:[(0,Q.jsx)(`p`,{className:`text-[13px] text-text-2 md:text-[12.5px]`,children:`Show rows where`}),(0,Q.jsx)(sn,{which:`First`,condition:a,onChange:o,choices:i,autoFocus:!0}),(0,Q.jsxs)(`div`,{role:`radiogroup`,"aria-label":`Join the two conditions`,className:`flex gap-[18px]`,children:[(0,Q.jsx)(et,{name:d,value:`and`,checked:l===`and`,onChange:()=>u(`and`),children:`And`}),(0,Q.jsx)(et,{name:d,value:`or`,checked:l===`or`,onChange:()=>u(`or`),children:`Or`})]}),(0,Q.jsx)(sn,{which:`Second`,condition:s,onChange:c,choices:i})]})}function sn({which:e,condition:t,onChange:n,choices:r,autoFocus:i}){let a=Ft(t.op);return(0,Q.jsxs)(`div`,{className:`flex gap-2 max-md:flex-col`,children:[(0,Q.jsxs)(`span`,{className:`relative flex min-w-0 md:w-[190px] md:shrink-0`,children:[(0,Q.jsx)(`select`,{value:t.op,onChange:e=>n({...t,op:e.target.value}),"aria-label":`${e} condition`,autoFocus:i&&!a,className:z(`h-11 w-full min-w-0 appearance-none rounded-md border border-border bg-surface pr-7 pl-2.5 text-[15px] text-text-primary outline-none focus:border-ring`,`md:h-[30px] md:font-mono md:text-xs`),children:r.map(e=>(0,Q.jsx)(`option`,{value:e.op,children:e.label},e.op))}),(0,Q.jsx)(p,{className:`pointer-events-none absolute top-1/2 right-2 size-3.5 -translate-y-1/2 text-text-subtle`})]}),a&&(0,Q.jsx)(Qe,{value:t.value,onChange:e=>n({...t,value:e.target.value}),"aria-label":`${e} value`,autoFocus:i,"data-autofocus":i?``:void 0,mono:t.op===`sql`||t.op===`sqlRight`})]})}function cn({open:e,onClose:t,onSubmit:n}){if(!e)return null;let r={onSubmit:t=>n(e.column,t),onClose:t,returnFocus:e.returnFocus},i=e.request;switch(i.dialog){case`condition`:return(0,Q.jsx)(on,{request:i,...r});case`lines`:return(0,Q.jsx)(an,{...r});case`values`:return(0,Q.jsx)(Nt,{column:i.column,kind:i.kind,load:i.load,...r});case`lookup`:return(0,Q.jsx)(Et,{source:i.source,kind:i.kind,...r})}}function ln(e,t,n){return`${se(e)}:${encodeURIComponent(t)}:${encodeURIComponent(n)}`}function un({target:e,dbType:t,table:n,schema:r,columns:i,tableSchema:a,filters:o,fixed:s}){let c=(0,Y.useCallback)(t=>e?ce(e,t):``,[e]),l=(0,Y.useCallback)(e=>i.find(t=>t.name===e)?.kind??`other`,[i]),u=(0,Y.useCallback)(e=>({dialog:`values`,column:e,kind:l(e),load:t=>{let a=Lt({table:n,schema:r},e,t,o,i);return R.post(c(`/grid/values`),s?.length?{...a,filters:[...s,...a.filters??[]]}:a)}}),[c,l,n,r,o,i,s]),d=(0,Y.useCallback)(n=>{let i=a.find(e=>e.name===n)?.fk;if(!i)return null;let o=ln(e,r,i.table),s=r?`&schema=${encodeURIComponent(r)}`:``;return{dialog:`lookup`,kind:l(n),source:{table:i.table,keyColumn:i.column,columns:()=>R.get(c(`/schema?table=${encodeURIComponent(i.table)}${s}`)).then(e=>Ue(e,t)),rows:e=>R.post(c(`/grid`),wt({table:i.table,schema:r},i.column,e)).then(e=>({rows:Ee(e.columns,e.rows).records,hasMore:e.hasMore})),description:oe.getState().dbLookupDescriptions[o]??null,onDescription:e=>oe.getState().setDbLookupDescription(o,e)}}},[c,l,e,t,r,a]);return(0,Y.useMemo)(()=>({chooseValues:u,lookup:d}),[u,d])}var dn=Me(W,[]);function fn(e,t,n=W){let[r,i]=(0,Y.useState)(n),[a,o]=(0,Y.useState)({}),s=(0,Y.useRef)(null),c=(0,Y.useRef)(null),l=(0,Y.useRef)(t);l.current=t;let u=(0,Y.useRef)(n),d=(0,Y.useCallback)((e,t)=>{let n=pn(e,t);n?o(n):L.error(`Could not filter the rows`,{description:t.message})},[]);return(0,Y.useEffect)(()=>{if(e.length===0)return;let t=Me(r,e),n=JSON.stringify(t);s.current??=JSON.stringify(c.current??dn),n!==s.current&&(s.current=n,o({}),l.current(t).then(e=>{e&&s.current===n&&d(t,e)}))},[r,e,d]),{filters:r,setFilters:i,errors:a,opening:(0,Y.useCallback)(e=>(c.current=Me(u.current,e),c.current),[]),openFailed:(0,Y.useCallback)(e=>{let t=c.current&&pn(c.current,e);t&&o(t)},[])}}function pn(e,t){if(!(t instanceof ae)||t.status===404||t.status===428)return null;let n=e.filters.filter(e=>e.anyOf.some(e=>e.some(e=>e.op===`rawSql`))),r=n.length>0?n:t.status===400||t.status===403?e.filters:[];return r.length>0?Object.fromEntries(r.map(e=>[e.column,t.message])):null}var mn=`detail`;function hn({tab:e,reference:t,masterRows:n,shownIn:r,narrow:i,onClose:a}){let o=(0,Y.useId)(),s=en(t);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{"aria-hidden":!0,className:`h-[5px] shrink-0 border-y border-border bg-panel`}),(0,Q.jsxs)(`section`,{"aria-labelledby":o,className:`flex min-h-[150px] shrink-0 grow-0 basis-[42%] flex-col bg-panel-2 max-md:basis-[45%]`,children:[(0,Q.jsxs)(`div`,{className:`flex h-[30px] shrink-0 items-center gap-1.5 border-b border-border-soft bg-panel px-2.5 text-xs text-text-2 max-md:h-11 max-md:text-[13px]`,children:[(0,Q.jsx)(A,{className:`size-3.5 shrink-0 text-info`,"aria-hidden":!0}),(0,Q.jsxs)(`h3`,{id:o,className:`min-w-0 truncate font-normal`,children:[(0,Q.jsx)(`b`,{className:`font-semibold text-text`,children:s.table}),` [`,s.detail,`] = master [`,s.master,`]`,n.length===0&&(0,Q.jsx)(`span`,{className:`text-text-3`,children:` · select a row in the grid above`})]}),(0,Q.jsx)(`span`,{className:`flex-1`}),(0,Q.jsx)(`button`,{type:`button`,onClick:a,"aria-label":`Close ${s.table}`,className:z(Xe,`shrink-0 max-md:min-w-11`),children:`Close`})]}),(0,Q.jsx)(`div`,{className:`relative min-h-0 flex-1`,children:(0,Q.jsx)(_n,{tab:e,reference:t,masterRows:n,shownIn:r,narrow:i},Qt(t))})]})]})}var gn={filters:[],anyColumn:[]};function _n({tab:e,reference:t,masterRows:n,shownIn:r,narrow:i}){let a=Ut(e.target),o=de(),s=(0,Y.useRef)(null),c=t.schema??``,l=c?`&schema=${encodeURIComponent(c)}`:``,u=st(e.target,`/schema?table=${encodeURIComponent(t.table)}${l}`,r),d=a.schema.length?a.schema:u.data??[],f=(0,Y.useMemo)(()=>Ue(d,e.dbType),[d,e.dbType]),p=(0,Y.useMemo)(()=>f.length?tn(t,n,e=>f.find(t=>t.name===e)?.kind??`other`):null,[t,n,f]),m=p?JSON.stringify(p):null,h=(0,Y.useRef)(p);h.current=p;let g=(0,Y.useRef)(gn),_=(0,Y.useRef)(!1),[v,y]=(0,Y.useState)(!1),b=(0,Y.useRef)(0),x=(0,Y.useCallback)(async e=>{let n=g.current,r={filters:[...e,...n.filters],anyColumn:n.anyColumn},i=++b.current,o;return _.current?o=await a.applyFilters(r):(_.current=!0,o=await a.selectTable(t.table,c,()=>r)),i===b.current&&y(o!==null),o},[a.applyFilters,a.selectTable,t.table,c]),S=(0,Y.useRef)(!1);S.current=a.tableData!==null,(0,Y.useEffect)(()=>{if(!m)return;let e=S.current;x(JSON.parse(m)).then(n=>{n&&e&&L.error(`Could not read ${t.table}`,{description:n.message})})},[m]);let{filters:C,setFilters:w,errors:ee}=fn(f,(0,Y.useCallback)(e=>{g.current=e;let t=h.current;return t?x(t):Promise.resolve(null)},[x])),[te,T]=(0,Y.useState)(null),E=un({target:e.target,dbType:e.dbType,table:t.table,schema:c,columns:f,tableSchema:d,filters:C,fixed:p??void 0}),D=(0,Y.useMemo)(()=>({filters:C,columns:f,onChange:w,errors:ee,onDialog:(e,t,n)=>T({column:e,request:t,returnFocus:n}),onChooseValues:(e,t)=>T({column:e,request:E.chooseValues(e),returnFocus:t}),onLookup:(e,t)=>{let n=E.lookup(e);n&&T({column:e,request:n,returnFocus:t})}}),[C,f,ee,w,E]),O=(0,Y.useCallback)(e=>{let t=E.lookup(e);return t?.dialog===`lookup`?{source:t.source,kind:t.kind}:null},[E]),k=(0,Y.useCallback)((e,t)=>{w(n=>e===null?Ie(n,t):H(n,e,t))},[w]),[A,j]=(0,Y.useState)({}),M=(0,Y.useCallback)(e=>{a.setSort(e)},[a.setSort]),N=(0,Y.useCallback)(n=>{e.place&&Be(e.place,{schema:t.schema,name:n})},[e.place,t.schema]),ne=(0,Y.useCallback)((n,r)=>{let i=d.find(e=>e.name===n)?.fk,a=f.find(e=>e.name===n)?.kind??`other`,o=i&&Jt(i.column,a,r[n]);i&&o&&e.place&&ze(e.place,{schema:t.schema,name:i.table},o)},[d,f,e.place,t.schema]),re=t=>{let n=Ot(t.currentTarget,t.target),r=n&&vt(t.nativeEvent,n);if(!(!r||r===`toggle-panel`||r!==`swallow`&&Tt(r)))switch(t.preventDefault(),t.stopPropagation(),r){case`refresh`:p&&a.reload();break;case`refresh-structure`:u.reload(),p&&a.reload({structure:!0});break;case`save`:e.readonly||s.current?.save();break;case`new-row`:p&&s.current?.newRow();break;case`delete-rows`:s.current?.deleteSelectedRows();break;case`undo`:s.current?.undo();break;case`redo`:s.current?.redo();break;case`clear-filters`:w(W);break;default:break}},P=a.tableData;if(u.error&&!d.length)return(0,Q.jsx)(ct,{error:u.error});if(a.error&&!P)return(0,Q.jsx)(ct,{error:a.error});if(!d.length)return(0,Q.jsx)(ct,{loading:!0});let F=!p,I=e.place&&!F&&(P?.sql||e.dbType)?()=>{e.place&&Re(e.place,P?.sql||Je({schema:t.schema,name:t.table},e.dbType))}:void 0;return(0,Q.jsxs)(`div`,{className:`absolute inset-0`,onKeyDown:re,children:[(0,Q.jsx)(Mt,{ref:s,columns:P?.columns??d.map(e=>e.name),rows:F||v||!P?[]:P.rows,schema:d,loading:!F&&(a.loading||!P),rowKey:P?.rowKey,onSaveChanges:t=>a.saveChanges(t,e.place),readOnly:e.readonly,editOnly:F,sort:a.sort,onSortChange:M,viewKey:F?`waiting`:a.viewKey,hasMore:!F&&!!P?.hasMore,onLoadMore:a.loadMore,loadingMore:a.loadingMore,fetchingAll:a.fetchingAll,columnWidths:A,onColumnWidthsChange:j,tabId:r,tabSlot:mn,rowsLabel:F?`Rows: 0`:v?void 0:a.rowCount?.text,onResetFilter:!F&&we(C)?()=>w(W):void 0,onOpenQuery:I,onOpenTable:e.place?N:void 0,place:e.place??void 0,selectedTable:t.table,selectedSchema:c,connectionName:e.name,dialect:e.dialect,filtering:o?void 0:D,lookupFor:e.target?O:void 0,onOpenReference:e.place?ne:void 0,startCellDownload:a.startCellDownload,floatCellData:i}),(0,Q.jsx)(cn,{open:te,onClose:()=>T(null),onSubmit:k})]})}function vn({filtering:e,schema:t,nameFilter:n,added:r,onRemoveAdded:i}){let[a,o]=(0,Y.useState)(!1),{filters:s,columns:c,onChange:l}=e,u=new Map(t.map(e=>[e.name,e])),d=new Set(r),f=s.multi;return(0,Q.jsxs)(`section`,{"aria-label":`Filters`,className:`flex min-h-0 flex-col`,children:[(0,Q.jsx)($e,{title:`Filters`,collapsed:a,onToggle:()=>o(e=>!e)}),!a&&(0,Q.jsxs)(`div`,{className:`grid min-h-0 content-start gap-2 overflow-auto px-2 pb-2.5`,children:[n&&(0,Q.jsx)(bn,{...n}),(0,Q.jsx)(yn,{title:(0,Q.jsx)(`span`,{className:`min-w-0 truncate text-[11.5px] text-text-3`,children:`Multi column filter`}),filter:f,name:`this filter`,onSwitch:e=>l(t=>U(t,null,!e)),onRemove:()=>l(e=>Ie(e,``)),children:(0,Q.jsx)(yt,{size:`panel`,value:f?.text??``,off:f?.off,read:e=>Ae({text:e},c),onCommit:e=>l(t=>Ie(t,e)),label:`Multi column filter`,funnel:e.onDialog&&{kind:`multi`,label:`Filter options: all columns`,onDialog:(t,n)=>e.onDialog(null,t,n)}})}),c.filter(e=>s.columns[e.name]||d.has(e.name)).map(t=>{let n=u.get(t.name),r=n?.pk?S:n?.fk?A:null,a=()=>{l(e=>H(e,t.name,``)),d.has(t.name)&&i?.(t.name)};return(0,Q.jsx)(yn,{title:(0,Q.jsxs)(Q.Fragment,{children:[r&&(0,Q.jsx)(r,{className:z(`size-3.5 shrink-0`,n?.pk?`text-warning`:`text-info`),"aria-hidden":!0}),(0,Q.jsx)(`span`,{className:z(`min-w-0 truncate text-[11.5px]`,n&&!n.nullable?`font-semibold text-text`:`text-text-3`),children:t.name})]}),filter:s.columns[t.name],name:`the ${t.name} filter`,onSwitch:e=>l(n=>U(n,t.name,!e)),onRemove:a,removable:d.has(t.name),children:(0,Q.jsx)(yt,{...kt(e,t.name,t.kind,n?.fk?.table),size:`panel`})},t.name)})]})]})}function yn({title:e,filter:t,name:n,onSwitch:r,onRemove:i,removable:a,children:o}){return(0,Q.jsxs)(`div`,{className:`grid gap-[3px]`,children:[(0,Q.jsxs)(`div`,{className:`flex h-5 min-w-0 items-center gap-[5px]`,children:[e,t&&(0,Q.jsx)(`label`,{className:`ml-auto grid size-5 shrink-0 cursor-pointer place-items-center`,title:t.off?`Enable this filter`:`Disable this filter`,children:(0,Q.jsx)(`input`,{type:`checkbox`,checked:!t.off,onChange:e=>r(e.target.checked),"aria-label":`Apply ${n}`,className:`size-[13px] cursor-pointer accent-primary`})}),(t||a)&&(0,Q.jsx)(Q.Fragment,{children:(0,Q.jsx)(`button`,{type:`button`,onClick:i,"aria-label":`Remove ${n}`,title:`Remove`,className:z(`grid size-5 shrink-0 place-items-center rounded text-text-3 can-hover:hover:bg-surface-hover can-hover:hover:text-text`,!t&&`ml-auto`),children:(0,Q.jsx)(O,{className:`size-3`})})})]}),o]})}function bn({text:e,onChange:t}){return(0,Q.jsxs)(`div`,{className:`grid gap-[3px]`,children:[(0,Q.jsx)(`div`,{className:`flex h-5 min-w-0 items-center gap-[5px]`,children:(0,Q.jsx)(`span`,{className:`min-w-0 truncate text-[11.5px] text-text-3`,children:`Column name filter`})}),(0,Q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-px`,children:[(0,Q.jsx)(`input`,{value:e,onChange:e=>t(e.target.value),onKeyDown:n=>{n.key!==`Escape`||!e||(n.preventDefault(),n.stopPropagation(),t(``))},"aria-label":`Column name filter`,spellCheck:!1,autoComplete:`off`,autoCapitalize:`off`,className:`h-[26px] w-full min-w-0 rounded-[5px] border border-border-soft bg-input px-1.5 text-[11.5px] text-text outline-none placeholder:text-text-3/70 focus:border-primary`}),e&&(0,Q.jsx)(`button`,{type:`button`,onClick:()=>t(``),"aria-label":`Clear the column name filter`,title:`Clear`,className:`grid size-5 shrink-0 place-items-center rounded text-text-3 can-hover:hover:bg-surface-hover can-hover:hover:text-text`,children:(0,Q.jsx)(O,{className:`size-3`})})]})]})}var xn={ok:`border-success/45 bg-success/10 text-success`,off:`border-dashed border-border text-text-3`,bad:`border-error/50 bg-error/10 text-error`},Sn=e=>e.refused?`, refused`:e.state===`bad`?`, not understood`:e.state===`off`?`, switched off`:``,Cn=e=>e.map(e=>`${e.column} ${e.dir===`ASC`?`↑`:`↓`}`).join(`, `),wn=`relative inline-flex h-8 shrink-0 items-center gap-1 rounded-full border border-border bg-panel-2 px-2.5 text-[12.5px] text-text-2 select-none before:absolute before:inset-x-0 before:-inset-y-[7px]`;function Tn({filtering:e,onOpen:t,sort:n,hidden:r}){let{filters:i,columns:a,errors:o,onChange:s}=e,c=a.flatMap(e=>{let t=i.columns[e.name],{state:n}=We(t,e.kind);if(!t||n===`empty`)return[];let r=n===`ok`?o?.[e.name]:void 0;return[{column:e.name,filter:t,state:r?`bad`:n,refused:r}]}),l=i.multi,u=Ae(l,a).state;l&&u!==`empty`&&c.push({column:null,filter:l,state:u});let d=n?.length?n:null;return c.length===0&&!d&&!r?.count?null:(0,Q.jsxs)(`div`,{role:`group`,"aria-label":`Filters`,className:`flex shrink-0 gap-3 overflow-x-auto border-b border-border-soft px-3 py-1.5 scrollbar-none`,children:[r&&r.count>0&&(0,Q.jsxs)(`button`,{type:`button`,onClick:r.onOpen,className:wn,children:[(0,Q.jsx)(k,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),(0,Q.jsx)(`b`,{className:`font-semibold`,children:`Columns`}),` · `,r.count,` hidden`]}),c.map(e=>{let n=e.column??`any column`,r=e.state===`bad`?ne:D;return(0,Q.jsxs)(`span`,{className:z(`inline-flex h-8 shrink-0 items-stretch rounded-full border text-[12.5px] select-none`,xn[e.state]),children:[(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>t(e.column),"aria-label":`${n}: ${e.filter.text}${Sn(e)}`,className:`relative flex min-w-0 items-center gap-1 rounded-l-full pr-1 pl-2.5 before:absolute before:inset-x-0 before:-inset-y-[7px]`,children:[(0,Q.jsx)(r,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),(0,Q.jsx)(`b`,{className:`shrink-0 font-semibold`,children:n}),(0,Q.jsx)(`span`,{className:z(`max-w-[40vw] truncate font-mono text-xs`,e.state===`off`&&`line-through`),children:e.filter.text})]}),(0,Q.jsx)(`button`,{type:`button`,title:`Remove`,"aria-label":e.column===null?`Remove the Multi column filter`:`Remove the ${e.column} filter`,onClick:()=>s(t=>e.column===null?Ie(t,``):H(t,e.column,``)),className:`relative grid w-8 shrink-0 place-items-center rounded-r-full before:absolute before:-inset-y-[7px] before:left-0 before:-right-3`,children:(0,Q.jsx)(O,{className:`size-3.5`,"aria-hidden":!0})})]},e.column??`\0multi`)}),d&&(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>t(d[0].column),"aria-label":`Sorted by ${Cn(d)}`,className:wn,children:[(0,Q.jsx)(F,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),(0,Q.jsx)(`span`,{className:`max-w-[50vw] truncate`,children:Cn(d)})]})]})}var En=e=>e.sort.length===0?O:e.dir===`DESC`?M:ee,Dn={empty:``,ok:`border-success/55 focus:border-success/55 text-success`,off:`border-dashed text-text-3 line-through`,bad:`border-error/70 focus:border-error/70 text-error`},On=()=>{};function kn({filtering:e,column:t,schema:n,menu:r,onClose:i}){let a=(0,Y.useId)(),o=t===null?null:e.columns.find(e=>e.name===t)?.kind??`other`,c=t===null?e.filters.multi:e.filters.columns[t],[l,u]=(0,Y.useState)(c?.text??``),d=t===null?void 0:n.find(e=>e.name===t),f=o===null?Ae({text:l},e.columns):We({text:l},o),p=l===(c?.text??``),m=p&&f.state===`ok`&&t!==null?e.errors?.[t]:void 0,h=m?`bad`:p&&f.state===`ok`&&c?.off?`off`:f.state,_=m?`Refused: ${m}`:f.state===`bad`?`${f.error.message} — it would not be applied`:h===`off`?`Switched off · Apply switches it on`:h===`ok`?`Understood · Apply filters the rows`:t===null?`No filter on any column`:`No filter on this column`,v=n=>{i(),e.onChange(e=>t===null?Ie(e,n):H(e,t,n))},y=()=>{f.state!==`bad`&&v(l)},b=e=>{e.key!==`Enter`||e.shiftKey||e.ctrlKey||e.metaKey||e.altKey||e.nativeEvent.isComposing||(e.preventDefault(),f.state===`bad`&&f.error.end>f.error.start&&e.currentTarget.setSelectionRange(f.error.start,f.error.end),y())},x=e=>{let t=e.clipboardData.getData(`text`);if(!t.includes(`
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{A as r,Bt as i,Dr as a,Gr as o,Hn as s,I as c,In as l,L as u,Lr as d,Or as f,P as p,Qn as m,Rr as h,Vn as g,Vt as _,Yr as v,Zt as y,at as b,c as x,cn as S,cr as C,f as w,g as ee,gt as te,h as T,hr as E,kt as D,li as O,lt as k,mn as A,mr as j,o as M,p as N,r as ne,st as re,ut as P,v as F,vr as I,vt as ie}from"./icons-BwyIKaTT.js";import{k as L,n as ae,r as R}from"./api-client-xQDlhUTu.js";import{t as oe}from"./settings-store-B4mLp19V.js";import{n as z}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import{Q as B,Z as se,et as ce}from"./window-store-DqX_qmkQ.js";import{t as le}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 ue}from"./tab-store-D5I52eLN.js";import"./context-menu-BCuZYfWC.js";import{n as de}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import{r as fe}from"./clipboard-D-VCry-F.js";import{t as pe}from"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import{i as me,l as he,m as ge,r as V,t as _e,u as ve}from"./dropdown-menu-BQidk_OJ.js";import{t as ye}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import"./adaptive-context-menu-C4jNSORA.js";import"./fs-api-CFtQzsIJ.js";import"./format-file-meta-DdYtk07C.js";import"./input-C3oVNCMq.js";import{i as be,t as xe}from"./use-db-driver-installed-anzWkGi5.js";import"./db-sidebar-reveal-_qw0CliT.js";import{D as Se}from"./db-explorer-store-BmpvDHz6.js";import{A as Ce,C as we,D as H,E as Te,I as Ee,N as De,O as U,P as Oe,S as ke,T as Ae,a as je,b as Me,g as W,h as Ne,i as Pe,j as Fe,k as Ie,m as Le,n as Re,r as ze,s as Be,u as Ve,w as He,x as Ue,y as We}from"./open-db-tabs-CtWIWHOa.js";import{m as Ge}from"./impexp-state-BWKOuRGj.js";import"./scroll-area-DOlQJGZp.js";import{Di as Ke,Qn as qe,Si as G,Zn as Je,_ as Ye,ar as Xe,ct as Ze,g as Qe,ir as $e,m as et,mi as tt,nr as nt,rr as rt,s as it,tr as at}from"./index-EznfgwH9.js";import"./marked.esm-jqwIt-AK.js";import{t as ot}from"./use-db-tab-B8LjdDb7.js";import{t as st}from"./use-db-read-BCYhIrJM.js";import{a as K,i as q,n as ct,r as J,t as lt}from"./db-tab-parts-BbNfuvwC.js";import"./use-opener-focus-CDRKhHwX.js";import{i as ut,n as dt,r as ft,t as pt}from"./filter-dialog-frame-BkEbqBA4.js";import{t as mt}from"./use-at-most-wide-BHsrzvv3.js";import{C as ht,S as gt,_ as _t,a as vt,b as yt,c as bt,d as xt,f as St,g as Ct,h as wt,i as Tt,l as Et,m as Dt,o as Ot,p as kt,r as At,s as jt,t as Mt,u as Nt,v as Pt,w as Ft,x as It,y as Lt}from"./glide-data-grid-BrwKKQhc.js";var Y=e(t(),1),X={filters:[],anyColumn:[]};function Rt(e,t,n){return`ppm-db-${e}-${n}.${t}-p1`}var zt=(e,t)=>`/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`;function Bt(e,t,n){try{let r=sessionStorage.getItem(Rt(e,t,n)),i=r?JSON.parse(r):null;return i&&typeof i.data?.hasMore==`boolean`?i:null}catch{return null}}function Z(e,t,n,r,i){try{sessionStorage.setItem(Rt(e,t,n),JSON.stringify({data:r,cols:i}))}catch{}}var Vt=e=>e.toLocaleString();function Ht(e,t){if(!e)return null;let n=e.rows.length;if(!e.hasMore)return{text:`Rows: ${Vt(n)}`,counting:!1,canCountExactly:!1,total:{kind:`exact`,count:n}};let r=t?.key===e.countKey?t:null;if(r?.count!=null){let e=Math.max(r.count,n);return{text:`Rows: ${Vt(e)}`,counting:!1,canCountExactly:!1,total:{kind:`exact`,count:e}}}let i=r?.estimate!=null&&r.estimate>n?r.estimate:null;return r&&!r.pending&&(r.timedOut||r.failed)?{text:i===null?`Rows: Many`:`Rows: ~${Vt(i)}`,counting:!1,canCountExactly:!0,title:r.failed?`The rows could not be counted: ${r.failed}. Click to try again.`:`Counting took too long, so this is not exact. Click to count every row.`,total:i===null?{kind:`many`}:{kind:`estimate`,count:i}}:{text:i===null?`Rows: ${Vt(n)}+`:`Rows: ~${Vt(i)}`,counting:!!r?.pending,canCountExactly:!1,title:i===null?`Rows loaded so far, until they are counted`:`The database's estimate, until the rows are counted`,total:i===null?{kind:`atLeast`,count:n}:{kind:`estimate`,count:i}}}function Ut(e){let t=(0,Y.useCallback)(t=>e?ce(e,t):``,[e]),n=e?se(e):``,[r,i]=(0,Y.useState)(null),[a,o]=(0,Y.useState)(``),s=(0,Y.useRef)(null),[c,l]=(0,Y.useState)(null),u=(0,Y.useRef)(null),[d,f]=(0,Y.useState)([]),p=(0,Y.useRef)(null),[m,h]=(0,Y.useState)(!1),[g,_]=(0,Y.useState)(!1),[v,y]=(0,Y.useState)(null),[b,x]=(0,Y.useState)(null),[S,C]=(0,Y.useState)(null),w=(0,Y.useRef)(null),[ee,te]=(0,Y.useState)([]),T=(0,Y.useRef)([]),E=(0,Y.useRef)(X),D=(0,Y.useRef)(0),O=(0,Y.useRef)(Promise.resolve()),k=(0,Y.useRef)(null),[A,j]=(0,Y.useState)(null),M=(0,Y.useRef)(null),N=(0,Y.useRef)(0),[ne,re]=(0,Y.useState)(0),P=(0,Y.useCallback)(e=>{u.current=e,l(e)},[]),F=(0,Y.useCallback)(e=>{M.current=e,j(e)},[]),I=(0,Y.useCallback)(e=>{N.current++,e.countKey&&F({key:e.countKey,count:e.rows.length,estimate:null,pending:!1})},[F]),ie=(0,Y.useCallback)((e,n)=>{let r=++N.current,i=M.current?.key===n?M.current:null;F({key:n,count:null,estimate:i?.estimate??null,pending:!0}),R.post(t(`/grid/count`),{table:e.table,schema:e.schema,filters:e.filters,anyColumn:e.anyColumn,...e.exact?{exact:!0}:{}}).then(e=>{r===N.current&&F({key:n,count:e.count,estimate:e.estimate,pending:!1,timedOut:e.timedOut})}).catch(e=>{r===N.current&&F({key:n,count:null,estimate:i?.estimate??null,pending:!1,failed:e.message})})},[t,F]),ae=(0,Y.useCallback)((e,t,n=s.current,r=T.current)=>{if(!n)return null;let{filters:i,anyColumn:a}=E.current;return{table:n.table,schema:n.schema,filters:i,anyColumn:a,sort:r,offset:e,limit:t}},[]),oe=(0,Y.useCallback)((e,n)=>{let r=s.current;if(!r)return Promise.resolve(null);let{filters:i,anyColumn:a}=E.current;return R.post(t(`/grid/export`),{table:r.table,schema:r.schema,filters:i,anyColumn:a,sort:T.current,columns:n,format:e})},[t]),z=(0,Y.useCallback)((e,n,r)=>{let i=s.current;return i?R.post(t(`/grid/cell`),{table:i.table,schema:i.schema,column:e,key:n,fileName:r}):Promise.resolve(null)},[t]),B=(0,Y.useCallback)(async(r={})=>{let i=r.table===void 0?s.current:{table:r.table,schema:r.tableSchema??``};if(!i||!e)return null;let a=++D.current;k.current=null,y(null),r.silent||h(!0);let o=r.sort??T.current,c=u.current?.rows.length??0,l=r.keepLoaded?Math.min(Math.max(c,100),Oe):100,d=ae(0,l,i,o),{filters:m,anyColumn:g}=E.current,_=JSON.stringify([i.table,i.schema,m,g]),v=JSON.stringify([i.table,i.schema]),b=r.structure||p.current!==v;try{let[e,s]=await Promise.all([R.post(t(`/grid`),d),b?R.get(t(zt(i.table,i.schema))):Promise.resolve(null)]);if(a!==D.current)return null;C(null),x(null);let{keys:c,records:u}=Ee(e.columns,e.rows),h={columns:c,rows:u,hasMore:e.hasMore,sql:e.sql,countKey:_,rowKey:e.rowKey};return P(h),r.keepLoaded||re(e=>e+1),s&&(f(s),p.current=v),m.length===0&&g.length===0&&o.length===0&&l===100&&s&&Z(n,i.table,i.schema,h,s),e.hasMore?(r.recount||M.current?.key!==_)&&ie(d,_):I(h),null}catch(e){if(a!==D.current)return null;if(r.silent)return e;x(e.message);let t=be(e);return C(t),w.current=t?()=>{B({...r,table:i.table,tableSchema:i.schema})}:null,e}finally{a===D.current&&h(!1)}},[t,e,n,ae,P,I,ie]),le=(0,Y.useCallback)(async(e,n)=>{let r=u.current;if(e!==D.current||!r?.hasMore)return!1;let i=ae(r.rows.length,n);if(!i)return!1;let a=await R.post(t(`/grid`),i),o=u.current;if(e!==D.current||!o)return!1;let{records:s}=Ee(a.columns,a.rows),c={...o,rows:[...o.rows,...s],hasMore:a.hasMore};return P(c),a.hasMore||I(c),!0},[t,ae,P,I]),ue=(0,Y.useCallback)(e=>{let t=O.current.then(e);return O.current=t.catch(()=>{}),t},[]),de=(0,Y.useCallback)(()=>{let e=D.current;!u.current?.hasMore||k.current===e||(k.current=e,_(!0),ue(async()=>{try{await le(e,100)}catch(t){e===D.current&&L.error(`Could not load more rows`,{description:t.message})}finally{k.current===e&&(k.current=null,_(!1))}}))},[ue,le]),fe=(0,Y.useCallback)(()=>{let e=D.current;if(!u.current?.hasMore)return Promise.resolve(null);y(u.current.rows.length);let t=null;return ue(async()=>{try{for(;e===D.current&&u.current?.hasMore&&await le(e,5e3);)e===D.current&&y(u.current?.rows.length??0);e===D.current&&u.current&&!u.current.hasMore&&(t=u.current)}catch(t){e===D.current&&L.error(`Fetch all stopped`,{description:t.message})}finally{e===D.current&&y(null)}}).then(()=>t)},[ue,le]),pe=(0,Y.useCallback)(()=>{let e=u.current,t=ae(0,100);!e?.countKey||!t||ie({...t,exact:!0},e.countKey)},[ae,ie]),me=(0,Y.useCallback)(e=>(E.current=e,B()),[B]),he=(0,Y.useCallback)(async(e,r=``,a)=>{s.current={table:e,schema:r},i(e),o(r),E.current=X,T.current=[],te([]);let c=Bt(n,e,r);if(a){let n=c?.cols??await R.get(t(zt(e,r))).catch(()=>null),i=n?a(n):X;if(n&&(i.filters.length>0||i.anyColumn.length>0))return f(n),p.current=JSON.stringify([e,r]),E.current=i,B({table:e,tableSchema:r})}return c&&(P(c.data),f(c.cols),h(!1)),B({table:e,tableSchema:r,structure:!0})},[t,n,B,P]);xe(e=>{if(S?.id!==e)return;let t=w.current;w.current=null,t?.()});let ge=(0,Y.useCallback)(async(t,n)=>{let r=s.current;!r||!e||(await it({target:e,place:n,table:r.table,schema:r.schema,changes:t}),B({keepLoaded:!0,recount:!0}))},[e,B]),V=(0,Y.useCallback)(e=>(T.current=e,te(e),B({sort:e})),[B]),_e=(0,Y.useCallback)((e={})=>B({structure:e.structure,recount:!0,...e.keepPlace?{keepLoaded:!0}:{}}),[B]),ve=(0,Y.useCallback)(()=>B({silent:!0,keepLoaded:!0}),[B]);return{selectedTable:r,selectedSchema:a,selectTable:he,tableData:c,schema:d,loading:m,loadingMore:g,fetchingAll:v,error:b,driverMissing:S,rowCount:(0,Y.useMemo)(()=>Ht(c,A),[c,A]),countExactly:pe,viewKey:ne,sort:ee,setSort:V,loadMore:de,fetchAll:fe,startExport:oe,startCellDownload:z,saveChanges:ge,reload:_e,refreshQuietly:ve,applyFilters:me}}var Q=n();function Wt(e,t,n,r){let[i,a]=(0,Y.useState)(!1),o=(0,Y.useRef)(!1);return{run:(0,Y.useCallback)(async n=>{if(o.current)return;o.current=!0,a(!0);let r=L.loading(`Exporting ${ut(t,n)}…`);try{let t=await e(n);if(!t){L.dismiss(r);return}tt(ft(t.ticket),t.fileName),L.success(`Downloading ${t.fileName}`,{id:r})}catch(e){L.error(`Export failed`,{id:r,description:e.message})}finally{o.current=!1,a(!1)}},[e,t]),busy:i,unavailable:n,advanced:r}}function Gt({exporter:e,labelClassName:t}){return(0,Q.jsxs)(_e,{children:[(0,Q.jsx)(ge,{asChild:!0,children:(0,Q.jsxs)(`button`,{type:`button`,disabled:!!e.unavailable,"aria-label":`Export`,title:e.unavailable??`Export every row the filters select`,className:K,children:[(0,Q.jsx)(T,{className:`size-4 shrink-0`}),(0,Q.jsx)(`span`,{className:t,children:`Export`}),(0,Q.jsx)(p,{className:`-ml-0.5 size-3 shrink-0`,"aria-hidden":!0})]})}),(0,Q.jsxs)(V,{align:`start`,className:`min-w-56`,children:[e.advanced&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(me,{onSelect:e.advanced,children:[`Export advanced...`,(0,Q.jsx)(ve,{className:`tracking-normal`,children:G(`Mod+E`)})]}),e.run&&(0,Q.jsx)(he,{})]}),e.run&&dt.map(t=>(0,Q.jsx)(me,{disabled:e.busy,onSelect:()=>void e.run?.(t.id),children:t.label},t.id))]})]})}function Kt(e){let t=new Map;for(let n of e){if(n==null||xt(n))continue;let e=_t(n);t.has(e)||t.set(e,n)}return[...t.values()]}function qt(e,t,n){let r=Kt(n);if(!r.length)return null;let i=Ct(t,r),a=De(i,t);return!a.ok||a.anyOf.length===0?null:{text:i,group:{column:e,anyOf:a.anyOf}}}function Jt(e,t,n){return n==null||xt(n)?null:H(W,e,Pt(t,n))}function Yt(e){return e.columns.length===0||e.columns.length!==e.refColumns.length?null:e.columns.map((t,n)=>({column:t,ref:e.refColumns[n]}))}function Xt(e){return{out:e.foreignKeys.flatMap(e=>{let t=Yt(e);return t?[{direction:`out`,schema:e.refSchema,table:e.refTable,name:e.name,keyColumns:e.columns,columns:t.map(e=>({detail:e.ref,master:e.column}))}]:[]}),in:e.references.flatMap(e=>{let t=Yt(e);return t?[{direction:`in`,schema:e.schema,table:e.table,name:e.name,keyColumns:e.columns,columns:t.map(e=>({detail:e.column,master:e.ref}))}]:[]})}}function Zt(e){return!!e&&e.out.length+e.in.length>0}function Qt(e){return[e.direction,e.schema??``,e.table,e.name??``,...e.columns.flatMap(e=>[e.detail,e.master])].join(`\0`)}function $t(e,t){let n=t.trim().toLowerCase();if(!n)return e;let r=e=>e.table.toLowerCase().includes(n)||e.keyColumns.join(`, `).toLowerCase().includes(n);return{out:e.out.filter(r),in:e.in.filter(r)}}function en(e){return{table:e.table,detail:e.columns.map(e=>e.detail).join(`, `),master:e.columns.map(e=>e.master).join(`, `)}}function tn(e,t,n){let r=[];for(let{detail:i,master:a}of e.columns){let e=qt(i,n(i),t.map(e=>e[a]));if(!e)return null;r.push(e.group)}return r}function nn({table:e,references:t,open:n,onOpen:r,sheet:i=!1,grow:a=!0,collapsed:o,onCollapsedChange:s}){let[c,l]=(0,Y.useState)(``),u=$t(t,c),f=n?Qt(n):null,p=(e,t)=>t.length>0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:z(`px-3 pt-1.5 pb-0.5 text-[10.5px] font-semibold tracking-[0.05em] whitespace-nowrap text-text-3 uppercase`,i&&`px-4 pt-2.5 pb-1 text-[11px]`),children:[e,` (`,t.length,`)`]}),t.map(e=>{let t=Qt(e),n=t===f;return(0,Q.jsx)(`div`,{role:`listitem`,children:(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>r(e),"aria-pressed":n,title:`Show ${e.table} below the grid, following the selected row`,className:z(`mx-1 flex h-[26px] w-[calc(100%-8px)] items-center gap-[5px] rounded-[5px] pr-1.5 pl-0.5 text-left text-xs whitespace-nowrap text-text-2 select-none can-hover:hover:bg-surface-hover can-hover:hover:text-text`,i&&`mx-1.5 h-11 w-[calc(100%-12px)] gap-2.5 px-2.5 text-sm`,n&&`bg-accent-wash text-text can-hover:hover:bg-accent-wash`),children:[(0,Q.jsx)(d,{className:z(`shrink-0`,i?`size-[18px]`:`size-[15px]`,n?`text-primary`:`text-text-3`),"aria-hidden":!0}),(0,Q.jsxs)(`span`,{className:`min-w-0 truncate`,children:[(0,Q.jsx)(nt,{text:e.table,query:c}),` `,(0,Q.jsxs)(`span`,{className:`font-mono text-[10.5px] text-text-3`,children:[`(`,e.keyColumns.join(`, `),`)`]})]})]})},t)})]});return(0,Q.jsxs)(`section`,{"aria-label":`References`,className:z(`flex min-h-0 flex-col`,a&&!o&&`flex-1`),children:[(0,Q.jsx)($e,{title:`References`,collapsed:o,onToggle:()=>s(!o)}),!o&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`flex shrink-0 items-center pr-1.5 pb-1.5 pl-2`,children:(0,Q.jsx)(rt,{value:c,onChange:l,placeholder:`Search references`})}),(0,Q.jsxs)(`div`,{role:`list`,"aria-label":`References of ${e}`,className:z(`min-h-0 pb-2.5`,a&&`flex-1 overflow-auto`),children:[p(`References tables`,u.out),p(`Dependent tables`,u.in),u.out.length+u.in.length===0&&(0,Q.jsxs)(at,{children:[`No reference matches “`,c.trim(),`”.`]})]})]})]})}var rn=[{mode:`is`,label:`Is one of line`},{mode:`isNot`,label:`Is not one of line`},{mode:`contains`,label:`Contains`},{mode:`begins`,label:`Begins`},{mode:`ends`,label:`Ends`}];function an({onSubmit:e,onClose:t,returnFocus:n}){let[r,i]=(0,Y.useState)(``),[a,o]=(0,Y.useState)(`is`),s=(0,Y.useId)();return(0,Q.jsxs)(pt,{title:`Filter multiple values`,description:`One value per line. OK writes them into the filter box as one filter.`,onOk:()=>{let n=He(a,r);t(),n&&e(n)},onClose:t,returnFocus:n,children:[(0,Q.jsx)(`textarea`,{value:r,onChange:e=>i(e.target.value),"aria-label":`One value per line`,rows:10,autoFocus:!0,spellCheck:!1,autoComplete:`off`,autoCapitalize:`off`,className:z(Ye,`h-auto min-h-[190px] resize-y py-2 font-mono leading-normal md:h-auto md:text-xs`)}),(0,Q.jsx)(`div`,{role:`radiogroup`,"aria-label":`Match`,className:`flex flex-wrap gap-x-[18px] max-md:flex-col md:gap-y-1.5`,children:rn.map(e=>(0,Q.jsx)(et,{name:s,value:e.mode,checked:a===e.mode,onChange:()=>o(e.mode),children:e.label},e.mode))})]})}function on({request:e,onSubmit:t,onClose:n,returnFocus:r}){let i=It(e.kind),[a,o]=(0,Y.useState)({op:e.first,value:``}),[s,c]=(0,Y.useState)({op:e.second,value:``}),[l,u]=(0,Y.useState)(`and`),d=(0,Y.useId)();return(0,Q.jsxs)(pt,{title:`Set filter`,description:`Two conditions joined with And or Or. OK writes them into the filter box.`,onOk:()=>{let r=ht(e.kind,a,l,s);n(),r&&t(r)},onClose:n,returnFocus:r,children:[(0,Q.jsx)(`p`,{className:`text-[13px] text-text-2 md:text-[12.5px]`,children:`Show rows where`}),(0,Q.jsx)(sn,{which:`First`,condition:a,onChange:o,choices:i,autoFocus:!0}),(0,Q.jsxs)(`div`,{role:`radiogroup`,"aria-label":`Join the two conditions`,className:`flex gap-[18px]`,children:[(0,Q.jsx)(et,{name:d,value:`and`,checked:l===`and`,onChange:()=>u(`and`),children:`And`}),(0,Q.jsx)(et,{name:d,value:`or`,checked:l===`or`,onChange:()=>u(`or`),children:`Or`})]}),(0,Q.jsx)(sn,{which:`Second`,condition:s,onChange:c,choices:i})]})}function sn({which:e,condition:t,onChange:n,choices:r,autoFocus:i}){let a=Ft(t.op);return(0,Q.jsxs)(`div`,{className:`flex gap-2 max-md:flex-col`,children:[(0,Q.jsxs)(`span`,{className:`relative flex min-w-0 md:w-[190px] md:shrink-0`,children:[(0,Q.jsx)(`select`,{value:t.op,onChange:e=>n({...t,op:e.target.value}),"aria-label":`${e} condition`,autoFocus:i&&!a,className:z(`h-11 w-full min-w-0 appearance-none rounded-md border border-border bg-surface pr-7 pl-2.5 text-[15px] text-text-primary outline-none focus:border-ring`,`md:h-[30px] md:font-mono md:text-xs`),children:r.map(e=>(0,Q.jsx)(`option`,{value:e.op,children:e.label},e.op))}),(0,Q.jsx)(p,{className:`pointer-events-none absolute top-1/2 right-2 size-3.5 -translate-y-1/2 text-text-subtle`})]}),a&&(0,Q.jsx)(Qe,{value:t.value,onChange:e=>n({...t,value:e.target.value}),"aria-label":`${e} value`,autoFocus:i,"data-autofocus":i?``:void 0,mono:t.op===`sql`||t.op===`sqlRight`})]})}function cn({open:e,onClose:t,onSubmit:n}){if(!e)return null;let r={onSubmit:t=>n(e.column,t),onClose:t,returnFocus:e.returnFocus},i=e.request;switch(i.dialog){case`condition`:return(0,Q.jsx)(on,{request:i,...r});case`lines`:return(0,Q.jsx)(an,{...r});case`values`:return(0,Q.jsx)(Nt,{column:i.column,kind:i.kind,load:i.load,...r});case`lookup`:return(0,Q.jsx)(Et,{source:i.source,kind:i.kind,...r})}}function ln(e,t,n){return`${se(e)}:${encodeURIComponent(t)}:${encodeURIComponent(n)}`}function un({target:e,dbType:t,table:n,schema:r,columns:i,tableSchema:a,filters:o,fixed:s}){let c=(0,Y.useCallback)(t=>e?ce(e,t):``,[e]),l=(0,Y.useCallback)(e=>i.find(t=>t.name===e)?.kind??`other`,[i]),u=(0,Y.useCallback)(e=>({dialog:`values`,column:e,kind:l(e),load:t=>{let a=Lt({table:n,schema:r},e,t,o,i);return R.post(c(`/grid/values`),s?.length?{...a,filters:[...s,...a.filters??[]]}:a)}}),[c,l,n,r,o,i,s]),d=(0,Y.useCallback)(n=>{let i=a.find(e=>e.name===n)?.fk;if(!i)return null;let o=ln(e,r,i.table),s=r?`&schema=${encodeURIComponent(r)}`:``;return{dialog:`lookup`,kind:l(n),source:{table:i.table,keyColumn:i.column,columns:()=>R.get(c(`/schema?table=${encodeURIComponent(i.table)}${s}`)).then(e=>Ue(e,t)),rows:e=>R.post(c(`/grid`),wt({table:i.table,schema:r},i.column,e)).then(e=>({rows:Ee(e.columns,e.rows).records,hasMore:e.hasMore})),description:oe.getState().dbLookupDescriptions[o]??null,onDescription:e=>oe.getState().setDbLookupDescription(o,e)}}},[c,l,e,t,r,a]);return(0,Y.useMemo)(()=>({chooseValues:u,lookup:d}),[u,d])}var dn=Me(W,[]);function fn(e,t,n=W){let[r,i]=(0,Y.useState)(n),[a,o]=(0,Y.useState)({}),s=(0,Y.useRef)(null),c=(0,Y.useRef)(null),l=(0,Y.useRef)(t);l.current=t;let u=(0,Y.useRef)(n),d=(0,Y.useCallback)((e,t)=>{let n=pn(e,t);n?o(n):L.error(`Could not filter the rows`,{description:t.message})},[]);return(0,Y.useEffect)(()=>{if(e.length===0)return;let t=Me(r,e),n=JSON.stringify(t);s.current??=JSON.stringify(c.current??dn),n!==s.current&&(s.current=n,o({}),l.current(t).then(e=>{e&&s.current===n&&d(t,e)}))},[r,e,d]),{filters:r,setFilters:i,errors:a,opening:(0,Y.useCallback)(e=>(c.current=Me(u.current,e),c.current),[]),openFailed:(0,Y.useCallback)(e=>{let t=c.current&&pn(c.current,e);t&&o(t)},[])}}function pn(e,t){if(!(t instanceof ae)||t.status===404||t.status===428)return null;let n=e.filters.filter(e=>e.anyOf.some(e=>e.some(e=>e.op===`rawSql`))),r=n.length>0?n:t.status===400||t.status===403?e.filters:[];return r.length>0?Object.fromEntries(r.map(e=>[e.column,t.message])):null}var mn=`detail`;function hn({tab:e,reference:t,masterRows:n,shownIn:r,narrow:i,onClose:a}){let o=(0,Y.useId)(),s=en(t);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{"aria-hidden":!0,className:`h-[5px] shrink-0 border-y border-border bg-panel`}),(0,Q.jsxs)(`section`,{"aria-labelledby":o,className:`flex min-h-[150px] shrink-0 grow-0 basis-[42%] flex-col bg-panel-2 max-md:basis-[45%]`,children:[(0,Q.jsxs)(`div`,{className:`flex h-[30px] shrink-0 items-center gap-1.5 border-b border-border-soft bg-panel px-2.5 text-xs text-text-2 max-md:h-11 max-md:text-[13px]`,children:[(0,Q.jsx)(A,{className:`size-3.5 shrink-0 text-info`,"aria-hidden":!0}),(0,Q.jsxs)(`h3`,{id:o,className:`min-w-0 truncate font-normal`,children:[(0,Q.jsx)(`b`,{className:`font-semibold text-text`,children:s.table}),` [`,s.detail,`] = master [`,s.master,`]`,n.length===0&&(0,Q.jsx)(`span`,{className:`text-text-3`,children:` · select a row in the grid above`})]}),(0,Q.jsx)(`span`,{className:`flex-1`}),(0,Q.jsx)(`button`,{type:`button`,onClick:a,"aria-label":`Close ${s.table}`,className:z(Xe,`shrink-0 max-md:min-w-11`),children:`Close`})]}),(0,Q.jsx)(`div`,{className:`relative min-h-0 flex-1`,children:(0,Q.jsx)(_n,{tab:e,reference:t,masterRows:n,shownIn:r,narrow:i},Qt(t))})]})]})}var gn={filters:[],anyColumn:[]};function _n({tab:e,reference:t,masterRows:n,shownIn:r,narrow:i}){let a=Ut(e.target),o=de(),s=(0,Y.useRef)(null),c=t.schema??``,l=c?`&schema=${encodeURIComponent(c)}`:``,u=st(e.target,`/schema?table=${encodeURIComponent(t.table)}${l}`,r),d=a.schema.length?a.schema:u.data??[],f=(0,Y.useMemo)(()=>Ue(d,e.dbType),[d,e.dbType]),p=(0,Y.useMemo)(()=>f.length?tn(t,n,e=>f.find(t=>t.name===e)?.kind??`other`):null,[t,n,f]),m=p?JSON.stringify(p):null,h=(0,Y.useRef)(p);h.current=p;let g=(0,Y.useRef)(gn),_=(0,Y.useRef)(!1),[v,y]=(0,Y.useState)(!1),b=(0,Y.useRef)(0),x=(0,Y.useCallback)(async e=>{let n=g.current,r={filters:[...e,...n.filters],anyColumn:n.anyColumn},i=++b.current,o;return _.current?o=await a.applyFilters(r):(_.current=!0,o=await a.selectTable(t.table,c,()=>r)),i===b.current&&y(o!==null),o},[a.applyFilters,a.selectTable,t.table,c]),S=(0,Y.useRef)(!1);S.current=a.tableData!==null,(0,Y.useEffect)(()=>{if(!m)return;let e=S.current;x(JSON.parse(m)).then(n=>{n&&e&&L.error(`Could not read ${t.table}`,{description:n.message})})},[m]);let{filters:C,setFilters:w,errors:ee}=fn(f,(0,Y.useCallback)(e=>{g.current=e;let t=h.current;return t?x(t):Promise.resolve(null)},[x])),[te,T]=(0,Y.useState)(null),E=un({target:e.target,dbType:e.dbType,table:t.table,schema:c,columns:f,tableSchema:d,filters:C,fixed:p??void 0}),D=(0,Y.useMemo)(()=>({filters:C,columns:f,onChange:w,errors:ee,onDialog:(e,t,n)=>T({column:e,request:t,returnFocus:n}),onChooseValues:(e,t)=>T({column:e,request:E.chooseValues(e),returnFocus:t}),onLookup:(e,t)=>{let n=E.lookup(e);n&&T({column:e,request:n,returnFocus:t})}}),[C,f,ee,w,E]),O=(0,Y.useCallback)(e=>{let t=E.lookup(e);return t?.dialog===`lookup`?{source:t.source,kind:t.kind}:null},[E]),k=(0,Y.useCallback)((e,t)=>{w(n=>e===null?Ie(n,t):H(n,e,t))},[w]),[A,j]=(0,Y.useState)({}),M=(0,Y.useCallback)(e=>{a.setSort(e)},[a.setSort]),N=(0,Y.useCallback)(n=>{e.place&&Be(e.place,{schema:t.schema,name:n})},[e.place,t.schema]),ne=(0,Y.useCallback)((n,r)=>{let i=d.find(e=>e.name===n)?.fk,a=f.find(e=>e.name===n)?.kind??`other`,o=i&&Jt(i.column,a,r[n]);i&&o&&e.place&&ze(e.place,{schema:t.schema,name:i.table},o)},[d,f,e.place,t.schema]),re=t=>{let n=Ot(t.currentTarget,t.target),r=n&&vt(t.nativeEvent,n);if(!(!r||r===`toggle-panel`||r!==`swallow`&&Tt(r)))switch(t.preventDefault(),t.stopPropagation(),r){case`refresh`:p&&a.reload();break;case`refresh-structure`:u.reload(),p&&a.reload({structure:!0});break;case`save`:e.readonly||s.current?.save();break;case`new-row`:p&&s.current?.newRow();break;case`delete-rows`:s.current?.deleteSelectedRows();break;case`undo`:s.current?.undo();break;case`redo`:s.current?.redo();break;case`clear-filters`:w(W);break;default:break}},P=a.tableData;if(u.error&&!d.length)return(0,Q.jsx)(ct,{error:u.error});if(a.error&&!P)return(0,Q.jsx)(ct,{error:a.error});if(!d.length)return(0,Q.jsx)(ct,{loading:!0});let F=!p,I=e.place&&!F&&(P?.sql||e.dbType)?()=>{e.place&&Re(e.place,P?.sql||Je({schema:t.schema,name:t.table},e.dbType))}:void 0;return(0,Q.jsxs)(`div`,{className:`absolute inset-0`,onKeyDown:re,children:[(0,Q.jsx)(Mt,{ref:s,columns:P?.columns??d.map(e=>e.name),rows:F||v||!P?[]:P.rows,schema:d,loading:!F&&(a.loading||!P),rowKey:P?.rowKey,onSaveChanges:t=>a.saveChanges(t,e.place),readOnly:e.readonly,editOnly:F,sort:a.sort,onSortChange:M,viewKey:F?`waiting`:a.viewKey,hasMore:!F&&!!P?.hasMore,onLoadMore:a.loadMore,loadingMore:a.loadingMore,fetchingAll:a.fetchingAll,columnWidths:A,onColumnWidthsChange:j,tabId:r,tabSlot:mn,rowsLabel:F?`Rows: 0`:v?void 0:a.rowCount?.text,onResetFilter:!F&&we(C)?()=>w(W):void 0,onOpenQuery:I,onOpenTable:e.place?N:void 0,place:e.place??void 0,selectedTable:t.table,selectedSchema:c,connectionName:e.name,dialect:e.dialect,filtering:o?void 0:D,lookupFor:e.target?O:void 0,onOpenReference:e.place?ne:void 0,startCellDownload:a.startCellDownload,floatCellData:i}),(0,Q.jsx)(cn,{open:te,onClose:()=>T(null),onSubmit:k})]})}function vn({filtering:e,schema:t,nameFilter:n,added:r,onRemoveAdded:i}){let[a,o]=(0,Y.useState)(!1),{filters:s,columns:c,onChange:l}=e,u=new Map(t.map(e=>[e.name,e])),d=new Set(r),f=s.multi;return(0,Q.jsxs)(`section`,{"aria-label":`Filters`,className:`flex min-h-0 flex-col`,children:[(0,Q.jsx)($e,{title:`Filters`,collapsed:a,onToggle:()=>o(e=>!e)}),!a&&(0,Q.jsxs)(`div`,{className:`grid min-h-0 content-start gap-2 overflow-auto px-2 pb-2.5`,children:[n&&(0,Q.jsx)(bn,{...n}),(0,Q.jsx)(yn,{title:(0,Q.jsx)(`span`,{className:`min-w-0 truncate text-[11.5px] text-text-3`,children:`Multi column filter`}),filter:f,name:`this filter`,onSwitch:e=>l(t=>U(t,null,!e)),onRemove:()=>l(e=>Ie(e,``)),children:(0,Q.jsx)(yt,{size:`panel`,value:f?.text??``,off:f?.off,read:e=>Ae({text:e},c),onCommit:e=>l(t=>Ie(t,e)),label:`Multi column filter`,funnel:e.onDialog&&{kind:`multi`,label:`Filter options: all columns`,onDialog:(t,n)=>e.onDialog(null,t,n)}})}),c.filter(e=>s.columns[e.name]||d.has(e.name)).map(t=>{let n=u.get(t.name),r=n?.pk?S:n?.fk?A:null,a=()=>{l(e=>H(e,t.name,``)),d.has(t.name)&&i?.(t.name)};return(0,Q.jsx)(yn,{title:(0,Q.jsxs)(Q.Fragment,{children:[r&&(0,Q.jsx)(r,{className:z(`size-3.5 shrink-0`,n?.pk?`text-warning`:`text-info`),"aria-hidden":!0}),(0,Q.jsx)(`span`,{className:z(`min-w-0 truncate text-[11.5px]`,n&&!n.nullable?`font-semibold text-text`:`text-text-3`),children:t.name})]}),filter:s.columns[t.name],name:`the ${t.name} filter`,onSwitch:e=>l(n=>U(n,t.name,!e)),onRemove:a,removable:d.has(t.name),children:(0,Q.jsx)(yt,{...kt(e,t.name,t.kind,n?.fk?.table),size:`panel`})},t.name)})]})]})}function yn({title:e,filter:t,name:n,onSwitch:r,onRemove:i,removable:a,children:o}){return(0,Q.jsxs)(`div`,{className:`grid gap-[3px]`,children:[(0,Q.jsxs)(`div`,{className:`flex h-5 min-w-0 items-center gap-[5px]`,children:[e,t&&(0,Q.jsx)(`label`,{className:`ml-auto grid size-5 shrink-0 cursor-pointer place-items-center`,title:t.off?`Enable this filter`:`Disable this filter`,children:(0,Q.jsx)(`input`,{type:`checkbox`,checked:!t.off,onChange:e=>r(e.target.checked),"aria-label":`Apply ${n}`,className:`size-[13px] cursor-pointer accent-primary`})}),(t||a)&&(0,Q.jsx)(Q.Fragment,{children:(0,Q.jsx)(`button`,{type:`button`,onClick:i,"aria-label":`Remove ${n}`,title:`Remove`,className:z(`grid size-5 shrink-0 place-items-center rounded text-text-3 can-hover:hover:bg-surface-hover can-hover:hover:text-text`,!t&&`ml-auto`),children:(0,Q.jsx)(O,{className:`size-3`})})})]}),o]})}function bn({text:e,onChange:t}){return(0,Q.jsxs)(`div`,{className:`grid gap-[3px]`,children:[(0,Q.jsx)(`div`,{className:`flex h-5 min-w-0 items-center gap-[5px]`,children:(0,Q.jsx)(`span`,{className:`min-w-0 truncate text-[11.5px] text-text-3`,children:`Column name filter`})}),(0,Q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-px`,children:[(0,Q.jsx)(`input`,{value:e,onChange:e=>t(e.target.value),onKeyDown:n=>{n.key!==`Escape`||!e||(n.preventDefault(),n.stopPropagation(),t(``))},"aria-label":`Column name filter`,spellCheck:!1,autoComplete:`off`,autoCapitalize:`off`,className:`h-[26px] w-full min-w-0 rounded-[5px] border border-border-soft bg-input px-1.5 text-[11.5px] text-text outline-none placeholder:text-text-3/70 focus:border-primary`}),e&&(0,Q.jsx)(`button`,{type:`button`,onClick:()=>t(``),"aria-label":`Clear the column name filter`,title:`Clear`,className:`grid size-5 shrink-0 place-items-center rounded text-text-3 can-hover:hover:bg-surface-hover can-hover:hover:text-text`,children:(0,Q.jsx)(O,{className:`size-3`})})]})]})}var xn={ok:`border-success/45 bg-success/10 text-success`,off:`border-dashed border-border text-text-3`,bad:`border-error/50 bg-error/10 text-error`},Sn=e=>e.refused?`, refused`:e.state===`bad`?`, not understood`:e.state===`off`?`, switched off`:``,Cn=e=>e.map(e=>`${e.column} ${e.dir===`ASC`?`↑`:`↓`}`).join(`, `),wn=`relative inline-flex h-8 shrink-0 items-center gap-1 rounded-full border border-border bg-panel-2 px-2.5 text-[12.5px] text-text-2 select-none before:absolute before:inset-x-0 before:-inset-y-[7px]`;function Tn({filtering:e,onOpen:t,sort:n,hidden:r}){let{filters:i,columns:a,errors:o,onChange:s}=e,c=a.flatMap(e=>{let t=i.columns[e.name],{state:n}=We(t,e.kind);if(!t||n===`empty`)return[];let r=n===`ok`?o?.[e.name]:void 0;return[{column:e.name,filter:t,state:r?`bad`:n,refused:r}]}),l=i.multi,u=Ae(l,a).state;l&&u!==`empty`&&c.push({column:null,filter:l,state:u});let d=n?.length?n:null;return c.length===0&&!d&&!r?.count?null:(0,Q.jsxs)(`div`,{role:`group`,"aria-label":`Filters`,className:`flex shrink-0 gap-3 overflow-x-auto border-b border-border-soft px-3 py-1.5 scrollbar-none`,children:[r&&r.count>0&&(0,Q.jsxs)(`button`,{type:`button`,onClick:r.onOpen,className:wn,children:[(0,Q.jsx)(k,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),(0,Q.jsx)(`b`,{className:`font-semibold`,children:`Columns`}),` · `,r.count,` hidden`]}),c.map(e=>{let n=e.column??`any column`,r=e.state===`bad`?ne:D;return(0,Q.jsxs)(`span`,{className:z(`inline-flex h-8 shrink-0 items-stretch rounded-full border text-[12.5px] select-none`,xn[e.state]),children:[(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>t(e.column),"aria-label":`${n}: ${e.filter.text}${Sn(e)}`,className:`relative flex min-w-0 items-center gap-1 rounded-l-full pr-1 pl-2.5 before:absolute before:inset-x-0 before:-inset-y-[7px]`,children:[(0,Q.jsx)(r,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),(0,Q.jsx)(`b`,{className:`shrink-0 font-semibold`,children:n}),(0,Q.jsx)(`span`,{className:z(`max-w-[40vw] truncate font-mono text-xs`,e.state===`off`&&`line-through`),children:e.filter.text})]}),(0,Q.jsx)(`button`,{type:`button`,title:`Remove`,"aria-label":e.column===null?`Remove the Multi column filter`:`Remove the ${e.column} filter`,onClick:()=>s(t=>e.column===null?Ie(t,``):H(t,e.column,``)),className:`relative grid w-8 shrink-0 place-items-center rounded-r-full before:absolute before:-inset-y-[7px] before:left-0 before:-right-3`,children:(0,Q.jsx)(O,{className:`size-3.5`,"aria-hidden":!0})})]},e.column??`\0multi`)}),d&&(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>t(d[0].column),"aria-label":`Sorted by ${Cn(d)}`,className:wn,children:[(0,Q.jsx)(F,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),(0,Q.jsx)(`span`,{className:`max-w-[50vw] truncate`,children:Cn(d)})]})]})}var En=e=>e.sort.length===0?O:e.dir===`DESC`?M:ee,Dn={empty:``,ok:`border-success/55 focus:border-success/55 text-success`,off:`border-dashed text-text-3 line-through`,bad:`border-error/70 focus:border-error/70 text-error`},On=()=>{};function kn({filtering:e,column:t,schema:n,menu:r,onClose:i}){let a=(0,Y.useId)(),o=t===null?null:e.columns.find(e=>e.name===t)?.kind??`other`,c=t===null?e.filters.multi:e.filters.columns[t],[l,u]=(0,Y.useState)(c?.text??``),d=t===null?void 0:n.find(e=>e.name===t),f=o===null?Ae({text:l},e.columns):We({text:l},o),p=l===(c?.text??``),m=p&&f.state===`ok`&&t!==null?e.errors?.[t]:void 0,h=m?`bad`:p&&f.state===`ok`&&c?.off?`off`:f.state,_=m?`Refused: ${m}`:f.state===`bad`?`${f.error.message} — it would not be applied`:h===`off`?`Switched off · Apply switches it on`:h===`ok`?`Understood · Apply filters the rows`:t===null?`No filter on any column`:`No filter on this column`,v=n=>{i(),e.onChange(e=>t===null?Ie(e,n):H(e,t,n))},y=()=>{f.state!==`bad`&&v(l)},b=e=>{e.key!==`Enter`||e.shiftKey||e.ctrlKey||e.metaKey||e.altKey||e.nativeEvent.isComposing||(e.preventDefault(),f.state===`bad`&&f.error.end>f.error.start&&e.currentTarget.setSelectionRange(f.error.start,f.error.end),y())},x=e=>{let t=e.clipboardData.getData(`text`);if(!t.includes(`
2
2
  `))return;e.preventDefault();let n=He(`is`,t);n&&u(n)},C=e=>{i(),e()},w=t===null||o===null?null:d?.fk&&e.onLookup?{icon:g,label:`Lookup from ${d.fk.table}`,open:()=>e.onLookup(t,On)}:e.onChooseValues&&Dt(o)?{icon:s,label:`Choose value from ${t}`,open:()=>e.onChooseValues(t,On)}:null,ee=gt(o===null?`multi`:Fe(o)).filter(e=>e!==`separator`&&e.label!==`Clear Filter`).filter(t=>`text`in t.action||!!e.onDialog),T=t!==null&&r?St(t,r.sort?.sort??[],r.onOpenTable?d?.fk?.table:null):[],E=r?.sort?T.filter(e=>e.kind===`sort`):[],k=T.find(e=>e.kind===`open-table`),j=t===null?D:d?.pk?S:d?.fk?A:re;return(0,Q.jsx)(ye,{open:!0,onClose:i,className:`popover-solid`,children:(0,Q.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":a,onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),i())},className:`flex max-h-[calc(var(--sheet-vh,100dvh)*0.85)] flex-col`,children:[(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2.5 pr-1.5 pb-1 pl-4`,children:[(0,Q.jsx)(j,{className:z(`size-5 shrink-0`,d?.pk?`text-warning`:d?.fk?`text-info`:`text-text-2`),"aria-hidden":!0}),(0,Q.jsxs)(`h2`,{id:a,className:`min-w-0 flex-1 text-[15px] font-semibold`,children:[(0,Q.jsx)(`span`,{className:`block truncate`,children:t??`Multi column filter`}),(0,Q.jsx)(`small`,{className:`block truncate text-xs font-normal text-text-3`,children:d?`${d.type}${d.nullable?``:` · NOT NULL`}${d.fk?` · → ${d.fk.table}.${d.fk.column}`:``}`:t===null?`Every column of the table reads it`:null})]}),(0,Q.jsx)(`button`,{type:`button`,onClick:i,"aria-label":`Close`,className:`grid size-11 shrink-0 place-items-center rounded-lg text-text-2 active:bg-surface-hover`,children:(0,Q.jsx)(O,{className:`size-5`})})]}),(0,Q.jsxs)(`div`,{className:`min-h-0 overflow-y-auto pb-3`,children:[(0,Q.jsx)(An,{children:`Filter`}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2 px-4`,children:[(0,Q.jsx)(`input`,{value:l,onChange:e=>u(e.target.value),onKeyDown:b,onPaste:x,placeholder:`Filter`,"aria-label":t===null?`Multi column filter`:`Filter ${t}`,"aria-invalid":h===`bad`,"aria-describedby":`${a}-status`,spellCheck:!1,autoComplete:`off`,autoCapitalize:`off`,className:z(Ye,`font-mono`,Dn[h])}),w&&(0,Q.jsx)(`button`,{type:`button`,onClick:()=>C(w.open),"aria-label":w.label,title:w.label,className:`grid size-11 shrink-0 place-items-center rounded-md border border-border text-text-2 active:bg-surface-hover`,children:(0,Q.jsx)(w.icon,{className:`size-5`})})]}),(0,Q.jsx)(`p`,{id:`${a}-status`,"aria-live":`polite`,className:z(`mt-1.5 px-4 text-[12.5px]`,h===`bad`?`text-error`:h===`ok`?`text-success`:`text-text-3`),children:_}),E.length>0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(An,{children:`Sort`}),E.map(e=>(0,Q.jsx)(jn,{icon:En(e),label:e.label,checked:e.checked,onSelect:()=>C(()=>r.sort.onChange(e.sort))},e.label))]}),t!==null&&r&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(An,{children:`Column`}),(0,Q.jsx)(jn,{icon:P,label:`Copy column name`,onSelect:()=>C(()=>r.onCopyName(t))}),r.onHide&&(0,Q.jsx)(jn,{icon:ie,label:`Hide column`,onSelect:()=>C(()=>r.onHide(t))}),k&&(0,Q.jsx)(jn,{icon:te,label:`Open ${k.table}`,onSelect:()=>C(()=>r.onOpenTable(k.table))})]}),(0,Q.jsx)(An,{children:`Filter options`}),ee.map(n=>(0,Q.jsx)(jn,{label:n.label,onSelect:()=>{let r=n.action;`text`in r?v(r.text):C(()=>e.onDialog(t,r.open,On))}},n.label))]}),(0,Q.jsxs)(`div`,{className:`flex shrink-0 gap-2 border-t border-border-soft px-3 pt-2.5`,children:[(0,Q.jsx)(pe,{type:`button`,variant:`outline`,onClick:()=>v(``),className:`h-11 flex-1 text-sm`,children:`Clear Filter`}),(0,Q.jsx)(pe,{type:`button`,onClick:y,disabled:f.state===`bad`,className:`h-11 flex-[2] text-sm`,children:`Apply`})]})]})})}function An({children:e}){return(0,Q.jsx)(`h3`,{className:`mx-4 mt-3.5 mb-1.5 text-[11px] font-semibold tracking-[0.06em] text-text-3 uppercase`,children:e})}function jn({icon:e,label:t,checked:n,onSelect:i}){return(0,Q.jsxs)(`button`,{type:`button`,onClick:i,"aria-pressed":n===void 0?void 0:n,className:`flex min-h-[52px] w-full items-center gap-3 border-b border-border-soft px-4 text-left text-[15px] select-none active:bg-surface-hover`,children:[e?(0,Q.jsx)(e,{className:`size-5 shrink-0 text-text-2`,"aria-hidden":!0}):(0,Q.jsx)(`span`,{className:`size-5 shrink-0`,"aria-hidden":!0}),(0,Q.jsx)(`span`,{className:`min-w-0 flex-1`,children:t}),n&&(0,Q.jsx)(r,{className:`size-5 shrink-0 text-primary`,"aria-hidden":!0})]})}function Mn(e,t,n){return`${e} · ${t-n} of ${t} columns shown`}function Nn({table:e,schema:t,hidden:n,onHiddenChange:r,onJump:i,onOpenTable:a,filtering:o,onOpenFilter:s,references:c,focusSearch:l,onClose:u}){let d=(0,Y.useId)(),[f,p]=(0,Y.useState)(!1),[m,h]=(0,Y.useState)(!1),[g,_]=(0,Y.useState)(!1),v=t.filter(e=>n.has(e.name)).length,y=e=>{u(),e()};return(0,Q.jsx)(ye,{open:!0,onClose:u,className:`popover-solid`,children:(0,Q.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":d,className:`flex max-h-[calc(var(--sheet-vh,100dvh)*0.85)] flex-col`,children:[(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2.5 pr-1.5 pb-1 pl-4`,children:[(0,Q.jsxs)(`h2`,{id:d,className:`min-w-0 flex-1 text-[15px] font-semibold`,children:[(0,Q.jsx)(`span`,{className:`block truncate`,children:`Columns and filters`}),(0,Q.jsx)(`small`,{className:`block truncate text-xs font-normal text-text-3`,children:Mn(e,t.length,v)})]}),(0,Q.jsx)(`button`,{type:`button`,onClick:u,"aria-label":`Close`,className:`grid size-11 shrink-0 place-items-center rounded-lg text-text-2 active:bg-surface-hover`,children:(0,Q.jsx)(O,{className:`size-5`})})]}),(0,Q.jsxs)(`div`,{className:`min-h-0 overflow-y-auto pb-2`,children:[(0,Q.jsx)(jt,{schema:t,hidden:n,onHiddenChange:r,onJump:e=>y(()=>i(e)),onOpenTable:a&&(e=>y(()=>a(e))),sheet:!0,grow:!1,collapsed:f,onCollapsedChange:p,focusSearch:l}),o&&(0,Q.jsxs)(`section`,{"aria-label":`Filters`,className:`border-t border-border-soft`,children:[(0,Q.jsx)($e,{title:`Filters`,collapsed:m,onToggle:()=>h(e=>!e)}),!m&&(0,Q.jsx)(Fn,{filtering:o,schema:t,onOpen:e=>y(()=>s(e))})]}),c&&(0,Q.jsx)(`div`,{className:`border-t border-border-soft`,children:(0,Q.jsx)(nn,{table:e,references:c.refs,open:c.open,onOpen:e=>y(()=>c.onOpen(e)),sheet:!0,grow:!1,collapsed:g,onCollapsedChange:_})})]}),(0,Q.jsx)(`div`,{className:`flex shrink-0 border-t border-border-soft px-3 pt-2.5`,children:(0,Q.jsx)(pe,{type:`button`,onClick:u,className:`h-11 flex-1 text-sm`,children:`Done`})})]})})}var Pn={empty:`text-text-3`,ok:`text-success`,off:`text-text-3 line-through`,bad:`text-error`};function Fn({filtering:e,schema:t,onOpen:n}){let{filters:r,columns:i,onChange:a,errors:o}=e,s=new Map(t.map(e=>[e.name,e]));return(0,Q.jsx)(`div`,{className:`pb-1`,children:[{column:null,filter:r.multi,state:Ae(r.multi,i).state},...i.flatMap(e=>{let t=r.columns[e.name];if(!t)return[];let{state:n}=We(t,e.kind);return[{column:e.name,filter:t,state:n===`ok`&&o?.[e.name]?`bad`:n}]})].map(e=>{let t=e.column===null?void 0:s.get(e.column),r=e.state===`bad`?ne:e.column===null?D:t?.pk?S:t?.fk?A:D,i=e.column??`Multi column filter`,o=e.filter?.text.trim()?e.filter.text:null,c=e.column===null?`the Multi column filter`:`the ${e.column} filter`;return(0,Q.jsxs)(`div`,{className:`mx-1.5 flex min-h-11 items-center rounded-lg select-none`,children:[(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>n(e.column),"aria-label":o?`${i}: ${o}`:`${i}: none — tap to add one`,className:`flex min-h-11 min-w-0 flex-1 items-center gap-2.5 rounded-lg px-2.5 text-left text-sm active:bg-surface-hover`,children:[(0,Q.jsx)(r,{className:z(`size-[18px] shrink-0`,e.state===`bad`?`text-error`:t?.pk?`text-warning`:t?.fk?`text-info`:`text-text-3`),"aria-hidden":!0}),(0,Q.jsx)(`span`,{className:z(`shrink-0`,e.column===null&&!o?`text-text-3`:`font-semibold`),children:i}),(0,Q.jsx)(`span`,{className:z(`min-w-0 truncate font-mono text-xs`,Pn[e.state]),children:o??`Tap to add`})]}),e.filter&&o&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`label`,{className:`grid size-11 shrink-0 cursor-pointer place-items-center`,title:e.filter.off?`Enable this filter`:`Disable this filter`,children:(0,Q.jsx)(`input`,{type:`checkbox`,checked:!e.filter.off,onChange:t=>a(n=>U(n,e.column,!t.target.checked)),"aria-label":`Apply ${c}`,className:`size-5 cursor-pointer accent-primary`})}),(0,Q.jsx)(`button`,{type:`button`,"aria-label":`Remove ${c}`,title:`Remove`,onClick:()=>a(t=>e.column===null?Ie(t,``):H(t,e.column,``)),className:`grid size-11 shrink-0 place-items-center rounded-lg text-text-3 active:bg-surface-hover`,children:(0,Q.jsx)(O,{className:`size-4`})})]})]},e.column??`\0multi`)})})}var In=`ppm-db-fetch-all-dont-ask`;function Ln(){try{return localStorage.getItem(In)!==`1`}catch{return!0}}function Rn(){try{localStorage.setItem(In,`1`)}catch{}}function zn({onFetch:e,onClose:t}){let[n,r]=(0,Y.useState)(!1),i=(0,Y.useId)();return(0,Q.jsxs)(pt,{title:`Fetch All Rows`,okLabel:`Fetch All`,description:`Load every remaining row of the table into the grid`,onOk:()=>{n&&Rn(),t(),e()},onClose:t,children:[(0,Q.jsx)(`p`,{className:`text-sm text-text-2`,children:`This will load all remaining rows into memory. For large tables, this may consume a significant amount of memory and could affect application performance.`}),(0,Q.jsxs)(`label`,{htmlFor:i,className:`flex min-h-11 cursor-pointer items-center gap-2.5 text-sm select-none md:min-h-0`,children:[(0,Q.jsx)(`input`,{id:i,type:`checkbox`,checked:n,onChange:e=>r(e.target.checked),className:`size-4 accent-primary max-md:size-5`}),(0,Q.jsx)(`b`,{className:`font-semibold`,children:`Don't ask again`})]})]})}var Bn=[1,5,10,15,30,60],Vn=10;function Hn(e,t){return[{label:`Refresh with structure`,shortcut:G(`Mod+F5`),onSelect:e},t.running?{label:`Stop auto refresh`,shortcut:G(`Mod+Shift+R`),onSelect:t.stop}:{label:`Start auto refresh`,shortcut:G(`Mod+Shift+R`),onSelect:()=>t.start()},{label:`Refresh every 1 second`,onSelect:()=>t.start(1)},...Bn.slice(1).map(e=>({label:`...${e} seconds`,onSelect:()=>t.start(e)}))]}var Un=e=>e.running?`Refresh (every ${e.every}s)`:`Refresh`;function Wn(e,t){let[n,r]=(0,Y.useState)(!1),[i,a]=(0,Y.useState)(Vn),o=(0,Y.useRef)(e);o.current=e;let s=(0,Y.useRef)(t);return s.current=t,(0,Y.useEffect)(()=>{if(!n)return;let e=!1,t=!1,a=setInterval(()=>{e||document.hidden||!s.current()||(e=!0,o.current().then(n=>{e=!1,!(!n||t)&&(r(!1),L.error(`Auto refresh stopped`,{description:n.message}))}))},i*1e3);return()=>{t=!0,clearInterval(a)}},[n,i]),{running:n,every:i,start:(0,Y.useCallback)(e=>{e!==void 0&&a(e),r(!0)},[]),stop:(0,Y.useCallback)(()=>r(!1),[])}}function Gn({onRefresh:e,onRefreshWithStructure:t,auto:n,busy:r,disabled:i,form:a}){let o=Un(n);return(0,Q.jsxs)(`span`,{className:`flex shrink-0 items-center`,children:[(0,Q.jsxs)(`button`,{type:`button`,onClick:e,disabled:i,"aria-label":o,title:`${a?`Data form`:`Data grid`}: Refresh (F5 | ${G(`Mod+R`)})`,className:z(K,`rounded-r-none pr-1`,r&&`[&>svg]:animate-spin`),children:[(0,Q.jsx)(E,{className:`size-4 shrink-0`}),(0,Q.jsx)(`span`,{className:`@max-[900px]:hidden`,children:o})]}),(0,Q.jsxs)(_e,{children:[(0,Q.jsx)(ge,{asChild:!0,children:(0,Q.jsx)(`button`,{type:`button`,disabled:i,"aria-label":`Refresh options`,title:`Refresh options`,className:z(K,`rounded-l-none px-0.5`),children:(0,Q.jsx)(p,{className:`size-3 shrink-0`})})}),(0,Q.jsx)(V,{align:`start`,className:`min-w-60`,children:Hn(t,n).map(e=>(0,Q.jsxs)(me,{onSelect:e.onSelect,children:[e.label,e.shortcut&&(0,Q.jsx)(ve,{className:`tracking-normal`,children:e.shortcut})]},e.label))})]})]})}function Kn(e,t){let n=e?.pending??0;return{count:n,disabled:n===0||t,title:t?`The connection is read-only`:`Table data: Save (${G(`Mod+S`)})`}}function qn(e){let t=!!e.form?.on,n=!!e.edit?.canChangeRows&&!e.readonly&&!t;return{revert:!!e.edit&&(e.edit.pending>0||e.edit.newRows>0),newRow:n,deleteRows:n&&e.edit.selectedRows>0,fetchAll:e.hasMore&&!t}}var Jn=[{to:`first`,label:`First`,icon:N,combo:`Mod+Home`},{to:`previous`,label:`Previous`,icon:c,combo:`Mod+↑`},{to:`next`,label:`Next`,icon:u,combo:`Mod+↓`},{to:`last`,label:`Last`,icon:w,combo:`Mod+End`}];function Yn(e,t){let n=e?.form;return n?t===`first`||t===`previous`?n.atFirst:n.atLast:!0}var Xn=e=>e>9?`9+`:String(e),Zn=({n:e,className:t})=>(0,Q.jsx)(`span`,{"aria-hidden":!0,className:z(`min-w-4 rounded-full bg-warning/20 px-1 text-center font-mono text-[10.5px] leading-4 font-semibold text-warning`,t),children:Xn(e)}),$=`@max-[900px]:hidden`,Qn=`@max-[1200px]:hidden`;function $n({actions:e}){let t=Kn(e.edit,e.readonly),n=qn(e);return(0,Q.jsxs)(q,{label:e.table,children:[(0,Q.jsx)(J,{icon:i,label:`Structure`,title:`Open the structure of ${e.table} in its own tab`,onClick:e.onOpenStructure,opensTab:!0,disabled:!e.canOpenTabs,labelClassName:$,arrowClassName:Qn}),(0,Q.jsx)(J,{icon:b,label:`SQL`,title:`Open the SQL of ${e.table} in its own tab`,onClick:e.onOpenSql,opensTab:!0,disabled:!e.canOpenTabs,labelClassName:$,arrowClassName:Qn}),(0,Q.jsx)(Gn,{onRefresh:e.onRefresh,onRefreshWithStructure:e.onRefreshWithStructure,auto:e.auto,busy:e.busy,disabled:e.idle,form:e.form?.on}),e.form?.on&&Jn.map(({to:t,label:n,icon:r,combo:i})=>(0,Q.jsx)(J,{icon:r,label:n,title:`Data form: ${n} (${G(i)})`,onClick:()=>e.form.onNavigate(t),disabled:Yn(e.edit,t),labelClassName:$},t)),(0,Q.jsxs)(`button`,{type:`button`,onClick:e.onSave,disabled:t.disabled,title:t.title,"aria-label":t.count?`Save ${t.count} changed ${t.count===1?`row`:`rows`}`:`Save`,className:z(K,`disabled:pointer-events-auto disabled:cursor-default`),children:[(0,Q.jsx)(I,{className:`size-4 shrink-0`}),(0,Q.jsx)(`span`,{className:$,children:`Save`}),t.count>0&&(0,Q.jsx)(Zn,{n:t.count})]}),n.revert&&(0,Q.jsx)(J,{icon:v,label:`Revert all`,title:`Data grid: Revert all`,onClick:e.onRevert,labelClassName:$}),n.newRow&&(0,Q.jsx)(J,{icon:C,label:`New row`,title:`Data grid: New row (Insert)`,onClick:e.onNewRow,labelClassName:$}),n.deleteRows&&(0,Q.jsx)(J,{icon:l,label:`Delete row(s)`,title:`Data grid: Delete row(s) (${G(`Mod+Delete`)})`,onClick:e.onDeleteRows,labelClassName:$}),e.form&&(e.form.on?(0,Q.jsx)(J,{icon:h,label:`Switch to table`,title:`Data grid: Switch to table (F4)`,onClick:e.form.onToggle,labelClassName:$}):(0,Q.jsx)(J,{icon:_,label:`Switch to form`,title:`Data grid: Switch to form (F4)`,onClick:e.form.onToggle,disabled:e.idle,labelClassName:$})),e.export&&(0,Q.jsx)(Gt,{exporter:e.export,labelClassName:Qn}),n.fetchAll&&(0,Q.jsx)(J,{icon:x,label:`Fetch all`,title:`Data grid: Fetch all`,onClick:e.onFetchAll,labelClassName:Qn}),e.panel&&(0,Q.jsxs)(`button`,{type:`button`,onClick:e.panel.onToggle,"aria-pressed":e.panel.open,title:`View columns (${G(`Mod+L`)})`,"aria-label":`View columns`,className:z(K,e.panel.open&&`bg-accent-wash text-primary can-hover:hover:bg-accent-wash can-hover:hover:text-primary`),children:[(0,Q.jsx)(k,{className:`size-4 shrink-0`}),(0,Q.jsx)(`span`,{className:Qn,children:`View columns`})]}),e.cellData&&!e.form?.on&&(0,Q.jsxs)(`button`,{type:`button`,onClick:e.cellData.onToggle,"aria-pressed":e.cellData.open,title:`Data grid: Toggle cell data view`,"aria-label":`Cell Data`,className:z(K,e.cellData.open&&`bg-accent-wash text-primary can-hover:hover:bg-accent-wash can-hover:hover:text-primary`),children:[(0,Q.jsx)(m,{className:`size-4 shrink-0`}),(0,Q.jsx)(`span`,{className:Qn,children:`Cell Data`})]}),e.onToggleReadonly&&(0,Q.jsx)(er,{readonly:e.readonly,onToggle:e.onToggleReadonly})]})}function er({readonly:e,onToggle:t}){return(0,Q.jsxs)(`button`,{type:`button`,onClick:t,"aria-pressed":!e,"aria-label":e?`Read-only: allow writes`:`Writes allowed: make read-only`,title:e?`Read-only — click to allow writes`:`WRITE mode — click to make read-only`,className:z(K,`ml-auto`,!e&&`bg-destructive/15 text-destructive can-hover:hover:bg-destructive/20 can-hover:hover:text-destructive`),children:[e?(0,Q.jsx)(a,{className:`size-4 shrink-0`}):(0,Q.jsx)(f,{className:`size-4 shrink-0`}),(0,Q.jsx)(`span`,{className:z($,!e&&`font-medium`),children:e?`Read-only`:`WRITE`})]})}function tr({actions:e}){let[t,n]=(0,Y.useState)(!1),[r,l]=(0,Y.useState)(!1),d=()=>{n(!1),l(!1)},p=qn(e),[h,g]=Hn(e.onRefreshWithStructure,e.auto),S=[{label:`Structure`,icon:i,onSelect:e.onOpenStructure,disabled:!e.canOpenTabs},{label:`SQL`,icon:b,onSelect:e.onOpenSql,disabled:!e.canOpenTabs},`separator`,{label:`Refresh`,icon:E,onSelect:e.onRefresh,disabled:e.idle},{label:h.label,icon:E,onSelect:h.onSelect,disabled:e.idle},{label:g.label,icon:o,onSelect:g.onSelect,disabled:e.idle,hint:e.auto.running?`every ${e.auto.every}s`:void 0},...e.form?[{label:`Switch to form`,icon:_,onSelect:e.form.onToggle,disabled:!e.edit}]:[],...e.cellData?[{label:`Show cell data`,icon:m,onSelect:e.cellData.onToggle,disabled:!e.edit}]:[],...p.fetchAll?[{label:`Fetch all rows`,icon:x,onSelect:e.onFetchAll}]:[],...e.onCountExactly?[{label:`Count every row`,icon:y,onSelect:e.onCountExactly}]:[],...e.export?[{label:`Export`,icon:T,onSelect:()=>l(!0),sub:!0,disabled:!!e.export.unavailable}]:[],`separator`,{label:`Undo`,icon:v,onSelect:e.onUndo,disabled:!e.edit?.canUndo},{label:`Redo`,icon:j,onSelect:e.onRedo,disabled:!e.edit?.canRedo},{label:`Revert all changes`,icon:v,onSelect:e.onRevert,disabled:!p.revert},...e.onToggleReadonly?[e.readonly?{label:`Allow writes`,icon:f,onSelect:e.onToggleReadonly,hint:`Read-only now`}:{label:`Make read-only`,icon:a,onSelect:e.onToggleReadonly,hint:`Writes allowed now`}]:[]];return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`button`,{type:`button`,onClick:()=>n(!0),"aria-haspopup":`menu`,"aria-expanded":t,"aria-label":`Table actions`,className:`grid size-11 shrink-0 place-items-center rounded-md text-text-2 active:bg-surface-hover`,children:(0,Q.jsx)(s,{className:`size-5`})}),(0,Q.jsx)(ye,{open:t,onClose:d,children:(0,Q.jsx)(`div`,{role:`menu`,"aria-label":r?`Export`:`${e.table}: table actions`,className:`flex max-h-[60vh] flex-col gap-0.5 overflow-y-auto px-2 pb-2`,children:r?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(nr,{onClick:()=>l(!1),children:[(0,Q.jsx)(c,{className:`size-5 text-text-subtle`,"aria-hidden":!0}),(0,Q.jsx)(`span`,{className:`flex-1`,children:`Back`})]}),(0,Q.jsx)(`div`,{role:`separator`,className:`my-1 h-px bg-border`}),e.export?.run&&dt.map(t=>(0,Q.jsxs)(nr,{disabled:e.export.busy,onClick:()=>{d(),e.export.run?.(t.id)},children:[(0,Q.jsx)(`span`,{className:`size-5`,"aria-hidden":!0}),(0,Q.jsx)(`span`,{className:`flex-1`,children:t.label})]},t.id))]}):S.map((e,t)=>{if(e===`separator`)return(0,Q.jsx)(`div`,{role:`separator`,className:`my-1 h-px bg-border`},`sep-${t}`);let n=e.icon;return(0,Q.jsxs)(nr,{disabled:e.disabled,onClick:()=>{if(e.sub)return e.onSelect();d(),e.onSelect()},children:[(0,Q.jsx)(n,{className:`size-5 text-text-subtle`,"aria-hidden":!0}),(0,Q.jsx)(`span`,{className:`flex-1`,children:e.label}),e.hint&&(0,Q.jsx)(`span`,{className:`text-xs text-text-subtle`,children:e.hint}),e.sub&&(0,Q.jsx)(u,{className:`size-4 text-text-subtle`,"aria-hidden":!0})]},e.label)})})})]})}function nr({children:e,onClick:t,disabled:n}){return(0,Q.jsx)(`button`,{type:`button`,role:`menuitem`,disabled:n,onClick:t,className:`flex min-h-11 w-full items-center gap-3 rounded-lg px-3 text-left text-sm select-none active:bg-accent disabled:opacity-50`,children:e})}function rr({actions:e,onOpenPanel:t}){let n=Kn(e.edit,e.readonly),r=qn(e);return!r.newRow&&!t&&e.readonly?null:(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-t border-border bg-panel px-2.5 py-2`,children:[r.newRow&&(0,Q.jsx)(`button`,{type:`button`,onClick:e.onNewRow,"aria-label":`New row`,className:`grid size-11 shrink-0 place-items-center rounded-[10px] border border-border text-text-2 active:bg-surface-hover`,children:(0,Q.jsx)(C,{className:`size-5`})}),t&&(0,Q.jsxs)(`button`,{type:`button`,onClick:t,className:`flex h-11 shrink-0 items-center gap-2 rounded-[10px] border border-border px-3.5 text-sm text-text-2 active:bg-surface-hover`,children:[(0,Q.jsx)(D,{className:`size-4`,"aria-hidden":!0}),`Filters`]}),(0,Q.jsxs)(`button`,{type:`button`,onClick:e.onSave,disabled:n.disabled,"aria-label":n.count?`Save ${n.count} changed ${n.count===1?`row`:`rows`}`:e.readonly?`Save: the connection is read-only`:`Save`,className:`flex h-11 min-w-0 flex-1 items-center justify-center gap-2 rounded-[10px] bg-primary px-3.5 text-sm font-medium text-primary-foreground disabled:opacity-45`,children:[(0,Q.jsx)(I,{className:`size-4`,"aria-hidden":!0}),`Save`,n.count>0&&(0,Q.jsx)(`span`,{"aria-hidden":!0,className:`rounded-full bg-white/20 px-1.5 font-mono text-xs`,children:Xn(n.count)})]})]})}function ir({metadata:e,tabId:t}){let n=ot(e,t);return n.missing?(0,Q.jsx)(ct,{empty:`This connection no longer exists.`}):(0,Q.jsx)(sr,{tab:n,table:typeof e?.tableName==`string`?e.tableName:``,schemaName:typeof e?.schemaName==`string`?e.schemaName:``,objectKind:e?.objectKind,color:n.conn?.color??e?.connectionColor,tabId:t})}var ar=e=>le.getState().getPanelForTab(e)?.tabs.find(t=>t.id===e)?.metadata;function or(e){if(!e?.isConnected||e.ownerDocument.defaultView?.getComputedStyle(e).visibility===`hidden`)return!1;let t=e.getBoundingClientRect();return t.width>0&&t.height>0}function sr({tab:e,table:t,schemaName:n,objectKind:r,color:i,header:a=!0,tabId:o,shownIn:s=o}){let c=Ut(e.target),l=de(),u=(0,Y.useRef)(null),d=(0,Y.useRef)(null),f=c.tableData;(0,Y.useEffect)(()=>{if(!s||!c.rowCount)return;let{file:e}=Ze.getState();return e(s,{rowCount:c.rowCount,onCountExactly:c.countExactly}),()=>e(s,null)},[s,c.rowCount,c.countExactly]);let p=(0,Y.useMemo)(()=>Ue(c.schema,e.dbType),[c.schema,e.dbType]),[m]=(0,Y.useState)(()=>o?Te(ar(o)):W),{filters:h,setFilters:g,errors:_,opening:v,openFailed:y}=fn(p,c.applyFilters,m),b=(0,Y.useRef)(!1);(0,Y.useEffect)(()=>{if(b.current||!e.target||!t||e.missing||we(m)&&!e.dbType)return;b.current=!0;let r=e.dbType;c.selectTable(t,n,we(m)?e=>v(Ue(e,r)):void 0).then(e=>{e&&y(e)})},[e.target,e.missing,e.dbType,t,n]),(0,Y.useEffect)(()=>{if(!o)return;let e=ar(o),t=Ce(e,p.length>0?ke(h,p):h);JSON.stringify(t.filters)!==JSON.stringify(e?.filters)&&ue.getState().updateTab(o,{metadata:t})},[o,h,p]);let[x,S]=(0,Y.useState)(()=>o?Le(ar(o)):Ve);(0,Y.useEffect)(()=>{if(!o)return;let e=ar(o),t=c.schema.length?new Set(c.schema.map(e=>e.name)):null,n=Ne(e,t?{...x,hidden:x.hidden.filter(e=>t.has(e)),columnWidths:Object.fromEntries(Object.entries(x.columnWidths).filter(([e])=>t.has(e)))}:x);JSON.stringify(n.gridView)!==JSON.stringify(e?.gridView)&&ue.getState().updateTab(o,{metadata:n})},[o,x,c.schema]);let C=(0,Y.useMemo)(()=>new Set(x.hidden),[x.hidden]),w=(0,Y.useMemo)(()=>c.schema.filter(e=>C.has(e.name)).length,[c.schema,C]),ee=(0,Y.useCallback)(e=>S(t=>({...t,hidden:[...e]})),[]),te=(0,Y.useCallback)(e=>S(t=>t.hidden.includes(e)?t:{...t,hidden:[...t.hidden,e]}),[]),T=(0,Y.useCallback)(e=>S(t=>{let n=e.filter(e=>!t.hidden.includes(e));return n.length?{...t,hidden:[...t.hidden,...n]}:t}),[]),E=(0,Y.useCallback)(e=>S(t=>({...t,columnWidths:e})),[]),D=(0,Y.useCallback)(e=>S(t=>({...t,panelWidth:e})),[]),O=mt(u,860),[k,A]=(0,Y.useState)(null),j=k??!O,M=!l&&c.schema.length>0&&!c.driverMissing,N=(0,Y.useCallback)(()=>A(!j),[j]),ne=(0,Y.useCallback)(()=>{A(!1),d.current?.focus()},[]),[re,P]=(0,Y.useState)(null),F=f?re:null,I=x.form&&!l,ie=(0,Y.useCallback)(e=>{S(t=>t.form===(e===`form`)?t:{...t,form:e===`form`})},[]),ae=(0,Y.useCallback)(()=>{l?d.current?.openRowForm():S(e=>({...e,form:!e.form}))},[l]),[oe,z]=(0,Y.useState)(``),[pe,me]=(0,Y.useState)([]),he=(0,Y.useCallback)(e=>me(t=>t.filter(t=>t!==e)),[]),[ge,V]=(0,Y.useState)(null),[_e,ve]=(0,Y.useState)(!1),ye=(0,Y.useCallback)(()=>{if(l){V({kind:`columns`,find:!0});return}A(!0),ve(!0)},[l]),be=(0,Y.useCallback)(()=>ve(!1),[]),[xe,De]=(0,Y.useState)(null),U=un({target:e.target,dbType:e.dbType,table:c.selectedTable??t,schema:c.selectedSchema,columns:p,tableSchema:c.schema,filters:h}),Oe=(0,Y.useMemo)(()=>({filters:h,columns:p,onChange:g,errors:_,onDialog:(e,t,n)=>De({column:e,request:t,returnFocus:n}),onChooseValues:(e,t)=>De({column:e,request:U.chooseValues(e),returnFocus:t}),onLookup:(e,t)=>{let n=U.lookup(e);n&&De({column:e,request:n,returnFocus:t})},onColumnSheet:e=>V({kind:`filter`,column:e})}),[h,p,_,g,U]),Ae=(0,Y.useCallback)(e=>{let t=U.lookup(e);return t?.dialog===`lookup`?{source:t.source,kind:t.kind}:null},[U]),Me=(0,Y.useCallback)((e,t)=>{g(n=>e===null?Ie(n,t):H(n,e,t))},[g]),Fe=p.length>0&&!c.driverMissing,He=(0,Y.useCallback)((e,t)=>{let n=p.find(t=>t.name===e)?.kind;!n||!Dt(n)||t===void 0||xt(t)||g(r=>H(r,e,Pt(n,t)))},[p,g]),[We,G]=(0,Y.useState)(null),Ye=(0,Y.useCallback)(e=>{me(t=>t.includes(e)?t:[...t,e]),A(!0),G(e)},[]);(0,Y.useEffect)(()=>{We&&(G(null),[...u.current?.querySelectorAll(`[data-table-panel] input`)??[]].find(e=>e.getAttribute(`aria-label`)===`Filter ${We}`)?.focus())},[We]);let Xe={schema:n||null,name:t,...r?{kind:r}:{}},Qe=()=>{e.place&&je(e.place,Xe)},$e=()=>{e.place&&Pe(e.place,{schema:Xe.schema,name:t,kind:r??`table`})},et=(0,Y.useCallback)(t=>{e.place&&Be(e.place,{schema:n||null,name:t})},[e.place,n]),tt=e.place&&(f?.sql||e.dbType)?()=>{e.place&&Re(e.place,f?.sql||Je({schema:Xe.schema,name:t},e.dbType))}:void 0,nt=e.place&&(r??`table`)===`table`?t=>{e.place&&Re(e.place,t)}:void 0,rt=(0,Y.useRef)(new Map),it=(0,Y.useCallback)(async(t,n)=>{let r=c.schema.find(e=>e.name===t)?.fk,i=e.target;if(!r||!i)throw Error(`${t} refers to no table`);let a=c.selectedSchema,o=a?`&schema=${encodeURIComponent(a)}`:``,s=`${se(i)}\u0000${a}\u0000${r.table}`,l=rt.current.get(s);l||(l=R.get(ce(i,`/schema?table=${encodeURIComponent(r.table)}${o}`)),rt.current.set(s,l),l.catch(()=>rt.current.delete(s)));let u=await l,d=u.filter(e=>e.name!==r.column),f=Ue(u,e.dbType).find(e=>e.name===r.column)?.kind??`other`,p=qt(r.column,f,[n[t]]);if(!p)return{columns:d,row:null};let m={table:r.table,...a?{schema:a}:{},filters:[p.group],limit:1},h=await R.post(ce(i,`/grid`),m);return{columns:d,row:Ee(h.columns,h.rows).records[0]??null}},[c.schema,c.selectedSchema,e.target,e.dbType]),at=(0,Y.useCallback)((t,r)=>{let i=c.schema.find(e=>e.name===t)?.fk,a=p.find(e=>e.name===t)?.kind??`other`,o=i&&Jt(i.column,a,r[t]);i&&o&&e.place&&ze(e.place,{schema:n||null,name:i.table},o)},[c.schema,e.place,p,n]),ot=st(e.target,t?`/structure?table=${encodeURIComponent(t)}${n?`&schema=${encodeURIComponent(n)}`:``}`:null,s),K=(0,Y.useMemo)(()=>{let e=ot.data?Xt(ot.data):null;return Zt(e)?e:null},[ot.data]),[q,J]=(0,Y.useState)(null),[ut,dt]=(0,Y.useState)([]),ft=(0,Y.useCallback)(e=>{if(!q||e&&Qt(e)===Qt(q)){q||J(e);return}let t=s?Ke(s,mn):0;if(t>0){L.info(`Save or discard the changes in ${q.table} first`,{description:`${t.toLocaleString()} changed row${t===1?``:`s`} there would be lost.`});return}J(e)},[q,s]),pt=(0,Y.useCallback)(()=>{e.conn&&Se(e.conn.id,!e.readonly).catch(e=>L.error(`Could not change read-only`,{description:e.message}))},[e.conn,e.readonly]),ht=(0,Y.useCallback)(e=>{fe(e).then(e=>{e?L.success(`Column name copied`):L.error(`Could not copy the column name`)})},[]),gt=(0,Y.useCallback)(e=>{if(C.has(e)){L.info(`${e} is hidden in the grid: tick it in Columns to show it`);return}d.current?.scrollToColumn(e)},[C]),_t=(0,Y.useCallback)(e=>{c.setSort(e)},[c.setSort]),yt=c.loading||c.loadingMore||c.fetchingAll!==null,St=Wn(c.refreshQuietly,()=>!yt&&or(u.current)&&!u.current?.ownerDocument.activeElement?.closest(`.gdg-clip-region, [data-cell-editor]`)),Ct=(0,Y.useCallback)(()=>{c.reload({keepPlace:I})},[c.reload,I]),wt=(0,Y.useCallback)(()=>{rt.current.clear(),c.reload({structure:!0,keepPlace:I})},[c.reload,I]),[Et,kt]=(0,Y.useState)(!1),jt=(0,Y.useRef)(null),Nt=(0,Y.useCallback)(e=>{let t=jt.current;jt.current=null,t?.(e)},[]),Ft=(0,Y.useCallback)(()=>c.fetchAll().then(e=>(e&&L.success(`All ${e.rows.length.toLocaleString()} rows loaded`),!!e)),[c.fetchAll]),It=(0,Y.useCallback)(()=>Ln()?(Nt(!1),kt(!0),new Promise(e=>{jt.current=e})):Ft(),[Ft,Nt]),Lt=B(e.target,e.name),X=(0,Y.useMemo)(()=>f?f.columns.filter(e=>!C.has(e)):[],[f,C]),Rt=(0,Y.useCallback)(e=>c.startExport(e,X),[c.startExport,X]),zt=(0,Y.useMemo)(()=>{let r=f?.sql;if(l||!f||!r||!e.target)return;let i={target:e.target,schema:n||null},a=X.length<f.columns.length?X:void 0;return()=>{qe(Ge(i,t,r,a))}},[l,f,e.target,n,X,t]),Bt=Wt(Rt,t,X.length?void 0:`Every column is hidden`,zt),Z={table:t,canOpenTabs:!!e.place,onOpenStructure:Qe,onOpenSql:$e,onRefresh:Ct,onRefreshWithStructure:wt,auto:St,busy:yt,idle:!c.selectedTable,edit:F,readonly:e.readonly,onSave:()=>d.current?.save(),onRevert:()=>d.current?.revert(),onNewRow:()=>d.current?.newRow(),onDeleteRows:()=>d.current?.deleteSelectedRows(),onUndo:()=>d.current?.undo(),onRedo:()=>d.current?.redo(),export:f?Bt:void 0,hasMore:!!f?.hasMore&&c.fetchingAll===null,onFetchAll:It,panel:M?{open:j,onToggle:N}:void 0,form:f?{on:I,onToggle:ae,onNavigate:e=>d.current?.formNavigate(e)}:void 0,cellData:f?{open:F?.cellData??!1,onToggle:()=>d.current?.toggleCellData()}:void 0,onToggleReadonly:e.conn?pt:void 0,onCountExactly:c.rowCount?.canCountExactly?c.countExactly:void 0},Vt=O,Ht=M&&j&&Vt,Gt=le(e=>!!s&&e.panels[e.focusedPanelId]?.activeTabId===s),Kt=t=>{let n=qn(Z);switch(t){case`refresh`:Z.idle||Ct();break;case`refresh-structure`:Z.idle||wt();break;case`toggle-auto-refresh`:Z.idle||(St.running?St.stop():St.start());break;case`save`:!e.readonly&&(F?.pending??0)>0&&Z.onSave();break;case`new-row`:n.newRow&&Z.onNewRow();break;case`delete-rows`:n.deleteRows&&Z.onDeleteRows();break;case`undo`:Z.onUndo();break;case`redo`:Z.onRedo();break;case`revert-rows`:break;case`toggle-panel`:l?V(e=>e?null:{kind:`columns`}):M&&N();break;case`clear-filters`:g(W);break;case`toggle-form`:Z.form?.onToggle();break;case`export-advanced`:Bt.unavailable||Bt.advanced?.();break}},Yt=e=>{let t=Ot(e.currentTarget,e.target);if(!t)return;if(e.key===`Escape`&&Ht&&t!==`cell-editor`&&!e.defaultPrevented){e.preventDefault(),ne();return}let n=vt(e.nativeEvent,t);!n||n!==`swallow`&&Tt(n)||n===`export-advanced`&&!Bt.advanced||(e.preventDefault(),e.stopPropagation(),n!==`swallow`&&Kt(n))},$t=e=>{let t=At(e.target);!Ht||!t||!e.currentTarget.contains(t)||t.closest(`[data-table-panel]`)||A(!1)},en={sort:{sort:c.sort,onChange:_t},onCopyName:ht,onHide:te,onOpenTable:e.place?et:void 0};return(0,Q.jsxs)(`div`,{ref:u,className:`@container flex h-full w-full flex-col overflow-hidden`,onKeyDown:Yt,children:[a&&(0,Q.jsx)(lt,{title:t,subtitle:[Lt,n,c.rowCount?.text].filter(Boolean).join(` · `),color:i,children:l&&(0,Q.jsx)(tr,{actions:Z})}),!a&&l&&(0,Q.jsxs)(`div`,{className:`flex h-11 shrink-0 items-center gap-1 border-b border-border-soft pr-1 pl-3`,children:[(0,Q.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-xs text-text-subtle`,children:c.rowCount?.text}),(0,Q.jsx)(tr,{actions:Z})]}),l&&Fe&&(0,Q.jsx)(Tn,{filtering:Oe,onOpen:e=>V({kind:`filter`,column:e}),sort:c.sort,hidden:{count:w,onOpen:()=>V({kind:`columns`})}}),!l&&(0,Q.jsx)($n,{actions:Z}),(0,Q.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 overflow-hidden`,onPointerDownCapture:$t,children:[M&&j&&(0,Q.jsx)(bt,{width:x.panelWidth,onWidthChange:D,floating:Vt,onClose:ne,children:(0,Q.jsx)(cr,{schema:c.schema,hidden:C,onHiddenChange:ee,onJump:gt,findColumn:_e?be:void 0,onOpenTable:e.place?et:void 0,selected:F?.selectedColumns,filtering:Fe?Oe:void 0,form:I?{text:oe,onChange:z}:void 0,added:pe,onRemoveAdded:he,references:K?{table:t,refs:K,open:q,onOpen:ft}:void 0})}),(0,Q.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:[(0,Q.jsx)(`div`,{className:`relative min-h-0 flex-1 overflow-hidden`,children:c.driverMissing?(0,Q.jsx)(ct,{driver:c.driverMissing}):f?(0,Q.jsx)(Mt,{ref:d,columns:f.columns,rows:f.rows,schema:c.schema,loading:c.loading,rowKey:f.rowKey,onSaveChanges:t=>c.saveChanges(t,e.place),readOnly:e.readonly,sort:c.sort,onSortChange:_t,viewKey:c.viewKey,hasMore:f.hasMore,onLoadMore:c.loadMore,loadingMore:c.loadingMore,fetchingAll:c.fetchingAll,hiddenColumns:C,onShowAllColumns:()=>ee(new Set),onHideColumns:T,onFindColumn:(M||l)&&!I?ye:void 0,columnWidths:x.columnWidths,onColumnWidthsChange:E,onEditStateChange:P,tabId:s,sidePanel:M?{open:j,onToggle:N}:void 0,onResetFilter:we(h)?()=>g(W):void 0,onOpenQuery:tt,onOpenGeneratedSql:nt,exporter:Bt,startCellDownload:c.startCellDownload,focusOnVisible:Gt,onOpenTable:e.place?et:void 0,place:e.place??void 0,selectedTable:c.selectedTable,selectedSchema:c.selectedSchema,connectionName:e.name,dialect:e.dialect,filtering:Fe?Oe:void 0,lookupFor:e.target?Ae:void 0,view:I?`form`:`table`,onViewChange:ie,formNameFilter:oe,onFormNameFilterChange:z,rowCount:c.rowCount,onFetchAll:It,loadReference:e.target?it:void 0,onOpenReference:e.place?at:void 0,onFilterValue:Fe?He:void 0,onAddToFilter:Fe&&M?Ye:void 0,onRefresh:Ct,floatCellData:O,onSelectedRowsChange:q?dt:void 0,rowsLabel:q?c.rowCount?.text:void 0}):(0,Q.jsx)(ct,{loading:c.loading||!c.error,error:c.error})}),q&&f&&!c.driverMissing&&(0,Q.jsx)(hn,{tab:e,reference:q,masterRows:ut,shownIn:s,narrow:O,onClose:()=>ft(null)})]})]}),l&&f&&(0,Q.jsx)(rr,{actions:Z,onOpenPanel:c.schema.length?()=>V({kind:`columns`}):void 0}),l&&ge?.kind===`filter`&&Fe&&(0,Q.jsx)(kn,{filtering:Oe,column:ge.column,schema:c.schema,menu:en,onClose:()=>V(null)}),l&&ge?.kind===`columns`&&(0,Q.jsx)(Nn,{table:t,schema:c.schema,hidden:C,onHiddenChange:ee,onJump:gt,onOpenTable:e.place?et:void 0,filtering:Fe?Oe:void 0,onOpenFilter:e=>V({kind:`filter`,column:e}),references:K?{refs:K,open:q,onOpen:ft}:void 0,focusSearch:ge.find?()=>V({kind:`columns`}):void 0,onClose:()=>V(null)}),Et&&(0,Q.jsx)(zn,{onFetch:()=>{let e=jt.current;jt.current=null,Ft().then(t=>e?.(t))},onClose:()=>{kt(!1),queueMicrotask(()=>Nt(!1))}}),(0,Q.jsx)(cn,{open:xe,onClose:()=>De(null),onSubmit:Me})]})}function cr({schema:e,hidden:t,onHiddenChange:n,onJump:r,findColumn:i,onOpenTable:a,selected:o,filtering:s,form:c,added:l,onRemoveAdded:u,references:d}){let[f,p]=(0,Y.useState)(!1),[m,h]=(0,Y.useState)(!1),g=(0,Y.useMemo)(()=>new Set(o),[o]),_=d&&(0,Q.jsx)(`div`,{className:`flex max-h-[30%] min-h-0 shrink-0 flex-col border-t border-border`,children:(0,Q.jsx)(nn,{table:d.table,references:d.refs,open:d.open,onOpen:d.onOpen,collapsed:m,onCollapsedChange:h})});return c?(0,Q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[s&&(0,Q.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:(0,Q.jsx)(vn,{filtering:s,schema:e,nameFilter:c,added:l,onRemoveAdded:u})}),_]}):(0,Q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,Q.jsx)(jt,{schema:e,hidden:t,onHiddenChange:n,onJump:r,onOpenTable:a,selected:g,collapsed:f,onCollapsedChange:p,focusSearch:i}),s&&(0,Q.jsx)(`div`,{className:f?`flex min-h-0 flex-1 flex-col`:z(`flex min-h-0 shrink-0 flex-col border-t border-border`,d?`max-h-[40%]`:`max-h-[45%]`),children:(0,Q.jsx)(vn,{filtering:s,schema:e,added:l,onRemoveAdded:u})}),_]})}export{ir as TableTab,sr as TableView};
@@ -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{Kr as r,P as i,gt as a,xn as o}from"./icons-BwyIKaTT.js";import{k as s,r as c}from"./api-client-xQDlhUTu.js";import{n as l}from"./utils-Bslrbb-G.js";import{n as u,t as d}from"./button-C9ZXWb3b.js";import{t as f}from"./input-C3oVNCMq.js";import{sn as p}from"./index-CPBujJc_.js";import{t as m}from"./settings-rows-B0w15zot.js";var h=e(t(),1),g=n(),_=e=>e instanceof Error?e.message:String(e);function v(e,t,n){let[r,i]=(0,h.useState)(null),[a,o]=(0,h.useState)(!1),l=(0,h.useRef)(new Set);return(0,h.useEffect)(()=>{if(!r)return;let e=setInterval(async()=>{let e=await n();if(!e)return;let t=e.chats.find(e=>!l.current.has(e.chatId));t?(i(null),s.success(`Connected ${t.name}`)):e.connect.active||(i(null),Date.now()>=r.expiresAt?s.info(`The link expired. Make a new one to connect.`):s.success(`Telegram connected`))},2e3);return()=>clearInterval(e)},[r,n]),{link:r,starting:a,connect:(0,h.useCallback)(async()=>{o(!0);try{l.current=new Set(t?.chats.map(e=>e.chatId)),i(await c.post(e)),await n()}catch(e){s.error(`Could not make a link`,{description:_(e)})}finally{o(!1)}},[e,t,n]),cancel:(0,h.useCallback)(async()=>{i(null),await c.del(e).catch(()=>{})},[e])}}function y({chats:e,onDisconnect:t}){return e.length===0?null:(0,g.jsx)(`ul`,{className:`divide-y divide-border rounded-lg border border-border`,children:e.map(e=>(0,g.jsxs)(`li`,{className:`flex items-center gap-3 py-1.5 pl-4 pr-1`,children:[(0,g.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-sm`,children:e.name}),(0,g.jsx)(m,{label:`Disconnect ${e.name}`,danger:!0,onClick:()=>t(e),children:(0,g.jsx)(r,{className:`size-4`})})]},e.chatId))})}function b({link:e,botUsername:t,error:n,onCancel:r}){let[i,s]=(0,h.useState)(Date.now());(0,h.useEffect)(()=>{let e=setInterval(()=>s(Date.now()),1e3);return()=>clearInterval(e)},[]);let c=Math.max(0,Math.ceil((e.expiresAt-i)/1e3)),f=`${Math.floor(c/60)}:${String(c%60).padStart(2,`0`)}`;return(0,g.jsxs)(`div`,{className:`space-y-3 rounded-lg border border-primary/40 px-4 py-3`,children:[(0,g.jsxs)(`p`,{className:`text-sm leading-relaxed`,children:[`Open the link in Telegram and tap `,(0,g.jsx)(`b`,{children:`Start`}),t?(0,g.jsxs)(g.Fragment,{children:[` in the chat with `,(0,g.jsxs)(`b`,{children:[`@`,t]})]}):null,`. It connects one chat, once.`]}),(0,g.jsxs)(`div`,{className:`flex flex-col gap-3 md:flex-row md:items-center`,children:[(0,g.jsxs)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,className:l(u(),`min-h-11 w-full gap-2 md:min-h-9 md:w-auto`),children:[`Open Telegram`,(0,g.jsx)(a,{className:`size-3.5`})]}),(0,g.jsxs)(`div`,{className:`hidden items-center gap-3 md:flex`,children:[(0,g.jsx)(`div`,{className:`rounded-md bg-white p-2`,children:(0,g.jsx)(p,{value:e.url,size:112,bgColor:`#ffffff`,fgColor:`#000000`,level:`L`,style:{display:`block`}})}),(0,g.jsx)(`p`,{className:`max-w-48 text-xs text-muted-foreground`,children:`Or scan it with the phone that has Telegram.`})]})]}),n?(0,g.jsx)(`p`,{className:`text-xs text-error`,children:n}):(0,g.jsxs)(`p`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,g.jsx)(o,{className:`size-3.5 animate-spin`}),`Waiting for Telegram… the link expires in `,f]}),(0,g.jsx)(d,{variant:`ghost`,onClick:r,className:`min-h-11 cursor-pointer md:min-h-9`,children:`Cancel`})]})}function x({configured:e,botUsername:t,onSaved:n,endpoint:r=`/api/settings/telegram`,usernameExample:o=`my_ppm_bot`}){let s=(0,h.useId)(),[p,m]=(0,h.useState)(``),[_,v]=(0,h.useState)(!1),[y,b]=(0,h.useState)(null),[x,S]=(0,h.useState)(!e),C=async()=>{if(p.trim()){v(!0),b(null);try{let e=await c.put(r,{bot_token:p.trim()});m(``),S(!1),n(e.bot_username)}catch(e){b(e instanceof Error?e.message:String(e))}finally{v(!1)}}};return(0,g.jsxs)(`div`,{className:`space-y-2`,children:[(0,g.jsx)(`label`,{htmlFor:s,className:`text-xs text-muted-foreground`,children:e?`Bot token — paste a new one to replace it`:`Bot token`}),(0,g.jsxs)(`form`,{className:`flex flex-col gap-2 sm:flex-row`,onSubmit:e=>{e.preventDefault(),C()},children:[(0,g.jsx)(f,{id:s,type:`password`,autoComplete:`off`,spellCheck:!1,placeholder:e?`•••••• (saved)`:`123456789:AA…`,value:p,onChange:e=>{m(e.target.value),b(null)},className:`h-11 w-full font-mono text-sm md:h-9`}),(0,g.jsx)(d,{type:`submit`,disabled:_||!p.trim(),className:`min-h-11 shrink-0 cursor-pointer md:min-h-9`,children:_?`Checking…`:`Save`})]}),y&&(0,g.jsx)(`p`,{className:`text-xs text-error`,children:y}),e&&t&&(0,g.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Using`,` `,(0,g.jsxs)(`a`,{href:`https://t.me/${t}`,target:`_blank`,rel:`noopener noreferrer`,className:`text-primary underline-offset-2 hover:underline`,children:[`@`,t]}),`.`]}),(0,g.jsxs)(`button`,{type:`button`,onClick:()=>S(e=>!e),"aria-expanded":x,className:`flex min-h-11 cursor-pointer items-center gap-1 text-xs text-primary md:min-h-8`,children:[(0,g.jsx)(i,{className:l(`size-3.5 transition-transform`,!x&&`-rotate-90`)}),`How to create a bot`]}),x&&(0,g.jsxs)(`div`,{className:`space-y-3 rounded-lg border border-border px-4 py-3`,children:[(0,g.jsxs)(`ol`,{className:`list-decimal space-y-1.5 pl-4 text-sm leading-relaxed`,children:[(0,g.jsxs)(`li`,{children:[`Open `,(0,g.jsx)(`b`,{children:`@BotFather`}),` in Telegram.`]}),(0,g.jsxs)(`li`,{children:[`Send `,(0,g.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 text-xs`,children:`/newbot`}),`.`]}),(0,g.jsxs)(`li`,{children:[`Pick a display name, then a username ending in `,(0,g.jsx)(`b`,{children:`bot`}),`, such as `,(0,g.jsx)(`i`,{children:o}),`.`]}),(0,g.jsxs)(`li`,{children:[`BotFather replies with a token like `,(0,g.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 text-xs`,children:`123456789:AA…`}),`. Copy it and paste it above.`]})]}),(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Treat the token like a password: whoever has it controls the bot.`}),(0,g.jsxs)(`a`,{href:`https://t.me/BotFather`,target:`_blank`,rel:`noopener noreferrer`,className:l(u({variant:`outline`}),`min-h-11 w-full gap-2 md:min-h-9 sm:w-auto`),children:[`Open @BotFather`,(0,g.jsx)(a,{className:`size-3.5`})]})]})]})}export{v as i,b as n,y as r,x as t};
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{Kr as r,P as i,gt as a,xn as o}from"./icons-BwyIKaTT.js";import{k as s,r as c}from"./api-client-xQDlhUTu.js";import{n as l}from"./utils-Bslrbb-G.js";import{n as u,t as d}from"./button-C9ZXWb3b.js";import{t as f}from"./input-C3oVNCMq.js";import{sn as p}from"./index-EznfgwH9.js";import{t as m}from"./settings-rows-B7fyQuu_.js";var h=e(t(),1),g=n(),_=e=>e instanceof Error?e.message:String(e);function v(e,t,n){let[r,i]=(0,h.useState)(null),[a,o]=(0,h.useState)(!1),l=(0,h.useRef)(new Set);return(0,h.useEffect)(()=>{if(!r)return;let e=setInterval(async()=>{let e=await n();if(!e)return;let t=e.chats.find(e=>!l.current.has(e.chatId));t?(i(null),s.success(`Connected ${t.name}`)):e.connect.active||(i(null),Date.now()>=r.expiresAt?s.info(`The link expired. Make a new one to connect.`):s.success(`Telegram connected`))},2e3);return()=>clearInterval(e)},[r,n]),{link:r,starting:a,connect:(0,h.useCallback)(async()=>{o(!0);try{l.current=new Set(t?.chats.map(e=>e.chatId)),i(await c.post(e)),await n()}catch(e){s.error(`Could not make a link`,{description:_(e)})}finally{o(!1)}},[e,t,n]),cancel:(0,h.useCallback)(async()=>{i(null),await c.del(e).catch(()=>{})},[e])}}function y({chats:e,onDisconnect:t}){return e.length===0?null:(0,g.jsx)(`ul`,{className:`divide-y divide-border rounded-lg border border-border`,children:e.map(e=>(0,g.jsxs)(`li`,{className:`flex items-center gap-3 py-1.5 pl-4 pr-1`,children:[(0,g.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-sm`,children:e.name}),(0,g.jsx)(m,{label:`Disconnect ${e.name}`,danger:!0,onClick:()=>t(e),children:(0,g.jsx)(r,{className:`size-4`})})]},e.chatId))})}function b({link:e,botUsername:t,error:n,onCancel:r}){let[i,s]=(0,h.useState)(Date.now());(0,h.useEffect)(()=>{let e=setInterval(()=>s(Date.now()),1e3);return()=>clearInterval(e)},[]);let c=Math.max(0,Math.ceil((e.expiresAt-i)/1e3)),f=`${Math.floor(c/60)}:${String(c%60).padStart(2,`0`)}`;return(0,g.jsxs)(`div`,{className:`space-y-3 rounded-lg border border-primary/40 px-4 py-3`,children:[(0,g.jsxs)(`p`,{className:`text-sm leading-relaxed`,children:[`Open the link in Telegram and tap `,(0,g.jsx)(`b`,{children:`Start`}),t?(0,g.jsxs)(g.Fragment,{children:[` in the chat with `,(0,g.jsxs)(`b`,{children:[`@`,t]})]}):null,`. It connects one chat, once.`]}),(0,g.jsxs)(`div`,{className:`flex flex-col gap-3 md:flex-row md:items-center`,children:[(0,g.jsxs)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,className:l(u(),`min-h-11 w-full gap-2 md:min-h-9 md:w-auto`),children:[`Open Telegram`,(0,g.jsx)(a,{className:`size-3.5`})]}),(0,g.jsxs)(`div`,{className:`hidden items-center gap-3 md:flex`,children:[(0,g.jsx)(`div`,{className:`rounded-md bg-white p-2`,children:(0,g.jsx)(p,{value:e.url,size:112,bgColor:`#ffffff`,fgColor:`#000000`,level:`L`,style:{display:`block`}})}),(0,g.jsx)(`p`,{className:`max-w-48 text-xs text-muted-foreground`,children:`Or scan it with the phone that has Telegram.`})]})]}),n?(0,g.jsx)(`p`,{className:`text-xs text-error`,children:n}):(0,g.jsxs)(`p`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,g.jsx)(o,{className:`size-3.5 animate-spin`}),`Waiting for Telegram… the link expires in `,f]}),(0,g.jsx)(d,{variant:`ghost`,onClick:r,className:`min-h-11 cursor-pointer md:min-h-9`,children:`Cancel`})]})}function x({configured:e,botUsername:t,onSaved:n,endpoint:r=`/api/settings/telegram`,usernameExample:o=`my_ppm_bot`}){let s=(0,h.useId)(),[p,m]=(0,h.useState)(``),[_,v]=(0,h.useState)(!1),[y,b]=(0,h.useState)(null),[x,S]=(0,h.useState)(!e),C=async()=>{if(p.trim()){v(!0),b(null);try{let e=await c.put(r,{bot_token:p.trim()});m(``),S(!1),n(e.bot_username)}catch(e){b(e instanceof Error?e.message:String(e))}finally{v(!1)}}};return(0,g.jsxs)(`div`,{className:`space-y-2`,children:[(0,g.jsx)(`label`,{htmlFor:s,className:`text-xs text-muted-foreground`,children:e?`Bot token — paste a new one to replace it`:`Bot token`}),(0,g.jsxs)(`form`,{className:`flex flex-col gap-2 sm:flex-row`,onSubmit:e=>{e.preventDefault(),C()},children:[(0,g.jsx)(f,{id:s,type:`password`,autoComplete:`off`,spellCheck:!1,placeholder:e?`•••••• (saved)`:`123456789:AA…`,value:p,onChange:e=>{m(e.target.value),b(null)},className:`h-11 w-full font-mono text-sm md:h-9`}),(0,g.jsx)(d,{type:`submit`,disabled:_||!p.trim(),className:`min-h-11 shrink-0 cursor-pointer md:min-h-9`,children:_?`Checking…`:`Save`})]}),y&&(0,g.jsx)(`p`,{className:`text-xs text-error`,children:y}),e&&t&&(0,g.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Using`,` `,(0,g.jsxs)(`a`,{href:`https://t.me/${t}`,target:`_blank`,rel:`noopener noreferrer`,className:`text-primary underline-offset-2 hover:underline`,children:[`@`,t]}),`.`]}),(0,g.jsxs)(`button`,{type:`button`,onClick:()=>S(e=>!e),"aria-expanded":x,className:`flex min-h-11 cursor-pointer items-center gap-1 text-xs text-primary md:min-h-8`,children:[(0,g.jsx)(i,{className:l(`size-3.5 transition-transform`,!x&&`-rotate-90`)}),`How to create a bot`]}),x&&(0,g.jsxs)(`div`,{className:`space-y-3 rounded-lg border border-border px-4 py-3`,children:[(0,g.jsxs)(`ol`,{className:`list-decimal space-y-1.5 pl-4 text-sm leading-relaxed`,children:[(0,g.jsxs)(`li`,{children:[`Open `,(0,g.jsx)(`b`,{children:`@BotFather`}),` in Telegram.`]}),(0,g.jsxs)(`li`,{children:[`Send `,(0,g.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 text-xs`,children:`/newbot`}),`.`]}),(0,g.jsxs)(`li`,{children:[`Pick a display name, then a username ending in `,(0,g.jsx)(`b`,{children:`bot`}),`, such as `,(0,g.jsx)(`i`,{children:o}),`.`]}),(0,g.jsxs)(`li`,{children:[`BotFather replies with a token like `,(0,g.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 text-xs`,children:`123456789:AA…`}),`. Copy it and paste it above.`]})]}),(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Treat the token like a password: whoever has it controls the bot.`}),(0,g.jsxs)(`a`,{href:`https://t.me/BotFather`,target:`_blank`,rel:`noopener noreferrer`,className:l(u({variant:`outline`}),`min-h-11 w-full gap-2 md:min-h-9 sm:w-auto`),children:[`Open @BotFather`,(0,g.jsx)(a,{className:`size-3.5`})]})]})]})}export{v as i,b as n,y as r,x as t};
@@ -1,3 +1,3 @@
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{An as r,Wr as i,et as a,gr as o,gt as s,hn as c,jn as l,mn as u,ut as d,wn as f,xn as p}from"./icons-BwyIKaTT.js";import{k as m,r as h}from"./api-client-xQDlhUTu.js";import{t as g}from"./settings-store-B4mLp19V.js";import{n as _}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import{t as v}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 y}from"./tab-store-D5I52eLN.js";import{r as b,t as x}from"./apply-theme-ORrEdHKT.js";import{r as S}from"./clipboard-D-VCry-F.js";import{t as C}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{t as w}from"./resolve-theme-BqoL27BW.js";import{t as T}from"./ws-auth-CbF6GqxP.js";import{Pr as E,hi as D}from"./index-CPBujJc_.js";import{r as O}from"./editor-font-CdxKRKX-.js";import{i as k}from"./send-to-chat-CWV1qd3c.js";import{t as A}from"./code-fence-BK57HRhJ.js";import{n as j,t as M}from"./run-in-terminal-ujoc25vj.js";import{i as N,n as P,r as F,t as I}from"./vendor-xterm-DRhOk3kW.js";var L=e(t(),1);function R(e){let t=e.tokens;if(e.terminal){let n=e.terminal.ansi;return{background:t.bgSolid,foreground:t.text,cursor:e.terminal.cursor,cursorAccent:e.terminal.cursorAccent??t.bgSolid,selectionBackground:e.terminal.selection,black:n[0],red:n[1],green:n[2],yellow:n[3],blue:n[4],magenta:n[5],cyan:n[6],white:n[7],brightBlack:n[8],brightRed:n[9],brightGreen:n[10],brightYellow:n[11],brightBlue:n[12],brightMagenta:n[13],brightCyan:n[14],brightWhite:n[15]}}let n=e.mode===`dark`,r=n?`#1b1f2a`:`#2b2f38`,i=n?`#d7dce8`:`#e9edf5`,a=t.text3,o=n?`#f7f9ff`:`#ffffff`;return{background:t.bgSolid,foreground:t.text,cursor:t.accent,cursorAccent:t.bgSolid,selectionBackground:t.accentWash,black:r,red:t.error,green:t.success,yellow:t.warning,blue:t.accent,magenta:t.accent2,cyan:t.info,white:i,brightBlack:a,brightRed:t.error,brightGreen:t.success,brightYellow:t.warning,brightBlue:t.accent,brightMagenta:t.accent2,brightCyan:t.info,brightWhite:o}}function z(e,t){return e>=20&&t>=2}function B(){let e=g.getState();return R(b()??w(e.themeStyle,e.themeMode,e.customThemes,e.customThemeId))}var ee=/[).,;:'"\]}>]+$/,te=/\bhttps?:\/\/[^\s<>"'`]+/g,ne=5e3,re=100,V=250,ie=3e3,ae=`RESIZE:`,oe=`PING`,se=`PONG`,ce=15e3,le=35e3;function H(e){let{sessionId:t,containerRef:n}=e,r=(0,L.useRef)(null),[i,a]=(0,L.useState)(null),o=(0,L.useRef)(null),s=(0,L.useRef)(null),c=(0,L.useRef)(null),l=(0,L.useRef)(0),u=(0,L.useRef)(!1),d=(0,L.useRef)(Date.now()),[f,p]=(0,L.useState)(!1),[m,h]=(0,L.useState)(!1),[g,_]=(0,L.useState)(!1),[v,y]=(0,L.useState)(!1),b=(0,L.useRef)(null),S=(0,L.useRef)(null),C=e.tabId?`ppm:terminal-session:${e.tabId}`:null,w=(0,L.useRef)((()=>{if(C)try{return localStorage.getItem(C)??t}catch{}return t})()),E=(0,L.useRef)(0),k=(0,L.useRef)(-1),A=(0,L.useCallback)(e=>{let t=s.current;t?.readyState===WebSocket.OPEN&&t.send(e)},[]),j=(0,L.useCallback)(()=>{b.current&&clearTimeout(b.current),b.current=setTimeout(()=>y(!0),V)},[]),M=(0,L.useCallback)(()=>r.current?.getSelection()??``,[]),R=(0,L.useCallback)(()=>{let e=r.current;if(!e)return``;let t=e.buffer.active,n=E.current,i=t.baseY+t.cursorY,a=[];for(let e=n;e<=i;e++){let n=t.getLine(e);n&&a.push(n.translateToString(!0))}for(;a.length>0&&a[a.length-1].trim()===``;)a.pop();return a.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{An as r,Wr as i,et as a,gr as o,gt as s,hn as c,jn as l,mn as u,ut as d,wn as f,xn as p}from"./icons-BwyIKaTT.js";import{k as m,r as h}from"./api-client-xQDlhUTu.js";import{t as g}from"./settings-store-B4mLp19V.js";import{n as _}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import{t as v}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 y}from"./tab-store-D5I52eLN.js";import{r as b,t as x}from"./apply-theme-ORrEdHKT.js";import{r as S}from"./clipboard-D-VCry-F.js";import{t as C}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{t as w}from"./resolve-theme-BqoL27BW.js";import{t as T}from"./ws-auth-CbF6GqxP.js";import{Pr as E,hi as D}from"./index-EznfgwH9.js";import{r as O}from"./editor-font-CdxKRKX-.js";import{i as k}from"./send-to-chat-CWV1qd3c.js";import{t as A}from"./code-fence-BK57HRhJ.js";import{n as j,t as M}from"./run-in-terminal-ujoc25vj.js";import{i as N,n as P,r as F,t as I}from"./vendor-xterm-DRhOk3kW.js";var L=e(t(),1);function R(e){let t=e.tokens;if(e.terminal){let n=e.terminal.ansi;return{background:t.bgSolid,foreground:t.text,cursor:e.terminal.cursor,cursorAccent:e.terminal.cursorAccent??t.bgSolid,selectionBackground:e.terminal.selection,black:n[0],red:n[1],green:n[2],yellow:n[3],blue:n[4],magenta:n[5],cyan:n[6],white:n[7],brightBlack:n[8],brightRed:n[9],brightGreen:n[10],brightYellow:n[11],brightBlue:n[12],brightMagenta:n[13],brightCyan:n[14],brightWhite:n[15]}}let n=e.mode===`dark`,r=n?`#1b1f2a`:`#2b2f38`,i=n?`#d7dce8`:`#e9edf5`,a=t.text3,o=n?`#f7f9ff`:`#ffffff`;return{background:t.bgSolid,foreground:t.text,cursor:t.accent,cursorAccent:t.bgSolid,selectionBackground:t.accentWash,black:r,red:t.error,green:t.success,yellow:t.warning,blue:t.accent,magenta:t.accent2,cyan:t.info,white:i,brightBlack:a,brightRed:t.error,brightGreen:t.success,brightYellow:t.warning,brightBlue:t.accent,brightMagenta:t.accent2,brightCyan:t.info,brightWhite:o}}function z(e,t){return e>=20&&t>=2}function B(){let e=g.getState();return R(b()??w(e.themeStyle,e.themeMode,e.customThemes,e.customThemeId))}var ee=/[).,;:'"\]}>]+$/,te=/\bhttps?:\/\/[^\s<>"'`]+/g,ne=5e3,re=100,V=250,ie=3e3,ae=`RESIZE:`,oe=`PING`,se=`PONG`,ce=15e3,le=35e3;function H(e){let{sessionId:t,containerRef:n}=e,r=(0,L.useRef)(null),[i,a]=(0,L.useState)(null),o=(0,L.useRef)(null),s=(0,L.useRef)(null),c=(0,L.useRef)(null),l=(0,L.useRef)(0),u=(0,L.useRef)(!1),d=(0,L.useRef)(Date.now()),[f,p]=(0,L.useState)(!1),[m,h]=(0,L.useState)(!1),[g,_]=(0,L.useState)(!1),[v,y]=(0,L.useState)(!1),b=(0,L.useRef)(null),S=(0,L.useRef)(null),C=e.tabId?`ppm:terminal-session:${e.tabId}`:null,w=(0,L.useRef)((()=>{if(C)try{return localStorage.getItem(C)??t}catch{}return t})()),E=(0,L.useRef)(0),k=(0,L.useRef)(-1),A=(0,L.useCallback)(e=>{let t=s.current;t?.readyState===WebSocket.OPEN&&t.send(e)},[]),j=(0,L.useCallback)(()=>{b.current&&clearTimeout(b.current),b.current=setTimeout(()=>y(!0),V)},[]),M=(0,L.useCallback)(()=>r.current?.getSelection()??``,[]),R=(0,L.useCallback)(()=>{let e=r.current;if(!e)return``;let t=e.buffer.active,n=E.current,i=t.baseY+t.cursorY,a=[];for(let e=n;e<=i;e++){let n=t.getLine(e);n&&a.push(n.translateToString(!0))}for(;a.length>0&&a[a.length-1].trim()===``;)a.pop();return a.join(`
2
2
  `)},[]),H=(0,L.useCallback)(()=>{let e=r.current;return!e||k.current<0?``:e.buffer.active.getLine(k.current)?.translateToString(!0).trimEnd()??``},[]),U=(0,L.useCallback)(()=>{let e=r.current;if(!e)return[];let t=e.buffer.active,n=t.baseY+t.cursorY,i=Math.max(0,n-ne),a=[],o=``;for(let e=i;e<=n;e++){let n=t.getLine(e);n&&(o+=n.translateToString(!0),!t.getLine(e+1)?.isWrapped&&(a.push(o),o=``))}o&&a.push(o);let s=new Set,c=[];for(let e of a)for(let t of e.match(te)??[]){let e=t.replace(ee,``);!e||s.has(e)||(s.add(e),c.push(e))}return c.reverse()},[]),W=(0,L.useCallback)(()=>{let e=r.current,t=s.current;e&&t?.readyState===WebSocket.OPEN&&t.send(`${ae}${e.cols},${e.rows}`)},[]),G=(0,L.useCallback)(()=>{if(c.current&&clearTimeout(c.current),s.current?.close(),s.current=null,w.current=`new`,C)try{localStorage.removeItem(C)}catch{}l.current=0,_(!1),y(!1),p(!1),h(!1),setTimeout(()=>K(),0)},[]),K=(0,L.useCallback)(()=>{c.current&&=(clearTimeout(c.current),null),s.current&&=(s.current.onclose=null,s.current.close(),null);let t=r.current;if(!t)return;let n=window.location.protocol===`https:`?`wss:`:`ws:`,i=e.projectName??``,a=w.current,o=a===`new`&&e.cwd?`?cwd=${encodeURIComponent(e.cwd)}`:``,f=T(`/ws/project/${encodeURIComponent(i)}/terminal/${a}${o}`),m=`${n}//${window.location.host}${f}`,g=new WebSocket(m);s.current=g,g.onopen=()=>{u.current&&r.current&&r.current.clear(),u.current=!0,d.current=Date.now(),p(!0),h(!1),l.current=0,w.current===`new`&&y(!1),S.current&&clearTimeout(S.current),S.current=setTimeout(()=>y(!0),ie),W()},g.onmessage=e=>{if(d.current=Date.now(),typeof e.data==`string`){if(e.data===se)return;if(e.data.startsWith(`{`))try{let n=JSON.parse(e.data);if(n.type){if(n.type===`session`&&n.id&&(w.current=n.id,C))try{localStorage.setItem(C,n.id)}catch{}n.type===`error`&&t.write(`\r\n\x1b[31mError: ${n.message}\x1b[0m\r\n`),n.type===`exited`&&_(!0);return}}catch{}j(),t.write(e.data)}},g.onclose=()=>{p(!1),J()},g.onerror=()=>{g.close()}},[W]),q=(0,L.useCallback)(()=>{if(document.visibilityState!==`visible`)return;let e=s.current;if(!e||e.readyState!==WebSocket.OPEN){K();return}if(Date.now()-d.current>le){K();return}try{e.send(oe)}catch{K()}},[K]);function J(){let e=Math.min(1e3*2**l.current,3e4);l.current++,h(!0),c.current=setTimeout(()=>{K()},e)}return(0,L.useEffect)(()=>{let e=n.current;if(!e)return;let t=new N({cursorBlink:!0,fontSize:13,scrollback:5e4,fontFamily:O,theme:B(),minimumContrastRatio:4.5}),i=new F,l=()=>{let e=i.proposeDimensions();e&&z(e.cols,e.rows)&&i.fit()},u=new P;if(t.loadAddon(i),t.loadAddon(u),t.open(e),!(`ontouchstart`in window||navigator.maxTouchPoints>0))try{let e=new I;e.onContextLoss(()=>e.dispose()),t.loadAddon(e)}catch{}l(),r.current=t,o.current=i,a(t);let d=!1;document.fonts.ready.then(()=>{if(!(d||r.current!==t)){d=!0;try{t.options.fontFamily=O,l()}catch{}}}),t.onData(e=>{if(e.includes(`\r`)||e.includes(`
3
3
  `)){let e=t.buffer.active;k.current=e.baseY+e.cursorY,E.current=k.current+1}let n=s.current;n?.readyState===WebSocket.OPEN&&n.send(e)}),K();let f=setInterval(q,ce),p=e.ownerDocument,m=()=>{p.visibilityState===`visible`&&q()};p.addEventListener(`visibilitychange`,m);let h=null,g=new ResizeObserver(e=>{let t=e[0];!t||t.contentRect.width===0||t.contentRect.height===0||(h&&clearTimeout(h),h=setTimeout(()=>{try{l(),W()}catch{}},re))});g.observe(e);let _=D(e,()=>{try{l(),W()}catch{}}),v=()=>{t.options.theme=B()};window.addEventListener(x,v);let y=()=>window.removeEventListener(x,v),C=()=>{if(r.current===t)try{t.clearTextureAtlas(),t.refresh(0,t.rows-1)}catch{}};return document.fonts.addEventListener(`loadingdone`,C),()=>{y(),document.fonts.removeEventListener(`loadingdone`,C),_(),h&&clearTimeout(h),g.disconnect(),clearInterval(f),p.removeEventListener(`visibilitychange`,m),c.current&&clearTimeout(c.current),b.current&&clearTimeout(b.current),S.current&&clearTimeout(S.current),s.current?.close(),s.current=null,t.dispose(),r.current=null,a(null),o.current=null}},[]),{connected:f,reconnecting:m,exited:g,shellReady:v,sendData:A,getSelection:M,terminal:i,getLastCommandOutput:R,getLastCommand:H,getBufferUrls:U,restart:G}}function U(e,t,n){return new MouseEvent(e,{bubbles:!0,cancelable:!0,view:window,clientX:t.clientX,clientY:t.clientY,screenX:t.screenX,screenY:t.screenY,button:0,buttons:n,detail:1})}function W(e,t){(0,L.useEffect)(()=>{let n=e.current;if(!t||!n)return;let r=n.querySelector(`.xterm`);if(!r)return;let i=e=>{let t=e.touches[0];!t||e.touches.length>1||(e.preventDefault(),e.stopPropagation(),r.dispatchEvent(U(`mousedown`,t,1)))},a=e=>{let t=e.touches[0];t&&(e.preventDefault(),e.stopPropagation(),document.dispatchEvent(U(`mousemove`,t,1)))},o=e=>{let t=e.changedTouches[0];t&&(e.preventDefault(),e.stopPropagation(),document.dispatchEvent(U(`mouseup`,t,0)))},s={capture:!0,passive:!1};return n.addEventListener(`touchstart`,i,s),n.addEventListener(`touchmove`,a,s),n.addEventListener(`touchend`,o,s),n.addEventListener(`touchcancel`,o,s),()=>{n.removeEventListener(`touchstart`,i,s),n.removeEventListener(`touchmove`,a,s),n.removeEventListener(`touchend`,o,s),n.removeEventListener(`touchcancel`,o,s)}},[e,t])}var G=40;function K(e){if(!e||typeof e.checkVisibility==`function`&&!e.checkVisibility({visibilityProperty:!0}))return!1;let t=e.getBoundingClientRect();return t.width<G||t.height<G?!1:t.bottom>0&&t.right>0&&t.top<window.innerHeight&&t.left<window.innerWidth}function q({tabId:e,metadata:t,shellReady:n,sendData:r,focusTerminal:i,containerRef:a}){let o=(0,L.useRef)(null),[s,c]=(0,L.useState)(0),l=(0,L.useCallback)(e=>{o.current=e,c(e=>e+1)},[]),u=t?.pendingCommand;(0,L.useEffect)(()=>{if(!(typeof u!=`string`||!u)&&(l(u),e)){let n={...t??{}};delete n.pendingCommand,v.getState().updateTab(e,{metadata:n})}},[u,e,l]),(0,L.useEffect)(()=>{let e=e=>{let t=e.detail;t?.command&&K(a.current)&&(l(t.command),window.dispatchEvent(new Event(M)))};return window.addEventListener(j,e),()=>window.removeEventListener(j,e)},[a,l]),(0,L.useEffect)(()=>{if(!n)return;let e=o.current;e&&(o.current=null,r(e),i())},[n,s,r,i])}var J=n(),ue=[{label:`Tab`,value:` `},{label:`Esc`,value:`\x1B`},{label:`Ctrl`,value:null},{label:`↑`,value:`\x1B[A`},{label:`↓`,value:`\x1B[B`},{label:`←`,value:`\x1B[D`},{label:`→`,value:`\x1B[C`},{label:`^C`,value:``}],Y=`flex items-center justify-center shrink-0 min-w-11 min-h-11 rounded text-xs bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`;function de({ctrlMode:e,onToggleCtrl:t,selectMode:n,onToggleSelect:o,onKey:s,onCopy:c,onPaste:l,onSendToChat:f,onOpenLinks:p}){return(0,J.jsxs)(`div`,{className:`relative shrink-0 bg-surface border-t border-border`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1.5 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,children:[(0,J.jsx)(`button`,{onClick:o,"aria-label":`Select text`,"aria-pressed":n,className:_(Y,n&&`bg-primary text-primary-foreground`),children:(0,J.jsx)(i,{size:16})}),(0,J.jsx)(`button`,{onClick:c,"aria-label":`Copy`,className:Y,children:(0,J.jsx)(d,{size:16})}),(0,J.jsx)(`button`,{onClick:l,"aria-label":`Paste`,className:Y,children:(0,J.jsx)(a,{size:16})}),(0,J.jsx)(`button`,{onClick:p,"aria-label":`Links`,className:Y,children:(0,J.jsx)(u,{size:16})}),(0,J.jsx)(`button`,{onClick:f,"aria-label":`Send to Chat`,className:Y,children:(0,J.jsx)(r,{size:16})}),(0,J.jsx)(`div`,{className:`w-px h-6 shrink-0 bg-border mx-0.5`}),ue.map(n=>(0,J.jsx)(`button`,{onClick:()=>n.value===null?t():s(n.value),className:_(Y,`font-mono`,n.value===null&&e&&`bg-primary text-primary-foreground`),children:n.label},n.label)),(0,J.jsx)(`div`,{className:`w-6 shrink-0`,"aria-hidden":!0})]}),(0,J.jsx)(`div`,{className:`pointer-events-none absolute inset-y-0 right-0 w-8 bg-gradient-to-l from-surface to-transparent`,"aria-hidden":!0})]})}var fe=new Set([`localhost`,`::1`]);function X(e){let t=e.replace(/^\[|\]$/g,``).toLowerCase();return fe.has(t)?!0:/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(t)}function Z(e){let t;try{t=new URL(e)}catch{return null}let n=t.searchParams.get(`redirect_uri`)??t.searchParams.get(`redirectUri`);if(!n)return null;try{let e=new URL(n);return X(e.hostname)?e.port||(e.protocol===`https:`?`443`:`80`):null}catch{return null}}function Q(e){try{let t=new URL(e.trim());return(t.protocol===`http:`||t.protocol===`https:`)&&X(t.hostname)}catch{return!1}}function pe({onDone:e}){let[t,n]=(0,L.useState)(``),[r,i]=(0,L.useState)(!1),a=t.trim(),o=!r&&Q(a),s=async()=>{i(!0);try{await h.post(`/api/loopback/callback`,{url:a}),m.success(`Sent to the waiting command`,{duration:2e3}),n(``),e()}catch(e){m.error(e.message,{duration:4e3})}finally{i(!1)}};return(0,J.jsxs)(`div`,{className:`shrink-0 border-t border-border px-3 py-3`,children:[(0,J.jsx)(`p`,{className:`pb-2 text-[11px] leading-snug text-text-secondary`,children:`Finished signing in and landed on a page that would not load? Paste that address here — the machine will deliver it to the command still waiting.`}),(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.jsx)(`input`,{value:t,onChange:e=>n(e.target.value),inputMode:`url`,autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1,placeholder:`http://127.0.0.1:54132/oauth/callback?code=…`,"aria-label":`Callback address`,className:`h-11 min-w-0 flex-1 rounded-lg border border-border bg-surface px-3 font-mono text-xs text-foreground placeholder:text-text-subtle`}),(0,J.jsx)(`button`,{onClick:()=>void s(),disabled:!o,"aria-label":`Finish login`,className:`flex size-11 shrink-0 items-center justify-center rounded-lg bg-primary text-primary-foreground disabled:opacity-40 active:opacity-80 transition-opacity`,children:r?(0,J.jsx)(p,{className:`size-4 animate-spin`}):(0,J.jsx)(f,{className:`size-4`})})]}),a!==``&&!Q(a)&&(0,J.jsx)(`p`,{className:`pt-1.5 text-[11px] text-error`,children:`Needs to be the http://127.0.0.1:… address the sign-in redirected to.`})]})}function me({open:e,onClose:t,urls:n}){let r=async e=>{let n=await S(e);m[n?`success`:`error`](n?`Link copied`:`Could not copy link`,{duration:1500}),t()},i=[...new Set(n.map(Z).filter(e=>!!e))];return(0,J.jsxs)(C,{open:e,onClose:t,zIndex:70,className:`flex flex-col max-h-[70vh]`,children:[(0,J.jsx)(`div`,{className:`shrink-0 px-4 pb-2 text-xs font-medium text-text-secondary`,children:n.length>0?`Links in terminal (${n.length})`:`Links in terminal`}),(0,J.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto px-2 pb-2`,children:n.length===0?(0,J.jsxs)(`div`,{className:`flex flex-col items-center gap-2 px-4 py-8 text-center text-sm text-text-secondary`,children:[(0,J.jsx)(c,{className:`size-5 text-text-subtle`}),`No links found in the visible scrollback.`]}):n.map(e=>{let n=Z(e);return(0,J.jsxs)(`div`,{children:[(0,J.jsxs)(`div`,{className:`flex items-stretch gap-1`,children:[(0,J.jsxs)(`a`,{href:e,target:`_blank`,rel:`noreferrer noopener`,onClick:t,className:`flex min-h-11 flex-1 min-w-0 items-center gap-2 rounded-lg px-3 py-2 text-sm text-foreground active:bg-accent transition-colors`,children:[(0,J.jsx)(s,{className:`size-4 shrink-0 text-text-subtle`}),(0,J.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-left font-mono text-xs`,children:e})]}),(0,J.jsx)(`button`,{onClick:()=>void r(e),"aria-label":`Copy ${e}`,className:`flex size-11 shrink-0 items-center justify-center rounded-lg text-text-secondary active:bg-accent transition-colors`,children:(0,J.jsx)(d,{className:`size-4`})})]}),n&&(0,J.jsxs)(`p`,{className:`px-3 pb-2 text-[11px] leading-snug text-text-secondary`,children:[`Signing in here sends you back to port `,n,` `,(0,J.jsx)(`strong`,{children:`on the machine`}),`, not this device — so the terminal keeps waiting. Afterwards, paste the address bar below to finish it.`]})]},e)})}),i.length>0&&(0,J.jsx)(pe,{onDone:t})]})}var he=[{title:`Add to current chat`,newTab:!1,Icon:r},{title:`Add to new chat`,newTab:!0,Icon:l}],$=4;function ge(e){let t=e.replace(/^(?:[ \t]*\r?\n)+/,``).trimEnd();if(!t)return null;let n=A(t);return{label:`Terminal selection`,text:`Selected text from the terminal\n${n}\n${t}\n${n}`}}function _e(e){let{start:t,cell:n,screen:r,box:i,actions:a}=e,o=e.end.x===0&&e.end.y>t.y?{x:e.cols,y:e.end.y-1}:e.end,s=t.y-e.viewportY,c=o.y-e.viewportY;if(c<0||s>=e.rows)return null;let l=i.height-a.height,u=r.top+(Math.min(c,e.rows-1)+1)*n.height+$;if(u>l){let e=r.top+Math.max(s,0)*n.height-a.height-$;u=e>=0?e:l}let d=Math.min(r.left+o.x*n.width,i.width-a.width);return{left:Math.max(0,d),top:Math.max(0,u)}}function ve({terminal:e,projectName:t,touch:n}){let r=(0,L.useRef)(null),[i,a]=(0,L.useState)(!1),o=(0,L.useCallback)(()=>{let t=r.current,n=t?.offsetParent,i=e?.getSelectionPosition(),a=e?.dimensions?.css.cell,o=e?.element?.querySelector(`.xterm-screen`);if(!t||!n||!e||!i||!a||!o)return;let s=n.getBoundingClientRect(),c=o.getBoundingClientRect(),l=_e({start:i.start,end:i.end,viewportY:e.buffer.active.viewportY,rows:e.rows,cols:e.cols,cell:a,screen:{left:c.left-s.left,top:c.top-s.top},box:{width:s.width,height:s.height},actions:{width:t.offsetWidth,height:t.offsetHeight}});t.style.visibility=l?`visible`:`hidden`,l&&(t.style.transform=`translate(${Math.round(l.left)}px, ${Math.round(l.top)}px)`)},[e]);if((0,L.useEffect)(()=>{let t=e?.element;if(!e||!t)return;let n=()=>{a(!!e.getSelection().trim()),o()},r,i,s=()=>{r=void 0,clearTimeout(i),i=setTimeout(n,0)},c=()=>{r?.removeEventListener(`mouseup`,s,!0),r=t.ownerDocument,r.addEventListener(`mouseup`,s,{capture:!0,once:!0})};t.addEventListener(`mousedown`,c,!0);let l=[e.onSelectionChange(n),e.onRender(o)];return()=>{t.removeEventListener(`mousedown`,c,!0),r?.removeEventListener(`mouseup`,s,!0),clearTimeout(i),l.forEach(e=>e.dispose())}},[e,o]),(0,L.useLayoutEffect)(()=>{i&&o()},[i,o]),!i||!e)return null;let s=n=>{let r=ge(e.getSelection());r&&k({...r,projectName:t,newTab:n,asContext:!0}),e.clearSelection()};return(0,J.jsx)(`div`,{ref:r,role:`group`,"aria-label":`Add the selection to chat`,className:`invisible absolute left-0 top-0 z-10 flex max-w-full flex-wrap gap-1 rounded-md border border-border bg-surface p-0.5 shadow-md`,children:he.map(({title:e,newTab:t,Icon:r})=>(0,J.jsxs)(`button`,{type:`button`,onClick:()=>s(t),className:_(`flex items-center gap-1 whitespace-nowrap rounded bg-surface-elevated text-text-primary transition-colors hover:bg-primary hover:text-primary-foreground active:bg-primary active:text-primary-foreground`,n?`min-h-11 px-3 text-sm`:`px-2 py-0.5 text-xs`),children:[(0,J.jsx)(r,{size:n?16:12}),e]},e))})}var ye=(0,L.memo)(function({metadata:e,tabId:t}){let n=e?.sessionId??`new`,i=e?.projectName,a=e?.cwd,s=(0,L.useRef)(null),{connected:c,reconnecting:l,exited:u,shellReady:d,sendData:f,getSelection:p,terminal:h,getLastCommandOutput:g,getLastCommand:v,getBufferUrls:b,restart:x}=H({sessionId:n,projectName:i,cwd:a,containerRef:s,tabId:t}),[C,w]=(0,L.useState)(!1),[T,D]=(0,L.useState)(!1),[O,A]=(0,L.useState)(!1),j=y(e=>e.activeTabId),[M,N]=(0,L.useState)(0);(0,L.useEffect)(()=>{let e=()=>N(e=>e+1);return window.addEventListener(`ppm:onboarding-refresh`,e),()=>window.removeEventListener(`ppm:onboarding-refresh`,e)},[]),(0,L.useEffect)(()=>{if(!i||!t||j!==t||!c||!d||l||u)return;let e=!!s.current?.checkVisibility({checkOpacity:!0,checkVisibilityCSS:!0});e&&E({type:`terminal-ready`,projectName:i,tabId:t,visible:e})},[M,i,t,j,c,d,l,u]),W(s,T);let P=(0,L.useCallback)(()=>{(s.current?.querySelector(`.xterm-helper-textarea`))?.focus()},[]);q({tabId:t,metadata:e,shellReady:d,sendData:f,focusTerminal:P,containerRef:s}),(0,L.useEffect)(()=>{let e=s.current;if(!e||T)return;let t=()=>P();return e.addEventListener(`touchend`,t,{capture:!0}),()=>e.removeEventListener(`touchend`,t,{capture:!0})},[P,T]);let F=(0,L.useCallback)(e=>{if(P(),C&&e.length===1){let t=e.toLowerCase().charCodeAt(0)-96;t>=1&&t<=26&&f(String.fromCharCode(t)),w(!1);return}f(e)},[C,f,P]),I=(0,L.useCallback)(async()=>{let e=p(),t=e||g();if(!t.trim()){m(`Nothing to copy`,{duration:1500});return}let n=await S(t);m[n?`success`:`error`](n?e?`Selection copied`:`Last output copied`:`Could not copy`,{duration:1500})},[p,g]),R=(0,L.useCallback)(async()=>{try{let e=await navigator.clipboard.readText();e&&(f(e),P())}catch{m.error(`Clipboard blocked — paste with the keyboard instead`,{duration:2500})}},[f,P]),z=(0,L.useCallback)(()=>{let e=p(),t=e||g();if(!t.trim())return;let n=e?``:v();k({text:"```bash\n"+(n?`${n}\n${t}`:t)+"\n```",label:e?`Terminal selection`:`Terminal output`,projectName:i}),m.success(`Sent to chat`,{duration:1500})},[p,g,v,i]),B=typeof window<`u`&&`ontouchstart`in window;return(0,J.jsxs)(`div`,{"data-onboarding":`terminal`,className:`flex flex-col h-full min-h-0`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1 bg-surface border-b border-border text-xs`,children:[(0,J.jsx)(`span`,{className:_(`size-2 rounded-full`,u?`bg-error`:c?`bg-success`:l?`bg-warning`:`bg-error`)}),(0,J.jsx)(`span`,{className:`text-text-secondary`,children:u?`Process exited`:c?`Connected`:l?`Reconnecting...`:`Disconnected`}),u&&(0,J.jsxs)(`button`,{onClick:x,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-xs bg-surface-elevated text-text-primary hover:bg-primary hover:text-primary-foreground active:bg-primary active:text-primary-foreground transition-colors`,children:[(0,J.jsx)(o,{size:10}),`Restart`]}),(0,J.jsxs)(`button`,{onClick:z,title:`Send to Chat`,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-xs bg-surface-elevated text-text-primary hover:bg-primary hover:text-primary-foreground active:bg-primary active:text-primary-foreground transition-colors ml-auto`,children:[(0,J.jsx)(r,{size:10}),`Chat`]}),(0,J.jsx)(`span`,{className:`text-text-subtle font-mono`,children:n})]}),(0,J.jsxs)(`div`,{className:`relative flex-1 min-h-0 flex flex-col`,children:[(0,J.jsx)(`div`,{ref:s,onClick:T?void 0:P,className:_(`flex-1 min-h-0 bg-background p-1`,T&&`touch-none`)}),(0,J.jsx)(ve,{terminal:h,projectName:i,touch:B})]}),B&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(de,{ctrlMode:C,onToggleCtrl:()=>w(!C),selectMode:T,onToggleSelect:()=>D(!T),onKey:F,onCopy:()=>void I(),onPaste:()=>void R(),onSendToChat:z,onOpenLinks:()=>A(!0)}),(0,J.jsx)(me,{open:O,onClose:()=>A(!1),urls:O?b():[]})]})]})});export{ye as TerminalTab};