@kya-os/consent 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/auth-modes.d.ts +54 -0
- package/dist/constants/auth-modes.d.ts.map +1 -0
- package/dist/constants/auth-modes.js +128 -0
- package/dist/constants/auth-modes.js.map +1 -0
- package/dist/constants/colors.d.ts +38 -0
- package/dist/constants/colors.d.ts.map +1 -0
- package/dist/constants/colors.js +40 -0
- package/dist/constants/colors.js.map +1 -0
- package/dist/constants/defaults.d.ts +112 -0
- package/dist/constants/defaults.d.ts.map +1 -0
- package/dist/constants/defaults.js +146 -0
- package/dist/constants/defaults.js.map +1 -0
- package/dist/constants/index.d.ts +11 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +37 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/resolution/index.d.ts +12 -0
- package/dist/resolution/index.d.ts.map +1 -0
- package/dist/resolution/index.js +28 -0
- package/dist/resolution/index.js.map +1 -0
- package/dist/resolution/resolve-branding.d.ts +70 -0
- package/dist/resolution/resolve-branding.d.ts.map +1 -0
- package/dist/resolution/resolve-branding.js +159 -0
- package/dist/resolution/resolve-branding.js.map +1 -0
- package/dist/resolution/resolve-config.d.ts +81 -0
- package/dist/resolution/resolve-config.d.ts.map +1 -0
- package/dist/resolution/resolve-config.js +254 -0
- package/dist/resolution/resolve-config.js.map +1 -0
- package/dist/resolution/resolve-copy.d.ts +53 -0
- package/dist/resolution/resolve-copy.d.ts.map +1 -0
- package/dist/resolution/resolve-copy.js +136 -0
- package/dist/resolution/resolve-copy.js.map +1 -0
- package/dist/schemas/api.schemas.d.ts +984 -0
- package/dist/schemas/api.schemas.d.ts.map +1 -0
- package/dist/schemas/api.schemas.js +153 -0
- package/dist/schemas/api.schemas.js.map +1 -0
- package/dist/schemas/branding.schemas.d.ts +100 -0
- package/dist/schemas/branding.schemas.d.ts.map +1 -0
- package/dist/schemas/branding.schemas.js +57 -0
- package/dist/schemas/branding.schemas.js.map +1 -0
- package/dist/schemas/config.schemas.d.ts +1182 -0
- package/dist/schemas/config.schemas.d.ts.map +1 -0
- package/dist/schemas/config.schemas.js +147 -0
- package/dist/schemas/config.schemas.js.map +1 -0
- package/dist/schemas/index.d.ts +13 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +29 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/modes.schemas.d.ts +406 -0
- package/dist/schemas/modes.schemas.d.ts.map +1 -0
- package/dist/schemas/modes.schemas.js +107 -0
- package/dist/schemas/modes.schemas.js.map +1 -0
- package/dist/security/escape.d.ts +114 -0
- package/dist/security/escape.d.ts.map +1 -0
- package/dist/security/escape.js +202 -0
- package/dist/security/escape.js.map +1 -0
- package/dist/security/index.d.ts +10 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +26 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/validators.d.ts +98 -0
- package/dist/security/validators.d.ts.map +1 -0
- package/dist/security/validators.js +210 -0
- package/dist/security/validators.js.map +1 -0
- package/dist/styles/css-variables.d.ts +78 -0
- package/dist/styles/css-variables.d.ts.map +1 -0
- package/dist/styles/css-variables.js +129 -0
- package/dist/styles/css-variables.js.map +1 -0
- package/dist/styles/index.d.ts +12 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/index.js +28 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/styles/stylesheet.d.ts +57 -0
- package/dist/styles/stylesheet.d.ts.map +1 -0
- package/dist/styles/stylesheet.js +204 -0
- package/dist/styles/stylesheet.js.map +1 -0
- package/dist/styles/tokens.d.ts +141 -0
- package/dist/styles/tokens.d.ts.map +1 -0
- package/dist/styles/tokens.js +183 -0
- package/dist/styles/tokens.js.map +1 -0
- package/dist/templates/base/base-template.d.ts +81 -0
- package/dist/templates/base/base-template.d.ts.map +1 -0
- package/dist/templates/base/base-template.js +282 -0
- package/dist/templates/base/base-template.js.map +1 -0
- package/dist/templates/base/components.d.ts +120 -0
- package/dist/templates/base/components.d.ts.map +1 -0
- package/dist/templates/base/components.js +295 -0
- package/dist/templates/base/components.js.map +1 -0
- package/dist/templates/base/index.d.ts +8 -0
- package/dist/templates/base/index.d.ts.map +1 -0
- package/dist/templates/base/index.js +26 -0
- package/dist/templates/base/index.js.map +1 -0
- package/dist/templates/index.d.ts +18 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +34 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/modes/consent-only.template.d.ts +36 -0
- package/dist/templates/modes/consent-only.template.d.ts.map +1 -0
- package/dist/templates/modes/consent-only.template.js +74 -0
- package/dist/templates/modes/consent-only.template.js.map +1 -0
- package/dist/templates/modes/credentials.template.d.ts +65 -0
- package/dist/templates/modes/credentials.template.d.ts.map +1 -0
- package/dist/templates/modes/credentials.template.js +414 -0
- package/dist/templates/modes/credentials.template.js.map +1 -0
- package/dist/templates/modes/index.d.ts +14 -0
- package/dist/templates/modes/index.d.ts.map +1 -0
- package/dist/templates/modes/index.js +24 -0
- package/dist/templates/modes/index.js.map +1 -0
- package/dist/templates/modes/magic-link.template.d.ts +33 -0
- package/dist/templates/modes/magic-link.template.d.ts.map +1 -0
- package/dist/templates/modes/magic-link.template.js +196 -0
- package/dist/templates/modes/magic-link.template.js.map +1 -0
- package/dist/templates/modes/oauth.template.d.ts +40 -0
- package/dist/templates/modes/oauth.template.d.ts.map +1 -0
- package/dist/templates/modes/oauth.template.js +153 -0
- package/dist/templates/modes/oauth.template.js.map +1 -0
- package/dist/templates/modes/otp.template.d.ts +35 -0
- package/dist/templates/modes/otp.template.d.ts.map +1 -0
- package/dist/templates/modes/otp.template.js +316 -0
- package/dist/templates/modes/otp.template.js.map +1 -0
- package/dist/templates/modes/success.template.d.ts +41 -0
- package/dist/templates/modes/success.template.d.ts.map +1 -0
- package/dist/templates/modes/success.template.js +140 -0
- package/dist/templates/modes/success.template.js.map +1 -0
- package/dist/templates/registry.d.ts +62 -0
- package/dist/templates/registry.d.ts.map +1 -0
- package/dist/templates/registry.js +135 -0
- package/dist/templates/registry.js.map +1 -0
- package/dist/types/api.types.d.ts +134 -0
- package/dist/types/api.types.d.ts.map +1 -0
- package/dist/types/api.types.js +10 -0
- package/dist/types/api.types.js.map +1 -0
- package/dist/types/branding.types.d.ts +53 -0
- package/dist/types/branding.types.d.ts.map +1 -0
- package/dist/types/branding.types.js +10 -0
- package/dist/types/branding.types.js.map +1 -0
- package/dist/types/config.types.d.ts +201 -0
- package/dist/types/config.types.d.ts.map +1 -0
- package/dist/types/config.types.js +10 -0
- package/dist/types/config.types.js.map +1 -0
- package/dist/types/copy.types.d.ts +109 -0
- package/dist/types/copy.types.d.ts.map +1 -0
- package/dist/types/copy.types.js +10 -0
- package/dist/types/copy.types.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +31 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/modes.types.d.ts +197 -0
- package/dist/types/modes.types.d.ts.map +1 -0
- package/dist/types/modes.types.js +35 -0
- package/dist/types/modes.types.js.map +1 -0
- package/dist/types/page.types.d.ts +120 -0
- package/dist/types/page.types.d.ts.map +1 -0
- package/dist/types/page.types.js +10 -0
- package/dist/types/page.types.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Reusable HTML Components
|
|
4
|
+
*
|
|
5
|
+
* Each function corresponds to an AgentShield preview component:
|
|
6
|
+
* - renderLogo() -> PreviewAgentInfo logo
|
|
7
|
+
* - renderHeader() -> PreviewHeader
|
|
8
|
+
* - renderButton() -> PreviewButton
|
|
9
|
+
* - renderCheckbox() -> PreviewCheckbox
|
|
10
|
+
* - renderExpirationNotice() -> ExpirationNotice
|
|
11
|
+
*
|
|
12
|
+
* @module @kya-os/consent/templates/base/components
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.renderDefaultAgentIcon = renderDefaultAgentIcon;
|
|
16
|
+
exports.renderLogo = renderLogo;
|
|
17
|
+
exports.renderAgentInfo = renderAgentInfo;
|
|
18
|
+
exports.renderHeader = renderHeader;
|
|
19
|
+
exports.renderButton = renderButton;
|
|
20
|
+
exports.renderButtonGroup = renderButtonGroup;
|
|
21
|
+
exports.renderFullWidthButton = renderFullWidthButton;
|
|
22
|
+
exports.renderCheckbox = renderCheckbox;
|
|
23
|
+
exports.renderInput = renderInput;
|
|
24
|
+
exports.renderExpirationNotice = renderExpirationNotice;
|
|
25
|
+
exports.renderErrorContainer = renderErrorContainer;
|
|
26
|
+
exports.renderCheckIcon = renderCheckIcon;
|
|
27
|
+
exports.renderClockIcon = renderClockIcon;
|
|
28
|
+
exports.renderSuccessIcon = renderSuccessIcon;
|
|
29
|
+
const tokens_1 = require("../../styles/tokens");
|
|
30
|
+
const escape_1 = require("../../security/escape");
|
|
31
|
+
const validators_1 = require("../../security/validators");
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Logo & Agent Info
|
|
34
|
+
// ============================================================================
|
|
35
|
+
/**
|
|
36
|
+
* Render a default agent icon SVG.
|
|
37
|
+
* Used when no logo is provided.
|
|
38
|
+
*/
|
|
39
|
+
function renderDefaultAgentIcon() {
|
|
40
|
+
return `
|
|
41
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" class="text-gray-400">
|
|
42
|
+
<rect x="3" y="3" width="18" height="18" rx="2" stroke="currentColor" stroke-width="2" />
|
|
43
|
+
<circle cx="8" cy="8" r="1.5" fill="currentColor" />
|
|
44
|
+
<circle cx="16" cy="8" r="1.5" fill="currentColor" />
|
|
45
|
+
<path d="M8 14s1.5 2 4 2 4-2 4-2" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
|
|
46
|
+
</svg>
|
|
47
|
+
`;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Render a logo image or default icon.
|
|
51
|
+
*
|
|
52
|
+
* @param logoUrl - URL to logo image
|
|
53
|
+
* @param alt - Alt text for accessibility
|
|
54
|
+
* @returns HTML string
|
|
55
|
+
*/
|
|
56
|
+
function renderLogo(logoUrl, alt) {
|
|
57
|
+
if (!logoUrl) {
|
|
58
|
+
return renderDefaultAgentIcon();
|
|
59
|
+
}
|
|
60
|
+
const validUrl = (0, validators_1.validateUrl)(logoUrl);
|
|
61
|
+
if (!validUrl) {
|
|
62
|
+
return renderDefaultAgentIcon();
|
|
63
|
+
}
|
|
64
|
+
return `<img src="${(0, escape_1.escapeAttr)(validUrl)}" alt="${(0, escape_1.escapeAttr)(alt || "Agent")}" class="w-full h-full object-contain" />`;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Render agent info section with logo and description.
|
|
68
|
+
*
|
|
69
|
+
* @param description - Agent description text
|
|
70
|
+
* @param logoUrl - Optional logo URL
|
|
71
|
+
* @returns HTML string
|
|
72
|
+
*/
|
|
73
|
+
function renderAgentInfo(description, logoUrl) {
|
|
74
|
+
return `
|
|
75
|
+
<div class="${tokens_1.CONSENT_CLASSES.agentWrapper}">
|
|
76
|
+
<div class="${tokens_1.CONSENT_CLASSES.agentIcon}">
|
|
77
|
+
${renderLogo(logoUrl)}
|
|
78
|
+
</div>
|
|
79
|
+
<p class="${tokens_1.CONSENT_CLASSES.agentDescription}">${(0, escape_1.escapeHtml)(description)}</p>
|
|
80
|
+
</div>
|
|
81
|
+
`;
|
|
82
|
+
}
|
|
83
|
+
// ============================================================================
|
|
84
|
+
// Header
|
|
85
|
+
// ============================================================================
|
|
86
|
+
/**
|
|
87
|
+
* Render page header with optional logo and company name.
|
|
88
|
+
*
|
|
89
|
+
* @param title - Page title
|
|
90
|
+
* @param subtitle - Optional subtitle
|
|
91
|
+
* @param logoUrl - Optional logo URL for header
|
|
92
|
+
* @param companyName - Optional company name
|
|
93
|
+
* @returns HTML string
|
|
94
|
+
*/
|
|
95
|
+
function renderHeader(title, subtitle, logoUrl, companyName) {
|
|
96
|
+
let logoHtml = "";
|
|
97
|
+
if (logoUrl) {
|
|
98
|
+
const validUrl = (0, validators_1.validateUrl)(logoUrl);
|
|
99
|
+
if (validUrl) {
|
|
100
|
+
logoHtml = `<img src="${(0, escape_1.escapeAttr)(validUrl)}" alt="${(0, escape_1.escapeAttr)(companyName || "Logo")}" class="h-12 w-auto mb-4 mx-auto" />`;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const companyHtml = companyName
|
|
104
|
+
? `<p class="text-sm text-gray-600 mb-2">${(0, escape_1.escapeHtml)(companyName)}</p>`
|
|
105
|
+
: "";
|
|
106
|
+
const subtitleHtml = subtitle
|
|
107
|
+
? `<p class="${tokens_1.CONSENT_CLASSES.subtitle}">${(0, escape_1.escapeHtml)(subtitle)}</p>`
|
|
108
|
+
: "";
|
|
109
|
+
return `
|
|
110
|
+
<div class="${tokens_1.CONSENT_CLASSES.headerCenter}">
|
|
111
|
+
${logoHtml}
|
|
112
|
+
${companyHtml}
|
|
113
|
+
<h1 class="${tokens_1.CONSENT_CLASSES.title}">${(0, escape_1.escapeHtml)(title)}</h1>
|
|
114
|
+
${subtitleHtml}
|
|
115
|
+
</div>
|
|
116
|
+
`;
|
|
117
|
+
}
|
|
118
|
+
// ============================================================================
|
|
119
|
+
// Buttons
|
|
120
|
+
// ============================================================================
|
|
121
|
+
/**
|
|
122
|
+
* Render a button element.
|
|
123
|
+
*
|
|
124
|
+
* @param text - Button text
|
|
125
|
+
* @param variant - 'primary' | 'secondary'
|
|
126
|
+
* @param type - 'submit' | 'button'
|
|
127
|
+
* @param attributes - Additional HTML attributes
|
|
128
|
+
* @returns HTML string
|
|
129
|
+
*/
|
|
130
|
+
function renderButton(text, variant, type = "button", attributes = {}) {
|
|
131
|
+
const baseClass = variant === "primary"
|
|
132
|
+
? `${tokens_1.CONSENT_CLASSES.buttonPrimary} btn-primary`
|
|
133
|
+
: tokens_1.CONSENT_CLASSES.buttonSecondary;
|
|
134
|
+
const attrs = Object.entries(attributes)
|
|
135
|
+
.map(([k, v]) => `${k}="${(0, escape_1.escapeAttr)(v)}"`)
|
|
136
|
+
.join(" ");
|
|
137
|
+
return `<button type="${type}" class="${baseClass}" ${attrs}>${(0, escape_1.escapeHtml)(text)}</button>`;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Render button group with cancel and submit buttons.
|
|
141
|
+
*
|
|
142
|
+
* @param cancelText - Cancel button text
|
|
143
|
+
* @param submitText - Submit button text
|
|
144
|
+
* @returns HTML string
|
|
145
|
+
*/
|
|
146
|
+
function renderButtonGroup(cancelText, submitText) {
|
|
147
|
+
return `
|
|
148
|
+
<div class="${tokens_1.CONSENT_CLASSES.buttonGroup}">
|
|
149
|
+
${renderButton(cancelText, "secondary", "button", { onclick: "window.close()" })}
|
|
150
|
+
${renderButton(submitText, "primary", "submit")}
|
|
151
|
+
</div>
|
|
152
|
+
`;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Render a full-width primary button.
|
|
156
|
+
*
|
|
157
|
+
* @param text - Button text
|
|
158
|
+
* @param type - 'submit' | 'button'
|
|
159
|
+
* @returns HTML string
|
|
160
|
+
*/
|
|
161
|
+
function renderFullWidthButton(text, type = "submit") {
|
|
162
|
+
return `<button type="${type}" class="${tokens_1.CONSENT_CLASSES.buttonFull} btn-primary">${(0, escape_1.escapeHtml)(text)}</button>`;
|
|
163
|
+
}
|
|
164
|
+
// ============================================================================
|
|
165
|
+
// Form Elements
|
|
166
|
+
// ============================================================================
|
|
167
|
+
/**
|
|
168
|
+
* Render a checkbox input.
|
|
169
|
+
*
|
|
170
|
+
* @param name - Input name
|
|
171
|
+
* @param label - Label text (can include HTML like links)
|
|
172
|
+
* @param required - Whether field is required
|
|
173
|
+
* @param checked - Whether initially checked
|
|
174
|
+
* @param disabled - Whether disabled
|
|
175
|
+
* @returns HTML string
|
|
176
|
+
*/
|
|
177
|
+
function renderCheckbox(name, label, required = false, checked = false, disabled = false) {
|
|
178
|
+
const requiredAttr = required ? "required" : "";
|
|
179
|
+
const checkedAttr = checked ? "checked" : "";
|
|
180
|
+
const disabledAttr = disabled ? "disabled" : "";
|
|
181
|
+
return `
|
|
182
|
+
<label class="${tokens_1.CONSENT_CLASSES.checkboxLabel}">
|
|
183
|
+
<input type="checkbox" name="${(0, escape_1.escapeAttr)(name)}"
|
|
184
|
+
class="${tokens_1.CONSENT_CLASSES.checkbox}"
|
|
185
|
+
${requiredAttr} ${checkedAttr} ${disabledAttr} />
|
|
186
|
+
<span class="${tokens_1.CONSENT_CLASSES.checkboxText}">${label}</span>
|
|
187
|
+
</label>
|
|
188
|
+
`;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Render an input field with label.
|
|
192
|
+
*
|
|
193
|
+
* @param type - Input type
|
|
194
|
+
* @param name - Input name
|
|
195
|
+
* @param label - Label text
|
|
196
|
+
* @param placeholder - Placeholder text
|
|
197
|
+
* @param required - Whether required
|
|
198
|
+
* @param autocomplete - Autocomplete value
|
|
199
|
+
* @returns HTML string
|
|
200
|
+
*/
|
|
201
|
+
function renderInput(type, name, label, placeholder, required = false, autocomplete) {
|
|
202
|
+
const placeholderAttr = placeholder
|
|
203
|
+
? `placeholder="${(0, escape_1.escapeAttr)(placeholder)}"`
|
|
204
|
+
: "";
|
|
205
|
+
const requiredAttr = required ? "required" : "";
|
|
206
|
+
const autocompleteAttr = autocomplete
|
|
207
|
+
? `autocomplete="${(0, escape_1.escapeAttr)(autocomplete)}"`
|
|
208
|
+
: "";
|
|
209
|
+
return `
|
|
210
|
+
<div class="space-y-2">
|
|
211
|
+
<label for="${(0, escape_1.escapeAttr)(name)}" class="block text-sm font-medium text-gray-700">
|
|
212
|
+
${(0, escape_1.escapeHtml)(label)}
|
|
213
|
+
</label>
|
|
214
|
+
<input
|
|
215
|
+
type="${type}"
|
|
216
|
+
id="${(0, escape_1.escapeAttr)(name)}"
|
|
217
|
+
name="${(0, escape_1.escapeAttr)(name)}"
|
|
218
|
+
${placeholderAttr}
|
|
219
|
+
${requiredAttr}
|
|
220
|
+
${autocompleteAttr}
|
|
221
|
+
class="${tokens_1.CONSENT_CLASSES.input} ${tokens_1.CONSENT_CLASSES.inputFocus}"
|
|
222
|
+
/>
|
|
223
|
+
</div>
|
|
224
|
+
`;
|
|
225
|
+
}
|
|
226
|
+
// ============================================================================
|
|
227
|
+
// Notices
|
|
228
|
+
// ============================================================================
|
|
229
|
+
/**
|
|
230
|
+
* Render expiration notice.
|
|
231
|
+
*
|
|
232
|
+
* @param text - Notice text
|
|
233
|
+
* @param days - Number of days (optional)
|
|
234
|
+
* @returns HTML string
|
|
235
|
+
*/
|
|
236
|
+
function renderExpirationNotice(text, days) {
|
|
237
|
+
const fullText = days ? `${text} ${days} days` : text;
|
|
238
|
+
return `
|
|
239
|
+
<div class="${tokens_1.CONSENT_CLASSES.expirationWrapper} bg-secondary-50">
|
|
240
|
+
<svg class="w-4 h-4 text-primary flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
241
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
|
242
|
+
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
243
|
+
</svg>
|
|
244
|
+
<span class="text-sm text-gray-600">${(0, escape_1.escapeHtml)(fullText)}</span>
|
|
245
|
+
</div>
|
|
246
|
+
`;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Render an error container (initially hidden).
|
|
250
|
+
*
|
|
251
|
+
* @param id - Container ID for JavaScript access
|
|
252
|
+
* @returns HTML string
|
|
253
|
+
*/
|
|
254
|
+
function renderErrorContainer(id = "error-container") {
|
|
255
|
+
return `
|
|
256
|
+
<div id="${(0, escape_1.escapeAttr)(id)}" class="hidden">
|
|
257
|
+
<div class="${tokens_1.CONSENT_CLASSES.errorContainer}"></div>
|
|
258
|
+
</div>
|
|
259
|
+
`;
|
|
260
|
+
}
|
|
261
|
+
// ============================================================================
|
|
262
|
+
// Icons
|
|
263
|
+
// ============================================================================
|
|
264
|
+
/**
|
|
265
|
+
* Render a checkmark icon.
|
|
266
|
+
*/
|
|
267
|
+
function renderCheckIcon() {
|
|
268
|
+
return `
|
|
269
|
+
<svg class="w-5 h-5 text-green-500 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
270
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
|
|
271
|
+
</svg>
|
|
272
|
+
`;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Render a clock icon.
|
|
276
|
+
*/
|
|
277
|
+
function renderClockIcon() {
|
|
278
|
+
return `
|
|
279
|
+
<svg class="w-4 h-4 text-primary flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
280
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
|
281
|
+
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
282
|
+
</svg>
|
|
283
|
+
`;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Render a success checkmark icon (large, green).
|
|
287
|
+
*/
|
|
288
|
+
function renderSuccessIcon() {
|
|
289
|
+
return `
|
|
290
|
+
<svg class="mx-auto h-12 w-12 text-green-500 mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
|
291
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
|
|
292
|
+
</svg>
|
|
293
|
+
`;
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/templates/base/components.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Template Exports
|
|
3
|
+
*
|
|
4
|
+
* @module @kya-os/consent/templates/base
|
|
5
|
+
*/
|
|
6
|
+
export { BaseConsentTemplate } from "./base-template";
|
|
7
|
+
export { renderDefaultAgentIcon, renderLogo, renderAgentInfo, renderHeader, renderButton, renderButtonGroup, renderFullWidthButton, renderCheckbox, renderInput, renderExpirationNotice, renderErrorContainer, renderCheckIcon, renderClockIcon, renderSuccessIcon, } from "./components";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/base/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,sBAAsB,EACtB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base Template Exports
|
|
4
|
+
*
|
|
5
|
+
* @module @kya-os/consent/templates/base
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.renderSuccessIcon = exports.renderClockIcon = exports.renderCheckIcon = exports.renderErrorContainer = exports.renderExpirationNotice = exports.renderInput = exports.renderCheckbox = exports.renderFullWidthButton = exports.renderButtonGroup = exports.renderButton = exports.renderHeader = exports.renderAgentInfo = exports.renderLogo = exports.renderDefaultAgentIcon = exports.BaseConsentTemplate = void 0;
|
|
9
|
+
var base_template_1 = require("./base-template");
|
|
10
|
+
Object.defineProperty(exports, "BaseConsentTemplate", { enumerable: true, get: function () { return base_template_1.BaseConsentTemplate; } });
|
|
11
|
+
var components_1 = require("./components");
|
|
12
|
+
Object.defineProperty(exports, "renderDefaultAgentIcon", { enumerable: true, get: function () { return components_1.renderDefaultAgentIcon; } });
|
|
13
|
+
Object.defineProperty(exports, "renderLogo", { enumerable: true, get: function () { return components_1.renderLogo; } });
|
|
14
|
+
Object.defineProperty(exports, "renderAgentInfo", { enumerable: true, get: function () { return components_1.renderAgentInfo; } });
|
|
15
|
+
Object.defineProperty(exports, "renderHeader", { enumerable: true, get: function () { return components_1.renderHeader; } });
|
|
16
|
+
Object.defineProperty(exports, "renderButton", { enumerable: true, get: function () { return components_1.renderButton; } });
|
|
17
|
+
Object.defineProperty(exports, "renderButtonGroup", { enumerable: true, get: function () { return components_1.renderButtonGroup; } });
|
|
18
|
+
Object.defineProperty(exports, "renderFullWidthButton", { enumerable: true, get: function () { return components_1.renderFullWidthButton; } });
|
|
19
|
+
Object.defineProperty(exports, "renderCheckbox", { enumerable: true, get: function () { return components_1.renderCheckbox; } });
|
|
20
|
+
Object.defineProperty(exports, "renderInput", { enumerable: true, get: function () { return components_1.renderInput; } });
|
|
21
|
+
Object.defineProperty(exports, "renderExpirationNotice", { enumerable: true, get: function () { return components_1.renderExpirationNotice; } });
|
|
22
|
+
Object.defineProperty(exports, "renderErrorContainer", { enumerable: true, get: function () { return components_1.renderErrorContainer; } });
|
|
23
|
+
Object.defineProperty(exports, "renderCheckIcon", { enumerable: true, get: function () { return components_1.renderCheckIcon; } });
|
|
24
|
+
Object.defineProperty(exports, "renderClockIcon", { enumerable: true, get: function () { return components_1.renderClockIcon; } });
|
|
25
|
+
Object.defineProperty(exports, "renderSuccessIcon", { enumerable: true, get: function () { return components_1.renderSuccessIcon; } });
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/base/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,iDAAsD;AAA7C,oHAAA,mBAAmB,OAAA;AAC5B,2CAesB;AAdpB,oHAAA,sBAAsB,OAAA;AACtB,wGAAA,UAAU,OAAA;AACV,6GAAA,eAAe,OAAA;AACf,0GAAA,YAAY,OAAA;AACZ,0GAAA,YAAY,OAAA;AACZ,+GAAA,iBAAiB,OAAA;AACjB,mHAAA,qBAAqB,OAAA;AACrB,4GAAA,cAAc,OAAA;AACd,yGAAA,WAAW,OAAA;AACX,oHAAA,sBAAsB,OAAA;AACtB,kHAAA,oBAAoB,OAAA;AACpB,6GAAA,eAAe,OAAA;AACf,6GAAA,eAAe,OAAA;AACf,+GAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consent Templates
|
|
3
|
+
*
|
|
4
|
+
* Template Method pattern implementation for consent page rendering.
|
|
5
|
+
* Used by MCP-I Cloudflare runtime to generate consent pages.
|
|
6
|
+
*
|
|
7
|
+
* @module @kya-os/consent/templates
|
|
8
|
+
*/
|
|
9
|
+
export * from "./base/base-template";
|
|
10
|
+
export * from "./base/components";
|
|
11
|
+
export * from "./modes/consent-only.template";
|
|
12
|
+
export * from "./modes/credentials.template";
|
|
13
|
+
export * from "./modes/oauth.template";
|
|
14
|
+
export * from "./modes/magic-link.template";
|
|
15
|
+
export * from "./modes/otp.template";
|
|
16
|
+
export * from "./modes/success.template";
|
|
17
|
+
export * from "./registry";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Consent Templates
|
|
4
|
+
*
|
|
5
|
+
* Template Method pattern implementation for consent page rendering.
|
|
6
|
+
* Used by MCP-I Cloudflare runtime to generate consent pages.
|
|
7
|
+
*
|
|
8
|
+
* @module @kya-os/consent/templates
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
22
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
__exportStar(require("./base/base-template"), exports);
|
|
26
|
+
__exportStar(require("./base/components"), exports);
|
|
27
|
+
__exportStar(require("./modes/consent-only.template"), exports);
|
|
28
|
+
__exportStar(require("./modes/credentials.template"), exports);
|
|
29
|
+
__exportStar(require("./modes/oauth.template"), exports);
|
|
30
|
+
__exportStar(require("./modes/magic-link.template"), exports);
|
|
31
|
+
__exportStar(require("./modes/otp.template"), exports);
|
|
32
|
+
__exportStar(require("./modes/success.template"), exports);
|
|
33
|
+
__exportStar(require("./registry"), exports);
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;AAEH,uDAAqC;AACrC,oDAAkC;AAClC,gEAA8C;AAC9C,+DAA6C;AAC7C,yDAAuC;AACvC,8DAA4C;AAC5C,uDAAqC;AACrC,2DAAyC;AACzC,6CAA2B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consent-Only Template
|
|
3
|
+
*
|
|
4
|
+
* Default clickwrap consent without authentication.
|
|
5
|
+
* User simply agrees to permissions and terms.
|
|
6
|
+
*
|
|
7
|
+
* @module @kya-os/consent/templates/modes/consent-only
|
|
8
|
+
*/
|
|
9
|
+
import { BaseConsentTemplate } from "../base/base-template";
|
|
10
|
+
import type { AuthMode } from "../../types/modes.types";
|
|
11
|
+
/**
|
|
12
|
+
* Consent-Only Template
|
|
13
|
+
*
|
|
14
|
+
* Renders a simple clickwrap consent page:
|
|
15
|
+
* - Shows requested permissions as checkboxes (pre-checked, disabled)
|
|
16
|
+
* - Shows expiration notice
|
|
17
|
+
* - Terms acceptance checkbox
|
|
18
|
+
* - Cancel/Allow buttons
|
|
19
|
+
*/
|
|
20
|
+
export declare class ConsentOnlyTemplate extends BaseConsentTemplate {
|
|
21
|
+
get authMode(): AuthMode;
|
|
22
|
+
renderAuthContent(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Render the list of requested permissions.
|
|
25
|
+
*/
|
|
26
|
+
private renderPermissionsList;
|
|
27
|
+
/**
|
|
28
|
+
* Render a single scope item with info tooltip.
|
|
29
|
+
*/
|
|
30
|
+
private renderScopeItem;
|
|
31
|
+
/**
|
|
32
|
+
* Render the expiration notice.
|
|
33
|
+
*/
|
|
34
|
+
private renderExpirationNotice;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=consent-only.template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consent-only.template.d.ts","sourceRoot":"","sources":["../../../src/templates/modes/consent-only.template.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAI5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,SAAQ,mBAAmB;IAC1D,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAEQ,iBAAiB,IAAI,MAAM;IAOpC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAK/B"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Consent-Only Template
|
|
4
|
+
*
|
|
5
|
+
* Default clickwrap consent without authentication.
|
|
6
|
+
* User simply agrees to permissions and terms.
|
|
7
|
+
*
|
|
8
|
+
* @module @kya-os/consent/templates/modes/consent-only
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.ConsentOnlyTemplate = void 0;
|
|
12
|
+
const base_template_1 = require("../base/base-template");
|
|
13
|
+
const components_1 = require("../base/components");
|
|
14
|
+
const tokens_1 = require("../../styles/tokens");
|
|
15
|
+
const escape_1 = require("../../security/escape");
|
|
16
|
+
const modes_types_1 = require("../../types/modes.types");
|
|
17
|
+
/**
|
|
18
|
+
* Consent-Only Template
|
|
19
|
+
*
|
|
20
|
+
* Renders a simple clickwrap consent page:
|
|
21
|
+
* - Shows requested permissions as checkboxes (pre-checked, disabled)
|
|
22
|
+
* - Shows expiration notice
|
|
23
|
+
* - Terms acceptance checkbox
|
|
24
|
+
* - Cancel/Allow buttons
|
|
25
|
+
*/
|
|
26
|
+
class ConsentOnlyTemplate extends base_template_1.BaseConsentTemplate {
|
|
27
|
+
get authMode() {
|
|
28
|
+
return modes_types_1.AUTH_MODES.CONSENT_ONLY;
|
|
29
|
+
}
|
|
30
|
+
renderAuthContent() {
|
|
31
|
+
return `
|
|
32
|
+
${this.renderPermissionsList()}
|
|
33
|
+
${this.renderExpirationNotice()}
|
|
34
|
+
`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Render the list of requested permissions.
|
|
38
|
+
*/
|
|
39
|
+
renderPermissionsList() {
|
|
40
|
+
const { copy } = this.resolved;
|
|
41
|
+
const { scopes } = this.config;
|
|
42
|
+
if (scopes.length === 0) {
|
|
43
|
+
return `<p class="text-sm text-gray-600">No specific permissions required.</p>`;
|
|
44
|
+
}
|
|
45
|
+
const scopeItems = scopes
|
|
46
|
+
.map((scope) => this.renderScopeItem(scope))
|
|
47
|
+
.join("");
|
|
48
|
+
return `
|
|
49
|
+
<div class="space-y-5">
|
|
50
|
+
<p class="${tokens_1.CONSENT_CLASSES.permissionsHeader}">${(0, escape_1.escapeHtml)(copy.permissionsHeader)}</p>
|
|
51
|
+
<div class="${tokens_1.CONSENT_CLASSES.permissionsList}">
|
|
52
|
+
${scopeItems}
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
`;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Render a single scope item with info tooltip.
|
|
59
|
+
*/
|
|
60
|
+
renderScopeItem(scope) {
|
|
61
|
+
// Scopes are pre-checked and disabled (informational only)
|
|
62
|
+
return (0, components_1.renderCheckbox)(`scope_${scope}`, (0, escape_1.escapeHtml)(scope), false, true, true);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Render the expiration notice.
|
|
66
|
+
*/
|
|
67
|
+
renderExpirationNotice() {
|
|
68
|
+
const { copy } = this.resolved;
|
|
69
|
+
const expirationDays = this.resolved.expirationDays || 30;
|
|
70
|
+
return (0, components_1.renderExpirationNotice)(copy.expirationText, expirationDays);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.ConsentOnlyTemplate = ConsentOnlyTemplate;
|
|
74
|
+
//# sourceMappingURL=consent-only.template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consent-only.template.js","sourceRoot":"","sources":["../../../src/templates/modes/consent-only.template.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,yDAA4D;AAC5D,mDAA4E;AAC5E,gDAAsD;AACtD,kDAAmD;AAEnD,yDAAqD;AAErD;;;;;;;;GAQG;AACH,MAAa,mBAAoB,SAAQ,mCAAmB;IAC1D,IAAI,QAAQ;QACV,OAAO,wBAAU,CAAC,YAAY,CAAC;IACjC,CAAC;IAEQ,iBAAiB;QACxB,OAAO;QACH,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,sBAAsB,EAAE;KAChC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAE/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,wEAAwE,CAAC;QAClF,CAAC;QAED,MAAM,UAAU,GAAG,MAAM;aACtB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO;;oBAES,wBAAe,CAAC,iBAAiB,KAAK,IAAA,mBAAU,EAAC,IAAI,CAAC,iBAAiB,CAAC;sBACtE,wBAAe,CAAC,eAAe;YACzC,UAAU;;;KAGjB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,KAAa;QACnC,2DAA2D;QAC3D,OAAO,IAAA,2BAAc,EACnB,SAAS,KAAK,EAAE,EAChB,IAAA,mBAAU,EAAC,KAAK,CAAC,EACjB,KAAK,EACL,IAAI,EACJ,IAAI,CACL,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,sBAAsB;QAC5B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE,CAAC;QAC1D,OAAO,IAAA,mCAAsB,EAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IACrE,CAAC;CACF;AA3DD,kDA2DC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credentials Template
|
|
3
|
+
*
|
|
4
|
+
* Username/password authentication flow.
|
|
5
|
+
* HTML structure matches AgentShield's CredentialsPreview.tsx EXACTLY.
|
|
6
|
+
*
|
|
7
|
+
* This is a pixel-perfect port of the React component to static HTML.
|
|
8
|
+
* Any changes here MUST be synchronized with AgentShield.
|
|
9
|
+
*
|
|
10
|
+
* @module @kya-os/consent/templates/modes/credentials
|
|
11
|
+
*/
|
|
12
|
+
import { BaseConsentTemplate } from "../base/base-template";
|
|
13
|
+
import type { AuthMode, CredentialsConfig } from "../../types/modes.types";
|
|
14
|
+
import type { ResolvedConsentConfig } from "../../types/config.types";
|
|
15
|
+
import type { ExtendedConsentPageConfig } from "../../types/page.types";
|
|
16
|
+
/**
|
|
17
|
+
* Credentials Template
|
|
18
|
+
*
|
|
19
|
+
* Renders a login form matching AgentShield's CredentialsPreview exactly:
|
|
20
|
+
* - PreviewShell wrapper with branding
|
|
21
|
+
* - PreviewHeader with title
|
|
22
|
+
* - PreviewContent with spacing
|
|
23
|
+
* - PreviewAgentInfo with icon + description
|
|
24
|
+
* - Username/email field (shadcn Input style)
|
|
25
|
+
* - Password field with show/hide toggle
|
|
26
|
+
* - Remember me checkbox (label toggles checkbox)
|
|
27
|
+
* - Forgot password link
|
|
28
|
+
* - Cancel + Sign in buttons (PreviewButtonGroup)
|
|
29
|
+
*/
|
|
30
|
+
export declare class CredentialsTemplate extends BaseConsentTemplate {
|
|
31
|
+
private remoteCredentialsConfig?;
|
|
32
|
+
constructor(config: ExtendedConsentPageConfig, resolved: ResolvedConsentConfig, remoteCredentials?: CredentialsConfig);
|
|
33
|
+
get authMode(): AuthMode;
|
|
34
|
+
private get credentialsConfig();
|
|
35
|
+
/**
|
|
36
|
+
* Override the main render method to match AgentShield's exact structure.
|
|
37
|
+
* This bypasses the base template's structure to ensure pixel-perfect match.
|
|
38
|
+
*/
|
|
39
|
+
render(): string;
|
|
40
|
+
/**
|
|
41
|
+
* Render the <head> section with meta tags, styles, and scripts.
|
|
42
|
+
*/
|
|
43
|
+
protected renderHead(): string;
|
|
44
|
+
/**
|
|
45
|
+
* Render agent icon SVG (matches AgentIconPlaceholder in AgentShield)
|
|
46
|
+
*/
|
|
47
|
+
private renderAgentIcon;
|
|
48
|
+
/**
|
|
49
|
+
* Render remember me checkbox and forgot password link.
|
|
50
|
+
* The checkbox uses a <label> that wraps everything so clicking toggles.
|
|
51
|
+
*/
|
|
52
|
+
private renderRememberAndForgot;
|
|
53
|
+
/**
|
|
54
|
+
* These methods are overridden to prevent base template rendering
|
|
55
|
+
* since we completely override render()
|
|
56
|
+
*/
|
|
57
|
+
renderAuthContent(): string;
|
|
58
|
+
protected renderActionButtons(): string;
|
|
59
|
+
protected renderTermsSection(): string;
|
|
60
|
+
/**
|
|
61
|
+
* Render mode-specific scripts for password toggle and checkbox
|
|
62
|
+
*/
|
|
63
|
+
protected renderModeScript(): string;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=credentials.template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.template.d.ts","sourceRoot":"","sources":["../../../src/templates/modes/credentials.template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGxE;;;;;;;;;;;;;GAaG;AACH,qBAAa,mBAAoB,SAAQ,mBAAmB;IAC1D,OAAO,CAAC,uBAAuB,CAAC,CAAoB;gBAGlD,MAAM,EAAE,yBAAyB,EACjC,QAAQ,EAAE,qBAAqB,EAC/B,iBAAiB,CAAC,EAAE,iBAAiB;IAMvC,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,OAAO,KAAK,iBAAiB,GAoB5B;IAED;;;OAGG;IACM,MAAM,IAAI,MAAM;IAyHzB;;OAEG;cACgB,UAAU,IAAI,MAAM;IAcvC;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAiD/B;;;OAGG;IACM,iBAAiB,IAAI,MAAM;cAIjB,mBAAmB,IAAI,MAAM;cAI7B,kBAAkB,IAAI,MAAM;IAI/C;;OAEG;cACgB,gBAAgB,IAAI,MAAM;CA2I9C"}
|