@powerhousedao/connect 4.1.0-dev.18 → 4.1.0-dev.19
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.
- package/dist/assets/{AddDriveModal.Cg4TqLU6.js → AddDriveModal.atIXkYDv.js} +2 -2
- package/dist/assets/{AddDriveModal.Cg4TqLU6.js.map → AddDriveModal.atIXkYDv.js.map} +1 -1
- package/dist/assets/{CookiesPolicyModal.C72UZ1KY.js → CookiesPolicyModal.CSr2nTWu.js} +2 -2
- package/dist/assets/{CookiesPolicyModal.C72UZ1KY.js.map → CookiesPolicyModal.CSr2nTWu.js.map} +1 -1
- package/dist/assets/{CreateDocumentModal.Be8Yb4Tw.js → CreateDocumentModal.hCyyznzw.js} +2 -2
- package/dist/assets/{CreateDocumentModal.Be8Yb4Tw.js.map → CreateDocumentModal.hCyyznzw.js.map} +1 -1
- package/dist/assets/{DebugSettingsModal.BYAH2kLg.js → DebugSettingsModal.CgAXBUpR.js} +2 -2
- package/dist/assets/{DebugSettingsModal.BYAH2kLg.js.map → DebugSettingsModal.CgAXBUpR.js.map} +1 -1
- package/dist/assets/{DeleteDriveModal.D2WirfE-.js → DeleteDriveModal.Ba1pkRrp.js} +2 -2
- package/dist/assets/{DeleteDriveModal.D2WirfE-.js.map → DeleteDriveModal.Ba1pkRrp.js.map} +1 -1
- package/dist/assets/{DeleteItemModal.Czi0wE_6.js → DeleteItemModal.59EW1OYd.js} +2 -2
- package/dist/assets/{DeleteItemModal.Czi0wE_6.js.map → DeleteItemModal.59EW1OYd.js.map} +1 -1
- package/dist/assets/{DisclaimerModal.cBHngnNt.js → DisclaimerModal.CMaIiFx2.js} +2 -2
- package/dist/assets/{DisclaimerModal.cBHngnNt.js.map → DisclaimerModal.CMaIiFx2.js.map} +1 -1
- package/dist/assets/{DriveSettingsModal.DltE5rSu.js → DriveSettingsModal.G8tppGWb.js} +2 -2
- package/dist/assets/{DriveSettingsModal.DltE5rSu.js.map → DriveSettingsModal.G8tppGWb.js.map} +1 -1
- package/dist/assets/{SettingsModal.CZmfov8g.js → SettingsModal.CLpRdHfo.js} +2 -2
- package/dist/assets/{SettingsModal.CZmfov8g.js.map → SettingsModal.CLpRdHfo.js.map} +1 -1
- package/dist/assets/{Trans.GeuewYUs.js → Trans.CBZW5Jpo.js} +2 -2
- package/dist/assets/{Trans.GeuewYUs.js.map → Trans.CBZW5Jpo.js.map} +1 -1
- package/dist/assets/{UpgradeDriveModal.BLXcEgmt.js → UpgradeDriveModal.ooyxdViv.js} +2 -2
- package/dist/assets/{UpgradeDriveModal.BLXcEgmt.js.map → UpgradeDriveModal.ooyxdViv.js.map} +1 -1
- package/dist/assets/{atlas-import.Tq-cGz94.js → atlas-import.Bvmc6eu-.js} +2 -2
- package/dist/assets/{atlas-import.Tq-cGz94.js.map → atlas-import.Bvmc6eu-.js.map} +1 -1
- package/dist/assets/{content.C38XllGR.js → content.B_2fQ3XO.js} +2 -2
- package/dist/assets/content.B_2fQ3XO.js.map +1 -0
- package/dist/assets/{cookie-banner.CA1rcZYO.js → cookie-banner.CQrIFtr9.js} +2 -2
- package/dist/assets/{cookie-banner.CA1rcZYO.js.map → cookie-banner.CQrIFtr9.js.map} +1 -1
- package/dist/assets/{index.tjOyiWN1.js → index.BWsvZ6s-.js} +2 -2
- package/dist/assets/{index.tjOyiWN1.js.map → index.BWsvZ6s-.js.map} +1 -1
- package/dist/assets/{index.CupF3yfn.js → index.BbKJCE01.js} +2 -2
- package/dist/assets/{index.CupF3yfn.js.map → index.BbKJCE01.js.map} +1 -1
- package/dist/assets/{index.D4rIKeA_.js → index.BfgjawT0.js} +2 -2
- package/dist/assets/{index.D4rIKeA_.js.map → index.BfgjawT0.js.map} +1 -1
- package/dist/assets/index.DoxG1d4A.js +31 -0
- package/dist/assets/index.DoxG1d4A.js.map +1 -0
- package/dist/assets/{index.DqaPdXs7.js → index.EpI4H1M9.js} +2 -2
- package/dist/assets/{index.DqaPdXs7.js.map → index.EpI4H1M9.js.map} +1 -1
- package/dist/assets/{index.DqtagVhW.js → index.lZCfN3WH.js} +2 -2
- package/dist/assets/{index.DqtagVhW.js.map → index.lZCfN3WH.js.map} +1 -1
- package/dist/assets/{index.Beg62ngn.js → index.wkpkULnU.js} +2 -2
- package/dist/assets/{index.Beg62ngn.js.map → index.wkpkULnU.js.map} +1 -1
- package/dist/assets/{main.DTZCxlJU.js → main.C-z7q4Cv.js} +3 -3
- package/dist/assets/{main.DTZCxlJU.js.map → main.C-z7q4Cv.js.map} +1 -1
- package/dist/assets/{modal.B9PP9n2B.js → modal.BizsZF2D.js} +3 -3
- package/dist/assets/{modal.B9PP9n2B.js.map → modal.BizsZF2D.js.map} +1 -1
- package/dist/assets/{modals.BVvUIuNm.js → modals.Bh5aGAsh.js} +2 -2
- package/dist/assets/{modals.BVvUIuNm.js.map → modals.Bh5aGAsh.js.map} +1 -1
- package/dist/assets/{nodefs.DG9XiPrJ.js → nodefs.DRM5jodc.js} +2 -2
- package/dist/assets/{nodefs.DG9XiPrJ.js.map → nodefs.DRM5jodc.js.map} +1 -1
- package/dist/assets/{nodes.bF-gqvzp.js → nodes.1z5U6LVM.js} +2 -2
- package/dist/assets/{nodes.bF-gqvzp.js.map → nodes.1z5U6LVM.js.map} +1 -1
- package/dist/assets/{opfs-ahp.CQz3T4kD.js → opfs-ahp.CIwZIbNR.js} +2 -2
- package/dist/assets/{opfs-ahp.CQz3T4kD.js.map → opfs-ahp.CIwZIbNR.js.map} +1 -1
- package/dist/assets/{registerServiceWorker.DZCbK6MJ.js → registerServiceWorker.BNf1b8wD.js} +2 -2
- package/dist/assets/{registerServiceWorker.DZCbK6MJ.js.map → registerServiceWorker.BNf1b8wD.js.map} +1 -1
- package/dist/assets/{root.MjuhTv80.js → root.SqECa_nN.js} +2 -2
- package/dist/assets/{root.MjuhTv80.js.map → root.SqECa_nN.js.map} +1 -1
- package/dist/assets/{useAcceptedCookies.BwmKLuW0.js → useAcceptedCookies.BwfkDBue.js} +2 -2
- package/dist/assets/{useAcceptedCookies.BwmKLuW0.js.map → useAcceptedCookies.BwfkDBue.js.map} +1 -1
- package/dist/assets/useDefaultDocumentModelEditor.DmNu7Xm0.js +2 -0
- package/dist/assets/{useDefaultDocumentModelEditor.CjlFHIbF.js.map → useDefaultDocumentModelEditor.DmNu7Xm0.js.map} +1 -1
- package/dist/assets/{useInitSentry.DAHyudtD.js → useInitSentry.BsZC-0d6.js} +6 -6
- package/dist/assets/{useInitSentry.DAHyudtD.js.map → useInitSentry.BsZC-0d6.js.map} +1 -1
- package/dist/index.html +1 -1
- package/dist/vite-envs.sh +1 -1
- package/package.json +10 -10
- package/dist/assets/content.C38XllGR.js.map +0 -1
- package/dist/assets/index.DJX9_IxB.js +0 -31
- package/dist/assets/index.DJX9_IxB.js.map +0 -1
- package/dist/assets/useDefaultDocumentModelEditor.CjlFHIbF.js +0 -2
package/dist/index.html
CHANGED
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"react-dom": "https://esm.sh/react-dom@18.3.1&deps=scheduler@0.23.2",
|
|
73
73
|
"react-dom/": "https://esm.sh/react-dom@18.3.1&deps=scheduler@0.23.2/"
|
|
74
74
|
}
|
|
75
|
-
}</script><script async="" type="module" crossorigin="" src="./assets/main.DTZCxlJU.js"></script><link rel="modulepreload" crossorigin="" href="./assets/index.u4lctn3H.js"><link rel="stylesheet" crossorigin="" href="./assets/main-mJxFL4pT.css"></head><body><div id="app"><div class="flex h-screen"><div class="group flex h-full flex-col bg-slate-50 animate-pulse" style="width:58px"><div class="no-scrollbar flex-1 overflow-auto text-gray-900 transition-shadow"><div class="shrink-0 flex justify-center gap-4 border-b border-gray-300 py-4"><button aria-label="Home" class="cursor-wait" type="button"><svg class="text-gray-600" style="width:24px;height:24px" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.0306 3.68615C11.2854 3.68614 11.492 3.47932 11.4921 3.2242L11.4921 9.03413e-06C8.29133 0.132881 5.41451 1.52048 3.33928 3.68633L11.0306 3.68615ZM14.2609 8.42821C14.2609 8.68334 14.0543 8.89016 13.7994 8.89016L0.406086 8.89043C0.81778 7.34998 1.52777 5.93103 2.46931 4.70043L13.7995 4.70024C14.0544 4.70023 14.261 4.90707 14.261 5.16221L14.2609 8.42821ZM20.6591 20.3137C18.5847 22.4787 15.7079 23.8663 12.5062 24L12.5063 20.7758C12.5063 20.5207 12.7129 20.3139 12.9678 20.3139L20.6591 20.3137ZM11.4924 23.9992C8.29157 23.8665 5.41401 22.4782 3.33969 20.3133L11.0309 20.3131C11.2858 20.3131 11.4924 20.52 11.4924 20.7751L11.4924 23.9992ZM17.5946 15.5703C17.5947 15.3152 17.8013 15.1083 18.0561 15.1083L23.5923 15.108C23.1806 16.6484 22.4714 18.0666 21.5291 19.298L18.0561 19.2983C17.8012 19.2983 17.5946 19.0914 17.5946 18.8363L17.5946 15.5703ZM8.84765 10.3544C8.85393 10.1039 9.05863 9.90407 9.30899 9.90407L23.8175 9.90396C23.9373 10.584 24 11.2842 24 11.9989C24 12.7136 23.9372 13.4138 23.8174 14.0939L9.31089 14.0933C9.06005 14.0932 8.85517 13.8927 8.84957 13.6416L8.80986 11.8617L8.84765 10.3544ZM16.7389 18.8372C16.7389 19.0923 16.5323 19.2991 16.2774 19.2991L2.46978 19.2992C1.52749 18.0679 0.818373 16.6498 0.406752 15.1093L16.2775 15.1092C16.5324 15.1092 16.739 15.316 16.739 15.5712L16.7389 18.8372ZM0.182552 9.90452L7.3636 9.90412C7.61849 9.90411 7.82511 10.1109 7.82511 10.3661L7.82503 13.6321C7.82503 13.8872 7.61842 14.0941 7.36355 14.0941L0.182447 14.0945C0.062664 13.4144 -1.71661e-05 12.7142 0 11.9995C1.71661e-05 11.2848 0.0627384 10.5846 0.182552 9.90452ZM15.2756 5.16214C15.2757 4.90701 15.4823 4.70019 15.7371 4.70019L21.5294 4.69998C22.4717 5.93135 23.1808 7.34943 23.5924 8.88987L15.7371 8.89013C15.4822 8.89014 15.2756 8.6833 15.2756 8.42816L15.2756 5.16214ZM12.5068 0C15.7076 0.132721 18.5852 1.52098 20.6595 3.68592L12.9682 3.6861C12.7133 3.6861 12.5067 3.47927 12.5067 3.22413L12.5068 0Z" fill="#9EA0A1"></path></svg></button></div><div class="flex flex-col"></div></div><div class="shrink-0 flex flex-col gap-2 border-t border-gray-300 px-2 py-4"><div><button type="button" aria-label="Open Account" class="cursor-pointer" aria-haspopup="dialog" aria-expanded="false" aria-controls="radix-:R1h:" data-state="closed"><div class="group/sidebar-footer flex w-full items-baseline justify-start text-sm font-semibold leading-10 text-gray-600 cursor-wait"><img width="42" height="42" loading="lazy" class="group-hover/sidebar-footer:hidden" src="data:image/png;base64,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" alt="Renown Login"/><img width="42" height="42" loading="lazy" class="hidden group-hover/sidebar-footer:block" src="./assets/renown-short-hover-BiSLBV7L.png" alt="Renown Login Hover"/></div></button></div><button aria-label="Settings" type="button" class="mt-3 flex w-full items-center justify-center outline-none cursor-wait"><svg class="text-gray-600" style="width:24px;height:24px" viewBox="0 0 24 24" fill="currentcolor"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.5 2C13.1894 2 13.8136 2.27905 14.2659 2.73036C14.2834 2.74784 14.3007 2.76559 14.3177 2.78358C14.7174 3.20678 14.971 3.76953 14.9977 4.39107L14.9985 4.41205C14.9995 4.44124 15 4.47056 15 4.5L15 4.51426C15 4.55491 15.0247 4.59145 15.0623 4.60702C15.0998 4.62261 15.1431 4.61423 15.1719 4.58546L15.182 4.57538C15.2028 4.55456 15.2239 4.53419 15.2452 4.51426L15.2607 4.5C15.719 4.07934 16.2962 3.86073 16.8782 3.84417C16.9029 3.84346 16.9277 3.84312 16.9524 3.84315C17.5913 3.84382 18.23 4.0879 18.7175 4.57538L19.4246 5.28249C19.9121 5.76997 20.1562 6.40868 20.1569 7.0476C20.1569 7.07234 20.1565 7.09709 20.1558 7.12182C20.1393 7.70375 19.9207 8.281 19.5 8.73935L19.4857 8.75476C19.4658 8.77611 19.4454 8.7972 19.4246 8.81802L19.4145 8.82811C19.3858 8.85687 19.3774 8.90017 19.393 8.93775C19.4085 8.97529 19.4451 9 19.4857 9L19.5 9C19.5294 9 19.5588 9.00051 19.5879 9.00152L19.6089 9.00233C20.2305 9.02898 20.7932 9.28257 21.2164 9.68233C21.2344 9.69933 21.2522 9.71659 21.2696 9.73411C21.721 10.1864 22 10.8106 22 11.5L22 12.5C22 13.1894 21.721 13.8136 21.2696 14.2659C21.2522 14.2834 21.2344 14.3007 21.2164 14.3177C20.7932 14.7174 20.2305 14.971 19.6089 14.9977L19.5879 14.9985C19.5588 14.9995 19.5294 15 19.5 15L19.4857 15C19.4451 15 19.4085 15.0247 19.393 15.0623C19.3774 15.0998 19.3858 15.1431 19.4145 15.1719L19.4246 15.182C19.4454 15.2028 19.4658 15.2239 19.4857 15.2452L19.5 15.2607C19.9207 15.719 20.1393 16.2962 20.1558 16.8782C20.1565 16.9029 20.1569 16.9277 20.1569 16.9524C20.1562 17.5913 19.9121 18.23 19.4246 18.7175L18.7175 19.4246C18.23 19.9121 17.5913 20.1562 16.9524 20.1568C16.9277 20.1569 16.9029 20.1565 16.8782 20.1558C16.2963 20.1393 15.719 19.9207 15.2607 19.5L15.2452 19.4857C15.2239 19.4658 15.2028 19.4454 15.182 19.4246L15.1719 19.4145C15.1431 19.3858 15.0998 19.3774 15.0623 19.393C15.0247 19.4085 15 19.4451 15 19.4857L15 19.5C15 19.5294 14.9995 19.5588 14.9985 19.5879L14.9977 19.6089C14.971 20.2305 14.7174 20.7932 14.3177 21.2164C14.3007 21.2344 14.2834 21.2522 14.2659 21.2696C13.8136 21.7209 13.1894 22 12.5 22L11.5 22C10.8106 22 10.1864 21.7209 9.73411 21.2696C9.71659 21.2522 9.69933 21.2344 9.68233 21.2164C9.28257 20.7932 9.02898 20.2305 9.00233 19.6089L9.00152 19.5879C9.00051 19.5588 9 19.5294 9 19.5L9 19.4857C9 19.4451 8.97529 19.4085 8.93774 19.393C8.90017 19.3774 8.85687 19.3858 8.8281 19.4145L8.81802 19.4246C8.7972 19.4454 8.77611 19.4658 8.75475 19.4857L8.73934 19.5C8.281 19.9207 7.70375 20.1393 7.12182 20.1558C7.09708 20.1565 7.07234 20.1569 7.0476 20.1568C6.40868 20.1562 5.76997 19.9121 5.28249 19.4246L4.57538 18.7175C4.0879 18.23 3.84382 17.5913 3.84315 16.9524C3.84312 16.9277 3.84346 16.9029 3.84417 16.8782C3.86073 16.2962 4.07934 15.719 4.5 15.2607L4.51426 15.2452C4.53419 15.2239 4.55456 15.2028 4.57538 15.182L4.58546 15.1719C4.61423 15.1431 4.62261 15.0998 4.60702 15.0623C4.59145 15.0247 4.55491 15 4.51426 15L4.5 15C4.47056 15 4.44125 14.9995 4.41205 14.9985L4.39107 14.9977C3.76953 14.971 3.20678 14.7174 2.78358 14.3177C2.76558 14.3007 2.74784 14.2834 2.73036 14.2659C2.27905 13.8136 2 13.1894 2 12.5L2 11.5C2 10.8106 2.27905 10.1864 2.73036 9.73411C2.74784 9.71659 2.76558 9.69933 2.78358 9.68233C3.20678 9.28257 3.76953 9.02898 4.39107 9.00233L4.41205 9.00152C4.44125 9.00051 4.47056 9 4.5 9L4.51426 9C4.55491 9 4.59145 8.97529 4.60702 8.93775C4.62261 8.90017 4.61423 8.85687 4.58546 8.82811L4.57538 8.81802C4.55456 8.7972 4.53419 8.77611 4.51426 8.75476L4.5 8.73935C4.07934 8.281 3.86073 7.70375 3.84417 7.12182C3.84346 7.09709 3.84312 7.07234 3.84315 7.0476C3.84382 6.40868 4.0879 5.76997 4.57538 5.28249L5.28249 4.57538C5.76997 4.0879 6.40868 3.84382 7.0476 3.84315C7.07234 3.84312 7.09709 3.84346 7.12182 3.84417C7.70375 3.86073 8.281 4.07934 8.73934 4.5L8.75476 4.51426C8.77611 4.53419 8.7972 4.55456 8.81802 4.57538L8.8281 4.58546C8.85687 4.61423 8.90017 4.62261 8.93775 4.60702C8.97529 4.59145 9 4.55491 9 4.51426L9 4.5C9 4.47056 9.00051 4.44124 9.00152 4.41205L9.00233 4.39107C9.02898 3.76953 9.28257 3.20678 9.68233 2.78358C9.69933 2.76559 9.71659 2.74784 9.73411 2.73036C10.1864 2.27905 10.8106 2 11.5 2L12.5 2ZM11 19.5C11 19.7761 11.2239 20 11.5 20L12.5 20C12.7761 20 13 19.7761 13 19.5L13 19.4857C13 18.6262 13.5212 17.8669 14.2962 17.5455C15.0727 17.2235 15.9787 17.3929 16.5861 18.0003L16.5962 18.0104C16.7915 18.2057 17.108 18.2057 17.3033 18.0104L18.0104 17.3033C18.2057 17.108 18.2057 16.7915 18.0104 16.5962L18.0003 16.5861C17.3929 15.9787 17.2235 15.0727 17.5455 14.2961C17.8669 13.5212 18.6262 13 19.4857 13L19.5 13C19.7761 13 20 12.7761 20 12.5L20 11.5C20 11.2239 19.7761 11 19.5 11L19.4857 11C18.6262 11 17.8669 10.4788 17.5455 9.70385C17.2235 8.92727 17.3929 8.02132 18.0003 7.41389L18.0104 7.40381C18.2057 7.20854 18.2057 6.89196 18.0104 6.6967L17.3033 5.98959C17.108 5.79433 16.7915 5.79433 16.5962 5.98959L16.5861 5.99968C15.9787 6.60711 15.0727 6.77651 14.2962 6.45448C13.5212 6.13311 13 5.37381 13 4.51426L13 4.5C13 4.22386 12.7761 4 12.5 4L11.5 4C11.2239 4 11 4.22386 11 4.5L11 4.51426C11 5.37381 10.4788 6.13311 9.70384 6.45448C8.92725 6.77651 8.02132 6.60711 7.41389 5.99968L7.40381 5.98959C7.20854 5.79433 6.89196 5.79433 6.6967 5.98959L5.98959 6.6967C5.79433 6.89196 5.79433 7.20854 5.98959 7.40381L5.99967 7.41389C6.60711 8.02132 6.77651 8.92727 6.45448 9.70385C6.13311 10.4788 5.37382 11 4.51426 11L4.5 11C4.22386 11 4 11.2239 4 11.5L4 12.5C4 12.7761 4.22386 13 4.5 13L4.51426 13C5.37382 13 6.13311 13.5212 6.45447 14.2961C6.77651 15.0727 6.60711 15.9787 5.99968 16.5861L5.98959 16.5962C5.79433 16.7915 5.79433 17.108 5.98959 17.3033L6.6967 18.0104C6.89196 18.2057 7.20854 18.2057 7.4038 18.0104L7.41389 18.0003C8.02132 17.3929 8.92726 17.2235 9.70384 17.5455C10.4788 17.8669 11 18.6262 11 19.4857L11 19.5Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M12 14C13.1046 14 14 13.1046 14 12C14 10.8954 13.1046 10 12 10C10.8954 10 10 10.8954 10 12C10 13.1046 10.8954 14 12 14ZM12 16C14.2091 16 16 14.2091 16 12C16 9.79086 14.2091 8 12 8C9.79086 8 8 9.79086 8 12C8 14.2091 9.79086 16 12 16Z"></path></svg><span class="hidden text-sm font-semibold leading-6 text-gray-800">Settings</span></button></div></div><div class="container relative mx-auto h-full flex-col hidden home-screen"><div class="m-8 flex flex-wrap justify-center gap-4 pt-12"><picture class="pointer-events-none absolute inset-8 z-0 size-[calc(100%-32px)] object-contain"><source srcSet="./assets/home-bg-BRYzhkhi.avif" type="image/avif"/><img src="./assets/home-bg-BEhF9NuW.png" alt="background" class="object-contain"/></picture></div></div><script>
|
|
75
|
+
}</script><script async="" type="module" crossorigin="" src="./assets/main.C-z7q4Cv.js"></script><link rel="modulepreload" crossorigin="" href="./assets/index.u4lctn3H.js"><link rel="stylesheet" crossorigin="" href="./assets/main-mJxFL4pT.css"></head><body><div id="app"><div class="flex h-screen"><div class="group flex h-full flex-col bg-slate-50 animate-pulse" style="width:58px"><div class="no-scrollbar flex-1 overflow-auto text-gray-900 transition-shadow"><div class="shrink-0 flex justify-center gap-4 border-b border-gray-300 py-4"><button aria-label="Home" class="cursor-wait" type="button"><svg class="text-gray-600" style="width:24px;height:24px" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.0306 3.68615C11.2854 3.68614 11.492 3.47932 11.4921 3.2242L11.4921 9.03413e-06C8.29133 0.132881 5.41451 1.52048 3.33928 3.68633L11.0306 3.68615ZM14.2609 8.42821C14.2609 8.68334 14.0543 8.89016 13.7994 8.89016L0.406086 8.89043C0.81778 7.34998 1.52777 5.93103 2.46931 4.70043L13.7995 4.70024C14.0544 4.70023 14.261 4.90707 14.261 5.16221L14.2609 8.42821ZM20.6591 20.3137C18.5847 22.4787 15.7079 23.8663 12.5062 24L12.5063 20.7758C12.5063 20.5207 12.7129 20.3139 12.9678 20.3139L20.6591 20.3137ZM11.4924 23.9992C8.29157 23.8665 5.41401 22.4782 3.33969 20.3133L11.0309 20.3131C11.2858 20.3131 11.4924 20.52 11.4924 20.7751L11.4924 23.9992ZM17.5946 15.5703C17.5947 15.3152 17.8013 15.1083 18.0561 15.1083L23.5923 15.108C23.1806 16.6484 22.4714 18.0666 21.5291 19.298L18.0561 19.2983C17.8012 19.2983 17.5946 19.0914 17.5946 18.8363L17.5946 15.5703ZM8.84765 10.3544C8.85393 10.1039 9.05863 9.90407 9.30899 9.90407L23.8175 9.90396C23.9373 10.584 24 11.2842 24 11.9989C24 12.7136 23.9372 13.4138 23.8174 14.0939L9.31089 14.0933C9.06005 14.0932 8.85517 13.8927 8.84957 13.6416L8.80986 11.8617L8.84765 10.3544ZM16.7389 18.8372C16.7389 19.0923 16.5323 19.2991 16.2774 19.2991L2.46978 19.2992C1.52749 18.0679 0.818373 16.6498 0.406752 15.1093L16.2775 15.1092C16.5324 15.1092 16.739 15.316 16.739 15.5712L16.7389 18.8372ZM0.182552 9.90452L7.3636 9.90412C7.61849 9.90411 7.82511 10.1109 7.82511 10.3661L7.82503 13.6321C7.82503 13.8872 7.61842 14.0941 7.36355 14.0941L0.182447 14.0945C0.062664 13.4144 -1.71661e-05 12.7142 0 11.9995C1.71661e-05 11.2848 0.0627384 10.5846 0.182552 9.90452ZM15.2756 5.16214C15.2757 4.90701 15.4823 4.70019 15.7371 4.70019L21.5294 4.69998C22.4717 5.93135 23.1808 7.34943 23.5924 8.88987L15.7371 8.89013C15.4822 8.89014 15.2756 8.6833 15.2756 8.42816L15.2756 5.16214ZM12.5068 0C15.7076 0.132721 18.5852 1.52098 20.6595 3.68592L12.9682 3.6861C12.7133 3.6861 12.5067 3.47927 12.5067 3.22413L12.5068 0Z" fill="#9EA0A1"></path></svg></button></div><div class="flex flex-col"></div></div><div class="shrink-0 flex flex-col gap-2 border-t border-gray-300 px-2 py-4"><div><button type="button" aria-label="Open Account" class="cursor-pointer" aria-haspopup="dialog" aria-expanded="false" aria-controls="radix-:R1h:" data-state="closed"><div class="group/sidebar-footer flex w-full items-baseline justify-start text-sm font-semibold leading-10 text-gray-600 cursor-wait"><img width="42" height="42" loading="lazy" class="group-hover/sidebar-footer:hidden" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAACXBIWXMAACxLAAAsSwGlPZapAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAtmSURBVHgB7Z3dbtvmGcefl5LsqHYCq0C6tEUCZ0kDzAFqd0NTYAmweAfr0YD0CrpeQboriH0H6RUsu4ChAYodtCdJD3LQBGttILEBJ4tdJ2uzBoi0yIpsi+S790+ZDkmREilSHySfX6FKpkgliH5+nuf9pKAEkFLO1Bu7VzRNzEuiWfXzglDHSIgZYsYC9b1sCaEeJFZMU66WCnS7XC5vUUwE9Qmk2dndvar+ZpetB5NCxIr6Hr+II1NkgQ7FMeTnHGGygxLhRkGj5agiRRKo3mxeY3EyjkZLR8vl5bCnhxKo2WzOGqb4UpJcCDpH1T+E/wpKY+3gU4XoO0MyCaKyhvVsqifTNNWzVM8y8Hz1rW2pr3ExTDTq+Q3vNPc/lYZ+3S/qwI+iVlDSCJYlZcgDiVqGQdLXJVGTJD47NjV5s9vndP3W6429a8rZpY6LIE6hoB4aMenHMMxgkXqktECBguSBNHhwxMkWiEgt3SRDpbgOukjka8HLxt4VQeaX3uOlIkedrKPr7WjkRWiFv0yXJ/7ecdx7AAWzbsgfnDUPgs1EsWgVykz2QTTaa+melCZqRU1+4C2sO8KJSoe3vAXzZInlyRMoTxAw3MgZXbXEvee6BELdg6EI5zGkLa538gcCRkk1lNzIhXqjseQ8cmiGlbpM2nS+WdA0migViMkvKKx1V00kavr+5OlKRdTw02EEUqnrmvNCBJ1SkQvmvFMsauROQHKmOPHqc/sn6y2/6MMtLsams2X2OgpZhrQM92h6u6OQ5WHadItCliWqSL7quqDAdQ/jpqB5nBDaH6wnv/R1ZKLILS/GBbqEdvdarmP6/pGK5k1f1qg6y8N4gBHevsBSafeKOuSeoqGxPEwAXjcwvUfVQGLedZLGxTPjj9cNKWhWw/9cJ3EAYgLwuqHaZvM4Nus+zAYxAXSkMDGj9TiHYQ7pVEP1BxEzFL6+9T3tvGrS4u/fpzcrRykrcMU8BLb/85yePa/STmOX1h49oSzBAg2BJ0qgw9dPn1OWYIEGzH5LtyKQ8+dnv1QpK7BAA2ZbRRxI42T1wSZlBRZowKw/2u44hnpov9WiLMACDRCI8qK64/ve2sZTygIs0ABZvf848L31je1MRCEWaEA82vxZRaBa4Puoi1bvp78WYoEGxOra457nrD18kvoWGQs0AFYfPLY6DcOdm+4oxAIlzE6jSSsRpEChvbaR3t5pFihBUBR/fft7isq9lY3UpjIWKEHufLceOnV1XHtvzYpeaYMFSgjUPds/9T/OBfEQvdLWtGeBEgDyrCRQDFsS3UqXRCxQTJKSx+ZFbSdVErFAMbi38jBReWwg0Vff3E1FTcQC9YHV2lJRYm1jmwaFXRONu0Si3mi69qEqT5aICQb9NnfurvXd2uqHhfO/pvnzp2kcaHpWp7JAIUHUWX2wNdCo0403Z6Zp8eL7ND1VplHCAvXBuuopXlHFsndi2Cg4O/u2FY1GJRILFBJEnEebz2j94fZQ01UYpqeO0InjlZGIxAL1ADUOJsFjOsY4RJxenHr3OJ05/Tadeuc4DQMWKAC0dtqtnvGKNmGZKBXp4oU5S6hB4hWIm/EHoO8lrfIAa/XHT8NfMsQCHXDirYqqK9J7FytEoLmzp2jYcArzgCiEqRWYUTjuEQnSWPWPSlsoqocB10ARwIJATH7vNrd5FECc35w7SXPnTlmvhwkL1AdokY1DRBqlODYsUAzQmTiqOcwnVTP90kdzIxPHhgWKSXuQ819Di0YQ5sMPzlk90OMAC5QQd1c2rCGOQYIe548v/856Hhe8AvEGU31yYeGcFR0GldLQpbB4aX7kKasXLFAMMM0CJC3RGZWuLqle5TQwcoGGUUsMMgUkLVGa5AEjF+gf/7xDwwQyTb9RpomJIlVmpg96oON1wiUlEeb8pEkekLsUhohnRz10FNpfOiRCr26/rR1IhPGofgtriL14cZ7SBtdAB2AaBx5YZXF29p2+ppBCov/+UlMDs3WKyri1tsLCg6keEJ3QYYjU+mjr50jXosWEaadRW04fLryXSnkACxQARMLk+ah1DUSYP6iJwoDmOoYm0goL1ANEI4gUhTk1XhV2asjFC+cpzbBAIUAqiypRmCiEc9KaumxYoJBAoij7+PSaoAZxxmV8Kw4sUASwj8+LavgWVrcodEa19NIefQALFBGshw9LtyiUhegDWKCIWP1FEXYT84tCGK7IQvQBqe1IxBdwJuRvcbW6Qy/+V09s3A1Ne0SXMODWTugXcq4xO3s6G9EHpFcgNZ61EKG/BSQ1NRU9zVi5OlHqPXfKnvhuD3HYq0qzQq5SGH7z//ynj2LXH+077oSfaO9cNfqrDMkDclcD2Ss4464BQy0UFqS7k+8et0bbo0bNcSe3g6noAf7qm+/6Xv8eNQ3+UY2RZZHctsKsIjxGMVvtY8Q9i+S6GR9nR4s0r6NPklwLlKW7J4+KXAs07ise0gD3RDOxyLVAadiBbNzJtUAvYrSksjKWFZdcC/TvzWhznp1gKIXJsUDYEzFKb7KXSmWamBwLtP7waay+nCwNiMYhlwJh7VfcHedPvJXe/RSTJFcdIdbCwfubsVIXwDykMFM58kBqBdp51bSW3IShgY0zlTRJDT9kaUJYXNIrkJJhFNvNofbh+uc13BMdkYsp2z1j0LBAEcjCQsCkYYFCghmMC2Ny07dxggUKgXWzt0vp27tnGPB8hh6My/7M4wr/qwQAYbDJVJq3XhkGLJAPuJ0AVk9w1OkN10A+oJeZ5QkHC+QD7tCDladMb1L7a4be4I8Xfxv4fpwbo2Cm4trGU262hyCzESjuLZE4CoUjswLZ99bqFzsKMd3JdA3EUWjwZFogjkKDJ/OtMI5CgyXzAtkbPPULR6Hu5KIfaO69eMMRHIWCyYVA7W3l+p8Ez1EomNz0RM/H3BmMo5A/uRGo187xveAo5E+uxsI4CiVPrgTiKJQ8uRuN5yiULLkTiKNQsuRyPhDulBMHjkKvyaVAWJocZ30XR6HX5HZG4pmYtzvgKNQmtwLFHWTlKNQmtwLFneoBOArlfFI9R6H4iHqjKZ0HypO8cRITTHPPHXFVBJKuG19JSQzji58amiRR630awygzTLcbgmhLE0KsOA+a7A8TgFcNKZRAZJo/Og8apkkM44fpdcOUq0hhrggkuQhiAjA9bsAdzWjt3nSdpHIYO8R4QWAxPfWNUaDbWqVSqSmVbjvf0E2DGMaJ2VFAy5VKubzV7kiU9K3zTUPnOohx0zLcTphSfIFnSyBd373u7A+Ca7rBUYhpYyh5vLUx0heeLYGsNGa2jbLRdZNrIcYSxxt9BGk3kL7arw+oVqszxYnJTXXocLpesahRqVAgJr/s64YVgZzoGp22BTocTA2KQpzK8ouuxPHKo6qfZVseILwX1Ru7P6jAteA8NqlGrDVNEJMfkLp29933lBWq53n6jbJr27aO6Ry6Jj/xDrBi2gJ3MOYHQzXZ91rezCNrLUGL3nM7BEJ4klL81XWpesBGTmfZB2nLL2BIKnzmTF02vhPKjk2Xb5BJy97jLVUToajiaJQ9rNaW+m7x6MRcPjY1edPvuq6FTb3eXFKKXeu4SCXDYkGzHkz6QdTRffp62pjLR6emloKu7VkZv3zZuCIK4m/O5v3hxQciFVSBjddMeoAsuolWlgwQR9aEKmWmkY26EOpbrzabsyVJt9SfMxt0DlppmmiLhNf4YJZqPLAFQXGMEXW/gVEnmCPWEvITv5qn41yKQFBKY7KCtPoCjx4tL4W9InKIQDQqGOaSENqnxGSEtjj69JHrFeGd4tydvnNMWyS6rMLdVW/HI5MShBoQNejbfsR5/REJcCiTJZKYl4Jm1QfPEjMmyBoWT2AOj+rQ+REzCY2pIzf7lcbJ/wH9VD8KK3ri6QAAAABJRU5ErkJggg==" alt="Renown Login"/><img width="42" height="42" loading="lazy" class="hidden group-hover/sidebar-footer:block" src="./assets/renown-short-hover-BiSLBV7L.png" alt="Renown Login Hover"/></div></button></div><button aria-label="Settings" type="button" class="mt-3 flex w-full items-center justify-center outline-none cursor-wait"><svg class="text-gray-600" style="width:24px;height:24px" viewBox="0 0 24 24" fill="currentcolor"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.5 2C13.1894 2 13.8136 2.27905 14.2659 2.73036C14.2834 2.74784 14.3007 2.76559 14.3177 2.78358C14.7174 3.20678 14.971 3.76953 14.9977 4.39107L14.9985 4.41205C14.9995 4.44124 15 4.47056 15 4.5L15 4.51426C15 4.55491 15.0247 4.59145 15.0623 4.60702C15.0998 4.62261 15.1431 4.61423 15.1719 4.58546L15.182 4.57538C15.2028 4.55456 15.2239 4.53419 15.2452 4.51426L15.2607 4.5C15.719 4.07934 16.2962 3.86073 16.8782 3.84417C16.9029 3.84346 16.9277 3.84312 16.9524 3.84315C17.5913 3.84382 18.23 4.0879 18.7175 4.57538L19.4246 5.28249C19.9121 5.76997 20.1562 6.40868 20.1569 7.0476C20.1569 7.07234 20.1565 7.09709 20.1558 7.12182C20.1393 7.70375 19.9207 8.281 19.5 8.73935L19.4857 8.75476C19.4658 8.77611 19.4454 8.7972 19.4246 8.81802L19.4145 8.82811C19.3858 8.85687 19.3774 8.90017 19.393 8.93775C19.4085 8.97529 19.4451 9 19.4857 9L19.5 9C19.5294 9 19.5588 9.00051 19.5879 9.00152L19.6089 9.00233C20.2305 9.02898 20.7932 9.28257 21.2164 9.68233C21.2344 9.69933 21.2522 9.71659 21.2696 9.73411C21.721 10.1864 22 10.8106 22 11.5L22 12.5C22 13.1894 21.721 13.8136 21.2696 14.2659C21.2522 14.2834 21.2344 14.3007 21.2164 14.3177C20.7932 14.7174 20.2305 14.971 19.6089 14.9977L19.5879 14.9985C19.5588 14.9995 19.5294 15 19.5 15L19.4857 15C19.4451 15 19.4085 15.0247 19.393 15.0623C19.3774 15.0998 19.3858 15.1431 19.4145 15.1719L19.4246 15.182C19.4454 15.2028 19.4658 15.2239 19.4857 15.2452L19.5 15.2607C19.9207 15.719 20.1393 16.2962 20.1558 16.8782C20.1565 16.9029 20.1569 16.9277 20.1569 16.9524C20.1562 17.5913 19.9121 18.23 19.4246 18.7175L18.7175 19.4246C18.23 19.9121 17.5913 20.1562 16.9524 20.1568C16.9277 20.1569 16.9029 20.1565 16.8782 20.1558C16.2963 20.1393 15.719 19.9207 15.2607 19.5L15.2452 19.4857C15.2239 19.4658 15.2028 19.4454 15.182 19.4246L15.1719 19.4145C15.1431 19.3858 15.0998 19.3774 15.0623 19.393C15.0247 19.4085 15 19.4451 15 19.4857L15 19.5C15 19.5294 14.9995 19.5588 14.9985 19.5879L14.9977 19.6089C14.971 20.2305 14.7174 20.7932 14.3177 21.2164C14.3007 21.2344 14.2834 21.2522 14.2659 21.2696C13.8136 21.7209 13.1894 22 12.5 22L11.5 22C10.8106 22 10.1864 21.7209 9.73411 21.2696C9.71659 21.2522 9.69933 21.2344 9.68233 21.2164C9.28257 20.7932 9.02898 20.2305 9.00233 19.6089L9.00152 19.5879C9.00051 19.5588 9 19.5294 9 19.5L9 19.4857C9 19.4451 8.97529 19.4085 8.93774 19.393C8.90017 19.3774 8.85687 19.3858 8.8281 19.4145L8.81802 19.4246C8.7972 19.4454 8.77611 19.4658 8.75475 19.4857L8.73934 19.5C8.281 19.9207 7.70375 20.1393 7.12182 20.1558C7.09708 20.1565 7.07234 20.1569 7.0476 20.1568C6.40868 20.1562 5.76997 19.9121 5.28249 19.4246L4.57538 18.7175C4.0879 18.23 3.84382 17.5913 3.84315 16.9524C3.84312 16.9277 3.84346 16.9029 3.84417 16.8782C3.86073 16.2962 4.07934 15.719 4.5 15.2607L4.51426 15.2452C4.53419 15.2239 4.55456 15.2028 4.57538 15.182L4.58546 15.1719C4.61423 15.1431 4.62261 15.0998 4.60702 15.0623C4.59145 15.0247 4.55491 15 4.51426 15L4.5 15C4.47056 15 4.44125 14.9995 4.41205 14.9985L4.39107 14.9977C3.76953 14.971 3.20678 14.7174 2.78358 14.3177C2.76558 14.3007 2.74784 14.2834 2.73036 14.2659C2.27905 13.8136 2 13.1894 2 12.5L2 11.5C2 10.8106 2.27905 10.1864 2.73036 9.73411C2.74784 9.71659 2.76558 9.69933 2.78358 9.68233C3.20678 9.28257 3.76953 9.02898 4.39107 9.00233L4.41205 9.00152C4.44125 9.00051 4.47056 9 4.5 9L4.51426 9C4.55491 9 4.59145 8.97529 4.60702 8.93775C4.62261 8.90017 4.61423 8.85687 4.58546 8.82811L4.57538 8.81802C4.55456 8.7972 4.53419 8.77611 4.51426 8.75476L4.5 8.73935C4.07934 8.281 3.86073 7.70375 3.84417 7.12182C3.84346 7.09709 3.84312 7.07234 3.84315 7.0476C3.84382 6.40868 4.0879 5.76997 4.57538 5.28249L5.28249 4.57538C5.76997 4.0879 6.40868 3.84382 7.0476 3.84315C7.07234 3.84312 7.09709 3.84346 7.12182 3.84417C7.70375 3.86073 8.281 4.07934 8.73934 4.5L8.75476 4.51426C8.77611 4.53419 8.7972 4.55456 8.81802 4.57538L8.8281 4.58546C8.85687 4.61423 8.90017 4.62261 8.93775 4.60702C8.97529 4.59145 9 4.55491 9 4.51426L9 4.5C9 4.47056 9.00051 4.44124 9.00152 4.41205L9.00233 4.39107C9.02898 3.76953 9.28257 3.20678 9.68233 2.78358C9.69933 2.76559 9.71659 2.74784 9.73411 2.73036C10.1864 2.27905 10.8106 2 11.5 2L12.5 2ZM11 19.5C11 19.7761 11.2239 20 11.5 20L12.5 20C12.7761 20 13 19.7761 13 19.5L13 19.4857C13 18.6262 13.5212 17.8669 14.2962 17.5455C15.0727 17.2235 15.9787 17.3929 16.5861 18.0003L16.5962 18.0104C16.7915 18.2057 17.108 18.2057 17.3033 18.0104L18.0104 17.3033C18.2057 17.108 18.2057 16.7915 18.0104 16.5962L18.0003 16.5861C17.3929 15.9787 17.2235 15.0727 17.5455 14.2961C17.8669 13.5212 18.6262 13 19.4857 13L19.5 13C19.7761 13 20 12.7761 20 12.5L20 11.5C20 11.2239 19.7761 11 19.5 11L19.4857 11C18.6262 11 17.8669 10.4788 17.5455 9.70385C17.2235 8.92727 17.3929 8.02132 18.0003 7.41389L18.0104 7.40381C18.2057 7.20854 18.2057 6.89196 18.0104 6.6967L17.3033 5.98959C17.108 5.79433 16.7915 5.79433 16.5962 5.98959L16.5861 5.99968C15.9787 6.60711 15.0727 6.77651 14.2962 6.45448C13.5212 6.13311 13 5.37381 13 4.51426L13 4.5C13 4.22386 12.7761 4 12.5 4L11.5 4C11.2239 4 11 4.22386 11 4.5L11 4.51426C11 5.37381 10.4788 6.13311 9.70384 6.45448C8.92725 6.77651 8.02132 6.60711 7.41389 5.99968L7.40381 5.98959C7.20854 5.79433 6.89196 5.79433 6.6967 5.98959L5.98959 6.6967C5.79433 6.89196 5.79433 7.20854 5.98959 7.40381L5.99967 7.41389C6.60711 8.02132 6.77651 8.92727 6.45448 9.70385C6.13311 10.4788 5.37382 11 4.51426 11L4.5 11C4.22386 11 4 11.2239 4 11.5L4 12.5C4 12.7761 4.22386 13 4.5 13L4.51426 13C5.37382 13 6.13311 13.5212 6.45447 14.2961C6.77651 15.0727 6.60711 15.9787 5.99968 16.5861L5.98959 16.5962C5.79433 16.7915 5.79433 17.108 5.98959 17.3033L6.6967 18.0104C6.89196 18.2057 7.20854 18.2057 7.4038 18.0104L7.41389 18.0003C8.02132 17.3929 8.92726 17.2235 9.70384 17.5455C10.4788 17.8669 11 18.6262 11 19.4857L11 19.5Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M12 14C13.1046 14 14 13.1046 14 12C14 10.8954 13.1046 10 12 10C10.8954 10 10 10.8954 10 12C10 13.1046 10.8954 14 12 14ZM12 16C14.2091 16 16 14.2091 16 12C16 9.79086 14.2091 8 12 8C9.79086 8 8 9.79086 8 12C8 14.2091 9.79086 16 12 16Z"></path></svg><span class="hidden text-sm font-semibold leading-6 text-gray-800">Settings</span></button></div></div><div class="container relative mx-auto h-full flex-col hidden home-screen"><div class="m-8 flex flex-wrap justify-center gap-4 pt-12"><picture class="pointer-events-none absolute inset-8 z-0 size-[calc(100%-32px)] object-contain"><source srcSet="./assets/home-bg-BRYzhkhi.avif" type="image/avif"/><img src="./assets/home-bg-BEhF9NuW.png" alt="background" class="object-contain"/></picture></div></div><script>
|
|
76
76
|
const baseEl = document.querySelector('base');
|
|
77
77
|
const href = baseEl?.getAttribute('href');
|
|
78
78
|
const basePath = href || '/';
|
package/dist/vite-envs.sh
CHANGED
|
@@ -11,7 +11,7 @@ replaceAll() {
|
|
|
11
11
|
}'
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
html=$(echo "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPjxoZWFkPjxtZXRhIGNoYXJzZXQ9IlVURi04Ij48bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSI+PG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNvbm5lY3QgaXMgYSBodWIgZm9yIHlvdXIgbW9zdCBpbXBvcnRhbnQgZG9jdW1lbnRzIGFuZCBwcm9jZXNzZXMsIHRyYW5zbGF0ZWQgaW50byBzb2Z0d2FyZS4gRWFzaWx5IGNhcHR1cmUgZGF0YSBpbiBhIHN0cnVjdHVyZWQgd2F5IHdpdGggZGVkaWNhdGVkIGJ1c2luZXNzIHByb2Nlc3MgcGFja2FnZXMuIENvbGxhYm9yYXRlIG9uIHNoYXJlZCBkb2N1bWVudHMgd2l0aCBlYXNlIHdoaWxlIHVzaW5nIHlvdXIgcHJlZmVycmVkIHN0b3JhZ2Ugc29sdXRpb24gKGRlY2VudHJhbGl6ZWQsIGNlbnRyYWxpemVkLCBvciBsb2NhbCkuIj48dGl0bGU+UG93ZXJob3VzZSBDb25uZWN0PC90aXRsZT48bGluayByZWw9Imljb24iIGhyZWY9Ii4vaWNvbi5pY28iPjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbSIgY3Jvc3NvcmlnaW49IiI+PGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2VzbS5zaCIgY3Jvc3NvcmlnaW49IiI+PCEtLSB2aXRlLWVudnMgc2NyaXB0IHBsYWNlaG9sZGVyIHhLc1BtTHMzMHN3S3NkSXNWeCAtLT48c2NyaXB0IHR5cGU9ImltcG9ydG1hcCI+ewogICJpbXBvcnRzIjogewogICAgInJlYWN0IjogImh0dHBzOi8vZXNtLnNoL3JlYWN0QDE4LjMuMSIsCiAgICAicmVhY3QvIjogImh0dHBzOi8vZXNtLnNoL3JlYWN0QDE4LjMuMS8iLAogICAgInJlYWN0LWRvbSI6ICJodHRwczovL2VzbS5zaC9yZWFjdC1kb21AMTguMy4xJmRlcHM9c2NoZWR1bGVyQDAuMjMuMiIsCiAgICAicmVhY3QtZG9tLyI6ICJodHRwczovL2VzbS5zaC9yZWFjdC1kb21AMTguMy4xJmRlcHM9c2NoZWR1bGVyQDAuMjMuMi8iCiAgfQp9PC9zY3JpcHQ+
|
|
14
|
+
html=$(echo "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPjxoZWFkPjxtZXRhIGNoYXJzZXQ9IlVURi04Ij48bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSI+PG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNvbm5lY3QgaXMgYSBodWIgZm9yIHlvdXIgbW9zdCBpbXBvcnRhbnQgZG9jdW1lbnRzIGFuZCBwcm9jZXNzZXMsIHRyYW5zbGF0ZWQgaW50byBzb2Z0d2FyZS4gRWFzaWx5IGNhcHR1cmUgZGF0YSBpbiBhIHN0cnVjdHVyZWQgd2F5IHdpdGggZGVkaWNhdGVkIGJ1c2luZXNzIHByb2Nlc3MgcGFja2FnZXMuIENvbGxhYm9yYXRlIG9uIHNoYXJlZCBkb2N1bWVudHMgd2l0aCBlYXNlIHdoaWxlIHVzaW5nIHlvdXIgcHJlZmVycmVkIHN0b3JhZ2Ugc29sdXRpb24gKGRlY2VudHJhbGl6ZWQsIGNlbnRyYWxpemVkLCBvciBsb2NhbCkuIj48dGl0bGU+UG93ZXJob3VzZSBDb25uZWN0PC90aXRsZT48bGluayByZWw9Imljb24iIGhyZWY9Ii4vaWNvbi5pY28iPjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbSIgY3Jvc3NvcmlnaW49IiI+PGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2VzbS5zaCIgY3Jvc3NvcmlnaW49IiI+PCEtLSB2aXRlLWVudnMgc2NyaXB0IHBsYWNlaG9sZGVyIHhLc1BtTHMzMHN3S3NkSXNWeCAtLT48c2NyaXB0IHR5cGU9ImltcG9ydG1hcCI+ewogICJpbXBvcnRzIjogewogICAgInJlYWN0IjogImh0dHBzOi8vZXNtLnNoL3JlYWN0QDE4LjMuMSIsCiAgICAicmVhY3QvIjogImh0dHBzOi8vZXNtLnNoL3JlYWN0QDE4LjMuMS8iLAogICAgInJlYWN0LWRvbSI6ICJodHRwczovL2VzbS5zaC9yZWFjdC1kb21AMTguMy4xJmRlcHM9c2NoZWR1bGVyQDAuMjMuMiIsCiAgICAicmVhY3QtZG9tLyI6ICJodHRwczovL2VzbS5zaC9yZWFjdC1kb21AMTguMy4xJmRlcHM9c2NoZWR1bGVyQDAuMjMuMi8iCiAgfQp9PC9zY3JpcHQ+PHNjcmlwdCBhc3luYz0iIiB0eXBlPSJtb2R1bGUiIGNyb3Nzb3JpZ2luPSIiIHNyYz0iLi9hc3NldHMvbWFpbi5DLXo3cTRDdi5qcyI+PC9zY3JpcHQ+PGxpbmsgcmVsPSJtb2R1bGVwcmVsb2FkIiBjcm9zc29yaWdpbj0iIiBocmVmPSIuL2Fzc2V0cy9pbmRleC51NGxjdG4zSC5qcyI+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbj0iIiBocmVmPSIuL2Fzc2V0cy9tYWluLW1KeEZMNHBULmNzcyI+PC9oZWFkPjxib2R5PjxkaXYgaWQ9ImFwcCI+PC9kaXY+PC9ib2R5PjwvaHRtbD4=" | base64 -d)
|
|
15
15
|
|
|
16
16
|
BASE_URL_base64="eEFwV2RSclg5OWtQclZnZ0UiLi8iCg=="
|
|
17
17
|
BASE_URL=$(echo "Li8K" | base64 -d)
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerhousedao/connect",
|
|
3
3
|
"productName": "Powerhouse-Connect",
|
|
4
|
-
"version": "4.1.0-dev.
|
|
4
|
+
"version": "4.1.0-dev.19",
|
|
5
5
|
"description": "Powerhouse Connect",
|
|
6
6
|
"main": "./dist/index.html",
|
|
7
7
|
"type": "module",
|
|
@@ -88,15 +88,15 @@
|
|
|
88
88
|
"vite-plugin-svgr": "^4.3.0",
|
|
89
89
|
"vite-tsconfig-paths": "^5.1.4",
|
|
90
90
|
"xvfb-maybe": "^0.2.1",
|
|
91
|
-
"@powerhousedao/builder-tools": "4.1.0-dev.
|
|
92
|
-
"@powerhousedao/config": "4.1.0-dev.
|
|
93
|
-
"@powerhousedao/design-system": "4.1.0-dev.
|
|
94
|
-
"@powerhousedao/common": "4.1.0-dev.
|
|
95
|
-
"@powerhousedao/reactor-browser": "4.1.0-dev.
|
|
96
|
-
"@
|
|
97
|
-
"
|
|
98
|
-
"document-
|
|
99
|
-
"
|
|
91
|
+
"@powerhousedao/builder-tools": "4.1.0-dev.19",
|
|
92
|
+
"@powerhousedao/config": "4.1.0-dev.19",
|
|
93
|
+
"@powerhousedao/design-system": "4.1.0-dev.19",
|
|
94
|
+
"@powerhousedao/common": "4.1.0-dev.19",
|
|
95
|
+
"@powerhousedao/reactor-browser": "4.1.0-dev.19",
|
|
96
|
+
"@renown/sdk": "4.1.0-dev.19",
|
|
97
|
+
"@powerhousedao/state": "4.1.0-dev.19",
|
|
98
|
+
"document-drive": "4.1.0-dev.19",
|
|
99
|
+
"document-model": "4.1.0-dev.19"
|
|
100
100
|
},
|
|
101
101
|
"optionalDependencies": {
|
|
102
102
|
"@esbuild/linux-x64": "^0.21.4",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["openBrowserUrl","url","openUrl","_a","validateDocument","document","errors","doc","specs","initialStateErrors","acc","scopeKey","scope","validateInitialState","err","schemaStateErrors","isGlobalScope","validateStateSchemaName","modulesErrors","validateModules","themeAtom","atomWithStorageCallback","theme","loadBaseEditors","documentModelEditor","__vitePreload","getEditorsFromModules","modules","module","val","baseEditorsAtom","atomWithLazy","editorsAtom","atom","get","baseEditors","externalModules","externalPackagesAtom","unwrappedEditorsAtom","unwrap","loadableEditorsAtom","loadable","useUnwrappedEditors","useAtomValue","getEditor","documentType","editors","preferredEditorId","preferredEditor","e","useGetEditor","defaultDocumentModelEditor","useDefaultDocumentModelEditor","DriveContext","createContext","DriveContextProvider","value","children","_jsx","useDriveContext","context","useContext","getDocumentSpec","CreateDocument","documentModels","createDocument","_jsxs","spec","Button","GAP","ITEM_WIDTH","ITEM_HEIGHT","USED_SPACE","FileContentView","props","parentRef","useRef","t","useTranslation","windowSize","useWindowSize","fileNodes","availableWidth","columnCount","rowCount","rowVirtualizer","useVirtualizer","index","columnVirtualizer","getItemIndex","rowIndex","columnIndex","getItem","renderItem","fileNode","FileItem","virtualRow","React","virtualColumn","DriveLayout","className","containerProps","cn","title","FolderView","node","isAllowedToCreateDocuments","sharingType","getSyncStatusSync","setSelectedNode","onAddFile","onCopyNode","onMoveNode","onRenameNode","onDuplicateNode","onAddFolder","onAddAndSelectNewFolder","showDeleteNodeModal","folderNodes","useFolderChildNodesForId","useFileChildNodesForId","isDropTarget","dropProps","useDrop","twMerge","folderNode","FolderItem","defaultFilterItems","Icon","SearchBar","setValue","useState","ConnectSearchBar","BaseEditor","showSearchBar","showCreateDocumentModal","selectedDrive","useSelectedDrive","selectedFolder","useSelectedFolder","selectedDriveAsFolderNode","makeFolderNodeFromDrive","selectedNodePath","useSelectedNodePath","useSetSelectedNode","onCreateDocument","useCallback","documentModel","breadcrumbs","onBreadcrumbSelected","useBreadcrumbs","getDriveSharingType","Breadcrumbs","Editor","GenericDriveExplorer","useAnalyticsQueryWrapper","options","queryFn","queryOptions","store","useAnalyticsStoreAsync","engine","useAnalyticsEngineAsync","enabled","useQuery","DEBOUNCE_INTERVAL","useAnalyticsQuery","query","queryClient","useQueryClient","sources","result","useEffect","subscriptions","invalidateTimeout","debouncedInvalidate","path","unsub","getBarSize","addItemsDividers","items","item","currentDate","nextDate","currentHour","nextHour","currentDay","nextDay","metricsToItems","metrics","a","b","aDate","bDate","row","additions","deletions","startDate","useTimelineItems","documentId","startTimestamp","driveId","start","DateTime","AnalyticsGranularity","AnalyticsPath","getRevisionFromDate","endDate","operations","operation","operationDate","EditorLoader","showLoading","setShowLoading","customEditorLoader","defaultProps","jsx","Fragment","DefaultEditorLoader","EditorError","message","FallbackEditorError","DocumentEditor","onClose","onExport","onAddOperation","onOpenSwitchboardLink","selectedTimelineItem","setSelectedTimelineItem","revisionHistoryVisible","setRevisionHistoryVisible","user","useUser","connectDid","useConnectDid","sign","useConnectCrypto","getDocumentModelModule","useGetDocumentModelModule","useMemo","editor","_dispatch","error","useDocumentDispatch","userPermissions","useUserPermissions","timelineItems","dispatch","action","onErrorCallback","callback","state","prevState","signOperation","op","logger","addActionContext","showRevisionHistory","hideRevisionHistory","handleUndo","undo","handleRedo","redo","isLoadingEditor","canUndo","canRedo","useUndoRedoShortcuts","navigate","useNavigate","showModal","useModal","editorError","setEditorError","handleEditorError","info","jsxs","EditorComponent","disableExternalControls","documentToolbarEnabled","showSwitchboardLink","timelineEnabled","handleSwitchboardLinkClick","DocumentToolbar","RevisionHistory","Suspense","ErrorBoundary","DocumentEditorContainer","addDocumentOperations","useDocumentDriveServer","unwrappedSelectedDrive","selectedDocument","useSelectedDocument","parentFolderId","useParentFolderId","isRemoteDrive","useDriveIsRemote","remoteUrl","useDriveRemoteUrl","documentModelModule","exportDocument","validationErrors","closeModal","exportFile","buildDocumentSubgraphUrl","DriveEditorError","DriveEditorContainer","addDriveOperations","nodeActions","useNodeActions","driveDocumentModelModule","editorProps","useEditorProps","useShowDeleteNodeModal","addFile","addDocument","useFilteredDocumentModels","analyticsDatabaseName","connectConfig","driveContext","useDocumentEditorProps","driveEditor","useDriveEditor","DriveEditorComponent","useDocument","reactor","documentMeta","setDocument","onStrandUpdate","cb","strand","reducer","_b","buildSignedAction","debounceOperations","timeout","timer","oldOperation","resolve","reject","useAddDebouncedOperations","isAllowedToEditDocuments","addOperations","id","documentReducer","initialState","onError","setState","setError","onErrorHandler","_state","newState","nodeId","initialDocument","addDebouncedOperations","useDocumentEditor","useReactor","useEditorDispatch","documentDispatch","parentFolder","useParentFolder","selectedParentFolder","useSelectedParentFolder","addFolder","renameNode","copyNode","moveNode","file","parent","fileName","name","newName","src","target","newFolder","_extends","n","r","reservedModifierKeywords","mappedKeys","mapKey","key","isHotkeyModifier","parseKeysHookInput","keys","splitKey","parseHotkey","hotkey","combinationKey","description","k","modifiers","singleCharKeys","pushToCurrentlyPressedKeys","removeFromCurrentlyPressedKeys","currentlyPressedKeys","isReadonlyArray","isHotkeyPressed","hotkeyArray","maybePreventDefault","preventDefault","isHotkeyEnabled","isKeyboardEventTriggeredByInput","ev","isHotkeyEnabledOnTag","event","enabledOnTags","composed","targetTagName","isCustomElement","tag","_targetTagName","element","isScopeActive","activeScopes","scopes","isHotkeyMatchingKeyboardEvent","ignoreModifiers","alt","meta","mod","shift","ctrl","pressedKeyUppercase","code","ctrlKey","metaKey","shiftKey","altKey","keyCode","pressedKey","BoundHotkeysProxyProvider","useBoundHotkeysProxy","deepEqual","x","y","isEqual","HotkeysContext","useHotkeysContext","useDeepEqualMemo","ref","stopPropagation","useSafeLayoutEffect","useLayoutEffect","useHotkeys","dependencies","_useState","setRef","hasTriggeredRef","_options","_keys","_deps","memoisedCB","cbRef","memoisedOptions","_useHotkeysContext","enabledScopes","proxy","listener","isKeyUp","_e$target","rootNode","_hotkey$keys","handleKeyDown","handleKeyUp","domNode","isMac","undoShortcut","redoShortcut","Content","ContentContainer","HomeScreenContainer","pathname","useLocation","drives","useDrives","loadableSelectedDrive","useLoadableSelectedDrive","loadableSelectedFolder","useLoadableSelectedFolder","loadableSelectedDocument","useLoadableSelectedDocument","showAddDriveModal","useShowAddDriveModal","setSelectedDrive","useSetSelectedDrive","getAppDescriptionForEditorId","useGetAppNameForEditorId","config","useConnectConfig","handleDriveClick","drive","onAddDriveClick","isLoading","isError","hasSelectedDriveOrFolderOrDocument","HomeScreen","editorId","appName","HomeScreenItem","DriveIcon","HomeScreenAddDriveItem"],"ignoreList":[28],"sources":["../../src/utils/openUrl.ts","../../src/utils/validate-document.ts","../../src/store/theme.ts","../../src/store/editor.ts","../../../../packages/reactor-browser/dist/src/hooks/useDriveContext.js","../../../../packages/common/dist/editors/generic-drive-explorer/components/create-document.js","../../../../packages/common/dist/editors/generic-drive-explorer/components/file-content-view.js","../../../../packages/common/dist/editors/generic-drive-explorer/components/layout.js","../../../../packages/common/dist/editors/generic-drive-explorer/components/folder-view.js","../../../../packages/common/dist/editors/generic-drive-explorer/components/search-bar.js","../../../../packages/common/dist/editors/generic-drive-explorer/editor.js","../../../../packages/common/dist/editors/generic-drive-explorer/index.js","../../../../packages/reactor-browser/dist/src/analytics/hooks.js","../../../../packages/common/dist/hooks/useTimelineItems.js","../../../../packages/common/dist/utils/index.js","../../src/components/editor-loader.tsx","../../src/components/editors.tsx","../../src/components/document-editor-container.tsx","../../src/components/drive-editor-container.tsx","../../../../packages/reactor-browser/dist/src/hooks/useUserPermissions.js","../../../../packages/reactor-browser/dist/src/hooks/useDocument.js","../../../../packages/reactor-browser/dist/src/utils/signature.js","../../../../packages/reactor-browser/dist/src/hooks/useAddDebouncedOperations.js","../../../../packages/reactor-browser/dist/src/hooks/useDocumentDispatch.js","../../../../packages/reactor-browser/dist/src/hooks/useDocumentEditor.js","../../src/hooks/useDocumentEditor.ts","../../src/hooks/useEditorProps.tsx","../../src/hooks/useNodeActions.ts","../../../../node_modules/.pnpm/react-hotkeys-hook@4.6.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-hotkeys-hook/dist/react-hotkeys-hook.esm.js","../../src/hooks/useUndoRedoShortcuts.ts","../../src/pages/content.tsx"],"sourcesContent":["const openBrowserUrl = (url: string) => window.open(url, '_blank');\n\nexport const openUrl = window.electronAPI?.openURL ?? openBrowserUrl;\n","import {\n type DocumentModelDocument,\n type PHDocument,\n validateInitialState,\n validateModules,\n validateStateSchemaName,\n type ValidationError,\n} from 'document-model';\nexport const validateDocument = (document: PHDocument) => {\n const errors: ValidationError[] = [];\n\n if (document.header.documentType !== 'powerhouse/document-model') {\n return errors;\n }\n\n const doc = document as DocumentModelDocument;\n const specs = doc.state.global.specifications[0];\n\n // validate initial state errors\n const initialStateErrors = Object.keys(specs.state).reduce<\n ValidationError[]\n >((acc, scopeKey) => {\n const scope = scopeKey as keyof typeof specs.state;\n\n return [\n ...acc,\n ...validateInitialState(\n specs.state[scope].initialValue,\n scope !== 'global',\n ).map(err => ({\n ...err,\n message: `${err.message}. Scope: ${scope}`,\n details: { ...err.details, scope },\n })),\n ];\n }, []);\n\n // validate schema state errors\n const schemaStateErrors = Object.keys(specs.state).reduce<\n ValidationError[]\n >((acc, scopeKey) => {\n const scope = scopeKey as keyof typeof specs.state;\n const isGlobalScope = scope === 'global';\n\n return [\n ...acc,\n ...validateStateSchemaName(\n specs.state[scope].schema,\n doc.header.name || doc.state.global?.name || '',\n !isGlobalScope ? scope : '',\n !isGlobalScope,\n ).map(err => ({\n ...err,\n message: `${err.message}. Scope: ${scope}`,\n details: { ...err.details, scope },\n })),\n ];\n }, []);\n\n // modules validation\n const modulesErrors = validateModules(specs.modules);\n\n return [...initialStateErrors, ...schemaStateErrors, ...modulesErrors];\n};\n","import { useAtomValue } from 'jotai';\nimport { atomWithStorageCallback } from './utils.js';\n\nconst THEMES = ['light', 'dark'] as const;\n\nexport type Theme = (typeof THEMES)[number];\n\nexport const themeAtom = atomWithStorageCallback<Theme>(\n 'theme',\n 'light',\n theme => {\n if (typeof window !== 'undefined') {\n window.electronAPI?.setTheme(theme);\n }\n },\n);\n\nexport const useTheme = () => useAtomValue(themeAtom);\n\nexport function isTheme(theme: string): theme is Theme {\n return THEMES.includes(theme as Theme);\n}\n","import { useDefaultDocumentModelEditor } from '#hooks';\nimport { type DocumentModelLib, type EditorModule } from 'document-model';\nimport { atom, useAtomValue } from 'jotai';\nimport { atomWithLazy, loadable, unwrap } from 'jotai/utils';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { externalPackagesAtom } from './external-packages.js';\n\nasync function loadBaseEditors() {\n const documentModelEditor = await import(\n '@powerhousedao/builder-tools/document-model-editor'\n );\n await import('@powerhousedao/builder-tools/style.css');\n\n const baseEditors = [\n documentModelEditor.documentModelEditorModule,\n ] as EditorModule[];\n\n return baseEditors;\n}\n\nfunction getEditorsFromModules(modules: DocumentModelLib[]) {\n return modules\n .map(module => module.editors)\n .reduce((acc, val) => acc.concat(val), []);\n}\n\nconst baseEditorsAtom = atomWithLazy(loadBaseEditors);\nbaseEditorsAtom.debugLabel = 'baseEditorsAtomInConnect';\nexport const editorsAtom = atom(async get => {\n const baseEditors = await get(baseEditorsAtom);\n const externalModules = await get(externalPackagesAtom);\n const externalEditors = getEditorsFromModules(externalModules);\n\n return externalEditors.concat(baseEditors);\n});\neditorsAtom.debugLabel = 'editorsAtomInConnect';\n\nconst unwrappedEditorsAtom = unwrap(editorsAtom);\nunwrappedEditorsAtom.debugLabel = 'unwrappedEditorsAtomInConnect';\nconst loadableEditorsAtom = loadable(editorsAtom);\nloadableEditorsAtom.debugLabel = 'loadableEditorsAtomInConnect';\n\n// suspends the UI while editors are loading\nexport const useEditors = () => {\n return useAtomValue(editorsAtom);\n};\n\n// will return undefined until editors are initialized. Does not block rendering.\nexport const useUnwrappedEditors = () => {\n return useAtomValue(unwrappedEditorsAtom);\n};\n\n// returns state, data and error, which will cause a rerender when the editors are loaded. Does not suspend the UI\nexport const useLoadableEditors = () => {\n return useAtomValue(loadableEditorsAtom);\n};\n\nexport const useEditorsAsync = () => {\n const editorsPromise = useRef(\n (() => {\n let resolveFn!: (value: EditorModule[]) => void;\n let rejectFn!: (reason?: any) => void;\n\n const promise = new Promise<EditorModule[]>((resolve, reject) => {\n resolveFn = resolve;\n rejectFn = reject;\n });\n\n return { promise, resolve: resolveFn, reject: rejectFn };\n })(),\n );\n\n const editors = useLoadableEditors();\n\n useEffect(() => {\n if (editors.state === 'hasError') {\n editorsPromise.current.reject(editors.error);\n } else if (editors.state === 'hasData') {\n editorsPromise.current.resolve(editors.data);\n }\n }, [editors]);\n return editorsPromise.current.promise;\n};\n\nconst getEditor = (\n documentType: string | undefined,\n editors: EditorModule[],\n preferredEditorId?: string,\n) => {\n if (!documentType) return null;\n const preferredEditor = editors.find(\n e =>\n e.config.id === preferredEditorId &&\n e.documentTypes.includes(documentType),\n );\n\n if (preferredEditor) return preferredEditor;\n\n const editor =\n editors.find(e => e.documentTypes.includes(documentType)) ||\n editors.find(e => e.documentTypes.includes('*'));\n\n return editor || null;\n};\n\nexport const useEditor = (documentType: string) => {\n const editors = useUnwrappedEditors();\n if (!editors) {\n return undefined;\n }\n return getEditor(documentType, editors);\n};\n\nexport const useGetEditor = () => {\n const editors = useUnwrappedEditors();\n const [defaultDocumentModelEditor] = useDefaultDocumentModelEditor();\n\n return (documentType: string | undefined) =>\n editors\n ? getEditor(documentType, editors, defaultDocumentModelEditor.value)\n : undefined;\n};\n\nexport const usePreloadEditor = () => {\n const editorsPromise = useEditorsAsync();\n return useCallback(\n async (documentType: string) => {\n const editors = await editorsPromise;\n const editor = getEditor(documentType, editors);\n if (editor && 'preload' in editor.Component) {\n console.log(\n `Preloading editor for document '${documentType}': ${editor.config.id}`,\n );\n await (\n editor.Component as { preload: () => Promise<void> }\n ).preload();\n }\n },\n [editorsPromise],\n );\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useContext } from \"react\";\nconst DriveContext = createContext(undefined);\nexport const DriveContextProvider = ({ value, children }) => (_jsx(DriveContext.Provider, { value: value, children: children }));\n/**\n * Hook to access the drive context values provided by the host application.\n * Must be used within a DriveContextProvider component.\n *\n * @returns IDriveContext - Object containing drive-related values and functions\n *\n * @example\n * const {\n * showSearchBar,\n * documentModels,\n * selectedNode,\n * addFile\n * } = useDriveContext();\n */\nexport function useDriveContext() {\n const context = useContext(DriveContext);\n if (!context) {\n throw new Error(\"useDriveContext must be used within a DriveContextProvider\");\n }\n return context;\n}\n//# sourceMappingURL=useDriveContext.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button } from \"@powerhousedao/design-system\";\nfunction getDocumentSpec(doc) {\n if (\"documentModelState\" in doc) {\n return doc.documentModelState;\n }\n return doc.documentModel;\n}\nexport const CreateDocument = ({ documentModels, createDocument, }) => {\n return (_jsxs(\"div\", { className: \"px-6\", children: [_jsx(\"h3\", { className: \"mb-3 mt-4 text-xl font-bold text-gray-600\", children: \"New document\" }), _jsx(\"div\", { className: \"flex w-full flex-wrap gap-4\", children: documentModels?.map((doc) => {\n const spec = getDocumentSpec(doc);\n return (_jsx(Button, { color: \"light\", title: spec.name, \"aria-description\": spec.description, onClick: () => createDocument(doc), children: _jsx(\"span\", { className: \"text-sm\", children: spec.name }) }, spec.id));\n }) })] }));\n};\n//# sourceMappingURL=create-document.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { FileItem, useWindowSize, } from \"@powerhousedao/design-system\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport React, { useRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nconst GAP = 8;\nconst ITEM_WIDTH = 256;\nconst ITEM_HEIGHT = 48;\nconst USED_SPACE = 420;\nexport function FileContentView(props) {\n const parentRef = useRef(null);\n const { t } = useTranslation();\n const windowSize = useWindowSize();\n const { fileNodes } = props;\n const availableWidth = windowSize.innerWidth - USED_SPACE;\n const columnCount = Math.floor(availableWidth / (ITEM_WIDTH + GAP)) || 1;\n const rowCount = Math.ceil(fileNodes.length / columnCount);\n const rowVirtualizer = useVirtualizer({\n count: rowCount,\n getScrollElement: () => parentRef.current,\n estimateSize: (index) => {\n if (index > 0) {\n return ITEM_HEIGHT + GAP;\n }\n return ITEM_HEIGHT;\n },\n overscan: 5,\n });\n const columnVirtualizer = useVirtualizer({\n horizontal: true,\n count: columnCount,\n getScrollElement: () => parentRef.current,\n estimateSize: (index) => {\n if (index > 0) {\n return ITEM_WIDTH + GAP;\n }\n return ITEM_WIDTH;\n },\n overscan: 5,\n });\n const getItemIndex = (rowIndex, columnIndex) => rowIndex * columnCount + columnIndex;\n const getItem = (rowIndex, columnIndex) => {\n const index = getItemIndex(rowIndex, columnIndex);\n return fileNodes[index] || null;\n };\n if (fileNodes.length === 0) {\n return (_jsx(\"div\", { className: \"mb-8 text-sm text-gray-400\", children: t(\"folderView.sections.documents.empty\", {\n defaultValue: \"No documents or files 📄\",\n }) }));\n }\n const renderItem = (rowIndex, columnIndex) => {\n const fileNode = getItem(rowIndex, columnIndex);\n if (!fileNode) {\n return null;\n }\n return (_jsx(\"div\", { style: {\n marginLeft: columnIndex === 0 ? 0 : GAP,\n }, children: _jsx(FileItem, { fileNode: fileNode, ...props }, fileNode.id) }));\n };\n return (_jsx(\"div\", { ref: parentRef, style: {\n height: `400px`,\n width: `100%`,\n overflow: \"auto\",\n }, children: _jsx(\"div\", { style: {\n height: `${rowVirtualizer.getTotalSize()}px`,\n width: `${columnVirtualizer.getTotalSize()}px`,\n position: \"relative\",\n }, children: rowVirtualizer.getVirtualItems().map((virtualRow) => (_jsx(React.Fragment, { children: columnVirtualizer.getVirtualItems().map((virtualColumn) => (_jsx(\"div\", { style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n marginTop: virtualRow.index === 0 ? 0 : GAP,\n width: `${virtualColumn.size}px`,\n height: `${virtualRow.size}px`,\n transform: `translateX(${virtualColumn.start}px) translateY(${virtualRow.start}px)`,\n }, children: renderItem(virtualRow.index, virtualColumn.index) }, virtualColumn.key))) }, virtualRow.key))) }) }));\n}\nexport default FileContentView;\n//# sourceMappingURL=file-content-view.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { cn } from \"@powerhousedao/design-system\";\nexport function DriveLayout({ children, className, ...props }) {\n return (_jsx(DriveLayout.Container, { className: className, ...props, children: children }));\n}\nDriveLayout.Container = function DriveLayoutContainer({ children, className, containerProps, ...props }) {\n return (_jsx(\"div\", { className: cn(\"flex grow flex-col overflow-auto rounded-2xl bg-gray-50 p-2\", className), ...containerProps, ...props, children: children }));\n};\nDriveLayout.Header = function DriveLayoutHeader({ children, className, containerProps, ...props }) {\n return (_jsx(\"div\", { className: cn(\"flex-0\", className), ...containerProps, ...props, children: children }));\n};\nDriveLayout.Content = function DriveLayoutContent({ children, className, containerProps, ...props }) {\n return (_jsx(\"div\", { className: cn(\"mb-5 flex-1 px-4\", className), ...containerProps, ...props, children: children }));\n};\nDriveLayout.ContentSection = function DriveLayoutContentSection({ title, children, className, containerProps, ...props }) {\n return (_jsxs(\"div\", { className: cn(className), ...containerProps, ...props, children: [title && (_jsx(\"div\", { className: \"mb-4 text-base font-semibold text-gray-600\", children: title })), _jsx(\"div\", { className: \"flex flex-wrap gap-2\", children: children })] }));\n};\nDriveLayout.Footer = function DriveLayoutFooter({ children, className, containerProps, ...props }) {\n return (_jsx(\"div\", { className: cn(\"flex-0\", className), ...containerProps, ...props, children: children }));\n};\n//# sourceMappingURL=layout.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { FolderItem, useDrop, } from \"@powerhousedao/design-system\";\nimport { useFileChildNodesForId, useFolderChildNodesForId, } from \"@powerhousedao/state\";\nimport { useTranslation } from \"react-i18next\";\nimport { twMerge } from \"tailwind-merge\";\nimport FileContentView from \"./file-content-view.js\";\nimport { DriveLayout } from \"./layout.js\";\nexport function FolderView(props) {\n const { node, isAllowedToCreateDocuments, className, containerProps, sharingType, getSyncStatusSync, setSelectedNode, onAddFile, onCopyNode, onMoveNode, onRenameNode, onDuplicateNode, onAddFolder, onAddAndSelectNewFolder, showDeleteNodeModal, } = props;\n const { t } = useTranslation();\n const folderNodes = useFolderChildNodesForId(node?.id);\n const fileNodes = useFileChildNodesForId(node?.id);\n const { isDropTarget, dropProps } = useDrop({\n node,\n onAddFile,\n onCopyNode,\n onMoveNode,\n });\n return (_jsxs(\"div\", { className: twMerge(\"rounded-md border-2 border-transparent p-2\", isDropTarget && \"border-dashed border-blue-100\", className), ...containerProps, ...dropProps, children: [_jsx(DriveLayout.ContentSection, { title: t(\"folderView.sections.folders.title\", {\n defaultValue: \"Folders\",\n }), className: \"mb-4\", children: folderNodes.length > 0 ? (folderNodes.map((folderNode) => (_jsx(FolderItem, { folderNode: folderNode, isAllowedToCreateDocuments: isAllowedToCreateDocuments, sharingType: sharingType, getSyncStatusSync: getSyncStatusSync, setSelectedNode: setSelectedNode, onAddFile: onAddFile, onCopyNode: onCopyNode, onMoveNode: onMoveNode, onRenameNode: onRenameNode, onDuplicateNode: onDuplicateNode, onAddFolder: onAddFolder, onAddAndSelectNewFolder: onAddAndSelectNewFolder, showDeleteNodeModal: showDeleteNodeModal }, folderNode.id)))) : (_jsx(\"div\", { className: \"mb-8 text-sm text-gray-400\", children: t(\"folderView.sections.folders.empty\", {\n defaultValue: \"No documents or files 📄\",\n }) })) }), _jsx(DriveLayout.ContentSection, { title: t(\"folderView.sections.documents.title\", {\n defaultValue: \"Documents and files\",\n }), children: _jsx(\"div\", { className: twMerge(\"w-full\", fileNodes.length > 0 ? \"min-h-[400px]\" : \"min-h-14\"), children: _jsx(FileContentView, { fileNodes: fileNodes, isAllowedToCreateDocuments: isAllowedToCreateDocuments, sharingType: sharingType, getSyncStatusSync: getSyncStatusSync, setSelectedNode: setSelectedNode, showDeleteNodeModal: showDeleteNodeModal, onAddFile: onAddFile, onCopyNode: onCopyNode, onMoveNode: onMoveNode, onRenameNode: onRenameNode, onDuplicateNode: onDuplicateNode, onAddFolder: onAddFolder, onAddAndSelectNewFolder: onAddAndSelectNewFolder }) }) })] }));\n}\nexport default FolderView;\n//# sourceMappingURL=folder-view.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { ConnectSearchBar, Icon, } from \"@powerhousedao/design-system\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nconst defaultFilterItems = [\n {\n id: \"project\",\n label: \".project\",\n icon: _jsx(Icon, { name: \"Project\", color: \"#FF6A55\", size: 16 }),\n },\n {\n id: \"budget\",\n label: \".budget\",\n icon: _jsx(Icon, { name: \"BarChart\", color: \"#8E55EA\", size: 16 }),\n },\n {\n id: \"profile\",\n label: \".profile\",\n icon: _jsx(Icon, { name: \"Person\", color: \"#3E90F0\", size: 16 }),\n },\n {\n id: \"legal\",\n label: \".legal\",\n icon: _jsx(Icon, { name: \"Briefcase\", color: \"#4BAB71\", size: 16 }),\n },\n {\n id: \"atlas\",\n label: \".Atlas\",\n icon: _jsx(Icon, { name: \"Globe\", color: \"#FF8A00\", size: 16 }),\n },\n];\nexport const SearchBar = () => {\n const { t } = useTranslation();\n const [value, setValue] = useState(\"\"); // TODO\n return (_jsx(ConnectSearchBar, { className: \"max-w-searchbar-width m-4 shrink-0 bg-gray-100\", placeholder: t(\"searchbar.placeholder\"), filterLabel: t(\"searchbar.filterLabel\"), filterItems: defaultFilterItems, value: value, onChange: setValue }));\n};\n//# sourceMappingURL=search-bar.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Breadcrumbs, useBreadcrumbs, useDrop, } from \"@powerhousedao/design-system\";\nimport { DriveContextProvider, useDriveContext, } from \"@powerhousedao/reactor-browser/hooks/useDriveContext\";\nimport { getDriveSharingType, makeFolderNodeFromDrive, useSelectedDrive, useSelectedFolder, useSelectedNodePath, useSetSelectedNode, } from \"@powerhousedao/state\";\nimport { useCallback } from \"react\";\nimport { CreateDocument } from \"./components/create-document.js\";\nimport FolderView from \"./components/folder-view.js\";\nimport { DriveLayout } from \"./components/layout.js\";\nimport { SearchBar } from \"./components/search-bar.js\";\nexport function BaseEditor(props) {\n const { document, className, children } = props;\n const { showSearchBar, isAllowedToCreateDocuments, documentModels, getSyncStatusSync, showCreateDocumentModal, onRenameNode, onDuplicateNode, onAddFolder, onAddFile, onCopyNode, onMoveNode, onAddAndSelectNewFolder, showDeleteNodeModal, } = useDriveContext();\n const selectedDrive = useSelectedDrive();\n const selectedFolder = useSelectedFolder();\n const selectedDriveAsFolderNode = makeFolderNodeFromDrive(selectedDrive);\n const selectedNodePath = useSelectedNodePath();\n const setSelectedNode = useSetSelectedNode();\n const onCreateDocument = useCallback((documentModel) => {\n showCreateDocumentModal(documentModel);\n }, [showCreateDocumentModal]);\n const { isDropTarget, dropProps } = useDrop({\n node: selectedDriveAsFolderNode,\n onAddFile,\n onCopyNode,\n onMoveNode,\n });\n const { breadcrumbs, onBreadcrumbSelected } = useBreadcrumbs({\n selectedNodePath,\n setSelectedNode,\n });\n const sharingType = getDriveSharingType(document);\n if (!selectedDrive) {\n return _jsx(\"div\", { children: \"Drive not found\" });\n }\n return (_jsxs(DriveLayout, { className: className, children: [children, _jsxs(DriveLayout.Header, { children: [_jsx(Breadcrumbs, { breadcrumbs: breadcrumbs, createEnabled: isAllowedToCreateDocuments, onCreate: onAddAndSelectNewFolder, onBreadcrumbSelected: onBreadcrumbSelected }), showSearchBar && _jsx(SearchBar, {})] }), _jsx(DriveLayout.Content, { ...dropProps, className: isDropTarget ? \"rounded-xl bg-blue-100\" : \"\", children: _jsx(FolderView, { node: selectedFolder ?? selectedDriveAsFolderNode, sharingType: sharingType, getSyncStatusSync: getSyncStatusSync, setSelectedNode: setSelectedNode, onRenameNode: onRenameNode, onDuplicateNode: onDuplicateNode, onAddFolder: onAddFolder, onAddFile: onAddFile, onCopyNode: onCopyNode, onMoveNode: onMoveNode, onAddAndSelectNewFolder: onAddAndSelectNewFolder, showDeleteNodeModal: showDeleteNodeModal, isAllowedToCreateDocuments: isAllowedToCreateDocuments }) }), _jsx(DriveLayout.Footer, { children: isAllowedToCreateDocuments && (_jsx(CreateDocument, { documentModels: documentModels, createDocument: onCreateDocument })) })] }));\n}\nexport default function Editor(props) {\n return (_jsx(DriveContextProvider, { value: props.context, children: _jsx(BaseEditor, { ...props }) }));\n}\n//# sourceMappingURL=editor.js.map","import Editor from \"./editor.js\";\nexport const GenericDriveExplorer = {\n Component: Editor,\n documentTypes: [\"powerhouse/document-drive\"],\n config: {\n id: \"GenericDriveExplorer\",\n disableExternalControls: true,\n documentToolbarEnabled: true,\n showSwitchboardLink: true,\n },\n};\n//# sourceMappingURL=index.js.map","import { AnalyticsPath, } from \"@powerhousedao/analytics-engine-core\";\nimport { useMutation, useQuery, useQueryClient, } from \"@tanstack/react-query\";\nimport { useEffect } from \"react\";\nimport { getAnalyticsStore, useAnalyticsEngineAsync, useAnalyticsStoreAsync, useAnalyticsStoreOptions, } from \"./context.js\";\nfunction useAnalyticsQueryWrapper(options) {\n const { queryFn, ...queryOptions } = options;\n const { data: store } = useAnalyticsStoreAsync();\n const { data: engine } = useAnalyticsEngineAsync();\n const enabled = \"enabled\" in queryOptions ? queryOptions.enabled : !!store && !!engine;\n return useQuery({\n ...queryOptions,\n enabled,\n queryFn: async () => {\n if (!store || !engine) {\n throw new Error(\"No analytics store available. Use within an AnalyticsProvider.\");\n }\n return await queryFn({ store, engine });\n },\n });\n}\nfunction useAnalyticsMutationWrapper(options) {\n const { mutationFn, ...mutationOptions } = options;\n const storeOptions = useAnalyticsStoreOptions();\n return useMutation({\n ...mutationOptions,\n mutationFn: async (value) => {\n let store = null;\n try {\n store = await getAnalyticsStore(storeOptions);\n }\n catch (e) {\n console.error(e);\n }\n if (!store) {\n throw new Error(\"No analytics store available. Use within an AnalyticsProvider.\");\n }\n return await mutationFn(value, { store });\n },\n });\n}\nconst DEBOUNCE_INTERVAL = 200;\nexport function useAnalyticsQuery(query, options) {\n const { data: store } = useAnalyticsStoreAsync();\n const queryClient = useQueryClient();\n const sources = options?.sources ?? [];\n const result = useAnalyticsQueryWrapper({\n queryKey: [\"analytics\", \"query\", query],\n queryFn: ({ engine }) => engine.execute(query),\n ...options,\n });\n useEffect(() => {\n if (!sources.length || !store) {\n return;\n }\n const subscriptions = new Array();\n // Debounce invalidateQueries so it's not called too frequently\n let invalidateTimeout = null;\n const debouncedInvalidate = () => {\n if (invalidateTimeout)\n clearTimeout(invalidateTimeout);\n invalidateTimeout = setTimeout(() => {\n queryClient\n .invalidateQueries({\n queryKey: [\"analytics\", \"query\", query],\n })\n .catch((e) => {\n console.error(e);\n });\n }, DEBOUNCE_INTERVAL);\n };\n sources.forEach((path) => {\n const unsub = store.subscribeToSource(path, debouncedInvalidate);\n subscriptions.push(unsub);\n });\n // Unsubscribes from store when component unmounts or dependencies change\n return () => {\n subscriptions.forEach((unsub) => unsub());\n };\n }, [query, store, sources]);\n return result;\n}\nexport function useAnalyticsSeries(query, options) {\n return useAnalyticsQueryWrapper({\n queryKey: [\"analytics\", \"series\", query],\n queryFn: ({ store }) => store.getMatchingSeries(query),\n ...options,\n });\n}\nexport function useAddSeriesValue(options) {\n return useAnalyticsMutationWrapper({\n mutationKey: [\"analytics\", \"addSeries\"],\n mutationFn: async (value, { store }) => {\n return await store.addSeriesValue(value);\n },\n ...options,\n });\n}\nexport function useClearSeriesBySource(options) {\n return useAnalyticsMutationWrapper({\n mutationKey: [\"analytics\", \"clearSeries\"],\n mutationFn: async ({ source, cleanUpDimensions }, { store }) => {\n return store.clearSeriesBySource(source, cleanUpDimensions);\n },\n ...options,\n });\n}\nexport function useClearEmptyAnalyticsDimensions(options) {\n return useAnalyticsMutationWrapper({\n mutationKey: [\"analytics\", \"clearEmptyDimensions\"],\n mutationFn: async (_, { store }) => {\n return store.clearEmptyAnalyticsDimensions();\n },\n ...options,\n });\n}\nexport function useAddSeriesValues(options) {\n return useAnalyticsMutationWrapper({\n mutationKey: [\"analytics\", \"addSeriesValues\"],\n mutationFn: async (values, { store }) => {\n return store.addSeriesValues(values);\n },\n ...options,\n });\n}\nexport function useGetDimensions(options) {\n return useAnalyticsQueryWrapper({\n queryKey: [\"analytics\", \"dimensions\"],\n queryFn: ({ store }) => store.getDimensions(),\n ...options,\n });\n}\nexport function useMatchingSeries(query, options) {\n const result = useAnalyticsQueryWrapper({\n queryKey: [\"analytics\", \"matchingSeries\", query],\n queryFn: ({ store }) => store.getMatchingSeries(query),\n ...options,\n });\n return result;\n}\nexport function useQuerySources(query, options) {\n const { data: matchingSeries } = useMatchingSeries(query);\n return useQuery({\n queryKey: [\"analytics\", \"sources\", query],\n queryFn: () => {\n if (!matchingSeries?.length) {\n return [];\n }\n const uniqueSources = [\n ...new Set(matchingSeries.map((s) => s.source.toString())),\n ];\n return uniqueSources.map((source) => AnalyticsPath.fromString(source));\n },\n enabled: !!matchingSeries,\n ...options,\n });\n}\n//# sourceMappingURL=hooks.js.map","import { AnalyticsGranularity, AnalyticsPath, DateTime, useAnalyticsQuery, } from \"@powerhousedao/reactor-browser/analytics\";\nconst getBarSize = (value) => {\n if (value <= 0)\n return 0;\n if (value > 0 && value <= 50)\n return 1;\n if (value > 50 && value <= 100)\n return 2;\n if (value > 100 && value <= 250)\n return 3;\n return 4;\n};\nfunction addItemsDividers(items) {\n if (!items.length)\n return [];\n const result = [];\n items.forEach((item, index) => {\n result.push(item);\n // Check if there's a next item and if they're not in consecutive hours\n if (index < items.length - 1) {\n const currentDate = new Date(item.startDate);\n const nextDate = new Date(items[index + 1].startDate);\n const currentHour = currentDate.getHours();\n const nextHour = nextDate.getHours();\n // Get day parts (without time) for comparison\n const currentDay = currentDate.toDateString();\n const nextDay = nextDate.toDateString();\n // If different days or non-consecutive hours on the same day\n if (currentDay !== nextDay ||\n (currentDay === nextDay && Math.abs(nextHour - currentHour) > 1)) {\n result.push({\n id: `divider-${item.id}-${items[index + 1].id}`,\n type: \"divider\",\n revision: 0,\n });\n }\n }\n });\n return result;\n}\nfunction metricsToItems(metrics) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!metrics)\n return [];\n const items = metrics\n .sort((a, b) => {\n const aDate = new Date(a.start);\n const bDate = new Date(b.start);\n return aDate.getTime() - bDate.getTime();\n })\n .filter((result) => {\n return result.rows.every((row) => row.value > 0);\n })\n .map((result) => {\n const { additions, deletions } = result.rows.reduce((acc, row) => {\n if (row.dimensions.changes.path ===\n \"ph/diff/changes/add\") {\n acc.additions += row.value;\n }\n else if (row.dimensions.changes.path ===\n \"ph/diff/changes/remove\") {\n acc.deletions += row.value;\n }\n return acc;\n }, { additions: 0, deletions: 0 });\n const startDate = new Date(result.start);\n return {\n id: startDate.toISOString(),\n type: \"bar\",\n addSize: getBarSize(additions),\n delSize: getBarSize(deletions),\n additions,\n deletions,\n timestamp: startDate.toISOString(),\n startDate: startDate,\n endDate: new Date(result.end),\n revision: 0,\n };\n });\n return addItemsDividers(items);\n}\nexport const useTimelineItems = (documentId, startTimestamp, driveId) => {\n const start = startTimestamp\n ? DateTime.fromISO(startTimestamp)\n : DateTime.now().startOf(\"day\");\n return useAnalyticsQuery({\n start,\n end: DateTime.now().endOf(\"day\"),\n granularity: AnalyticsGranularity.Hourly,\n metrics: [\"Count\"],\n select: {\n changes: [AnalyticsPath.fromString(`ph/diff/changes`)],\n document: [AnalyticsPath.fromString(`ph/diff/document/${documentId}`)],\n },\n lod: {\n changes: 4,\n },\n }, {\n sources: [AnalyticsPath.fromString(`ph/diff/${driveId}/${documentId}`)],\n select: metricsToItems,\n });\n};\n//# sourceMappingURL=useTimelineItems.js.map","export const getRevisionFromDate = (startDate, endDate, operations = []) => {\n if (!startDate || !endDate)\n return 0;\n const operation = operations.find((operation) => {\n const operationDate = new Date(operation.timestamp);\n return operationDate >= startDate && operationDate <= endDate;\n });\n return operation ? operation.index : 0;\n};\n//# sourceMappingURL=index.js.map","import { DefaultEditorLoader } from '@powerhousedao/design-system';\nimport {\n type ComponentProps,\n type ReactNode,\n useEffect,\n useState,\n} from 'react';\n\ntype Props = ComponentProps<typeof DefaultEditorLoader> & {\n loadingTimeout?: number;\n customEditorLoader?: ReactNode;\n};\nexport function EditorLoader(props: Props) {\n const [showLoading, setShowLoading] = useState(false);\n\n // only shows the loader after some time has passed\n useEffect(() => {\n setTimeout(() => {\n setShowLoading(true);\n }, props.loadingTimeout ?? 200);\n }, [props]);\n\n if (!showLoading) return null;\n\n const { customEditorLoader, ...defaultProps } = props;\n\n if (customEditorLoader) return <>{customEditorLoader}</>;\n\n return <DefaultEditorLoader {...defaultProps} />;\n}\n","import {\n useConnectCrypto,\n useConnectDid,\n useUndoRedoShortcuts,\n useUserPermissions,\n} from '#hooks';\nimport {\n themeAtom,\n useGetDocumentModelModule,\n useGetEditor,\n useUser,\n} from '#store';\nimport {\n addActionContext,\n type DocumentDispatchCallback,\n signOperation,\n useDocumentDispatch,\n} from '#utils';\nimport { getRevisionFromDate, useTimelineItems } from '@powerhousedao/common';\nimport {\n Button,\n DocumentToolbar,\n RevisionHistory,\n type TimelineItem,\n} from '@powerhousedao/design-system';\nimport { logger } from 'document-drive';\nimport {\n type Action,\n type ActionErrorCallback,\n type EditorContext,\n type Operation,\n type PHDocument,\n redo,\n undo,\n} from 'document-model';\nimport { useAtomValue } from 'jotai';\nimport { Suspense, useCallback, useEffect, useMemo, useState } from 'react';\nimport { ErrorBoundary, type FallbackProps } from 'react-error-boundary';\nimport { useNavigate } from 'react-router-dom';\nimport { EditorLoader } from './editor-loader.js';\nimport { useModal } from './modal/index.js';\n\ntype Props<TDocument extends PHDocument = PHDocument> = {\n document: TDocument;\n onClose: () => void;\n onExport: () => void;\n onAddOperation: (operation: Operation) => Promise<void>;\n onOpenSwitchboardLink?: () => Promise<void>;\n};\n\nfunction EditorError({ message }: { message: React.ReactNode }) {\n return (\n <div className=\"flex size-full items-center justify-center\">\n <h3 className=\"text-lg font-semibold\">{message}</h3>\n </div>\n );\n}\n\nfunction FallbackEditorError(props: FallbackProps) {\n const message =\n props.error instanceof Error\n ? props.error.message\n : (props.error as string);\n return <EditorError message={message} />;\n}\n\nexport const DocumentEditor: React.FC<Props> = props => {\n const {\n document,\n onClose,\n onExport,\n onAddOperation,\n onOpenSwitchboardLink,\n } = props;\n const documentId = document.header.id;\n const [selectedTimelineItem, setSelectedTimelineItem] =\n useState<TimelineItem | null>(null);\n const [revisionHistoryVisible, setRevisionHistoryVisible] = useState(false);\n const theme = useAtomValue(themeAtom);\n const user = useUser() || undefined;\n const connectDid = useConnectDid();\n const { sign } = useConnectCrypto();\n const getDocumentModelModule = useGetDocumentModelModule();\n const getEditor = useGetEditor();\n const documentType = document.header.documentType;\n const documentModel = useMemo(\n () => (documentType ? getDocumentModelModule(documentType) : undefined),\n [documentType, getDocumentModelModule],\n );\n\n const editor = useMemo(\n () => (documentType ? getEditor(documentType) : undefined),\n [documentType, getEditor],\n );\n\n const [, _dispatch, error] = useDocumentDispatch(\n documentModel?.reducer,\n document,\n );\n const context: EditorContext = useMemo(\n () => ({ theme, user }),\n [theme, user],\n );\n const userPermissions = useUserPermissions();\n\n const timelineItems = useTimelineItems(\n documentId,\n document.header.createdAtUtcIso,\n );\n\n const dispatch = useCallback(\n (action: Action, onErrorCallback?: ActionErrorCallback) => {\n const callback: DocumentDispatchCallback<PHDocument> = (\n operation,\n state,\n ) => {\n if (!documentId) return;\n\n const { prevState } = state;\n\n signOperation(\n operation,\n sign,\n documentId,\n prevState,\n documentModel?.reducer,\n user,\n )\n .then(op => {\n window.documentEditorDebugTools?.pushOperation(\n operation,\n );\n return onAddOperation(op);\n })\n .catch(logger.error);\n };\n\n _dispatch(\n addActionContext(action, connectDid, user),\n callback,\n onErrorCallback,\n );\n },\n [\n _dispatch,\n connectDid,\n documentModel?.reducer,\n onAddOperation,\n documentId,\n sign,\n user,\n ],\n );\n\n const showRevisionHistory = useCallback(\n () => setRevisionHistoryVisible(true),\n [],\n );\n\n const hideRevisionHistory = useCallback(\n () => setRevisionHistoryVisible(false),\n [],\n );\n const handleUndo = useCallback(() => {\n dispatch(undo());\n }, [dispatch]);\n\n const handleRedo = useCallback(() => {\n dispatch(redo());\n }, [dispatch]);\n\n const isLoadingEditor =\n editor === undefined ||\n (editor &&\n !editor.documentTypes.includes(document.header.documentType) &&\n !editor.documentTypes.includes('*'));\n\n const canUndo =\n document.header.revision.global > 0 ||\n document.header.revision.local > 0;\n const canRedo = !!document?.clipboard.length;\n useUndoRedoShortcuts({\n undo: handleUndo,\n redo: handleRedo,\n canUndo,\n canRedo,\n });\n\n useEffect(() => {\n return () => {\n window.documentEditorDebugTools?.clear();\n };\n }, []);\n\n const navigate = useNavigate();\n const { showModal } = useModal();\n\n const [editorError, setEditorError] = useState<\n | {\n error: any;\n info: React.ErrorInfo;\n documentId?: string;\n // clear: () => void;\n }\n | undefined\n >(undefined);\n\n useEffect(() => {\n if (editorError && editorError.documentId !== documentId) {\n setEditorError(undefined);\n }\n }, [editorError, documentId]);\n\n const handleEditorError = useCallback(\n (error: Error, info: React.ErrorInfo) => {\n setEditorError({\n error,\n documentId,\n info,\n });\n },\n [documentId],\n );\n\n if (isLoadingEditor) {\n return <EditorLoader message=\"Loading editor\" />;\n }\n\n if (!documentModel) {\n return (\n <EditorError\n message={\n <div className=\"text-center leading-10\">\n <p>\n Unable to open the document because the document\n model \"{documentType}\" is not supported.\n </p>\n <p>\n Go to the{' '}\n <button\n type=\"button\"\n className=\"cursor-pointer underline\"\n onClick={() => {\n showModal('settingsModal', {\n onRefresh: () => navigate(0),\n });\n }}\n >\n package manager\n </button>{' '}\n to install this document model\n </p>\n </div>\n }\n />\n );\n }\n\n if (!editor) {\n return (\n <EditorError\n message={\n <div className=\"text-center leading-10\">\n <p>\n Unable to open the document because no editor has\n been found\n </p>\n <p>\n Go to the{' '}\n <button\n type=\"button\"\n className=\"cursor-pointer underline\"\n onClick={() => {\n showModal('settingsModal', {\n onRefresh: () => navigate(0),\n });\n }}\n >\n package manager\n </button>{' '}\n an editor for the \"${documentType}\" document type\n </p>\n </div>\n }\n />\n );\n }\n\n const EditorComponent = editor.Component;\n const {\n disableExternalControls,\n documentToolbarEnabled,\n showSwitchboardLink,\n timelineEnabled,\n } = editor.config;\n\n const handleSwitchboardLinkClick =\n showSwitchboardLink !== false ? onOpenSwitchboardLink : undefined;\n return (\n <div className=\"relative h-full\" id=\"document-editor-context\">\n {documentToolbarEnabled &&\n disableExternalControls &&\n !revisionHistoryVisible && (\n <DocumentToolbar\n onClose={onClose}\n onExport={onExport}\n onShowRevisionHistory={showRevisionHistory}\n title={document.header.name}\n onSwitchboardLinkClick={handleSwitchboardLinkClick}\n timelineButtonVisible={timelineEnabled}\n timelineItems={timelineItems.data}\n onTimelineItemClick={setSelectedTimelineItem}\n />\n )}\n {!disableExternalControls && (\n <div className=\"mb-4 flex justify-end gap-10\">\n <Button onClick={onExport}>Export</Button>\n <div className=\"flex gap-4\">\n <Button onClick={handleUndo} disabled={!canUndo}>\n Undo\n </Button>\n <Button onClick={handleRedo} disabled={!canRedo}>\n Redo\n </Button>\n </div>\n <div className=\"flex gap-4\">\n <Button onClick={onClose}>Close</Button>\n </div>\n </div>\n )}\n {revisionHistoryVisible ? (\n <RevisionHistory\n key={documentId}\n documentTitle={document.header.name}\n documentId={document.header.id}\n globalOperations={document.operations.global}\n localOperations={document.operations.local}\n onClose={hideRevisionHistory}\n />\n ) : (\n <Suspense fallback={<EditorLoader />} name=\"EditorLoader\">\n <ErrorBoundary\n fallbackRender={FallbackEditorError}\n key={documentId}\n onError={handleEditorError}\n >\n {!editorError?.error && (\n <EditorComponent\n key={documentId}\n error={error}\n context={{\n ...context,\n readMode: !!selectedTimelineItem,\n selectedTimelineRevision:\n getRevisionFromDate(\n selectedTimelineItem?.startDate,\n selectedTimelineItem?.endDate,\n document.operations.global,\n ),\n }}\n document={document}\n documentNodeName={document.header.name}\n dispatch={dispatch}\n onClose={onClose}\n onExport={onExport}\n canUndo={canUndo}\n canRedo={canRedo}\n undo={handleUndo}\n redo={handleRedo}\n onSwitchboardLinkClick={\n handleSwitchboardLinkClick\n }\n onShowRevisionHistory={showRevisionHistory}\n isAllowedToCreateDocuments={\n userPermissions?.isAllowedToCreateDocuments ??\n false\n }\n isAllowedToEditDocuments={\n userPermissions?.isAllowedToEditDocuments ??\n false\n }\n />\n )}\n </ErrorBoundary>\n </Suspense>\n )}\n </div>\n );\n};\n","import { useDocumentDriveServer } from '#hooks';\nimport { useGetDocumentModelModule } from '#store';\nimport { buildDocumentSubgraphUrl } from '@powerhousedao/reactor-browser/utils/switchboard';\nimport {\n useDriveIsRemote,\n useDriveRemoteUrl,\n useParentFolderId,\n useSelectedDocument,\n useSelectedDrive,\n useSetSelectedNode,\n} from '@powerhousedao/state';\nimport { type Operation, type PHDocument } from 'document-model';\nimport { useCallback, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useModal } from '../components/modal/index.js';\nimport { exportFile, openUrl } from '../utils/index.js';\nimport { validateDocument } from '../utils/validate-document.js';\nimport { DocumentEditor } from './editors.js';\n\nexport function DocumentEditorContainer() {\n const { t } = useTranslation();\n const { showModal } = useModal();\n const { addDocumentOperations } = useDocumentDriveServer();\n const unwrappedSelectedDrive = useSelectedDrive();\n const selectedDocument = useSelectedDocument();\n const parentFolderId = useParentFolderId(selectedDocument?.header.id);\n const documentType = selectedDocument?.header.documentType;\n const isRemoteDrive = useDriveIsRemote(unwrappedSelectedDrive?.header.id);\n const remoteUrl = useDriveRemoteUrl(unwrappedSelectedDrive?.header.id);\n const getDocumentModelModule = useGetDocumentModelModule();\n const documentModelModule = documentType\n ? getDocumentModelModule(documentType)\n : undefined;\n const setSelectedNode = useSetSelectedNode();\n\n const onAddOperation = useCallback(\n async (operation: Operation) => {\n if (!selectedDocument?.header.id) {\n return;\n }\n await addDocumentOperations(selectedDocument.header.id, [\n operation,\n ]);\n },\n [addDocumentOperations, selectedDocument],\n );\n\n const onClose = useCallback(() => {\n setSelectedNode(parentFolderId);\n }, [parentFolderId, setSelectedNode]);\n\n const exportDocument = useCallback(\n (document: PHDocument) => {\n const validationErrors = validateDocument(document);\n\n if (validationErrors.length) {\n showModal('confirmationModal', {\n title: t('modals.exportDocumentWithErrors.title'),\n body: (\n <div>\n <p>{t('modals.exportDocumentWithErrors.body')}</p>\n <ul className=\"mt-4 flex list-disc flex-col items-start px-4 text-xs\">\n {validationErrors.map((error, index) => (\n <li key={index}>{error.message}</li>\n ))}\n </ul>\n </div>\n ),\n cancelLabel: t('common.cancel'),\n continueLabel: t('common.export'),\n onCancel(closeModal) {\n closeModal();\n },\n onContinue(closeModal) {\n closeModal();\n return exportFile(document, getDocumentModelModule);\n },\n });\n } else {\n return exportFile(document, getDocumentModelModule);\n }\n },\n [getDocumentModelModule, showModal, t],\n );\n\n const onExport = useCallback(() => {\n if (selectedDocument) {\n return exportDocument(selectedDocument);\n }\n }, [exportDocument, selectedDocument]);\n\n const onOpenSwitchboardLink = useMemo(() => {\n return isRemoteDrive\n ? async () => {\n if (!selectedDocument?.header.id) {\n console.error('No selected document');\n return;\n }\n\n if (!remoteUrl) {\n console.error('No remote drive url found');\n return;\n }\n\n if (!documentModelModule) {\n console.error('No document model found');\n return;\n }\n\n const url = buildDocumentSubgraphUrl(\n remoteUrl,\n selectedDocument.header.id,\n documentModelModule.documentModel,\n );\n try {\n await openUrl(url);\n } catch (e) {\n console.error('Error opening switchboard link', e);\n }\n }\n : undefined;\n }, [isRemoteDrive, remoteUrl, selectedDocument, documentModelModule]);\n\n if (!selectedDocument) return null;\n\n return (\n <div className=\"flex-1 rounded-2xl bg-gray-50 p-4\">\n <DocumentEditor\n document={selectedDocument}\n onClose={onClose}\n onExport={onExport}\n onAddOperation={onAddOperation}\n onOpenSwitchboardLink={onOpenSwitchboardLink}\n />\n </div>\n );\n}\n","import connectConfig from '#connect-config';\nimport {\n useDocumentDriveServer,\n useDocumentEditor as useDocumentEditorProps,\n useEditorProps,\n useNodeActions,\n useShowDeleteNodeModal,\n} from '#hooks';\nimport {\n useDriveEditor,\n useFilteredDocumentModels,\n useGetDocumentModelModule,\n useGetEditor,\n} from '#store';\nimport { useDocumentDispatch } from '#utils';\nimport { GenericDriveExplorer } from '@powerhousedao/common';\nimport { type IDriveContext } from '@powerhousedao/reactor-browser';\nimport { useSelectedDocument, useSelectedDrive } from '@powerhousedao/state';\nimport { driveDocumentModelModule } from 'document-drive';\nimport { type DocumentModelModule, type Operation } from 'document-model';\nimport { useCallback, useMemo } from 'react';\nimport { ErrorBoundary, type FallbackProps } from 'react-error-boundary';\nimport { useModal } from './modal/index.js';\n\nfunction DriveEditorError({ error }: FallbackProps) {\n return (\n <div className=\"mx-auto flex max-w-[80%] flex-1 flex-col items-center justify-center\">\n <h1 className=\"mb-2 text-xl font-semibold\">Error</h1>\n <i>{error instanceof Error ? error.message : error}</i>\n <pre>{JSON.stringify(error, null, 2)}</pre>\n </div>\n );\n}\n\nexport function DriveEditorContainer() {\n const { addDriveOperations, getSyncStatusSync } = useDocumentDriveServer();\n const selectedDrive = useSelectedDrive();\n const selectedDocument = useSelectedDocument();\n const nodeActions = useNodeActions();\n const [, _dispatch, error] = useDocumentDispatch(\n driveDocumentModelModule.reducer,\n selectedDrive,\n );\n const onAddOperation = useCallback(\n async (operation: Operation) => {\n if (!selectedDrive?.header.id) {\n throw new Error('No drive selected');\n }\n await addDriveOperations(selectedDrive.header.id, [operation]);\n },\n [addDriveOperations, selectedDrive?.header.id],\n );\n\n const editorProps = useEditorProps(\n selectedDrive,\n _dispatch,\n onAddOperation,\n );\n\n const { isAllowedToCreateDocuments } = editorProps;\n\n const { showModal } = useModal();\n const showCreateDocumentModal = useCallback(\n (documentModel: DocumentModelModule) => {\n showModal('createDocument', {\n documentModel,\n });\n },\n [showModal],\n );\n const showDeleteNodeModal = useShowDeleteNodeModal();\n const { addFile, addDocument } = useDocumentDriveServer();\n const documentModels = useFilteredDocumentModels() ?? [];\n const getDocumentModelModule = useGetDocumentModelModule();\n const getEditor = useGetEditor();\n const analyticsDatabaseName = connectConfig.analytics.databaseName;\n const showSearchBar = false;\n\n const driveContext: IDriveContext = useMemo(\n () => ({\n ...nodeActions,\n showSearchBar,\n isAllowedToCreateDocuments,\n documentModels,\n analyticsDatabaseName,\n getSyncStatusSync,\n getDocumentModelModule,\n getEditor,\n addFile,\n showCreateDocumentModal,\n showDeleteNodeModal,\n useDocumentEditorProps,\n addDocument,\n }),\n [\n nodeActions,\n isAllowedToCreateDocuments,\n documentModels,\n addFile,\n addDocument,\n getSyncStatusSync,\n getDocumentModelModule,\n getEditor,\n showDeleteNodeModal,\n showCreateDocumentModal,\n ],\n );\n\n const driveEditor = useDriveEditor(\n selectedDrive?.header.meta?.preferredEditor,\n );\n\n const DriveEditorComponent =\n driveEditor?.Component ?? GenericDriveExplorer.Component;\n\n if (selectedDocument || !selectedDrive) return null;\n\n return (\n <ErrorBoundary\n fallbackRender={DriveEditorError}\n key={selectedDrive.header.id}\n >\n <DriveEditorComponent\n {...editorProps}\n context={{\n ...editorProps.context,\n ...driveContext,\n }}\n onSwitchboardLinkClick={undefined} // TODO\n document={selectedDrive}\n error={error}\n />\n </ErrorBoundary>\n );\n}\n","export function useUserPermissions() {\n return {\n isAllowedToCreateDocuments: true,\n isAllowedToEditDocuments: true,\n };\n}\n//# sourceMappingURL=useUserPermissions.js.map","import { useCallback, useEffect, useState } from \"react\";\nexport function useDocument(reactor, documentMeta = {}) {\n const { documentId, documentType } = documentMeta;\n const [document, setDocument] = useState();\n const onStrandUpdate = useCallback((cb) => {\n if (!reactor) {\n throw new Error(\"Reactor is not loaded\");\n }\n return reactor.on(\"strandUpdate\", cb);\n }, [reactor]);\n useEffect(() => {\n if (!reactor)\n return;\n if (!documentId || !documentType)\n return;\n reactor.getDocument(documentId).then(setDocument).catch(console.error);\n }, [documentId, documentType, reactor]);\n useEffect(() => {\n if (!reactor)\n return;\n if (!documentId || !documentType)\n return;\n const removeListener = onStrandUpdate((strand) => {\n if (strand.documentId === documentId) {\n reactor.getDocument(documentId).then(setDocument).catch(console.error);\n }\n });\n return removeListener;\n }, [onStrandUpdate, documentId, documentType]);\n return document;\n}\n//# sourceMappingURL=useDocument.js.map","import { buildSignedAction, } from \"document-model\";\nexport async function signOperation(operation, sign, document, reducer, user) {\n if (!user)\n return operation;\n if (!operation.action?.context?.signer)\n return operation;\n if (!reducer) {\n console.error(`Document model '${document.header.documentType}' does not have a reducer`);\n return operation;\n }\n const signedAction = await buildSignedAction(operation.action, reducer, document, operation.action.context.signer, sign);\n return signedAction;\n}\nexport function addActionContext(action, connectDid, user) {\n if (!user)\n return action;\n const signer = {\n app: {\n name: \"Connect\",\n key: connectDid || \"\",\n },\n user: {\n address: user.address,\n networkId: user.networkId,\n chainId: user.chainId,\n },\n signatures: [],\n };\n return {\n context: { signer },\n ...action,\n };\n}\n//# sourceMappingURL=signature.js.map","import { useCallback, useMemo } from \"react\";\nimport { useUserPermissions } from \"./useUserPermissions.js\";\nfunction debounceOperations(callback, timeout = 50) {\n let timer;\n const operations = [];\n return (operation) => {\n if (timer) {\n clearTimeout(timer);\n }\n const index = operations.findIndex((op) => op.scope === operation.scope && op.index === operation.index);\n if (index > -1) {\n const oldOperation = operations[index];\n if (!(oldOperation.type === operation.type &&\n JSON.stringify(operation.input) === JSON.stringify(oldOperation.input))) {\n console.warn(\"Two conflicting operations were dispatched:\", oldOperation, operation);\n }\n operations[index] = operation;\n }\n else {\n operations.push(operation);\n }\n return new Promise((resolve, reject) => {\n timer = setTimeout(() => {\n callback(operations).then(resolve).catch(reject);\n }, timeout);\n });\n };\n}\nexport function useAddDebouncedOperations(reactor, props) {\n const { documentId } = props;\n const { isAllowedToEditDocuments } = useUserPermissions() || {\n isAllowedToCreateDocuments: false,\n isAllowedToEditDocuments: false,\n };\n const addOperations = useCallback(async (id, operations) => {\n if (!isAllowedToEditDocuments) {\n throw new Error(\"User is not allowed to edit documents\");\n }\n if (!reactor) {\n throw new Error(\"Reactor is not loaded\");\n }\n if (!id) {\n throw new Error(\"Document id is not set\");\n }\n const newDocument = await reactor.queueOperations(id, operations);\n return newDocument.document;\n }, [isAllowedToEditDocuments, reactor]);\n const addDebouncedOperations = useMemo(() => {\n return debounceOperations((operations) => addOperations(documentId, operations));\n }, [addOperations, documentId]);\n return addDebouncedOperations;\n}\n//# sourceMappingURL=useAddDebouncedOperations.js.map","import { useEffect, useState } from \"react\";\nexport function useDocumentDispatch(documentReducer, initialState, onError = console.error) {\n const [state, setState] = useState(initialState);\n const [error, setError] = useState();\n const onErrorHandler = (error) => {\n setError(error);\n onError(error);\n };\n useEffect(() => {\n setState(initialState);\n }, [initialState]);\n const dispatch = (action, callback, onErrorCallback) => {\n setError(undefined);\n setState((_state) => {\n if (!documentReducer || !_state)\n return _state;\n try {\n const newState = documentReducer(_state, action);\n const scope = action.scope ?? \"global\";\n const operations = newState.operations[scope];\n const operation = operations[operations.length - 1];\n if (operation.error) {\n const error = new Error(operation.error);\n onErrorHandler(error);\n onErrorCallback?.(error);\n }\n callback?.(operation, {\n prevState: { ..._state },\n newState: { ...newState },\n });\n return newState;\n }\n catch (error) {\n onErrorHandler(error);\n onErrorCallback?.(error);\n return _state;\n }\n });\n };\n return [state, dispatch, error];\n}\n//# sourceMappingURL=useDocumentDispatch.js.map","import { addActionContext, signOperation } from \"../utils/signature.js\";\nimport { useAddDebouncedOperations } from \"./useAddDebouncedOperations.js\";\nimport { useConnectCrypto, useConnectDid } from \"./useConnectCrypto.js\";\nimport { useDocumentDispatch } from \"./useDocumentDispatch.js\";\nexport function useDocumentEditorProps(reactor, props) {\n const { nodeId, documentModelModule, document: initialDocument, user, connectDid, sign, } = props;\n const addDebouncedOperations = useAddDebouncedOperations(reactor, {\n documentId: nodeId,\n });\n const [document, _dispatch, error] = useDocumentDispatch(documentModelModule?.reducer, initialDocument);\n function dispatch(action, onErrorCallback) {\n const callback = (operation, state) => {\n const { prevState } = state;\n if (!nodeId) {\n throw new Error(\"Node id is not set\");\n }\n signOperation(operation, sign, prevState, documentModelModule?.reducer, user)\n .then((op) => {\n return addDebouncedOperations(op);\n })\n .catch(console.error);\n };\n _dispatch(addActionContext(action, connectDid, user), callback, onErrorCallback);\n }\n return {\n dispatch,\n document,\n error,\n };\n}\nexport function useDocumentEditor(reactor, props) {\n const connectDid = useConnectDid();\n const { sign } = useConnectCrypto();\n const documentEditorDispatch = useDocumentEditorProps(reactor, {\n ...props,\n connectDid,\n sign,\n });\n return documentEditorDispatch;\n}\n//# sourceMappingURL=useDocumentEditor.js.map","import {\n useDocument,\n useDocumentEditorProps,\n type User,\n} from '@powerhousedao/reactor-browser';\nimport { type DocumentModelModule, type PHDocument } from 'document-model';\n\nimport { useConnectCrypto, useConnectDid } from '#hooks';\nimport { useReactor } from '@powerhousedao/state';\n\nexport interface DocumentEditorProps {\n driveId: string | undefined;\n documentId: string | undefined;\n documentType: string | undefined;\n documentModelModule: DocumentModelModule<PHDocument> | undefined;\n user?: User;\n}\n\nexport function useDocumentEditor(props: DocumentEditorProps) {\n const { driveId, documentId, documentType, documentModelModule, user } =\n props;\n\n const reactor = useReactor();\n const connectDid = useConnectDid();\n const { sign } = useConnectCrypto();\n\n const doc = useDocument(reactor, { documentId, documentType });\n\n const documentEditorProps = useDocumentEditorProps(reactor, {\n nodeId: documentId,\n driveId: driveId,\n document: doc,\n documentModelModule,\n connectDid,\n sign,\n user,\n });\n\n return documentEditorProps;\n}\n","import { useModal } from '#components';\nimport { themeAtom, useGetDocumentModelModule, useUser } from '#store';\nimport {\n addActionContext,\n type DocumentDispatch,\n type DocumentDispatchCallback,\n exportFile,\n signOperation,\n validateDocument,\n} from '#utils';\nimport {\n useParentFolder,\n useSelectedDrive,\n useSetSelectedNode,\n} from '@powerhousedao/state';\nimport { logger } from 'document-drive';\nimport {\n type Action,\n type ActionErrorCallback,\n type EditorContext,\n type Operation,\n type PHDocument,\n redo,\n undo,\n} from 'document-model';\nimport { useAtomValue } from 'jotai';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useConnectCrypto, useConnectDid } from './useConnectCrypto.js';\nimport { useUserPermissions } from './useUserPermissions.js';\n\nexport interface EditorProps {\n context: EditorContext;\n canUndo: boolean;\n canRedo: boolean;\n undo: () => void;\n redo: () => void;\n onClose: () => void;\n onExport: () => void;\n onShowRevisionHistory: () => void;\n isAllowedToCreateDocuments: boolean;\n isAllowedToEditDocuments: boolean;\n}\n\nexport function useEditorDispatch<T extends PHDocument = PHDocument>(\n document: T | undefined,\n documentDispatch: DocumentDispatch<T>,\n onAddOperation: (operation: Operation) => Promise<void>,\n) {\n const user = useUser() || undefined;\n const connectDid = useConnectDid();\n const { sign } = useConnectCrypto();\n const documentType = document?.header.documentType;\n const getDocumentModelModule = useGetDocumentModelModule();\n const documentModelModule = useMemo(\n () => (documentType ? getDocumentModelModule(documentType) : undefined),\n [documentType, getDocumentModelModule],\n );\n\n const dispatch = useCallback(\n (action: Action, onErrorCallback?: ActionErrorCallback) => {\n const callback: DocumentDispatchCallback<PHDocument> = (\n operation,\n state,\n ) => {\n if (!document?.header.id) return;\n\n const { prevState } = state;\n\n signOperation(\n operation,\n sign,\n document.header.id,\n prevState,\n documentModelModule?.reducer,\n user,\n )\n .then(op => {\n window.documentEditorDebugTools?.pushOperation(\n operation,\n );\n return onAddOperation(op);\n })\n .catch(logger.error);\n };\n\n documentDispatch(\n addActionContext(action, connectDid, user),\n callback,\n onErrorCallback,\n );\n },\n [\n documentDispatch,\n connectDid,\n documentModelModule?.reducer,\n onAddOperation,\n document?.header.id,\n sign,\n user,\n ],\n );\n\n return dispatch;\n}\n\nexport function useEditorProps<T extends PHDocument = PHDocument>(\n document: T | undefined,\n documentDispatch: DocumentDispatch<T>,\n onAddOperation: (operation: Operation) => Promise<void>,\n) {\n const { t } = useTranslation();\n const { showModal } = useModal();\n const theme = useAtomValue(themeAtom);\n const user = useUser() || undefined;\n const userPermissions = useUserPermissions();\n const selectedDrive = useSelectedDrive();\n const parentFolder = useParentFolder(document?.header.id);\n const setSelectedNode = useSetSelectedNode();\n const context = useMemo(() => ({ theme, user }), [theme, user]);\n const getDocumentModelModule = useGetDocumentModelModule();\n\n const canUndo =\n !!document &&\n (document.header.revision.global > 0 ||\n document.header.revision.local > 0);\n const canRedo = !!document?.clipboard.length;\n\n const dispatch = useEditorDispatch(\n document,\n documentDispatch,\n onAddOperation,\n );\n\n const handleUndo = useCallback(() => {\n dispatch(undo());\n }, [dispatch]);\n\n const handleRedo = useCallback(() => {\n dispatch(redo());\n }, [dispatch]);\n\n const onClose = useCallback(() => {\n setSelectedNode(parentFolder?.id);\n }, [parentFolder, setSelectedNode]);\n\n const exportDocument = useCallback(\n (document: PHDocument) => {\n const validationErrors = validateDocument(document);\n\n if (validationErrors.length) {\n showModal('confirmationModal', {\n title: t('modals.exportDocumentWithErrors.title'),\n body: (\n <div>\n <p>{t('modals.exportDocumentWithErrors.body')}</p>\n <ul className=\"mt-4 flex list-disc flex-col items-start px-4 text-xs\">\n {validationErrors.map((error, index) => (\n <li key={index}>{error.message}</li>\n ))}\n </ul>\n </div>\n ),\n cancelLabel: t('common.cancel'),\n continueLabel: t('common.export'),\n onCancel(closeModal) {\n closeModal();\n },\n onContinue(closeModal) {\n closeModal();\n return exportFile(document, getDocumentModelModule);\n },\n });\n } else {\n return exportFile(document, getDocumentModelModule);\n }\n },\n [getDocumentModelModule, showModal, t],\n );\n\n const onExport = useCallback(() => {\n if (document) {\n return exportDocument(document);\n }\n }, [exportDocument, document]);\n\n const [revisionHistoryVisible, setRevisionHistoryVisible] = useState(false);\n const showRevisionHistory = useCallback(\n () => setRevisionHistoryVisible(true),\n [],\n );\n\n return {\n dispatch,\n revisionHistoryVisible,\n context,\n canUndo,\n canRedo,\n undo: handleUndo,\n redo: handleRedo,\n onClose,\n onExport,\n onShowRevisionHistory: showRevisionHistory,\n isAllowedToCreateDocuments:\n userPermissions?.isAllowedToCreateDocuments ?? false,\n isAllowedToEditDocuments:\n userPermissions?.isAllowedToEditDocuments ?? false,\n };\n}\n","import { type TNodeActions } from '@powerhousedao/design-system';\nimport {\n useSelectedDrive,\n useSelectedFolder,\n useSelectedParentFolder,\n useSetSelectedNode,\n} from '@powerhousedao/state';\nimport { type Node } from 'document-drive';\nimport { useCallback, useMemo } from 'react';\nimport { useDocumentDriveServer } from './useDocumentDriveServer.js';\nexport function useDebugHandlers() {\n const { removeTrigger, addTrigger, registerNewPullResponderTrigger } =\n useDocumentDriveServer();\n\n const onAddTrigger = useCallback(\n async (driveId: string) => {\n const url = window.prompt('url') || '';\n\n const pullResponderTrigger = await registerNewPullResponderTrigger(\n driveId,\n url,\n { pullInterval: 6000 },\n );\n if (!pullResponderTrigger) return;\n await addTrigger(driveId, pullResponderTrigger);\n },\n [addTrigger, registerNewPullResponderTrigger],\n );\n\n const onRemoveTrigger = useCallback(\n async (driveId: string) => {\n const triggerId = window.prompt('triggerId:');\n\n if (triggerId) {\n await removeTrigger(driveId, triggerId);\n }\n },\n [removeTrigger],\n );\n\n const onAddInvalidTrigger = useCallback(\n async (driveId: string) => {\n const url = window.prompt('url') || '';\n\n await addTrigger(driveId, {\n id: 'some-invalid-id',\n type: 'PullResponder',\n data: {\n interval: '3000',\n listenerId: 'invalid-listener-id',\n url,\n },\n });\n },\n [addTrigger],\n );\n\n return {\n onAddTrigger,\n onRemoveTrigger,\n onAddInvalidTrigger,\n };\n}\n\nexport function useNodeActions(): TNodeActions {\n const selectedDrive = useSelectedDrive();\n const selectedFolder = useSelectedFolder();\n const selectedParentFolder = useSelectedParentFolder();\n const setSelectedNode = useSetSelectedNode();\n const { addFolder, addFile, renameNode, copyNode, moveNode } =\n useDocumentDriveServer();\n\n const onAddFile = useCallback(\n async (file: File, parent: Node | undefined) => {\n if (!selectedDrive?.header.id) return;\n\n const fileName = file.name.replace(/\\.zip$/gim, '');\n\n return await addFile(\n file,\n selectedDrive.header.id,\n fileName,\n parent?.id,\n );\n },\n [addFile, selectedDrive?.header.id],\n );\n\n const onAddFolder = useCallback(\n async (name: string, parent: { id: string } | undefined) => {\n if (!selectedDrive?.header.id) return;\n\n return await addFolder(selectedDrive.header.id, name, parent?.id);\n },\n [addFolder, selectedDrive?.header.id],\n );\n\n const onRenameNode = useCallback(\n async (newName: string, node: Node): Promise<Node | undefined> => {\n if (!selectedDrive?.header.id) return;\n\n return await renameNode(selectedDrive.header.id, node.id, newName);\n },\n [renameNode, selectedDrive?.header.id],\n );\n\n const onCopyNode = useCallback(\n async (src: Node, target: Node | undefined) => {\n await copyNode(src, target);\n },\n [copyNode],\n );\n\n const onMoveNode = useCallback(\n async (src: Node, target: Node | undefined) => {\n await moveNode(src, target);\n },\n [moveNode],\n );\n\n const onDuplicateNode = useCallback(\n async (src: Node) => {\n await copyNode(src, selectedFolder ?? selectedParentFolder);\n },\n [copyNode, selectedFolder, selectedParentFolder],\n );\n\n const onAddAndSelectNewFolder = useCallback(\n async (name: string) => {\n if (!name) return;\n\n const newFolder = await onAddFolder(\n name,\n selectedFolder ?? selectedParentFolder,\n );\n\n if (newFolder) {\n setSelectedNode(newFolder.id);\n }\n },\n [onAddFolder, selectedFolder, selectedParentFolder, setSelectedNode],\n );\n\n return useMemo(\n () => ({\n onAddFile,\n onAddFolder,\n onRenameNode,\n onCopyNode,\n onMoveNode,\n onDuplicateNode,\n onAddAndSelectNewFolder,\n }),\n [\n onAddFolder,\n onAddFile,\n onCopyNode,\n onMoveNode,\n onRenameNode,\n onDuplicateNode,\n onAddAndSelectNewFolder,\n ],\n );\n}\n","import { useContext, createContext, useState, useCallback, useRef, useLayoutEffect, useEffect } from 'react';\nimport { jsx } from 'react/jsx-runtime';\n\nfunction _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\n\nvar reservedModifierKeywords = ['shift', 'alt', 'meta', 'mod', 'ctrl'];\nvar mappedKeys = {\n esc: 'escape',\n \"return\": 'enter',\n '.': 'period',\n ',': 'comma',\n '-': 'slash',\n ' ': 'space',\n '`': 'backquote',\n '#': 'backslash',\n '+': 'bracketright',\n ShiftLeft: 'shift',\n ShiftRight: 'shift',\n AltLeft: 'alt',\n AltRight: 'alt',\n MetaLeft: 'meta',\n MetaRight: 'meta',\n OSLeft: 'meta',\n OSRight: 'meta',\n ControlLeft: 'ctrl',\n ControlRight: 'ctrl'\n};\nfunction mapKey(key) {\n return (key && mappedKeys[key] || key || '').trim().toLowerCase().replace(/key|digit|numpad|arrow/, '');\n}\nfunction isHotkeyModifier(key) {\n return reservedModifierKeywords.includes(key);\n}\nfunction parseKeysHookInput(keys, splitKey) {\n if (splitKey === void 0) {\n splitKey = ',';\n }\n return keys.split(splitKey);\n}\nfunction parseHotkey(hotkey, combinationKey, description) {\n if (combinationKey === void 0) {\n combinationKey = '+';\n }\n var keys = hotkey.toLocaleLowerCase().split(combinationKey).map(function (k) {\n return mapKey(k);\n });\n var modifiers = {\n alt: keys.includes('alt'),\n ctrl: keys.includes('ctrl') || keys.includes('control'),\n shift: keys.includes('shift'),\n meta: keys.includes('meta'),\n mod: keys.includes('mod')\n };\n var singleCharKeys = keys.filter(function (k) {\n return !reservedModifierKeywords.includes(k);\n });\n return _extends({}, modifiers, {\n keys: singleCharKeys,\n description: description,\n hotkey: hotkey\n });\n}\n\n(function () {\n if (typeof document !== 'undefined') {\n document.addEventListener('keydown', function (e) {\n if (e.key === undefined) {\n // Synthetic event (e.g., Chrome autofill). Ignore.\n return;\n }\n pushToCurrentlyPressedKeys([mapKey(e.key), mapKey(e.code)]);\n });\n document.addEventListener('keyup', function (e) {\n if (e.key === undefined) {\n // Synthetic event (e.g., Chrome autofill). Ignore.\n return;\n }\n removeFromCurrentlyPressedKeys([mapKey(e.key), mapKey(e.code)]);\n });\n }\n if (typeof window !== 'undefined') {\n window.addEventListener('blur', function () {\n currentlyPressedKeys.clear();\n });\n }\n})();\nvar currentlyPressedKeys = /*#__PURE__*/new Set();\n// https://github.com/microsoft/TypeScript/issues/17002\nfunction isReadonlyArray(value) {\n return Array.isArray(value);\n}\nfunction isHotkeyPressed(key, splitKey) {\n if (splitKey === void 0) {\n splitKey = ',';\n }\n var hotkeyArray = isReadonlyArray(key) ? key : key.split(splitKey);\n return hotkeyArray.every(function (hotkey) {\n return currentlyPressedKeys.has(hotkey.trim().toLowerCase());\n });\n}\nfunction pushToCurrentlyPressedKeys(key) {\n var hotkeyArray = Array.isArray(key) ? key : [key];\n /*\r\n Due to a weird behavior on macOS we need to clear the set if the user pressed down the meta key and presses another key.\r\n https://stackoverflow.com/questions/11818637/why-does-javascript-drop-keyup-events-when-the-metakey-is-pressed-on-mac-browser\r\n Otherwise the set will hold all ever pressed keys while the meta key is down which leads to wrong results.\r\n */\n if (currentlyPressedKeys.has('meta')) {\n currentlyPressedKeys.forEach(function (key) {\n return !isHotkeyModifier(key) && currentlyPressedKeys[\"delete\"](key.toLowerCase());\n });\n }\n hotkeyArray.forEach(function (hotkey) {\n return currentlyPressedKeys.add(hotkey.toLowerCase());\n });\n}\nfunction removeFromCurrentlyPressedKeys(key) {\n var hotkeyArray = Array.isArray(key) ? key : [key];\n /*\r\n Due to a weird behavior on macOS we need to clear the set if the user pressed down the meta key and presses another key.\r\n https://stackoverflow.com/questions/11818637/why-does-javascript-drop-keyup-events-when-the-metakey-is-pressed-on-mac-browser\r\n Otherwise the set will hold all ever pressed keys while the meta key is down which leads to wrong results.\r\n */\n if (key === 'meta') {\n currentlyPressedKeys.clear();\n } else {\n hotkeyArray.forEach(function (hotkey) {\n return currentlyPressedKeys[\"delete\"](hotkey.toLowerCase());\n });\n }\n}\n\nfunction maybePreventDefault(e, hotkey, preventDefault) {\n if (typeof preventDefault === 'function' && preventDefault(e, hotkey) || preventDefault === true) {\n e.preventDefault();\n }\n}\nfunction isHotkeyEnabled(e, hotkey, enabled) {\n if (typeof enabled === 'function') {\n return enabled(e, hotkey);\n }\n return enabled === true || enabled === undefined;\n}\nfunction isKeyboardEventTriggeredByInput(ev) {\n return isHotkeyEnabledOnTag(ev, ['input', 'textarea', 'select']);\n}\nfunction isHotkeyEnabledOnTag(event, enabledOnTags) {\n if (enabledOnTags === void 0) {\n enabledOnTags = false;\n }\n var target = event.target,\n composed = event.composed;\n var targetTagName = null;\n if (isCustomElement(target) && composed) {\n targetTagName = event.composedPath()[0] && event.composedPath()[0].tagName;\n } else {\n targetTagName = target && target.tagName;\n }\n if (isReadonlyArray(enabledOnTags)) {\n return Boolean(targetTagName && enabledOnTags && enabledOnTags.some(function (tag) {\n var _targetTagName;\n return tag.toLowerCase() === ((_targetTagName = targetTagName) == null ? void 0 : _targetTagName.toLowerCase());\n }));\n }\n return Boolean(targetTagName && enabledOnTags && enabledOnTags);\n}\nfunction isCustomElement(element) {\n // We just do a basic check w/o any complex RegEx or validation against the list of legacy names containing a hyphen,\n // as none of them is likely to be an event target, and it won't hurt anyway if we miss.\n // see: https://html.spec.whatwg.org/multipage/custom-elements.html#prod-potentialcustomelementname\n return !!element.tagName && !element.tagName.startsWith(\"-\") && element.tagName.includes(\"-\");\n}\nfunction isScopeActive(activeScopes, scopes) {\n if (activeScopes.length === 0 && scopes) {\n console.warn('A hotkey has the \"scopes\" option set, however no active scopes were found. If you want to use the global scopes feature, you need to wrap your app in a <HotkeysProvider>');\n return true;\n }\n if (!scopes) {\n return true;\n }\n return activeScopes.some(function (scope) {\n return scopes.includes(scope);\n }) || activeScopes.includes('*');\n}\nvar isHotkeyMatchingKeyboardEvent = function isHotkeyMatchingKeyboardEvent(e, hotkey, ignoreModifiers) {\n if (ignoreModifiers === void 0) {\n ignoreModifiers = false;\n }\n var alt = hotkey.alt,\n meta = hotkey.meta,\n mod = hotkey.mod,\n shift = hotkey.shift,\n ctrl = hotkey.ctrl,\n keys = hotkey.keys;\n var pressedKeyUppercase = e.key,\n code = e.code,\n ctrlKey = e.ctrlKey,\n metaKey = e.metaKey,\n shiftKey = e.shiftKey,\n altKey = e.altKey;\n var keyCode = mapKey(code);\n var pressedKey = pressedKeyUppercase.toLowerCase();\n if (!(keys != null && keys.includes(keyCode)) && !(keys != null && keys.includes(pressedKey)) && !['ctrl', 'control', 'unknown', 'meta', 'alt', 'shift', 'os'].includes(keyCode)) {\n return false;\n }\n if (!ignoreModifiers) {\n // We check the pressed keys for compatibility with the keyup event. In keyup events the modifier flags are not set.\n if (alt === !altKey && pressedKey !== 'alt') {\n return false;\n }\n if (shift === !shiftKey && pressedKey !== 'shift') {\n return false;\n }\n // Mod is a special key name that is checking for meta on macOS and ctrl on other platforms\n if (mod) {\n if (!metaKey && !ctrlKey) {\n return false;\n }\n } else {\n if (meta === !metaKey && pressedKey !== 'meta' && pressedKey !== 'os') {\n return false;\n }\n if (ctrl === !ctrlKey && pressedKey !== 'ctrl' && pressedKey !== 'control') {\n return false;\n }\n }\n }\n // All modifiers are correct, now check the key\n // If the key is set, we check for the key\n if (keys && keys.length === 1 && (keys.includes(pressedKey) || keys.includes(keyCode))) {\n return true;\n } else if (keys) {\n // Check if all keys are present in pressedDownKeys set\n return isHotkeyPressed(keys);\n } else if (!keys) {\n // If the key is not set, we only listen for modifiers, that check went alright, so we return true\n return true;\n }\n // There is nothing that matches.\n return false;\n};\n\nvar BoundHotkeysProxyProvider = /*#__PURE__*/createContext(undefined);\nvar useBoundHotkeysProxy = function useBoundHotkeysProxy() {\n return useContext(BoundHotkeysProxyProvider);\n};\nfunction BoundHotkeysProxyProviderProvider(_ref) {\n var addHotkey = _ref.addHotkey,\n removeHotkey = _ref.removeHotkey,\n children = _ref.children;\n return /*#__PURE__*/jsx(BoundHotkeysProxyProvider.Provider, {\n value: {\n addHotkey: addHotkey,\n removeHotkey: removeHotkey\n },\n children: children\n });\n}\n\nfunction deepEqual(x, y) {\n //@ts-ignore\n return x && y && typeof x === 'object' && typeof y === 'object' ? Object.keys(x).length === Object.keys(y).length &&\n //@ts-ignore\n Object.keys(x).reduce(function (isEqual, key) {\n return isEqual && deepEqual(x[key], y[key]);\n }, true) : x === y;\n}\n\nvar HotkeysContext = /*#__PURE__*/createContext({\n hotkeys: [],\n enabledScopes: [],\n toggleScope: function toggleScope() {},\n enableScope: function enableScope() {},\n disableScope: function disableScope() {}\n});\nvar useHotkeysContext = function useHotkeysContext() {\n return useContext(HotkeysContext);\n};\nvar HotkeysProvider = function HotkeysProvider(_ref) {\n var _ref$initiallyActiveS = _ref.initiallyActiveScopes,\n initiallyActiveScopes = _ref$initiallyActiveS === void 0 ? ['*'] : _ref$initiallyActiveS,\n children = _ref.children;\n var _useState = useState((initiallyActiveScopes == null ? void 0 : initiallyActiveScopes.length) > 0 ? initiallyActiveScopes : ['*']),\n internalActiveScopes = _useState[0],\n setInternalActiveScopes = _useState[1];\n var _useState2 = useState([]),\n boundHotkeys = _useState2[0],\n setBoundHotkeys = _useState2[1];\n var enableScope = useCallback(function (scope) {\n setInternalActiveScopes(function (prev) {\n if (prev.includes('*')) {\n return [scope];\n }\n return Array.from(new Set([].concat(prev, [scope])));\n });\n }, []);\n var disableScope = useCallback(function (scope) {\n setInternalActiveScopes(function (prev) {\n if (prev.filter(function (s) {\n return s !== scope;\n }).length === 0) {\n return ['*'];\n } else {\n return prev.filter(function (s) {\n return s !== scope;\n });\n }\n });\n }, []);\n var toggleScope = useCallback(function (scope) {\n setInternalActiveScopes(function (prev) {\n if (prev.includes(scope)) {\n if (prev.filter(function (s) {\n return s !== scope;\n }).length === 0) {\n return ['*'];\n } else {\n return prev.filter(function (s) {\n return s !== scope;\n });\n }\n } else {\n if (prev.includes('*')) {\n return [scope];\n }\n return Array.from(new Set([].concat(prev, [scope])));\n }\n });\n }, []);\n var addBoundHotkey = useCallback(function (hotkey) {\n setBoundHotkeys(function (prev) {\n return [].concat(prev, [hotkey]);\n });\n }, []);\n var removeBoundHotkey = useCallback(function (hotkey) {\n setBoundHotkeys(function (prev) {\n return prev.filter(function (h) {\n return !deepEqual(h, hotkey);\n });\n });\n }, []);\n return /*#__PURE__*/jsx(HotkeysContext.Provider, {\n value: {\n enabledScopes: internalActiveScopes,\n hotkeys: boundHotkeys,\n enableScope: enableScope,\n disableScope: disableScope,\n toggleScope: toggleScope\n },\n children: /*#__PURE__*/jsx(BoundHotkeysProxyProviderProvider, {\n addHotkey: addBoundHotkey,\n removeHotkey: removeBoundHotkey,\n children: children\n })\n });\n};\n\nfunction useDeepEqualMemo(value) {\n var ref = useRef(undefined);\n if (!deepEqual(ref.current, value)) {\n ref.current = value;\n }\n return ref.current;\n}\n\nvar stopPropagation = function stopPropagation(e) {\n e.stopPropagation();\n e.preventDefault();\n e.stopImmediatePropagation();\n};\nvar useSafeLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\nfunction useHotkeys(keys, callback, options, dependencies) {\n var _useState = useState(null),\n ref = _useState[0],\n setRef = _useState[1];\n var hasTriggeredRef = useRef(false);\n var _options = !(options instanceof Array) ? options : !(dependencies instanceof Array) ? dependencies : undefined;\n var _keys = isReadonlyArray(keys) ? keys.join(_options == null ? void 0 : _options.splitKey) : keys;\n var _deps = options instanceof Array ? options : dependencies instanceof Array ? dependencies : undefined;\n var memoisedCB = useCallback(callback, _deps != null ? _deps : []);\n var cbRef = useRef(memoisedCB);\n if (_deps) {\n cbRef.current = memoisedCB;\n } else {\n cbRef.current = callback;\n }\n var memoisedOptions = useDeepEqualMemo(_options);\n var _useHotkeysContext = useHotkeysContext(),\n enabledScopes = _useHotkeysContext.enabledScopes;\n var proxy = useBoundHotkeysProxy();\n useSafeLayoutEffect(function () {\n if ((memoisedOptions == null ? void 0 : memoisedOptions.enabled) === false || !isScopeActive(enabledScopes, memoisedOptions == null ? void 0 : memoisedOptions.scopes)) {\n return;\n }\n var listener = function listener(e, isKeyUp) {\n var _e$target;\n if (isKeyUp === void 0) {\n isKeyUp = false;\n }\n if (isKeyboardEventTriggeredByInput(e) && !isHotkeyEnabledOnTag(e, memoisedOptions == null ? void 0 : memoisedOptions.enableOnFormTags)) {\n return;\n }\n // TODO: SINCE THE EVENT IS NOW ATTACHED TO THE REF, THE ACTIVE ELEMENT CAN NEVER BE INSIDE THE REF. THE HOTKEY ONLY TRIGGERS IF THE\n // REF IS THE ACTIVE ELEMENT. THIS IS A PROBLEM SINCE FOCUSED SUB COMPONENTS WON'T TRIGGER THE HOTKEY.\n if (ref !== null) {\n var rootNode = ref.getRootNode();\n if ((rootNode instanceof Document || rootNode instanceof ShadowRoot) && rootNode.activeElement !== ref && !ref.contains(rootNode.activeElement)) {\n stopPropagation(e);\n return;\n }\n }\n if ((_e$target = e.target) != null && _e$target.isContentEditable && !(memoisedOptions != null && memoisedOptions.enableOnContentEditable)) {\n return;\n }\n parseKeysHookInput(_keys, memoisedOptions == null ? void 0 : memoisedOptions.splitKey).forEach(function (key) {\n var _hotkey$keys;\n var hotkey = parseHotkey(key, memoisedOptions == null ? void 0 : memoisedOptions.combinationKey);\n if (isHotkeyMatchingKeyboardEvent(e, hotkey, memoisedOptions == null ? void 0 : memoisedOptions.ignoreModifiers) || (_hotkey$keys = hotkey.keys) != null && _hotkey$keys.includes('*')) {\n if (memoisedOptions != null && memoisedOptions.ignoreEventWhen != null && memoisedOptions.ignoreEventWhen(e)) {\n return;\n }\n if (isKeyUp && hasTriggeredRef.current) {\n return;\n }\n maybePreventDefault(e, hotkey, memoisedOptions == null ? void 0 : memoisedOptions.preventDefault);\n if (!isHotkeyEnabled(e, hotkey, memoisedOptions == null ? void 0 : memoisedOptions.enabled)) {\n stopPropagation(e);\n return;\n }\n // Execute the user callback for that hotkey\n cbRef.current(e, hotkey);\n if (!isKeyUp) {\n hasTriggeredRef.current = true;\n }\n }\n });\n };\n var handleKeyDown = function handleKeyDown(event) {\n if (event.key === undefined) {\n // Synthetic event (e.g., Chrome autofill). Ignore.\n return;\n }\n pushToCurrentlyPressedKeys(mapKey(event.code));\n if ((memoisedOptions == null ? void 0 : memoisedOptions.keydown) === undefined && (memoisedOptions == null ? void 0 : memoisedOptions.keyup) !== true || memoisedOptions != null && memoisedOptions.keydown) {\n listener(event);\n }\n };\n var handleKeyUp = function handleKeyUp(event) {\n if (event.key === undefined) {\n // Synthetic event (e.g., Chrome autofill). Ignore.\n return;\n }\n removeFromCurrentlyPressedKeys(mapKey(event.code));\n hasTriggeredRef.current = false;\n if (memoisedOptions != null && memoisedOptions.keyup) {\n listener(event, true);\n }\n };\n var domNode = ref || (_options == null ? void 0 : _options.document) || document;\n // @ts-ignore\n domNode.addEventListener('keyup', handleKeyUp, _options == null ? void 0 : _options.eventListenerOptions);\n // @ts-ignore\n domNode.addEventListener('keydown', handleKeyDown, _options == null ? void 0 : _options.eventListenerOptions);\n if (proxy) {\n parseKeysHookInput(_keys, memoisedOptions == null ? void 0 : memoisedOptions.splitKey).forEach(function (key) {\n return proxy.addHotkey(parseHotkey(key, memoisedOptions == null ? void 0 : memoisedOptions.combinationKey, memoisedOptions == null ? void 0 : memoisedOptions.description));\n });\n }\n return function () {\n // @ts-ignore\n domNode.removeEventListener('keyup', handleKeyUp, _options == null ? void 0 : _options.eventListenerOptions);\n // @ts-ignore\n domNode.removeEventListener('keydown', handleKeyDown, _options == null ? void 0 : _options.eventListenerOptions);\n if (proxy) {\n parseKeysHookInput(_keys, memoisedOptions == null ? void 0 : memoisedOptions.splitKey).forEach(function (key) {\n return proxy.removeHotkey(parseHotkey(key, memoisedOptions == null ? void 0 : memoisedOptions.combinationKey, memoisedOptions == null ? void 0 : memoisedOptions.description));\n });\n }\n };\n }, [ref, _keys, memoisedOptions, enabledScopes]);\n return setRef;\n}\n\nfunction useRecordHotkeys() {\n var _useState = useState(new Set()),\n keys = _useState[0],\n setKeys = _useState[1];\n var _useState2 = useState(false),\n isRecording = _useState2[0],\n setIsRecording = _useState2[1];\n var handler = useCallback(function (event) {\n if (event.key === undefined) {\n // Synthetic event (e.g., Chrome autofill). Ignore.\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n setKeys(function (prev) {\n var newKeys = new Set(prev);\n newKeys.add(mapKey(event.code));\n return newKeys;\n });\n }, []);\n var stop = useCallback(function () {\n if (typeof document !== 'undefined') {\n document.removeEventListener('keydown', handler);\n setIsRecording(false);\n }\n }, [handler]);\n var start = useCallback(function () {\n setKeys(new Set());\n if (typeof document !== 'undefined') {\n stop();\n document.addEventListener('keydown', handler);\n setIsRecording(true);\n }\n }, [handler, stop]);\n var resetKeys = useCallback(function () {\n setKeys(new Set());\n }, []);\n return [keys, {\n start: start,\n stop: stop,\n resetKeys: resetKeys,\n isRecording: isRecording\n }];\n}\n\nexport { HotkeysProvider, isHotkeyPressed, useHotkeys, useHotkeysContext, useRecordHotkeys };\n//# sourceMappingURL=react-hotkeys-hook.esm.js.map\n","import { useHotkeys } from 'react-hotkeys-hook';\n\nexport interface UseUndoRedoShortcutsProps {\n undo: () => void;\n redo: () => void;\n canUndo: boolean;\n canRedo: boolean;\n}\n\nexport const useUndoRedoShortcuts = (props: UseUndoRedoShortcutsProps) => {\n const { undo, redo, canRedo, canUndo } = props;\n const { isMac } = window.electronAPI?.platformInfo || {};\n\n let undoShortcut = 'ctrl+z';\n let redoShortcut = 'ctrl+y';\n\n if (isMac) {\n undoShortcut = 'mod+z';\n redoShortcut = 'mod+shift+z';\n }\n\n // set handler for undo\n useHotkeys(\n undoShortcut,\n event => {\n event.preventDefault();\n if (canUndo) {\n undo();\n }\n },\n {},\n [canUndo, undo],\n );\n\n // set handler for redo\n useHotkeys(\n redoShortcut,\n event => {\n event.preventDefault();\n if (canRedo) {\n redo();\n }\n },\n {},\n [canRedo, redo],\n );\n};\n","import {\n useConnectConfig,\n useDocumentDriveServer,\n useShowAddDriveModal,\n} from '#hooks';\nimport { useGetAppNameForEditorId } from '#store';\nimport {\n HomeScreen,\n HomeScreenAddDriveItem,\n HomeScreenItem,\n} from '@powerhousedao/design-system';\nimport {\n useDocuments,\n useDrives,\n useLoadableSelectedDocument,\n useLoadableSelectedDrive,\n useLoadableSelectedFolder,\n useSelectedDocument,\n useSelectedDrive,\n useSelectedFolder,\n useSetSelectedDrive,\n} from '@powerhousedao/state';\nimport { type DocumentDriveDocument } from 'document-drive';\nimport { useCallback, useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { DocumentEditorContainer } from '../components/document-editor-container.js';\nimport { DriveEditorContainer } from '../components/drive-editor-container.js';\nimport { DriveIcon } from '../components/drive-icon.js';\nexport default function Content() {\n const { addFile } = useDocumentDriveServer();\n const selectedDrive = useSelectedDrive();\n const selectedFolder = useSelectedFolder();\n const selectedDocument = useSelectedDocument();\n\n useEffect(() => {\n return window.electronAPI?.handleFileOpen(async file => {\n if (!selectedDrive?.header.id || !selectedDocument?.header.id) {\n return;\n }\n\n await addFile(\n file.content,\n selectedDrive.header.id,\n file.name,\n selectedFolder?.id,\n );\n });\n }, [\n selectedDrive?.header.id,\n selectedFolder?.id,\n selectedDocument?.header.id,\n addFile,\n ]);\n\n return (\n <ContentContainer>\n <DocumentEditorContainer />\n <DriveEditorContainer />\n <HomeScreenContainer />\n </ContentContainer>\n );\n}\n\nfunction ContentContainer({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"flex h-full flex-col overflow-auto\" id=\"content-view\">\n {children}\n </div>\n );\n}\n\nfunction HomeScreenContainer() {\n const { pathname } = useLocation();\n const drives = useDrives();\n const loadableSelectedDrive = useLoadableSelectedDrive();\n const loadableSelectedFolder = useLoadableSelectedFolder();\n const loadableSelectedDocument = useLoadableSelectedDocument();\n const showAddDriveModal = useShowAddDriveModal();\n const setSelectedDrive = useSetSelectedDrive();\n const getAppDescriptionForEditorId = useGetAppNameForEditorId();\n const [config] = useConnectConfig();\n const handleDriveClick = useCallback(\n (drive: DocumentDriveDocument) => {\n setSelectedDrive(drive.header.id);\n },\n [setSelectedDrive],\n );\n\n const onAddDriveClick = useCallback(() => {\n showAddDriveModal();\n }, [showAddDriveModal]);\n\n const isLoading =\n loadableSelectedDrive.state === 'loading' ||\n loadableSelectedFolder.state === 'loading' ||\n loadableSelectedDocument.state === 'loading';\n\n const isError =\n loadableSelectedDrive.state === 'hasError' ||\n loadableSelectedFolder.state === 'hasError' ||\n loadableSelectedDocument.state === 'hasError';\n\n const hasSelectedDriveOrFolderOrDocument =\n !isLoading &&\n !isError &&\n (!!loadableSelectedDrive.data ||\n !!loadableSelectedFolder.data ||\n !!loadableSelectedDocument.data);\n\n if (pathname !== '/') {\n return null;\n }\n\n if (hasSelectedDriveOrFolderOrDocument) {\n return null;\n }\n\n return (\n <HomeScreen>\n {drives?.map(drive => {\n const editorId = drive.header.meta?.preferredEditor;\n const appName = editorId\n ? getAppDescriptionForEditorId(editorId)\n : undefined;\n return (\n <HomeScreenItem\n key={drive.header.id}\n title={drive.state.global.name}\n description={appName || 'Drive Explorer App'}\n icon={<DriveIcon drive={drive} />}\n onClick={() => handleDriveClick(drive)}\n />\n );\n })}\n {config.drives.addDriveEnabled && (\n <HomeScreenAddDriveItem onClick={onAddDriveClick} />\n )}\n </HomeScreen>\n );\n}\n"],"file":"assets/content.C38XllGR.js"}
|