@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
@@ -4,7 +4,7 @@ import {
4
4
  DropdownMenuItem,
5
5
  DropdownMenuTrigger
6
6
  } from "@/components/ui/dropdown-menu";
7
- import { useI18n } from '@/login/i18n';
7
+ import { useI18n } from "@/login/i18n";
8
8
  import { IoCheckmark, IoLanguage } from "react-icons/io5";
9
9
  import { Button } from "./ui/button";
10
10
 
@@ -17,7 +17,6 @@ export function ModeToggle() {
17
17
  <Button variant="outline" size="icon" onClick={toggleTheme}>
18
18
  <Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
19
19
  <Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
20
- <span className="sr-only">Toggle theme</span>
21
20
  </Button>
22
21
  );
23
22
  }
@@ -27,7 +27,7 @@ const alertVariants = cva(
27
27
  const Alert = React.forwardRef<
28
28
  HTMLDivElement,
29
29
  React.HTMLAttributes<HTMLDivElement> &
30
- VariantProps<typeof alertVariants> & { showIcon?: boolean }
30
+ VariantProps<typeof alertVariants> & { showIcon?: boolean }
31
31
  >(({ className, showIcon = true, variant, ...props }, ref) => (
32
32
  <div
33
33
  ref={ref}
@@ -79,4 +79,3 @@ const AlertDescription = React.forwardRef<
79
79
  AlertDescription.displayName = "AlertDescription";
80
80
 
81
81
  export { Alert, AlertDescription, AlertTitle };
82
-
@@ -35,7 +35,7 @@ const buttonVariants = cva(
35
35
 
36
36
  export interface ButtonProps
37
37
  extends React.ButtonHTMLAttributes<HTMLButtonElement>,
38
- VariantProps<typeof buttonVariants> {
38
+ VariantProps<typeof buttonVariants> {
39
39
  asChild?: boolean;
40
40
  }
41
41
 
@@ -54,4 +54,3 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
54
54
  Button.displayName = "Button";
55
55
 
56
56
  export { Button, buttonVariants };
57
-
@@ -70,4 +70,3 @@ const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDiv
70
70
  CardFooter.displayName = "CardFooter";
71
71
 
72
72
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
73
-
@@ -26,4 +26,3 @@ const Checkbox = React.forwardRef<
26
26
  Checkbox.displayName = CheckboxPrimitive.Root.displayName;
27
27
 
28
28
  export { Checkbox };
29
-
@@ -174,9 +174,19 @@ const DropdownMenuShortcut = ({
174
174
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
175
175
 
176
176
  export {
177
- DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator,
178
- DropdownMenuShortcut, DropdownMenuSub,
177
+ DropdownMenu,
178
+ DropdownMenuCheckboxItem,
179
+ DropdownMenuContent,
180
+ DropdownMenuGroup,
181
+ DropdownMenuItem,
182
+ DropdownMenuLabel,
183
+ DropdownMenuPortal,
184
+ DropdownMenuRadioGroup,
185
+ DropdownMenuRadioItem,
186
+ DropdownMenuSeparator,
187
+ DropdownMenuShortcut,
188
+ DropdownMenuSub,
179
189
  DropdownMenuSubContent,
180
- DropdownMenuSubTrigger, DropdownMenuTrigger
190
+ DropdownMenuSubTrigger,
191
+ DropdownMenuTrigger
181
192
  };
182
-
@@ -237,4 +237,3 @@ export {
237
237
  FieldSet,
238
238
  FieldTitle
239
239
  };
240
-
@@ -67,4 +67,3 @@ const InputOTPSeparator = React.forwardRef<
67
67
  InputOTPSeparator.displayName = "InputOTPSeparator";
68
68
 
69
69
  export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
70
-
@@ -22,4 +22,3 @@ const Input = React.forwardRef<HTMLInputElement, React.ComponentProps<"input">>(
22
22
  Input.displayName = "Input";
23
23
 
24
24
  export { Input };
25
-
@@ -11,7 +11,7 @@ const labelVariants = cva(
11
11
  const Label = React.forwardRef<
12
12
  React.ElementRef<typeof LabelPrimitive.Root>,
13
13
  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &
14
- VariantProps<typeof labelVariants>
14
+ VariantProps<typeof labelVariants>
15
15
  >(({ className, ...props }, ref) => (
16
16
  <LabelPrimitive.Root
17
17
  ref={ref}
@@ -22,4 +22,3 @@ const Label = React.forwardRef<
22
22
  Label.displayName = LabelPrimitive.Root.displayName;
23
23
 
24
24
  export { Label };
25
-
@@ -40,4 +40,3 @@ const RadioGroupItem = React.forwardRef<
40
40
  RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
41
41
 
42
42
  export { RadioGroup, RadioGroupItem };
43
-
@@ -68,7 +68,7 @@ const SelectContent = React.forwardRef<
68
68
  className={cn(
69
69
  "relative z-50 max-h-[--radix-select-content-available-height] min-w-32 overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",
70
70
  position === "popper" &&
71
- "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
71
+ "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
72
72
  className
73
73
  )}
74
74
  position={position}
@@ -79,7 +79,7 @@ const SelectContent = React.forwardRef<
79
79
  className={cn(
80
80
  "p-1",
81
81
  position === "popper" &&
82
- "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width)"
82
+ "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width)"
83
83
  )}
84
84
  >
85
85
  {children}
@@ -137,6 +137,14 @@ const SelectSeparator = React.forwardRef<
137
137
  SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
138
138
 
139
139
  export {
140
- Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue
140
+ Select,
141
+ SelectContent,
142
+ SelectGroup,
143
+ SelectItem,
144
+ SelectLabel,
145
+ SelectScrollDownButton,
146
+ SelectScrollUpButton,
147
+ SelectSeparator,
148
+ SelectTrigger,
149
+ SelectValue
141
150
  };
142
-
@@ -24,4 +24,3 @@ const Separator = React.forwardRef<
24
24
  Separator.displayName = SeparatorPrimitive.Root.displayName;
25
25
 
26
26
  export { Separator };
27
-
@@ -28,4 +28,3 @@ const TooltipContent = React.forwardRef<
28
28
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
29
29
 
30
30
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
31
-
@@ -1,23 +1,23 @@
1
- import {
2
- type ExtendKcContext,
3
- createUseKcContext
4
- } from "@keycloakify/login-ui/KcContext";
5
- import type { KcEnvName, ThemeName } from "../kc.gen";
6
-
7
- export type KcContextExtension = {
8
- themeName: ThemeName;
9
- properties: Record<KcEnvName, string> & {};
10
- // NOTE: Here you can declare more properties to extend the KcContext
11
- // See: https://docs.keycloakify.dev/faq-and-help/some-values-you-need-are-missing-from-in-kccontext
12
- client: {
13
- baseUrl?: string;
14
- };
15
- darkMode?: boolean;
16
- };
17
-
18
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
19
- export type KcContextExtensionPerPage = {};
20
-
21
- export type KcContext = ExtendKcContext<KcContextExtension, KcContextExtensionPerPage>;
22
-
23
- export const { useKcContext, KcContextProvider } = createUseKcContext<KcContext>();
1
+ import {
2
+ type ExtendKcContext,
3
+ createUseKcContext
4
+ } from "@keycloakify/login-ui/KcContext";
5
+ import type { KcEnvName, ThemeName } from "../kc.gen";
6
+
7
+ export type KcContextExtension = {
8
+ themeName: ThemeName;
9
+ properties: Record<KcEnvName, string> & {};
10
+ // NOTE: Here you can declare more properties to extend the KcContext
11
+ // See: https://docs.keycloakify.dev/faq-and-help/some-values-you-need-are-missing-from-in-kccontext
12
+ client: {
13
+ baseUrl?: string;
14
+ };
15
+ darkMode?: boolean;
16
+ };
17
+
18
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
19
+ export type KcContextExtensionPerPage = {};
20
+
21
+ export type KcContext = ExtendKcContext<KcContextExtension, KcContextExtensionPerPage>;
22
+
23
+ export const { useKcContext, KcContextProvider } = createUseKcContext<KcContext>();
@@ -1,47 +1,45 @@
1
- import { useExclusiveAppInstanceEffect } from "@keycloakify/login-ui/tools/useExclusiveAppInstanceEffect";
2
- import { KcClsxProvider } from "@keycloakify/login-ui/useKcClsx";
3
- import type { ReactNode } from "react";
4
- import { assert } from "tsafe/assert";
5
- import { type KcContext, KcContextProvider } from "./KcContext";
6
- import { I18nProvider } from "./i18n";
7
- import "./index.css";
8
- import { PageIndex } from "./pages/PageIndex";
9
- import { useStyleLevelCustomization } from "./styleLevelCustomization";
10
-
11
-
12
-
13
-
14
- export default function KcPage(props: { kcContext: KcContext }) {
15
- const { kcContext } = props;
16
-
17
- return (
18
- <KcContextProvider kcContext={kcContext}>
19
- <I18nProvider kcContext={kcContext}>
20
- <StyleLevelCustomization>
21
- <PageIndex />
22
- </StyleLevelCustomization>
23
- </I18nProvider>
24
- </KcContextProvider>
25
- );
26
- }
27
-
28
- function StyleLevelCustomization(props: { children: ReactNode }) {
29
- const { children } = props;
30
-
31
- const { doUseDefaultCss, classes, loadCustomStylesheet, Provider } = useStyleLevelCustomization();
32
-
33
- useExclusiveAppInstanceEffect({
34
- effectId: "loadCustomStylesheet",
35
- isEnabled: loadCustomStylesheet !== undefined,
36
- effect: () => {
37
- assert(loadCustomStylesheet !== undefined);
38
- loadCustomStylesheet();
39
- }
40
- });
41
-
42
- return (
43
- <KcClsxProvider doUseDefaultCss={doUseDefaultCss} classes={classes}>
44
- {Provider === undefined ? children : <Provider>{children}</Provider>}
45
- </KcClsxProvider>
46
- );
47
- }
1
+ import { useExclusiveAppInstanceEffect } from "@keycloakify/login-ui/tools/useExclusiveAppInstanceEffect";
2
+ import { KcClsxProvider } from "@keycloakify/login-ui/useKcClsx";
3
+ import type { ReactNode } from "react";
4
+ import { assert } from "tsafe/assert";
5
+ import { type KcContext, KcContextProvider } from "./KcContext";
6
+ import { I18nProvider } from "./i18n";
7
+ import "./index.css";
8
+ import { PageIndex } from "./pages/PageIndex";
9
+ import { useStyleLevelCustomization } from "./styleLevelCustomization";
10
+
11
+ export default function KcPage(props: { kcContext: KcContext }) {
12
+ const { kcContext } = props;
13
+
14
+ return (
15
+ <KcContextProvider kcContext={kcContext}>
16
+ <I18nProvider kcContext={kcContext}>
17
+ <StyleLevelCustomization>
18
+ <PageIndex />
19
+ </StyleLevelCustomization>
20
+ </I18nProvider>
21
+ </KcContextProvider>
22
+ );
23
+ }
24
+
25
+ function StyleLevelCustomization(props: { children: ReactNode }) {
26
+ const { children } = props;
27
+
28
+ const { doUseDefaultCss, classes, loadCustomStylesheet, Provider } =
29
+ useStyleLevelCustomization();
30
+
31
+ useExclusiveAppInstanceEffect({
32
+ effectId: "loadCustomStylesheet",
33
+ isEnabled: loadCustomStylesheet !== undefined,
34
+ effect: () => {
35
+ assert(loadCustomStylesheet !== undefined);
36
+ loadCustomStylesheet();
37
+ }
38
+ });
39
+
40
+ return (
41
+ <KcClsxProvider doUseDefaultCss={doUseDefaultCss} classes={classes}>
42
+ {Provider === undefined ? children : <Provider>{children}</Provider>}
43
+ </KcClsxProvider>
44
+ );
45
+ }
@@ -1,101 +1,101 @@
1
- <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path
3
- d="M0 12.6316C0 5.65535 5.65535 0 12.6316 0H35.3684C42.3446 0 48 5.65535 48 12.6316V35.3684C48 42.3446 42.3446 48 35.3684 48H12.6316C5.65535 48 0 42.3446 0 35.3684V12.6316Z"
4
- fill="#465FFF" />
5
- <path
6
- d="M0 12.6316C0 5.65535 5.65535 0 12.6316 0H35.3684C42.3446 0 48 5.65535 48 12.6316V35.3684C48 42.3446 42.3446 48 35.3684 48H12.6316C5.65535 48 0 42.3446 0 35.3684V12.6316Z"
7
- fill="#465FFF" />
8
- <g filter="url(#filter0_d_0_1)">
9
- <path
10
- d="M12.6357 12.6323C12.6357 11.237 13.7668 10.106 15.162 10.106C16.5573 10.106 17.6884 11.237 17.6884 12.6323V35.3691C17.6884 36.7644 16.5573 37.8954 15.162 37.8954C13.7668 37.8954 12.6357 36.7644 12.6357 35.3691V12.6323Z"
11
- fill="white" />
12
- </g>
13
- <g filter="url(#filter1_d_0_1)">
14
- <path
15
- d="M22.1133 22.7353C22.1133 21.3401 23.2443 20.209 24.6396 20.209C26.0348 20.209 27.1659 21.3401 27.1659 22.7353V35.3669C27.1659 36.7621 26.0348 37.8932 24.6396 37.8932C23.2443 37.8932 22.1133 36.7621 22.1133 35.3669V22.7353Z"
16
- fill="white" fill-opacity="0.9" />
17
- </g>
18
- <path
19
- d="M0 12.6316C0 5.65535 5.65535 0 12.6316 0H35.3684C42.3446 0 48 5.65535 48 12.6316V35.3684C48 42.3446 42.3446 48 35.3684 48H12.6316C5.65535 48 0 42.3446 0 35.3684V12.6316Z"
20
- fill="#465FFF" />
21
- <path
22
- d="M0 12.6316C0 5.65535 5.65535 0 12.6316 0H35.3684C42.3446 0 48 5.65535 48 12.6316V35.3684C48 42.3446 42.3446 48 35.3684 48H12.6316C5.65535 48 0 42.3446 0 35.3684V12.6316Z"
23
- fill="#465FFF" />
24
- <g filter="url(#filter2_d_0_1)">
25
- <path
26
- d="M12.6357 12.6323C12.6357 11.237 13.7668 10.106 15.162 10.106C16.5573 10.106 17.6884 11.237 17.6884 12.6323V35.3691C17.6884 36.7644 16.5573 37.8954 15.162 37.8954C13.7668 37.8954 12.6357 36.7644 12.6357 35.3691V12.6323Z"
27
- fill="white" />
28
- </g>
29
- <g filter="url(#filter3_d_0_1)">
30
- <path
31
- d="M22.1133 22.7353C22.1133 21.3401 23.2443 20.209 24.6396 20.209C26.0348 20.209 27.1659 21.3401 27.1659 22.7353V35.3669C27.1659 36.7621 26.0348 37.8932 24.6396 37.8932C23.2443 37.8932 22.1133 36.7621 22.1133 35.3669V22.7353Z"
32
- fill="white" fill-opacity="0.9" />
33
- </g>
34
- <g filter="url(#filter4_d_0_1)">
35
- <path
36
- d="M31.582 16.4189C31.582 15.0236 32.7131 13.8926 34.1083 13.8926C35.5036 13.8926 36.6346 15.0236 36.6346 16.4189V35.3663C36.6346 36.7615 35.5036 37.8926 34.1083 37.8926C32.7131 37.8926 31.582 36.7615 31.582 35.3663V16.4189Z"
37
- fill="white" fill-opacity="0.7" />
38
- </g>
39
- <defs>
40
- <filter id="filter0_d_0_1" x="11.6357" y="9.60596" width="7.05267" height="29.7894" filterUnits="userSpaceOnUse"
41
- color-interpolation-filters="sRGB">
42
- <feFlood flood-opacity="0" result="BackgroundImageFix" />
43
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
44
- result="hardAlpha" />
45
- <feOffset dy="0.5" />
46
- <feGaussianBlur stdDeviation="0.5" />
47
- <feComposite in2="hardAlpha" operator="out" />
48
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
49
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_1" />
50
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_1" result="shape" />
51
- </filter>
52
- <filter id="filter1_d_0_1" x="21.1133" y="19.709" width="7.05261" height="19.6842" filterUnits="userSpaceOnUse"
53
- color-interpolation-filters="sRGB">
54
- <feFlood flood-opacity="0" result="BackgroundImageFix" />
55
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
56
- result="hardAlpha" />
57
- <feOffset dy="0.5" />
58
- <feGaussianBlur stdDeviation="0.5" />
59
- <feComposite in2="hardAlpha" operator="out" />
60
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
61
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_1" />
62
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_1" result="shape" />
63
- </filter>
64
- <filter id="filter2_d_0_1" x="11.6357" y="9.60596" width="7.05267" height="29.7894" filterUnits="userSpaceOnUse"
65
- color-interpolation-filters="sRGB">
66
- <feFlood flood-opacity="0" result="BackgroundImageFix" />
67
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
68
- result="hardAlpha" />
69
- <feOffset dy="0.5" />
70
- <feGaussianBlur stdDeviation="0.5" />
71
- <feComposite in2="hardAlpha" operator="out" />
72
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
73
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_1" />
74
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_1" result="shape" />
75
- </filter>
76
- <filter id="filter3_d_0_1" x="21.1133" y="19.709" width="7.05261" height="19.6842" filterUnits="userSpaceOnUse"
77
- color-interpolation-filters="sRGB">
78
- <feFlood flood-opacity="0" result="BackgroundImageFix" />
79
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
80
- result="hardAlpha" />
81
- <feOffset dy="0.5" />
82
- <feGaussianBlur stdDeviation="0.5" />
83
- <feComposite in2="hardAlpha" operator="out" />
84
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
85
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_1" />
86
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_1" result="shape" />
87
- </filter>
88
- <filter id="filter4_d_0_1" x="30.582" y="13.3926" width="7.05261" height="26" filterUnits="userSpaceOnUse"
89
- color-interpolation-filters="sRGB">
90
- <feFlood flood-opacity="0" result="BackgroundImageFix" />
91
- <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
92
- result="hardAlpha" />
93
- <feOffset dy="0.5" />
94
- <feGaussianBlur stdDeviation="0.5" />
95
- <feComposite in2="hardAlpha" operator="out" />
96
- <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
97
- <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_1" />
98
- <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_1" result="shape" />
99
- </filter>
100
- </defs>
1
+ <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path
3
+ d="M0 12.6316C0 5.65535 5.65535 0 12.6316 0H35.3684C42.3446 0 48 5.65535 48 12.6316V35.3684C48 42.3446 42.3446 48 35.3684 48H12.6316C5.65535 48 0 42.3446 0 35.3684V12.6316Z"
4
+ fill="#465FFF" />
5
+ <path
6
+ d="M0 12.6316C0 5.65535 5.65535 0 12.6316 0H35.3684C42.3446 0 48 5.65535 48 12.6316V35.3684C48 42.3446 42.3446 48 35.3684 48H12.6316C5.65535 48 0 42.3446 0 35.3684V12.6316Z"
7
+ fill="#465FFF" />
8
+ <g filter="url(#filter0_d_0_1)">
9
+ <path
10
+ d="M12.6357 12.6323C12.6357 11.237 13.7668 10.106 15.162 10.106C16.5573 10.106 17.6884 11.237 17.6884 12.6323V35.3691C17.6884 36.7644 16.5573 37.8954 15.162 37.8954C13.7668 37.8954 12.6357 36.7644 12.6357 35.3691V12.6323Z"
11
+ fill="white" />
12
+ </g>
13
+ <g filter="url(#filter1_d_0_1)">
14
+ <path
15
+ d="M22.1133 22.7353C22.1133 21.3401 23.2443 20.209 24.6396 20.209C26.0348 20.209 27.1659 21.3401 27.1659 22.7353V35.3669C27.1659 36.7621 26.0348 37.8932 24.6396 37.8932C23.2443 37.8932 22.1133 36.7621 22.1133 35.3669V22.7353Z"
16
+ fill="white" fill-opacity="0.9" />
17
+ </g>
18
+ <path
19
+ d="M0 12.6316C0 5.65535 5.65535 0 12.6316 0H35.3684C42.3446 0 48 5.65535 48 12.6316V35.3684C48 42.3446 42.3446 48 35.3684 48H12.6316C5.65535 48 0 42.3446 0 35.3684V12.6316Z"
20
+ fill="#465FFF" />
21
+ <path
22
+ d="M0 12.6316C0 5.65535 5.65535 0 12.6316 0H35.3684C42.3446 0 48 5.65535 48 12.6316V35.3684C48 42.3446 42.3446 48 35.3684 48H12.6316C5.65535 48 0 42.3446 0 35.3684V12.6316Z"
23
+ fill="#465FFF" />
24
+ <g filter="url(#filter2_d_0_1)">
25
+ <path
26
+ d="M12.6357 12.6323C12.6357 11.237 13.7668 10.106 15.162 10.106C16.5573 10.106 17.6884 11.237 17.6884 12.6323V35.3691C17.6884 36.7644 16.5573 37.8954 15.162 37.8954C13.7668 37.8954 12.6357 36.7644 12.6357 35.3691V12.6323Z"
27
+ fill="white" />
28
+ </g>
29
+ <g filter="url(#filter3_d_0_1)">
30
+ <path
31
+ d="M22.1133 22.7353C22.1133 21.3401 23.2443 20.209 24.6396 20.209C26.0348 20.209 27.1659 21.3401 27.1659 22.7353V35.3669C27.1659 36.7621 26.0348 37.8932 24.6396 37.8932C23.2443 37.8932 22.1133 36.7621 22.1133 35.3669V22.7353Z"
32
+ fill="white" fill-opacity="0.9" />
33
+ </g>
34
+ <g filter="url(#filter4_d_0_1)">
35
+ <path
36
+ d="M31.582 16.4189C31.582 15.0236 32.7131 13.8926 34.1083 13.8926C35.5036 13.8926 36.6346 15.0236 36.6346 16.4189V35.3663C36.6346 36.7615 35.5036 37.8926 34.1083 37.8926C32.7131 37.8926 31.582 36.7615 31.582 35.3663V16.4189Z"
37
+ fill="white" fill-opacity="0.7" />
38
+ </g>
39
+ <defs>
40
+ <filter id="filter0_d_0_1" x="11.6357" y="9.60596" width="7.05267" height="29.7894" filterUnits="userSpaceOnUse"
41
+ color-interpolation-filters="sRGB">
42
+ <feFlood flood-opacity="0" result="BackgroundImageFix" />
43
+ <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
44
+ result="hardAlpha" />
45
+ <feOffset dy="0.5" />
46
+ <feGaussianBlur stdDeviation="0.5" />
47
+ <feComposite in2="hardAlpha" operator="out" />
48
+ <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
49
+ <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_1" />
50
+ <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_1" result="shape" />
51
+ </filter>
52
+ <filter id="filter1_d_0_1" x="21.1133" y="19.709" width="7.05261" height="19.6842" filterUnits="userSpaceOnUse"
53
+ color-interpolation-filters="sRGB">
54
+ <feFlood flood-opacity="0" result="BackgroundImageFix" />
55
+ <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
56
+ result="hardAlpha" />
57
+ <feOffset dy="0.5" />
58
+ <feGaussianBlur stdDeviation="0.5" />
59
+ <feComposite in2="hardAlpha" operator="out" />
60
+ <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
61
+ <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_1" />
62
+ <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_1" result="shape" />
63
+ </filter>
64
+ <filter id="filter2_d_0_1" x="11.6357" y="9.60596" width="7.05267" height="29.7894" filterUnits="userSpaceOnUse"
65
+ color-interpolation-filters="sRGB">
66
+ <feFlood flood-opacity="0" result="BackgroundImageFix" />
67
+ <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
68
+ result="hardAlpha" />
69
+ <feOffset dy="0.5" />
70
+ <feGaussianBlur stdDeviation="0.5" />
71
+ <feComposite in2="hardAlpha" operator="out" />
72
+ <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
73
+ <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_1" />
74
+ <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_1" result="shape" />
75
+ </filter>
76
+ <filter id="filter3_d_0_1" x="21.1133" y="19.709" width="7.05261" height="19.6842" filterUnits="userSpaceOnUse"
77
+ color-interpolation-filters="sRGB">
78
+ <feFlood flood-opacity="0" result="BackgroundImageFix" />
79
+ <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
80
+ result="hardAlpha" />
81
+ <feOffset dy="0.5" />
82
+ <feGaussianBlur stdDeviation="0.5" />
83
+ <feComposite in2="hardAlpha" operator="out" />
84
+ <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
85
+ <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_1" />
86
+ <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_1" result="shape" />
87
+ </filter>
88
+ <filter id="filter4_d_0_1" x="30.582" y="13.3926" width="7.05261" height="26" filterUnits="userSpaceOnUse"
89
+ color-interpolation-filters="sRGB">
90
+ <feFlood flood-opacity="0" result="BackgroundImageFix" />
91
+ <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
92
+ result="hardAlpha" />
93
+ <feOffset dy="0.5" />
94
+ <feGaussianBlur stdDeviation="0.5" />
95
+ <feComposite in2="hardAlpha" operator="out" />
96
+ <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
97
+ <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_1" />
98
+ <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_1" result="shape" />
99
+ </filter>
100
+ </defs>
101
101
  </svg>