@authrim/sveltekit 0.1.0

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 (266) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +531 -0
  3. package/dist/__tests__/client-events.test.d.ts +2 -0
  4. package/dist/__tests__/client-events.test.d.ts.map +1 -0
  5. package/dist/__tests__/client-events.test.js +225 -0
  6. package/dist/__tests__/providers.test.d.ts +2 -0
  7. package/dist/__tests__/providers.test.d.ts.map +1 -0
  8. package/dist/__tests__/providers.test.js +68 -0
  9. package/dist/__tests__/response.test.d.ts +2 -0
  10. package/dist/__tests__/response.test.d.ts.map +1 -0
  11. package/dist/__tests__/response.test.js +99 -0
  12. package/dist/__tests__/stores.test.d.ts +2 -0
  13. package/dist/__tests__/stores.test.d.ts.map +1 -0
  14. package/dist/__tests__/stores.test.js +91 -0
  15. package/dist/client.d.ts +25 -0
  16. package/dist/client.d.ts.map +1 -0
  17. package/dist/client.js +411 -0
  18. package/dist/components/AuthProvider.svelte +56 -0
  19. package/dist/components/AuthProvider.svelte.d.ts +34 -0
  20. package/dist/components/AuthProvider.svelte.d.ts.map +1 -0
  21. package/dist/components/ProtectedRoute.svelte +71 -0
  22. package/dist/components/ProtectedRoute.svelte.d.ts +38 -0
  23. package/dist/components/ProtectedRoute.svelte.d.ts.map +1 -0
  24. package/dist/components/SignInButton.svelte +93 -0
  25. package/dist/components/SignInButton.svelte.d.ts +43 -0
  26. package/dist/components/SignInButton.svelte.d.ts.map +1 -0
  27. package/dist/components/SignOutButton.svelte +72 -0
  28. package/dist/components/SignOutButton.svelte.d.ts +40 -0
  29. package/dist/components/SignOutButton.svelte.d.ts.map +1 -0
  30. package/dist/components/UserProfile.svelte +71 -0
  31. package/dist/components/UserProfile.svelte.d.ts +51 -0
  32. package/dist/components/UserProfile.svelte.d.ts.map +1 -0
  33. package/dist/components/index.d.ts +6 -0
  34. package/dist/components/index.d.ts.map +1 -0
  35. package/dist/components/index.js +5 -0
  36. package/dist/direct-auth/ciba.d.ts +47 -0
  37. package/dist/direct-auth/ciba.d.ts.map +1 -0
  38. package/dist/direct-auth/ciba.js +77 -0
  39. package/dist/direct-auth/consent.d.ts +85 -0
  40. package/dist/direct-auth/consent.d.ts.map +1 -0
  41. package/dist/direct-auth/consent.js +57 -0
  42. package/dist/direct-auth/device-flow.d.ts +40 -0
  43. package/dist/direct-auth/device-flow.d.ts.map +1 -0
  44. package/dist/direct-auth/device-flow.js +45 -0
  45. package/dist/direct-auth/email-code.d.ts +48 -0
  46. package/dist/direct-auth/email-code.d.ts.map +1 -0
  47. package/dist/direct-auth/email-code.js +265 -0
  48. package/dist/direct-auth/index.d.ts +9 -0
  49. package/dist/direct-auth/index.d.ts.map +1 -0
  50. package/dist/direct-auth/index.js +8 -0
  51. package/dist/direct-auth/login-challenge.d.ts +41 -0
  52. package/dist/direct-auth/login-challenge.d.ts.map +1 -0
  53. package/dist/direct-auth/login-challenge.js +34 -0
  54. package/dist/direct-auth/passkey.d.ts +30 -0
  55. package/dist/direct-auth/passkey.d.ts.map +1 -0
  56. package/dist/direct-auth/passkey.js +392 -0
  57. package/dist/direct-auth/session.d.ts +48 -0
  58. package/dist/direct-auth/session.d.ts.map +1 -0
  59. package/dist/direct-auth/session.js +219 -0
  60. package/dist/direct-auth/social.d.ts +56 -0
  61. package/dist/direct-auth/social.d.ts.map +1 -0
  62. package/dist/direct-auth/social.js +484 -0
  63. package/dist/index.d.ts +17 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +14 -0
  66. package/dist/providers/crypto.d.ts +13 -0
  67. package/dist/providers/crypto.d.ts.map +1 -0
  68. package/dist/providers/crypto.js +27 -0
  69. package/dist/providers/http.d.ts +30 -0
  70. package/dist/providers/http.d.ts.map +1 -0
  71. package/dist/providers/http.js +65 -0
  72. package/dist/providers/index.d.ts +4 -0
  73. package/dist/providers/index.d.ts.map +1 -0
  74. package/dist/providers/index.js +3 -0
  75. package/dist/providers/storage.d.ts +21 -0
  76. package/dist/providers/storage.d.ts.map +1 -0
  77. package/dist/providers/storage.js +83 -0
  78. package/dist/server/handle.d.ts +46 -0
  79. package/dist/server/handle.d.ts.map +1 -0
  80. package/dist/server/handle.js +60 -0
  81. package/dist/server/index.d.ts +4 -0
  82. package/dist/server/index.d.ts.map +1 -0
  83. package/dist/server/index.js +3 -0
  84. package/dist/server/load.d.ts +83 -0
  85. package/dist/server/load.d.ts.map +1 -0
  86. package/dist/server/load.js +86 -0
  87. package/dist/server/session.d.ts +44 -0
  88. package/dist/server/session.d.ts.map +1 -0
  89. package/dist/server/session.js +50 -0
  90. package/dist/stores/auth.d.ts +56 -0
  91. package/dist/stores/auth.d.ts.map +1 -0
  92. package/dist/stores/auth.js +64 -0
  93. package/dist/stores/index.d.ts +2 -0
  94. package/dist/stores/index.d.ts.map +1 -0
  95. package/dist/stores/index.js +1 -0
  96. package/dist/types.d.ts +164 -0
  97. package/dist/types.d.ts.map +1 -0
  98. package/dist/types.js +4 -0
  99. package/dist/ui/account/LinkAccountButton.svelte +133 -0
  100. package/dist/ui/account/LinkAccountButton.svelte.d.ts +37 -0
  101. package/dist/ui/account/LinkAccountButton.svelte.d.ts.map +1 -0
  102. package/dist/ui/account/LinkedAccountsList.svelte +233 -0
  103. package/dist/ui/account/LinkedAccountsList.svelte.d.ts +32 -0
  104. package/dist/ui/account/LinkedAccountsList.svelte.d.ts.map +1 -0
  105. package/dist/ui/account/UnlinkAccountButton.svelte +179 -0
  106. package/dist/ui/account/UnlinkAccountButton.svelte.d.ts +28 -0
  107. package/dist/ui/account/UnlinkAccountButton.svelte.d.ts.map +1 -0
  108. package/dist/ui/account/index.d.ts +7 -0
  109. package/dist/ui/account/index.d.ts.map +1 -0
  110. package/dist/ui/account/index.js +6 -0
  111. package/dist/ui/context.d.ts +17 -0
  112. package/dist/ui/context.d.ts.map +1 -0
  113. package/dist/ui/context.js +71 -0
  114. package/dist/ui/forms/CIBARequestCard.svelte +315 -0
  115. package/dist/ui/forms/CIBARequestCard.svelte.d.ts +50 -0
  116. package/dist/ui/forms/CIBARequestCard.svelte.d.ts.map +1 -0
  117. package/dist/ui/forms/ClientInfo.svelte +232 -0
  118. package/dist/ui/forms/ClientInfo.svelte.d.ts +35 -0
  119. package/dist/ui/forms/ClientInfo.svelte.d.ts.map +1 -0
  120. package/dist/ui/forms/ConsentScopesList.svelte +109 -0
  121. package/dist/ui/forms/ConsentScopesList.svelte.d.ts +30 -0
  122. package/dist/ui/forms/ConsentScopesList.svelte.d.ts.map +1 -0
  123. package/dist/ui/forms/EmailCodeForm.svelte +224 -0
  124. package/dist/ui/forms/EmailCodeForm.svelte.d.ts +39 -0
  125. package/dist/ui/forms/EmailCodeForm.svelte.d.ts.map +1 -0
  126. package/dist/ui/forms/OrgSelector.svelte +95 -0
  127. package/dist/ui/forms/OrgSelector.svelte.d.ts +37 -0
  128. package/dist/ui/forms/OrgSelector.svelte.d.ts.map +1 -0
  129. package/dist/ui/forms/PasskeyConditionalInput.svelte +173 -0
  130. package/dist/ui/forms/PasskeyConditionalInput.svelte.d.ts +36 -0
  131. package/dist/ui/forms/PasskeyConditionalInput.svelte.d.ts.map +1 -0
  132. package/dist/ui/forms/QRCodeDisplay.svelte +122 -0
  133. package/dist/ui/forms/QRCodeDisplay.svelte.d.ts +27 -0
  134. package/dist/ui/forms/QRCodeDisplay.svelte.d.ts.map +1 -0
  135. package/dist/ui/forms/SocialLoginButtons.svelte +209 -0
  136. package/dist/ui/forms/SocialLoginButtons.svelte.d.ts +33 -0
  137. package/dist/ui/forms/SocialLoginButtons.svelte.d.ts.map +1 -0
  138. package/dist/ui/forms/UserCodeInput.svelte +183 -0
  139. package/dist/ui/forms/UserCodeInput.svelte.d.ts +34 -0
  140. package/dist/ui/forms/UserCodeInput.svelte.d.ts.map +1 -0
  141. package/dist/ui/forms/index.d.ts +13 -0
  142. package/dist/ui/forms/index.d.ts.map +1 -0
  143. package/dist/ui/forms/index.js +12 -0
  144. package/dist/ui/helpers/AuthError.svelte +124 -0
  145. package/dist/ui/helpers/AuthError.svelte.d.ts +26 -0
  146. package/dist/ui/helpers/AuthError.svelte.d.ts.map +1 -0
  147. package/dist/ui/helpers/AuthLoading.svelte +83 -0
  148. package/dist/ui/helpers/AuthLoading.svelte.d.ts +25 -0
  149. package/dist/ui/helpers/AuthLoading.svelte.d.ts.map +1 -0
  150. package/dist/ui/helpers/OTPInput.svelte +214 -0
  151. package/dist/ui/helpers/OTPInput.svelte.d.ts +34 -0
  152. package/dist/ui/helpers/OTPInput.svelte.d.ts.map +1 -0
  153. package/dist/ui/helpers/ResendCodeButton.svelte +140 -0
  154. package/dist/ui/helpers/ResendCodeButton.svelte.d.ts +28 -0
  155. package/dist/ui/helpers/ResendCodeButton.svelte.d.ts.map +1 -0
  156. package/dist/ui/helpers/index.d.ts +8 -0
  157. package/dist/ui/helpers/index.d.ts.map +1 -0
  158. package/dist/ui/helpers/index.js +7 -0
  159. package/dist/ui/index.d.ts +43 -0
  160. package/dist/ui/index.d.ts.map +1 -0
  161. package/dist/ui/index.js +48 -0
  162. package/dist/ui/passkey/PasskeyDeleteButton.svelte +177 -0
  163. package/dist/ui/passkey/PasskeyDeleteButton.svelte.d.ts +26 -0
  164. package/dist/ui/passkey/PasskeyDeleteButton.svelte.d.ts.map +1 -0
  165. package/dist/ui/passkey/PasskeyList.svelte +225 -0
  166. package/dist/ui/passkey/PasskeyList.svelte.d.ts +30 -0
  167. package/dist/ui/passkey/PasskeyList.svelte.d.ts.map +1 -0
  168. package/dist/ui/passkey/PasskeyRegisterButton.svelte +52 -0
  169. package/dist/ui/passkey/PasskeyRegisterButton.svelte.d.ts +38 -0
  170. package/dist/ui/passkey/PasskeyRegisterButton.svelte.d.ts.map +1 -0
  171. package/dist/ui/passkey/index.d.ts +7 -0
  172. package/dist/ui/passkey/index.d.ts.map +1 -0
  173. package/dist/ui/passkey/index.js +6 -0
  174. package/dist/ui/session/SessionExpiryIndicator.svelte +109 -0
  175. package/dist/ui/session/SessionExpiryIndicator.svelte.d.ts +23 -0
  176. package/dist/ui/session/SessionExpiryIndicator.svelte.d.ts.map +1 -0
  177. package/dist/ui/session/SessionList.svelte +231 -0
  178. package/dist/ui/session/SessionList.svelte.d.ts +31 -0
  179. package/dist/ui/session/SessionList.svelte.d.ts.map +1 -0
  180. package/dist/ui/session/SessionRevokeButton.svelte +72 -0
  181. package/dist/ui/session/SessionRevokeButton.svelte.d.ts +26 -0
  182. package/dist/ui/session/SessionRevokeButton.svelte.d.ts.map +1 -0
  183. package/dist/ui/session/index.d.ts +7 -0
  184. package/dist/ui/session/index.d.ts.map +1 -0
  185. package/dist/ui/session/index.js +6 -0
  186. package/dist/ui/shared/Alert.svelte +246 -0
  187. package/dist/ui/shared/Alert.svelte.d.ts +36 -0
  188. package/dist/ui/shared/Alert.svelte.d.ts.map +1 -0
  189. package/dist/ui/shared/Badge.svelte +100 -0
  190. package/dist/ui/shared/Badge.svelte.d.ts +35 -0
  191. package/dist/ui/shared/Badge.svelte.d.ts.map +1 -0
  192. package/dist/ui/shared/Button.svelte +213 -0
  193. package/dist/ui/shared/Button.svelte.d.ts +42 -0
  194. package/dist/ui/shared/Button.svelte.d.ts.map +1 -0
  195. package/dist/ui/shared/Card.svelte +85 -0
  196. package/dist/ui/shared/Card.svelte.d.ts +39 -0
  197. package/dist/ui/shared/Card.svelte.d.ts.map +1 -0
  198. package/dist/ui/shared/CountdownTimer.svelte +150 -0
  199. package/dist/ui/shared/CountdownTimer.svelte.d.ts +30 -0
  200. package/dist/ui/shared/CountdownTimer.svelte.d.ts.map +1 -0
  201. package/dist/ui/shared/Dialog.svelte +240 -0
  202. package/dist/ui/shared/Dialog.svelte.d.ts +39 -0
  203. package/dist/ui/shared/Dialog.svelte.d.ts.map +1 -0
  204. package/dist/ui/shared/Input.svelte +192 -0
  205. package/dist/ui/shared/Input.svelte.d.ts +42 -0
  206. package/dist/ui/shared/Input.svelte.d.ts.map +1 -0
  207. package/dist/ui/shared/LanguageSwitcher.svelte +99 -0
  208. package/dist/ui/shared/LanguageSwitcher.svelte.d.ts +31 -0
  209. package/dist/ui/shared/LanguageSwitcher.svelte.d.ts.map +1 -0
  210. package/dist/ui/shared/Spinner.svelte +75 -0
  211. package/dist/ui/shared/Spinner.svelte.d.ts +24 -0
  212. package/dist/ui/shared/Spinner.svelte.d.ts.map +1 -0
  213. package/dist/ui/shared/index.d.ts +13 -0
  214. package/dist/ui/shared/index.d.ts.map +1 -0
  215. package/dist/ui/shared/index.js +12 -0
  216. package/dist/ui/styles/base.css +168 -0
  217. package/dist/ui/styles/theme.css +279 -0
  218. package/dist/ui/templates/AccountSettingsTemplate.svelte +205 -0
  219. package/dist/ui/templates/AccountSettingsTemplate.svelte.d.ts +49 -0
  220. package/dist/ui/templates/AccountSettingsTemplate.svelte.d.ts.map +1 -0
  221. package/dist/ui/templates/CIBATemplate.svelte +227 -0
  222. package/dist/ui/templates/CIBATemplate.svelte.d.ts +45 -0
  223. package/dist/ui/templates/CIBATemplate.svelte.d.ts.map +1 -0
  224. package/dist/ui/templates/ConsentTemplate.svelte +549 -0
  225. package/dist/ui/templates/ConsentTemplate.svelte.d.ts +76 -0
  226. package/dist/ui/templates/ConsentTemplate.svelte.d.ts.map +1 -0
  227. package/dist/ui/templates/DeviceFlowTemplate.svelte +228 -0
  228. package/dist/ui/templates/DeviceFlowTemplate.svelte.d.ts +47 -0
  229. package/dist/ui/templates/DeviceFlowTemplate.svelte.d.ts.map +1 -0
  230. package/dist/ui/templates/LoginTemplate.svelte +234 -0
  231. package/dist/ui/templates/LoginTemplate.svelte.d.ts +49 -0
  232. package/dist/ui/templates/LoginTemplate.svelte.d.ts.map +1 -0
  233. package/dist/ui/templates/ReauthTemplate.svelte +269 -0
  234. package/dist/ui/templates/ReauthTemplate.svelte.d.ts +54 -0
  235. package/dist/ui/templates/ReauthTemplate.svelte.d.ts.map +1 -0
  236. package/dist/ui/templates/SignUpTemplate.svelte +345 -0
  237. package/dist/ui/templates/SignUpTemplate.svelte.d.ts +53 -0
  238. package/dist/ui/templates/SignUpTemplate.svelte.d.ts.map +1 -0
  239. package/dist/ui/templates/index.d.ts +14 -0
  240. package/dist/ui/templates/index.d.ts.map +1 -0
  241. package/dist/ui/templates/index.js +13 -0
  242. package/dist/ui/types.d.ts +151 -0
  243. package/dist/ui/types.d.ts.map +1 -0
  244. package/dist/ui/types.js +4 -0
  245. package/dist/utils/context.d.ts +12 -0
  246. package/dist/utils/context.d.ts.map +1 -0
  247. package/dist/utils/context.js +26 -0
  248. package/dist/utils/error-mapping.d.ts +29 -0
  249. package/dist/utils/error-mapping.d.ts.map +1 -0
  250. package/dist/utils/error-mapping.js +38 -0
  251. package/dist/utils/index.d.ts +7 -0
  252. package/dist/utils/index.d.ts.map +1 -0
  253. package/dist/utils/index.js +6 -0
  254. package/dist/utils/response.d.ts +21 -0
  255. package/dist/utils/response.d.ts.map +1 -0
  256. package/dist/utils/response.js +84 -0
  257. package/dist/utils/sensitive-data.d.ts +9 -0
  258. package/dist/utils/sensitive-data.d.ts.map +1 -0
  259. package/dist/utils/sensitive-data.js +56 -0
  260. package/dist/utils/ssr.d.ts +38 -0
  261. package/dist/utils/ssr.d.ts.map +1 -0
  262. package/dist/utils/ssr.js +73 -0
  263. package/dist/utils/webauthn-converters.d.ts +9 -0
  264. package/dist/utils/webauthn-converters.d.ts.map +1 -0
  265. package/dist/utils/webauthn-converters.js +75 -0
  266. package/package.json +111 -0
@@ -0,0 +1,83 @@
1
+ <!--
2
+ AuthLoading Component
3
+ Loading indicator with optional message and refined animation
4
+ -->
5
+ <script lang="ts">
6
+ import type { Size } from '../types.js';
7
+ import Spinner from '../shared/Spinner.svelte';
8
+
9
+ export let message = '';
10
+ export let size: Size = 'md';
11
+ let className = '';
12
+ export { className as class };
13
+ </script>
14
+
15
+ <div
16
+ class="authrim-loading authrim-loading--{size} {className}"
17
+ role="status"
18
+ aria-live="polite"
19
+ {...$$restProps}
20
+ >
21
+ <div class="authrim-loading__spinner">
22
+ <Spinner {size} />
23
+ </div>
24
+ {#if message}
25
+ <p class="authrim-loading__message">{message}</p>
26
+ {/if}
27
+ <span class="authrim-sr-only">Loading</span>
28
+ </div>
29
+
30
+ <style>
31
+ .authrim-loading {
32
+ display: flex;
33
+ flex-direction: column;
34
+ align-items: center;
35
+ justify-content: center;
36
+ gap: var(--authrim-space-4);
37
+ padding: var(--authrim-space-6);
38
+ animation: fade-in var(--authrim-duration-normal) var(--authrim-ease-out);
39
+ }
40
+
41
+ @keyframes fade-in {
42
+ from { opacity: 0; }
43
+ to { opacity: 1; }
44
+ }
45
+
46
+ .authrim-loading--sm {
47
+ gap: var(--authrim-space-3);
48
+ padding: var(--authrim-space-4);
49
+ }
50
+
51
+ .authrim-loading--lg {
52
+ gap: var(--authrim-space-5);
53
+ padding: var(--authrim-space-8);
54
+ }
55
+
56
+ .authrim-loading__spinner {
57
+ color: var(--authrim-color-primary);
58
+ }
59
+
60
+ .authrim-loading__message {
61
+ margin: 0;
62
+ font-size: var(--authrim-text-sm);
63
+ color: var(--authrim-color-text-secondary);
64
+ text-align: center;
65
+ letter-spacing: var(--authrim-tracking-tight);
66
+ }
67
+
68
+ .authrim-loading--lg .authrim-loading__message {
69
+ font-size: var(--authrim-text-base);
70
+ }
71
+
72
+ .authrim-sr-only {
73
+ position: absolute;
74
+ width: 1px;
75
+ height: 1px;
76
+ padding: 0;
77
+ margin: -1px;
78
+ overflow: hidden;
79
+ clip: rect(0, 0, 0, 0);
80
+ white-space: nowrap;
81
+ border: 0;
82
+ }
83
+ </style>
@@ -0,0 +1,25 @@
1
+ import type { Size } from '../types.js';
2
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
+ $$bindings?: Bindings;
5
+ } & Exports;
6
+ (internal: unknown, props: Props & {
7
+ $$events?: Events;
8
+ $$slots?: Slots;
9
+ }): Exports & {
10
+ $set?: any;
11
+ $on?: any;
12
+ };
13
+ z_$$bindings?: Bindings;
14
+ }
15
+ declare const AuthLoading: $$__sveltets_2_IsomorphicComponent<{
16
+ [x: string]: any;
17
+ message?: string | undefined;
18
+ size?: Size | undefined;
19
+ class?: string | undefined;
20
+ }, {
21
+ [evt: string]: CustomEvent<any>;
22
+ }, {}, {}, string>;
23
+ type AuthLoading = InstanceType<typeof AuthLoading>;
24
+ export default AuthLoading;
25
+ //# sourceMappingURL=AuthLoading.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthLoading.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/ui/helpers/AuthLoading.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AA4BxC,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,WAAW;;;WAVuF,IAAI;;;;kBAUW,CAAC;AACtG,KAAK,WAAW,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;AACtD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,214 @@
1
+ <!--
2
+ OTPInput Component
3
+ Segmented one-time password input with satisfying interactions
4
+ -->
5
+ <script lang="ts">
6
+ import { createEventDispatcher, onMount } from 'svelte';
7
+
8
+ export let length = 6;
9
+ export let value = '';
10
+ export let disabled = false;
11
+ export let autoFocus = true;
12
+ export let error = false;
13
+ let className = '';
14
+ export { className as class };
15
+
16
+ const dispatch = createEventDispatcher<{
17
+ input: { value: string };
18
+ complete: { value: string };
19
+ }>();
20
+
21
+ let inputs: HTMLInputElement[] = [];
22
+ let digits: string[] = [];
23
+ let activeIndex = -1;
24
+
25
+ $: {
26
+ digits = value.split('').slice(0, length);
27
+ while (digits.length < length) digits.push('');
28
+ }
29
+
30
+ onMount(() => {
31
+ if (autoFocus && inputs[0] && !disabled) {
32
+ inputs[0].focus();
33
+ }
34
+ });
35
+
36
+ function handleInput(index: number, event: Event) {
37
+ const input = event.target as HTMLInputElement;
38
+ const inputValue = input.value.replace(/\D/g, '');
39
+
40
+ if (inputValue.length === 1) {
41
+ digits[index] = inputValue;
42
+ updateValue();
43
+ if (index < length - 1) inputs[index + 1]?.focus();
44
+ } else if (inputValue.length > 1) {
45
+ const chars = inputValue.split('').slice(0, length - index);
46
+ chars.forEach((char, i) => {
47
+ if (index + i < length) digits[index + i] = char;
48
+ });
49
+ updateValue();
50
+ const next = Math.min(index + chars.length, length - 1);
51
+ inputs[next]?.focus();
52
+ }
53
+ }
54
+
55
+ function handleKeyDown(index: number, event: KeyboardEvent) {
56
+ if (event.key === 'Backspace') {
57
+ event.preventDefault();
58
+ if (digits[index]) {
59
+ digits[index] = '';
60
+ updateValue();
61
+ } else if (index > 0) {
62
+ inputs[index - 1]?.focus();
63
+ digits[index - 1] = '';
64
+ updateValue();
65
+ }
66
+ } else if (event.key === 'ArrowLeft' && index > 0) {
67
+ event.preventDefault();
68
+ inputs[index - 1]?.focus();
69
+ } else if (event.key === 'ArrowRight' && index < length - 1) {
70
+ event.preventDefault();
71
+ inputs[index + 1]?.focus();
72
+ }
73
+ }
74
+
75
+ function handlePaste(event: ClipboardEvent) {
76
+ event.preventDefault();
77
+ const pasted = event.clipboardData?.getData('text').replace(/\D/g, '');
78
+ if (pasted) {
79
+ const chars = pasted.split('').slice(0, length);
80
+ chars.forEach((char, i) => (digits[i] = char));
81
+ for (let i = chars.length; i < length; i++) digits[i] = '';
82
+ updateValue();
83
+ inputs[Math.min(chars.length, length - 1)]?.focus();
84
+ }
85
+ }
86
+
87
+ function handleFocus(index: number) {
88
+ activeIndex = index;
89
+ inputs[index]?.select();
90
+ }
91
+
92
+ function handleBlur() {
93
+ activeIndex = -1;
94
+ }
95
+
96
+ function updateValue() {
97
+ value = digits.join('');
98
+ dispatch('input', { value });
99
+ if (value.length === length && !digits.includes('')) {
100
+ dispatch('complete', { value });
101
+ }
102
+ }
103
+ </script>
104
+
105
+ <div
106
+ class="authrim-otp {className}"
107
+ class:authrim-otp--error={error}
108
+ role="group"
109
+ aria-label="Verification code"
110
+ {...$$restProps}
111
+ >
112
+ {#each Array(length) as _, index}
113
+ <input
114
+ bind:this={inputs[index]}
115
+ type="text"
116
+ inputmode="numeric"
117
+ autocomplete="one-time-code"
118
+ maxlength="1"
119
+ value={digits[index]}
120
+ {disabled}
121
+ class="authrim-otp__digit"
122
+ class:authrim-otp__digit--filled={digits[index]}
123
+ class:authrim-otp__digit--active={activeIndex === index}
124
+ aria-label="Digit {index + 1} of {length}"
125
+ on:input={(e) => handleInput(index, e)}
126
+ on:keydown={(e) => handleKeyDown(index, e)}
127
+ on:paste={handlePaste}
128
+ on:focus={() => handleFocus(index)}
129
+ on:blur={handleBlur}
130
+ />
131
+ {/each}
132
+ </div>
133
+
134
+ <style>
135
+ .authrim-otp {
136
+ display: flex;
137
+ gap: var(--authrim-space-2);
138
+ justify-content: center;
139
+ }
140
+
141
+ .authrim-otp__digit {
142
+ width: 52px;
143
+ height: 64px;
144
+ padding: 0;
145
+ font-family: var(--authrim-font-mono);
146
+ font-size: var(--authrim-text-2xl);
147
+ font-weight: 600;
148
+ text-align: center;
149
+ background: var(--authrim-color-bg);
150
+ border: 2px solid var(--authrim-color-border);
151
+ border-radius: var(--authrim-radius-md);
152
+ color: var(--authrim-color-text);
153
+ caret-color: var(--authrim-color-primary);
154
+ transition:
155
+ border-color var(--authrim-duration-fast) var(--authrim-ease-default),
156
+ box-shadow var(--authrim-duration-fast) var(--authrim-ease-default),
157
+ transform var(--authrim-duration-fast) var(--authrim-ease-bounce);
158
+ }
159
+
160
+ .authrim-otp__digit:hover:not(:disabled):not(:focus) {
161
+ border-color: var(--authrim-color-border-strong);
162
+ }
163
+
164
+ .authrim-otp__digit:focus {
165
+ outline: none;
166
+ border-color: var(--authrim-color-primary);
167
+ box-shadow: var(--authrim-shadow-focus);
168
+ }
169
+
170
+ .authrim-otp__digit--filled {
171
+ border-color: var(--authrim-color-border-strong);
172
+ animation: digit-pop var(--authrim-duration-fast) var(--authrim-ease-bounce);
173
+ }
174
+
175
+ @keyframes digit-pop {
176
+ 0% { transform: scale(1); }
177
+ 50% { transform: scale(1.05); }
178
+ 100% { transform: scale(1); }
179
+ }
180
+
181
+ .authrim-otp__digit--active {
182
+ border-color: var(--authrim-color-primary);
183
+ }
184
+
185
+ .authrim-otp__digit:disabled {
186
+ background: var(--authrim-color-bg-subtle);
187
+ color: var(--authrim-color-text-muted);
188
+ cursor: not-allowed;
189
+ }
190
+
191
+ .authrim-otp--error .authrim-otp__digit {
192
+ border-color: var(--authrim-color-error);
193
+ animation: shake 0.4s ease-in-out;
194
+ }
195
+
196
+ .authrim-otp--error .authrim-otp__digit:focus {
197
+ box-shadow: var(--authrim-shadow-focus-error);
198
+ }
199
+
200
+ @keyframes shake {
201
+ 0%, 100% { transform: translateX(0); }
202
+ 20%, 60% { transform: translateX(-3px); }
203
+ 40%, 80% { transform: translateX(3px); }
204
+ }
205
+
206
+ /* Responsive */
207
+ @media (max-width: 420px) {
208
+ .authrim-otp__digit {
209
+ width: 44px;
210
+ height: 56px;
211
+ font-size: var(--authrim-text-xl);
212
+ }
213
+ }
214
+ </style>
@@ -0,0 +1,34 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const OTPInput: $$__sveltets_2_IsomorphicComponent<{
15
+ [x: string]: any;
16
+ length?: number | undefined;
17
+ value?: string | undefined;
18
+ disabled?: boolean | undefined;
19
+ autoFocus?: boolean | undefined;
20
+ error?: boolean | undefined;
21
+ class?: string | undefined;
22
+ }, {
23
+ input: CustomEvent<{
24
+ value: string;
25
+ }>;
26
+ complete: CustomEvent<{
27
+ value: string;
28
+ }>;
29
+ } & {
30
+ [evt: string]: CustomEvent<any>;
31
+ }, {}, {}, string>;
32
+ type OTPInput = InstanceType<typeof OTPInput>;
33
+ export default OTPInput;
34
+ //# sourceMappingURL=OTPInput.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OTPInput.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/ui/helpers/OTPInput.svelte.ts"],"names":[],"mappings":"AAuHA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,QAAQ;;;;;;;;;;eAZM,MAAM;;;eACH,MAAM;;;;kBAWuF,CAAC;AACnG,KAAK,QAAQ,GAAG,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC;AAChD,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,140 @@
1
+ <!--
2
+ ResendCodeButton Component
3
+ Button to resend verification code with countdown
4
+ -->
5
+ <script lang="ts">
6
+ import { createEventDispatcher, onDestroy } from 'svelte';
7
+
8
+ export let disabled = false;
9
+ export let remainingTime = 0;
10
+ export let text = 'Resend code';
11
+ export let loading = false;
12
+ let className = '';
13
+ export { className as class };
14
+
15
+ const dispatch = createEventDispatcher<{ click: void }>();
16
+
17
+ let displayTime = remainingTime;
18
+ let interval: ReturnType<typeof setInterval> | null = null;
19
+
20
+ // Reactive statement: Restart countdown when remainingTime prop changes from parent.
21
+ // This allows parent to reset the countdown (e.g., after successful resend).
22
+ // We always stop existing countdown first to prevent timer leaks.
23
+ $: {
24
+ stopCountdown();
25
+ displayTime = remainingTime;
26
+ if (remainingTime > 0) {
27
+ startCountdown();
28
+ }
29
+ }
30
+
31
+ function startCountdown() {
32
+ interval = setInterval(() => {
33
+ displayTime -= 1;
34
+ if (displayTime <= 0) stopCountdown();
35
+ }, 1000);
36
+ }
37
+
38
+ function stopCountdown() {
39
+ if (interval) {
40
+ clearInterval(interval);
41
+ interval = null;
42
+ }
43
+ }
44
+
45
+ function handleClick() {
46
+ if (!disabled && displayTime <= 0 && !loading) {
47
+ dispatch('click');
48
+ }
49
+ }
50
+
51
+ function formatTime(seconds: number): string {
52
+ const m = Math.floor(seconds / 60);
53
+ const s = seconds % 60;
54
+ return m > 0 ? `${m}:${s.toString().padStart(2, '0')}` : `${s}s`;
55
+ }
56
+
57
+ onDestroy(stopCountdown);
58
+ </script>
59
+
60
+ <button
61
+ type="button"
62
+ class="authrim-resend {className}"
63
+ class:authrim-resend--loading={loading}
64
+ disabled={disabled || displayTime > 0 || loading}
65
+ on:click={handleClick}
66
+ {...$$restProps}
67
+ >
68
+ {#if loading}
69
+ <span class="authrim-resend__spinner"></span>
70
+ {/if}
71
+ <span class="authrim-resend__text" class:authrim-resend__text--hidden={loading}>
72
+ {#if displayTime > 0}
73
+ {text} ({formatTime(displayTime)})
74
+ {:else}
75
+ {text}
76
+ {/if}
77
+ </span>
78
+ </button>
79
+
80
+ <style>
81
+ .authrim-resend {
82
+ position: relative;
83
+ display: inline-flex;
84
+ align-items: center;
85
+ justify-content: center;
86
+ gap: var(--authrim-space-2);
87
+ padding: var(--authrim-space-2) var(--authrim-space-3);
88
+ font-family: var(--authrim-font-sans);
89
+ font-size: var(--authrim-text-sm);
90
+ font-weight: 500;
91
+ color: var(--authrim-color-primary);
92
+ background: transparent;
93
+ border: none;
94
+ border-radius: var(--authrim-radius-sm);
95
+ cursor: pointer;
96
+ transition:
97
+ color var(--authrim-duration-fast) var(--authrim-ease-default),
98
+ background-color var(--authrim-duration-fast) var(--authrim-ease-default);
99
+ }
100
+
101
+ .authrim-resend:hover:not(:disabled) {
102
+ background: var(--authrim-color-primary-subtle);
103
+ }
104
+
105
+ .authrim-resend:focus-visible {
106
+ outline: none;
107
+ box-shadow: var(--authrim-shadow-focus);
108
+ }
109
+
110
+ .authrim-resend:disabled {
111
+ color: var(--authrim-color-text-muted);
112
+ cursor: not-allowed;
113
+ }
114
+
115
+ .authrim-resend:disabled:not(.authrim-resend--loading) {
116
+ opacity: 0.7;
117
+ }
118
+
119
+ .authrim-resend__spinner {
120
+ position: absolute;
121
+ width: 16px;
122
+ height: 16px;
123
+ border: 2px solid var(--authrim-color-primary-subtle);
124
+ border-top-color: var(--authrim-color-primary);
125
+ border-radius: 50%;
126
+ animation: spin 0.8s linear infinite;
127
+ }
128
+
129
+ @keyframes spin {
130
+ to { transform: rotate(360deg); }
131
+ }
132
+
133
+ .authrim-resend__text {
134
+ transition: opacity var(--authrim-duration-fast) var(--authrim-ease-default);
135
+ }
136
+
137
+ .authrim-resend__text--hidden {
138
+ opacity: 0;
139
+ }
140
+ </style>
@@ -0,0 +1,28 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const ResendCodeButton: $$__sveltets_2_IsomorphicComponent<{
15
+ [x: string]: any;
16
+ disabled?: boolean | undefined;
17
+ remainingTime?: number | undefined;
18
+ text?: string | undefined;
19
+ loading?: boolean | undefined;
20
+ class?: string | undefined;
21
+ }, {
22
+ click: CustomEvent<void>;
23
+ } & {
24
+ [evt: string]: CustomEvent<any>;
25
+ }, {}, {}, string>;
26
+ type ResendCodeButton = InstanceType<typeof ResendCodeButton>;
27
+ export default ResendCodeButton;
28
+ //# sourceMappingURL=ResendCodeButton.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResendCodeButton.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/ui/helpers/ResendCodeButton.svelte.ts"],"names":[],"mappings":"AA6EA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,gBAAgB;;;;;;;;;;;kBAAsG,CAAC;AAC3G,KAAK,gBAAgB,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAChE,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Authrim UI Helper Components
3
+ */
4
+ export { default as AuthLoading } from './AuthLoading.svelte';
5
+ export { default as AuthError } from './AuthError.svelte';
6
+ export { default as OTPInput } from './OTPInput.svelte';
7
+ export { default as ResendCodeButton } from './ResendCodeButton.svelte';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/ui/helpers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Authrim UI Helper Components
3
+ */
4
+ export { default as AuthLoading } from './AuthLoading.svelte';
5
+ export { default as AuthError } from './AuthError.svelte';
6
+ export { default as OTPInput } from './OTPInput.svelte';
7
+ export { default as ResendCodeButton } from './ResendCodeButton.svelte';
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @authrim/sveltekit UI Components
3
+ *
4
+ * Styled, accessible UI components for authentication flows.
5
+ * These components are thin facades - they handle styling and events,
6
+ * while parent components control auth API calls.
7
+ *
8
+ * @example
9
+ * ```svelte
10
+ * <script>
11
+ * import { getAuthContext } from '@authrim/sveltekit';
12
+ * import { SocialLoginButtons, AuthError } from '@authrim/sveltekit/ui';
13
+ *
14
+ * const auth = getAuthContext();
15
+ * let loading = false;
16
+ * let error = null;
17
+ *
18
+ * async function handleSocialClick(e) {
19
+ * const { provider } = e.detail;
20
+ * loading = true;
21
+ * const result = await auth.social.loginWithPopup(provider);
22
+ * if (result.error) error = result.error.message;
23
+ * loading = false;
24
+ * }
25
+ * </script>
26
+ *
27
+ * <SocialLoginButtons
28
+ * providers={['google', 'github']}
29
+ * {loading}
30
+ * on:click={handleSocialClick}
31
+ * />
32
+ * {#if error}<AuthError message={error} on:dismiss={() => error = null} />{/if}
33
+ * ```
34
+ */
35
+ export type { Size, Variant, EmailCodeStep, AlertVariant, PasskeyItemDisplay, SessionItemDisplay, LinkedAccountDisplay, EmailSubmitEvent, CodeSubmitEvent, SocialClickEvent, PasskeyDeleteEvent, SessionRevokeEvent, AccountUnlinkEvent, ConsentAllowEvent, OrgChangeEvent, DeviceCodeEvent, DeviceCodeChangeEvent, CIBAApproveEvent, CIBADenyEvent, ReauthEvent, ReauthSocialEvent, LanguageChangeEvent, } from "./types.js";
36
+ export { type Theme, type ThemeContext, THEME_CONTEXT_KEY, createThemeContext, getThemeContext, hasThemeContext, loadSavedTheme, } from "./context.js";
37
+ export { Button, Input, Card, Spinner, Badge, Alert, Dialog, LanguageSwitcher, CountdownTimer, } from "./shared/index.js";
38
+ export { AuthLoading, AuthError, OTPInput, ResendCodeButton, } from "./helpers/index.js";
39
+ export { EmailCodeForm, PasskeyConditionalInput, SocialLoginButtons, ConsentScopesList, OrgSelector, ClientInfo, UserCodeInput, QRCodeDisplay, CIBARequestCard, } from "./forms/index.js";
40
+ export { PasskeyList, PasskeyRegisterButton, PasskeyDeleteButton, } from "./passkey/index.js";
41
+ export { SessionList, SessionRevokeButton, SessionExpiryIndicator, } from "./session/index.js";
42
+ export { LinkedAccountsList, LinkAccountButton, UnlinkAccountButton, } from "./account/index.js";
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,YAAY,EACV,IAAI,EACJ,OAAO,EACP,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,MAAM,EACN,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAK,EACL,MAAM,EACN,gBAAgB,EAChB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @authrim/sveltekit UI Components
3
+ *
4
+ * Styled, accessible UI components for authentication flows.
5
+ * These components are thin facades - they handle styling and events,
6
+ * while parent components control auth API calls.
7
+ *
8
+ * @example
9
+ * ```svelte
10
+ * <script>
11
+ * import { getAuthContext } from '@authrim/sveltekit';
12
+ * import { SocialLoginButtons, AuthError } from '@authrim/sveltekit/ui';
13
+ *
14
+ * const auth = getAuthContext();
15
+ * let loading = false;
16
+ * let error = null;
17
+ *
18
+ * async function handleSocialClick(e) {
19
+ * const { provider } = e.detail;
20
+ * loading = true;
21
+ * const result = await auth.social.loginWithPopup(provider);
22
+ * if (result.error) error = result.error.message;
23
+ * loading = false;
24
+ * }
25
+ * </script>
26
+ *
27
+ * <SocialLoginButtons
28
+ * providers={['google', 'github']}
29
+ * {loading}
30
+ * on:click={handleSocialClick}
31
+ * />
32
+ * {#if error}<AuthError message={error} on:dismiss={() => error = null} />{/if}
33
+ * ```
34
+ */
35
+ // Context
36
+ export { THEME_CONTEXT_KEY, createThemeContext, getThemeContext, hasThemeContext, loadSavedTheme, } from "./context.js";
37
+ // Shared Components
38
+ export { Button, Input, Card, Spinner, Badge, Alert, Dialog, LanguageSwitcher, CountdownTimer, } from "./shared/index.js";
39
+ // Helper Components
40
+ export { AuthLoading, AuthError, OTPInput, ResendCodeButton, } from "./helpers/index.js";
41
+ // Form Components
42
+ export { EmailCodeForm, PasskeyConditionalInput, SocialLoginButtons, ConsentScopesList, OrgSelector, ClientInfo, UserCodeInput, QRCodeDisplay, CIBARequestCard, } from "./forms/index.js";
43
+ // Passkey Components
44
+ export { PasskeyList, PasskeyRegisterButton, PasskeyDeleteButton, } from "./passkey/index.js";
45
+ // Session Components
46
+ export { SessionList, SessionRevokeButton, SessionExpiryIndicator, } from "./session/index.js";
47
+ // Account Components
48
+ export { LinkedAccountsList, LinkAccountButton, UnlinkAccountButton, } from "./account/index.js";