@oussemasahbeni/keycloakify-login-shadcn 250004.0.3 → 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 (169) hide show
  1. package/keycloak-theme/login/KcContext.ts +23 -23
  2. package/keycloak-theme/login/KcPage.tsx +47 -47
  3. package/keycloak-theme/login/assets/img/auth-logo.svg +100 -100
  4. package/keycloak-theme/login/assets/img/shape.svg +71 -71
  5. package/keycloak-theme/login/components/LogoutOtherSessions.tsx +26 -26
  6. package/keycloak-theme/login/components/PasswordWrapper.tsx +35 -35
  7. package/keycloak-theme/login/components/Template/Template.tsx +227 -227
  8. package/keycloak-theme/login/components/Template/index.ts +1 -1
  9. package/keycloak-theme/login/components/Template/useInitializeTemplate.ts +61 -61
  10. package/keycloak-theme/login/components/UserProfileFormFields/AddRemoveButtonsMultiValuedAttribute.tsx +61 -61
  11. package/keycloak-theme/login/components/UserProfileFormFields/DO_MAKE_USER_CONFIRM_PASSWORD.ts +2 -2
  12. package/keycloak-theme/login/components/UserProfileFormFields/FieldErrors.tsx +28 -28
  13. package/keycloak-theme/login/components/UserProfileFormFields/GroupLabel.tsx +70 -70
  14. package/keycloak-theme/login/components/UserProfileFormFields/InputFieldByType.tsx +58 -58
  15. package/keycloak-theme/login/components/UserProfileFormFields/InputTag.tsx +116 -116
  16. package/keycloak-theme/login/components/UserProfileFormFields/InputTagSelects.tsx +135 -135
  17. package/keycloak-theme/login/components/UserProfileFormFields/SelectTag.tsx +114 -114
  18. package/keycloak-theme/login/components/UserProfileFormFields/TextareaTag.tsx +42 -42
  19. package/keycloak-theme/login/components/UserProfileFormFields/UserProfileFormFields.tsx +127 -127
  20. package/keycloak-theme/login/components/UserProfileFormFields/index.ts +1 -1
  21. package/keycloak-theme/login/i18n.ts +47 -47
  22. package/keycloak-theme/login/mocks/getKcContextMock.ts +22 -22
  23. package/keycloak-theme/login/pages/PageIndex.tsx +134 -134
  24. package/keycloak-theme/login/pages/code/Page.stories.tsx +54 -66
  25. package/keycloak-theme/login/pages/code/Page.tsx +89 -89
  26. package/keycloak-theme/login/pages/code/index.ts +3 -3
  27. package/keycloak-theme/login/pages/delete-account-confirm/Page.stories.tsx +39 -46
  28. package/keycloak-theme/login/pages/delete-account-confirm/Page.tsx +63 -63
  29. package/keycloak-theme/login/pages/delete-account-confirm/index.ts +3 -3
  30. package/keycloak-theme/login/pages/delete-credential/Page.stories.tsx +26 -30
  31. package/keycloak-theme/login/pages/delete-credential/Page.tsx +51 -51
  32. package/keycloak-theme/login/pages/delete-credential/index.ts +3 -3
  33. package/keycloak-theme/login/pages/error/Page.stories.tsx +47 -58
  34. package/keycloak-theme/login/pages/error/Page.tsx +42 -42
  35. package/keycloak-theme/login/pages/error/index.ts +3 -3
  36. package/keycloak-theme/login/pages/frontchannel-logout/Page.stories.tsx +25 -32
  37. package/keycloak-theme/login/pages/frontchannel-logout/Page.tsx +84 -84
  38. package/keycloak-theme/login/pages/frontchannel-logout/index.ts +3 -3
  39. package/keycloak-theme/login/pages/idp-review-user-profile/Page.stories.tsx +46 -58
  40. package/keycloak-theme/login/pages/idp-review-user-profile/Page.tsx +52 -52
  41. package/keycloak-theme/login/pages/idp-review-user-profile/index.ts +3 -3
  42. package/keycloak-theme/login/pages/info/Page.stories.tsx +50 -60
  43. package/keycloak-theme/login/pages/info/Page.tsx +92 -92
  44. package/keycloak-theme/login/pages/link-idp-action/Page.stories.tsx +32 -16
  45. package/keycloak-theme/login/pages/link-idp-action/Page.tsx +43 -43
  46. package/keycloak-theme/login/pages/link-idp-action/index.ts +3 -3
  47. package/keycloak-theme/login/pages/login/Form.tsx +242 -242
  48. package/keycloak-theme/login/pages/login/Info.tsx +29 -29
  49. package/keycloak-theme/login/pages/login/Page.stories.tsx +345 -365
  50. package/keycloak-theme/login/pages/login/Page.tsx +44 -44
  51. package/keycloak-theme/login/pages/login/SocialProviders.tsx +107 -107
  52. package/keycloak-theme/login/pages/login/index.ts +3 -3
  53. package/keycloak-theme/login/pages/login/providers/apple.svg +3 -3
  54. package/keycloak-theme/login/pages/login/providers/bitbucket.svg +11 -11
  55. package/keycloak-theme/login/pages/login/providers/discord.svg +4 -4
  56. package/keycloak-theme/login/pages/login/providers/facebook.svg +5 -5
  57. package/keycloak-theme/login/pages/login/providers/github.svg +3 -3
  58. package/keycloak-theme/login/pages/login/providers/gitlab.svg +7 -7
  59. package/keycloak-theme/login/pages/login/providers/google.svg +7 -7
  60. package/keycloak-theme/login/pages/login/providers/instagram.svg +31 -31
  61. package/keycloak-theme/login/pages/login/providers/linkedin.svg +3 -3
  62. package/keycloak-theme/login/pages/login/providers/microsoft.svg +6 -6
  63. package/keycloak-theme/login/pages/login/providers/oidc.svg +5 -5
  64. package/keycloak-theme/login/pages/login/providers/openshift.svg +7 -7
  65. package/keycloak-theme/login/pages/login/providers/paypal.svg +6 -6
  66. package/keycloak-theme/login/pages/login/providers/slack.svg +11 -11
  67. package/keycloak-theme/login/pages/login/providers/stackoverflow.svg +5 -5
  68. package/keycloak-theme/login/pages/login/providers/x.svg +3 -3
  69. package/keycloak-theme/login/pages/login/useProviderLogos.tsx +39 -39
  70. package/keycloak-theme/login/pages/login/useScript.tsx +62 -62
  71. package/keycloak-theme/login/pages/login-config-totp/Page.stories.tsx +45 -59
  72. package/keycloak-theme/login/pages/login-config-totp/Page.tsx +240 -240
  73. package/keycloak-theme/login/pages/login-config-totp/index.ts +3 -3
  74. package/keycloak-theme/login/pages/login-idp-link-confirm/Page.stories.tsx +30 -34
  75. package/keycloak-theme/login/pages/login-idp-link-confirm/Page.tsx +43 -43
  76. package/keycloak-theme/login/pages/login-idp-link-confirm/index.ts +3 -3
  77. package/keycloak-theme/login/pages/login-idp-link-confirm-override/Page.stories.tsx +16 -22
  78. package/keycloak-theme/login/pages/login-idp-link-confirm-override/Page.tsx +47 -47
  79. package/keycloak-theme/login/pages/login-idp-link-confirm-override/index.ts +3 -3
  80. package/keycloak-theme/login/pages/login-idp-link-email/Page.stories.tsx +54 -62
  81. package/keycloak-theme/login/pages/login-idp-link-email/Page.tsx +54 -54
  82. package/keycloak-theme/login/pages/login-idp-link-email/index.ts +3 -3
  83. package/keycloak-theme/login/pages/login-oauth-grant/Page.stories.tsx +39 -45
  84. package/keycloak-theme/login/pages/login-oauth-grant/Page.tsx +126 -126
  85. package/keycloak-theme/login/pages/login-oauth-grant/index.ts +3 -3
  86. package/keycloak-theme/login/pages/login-oauth2-device-verify-user-code/Page.stories.tsx +38 -48
  87. package/keycloak-theme/login/pages/login-oauth2-device-verify-user-code/Page.tsx +58 -58
  88. package/keycloak-theme/login/pages/login-oauth2-device-verify-user-code/index.ts +3 -3
  89. package/keycloak-theme/login/pages/login-otp/Page.stories.tsx +82 -96
  90. package/keycloak-theme/login/pages/login-otp/Page.tsx +108 -108
  91. package/keycloak-theme/login/pages/login-otp/index.ts +3 -3
  92. package/keycloak-theme/login/pages/login-page-expired/Page.stories.tsx +28 -36
  93. package/keycloak-theme/login/pages/login-page-expired/Page.tsx +47 -47
  94. package/keycloak-theme/login/pages/login-page-expired/index.ts +3 -3
  95. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/Page.stories.tsx +20 -0
  96. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/Page.tsx +233 -233
  97. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/index.ts +3 -3
  98. package/keycloak-theme/login/pages/login-passkeys-conditional-authenticate/useScript.tsx +63 -63
  99. package/keycloak-theme/login/pages/login-password/Page.stories.tsx +55 -56
  100. package/keycloak-theme/login/pages/login-password/Page.tsx +149 -149
  101. package/keycloak-theme/login/pages/login-password/index.ts +3 -3
  102. package/keycloak-theme/login/pages/login-password/useScript.tsx +63 -63
  103. package/keycloak-theme/login/pages/login-recovery-authn-code-config/Page.stories.tsx +28 -36
  104. package/keycloak-theme/login/pages/login-recovery-authn-code-config/Page.tsx +181 -181
  105. package/keycloak-theme/login/pages/login-recovery-authn-code-config/index.ts +3 -3
  106. package/keycloak-theme/login/pages/login-recovery-authn-code-config/useScript.tsx +145 -145
  107. package/keycloak-theme/login/pages/login-recovery-authn-code-input/Page.stories.tsx +16 -22
  108. package/keycloak-theme/login/pages/login-recovery-authn-code-input/Page.tsx +70 -70
  109. package/keycloak-theme/login/pages/login-recovery-authn-code-input/index.ts +3 -3
  110. package/keycloak-theme/login/pages/login-reset-otp/Page.stories.tsx +62 -74
  111. package/keycloak-theme/login/pages/login-reset-otp/Page.tsx +86 -86
  112. package/keycloak-theme/login/pages/login-reset-otp/index.ts +3 -3
  113. package/keycloak-theme/login/pages/login-reset-password/Form.tsx +68 -68
  114. package/keycloak-theme/login/pages/login-reset-password/Page.stories.tsx +44 -54
  115. package/keycloak-theme/login/pages/login-reset-password/Page.tsx +27 -27
  116. package/keycloak-theme/login/pages/login-reset-password/index.ts +3 -3
  117. package/keycloak-theme/login/pages/login-update-password/Page.stories.tsx +40 -50
  118. package/keycloak-theme/login/pages/login-update-password/Page.tsx +111 -111
  119. package/keycloak-theme/login/pages/login-update-password/index.ts +3 -3
  120. package/keycloak-theme/login/pages/login-update-profile/Page.stories.tsx +28 -36
  121. package/keycloak-theme/login/pages/login-update-profile/Page.tsx +68 -68
  122. package/keycloak-theme/login/pages/login-update-profile/index.ts +3 -3
  123. package/keycloak-theme/login/pages/login-username/Page.stories.tsx +32 -42
  124. package/keycloak-theme/login/pages/login-username/Page.tsx +246 -246
  125. package/keycloak-theme/login/pages/login-username/index.ts +3 -3
  126. package/keycloak-theme/login/pages/login-username/useScript.tsx +62 -62
  127. package/keycloak-theme/login/pages/login-verify-email/Page.stories.tsx +68 -80
  128. package/keycloak-theme/login/pages/login-verify-email/Page.tsx +38 -38
  129. package/keycloak-theme/login/pages/login-verify-email/index.ts +3 -3
  130. package/keycloak-theme/login/pages/login-x509-info/Page.stories.tsx +29 -37
  131. package/keycloak-theme/login/pages/login-x509-info/Page.tsx +75 -75
  132. package/keycloak-theme/login/pages/login-x509-info/index.ts +3 -3
  133. package/keycloak-theme/login/pages/logout-confirm/Page.stories.tsx +34 -42
  134. package/keycloak-theme/login/pages/logout-confirm/Page.tsx +53 -53
  135. package/keycloak-theme/login/pages/logout-confirm/index.ts +3 -3
  136. package/keycloak-theme/login/pages/register/Form.tsx +106 -106
  137. package/keycloak-theme/login/pages/register/Page.stories.tsx +23 -6
  138. package/keycloak-theme/login/pages/register/Page.tsx +26 -26
  139. package/keycloak-theme/login/pages/register/TermsAcceptance.tsx +56 -56
  140. package/keycloak-theme/login/pages/register/index.ts +3 -3
  141. package/keycloak-theme/login/pages/saml-post-form/Page.stories.tsx +16 -22
  142. package/keycloak-theme/login/pages/saml-post-form/Page.tsx +66 -66
  143. package/keycloak-theme/login/pages/saml-post-form/index.ts +3 -3
  144. package/keycloak-theme/login/pages/select-authenticator/Page.stories.tsx +83 -95
  145. package/keycloak-theme/login/pages/select-authenticator/Page.tsx +100 -100
  146. package/keycloak-theme/login/pages/select-authenticator/index.ts +3 -3
  147. package/keycloak-theme/login/pages/select-organization/Page.stories.tsx +62 -49
  148. package/keycloak-theme/login/pages/select-organization/Page.tsx +126 -126
  149. package/keycloak-theme/login/pages/select-organization/index.ts +3 -3
  150. package/keycloak-theme/login/pages/terms/Page.stories.tsx +15 -0
  151. package/keycloak-theme/login/pages/terms/Page.tsx +51 -51
  152. package/keycloak-theme/login/pages/terms/index.ts +3 -3
  153. package/keycloak-theme/login/pages/update-email/Page.stories.tsx +27 -35
  154. package/keycloak-theme/login/pages/update-email/Page.tsx +62 -62
  155. package/keycloak-theme/login/pages/update-email/index.ts +3 -3
  156. package/keycloak-theme/login/pages/webauthn-authenticate/Page.stories.tsx +112 -126
  157. package/keycloak-theme/login/pages/webauthn-authenticate/Page.tsx +202 -202
  158. package/keycloak-theme/login/pages/webauthn-authenticate/index.ts +3 -3
  159. package/keycloak-theme/login/pages/webauthn-authenticate/useScript.tsx +55 -55
  160. package/keycloak-theme/login/pages/webauthn-error/Page.stories.tsx +54 -66
  161. package/keycloak-theme/login/pages/webauthn-error/Page.tsx +73 -73
  162. package/keycloak-theme/login/pages/webauthn-error/index.ts +3 -3
  163. package/keycloak-theme/login/pages/webauthn-register/Page.stories.tsx +39 -49
  164. package/keycloak-theme/login/pages/webauthn-register/Page.tsx +78 -78
  165. package/keycloak-theme/login/pages/webauthn-register/index.ts +3 -3
  166. package/keycloak-theme/login/pages/webauthn-register/useScript.tsx +62 -62
  167. package/keycloak-theme/login/shared/getColorScheme.ts +45 -45
  168. package/keycloak-theme/login/styleLevelCustomization.tsx +35 -35
  169. package/package.json +5 -1
@@ -1,126 +1,126 @@
1
- import { Button } from "@/components/ui/button";
2
- import { CardDescription } from "@/components/ui/card";
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-oauth-grant.ftl");
11
-
12
- const { msg, msgStr, advancedMsg, advancedMsgStr } = useI18n();
13
-
14
-
15
- return (
16
- <Template
17
- bodyClassName="oauth"
18
- headerNode={
19
- <div className="flex flex-col items-center space-y-3">
20
- {kcContext.client.attributes.logoUri && (
21
- <img
22
- src={kcContext.client.attributes.logoUri}
23
- alt="Client logo"
24
- className="h-12 w-auto object-contain"
25
- />
26
- )}
27
- <p className="text-lg font-medium text-center">
28
- {kcContext.client.name
29
- ? msg("oauthGrantTitle", advancedMsgStr(kcContext.client.name))
30
- : msg("oauthGrantTitle", kcContext.client.clientId)}
31
- </p>
32
- </div>
33
- }
34
- >
35
- <div className="space-y-6">
36
- <div className="text-base">{msg("oauthGrantRequest")}</div>
37
-
38
- <div className="space-y-4">
39
- <div className="space-y-2">
40
- {kcContext.oauth.clientScopesRequested.map(clientScope => (
41
- <div
42
- key={clientScope.consentScreenText}
43
- className="flex items-start space-x-2"
44
- >
45
- <div className="w-2 h-2 bg-primary rounded-full mt-2 shrink-0" />
46
- <span className="text-sm text-muted-foreground">
47
- {advancedMsg(clientScope.consentScreenText)}
48
- {clientScope.dynamicScopeParameter && (
49
- <>
50
- :{" "}
51
- <span className="font-medium text-foreground">
52
- {clientScope.dynamicScopeParameter}
53
- </span>
54
- </>
55
- )}
56
- </span>
57
- </div>
58
- ))}
59
- </div>
60
-
61
- {(kcContext.client.attributes.policyUri || kcContext.client.attributes.tosUri) && (
62
- <>
63
- <div className="space-y-2">
64
- <CardDescription className="text-xs">
65
- {kcContext.client.name
66
- ? msg(
67
- "oauthGrantInformation",
68
- advancedMsgStr(kcContext.client.name)
69
- )
70
- : msg("oauthGrantInformation", kcContext.client.clientId)}
71
- </CardDescription>
72
- <div className="flex flex-wrap gap-2 text-xs">
73
- {kcContext.client.attributes.tosUri && (
74
- <a
75
- href={kcContext.client.attributes.tosUri}
76
- target="_blank"
77
- rel="noopener noreferrer"
78
- className="text-primary dark:text-white hover:text-primary/80 underline underline-offset-4"
79
- >
80
- {msg("oauthGrantTos")}
81
- </a>
82
- )}
83
- {kcContext.client.attributes.policyUri && (
84
- <a
85
- href={kcContext.client.attributes.policyUri}
86
- target="_blank"
87
- rel="noopener noreferrer"
88
- className="text-primary dark:text-white hover:text-primary/80 underline underline-offset-4"
89
- >
90
- {msg("oauthGrantPolicy")}
91
- </a>
92
- )}
93
- </div>
94
- </div>
95
- </>
96
- )}
97
- </div>
98
-
99
- <div>
100
- <form className="w-full" action={kcContext.url.oauthAction} method="POST">
101
- <input type="hidden" name="code" value={kcContext.oauth.code} />
102
- <div className="flex flex-col sm:flex-row gap-3 w-full">
103
- <Button
104
- type="submit"
105
- name="cancel"
106
- id="kc-cancel"
107
- variant="outline"
108
- className="flex-1"
109
- >
110
- {msgStr("doNo")}
111
- </Button>
112
- <Button
113
- type="submit"
114
- name="accept"
115
- id="kc-login"
116
- className="flex-1"
117
- >
118
- {msgStr("doYes")}
119
- </Button>
120
- </div>
121
- </form>
122
- </div>
123
- </div>
124
- </Template>
125
- );
126
- }
1
+ import { Button } from "@/components/ui/button";
2
+ import { CardDescription } from "@/components/ui/card";
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-oauth-grant.ftl");
11
+
12
+ const { msg, msgStr, advancedMsg, advancedMsgStr } = useI18n();
13
+
14
+
15
+ return (
16
+ <Template
17
+ bodyClassName="oauth"
18
+ headerNode={
19
+ <div className="flex flex-col items-center space-y-3">
20
+ {kcContext.client.attributes.logoUri && (
21
+ <img
22
+ src={kcContext.client.attributes.logoUri}
23
+ alt="Client logo"
24
+ className="h-12 w-auto object-contain"
25
+ />
26
+ )}
27
+ <p className="text-lg font-medium text-center">
28
+ {kcContext.client.name
29
+ ? msg("oauthGrantTitle", advancedMsgStr(kcContext.client.name))
30
+ : msg("oauthGrantTitle", kcContext.client.clientId)}
31
+ </p>
32
+ </div>
33
+ }
34
+ >
35
+ <div className="space-y-6">
36
+ <div className="text-base">{msg("oauthGrantRequest")}</div>
37
+
38
+ <div className="space-y-4">
39
+ <div className="space-y-2">
40
+ {kcContext.oauth.clientScopesRequested.map(clientScope => (
41
+ <div
42
+ key={clientScope.consentScreenText}
43
+ className="flex items-start space-x-2"
44
+ >
45
+ <div className="w-2 h-2 bg-primary rounded-full mt-2 shrink-0" />
46
+ <span className="text-sm text-muted-foreground">
47
+ {advancedMsg(clientScope.consentScreenText)}
48
+ {clientScope.dynamicScopeParameter && (
49
+ <>
50
+ :{" "}
51
+ <span className="font-medium text-foreground">
52
+ {clientScope.dynamicScopeParameter}
53
+ </span>
54
+ </>
55
+ )}
56
+ </span>
57
+ </div>
58
+ ))}
59
+ </div>
60
+
61
+ {(kcContext.client.attributes.policyUri || kcContext.client.attributes.tosUri) && (
62
+ <>
63
+ <div className="space-y-2">
64
+ <CardDescription className="text-xs">
65
+ {kcContext.client.name
66
+ ? msg(
67
+ "oauthGrantInformation",
68
+ advancedMsgStr(kcContext.client.name)
69
+ )
70
+ : msg("oauthGrantInformation", kcContext.client.clientId)}
71
+ </CardDescription>
72
+ <div className="flex flex-wrap gap-2 text-xs">
73
+ {kcContext.client.attributes.tosUri && (
74
+ <a
75
+ href={kcContext.client.attributes.tosUri}
76
+ target="_blank"
77
+ rel="noopener noreferrer"
78
+ className="text-primary dark:text-white hover:text-primary/80 underline underline-offset-4"
79
+ >
80
+ {msg("oauthGrantTos")}
81
+ </a>
82
+ )}
83
+ {kcContext.client.attributes.policyUri && (
84
+ <a
85
+ href={kcContext.client.attributes.policyUri}
86
+ target="_blank"
87
+ rel="noopener noreferrer"
88
+ className="text-primary dark:text-white hover:text-primary/80 underline underline-offset-4"
89
+ >
90
+ {msg("oauthGrantPolicy")}
91
+ </a>
92
+ )}
93
+ </div>
94
+ </div>
95
+ </>
96
+ )}
97
+ </div>
98
+
99
+ <div>
100
+ <form className="w-full" action={kcContext.url.oauthAction} method="POST">
101
+ <input type="hidden" name="code" value={kcContext.oauth.code} />
102
+ <div className="flex flex-col sm:flex-row gap-3 w-full">
103
+ <Button
104
+ type="submit"
105
+ name="cancel"
106
+ id="kc-cancel"
107
+ variant="outline"
108
+ className="flex-1"
109
+ >
110
+ {msgStr("doNo")}
111
+ </Button>
112
+ <Button
113
+ type="submit"
114
+ name="accept"
115
+ id="kc-login"
116
+ className="flex-1"
117
+ >
118
+ {msgStr("doYes")}
119
+ </Button>
120
+ </div>
121
+ </form>
122
+ </div>
123
+ </div>
124
+ </Template>
125
+ );
126
+ }
@@ -1,3 +1,3 @@
1
- import { Page } from "./Page";
2
-
3
- export default Page;
1
+ import { Page } from "./Page";
2
+
3
+ export default Page;
@@ -13,32 +13,26 @@ export default meta;
13
13
 
14
14
  type Story = StoryObj<typeof meta>;
15
15
 
16
- export const Default: Story = {
17
- render: () => <KcPageStory />
18
- };
16
+ export const Default: Story = {};
19
17
 
20
18
  export const Arabic: Story = {
21
- render: () => (
22
- <KcPageStory
23
- kcContext={{
24
- locale: {
25
- currentLanguageTag: "ar",
26
- rtl: true
27
- }
28
- }}
29
- />
30
- )
19
+ args: {
20
+ kcContext: {
21
+ locale: {
22
+ currentLanguageTag: "ar",
23
+ rtl: true
24
+ }
25
+ }
26
+ }
31
27
  };
32
28
  export const French: Story = {
33
- render: () => (
34
- <KcPageStory
35
- kcContext={{
36
- locale: {
37
- currentLanguageTag: "fr"
38
- }
39
- }}
40
- />
41
- )
29
+ args: {
30
+ kcContext: {
31
+ locale: {
32
+ currentLanguageTag: "fr"
33
+ }
34
+ }
35
+ }
42
36
  };
43
37
 
44
38
  /**
@@ -48,19 +42,17 @@ export const French: Story = {
48
42
  * - Key Aspect: Ensures the error message is properly shown when the user enters an invalid code.
49
43
  */
50
44
  export const WithErrorMessage: Story = {
51
- render: () => (
52
- <KcPageStory
53
- kcContext={{
54
- url: {
55
- oauth2DeviceVerificationAction: "/mock-oauth2-device-verification"
56
- },
57
- message: {
58
- summary: "The user code you entered is invalid. Please try again.",
59
- type: "error"
60
- }
61
- }}
62
- />
63
- )
45
+ args: {
46
+ kcContext: {
47
+ url: {
48
+ oauth2DeviceVerificationAction: "/mock-oauth2-device-verification"
49
+ },
50
+ message: {
51
+ summary: "The user code you entered is invalid. Please try again.",
52
+ type: "error"
53
+ }
54
+ }
55
+ }
64
56
  };
65
57
 
66
58
  /**
@@ -70,17 +62,15 @@ export const WithErrorMessage: Story = {
70
62
  * - Key Aspect: Ensures the form displays validation errors when the field is left empty.
71
63
  */
72
64
  export const WithEmptyInputField: Story = {
73
- render: () => (
74
- <KcPageStory
75
- kcContext={{
76
- url: {
77
- oauth2DeviceVerificationAction: "/mock-oauth2-device-verification"
78
- },
79
- message: {
80
- summary: "User code cannot be empty. Please enter a valid code.",
81
- type: "error"
82
- }
83
- }}
84
- />
85
- )
65
+ args: {
66
+ kcContext: {
67
+ url: {
68
+ oauth2DeviceVerificationAction: "/mock-oauth2-device-verification"
69
+ },
70
+ message: {
71
+ summary: "User code cannot be empty. Please enter a valid code.",
72
+ type: "error"
73
+ }
74
+ }
75
+ }
86
76
  };
@@ -1,58 +1,58 @@
1
- import { Button } from "@/components/ui/button";
2
- import { Field, FieldLabel } from "@/components/ui/field";
3
- import { Input } from "@/components/ui/input";
4
- import { useI18n } from '@/login/i18n';
5
- import { useKcContext } from '@/login/KcContext';
6
- import { useKcClsx } from '@keycloakify/login-ui/useKcClsx';
7
- import { assert } from 'tsafe/assert';
8
- import { Template } from "../../components/Template";
9
-
10
- export function Page() {
11
- const { kcContext } = useKcContext();
12
- assert(kcContext.pageId === "login-oauth2-device-verify-user-code.ftl");
13
-
14
- const { msg, msgStr } = useI18n();
15
-
16
- const { kcClsx } = useKcClsx();
17
-
18
- return (
19
- <Template
20
- headerNode={msg("oauth2DeviceVerificationTitle")}
21
- >
22
- <form
23
- id="kc-user-verify-device-user-code-form"
24
- className="space-y-5"
25
- action={kcContext.url.oauth2DeviceVerificationAction}
26
- method="post"
27
- >
28
- <Field>
29
- <FieldLabel htmlFor="device-user-code">
30
- {msg("verifyOAuth2DeviceUserCode")}
31
- </FieldLabel>
32
- <Input
33
- id="device-user-code"
34
- name="device_user_code"
35
- autoComplete="off"
36
- type="text"
37
- className={kcClsx("kcInputClass")}
38
- autoFocus
39
- />
40
- </Field>
41
-
42
- <div className={kcClsx("kcFormGroupClass")}>
43
- <div id="kc-form-options" className={kcClsx("kcFormOptionsClass")}>
44
- <div className={kcClsx("kcFormOptionsWrapperClass")}></div>
45
- </div>
46
-
47
- <div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
48
- <div className={kcClsx("kcFormButtonsWrapperClass")}>
49
- <Button className="w-full" type="submit">
50
- {msgStr("doSubmit")}
51
- </Button>
52
- </div>
53
- </div>
54
- </div>
55
- </form>
56
- </Template>
57
- );
58
- }
1
+ import { Button } from "@/components/ui/button";
2
+ import { Field, FieldLabel } from "@/components/ui/field";
3
+ import { Input } from "@/components/ui/input";
4
+ import { useI18n } from '@/login/i18n';
5
+ import { useKcContext } from '@/login/KcContext';
6
+ import { useKcClsx } from '@keycloakify/login-ui/useKcClsx';
7
+ import { assert } from 'tsafe/assert';
8
+ import { Template } from "../../components/Template";
9
+
10
+ export function Page() {
11
+ const { kcContext } = useKcContext();
12
+ assert(kcContext.pageId === "login-oauth2-device-verify-user-code.ftl");
13
+
14
+ const { msg, msgStr } = useI18n();
15
+
16
+ const { kcClsx } = useKcClsx();
17
+
18
+ return (
19
+ <Template
20
+ headerNode={msg("oauth2DeviceVerificationTitle")}
21
+ >
22
+ <form
23
+ id="kc-user-verify-device-user-code-form"
24
+ className="space-y-5"
25
+ action={kcContext.url.oauth2DeviceVerificationAction}
26
+ method="post"
27
+ >
28
+ <Field>
29
+ <FieldLabel htmlFor="device-user-code">
30
+ {msg("verifyOAuth2DeviceUserCode")}
31
+ </FieldLabel>
32
+ <Input
33
+ id="device-user-code"
34
+ name="device_user_code"
35
+ autoComplete="off"
36
+ type="text"
37
+ className={kcClsx("kcInputClass")}
38
+ autoFocus
39
+ />
40
+ </Field>
41
+
42
+ <div className={kcClsx("kcFormGroupClass")}>
43
+ <div id="kc-form-options" className={kcClsx("kcFormOptionsClass")}>
44
+ <div className={kcClsx("kcFormOptionsWrapperClass")}></div>
45
+ </div>
46
+
47
+ <div id="kc-form-buttons" className={kcClsx("kcFormButtonsClass")}>
48
+ <div className={kcClsx("kcFormButtonsWrapperClass")}>
49
+ <Button className="w-full" type="submit">
50
+ {msgStr("doSubmit")}
51
+ </Button>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </form>
56
+ </Template>
57
+ );
58
+ }
@@ -1,3 +1,3 @@
1
- import { Page } from "./Page";
2
-
3
- export default Page;
1
+ import { Page } from "./Page";
2
+
3
+ export default Page;