@powerhousedao/connect 6.0.0-dev.25 → 6.0.0-dev.251

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 (573) hide show
  1. package/.env +1 -1
  2. package/dist/AddDriveModal-ZK9-BWMB.js +92 -0
  3. package/dist/AddDriveModal-ZK9-BWMB.js.map +1 -0
  4. package/dist/ClearStorageModal-Bfb3ube7.js +47 -0
  5. package/dist/ClearStorageModal-Bfb3ube7.js.map +1 -0
  6. package/dist/CookiesPolicyModal-DiXQV82b.js +33 -0
  7. package/dist/CookiesPolicyModal-DiXQV82b.js.map +1 -0
  8. package/dist/CreateDocumentModal-BhJh4nWt.js +31 -0
  9. package/dist/CreateDocumentModal-BhJh4nWt.js.map +1 -0
  10. package/dist/DebugSettingsModal-BvOhyXeo.js +172 -0
  11. package/dist/DebugSettingsModal-BvOhyXeo.js.map +1 -0
  12. package/dist/DeleteDriveModal-CbuIdjKY.js +43 -0
  13. package/dist/DeleteDriveModal-CbuIdjKY.js.map +1 -0
  14. package/dist/DeleteItemModal-9ErYlauT.js +42 -0
  15. package/dist/DeleteItemModal-9ErYlauT.js.map +1 -0
  16. package/dist/DisclaimerModal-CfDeiBz8.js +24 -0
  17. package/dist/DisclaimerModal-CfDeiBz8.js.map +1 -0
  18. package/dist/DownloadDocumentWithErrorsModal-KZGWQ4J7.js +44 -0
  19. package/dist/DownloadDocumentWithErrorsModal-KZGWQ4J7.js.map +1 -0
  20. package/dist/DriveSettingsModal-DEk05PS7.js +51 -0
  21. package/dist/DriveSettingsModal-DEk05PS7.js.map +1 -0
  22. package/dist/InspectorModal-DV7lUbNo.js +375 -0
  23. package/dist/InspectorModal-DV7lUbNo.js.map +1 -0
  24. package/dist/MissingPackageModal-B2EAV_VJ.js +37 -0
  25. package/dist/MissingPackageModal-B2EAV_VJ.js.map +1 -0
  26. package/dist/SettingsModal-2xX1Pgo0.js +297 -0
  27. package/dist/SettingsModal-2xX1Pgo0.js.map +1 -0
  28. package/dist/UpgradeDriveModal-BwI5E5k3.js +34 -0
  29. package/dist/UpgradeDriveModal-BwI5E5k3.js.map +1 -0
  30. package/dist/build-info-D-A4ZnXu.js +15 -0
  31. package/dist/build-info-D-A4ZnXu.js.map +1 -0
  32. package/dist/connect.config-Cuh0hj_Q.js +142 -0
  33. package/dist/connect.config-Cuh0hj_Q.js.map +1 -0
  34. package/dist/i18n-4rfcgnb9.js +128 -0
  35. package/dist/i18n-4rfcgnb9.js.map +1 -0
  36. package/dist/load-BVA6Yfno.js +112 -0
  37. package/dist/load-BVA6Yfno.js.map +1 -0
  38. package/dist/main.d.ts +1 -0
  39. package/dist/main.js +12 -0
  40. package/dist/main.js.map +1 -0
  41. package/dist/package-CvMftS15.js +117 -0
  42. package/dist/package-CvMftS15.js.map +1 -0
  43. package/dist/packages.config-CiH8KJVN.js +32 -0
  44. package/dist/packages.config-CiH8KJVN.js.map +1 -0
  45. package/dist/pglite-runtime-Btp8ZXVH.js +135 -0
  46. package/dist/pglite-runtime-Btp8ZXVH.js.map +1 -0
  47. package/dist/pglite-seed-b1mJUaip.js +49 -0
  48. package/dist/pglite-seed-b1mJUaip.js.map +1 -0
  49. package/dist/pglite.worker.d.ts +1 -0
  50. package/dist/pglite.worker.js +18 -0
  51. package/dist/pglite.worker.js.map +1 -0
  52. package/dist/pglite.worker.legacy.d.ts +1 -0
  53. package/dist/pglite.worker.legacy.js +18 -0
  54. package/dist/pglite.worker.legacy.js.map +1 -0
  55. package/dist/reactor-DFuRedvV.js +913 -0
  56. package/dist/reactor-DFuRedvV.js.map +1 -0
  57. package/dist/registerServiceWorker-CMRF2LWE.js +79 -0
  58. package/dist/registerServiceWorker-CMRF2LWE.js.map +1 -0
  59. package/dist/sidebar-BXOORGUU.js +1473 -0
  60. package/dist/sidebar-BXOORGUU.js.map +1 -0
  61. package/dist/start-connect.d.ts +21 -0
  62. package/dist/start-connect.d.ts.map +1 -0
  63. package/dist/start-connect.js +19 -0
  64. package/dist/start-connect.js.map +1 -0
  65. package/{lib → dist}/style.css +2676 -665
  66. package/dist/toast-DnODOv28.js +23 -0
  67. package/dist/toast-DnODOv28.js.map +1 -0
  68. package/dist/useRegistryPackages-DK8swjWd.js +129 -0
  69. package/dist/useRegistryPackages-DK8swjWd.js.map +1 -0
  70. package/package.json +57 -121
  71. package/public/ph-packages.json +4 -0
  72. package/dist/assets/AddDriveModal-C7Z2sZK_.js +0 -1
  73. package/dist/assets/ClearStorageModal-DbOzc3ZU.js +0 -1
  74. package/dist/assets/CookiesPolicyModal-C_XO21OO.js +0 -1
  75. package/dist/assets/CreateDocumentModal-x_taiRz3.js +0 -1
  76. package/dist/assets/DebugSettingsModal-BJcOlsTZ.js +0 -1
  77. package/dist/assets/DeleteDriveModal-DeH9VQY9.js +0 -1
  78. package/dist/assets/DeleteItemModal-D7Qu84-q.js +0 -1
  79. package/dist/assets/DisclaimerModal-BQIg2v2R.js +0 -1
  80. package/dist/assets/DriveSettingsModal-bqGDyMI3.js +0 -1
  81. package/dist/assets/ExportDocumentWithErrorsModal-R7DEHij0.js +0 -1
  82. package/dist/assets/SettingsModal-DdG8aeDJ.js +0 -1
  83. package/dist/assets/UpgradeDriveModal-B-hBwR2i.js +0 -1
  84. package/dist/assets/_virtual_ph_external-packages-CM1tCR4L.js +0 -1
  85. package/dist/assets/config-CU-aFfVJ.js +0 -1
  86. package/dist/assets/connect-loader-CvOC68Ih.mp4 +0 -0
  87. package/dist/assets/design_system-BcEdk8na.js +0 -45
  88. package/dist/assets/design_system_connect-DP1bez4c.js +0 -47
  89. package/dist/assets/design_system_ui-BfiQDMDm.js +0 -1
  90. package/dist/assets/document_drive-CRnZJpoY.js +0 -316
  91. package/dist/assets/document_engineering-CzgOYc4D.js +0 -1
  92. package/dist/assets/document_model-Cvww2VA-.js +0 -230
  93. package/dist/assets/document_model_editor-DM4sUsBJ.js +0 -25
  94. package/dist/assets/drive_explorer-CT-nxWx1.js +0 -2
  95. package/dist/assets/graphql-AKTCpY7l.js +0 -75
  96. package/dist/assets/graphql-editor-DlrXC8fb.js +0 -73
  97. package/dist/assets/graphql_request-BJtmW2JS.js +0 -3
  98. package/dist/assets/hmr-LMNkvzP7.js +0 -1
  99. package/dist/assets/home-bg-BEhF9NuW.png +0 -0
  100. package/dist/assets/home-bg-BRYzhkhi.avif +0 -0
  101. package/dist/assets/hooks-CvLv823j.js +0 -12
  102. package/dist/assets/index-BQ4PI8SD.js +0 -18
  103. package/dist/assets/index-DAT-H4WM.js +0 -28
  104. package/dist/assets/index-Df9NBjHI.css +0 -1
  105. package/dist/assets/json-editor-CvAYdg64.js +0 -1
  106. package/dist/assets/nodefs-BCDFwcl8.js +0 -1
  107. package/dist/assets/opfs-ahp-P6iX3dK-.js +0 -3
  108. package/dist/assets/pg_dump-CW0pN9tG.wasm +0 -0
  109. package/dist/assets/postgres-CkP7QCDB.data +0 -0
  110. package/dist/assets/postgres-CyuUVpXN.wasm +0 -0
  111. package/dist/assets/powerhouse-rounded-CeKGGUG4.png +0 -0
  112. package/dist/assets/react/jsx-runtime-DldvXD6N.js +0 -1
  113. package/dist/assets/react-DQSxOgtG.js +0 -1
  114. package/dist/assets/react-dom/client-BVPiT_FE.js +0 -9
  115. package/dist/assets/react-dom-D6zQJsh6.js +0 -1
  116. package/dist/assets/reactor_browser-B5Ef2pxf.js +0 -129
  117. package/dist/assets/renown-short-hover-BiSLBV7L.png +0 -0
  118. package/dist/assets/rwa-report-Bb0W5-ac.png +0 -0
  119. package/dist/assets/sentry_browser-B4YoBIIG.js +0 -498
  120. package/dist/assets/sentry_react-cODD7zWc.js +0 -3
  121. package/dist/assets/state-schemas-DKbRkRW0.js +0 -2
  122. package/dist/assets/tailwind_merge-Dr4f9Rms.js +0 -1
  123. package/dist/assets/zod-9j67vCAu.js +0 -39
  124. package/dist/icon.ico +0 -0
  125. package/dist/index.html +0 -51
  126. package/dist/robots.txt +0 -3
  127. package/dist/settings.png +0 -0
  128. package/heroku/Dockerfile +0 -101
  129. package/heroku/Procfile +0 -1
  130. package/heroku/config/nginx.conf.template +0 -77
  131. package/heroku/heroku-entrypoint.sh +0 -38
  132. package/lib/cypress/e2e/navigation.cy.d.ts +0 -2
  133. package/lib/cypress/e2e/navigation.cy.d.ts.map +0 -1
  134. package/lib/cypress/e2e/navigation.cy.js +0 -221
  135. package/lib/cypress/e2e/navigation.cy.js.map +0 -1
  136. package/lib/cypress/e2e/utils/index.d.ts +0 -15
  137. package/lib/cypress/e2e/utils/index.d.ts.map +0 -1
  138. package/lib/cypress/e2e/utils/index.js +0 -121
  139. package/lib/cypress/e2e/utils/index.js.map +0 -1
  140. package/lib/cypress/support/commands.d.ts +0 -2
  141. package/lib/cypress/support/commands.d.ts.map +0 -1
  142. package/lib/cypress/support/commands.js +0 -29
  143. package/lib/cypress/support/commands.js.map +0 -1
  144. package/lib/cypress/support/e2e.d.ts +0 -2
  145. package/lib/cypress/support/e2e.d.ts.map +0 -1
  146. package/lib/cypress/support/e2e.js +0 -19
  147. package/lib/cypress/support/e2e.js.map +0 -1
  148. package/lib/cypress.config.d.ts +0 -3
  149. package/lib/cypress.config.d.ts.map +0 -1
  150. package/lib/cypress.config.js +0 -15
  151. package/lib/cypress.config.js.map +0 -1
  152. package/lib/package.copy.json +0 -177
  153. package/lib/scripts/render-skeleton.d.ts +0 -2
  154. package/lib/scripts/render-skeleton.d.ts.map +0 -1
  155. package/lib/scripts/render-skeleton.js +0 -11
  156. package/lib/scripts/render-skeleton.js.map +0 -1
  157. package/lib/src/components/analytics.d.ts +0 -8
  158. package/lib/src/components/analytics.d.ts.map +0 -1
  159. package/lib/src/components/analytics.js +0 -30
  160. package/lib/src/components/analytics.js.map +0 -1
  161. package/lib/src/components/app-loader.d.ts +0 -3
  162. package/lib/src/components/app-loader.d.ts.map +0 -1
  163. package/lib/src/components/app-loader.js +0 -20
  164. package/lib/src/components/app-loader.js.map +0 -1
  165. package/lib/src/components/app-skeleton.d.ts +0 -3
  166. package/lib/src/components/app-skeleton.d.ts.map +0 -1
  167. package/lib/src/components/app-skeleton.js +0 -38
  168. package/lib/src/components/app-skeleton.js.map +0 -1
  169. package/lib/src/components/app.d.ts +0 -2
  170. package/lib/src/components/app.d.ts.map +0 -1
  171. package/lib/src/components/app.js +0 -29
  172. package/lib/src/components/app.js.map +0 -1
  173. package/lib/src/components/button.d.ts +0 -3
  174. package/lib/src/components/button.d.ts.map +0 -1
  175. package/lib/src/components/button.js +0 -7
  176. package/lib/src/components/button.js.map +0 -1
  177. package/lib/src/components/cookie-banner.d.ts +0 -2
  178. package/lib/src/components/cookie-banner.d.ts.map +0 -1
  179. package/lib/src/components/cookie-banner.js +0 -48
  180. package/lib/src/components/cookie-banner.js.map +0 -1
  181. package/lib/src/components/document-editor-container.d.ts +0 -2
  182. package/lib/src/components/document-editor-container.d.ts.map +0 -1
  183. package/lib/src/components/document-editor-container.js +0 -65
  184. package/lib/src/components/document-editor-container.js.map +0 -1
  185. package/lib/src/components/dots-loader.d.ts +0 -2
  186. package/lib/src/components/dots-loader.d.ts.map +0 -1
  187. package/lib/src/components/dots-loader.js +0 -15
  188. package/lib/src/components/dots-loader.js.map +0 -1
  189. package/lib/src/components/drive-editor-container.d.ts +0 -2
  190. package/lib/src/components/drive-editor-container.d.ts.map +0 -1
  191. package/lib/src/components/drive-editor-container.js +0 -22
  192. package/lib/src/components/drive-editor-container.js.map +0 -1
  193. package/lib/src/components/drive-icon.d.ts +0 -5
  194. package/lib/src/components/drive-icon.d.ts.map +0 -1
  195. package/lib/src/components/drive-icon.js +0 -15
  196. package/lib/src/components/drive-icon.js.map +0 -1
  197. package/lib/src/components/editor-loader.d.ts +0 -9
  198. package/lib/src/components/editor-loader.d.ts.map +0 -1
  199. package/lib/src/components/editor-loader.js +0 -19
  200. package/lib/src/components/editor-loader.js.map +0 -1
  201. package/lib/src/components/editors.d.ts +0 -10
  202. package/lib/src/components/editors.d.ts.map +0 -1
  203. package/lib/src/components/editors.js +0 -89
  204. package/lib/src/components/editors.js.map +0 -1
  205. package/lib/src/components/error-boundary.d.ts +0 -103
  206. package/lib/src/components/error-boundary.d.ts.map +0 -1
  207. package/lib/src/components/error-boundary.js +0 -104
  208. package/lib/src/components/error-boundary.js.map +0 -1
  209. package/lib/src/components/footer.d.ts +0 -2
  210. package/lib/src/components/footer.d.ts.map +0 -1
  211. package/lib/src/components/footer.js +0 -16
  212. package/lib/src/components/footer.js.map +0 -1
  213. package/lib/src/components/index.d.ts +0 -22
  214. package/lib/src/components/index.d.ts.map +0 -1
  215. package/lib/src/components/index.js +0 -22
  216. package/lib/src/components/index.js.map +0 -1
  217. package/lib/src/components/login.d.ts +0 -2
  218. package/lib/src/components/login.d.ts.map +0 -1
  219. package/lib/src/components/login.js +0 -12
  220. package/lib/src/components/login.js.map +0 -1
  221. package/lib/src/components/modal/index.d.ts +0 -18
  222. package/lib/src/components/modal/index.d.ts.map +0 -1
  223. package/lib/src/components/modal/index.js +0 -18
  224. package/lib/src/components/modal/index.js.map +0 -1
  225. package/lib/src/components/modal/modals/AddDriveModal.d.ts +0 -2
  226. package/lib/src/components/modal/modals/AddDriveModal.d.ts.map +0 -1
  227. package/lib/src/components/modal/modals/AddDriveModal.js +0 -121
  228. package/lib/src/components/modal/modals/AddDriveModal.js.map +0 -1
  229. package/lib/src/components/modal/modals/ClearStorageModal.d.ts +0 -2
  230. package/lib/src/components/modal/modals/ClearStorageModal.d.ts.map +0 -1
  231. package/lib/src/components/modal/modals/ClearStorageModal.js +0 -35
  232. package/lib/src/components/modal/modals/ClearStorageModal.js.map +0 -1
  233. package/lib/src/components/modal/modals/CookiesPolicyModal.d.ts +0 -2
  234. package/lib/src/components/modal/modals/CookiesPolicyModal.d.ts.map +0 -1
  235. package/lib/src/components/modal/modals/CookiesPolicyModal.js +0 -16
  236. package/lib/src/components/modal/modals/CookiesPolicyModal.js.map +0 -1
  237. package/lib/src/components/modal/modals/CreateDocumentModal.d.ts +0 -2
  238. package/lib/src/components/modal/modals/CreateDocumentModal.d.ts.map +0 -1
  239. package/lib/src/components/modal/modals/CreateDocumentModal.js +0 -24
  240. package/lib/src/components/modal/modals/CreateDocumentModal.js.map +0 -1
  241. package/lib/src/components/modal/modals/DebugSettingsModal.d.ts +0 -2
  242. package/lib/src/components/modal/modals/DebugSettingsModal.d.ts.map +0 -1
  243. package/lib/src/components/modal/modals/DebugSettingsModal.js +0 -108
  244. package/lib/src/components/modal/modals/DebugSettingsModal.js.map +0 -1
  245. package/lib/src/components/modal/modals/DeleteDriveModal.d.ts +0 -2
  246. package/lib/src/components/modal/modals/DeleteDriveModal.d.ts.map +0 -1
  247. package/lib/src/components/modal/modals/DeleteDriveModal.js +0 -32
  248. package/lib/src/components/modal/modals/DeleteDriveModal.js.map +0 -1
  249. package/lib/src/components/modal/modals/DeleteItemModal.d.ts +0 -3
  250. package/lib/src/components/modal/modals/DeleteItemModal.d.ts.map +0 -1
  251. package/lib/src/components/modal/modals/DeleteItemModal.js +0 -33
  252. package/lib/src/components/modal/modals/DeleteItemModal.js.map +0 -1
  253. package/lib/src/components/modal/modals/DisclaimerModal.d.ts +0 -3
  254. package/lib/src/components/modal/modals/DisclaimerModal.d.ts.map +0 -1
  255. package/lib/src/components/modal/modals/DisclaimerModal.js +0 -12
  256. package/lib/src/components/modal/modals/DisclaimerModal.js.map +0 -1
  257. package/lib/src/components/modal/modals/DriveSettingsModal.d.ts +0 -2
  258. package/lib/src/components/modal/modals/DriveSettingsModal.d.ts.map +0 -1
  259. package/lib/src/components/modal/modals/DriveSettingsModal.js +0 -28
  260. package/lib/src/components/modal/modals/DriveSettingsModal.js.map +0 -1
  261. package/lib/src/components/modal/modals/ExportDocumentWithErrorsModal.d.ts +0 -2
  262. package/lib/src/components/modal/modals/ExportDocumentWithErrorsModal.d.ts.map +0 -1
  263. package/lib/src/components/modal/modals/ExportDocumentWithErrorsModal.js +0 -30
  264. package/lib/src/components/modal/modals/ExportDocumentWithErrorsModal.js.map +0 -1
  265. package/lib/src/components/modal/modals/InspectorModal/InspectorModal.d.ts +0 -2
  266. package/lib/src/components/modal/modals/InspectorModal/InspectorModal.d.ts.map +0 -1
  267. package/lib/src/components/modal/modals/InspectorModal/InspectorModal.js +0 -29
  268. package/lib/src/components/modal/modals/InspectorModal/InspectorModal.js.map +0 -1
  269. package/lib/src/components/modal/modals/InspectorModal/index.d.ts +0 -2
  270. package/lib/src/components/modal/modals/InspectorModal/index.d.ts.map +0 -1
  271. package/lib/src/components/modal/modals/InspectorModal/index.js +0 -2
  272. package/lib/src/components/modal/modals/InspectorModal/index.js.map +0 -1
  273. package/lib/src/components/modal/modals/InspectorModal/useDbExplorer.d.ts +0 -31
  274. package/lib/src/components/modal/modals/InspectorModal/useDbExplorer.d.ts.map +0 -1
  275. package/lib/src/components/modal/modals/InspectorModal/useDbExplorer.js +0 -211
  276. package/lib/src/components/modal/modals/InspectorModal/useDbExplorer.js.map +0 -1
  277. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.d.ts +0 -4
  278. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.d.ts.map +0 -1
  279. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.js +0 -12
  280. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.js.map +0 -1
  281. package/lib/src/components/modal/modals/SettingsModal.d.ts +0 -3
  282. package/lib/src/components/modal/modals/SettingsModal.d.ts.map +0 -1
  283. package/lib/src/components/modal/modals/SettingsModal.js +0 -45
  284. package/lib/src/components/modal/modals/SettingsModal.js.map +0 -1
  285. package/lib/src/components/modal/modals/UpgradeDriveModal.d.ts +0 -3
  286. package/lib/src/components/modal/modals/UpgradeDriveModal.d.ts.map +0 -1
  287. package/lib/src/components/modal/modals/UpgradeDriveModal.js +0 -21
  288. package/lib/src/components/modal/modals/UpgradeDriveModal.js.map +0 -1
  289. package/lib/src/components/modal/modals/settings/about.d.ts +0 -2
  290. package/lib/src/components/modal/modals/settings/about.d.ts.map +0 -1
  291. package/lib/src/components/modal/modals/settings/about.js +0 -10
  292. package/lib/src/components/modal/modals/settings/about.js.map +0 -1
  293. package/lib/src/components/modal/modals/settings/danger-zone.d.ts +0 -2
  294. package/lib/src/components/modal/modals/settings/danger-zone.d.ts.map +0 -1
  295. package/lib/src/components/modal/modals/settings/danger-zone.js +0 -15
  296. package/lib/src/components/modal/modals/settings/danger-zone.js.map +0 -1
  297. package/lib/src/components/modal/modals/settings/default-editor.d.ts +0 -2
  298. package/lib/src/components/modal/modals/settings/default-editor.d.ts.map +0 -1
  299. package/lib/src/components/modal/modals/settings/default-editor.js +0 -18
  300. package/lib/src/components/modal/modals/settings/default-editor.js.map +0 -1
  301. package/lib/src/components/modal/modals/settings/package-manager.d.ts +0 -3
  302. package/lib/src/components/modal/modals/settings/package-manager.d.ts.map +0 -1
  303. package/lib/src/components/modal/modals/settings/package-manager.js +0 -87
  304. package/lib/src/components/modal/modals/settings/package-manager.js.map +0 -1
  305. package/lib/src/components/modal/modals-container.d.ts +0 -2
  306. package/lib/src/components/modal/modals-container.d.ts.map +0 -1
  307. package/lib/src/components/modal/modals-container.js +0 -66
  308. package/lib/src/components/modal/modals-container.js.map +0 -1
  309. package/lib/src/components/ph-logo.d.ts +0 -2
  310. package/lib/src/components/ph-logo.d.ts.map +0 -1
  311. package/lib/src/components/ph-logo.js +0 -7
  312. package/lib/src/components/ph-logo.js.map +0 -1
  313. package/lib/src/components/reload-connect-toast.d.ts +0 -2
  314. package/lib/src/components/reload-connect-toast.d.ts.map +0 -1
  315. package/lib/src/components/reload-connect-toast.js +0 -7
  316. package/lib/src/components/reload-connect-toast.js.map +0 -1
  317. package/lib/src/components/root.d.ts +0 -2
  318. package/lib/src/components/root.d.ts.map +0 -1
  319. package/lib/src/components/root.js +0 -8
  320. package/lib/src/components/root.js.map +0 -1
  321. package/lib/src/components/router.d.ts +0 -2
  322. package/lib/src/components/router.d.ts.map +0 -1
  323. package/lib/src/components/router.js +0 -41
  324. package/lib/src/components/router.js.map +0 -1
  325. package/lib/src/components/search-bar.d.ts +0 -2
  326. package/lib/src/components/search-bar.d.ts.map +0 -1
  327. package/lib/src/components/search-bar.js +0 -36
  328. package/lib/src/components/search-bar.js.map +0 -1
  329. package/lib/src/components/sidebar.d.ts +0 -2
  330. package/lib/src/components/sidebar.d.ts.map +0 -1
  331. package/lib/src/components/sidebar.js +0 -28
  332. package/lib/src/components/sidebar.js.map +0 -1
  333. package/lib/src/connect.config.d.ts +0 -115
  334. package/lib/src/connect.config.d.ts.map +0 -1
  335. package/lib/src/connect.config.js +0 -148
  336. package/lib/src/connect.config.js.map +0 -1
  337. package/lib/src/context/index.d.ts +0 -4
  338. package/lib/src/context/index.d.ts.map +0 -1
  339. package/lib/src/context/index.js +0 -4
  340. package/lib/src/context/index.js.map +0 -1
  341. package/lib/src/context/processor-manager.d.ts +0 -3
  342. package/lib/src/context/processor-manager.d.ts.map +0 -1
  343. package/lib/src/context/processor-manager.js +0 -189
  344. package/lib/src/context/processor-manager.js.map +0 -1
  345. package/lib/src/context/read-mode.d.ts +0 -2
  346. package/lib/src/context/read-mode.d.ts.map +0 -1
  347. package/lib/src/context/read-mode.js +0 -219
  348. package/lib/src/context/read-mode.js.map +0 -1
  349. package/lib/src/context/sentry-provider.d.ts +0 -6
  350. package/lib/src/context/sentry-provider.d.ts.map +0 -1
  351. package/lib/src/context/sentry-provider.js +0 -6
  352. package/lib/src/context/sentry-provider.js.map +0 -1
  353. package/lib/src/feature-flags.d.ts +0 -53
  354. package/lib/src/feature-flags.d.ts.map +0 -1
  355. package/lib/src/feature-flags.js +0 -186
  356. package/lib/src/feature-flags.js.map +0 -1
  357. package/lib/src/globals.d.ts +0 -9
  358. package/lib/src/globals.d.ts.map +0 -1
  359. package/lib/src/globals.js +0 -2
  360. package/lib/src/globals.js.map +0 -1
  361. package/lib/src/hmr.d.ts +0 -3
  362. package/lib/src/hmr.d.ts.map +0 -1
  363. package/lib/src/hmr.js +0 -2
  364. package/lib/src/hmr.js.map +0 -1
  365. package/lib/src/hooks/index.d.ts +0 -10
  366. package/lib/src/hooks/index.d.ts.map +0 -1
  367. package/lib/src/hooks/index.js +0 -10
  368. package/lib/src/hooks/index.js.map +0 -1
  369. package/lib/src/hooks/useAcceptedCookies.d.ts +0 -9
  370. package/lib/src/hooks/useAcceptedCookies.d.ts.map +0 -1
  371. package/lib/src/hooks/useAcceptedCookies.js +0 -34
  372. package/lib/src/hooks/useAcceptedCookies.js.map +0 -1
  373. package/lib/src/hooks/useCheckLatestVersion.d.ts +0 -2
  374. package/lib/src/hooks/useCheckLatestVersion.d.ts.map +0 -1
  375. package/lib/src/hooks/useCheckLatestVersion.js +0 -33
  376. package/lib/src/hooks/useCheckLatestVersion.js.map +0 -1
  377. package/lib/src/hooks/useClientErrorHandler.d.ts +0 -6
  378. package/lib/src/hooks/useClientErrorHandler.d.ts.map +0 -1
  379. package/lib/src/hooks/useClientErrorHandler.js +0 -131
  380. package/lib/src/hooks/useClientErrorHandler.js.map +0 -1
  381. package/lib/src/hooks/useCookieBanner.d.ts +0 -5
  382. package/lib/src/hooks/useCookieBanner.d.ts.map +0 -1
  383. package/lib/src/hooks/useCookieBanner.js +0 -32
  384. package/lib/src/hooks/useCookieBanner.js.map +0 -1
  385. package/lib/src/hooks/useInitSentry.d.ts +0 -2
  386. package/lib/src/hooks/useInitSentry.d.ts.map +0 -1
  387. package/lib/src/hooks/useInitSentry.js +0 -80
  388. package/lib/src/hooks/useInitSentry.js.map +0 -1
  389. package/lib/src/hooks/useNodeActions.d.ts +0 -6
  390. package/lib/src/hooks/useNodeActions.d.ts.map +0 -1
  391. package/lib/src/hooks/useNodeActions.js +0 -35
  392. package/lib/src/hooks/useNodeActions.js.map +0 -1
  393. package/lib/src/hooks/useUndoRedoShortcuts.d.ts +0 -8
  394. package/lib/src/hooks/useUndoRedoShortcuts.d.ts.map +0 -1
  395. package/lib/src/hooks/useUndoRedoShortcuts.js +0 -26
  396. package/lib/src/hooks/useUndoRedoShortcuts.js.map +0 -1
  397. package/lib/src/hooks/useWindowSize.d.ts +0 -5
  398. package/lib/src/hooks/useWindowSize.d.ts.map +0 -1
  399. package/lib/src/hooks/useWindowSize.js +0 -21
  400. package/lib/src/hooks/useWindowSize.js.map +0 -1
  401. package/lib/src/hooks/utils.d.ts +0 -7
  402. package/lib/src/hooks/utils.d.ts.map +0 -1
  403. package/lib/src/hooks/utils.js +0 -46
  404. package/lib/src/hooks/utils.js.map +0 -1
  405. package/lib/src/i18n/index.d.ts +0 -4
  406. package/lib/src/i18n/index.d.ts.map +0 -1
  407. package/lib/src/i18n/index.js +0 -26
  408. package/lib/src/i18n/index.js.map +0 -1
  409. package/lib/src/i18n/locales/en.json +0 -114
  410. package/lib/src/index.d.ts +0 -2
  411. package/lib/src/index.d.ts.map +0 -1
  412. package/lib/src/index.js +0 -2
  413. package/lib/src/index.js.map +0 -1
  414. package/lib/src/main.d.ts +0 -2
  415. package/lib/src/main.d.ts.map +0 -1
  416. package/lib/src/main.js +0 -5
  417. package/lib/src/main.js.map +0 -1
  418. package/lib/src/pages/content.d.ts +0 -2
  419. package/lib/src/pages/content.d.ts.map +0 -1
  420. package/lib/src/pages/content.js +0 -39
  421. package/lib/src/pages/content.js.map +0 -1
  422. package/lib/src/pages/demo/atlas-import.d.ts +0 -2
  423. package/lib/src/pages/demo/atlas-import.d.ts.map +0 -1
  424. package/lib/src/pages/demo/atlas-import.js +0 -122
  425. package/lib/src/pages/demo/atlas-import.js.map +0 -1
  426. package/lib/src/pages/index.d.ts +0 -4
  427. package/lib/src/pages/index.d.ts.map +0 -1
  428. package/lib/src/pages/index.js +0 -4
  429. package/lib/src/pages/index.js.map +0 -1
  430. package/lib/src/pages/settings.d.ts +0 -4
  431. package/lib/src/pages/settings.d.ts.map +0 -1
  432. package/lib/src/pages/settings.js +0 -9
  433. package/lib/src/pages/settings.js.map +0 -1
  434. package/lib/src/service-worker.d.ts +0 -2
  435. package/lib/src/service-worker.d.ts.map +0 -1
  436. package/lib/src/service-worker.js +0 -58
  437. package/lib/src/service-worker.js.map +0 -1
  438. package/lib/src/services/hmr.d.ts +0 -13
  439. package/lib/src/services/hmr.d.ts.map +0 -1
  440. package/lib/src/services/hmr.js +0 -85
  441. package/lib/src/services/hmr.js.map +0 -1
  442. package/lib/src/services/index.d.ts +0 -10
  443. package/lib/src/services/index.d.ts.map +0 -1
  444. package/lib/src/services/index.js +0 -9
  445. package/lib/src/services/index.js.map +0 -1
  446. package/lib/src/services/logger.d.ts +0 -2
  447. package/lib/src/services/logger.d.ts.map +0 -1
  448. package/lib/src/services/logger.js +0 -28
  449. package/lib/src/services/logger.js.map +0 -1
  450. package/lib/src/services/renown/browser.d.ts +0 -2
  451. package/lib/src/services/renown/browser.d.ts.map +0 -1
  452. package/lib/src/services/renown/browser.js +0 -6
  453. package/lib/src/services/renown/browser.js.map +0 -1
  454. package/lib/src/services/renown/constants.d.ts +0 -130
  455. package/lib/src/services/renown/constants.d.ts.map +0 -1
  456. package/lib/src/services/renown/constants.js +0 -41
  457. package/lib/src/services/renown/constants.js.map +0 -1
  458. package/lib/src/services/renown/utils.d.ts +0 -7
  459. package/lib/src/services/renown/utils.d.ts.map +0 -1
  460. package/lib/src/services/renown/utils.js +0 -20
  461. package/lib/src/services/renown/utils.js.map +0 -1
  462. package/lib/src/services/storage/base-storage.d.ts +0 -9
  463. package/lib/src/services/storage/base-storage.d.ts.map +0 -1
  464. package/lib/src/services/storage/base-storage.js +0 -21
  465. package/lib/src/services/storage/base-storage.js.map +0 -1
  466. package/lib/src/services/storage/browser.d.ts +0 -5
  467. package/lib/src/services/storage/browser.d.ts.map +0 -1
  468. package/lib/src/services/storage/browser.js +0 -25
  469. package/lib/src/services/storage/browser.js.map +0 -1
  470. package/lib/src/services/storage/types.d.ts +0 -6
  471. package/lib/src/services/storage/types.d.ts.map +0 -1
  472. package/lib/src/services/storage/types.js +0 -2
  473. package/lib/src/services/storage/types.js.map +0 -1
  474. package/lib/src/services/toast.d.ts +0 -8
  475. package/lib/src/services/toast.d.ts.map +0 -1
  476. package/lib/src/services/toast.js +0 -11
  477. package/lib/src/services/toast.js.map +0 -1
  478. package/lib/src/store/document-model.d.ts +0 -3
  479. package/lib/src/store/document-model.d.ts.map +0 -1
  480. package/lib/src/store/document-model.js +0 -80
  481. package/lib/src/store/document-model.js.map +0 -1
  482. package/lib/src/store/editor.d.ts +0 -5
  483. package/lib/src/store/editor.d.ts.map +0 -1
  484. package/lib/src/store/editor.js +0 -31
  485. package/lib/src/store/editor.js.map +0 -1
  486. package/lib/src/store/external-packages.d.ts +0 -4
  487. package/lib/src/store/external-packages.d.ts.map +0 -1
  488. package/lib/src/store/external-packages.js +0 -36
  489. package/lib/src/store/external-packages.js.map +0 -1
  490. package/lib/src/store/index.d.ts +0 -7
  491. package/lib/src/store/index.d.ts.map +0 -1
  492. package/lib/src/store/index.js +0 -7
  493. package/lib/src/store/index.js.map +0 -1
  494. package/lib/src/store/reactor.d.ts +0 -3
  495. package/lib/src/store/reactor.d.ts.map +0 -1
  496. package/lib/src/store/reactor.js +0 -272
  497. package/lib/src/store/reactor.js.map +0 -1
  498. package/lib/src/store/user.d.ts +0 -2
  499. package/lib/src/store/user.d.ts.map +0 -1
  500. package/lib/src/store/user.js +0 -16
  501. package/lib/src/store/user.js.map +0 -1
  502. package/lib/src/store/utils.d.ts +0 -2
  503. package/lib/src/store/utils.d.ts.map +0 -1
  504. package/lib/src/store/utils.js +0 -59
  505. package/lib/src/store/utils.js.map +0 -1
  506. package/lib/src/utils/browser.d.ts +0 -2
  507. package/lib/src/utils/browser.d.ts.map +0 -1
  508. package/lib/src/utils/browser.js +0 -9
  509. package/lib/src/utils/browser.js.map +0 -1
  510. package/lib/src/utils/document-editor-debug-tools.d.ts +0 -17
  511. package/lib/src/utils/document-editor-debug-tools.d.ts.map +0 -1
  512. package/lib/src/utils/document-editor-debug-tools.js +0 -55
  513. package/lib/src/utils/document-editor-debug-tools.js.map +0 -1
  514. package/lib/src/utils/drive-preservation.d.ts +0 -19
  515. package/lib/src/utils/drive-preservation.d.ts.map +0 -1
  516. package/lib/src/utils/drive-preservation.js +0 -51
  517. package/lib/src/utils/drive-preservation.js.map +0 -1
  518. package/lib/src/utils/drive-sections.d.ts +0 -31
  519. package/lib/src/utils/drive-sections.d.ts.map +0 -1
  520. package/lib/src/utils/drive-sections.js +0 -63
  521. package/lib/src/utils/drive-sections.js.map +0 -1
  522. package/lib/src/utils/index.d.ts +0 -12
  523. package/lib/src/utils/index.d.ts.map +0 -1
  524. package/lib/src/utils/index.js +0 -12
  525. package/lib/src/utils/index.js.map +0 -1
  526. package/lib/src/utils/join.d.ts +0 -2
  527. package/lib/src/utils/join.d.ts.map +0 -1
  528. package/lib/src/utils/join.js +0 -11
  529. package/lib/src/utils/join.js.map +0 -1
  530. package/lib/src/utils/openUrl.d.ts +0 -2
  531. package/lib/src/utils/openUrl.d.ts.map +0 -1
  532. package/lib/src/utils/openUrl.js +0 -3
  533. package/lib/src/utils/openUrl.js.map +0 -1
  534. package/lib/src/utils/path.d.ts +0 -4
  535. package/lib/src/utils/path.d.ts.map +0 -1
  536. package/lib/src/utils/path.js +0 -17
  537. package/lib/src/utils/path.js.map +0 -1
  538. package/lib/src/utils/reactor.d.ts +0 -26
  539. package/lib/src/utils/reactor.d.ts.map +0 -1
  540. package/lib/src/utils/reactor.js +0 -115
  541. package/lib/src/utils/reactor.js.map +0 -1
  542. package/lib/src/utils/registerServiceWorker.d.ts +0 -12
  543. package/lib/src/utils/registerServiceWorker.d.ts.map +0 -1
  544. package/lib/src/utils/registerServiceWorker.js +0 -97
  545. package/lib/src/utils/registerServiceWorker.js.map +0 -1
  546. package/lib/src/utils/signature.d.ts +0 -4
  547. package/lib/src/utils/signature.d.ts.map +0 -1
  548. package/lib/src/utils/signature.js +0 -36
  549. package/lib/src/utils/signature.js.map +0 -1
  550. package/lib/src/utils/slug.d.ts +0 -2
  551. package/lib/src/utils/slug.d.ts.map +0 -1
  552. package/lib/src/utils/slug.js +0 -4
  553. package/lib/src/utils/slug.js.map +0 -1
  554. package/lib/src/workers/pglite-worker.d.ts +0 -2
  555. package/lib/src/workers/pglite-worker.d.ts.map +0 -1
  556. package/lib/src/workers/pglite-worker.js +0 -32
  557. package/lib/src/workers/pglite-worker.js.map +0 -1
  558. package/lib/test/utils/signer.test.d.ts +0 -2
  559. package/lib/test/utils/signer.test.d.ts.map +0 -1
  560. package/lib/test/utils/signer.test.js +0 -330
  561. package/lib/test/utils/signer.test.js.map +0 -1
  562. package/lib/tsconfig.tsbuildinfo +0 -1
  563. package/lib/vite.config.d.ts +0 -3
  564. package/lib/vite.config.d.ts.map +0 -1
  565. package/lib/vite.config.js +0 -59
  566. package/lib/vite.config.js.map +0 -1
  567. package/lib/vitest.config.d.ts +0 -3
  568. package/lib/vitest.config.d.ts.map +0 -1
  569. package/lib/vitest.config.js +0 -8
  570. package/lib/vitest.config.js.map +0 -1
  571. package/nginx.conf +0 -77
  572. package/package.copy.json +0 -177
  573. package/src/index.css +0 -5
@@ -0,0 +1,1473 @@
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0e6285c3-6ff2-51e3-bd29-e9f89fcb22f9")}catch(e){}}();
3
+ import { n as defaultPHAppConfig, r as defaultPHDocumentEditorConfig, t as connectConfig } from "./connect.config-Cuh0hj_Q.js";
4
+ import { n as toast, t as ToastContainer } from "./toast-DnODOv28.js";
5
+ import { t as i18n } from "./i18n-4rfcgnb9.js";
6
+ import { c as subscribeReactorPgMajor, d as createFileDataStore, f as idbError, l as IDB_STORE_NAME, m as readPgVersionFile, p as openIdb, r as getCachedReactorPgMajor, u as PRIMARY_IDB_NAMES } from "./pglite-runtime-Btp8ZXVH.js";
7
+ import { t as serviceWorkerManager } from "./registerServiceWorker-CMRF2LWE.js";
8
+ import { driveCollectionId, getRevisionFromDate, logout, openRenown, setPHAppConfig, setPHDocumentEditorConfig, setRevisionHistoryVisible, setSelectedDrive, setSelectedNode, showPHModal, useAppModuleById, useDefaultAppModule, useDocumentById, useDocumentModelModuleById, useDocumentOperations, useDrives, useEditorModuleById, useFallbackEditorModule, useNodeParentFolderById, usePHModal, usePackageDiscoveryService, useRevisionHistoryVisible, useSelectedDocument, useSelectedDocumentId, useSelectedDrive, useSelectedDriveSafe, useSelectedFolder, useSelectedTimelineItem, useSyncList, useUser } from "@powerhousedao/reactor-browser";
9
+ import { childLogger } from "document-model";
10
+ import React, { StrictMode, Suspense, lazy, useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
11
+ import { Trans, useTranslation } from "react-i18next";
12
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
13
+ import { Outlet, RouterProvider, createBrowserRouter, createRoutesFromChildren, matchRoutes, useLocation, useNavigationType } from "react-router-dom";
14
+ import { useHotkeys } from "react-hotkeys-hook";
15
+ import { AnimatedLoader, ConnectSidebar, ConnectTooltipProvider, CookieBanner, DefaultEditorLoader, DropZoneWrapper, HomeScreen, HomeScreenAddDriveItem, HomeScreenItem, PackageInstallModal, RevisionHistory, SidebarAddDriveItem, SidebarItem, useEns } from "@powerhousedao/design-system/connect";
16
+ import { GenericDriveExplorer } from "@powerhousedao/powerhouse-vetra-packages/editors";
17
+ import { Icon, Modal, PowerhouseButton } from "@powerhousedao/design-system";
18
+ import { ErrorBoundary } from "react-error-boundary";
19
+ import { PGlite } from "@electric-sql/pglite";
20
+ import { twMerge } from "tailwind-merge";
21
+ import { redo, undo } from "@powerhousedao/shared/document-model";
22
+ //#region src/hooks/useAcceptedCookies.ts
23
+ const ACCEPTED_COOKIES_KEY_STORAGE = `${connectConfig.routerBasename}:acceptedCookies`;
24
+ const listeners$3 = /* @__PURE__ */ new Set();
25
+ let cookies = getInitial$1();
26
+ function getInitial$1() {
27
+ try {
28
+ const value = localStorage.getItem(ACCEPTED_COOKIES_KEY_STORAGE);
29
+ return value ? JSON.parse(value) : {
30
+ analytics: false,
31
+ marketing: false,
32
+ functional: false
33
+ };
34
+ } catch {
35
+ return {
36
+ analytics: false,
37
+ marketing: false,
38
+ functional: false
39
+ };
40
+ }
41
+ }
42
+ function getCookies() {
43
+ return cookies;
44
+ }
45
+ function setCookies(setter) {
46
+ cookies = setter(cookies);
47
+ localStorage.setItem(ACCEPTED_COOKIES_KEY_STORAGE, JSON.stringify(cookies));
48
+ listeners$3.forEach((fn) => fn());
49
+ }
50
+ function subscribe$1(fn) {
51
+ listeners$3.add(fn);
52
+ return () => listeners$3.delete(fn);
53
+ }
54
+ const useAcceptedCookies = () => {
55
+ return [useSyncExternalStore(subscribe$1, getCookies, getCookies), setCookies];
56
+ };
57
+ const COOKIE_BANNER_KEY_STORAGE = `${connectConfig.routerBasename}:display-cookie-banner`;
58
+ const listeners$2 = /* @__PURE__ */ new Set();
59
+ let bannerShown = getInitial();
60
+ function getInitial() {
61
+ try {
62
+ return localStorage.getItem(COOKIE_BANNER_KEY_STORAGE) !== "false";
63
+ } catch (error) {
64
+ console.error(error);
65
+ return true;
66
+ }
67
+ }
68
+ function getCookieBannerState() {
69
+ return bannerShown;
70
+ }
71
+ function setCookieBannerState(state) {
72
+ bannerShown = state;
73
+ localStorage.setItem(COOKIE_BANNER_KEY_STORAGE, JSON.stringify(state));
74
+ }
75
+ function subscribe(fn) {
76
+ listeners$2.add(fn);
77
+ return () => listeners$2.delete(fn);
78
+ }
79
+ const useCookieBanner = () => {
80
+ return [useSyncExternalStore(subscribe, getCookieBannerState, getCookieBannerState), setCookieBannerState];
81
+ };
82
+ //#endregion
83
+ //#region src/hooks/useFailedInstallations.ts
84
+ const emptyArray$1 = [];
85
+ function useFailedInstallations() {
86
+ const discoveryService = usePackageDiscoveryService();
87
+ return useSyncExternalStore((cb) => discoveryService?.subscribeFailed(cb) ?? (() => {}), () => discoveryService?.getFailedInstallations() ?? emptyArray$1);
88
+ }
89
+ //#endregion
90
+ //#region src/hooks/useInitSentry.ts
91
+ const logger$2 = childLogger(["sentry"]);
92
+ let clientStarted = false;
93
+ async function getSentry() {
94
+ return await import("@sentry/react");
95
+ }
96
+ async function initSentry() {
97
+ connectConfig.sentry;
98
+ const Sentry = await getSentry();
99
+ const integrations = [
100
+ Sentry.httpClientIntegration(),
101
+ Sentry.extraErrorDataIntegration({ depth: 5 }),
102
+ Sentry.replayIntegration(),
103
+ Sentry.captureConsoleIntegration({ levels: ["error"] })
104
+ ];
105
+ if (connectConfig.sentry.tracing) integrations.push(Sentry.reactRouterV6BrowserTracingIntegration({
106
+ useEffect: React.useEffect,
107
+ useLocation,
108
+ useNavigationType,
109
+ createRoutesFromChildren,
110
+ matchRoutes
111
+ }));
112
+ Sentry.init({
113
+ release: connectConfig.sentry.release,
114
+ dsn: connectConfig.sentry.dsn,
115
+ environment: connectConfig.sentry.env,
116
+ integrations,
117
+ ignoreErrors: [
118
+ "User is not allowed to create files",
119
+ "User is not allowed to move documents",
120
+ "The user aborted a request."
121
+ ],
122
+ sendDefaultPii: true,
123
+ tracesSampleRate: 1,
124
+ replaysSessionSampleRate: .1,
125
+ replaysOnErrorSampleRate: 1,
126
+ beforeSend(event, hint) {
127
+ const error = hint.originalException;
128
+ if (error instanceof TypeError && error.message.includes("Failed to fetch") && !navigator.onLine) return null;
129
+ return event;
130
+ }
131
+ });
132
+ clientStarted = true;
133
+ }
134
+ async function closeClient() {
135
+ if (!clientStarted) return;
136
+ return (await getSentry()).getClient()?.close();
137
+ }
138
+ function useInitSentry() {
139
+ const [acceptedCookies] = useAcceptedCookies();
140
+ const { analytics } = acceptedCookies;
141
+ useEffect(() => {
142
+ if (!analytics) {
143
+ closeClient().catch((error) => logger$2.error("@error", error));
144
+ return;
145
+ }
146
+ if (clientStarted || !connectConfig.sentry.dsn || connectConfig.sentry.dsn === "") return;
147
+ initSentry().catch((error) => logger$2.error("@error", error));
148
+ }, [analytics]);
149
+ }
150
+ //#endregion
151
+ //#region src/hooks/usePendingInstallations.ts
152
+ const emptyArray = [];
153
+ function usePendingInstallations() {
154
+ const discoveryService = usePackageDiscoveryService();
155
+ const cacheRef = useRef(emptyArray);
156
+ return useSyncExternalStore((cb) => discoveryService?.subscribePending(cb) ?? (() => {}), useCallback(() => {
157
+ if (!discoveryService) return emptyArray;
158
+ const next = discoveryService.getPendingInstallations() ?? emptyArray;
159
+ const prev = cacheRef.current;
160
+ if (next === prev || next.length === prev.length && next.every((p, i) => p === prev[i])) return prev;
161
+ cacheRef.current = next;
162
+ return next;
163
+ }, [discoveryService]));
164
+ }
165
+ //#endregion
166
+ //#region src/hooks/useUndoRedoShortcuts.ts
167
+ const useUndoRedoShortcuts = (props) => {
168
+ const { undo, redo, canRedo, canUndo } = props;
169
+ const isMac = window.navigator.userAgent.includes("Mac");
170
+ let undoShortcut = "ctrl+z";
171
+ let redoShortcut = "ctrl+y";
172
+ if (isMac) {
173
+ undoShortcut = "mod+z";
174
+ redoShortcut = "mod+shift+z";
175
+ }
176
+ useHotkeys(undoShortcut, (event) => {
177
+ event.preventDefault();
178
+ if (canUndo) undo();
179
+ }, {}, [canUndo, undo]);
180
+ useHotkeys(redoShortcut, (event) => {
181
+ event.preventDefault();
182
+ if (canRedo) redo();
183
+ }, {}, [canRedo, redo]);
184
+ };
185
+ //#endregion
186
+ //#region src/components/analytics.tsx
187
+ function gtag(...args) {
188
+ window.dataLayer?.push(...args);
189
+ }
190
+ const Analytics = () => {
191
+ const gaTrackingId = connectConfig.gaTrackingId;
192
+ const [{ analytics }] = useAcceptedCookies();
193
+ const useAnalytics = gaTrackingId && analytics;
194
+ useEffect(() => {
195
+ if (useAnalytics) {
196
+ const script = document.createElement("script");
197
+ script.src = `https://www.googletagmanager.com/gtag/js?id=${gaTrackingId}`;
198
+ script.async = true;
199
+ document.head.appendChild(script);
200
+ window.dataLayer = window.dataLayer || [];
201
+ gtag("js", /* @__PURE__ */ new Date());
202
+ gtag("config", gaTrackingId);
203
+ return () => {
204
+ document.head.removeChild(script);
205
+ };
206
+ }
207
+ }, [useAnalytics, gaTrackingId]);
208
+ return null;
209
+ };
210
+ //#endregion
211
+ //#region src/components/document-editor-container.tsx
212
+ function DocumentEditorContainer() {
213
+ const [selectedDocument] = useSelectedDocument();
214
+ const parentFolder = useNodeParentFolderById(selectedDocument.header.id);
215
+ useMemo(() => {
216
+ return async () => {};
217
+ }, []);
218
+ useCallback(() => {
219
+ setSelectedNode(parentFolder);
220
+ }, [parentFolder, setSelectedNode]);
221
+ return /* @__PURE__ */ jsx("div", {
222
+ id: "document-editor-container",
223
+ className: "flex-1",
224
+ "data-document-type": selectedDocument.header.documentType,
225
+ children: /* @__PURE__ */ jsx(DocumentEditor, { document: selectedDocument })
226
+ });
227
+ }
228
+ //#endregion
229
+ //#region src/components/editor-loader.tsx
230
+ function EditorLoader(props) {
231
+ const [showLoading, setShowLoading] = useState(false);
232
+ useEffect(() => {
233
+ setTimeout(() => {
234
+ setShowLoading(true);
235
+ }, props.loadingTimeout ?? 200);
236
+ }, [props]);
237
+ if (!showLoading) return null;
238
+ const { customEditorLoader, ...defaultProps } = props;
239
+ if (customEditorLoader) return /* @__PURE__ */ jsx(Fragment, { children: customEditorLoader });
240
+ return /* @__PURE__ */ jsx(DefaultEditorLoader, { ...defaultProps });
241
+ }
242
+ //#endregion
243
+ //#region src/components/error-boundary.tsx
244
+ const logger$1 = childLogger(["Connect"]);
245
+ function hasCustomFallback(props) {
246
+ return "fallbackRender" in props;
247
+ }
248
+ function SilentFallback() {
249
+ return null;
250
+ }
251
+ /**
252
+ * Simple text-based fallback component.
253
+ * Displays a centered message when an error occurs.
254
+ */
255
+ function TextFallback({ message = "Something went wrong" }) {
256
+ return /* @__PURE__ */ jsx("div", {
257
+ className: "text-center",
258
+ children: message
259
+ });
260
+ }
261
+ /**
262
+ * Detailed fallback component showing full error information.
263
+ * Displays error message with a collapsible details section.
264
+ * Useful for development and debugging purposes.
265
+ */
266
+ function DetailedFallback({ error, resetErrorBoundary }) {
267
+ const errorMessage = error instanceof Error ? error.message : String(error);
268
+ const errorDetails = error instanceof Error ? error.stack ?? String(error.cause) : JSON.stringify(error, null, 2);
269
+ return /* @__PURE__ */ jsx("div", {
270
+ className: "z-10 mx-auto flex max-w-[80%] flex-1 items-center justify-center p-6",
271
+ children: /* @__PURE__ */ jsxs("div", {
272
+ className: "w-full max-w-lg rounded-lg border border-gray-500 bg-white p-6 shadow-sm",
273
+ children: [
274
+ /* @__PURE__ */ jsxs("div", {
275
+ className: "mb-3 flex items-center gap-2",
276
+ children: [/* @__PURE__ */ jsx(Icon, {
277
+ name: "Error",
278
+ className: "size-5 shrink-0"
279
+ }), /* @__PURE__ */ jsx("h1", {
280
+ className: "text-lg font-semibold",
281
+ children: "Something went wrong"
282
+ })]
283
+ }),
284
+ /* @__PURE__ */ jsx("p", {
285
+ className: "mb-4 text-sm text-gray-700",
286
+ children: errorMessage
287
+ }),
288
+ errorDetails !== "{}" && /* @__PURE__ */ jsxs("details", {
289
+ className: "group",
290
+ children: [/* @__PURE__ */ jsx("summary", {
291
+ className: "cursor-pointer text-sm font-medium text-gray-700 underline select-none hover:text-gray-700",
292
+ children: "Show details"
293
+ }), /* @__PURE__ */ jsx("pre", {
294
+ className: "mt-2 max-h-48 overflow-auto rounded-sm bg-gray-100 p-3 text-xs",
295
+ children: errorDetails
296
+ })]
297
+ }),
298
+ /* @__PURE__ */ jsx(PowerhouseButton, {
299
+ type: "button",
300
+ onClick: resetErrorBoundary,
301
+ className: "mt-4 px-3 py-1.5 text-base font-medium",
302
+ children: "Try again"
303
+ })
304
+ ]
305
+ })
306
+ });
307
+ }
308
+ /**
309
+ * Centered error message fallback component.
310
+ * Displays the error message in a centered, full-size container.
311
+ * Suitable for use as a custom fallbackRender when you need simple error display.
312
+ */
313
+ function CenteredErrorMessage({ error }) {
314
+ return /* @__PURE__ */ jsx("div", {
315
+ className: "flex size-full items-center justify-center",
316
+ children: /* @__PURE__ */ jsx("h3", {
317
+ className: "text-lg font-semibold",
318
+ children: error instanceof Error ? error.message : String(error)
319
+ })
320
+ });
321
+ }
322
+ function getFallbackComponent(variant, fallbackMessage) {
323
+ switch (variant) {
324
+ case "silent": return SilentFallback;
325
+ case "text": return () => /* @__PURE__ */ jsx(TextFallback, { message: fallbackMessage });
326
+ case "detailed": return DetailedFallback;
327
+ default: return CenteredErrorMessage;
328
+ }
329
+ }
330
+ /**
331
+ * Unified error boundary component for catching and handling React errors.
332
+ *
333
+ * Built on top of `react-error-boundary`, this component provides:
334
+ * - Automatic error logging with configurable context
335
+ * - Multiple fallback UI variants (silent, text, detailed)
336
+ * - Support for custom fallback render functions
337
+ * - Reset capability via `resetKeys`
338
+ *
339
+ * @example
340
+ * // Using a predefined variant
341
+ * <ErrorBoundary variant="detailed" loggerContext={["Connect", "Editor"]}>
342
+ * <EditorComponent />
343
+ * </ErrorBoundary>
344
+ *
345
+ * @example
346
+ * // Using a custom message with the text variant
347
+ * <ErrorBoundary variant="text" fallbackMessage="Failed to load drives">
348
+ * <DrivesList />
349
+ * </ErrorBoundary>
350
+ *
351
+ * @example
352
+ * // Using a custom fallback render
353
+ * <ErrorBoundary
354
+ * fallbackRender={CenteredErrorMessage}
355
+ * onError={(error) => trackError(error)}
356
+ * >
357
+ * <MyComponent />
358
+ * </ErrorBoundary>
359
+ *
360
+ * @example
361
+ * // Silent mode for modals (renders null on error)
362
+ * <ErrorBoundary variant="silent" loggerContext={["Connect", "Modals"]}>
363
+ * <ModalContent />
364
+ * </ErrorBoundary>
365
+ */
366
+ function ErrorBoundary$1(props) {
367
+ const { children, onError, resetKeys, loggerContext } = props;
368
+ const handleError = (error, info) => {
369
+ if (error.message.includes("Failed to fetch dynamically imported module") && error.message.includes("node_modules/.vite")) {
370
+ console.error(error);
371
+ console.log("Outdated chunk detected, reloading page...");
372
+ window.location.reload();
373
+ return;
374
+ }
375
+ (loggerContext ? childLogger(loggerContext) : logger$1).error("@error @info", error, info);
376
+ onError?.(error, info);
377
+ };
378
+ return /* @__PURE__ */ jsx(ErrorBoundary, {
379
+ fallbackRender: hasCustomFallback(props) ? props.fallbackRender : getFallbackComponent(props.variant, props.fallbackMessage),
380
+ onError: handleError,
381
+ resetKeys,
382
+ children
383
+ });
384
+ }
385
+ //#endregion
386
+ //#region src/components/app-container.tsx
387
+ function AppContainer() {
388
+ const [selectedDrive] = useSelectedDrive();
389
+ const selectedDocumentId = useSelectedDocumentId();
390
+ const app = useAppModuleById(selectedDrive.header.meta?.preferredEditor);
391
+ const defaultApp = useDefaultAppModule();
392
+ const AppComponent = app?.Component ?? defaultApp?.Component ?? GenericDriveExplorer.Component;
393
+ if (!AppComponent) throw new Error("No app component found");
394
+ return /* @__PURE__ */ jsx(ErrorBoundary$1, {
395
+ variant: "detailed",
396
+ resetKeys: [selectedDrive.header.id],
397
+ loggerContext: ["Connect", "App"],
398
+ children: /* @__PURE__ */ jsx(Suspense, {
399
+ fallback: /* @__PURE__ */ jsx(EditorLoader, {}),
400
+ children: /* @__PURE__ */ jsx(DropZoneWrapper, {
401
+ className: "flex h-full flex-col overflow-auto",
402
+ children: /* @__PURE__ */ jsx(AppComponent, { children: selectedDocumentId ? /* @__PURE__ */ jsx(DocumentEditorContainer, {}) : null })
403
+ })
404
+ })
405
+ });
406
+ }
407
+ //#endregion
408
+ //#region src/utils/browser.ts
409
+ function getBasePath() {
410
+ if (typeof document === "undefined") return "/";
411
+ return document.querySelector("base")?.getAttribute("href") || "/";
412
+ }
413
+ //#endregion
414
+ //#region src/utils/document-editor-debug-tools.ts
415
+ var DocumentEditorDebugTools = class {
416
+ document;
417
+ operations = [];
418
+ constructor(document) {
419
+ if (document) this.document = document;
420
+ }
421
+ operationsToTableObject(operations) {
422
+ return operations.map((op) => ({
423
+ ...op,
424
+ input: JSON.stringify(op.action.input)
425
+ }));
426
+ }
427
+ setDocument(document) {
428
+ this.document = document;
429
+ }
430
+ getDocument() {
431
+ return this.document;
432
+ }
433
+ getOperations() {
434
+ return this.operations;
435
+ }
436
+ pushOperation(operation) {
437
+ this.operations.push(operation);
438
+ }
439
+ operationsTable() {
440
+ if (!this.document) console.warn("No document");
441
+ const ops = Object.values(this.document?.operations || {}).filter((array) => array !== void 0).flatMap((array) => array).sort((a, b) => a.index - b.index);
442
+ console.table(this.operationsToTableObject(ops));
443
+ }
444
+ scopeOperationsTable(scope) {
445
+ if (!this.document) console.warn("No document");
446
+ const ops = this.document?.operations[scope] || [];
447
+ console.table(this.operationsToTableObject(ops));
448
+ }
449
+ operationsLog() {
450
+ console.log(this.operations);
451
+ }
452
+ operationsLogTable() {
453
+ console.table(this.operationsToTableObject(this.operations));
454
+ }
455
+ clear() {
456
+ this.operations = [];
457
+ this.document = void 0;
458
+ }
459
+ };
460
+ //#endregion
461
+ //#region src/components/migration-status.ts
462
+ let current = null;
463
+ const listeners$1 = /* @__PURE__ */ new Set();
464
+ function setMigrationStatus(status) {
465
+ current = status;
466
+ for (const l of listeners$1) l();
467
+ }
468
+ function getMigrationStatus() {
469
+ return current;
470
+ }
471
+ function subscribeMigrationStatus(cb) {
472
+ listeners$1.add(cb);
473
+ return () => {
474
+ listeners$1.delete(cb);
475
+ };
476
+ }
477
+ //#endregion
478
+ //#region src/utils/pglite-migration.ts
479
+ const BACKUP_PREFIX = "ph-pglite-backup::";
480
+ const BACKUP_INDEX_KEY = "ph:pglite-backups";
481
+ const BACKUP_RETENTION_MS = 720 * 60 * 60 * 1e3;
482
+ const LEGACY_DUMPERS = { 16: async () => {
483
+ const [{ PGlite: LegacyPGlite }, { pgDump }] = await Promise.all([import("pglite-legacy-02"), import("pglite-tools-legacy-02/pg_dump")]);
484
+ return async (idbName) => {
485
+ const pg = new LegacyPGlite(`idb://${idbName.replace(/^\/pglite\//, "")}`);
486
+ try {
487
+ await pg.waitReady;
488
+ return await (await pgDump({ pg })).text();
489
+ } finally {
490
+ await pg.close();
491
+ }
492
+ };
493
+ } };
494
+ function deleteIdb(name, timeoutMs = 15e3) {
495
+ return new Promise((resolve, reject) => {
496
+ const req = indexedDB.deleteDatabase(name);
497
+ let settled = false;
498
+ const done = (fn) => {
499
+ if (settled) return;
500
+ settled = true;
501
+ fn();
502
+ };
503
+ const timer = setTimeout(() => done(() => reject(/* @__PURE__ */ new Error(`IDB delete timed out for ${name} after ${timeoutMs}ms`))), timeoutMs);
504
+ req.onsuccess = () => done(() => {
505
+ clearTimeout(timer);
506
+ resolve();
507
+ });
508
+ req.onerror = () => done(() => {
509
+ clearTimeout(timer);
510
+ reject(idbError(req, `IDB delete failed for ${name}`));
511
+ });
512
+ });
513
+ }
514
+ async function clearFileData(name) {
515
+ const db = await openIdb(name, 21, createFileDataStore);
516
+ try {
517
+ await new Promise((resolve, reject) => {
518
+ const tx = db.transaction(IDB_STORE_NAME, "readwrite");
519
+ tx.oncomplete = () => resolve();
520
+ tx.onerror = () => reject(idbError(tx, `FILE_DATA clear failed for ${name}`));
521
+ tx.onabort = () => reject(idbError(tx, `FILE_DATA clear aborted for ${name}`));
522
+ tx.objectStore(IDB_STORE_NAME).clear();
523
+ });
524
+ } finally {
525
+ db.close();
526
+ }
527
+ }
528
+ async function cloneFileData(sourceName, destName) {
529
+ const source = await openIdb(sourceName, 21, createFileDataStore);
530
+ try {
531
+ const dest = await openIdb(destName, 21, createFileDataStore);
532
+ try {
533
+ const readStore = source.transaction(IDB_STORE_NAME, "readonly").objectStore(IDB_STORE_NAME);
534
+ const entries = await new Promise((resolve, reject) => {
535
+ const out = [];
536
+ const req = readStore.openCursor();
537
+ req.onerror = () => reject(idbError(req, `FILE_DATA read cursor failed for ${sourceName}`));
538
+ req.onsuccess = () => {
539
+ const cursor = req.result;
540
+ if (!cursor) return resolve(out);
541
+ out.push({
542
+ key: cursor.key,
543
+ value: cursor.value
544
+ });
545
+ cursor.continue();
546
+ };
547
+ });
548
+ await new Promise((resolve, reject) => {
549
+ const writeTx = dest.transaction(IDB_STORE_NAME, "readwrite");
550
+ writeTx.oncomplete = () => resolve();
551
+ writeTx.onerror = () => reject(idbError(writeTx, `FILE_DATA write failed for ${destName}`));
552
+ writeTx.onabort = () => reject(idbError(writeTx, `FILE_DATA write aborted for ${destName}`));
553
+ const writeStore = writeTx.objectStore(IDB_STORE_NAME);
554
+ writeStore.clear();
555
+ for (const { key, value } of entries) writeStore.put(value, key);
556
+ });
557
+ } finally {
558
+ dest.close();
559
+ }
560
+ } finally {
561
+ source.close();
562
+ }
563
+ }
564
+ function readBackupIndex() {
565
+ try {
566
+ const raw = localStorage.getItem(BACKUP_INDEX_KEY);
567
+ if (!raw) return [];
568
+ const parsed = JSON.parse(raw);
569
+ return Array.isArray(parsed) ? parsed : [];
570
+ } catch {
571
+ return [];
572
+ }
573
+ }
574
+ function writeBackupIndex(records) {
575
+ try {
576
+ localStorage.setItem(BACKUP_INDEX_KEY, JSON.stringify(records));
577
+ } catch {}
578
+ }
579
+ function registerBackup(rec) {
580
+ writeBackupIndex([...readBackupIndex(), rec]);
581
+ }
582
+ function forgetBackup(name) {
583
+ writeBackupIndex(readBackupIndex().filter((r) => r.name !== name));
584
+ }
585
+ async function janitor() {
586
+ const cutoff = Date.now() - BACKUP_RETENTION_MS;
587
+ const keep = [];
588
+ for (const rec of readBackupIndex()) {
589
+ if (rec.createdAt >= cutoff) {
590
+ keep.push(rec);
591
+ continue;
592
+ }
593
+ try {
594
+ await deleteIdb(rec.name);
595
+ } catch (err) {
596
+ console.warn(`Failed to delete expired pglite backup ${rec.name}`, err);
597
+ keep.push(rec);
598
+ }
599
+ }
600
+ writeBackupIndex(keep);
601
+ }
602
+ function publishPhase(idbName, phase) {
603
+ setMigrationStatus({
604
+ idbName,
605
+ phase
606
+ });
607
+ }
608
+ async function migrateIdbIfNeeded(idbName) {
609
+ const major = await readPgVersionFile(idbName);
610
+ if (major === null || major === 17) return;
611
+ const loader = LEGACY_DUMPERS[major];
612
+ if (!loader) throw new Error(`Unsupported legacy PGlite data dir: PG_VERSION=${major} for ${idbName}`);
613
+ const backupName = `${BACKUP_PREFIX}${idbName}::${(/* @__PURE__ */ new Date()).toISOString()}`;
614
+ const backupRec = {
615
+ name: backupName,
616
+ idbName,
617
+ createdAt: Date.now()
618
+ };
619
+ publishPhase(idbName, "clone");
620
+ await cloneFileData(idbName, backupName);
621
+ registerBackup(backupRec);
622
+ let sql;
623
+ try {
624
+ publishPhase(idbName, "dump");
625
+ sql = await (await loader())(idbName);
626
+ } catch (err) {
627
+ await deleteIdb(backupName).catch(() => {});
628
+ forgetBackup(backupName);
629
+ throw err;
630
+ }
631
+ try {
632
+ await clearFileData(idbName);
633
+ publishPhase(idbName, "restore");
634
+ const pg = new PGlite(`idb://${idbName.replace(/^\/pglite\//, "")}`, { relaxedDurability: false });
635
+ try {
636
+ await pg.waitReady;
637
+ console.info(`[pglite-migration] Dump preamble (first 500 chars):\n${sql.slice(0, 500)}`);
638
+ try {
639
+ await pg.exec("SET standard_conforming_strings = off;");
640
+ } catch (gucErr) {
641
+ console.warn("[pglite-migration] Could not force standard_conforming_strings=off", gucErr);
642
+ }
643
+ try {
644
+ await pg.exec(sql);
645
+ } catch (execErr) {
646
+ logRestoreFailure(idbName, sql, execErr);
647
+ throw execErr;
648
+ }
649
+ } finally {
650
+ await pg.close();
651
+ }
652
+ } catch (err) {
653
+ await rollbackFromBackup(idbName, backupName, err);
654
+ throw err;
655
+ }
656
+ }
657
+ function logRestoreFailure(idbName, sql, err) {
658
+ const errObj = err;
659
+ const position = typeof errObj.position === "string" ? parseInt(errObj.position, 10) : typeof errObj.position === "number" ? errObj.position : NaN;
660
+ console.error(`[pglite-migration] Restore failed for ${idbName}`, {
661
+ message: errObj.message,
662
+ code: errObj.code,
663
+ severity: errObj.severity,
664
+ detail: errObj.detail,
665
+ where: errObj.where,
666
+ position: errObj.position,
667
+ sqlLength: sql.length
668
+ });
669
+ if (Number.isFinite(position) && position > 0) {
670
+ const zeroBased = position - 1;
671
+ const start = Math.max(0, zeroBased - 200);
672
+ const end = Math.min(sql.length, zeroBased + 200);
673
+ const before = sql.slice(start, zeroBased);
674
+ const at = sql.slice(zeroBased, zeroBased + 1);
675
+ const after = sql.slice(zeroBased + 1, end);
676
+ console.error(`[pglite-migration] SQL context around position ${position}:\n${before}»${at}«${after}`);
677
+ const lineStart = sql.lastIndexOf("\n", zeroBased) + 1;
678
+ const lineEnd = sql.indexOf("\n", zeroBased);
679
+ const line = sql.slice(lineStart, lineEnd === -1 ? sql.length : lineEnd);
680
+ console.error(`[pglite-migration] Failing line (truncated to 500 chars):\n${line.slice(0, 500)}`);
681
+ } else console.error(`[pglite-migration] No position info. First 2000 chars of dump:\n${sql.slice(0, 2e3)}`);
682
+ }
683
+ async function rollbackFromBackup(idbName, backupName, originalError) {
684
+ try {
685
+ await clearFileData(idbName).catch(() => {});
686
+ await cloneFileData(backupName, idbName);
687
+ } catch (rollbackErr) {
688
+ console.error(`PGlite migration failed AND rollback failed for ${idbName}. Primary error:`, originalError, "Rollback error:", rollbackErr);
689
+ return;
690
+ }
691
+ await deleteIdb(backupName).catch(() => {});
692
+ forgetBackup(backupName);
693
+ }
694
+ async function migrateAllLocked() {
695
+ for (const idbName of PRIMARY_IDB_NAMES) await migrateIdbIfNeeded(idbName);
696
+ setMigrationStatus(null);
697
+ }
698
+ async function migrateAllIfNeeded() {
699
+ janitor().catch((err) => console.warn("PGlite backup janitor failed", err));
700
+ if (!(typeof navigator !== "undefined" && "locks" in navigator && typeof navigator.locks.request === "function")) {
701
+ await migrateAllLocked();
702
+ return;
703
+ }
704
+ await navigator.locks.request("ph-pglite-migration", { mode: "exclusive" }, async () => {
705
+ await migrateAllLocked();
706
+ });
707
+ }
708
+ //#endregion
709
+ //#region src/components/app-skeleton.tsx
710
+ const LOADER_DELAY = 250;
711
+ const PHASE_LABEL = {
712
+ clone: "Backing up local database…",
713
+ dump: "Exporting data from previous version…",
714
+ restore: "Restoring data into the new database…"
715
+ };
716
+ const MigrationOverlay = () => {
717
+ const status = useSyncExternalStore(subscribeMigrationStatus, getMigrationStatus, () => null);
718
+ if (!status) return null;
719
+ return /* @__PURE__ */ jsx("div", {
720
+ className: "absolute inset-0 z-20 flex items-center justify-center",
721
+ children: /* @__PURE__ */ jsxs("div", {
722
+ className: "rounded-lg bg-white/90 px-6 py-4 text-sm text-gray-900 shadow-lg",
723
+ children: [/* @__PURE__ */ jsx("div", {
724
+ className: "font-medium",
725
+ children: "Upgrading local database…"
726
+ }), /* @__PURE__ */ jsx("div", {
727
+ className: "text-gray-600",
728
+ children: PHASE_LABEL[status.phase]
729
+ })]
730
+ })
731
+ });
732
+ };
733
+ const Loader = ({ delay = LOADER_DELAY }) => {
734
+ const isSSR = typeof window === "undefined";
735
+ const showInitialLoader = typeof document !== "undefined" && document.body.getAttribute("data-show-loader") === "true";
736
+ const [showLoading, setShowLoading] = useState(!delay || showInitialLoader);
737
+ useEffect(() => {
738
+ const id = setTimeout(() => {
739
+ setShowLoading(true);
740
+ }, delay);
741
+ return () => clearTimeout(id);
742
+ }, []);
743
+ return /* @__PURE__ */ jsxs("div", {
744
+ className: `skeleton-loader absolute inset-0 z-10 flex items-center justify-center ${showLoading ? "" : "hidden"}`,
745
+ children: [/* @__PURE__ */ jsx("div", {
746
+ className: "animate-pulse overflow-hidden rounded-full shadow-lg",
747
+ children: /* @__PURE__ */ jsx(AnimatedLoader, {})
748
+ }), isSSR ? /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: `setTimeout(() => {
749
+ document.querySelector('.skeleton-loader')?.classList.remove('hidden');
750
+ document.body.setAttribute('data-show-loader', 'true');
751
+ }, ${delay})` } }) : null]
752
+ });
753
+ };
754
+ const AppSkeleton = (props) => {
755
+ const isSSR = typeof window === "undefined";
756
+ const isHomeScreen = !isSSR && window.location.pathname === getBasePath();
757
+ return /* @__PURE__ */ jsxs("div", {
758
+ className: "flex h-screen overflow-hidden",
759
+ children: [
760
+ /* @__PURE__ */ jsx(ConnectSidebar, {
761
+ className: "animate-pulse",
762
+ onLogin: void 0,
763
+ onDisconnect: void 0,
764
+ onClickSettings: void 0,
765
+ address: void 0
766
+ }),
767
+ /* @__PURE__ */ jsx(HomeScreen, {
768
+ containerClassName: isSSR || !isHomeScreen ? "hidden home-screen" : void 0,
769
+ children: props.children ?? null
770
+ }),
771
+ isSSR ? /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: `
772
+ const baseEl = document.querySelector('base');
773
+ const href = baseEl?.getAttribute('href');
774
+ const basePath = href || '/';
775
+ if (window.location.pathname === basePath) {
776
+ document.querySelector('.home-screen')?.classList.remove('hidden')
777
+ }` } }) : null,
778
+ !props.children ? /* @__PURE__ */ jsx(Loader, {}) : null,
779
+ /* @__PURE__ */ jsx(MigrationOverlay, {})
780
+ ]
781
+ });
782
+ };
783
+ //#endregion
784
+ //#region src/components/migration-banner.tsx
785
+ let dismissed = false;
786
+ const listeners = /* @__PURE__ */ new Set();
787
+ function notify() {
788
+ for (const l of listeners) l();
789
+ }
790
+ function dismiss() {
791
+ dismissed = true;
792
+ notify();
793
+ }
794
+ function subscribeDismissed(cb) {
795
+ listeners.add(cb);
796
+ return () => {
797
+ listeners.delete(cb);
798
+ };
799
+ }
800
+ function getDismissed() {
801
+ return dismissed;
802
+ }
803
+ const MigrationBanner = () => {
804
+ const isDismissed = useSyncExternalStore(subscribeDismissed, getDismissed, () => false);
805
+ const major = useSyncExternalStore(subscribeReactorPgMajor, getCachedReactorPgMajor, () => void 0);
806
+ const [migrating, setMigrating] = useState(false);
807
+ const [error, setError] = useState(null);
808
+ if (major === void 0 || major === null || major === 17) return null;
809
+ if (isDismissed) return null;
810
+ const handleMigrate = () => {
811
+ setError(null);
812
+ setMigrating(true);
813
+ migrateAllIfNeeded().then(() => {
814
+ window.location.reload();
815
+ }).catch((err) => {
816
+ setError(err instanceof Error ? err.message : String(err));
817
+ setMigrating(false);
818
+ });
819
+ };
820
+ return /* @__PURE__ */ jsx("div", {
821
+ className: "absolute inset-x-0 top-0 z-30 flex justify-center p-3",
822
+ children: /* @__PURE__ */ jsxs("div", {
823
+ className: "flex max-w-3xl items-center gap-3 rounded-lg border border-yellow-500 bg-yellow-400 px-4 py-3 text-sm text-gray-900 shadow-lg",
824
+ children: [
825
+ /* @__PURE__ */ jsxs("div", {
826
+ className: "flex-1",
827
+ children: [
828
+ /* @__PURE__ */ jsxs("div", {
829
+ className: "font-semibold",
830
+ children: [
831
+ "Your local database uses Postgres ",
832
+ major,
833
+ "."
834
+ ]
835
+ }),
836
+ /* @__PURE__ */ jsxs("div", {
837
+ className: "text-gray-800",
838
+ children: [
839
+ "Migrate to Postgres ",
840
+ 17,
841
+ " to pick up the latest features. Your data will be backed up first."
842
+ ]
843
+ }),
844
+ error && /* @__PURE__ */ jsxs("div", {
845
+ className: "mt-2 font-medium text-red-900",
846
+ children: ["Migration failed: ", error]
847
+ })
848
+ ]
849
+ }),
850
+ /* @__PURE__ */ jsx("button", {
851
+ type: "button",
852
+ disabled: migrating,
853
+ onClick: handleMigrate,
854
+ className: "rounded-sm bg-gray-900 px-3 py-1 text-sm font-medium text-white hover:bg-gray-800 disabled:opacity-50",
855
+ children: migrating ? "Migrating…" : "Migrate now"
856
+ }),
857
+ /* @__PURE__ */ jsx("button", {
858
+ type: "button",
859
+ disabled: migrating,
860
+ onClick: dismiss,
861
+ className: "rounded-sm border border-gray-900 bg-transparent px-3 py-1 text-sm font-medium text-gray-900 hover:bg-gray-900/10 disabled:opacity-50",
862
+ children: "Dismiss"
863
+ })
864
+ ]
865
+ })
866
+ });
867
+ };
868
+ //#endregion
869
+ //#region src/components/modal/modals-container.tsx
870
+ const AddDriveModal$1 = lazy(() => import("./AddDriveModal-ZK9-BWMB.js").then((m) => ({ default: m.AddDriveModal })));
871
+ const ClearStorageModal = lazy(() => import("./ClearStorageModal-Bfb3ube7.js").then((m) => ({ default: m.ClearStorageModal })));
872
+ const CookiesPolicyModal = lazy(() => import("./CookiesPolicyModal-DiXQV82b.js").then((m) => ({ default: m.CookiesPolicyModal })));
873
+ const CreateDocumentModal$1 = lazy(() => import("./CreateDocumentModal-BhJh4nWt.js").then((m) => ({ default: m.CreateDocumentModal })));
874
+ const DebugSettingsModal = lazy(() => import("./DebugSettingsModal-BvOhyXeo.js").then((m) => ({ default: m.DebugSettingsModal })));
875
+ const DeleteDriveModal = lazy(() => import("./DeleteDriveModal-CbuIdjKY.js").then((m) => ({ default: m.DeleteDriveModal })));
876
+ const DeleteItemModal = lazy(() => import("./DeleteItemModal-9ErYlauT.js").then((m) => ({ default: m.DeleteItemModal })));
877
+ const DisclaimerModal = lazy(() => import("./DisclaimerModal-CfDeiBz8.js").then((m) => ({ default: m.DisclaimerModal })));
878
+ const DriveSettingsModal$1 = lazy(() => import("./DriveSettingsModal-DEk05PS7.js").then((m) => ({ default: m.DriveSettingsModal })));
879
+ const DownloadDocumentWithErrorsModal = lazy(() => import("./DownloadDocumentWithErrorsModal-KZGWQ4J7.js").then((m) => ({ default: m.DownloadDocumentWithErrorsModal })));
880
+ const SettingsModal$1 = lazy(() => import("./SettingsModal-2xX1Pgo0.js").then((m) => ({ default: m.SettingsModal })));
881
+ const UpgradeDriveModal = lazy(() => import("./UpgradeDriveModal-BwI5E5k3.js").then((m) => ({ default: m.UpgradeDriveModal })));
882
+ const modalComponents = {
883
+ addDrive: AddDriveModal$1,
884
+ clearStorage: ClearStorageModal,
885
+ cookiesPolicy: CookiesPolicyModal,
886
+ createDocument: CreateDocumentModal$1,
887
+ debugSettings: DebugSettingsModal,
888
+ deleteDrive: DeleteDriveModal,
889
+ deleteItem: DeleteItemModal,
890
+ disclaimer: DisclaimerModal,
891
+ driveSettings: DriveSettingsModal$1,
892
+ downloadDocumentWithErrors: DownloadDocumentWithErrorsModal,
893
+ inspector: lazy(() => import("./InspectorModal-DV7lUbNo.js").then((m) => ({ default: m.InspectorModal }))),
894
+ settings: SettingsModal$1,
895
+ upgradeDrive: UpgradeDriveModal,
896
+ missingPackage: lazy(() => import("./MissingPackageModal-B2EAV_VJ.js").then((m) => ({ default: m.ConnectMissingPackageModal })))
897
+ };
898
+ const ModalsContainer = lazy(async () => {
899
+ return { default: () => {
900
+ const phModal = usePHModal();
901
+ if (!phModal?.type) return null;
902
+ const ModalComponent = modalComponents[phModal.type];
903
+ return ModalComponent ? /* @__PURE__ */ jsx(ErrorBoundary$1, {
904
+ variant: "silent",
905
+ loggerContext: ["Connect", "Modals"],
906
+ children: /* @__PURE__ */ jsx(Suspense, {
907
+ fallback: null,
908
+ children: /* @__PURE__ */ jsx(ModalComponent, {})
909
+ })
910
+ }) : null;
911
+ } };
912
+ });
913
+ //#endregion
914
+ //#region src/components/app-loader.tsx
915
+ const AppLoader = (props) => {
916
+ const Load = lazy(() => import("./load-BVA6Yfno.js").then((m) => m.loadComponent(props.localPackage)));
917
+ return /* @__PURE__ */ jsx(StrictMode, { children: /* @__PURE__ */ jsxs(ErrorBoundary$1, {
918
+ fallbackRender: (props) => /* @__PURE__ */ jsx(AppSkeleton, { children: /* @__PURE__ */ jsx(DetailedFallback, { ...props }) }),
919
+ resetKeys: [props.localPackage],
920
+ loggerContext: ["Connect"],
921
+ children: [
922
+ /* @__PURE__ */ jsx(Suspense, {
923
+ fallback: /* @__PURE__ */ jsx(AppSkeleton, {}),
924
+ name: "AppLoader",
925
+ children: /* @__PURE__ */ jsx(Load, {
926
+ ...props,
927
+ children: /* @__PURE__ */ jsx(App, {})
928
+ })
929
+ }),
930
+ /* @__PURE__ */ jsx(Suspense, {
931
+ name: "CookieBanner",
932
+ children: /* @__PURE__ */ jsx(CookieBanner$1, {})
933
+ }),
934
+ /* @__PURE__ */ jsx(Suspense, {
935
+ name: "ModalsContainer",
936
+ children: /* @__PURE__ */ jsx(ModalsContainer, {})
937
+ }),
938
+ /* @__PURE__ */ jsx(MigrationBanner, {})
939
+ ]
940
+ }) });
941
+ };
942
+ //#endregion
943
+ //#region src/context/sentry-provider.tsx
944
+ const SentryProvider = ({ children }) => {
945
+ useInitSentry();
946
+ return children;
947
+ };
948
+ //#endregion
949
+ //#region src/components/missing-model-banner.tsx
950
+ const reasonLabels = {
951
+ "no-registry": "No package registry is configured.",
952
+ "not-in-registry": "No matching package found in the registry.",
953
+ "registry-error": "Couldn't reach the package registry.",
954
+ "install-failed": "Package failed to install.",
955
+ dismissed: "Installation was dismissed."
956
+ };
957
+ function canRetry(reason) {
958
+ return reason !== "no-registry";
959
+ }
960
+ function MissingModelBanner() {
961
+ const failed = useFailedInstallations();
962
+ const [open, setOpen] = useState(false);
963
+ if (failed.length === 0) return null;
964
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
965
+ className: "flex items-center justify-between gap-3 bg-amber-100 px-4 py-2 text-sm text-amber-900",
966
+ children: [/* @__PURE__ */ jsx("span", { children: failed.length === 1 ? "1 document type couldn't load (missing model)." : `${failed.length} document types couldn't load (missing models).` }), /* @__PURE__ */ jsx("button", {
967
+ type: "button",
968
+ onClick: () => setOpen(true),
969
+ className: "rounded-md border border-amber-300 bg-white px-3 py-1 text-amber-900 hover:bg-amber-50",
970
+ children: "View"
971
+ })]
972
+ }), /* @__PURE__ */ jsx(MissingModelDetailsModal, {
973
+ open,
974
+ failed,
975
+ onClose: () => setOpen(false)
976
+ })] });
977
+ }
978
+ function MissingModelDetailsModal(props) {
979
+ const { open, failed, onClose } = props;
980
+ const discoveryService = usePackageDiscoveryService();
981
+ const [retrying, setRetrying] = useState(() => /* @__PURE__ */ new Set());
982
+ async function handleRetry(documentType) {
983
+ if (!discoveryService) return;
984
+ setRetrying((prev) => new Set(prev).add(documentType));
985
+ try {
986
+ await discoveryService.retryInstallation(documentType);
987
+ } finally {
988
+ setRetrying((prev) => {
989
+ const next = new Set(prev);
990
+ next.delete(documentType);
991
+ return next;
992
+ });
993
+ }
994
+ }
995
+ return /* @__PURE__ */ jsx(Modal, {
996
+ open,
997
+ onOpenChange: (isOpen) => {
998
+ if (!isOpen) onClose();
999
+ },
1000
+ contentProps: { className: "rounded-3xl" },
1001
+ children: /* @__PURE__ */ jsxs("div", {
1002
+ className: "w-[520px] max-w-[90vw] p-6",
1003
+ children: [
1004
+ /* @__PURE__ */ jsx("div", {
1005
+ className: "border-b border-slate-100 pb-2 text-2xl font-bold text-gray-800",
1006
+ children: "Missing document models"
1007
+ }),
1008
+ /* @__PURE__ */ jsx("div", {
1009
+ className: "my-4 text-sm text-gray-600",
1010
+ children: "The following document types couldn't be loaded. Documents using them won't display until the underlying package is installed."
1011
+ }),
1012
+ failed.length === 0 ? /* @__PURE__ */ jsx("div", {
1013
+ className: "rounded-xl bg-slate-50 p-4 text-sm text-gray-600",
1014
+ children: "No outstanding failures."
1015
+ }) : /* @__PURE__ */ jsx("div", {
1016
+ className: "flex max-h-[60vh] flex-col gap-3 overflow-y-auto",
1017
+ children: failed.map((entry) => {
1018
+ const isRetrying = retrying.has(entry.documentType);
1019
+ const retryDisabled = !canRetry(entry.reason) || isRetrying;
1020
+ return /* @__PURE__ */ jsxs("div", {
1021
+ className: "rounded-xl bg-slate-50 p-4",
1022
+ children: [
1023
+ /* @__PURE__ */ jsx("div", {
1024
+ className: "mb-1 font-mono text-sm font-semibold text-gray-800",
1025
+ children: entry.documentType
1026
+ }),
1027
+ /* @__PURE__ */ jsx("div", {
1028
+ className: "mb-2 text-xs text-gray-600",
1029
+ children: reasonLabels[entry.reason]
1030
+ }),
1031
+ entry.packageNames.length > 0 ? /* @__PURE__ */ jsxs("div", {
1032
+ className: "mb-2 text-xs text-gray-500",
1033
+ children: [
1034
+ "Package",
1035
+ entry.packageNames.length > 1 ? "s" : "",
1036
+ ":",
1037
+ " ",
1038
+ entry.packageNames.join(", ")
1039
+ ]
1040
+ }) : null,
1041
+ entry.error ? /* @__PURE__ */ jsx("div", {
1042
+ className: "mb-2 font-mono text-xs wrap-break-word text-red-700",
1043
+ children: entry.error.message
1044
+ }) : null,
1045
+ /* @__PURE__ */ jsx("div", {
1046
+ className: "flex justify-end",
1047
+ children: /* @__PURE__ */ jsx("button", {
1048
+ type: "button",
1049
+ onClick: () => void handleRetry(entry.documentType),
1050
+ disabled: retryDisabled,
1051
+ title: canRetry(entry.reason) ? void 0 : "No registry is configured; nothing to retry against.",
1052
+ className: twMerge("min-h-[32px] rounded-xl px-3 py-1 text-sm font-semibold text-white transition-all hover:scale-105", retryDisabled ? "cursor-not-allowed bg-gray-300 hover:scale-100" : "bg-gray-800 active:opacity-75"),
1053
+ children: isRetrying ? "Retrying..." : "Try install again"
1054
+ })
1055
+ })
1056
+ ]
1057
+ }, entry.documentType);
1058
+ })
1059
+ }),
1060
+ /* @__PURE__ */ jsx("div", {
1061
+ className: "mt-4 flex justify-end",
1062
+ children: /* @__PURE__ */ jsx("button", {
1063
+ type: "button",
1064
+ onClick: onClose,
1065
+ className: "min-h-[36px] rounded-xl border border-slate-200 bg-white px-4 py-2 text-sm font-semibold text-slate-800 hover:bg-slate-50",
1066
+ children: "Close"
1067
+ })
1068
+ })
1069
+ ]
1070
+ })
1071
+ });
1072
+ }
1073
+ //#endregion
1074
+ //#region src/components/package-install-prompt.tsx
1075
+ function PackageInstallPrompt() {
1076
+ const pendingInstallations = usePendingInstallations();
1077
+ const discoveryService = usePackageDiscoveryService();
1078
+ if (!discoveryService || pendingInstallations.length === 0) return null;
1079
+ return /* @__PURE__ */ jsx(PackageInstallModal, {
1080
+ pendingInstallations: pendingInstallations.flatMap((p) => p.packageNames.map((packageName) => ({
1081
+ documentType: p.documentType,
1082
+ packageName
1083
+ }))),
1084
+ onInstall: (packageName) => discoveryService.approveInstallation(packageName),
1085
+ onDismiss: (packageName) => discoveryService.dismissInstallation(packageName)
1086
+ });
1087
+ }
1088
+ //#endregion
1089
+ //#region src/components/app.tsx
1090
+ const App = () => {
1091
+ useEffect(() => {
1092
+ const handlePreloadError = (event) => {
1093
+ const payload = event.payload;
1094
+ const failedUrl = (payload instanceof Error ? payload.message : String(payload ?? "")).match(/https?:\/\/[^\s"']+/)?.[0];
1095
+ if (failedUrl && !failedUrl.startsWith(window.location.origin)) {
1096
+ console.debug(`[Connect] Skipping reload — vite:preloadError for off-origin URL: ${failedUrl}`);
1097
+ return;
1098
+ }
1099
+ console.log("Outdated chunks detected, reloading page...");
1100
+ window.location.reload();
1101
+ };
1102
+ window.addEventListener("vite:preloadError", handlePreloadError);
1103
+ return () => {
1104
+ window.removeEventListener("vite:preloadError", handlePreloadError);
1105
+ };
1106
+ }, []);
1107
+ useEffect(() => {
1108
+ if (import.meta.env.MODE === "development") window.documentEditorDebugTools = new DocumentEditorDebugTools();
1109
+ else serviceWorkerManager.registerServiceWorker(false);
1110
+ }, []);
1111
+ return /* @__PURE__ */ jsxs(SentryProvider, { children: [
1112
+ /* @__PURE__ */ jsx(ToastContainer, { position: "bottom-right" }),
1113
+ /* @__PURE__ */ jsx(MissingModelBanner, {}),
1114
+ /* @__PURE__ */ jsx(Router, {}),
1115
+ /* @__PURE__ */ jsx(PackageInstallPrompt, {}),
1116
+ /* @__PURE__ */ jsx(Analytics, {})
1117
+ ] });
1118
+ };
1119
+ //#endregion
1120
+ //#region src/components/cookie-banner.tsx
1121
+ const isCookieAccepted = (cookies, id) => {
1122
+ return cookies.some((cookie) => cookie.id === id && cookie.value);
1123
+ };
1124
+ const CookieBanner$1 = () => {
1125
+ const { t } = useTranslation(void 0, {
1126
+ useSuspense: true,
1127
+ i18n
1128
+ });
1129
+ const [showBanner, setShowBanner] = useCookieBanner();
1130
+ const [, setAcceptedCookies] = useAcceptedCookies();
1131
+ const cookiesInput = [{
1132
+ id: "analytics-cookie",
1133
+ label: t("cookieBanner.cookies.analytics"),
1134
+ value: true
1135
+ }];
1136
+ const handleAccept = (cookies) => {
1137
+ setShowBanner(false);
1138
+ if (isCookieAccepted(cookies, "analytics-cookie")) setAcceptedCookies((acceptedCookies) => ({
1139
+ ...acceptedCookies,
1140
+ analytics: true
1141
+ }));
1142
+ };
1143
+ const handleReject = () => {
1144
+ setShowBanner(false);
1145
+ setAcceptedCookies(() => ({
1146
+ analytics: false,
1147
+ functional: false,
1148
+ marketing: false
1149
+ }));
1150
+ };
1151
+ if (!showBanner) return null;
1152
+ return /* @__PURE__ */ jsxs("div", {
1153
+ className: "absolute inset-0 z-10000 backdrop-blur-sm",
1154
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-black opacity-15" }), /* @__PURE__ */ jsx("div", {
1155
+ className: "absolute inset-x-0 bottom-0 flex justify-center bg-white px-10 pt-10 pb-16 shadow-lg",
1156
+ children: /* @__PURE__ */ jsx(CookieBanner, {
1157
+ className: "max-w-[1024px]",
1158
+ cookies: cookiesInput,
1159
+ onSubmit: handleAccept,
1160
+ onReject: handleReject,
1161
+ submitLabel: t("cookieBanner.accept"),
1162
+ rejectLabel: t("cookieBanner.reject"),
1163
+ children: /* @__PURE__ */ jsx("p", {
1164
+ className: "font-semibold text-gray-500",
1165
+ children: /* @__PURE__ */ jsx(Trans, {
1166
+ i18nKey: "cookieBanner.message",
1167
+ components: { a: /* @__PURE__ */ jsx("a", {
1168
+ onClick: () => showPHModal({ type: "cookiesPolicy" }),
1169
+ className: "cursor-pointer text-gray-900 hover:underline"
1170
+ }, "cookieBanner.message-link") }
1171
+ }, "cookieBanner.message")
1172
+ })
1173
+ })
1174
+ })]
1175
+ });
1176
+ };
1177
+ //#endregion
1178
+ //#region src/components/drive-icon.tsx
1179
+ function DriveIcon({ drive }) {
1180
+ const remotes = useSyncList();
1181
+ const isRemoteDrive = useMemo(() => {
1182
+ if (!drive) return false;
1183
+ return remotes.some((remote) => remote.collectionId === driveCollectionId("main", drive.header.id));
1184
+ }, [remotes, drive]);
1185
+ const driveIconSrc = drive?.state.global.icon;
1186
+ if (driveIconSrc) return /* @__PURE__ */ jsx("img", {
1187
+ src: driveIconSrc,
1188
+ alt: drive.header.name,
1189
+ height: 32,
1190
+ width: 32
1191
+ });
1192
+ if (!isRemoteDrive) return /* @__PURE__ */ jsx(Icon, {
1193
+ name: "Hdd",
1194
+ size: 32
1195
+ });
1196
+ return /* @__PURE__ */ jsx(Icon, {
1197
+ name: "Server",
1198
+ size: 32
1199
+ });
1200
+ }
1201
+ //#endregion
1202
+ //#region src/components/editors.tsx
1203
+ function EditorError({ message }) {
1204
+ return /* @__PURE__ */ jsx("div", {
1205
+ className: "flex size-full items-center justify-center",
1206
+ children: /* @__PURE__ */ jsx("h3", {
1207
+ className: "text-lg font-semibold",
1208
+ children: message
1209
+ })
1210
+ });
1211
+ }
1212
+ const DocumentEditor = (props) => {
1213
+ const { document: initialDocument } = props;
1214
+ const selectedTimelineItem = useSelectedTimelineItem();
1215
+ const revisionHistoryVisible = useRevisionHistoryVisible();
1216
+ const [document, dispatch] = useDocumentById(initialDocument.header.id);
1217
+ const documentId = document?.header.id ?? void 0;
1218
+ const documentName = document?.header.name ?? void 0;
1219
+ const documentType = document?.header.documentType ?? void 0;
1220
+ const preferredEditor = document?.header.meta?.preferredEditor ?? void 0;
1221
+ const { globalOperations, localOperations, isLoading: isLoadingOperations, refetch: refetchOperations } = useDocumentOperations(documentId);
1222
+ useEffect(() => {
1223
+ if (revisionHistoryVisible) refetchOperations();
1224
+ }, [revisionHistoryVisible, refetchOperations]);
1225
+ const globalRevisionNumber = document?.header.revision.global ?? 0;
1226
+ const localRevisionNumber = document?.header.revision.local ?? 0;
1227
+ const documentModelModule = useDocumentModelModuleById(documentType);
1228
+ const preferredEditorModule = useEditorModuleById(preferredEditor);
1229
+ const fallbackEditorModule = useFallbackEditorModule(documentType);
1230
+ const editorModule = preferredEditorModule ?? fallbackEditorModule;
1231
+ const isLoadingDocument = !document;
1232
+ const isLoadingEditor = editorModule && documentType && !editorModule.documentTypes.includes(documentType) && !editorModule.documentTypes.includes("*");
1233
+ const canUndo = globalRevisionNumber > 0 || localRevisionNumber > 0;
1234
+ const canRedo = !!document?.clipboard.length;
1235
+ const addUndoAction = () => dispatch(undo());
1236
+ const addRedoAction = () => dispatch(redo());
1237
+ useUndoRedoShortcuts({
1238
+ undo: addUndoAction,
1239
+ redo: addRedoAction,
1240
+ canUndo,
1241
+ canRedo
1242
+ });
1243
+ useEffect(() => {
1244
+ return () => {
1245
+ window.documentEditorDebugTools?.clear();
1246
+ };
1247
+ }, []);
1248
+ const [editorError, setEditorError] = useState(void 0);
1249
+ useEffect(() => {
1250
+ if (editorError && editorError.documentId !== documentId) setEditorError(void 0);
1251
+ }, [editorError, documentId]);
1252
+ const handleEditorError = (error, info) => {
1253
+ setEditorError({
1254
+ error,
1255
+ documentId,
1256
+ info
1257
+ });
1258
+ };
1259
+ if (isLoadingEditor) return /* @__PURE__ */ jsx(EditorLoader, { message: "Loading editor" });
1260
+ if (isLoadingDocument) return /* @__PURE__ */ jsx(EditorLoader, { message: "Loading document" });
1261
+ if (!documentModelModule) return /* @__PURE__ */ jsx(EditorError, { message: /* @__PURE__ */ jsxs("div", {
1262
+ className: "text-center leading-10",
1263
+ children: [/* @__PURE__ */ jsxs("p", { children: [
1264
+ "Unable to open the document because the document model \"",
1265
+ documentType,
1266
+ "\" is not supported."
1267
+ ] }), /* @__PURE__ */ jsxs("p", { children: [
1268
+ "Go to the",
1269
+ " ",
1270
+ /* @__PURE__ */ jsx("button", {
1271
+ type: "button",
1272
+ className: "cursor-pointer underline",
1273
+ onClick: () => {
1274
+ showPHModal({ type: "settings" });
1275
+ },
1276
+ children: "package manager"
1277
+ }),
1278
+ " ",
1279
+ "to install this document model"
1280
+ ] })]
1281
+ }) });
1282
+ if (!editorModule) return /* @__PURE__ */ jsx(EditorError, { message: /* @__PURE__ */ jsxs("div", {
1283
+ className: "text-center leading-10",
1284
+ children: [/* @__PURE__ */ jsx("p", { children: "Unable to open the document because no editor has been found" }), /* @__PURE__ */ jsxs("p", { children: [
1285
+ "Go to the",
1286
+ " ",
1287
+ /* @__PURE__ */ jsx("button", {
1288
+ type: "button",
1289
+ className: "cursor-pointer underline",
1290
+ onClick: () => {
1291
+ showPHModal({ type: "settings" });
1292
+ },
1293
+ children: "package manager"
1294
+ }),
1295
+ " ",
1296
+ "an editor for the \"$",
1297
+ documentType,
1298
+ "\" document type"
1299
+ ] })]
1300
+ }) });
1301
+ const EditorComponent = editorModule.Component;
1302
+ return /* @__PURE__ */ jsx("div", {
1303
+ className: "relative h-full",
1304
+ id: "document-editor-context",
1305
+ "data-editor": editorModule.config.id,
1306
+ "data-document-type": documentType,
1307
+ children: revisionHistoryVisible ? isLoadingOperations ? /* @__PURE__ */ jsx(EditorLoader, { message: "Loading operations" }) : /* @__PURE__ */ jsx(RevisionHistory, {
1308
+ documentTitle: documentName ?? "",
1309
+ documentId: documentId ?? "",
1310
+ globalOperations,
1311
+ localOperations,
1312
+ onClose: () => setRevisionHistoryVisible(false),
1313
+ documentState: document.state,
1314
+ onCopyState: () => {
1315
+ toast("Copied document state to clipboard", { type: "success" });
1316
+ },
1317
+ onCopyDocId: () => {
1318
+ toast("Copied document ID to clipboard", { type: "success" });
1319
+ }
1320
+ }, documentId) : /* @__PURE__ */ jsx(Suspense, {
1321
+ fallback: /* @__PURE__ */ jsx(EditorLoader, { message: "Loading editor" }),
1322
+ name: "EditorLoader",
1323
+ children: /* @__PURE__ */ jsx(ErrorBoundary$1, {
1324
+ fallbackRender: CenteredErrorMessage,
1325
+ resetKeys: [documentId],
1326
+ onError: handleEditorError,
1327
+ loggerContext: ["Connect", "DocumentEditor"],
1328
+ children: !editorError?.error && /* @__PURE__ */ jsx(EditorComponent, {
1329
+ context: {
1330
+ readMode: !!selectedTimelineItem,
1331
+ selectedTimelineRevision: getRevisionFromDate(selectedTimelineItem?.startDate, selectedTimelineItem?.endDate, globalOperations)
1332
+ },
1333
+ documentId: document.header.id
1334
+ }, documentId)
1335
+ })
1336
+ })
1337
+ });
1338
+ };
1339
+ //#endregion
1340
+ //#region src/components/root.tsx
1341
+ function Root() {
1342
+ return /* @__PURE__ */ jsx("div", {
1343
+ className: "h-screen",
1344
+ children: /* @__PURE__ */ jsx("div", {
1345
+ className: `flex h-screen items-stretch overflow-auto`,
1346
+ role: "presentation",
1347
+ tabIndex: 0,
1348
+ children: /* @__PURE__ */ jsxs(Suspense, {
1349
+ name: "Root",
1350
+ children: [/* @__PURE__ */ jsx(Sidebar, {}), /* @__PURE__ */ jsx("div", {
1351
+ className: "relative flex-1 overflow-auto",
1352
+ children: /* @__PURE__ */ jsx(Outlet, {})
1353
+ })]
1354
+ })
1355
+ })
1356
+ });
1357
+ }
1358
+ //#endregion
1359
+ //#region src/pages/content.tsx
1360
+ function Content() {
1361
+ const [selectedDrive] = useSelectedDriveSafe();
1362
+ const selectedFolder = useSelectedFolder();
1363
+ const selectedDocumentId = useSelectedDocumentId();
1364
+ useEffect(() => {
1365
+ if (!selectedDocumentId) setPHDocumentEditorConfig(defaultPHDocumentEditorConfig);
1366
+ }, [selectedDocumentId]);
1367
+ useEffect(() => {
1368
+ if (!selectedDrive) setPHAppConfig(defaultPHAppConfig);
1369
+ }, [selectedDrive]);
1370
+ return /* @__PURE__ */ jsx(ContentContainer, { children: !selectedDocumentId && !selectedDrive && !selectedFolder ? /* @__PURE__ */ jsx(HomeScreenContainer, {}) : /* @__PURE__ */ jsx(AppContainer, {}) });
1371
+ }
1372
+ function ContentContainer({ children }) {
1373
+ return /* @__PURE__ */ jsx("div", {
1374
+ className: "flex h-full flex-col overflow-auto",
1375
+ id: "content-view",
1376
+ children
1377
+ });
1378
+ }
1379
+ function DriveItem({ drive }) {
1380
+ const description = useAppModuleById(drive.header.meta?.preferredEditor)?.config.name || "Drive Explorer App";
1381
+ return /* @__PURE__ */ jsx(HomeScreenItem, {
1382
+ title: drive.state.global.name || drive.header.name,
1383
+ description,
1384
+ icon: /* @__PURE__ */ jsx(DriveIcon, { drive }),
1385
+ onClick: () => setSelectedDrive(drive)
1386
+ }, drive.header.id);
1387
+ }
1388
+ function HomeScreenContainer() {
1389
+ const drives = useDrives();
1390
+ const config = connectConfig;
1391
+ return /* @__PURE__ */ jsxs(HomeScreen, { children: [drives?.map((drive) => {
1392
+ return /* @__PURE__ */ jsx(DriveItem, { drive }, drive.header.id);
1393
+ }), config.drives.addDriveEnabled && /* @__PURE__ */ jsx(HomeScreenAddDriveItem, {})] });
1394
+ }
1395
+ //#endregion
1396
+ //#region src/components/router.tsx
1397
+ function createRouter(routes) {
1398
+ const routerBasename = connectConfig.routerBasename;
1399
+ return createBrowserRouter(routes, {
1400
+ basename: routerBasename,
1401
+ future: {
1402
+ v7_fetcherPersist: true,
1403
+ v7_relativeSplatPath: true
1404
+ }
1405
+ });
1406
+ }
1407
+ function createRoutes() {
1408
+ return [{
1409
+ element: /* @__PURE__ */ jsx(Suspense, {
1410
+ name: "RouteRoot",
1411
+ children: /* @__PURE__ */ jsx(Root, {})
1412
+ }),
1413
+ children: [{
1414
+ index: true,
1415
+ path: "d?/:driveId?/*?",
1416
+ element: /* @__PURE__ */ jsx(Suspense, {
1417
+ name: "Drive",
1418
+ children: /* @__PURE__ */ jsx(Content, {})
1419
+ })
1420
+ }]
1421
+ }];
1422
+ }
1423
+ const router = createRouter(createRoutes());
1424
+ const Router = () => {
1425
+ return /* @__PURE__ */ jsx(RouterProvider, { router });
1426
+ };
1427
+ //#endregion
1428
+ //#region src/components/sidebar.tsx
1429
+ function Sidebar() {
1430
+ const user = useUser();
1431
+ const drives = useDrives();
1432
+ const [selectedDrive] = useSelectedDriveSafe();
1433
+ const connectDebug = localStorage.getItem("CONNECT_DEBUG") === "true";
1434
+ const ensName = user?.ens?.name || user?.profile?.username || void 0;
1435
+ const avatarUrl = user?.ens?.avatarUrl || user?.profile?.userImage || void 0;
1436
+ const ensInfo = useEns(!avatarUrl ? user?.address : void 0);
1437
+ const onClickSettings = () => {
1438
+ showPHModal({ type: "settings" });
1439
+ };
1440
+ const onAddDriveClick = () => {
1441
+ showPHModal({ type: "addDrive" });
1442
+ };
1443
+ const etherscanUrl = user?.address ? `https://etherscan.io/address/${user.address}` : "";
1444
+ return /* @__PURE__ */ jsx(ConnectTooltipProvider, { children: /* @__PURE__ */ jsx(ConnectSidebar, {
1445
+ id: "sidebar",
1446
+ onClick: () => setSelectedDrive(void 0),
1447
+ onClickSettings,
1448
+ address: user?.address,
1449
+ onLogin: openRenown,
1450
+ onDisconnect: logout,
1451
+ ensName: ensName || ensInfo.data?.ens,
1452
+ avatarUrl: avatarUrl || ensInfo.data?.avatar_small || ensInfo.data?.avatar_url || void 0,
1453
+ etherscanUrl,
1454
+ showDebug: connectDebug,
1455
+ onDebugClick: () => showPHModal({ type: "debugSettings" }),
1456
+ children: /* @__PURE__ */ jsxs(ErrorBoundary$1, {
1457
+ variant: "text",
1458
+ fallbackMessage: "There was an error loading drives",
1459
+ loggerContext: ["Connect", "Sidebar"],
1460
+ children: [drives?.map((drive, index) => /* @__PURE__ */ jsx(SidebarItem, {
1461
+ title: drive.header.name,
1462
+ onClick: () => setSelectedDrive(drive),
1463
+ active: selectedDrive?.header.id === drive.header.id,
1464
+ icon: /* @__PURE__ */ jsx(DriveIcon, { drive })
1465
+ }, index)), connectConfig.drives.addDriveEnabled && /* @__PURE__ */ jsx(SidebarAddDriveItem, { onClick: onAddDriveClick })]
1466
+ })
1467
+ }) });
1468
+ }
1469
+ //#endregion
1470
+ export { AppLoader as t };
1471
+
1472
+ //# sourceMappingURL=sidebar-BXOORGUU.js.map
1473
+ //# debugId=0e6285c3-6ff2-51e3-bd29-e9f89fcb22f9