@kya-os/consent 0.1.13 → 0.1.14

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