@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,43 +1,40 @@
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
+ export function Page() {
8
+ const { kcContext } = useKcContext();
9
+ assert(kcContext.pageId === "login-idp-link-confirm.ftl");
10
+
11
+ const { msg } = useI18n();
12
+
13
+ return (
14
+ <Template headerNode={msg("confirmLinkIdpTitle")}>
15
+ <form id="kc-register-form" action={kcContext.url.loginAction} method="post">
16
+ <div className="flex flex-col gap-4">
17
+ <Button
18
+ type="submit"
19
+ className="w-full"
20
+ variant="outline"
21
+ name="submitAction"
22
+ id="updateProfile"
23
+ value="updateProfile"
24
+ >
25
+ {msg("confirmLinkIdpReviewProfile")}
26
+ </Button>
27
+ <Button
28
+ type="submit"
29
+ className="w-full"
30
+ name="submitAction"
31
+ id="linkAccount"
32
+ value="linkAccount"
33
+ >
34
+ {msg("confirmLinkIdpContinue", kcContext.idpAlias)}
35
+ </Button>
36
+ </div>
37
+ </form>
38
+ </Template>
39
+ );
40
+ }
@@ -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({
5
4
  pageId: "login-idp-link-confirm-override.ftl"
6
5
  });
@@ -14,30 +13,24 @@ export default meta;
14
13
 
15
14
  type Story = StoryObj<typeof meta>;
16
15
 
17
- export const Default: Story = {
18
- render: () => <KcPageStory />
19
- };
16
+ export const Default: Story = {};
20
17
 
21
18
  export const Arabic: Story = {
22
- render: () => (
23
- <KcPageStory
24
- kcContext={{
25
- locale: {
26
- currentLanguageTag: "ar",
27
- rtl: true
28
- }
29
- }}
30
- />
31
- )
19
+ args: {
20
+ kcContext: {
21
+ locale: {
22
+ currentLanguageTag: "ar",
23
+ rtl: true
24
+ }
25
+ }
26
+ }
32
27
  };
33
28
  export const French: Story = {
34
- render: () => (
35
- <KcPageStory
36
- kcContext={{
37
- locale: {
38
- currentLanguageTag: "fr"
39
- }
40
- }}
41
- />
42
- )
29
+ args: {
30
+ kcContext: {
31
+ locale: {
32
+ currentLanguageTag: "fr"
33
+ }
34
+ }
35
+ }
43
36
  };
@@ -1,47 +1,44 @@
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
+ const { msg } = useI18n();
12
+
13
+ return (
14
+ <Template headerNode={msg("confirmOverrideIdpTitle")}>
15
+ <form
16
+ id="kc-register-form"
17
+ action={kcContext.url.loginAction}
18
+ className="flex flex-col gap-5"
19
+ method="post"
20
+ >
21
+ <span>
22
+ {msg("pageExpiredMsg1")}{" "}
23
+ <a
24
+ className="text-primary dark:text-white underline underline-offset-2"
25
+ id="loginRestartLink"
26
+ href={kcContext.url.loginRestartFlowUrl}
27
+ >
28
+ {msg("doClickHere")}
29
+ </a>
30
+ </span>
31
+
32
+ <Button
33
+ type="submit"
34
+ className="w-full"
35
+ name="submitAction"
36
+ id="confirmOverride"
37
+ value="confirmOverride"
38
+ >
39
+ {msg("confirmOverrideIdpContinue", kcContext.idpDisplayName)}
40
+ </Button>
41
+ </form>
42
+ </Template>
43
+ );
44
+ }
@@ -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
  // Mock kcContext to avoid TS2304 error and to simulate the real environment
5
4
  const mockKcContext = {
6
5
  url: {
@@ -33,31 +32,29 @@ type Story = StoryObj<typeof meta>;
33
32
  * - Key Aspect: Ensures the default behavior of the component with typical kcContext values.
34
33
  */
35
34
  export const Default: Story = {
36
- render: () => <KcPageStory kcContext={mockKcContext} />
35
+ args: {
36
+ kcContext: mockKcContext
37
+ }
37
38
  };
38
39
 
39
40
  export const Arabic: Story = {
40
- render: () => (
41
- <KcPageStory
42
- kcContext={{
43
- locale: {
44
- currentLanguageTag: "ar",
45
- rtl: true
46
- }
47
- }}
48
- />
49
- )
41
+ args: {
42
+ kcContext: {
43
+ locale: {
44
+ currentLanguageTag: "ar",
45
+ rtl: true
46
+ }
47
+ }
48
+ }
50
49
  };
51
50
  export const French: Story = {
52
- render: () => (
53
- <KcPageStory
54
- kcContext={{
55
- locale: {
56
- currentLanguageTag: "fr"
57
- }
58
- }}
59
- />
60
- )
51
+ args: {
52
+ kcContext: {
53
+ locale: {
54
+ currentLanguageTag: "fr"
55
+ }
56
+ }
57
+ }
61
58
  };
62
59
 
63
60
  /**
@@ -67,20 +64,18 @@ export const French: Story = {
67
64
  * - Key Aspect: Ensures the correct identity provider alias ("Google") and broker context (user info) are displayed in the email linking instructions.
68
65
  */
69
66
  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
- )
67
+ args: {
68
+ kcContext: {
69
+ ...mockKcContext,
70
+ idpAlias: "Google",
71
+ brokerContext: {
72
+ username: "john.doe"
73
+ },
74
+ realm: {
75
+ displayName: "MyRealm"
76
+ }
77
+ }
78
+ }
84
79
  };
85
80
 
86
81
  /**
@@ -90,20 +85,18 @@ export const WithIdpAlias: Story = {
90
85
  * - Key Aspect: Ensures that custom realm display names are rendered correctly alongside the idpAlias and broker context.
91
86
  */
92
87
  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
- )
88
+ args: {
89
+ kcContext: {
90
+ ...mockKcContext,
91
+ idpAlias: "Facebook",
92
+ brokerContext: {
93
+ username: "jane.doe"
94
+ },
95
+ realm: {
96
+ displayName: "CUSTOM REALM DISPLAY NAME"
97
+ }
98
+ }
99
+ }
107
100
  };
108
101
 
109
102
  /**
@@ -113,18 +106,16 @@ export const WithCustomRealmDisplayName: Story = {
113
106
  * - Key Aspect: Verifies that the component can display error messages during form submission failure, ensuring proper error handling.
114
107
  */
115
108
  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
- )
109
+ args: {
110
+ kcContext: {
111
+ ...mockKcContext,
112
+ url: {
113
+ loginAction: "/error"
114
+ },
115
+ message: {
116
+ type: "error",
117
+ summary: "An error occurred during form submission."
118
+ }
119
+ }
120
+ }
130
121
  };
@@ -1,54 +1,51 @@
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
+ const { kcContext } = useKcContext();
9
+ assert(kcContext.pageId === "login-idp-link-email.ftl");
10
+
11
+ const { msg } = useI18n();
12
+
13
+ return (
14
+ <Template headerNode={msg("emailLinkIdpTitle", kcContext.idpAlias)}>
15
+ <Alert id="instruction1" variant="info" className="my-3">
16
+ <AlertDescription>
17
+ {msg(
18
+ "emailLinkIdp1",
19
+ kcContext.idpAlias,
20
+ kcContext.brokerContext.username,
21
+ kcContext.realm.displayName
22
+ )}
23
+ </AlertDescription>
24
+ </Alert>
25
+
26
+ <div className="space-y-2 text-sm text-muted-foreground">
27
+ <p className="leading-relaxed">
28
+ {msg("emailLinkIdp2")}{" "}
29
+ <a
30
+ href={kcContext.url.loginAction}
31
+ className="inline-flex items-center gap-1 text-primary dark:text-white underline underline-offset-2"
32
+ >
33
+ {msg("doClickHere")}
34
+ </a>{" "}
35
+ {msg("emailLinkIdp3")}
36
+ </p>
37
+
38
+ <p className="leading-relaxed">
39
+ {msg("emailLinkIdp4")}{" "}
40
+ <a
41
+ href={kcContext.url.loginAction}
42
+ className="inline-flex items-center gap-1 text-primary dark:text-white underline underline-offset-2"
43
+ >
44
+ {msg("doClickHere")}
45
+ </a>{" "}
46
+ {msg("emailLinkIdp5")}
47
+ </p>
48
+ </div>
49
+ </Template>
50
+ );
51
+ }
@@ -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
  };