@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,549 @@
1
+ <!--
2
+ ConsentTemplate
3
+ - 認可UIの「枠」を提供する
4
+ - ポリシー判断・遷移はSDK hook側に委譲する
5
+ - スコープ表示とユーザー選択のUIのみ担当
6
+ -->
7
+ <script lang="ts">
8
+ import { createEventDispatcher } from "svelte";
9
+ import Card from "../shared/Card.svelte";
10
+ import Button from "../shared/Button.svelte";
11
+ import Alert from "../shared/Alert.svelte";
12
+ import Spinner from "../shared/Spinner.svelte";
13
+ import ClientInfo from "../forms/ClientInfo.svelte";
14
+ import ConsentScopesList from "../forms/ConsentScopesList.svelte";
15
+ import OrgSelector from "../forms/OrgSelector.svelte";
16
+ import type { ClientInfoData } from "../forms/ClientInfo.svelte";
17
+ import type { ScopeItem } from "../forms/ConsentScopesList.svelte";
18
+ import type { OrgItem } from "../forms/OrgSelector.svelte";
19
+
20
+ // Data props
21
+ export let client: ClientInfoData | null = null;
22
+ export let scopes: ScopeItem[] = [];
23
+ export let scopeLabelMap: Record<string, string> = {};
24
+ export let user: {
25
+ id: string;
26
+ email: string;
27
+ name?: string;
28
+ picture?: string;
29
+ } | null = null;
30
+ export let organizations: OrgItem[] = [];
31
+ export let selectedOrgId: string | null = null;
32
+ export let roles: string[] = [];
33
+ export let actingAs: {
34
+ id: string;
35
+ name?: string;
36
+ email: string;
37
+ relationship_type: string;
38
+ permission_level: string;
39
+ } | null = null;
40
+
41
+ // Feature flags
42
+ export let showOrgSelector = false;
43
+ export let showActingAs = false;
44
+ export let showRoles = false;
45
+
46
+ // State props
47
+ export let loading = false;
48
+ export let allowLoading = false;
49
+ export let denyLoading = false;
50
+ export let error = "";
51
+
52
+ // Labels (i18n support)
53
+ export let title = "";
54
+ export let subtitle = "This application is requesting access to your account";
55
+ export let scopesTitle = "This application will be able to:";
56
+ export let userInfoLabel = "Signed in as";
57
+ export let switchAccountLabel = "Not you?";
58
+ export let orgLabel = "Organization";
59
+ export let primaryOrgLabel = "Primary";
60
+ export let rolesLabel = "Your roles";
61
+ export let actingAsTitle = "Delegated Access";
62
+ export let actingAsWarning = "";
63
+ export let allowLabel = "Allow";
64
+ export let denyLabel = "Deny";
65
+ export let trustedLabel = "Trusted";
66
+ export let privacyPolicyLabel = "Privacy Policy";
67
+ export let termsLabel = "Terms of Service";
68
+
69
+ let className = "";
70
+ export { className as class };
71
+
72
+ const dispatch = createEventDispatcher<{
73
+ allow: { selectedOrgId: string | null; actingAsUserId?: string };
74
+ deny: void;
75
+ "switch-account": void;
76
+ "org-change": { orgId: string | null };
77
+ "dismiss-error": void;
78
+ }>();
79
+
80
+ function handleAllow() {
81
+ dispatch("allow", {
82
+ selectedOrgId,
83
+ actingAsUserId: actingAs?.id,
84
+ });
85
+ }
86
+
87
+ function handleOrgChange(e: CustomEvent<{ orgId: string | null }>) {
88
+ selectedOrgId = e.detail.orgId;
89
+ dispatch("org-change", e.detail);
90
+ }
91
+
92
+ $: selectedOrg = organizations.find((o) => o.id === selectedOrgId) || null;
93
+ </script>
94
+
95
+ <div class="authrim-consent-template {className}">
96
+ {#if loading}
97
+ <Card padding="lg" shadow="lg" class="authrim-consent-template__card">
98
+ <div class="authrim-consent-template__loading">
99
+ <Spinner size="lg" />
100
+ <p class="authrim-consent-template__loading-text">Loading...</p>
101
+ </div>
102
+ </Card>
103
+ {:else if client}
104
+ <Card padding="lg" shadow="lg" class="authrim-consent-template__card">
105
+ {#if title}
106
+ <h2 class="authrim-consent-template__title">{title}</h2>
107
+ {/if}
108
+ <!-- Client info -->
109
+ <ClientInfo {client} {trustedLabel} {privacyPolicyLabel} {termsLabel} />
110
+
111
+ <p class="authrim-consent-template__subtitle">{subtitle}</p>
112
+
113
+ {#if error}
114
+ <Alert
115
+ variant="error"
116
+ dismissible
117
+ on:dismiss={() => dispatch("dismiss-error")}
118
+ >
119
+ {error}
120
+ </Alert>
121
+ {/if}
122
+
123
+ <!-- Acting-As Warning -->
124
+ {#if actingAs && showActingAs}
125
+ <div class="authrim-consent-template__acting-as">
126
+ <svg
127
+ class="authrim-consent-template__acting-as-icon"
128
+ viewBox="0 0 20 20"
129
+ fill="currentColor"
130
+ >
131
+ <path
132
+ fill-rule="evenodd"
133
+ d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 6a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 6zm0 9a1 1 0 100-2 1 1 0 000 2z"
134
+ clip-rule="evenodd"
135
+ />
136
+ </svg>
137
+ <div>
138
+ <p class="authrim-consent-template__acting-as-title">
139
+ {actingAsTitle}
140
+ </p>
141
+ <p class="authrim-consent-template__acting-as-name">
142
+ Acting on behalf of {actingAs.name || actingAs.email}
143
+ </p>
144
+ {#if actingAsWarning}
145
+ <p class="authrim-consent-template__acting-as-warn">
146
+ {actingAsWarning}
147
+ </p>
148
+ {/if}
149
+ </div>
150
+ </div>
151
+ {/if}
152
+
153
+ <div class="authrim-consent-template__body">
154
+ <!-- Organization Selector -->
155
+ {#if showOrgSelector && organizations.length > 1}
156
+ <OrgSelector
157
+ {organizations}
158
+ {selectedOrgId}
159
+ label={orgLabel}
160
+ primaryLabel={primaryOrgLabel}
161
+ on:change={handleOrgChange}
162
+ />
163
+ {:else if selectedOrg}
164
+ <div class="authrim-consent-template__org-display">
165
+ <p class="authrim-consent-template__org-label">{orgLabel}</p>
166
+ <p class="authrim-consent-template__org-name">
167
+ {selectedOrg.name}
168
+ {#if selectedOrg.is_primary}
169
+ <span class="authrim-consent-template__org-primary"
170
+ >({primaryOrgLabel})</span
171
+ >
172
+ {/if}
173
+ </p>
174
+ </div>
175
+ {/if}
176
+
177
+ <!-- Roles -->
178
+ {#if showRoles && roles.length > 0}
179
+ <div class="authrim-consent-template__roles">
180
+ <p class="authrim-consent-template__roles-label">{rolesLabel}</p>
181
+ <div class="authrim-consent-template__roles-list">
182
+ {#each roles as role (role)}
183
+ <span class="authrim-consent-template__role-badge">{role}</span>
184
+ {/each}
185
+ </div>
186
+ </div>
187
+ {/if}
188
+
189
+ <!-- Scopes -->
190
+ <div class="authrim-consent-template__scopes-section">
191
+ <h3 class="authrim-consent-template__scopes-title">{scopesTitle}</h3>
192
+ <ConsentScopesList {scopes} labelMap={scopeLabelMap} />
193
+ </div>
194
+
195
+ <!-- User Info -->
196
+ {#if user}
197
+ <div class="authrim-consent-template__user">
198
+ <p class="authrim-consent-template__user-label">{userInfoLabel}</p>
199
+ <div class="authrim-consent-template__user-info">
200
+ {#if user.picture}
201
+ <img
202
+ src={user.picture}
203
+ alt={user.name || user.email}
204
+ class="authrim-consent-template__user-avatar"
205
+ />
206
+ {:else}
207
+ <div class="authrim-consent-template__user-avatar-placeholder">
208
+ <svg viewBox="0 0 20 20" fill="currentColor">
209
+ <path
210
+ d="M10 8a3 3 0 100-6 3 3 0 000 6zM3.465 14.493a1.23 1.23 0 00.41 1.412A9.957 9.957 0 0010 18c2.31 0 4.438-.784 6.131-2.1.43-.333.604-.903.408-1.41a7.002 7.002 0 00-13.074.003z"
211
+ />
212
+ </svg>
213
+ </div>
214
+ {/if}
215
+ <div>
216
+ {#if user.name}
217
+ <p class="authrim-consent-template__user-name">{user.name}</p>
218
+ {/if}
219
+ <p class="authrim-consent-template__user-email">{user.email}</p>
220
+ </div>
221
+ </div>
222
+ <button
223
+ type="button"
224
+ class="authrim-consent-template__switch-account"
225
+ on:click={() => dispatch("switch-account")}
226
+ >
227
+ {switchAccountLabel}
228
+ </button>
229
+ </div>
230
+ {/if}
231
+ </div>
232
+
233
+ <!-- Actions -->
234
+ <div class="authrim-consent-template__actions">
235
+ <Button
236
+ variant="secondary"
237
+ fullWidth
238
+ loading={denyLoading}
239
+ disabled={allowLoading}
240
+ on:click={() => dispatch("deny")}
241
+ >
242
+ {denyLabel}
243
+ </Button>
244
+ <Button
245
+ variant="primary"
246
+ fullWidth
247
+ loading={allowLoading}
248
+ disabled={denyLoading}
249
+ on:click={handleAllow}
250
+ >
251
+ {allowLabel}
252
+ </Button>
253
+ </div>
254
+ </Card>
255
+ {:else}
256
+ <!-- Error: no data -->
257
+ <Card padding="lg" shadow="lg" class="authrim-consent-template__card">
258
+ <div class="authrim-consent-template__error">
259
+ <svg
260
+ viewBox="0 0 20 20"
261
+ fill="currentColor"
262
+ class="authrim-consent-template__error-icon"
263
+ >
264
+ <path
265
+ fill-rule="evenodd"
266
+ d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z"
267
+ clip-rule="evenodd"
268
+ />
269
+ </svg>
270
+ <p class="authrim-consent-template__error-text">
271
+ {error || "Failed to load consent data"}
272
+ </p>
273
+ </div>
274
+ </Card>
275
+ {/if}
276
+ </div>
277
+
278
+ <style>
279
+ .authrim-consent-template {
280
+ display: flex;
281
+ justify-content: center;
282
+ align-items: center;
283
+ min-height: 100vh;
284
+ padding: var(--authrim-space-4);
285
+ background: linear-gradient(
286
+ 135deg,
287
+ var(--authrim-color-bg-subtle) 0%,
288
+ var(--authrim-color-bg) 100%
289
+ );
290
+ }
291
+
292
+ :global(.authrim-consent-template__card) {
293
+ width: 100%;
294
+ max-width: 560px;
295
+ }
296
+
297
+ .authrim-consent-template__title {
298
+ margin: 0 0 var(--authrim-space-4);
299
+ text-align: center;
300
+ font-family: var(--authrim-font-sans);
301
+ font-size: var(--authrim-text-xl);
302
+ font-weight: 600;
303
+ color: var(--authrim-color-text);
304
+ }
305
+
306
+ .authrim-consent-template__subtitle {
307
+ margin: var(--authrim-space-2) 0 0;
308
+ text-align: center;
309
+ font-family: var(--authrim-font-sans);
310
+ font-size: var(--authrim-text-sm);
311
+ color: var(--authrim-color-text-secondary);
312
+ }
313
+
314
+ .authrim-consent-template__loading {
315
+ display: flex;
316
+ flex-direction: column;
317
+ align-items: center;
318
+ gap: var(--authrim-space-4);
319
+ padding: var(--authrim-space-8) 0;
320
+ }
321
+
322
+ .authrim-consent-template__loading-text {
323
+ margin: 0;
324
+ font-family: var(--authrim-font-sans);
325
+ font-size: var(--authrim-text-sm);
326
+ color: var(--authrim-color-text-muted);
327
+ }
328
+
329
+ .authrim-consent-template__acting-as {
330
+ display: flex;
331
+ gap: var(--authrim-space-3);
332
+ padding: var(--authrim-space-4);
333
+ margin-top: var(--authrim-space-4);
334
+ background: var(--authrim-color-warning-subtle, #fffbeb);
335
+ border: 1px solid var(--authrim-color-warning, #f59e0b);
336
+ border-radius: var(--authrim-radius-md);
337
+ }
338
+
339
+ .authrim-consent-template__acting-as-icon {
340
+ flex-shrink: 0;
341
+ width: 20px;
342
+ height: 20px;
343
+ margin-top: 1px;
344
+ color: var(--authrim-color-warning, #f59e0b);
345
+ }
346
+
347
+ .authrim-consent-template__acting-as-title {
348
+ margin: 0;
349
+ font-family: var(--authrim-font-sans);
350
+ font-size: var(--authrim-text-sm);
351
+ font-weight: 500;
352
+ color: var(--authrim-color-warning-text, #92400e);
353
+ }
354
+
355
+ .authrim-consent-template__acting-as-name {
356
+ margin: var(--authrim-space-1) 0 0;
357
+ font-family: var(--authrim-font-sans);
358
+ font-size: var(--authrim-text-sm);
359
+ color: var(--authrim-color-warning-text, #92400e);
360
+ }
361
+
362
+ .authrim-consent-template__acting-as-warn {
363
+ margin: var(--authrim-space-2) 0 0;
364
+ font-family: var(--authrim-font-sans);
365
+ font-size: var(--authrim-text-xs);
366
+ color: var(--authrim-color-warning-text, #92400e);
367
+ opacity: 0.8;
368
+ }
369
+
370
+ .authrim-consent-template__body {
371
+ display: flex;
372
+ flex-direction: column;
373
+ gap: var(--authrim-space-5);
374
+ margin-top: var(--authrim-space-5);
375
+ padding-top: var(--authrim-space-5);
376
+ border-top: 1px solid var(--authrim-color-border);
377
+ }
378
+
379
+ .authrim-consent-template__org-display {
380
+ padding: var(--authrim-space-3);
381
+ background: var(--authrim-color-bg-subtle);
382
+ border-radius: var(--authrim-radius-md);
383
+ }
384
+
385
+ .authrim-consent-template__org-label {
386
+ margin: 0;
387
+ font-family: var(--authrim-font-sans);
388
+ font-size: var(--authrim-text-xs);
389
+ color: var(--authrim-color-text-muted);
390
+ }
391
+
392
+ .authrim-consent-template__org-name {
393
+ margin: var(--authrim-space-1) 0 0;
394
+ font-family: var(--authrim-font-sans);
395
+ font-size: var(--authrim-text-sm);
396
+ font-weight: 500;
397
+ color: var(--authrim-color-text);
398
+ }
399
+
400
+ .authrim-consent-template__org-primary {
401
+ font-size: var(--authrim-text-xs);
402
+ color: var(--authrim-color-primary);
403
+ }
404
+
405
+ .authrim-consent-template__roles {
406
+ display: flex;
407
+ flex-direction: column;
408
+ gap: var(--authrim-space-2);
409
+ }
410
+
411
+ .authrim-consent-template__roles-label {
412
+ margin: 0;
413
+ font-family: var(--authrim-font-sans);
414
+ font-size: var(--authrim-text-xs);
415
+ color: var(--authrim-color-text-muted);
416
+ }
417
+
418
+ .authrim-consent-template__roles-list {
419
+ display: flex;
420
+ flex-wrap: wrap;
421
+ gap: var(--authrim-space-2);
422
+ }
423
+
424
+ .authrim-consent-template__role-badge {
425
+ font-family: var(--authrim-font-sans);
426
+ font-size: var(--authrim-text-xs);
427
+ font-weight: 500;
428
+ color: var(--authrim-color-primary);
429
+ background: var(--authrim-color-bg-subtle);
430
+ padding: 2px var(--authrim-space-2);
431
+ border-radius: var(--authrim-radius-full);
432
+ }
433
+
434
+ .authrim-consent-template__scopes-section {
435
+ display: flex;
436
+ flex-direction: column;
437
+ gap: var(--authrim-space-4);
438
+ }
439
+
440
+ .authrim-consent-template__scopes-title {
441
+ margin: 0;
442
+ font-family: var(--authrim-font-sans);
443
+ font-size: var(--authrim-text-sm);
444
+ font-weight: 500;
445
+ color: var(--authrim-color-text);
446
+ }
447
+
448
+ .authrim-consent-template__user {
449
+ padding: var(--authrim-space-4);
450
+ background: var(--authrim-color-bg-subtle);
451
+ border-radius: var(--authrim-radius-md);
452
+ }
453
+
454
+ .authrim-consent-template__user-label {
455
+ margin: 0 0 var(--authrim-space-2);
456
+ font-family: var(--authrim-font-sans);
457
+ font-size: var(--authrim-text-xs);
458
+ color: var(--authrim-color-text-muted);
459
+ }
460
+
461
+ .authrim-consent-template__user-info {
462
+ display: flex;
463
+ align-items: center;
464
+ gap: var(--authrim-space-3);
465
+ }
466
+
467
+ .authrim-consent-template__user-avatar {
468
+ width: 40px;
469
+ height: 40px;
470
+ border-radius: var(--authrim-radius-full);
471
+ object-fit: cover;
472
+ }
473
+
474
+ .authrim-consent-template__user-avatar-placeholder {
475
+ width: 40px;
476
+ height: 40px;
477
+ border-radius: var(--authrim-radius-full);
478
+ background: var(--authrim-color-bg-muted);
479
+ display: flex;
480
+ align-items: center;
481
+ justify-content: center;
482
+ color: var(--authrim-color-primary);
483
+ }
484
+
485
+ .authrim-consent-template__user-avatar-placeholder svg {
486
+ width: 20px;
487
+ height: 20px;
488
+ }
489
+
490
+ .authrim-consent-template__user-name {
491
+ margin: 0;
492
+ font-family: var(--authrim-font-sans);
493
+ font-size: var(--authrim-text-sm);
494
+ font-weight: 500;
495
+ color: var(--authrim-color-text);
496
+ }
497
+
498
+ .authrim-consent-template__user-email {
499
+ margin: 0;
500
+ font-family: var(--authrim-font-sans);
501
+ font-size: var(--authrim-text-sm);
502
+ color: var(--authrim-color-text-secondary);
503
+ }
504
+
505
+ .authrim-consent-template__switch-account {
506
+ margin-top: var(--authrim-space-2);
507
+ padding: 0;
508
+ background: transparent;
509
+ border: none;
510
+ font-family: var(--authrim-font-sans);
511
+ font-size: var(--authrim-text-xs);
512
+ color: var(--authrim-color-primary);
513
+ cursor: pointer;
514
+ transition: color var(--authrim-duration-fast) var(--authrim-ease-default);
515
+ }
516
+
517
+ .authrim-consent-template__switch-account:hover {
518
+ color: var(--authrim-color-primary-hover);
519
+ text-decoration: underline;
520
+ }
521
+
522
+ .authrim-consent-template__actions {
523
+ display: flex;
524
+ gap: var(--authrim-space-3);
525
+ margin-top: var(--authrim-space-5);
526
+ }
527
+
528
+ .authrim-consent-template__error {
529
+ display: flex;
530
+ flex-direction: column;
531
+ align-items: center;
532
+ gap: var(--authrim-space-4);
533
+ padding: var(--authrim-space-8) 0;
534
+ text-align: center;
535
+ }
536
+
537
+ .authrim-consent-template__error-icon {
538
+ width: 48px;
539
+ height: 48px;
540
+ color: var(--authrim-color-error);
541
+ }
542
+
543
+ .authrim-consent-template__error-text {
544
+ margin: 0;
545
+ font-family: var(--authrim-font-sans);
546
+ font-size: var(--authrim-text-sm);
547
+ color: var(--authrim-color-error);
548
+ }
549
+ </style>
@@ -0,0 +1,76 @@
1
+ import type { ClientInfoData } from "../forms/ClientInfo.svelte";
2
+ import type { ScopeItem } from "../forms/ConsentScopesList.svelte";
3
+ import type { OrgItem } from "../forms/OrgSelector.svelte";
4
+ 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> {
5
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
6
+ $$bindings?: Bindings;
7
+ } & Exports;
8
+ (internal: unknown, props: Props & {
9
+ $$events?: Events;
10
+ $$slots?: Slots;
11
+ }): Exports & {
12
+ $set?: any;
13
+ $on?: any;
14
+ };
15
+ z_$$bindings?: Bindings;
16
+ }
17
+ declare const ConsentTemplate: $$__sveltets_2_IsomorphicComponent<{
18
+ client?: ClientInfoData | null;
19
+ scopes?: ScopeItem[];
20
+ scopeLabelMap?: Record<string, string>;
21
+ user?: {
22
+ id: string;
23
+ email: string;
24
+ name?: string;
25
+ picture?: string;
26
+ } | null;
27
+ organizations?: OrgItem[];
28
+ selectedOrgId?: string | null;
29
+ roles?: string[];
30
+ actingAs?: {
31
+ id: string;
32
+ name?: string;
33
+ email: string;
34
+ relationship_type: string;
35
+ permission_level: string;
36
+ } | null;
37
+ showOrgSelector?: boolean;
38
+ showActingAs?: boolean;
39
+ showRoles?: boolean;
40
+ loading?: boolean;
41
+ allowLoading?: boolean;
42
+ denyLoading?: boolean;
43
+ error?: string;
44
+ title?: string;
45
+ subtitle?: string;
46
+ scopesTitle?: string;
47
+ userInfoLabel?: string;
48
+ switchAccountLabel?: string;
49
+ orgLabel?: string;
50
+ primaryOrgLabel?: string;
51
+ rolesLabel?: string;
52
+ actingAsTitle?: string;
53
+ actingAsWarning?: string;
54
+ allowLabel?: string;
55
+ denyLabel?: string;
56
+ trustedLabel?: string;
57
+ privacyPolicyLabel?: string;
58
+ termsLabel?: string;
59
+ class?: string;
60
+ }, {
61
+ allow: CustomEvent<{
62
+ selectedOrgId: string | null;
63
+ actingAsUserId?: string;
64
+ }>;
65
+ deny: CustomEvent<void>;
66
+ "switch-account": CustomEvent<void>;
67
+ "org-change": CustomEvent<{
68
+ orgId: string | null;
69
+ }>;
70
+ "dismiss-error": CustomEvent<void>;
71
+ } & {
72
+ [evt: string]: CustomEvent<any>;
73
+ }, {}, {}, string>;
74
+ type ConsentTemplate = InstanceType<typeof ConsentTemplate>;
75
+ export default ConsentTemplate;
76
+ //# sourceMappingURL=ConsentTemplate.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsentTemplate.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/ui/templates/ConsentTemplate.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAqP3D,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,eAAe;aA3BqyB,cAAc,GAAG,IAAI;aAAW,SAAS,EAAE;oBAAkB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;WAAS;QACl5B,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;oBAAkB,OAAO,EAAE;oBAAkB,MAAM,GAAG,IAAI;YAAU,MAAM,EAAE;eAAa;QAC/F,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;KAC1B,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;uBACkB,MAAM,GAAG,IAAI;yBAAmB,MAAM;;;;;eAGvC,MAAM,GAAG,IAAI;;;;;kBAY4D,CAAC;AACnF,KAAK,eAAe,GAAG,YAAY,CAAC,OAAO,eAAe,CAAC,CAAC;AAC9D,eAAe,eAAe,CAAC"}