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

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