@kya-os/consent 0.1.13 → 0.1.15
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.
- package/dist/bundle/inline.d.ts.map +1 -1
- package/dist/bundle/inline.js +2 -2
- package/dist/bundle/inline.js.map +1 -1
- package/dist/bundle/shell.d.ts +5 -0
- package/dist/bundle/shell.d.ts.map +1 -1
- package/dist/bundle/shell.js +3 -1
- package/dist/bundle/shell.js.map +1 -1
- package/dist/cjs/bundle/index.js +57 -0
- package/dist/cjs/bundle/index.js.map +1 -0
- package/dist/cjs/bundle/inline.js +22 -0
- package/dist/cjs/bundle/inline.js.map +1 -0
- package/dist/cjs/bundle/shell.js +291 -0
- package/dist/cjs/bundle/shell.js.map +1 -0
- package/dist/cjs/components/consent-button.js +180 -0
- package/dist/cjs/components/consent-button.js.map +1 -0
- package/dist/cjs/components/consent-checkbox.js +223 -0
- package/dist/cjs/components/consent-checkbox.js.map +1 -0
- package/dist/cjs/components/consent-input.js +335 -0
- package/dist/cjs/components/consent-input.js.map +1 -0
- package/dist/cjs/components/consent-oauth-button.js +392 -0
- package/dist/cjs/components/consent-oauth-button.js.map +1 -0
- package/dist/cjs/components/consent-otp-input.js +388 -0
- package/dist/cjs/components/consent-otp-input.js.map +1 -0
- package/dist/cjs/components/consent-permissions.js +433 -0
- package/dist/cjs/components/consent-permissions.js.map +1 -0
- package/dist/cjs/components/consent-shell.js +234 -0
- package/dist/cjs/components/consent-shell.js.map +1 -0
- package/dist/cjs/components/consent-terms.js +287 -0
- package/dist/cjs/components/consent-terms.js.map +1 -0
- package/dist/cjs/components/index.js +37 -0
- package/dist/cjs/components/index.js.map +1 -0
- package/dist/cjs/components/mcp-consent.js +1034 -0
- package/dist/cjs/components/mcp-consent.js.map +1 -0
- package/dist/cjs/constants/auth-modes.js +128 -0
- package/dist/cjs/constants/auth-modes.js.map +1 -0
- package/dist/cjs/constants/colors.js +40 -0
- package/dist/cjs/constants/colors.js.map +1 -0
- package/dist/cjs/constants/defaults.js +146 -0
- package/dist/cjs/constants/defaults.js.map +1 -0
- package/dist/cjs/constants/index.js +40 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/index.js +49 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/react/index.js +190 -0
- package/dist/cjs/react/index.js.map +1 -0
- package/dist/cjs/resolution/index.js +28 -0
- package/dist/cjs/resolution/index.js.map +1 -0
- package/dist/cjs/resolution/resolve-branding.js +159 -0
- package/dist/cjs/resolution/resolve-branding.js.map +1 -0
- package/dist/cjs/resolution/resolve-config.js +270 -0
- package/dist/cjs/resolution/resolve-config.js.map +1 -0
- package/dist/cjs/resolution/resolve-copy.js +136 -0
- package/dist/cjs/resolution/resolve-copy.js.map +1 -0
- package/dist/cjs/schemas/api.schemas.js +162 -0
- package/dist/cjs/schemas/api.schemas.js.map +1 -0
- package/dist/cjs/schemas/branding.schemas.js +57 -0
- package/dist/cjs/schemas/branding.schemas.js.map +1 -0
- package/dist/cjs/schemas/config.schemas.js +147 -0
- package/dist/cjs/schemas/config.schemas.js.map +1 -0
- package/dist/cjs/schemas/index.js +29 -0
- package/dist/cjs/schemas/index.js.map +1 -0
- package/dist/cjs/schemas/modes.schemas.js +107 -0
- package/dist/cjs/schemas/modes.schemas.js.map +1 -0
- package/dist/cjs/security/escape.js +206 -0
- package/dist/cjs/security/escape.js.map +1 -0
- package/dist/cjs/security/index.js +26 -0
- package/dist/cjs/security/index.js.map +1 -0
- package/dist/cjs/security/validators.js +210 -0
- package/dist/cjs/security/validators.js.map +1 -0
- package/dist/cjs/styles/css-variables.js +129 -0
- package/dist/cjs/styles/css-variables.js.map +1 -0
- package/dist/cjs/styles/index.js +28 -0
- package/dist/cjs/styles/index.js.map +1 -0
- package/dist/cjs/styles/stylesheet.js +204 -0
- package/dist/cjs/styles/stylesheet.js.map +1 -0
- package/dist/cjs/styles/tokens.js +183 -0
- package/dist/cjs/styles/tokens.js.map +1 -0
- package/dist/cjs/templates/base/base-template.js +282 -0
- package/dist/cjs/templates/base/base-template.js.map +1 -0
- package/dist/cjs/templates/base/components.js +295 -0
- package/dist/cjs/templates/base/components.js.map +1 -0
- package/dist/cjs/templates/base/index.js +26 -0
- package/dist/cjs/templates/base/index.js.map +1 -0
- package/dist/cjs/templates/index.js +34 -0
- package/dist/cjs/templates/index.js.map +1 -0
- package/dist/cjs/templates/modes/consent-only.template.js +74 -0
- package/dist/cjs/templates/modes/consent-only.template.js.map +1 -0
- package/dist/cjs/templates/modes/credentials.template.js +414 -0
- package/dist/cjs/templates/modes/credentials.template.js.map +1 -0
- package/dist/cjs/templates/modes/index.js +24 -0
- package/dist/cjs/templates/modes/index.js.map +1 -0
- package/dist/cjs/templates/modes/magic-link.template.js +196 -0
- package/dist/cjs/templates/modes/magic-link.template.js.map +1 -0
- package/dist/cjs/templates/modes/oauth.template.js +153 -0
- package/dist/cjs/templates/modes/oauth.template.js.map +1 -0
- package/dist/cjs/templates/modes/otp.template.js +316 -0
- package/dist/cjs/templates/modes/otp.template.js.map +1 -0
- package/dist/cjs/templates/modes/success.template.js +140 -0
- package/dist/cjs/templates/modes/success.template.js.map +1 -0
- package/dist/cjs/templates/registry.js +133 -0
- package/dist/cjs/templates/registry.js.map +1 -0
- package/dist/cjs/types/api.types.js +10 -0
- package/dist/cjs/types/api.types.js.map +1 -0
- package/dist/cjs/types/branding.types.js +10 -0
- package/dist/cjs/types/branding.types.js.map +1 -0
- package/dist/cjs/types/config.types.js +10 -0
- package/dist/cjs/types/config.types.js.map +1 -0
- package/dist/cjs/types/copy.types.js +10 -0
- package/dist/cjs/types/copy.types.js.map +1 -0
- package/dist/cjs/types/index.js +31 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/modes.types.js +140 -0
- package/dist/cjs/types/modes.types.js.map +1 -0
- package/dist/cjs/types/page.types.js +10 -0
- package/dist/cjs/types/page.types.js.map +1 -0
- package/dist/components/mcp-consent.d.ts +6 -0
- package/dist/components/mcp-consent.d.ts.map +1 -1
- package/dist/components/mcp-consent.js +14 -0
- package/dist/components/mcp-consent.js.map +1 -1
- package/dist/consent.js +7 -0
- package/dist/consent.min.js +2 -2
- package/dist/schemas/api.schemas.d.ts +177 -169
- package/dist/schemas/api.schemas.d.ts.map +1 -1
- package/dist/schemas/api.schemas.js +6 -0
- package/dist/schemas/api.schemas.js.map +1 -1
- package/dist/schemas/config.schemas.d.ts +116 -116
- package/dist/schemas/modes.schemas.d.ts +28 -28
- package/dist/types/api.types.d.ts +6 -0
- package/dist/types/api.types.d.ts.map +1 -1
- 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":";AAAA;;;;;;;GAOG;;;;;;;;;AAEH,6BAA4D;AAC5D,qDAAmE;AAgBnE;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,gBAAU;IAA3C;;QACL;;;WAGG;QAuBH,WAAM,GAAgC,EAAE,CAAC;QAEzC;;WAEG;QAEH,gBAAW,GAAG,KAAK,CAAC;QAEpB;;WAEG;QAEH,cAAS,GAAG,KAAK,CAAC;QAElB;;;WAGG;QAEH,cAAS,GAAkC,OAAO,CAAC;QAEnD;;WAEG;QAEK,mBAAc,GAAgB,IAAI,GAAG,EAAE,CAAC;QAEhD;;;WAGG;QACK,qBAAgB,GAAgB,IAAI,GAAG,EAAE,CAAC;IAoWpD,CAAC;IAnNU,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,2EAA2E;QAC3E,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAEkB,OAAO,CAAC,iBAAuC;QAChE,yEAAyE;QACzE,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxD,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,0BAA0B;QAChC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAExE,0DAA0D;QAC1D,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CACxE,CAAC;QAEF,2DAA2D;QAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CACpD,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CACvC,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,uEAAuE;YACvE,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,mDAAmD;YACnD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB;iBACtC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;iBACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAEpB,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,gDAAgD;QAChD,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QAExC,4CAA4C;QAC5C,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,QAAQ,EAAE;YACxB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC9C,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,wBAAwB;QAC9B,oDAAoD;QACpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAC/C,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,wBAAwB;YACxB,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAC3B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAC/C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,kCAAkC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAC3B,IAAI,CAAC,gBAAgB;iBAClB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;iBACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAC5B,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAY,gBAAgB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;iBACpC,CAAC;YACJ,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,OAAe;QACtC,2CAA2C;QAC3C,OAAO,OAAO;aACX,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;aACtB,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACI,iBAAiB;QACtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;IAEO,oBAAoB,CAAC,OAAe,EAAE,OAAgB;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,QAAQ,EAAE;YACxB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC9C,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,UAAU;QAChB,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YACvB,KAAK,QAAQ;gBACX,OAAO,IAAA,UAAI,EAAA,sCAAsC,CAAC;YACpD,KAAK,QAAQ;gBACX,OAAO,IAAA,UAAI,EAAA;;;;;;;;;;;;SAYV,CAAC;YACJ;gBACE,OAAO,IAAA,UAAI,EAAA;;;;;;;;;;;;SAYV,CAAC;QACN,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,KAAqB;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAErD,OAAO,IAAA,UAAI,EAAA;;UAEL,IAAI,CAAC,WAAW;YAChB,CAAC,CAAC,IAAA,UAAI,EAAA;;;;2BAIW,UAAU;4BACT,KAAK,CAAC,QAAQ;0BAChB,CAAC,CAAQ,EAAE,EAAE,CACrB,IAAI,CAAC,oBAAoB,CACvB,KAAK,CAAC,EAAE,EACP,CAAC,CAAC,MAA2B,CAAC,OAAO,CACvC;6BACU,KAAK,CAAC,KAAK;;aAE3B;YACH,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;;;cAGf,KAAK,CAAC,KAAK;cACX,KAAK,CAAC,QAAQ;YACd,CAAC,CAAC,IAAA,UAAI,EAAA,8CAA8C;YACpD,CAAC,CAAC,IAAI;;YAER,KAAK,CAAC,WAAW;YACjB,CAAC,CAAC,IAAA,UAAI,EAAA,4BAA4B,KAAK,CAAC,WAAW,QAAQ;YAC3D,CAAC,CAAC,IAAI;;;KAGb,CAAC;IACJ,CAAC;IAEQ,MAAM;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAErC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAA,UAAI,EAAA,mDAAmD,CAAC;QACjE,CAAC;QAED,OAAO,IAAA,UAAI,EAAA;;UAEL,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;;KAE5D,CAAC;IACJ,CAAC;;AA7ZU,gDAAkB;AA4Db,yBAAM,GAAG,IAAA,SAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6I3B,AA7IqB,CA6IpB;AA9KF;IAtBC,IAAA,wBAAQ,EAAC;QACR,IAAI,EAAE,KAAK;QACX,SAAS,EAAE;YACT,aAAa,EAAE,CAAC,KAAoB,EAA+B,EAAE;gBACnE,IAAI,CAAC,KAAK;oBAAE,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC1C,mDAAmD;oBACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC3B,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,OAAO,MAAM,CAAC,CAAC;wBAC1E,OAAO,EAAE,CAAC;oBACZ,CAAC;oBACD,OAAO,MAAqC,CAAC;gBAC/C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,WAAW,EAAE,CAAC,KAAkC,EAAU,EAAE;gBAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;SACF;KACF,CAAC;kDACuC;AAMzC;IADC,IAAA,wBAAQ,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;uDACR;AAMpB;IADC,IAAA,wBAAQ,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;qDACnC;AAOlB;IADC,IAAA,wBAAQ,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;qDACD;AAM3C;IADP,IAAA,qBAAK,GAAE;0DACwC;6BApDrC,kBAAkB;IAD9B,IAAA,6BAAa,EAAC,qBAAqB,CAAC;GACxB,kBAAkB,CA8Z9B"}
|
|
@@ -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"}
|