@kya-os/consent 0.1.0 → 0.1.1

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 (200) hide show
  1. package/dist/bundle/index.d.ts +44 -0
  2. package/dist/bundle/index.d.ts.map +1 -0
  3. package/dist/bundle/index.js +45 -0
  4. package/dist/bundle/index.js.map +1 -0
  5. package/dist/bundle/inline.d.ts +18 -0
  6. package/dist/bundle/inline.d.ts.map +1 -0
  7. package/dist/bundle/inline.js +18 -0
  8. package/dist/bundle/inline.js.map +1 -0
  9. package/dist/bundle/shell.d.ts +91 -0
  10. package/dist/bundle/shell.d.ts.map +1 -0
  11. package/dist/bundle/shell.js +282 -0
  12. package/dist/bundle/shell.js.map +1 -0
  13. package/dist/components/consent-button.d.ts +61 -0
  14. package/dist/components/consent-button.d.ts.map +1 -0
  15. package/dist/components/consent-button.js +177 -0
  16. package/dist/components/consent-button.js.map +1 -0
  17. package/dist/components/consent-checkbox.d.ts +61 -0
  18. package/dist/components/consent-checkbox.d.ts.map +1 -0
  19. package/dist/components/consent-checkbox.js +220 -0
  20. package/dist/components/consent-checkbox.js.map +1 -0
  21. package/dist/components/consent-input.d.ts +91 -0
  22. package/dist/components/consent-input.d.ts.map +1 -0
  23. package/dist/components/consent-input.js +332 -0
  24. package/dist/components/consent-input.js.map +1 -0
  25. package/dist/components/consent-oauth-button.d.ts +87 -0
  26. package/dist/components/consent-oauth-button.d.ts.map +1 -0
  27. package/dist/components/consent-oauth-button.js +389 -0
  28. package/dist/components/consent-oauth-button.js.map +1 -0
  29. package/dist/components/consent-otp-input.d.ts +92 -0
  30. package/dist/components/consent-otp-input.d.ts.map +1 -0
  31. package/dist/components/consent-otp-input.js +378 -0
  32. package/dist/components/consent-otp-input.js.map +1 -0
  33. package/dist/components/consent-permissions.d.ts +104 -0
  34. package/dist/components/consent-permissions.d.ts.map +1 -0
  35. package/dist/components/consent-permissions.js +430 -0
  36. package/dist/components/consent-permissions.js.map +1 -0
  37. package/dist/components/consent-shell.d.ts +72 -0
  38. package/dist/components/consent-shell.d.ts.map +1 -0
  39. package/dist/components/consent-shell.js +231 -0
  40. package/dist/components/consent-shell.js.map +1 -0
  41. package/dist/components/consent-terms.d.ts +89 -0
  42. package/dist/components/consent-terms.d.ts.map +1 -0
  43. package/dist/components/consent-terms.js +284 -0
  44. package/dist/components/consent-terms.js.map +1 -0
  45. package/dist/components/index.d.ts +19 -0
  46. package/dist/components/index.d.ts.map +1 -0
  47. package/dist/components/index.js +23 -0
  48. package/dist/components/index.js.map +1 -0
  49. package/dist/components/mcp-consent.d.ts +152 -0
  50. package/dist/components/mcp-consent.d.ts.map +1 -0
  51. package/dist/components/mcp-consent.js +874 -0
  52. package/dist/components/mcp-consent.js.map +1 -0
  53. package/dist/consent.js +3737 -0
  54. package/dist/consent.min.js +1564 -0
  55. package/dist/constants/auth-modes.d.ts +7 -2
  56. package/dist/constants/auth-modes.d.ts.map +1 -1
  57. package/dist/constants/auth-modes.js +28 -36
  58. package/dist/constants/auth-modes.js.map +1 -1
  59. package/dist/constants/colors.js +1 -4
  60. package/dist/constants/colors.js.map +1 -1
  61. package/dist/constants/defaults.d.ts +1 -1
  62. package/dist/constants/defaults.d.ts.map +1 -1
  63. package/dist/constants/defaults.js +16 -19
  64. package/dist/constants/defaults.js.map +1 -1
  65. package/dist/constants/index.d.ts +3 -3
  66. package/dist/constants/index.d.ts.map +1 -1
  67. package/dist/constants/index.js +3 -26
  68. package/dist/constants/index.js.map +1 -1
  69. package/dist/index.d.ts +10 -7
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +12 -23
  72. package/dist/index.js.map +1 -1
  73. package/dist/react/index.d.ts +123 -0
  74. package/dist/react/index.d.ts.map +1 -0
  75. package/dist/react/index.js +154 -0
  76. package/dist/react/index.js.map +1 -0
  77. package/dist/resolution/index.d.ts +3 -3
  78. package/dist/resolution/index.d.ts.map +1 -1
  79. package/dist/resolution/index.js +3 -19
  80. package/dist/resolution/index.js.map +1 -1
  81. package/dist/resolution/resolve-branding.d.ts +1 -1
  82. package/dist/resolution/resolve-branding.d.ts.map +1 -1
  83. package/dist/resolution/resolve-branding.js +14 -24
  84. package/dist/resolution/resolve-branding.js.map +1 -1
  85. package/dist/resolution/resolve-config.d.ts +2 -2
  86. package/dist/resolution/resolve-config.d.ts.map +1 -1
  87. package/dist/resolution/resolve-config.js +57 -53
  88. package/dist/resolution/resolve-config.js.map +1 -1
  89. package/dist/resolution/resolve-copy.d.ts +2 -2
  90. package/dist/resolution/resolve-copy.d.ts.map +1 -1
  91. package/dist/resolution/resolve-copy.js +35 -43
  92. package/dist/resolution/resolve-copy.js.map +1 -1
  93. package/dist/schemas/api.schemas.d.ts +7 -4
  94. package/dist/schemas/api.schemas.d.ts.map +1 -1
  95. package/dist/schemas/api.schemas.js +70 -74
  96. package/dist/schemas/api.schemas.js.map +1 -1
  97. package/dist/schemas/branding.schemas.js +17 -20
  98. package/dist/schemas/branding.schemas.js.map +1 -1
  99. package/dist/schemas/config.schemas.d.ts +1 -1
  100. package/dist/schemas/config.schemas.d.ts.map +1 -1
  101. package/dist/schemas/config.schemas.js +64 -70
  102. package/dist/schemas/config.schemas.js.map +1 -1
  103. package/dist/schemas/index.d.ts +4 -4
  104. package/dist/schemas/index.d.ts.map +1 -1
  105. package/dist/schemas/index.js +4 -20
  106. package/dist/schemas/index.js.map +1 -1
  107. package/dist/schemas/modes.schemas.js +60 -63
  108. package/dist/schemas/modes.schemas.js.map +1 -1
  109. package/dist/security/escape.d.ts.map +1 -1
  110. package/dist/security/escape.js +12 -17
  111. package/dist/security/escape.js.map +1 -1
  112. package/dist/security/index.d.ts +2 -2
  113. package/dist/security/index.d.ts.map +1 -1
  114. package/dist/security/index.js +2 -18
  115. package/dist/security/index.js.map +1 -1
  116. package/dist/security/validators.js +9 -20
  117. package/dist/security/validators.js.map +1 -1
  118. package/dist/styles/css-variables.d.ts +1 -1
  119. package/dist/styles/css-variables.d.ts.map +1 -1
  120. package/dist/styles/css-variables.js +18 -27
  121. package/dist/styles/css-variables.js.map +1 -1
  122. package/dist/styles/index.d.ts +3 -3
  123. package/dist/styles/index.d.ts.map +1 -1
  124. package/dist/styles/index.js +3 -19
  125. package/dist/styles/index.js.map +1 -1
  126. package/dist/styles/stylesheet.d.ts +1 -1
  127. package/dist/styles/stylesheet.d.ts.map +1 -1
  128. package/dist/styles/stylesheet.js +20 -27
  129. package/dist/styles/stylesheet.js.map +1 -1
  130. package/dist/styles/tokens.js +1 -4
  131. package/dist/styles/tokens.js.map +1 -1
  132. package/dist/templates/base/base-template.d.ts +3 -3
  133. package/dist/templates/base/base-template.d.ts.map +1 -1
  134. package/dist/templates/base/base-template.js +31 -35
  135. package/dist/templates/base/base-template.js.map +1 -1
  136. package/dist/templates/base/components.js +49 -65
  137. package/dist/templates/base/components.js.map +1 -1
  138. package/dist/templates/base/index.d.ts +2 -2
  139. package/dist/templates/base/index.d.ts.map +1 -1
  140. package/dist/templates/base/index.js +2 -20
  141. package/dist/templates/base/index.js.map +1 -1
  142. package/dist/templates/index.d.ts +9 -9
  143. package/dist/templates/index.d.ts.map +1 -1
  144. package/dist/templates/index.js +9 -25
  145. package/dist/templates/index.js.map +1 -1
  146. package/dist/templates/modes/consent-only.template.d.ts +2 -2
  147. package/dist/templates/modes/consent-only.template.d.ts.map +1 -1
  148. package/dist/templates/modes/consent-only.template.js +11 -15
  149. package/dist/templates/modes/consent-only.template.js.map +1 -1
  150. package/dist/templates/modes/credentials.template.d.ts +4 -4
  151. package/dist/templates/modes/credentials.template.d.ts.map +1 -1
  152. package/dist/templates/modes/credentials.template.js +20 -24
  153. package/dist/templates/modes/credentials.template.js.map +1 -1
  154. package/dist/templates/modes/index.d.ts +6 -6
  155. package/dist/templates/modes/index.d.ts.map +1 -1
  156. package/dist/templates/modes/index.js +6 -16
  157. package/dist/templates/modes/index.js.map +1 -1
  158. package/dist/templates/modes/magic-link.template.d.ts +2 -2
  159. package/dist/templates/modes/magic-link.template.d.ts.map +1 -1
  160. package/dist/templates/modes/magic-link.template.js +14 -18
  161. package/dist/templates/modes/magic-link.template.js.map +1 -1
  162. package/dist/templates/modes/oauth.template.d.ts +2 -2
  163. package/dist/templates/modes/oauth.template.d.ts.map +1 -1
  164. package/dist/templates/modes/oauth.template.js +21 -25
  165. package/dist/templates/modes/oauth.template.js.map +1 -1
  166. package/dist/templates/modes/otp.template.d.ts +2 -2
  167. package/dist/templates/modes/otp.template.d.ts.map +1 -1
  168. package/dist/templates/modes/otp.template.js +17 -21
  169. package/dist/templates/modes/otp.template.js.map +1 -1
  170. package/dist/templates/modes/success.template.d.ts +2 -2
  171. package/dist/templates/modes/success.template.d.ts.map +1 -1
  172. package/dist/templates/modes/success.template.js +24 -29
  173. package/dist/templates/modes/success.template.js.map +1 -1
  174. package/dist/templates/registry.d.ts +4 -4
  175. package/dist/templates/registry.d.ts.map +1 -1
  176. package/dist/templates/registry.js +30 -38
  177. package/dist/templates/registry.js.map +1 -1
  178. package/dist/types/api.types.d.ts +6 -5
  179. package/dist/types/api.types.d.ts.map +1 -1
  180. package/dist/types/api.types.js +1 -2
  181. package/dist/types/api.types.js.map +1 -1
  182. package/dist/types/branding.types.js +1 -2
  183. package/dist/types/branding.types.js.map +1 -1
  184. package/dist/types/config.types.d.ts +5 -5
  185. package/dist/types/config.types.d.ts.map +1 -1
  186. package/dist/types/config.types.js +1 -2
  187. package/dist/types/config.types.js.map +1 -1
  188. package/dist/types/copy.types.js +1 -2
  189. package/dist/types/copy.types.js.map +1 -1
  190. package/dist/types/index.d.ts +6 -6
  191. package/dist/types/index.d.ts.map +1 -1
  192. package/dist/types/index.js +6 -22
  193. package/dist/types/index.js.map +1 -1
  194. package/dist/types/modes.types.js +1 -4
  195. package/dist/types/modes.types.js.map +1 -1
  196. package/dist/types/page.types.d.ts +6 -6
  197. package/dist/types/page.types.d.ts.map +1 -1
  198. package/dist/types/page.types.js +1 -2
  199. package/dist/types/page.types.js.map +1 -1
  200. package/package.json +41 -4
@@ -0,0 +1,430 @@
1
+ /**
2
+ * Consent Permissions Web Component
3
+ *
4
+ * Renders a list of permission scopes that the agent is requesting.
5
+ * Can be interactive (with checkboxes) or display-only.
6
+ *
7
+ * @module components/consent-permissions
8
+ */
9
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
10
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
11
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
12
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
13
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
14
+ };
15
+ import { LitElement, html, css } from 'lit';
16
+ import { customElement, property, state } from 'lit/decorators.js';
17
+ /**
18
+ * ConsentPermissions - Permission list component
19
+ *
20
+ * @example
21
+ * ```html
22
+ * <!-- Display-only mode -->
23
+ * <consent-permissions
24
+ * scopes='["read:profile", "write:data"]'
25
+ * ></consent-permissions>
26
+ *
27
+ * <!-- Interactive mode -->
28
+ * <consent-permissions
29
+ * scopes='[{"id": "read:profile", "label": "Read profile", "required": true}]'
30
+ * interactive
31
+ * ></consent-permissions>
32
+ * ```
33
+ *
34
+ * @fires change - Fired when permissions selection changes (interactive mode)
35
+ * @csspart list - The permissions list container
36
+ * @csspart item - Individual permission item
37
+ * @cssprop --consent-primary - Primary brand color for icons/checkboxes
38
+ */
39
+ let ConsentPermissions = class ConsentPermissions extends LitElement {
40
+ constructor() {
41
+ super(...arguments);
42
+ /**
43
+ * Permission scopes - can be string array or PermissionItem array
44
+ * Accepts JSON string for attribute binding
45
+ */
46
+ this.scopes = [];
47
+ /**
48
+ * Enable interactive mode with checkboxes
49
+ */
50
+ this.interactive = false;
51
+ /**
52
+ * Pre-select all scopes in interactive mode (default: only required scopes are pre-selected)
53
+ */
54
+ this.selectAll = false;
55
+ /**
56
+ * Icon to show next to each permission
57
+ * Options: 'check', 'bullet', 'shield'
58
+ */
59
+ this.iconStyle = 'check';
60
+ /**
61
+ * Internal state for selected permissions in interactive mode
62
+ */
63
+ this.selectedScopes = new Set();
64
+ /**
65
+ * Track previous scope IDs to detect newly added scopes
66
+ * (used to distinguish new scopes from user-deselected scopes)
67
+ */
68
+ this.previousScopeIds = new Set();
69
+ }
70
+ connectedCallback() {
71
+ super.connectedCallback();
72
+ // Initialize selected scopes with required permissions in interactive mode
73
+ if (this.interactive) {
74
+ this.initializeSelectedScopes();
75
+ }
76
+ }
77
+ updated(changedProperties) {
78
+ // Re-initialize selected scopes when scopes property changes dynamically
79
+ if (changedProperties.has('scopes') && this.interactive) {
80
+ this.reinitializeSelectedScopes();
81
+ }
82
+ }
83
+ /**
84
+ * Re-initialize selected scopes when scopes change dynamically.
85
+ * Preserves existing valid selections while adding new scopes based on selectAll/required settings.
86
+ */
87
+ reinitializeSelectedScopes() {
88
+ const currentScopeIds = new Set(this.normalizedScopes.map((s) => s.id));
89
+ // Remove selections that are no longer in the scopes list
90
+ const validSelections = new Set(Array.from(this.selectedScopes).filter((id) => currentScopeIds.has(id)));
91
+ // Identify truly NEW scopes (not previously shown to user)
92
+ const newScopeIds = Array.from(currentScopeIds).filter((id) => !this.previousScopeIds.has(id));
93
+ if (this.selectAll) {
94
+ // Auto-select only NEW scopes, preserving user's existing deselections
95
+ this.selectedScopes = new Set([...validSelections, ...newScopeIds]);
96
+ }
97
+ else {
98
+ // Add required scopes that aren't already selected
99
+ const requiredIds = this.normalizedScopes
100
+ .filter((s) => s.required)
101
+ .map((s) => s.id);
102
+ this.selectedScopes = new Set([...validSelections, ...requiredIds]);
103
+ }
104
+ // Update tracking of which scopes user has seen
105
+ this.previousScopeIds = currentScopeIds;
106
+ // Emit change event so parent stays in sync
107
+ this.dispatchEvent(new CustomEvent('change', {
108
+ detail: { selected: this.getSelectedScopes() },
109
+ bubbles: true,
110
+ composed: true,
111
+ }));
112
+ }
113
+ initializeSelectedScopes() {
114
+ // Track initial scopes for detecting new ones later
115
+ this.previousScopeIds = new Set(this.normalizedScopes.map((scope) => scope.id));
116
+ if (this.selectAll) {
117
+ // Pre-select all scopes
118
+ this.selectedScopes = new Set(this.normalizedScopes.map((scope) => scope.id));
119
+ }
120
+ else {
121
+ // Only pre-select required scopes
122
+ this.selectedScopes = new Set(this.normalizedScopes
123
+ .filter((scope) => scope.required)
124
+ .map((scope) => scope.id));
125
+ }
126
+ }
127
+ /**
128
+ * Normalize scopes to PermissionItem format
129
+ */
130
+ get normalizedScopes() {
131
+ return this.scopes.map((scope) => {
132
+ if (typeof scope === 'string') {
133
+ return {
134
+ id: scope,
135
+ label: this.formatScopeLabel(scope),
136
+ };
137
+ }
138
+ return scope;
139
+ });
140
+ }
141
+ /**
142
+ * Convert scope ID to human-readable label
143
+ */
144
+ formatScopeLabel(scopeId) {
145
+ // Convert 'read:profile' to 'Read profile'
146
+ return scopeId
147
+ .replace(/[_:-]/g, ' ')
148
+ .replace(/\b\w/g, (char) => char.toUpperCase());
149
+ }
150
+ /**
151
+ * Get currently selected scopes
152
+ */
153
+ getSelectedScopes() {
154
+ return Array.from(this.selectedScopes);
155
+ }
156
+ handleCheckboxChange(scopeId, checked) {
157
+ if (checked) {
158
+ this.selectedScopes.add(scopeId);
159
+ }
160
+ else {
161
+ this.selectedScopes.delete(scopeId);
162
+ }
163
+ this.requestUpdate();
164
+ this.dispatchEvent(new CustomEvent('change', {
165
+ detail: { selected: this.getSelectedScopes() },
166
+ bubbles: true,
167
+ composed: true,
168
+ }));
169
+ }
170
+ renderIcon() {
171
+ switch (this.iconStyle) {
172
+ case 'bullet':
173
+ return html `<div class="icon icon-bullet"></div>`;
174
+ case 'shield':
175
+ return html `
176
+ <div class="icon icon-shield">
177
+ <svg
178
+ xmlns="http://www.w3.org/2000/svg"
179
+ viewBox="0 0 24 24"
180
+ fill="none"
181
+ stroke="currentColor"
182
+ stroke-width="2"
183
+ >
184
+ <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" />
185
+ </svg>
186
+ </div>
187
+ `;
188
+ default:
189
+ return html `
190
+ <div class="icon icon-check">
191
+ <svg
192
+ xmlns="http://www.w3.org/2000/svg"
193
+ viewBox="0 0 24 24"
194
+ fill="none"
195
+ stroke="currentColor"
196
+ stroke-width="2"
197
+ >
198
+ <polyline points="20 6 9 17 4 12" />
199
+ </svg>
200
+ </div>
201
+ `;
202
+ }
203
+ }
204
+ renderPermissionItem(scope) {
205
+ const isSelected = this.selectedScopes.has(scope.id);
206
+ return html `
207
+ <li class="permission-item" part="item">
208
+ ${this.interactive
209
+ ? html `
210
+ <input
211
+ type="checkbox"
212
+ class="checkbox"
213
+ .checked=${isSelected}
214
+ ?disabled=${scope.required}
215
+ @change=${(e) => this.handleCheckboxChange(scope.id, e.target.checked)}
216
+ aria-label=${scope.label}
217
+ />
218
+ `
219
+ : this.renderIcon()}
220
+ <div class="content">
221
+ <span class="label">
222
+ ${scope.label}
223
+ ${scope.required
224
+ ? html `<span class="required-badge">Required</span>`
225
+ : null}
226
+ </span>
227
+ ${scope.description
228
+ ? html `<div class="description">${scope.description}</div>`
229
+ : null}
230
+ </div>
231
+ </li>
232
+ `;
233
+ }
234
+ render() {
235
+ const scopes = this.normalizedScopes;
236
+ if (scopes.length === 0) {
237
+ return html `<div class="empty">No permissions requested</div>`;
238
+ }
239
+ return html `
240
+ <ul class="permission-list" part="list" role="list">
241
+ ${scopes.map((scope) => this.renderPermissionItem(scope))}
242
+ </ul>
243
+ `;
244
+ }
245
+ };
246
+ ConsentPermissions.styles = css `
247
+ :host {
248
+ display: block;
249
+ --_primary: var(--consent-primary, #2563eb);
250
+ }
251
+
252
+ .permission-list {
253
+ list-style: none;
254
+ padding: 0;
255
+ margin: 0;
256
+ }
257
+
258
+ .permission-item {
259
+ display: flex;
260
+ align-items: flex-start;
261
+ gap: 0.75rem;
262
+ padding: 0.625rem 0;
263
+ font-size: 0.875rem;
264
+ color: #374151;
265
+ border-bottom: 1px solid #f3f4f6;
266
+ }
267
+
268
+ .permission-item:last-child {
269
+ border-bottom: none;
270
+ }
271
+
272
+ /* Icon styles */
273
+ .icon {
274
+ flex-shrink: 0;
275
+ width: 1.25rem;
276
+ height: 1.25rem;
277
+ margin-top: 0.0625rem;
278
+ }
279
+
280
+ .icon-check {
281
+ background: var(--_primary);
282
+ border-radius: 0.25rem;
283
+ display: flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ }
287
+
288
+ .icon-check svg {
289
+ width: 0.75rem;
290
+ height: 0.75rem;
291
+ color: white;
292
+ }
293
+
294
+ .icon-bullet {
295
+ background: var(--_primary);
296
+ border-radius: 50%;
297
+ width: 0.5rem;
298
+ height: 0.5rem;
299
+ margin: 0.375rem;
300
+ }
301
+
302
+ .icon-shield {
303
+ color: var(--_primary);
304
+ }
305
+
306
+ .icon-shield svg {
307
+ width: 1.25rem;
308
+ height: 1.25rem;
309
+ }
310
+
311
+ /* Content */
312
+ .content {
313
+ flex: 1;
314
+ }
315
+
316
+ .label {
317
+ font-weight: 500;
318
+ color: #111827;
319
+ }
320
+
321
+ .description {
322
+ font-size: 0.75rem;
323
+ color: #6b7280;
324
+ margin-top: 0.125rem;
325
+ }
326
+
327
+ .required-badge {
328
+ font-size: 0.625rem;
329
+ text-transform: uppercase;
330
+ letter-spacing: 0.05em;
331
+ color: #6b7280;
332
+ background: #f3f4f6;
333
+ padding: 0.125rem 0.375rem;
334
+ border-radius: 0.25rem;
335
+ margin-left: 0.5rem;
336
+ }
337
+
338
+ /* Interactive mode checkbox */
339
+ .checkbox {
340
+ appearance: none;
341
+ -webkit-appearance: none;
342
+ width: 1rem;
343
+ height: 1rem;
344
+ border: 1px solid #d1d5db;
345
+ border-radius: 0.25rem;
346
+ background: white;
347
+ cursor: pointer;
348
+ position: relative;
349
+ flex-shrink: 0;
350
+ margin-top: 0.125rem;
351
+ }
352
+
353
+ .checkbox:checked {
354
+ background: var(--_primary);
355
+ border-color: var(--_primary);
356
+ }
357
+
358
+ .checkbox:checked::after {
359
+ content: '';
360
+ position: absolute;
361
+ left: 4px;
362
+ top: 1px;
363
+ width: 5px;
364
+ height: 9px;
365
+ border: solid white;
366
+ border-width: 0 2px 2px 0;
367
+ transform: rotate(45deg);
368
+ }
369
+
370
+ .checkbox:disabled {
371
+ opacity: 0.5;
372
+ cursor: not-allowed;
373
+ }
374
+
375
+ .checkbox:focus-visible {
376
+ outline: 2px solid var(--_primary);
377
+ outline-offset: 2px;
378
+ }
379
+
380
+ /* Empty state */
381
+ .empty {
382
+ text-align: center;
383
+ color: #6b7280;
384
+ font-size: 0.875rem;
385
+ padding: 1rem 0;
386
+ }
387
+ `;
388
+ __decorate([
389
+ property({
390
+ type: Array,
391
+ converter: {
392
+ fromAttribute: (value) => {
393
+ if (!value)
394
+ return [];
395
+ try {
396
+ const parsed = JSON.parse(value);
397
+ // Validate that parsed result is actually an array
398
+ if (!Array.isArray(parsed)) {
399
+ console.warn('[consent-permissions] Expected array, got:', typeof parsed);
400
+ return [];
401
+ }
402
+ return parsed;
403
+ }
404
+ catch {
405
+ return [];
406
+ }
407
+ },
408
+ toAttribute: (value) => {
409
+ return JSON.stringify(value);
410
+ },
411
+ },
412
+ })
413
+ ], ConsentPermissions.prototype, "scopes", void 0);
414
+ __decorate([
415
+ property({ type: Boolean })
416
+ ], ConsentPermissions.prototype, "interactive", void 0);
417
+ __decorate([
418
+ property({ type: Boolean, attribute: 'select-all' })
419
+ ], ConsentPermissions.prototype, "selectAll", void 0);
420
+ __decorate([
421
+ property({ type: String, attribute: 'icon-style' })
422
+ ], ConsentPermissions.prototype, "iconStyle", void 0);
423
+ __decorate([
424
+ state()
425
+ ], ConsentPermissions.prototype, "selectedScopes", void 0);
426
+ ConsentPermissions = __decorate([
427
+ customElement('consent-permissions')
428
+ ], ConsentPermissions);
429
+ export { ConsentPermissions };
430
+ //# sourceMappingURL=consent-permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent-permissions.js","sourceRoot":"","sources":["../../src/components/consent-permissions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Consent Shell Web Component
3
+ *
4
+ * The main container for consent pages. Provides:
5
+ * - Card-like container with shadow and rounded corners
6
+ * - Header section with logo and title
7
+ * - Content area for auth-specific content
8
+ * - Footer for action buttons
9
+ *
10
+ * @module components/consent-shell
11
+ */
12
+ import { LitElement } from 'lit';
13
+ /**
14
+ * ConsentShell - Container component for consent pages
15
+ *
16
+ * @example
17
+ * ```html
18
+ * <consent-shell
19
+ * page-title="Permission Request"
20
+ * logo-url="https://example.com/logo.png"
21
+ * company-name="Acme Corp"
22
+ * primary-color="#2563EB"
23
+ * >
24
+ * <div slot="content">
25
+ * <!-- Auth-specific content -->
26
+ * </div>
27
+ * <div slot="footer">
28
+ * <consent-button variant="secondary">Cancel</consent-button>
29
+ * <consent-button variant="primary">Allow</consent-button>
30
+ * </div>
31
+ * </consent-shell>
32
+ * ```
33
+ *
34
+ * @slot content - Main content area
35
+ * @slot footer - Action buttons area
36
+ * @csspart container - The outer card container
37
+ * @csspart header - The header section
38
+ * @csspart content - The content section
39
+ * @csspart footer - The footer section
40
+ */
41
+ export declare class ConsentShell extends LitElement {
42
+ /**
43
+ * Page title (renamed from 'title' to avoid conflict with HTMLElement.title)
44
+ */
45
+ pageTitle: string;
46
+ /**
47
+ * Company logo URL
48
+ */
49
+ logoUrl?: string;
50
+ /**
51
+ * Company name (shown below logo or as fallback)
52
+ */
53
+ companyName?: string;
54
+ /**
55
+ * Primary brand color
56
+ */
57
+ primaryColor: string;
58
+ /**
59
+ * Secondary brand color
60
+ */
61
+ secondaryColor: string;
62
+ static styles: import("lit").CSSResult;
63
+ private renderLogo;
64
+ protected updated(changedProperties: Map<string, unknown>): void;
65
+ render(): import("lit").TemplateResult<1>;
66
+ }
67
+ declare global {
68
+ interface HTMLElementTagNameMap {
69
+ 'consent-shell': ConsentShell;
70
+ }
71
+ }
72
+ //# sourceMappingURL=consent-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent-shell.d.ts","sourceRoot":"","sources":["../../src/components/consent-shell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBACa,YAAa,SAAQ,UAAU;IAC1C;;OAEG;IAEH,SAAS,SAAwB;IAEjC;;OAEG;IAEH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IAEH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IAEH,YAAY,SAAa;IAEzB;;OAEG;IAEH,cAAc,SAAa;IAE3B,OAAgB,MAAM,0BAqFpB;IAEF,OAAO,CAAC,UAAU;cAkCC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAWzD,MAAM;CAqBhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,YAAY,CAAC;KAC/B;CACF"}