@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,89 +1,89 @@
1
- import { Alert, AlertDescription } from "@/components/ui/alert";
2
- import { Input } from "@/components/ui/input";
3
- import { kcSanitize } from "keycloakify/lib/kcSanitize";
4
-
5
- import { Button } from "@/components/ui/button";
6
-
7
- import { MdContentCopy } from "react-icons/md";
8
-
9
- import { useI18n } from '@/login/i18n';
10
- import { useKcContext } from '@/login/KcContext';
11
- import { useState } from 'react';
12
- import { MdCheck } from "react-icons/md";
13
- import { assert } from "tsafe/assert";
14
- import { Template } from "../../components/Template";
15
-
16
- export function Page() {
17
-
18
- const { kcContext } = useKcContext();
19
- assert(kcContext.pageId === "code.ftl");
20
-
21
- const [copied, setCopied] = useState(false);
22
-
23
- const { msg } = useI18n();
24
-
25
-
26
- const handleCopy = async () => {
27
- try {
28
- await navigator.clipboard.writeText(kcContext.code.code ?? "");
29
- setCopied(true);
30
- setTimeout(() => setCopied(false), 2000);
31
- } catch (err) {
32
- console.error("Failed to copy text: ", err);
33
- }
34
- };
35
-
36
- return (
37
- <Template
38
- headerNode={
39
- kcContext.code.success ? msg("codeSuccessTitle") : msg("codeErrorTitle", kcContext.code.error)
40
- }
41
- >
42
- <div id="kc-code">
43
- {kcContext.code.success ? (
44
- <>
45
- <Alert variant="success" className=" my-3">
46
- <AlertDescription>
47
- <span>{msg("copyCodeInstruction")}</span>
48
- </AlertDescription>
49
- </Alert>
50
- <div className="relative">
51
- <Input
52
- id="code"
53
- defaultValue={kcContext.code.code}
54
- readOnly
55
- className="font-mono"
56
- />
57
-
58
- <Button
59
- onClick={handleCopy}
60
- variant="secondary"
61
- size="icon"
62
- className="size-4 absolute end-2 top-1/2 transform -translate-y-1/2"
63
- >
64
- {copied ? (
65
- <MdCheck className="text-green-500" />
66
- ) : (
67
- <MdContentCopy />
68
- )}
69
- </Button>
70
- </div>
71
- </>
72
- ) : (
73
- kcContext.code.error && (
74
- <Alert variant="error" className="my-3">
75
- <AlertDescription>
76
- <p
77
- id="error"
78
- dangerouslySetInnerHTML={{
79
- __html: kcSanitize(kcContext.code.error)
80
- }}
81
- />
82
- </AlertDescription>
83
- </Alert>
84
- )
85
- )}
86
- </div>
87
- </Template>
88
- );
89
- }
1
+ import { Alert, AlertDescription } from "@/components/ui/alert";
2
+ import { Input } from "@/components/ui/input";
3
+ import { kcSanitize } from "keycloakify/lib/kcSanitize";
4
+
5
+ import { Button } from "@/components/ui/button";
6
+
7
+ import { MdContentCopy } from "react-icons/md";
8
+
9
+ import { useI18n } from '@/login/i18n';
10
+ import { useKcContext } from '@/login/KcContext';
11
+ import { useState } from 'react';
12
+ import { MdCheck } from "react-icons/md";
13
+ import { assert } from "tsafe/assert";
14
+ import { Template } from "../../components/Template";
15
+
16
+ export function Page() {
17
+
18
+ const { kcContext } = useKcContext();
19
+ assert(kcContext.pageId === "code.ftl");
20
+
21
+ const [copied, setCopied] = useState(false);
22
+
23
+ const { msg } = useI18n();
24
+
25
+
26
+ const handleCopy = async () => {
27
+ try {
28
+ await navigator.clipboard.writeText(kcContext.code.code ?? "");
29
+ setCopied(true);
30
+ setTimeout(() => setCopied(false), 2000);
31
+ } catch (err) {
32
+ console.error("Failed to copy text: ", err);
33
+ }
34
+ };
35
+
36
+ return (
37
+ <Template
38
+ headerNode={
39
+ kcContext.code.success ? msg("codeSuccessTitle") : msg("codeErrorTitle", kcContext.code.error)
40
+ }
41
+ >
42
+ <div id="kc-code">
43
+ {kcContext.code.success ? (
44
+ <>
45
+ <Alert variant="success" className=" my-3">
46
+ <AlertDescription>
47
+ <span>{msg("copyCodeInstruction")}</span>
48
+ </AlertDescription>
49
+ </Alert>
50
+ <div className="relative">
51
+ <Input
52
+ id="code"
53
+ defaultValue={kcContext.code.code}
54
+ readOnly
55
+ className="font-mono"
56
+ />
57
+
58
+ <Button
59
+ onClick={handleCopy}
60
+ variant="secondary"
61
+ size="icon"
62
+ className="size-4 absolute end-2 top-1/2 transform -translate-y-1/2"
63
+ >
64
+ {copied ? (
65
+ <MdCheck className="text-green-500" />
66
+ ) : (
67
+ <MdContentCopy />
68
+ )}
69
+ </Button>
70
+ </div>
71
+ </>
72
+ ) : (
73
+ kcContext.code.error && (
74
+ <Alert variant="error" className="my-3">
75
+ <AlertDescription>
76
+ <p
77
+ id="error"
78
+ dangerouslySetInnerHTML={{
79
+ __html: kcSanitize(kcContext.code.error)
80
+ }}
81
+ />
82
+ </AlertDescription>
83
+ </Alert>
84
+ )
85
+ )}
86
+ </div>
87
+ </Template>
88
+ );
89
+ }
@@ -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,3 +1,4 @@
1
+
1
2
  import { createKcPageStory, type Meta, type StoryObj } from "../../mocks/KcPageStory";
2
3
 
3
4
  const { KcPageStory } = createKcPageStory({ pageId: "delete-account-confirm.ftl" });
@@ -11,59 +12,51 @@ export default meta;
11
12
 
12
13
  type Story = StoryObj<typeof meta>;
13
14
 
14
- export const Default: Story = {
15
- render: () => <KcPageStory />
16
- };
15
+ export const Default: Story = {};
16
+
17
+
17
18
  export const Arabic: Story = {
18
- render: () => (
19
- <KcPageStory
20
- kcContext={{
21
- locale: {
22
- currentLanguageTag: "ar",
23
- rtl: true
24
- }
25
- }}
26
- />
27
- )
19
+ args: {
20
+ kcContext: {
21
+ locale: {
22
+ currentLanguageTag: "ar",
23
+ rtl: true
24
+ }
25
+ }
26
+ }
28
27
  };
29
28
  export const French: Story = {
30
- render: () => (
31
- <KcPageStory
32
- kcContext={{
33
- locale: {
34
- currentLanguageTag: "fr"
35
- }
36
- }}
37
- />
38
- )
29
+ args: {
30
+ kcContext: {
31
+ locale: {
32
+ currentLanguageTag: "fr",
33
+ rtl: false
34
+ }
35
+ }
36
+ }
39
37
  };
38
+
40
39
  export const WithAIAFlow: Story = {
41
- render: () => (
42
- <KcPageStory
43
- kcContext={{
44
- triggered_from_aia: true,
45
- url: { loginAction: "/login-action" }
46
- }}
47
- />
48
- )
40
+ args: {
41
+ kcContext: {
42
+ triggered_from_aia: true,
43
+ url: { loginAction: "/login-action" }
44
+ }
45
+ }
49
46
  };
50
47
  export const WithoutAIAFlow: Story = {
51
- render: () => (
52
- <KcPageStory
53
- kcContext={{
54
- triggered_from_aia: false,
55
- url: { loginAction: "/login-action" }
56
- }}
57
- />
58
- )
48
+ args: {
49
+ kcContext: {
50
+ triggered_from_aia: false,
51
+ url: { loginAction: "/login-action" }
52
+ }
53
+ }
59
54
  };
60
55
  export const WithCustomButtonStyle: Story = {
61
- render: () => (
62
- <KcPageStory
63
- kcContext={{
64
- triggered_from_aia: true,
65
- url: { loginAction: "/login-action" }
66
- }}
67
- />
68
- )
56
+ args: {
57
+ kcContext: {
58
+ triggered_from_aia: true,
59
+ url: { loginAction: "/login-action" }
60
+ }
61
+ }
69
62
  };
@@ -1,63 +1,63 @@
1
- import { Alert, AlertDescription } from "@/components/ui/alert";
2
- import { Button } from "@/components/ui/button";
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
-
10
- const { kcContext } = useKcContext();
11
- assert(kcContext.pageId === "delete-account-confirm.ftl");
12
-
13
- const { msg, msgStr } = useI18n();
14
-
15
- return (
16
- <Template
17
- headerNode={msg("deleteAccountConfirm")}
18
- >
19
- <form action={kcContext.url.loginAction} className="space-y-6" method="post">
20
- <Alert variant="warning" className="my-3">
21
- <AlertDescription>
22
- <span>{msg("irreversibleAction")}</span>
23
- </AlertDescription>
24
- </Alert>
25
-
26
- <div className="space-y-4">
27
- <p className="text-foreground">{msg("deletingImplies")}</p>
28
-
29
- <ul className="list-disc list-inside space-y-2 text-muted-foreground pl-4">
30
- <li>{msg("loggingOutImmediately")}</li>
31
- <li>{msg("errasingData")}</li>
32
- </ul>
33
-
34
- <p className="text-foreground font-medium mt-6">
35
- {msg("finalDeletionConfirmation")}
36
- </p>
37
- </div>
38
-
39
- <div className="flex flex-col sm:flex-row gap-3 sm:justify-between mt-6">
40
- {kcContext.triggered_from_aia && (
41
- <Button
42
- variant="outline"
43
- type="submit"
44
- name="cancel-aia"
45
- value="true"
46
- className="sm:flex-1"
47
- >
48
- {msgStr("doCancel")}
49
- </Button>
50
- )}
51
-
52
- <Button
53
- type="submit"
54
- variant="destructive"
55
- className="sm:flex-1 text-white"
56
- >
57
- {msgStr("doConfirmDelete")}
58
- </Button>
59
- </div>
60
- </form>
61
- </Template>
62
- );
63
- }
1
+ import { Alert, AlertDescription } from "@/components/ui/alert";
2
+ import { Button } from "@/components/ui/button";
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
+
10
+ const { kcContext } = useKcContext();
11
+ assert(kcContext.pageId === "delete-account-confirm.ftl");
12
+
13
+ const { msg, msgStr } = useI18n();
14
+
15
+ return (
16
+ <Template
17
+ headerNode={msg("deleteAccountConfirm")}
18
+ >
19
+ <form action={kcContext.url.loginAction} className="space-y-6" method="post">
20
+ <Alert variant="warning" className="my-3">
21
+ <AlertDescription>
22
+ <span>{msg("irreversibleAction")}</span>
23
+ </AlertDescription>
24
+ </Alert>
25
+
26
+ <div className="space-y-4">
27
+ <p className="text-foreground">{msg("deletingImplies")}</p>
28
+
29
+ <ul className="list-disc list-inside space-y-2 text-muted-foreground pl-4">
30
+ <li>{msg("loggingOutImmediately")}</li>
31
+ <li>{msg("errasingData")}</li>
32
+ </ul>
33
+
34
+ <p className="text-foreground font-medium mt-6">
35
+ {msg("finalDeletionConfirmation")}
36
+ </p>
37
+ </div>
38
+
39
+ <div className="flex flex-col sm:flex-row gap-3 sm:justify-between mt-6">
40
+ {kcContext.triggered_from_aia && (
41
+ <Button
42
+ variant="outline"
43
+ type="submit"
44
+ name="cancel-aia"
45
+ value="true"
46
+ className="sm:flex-1"
47
+ >
48
+ {msgStr("doCancel")}
49
+ </Button>
50
+ )}
51
+
52
+ <Button
53
+ type="submit"
54
+ variant="destructive"
55
+ className="sm:flex-1 text-white"
56
+ >
57
+ {msgStr("doConfirmDelete")}
58
+ </Button>
59
+ </div>
60
+ </form>
61
+ </Template>
62
+ );
63
+ }
@@ -1,3 +1,3 @@
1
- import { Page } from "./Page";
2
-
3
- export default Page;
1
+ import { Page } from "./Page";
2
+
3
+ export default Page;
@@ -7,43 +7,39 @@ const meta = {
7
7
  component: KcPageStory
8
8
  } satisfies Meta<typeof KcPageStory>;
9
9
 
10
+
10
11
  export default meta;
11
12
 
12
13
  type Story = StoryObj<typeof meta>;
13
14
 
14
- export const Default: Story = {
15
- render: () => <KcPageStory />
16
- };
15
+ export const Default: Story = {};
16
+
17
17
  export const Arabic: Story = {
18
- render: () => (
19
- <KcPageStory
20
- kcContext={{
21
- locale: {
22
- currentLanguageTag: "ar",
23
- rtl: true
24
- }
25
- }}
26
- />
27
- )
18
+ args: {
19
+ kcContext: {
20
+ locale: {
21
+ currentLanguageTag: "ar",
22
+ rtl: true
23
+ }
24
+ }
25
+ }
28
26
  };
29
27
  export const French: Story = {
30
- render: () => (
31
- <KcPageStory
32
- kcContext={{
33
- locale: {
34
- currentLanguageTag: "fr"
35
- }
36
- }}
37
- />
38
- )
28
+ args: {
29
+ kcContext: {
30
+ locale: {
31
+ currentLanguageTag: "fr",
32
+ rtl: false
33
+ }
34
+ }
35
+ }
39
36
  };
37
+
40
38
  export const WithCustomCredentialLabel: Story = {
41
- render: () => (
42
- <KcPageStory
43
- kcContext={{
44
- credentialLabel: "Test Credential",
45
- url: { loginAction: "/login-action" }
46
- }}
47
- />
48
- )
39
+ args: {
40
+ kcContext: {
41
+ credentialLabel: "Test Credential",
42
+ url: { loginAction: "/login-action" }
43
+ }
44
+ }
49
45
  };
@@ -1,51 +1,51 @@
1
- import { Alert, AlertDescription } from "@/components/ui/alert";
2
- import { Button } from "@/components/ui/button";
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
- ) {
10
- const { kcContext } = useKcContext();
11
- assert(kcContext.pageId === "delete-credential.ftl");
12
-
13
- const { msgStr, msg } = useI18n();
14
-
15
- return (
16
- <Template
17
- displayMessage={false}
18
- headerNode={msg("deleteCredentialTitle", kcContext.credentialLabel)}
19
- >
20
- <Alert variant="warning" className=" my-3">
21
- <AlertDescription>
22
- <span>{msg("deleteCredentialMessage", kcContext.credentialLabel)}</span>
23
- </AlertDescription>
24
- </Alert>
25
-
26
- <form className="form-actions" action={kcContext.url.loginAction} method="POST">
27
- <div className="flex flex-col sm:flex-row gap-3 sm:justify-between mt-6">
28
- <Button
29
- variant="outline"
30
- name="cancel-aia"
31
- id="kc-decline"
32
- type="submit"
33
- className="sm:flex-1"
34
- >
35
- {msgStr("doCancel")}
36
- </Button>
37
-
38
- <Button
39
- name="accept"
40
- id="kc-accept"
41
- type="submit"
42
- variant="destructive"
43
- className="sm:flex-1 text-white"
44
- >
45
- {msgStr("doConfirmDelete")}
46
- </Button>
47
- </div>
48
- </form>
49
- </Template>
50
- );
51
- }
1
+ import { Alert, AlertDescription } from "@/components/ui/alert";
2
+ import { Button } from "@/components/ui/button";
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
+ ) {
10
+ const { kcContext } = useKcContext();
11
+ assert(kcContext.pageId === "delete-credential.ftl");
12
+
13
+ const { msgStr, msg } = useI18n();
14
+
15
+ return (
16
+ <Template
17
+ displayMessage={false}
18
+ headerNode={msg("deleteCredentialTitle", kcContext.credentialLabel)}
19
+ >
20
+ <Alert variant="warning" className=" my-3">
21
+ <AlertDescription>
22
+ <span>{msg("deleteCredentialMessage", kcContext.credentialLabel)}</span>
23
+ </AlertDescription>
24
+ </Alert>
25
+
26
+ <form className="form-actions" action={kcContext.url.loginAction} method="POST">
27
+ <div className="flex flex-col sm:flex-row gap-3 sm:justify-between mt-6">
28
+ <Button
29
+ variant="outline"
30
+ name="cancel-aia"
31
+ id="kc-decline"
32
+ type="submit"
33
+ className="sm:flex-1"
34
+ >
35
+ {msgStr("doCancel")}
36
+ </Button>
37
+
38
+ <Button
39
+ name="accept"
40
+ id="kc-accept"
41
+ type="submit"
42
+ variant="destructive"
43
+ className="sm:flex-1 text-white"
44
+ >
45
+ {msgStr("doConfirmDelete")}
46
+ </Button>
47
+ </div>
48
+ </form>
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;