@alepha/ui 0.16.1 → 0.16.2
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/admin/{AdminApiKeys-GMORg-1l.js → AdminApiKeys-CoTOTfgU.js} +4 -3
- package/dist/admin/{AdminApiKeys-GMORg-1l.js.map → AdminApiKeys-CoTOTfgU.js.map} +1 -1
- package/dist/admin/{AdminAudits-pkWrjq1Z.js → AdminAudits-BmsxFbDa.js} +4 -3
- package/dist/admin/{AdminAudits-pkWrjq1Z.js.map → AdminAudits-BmsxFbDa.js.map} +1 -1
- package/dist/admin/{AdminFiles-WeQbsCsl.js → AdminFiles-BBB8knca.js} +4 -3
- package/dist/admin/{AdminFiles-WeQbsCsl.js.map → AdminFiles-BBB8knca.js.map} +1 -1
- package/dist/admin/{AdminJobs-B-q9iGO3.js → AdminJobs-C604joTz.js} +4 -3
- package/dist/admin/{AdminJobs-B-q9iGO3.js.map → AdminJobs-C604joTz.js.map} +1 -1
- package/dist/admin/{AdminLayout-BqZiXx4H.js → AdminLayout-CsjvpeD1.js} +6 -9
- package/dist/admin/AdminLayout-CsjvpeD1.js.map +1 -0
- package/dist/admin/{AdminNotifications-Ds5Un0NJ.js → AdminNotifications-LwR6RKrx.js} +4 -3
- package/dist/admin/{AdminNotifications-Ds5Un0NJ.js.map → AdminNotifications-LwR6RKrx.js.map} +1 -1
- package/dist/admin/AdminParameters-B_83Vie9.js +767 -0
- package/dist/admin/AdminParameters-B_83Vie9.js.map +1 -0
- package/dist/admin/{AdminSessions-DzIOxM3b.js → AdminSessions-CWnPosdd.js} +4 -3
- package/dist/admin/{AdminSessions-DzIOxM3b.js.map → AdminSessions-CWnPosdd.js.map} +1 -1
- package/dist/admin/{AdminUserAudits-CiUPN2BC.js → AdminUserAudits-nHv636E_.js} +4 -3
- package/dist/admin/{AdminUserAudits-CiUPN2BC.js.map → AdminUserAudits-nHv636E_.js.map} +1 -1
- package/dist/admin/{AdminUserCreate-BwQKr4xE.js → AdminUserCreate-CjYD3Kjc.js} +4 -3
- package/dist/admin/{AdminUserCreate-BwQKr4xE.js.map → AdminUserCreate-CjYD3Kjc.js.map} +1 -1
- package/dist/admin/{AdminUserDetails-uqtC5aJ1.js → AdminUserDetails-Ccq-LsZ0.js} +4 -3
- package/dist/admin/{AdminUserDetails-uqtC5aJ1.js.map → AdminUserDetails-Ccq-LsZ0.js.map} +1 -1
- package/dist/admin/{AdminUserLayout-CiPay35T.js → AdminUserLayout-7s41DiF_.js} +6 -7
- package/dist/admin/AdminUserLayout-7s41DiF_.js.map +1 -0
- package/dist/admin/{AdminUserSessions-DAE8Nf1F.js → AdminUserSessions-Ds3ODq_d.js} +4 -3
- package/dist/admin/{AdminUserSessions-DAE8Nf1F.js.map → AdminUserSessions-Ds3ODq_d.js.map} +1 -1
- package/dist/admin/{AdminUserSettings-EbahaV2a.js → AdminUserSettings-CGh4gROo.js} +4 -3
- package/dist/admin/{AdminUserSettings-EbahaV2a.js.map → AdminUserSettings-CGh4gROo.js.map} +1 -1
- package/dist/admin/{AdminUsers-Dcjh0KNW.js → AdminUsers-CvPiBzQK.js} +4 -3
- package/dist/admin/{AdminUsers-Dcjh0KNW.js.map → AdminUsers-CvPiBzQK.js.map} +1 -1
- package/dist/admin/index.d.ts +22 -10
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +47 -48
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/rolldown-runtime-CjeV3_4I.js +18 -0
- package/dist/auth/{AuthLayout-Dj5K4SIN.js → AuthLayout-CdJcrPs4.js} +2 -3
- package/dist/auth/{AuthLayout-Dj5K4SIN.js.map → AuthLayout-CdJcrPs4.js.map} +1 -1
- package/dist/{demo/IconGoogle-CbBF8Hqq.js → auth/IconGoogle-Bm18QD2q.js} +2 -4
- package/dist/auth/{IconGoogle-DpSlPZ1u.js.map → IconGoogle-Bm18QD2q.js.map} +1 -1
- package/dist/auth/{Login-BBqTosqZ.js → Login-DS_OqA0G.js} +7 -6
- package/dist/auth/Login-DS_OqA0G.js.map +1 -0
- package/dist/auth/{Profile-Bxj8Nwom.js → Profile-Di7N7HZL.js} +2 -3
- package/dist/auth/{Profile-Bxj8Nwom.js.map → Profile-Di7N7HZL.js.map} +1 -1
- package/dist/auth/{Register-Ce675Crg.js → Register-BRR2_gux.js} +7 -6
- package/dist/auth/Register-BRR2_gux.js.map +1 -0
- package/dist/auth/{ResetPassword-DWdt7c40.js → ResetPassword-oQu72lod.js} +4 -3
- package/dist/auth/{ResetPassword-DWdt7c40.js.map → ResetPassword-oQu72lod.js.map} +1 -1
- package/dist/auth/{VerifyEmail-CI4JwByV.js → VerifyEmail-DC6HPZjd.js} +4 -3
- package/dist/auth/{VerifyEmail-CI4JwByV.js.map → VerifyEmail-DC6HPZjd.js.map} +1 -1
- package/dist/auth/index.d.ts +14 -14
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +13 -13
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/rolldown-runtime-CjeV3_4I.js +18 -0
- package/dist/core/index.d.ts +147 -68
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +349 -287
- package/dist/core/index.js.map +1 -1
- package/dist/demo/{DemoDataTable-CguplbR7.js → DemoDataTable-DCsJq8v5.js} +4 -5
- package/dist/demo/DemoDataTable-DCsJq8v5.js.map +1 -0
- package/dist/demo/{DemoHome-Cce2bWmg.js → DemoHome-DpRrPlBC.js} +4 -3
- package/dist/demo/{DemoHome-Cce2bWmg.js.map → DemoHome-DpRrPlBC.js.map} +1 -1
- package/dist/demo/{DemoJsonViewer-Dgdk3Txb.js → DemoJsonViewer-zeucGKHV.js} +6 -5
- package/dist/demo/DemoJsonViewer-zeucGKHV.js.map +1 -0
- package/dist/demo/{DemoLayout-B20TEuhV.js → DemoLayout-PhgbAAiQ.js} +6 -5
- package/dist/demo/DemoLayout-PhgbAAiQ.js.map +1 -0
- package/dist/demo/{DemoLogin-CvCG2WVh.js → DemoLogin-DSzP0Lkv.js} +8 -10
- package/dist/demo/DemoLogin-DSzP0Lkv.js.map +1 -0
- package/dist/demo/{DemoRegister-CmeHbOAs.js → DemoRegister-DavFBsCz.js} +8 -10
- package/dist/demo/DemoRegister-DavFBsCz.js.map +1 -0
- package/dist/demo/{DemoResetPassword-CKO5iA_6.js → DemoResetPassword-BS2rIAQK.js} +5 -7
- package/dist/demo/DemoResetPassword-BS2rIAQK.js.map +1 -0
- package/dist/demo/{DemoSidebar-MVmQKfMt.js → DemoSidebar-zNkUmHRl.js} +4 -5
- package/dist/demo/DemoSidebar-zNkUmHRl.js.map +1 -0
- package/dist/demo/{DemoTypeForm-w-qtfRlC.js → DemoTypeForm-B9q7oT0b.js} +4 -5
- package/dist/demo/DemoTypeForm-B9q7oT0b.js.map +1 -0
- package/dist/demo/{DemoVerifyEmail-C8FFJT5A.js → DemoVerifyEmail-Bi4SdWz0.js} +5 -7
- package/dist/demo/DemoVerifyEmail-Bi4SdWz0.js.map +1 -0
- package/dist/{auth/IconGoogle-DpSlPZ1u.js → demo/IconGoogle-CTeZyrek.js} +2 -4
- package/dist/demo/{IconGoogle-CbBF8Hqq.js.map → IconGoogle-CTeZyrek.js.map} +1 -1
- package/dist/demo/{Showcase-CQrMWars.js → Showcase-C9btr_SJ.js} +3 -5
- package/dist/demo/Showcase-C9btr_SJ.js.map +1 -0
- package/dist/demo/index.d.ts +2 -2
- package/dist/demo/index.d.ts.map +1 -1
- package/dist/demo/index.js +15 -15
- package/dist/demo/rolldown-runtime-CjeV3_4I.js +18 -0
- package/package.json +5 -3
- package/src/admin/AdminRouter.ts +15 -24
- package/src/admin/components/AdminLayout.tsx +6 -9
- package/src/admin/components/parameters/AdminParameters.tsx +154 -76
- package/src/admin/components/parameters/ParameterDetails.tsx +153 -93
- package/src/admin/components/parameters/ParameterEmptyState.tsx +27 -0
- package/src/admin/components/parameters/ParameterHistory.tsx +15 -20
- package/src/admin/components/parameters/ParameterTree.tsx +280 -104
- package/src/admin/components/parameters/types.ts +3 -3
- package/src/admin/primitives/$uiAdmin.ts +2 -2
- package/src/auth/AuthRouter.ts +1 -0
- package/src/core/components/buttons/ActionButton.tsx +4 -15
- package/src/core/components/buttons/DarkModeButton.tsx +8 -4
- package/src/core/components/buttons/ToggleSidebarButton.tsx +3 -5
- package/src/core/components/form/Control.tsx +10 -32
- package/src/core/components/form/ControlArray.tsx +200 -89
- package/src/core/components/form/TypeForm.browser.spec.tsx +727 -0
- package/src/core/components/layout/AlephaMantineProvider.tsx +1 -0
- package/src/core/components/layout/Breadcrumb.tsx +91 -0
- package/src/core/components/layout/{AdminShell.tsx → DashboardShell.tsx} +77 -32
- package/src/core/components/layout/Sidebar.tsx +58 -18
- package/src/core/constants/ui.ts +1 -1
- package/src/core/helpers/renderIcon.tsx +5 -2
- package/src/core/index.ts +9 -5
- package/src/core/styles.css +7 -7
- package/src/core/utils/string.ts +28 -4
- package/src/demo/components/DemoLayout.tsx +6 -2
- package/dist/admin/AdminApiKeys-DsmGnHNh.js +0 -3
- package/dist/admin/AdminAudits-8SM96viT.js +0 -3
- package/dist/admin/AdminFiles-B56ocq4H.js +0 -3
- package/dist/admin/AdminJobs-CED1syCn.js +0 -3
- package/dist/admin/AdminLayout-BqZiXx4H.js.map +0 -1
- package/dist/admin/AdminNotifications-B0B1rdc4.js +0 -3
- package/dist/admin/AdminParameters-BU3lATdJ.js +0 -3
- package/dist/admin/AdminParameters-CfDUpc78.js +0 -575
- package/dist/admin/AdminParameters-CfDUpc78.js.map +0 -1
- package/dist/admin/AdminSessions-BDGK2MS6.js +0 -3
- package/dist/admin/AdminUserAudits-Cj79gENT.js +0 -3
- package/dist/admin/AdminUserCreate-Cq-mUmBs.js +0 -3
- package/dist/admin/AdminUserDetails-DRjVAPFd.js +0 -3
- package/dist/admin/AdminUserLayout-CGzmHHby.js +0 -3
- package/dist/admin/AdminUserLayout-CiPay35T.js.map +0 -1
- package/dist/admin/AdminUserSessions-DcdzuNZ9.js +0 -3
- package/dist/admin/AdminUserSettings-D7V6-ceX.js +0 -3
- package/dist/admin/AdminUsers-D9nyzGqQ.js +0 -3
- package/dist/auth/Login-BBqTosqZ.js.map +0 -1
- package/dist/auth/Login-CoU63mMR.js +0 -4
- package/dist/auth/Register-BV_oa_AK.js +0 -4
- package/dist/auth/Register-Ce675Crg.js.map +0 -1
- package/dist/auth/ResetPassword-D5wC8GAA.js +0 -3
- package/dist/auth/VerifyEmail-DAfqVm5s.js +0 -3
- package/dist/demo/DemoDataTable-CguplbR7.js.map +0 -1
- package/dist/demo/DemoHome-DC9qkMNe.js +0 -3
- package/dist/demo/DemoJsonViewer-DIssGVlJ.js +0 -4
- package/dist/demo/DemoJsonViewer-Dgdk3Txb.js.map +0 -1
- package/dist/demo/DemoLayout-B20TEuhV.js.map +0 -1
- package/dist/demo/DemoLayout-DSRyf4qJ.js +0 -3
- package/dist/demo/DemoLogin-CvCG2WVh.js.map +0 -1
- package/dist/demo/DemoRegister-CmeHbOAs.js.map +0 -1
- package/dist/demo/DemoResetPassword-CKO5iA_6.js.map +0 -1
- package/dist/demo/DemoSidebar-MVmQKfMt.js.map +0 -1
- package/dist/demo/DemoTypeForm-w-qtfRlC.js.map +0 -1
- package/dist/demo/DemoVerifyEmail-C8FFJT5A.js.map +0 -1
- package/dist/demo/Showcase-CQrMWars.js.map +0 -1
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/auth/AuthI18n.ts","../../src/auth/AuthRouter.ts","../../src/auth/components/buttons/UserButton.tsx","../../src/auth/primitives/$uiAuth.ts","../../src/auth/index.ts"],"sourcesContent":["import { $dictionary } from \"alepha/react/i18n\";\n\nexport class AuthI18n {\n en = $dictionary({\n name: \"alepha.ui.auth.en\",\n lazy: () => ({\n default: {\n loginSignIn: \"Sign in\",\n loginContinueWith: \"Continue with $1\",\n loginOr: \"OR\",\n loginCancel: \"Cancel\",\n loginForgotPassword: \"Forgot password?\",\n loginNoAccount: \"Don't have an account?\",\n loginSignUp: \"Sign up\",\n loginUsername: \"Username\",\n loginEmail: \"Email\",\n loginPhone: \"Phone number\",\n loginPassword: \"Password\",\n registerCreateAccount: \"Create account\",\n registerContinueWith: \"Continue with $1\",\n registerOr: \"OR\",\n registerCancel: \"Cancel\",\n registerHaveAccount: \"Already have an account?\",\n registerSignIn: \"Sign in\",\n registerUsername: \"Username\",\n registerEmail: \"Email\",\n registerPhone: \"Phone number\",\n registerPassword: \"Password\",\n registerConfirmPassword: \"Confirm password\",\n registerDisabled:\n \"Registration is not available. Please contact your administrator.\",\n registerBackToSignIn: \"Back to sign in\",\n registerVerifyTitle: \"Verify your account\",\n registerVerifyDescription:\n \"Please enter the verification code(s) sent to you.\",\n registerEmailCode: \"Email verification code\",\n registerPhoneCode: \"Phone verification code\",\n registerVerifySubmit: \"Complete Registration\",\n registerVerifyBack: \"Back to registration\",\n resetPasswordTitle: \"Reset password\",\n resetPasswordEmail: \"Email\",\n resetPasswordEnterEmail:\n \"Enter your email address to reset your password\",\n resetPasswordSendCode: \"Send verification code\",\n resetPasswordCodeSent: \"We've sent a verification code to your email.\",\n resetPasswordEnterCode: \"Enter the 6-digit code\",\n resetPasswordResendCode: \"Resend code\",\n resetPasswordEnterNewPassword: \"Create your new password\",\n resetPasswordNewPassword: \"New password\",\n resetPasswordConfirmPassword: \"Confirm password\",\n resetPasswordSetNewPassword: \"Set new password\",\n resetPasswordSuccess: \"Your password has been reset successfully.\",\n resetPasswordBackToSignIn: \"Back to sign in\",\n resetPasswordCancel: \"Cancel\",\n resetPasswordDisabled:\n \"Password reset is not available. Please contact your administrator.\",\n verifyEmailTitle: \"Email Verification\",\n verifyEmailVerifying: \"Verifying your email...\",\n verifyEmailPleaseWait:\n \"Please wait while we verify your email address.\",\n verifyEmailSuccess: \"Your email has been verified successfully.\",\n verifyEmailFailed:\n \"Failed to verify your email. The link may have expired or is invalid.\",\n verifyEmailMissingParams:\n \"Invalid verification link. Email and token are required.\",\n verifyEmailSignIn: \"Sign in to your account\",\n verifyEmailBackToSignIn: \"Back to sign in\",\n },\n }),\n });\n\n fr = $dictionary({\n lazy: () => ({\n default: {\n loginSignIn: \"Se connecter\",\n loginContinueWith: \"Continuer avec $1\",\n loginOr: \"OU\",\n loginCancel: \"Annuler\",\n loginForgotPassword: \"Mot de passe oublié ?\",\n loginNoAccount: \"Vous n'avez pas de compte ?\",\n loginSignUp: \"S'inscrire\",\n loginUsername: \"Nom d'utilisateur\",\n loginEmail: \"E-mail\",\n loginPhone: \"Numéro de téléphone\",\n loginPassword: \"Mot de passe\",\n registerCreateAccount: \"Créer un compte\",\n registerContinueWith: \"Continuer avec $1\",\n registerOr: \"OU\",\n registerCancel: \"Annuler\",\n registerHaveAccount: \"Vous avez déjà un compte ?\",\n registerSignIn: \"Se connecter\",\n registerUsername: \"Nom d'utilisateur\",\n registerEmail: \"E-mail\",\n registerPhone: \"Numéro de téléphone\",\n registerPassword: \"Mot de passe\",\n registerConfirmPassword: \"Confirmer le mot de passe\",\n registerDisabled:\n \"L'inscription n'est pas disponible. Veuillez contacter votre administrateur.\",\n registerBackToSignIn: \"Retour à la connexion\",\n registerVerifyTitle: \"Vérifiez votre compte\",\n registerVerifyDescription:\n \"Veuillez entrer le(s) code(s) de vérification qui vous ont été envoyés.\",\n registerEmailCode: \"Code de vérification par e-mail\",\n registerPhoneCode: \"Code de vérification par téléphone\",\n registerVerifySubmit: \"Terminer l'inscription\",\n registerVerifyBack: \"Retour à l'inscription\",\n resetPasswordTitle: \"Réinitialiser le mot de passe\",\n resetPasswordEmail: \"E-mail\",\n resetPasswordEnterEmail:\n \"Entrez votre adresse e-mail pour réinitialiser votre mot de passe\",\n resetPasswordSendCode: \"Envoyer le code de vérification\",\n resetPasswordCodeSent:\n \"Nous avons envoyé un code de vérification à votre e-mail.\",\n resetPasswordEnterCode: \"Entrez le code à 6 chiffres\",\n resetPasswordResendCode: \"Renvoyer le code\",\n resetPasswordEnterNewPassword: \"Créez votre nouveau mot de passe\",\n resetPasswordNewPassword: \"Nouveau mot de passe\",\n resetPasswordConfirmPassword: \"Confirmer le mot de passe\",\n resetPasswordSetNewPassword: \"Définir le nouveau mot de passe\",\n resetPasswordSuccess:\n \"Votre mot de passe a été réinitialisé avec succès.\",\n resetPasswordBackToSignIn: \"Retour à la connexion\",\n resetPasswordCancel: \"Annuler\",\n resetPasswordDisabled:\n \"La réinitialisation du mot de passe n'est pas disponible. Veuillez contacter votre administrateur.\",\n verifyEmailTitle: \"Vérification de l'e-mail\",\n verifyEmailVerifying: \"Vérification de votre e-mail...\",\n verifyEmailPleaseWait:\n \"Veuillez patienter pendant que nous vérifions votre adresse e-mail.\",\n verifyEmailSuccess: \"Votre e-mail a été vérifié avec succès.\",\n verifyEmailFailed:\n \"Échec de la vérification de votre e-mail. Le lien a peut-être expiré ou est invalide.\",\n verifyEmailMissingParams:\n \"Lien de vérification invalide. L'e-mail et le jeton sont requis.\",\n verifyEmailSignIn: \"Se connecter à votre compte\",\n verifyEmailBackToSignIn: \"Retour à la connexion\",\n },\n }),\n });\n}\n","import {\n IconLogin2,\n IconLogout2,\n IconMailCheck,\n IconPasswordUser,\n IconUser,\n IconUserPlus,\n} from \"@tabler/icons-react\";\nimport { $inject, AlephaError, t } from \"alepha\";\nimport type { RealmController } from \"alepha/api/users\";\nimport { ReactAuth } from \"alepha/react/auth\";\nimport { $page, Redirection } from \"alepha/react/router\";\nimport { $client } from \"alepha/server/links\";\n\n/**\n * Schema for realm query parameter used across auth pages.\n */\nconst realmQuerySchema = t.object({\n r: t.optional(t.string({ description: \"Redirect URL after authentication\" })),\n realm: t.optional(\n t.string({ description: \"User realm name for multi-tenant auth\" }),\n ),\n});\n\nexport class AuthRouter {\n protected readonly realmClient = $client<RealmController>();\n protected readonly auth = $inject(ReactAuth);\n\n authLayout = $page({\n path: \"/auth\",\n lazy: () => import(\"./components/AuthLayout.tsx\"),\n children: () => [\n this.login,\n this.register,\n this.resetPassword,\n this.verifyEmail,\n this.profile,\n ],\n });\n\n login = $page({\n icon: IconLogin2,\n label: \"Sign In\",\n description: \"Sign in to your account\",\n path: \"/login\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/Login.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n register = $page({\n icon: IconUserPlus,\n label: \"Register\",\n description: \"Create a new account\",\n path: \"/register\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/Register.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n resetPassword = $page({\n icon: IconPasswordUser,\n label: \"Reset Password\",\n description: \"Reset your account password\",\n path: \"/reset-password\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/ResetPassword.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n verifyEmail = $page({\n icon: IconMailCheck,\n label: \"Verify Email\",\n description: \"Verify your email address\",\n path: \"/verify-email\",\n schema: {\n query: t.object({\n email: t.optional(t.string()),\n token: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/VerifyEmail.tsx\"),\n });\n\n logout = $page({\n icon: IconLogout2,\n label: \"Sign Out\",\n description: \"Sign out of your account\",\n path: \"/logout\",\n component: () => null,\n loader: () => {\n this.auth.logout();\n return {};\n },\n });\n\n profile = $page({\n name: \"userProfile\",\n icon: IconUser,\n label: \"Profile\",\n description: \"View your profile\",\n path: \"/profile\",\n can: () => !!this.auth.user,\n lazy: () => import(\"./components/Profile.tsx\"),\n });\n\n protected async loadRealmConfig(realmName?: string) {\n try {\n return await this.realmClient.getRealmConfig({\n query: { realmName },\n });\n } catch (e) {\n if (e instanceof AlephaError) {\n throw new AlephaError(\n \"Missing Realm Configuration - Did you forget to add '$realm()' to your application?\",\n e,\n );\n }\n throw e;\n }\n }\n}\n","import {\n ActionButton,\n type ActionMenuConfig,\n type ActionMenuItem,\n type ActionProps,\n ui,\n} from \"@alepha/ui\";\nimport { Avatar } from \"@mantine/core\";\nimport {\n IconLogin2,\n IconLogout,\n IconSettings,\n IconUser,\n} from \"@tabler/icons-react\";\nimport type { AdminUserController } from \"alepha/api/users\";\nimport { useClient, useInject } from \"alepha/react\";\nimport { useAuth } from \"alepha/react/auth\";\nimport { ReactPageProvider, useRouter } from \"alepha/react/router\";\nimport type { ReactNode } from \"react\";\nimport type { AuthRouter } from \"../../AuthRouter.ts\";\n\nexport interface UserButtonProps\n extends Omit<ActionProps, \"menu\" | \"icon\" | \"onClick\"> {\n /**\n * Additional menu items to display before the logout option\n */\n menuItems?: ActionMenuItem[];\n\n /**\n * Custom logout label (default: \"Sign out\")\n */\n logoutLabel?: string;\n\n /**\n * Menu configuration overrides\n */\n menuConfig?: Partial<Omit<ActionMenuConfig, \"items\">>;\n\n /**\n * Whether to show a divider before logout (default: true when menuItems provided)\n */\n showLogoutDivider?: boolean;\n\n /**\n * Custom icon to use instead of user avatar (default: IconUser)\n */\n icon?: ReactNode;\n}\n\nconst UserButton = (props: UserButtonProps) => {\n const {\n menuItems = [],\n logoutLabel = \"Sign out\",\n menuConfig,\n showLogoutDivider = menuItems.length > 0,\n icon,\n children,\n ...buttonProps\n } = props;\n\n buttonProps.variant ??= \"subtle\";\n\n const adminUserCtrl = useClient<AdminUserController>();\n const pages = useInject(ReactPageProvider);\n\n const auth = useAuth<{\n username?: string;\n email?: string;\n picture?: string;\n }>();\n\n const isConnected = !!auth.user;\n const isAdmin = isConnected && adminUserCtrl.findUsers.can();\n const userPage = pages.getPages().find((it) => it.name === \"userProfile\");\n const adminPage = pages.getPages().find((it) => it.name === \"adminLayout\");\n const authRouter = useRouter<AuthRouter>();\n\n if (!auth.user) {\n return (\n <ActionButton\n {...buttonProps}\n icon={IconLogin2}\n href={authRouter.path(\"login\")}\n />\n );\n }\n\n const userLabel = auth.user.username || auth.user.email;\n\n const items: ActionMenuItem[] = [];\n\n // Add user info label if available\n if (auth.user.email && auth.user.username) {\n items.push({\n type: \"label\",\n label: auth.user.email,\n });\n }\n\n // Add profile page link if available\n if (userPage && isConnected) {\n items.push({\n label: \"Profile\",\n icon: <IconUser size={ui.sizes.icon.md} />,\n href: authRouter.path(\"userProfile\"),\n });\n }\n\n // Add admin page link if available and user is admin\n if (adminPage && isAdmin) {\n items.push({\n label: \"Admin\",\n icon: <IconSettings size={ui.sizes.icon.md} />,\n href: authRouter.path(\"adminLayout\"),\n });\n }\n\n // Add custom menu items\n items.push(...menuItems);\n\n // Add divider before logout if needed\n if (showLogoutDivider && items.length > 0) {\n items.push({ type: \"divider\" });\n }\n\n // Add logout item\n items.push({\n label: logoutLabel,\n icon: <IconLogout size={ui.sizes.icon.md} />,\n color: \"red\",\n onClick: () => auth.logout(),\n });\n\n // Use leftSection for Avatar (JSX element), icon prop for component types\n const hasAvatar = !icon && auth.user.picture;\n\n return (\n <ActionButton\n {...buttonProps}\n icon={hasAvatar ? undefined : (icon ?? IconUser)}\n leftSection={\n hasAvatar ? (\n <Avatar\n src={`/api/files/${auth.user.picture}`}\n size={24}\n radius=\"xl\"\n />\n ) : undefined\n }\n menu={{\n position: \"bottom-end\",\n width: 200,\n ...menuConfig,\n items,\n }}\n >\n {children ?? userLabel}\n </ActionButton>\n );\n};\n\nexport default UserButton;\n","import { $context } from \"alepha\";\nimport { AuthRouter } from \"../AuthRouter.ts\";\n\n/**\n * Register Auth UI components and get the AuthRouter instance.\n */\nexport const $uiAuth = () => {\n const { alepha } = $context();\n return alepha.inject(AuthRouter);\n};\n","import { AlephaUI } from \"@alepha/ui\";\nimport { $module } from \"alepha\";\nimport { AlephaReactAuth } from \"alepha/react/auth\";\nimport { AlephaReactI18n } from \"alepha/react/i18n\";\nimport { AuthI18n } from \"./AuthI18n.ts\";\nimport { AuthRouter } from \"./AuthRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./AuthRouter.ts\";\nexport type { UserButtonProps } from \"./components/buttons/UserButton.tsx\";\nexport { default as UserButton } from \"./components/buttons/UserButton.tsx\";\nexport { default as Login } from \"./components/Login.tsx\";\nexport { default as Register } from \"./components/Register.tsx\";\nexport { default as ResetPassword } from \"./components/ResetPassword.tsx\";\nexport { default as VerifyEmail } from \"./components/VerifyEmail.tsx\";\nexport * from \"./primitives/$uiAuth.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * | Stability | Since | Runtime |\n * |-----------|-------|---------|\n * | 2 - beta | 0.12.0 | node, bun, workerd, browser|\n *\n * Authentication UI components.\n *\n * **Features:**\n * - Login page component\n * - Register page component\n * - Reset password page component\n * - Email verification page component\n * - UserButton for user menu\n *\n * @module alepha.ui.auth\n */\nexport const AlephaUIAuth = $module({\n name: \"alepha.ui.auth\",\n services: [AlephaUI, AlephaReactAuth, AlephaReactI18n, AuthRouter, AuthI18n],\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/auth/AuthI18n.ts","../../src/auth/AuthRouter.ts","../../src/auth/components/buttons/UserButton.tsx","../../src/auth/primitives/$uiAuth.ts","../../src/auth/index.ts"],"sourcesContent":["import { $dictionary } from \"alepha/react/i18n\";\n\nexport class AuthI18n {\n en = $dictionary({\n name: \"alepha.ui.auth.en\",\n lazy: () => ({\n default: {\n loginSignIn: \"Sign in\",\n loginContinueWith: \"Continue with $1\",\n loginOr: \"OR\",\n loginCancel: \"Cancel\",\n loginForgotPassword: \"Forgot password?\",\n loginNoAccount: \"Don't have an account?\",\n loginSignUp: \"Sign up\",\n loginUsername: \"Username\",\n loginEmail: \"Email\",\n loginPhone: \"Phone number\",\n loginPassword: \"Password\",\n registerCreateAccount: \"Create account\",\n registerContinueWith: \"Continue with $1\",\n registerOr: \"OR\",\n registerCancel: \"Cancel\",\n registerHaveAccount: \"Already have an account?\",\n registerSignIn: \"Sign in\",\n registerUsername: \"Username\",\n registerEmail: \"Email\",\n registerPhone: \"Phone number\",\n registerPassword: \"Password\",\n registerConfirmPassword: \"Confirm password\",\n registerDisabled:\n \"Registration is not available. Please contact your administrator.\",\n registerBackToSignIn: \"Back to sign in\",\n registerVerifyTitle: \"Verify your account\",\n registerVerifyDescription:\n \"Please enter the verification code(s) sent to you.\",\n registerEmailCode: \"Email verification code\",\n registerPhoneCode: \"Phone verification code\",\n registerVerifySubmit: \"Complete Registration\",\n registerVerifyBack: \"Back to registration\",\n resetPasswordTitle: \"Reset password\",\n resetPasswordEmail: \"Email\",\n resetPasswordEnterEmail:\n \"Enter your email address to reset your password\",\n resetPasswordSendCode: \"Send verification code\",\n resetPasswordCodeSent: \"We've sent a verification code to your email.\",\n resetPasswordEnterCode: \"Enter the 6-digit code\",\n resetPasswordResendCode: \"Resend code\",\n resetPasswordEnterNewPassword: \"Create your new password\",\n resetPasswordNewPassword: \"New password\",\n resetPasswordConfirmPassword: \"Confirm password\",\n resetPasswordSetNewPassword: \"Set new password\",\n resetPasswordSuccess: \"Your password has been reset successfully.\",\n resetPasswordBackToSignIn: \"Back to sign in\",\n resetPasswordCancel: \"Cancel\",\n resetPasswordDisabled:\n \"Password reset is not available. Please contact your administrator.\",\n verifyEmailTitle: \"Email Verification\",\n verifyEmailVerifying: \"Verifying your email...\",\n verifyEmailPleaseWait:\n \"Please wait while we verify your email address.\",\n verifyEmailSuccess: \"Your email has been verified successfully.\",\n verifyEmailFailed:\n \"Failed to verify your email. The link may have expired or is invalid.\",\n verifyEmailMissingParams:\n \"Invalid verification link. Email and token are required.\",\n verifyEmailSignIn: \"Sign in to your account\",\n verifyEmailBackToSignIn: \"Back to sign in\",\n },\n }),\n });\n\n fr = $dictionary({\n lazy: () => ({\n default: {\n loginSignIn: \"Se connecter\",\n loginContinueWith: \"Continuer avec $1\",\n loginOr: \"OU\",\n loginCancel: \"Annuler\",\n loginForgotPassword: \"Mot de passe oublié ?\",\n loginNoAccount: \"Vous n'avez pas de compte ?\",\n loginSignUp: \"S'inscrire\",\n loginUsername: \"Nom d'utilisateur\",\n loginEmail: \"E-mail\",\n loginPhone: \"Numéro de téléphone\",\n loginPassword: \"Mot de passe\",\n registerCreateAccount: \"Créer un compte\",\n registerContinueWith: \"Continuer avec $1\",\n registerOr: \"OU\",\n registerCancel: \"Annuler\",\n registerHaveAccount: \"Vous avez déjà un compte ?\",\n registerSignIn: \"Se connecter\",\n registerUsername: \"Nom d'utilisateur\",\n registerEmail: \"E-mail\",\n registerPhone: \"Numéro de téléphone\",\n registerPassword: \"Mot de passe\",\n registerConfirmPassword: \"Confirmer le mot de passe\",\n registerDisabled:\n \"L'inscription n'est pas disponible. Veuillez contacter votre administrateur.\",\n registerBackToSignIn: \"Retour à la connexion\",\n registerVerifyTitle: \"Vérifiez votre compte\",\n registerVerifyDescription:\n \"Veuillez entrer le(s) code(s) de vérification qui vous ont été envoyés.\",\n registerEmailCode: \"Code de vérification par e-mail\",\n registerPhoneCode: \"Code de vérification par téléphone\",\n registerVerifySubmit: \"Terminer l'inscription\",\n registerVerifyBack: \"Retour à l'inscription\",\n resetPasswordTitle: \"Réinitialiser le mot de passe\",\n resetPasswordEmail: \"E-mail\",\n resetPasswordEnterEmail:\n \"Entrez votre adresse e-mail pour réinitialiser votre mot de passe\",\n resetPasswordSendCode: \"Envoyer le code de vérification\",\n resetPasswordCodeSent:\n \"Nous avons envoyé un code de vérification à votre e-mail.\",\n resetPasswordEnterCode: \"Entrez le code à 6 chiffres\",\n resetPasswordResendCode: \"Renvoyer le code\",\n resetPasswordEnterNewPassword: \"Créez votre nouveau mot de passe\",\n resetPasswordNewPassword: \"Nouveau mot de passe\",\n resetPasswordConfirmPassword: \"Confirmer le mot de passe\",\n resetPasswordSetNewPassword: \"Définir le nouveau mot de passe\",\n resetPasswordSuccess:\n \"Votre mot de passe a été réinitialisé avec succès.\",\n resetPasswordBackToSignIn: \"Retour à la connexion\",\n resetPasswordCancel: \"Annuler\",\n resetPasswordDisabled:\n \"La réinitialisation du mot de passe n'est pas disponible. Veuillez contacter votre administrateur.\",\n verifyEmailTitle: \"Vérification de l'e-mail\",\n verifyEmailVerifying: \"Vérification de votre e-mail...\",\n verifyEmailPleaseWait:\n \"Veuillez patienter pendant que nous vérifions votre adresse e-mail.\",\n verifyEmailSuccess: \"Votre e-mail a été vérifié avec succès.\",\n verifyEmailFailed:\n \"Échec de la vérification de votre e-mail. Le lien a peut-être expiré ou est invalide.\",\n verifyEmailMissingParams:\n \"Lien de vérification invalide. L'e-mail et le jeton sont requis.\",\n verifyEmailSignIn: \"Se connecter à votre compte\",\n verifyEmailBackToSignIn: \"Retour à la connexion\",\n },\n }),\n });\n}\n","import {\n IconLogin2,\n IconLogout2,\n IconMailCheck,\n IconPasswordUser,\n IconUser,\n IconUserPlus,\n} from \"@tabler/icons-react\";\nimport { $inject, AlephaError, t } from \"alepha\";\nimport type { RealmController } from \"alepha/api/users\";\nimport { ReactAuth } from \"alepha/react/auth\";\nimport { $page, Redirection } from \"alepha/react/router\";\nimport { $client } from \"alepha/server/links\";\n\n/**\n * Schema for realm query parameter used across auth pages.\n */\nconst realmQuerySchema = t.object({\n r: t.optional(t.string({ description: \"Redirect URL after authentication\" })),\n realm: t.optional(\n t.string({ description: \"User realm name for multi-tenant auth\" }),\n ),\n});\n\nexport class AuthRouter {\n protected readonly realmClient = $client<RealmController>();\n protected readonly auth = $inject(ReactAuth);\n\n authLayout = $page({\n label: \"Auth\",\n path: \"/auth\",\n lazy: () => import(\"./components/AuthLayout.tsx\"),\n children: () => [\n this.login,\n this.register,\n this.resetPassword,\n this.verifyEmail,\n this.profile,\n ],\n });\n\n login = $page({\n icon: IconLogin2,\n label: \"Sign In\",\n description: \"Sign in to your account\",\n path: \"/login\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/Login.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n register = $page({\n icon: IconUserPlus,\n label: \"Register\",\n description: \"Create a new account\",\n path: \"/register\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/Register.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n resetPassword = $page({\n icon: IconPasswordUser,\n label: \"Reset Password\",\n description: \"Reset your account password\",\n path: \"/reset-password\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/ResetPassword.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n verifyEmail = $page({\n icon: IconMailCheck,\n label: \"Verify Email\",\n description: \"Verify your email address\",\n path: \"/verify-email\",\n schema: {\n query: t.object({\n email: t.optional(t.string()),\n token: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/VerifyEmail.tsx\"),\n });\n\n logout = $page({\n icon: IconLogout2,\n label: \"Sign Out\",\n description: \"Sign out of your account\",\n path: \"/logout\",\n component: () => null,\n loader: () => {\n this.auth.logout();\n return {};\n },\n });\n\n profile = $page({\n name: \"userProfile\",\n icon: IconUser,\n label: \"Profile\",\n description: \"View your profile\",\n path: \"/profile\",\n can: () => !!this.auth.user,\n lazy: () => import(\"./components/Profile.tsx\"),\n });\n\n protected async loadRealmConfig(realmName?: string) {\n try {\n return await this.realmClient.getRealmConfig({\n query: { realmName },\n });\n } catch (e) {\n if (e instanceof AlephaError) {\n throw new AlephaError(\n \"Missing Realm Configuration - Did you forget to add '$realm()' to your application?\",\n e,\n );\n }\n throw e;\n }\n }\n}\n","import {\n ActionButton,\n type ActionMenuConfig,\n type ActionMenuItem,\n type ActionProps,\n ui,\n} from \"@alepha/ui\";\nimport { Avatar } from \"@mantine/core\";\nimport {\n IconLogin2,\n IconLogout,\n IconSettings,\n IconUser,\n} from \"@tabler/icons-react\";\nimport type { AdminUserController } from \"alepha/api/users\";\nimport { useClient, useInject } from \"alepha/react\";\nimport { useAuth } from \"alepha/react/auth\";\nimport { ReactPageProvider, useRouter } from \"alepha/react/router\";\nimport type { ReactNode } from \"react\";\nimport type { AuthRouter } from \"../../AuthRouter.ts\";\n\nexport interface UserButtonProps\n extends Omit<ActionProps, \"menu\" | \"icon\" | \"onClick\"> {\n /**\n * Additional menu items to display before the logout option\n */\n menuItems?: ActionMenuItem[];\n\n /**\n * Custom logout label (default: \"Sign out\")\n */\n logoutLabel?: string;\n\n /**\n * Menu configuration overrides\n */\n menuConfig?: Partial<Omit<ActionMenuConfig, \"items\">>;\n\n /**\n * Whether to show a divider before logout (default: true when menuItems provided)\n */\n showLogoutDivider?: boolean;\n\n /**\n * Custom icon to use instead of user avatar (default: IconUser)\n */\n icon?: ReactNode;\n}\n\nconst UserButton = (props: UserButtonProps) => {\n const {\n menuItems = [],\n logoutLabel = \"Sign out\",\n menuConfig,\n showLogoutDivider = menuItems.length > 0,\n icon,\n children,\n ...buttonProps\n } = props;\n\n buttonProps.variant ??= \"subtle\";\n\n const adminUserCtrl = useClient<AdminUserController>();\n const pages = useInject(ReactPageProvider);\n\n const auth = useAuth<{\n username?: string;\n email?: string;\n picture?: string;\n }>();\n\n const isConnected = !!auth.user;\n const isAdmin = isConnected && adminUserCtrl.findUsers.can();\n const userPage = pages.getPages().find((it) => it.name === \"userProfile\");\n const adminPage = pages.getPages().find((it) => it.name === \"adminLayout\");\n const authRouter = useRouter<AuthRouter>();\n\n if (!auth.user) {\n return (\n <ActionButton\n {...buttonProps}\n icon={IconLogin2}\n href={authRouter.path(\"login\")}\n />\n );\n }\n\n const userLabel = auth.user.username || auth.user.email;\n\n const items: ActionMenuItem[] = [];\n\n // Add user info label if available\n if (auth.user.email && auth.user.username) {\n items.push({\n type: \"label\",\n label: auth.user.email,\n });\n }\n\n // Add profile page link if available\n if (userPage && isConnected) {\n items.push({\n label: \"Profile\",\n icon: <IconUser size={ui.sizes.icon.md} />,\n href: authRouter.path(\"userProfile\"),\n });\n }\n\n // Add admin page link if available and user is admin\n if (adminPage && isAdmin) {\n items.push({\n label: \"Admin\",\n icon: <IconSettings size={ui.sizes.icon.md} />,\n href: authRouter.path(\"adminLayout\"),\n });\n }\n\n // Add custom menu items\n items.push(...menuItems);\n\n // Add divider before logout if needed\n if (showLogoutDivider && items.length > 0) {\n items.push({ type: \"divider\" });\n }\n\n // Add logout item\n items.push({\n label: logoutLabel,\n icon: <IconLogout size={ui.sizes.icon.md} />,\n color: \"red\",\n onClick: () => auth.logout(),\n });\n\n // Use leftSection for Avatar (JSX element), icon prop for component types\n const hasAvatar = !icon && auth.user.picture;\n\n return (\n <ActionButton\n {...buttonProps}\n icon={hasAvatar ? undefined : (icon ?? IconUser)}\n leftSection={\n hasAvatar ? (\n <Avatar\n src={`/api/files/${auth.user.picture}`}\n size={24}\n radius=\"xl\"\n />\n ) : undefined\n }\n menu={{\n position: \"bottom-end\",\n width: 200,\n ...menuConfig,\n items,\n }}\n >\n {children ?? userLabel}\n </ActionButton>\n );\n};\n\nexport default UserButton;\n","import { $context } from \"alepha\";\nimport { AuthRouter } from \"../AuthRouter.ts\";\n\n/**\n * Register Auth UI components and get the AuthRouter instance.\n */\nexport const $uiAuth = () => {\n const { alepha } = $context();\n return alepha.inject(AuthRouter);\n};\n","import { AlephaUI } from \"@alepha/ui\";\nimport { $module } from \"alepha\";\nimport { AlephaReactAuth } from \"alepha/react/auth\";\nimport { AlephaReactI18n } from \"alepha/react/i18n\";\nimport { AuthI18n } from \"./AuthI18n.ts\";\nimport { AuthRouter } from \"./AuthRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./AuthRouter.ts\";\nexport type { UserButtonProps } from \"./components/buttons/UserButton.tsx\";\nexport { default as UserButton } from \"./components/buttons/UserButton.tsx\";\nexport { default as Login } from \"./components/Login.tsx\";\nexport { default as Register } from \"./components/Register.tsx\";\nexport { default as ResetPassword } from \"./components/ResetPassword.tsx\";\nexport { default as VerifyEmail } from \"./components/VerifyEmail.tsx\";\nexport * from \"./primitives/$uiAuth.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * | Stability | Since | Runtime |\n * |-----------|-------|---------|\n * | 2 - beta | 0.12.0 | node, bun, workerd, browser|\n *\n * Authentication UI components.\n *\n * **Features:**\n * - Login page component\n * - Register page component\n * - Reset password page component\n * - Email verification page component\n * - UserButton for user menu\n *\n * @module alepha.ui.auth\n */\nexport const AlephaUIAuth = $module({\n name: \"alepha.ui.auth\",\n services: [AlephaUI, AlephaReactAuth, AlephaReactI18n, AuthRouter, AuthI18n],\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __exportAll = (all, no_symbols) => {
|
|
4
|
+
let target = {};
|
|
5
|
+
for (var name in all) {
|
|
6
|
+
__defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
if (!no_symbols) {
|
|
12
|
+
__defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
13
|
+
}
|
|
14
|
+
return target;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { __exportAll as t };
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as alepha from "alepha";
|
|
2
2
|
import { Alepha, Async, Page, PageMetadata, Static, TObject, TProperties } from "alepha";
|
|
3
3
|
import { BaseInputField, FormModel } from "alepha/react/form";
|
|
4
4
|
import * as alepha_react_head0 from "alepha/react/head";
|
|
5
5
|
import * as alepha_server_cookies0 from "alepha/server/cookies";
|
|
6
|
-
import { AnchorProps, AppShellFooterProps, AppShellHeaderProps, AppShellMainProps, AppShellNavbarProps, AppShellProps, AutocompleteProps, BurgerProps, ButtonProps, ColorInputProps, ColorSchemeScriptProps, ContainerProps, FileInputProps, Flex, FlexProps, MantineBreakpoint, MantineProviderProps, MantineThemeOverride, MenuProps, MenuTargetProps, ModalProps, MultiSelectProps, NumberInputProps, PasswordInputProps, SegmentedControlProps, SelectProps, SliderProps, SwitchProps, TableProps, TableTrProps, TagsInputProps, Text, TextInputProps, TextareaProps, ThemeIconProps, TooltipProps } from "@mantine/core";
|
|
6
|
+
import { AnchorProps, AppShellFooterProps, AppShellHeaderProps, AppShellMainProps, AppShellNavbarProps, AppShellProps, AutocompleteProps, BurgerProps, ButtonProps, ColorInputProps, ColorSchemeScriptProps, ContainerProps, FileInputProps, Flex, FlexProps, GroupProps, MantineBreakpoint, MantineProviderProps, MantineThemeOverride, MenuProps, MenuTargetProps, ModalProps, MultiSelectProps, NumberInputProps, PasswordInputProps, SegmentedControlProps, SelectProps, SliderProps, SwitchProps, TableProps, TableTrProps, TagsInputProps, Text, TextInputProps, TextareaProps, ThemeIconProps, TooltipProps } from "@mantine/core";
|
|
7
7
|
import { ModalsProviderProps } from "@mantine/modals";
|
|
8
8
|
import { ComponentType, ReactElement, ReactNode } from "react";
|
|
9
|
-
import * as
|
|
9
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
10
10
|
import * as _mantine_notifications0 from "@mantine/notifications";
|
|
11
11
|
import { NotificationData, NotificationsProps } from "@mantine/notifications";
|
|
12
12
|
import * as alepha_react_router0 from "alepha/react/router";
|
|
@@ -17,56 +17,56 @@ import { DateInputProps, DateTimePickerProps, TimeInputProps } from "@mantine/da
|
|
|
17
17
|
import { DurationLike } from "alepha/datetime";
|
|
18
18
|
|
|
19
19
|
//#region ../../src/core/atoms/alephaSidebarAtom.d.ts
|
|
20
|
-
declare const alephaSidebarAtom:
|
|
20
|
+
declare const alephaSidebarAtom: alepha.Atom<alepha.TObject<{
|
|
21
21
|
/**
|
|
22
22
|
* Whether the sidebar is opened or closed (mobile).
|
|
23
23
|
*/
|
|
24
|
-
opened:
|
|
24
|
+
opened: alepha.TBoolean;
|
|
25
25
|
/**
|
|
26
26
|
* Whether the sidebar is collapsed (narrow) or expanded (wide).
|
|
27
27
|
*/
|
|
28
|
-
collapsed:
|
|
28
|
+
collapsed: alepha.TBoolean;
|
|
29
29
|
/**
|
|
30
30
|
* Current width of the sidebar when expanded (can be changed by resizing).
|
|
31
31
|
* @default 300
|
|
32
32
|
*/
|
|
33
|
-
width:
|
|
33
|
+
width: alepha.TNumber;
|
|
34
34
|
/**
|
|
35
35
|
* Default width used when expanding from collapsed state or on hover.
|
|
36
36
|
* @default 300
|
|
37
37
|
*/
|
|
38
|
-
defaultWidth:
|
|
38
|
+
defaultWidth: alepha.TNumber;
|
|
39
39
|
/**
|
|
40
40
|
* Width of the sidebar when collapsed.
|
|
41
41
|
* @default 78
|
|
42
42
|
*/
|
|
43
|
-
collapsedWidth:
|
|
43
|
+
collapsedWidth: alepha.TNumber;
|
|
44
44
|
/**
|
|
45
45
|
* Maximum width when resizing.
|
|
46
46
|
* @default 500
|
|
47
47
|
*/
|
|
48
|
-
maxWidth:
|
|
48
|
+
maxWidth: alepha.TNumber;
|
|
49
49
|
/**
|
|
50
50
|
* Minimum width before auto-collapse triggers.
|
|
51
51
|
* @default 150
|
|
52
52
|
*/
|
|
53
|
-
collapseThreshold:
|
|
53
|
+
collapseThreshold: alepha.TNumber;
|
|
54
54
|
/**
|
|
55
55
|
* Delay in ms before sidebar expands on hover when collapsed.
|
|
56
56
|
* @default 300
|
|
57
57
|
*/
|
|
58
|
-
hoverDelay:
|
|
58
|
+
hoverDelay: alepha.TNumber;
|
|
59
59
|
}>, "alepha.ui.sidebar">;
|
|
60
60
|
type AlephaSidebarState = Static<typeof alephaSidebarAtom.schema>;
|
|
61
61
|
//#endregion
|
|
62
62
|
//#region ../../src/core/atoms/alephaThemeAtom.d.ts
|
|
63
|
-
declare const alephaThemeAtom:
|
|
64
|
-
index:
|
|
63
|
+
declare const alephaThemeAtom: alepha.Atom<alepha.TObject<{
|
|
64
|
+
index: alepha.TInteger;
|
|
65
65
|
}>, "alepha.ui.theme">;
|
|
66
66
|
type CurrentAlephaTheme = Static<typeof alephaThemeAtom.schema>;
|
|
67
67
|
//#endregion
|
|
68
68
|
//#region ../../src/core/atoms/alephaThemeListAtom.d.ts
|
|
69
|
-
declare const alephaThemeListAtom:
|
|
69
|
+
declare const alephaThemeListAtom: alepha.Atom<alepha.TArray<alepha.TRecord<string, alepha.TAny>>, "alepha.ui.themeList">;
|
|
70
70
|
type AlephaThemeListAtom = Static<typeof alephaThemeListAtom.schema>;
|
|
71
71
|
//#endregion
|
|
72
72
|
//#region ../../src/core/utils/parseInput.d.ts
|
|
@@ -132,6 +132,7 @@ interface ControlArrayProps extends GenericControlProps {
|
|
|
132
132
|
* - Supports arrays of primitives
|
|
133
133
|
* - Grid layout for object items
|
|
134
134
|
* - Min/max constraints
|
|
135
|
+
* - Syncs with form state (handles external updates and resets)
|
|
135
136
|
*
|
|
136
137
|
* @example
|
|
137
138
|
* ```tsx
|
|
@@ -153,7 +154,7 @@ interface ControlArrayProps extends GenericControlProps {
|
|
|
153
154
|
* />
|
|
154
155
|
* ```
|
|
155
156
|
*/
|
|
156
|
-
declare const ControlArray: (props: ControlArrayProps) =>
|
|
157
|
+
declare const ControlArray: (props: ControlArrayProps) => react_jsx_runtime0.JSX.Element | null;
|
|
157
158
|
//#endregion
|
|
158
159
|
//#region ../../src/core/components/form/ControlNumber.d.ts
|
|
159
160
|
interface ControlNumberProps extends GenericControlProps {
|
|
@@ -163,7 +164,7 @@ interface ControlNumberProps extends GenericControlProps {
|
|
|
163
164
|
/**
|
|
164
165
|
*
|
|
165
166
|
*/
|
|
166
|
-
declare const ControlNumber: (props: ControlNumberProps) =>
|
|
167
|
+
declare const ControlNumber: (props: ControlNumberProps) => react_jsx_runtime0.JSX.Element | null;
|
|
167
168
|
//#endregion
|
|
168
169
|
//#region ../../src/core/components/form/ControlObject.d.ts
|
|
169
170
|
interface ControlObjectProps extends GenericControlProps {
|
|
@@ -217,7 +218,7 @@ interface ControlObjectProps extends GenericControlProps {
|
|
|
217
218
|
* />
|
|
218
219
|
* ```
|
|
219
220
|
*/
|
|
220
|
-
declare const ControlObject: (props: ControlObjectProps) =>
|
|
221
|
+
declare const ControlObject: (props: ControlObjectProps) => react_jsx_runtime0.JSX.Element | null;
|
|
221
222
|
//#endregion
|
|
222
223
|
//#region ../../src/core/components/form/ControlSelect.d.ts
|
|
223
224
|
type SelectValueLabel = string | {
|
|
@@ -246,7 +247,7 @@ interface ControlSelectProps extends GenericControlProps {
|
|
|
246
247
|
*
|
|
247
248
|
* Automatically detects enum values and array types from schema.
|
|
248
249
|
*/
|
|
249
|
-
declare const ControlSelect: (props: ControlSelectProps) =>
|
|
250
|
+
declare const ControlSelect: (props: ControlSelectProps) => react_jsx_runtime0.JSX.Element | null;
|
|
250
251
|
//#endregion
|
|
251
252
|
//#region ../../src/core/components/form/Control.d.ts
|
|
252
253
|
interface ControlProps extends GenericControlProps {
|
|
@@ -292,7 +293,7 @@ interface ControlProps extends GenericControlProps {
|
|
|
292
293
|
*
|
|
293
294
|
* Automatically handles labels, descriptions, error messages, required state, and default icons.
|
|
294
295
|
*/
|
|
295
|
-
declare const Control: (_props: ControlProps) =>
|
|
296
|
+
declare const Control: (_props: ControlProps) => react_jsx_runtime0.JSX.Element | null;
|
|
296
297
|
type CustomControlProps = {
|
|
297
298
|
defaultValue: any;
|
|
298
299
|
onChange: (value: any) => void;
|
|
@@ -415,7 +416,7 @@ interface ActionCommonProps extends ButtonProps {
|
|
|
415
416
|
intent?: "primary" | "success" | "danger" | "warning" | "info" | "none";
|
|
416
417
|
}
|
|
417
418
|
type ActionProps = ActionCommonProps & (ActionNavigationButtonProps | ActionClickButtonProps | ActionSubmitButtonProps | ActionHookButtonProps | {});
|
|
418
|
-
declare const ActionButton: (_props: ActionProps) =>
|
|
419
|
+
declare const ActionButton: (_props: ActionProps) => react_jsx_runtime0.JSX.Element;
|
|
419
420
|
interface ActionSubmitButtonProps extends ButtonProps {
|
|
420
421
|
form: FormModel<any>;
|
|
421
422
|
type?: "submit" | "reset";
|
|
@@ -438,7 +439,7 @@ interface ActionNavigationButtonProps extends ButtonProps {
|
|
|
438
439
|
//#endregion
|
|
439
440
|
//#region ../../src/core/components/buttons/BurgerButton.d.ts
|
|
440
441
|
interface BurgerButtonProps extends BurgerProps {}
|
|
441
|
-
declare const BurgerButton: (props: BurgerButtonProps) =>
|
|
442
|
+
declare const BurgerButton: (props: BurgerButtonProps) => react_jsx_runtime0.JSX.Element;
|
|
442
443
|
//#endregion
|
|
443
444
|
//#region ../../src/core/components/buttons/ClipboardButton.d.ts
|
|
444
445
|
interface ClipboardButtonProps extends Omit<ActionCommonProps, "onClick" | "icon"> {
|
|
@@ -459,7 +460,7 @@ interface ClipboardButtonProps extends Omit<ActionCommonProps, "onClick" | "icon
|
|
|
459
460
|
*/
|
|
460
461
|
copiedLabel?: string;
|
|
461
462
|
}
|
|
462
|
-
declare const ClipboardButton: (props: ClipboardButtonProps) =>
|
|
463
|
+
declare const ClipboardButton: (props: ClipboardButtonProps) => react_jsx_runtime0.JSX.Element;
|
|
463
464
|
//#endregion
|
|
464
465
|
//#region ../../src/core/components/buttons/DarkModeButton.d.ts
|
|
465
466
|
/**
|
|
@@ -469,24 +470,24 @@ declare const ClipboardButton: (props: ClipboardButtonProps) => react_jsx_runtim
|
|
|
469
470
|
* Both icons are rendered, CSS hides the wrong one based on
|
|
470
471
|
* `data-mantine-color-scheme` attribute.
|
|
471
472
|
*/
|
|
472
|
-
declare const DarkModeButton: (props: Partial<ActionProps>) =>
|
|
473
|
+
declare const DarkModeButton: (props: Partial<ActionProps>) => react_jsx_runtime0.JSX.Element;
|
|
473
474
|
//#endregion
|
|
474
475
|
//#region ../../src/core/components/buttons/LanguageButton.d.ts
|
|
475
|
-
declare const LanguageButton: (props: Partial<ActionProps>) =>
|
|
476
|
+
declare const LanguageButton: (props: Partial<ActionProps>) => react_jsx_runtime0.JSX.Element;
|
|
476
477
|
//#endregion
|
|
477
478
|
//#region ../../src/core/components/buttons/OmnibarButton.d.ts
|
|
478
479
|
interface OmnibarButtonProps {
|
|
479
480
|
actionProps?: ActionProps;
|
|
480
481
|
collapsed?: boolean;
|
|
481
482
|
}
|
|
482
|
-
declare const OmnibarButton: (props: OmnibarButtonProps) =>
|
|
483
|
+
declare const OmnibarButton: (props: OmnibarButtonProps) => react_jsx_runtime0.JSX.Element;
|
|
483
484
|
//#endregion
|
|
484
485
|
//#region ../../src/core/components/buttons/ThemeButton.d.ts
|
|
485
|
-
declare const ThemeButton: (props: Partial<ActionProps>) =>
|
|
486
|
+
declare const ThemeButton: (props: Partial<ActionProps>) => react_jsx_runtime0.JSX.Element;
|
|
486
487
|
//#endregion
|
|
487
488
|
//#region ../../src/core/components/buttons/ToggleSidebarButton.d.ts
|
|
488
489
|
type Props = ActionProps;
|
|
489
|
-
declare const ToggleSidebarButton: (props: Props) =>
|
|
490
|
+
declare const ToggleSidebarButton: (props: Props) => react_jsx_runtime0.JSX.Element;
|
|
490
491
|
//#endregion
|
|
491
492
|
//#region ../../src/core/services/DialogService.d.ts
|
|
492
493
|
interface BaseDialogOptions extends Partial<ModalProps> {
|
|
@@ -573,19 +574,19 @@ declare class DialogService {
|
|
|
573
574
|
declare const AlertDialog: ({
|
|
574
575
|
options,
|
|
575
576
|
onClose
|
|
576
|
-
}: AlertDialogProps) =>
|
|
577
|
+
}: AlertDialogProps) => react_jsx_runtime0.JSX.Element;
|
|
577
578
|
//#endregion
|
|
578
579
|
//#region ../../src/core/components/dialogs/ConfirmDialog.d.ts
|
|
579
580
|
declare const ConfirmDialog: ({
|
|
580
581
|
options,
|
|
581
582
|
onConfirm
|
|
582
|
-
}: ConfirmDialogProps) =>
|
|
583
|
+
}: ConfirmDialogProps) => react_jsx_runtime0.JSX.Element;
|
|
583
584
|
//#endregion
|
|
584
585
|
//#region ../../src/core/components/dialogs/PromptDialog.d.ts
|
|
585
586
|
declare const PromptDialog: ({
|
|
586
587
|
options,
|
|
587
588
|
onSubmit
|
|
588
|
-
}: PromptDialogProps) =>
|
|
589
|
+
}: PromptDialogProps) => react_jsx_runtime0.JSX.Element;
|
|
589
590
|
//#endregion
|
|
590
591
|
//#region ../../src/core/components/form/ControlDate.d.ts
|
|
591
592
|
interface ControlDateProps extends GenericControlProps {
|
|
@@ -603,7 +604,7 @@ interface ControlDateProps extends GenericControlProps {
|
|
|
603
604
|
*
|
|
604
605
|
* Automatically detects date formats from schema and renders appropriate picker.
|
|
605
606
|
*/
|
|
606
|
-
declare const ControlDate: (props: ControlDateProps) =>
|
|
607
|
+
declare const ControlDate: (props: ControlDateProps) => react_jsx_runtime0.JSX.Element | null;
|
|
607
608
|
//#endregion
|
|
608
609
|
//#region ../../src/core/components/form/ControlQueryBuilder.d.ts
|
|
609
610
|
interface ControlQueryBuilderProps extends Omit<TextInputProps, "value" | "onChange"> {
|
|
@@ -622,7 +623,7 @@ declare const ControlQueryBuilder: ({
|
|
|
622
623
|
onChange,
|
|
623
624
|
placeholder,
|
|
624
625
|
...textInputProps
|
|
625
|
-
}: ControlQueryBuilderProps) =>
|
|
626
|
+
}: ControlQueryBuilderProps) => react_jsx_runtime0.JSX.Element;
|
|
626
627
|
//#endregion
|
|
627
628
|
//#region ../../src/core/components/form/TypeForm.d.ts
|
|
628
629
|
interface TypeFormProps<T extends TObject> {
|
|
@@ -694,7 +695,27 @@ interface TypeFormProps<T extends TObject> {
|
|
|
694
695
|
* return <TypeForm form={form} columns={2} />;
|
|
695
696
|
* ```
|
|
696
697
|
*/
|
|
697
|
-
declare const TypeForm: <T extends TObject>(props: TypeFormProps<T>) =>
|
|
698
|
+
declare const TypeForm: <T extends TObject>(props: TypeFormProps<T>) => react_jsx_runtime0.JSX.Element | null;
|
|
699
|
+
//#endregion
|
|
700
|
+
//#region ../../src/core/components/layout/Omnibar.d.ts
|
|
701
|
+
interface OmnibarProps {
|
|
702
|
+
shortcut?: string | string[];
|
|
703
|
+
searchPlaceholder?: string;
|
|
704
|
+
nothingFound?: ReactNode;
|
|
705
|
+
}
|
|
706
|
+
declare const Omnibar: (props: OmnibarProps) => react_jsx_runtime0.JSX.Element;
|
|
707
|
+
//#endregion
|
|
708
|
+
//#region ../../src/core/components/layout/AlephaMantineProvider.d.ts
|
|
709
|
+
interface AlephaMantineProviderProps {
|
|
710
|
+
children?: ReactNode;
|
|
711
|
+
mantine?: MantineProviderProps;
|
|
712
|
+
colorSchemeScript?: ColorSchemeScriptProps;
|
|
713
|
+
navigationProgress?: NavigationProgressProps;
|
|
714
|
+
notifications?: NotificationsProps;
|
|
715
|
+
modals?: ModalsProviderProps;
|
|
716
|
+
omnibar?: OmnibarProps | false;
|
|
717
|
+
}
|
|
718
|
+
declare const AlephaMantineProvider: (props: AlephaMantineProviderProps) => react_jsx_runtime0.JSX.Element;
|
|
698
719
|
//#endregion
|
|
699
720
|
//#region ../../src/core/components/layout/AppBar.d.ts
|
|
700
721
|
type AppBarItem = AppBarElement | AppBarBurger | AppBarDark | AppBarSearch | AppBarLang | AppBarSpacer | AppBarDivider | AppBarLogo | AppBarBack;
|
|
@@ -801,7 +822,42 @@ interface AppBarProps {
|
|
|
801
822
|
*/
|
|
802
823
|
container?: boolean | ContainerProps;
|
|
803
824
|
}
|
|
804
|
-
declare const AppBar: (props: AppBarProps) =>
|
|
825
|
+
declare const AppBar: (props: AppBarProps) => react_jsx_runtime0.JSX.Element;
|
|
826
|
+
//#endregion
|
|
827
|
+
//#region ../../src/core/components/layout/Breadcrumb.d.ts
|
|
828
|
+
interface BreadcrumbProps extends GroupProps {
|
|
829
|
+
/**
|
|
830
|
+
* Label for the home/root crumb. Set to `false` to hide the root crumb.
|
|
831
|
+
*
|
|
832
|
+
* @default "Home"
|
|
833
|
+
*/
|
|
834
|
+
home?: string | false;
|
|
835
|
+
/**
|
|
836
|
+
* Custom separator between crumbs.
|
|
837
|
+
*
|
|
838
|
+
* @default IconChevronRight
|
|
839
|
+
*/
|
|
840
|
+
separator?: ReactNode;
|
|
841
|
+
/**
|
|
842
|
+
* Size of text and separator icons.
|
|
843
|
+
*
|
|
844
|
+
* @default "xs"
|
|
845
|
+
*/
|
|
846
|
+
size?: string;
|
|
847
|
+
}
|
|
848
|
+
/**
|
|
849
|
+
* Automatic breadcrumb component that reads the current route hierarchy
|
|
850
|
+
* from the Alepha router's layer stack.
|
|
851
|
+
*
|
|
852
|
+
* Pages should define a `label` in their `$page()` options for best results.
|
|
853
|
+
* Falls back to the page name converted to Title Case.
|
|
854
|
+
*/
|
|
855
|
+
declare const Breadcrumb: ({
|
|
856
|
+
home,
|
|
857
|
+
separator,
|
|
858
|
+
size,
|
|
859
|
+
...groupProps
|
|
860
|
+
}: BreadcrumbProps) => react_jsx_runtime0.JSX.Element | null;
|
|
805
861
|
//#endregion
|
|
806
862
|
//#region ../../src/core/components/layout/Sidebar.d.ts
|
|
807
863
|
interface SidebarProps {
|
|
@@ -815,6 +871,11 @@ interface SidebarProps {
|
|
|
815
871
|
hide?: {
|
|
816
872
|
paths?: string[];
|
|
817
873
|
};
|
|
874
|
+
/**
|
|
875
|
+
* Whether the sidebar expands on hover when collapsed.
|
|
876
|
+
* @default true
|
|
877
|
+
*/
|
|
878
|
+
expandOnHover?: boolean;
|
|
818
879
|
/**
|
|
819
880
|
* Automatically populate the menu from the router's pages.
|
|
820
881
|
*/
|
|
@@ -822,7 +883,7 @@ interface SidebarProps {
|
|
|
822
883
|
startsWith: string;
|
|
823
884
|
};
|
|
824
885
|
}
|
|
825
|
-
declare const Sidebar: (props: SidebarProps) =>
|
|
886
|
+
declare const Sidebar: (props: SidebarProps) => react_jsx_runtime0.JSX.Element;
|
|
826
887
|
interface SidebarItemProps {
|
|
827
888
|
item: SidebarMenuItem;
|
|
828
889
|
level: number;
|
|
@@ -847,6 +908,7 @@ interface SidebarSpacer extends SidebarAbstractItem {
|
|
|
847
908
|
}
|
|
848
909
|
interface SidebarDivider extends SidebarAbstractItem {
|
|
849
910
|
type: "divider";
|
|
911
|
+
fill?: true;
|
|
850
912
|
}
|
|
851
913
|
interface SidebarSearch extends SidebarAbstractItem {
|
|
852
914
|
type: "search";
|
|
@@ -858,6 +920,7 @@ interface SidebarSection extends SidebarAbstractItem {
|
|
|
858
920
|
type: "section";
|
|
859
921
|
label: string;
|
|
860
922
|
icon?: ReactNode | ComponentType;
|
|
923
|
+
children?: SidebarNode[];
|
|
861
924
|
}
|
|
862
925
|
interface SidebarMenuItem extends SidebarAbstractItem {
|
|
863
926
|
label: string | ReactNode;
|
|
@@ -882,8 +945,8 @@ interface SidebarTheme {
|
|
|
882
945
|
search?: SidebarButtonTheme;
|
|
883
946
|
}
|
|
884
947
|
//#endregion
|
|
885
|
-
//#region ../../src/core/components/layout/
|
|
886
|
-
interface
|
|
948
|
+
//#region ../../src/core/components/layout/DashboardShell.d.ts
|
|
949
|
+
interface DashboardShellProps {
|
|
887
950
|
appShellProps?: Partial<AppShellProps>;
|
|
888
951
|
appShellMainProps?: Partial<AppShellMainProps>;
|
|
889
952
|
appShellHeaderProps?: Partial<AppShellHeaderProps>;
|
|
@@ -894,6 +957,30 @@ interface AdminShellProps {
|
|
|
894
957
|
header?: ReactNode;
|
|
895
958
|
footer?: ReactNode;
|
|
896
959
|
children?: ReactNode;
|
|
960
|
+
/**
|
|
961
|
+
* AppShell layout mode.
|
|
962
|
+
* - "default": header/footer span full width, navbar below header.
|
|
963
|
+
* - "alt": navbar is full height, header/footer offset by navbar width.
|
|
964
|
+
*/
|
|
965
|
+
layout?: "default" | "alt";
|
|
966
|
+
/**
|
|
967
|
+
* Content rendered above the Sidebar inside the navbar (e.g. logo).
|
|
968
|
+
*/
|
|
969
|
+
navbarHeader?: ReactNode;
|
|
970
|
+
/**
|
|
971
|
+
* Content rendered below the Sidebar inside the navbar (e.g. toggle button).
|
|
972
|
+
*/
|
|
973
|
+
navbarFooter?: ReactNode;
|
|
974
|
+
/**
|
|
975
|
+
* Height of the header bar in pixels.
|
|
976
|
+
* @default 60
|
|
977
|
+
*/
|
|
978
|
+
headerHeight?: number;
|
|
979
|
+
/**
|
|
980
|
+
* Height of the footer bar in pixels.
|
|
981
|
+
* @default 24
|
|
982
|
+
*/
|
|
983
|
+
footerHeight?: number;
|
|
897
984
|
/**
|
|
898
985
|
* Enable drag-to-resize for the sidebar.
|
|
899
986
|
* Width and constraints are configured in alephaSidebarAtom.
|
|
@@ -911,27 +998,7 @@ interface AdminShellProps {
|
|
|
911
998
|
*/
|
|
912
999
|
container?: boolean | ContainerProps;
|
|
913
1000
|
}
|
|
914
|
-
declare const
|
|
915
|
-
//#endregion
|
|
916
|
-
//#region ../../src/core/components/layout/Omnibar.d.ts
|
|
917
|
-
interface OmnibarProps {
|
|
918
|
-
shortcut?: string | string[];
|
|
919
|
-
searchPlaceholder?: string;
|
|
920
|
-
nothingFound?: ReactNode;
|
|
921
|
-
}
|
|
922
|
-
declare const Omnibar: (props: OmnibarProps) => react_jsx_runtime10.JSX.Element;
|
|
923
|
-
//#endregion
|
|
924
|
-
//#region ../../src/core/components/layout/AlephaMantineProvider.d.ts
|
|
925
|
-
interface AlephaMantineProviderProps {
|
|
926
|
-
children?: ReactNode;
|
|
927
|
-
mantine?: MantineProviderProps;
|
|
928
|
-
colorSchemeScript?: ColorSchemeScriptProps;
|
|
929
|
-
navigationProgress?: NavigationProgressProps;
|
|
930
|
-
notifications?: NotificationsProps;
|
|
931
|
-
modals?: ModalsProviderProps;
|
|
932
|
-
omnibar?: OmnibarProps | false;
|
|
933
|
-
}
|
|
934
|
-
declare const AlephaMantineProvider: (props: AlephaMantineProviderProps) => react_jsx_runtime10.JSX.Element;
|
|
1001
|
+
declare const DashboardShell: (props: DashboardShellProps) => react_jsx_runtime0.JSX.Element;
|
|
935
1002
|
//#endregion
|
|
936
1003
|
//#region ../../src/core/components/table/types.d.ts
|
|
937
1004
|
interface ColumnVisibility {
|
|
@@ -1053,7 +1120,7 @@ interface DataTableProps<T extends object, Filters extends TObject> {
|
|
|
1053
1120
|
}
|
|
1054
1121
|
//#endregion
|
|
1055
1122
|
//#region ../../src/core/components/table/DataTable.d.ts
|
|
1056
|
-
declare const DataTable: <T extends object, Filters extends TObject>(props: DataTableProps<T, Filters>) =>
|
|
1123
|
+
declare const DataTable: <T extends object, Filters extends TObject>(props: DataTableProps<T, Filters>) => react_jsx_runtime0.JSX.Element;
|
|
1057
1124
|
//#endregion
|
|
1058
1125
|
//#region ../../src/core/constants/ui.d.ts
|
|
1059
1126
|
declare const ui: {
|
|
@@ -1126,8 +1193,8 @@ declare const useToast: () => ToastService;
|
|
|
1126
1193
|
//#region ../../src/core/providers/ThemeProvider.d.ts
|
|
1127
1194
|
declare class ThemeProvider {
|
|
1128
1195
|
protected readonly alepha: Alepha;
|
|
1129
|
-
protected readonly cookie: alepha_server_cookies0.AbstractCookiePrimitive<
|
|
1130
|
-
index:
|
|
1196
|
+
protected readonly cookie: alepha_server_cookies0.AbstractCookiePrimitive<alepha.TObject<{
|
|
1197
|
+
index: alepha.TInteger;
|
|
1131
1198
|
}>>;
|
|
1132
1199
|
protected readonly head: alepha_react_head0.HeadPrimitive;
|
|
1133
1200
|
setTheme(index: number): void;
|
|
@@ -1185,13 +1252,25 @@ declare const getDefaultIcon: (params: {
|
|
|
1185
1252
|
* capitalize("hello") // "Hello"
|
|
1186
1253
|
*/
|
|
1187
1254
|
declare const capitalize: (str: string) => string;
|
|
1255
|
+
/**
|
|
1256
|
+
* Converts camelCase or snake_case to Title Case with spaces.
|
|
1257
|
+
*
|
|
1258
|
+
* @example
|
|
1259
|
+
* toTitleCase("userName") // "User Name"
|
|
1260
|
+
* toTitleCase("first_name") // "First Name"
|
|
1261
|
+
* toTitleCase("email") // "Email"
|
|
1262
|
+
*/
|
|
1263
|
+
declare const toTitleCase: (str: string) => string;
|
|
1188
1264
|
/**
|
|
1189
1265
|
* Converts a path or identifier string into a pretty display name.
|
|
1190
|
-
*
|
|
1266
|
+
* For paths like "/contacts/0/name", extracts just the field name "Name".
|
|
1267
|
+
* Handles camelCase and snake_case conversion to Title Case.
|
|
1191
1268
|
*
|
|
1192
1269
|
* @example
|
|
1193
|
-
* prettyName("/userName") // "
|
|
1194
|
-
* prettyName("email") // "Email"
|
|
1270
|
+
* prettyName("/userName") // "User Name"
|
|
1271
|
+
* prettyName("/contacts/0/email") // "Email"
|
|
1272
|
+
* prettyName("/address/streetName") // "Street Name"
|
|
1273
|
+
* prettyName("first_name") // "First Name"
|
|
1195
1274
|
*/
|
|
1196
1275
|
declare const prettyName: (name: string) => string;
|
|
1197
1276
|
//#endregion
|
|
@@ -1241,7 +1320,7 @@ declare module "alepha/react/router" {
|
|
|
1241
1320
|
* - AlertDialog, ConfirmDialog, PromptDialog
|
|
1242
1321
|
* - Form controls: Control, ControlArray, ControlDate, ControlNumber, ControlObject, ControlSelect, ControlQueryBuilder
|
|
1243
1322
|
* - TypeForm for automatic form generation from TypeBox schemas
|
|
1244
|
-
* -
|
|
1323
|
+
* - DashboardShell layout component
|
|
1245
1324
|
* - AppBar with configurable elements
|
|
1246
1325
|
* - Sidebar navigation with sections and menu items
|
|
1247
1326
|
* - Omnibar for command palette / search
|
|
@@ -1251,7 +1330,7 @@ declare module "alepha/react/router" {
|
|
|
1251
1330
|
*
|
|
1252
1331
|
* @module alepha.ui
|
|
1253
1332
|
*/
|
|
1254
|
-
declare const AlephaUI:
|
|
1333
|
+
declare const AlephaUI: alepha.Service<alepha.Module>;
|
|
1255
1334
|
/**
|
|
1256
1335
|
* Convenience function to configure and inject the UiRouter.
|
|
1257
1336
|
*/
|
|
@@ -1259,5 +1338,5 @@ declare const $ui: (options?: {
|
|
|
1259
1338
|
themes?: AlephaThemeListAtom;
|
|
1260
1339
|
}) => UiRouter;
|
|
1261
1340
|
//#endregion
|
|
1262
|
-
export { $ui, ActionButton, type ActionClickButtonProps, type ActionCommonProps, type ActionMenuConfig, type ActionMenuItem, type ActionNavigationButtonProps, type ActionProps, type ActionSubmitButtonProps, AdminShell, type AdminShellProps, AlephaMantineProvider, AlephaSidebarState, AlephaThemeListAtom, AlephaUI, AlertDialog, type AlertDialogOptions, type AlertDialogProps, AppBar, type AppBarBurger, type AppBarDark, type AppBarDivider, type AppBarElement, type AppBarItem, type AppBarLang, type AppBarProps, type AppBarSearch, type AppBarSpacer, type BaseDialogOptions, BurgerButton, type CheckboxAction, type CheckboxActionContext, ClipboardButton, type ClipboardButtonProps, type ColumnVisibility, ConfirmDialog, type ConfirmDialogOptions, type ConfirmDialogProps, Control, ControlArray, ControlDate, ControlNumber, ControlObject, ControlQueryBuilder, ControlSelect, CurrentAlephaTheme, DarkModeButton, DataTable, type DataTableColumn, type DataTableColumnContext, type DataTableProps, type DataTableSubmitContext, DialogService, type FilterVisibility, Flex, IconSize, LanguageButton, type MaybePage, OPERATOR_INFO, Omnibar, OmnibarButton, PromptDialog, type PromptDialogOptions, type PromptDialogProps, SchemaField, Sidebar, type SidebarAbstractItem, type SidebarButtonTheme, type SidebarDivider, type SidebarElement, type SidebarItemProps, type SidebarMenuItem, type SidebarNode, type SidebarProps, type SidebarSearch, type SidebarSection, type SidebarSpacer, type SidebarTheme, Text, ThemeButton, ThemeProvider, ToastService, ToggleSidebarButton, TypeForm, UiRouter, alephaSidebarAtom, alephaThemeAtom, alephaThemeListAtom, capitalize, defaultTheme, extractSchemaFields, getDefaultIcon, getOperatorsForField, midnightTheme, prettyName, ui, useDialog, useToast };
|
|
1341
|
+
export { $ui, ActionButton, type ActionClickButtonProps, type ActionCommonProps, type ActionMenuConfig, type ActionMenuItem, type ActionNavigationButtonProps, type ActionProps, type ActionSubmitButtonProps, DashboardShell as AdminShell, DashboardShell, type DashboardShellProps as AdminShellProps, type DashboardShellProps, AlephaMantineProvider, AlephaSidebarState, AlephaThemeListAtom, AlephaUI, AlertDialog, type AlertDialogOptions, type AlertDialogProps, AppBar, type AppBarBurger, type AppBarDark, type AppBarDivider, type AppBarElement, type AppBarItem, type AppBarLang, type AppBarProps, type AppBarSearch, type AppBarSpacer, type BaseDialogOptions, Breadcrumb, type BreadcrumbProps, BurgerButton, type CheckboxAction, type CheckboxActionContext, ClipboardButton, type ClipboardButtonProps, type ColumnVisibility, ConfirmDialog, type ConfirmDialogOptions, type ConfirmDialogProps, Control, ControlArray, ControlDate, ControlNumber, ControlObject, ControlQueryBuilder, ControlSelect, CurrentAlephaTheme, DarkModeButton, DataTable, type DataTableColumn, type DataTableColumnContext, type DataTableProps, type DataTableSubmitContext, DialogService, type FilterVisibility, Flex, IconSize, LanguageButton, type MaybePage, OPERATOR_INFO, Omnibar, OmnibarButton, PromptDialog, type PromptDialogOptions, type PromptDialogProps, SchemaField, Sidebar, type SidebarAbstractItem, type SidebarButtonTheme, type SidebarDivider, type SidebarElement, type SidebarItemProps, type SidebarMenuItem, type SidebarNode, type SidebarProps, type SidebarSearch, type SidebarSection, type SidebarSpacer, type SidebarTheme, Text, ThemeButton, ThemeProvider, ToastService, ToggleSidebarButton, TypeForm, UiRouter, alephaSidebarAtom, alephaThemeAtom, alephaThemeListAtom, capitalize, defaultTheme, extractSchemaFields, getDefaultIcon, getOperatorsForField, midnightTheme, prettyName, toTitleCase, ui, useDialog, useToast };
|
|
1263
1342
|
//# sourceMappingURL=index.d.ts.map
|