@kya-os/consent 0.1.0 → 0.1.2
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/index.d.ts +44 -0
- package/dist/bundle/index.d.ts.map +1 -0
- package/dist/bundle/index.js +45 -0
- package/dist/bundle/index.js.map +1 -0
- package/dist/bundle/inline.d.ts +18 -0
- package/dist/bundle/inline.d.ts.map +1 -0
- package/dist/bundle/inline.js +18 -0
- package/dist/bundle/inline.js.map +1 -0
- package/dist/bundle/shell.d.ts +91 -0
- package/dist/bundle/shell.d.ts.map +1 -0
- package/dist/bundle/shell.js +282 -0
- package/dist/bundle/shell.js.map +1 -0
- package/dist/components/consent-button.d.ts +61 -0
- package/dist/components/consent-button.d.ts.map +1 -0
- package/dist/components/consent-button.js +177 -0
- package/dist/components/consent-button.js.map +1 -0
- package/dist/components/consent-checkbox.d.ts +61 -0
- package/dist/components/consent-checkbox.d.ts.map +1 -0
- package/dist/components/consent-checkbox.js +220 -0
- package/dist/components/consent-checkbox.js.map +1 -0
- package/dist/components/consent-input.d.ts +91 -0
- package/dist/components/consent-input.d.ts.map +1 -0
- package/dist/components/consent-input.js +332 -0
- package/dist/components/consent-input.js.map +1 -0
- package/dist/components/consent-oauth-button.d.ts +87 -0
- package/dist/components/consent-oauth-button.d.ts.map +1 -0
- package/dist/components/consent-oauth-button.js +389 -0
- package/dist/components/consent-oauth-button.js.map +1 -0
- package/dist/components/consent-otp-input.d.ts +92 -0
- package/dist/components/consent-otp-input.d.ts.map +1 -0
- package/dist/components/consent-otp-input.js +385 -0
- package/dist/components/consent-otp-input.js.map +1 -0
- package/dist/components/consent-permissions.d.ts +104 -0
- package/dist/components/consent-permissions.d.ts.map +1 -0
- package/dist/components/consent-permissions.js +430 -0
- package/dist/components/consent-permissions.js.map +1 -0
- package/dist/components/consent-shell.d.ts +72 -0
- package/dist/components/consent-shell.d.ts.map +1 -0
- package/dist/components/consent-shell.js +231 -0
- package/dist/components/consent-shell.js.map +1 -0
- package/dist/components/consent-terms.d.ts +89 -0
- package/dist/components/consent-terms.d.ts.map +1 -0
- package/dist/components/consent-terms.js +284 -0
- package/dist/components/consent-terms.js.map +1 -0
- package/dist/components/index.d.ts +19 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +23 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/mcp-consent.d.ts +152 -0
- package/dist/components/mcp-consent.d.ts.map +1 -0
- package/dist/components/mcp-consent.js +874 -0
- package/dist/components/mcp-consent.js.map +1 -0
- package/dist/consent.js +3744 -0
- package/dist/consent.min.js +1564 -0
- package/dist/constants/auth-modes.d.ts +7 -2
- package/dist/constants/auth-modes.d.ts.map +1 -1
- package/dist/constants/auth-modes.js +28 -36
- package/dist/constants/auth-modes.js.map +1 -1
- package/dist/constants/colors.js +1 -4
- package/dist/constants/colors.js.map +1 -1
- package/dist/constants/defaults.d.ts +1 -1
- package/dist/constants/defaults.d.ts.map +1 -1
- package/dist/constants/defaults.js +16 -19
- package/dist/constants/defaults.js.map +1 -1
- package/dist/constants/index.d.ts +3 -3
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +3 -26
- package/dist/constants/index.js.map +1 -1
- package/dist/index.d.ts +10 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -23
- package/dist/index.js.map +1 -1
- package/dist/react/index.d.ts +123 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +154 -0
- package/dist/react/index.js.map +1 -0
- package/dist/resolution/index.d.ts +3 -3
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +3 -19
- package/dist/resolution/index.js.map +1 -1
- package/dist/resolution/resolve-branding.d.ts +1 -1
- package/dist/resolution/resolve-branding.d.ts.map +1 -1
- package/dist/resolution/resolve-branding.js +14 -24
- package/dist/resolution/resolve-branding.js.map +1 -1
- package/dist/resolution/resolve-config.d.ts +2 -2
- package/dist/resolution/resolve-config.d.ts.map +1 -1
- package/dist/resolution/resolve-config.js +57 -53
- package/dist/resolution/resolve-config.js.map +1 -1
- package/dist/resolution/resolve-copy.d.ts +2 -2
- package/dist/resolution/resolve-copy.d.ts.map +1 -1
- package/dist/resolution/resolve-copy.js +35 -43
- package/dist/resolution/resolve-copy.js.map +1 -1
- package/dist/schemas/api.schemas.d.ts +7 -4
- package/dist/schemas/api.schemas.d.ts.map +1 -1
- package/dist/schemas/api.schemas.js +70 -74
- package/dist/schemas/api.schemas.js.map +1 -1
- package/dist/schemas/branding.schemas.js +17 -20
- package/dist/schemas/branding.schemas.js.map +1 -1
- package/dist/schemas/config.schemas.d.ts +1 -1
- package/dist/schemas/config.schemas.d.ts.map +1 -1
- package/dist/schemas/config.schemas.js +64 -70
- package/dist/schemas/config.schemas.js.map +1 -1
- package/dist/schemas/index.d.ts +4 -4
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +4 -20
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/modes.schemas.js +60 -63
- package/dist/schemas/modes.schemas.js.map +1 -1
- package/dist/security/escape.d.ts.map +1 -1
- package/dist/security/escape.js +12 -17
- package/dist/security/escape.js.map +1 -1
- package/dist/security/index.d.ts +2 -2
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +2 -18
- package/dist/security/index.js.map +1 -1
- package/dist/security/validators.js +9 -20
- package/dist/security/validators.js.map +1 -1
- package/dist/styles/css-variables.d.ts +1 -1
- package/dist/styles/css-variables.d.ts.map +1 -1
- package/dist/styles/css-variables.js +18 -27
- package/dist/styles/css-variables.js.map +1 -1
- package/dist/styles/index.d.ts +3 -3
- package/dist/styles/index.d.ts.map +1 -1
- package/dist/styles/index.js +3 -19
- package/dist/styles/index.js.map +1 -1
- package/dist/styles/stylesheet.d.ts +1 -1
- package/dist/styles/stylesheet.d.ts.map +1 -1
- package/dist/styles/stylesheet.js +20 -27
- package/dist/styles/stylesheet.js.map +1 -1
- package/dist/styles/tokens.js +1 -4
- package/dist/styles/tokens.js.map +1 -1
- package/dist/templates/base/base-template.d.ts +3 -3
- package/dist/templates/base/base-template.d.ts.map +1 -1
- package/dist/templates/base/base-template.js +31 -35
- package/dist/templates/base/base-template.js.map +1 -1
- package/dist/templates/base/components.js +49 -65
- package/dist/templates/base/components.js.map +1 -1
- package/dist/templates/base/index.d.ts +2 -2
- package/dist/templates/base/index.d.ts.map +1 -1
- package/dist/templates/base/index.js +2 -20
- package/dist/templates/base/index.js.map +1 -1
- package/dist/templates/index.d.ts +9 -9
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +9 -25
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/modes/consent-only.template.d.ts +2 -2
- package/dist/templates/modes/consent-only.template.d.ts.map +1 -1
- package/dist/templates/modes/consent-only.template.js +11 -15
- package/dist/templates/modes/consent-only.template.js.map +1 -1
- package/dist/templates/modes/credentials.template.d.ts +4 -4
- package/dist/templates/modes/credentials.template.d.ts.map +1 -1
- package/dist/templates/modes/credentials.template.js +20 -24
- package/dist/templates/modes/credentials.template.js.map +1 -1
- package/dist/templates/modes/index.d.ts +6 -6
- package/dist/templates/modes/index.d.ts.map +1 -1
- package/dist/templates/modes/index.js +6 -16
- package/dist/templates/modes/index.js.map +1 -1
- package/dist/templates/modes/magic-link.template.d.ts +2 -2
- package/dist/templates/modes/magic-link.template.d.ts.map +1 -1
- package/dist/templates/modes/magic-link.template.js +14 -18
- package/dist/templates/modes/magic-link.template.js.map +1 -1
- package/dist/templates/modes/oauth.template.d.ts +2 -2
- package/dist/templates/modes/oauth.template.d.ts.map +1 -1
- package/dist/templates/modes/oauth.template.js +21 -25
- package/dist/templates/modes/oauth.template.js.map +1 -1
- package/dist/templates/modes/otp.template.d.ts +2 -2
- package/dist/templates/modes/otp.template.d.ts.map +1 -1
- package/dist/templates/modes/otp.template.js +17 -21
- package/dist/templates/modes/otp.template.js.map +1 -1
- package/dist/templates/modes/success.template.d.ts +2 -2
- package/dist/templates/modes/success.template.d.ts.map +1 -1
- package/dist/templates/modes/success.template.js +24 -29
- package/dist/templates/modes/success.template.js.map +1 -1
- package/dist/templates/registry.d.ts +4 -4
- package/dist/templates/registry.d.ts.map +1 -1
- package/dist/templates/registry.js +30 -38
- package/dist/templates/registry.js.map +1 -1
- package/dist/types/api.types.d.ts +6 -5
- package/dist/types/api.types.d.ts.map +1 -1
- package/dist/types/api.types.js +1 -2
- package/dist/types/api.types.js.map +1 -1
- package/dist/types/branding.types.js +1 -2
- package/dist/types/branding.types.js.map +1 -1
- package/dist/types/config.types.d.ts +5 -5
- package/dist/types/config.types.d.ts.map +1 -1
- package/dist/types/config.types.js +1 -2
- package/dist/types/config.types.js.map +1 -1
- package/dist/types/copy.types.js +1 -2
- package/dist/types/copy.types.js.map +1 -1
- package/dist/types/index.d.ts +6 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +6 -22
- package/dist/types/index.js.map +1 -1
- package/dist/types/modes.types.js +1 -4
- package/dist/types/modes.types.js.map +1 -1
- package/dist/types/page.types.d.ts +6 -6
- package/dist/types/page.types.d.ts.map +1 -1
- package/dist/types/page.types.js +1 -2
- package/dist/types/page.types.js.map +1 -1
- package/package.json +41 -4
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consent OTP Input Web Component
|
|
3
|
+
*
|
|
4
|
+
* Individual digit input boxes for one-time password entry.
|
|
5
|
+
* Supports auto-focus, paste handling, and keyboard navigation.
|
|
6
|
+
* Implements Form Associated Custom Elements for proper form participation.
|
|
7
|
+
*
|
|
8
|
+
* @module components/consent-otp-input
|
|
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
|
+
import { LitElement, html, css } from 'lit';
|
|
17
|
+
import { customElement, property, state, queryAll } from 'lit/decorators.js';
|
|
18
|
+
/**
|
|
19
|
+
* ConsentOTPInput - OTP digit input boxes
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```html
|
|
23
|
+
* <consent-otp-input
|
|
24
|
+
* length="6"
|
|
25
|
+
* name="otp"
|
|
26
|
+
* ></consent-otp-input>
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @fires input - Fired on each digit entry
|
|
30
|
+
* @fires complete - Fired when all digits are entered
|
|
31
|
+
* @fires change - Fired when value changes
|
|
32
|
+
* @csspart container - The container for all digit boxes
|
|
33
|
+
* @csspart input - Individual digit input
|
|
34
|
+
* @cssprop --consent-primary - Primary brand color for focus state
|
|
35
|
+
*/
|
|
36
|
+
let ConsentOTPInput = class ConsentOTPInput extends LitElement {
|
|
37
|
+
constructor() {
|
|
38
|
+
super();
|
|
39
|
+
/**
|
|
40
|
+
* Number of OTP digits
|
|
41
|
+
*/
|
|
42
|
+
this.length = 6;
|
|
43
|
+
/**
|
|
44
|
+
* Form field name
|
|
45
|
+
*/
|
|
46
|
+
this.name = 'otp';
|
|
47
|
+
/**
|
|
48
|
+
* Current OTP value
|
|
49
|
+
*/
|
|
50
|
+
this.value = '';
|
|
51
|
+
/**
|
|
52
|
+
* Disabled state
|
|
53
|
+
*/
|
|
54
|
+
this.disabled = false;
|
|
55
|
+
/**
|
|
56
|
+
* Error state
|
|
57
|
+
*/
|
|
58
|
+
this.error = false;
|
|
59
|
+
/**
|
|
60
|
+
* Auto-focus first input on mount
|
|
61
|
+
*/
|
|
62
|
+
this.autoFocus = false;
|
|
63
|
+
/**
|
|
64
|
+
* Input type (text or number)
|
|
65
|
+
*/
|
|
66
|
+
this.inputType = 'text';
|
|
67
|
+
/**
|
|
68
|
+
* Internal digit values
|
|
69
|
+
*/
|
|
70
|
+
this.digits = [];
|
|
71
|
+
this.internals = this.attachInternals();
|
|
72
|
+
}
|
|
73
|
+
connectedCallback() {
|
|
74
|
+
super.connectedCallback();
|
|
75
|
+
this.initializeDigits();
|
|
76
|
+
}
|
|
77
|
+
initializeDigits() {
|
|
78
|
+
this.digits = Array.from({ length: this.length }, () => '');
|
|
79
|
+
if (this.value) {
|
|
80
|
+
// Filter non-digits (consistent with handleInput and handlePaste)
|
|
81
|
+
const digitsOnly = this.value.replace(/\D/g, '').slice(0, this.length);
|
|
82
|
+
const chars = digitsOnly.split('');
|
|
83
|
+
chars.forEach((char, i) => {
|
|
84
|
+
this.digits[i] = char;
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
firstUpdated() {
|
|
89
|
+
if (this.autoFocus && this.inputs.length > 0) {
|
|
90
|
+
this.inputs[0]?.focus();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
updated(changedProperties) {
|
|
94
|
+
if (changedProperties.has('value') && !changedProperties.has('digits')) {
|
|
95
|
+
this.initializeDigits();
|
|
96
|
+
}
|
|
97
|
+
if (changedProperties.has('length')) {
|
|
98
|
+
this.initializeDigits();
|
|
99
|
+
}
|
|
100
|
+
// Update form value
|
|
101
|
+
const fullValue = this.digits.join('');
|
|
102
|
+
this.internals.setFormValue(fullValue || null);
|
|
103
|
+
}
|
|
104
|
+
getFullValue() {
|
|
105
|
+
return this.digits.join('');
|
|
106
|
+
}
|
|
107
|
+
handleInput(index, e) {
|
|
108
|
+
const input = e.target;
|
|
109
|
+
let newValue = input.value;
|
|
110
|
+
// Only keep last character if multiple entered
|
|
111
|
+
if (newValue.length > 1) {
|
|
112
|
+
newValue = newValue.slice(-1);
|
|
113
|
+
}
|
|
114
|
+
// Validate input (only digits for OTP)
|
|
115
|
+
if (newValue && !/^\d$/.test(newValue)) {
|
|
116
|
+
input.value = this.digits[index] ?? '';
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.digits[index] = newValue;
|
|
120
|
+
this.digits = [...this.digits]; // Trigger update
|
|
121
|
+
input.value = newValue;
|
|
122
|
+
const fullValue = this.getFullValue();
|
|
123
|
+
this.value = fullValue;
|
|
124
|
+
// Dispatch input event
|
|
125
|
+
this.dispatchEvent(new CustomEvent('input', {
|
|
126
|
+
detail: { value: fullValue, index, digit: newValue },
|
|
127
|
+
bubbles: true,
|
|
128
|
+
composed: true,
|
|
129
|
+
}));
|
|
130
|
+
// Move to next input if digit entered
|
|
131
|
+
if (newValue && index < this.length - 1) {
|
|
132
|
+
this.inputs[index + 1]?.focus();
|
|
133
|
+
}
|
|
134
|
+
// Check if complete
|
|
135
|
+
if (fullValue.length === this.length) {
|
|
136
|
+
this.dispatchEvent(new CustomEvent('complete', {
|
|
137
|
+
detail: { value: fullValue },
|
|
138
|
+
bubbles: true,
|
|
139
|
+
composed: true,
|
|
140
|
+
}));
|
|
141
|
+
}
|
|
142
|
+
// Dispatch change event
|
|
143
|
+
this.dispatchEvent(new CustomEvent('change', {
|
|
144
|
+
detail: { value: fullValue },
|
|
145
|
+
bubbles: true,
|
|
146
|
+
composed: true,
|
|
147
|
+
}));
|
|
148
|
+
}
|
|
149
|
+
handleKeyDown(index, e) {
|
|
150
|
+
switch (e.key) {
|
|
151
|
+
case 'Backspace':
|
|
152
|
+
if (!this.digits[index] && index > 0) {
|
|
153
|
+
// Move to previous input if current is empty
|
|
154
|
+
e.preventDefault();
|
|
155
|
+
this.inputs[index - 1]?.focus();
|
|
156
|
+
this.digits[index - 1] = '';
|
|
157
|
+
this.digits = [...this.digits];
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Clear current
|
|
161
|
+
this.digits[index] = '';
|
|
162
|
+
this.digits = [...this.digits];
|
|
163
|
+
}
|
|
164
|
+
this.value = this.getFullValue();
|
|
165
|
+
break;
|
|
166
|
+
case 'ArrowLeft':
|
|
167
|
+
e.preventDefault();
|
|
168
|
+
if (index > 0) {
|
|
169
|
+
this.inputs[index - 1]?.focus();
|
|
170
|
+
}
|
|
171
|
+
break;
|
|
172
|
+
case 'ArrowRight':
|
|
173
|
+
e.preventDefault();
|
|
174
|
+
if (index < this.length - 1) {
|
|
175
|
+
this.inputs[index + 1]?.focus();
|
|
176
|
+
}
|
|
177
|
+
break;
|
|
178
|
+
case 'Delete':
|
|
179
|
+
this.digits[index] = '';
|
|
180
|
+
this.digits = [...this.digits];
|
|
181
|
+
this.value = this.getFullValue();
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
handlePaste(e) {
|
|
186
|
+
e.preventDefault();
|
|
187
|
+
const pastedData = e.clipboardData?.getData('text') || '';
|
|
188
|
+
const digits = pastedData.replace(/\D/g, '').slice(0, this.length);
|
|
189
|
+
if (digits) {
|
|
190
|
+
this.digits = Array.from({ length: this.length }, (_, i) => digits[i] || '');
|
|
191
|
+
this.value = this.getFullValue();
|
|
192
|
+
// Update inputs
|
|
193
|
+
this.requestUpdate();
|
|
194
|
+
// Focus appropriate input
|
|
195
|
+
const focusIndex = Math.min(digits.length, this.length - 1);
|
|
196
|
+
setTimeout(() => {
|
|
197
|
+
this.inputs[focusIndex]?.focus();
|
|
198
|
+
}, 0);
|
|
199
|
+
// Dispatch input event (consistent with handleInput behavior)
|
|
200
|
+
// This ensures parent components can track partial pastes
|
|
201
|
+
this.dispatchEvent(new CustomEvent('input', {
|
|
202
|
+
detail: { value: this.value, index: 0, digit: digits[0] || '' },
|
|
203
|
+
bubbles: true,
|
|
204
|
+
composed: true,
|
|
205
|
+
}));
|
|
206
|
+
// Always dispatch change event so parent components can track the value
|
|
207
|
+
this.dispatchEvent(new CustomEvent('change', {
|
|
208
|
+
detail: { value: this.value },
|
|
209
|
+
bubbles: true,
|
|
210
|
+
composed: true,
|
|
211
|
+
}));
|
|
212
|
+
// Check if complete
|
|
213
|
+
if (digits.length === this.length) {
|
|
214
|
+
this.dispatchEvent(new CustomEvent('complete', {
|
|
215
|
+
detail: { value: this.value },
|
|
216
|
+
bubbles: true,
|
|
217
|
+
composed: true,
|
|
218
|
+
}));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
handleFocus(e) {
|
|
223
|
+
const input = e.target;
|
|
224
|
+
input.select();
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Focus the first empty input or the last input
|
|
228
|
+
*/
|
|
229
|
+
focus() {
|
|
230
|
+
const emptyIndex = this.digits.findIndex((d) => !d);
|
|
231
|
+
const focusIndex = emptyIndex >= 0 ? emptyIndex : this.length - 1;
|
|
232
|
+
this.inputs[focusIndex]?.focus();
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Clear all digits
|
|
236
|
+
*/
|
|
237
|
+
clear() {
|
|
238
|
+
this.digits = Array.from({ length: this.length }, () => '');
|
|
239
|
+
this.value = '';
|
|
240
|
+
this.inputs[0]?.focus();
|
|
241
|
+
}
|
|
242
|
+
renderDigitInput(index) {
|
|
243
|
+
const digit = this.digits[index] || '';
|
|
244
|
+
const isFilled = digit !== '';
|
|
245
|
+
return html `
|
|
246
|
+
<input
|
|
247
|
+
part="input"
|
|
248
|
+
type=${this.inputType}
|
|
249
|
+
inputmode="numeric"
|
|
250
|
+
pattern="[0-9]*"
|
|
251
|
+
maxlength="1"
|
|
252
|
+
.value=${digit}
|
|
253
|
+
?disabled=${this.disabled}
|
|
254
|
+
placeholder="○"
|
|
255
|
+
class=${isFilled ? 'filled' : ''}
|
|
256
|
+
@input=${(e) => this.handleInput(index, e)}
|
|
257
|
+
@keydown=${(e) => this.handleKeyDown(index, e)}
|
|
258
|
+
@paste=${this.handlePaste}
|
|
259
|
+
@focus=${this.handleFocus}
|
|
260
|
+
aria-label=${`Digit ${index + 1} of ${this.length}`}
|
|
261
|
+
/>
|
|
262
|
+
`;
|
|
263
|
+
}
|
|
264
|
+
render() {
|
|
265
|
+
return html `
|
|
266
|
+
<div class="container" part="container" role="group" aria-label="One-time password input">
|
|
267
|
+
${Array.from({ length: this.length }, (_, i) => this.renderDigitInput(i))}
|
|
268
|
+
</div>
|
|
269
|
+
`;
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
// Enable form association
|
|
273
|
+
ConsentOTPInput.formAssociated = true;
|
|
274
|
+
ConsentOTPInput.styles = css `
|
|
275
|
+
:host {
|
|
276
|
+
display: block;
|
|
277
|
+
--_primary: var(--consent-primary, #2563eb);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.container {
|
|
281
|
+
display: flex;
|
|
282
|
+
gap: 0.5rem;
|
|
283
|
+
justify-content: center;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
input {
|
|
287
|
+
width: 2.75rem;
|
|
288
|
+
height: 3.5rem;
|
|
289
|
+
text-align: center;
|
|
290
|
+
font-size: 1.5rem;
|
|
291
|
+
font-weight: 600;
|
|
292
|
+
font-family: inherit;
|
|
293
|
+
color: #111827;
|
|
294
|
+
background: white;
|
|
295
|
+
border: 1px solid #d1d5db;
|
|
296
|
+
border-radius: 0.5rem;
|
|
297
|
+
outline: none;
|
|
298
|
+
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
299
|
+
|
|
300
|
+
/* Hide spinner for number inputs */
|
|
301
|
+
-moz-appearance: textfield;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
input::-webkit-outer-spin-button,
|
|
305
|
+
input::-webkit-inner-spin-button {
|
|
306
|
+
-webkit-appearance: none;
|
|
307
|
+
margin: 0;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
input:focus {
|
|
311
|
+
border-color: var(--_primary);
|
|
312
|
+
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
input:disabled {
|
|
316
|
+
background: #f9fafb;
|
|
317
|
+
cursor: not-allowed;
|
|
318
|
+
opacity: 0.6;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
input::placeholder {
|
|
322
|
+
color: #d1d5db;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/* Error state */
|
|
326
|
+
:host([error]) input {
|
|
327
|
+
border-color: #ef4444;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
:host([error]) input:focus {
|
|
331
|
+
border-color: #ef4444;
|
|
332
|
+
box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/* Filled state */
|
|
336
|
+
input.filled {
|
|
337
|
+
border-color: var(--_primary);
|
|
338
|
+
background: #f0f9ff;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/* Responsive: smaller on mobile */
|
|
342
|
+
@media (max-width: 400px) {
|
|
343
|
+
input {
|
|
344
|
+
width: 2.25rem;
|
|
345
|
+
height: 3rem;
|
|
346
|
+
font-size: 1.25rem;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.container {
|
|
350
|
+
gap: 0.375rem;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
`;
|
|
354
|
+
__decorate([
|
|
355
|
+
property({ type: Number })
|
|
356
|
+
], ConsentOTPInput.prototype, "length", void 0);
|
|
357
|
+
__decorate([
|
|
358
|
+
property({ type: String })
|
|
359
|
+
], ConsentOTPInput.prototype, "name", void 0);
|
|
360
|
+
__decorate([
|
|
361
|
+
property({ type: String })
|
|
362
|
+
], ConsentOTPInput.prototype, "value", void 0);
|
|
363
|
+
__decorate([
|
|
364
|
+
property({ type: Boolean, reflect: true })
|
|
365
|
+
], ConsentOTPInput.prototype, "disabled", void 0);
|
|
366
|
+
__decorate([
|
|
367
|
+
property({ type: Boolean, reflect: true })
|
|
368
|
+
], ConsentOTPInput.prototype, "error", void 0);
|
|
369
|
+
__decorate([
|
|
370
|
+
property({ type: Boolean, attribute: 'auto-focus' })
|
|
371
|
+
], ConsentOTPInput.prototype, "autoFocus", void 0);
|
|
372
|
+
__decorate([
|
|
373
|
+
property({ type: String, attribute: 'input-type' })
|
|
374
|
+
], ConsentOTPInput.prototype, "inputType", void 0);
|
|
375
|
+
__decorate([
|
|
376
|
+
state()
|
|
377
|
+
], ConsentOTPInput.prototype, "digits", void 0);
|
|
378
|
+
__decorate([
|
|
379
|
+
queryAll('input')
|
|
380
|
+
], ConsentOTPInput.prototype, "inputs", void 0);
|
|
381
|
+
ConsentOTPInput = __decorate([
|
|
382
|
+
customElement('consent-otp-input')
|
|
383
|
+
], ConsentOTPInput);
|
|
384
|
+
export { ConsentOTPInput };
|
|
385
|
+
//# sourceMappingURL=consent-otp-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consent-otp-input.js","sourceRoot":"","sources":["../../src/components/consent-otp-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consent Permissions Web Component
|
|
3
|
+
*
|
|
4
|
+
* Renders a list of permission scopes that the agent is requesting.
|
|
5
|
+
* Can be interactive (with checkboxes) or display-only.
|
|
6
|
+
*
|
|
7
|
+
* @module components/consent-permissions
|
|
8
|
+
*/
|
|
9
|
+
import { LitElement, TemplateResult } from 'lit';
|
|
10
|
+
/**
|
|
11
|
+
* Permission item structure
|
|
12
|
+
*/
|
|
13
|
+
export interface PermissionItem {
|
|
14
|
+
/** Unique scope identifier */
|
|
15
|
+
id: string;
|
|
16
|
+
/** Human-readable label */
|
|
17
|
+
label: string;
|
|
18
|
+
/** Optional description */
|
|
19
|
+
description?: string;
|
|
20
|
+
/** Whether this permission is required (non-optional) */
|
|
21
|
+
required?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* ConsentPermissions - Permission list component
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```html
|
|
28
|
+
* <!-- Display-only mode -->
|
|
29
|
+
* <consent-permissions
|
|
30
|
+
* scopes='["read:profile", "write:data"]'
|
|
31
|
+
* ></consent-permissions>
|
|
32
|
+
*
|
|
33
|
+
* <!-- Interactive mode -->
|
|
34
|
+
* <consent-permissions
|
|
35
|
+
* scopes='[{"id": "read:profile", "label": "Read profile", "required": true}]'
|
|
36
|
+
* interactive
|
|
37
|
+
* ></consent-permissions>
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @fires change - Fired when permissions selection changes (interactive mode)
|
|
41
|
+
* @csspart list - The permissions list container
|
|
42
|
+
* @csspart item - Individual permission item
|
|
43
|
+
* @cssprop --consent-primary - Primary brand color for icons/checkboxes
|
|
44
|
+
*/
|
|
45
|
+
export declare class ConsentPermissions extends LitElement {
|
|
46
|
+
/**
|
|
47
|
+
* Permission scopes - can be string array or PermissionItem array
|
|
48
|
+
* Accepts JSON string for attribute binding
|
|
49
|
+
*/
|
|
50
|
+
scopes: (string | PermissionItem)[];
|
|
51
|
+
/**
|
|
52
|
+
* Enable interactive mode with checkboxes
|
|
53
|
+
*/
|
|
54
|
+
interactive: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Pre-select all scopes in interactive mode (default: only required scopes are pre-selected)
|
|
57
|
+
*/
|
|
58
|
+
selectAll: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Icon to show next to each permission
|
|
61
|
+
* Options: 'check', 'bullet', 'shield'
|
|
62
|
+
*/
|
|
63
|
+
iconStyle: 'check' | 'bullet' | 'shield';
|
|
64
|
+
/**
|
|
65
|
+
* Internal state for selected permissions in interactive mode
|
|
66
|
+
*/
|
|
67
|
+
private selectedScopes;
|
|
68
|
+
/**
|
|
69
|
+
* Track previous scope IDs to detect newly added scopes
|
|
70
|
+
* (used to distinguish new scopes from user-deselected scopes)
|
|
71
|
+
*/
|
|
72
|
+
private previousScopeIds;
|
|
73
|
+
static styles: import("lit").CSSResult;
|
|
74
|
+
connectedCallback(): void;
|
|
75
|
+
protected updated(changedProperties: Map<string, unknown>): void;
|
|
76
|
+
/**
|
|
77
|
+
* Re-initialize selected scopes when scopes change dynamically.
|
|
78
|
+
* Preserves existing valid selections while adding new scopes based on selectAll/required settings.
|
|
79
|
+
*/
|
|
80
|
+
private reinitializeSelectedScopes;
|
|
81
|
+
private initializeSelectedScopes;
|
|
82
|
+
/**
|
|
83
|
+
* Normalize scopes to PermissionItem format
|
|
84
|
+
*/
|
|
85
|
+
private get normalizedScopes();
|
|
86
|
+
/**
|
|
87
|
+
* Convert scope ID to human-readable label
|
|
88
|
+
*/
|
|
89
|
+
private formatScopeLabel;
|
|
90
|
+
/**
|
|
91
|
+
* Get currently selected scopes
|
|
92
|
+
*/
|
|
93
|
+
getSelectedScopes(): string[];
|
|
94
|
+
private handleCheckboxChange;
|
|
95
|
+
private renderIcon;
|
|
96
|
+
private renderPermissionItem;
|
|
97
|
+
render(): TemplateResult<1>;
|
|
98
|
+
}
|
|
99
|
+
declare global {
|
|
100
|
+
interface HTMLElementTagNameMap {
|
|
101
|
+
'consent-permissions': ConsentPermissions;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=consent-permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consent-permissions.d.ts","sourceRoot":"","sources":["../../src/components/consent-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;AAG5D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBACa,kBAAmB,SAAQ,UAAU;IAChD;;;OAGG;IAuBH,MAAM,EAAE,CAAC,MAAM,GAAG,cAAc,CAAC,EAAE,CAAM;IAEzC;;OAEG;IAEH,WAAW,UAAS;IAEpB;;OAEG;IAEH,SAAS,UAAS;IAElB;;;OAGG;IAEH,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAW;IAEnD;;OAEG;IAEH,OAAO,CAAC,cAAc,CAA0B;IAEhD;;;OAGG;IACH,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAgB,MAAM,0BA6IpB;IAEO,iBAAiB;cAQP,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAOlE;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAsClC,OAAO,CAAC,wBAAwB;IAqBhC;;OAEG;IACH,OAAO,KAAK,gBAAgB,GAU3B;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACI,iBAAiB,IAAI,MAAM,EAAE;IAIpC,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,oBAAoB;IAoCnB,MAAM;CAahB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,qBAAqB,EAAE,kBAAkB,CAAC;KAC3C;CACF"}
|