@hienlh/ppm 0.23.13 → 0.23.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1218) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/CLAUDE.md +19 -4
  3. package/THIRD-PARTY-NOTICES.md +1 -1
  4. package/assets/skills/ppm/SKILL.md +3 -2
  5. package/assets/skills/ppm/references/cli-reference.md +4 -4
  6. package/assets/skills/ppm/references/common-tasks.md +6 -0
  7. package/assets/skills/ppm/references/http-api.md +13 -1
  8. package/bun.lock +15 -0
  9. package/dist/web/assets/accounts-settings-section-B5YXy0vd.js +1 -0
  10. package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.br +0 -0
  11. package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.gz +0 -0
  12. package/dist/web/assets/adaptive-context-menu-C4jNSORA.js +1 -0
  13. package/dist/web/assets/adaptive-context-menu-C4jNSORA.js.br +0 -0
  14. package/dist/web/assets/adaptive-context-menu-C4jNSORA.js.gz +0 -0
  15. package/dist/web/assets/agent-session-sheet-Bj42PwCK.js +2 -0
  16. package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.br +0 -0
  17. package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.gz +0 -0
  18. package/dist/web/assets/agent-session-sheet-store-BAfLnsLX.js +1 -0
  19. package/dist/web/assets/agent-session-window-content-LqL6fVPU.js +1 -0
  20. package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.br +0 -0
  21. package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.gz +0 -0
  22. package/dist/web/assets/ai-resource-editor-jVv2nvAG.js +1 -0
  23. package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.br +0 -0
  24. package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.gz +0 -0
  25. package/dist/web/assets/ai-settings-section-C9Q-v8fY.js +1 -0
  26. package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.br +0 -0
  27. package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.gz +0 -0
  28. package/dist/web/assets/ai-settings-section-CN5BR1ZZ.js +1 -0
  29. package/dist/web/assets/android-tab-CwqiuEZP.js +2 -0
  30. package/dist/web/assets/android-tab-CwqiuEZP.js.br +0 -0
  31. package/dist/web/assets/android-tab-CwqiuEZP.js.gz +0 -0
  32. package/dist/web/assets/api-client-xQDlhUTu.js +1 -0
  33. package/dist/web/assets/api-client-xQDlhUTu.js.br +0 -0
  34. package/dist/web/assets/api-client-xQDlhUTu.js.gz +0 -0
  35. package/dist/web/assets/api-client-xR05zj6r.js +1 -0
  36. package/dist/web/assets/api-settings-VAi0LpIJ.js +1 -0
  37. package/dist/web/assets/api-settings-vmIRFNwZ.js +1 -0
  38. package/dist/web/assets/api-settings-vmIRFNwZ.js.br +0 -0
  39. package/dist/web/assets/api-settings-vmIRFNwZ.js.gz +0 -0
  40. package/dist/web/assets/api-themes-CaXofG7d.js +1 -0
  41. package/dist/web/assets/appearance-settings-section-D0JIfiRx.js +1 -0
  42. package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.br +0 -0
  43. package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.gz +0 -0
  44. package/dist/web/assets/apps-panel-Cz_KJ37M.js +1 -0
  45. package/dist/web/assets/apps-panel-Cz_KJ37M.js.br +0 -0
  46. package/dist/web/assets/apps-panel-Cz_KJ37M.js.gz +0 -0
  47. package/dist/web/assets/audio-preview-Dq7qZ_6i.js +1 -0
  48. package/dist/web/assets/audio-preview-Dq7qZ_6i.js.br +0 -0
  49. package/dist/web/assets/audio-preview-Dq7qZ_6i.js.gz +0 -0
  50. package/dist/web/assets/branch-review-tab-C3QNpsm7.js +1 -0
  51. package/dist/web/assets/branch-review-tab-C3QNpsm7.js.br +0 -0
  52. package/dist/web/assets/branch-review-tab-C3QNpsm7.js.gz +0 -0
  53. package/dist/web/assets/button-C9ZXWb3b.js +1 -0
  54. package/dist/web/assets/button-C9ZXWb3b.js.br +0 -0
  55. package/dist/web/assets/button-C9ZXWb3b.js.gz +0 -0
  56. package/dist/web/assets/chat-preparation-cache-190LLyy7.js +1 -0
  57. package/dist/web/assets/chat-preparation-cache-190LLyy7.js.br +0 -0
  58. package/dist/web/assets/chat-preparation-cache-190LLyy7.js.gz +0 -0
  59. package/dist/web/assets/chat-tab-D14CUl0J.js +1 -0
  60. package/dist/web/assets/chat-tab-D14CUl0J.js.br +0 -0
  61. package/dist/web/assets/chat-tab-D14CUl0J.js.gz +0 -0
  62. package/dist/web/assets/chat-tab-D8iAVZKV.js +16 -0
  63. package/dist/web/assets/chat-tab-D8iAVZKV.js.br +0 -0
  64. package/dist/web/assets/chat-tab-D8iAVZKV.js.gz +0 -0
  65. package/dist/web/assets/code-editor-B7gbH4-x.js +10 -0
  66. package/dist/web/assets/code-editor-B7gbH4-x.js.br +0 -0
  67. package/dist/web/assets/code-editor-B7gbH4-x.js.gz +0 -0
  68. package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js +1 -0
  69. package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js.br +0 -0
  70. package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js.gz +0 -0
  71. package/dist/web/assets/conflict-editor-ktOkrODA.js +19 -0
  72. package/dist/web/assets/conflict-editor-ktOkrODA.js.br +0 -0
  73. package/dist/web/assets/conflict-editor-ktOkrODA.js.gz +0 -0
  74. package/dist/web/assets/connection-form-tab-CxvExR7T.js +4 -0
  75. package/dist/web/assets/connection-form-tab-CxvExR7T.js.br +0 -0
  76. package/dist/web/assets/connection-form-tab-CxvExR7T.js.gz +0 -0
  77. package/dist/web/assets/context-menu-BCuZYfWC.js +1 -0
  78. package/dist/web/assets/context-menu-BCuZYfWC.js.br +0 -0
  79. package/dist/web/assets/context-menu-BCuZYfWC.js.gz +0 -0
  80. package/dist/web/assets/createLucideIcon-D9_fdOKS.js +1 -0
  81. package/dist/web/assets/createLucideIcon-D9_fdOKS.js.br +0 -0
  82. package/dist/web/assets/createLucideIcon-D9_fdOKS.js.gz +0 -0
  83. package/dist/web/assets/csv-preview-CBDMTEsF.js +10 -0
  84. package/dist/web/assets/csv-preview-CBDMTEsF.js.br +0 -0
  85. package/dist/web/assets/csv-preview-CBDMTEsF.js.gz +0 -0
  86. package/dist/web/assets/database-drivers-section-DJvU6bf5.js +1 -0
  87. package/dist/web/assets/database-drivers-section-DJvU6bf5.js.br +0 -0
  88. package/dist/web/assets/database-drivers-section-DJvU6bf5.js.gz +0 -0
  89. package/dist/web/assets/db-ai-tools-CVbbW_MZ.js +1 -0
  90. package/dist/web/assets/db-ai-tools-CVbbW_MZ.js.br +0 -0
  91. package/dist/web/assets/db-ai-tools-CVbbW_MZ.js.gz +0 -0
  92. package/dist/web/assets/db-explorer-store-BmpvDHz6.js +1 -0
  93. package/dist/web/assets/db-explorer-store-BmpvDHz6.js.br +0 -0
  94. package/dist/web/assets/db-explorer-store-BmpvDHz6.js.gz +0 -0
  95. package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js +1 -0
  96. package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js.br +0 -0
  97. package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js.gz +0 -0
  98. package/dist/web/assets/db-tab-parts-BgVpKbi6.js +1 -0
  99. package/dist/web/assets/db-tab-parts-BgVpKbi6.js.br +0 -0
  100. package/dist/web/assets/db-tab-parts-BgVpKbi6.js.gz +0 -0
  101. package/dist/web/assets/db-types-CNhENouW.js +1 -0
  102. package/dist/web/assets/design-canvas-check-BIHc2d_k.js +1 -0
  103. package/dist/web/assets/design-canvas-check-BIHc2d_k.js.br +0 -0
  104. package/dist/web/assets/design-canvas-check-BIHc2d_k.js.gz +0 -0
  105. package/dist/web/assets/design-export-client-CJ3w7Zrk.js +1 -0
  106. package/dist/web/assets/design-export-client-CJ3w7Zrk.js.br +0 -0
  107. package/dist/web/assets/design-export-client-CJ3w7Zrk.js.gz +0 -0
  108. package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js +1 -0
  109. package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js.br +0 -0
  110. package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js.gz +0 -0
  111. package/dist/web/assets/design-settings-section-DPGw61pY.js +2 -0
  112. package/dist/web/assets/design-settings-section-DPGw61pY.js.br +0 -0
  113. package/dist/web/assets/design-settings-section-DPGw61pY.js.gz +0 -0
  114. package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js +3 -0
  115. package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js.br +0 -0
  116. package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js.gz +0 -0
  117. package/dist/web/assets/design-tab-BiCqHNl3.js +57 -0
  118. package/dist/web/assets/design-tab-BiCqHNl3.js.br +0 -0
  119. package/dist/web/assets/design-tab-BiCqHNl3.js.gz +0 -0
  120. package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js +1 -0
  121. package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.br +0 -0
  122. package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.gz +0 -0
  123. package/dist/web/assets/dialog-Dn_2tuYa.js +1 -0
  124. package/dist/web/assets/dialog-Dn_2tuYa.js.br +0 -0
  125. package/dist/web/assets/dialog-Dn_2tuYa.js.gz +0 -0
  126. package/dist/web/assets/diff-viewer-CLAvyqVG.js +4 -0
  127. package/dist/web/assets/diff-viewer-CLAvyqVG.js.br +0 -0
  128. package/dist/web/assets/diff-viewer-CLAvyqVG.js.gz +0 -0
  129. package/dist/web/assets/docx-preview-XSkD2IL6.js +12 -0
  130. package/dist/web/assets/docx-preview-XSkD2IL6.js.br +0 -0
  131. package/dist/web/assets/docx-preview-XSkD2IL6.js.gz +0 -0
  132. package/dist/web/assets/dropdown-menu-BQidk_OJ.js +1 -0
  133. package/dist/web/assets/dropdown-menu-BQidk_OJ.js.br +0 -0
  134. package/dist/web/assets/dropdown-menu-BQidk_OJ.js.gz +0 -0
  135. package/dist/web/assets/edit-diff-preview-DyWUMlkI.js +7 -0
  136. package/dist/web/assets/edit-diff-preview-DyWUMlkI.js.br +0 -0
  137. package/dist/web/assets/edit-diff-preview-DyWUMlkI.js.gz +0 -0
  138. package/dist/web/assets/editor-dialog-cQvqVZAR.js +1 -0
  139. package/dist/web/assets/editor-dialog-cQvqVZAR.js.br +0 -0
  140. package/dist/web/assets/editor-dialog-cQvqVZAR.js.gz +0 -0
  141. package/dist/web/assets/editor-language-service-6-7mS6_9.js +1 -0
  142. package/dist/web/assets/editor-language-service-6-7mS6_9.js.br +0 -0
  143. package/dist/web/assets/editor-language-service-6-7mS6_9.js.gz +0 -0
  144. package/dist/web/assets/explorer-body-BlGDPmNa.js +2 -0
  145. package/dist/web/assets/explorer-body-BlGDPmNa.js.br +0 -0
  146. package/dist/web/assets/explorer-body-BlGDPmNa.js.gz +0 -0
  147. package/dist/web/assets/explorer-model-BtJN4MZ9.js +1 -0
  148. package/dist/web/assets/explorer-model-BtJN4MZ9.js.br +0 -0
  149. package/dist/web/assets/explorer-model-BtJN4MZ9.js.gz +0 -0
  150. package/dist/web/assets/explorer-window-content-BLWY8GJ_.js +1 -0
  151. package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.br +0 -0
  152. package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.gz +0 -0
  153. package/dist/web/assets/extension-manager-section-NSEt5f4z.js +1 -0
  154. package/dist/web/assets/extension-manager-section-NSEt5f4z.js.br +0 -0
  155. package/dist/web/assets/extension-manager-section-NSEt5f4z.js.gz +0 -0
  156. package/dist/web/assets/extension-webview-BkAEBWin.js +12 -0
  157. package/dist/web/assets/extension-webview-BkAEBWin.js.br +0 -0
  158. package/dist/web/assets/extension-webview-BkAEBWin.js.gz +0 -0
  159. package/dist/web/assets/file-diff-CcDhJkXB.js +1 -0
  160. package/dist/web/assets/file-icons-JInFtBVl.js +1 -0
  161. package/dist/web/assets/file-icons-JInFtBVl.js.br +0 -0
  162. package/dist/web/assets/file-icons-JInFtBVl.js.gz +0 -0
  163. package/dist/web/assets/file-store-BQ41vIs5.js +1 -0
  164. package/dist/web/assets/file-store-BQ41vIs5.js.br +0 -0
  165. package/dist/web/assets/file-store-BQ41vIs5.js.gz +0 -0
  166. package/dist/web/assets/files-settings-section-Bq7liJ_r.js +1 -0
  167. package/dist/web/assets/files-settings-section-Bq7liJ_r.js.br +0 -0
  168. package/dist/web/assets/files-settings-section-Bq7liJ_r.js.gz +0 -0
  169. package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js +1 -0
  170. package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js.br +0 -0
  171. package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js.gz +0 -0
  172. package/dist/web/assets/format-file-meta-DdYtk07C.js +1 -0
  173. package/dist/web/assets/format-file-meta-DdYtk07C.js.br +0 -0
  174. package/dist/web/assets/format-file-meta-DdYtk07C.js.gz +0 -0
  175. package/dist/web/assets/fs-api-CFtQzsIJ.js +1 -0
  176. package/dist/web/assets/fs-api-CFtQzsIJ.js.br +0 -0
  177. package/dist/web/assets/fs-api-CFtQzsIJ.js.gz +0 -0
  178. package/dist/web/assets/general-settings-section-DvHROAMa.js +1 -0
  179. package/dist/web/assets/general-settings-section-DvHROAMa.js.br +0 -0
  180. package/dist/web/assets/general-settings-section-DvHROAMa.js.gz +0 -0
  181. package/dist/web/assets/git-commit-horizontal-BPdj2L1i.js +1 -0
  182. package/dist/web/assets/git-log-panel-Cu9kK48H.js +1 -0
  183. package/dist/web/assets/git-log-panel-Cu9kK48H.js.br +0 -0
  184. package/dist/web/assets/git-log-panel-Cu9kK48H.js.gz +0 -0
  185. package/dist/web/assets/git-repo-store-CKB5fdNP.js +1 -0
  186. package/dist/web/assets/git-repo-store-CKB5fdNP.js.br +0 -0
  187. package/dist/web/assets/git-repo-store-CKB5fdNP.js.gz +0 -0
  188. package/dist/web/assets/git-review-tab-B_JT649W.js +3 -0
  189. package/dist/web/assets/git-review-tab-B_JT649W.js.br +0 -0
  190. package/dist/web/assets/git-review-tab-B_JT649W.js.gz +0 -0
  191. package/dist/web/assets/glide-data-grid-BlposOph.js +177 -0
  192. package/dist/web/assets/glide-data-grid-BlposOph.js.br +0 -0
  193. package/dist/web/assets/glide-data-grid-BlposOph.js.gz +0 -0
  194. package/dist/web/assets/grid-save-dialog-B0d0qhnN.js +2 -0
  195. package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.br +0 -0
  196. package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.gz +0 -0
  197. package/dist/web/assets/group-chat-tab-jirUsGm-.js +1 -0
  198. package/dist/web/assets/group-chat-tab-jirUsGm-.js.br +0 -0
  199. package/dist/web/assets/group-chat-tab-jirUsGm-.js.gz +0 -0
  200. package/dist/web/assets/html-preview-loads-CMWBC-iv.js +1 -0
  201. package/dist/web/assets/icons-BwyIKaTT.js +1 -0
  202. package/dist/web/assets/icons-BwyIKaTT.js.br +0 -0
  203. package/dist/web/assets/icons-BwyIKaTT.js.gz +0 -0
  204. package/dist/web/assets/image-preview-gOBK9zED.js +1 -0
  205. package/dist/web/assets/impexp-tab-HJVcOTYJ.js +1 -0
  206. package/dist/web/assets/impexp-tab-HJVcOTYJ.js.br +0 -0
  207. package/dist/web/assets/impexp-tab-HJVcOTYJ.js.gz +0 -0
  208. package/dist/web/assets/index-DLB3j_P0.js +59 -0
  209. package/dist/web/assets/index-DLB3j_P0.js.br +0 -0
  210. package/dist/web/assets/index-DLB3j_P0.js.gz +0 -0
  211. package/dist/web/assets/index-M3DUzop8.css +1 -0
  212. package/dist/web/assets/index-M3DUzop8.css.br +0 -0
  213. package/dist/web/assets/index-M3DUzop8.css.gz +0 -0
  214. package/dist/web/assets/input-C3oVNCMq.js +1 -0
  215. package/dist/web/assets/jira-watcher-section-EQvdnETB.js +1 -0
  216. package/dist/web/assets/keybindings-store-CEy-Sdcc.js +1 -0
  217. package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js +1 -0
  218. package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.br +0 -0
  219. package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.gz +0 -0
  220. package/dist/web/assets/language-servers-section-DOcZ72FJ.js +2 -0
  221. package/dist/web/assets/language-servers-section-DOcZ72FJ.js.br +0 -0
  222. package/dist/web/assets/language-servers-section-DOcZ72FJ.js.gz +0 -0
  223. package/dist/web/assets/lib-5Chotbwm.js +2 -0
  224. package/dist/web/assets/lib-5Chotbwm.js.br +0 -0
  225. package/dist/web/assets/lib-5Chotbwm.js.gz +0 -0
  226. package/dist/web/assets/logs-app-C7n9GSCn.js +13 -0
  227. package/dist/web/assets/logs-app-C7n9GSCn.js.br +0 -0
  228. package/dist/web/assets/logs-app-C7n9GSCn.js.gz +0 -0
  229. package/dist/web/assets/logs-tab-CSOiexvx.js +1 -0
  230. package/dist/web/assets/logs-window-content-C4Qs6-0q.js +1 -0
  231. package/dist/web/assets/lsp-client-DpYmPhXX.js +1 -0
  232. package/dist/web/assets/lsp-client-DpYmPhXX.js.br +0 -0
  233. package/dist/web/assets/lsp-client-DpYmPhXX.js.gz +0 -0
  234. package/dist/web/assets/markdown-renderer-CtEl6qAt.js +4 -0
  235. package/dist/web/assets/markdown-renderer-CtEl6qAt.js.br +0 -0
  236. package/dist/web/assets/markdown-renderer-CtEl6qAt.js.gz +0 -0
  237. package/dist/web/assets/markdown-renderer-Df3r-CCb.js +1 -0
  238. package/dist/web/assets/media-url-Cn2yRAxP.js +1 -0
  239. package/dist/web/assets/metric-chart-canvas-DEW16Su8.js +1 -0
  240. package/dist/web/assets/metric-chart-canvas-DEW16Su8.js.br +0 -0
  241. package/dist/web/assets/metric-chart-canvas-DEW16Su8.js.gz +0 -0
  242. package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js +1 -0
  243. package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js.br +0 -0
  244. package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js.gz +0 -0
  245. package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js +1 -0
  246. package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.br +0 -0
  247. package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.gz +0 -0
  248. package/dist/web/assets/new-design-dialog-DgztQK5R.js +1 -0
  249. package/dist/web/assets/new-design-dialog-DgztQK5R.js.br +0 -0
  250. package/dist/web/assets/new-design-dialog-DgztQK5R.js.gz +0 -0
  251. package/dist/web/assets/notification-store-B92dvP_u.js +1 -0
  252. package/dist/web/assets/notifications-settings-section-JiGvaCFx.js +1 -0
  253. package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.br +0 -0
  254. package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.gz +0 -0
  255. package/dist/web/assets/onboarding-entry-eehqBvyM.js +1 -0
  256. package/dist/web/assets/onboarding-entry-eehqBvyM.js.br +0 -0
  257. package/dist/web/assets/onboarding-entry-eehqBvyM.js.gz +0 -0
  258. package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js +1 -0
  259. package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js.br +0 -0
  260. package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js.gz +0 -0
  261. package/dist/web/assets/open-db-tabs-CtWIWHOa.js +1 -0
  262. package/dist/web/assets/open-db-tabs-CtWIWHOa.js.br +0 -0
  263. package/dist/web/assets/open-db-tabs-CtWIWHOa.js.gz +0 -0
  264. package/dist/web/assets/open-settings-EXR4zoZG.js +1 -0
  265. package/dist/web/assets/overview-panel-DEGF2DmZ.js +1 -0
  266. package/dist/web/assets/overview-panel-DEGF2DmZ.js.br +0 -0
  267. package/dist/web/assets/overview-panel-DEGF2DmZ.js.gz +0 -0
  268. package/dist/web/assets/panel-store-BJhazigC.js +1 -0
  269. package/dist/web/assets/panel-store-BJhazigC.js.br +0 -0
  270. package/dist/web/assets/panel-store-BJhazigC.js.gz +0 -0
  271. package/dist/web/assets/patch-tab-metadata-C92YkrRX.js +1 -0
  272. package/dist/web/assets/pdf-preview-C9gMtv2a.js +1 -0
  273. package/dist/web/assets/pdf-preview-C9gMtv2a.js.br +0 -0
  274. package/dist/web/assets/pdf-preview-C9gMtv2a.js.gz +0 -0
  275. package/dist/web/assets/performance-panel-TkwfKIZa.js +3 -0
  276. package/dist/web/assets/performance-panel-TkwfKIZa.js.br +0 -0
  277. package/dist/web/assets/performance-panel-TkwfKIZa.js.gz +0 -0
  278. package/dist/web/assets/portal-container-context-NBi-KGK0.js +1 -0
  279. package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js +1 -0
  280. package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.br +0 -0
  281. package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.gz +0 -0
  282. package/dist/web/assets/pptx-export-B2wCBWlV.js +111 -0
  283. package/dist/web/assets/pptx-export-B2wCBWlV.js.br +0 -0
  284. package/dist/web/assets/pptx-export-B2wCBWlV.js.gz +0 -0
  285. package/dist/web/assets/problems-panel-CDzwSJn6.js +1 -0
  286. package/dist/web/assets/problems-panel-CDzwSJn6.js.br +0 -0
  287. package/dist/web/assets/problems-panel-CDzwSJn6.js.gz +0 -0
  288. package/dist/web/assets/process-row-format-CytRH7g2.js +1 -0
  289. package/dist/web/assets/process-table-C_B39GHm.js +1 -0
  290. package/dist/web/assets/process-table-C_B39GHm.js.br +0 -0
  291. package/dist/web/assets/process-table-C_B39GHm.js.gz +0 -0
  292. package/dist/web/assets/project-framework-store-DwLxaRan.js +1 -0
  293. package/dist/web/assets/project-store-BLGl9IAO.js +1 -0
  294. package/dist/web/assets/project-store-BLGl9IAO.js.br +0 -0
  295. package/dist/web/assets/project-store-BLGl9IAO.js.gz +0 -0
  296. package/dist/web/assets/proxy-settings-section-CvaOvYIv.js +1 -0
  297. package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.br +0 -0
  298. package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.gz +0 -0
  299. package/dist/web/assets/query-audit-section-D_WDp1m-.js +1 -0
  300. package/dist/web/assets/query-audit-section-D_WDp1m-.js.br +0 -0
  301. package/dist/web/assets/query-audit-section-D_WDp1m-.js.gz +0 -0
  302. package/dist/web/assets/query-tab-B8aMpAbI.js +22 -0
  303. package/dist/web/assets/query-tab-B8aMpAbI.js.br +0 -0
  304. package/dist/web/assets/query-tab-B8aMpAbI.js.gz +0 -0
  305. package/dist/web/assets/react-BZ0kba1-.js +1 -0
  306. package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js +1 -0
  307. package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.br +0 -0
  308. package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.gz +0 -0
  309. package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js +1 -0
  310. package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.br +0 -0
  311. package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.gz +0 -0
  312. package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js +2 -0
  313. package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.br +0 -0
  314. package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.gz +0 -0
  315. package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js +1 -0
  316. package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.br +0 -0
  317. package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.gz +0 -0
  318. package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js +1 -0
  319. package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.br +0 -0
  320. package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.gz +0 -0
  321. package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js +1 -0
  322. package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js.br +0 -0
  323. package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js.gz +0 -0
  324. package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js +1 -0
  325. package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.br +0 -0
  326. package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.gz +0 -0
  327. package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js +1 -0
  328. package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.br +0 -0
  329. package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.gz +0 -0
  330. package/dist/web/assets/review-code-B4osj0k1.js +5 -0
  331. package/dist/web/assets/review-code-B4osj0k1.js.br +0 -0
  332. package/dist/web/assets/review-code-B4osj0k1.js.gz +0 -0
  333. package/dist/web/assets/run-in-terminal-button-m3i-Hcou.js +1 -0
  334. package/dist/web/assets/run-in-terminal-ujoc25vj.js +1 -0
  335. package/dist/web/assets/save-as-dialog-DpXv_f1d.js +1 -0
  336. package/dist/web/assets/save-as-dialog-DpXv_f1d.js.br +5 -0
  337. package/dist/web/assets/save-as-dialog-DpXv_f1d.js.gz +0 -0
  338. package/dist/web/assets/schedules-settings-section-BbaPbc28.js +1 -0
  339. package/dist/web/assets/schedules-settings-section-BbaPbc28.js.br +0 -0
  340. package/dist/web/assets/schedules-settings-section-BbaPbc28.js.gz +0 -0
  341. package/dist/web/assets/scroll-area-DOlQJGZp.js +1 -0
  342. package/dist/web/assets/scroll-area-DOlQJGZp.js.br +0 -0
  343. package/dist/web/assets/scroll-area-DOlQJGZp.js.gz +0 -0
  344. package/dist/web/assets/send-to-chat-CWV1qd3c.js +1 -0
  345. package/dist/web/assets/send-to-chat-CWV1qd3c.js.br +0 -0
  346. package/dist/web/assets/send-to-chat-CWV1qd3c.js.gz +0 -0
  347. package/dist/web/assets/separator-DmU9aJwq.js +1 -0
  348. package/dist/web/assets/services-panel-CZQOrvth.js +1 -0
  349. package/dist/web/assets/services-panel-CZQOrvth.js.br +0 -0
  350. package/dist/web/assets/services-panel-CZQOrvth.js.gz +0 -0
  351. package/dist/web/assets/session-changes-bar-VfS2sHuH.js +1 -0
  352. package/dist/web/assets/session-changes-bar-VfS2sHuH.js.br +0 -0
  353. package/dist/web/assets/session-changes-bar-VfS2sHuH.js.gz +0 -0
  354. package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js +1 -0
  355. package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js.br +0 -0
  356. package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js.gz +0 -0
  357. package/dist/web/assets/session-review-tab-Aq3FEooH.js +6 -0
  358. package/dist/web/assets/session-review-tab-Aq3FEooH.js.br +0 -0
  359. package/dist/web/assets/session-review-tab-Aq3FEooH.js.gz +0 -0
  360. package/dist/web/assets/settings-body-vXbOWchN.js +1 -0
  361. package/dist/web/assets/settings-body-vXbOWchN.js.br +0 -0
  362. package/dist/web/assets/settings-body-vXbOWchN.js.gz +0 -0
  363. package/dist/web/assets/settings-categories-Ajj4ui27.js +1 -0
  364. package/dist/web/assets/settings-categories-Ajj4ui27.js.br +0 -0
  365. package/dist/web/assets/settings-categories-Ajj4ui27.js.gz +0 -0
  366. package/dist/web/assets/settings-rows-DD7Gxmst.js +1 -0
  367. package/dist/web/assets/settings-rows-DD7Gxmst.js.br +0 -0
  368. package/dist/web/assets/settings-rows-DD7Gxmst.js.gz +0 -0
  369. package/dist/web/assets/settings-section-content-CVtvJ6ze.js +1 -0
  370. package/dist/web/assets/settings-section-content-DkUJFop6.js +2 -0
  371. package/dist/web/assets/settings-section-content-DkUJFop6.js.br +0 -0
  372. package/dist/web/assets/settings-section-content-DkUJFop6.js.gz +0 -0
  373. package/dist/web/assets/settings-store-B4mLp19V.js +2 -0
  374. package/dist/web/assets/settings-store-B4mLp19V.js.br +0 -0
  375. package/dist/web/assets/settings-store-B4mLp19V.js.gz +0 -0
  376. package/dist/web/assets/settings-tab-Cdv9_OIe.js +1 -0
  377. package/dist/web/assets/settings-window-content-DLa6Ph4u.js +1 -0
  378. package/dist/web/assets/share-BV49OI6q.css +2 -0
  379. package/dist/web/assets/share-BV49OI6q.css.br +0 -0
  380. package/dist/web/assets/share-BV49OI6q.css.gz +0 -0
  381. package/dist/web/assets/share-D5ufGmNI.js +9 -0
  382. package/dist/web/assets/share-D5ufGmNI.js.br +0 -0
  383. package/dist/web/assets/share-D5ufGmNI.js.gz +0 -0
  384. package/dist/web/assets/slash-command-picker-lILYDfK3.js +1 -0
  385. package/dist/web/assets/slash-command-picker-lILYDfK3.js.br +0 -0
  386. package/dist/web/assets/slash-command-picker-lILYDfK3.js.gz +0 -0
  387. package/dist/web/assets/sortable-header-DwzTFLkG.js +1 -0
  388. package/dist/web/assets/sortable-header-DwzTFLkG.js.br +0 -0
  389. package/dist/web/assets/sortable-header-DwzTFLkG.js.gz +0 -0
  390. package/dist/web/assets/split-sql-statements-DcAeXbk_.js +5 -0
  391. package/dist/web/assets/split-sql-statements-DcAeXbk_.js.br +0 -0
  392. package/dist/web/assets/split-sql-statements-DcAeXbk_.js.gz +0 -0
  393. package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js +1 -0
  394. package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js.br +0 -0
  395. package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js.gz +0 -0
  396. package/dist/web/assets/sql-object-tab-Da42SMK5.js +1 -0
  397. package/dist/web/assets/sql-object-tab-Da42SMK5.js.br +0 -0
  398. package/dist/web/assets/sql-object-tab-Da42SMK5.js.gz +0 -0
  399. package/dist/web/assets/sqlite-viewer-V3SKNukY.js +1 -0
  400. package/dist/web/assets/sqlite-viewer-V3SKNukY.js.br +0 -0
  401. package/dist/web/assets/sqlite-viewer-V3SKNukY.js.gz +0 -0
  402. package/dist/web/assets/start-ellipsis-CU8GkxaV.js +1 -0
  403. package/dist/web/assets/structure-save-dialog-B635iyPI.js +1 -0
  404. package/dist/web/assets/structure-save-dialog-B635iyPI.js.br +0 -0
  405. package/dist/web/assets/structure-save-dialog-B635iyPI.js.gz +0 -0
  406. package/dist/web/assets/structure-tab-Co9d8ktU.js +3 -0
  407. package/dist/web/assets/structure-tab-Co9d8ktU.js.br +0 -0
  408. package/dist/web/assets/structure-tab-Co9d8ktU.js.gz +0 -0
  409. package/dist/web/assets/system-monitor-body-DC0j8RqP.js +2 -0
  410. package/dist/web/assets/system-monitor-body-DC0j8RqP.js.br +0 -0
  411. package/dist/web/assets/system-monitor-body-DC0j8RqP.js.gz +0 -0
  412. package/dist/web/assets/system-monitor-tab-DA8BcdXo.js +1 -0
  413. package/dist/web/assets/system-monitor-window-content-BiuLo8XW.js +1 -0
  414. package/dist/web/assets/tab-host-window-content-Crvt1r5F.js +1 -0
  415. package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.br +0 -0
  416. package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.gz +0 -0
  417. package/dist/web/assets/tab-store-D5I52eLN.js +1 -0
  418. package/dist/web/assets/table-tab-C2cYw7a0.js +2 -0
  419. package/dist/web/assets/table-tab-C2cYw7a0.js.br +0 -0
  420. package/dist/web/assets/table-tab-C2cYw7a0.js.gz +0 -0
  421. package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js +1 -0
  422. package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.br +0 -0
  423. package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.gz +0 -0
  424. package/dist/web/assets/terminal-tab-CrKxibGC.js +3 -0
  425. package/dist/web/assets/terminal-tab-CrKxibGC.js.br +0 -0
  426. package/dist/web/assets/terminal-tab-CrKxibGC.js.gz +0 -0
  427. package/dist/web/assets/tool-cards-BRto67jM.js +15 -0
  428. package/dist/web/assets/tool-cards-BRto67jM.js.br +0 -0
  429. package/dist/web/assets/tool-cards-BRto67jM.js.gz +0 -0
  430. package/dist/web/assets/tools-settings-section-DEvZsrxq.js +1 -0
  431. package/dist/web/assets/tools-settings-section-DEvZsrxq.js.br +0 -0
  432. package/dist/web/assets/tools-settings-section-DEvZsrxq.js.gz +0 -0
  433. package/dist/web/assets/use-at-most-wide-BHsrzvv3.js +1 -0
  434. package/dist/web/assets/use-blob-url-Clm7wbB_.js +1 -0
  435. package/dist/web/assets/use-db-driver-installed-anzWkGi5.js +1 -0
  436. package/dist/web/assets/use-db-read-BCYhIrJM.js +1 -0
  437. package/dist/web/assets/use-db-read-BCYhIrJM.js.br +0 -0
  438. package/dist/web/assets/use-db-read-BCYhIrJM.js.gz +0 -0
  439. package/dist/web/assets/use-db-tab-B8LjdDb7.js +1 -0
  440. package/dist/web/assets/use-db-tab-B8LjdDb7.js.br +0 -0
  441. package/dist/web/assets/use-db-tab-B8LjdDb7.js.gz +0 -0
  442. package/dist/web/assets/use-design-canvas-check-DBsLf1At.js +1 -0
  443. package/dist/web/assets/use-design-canvas-check-DBsLf1At.js.br +0 -0
  444. package/dist/web/assets/use-design-canvas-check-DBsLf1At.js.gz +0 -0
  445. package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js +1 -0
  446. package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js.br +0 -0
  447. package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js.gz +0 -0
  448. package/dist/web/assets/use-inline-blame-CRWJU6Rq.js +16 -0
  449. package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.br +0 -0
  450. package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.gz +0 -0
  451. package/dist/web/assets/use-is-mobile-VRV9eZy1.js +1 -0
  452. package/dist/web/assets/use-lsp-B-otjr-6.js +6 -0
  453. package/dist/web/assets/use-lsp-B-otjr-6.js.br +0 -0
  454. package/dist/web/assets/use-lsp-B-otjr-6.js.gz +0 -0
  455. package/dist/web/assets/use-monaco-theme-BiDXRJ4e.js +1 -0
  456. package/dist/web/assets/use-opener-focus-CDRKhHwX.js +1 -0
  457. package/dist/web/assets/use-process-kill-BW2UW0mZ.js +1 -0
  458. package/dist/web/assets/use-process-kill-BW2UW0mZ.js.br +0 -0
  459. package/dist/web/assets/use-process-kill-BW2UW0mZ.js.gz +0 -0
  460. package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js +4 -0
  461. package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.br +0 -0
  462. package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.gz +0 -0
  463. package/dist/web/assets/use-visual-viewport-MmugpRg-.js +1 -0
  464. package/dist/web/assets/use-websocket-n3Ud9vEA.js +1 -0
  465. package/dist/web/assets/vendor-markdown-C-P1aR4p.js +291 -0
  466. package/dist/web/assets/vendor-markdown-C-P1aR4p.js.br +0 -0
  467. package/dist/web/assets/vendor-markdown-C-P1aR4p.js.gz +0 -0
  468. package/dist/web/assets/vendor-ui-BTSIXzhZ.js +45 -0
  469. package/dist/web/assets/vendor-ui-BTSIXzhZ.js.br +0 -0
  470. package/dist/web/assets/vendor-ui-BTSIXzhZ.js.gz +0 -0
  471. package/dist/web/assets/video-preview-CjB6wesi.js +1 -0
  472. package/dist/web/assets/video-preview-CjB6wesi.js.br +0 -0
  473. package/dist/web/assets/video-preview-CjB6wesi.js.gz +0 -0
  474. package/dist/web/assets/voice-settings-section-C6Wb6q5o.js +1 -0
  475. package/dist/web/assets/voice-settings-section-C6Wb6q5o.js.br +0 -0
  476. package/dist/web/assets/voice-settings-section-C6Wb6q5o.js.gz +0 -0
  477. package/dist/web/assets/web-preview-tab-doNpegW3.js +1 -0
  478. package/dist/web/assets/web-preview-tab-doNpegW3.js.br +0 -0
  479. package/dist/web/assets/web-preview-tab-doNpegW3.js.gz +0 -0
  480. package/dist/web/assets/window-store-DqX_qmkQ.js +1 -0
  481. package/dist/web/assets/window-store-DqX_qmkQ.js.br +0 -0
  482. package/dist/web/assets/window-store-DqX_qmkQ.js.gz +0 -0
  483. package/dist/web/assets/ws-auth-CbF6GqxP.js +1 -0
  484. package/dist/web/design-share-page/index.html +18 -0
  485. package/dist/web/index.html +47 -47
  486. package/dist/web/index.html.br +0 -0
  487. package/dist/web/index.html.gz +0 -0
  488. package/dist/web/sw.js +1 -1
  489. package/dist/web/sw.js.br +0 -0
  490. package/dist/web/sw.js.gz +0 -0
  491. package/docs/architecture/ai-chat-and-providers.md +258 -26
  492. package/docs/architecture/data-and-storage.md +9 -3
  493. package/docs/architecture/workspace-and-ui.md +42 -5
  494. package/docs/project-roadmap.md +5 -0
  495. package/package.json +6 -2
  496. package/scripts/gen-product-icons.ts +1 -0
  497. package/src/cli/commands/db-cmd.ts +79 -1
  498. package/src/providers/claude-agent-sdk-query-options.ts +42 -10
  499. package/src/providers/claude-agent-sdk.ts +19 -6
  500. package/src/providers/codex-app-server/codex-provider.ts +9 -3
  501. package/src/providers/codex-app-server/codex-thread-params.ts +34 -4
  502. package/src/server/index.ts +17 -5
  503. package/src/server/middleware/access-log.ts +6 -3
  504. package/src/server/routes/accounts.ts +3 -2
  505. package/src/server/routes/chat-file-changes.ts +15 -1
  506. package/src/server/routes/chat.ts +92 -18
  507. package/src/server/routes/database-query.ts +14 -5
  508. package/src/server/routes/database.ts +14 -0
  509. package/src/server/routes/debug-crash.ts +30 -0
  510. package/src/server/routes/design-comments.ts +56 -7
  511. package/src/server/routes/design-share-address.ts +20 -0
  512. package/src/server/routes/design-share-guest-comments.ts +120 -0
  513. package/src/server/routes/design-share-guest-files.ts +99 -0
  514. package/src/server/routes/design-share-guest-shared.ts +95 -0
  515. package/src/server/routes/design-share-guest.ts +77 -0
  516. package/src/server/routes/design-shares.ts +90 -0
  517. package/src/server/routes/designs.ts +2 -0
  518. package/src/server/routes/settings.ts +12 -0
  519. package/src/server/routes/static.ts +10 -2
  520. package/src/server/ws/chat.ts +113 -39
  521. package/src/server/ws/global.ts +10 -8
  522. package/src/services/account.service.ts +57 -18
  523. package/src/services/chat.service.ts +16 -6
  524. package/src/services/db-ai-tools/db-ai-connections.ts +48 -0
  525. package/src/services/db-ai-tools/db-ai-format.ts +107 -0
  526. package/src/services/db-ai-tools/db-ai-run.ts +199 -0
  527. package/src/services/db-ai-tools/db-ai-target.ts +59 -0
  528. package/src/services/db-ai-tools/db-ai-tools-endpoint.ts +225 -0
  529. package/src/services/db-ai-tools/db-ai-tools-tokens.ts +33 -0
  530. package/src/services/db-ai-tools/db-ai-tools-tool.ts +131 -0
  531. package/src/services/db-ai-tools/db-approval-broker.ts +157 -0
  532. package/src/services/db.service.ts +25 -1
  533. package/src/services/design/bridge/bridge-picker.ts +15 -5
  534. package/src/services/design/bridge/guest-bridge.ts +19 -0
  535. package/src/services/design/comments/design-comment-element-context.ts +28 -6
  536. package/src/services/design/comments/design-comment-input.ts +47 -0
  537. package/src/services/design/comments/design-comment-views.ts +146 -0
  538. package/src/services/design/comments/design-comments-revision.ts +19 -0
  539. package/src/services/design/comments/design-comments-store.ts +82 -9
  540. package/src/services/design/design-comment-replies.service.ts +126 -0
  541. package/src/services/design/design-comments.service.ts +77 -34
  542. package/src/services/design/design-restore.service.ts +6 -2
  543. package/src/services/design/design-snapshots.service.ts +8 -2
  544. package/src/services/design/design-store.service.ts +7 -1
  545. package/src/services/design/design-write-rate-limit.ts +11 -17
  546. package/src/services/design/preview/design-guest-alias.ts +64 -0
  547. package/src/services/design/preview/design-preview-html.ts +16 -3
  548. package/src/services/design/preview/design-preview-scope.ts +29 -5
  549. package/src/services/design/share/design-share-address.ts +81 -0
  550. package/src/services/design/share/design-share-changed-files.ts +74 -0
  551. package/src/services/design/share/design-share-client-key.ts +72 -0
  552. package/src/services/design/share/design-share-code.ts +116 -0
  553. package/src/services/design/share/design-share-comments.service.ts +162 -0
  554. package/src/services/design/share/design-share-guest-link.ts +109 -0
  555. package/src/services/design/share/design-share-guest-page.ts +86 -0
  556. package/src/services/design/share/design-share-link-rules.ts +83 -0
  557. package/src/services/design/share/design-share-links-store.ts +157 -0
  558. package/src/services/design/share/design-share-links.service.ts +174 -0
  559. package/src/services/design/share/design-share-notifier.ts +192 -0
  560. package/src/services/design/share/design-share-rate-limit.ts +71 -0
  561. package/src/services/design/share/design-share-resolve.ts +31 -0
  562. package/src/services/mcp-http-endpoint.ts +23 -10
  563. package/src/services/mysql.service.ts +6 -2
  564. package/src/services/notification-format.ts +10 -2
  565. package/src/services/notification-link.ts +1 -1
  566. package/src/services/notification.service.ts +47 -15
  567. package/src/services/ppm-password.ts +26 -0
  568. package/src/services/project-name-for-path.ts +18 -0
  569. package/src/services/query-audit/query-audit.service.ts +7 -4
  570. package/src/services/remote-desktop/access-unit-assembler.ts +11 -7
  571. package/src/services/remote-desktop/nal-splitter.ts +14 -1
  572. package/src/services/remote-desktop/remote-desktop-capture-wayland.ts +47 -21
  573. package/src/services/remote-desktop/remote-desktop-encoder-args.ts +5 -3
  574. package/src/services/session-file-baselines/session-file-baselines.service.ts +48 -0
  575. package/src/services/session-file-baselines/session-file-blame.ts +57 -24
  576. package/src/services/session-file-baselines/session-file-changes.service.ts +220 -22
  577. package/src/services/session-file-baselines/session-file-history.ts +5 -1
  578. package/src/services/session-file-baselines/session-file-writes.ts +28 -0
  579. package/src/services/sliding-window-limiter.ts +106 -0
  580. package/src/services/tab-tools-mcp/open-url-tool.ts +149 -0
  581. package/src/services/tab-tools-mcp/tab-open-broker.ts +12 -4
  582. package/src/services/tab-tools-mcp/tab-tools-mcp-endpoint.ts +66 -22
  583. package/src/services/tab-tools-mcp/tab-tools-mcp-tokens.ts +3 -1
  584. package/src/services/tab-tools-mcp/tab-tools-mcp-tool.ts +78 -6
  585. package/src/services/tab-tools-mcp/terminal-text.ts +45 -0
  586. package/src/services/tab-tools-mcp/terminal-tools.ts +297 -0
  587. package/src/services/terminal.service.ts +39 -4
  588. package/src/shared/db-ai-tools.ts +118 -0
  589. package/src/shared/db-query-script.ts +16 -0
  590. package/src/shared/design-comment-thread-types.ts +80 -0
  591. package/src/shared/design-comment-types.ts +53 -4
  592. package/src/shared/design-share-guest-types.ts +59 -0
  593. package/src/shared/design-share-types.ts +100 -0
  594. package/src/shared/notification-settings.ts +4 -3
  595. package/src/shared/ppm-tools.ts +39 -0
  596. package/src/shared/session-file-changes.ts +16 -0
  597. package/src/shared/tab-open-protocol.ts +50 -6
  598. package/src/shared/untrusted-text.ts +15 -1
  599. package/src/types/chat.ts +7 -1
  600. package/src/types/config.ts +5 -2
  601. package/src/types/database.ts +6 -0
  602. package/src/web/components/chat/chat-history-bar.tsx +10 -6
  603. package/src/web/components/chat/chat-tab.tsx +7 -1
  604. package/src/web/components/chat/db-execute-approval-card.tsx +100 -0
  605. package/src/web/components/chat/db-tool-card.tsx +42 -0
  606. package/src/web/components/chat/device-tool-card.tsx +45 -0
  607. package/src/web/components/chat/message-input.tsx +9 -6
  608. package/src/web/components/chat/message-list.tsx +6 -1
  609. package/src/web/components/chat/message-markdown.tsx +6 -3
  610. package/src/web/components/chat/message-user-bubble.tsx +2 -1
  611. package/src/web/components/chat/model-thinking-selector.tsx +6 -4
  612. package/src/web/components/chat/prompt-cache-chip.tsx +1 -1
  613. package/src/web/components/chat/running-agents-bar.tsx +164 -76
  614. package/src/web/components/chat/session-changes-bar.tsx +46 -13
  615. package/src/web/components/chat/tool-cards.tsx +29 -1
  616. package/src/web/components/chat/turn-change-rollup.tsx +8 -1
  617. package/src/web/components/chat/usage-badge.tsx +3 -3
  618. package/src/web/components/database/query/query-run-state.ts +11 -1
  619. package/src/web/components/database/query/query-tab.tsx +33 -7
  620. package/src/web/components/database/query/use-query-runner.ts +3 -0
  621. package/src/web/components/database/query/write-once-dialog.tsx +70 -0
  622. package/src/web/components/design/canvas/design-canvas-pane.tsx +5 -2
  623. package/src/web/components/design/comments/comment-author-label.tsx +23 -0
  624. package/src/web/components/design/comments/comment-composer.tsx +6 -14
  625. package/src/web/components/design/comments/comment-pins-overlay.tsx +8 -3
  626. package/src/web/components/design/comments/comment-thread-replies.tsx +82 -0
  627. package/src/web/components/design/comments/comment-thread-text-box.tsx +69 -0
  628. package/src/web/components/design/comments/comment-thread-view.tsx +115 -0
  629. package/src/web/components/design/comments/comments-panel.tsx +33 -10
  630. package/src/web/components/design/comments/comments-send-preview.tsx +20 -8
  631. package/src/web/components/design/comments/design-comments-layer.tsx +3 -1
  632. package/src/web/components/design/comments/use-comment-pins.ts +3 -0
  633. package/src/web/components/design/comments/use-design-comments-feature.ts +40 -25
  634. package/src/web/components/design/comments/use-design-comments.ts +44 -12
  635. package/src/web/components/design/design-split-layout.tsx +106 -10
  636. package/src/web/components/design/design-tab-context.ts +2 -0
  637. package/src/web/components/design/design-tab.tsx +5 -1
  638. package/src/web/components/design/design-toolbar.tsx +24 -4
  639. package/src/web/components/design/share/design-share-dialog.tsx +81 -0
  640. package/src/web/components/design/share/new-share-link-form.tsx +85 -0
  641. package/src/web/components/design/share/share-address-block.tsx +101 -0
  642. package/src/web/components/design/share/share-changed-files.tsx +30 -0
  643. package/src/web/components/design/share/share-expiry-picker.tsx +44 -0
  644. package/src/web/components/design/share/share-repin-panel.tsx +64 -0
  645. package/src/web/components/design/share/share-row-panel.tsx +35 -0
  646. package/src/web/components/design/share/share-version-picker.tsx +67 -0
  647. package/src/web/components/design/share/shared-link-action-panels.tsx +120 -0
  648. package/src/web/components/design/share/shared-link-row.tsx +131 -0
  649. package/src/web/components/design/share/shared-links-list.tsx +33 -0
  650. package/src/web/components/design/share/use-share-address.ts +74 -0
  651. package/src/web/components/design/share/use-share-links.ts +93 -0
  652. package/src/web/components/design/use-design-layout.ts +7 -4
  653. package/src/web/components/editor/diff-viewer.tsx +16 -12
  654. package/src/web/components/editor/docx-preview.tsx +7 -2
  655. package/src/web/components/floating-window/close-window.ts +32 -0
  656. package/src/web/components/floating-window/floating-window.tsx +65 -24
  657. package/src/web/components/floating-window/open-tab-in-pip.ts +3 -0
  658. package/src/web/components/floating-window/use-window-drag.ts +33 -7
  659. package/src/web/components/floating-window/use-window-meta.ts +138 -0
  660. package/src/web/components/floating-window/window-chrome-contract.ts +19 -2
  661. package/src/web/components/floating-window/window-dock-layout.ts +72 -0
  662. package/src/web/components/floating-window/window-dock-list.tsx +156 -0
  663. package/src/web/components/floating-window/window-dock.tsx +192 -0
  664. package/src/web/components/floating-window/window-geometry.ts +39 -1
  665. package/src/web/components/floating-window/window-layer.tsx +59 -23
  666. package/src/web/components/floating-window/window-persistence.ts +16 -3
  667. package/src/web/components/floating-window/window-store-types.ts +13 -2
  668. package/src/web/components/floating-window/window-store.ts +75 -8
  669. package/src/web/components/floating-window/window-title-identity.tsx +86 -0
  670. package/src/web/components/layout/status-bar.tsx +3 -0
  671. package/src/web/components/layout/tab-pop-out-menu-item.tsx +2 -2
  672. package/src/web/components/logs/open-logs.ts +0 -1
  673. package/src/web/components/os-explorer/actions/explorer-actions-upload.ts +2 -1
  674. package/src/web/components/os-explorer/skins/macos-window-chrome.tsx +17 -11
  675. package/src/web/components/os-explorer/skins/windows-window-chrome.tsx +14 -5
  676. package/src/web/components/remote-desktop/use-remote-desktop-readiness.ts +8 -3
  677. package/src/web/components/settings/accounts/account-add-dialog.tsx +25 -13
  678. package/src/web/components/settings/accounts/claude-accounts-section.tsx +3 -3
  679. package/src/web/components/settings/ai-settings-section.tsx +0 -20
  680. package/src/web/components/settings/design-settings-section.tsx +3 -0
  681. package/src/web/components/settings/design-window-setting.tsx +28 -0
  682. package/src/web/components/settings/settings-categories.ts +3 -0
  683. package/src/web/components/settings/settings-section-content.tsx +1 -0
  684. package/src/web/components/settings/tools-settings-section.tsx +120 -0
  685. package/src/web/components/shared/docx-html-sanitize.ts +59 -0
  686. package/src/web/components/shared/markdown-code-block.tsx +3 -1
  687. package/src/web/components/shared/markdown-renderer.tsx +15 -3
  688. package/src/web/components/shared/markdown-sanitize.ts +65 -0
  689. package/src/web/components/web-preview/web-preview-tab.tsx +6 -3
  690. package/src/web/design-share-page/index.html +17 -0
  691. package/src/web/design-share-page/main.tsx +11 -0
  692. package/src/web/design-share-page/share-api.ts +131 -0
  693. package/src/web/design-share-page/share-app.tsx +14 -0
  694. package/src/web/design-share-page/share-bottom-sheet.tsx +61 -0
  695. package/src/web/design-share-page/share-canvas.tsx +92 -0
  696. package/src/web/design-share-page/share-composer.tsx +104 -0
  697. package/src/web/design-share-page/share-entry.tsx +92 -0
  698. package/src/web/design-share-page/share-identity.ts +81 -0
  699. package/src/web/design-share-page/share-name-prompt.tsx +59 -0
  700. package/src/web/design-share-page/share-panel-content.tsx +57 -0
  701. package/src/web/design-share-page/share-pins-overlay.tsx +50 -0
  702. package/src/web/design-share-page/share-review.tsx +123 -0
  703. package/src/web/design-share-page/share-states.tsx +78 -0
  704. package/src/web/design-share-page/share-thread-model.ts +83 -0
  705. package/src/web/design-share-page/share-thread-view.tsx +61 -0
  706. package/src/web/design-share-page/share-threads-panel.tsx +103 -0
  707. package/src/web/design-share-page/share-toolbar.tsx +105 -0
  708. package/src/web/design-share-page/share-ui.ts +30 -0
  709. package/src/web/design-share-page/share.css +63 -0
  710. package/src/web/design-share-page/use-share-canvas.ts +51 -0
  711. package/src/web/design-share-page/use-share-info.ts +34 -0
  712. package/src/web/design-share-page/use-share-session.ts +75 -0
  713. package/src/web/design-share-page/use-share-threads.ts +139 -0
  714. package/src/web/hooks/use-chat.ts +5 -2
  715. package/src/web/hooks/use-design-session-redirect.ts +3 -2
  716. package/src/web/hooks/use-git-repo.ts +36 -16
  717. package/src/web/hooks/use-global-events.ts +4 -0
  718. package/src/web/hooks/use-inline-blame.ts +17 -11
  719. package/src/web/hooks/use-notification-clicks.ts +23 -5
  720. package/src/web/hooks/use-session-file-changes.ts +118 -41
  721. package/src/web/hooks/use-url-sync.ts +5 -4
  722. package/src/web/lib/api-settings.ts +2 -0
  723. package/src/web/lib/chat-attempt-lifecycle.ts +3 -1
  724. package/src/web/lib/db-tool-call.ts +57 -0
  725. package/src/web/lib/design/api-design-comments.ts +39 -9
  726. package/src/web/lib/design/api-design-shares.ts +47 -0
  727. package/src/web/lib/design/design-comments-prompt.ts +108 -23
  728. package/src/web/lib/design/design-layout-mode.ts +16 -1
  729. package/src/web/lib/design/design-share-address-state.ts +88 -0
  730. package/src/web/lib/design/design-share-expiry.ts +96 -0
  731. package/src/web/lib/design/design-share-link-status.ts +66 -0
  732. package/src/web/lib/design/design-view-prefs.ts +20 -1
  733. package/src/web/lib/design/open-design-tab.ts +54 -1
  734. package/src/web/lib/git-repo-scope.ts +60 -0
  735. package/src/web/lib/icons.generated.tsx +3 -1
  736. package/src/web/lib/model-display-name.ts +16 -0
  737. package/src/web/lib/open-ai-tab.ts +129 -19
  738. package/src/web/lib/running-agent-rows.ts +52 -0
  739. package/src/web/lib/session-file-changes-client.ts +6 -0
  740. package/src/web/lib/session-file-changes.ts +13 -0
  741. package/src/web/lib/tab-tool-call.ts +37 -1
  742. package/src/web/lib/utils.ts +4 -1
  743. package/src/web/stores/panel-store.ts +13 -1
  744. package/src/web/stores/panel-utils.ts +9 -4
  745. package/src/web/stores/settings-store.ts +14 -0
  746. package/src/web/stores/window-panel-actions.ts +21 -3
  747. package/src/web/stores/window-panel-persistence.ts +2 -1
  748. package/src/web/sw-notification-click.ts +12 -1
  749. package/templates/skill/SKILL.md.tmpl +2 -1
  750. package/templates/skill/common-tasks.md +6 -0
  751. package/vite.config.ts +10 -0
  752. package/vite.share.config.ts +43 -0
  753. package/dist/web/assets/accounts-settings-section-DU-lTifs.js +0 -1
  754. package/dist/web/assets/accounts-settings-section-DU-lTifs.js.br +0 -0
  755. package/dist/web/assets/accounts-settings-section-DU-lTifs.js.gz +0 -0
  756. package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js +0 -1
  757. package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js.br +0 -0
  758. package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js.gz +0 -0
  759. package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js +0 -2
  760. package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js.br +0 -0
  761. package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js.gz +0 -0
  762. package/dist/web/assets/agent-session-sheet-store-BoBrAw5i.js +0 -1
  763. package/dist/web/assets/agent-session-window-content-CB_uvabH.js +0 -1
  764. package/dist/web/assets/agent-session-window-content-CB_uvabH.js.br +0 -0
  765. package/dist/web/assets/agent-session-window-content-CB_uvabH.js.gz +0 -0
  766. package/dist/web/assets/ai-resource-editor-Czearm3I.js +0 -1
  767. package/dist/web/assets/ai-resource-editor-Czearm3I.js.br +0 -0
  768. package/dist/web/assets/ai-resource-editor-Czearm3I.js.gz +0 -0
  769. package/dist/web/assets/ai-settings-section-AOgAUCgH.js +0 -1
  770. package/dist/web/assets/ai-settings-section-B_OFMlrt.js +0 -1
  771. package/dist/web/assets/ai-settings-section-B_OFMlrt.js.br +0 -0
  772. package/dist/web/assets/ai-settings-section-B_OFMlrt.js.gz +0 -0
  773. package/dist/web/assets/android-tab-L7DmLfHG.js +0 -2
  774. package/dist/web/assets/android-tab-L7DmLfHG.js.br +0 -0
  775. package/dist/web/assets/android-tab-L7DmLfHG.js.gz +0 -0
  776. package/dist/web/assets/api-client-DAQfiXg0.js +0 -1
  777. package/dist/web/assets/api-client-OiA8Ida1.js +0 -1
  778. package/dist/web/assets/api-client-OiA8Ida1.js.br +0 -0
  779. package/dist/web/assets/api-client-OiA8Ida1.js.gz +0 -0
  780. package/dist/web/assets/api-settings-D2H6gjen.js +0 -1
  781. package/dist/web/assets/api-settings-D2H6gjen.js.br +0 -0
  782. package/dist/web/assets/api-settings-D2H6gjen.js.gz +0 -0
  783. package/dist/web/assets/api-settings-DHhcUHtx.js +0 -1
  784. package/dist/web/assets/api-themes-CE8gPZ3X.js +0 -1
  785. package/dist/web/assets/appearance-settings-section-s3KWKTBm.js +0 -1
  786. package/dist/web/assets/appearance-settings-section-s3KWKTBm.js.br +0 -0
  787. package/dist/web/assets/appearance-settings-section-s3KWKTBm.js.gz +0 -0
  788. package/dist/web/assets/apps-panel-DaojtUvh.js +0 -1
  789. package/dist/web/assets/apps-panel-DaojtUvh.js.br +0 -0
  790. package/dist/web/assets/apps-panel-DaojtUvh.js.gz +0 -0
  791. package/dist/web/assets/audio-preview-CWcPZqTA.js +0 -1
  792. package/dist/web/assets/audio-preview-CWcPZqTA.js.br +0 -4
  793. package/dist/web/assets/audio-preview-CWcPZqTA.js.gz +0 -0
  794. package/dist/web/assets/branch-review-tab-9UB4ccpF.js +0 -1
  795. package/dist/web/assets/branch-review-tab-9UB4ccpF.js.br +0 -0
  796. package/dist/web/assets/branch-review-tab-9UB4ccpF.js.gz +0 -0
  797. package/dist/web/assets/button-Br60hGkw.js +0 -1
  798. package/dist/web/assets/button-Br60hGkw.js.br +0 -0
  799. package/dist/web/assets/button-Br60hGkw.js.gz +0 -0
  800. package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js +0 -1
  801. package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js.br +0 -0
  802. package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js.gz +0 -0
  803. package/dist/web/assets/chat-tab-DMVb_mgx.js +0 -1
  804. package/dist/web/assets/chat-tab-DMVb_mgx.js.br +0 -0
  805. package/dist/web/assets/chat-tab-DMVb_mgx.js.gz +0 -0
  806. package/dist/web/assets/chat-tab-s7uAnh-h.js +0 -17
  807. package/dist/web/assets/chat-tab-s7uAnh-h.js.br +0 -0
  808. package/dist/web/assets/chat-tab-s7uAnh-h.js.gz +0 -0
  809. package/dist/web/assets/code-editor-JK49X9EX.js +0 -10
  810. package/dist/web/assets/code-editor-JK49X9EX.js.br +0 -0
  811. package/dist/web/assets/code-editor-JK49X9EX.js.gz +0 -0
  812. package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js +0 -1
  813. package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js.br +0 -0
  814. package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js.gz +0 -0
  815. package/dist/web/assets/conflict-editor-rOpVkK9P.js +0 -19
  816. package/dist/web/assets/conflict-editor-rOpVkK9P.js.br +0 -0
  817. package/dist/web/assets/conflict-editor-rOpVkK9P.js.gz +0 -0
  818. package/dist/web/assets/connection-form-tab-BGmb918E.js +0 -4
  819. package/dist/web/assets/connection-form-tab-BGmb918E.js.br +0 -0
  820. package/dist/web/assets/connection-form-tab-BGmb918E.js.gz +0 -0
  821. package/dist/web/assets/context-menu-BoQ6lxte.js +0 -1
  822. package/dist/web/assets/context-menu-BoQ6lxte.js.br +0 -0
  823. package/dist/web/assets/context-menu-BoQ6lxte.js.gz +0 -0
  824. package/dist/web/assets/createLucideIcon-DBXq3G0e.js +0 -1
  825. package/dist/web/assets/createLucideIcon-DBXq3G0e.js.br +0 -0
  826. package/dist/web/assets/createLucideIcon-DBXq3G0e.js.gz +0 -0
  827. package/dist/web/assets/csv-preview-CM7su92m.js +0 -10
  828. package/dist/web/assets/csv-preview-CM7su92m.js.br +0 -0
  829. package/dist/web/assets/csv-preview-CM7su92m.js.gz +0 -0
  830. package/dist/web/assets/database-drivers-section-C6ZKPWaE.js +0 -1
  831. package/dist/web/assets/database-drivers-section-C6ZKPWaE.js.br +0 -0
  832. package/dist/web/assets/database-drivers-section-C6ZKPWaE.js.gz +0 -0
  833. package/dist/web/assets/db-explorer-store-BcLxq-X0.js +0 -1
  834. package/dist/web/assets/db-explorer-store-BcLxq-X0.js.br +0 -0
  835. package/dist/web/assets/db-explorer-store-BcLxq-X0.js.gz +0 -0
  836. package/dist/web/assets/db-tab-parts-DvmnlA6V.js +0 -1
  837. package/dist/web/assets/db-tab-parts-DvmnlA6V.js.br +0 -0
  838. package/dist/web/assets/db-tab-parts-DvmnlA6V.js.gz +0 -0
  839. package/dist/web/assets/db-types-9ac-eYxf.js +0 -1
  840. package/dist/web/assets/db-types-9ac-eYxf.js.br +0 -0
  841. package/dist/web/assets/db-types-9ac-eYxf.js.gz +0 -0
  842. package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js +0 -1
  843. package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js.br +0 -0
  844. package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js.gz +0 -0
  845. package/dist/web/assets/design-export-client-ClwRg798.js +0 -1
  846. package/dist/web/assets/design-export-client-ClwRg798.js.br +0 -0
  847. package/dist/web/assets/design-export-client-ClwRg798.js.gz +0 -0
  848. package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js +0 -1
  849. package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js.br +0 -0
  850. package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js.gz +0 -0
  851. package/dist/web/assets/design-settings-section-CuxZSLAr.js +0 -2
  852. package/dist/web/assets/design-settings-section-CuxZSLAr.js.br +0 -0
  853. package/dist/web/assets/design-settings-section-CuxZSLAr.js.gz +0 -0
  854. package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js +0 -3
  855. package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js.br +0 -0
  856. package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js.gz +0 -0
  857. package/dist/web/assets/design-tab-JlKmHVkd.js +0 -57
  858. package/dist/web/assets/design-tab-JlKmHVkd.js.br +0 -0
  859. package/dist/web/assets/design-tab-JlKmHVkd.js.gz +0 -0
  860. package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js +0 -1
  861. package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js.br +0 -0
  862. package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js.gz +0 -0
  863. package/dist/web/assets/dialog-DOaEX6AK.js +0 -1
  864. package/dist/web/assets/dialog-DOaEX6AK.js.br +0 -0
  865. package/dist/web/assets/dialog-DOaEX6AK.js.gz +0 -0
  866. package/dist/web/assets/diff-viewer-FidH7Nsq.js +0 -4
  867. package/dist/web/assets/diff-viewer-FidH7Nsq.js.br +0 -0
  868. package/dist/web/assets/diff-viewer-FidH7Nsq.js.gz +0 -0
  869. package/dist/web/assets/docx-preview-ENiLGqzy.js +0 -12
  870. package/dist/web/assets/docx-preview-ENiLGqzy.js.br +0 -0
  871. package/dist/web/assets/docx-preview-ENiLGqzy.js.gz +0 -0
  872. package/dist/web/assets/dropdown-menu-DB3yyoVz.js +0 -1
  873. package/dist/web/assets/dropdown-menu-DB3yyoVz.js.br +0 -0
  874. package/dist/web/assets/dropdown-menu-DB3yyoVz.js.gz +0 -0
  875. package/dist/web/assets/edit-diff-preview-D4EqC86X.js +0 -7
  876. package/dist/web/assets/edit-diff-preview-D4EqC86X.js.br +0 -0
  877. package/dist/web/assets/edit-diff-preview-D4EqC86X.js.gz +0 -0
  878. package/dist/web/assets/editor-dialog-DC7dUWAX.js +0 -1
  879. package/dist/web/assets/editor-dialog-DC7dUWAX.js.br +0 -0
  880. package/dist/web/assets/editor-dialog-DC7dUWAX.js.gz +0 -0
  881. package/dist/web/assets/editor-language-service-0pN0TxYN.js +0 -1
  882. package/dist/web/assets/editor-language-service-0pN0TxYN.js.br +0 -0
  883. package/dist/web/assets/editor-language-service-0pN0TxYN.js.gz +0 -0
  884. package/dist/web/assets/explorer-body-tFaUp9_Q.js +0 -2
  885. package/dist/web/assets/explorer-body-tFaUp9_Q.js.br +0 -0
  886. package/dist/web/assets/explorer-body-tFaUp9_Q.js.gz +0 -0
  887. package/dist/web/assets/explorer-model-BmgFEsj1.js +0 -1
  888. package/dist/web/assets/explorer-model-BmgFEsj1.js.br +0 -0
  889. package/dist/web/assets/explorer-model-BmgFEsj1.js.gz +0 -0
  890. package/dist/web/assets/explorer-window-content-XnRTZT_X.js +0 -1
  891. package/dist/web/assets/explorer-window-content-XnRTZT_X.js.br +0 -0
  892. package/dist/web/assets/explorer-window-content-XnRTZT_X.js.gz +0 -0
  893. package/dist/web/assets/extension-manager-section-DEbwRPf1.js +0 -1
  894. package/dist/web/assets/extension-manager-section-DEbwRPf1.js.br +0 -0
  895. package/dist/web/assets/extension-manager-section-DEbwRPf1.js.gz +0 -0
  896. package/dist/web/assets/extension-webview-C9ApceLU.js +0 -12
  897. package/dist/web/assets/extension-webview-C9ApceLU.js.br +0 -0
  898. package/dist/web/assets/extension-webview-C9ApceLU.js.gz +0 -0
  899. package/dist/web/assets/file-diff-lX1a7RLF.js +0 -1
  900. package/dist/web/assets/file-icons-DpwcJLL4.js +0 -1
  901. package/dist/web/assets/file-icons-DpwcJLL4.js.br +0 -0
  902. package/dist/web/assets/file-icons-DpwcJLL4.js.gz +0 -0
  903. package/dist/web/assets/file-store-Bk1WYfdy.js +0 -1
  904. package/dist/web/assets/file-store-Bk1WYfdy.js.br +0 -0
  905. package/dist/web/assets/file-store-Bk1WYfdy.js.gz +0 -0
  906. package/dist/web/assets/files-settings-section-C8MacVFQ.js +0 -1
  907. package/dist/web/assets/files-settings-section-C8MacVFQ.js.br +0 -0
  908. package/dist/web/assets/files-settings-section-C8MacVFQ.js.gz +0 -0
  909. package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js +0 -1
  910. package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js.br +0 -0
  911. package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js.gz +0 -0
  912. package/dist/web/assets/format-file-meta-C0LKHE3e.js +0 -1
  913. package/dist/web/assets/format-file-meta-C0LKHE3e.js.br +0 -0
  914. package/dist/web/assets/format-file-meta-C0LKHE3e.js.gz +0 -0
  915. package/dist/web/assets/fs-api-BQrIEcvo.js +0 -1
  916. package/dist/web/assets/fs-api-BQrIEcvo.js.br +0 -0
  917. package/dist/web/assets/fs-api-BQrIEcvo.js.gz +0 -0
  918. package/dist/web/assets/general-settings-section-DZRRGdlQ.js +0 -1
  919. package/dist/web/assets/general-settings-section-DZRRGdlQ.js.br +0 -0
  920. package/dist/web/assets/general-settings-section-DZRRGdlQ.js.gz +0 -0
  921. package/dist/web/assets/git-commit-horizontal-BVihXafd.js +0 -1
  922. package/dist/web/assets/git-log-panel-g2pBnu6r.js +0 -1
  923. package/dist/web/assets/git-log-panel-g2pBnu6r.js.br +0 -0
  924. package/dist/web/assets/git-log-panel-g2pBnu6r.js.gz +0 -0
  925. package/dist/web/assets/git-repo-store-BOYLnV67.js +0 -1
  926. package/dist/web/assets/git-repo-store-BOYLnV67.js.br +0 -0
  927. package/dist/web/assets/git-repo-store-BOYLnV67.js.gz +0 -0
  928. package/dist/web/assets/git-review-tab-BzI5mxWd.js +0 -3
  929. package/dist/web/assets/git-review-tab-BzI5mxWd.js.br +0 -0
  930. package/dist/web/assets/git-review-tab-BzI5mxWd.js.gz +0 -0
  931. package/dist/web/assets/glide-data-grid-BxvI3ehr.js +0 -177
  932. package/dist/web/assets/glide-data-grid-BxvI3ehr.js.br +0 -0
  933. package/dist/web/assets/glide-data-grid-BxvI3ehr.js.gz +0 -0
  934. package/dist/web/assets/grid-save-dialog-D55Po6Vu.js +0 -2
  935. package/dist/web/assets/grid-save-dialog-D55Po6Vu.js.br +0 -0
  936. package/dist/web/assets/grid-save-dialog-D55Po6Vu.js.gz +0 -0
  937. package/dist/web/assets/group-chat-tab-CoMC-Fx1.js +0 -1
  938. package/dist/web/assets/group-chat-tab-CoMC-Fx1.js.br +0 -0
  939. package/dist/web/assets/group-chat-tab-CoMC-Fx1.js.gz +0 -0
  940. package/dist/web/assets/icons-JMA45Ifw.js +0 -1
  941. package/dist/web/assets/icons-JMA45Ifw.js.br +0 -0
  942. package/dist/web/assets/icons-JMA45Ifw.js.gz +0 -0
  943. package/dist/web/assets/image-preview-D7KR11Xo.js +0 -1
  944. package/dist/web/assets/impexp-tab-JF6JF8eO.js +0 -1
  945. package/dist/web/assets/impexp-tab-JF6JF8eO.js.br +0 -0
  946. package/dist/web/assets/impexp-tab-JF6JF8eO.js.gz +0 -0
  947. package/dist/web/assets/index-DyYGWFVa.css +0 -1
  948. package/dist/web/assets/index-DyYGWFVa.css.br +0 -0
  949. package/dist/web/assets/index-DyYGWFVa.css.gz +0 -0
  950. package/dist/web/assets/index-ItT-dTPV.js +0 -59
  951. package/dist/web/assets/index-ItT-dTPV.js.br +0 -0
  952. package/dist/web/assets/index-ItT-dTPV.js.gz +0 -0
  953. package/dist/web/assets/input-CKGoVpYv.js +0 -1
  954. package/dist/web/assets/jira-watcher-section-CvyXLyjO.js +0 -1
  955. package/dist/web/assets/keybindings-store-CeEtx6js.js +0 -1
  956. package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js +0 -1
  957. package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js.br +0 -0
  958. package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js.gz +0 -0
  959. package/dist/web/assets/language-servers-section-DiYURB24.js +0 -2
  960. package/dist/web/assets/language-servers-section-DiYURB24.js.br +0 -0
  961. package/dist/web/assets/language-servers-section-DiYURB24.js.gz +0 -0
  962. package/dist/web/assets/logs-app-CJlNqOdc.js +0 -13
  963. package/dist/web/assets/logs-app-CJlNqOdc.js.br +0 -0
  964. package/dist/web/assets/logs-app-CJlNqOdc.js.gz +0 -0
  965. package/dist/web/assets/logs-tab-BoAlm_8H.js +0 -1
  966. package/dist/web/assets/logs-window-content-nNm4jl1s.js +0 -1
  967. package/dist/web/assets/lsp-client-LnKiMWeG.js +0 -1
  968. package/dist/web/assets/lsp-client-LnKiMWeG.js.br +0 -0
  969. package/dist/web/assets/lsp-client-LnKiMWeG.js.gz +0 -0
  970. package/dist/web/assets/markdown-renderer-8Hef5MLx.js +0 -1
  971. package/dist/web/assets/markdown-renderer-BH_CFPJw.js +0 -5
  972. package/dist/web/assets/markdown-renderer-BH_CFPJw.js.br +0 -0
  973. package/dist/web/assets/markdown-renderer-BH_CFPJw.js.gz +0 -0
  974. package/dist/web/assets/media-url-CsdZ6q_T.js +0 -1
  975. package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js +0 -1
  976. package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js.br +0 -0
  977. package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js.gz +0 -0
  978. package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js +0 -1
  979. package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js.br +0 -0
  980. package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js.gz +0 -0
  981. package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js +0 -1
  982. package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js.br +0 -0
  983. package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js.gz +0 -0
  984. package/dist/web/assets/new-design-dialog-CgBUrVFx.js +0 -1
  985. package/dist/web/assets/new-design-dialog-CgBUrVFx.js.br +0 -0
  986. package/dist/web/assets/new-design-dialog-CgBUrVFx.js.gz +0 -0
  987. package/dist/web/assets/notification-store-CXC7u6MW.js +0 -1
  988. package/dist/web/assets/notifications-settings-section-CPbx23nU.js +0 -1
  989. package/dist/web/assets/notifications-settings-section-CPbx23nU.js.br +0 -0
  990. package/dist/web/assets/notifications-settings-section-CPbx23nU.js.gz +0 -0
  991. package/dist/web/assets/onboarding-entry--MWe4amV.js +0 -1
  992. package/dist/web/assets/onboarding-entry--MWe4amV.js.br +0 -0
  993. package/dist/web/assets/onboarding-entry--MWe4amV.js.gz +0 -0
  994. package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js +0 -1
  995. package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js.br +0 -0
  996. package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js.gz +0 -0
  997. package/dist/web/assets/open-db-tabs-CkQe49j_.js +0 -1
  998. package/dist/web/assets/open-db-tabs-CkQe49j_.js.br +0 -0
  999. package/dist/web/assets/open-db-tabs-CkQe49j_.js.gz +0 -0
  1000. package/dist/web/assets/open-settings-DsGBn73g.js +0 -1
  1001. package/dist/web/assets/overview-panel-CcUGDvnt.js +0 -1
  1002. package/dist/web/assets/overview-panel-CcUGDvnt.js.br +0 -0
  1003. package/dist/web/assets/overview-panel-CcUGDvnt.js.gz +0 -0
  1004. package/dist/web/assets/panel-store-DmP16Fo0.js +0 -1
  1005. package/dist/web/assets/panel-store-DmP16Fo0.js.br +0 -0
  1006. package/dist/web/assets/panel-store-DmP16Fo0.js.gz +0 -0
  1007. package/dist/web/assets/patch-tab-metadata-B-jH5svY.js +0 -1
  1008. package/dist/web/assets/pdf-preview-DMUIWb9B.js +0 -1
  1009. package/dist/web/assets/pdf-preview-DMUIWb9B.js.br +0 -0
  1010. package/dist/web/assets/pdf-preview-DMUIWb9B.js.gz +0 -0
  1011. package/dist/web/assets/performance-panel-CJDLUwrs.js +0 -3
  1012. package/dist/web/assets/performance-panel-CJDLUwrs.js.br +0 -0
  1013. package/dist/web/assets/performance-panel-CJDLUwrs.js.gz +0 -0
  1014. package/dist/web/assets/portal-container-context-BXAsDqrB.js +0 -1
  1015. package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js +0 -1
  1016. package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js.br +0 -0
  1017. package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js.gz +0 -0
  1018. package/dist/web/assets/pptx-export-BxmgltJ4.js +0 -111
  1019. package/dist/web/assets/pptx-export-BxmgltJ4.js.br +0 -0
  1020. package/dist/web/assets/pptx-export-BxmgltJ4.js.gz +0 -0
  1021. package/dist/web/assets/problems-panel-DX32QDH_.js +0 -1
  1022. package/dist/web/assets/problems-panel-DX32QDH_.js.br +0 -0
  1023. package/dist/web/assets/problems-panel-DX32QDH_.js.gz +0 -0
  1024. package/dist/web/assets/process-row-format-CBw-CQCx.js +0 -1
  1025. package/dist/web/assets/process-table-CX-NhOg6.js +0 -1
  1026. package/dist/web/assets/process-table-CX-NhOg6.js.br +0 -0
  1027. package/dist/web/assets/process-table-CX-NhOg6.js.gz +0 -0
  1028. package/dist/web/assets/project-framework-store-Bi5dyHdx.js +0 -1
  1029. package/dist/web/assets/project-store-CEGoLMOl.js +0 -1
  1030. package/dist/web/assets/project-store-CEGoLMOl.js.br +0 -0
  1031. package/dist/web/assets/project-store-CEGoLMOl.js.gz +0 -0
  1032. package/dist/web/assets/proxy-settings-section-BGNvFe7e.js +0 -1
  1033. package/dist/web/assets/proxy-settings-section-BGNvFe7e.js.br +0 -0
  1034. package/dist/web/assets/proxy-settings-section-BGNvFe7e.js.gz +0 -0
  1035. package/dist/web/assets/query-audit-section-DTHI5GP7.js +0 -1
  1036. package/dist/web/assets/query-audit-section-DTHI5GP7.js.br +0 -0
  1037. package/dist/web/assets/query-audit-section-DTHI5GP7.js.gz +0 -0
  1038. package/dist/web/assets/query-tab-qMlIkHRk.js +0 -22
  1039. package/dist/web/assets/query-tab-qMlIkHRk.js.br +0 -0
  1040. package/dist/web/assets/query-tab-qMlIkHRk.js.gz +0 -0
  1041. package/dist/web/assets/react-PkBxFcos.js +0 -1
  1042. package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js +0 -1
  1043. package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js.br +0 -0
  1044. package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js.gz +0 -0
  1045. package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js +0 -1
  1046. package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js.br +0 -0
  1047. package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js.gz +0 -0
  1048. package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js +0 -2
  1049. package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js.br +0 -0
  1050. package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js.gz +0 -0
  1051. package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js +0 -1
  1052. package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js.br +0 -0
  1053. package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js.gz +0 -0
  1054. package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js +0 -1
  1055. package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js.br +0 -0
  1056. package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js.gz +0 -0
  1057. package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js +0 -1
  1058. package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js.br +0 -0
  1059. package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js.gz +0 -0
  1060. package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js +0 -1
  1061. package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js.br +0 -0
  1062. package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js.gz +0 -0
  1063. package/dist/web/assets/rename-object-dialog-FSlcdUoB.js +0 -1
  1064. package/dist/web/assets/rename-object-dialog-FSlcdUoB.js.br +0 -0
  1065. package/dist/web/assets/rename-object-dialog-FSlcdUoB.js.gz +0 -0
  1066. package/dist/web/assets/review-code-CfuJeLYd.js +0 -5
  1067. package/dist/web/assets/review-code-CfuJeLYd.js.br +0 -0
  1068. package/dist/web/assets/review-code-CfuJeLYd.js.gz +0 -0
  1069. package/dist/web/assets/run-in-terminal-Bk9Bw7G1.js +0 -1
  1070. package/dist/web/assets/run-in-terminal-button-DFPQUlZs.js +0 -1
  1071. package/dist/web/assets/save-as-dialog-Bj9VpGYf.js +0 -1
  1072. package/dist/web/assets/save-as-dialog-Bj9VpGYf.js.br +0 -0
  1073. package/dist/web/assets/save-as-dialog-Bj9VpGYf.js.gz +0 -0
  1074. package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js +0 -1
  1075. package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js.br +0 -0
  1076. package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js.gz +0 -0
  1077. package/dist/web/assets/scroll-area-6Am1KMiB.js +0 -1
  1078. package/dist/web/assets/scroll-area-6Am1KMiB.js.br +0 -0
  1079. package/dist/web/assets/scroll-area-6Am1KMiB.js.gz +0 -0
  1080. package/dist/web/assets/send-to-chat-Bcm_Lcog.js +0 -1
  1081. package/dist/web/assets/send-to-chat-Bcm_Lcog.js.br +0 -0
  1082. package/dist/web/assets/send-to-chat-Bcm_Lcog.js.gz +0 -0
  1083. package/dist/web/assets/separator-BOYUIPkH.js +0 -1
  1084. package/dist/web/assets/services-panel-CBRTsROB.js +0 -1
  1085. package/dist/web/assets/services-panel-CBRTsROB.js.br +0 -0
  1086. package/dist/web/assets/services-panel-CBRTsROB.js.gz +0 -0
  1087. package/dist/web/assets/session-changes-bar-BRopa3Dh.js +0 -1
  1088. package/dist/web/assets/session-changes-bar-BRopa3Dh.js.br +0 -0
  1089. package/dist/web/assets/session-changes-bar-BRopa3Dh.js.gz +0 -0
  1090. package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js +0 -1
  1091. package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js.br +0 -0
  1092. package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js.gz +0 -0
  1093. package/dist/web/assets/session-review-tab--kNB_FKQ.js +0 -6
  1094. package/dist/web/assets/session-review-tab--kNB_FKQ.js.br +0 -0
  1095. package/dist/web/assets/session-review-tab--kNB_FKQ.js.gz +0 -0
  1096. package/dist/web/assets/settings-body-B-s0fEjc.js +0 -1
  1097. package/dist/web/assets/settings-body-B-s0fEjc.js.br +0 -0
  1098. package/dist/web/assets/settings-body-B-s0fEjc.js.gz +0 -0
  1099. package/dist/web/assets/settings-categories-CcR9eL3x.js +0 -1
  1100. package/dist/web/assets/settings-categories-CcR9eL3x.js.br +0 -0
  1101. package/dist/web/assets/settings-categories-CcR9eL3x.js.gz +0 -0
  1102. package/dist/web/assets/settings-section-content-BJ35dy5r.js +0 -1
  1103. package/dist/web/assets/settings-section-content-DckksvTg.js +0 -2
  1104. package/dist/web/assets/settings-section-content-DckksvTg.js.br +0 -0
  1105. package/dist/web/assets/settings-section-content-DckksvTg.js.gz +0 -0
  1106. package/dist/web/assets/settings-store-WeJyQVL8.js +0 -2
  1107. package/dist/web/assets/settings-store-WeJyQVL8.js.br +0 -0
  1108. package/dist/web/assets/settings-store-WeJyQVL8.js.gz +0 -0
  1109. package/dist/web/assets/settings-tab-BlX33GEN.js +0 -1
  1110. package/dist/web/assets/settings-window-content-B-7yV1_q.js +0 -1
  1111. package/dist/web/assets/slash-command-picker-BBcy6w6m.js +0 -1
  1112. package/dist/web/assets/slash-command-picker-BBcy6w6m.js.br +0 -0
  1113. package/dist/web/assets/slash-command-picker-BBcy6w6m.js.gz +0 -0
  1114. package/dist/web/assets/sortable-header-B9gfWik4.js +0 -1
  1115. package/dist/web/assets/sortable-header-B9gfWik4.js.br +0 -0
  1116. package/dist/web/assets/sortable-header-B9gfWik4.js.gz +0 -0
  1117. package/dist/web/assets/sql-completion-provider-CaTHVr1l.js +0 -5
  1118. package/dist/web/assets/sql-completion-provider-CaTHVr1l.js.br +0 -0
  1119. package/dist/web/assets/sql-completion-provider-CaTHVr1l.js.gz +0 -0
  1120. package/dist/web/assets/sql-object-tab-DVo4bxRI.js +0 -1
  1121. package/dist/web/assets/sql-object-tab-DVo4bxRI.js.br +0 -0
  1122. package/dist/web/assets/sql-object-tab-DVo4bxRI.js.gz +0 -0
  1123. package/dist/web/assets/sqlite-viewer-BGfIpl5x.js +0 -1
  1124. package/dist/web/assets/sqlite-viewer-BGfIpl5x.js.br +0 -0
  1125. package/dist/web/assets/sqlite-viewer-BGfIpl5x.js.gz +0 -0
  1126. package/dist/web/assets/start-ellipsis-rBh37k0n.js +0 -1
  1127. package/dist/web/assets/structure-save-dialog-STK_RFCK.js +0 -1
  1128. package/dist/web/assets/structure-save-dialog-STK_RFCK.js.br +0 -0
  1129. package/dist/web/assets/structure-save-dialog-STK_RFCK.js.gz +0 -0
  1130. package/dist/web/assets/structure-tab-DuLnsTC4.js +0 -3
  1131. package/dist/web/assets/structure-tab-DuLnsTC4.js.br +0 -0
  1132. package/dist/web/assets/structure-tab-DuLnsTC4.js.gz +0 -0
  1133. package/dist/web/assets/system-monitor-body-BIjW16Pb.js +0 -2
  1134. package/dist/web/assets/system-monitor-body-BIjW16Pb.js.br +0 -0
  1135. package/dist/web/assets/system-monitor-body-BIjW16Pb.js.gz +0 -0
  1136. package/dist/web/assets/system-monitor-tab-B6_tC9LO.js +0 -1
  1137. package/dist/web/assets/system-monitor-window-content-CwBzqMUe.js +0 -1
  1138. package/dist/web/assets/tab-host-window-content-CpdEjkZd.js +0 -1
  1139. package/dist/web/assets/tab-host-window-content-CpdEjkZd.js.br +0 -0
  1140. package/dist/web/assets/tab-host-window-content-CpdEjkZd.js.gz +0 -0
  1141. package/dist/web/assets/tab-store-nNzRNfVV.js +0 -1
  1142. package/dist/web/assets/table-tab-B5asfTBP.js +0 -2
  1143. package/dist/web/assets/table-tab-B5asfTBP.js.br +0 -0
  1144. package/dist/web/assets/table-tab-B5asfTBP.js.gz +0 -0
  1145. package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js +0 -1
  1146. package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js.br +0 -0
  1147. package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js.gz +0 -0
  1148. package/dist/web/assets/terminal-tab-DpMONMVB.js +0 -3
  1149. package/dist/web/assets/terminal-tab-DpMONMVB.js.br +0 -0
  1150. package/dist/web/assets/terminal-tab-DpMONMVB.js.gz +0 -0
  1151. package/dist/web/assets/tool-cards-DoDKxqN4.js +0 -14
  1152. package/dist/web/assets/tool-cards-DoDKxqN4.js.br +0 -0
  1153. package/dist/web/assets/tool-cards-DoDKxqN4.js.gz +0 -0
  1154. package/dist/web/assets/use-at-most-wide-BQFi1Sjv.js +0 -1
  1155. package/dist/web/assets/use-blob-url-D7ElNPnW.js +0 -1
  1156. package/dist/web/assets/use-db-driver-installed-BscdI-wS.js +0 -1
  1157. package/dist/web/assets/use-db-read-DYuyNA5i.js +0 -1
  1158. package/dist/web/assets/use-db-read-DYuyNA5i.js.br +0 -0
  1159. package/dist/web/assets/use-db-read-DYuyNA5i.js.gz +0 -0
  1160. package/dist/web/assets/use-db-tab-Cr4lXxwF.js +0 -1
  1161. package/dist/web/assets/use-db-tab-Cr4lXxwF.js.br +0 -0
  1162. package/dist/web/assets/use-db-tab-Cr4lXxwF.js.gz +0 -0
  1163. package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js +0 -1
  1164. package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js.br +0 -0
  1165. package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js.gz +0 -0
  1166. package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js +0 -1
  1167. package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js.br +0 -0
  1168. package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js.gz +0 -0
  1169. package/dist/web/assets/use-inline-blame-DS0HrHJ3.js +0 -16
  1170. package/dist/web/assets/use-inline-blame-DS0HrHJ3.js.br +0 -0
  1171. package/dist/web/assets/use-inline-blame-DS0HrHJ3.js.gz +0 -0
  1172. package/dist/web/assets/use-is-mobile-BXHbkfs9.js +0 -1
  1173. package/dist/web/assets/use-lsp-BTVDYrt6.js +0 -6
  1174. package/dist/web/assets/use-lsp-BTVDYrt6.js.br +0 -0
  1175. package/dist/web/assets/use-lsp-BTVDYrt6.js.gz +0 -0
  1176. package/dist/web/assets/use-monaco-theme-DqnhExsm.js +0 -1
  1177. package/dist/web/assets/use-opener-focus-C5L5UUJs.js +0 -1
  1178. package/dist/web/assets/use-process-kill-D-SGQxDn.js +0 -1
  1179. package/dist/web/assets/use-process-kill-D-SGQxDn.js.br +0 -0
  1180. package/dist/web/assets/use-process-kill-D-SGQxDn.js.gz +0 -0
  1181. package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js +0 -4
  1182. package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js.br +0 -0
  1183. package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js.gz +0 -0
  1184. package/dist/web/assets/use-visual-viewport-CQ6-A0Dt.js +0 -1
  1185. package/dist/web/assets/use-websocket-C6RnlNVJ.js +0 -1
  1186. package/dist/web/assets/vendor-markdown-QKPNiWEd.js +0 -291
  1187. package/dist/web/assets/vendor-markdown-QKPNiWEd.js.br +0 -0
  1188. package/dist/web/assets/vendor-markdown-QKPNiWEd.js.gz +0 -0
  1189. package/dist/web/assets/vendor-ui-CS1GvlOm.js +0 -45
  1190. package/dist/web/assets/vendor-ui-CS1GvlOm.js.br +0 -0
  1191. package/dist/web/assets/vendor-ui-CS1GvlOm.js.gz +0 -0
  1192. package/dist/web/assets/video-preview-CYzeUPfH.js +0 -1
  1193. package/dist/web/assets/video-preview-CYzeUPfH.js.br +0 -0
  1194. package/dist/web/assets/video-preview-CYzeUPfH.js.gz +0 -0
  1195. package/dist/web/assets/voice-settings-section-C01d-toF.js +0 -1
  1196. package/dist/web/assets/voice-settings-section-C01d-toF.js.br +0 -0
  1197. package/dist/web/assets/voice-settings-section-C01d-toF.js.gz +0 -0
  1198. package/dist/web/assets/web-preview-tab-F5C3quQs.js +0 -1
  1199. package/dist/web/assets/web-preview-tab-F5C3quQs.js.br +0 -0
  1200. package/dist/web/assets/web-preview-tab-F5C3quQs.js.gz +0 -0
  1201. package/dist/web/assets/window-pip-registry-DSoB7T3k.js +0 -1
  1202. package/dist/web/assets/window-store-zJczRsv4.js +0 -1
  1203. package/dist/web/assets/window-store-zJczRsv4.js.br +0 -0
  1204. package/dist/web/assets/window-store-zJczRsv4.js.gz +0 -0
  1205. package/dist/web/assets/ws-auth-cWeQ7_61.js +0 -1
  1206. /package/dist/web/assets/{__vite-browser-external-B4VNaaaA.js → __vite-browser-external-DL4jXWNt.js} +0 -0
  1207. /package/dist/web/assets/{clipboard-D3XnL7CB.js → clipboard-D-VCry-F.js} +0 -0
  1208. /package/dist/web/assets/{clipboard-D3XnL7CB.js.br → clipboard-D-VCry-F.js.br} +0 -0
  1209. /package/dist/web/assets/{clipboard-D3XnL7CB.js.gz → clipboard-D-VCry-F.js.gz} +0 -0
  1210. /package/dist/web/assets/{code-fence-vHZyBehL.js → code-fence-BK57HRhJ.js} +0 -0
  1211. /package/dist/web/assets/{design-system-status-label-Cus6e2Df.js → design-system-status-label-KA4ESjWe.js} +0 -0
  1212. /package/dist/web/assets/{format-bytes-B2kC4sbB.js → format-bytes-he3TR0bV.js} +0 -0
  1213. /package/dist/web/assets/{session-turns-gmrmXzeg.js → session-turns-D3QpTtCq.js} +0 -0
  1214. /package/dist/web/assets/{session-turns-gmrmXzeg.js.br → session-turns-D3QpTtCq.js.br} +0 -0
  1215. /package/dist/web/assets/{session-turns-gmrmXzeg.js.gz → session-turns-D3QpTtCq.js.gz} +0 -0
  1216. /package/dist/web/assets/{vendor-xterm-sFX94k3w.js → vendor-xterm-DRhOk3kW.js} +0 -0
  1217. /package/dist/web/assets/{vendor-xterm-sFX94k3w.js.br → vendor-xterm-DRhOk3kW.js.br} +0 -0
  1218. /package/dist/web/assets/{vendor-xterm-sFX94k3w.js.gz → vendor-xterm-DRhOk3kW.js.gz} +0 -0
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{Hr as r,hr as i,jr as a,pi as o,tt as s,w as c}from"./icons-BwyIKaTT.js";import{C as l,o as u,r as d,v as f,x as p}from"./api-client-xQDlhUTu.js";import{t as m}from"./session-list-sync-triggers-DtJI5KF0.js";import{V as h}from"./index-DLB3j_P0.js";var g=/(?:^|\s)\/(\S*)$/;function _(e){let t=e.match(g);return t?t[1]??``:null}function v(e,t){return e.replace(/(?:^|\s)\/\S*$/,e=>`${e.startsWith(`/`)?``:e[0]}${t} `)}function y(e){return e.replace(/(?:^|\s)\/\S*$/,e=>e.startsWith(`/`)?``:e[0])}function b(e,t){if(e===t)return 0;if(e.length===0)return t.length;if(t.length===0)return e.length;let n=Array.from({length:t.length+1},(e,t)=>t),r=Array(t.length+1);for(let i=1;i<=e.length;i++){r[0]=i;for(let a=1;a<=t.length;a++){let o=e[i-1]===t[a-1]?0:1;r[a]=Math.min(r[a-1]+1,n[a]+1,n[a-1]+o)}[n,r]=[r,n]}return n[t.length]}function x(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(r.startsWith(n))return{rank:0,distance:0};if(r.includes(n))return{rank:1,distance:r.indexOf(n)};let i=Math.max(Math.floor(n.length*.4),2),a=b(n,r.slice(0,n.length+i));return a<=i?{rank:2,distance:a}:null}var S=1;function C(e,t,n=20,r=[]){if(!t)return e;t=t.slice(0,50);let i=new Map(r.map((e,t)=>[e,t])),a=[];for(let n of e){let e=x(t,n.name),o=[e,x(t,n.description)].filter(e=>e!==null).sort((e,t)=>e.rank-t.rank||e.distance-t.distance)[0];if(o){let t=i.get(n.name),s=t!==void 0&&e?.rank===o.rank;a.push({item:n,rank:o.rank-(s?S:0),distance:o.distance,recency:t??r.length})}}return a.sort((e,t)=>e.rank-t.rank||e.recency-t.recency||e.distance-t.distance||e.item.name.localeCompare(t.item.name)),a.slice(0,n).map(e=>e.item)}var w=e(t(),1),T=n();function E({items:e,filter:t,onSelect:n,onClose:g,visible:_,recentNames:v=[],projectName:y}){let[b,x]=(0,w.useState)(0),[S,E]=(0,w.useState)(!1),D=(0,w.useRef)(null),O=(0,w.useMemo)(()=>new Set(v),[v]),k=(0,w.useMemo)(()=>{if(t)return{items:C(e,t,20,v),recentCount:0};if(v.length>0){let t=[],n=[];for(let r of e)O.has(r.name)?t.push(r):n.push(r);return t.sort((e,t)=>v.indexOf(e.name)-v.indexOf(t.name)),{items:[...t,...n],recentCount:t.length}}return{items:e,recentCount:0}},[e,t,v,O]),A=k.items,j=k.recentCount;(0,w.useEffect)(()=>{x(0)},[t]),(0,w.useEffect)(()=>{let e=D.current;e&&e.children[b]?.scrollIntoView({block:`nearest`})},[b]);let M=(0,w.useCallback)(e=>{if(!_||A.length===0)return!1;switch(e.key){case`ArrowUp`:return e.preventDefault(),x(e=>e>0?e-1:A.length-1),!0;case`ArrowDown`:return e.preventDefault(),x(e=>e<A.length-1?e+1:0),!0;case`Enter`:case`Tab`:return e.preventDefault(),A[b]&&n(A[b]),!0;case`Escape`:return e.preventDefault(),g(),!0}return!1},[_,A,b,n,g]);(0,w.useEffect)(()=>{if(!_)return;let e=e=>{M(e)&&e.stopPropagation()},t=D.current?.ownerDocument??document;return t.addEventListener(`keydown`,e,!0),()=>t.removeEventListener(`keydown`,e,!0)},[_,M]);let N=(0,w.useCallback)(()=>{!y||S||(E(!0),d.del(`${u(y)}/chat/slash-items/cache`).then(()=>{h(y),l(p(f(m(y)),`claude`)),window.dispatchEvent(new CustomEvent(`ppm:slash-items-refresh`))}).finally(()=>E(!1)))},[y,S]);return!_||A.length===0?null:(0,T.jsx)(`div`,{className:`max-h-52 overflow-y-auto overflow-x-hidden border-b border-border bg-surface`,children:(0,T.jsx)(`div`,{ref:D,className:`py-1`,children:A.map((e,t)=>{let l=j>0&&t===0,u=j>0&&t===j;return(0,T.jsxs)(`div`,{children:[l&&(0,T.jsxs)(`div`,{className:`flex items-center justify-between px-3 pt-1 pb-0.5`,children:[(0,T.jsxs)(`span`,{className:`text-[10px] font-medium text-text-subtle uppercase tracking-wider flex items-center gap-1`,children:[(0,T.jsx)(s,{className:`size-3`}),`Recent`]}),y&&(0,T.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),N()},className:`text-text-subtle hover:text-text-primary transition-colors p-0.5 rounded`,title:`Refresh skill list`,"aria-label":`Refresh skill list`,children:(0,T.jsx)(i,{className:`size-3 ${S?`animate-spin`:``}`})})]}),u&&(0,T.jsx)(`div`,{className:`px-3 pt-1.5 pb-0.5`,children:(0,T.jsx)(`span`,{className:`text-[10px] font-medium text-text-subtle uppercase tracking-wider`,children:`All`})}),(0,T.jsxs)(`button`,{className:`flex items-start gap-3 w-full px-3 py-2 text-left transition-colors ${t===b?`bg-primary/10 text-primary`:`hover:bg-surface-hover text-text-primary`}`,onMouseEnter:()=>x(t),onClick:()=>n(e),children:[(0,T.jsx)(`span`,{className:`shrink-0 mt-0.5`,children:e.iconDataUri?(0,T.jsx)(`img`,{src:e.iconDataUri,alt:``,className:`size-4 object-contain`}):e.type===`builtin`?(0,T.jsx)(o,{className:`size-4 text-emerald-500`}):e.type===`skill`?(0,T.jsx)(a,{className:`size-4 text-warning`}):e.type===`agent`?(0,T.jsx)(c,{className:`size-4 text-sky-500`}):(0,T.jsx)(r,{className:`size-4 text-primary`})}),(0,T.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,T.jsxs)(`div`,{className:`flex items-baseline gap-2 min-w-0`,children:[(0,T.jsxs)(`span`,{className:`font-medium text-sm truncate`,children:[e.invokeSigil??`/`,e.name]}),e.displayName&&e.displayName!==e.name&&(0,T.jsx)(`span`,{className:`text-xs text-text-2 truncate`,children:e.displayName}),e.argumentHint&&(0,T.jsx)(`span`,{className:`text-xs text-text-subtle truncate`,children:e.argumentHint}),(0,T.jsx)(`span`,{className:`text-xs text-text-subtle capitalize ml-auto shrink-0 whitespace-nowrap`,children:e.invokeSigil===`$`?`Codex`:e.scope===`bundled`?`PPM`:e.scope===`user`?`global`:e.type})]}),e.description&&(0,T.jsx)(`p`,{className:`text-xs text-text-subtle mt-0.5 line-clamp-2 break-words`,children:e.description})]})]})]},`${e.type}-${e.name}`)})})})}export{y as i,v as n,_ as r,E as t};
@@ -0,0 +1 @@
1
+ import{E as e}from"./vendor-markdown-C-P1aR4p.js";import{g as t,o as n}from"./icons-BwyIKaTT.js";import{n as r}from"./utils-Bslrbb-G.js";function i(e,t){return{cpu:e.cpu,ramMB:e.ramMB,name:t,swapMB:e.swapMB,diskReadBps:e.diskReadBps,diskWriteBps:e.diskWriteBps,gpuPct:e.gpuPct,gpuMemMB:e.gpuMemMB,netInBps:e.netInBps,netOutBps:e.netOutBps}}function a(e,t){if(!(e===void 0&&t===void 0))return(e??0)+(t??0)}function o(e,t){return e===`swap`?t.swapMB:e===`disk`?a(t.diskReadBps,t.diskWriteBps):e===`net`?a(t.netInBps,t.netOutBps):e===`gpu`?t.gpuPct:t.gpuMemMB}function s(e){return e===`swap`||e===`disk`||e===`gpu`||e===`gpuMem`||e===`net`}function c(e,t,n,r){return t?[...e].sort((e,i)=>{let a=r(e),c=r(i);if(t===`name`){let e=a.name.localeCompare(c.name);return n===`asc`?e:-e}if(t===`cpu`)return n===`asc`?a.cpu-c.cpu:c.cpu-a.cpu;if(t===`ram`)return n===`asc`?a.ramMB-c.ramMB:c.ramMB-a.ramMB;if(s(t)){let e=o(t,a),r=o(t,c);return e===void 0&&r===void 0?0:e===void 0?1:r===void 0?-1:n===`asc`?e-r:r-e}return 0}):e}var l={cpu:0,ramMB:0,count:0};function u(e,t){return t===void 0?e:(e??0)+t}function d(e,t,n){return{cpu:e.cpu+t.cpu,ramMB:e.ramMB+t.ramMB,count:e.count+n,swapMB:u(e.swapMB,t.swapMB),diskReadBps:u(e.diskReadBps,t.diskReadBps),diskWriteBps:u(e.diskWriteBps,t.diskWriteBps),gpuMemMB:u(e.gpuMemMB,t.gpuMemMB),netInBps:u(e.netInBps,t.netInBps),netOutBps:u(e.netOutBps,t.netOutBps)}}function f(e,t){return e.toLowerCase().includes(t)}function p(e,t){return f(e.name,t)||f(e.command,t)}function m(e){let{processes:t,groups:n,mode:r,ppmOnly:a,query:o,sortKey:s,sortDir:u,expanded:m}=e,h=o.trim().toLowerCase(),g=new Map(t.map(e=>[e.pid,e]));if(r===`flat`){let e=a?t.filter(e=>e.ppm):t;h&&(e=e.filter(e=>p(e,h))),e=c(e,s,u,e=>i(e,e.name));let n=e.reduce((e,t)=>d(e,t,1),l);return{rows:e.map(e=>({kind:`process`,proc:e,indent:!1})),totals:n,autoExpanded:new Set}}let _=a?n.filter(e=>e.ppm):n,v=new Set;h&&(_=_.filter(e=>{let t=f(e.label,h),n=e.pids.some(e=>{let t=g.get(e);return t?p(t,h):!1}),r=t||n;return r&&n&&v.add(e.key),r})),_=c(_,s,u,e=>i(e,e.label));let y=[];for(let e of _){let t=h&&v.has(e.key)||m.has(e.key);if(y.push({kind:`group`,group:e,expanded:t}),!t)continue;let n=e.pids.map(e=>g.get(e)).filter(e=>e!==void 0);h&&(n=n.filter(e=>p(e,h))),n=c(n,s,u,e=>i(e,e.name));for(let e of n)y.push({kind:`process`,proc:e,indent:!0})}return{rows:y,totals:_.reduce((e,t)=>d(e,t,t.count),l),autoExpanded:v}}function h(e,t,n){return e===n?t===`desc`?[n,`asc`]:[null,`desc`]:[n,`desc`]}var g=e();function _({label:e,field:i,activeKey:a,activeDir:o,onClick:s,align:c=`right`,testId:l,className:u,resizeKey:d,resize:f}){let p=a===i,m=p?o===`asc`?t:n:null,h=p?o===`asc`?`ascending`:`descending`:`none`;return(0,g.jsxs)(`div`,{role:`columnheader`,"aria-sort":h,className:r(`relative py-1.5 px-2 font-medium select-none`,c===`left`?`text-left`:`text-right`,u),children:[(0,g.jsxs)(`button`,{type:`button`,"data-testid":l,onClick:()=>s(i),className:r(`flex items-center gap-0.5 w-full min-h-11 md:min-h-0 cursor-pointer hover:text-text-primary transition-colors`,c===`left`?`justify-start`:`justify-end`,p&&`text-text-primary`),children:[(0,g.jsx)(`span`,{className:`truncate`,children:e}),m&&(0,g.jsx)(m,{className:`size-3 shrink-0`})]}),d&&f&&(0,g.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize ${e} column`,"data-testid":l?`${l}-resize`:void 0,onPointerDown:e=>f.onResizeStart(d,e),onDoubleClick:()=>f.onResizeReset(d),className:`hidden md:block absolute top-0 -right-1 h-full w-2 cursor-col-resize hover:bg-primary/40 active:bg-primary/60`})]})}export{m as n,h as r,_ as t};
@@ -0,0 +1,5 @@
1
+ var e=/[A-Za-z0-9_$\u0080-￿]/,t=/^\$(?:[A-Za-z_\u0080-￿][A-Za-z0-9_\u0080-￿]*)?\$/,n=/^delimiter[ \t]+(\S+)/i;function r(e,t,n,r){let i=t+1;for(;i<e.length;){let t=e[i];if(r&&t===`\\`){i+=2;continue}if(t===n){if(n!==`]`&&e[i+1]===n){i+=2;continue}return i+1}i++}return e.length}function i(e,t,n){let r=0,i=t;for(;i<e.length;)if(e[i]===`/`&&e[i+1]===`*`)r++,i+=2,!n&&r>1&&(r=1);else if(e[i]===`*`&&e[i+1]===`/`){if(r--,i+=2,r===0)return i}else i++;return e.length}function a(e,t){let n=e.indexOf(`
2
+ `,t);return n===-1?e.length:n}function o(e,t){let n=e[t+2];return n===void 0||n<=` `}function*s(s,c,l={}){let u=c===`postgres`,d=c===`mysql`,f=l.backslashEscapes??d,p=`;`,m=0,h=-1,g=!1,_=!0,v=function*(){h!==-1&&(yield{kind:`code`,start:h,end:m},h=-1)};for(;m<s.length;){let l=s[m];if(d&&_&&!g&&(l===`d`||l===`D`)){let e=a(s,m),t=n.exec(s.slice(m,e));if(t&&!t[1].includes(`\\`)){yield*v(),yield{kind:`directive`,start:m,end:e},p=t[1],m=e;continue}}if(s.startsWith(p,m)){yield*v(),yield{kind:`end`,start:m,end:m+p.length},m+=p.length,g=!1,_=!1;continue}let y=m>0?s[m-1]:``,b=-1,x=`literal`;if(l===`-`&&s[m+1]===`-`&&(!d||o(s,m)))b=a(s,m),x=`comment`;else if(d&&l===`#`)b=a(s,m),x=`comment`;else if(l===`/`&&s[m+1]===`*`)b=i(s,m,u),x=d&&(s[m+2]===`!`||s[m+2]===`M`&&s[m+3]===`!`)?`code`:`comment`;else if(l===`'`){let t=u&&(y===`E`||y===`e`)&&!e.test(s[m-2]??``);b=r(s,m,`'`,t||!u&&f)}else if(l===`"`)b=r(s,m,`"`,d&&f);else if(!u&&l==="`")b=r(s,m,"`",!1);else if(c===`sqlite`&&l===`[`)b=r(s,m,`]`,!1);else if(u&&l===`$`&&!e.test(y)){let e=t.exec(s.slice(m));if(e){let t=s.indexOf(e[0],m+e[0].length);b=t===-1?s.length:t+e[0].length}}if(b!==-1){yield*v(),yield{kind:x,start:m,end:b},x!==`comment`&&(g=!0),_=!1,m=b;continue}h===-1&&(h=m),l===`
3
+ `?_=!0:l!==` `&&l!==` `&&l!==`\r`&&(_=!1,g=!0),m++}yield*v()}function c(e,t){return t.kind===`literal`||t.kind===`code`&&e.slice(t.start,t.end).trim()!==``}function l(e,t=`postgres`,n={}){let r=[],i=0,a=!1,o=t=>{let n=e.slice(i,t).trim();a&&n&&r.push(n),a=!1};for(let r of s(e,t,n))r.kind===`end`||r.kind===`directive`?(o(r.start),i=r.end):c(e,r)&&(a=!0);return o(e.length),r}function u(e,t=`postgres`,n={}){let r=``;for(let i of s(e,t,n)){let t=e.slice(i.start,i.end);i.kind===`code`?r+=t:i.kind===`literal`?r+=t[0]===`"`||t[0]==="`"||t[0]===`[`?` "" `:` '' `:i.kind===`comment`?r+=` `:i.kind===`end`?r+=`;`:r+=` `}return r}function d(e,t=`postgres`){let r=[];for(let i of s(e,t))i.kind===`directive`&&r.push({start:i.start,end:i.end,delimiter:n.exec(e.slice(i.start,i.end))[1]});return r}function f(e){let t=[];for(let n=e.indexOf(`
4
+ `);n!==-1;n=e.indexOf(`
5
+ `,n+1))t.push(n);return{lineAt:e=>{let n=0,r=t.length;for(;n<r;){let i=n+r>>1;t[i]<e?n=i+1:r=i}return n+1},lines:t.length+1}}function p(e,t=`postgres`){let{lineAt:r,lines:i}=f(e),a=[],o=`;`,c=-1,l=(t,n,i)=>{if(c===-1)return;let s=e.slice(c,t).trim();if(s){let e=s;if(o!==`;`){let t=i?s.slice(0,s.length-o.length).trimEnd():s;e=`DELIMITER ${o}\n${t}\n${o}`}a.push({sql:s,run:e,startLine:r(c),endLine:n})}c=-1};for(let i of s(e,t)){if(i.kind===`directive`){o=n.exec(e.slice(i.start,i.end))[1];continue}if(i.kind!==`comment`){if(c===-1){let t=e.slice(i.start,i.end).search(/\S/);t!==-1&&(c=i.start+t)}i.kind===`end`&&l(i.end,r(i.start),!0)}}return l(e.length,i,!1),a}function m(e,t=`postgres`,n={}){let{lineAt:r}=f(e),i=[],a=0,o=-1,l=(t,n)=>{let s=e.slice(a,t),c=s.trim();if(o!==-1&&c){let e=a+s.length-s.trimStart().length,t=n??e+c.length-1;i.push({sql:c,firstLine:r(e),startLine:r(o),endLine:r(t)})}o=-1};for(let r of s(e,t,n))r.kind===`end`||r.kind===`directive`?(l(r.start,r.kind===`end`?r.start:null),a=r.end):o===-1&&c(e,r)&&(o=r.start+Math.max(0,e.slice(r.start,r.end).search(/\S/)));return l(e.length,null),i}function h(e,t,n=`postgres`){return g(p(e,n),t)}function g(e,t){return e.length===0?null:e.find(e=>e.startLine<=t&&t<=e.endLine)??e.find(e=>e.startLine>t)??e[e.length-1]}function _(e,t,n=`postgres`){return h(e,t,n)?.run??``}function v(e){return e.startLine-(e.run===e.sql?1:2)}export{l as a,g as c,m as i,h as l,_ as n,p as o,v as r,u as s,d as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./sql-identifiers-DDISwQor.js";import{n as t}from"./split-sql-statements-DcAeXbk_.js";var n=`SELECT.FROM.WHERE.INSERT.INTO.VALUES.UPDATE.SET.DELETE.CREATE.TABLE.ALTER.DROP.INDEX.JOIN.LEFT.RIGHT.INNER.OUTER.ON.AND.OR.NOT.NULL.IS.IN.LIKE.BETWEEN.HAVING.LIMIT.OFFSET.AS.DISTINCT.COUNT.SUM.AVG.MIN.MAX.CASE.WHEN.THEN.ELSE.END.EXISTS.UNION.ALL.ASC.DESC.ORDER BY.GROUP BY.LEFT JOIN.RIGHT JOIN.INNER JOIN.CROSS JOIN.IS NULL.IS NOT NULL`.split(`.`),r={postgres:`FULL OUTER JOIN.ILIKE.SIMILAR TO.IS DISTINCT FROM.RETURNING.ON CONFLICT.DO NOTHING.DO UPDATE SET.DISTINCT ON.LATERAL.WITH RECURSIVE.FILTER.OVER.PARTITION BY.NULLS FIRST.NULLS LAST.FETCH FIRST.ROWS ONLY.TRUNCATE.EXPLAIN ANALYZE.VACUUM.ANALYZE.COPY.SCHEMA.SEQUENCE.MATERIALIZED VIEW.REFRESH MATERIALIZED VIEW.SERIAL.BIGSERIAL.JSONB.TIMESTAMPTZ.GENERATED ALWAYS AS IDENTITY`.split(`.`),mysql:[`AUTO_INCREMENT`,`ON DUPLICATE KEY UPDATE`,`INSERT IGNORE`,`REPLACE INTO`,`STRAIGHT_JOIN`,`REGEXP`,`RLIKE`,`SHOW TABLES`,`SHOW DATABASES`,`SHOW COLUMNS FROM`,`SHOW CREATE TABLE`,`SHOW INDEX FROM`,`SHOW PROCESSLIST`,`SHOW VARIABLES`,`DESCRIBE`,`USE`,`ENGINE`,`CHARSET`,`COLLATE`,`UNSIGNED`,`DELIMITER`,`TRUNCATE`,`LOCK TABLES`,`UNLOCK TABLES`],sqlite:[`FULL OUTER JOIN`,`PRAGMA`,`AUTOINCREMENT`,`GLOB`,`WITHOUT ROWID`,`STRICT`,`INSERT OR REPLACE`,`INSERT OR IGNORE`,`ON CONFLICT`,`DO NOTHING`,`DO UPDATE SET`,`RETURNING`,`WITH RECURSIVE`,`ATTACH DATABASE`,`DETACH DATABASE`,`VACUUM`,`REINDEX`,`ANALYZE`,`ROWID`]};function i(e){return[...n,...r[e]]}var a=[`COUNT`,`SUM`,`AVG`,`MIN`,`MAX`],o=[`=`,`!=`,`<>`,`>`,`<`,`>=`,`<=`,`LIKE`,`IN`,`NOT IN`,`BETWEEN`,`IS NULL`,`IS NOT NULL`],s={postgres:[`ILIKE`,`NOT ILIKE`,`SIMILAR TO`,`IS DISTINCT FROM`],mysql:[`REGEXP`,`NOT REGEXP`,`<=>`],sqlite:[`GLOB`,`IS`,`IS NOT`]};function c(e){return[...o,...s[e]]}var l=[`ASC`,`DESC`],u=new WeakMap,d=`FROM.JOIN.UPDATE.INTO.WHERE.SET.ON.USING.ORDER.GROUP.HAVING.LIMIT.OFFSET.LEFT.RIGHT.INNER.OUTER.CROSS.FULL.NATURAL.STRAIGHT_JOIN.AND.OR.VALUES.SELECT.DELETE.INSERT.CREATE.ALTER.DROP.UNION.EXCEPT.INTERSECT.RETURNING.WINDOW.FETCH.FOR.DEFAULT.LATERAL.FORCE.IGNORE.USE`.split(`.`),f=new Set(d),p=String.raw`(?:"[^"]+"|\x60[^\x60]+\x60|\w+)`,m=new RegExp(String.raw`\s*(${p}(?:\s*\.\s*${p})?)(?:\s+AS\s+(${p})|\s+(?!(?:${d.join(`|`)})\b)(\w+))?`,`iy`),h=/\s*,/y,g=e=>/^["\x60]/.test(e)?e.slice(1,-1):e;function _(e){let t=new Set,n=new Map,r=new Map;for(let i of e.matchAll(/\b(FROM|JOIN|UPDATE|INTO)\b/gi)){m.lastIndex=i.index+i[0].length;let a=/^(FROM|UPDATE)$/i.test(i[1]);for(let i=m.exec(e);i;i=m.exec(e)){let o=[...i[1].matchAll(new RegExp(p,`g`))].map(e=>g(e[0])),s=o.at(-1);t.add(s),o.length===2&&r.set(s.toLowerCase(),o[0]);let c=i[2]?g(i[2]):i[3];if(c&&!f.has(c.toUpperCase())&&n.set(c.toLowerCase(),s),!a||(h.lastIndex=m.lastIndex,!h.test(e)))break;m.lastIndex=h.lastIndex}}return{tableRefs:t,aliasMap:n,schemaOf:r}}function v(e,t){return t.get(e.toLowerCase())??e}function y(e,t,n){let r=t.get(e.toLowerCase());if(r)return r;let i=n.tables.filter(t=>t.name.toLowerCase()===e.toLowerCase());return i.length===1&&i[0].schema?i[0].schema:void 0}async function b(e,t,n){let r=u.get(t);r||u.set(t,r=new Map);let i=`${n??``}.${e.toLowerCase()}`,a=r.get(i);if(!a)try{a=await t.getColumns(e,n),r.set(i,a)}catch{a=[]}return a}function x(t,n){return n===`mysql`?/^[A-Za-z_][\w$]*$/.test(t)?t:e(t,n):/[A-Z]/.test(t)?e(t,n):t}async function S({tableRefs:e,schemaOf:t},n,r,i,a){let o=[],s=new Set;for(let c of e){let e=await b(c,n,y(c,t,n));for(let t of e)s.has(t.name)||(s.add(t.name),o.push({label:t.name,kind:r.languages.CompletionItemKind.Field,detail:`${c} · ${t.type}`,insertText:x(t.name,a),range:i,sortText:`0`+t.name}))}return o}function C(e){if(/(\w+)\.\s*$/.test(e))return`dot`;let t=e.match(/\b(?:ORDER|GROUP)\s+BY\s+(?:[\w"`]+\s+(?:ASC|DESC)\s*,\s*)*[\w"`]+\s+(\w*)$/i);if(t){let e=t[1].toUpperCase();return e===`ASC`||e===`DESC`?`after-direction`:`sort-direction`}return/\b(?:ORDER|GROUP)\s+BY\s+.*(?:ASC|DESC)\s*,\s*\w*$/i.test(e)?`order-by-next-col`:/\b(?:WHERE|AND|OR)\s+[\w"`]+\s+\S*$/i.test(e)?`operator`:/\b(?:FROM|JOIN|INTO|UPDATE|TABLE)\s+\w*$/i.test(e)?`table`:/\bINSERT\s+INTO\s+[\w"`]+\s*\(\s*(?:[\w"`]+\s*,\s*)*\w*$/i.test(e)?`insert-cols`:/\b(?:SELECT|WHERE|ORDER\s+BY|GROUP\s+BY|HAVING|SET|ON|AND|OR)\s+(?:[\w"`]+\s*,\s*)*\w*$/i.test(e)?`columns`:/,\s*\w*$/.test(e)?`comma-cols`:`default`}function w(e,n,r,o){return{triggerCharacters:[`.`,`,`],provideCompletionItems:async(s,u)=>{if(s!==o.getModel())return{suggestions:[]};try{let o=s.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:u.lineNumber,endColumn:u.column}),d=s.getWordUntilPosition(u),f={startLineNumber:u.lineNumber,endLineNumber:u.lineNumber,startColumn:d.startColumn,endColumn:d.endColumn},p=s.getValue(),m=r(),h=_(t(p,u.lineNumber,m)),{tableRefs:g,aliasMap:w}=h,T=[],E=C(o);if(E===`dot`){let t=o.match(/(\w+)\.\s*$/);if(t){let r=t[1],i=v(r,w),a=await b(i,n,y(i,h.schemaOf,n));for(let t of a)T.push({label:t.name,kind:e.languages.CompletionItemKind.Field,detail:t.type,insertText:x(t.name,m),range:f})}return{suggestions:T}}if(E===`sort-direction`){for(let t of l)T.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:f,sortText:`0`+t});return{suggestions:T}}if(E===`after-direction`)return{suggestions:[]};if(E===`order-by-next-col`)return T.push(...await S(h,n,e,f,m)),{suggestions:T};if(E===`operator`){for(let t of c(m))T.push({label:t,kind:e.languages.CompletionItemKind.Operator,insertText:t,range:f,sortText:`0`+t});return{suggestions:T}}if(E===`table`){for(let t of n.tables)T.push({label:t.name,kind:e.languages.CompletionItemKind.Struct,detail:t.schema,insertText:t.name,range:f,sortText:`0`+t.name});return{suggestions:T}}if(E===`insert-cols`)return T.push(...await S(h,n,e,f,m)),{suggestions:T};if(E===`columns`){if(T.push(...await S(h,n,e,f,m)),/\bSELECT\s+/i.test(o)){T.push({label:`*`,kind:e.languages.CompletionItemKind.Value,insertText:`*`,range:f,sortText:`00*`});for(let t of a)T.push({label:`${t}()`,kind:e.languages.CompletionItemKind.Function,insertText:`${t}($0)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,range:f,sortText:`1`+t})}for(let t of i(m))T.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:f,sortText:`3`+t});return{suggestions:T}}if(E===`comma-cols`&&g.size>0)return T.push(...await S(h,n,e,f,m)),{suggestions:T};for(let t of i(m))T.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:f,sortText:`2`+t});for(let t of n.tables)T.push({label:t.name,kind:e.languages.CompletionItemKind.Struct,detail:t.schema,insertText:t.name,range:f,sortText:`1`+t.name});return{suggestions:T}}catch{return{suggestions:[]}}}}}export{w as t};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{Bt as r,Fr as i,Lr as a,P as o,at as s}from"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as c}from"./utils-Bslrbb-G.js";import{Q as l}from"./window-store-DqX_qmkQ.js";import"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import{t as u}from"./tab-store-D5I52eLN.js";import{n as d}from"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import"./button-C9ZXWb3b.js";import"./use-db-driver-installed-anzWkGi5.js";import"./db-sidebar-reveal-_qw0CliT.js";import"./db-explorer-store-BmpvDHz6.js";import{a as f,n as p,s as m}from"./open-db-tabs-CtWIWHOa.js";import{J as h,Y as g}from"./index-DLB3j_P0.js";import{t as _}from"./use-monaco-theme-BiDXRJ4e.js";import{t as v}from"./editor-font-CdxKRKX-.js";import{t as y}from"./use-db-tab-B8LjdDb7.js";import{t as b}from"./use-db-read-BCYhIrJM.js";import{i as x,n as S,r as C,t as w}from"./db-tab-parts-BgVpKbi6.js";var T=e(t(),1),E={table:`CREATE TABLE`,view:`CREATE VIEW`,matview:`CREATE MATERIALIZED VIEW`,function:`CREATE FUNCTION`,procedure:`CREATE PROCEDURE`,trigger:`CREATE TRIGGER`,sequence:`CREATE SEQUENCE`};function D(e,t){if(!t)return[];let n=[{kind:`create`,label:E[e],sql:t.create}];return t.select!==void 0&&n.push({kind:`select`,label:`SELECT`,sql:t.select}),t.insert!==void 0&&n.push({kind:`insert`,label:`INSERT`,sql:t.insert}),n}function O(e){let t=encodeURIComponent;return`/object-sql?kind=${t(e.kind)}&name=${t(e.name)}`+(e.schema?`&schema=${t(e.schema)}`:``)+(e.args===void 0?``:`&args=${t(e.args)}`)+(e.table?`&table=${t(e.table)}`:``)}var k=n();function A({metadata:e,tabId:t}){let n=y(e,t),s=e?.objectKind,d=typeof e?.objectName==`string`?e.objectName:``,h=typeof e?.schemaName==`string`?e.schemaName:``,g=typeof e?.objectArgs==`string`?e.objectArgs:void 0,_=typeof e?.objectTable==`string`?e.objectTable:void 0,v=s&&d?O({kind:s,name:d,schema:h||null,args:g,table:_}):null,E=b(n.missing?null:n.target,v,t),A=E.data,M=A?.kind??s??`table`,N=D(M,A),[P,F]=(0,T.useState)(`create`),I=N.find(e=>e.kind===P)??N[0],L=M===`table`||M===`view`||M===`matview`,R={schema:h||null,name:d,kind:M},z=()=>{n.place&&f(n.place,R)},B=()=>{n.place&&m(n.place,R)},V=e=>{n.place&&p(n.place,e)},H=t?()=>u.getState().closeTab(t):void 0;return n.missing?(0,k.jsx)(S,{empty:`This connection no longer exists.`}):(0,k.jsxs)(`div`,{className:`flex h-full w-full flex-col overflow-hidden`,children:[(0,k.jsx)(w,{title:d,subtitle:[l(n.target,n.name),h,`SQL`].filter(Boolean).join(` · `),color:n.conn?.color??e?.connectionColor,onClose:H}),(0,k.jsxs)(x,{label:`${d} SQL`,className:c(!L&&N.length<=1&&`max-md:hidden`),children:[L&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(C,{icon:r,label:`Structure`,title:`Open the structure of ${d} in its own tab`,onClick:z,opensTab:!0,disabled:!n.place}),(0,k.jsx)(C,{icon:a,label:`Data`,title:`Open the data of ${d}`,onClick:B,opensTab:!0,disabled:!n.place})]}),N.length>1&&(0,k.jsxs)(`span`,{className:`relative mx-1 flex min-w-[150px] shrink-0 max-md:min-w-0 max-md:flex-1`,children:[(0,k.jsx)(`select`,{"aria-label":`Script shown`,value:I?.kind,onChange:e=>F(e.target.value),className:`h-[26px] w-full min-w-0 appearance-none rounded-[5px] border border-border bg-input pr-[26px] pl-2 text-xs text-foreground outline-none focus:border-primary max-md:h-11 max-md:text-sm`,children:N.map(e=>(0,k.jsx)(`option`,{value:e.kind,children:e.label},e.kind))}),(0,k.jsx)(o,{className:`pointer-events-none absolute top-1/2 right-1.5 size-3.5 -translate-y-1/2 text-text-subtle`})]}),N.map(e=>(0,k.jsx)(C,{icon:i,label:e.label,title:`Open this script in a new Query tab`,onClick:()=>V(e.sql),disabled:!n.place,className:`max-md:hidden`},e.kind))]}),(0,k.jsx)(`div`,{className:`min-h-0 flex-1 overflow-hidden bg-input`,children:I?(0,k.jsx)(j,{sql:I.sql}):(0,k.jsx)(S,{loading:E.loading||!E.error&&!E.driver,error:E.error,driver:E.driver})}),I&&(0,k.jsx)(`div`,{className:`flex shrink-0 gap-2 border-t border-border bg-panel-2 p-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] md:hidden`,children:(0,k.jsxs)(`button`,{type:`button`,onClick:()=>V(I.sql),disabled:!n.place,className:`flex h-11 flex-1 items-center justify-center gap-2 rounded-md bg-primary text-sm font-medium text-primary-foreground disabled:opacity-50`,children:[(0,k.jsx)(i,{className:`size-4`}),`Open in a new Query tab`]})})]})}function j({sql:e}){let t=_(),n=d();return(0,k.jsx)(g,{beforeMount:h,height:`100%`,language:`sql`,theme:t,value:e,loading:(0,k.jsx)(s,{className:`size-5 text-text-subtle`}),options:{readOnly:!0,domReadOnly:!0,fontFamily:v,fontSize:13,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:n?`on`:`off`,renderLineHighlight:`none`,overviewRulerLanes:0,hideCursorInOverviewRuler:!0,folding:!1,padding:{top:8,bottom:8},scrollbar:{verticalScrollbarSize:8,horizontalScrollbarSize:8},fixedOverflowWidgets:!0}})}export{j as ReadOnlySql,A as SqlObjectTab};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{Fr as r,Lr as i,P as a,_t as o,dn as s,hr as c,pt as l}from"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as u}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import{t as d}from"./tab-store-D5I52eLN.js";import"./context-menu-BCuZYfWC.js";import"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import"./dropdown-menu-BQidk_OJ.js";import"./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"./use-db-driver-installed-anzWkGi5.js";import"./db-sidebar-reveal-_qw0CliT.js";import{d as f,n as p}from"./explorer-model-BtJN4MZ9.js";import"./db-explorer-store-BmpvDHz6.js";import{n as m}from"./open-db-tabs-CtWIWHOa.js";import"./impexp-state-BWKOuRGj.js";import"./scroll-area-DOlQJGZp.js";import"./marked.esm-jqwIt-AK.js";import{t as h}from"./use-db-tab-B8LjdDb7.js";import{t as g}from"./use-db-read-BCYhIrJM.js";import{a as _,n as v}from"./db-tab-parts-BgVpKbi6.js";import"./use-opener-focus-CDRKhHwX.js";import"./filter-dialog-frame-BkEbqBA4.js";import"./use-at-most-wide-BHsrzvv3.js";import"./glide-data-grid-BlposOph.js";import{TableView as y}from"./table-tab-C2cYw7a0.js";var b=e(t(),1),x=n(),S={table:i,view:o,matview:s};function C({metadata:e,tabId:t}){let n=typeof e?.filePath==`string`?e.filePath:``,i=typeof e?.projectName==`string`&&e.projectName?e.projectName:void 0,o=h((0,b.useMemo)(()=>n?{dbFile:{path:n,...i?{projectName:i}:{}}}:void 0,[n,i]),void 0),s=g(o.target,`/objects`,t),f=(0,b.useMemo)(()=>s.data?.objects.filter(e=>p.has(e.kind))??[],[s.data]),S=typeof e?.tableName==`string`?e.tableName:null,C=f.find(e=>e.name===S)??null,T=n=>{t&&d.getState().updateTab(t,{metadata:{...e,tableName:n}})},E=()=>{o.place&&m(o.place,``)};return n?s.data?(0,x.jsxs)(`div`,{className:`flex h-full w-full overflow-hidden max-md:flex-col`,children:[(0,x.jsxs)(`aside`,{"aria-label":`Tables and views`,className:`flex w-56 shrink-0 flex-col overflow-hidden border-r border-border bg-background max-md:hidden`,children:[(0,x.jsxs)(`div`,{className:`flex h-9 shrink-0 items-center gap-0.5 border-b border-border pr-1 pl-3`,children:[(0,x.jsx)(`span`,{className:`flex-1 truncate text-xs font-medium tracking-wider text-text-subtle uppercase`,children:`Tables`}),(0,x.jsx)(`button`,{type:`button`,onClick:E,disabled:!o.place,title:`New query on this file`,"aria-label":`New query`,className:u(_,`px-1.5`),children:(0,x.jsx)(r,{className:`size-4`})}),(0,x.jsx)(`button`,{type:`button`,onClick:()=>s.reload(),title:`Refresh the list`,"aria-label":`Refresh the list`,className:u(_,`px-1.5`),children:(0,x.jsx)(c,{className:u(`size-4`,s.loading&&`animate-spin`)})})]}),(0,x.jsxs)(`div`,{role:`listbox`,"aria-label":`Tables and views`,className:`min-h-0 flex-1 overflow-y-auto py-1`,children:[f.map(e=>(0,x.jsx)(w,{o:e,selected:e.name===C?.name,onPick:T},e.name)),f.length===0&&(0,x.jsx)(`p`,{className:`px-3 py-4 text-center text-xs text-text-subtle`,children:`No tables found`})]})]}),(0,x.jsxs)(`div`,{className:`hidden shrink-0 items-center gap-1 border-b border-border bg-panel-2 px-2 py-1 max-md:flex`,children:[(0,x.jsxs)(`span`,{className:`relative flex min-w-0 flex-1`,children:[(0,x.jsxs)(`select`,{"aria-label":`Table`,value:C?.name??``,onChange:e=>T(e.target.value),className:`h-11 w-full min-w-0 appearance-none rounded-[5px] border border-border bg-input pr-[26px] pl-2 text-sm text-foreground outline-none focus:border-primary`,children:[!C&&(0,x.jsx)(`option`,{value:``,children:f.length?`Pick a table…`:`No tables found`}),f.map(e=>(0,x.jsx)(`option`,{value:e.name,children:e.name},e.name))]}),(0,x.jsx)(a,{className:`pointer-events-none absolute top-1/2 right-1.5 size-3.5 -translate-y-1/2 text-text-subtle`})]}),(0,x.jsx)(`button`,{type:`button`,onClick:E,disabled:!o.place,"aria-label":`New query`,className:_,children:(0,x.jsx)(r,{className:`size-5`})})]}),(0,x.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1 overflow-hidden`,children:C?(0,x.jsx)(y,{tab:o,table:C.name,schemaName:``,objectKind:C.kind,header:!1,shownIn:t},C.name):(0,x.jsx)(v,{empty:f.length?`Pick a table to see its rows.`:`This database has no tables yet.`})})]}):(0,x.jsx)(v,{loading:s.loading||!s.error&&!s.driver,error:s.error,driver:s.driver}):(0,x.jsxs)(`div`,{className:`flex h-full items-center justify-center gap-2 text-sm text-text-secondary`,children:[(0,x.jsx)(l,{className:`size-5`}),` No database file selected.`]})}function w({o:e,selected:t,onPick:n}){let r=S[e.kind]??i;return(0,x.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":t,onClick:()=>n(e.name),className:u(`flex h-7 w-full items-center gap-2 px-3 text-left text-xs`,t?`bg-accent-wash text-foreground`:`text-text-2 can-hover:hover:bg-surface-hover can-hover:hover:text-text-primary`),children:[(0,x.jsx)(r,{className:u(`size-4 shrink-0`,t?`text-primary`:`text-text-subtle`)}),(0,x.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.name}),e.rowEstimate!==void 0&&(0,x.jsx)(`span`,{className:`shrink-0 font-mono text-[10px] text-text-subtle`,children:f(e.rowEstimate)})]})}export{C as SqliteViewer};
@@ -0,0 +1 @@
1
+ import{E as e}from"./vendor-markdown-C-P1aR4p.js";var t=e();function n({children:e}){return(0,t.jsx)(`span`,{dir:`rtl`,className:`truncate text-left min-w-0 flex-1`,children:(0,t.jsx)(`bdi`,{children:e})})}export{n as t};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{xn as r}from"./icons-BwyIKaTT.js";import{k as i,n as a,r as o}from"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as s}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import{et as c}from"./window-store-DqX_qmkQ.js";import"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import"./dropdown-menu-BQidk_OJ.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{x as l}from"./db-explorer-store-BmpvDHz6.js";import{n as u}from"./open-db-tabs-CtWIWHOa.js";import"./scroll-area-DOlQJGZp.js";import{Jn as d,l as f}from"./index-DLB3j_P0.js";import"./use-monaco-theme-BiDXRJ4e.js";import"./use-db-tab-B8LjdDb7.js";import"./use-db-read-BCYhIrJM.js";import"./db-tab-parts-BgVpKbi6.js";import{ReadOnlySql as p}from"./sql-object-tab-Da42SMK5.js";import{t as m}from"./editor-dialog-cQvqVZAR.js";var h=e(t(),1),g=e=>e.startsWith(`--`);function _(e,t){let n=t.index<0,r=(r,i)=>i===t.index?`failed`:g(r.sql)?null:r.phase===`after`?`ran`:!n&&i>t.index?`not-run`:r.phase===`before`||!e.transactional?`ran`:`rolled-back`,i=e.statements.map((e,t)=>({sql:e.sql,outcome:r(e,t)}));if(!n)return i;let a={sql:`COMMIT;`,outcome:`failed`},o=e.statements.findIndex(e=>e.phase===`after`);return o<0?[...i,a]:[...i.slice(0,o),a,...i.slice(o)]}var v={ran:`Ran`,"rolled-back":`Rolled back`,failed:`Failed`,"not-run":`Did not run`};function y(e){let t=e?.data;return typeof t==`object`&&t?t:null}function b(e){let t=e;return typeof t!=`object`||!t||typeof t.sql!=`string`?null:t.phase===`before`||t.phase===`after`?{sql:t.sql,phase:t.phase}:t.phase===void 0?{sql:t.sql}:null}function x(e){let t=y(e),n=Array.isArray(t?.statements)?t.statements.map(b):null;return!t||typeof t.sql!=`string`||!n||n.some(e=>e===null)||typeof t.recreate!=`boolean`||typeof t.transactional!=`boolean`?null:{sql:t.sql,statements:n,recreate:t.recreate,warnings:Array.isArray(t.warnings)?t.warnings.filter(e=>typeof e==`string`):[],transactional:t.transactional}}function S(e){let t=y(e);return!t||typeof t.index!=`number`||!Number.isInteger(t.index)||typeof t.statement!=`string`?null:{statement:t.statement,index:t.index,applied:typeof t.applied==`number`?t.applied:0,total:typeof t.total==`number`?t.total:0}}var C=n(),w=`This operation is not directly supported by SQL engine. PPM can emulate it, but please check the generated SQL script.`,T=`MySQL commits each statement of this script on its own: should one fail, those before it stay applied.`;function E({request:e,seq:t}){let[n,s]=(0,h.useState)({step:`reading`}),[g,_]=(0,h.useState)(!1),v=()=>d(t);(0,h.useEffect)(()=>{let n=!1;return o.post(c(e.target,`/structure/preview`),{change:e.change}).then(e=>{if(!n){if(e.statements.length>0){s({step:`confirm`,preview:e});return}i.info(`Nothing to save: the database already has the table this way`),d(t)}}).catch(e=>{n||s({step:`failed`,message:e.message})}),()=>{n=!0}},[e,t]);let y=async n=>{s({step:`applying`,preview:n});try{await o.post(c(e.target,`/structure/apply`),{change:e.change,allowRecreate:n.recreate&&g,sql:n.sql})}catch(e){let t=e instanceof a?e.body:null,r=e instanceof a&&e.status===409?x(t):null;if(r){_(!1),s({step:`confirm`,preview:r,notice:e.message});return}s({step:`failed`,message:e.message,preview:n,failure:S(t)});return}i.success(`Saved to database`),d(t),e.onSaved?.(),l(e.target)};if(n.step===`failed`)return(0,C.jsxs)(m,{title:`Error when saving`,description:`Why the change could not be saved`,onClose:v,onSubmit:v,problems:[],buttons:[{label:`Close`,onClick:v,variant:`default`}],wide:!0,children:[(0,C.jsx)(`p`,{role:`alert`,className:`whitespace-pre-wrap break-words text-[13px] text-text-primary`,children:n.message}),n.preview&&n.failure&&(0,C.jsx)(O,{preview:n.preview,failure:n.failure})]});let b=n.step===`reading`?null:n.preview,E=n.step===`applying`,D=!b||E||b.recreate&&!g;return(0,C.jsxs)(m,{title:`Save changes`,description:`The script that makes the change, to read before it runs`,onClose:()=>{E||v()},onSubmit:D?void 0:()=>void y(b),problems:[],buttons:[{label:E?`Saving…`:`OK`,onClick:()=>{b&&!D&&y(b)},variant:`default`,disabled:D},{label:`Close`,onClick:v,disabled:E},{label:`Open script`,onClick:()=>{b&&(v(),u(e.place,b.sql))},disabled:!b||E}],wide:!0,children:[n.step===`confirm`&&n.notice&&(0,C.jsx)(`p`,{role:`alert`,className:`rounded-md border border-warning/40 bg-warning/10 px-3 py-2 text-[12.5px] text-text-primary`,children:n.notice}),(0,C.jsx)(`div`,{className:`h-[min(22rem,45dvh)] overflow-hidden rounded-md border border-border bg-panel-2`,children:b?(0,C.jsx)(p,{sql:b.sql}):(0,C.jsx)(`div`,{className:`grid h-full place-items-center text-text-subtle`,role:`status`,"aria-label":`Reading the script`,children:(0,C.jsx)(r,{className:`size-5 animate-spin`})})}),b&&b.warnings.length>0&&(0,C.jsx)(`ul`,{className:`grid gap-1 text-[12.5px] text-warning`,children:b.warnings.map(e=>(0,C.jsx)(`li`,{children:e},e))}),b&&!b.transactional&&(0,C.jsx)(`p`,{className:`text-[12.5px] text-text-2`,children:T}),b?.recreate&&(0,C.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,C.jsx)(`p`,{className:`text-[12.5px] text-warning`,children:w}),(0,C.jsx)(f,{id:`structure-save-recreate`,title:`Allow recreate (don't use on production databases)`,checked:g,disabled:E,onChange:_})]})]})}var D={ran:`text-success`,"rolled-back":`text-text-subtle`,failed:`text-error font-semibold`,"not-run":`text-text-subtle`};function O({preview:e,failure:t}){let n=_(e,t);return(0,C.jsx)(`ol`,{"aria-label":`Statements`,className:`grid max-h-64 gap-px overflow-y-auto rounded-md border border-border bg-border-soft`,children:n.map((e,t)=>(0,C.jsxs)(`li`,{className:s(`grid grid-cols-[6.5rem_minmax(0,1fr)] gap-2 bg-panel-2 px-2.5 py-1.5`,e.outcome===`failed`&&`bg-error/10`),children:[(0,C.jsx)(`span`,{className:s(`text-xs`,e.outcome?D[e.outcome]:`text-text-dim`),children:e.outcome?v[e.outcome]:``}),(0,C.jsx)(`code`,{className:s(`whitespace-pre-wrap break-words font-mono text-[11.5px]`,e.outcome===null?`text-text-dim`:`text-text-primary`),children:e.sql})]},t))})}export{E as StructureSaveDialog};
@@ -0,0 +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-DLB3j_P0.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-BgVpKbi6.js";import{n as je,t as Me}from"./editor-dialog-cQvqVZAR.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
+ `)}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
+ `)}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};
@@ -0,0 +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-Cz_KJ37M.js","assets/button-C9ZXWb3b.js","assets/use-process-kill-BW2UW0mZ.js","assets/index-DLB3j_P0.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-M3DUzop8.css","assets/process-row-format-CytRH7g2.js","assets/process-table-C_B39GHm.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-DLB3j_P0.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-Cz_KJ37M.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-C_B39GHm.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};
@@ -0,0 +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-DC0j8RqP.js";var n=e(),r=()=>(0,n.jsx)(t,{});export{r as SystemMonitorTab};
@@ -0,0 +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-DC0j8RqP.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};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./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-DLB3j_P0.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};
@@ -0,0 +1 @@
1
+ import{t as e}from"./react-BZ0kba1-.js";import{N as t}from"./window-store-DqX_qmkQ.js";import{t as n}from"./panel-store-BJhazigC.js";var r=e()(()=>({tabs:[],activeTabId:null,tabHistory:[],currentProject:null,switchProject:e=>{n.getState().switchProject(e),i()},openTab:e=>{let t=n.getState().openTab(e);return i(),t},closeTab:e=>{n.getState().closeTab(e),i()},setActiveTab:e=>{n.getState().setActiveTab(e),i()},updateTab:(e,t)=>{n.getState().updateTab(e,t),i()},openNewFile:e=>{let r=n.getState(),a=t(r.panels),o=r.openTab({type:`editor`,title:e?.title??`Untitled-${a}`,projectId:null,metadata:{isUntitled:!0,untitledNumber:a,...e?.language?{language:e.language}:{}},closable:!0});return i(),o}}));function i(){let e=n.getState(),t=e.panels[e.focusedPanelId];r.setState({tabs:t?.tabs??[],activeTabId:t?.activeTabId??null,tabHistory:t?.tabHistory??[],currentProject:e.currentProject})}n.subscribe(()=>i());export{r as t};
@@ -0,0 +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-DLB3j_P0.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-BgVpKbi6.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-BlposOph.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
+ `))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};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{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-DLB3j_P0.js";import{t as m}from"./settings-rows-DD7Gxmst.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};