@alepha/ui 0.14.4 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/admin/AdminAudits-ColpiP4T.js +3 -0
  2. package/dist/admin/{AdminAudits-DIrCCPk3.js → AdminAudits-DClGEVBj.js} +1 -1
  3. package/dist/admin/{AdminAudits-DIrCCPk3.js.map → AdminAudits-DClGEVBj.js.map} +1 -1
  4. package/dist/admin/AdminFiles-C5pqXN5B.js +3 -0
  5. package/dist/admin/{AdminFiles-RsL178Ta.js → AdminFiles-C76r1_Xz.js} +3 -3
  6. package/dist/admin/AdminFiles-C76r1_Xz.js.map +1 -0
  7. package/dist/admin/AdminLayout-BfeFXiul.js +3 -0
  8. package/dist/admin/{AdminLayout-XiSivwWH.js → AdminLayout-QJLIesuG.js} +1 -1
  9. package/dist/admin/{AdminLayout-XiSivwWH.js.map → AdminLayout-QJLIesuG.js.map} +1 -1
  10. package/dist/admin/AdminNotifications-BXixCBu9.js +3 -0
  11. package/dist/admin/{AdminNotifications-cIbywWKi.js → AdminNotifications-Bsalygm5.js} +3 -3
  12. package/dist/admin/AdminNotifications-Bsalygm5.js.map +1 -0
  13. package/dist/admin/{AdminParameters-D-q3Qmhv.js → AdminParameters-Bmxtnpv-.js} +1 -1
  14. package/dist/admin/{AdminParameters-D-q3Qmhv.js.map → AdminParameters-Bmxtnpv-.js.map} +1 -1
  15. package/dist/admin/{AdminParameters-BKObzzpN.js → AdminParameters-CpmAWwqN.js} +1 -1
  16. package/dist/admin/AdminSessions-CrkRvey3.js +3 -0
  17. package/dist/admin/{AdminSessions-vOgkrQ2U.js → AdminSessions-DmK3R6pP.js} +3 -3
  18. package/dist/admin/AdminSessions-DmK3R6pP.js.map +1 -0
  19. package/dist/admin/{AdminUserAudits-CSsN1fIC.js → AdminUserAudits-BPMP1Qd2.js} +1 -1
  20. package/dist/admin/{AdminUserAudits-CSsN1fIC.js.map → AdminUserAudits-BPMP1Qd2.js.map} +1 -1
  21. package/dist/admin/{AdminUserAudits-DmAnivo3.js → AdminUserAudits-Brcenss9.js} +1 -1
  22. package/dist/admin/{AdminUserCreate-B72nu-3W.js → AdminUserCreate-CZjB6NKc.js} +1 -1
  23. package/dist/admin/{AdminUserCreate-B72nu-3W.js.map → AdminUserCreate-CZjB6NKc.js.map} +1 -1
  24. package/dist/admin/{AdminUserCreate-DpA13zwj.js → AdminUserCreate-Cx8bkYC2.js} +1 -1
  25. package/dist/admin/{AdminUserDetails-Zib_B6Al.js → AdminUserDetails-8TYsqQBy.js} +1 -1
  26. package/dist/admin/{AdminUserDetails-CKM2IEMr.js → AdminUserDetails-DuqCOBJK.js} +1 -1
  27. package/dist/admin/{AdminUserDetails-CKM2IEMr.js.map → AdminUserDetails-DuqCOBJK.js.map} +1 -1
  28. package/dist/admin/{AdminUserLayout-BNBOEiAO.js → AdminUserLayout-Bz2u_zQ4.js} +1 -1
  29. package/dist/admin/{AdminUserLayout-D7En9UBq.js → AdminUserLayout-Dgk8s7Cd.js} +1 -1
  30. package/dist/admin/{AdminUserLayout-D7En9UBq.js.map → AdminUserLayout-Dgk8s7Cd.js.map} +1 -1
  31. package/dist/admin/{AdminUserSessions-DEaGu6n6.js → AdminUserSessions-DCpe8_T6.js} +1 -1
  32. package/dist/admin/{AdminUserSessions-DEaGu6n6.js.map → AdminUserSessions-DCpe8_T6.js.map} +1 -1
  33. package/dist/admin/AdminUserSessions-beiJqY2D.js +3 -0
  34. package/dist/admin/AdminUserSettings-CxlInVnu.js +3 -0
  35. package/dist/admin/{AdminUserSettings-Di73D7g2.js → AdminUserSettings-qxDfowqh.js} +1 -1
  36. package/dist/admin/{AdminUserSettings-Di73D7g2.js.map → AdminUserSettings-qxDfowqh.js.map} +1 -1
  37. package/dist/admin/AdminUsers-Bd0wMP8v.js +3 -0
  38. package/dist/admin/{AdminUsers-BnGIRvmV.js → AdminUsers-ZlPsDz0T.js} +3 -3
  39. package/dist/admin/AdminUsers-ZlPsDz0T.js.map +1 -0
  40. package/dist/admin/index.d.ts.map +1 -1
  41. package/dist/admin/index.js +28 -28
  42. package/dist/admin/index.js.map +1 -1
  43. package/dist/auth/{AuthLayout-B1sUB8fB.js → AuthLayout-CWzQ8rCe.js} +1 -1
  44. package/dist/auth/{AuthLayout-B1sUB8fB.js.map → AuthLayout-CWzQ8rCe.js.map} +1 -1
  45. package/dist/{demo/IconGoogle-DvmFiEDB.js → auth/IconGoogle-DpSlPZ1u.js} +1 -1
  46. package/dist/auth/{IconGoogle-Cm5d8J3f.js.map → IconGoogle-DpSlPZ1u.js.map} +1 -1
  47. package/dist/auth/Login-CxOPyNFP.js +4 -0
  48. package/dist/auth/{Login-Cjxv3EDi.js → Login-CyvKwy5e.js} +2 -2
  49. package/dist/auth/Login-CyvKwy5e.js.map +1 -0
  50. package/dist/auth/{Register-BKBIpHhW.js → Register-C7Zp09Ks.js} +6 -3
  51. package/dist/auth/Register-C7Zp09Ks.js.map +1 -0
  52. package/dist/auth/Register-Cacr7YbA.js +4 -0
  53. package/dist/auth/ResetPassword-CMkx8Ibf.js +3 -0
  54. package/dist/auth/{ResetPassword-DvqD_1SJ.js → ResetPassword-DYJSUC6B.js} +1 -1
  55. package/dist/auth/ResetPassword-DYJSUC6B.js.map +1 -0
  56. package/dist/auth/{VerifyEmail-VaBruOnO.js → VerifyEmail-CNXFIwWW.js} +1 -1
  57. package/dist/auth/{VerifyEmail-VaBruOnO.js.map → VerifyEmail-CNXFIwWW.js.map} +1 -1
  58. package/dist/auth/VerifyEmail-DKyDlz96.js +3 -0
  59. package/dist/auth/index.d.ts +20 -16
  60. package/dist/auth/index.d.ts.map +1 -1
  61. package/dist/auth/index.js +14 -14
  62. package/dist/auth/index.js.map +1 -1
  63. package/dist/core/index.d.ts.map +1 -1
  64. package/dist/core/index.js +15 -15
  65. package/dist/core/index.js.map +1 -1
  66. package/dist/demo/{DemoDataTable-2mzzf__a.js → DemoDataTable-DYbDYbs5.js} +2 -2
  67. package/dist/demo/{DemoDataTable-2mzzf__a.js.map → DemoDataTable-DYbDYbs5.js.map} +1 -1
  68. package/dist/demo/{DemoHome-CnuL5WV9.js → DemoHome-Cce2bWmg.js} +1 -1
  69. package/dist/demo/{DemoHome-CnuL5WV9.js.map → DemoHome-Cce2bWmg.js.map} +1 -1
  70. package/dist/demo/DemoHome-DC9qkMNe.js +3 -0
  71. package/dist/demo/{DemoJsonViewer-NUGst5wW.js → DemoJsonViewer-D_Hff1Q2.js} +2 -2
  72. package/dist/demo/{DemoJsonViewer-NUGst5wW.js.map → DemoJsonViewer-D_Hff1Q2.js.map} +1 -1
  73. package/dist/demo/DemoJsonViewer-DbWVDdz_.js +4 -0
  74. package/dist/demo/{DemoLayout-dvbeuBBf.js → DemoLayout-DjIDm93B.js} +1 -1
  75. package/dist/demo/{DemoLayout-dvbeuBBf.js.map → DemoLayout-DjIDm93B.js.map} +1 -1
  76. package/dist/demo/DemoLayout-nNMajP_9.js +3 -0
  77. package/dist/demo/{DemoLogin--wE44i23.js → DemoLogin-BA_HiIRZ.js} +4 -3
  78. package/dist/demo/DemoLogin-BA_HiIRZ.js.map +1 -0
  79. package/dist/demo/{DemoRegister-BtrMksx6.js → DemoRegister-B6syaxP9.js} +8 -4
  80. package/dist/demo/DemoRegister-B6syaxP9.js.map +1 -0
  81. package/dist/demo/{DemoResetPassword-DVXiiiX7.js → DemoResetPassword-BOcLG4GF.js} +3 -2
  82. package/dist/demo/DemoResetPassword-BOcLG4GF.js.map +1 -0
  83. package/dist/demo/{DemoSidebar-DWnjYHoP.js → DemoSidebar-DpZXf7GO.js} +2 -2
  84. package/dist/demo/{DemoSidebar-DWnjYHoP.js.map → DemoSidebar-DpZXf7GO.js.map} +1 -1
  85. package/dist/demo/{DemoTypeForm-P5_VInW2.js → DemoTypeForm-BlLAcQqZ.js} +2 -2
  86. package/dist/demo/{DemoTypeForm-P5_VInW2.js.map → DemoTypeForm-BlLAcQqZ.js.map} +1 -1
  87. package/dist/demo/{DemoVerifyEmail-C_ooC5u8.js → DemoVerifyEmail-C-J7bXUQ.js} +2 -2
  88. package/dist/demo/{DemoVerifyEmail-C_ooC5u8.js.map → DemoVerifyEmail-C-J7bXUQ.js.map} +1 -1
  89. package/dist/{auth/IconGoogle-Cm5d8J3f.js → demo/IconGoogle-CbBF8Hqq.js} +1 -1
  90. package/dist/demo/{IconGoogle-DvmFiEDB.js.map → IconGoogle-CbBF8Hqq.js.map} +1 -1
  91. package/dist/demo/{Showcase-vemLuO2t.js → Showcase-HchhcsHV.js} +3 -3
  92. package/dist/demo/Showcase-HchhcsHV.js.map +1 -0
  93. package/dist/demo/index.d.ts.map +1 -1
  94. package/dist/demo/index.js +14 -14
  95. package/dist/json/index.d.ts +1 -2
  96. package/dist/json/index.d.ts.map +1 -1
  97. package/package.json +12 -12
  98. package/src/auth/AuthRouter.ts +6 -6
  99. package/src/auth/components/Login.tsx +2 -2
  100. package/src/auth/components/Register.tsx +8 -3
  101. package/src/auth/components/ResetPassword.tsx +2 -2
  102. package/src/demo/components/auth/DemoLogin.tsx +4 -3
  103. package/src/demo/components/auth/DemoRegister.tsx +4 -3
  104. package/src/demo/components/auth/DemoResetPassword.tsx +3 -2
  105. package/dist/admin/AdminAudits-B3EhKhN7.js +0 -3
  106. package/dist/admin/AdminFiles-C8OG4dtD.js +0 -3
  107. package/dist/admin/AdminFiles-RsL178Ta.js.map +0 -1
  108. package/dist/admin/AdminLayout-BnSmtA4x.js +0 -3
  109. package/dist/admin/AdminNotifications-BSL4B2fQ.js +0 -3
  110. package/dist/admin/AdminNotifications-cIbywWKi.js.map +0 -1
  111. package/dist/admin/AdminSessions-DHG9zPfr.js +0 -3
  112. package/dist/admin/AdminSessions-vOgkrQ2U.js.map +0 -1
  113. package/dist/admin/AdminUserSessions-D9X2_HMA.js +0 -3
  114. package/dist/admin/AdminUserSettings-yI-JECf5.js +0 -3
  115. package/dist/admin/AdminUsers-BnGIRvmV.js.map +0 -1
  116. package/dist/admin/AdminUsers-CG9-2Z8W.js +0 -3
  117. package/dist/auth/Login-BWi-pPbO.js +0 -4
  118. package/dist/auth/Login-Cjxv3EDi.js.map +0 -1
  119. package/dist/auth/Register-BKBIpHhW.js.map +0 -1
  120. package/dist/auth/Register-CtdvihIM.js +0 -4
  121. package/dist/auth/ResetPassword-BUdM7T_R.js +0 -3
  122. package/dist/auth/ResetPassword-DvqD_1SJ.js.map +0 -1
  123. package/dist/auth/VerifyEmail-BYmtnkEl.js +0 -3
  124. package/dist/demo/DemoHome-D6Z7EE4V.js +0 -3
  125. package/dist/demo/DemoJsonViewer-CYUggLop.js +0 -4
  126. package/dist/demo/DemoLayout-ZFDzyvY3.js +0 -3
  127. package/dist/demo/DemoLogin--wE44i23.js.map +0 -1
  128. package/dist/demo/DemoRegister-BtrMksx6.js.map +0 -1
  129. package/dist/demo/DemoResetPassword-DVXiiiX7.js.map +0 -1
  130. package/dist/demo/Showcase-vemLuO2t.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DemoVerifyEmail-C_ooC5u8.js","names":["Showcase","VerifyEmail"],"sources":["../../src/auth/components/VerifyEmail.tsx","../../src/demo/components/auth/DemoVerifyEmail.tsx"],"sourcesContent":["import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { useRouter, useRouterState } from \"@alepha/react/router\";\nimport { ActionButton } from \"@alepha/ui\";\nimport { Alert, Card, Flex, Loader, Stack, Text } from \"@mantine/core\";\nimport { IconAlertCircle, IconCheck, IconMailCheck } from \"@tabler/icons-react\";\nimport type { UserController } from \"alepha/api/users\";\nimport { useEffect, useState } from \"react\";\nimport type { AuthI18n } from \"../AuthI18n.ts\";\nimport type { AuthRouter } from \"../AuthRouter.ts\";\n\nexport type VerifyEmailProps = {};\n\ntype Step = \"verifying\" | \"success\" | \"error\";\n\nconst VerifyEmail = (_props: VerifyEmailProps) => {\n const router = useRouter<AuthRouter>();\n const state = useRouterState();\n const userCtrl = useClient<UserController>();\n const { tr } = useI18n<AuthI18n, \"en\">();\n\n const [step, setStep] = useState<Step>(\"verifying\");\n const [error, setError] = useState<string | null>(null);\n\n const email = state.query.email as string | undefined;\n const token = state.query.token as string | undefined;\n\n useEffect(() => {\n const verify = async () => {\n if (!email || !token) {\n setError(tr(\"verifyEmailMissingParams\"));\n setStep(\"error\");\n return;\n }\n\n try {\n await userCtrl.verifyEmail({\n body: { email, token },\n });\n setStep(\"success\");\n } catch (err) {\n setError(err instanceof Error ? err.message : tr(\"verifyEmailFailed\"));\n setStep(\"error\");\n }\n };\n\n verify();\n }, [email, token]);\n\n return (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <Stack gap=\"sm\" w={400}>\n <Card withBorder p=\"lg\" bg=\"var(--alepha-elevated)\">\n <Stack gap=\"md\" align=\"center\">\n {step === \"verifying\" && (\n <>\n <Loader size=\"lg\" />\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"verifyEmailVerifying\")}\n </Text>\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\">\n {tr(\"verifyEmailPleaseWait\")}\n </Text>\n </>\n )}\n\n {step === \"success\" && (\n <>\n <IconMailCheck size={48} color=\"var(--mantine-color-green-6)\" />\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"verifyEmailTitle\")}\n </Text>\n <Alert variant=\"light\" color=\"green\" icon={<IconCheck />}>\n <Text size=\"sm\">{tr(\"verifyEmailSuccess\")}</Text>\n </Alert>\n <ActionButton href={router.path(\"login\")} fullWidth>\n {tr(\"verifyEmailSignIn\")}\n </ActionButton>\n </>\n )}\n\n {step === \"error\" && (\n <>\n <IconAlertCircle size={48} color=\"var(--mantine-color-red-6)\" />\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"verifyEmailTitle\")}\n </Text>\n <Alert variant=\"light\" color=\"red\" icon={<IconAlertCircle />}>\n <Text size=\"sm\">{error || tr(\"verifyEmailFailed\")}</Text>\n </Alert>\n <ActionButton href={router.path(\"login\")} fullWidth>\n {tr(\"verifyEmailBackToSignIn\")}\n </ActionButton>\n </>\n )}\n </Stack>\n </Card>\n </Stack>\n </Flex>\n );\n};\n\nexport default VerifyEmail;\n","import { t } from \"alepha\";\nimport VerifyEmail from \"../../../auth/components/VerifyEmail.tsx\";\nimport Showcase from \"../shared/Showcase.tsx\";\n\nconst showcaseSchema = t.object({\n placeholder: t.boolean({\n title: \"Demo Mode\",\n default: true,\n $control: { switch: true },\n }),\n});\n\nconst DemoVerifyEmail = () => {\n return (\n <Showcase\n title=\"VerifyEmail\"\n schema={showcaseSchema}\n initialValues={{\n placeholder: true,\n }}\n columns={1}\n >\n {() => <VerifyEmail />}\n </Showcase>\n );\n};\n\nexport default DemoVerifyEmail;\n"],"mappings":";;;;;;;;;;;;AAeA,MAAM,eAAe,WAA6B;CAChD,MAAM,SAAS,WAAuB;CACtC,MAAM,QAAQ,gBAAgB;CAC9B,MAAM,WAAW,WAA2B;CAC5C,MAAM,EAAE,OAAO,SAAyB;CAExC,MAAM,CAAC,MAAM,WAAW,SAAe,YAAY;CACnD,MAAM,CAAC,OAAO,YAAY,SAAwB,KAAK;CAEvD,MAAM,QAAQ,MAAM,MAAM;CAC1B,MAAM,QAAQ,MAAM,MAAM;AAE1B,iBAAgB;EACd,MAAM,SAAS,YAAY;AACzB,OAAI,CAAC,SAAS,CAAC,OAAO;AACpB,aAAS,GAAG,2BAA2B,CAAC;AACxC,YAAQ,QAAQ;AAChB;;AAGF,OAAI;AACF,UAAM,SAAS,YAAY,EACzB,MAAM;KAAE;KAAO;KAAO,EACvB,CAAC;AACF,YAAQ,UAAU;YACX,KAAK;AACZ,aAAS,eAAe,QAAQ,IAAI,UAAU,GAAG,oBAAoB,CAAC;AACtE,YAAQ,QAAQ;;;AAIpB,UAAQ;IACP,CAAC,OAAO,MAAM,CAAC;AAElB,QACE,oBAAC;EAAK,MAAM;EAAG,SAAQ;EAAS,OAAM;YACpC,oBAAC;GAAM,KAAI;GAAK,GAAG;aACjB,oBAAC;IAAK;IAAW,GAAE;IAAK,IAAG;cACzB,qBAAC;KAAM,KAAI;KAAK,OAAM;;MACnB,SAAS,eACR;OACE,oBAAC,UAAO,MAAK,OAAO;OACpB,oBAAC;QAAK,MAAK;QAAK,IAAI;QAAK,IAAG;kBACzB,GAAG,uBAAuB;SACtB;OACP,oBAAC;QAAK,MAAK;QAAK,GAAE;QAAS,IAAG;kBAC3B,GAAG,wBAAwB;SACvB;UACN;MAGJ,SAAS,aACR;OACE,oBAAC;QAAc,MAAM;QAAI,OAAM;SAAiC;OAChE,oBAAC;QAAK,MAAK;QAAK,IAAI;QAAK,IAAG;kBACzB,GAAG,mBAAmB;SAClB;OACP,oBAAC;QAAM,SAAQ;QAAQ,OAAM;QAAQ,MAAM,oBAAC,cAAY;kBACtD,oBAAC;SAAK,MAAK;mBAAM,GAAG,qBAAqB;UAAQ;SAC3C;OACR,oBAAC;QAAa,MAAM,OAAO,KAAK,QAAQ;QAAE;kBACvC,GAAG,oBAAoB;SACX;UACd;MAGJ,SAAS,WACR;OACE,oBAAC;QAAgB,MAAM;QAAI,OAAM;SAA+B;OAChE,oBAAC;QAAK,MAAK;QAAK,IAAI;QAAK,IAAG;kBACzB,GAAG,mBAAmB;SAClB;OACP,oBAAC;QAAM,SAAQ;QAAQ,OAAM;QAAM,MAAM,oBAAC,oBAAkB;kBAC1D,oBAAC;SAAK,MAAK;mBAAM,SAAS,GAAG,oBAAoB;UAAQ;SACnD;OACR,oBAAC;QAAa,MAAM,OAAO,KAAK,QAAQ;QAAE;kBACvC,GAAG,0BAA0B;SACjB;UACd;;MAEC;KACH;IACD;GACH;;AAIX,0BAAe;;;;AClGf,MAAM,iBAAiB,EAAE,OAAO,EAC9B,aAAa,EAAE,QAAQ;CACrB,OAAO;CACP,SAAS;CACT,UAAU,EAAE,QAAQ,MAAM;CAC3B,CAAC,EACH,CAAC;AAEF,MAAM,wBAAwB;AAC5B,QACE,oBAACA;EACC,OAAM;EACN,QAAQ;EACR,eAAe,EACb,aAAa,MACd;EACD,SAAS;kBAEF,oBAACC,wBAAc;GACb;;AAIf,8BAAe"}
1
+ {"version":3,"file":"DemoVerifyEmail-C-J7bXUQ.js","names":["Showcase","VerifyEmail"],"sources":["../../src/auth/components/VerifyEmail.tsx","../../src/demo/components/auth/DemoVerifyEmail.tsx"],"sourcesContent":["import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { useRouter, useRouterState } from \"@alepha/react/router\";\nimport { ActionButton } from \"@alepha/ui\";\nimport { Alert, Card, Flex, Loader, Stack, Text } from \"@mantine/core\";\nimport { IconAlertCircle, IconCheck, IconMailCheck } from \"@tabler/icons-react\";\nimport type { UserController } from \"alepha/api/users\";\nimport { useEffect, useState } from \"react\";\nimport type { AuthI18n } from \"../AuthI18n.ts\";\nimport type { AuthRouter } from \"../AuthRouter.ts\";\n\nexport type VerifyEmailProps = {};\n\ntype Step = \"verifying\" | \"success\" | \"error\";\n\nconst VerifyEmail = (_props: VerifyEmailProps) => {\n const router = useRouter<AuthRouter>();\n const state = useRouterState();\n const userCtrl = useClient<UserController>();\n const { tr } = useI18n<AuthI18n, \"en\">();\n\n const [step, setStep] = useState<Step>(\"verifying\");\n const [error, setError] = useState<string | null>(null);\n\n const email = state.query.email as string | undefined;\n const token = state.query.token as string | undefined;\n\n useEffect(() => {\n const verify = async () => {\n if (!email || !token) {\n setError(tr(\"verifyEmailMissingParams\"));\n setStep(\"error\");\n return;\n }\n\n try {\n await userCtrl.verifyEmail({\n body: { email, token },\n });\n setStep(\"success\");\n } catch (err) {\n setError(err instanceof Error ? err.message : tr(\"verifyEmailFailed\"));\n setStep(\"error\");\n }\n };\n\n verify();\n }, [email, token]);\n\n return (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <Stack gap=\"sm\" w={400}>\n <Card withBorder p=\"lg\" bg=\"var(--alepha-elevated)\">\n <Stack gap=\"md\" align=\"center\">\n {step === \"verifying\" && (\n <>\n <Loader size=\"lg\" />\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"verifyEmailVerifying\")}\n </Text>\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\">\n {tr(\"verifyEmailPleaseWait\")}\n </Text>\n </>\n )}\n\n {step === \"success\" && (\n <>\n <IconMailCheck size={48} color=\"var(--mantine-color-green-6)\" />\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"verifyEmailTitle\")}\n </Text>\n <Alert variant=\"light\" color=\"green\" icon={<IconCheck />}>\n <Text size=\"sm\">{tr(\"verifyEmailSuccess\")}</Text>\n </Alert>\n <ActionButton href={router.path(\"login\")} fullWidth>\n {tr(\"verifyEmailSignIn\")}\n </ActionButton>\n </>\n )}\n\n {step === \"error\" && (\n <>\n <IconAlertCircle size={48} color=\"var(--mantine-color-red-6)\" />\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"verifyEmailTitle\")}\n </Text>\n <Alert variant=\"light\" color=\"red\" icon={<IconAlertCircle />}>\n <Text size=\"sm\">{error || tr(\"verifyEmailFailed\")}</Text>\n </Alert>\n <ActionButton href={router.path(\"login\")} fullWidth>\n {tr(\"verifyEmailBackToSignIn\")}\n </ActionButton>\n </>\n )}\n </Stack>\n </Card>\n </Stack>\n </Flex>\n );\n};\n\nexport default VerifyEmail;\n","import { t } from \"alepha\";\nimport VerifyEmail from \"../../../auth/components/VerifyEmail.tsx\";\nimport Showcase from \"../shared/Showcase.tsx\";\n\nconst showcaseSchema = t.object({\n placeholder: t.boolean({\n title: \"Demo Mode\",\n default: true,\n $control: { switch: true },\n }),\n});\n\nconst DemoVerifyEmail = () => {\n return (\n <Showcase\n title=\"VerifyEmail\"\n schema={showcaseSchema}\n initialValues={{\n placeholder: true,\n }}\n columns={1}\n >\n {() => <VerifyEmail />}\n </Showcase>\n );\n};\n\nexport default DemoVerifyEmail;\n"],"mappings":";;;;;;;;;;;;AAeA,MAAM,eAAe,WAA6B;CAChD,MAAM,SAAS,WAAuB;CACtC,MAAM,QAAQ,gBAAgB;CAC9B,MAAM,WAAW,WAA2B;CAC5C,MAAM,EAAE,OAAO,SAAyB;CAExC,MAAM,CAAC,MAAM,WAAW,SAAe,YAAY;CACnD,MAAM,CAAC,OAAO,YAAY,SAAwB,KAAK;CAEvD,MAAM,QAAQ,MAAM,MAAM;CAC1B,MAAM,QAAQ,MAAM,MAAM;AAE1B,iBAAgB;EACd,MAAM,SAAS,YAAY;AACzB,OAAI,CAAC,SAAS,CAAC,OAAO;AACpB,aAAS,GAAG,2BAA2B,CAAC;AACxC,YAAQ,QAAQ;AAChB;;AAGF,OAAI;AACF,UAAM,SAAS,YAAY,EACzB,MAAM;KAAE;KAAO;KAAO,EACvB,CAAC;AACF,YAAQ,UAAU;YACX,KAAK;AACZ,aAAS,eAAe,QAAQ,IAAI,UAAU,GAAG,oBAAoB,CAAC;AACtE,YAAQ,QAAQ;;;AAIpB,UAAQ;IACP,CAAC,OAAO,MAAM,CAAC;AAElB,QACE,oBAAC;EAAK,MAAM;EAAG,SAAQ;EAAS,OAAM;YACpC,oBAAC;GAAM,KAAI;GAAK,GAAG;aACjB,oBAAC;IAAK;IAAW,GAAE;IAAK,IAAG;cACzB,qBAAC;KAAM,KAAI;KAAK,OAAM;;MACnB,SAAS,eACR;OACE,oBAAC,UAAO,MAAK,OAAO;OACpB,oBAAC;QAAK,MAAK;QAAK,IAAI;QAAK,IAAG;kBACzB,GAAG,uBAAuB;SACtB;OACP,oBAAC;QAAK,MAAK;QAAK,GAAE;QAAS,IAAG;kBAC3B,GAAG,wBAAwB;SACvB;UACN;MAGJ,SAAS,aACR;OACE,oBAAC;QAAc,MAAM;QAAI,OAAM;SAAiC;OAChE,oBAAC;QAAK,MAAK;QAAK,IAAI;QAAK,IAAG;kBACzB,GAAG,mBAAmB;SAClB;OACP,oBAAC;QAAM,SAAQ;QAAQ,OAAM;QAAQ,MAAM,oBAAC,cAAY;kBACtD,oBAAC;SAAK,MAAK;mBAAM,GAAG,qBAAqB;UAAQ;SAC3C;OACR,oBAAC;QAAa,MAAM,OAAO,KAAK,QAAQ;QAAE;kBACvC,GAAG,oBAAoB;SACX;UACd;MAGJ,SAAS,WACR;OACE,oBAAC;QAAgB,MAAM;QAAI,OAAM;SAA+B;OAChE,oBAAC;QAAK,MAAK;QAAK,IAAI;QAAK,IAAG;kBACzB,GAAG,mBAAmB;SAClB;OACP,oBAAC;QAAM,SAAQ;QAAQ,OAAM;QAAM,MAAM,oBAAC,oBAAkB;kBAC1D,oBAAC;SAAK,MAAK;mBAAM,SAAS,GAAG,oBAAoB;UAAQ;SACnD;OACR,oBAAC;QAAa,MAAM,OAAO,KAAK,QAAQ;QAAE;kBACvC,GAAG,0BAA0B;SACjB;UACd;;MAEC;KACH;IACD;GACH;;AAIX,0BAAe;;;;AClGf,MAAM,iBAAiB,EAAE,OAAO,EAC9B,aAAa,EAAE,QAAQ;CACrB,OAAO;CACP,SAAS;CACT,UAAU,EAAE,QAAQ,MAAM;CAC3B,CAAC,EACH,CAAC;AAEF,MAAM,wBAAwB;AAC5B,QACE,oBAACA;EACC,OAAM;EACN,QAAQ;EACR,eAAe,EACb,aAAa,MACd;EACD,SAAS;kBAEF,oBAACC,wBAAc;GACb;;AAIf,8BAAe"}
@@ -55,4 +55,4 @@ var IconGoogle_default = IconGoogle;
55
55
 
56
56
  //#endregion
57
57
  export { IconGithub_default as n, IconGoogle_default as t };
58
- //# sourceMappingURL=IconGoogle-Cm5d8J3f.js.map
58
+ //# sourceMappingURL=IconGoogle-CbBF8Hqq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IconGoogle-DvmFiEDB.js","names":[],"sources":["../../src/auth/components/icons/IconGithub.tsx","../../src/auth/components/icons/IconGoogle.tsx"],"sourcesContent":["const IconGithub = () => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 1024 1024\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z\"\n transform=\"scale(64)\"\n fill={\"var(--alepha-text)\"}\n />\n </svg>\n );\n};\n\nexport default IconGithub;\n","const IconGoogle = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n >\n <path\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n fill=\"#EA4335\"\n />\n <path d=\"M1 1h22v22H1z\" fill=\"none\" />\n </svg>\n );\n};\n\nexport default IconGoogle;\n"],"mappings":";;;AAAA,MAAM,mBAAmB;AACvB,QACE,oBAAC;EACC,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,OAAM;YAEN,oBAAC;GACC,UAAS;GACT,UAAS;GACT,GAAE;GACF,WAAU;GACV,MAAM;IACN;GACE;;AAIV,yBAAe;;;;ACpBf,MAAM,mBAAmB;AACvB,QACE,qBAAC;EACC,OAAM;EACN,QAAO;EACP,SAAQ;EACR,OAAM;;GAEN,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IAAK,GAAE;IAAgB,MAAK;KAAS;;GAClC;;AAIV,yBAAe"}
1
+ {"version":3,"file":"IconGoogle-CbBF8Hqq.js","names":[],"sources":["../../src/auth/components/icons/IconGithub.tsx","../../src/auth/components/icons/IconGoogle.tsx"],"sourcesContent":["const IconGithub = () => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 1024 1024\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z\"\n transform=\"scale(64)\"\n fill={\"var(--alepha-text)\"}\n />\n </svg>\n );\n};\n\nexport default IconGithub;\n","const IconGoogle = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n >\n <path\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n fill=\"#EA4335\"\n />\n <path d=\"M1 1h22v22H1z\" fill=\"none\" />\n </svg>\n );\n};\n\nexport default IconGoogle;\n"],"mappings":";;;AAAA,MAAM,mBAAmB;AACvB,QACE,oBAAC;EACC,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,OAAM;YAEN,oBAAC;GACC,UAAS;GACT,UAAS;GACT,GAAE;GACF,WAAU;GACV,MAAM;IACN;GACE;;AAIV,yBAAe;;;;ACpBf,MAAM,mBAAmB;AACvB,QACE,qBAAC;EACC,OAAM;EACN,QAAO;EACP,SAAQ;EACR,OAAM;;GAEN,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,oBAAC;IAAK,GAAE;IAAgB,MAAK;KAAS;;GAClC;;AAIV,yBAAe"}
@@ -117,8 +117,8 @@ const Showcase = ({ title, schema, initialValues, columns = 3, children, windowP
117
117
  const form = useForm({
118
118
  schema,
119
119
  initialValues,
120
- handler: (values$1) => {
121
- setValues(values$1);
120
+ handler: (values) => {
121
+ setValues(values);
122
122
  },
123
123
  onChange: (key, value) => {
124
124
  console.log("onChange", key, value);
@@ -184,4 +184,4 @@ var Showcase_default = Showcase;
184
184
 
185
185
  //#endregion
186
186
  export { MacWindow_default as n, Showcase_default as t };
187
- //# sourceMappingURL=Showcase-vemLuO2t.js.map
187
+ //# sourceMappingURL=Showcase-HchhcsHV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Showcase-HchhcsHV.js","names":["MacWindow"],"sources":["../../src/demo/components/shared/MacWindow.tsx","../../src/demo/components/shared/Showcase.tsx"],"sourcesContent":["import { Box, type BoxProps, Flex, SegmentedControl } from \"@mantine/core\";\nimport { type ReactNode, useState } from \"react\";\n\nexport interface MacWindowProps {\n children: ReactNode;\n title?: string;\n containerProps?: BoxProps;\n fill?: boolean;\n}\n\ntype WindowSize = \"25\" | \"50\" | \"75\" | \"100\";\n\nconst MacWindow = ({\n children,\n title,\n containerProps,\n fill,\n}: MacWindowProps) => {\n const [size, setSize] = useState<WindowSize>(\"100\");\n\n const getWidth = () => {\n return `${size}%`;\n };\n\n return (\n <Flex\n direction=\"column\"\n flex={fill ? 1 : undefined}\n h={fill ? \"100%\" : undefined}\n bdrs={\"md\"}\n style={{\n width: getWidth(),\n border: \"1px solid var(--mantine-color-default-border)\",\n overflow: \"hidden\",\n background: \"var(--mantine-color-body)\",\n boxShadow: \"0 4px 12px rgba(0, 0, 0, 0.15)\",\n transition: \"width 0.3s ease\",\n }}\n >\n <Flex\n h={36}\n px=\"sm\"\n align=\"center\"\n gap={8}\n style={{\n background: \"var(--mantine-color-default)\",\n borderBottom: \"1px solid var(--mantine-color-default-border)\",\n }}\n >\n <Flex gap={6}>\n <Box\n w={12}\n h={12}\n style={{ borderRadius: \"50%\", background: \"#ff5f57\" }}\n />\n <Box\n w={12}\n h={12}\n style={{ borderRadius: \"50%\", background: \"#febc2e\" }}\n />\n <Box\n w={12}\n h={12}\n style={{ borderRadius: \"50%\", background: \"#28c840\" }}\n />\n </Flex>\n\n <Box\n style={{\n flex: 1,\n textAlign: \"center\",\n fontSize: 13,\n color: \"var(--mantine-color-dimmed)\",\n }}\n >\n {title}\n </Box>\n\n {fill ? undefined : (\n <SegmentedControl\n size=\"xs\"\n value={size}\n onChange={(v) => setSize(v as WindowSize)}\n data={[\n { label: \"25\", value: \"25\" },\n { label: \"50\", value: \"50\" },\n { label: \"75\", value: \"75\" },\n { label: \"100\", value: \"100\" },\n ]}\n />\n )}\n </Flex>\n <Flex\n direction={\"column\"}\n flex={fill ? 1 : undefined}\n p=\"md\"\n {...containerProps}\n >\n {children}\n </Flex>\n </Flex>\n );\n};\n\nexport default MacWindow;\n","import { useForm } from \"@alepha/react/form\";\nimport { TypeForm, ui } from \"@alepha/ui\";\nimport { Box, Card, Flex, Text } from \"@mantine/core\";\nimport type { Static, TObject } from \"alepha\";\nimport { type ReactNode, useState } from \"react\";\nimport MacWindow, { type MacWindowProps } from \"./MacWindow.tsx\";\n\nexport interface ShowcaseProps<T extends TObject> {\n /**\n * Component title\n */\n title: string;\n /**\n * Schema for the props configuration\n */\n schema: T;\n /**\n * Initial values for the props\n */\n initialValues?: Partial<Static<T>>;\n /**\n * Number of columns for the props form\n */\n columns?: number;\n /**\n * Render function that receives the current props values\n */\n children: (props: Static<T>) => ReactNode;\n /**\n * Additional props for the MacWindow container\n */\n windowProps?: Partial<MacWindowProps>;\n}\n\n/**\n * Showcase component for demonstrating UI components with interactive props configuration.\n * Uses TypeForm to render a form based on the props schema and displays the component preview.\n */\nconst Showcase = <T extends TObject>({\n title,\n schema,\n initialValues,\n columns = 3,\n children,\n windowProps,\n}: ShowcaseProps<T>) => {\n const [values, setValues] = useState<Record<string, any>>(\n initialValues ?? {},\n );\n\n const form = useForm(\n {\n schema,\n initialValues,\n handler: (values) => {\n setValues(values as Record<string, any>);\n },\n onChange: (key, value) => {\n console.log(\"onChange\", key, value);\n form.submit();\n },\n },\n [schema],\n );\n\n return (\n <Flex flex={1} h={\"100%\"}>\n <Flex\n flex={1}\n bg={ui.colors.background}\n h={\"100%\"}\n p=\"xl\"\n justify=\"center\"\n align=\"flex-start\"\n style={{ flex: 1, minWidth: 0, overflow: \"auto\" }}\n >\n <MacWindow title={title} {...windowProps}>\n {children(values as Static<T>)}\n </MacWindow>\n </Flex>\n\n <Box\n bg={ui.colors.surface}\n h={\"100%\"}\n p={\"md\"}\n style={{\n flex: \"0 0 300px\",\n overflow: \"auto\",\n }}\n >\n <Card withBorder shadow=\"sm\" radius=\"md\" bg={ui.colors.elevated}>\n <Card.Section withBorder py={\"xs\"} inheritPadding>\n <Text size={\"xs\"} fw={500}>\n {title} Props\n </Text>\n </Card.Section>\n\n <Card.Section p={\"sm\"}>\n <TypeForm\n form={form}\n columns={columns}\n skipSubmitButton\n skipFormElement\n />\n </Card.Section>\n </Card>\n </Box>\n </Flex>\n );\n};\n\nexport default Showcase;\n"],"mappings":";;;;;;;AAYA,MAAM,aAAa,EACjB,UACA,OACA,gBACA,WACoB;CACpB,MAAM,CAAC,MAAM,WAAW,SAAqB,MAAM;CAEnD,MAAM,iBAAiB;AACrB,SAAO,GAAG,KAAK;;AAGjB,QACE,qBAAC;EACC,WAAU;EACV,MAAM,OAAO,IAAI;EACjB,GAAG,OAAO,SAAS;EACnB,MAAM;EACN,OAAO;GACL,OAAO,UAAU;GACjB,QAAQ;GACR,UAAU;GACV,YAAY;GACZ,WAAW;GACX,YAAY;GACb;aAED,qBAAC;GACC,GAAG;GACH,IAAG;GACH,OAAM;GACN,KAAK;GACL,OAAO;IACL,YAAY;IACZ,cAAc;IACf;;IAED,qBAAC;KAAK,KAAK;;MACT,oBAAC;OACC,GAAG;OACH,GAAG;OACH,OAAO;QAAE,cAAc;QAAO,YAAY;QAAW;QACrD;MACF,oBAAC;OACC,GAAG;OACH,GAAG;OACH,OAAO;QAAE,cAAc;QAAO,YAAY;QAAW;QACrD;MACF,oBAAC;OACC,GAAG;OACH,GAAG;OACH,OAAO;QAAE,cAAc;QAAO,YAAY;QAAW;QACrD;;MACG;IAEP,oBAAC;KACC,OAAO;MACL,MAAM;MACN,WAAW;MACX,UAAU;MACV,OAAO;MACR;eAEA;MACG;IAEL,OAAO,SACN,oBAAC;KACC,MAAK;KACL,OAAO;KACP,WAAW,MAAM,QAAQ,EAAgB;KACzC,MAAM;MACJ;OAAE,OAAO;OAAM,OAAO;OAAM;MAC5B;OAAE,OAAO;OAAM,OAAO;OAAM;MAC5B;OAAE,OAAO;OAAM,OAAO;OAAM;MAC5B;OAAE,OAAO;OAAO,OAAO;OAAO;MAC/B;MACD;;IAEC,EACP,oBAAC;GACC,WAAW;GACX,MAAM,OAAO,IAAI;GACjB,GAAE;GACF,GAAI;GAEH;IACI;GACF;;AAIX,wBAAe;;;;;;;;AClEf,MAAM,YAA+B,EACnC,OACA,QACA,eACA,UAAU,GACV,UACA,kBACsB;CACtB,MAAM,CAAC,QAAQ,aAAa,SAC1B,iBAAiB,EAAE,CACpB;CAED,MAAM,OAAO,QACX;EACE;EACA;EACA,UAAU,WAAW;AACnB,aAAU,OAA8B;;EAE1C,WAAW,KAAK,UAAU;AACxB,WAAQ,IAAI,YAAY,KAAK,MAAM;AACnC,QAAK,QAAQ;;EAEhB,EACD,CAAC,OAAO,CACT;AAED,QACE,qBAAC;EAAK,MAAM;EAAG,GAAG;aAChB,oBAAC;GACC,MAAM;GACN,IAAI,GAAG,OAAO;GACd,GAAG;GACH,GAAE;GACF,SAAQ;GACR,OAAM;GACN,OAAO;IAAE,MAAM;IAAG,UAAU;IAAG,UAAU;IAAQ;aAEjD,oBAACA;IAAiB;IAAO,GAAI;cAC1B,SAAS,OAAoB;KACpB;IACP,EAEP,oBAAC;GACC,IAAI,GAAG,OAAO;GACd,GAAG;GACH,GAAG;GACH,OAAO;IACL,MAAM;IACN,UAAU;IACX;aAED,qBAAC;IAAK;IAAW,QAAO;IAAK,QAAO;IAAK,IAAI,GAAG,OAAO;eACrD,oBAAC,KAAK;KAAQ;KAAW,IAAI;KAAM;eACjC,qBAAC;MAAK,MAAM;MAAM,IAAI;iBACnB,OAAM;OACF;MACM,EAEf,oBAAC,KAAK;KAAQ,GAAG;eACf,oBAAC;MACO;MACG;MACT;MACA;OACA;MACW;KACV;IACH;GACD;;AAIX,uBAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/demo/components/DemoHome.tsx","../../src/demo/components/DemoLayout.tsx","../../src/demo/components/json/DemoJsonViewer.tsx","../../src/demo/components/shared/MacWindow.tsx","../../src/demo/components/shared/Showcase.tsx","../../src/demo/DemoRouter.ts","../../src/demo/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAaM,gBAAQ,kBAAA,CAAA,GAAA,CAAA;;;cCRR,kBAAU,kBAAA,CAAA,GAAA,CAAA;;;cC6EV,sBAAc,kBAAA,CAAA,GAAA,CAAA;;;UC/EH,cAAA;YACL;;mBAEO;;;AHOL,cGDR,SHcL,EAAA,CAba;EAAA,QAAA;EAAA,KAAA;EAAA,cAab;EAAA;AAAA,CAAA,EGTE,cHSF,EAAA,GGTgB,kBAAA,CAAA,GAAA,CAAA,OHShB;;;UInBgB,wBAAwB;;;;;EJMnC;;;UIEI;EHVJ;;;kBGcY,QAAQ,OAAO;EF+D3B;;;;EC/EW;AAKhB;;EAIkB,QAAA,EAAA,CAAA,KAAA,ECeC,MDfD,CCeQ,CDfR,CAAA,EAAA,GCee,SDff;EAAA;;;EAKF,WAAA,CAAA,ECcD,ODdC,CCcO,cDdP,CAAA;;;;;ACVjB;cA+BM,QA/BmC,EAAA,CAAA,UA+Bb,OA/Ba,CAAA,CAAA;EAAA,KAAA;EAAA,MAAA;EAAA,aAAA;EAAA,OAAA;EAAA,QAAA;EAAA;AAAA,CAAA,EAsCtC,aAtCsC,CAsCxB,CAtCwB,CAAA,EAAA,GAsCtB,kBAAA,CAAA,GAAA,CAAA,OAtCsB;;;cCU5B,UAAA;cACD,qBAAA,CAAA,cADW,qBAAA,CACX,gBAAA,OAAA,qBAAA,CAAA,mBAAA;YAaF,qBAAA,CAAA,cAbE,qBAAA,CAaF,gBAAA,OAAA,qBAAA,CAAA,mBAAA;YAQA,qBAAA,CAAA,cARA,qBAAA,CAQA,gBAAA,OAAA,qBAAA,CAAA,mBAAA;gBAOI,qBAAA,CAAA,cAPJ,qBAAA,CAOI,gBAAA,OAAA,qBAAA,CAAA,mBAAA;eAOD,qBAAA,CAAA,cAPC,qBAAA,CAOD,gBAAA,OAAA,qBAAA,CAAA,mBAAA;iBAOE,qBAAA,CAAA,cAPF,qBAAA,CAOE,gBAAA,OAAA,qBAAA,CAAA,mBAAA;YAQL,qBAAA,CAAA,cARK,qBAAA,CAQL,gBAAA,OAAA,qBAAA,CAAA,mBAAA;ELvDJ,cAaL,EKiDe,qBAAA,CAAA,aLjDf,CK0CS,qBAAA,CAOM,gBAAA,ELjDf,GAAA,EKiDe,qBAAA,CAAA,mBAAA,CLjDf;YKyDS,qBAAA,CAAA,cARM,qBAAA,CAQN,gBAAA,OAAA,qBAAA,CAAA,mBAAA;aAYC,qBAAA,CAAA,cAZD,qBAAA,CAYC,gBAAA,OAAA,qBAAA,CAAA,mBAAA;gBAOG,qBAAA,CAAA,cAPH,qBAAA,CAOG,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EJjGR,iBA4CL,EI4DkB,qBAAA,CAAA,aJ5DlB,CIqDa,qBAAA,CAOK,gBAAA,EJ5DlB,GAAA,EI4DkB,qBAAA,CAAA,mBAAA,CJ5DlB;mBImEgB,qBAAA,CAAA,cAPE,qBAAA,CAOF,gBAAA,OAAA,qBAAA,CAAA,mBAAA;;;;;;ALvGH;;;cMaD,cAAY,OAAA,CAAA,QAGvB,OAAA,CAHuB,MAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/demo/components/DemoHome.tsx","../../src/demo/components/DemoLayout.tsx","../../src/demo/components/json/DemoJsonViewer.tsx","../../src/demo/components/shared/MacWindow.tsx","../../src/demo/components/shared/Showcase.tsx","../../src/demo/DemoRouter.ts","../../src/demo/index.ts"],"mappings":";;;;;;;;cAaM,QAAA,QAAQ,kBAAA,CAAA,GAAA,CAAA,OAAA;;;cCRR,UAAA,QAAU,kBAAA,CAAA,GAAA,CAAA,OAAA;;;cC6EV,cAAA,QAAc,kBAAA,CAAA,GAAA,CAAA,OAAA;;;UC/EH,cAAA;EACf,QAAA,EAAU,SAAA;EACV,KAAA;EACA,cAAA,GAAiB,QAAA;EACjB,IAAA;AAAA;AAAA,cAKI,SAAA;EAAa,QAAA;EAAA,KAAA;EAAA,cAAA;EAAA;AAAA,GAKhB,cAAA,KAAc,kBAAA,CAAA,GAAA,CAAA,OAAA;;;UCVA,aAAA,WAAwB,OAAA;;;;EAIvC,KAAA;EJEI;;;EIEJ,MAAA,EAAQ,CAAA;EJWT;;;EIPC,aAAA,GAAgB,OAAA,CAAQ,MAAA,CAAO,CAAA;EHd3B;;;EGkBJ,OAAA;EH0BD;;;EGtBC,QAAA,GAAW,KAAA,EAAO,MAAA,CAAO,CAAA,MAAO,SAAA;EFuD5B;;;EEnDJ,WAAA,GAAc,OAAA,CAAQ,cAAA;AAAA;;;;AD5BxB;cCmCM,QAAA,aAAsB,OAAA;EAAS,KAAA;EAAA,MAAA;EAAA,aAAA;EAAA,OAAA;EAAA,QAAA;EAAA;AAAA,GAOlC,aAAA,CAAc,CAAA,MAAE,kBAAA,CAAA,GAAA,CAAA,OAAA;;;cC5BN,UAAA;EACX,UAAA,EAAU,qBAAA,CAAA,aAAA,CADW,qBAAA,CACX,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAaV,QAAA,EAAQ,qBAAA,CAAA,aAAA,CAbE,qBAAA,CAaF,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAQR,QAAA,EAAQ,qBAAA,CAAA,aAAA,CARA,qBAAA,CAQA,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAOR,YAAA,EAAY,qBAAA,CAAA,aAAA,CAPJ,qBAAA,CAOI,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAOZ,WAAA,EAAW,qBAAA,CAAA,aAAA,CAPC,qBAAA,CAOD,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAOX,aAAA,EAAa,qBAAA,CAAA,aAAA,CAPF,qBAAA,CAOE,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAQb,QAAA,EAAQ,qBAAA,CAAA,aAAA,CARK,qBAAA,CAQL,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAOR,cAAA,EAAc,qBAAA,CAAA,aAAA,CAPN,qBAAA,CAOM,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAQd,QAAA,EAAQ,qBAAA,CAAA,aAAA,CARM,qBAAA,CAQN,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAYR,SAAA,EAAS,qBAAA,CAAA,aAAA,CAZD,qBAAA,CAYC,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAOT,YAAA,EAAY,qBAAA,CAAA,aAAA,CAPH,qBAAA,CAOG,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAOZ,iBAAA,EAAiB,qBAAA,CAAA,aAAA,CAPL,qBAAA,CAOK,gBAAA,OAAA,qBAAA,CAAA,mBAAA;EAOjB,eAAA,EAAe,qBAAA,CAAA,aAAA,CAPE,qBAAA,CAOF,gBAAA,OAAA,qBAAA,CAAA,mBAAA;AAAA;;;;;ALvGH;;;cMaD,YAAA,EAAY,OAAA,CAAA,OAAA,CAGvB,OAAA,CAHuB,MAAA"}
@@ -1,7 +1,7 @@
1
- import { t as DemoHome_default } from "./DemoHome-CnuL5WV9.js";
2
- import { t as DemoLayout_default } from "./DemoLayout-dvbeuBBf.js";
3
- import { t as DemoJsonViewer_default } from "./DemoJsonViewer-NUGst5wW.js";
4
- import { n as MacWindow_default, t as Showcase_default } from "./Showcase-vemLuO2t.js";
1
+ import { t as DemoHome_default } from "./DemoHome-Cce2bWmg.js";
2
+ import { t as DemoLayout_default } from "./DemoLayout-DjIDm93B.js";
3
+ import { t as DemoJsonViewer_default } from "./DemoJsonViewer-D_Hff1Q2.js";
4
+ import { n as MacWindow_default, t as Showcase_default } from "./Showcase-HchhcsHV.js";
5
5
  import { AlephaUI } from "@alepha/ui";
6
6
  import { $module } from "alepha";
7
7
  import { $page } from "@alepha/react/router";
@@ -13,7 +13,7 @@ var DemoRouter = class {
13
13
  icon: IconPackages,
14
14
  path: "/demo",
15
15
  label: "Demo",
16
- lazy: () => import("./DemoLayout-ZFDzyvY3.js"),
16
+ lazy: () => import("./DemoLayout-nNMajP_9.js"),
17
17
  children: () => [
18
18
  this.demoHome,
19
19
  this.demoCore,
@@ -25,7 +25,7 @@ var DemoRouter = class {
25
25
  icon: IconHome,
26
26
  path: "/",
27
27
  label: "Home",
28
- lazy: () => import("./DemoHome-D6Z7EE4V.js")
28
+ lazy: () => import("./DemoHome-DC9qkMNe.js")
29
29
  });
30
30
  demoCore = $page({
31
31
  icon: IconWall,
@@ -41,19 +41,19 @@ var DemoRouter = class {
41
41
  icon: IconForms,
42
42
  path: "/type-form",
43
43
  label: "TypeForm",
44
- lazy: () => import("./DemoTypeForm-P5_VInW2.js")
44
+ lazy: () => import("./DemoTypeForm-BlLAcQqZ.js")
45
45
  });
46
46
  demoSidebar = $page({
47
47
  icon: IconLayoutSidebar,
48
48
  path: "/sidebar",
49
49
  label: "Sidebar",
50
- lazy: () => import("./DemoSidebar-DWnjYHoP.js")
50
+ lazy: () => import("./DemoSidebar-DpZXf7GO.js")
51
51
  });
52
52
  demoDataTable = $page({
53
53
  icon: IconTable,
54
54
  path: "/data-table",
55
55
  label: "DataTable",
56
- lazy: () => import("./DemoDataTable-2mzzf__a.js")
56
+ lazy: () => import("./DemoDataTable-DYbDYbs5.js")
57
57
  });
58
58
  demoJson = $page({
59
59
  icon: IconBraces,
@@ -65,7 +65,7 @@ var DemoRouter = class {
65
65
  icon: IconBinaryTree,
66
66
  path: "/viewer",
67
67
  label: "JsonViewer",
68
- lazy: () => import("./DemoJsonViewer-CYUggLop.js")
68
+ lazy: () => import("./DemoJsonViewer-DbWVDdz_.js")
69
69
  });
70
70
  demoAuth = $page({
71
71
  icon: IconKey,
@@ -82,25 +82,25 @@ var DemoRouter = class {
82
82
  icon: IconLogin,
83
83
  path: "/login",
84
84
  label: "Login",
85
- lazy: () => import("./DemoLogin--wE44i23.js")
85
+ lazy: () => import("./DemoLogin-BA_HiIRZ.js")
86
86
  });
87
87
  demoRegister = $page({
88
88
  icon: IconUserPlus,
89
89
  path: "/register",
90
90
  label: "Register",
91
- lazy: () => import("./DemoRegister-BtrMksx6.js")
91
+ lazy: () => import("./DemoRegister-B6syaxP9.js")
92
92
  });
93
93
  demoResetPassword = $page({
94
94
  icon: IconLockQuestion,
95
95
  path: "/reset-password",
96
96
  label: "ResetPassword",
97
- lazy: () => import("./DemoResetPassword-DVXiiiX7.js")
97
+ lazy: () => import("./DemoResetPassword-BOcLG4GF.js")
98
98
  });
99
99
  demoVerifyEmail = $page({
100
100
  icon: IconMailCheck,
101
101
  path: "/verify-email",
102
102
  label: "VerifyEmail",
103
- lazy: () => import("./DemoVerifyEmail-C_ooC5u8.js")
103
+ lazy: () => import("./DemoVerifyEmail-C-J7bXUQ.js")
104
104
  });
105
105
  };
106
106
 
@@ -13,8 +13,7 @@ declare module "@alepha/ui" {
13
13
  */
14
14
  json(data?: any, options?: BaseDialogOptions): void;
15
15
  }
16
- }
17
- //# sourceMappingURL=DialogService.d.ts.map
16
+ } //# sourceMappingURL=DialogService.d.ts.map
18
17
  //#endregion
19
18
  //#region ../../src/json/components/JsonViewer.d.ts
20
19
  interface JsonViewerProps {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/json/extensions/DialogService.tsx","../../src/json/components/JsonViewer.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;AAAuE;;;;IAYvB,IAAA,CAAA,IAAA,CAAA,EAAA,GAAA,EAAA,OAAA,CAAA,EAAjB,iBAAiB,CAAA,EAAA,IAAA;;;;;;UCetC,eAAA;;;;AD3B6D;EAAA,oBAAA,CAAA,EAAA,MAAA;;;;;;;ACQhD;EA4VV,IAAA,CAAA,EA5TJ,WAmeR;EAvK0B;;;EAAA,UAAA,CAAA,EAAA,OAAA;EAAA;;;EAQxB,cAAA,CAAA,EAAA,OAAA;EAAe;;;;;cARL;;;;;;;;GAQV,oBAAe,kBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/json/extensions/DialogService.tsx","../../src/json/components/JsonViewer.tsx"],"mappings":";;;;;;YAKY,aAAA;;;AAL2D;;;;IAYnE,IAAA,CAAK,IAAA,QAAY,OAAA,GAAU,iBAAA;EAAA;AAAA;;;UCerB,eAAA;EACR,IAAA;;;AD5BqE;ECgCrE,oBAAA;;;;EAIA,QAAA;EDxBO;;;EC4BP,IAAA,GAAO,WAAA;ED5BuC;;;ECgC9C,UAAA;;AApCqB;;EAwCrB,cAAA;EARkB;;;EAYlB,WAAA,IACE,GAAA,sBACA,KAAA,OACA,IAAA;AAAA;AAAA,cA6SS,UAAA;EAAc,IAAA;EAAA,oBAAA;EAAA,QAAA;EAAA,IAAA;EAAA,UAAA;EAAA,cAAA;EAAA;AAAA,GAQxB,eAAA,KAAe,kBAAA,CAAA,GAAA,CAAA,OAAA"}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "mantine"
8
8
  ],
9
9
  "author": "Nicolas Foures",
10
- "version": "0.14.4",
10
+ "version": "0.15.1",
11
11
  "type": "module",
12
12
  "engines": {
13
13
  "node": ">=22.0.0"
@@ -22,25 +22,25 @@
22
22
  "styles.css"
23
23
  ],
24
24
  "dependencies": {
25
- "@alepha/react": "0.14.4",
26
- "@mantine/core": "^8.3.11",
27
- "@mantine/dates": "^8.3.11",
28
- "@mantine/hooks": "^8.3.11",
29
- "@mantine/modals": "^8.3.11",
30
- "@mantine/notifications": "^8.3.11",
31
- "@mantine/nprogress": "^8.3.11",
32
- "@mantine/spotlight": "^8.3.11",
25
+ "@alepha/react": "0.15.1",
26
+ "@mantine/core": "^8.3.13",
27
+ "@mantine/dates": "^8.3.13",
28
+ "@mantine/hooks": "^8.3.13",
29
+ "@mantine/modals": "^8.3.13",
30
+ "@mantine/notifications": "^8.3.13",
31
+ "@mantine/nprogress": "^8.3.13",
32
+ "@mantine/spotlight": "^8.3.13",
33
33
  "@tabler/icons-react": "^3.36.1",
34
- "alepha": "0.14.4",
34
+ "alepha": "0.15.1",
35
35
  "dayjs": "^1.11.19"
36
36
  },
37
37
  "devDependencies": {
38
- "@biomejs/biome": "^2.3.11",
38
+ "@biomejs/biome": "^2.3.12",
39
39
  "react": "^19.2.3",
40
40
  "react-dom": "^19.2.3",
41
41
  "typescript": "^5.9.3",
42
42
  "vite": "^7.3.1",
43
- "vitest": "^4.0.16"
43
+ "vitest": "^4.0.18"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "react": "*",
@@ -8,7 +8,7 @@ import {
8
8
  IconUserPlus,
9
9
  } from "@tabler/icons-react";
10
10
  import { $inject, AlephaError, t } from "alepha";
11
- import type { UserRealmController } from "alepha/api/users";
11
+ import type { RealmController } from "alepha/api/users";
12
12
  import { $client } from "alepha/server/links";
13
13
 
14
14
  /**
@@ -22,7 +22,7 @@ const realmQuerySchema = t.object({
22
22
  });
23
23
 
24
24
  export class AuthRouter {
25
- protected readonly userRealmClient = $client<UserRealmController>();
25
+ protected readonly realmClient = $client<RealmController>();
26
26
  protected readonly auth = $inject(ReactAuth);
27
27
 
28
28
  layout = $page({
@@ -115,15 +115,15 @@ export class AuthRouter {
115
115
  },
116
116
  });
117
117
 
118
- protected async loadRealmConfig(userRealmName?: string) {
118
+ protected async loadRealmConfig(realmName?: string) {
119
119
  try {
120
- return await this.userRealmClient.getRealmConfig({
121
- query: { userRealmName },
120
+ return await this.realmClient.getRealmConfig({
121
+ query: { realmName },
122
122
  });
123
123
  } catch (e) {
124
124
  if (e instanceof AlephaError) {
125
125
  throw new AlephaError(
126
- "Missing User-Realm Configuration - Did you forget to add '$userRealm()' to your application?",
126
+ "Missing Realm Configuration - Did you forget to add '$realm()' to your application?",
127
127
  e,
128
128
  );
129
129
  }
@@ -6,7 +6,7 @@ import { ActionButton, Control, capitalize } from "@alepha/ui";
6
6
  import { Card, Flex, Group, Image, Stack, Text, Title } from "@mantine/core";
7
7
  import { IconLock, IconUser } from "@tabler/icons-react";
8
8
  import { AlephaError, t } from "alepha";
9
- import type { UserRealmConfig } from "alepha/api/users";
9
+ import type { RealmConfig } from "alepha/api/users";
10
10
  import { HttpError } from "alepha/server";
11
11
  import { useMemo } from "react";
12
12
  import type { AuthI18n } from "../AuthI18n.ts";
@@ -15,7 +15,7 @@ import IconGithub from "./icons/IconGithub.tsx";
15
15
  import IconGoogle from "./icons/IconGoogle.tsx";
16
16
 
17
17
  export interface LoginProps {
18
- realmConfig: UserRealmConfig;
18
+ realmConfig: RealmConfig;
19
19
  }
20
20
 
21
21
  const Login = (props: LoginProps) => {
@@ -24,9 +24,9 @@ import {
24
24
  } from "@tabler/icons-react";
25
25
  import { TypeBoxError, t } from "alepha";
26
26
  import type {
27
+ RealmConfig,
27
28
  RegistrationIntentResponse,
28
29
  UserController,
29
- UserRealmConfig,
30
30
  } from "alepha/api/users";
31
31
  import { useMemo, useState } from "react";
32
32
  import type { AuthI18n } from "../AuthI18n.ts";
@@ -35,7 +35,7 @@ import IconGithub from "./icons/IconGithub.tsx";
35
35
  import IconGoogle from "./icons/IconGoogle.tsx";
36
36
 
37
37
  export interface RegisterProps {
38
- realmConfig: UserRealmConfig;
38
+ realmConfig: RealmConfig;
39
39
  }
40
40
 
41
41
  type RegistrationPhase = "form" | "verification";
@@ -77,7 +77,12 @@ const Register = (props: RegisterProps) => {
77
77
 
78
78
  const registerSchema = useMemo(() => {
79
79
  const registerSchema = t.object({
80
- username: t.optional(t.text()),
80
+ username: t.optional(
81
+ t.text({
82
+ trim: true,
83
+ pattern: settings.usernameRegExp,
84
+ }),
85
+ ),
81
86
  email: t.optional(t.email()),
82
87
  phoneNumber: t.optional(t.e164()),
83
88
  password: t.string({ minLength: 8 }),
@@ -23,8 +23,8 @@ import {
23
23
  import { AlephaError, t } from "alepha";
24
24
  import type {
25
25
  PasswordResetIntentResponse,
26
+ RealmConfig,
26
27
  UserController,
27
- UserRealmConfig,
28
28
  } from "alepha/api/users";
29
29
  import { resetPasswordRequestSchema } from "alepha/api/users";
30
30
  import { useState } from "react";
@@ -32,7 +32,7 @@ import type { AuthI18n } from "../AuthI18n.ts";
32
32
  import type { AuthRouter } from "../AuthRouter.ts";
33
33
 
34
34
  export interface ResetPasswordProps {
35
- realmConfig: UserRealmConfig;
35
+ realmConfig: RealmConfig;
36
36
  }
37
37
 
38
38
  type Step = "email" | "code" | "password" | "success";
@@ -1,5 +1,5 @@
1
1
  import { t } from "alepha";
2
- import type { UserRealmConfig } from "alepha/api/users";
2
+ import type { RealmConfig } from "alepha/api/users";
3
3
  import Login from "../../../auth/components/Login.tsx";
4
4
  import Showcase from "../shared/Showcase.tsx";
5
5
 
@@ -61,8 +61,8 @@ const buildRealmConfig = (props: {
61
61
  registrationAllowed: boolean;
62
62
  resetPasswordAllowed: boolean;
63
63
  showBranding: boolean;
64
- }): UserRealmConfig => {
65
- const authMethods: UserRealmConfig["authenticationMethods"] = [];
64
+ }): RealmConfig => {
65
+ const authMethods: RealmConfig["authenticationMethods"] = [];
66
66
 
67
67
  if (props.showCredentials) {
68
68
  authMethods.push({ name: "credentials", type: "CREDENTIALS" });
@@ -85,6 +85,7 @@ const buildRealmConfig = (props: {
85
85
  emailEnabled: props.emailEnabled,
86
86
  emailRequired: false,
87
87
  usernameEnabled: props.usernameEnabled,
88
+ usernameRegExp: "^[a-zA-Z0-9_]{3,30}$",
88
89
  usernameRequired: false,
89
90
  phoneEnabled: props.phoneEnabled,
90
91
  phoneRequired: false,
@@ -1,5 +1,5 @@
1
1
  import { t } from "alepha";
2
- import type { UserRealmConfig } from "alepha/api/users";
2
+ import type { RealmConfig } from "alepha/api/users";
3
3
  import Register from "../../../auth/components/Register.tsx";
4
4
  import Showcase from "../shared/Showcase.tsx";
5
5
 
@@ -73,8 +73,8 @@ const buildRealmConfig = (props: {
73
73
  phoneRequired: boolean;
74
74
  registrationAllowed: boolean;
75
75
  showBranding: boolean;
76
- }): UserRealmConfig => {
77
- const authMethods: UserRealmConfig["authenticationMethods"] = [];
76
+ }): RealmConfig => {
77
+ const authMethods: RealmConfig["authenticationMethods"] = [];
78
78
 
79
79
  if (props.showCredentials) {
80
80
  authMethods.push({ name: "credentials", type: "CREDENTIALS" });
@@ -98,6 +98,7 @@ const buildRealmConfig = (props: {
98
98
  emailRequired: props.emailRequired,
99
99
  usernameEnabled: props.usernameEnabled,
100
100
  usernameRequired: props.usernameRequired,
101
+ usernameRegExp: "^[a-zA-Z0-9_]{3,30}$",
101
102
  phoneEnabled: props.phoneEnabled,
102
103
  phoneRequired: props.phoneRequired,
103
104
  verifyEmailRequired: false,
@@ -1,5 +1,5 @@
1
1
  import { t } from "alepha";
2
- import type { UserRealmConfig } from "alepha/api/users";
2
+ import type { RealmConfig } from "alepha/api/users";
3
3
  import ResetPassword from "../../../auth/components/ResetPassword.tsx";
4
4
  import Showcase from "../shared/Showcase.tsx";
5
5
 
@@ -19,7 +19,7 @@ const showcaseSchema = t.object({
19
19
  const buildRealmConfig = (props: {
20
20
  resetPasswordAllowed: boolean;
21
21
  showBranding: boolean;
22
- }): UserRealmConfig => {
22
+ }): RealmConfig => {
23
23
  return {
24
24
  realmName: "demo",
25
25
  authenticationMethods: [{ name: "credentials", type: "CREDENTIALS" }],
@@ -32,6 +32,7 @@ const buildRealmConfig = (props: {
32
32
  emailRequired: true,
33
33
  usernameEnabled: false,
34
34
  usernameRequired: false,
35
+ usernameRegExp: "^[a-zA-Z0-9_]{3,30}$",
35
36
  phoneEnabled: false,
36
37
  phoneRequired: false,
37
38
  verifyEmailRequired: false,
@@ -1,3 +0,0 @@
1
- import { t as AdminAudits_default } from "./AdminAudits-DIrCCPk3.js";
2
-
3
- export { AdminAudits_default as default };
@@ -1,3 +0,0 @@
1
- import { t as AdminFiles_default } from "./AdminFiles-RsL178Ta.js";
2
-
3
- export { AdminFiles_default as default };
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminFiles-RsL178Ta.js","names":["filters"],"sources":["../../src/admin/components/files/AdminFiles.tsx"],"sourcesContent":["import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { DataTable, Flex, Text } from \"@alepha/ui\";\nimport { Badge } from \"@mantine/core\";\nimport { type Page, t } from \"alepha\";\nimport { type FileController, type FileEntity, files } from \"alepha/api/files\";\n\nconst AdminFiles = () => {\n const client = useClient<FileController>();\n const { l } = useI18n();\n\n const filters = t.object({\n bucket: t.optional(t.string()),\n name: t.optional(\n t.string({\n $control: {\n query: t.pick(files.schema, [\"name\", \"bucket\", \"mimeType\"]),\n },\n }),\n ),\n });\n\n const formatFileSize = (bytes: number) => {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${Number.parseFloat((bytes / k ** i).toFixed(1))} ${sizes[i]}`;\n };\n\n return (\n <Flex flex={1} direction={\"column\"}>\n <DataTable<FileEntity, typeof filters>\n submitOnInit\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n onFilterChange={(key, _value, form) => {\n if (key === \"name\" || key === \"bucket\") {\n return form.submit();\n }\n }}\n filters={filters}\n items={async (filters) => {\n const response = await client.findFiles({\n query: filters,\n });\n\n return response as Page<FileEntity>;\n }}\n columns={{\n name: {\n label: \"Name\",\n value: (item) => (\n <Text size=\"sm\" fw={500} lineClamp={1}>\n {item.name}\n </Text>\n ),\n },\n bucket: {\n label: \"Bucket\",\n fit: true,\n value: (item) => (\n <Badge size=\"sm\" variant=\"light\" color=\"blue\">\n {item.bucket}\n </Badge>\n ),\n },\n mimeType: {\n label: \"Type\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {item.mimeType}\n </Text>\n ),\n },\n size: {\n label: \"Size\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {formatFileSize(item.size)}\n </Text>\n ),\n },\n creatorName: {\n label: \"Creator\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {item.creatorName || \"-\"}\n </Text>\n ),\n },\n createdAt: {\n label: \"Created\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminFiles;\n"],"mappings":";;;;;;;;;AAOA,MAAM,mBAAmB;CACvB,MAAM,SAAS,WAA2B;CAC1C,MAAM,EAAE,MAAM,SAAS;CAEvB,MAAM,UAAU,EAAE,OAAO;EACvB,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;EAC9B,MAAM,EAAE,SACN,EAAE,OAAO,EACP,UAAU,EACR,OAAO,EAAE,KAAK,MAAM,QAAQ;GAAC;GAAQ;GAAU;GAAW,CAAC,EAC5D,EACF,CAAC,CACH;EACF,CAAC;CAEF,MAAM,kBAAkB,UAAkB;AACxC,MAAI,UAAU,EAAG,QAAO;EACxB,MAAM,IAAI;EACV,MAAM,QAAQ;GAAC;GAAK;GAAM;GAAM;GAAK;EACrC,MAAM,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;AACnD,SAAO,GAAG,OAAO,YAAY,QAAQ,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,GAAG,MAAM;;AAGpE,QACE,oBAAC;EAAK,MAAM;EAAG,WAAW;YACxB,oBAAC;GACC;GACA,aAAa;GACb,eAAe;IACb,kBAAkB;IAClB,SAAS;IACV;GACD,YAAY;IACV,mBAAmB;IACnB,iBAAiB;IAClB;GACD,iBAAiB,KAAK,QAAQ,SAAS;AACrC,QAAI,QAAQ,UAAU,QAAQ,SAC5B,QAAO,KAAK,QAAQ;;GAGf;GACT,OAAO,OAAO,cAAY;AAKxB,WAJiB,MAAM,OAAO,UAAU,EACtC,OAAOA,WACR,CAAC;;GAIJ,SAAS;IACP,MAAM;KACJ,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,IAAI;MAAK,WAAW;gBACjC,KAAK;OACD;KAEV;IACD,QAAQ;KACN,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAM,MAAK;MAAK,SAAQ;MAAQ,OAAM;gBACpC,KAAK;OACA;KAEX;IACD,UAAU;KACR,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,KAAK;OACD;KAEV;IACD,MAAM;KACJ,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,eAAe,KAAK,KAAK;OACrB;KAEV;IACD,aAAa;KACX,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,KAAK,eAAe;OAChB;KAEV;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;OAClC;KAEV;IACF;IACD;GACG;;AAIX,yBAAe"}
@@ -1,3 +0,0 @@
1
- import { t as AdminLayout_default } from "./AdminLayout-XiSivwWH.js";
2
-
3
- export { AdminLayout_default as default };
@@ -1,3 +0,0 @@
1
- import { t as AdminNotifications_default } from "./AdminNotifications-cIbywWKi.js";
2
-
3
- export { AdminNotifications_default as default };
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminNotifications-cIbywWKi.js","names":["filters"],"sources":["../../src/admin/components/notifications/AdminNotifications.tsx"],"sourcesContent":["import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { DataTable, Flex, Text } from \"@alepha/ui\";\nimport { Badge, Tooltip } from \"@mantine/core\";\nimport {\n IconAlertCircle,\n IconCheck,\n IconClock,\n IconMail,\n IconMessage,\n} from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport type {\n AdminNotificationController,\n NotificationEntity,\n} from \"alepha/api/notifications\";\n\nconst AdminNotifications = () => {\n const client = useClient<AdminNotificationController>();\n const { l } = useI18n();\n\n const filters = t.object({\n type: t.optional(\n t.enum([\"email\", \"sms\"], {\n title: \"Type\",\n }),\n ),\n status: t.optional(\n t.enum([\"pending\", \"sent\", \"failed\"], {\n title: \"Status\",\n }),\n ),\n template: t.optional(\n t.string({\n title: \"Template\",\n }),\n ),\n contact: t.optional(\n t.string({\n title: \"Contact\",\n }),\n ),\n });\n\n const getStatus = (item: NotificationEntity) => {\n if (item.error) return \"failed\";\n if (item.sentAt) return \"sent\";\n return \"pending\";\n };\n\n const getStatusBadge = (item: NotificationEntity) => {\n const status = getStatus(item);\n switch (status) {\n case \"sent\":\n return (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color=\"green\"\n leftSection={<IconCheck size={12} />}\n >\n Sent\n </Badge>\n );\n case \"failed\":\n return (\n <Tooltip label={item.error?.message} multiline maw={300}>\n <Badge\n size=\"sm\"\n variant=\"light\"\n color=\"red\"\n leftSection={<IconAlertCircle size={12} />}\n >\n Failed\n </Badge>\n </Tooltip>\n );\n default:\n return (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color=\"yellow\"\n leftSection={<IconClock size={12} />}\n >\n Pending\n </Badge>\n );\n }\n };\n\n return (\n <Flex flex={1} direction=\"column\">\n <DataTable<NotificationEntity, typeof filters>\n submitOnInit\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 4,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n onFilterChange={(_key, _value, form) => {\n return form.submit();\n }}\n filters={filters}\n tableTrProps={(item) => {\n const status = getStatus(item);\n if (status === \"failed\") {\n return {\n bg: \"var(--mantine-color-red-light)\",\n };\n }\n return {};\n }}\n items={async (filters) => {\n const response = await client.findNotifications({\n query: filters,\n });\n\n return response as Page<NotificationEntity>;\n }}\n columns={{\n type: {\n label: \"Type\",\n fit: true,\n value: (item) => (\n <Badge\n size=\"sm\"\n variant=\"outline\"\n leftSection={\n item.type === \"email\" ? (\n <IconMail size={12} />\n ) : (\n <IconMessage size={12} />\n )\n }\n >\n {item.type.toUpperCase()}\n </Badge>\n ),\n },\n template: {\n label: \"Template\",\n value: (item) => (\n <Text size=\"sm\" fw={500}>\n {item.template}\n </Text>\n ),\n },\n contact: {\n label: \"Contact\",\n value: (item) => (\n <Text size=\"sm\" ff=\"monospace\">\n {item.contact}\n </Text>\n ),\n },\n category: {\n label: \"Category\",\n fit: true,\n value: (item) =>\n item.category ? (\n <Badge size=\"xs\" variant=\"light\">\n {item.category}\n </Badge>\n ) : (\n <Text size=\"xs\" c=\"dimmed\">\n -\n </Text>\n ),\n },\n status: {\n label: \"Status\",\n fit: true,\n value: (item) => getStatusBadge(item),\n },\n sentAt: {\n label: \"Sent\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {item.sentAt ? l(item.sentAt, { date: \"fromNow\" }) : \"-\"}\n </Text>\n ),\n },\n createdAt: {\n label: \"Created\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminNotifications;\n"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { t as AdminSessions_default } from "./AdminSessions-vOgkrQ2U.js";
2
-
3
- export { AdminSessions_default as default };
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminSessions-vOgkrQ2U.js","names":["filters"],"sources":["../../src/admin/components/sessions/AdminSessions.tsx"],"sourcesContent":["import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { useRouter } from \"@alepha/react/router\";\nimport { ActionButton, DataTable, Flex, Text } from \"@alepha/ui\";\nimport { Badge, Group } from \"@mantine/core\";\nimport {\n IconDeviceDesktop,\n IconDeviceMobile,\n IconDeviceTablet,\n IconTrash,\n} from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport {\n type AdminSessionController,\n type SessionEntity,\n sessions,\n} from \"alepha/api/users\";\nimport { useState } from \"react\";\nimport type { AdminRouter } from \"../../AdminRouter.ts\";\n\nexport interface AdminSessionsProps {\n userRealmName?: string;\n}\n\nconst AdminSessions = (props: AdminSessionsProps) => {\n const client = useClient<AdminSessionController>();\n const router = useRouter<AdminRouter>();\n const { l } = useI18n();\n const [refreshKey, setRefreshKey] = useState(0);\n\n const filters = t.object({\n userId: t.optional(\n t.uuid({\n $control: {\n query: t.pick(sessions.schema, [\"userId\"]),\n },\n }),\n ),\n });\n\n const getDeviceIcon = (device?: string) => {\n switch (device) {\n case \"MOBILE\":\n return <IconDeviceMobile size={14} />;\n case \"TABLET\":\n return <IconDeviceTablet size={14} />;\n default:\n return <IconDeviceDesktop size={14} />;\n }\n };\n\n const isExpired = (expiresAt: Date | string) => {\n return new Date(expiresAt) < new Date();\n };\n\n const handleDelete = async (sessionId: string) => {\n await client.deleteSession({\n params: { id: sessionId },\n query: { userRealmName: props.userRealmName },\n });\n setRefreshKey((k) => k + 1);\n };\n\n return (\n <Flex flex={1} direction=\"column\">\n <DataTable<SessionEntity, typeof filters>\n key={refreshKey}\n submitOnInit\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n onFilterChange={(key, _value, form) => {\n if (key === \"userId\") {\n return form.submit();\n }\n }}\n filters={filters}\n tableTrProps={(item) => {\n if (isExpired(item.expiresAt)) {\n return {\n opacity: 0.5,\n };\n }\n return {};\n }}\n items={async (filters) => {\n const response = await client.findSessions({\n query: {\n ...filters,\n userRealmName: props.userRealmName,\n },\n });\n\n return response as Page<SessionEntity>;\n }}\n columns={{\n userId: {\n label: \"User\",\n value: (item) => (\n <ActionButton\n variant=\"subtle\"\n size=\"xs\"\n href={router.path(\"adminUserDetails\", {\n params: { userId: item.userId },\n })}\n >\n <Text size=\"xs\" ff=\"monospace\">\n {item.userId.slice(0, 8)}...\n </Text>\n </ActionButton>\n ),\n },\n userAgent: {\n label: \"Device\",\n fit: true,\n value: (item) => (\n <Group gap={4}>\n {item.userAgent ? (\n <>\n <Badge\n size=\"xs\"\n variant=\"light\"\n leftSection={getDeviceIcon(item.userAgent.device)}\n >\n {item.userAgent.device}\n </Badge>\n <Text size=\"xs\" c=\"dimmed\">\n {item.userAgent.browser} / {item.userAgent.os}\n </Text>\n </>\n ) : (\n <Text size=\"xs\" c=\"dimmed\">\n -\n </Text>\n )}\n </Group>\n ),\n },\n ip: {\n label: \"IP\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" ff=\"monospace\" c=\"dimmed\">\n {item.ip || \"-\"}\n </Text>\n ),\n },\n expiresAt: {\n label: \"Status\",\n fit: true,\n value: (item) => (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color={isExpired(item.expiresAt) ? \"red\" : \"green\"}\n >\n {isExpired(item.expiresAt) ? \"Expired\" : \"Active\"}\n </Badge>\n ),\n },\n createdAt: {\n label: \"Created\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n actions: {\n label: \"\",\n fit: true,\n value: (item) => (\n <ActionButton\n size=\"xs\"\n variant=\"subtle\"\n color=\"red\"\n onClick={() => handleDelete(item.id)}\n >\n <IconTrash size={14} />\n </ActionButton>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminSessions;\n"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { t as AdminUserSessions_default } from "./AdminUserSessions-DEaGu6n6.js";
2
-
3
- export { AdminUserSessions_default as default };
@@ -1,3 +0,0 @@
1
- import { t as AdminUserSettings_default } from "./AdminUserSettings-Di73D7g2.js";
2
-
3
- export { AdminUserSettings_default as default };
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminUsers-BnGIRvmV.js","names":["Flex","filters"],"sources":["../../src/admin/components/users/AdminUsers.tsx"],"sourcesContent":["import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { useRouter } from \"@alepha/react/router\";\nimport { DataTable, Text } from \"@alepha/ui\";\nimport { Badge, Flex, Group } from \"@mantine/core\";\nimport { IconCheck, IconUsersPlus, IconX } from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport {\n type AdminUserController,\n type UserEntity,\n users,\n} from \"alepha/api/users\";\nimport type { AdminRouter } from \"../../AdminRouter.ts\";\n\nexport interface AdminUsersProps {\n userRealmName?: string;\n}\n\nconst AdminUsers = (props: AdminUsersProps) => {\n const client = useClient<AdminUserController>();\n const router = useRouter<AdminRouter>();\n const { l } = useI18n();\n\n const filters = t.object({\n query: t.optional(\n t.string({\n $control: {\n query: t.omit(users.schema, [\"id\", \"version\"]),\n },\n }),\n ),\n });\n\n return (\n <Flex flex={1} direction=\"column\">\n <DataTable<UserEntity, typeof filters>\n submitOnInit\n actions={[\n {\n icon: IconUsersPlus,\n href: router.path(\"adminUserCreate\"),\n label: \"Create User\",\n },\n ]}\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n striped: false,\n highlightOnHover: true,\n }}\n onFilterChange={(key, value, form) => {\n if (key === \"query\") {\n return form.submit();\n }\n }}\n filters={filters}\n tableTrProps={(item) => {\n const baseProps: Record<string, any> = {\n style: { cursor: \"pointer\" },\n onClick: () =>\n router.go(\"adminUserDetails\", {\n params: { userId: item.id },\n }),\n };\n\n if (!item.enabled) {\n baseProps.opacity = 0.5;\n }\n\n return baseProps;\n }}\n items={async (filters) => {\n const response = await client.findUsers({\n query: {\n ...filters,\n userRealmName: props.userRealmName,\n },\n });\n\n return response as Page<UserEntity>;\n }}\n columns={{\n username: {\n label: \"Username\",\n value: (item) => (\n <Text size=\"sm\" fw={500}>\n {item.username || \"-\"}\n </Text>\n ),\n },\n email: {\n label: \"Email\",\n value: (item) => (\n <Group gap=\"xs\">\n <Text size=\"sm\">{item.email || \"-\"}</Text>\n {item.email && (\n <Badge\n size=\"xs\"\n variant=\"light\"\n color={item.emailVerified ? \"green\" : \"gray\"}\n leftSection={\n item.emailVerified ? (\n <IconCheck size={10} />\n ) : (\n <IconX size={10} />\n )\n }\n >\n {item.emailVerified ? \"Verified\" : \"Unverified\"}\n </Badge>\n )}\n </Group>\n ),\n },\n roles: {\n label: \"Roles\",\n value: (item) => (\n <Group gap={4}>\n {item.roles.map((role: string) => (\n <Badge key={role} size=\"xs\" variant=\"outline\">\n {role}\n </Badge>\n ))}\n </Group>\n ),\n },\n enabled: {\n label: \"Status\",\n fit: true,\n value: (item) => (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color={item.enabled ? \"green\" : \"red\"}\n >\n {item.enabled ? \"Active\" : \"Disabled\"}\n </Badge>\n ),\n },\n createdAt: {\n label: \"Created\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminUsers;\n"],"mappings":";;;;;;;;;;;AAkBA,MAAM,cAAc,UAA2B;CAC7C,MAAM,SAAS,WAAgC;CAC/C,MAAM,SAAS,WAAwB;CACvC,MAAM,EAAE,MAAM,SAAS;CAEvB,MAAM,UAAU,EAAE,OAAO,EACvB,OAAO,EAAE,SACP,EAAE,OAAO,EACP,UAAU,EACR,OAAO,EAAE,KAAK,MAAM,QAAQ,CAAC,MAAM,UAAU,CAAC,EAC/C,EACF,CAAC,CACH,EACF,CAAC;AAEF,QACE,oBAACA;EAAK,MAAM;EAAG,WAAU;YACvB,oBAAC;GACC;GACA,SAAS,CACP;IACE,MAAM;IACN,MAAM,OAAO,KAAK,kBAAkB;IACpC,OAAO;IACR,CACF;GACD,aAAa;GACb,eAAe;IACb,kBAAkB;IAClB,SAAS;IACV;GACD,YAAY;IACV,mBAAmB;IACnB,iBAAiB;IACjB,SAAS;IACT,kBAAkB;IACnB;GACD,iBAAiB,KAAK,OAAO,SAAS;AACpC,QAAI,QAAQ,QACV,QAAO,KAAK,QAAQ;;GAGf;GACT,eAAe,SAAS;IACtB,MAAM,YAAiC;KACrC,OAAO,EAAE,QAAQ,WAAW;KAC5B,eACE,OAAO,GAAG,oBAAoB,EAC5B,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAC5B,CAAC;KACL;AAED,QAAI,CAAC,KAAK,QACR,WAAU,UAAU;AAGtB,WAAO;;GAET,OAAO,OAAO,cAAY;AAQxB,WAPiB,MAAM,OAAO,UAAU,EACtC,OAAO;KACL,GAAGC;KACH,eAAe,MAAM;KACtB,EACF,CAAC;;GAIJ,SAAS;IACP,UAAU;KACR,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,IAAI;gBACjB,KAAK,YAAY;OACb;KAEV;IACD,OAAO;KACL,OAAO;KACP,QAAQ,SACN,qBAAC;MAAM,KAAI;iBACT,oBAAC;OAAK,MAAK;iBAAM,KAAK,SAAS;QAAW,EACzC,KAAK,SACJ,oBAAC;OACC,MAAK;OACL,SAAQ;OACR,OAAO,KAAK,gBAAgB,UAAU;OACtC,aACE,KAAK,gBACH,oBAAC,aAAU,MAAM,KAAM,GAEvB,oBAAC,SAAM,MAAM,KAAM;iBAItB,KAAK,gBAAgB,aAAa;QAC7B;OAEJ;KAEX;IACD,OAAO;KACL,OAAO;KACP,QAAQ,SACN,oBAAC;MAAM,KAAK;gBACT,KAAK,MAAM,KAAK,SACf,oBAAC;OAAiB,MAAK;OAAK,SAAQ;iBACjC;SADS,KAEJ,CACR;OACI;KAEX;IACD,SAAS;KACP,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MACC,MAAK;MACL,SAAQ;MACR,OAAO,KAAK,UAAU,UAAU;gBAE/B,KAAK,UAAU,WAAW;OACrB;KAEX;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;OAClC;KAEV;IACF;IACD;GACG;;AAIX,yBAAe"}
@@ -1,3 +0,0 @@
1
- import { t as AdminUsers_default } from "./AdminUsers-BnGIRvmV.js";
2
-
3
- export { AdminUsers_default as default };
@@ -1,4 +0,0 @@
1
- import "./IconGoogle-Cm5d8J3f.js";
2
- import { t as Login_default } from "./Login-Cjxv3EDi.js";
3
-
4
- export { Login_default as default };