@cedros/login-react 0.0.12 → 0.0.14
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/README.md +68 -0
- package/dist/AdminDepositList-CyT4VBH8.js +311 -0
- package/dist/AdminDepositList-CyT4VBH8.js.map +1 -0
- package/dist/AdminDepositList-b2AXtLg0.cjs +1 -0
- package/dist/AdminDepositList-b2AXtLg0.cjs.map +1 -0
- package/dist/AdminWithdrawalHistory-Cud-yuWy.js +916 -0
- package/dist/AdminWithdrawalHistory-Cud-yuWy.js.map +1 -0
- package/dist/AdminWithdrawalHistory-DL9zbu2b.cjs +1 -0
- package/dist/AdminWithdrawalHistory-DL9zbu2b.cjs.map +1 -0
- package/dist/AuthenticationSettings-D739nNul.cjs +1 -0
- package/dist/AuthenticationSettings-D739nNul.cjs.map +1 -0
- package/dist/AuthenticationSettings-DtLoxQ2z.cjs +1 -0
- package/dist/AuthenticationSettings-DtLoxQ2z.cjs.map +1 -0
- package/dist/AuthenticationSettings-Dx3JCI3m.js +9 -0
- package/dist/AuthenticationSettings-Dx3JCI3m.js.map +1 -0
- package/dist/AuthenticationSettings-vowmQPXz.js +525 -0
- package/dist/AuthenticationSettings-vowmQPXz.js.map +1 -0
- package/dist/AutosaveStatus-CCrZszKA.cjs +1 -0
- package/dist/AutosaveStatus-CCrZszKA.cjs.map +1 -0
- package/dist/AutosaveStatus-Ciyt350A.js +1497 -0
- package/dist/AutosaveStatus-Ciyt350A.js.map +1 -0
- package/dist/CreditSystemSettings-BQ3h4CyM.js +210 -0
- package/dist/CreditSystemSettings-BQ3h4CyM.js.map +1 -0
- package/dist/CreditSystemSettings-C6dUsu72.cjs +1 -0
- package/dist/CreditSystemSettings-C6dUsu72.cjs.map +1 -0
- package/dist/CreditSystemSettings-CBot8EPW.cjs +1 -0
- package/dist/CreditSystemSettings-CBot8EPW.cjs.map +1 -0
- package/dist/CreditSystemSettings-bVuNLsqp.js +9 -0
- package/dist/CreditSystemSettings-bVuNLsqp.js.map +1 -0
- package/dist/DepositsSection-BkKUS4vk.cjs +1 -0
- package/dist/DepositsSection-BkKUS4vk.cjs.map +1 -0
- package/dist/{DepositsSection-0Hqr0yDm.js → DepositsSection-DD9MKUFt.js} +20 -14
- package/dist/DepositsSection-DD9MKUFt.js.map +1 -0
- package/dist/EmailRegisterForm-Pvm3I8GP.cjs +1 -0
- package/dist/EmailRegisterForm-Pvm3I8GP.cjs.map +1 -0
- package/dist/EmailRegisterForm-nI0BOIxR.js +927 -0
- package/dist/EmailRegisterForm-nI0BOIxR.js.map +1 -0
- package/dist/EmailSettings-B9qwPSiM.cjs +1 -0
- package/dist/EmailSettings-B9qwPSiM.cjs.map +1 -0
- package/dist/EmailSettings-CCA8dNCi.js +17 -0
- package/dist/EmailSettings-CCA8dNCi.js.map +1 -0
- package/dist/EmailSettings-RbgAq9FB.cjs +1 -0
- package/dist/EmailSettings-RbgAq9FB.cjs.map +1 -0
- package/dist/{AuthenticationSettings-BSoIQ58T.js → EmailSettings-mxlKNcPl.js} +3 -3
- package/dist/EmailSettings-mxlKNcPl.js.map +1 -0
- package/dist/EmbeddedWalletSettings-B4h-8rxB.cjs +1 -0
- package/dist/EmbeddedWalletSettings-B4h-8rxB.cjs.map +1 -0
- package/dist/EmbeddedWalletSettings-BInZvFZf.js +79 -0
- package/dist/EmbeddedWalletSettings-BInZvFZf.js.map +1 -0
- package/dist/{EmbeddedWalletSettings-iVf_3pn3.js → EmbeddedWalletSettings-CXlZFFDw.js} +3 -3
- package/dist/EmbeddedWalletSettings-CXlZFFDw.js.map +1 -0
- package/dist/EmbeddedWalletSettings-D5JXae1L.cjs +1 -0
- package/dist/EmbeddedWalletSettings-D5JXae1L.cjs.map +1 -0
- package/dist/ErrorMessage-CHbYbVi2.cjs +1 -0
- package/dist/ErrorMessage-CHbYbVi2.cjs.map +1 -0
- package/dist/ErrorMessage-CcEK0pYO.js +64 -0
- package/dist/ErrorMessage-CcEK0pYO.js.map +1 -0
- package/dist/{GoogleLoginButton-BzHr545L.js → GoogleLoginButton-CXwp4LsQ.js} +4 -3
- package/dist/{GoogleLoginButton-BzHr545L.js.map → GoogleLoginButton-CXwp4LsQ.js.map} +1 -1
- package/dist/GoogleLoginButton-zS_69-KV.cjs +1 -0
- package/dist/{GoogleLoginButton-DoAdOqb3.cjs.map → GoogleLoginButton-zS_69-KV.cjs.map} +1 -1
- package/dist/LoadingSpinner-6vml-zwr.js +79 -0
- package/dist/LoadingSpinner-6vml-zwr.js.map +1 -0
- package/dist/LoadingSpinner-d6sSxgQN.cjs +1 -0
- package/dist/LoadingSpinner-d6sSxgQN.cjs.map +1 -0
- package/dist/PermissionsSection-BPbE-hNx.cjs +1 -0
- package/dist/PermissionsSection-BPbE-hNx.cjs.map +1 -0
- package/dist/PermissionsSection-CighC1p6.js +1026 -0
- package/dist/PermissionsSection-CighC1p6.js.map +1 -0
- package/dist/ServerSettings-BE8fsE5k.js +84 -0
- package/dist/ServerSettings-BE8fsE5k.js.map +1 -0
- package/dist/ServerSettings-CYTlQ2xy.cjs +1 -0
- package/dist/ServerSettings-CYTlQ2xy.cjs.map +1 -0
- package/dist/ServerSettings-DFs9jQ3f.cjs +1 -0
- package/dist/ServerSettings-DFs9jQ3f.cjs.map +1 -0
- package/dist/{ServerSettings-C_osdbiX.js → ServerSettings-pSmWDC1d.js} +3 -3
- package/dist/ServerSettings-pSmWDC1d.js.map +1 -0
- package/dist/SettingsPageLayout--GZ_iHLc.js +50 -0
- package/dist/SettingsPageLayout--GZ_iHLc.js.map +1 -0
- package/dist/SettingsPageLayout-j5lMjEID.cjs +1 -0
- package/dist/SettingsPageLayout-j5lMjEID.cjs.map +1 -0
- package/dist/SolanaLoginButton-BjOxpE1C.cjs +1 -0
- package/dist/{SolanaLoginButton-CPzms0kf.cjs.map → SolanaLoginButton-BjOxpE1C.cjs.map} +1 -1
- package/dist/{SolanaLoginButton-C-CfZxAZ.js → SolanaLoginButton-P22QjBaO.js} +5 -4
- package/dist/{SolanaLoginButton-C-CfZxAZ.js.map → SolanaLoginButton-P22QjBaO.js.map} +1 -1
- package/dist/StatsBar-BX-hHtTq.js +66 -0
- package/dist/StatsBar-BX-hHtTq.js.map +1 -0
- package/dist/StatsBar-DTUZCwDD.cjs +1 -0
- package/dist/StatsBar-DTUZCwDD.cjs.map +1 -0
- package/dist/{TeamSection-Bjt72upx.js → TeamSection-BIECkp7g.js} +27 -26
- package/dist/TeamSection-BIECkp7g.js.map +1 -0
- package/dist/TeamSection-BOH9pv_E.cjs +1 -0
- package/dist/TeamSection-BOH9pv_E.cjs.map +1 -0
- package/dist/UsersSection-e6q7FHzx.cjs +1 -0
- package/dist/UsersSection-e6q7FHzx.cjs.map +1 -0
- package/dist/UsersSection-t-zm0jZW.js +33 -0
- package/dist/UsersSection-t-zm0jZW.js.map +1 -0
- package/dist/{WebhookSettings-IyhyTFes.js → WebhookSettings-Bb70MbFj.js} +4 -4
- package/dist/WebhookSettings-Bb70MbFj.js.map +1 -0
- package/dist/WebhookSettings-C-gvNAW1.cjs +1 -0
- package/dist/WebhookSettings-C-gvNAW1.cjs.map +1 -0
- package/dist/WebhookSettings-CGyDKjrm.cjs +1 -0
- package/dist/WebhookSettings-CGyDKjrm.cjs.map +1 -0
- package/dist/WebhookSettings-kIstSjZi.js +17 -0
- package/dist/WebhookSettings-kIstSjZi.js.map +1 -0
- package/dist/WithdrawalsSection-sljIyeaz.cjs +1 -0
- package/dist/WithdrawalsSection-sljIyeaz.cjs.map +1 -0
- package/dist/WithdrawalsSection-yRDTVFsb.js +27 -0
- package/dist/WithdrawalsSection-yRDTVFsb.js.map +1 -0
- package/dist/admin-only.cjs +1 -0
- package/dist/admin-only.cjs.map +1 -0
- package/dist/{admin/types.d.ts → admin-only.d.ts} +228 -167
- package/dist/admin-only.js +8 -0
- package/dist/admin-only.js.map +1 -0
- package/dist/assets/argon2Worker-Bi5TuQvD.js.map +1 -1
- package/dist/email-only.cjs +1 -1
- package/dist/email-only.d.ts +645 -16
- package/dist/email-only.js +16 -13
- package/dist/email-only.js.map +1 -1
- package/dist/google-only.cjs +1 -1
- package/dist/google-only.d.ts +554 -13
- package/dist/google-only.js +11 -8
- package/dist/google-only.js.map +1 -1
- package/dist/index.cjs +2061 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +5030 -144
- package/dist/index.js +13482 -117
- package/dist/index.js.map +1 -1
- package/dist/login-react.css +1 -1
- package/dist/plugin-8_dpq7tC.cjs +1 -0
- package/dist/plugin-8_dpq7tC.cjs.map +1 -0
- package/dist/plugin-D1NdppqC.js +596 -0
- package/dist/plugin-D1NdppqC.js.map +1 -0
- package/dist/sanitization-Bo_tn-L2.cjs +1 -0
- package/dist/sanitization-Bo_tn-L2.cjs.map +1 -0
- package/dist/sanitization-CQ-H1MSg.js +39 -0
- package/dist/sanitization-CQ-H1MSg.js.map +1 -0
- package/dist/shamir-4DyQMJCk.cjs +1 -0
- package/dist/shamir-4DyQMJCk.cjs.map +1 -0
- package/dist/{solanaKeypair-BlXol3nh.js → shamir-L-s-Tp1Z.js} +765 -757
- package/dist/shamir-L-s-Tp1Z.js.map +1 -0
- package/dist/silentWalletEnroll-BgTb4H5I.cjs +1 -0
- package/dist/silentWalletEnroll-BgTb4H5I.cjs.map +1 -0
- package/dist/silentWalletEnroll-DWt6Pr3B.js +41 -0
- package/dist/silentWalletEnroll-DWt6Pr3B.js.map +1 -0
- package/dist/solana-only.cjs +1 -1
- package/dist/solana-only.d.ts +605 -13
- package/dist/solana-only.js +12 -9
- package/dist/solana-only.js.map +1 -1
- package/dist/style.d.ts +1 -0
- package/dist/useAdminDeposits-BTSyeAfg.js +151 -0
- package/dist/useAdminDeposits-BTSyeAfg.js.map +1 -0
- package/dist/useAdminDeposits-BkkCwHWp.cjs +1 -0
- package/dist/useAdminDeposits-BkkCwHWp.cjs.map +1 -0
- package/dist/{ErrorMessage-DU2VBb85.js → useAuth-C3dpk0po.js} +1005 -1241
- package/dist/useAuth-C3dpk0po.js.map +1 -0
- package/dist/useAuth-D3Pk_H3z.cjs +1 -0
- package/dist/useAuth-D3Pk_H3z.cjs.map +1 -0
- package/dist/useCedrosLogin-C9MrcZvh.cjs +1 -0
- package/dist/useCedrosLogin-C9MrcZvh.cjs.map +1 -0
- package/dist/useCedrosLogin-_94MmGGq.js +216 -0
- package/dist/useCedrosLogin-_94MmGGq.js.map +1 -0
- package/dist/useOrgs-C3pzMA9h.js +215 -0
- package/dist/useOrgs-C3pzMA9h.js.map +1 -0
- package/dist/useOrgs-DDVRCaVi.cjs +1 -0
- package/dist/useOrgs-DDVRCaVi.cjs.map +1 -0
- package/dist/useSystemSettings-DBlAMjFi.js +97 -0
- package/dist/useSystemSettings-DBlAMjFi.js.map +1 -0
- package/dist/useSystemSettings-DRrreszl.cjs +1 -0
- package/dist/useSystemSettings-DRrreszl.cjs.map +1 -0
- package/dist/useUsersStatsSummary-8qY7iP4G.cjs +1 -0
- package/dist/useUsersStatsSummary-8qY7iP4G.cjs.map +1 -0
- package/dist/useUsersStatsSummary-NjEFvWuz.js +1246 -0
- package/dist/useUsersStatsSummary-NjEFvWuz.js.map +1 -0
- package/dist/{validation-BebL7hMF.js → validation-B8kMV3BL.js} +1 -1
- package/dist/{validation-BebL7hMF.js.map → validation-B8kMV3BL.js.map} +1 -1
- package/dist/{validation-BeXIfuHB.cjs → validation-BuGQrA-K.cjs} +1 -1
- package/dist/{validation-BeXIfuHB.cjs.map → validation-BuGQrA-K.cjs.map} +1 -1
- package/package.json +11 -1
- package/dist/AuthenticationSettings-BSoIQ58T.js.map +0 -1
- package/dist/AuthenticationSettings-CNmWEPFV.cjs +0 -1
- package/dist/AuthenticationSettings-CNmWEPFV.cjs.map +0 -1
- package/dist/CreditSystemSettings-BYxoFwaP.js +0 -9
- package/dist/CreditSystemSettings-BYxoFwaP.js.map +0 -1
- package/dist/CreditSystemSettings-D2fLorNx.cjs +0 -1
- package/dist/CreditSystemSettings-D2fLorNx.cjs.map +0 -1
- package/dist/DepositsSection-0Hqr0yDm.js.map +0 -1
- package/dist/DepositsSection-CGKCzM-H.cjs +0 -1
- package/dist/DepositsSection-CGKCzM-H.cjs.map +0 -1
- package/dist/EmailRegisterForm-C0PStlj5.js +0 -961
- package/dist/EmailRegisterForm-C0PStlj5.js.map +0 -1
- package/dist/EmailRegisterForm-DaPLGws2.cjs +0 -1
- package/dist/EmailRegisterForm-DaPLGws2.cjs.map +0 -1
- package/dist/EmailSettings-CiLDwzNb.cjs +0 -1
- package/dist/EmailSettings-CiLDwzNb.cjs.map +0 -1
- package/dist/EmailSettings-DTjpO65J.js +0 -9
- package/dist/EmailSettings-DTjpO65J.js.map +0 -1
- package/dist/EmbeddedWalletSettings-CX7sYiPy.cjs +0 -1
- package/dist/EmbeddedWalletSettings-CX7sYiPy.cjs.map +0 -1
- package/dist/EmbeddedWalletSettings-iVf_3pn3.js.map +0 -1
- package/dist/ErrorMessage-BXHiYibN.cjs +0 -1
- package/dist/ErrorMessage-BXHiYibN.cjs.map +0 -1
- package/dist/ErrorMessage-DU2VBb85.js.map +0 -1
- package/dist/GoogleLoginButton-DoAdOqb3.cjs +0 -1
- package/dist/ServerSettings-C_osdbiX.js.map +0 -1
- package/dist/ServerSettings-HqSb_VDj.cjs +0 -1
- package/dist/ServerSettings-HqSb_VDj.cjs.map +0 -1
- package/dist/SolanaLoginButton-CPzms0kf.cjs +0 -1
- package/dist/TeamSection-Bjt72upx.js.map +0 -1
- package/dist/TeamSection-DZeWHkLd.cjs +0 -1
- package/dist/TeamSection-DZeWHkLd.cjs.map +0 -1
- package/dist/UsersSection-DU86czWP.cjs +0 -1
- package/dist/UsersSection-DU86czWP.cjs.map +0 -1
- package/dist/UsersSection-hAcyfSZk.js +0 -81
- package/dist/UsersSection-hAcyfSZk.js.map +0 -1
- package/dist/WebhookSettings-Br9bakAL.cjs +0 -1
- package/dist/WebhookSettings-Br9bakAL.cjs.map +0 -1
- package/dist/WebhookSettings-IyhyTFes.js.map +0 -1
- package/dist/WithdrawalsSection-B1415d-G.js +0 -20
- package/dist/WithdrawalsSection-B1415d-G.js.map +0 -1
- package/dist/WithdrawalsSection-iZJBuZ7O.cjs +0 -1
- package/dist/WithdrawalsSection-iZJBuZ7O.cjs.map +0 -1
- package/dist/admin/AdminShell.d.ts +0 -38
- package/dist/admin/icons.d.ts +0 -2
- package/dist/admin/index.d.ts +0 -10
- package/dist/admin/plugin.d.ts +0 -3
- package/dist/admin/sections/AuthenticationSettings.d.ts +0 -3
- package/dist/admin/sections/CreditSystemSettings.d.ts +0 -3
- package/dist/admin/sections/DepositsSection.d.ts +0 -3
- package/dist/admin/sections/EmailSettings.d.ts +0 -3
- package/dist/admin/sections/EmbeddedWalletSettings.d.ts +0 -3
- package/dist/admin/sections/FeatureSettings.d.ts +0 -3
- package/dist/admin/sections/InvitesSection.d.ts +0 -3
- package/dist/admin/sections/MembersSection.d.ts +0 -3
- package/dist/admin/sections/ServerSettings.d.ts +0 -3
- package/dist/admin/sections/SettingsSections.d.ts +0 -7
- package/dist/admin/sections/TeamSection.d.ts +0 -3
- package/dist/admin/sections/UsersSection.d.ts +0 -3
- package/dist/admin/sections/WebhookSettings.d.ts +0 -3
- package/dist/admin/sections/WithdrawalsSection.d.ts +0 -3
- package/dist/components/LoginButton.d.ts +0 -23
- package/dist/components/LoginForm.d.ts +0 -9
- package/dist/components/LoginModal.d.ts +0 -9
- package/dist/components/admin/AdminUserDetail.d.ts +0 -23
- package/dist/components/admin/AdminUserList.d.ts +0 -21
- package/dist/components/admin/CedrosAdminDashboard.d.ts +0 -52
- package/dist/components/admin/PermissionsSection.d.ts +0 -7
- package/dist/components/admin/ProfileDropdown.d.ts +0 -34
- package/dist/components/admin/SetupWizard.d.ts +0 -30
- package/dist/components/admin/StatsBar.d.ts +0 -17
- package/dist/components/admin/SystemSettings.d.ts +0 -19
- package/dist/components/admin/settings/AuthenticationSettings.d.ts +0 -4
- package/dist/components/admin/settings/AutosaveStatus.d.ts +0 -6
- package/dist/components/admin/settings/CreditSystemSettings.d.ts +0 -6
- package/dist/components/admin/settings/EmailSettings.d.ts +0 -4
- package/dist/components/admin/settings/EmbeddedWalletSettings.d.ts +0 -4
- package/dist/components/admin/settings/FeatureSettings.d.ts +0 -4
- package/dist/components/admin/settings/MessagingSettings.d.ts +0 -4
- package/dist/components/admin/settings/SecuritySettings.d.ts +0 -4
- package/dist/components/admin/settings/ServerSettings.d.ts +0 -4
- package/dist/components/admin/settings/SettingsPageLayout.d.ts +0 -16
- package/dist/components/admin/settings/SsoProvidersSettings.d.ts +0 -4
- package/dist/components/admin/settings/WebhookSettings.d.ts +0 -4
- package/dist/components/admin/settings/index.d.ts +0 -31
- package/dist/components/admin/settings/settingsInputs.d.ts +0 -79
- package/dist/components/admin/settings/settingsMetadata.d.ts +0 -18
- package/dist/components/apple/AppleLoginButton.d.ts +0 -29
- package/dist/components/deposit/CreditBalance.d.ts +0 -19
- package/dist/components/deposit/DepositFlow.d.ts +0 -118
- package/dist/components/deposit/FeeConfigDisplay.d.ts +0 -15
- package/dist/components/deposit/History.d.ts +0 -21
- package/dist/components/deposit/TieredAmountSlider.d.ts +0 -19
- package/dist/components/deposit/TokenSelector.d.ts +0 -23
- package/dist/components/deposit/admin/AdminDepositList.d.ts +0 -21
- package/dist/components/deposit/admin/AdminDepositStats.d.ts +0 -15
- package/dist/components/deposit/admin/AdminPrivacyPeriodDeposits.d.ts +0 -19
- package/dist/components/deposit/admin/AdminWithdrawalHistory.d.ts +0 -19
- package/dist/components/deposit/admin/AdminWithdrawalQueue.d.ts +0 -23
- package/dist/components/deposit/admin/AdminWithdrawalStats.d.ts +0 -10
- package/dist/components/deposit/admin/FeatureDisabledMessage.d.ts +0 -15
- package/dist/components/deposit/admin/PrivacySystemStatus.d.ts +0 -15
- package/dist/components/deposit/admin/featureDisabled.d.ts +0 -14
- package/dist/components/deposit/admin/index.d.ts +0 -22
- package/dist/components/deposit/index.d.ts +0 -12
- package/dist/components/deposit/tierUtils.d.ts +0 -8
- package/dist/components/deposit/tokens.d.ts +0 -19
- package/dist/components/email/EmailLoginForm.d.ts +0 -11
- package/dist/components/email/EmailRegisterForm.d.ts +0 -14
- package/dist/components/email/ForgotPasswordForm.d.ts +0 -17
- package/dist/components/email/PasswordInput.d.ts +0 -14
- package/dist/components/email/ResetPasswordForm.d.ts +0 -22
- package/dist/components/google/GoogleLoginButton.d.ts +0 -12
- package/dist/components/invites/InviteForm.d.ts +0 -38
- package/dist/components/invites/InviteList.d.ts +0 -40
- package/dist/components/members/MemberList.d.ts +0 -47
- package/dist/components/org/CreateOrgForm.d.ts +0 -7
- package/dist/components/org/OrgAvatar.d.ts +0 -7
- package/dist/components/org/OrgListView.d.ts +0 -9
- package/dist/components/org/OrgSelector.d.ts +0 -52
- package/dist/components/org/OrgSwitcher.d.ts +0 -47
- package/dist/components/org/icons.d.ts +0 -8
- package/dist/components/profile/UserProfileSettings.d.ts +0 -35
- package/dist/components/profile/index.d.ts +0 -2
- package/dist/components/sessions/SessionList.d.ts +0 -33
- package/dist/components/shared/ErrorBoundary.d.ts +0 -38
- package/dist/components/shared/ErrorMessage.d.ts +0 -14
- package/dist/components/shared/LoadingSpinner.d.ts +0 -16
- package/dist/components/solana/SolanaLoginButton.d.ts +0 -49
- package/dist/components/templates/FullPageLayout.d.ts +0 -40
- package/dist/components/templates/SplitPageLayout.d.ts +0 -44
- package/dist/components/templates/index.d.ts +0 -4
- package/dist/components/totp/OtpInput.d.ts +0 -32
- package/dist/components/totp/QrCode.d.ts +0 -21
- package/dist/components/totp/TotpSettings.d.ts +0 -38
- package/dist/components/totp/TotpSetup.d.ts +0 -23
- package/dist/components/totp/TotpVerify.d.ts +0 -25
- package/dist/components/totp/index.d.ts +0 -10
- package/dist/components/wallet/CapabilityWarning.d.ts +0 -11
- package/dist/components/wallet/PasskeyPrompt.d.ts +0 -34
- package/dist/components/wallet/RecoveryPhraseDisplay.d.ts +0 -18
- package/dist/components/wallet/RecoveryPhraseInput.d.ts +0 -21
- package/dist/components/wallet/WalletAddressRow.d.ts +0 -10
- package/dist/components/wallet/WalletEnrollment.d.ts +0 -15
- package/dist/components/wallet/WalletManager.d.ts +0 -9
- package/dist/components/wallet/WalletRecovery.d.ts +0 -19
- package/dist/components/wallet/WalletStatus.d.ts +0 -28
- package/dist/components/wallet/WalletUnlock.d.ts +0 -23
- package/dist/components/wallet/index.d.ts +0 -23
- package/dist/components/webauthn/PasskeyLoginButton.d.ts +0 -8
- package/dist/context/CedrosLoginContext.d.ts +0 -24
- package/dist/context/CedrosLoginProvider.d.ts +0 -17
- package/dist/context/EmbeddedWalletExposure.d.ts +0 -19
- package/dist/context/useCedrosLogin.d.ts +0 -12
- package/dist/crypto/aesGcm.d.ts +0 -89
- package/dist/crypto/argon2.d.ts +0 -65
- package/dist/crypto/argon2Worker.d.ts +0 -1
- package/dist/crypto/argon2WorkerClient.d.ts +0 -28
- package/dist/crypto/bip39.d.ts +0 -106
- package/dist/crypto/capabilities.d.ts +0 -35
- package/dist/crypto/entropy.d.ts +0 -56
- package/dist/crypto/hkdf.d.ts +0 -38
- package/dist/crypto/index.d.ts +0 -30
- package/dist/crypto/secureWipe.d.ts +0 -71
- package/dist/crypto/shamir.d.ts +0 -52
- package/dist/crypto/solanaKeypair.d.ts +0 -63
- package/dist/crypto/types.d.ts +0 -134
- package/dist/crypto/webauthnPrf.d.ts +0 -108
- package/dist/hooks/useAdminDeposits.d.ts +0 -10
- package/dist/hooks/useAdminUsers.d.ts +0 -28
- package/dist/hooks/useAppleAuth.d.ts +0 -52
- package/dist/hooks/useAuth.d.ts +0 -34
- package/dist/hooks/useAuthSession.d.ts +0 -19
- package/dist/hooks/useAuthorize.d.ts +0 -62
- package/dist/hooks/useCredits.d.ts +0 -11
- package/dist/hooks/useDashboardPermissions.d.ts +0 -45
- package/dist/hooks/useDeposit.d.ts +0 -16
- package/dist/hooks/useEmailAuth.d.ts +0 -60
- package/dist/hooks/useGoogleAuth.d.ts +0 -67
- package/dist/hooks/useInstantLink.d.ts +0 -42
- package/dist/hooks/useInvites.d.ts +0 -57
- package/dist/hooks/useMembers.d.ts +0 -52
- package/dist/hooks/useOrgs.d.ts +0 -49
- package/dist/hooks/usePasswordReset.d.ts +0 -32
- package/dist/hooks/usePendingRecovery.d.ts +0 -34
- package/dist/hooks/useProfile.d.ts +0 -35
- package/dist/hooks/useRateLimiter.d.ts +0 -58
- package/dist/hooks/useServerFeatures.d.ts +0 -55
- package/dist/hooks/useSessions.d.ts +0 -45
- package/dist/hooks/useSettingsAutosave.d.ts +0 -29
- package/dist/hooks/useSetup.d.ts +0 -25
- package/dist/hooks/useSolanaAuth.d.ts +0 -30
- package/dist/hooks/useSsoProviders.d.ts +0 -52
- package/dist/hooks/useSystemSettings.d.ts +0 -47
- package/dist/hooks/useThemeManager.d.ts +0 -11
- package/dist/hooks/useTotp.d.ts +0 -52
- package/dist/hooks/useTotpVerify.d.ts +0 -38
- package/dist/hooks/useTransactionSigning.d.ts +0 -45
- package/dist/hooks/useWallet.d.ts +0 -10
- package/dist/hooks/useWalletDiscovery.d.ts +0 -24
- package/dist/hooks/useWalletEnrollment.d.ts +0 -9
- package/dist/hooks/useWalletMaterial.d.ts +0 -10
- package/dist/hooks/useWalletRecovery.d.ts +0 -9
- package/dist/hooks/useWalletSigning.d.ts +0 -31
- package/dist/hooks/useWebAuthn.d.ts +0 -25
- package/dist/i18n/I18nProvider.d.ts +0 -16
- package/dist/i18n/context.d.ts +0 -6
- package/dist/i18n/index.d.ts +0 -5
- package/dist/i18n/translations.d.ts +0 -66
- package/dist/i18n/useI18n.d.ts +0 -9
- package/dist/index-ZS9AwAal.cjs +0 -2061
- package/dist/index-ZS9AwAal.cjs.map +0 -1
- package/dist/index-dgg5tlO7.js +0 -19650
- package/dist/index-dgg5tlO7.js.map +0 -1
- package/dist/silentWalletEnroll-C3JRAD9_.js +0 -42
- package/dist/silentWalletEnroll-C3JRAD9_.js.map +0 -1
- package/dist/silentWalletEnroll-DRYQAQfg.cjs +0 -1
- package/dist/silentWalletEnroll-DRYQAQfg.cjs.map +0 -1
- package/dist/solanaKeypair-BlXol3nh.js.map +0 -1
- package/dist/solanaKeypair-C-lIR1JY.cjs +0 -1
- package/dist/solanaKeypair-C-lIR1JY.cjs.map +0 -1
- package/dist/types/adminUser.d.ts +0 -168
- package/dist/types/auth.d.ts +0 -122
- package/dist/types/config.d.ts +0 -266
- package/dist/types/deposit.d.ts +0 -490
- package/dist/types/index.d.ts +0 -13
- package/dist/types/invite.d.ts +0 -71
- package/dist/types/member.d.ts +0 -45
- package/dist/types/org.d.ts +0 -133
- package/dist/types/profile.d.ts +0 -56
- package/dist/types/session.d.ts +0 -28
- package/dist/types/setup.d.ts +0 -47
- package/dist/types/systemSettings.d.ts +0 -85
- package/dist/types/totp.d.ts +0 -52
- package/dist/types/wallet.d.ts +0 -309
- package/dist/utils/adminUserApi.d.ts +0 -60
- package/dist/utils/apiClient.d.ts +0 -78
- package/dist/utils/cryptoShim.d.ts +0 -17
- package/dist/utils/csrf.d.ts +0 -1
- package/dist/utils/deviceDetection.d.ts +0 -17
- package/dist/utils/embeddedWallet.d.ts +0 -75
- package/dist/utils/inviteApi.d.ts +0 -31
- package/dist/utils/memberApi.d.ts +0 -23
- package/dist/utils/orgApi.d.ts +0 -36
- package/dist/utils/profileApi.d.ts +0 -26
- package/dist/utils/sanitization.d.ts +0 -66
- package/dist/utils/sessionApi.d.ts +0 -16
- package/dist/utils/setupApi.d.ts +0 -21
- package/dist/utils/silentWalletEnroll.d.ts +0 -41
- package/dist/utils/systemSettingsApi.d.ts +0 -18
- package/dist/utils/tabSync.d.ts +0 -46
- package/dist/utils/tokenManager.d.ts +0 -107
- package/dist/utils/unlockCredential.d.ts +0 -5
- package/dist/utils/validation.d.ts +0 -48
- package/dist/utils/walletDetection.d.ts +0 -23
- package/dist/utils/webauthnJson.d.ts +0 -21
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),n=require("react"),C=require("./LoadingSpinner-d6sSxgQN.cjs");function A({name:a,email:i,picture:r,onSettings:c,onLogout:p,className:P=""}){const[u,j]=n.useState(!1),w=n.useRef(null);n.useEffect(()=>{function x(_){w.current&&!w.current.contains(_.target)&&j(!1)}if(u)return document.addEventListener("mousedown",x),()=>document.removeEventListener("mousedown",x)},[u]),n.useEffect(()=>{function x(_){_.key==="Escape"&&j(!1)}if(u)return document.addEventListener("keydown",x),()=>document.removeEventListener("keydown",x)},[u]);const S=n.useCallback(()=>{j(!1),c?.()},[c]),M=n.useCallback(()=>{j(!1),p?.()},[p]),y=a||"User",h=(a?.[0]||i?.[0]||"?").toUpperCase();return e.jsxs("div",{className:`cedros-profile-dropdown ${P}`,ref:w,children:[e.jsxs("button",{type:"button",className:"cedros-profile-dropdown__trigger",onClick:()=>j(!u),"aria-expanded":u,"aria-haspopup":"menu",children:[e.jsx("div",{className:"cedros-profile-dropdown__avatar",children:r?e.jsx("img",{src:r,alt:y,className:"cedros-profile-dropdown__avatar-img",referrerPolicy:"no-referrer"}):e.jsx("span",{className:"cedros-profile-dropdown__avatar-placeholder",children:h})}),e.jsxs("div",{className:"cedros-profile-dropdown__info",children:[e.jsx("span",{className:"cedros-profile-dropdown__name",children:y}),i&&e.jsx("span",{className:"cedros-profile-dropdown__email",children:i})]}),e.jsx("svg",{className:`cedros-profile-dropdown__chevron ${u?"cedros-profile-dropdown__chevron--open":""}`,width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("path",{d:"m6 9 6 6 6-6"})})]}),u&&e.jsxs("div",{className:"cedros-profile-dropdown__menu",role:"menu",children:[c&&e.jsxs("button",{type:"button",className:"cedros-profile-dropdown__item",onClick:S,role:"menuitem",children:[e.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),e.jsx("circle",{cx:"12",cy:"12",r:"3"})]}),"Settings"]}),p&&e.jsxs("button",{type:"button",className:"cedros-profile-dropdown__item cedros-profile-dropdown__item--danger",onClick:M,role:"menuitem",children:[e.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"}),e.jsx("polyline",{points:"16 17 21 12 16 7"}),e.jsx("line",{x1:"21",x2:"9",y1:"12",y2:"12"})]}),"Log out"]})]})]})}class T{plugins=new Map;listeners=new Set;register(i){this.plugins.has(i.id)&&console.warn(`Plugin ${i.id} already registered, replacing...`),this.plugins.set(i.id,i),i.onRegister?.(this),this.notify()}unregister(i){const r=this.plugins.get(i);r&&(r.onUnregister?.(),this.plugins.delete(i),this.notify())}get(i){return this.plugins.get(i)}getAll(){return Array.from(this.plugins.values())}subscribe(i){return this.listeners.add(i),()=>this.listeners.delete(i)}notify(){const i=this.getAll();this.listeners.forEach(r=>r(i))}}const I=n.createContext(null);function $(){const a=n.useContext(I);if(!a)throw new Error("useAdminShell must be used within AdminShell");return a}function B(a){const i=new Map;for(const r of a)for(const c of r.groups??[])i.has(c.label)||i.set(c.label,c.order);return i}function G({title:a="Admin",plugins:i=[],hostContext:r,defaultSection:c,pageSize:p=20,refreshInterval:P=0,onSectionChange:u,logo:j,sidebarFooter:w,onSettingsClick:S,onLogoutClick:M,className:y=""}){const[h]=n.useState(()=>{const s=new T;return i.forEach(o=>s.register(o)),s}),[x,_]=n.useState(()=>h.getAll());n.useEffect(()=>h.subscribe(_),[h]);const f=n.useMemo(()=>x.flatMap(s=>s.sections.filter(o=>!(o.requiredPermission&&!s.checkPermission(o.requiredPermission,r)||r.dashboardPermissions&&!r.dashboardPermissions.canAccess(o.id))).map(o=>({...o,qualifiedId:`${s.id}:${o.id}`,pluginId:s.id,cssNamespace:s.cssNamespace}))),[x,r]),[v,q]=n.useState(()=>c??f[0]?.qualifiedId??null),[E,U]=n.useState(new Set),z=n.useCallback(s=>{U(o=>{const d=new Set(o);return d.has(s)?d.delete(s):d.add(s),d})},[]);n.useEffect(()=>{v&&!f.find(s=>s.qualifiedId===v)&&q(f[0]?.qualifiedId??null)},[f,v]);const L=n.useCallback(s=>{q(s),u?.(s)},[u]),N=n.useCallback(s=>{const o=h.get(s);return o?o.createPluginContext(r):null},[h,r]),V=n.useMemo(()=>{const s=B(x),o=new Map;return f.forEach(g=>{const l=g.group??"Menu",b=o.get(l)??[];o.set(l,[...b,g])}),Array.from(o.entries()).sort(([g],[l])=>{const b=s.get(g)??99,O=s.get(l)??99;return b-O})},[f,x]),k=n.useMemo(()=>{if(!v)return null;const[s,o]=v.split(":"),d=h.get(s);if(!d)return null;const g=d.components[o];if(!g)return null;const l=d.createPluginContext(r);return{Component:g,pluginContext:l,plugin:d}},[v,h,r]),W=n.useMemo(()=>({registry:h,hostContext:r,activeSection:v,setActiveSection:L,getPluginContext:N}),[h,r,v,L,N]),R=n.useMemo(()=>{const s=r.cedrosLogin;if(!s)return null;const o=s.user?{authMethods:[],emailVerified:!1,createdAt:"",updatedAt:"",...s.user}:null;return{config:{serverUrl:s.serverUrl},user:o,authState:s.user?"authenticated":"unauthenticated",error:null,logout:async()=>{},refreshUser:async()=>{},isModalOpen:!1,openModal:()=>{},closeModal:()=>{},_internal:{handleLoginSuccess:()=>{},getAccessToken:s.getAccessToken}}},[r.cedrosLogin]);return e.jsx(I.Provider,{value:W,children:e.jsx(C.CedrosLoginContext.Provider,{value:R,children:e.jsxs("div",{className:`cedros-admin cedros-admin-shell ${y||""}`,children:[e.jsxs("aside",{className:"cedros-admin-shell__sidebar",children:[e.jsx("div",{className:"cedros-admin-shell__sidebar-header",children:j??e.jsx("div",{className:"cedros-admin-shell__logo",children:e.jsx("span",{className:"cedros-admin-shell__logo-text",children:a})})}),e.jsx("nav",{className:"cedros-admin-shell__nav",children:V.map(([s,o])=>{const d=s==="Configuration",g=E.has(s);return e.jsxs("div",{className:"cedros-admin-shell__nav-group",children:[d?e.jsxs("button",{type:"button",className:"cedros-admin-shell__nav-label cedros-admin-shell__nav-label--collapsible",onClick:()=>z(s),"aria-expanded":!g,children:[e.jsx("span",{children:s}),e.jsx("span",{className:`cedros-admin-shell__nav-chevron ${g?"":"cedros-admin-shell__nav-chevron--expanded"}`,children:e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("path",{d:"m9 18 6-6-6-6"})})})]}):e.jsx("span",{className:"cedros-admin-shell__nav-label",children:s}),(!d||!g)&&o.sort((l,b)=>(l.order??0)-(b.order??0)).map(l=>e.jsxs("button",{type:"button",className:`cedros-admin-shell__nav-item ${v===l.qualifiedId?"cedros-admin-shell__nav-item--active":""}`,onClick:()=>L(l.qualifiedId),"aria-current":v===l.qualifiedId?"page":void 0,children:[e.jsx("span",{className:"cedros-admin-shell__nav-icon",children:l.icon}),e.jsx("span",{className:"cedros-admin-shell__nav-text",children:l.label}),l.badge&&e.jsx("span",{className:"cedros-admin-shell__nav-badge",children:l.badge})]},l.qualifiedId))]},s)})}),(r.cedrosLogin?.user||w)&&e.jsxs("div",{className:"cedros-admin-shell__sidebar-footer",children:[r.cedrosLogin?.user&&e.jsx(A,{name:r.cedrosLogin.user.name,email:r.cedrosLogin.user.email,picture:r.cedrosLogin.user.picture,onSettings:S,onLogout:M}),w]})]}),e.jsx("main",{className:"cedros-admin-shell__main",children:k?e.jsx(n.Suspense,{fallback:e.jsx(D,{}),children:e.jsx("div",{className:"cedros-admin-shell__section","data-plugin-namespace":k.plugin.cssNamespace,children:e.jsx(k.Component,{pluginContext:k.pluginContext,pageSize:p,refreshInterval:P})})}):e.jsx("div",{className:"cedros-admin-shell__empty",children:f.length===0?"No plugins loaded":"Select a section from the sidebar"})})]})})})}function D(){return e.jsxs("div",{className:"cedros-admin-shell__loading",children:[e.jsx(C.LoadingSpinner,{}),e.jsx("span",{children:"Loading..."})]})}const t={width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},m={users:e.jsxs("svg",{...t,children:[e.jsx("path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"}),e.jsx("circle",{cx:"9",cy:"7",r:"4"}),e.jsx("path",{d:"M22 21v-2a4 4 0 0 0-3-3.87"}),e.jsx("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})]}),members:e.jsxs("svg",{...t,children:[e.jsx("path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"}),e.jsx("circle",{cx:"9",cy:"7",r:"4"}),e.jsx("path",{d:"M22 21v-2a4 4 0 0 0-3-3.87"}),e.jsx("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})]}),invites:e.jsxs("svg",{...t,children:[e.jsx("rect",{width:"20",height:"16",x:"2",y:"4",rx:"2"}),e.jsx("path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"})]}),deposits:e.jsxs("svg",{...t,children:[e.jsx("circle",{cx:"12",cy:"12",r:"10"}),e.jsx("path",{d:"M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8"}),e.jsx("path",{d:"M12 18V6"})]}),withdrawals:e.jsxs("svg",{...t,children:[e.jsx("rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2"}),e.jsx("path",{d:"M9 22v-4h6v4"}),e.jsx("path",{d:"M8 6h.01"}),e.jsx("path",{d:"M16 6h.01"}),e.jsx("path",{d:"M12 6h.01"}),e.jsx("path",{d:"M12 10h.01"}),e.jsx("path",{d:"M12 14h.01"}),e.jsx("path",{d:"M16 10h.01"}),e.jsx("path",{d:"M16 14h.01"}),e.jsx("path",{d:"M8 10h.01"}),e.jsx("path",{d:"M8 14h.01"})]}),settings:e.jsxs("svg",{...t,children:[e.jsx("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),e.jsx("circle",{cx:"12",cy:"12",r:"3"})]}),wallet:e.jsxs("svg",{...t,children:[e.jsx("path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1"}),e.jsx("path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4"})]}),chevronRight:e.jsx("svg",{...t,children:e.jsx("path",{d:"m9 18 6-6-6-6"})}),key:e.jsx("svg",{...t,children:e.jsx("path",{d:"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4"})}),toggles:e.jsxs("svg",{...t,children:[e.jsx("rect",{width:"20",height:"12",x:"2",y:"6",rx:"6"}),e.jsx("circle",{cx:"8",cy:"12",r:"2"})]}),shield:e.jsx("svg",{...t,children:e.jsx("path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"})}),mail:e.jsxs("svg",{...t,children:[e.jsx("rect",{width:"20",height:"16",x:"2",y:"4",rx:"2"}),e.jsx("path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"})]}),webhook:e.jsxs("svg",{...t,children:[e.jsx("path",{d:"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2"}),e.jsx("path",{d:"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06"}),e.jsx("path",{d:"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8"})]}),coins:e.jsxs("svg",{...t,children:[e.jsx("circle",{cx:"8",cy:"8",r:"6"}),e.jsx("path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18"}),e.jsx("path",{d:"M7 6h1v4"}),e.jsx("path",{d:"m16.71 13.88.7.71-2.82 2.82"})]}),server:e.jsxs("svg",{...t,children:[e.jsx("rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2"}),e.jsx("rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2"}),e.jsx("line",{x1:"6",x2:"6.01",y1:"6",y2:"6"}),e.jsx("line",{x1:"6",x2:"6.01",y1:"18",y2:"18"})]})},H=n.lazy(()=>Promise.resolve().then(()=>require("./UsersSection-e6q7FHzx.cjs"))),F=n.lazy(()=>Promise.resolve().then(()=>require("./TeamSection-BOH9pv_E.cjs"))),J=n.lazy(()=>Promise.resolve().then(()=>require("./DepositsSection-BkKUS4vk.cjs"))),K=n.lazy(()=>Promise.resolve().then(()=>require("./WithdrawalsSection-sljIyeaz.cjs"))),Q=n.lazy(()=>Promise.resolve().then(()=>require("./AuthenticationSettings-D739nNul.cjs"))),X=n.lazy(()=>Promise.resolve().then(()=>require("./EmbeddedWalletSettings-D5JXae1L.cjs"))),Y=n.lazy(()=>Promise.resolve().then(()=>require("./EmailSettings-B9qwPSiM.cjs"))),Z=n.lazy(()=>Promise.resolve().then(()=>require("./WebhookSettings-CGyDKjrm.cjs"))),ee=n.lazy(()=>Promise.resolve().then(()=>require("./CreditSystemSettings-C6dUsu72.cjs"))),se=n.lazy(()=>Promise.resolve().then(()=>require("./ServerSettings-CYTlQ2xy.cjs"))),re={"login:users:read":["admin","owner"],"login:users:write":["admin","owner"],"login:members:read":["member:read","admin","owner"],"login:members:write":["member:remove","member:role_change"],"login:invites:read":["invite:read","admin","owner"],"login:invites:write":["invite:create","invite:cancel"],"login:deposits:read":["admin","owner"],"login:deposits:write":["admin","owner"],"login:settings:read":["admin","owner"],"login:settings:write":["admin","owner"]},ie=[{id:"users",label:"Users",icon:m.users,group:"Users",order:0,requiredPermission:"login:users:read"},{id:"team",label:"Team",icon:m.members,group:"Users",order:1,requiredPermission:"login:members:read"},{id:"deposits",label:"Deposits",icon:m.deposits,group:"Users",order:2,requiredPermission:"login:deposits:read"},{id:"withdrawals",label:"Withdrawals",icon:m.withdrawals,group:"Users",order:3,requiredPermission:"login:deposits:read"},{id:"settings-auth",label:"Authentication",icon:m.key,group:"Configuration",order:0,requiredPermission:"login:settings:read"},{id:"settings-email",label:"Email & SMTP",icon:m.mail,group:"Configuration",order:1,requiredPermission:"login:settings:read"},{id:"settings-webhooks",label:"Webhooks",icon:m.webhook,group:"Configuration",order:2,requiredPermission:"login:settings:read"},{id:"settings-wallet",label:"User Wallets",icon:m.wallet,group:"Configuration",order:3,requiredPermission:"login:settings:read"},{id:"settings-credits",label:"Credit System",icon:m.coins,group:"Configuration",order:4,requiredPermission:"login:settings:read"},{id:"settings-server",label:"Auth Server",icon:m.server,group:"Configuration",order:5,requiredPermission:"login:settings:read"}],ne={id:"cedros-login",name:"Cedros Login",version:"1.0.0",sections:ie,groups:[{id:"users",label:"Users",order:0},{id:"configuration",label:"Configuration",order:2}],components:{users:H,team:F,deposits:J,withdrawals:K,"settings-auth":Q,"settings-wallet":X,"settings-email":Y,"settings-webhooks":Z,"settings-credits":ee,"settings-server":se},createPluginContext(a){const i=a.cedrosLogin;if(!i)throw new Error("cedros-login plugin requires cedrosLogin in hostContext");return{serverUrl:i.serverUrl,userId:i.user?.id,getAccessToken:i.getAccessToken,hasPermission:r=>this.checkPermission(r,a),orgId:a.org?.orgId,pluginData:{user:i.user,orgRole:a.org?.role}}},checkPermission(a,i){const r=i.org;if(!r)return!!i.cedrosLogin?.user;const c=re[a];return c?c.some(p=>r.permissions.includes(p)||p===r.role||p==="admin"&&["admin","owner"].includes(r.role)||p==="owner"&&r.role==="owner"):!1},cssNamespace:"cedros-dashboard"};exports.AdminShell=G;exports.Icons=m;exports.ProfileDropdown=A;exports.cedrosLoginPlugin=ne;exports.useAdminShell=$;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-8_dpq7tC.cjs","sources":["../src/components/admin/ProfileDropdown.tsx","../src/admin/AdminShell.tsx","../src/admin/icons.tsx","../src/admin/plugin.tsx"],"sourcesContent":["/**\n * Profile Dropdown Component\n *\n * Displays user avatar/name with a dropdown menu for settings and logout.\n */\n\nimport { useState, useRef, useEffect, useCallback } from 'react';\n\nexport interface ProfileDropdownProps {\n /** User's display name */\n name?: string;\n /** User's email */\n email?: string;\n /** User's profile picture URL */\n picture?: string;\n /** Callback when Settings is clicked */\n onSettings?: () => void;\n /** Callback when Logout is clicked */\n onLogout?: () => void;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Profile dropdown button with settings and logout options.\n *\n * @example\n * ```tsx\n * <ProfileDropdown\n * name={user.name}\n * email={user.email}\n * picture={user.picture}\n * onSettings={() => navigate('/settings')}\n * onLogout={logout}\n * />\n * ```\n */\nexport function ProfileDropdown({\n name,\n email,\n picture,\n onSettings,\n onLogout,\n className = '',\n}: ProfileDropdownProps) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n // Close dropdown on escape key\n useEffect(() => {\n function handleEscape(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n }\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isOpen]);\n\n const handleSettings = useCallback(() => {\n setIsOpen(false);\n onSettings?.();\n }, [onSettings]);\n\n const handleLogout = useCallback(() => {\n setIsOpen(false);\n onLogout?.();\n }, [onLogout]);\n\n const displayName = name || 'User';\n const initial = (name?.[0] || email?.[0] || '?').toUpperCase();\n\n return (\n <div className={`cedros-profile-dropdown ${className}`} ref={dropdownRef}>\n <button\n type=\"button\"\n className=\"cedros-profile-dropdown__trigger\"\n onClick={() => setIsOpen(!isOpen)}\n aria-expanded={isOpen}\n aria-haspopup=\"menu\"\n >\n <div className=\"cedros-profile-dropdown__avatar\">\n {picture ? (\n <img\n src={picture}\n alt={displayName}\n className=\"cedros-profile-dropdown__avatar-img\"\n referrerPolicy=\"no-referrer\"\n />\n ) : (\n <span className=\"cedros-profile-dropdown__avatar-placeholder\">{initial}</span>\n )}\n </div>\n <div className=\"cedros-profile-dropdown__info\">\n <span className=\"cedros-profile-dropdown__name\">{displayName}</span>\n {email && <span className=\"cedros-profile-dropdown__email\">{email}</span>}\n </div>\n <svg\n className={`cedros-profile-dropdown__chevron ${isOpen ? 'cedros-profile-dropdown__chevron--open' : ''}`}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n\n {isOpen && (\n <div className=\"cedros-profile-dropdown__menu\" role=\"menu\">\n {onSettings && (\n <button\n type=\"button\"\n className=\"cedros-profile-dropdown__item\"\n onClick={handleSettings}\n role=\"menuitem\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n Settings\n </button>\n )}\n {onLogout && (\n <button\n type=\"button\"\n className=\"cedros-profile-dropdown__item cedros-profile-dropdown__item--danger\"\n onClick={handleLogout}\n role=\"menuitem\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n <polyline points=\"16 17 21 12 16 7\" />\n <line x1=\"21\" x2=\"9\" y1=\"12\" y2=\"12\" />\n </svg>\n Log out\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","/**\n * AdminShell - Unified Admin Dashboard Host\n *\n * A shell component that hosts admin plugins from cedros-login, cedros-pay,\n * or any compatible plugin. Provides unified sidebar navigation and content area.\n *\n * @example\n * ```tsx\n * import { AdminShell } from '@cedros/login-react';\n * import { cedrosLoginPlugin } from '@cedros/login-react';\n * import { cedrosPayPlugin } from '@cedros/pay-react';\n *\n * function AdminPage() {\n * const hostContext = useBuildHostContext();\n * return (\n * <AdminShell\n * plugins={[cedrosLoginPlugin, cedrosPayPlugin]}\n * hostContext={hostContext}\n * />\n * );\n * }\n * ```\n */\n\nimport React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n useEffect,\n Suspense,\n type ReactNode,\n} from 'react';\nimport type {\n AdminPlugin,\n PluginRegistry,\n HostContext,\n QualifiedSectionId,\n PluginContext,\n ResolvedSection,\n} from './types';\nimport { LoadingSpinner } from '../components/shared/LoadingSpinner';\nimport { ProfileDropdown } from '../components/admin/ProfileDropdown';\nimport { CedrosLoginContext, type CedrosLoginContextValue } from '../context/CedrosLoginContext';\nimport type { AuthUser } from '../types';\n\n// ============================================================================\n// Plugin Registry Implementation\n// ============================================================================\n\nclass PluginRegistryImpl implements PluginRegistry {\n private plugins = new Map<string, AdminPlugin>();\n private listeners = new Set<(plugins: AdminPlugin[]) => void>();\n\n register(plugin: AdminPlugin): void {\n if (this.plugins.has(plugin.id)) {\n console.warn(`Plugin ${plugin.id} already registered, replacing...`);\n }\n this.plugins.set(plugin.id, plugin);\n plugin.onRegister?.(this);\n this.notify();\n }\n\n unregister(pluginId: string): void {\n const plugin = this.plugins.get(pluginId);\n if (plugin) {\n plugin.onUnregister?.();\n this.plugins.delete(pluginId);\n this.notify();\n }\n }\n\n get(pluginId: string): AdminPlugin | undefined {\n return this.plugins.get(pluginId);\n }\n\n getAll(): AdminPlugin[] {\n return Array.from(this.plugins.values());\n }\n\n subscribe(listener: (plugins: AdminPlugin[]) => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notify(): void {\n const plugins = this.getAll();\n this.listeners.forEach((listener) => listener(plugins));\n }\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface AdminShellContextValue {\n registry: PluginRegistry;\n hostContext: HostContext;\n activeSection: QualifiedSectionId | null;\n setActiveSection: (section: QualifiedSectionId) => void;\n getPluginContext: (pluginId: string) => PluginContext | null;\n}\n\nconst AdminShellContext = createContext<AdminShellContextValue | null>(null);\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useAdminShell(): AdminShellContextValue {\n const ctx = useContext(AdminShellContext);\n if (!ctx) throw new Error('useAdminShell must be used within AdminShell');\n return ctx;\n}\n\n// ============================================================================\n// Props\n// ============================================================================\n\nexport interface AdminShellProps {\n /** Dashboard title */\n title?: string;\n /** Plugins to load */\n plugins?: AdminPlugin[];\n /** Host context from parent providers */\n hostContext: HostContext;\n /** Default active section (qualified ID) */\n defaultSection?: QualifiedSectionId;\n /** Page size for lists */\n pageSize?: number;\n /** Refresh interval in ms (0 to disable) */\n refreshInterval?: number;\n /** Callback when section changes */\n onSectionChange?: (section: QualifiedSectionId) => void;\n /** Custom logo/header content */\n logo?: ReactNode;\n /** Additional sidebar footer content */\n sidebarFooter?: ReactNode;\n /** Callback when user clicks Settings in profile dropdown */\n onSettingsClick?: () => void;\n /** Callback when user clicks Logout in profile dropdown */\n onLogoutClick?: () => void;\n /** Additional CSS class */\n className?: string;\n}\n\n// ============================================================================\n// Group Order Helpers\n// ============================================================================\n\n/** Build a group-label → order map from all registered plugins' groups[] config. */\nfunction buildGroupOrder(plugins: AdminPlugin[]): Map<string, number> {\n const order = new Map<string, number>();\n for (const plugin of plugins) {\n for (const group of plugin.groups ?? []) {\n // Key by label (sections reference groups by display name via section.group).\n // First plugin to declare a group wins; later plugins don't override.\n if (!order.has(group.label)) {\n order.set(group.label, group.order);\n }\n }\n }\n return order;\n}\n\n// ============================================================================\n// AdminShell Component\n// ============================================================================\n\nexport function AdminShell({\n title = 'Admin',\n plugins: initialPlugins = [],\n hostContext,\n defaultSection,\n pageSize = 20,\n refreshInterval = 0,\n onSectionChange,\n logo,\n sidebarFooter,\n onSettingsClick,\n onLogoutClick,\n className = '',\n}: AdminShellProps): React.JSX.Element {\n // Plugin registry\n const [registry] = useState(() => {\n const reg = new PluginRegistryImpl();\n initialPlugins.forEach((p) => reg.register(p));\n return reg;\n });\n\n // Track registered plugins for re-renders\n const [registeredPlugins, setRegisteredPlugins] = useState<AdminPlugin[]>(() =>\n registry.getAll()\n );\n\n useEffect(() => {\n return registry.subscribe(setRegisteredPlugins);\n }, [registry]);\n\n // Aggregate sections from all plugins\n const allSections = useMemo(() => {\n return registeredPlugins.flatMap((plugin) =>\n plugin.sections\n .filter((section) => {\n // Check RBAC permissions (role-based)\n if (section.requiredPermission) {\n if (!plugin.checkPermission(section.requiredPermission, hostContext)) {\n return false;\n }\n }\n // Check dashboard section permissions (owner-configured per role)\n if (hostContext.dashboardPermissions) {\n if (!hostContext.dashboardPermissions.canAccess(section.id)) {\n return false;\n }\n }\n return true;\n })\n .map(\n (section): ResolvedSection => ({\n ...section,\n qualifiedId: `${plugin.id}:${section.id}` as QualifiedSectionId,\n pluginId: plugin.id,\n cssNamespace: plugin.cssNamespace,\n })\n )\n );\n }, [registeredPlugins, hostContext]);\n\n // Active section state\n const [activeSection, setActiveSectionInternal] = useState<QualifiedSectionId | null>(\n () => defaultSection ?? allSections[0]?.qualifiedId ?? null\n );\n\n // Collapsible groups state\n const [collapsedGroups, setCollapsedGroups] = useState<Set<string>>(new Set());\n\n const toggleGroup = useCallback((groupName: string) => {\n setCollapsedGroups((prev) => {\n const next = new Set(prev);\n if (next.has(groupName)) {\n next.delete(groupName);\n } else {\n next.add(groupName);\n }\n return next;\n });\n }, []);\n\n // Update active section when sections change and current is invalid\n useEffect(() => {\n if (activeSection && !allSections.find((s) => s.qualifiedId === activeSection)) {\n setActiveSectionInternal(allSections[0]?.qualifiedId ?? null);\n }\n }, [allSections, activeSection]);\n\n const setActiveSection = useCallback(\n (section: QualifiedSectionId) => {\n setActiveSectionInternal(section);\n onSectionChange?.(section);\n },\n [onSectionChange]\n );\n\n // Plugin context factory\n const getPluginContext = useCallback(\n (pluginId: string): PluginContext | null => {\n const plugin = registry.get(pluginId);\n if (!plugin) return null;\n return plugin.createPluginContext(hostContext);\n },\n [registry, hostContext]\n );\n\n // Group sections by group name, sorted by plugin-defined group order\n const groupedSections = useMemo(() => {\n const groupOrder = buildGroupOrder(registeredPlugins);\n const groups = new Map<string, ResolvedSection[]>();\n\n allSections.forEach((section) => {\n const groupName = section.group ?? 'Menu';\n const existing = groups.get(groupName) ?? [];\n groups.set(groupName, [...existing, section]);\n });\n\n // Sort groups by plugin-defined order (undeclared groups sink to bottom)\n const sortedGroups = Array.from(groups.entries()).sort(([a], [b]) => {\n const orderA = groupOrder.get(a) ?? 99;\n const orderB = groupOrder.get(b) ?? 99;\n return orderA - orderB;\n });\n\n return sortedGroups;\n }, [allSections, registeredPlugins]);\n\n // Get current section's component\n const currentSection = useMemo(() => {\n if (!activeSection) return null;\n const [pluginId, sectionId] = activeSection.split(':') as [string, string];\n const plugin = registry.get(pluginId);\n if (!plugin) return null;\n const Component = plugin.components[sectionId];\n if (!Component) return null;\n const pluginContext = plugin.createPluginContext(hostContext);\n return { Component, pluginContext, plugin };\n }, [activeSection, registry, hostContext]);\n\n // Context value\n const contextValue = useMemo<AdminShellContextValue>(\n () => ({\n registry,\n hostContext,\n activeSection,\n setActiveSection,\n getPluginContext,\n }),\n [registry, hostContext, activeSection, setActiveSection, getPluginContext]\n );\n\n // Bridge hostContext.cedrosLogin into CedrosLoginContext so hooks\n // (useOrgs, useAdminDeposits, etc.) work inside AdminShell sections.\n const cedrosLoginContextValue = useMemo<CedrosLoginContextValue | null>(() => {\n const cl = hostContext.cedrosLogin;\n if (!cl) return null;\n const user: AuthUser | null = cl.user\n ? { authMethods: [], emailVerified: false, createdAt: '', updatedAt: '', ...cl.user }\n : null;\n return {\n config: { serverUrl: cl.serverUrl },\n user,\n authState: cl.user ? 'authenticated' : 'unauthenticated',\n error: null,\n logout: async () => {},\n refreshUser: async () => {},\n isModalOpen: false,\n openModal: () => {},\n closeModal: () => {},\n _internal: {\n handleLoginSuccess: () => {},\n getAccessToken: cl.getAccessToken,\n },\n };\n }, [hostContext.cedrosLogin]);\n\n return (\n <AdminShellContext.Provider value={contextValue}>\n <CedrosLoginContext.Provider value={cedrosLoginContextValue}>\n <div className={`cedros-admin cedros-admin-shell ${className || ''}`}>\n {/* Sidebar */}\n <aside className=\"cedros-admin-shell__sidebar\">\n <div className=\"cedros-admin-shell__sidebar-header\">\n {logo ?? (\n <div className=\"cedros-admin-shell__logo\">\n <span className=\"cedros-admin-shell__logo-text\">{title}</span>\n </div>\n )}\n </div>\n\n <nav className=\"cedros-admin-shell__nav\">\n {groupedSections.map(([groupName, sections]) => {\n const isCollapsible = groupName === 'Configuration';\n const isCollapsed = collapsedGroups.has(groupName);\n\n return (\n <div key={groupName} className=\"cedros-admin-shell__nav-group\">\n {isCollapsible ? (\n <button\n type=\"button\"\n className=\"cedros-admin-shell__nav-label cedros-admin-shell__nav-label--collapsible\"\n onClick={() => toggleGroup(groupName)}\n aria-expanded={!isCollapsed}\n >\n <span>{groupName}</span>\n <span\n className={`cedros-admin-shell__nav-chevron ${!isCollapsed ? 'cedros-admin-shell__nav-chevron--expanded' : ''}`}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </span>\n </button>\n ) : (\n <span className=\"cedros-admin-shell__nav-label\">{groupName}</span>\n )}\n {(!isCollapsible || !isCollapsed) &&\n sections\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n .map((section) => (\n <button\n key={section.qualifiedId}\n type=\"button\"\n className={`cedros-admin-shell__nav-item ${\n activeSection === section.qualifiedId\n ? 'cedros-admin-shell__nav-item--active'\n : ''\n }`}\n onClick={() => setActiveSection(section.qualifiedId)}\n aria-current={\n activeSection === section.qualifiedId ? 'page' : undefined\n }\n >\n <span className=\"cedros-admin-shell__nav-icon\">{section.icon}</span>\n <span className=\"cedros-admin-shell__nav-text\">{section.label}</span>\n {section.badge && (\n <span className=\"cedros-admin-shell__nav-badge\">{section.badge}</span>\n )}\n </button>\n ))}\n </div>\n );\n })}\n </nav>\n\n {/* User profile dropdown + optional custom footer */}\n {(hostContext.cedrosLogin?.user || sidebarFooter) && (\n <div className=\"cedros-admin-shell__sidebar-footer\">\n {hostContext.cedrosLogin?.user && (\n <ProfileDropdown\n name={hostContext.cedrosLogin.user.name}\n email={hostContext.cedrosLogin.user.email}\n picture={hostContext.cedrosLogin.user.picture}\n onSettings={onSettingsClick}\n onLogout={onLogoutClick}\n />\n )}\n {sidebarFooter}\n </div>\n )}\n </aside>\n\n {/* Main Content */}\n <main className=\"cedros-admin-shell__main\">\n {currentSection ? (\n <Suspense fallback={<LoadingFallback />}>\n <div\n className=\"cedros-admin-shell__section\"\n data-plugin-namespace={currentSection.plugin.cssNamespace}\n >\n <currentSection.Component\n pluginContext={currentSection.pluginContext}\n pageSize={pageSize}\n refreshInterval={refreshInterval}\n />\n </div>\n </Suspense>\n ) : (\n <div className=\"cedros-admin-shell__empty\">\n {allSections.length === 0\n ? 'No plugins loaded'\n : 'Select a section from the sidebar'}\n </div>\n )}\n </main>\n </div>\n </CedrosLoginContext.Provider>\n </AdminShellContext.Provider>\n );\n}\n\n// ============================================================================\n// Helper Components\n// ============================================================================\n\nfunction LoadingFallback(): React.JSX.Element {\n return (\n <div className=\"cedros-admin-shell__loading\">\n <LoadingSpinner />\n <span>Loading...</span>\n </div>\n );\n}\n","/**\n * Admin Dashboard Icons\n *\n * SVG icons for the admin dashboard sidebar and sections.\n * Lucide-style, 24x24 viewBox rendered at 16x16.\n */\n\nimport type { ReactNode } from 'react';\n\nconst iconProps = {\n width: '16',\n height: '16',\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: '2',\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n};\n\nexport const Icons: Record<string, ReactNode> = {\n users: (\n <svg {...iconProps}>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n ),\n\n members: (\n <svg {...iconProps}>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n ),\n\n invites: (\n <svg {...iconProps}>\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n ),\n\n deposits: (\n <svg {...iconProps}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8\" />\n <path d=\"M12 18V6\" />\n </svg>\n ),\n\n withdrawals: (\n <svg {...iconProps}>\n <rect width=\"16\" height=\"20\" x=\"4\" y=\"2\" rx=\"2\" ry=\"2\" />\n <path d=\"M9 22v-4h6v4\" />\n <path d=\"M8 6h.01\" />\n <path d=\"M16 6h.01\" />\n <path d=\"M12 6h.01\" />\n <path d=\"M12 10h.01\" />\n <path d=\"M12 14h.01\" />\n <path d=\"M16 10h.01\" />\n <path d=\"M16 14h.01\" />\n <path d=\"M8 10h.01\" />\n <path d=\"M8 14h.01\" />\n </svg>\n ),\n\n settings: (\n <svg {...iconProps}>\n <path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n ),\n\n wallet: (\n <svg {...iconProps}>\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1\" />\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\n </svg>\n ),\n\n chevronRight: (\n <svg {...iconProps}>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n ),\n\n // Settings sub-page icons\n key: (\n <svg {...iconProps}>\n <path d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\" />\n </svg>\n ),\n\n toggles: (\n <svg {...iconProps}>\n <rect width=\"20\" height=\"12\" x=\"2\" y=\"6\" rx=\"6\" />\n <circle cx=\"8\" cy=\"12\" r=\"2\" />\n </svg>\n ),\n\n shield: (\n <svg {...iconProps}>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n </svg>\n ),\n\n mail: (\n <svg {...iconProps}>\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n ),\n\n webhook: (\n <svg {...iconProps}>\n <path d=\"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2\" />\n <path d=\"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06\" />\n <path d=\"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8\" />\n </svg>\n ),\n\n coins: (\n <svg {...iconProps}>\n <circle cx=\"8\" cy=\"8\" r=\"6\" />\n <path d=\"M18.09 10.37A6 6 0 1 1 10.34 18\" />\n <path d=\"M7 6h1v4\" />\n <path d=\"m16.71 13.88.7.71-2.82 2.82\" />\n </svg>\n ),\n\n server: (\n <svg {...iconProps}>\n <rect width=\"20\" height=\"8\" x=\"2\" y=\"2\" rx=\"2\" ry=\"2\" />\n <rect width=\"20\" height=\"8\" x=\"2\" y=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"6\" x2=\"6.01\" y1=\"6\" y2=\"6\" />\n <line x1=\"6\" x2=\"6.01\" y1=\"18\" y2=\"18\" />\n </svg>\n ),\n};\n","/**\n * Cedros Login Admin Plugin\n *\n * Exports the cedrosLoginPlugin for use with AdminShell.\n * Provides user management, deposits, withdrawals, and configuration sections.\n */\n\nimport { lazy } from 'react';\nimport type { AdminPlugin, HostContext, PluginContext, AdminSectionConfig } from './types';\nimport { Icons } from './icons';\n\n// ============================================================================\n// Lazy-loaded Section Components\n// ============================================================================\n\nconst UsersSection = lazy(() => import('./sections/UsersSection'));\nconst TeamSection = lazy(() => import('./sections/TeamSection'));\nconst DepositsSection = lazy(() => import('./sections/DepositsSection'));\nconst WithdrawalsSection = lazy(() => import('./sections/WithdrawalsSection'));\nconst AuthenticationSettings = lazy(() => import('./sections/AuthenticationSettings'));\nconst EmbeddedWalletSettings = lazy(() => import('./sections/EmbeddedWalletSettings'));\nconst EmailSettings = lazy(() => import('./sections/EmailSettings'));\nconst WebhookSettings = lazy(() => import('./sections/WebhookSettings'));\nconst CreditSystemSettings = lazy(() => import('./sections/CreditSystemSettings'));\nconst ServerSettings = lazy(() => import('./sections/ServerSettings'));\n\n// ============================================================================\n// Permission Mapping\n// ============================================================================\n\ntype LoginPermission =\n | 'login:users:read'\n | 'login:users:write'\n | 'login:members:read'\n | 'login:members:write'\n | 'login:invites:read'\n | 'login:invites:write'\n | 'login:deposits:read'\n | 'login:deposits:write'\n | 'login:settings:read'\n | 'login:settings:write';\n\n/**\n * Maps plugin permissions to org-level permissions/roles.\n */\nconst PERMISSION_MAP: Record<LoginPermission, string[]> = {\n 'login:users:read': ['admin', 'owner'],\n 'login:users:write': ['admin', 'owner'],\n 'login:members:read': ['member:read', 'admin', 'owner'],\n 'login:members:write': ['member:remove', 'member:role_change'],\n 'login:invites:read': ['invite:read', 'admin', 'owner'],\n 'login:invites:write': ['invite:create', 'invite:cancel'],\n 'login:deposits:read': ['admin', 'owner'],\n 'login:deposits:write': ['admin', 'owner'],\n 'login:settings:read': ['admin', 'owner'],\n 'login:settings:write': ['admin', 'owner'],\n};\n\n// ============================================================================\n// Section Configuration\n// ============================================================================\n\nconst SECTIONS: AdminSectionConfig[] = [\n // Users group (main sections)\n {\n id: 'users',\n label: 'Users',\n icon: Icons.users,\n group: 'Users',\n order: 0,\n requiredPermission: 'login:users:read',\n },\n {\n id: 'team',\n label: 'Team',\n icon: Icons.members,\n group: 'Users',\n order: 1,\n requiredPermission: 'login:members:read',\n },\n {\n id: 'deposits',\n label: 'Deposits',\n icon: Icons.deposits,\n group: 'Users',\n order: 2,\n requiredPermission: 'login:deposits:read',\n },\n {\n id: 'withdrawals',\n label: 'Withdrawals',\n icon: Icons.withdrawals,\n group: 'Users',\n order: 3,\n requiredPermission: 'login:deposits:read',\n },\n\n // Configuration group (settings sections)\n {\n id: 'settings-auth',\n label: 'Authentication',\n icon: Icons.key,\n group: 'Configuration',\n order: 0,\n requiredPermission: 'login:settings:read',\n },\n {\n id: 'settings-email',\n label: 'Email & SMTP',\n icon: Icons.mail,\n group: 'Configuration',\n order: 1,\n requiredPermission: 'login:settings:read',\n },\n {\n id: 'settings-webhooks',\n label: 'Webhooks',\n icon: Icons.webhook,\n group: 'Configuration',\n order: 2,\n requiredPermission: 'login:settings:read',\n },\n {\n id: 'settings-wallet',\n label: 'User Wallets',\n icon: Icons.wallet,\n group: 'Configuration',\n order: 3,\n requiredPermission: 'login:settings:read',\n },\n {\n id: 'settings-credits',\n label: 'Credit System',\n icon: Icons.coins,\n group: 'Configuration',\n order: 4,\n requiredPermission: 'login:settings:read',\n },\n {\n id: 'settings-server',\n label: 'Auth Server',\n icon: Icons.server,\n group: 'Configuration',\n order: 5,\n requiredPermission: 'login:settings:read',\n },\n];\n\n// ============================================================================\n// Plugin Definition\n// ============================================================================\n\nexport const cedrosLoginPlugin: AdminPlugin = {\n id: 'cedros-login',\n name: 'Cedros Login',\n version: '1.0.0',\n\n sections: SECTIONS,\n\n groups: [\n { id: 'users', label: 'Users', order: 0 },\n { id: 'configuration', label: 'Configuration', order: 2 },\n ],\n\n components: {\n users: UsersSection,\n team: TeamSection,\n deposits: DepositsSection,\n withdrawals: WithdrawalsSection,\n 'settings-auth': AuthenticationSettings,\n 'settings-wallet': EmbeddedWalletSettings,\n 'settings-email': EmailSettings,\n 'settings-webhooks': WebhookSettings,\n 'settings-credits': CreditSystemSettings,\n 'settings-server': ServerSettings,\n },\n\n createPluginContext(hostContext: HostContext): PluginContext {\n const cedrosLogin = hostContext.cedrosLogin;\n if (!cedrosLogin) {\n throw new Error('cedros-login plugin requires cedrosLogin in hostContext');\n }\n\n return {\n serverUrl: cedrosLogin.serverUrl,\n userId: cedrosLogin.user?.id,\n getAccessToken: cedrosLogin.getAccessToken,\n hasPermission: (permission) => this.checkPermission(permission, hostContext),\n orgId: hostContext.org?.orgId,\n pluginData: {\n user: cedrosLogin.user,\n orgRole: hostContext.org?.role,\n },\n };\n },\n\n checkPermission(permission: string, hostContext: HostContext): boolean {\n const org = hostContext.org;\n\n // No org context = admin-level access (for global admins)\n if (!org) {\n // Check if user is in cedrosLogin context - assume admin if present\n return Boolean(hostContext.cedrosLogin?.user);\n }\n\n const requiredPerms = PERMISSION_MAP[permission as LoginPermission];\n if (!requiredPerms) {\n // Unknown permission - default deny\n return false;\n }\n\n // Check if user has any of the required permissions\n return requiredPerms.some(\n (p) =>\n org.permissions.includes(p) ||\n p === org.role ||\n (p === 'admin' && ['admin', 'owner'].includes(org.role)) ||\n (p === 'owner' && org.role === 'owner')\n );\n },\n\n cssNamespace: 'cedros-dashboard',\n};\n\n// Named export for convenience\nexport { cedrosLoginPlugin as loginPlugin };\n"],"names":["ProfileDropdown","name","email","picture","onSettings","onLogout","className","isOpen","setIsOpen","useState","dropdownRef","useRef","useEffect","handleClickOutside","event","handleEscape","handleSettings","useCallback","handleLogout","displayName","initial","jsxs","jsx","PluginRegistryImpl","plugin","pluginId","listener","plugins","AdminShellContext","createContext","useAdminShell","ctx","useContext","buildGroupOrder","order","group","AdminShell","title","initialPlugins","hostContext","defaultSection","pageSize","refreshInterval","onSectionChange","logo","sidebarFooter","onSettingsClick","onLogoutClick","registry","reg","p","registeredPlugins","setRegisteredPlugins","allSections","useMemo","section","activeSection","setActiveSectionInternal","collapsedGroups","setCollapsedGroups","toggleGroup","groupName","prev","next","setActiveSection","getPluginContext","groupedSections","groupOrder","groups","existing","a","b","orderA","orderB","currentSection","sectionId","Component","pluginContext","contextValue","cedrosLoginContextValue","cl","user","CedrosLoginContext","sections","isCollapsible","isCollapsed","Suspense","LoadingFallback","LoadingSpinner","iconProps","Icons","UsersSection","lazy","TeamSection","DepositsSection","WithdrawalsSection","AuthenticationSettings","EmbeddedWalletSettings","EmailSettings","WebhookSettings","CreditSystemSettings","ServerSettings","PERMISSION_MAP","SECTIONS","cedrosLoginPlugin","cedrosLogin","permission","org","requiredPerms"],"mappings":"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"}
|