@oussemasahbeni/keycloakify-login-shadcn 250004.0.2 → 250004.0.7

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 (174) hide show
  1. package/keycloak-theme/components/ui/alert.tsx +4 -4
  2. package/keycloak-theme/components/ui/dropdown-menu.tsx +5 -5
  3. package/keycloak-theme/components/ui/input.tsx +1 -1
  4. package/keycloak-theme/components/ui/select.tsx +4 -4
  5. package/keycloak-theme/components/ui/separator.tsx +1 -1
  6. package/keycloak-theme/login/KcContext.ts +23 -19
  7. package/keycloak-theme/login/KcPage.tsx +47 -60
  8. package/keycloak-theme/login/assets/img/auth-logo.svg +100 -100
  9. package/keycloak-theme/login/assets/img/shape.svg +71 -71
  10. package/keycloak-theme/login/components/LogoutOtherSessions.tsx +26 -26
  11. package/keycloak-theme/login/components/PasswordWrapper.tsx +35 -35
  12. package/keycloak-theme/login/components/Template/Template.tsx +227 -226
  13. package/keycloak-theme/login/components/Template/index.ts +1 -1
  14. package/keycloak-theme/login/components/Template/useInitializeTemplate.ts +61 -61
  15. package/keycloak-theme/login/components/UserProfileFormFields/AddRemoveButtonsMultiValuedAttribute.tsx +61 -61
  16. package/keycloak-theme/login/components/UserProfileFormFields/DO_MAKE_USER_CONFIRM_PASSWORD.ts +2 -2
  17. package/keycloak-theme/login/components/UserProfileFormFields/FieldErrors.tsx +28 -28
  18. package/keycloak-theme/login/components/UserProfileFormFields/GroupLabel.tsx +70 -70
  19. package/keycloak-theme/login/components/UserProfileFormFields/InputFieldByType.tsx +58 -58
  20. package/keycloak-theme/login/components/UserProfileFormFields/InputTag.tsx +116 -116
  21. package/keycloak-theme/login/components/UserProfileFormFields/InputTagSelects.tsx +135 -135
  22. package/keycloak-theme/login/components/UserProfileFormFields/SelectTag.tsx +114 -114
  23. package/keycloak-theme/login/components/UserProfileFormFields/TextareaTag.tsx +42 -42
  24. package/keycloak-theme/login/components/UserProfileFormFields/UserProfileFormFields.tsx +127 -127
  25. package/keycloak-theme/login/components/UserProfileFormFields/index.ts +1 -1
  26. package/keycloak-theme/login/i18n.ts +47 -51
  27. package/keycloak-theme/login/mocks/getKcContextMock.ts +22 -18
  28. package/keycloak-theme/login/pages/PageIndex.tsx +134 -134
  29. package/keycloak-theme/login/pages/code/Page.stories.tsx +62 -78
  30. package/keycloak-theme/login/pages/code/Page.tsx +89 -89
  31. package/keycloak-theme/login/pages/code/index.ts +3 -3
  32. package/keycloak-theme/login/pages/delete-account-confirm/Page.stories.tsx +39 -46
  33. package/keycloak-theme/login/pages/delete-account-confirm/Page.tsx +63 -63
  34. package/keycloak-theme/login/pages/delete-account-confirm/index.ts +3 -3
  35. package/keycloak-theme/login/pages/delete-credential/Page.stories.tsx +26 -30
  36. package/keycloak-theme/login/pages/delete-credential/Page.tsx +51 -51
  37. package/keycloak-theme/login/pages/delete-credential/index.ts +3 -3
  38. package/keycloak-theme/login/pages/error/Page.stories.tsx +47 -58
  39. package/keycloak-theme/login/pages/error/Page.tsx +42 -42
  40. package/keycloak-theme/login/pages/error/index.ts +3 -3
  41. package/keycloak-theme/login/pages/frontchannel-logout/Page.stories.tsx +25 -32
  42. package/keycloak-theme/login/pages/frontchannel-logout/Page.tsx +84 -84
  43. package/keycloak-theme/login/pages/frontchannel-logout/index.ts +3 -3
  44. package/keycloak-theme/login/pages/idp-review-user-profile/Page.stories.tsx +46 -58
  45. package/keycloak-theme/login/pages/idp-review-user-profile/Page.tsx +52 -52
  46. package/keycloak-theme/login/pages/idp-review-user-profile/index.ts +3 -3
  47. package/keycloak-theme/login/pages/info/Page.stories.tsx +50 -60
  48. package/keycloak-theme/login/pages/info/Page.tsx +92 -92
  49. package/keycloak-theme/login/pages/link-idp-action/Page.stories.tsx +32 -16
  50. package/keycloak-theme/login/pages/link-idp-action/Page.tsx +43 -43
  51. package/keycloak-theme/login/pages/link-idp-action/index.ts +3 -3
  52. package/keycloak-theme/login/pages/login/Form.tsx +242 -242
  53. package/keycloak-theme/login/pages/login/Info.tsx +29 -29
  54. package/keycloak-theme/login/pages/login/Page.stories.tsx +345 -365
  55. package/keycloak-theme/login/pages/login/Page.tsx +44 -44
  56. package/keycloak-theme/login/pages/login/SocialProviders.tsx +107 -107
  57. package/keycloak-theme/login/pages/login/index.ts +3 -3
  58. package/keycloak-theme/login/pages/login/providers/apple.svg +3 -3
  59. package/keycloak-theme/login/pages/login/providers/bitbucket.svg +11 -11
  60. package/keycloak-theme/login/pages/login/providers/discord.svg +4 -4
  61. package/keycloak-theme/login/pages/login/providers/facebook.svg +5 -5
  62. package/keycloak-theme/login/pages/login/providers/github.svg +3 -3
  63. package/keycloak-theme/login/pages/login/providers/gitlab.svg +7 -7
  64. package/keycloak-theme/login/pages/login/providers/google.svg +7 -7
  65. package/keycloak-theme/login/pages/login/providers/instagram.svg +31 -31
  66. package/keycloak-theme/login/pages/login/providers/linkedin.svg +3 -3
  67. package/keycloak-theme/login/pages/login/providers/microsoft.svg +6 -6
  68. package/keycloak-theme/login/pages/login/providers/oidc.svg +5 -5
  69. package/keycloak-theme/login/pages/login/providers/openshift.svg +7 -7
  70. package/keycloak-theme/login/pages/login/providers/paypal.svg +6 -6
  71. package/keycloak-theme/login/pages/login/providers/slack.svg +11 -11
  72. package/keycloak-theme/login/pages/login/providers/stackoverflow.svg +5 -5
  73. package/keycloak-theme/login/pages/login/providers/x.svg +3 -3
  74. package/keycloak-theme/login/pages/login/useProviderLogos.tsx +39 -39
  75. package/keycloak-theme/login/pages/login/useScript.tsx +62 -62
  76. package/keycloak-theme/login/pages/login-config-totp/Page.stories.tsx +45 -59
  77. package/keycloak-theme/login/pages/login-config-totp/Page.tsx +240 -240
  78. package/keycloak-theme/login/pages/login-config-totp/index.ts +3 -3
  79. package/keycloak-theme/login/pages/login-idp-link-confirm/Page.stories.tsx +30 -34
  80. package/keycloak-theme/login/pages/login-idp-link-confirm/Page.tsx +43 -43
  81. package/keycloak-theme/login/pages/login-idp-link-confirm/index.ts +3 -3
  82. package/keycloak-theme/login/pages/login-idp-link-confirm-override/Page.stories.tsx +16 -22
  83. package/keycloak-theme/login/pages/login-idp-link-confirm-override/Page.tsx +47 -47
  84. package/keycloak-theme/login/pages/login-idp-link-confirm-override/index.ts +3 -3
  85. package/keycloak-theme/login/pages/login-idp-link-email/Page.stories.tsx +54 -62
  86. package/keycloak-theme/login/pages/login-idp-link-email/Page.tsx +54 -54
  87. package/keycloak-theme/login/pages/login-idp-link-email/index.ts +3 -3
  88. package/keycloak-theme/login/pages/login-oauth-grant/Page.stories.tsx +39 -45
  89. package/keycloak-theme/login/pages/login-oauth-grant/Page.tsx +126 -126
  90. package/keycloak-theme/login/pages/login-oauth-grant/index.ts +3 -3
  91. package/keycloak-theme/login/pages/login-oauth2-device-verify-user-code/Page.stories.tsx +38 -48
  92. package/keycloak-theme/login/pages/login-oauth2-device-verify-user-code/Page.tsx +58 -58
  93. package/keycloak-theme/login/pages/login-oauth2-device-verify-user-code/index.ts +3 -3
  94. package/keycloak-theme/login/pages/login-otp/Page.stories.tsx +82 -96
  95. package/keycloak-theme/login/pages/login-otp/Page.tsx +108 -108
  96. package/keycloak-theme/login/pages/login-otp/index.ts +3 -3
  97. package/keycloak-theme/login/pages/login-page-expired/Page.stories.tsx +28 -36
  98. package/keycloak-theme/login/pages/login-page-expired/Page.tsx +47 -47
  99. package/keycloak-theme/login/pages/login-page-expired/index.ts +3 -3
  100. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/Page.stories.tsx +20 -0
  101. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/Page.tsx +233 -233
  102. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/index.ts +3 -3
  103. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/useScript.tsx +63 -63
  104. package/keycloak-theme/login/pages/login-password/Page.stories.tsx +55 -56
  105. package/keycloak-theme/login/pages/login-password/Page.tsx +149 -149
  106. package/keycloak-theme/login/pages/login-password/index.ts +3 -3
  107. package/keycloak-theme/login/pages/login-password/useScript.tsx +63 -63
  108. package/keycloak-theme/login/pages/login-recovery-authn-code-config/Page.stories.tsx +28 -36
  109. package/keycloak-theme/login/pages/login-recovery-authn-code-config/Page.tsx +181 -181
  110. package/keycloak-theme/login/pages/login-recovery-authn-code-config/index.ts +3 -3
  111. package/keycloak-theme/login/pages/login-recovery-authn-code-config/useScript.tsx +145 -145
  112. package/keycloak-theme/login/pages/login-recovery-authn-code-input/Page.stories.tsx +16 -22
  113. package/keycloak-theme/login/pages/login-recovery-authn-code-input/Page.tsx +70 -70
  114. package/keycloak-theme/login/pages/login-recovery-authn-code-input/index.ts +3 -3
  115. package/keycloak-theme/login/pages/login-reset-otp/Page.stories.tsx +62 -74
  116. package/keycloak-theme/login/pages/login-reset-otp/Page.tsx +86 -86
  117. package/keycloak-theme/login/pages/login-reset-otp/index.ts +3 -3
  118. package/keycloak-theme/login/pages/login-reset-password/Form.tsx +68 -68
  119. package/keycloak-theme/login/pages/login-reset-password/Page.stories.tsx +44 -54
  120. package/keycloak-theme/login/pages/login-reset-password/Page.tsx +27 -27
  121. package/keycloak-theme/login/pages/login-reset-password/index.ts +3 -3
  122. package/keycloak-theme/login/pages/login-update-password/Page.stories.tsx +40 -50
  123. package/keycloak-theme/login/pages/login-update-password/Page.tsx +111 -111
  124. package/keycloak-theme/login/pages/login-update-password/index.ts +3 -3
  125. package/keycloak-theme/login/pages/login-update-profile/Page.stories.tsx +28 -36
  126. package/keycloak-theme/login/pages/login-update-profile/Page.tsx +68 -68
  127. package/keycloak-theme/login/pages/login-update-profile/index.ts +3 -3
  128. package/keycloak-theme/login/pages/login-username/Page.stories.tsx +32 -42
  129. package/keycloak-theme/login/pages/login-username/Page.tsx +246 -246
  130. package/keycloak-theme/login/pages/login-username/index.ts +3 -3
  131. package/keycloak-theme/login/pages/login-username/useScript.tsx +62 -62
  132. package/keycloak-theme/login/pages/login-verify-email/Page.stories.tsx +68 -80
  133. package/keycloak-theme/login/pages/login-verify-email/Page.tsx +38 -38
  134. package/keycloak-theme/login/pages/login-verify-email/index.ts +3 -3
  135. package/keycloak-theme/login/pages/login-x509-info/Page.stories.tsx +29 -37
  136. package/keycloak-theme/login/pages/login-x509-info/Page.tsx +75 -75
  137. package/keycloak-theme/login/pages/login-x509-info/index.ts +3 -3
  138. package/keycloak-theme/login/pages/logout-confirm/Page.stories.tsx +34 -42
  139. package/keycloak-theme/login/pages/logout-confirm/Page.tsx +53 -53
  140. package/keycloak-theme/login/pages/logout-confirm/index.ts +3 -3
  141. package/keycloak-theme/login/pages/register/Form.tsx +106 -106
  142. package/keycloak-theme/login/pages/register/Page.stories.tsx +23 -6
  143. package/keycloak-theme/login/pages/register/Page.tsx +26 -26
  144. package/keycloak-theme/login/pages/register/TermsAcceptance.tsx +56 -56
  145. package/keycloak-theme/login/pages/register/index.ts +3 -3
  146. package/keycloak-theme/login/pages/saml-post-form/Page.stories.tsx +16 -22
  147. package/keycloak-theme/login/pages/saml-post-form/Page.tsx +66 -66
  148. package/keycloak-theme/login/pages/saml-post-form/index.ts +3 -3
  149. package/keycloak-theme/login/pages/select-authenticator/Page.stories.tsx +83 -95
  150. package/keycloak-theme/login/pages/select-authenticator/Page.tsx +100 -100
  151. package/keycloak-theme/login/pages/select-authenticator/index.ts +3 -3
  152. package/keycloak-theme/login/pages/select-organization/Page.stories.tsx +62 -49
  153. package/keycloak-theme/login/pages/select-organization/Page.tsx +126 -126
  154. package/keycloak-theme/login/pages/select-organization/index.ts +3 -3
  155. package/keycloak-theme/login/pages/terms/Page.stories.tsx +15 -0
  156. package/keycloak-theme/login/pages/terms/Page.tsx +51 -51
  157. package/keycloak-theme/login/pages/terms/index.ts +3 -3
  158. package/keycloak-theme/login/pages/update-email/Page.stories.tsx +27 -35
  159. package/keycloak-theme/login/pages/update-email/Page.tsx +62 -62
  160. package/keycloak-theme/login/pages/update-email/index.ts +3 -3
  161. package/keycloak-theme/login/pages/webauthn-authenticate/Page.stories.tsx +112 -126
  162. package/keycloak-theme/login/pages/webauthn-authenticate/Page.tsx +202 -202
  163. package/keycloak-theme/login/pages/webauthn-authenticate/index.ts +3 -3
  164. package/keycloak-theme/login/pages/webauthn-authenticate/useScript.tsx +55 -55
  165. package/keycloak-theme/login/pages/webauthn-error/Page.stories.tsx +54 -66
  166. package/keycloak-theme/login/pages/webauthn-error/Page.tsx +73 -73
  167. package/keycloak-theme/login/pages/webauthn-error/index.ts +3 -3
  168. package/keycloak-theme/login/pages/webauthn-register/Page.stories.tsx +39 -49
  169. package/keycloak-theme/login/pages/webauthn-register/Page.tsx +78 -78
  170. package/keycloak-theme/login/pages/webauthn-register/index.ts +3 -3
  171. package/keycloak-theme/login/pages/webauthn-register/useScript.tsx +62 -62
  172. package/keycloak-theme/login/shared/getColorScheme.ts +45 -0
  173. package/keycloak-theme/login/styleLevelCustomization.tsx +36 -17
  174. package/package.json +6 -5
@@ -1,43 +1,43 @@
1
- import { Button } from "@/components/ui/button";
2
- import { useI18n } from '@/login/i18n';
3
- import { useKcContext } from '@/login/KcContext';
4
- import { assert } from 'tsafe/assert';
5
- import { Template } from "../../components/Template";
6
-
7
-
8
- export function Page() {
9
- const { kcContext } = useKcContext();
10
- assert(kcContext.pageId === "login-idp-link-confirm.ftl");
11
-
12
- const { msg } = useI18n();
13
-
14
- return (
15
- <Template
16
- headerNode={msg("confirmLinkIdpTitle")}
17
- >
18
- <form id="kc-register-form" action={kcContext.url.loginAction} method="post">
19
- <div className="flex flex-col gap-4">
20
- <Button
21
- type="submit"
22
- className="w-full"
23
- variant="outline"
24
- name="submitAction"
25
- id="updateProfile"
26
- value="updateProfile"
27
- >
28
- {msg("confirmLinkIdpReviewProfile")}
29
- </Button>
30
- <Button
31
- type="submit"
32
- className="w-full"
33
- name="submitAction"
34
- id="linkAccount"
35
- value="linkAccount"
36
- >
37
- {msg("confirmLinkIdpContinue", kcContext.idpAlias)}
38
- </Button>
39
- </div>
40
- </form>
41
- </Template>
42
- );
43
- }
1
+ import { Button } from "@/components/ui/button";
2
+ import { useI18n } from '@/login/i18n';
3
+ import { useKcContext } from '@/login/KcContext';
4
+ import { assert } from 'tsafe/assert';
5
+ import { Template } from "../../components/Template";
6
+
7
+
8
+ export function Page() {
9
+ const { kcContext } = useKcContext();
10
+ assert(kcContext.pageId === "login-idp-link-confirm.ftl");
11
+
12
+ const { msg } = useI18n();
13
+
14
+ return (
15
+ <Template
16
+ headerNode={msg("confirmLinkIdpTitle")}
17
+ >
18
+ <form id="kc-register-form" action={kcContext.url.loginAction} method="post">
19
+ <div className="flex flex-col gap-4">
20
+ <Button
21
+ type="submit"
22
+ className="w-full"
23
+ variant="outline"
24
+ name="submitAction"
25
+ id="updateProfile"
26
+ value="updateProfile"
27
+ >
28
+ {msg("confirmLinkIdpReviewProfile")}
29
+ </Button>
30
+ <Button
31
+ type="submit"
32
+ className="w-full"
33
+ name="submitAction"
34
+ id="linkAccount"
35
+ value="linkAccount"
36
+ >
37
+ {msg("confirmLinkIdpContinue", kcContext.idpAlias)}
38
+ </Button>
39
+ </div>
40
+ </form>
41
+ </Template>
42
+ );
43
+ }
@@ -1,3 +1,3 @@
1
- import { Page } from "./Page";
2
-
3
- export default Page;
1
+ import { Page } from "./Page";
2
+
3
+ export default Page;
@@ -14,30 +14,24 @@ export default meta;
14
14
 
15
15
  type Story = StoryObj<typeof meta>;
16
16
 
17
- export const Default: Story = {
18
- render: () => <KcPageStory />
19
- };
17
+ export const Default: Story = {};
20
18
 
21
19
  export const Arabic: Story = {
22
- render: () => (
23
- <KcPageStory
24
- kcContext={{
25
- locale: {
26
- currentLanguageTag: "ar",
27
- rtl: true
28
- }
29
- }}
30
- />
31
- )
20
+ args: {
21
+ kcContext: {
22
+ locale: {
23
+ currentLanguageTag: "ar",
24
+ rtl: true
25
+ }
26
+ }
27
+ }
32
28
  };
33
29
  export const French: Story = {
34
- render: () => (
35
- <KcPageStory
36
- kcContext={{
37
- locale: {
38
- currentLanguageTag: "fr"
39
- }
40
- }}
41
- />
42
- )
30
+ args: {
31
+ kcContext: {
32
+ locale: {
33
+ currentLanguageTag: "fr"
34
+ }
35
+ }
36
+ }
43
37
  };
@@ -1,47 +1,47 @@
1
- import { Button } from "@/components/ui/button";
2
- import { useI18n } from '@/login/i18n';
3
- import { useKcContext } from '@/login/KcContext';
4
- import { assert } from 'tsafe/assert';
5
- import { Template } from "../../components/Template";
6
-
7
- export function Page() {
8
- const { kcContext } = useKcContext();
9
- assert(kcContext.pageId === "login-idp-link-confirm-override.ftl");
10
-
11
-
12
- const { msg } = useI18n();
13
-
14
- return (
15
- <Template
16
- headerNode={msg("confirmOverrideIdpTitle")}
17
- >
18
- <form
19
- id="kc-register-form"
20
- action={kcContext.url.loginAction}
21
- className="flex flex-col gap-5"
22
- method="post"
23
- >
24
- <span>
25
- {msg("pageExpiredMsg1")}{" "}
26
- <a
27
- className="text-primary dark:text-white underline underline-offset-2"
28
- id="loginRestartLink"
29
- href={kcContext.url.loginRestartFlowUrl}
30
- >
31
- {msg("doClickHere")}
32
- </a>
33
- </span>
34
-
35
- <Button
36
- type="submit"
37
- className="w-full"
38
- name="submitAction"
39
- id="confirmOverride"
40
- value="confirmOverride"
41
- >
42
- {msg("confirmOverrideIdpContinue", kcContext.idpDisplayName)}
43
- </Button>
44
- </form>
45
- </Template>
46
- );
47
- }
1
+ import { Button } from "@/components/ui/button";
2
+ import { useI18n } from '@/login/i18n';
3
+ import { useKcContext } from '@/login/KcContext';
4
+ import { assert } from 'tsafe/assert';
5
+ import { Template } from "../../components/Template";
6
+
7
+ export function Page() {
8
+ const { kcContext } = useKcContext();
9
+ assert(kcContext.pageId === "login-idp-link-confirm-override.ftl");
10
+
11
+
12
+ const { msg } = useI18n();
13
+
14
+ return (
15
+ <Template
16
+ headerNode={msg("confirmOverrideIdpTitle")}
17
+ >
18
+ <form
19
+ id="kc-register-form"
20
+ action={kcContext.url.loginAction}
21
+ className="flex flex-col gap-5"
22
+ method="post"
23
+ >
24
+ <span>
25
+ {msg("pageExpiredMsg1")}{" "}
26
+ <a
27
+ className="text-primary dark:text-white underline underline-offset-2"
28
+ id="loginRestartLink"
29
+ href={kcContext.url.loginRestartFlowUrl}
30
+ >
31
+ {msg("doClickHere")}
32
+ </a>
33
+ </span>
34
+
35
+ <Button
36
+ type="submit"
37
+ className="w-full"
38
+ name="submitAction"
39
+ id="confirmOverride"
40
+ value="confirmOverride"
41
+ >
42
+ {msg("confirmOverrideIdpContinue", kcContext.idpDisplayName)}
43
+ </Button>
44
+ </form>
45
+ </Template>
46
+ );
47
+ }
@@ -1,3 +1,3 @@
1
- import { Page } from "./Page";
2
-
3
- export default Page;
1
+ import { Page } from "./Page";
2
+
3
+ export default Page;
@@ -33,31 +33,29 @@ type Story = StoryObj<typeof meta>;
33
33
  * - Key Aspect: Ensures the default behavior of the component with typical kcContext values.
34
34
  */
35
35
  export const Default: Story = {
36
- render: () => <KcPageStory kcContext={mockKcContext} />
36
+ args: {
37
+ kcContext: mockKcContext
38
+ }
37
39
  };
38
40
 
39
41
  export const Arabic: Story = {
40
- render: () => (
41
- <KcPageStory
42
- kcContext={{
43
- locale: {
44
- currentLanguageTag: "ar",
45
- rtl: true
46
- }
47
- }}
48
- />
49
- )
42
+ args: {
43
+ kcContext: {
44
+ locale: {
45
+ currentLanguageTag: "ar",
46
+ rtl: true
47
+ }
48
+ }
49
+ }
50
50
  };
51
51
  export const French: Story = {
52
- render: () => (
53
- <KcPageStory
54
- kcContext={{
55
- locale: {
56
- currentLanguageTag: "fr"
57
- }
58
- }}
59
- />
60
- )
52
+ args: {
53
+ kcContext: {
54
+ locale: {
55
+ currentLanguageTag: "fr"
56
+ }
57
+ }
58
+ }
61
59
  };
62
60
 
63
61
  /**
@@ -67,20 +65,18 @@ export const French: Story = {
67
65
  * - Key Aspect: Ensures the correct identity provider alias ("Google") and broker context (user info) are displayed in the email linking instructions.
68
66
  */
69
67
  export const WithIdpAlias: Story = {
70
- render: () => (
71
- <KcPageStory
72
- kcContext={{
73
- ...mockKcContext,
74
- idpAlias: "Google",
75
- brokerContext: {
76
- username: "john.doe"
77
- },
78
- realm: {
79
- displayName: "MyRealm"
80
- }
81
- }}
82
- />
83
- )
68
+ args: {
69
+ kcContext: {
70
+ ...mockKcContext,
71
+ idpAlias: "Google",
72
+ brokerContext: {
73
+ username: "john.doe"
74
+ },
75
+ realm: {
76
+ displayName: "MyRealm"
77
+ }
78
+ }
79
+ }
84
80
  };
85
81
 
86
82
  /**
@@ -90,20 +86,18 @@ export const WithIdpAlias: Story = {
90
86
  * - Key Aspect: Ensures that custom realm display names are rendered correctly alongside the idpAlias and broker context.
91
87
  */
92
88
  export const WithCustomRealmDisplayName: Story = {
93
- render: () => (
94
- <KcPageStory
95
- kcContext={{
96
- ...mockKcContext,
97
- idpAlias: "Facebook",
98
- brokerContext: {
99
- username: "jane.doe"
100
- },
101
- realm: {
102
- displayName: "CUSTOM REALM DISPLAY NAME"
103
- }
104
- }}
105
- />
106
- )
89
+ args: {
90
+ kcContext: {
91
+ ...mockKcContext,
92
+ idpAlias: "Facebook",
93
+ brokerContext: {
94
+ username: "jane.doe"
95
+ },
96
+ realm: {
97
+ displayName: "CUSTOM REALM DISPLAY NAME"
98
+ }
99
+ }
100
+ }
107
101
  };
108
102
 
109
103
  /**
@@ -113,18 +107,16 @@ export const WithCustomRealmDisplayName: Story = {
113
107
  * - Key Aspect: Verifies that the component can display error messages during form submission failure, ensuring proper error handling.
114
108
  */
115
109
  export const WithFormSubmissionError: Story = {
116
- render: () => (
117
- <KcPageStory
118
- kcContext={{
119
- ...mockKcContext,
120
- url: {
121
- loginAction: "/error"
122
- },
123
- message: {
124
- type: "error",
125
- summary: "An error occurred during form submission."
126
- }
127
- }}
128
- />
129
- )
110
+ args: {
111
+ kcContext: {
112
+ ...mockKcContext,
113
+ url: {
114
+ loginAction: "/error"
115
+ },
116
+ message: {
117
+ type: "error",
118
+ summary: "An error occurred during form submission."
119
+ }
120
+ }
121
+ }
130
122
  };
@@ -1,54 +1,54 @@
1
- import { Alert, AlertDescription } from "@/components/ui/alert";
2
- import { useI18n } from '@/login/i18n';
3
- import { useKcContext } from '@/login/KcContext';
4
- import { assert } from 'tsafe/assert';
5
- import { Template } from "../../components/Template";
6
-
7
- export function Page() {
8
-
9
- const { kcContext } = useKcContext();
10
- assert(kcContext.pageId === "login-idp-link-email.ftl");
11
-
12
- const { msg } = useI18n();
13
-
14
- return (
15
- <Template
16
- headerNode={msg("emailLinkIdpTitle", kcContext.idpAlias)}
17
- >
18
- <Alert id="instruction1" variant="info" className="my-3">
19
- <AlertDescription>
20
- {msg(
21
- "emailLinkIdp1",
22
- kcContext.idpAlias,
23
- kcContext.brokerContext.username,
24
- kcContext.realm.displayName
25
- )}
26
- </AlertDescription>
27
- </Alert>
28
-
29
- <div className="space-y-2 text-sm text-muted-foreground">
30
- <p className="leading-relaxed">
31
- {msg("emailLinkIdp2")}{" "}
32
- <a
33
- href={kcContext.url.loginAction}
34
- className="inline-flex items-center gap-1 text-primary dark:text-white underline underline-offset-2"
35
- >
36
- {msg("doClickHere")}
37
- </a>{" "}
38
- {msg("emailLinkIdp3")}
39
- </p>
40
-
41
- <p className="leading-relaxed">
42
- {msg("emailLinkIdp4")}{" "}
43
- <a
44
- href={kcContext.url.loginAction}
45
- className="inline-flex items-center gap-1 text-primary dark:text-white underline underline-offset-2"
46
- >
47
- {msg("doClickHere")}
48
- </a>{" "}
49
- {msg("emailLinkIdp5")}
50
- </p>
51
- </div>
52
- </Template>
53
- );
54
- }
1
+ import { Alert, AlertDescription } from "@/components/ui/alert";
2
+ import { useI18n } from '@/login/i18n';
3
+ import { useKcContext } from '@/login/KcContext';
4
+ import { assert } from 'tsafe/assert';
5
+ import { Template } from "../../components/Template";
6
+
7
+ export function Page() {
8
+
9
+ const { kcContext } = useKcContext();
10
+ assert(kcContext.pageId === "login-idp-link-email.ftl");
11
+
12
+ const { msg } = useI18n();
13
+
14
+ return (
15
+ <Template
16
+ headerNode={msg("emailLinkIdpTitle", kcContext.idpAlias)}
17
+ >
18
+ <Alert id="instruction1" variant="info" className="my-3">
19
+ <AlertDescription>
20
+ {msg(
21
+ "emailLinkIdp1",
22
+ kcContext.idpAlias,
23
+ kcContext.brokerContext.username,
24
+ kcContext.realm.displayName
25
+ )}
26
+ </AlertDescription>
27
+ </Alert>
28
+
29
+ <div className="space-y-2 text-sm text-muted-foreground">
30
+ <p className="leading-relaxed">
31
+ {msg("emailLinkIdp2")}{" "}
32
+ <a
33
+ href={kcContext.url.loginAction}
34
+ className="inline-flex items-center gap-1 text-primary dark:text-white underline underline-offset-2"
35
+ >
36
+ {msg("doClickHere")}
37
+ </a>{" "}
38
+ {msg("emailLinkIdp3")}
39
+ </p>
40
+
41
+ <p className="leading-relaxed">
42
+ {msg("emailLinkIdp4")}{" "}
43
+ <a
44
+ href={kcContext.url.loginAction}
45
+ className="inline-flex items-center gap-1 text-primary dark:text-white underline underline-offset-2"
46
+ >
47
+ {msg("doClickHere")}
48
+ </a>{" "}
49
+ {msg("emailLinkIdp5")}
50
+ </p>
51
+ </div>
52
+ </Template>
53
+ );
54
+ }
@@ -1,3 +1,3 @@
1
- import { Page } from "./Page";
2
-
3
- export default Page;
1
+ import { Page } from "./Page";
2
+
3
+ export default Page;
@@ -40,31 +40,29 @@ type Story = StoryObj<typeof meta>;
40
40
  * - Key Aspect: Ensures the component works with a realistic `logoUri` and client name.
41
41
  */
42
42
  export const Default: Story = {
43
- render: () => <KcPageStory kcContext={mockKcContext} />
43
+ args: {
44
+ kcContext: mockKcContext
45
+ }
44
46
  };
45
47
 
46
48
  export const Arabic: Story = {
47
- render: () => (
48
- <KcPageStory
49
- kcContext={{
50
- locale: {
51
- currentLanguageTag: "ar",
52
- rtl: true
53
- }
54
- }}
55
- />
56
- )
49
+ args: {
50
+ kcContext: {
51
+ locale: {
52
+ currentLanguageTag: "ar",
53
+ rtl: true
54
+ }
55
+ }
56
+ }
57
57
  };
58
58
  export const French: Story = {
59
- render: () => (
60
- <KcPageStory
61
- kcContext={{
62
- locale: {
63
- currentLanguageTag: "fr"
64
- }
65
- }}
66
- />
67
- )
59
+ args: {
60
+ kcContext: {
61
+ locale: {
62
+ currentLanguageTag: "fr"
63
+ }
64
+ }
65
+ }
68
66
  };
69
67
 
70
68
  /**
@@ -74,17 +72,15 @@ export const French: Story = {
74
72
  * - Key Aspect: Ensures the component renders correctly when there are no requested scopes.
75
73
  */
76
74
  export const WithoutScopes: Story = {
77
- render: () => (
78
- <KcPageStory
79
- kcContext={{
80
- ...mockKcContext,
81
- oauth: {
82
- ...mockKcContext.oauth,
83
- clientScopesRequested: []
84
- }
85
- }}
86
- />
87
- )
75
+ args: {
76
+ kcContext: {
77
+ ...mockKcContext,
78
+ oauth: {
79
+ ...mockKcContext.oauth,
80
+ clientScopesRequested: []
81
+ }
82
+ }
83
+ }
88
84
  };
89
85
 
90
86
  /**
@@ -94,18 +90,16 @@ export const WithoutScopes: Story = {
94
90
  * - Key Aspect: Ensures that the component can display error messages when form submission fails.
95
91
  */
96
92
  export const WithFormSubmissionError: Story = {
97
- render: () => (
98
- <KcPageStory
99
- kcContext={{
100
- ...mockKcContext,
101
- url: {
102
- oauthAction: "/error"
103
- },
104
- message: {
105
- type: "error",
106
- summary: "An error occurred during form submission."
107
- }
108
- }}
109
- />
110
- )
93
+ args: {
94
+ kcContext: {
95
+ ...mockKcContext,
96
+ url: {
97
+ oauthAction: "/error"
98
+ },
99
+ message: {
100
+ type: "error",
101
+ summary: "An error occurred during form submission."
102
+ }
103
+ }
104
+ }
111
105
  };