@oussemasahbeni/keycloakify-login-shadcn 250004.0.3 → 250004.0.8

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 (187) hide show
  1. package/keycloak-theme/components/langauges.tsx +1 -1
  2. package/keycloak-theme/components/theme-toggle.tsx +0 -1
  3. package/keycloak-theme/components/ui/alert.tsx +1 -2
  4. package/keycloak-theme/components/ui/button.tsx +1 -2
  5. package/keycloak-theme/components/ui/card.tsx +0 -1
  6. package/keycloak-theme/components/ui/checkbox.tsx +0 -1
  7. package/keycloak-theme/components/ui/dropdown-menu.tsx +14 -4
  8. package/keycloak-theme/components/ui/field.tsx +0 -1
  9. package/keycloak-theme/components/ui/input-otp.tsx +0 -1
  10. package/keycloak-theme/components/ui/input.tsx +0 -1
  11. package/keycloak-theme/components/ui/label.tsx +1 -2
  12. package/keycloak-theme/components/ui/radio-group.tsx +0 -1
  13. package/keycloak-theme/components/ui/select.tsx +12 -4
  14. package/keycloak-theme/components/ui/separator.tsx +0 -1
  15. package/keycloak-theme/components/ui/tooltip.tsx +0 -1
  16. package/keycloak-theme/login/KcContext.ts +23 -23
  17. package/keycloak-theme/login/KcPage.tsx +45 -47
  18. package/keycloak-theme/login/assets/img/auth-logo.svg +100 -100
  19. package/keycloak-theme/login/assets/img/shape.svg +71 -71
  20. package/keycloak-theme/login/components/LogoutOtherSessions.tsx +24 -26
  21. package/keycloak-theme/login/components/PasswordWrapper.tsx +35 -35
  22. package/keycloak-theme/login/components/Template/Template.tsx +279 -227
  23. package/keycloak-theme/login/components/Template/index.ts +1 -1
  24. package/keycloak-theme/login/components/Template/useInitializeTemplate.ts +61 -61
  25. package/keycloak-theme/login/components/UserProfileFormFields/AddRemoveButtonsMultiValuedAttribute.tsx +65 -61
  26. package/keycloak-theme/login/components/UserProfileFormFields/DO_MAKE_USER_CONFIRM_PASSWORD.ts +2 -2
  27. package/keycloak-theme/login/components/UserProfileFormFields/FieldErrors.tsx +33 -29
  28. package/keycloak-theme/login/components/UserProfileFormFields/GroupLabel.tsx +90 -71
  29. package/keycloak-theme/login/components/UserProfileFormFields/InputFieldByType.tsx +66 -59
  30. package/keycloak-theme/login/components/UserProfileFormFields/InputLabel.tsx +0 -1
  31. package/keycloak-theme/login/components/UserProfileFormFields/InputTag.tsx +133 -116
  32. package/keycloak-theme/login/components/UserProfileFormFields/InputTagSelects.tsx +150 -136
  33. package/keycloak-theme/login/components/UserProfileFormFields/SelectTag.tsx +135 -114
  34. package/keycloak-theme/login/components/UserProfileFormFields/TextareaTag.tsx +55 -43
  35. package/keycloak-theme/login/components/UserProfileFormFields/UserProfileFormFields.tsx +133 -127
  36. package/keycloak-theme/login/components/UserProfileFormFields/index.ts +1 -1
  37. package/keycloak-theme/login/i18n.ts +47 -47
  38. package/keycloak-theme/login/mocks/KcPageStory.tsx +6 -2
  39. package/keycloak-theme/login/mocks/getKcContextMock.ts +22 -22
  40. package/keycloak-theme/login/pages/PageIndex.tsx +130 -134
  41. package/keycloak-theme/login/pages/code/Page.stories.tsx +57 -70
  42. package/keycloak-theme/login/pages/code/Page.tsx +89 -89
  43. package/keycloak-theme/login/pages/code/index.ts +3 -3
  44. package/keycloak-theme/login/pages/delete-account-confirm/Page.stories.tsx +37 -46
  45. package/keycloak-theme/login/pages/delete-account-confirm/Page.tsx +60 -63
  46. package/keycloak-theme/login/pages/delete-account-confirm/index.ts +3 -3
  47. package/keycloak-theme/login/pages/delete-credential/Page.stories.tsx +25 -30
  48. package/keycloak-theme/login/pages/delete-credential/Page.tsx +56 -51
  49. package/keycloak-theme/login/pages/delete-credential/index.ts +3 -3
  50. package/keycloak-theme/login/pages/error/Page.stories.tsx +46 -58
  51. package/keycloak-theme/login/pages/error/Page.tsx +43 -42
  52. package/keycloak-theme/login/pages/error/index.ts +3 -3
  53. package/keycloak-theme/login/pages/frontchannel-logout/Page.stories.tsx +25 -32
  54. package/keycloak-theme/login/pages/frontchannel-logout/Page.tsx +82 -84
  55. package/keycloak-theme/login/pages/frontchannel-logout/index.ts +3 -3
  56. package/keycloak-theme/login/pages/idp-review-user-profile/Page.stories.tsx +46 -59
  57. package/keycloak-theme/login/pages/idp-review-user-profile/Page.tsx +49 -52
  58. package/keycloak-theme/login/pages/idp-review-user-profile/index.ts +3 -3
  59. package/keycloak-theme/login/pages/info/Page.stories.tsx +50 -60
  60. package/keycloak-theme/login/pages/info/Page.tsx +94 -92
  61. package/keycloak-theme/login/pages/link-idp-action/Page.stories.tsx +32 -16
  62. package/keycloak-theme/login/pages/link-idp-action/Page.tsx +45 -43
  63. package/keycloak-theme/login/pages/link-idp-action/index.ts +3 -3
  64. package/keycloak-theme/login/pages/login/Form.tsx +242 -242
  65. package/keycloak-theme/login/pages/login/Info.tsx +29 -29
  66. package/keycloak-theme/login/pages/login/Page.stories.tsx +346 -365
  67. package/keycloak-theme/login/pages/login/Page.tsx +43 -44
  68. package/keycloak-theme/login/pages/login/SocialProviders.tsx +93 -107
  69. package/keycloak-theme/login/pages/login/index.ts +3 -3
  70. package/keycloak-theme/login/pages/login/providers/apple.svg +3 -3
  71. package/keycloak-theme/login/pages/login/providers/bitbucket.svg +11 -11
  72. package/keycloak-theme/login/pages/login/providers/discord.svg +4 -4
  73. package/keycloak-theme/login/pages/login/providers/facebook.svg +5 -5
  74. package/keycloak-theme/login/pages/login/providers/github.svg +3 -3
  75. package/keycloak-theme/login/pages/login/providers/gitlab.svg +7 -7
  76. package/keycloak-theme/login/pages/login/providers/google.svg +7 -7
  77. package/keycloak-theme/login/pages/login/providers/instagram.svg +31 -31
  78. package/keycloak-theme/login/pages/login/providers/linkedin.svg +3 -3
  79. package/keycloak-theme/login/pages/login/providers/microsoft.svg +6 -6
  80. package/keycloak-theme/login/pages/login/providers/oidc.svg +5 -5
  81. package/keycloak-theme/login/pages/login/providers/openshift.svg +7 -7
  82. package/keycloak-theme/login/pages/login/providers/paypal.svg +6 -6
  83. package/keycloak-theme/login/pages/login/providers/slack.svg +11 -11
  84. package/keycloak-theme/login/pages/login/providers/stackoverflow.svg +5 -5
  85. package/keycloak-theme/login/pages/login/providers/x.svg +3 -3
  86. package/keycloak-theme/login/pages/login/useProviderLogos.tsx +39 -39
  87. package/keycloak-theme/login/pages/login/useScript.tsx +62 -62
  88. package/keycloak-theme/login/pages/login-config-totp/Page.stories.tsx +45 -60
  89. package/keycloak-theme/login/pages/login-config-totp/Page.tsx +253 -240
  90. package/keycloak-theme/login/pages/login-config-totp/index.ts +3 -3
  91. package/keycloak-theme/login/pages/login-idp-link-confirm/Page.stories.tsx +30 -35
  92. package/keycloak-theme/login/pages/login-idp-link-confirm/Page.tsx +40 -43
  93. package/keycloak-theme/login/pages/login-idp-link-confirm/index.ts +3 -3
  94. package/keycloak-theme/login/pages/login-idp-link-confirm-override/Page.stories.tsx +16 -23
  95. package/keycloak-theme/login/pages/login-idp-link-confirm-override/Page.tsx +44 -47
  96. package/keycloak-theme/login/pages/login-idp-link-confirm-override/index.ts +3 -3
  97. package/keycloak-theme/login/pages/login-idp-link-email/Page.stories.tsx +54 -63
  98. package/keycloak-theme/login/pages/login-idp-link-email/Page.tsx +51 -54
  99. package/keycloak-theme/login/pages/login-idp-link-email/index.ts +3 -3
  100. package/keycloak-theme/login/pages/login-oauth-grant/Page.stories.tsx +39 -45
  101. package/keycloak-theme/login/pages/login-oauth-grant/Page.tsx +136 -126
  102. package/keycloak-theme/login/pages/login-oauth-grant/index.ts +3 -3
  103. package/keycloak-theme/login/pages/login-oauth2-device-verify-user-code/Page.stories.tsx +38 -48
  104. package/keycloak-theme/login/pages/login-oauth2-device-verify-user-code/Page.tsx +56 -58
  105. package/keycloak-theme/login/pages/login-oauth2-device-verify-user-code/index.ts +3 -3
  106. package/keycloak-theme/login/pages/login-otp/Page.stories.tsx +82 -97
  107. package/keycloak-theme/login/pages/login-otp/Page.tsx +117 -108
  108. package/keycloak-theme/login/pages/login-otp/index.ts +3 -3
  109. package/keycloak-theme/login/pages/login-page-expired/Page.stories.tsx +28 -37
  110. package/keycloak-theme/login/pages/login-page-expired/Page.tsx +45 -47
  111. package/keycloak-theme/login/pages/login-page-expired/index.ts +3 -3
  112. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/Page.stories.tsx +20 -0
  113. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/Page.tsx +290 -233
  114. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/index.ts +3 -3
  115. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/useScript.tsx +63 -63
  116. package/keycloak-theme/login/pages/login-password/Page.stories.tsx +55 -56
  117. package/keycloak-theme/login/pages/login-password/Page.tsx +148 -149
  118. package/keycloak-theme/login/pages/login-password/index.ts +3 -3
  119. package/keycloak-theme/login/pages/login-password/useScript.tsx +62 -63
  120. package/keycloak-theme/login/pages/login-recovery-authn-code-config/Page.stories.tsx +28 -36
  121. package/keycloak-theme/login/pages/login-recovery-authn-code-config/Page.tsx +178 -181
  122. package/keycloak-theme/login/pages/login-recovery-authn-code-config/index.ts +3 -3
  123. package/keycloak-theme/login/pages/login-recovery-authn-code-config/useScript.tsx +145 -145
  124. package/keycloak-theme/login/pages/login-recovery-authn-code-input/Page.stories.tsx +16 -22
  125. package/keycloak-theme/login/pages/login-recovery-authn-code-input/Page.tsx +69 -70
  126. package/keycloak-theme/login/pages/login-recovery-authn-code-input/index.ts +3 -3
  127. package/keycloak-theme/login/pages/login-reset-otp/Page.stories.tsx +62 -75
  128. package/keycloak-theme/login/pages/login-reset-otp/Page.tsx +85 -86
  129. package/keycloak-theme/login/pages/login-reset-otp/index.ts +3 -3
  130. package/keycloak-theme/login/pages/login-reset-password/Form.tsx +67 -68
  131. package/keycloak-theme/login/pages/login-reset-password/Page.stories.tsx +44 -55
  132. package/keycloak-theme/login/pages/login-reset-password/Page.tsx +27 -27
  133. package/keycloak-theme/login/pages/login-reset-password/index.ts +3 -3
  134. package/keycloak-theme/login/pages/login-update-password/Page.stories.tsx +40 -51
  135. package/keycloak-theme/login/pages/login-update-password/Page.tsx +109 -111
  136. package/keycloak-theme/login/pages/login-update-password/index.ts +3 -3
  137. package/keycloak-theme/login/pages/login-update-profile/Page.stories.tsx +28 -37
  138. package/keycloak-theme/login/pages/login-update-profile/Page.tsx +67 -68
  139. package/keycloak-theme/login/pages/login-update-profile/index.ts +3 -3
  140. package/keycloak-theme/login/pages/login-username/Page.stories.tsx +32 -43
  141. package/keycloak-theme/login/pages/login-username/Page.tsx +246 -246
  142. package/keycloak-theme/login/pages/login-username/index.ts +3 -3
  143. package/keycloak-theme/login/pages/login-username/useScript.tsx +62 -62
  144. package/keycloak-theme/login/pages/login-verify-email/Page.stories.tsx +68 -81
  145. package/keycloak-theme/login/pages/login-verify-email/Page.tsx +37 -38
  146. package/keycloak-theme/login/pages/login-verify-email/index.ts +3 -3
  147. package/keycloak-theme/login/pages/login-x509-info/Page.stories.tsx +29 -38
  148. package/keycloak-theme/login/pages/login-x509-info/Page.tsx +72 -75
  149. package/keycloak-theme/login/pages/login-x509-info/index.ts +3 -3
  150. package/keycloak-theme/login/pages/logout-confirm/Page.stories.tsx +34 -43
  151. package/keycloak-theme/login/pages/logout-confirm/Page.tsx +50 -53
  152. package/keycloak-theme/login/pages/logout-confirm/index.ts +3 -3
  153. package/keycloak-theme/login/pages/register/Form.tsx +107 -106
  154. package/keycloak-theme/login/pages/register/Page.stories.tsx +40 -14
  155. package/keycloak-theme/login/pages/register/Page.tsx +26 -26
  156. package/keycloak-theme/login/pages/register/TermsAcceptance.tsx +55 -56
  157. package/keycloak-theme/login/pages/register/index.ts +3 -3
  158. package/keycloak-theme/login/pages/saml-post-form/Page.stories.tsx +16 -23
  159. package/keycloak-theme/login/pages/saml-post-form/Page.tsx +64 -66
  160. package/keycloak-theme/login/pages/saml-post-form/index.ts +3 -3
  161. package/keycloak-theme/login/pages/select-authenticator/Page.stories.tsx +83 -96
  162. package/keycloak-theme/login/pages/select-authenticator/Page.tsx +97 -100
  163. package/keycloak-theme/login/pages/select-authenticator/index.ts +3 -3
  164. package/keycloak-theme/login/pages/select-organization/Page.stories.tsx +62 -49
  165. package/keycloak-theme/login/pages/select-organization/Page.tsx +123 -126
  166. package/keycloak-theme/login/pages/select-organization/index.ts +3 -3
  167. package/keycloak-theme/login/pages/terms/Page.stories.tsx +15 -0
  168. package/keycloak-theme/login/pages/terms/Page.tsx +49 -51
  169. package/keycloak-theme/login/pages/terms/index.ts +3 -3
  170. package/keycloak-theme/login/pages/update-email/Page.stories.tsx +27 -36
  171. package/keycloak-theme/login/pages/update-email/Page.tsx +61 -62
  172. package/keycloak-theme/login/pages/update-email/index.ts +3 -3
  173. package/keycloak-theme/login/pages/webauthn-authenticate/Page.stories.tsx +112 -127
  174. package/keycloak-theme/login/pages/webauthn-authenticate/Page.tsx +206 -202
  175. package/keycloak-theme/login/pages/webauthn-authenticate/index.ts +3 -3
  176. package/keycloak-theme/login/pages/webauthn-authenticate/useScript.tsx +55 -55
  177. package/keycloak-theme/login/pages/webauthn-error/Page.stories.tsx +52 -67
  178. package/keycloak-theme/login/pages/webauthn-error/Page.tsx +70 -73
  179. package/keycloak-theme/login/pages/webauthn-error/index.ts +3 -3
  180. package/keycloak-theme/login/pages/webauthn-register/Page.stories.tsx +39 -50
  181. package/keycloak-theme/login/pages/webauthn-register/Page.tsx +78 -78
  182. package/keycloak-theme/login/pages/webauthn-register/index.ts +3 -3
  183. package/keycloak-theme/login/pages/webauthn-register/useScript.tsx +62 -62
  184. package/keycloak-theme/login/shared/getColorScheme.ts +45 -45
  185. package/keycloak-theme/login/styleLevelCustomization.tsx +34 -36
  186. package/keycloak-theme/public/site.webmanifest +11 -1
  187. package/package.json +6 -2
@@ -1,62 +1,62 @@
1
- import { useInsertScriptTags } from "@keycloakify/login-ui/tools/useInsertScriptTags";
2
- import { waitForElementMountedOnDom } from "@keycloakify/login-ui/tools/waitForElementMountedOnDom";
3
- import { useEffect } from "react";
4
- import { assert } from "tsafe/assert";
5
- import { useI18n } from "../../i18n";
6
- import { useKcContext } from "../../KcContext";
7
-
8
- export function useScript(params: { webAuthnButtonId: string }) {
9
- const { webAuthnButtonId } = params;
10
-
11
- const { kcContext } = useKcContext();
12
- assert(kcContext.pageId === "login-username.ftl");
13
-
14
- const { msgStr, isFetchingTranslations } = useI18n();
15
-
16
- const { insertScriptTags } = useInsertScriptTags({
17
- effectId: "LoginRecoveryAuthnCodeConfigLoginUsername",
18
- scriptTags: [
19
- {
20
- type: "module",
21
- textContent: () => `
22
- import { authenticateByWebAuthn } from "${import.meta.env.BASE_URL}keycloak-theme/login/js/webauthnAuthenticate.js";
23
- import { initAuthenticate } from "${import.meta.env.BASE_URL}keycloak-theme/login/js/passkeysConditionalAuth.js";
24
-
25
- const authButton = document.getElementById("${webAuthnButtonId}");
26
- const input = {
27
- isUserIdentified : ${kcContext.isUserIdentified},
28
- challenge : ${JSON.stringify(kcContext.challenge)},
29
- userVerification : ${JSON.stringify(kcContext.userVerification)},
30
- rpId : ${JSON.stringify(kcContext.rpId)},
31
- createTimeout : ${kcContext.createTimeout}
32
- };
33
- authButton.addEventListener("click", () => {
34
- authenticateByWebAuthn({
35
- ...input,
36
- errmsg : ${JSON.stringify(msgStr("webauthn-unsupported-browser-text"))}
37
- });
38
- });
39
-
40
- initAuthenticate({
41
- ...input,
42
- errmsg : ${JSON.stringify(msgStr("passkey-unsupported-browser-text"))}
43
- });
44
- `
45
- }
46
- ]
47
- });
48
-
49
- useEffect(() => {
50
- if (isFetchingTranslations) {
51
- return;
52
- }
53
-
54
- (async () => {
55
- await waitForElementMountedOnDom({
56
- elementId: webAuthnButtonId
57
- });
58
-
59
- insertScriptTags();
60
- })();
61
- }, [isFetchingTranslations]);
62
- }
1
+ import { useInsertScriptTags } from "@keycloakify/login-ui/tools/useInsertScriptTags";
2
+ import { waitForElementMountedOnDom } from "@keycloakify/login-ui/tools/waitForElementMountedOnDom";
3
+ import { useEffect } from "react";
4
+ import { assert } from "tsafe/assert";
5
+ import { useI18n } from "../../i18n";
6
+ import { useKcContext } from "../../KcContext";
7
+
8
+ export function useScript(params: { webAuthnButtonId: string }) {
9
+ const { webAuthnButtonId } = params;
10
+
11
+ const { kcContext } = useKcContext();
12
+ assert(kcContext.pageId === "login-username.ftl");
13
+
14
+ const { msgStr, isFetchingTranslations } = useI18n();
15
+
16
+ const { insertScriptTags } = useInsertScriptTags({
17
+ effectId: "LoginRecoveryAuthnCodeConfigLoginUsername",
18
+ scriptTags: [
19
+ {
20
+ type: "module",
21
+ textContent: () => `
22
+ import { authenticateByWebAuthn } from "${import.meta.env.BASE_URL}keycloak-theme/login/js/webauthnAuthenticate.js";
23
+ import { initAuthenticate } from "${import.meta.env.BASE_URL}keycloak-theme/login/js/passkeysConditionalAuth.js";
24
+
25
+ const authButton = document.getElementById("${webAuthnButtonId}");
26
+ const input = {
27
+ isUserIdentified : ${kcContext.isUserIdentified},
28
+ challenge : ${JSON.stringify(kcContext.challenge)},
29
+ userVerification : ${JSON.stringify(kcContext.userVerification)},
30
+ rpId : ${JSON.stringify(kcContext.rpId)},
31
+ createTimeout : ${kcContext.createTimeout}
32
+ };
33
+ authButton.addEventListener("click", () => {
34
+ authenticateByWebAuthn({
35
+ ...input,
36
+ errmsg : ${JSON.stringify(msgStr("webauthn-unsupported-browser-text"))}
37
+ });
38
+ });
39
+
40
+ initAuthenticate({
41
+ ...input,
42
+ errmsg : ${JSON.stringify(msgStr("passkey-unsupported-browser-text"))}
43
+ });
44
+ `
45
+ }
46
+ ]
47
+ });
48
+
49
+ useEffect(() => {
50
+ if (isFetchingTranslations) {
51
+ return;
52
+ }
53
+
54
+ (async () => {
55
+ await waitForElementMountedOnDom({
56
+ elementId: webAuthnButtonId
57
+ });
58
+
59
+ insertScriptTags();
60
+ })();
61
+ }, [isFetchingTranslations]);
62
+ }
@@ -1,6 +1,5 @@
1
1
  import { createKcPageStory, type Meta, type StoryObj } from "../../mocks/KcPageStory";
2
2
 
3
-
4
3
  const { KcPageStory } = createKcPageStory({ pageId: "login-verify-email.ftl" });
5
4
 
6
5
  const meta = {
@@ -13,43 +12,37 @@ export default meta;
13
12
  type Story = StoryObj<typeof meta>;
14
13
 
15
14
  export const Default: Story = {
16
- render: () => (
17
- <KcPageStory
18
- kcContext={{
19
- message: {
20
- summary: "You need to verify your email to activate your account.",
21
- type: "warning"
22
- },
23
- user: {
24
- email: "john.doe@gmail.com"
25
- }
26
- }}
27
- />
28
- )
15
+ args: {
16
+ kcContext: {
17
+ message: {
18
+ summary: "You need to verify your email to activate your account.",
19
+ type: "warning"
20
+ },
21
+ user: {
22
+ email: "john.doe@gmail.com"
23
+ }
24
+ }
25
+ }
29
26
  };
30
27
 
31
28
  export const Arabic: Story = {
32
- render: () => (
33
- <KcPageStory
34
- kcContext={{
35
- locale: {
36
- currentLanguageTag: "ar",
37
- rtl: true
38
- }
39
- }}
40
- />
41
- )
29
+ args: {
30
+ kcContext: {
31
+ locale: {
32
+ currentLanguageTag: "ar",
33
+ rtl: true
34
+ }
35
+ }
36
+ }
42
37
  };
43
38
  export const French: Story = {
44
- render: () => (
45
- <KcPageStory
46
- kcContext={{
47
- locale: {
48
- currentLanguageTag: "fr"
49
- }
50
- }}
51
- />
52
- )
39
+ args: {
40
+ kcContext: {
41
+ locale: {
42
+ currentLanguageTag: "fr"
43
+ }
44
+ }
45
+ }
53
46
  };
54
47
 
55
48
  /**
@@ -59,22 +52,20 @@ export const French: Story = {
59
52
  * - Key Aspect: Ensures the success message is displayed correctly when the email is successfully verified.
60
53
  */
61
54
  export const WithSuccessMessage: Story = {
62
- render: () => (
63
- <KcPageStory
64
- kcContext={{
65
- message: {
66
- summary: "Your email has been successfully verified.",
67
- type: "success"
68
- },
69
- user: {
70
- email: "john.doe@gmail.com"
71
- },
72
- url: {
73
- loginAction: "/mock-login-action"
74
- }
75
- }}
76
- />
77
- )
55
+ args: {
56
+ kcContext: {
57
+ message: {
58
+ summary: "Your email has been successfully verified.",
59
+ type: "success"
60
+ },
61
+ user: {
62
+ email: "john.doe@gmail.com"
63
+ },
64
+ url: {
65
+ loginAction: "/mock-login-action"
66
+ }
67
+ }
68
+ }
78
69
  };
79
70
 
80
71
  /**
@@ -84,22 +75,20 @@ export const WithSuccessMessage: Story = {
84
75
  * - Key Aspect: Ensures the error message is shown correctly when the verification process encounters an issue.
85
76
  */
86
77
  export const WithErrorMessage: Story = {
87
- render: () => (
88
- <KcPageStory
89
- kcContext={{
90
- message: {
91
- summary: "There was an error verifying your email. Please try again.",
92
- type: "error"
93
- },
94
- user: {
95
- email: "john.doe@gmail.com"
96
- },
97
- url: {
98
- loginAction: "/mock-login-action"
99
- }
100
- }}
101
- />
102
- )
78
+ args: {
79
+ kcContext: {
80
+ message: {
81
+ summary: "There was an error verifying your email. Please try again.",
82
+ type: "error"
83
+ },
84
+ user: {
85
+ email: "john.doe@gmail.com"
86
+ },
87
+ url: {
88
+ loginAction: "/mock-login-action"
89
+ }
90
+ }
91
+ }
103
92
  };
104
93
 
105
94
  /**
@@ -109,20 +98,18 @@ export const WithErrorMessage: Story = {
109
98
  * - Key Aspect: Ensures the informational message is displayed properly.
110
99
  */
111
100
  export const WithInfoMessage: Story = {
112
- render: () => (
113
- <KcPageStory
114
- kcContext={{
115
- message: {
116
- summary: "Please verify your email to continue using our services.",
117
- type: "info"
118
- },
119
- user: {
120
- email: "john.doe@gmail.com"
121
- },
122
- url: {
123
- loginAction: "/mock-login-action"
124
- }
125
- }}
126
- />
127
- )
101
+ args: {
102
+ kcContext: {
103
+ message: {
104
+ summary: "Please verify your email to continue using our services.",
105
+ type: "info"
106
+ },
107
+ user: {
108
+ email: "john.doe@gmail.com"
109
+ },
110
+ url: {
111
+ loginAction: "/mock-login-action"
112
+ }
113
+ }
114
+ }
128
115
  };
@@ -1,38 +1,37 @@
1
- import { useI18n } from '@/login/i18n';
2
- import { useKcContext } from '@/login/KcContext';
3
- import { assert } from 'tsafe/assert';
4
- import { Template } from "../../components/Template";
5
-
6
-
7
- export function Page() {
8
- const { kcContext } = useKcContext();
9
- assert(kcContext.pageId === "login-verify-email.ftl");
10
-
11
- const { msg } = useI18n();
12
-
13
- const { url, user } = kcContext;
14
- return (
15
- <Template
16
- displayInfo
17
- headerNode={msg("emailVerifyTitle")}
18
- infoNode={
19
- <p className="instruction">
20
- {msg("emailVerifyInstruction2")}
21
- <br />
22
- <a
23
- className="text-primary dark:text-white underline"
24
- href={url.loginAction}
25
- >
26
- {msg("doClickHere")}
27
- </a>
28
- &nbsp;
29
- {msg("emailVerifyInstruction3")}
30
- </p>
31
- }
32
- >
33
- <p className="instruction">
34
- {msg("emailVerifyInstruction1", user?.email ?? "")}
35
- </p>
36
- </Template>
37
- );
38
- }
1
+ import { useI18n } from "@/login/i18n";
2
+ import { useKcContext } from "@/login/KcContext";
3
+ import { assert } from "tsafe/assert";
4
+ import { Template } from "../../components/Template";
5
+
6
+ export function Page() {
7
+ const { kcContext } = useKcContext();
8
+ assert(kcContext.pageId === "login-verify-email.ftl");
9
+
10
+ const { msg } = useI18n();
11
+
12
+ const { url, user } = kcContext;
13
+ return (
14
+ <Template
15
+ displayInfo
16
+ headerNode={msg("emailVerifyTitle")}
17
+ infoNode={
18
+ <p className="instruction">
19
+ {msg("emailVerifyInstruction2")}
20
+ <br />
21
+ <a
22
+ className="text-primary dark:text-white underline"
23
+ href={url.loginAction}
24
+ >
25
+ {msg("doClickHere")}
26
+ </a>
27
+ &nbsp;
28
+ {msg("emailVerifyInstruction3")}
29
+ </p>
30
+ }
31
+ >
32
+ <p className="instruction">
33
+ {msg("emailVerifyInstruction1", user?.email ?? "")}
34
+ </p>
35
+ </Template>
36
+ );
37
+ }
@@ -1,3 +1,3 @@
1
- import { Page } from "./Page";
2
-
3
- export default Page;
1
+ import { Page } from "./Page";
2
+
3
+ export default Page;
@@ -1,6 +1,5 @@
1
1
  import { createKcPageStory, type Meta, type StoryObj } from "../../mocks/KcPageStory";
2
2
 
3
-
4
3
  const { KcPageStory } = createKcPageStory({ pageId: "login-x509-info.ftl" });
5
4
 
6
5
  const meta = {
@@ -12,32 +11,26 @@ export default meta;
12
11
 
13
12
  type Story = StoryObj<typeof meta>;
14
13
 
15
- export const Default: Story = {
16
- render: () => <KcPageStory />
17
- };
14
+ export const Default: Story = {};
18
15
 
19
16
  export const Arabic: Story = {
20
- render: () => (
21
- <KcPageStory
22
- kcContext={{
23
- locale: {
24
- currentLanguageTag: "ar",
25
- rtl: true
26
- }
27
- }}
28
- />
29
- )
17
+ args: {
18
+ kcContext: {
19
+ locale: {
20
+ currentLanguageTag: "ar",
21
+ rtl: true
22
+ }
23
+ }
24
+ }
30
25
  };
31
26
  export const French: Story = {
32
- render: () => (
33
- <KcPageStory
34
- kcContext={{
35
- locale: {
36
- currentLanguageTag: "fr"
37
- }
38
- }}
39
- />
40
- )
27
+ args: {
28
+ kcContext: {
29
+ locale: {
30
+ currentLanguageTag: "fr"
31
+ }
32
+ }
33
+ }
41
34
  };
42
35
 
43
36
  /**
@@ -47,20 +40,18 @@ export const French: Story = {
47
40
  * - Key Aspect: Ensures that the login buttons are not displayed when the user is not enabled.
48
41
  */
49
42
  export const WithoutUserEnabled: Story = {
50
- render: () => (
51
- <KcPageStory
52
- kcContext={{
53
- url: {
54
- loginAction: "/mock-login-action"
55
- },
56
- x509: {
57
- formData: {
58
- subjectDN: "CN=John Doe, OU=Example Org, O=Example Inc, C=US",
59
- username: "johndoe",
60
- isUserEnabled: false // User not enabled for login
61
- }
43
+ args: {
44
+ kcContext: {
45
+ url: {
46
+ loginAction: "/mock-login-action"
47
+ },
48
+ x509: {
49
+ formData: {
50
+ subjectDN: "CN=John Doe, OU=Example Org, O=Example Inc, C=US",
51
+ username: "johndoe",
52
+ isUserEnabled: false // User not enabled for login
62
53
  }
63
- }}
64
- />
65
- )
54
+ }
55
+ }
56
+ }
66
57
  };
@@ -1,75 +1,72 @@
1
- import { Button } from "@/components/ui/button";
2
- import { Label } from "@/components/ui/label";
3
- import { useI18n } from '@/login/i18n';
4
- import { useKcContext } from '@/login/KcContext';
5
- import { assert } from "tsafe/assert";
6
- import { Template } from "../../components/Template";
7
-
8
- export function Page() {
9
- const { kcContext } = useKcContext();
10
- assert(kcContext.pageId === "login-x509-info.ftl");
11
-
12
-
13
- const { url, x509 } = kcContext;
14
-
15
- const { msg, msgStr } = useI18n();
16
-
17
- return (
18
- <Template
19
- headerNode={msg("doLogIn")}
20
- >
21
- <form
22
- id="kc-x509-login-info"
23
- className="space-y-6"
24
- action={url.loginAction}
25
- method="post"
26
- >
27
- <div className="space-y-2">
28
- <Label className="text-sm font-medium">
29
- {msg("clientCertificate")}
30
- </Label>
31
- <div className="p-3 bg-muted/50 rounded-lg">
32
- <p className="text-sm font-mono break-all">
33
- {x509.formData.subjectDN || msg("noCertificate")}
34
- </p>
35
- </div>
36
- </div>
37
-
38
- {x509.formData.isUserEnabled && (
39
- <div className="space-y-2">
40
- <Label className="text-sm font-medium">
41
- {msg("doX509Login")}
42
- </Label>
43
- <div className="p-3 bg-muted/50 rounded-lg">
44
- <p className="text-sm font-medium">
45
- {x509.formData.username}
46
- </p>
47
- </div>
48
- </div>
49
- )}
50
-
51
- <div className="flex flex-col sm:flex-row gap-3">
52
- {x509.formData.isUserEnabled && (
53
- <Button
54
- variant="outline"
55
- name="cancel"
56
- id="kc-cancel"
57
- type="submit"
58
- className="sm:flex-1"
59
- >
60
- {msgStr("doIgnore")}
61
- </Button>
62
- )}
63
- <Button
64
- name="login"
65
- id="kc-login"
66
- type="submit"
67
- className="sm:flex-1"
68
- >
69
- {msgStr("doContinue")}
70
- </Button>
71
- </div>
72
- </form>
73
- </Template>
74
- );
75
- }
1
+ import { Button } from "@/components/ui/button";
2
+ import { Label } from "@/components/ui/label";
3
+ import { useI18n } from "@/login/i18n";
4
+ import { useKcContext } from "@/login/KcContext";
5
+ import { assert } from "tsafe/assert";
6
+ import { Template } from "../../components/Template";
7
+
8
+ export function Page() {
9
+ const { kcContext } = useKcContext();
10
+ assert(kcContext.pageId === "login-x509-info.ftl");
11
+
12
+ const { url, x509 } = kcContext;
13
+
14
+ const { msg, msgStr } = useI18n();
15
+
16
+ return (
17
+ <Template headerNode={msg("doLogIn")}>
18
+ <form
19
+ id="kc-x509-login-info"
20
+ className="space-y-6"
21
+ action={url.loginAction}
22
+ method="post"
23
+ >
24
+ <div className="space-y-2">
25
+ <Label className="text-sm font-medium">
26
+ {msg("clientCertificate")}
27
+ </Label>
28
+ <div className="p-3 bg-muted/50 rounded-lg">
29
+ <p className="text-sm font-mono break-all">
30
+ {x509.formData.subjectDN || msg("noCertificate")}
31
+ </p>
32
+ </div>
33
+ </div>
34
+
35
+ {x509.formData.isUserEnabled && (
36
+ <div className="space-y-2">
37
+ <Label className="text-sm font-medium">
38
+ {msg("doX509Login")}
39
+ </Label>
40
+ <div className="p-3 bg-muted/50 rounded-lg">
41
+ <p className="text-sm font-medium">
42
+ {x509.formData.username}
43
+ </p>
44
+ </div>
45
+ </div>
46
+ )}
47
+
48
+ <div className="flex flex-col sm:flex-row gap-3">
49
+ {x509.formData.isUserEnabled && (
50
+ <Button
51
+ variant="outline"
52
+ name="cancel"
53
+ id="kc-cancel"
54
+ type="submit"
55
+ className="sm:flex-1"
56
+ >
57
+ {msgStr("doIgnore")}
58
+ </Button>
59
+ )}
60
+ <Button
61
+ name="login"
62
+ id="kc-login"
63
+ type="submit"
64
+ className="sm:flex-1"
65
+ >
66
+ {msgStr("doContinue")}
67
+ </Button>
68
+ </div>
69
+ </form>
70
+ </Template>
71
+ );
72
+ }
@@ -1,3 +1,3 @@
1
- import { Page } from "./Page";
2
-
3
- export default Page;
1
+ import { Page } from "./Page";
2
+
3
+ export default Page;